ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNoYXJwc2wuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNoYXJwc2wuUwppbmRleCBkNmJmOGEyLi41OWFkNjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaGFycHNsLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2hhcnBzbC5TCkBAIC03LDcgKzcsOCBAQAogICogc28gd2UgaGF2ZSB0byBmaWd1cmUgb3V0IHRoZSBtYWNoaW5lIGZvciBvdXJzZWx2ZXMuLi4KICAqCiAgKiBTdXBwb3J0IGZvciBQb29kbGUsIENvcmdpIChTTC1DNzAwKSwgU2hlcGhlcmQgKFNMLUM3NTApCi0gKiBhbmQgSHVza3kgKFNMLUM3NjApLgorICogSHVza3kgKFNMLUM3NjApLCBUb3NhIChTTC1DNjAwMCksIFNwaXR6IChTTC1DMzAwMCksCisgKiBBa2l0YSAoU0wtQzEwMDApIGFuZCBCb3J6b2kgKFNMLUMzMTAwKS4KICAqCiAgKi8KIApAQCAtMjMsNiArMjQsMjIgQEAKIAogX19TaGFycFNMX3N0YXJ0OgogCisvKiBDaGVjayBmb3IgVEM2MzkzIC0gaWYgZm91bmQgd2UgaGF2ZSBhIFRvc2EgKi8KKwlsZHIJcjcsIC5UT1NBSUQKKwltb3YJcjEsICMweDEwMDAwMDAwCQlAIEJhc2UgYWRkcmVzcyBvZiBUQzYzOTMgY2hpcAorCW1vdiAJcjYsICMweDAzCisJbGRyaAlyMywgW3IxLCAjOF0JCUAgTG9hZCBUQzYzOTNYQiBSZXZpc29uOiBUaGlzIGlzIDB4MDAwMworCWNtcAlyNiwgcjMKKwliZXEJLlNIQVJQRU5ECQlAIFN1Y2Nlc3MgLT4gdG9zYQorCisvKiBDaGVjayBmb3IgcHhhMjcwIC0gaWYgZm91bmQsIGJyYW5jaCAqLworCW1yYyBwMTUsIDAsIHI0LCBjMCwgYzAJCUAgR2V0IFByb2Nlc3NvciBJRAorCWFuZAlyNCwgcjQsICMweGZmZmZmZjAwCisJbGRyCXIzLCAuUFhBMjcwSUQKKwljbXAJcjQsIHIzCisJYmVxCS5QWEEyNzAKKworLyogQ2hlY2sgZm9yIHcxMDAgLSBpZiBub3QgZm91bmQgd2UgaGF2ZSBhIFBvb2RsZSAqLwogCWxkcglyMSwgLlcxMDBBRERSCQlAIEJhc2UgYWRkcmVzcyBvZiB3MTAwIGNoaXAgKyByZWdzIG9mZnNldAogCiAJbW92IHI2LCAjMHgzMQkJCUAgTG9hZCBNYWdpYyBJbml0IHZhbHVlCkBAIC0zMCw3ICs0Nyw3IEBACiAJbW92IHI1LCAjMHgzMDAwCiAuVzEwMExPT1A6CiAJc3VicyByNSwgcjUsICMxCi0gICAgYm5lIC5XMTAwTE9PUAorCWJuZSAuVzEwMExPT1AKIAltb3YgcjYsICMweDMwCQkJQCBMb2FkIDJuZCBNYWdpYyBJbml0IHZhbHVlCiAJc3RyCXI2LCBbcjEsICMweDI4MF0JQCB0byBTQ1JBVENIX1VNU0sKIApAQCAtNDAsNDUgKzU3LDUyIEBACiAJY21wCXI2LCByMwogCWJuZQkuU0hBUlBFTkQJCQlAIFdlIGhhdmUgbm8gdzEwMCAtIFBvb2RsZQogCi0JbXJjIHAxNSwgMCwgcjYsIGMwLCBjMAlAIEdldCBQcm9jZXNzb3IgSUQKLQlhbmQJcjYsIHI2LCAjMHhmZmZmZmYwMAorLyogQ2hlY2sgZm9yIHB4YTI1MCAtIGlmIGZvdW5kIHdlIGhhdmUgYSBDb3JnaSAqLwogCWxkcglyNywgLkNPUkdJSUQKIAlsZHIJcjMsIC5QWEEyNTVJRAotCWNtcAlyNiwgcjMKKwljbXAJcjQsIHIzCiAJYmxvCS5TSEFSUEVORAkJCUAgV2UgaGF2ZSBhIFBYQTI1MCAtIENvcmdpCiAKLQltb3YJcjEsICMweDBjMDAwMDAwCQlAIEJhc2UgYWRkcmVzcyBvZiBOQU5EIGNoaXAKLQlsZHJiCXIzLCBbcjEsICMyNF0JQCBMb2FkIEZMQVNIQ1RMCi0JYmljCXIzLCByMywgIzB4MTEJCUAgU0VUIE5DRQotCW9ycglyMywgcjMsICMweDBhCQlAIFNFVCBDTFIgKyBGTFdQCi0Jc3RyYglyMywgW3IxLCAjMjRdCUAgU2F2ZSB0byBGTEFTSENUTAotCW1vdiAJcjIsICMweDkwCQlAIENvbW1hbmQgInJlYWRpZCIKLQlzdHJiCXIyLCBbcjEsICMyMF0JQCBTYXZlIHRvIEZMQVNISU8KLQliaWMJcjMsIHIzLCAjMgkJCUAgQ0xSIENMRQotCW9ycglyMywgcjMsICM0CQkJQCBTRVQgQUxFCi0Jc3RyYglyMywgW3IxLCAjMjRdCUAgU2F2ZSB0byBGTEFTSENUTAotCW1vdgkJcjIsICMwCQkJQCBBZGRyZXNzIDB4MDAKLQlzdHJiCXIyLCBbcjEsICMyMF0JQCBTYXZlIHRvIEZMQVNISU8KLQliaWMJcjMsIHIzLCAjNAkJCUAgQ0xSIEFMRQotCXN0cmIJcjMsIFtyMSwgIzI0XQlAIFNhdmUgdG8gRkxBU0hDVEwKLS5TSEFSUDE6Ci0JbGRyYglyMywgW3IxLCAjMjRdCUAgTG9hZCBGTEFTSENUTAotCXRzdAlyMywgIzMyCQkJCUAgSXMgY2hpcCByZWFkeT8KLQliZXEJLlNIQVJQMQotCWxkcmIJcjIsIFtyMSwgIzIwXQlAIE5BTkQgTWFudWZhY3R1cmVyIElECi0JbGRyYglyMywgW3IxLCAjMjBdCUAgTkFORCBDaGlwIElECisvKiBDaGVjayBmb3IgNjRNaUIgZmxhc2ggLSBpZiBmb3VuZCB3ZSBoYXZlIGEgU2hlcGhlcmQgKi8KKwlibAlnZXRfZmxhc2hfaWRzCiAJbGRyCXI3LCAuU0hFUEhFUkRJRAogCWNtcAlyMywgIzB4NzYJCQlAIDY0TWlCIGZsYXNoCiAJYmVxCS5TSEFSUEVORAkJCUAgV2UgaGF2ZSBTaGVwaGVyZAorCisvKiBNdXN0IGJlIGEgSHVza3kgKi8KIAlsZHIJcjcsIC5IVVNLWUlECQlAIE11c3QgYmUgSHVza3kKIAliIC5TSEFSUEVORAogCisuUFhBMjcwOgorLyogQ2hlY2sgZm9yIDE2TWlCIGZsYXNoIC0gaWYgZm91bmQgd2UgaGF2ZSBTcGl0eiAqLworCWJsCWdldF9mbGFzaF9pZHMKKwlsZHIJcjcsIC5TUElUWklECisJY21wCXIzLCAjMHg3MwkJCUAgMTZNaUIgZmxhc2gKKwliZXEJLlNIQVJQRU5ECQkJQCBXZSBoYXZlIFNwaXR6CisKKy8qIENoZWNrIGZvciBhIHNlY29uZCBTQ09PUCBjaGlwIC0gaWYgZm91bmQgd2UgaGF2ZSBCb3J6b2kgKi8KKwlsZHIJcjEsIC5TQ09PUDJBRERSCisJbGRyCXI3LCAuQk9SWk9JSUQKKwltb3YgCXI2LCAjMHgwMTQwCisJc3RyaAlyNiwgW3IxXQorCWxkcmgJcjYsIFtyMV0KKwljbXAJcjYsICMweDAxNDAKKwliZXEJLlNIQVJQRU5ECQkJQCBXZSBoYXZlIEJvcnpvaQorCisvKiBNdXN0IGJlIEFraXRhICovCisJbGRyCXI3LCAuQUtJVEFJRAorCWIJLlNIQVJQRU5ECQkJQCBXZSBoYXZlIEJvcnpvaQorCiAuUFhBMjU1SUQ6CiAJLndvcmQJMHg2OTA1MmQwMAkJQCBQWEEyNTUgUHJvY2Vzc29yIElECisuUFhBMjcwSUQ6CisJLndvcmQJMHg2OTA1NDEwMAkJQCBQWEEyNzAgUHJvY2Vzc29yIElECiAuVzEwMElEOgogCS53b3JkCTB4NTc0MTEwMDIJCUAgdzEwMCBDaGlwIElECiAuVzEwMEFERFI6CiAJLndvcmQgCTB4MDgwMTAwMDAJCUAgdzEwMCBDaGlwIElEIFJlZyBBZGRyZXNzCisuU0NPT1AyQUREUjoKKwkud29yZAkweDA4ODAwMDQwCiAuUE9PRExFSUQ6CiAJLndvcmQJTUFDSF9UWVBFX1BPT0RMRQogLkNPUkdJSUQ6CkBAIC04Nyw2ICsxMTEsNDEgQEAKIAkud29yZAlNQUNIX1RZUEVfU0hFUEhFUkQKIC5IVVNLWUlEOgogCS53b3JkCU1BQ0hfVFlQRV9IVVNLWQorLlRPU0FJRDoKKwkud29yZAlNQUNIX1RZUEVfVE9TQQorLlNQSVRaSUQ6CisJLndvcmQJTUFDSF9UWVBFX1NQSVRaCisuQUtJVEFJRDoKKwkud29yZAlNQUNIX1RZUEVfQUtJVEEKKy5CT1JaT0lJRDoKKwkud29yZAlNQUNIX1RZUEVfQk9SWk9JCisKKy8qCisgKiBSZXR1cm46IHIyIC0gTkFORCBNYW51ZmFjdHVyZXIgSUQKKyAqICAgICAgICAgcjMgLSBOQU5EIENoaXAgSUQKKyAqIENvcnJ1cHRzOiByMQorICovCitnZXRfZmxhc2hfaWRzOgorCW1vdglyMSwgIzB4MGMwMDAwMDAJCUAgQmFzZSBhZGRyZXNzIG9mIE5BTkQgY2hpcAorCWxkcmIJcjMsIFtyMSwgIzI0XQkJQCBMb2FkIEZMQVNIQ1RMCisJYmljCXIzLCByMywgIzB4MTEJCUAgU0VUIE5DRQorCW9ycglyMywgcjMsICMweDBhCQlAIFNFVCBDTFIgKyBGTFdQCisJc3RyYglyMywgW3IxLCAjMjRdCQlAIFNhdmUgdG8gRkxBU0hDVEwKKwltb3YgCXIyLCAjMHg5MAkJQCBDb21tYW5kICJyZWFkaWQiCisJc3RyYglyMiwgW3IxLCAjMjBdCQlAIFNhdmUgdG8gRkxBU0hJTworCWJpYwlyMywgcjMsICMyCQlAIENMUiBDTEUKKwlvcnIJcjMsIHIzLCAjNAkJQCBTRVQgQUxFCisJc3RyYglyMywgW3IxLCAjMjRdCQlAIFNhdmUgdG8gRkxBU0hDVEwKKwltb3YJcjIsICMwCQkJQCBBZGRyZXNzIDB4MDAKKwlzdHJiCXIyLCBbcjEsICMyMF0JCUAgU2F2ZSB0byBGTEFTSElPCisJYmljCXIzLCByMywgIzQJCUAgQ0xSIEFMRQorCXN0cmIJcjMsIFtyMSwgIzI0XQkJQCBTYXZlIHRvIEZMQVNIQ1RMCisuZmlkczE6CisJbGRyYglyMywgW3IxLCAjMjRdCQlAIExvYWQgRkxBU0hDVEwKKwl0c3QJcjMsICMzMgkJCUAgSXMgY2hpcCByZWFkeT8KKwliZXEJLmZpZHMxCisJbGRyYglyMiwgW3IxLCAjMjBdCQlAIE5BTkQgTWFudWZhY3R1cmVyIElECisJbGRyYglyMywgW3IxLCAjMjBdCQlAIE5BTkQgQ2hpcCBJRAorCW1vdglwYywgbHIKKwogLlNIQVJQRU5EOgotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwppbmRleCAyNDk1NTI2Li40MTk4Njc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMgotIyBGcmkgSnVsICA4IDA0OjQ5OjM0IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMworIyBNb24gU2VwICA1IDE4OjA3OjEyIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0xMDIsOSArMTAyLDExIEBACiAjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQogQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorIyBDT05GSUdfT01BUF9ETV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMT15CiAjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAorQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQogCiAjCiAjIE9NQVAgQ29yZSBUeXBlCkBAIC0xNjYsNyArMTY4LDYgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX05PX0lETEVfSFo9eQogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKQEAgLTIzMCw2ICsyMzEsNjggQEAKICMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMjQzLDc4ICszMDYsNyBAQAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCi1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfREVCVUc9eQotQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTMKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIAogIwogIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKQEAgLTQwMyw3MiArMzk1LDggQEAKICMKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC01MTgsNiArNDQ2LDggQEAKICMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC02MTUsNzcgKzU0NSwxNSBAQAogIwogIyBJMkMgc3VwcG9ydAogIwotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAotIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKK0NPTkZJR19JU1AxMzAxX09NQVA9eQogCiAjCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotQ09ORklHX0lTUDEzMDFfT01BUD15Ci1DT05GSUdfVFBTNjUwMTA9eQotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtNzU2LDE1ICs2MjQsOSBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1RWTUlYRVIgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKIAogIwpAQCAtODEwLDYgKzY3Miw3IEBACiAjIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAKICMKICMgWEZTIHN1cHBvcnQKQEAgLTgxNyw2ICs2ODAsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtODU3LDE1ICs3MjEsNiBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0yCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldApAQCAtMTAwNyw0ICs4NjIsMyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKaW5kZXggZDUzYWYxNi4uMDAzOTc5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtdGltZS5jCkBAIC02MCw3ICs2MCw3IEBACiAJLyoKIAkgKiBOb3cgY29udmVydCB0aGVtIHRvIHVzZWMuCiAJICovCi0JdXNlYyA9ICh1bnNpZ25lZCBsb25nKShlbGFwc2VkICogKHRpY2tfbnNlYyAvIDEwMDApKSAvIExBVENIOworCXVzZWMgPSAodW5zaWduZWQgbG9uZykoZWxhcHNlZCAvIChDTE9DS19USUNLX1JBVEUvMTAwMDAwMCkpOwogCiAJcmV0dXJuIHVzZWM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXRpbWUuYwppbmRleCAxYTZkOWQ2Li44ZWRkZmFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS10aW1lLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAkvKgogCSAqIE5vdyBjb252ZXJ0IHRoZW0gdG8gdXNlYy4KIAkgKi8KLQl1c2VjID0gKHVuc2lnbmVkIGxvbmcpKGVsYXBzZWQgKiAodGlja19uc2VjIC8gMTAwMCkpIC8gTEFUQ0g7CisJdXNlYyA9ICh1bnNpZ25lZCBsb25nKShlbGFwc2VkIC8gKENMT0NLX1RJQ0tfUkFURS8xMDAwMDAwKSk7CiAKIAlyZXR1cm4gdXNlYzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCmluZGV4IDc4MWQxMGEuLjA5OGM4MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiBzdGF0aWMgc3RydWN0IGlycWNoaXAgaXhwMjAwMF9HUElPX2lycV9jaGlwID0gewogCS5hY2sJCT0gaXhwMjAwMF9HUElPX2lycV9tYXNrX2FjaywKIAkubWFzawkJPSBpeHAyMDAwX0dQSU9faXJxX21hc2ssCi0JLnVubWFzawkJPSBpeHAyMDAwX0dQSU9faXJxX3VubWFzaworCS51bm1hc2sJCT0gaXhwMjAwMF9HUElPX2lycV91bm1hc2ssCiAJLnNldF90eXBlCT0gaXhwMjAwMF9HUElPX2lycV90eXBlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCAwNDIyZTkwLi41MmFkMTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtMTc5LDE3ICsxNzksMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFjaGlwIGl4cDR4eF9pcnFfbGV2ZWxfY2hpcCA9IHsKLQkuYWNrCT0gaXhwNHh4X2lycV9tYXNrLAotCS5tYXNrCT0gaXhwNHh4X2lycV9tYXNrLAotCS51bm1hc2sJPSBpeHA0eHhfaXJxX2xldmVsX3VubWFzaywKLQkudHlwZQk9IGl4cDR4eF9zZXRfaXJxX3R5cGUKKwkuYWNrCQk9IGl4cDR4eF9pcnFfbWFzaywKKwkubWFzawkJPSBpeHA0eHhfaXJxX21hc2ssCisJLnVubWFzawkJPSBpeHA0eHhfaXJxX2xldmVsX3VubWFzaywKKwkuc2V0X3R5cGUJPSBpeHA0eHhfc2V0X2lycV90eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFjaGlwIGl4cDR4eF9pcnFfZWRnZV9jaGlwID0gewotCS5hY2sJPSBpeHA0eHhfaXJxX2FjaywKLQkubWFzawk9IGl4cDR4eF9pcnFfbWFzaywKLQkudW5tYXNrCT0gaXhwNHh4X2lycV91bm1hc2ssCi0JLnR5cGUJPSBpeHA0eHhfc2V0X2lycV90eXBlCisJLmFjawkJPSBpeHA0eHhfaXJxX2FjaywKKwkubWFzawkJPSBpeHA0eHhfaXJxX21hc2ssCisJLnVubWFzawkJPSBpeHA0eHhfaXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBpeHA0eHhfc2V0X2lycV90eXBlLAogfTsKIAogc3RhdGljIHZvaWQgaXhwNHh4X2NvbmZpZ19pcnEodW5zaWduZWQgaXJxLCBlbnVtIGl4cDR4eF9pcnFfdHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKaW5kZXggYTExYjZkOC4uYWZkNWQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBvbWFwX2lycV9jaGlwID0gewotCS5hY2sgICAgPSBvbWFwX21hc2tfYWNrX2lycSwKLQkubWFzayAgID0gb21hcF9tYXNrX2lycSwKLQkudW5tYXNrID0gb21hcF91bm1hc2tfaXJxLAotCS53YWtlCT0gb21hcF93YWtlX2lycSwKKwkuYWNrCQk9IG9tYXBfbWFza19hY2tfaXJxLAorCS5tYXNrCQk9IG9tYXBfbWFza19pcnEsCisJLnVubWFzawkJPSBvbWFwX3VubWFza19pcnEsCisJLnNldF93YWtlCT0gb21hcF93YWtlX2lycSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggZDRkMDNkMC4uMDY4MDdjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTIsNiArMiwxMyBAQAogCiBtZW51ICJTM0MyNFhYIEltcGxlbWVudGF0aW9ucyIKIAorY29uZmlnIE1BQ0hfQU5VQklTCisJYm9vbCAiU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUyIKKwlzZWxlY3QgQ1BVX1MzQzI0NDAKKwloZWxwCisJICBTYXkgWSBnZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNpbXRlYyBFbGVjdHJvbmljcyBBTlVCSVMKKwkgIGRldmVsb3BtZW50IHN5c3RlbQorCiBjb25maWcgQVJDSF9CQVNUCiAJYm9vbCAiU2ltdGVjIEVsZWN0cm9uaWNzIEJBU1QgKEVCMjQxMElUWCkiCiAJc2VsZWN0IENQVV9TM0MyNDEwCkBAIC0xMSw2ICsxOCwxNCBAQAogCiAJICBQcm9kdWN0IHBhZ2U6IDxodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvPi4KIAorY29uZmlnIEJBU1RfUEMxMDRfSVJRCisJYm9vbCAiQkFTVCBQQzEwNCBJUlEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfQkFTVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZCWhlcmUgdG8gZW5hYmxlIHRoZSBQQzEwNCBJUlEgcm91dGluZyBvbiB0aGUKKwkgIFNpbXRlYyBCQVNUIChFQjI0MTBJVFgpCisKIGNvbmZpZyBBUkNIX0gxOTQwCiAJYm9vbCAiSVBBUSBIMTk0MCIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCA1NWVkN2M3Li5iNGYxZTA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0yNiw4ICsyNiwxMyBAQAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQ0MC1pcnEubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQ0MC1jbG9jay5vCiAKKyMgYmFzdCBleHRyYXMKKworb2JqLSQoQ09ORklHX0JBU1RfUEMxMDRfSVJRKQkrPSBiYXN0LWlycS5vCisKICMgbWFjaGluZSBzcGVjaWZpYyBzdXBwb3J0CiAKK29iai0kKENPTkZJR19NQUNIX0FOVUJJUykJKz0gbWFjaC1hbnViaXMubwogb2JqLSQoQ09ORklHX0FSQ0hfQkFTVCkJCSs9IG1hY2gtYmFzdC5vIHVzYi1zaW10ZWMubwogb2JqLSQoQ09ORklHX0FSQ0hfSDE5NDApCSs9IG1hY2gtaDE5NDAubwogb2JqLSQoQ09ORklHX01BQ0hfTjMwKQkJKz0gbWFjaC1uMzAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwppbmRleCA0OTkxNDcwLi5mYmJlYjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKiAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvCkBAIC0yMSw3ICsyMSw4IEBACiAgKgogICogTW9kaWZpY2F0aW9uczoKICAqICAgICAwOC1KYW4tMjAwMyBCSkQgIE1vdmVkIGZyb20gY2VudHJhbCBJUlEgY29kZQotICovCisgKiAgICAgMjEtQXVnLTIwMDUgQkpEICBGaXhlZCBtaXNzaW5nIGNvZGUgYW5kIGNvbXBpbGUgZXJyb3JzCisqLwogCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMCwxMiArMzEsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvczNjMjQxMC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYmFzdC1tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9iYXN0LWlycS5oPgorCisjaW5jbHVkZSAiaXJxLmgiCiAKICNpZiAwCiAjaW5jbHVkZSA8YXNtL2RlYnVnLWxsLmg+CkBAIC03OSwxNSArODcsMTUgQEAKIAl0ZW1wID0gX19yYXdfcmVhZGIoQkFTVF9WQV9QQzEwNF9JUlFNQVNLKTsKIAl0ZW1wICY9IH5iYXN0X3BjMTA0X2lycW1hc2tzW2lycW5vXTsKIAlfX3Jhd193cml0ZWIodGVtcCwgQkFTVF9WQV9QQzEwNF9JUlFNQVNLKTsKLQotCWlmICh0ZW1wID09IDApCi0JCWJhc3RfZXh0aW50X21hc2soSVJRX0lTQSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1iYXN0X3BjMTA0X2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCitiYXN0X3BjMTA0X21hc2thY2sodW5zaWduZWQgaW50IGlycW5vKQogewotCWJhc3RfZXh0aW50X2FjayhJUlFfSVNBKTsKKwlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgSVJRX0lTQTsKKworCWJhc3RfcGMxMDRfbWFzayhpcnFubyk7CisJZGVzYy0+Y2hpcC0+YWNrKElSUV9JU0EpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTgsMTQgKzEwNiwxMiBAQAogCXRlbXAgPSBfX3Jhd19yZWFkYihCQVNUX1ZBX1BDMTA0X0lSUU1BU0spOwogCXRlbXAgfD0gYmFzdF9wYzEwNF9pcnFtYXNrc1tpcnFub107CiAJX19yYXdfd3JpdGViKHRlbXAsIEJBU1RfVkFfUEMxMDRfSVJRTUFTSyk7Ci0KLQliYXN0X2V4dGludF91bm1hc2soSVJRX0lTQSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFzdF9wYzEwNF9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFjaGlwICBiYXN0X3BjMTA0X2NoaXAgPSB7CiAJLm1hc2sJICAgICA9IGJhc3RfcGMxMDRfbWFzaywKIAkudW5tYXNrCSAgICAgPSBiYXN0X3BjMTA0X3VubWFzaywKLQkuYWNrCSAgICAgPSBiYXN0X3BjMTA0X2FjaworCS5hY2sJICAgICA9IGJhc3RfcGMxMDRfbWFza2FjawogfTsKIAogc3RhdGljIHZvaWQKQEAgLTExOSwxNCArMTI1LDQ5IEBACiAKIAlzdGF0ID0gX19yYXdfcmVhZGIoQkFTVF9WQV9QQzEwNF9JUlFSRVEpICYgMHhmOwogCi0JZm9yIChpID0gMDsgaSA8IDQgJiYgc3RhdCAhPSAwOyBpKyspIHsKLQkJaWYgKHN0YXQgJiAxKSB7Ci0JCQlpcnFubyA9IGJhc3RfcGMxMDRfaXJxc1tpXTsKLQkJCWRlc2MgPSBpcnFfZGVzYyArIGlycW5vOworCWlmICh1bmxpa2VseShzdGF0ID09IDApKSB7CisJCS8qIGFjayBpZiB3ZSBnZXQgYW4gaXJxIHdpdGggbm90aGluZyAoaWUsIHN0YXJ0dXApICovCiAKLQkJCWRlc2NfaGFuZGxlX2lycShpcnFubywgZGVzYywgcmVncyk7CisJCWRlc2MgPSBpcnFfZGVzYyArIElSUV9JU0E7CisJCWRlc2MtPmNoaXAtPmFjayhJUlFfSVNBKTsKKwl9IGVsc2UgeworCQkvKiBoYW5kbGUgdGhlIElSUSAqLworCisJCWZvciAoaSA9IDA7IHN0YXQgIT0gMDsgaSsrLCBzdGF0ID4+PSAxKSB7CisJCQlpZiAoc3RhdCAmIDEpIHsKKwkJCQlpcnFubyA9IGJhc3RfcGMxMDRfaXJxc1tpXTsKKworCQkJCWRlc2NfaGFuZGxlX2lycShpcnFubywgaXJxX2Rlc2MgKyBpcnFubywgcmVncyk7CisJCQl9CiAJCX0KLQotCQlzdGF0ID4+PSAxOwogCX0KIH0KKworc3RhdGljIF9faW5pdCBpbnQgYmFzdF9pcnFfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKG1hY2hpbmVfaXNfYmFzdCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkJBU1QgUEMxMDQgSVJRIHJvdXRpbmcsIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwkJLyogemFwIGFsbCB0aGUgSVJRcyAqLworCisJCV9fcmF3X3dyaXRlYigweDAsIEJBU1RfVkFfUEMxMDRfSVJRTUFTSyk7CisKKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0lTQSwgYmFzdF9pcnFfcGMxMDRfZGVtdXgpOworCisJCS8qIHJlaWdzdGVyIG91ciBJUlFzICovCisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJdW5zaWduZWQgaW50IGlycW5vID0gYmFzdF9wYzEwNF9pcnFzW2ldOworCisJCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZiYXN0X3BjMTA0X2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBkb19sZXZlbF9JUlEpOworCQkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChiYXN0X2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3YWEwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCkBAIC0wLDAgKzEsMjcwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCTAyLU1heS0yMDA1IEJKRCAgQ29waWVkIGZyb20gbWFjaC1iYXN0LmMKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2FudWJpcy1tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hbnViaXMtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYW51YmlzLWNwbGQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbmFuZC5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorCisjZGVmaW5lIENPUFlSSUdIVCAiLCAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYW51YmlzX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgIC8qIElTQSBJTyBhcmVhcyAqLworCisgIHsgKHUzMilTM0MyNFhYX1ZBX0lTQV9CWVRFLCAweDAsCSAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCisgIHsgKHUzMilTM0MyNFhYX1ZBX0lTQV9XT1JELCAweDAsCSAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCisKKyAgLyogd2UgY291bGQgcG9zc2libHkgY29tcHJlc3MgdGhlIG5leHQgc2V0IGRvd24gaW50byBhIHNldCBvZiBzbWFsbGVyIHRhYmxlcworICAgKiBwYWdldGFibGVzLCBidXQgdGhhdCB3b3VsZCBtZWFuIHVzaW5nIGFuIEwyIHNlY3Rpb24sIGFuZCBpdCBzdGlsbCBtZWFucworICAgKiB3ZSBjYW5ub3QgYWN0dWFsbHkgZmVlZCB0aGUgc2FtZSByZWdpc3RlciB0byBhbiBMRFIgZHVlIHRvIDE2SyBzcGFjaW5nCisgICAqLworCisgIC8qIENQTEQgY29udHJvbCByZWdpc3RlcnMgKi8KKworICB7ICh1MzIpQU5VQklTX1ZBX0NUUkwxLAlBTlVCSVNfUEFfQ1RSTDEsCVNaXzRLLCBNVF9ERVZJQ0UgfSwKKyAgeyAodTMyKUFOVUJJU19WQV9DVFJMMiwJQU5VQklTX1BBX0NUUkwyLAlTWl80SywgTVRfREVWSUNFIH0sCisKKyAgLyogSURFIGRyaXZlcyAqLworCisgIHsgKHUzMilBTlVCSVNfSURFUFJJLAkJUzNDMjQxMF9DUzMsCQlTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsgKHUzMilBTlVCSVNfSURFUFJJQVVYLAlTM0MyNDEwX0NTMysoMTw8MjYpLAlTWl8xTSwgTVRfREVWSUNFIH0sCisKKyAgeyAodTMyKUFOVUJJU19JREVTRUMsCQlTM0MyNDEwX0NTNCwJCVNaXzFNLCBNVF9ERVZJQ0UgfSwKKyAgeyAodTMyKUFOVUJJU19JREVTRUNBVVgsCVMzQzI0MTBfQ1M0KygxPDwyNiksCVNaXzFNLCBNVF9ERVZJQ0UgfSwKK307CisKKyNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCisjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKKyNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgYW51YmlzX3NlcmlhbF9jbG9ja3NbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJ1Y2xrIiwKKwkJLmRpdmlzb3IJPSAxLAorCQkubWluX2JhdWQJPSAwLAorCQkubWF4X2JhdWQJPSAwLAorCX0sCisJWzFdID0geworCQkubmFtZQkJPSAicGNsayIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMC4KKwl9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGFudWJpc191YXJ0Y2Znc1tdID0geworCVswXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMCwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwkJLmNsb2NrcwkgICAgID0gYW51YmlzX3NlcmlhbF9jbG9ja3MsCisJCS5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUoYW51YmlzX3NlcmlhbF9jbG9ja3MpCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJCS5jbG9ja3MJICAgICA9IGFudWJpc19zZXJpYWxfY2xvY2tzLAorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKGFudWJpc19zZXJpYWxfY2xvY2tzKQorCX0sCit9OworCisvKiBOQU5EIEZsYXNoIG9uIEFudWJpcyBib2FyZCAqLworCitzdGF0aWMgaW50IGV4dGVybmFsX21hcFtdICAgPSB7IDIgfTsKK3N0YXRpYyBpbnQgY2hpcDBfbWFwW10gICAgICA9IHsgMCB9Oworc3RhdGljIGludCBjaGlwMV9tYXBbXSAgICAgID0geyAxIH07CisKK3N0cnVjdCBtdGRfcGFydGl0aW9uIGFudWJpc19kZWZhdWx0X25hbmRfcGFydFtdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQm9vdCBBZ2VudCIsCisJCS5zaXplCT0gU1pfMTZLLAorCQkub2Zmc2V0CT0gMAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICIvYm9vdCIsCisJCS5zaXplCT0gU1pfNE0gLSBTWl8xNkssCisJCS5vZmZzZXQJPSBTWl8xNkssCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gInVzZXIxIiwKKwkJLm9mZnNldAk9IFNaXzRNLAorCQkuc2l6ZQk9IFNaXzMyTSAtIFNaXzRNLAorCX0sCisJWzNdID0geworCQkubmFtZQk9ICJ1c2VyMiIsCisJCS5vZmZzZXQJPSBTWl8zMk0sCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9Cit9OworCisvKiB0aGUgQW51YmlzIGhhcyAzIHNlbGVjdGFibGUgc2xvdHMgZm9yIG5hbmQtZmxhc2gsIHRoZSB0d28KKyAqIG9uLWJvYXJkIGNoaXAgYXJlYXMsIGFzIHdlbGwgYXMgdGhlIGV4dGVybmFsIHNsb3QuCisgKgorICogTm90ZSwgdGhlcmUgaXMgbm8gY3VycmVudCBob3QtcGx1ZyBzdXBwb3J0IGZvciB0aGUgRXh0ZXJuYWwKKyAqIHNvY2tldC4KKyovCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCBhbnViaXNfbmFuZF9zZXRzW10gPSB7CisJWzFdID0geworCQkubmFtZQkJPSAiRXh0ZXJuYWwiLAorCQkubnJfY2hpcHMJPSAxLAorCQkubnJfbWFwCQk9IGV4dGVybmFsX21hcCwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGFudWJpc19kZWZhdWx0X25hbmRfcGFydCksCisJCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0CisJfSwKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJjaGlwMCIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9tYXAJCT0gY2hpcDBfbWFwLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0KSwKKwkJLnBhcnRpdGlvbnMJPSBhbnViaXNfZGVmYXVsdF9uYW5kX3BhcnQKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJCT0gImNoaXAxIiwKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLm5yX21hcAkJPSBjaGlwMV9tYXAsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShhbnViaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IGFudWJpc19kZWZhdWx0X25hbmRfcGFydAorCX0sCit9OworCitzdGF0aWMgdm9pZCBhbnViaXNfbmFuZF9zZWxlY3Qoc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgKnNldCwgaW50IHNsb3QpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXNsb3QgPSBzZXQtPm5yX21hcFtzbG90XSAmIDM7CisKKwlwcl9kZWJ1ZygiYW51YmlzX25hbmQ6IHNlbGVjdGluZyBzbG90ICVkIChzZXQgJXAsJXApXG4iLAorCQkgc2xvdCwgc2V0LCBzZXQtPm5yX21hcCk7CisKKwl0bXAgPSBfX3Jhd19yZWFkYihBTlVCSVNfVkFfQ1RSTDEpOworCXRtcCAmPSB+QU5VQklTX0NUUkwxX05BTkRTRUw7CisJdG1wIHw9IHNsb3Q7CisKKwlwcl9kZWJ1ZygiYW51YmlzX25hbmQ6IGN0cmwxIG5vdyAlMDJ4XG4iLCB0bXApOworCisJX19yYXdfd3JpdGViKHRtcCwgQU5VQklTX1ZBX0NUUkwxKTsKK30KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgYW51YmlzX25hbmRfaW5mbyA9IHsKKwkudGFjbHMJCT0gMjUsCisJLnR3cnBoMAkJPSA4MCwKKwkudHdycGgxCQk9IDgwLAorCS5ucl9zZXRzCT0gQVJSQVlfU0laRShhbnViaXNfbmFuZF9zZXRzKSwKKwkuc2V0cwkJPSBhbnViaXNfbmFuZF9zZXRzLAorCS5zZWxlY3RfY2hpcAk9IGFudWJpc19uYW5kX3NlbGVjdCwKK307CisKKworLyogU3RhbmRhcmQgQW51YmlzIGRldmljZXMgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFudWJpc19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX2FkYywKKwkmczNjX2RldmljZV9pMmMsCisgCSZzM2NfZGV2aWNlX3J0YywKKwkmczNjX2RldmljZV9uYW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmFudWJpc19jbG9ja3NbXSA9IHsKKwkmczNjMjR4eF9kY2xrMCwKKwkmczNjMjR4eF9kY2xrMSwKKwkmczNjMjR4eF9jbGtvdXQwLAorCSZzM2MyNHh4X2Nsa291dDEsCisJJnMzYzI0eHhfdWNsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCBhbnViaXNfYm9hcmQgX19pbml0ZGF0YSA9IHsKKwkuZGV2aWNlcyAgICAgICA9IGFudWJpc19kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShhbnViaXNfZGV2aWNlcyksCisJLmNsb2NrcwkgICAgICAgPSBhbnViaXNfY2xvY2tzLAorCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShhbnViaXNfY2xvY2tzKQorfTsKKwordm9pZCBfX2luaXQgYW51YmlzX21hcF9pbyh2b2lkKQoreworCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLworCisJczNjMjR4eF9kY2xrMC5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazAucmF0ZSAgID0gMTIqMTAwMCoxMDAwOworCisJczNjMjR4eF9kY2xrMS5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazEucmF0ZSAgID0gMjQqMTAwMCoxMDAwOworCisJczNjMjR4eF9jbGtvdXQwLnBhcmVudCAgPSAmczNjMjR4eF9kY2xrMDsKKwlzM2MyNHh4X2Nsa291dDEucGFyZW50ICA9ICZzM2MyNHh4X2RjbGsxOworCisJczNjMjR4eF91Y2xrLnBhcmVudCAgPSAmczNjMjR4eF9jbGtvdXQxOworCisJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJmFudWJpc19uYW5kX2luZm87CisKKwlzM2MyNHh4X2luaXRfaW8oYW51YmlzX2lvZGVzYywgQVJSQVlfU0laRShhbnViaXNfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoYW51YmlzX3VhcnRjZmdzLCBBUlJBWV9TSVpFKGFudWJpc191YXJ0Y2ZncykpOworCXMzYzI0eHhfc2V0X2JvYXJkKCZhbnViaXNfYm9hcmQpOworCisJLyogZW5zdXJlIHRoYXQgdGhlIEdQSU8gaXMgc2V0dXAgKi8KKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BBMCwgMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQU5VQklTLCAiU2ltdGVjLUFudWJpcyIpCisJLyogTWFpbnRhaW5lcjogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiAqLworCS5waHlzX3JhbQk9IFMzQzI0MTBfU0RSQU1fUEEsCisJLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKKwkubWFwX2lvCQk9IGFudWJpc19tYXBfaW8sCisJLmluaXRfaXJxCT0gczNjMjR4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLXNpbXRlYy5jCmluZGV4IDJjYjc5ODguLjRjN2NjZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0tc2ltdGVjLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogCS8qIGNoZWNrIHdoaWNoIG1hY2hpbmUgd2UgYXJlIHJ1bm5pbmcgb24gKi8KIAotCWlmICghbWFjaGluZV9pc19iYXN0KCkgJiYgIW1hY2hpbmVfaXNfdnIxMDAwKCkpCisJaWYgKCFtYWNoaW5lX2lzX2Jhc3QoKSAmJiAhbWFjaGluZV9pc192cjEwMDAoKSAmJiAhbWFjaGluZV9pc19hbnViaXMoKSkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJTaW10ZWMgQm9hcmQgUG93ZXIgTWFuYW5nZW1lbnQiIENPUFlSSUdIVCAiXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdGltZS5jCmluZGV4IDc2NWEzYTkuLmMwYWNmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAKIAkvKiBjb25maWd1cmUgdGhlIHN5c3RlbSBmb3Igd2hpY2hldmVyIG1hY2hpbmUgaXMgaW4gdXNlICovCiAKLQlpZiAobWFjaGluZV9pc19iYXN0KCkgfHwgbWFjaGluZV9pc192cjEwMDAoKSkgeworCWlmIChtYWNoaW5lX2lzX2Jhc3QoKSB8fCBtYWNoaW5lX2lzX3ZyMTAwMCgpIHx8IG1hY2hpbmVfaXNfYW51YmlzKCkpIHsKIAkJLyogdGltZXIgaXMgYXQgMTJNSHosIHNjYWxlciBpcyAxICovCiAJCXRpbWVyX3VzZWNfdGlja3MgPSB0aW1lcl9tYXNrX3VzZWNfdGlja3MoMSwgMTIwMDAwMDApOwogCQl0Y250ID0gMTIwMDAwMDAgLyBIWjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggMzQ1MzY1OC4uOTY5M2U5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTkxLDYgKzkxLDEzIEBACiAJICBLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IHNob3VsZCBiZSBhIGRpdmlzb3Igb2YgMzI3NjgsCiAJICBzdWNoIGFzIDY0IG9yIDEyOC4KIAorY29uZmlnIE9NQVBfRE1fVElNRVIKKwlib29sICJVc2UgZHVhbC1tb2RlIHRpbWVyIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWAorCWhlbHAKKwkgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBPTUFQIER1YWwtTW9kZSB0aW1lcnMuCisKIGNob2ljZQogCXByb21wdCAiTG93LWxldmVsIGRlYnVnIGNvbnNvbGUgVUFSVCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUApAQCAtMTA3LDYgKzExNCwxNSBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIE9NQVBfU0VSSUFMX1dBS0UKKwlib29sICJFbmFibGUgd2FrZS11cCBldmVudHMgZm9yIHNlcmlhbCBwb3J0cyIKKwlkZXBlbmRzIE9NQVBfTVVYCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGhhdmUgeW91ciBzeXN0ZW0gd2FrZSB1cAorCSAgdG8gZGF0YSBvbiB0aGUgc2VyaWFsIFJYIGxpbmUuIFRoaXMgYWxsb3dzIHlvdSB0byB3YWtlIHRoZQorCSAgc3lzdGVtIGZyb20gc2VyaWFsIGNvbnNvbGUuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQppbmRleCA1MzFlMTFhLi43ZTE0NGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjb21tb24ubyBkbWEubyBjbG9jay5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vCitvYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KQEAgLTE1LDMgKzE1LDUgQEAKIG9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUSkgKz0gY3B1LW9tYXAubworb2JqLSQoQ09ORklHX09NQVBfRE1fVElNRVIpICs9IGRtdGltZXIubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCmluZGV4IDU5ZDkxYjMuLjUyYTU4YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgInNyYW0uaCIKIAogc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOwogc3RhdGljIERFQ0xBUkVfTVVURVgoY2xvY2tzX3NlbSk7CkBAIC0xNDEsNyArMTQyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybXBlcl9jayA9IHsKIAkubmFtZQkJPSAiYXJtcGVyX2NrIiwKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDczMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgUkFURV9DS0NUTCwKIAkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCkBAIC0zODUsNyArMzg2LDggQEAKIAkubmFtZQkJPSAidWFydDJfY2siLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDMwLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCkBAIC00NDMsNiArNDQ1LDE1IEBACiAJLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrID0geworCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLworCS5yYXRlCQk9IDQ4MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSBTT0ZUX1JFUV9SRUcsCisJLmVuYWJsZV9iaXQJPSA0LAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNTEwID0gewogCS5uYW1lCQk9ICJtY2xrIiwKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KQEAgLTU1Miw2ICs1NjMsNyBAQAogCSZ1YXJ0M18xNnh4LAogCSZ1c2JfY2xrbywKIAkmdXNiX2hoY19jazE1MTAsICZ1c2JfaGhjX2NrMTZ4eCwKKwkmdXNiX2RjX2NrLAogCSZtY2xrXzE1MTAsICAmbWNsa18xNnh4LAogCSZiY2xrXzE1MTAsICAmYmNsa18xNnh4LAogCSZtbWMxX2NrLApAQCAtOTQ2LDE0ICs5NTgsMTMgQEAKIAlpZiAoIXB0ci0+cmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXB0ci0+cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBJbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBub3QgbmVlZCB0byByZXByb2dyYW0gRFBMTC4KKwkgKiBSZXByb2dyYW1taW5nIHRoZSBEUExMIGlzIHRyaWNreSwgaXQgbXVzdCBiZSBkb25lIGZyb20gU1JBTS4KKwkgKi8KKwlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKIAotCWlmICh1bmxpa2VseShja19kcGxsMS5yYXRlID09IDApKSB7Ci0JCW9tYXBfd3JpdGV3KHB0ci0+ZHBsbGN0bF92YWwsIERQTExfQ1RMKTsKLQkJY2tfZHBsbDEucmF0ZSA9IHB0ci0+cGxsX3JhdGU7Ci0JfQotCW9tYXBfd3JpdGV3KHB0ci0+Y2tjdGxfdmFsLCBBUk1fQ0tDVEwpOworCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOwogCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjI0LDkgKzEyMzUsMTEgQEAKICNlbmRpZgogCS8qIENhY2hlIHJhdGVzIGZvciBjbG9ja3MgY29ubmVjdGVkIHRvIGNrX3JlZiAobm90IGRwbGwxKSAqLwogCXByb3BhZ2F0ZV9yYXRlKCZja19yZWYpOwotCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC4lMDFsZC8lbGQuJTAxbGQgTUh6XG4iLAogCSAgICAgICBja19yZWYucmF0ZSAvIDEwMDAwMDAsIChja19yZWYucmF0ZSAvIDEwMDAwMCkgJSAxMCwKLQkgICAgICAgY2tfZHBsbDEucmF0ZSwgYXJtX2NrLnJhdGUpOworCSAgICAgICBja19kcGxsMS5yYXRlIC8gMTAwMDAwMCwgKGNrX2RwbGwxLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIGFybV9jay5yYXRlIC8gMTAwMDAwMCwgKGFybV9jay5yYXRlIC8gMTAwMDAwKSAlIDEwKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIKIAkvKiBTZWxlY3Qgc2xpY2VyIG91dHB1dCBhcyBPTUFQIGlucHV0IGNsb2NrICovCkBAIC0xMjcxLDcgKzEyODQsOSBAQAogCXN0cnVjdCBjbGsgKnA7CiAJX191MzIgcmVndmFsMzI7CiAKLQlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcpOworCS8qIFVTQl9SRVFfRU4gd2lsbCBiZSBkaXNhYmxlZCBsYXRlciBpZiBuZWNlc3NhcnkgKHVzYl9kY19jaykgKi8KKwlyZWd2YWwzMiA9IG9tYXBfcmVhZHcoU09GVF9SRVFfUkVHKSAmICgxIDw8IDQpOworCW9tYXBfd3JpdGV3KHJlZ3ZhbDMyLCBTT0ZUX1JFUV9SRUcpOwogCW9tYXBfd3JpdGV3KDAsIFNPRlRfUkVRX1JFRzIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggZWE5NjdhOC4uNmNiMjBhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgpAQCAtMzUsMTEgKzM2LDExIEBACiAKICNkZWZpbmUgTk9fTEVOR1RIX0NIRUNLIDB4ZmZmZmZmZmYKIAotZXh0ZXJuIGludCBvbWFwX2Jvb3Rsb2FkZXJfdGFnX2xlbjsKLWV4dGVybiB1OCBvbWFwX2Jvb3Rsb2FkZXJfdGFnW107Cit1bnNpZ25lZCBjaGFyIG9tYXBfYm9vdGxvYWRlcl90YWdbNTEyXTsKK2ludCBvbWFwX2Jvb3Rsb2FkZXJfdGFnX2xlbjsKIAogc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCAqb21hcF9ib2FyZF9jb25maWc7Ci1pbnQgb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IDA7CitpbnQgb21hcF9ib2FyZF9jb25maWdfc2l6ZTsKIAogc3RhdGljIGNvbnN0IHZvaWQgKmdldF9jb25maWcodTE2IHRhZywgc2l6ZV90IGxlbiwgaW50IHNraXAsIHNpemVfdCAqbGVuX291dCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBjMGE1YzJmLi5kYTdiNjUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKIAkJY3NyICY9IDB4N2Y7CiAJfQotCWlmICghY3NyKQorCWlmICgoY3NyICYgMHgzZikgPT0gMCkKIAkJcmV0dXJuIDA7CiAJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICVkIChDU1IgJTA0eClcbiIsCkBAIC04OTAsMTEgKzg5MCwxMSBAQAogCXcgfD0gMSA8PCA4OwogCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CiAKKwlsY2RfZG1hLmFjdGl2ZSA9IDE7CisKIAl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CiAJdyB8PSAxIDw8IDc7CiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwotCi0JbGNkX2RtYS5hY3RpdmUgPSAxOwogfQogCiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKQpAQCAtOTY1LDggKzk2NSw4IEBACiAgKi8KIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX3NyY19wb3MoaW50IGxjaCkKIHsKLQlyZXR1cm4gKGRtYV9hZGRyX3QpIChPTUFQX0RNQV9DU1NBX0wobGNoKSB8Ci0JCQkgICAgIChPTUFQX0RNQV9DU1NBX1UobGNoKSA8PCAxNikpOworCXJldHVybiAoZG1hX2FkZHJfdCkgKG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NTQV9MKGxjaCkpIHwKKwkob21hcF9yZWFkdyhPTUFQX0RNQV9DU1NBX1UobGNoKSkgPDwgMTYpKTsKIH0KIAogLyoKQEAgLTk3OSw4ICs5NzksMTggQEAKICAqLwogZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQogewotCXJldHVybiAoZG1hX2FkZHJfdCkgKE9NQVBfRE1BX0NEU0FfTChsY2gpIHwKLQkJCSAgICAgKE9NQVBfRE1BX0NEU0FfVShsY2gpIDw8IDE2KSk7CisJcmV0dXJuIChkbWFfYWRkcl90KSAob21hcF9yZWFkdyhPTUFQX0RNQV9DRFNBX0wobGNoKSkgfAorCShvbWFwX3JlYWR3KE9NQVBfRE1BX0NEU0FfVShsY2gpKSA8PCAxNikpOworfQorCisvKgorICogUmV0dXJucyBjdXJyZW50IHNvdXJjZSB0cmFuc2ZlciBjb3VudGluZyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgorICogQ2FuIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgYSB0cmFuc2ZlciBpbnNpZGUgYSAgYmxvY2suCisgKiBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIGRpc2FibGVkIGludGVycnVwdHMuCisgKi8KK2ludCBvbWFwX2dldF9kbWFfc3JjX2FkZHJfY291bnRlcihpbnQgbGNoKQoreworCXJldHVybiAoZG1hX2FkZHJfdCkgb21hcF9yZWFkdyhPTUFQX0RNQV9DU0FDKGxjaCkpOwogfQogCiBpbnQgb21hcF9kbWFfcnVubmluZyh2b2lkKQpAQCAtMTA3Niw2ICsxMDg2LDcgQEAKIAogRVhQT1JUX1NZTUJPTChvbWFwX2dldF9kbWFfc3JjX3Bvcyk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9kc3RfcG9zKTsKK0VYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIpOwogRVhQT1JUX1NZTUJPTChvbWFwX2NsZWFyX2RtYSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9wcmlvcml0eSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfcmVxdWVzdF9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0NjhkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisgKgorICogT01BUCBEdWFsLU1vZGUgVGltZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IExhdXJpIExldWtrdW5lbiA8bGF1cmkubGV1a2t1bmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNkZWZpbmUgT01BUF9USU1FUl9DT1VOVAkJOAorCisjZGVmaW5lIE9NQVBfVElNRVJfSURfUkVHCQkweDAwCisjZGVmaW5lIE9NQVBfVElNRVJfT0NQX0NGR19SRUcJCTB4MTAKKyNkZWZpbmUgT01BUF9USU1FUl9TWVNfU1RBVF9SRUcJCTB4MTQKKyNkZWZpbmUgT01BUF9USU1FUl9TVEFUX1JFRwkJMHgxOAorI2RlZmluZSBPTUFQX1RJTUVSX0lOVF9FTl9SRUcJCTB4MWMKKyNkZWZpbmUgT01BUF9USU1FUl9XQUtFVVBfRU5fUkVHCTB4MjAKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1JFRwkJMHgyNAorI2RlZmluZSBPTUFQX1RJTUVSX0NPVU5URVJfUkVHCQkweDI4CisjZGVmaW5lIE9NQVBfVElNRVJfTE9BRF9SRUcJCTB4MmMKKyNkZWZpbmUgT01BUF9USU1FUl9UUklHR0VSX1JFRwkJMHgzMAorI2RlZmluZSBPTUFQX1RJTUVSX1dSSVRFX1BFTkRfUkVHIAkweDM0CisjZGVmaW5lIE9NQVBfVElNRVJfTUFUQ0hfUkVHCQkweDM4CisjZGVmaW5lIE9NQVBfVElNRVJfQ0FQVFVSRV9SRUcJCTB4M2MKKyNkZWZpbmUgT01BUF9USU1FUl9JRl9DVFJMX1JFRwkJMHg0MAorCisKK3N0YXRpYyBzdHJ1Y3QgZG10aW1lcl9pbmZvX3N0cnVjdCB7CisJc3RydWN0IGxpc3RfaGVhZAl1bnVzZWRfdGltZXJzOworCXN0cnVjdCBsaXN0X2hlYWQJcmVzZXJ2ZWRfdGltZXJzOworfSBkbV90aW1lcl9pbmZvOworCitzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgZG1fdGltZXJzW10gPSB7CisJeyAuYmFzZT0weGZmZmIxNDAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVIxIH0sCisJeyAuYmFzZT0weGZmZmIxYzAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVIyIH0sCisJeyAuYmFzZT0weGZmZmIyNDAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVIzIH0sCisJeyAuYmFzZT0weGZmZmIyYzAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVI0IH0sCisJeyAuYmFzZT0weGZmZmIzNDAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVI1IH0sCisJeyAuYmFzZT0weGZmZmIzYzAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVI2IH0sCisJeyAuYmFzZT0weGZmZmI0NDAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVI3IH0sCisJeyAuYmFzZT0weGZmZmI0YzAwLCAuaXJxPUlOVF8xNjEwX0dQVElNRVI4IH0sCisJeyAuYmFzZT0weDAgfSwKK307CisKKworc3RhdGljIHNwaW5sb2NrX3QgZG1fdGltZXJfbG9jazsKKworCitpbmxpbmUgdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwlvbWFwX3dyaXRlbCh2YWx1ZSwgdGltZXItPmJhc2UgKyByZWcpOworCXdoaWxlIChvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1dSSVRFX1BFTkRfUkVHKSkKKwkJOworfQorCit1MzIgb21hcF9kbV90aW1lcl9yZWFkX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcpCit7CisJcmV0dXJuIG9tYXBfcmVhZGwodGltZXItPmJhc2UgKyByZWcpOworfQorCitpbnQgb21hcF9kbV90aW1lcnNfYWN0aXZlKHZvaWQpCit7CisJc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyOworCisJZm9yICh0aW1lciA9ICZkbV90aW1lcnNbMF07IHRpbWVyLT5iYXNlOyArK3RpbWVyKQorCQlpZiAob21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRykgJgorCQkgICAgT01BUF9USU1FUl9DVFJMX1NUKQorCQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpCit7CisJaW50IG4gPSAodGltZXIgLSBkbV90aW1lcnMpIDw8IDE7CisJdTMyIGw7CisKKwlsID0gb21hcF9yZWFkbChNT0RfQ09ORl9DVFJMXzEpICYgfigweDAzIDw8IG4pOworCWwgfD0gc291cmNlIDw8IG47CisJb21hcF93cml0ZWwobCwgTU9EX0NPTkZfQ1RSTF8xKTsKK30KKworCitzdGF0aWMgdm9pZCBvbWFwX2RtX3RpbWVyX3Jlc2V0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwkvKiBSZXNldCBhbmQgc2V0IHBvc3RlZCBtb2RlICovCisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfSUZfQ1RSTF9SRUcsIDB4MDYpOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX09DUF9DRkdfUkVHLCAweDAyKTsKKworCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSh0aW1lciwgT01BUF9USU1FUl9TUkNfQVJNWE9SKTsKK30KKworCisKK3N0cnVjdCBvbWFwX2RtX3RpbWVyICogb21hcF9kbV90aW1lcl9yZXF1ZXN0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRtX3RpbWVyX2luZm8udW51c2VkX3RpbWVycykpIHsKKwkJdGltZXIgPSAoc3RydWN0IG9tYXBfZG1fdGltZXIgKikKKwkJCQlkbV90aW1lcl9pbmZvLnVudXNlZF90aW1lcnMubmV4dDsKKwkJbGlzdF9tb3ZlX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil0aW1lciwKKwkJCQkmZG1fdGltZXJfaW5mby5yZXNlcnZlZF90aW1lcnMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGltZXI7Cit9CisKKwordm9pZCBvbWFwX2RtX3RpbWVyX2ZyZWUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlvbWFwX2RtX3RpbWVyX3Jlc2V0KHRpbWVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CisJbGlzdF9tb3ZlX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil0aW1lciwgJmRtX3RpbWVyX2luZm8udW51c2VkX3RpbWVycyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLAorCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9JTlRfRU5fUkVHLCB2YWx1ZSk7Cit9CisKK3Vuc2lnbmVkIGludCBvbWFwX2RtX3RpbWVyX3JlYWRfc3RhdHVzKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwlyZXR1cm4gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9TVEFUX1JFRyk7Cit9CisKK3ZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfU1RBVF9SRUcsIHZhbHVlKTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZV9hdXRvcmVsb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwl1MzIgbDsKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJbCB8PSBPTUFQX1RJTUVSX0NUUkxfQVI7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfdHJpZ2dlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDEpOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTMyIGw7CisKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJbCB8PSB2YWx1ZSAmIDB4MzsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7Cit9CisKK3ZvaWQgb21hcF9kbV90aW1lcl9zdGFydChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJdTMyIGw7CisKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJbCB8PSBPTUFQX1RJTUVSX0NUUkxfU1Q7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfc3RvcChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJdTMyIGw7CisKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJbCAmPSB+MHgxOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKK30KKwordW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwlyZXR1cm4gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRyk7Cit9CisKK3ZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRywgMCk7Cit9CisKK3ZvaWQgb21hcF9kbV90aW1lcl9zZXRfbG9hZChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCBsb2FkKQoreworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0xPQURfUkVHLCBsb2FkKTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9tYXRjaChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCBtYXRjaCkKK3sKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9NQVRDSF9SRUcsIG1hdGNoKTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZV9jb21wYXJlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwl1MzIgbDsKKworCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKKwlsIHw9IE9NQVBfVElNRVJfQ1RSTF9DRTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1fdGltZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcjsKKworCXNwaW5fbG9ja19pbml0KCZkbV90aW1lcl9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZG1fdGltZXJfaW5mby51bnVzZWRfdGltZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmZG1fdGltZXJfaW5mby5yZXNlcnZlZF90aW1lcnMpOworCisJdGltZXIgPSAmZG1fdGltZXJzWzBdOworCXdoaWxlICh0aW1lci0+YmFzZSkgeworCQlsaXN0X2FkZF90YWlsKChzdHJ1Y3QgbGlzdF9oZWFkICopdGltZXIsICZkbV90aW1lcl9pbmZvLnVudXNlZF90aW1lcnMpOworCQlvbWFwX2RtX3RpbWVyX3Jlc2V0KHRpbWVyKTsKKwkJdGltZXIrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZG1fdGltZXJfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJX19kbV90aW1lcl9pbml0KCk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwob21hcF9kbV90aW1lcl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IGFhNDgxZWEuLjU1MDU5YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgT01BUCBHUElPCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICogV3JpdHRlbiBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNyw4ICsxNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KQEAgLTI5LDcgKzMyLDcgQEAKIC8qCiAgKiBPTUFQMTUxMCBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAxNTEwX0dQSU9fQkFTRQkJMHhmZmZjZTAwMAorI2RlZmluZSBPTUFQMTUxMF9HUElPX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmNlMDAwCiAjZGVmaW5lIE9NQVAxNTEwX0dQSU9fREFUQV9JTlBVVAkweDAwCiAjZGVmaW5lIE9NQVAxNTEwX0dQSU9fREFUQV9PVVRQVVQJMHgwNAogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RJUl9DT05UUk9MCTB4MDgKQEAgLTQzLDM0ICs0NiwzNyBAQAogLyoKICAqIE9NQVAxNjEwIHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KLSNkZWZpbmUgT01BUDE2MTBfR1BJTzFfQkFTRQkJMHhmZmZiZTQwMAotI2RlZmluZSBPTUFQMTYxMF9HUElPMl9CQVNFCQkweGZmZmJlYzAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8zX0JBU0UJCTB4ZmZmYmI0MDAKLSNkZWZpbmUgT01BUDE2MTBfR1BJTzRfQkFTRQkJMHhmZmZiYmMwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZTQwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZWMwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiYjQwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiYmMwMAogI2RlZmluZSBPTUFQMTYxMF9HUElPX1JFVklTSU9OCQkweDAwMDAKICNkZWZpbmUgT01BUDE2MTBfR1BJT19TWVNDT05GSUcJCTB4MDAxMAogI2RlZmluZSBPTUFQMTYxMF9HUElPX1NZU1NUQVRVUwkJMHgwMDE0CiAjZGVmaW5lIE9NQVAxNjEwX0dQSU9fSVJRU1RBVFVTMQkweDAwMTgKICNkZWZpbmUgT01BUDE2MTBfR1BJT19JUlFFTkFCTEUxCTB4MDAxYworI2RlZmluZSBPTUFQMTYxMF9HUElPX1dBS0VVUEVOQUJMRQkweDAwMjgKICNkZWZpbmUgT01BUDE2MTBfR1BJT19EQVRBSU4JCTB4MDAyYwogI2RlZmluZSBPTUFQMTYxMF9HUElPX0RBVEFPVVQJCTB4MDAzMAogI2RlZmluZSBPTUFQMTYxMF9HUElPX0RJUkVDVElPTgkJMHgwMDM0CiAjZGVmaW5lIE9NQVAxNjEwX0dQSU9fRURHRV9DVFJMMQkweDAwMzgKICNkZWZpbmUgT01BUDE2MTBfR1BJT19FREdFX0NUUkwyCTB4MDAzYwogI2RlZmluZSBPTUFQMTYxMF9HUElPX0NMRUFSX0lSUUVOQUJMRTEJMHgwMDljCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fQ0xFQVJfV0FLRVVQRU5BCTB4MDBhOAogI2RlZmluZSBPTUFQMTYxMF9HUElPX0NMRUFSX0RBVEFPVVQJMHgwMGIwCiAjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU0VUX0lSUUVOQUJMRTEJMHgwMGRjCisjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQQkweDAwZTgKICNkZWZpbmUgT01BUDE2MTBfR1BJT19TRVRfREFUQU9VVAkweDAwZjAKIAogLyoKICAqIE9NQVA3MzAgc3BlY2lmaWMgR1BJTyByZWdpc3RlcnMKICAqLwotI2RlZmluZSBPTUFQNzMwX0dQSU8xX0JBU0UJCTB4ZmZmYmMwMDAKLSNkZWZpbmUgT01BUDczMF9HUElPMl9CQVNFCQkweGZmZmJjODAwCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzNfQkFTRQkJMHhmZmZiZDAwMAotI2RlZmluZSBPTUFQNzMwX0dQSU80X0JBU0UJCTB4ZmZmYmQ4MDAKLSNkZWZpbmUgT01BUDczMF9HUElPNV9CQVNFCQkweGZmZmJlMDAwCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzZfQkFTRQkJMHhmZmZiZTgwMAorI2RlZmluZSBPTUFQNzMwX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJjMDAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzJfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmM4MDAKKyNkZWZpbmUgT01BUDczMF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZDAwMAorI2RlZmluZSBPTUFQNzMwX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJkODAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzVfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmUwMDAKKyNkZWZpbmUgT01BUDczMF9HUElPNl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZTgwMAogI2RlZmluZSBPTUFQNzMwX0dQSU9fREFUQV9JTlBVVAkJMHgwMAogI2RlZmluZSBPTUFQNzMwX0dQSU9fREFUQV9PVVRQVVQJMHgwNAogI2RlZmluZSBPTUFQNzMwX0dQSU9fRElSX0NPTlRST0wJMHgwOApAQCAtNzgsMTQgKzg0LDQzIEBACiAjZGVmaW5lIE9NQVA3MzBfR1BJT19JTlRfTUFTSwkJMHgxMAogI2RlZmluZSBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUwkJMHgxNAogCisvKgorICogb21hcDI0eHggc3BlY2lmaWMgR1BJTyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBPTUFQMjRYWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODAxODAwMAorI2RlZmluZSBPTUFQMjRYWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODAxYTAwMAorI2RlZmluZSBPTUFQMjRYWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODAxYzAwMAorI2RlZmluZSBPTUFQMjRYWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODAxZTAwMAorI2RlZmluZSBPTUFQMjRYWF9HUElPX1JFVklTSU9OCQkweDAwMDAKKyNkZWZpbmUgT01BUDI0WFhfR1BJT19TWVNDT05GSUcJCTB4MDAxMAorI2RlZmluZSBPTUFQMjRYWF9HUElPX1NZU1NUQVRVUwkJMHgwMDE0CisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMQkweDAwMTgKKyNkZWZpbmUgT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxCTB4MDAxYworI2RlZmluZSBPTUFQMjRYWF9HUElPX0NUUkwJCTB4MDAzMAorI2RlZmluZSBPTUFQMjRYWF9HUElPX09FCQkweDAwMzQKKyNkZWZpbmUgT01BUDI0WFhfR1BJT19EQVRBSU4JCTB4MDAzOAorI2RlZmluZSBPTUFQMjRYWF9HUElPX0RBVEFPVVQJCTB4MDAzYworI2RlZmluZSBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMAkweDAwNDAKKyNkZWZpbmUgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEJMHgwMDQ0CisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUCTB4MDA0OAorI2RlZmluZSBPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QJMHgwMDRjCisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fQ0xFQVJJUlFFTkFCTEUxCTB4MDA2MAorI2RlZmluZSBPTUFQMjRYWF9HUElPX1NFVElSUUVOQUJMRTEJMHgwMDY0CisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkEJMHgwMDgwCisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fU0VUV0tVRU5BCQkweDAwODQKKyNkZWZpbmUgT01BUDI0WFhfR1BJT19DTEVBUkRBVEFPVVQJMHgwMDkwCisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fU0VUREFUQU9VVAkweDAwOTQKKwogI2RlZmluZSBPTUFQX01QVUlPX01BU0sJCSh+T01BUF9NQVhfR1BJT19MSU5FUyAmIDB4ZmYpCiAKIHN0cnVjdCBncGlvX2JhbmsgewotCXUzMiBiYXNlOworCXZvaWQgX19pb21lbSAqYmFzZTsKIAl1MTYgaXJxOwogCXUxNiB2aXJ0dWFsX2lycV9zdGFydDsKLQl1OCBtZXRob2Q7CisJaW50IG1ldGhvZDsKIAl1MzIgcmVzZXJ2ZWRfbWFwOworCXUzMiBzdXNwZW5kX3dha2V1cDsKKwl1MzIgc2F2ZWRfd2FrZXVwOwogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKQEAgLTkzLDggKzEyOCw5IEBACiAjZGVmaW5lIE1FVEhPRF9HUElPXzE1MTAJMQogI2RlZmluZSBNRVRIT0RfR1BJT18xNjEwCTIKICNkZWZpbmUgTUVUSE9EX0dQSU9fNzMwCQkzCisjZGVmaW5lIE1FVEhPRF9HUElPXzI0WFgJNAogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE2MTBbNV0gPSB7CiAJeyBPTUFQX01QVUlPX0JBU0UsICAgICBJTlRfTVBVSU8sCSAgICBJSF9NUFVJT19CQVNFLCAgICAgTUVUSE9EX01QVUlPfSwKIAl7IE9NQVAxNjEwX0dQSU8xX0JBU0UsIElOVF9HUElPX0JBTksxLAkgICAgSUhfR1BJT19CQVNFLCAgICAgIE1FVEhPRF9HUElPXzE2MTAgfSwKQEAgLTEyMyw2ICsxNTksMTUgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCitzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMjR4eFs0XSA9IHsKKwl7IE9NQVAyNFhYX0dQSU8xX0JBU0UsIElOVF8yNFhYX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwJTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgT01BUDI0WFhfR1BJTzJfQkFTRSwgSU5UXzI0WFhfR1BJT19CQU5LMiwgSUhfR1BJT19CQVNFICsgMzIsCU1FVEhPRF9HUElPXzI0WFggfSwKKwl7IE9NQVAyNFhYX0dQSU8zX0JBU0UsIElOVF8yNFhYX0dQSU9fQkFOSzMsIElIX0dQSU9fQkFTRSArIDY0LAlNRVRIT0RfR1BJT18yNFhYIH0sCisJeyBPTUFQMjRYWF9HUElPNF9CQVNFLCBJTlRfMjRYWF9HUElPX0JBTks0LCBJSF9HUElPX0JBU0UgKyA5NiwJTUVUSE9EX0dQSU9fMjRYWCB9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayAqZ3Bpb19iYW5rOwogc3RhdGljIGludCBncGlvX2JhbmtfY291bnQ7CiAKQEAgLTE0OSwxNCArMTk0LDIzIEBACiAJCXJldHVybiAmZ3Bpb19iYW5rWzEgKyAoZ3BpbyA+PiA1KV07CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybiAmZ3Bpb19iYW5rW2dwaW8gPj4gNV07CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2dwaW9faW5kZXgoaW50IGdwaW8pCiB7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAogCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQlyZXR1cm4gZ3BpbyAmIDB4MWY7Ci0JZWxzZQotCQlyZXR1cm4gZ3BpbyAmIDB4MGY7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuIGdwaW8gJiAweDFmOworI2VuZGlmCisJcmV0dXJuIGdwaW8gJiAweDBmOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3ZhbGlkKGludCBncGlvKQpAQCAtMTgwLDYgKzIzNCwxMCBAQAogCWlmIChjcHVfaXNfb21hcDczMCgpICYmIGdwaW8gPCAxOTIpCiAJCXJldHVybiAwOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkgJiYgZ3BpbyA8IDEyOCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE5NSw3ICsyNTMsNyBAQAogCiBzdGF0aWMgdm9pZCBfc2V0X2dwaW9fZGlyZWN0aW9uKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgaXNfaW5wdXQpCiB7Ci0JdTMyIHJlZyA9IGJhbmstPmJhc2U7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlOwogCXUzMiBsOwogCiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKQEAgLTIxMSw2ICsyNjksOSBAQAogCWNhc2UgTUVUSE9EX0dQSU9fNzMwOgogCQlyZWcgKz0gT01BUDczMF9HUElPX0RJUl9DT05UUk9MOwogCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCXJlZyArPSBPTUFQMjRYWF9HUElPX09FOworCQlicmVhazsKIAl9CiAJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CiAJaWYgKGlzX2lucHV0KQpAQCAtMjM0LDcgKzI5NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kYXRhb3V0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgZW5hYmxlKQogewotCXUzMiByZWcgPSBiYW5rLT5iYXNlOworCXZvaWQgX19pb21lbSAqcmVnID0gYmFuay0+YmFzZTsKIAl1MzIgbCA9IDA7CiAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewpAQCAtMjY5LDYgKzMzMCwxMyBAQAogCQllbHNlCiAJCQlsICY9IH4oMSA8PCBncGlvKTsKIAkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQlpZiAoZW5hYmxlKQorCQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fU0VUREFUQU9VVDsKKwkJZWxzZQorCQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fQ0xFQVJEQVRBT1VUOworCQlsID0gMSA8PCBncGlvOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAkJcmV0dXJuOwpAQCAtMjkxLDcgKzM1OSw3IEBACiBpbnQgb21hcF9nZXRfZ3Bpb19kYXRhaW4oaW50IGdwaW8pCiB7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKLQl1MzIgcmVnOworCXZvaWQgX19pb21lbSAqcmVnOwogCiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQogCQlyZXR1cm4gLTE7CkBAIC0zMTAsMTA5ICszNzgsMTMyIEBACiAJY2FzZSBNRVRIT0RfR1BJT183MzA6CiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fREFUQV9JTlBVVDsKIAkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQlyZWcgKz0gT01BUDI0WFhfR1BJT19EQVRBSU47CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCQlyZXR1cm4gLTE7CiAJfQotCXJldHVybiAoX19yYXdfcmVhZGwocmVnKSAmICgxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pKSkgIT0gMDsKKwlyZXR1cm4gKF9fcmF3X3JlYWRsKHJlZykKKwkJCSYgKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpKSAhPSAwOwogfQogCi1zdGF0aWMgdm9pZCBfc2V0X2dwaW9fZWRnZV9jdHJsKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgZWRnZSkKKyNkZWZpbmUgTU9EX1JFR19CSVQocmVnLCBiaXRfbWFzaywgc2V0KQlcCitkbyB7CVwKKwlpbnQgbCA9IF9fcmF3X3JlYWRsKGJhc2UgKyByZWcpOyBcCisJaWYgKHNldCkgbCB8PSBiaXRfbWFzazsgXAorCWVsc2UgbCAmPSB+Yml0X21hc2s7IFwKKwlfX3Jhd193cml0ZWwobCwgYmFzZSArIHJlZyk7IFwKK30gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNldF8yNHh4X2dwaW9fdHJpZ2dlcmluZyh2b2lkIF9faW9tZW0gKmJhc2UsIGludCBncGlvLCBpbnQgdHJpZ2dlcikKIHsKLQl1MzIgcmVnID0gYmFuay0+YmFzZTsKLQl1MzIgbDsKKwl1MzIgZ3Bpb19iaXQgPSAxIDw8IGdwaW87CisKKwlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCwgZ3Bpb19iaXQsCisJCXRyaWdnZXIgJiBJUlFUX0xPVyk7CisJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEsIGdwaW9fYml0LAorCQl0cmlnZ2VyICYgSVJRVF9ISUdIKTsKKwlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX1JJU0lOR0RFVEVDVCwgZ3Bpb19iaXQsCisJCXRyaWdnZXIgJiBJUlFUX1JJU0lORyk7CisJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNULCBncGlvX2JpdCwKKwkJdHJpZ2dlciAmIElSUVRfRkFMTElORyk7CisJLyogRklYTUU6IFBvc3NpYmx5IGRvICdzZXRfaXJxX2hhbmRsZXIoaiwgZG9fbGV2ZWxfSVJRKScgaWYgb25seSBsZXZlbAorCSAqIHRyaWdnZXJpbmcgcmVxdWVzdGVkLiAqLworfQorCitzdGF0aWMgaW50IF9zZXRfZ3Bpb190cmlnZ2VyaW5nKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgdHJpZ2dlcikKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2U7CisJdTMyIGwgPSAwOwogCiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKIAljYXNlIE1FVEhPRF9NUFVJTzoKIAkJcmVnICs9IE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRTsKIAkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JCWlmIChlZGdlID09IE9NQVBfR1BJT19SSVNJTkdfRURHRSkKKwkJaWYgKHRyaWdnZXIgPT0gSVJRVF9SSVNJTkcpCiAJCQlsIHw9IDEgPDwgZ3BpbzsKLQkJZWxzZQorCQllbHNlIGlmICh0cmlnZ2VyID09IElSUVRfRkFMTElORykKIAkJCWwgJj0gfigxIDw8IGdwaW8pOwotCQlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwkJZWxzZQorCQkJZ290byBiYWQ7CiAJCWJyZWFrOwogCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKIAkJcmVnICs9IE9NQVAxNTEwX0dQSU9fSU5UX0NPTlRST0w7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCQlpZiAoZWRnZSA9PSBPTUFQX0dQSU9fUklTSU5HX0VER0UpCisJCWlmICh0cmlnZ2VyID09IElSUVRfUklTSU5HKQogCQkJbCB8PSAxIDw8IGdwaW87Ci0JCWVsc2UKKwkJZWxzZSBpZiAodHJpZ2dlciA9PSBJUlFUX0ZBTExJTkcpCiAJCQlsICY9IH4oMSA8PCBncGlvKTsKLQkJX19yYXdfd3JpdGVsKGwsIHJlZyk7CisJCWVsc2UKKwkJCWdvdG8gYmFkOwogCQlicmVhazsKIAljYXNlIE1FVEhPRF9HUElPXzE2MTA6Ci0JCWVkZ2UgJj0gMHgwMzsKIAkJaWYgKGdwaW8gJiAweDA4KQogCQkJcmVnICs9IE9NQVAxNjEwX0dQSU9fRURHRV9DVFJMMjsKIAkJZWxzZQogCQkJcmVnICs9IE9NQVAxNjEwX0dQSU9fRURHRV9DVFJMMTsKIAkJZ3BpbyAmPSAweDA3OworCQkvKiBXZSBhbGxvdyBvbmx5IGVkZ2UgdHJpZ2dlcmluZywgaS5lLiB0d28gbG93ZXN0IGJpdHMgKi8KKwkJaWYgKHRyaWdnZXIgJiB+SVJRVF9CT1RIRURHRSkKKwkJCUJVRygpOworCQkvKiBOT1RFOiBrbm93cyBfX0lSUVRfe0ZBTCxSSVN9RURHRSBtYXRjaCBPTUFQIGhhcmR3YXJlICovCisJCXRyaWdnZXIgJj0gMHgwMzsKIAkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CiAJCWwgJj0gfigzIDw8IChncGlvIDw8IDEpKTsKLQkJbCB8PSBlZGdlIDw8IChncGlvIDw8IDEpOwotCQlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwkJbCB8PSB0cmlnZ2VyIDw8IChncGlvIDw8IDEpOwogCQlicmVhazsKIAljYXNlIE1FVEhPRF9HUElPXzczMDoKIAkJcmVnICs9IE9NQVA3MzBfR1BJT19JTlRfQ09OVFJPTDsKIAkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JCWlmIChlZGdlID09IE9NQVBfR1BJT19SSVNJTkdfRURHRSkKKwkJaWYgKHRyaWdnZXIgPT0gSVJRVF9SSVNJTkcpCiAJCQlsIHw9IDEgPDwgZ3BpbzsKLQkJZWxzZQorCQllbHNlIGlmICh0cmlnZ2VyID09IElSUVRfRkFMTElORykKIAkJCWwgJj0gfigxIDw8IGdwaW8pOwotCQlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwkJZWxzZQorCQkJZ290byBiYWQ7CisJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJc2V0XzI0eHhfZ3Bpb190cmlnZ2VyaW5nKHJlZywgZ3BpbywgdHJpZ2dlcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQlyZXR1cm47CisJCWdvdG8gYmFkOwogCX0KKwlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwlyZXR1cm4gMDsKK2JhZDoKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAotdm9pZCBvbWFwX3NldF9ncGlvX2VkZ2VfY3RybChpbnQgZ3BpbywgaW50IGVkZ2UpCitzdGF0aWMgaW50IGdwaW9faXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQogewogCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJdW5zaWduZWQgZ3BpbzsKKwlpbnQgcmV0dmFsOworCisJaWYgKGlycSA+IElIX01QVUlPX0JBU0UpCisJCWdwaW8gPSBPTUFQX01QVUlPKGlycSAtIElIX01QVUlPX0JBU0UpOworCWVsc2UKKwkJZ3BpbyA9IGlycSAtIElIX0dQSU9fQkFTRTsKIAogCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlICYgKF9fSVJRVF9MT1dMVkx8X19JUlFUX0hJR0hMVkx8SVJRVF9QUk9CRSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CiAJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKLQlfc2V0X2dwaW9fZWRnZV9jdHJsKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBlZGdlKTsKKwlyZXR2YWwgPSBfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgdHlwZSk7CiAJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOwotfQotCi0KLXN0YXRpYyBpbnQgX2dldF9ncGlvX2VkZ2VfY3RybChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbykKLXsKLQl1MzIgcmVnID0gYmFuay0+YmFzZSwgbDsKLQotCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7Ci0JY2FzZSBNRVRIT0RfTVBVSU86Ci0JCWwgPSBfX3Jhd19yZWFkbChyZWcgKyBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0UpOwotCQlyZXR1cm4gKGwgJiAoMSA8PCBncGlvKSkgPwotCQkJT01BUF9HUElPX1JJU0lOR19FREdFIDogT01BUF9HUElPX0ZBTExJTkdfRURHRTsKLQljYXNlIE1FVEhPRF9HUElPXzE1MTA6Ci0JCWwgPSBfX3Jhd19yZWFkbChyZWcgKyBPTUFQMTUxMF9HUElPX0lOVF9DT05UUk9MKTsKLQkJcmV0dXJuIChsICYgKDEgPDwgZ3BpbykpID8KLQkJCU9NQVBfR1BJT19SSVNJTkdfRURHRSA6IE9NQVBfR1BJT19GQUxMSU5HX0VER0U7Ci0JY2FzZSBNRVRIT0RfR1BJT18xNjEwOgotCQlpZiAoZ3BpbyAmIDB4MDgpCi0JCQlyZWcgKz0gT01BUDE2MTBfR1BJT19FREdFX0NUUkwyOwotCQllbHNlCi0JCQlyZWcgKz0gT01BUDE2MTBfR1BJT19FREdFX0NUUkwxOwotCQlyZXR1cm4gKF9fcmF3X3JlYWRsKHJlZykgPj4gKChncGlvICYgMHgwNykgPDwgMSkpICYgMHgwMzsKLQljYXNlIE1FVEhPRF9HUElPXzczMDoKLQkJbCA9IF9fcmF3X3JlYWRsKHJlZyArIE9NQVA3MzBfR1BJT19JTlRfQ09OVFJPTCk7Ci0JCXJldHVybiAobCAmICgxIDw8IGdwaW8pKSA/Ci0JCQlPTUFQX0dQSU9fUklTSU5HX0VER0UgOiBPTUFQX0dQSU9fRkFMTElOR19FREdFOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gLTE7Ci0JfQorCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIF9jbGVhcl9ncGlvX2lycWJhbmsoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW9fbWFzaykKIHsKLQl1MzIgcmVnID0gYmFuay0+YmFzZTsKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2U7CiAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogCWNhc2UgTUVUSE9EX01QVUlPOgpAQCAtNDI4LDYgKzUxOSw5IEBACiAJY2FzZSBNRVRIT0RfR1BJT183MzA6CiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUzsKIAkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAkJcmV0dXJuOwpAQCAtNDQyLDcgKzUzNiw3IEBACiAKIHN0YXRpYyB2b2lkIF9lbmFibGVfZ3Bpb19pcnFiYW5rKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvX21hc2ssIGludCBlbmFibGUpCiB7Ci0JdTMyIHJlZyA9IGJhbmstPmJhc2U7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlOwogCXUzMiBsOwogCiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKQEAgLTQ3Nyw2ICs1NzEsMTMgQEAKIAkJZWxzZQogCQkJbCB8PSBncGlvX21hc2s7CiAJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJaWYgKGVuYWJsZSkKKwkJCXJlZyArPSBPTUFQMjRYWF9HUElPX1NFVElSUUVOQUJMRTE7CisJCWVsc2UKKwkJCXJlZyArPSBPTUFQMjRYWF9HUElPX0NMRUFSSVJRRU5BQkxFMTsKKwkJbCA9IGdwaW9fbWFzazsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJCXJldHVybjsKQEAgLTQ4OSw2ICs1OTAsNTAgQEAKIAlfZW5hYmxlX2dwaW9faXJxYmFuayhiYW5rLCAxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pLCBlbmFibGUpOwogfQogCisvKgorICogTm90ZSB0aGF0IEVOQVdBS0VVUCBuZWVkcyB0byBiZSBlbmFibGVkIGluIEdQSU9fU1lTQ09ORklHIHJlZ2lzdGVyLgorICogMTUxMCBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgYSB3YWtlLXVwIHJlZ2lzdGVyLiBJZiBKVEFHIGlzIGNvbm5lY3RlZAorICogdG8gdGhlIHRhcmdldCwgc3lzdGVtIHdpbGwgd2FrZSB1cCBhbHdheXMgb24gR1BJTyBldmVudHMuIFdoaWxlCisgKiBzeXN0ZW0gaXMgcnVubmluZyBhbGwgcmVnaXN0ZXJlZCBHUElPIGludGVycnVwdHMgbmVlZCB0byBoYXZlIHdha2UtdXAKKyAqIGVuYWJsZWQuIFdoZW4gc3lzdGVtIGlzIHN1c3BlbmRlZCwgb25seSBzZWxlY3RlZCBHUElPIGludGVycnVwdHMgbmVlZAorICogdG8gaGF2ZSB3YWtlLXVwIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgX3NldF9ncGlvX3dha2V1cChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbywgaW50IGVuYWJsZSkKK3sKKwlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgeworCWNhc2UgTUVUSE9EX0dQSU9fMTYxMDoKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CisJCWlmIChlbmFibGUpCisJCQliYW5rLT5zdXNwZW5kX3dha2V1cCB8PSAoMSA8PCBncGlvKTsKKwkJZWxzZQorCQkJYmFuay0+c3VzcGVuZF93YWtldXAgJj0gfigxIDw8IGdwaW8pOworCQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZW5hYmxlIEdQSU8gd2FrZXVwIGZvciBtZXRob2QgJWlcbiIsCisJCSAgICAgICBiYW5rLT5tZXRob2QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qIFVzZSBkaXNhYmxlX2lycV93YWtlKCkgYW5kIGVuYWJsZV9pcnFfd2FrZSgpIGZ1bmN0aW9ucyBmcm9tIGRyaXZlcnMgKi8KK3N0YXRpYyBpbnQgZ3Bpb193YWtlX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBncGlvID0gaXJxIC0gSUhfR1BJT19CQVNFOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJaW50IHJldHZhbDsKKworCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlyZXR2YWwgPSBfc2V0X2dwaW9fd2FrZXVwKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBlbmFibGUpOworCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKIGludCBvbWFwX3JlcXVlc3RfZ3BpbyhpbnQgZ3BpbykKIHsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwpAQCAtNTA1LDE1ICs2NTAsMzMgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAliYW5rLT5yZXNlcnZlZF9tYXAgfD0gKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpOworCisJLyogU2V0IHRyaWdnZXIgdG8gbm9uZS4gWW91IG5lZWQgdG8gZW5hYmxlIHRoZSB0cmlnZ2VyIGFmdGVyIHJlcXVlc3RfaXJxICovCisJX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIElSUVRfTk9FREdFKTsKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7Ci0JCXUzMiByZWc7CisJCXZvaWQgX19pb21lbSAqcmVnOwogCi0JCS8qIENsYWltIHRoZSBwaW4gZm9yIHRoZSBBUk0gKi8KKwkJLyogQ2xhaW0gdGhlIHBpbiBmb3IgTVBVICovCiAJCXJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMTUxMF9HUElPX1BJTl9DT05UUk9MOwogCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8ICgxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pKSwgcmVnKTsKIAl9CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTYxMCkgeworCQkvKiBFbmFibGUgd2FrZS11cCBkdXJpbmcgaWRsZSBmb3IgZHluYW1pYyB0aWNrICovCisJCXZvaWQgX19pb21lbSAqcmVnID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHJlZyk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpIHsKKwkJLyogRW5hYmxlIHdha2UtdXAgZHVyaW5nIGlkbGUgZm9yIGR5bmFtaWMgdGljayAqLworCQl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1NFVFdLVUVOQTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHJlZyk7CisJfQorI2VuZGlmCiAJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC01MzMsNiArNjk2LDIwIEBACiAJCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKIAkJcmV0dXJuOwogCX0KKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTYxMCkgeworCQkvKiBEaXNhYmxlIHdha2UtdXAgZHVyaW5nIGlkbGUgZm9yIGR5bmFtaWMgdGljayAqLworCQl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0NMRUFSX1dBS0VVUEVOQTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHJlZyk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpIHsKKwkJLyogRGlzYWJsZSB3YWtlLXVwIGR1cmluZyBpZGxlIGZvciBkeW5hbWljIHRpY2sgKi8KKwkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHJlZyk7CisJfQorI2VuZGlmCiAJYmFuay0+cmVzZXJ2ZWRfbWFwICY9IH4oMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSk7CiAJX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgMSk7CiAJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAwKTsKQEAgLTU1Miw3ICs3MjksNyBAQAogc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKIAkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdTMyIGlzcl9yZWcgPSAwOworCXZvaWQgX19pb21lbSAqaXNyX3JlZyA9IE5VTEw7CiAJdTMyIGlzcjsKIAl1bnNpZ25lZCBpbnQgZ3Bpb19pcnE7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKQEAgLTU3NCwyNCArNzUxLDMwIEBACiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT183MzApCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDczMF9HUElPX0lOVF9TVEFUVVM7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkKKwkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzE7CisjZW5kaWYKIAotCWlzciA9IF9fcmF3X3JlYWRsKGlzcl9yZWcpOwotCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzciwgMCk7Ci0JX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3IpOwotCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzciwgMSk7Ci0JZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJd2hpbGUoMSkgeworCQlpc3IgPSBfX3Jhd19yZWFkbChpc3JfcmVnKTsKKwkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyLCAwKTsKKwkJX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3IpOworCQlfZW5hYmxlX2dwaW9faXJxYmFuayhiYW5rLCBpc3IsIDEpOworCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKIAotCWlmICh1bmxpa2VseSghaXNyKSkKLQkJcmV0dXJuOworCQlpZiAoIWlzcikKKwkJCWJyZWFrOwogCi0JZ3Bpb19pcnEgPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydDsKLQlmb3IgKDsgaXNyICE9IDA7IGlzciA+Pj0gMSwgZ3Bpb19pcnErKykgewotCQlzdHJ1Y3QgaXJxZGVzYyAqZDsKLQkJaWYgKCEoaXNyICYgMSkpCi0JCQljb250aW51ZTsKLQkJZCA9IGlycV9kZXNjICsgZ3Bpb19pcnE7Ci0JCWRlc2NfaGFuZGxlX2lycShncGlvX2lycSwgZCwgcmVncyk7Ci0JfQorCQlncGlvX2lycSA9IGJhbmstPnZpcnR1YWxfaXJxX3N0YXJ0OworCQlmb3IgKDsgaXNyICE9IDA7IGlzciA+Pj0gMSwgZ3Bpb19pcnErKykgeworCQkJc3RydWN0IGlycWRlc2MgKmQ7CisJCQlpZiAoIShpc3IgJiAxKSkKKwkJCQljb250aW51ZTsKKwkJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOworCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKKwkJfQorICAgICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNjEzLDE0ICs3OTYsMTAgQEAKIHN0YXRpYyB2b2lkIGdwaW9fdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBncGlvID0gaXJxIC0gSUhfR1BJT19CQVNFOworCXVuc2lnbmVkIGludCBncGlvX2lkeCA9IGdldF9ncGlvX2luZGV4KGdwaW8pOwogCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOwogCi0JaWYgKF9nZXRfZ3Bpb19lZGdlX2N0cmwoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbykpID09IE9NQVBfR1BJT19OT19FREdFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiT01BUCBHUElPICVkOiB0cnlpbmcgdG8gZW5hYmxlIEdQSU8gSVJRIHdoaWxlIG5vIGVkZ2UgaXMgc2V0XG4iLAotCQkgICAgICAgZ3Bpbyk7Ci0JCV9zZXRfZ3Bpb19lZGdlX2N0cmwoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIE9NQVBfR1BJT19SSVNJTkdfRURHRSk7Ci0JfQotCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMSk7CisJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvX2lkeCwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1wdWlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTY0NSw5ICs4MjQsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFjaGlwIGdwaW9faXJxX2NoaXAgPSB7Ci0JLmFjawk9IGdwaW9fYWNrX2lycSwKLQkubWFzawk9IGdwaW9fbWFza19pcnEsCi0JLnVubWFzayA9IGdwaW9fdW5tYXNrX2lycSwKKwkuYWNrCQk9IGdwaW9fYWNrX2lycSwKKwkubWFzawkJPSBncGlvX21hc2tfaXJxLAorCS51bm1hc2sJCT0gZ3Bpb191bm1hc2tfaXJxLAorCS5zZXRfdHlwZQk9IGdwaW9faXJxX3R5cGUsCisJLnNldF93YWtlCT0gZ3Bpb193YWtlX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBtcHVpb19pcnFfY2hpcCA9IHsKQEAgLTY1Nyw2ICs4MzgsNyBAQAogfTsKIAogc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqIGdwaW9fY2sgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9faW5pdCBfb21hcF9ncGlvX2luaXQodm9pZCkKIHsKQEAgLTY2NSw2ICs4NDcsMTQgQEAKIAogCWluaXRpYWxpemVkID0gMTsKIAorCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlncGlvX2NrID0gY2xrX2dldChOVUxMLCAiYXJtX2dwaW9fY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2NrKSkKKwkJCXByaW50aygiQ291bGQgbm90IGdldCBhcm1fZ3Bpb19ja1xuIik7CisJCWVsc2UKKwkJCWNsa191c2UoZ3Bpb19jayk7CisJfQorCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDE1MTAgR1BJTyBoYXJkd2FyZVxuIik7CkBAIC02NzQsNyArODY0LDcgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCWludCByZXY7CisJCXUzMiByZXY7CiAKIAkJZ3Bpb19iYW5rX2NvdW50ID0gNTsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE2MTA7CkBAIC02OTAsNiArODgwLDE3IEBACiAJCWdwaW9fYmFuayA9IGdwaW9fYmFua183MzA7CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaW50IHJldjsKKworCQlncGlvX2JhbmtfY291bnQgPSA0OworCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjR4eDsKKwkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjR4eCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCisJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CisJfQorI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua19jb3VudDsgaSsrKSB7CiAJCWludCBqLCBncGlvX2NvdW50ID0gMTY7CiAKQEAgLTcxMCw2ICs5MTEsNyBAQAogCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE2MTApIHsKIAkJCV9fcmF3X3dyaXRldygweDAwMDAsIGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0lSUUVOQUJMRTEpOwogCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fSVJRU1RBVFVTMSk7CisJCQlfX3Jhd193cml0ZXcoMHgwMDE0LCBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TWVNDT05GSUcpOwogCQl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCkBAIC03MjAsNiArOTIyLDE0IEBACiAJCQlncGlvX2NvdW50ID0gMzI7IC8qIDczMCBoYXMgMzItYml0IEdQSU9zICovCiAJCX0KICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisJCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkgeworCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUUVOQUJMRTEpOworCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzEpOworCisJCQlncGlvX2NvdW50ID0gMzI7CisJCX0KKyNlbmRpZgogCQlmb3IgKGogPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydDsKIAkJICAgICBqIDwgYmFuay0+dmlydHVhbF9pcnFfc3RhcnQgKyBncGlvX2NvdW50OyBqKyspIHsKIAkJCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX01QVUlPKQpAQCAtNzM1LDEyICs5NDUsOTcgQEAKIAogCS8qIEVuYWJsZSBzeXN0ZW0gY2xvY2sgZm9yIEdQSU8gbW9kdWxlLgogCSAqIFRoZSBDQU1fQ0xLX0NUUkwgKmlzKiByZWFsbHkgdGhlIHJpZ2h0IHBsYWNlLiAqLwotCWlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCiAJCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoVUxQRF9DQU1fQ0xLX0NUUkwpIHwgMHgwNCwgVUxQRF9DQU1fQ0xLX0NUUkwpOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZCAoQ09ORklHX0FSQ0hfT01BUDI0WFgpCitzdGF0aWMgaW50IG9tYXBfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCWludCBpOworCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAxNnh4KCkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua19jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSAmZ3Bpb19iYW5rW2ldOworCQl2b2lkIF9faW9tZW0gKndha2Vfc3RhdHVzOworCQl2b2lkIF9faW9tZW0gKndha2VfY2xlYXI7CisJCXZvaWQgX19pb21lbSAqd2FrZV9zZXQ7CisKKwkJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKKwkJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgorCQkJd2FrZV9zdGF0dXMgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19XQUtFVVBFTkFCTEU7CisJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fQ0xFQVJfV0FLRVVQRU5BOworCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TRVRfV0FLRVVQRU5BOworCQkJYnJlYWs7CisJCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJCXdha2Vfc3RhdHVzID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fU0VUV0tVRU5BOworCQkJd2FrZV9jbGVhciA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0NMRUFSV0tVRU5BOworCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19TRVRXS1VFTkE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwkJYmFuay0+c2F2ZWRfd2FrZXVwID0gX19yYXdfcmVhZGwod2FrZV9zdGF0dXMpOworCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgd2FrZV9jbGVhcik7CisJCV9fcmF3X3dyaXRlbChiYW5rLT5zdXNwZW5kX3dha2V1cCwgd2FrZV9zZXQpOworCQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9ncGlvX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWludCBpOworCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAxNnh4KCkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua19jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSAmZ3Bpb19iYW5rW2ldOworCQl2b2lkIF9faW9tZW0gKndha2VfY2xlYXI7CisJCXZvaWQgX19pb21lbSAqd2FrZV9zZXQ7CisKKwkJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKKwkJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgorCQkJd2FrZV9jbGVhciA9IGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0NMRUFSX1dBS0VVUEVOQTsKKwkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQTsKKwkJCWJyZWFrOworCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fQ0xFQVJfV0FLRVVQRU5BOworCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TRVRfV0FLRVVQRU5BOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCB3YWtlX2NsZWFyKTsKKwkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX3dha2V1cCwgd2FrZV9zZXQpOworCQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG9tYXBfZ3Bpb19zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJncGlvIiksCisJLnN1c3BlbmQJPSBvbWFwX2dwaW9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9tYXBfZ3Bpb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugb21hcF9ncGlvX2RldmljZSA9IHsKKwkuaWQJCT0gMCwKKwkuY2xzCQk9ICZvbWFwX2dwaW9fc3lzY2xhc3MsCit9OworI2VuZGlmCisKIC8qCiAgKiBUaGlzIG1heSBnZXQgY2FsbGVkIGVhcmx5IGZyb20gYm9hcmQgc3BlY2lmaWMgaW5pdAogICovCkBAIC03NTIsMTEgKzEwNDcsMzAgQEAKIAkJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZ3Bpb19zeXNpbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWluaXRpYWxpemVkKQorCQlyZXQgPSBfb21hcF9ncGlvX2luaXQoKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChyZXQgPT0gMCkgeworCQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZvbWFwX2dwaW9fc3lzY2xhc3MpOworCQkJaWYgKHJldCA9PSAwKQorCQkJCXJldCA9IHN5c2Rldl9yZWdpc3Rlcigmb21hcF9ncGlvX2RldmljZSk7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKIEVYUE9SVF9TWU1CT0wob21hcF9yZXF1ZXN0X2dwaW8pOwogRVhQT1JUX1NZTUJPTChvbWFwX2ZyZWVfZ3Bpbyk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZ3Bpb19kYXRhb3V0KTsKIEVYUE9SVF9TWU1CT0wob21hcF9nZXRfZ3Bpb19kYXRhaW4pOwotRVhQT1JUX1NZTUJPTChvbWFwX3NldF9ncGlvX2VkZ2VfY3RybCk7CiAKLWFyY2hfaW5pdGNhbGwob21hcF9ncGlvX2luaXQpOworYXJjaF9pbml0Y2FsbChvbWFwX2dwaW9fc3lzaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IDQzNTY3ZDUuLjljOWI3ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CkBAIC0xODcsOSArMTg4LDYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLSNkZWZpbmUgRU5fWE9SUENLCQkxCi0jZGVmaW5lIERTUF9SU1RDVDIgICAgICAgICAgICAgIDB4ZTEwMDgwMTQKLQogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kc3BfcmVxdWVzdCh2b2lkKQogewogCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgewpAQCAtMTk4LDYgKzE5NiwxMSBAQAogCiAJCS8qIGVuYWJsZSAxMk1IeiBjbG9jayB0byBtY2JzcCAxICYgMyAqLwogCQljbGtfdXNlKG1jYnNwX2RzcHhvcl9jayk7CisKKwkJLyoKKwkJICogRFNQIGV4dGVybmFsIHBlcmlwaGVyYWwgcmVzZXQKKwkJICogRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGRzcCBjb2RlCisJCSAqLwogCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRFNQX1JTVENUMikgfCAxIHwgMSA8PCAxLAogCQkJICAgICBEU1BfUlNUQ1QyKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKaW5kZXggZWE3Yjk1NS4uNjQ0ODIwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwpAQCAtNDgsNiArNDgsOSBAQAogCQlwdWxsX29yaWcgPSAwLCBwdWxsID0gMDsKIAl1bnNpZ25lZCBpbnQgbWFzaywgd2FybiA9IDA7CiAKKwlpZiAoY3B1X2lzX29tYXA3eHgoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAocmVnX2NmZyA+IEFSUkFZX1NJWkUocmVnX2NmZ190YWJsZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJNVVg6IHJlZ19jZmcgJWRcbiIsIHJlZ19jZmcpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCmluZGV4IDJlZGUyZWUuLjFmYjE2ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKaW5kZXggZTY1MzZiMS4uZTE1YzZjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKQEAgLTM5LDI0ICszOSwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vYXJjaC9vbWFwMTZ4eC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3RwczY1MDEwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZHNwX2NvbW1vbi5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJzcmFtLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfU0laRV07CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgdWxwZF9zbGVlcF9zYXZlW1VMUERfU0xFRVBfU0FWRV9TSVpFXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkVdOwogc3RhdGljIHVuc2lnbmVkIGludCBtcHVpMTYxMF9zbGVlcF9zYXZlW01QVUkxNjEwX1NMRUVQX1NBVkVfU0laRV07CiAKK3N0YXRpYyB2b2lkICgqb21hcF9zcmFtX2lkbGUpKHZvaWQpID0gTlVMTDsKK3N0YXRpYyB2b2lkICgqb21hcF9zcmFtX3N1c3BlbmQpKHVuc2lnbmVkIGxvbmcgcjAsIHVuc2lnbmVkIGxvbmcgcjEpID0gTlVMTDsKKwogLyoKICAqIExldCdzIHBvd2VyIGRvd24gb24gaWRsZSwgYnV0IG9ubHkgaWYgd2UgYXJlIHJlYWxseQogICogaWRsZSwgYmVjYXVzZSBvbmNlIHdlIHN0YXJ0IGRvd24gdGhlIHBhdGggb2YKQEAgLTY1LDcgKzczLDYgQEAKICAqLwogdm9pZCBvbWFwX3BtX2lkbGUodm9pZCkKIHsKLQlpbnQgKCpmdW5jX3B0cikodm9pZCkgPSAwOwogCXVuc2lnbmVkIGludCBtYXNrMzIgPSAwOwogCiAJLyoKQEAgLTg0LDYgKzkxLDEzIEBACiAJbWFzazMyID0gb21hcF9yZWFkbChBUk1fU1lTU1QpOwogCiAJLyoKKwkgKiBQcmV2ZW50IHRoZSBVTFBEIGZyb20gZW50ZXJpbmcgbG93IHBvd2VyIHN0YXRlIGJ5IHNldHRpbmcKKwkgKiBQT1dFUl9DVFJMX1JFRzo0ID0gMAorCSAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoVUxQRF9QT1dFUl9DVFJMKSAmCisJCSAgICB+VUxQRF9ERUVQX1NMRUVQX1RSQU5TSVRJT05fRU4sIFVMUERfUE9XRVJfQ1RSTCk7CisKKwkvKgogCSAqIFNpbmNlIGFuIGludGVycnVwdCBtYXkgc2V0IHVwIGEgdGltZXIsIHdlIGRvbid0IHdhbnQgdG8KIAkgKiByZXByb2dyYW0gdGhlIGhhcmR3YXJlIHRpbWVyIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgogCSAqIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gaWRsZS4KQEAgLTkyLDE4ICsxMDYsOSBAQAogCiAJaWYgKChtYXNrMzIgJiBEU1BfSURMRSkgPT0gMCkgewogCQlfX2FzbV9fIHZvbGF0aWxlICgibWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNCIpOwotCX0gZWxzZSB7CisJfSBlbHNlCisJCW9tYXBfc3JhbV9pZGxlKCk7CiAKLQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQlmdW5jX3B0ciA9ICh2b2lkICopKE9NQVAxNTEwX1NSQU1fSURMRV9TVVNQRU5EKTsKLQkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkgewotCQkJZnVuY19wdHIgPSAodm9pZCAqKShPTUFQMTYxMF9TUkFNX0lETEVfU1VTUEVORCk7Ci0JCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA1OTEyKCkpIHsKLQkJCWZ1bmNfcHRyID0gKHZvaWQgKikoT01BUDU5MTJfU1JBTV9JRExFX1NVU1BFTkQpOwotCQl9Ci0KLQkJZnVuY19wdHIoKTsKLQl9CiAJbG9jYWxfZmlxX2VuYWJsZSgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KQEAgLTExNSw1OCArMTIwLDU1IEBACiAgKi8KIHN0YXRpYyB2b2lkIG9tYXBfcG1fd2FrZXVwX3NldHVwKHZvaWQpCiB7Ci0JLyoKLQkgKiBFbmFibGUgQVJNIFhPUiBjbG9jayBhbmQgcmVsZWFzZSBwZXJpcGhlcmFsIGZyb20gcmVzZXQgYnkKLQkgKiB3cml0aW5nIDEgdG8gUEVSX0VOIGJpdCBpbiBBUk1fUlNUQ1QyLCB0aGlzIGlzIHJlcXVpcmVkCi0JICogZm9yIFVBUlQgY29uZmlndXJhdGlvbiB0byB1c2UgVUFSVDIgdG8gd2FrZSB1cC4KLQkgKi8KLQotCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpIHwgRU5BQkxFX1hPUkNMSywgQVJNX0lETEVDVDIpOwotCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX1JTVENUMikgfCBQRVJfRU4sIEFSTV9SU1RDVDIpOwotCW9tYXBfd3JpdGV3KE1PREVNXzMyS19FTiwgVUxQRF9DTE9DS19DVFJMKTsKKwl1MzIgbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0lIMl9JUlEpOworCXUzMiBsZXZlbDJfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfVUFSVDIpIHwgT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CiAKIAkvKgotCSAqIFR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzIGV4Y2VwdCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKLQkgKiBhbmQgdGhlIEwyIHdha2V1cCBpbnRlcnJ1cHRzOiBrZXlwYWQgYW5kIFVBUlQyLgorCSAqIFR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzIGV4Y2VwdCBHUElPIGJhbmsgMSwgTDEtMm5kIGxldmVsIGNhc2NhZGUsCisJICogYW5kIHRoZSBMMiB3YWtldXAgaW50ZXJydXB0czoga2V5cGFkIGFuZCBVQVJUMi4gTm90ZSB0aGF0IHRoZQorCSAqIGRyaXZlcnMgbXVzdCBzdGlsbCBzZXBhcmF0ZWx5IGNhbGwgb21hcF9zZXRfZ3Bpb193YWtldXAoKSB0bworCSAqIHdha2UgdXAgdG8gYSBHUElPIGludGVycnVwdC4KIAkgKi8KKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpCisJCWxldmVsMV93YWtlIHw9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJbGV2ZWwxX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF83MzBfR1BJT19CQU5LMSk7CiAKLQlvbWFwX3dyaXRlbCh+SVJRX0xFVkVMMiwgT01BUF9JSDFfTUlSKTsKKwlvbWFwX3dyaXRlbCh+bGV2ZWwxX3dha2UsIE9NQVBfSUgxX01JUik7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJb21hcF93cml0ZWwofihJUlFfVUFSVDIgfCBJUlFfS0VZQk9BUkQpLCAgT01BUF9JSDJfTUlSKTsKLQl9CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsICBPTUFQX0lIMl9NSVIpOwogCisJLyogSU5UXzE2MTBfV0FLRV9VUF9SRVEgaXMgbmVlZGVkIGZvciBHUElPIHdha2V1cC4uLiAqLwogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQlvbWFwX3dyaXRlbCh+KElSUV9VQVJUMiB8IElSUV9LRVlCT0FSRCksIE9NQVBfSUgyXzBfTUlSKTsKLQotCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8xX01JUik7CisJCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgT01BUF9JSDJfMF9NSVIpOworCQlvbWFwX3dyaXRlbCh+T01BUF9JUlFfQklUKElOVF8xNjEwX1dBS0VfVVBfUkVRKSwgT01BUF9JSDJfMV9NSVIpOwogCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8yX01JUik7CiAJCW9tYXBfd3JpdGVsKH4weDAsIE9NQVBfSUgyXzNfTUlSKTsKIAl9CiAKLQkvKiAgTmV3IElSUSBhZ3JlZW1lbnQgKi8KKwkvKiAgTmV3IElSUSBhZ3JlZW1lbnQsIHJlY2FsY3VsYXRlIGluIGNhc2NhZGUgb3JkZXIgKi8KKwlvbWFwX3dyaXRlbCgxLCBPTUFQX0lIMl9DT05UUk9MKTsKICAJb21hcF93cml0ZWwoMSwgT01BUF9JSDFfQ09OVFJPTCk7Ci0KLQkvKiBleHRlcm5hbCBQVUxMIHRvIGRvd24sIGJpdCAyMiA9IDAgKi8KLQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKFBVTExfRFdOX0NUUkxfMikgJiB+KDE8PDIyKSwgUFVMTF9EV05fQ1RSTF8yKTsKIH0KIAogdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgbWFzazMyID0gMDsKIAl1bnNpZ25lZCBsb25nIGFyZzAgPSAwLCBhcmcxID0gMDsKLQlpbnQgKCpmdW5jX3B0cikodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KSA9IDA7Ci0JdW5zaWduZWQgc2hvcnQgc2F2ZV9kc3BfaWRsZWN0MjsKIAotCXByaW50aygiUE06IE9NQVAleCBpcyBlbnRlcmluZyBkZWVwIHNsZWVwIG5vdyAuLi5cbiIsIHN5c3RlbV9yZXYpOworCXByaW50aygiUE06IE9NQVAleCBpcyB0cnlpbmcgdG8gZW50ZXIgZGVlcCBzbGVlcC4uLlxuIiwgc3lzdGVtX3Jldik7CisKKwlvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoMSk7CiAKIAlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKSB7CiAJCS8qIFN0b3AgTEVEMSAoRDkpIGJsaW5rICovCiAJCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgT0ZGKTsKIAl9CiAKKwlvbWFwX3dyaXRldygweGZmZmYsIFVMUERfU09GVF9ESVNBQkxFX1JFUV9SRUcpOworCiAJLyoKLQkgKiBTdGVwIDE6IHR1cm4gb2ZmIGludGVycnVwdHMKKwkgKiBTdGVwIDE6IHR1cm4gb2ZmIGludGVycnVwdHMgKEZJWE1FOiBOT1RFOiBhbHJlYWR5IGRpc2FibGVkKQogCSAqLwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTIwNyw2ICsyMDksOCBAQAogCUFSTV9TQVZFKEFSTV9DS0NUTCk7CiAJQVJNX1NBVkUoQVJNX0lETEVDVDEpOwogCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKKwlpZiAoIShjcHVfaXNfb21hcDE1MTAoKSkpCisJCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKIAlBUk1fU0FWRShBUk1fRVdVUENUKTsKIAlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKIAlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKQEAgLTIxNCw0MiArMjE4LDEyIEBACiAJVUxQRF9TQVZFKFVMUERfQ0xPQ0tfQ1RSTCk7CiAJVUxQRF9TQVZFKFVMUERfU1RBVFVTX1JFUSk7CiAKLQkvKgotCSAqIFN0ZXAgMzogTE9XX1BXUiBzaWduYWwgZW5hYmxpbmcKLQkgKgotCSAqIEFsbG93IHRoZSBMT1dfUFdSIHNpZ25hbCB0byBiZSB2aXNpYmxlIG9uIE1QVUlPNSBiYWxsLgotCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewotCQkvKiBQT1dFUl9DVFJMX1JFRyA9IDB4MSAoTE9XX1BPV0VSIGlzIGF2YWlsYWJsZSkgKi8KLQkJb21hcF93cml0ZXcob21hcF9yZWFkdyhVTFBEX1BPV0VSX0NUUkwpIHwKLQkJCSAgICBPTUFQMTUxMF9VTFBEX0xPV19QT1dFUl9SRVEsIFVMUERfUE9XRVJfQ1RSTCk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQkvKiBQT1dFUl9DVFJMX1JFRyA9IDB4MSAoTE9XX1BPV0VSIGlzIGF2YWlsYWJsZSkgKi8KLQkJb21hcF93cml0ZXcob21hcF9yZWFkdyhVTFBEX1BPV0VSX0NUUkwpIHwKLQkJCSAgICBPTUFQMTYxMF9VTFBEX0xPV19QT1dFUl9SRVEsIFVMUERfUE9XRVJfQ1RSTCk7Ci0JfQotCi0JLyogY29uZmlndXJlIExPV19QV1IgcGluICovCi0Jb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCS8qIChTdGVwIDMgcmVtb3ZlZCAtIHdlIG5vdyBhbGxvdyBkZWVwIHNsZWVwIGJ5IGRlZmF1bHQpICovCiAKIAkvKgogCSAqIFN0ZXAgNDogT01BUCBEU1AgU2h1dGRvd24KIAkgKi8KIAotCS8qIFNldCBEU1BfUlNUID0gMSBhbmQgRFNQX0VOID0gMCwgcHV0IERTUCBibG9jayBpbnRvIHJlc2V0ICovCi0Jb21hcF93cml0ZWwoKG9tYXBfcmVhZGwoQVJNX1JTVENUMSkgfCBEU1BfUlNUKSAmIH5EU1BfRU5BQkxFLAotCQkgICAgQVJNX1JTVENUMSk7Ci0KLQkvKiBTZXQgRFNQIGJvb3QgbW9kZSB0byBEU1AtSURMRSwgRFNQX0JPT1RfTU9ERSA9IDB4MiAqLwotICAgICAgICBvbWFwX3dyaXRlbChEU1BfSURMRV9NT0RFLCBNUFVJX0RTUF9CT09UX0NPTkZJRyk7Ci0KLQkvKiBTZXQgRU5fRFNQQ0sgPSAwLCBzdG9wIERTUCBibG9jayBjbG9jayAqLwotCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX0NLQ1RMKSAmIH5EU1BfQ0xPQ0tfRU5BQkxFLCBBUk1fQ0tDVEwpOwotCi0JLyogU3RvcCBhbnkgRFNQIGRvbWFpbiBjbG9ja3MgKi8KLQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKEFSTV9JRExFQ1QyKSB8ICgxPDxFTl9BUElDSyksIEFSTV9JRExFQ1QyKTsKLQlzYXZlX2RzcF9pZGxlY3QyID0gX19yYXdfcmVhZHcoRFNQX0lETEVDVDIpOwotCV9fcmF3X3dyaXRldygwLCBEU1BfSURMRUNUMik7CiAKIAkvKgogCSAqIFN0ZXAgNTogV2FrZXVwIEV2ZW50IFNldHVwCkBAIC0yNTgsMjQgKzIzMiw5IEBACiAJb21hcF9wbV93YWtldXBfc2V0dXAoKTsKIAogCS8qCi0JICogU3RlcCA2YTogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KLQkgKgotCSAqIFN0ZXAgNiBzdGFydHMgaGVyZSB3aXRoIGNsb2NrIGFuZCB3YXRjaGRvZyBkaXNhYmxlCisJICogU3RlcCA2OiBBUk0gYW5kIFRyYWZmaWMgY29udHJvbGxlciBzaHV0ZG93bgogCSAqLwogCi0JLyogc3RvcCBjbG9ja3MgKi8KLQltYXNrMzIgPSBvbWFwX3JlYWRsKEFSTV9JRExFQ1QyKTsKLQltYXNrMzIgJj0gfigxPDxFTl9XRFRDSyk7ICAvKiBiaXQgMCAtPiAwIChXRFQgY2xvY2spICovCi0JbWFzazMyIHw9ICAoMTw8RU5fWE9SUENLKTsgLyogYml0IDEgLT4gMSAoWE9SUENLIGNsb2NrKSAqLwotCW1hc2szMiAmPSB+KDE8PEVOX1BFUkNLKTsgIC8qIGJpdCAyIC0+IDAgKE1QVVBFUl9DSyBjbG9jaykgKi8KLQltYXNrMzIgJj0gfigxPDxFTl9MQ0RDSyk7ICAvKiBiaXQgMyAtPiAwIChMQ0RDIGNsb2NrKSAqLwotCW1hc2szMiAmPSB+KDE8PEVOX0xCQ0spOyAgIC8qIGJpdCA0IC0+IDAgKGxvY2FsIGJ1cyBjbG9jaykgKi8KLQltYXNrMzIgfD0gICgxPDxFTl9BUElDSyk7ICAvKiBiaXQgNiAtPiAxIChNUFVJIGNsb2NrKSAqLwotCW1hc2szMiAmPSB+KDE8PEVOX1RJTUNLKTsgIC8qIGJpdCA3IC0+IDAgKE1QVSB0aW1lciBjbG9jaykgKi8KLQltYXNrMzIgJj0gfigxPDxETUFDS19SRVEpOyAvKiBiaXQgOCAtPiAwIChETUFDIGNsb2NrKSAqLwotCW1hc2szMiAmPSB+KDE8PEVOX0dQSU9DSyk7IC8qIGJpdCA5IC0+IDAgKEdQSU8gY2xvY2spICovCi0Jb21hcF93cml0ZWwobWFzazMyLCBBUk1fSURMRUNUMik7Ci0KIAkvKiBkaXNhYmxlIEFSTSB3YXRjaGRvZyAqLwogCW9tYXBfd3JpdGVsKDB4MDBGNSwgT01BUF9XRFRfVElNRVJfTU9ERSk7CiAJb21hcF93cml0ZWwoMHgwMEEwLCBPTUFQX1dEVF9USU1FUl9NT0RFKTsKQEAgLTI5NSw0NyArMjU0LDI0IEBACiAJYXJnMCA9IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX0FSTV9JRExFQ1QxXTsKIAlhcmcxID0gYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfQVJNX0lETEVDVDJdOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCWZ1bmNfcHRyID0gKHZvaWQgKikoT01BUDE1MTBfU1JBTV9BUElfU1VTUEVORCk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkgewotCQlmdW5jX3B0ciA9ICh2b2lkICopKE9NQVAxNjEwX1NSQU1fQVBJX1NVU1BFTkQpOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA1OTEyKCkpIHsKLQkJZnVuY19wdHIgPSAodm9pZCAqKShPTUFQNTkxMl9TUkFNX0FQSV9TVVNQRU5EKTsKLQl9Ci0KIAkvKgogCSAqIFN0ZXAgNmM6IEFSTSBhbmQgVHJhZmZpYyBjb250cm9sbGVyIHNodXRkb3duCiAJICoKIAkgKiBKdW1wIHRvIGFzc2VtYmx5IGNvZGUuIFRoZSBwcm9jZXNzb3Igd2lsbCBzdGF5IHRoZXJlCiAgCSAqIHVudGlsIHdha2UgdXAuCiAJICovCi0KLSAgICAgICAgZnVuY19wdHIoYXJnMCwgYXJnMSk7CisgICAgICAgIG9tYXBfc3JhbV9zdXNwZW5kKGFyZzAsIGFyZzEpOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgaGVyZSwgcHJvY2Vzc29yIGlzIHdva2VuIHVwIQogCSAqLwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCS8qIFBPV0VSX0NUUkxfUkVHID0gMHgwIChMT1dfUE9XRVIgaXMgZGlzYWJsZWQpICovCi0JCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoVUxQRF9QT1dFUl9DVFJMKSAmCi0JCQkgICAgfk9NQVAxNTEwX1VMUERfTE9XX1BPV0VSX1JFUSwgVUxQRF9QT1dFUl9DVFJMKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCS8qIFBPV0VSX0NUUkxfUkVHID0gMHgwIChMT1dfUE9XRVIgaXMgZGlzYWJsZWQpICovCi0JCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoVUxQRF9QT1dFUl9DVFJMKSAmCi0JCQkgICAgfk9NQVAxNjEwX1VMUERfTE9XX1BPV0VSX1JFUSwgVUxQRF9QT1dFUl9DVFJMKTsKLQl9Ci0KLQotCS8qIFJlc3RvcmUgRFNQIGNsb2NrcyAqLwotCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpIHwgKDE8PEVOX0FQSUNLKSwgQVJNX0lETEVDVDIpOwotCV9fcmF3X3dyaXRldyhzYXZlX2RzcF9pZGxlY3QyLCBEU1BfSURMRUNUMik7Ci0JQVJNX1JFU1RPUkUoQVJNX0lETEVDVDIpOwotCiAJLyoKIAkgKiBSZXN0b3JlIEFSTSBzdGF0ZSwgZXhjZXB0IEFSTV9JRExFQ1QxLzIgd2hpY2ggb21hcF9jcHVfc3VzcGVuZCBkaWQKIAkgKi8KIAorCWlmICghKGNwdV9pc19vbWFwMTUxMCgpKSkKKwkJQVJNX1JFU1RPUkUoQVJNX0lETEVDVDMpOwogCUFSTV9SRVNUT1JFKEFSTV9DS0NUTCk7CiAJQVJNX1JFU1RPUkUoQVJNX0VXVVBDVCk7CiAJQVJNX1JFU1RPUkUoQVJNX1JTVENUMSk7CkBAIC0zNjYsNiArMzAyLDggQEAKIAkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8zX01JUik7CiAJfQogCisJb21hcF93cml0ZXcoMCwgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRyk7CisKIAkvKgogCSAqIFJlZW5hYmxlIGludGVycnVwdHMKIAkgKi8KQEAgLTM3Myw2ICszMTEsOCBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlsb2NhbF9maXFfZW5hYmxlKCk7CiAKKwlvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoMCk7CisKIAlwcmludGsoIlBNOiBPTUFQJXggaXMgcmUtc3RhcnRpbmcgZnJvbSBkZWVwIHNsZWVwLi4uXG4iLCBzeXN0ZW1fcmV2KTsKIAogCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKQEAgLTQwMSw2ICszNDEsOCBAQAogCUFSTV9TQVZFKEFSTV9DS0NUTCk7CiAJQVJNX1NBVkUoQVJNX0lETEVDVDEpOwogCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKKwlpZiAoIShjcHVfaXNfb21hcDE1MTAoKSkpCisJCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKIAlBUk1fU0FWRShBUk1fRVdVUENUKTsKIAlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKIAlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKQEAgLTQzNiw2ICszNzgsNyBAQAogCQkgICAiQVJNX0NLQ1RMX1JFRzogICAgICAgICAgICAweCUtOHggICAgIFxuIgogCQkgICAiQVJNX0lETEVDVDFfUkVHOiAgICAgICAgICAweCUtOHggICAgIFxuIgogCQkgICAiQVJNX0lETEVDVDJfUkVHOiAgICAgICAgICAweCUtOHggICAgIFxuIgorCQkgICAiQVJNX0lETEVDVDNfUkVHOgkgICAgICAweCUtOHggICAgIFxuIgogCQkgICAiQVJNX0VXVVBDVF9SRUc6ICAgICAgICAgICAweCUtOHggICAgIFxuIgogCQkgICAiQVJNX1JTVENUMV9SRUc6ICAgICAgICAgICAweCUtOHggICAgIFxuIgogCQkgICAiQVJNX1JTVENUMl9SRUc6ICAgICAgICAgICAweCUtOHggICAgIFxuIgpAQCAtNDQ5LDYgKzM5Miw3IEBACiAJCSAgIEFSTV9TSE9XKEFSTV9DS0NUTCksCiAJCSAgIEFSTV9TSE9XKEFSTV9JRExFQ1QxKSwKIAkJICAgQVJNX1NIT1coQVJNX0lETEVDVDIpLAorCQkgICBBUk1fU0hPVyhBUk1fSURMRUNUMyksCiAJCSAgIEFSTV9TSE9XKEFSTV9FV1VQQ1QpLAogCQkgICBBUk1fU0hPVyhBUk1fUlNUQ1QxKSwKIAkJICAgQVJNX1NIT1coQVJNX1JTVENUMiksCkBAIC01MDcsNyArNDUxLDcgQEAKIAogCWVudHJ5ID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZHJpdmVyL29tYXBfcG0iLAogCQkJCSAgICAgICBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKLQkJCQkgICAgICAgb21hcF9wbV9yZWFkX3Byb2MsIDApOworCSAgIG9tYXBfcG1fcmVhZF9wcm9jLCBOVUxMKTsKIH0KIAogI2VuZGlmIC8qIERFQlVHICYmIENPTkZJR19QUk9DX0ZTICovCkBAIC01ODAsNyArNTI0LDIxIEBACiB9CiAKIAotc3RydWN0IHBtX29wcyBvbWFwX3BtX29wcyA9eworc3RhdGljIGlycXJldHVybl90ICBvbWFwX3dha2V1cF9pbnRlcnJ1cHQoaW50ICBpcnEsIHZvaWQgKiAgZGV2LAorCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKiAgcmVncykKK3sKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfd2FrZXVwX2lycSA9IHsKKwkubmFtZQkJPSAicGVyaXBoZXJhbCB3YWtldXAiLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBvbWFwX3dha2V1cF9pbnRlcnJ1cHQKK307CisKKworCitzdGF0aWMgc3RydWN0IHBtX29wcyBvbWFwX3BtX29wcyA9ewogCS5wbV9kaXNrX21vZGUgPSAwLAogICAgICAgICAucHJlcGFyZSAgICAgICAgPSBvbWFwX3BtX3ByZXBhcmUsCiAgICAgICAgIC5lbnRlciAgICAgICAgICA9IG9tYXBfcG1fZW50ZXIsCkBAIC01OTAsNDIgKzU0OCw2MSBAQAogc3RhdGljIGludCBfX2luaXQgb21hcF9wbV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQLlxuIik7Ci0JcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKIAkvKgogCSAqIFdlIGNvcHkgdGhlIGFzc2VtYmxlciBzbGVlcC93YWtldXAgcm91dGluZXMgdG8gU1JBTS4KIAkgKiBUaGVzZSByb3V0aW5lcyBuZWVkIHRvIGJlIGluIFNSQU0gYXMgdGhhdCdzIHRoZSBvbmx5CiAJICogbWVtb3J5IHRoZSBNUFUgY2FuIHNlZSB3aGVuIGl0IHdha2VzIHVwLgogCSAqLwotCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE1MTAKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJbWVtY3B5KCh2b2lkICopT01BUDE1MTBfU1JBTV9JRExFX1NVU1BFTkQsCi0JCSAgICAgICBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCwKLQkJICAgICAgIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKLQkJbWVtY3B5KCh2b2lkICopT01BUDE1MTBfU1JBTV9BUElfU1VTUEVORCwgb21hcDE1MTBfY3B1X3N1c3BlbmQsCi0JCSAgICAgICBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeik7Ci0JfSBlbHNlCi0jZW5kaWYKLQlpZiAoY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpIHsKLQkJbWVtY3B5KCh2b2lkICopT01BUDE2MTBfU1JBTV9JRExFX1NVU1BFTkQsCi0JCSAgICAgICBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCwKLQkJICAgICAgIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKLQkJbWVtY3B5KCh2b2lkICopT01BUDE2MTBfU1JBTV9BUElfU1VTUEVORCwgb21hcDE2MTBfY3B1X3N1c3BlbmQsCi0JCSAgICAgICBvbWFwMTYxMF9jcHVfc3VzcGVuZF9zeik7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDU5MTIoKSkgewotCQltZW1jcHkoKHZvaWQgKilPTUFQNTkxMl9TUkFNX0lETEVfU1VTUEVORCwKLQkJICAgICAgIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kLAotCQkgICAgICAgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOwotCQltZW1jcHkoKHZvaWQgKilPTUFQNTkxMl9TUkFNX0FQSV9TVVNQRU5ELCBvbWFwMTYxMF9jcHVfc3VzcGVuZCwKLQkJICAgICAgIG9tYXAxNjEwX2NwdV9zdXNwZW5kX3N6KTsKKwkJb21hcF9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCwKKwkJCQkJCW9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKKwkJb21hcF9zcmFtX3N1c3BlbmQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMTUxMF9jcHVfc3VzcGVuZCwKKwkJCQkJCSAgIG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQsCisJCQkJCQlvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDE2MTBfY3B1X3N1c3BlbmQsCisJCQkJCQkgICBvbWFwMTYxMF9jcHVfc3VzcGVuZF9zeik7CiAJfQogCisJaWYgKG9tYXBfc3JhbV9pZGxlID09IE5VTEwgfHwgb21hcF9zcmFtX3N1c3BlbmQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlBNIG5vdCBpbml0aWFsaXplZDogTWlzc2luZyBTUkFNIHN1cHBvcnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwbV9pZGxlID0gb21hcF9wbV9pZGxlOworCisJc2V0dXBfaXJxKElOVF8xNjEwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKyNpZiAwCisJLyogLS0tIEJFR0lOIEJPQVJELURFUEVOREVOVCBDT0RFIC0tLSAqLworCS8qIFNsZWVweCBtYXNrIGRpcmVjdGlvbiAqLworCW9tYXBfd3JpdGV3KChvbWFwX3JlYWR3KDB4ZmZmYjUwMDgpICYgfjIpLCAweGZmZmI1MDA4KTsKKwkvKiBVbm1hc2sgc2xlZXB4IHNpZ25hbCAqLworCW9tYXBfd3JpdGV3KChvbWFwX3JlYWR3KDB4ZmZmYjUwMDQpICYgfjIpLCAweGZmZmI1MDA0KTsKKwkvKiAtLS0gRU5EIEJPQVJELURFUEVOREVOVCBDT0RFIC0tLSAqLworI2VuZGlmCisKKwkvKiBQcm9ncmFtIG5ldyBwb3dlciByYW1wLXVwIHRpbWUKKwkgKiAoMCBmb3IgbW9zdCBib2FyZHMgc2luY2Ugd2UgZG9uJ3QgbG93ZXIgdm9sdGFnZSB3aGVuIGluIGRlZXAgc2xlZXApCisJICovCisJb21hcF93cml0ZXcoVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zX1ZBTCwgVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zKTsKKworCS8qIFNldHVwIFVMUEQgUE9XRVJfQ1RSTF9SRUcgLSBlbnRlciBkZWVwIHNsZWVwIHdoZW5ldmVyIHBvc3NpYmxlICovCisJb21hcF93cml0ZXcoVUxQRF9QT1dFUl9DVFJMX1JFR19WQUwsIFVMUERfUE9XRVJfQ1RSTCk7CisKKwkvKiBDb25maWd1cmUgSURMRUNUMyAqLworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJb21hcF93cml0ZWwoT01BUDE2MTBfSURMRUNUM19WQUwsIE9NQVAxNjEwX0lETEVDVDMpOworCiAJcG1fc2V0X29wcygmb21hcF9wbV9vcHMpOwogCiAjaWYgZGVmaW5lZChERUJVRykgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKIAlvbWFwX3BtX2luaXRfcHJvYygpOwogI2VuZGlmCiAKKwkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KKwlvbWFwX2NmZ19yZWcoVDIwXzE2MTBfTE9XX1BXUik7CisKIAlyZXR1cm4gMDsKIH0KIF9faW5pdGNhbGwob21hcF9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKaW5kZXggMjc5NDkwYy4uOWY3NDU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKQEAgLTY2LDcgKzY2LDcgQEAKIAlAIGdldCBBUk1fSURMRUNUMiBpbnRvIHIyCiAJbGRyaAlyMiwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCiAJbW92CXI1LCAjT01BUDE1MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZgotIAlvcnIJcjUscjUsICNPTUFQMTUxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmMDAKKwlvcnIJcjUsIHI1LCAjT01BUDE1MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZjAwCiAJc3RyaAlyNSwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCiAKIAlAIHJlcXVlc3QgQVJNIGlkbGUKQEAgLTc2LDcgKzc2LDcgQEAKIAlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KIAogCW1vdglyNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmCi0Jb3JyICAgICByNSwgcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZjAwCisJb3JyCXI1LCByNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmMDAKIGxfMTUxMDoJc3VicwlyNSwgcjUsICMxCiAJYm5lCWxfMTUxMAogLyoKQEAgLTk2LDcgKzk2LDcgQEAKIAlzdHJoCXIyLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAlzdHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KIAotCWxkbWZkICAgc3AhLCB7cjAgLSByMTIsIHBjfSAgICAgQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KIAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opCiAJLndvcmQJLiAtIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kCkBAIC0xMTUsOCArMTE1LDggQEAKIAlAIHR1cm4gb2ZmIGNsb2NrIGRvbWFpbnMKIAlAIGdldCBBUk1fSURMRUNUMiBpbnRvIHIyCiAJbGRyaAlyMiwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCi0JbW92CXI1LCAjT01BUDE2MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZgotIAlvcnIJcjUscjUsICNPTUFQMTYxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmMDAKKwltb3YJcjUsICNPTUFQMTYxMF9JRExFQ1QyX1NMRUVQX1ZBTCAmIDB4ZmYKKwlvcnIJcjUsIHI1LCAjT01BUDE2MTBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKIAlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAogCUAgcmVxdWVzdCBBUk0gaWRsZQpAQCAtMTI2LDcgKzEyNiw3IEBACiAJc3RyaAlyMywgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCiAKIAltb3YJcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZgotCW9yciAgICAgcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAorCW9ycglyNSwgcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZjAwCiBsXzE2MTA6CXN1YnMJcjUsIHI1LCAjMQogCWJuZQlsXzE2MTAKIC8qCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlzdHJoCXIyLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAlzdHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KIAotCWxkbWZkICAgc3AhLCB7cjAgLSByMTIsIHBjfSAgICAgQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KIAogRU5UUlkob21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opCiAJLndvcmQJLiAtIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogCUAgdHVybiBvZmYgY2xvY2sgZG9tYWlucwogCW1vdglyNSwgI09NQVAxNTEwX0lETEVfQ0xPQ0tfRE9NQUlOUyAmIDB4ZmYKLSAJb3JyCXI1LHI1LCAjT01BUDE1MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZjAwCisJb3JyCXI1LCByNSwgI09NQVAxNTEwX0lETEVfQ0xPQ0tfRE9NQUlOUyAmIDB4ZmYwMAogCXN0cmgJcjUsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQogCiAJQCByZXF1ZXN0IEFSTSBpZGxlCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KIAogCW1vdglyNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmCi0Jb3JyICAgICByNSwgcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZjAwCisJb3JyCXI1LCByNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmMDAKIGxfMTUxMF8yOgogCXN1YnMJcjUsIHI1LCAjMQogCWJuZQlsXzE1MTBfMgpAQCAtMjM3LDcgKzIzNyw3IEBACiAJc3RyaAlyMCwgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCiAKIAlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0JbGRtZmQgICBzcCEsIHtyMCAtIHIxMiwgcGN9CisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQogCiBFTlRSWShvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeikKIAkud29yZAkuIC0gb21hcDE1MTBfY3B1X3N1c3BlbmQKQEAgLTI0OSwyMSArMjQ5LDI2IEBACiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0KIAorCUAgRHJhaW4gd3JpdGUgY2FjaGUKKwltb3YJcjQsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQKKwlub3AKKwogCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgVHJhZmZpYyBDb250cm9sbGVyCi0JbW92CXI0LCAjVENNSUZfQVNNX0JBU0UgJiAweGZmMDAwMDAwCi0Jb3JyCXI0LCByNCwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMGZmMDAwMAotCW9ycglyNCwgcjQsICNUQ01JRl9BU01fQkFTRSAmIDB4MDAwMGZmMDAKKwltb3YJcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4ZmYwMDAwMDAKKwlvcnIJcjYsIHI2LCAjVENNSUZfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI2LCByNiwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMDAwZmYwMAogCiAJQCBwcmVwYXJlIHRvIHB1dCBTRFJBTSBpbnRvIHNlbGYtcmVmcmVzaCBtYW51YWxseQotCWxkcglyNSwgW3I0LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQotCW9ycglyNSwgcjUsICNTRUxGX1JFRlJFU0hfTU9ERSAmIDB4ZmYwMDAwMDAKLQlvcnIJcjUsIHI1LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweDAwMDAwMGZmCi0Jc3RyCXI1LCBbcjQsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJbGRyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJb3JyCXI5LCByNywgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHhmZjAwMDAwMAorCW9ycglyOSwgcjksICNTRUxGX1JFRlJFU0hfTU9ERSAmIDB4MDAwMDAwZmYKKwlzdHIJcjksIFtyNiwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KIAogCUAgcHJlcGFyZSB0byBwdXQgRU1JRlMgdG8gU2xlZXAKLQlsZHIJcjUsIFtyNCwgI0VNSUZTX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KLQlvcnIJcjUsIHI1LCAjSURMRV9FTUlGU19SRVFVRVNUICYgMHhmZgotCXN0cglyNSwgW3I0LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCWxkcglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCW9ycglyOSwgcjgsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCisJc3RyCXI5LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKIAlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgogCW1vdglyNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweGZmMDAwMDAwCkBAIC0yNzEsMjYgKzI3NiwyMiBAQAogCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMDAwZmYwMAogCiAJQCB0dXJuIG9mZiBjbG9jayBkb21haW5zCi0JbW92CXI1LCAjT01BUDE2MTBfSURMRV9DTE9DS19ET01BSU5TICYgMHhmZgotIAlvcnIJcjUscjUsICNPTUFQMTYxMF9JRExFX0NMT0NLX0RPTUFJTlMgJiAweGZmMDAKLQlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KLQotCUAgd29yayBhcm91bmQgZXJyYXRhIG9mIE9NQVAxNjEwLzU5MTIuIEVuYWJsZSAoISkgcGVyaXBoZXJhbAotCUAgY2xvY2sgdG8gbGV0IHRoZSBjaGlwIGdvIGludG8gZGVlcCBzbGVlcAotCWxkcmgJcjUsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQotIAlvcnIJcjUscjUsICNFTl9QRVJDS19CSVQgJiAweGZmCisJQCBkbyBub3QgZGlzYWJsZSBQRVJDSyAoMHgwNCkKKwltb3YJcjUsICNPTUFQMTYxMF9JRExFQ1QyX1NMRUVQX1ZBTCAmIDB4ZmYKKwlvcnIJcjUsIHI1LCAjT01BUDE2MTBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKIAlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAogCUAgcmVxdWVzdCBBUk0gaWRsZQotCW1vdglyMywgI09NQVAxNjEwX0RFRVBfU0xFRVBfUkVRVUVTVCAmIDB4ZmYKLQlvcnIJcjMsIHIzLCAjT01BUDE2MTBfREVFUF9TTEVFUF9SRVFVRVNUICYgMHhmZjAwCisJbW92CXIzLCAjT01BUDE2MTBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXIzLCByMywgI09NQVAxNjEwX0lETEVDVDFfU0xFRVBfVkFMICYgMHhmZjAwCiAJc3RyaAlyMywgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQltb3YJcjUsICNJRExFX1dBSVRfQ1lDTEVTICYgMHhmZgotCW9yciAgICAgcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAotbF8xNjEwXzI6Ci0Jc3VicwlyNSwgcjUsICMxCi0JYm5lCWxfMTYxMF8yCisJQCBkaXNhYmxlIGluc3RydWN0aW9uIGNhY2hlCisJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMAorCWJpYwlyMiwgcjksICMweDEwMDAKKwltY3IJcDE1LCAwLCByMiwgYzEsIGMwLCAwCisJbm9wCisKIC8qCiAgKiBMZXQncyB3YWl0IGZvciB0aGUgbmV4dCB3YWtlIHVwIGV2ZW50IHRvIHdha2UgdXMgdXAuIHIwIGNhbid0IGJlCiAgKiB1c2VkIGhlcmUgYmVjYXVzZSByMCBob2xkcyBBUk1fSURMRUNUMQpAQCAtMzAxLDEzICszMDIsMjEgQEAKICAqIG9tYXAxNjEwX2NwdV9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCiAgKgogICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCi0gKiBzdGFjaywgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKyAqIHN0YWNrLgogICovCisJQCByZS1lbmFibGUgSWNhY2hlCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMAorCisJQCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgogCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQogCXN0cmgJcjAsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQogCisJQCBSZXN0b3JlIEVNSUZGIGNvbnRyb2xzCisJc3RyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyCXI4LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKIAlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0JbGRtZmQgICBzcCEsIHtyMCAtIHIxMiwgcGN9CisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQogCiBFTlRSWShvbWFwMTYxMF9jcHVfc3VzcGVuZF9zeikKIAkud29yZAkuIC0gb21hcDE2MTBfY3B1X3N1c3BlbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLWZuLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS1mbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWEzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS1mbi5TCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5TCisgKgorICogRnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gaW50ZXJuYWwgU1JBTQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisJLnRleHQKKworLyoKKyAqIFJlcHJvZ3JhbXMgVUxQRCBhbmQgQ0tDVEwuCisgKi8KK0VOVFJZKHNyYW1fcmVwcm9ncmFtX2Nsb2NrKQorCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKworCW1vdglyMiwgI0lPX0FERFJFU1MoRFBMTF9DVEwpICYgMHhmZjAwMDAwMAorCW9ycglyMiwgcjIsICNJT19BRERSRVNTKERQTExfQ1RMKSAmIDB4MDBmZjAwMDAKKwlvcnIJcjIsIHIyLCAjSU9fQUREUkVTUyhEUExMX0NUTCkgJiAweDAwMDBmZjAwCisKKwltb3YJcjMsICNJT19BRERSRVNTKEFSTV9DS0NUTCkgJiAweGZmMDAwMDAwCisJb3JyCXIzLCByMywgI0lPX0FERFJFU1MoQVJNX0NLQ1RMKSAmIDB4MDBmZjAwMDAKKwlvcnIJcjMsIHIzLCAjSU9fQUREUkVTUyhBUk1fQ0tDVEwpICYgMHgwMDAwZmYwMAorCisJdHN0CXIwLCAjMSA8PCA0CQkJQCB3YW50IGxvY2sgbW9kZT8KKwliZXEJbmV3Y2sJCQkJQCBub3BlCisJYmljCXIwLCByMCwgIzEgPDwgNAkJCUAgZWxzZSBjbGVhciBsb2NrIGJpdAorCXN0cmgJcjAsIFtyMl0JCQlAIHNldCBkcGxsIGludG8gYnlwYXNzIG1vZGUKKwlvcnIJcjAsIHIwLCAjMSA8PCA0CQkJQCBzZXQgbG9jayBiaXQgYWdhaW4KKworbmV3Y2s6CisJc3RyaAlyMSwgW3IzXQkJCUAgd3JpdGUgbmV3IGNrY3RsIHZhbHVlCisJc3RyaAlyMCwgW3IyXQkJCUAgd3JpdGUgbmV3IGRwbGwgdmFsdWUKKworCW1vdglyNCwgIzB4MDcwMAkJCUAgbGV0IHRoZSBjbG9ja3Mgc2V0dGxlCisJb3JyCXI0LCByNCwgIzB4MDBmZgorZGVsYXk6CXN1YglyNCwgcjQsICMxCisJY21wCXI0LCAjMAorCWJuZQlkZWxheQorCitsb2NrOglsZHJoCXI0LCBbcjJdLCAjMAkJCUAgcmVhZCBiYWNrIGRwbGwgdmFsdWUKKwl0c3QJcjAsICMxIDw8IDQJCQlAIHdhbnQgbG9jayBtb2RlPworCWJlcQlvdXQJCQkJQCBub3BlCisJdHN0CXI0LCAjMSA8PCAwCQkJQCBkcGxsIHJhdGUgbG9ja2VkPworCWJlcQlsb2NrCQkJCUAgdHJ5IGFnYWluCisKK291dDoKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCitFTlRSWShzcmFtX3JlcHJvZ3JhbV9jbG9ja19zeikKKwkud29yZAkuIC0gc3JhbV9yZXByb2dyYW1fY2xvY2sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MTlhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworICoKKyAqIE9NQVAgU1JBTSBkZXRlY3Rpb24gYW5kIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjaW5jbHVkZSAic3JhbS5oIgorCisjZGVmaW5lIE9NQVAxX1NSQU1fQkFTRQkJMHhkMDAwMDAwMAorI2RlZmluZSBPTUFQMV9TUkFNX1NUQVJUCTB4MjAwMDAwMDAKKyNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1NaCTB4ODAKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX2Jhc2U7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX3NyYW1fc2l6ZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9jZWlsOworCisvKgorICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZToKKyAqIDczMCA9IDIwMEssIDE1MTAgPSA1MTJLLCA1OTEyID0gMjU2SywgMTYxMCA9IDE2SywgMTcxMCA9IDE2SworICogTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnkgdG8gdGVzdCBmb3IgU1JBTSBoZXJlIGJlY2F1c2Ugd3JpdGVzCisgKiB0byBzZWN1cmUgU1JBTSB3aWxsIGhhbmcgdGhlIHN5c3RlbS4gQWxzbyB0aGUgU1JBTSBpcyBub3QKKyAqIHlldCBtYXBwZWQgYXQgdGhpcyBwb2ludC4KKyAqLwordm9pZCBfX2luaXQgb21hcF9kZXRlY3Rfc3JhbSh2b2lkKQoreworCW9tYXBfc3JhbV9iYXNlID0gT01BUDFfU1JBTV9CQVNFOworCisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJb21hcF9zcmFtX3NpemUgPSAweDgwMDAwOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTYyMSgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKQorCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKKwkJb21hcF9zcmFtX3NpemUgPSAweDNlODAwOworCWVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKKwkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU1JBTSBzaXplOiAweCVseFxuIiwgb21hcF9zcmFtX3NpemUpOworCW9tYXBfc3JhbV9jZWlsID0gb21hcF9zcmFtX2Jhc2UgKyBvbWFwX3NyYW1fc2l6ZTsKK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwX3NyYW1faW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeyBPTUFQMV9TUkFNX0JBU0UsIE9NQVAxX1NSQU1fU1RBUlQsIDAsIE1UX0RFVklDRSB9Cit9OworCisvKgorICogSW4gb3JkZXIgdG8gdXNlIGxhc3QgMmtCIG9mIFNSQU0gb24gMTYxMWIsIHdlIG11c3Qgcm91bmQgdGhlIHNpemUKKyAqIHVwIHRvIG11bHRpcGxlIG9mIFBBR0VfU0laRS4gV2UgY2Fubm90IHVzZSBpb3JlbWFwIGZvciBTUkFNLCBhcworICogY2xvY2sgaW5pdCBuZWVkcyBTUkFNIGVhcmx5LgorICovCit2b2lkIF9faW5pdCBvbWFwX21hcF9zcmFtKHZvaWQpCit7CisJaWYgKG9tYXBfc3JhbV9zaXplID09IDApCisJCXJldHVybjsKKworCW9tYXBfc3JhbV9pb19kZXNjWzBdLmxlbmd0aCA9IChvbWFwX3NyYW1fc2l6ZSArIFBBR0VfU0laRS0xKS9QQUdFX1NJWkU7CisJb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoICo9IFBBR0VfU0laRTsKKwlpb3RhYmxlX2luaXQob21hcF9zcmFtX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcF9zcmFtX2lvX2Rlc2MpKTsKKworCS8qCisJICogTG9va3MgbGlrZSB3ZSBuZWVkIHRvIHByZXNlcnZlIHNvbWUgYm9vdGxvYWRlciBjb2RlIGF0IHRoZQorCSAqIGJlZ2lubmluZyBvZiBTUkFNIGZvciBqdW1waW5nIHRvIGZsYXNoIGZvciByZWJvb3QgdG8gd29yay4uLgorCSAqLworCW1lbXNldCgodm9pZCAqKW9tYXBfc3JhbV9iYXNlICsgU1JBTV9CT09UTE9BREVSX1NaLCAwLAorCSAgICAgICBvbWFwX3NyYW1fc2l6ZSAtIFNSQU1fQk9PVExPQURFUl9TWik7Cit9CisKK3N0YXRpYyB2b2lkICgqX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2spKHUzMiBkcGxsY3RsLCB1MzIgY2tjdGwpID0gTlVMTDsKKwordm9pZCBvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBkcGxsY3RsLCB1MzIgY2tjdGwpCit7CisJaWYgKF9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrID09IE5VTEwpCisJCXBhbmljKCJDYW5ub3QgdXNlIFNSQU0iKTsKKworCXJldHVybiBfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayhkcGxsY3RsLCBja2N0bCk7Cit9CisKK3ZvaWQgKiBvbWFwX3NyYW1fcHVzaCh2b2lkICogc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA+IChvbWFwX3NyYW1fY2VpbCAtIChvbWFwX3NyYW1fYmFzZSArIFNSQU1fQk9PVExPQURFUl9TWikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBzcGFjZSBpbiBTUkFNXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW9tYXBfc3JhbV9jZWlsIC09IHNpemU7CisJb21hcF9zcmFtX2NlaWwgJj0gfjB4MzsKKwltZW1jcHkoKHZvaWQgKilvbWFwX3NyYW1fY2VpbCwgc3RhcnQsIHNpemUpOworCisJcmV0dXJuICh2b2lkICopb21hcF9zcmFtX2NlaWw7Cit9CisKK3ZvaWQgX19pbml0IG9tYXBfc3JhbV9pbml0KHZvaWQpCit7CisJb21hcF9kZXRlY3Rfc3JhbSgpOworCW9tYXBfbWFwX3NyYW0oKTsKKwlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTg0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCisgKgorICogSW50ZXJmYWNlIGZvciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiBpbnRlcm5hbCBTUkFNCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fT01BUF9TUkFNX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAorCitleHRlcm4gdm9pZCAqIG9tYXBfc3JhbV9wdXNoKHZvaWQgKiBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIG9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CisKKy8qIERvIG5vdCB1c2UgdGhlc2UgKi8KK2V4dGVybiB2b2lkIHNyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBja2N0bCwgdTMyIGRwbGxjdGwpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3JhbV9yZXByb2dyYW1fY2xvY2tfc3o7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCmluZGV4IDI1YmM0YTguLjk4ZjFjNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKQEAgLTQxLDYgKzQxLDcgQEAKIAogLyogVGhlc2Ugcm91dGluZXMgc2hvdWxkIGhhbmRsZSB0aGUgc3RhbmRhcmQgY2hpcC1zcGVjaWZpYyBtb2RlcwogICogZm9yIHVzYjAvMS8yIHBvcnRzLCBjb3ZlcmluZyBiYXNpYyBtdXggYW5kIHRyYW5zY2VpdmVyIHNldHVwLgorICogQ2FsbCBvbWFwX3VzYl9pbml0KCkgb25jZSwgZnJvbSBJTklUX01BQ0hJTkUoKS4KICAqCiAgKiBTb21lIGJvYXJkLSouYyBmaWxlcyB3aWxsIG5lZWQgdG8gc2V0IHVwIGFkZGl0aW9uYWwgbXV4IG9wdGlvbnMsCiAgKiBsaWtlIGZvciBzdXNwZW5kIGhhbmRsaW5nLCB2YnVzIHNlbnNpbmcsIEdQSU9zLCBhbmQgdGhlIEQrIHB1bGx1cC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaAppbmRleCA3OTEzOGRjLi5kNjRlZTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCkBAIC0zMCw2ICszMCw5IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9INF9ICiAKIC8qIFBsYWNlaG9sZGVyIGZvciBINCBzcGVjaWZpYyBkZWZpbmVzICovCisvKiBHUE1DIENTMSAqLworI2RlZmluZSBPTUFQMjRYWF9FVEhSX1NUQVJUICAgICAgICAgICAgIDB4MDgwMDAzMDAKKyNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJOTIKIAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfSDRfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaAppbmRleCAwZjFhYmFlLi43OTU3NGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmgKQEAgLTM2LDMxICszNiw2IEBACiAjZGVmaW5lIE9NQVAxNTEwUDFfRU1JRlNfUFJJX1ZBTFVFCQkweDAwCiAjZGVmaW5lIE9NQVAxNTEwUDFfRU1JRkZfUFJJX1ZBTFVFCQkweDAwCiAKLS8qCi0gKiBUaGVzZSBkZWZpbml0aW9ucyBkZWZpbmUgYW4gYXJlYSBvZiBGTEFTSCBzZXQgYXNpZGUKLSAqIGZvciB0aGUgdXNlIG9mIE1URC9KRkZTMi4gVGhpcyBpcyB0aGUgYXJlYSBvZiBmbGFzaAotICogdGhhdCBhIEpGRlMyIGZpbGVzeXN0ZW0gd2lsbCByZXNpZGUgd2hpY2ggaXMgbW91bnRlZAotICogYXQgYm9vdCB3aXRoIHRoZSAicm9vdD0vZGV2L210ZGJsb2NrLzAgcnciCi0gKiBjb21tYW5kIGxpbmUgb3B0aW9uLiBUaGUgZmxhc2ggYWRkcmVzcyB1c2VkIGhlcmUgbXVzdAotICogZmFsbCB3aXRoaW4gdGhlIGxlZ2FsIHJhbmdlIGRlZmluZWQgYnkgcnJsb2FkIGZvciBzdG9yaW5nCi0gKiB0aGUgZmlsZXN5c3RlbSBjb21wb25lbnQuIFRoaXMgYWRkcmVzcyB3aWxsIGJlIHN1ZmZpY2llbnRseQotICogZGVlcCBpbnRvIHRoZSBvdmVyYWxsIGZsYXNoIHJhbmdlIHRvIGF2b2lkIHRoZSBvdGhlcgotICogY29tcG9uZW50cyBhbHNvIHN0b3JlZCBpbiBmbGFzaCBzdWNoIGFzIHRoZSBib290bG9hZGVyLAotICogdGhlIGJvb3Rsb2FkZXIgcGFyYW1zLCBhbmQgdGhlIGtlcm5lbC4KLSAqIFRoZSBTVzIgc2V0dGluZ3MgZm9yIHRoZSBtYXAgYmVsb3cgYXJlOgotICogMSBvZmYsIDIgb2ZmLCAzIG9uLCA0IG9mZi4KLSAqLwotCi0vKiBJbnRlbCBmbGFzaF8wLCBwYXJ0aXRpb25lZCBhcyBleHBlY3RlZCBieSBycmxvYWQgKi8KLSNkZWZpbmUgT01BUF9GTEFTSF8wX0JBU0UJMHhEODAwMDAwMAotI2RlZmluZSBPTUFQX0ZMQVNIXzBfU1RBUlQJMHgwMDAwMDAwMAotI2RlZmluZSBPTUFQX0ZMQVNIXzBfU0laRQlTWl8xNk0KLQotLyogSW50ZWwgZmxhc2hfMSwgdXNlZCBmb3IgY3JhbWZzIG9yIG90aGVyIGZsYXNoIGZpbGUgc3lzdGVtcyAqLwotI2RlZmluZSBPTUFQX0ZMQVNIXzFfQkFTRQkweEQ5MDAwMDAwCi0jZGVmaW5lIE9NQVBfRkxBU0hfMV9TVEFSVAkweDAxMDAwMDAwCi0jZGVmaW5lIE9NQVBfRkxBU0hfMV9TSVpFCVNaXzE2TQotCiAjZGVmaW5lIE5SX0ZQR0FfSVJRUwkJMjQKICNkZWZpbmUgTlJfSVJRUyAgICAgICAgICAgICAgICAgSUhfQk9BUkRfQkFTRSArIE5SX0ZQR0FfSVJRUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmgKaW5kZXggMGMyMjRjYy4uNjkxZTUyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtcGVyc2V1czIuaApAQCAtMzYsMjMgKzM2LDE0IEBACiAjZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQlEMjU2TV8xWDE2XzRCCiAjZW5kaWYKIAotLyoKLSAqIFRoZXNlIGRlZmluaXRpb25zIGRlZmluZSBhbiBhcmVhIG9mIEZMQVNIIHNldCBhc2lkZQotICogZm9yIHRoZSB1c2Ugb2YgTVREL0pGRlMyLiBUaGlzIGlzIHRoZSBhcmVhIG9mIGZsYXNoCi0gKiB0aGF0IGEgSkZGUzIgZmlsZXN5c3RlbSB3aWxsIHJlc2lkZSB3aGljaCBpcyBtb3VudGVkCi0gKiBhdCBib290IHdpdGggdGhlICJyb290PS9kZXYvbXRkYmxvY2svMCBydyIKLSAqIGNvbW1hbmQgbGluZSBvcHRpb24uCi0gKi8KLQotLyogSW50ZWwgZmxhc2hfMCwgcGFydGl0aW9uZWQgYXMgZXhwZWN0ZWQgYnkgcnJsb2FkICovCi0jZGVmaW5lIE9NQVBfRkxBU0hfMF9CQVNFCTB4RDgwMDAwMDAJLyogVkEgKi8KLSNkZWZpbmUgT01BUF9GTEFTSF8wX1NUQVJUCTB4MDAwMDAwMDAJLyogUEEgKi8KLSNkZWZpbmUgT01BUF9GTEFTSF8wX1NJWkUJU1pfMzJNCi0KICNkZWZpbmUgTUFYSVJRTlVNCQlJSF9CT0FSRF9CQVNFCiAjZGVmaW5lIE1BWEZJUU5VTQkJTUFYSVJRTlVNCiAjZGVmaW5lIE1BWFNXSU5VTQkJTUFYSVJRTlVNCiAKICNkZWZpbmUgTlJfSVJRUwkJCShNQVhJUlFOVU0gKyAxKQogCisvKiBTYW1zdW5nIE5BTkQgZmxhc2ggYXQgQ1MyQiBvciBDUzMoTkFORCBCb290KSAqLworI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQxCSAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLworI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyCSAgIDB4MEMwMDAwMDAgLyogQ1MzICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC12b2ljZWJsdWUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtdm9pY2VibHVlLmgKaW5kZXggMzM5NzdiOC4uZWQ2ZDM0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC12b2ljZWJsdWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXZvaWNlYmx1ZS5oCkBAIC0xMSwxMSArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZPSUNFQkxVRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk9JQ0VCTFVFX0gKIAotI2lmIChFWFRFUk5BTF9NQVhfTlJfUE9SVFMgPCA0KQotI3VuZGVmIEVYVEVSTkFMX01BWF9OUl9QT1JUUwotI2RlZmluZSBFWFRFUk5BTF9NQVhfTlJfUE9SVFMJNAotI2VuZGlmCi0KIGV4dGVybiB2b2lkIHZvaWNlYmx1ZV93ZHRfZW5hYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9kaXNhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9waW5nKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCmluZGV4IDk1YmQ2MjUuLmEwMDQwY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTMwLDEwICszMCwyMyBAQAogCXU4IHN5c3RlbV9jbG9ja190eXBlOwogfTsKIAorc3RydWN0IG9tYXBfbW1jX2NvbmYgeworCXVuc2lnbmVkIGVuYWJsZWQ6MTsKKwkvKiBub211eCBtZWFucyAic3RhbmRhcmQiIG11eGluZyBpcyB3cm9uZyBvbiB0aGlzIGJvYXJkLCBhbmQgdGhhdAorCSAqIGJvYXJkLXNwZWNpZmljIGNvZGUgaGFuZGxlZCBpdCBiZWZvcmUgY29tbW9uIGluaXQgbG9naWMuCisJICovCisJdW5zaWduZWQgbm9tdXg6MTsKKwkvKiBzd2l0Y2ggcGluIGNhbiBiZSBmb3IgY2FyZCBkZXRlY3QgKGRlZmF1bHQpIG9yIGNhcmQgY292ZXIgKi8KKwl1bnNpZ25lZCBjb3ZlcjoxOworCS8qIDQgd2lyZSBzaWduYWxpbmcgaXMgb3B0aW9uYWwsIGFuZCBpcyBvbmx5IHVzZWQgZm9yIFNEL1NESU8gKi8KKwl1bnNpZ25lZCB3aXJlNDoxOworCXMxNiBwb3dlcl9waW47CisJczE2IHN3aXRjaF9waW47CisJczE2IHdwX3BpbjsKK307CisKIHN0cnVjdCBvbWFwX21tY19jb25maWcgewotCXU4IG1tY19ibG9ja3M7Ci0JczE2IG1tYzFfcG93ZXJfcGluLCBtbWMyX3Bvd2VyX3BpbjsKLQlzMTYgbW1jMV9zd2l0Y2hfcGluLCBtbWMyX3N3aXRjaF9waW47CisJc3RydWN0IG9tYXBfbW1jX2NvbmYgbW1jWzJdOwogfTsKIAogc3RydWN0IG9tYXBfc2VyaWFsX2NvbnNvbGVfY29uZmlnIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oCmluZGV4IGU4Nzg2NzEuLjExMTllMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaApAQCAtMzgsMTQ2ICszOCwxNzkgQEAKIC8qCiAgKiBUZXN0IGlmIG11bHRpY29yZSBPTUFQIHN1cHBvcnQgaXMgbmVlZGVkCiAgKi8KLSN1bmRlZiBNVUxUSV9PTUFQCisjdW5kZWYgTVVMVElfT01BUDEKKyN1bmRlZiBNVUxUSV9PTUFQMgogI3VuZGVmIE9NQVBfTkFNRQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAogIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQCi0jICBkZWZpbmUgTVVMVElfT01BUAorIyAgdW5kZWYgIE1VTFRJX09NQVAxCisjICBkZWZpbmUgTVVMVElfT01BUDEKICMgZWxzZQogIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCiAjIGVuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAogIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQCi0jICBkZWZpbmUgTVVMVElfT01BUAorIyAgdW5kZWYgIE1VTFRJX09NQVAxCisjICBkZWZpbmUgTVVMVElfT01BUDEKICMgZWxzZQogIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMTUxMAogIyBlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKICMgaWZkZWYgT01BUF9OQU1FCi0jICB1bmRlZiAgTVVMVElfT01BUAotIyAgZGVmaW5lIE1VTFRJX09NQVAKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCiAjIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDE2MTAKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDE2eHgKICMgZW5kaWYKICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCi0jIGlmZGVmIE9NQVBfTkFNRQotIyAgdW5kZWYgIE1VTFRJX09NQVAKLSMgIGRlZmluZSBNVUxUSV9PTUFQCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyMgaWYgKGRlZmluZWQoT01BUF9OQU1FKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAxKSkKKyMgIGVycm9yICJPTUFQMSBhbmQgT01BUDIgY2FuJ3QgYmUgc2VsZWN0ZWQgYXQgdGhlIHNhbWUgdGltZSIKICMgZWxzZQotIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMTcxMAorIyAgdW5kZWYgIE1VTFRJX09NQVAyCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAyNHh4CiAjIGVuZGlmCiAjZW5kaWYKIAogLyoKLSAqIEdlbmVyYXRlIHZhcmlvdXMgT01BUCBjcHUgc3BlY2lmaWMgbWFjcm9zLCBhbmQgY3B1IGNsYXNzCi0gKiBzcGVjaWZpYyBtYWNyb3MKKyAqIE1hY3JvcyB0byBncm91cCBPTUFQIGludG8gY3B1IGNsYXNzZXMuCisgKiBUaGVzZSBjYW4gYmUgdXNlZCBpbiBtb3N0IHBsYWNlcy4KKyAqIGNwdV9pc19vbWFwN3h4KCk6CVRydWUgZm9yIE9NQVA3MzAKKyAqIGNwdV9pc19vbWFwMTV4eCgpOglUcnVlIGZvciBPTUFQMTUxMCBhbmQgT01BUDU5MTAKKyAqIGNwdV9pc19vbWFwMTZ4eCgpOglUcnVlIGZvciBPTUFQMTYxMCwgT01BUDU5MTIgYW5kIE9NQVAxNzEwCisgKiBjcHVfaXNfb21hcDI0eHgoKToJVHJ1ZSBmb3IgT01BUDI0MjAKICAqLwotI2RlZmluZSBHRVRfT01BUF9UWVBFCSgoc3lzdGVtX3JldiA+PiAyNCkgJiAweGZmKQogI2RlZmluZSBHRVRfT01BUF9DTEFTUwkoc3lzdGVtX3JldiAmIDB4ZmYpCiAKLSNkZWZpbmUgSVNfT01BUF9UWVBFKHR5cGUsIGlkKQkJCQlcCi1zdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjdHlwZSAodm9pZCkJCQlcCi17CQkJCQkJCVwKLQlyZXR1cm4gKEdFVF9PTUFQX1RZUEUgPT0gKGlkKSkgPyAxIDogMDsJCVwKLX0KLQogI2RlZmluZSBJU19PTUFQX0NMQVNTKGNsYXNzLCBpZCkJCQlcCiBzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjY2xhc3MgKHZvaWQpCQlcCiB7CQkJCQkJCVwKIAlyZXR1cm4gKEdFVF9PTUFQX0NMQVNTID09IChpZCkpID8gMSA6IDA7CVwKIH0KIAotSVNfT01BUF9UWVBFKDczMCwgMHgwNykKLUlTX09NQVBfVFlQRSgxNTEwLCAweDE1KQotSVNfT01BUF9UWVBFKDE2MTAsIDB4MTYpCi1JU19PTUFQX1RZUEUoNTkxMiwgMHgxNikKLUlTX09NQVBfVFlQRSgxNzEwLCAweDE3KQotSVNfT01BUF9UWVBFKDI0MjAsIDB4MjQpCi0KIElTX09NQVBfQ0xBU1MoN3h4LCAweDA3KQogSVNfT01BUF9DTEFTUygxNXh4LCAweDE1KQogSVNfT01BUF9DTEFTUygxNnh4LCAweDE2KQogSVNfT01BUF9DTEFTUygyNHh4LCAweDI0KQogCi0vKgotICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgdHlwZXMgaW50byBjcHUgY2xhc3Nlcy4KLSAqIFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgotICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIDE1MTAgYW5kIDU5MTAKLSAqIGNwdV9pc19vbWFwMTZ4eCgpOglUcnVlIGZvciAxNjEwLCA1OTEyIGFuZCAxNzEwCi0gKi8KLSNpZiBkZWZpbmVkKE1VTFRJX09NQVApCi0jIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQlpc19vbWFwN3h4KCkKLSMgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQlpc19vbWFwMTV4eCgpCi0jIGlmICEoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSkKLSMgIGRlZmluZSBjcHVfaXNfb21hcDE2eHgoKQkJMQotIyBlbHNlCisjZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAxNnh4KCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkJCTAKKworI2lmIGRlZmluZWQoTVVMVElfT01BUDEpCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDd4eAorIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCWlzX29tYXA3eHgoKQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorIyAgdW5kZWYgIGNwdV9pc19vbWFwMTV4eAorIyAgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQlpc19vbWFwMTV4eCgpCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjICB1bmRlZiAgY3B1X2lzX29tYXAxNnh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNnh4KCkJCWlzX29tYXAxNnh4KCkKICMgZW5kaWYKICNlbHNlCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDd4eAogIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCTEKLSMgZWxzZQotIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCTAKICMgZW5kaWYKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDE1eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJMQotIyBlbHNlCi0jICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTAKICMgZW5kaWYKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDE2eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE2eHgoKQkJMQotIyBlbHNlCi0jICBkZWZpbmUgY3B1X2lzX29tYXAxNnh4KCkJCTAKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDI0eHgKKyMgIGRlZmluZSBjcHVfaXNfb21hcDI0eHgoKQkJMQogIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKE1VTFRJX09NQVApCi0jIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQlpc19vbWFwNzMwKCkKLSMgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQlpc19vbWFwMTUxMCgpCi0jIGRlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJaXNfb21hcDE2MTAoKQotIyBkZWZpbmUgY3B1X2lzX29tYXA1OTEyKCkJCWlzX29tYXA1OTEyKCkKLSMgZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQlpc19vbWFwMTcxMCgpCi0jZWxzZQorLyoKKyAqIE1hY3JvcyB0byBkZXRlY3QgaW5kaXZpZHVhbCBjcHUgdHlwZXMuCisgKiBUaGVzZSBhcmUgb25seSByYXJlbHkgbmVlZGVkLgorICogY3B1X2lzX29tYXA3MzAoKToJVHJ1ZSBmb3IgT01BUDczMAorICogY3B1X2lzX29tYXAxNTEwKCk6CVRydWUgZm9yIE9NQVAxNTEwCisgKiBjcHVfaXNfb21hcDE2MTAoKToJVHJ1ZSBmb3IgT01BUDE2MTAKKyAqIGNwdV9pc19vbWFwMTYxMSgpOglUcnVlIGZvciBPTUFQMTYxMQorICogY3B1X2lzX29tYXA1OTEyKCk6CVRydWUgZm9yIE9NQVA1OTEyCisgKiBjcHVfaXNfb21hcDE2MjEoKToJVHJ1ZSBmb3IgT01BUDE2MjEKKyAqIGNwdV9pc19vbWFwMTcxMCgpOglUcnVlIGZvciBPTUFQMTcxMAorICogY3B1X2lzX29tYXAyNDIwKCk6CVRydWUgZm9yIE9NQVAyNDIwCisgKi8KKyNkZWZpbmUgR0VUX09NQVBfVFlQRQkoKHN5c3RlbV9yZXYgPj4gMTYpICYgMHhmZmZmKQorCisjZGVmaW5lIElTX09NQVBfVFlQRSh0eXBlLCBpZCkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgaXNfb21hcCAjI3R5cGUgKHZvaWQpCQkJXAorewkJCQkJCQlcCisJcmV0dXJuIChHRVRfT01BUF9UWVBFID09IChpZCkpID8gMSA6IDA7CQlcCit9CisKK0lTX09NQVBfVFlQRSg3MzAsIDB4MDczMCkKK0lTX09NQVBfVFlQRSgxNTEwLCAweDE1MTApCitJU19PTUFQX1RZUEUoMTYxMCwgMHgxNjEwKQorSVNfT01BUF9UWVBFKDE2MTEsIDB4MTYxMSkKK0lTX09NQVBfVFlQRSg1OTEyLCAweDE2MTEpCitJU19PTUFQX1RZUEUoMTYyMSwgMHgxNjIxKQorSVNfT01BUF9UWVBFKDE3MTAsIDB4MTcxMCkKK0lTX09NQVBfVFlQRSgyNDIwLCAweDI0MjApCisKKyNkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDE2MTEoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDE2MjEoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDE3MTAoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MjAoKQkJMAorCisjaWYgZGVmaW5lZChNVUxUSV9PTUFQMSkKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQotIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTEKLSMgZWxzZQotIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTAKKyMgIHVuZGVmICBjcHVfaXNfb21hcDczMAorIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQogIyBlbmRpZgogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorIyAgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAorIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQlpc19vbWFwMTUxMCgpCisjIGVuZGlmCisjZWxzZQorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisjICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKKyMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjICB1bmRlZiAgY3B1X2lzX29tYXAxNTEwCiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCTEKLSMgZWxzZQotIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQkwCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi0jICBkZWZpbmUgY3B1X2lzX29tYXAxNjEwKCkJCTEKLSMgZWxzZQotIyAgZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpCQkwCi0jIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi0jICBkZWZpbmUgY3B1X2lzX29tYXA1OTEyKCkJCTEKLSMgZWxzZQotIyAgZGVmaW5lIGNwdV9pc19vbWFwNTkxMigpCQkwCi0jIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjZW5kaWYKKworLyoKKyAqIFdoZXRoZXIgd2UgaGF2ZSBNVUxUSV9PTUFQMSBvciBub3QsIHdlIHN0aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gMTYxMUIvNTkxMiBhbmQgMTcxMC4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjIHVuZGVmICBjcHVfaXNfb21hcDE2MTAKKyMgdW5kZWYgIGNwdV9pc19vbWFwMTYxMQorIyB1bmRlZiAgY3B1X2lzX29tYXA1OTEyCisjIHVuZGVmICBjcHVfaXNfb21hcDE2MjEKKyMgdW5kZWYgIGNwdV9pc19vbWFwMTcxMAogIyBkZWZpbmUgY3B1X2lzX29tYXAxNjEwKCkJCWlzX29tYXAxNjEwKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMTYxMSgpCQlpc19vbWFwMTYxMSgpCiAjIGRlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJaXNfb21hcDU5MTIoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAxNjIxKCkJCWlzX29tYXAxNjIxKCkKICMgZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQlpc19vbWFwMTcxMCgpCi0jIGVsc2UKLSMgZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpCQkwCi0jIGRlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJMAotIyBkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkJCTAKLSMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDI0MjAKICMgIGRlZmluZSBjcHVfaXNfb21hcDI0MjAoKQkJMQotIyBlbHNlCi0jICBkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCTAKLSMgZW5kaWYKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZGVidWctbWFjcm8uUwppbmRleCA4M2JiNDU4Li5jYTRmNTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kZWJ1Zy1tYWNyby5TCkBAIC0xNCw2ICsxNCw3IEBACiAJCS5tYWNybwlhZGRydWFydCxyeAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIAkJbW92ZXEJXHJ4LCAjMHhmZjAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwogCQltb3ZuZQlccngsICMweGZlMDAwMDAwCUAgdmlydHVhbCBiYXNlCiAJCW9ycglccngsIFxyeCwgIzB4MDBmYjAwMDAKQEAgLTIzLDYgKzI0LDE4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMikgfHwgZGVmaW5lZChDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMykKIAkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDgwMAlAIFVBUlQgMiAmIDMKICNlbmRpZgorCisjZWxpZiAgQ09ORklHX0FSQ0hfT01BUDIKKwkJbW92ZXEJXHJ4LCAjMHg0ODAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQltb3ZuZQlccngsICMweGQ4MDAwMDAwCUAgdmlydHVhbCBiYXNlCisJCW9ycglccngsIFxyeCwgIzB4MDAwNmEwMDAKKyNpZmRlZiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMgorCQlhZGQJXHJ4LCBccngsICMweDAwMDAyMDAwCUAgVUFSVCAyCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMworCQlhZGQJXHJ4LCBccngsICMweDAwMDA0MDAwCUAgVUFSVCAzCisjZW5kaWYKKyNlbmRpZgogCQkuZW5kbQogCiAJCS5tYWNybwlzZW5kdWFydCxyZCxyeApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggY2UxMTRjZS4uMDRlYmVmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0yNDAsNiArMjQwLDcgQEAKIAogZXh0ZXJuIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX3NyY19wb3MoaW50IGxjaCk7CiBleHRlcm4gZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKTsKK2V4dGVybiBpbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCk7CiBleHRlcm4gdm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKTsKIGV4dGVybiBpbnQgb21hcF9kbWFfcnVubmluZyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc3MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcm0vYXJjaC1vbWFwL2RtdGltZXIuaAorICoKKyAqIE9NQVAgRHVhbC1Nb2RlIFRpbWVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBMYXVyaSBMZXVra3VuZW4gPGxhdXJpLmxldWtrdW5lbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FUl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVJfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjZGVmaW5lIE9NQVBfVElNRVJfU1JDX0FSTVhPUgkJMHgwMAorI2RlZmluZSBPTUFQX1RJTUVSX1NSQ18zMl9LSFoJCTB4MDEKKyNkZWZpbmUgT01BUF9USU1FUl9TUkNfRVhUX0NMSwkJMHgwMgorCisvKiB0aW1lciBjb250cm9sIHJlZyBiaXRzICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9DQVBUTU9ERQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RSR19PVkVSRkxPVwkoMHgxIDw8IDEwKQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVFJHX09GQU5ETUFUQ0gJKDB4MiA8PCAxMCkKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RDTV9MT1dUT0hJR0gJKDB4MSA8PCA4KQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVENNX0hJR0hUT0xPVwkoMHgyIDw8IDgpCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9UQ01fQk9USEVER0VTCSgweDMgPDwgOCkKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1NDUFdNCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfQ0UJCSgxIDw8IDYpCS8qIGNvbXBhcmUgZW5hYmxlICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9QUkUJCSgxIDw8IDUpCS8qIHByZXNjYWxlciBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUVl9TSElGVAkyCQkvKiBob3cgbXVjaCB0byBzaGlmdCB0aGUgcHJlc2NhbGVyIHZhbHVlICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9BUgkJKDEgPDwgMSkJLyogYXV0by1yZWxvYWQgZW5hYmxlICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9TVAkJKDEgPDwgMCkJLyogc3RhcnQgdGltZXIgKi8KKworLyogdGltZXIgaW50ZXJydXB0IGVuYWJsZSBiaXRzICovCisjZGVmaW5lIE9NQVBfVElNRVJfSU5UX0NBUFRVUkUJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQX1RJTUVSX0lOVF9NQVRDSAkJKDEgPDwgMCkKKworCitzdHJ1Y3Qgb21hcF9kbV90aW1lciB7CisJc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0OworCisJdTMyIGJhc2U7CisJdW5zaWduZWQgaW50IGlycTsKK307CisKK3UzMiBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHJlZyk7Cit2b2lkIG9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHJlZywgdTMyIHZhbHVlKTsKKworc3RydWN0IG9tYXBfZG1fdGltZXIgKiBvbWFwX2RtX3RpbWVyX3JlcXVlc3Qodm9pZCk7Cit2b2lkIG9tYXBfZG1fdGltZXJfZnJlZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2Uoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgc291cmNlKTsKKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKTsKK3ZvaWQgb21hcF9kbV90aW1lcl9zZXRfdHJpZ2dlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCB2YWx1ZSk7Cit2b2lkIG9tYXBfZG1fdGltZXJfZW5hYmxlX2NvbXBhcmUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKK3ZvaWQgb21hcF9kbV90aW1lcl9lbmFibGVfYXV0b3JlbG9hZChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOworCit2b2lkIG9tYXBfZG1fdGltZXJfdHJpZ2dlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwordm9pZCBvbWFwX2RtX3RpbWVyX3N0YXJ0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7Cit2b2lkIG9tYXBfZG1fdGltZXJfc3RvcChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOworCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X2xvYWQoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgbG9hZCk7Cit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IG1hdGNoKTsKKwordW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKK3ZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworCit1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKK3ZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CisKK2ludCBvbWFwX2RtX3RpbWVyc19hY3RpdmUodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcC5oCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3AuaAorICoKKyAqIEhlYWRlciBmb3IgT01BUCBEU1AgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFRvc2hpaGlybyBLb2JheWFzaGkgPHRvc2hpaGlyby5rb2JheWFzaGlAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAyMDA1LzA2LzAxOiAgRFNQIEdhdGV3YXkgdmVyc2lvbiAzLjMKKyAqLworCisjaWZuZGVmIEFTTV9BUkNIX0RTUF9ICisjZGVmaW5lIEFTTV9BUkNIX0RTUF9ICisKKworLyoKKyAqIGZvciAvZGV2L2RzcGN0bC9jdGwKKyAqLworI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRVNFVAkJCTEKKyNkZWZpbmUgT01BUF9EU1BfSU9DVExfUlVOCQkJMgorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9TRVRSU1RWRUNUCQkzCisjZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX0NQVV9JRExFCQkJNAorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9NUFVJX1dPUkRTV0FQX09OCQk1CisjZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX01QVUlfV09SRFNXQVBfT0ZGCTYKKyNkZWZpbmUgT01BUF9EU1BfSU9DVExfTVBVSV9CWVRFU1dBUF9PTgkJNworI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9NUFVJX0JZVEVTV0FQX09GRgk4CisjZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX0dCTF9JRExFCQkJOQorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9EU1BDRkcJCQkxMAorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9EU1BVTkNGRwkJCTExCisjZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX1RBU0tDTlQJCQkxMgorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9QT0xMCQkJMTMKKyNkZWZpbmUgT01BUF9EU1BfSU9DVExfUkVHTUVNUgkJCTQwCisjZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX1JFR01FTVcJCQk0MQorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRUdJT1IJCQk0MgorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRUdJT1cJCQk0MworI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9HRVRWQVIJCQk0NAorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9TRVRWQVIJCQk0NQorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SVU5MRVZFTAkJCTUwCisjZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX1NVU1BFTkQJCQk1MQorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRVNVTUUJCQk1MgorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9GQkVOCQkJNTMKKyNkZWZpbmUgT01BUF9EU1BfSU9DVExfRkJESVMJCQk1NAorI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9NQlNFTkQJCQk5OQorCisvKgorICogZm9yIHRhc2tkZXYKKyAqIChpb2N0bHMgYmVsb3cgc2hvdWxkIGJlID49IDB4MTAwMDApCisgKi8KKyNkZWZpbmUgT01BUF9EU1BfVEFTS19JT0NUTF9CRkxTSAkweDEwMDAwCisjZGVmaW5lIE9NQVBfRFNQX1RBU0tfSU9DVExfU0VUQlNaCTB4MTAwMDEKKyNkZWZpbmUgT01BUF9EU1BfVEFTS19JT0NUTF9MT0NLCTB4MTAwMDIKKyNkZWZpbmUgT01BUF9EU1BfVEFTS19JT0NUTF9VTkxPQ0sJMHgxMDAwMworI2RlZmluZSBPTUFQX0RTUF9UQVNLX0lPQ1RMX0dFVE5BTUUJMHgxMDAwNAorCisvKgorICogZm9yIC9kZXYvZHNwY3RsL21lbQorICovCisjZGVmaW5lIE9NQVBfRFNQX01FTV9JT0NUTF9FWE1BUAkxCisjZGVmaW5lIE9NQVBfRFNQX01FTV9JT0NUTF9FWFVOTUFQCTIKKyNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX0VYTUFQX0ZMVVNICTMKKyNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX0ZCRVhQT1JUCTUKKyNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX01NVUlUQUNLCTcKKyNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX01NVUlOSVQJOQorI2RlZmluZSBPTUFQX0RTUF9NRU1fSU9DVExfS01FTV9SRVNFUlZFCTExCisjZGVmaW5lIE9NQVBfRFNQX01FTV9JT0NUTF9LTUVNX1JFTEVBU0UJMTIKKworc3RydWN0IG9tYXBfZHNwX21hcGluZm8geworCXVuc2lnbmVkIGxvbmcgZHNwYWRyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKKy8qCisgKiBmb3IgL2Rldi9kc3BjdGwvdHdjaAorICovCisjZGVmaW5lIE9NQVBfRFNQX1RXQ0hfSU9DVExfTUtERVYJMQorI2RlZmluZSBPTUFQX0RTUF9UV0NIX0lPQ1RMX1JNREVWCTIKKyNkZWZpbmUgT01BUF9EU1BfVFdDSF9JT0NUTF9UQURECTExCisjZGVmaW5lIE9NQVBfRFNQX1RXQ0hfSU9DVExfVERFTAkxMgorI2RlZmluZSBPTUFQX0RTUF9UV0NIX0lPQ1RMX1RLSUxMCTEzCisKKyNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfTk9UQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfQVRUQUNIRUQJMHgwMDAwMDAwMgorI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9HQVJCQUdFCTB4MDAwMDAwMDQKKyNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfSU5WQUxJRAkweDAwMDAwMDA4CisjZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX0FERFJFUQkweDAwMDAwMTAwCisjZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX0RFTFJFUQkweDAwMDAwMjAwCisjZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX0FEREZBSUwJMHgwMDAwMTAwMAorI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9BRERJTkcJMHgwMDAxMDAwMAorI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9ERUxJTkcJMHgwMDAyMDAwMAorI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9LSUxMSU5HCTB4MDAwNDAwMDAKKyNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfU1RBVEVfTUFTSwkweDdmZmZmZmZmCisjZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX1NUQUxFCQkweDgwMDAwMDAwCisKK3N0cnVjdCBvbWFwX2RzcF90YWRkaW5mbyB7CisJdW5zaWduZWQgY2hhciBtaW5vcjsKKwl1bnNpZ25lZCBsb25nIHRhc2thZHI7Cit9OworI2RlZmluZSBPTUFQX0RTUF9UQUREX0FCT1JUQURSCTB4ZmZmZmZmZmYKKworCisvKgorICogZXJyb3IgY2F1c2UgZGVmaW5pdGlvbiAoZm9yIGVycm9yIGRldGVjdGlvbiBkZXZpY2UpCisgKi8KKyNkZWZpbmUgT01BUF9EU1BfRVJSRFRfV0RUCTB4MDAwMDAwMDEKKyNkZWZpbmUgT01BUF9EU1BfRVJSRFRfTU1VCTB4MDAwMDAwMDIKKworCisvKgorICogbWFpbGJveCBwcm90b2NvbCBkZWZpbml0aW9ucworICovCisKK3N0cnVjdCBvbWFwX2RzcF9tYWlsYm94X2NtZCB7CisJdW5zaWduZWQgc2hvcnQgY21kOworCXVuc2lnbmVkIHNob3J0IGRhdGE7Cit9OworCitzdHJ1Y3Qgb21hcF9kc3BfcmVnaW5mbyB7CisJdW5zaWduZWQgc2hvcnQgYWRyOworCXVuc2lnbmVkIHNob3J0IHZhbDsKK307CisKK3N0cnVjdCBvbWFwX2RzcF92YXJpbmZvIHsKKwl1bnNpZ25lZCBjaGFyIHZhcmlkOworCXVuc2lnbmVkIHNob3J0IHZhbFswXTsKK307CisKKyNkZWZpbmUgT01BUF9EU1BfTUJQUk9UX1JFVklTSU9OCTB4MDAxOQorCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1dEU05ECTB4MTAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfV0RSRVEJMHgxMQorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9CS1NORAkweDIwCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0JLUkVRCTB4MjEKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfQktZTEQJMHgyMworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9CS1NORFAJMHgyNAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9CS1JFUVAJMHgyNQorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UQ1RMCTB4MzAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfVENUTERBVEEJMHgzMQorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9QT0xMCTB4MzIKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfV0RUCTB4NTAJLyogdjMuMzogb2Jzb2xldGUgKi8KKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfUlVOTEVWRUwJMHg1MQorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9QTQkweDUyCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1NVU1BFTkQJMHg1MworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9LRlVOQwkweDU0CisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDRkcJMHg2MAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UQURECTB4NjIKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfVERFTAkweDYzCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RTVE9QCTB4NjUKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfRFNQQ0ZHCTB4NzAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfUkVHUlcJMHg3MgorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9HRVRWQVIJMHg3NAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9TRVRWQVIJMHg3NQorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9FUlIJMHg3OAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EQkcJMHg3OQorCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDVExfVElOSVQJMHgwMDAwCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDVExfVEVOCQkweDAwMDEKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfVENUTF9URElTCTB4MDAwMgorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UQ1RMX1RDTFIJMHgwMDAzCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDVExfVENMUl9GT1JDRQkweDAwMDQKKworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9SVU5MRVZFTF9VU0VSCQkweDAxCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1JVTkxFVkVMX1NVUEVSCQkweDBlCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1JVTkxFVkVMX1JFQ09WRVJZCTB4MTAKKworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9QTV9ESVNBQkxFCTB4MDAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfUE1fRU5BQkxFCTB4MDEKKworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9LRlVOQ19GQkNUTAkweDAwCisKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfRkJDVExfRU5BQkxFCTB4MDAwMgorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9GQkNUTF9ESVNBQkxFCTB4MDAwMworCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RERUxfU0FGRQkweDAwMDAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfVERFTF9LSUxMCTB4MDAwMQorCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0RTUENGR19SRVEJMHgwMAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EU1BDRkdfU1lTQURSSAkweDI4CisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0RTUENGR19TWVNBRFJMCTB4MjkKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfRFNQQ0ZHX1BST1RSRVYJMHg3MAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EU1BDRkdfQUJPUlQJMHg3OAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EU1BDRkdfTEFTVAkweDgwCisKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfUkVHUldfTUVNUgkweDAwCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1JFR1JXX01FTVcJMHgwMQorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9SRUdSV19JT1IJMHgwMgorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9SRUdSV19JT1cJMHgwMworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9SRUdSV19EQVRBCTB4MDQKKworI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9WQVJJRF9JQ1JNQVNLCTB4MDAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfVkFSSURfTE9BRElORk8JMHgwMQorCisjZGVmaW5lIE9NQVBfRFNQX1RUWVBfQVJDVgkweDAwMDEKKyNkZWZpbmUgT01BUF9EU1BfVFRZUF9BU05ECTB4MDAwMgorI2RlZmluZSBPTUFQX0RTUF9UVFlQX0JLTUQJMHgwMDA0CisjZGVmaW5lIE9NQVBfRFNQX1RUWVBfQktETQkweDAwMDgKKyNkZWZpbmUgT01BUF9EU1BfVFRZUF9QVk1ECTB4MDAxMAorI2RlZmluZSBPTUFQX0RTUF9UVFlQX1BWRE0JMHgwMDIwCisKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0JBRFRJRAkweDEwCisjZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURUQ04JMHgxMQorI2RlZmluZSBPTUFQX0RTUF9FSURfQkFEQklECTB4MjAKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0JBRENOVAkweDIxCisjZGVmaW5lIE9NQVBfRFNQX0VJRF9OT1RMT0NLRUQJMHgyMgorI2RlZmluZSBPTUFQX0RTUF9FSURfU1RWQlVGCTB4MjMKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0JBREFEUgkweDI0CisjZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURUQ1RMCTB4MzAKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0JBRFBBUkFNCTB4NTAKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0ZBVEFMCTB4NTgKKyNkZWZpbmUgT01BUF9EU1BfRUlEX05PTUVNCTB4YzAKKyNkZWZpbmUgT01BUF9EU1BfRUlEX05PUkVTCTB4YzEKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0lQQkZVTEwJMHhjMgorI2RlZmluZSBPTUFQX0RTUF9FSURfV0RUCTB4ZDAKKyNkZWZpbmUgT01BUF9EU1BfRUlEX1RBU0tOT1RSRFkJMHhlMAorI2RlZmluZSBPTUFQX0RTUF9FSURfVEFTS0JTWQkweGUxCisjZGVmaW5lIE9NQVBfRFNQX0VJRF9UQVNLRVJSCTB4ZWYKKyNkZWZpbmUgT01BUF9EU1BfRUlEX0JBRENGR1RZUAkweGYwCisjZGVmaW5lIE9NQVBfRFNQX0VJRF9ERUJVRwkweGY4CisjZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURTRVEJMHhmZQorI2RlZmluZSBPTUFQX0RTUF9FSURfQkFEQ01ECTB4ZmYKKworI2RlZmluZSBPTUFQX0RTUF9UTk1fTEVOCTE2CisKKyNkZWZpbmUgT01BUF9EU1BfVElEX0ZSRUUJMHhmZgorI2RlZmluZSBPTUFQX0RTUF9USURfQU5PTgkweGZlCisKKyNkZWZpbmUgT01BUF9EU1BfQklEX05VTEwJMHhmZmZmCisjZGVmaW5lIE9NQVBfRFNQX0JJRF9QVlQJMHhmZmZlCisKKyNlbmRpZiAvKiBBU01fQVJDSF9EU1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmNjZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwX2NvbW1vbi5oCisgKgorICogSGVhZGVyIGZvciBPTUFQIERTUCBzdWJzeXN0ZW0gY29udHJvbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb3NoaWhpcm8gS29iYXlhc2hpIDx0b3NoaWhpcm8ua29iYXlhc2hpQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogMjAwNS8wNi8wMzogIERTUCBHYXRld2F5IHZlcnNpb24gMy4zCisgKi8KKworI2lmbmRlZiBBU01fQVJDSF9EU1BfQ09NTU9OX0gKKyNkZWZpbmUgQVNNX0FSQ0hfRFNQX0NPTU1PTl9ICisKK3ZvaWQgb21hcF9kc3BfcG1fc3VzcGVuZCh2b2lkKTsKK3ZvaWQgb21hcF9kc3BfcG1fcmVzdW1lKHZvaWQpOwordm9pZCBvbWFwX2RzcF9yZXF1ZXN0X21wdWkodm9pZCk7Cit2b2lkIG9tYXBfZHNwX3JlbGVhc2VfbXB1aSh2b2lkKTsKK2ludCBvbWFwX2RzcF9yZXF1ZXN0X21lbSh2b2lkKTsKK2ludCBvbWFwX2RzcF9yZWxlYXNlX21lbSh2b2lkKTsKKworI2VuZGlmIC8qIEFTTV9BUkNIX0RTUF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCmluZGV4IDU3YjEyNjguLjBkMjliOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKQEAgLTgsNiArOCw4IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCisKICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCkBAIC0zMCwzICszMiwyOSBAQAogMTUxMDoKIAkJLmVuZG0KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKworI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAyNHh4Lmg+CisKKwkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQlsZHIJXGJhc2UsID1WQV9JQ19CQVNFCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4OThdIC8qIElSUSBwZW5kaW5nIHJlZyAxICovCisJCWNtcAlcaXJxbnIsICMweDAKKwkJYm5lCTIyMjJmCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4YjhdIC8qIElSUSBwZW5kaW5nIHJlZyAyICovCisJCWNtcAlcaXJxbnIsICMweDAKKwkJYm5lCTIyMjJmCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4ZDhdIC8qIElSUSBwZW5kaW5nIHJlZyAzICovCisJCWNtcAlcaXJxbnIsICMweDAKKzIyMjI6CisJCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSVJRX1NJUl9JUlFdCisKKwkJLmVuZG0KKworCQkubWFjcm8JaXJxX3ByaW9fdGFibGUKKwkJLmVuZG0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCmluZGV4IGZhZDJmYzkuLjc0Y2IyYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIE9NQVAgR1BJTyBoYW5kbGluZyBkZWZpbmVzIGFuZCBmdW5jdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKQEAgLTMwLDcgKzMwLDIzIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jZGVmaW5lIE9NQVBfTVBVSU9fQkFTRQkJCTB4ZmZmYjUwMDAKKyNkZWZpbmUgT01BUF9NUFVJT19CQVNFCQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYjUwMDAKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKKyNkZWZpbmUgT01BUF9NUFVJT19JTlBVVF9MQVRDSAkJMHgwMAorI2RlZmluZSBPTUFQX01QVUlPX09VVFBVVAkJMHgwMgorI2RlZmluZSBPTUFQX01QVUlPX0lPX0NOVEwJCTB4MDQKKyNkZWZpbmUgT01BUF9NUFVJT19LQlJfTEFUQ0gJCTB4MDgKKyNkZWZpbmUgT01BUF9NUFVJT19LQkMJCQkweDBhCisjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19FVkVOVF9NT0RFCTB4MGMKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX0lOVF9FREdFCTB4MGUKKyNkZWZpbmUgT01BUF9NUFVJT19LQkRfSU5UCQkweDEwCisjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19JTlQJCTB4MTIKKyNkZWZpbmUgT01BUF9NUFVJT19LQkRfTUFTS0lUCQkweDE0CisjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19NQVNLSVQJCTB4MTYKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX0RFQk9VTkNJTkcJMHgxOAorI2RlZmluZSBPTUFQX01QVUlPX0xBVENICQkweDFhCisjZWxzZQogI2RlZmluZSBPTUFQX01QVUlPX0lOUFVUX0xBVENICQkweDAwCiAjZGVmaW5lIE9NQVBfTVBVSU9fT1VUUFVUCQkweDA0CiAjZGVmaW5lIE9NQVBfTVBVSU9fSU9fQ05UTAkJMHgwOApAQCAtNDQsNiArNjAsNyBAQAogI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fTUFTS0lUCQkweDJjCiAjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19ERUJPVU5DSU5HCTB4MzAKICNkZWZpbmUgT01BUF9NUFVJT19MQVRDSAkJMHgzNAorI2VuZGlmCiAKICNkZWZpbmUgT01BUF9NUFVJTyhucikJCShPTUFQX01BWF9HUElPX0xJTkVTICsgKG5yKSkKICNkZWZpbmUgT01BUF9HUElPX0lTX01QVUlPKG5yKQkoKG5yKSA+PSBPTUFQX01BWF9HUElPX0xJTkVTKQpAQCAtNTIsMTggKzY5LDExIEBACiAJCQkJIElIX01QVUlPX0JBU0UgKyAoKG5yKSAmIDB4MGYpIDogXAogCQkJCSBJSF9HUElPX0JBU0UgKyAoKG5yKSAmIDB4M2YpKQogCi0vKiBGb3IgRURHRUNUUkwgKi8KLSNkZWZpbmUgT01BUF9HUElPX05PX0VER0UJICAweDAwCi0jZGVmaW5lIE9NQVBfR1BJT19GQUxMSU5HX0VER0UJICAweDAxCi0jZGVmaW5lIE9NQVBfR1BJT19SSVNJTkdfRURHRQkgIDB4MDIKLSNkZWZpbmUgT01BUF9HUElPX0JPVEhfRURHRVMJICAweDAzCi0KIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CS8qIENhbGwgZnJvbSBib2FyZCBpbml0IG9ubHkgKi8KIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pOwogZXh0ZXJuIHZvaWQgb21hcF9mcmVlX2dwaW8oaW50IGdwaW8pOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oaW50IGdwaW8sIGludCBpc19pbnB1dCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RhdGFvdXQoaW50IGdwaW8sIGludCBlbmFibGUpOwogZXh0ZXJuIGludCBvbWFwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2VkZ2VfY3RybChpbnQgZ3BpbywgaW50IGVkZ2UpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAppbmRleCA0ODI1OGM3Li42MDIwMWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NlcmlhbC5oPgogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OSwxMSArOTAsMTIgQEAKIC8qIERQTEwgY29udHJvbCByZWdpc3RlcnMgKi8KICNkZWZpbmUgRFBMTF9DVEwJCSgweGZmZmVjZjAwKQogCi0vKiBEU1AgY2xvY2sgY29udHJvbCAqLworLyogRFNQIGNsb2NrIGNvbnRyb2wuIE11c3QgdXNlIF9fcmF3X3JlYWR3KCkgYW5kIF9fcmF3X3dyaXRldygpIHdpdGggdGhlc2UgKi8KICNkZWZpbmUgRFNQX0NPTkZJR19SRUdfQkFTRSAgICAgKDB4ZTEwMDgwMDApCiAjZGVmaW5lIERTUF9DS0NUTAkJKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDApCiAjZGVmaW5lIERTUF9JRExFQ1QxCQkoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4NCkKICNkZWZpbmUgRFNQX0lETEVDVDIJCShEU1BfQ09ORklHX1JFR19CQVNFICsgMHg4KQorI2RlZmluZSBEU1BfUlNUQ1QyCQkoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4MTQpCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0Miw2ICsxNDQsMTMgQEAKICAqIEludGVycnVwdHMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworLyoKKyAqIFhYWDogVGhlc2UgcHJvYmFibHkgd2FudCB0byBiZSBtb3ZlZCB0byBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvaXJxLmMKKyAqIG9yIHNvbWV0aGluZyBzaW1pbGFyLi4gLS0gUEZNLgorICovCisKICNkZWZpbmUgT01BUF9JSDFfQkFTRQkJMHhmZmZlY2IwMAogI2RlZmluZSBPTUFQX0lIMl9CQVNFCQkweGZmZmUwMDAwCiAKQEAgLTE3MCw2ICsxNzksOCBAQAogI2RlZmluZSBJUlFfSUxSMF9SRUdfT0ZGU0VUCTB4MWMKICNkZWZpbmUgSVJRX0dNUl9SRUdfT0ZGU0VUCTB4YTAKIAorI2VuZGlmCisKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTeXN0ZW0gY29udHJvbCByZWdpc3RlcnMKQEAgLTI2MCwzMiArMjcxLDE3IEBACiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNlcmlhbCBwb3J0cwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgT01BUF9VQVJUMV9CQVNFCQkodW5zaWduZWQgY2hhciAqKTB4ZmZmYjAwMDAKLSNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkodW5zaWduZWQgY2hhciAqKTB4ZmZmYjA4MDAKLSNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkodW5zaWduZWQgY2hhciAqKTB4ZmZmYjk4MDAKLSNkZWZpbmUgT01BUF9NQVhfTlJfUE9SVFMJMwotI2RlZmluZSBPTUFQMTUxMF9CQVNFX0JBVUQJKDEyMDAwMDAwLzE2KQotI2RlZmluZSBPTUFQMTZYWF9CQVNFX0JBVUQJKDQ4MDAwMDAwLzE2KQotCi0jZGVmaW5lIGlzX29tYXBfcG9ydChwKQkoe2ludCBfX3JldCA9IDA7CQkJXAotCQkJaWYgKHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpIHx8CVwKLQkJCSAgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSB8fAlcCi0JCQkgICAgcCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSkpCVwKLQkJCQlfX3JldCA9IDE7CQkJXAotCQkJX19yZXQ7CQkJCQlcCi0JCQl9KQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQcm9jZXNzb3Igc3BlY2lmaWMgZGVmaW5lcwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAogI2luY2x1ZGUgIm9tYXA3MzAuaCIKICNpbmNsdWRlICJvbWFwMTUxMC5oIgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNpbmNsdWRlICJvbWFwMjR4eC5oIgorI2VuZGlmCisKICNpbmNsdWRlICJvbWFwMTZ4eC5oIgogCiAvKgpAQCAtMzEyLDcgKzMwOCw2IEBACiAKICNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0g0CiAjaW5jbHVkZSAiYm9hcmQtaDQuaCIKLSNlcnJvciAiU3VwcG9ydCBmb3IgSDQgYm9hcmQgbm90IHlldCBpbXBsZW1lbnRlZC4iCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfT1NLCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKaW5kZXggMWM4YzlmYy4uMTFmYmY2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaApAQCAtNDksMTYgKzQ5LDI0IEBACiAgKiBJL08gbWFwcGluZwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi0jZGVmaW5lIElPX1BIWVMJCQkweEZGRkIwMDAwCi0jZGVmaW5lIElPX09GRlNFVAkJMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLwotI2RlZmluZSBJT19WSVJUCQkJKElPX1BIWVMgLSBJT19PRkZTRVQpCi0jZGVmaW5lIElPX1NJWkUJCQkweDQwMDAwCi0jZGVmaW5lIElPX0FERFJFU1MoeCkJCSgoeCkgLSBJT19PRkZTRVQpCiAKLSNkZWZpbmUgUENJT19CQVNFCQkwCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKKyNkZWZpbmUgSU9fUEhZUwkJMHhGRkZCMDAwMAorI2RlZmluZSBJT19PRkZTRVQgICAgICAtMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLworI2RlZmluZSBJT19TSVpFCQkweDQwMDAwCiAKLSNkZWZpbmUgaW9fcDJ2KHgpICAgICAgICAgICAgICAgKCh4KSAtIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fdjJwKHgpICAgICAgICAgICAgICAgKCh4KSArIElPX09GRlNFVCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisjZGVmaW5lIElPX1BIWVMJCTB4NDgwMDAwMDAJLyogTDQgcGVyaXBoZXJhbHM7IG90aGVyIHN0dWZmIGhhcyB0byBiZSBtYXBwZWQgKgorCQkJCQkgKiBtYW51YWxseS4gKi8KKyNkZWZpbmUgSU9fT0ZGU0VUCTB4OTAwMDAwMDAJLyogVmlydHVhbCBJTyA9IDB4ZDgwMDAwMDAgKi8KKyNkZWZpbmUgSU9fU0laRQkJMHgwODAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgSU9fVklSVAkJKElPX1BIWVMgKyBJT19PRkZTRVQpCisjZGVmaW5lIElPX0FERFJFU1MoeCkJKCh4KSArIElPX09GRlNFVCkKKyNkZWZpbmUgUENJT19CQVNFCTAKKyNkZWZpbmUgaW9fcDJ2KHgpCSgoeCkgKyBJT19PRkZTRVQpCisjZGVmaW5lIGlvX3YycCh4KQkoKHgpIC0gSU9fT0ZGU0VUKQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApAQCAtOTYsNiArMTA0LDggQEAKIAkJCQkJLT5vZmZzZXRbKCh2YWRkcikmNDA5NSk+PjJdCiAjZGVmaW5lIF9fUkVHMzIocGFkZHIpCQlfX1JFR1YzMihpb19wMnYocGFkZHIpKQogCitleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CisKICNlbHNlCiAKICNkZWZpbmUgX19SRUc4KHBhZGRyKQkJaW9fcDJ2KHBhZGRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAppbmRleCAwZDA1YTdjLi43NGUxMDhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaApAQCAtMTM1LDcgKzEzNSw2IEBACiAvKgogICogT01BUC0xNTEwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAyCiAgKi8KLSNkZWZpbmUgSU5UXzE1MTBfT1NfMzJrSHpfVElNRVIgKDIyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNTEwX0NPTV9TUElfUk8JKDMxICsgSUgyX0JBU0UpCiAKIC8qCkBAIC0yMzIsNiArMjMxLDExIEBACiAjZGVmaW5lIElOVF83MzBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTkFORAkJKDYzICsgSUgyX0JBU0UpCiAKKyNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMQkyOQorI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksyCTMwCisjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMJMzEKKyNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LNAkzMgorCiAvKiBNYXguIDEyOCBsZXZlbCAyIElSUXMgKE9NQVAxNjEwKSwgMTkyIEdQSU9zIChPTUFQNzMwKSBhbmQKICAqIDE2IE1QVUlPIGxpbmVzICovCiAjZGVmaW5lIE9NQVBfTUFYX0dQSU9fTElORVMJMTkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaAppbmRleCBmNmI1N2RkLi44NGY4MWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKQEAgLTM2LDEyICszNiwxMSBAQAogLyoKICAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgogICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKICNkZWZpbmUgUEhZU19PRkZTRVQJCSgweDEwMDAwMDAwVUwpCi0KLS8qCi0gKiBPTUFQLTE1MTAgTG9jYWwgQnVzIGFkZHJlc3Mgb2Zmc2V0Ci0gKi8KLSNkZWZpbmUgT01BUDE1MTBfTEJfT0ZGU0VUCSgweDMwMDAwMDAwVUwpCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQorI2RlZmluZSBQSFlTX09GRlNFVAkJKDB4ODAwMDAwMDBVTCkKKyNlbmRpZgogCiAvKgogICogQ29udmVyc2lvbiBiZXR3ZWVuIFNEUkFNIGFuZCBmYWtlIFBDSSBidXMsIHVzZWQgYnkgVVNCCkBAIC02NCw2ICs2MywxMSBAQAogICovCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKIAorLyoKKyAqIE9NQVAtMTUxMCBMb2NhbCBCdXMgYWRkcmVzcyBvZmZzZXQKKyAqLworI2RlZmluZSBPTUFQMTUxMF9MQl9PRkZTRVQJKDB4MzAwMDAwMDBVTCkKKwogI2RlZmluZSB2aXJ0X3RvX2xidXMoeCkJCSgoeCkgLSBQQUdFX09GRlNFVCArIE9NQVAxNTEwX0xCX09GRlNFVCkKICNkZWZpbmUgbGJ1c190b192aXJ0KHgpCQkoKHgpIC0gT01BUDE1MTBfTEJfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCiAjZGVmaW5lIGlzX2xidXNfZGV2aWNlKGRldikJKGNwdV9pc19vbWFwMTUxMCgpICYmIGRldiAmJiAoc3RybmNtcChkZXYtPmJ1c19pZCwgIm9oY2kiLCA0KSA9PSAwKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXRkLXhpcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdGQteGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczYTI4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXRkLXhpcC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBNVEQgcHJpbWl0aXZlcyBmb3IgWElQIHN1cHBvcnQuIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbnMuCisgKgorICogRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiBJdCdzIGluY2x1ZGVkIGZyb20gbGludXgvbXRkL3hpcC5oCisgKgorICogQXV0aG9yOiBWbGFkaW1pciBCYXJpbm92IDx2YmFyaW5vdkBydS5tdmlzdGEuY29tPgorICoKKyAqIChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMKKyAqIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvcgorICogaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9PTUFQX01URF9YSVBfSF9fCisjZGVmaW5lIF9fQVJDSF9PTUFQX01URF9YSVBfSF9fCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRQkoMHhmZmZlYzUwMCkKKyNkZWZpbmUgT01BUF9NUFVfVElNRVJfT0ZGU0VUCTB4MTAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgY250bDsJCQkvKiBDTlRMX1RJTUVSLCBSL1cgKi8KKwl1MzIgbG9hZF90aW07CQkJLyogTE9BRF9USU0sICAgVyAqLworCXUzMiByZWFkX3RpbTsJCQkvKiBSRUFEX1RJTSwgICBSICovCit9IHhpcF9vbWFwX21wdV90aW1lcl9yZWdzX3Q7CisKKyNkZWZpbmUgeGlwX29tYXBfbXB1X3RpbWVyX2Jhc2UobikJCQkJCVwKKygodm9sYXRpbGUgeGlwX29tYXBfbXB1X3RpbWVyX3JlZ3NfdCopSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsJXAorCShuKSpPTUFQX01QVV9USU1FUl9PRkZTRVQpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGlwX29tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQoreworCXZvbGF0aWxlIHhpcF9vbWFwX21wdV90aW1lcl9yZWdzX3QqIHRpbWVyID0geGlwX29tYXBfbXB1X3RpbWVyX2Jhc2UobnIpOworCXJldHVybiB0aW1lci0+cmVhZF90aW07Cit9CisKKyNkZWZpbmUgeGlwX2lycXBlbmRpbmcoKQlcCisJKG9tYXBfcmVhZGwoT01BUF9JSDFfSVRSKSAmIH5vbWFwX3JlYWRsKE9NQVBfSUgxX01JUikpCisjZGVmaW5lIHhpcF9jdXJydGltZSgpCQkofnhpcF9vbWFwX21wdV90aW1lcl9yZWFkKDApKQorCisvKgorICogSXQncyBwZXJtaXR0ZWQgdG8gZG8gYXBwcm94bWF0aW9uIGZvciB4aXBfZWxhcHNlZF9zaW5jZSBtYWNybworICogKHNlZSBsaW51eC9tdGQveGlwLmgpCisgKi8KKworI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIKKyNkZWZpbmUgeGlwX2VsYXBzZWRfc2luY2UoeCkJKHNpZ25lZCkoKH54aXBfb21hcF9tcHVfdGltZXJfcmVhZCgwKSAtICh4KSkgLyA3KQorI2Vsc2UKKyNkZWZpbmUgeGlwX2VsYXBzZWRfc2luY2UoeCkJKHNpZ25lZCkoKH54aXBfb21hcF9tcHVfdGltZXJfcmVhZCgwKSAtICh4KSkgLyA2KQorI2VuZGlmCisKKy8qCisgKiB4aXBfY3B1X2lkbGUoKSBpcyB1c2VkIHdoZW4gd2FpdGluZyBmb3IgYSBkZWxheSBlcXVhbCBvciBsYXJnZXIgdGhhbgorICogdGhlIHN5c3RlbSB0aW1lciB0aWNrIHBlcmlvZC4gIFRoaXMgc2hvdWxkIHB1dCB0aGUgQ1BVIGludG8gaWRsZSBtb2RlCisgKiB0byBzYXZlIHBvd2VyIGFuZCB0byBiZSB3b2tlbiB1cCBvbmx5IHdoZW4gc29tZSBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLgorICogQXMgYWJvdmUsIHRoaXMgc2hvdWxkIG5vdCByZWx5IHVwb24gc3RhbmRhcmQga2VybmVsIGNvZGUuCisgKi8KKworI2RlZmluZSB4aXBfY3B1X2lkbGUoKSAgYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOjogInIiICgxKSkKKworI2VuZGlmIC8qIF9fQVJDSF9PTUFQX01URF9YSVBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAppbmRleCA1YmQzZjAwLi4xYjFhZDQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKQEAgLTE4NSw2ICsxODUsNyBAQAogCiAJLyogTVBVSU8gKi8KIAlNUFVJTzIsCisJTjE1XzE2MTBfTVBVSU8yLAogCU1QVUlPNCwKIAlNUFVJTzUsCiAJVDIwXzE2MTBfTVBVSU81LApAQCAtMjEwLDYgKzIxMSw3IEBACiAKIAkvKiBNaXNjIGJhbGxvdXRzICovCiAJQkFMTE9VVF9WOF9BUk1JTzMsCisJTjIwX0hEUSwKIAogCS8qIE9NQVAtMTYxMCBNTUMyICovCiAJVzhfMTYxMF9NTUMyX0RBVDAsCkBAIC0yMzUsNiArMjM3LDcgQEAKIAlQMjBfMTYxMF9HUElPNCwKIAlWOV8xNjEwX0dQSU83LAogCVc4XzE2MTBfR1BJTzksCisJTjIwXzE2MTBfR1BJTzExLAogCU4xOV8xNjEwX0dQSU8xMywKIAlQMTBfMTYxMF9HUElPMjIsCiAJVjVfMTYxMF9HUElPMjQsCkBAIC0yNTAsNyArMjUzLDcgQEAKIAlVMThfMTYxMF9VV0lSRV9TREksCiAJVzIxXzE2MTBfVVdJUkVfU0RPLAogCU4xNF8xNjEwX1VXSVJFX0NTMCwKLQlQMTVfMTYxMF9VV0lSRV9DUzAsCisJUDE1XzE2MTBfVVdJUkVfQ1MzLAogCU4xNV8xNjEwX1VXSVJFX0NTMSwKIAogCS8qIE9NQVAtMTYxMCBGbGFzaCAqLwpAQCAtNDExLDcgKzQxNCw4IEBACiBNVVhfQ0ZHKCJXMTVfMTcxMF9HUElPNDAiLCAgICAgICA5LCAgIDI3LCAgICA3LCAgIDIsICAgNSwgICAxLCAgICAyLCAgICAgMSwgIDEpCiAKIC8qIE1QVUlPICovCi1NVVhfQ0ZHKCJNUFVJTzIiLAkJIDcsICAgMTgsICAgIDAsCSAgMSwgICAxLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTVBVSU8yIiwJCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk4xNV8xNjEwX01QVUlPMiIsCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgIDEsCSAwLCAgMSkKIE1VWF9DRkcoIk1QVUlPNCIsCQkgNywgICAxNSwgICAgMCwJICAxLCAgMTMsICAgMSwJIE5BLAkgMCwgIDEpCiBNVVhfQ0ZHKCJNUFVJTzUiLAkJIDcsICAgMTIsICAgIDAsCSAgMSwgIDEyLCAgIDEsCSBOQSwJIDAsICAxKQogCkBAIC00MzgsNiArNDQyLDcgQEAKIAogLyogTWlzYyBiYWxsb3V0cyAqLwogTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKIAogLyogT01BUC0xNjEwIE1NQzIgKi8KIE1VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQpAQCAtNDYzLDYgKzQ2OCw3IEBACiBNVVhfQ0ZHKCJQMjBfMTYxMF9HUElPNCIsCSA2LCAgIDI3LCAgICAwLAkgIDEsICAgNywgICAwLAkgIDEsCSAxLCAgMSkKIE1VWF9DRkcoIlY5XzE2MTBfR1BJTzciLAkgQiwgICAxMiwgICAgMSwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCiBNVVhfQ0ZHKCJXOF8xNjEwX0dQSU85IiwJIEIsICAgMjEsICAgIDAsCSAgMiwgIDIzLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiTjIwXzE2MTBfR1BJTzExIiwgICAgICAgNiwgICAxOCwgICAgMCwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDEsICAxKQogTVVYX0NGRygiTjE5XzE2MTBfR1BJTzEzIiwJIDYsICAgMTIsICAgIDAsCSAgMSwgICAyLCAgIDAsCSAgMSwJIDEsICAxKQogTVVYX0NGRygiUDEwXzE2MTBfR1BJTzIyIiwJIEMsICAgIDAsICAgIDcsCSAgMiwgIDI2LCAgIDAsCSAgMiwJIDEsICAxKQogTVVYX0NGRygiVjVfMTYxMF9HUElPMjQiLAkgQiwgICAxNSwgICAgNywJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmgKaW5kZXggZjQ5MWE0OC4uZjA4NmEzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTUxMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaApAQCAtMzYsMTAgKzM2LDYgQEAKIAogLyogU3ludGF4OiBYWF9CQVNFID0gVmlydHVhbCBiYXNlIGFkZHJlc3MsIFhYX1NUQVJUID0gUGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCiAKLSNkZWZpbmUgT01BUDE1MTBfU1JBTV9CQVNFCTB4RDAwMDAwMDAKLSNkZWZpbmUgT01BUDE1MTBfU1JBTV9TSVpFCShTWl8xMjhLICsgU1pfNjRLKQotI2RlZmluZSBPTUFQMTUxMF9TUkFNX1NUQVJUCTB4MjAwMDAwMDAKLQogI2RlZmluZSBPTUFQMTUxMF9EU1BfQkFTRQkweEUwMDAwMDAwCiAjZGVmaW5lIE9NQVAxNTEwX0RTUF9TSVpFCTB4MjgwMDAKICNkZWZpbmUgT01BUDE1MTBfRFNQX1NUQVJUCTB4RTAwMDAwMDAKQEAgLTQ4LDE0ICs0NCw1IEBACiAjZGVmaW5lIE9NQVAxNTEwX0RTUFJFR19TSVpFCVNaXzEyOEsKICNkZWZpbmUgT01BUDE1MTBfRFNQUkVHX1NUQVJUCTB4RTEwMDAwMDAKIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE1lbW9yeSB1c2VkIGJ5IHBvd2VyIG1hbmFnZW1lbnQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jZGVmaW5lIE9NQVAxNTEwX1NSQU1fSURMRV9TVVNQRU5ECShPTUFQMTUxMF9TUkFNX0JBU0UgKyBPTUFQMTUxMF9TUkFNX1NJWkUgLSAweDIwMCkKLSNkZWZpbmUgT01BUDE1MTBfU1JBTV9BUElfU1VTUEVORAkoT01BUDE1MTBfU1JBTV9JRExFX1NVU1BFTkQgKyAweDEwMCkKLQogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNTEwX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTZ4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTZ4eC5oCmluZGV4IDM4YTliOTUuLmYwYzdmMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE2eHguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNnh4LmgKQEAgLTM2LDExICszNiw2IEBACiAKIC8qIFN5bnRheDogWFhfQkFTRSA9IFZpcnR1YWwgYmFzZSBhZGRyZXNzLCBYWF9TVEFSVCA9IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLwogCi0jZGVmaW5lIE9NQVAxNlhYX1NSQU1fQkFTRQkweEQwMDAwMDAwCi0jZGVmaW5lIE9NQVAxNjEwX1NSQU1fU0laRQkoU1pfMTZLKQotI2RlZmluZSBPTUFQNTkxMl9TUkFNX1NJWkUJMHgzRTgwMAotI2RlZmluZSBPTUFQMTZYWF9TUkFNX1NUQVJUCTB4MjAwMDAwMDAKLQogI2RlZmluZSBPTUFQMTZYWF9EU1BfQkFTRQkweEUwMDAwMDAwCiAjZGVmaW5lIE9NQVAxNlhYX0RTUF9TSVpFCTB4MjgwMDAKICNkZWZpbmUgT01BUDE2WFhfRFNQX1NUQVJUCTB4RTAwMDAwMDAKQEAgLTUwLDE3ICs0NSw2IEBACiAjZGVmaW5lIE9NQVAxNlhYX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCiAKIC8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBNZW1vcnkgdXNlZCBieSBwb3dlciBtYW5hZ2VtZW50Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2RlZmluZSBPTUFQMTYxMF9TUkFNX0lETEVfU1VTUEVORAkoT01BUDE2WFhfU1JBTV9CQVNFICsgT01BUDE2MTBfU1JBTV9TSVpFIC0gMHgyMDApCi0jZGVmaW5lIE9NQVAxNjEwX1NSQU1fQVBJX1NVU1BFTkQJKE9NQVAxNjEwX1NSQU1fSURMRV9TVVNQRU5EICsgMHgxMDApCi0jZGVmaW5lIE9NQVA1OTEyX1NSQU1fSURMRV9TVVNQRU5ECShPTUFQMTZYWF9TUkFNX0JBU0UgKyBPTUFQNTkxMl9TUkFNX1NJWkUgLSAweDIwMCkKLSNkZWZpbmUgT01BUDU5MTJfU1JBTV9BUElfU1VTUEVORAkoT01BUDU5MTJfU1JBTV9JRExFX1NVU1BFTkQgKyAweDEwMCkKLQotLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSW50ZXJydXB0cwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxMDU0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDI0WFhfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAyNFhYX0gKKworI2RlZmluZSBPTUFQMjRYWF9MNF9JT19CQVNFCTB4NDgwMDAwMDAKKworLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgT01BUDI0WFhfSUNfQkFTRQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4ZmUwMDApCisjZGVmaW5lIFZBX0lDX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSkKKworI2RlZmluZSBPTUFQMjRYWF9JVkFfSU5UQ19CQVNFCTB4NDAwMDAwMDAKKworI2RlZmluZSBJUlFfU0lSX0lSUQkJMHgwMDQwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVAyNFhYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwNzMwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXA3MzAuaAppbmRleCA1OTlhYjAwLi43NTViNjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXA3MzAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXA3MzAuaApAQCAtMzYsMTAgKzM2LDYgQEAKIAogLyogU3ludGF4OiBYWF9CQVNFID0gVmlydHVhbCBiYXNlIGFkZHJlc3MsIFhYX1NUQVJUID0gUGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCiAKLSNkZWZpbmUgT01BUDczMF9TUkFNX0JBU0UJMHhEMDAwMDAwMAotI2RlZmluZSBPTUFQNzMwX1NSQU1fU0laRQkoU1pfMTI4SyArIFNaXzY0SyArIFNaXzhLKQotI2RlZmluZSBPTUFQNzMwX1NSQU1fU1RBUlQJMHgyMDAwMDAwMAotCiAjZGVmaW5lIE9NQVA3MzBfRFNQX0JBU0UJMHhFMDAwMDAwMAogI2RlZmluZSBPTUFQNzMwX0RTUF9TSVpFCTB4NTAwMDAKICNkZWZpbmUgT01BUDczMF9EU1BfU1RBUlQJMHhFMDAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCmluZGV4IGYyMDlmYzAuLmZiZDc0MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKQEAgLTYxLDcgKzYxLDEwIEBACiAjZGVmaW5lIFBFUl9FTgkJCQkweDEKIAogI2RlZmluZSBDUFVfU1VTUEVORF9TSVpFCQkyMDAKLSNkZWZpbmUgVUxQRF9MT1dfUE9XRVJfRU4JCTB4MDAwMQorI2RlZmluZSBVTFBEX0xPV19QV1JfRU4JCQkweDAwMDEKKyNkZWZpbmUgVUxQRF9ERUVQX1NMRUVQX1RSQU5TSVRJT05fRU4JMHgwMDEwCisjZGVmaW5lIFVMUERfU0VUVVBfQU5BTE9HX0NFTExfM19WQUwJMAorI2RlZmluZSBVTFBEX1BPV0VSX0NUUkxfUkVHX1ZBTAkJMHgwMjE5CiAKICNkZWZpbmUgRFNQX0lETEVfREVMQVkJCQkxMAogI2RlZmluZSBEU1BfSURMRQkJCTB4MDA0MApAQCAtODYsNDYgKzg5LDM1IEBACiAjZGVmaW5lIE9NQVAxNTEwX0JJR19TTEVFUF9SRVFVRVNUCTB4MGNjNQogI2RlZmluZSBPTUFQMTUxMF9JRExFX0xPT1BfUkVRVUVTVAkweDBjMDAKICNkZWZpbmUgT01BUDE1MTBfSURMRV9DTE9DS19ET01BSU5TCTB4MgotI2RlZmluZSBPTUFQMTUxMF9VTFBEX0xPV19QT1dFUl9SRVEJMHgwMDAxCiAKLSNkZWZpbmUgT01BUDE2MTBfREVFUF9TTEVFUF9SRVFVRVNUCTB4MTdjNwotI2RlZmluZSBPTUFQMTYxMF9CSUdfU0xFRVBfUkVRVUVTVAlUQkQKKy8qIEJvdGggYmlnIHNsZWVwIGFuZCBkZWVwIHNsZWVwIHVzZSBzYW1lIHZhbHVlcy4gRGlmZmVyZW5jZSBpcyBpbiBVTFBELiAqLworI2RlZmluZSBPTUFQMTYxMF9JRExFQ1QxX1NMRUVQX1ZBTAkweDEzYzcKKyNkZWZpbmUgT01BUDE2MTBfSURMRUNUMl9TTEVFUF9WQUwJMHgwOWM3CisjZGVmaW5lIE9NQVAxNjEwX0lETEVDVDNfVkFMCQkweDNmCisjZGVmaW5lIE9NQVAxNjEwX0lETEVDVDNfU0xFRVBfT1JNQVNLCTB4MmMKKyNkZWZpbmUgT01BUDE2MTBfSURMRUNUMwkJMHhmZmZlY2UyNAogI2RlZmluZSBPTUFQMTYxMF9JRExFX0xPT1BfUkVRVUVTVAkweDA0MDAKLSNkZWZpbmUgT01BUDE2MTBfSURMRV9DTE9DS19ET01BSU5TCTB4MDljNwotI2RlZmluZSBPTUFQMTYxMF9VTFBEX0xPV19QT1dFUl9SRVEJMHgzCi0KLSNpZm5kZWYgT01BUDE1MTBfU1JBTV9JRExFX1NVU1BFTkQKLSNkZWZpbmUgT01BUDE1MTBfU1JBTV9JRExFX1NVU1BFTkQgMAotI2VuZGlmCi0jaWZuZGVmIE9NQVAxNjEwX1NSQU1fSURMRV9TVVNQRU5ECi0jZGVmaW5lIE9NQVAxNjEwX1NSQU1fSURMRV9TVVNQRU5EIDAKLSNlbmRpZgotI2lmbmRlZiBPTUFQNTkxMl9TUkFNX0lETEVfU1VTUEVORAotI2RlZmluZSBPTUFQNTkxMl9TUkFNX0lETEVfU1VTUEVORCAwCi0jZW5kaWYKLQotI2lmbmRlZiBPTUFQMTUxMF9TUkFNX0FQSV9TVVNQRU5ECi0jZGVmaW5lIE9NQVAxNTEwX1NSQU1fQVBJX1NVU1BFTkQgMAotI2VuZGlmCi0jaWZuZGVmIE9NQVAxNjEwX1NSQU1fQVBJX1NVU1BFTkQKLSNkZWZpbmUgT01BUDE2MTBfU1JBTV9BUElfU1VTUEVORCAwCi0jZW5kaWYKLSNpZm5kZWYgT01BUDU5MTJfU1JBTV9BUElfU1VTUEVORAotI2RlZmluZSBPTUFQNTkxMl9TUkFNX0FQSV9TVVNQRU5EIDAKLSNlbmRpZgogCiAjaWYgICAgICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKSAmJiBcCi0JIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpICYmIFwKKwkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKICNlcnJvciAiUG93ZXIgbWFuYWdlbWVudCBmb3IgdGhpcyBwcm9jZXNzb3Igbm90IGltcGxlbWVudGVkIHlldCIKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIGV4dGVybiB2b2lkIG9tYXBfcG1faWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfcG1fc3VzcGVuZCh2b2lkKTsKLWV4dGVybiBpbnQgb21hcDE1MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiBpbnQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiBpbnQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7Ci1leHRlcm4gaW50IG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDE1MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXAxNjEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOworCisjaWZkZWYgQ09ORklHX09NQVBfU0VSSUFMX1dBS0UKK2V4dGVybiB2b2lkIG9tYXBfc2VyaWFsX3dha2VfdHJpZ2dlcihpbnQgZW5hYmxlKTsKKyNlbHNlCisjZGVmaW5lIG9tYXBfc2VyaWFsX3dha2VfdHJpZ2dlcih4KQl7fQorI2VuZGlmCS8qIENPTkZJR19PTUFQX1NFUklBTF9XQUtFICovCisKIGV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfY3B1X3N1c3BlbmRfc3o7CiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTYxMF9jcHVfc3VzcGVuZF9zejsKQEAgLTE2MSw2ICsxNTMsNyBAQAogCUFSTV9TTEVFUF9TQVZFX0FSTV9DS0NUTCwKIAlBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMSwKIAlBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMiwKKwlBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMywKIAlBUk1fU0xFRVBfU0FWRV9BUk1fRVdVUENULAogCUFSTV9TTEVFUF9TQVZFX0FSTV9SU1RDVDEsCiAJQVJNX1NMRUVQX1NBVkVfQVJNX1JTVENUMiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTUyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NlcmlhbC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zZXJpYWwuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU0VSSUFMX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TRVJJQUxfSAorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKKy8qIE9NQVAxIHNlcmlhbCBwb3J0cyAqLworI2RlZmluZSBPTUFQX1VBUlQxX0JBU0UJCTB4ZmZmYjAwMDAKKyNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkweGZmZmIwODAwCisjZGVmaW5lIE9NQVBfVUFSVDNfQkFTRQkJMHhmZmZiOTgwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKy8qIE9NQVAyIHNlcmlhbCBwb3J0cyAqLworI2RlZmluZSBPTUFQX1VBUlQxX0JBU0UJCTB4NDgwNmEwMDAKKyNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkweDQ4MDZjMDAwCisjZGVmaW5lIE9NQVBfVUFSVDNfQkFTRQkJMHg0ODA2ZTAwMAorI2VuZGlmCisKKyNkZWZpbmUgT01BUF9NQVhfTlJfUE9SVFMJMworI2RlZmluZSBPTUFQMTUxMF9CQVNFX0JBVUQJKDEyMDAwMDAwLzE2KQorI2RlZmluZSBPTUFQMTZYWF9CQVNFX0JBVUQJKDQ4MDAwMDAwLzE2KQorCisjZGVmaW5lIGlzX29tYXBfcG9ydChwKQkoe2ludCBfX3JldCA9IDA7CQkJXAorCQkJaWYgKHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpIHx8CVwKKwkJCSAgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSB8fAlcCisJCQkgICAgcCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSkpCVwKKwkJCQlfX3JldCA9IDE7CQkJXAorCQkJX19yZXQ7CQkJCQlcCisJCQl9KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKaW5kZXggM2U2NDBhYi4uMzU0NWM4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NlcmlhbC5oPgogCiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKIApAQCAtMzQsOCArMzQsOSBAQAogcHV0c3RyKGNvbnN0IGNoYXIgKnMpCiB7CiAJdm9sYXRpbGUgdTggKiB1YXJ0ID0gMDsKLQlpbnQgc2hpZnQ7CisJaW50IHNoaWZ0ID0gMjsKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAKICNpZmRlZglDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUM19CQVNFKTsKICNlbGlmCUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyCkBAIC00NCw2ICs0NSw3IEBACiAJdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQxX0JBU0UpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCS8qIERldGVybWluZSB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KIAlkbyB7CiAJCS8qIE1NVSBpcyBub3Qgb24sIHNvIGNwdV9pc19vbWFwWFhYWCgpIHdvbid0IHdvcmsgaGVyZSAqLwpAQCAtNTEsMTQgKzUzLDE0IEBACiAKIAkJaWYgKG9tYXBfaWQgPT0gT01BUF9JRF83MzApCiAJCQlzaGlmdCA9IDA7Ci0JCWVsc2UKLQkJCXNoaWZ0ID0gMjsKIAogCQlpZiAoY2hlY2tfcG9ydCh1YXJ0LCBzaGlmdCkpCiAJCQlicmVhazsKIAkJLyogU2lsZW50IGJvb3QgaWYgbm8gc2VyaWFsIHBvcnRzIGFyZSBlbmFibGVkLiAqLwogCQlyZXR1cm47CiAJfSB3aGlsZSAoMCk7CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDEgKi8KKyNlbmRpZgogCiAJLyoKIAkgKiBOb3csIHhtaXQgZWFjaCBjaGFyYWN0ZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc1YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtY3BsZC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaAorICoKKyAqIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQU5VQklTIC0gQ1BMRCBjb250cm9sIGNvbnN0YW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICoKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9BTlVCSVNDUExEX0gKKyNkZWZpbmUgX19BU01fQVJDSF9BTlVCSVNDUExEX0gKKworLyogQ1RSTDIgLSBOQU5EIFdQIGNvbnRyb2wsIElERSBSZXNldCBhc3NlcnQvY2hlY2sgKi8KKworI2RlZmluZSBBTlVCSVNfQ1RSTDFfTkFORFNFTAkJKDB4MykKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQU5VQklTQ1BMRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjE1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaApAQCAtMCwwICsxLDIzIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaAorICoKKyAqIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogIEFOVUJJUyAtIElSUSBOdW1iZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQU5VQklTSVJRX0gKKyNkZWZpbmUgX19BU01fQVJDSF9BTlVCSVNJUlFfSAorCisjZGVmaW5lIElSUV9JREUwICAgICAgIElSUV9FSU5UMgorI2RlZmluZSBJUlFfSURFMSAgICAgICBJUlFfRUlOVDMKKyNkZWZpbmUgSVJRX0FTSVggICAgICAgSVJRX0VJTlQxCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0FOVUJJU0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzQxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaApAQCAtMCwwICsxLDQ2IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaAorICoKKyAqIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQU5VQklTIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorKi8KKworLyogbmVlZHMgYXJjaC9tYXAuaCBpbmNsdWRpbmcgd2l0aCB0aGlzICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9BTlVCSVNNQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX0FOVUJJU01BUF9ICisKKy8qIHN0YXJ0IHBlcmlwaGVyYWxzIG9mZiBhZnRlciB0aGUgUzNDMjQxMCAqLworCisjZGVmaW5lIEFOVUJJU19JT0FERFIoeCkJKFMzQzI0MTBfQUREUigoeCkgKyAweDAyMDAwMDAwKSkKKworI2RlZmluZSBBTlVCSVNfUEFfQ1BMRAkJKFMzQzI0MTBfQ1MxIHwgKDE8PDI2KSkKKworLyogd2UgcHV0IHRoZSBDUExEIHJlZ2lzdGVycyBuZXh0LCB0byBnZXQgdGhlbSBvdXQgb2YgdGhlIHdheSAqLworCisjZGVmaW5lIEFOVUJJU19WQV9DVFJMMQkgICAgQU5VQklTX0lPQUREUigweDAwMDAwMDAwKQkgLyogMHgwMTMwMDAwMCAqLworI2RlZmluZSBBTlVCSVNfUEFfQ1RSTDEJICAgIChBTlVCSVNfUEFfQ1BMRCkKKworI2RlZmluZSBBTlVCSVNfVkFfQ1RSTDIJICAgIEFOVUJJU19JT0FERFIoMHgwMDEwMDAwMCkJIC8qIDB4MDE0MDAwMDAgKi8KKyNkZWZpbmUgQU5VQklTX1BBX0NUUkwyCSAgICAoQU5VQklTX1BBX0NQTEQpCisKKyNkZWZpbmUgQU5VQklTX1ZBX0NUUkwzCSAgICBBTlVCSVNfSU9BRERSKDB4MDAyMDAwMDApCSAvKiAweDAxNTAwMDAwICovCisjZGVmaW5lIEFOVUJJU19QQV9DVFJMMwkgICAgKEFOVUJJU19QQV9DUExEKQorCisjZGVmaW5lIEFOVUJJU19WQV9DVFJMNAkgICAgQU5VQklTX0lPQUREUigweDAwMzAwMDAwKQkgLyogMHgwMTYwMDAwMCAqLworI2RlZmluZSBBTlVCSVNfUEFfQ1RSTDQJICAgIChBTlVCSVNfUEFfQ1BMRCkKKworI2RlZmluZSBBTlVCSVNfSURFUFJJCSAgICBBTlVCSVNfSU9BRERSKDB4MDEwMDAwMDApCisjZGVmaW5lIEFOVUJJU19JREVQUklBVVggICAgQU5VQklTX0lPQUREUigweDAxMTAwMDAwKQorI2RlZmluZSBBTlVCSVNfSURFU0VDCSAgICBBTlVCSVNfSU9BRERSKDB4MDEyMDAwMDApCisjZGVmaW5lIEFOVUJJU19JREVTRUNBVVggICAgQU5VQklTX0lPQUREUigweDAxMzAwMDAwKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9BTlVCSVNNQVBfSCAqLwo=