LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgSGVhZGVyIGZvciBkZWZpbnRpb25zIGFuZCBtYWNyb3MgaW50ZXJuYWwgdG8gdGhlIGRydmllci4KICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogU09GVFdBUkUgTElDRU5TRQogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwogKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICoKICogQ29weXJpZ2h0IKkgMjAwMyBBZ2VyZSBTeXN0ZW1zIEluYy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwogKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgZGlzdHJpYnV0aW9uLgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBEaXNjbGFpbWVyCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKICogREFNQUdFLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfX1dBVkVMQU4yX0hfXwojZGVmaW5lIF9fV0FWRUxBTjJfSF9fCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgaW5jbHVkZSBmaWxlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgojaWZkZWYgQlVTX1BDTUNJQQojaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQojaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KI2VuZGlmCiNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgojaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgojaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgojaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgojZW5kaWYgIC8vIEJVU19QQ01DSUEKCiNpZmRlZiBIQVNfV0lSRUxFU1NfRVhURU5TSU9OUwojaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KI2lmIFdJUkVMRVNTX0VYVCA+IDEzCiNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgojZW5kaWYgLy8gV0lSRUxFU1NfRVhUID4gMTMKI2RlZmluZSBVU0VfREJNCiNkZWZpbmUgUkVUVVJOX0NVUlJFTlRfTkVUV09SS05BTUUKI2RlZmluZSBVU0VfRlJFUVVFTkNZCiNlbmRpZiAvLyBIQVNfV0lSRUxFU1NfRVhURU5TSU9OUy8KCiNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgY29uc3RhbnQgZGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBwX3U4ICAgIF9fdTgKI2RlZmluZSBwX3M4ICAgIF9fczgKI2RlZmluZSBwX3UxNiAgIF9fdTE2CiNkZWZpbmUgcF9zMTYgICBfX3MxNgojZGVmaW5lIHBfdTMyICAgX191MzIKI2RlZmluZSBwX3MzMiAgIF9fczMyCiNkZWZpbmUgcF9jaGFyICBjaGFyCgojZGVmaW5lIE1BWF9LRVlfTEVOICAgICAgICAgKDIgKyAoMTMgKiAyKSkgLy8gMHggcGx1cyAxMyBoZXggZGlnaXQgcGFpcnMKI2RlZmluZSBNQl9TSVpFICAgICAgICAgICAgIDEwMjQKI2RlZmluZSBNQVhfRU5DX0xFTiAgICAgICAgIDEwNAoKI2RlZmluZSBNQVhfU0NBTl9USU1FX1NFQyAgIDgKI2RlZmluZSBNQVhfTkFQUyAgICAgICAgICAgIDMyCgojZGVmaW5lIENGR19NQl9JTkZPICAgICAgICAgMHgwODIwCQkvL01haWwgQm94IEluZm8gQmxvY2sKCiNkZWZpbmUgTlVNX1dEU19QT1JUUyAgICAgICA2CgojZGVmaW5lIFdWTEFOX01BWF9MT09LQUhFQUQgKEhDRl9NQVhfTVNHKzQ2KSAvKiBhcyBwZXIgczAwMDVNSUNfNC5kb2MgKi8KCgovKiBNaW4vTWF4L0RlZmF1bHQgUGFyYW1ldGVyIFZhbHVlcyAqLwojaWYgMCAvLzs/IChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9BUAovLzs/IHdoeSB0aGlzIGRpZmZlcmVuY2UgZGVwZW5kaW5nIG9uIGNvbXBpbGUgb3B0aW9uLCBzZWVtcyB0byBtZSBpdCBzaG91bGQgZGVwZW5kIG9uIHJ1bnRpbWUgaWYgYW55dGhpbmcKI2RlZmluZSBQQVJNX0RFRkFVTFRfU1NJRCAgICAgICAgICAgICAgICAgICAgICAgIkxpbnV4QVAiCiNlbHNlCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1NTSUQgICAgICAgICAgICAgICAgICAgICAgICJBTlkiCiNlbmRpZiAvLyBIQ0ZfVFlQRV9BUAoKI2RlZmluZSBQQVJNX01JTl9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX05BTUVfTEVOICAgICAgICAgICAgICAgICAgICAgICAzMgoKCi8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgcGVydGFpbiB0byBtb2R1bGUgYW5kIHByb2ZpbGUgcGFyYW1ldGVycyAqLwovLyAjZGVmaW5lIFBBUk1fQVBfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUE1vZGUKLy8gI2RlZmluZSBQQVJNX05BTUVfQVBfTU9ERQkJCQkJCVRFWFQoIkFQTW9kZSIpCi8vICNkZWZpbmUgUEFSTV9ERUZBVUxUX0FQX01PREUJCQkJCUZBTFNFCgojZGVmaW5lIFBBUk1fQVVUSEVOVElDQVRJT04gICAgICAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbgojZGVmaW5lIFBBUk1fTkFNRV9BVVRIRU5USUNBVElPTgkJCQlURVhUKCJBdXRoZW50aWNhdGlvbiIpCiNkZWZpbmUgUEFSTV9NSU5fQVVUSEVOVElDQVRJT04gICAgICAgICAgICAgICAgIDEKI2RlZmluZSBQQVJNX01BWF9BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAgICAgMgojZGVmaW5lIFBBUk1fREVGQVVMVF9BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAxCgojZGVmaW5lIFBBUk1fQVVUSF9LRVlfTUdNVF9TVUlURSAgICAgICAgICAgICAgICBBdXRoS2V5TWdtdFN1aXRlCiNkZWZpbmUgUEFSTV9OQU1FX0FVVEhfS0VZX01HTVRfU1VJVEUgICAgICAgICAgIFRFWFQoIkF1dGhLZXlNZ210U3VpdGUiKQojZGVmaW5lIFBBUk1fTUlOX0FVVEhfS0VZX01HTVRfU1VJVEUgICAgICAgICAgICAwCiNkZWZpbmUgUEFSTV9NQVhfQVVUSF9LRVlfTUdNVF9TVUlURSAgICAgICAgICAgIDQKI2RlZmluZSBQQVJNX0RFRkFVTFRfQVVUSF9LRVlfTUdNVF9TVUlURSAgICAgICAgMAoKI2RlZmluZSBQQVJNX0JSU0NfMkdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgQlJTQzJHSHoKI2RlZmluZSBQQVJNX05BTUVfQlJTQ18yR0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiQlJTQzJHSHoiKQojZGVmaW5lIFBBUk1fTUlOX0JSU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKI2RlZmluZSBQQVJNX01BWF9CUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGCiNkZWZpbmUgUEFSTV9ERUZBVUxUX0JSU0NfMkdIWiAgICAgICAgICAgICAgICAgIDB4MDAwRgoKI2RlZmluZSBQQVJNX0JSU0NfNUdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgQlJTQzVHSHoKI2RlZmluZSBQQVJNX05BTUVfQlJTQ181R0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiQlJTQzVHSHoiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9CUlNDXzVHSFogICAgICAgICAgICAgICAgICAweDAxNTAKCiNkZWZpbmUgUEFSTV9DT0VYSVNURU5DRSAgICAgICAgICAgICAgICAgICAgICAgIENvZXhpc3RlbmNlCiNkZWZpbmUgUEFSTV9OQU1FX0NPRVhJU1RFTkNFICAgICAgICAgICAgICAgICAgIFRFWFQoIkNvZXhpc3RlbmNlIikKI2RlZmluZSBQQVJNX01JTl9DT0VYSVNURU5DRSAgICAgICAgICAgICAgICAgICAgMHgwMDAwCiNkZWZpbmUgUEFSTV9NQVhfQ09FWElTVEVOQ0UgICAgICAgICAgICAgICAgICAgIDB4MDAwNwojZGVmaW5lIFBBUk1fREVGQVVMVF9DT0VYSVNURU5DRSAgICAgICAgICAgICAgICAweDAwMDAKCiNkZWZpbmUgUEFSTV9DT05GSUdVUkVEICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZWQKI2RlZmluZSBQQVJNX05BTUVfQ09ORklHVVJFRAkJCQkJVEVYVCgiQ29uZmlndXJlZCIpCgojZGVmaW5lIFBBUk1fQ09OTkVDVElPTl9DT05UUk9MICAgICAgICAgICAgICAgICBDb25uZWN0aW9uQ29udHJvbAojZGVmaW5lIFBBUk1fTkFNRV9DT05ORUNUSU9OX0NPTlRST0wgICAgICAgICAgICBURVhUKCJDb25uZWN0aW9uQ29udHJvbCIpCiNkZWZpbmUgUEFSTV9NSU5fQ09OTkVDVElPTl9DT05UUk9MICAgICAgICAgICAgIDAKI2RlZmluZSBQQVJNX01BWF9DT05ORUNUSU9OX0NPTlRST0wgICAgICAgICAgICAgMwojZGVmaW5lIFBBUk1fREVGQVVMVF9DT05ORUNUSU9OX0NPTlRST0wgICAgICAgICAyCgojZGVmaW5lIFBBUk1fQ1JFQVRFX0lCU1MgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVJQlNTCiNkZWZpbmUgUEFSTV9OQU1FX0NSRUFURV9JQlNTICAgICAgICAgICAgICAgICAgIFRFWFQoIkNyZWF0ZUlCU1MiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9DUkVBVEVfSUJTUyAgICAgICAgICAgICAgICBGQUxTRQojZGVmaW5lIFBBUk1fREVGQVVMVF9DUkVBVEVfSUJTU19TVFIgICAgICAgICAgICAiTiIKCiNkZWZpbmUgUEFSTV9ERUJVR19GTEFHICAgICAgICAgICAgIAkgICAgCURlYnVnRmxhZwojZGVmaW5lIFBBUk1fTkFNRV9ERUJVR19GTEFHICAgICAgICAgICAgCQlURVhUKCJEZWJ1Z0ZsYWciKQojZGVmaW5lIFBBUk1fTUlOX0RFQlVHX0ZMQUcgICAgICAgICAgICAgCQkwCiNkZWZpbmUgUEFSTV9NQVhfREVCVUdfRkxBRyAgICAgICAgICAgICAJCTB4RkZGRgojZGVmaW5lIFBBUk1fREVGQVVMVF9ERUJVR19GTEFHICAgICAgICAgCQkweEZGRkYKCiNkZWZpbmUgUEFSTV9ERVNJUkVEX1NTSUQgICAgICAgICAgICAgICAgICAgICAgIERlc2lyZWRTU0lECiNkZWZpbmUgUEFSTV9OQU1FX0RFU0lSRURfU1NJRCAgICAgICAgICAgICAgICAgIFRFWFQoIkRlc2lyZWRTU0lEIikKCiNkZWZpbmUgUEFSTV9ET1dOTE9BRF9GSVJNV0FSRSAgICAgICAgICAgICAgICAgIERvd25sb2FkRmlybXdhcmUKI2RlZmluZSBQQVJNX05BTUVfRE9XTkxPQURfRklSTVdBUkUgICAgICAgICAgICAgVEVYVCgiRG93bmxvYWRGaXJtd2FyZSIpCgojZGVmaW5lIFBBUk1fRFJJVkVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJFbmFibGUKI2RlZmluZSBQQVJNX05BTUVfRFJJVkVSX0VOQUJMRQkJCQkJVEVYVCgiRHJpdmVyRW5hYmxlIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfRFJJVkVSX0VOQUJMRQkJCQlUUlVFCgojZGVmaW5lIFBBUk1fRU5BQkxFX0VOQ1JZUFRJT04gICAgICAgICAgICAgICAgICBFbmFibGVFbmNyeXB0aW9uCiNkZWZpbmUgUEFSTV9OQU1FX0VOQUJMRV9FTkNSWVBUSU9OICAgICAgICAgICAgIFRFWFQoIkVuYWJsZUVuY3J5cHRpb24iKQojZGVmaW5lIFBBUk1fTUlOX0VOQUJMRV9FTkNSWVBUSU9OICAgICAgICAgICAgICAwCiNkZWZpbmUgUEFSTV9NQVhfRU5BQkxFX0VOQ1JZUFRJT04gICAgICAgICAgICAgIDcKI2RlZmluZSBQQVJNX0RFRkFVTFRfRU5BQkxFX0VOQ1JZUFRJT04gICAgICAgICAgMAoKI2RlZmluZSBQQVJNX0VOQ1JZUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgRW5jcnlwdGlvbgojZGVmaW5lIFBBUk1fTkFNRV9FTkNSWVBUSU9OICAgICAgICAgICAgICAgICAgICBURVhUKCJFbmNyeXB0aW9uIikKCiNkZWZpbmUgUEFSTV9FWENMVURFX1VORU5DUllQVEVEICAgICAgICAgICAgICAgIEV4Y2x1ZGVVbmVuY3J5cHRlZAojZGVmaW5lIFBBUk1fTkFNRV9FWENMVURFX1VORU5DUllQVEVEICAgICAgICAgICBURVhUKCJFeGNsdWRlVW5lbmNyeXB0ZWQiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9FWENMVURFX1VORU5DUllQVEVEICAgICAgICBUUlVFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX0VYQ0xVREVfVU5FTkNSWVBURURfU1RSICAgICJOIgoKI2RlZmluZSBQQVJNX0lOVFJBX0JTU19SRUxBWSAgICAgICAgICAgICAgICAgICAgSW50cmFCU1NSZWxheQojZGVmaW5lIFBBUk1fTkFNRV9JTlRSQV9CU1NfUkVMQVkgICAgICAgICAgICAgICBURVhUKCJJbnRyYUJTU1JlbGF5IikKI2RlZmluZSBQQVJNX0RFRkFVTFRfSU5UUkFfQlNTX1JFTEFZICAgICAgICAgICAgVFJVRQojZGVmaW5lIFBBUk1fREVGQVVMVF9JTlRSQV9CU1NfUkVMQVlfU1RSICAgICAgICAiWSIKCiNkZWZpbmUgUEFSTV9LRVkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTEKI2RlZmluZSBQQVJNX05BTUVfS0VZMSAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5MSIpCiNkZWZpbmUgUEFSTV9LRVkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTIKI2RlZmluZSBQQVJNX05BTUVfS0VZMiAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5MiIpCiNkZWZpbmUgUEFSTV9LRVkzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTMKI2RlZmluZSBQQVJNX05BTUVfS0VZMyAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5MyIpCiNkZWZpbmUgUEFSTV9LRVk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTQKI2RlZmluZSBQQVJNX05BTUVfS0VZNCAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5NCIpCgovLzs/ICNkZWZpbmUgUEFSTV9LRVlfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgIEFzY2lpSGV4Ci8vOz8gI2RlZmluZSBQQVJNX05BTUVfS0VZX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgVEVYVCgiQXNjaWlIZXgiKQoKI2RlZmluZSBQQVJNX0xPQURfQkFMQU5DSU5HICAgICAgICAgICAgICAgICAgICAgTG9hZEJhbGFuY2luZwojZGVmaW5lIFBBUk1fTkFNRV9MT0FEX0JBTEFOQ0lORyAgICAgICAgICAgICAgICBURVhUKCJMb2FkQmFsYW5jaW5nIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfTE9BRF9CQUxBTkNJTkcgICAgICAgICAgICAgVFJVRQojZGVmaW5lIFBBUk1fREVGQVVMVF9MT0FEX0JBTEFOQ0lOR19TVFIgICAgICAgICAiWSIKCiNkZWZpbmUgUEFSTV9NQVhfREFUQV9MRU5HVEggICAgICAgICAgICAgICAgICAgIE1heERhdGFMZW5ndGgKI2RlZmluZSBQQVJNX05BTUVfTUFYX0RBVEFfTEVOR1RICQkJCVRFWFQoIk1heERhdGFMZW5ndGgiKQoKI2RlZmluZSBQQVJNX01BWF9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4U2xlZXBEdXJhdGlvbgojZGVmaW5lIFBBUk1fTkFNRV9NQVhfU0xFRVAgICAgICAgICAgICAgICAgICAgICBURVhUKCJNYXhTbGVlcER1cmF0aW9uIikKI2RlZmluZSBQQVJNX01JTl9NQVhfUE1fU0xFRVAgICAgICAgICAgICAgICAgICAgMQkJCQkJCQkJLy87P25hbWVzIG5lYXJseSByaWdodD8KI2RlZmluZSBQQVJNX01BWF9NQVhfUE1fU0xFRVAgICAgICAgICAgICAgICAgICAgNjU1MzUKI2RlZmluZSBQQVJNX0RFRkFVTFRfTUFYX1BNX1NMRUVQICAgICAgICAgICAgICAgMTAwCgojZGVmaW5lIFBBUk1fTUVESVVNX0RJU1RSSUJVVElPTiAgICAgICAgICAgICAgICBNZWRpdW1EaXN0cmlidXRpb24KI2RlZmluZSBQQVJNX05BTUVfTUVESVVNX0RJU1RSSUJVVElPTiAgICAgICAgICAgVEVYVCgiTWVkaXVtRGlzdHJpYnV0aW9uIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfTUVESVVNX0RJU1RSSUJVVElPTiAgICAgICAgVFJVRQojZGVmaW5lIFBBUk1fREVGQVVMVF9NRURJVU1fRElTVFJJQlVUSU9OX1NUUiAgICAiWSIKCiNkZWZpbmUgUEFSTV9NSUNST1dBVkVfUk9CVVNUTkVTUyAgICAgICAgICAgICAgIE1pY3JvV2F2ZVJvYnVzdG5lc3MKI2RlZmluZSBQQVJNX05BTUVfTUlDUk9XQVZFX1JPQlVTVE5FU1MgICAgICAgICAgVEVYVCgiTWljcm9XYXZlUm9idXN0bmVzcyIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01JQ1JPV0FWRV9ST0JVU1RORVNTICAgICAgIEZBTFNFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01JQ1JPV0FWRV9ST0JVU1RORVNTX1NUUiAgICJOIgoKI2RlZmluZSBQQVJNX01VTFRJQ0FTVF9QTV9CVUZGRVJJTkcgICAgICAgICAgICAgTXVsdGljYXN0UE1CdWZmZXJpbmcKI2RlZmluZSBQQVJNX05BTUVfTVVMVElDQVNUX1BNX0JVRkZFUklORwkgICAgVEVYVCgiTXVsdGljYXN0UE1CdWZmZXJpbmciKQojZGVmaW5lIFBBUk1fREVGQVVMVF9NVUxUSUNBU1RfUE1fQlVGRkVSSU5HICAgICBUUlVFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01VTFRJQ0FTVF9QTV9CVUZGRVJJTkdfU1RSICJZIgoKI2RlZmluZSBQQVJNX01VTFRJQ0FTVF9SQVRFICAgICAgICAgICAgICAgICAgICAgTXVsdGljYXN0UmF0ZQojZGVmaW5lIFBBUk1fTkFNRV9NVUxUSUNBU1RfUkFURSAgICAgICAgICAgICAgICBURVhUKCJNdWx0aWNhc3RSYXRlIikKI2lmZGVmIFdBUlAKI2RlZmluZSBQQVJNX01JTl9NVUxUSUNBU1RfUkFURSAgICAgICAgICAgICAgICAgMHgwMDAxCiNkZWZpbmUgUEFSTV9NQVhfTVVMVElDQVNUX1JBVEUgICAgICAgICAgICAgICAgIDB4MGZmZgojZGVmaW5lIFBBUk1fREVGQVVMVF9NVUxUSUNBU1RfUkFURV8yR0haICAgICAgICAweDAwMDQKI2RlZmluZSBQQVJNX0RFRkFVTFRfTVVMVElDQVNUX1JBVEVfNUdIWiAgICAgICAgMHgwMDEwCiNlbHNlCiNkZWZpbmUgUEFSTV9NSU5fTVVMVElDQVNUX1JBVEUgICAgICAgICAgICAgICAgIDB4MDAwMQojZGVmaW5lIFBBUk1fTUFYX01VTFRJQ0FTVF9SQVRFICAgICAgICAgICAgICAgICAweDAwMDQKI2RlZmluZSBQQVJNX0RFRkFVTFRfTVVMVElDQVNUX1JBVEVfMkdIWiAgICAgICAgMHgwMDAyCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01VTFRJQ0FTVF9SQVRFXzVHSFogICAgICAgIDB4MDAwMAojZW5kaWYgIC8vIFdBUlAKCiNkZWZpbmUgUEFSTV9NVUxUSUNBU1RfUlggICAgICAgICAgICAgICAgICAgICAgIE11bHRpY2FzdFJlY2VpdmUKI2RlZmluZSBQQVJNX05BTUVfTVVMVElDQVNUX1JYICAgICAgICAgICAgICAgICAgVEVYVCgiTXVsdGljYXN0UmVjZWl2ZSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01VTFRJQ0FTVF9SWCAgICAgICAgICAgICAgIFRSVUUKI2RlZmluZSBQQVJNX0RFRkFVTFRfTVVMVElDQVNUX1JYX1NUUiAgICAgICAgICAgIlkiCgojZGVmaW5lIFBBUk1fTkVUV09SS19BRERSICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQWRkcmVzcwojZGVmaW5lIFBBUk1fTkFNRV9ORVRXT1JLX0FERFIgICAgICAgICAgICAgICAgICBURVhUKCJOZXR3b3JrQWRkcmVzcyIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX05FVFdPUktfQUREUiAgICAgICAgICAgICAgIHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9CgojZGVmaW5lIFBBUk1fTkVUV09SS19UWVBFICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVHlwZQojZGVmaW5lIFBBUk1fTkFNRV9ORVRXT1JLX1RZUEUJCQkJCVRFWFQoIk5ldHdvcmtUeXBlIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfTkVUV09SS19UWVBFICAgCQkJMAoKI2RlZmluZSBQQVJNX09XTl9BVElNX1dJTkRPVyAgICAgICAgICAgICAgICAgICAgT3duQVRJTVdpbmRvdwojZGVmaW5lIFBBUk1fTkFNRV9PV05fQVRJTV9XSU5ET1cJCQkJVEVYVCgiT3duQVRJTVdpbmRvdyIpCiNkZWZpbmUgUEFSTV9NSU5fT1dOX0FUSU1fV0lORE9XICAgICAgICAgICAgICAgIDAKI2RlZmluZSBQQVJNX01BWF9PV05fQVRJTV9XSU5ET1cgICAgICAgICAgICAgICAgMTAwCiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9BVElNX1dJTkRPVyAgICAgICAgICAgIDAKCiNkZWZpbmUgUEFSTV9PV05fQkVBQ09OX0lOVEVSVkFMICAgICAgICAgICAgICAgIE93bkJlYWNvbkludGVydmFsCiNkZWZpbmUgUEFSTV9OQU1FX09XTl9CRUFDT05fSU5URVJWQUwgICAgICAgICAgIFRFWFQoIk93bkJlYWNvbkludGVydmFsIikKI2RlZmluZSBQQVJNX01JTl9PV05fQkVBQ09OX0lOVEVSVkFMICAgICAgICAgICAgMjAKI2RlZmluZSBQQVJNX01BWF9PV05fQkVBQ09OX0lOVEVSVkFMICAgICAgICAgICAgMjAwCiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9CRUFDT05fSU5URVJWQUwgICAgICAgIDEwMAoKI2RlZmluZSBQQVJNX09XTl9DSEFOTkVMICAgICAgICAgICAgICAgICAgICAgICAgT3duQ2hhbm5lbAojZGVmaW5lIFBBUk1fTkFNRV9PV05fQ0hBTk5FTCAgICAgICAgICAgICAgICAgICBURVhUKCJPd25DaGFubmVsIikKI2RlZmluZSBQQVJNX01JTl9PV05fQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX09XTl9DSEFOTkVMICAgICAgICAgICAgICAgICAgICAxNjEKI2RlZmluZSBQQVJNX0RFRkFVTFRfT1dOX0NIQU5ORUwgICAgICAgICAgICAgICAgMTAKCiNkZWZpbmUgUEFSTV9PV05fRFRJTV9QRVJJT0QgICAgICAgICAgICAgICAgICAgIE93bkRUSU1QZXJpb2QKI2RlZmluZSBQQVJNX05BTUVfT1dOX0RUSU1fUEVSSU9ECSAgICAgICAgICAgIFRFWFQoIk93bkRUSU1QZXJpb2QiKQojZGVmaW5lIFBBUk1fTUlOX09XTl9EVElNX1BFUklPRCAgICAgICAgICAgICAgICAxCiNkZWZpbmUgUEFSTV9NQVhfT1dOX0RUSU1fUEVSSU9EICAgICAgICAgICAgICAgIDY1NTM1CiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9EVElNX1BFUklPRCAgICAgICAgICAgIDEKCiNkZWZpbmUgUEFSTV9PV05fTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIE93bk5hbWUKI2RlZmluZSBQQVJNX05BTUVfT1dOX05BTUUgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiT3duTmFtZSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9OQU1FICAgICAgICAgICAgICAgICAgICJMaW51eCIKCiNkZWZpbmUgUEFSTV9PV05fU1NJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIE93blNTSUQKI2RlZmluZSBQQVJNX05BTUVfT1dOX1NTSUQgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiT3duU1NJRCIpCgojZGVmaW5lIFBBUk1fUE1fRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICBQTUVuYWJsZWQKI2RlZmluZSBQQVJNX05BTUVfUE1fRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgVEVYVCgiUE1FbmFibGVkIikKI2RlZmluZSBQQVJNX01BWF9QTV9FTkFCTEVECQkJCQkJMwoKI2RlZmluZSBQQVJNX1BNRVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1FUFMKI2RlZmluZSBQQVJNX05BTUVfUE1FUFMgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiUE1FUFMiKQoKI2RlZmluZSBQQVJNX1BNX0hPTERPVkVSX0RVUkFUSU9OICAgICAgICAgICAgICAgUE1Ib2xkb3ZlckR1cmF0aW9uCiNkZWZpbmUgUEFSTV9OQU1FX1BNX0hPTERPVkVSX0RVUkFUSU9OICAgICAgICAgIFRFWFQoIlBNSG9sZG92ZXJEdXJhdGlvbiIpCiNkZWZpbmUgUEFSTV9NSU5fUE1fSE9MRE9WRVJfRFVSQVRJT04gICAgICAgICAgIDEKI2RlZmluZSBQQVJNX01BWF9QTV9IT0xET1ZFUl9EVVJBVElPTiAgICAgICAgICAgMTAwMAojZGVmaW5lIFBBUk1fREVGQVVMVF9QTV9IT0xET1ZFUl9EVVJBVElPTiAgICAgICAxMDAKCiNkZWZpbmUgUEFSTV9QTV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyTW9kZQojZGVmaW5lIFBBUk1fTkFNRV9QTV9NT0RFICAgICAgICAgICAgICAgICAgICAgICBURVhUKCJQb3dlck1vZGUiKQoKI2RlZmluZSBQQVJNX1BPUlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydFR5cGUKI2RlZmluZSBQQVJNX05BTUVfUE9SVF9UWVBFICAgICAgICAgICAgICAgICAgICAgVEVYVCgiUG9ydFR5cGUiKQojZGVmaW5lIFBBUk1fTUlOX1BPUlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgUEFSTV9NQVhfUE9SVF9UWVBFICAgICAgICAgICAgICAgICAgICAgIDMKI2RlZmluZSBQQVJNX0RFRkFVTFRfUE9SVF9UWVBFICAgICAgICAgICAgICAgICAgMQoKI2RlZmluZSBQQVJNX1BST01JU0NVT1VTX01PREUgICAgICAgICAgICAgICAgICAgUHJvbWlzY3VvdXNNb2RlCiNkZWZpbmUgUEFSTV9OQU1FX1BST01JU0NVT1VTX01PREUgICAgICAgICAgICAgIFRFWFQoIlByb21pc2N1b3VzTW9kZSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1BST01JU0NVT1VTX01PREUgICAgICAgICAgIEZBTFNFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1BST01JU0NVT1VTX01PREVfU1RSICAgICAgICJOIgoKI2RlZmluZSBQQVJNX1JFSkVDVF9BTlkgICAgICAgICAgICAgICAgICAgICAgICAgUmVqZWN0QU5ZCiNkZWZpbmUgUEFSTV9OQU1FX1JFSkVDVF9BTlkJCQkJICAgIFRFWFQoIlJlamVjdEFOWSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1JFSkVDVF9BTlkgICAgICAgICAgICAgICAgIEZBTFNFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1JFSkVDVF9BTllfU1RSICAgICAgICAgICAgICJOIgoKI2RlZmluZSBQQVJNX1JUU19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgUlRTVGhyZXNob2xkCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQgICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZCIpCiNkZWZpbmUgUEFSTV9NSU5fUlRTX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAKI2RlZmluZSBQQVJNX01BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjM0NwojZGVmaW5lIFBBUk1fREVGQVVMVF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAyMzQ3CgojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDEgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQxCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQxICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDEiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDIgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQyCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQyICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDIiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDMgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQzCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQzICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDMiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDQgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ0CiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ0ICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDQiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDUgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ1CiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ1ICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDUiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDYgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ2CiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ2ICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDYiKQoKI2RlZmluZSBQQVJNX1NSU0NfMkdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgU1JTQzJHSHoKI2RlZmluZSBQQVJNX05BTUVfU1JTQ18yR0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiU1JTQzJHSHoiKQojZGVmaW5lIFBBUk1fTUlOX1NSU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKI2RlZmluZSBQQVJNX01BWF9TUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1NSU0NfMkdIWiAgICAgICAgICAgICAgICAgIDB4MEZGRgoKI2RlZmluZSBQQVJNX1NSU0NfNUdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgU1JTQzVHSHoKI2RlZmluZSBQQVJNX05BTUVfU1JTQ181R0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiU1JTQzVHSHoiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9TUlNDXzVHSFogICAgICAgICAgICAgICAgICAweDBGRjAKCiNkZWZpbmUgUEFSTV9TWVNURU1fU0NBTEUgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNjYWxlCiNkZWZpbmUgUEFSTV9OQU1FX1NZU1RFTV9TQ0FMRSAgICAgICAgICAgICAgICAgIFRFWFQoIlN5c3RlbVNjYWxlIikKI2RlZmluZSBQQVJNX01JTl9TWVNURU1fU0NBTEUgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX1NZU1RFTV9TQ0FMRSAgICAgICAgICAgICAgICAgICA1CiNkZWZpbmUgUEFSTV9ERUZBVUxUX1NZU1RFTV9TQ0FMRSAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgUEFSTV9UWF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4S2V5CiNkZWZpbmUgUEFSTV9OQU1FX1RYX0tFWSAgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4S2V5IikKI2RlZmluZSBQQVJNX01JTl9UWF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX1RYX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICA0CiNkZWZpbmUgUEFSTV9ERUZBVUxUX1RYX0tFWSAgICAgICAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgUEFSTV9UWF9QT1dfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgIFR4UG93TGV2ZWwKI2RlZmluZSBQQVJNX05BTUVfVFhfUE9XX0xFVkVMICAgICAgICAgICAgICAgICAgVEVYVCgiVHhQb3dMZXZlbCIpCiNkZWZpbmUgUEFSTV9NSU5fVFhfUE9XX0xFVkVMICAgICAgICAgICAgICAgICAgIDEgICAvLyAyMCBkQm0KI2RlZmluZSBQQVJNX01BWF9UWF9QT1dfTEVWRUwgICAgICAgICAgICAgICAgICAgNiAgIC8vICA4IGRCbQojZGVmaW5lIFBBUk1fREVGQVVMVF9UWF9QT1dfTEVWRUwgICAgICAgICAgICAgICAzICAgLy8gMTUgZEJtCgojZGVmaW5lIFBBUk1fVFhfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeFJhdGVDb250cm9sCiNkZWZpbmUgUEFSTV9OQU1FX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4UmF0ZUNvbnRyb2wiKQojZGVmaW5lIFBBUk1fTUlOX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKI2lmZGVmIFdBUlAKI2RlZmluZSBQQVJNX01BWF9UWF9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1RYX1JBVEVfMkdIWiAgICAgICAgICAgICAgIDB4MEZGRgojZGVmaW5lIFBBUk1fREVGQVVMVF9UWF9SQVRFXzVHSFogICAgICAgICAgICAgICAweDBGRjAKI2Vsc2UKI2RlZmluZSBQQVJNX01BWF9UWF9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CiNkZWZpbmUgUEFSTV9ERUZBVUxUX1RYX1JBVEVfMkdIWiAgICAgICAgICAgICAgIDB4MDAwMwojZGVmaW5lIFBBUk1fREVGQVVMVF9UWF9SQVRFXzVHSFogICAgICAgICAgICAgICAweDAwMDAKI2VuZGlmICAvLyBXQVJQCgojZGVmaW5lIFBBUk1fVFhfUkFURTEgICAgICAgICAgICAgICAgICAgICAgICAgICBUeFJhdGVDb250cm9sMQojZGVmaW5lIFBBUk1fTkFNRV9UWF9SQVRFMSAgICAgICAgICAgICAgICAgICAgICBURVhUKCJUeFJhdGVDb250cm9sMSIpCiNkZWZpbmUgUEFSTV9UWF9SQVRFMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4UmF0ZUNvbnRyb2wyCiNkZWZpbmUgUEFSTV9OQU1FX1RYX1JBVEUyICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4UmF0ZUNvbnRyb2wyIikKI2RlZmluZSBQQVJNX1RYX1JBVEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhSYXRlQ29udHJvbDMKI2RlZmluZSBQQVJNX05BTUVfVFhfUkFURTMgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiVHhSYXRlQ29udHJvbDMiKQojZGVmaW5lIFBBUk1fVFhfUkFURTQgICAgICAgICAgICAgICAgICAgICAgICAgICBUeFJhdGVDb250cm9sNAojZGVmaW5lIFBBUk1fTkFNRV9UWF9SQVRFNCAgICAgICAgICAgICAgICAgICAgICBURVhUKCJUeFJhdGVDb250cm9sNCIpCiNkZWZpbmUgUEFSTV9UWF9SQVRFNSAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4UmF0ZUNvbnRyb2w1CiNkZWZpbmUgUEFSTV9OQU1FX1RYX1JBVEU1ICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4UmF0ZUNvbnRyb2w1IikKI2RlZmluZSBQQVJNX1RYX1JBVEU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhSYXRlQ29udHJvbDYKI2RlZmluZSBQQVJNX05BTUVfVFhfUkFURTYgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiVHhSYXRlQ29udHJvbDYiKQoKI2RlZmluZSBQQVJNX1ZFTkRPUkRFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgVmVuZG9yRGVzY3JpcHRpb24KI2RlZmluZSBQQVJNX05BTUVfVkVORE9SREVTQ1JJUFRJT04JCQkJVEVYVCgiVmVuZG9yRGVzY3JpcHRpb24iKQoKI2RlZmluZSBQQVJNX1dEU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgV0RTQWRkcmVzcwojZGVmaW5lIFBBUk1fTkFNRV9XRFNfQUREUkVTUwkJCQkJVEVYVCgiV0RTQWRkcmVzcyIpCgojZGVmaW5lIFBBUk1fV0RTX0FERFJFU1MxICAgICAgICAgICAgICAgICAgICAgICBXRFNBZGRyZXNzMQojZGVmaW5lIFBBUk1fTkFNRV9XRFNfQUREUkVTUzEJCQkJCVRFWFQoIldEU0FkZHJlc3MxIikKI2RlZmluZSBQQVJNX1dEU19BRERSRVNTMiAgICAgICAgICAgICAgICAgICAgICAgV0RTQWRkcmVzczIKI2RlZmluZSBQQVJNX05BTUVfV0RTX0FERFJFU1MyCQkJCQlURVhUKCJXRFNBZGRyZXNzMiIpCiNkZWZpbmUgUEFSTV9XRFNfQUREUkVTUzMgICAgICAgICAgICAgICAgICAgICAgIFdEU0FkZHJlc3MzCiNkZWZpbmUgUEFSTV9OQU1FX1dEU19BRERSRVNTMwkJCQkJVEVYVCgiV0RTQWRkcmVzczMiKQojZGVmaW5lIFBBUk1fV0RTX0FERFJFU1M0ICAgICAgICAgICAgICAgICAgICAgICBXRFNBZGRyZXNzNAojZGVmaW5lIFBBUk1fTkFNRV9XRFNfQUREUkVTUzQJCQkJCVRFWFQoIldEU0FkZHJlc3M0IikKI2RlZmluZSBQQVJNX1dEU19BRERSRVNTNSAgICAgICAgICAgICAgICAgICAgICAgV0RTQWRkcmVzczUKI2RlZmluZSBQQVJNX05BTUVfV0RTX0FERFJFU1M1CQkJCQlURVhUKCJXRFNBZGRyZXNzNSIpCiNkZWZpbmUgUEFSTV9XRFNfQUREUkVTUzYgICAgICAgICAgICAgICAgICAgICAgIFdEU0FkZHJlc3M2CiNkZWZpbmUgUEFSTV9OQU1FX1dEU19BRERSRVNTNgkJCQkJVEVYVCgiV0RTQWRkcmVzczYiKQoKLyoKI2RlZmluZSBQQVJNX0xPTkdfUkVUUllfTElNSVQgICAgICAgICAgICAgICAgICAgTG9uZ1JldHJ5TGltaXQKI2RlZmluZSBQQVJNX05BTUVfTE9OR19SRVRSWV9MSU1JVCAgICAgICAgICAgICAgVEVYVCgiTG9uZ1JldHJ5TGltaXQiKQojZGVmaW5lIFBBUk1fTUlOX0xPTkdfUkVUUllfTElNSVQgICAgICAgICAgICAgICAxCiNkZWZpbmUgUEFSTV9NQVhfTE9OR19SRVRSWV9MSU1JVCAgICAgICAgICAgICAgIDE1CiNkZWZpbmUgUEFSTV9ERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgICAgICAgICAgIDMKCgojZGVmaW5lIFBBUk1fUFJPQkVfREFUQV9SQVRFUyAgICAgICAgICAgICAgICAgICBQcm9iZURhdGFSYXRlcwojZGVmaW5lIFBBUk1fTkFNRV9QUk9CRV9EQVRBX1JBVEVTICAgICAgICAgICAgICBURVhUKCJQcm9iZURhdGFSYXRlcyIpCiNkZWZpbmUgUEFSTV9NSU5fUFJPQkVfREFUQV9SQVRFUyAgICAgICAgICAgICAgIDB4MDAwMAojZGVmaW5lIFBBUk1fTUFYX1BST0JFX0RBVEFfUkFURVMgICAgICAgICAgICAgICAweDBGRkYKI2RlZmluZSBQQVJNX0RFRkFVTFRfUFJPQkVfREFUQV9SQVRFU18yR0haICAgICAgMHgwMDAyCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1BST0JFX0RBVEFfUkFURVNfNUdIWiAgICAgIDB4MDAxMAoKI2RlZmluZSBQQVJNX1NIT1JUX1JFVFJZX0xJTUlUICAgICAgICAgICAgICAgICAgU2hvcnRSZXRyeUxpbWl0CiNkZWZpbmUgUEFSTV9OQU1FX1NIT1JUX1JFVFJZX0xJTUlUICAgICAgICAgICAgIFRFWFQoIlNob3J0UmV0cnlMaW1pdCIpCiNkZWZpbmUgUEFSTV9NSU5fU0hPUlRfUkVUUllfTElNSVQgICAgICAgICAgICAgIDEKI2RlZmluZSBQQVJNX01BWF9TSE9SVF9SRVRSWV9MSU1JVCAgICAgICAgICAgICAgMTUKI2RlZmluZSBQQVJNX0RFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQgICAgICAgICAgNwoKCiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgc3RhdGUgZGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgdG8gdHJhY2sgc3RhdGUgdGhlIGRldmljZSAqLwojZGVmaW5lIFdMX0ZSSU1XQVJFX1BSRVNFTlQgICAgIDEgLy8gRG93bmxvYWQgaWYgbmVlZGVkCiNkZWZpbmUgV0xfRlJJTVdBUkVfTk9UX1BSRVNFTlQJMCAvLyBTa2lwIG92ZXIgZG93bmxvYWQsIGFzc3VtZSBpdHMgYWxyZWFkeSB0aGVyZQojZGVmaW5lIFdMX0hBTkRMSU5HX0lOVCAgICAgICAgIDEgLy8gQWN0dWFsbHkgY2FsbCB0aGUgSENGIHRvIHN3aXRjaCBpbnRlcnJ1cHRzIG9uL29mZgojZGVmaW5lIFdMX05PVF9IQU5ETElOR19JTlQgICAgIDAgLy8gTm90IHlldCBoYW5kbGluZyBpbnRlcnJ1cHRzLCBkbyBub3Qgc3dpdGNoIG9uL29mZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIG1hY3JvIGRlZmluaXRpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIFRoZSBmb2xsb3dpbmcgbWFjcm8gZW5zdXJlcyB0aGF0IG5vIHN5bWJvbHMgYXJlIGV4cG9ydGVkLCBtaW5pbWl6aW5nIHRoZQogICBjaGFuY2Ugb2YgYSBzeW1ib2wgY29sbGlzaW9uIGluIHRoZSBrZXJuZWwgKi8KLy8gRVhQT1JUX05PX1NZTUJPTFM7CgojZGVmaW5lIE5FTEVNKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSkpCgojZGVmaW5lIFdWTEFOX1ZBTElEX01BQ19BRERSRVNTKCB4ICkgXAooKHhbMF0hPTB4RkYpICYmICh4WzFdIT0weEZGKSAmJiAoeFsyXSE9MHhGRikgJiYgKHhbM10hPTB4RkYpICYmICh4WzRdIT0weEZGKSAmJiAoeFs1XSE9MHhGRikpCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB0eXBlIGRlZmluaXRpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiN1bmRlZiBGQUxTRQojdW5kZWYgVFJVRQoKdHlwZWRlZiBlbnVtCnsKCUZBTFNFID0gMCwKCVRSVUUgID0gMQp9CmJvb2xfdDsKCgp0eXBlZGVmIHN0cnVjdCBfU2NhblJlc3VsdAp7CgkvL2hjZl8xNiAgICAgICAgbGVuOwoJLy9oY2ZfMTYgICAgICAgIHR5cDsKCWludCAgICAgICAgICAgICBzY2FuX2NvbXBsZXRlOwoJaW50ICAgICAgICAgICAgIG51bV9hcHM7CglTQ0FOX1JTX1NUUkNUICAgQVBUYWJsZSBbTUFYX05BUFNdOwp9ClNjYW5SZXN1bHQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX0xJTktfU1RBVFVTX1NUUkNUCnsKCWhjZl8xNiAgbGVuOwoJaGNmXzE2ICB0eXA7CgloY2ZfMTYgIGxpbmtTdGF0dXM7ICAgICAvKiAxLi41ICovCn0KTElOS19TVEFUVVNfU1RSQ1Q7CgoKdHlwZWRlZiBzdHJ1Y3QgX0FTU09DX1NUQVRVU19TVFJDVAp7CgloY2ZfMTYgIGxlbjsKCWhjZl8xNiAgdHlwOwoJaGNmXzE2ICBhc3NvY1N0YXR1czsgICAgICAgICAgICAvKiAxLi4zICovCgloY2ZfOCAgIHN0YUFkZHJbRVRIX0FMRU5dOwoJaGNmXzggICBvbGRBcEFkZHJbRVRIX0FMRU5dOwp9CkFTU09DX1NUQVRVU19TVFJDVDsKCgp0eXBlZGVmIHN0cnVjdCBfU0VDVVJJVFlfU1RBVFVTX1NUUkNUCnsKCWhjZl8xNiAgbGVuOwoJaGNmXzE2ICB0eXA7CgloY2ZfMTYgIHNlY3VyaXR5U3RhdHVzOyAgICAgLyogMS4uMyAqLwoJaGNmXzggICBzdGFBZGRyW0VUSF9BTEVOXTsKCWhjZl8xNiAgcmVhc29uOwp9ClNFQ1VSSVRZX1NUQVRVU19TVFJDVDsKCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0xUX1JFUSAgICAgICAweDAwCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0xUX1JTUCAgICAgICAweDAxCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0FQTF9SRVEgICAgICAweDAyCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0FQTF9SU1AgICAgICAweDAzCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9ldGhfaGRyCnsKCXVuc2lnbmVkIGNoYXIgICBkc3RbRVRIX0FMRU5dOyAgICAgICAgICAgLyogRGVzdGluYXRpb24gYWRkcmVzcy4gKi8KCXVuc2lnbmVkIGNoYXIgICBzcmNbRVRIX0FMRU5dOyAgICAgICAgICAgLyogU291cmNlIGFkZHJlc3MuICovCgl1bnNpZ25lZCBzaG9ydCAgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBQRFUuICovCn0KV1ZMQU5fRVRIX0hEUiwgKlBXVkxBTl9FVEhfSERSOwoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fbGxjX3NuYXAKewoJdW5zaWduZWQgY2hhciAgIGRzYXA7ICAgICAgICAgICAgICAgICAgIC8qIERTQVAgKDB4QUEpICovCgl1bnNpZ25lZCBjaGFyICAgc3NhcDsgICAgICAgICAgICAgICAgICAgLyogU1NBUCAoMHhBQSkgKi8KCXVuc2lnbmVkIGNoYXIgICBjdHJsOyAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sICgweDAzKSAqLwoJdW5zaWduZWQgY2hhciAgIG91aVszXTsgICAgICAgICAgICAgICAgIC8qIE9yZ2FuaXphdGlvbiBVbmlxdWUgSUQgKDAwLTYwLTFkKS4gKi8KCXVuc2lnbmVkIGNoYXIgICBzcGVjaWRbMl07ICAgICAgICAgICAgICAvKiBTcGVjaWZpYyBJRCBjb2RlICgwMC0wMSkuICovCn0KV1ZMQU5fTExDX1NOQVAsICpQV1ZMQU5fTExDX1NOQVA7CgoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fbHRfaGRyCnsKCXVuc2lnbmVkIGNoYXIgICB2ZXJzaW9uOyAgICAgICAgICAgICAgICAvKiBWZXJzaW9uICgweDAwKSAqLwoJdW5zaWduZWQgY2hhciAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIFBEVSB0eXBlOiAwLXJlcS8xLXJlc3AuICovCgl1bnNpZ25lZCBzaG9ydCAgaWQ7ICAgICAgICAgICAgICAgICAgICAgLyogSWRlbnRpZmllciB0byBhc3NvY2lhdGUgcmVzcCB0byByZXEuICovCn0KV1ZMQU5fTFRfSERSLCAqUFdWTEFOX0xUX0hEUjsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl93bXBfaGRyCnsKCXVuc2lnbmVkIGNoYXIgICB2ZXJzaW9uOyAgICAgICAgICAgICAgICAvKiBWZXJzaW9uICAqLwoJdW5zaWduZWQgY2hhciAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIFBEVSB0eXBlICovCn0KV1ZMQU5fV01QX0hEUiwgKlBXVkxBTl9XTVBfSERSOwoKCiNkZWZpbmUgRklMTEVSX1NJWkUgICAgICAgICAgICAgMTU1NAojZGVmaW5lIFRFU1RfUEFUVEVSTl9TSVpFICAgICAgIDU0CgoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fbHRfcmVxCnsKCXVuc2lnbmVkIGNoYXIgICBGaWxsZXJbVEVTVF9QQVRURVJOX1NJWkVdOyAgIC8qIG1pbmltYWwgbGVuZ3RoIG9mIDU0IGJ5dGVzICovCn0KV1ZMQU5fTFRfUkVRLCAqUFdWTEFOX0xUX1JFUTsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9sdF9yc3AKewoJY2hhciAgICAgICAgICAgbmFtZVszMl07CgkvKiBNZWFzdXJlZCBEYXRhICovCgl1bnNpZ25lZCBjaGFyICBzaWduYWw7Cgl1bnNpZ25lZCBjaGFyICBub2lzZTsKCXVuc2lnbmVkIGNoYXIgIHJ4RmxvdzsKCXVuc2lnbmVkIGNoYXIgIGRhdGFSYXRlOwoJdW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CgkvKiBDYXBhYmlsaXRpZXMgKi8KCXVuc2lnbmVkIGNoYXIgIHN0YXRpb247Cgl1bnNpZ25lZCBjaGFyICBkYXRhUmF0ZUNhcDsKCXVuc2lnbmVkIGNoYXIgIHBvd2VyTWdtdFs0XTsKCXVuc2lnbmVkIGNoYXIgIHJvYnVzdG5lc3NbNF07Cgl1bnNpZ25lZCBjaGFyICBzY2FsaW5nOwoJdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWRbNV07Cn0KV1ZMQU5fTFRfUlNQLCAqUFdWTEFOX0xUX1JTUDsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9yeF93bXBfaGRyCnsKCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMVsyXTsKCXVuc2lnbmVkIGNoYXIgIHNpbGVuY2U7Cgl1bnNpZ25lZCBjaGFyICBzaWduYWw7Cgl1bnNpZ25lZCBjaGFyICByYXRlOwoJdW5zaWduZWQgY2hhciAgcnhGbG93OwoJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyWzJdOwoJdW5zaWduZWQgc2hvcnQgZnJhbWVDb250cm9sOwoJdW5zaWduZWQgc2hvcnQgZHVyYXRpb247Cgl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzMVszXTsKCXVuc2lnbmVkIHNob3J0IGFkZHJlc3MyWzNdOwoJdW5zaWduZWQgc2hvcnQgYWRkcmVzczNbM107Cgl1bnNpZ25lZCBzaG9ydCBzZXF1ZW5jZUNvbnRyb2w7Cgl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzNFszXTsKI2lmbmRlZiBIRVJNRVMyNQkvLzs/anVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIG9mIGluaGVyaXRlZCBidXQgbm90IGNvbXByZWhlbmRlZCBjb2RlICNpZmRlZiBIRVJNRVMyCgl1bnNpZ25lZCBzaG9ydCBzZWVtc190b19iZV91bnVzZWRfcmVzZXJ2ZWQzWzVdOyAgLy87PwoJdW5zaWduZWQgc2hvcnQgc2VlbXNfdG9fYmVfdW51c2VkX3Jlc2VydmVkNDsJIC8vOz8KI2VuZGlmIC8vIEhFUk1FUzI1Cgl1bnNpZ25lZCBzaG9ydCBIZWFkZXJEYXRhTGVuOwp9CldWTEFOX1JYX1dNUF9IRFIsICpQV1ZMQU5fUlhfV01QX0hEUjsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9saW5rdGVzdF9yZXFfcGR1CnsKCVdWTEFOX0VUSF9IRFIgICAgIGV0aEhkcjsKCVdWTEFOX0xMQ19TTkFQICAgIGxsY1NuYXA7CglXVkxBTl9MVF9IRFIgICAgICBsdEhkcjsKCVdWTEFOX0xUX1JFUSAgICAgIGx0UmVxOwp9CldWTEFOX0xJTktURVNUX1JFUV9QRFUsICpQV1ZMQU5fTElOS1RFU1RfUkVRX1BEVTsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9saW5rdGVzdF9yc3BfcGR1CnsKCVdWTEFOX1JYX1dNUF9IRFIgIHdtcFJ4SGRyOwoJV1ZMQU5fRVRIX0hEUiAgICAgZXRoSGRyOwoJV1ZMQU5fTExDX1NOQVAgICAgbGxjU25hcDsKCVdWTEFOX0xUX0hEUiAgICAgIGx0SGRyOwoJV1ZMQU5fTFRfUlNQICAgICAgbHRSc3A7Cn0KV1ZMQU5fTElOS1RFU1RfUlNQX1BEVSwgKlBXVkxBTl9MSU5LVEVTVF9SU1BfUERVOwoKCnR5cGVkZWYgc3RydWN0IF9MSU5LVEVTVF9SU1BfU1RSQ1QKewoJaGNmXzE2ICAgICAgICAgICAgICAgICAgIGxlbjsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICB0eXA7CglXVkxBTl9MSU5LVEVTVF9SU1BfUERVICAgbHRSc3A7Cn0KTElOS1RFU1RfUlNQX1NUUkNUOwoKCnR5cGVkZWYgc3RydWN0IHd2bGFuX3dtcF9yc3BfcGR1CnsKCVdWTEFOX1JYX1dNUF9IRFIgIHdtcFJ4SGRyOwoJV1ZMQU5fRVRIX0hEUiAgICAgZXRoSGRyOwoJV1ZMQU5fTExDX1NOQVAgICAgbGxjU25hcDsKCVdWTEFOX1dNUF9IRFIgICAgIHdtcEhkcjsKfQpXVkxBTl9XTVBfUlNQX1BEVSwgKlBXVkxBTl9XTVBfUlNQX1BEVTsKCgp0eXBlZGVmIHN0cnVjdCBfV01QX1JTUF9TVFJDVAp7CgloY2ZfMTYgICAgICAgICAgICAgIGxlbjsKCWhjZl8xNiAgICAgICAgICAgICAgdHlwOwoJV1ZMQU5fV01QX1JTUF9QRFUgICB3bXBSc3A7Cn0KV01QX1JTUF9TVFJDVDsKCgp0eXBlZGVmIHN0cnVjdCBfUFJPQkVfUkVTUAp7CgkvLyBmaXJzdCBwYXJ0OiA4MDIuMTEKCWhjZl8xNglsZW5ndGg7CgloY2ZfMTYJaW5mb1R5cGU7CgloY2ZfMTYJcmVzZXJ2ZWQwOwoJLy9oY2ZfOAlzaWduYWw7CgloY2ZfOAlzaWxlbmNlOwoJaGNmXzgJc2lnbmFsOyAgICAgLy8gTW92ZWQgc2lnbmFsIGhlcmUgYXMgc2lnbmFsL25vaXNlIHZhbHVlcyB3ZXJlIGZsaXBwZWQKCWhjZl84CXJ4RmxvdzsKCWhjZl84CXJhdGU7CgloY2ZfMTYJcmVzZXJ2ZWQxWzJdOwoKCS8vIHNlY29uZCBwYXJ0OgoJaGNmXzE2CWZyYW1lQ29udHJvbDsKCWhjZl8xNglkdXJJRDsKCWhjZl84CWFkZHJlc3MxWzZdOwoJaGNmXzgJYWRkcmVzczJbNl07CgloY2ZfOAlCU1NJRFs2XTsJCQkJCS8vISB0aGlzIGlzIGNvcnJlY3QsIHJpZ2h0ID8KCWhjZl8xNglzZXF1ZW5jZTsKCWhjZl84CWFkZHJlc3M0WzZdOwoKI2lmbmRlZiBXQVJQCgloY2ZfOAlyZXNlcnZlZDJbMTJdOwojZW5kaWYgLy8gV0FSUAoKCWhjZl8xNglkYXRhTGVuZ3RoOwoJCQkJCQkJCQkJLy8gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBuZXh0IDMgZmllbGRzIChEQS9TQS9MZW5UeXBlKSBpcyBhY3R1YWxseSBub3QgZmlsbGVkIGluLgoJaGNmXzgJREFbNl07CgloY2ZfOAlTQVs2XTsKCiNpZmRlZiBXQVJQCgloY2ZfOCAgIGNoYW5uZWw7CgloY2ZfOCAgIGJhbmQ7CiNlbHNlCgloY2ZfMTYJbGVuVHlwZTsKI2VuZGlmICAvLyBXQVJQCgoJaGNmXzgJdGltZVN0YW1wWzhdOwoJaGNmXzE2CWJlYWNvbkludGVydmFsOwoJaGNmXzE2CWNhcGFiaWxpdHk7CgloY2ZfOAlyYXdEYXRhWzIwMF07CQkJCS8vISA8PDwgdGhpbmsgYWJvdXQgdGhpcyBudW1iZXIgIQoJaGNmXzE2CWZsYWdzOwp9ClBST0JFX1JFU1AsICpQUFJPQkVfUkVTUDsKCgp0eXBlZGVmIHN0cnVjdCBfUHJvYmVSZXN1bHQKewoJaW50ICAgICAgICAgc2Nhbl9jb21wbGV0ZTsKCWludCAgICAgICAgIG51bV9hcHM7CglQUk9CRV9SRVNQICBQcm9iZVRhYmxlW01BWF9OQVBTXTsKfQpQcm9iZVJlc3VsdDsKCi8qIERlZmluaXRpb25zIHVzZWQgdG8gcGFyc2UgY2FwYWJpbGl0aWVzIG91dCBvZiB0aGUgcHJvYmUgcmVzcG9uc2VzICovCiNkZWZpbmUgQ0FQQUJJTElUWV9FU1MgICAgICAweDAwMDEKI2RlZmluZSBDQVBBQklMSVRZX0lCU1MgICAgIDB4MDAwMgojZGVmaW5lIENBUEFCSUxJVFlfUFJJVkFDWSAgMHgwMDEwCgovKiBEZWZpbml0aW9ucyB1c2VkIHRvIHBhcnNlIHRoZSBJbmZvcm1hdGlvbiBFbGVtZW50cyBvdXQgb2YgcHJvYmUgcmVzcG9uc2VzICovCiNkZWZpbmUgRFNfSU5GT19FTEVNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMwojZGVmaW5lIEdFTkVSSUNfSU5GT19FTEVNICAgICAgICAgICAgICAgICAgIDB4ZGQKI2RlZmluZSBXUEFfTUFYX0lFX0xFTiAgICAgICAgICAgICAgICAgICAgICA0MAojZGVmaW5lIFdQQV9TRUxFQ1RPUl9MRU4gICAgICAgICAgICAgICAgICAgIDQKI2RlZmluZSBXUEFfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfQojZGVmaW5lIFdQQV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDEKI2RlZmluZSBXUEFfQVVUSF9LRVlfTUdNVF9VTlNQRUNfODAyXzFYICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfQojZGVmaW5lIFdQQV9BVVRIX0tFWV9NR01UX1BTS19PVkVSXzgwMl8xWCAgIHsgMHgwMCwgMHg1MCwgMHhmMiwgMiB9CiNkZWZpbmUgV1BBX0NJUEhFUl9TVUlURV9OT05FICAgICAgICAgICAgICAgeyAweDAwLCAweDUwLCAweGYyLCAwIH0KI2RlZmluZSBXUEFfQ0lQSEVSX1NVSVRFX1dFUDQwICAgICAgICAgICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfQojZGVmaW5lIFdQQV9DSVBIRVJfU1VJVEVfVEtJUCAgICAgICAgICAgICAgIHsgMHgwMCwgMHg1MCwgMHhmMiwgMiB9CiNkZWZpbmUgV1BBX0NJUEhFUl9TVUlURV9XUkFQICAgICAgICAgICAgICAgeyAweDAwLCAweDUwLCAweGYyLCAzIH0KI2RlZmluZSBXUEFfQ0lQSEVSX1NVSVRFX0NDTVAgICAgICAgICAgICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDQgfQojZGVmaW5lIFdQQV9DSVBIRVJfU1VJVEVfV0VQMTA0ICAgICAgICAgICAgIHsgMHgwMCwgMHg1MCwgMHhmMiwgNSB9Cgp0eXBlZGVmIGVudW0gd3ZsYW5fZHJ2X21vZGUKewoJV1ZMQU5fRFJWX01PREVfTk9fRE9XTkxPQUQsICAgICAvKiB0aGlzIGlzIHRoZSBzYW1lIGFzIFNUQSBmb3IgSGVybWVzIDEgICAgKi8KCQkJCSAgICAgICAgICAgICAgICAgICAgLyogaXQgaXMgYWxzbyBvbmx5IGFwcGxpY2FibGUgZm9yIEhlcm1lcyAxICovCglXVkxBTl9EUlZfTU9ERV9TVEEsCglXVkxBTl9EUlZfTU9ERV9BUCwKCVdWTEFOX0RSVl9NT0RFX01BWAp9CldWTEFOX0RSVl9NT0RFLCAqUFdWTEFOX0RSVl9NT0RFOwoKCnR5cGVkZWYgZW51bSB3dmxhbl9wb3J0X3N0YXRlCnsKCVdWTEFOX1BPUlRfU1RBVEVfRU5BQkxFRCwKCVdWTEFOX1BPUlRfU1RBVEVfRElTQUJMRUQsCglXVkxBTl9QT1JUX1NUQVRFX0NPTk5FQ1RFRAp9CldWTEFOX1BPUlRfU1RBVEUsICpQV1ZMQU5fUE9SVF9TVEFURTsKCi8qCnR5cGVkZWYgZW51bSB3dmxhbl9jb25uZWN0X3N0YXRlCnsKCVdWTEFOX0NPTk5FQ1RfU1RBVEVfQ09OTkVDVEVELAoJV1ZMQU5fQ09OTkVDVF9TVEFURV9ESVNDT05ORUNURUQKfQpXVkxBTl9DT05ORUNUX1NUQVRFLCAqUFdWTEFOX0NPTk5FQ1RfU1RBVEU7CiovCgp0eXBlZGVmIGVudW0gd3ZsYW5fcG1fc3RhdGUKewoJV1ZMQU5fUE1fU1RBVEVfRElTQUJMRUQsCglXVkxBTl9QTV9TVEFURV9FTkhBTkNFRCwKCVdWTEFOX1BNX1NUQVRFX1NUQU5EQVJECn0KV1ZMQU5fUE1fU1RBVEUsICpQV1ZMQU5fUE1fU1RBVEU7CgoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fZnJhbWUKewoJc3RydWN0IHNrX2J1ZmYgICpza2I7ICAgICAgIC8qIHNrX2J1ZmYgZm9yIGZyYW1lLiAqLwoJaGNmXzE2ICAgICAgICAgIHBvcnQ7ICAgICAgIC8qIE1BQyBwb3J0IGZvciB0aGUgZnJhbWUuICovCgloY2ZfMTYgICAgICAgICAgbGVuOyAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBmcmFtZS4gKi8KfQpXVkxBTl9GUkFNRSwgKlBXVkxBTl9GUkFNRTsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9sZnJhbWUKewoJc3RydWN0IGxpc3RfaGVhZCAgICBub2RlOyAgIC8qIE5vZGUgaW4gdGhlIGxpc3QgKi8KCVdWTEFOX0ZSQU1FCSAgICAgICAgZnJhbWU7ICAvKiBGcmFtZS4gKi8KfQpXVkxBTl9MRlJBTUUsICpQV1ZMQU5fTEZSQU1FOwoKCgojZGVmaW5lIERFRkFVTFRfTlVNX1RYX0ZSQU1FUyAgICAgICAgICAgNDgKI2RlZmluZSBUWF9RX0xPV19XQVRFUl9NQVJLICAgICAgICAgICAgIChERUZBVUxUX05VTV9UWF9GUkFNRVMvMykKCiNkZWZpbmUgV1ZMQU5fTUFYX1RYX1FVRVVFUyAgICAgICAgICAgICAxCgoKI2lmZGVmIFVTRV9XRFMKCnR5cGVkZWYgc3RydWN0IHd2bGFuX3dkc19pZgp7CglzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAgICAgKmRldjsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZWdpc3RlcmVkOwoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3F1ZXVlX29uOwoJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICAgIHN0YXRzOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHJ0c1RocmVzaG9sZDsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICB0eFJhdGVDbnRsOwoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIHdkc0FkZHJlc3NbRVRIX0FMRU5dOwp9IFdWTEFOX1dEU19JRiwgKlBXVkxBTl9XRFNfSUY7CgojZW5kaWYgIC8vIFVTRV9XRFMKCgoKI2RlZmluZSBOVU1fUlhfREVTQyA1CiNkZWZpbmUgTlVNX1RYX0RFU0MgNQoKdHlwZWRlZiBzdHJ1Y3QgZG1hX3N0cmN0CnsKCURFU0NfU1RSQ1QgICp0eF9wYWNrZXRbTlVNX1RYX0RFU0NdOwoJREVTQ19TVFJDVCAgKnJ4X3BhY2tldFtOVU1fUlhfREVTQ107CglERVNDX1NUUkNUICAqcnhfcmVjbGFpbV9kZXNjLCAqdHhfcmVjbGFpbV9kZXNjOyAvLyBEZXNjcmlwdG9ycyBmb3IgaG9zdC1yZWNsYWltIHB1cnBvc2VzIChzZWUgSENGKQoJaW50ICAgICAgICAgdHhfcnNjX2luZDsgLy8gRE1BIFR4IHJlc291cmNlIGluZGljYXRvciBpcyBtYWludGFpbmVkIGluIHRoZSBNU0YsIG5vdCBpbiB0aGUgSENGCglpbnQgICAgICAgICByeF9yc2NfaW5kOyAvLyBBbHNvIGFkZGVkIHJ4IHJzb3VyY2UgaW5kaWNhdG9yIHNvIHRoYXQgY2xlYW51cCBjYW4gYmUgcGVyZm9ybWVkIGlmIGFsbG9jIGZhaWxzCglpbnQgICAgICAgICBzdGF0dXM7Cn0gRE1BX1NUUkNUOwoKCi8qIE1hY3JvcyB1c2VkIGluIERNQSBzdXBwb3J0ICovCi8qIGdldCBidXMgYWRkcmVzcyBvZiB7cngsdHh9ZG1hIHN0cnVjdHVyZSBtZW1iZXIsIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlciAqLwojZGVmaW5lIFdMX0RNQV9CVVNfQUREUl9MRShzdHIsIGksIG1lbSkgXAoJY3B1X3RvX2xlMzIoc3RyIyNfZG1hX2FkZHJbKGkpXSArICgoaGNmXzggKikmc3RyWyhpKV0tPm1lbSAtIChoY2ZfOCAqKXN0clsoaSldKSkKCgpzdHJ1Y3Qgd2xfcHJpdmF0ZQp7CgojaWZkZWYgQlVTX1BDTUNJQQoJZGV2X25vZGVfdCAgICAgICAgICAgICAgICAgIG5vZGU7CglzdHJ1Y3QgcGNtY2lhX2RldmljZQkgICAgKmxpbms7CiNlbmRpZiAvLyBCVVNfUENNQ0lBCgoKCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICAgICAqZGV2OwovLwlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAgICAgKmRldl9uZXh0OwoJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgIHNsb2NrOwoJc3RydWN0IHRhc2tsZXRfc3RydWN0ICAgICAgIHRhc2s7CglzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAgICAgc3RhdHM7CgoKI2lmZGVmIFdJUkVMRVNTX0VYVAoJc3RydWN0IGl3X3N0YXRpc3RpY3MgICAgICAgIHdzdGF0czsKLy8JaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHNweV9udW1iZXI7Ci8vCXVfY2hhciAgICAgICAgICAgICAgICAgICAgICBzcHlfYWRkcmVzc1tJV19NQVhfU1BZXVtFVEhfQUxFTl07Ci8vCXN0cnVjdCBpd19xdWFsaXR5ICAgICAgICAgICBzcHlfc3RhdFtJV19NQVhfU1BZXTsKCXN0cnVjdCBpd19zcHlfZGF0YSAgICAgICAgICBzcHlfZGF0YTsKCXN0cnVjdCBpd19wdWJsaWNfZGF0YQl3aXJlbGVzc19kYXRhOwojZW5kaWYgLy8gV0lSRUxFU1NfRVhUCgoKCUlGQl9TVFJDVCAgICAgICAgICAgICAgICAgICBoY2ZDdHg7Ci8vOz8gc3RydWN0IHRpbWVyX2xpc3QJCQl0aW1lcl9vb3I7Ci8vOz8gaGNmXzE2CQkJCQkJdGltZXJfb29yX2NudDsKCXVfbG9uZwkJCQkJCXdsYWdzNDlfdHlwZTsJCS8vY29udHJvbHMgb3V0cHV0IGluIC9wcm9jL3dsYWdzNDkKCXVfbG9uZyAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKCWhjZl8xNgkJCQkJCURlYnVnRmxhZzsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZWdpc3RlcmVkOwoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2hhbmRsaW5nX2ludDsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZV9wcmVzZW50OwoJY2hhciAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzQ3JlYXRlZDsKCUNGR19EUlZfSU5GT19TVFJDVCAgICAgICAgICBkcml2ZXJJbmZvOwoJQ0ZHX0lERU5USVRZX1NUUkNUICAgICAgICAgIGRyaXZlcklkZW50aXR5OwoJQ0ZHX0ZXX0lERU5USVRZX1NUUkNUICAgICAgIFN0YXRpb25JZGVudGl0eTsKCUNGR19QUklfSURFTlRJVFlfU1RSQ1QgICAgICBQcmltYXJ5SWRlbnRpdHk7CglDRkdfUFJJX0lERU5USVRZX1NUUkNUICAgICAgTklDSWRlbnRpdHk7CgoJbHR2X3QgICAgICAgICAgICAgICAgICAgICAgIGx0dlJlY29yZDsKCXVfbG9uZyAgICAgICAgICAgICAgICAgICAgICB0eEJ5dGVzOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIG1heFBvcnQ7ICAgICAgICAvKiAwIGZvciBTVEEsIDYgZm9yIEFQICovCgoJLyogRWxlbWVudHMgdXNlZCBmb3IgYXN5bmMgbm90aWZpY2F0aW9uIGZyb20gaGFyZHdhcmUgKi8KCVJJRF9MT0dfU1RSQ1QJCQkJUmlkTGlzdFsxMF07CglsdHZfdCAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFJlY29yZDsKCVBST0JFX1JFU1AJCQkJICAgIFByb2JlUmVzcDsKCUFTU09DX1NUQVRVU19TVFJDVCAgICAgICAgICBhc3NvY19zdGF0OwoJU0VDVVJJVFlfU1RBVFVTX1NUUkNUICAgICAgIHNlY19zdGF0OwoKCXVfY2hhciAgICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWRCdWZbV1ZMQU5fTUFYX0xPT0tBSEVBRF07CgoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIFBvcnRUeXBlOyAgICAgICAgICAgLy8gMSAtIDMgKDEgW05vcm1hbF0gfCAzIFtBZEhvY10pCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbDsgICAgICAgICAgICAvLyAwIC0gMTQgKDApCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgVHhSYXRlQ29udHJvbFsyXTsKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBEaXN0YW5jZUJldHdlZW5BUHM7IC8vIDEgLSAzICgxKQoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIFJUU1RocmVzaG9sZDsgICAgICAgLy8gMCAtIDIzNDcgKDIzNDcpCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgUE1FbmFibGVkOyAgICAgICAgICAvLyAwIC0gMiwgODAwMSAtIDgwMDIgKDApCgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgTWljcm93YXZlUm9idXN0bmVzczsvLyAwIC0gMSAoMCkKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVJQlNTOyAgICAgICAgIC8vIDAgLSAxICgwKQoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIE11bHRpY2FzdFJlY2VpdmU7ICAgLy8gMCAtIDEgKDEpCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgTWF4U2xlZXBEdXJhdGlvbjsgICAvLyAwIC0gNjU1MzUgKDEwMCkKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBNQUNBZGRyZXNzW0VUSF9BTEVOXTsKCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrTmFtZVtIQ0ZfTUFYX05BTUVfTEVOKzFdOwoJY2hhciAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpb25OYW1lW0hDRl9NQVhfTkFNRV9MRU4rMV07CgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRW5jcnlwdGlvbjsgICAvLyAwIC0gMSAoMCkKCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICBLZXkxW01BWF9LRVlfTEVOKzFdOwoJY2hhciAgICAgICAgICAgICAgICAgICAgICAgIEtleTJbTUFYX0tFWV9MRU4rMV07CgljaGFyICAgICAgICAgICAgICAgICAgICAgICAgS2V5M1tNQVhfS0VZX0xFTisxXTsKCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICBLZXk0W01BWF9LRVlfTEVOKzFdOwoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0S2V5SUQ7ICAgICAgLy8gMSAtIDQgKDEpCglDRkdfREVGQVVMVF9LRVlTX1NUUkNUCSAgICBEZWZhdWx0S2V5czsKCXVfY2hhciAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94W01CX1NJWkVdOwoJY2hhciAgICAgICAgICAgICAgICAgICAgICAgIHN6RW5jcnlwdGlvbltNQVhfRU5DX0xFTl07CgoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGRyaXZlckVuYWJsZTsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICB3b2xhc0VuYWJsZTsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBhdGltV2luZG93OwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGhvbGRvdmVyRHVyYXRpb247CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgTXVsdGljYXN0UmF0ZVsyXTsKCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb247IC8vIGlzIHRoaXMgQVAgc3BlY2lmaWM/CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzY3VvdXNNb2RlOwoJV1ZMQU5fRFJWX01PREUgICAgICAgICAgICAgIERvd25sb2FkRmlybXdhcmU7ICAgLy8gMCAtIDIgKDAgW05vbmVdIHwgMSBbU1RBXSB8IDIgW0FQXSkKCgljaGFyCQkJCQkJZndfaW1hZ2VfZmlsZW5hbWVbTUFYX0xJTkVfU0laRSsxXTsKCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgQXV0aEtleU1nbXRTdWl0ZTsKCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgbG9hZEJhbGFuY2luZzsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBtZWRpdW1EaXN0cmlidXRpb247CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgdHhQb3dMZXZlbDsKCS8vaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHNob3J0UmV0cnlMaW1pdDsKCS8vaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGxvbmdSZXRyeUxpbWl0OwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHNyc2NbMl07CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgYnJzY1syXTsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQ29udHJvbDsKCS8vaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHByb2JlRGF0YVJhdGVzWzJdOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIG93bkJlYWNvbkludGVydmFsOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGNvZXhpc3RlbmNlOwoKCVdWTEFOX0ZSQU1FICAgICAgICAgICAgICAgICB0eEY7CglXVkxBTl9MRlJBTUUgICAgICAgICAgICAgICAgdHhMaXN0W0RFRkFVTFRfTlVNX1RYX0ZSQU1FU107CglzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgdHhGcmVlOwoJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgIHR4UVtXVkxBTl9NQVhfVFhfUVVFVUVTXTsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9xdWV1ZV9vbjsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICB0eFFfY291bnQ7CglERVNDX1NUUkNUICAgICAgICAgICAgICAgICAgZGVzY19yeDsKCURFU0NfU1RSQ1QgICAgICAgICAgICAgICAgICBkZXNjX3R4OwoKCVdWTEFOX1BPUlRfU1RBVEUgICAgICAgICAgICBwb3J0U3RhdGU7CgoJU2NhblJlc3VsdCAgICAgICAgICAgICAgICAgIHNjYW5fcmVzdWx0czsKCVByb2JlUmVzdWx0ICAgICAgICAgICAgICAgICBwcm9iZV9yZXN1bHRzOwoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JlX251bV9hcHM7CgoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kbWE7CglETUFfU1RSQ1QgICAgICAgICAgICAgICAgICAgZG1hOwojaWZkZWYgVVNFX1JUUwoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJUUzsKI2VuZGlmICAvLyBVU0VfUlRTCgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgRFRJTVBlcmlvZDsgICAgICAgICAvLyAxIC0gMjU1ICgxKQoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIG11bHRpY2FzdFBNQnVmZmVyaW5nOwoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIFJlamVjdEFueTsgICAgICAgICAgLy8gMCAtIDEgKDApCgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgRXhjbHVkZVVuZW5jcnlwdGVkOyAvLyAwIC0gMSAoMSkKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBpbnRyYUJTU1JlbGF5OwojaWZkZWYgVVNFX1dEUwoJV1ZMQU5fV0RTX0lGICAgICAgICAgICAgICAgIHdkc19wb3J0W05VTV9XRFNfUE9SVFNdOwojZW5kaWYgLy8gVVNFX1dEUwp9OyAvLyB3bF9wcml2YXRlCgojaWZkZWYgSEFWRV9ORVRERVZfUFJJVgojZGVmaW5lIHdsX3ByaXYoZGV2KSAoKHN0cnVjdCB3bF9wcml2YXRlICopIG5ldGRldl9wcml2KGRldikpCiNlbHNlCmV4dGVybiBpbmxpbmUgc3RydWN0IHdsX3ByaXZhdGUgKndsX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgcmV0dXJuIGRldi0+cHJpdjsKfQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBUaGVzZSBmdW5jdGlvbnMgKm11c3QqIGJlIGlubGluZSBvciB0aGV5IHdpbGwgYnJlYWsgaG9ycmlibHkgb24KICogU1BBUkMsIGR1ZSB0byBpdHMgd2VpcmQgc2VtYW50aWNzIGZvciBzYXZlL3Jlc3RvcmUgZmxhZ3MuIGV4dGVybgogKiBpbmxpbmUgc2hvdWxkIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGxpbmtpbmcgb3IgbW9kdWxlIGZyb20KICogbG9hZGluZyBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gKi8KZXh0ZXJuIGlubGluZSB2b2lkIHdsX2xvY2soc3RydWN0IHdsX3ByaXZhdGUgKmxwLAoJICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpmbGFncykKewoJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5zbG9jaywgKmZsYWdzKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHdsX3VubG9jayhzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAsCgkgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQp7CglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+c2xvY2ssICpmbGFncyk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogSW50ZXJydXB0IGVuYWJsZSBkaXNhYmxlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpleHRlcm4gaW5saW5lIHZvaWQgd2xfYWN0X2ludF9vbihzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHApCnsKCS8qCgkgKiBPbmx5IGRvIHNvbWV0aGluZyB3aGVuIHRoZSBkcml2ZXIgaXMgaGFuZGxpbmcKCSAqIGludGVycnVwdHMuIEhhbmRsaW5nIHN0YXJ0cyBhdCB3bF9vcGVuIGFuZAoJICogZW5kcyBhdCB3bF9jbG9zZSB3aGVuIG5vdCBpbiBSVFMgbW9kZQoJICovCglpZihscC0+aXNfaGFuZGxpbmdfaW50ID09IFdMX0hBTkRMSU5HX0lOVCkgewoJCWhjZl9hY3Rpb24oICZscC0+aGNmQ3R4LCBIQ0ZfQUNUX0lOVF9PTiApOwoJfQp9CgpleHRlcm4gaW5saW5lIHZvaWQgd2xfYWN0X2ludF9vZmYoc3RydWN0IHdsX3ByaXZhdGUgKmxwKQp7CgkvKgoJICogT25seSBkbyBzb21ldGhpbmcgd2hlbiB0aGUgZHJpdmVyIGlzIGhhbmRsaW5nCgkgKiBpbnRlcnJ1cHRzLiBIYW5kbGluZyBzdGFydHMgYXQgd2xfb3BlbiBhbmQKCSAqIGVuZHMgYXQgd2xfY2xvc2Ugd2hlbiBub3QgaW4gUlRTIG1vZGUKCSAqLwoJaWYobHAtPmlzX2hhbmRsaW5nX2ludCA9PSBXTF9IQU5ETElOR19JTlQpIHsKCQloY2ZfYWN0aW9uKCAmbHAtPmhjZkN0eCwgSENGX0FDVF9JTlRfT0ZGICk7Cgl9Cn0KCiNlbmRpZiAgLy8gX19XQVZFTEFOMl9IX18K