ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKaW5kZXggOTBkYzJkZS4uMTU4ZmZlOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgPHRpdGxlPlR3byBNYWluIFR5cGVzIG9mIEtlcm5lbCBMb2NrczogU3BpbmxvY2tzIGFuZCBTZW1hcGhvcmVzPC90aXRsZT4KIAogICAgPHBhcmE+Ci0gICAgIFRoZXJlIGFyZSB0d28gbWFpbiB0eXBlcyBvZiBrZXJuZWwgbG9ja3MuICBUaGUgZnVuZGFtZW50YWwgdHlwZQorICAgICBUaGVyZSBhcmUgdGhyZWUgbWFpbiB0eXBlcyBvZiBrZXJuZWwgbG9ja3MuICBUaGUgZnVuZGFtZW50YWwgdHlwZQogICAgICBpcyB0aGUgc3BpbmxvY2sgCiAgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3NwaW5sb2NrLmg8L2ZpbGVuYW1lPiksCiAgICAgIHdoaWNoIGlzIGEgdmVyeSBzaW1wbGUgc2luZ2xlLWhvbGRlciBsb2NrOiBpZiB5b3UgY2FuJ3QgZ2V0IHRoZSAKQEAgLTIzMCwxNiArMjMwLDIyIEBACiAgICAgIHZlcnkgc21hbGwgYW5kIGZhc3QsIGFuZCBjYW4gYmUgdXNlZCBhbnl3aGVyZS4KICAgIDwvcGFyYT4KICAgIDxwYXJhPgotICAgICBUaGUgc2Vjb25kIHR5cGUgaXMgYSBzZW1hcGhvcmUKKyAgICAgVGhlIHNlY29uZCB0eXBlIGlzIGEgbXV0ZXgKKyAgICAgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9tdXRleC5oPC9maWxlbmFtZT4pOiBpdAorICAgICBpcyBsaWtlIGEgc3BpbmxvY2ssIGJ1dCB5b3UgbWF5IGJsb2NrIGhvbGRpbmcgYSBtdXRleC4KKyAgICAgSWYgeW91IGNhbid0IGxvY2sgYSBtdXRleCwgeW91ciB0YXNrIHdpbGwgc3VzcGVuZCBpdHNlbGYsIGFuZCBiZSB3b2tlbgorICAgICB1cCB3aGVuIHRoZSBtdXRleCBpcyByZWxlYXNlZC4gIFRoaXMgbWVhbnMgdGhlIENQVSBjYW4gZG8gc29tZXRoaW5nCisgICAgIGVsc2Ugd2hpbGUgeW91IGFyZSB3YWl0aW5nLiAgVGhlcmUgYXJlIG1hbnkgY2FzZXMgd2hlbiB5b3Ugc2ltcGx5CisgICAgIGNhbid0IHNsZWVwIChzZWUgPHhyZWYgbGlua2VuZD0ic2xlZXBpbmctdGhpbmdzIi8+KSwgYW5kIHNvIGhhdmUgdG8KKyAgICAgdXNlIGEgc3BpbmxvY2sgaW5zdGVhZC4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgICBUaGUgdGhpcmQgdHlwZSBpcyBhIHNlbWFwaG9yZQogICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaDwvZmlsZW5hbWU+KTogaXQKICAgICAgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBob2xkZXIgYXQgYW55IHRpbWUgKHRoZSBudW1iZXIgZGVjaWRlZCBhdAogICAgICBpbml0aWFsaXphdGlvbiB0aW1lKSwgYWx0aG91Z2ggaXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGFzIGEKLSAgICAgc2luZ2xlLWhvbGRlciBsb2NrIChhIG11dGV4KS4gIElmIHlvdSBjYW4ndCBnZXQgYSBzZW1hcGhvcmUsCi0gICAgIHlvdXIgdGFzayB3aWxsIHB1dCBpdHNlbGYgb24gdGhlIHF1ZXVlLCBhbmQgYmUgd29rZW4gdXAgd2hlbiB0aGUKLSAgICAgc2VtYXBob3JlIGlzIHJlbGVhc2VkLiAgVGhpcyBtZWFucyB0aGUgQ1BVIHdpbGwgZG8gc29tZXRoaW5nCi0gICAgIGVsc2Ugd2hpbGUgeW91IGFyZSB3YWl0aW5nLCBidXQgdGhlcmUgYXJlIG1hbnkgY2FzZXMgd2hlbiB5b3UKLSAgICAgc2ltcGx5IGNhbid0IHNsZWVwIChzZWUgPHhyZWYgbGlua2VuZD0ic2xlZXBpbmctdGhpbmdzIi8+KSwgYW5kIHNvCi0gICAgIGhhdmUgdG8gdXNlIGEgc3BpbmxvY2sgaW5zdGVhZC4KKyAgICAgc2luZ2xlLWhvbGRlciBsb2NrIChhIG11dGV4KS4gIElmIHlvdSBjYW4ndCBnZXQgYSBzZW1hcGhvcmUsIHlvdXIKKyAgICAgdGFzayB3aWxsIGJlIHN1c3BlbmRlZCBhbmQgbGF0ZXIgb24gd29rZW4gdXAgLSBqdXN0IGxpa2UgZm9yIG11dGV4ZXMuCiAgICA8L3BhcmE+CiAgICA8cGFyYT4KICAgICAgTmVpdGhlciB0eXBlIG9mIGxvY2sgaXMgcmVjdXJzaXZlOiBzZWUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2F2ZXJtZWRpYS50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9hdmVybWVkaWEudHh0CmluZGV4IDJkYzI2MGIuLjA2ODA3MGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2F2ZXJtZWRpYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvYXZlcm1lZGlhLnR4dApAQCAtMTUwLDcgKzE1MCw4IEBACiAKICAgIFRoZSBmcm9udGVuZCBtb2R1bGUgc3A4ODd4Lm8sIHJlcXVpcmVzIGFuIGV4dGVybmFsICAgZmlybXdhcmUuCiAgICBQbGVhc2UgdXNlICB0aGUgIGNvbW1hbmQgImdldF9kdmJfZmlybXdhcmUgc3A4ODd4IiB0byBkb3dubG9hZAotICAgaXQuIFRoZW4gY29weSBpdCB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlLgorICAgaXQuIFRoZW4gY29weSBpdCB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUvCisgICAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCiAKIFJlY2VpdmluZyBEVkItVCBpbiBBdXN0cmFsaWEKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggYmU2ZWI0Yy4uNzVjMjhhMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yMyw3ICsyMyw3IEBACiAKIEBjb21wb25lbnRzID0gKCAic3A4ODcwIiwgInNwODg3eCIsICJ0ZGExMDA0NSIsICJ0ZGExMDA0NiIsICJhdjcxMTAiLCAiZGVjMjAwMHQiLAogCQkiZGVjMjU0MHQiLCAiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAotCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIpOworCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIsICJibHVlYmlyZCIpOwogCiAjIENoZWNrIGFyZ3MKIHN5bnRheCgpIGlmIChzY2FsYXIoQEFSR1YpICE9IDEpOwpAQCAtMzQsNyArMzQsMTEgQEAKICAgICBpZiAoJGNpZCBlcSAkY29tcG9uZW50c1skaV0pIHsKIAkkb3V0ZmlsZSA9IGV2YWwoJGNpZCk7CiAJZGllICRAIGlmICRAOwotCXByaW50IFNUREVSUiAiRmlybXdhcmUgJG91dGZpbGUgZXh0cmFjdGVkIHN1Y2Nlc3NmdWxseS4gTm93IGNvcHkgaXQgdG8gZWl0aGVyIC9saWIvZmlybXdhcmUgb3IgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8gKGRlcGVuZGluZyBvbiB5b3VyIGhvdHBsdWcgdmVyc2lvbikuXG4iOworCXByaW50IFNUREVSUiA8PEVPRjsKK0Zpcm13YXJlICRvdXRmaWxlIGV4dHJhY3RlZCBzdWNjZXNzZnVsbHkuCitOb3cgY29weSBpdCB0byBlaXRoZXIgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBvciAvbGliL2Zpcm13YXJlCisoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCitFT0YKIAlleGl0KDApOwogICAgIH0KIH0KQEAgLTI0Myw3ICsyNDcsNyBAQAogICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CiAKICAgICBjaGVja3N0YW5kYXJkKCk7Ci0gICAgCisKICAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CiAgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOwogICAgIHZlcmlmeSgiJHRtcGRpci9Ta3lORVRVLnN5cyIsICRoYXNoKTsKQEAgLTMwOCw2ICszMTIsMTkgQEAKICAgICAkZndmaWxlOwogfQogCitzdWIgYmx1ZWJpcmQgeworCW15ICR1cmwgPSAiaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZC9kdmIvZmlybXdhcmUvZHZiLXVzYi1ibHVlYmlyZC0wMS5mdyI7CisJbXkgJG91dGZpbGUgPSAiZHZiLXVzYi1ibHVlYmlyZC0wMS5mdyI7CisJbXkgJGhhc2ggPSAiNjU4Mzk3Y2I5ZWJhOTEwMWFmOTAzMTMwMjY3MWY0OWQiOworCisJY2hlY2tzdGFuZGFyZCgpOworCisJd2dldGZpbGUoJG91dGZpbGUsICR1cmwpOworCXZlcmlmeSgkb3V0ZmlsZSwkaGFzaCk7CisKKwkkb3V0ZmlsZTsKK30KKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVXRpbGl0aWVzCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3R0dXNiLWRlYy50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi90dHVzYi1kZWMudHh0CmluZGV4IDVjMWU5ODQuLmIyZjI3MWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL3R0dXNiLWRlYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvdHR1c2ItZGVjLnR4dApAQCAtNDEsNCArNDEsNSBAQAogRm9yIDIuNiBrZXJuZWxzIHRoZSBmaXJtd2FyZSBpcyBsb2FkZWQgYXQgdGhlIHBvaW50IHRoYXQgdGhlIGRyaXZlciBtb2R1bGUgaXMKIGxvYWRlZC4gIFNlZSBsaW51eC9Eb2N1bWVudGF0aW9uL2R2Yi9maXJtd2FyZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLUNvcHkgdGhlIHRocmVlIGZpbGVzIGRvd25sb2FkZWQgYWJvdmUgaW50byB0aGUgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBkaXJlY3RvcnkuCitDb3B5IHRoZSB0aHJlZSBmaWxlcyBkb3dubG9hZGVkIGFib3ZlIGludG8gdGhlIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IKKy9saWIvZmlybXdhcmUgZGlyZWN0b3J5IChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGE0ZGNmNDIuLjk0NGNmMTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtNDE4LDcgKzQxOCw3IEBACiAgICAgICAgRGlydHk6IE1lbW9yeSB3aGljaCBpcyB3YWl0aW5nIHRvIGdldCB3cml0dGVuIGJhY2sgdG8gdGhlIGRpc2sKICAgIFdyaXRlYmFjazogTWVtb3J5IHdoaWNoIGlzIGFjdGl2ZWx5IGJlaW5nIHdyaXR0ZW4gYmFjayB0byB0aGUgZGlzawogICAgICAgTWFwcGVkOiBmaWxlcyB3aGljaCBoYXZlIGJlZW4gbW1hcGVkLCBzdWNoIGFzIGxpYnJhcmllcwotICAgICAgICAgICAgICBTbGFiOiBpbi1rZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGNhY2hlCisgICAgICAgIFNsYWI6IGluLWtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY2FjaGUKICBDb21taXRMaW1pdDogQmFzZWQgb24gdGhlIG92ZXJjb21taXQgcmF0aW8gKCd2bS5vdmVyY29tbWl0X3JhdGlvJyksCiAgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiAgbWVtb3J5IGN1cnJlbnRseSBhdmFpbGFibGUgdG8KICAgICAgICAgICAgICAgYmUgYWxsb2NhdGVkIG9uIHRoZSBzeXN0ZW0uIFRoaXMgbGltaXQgaXMgb25seSBhZGhlcmVkIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyby9pb2N0bCBiL0RvY3VtZW50YXRpb24vaTJvL2lvY3RsCmluZGV4IDNlMTc0OTcuLjFlNzdmYWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJvL2lvY3RsCisrKyBiL0RvY3VtZW50YXRpb24vaTJvL2lvY3RsCkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgIEVOT01FTSAgICAgIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgogCiAgICBBIHJldHVybiB2YWx1ZSBvZiAwIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgdmFsdWUgd2FzIGFjdHVhbGx5Ci0gICBwcm9wZXJseSByZXRyZWl2ZWQuICBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhlIHJlc3VsdCBsaXN0CisgICBwcm9wZXJseSByZXRyaWV2ZWQuICBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhlIHJlc3VsdCBsaXN0CiAgICB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHN0YXR1cyBvZiB0aGUgdHJhbnNhY3Rpb24uCiAKIFZJSUkuIERvd25sb2FkaW5nIFNvZnR3YXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGFjYjAxMGIuLjBkYzg0OGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC05OTgsNiArOTk4LDggQEAKIAogCW5vd2IJCVtBUk1dCiAKKwlucl91YXJ0cz0JW1NFUklBTF0gbWF4aW11bSBudW1iZXIgb2YgVUFSVHMgdG8gYmUgcmVnaXN0ZXJlZC4KKwogCW9wbDM9CQlbSFcsT1NTXQogCQkJRm9ybWF0OiA8aW8+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CmluZGV4IDA1NDFmZTEuLjBlYTVhMGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dApAQCAtNDExLDcgKzQxMSw4IEBACiAJCXByaW50aygiQ291bGRuJ3QgZmluZCAlcyB0byBwbGFudCBrcHJvYmVcbiIsICJkb19mb3JrIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JaWYgKChyZXQgPSByZWdpc3Rlcl9rcHJvYmUoJmtwKSA8IDApKSB7CisJcmV0ID0gcmVnaXN0ZXJfa3Byb2JlKCZrcCk7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJyZWdpc3Rlcl9rcHJvYmUgZmFpbGVkLCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbXV0ZXgtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vbXV0ZXgtZGVzaWduLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmY3OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tdXRleC1kZXNpZ24udHh0CkBAIC0wLDAgKzEsMTM1IEBACitHZW5lcmljIE11dGV4IFN1YnN5c3RlbQorCitzdGFydGVkIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorCisgICJXaHkgb24gZWFydGggZG8gd2UgbmVlZCBhIG5ldyBtdXRleCBzdWJzeXN0ZW0sIGFuZCB3aGF0J3Mgd3JvbmcKKyAgIHdpdGggc2VtYXBob3Jlcz8iCisKK2ZpcnN0bHksIHRoZXJlJ3Mgbm90aGluZyB3cm9uZyB3aXRoIHNlbWFwaG9yZXMuIEJ1dCBpZiB0aGUgc2ltcGxlcgorbXV0ZXggc2VtYW50aWNzIGFyZSBzdWZmaWNpZW50IGZvciB5b3VyIGNvZGUsIHRoZW4gdGhlcmUgYXJlIGEgY291cGxlCitvZiBhZHZhbnRhZ2VzIG9mIG11dGV4ZXM6CisKKyAtICdzdHJ1Y3QgbXV0ZXgnIGlzIHNtYWxsZXIgb24gbW9zdCBhcmNoaXRlY3R1cmVzOiAuZS5nIG9uIHg4NiwKKyAgICdzdHJ1Y3Qgc2VtYXBob3JlJyBpcyAyMCBieXRlcywgJ3N0cnVjdCBtdXRleCcgaXMgMTYgYnl0ZXMuCisgICBBIHNtYWxsZXIgc3RydWN0dXJlIHNpemUgbWVhbnMgbGVzcyBSQU0gZm9vdHByaW50LCBhbmQgYmV0dGVyCisgICBDUFUtY2FjaGUgdXRpbGl6YXRpb24uCisKKyAtIHRpZ2h0ZXIgY29kZS4gT24geDg2IGkgZ2V0IHRoZSBmb2xsb3dpbmcgLnRleHQgc2l6ZXMgd2hlbgorICAgc3dpdGNoaW5nIGFsbCBtdXRleC1hbGlrZSBzZW1hcGhvcmVzIGluIHRoZSBrZXJuZWwgdG8gdGhlIG11dGV4CisgICBzdWJzeXN0ZW06CisKKyAgICAgICAgdGV4dCAgICBkYXRhICAgICBic3MgICAgIGRlYyAgICAgaGV4IGZpbGVuYW1lCisgICAgIDMyODAzODAgIDg2ODE4OCAgMzk2ODYwIDQ1NDU0MjggIDQ1NWI5NCB2bWxpbnV4LXNlbWFwaG9yZQorICAgICAzMjU1MzI5ICA4NjUyOTYgIDM5NjczMiA0NTE3MzU3ICA0NGVkZWQgdm1saW51eC1tdXRleAorCisgICB0aGF0J3MgMjUwNTEgYnl0ZXMgb2YgY29kZSBzYXZlZCwgb3IgYSAwLjc2JSB3aW4gLSBvZmYgdGhlIGhvdHRlc3QKKyAgIGNvZGVwYXRocyBvZiB0aGUga2VybmVsLiAoVGhlIC5kYXRhIHNhdmluZ3MgYXJlIDI4OTIgYnl0ZXMsIG9yIDAuMzMlKQorICAgU21hbGxlciBjb2RlIG1lYW5zIGJldHRlciBpY2FjaGUgZm9vdHByaW50LCB3aGljaCBpcyBvbmUgb2YgdGhlCisgICBtYWpvciBvcHRpbWl6YXRpb24gZ29hbHMgaW4gdGhlIExpbnV4IGtlcm5lbCBjdXJyZW50bHkuCisKKyAtIHRoZSBtdXRleCBzdWJzeXN0ZW0gaXMgc2xpZ2h0bHkgZmFzdGVyIGFuZCBoYXMgYmV0dGVyIHNjYWxhYmlsaXR5IGZvcgorICAgY29udGVuZGVkIHdvcmtsb2Fkcy4gT24gYW4gOC13YXkgeDg2IHN5c3RlbSwgcnVubmluZyBhIG11dGV4LWJhc2VkCisgICBrZXJuZWwgYW5kIHRlc3RpbmcgY3JlYXQrdW5saW5rK2Nsb3NlIChvZiBzZXBhcmF0ZSwgcGVyLXRhc2sgZmlsZXMpCisgICBpbiAvdG1wIHdpdGggMTYgcGFyYWxsZWwgdGFza3MsIHRoZSBhdmVyYWdlIG51bWJlciBvZiBvcHMvc2VjIGlzOgorCisgICAgU2VtYXBob3JlczogICAgICAgICAgICAgICAgICAgICAgICBNdXRleGVzOgorCisgICAgJCAuL3Rlc3QtbXV0ZXggViAxNiAxMCAgICAgICAgICAgICAkIC4vdGVzdC1tdXRleCBWIDE2IDEwCisgICAgOCBDUFVzLCBydW5uaW5nIDE2IHRhc2tzLiAgICAgICAgICA4IENQVXMsIHJ1bm5pbmcgMTYgdGFza3MuCisgICAgY2hlY2tpbmcgVkZTIHBlcmZvcm1hbmNlLiAgICAgICAgICBjaGVja2luZyBWRlMgcGVyZm9ybWFuY2UuCisgICAgYXZnIGxvb3BzL3NlYzogICAgICAzNDcxMyAgICAgICAgICBhdmcgbG9vcHMvc2VjOiAgICAgIDg0MTUzCisgICAgQ1BVIHV0aWxpemF0aW9uOiAgICA2MyUgICAgICAgICAgICBDUFUgdXRpbGl6YXRpb246ICAgIDIyJQorCisgICBpLmUuIGluIHRoaXMgd29ya2xvYWQsIHRoZSBtdXRleCBiYXNlZCBrZXJuZWwgd2FzIDIuNCB0aW1lcyBmYXN0ZXIKKyAgIHRoYW4gdGhlIHNlbWFwaG9yZSBiYXNlZCBrZXJuZWwsIF9hbmRfIGl0IGFsc28gaGFkIDIuOCB0aW1lcyBsZXNzIENQVQorICAgdXRpbGl6YXRpb24uIChJbiB0ZXJtcyBvZiAnb3BzIHBlciBDUFUgY3ljbGUnLCB0aGUgc2VtYXBob3JlIGtlcm5lbAorICAgcGVyZm9ybWVkIDU1MSBvcHMvc2VjIHBlciAxJSBvZiBDUFUgdGltZSB1c2VkLCB3aGlsZSB0aGUgbXV0ZXgga2VybmVsCisgICBwZXJmb3JtZWQgMzgyNSBvcHMvc2VjIHBlciAxJSBvZiBDUFUgdGltZSB1c2VkIC0gaXQgd2FzIDYuOSB0aW1lcworICAgbW9yZSBlZmZpY2llbnQuKQorCisgICB0aGUgc2NhbGFiaWxpdHkgZGlmZmVyZW5jZSBpcyB2aXNpYmxlIGV2ZW4gb24gYSAyLXdheSBQNCBIVCBib3g6CisKKyAgICBTZW1hcGhvcmVzOiAgICAgICAgICAgICAgICAgICAgICAgIE11dGV4ZXM6CisKKyAgICAkIC4vdGVzdC1tdXRleCBWIDE2IDEwICAgICAgICAgICAgICQgLi90ZXN0LW11dGV4IFYgMTYgMTAKKyAgICA0IENQVXMsIHJ1bm5pbmcgMTYgdGFza3MuICAgICAgICAgIDggQ1BVcywgcnVubmluZyAxNiB0YXNrcy4KKyAgICBjaGVja2luZyBWRlMgcGVyZm9ybWFuY2UuICAgICAgICAgIGNoZWNraW5nIFZGUyBwZXJmb3JtYW5jZS4KKyAgICBhdmcgbG9vcHMvc2VjOiAgICAgIDEyNzY1OSAgICAgICAgIGF2ZyBsb29wcy9zZWM6ICAgICAgMTgxMDgyCisgICAgQ1BVIHV0aWxpemF0aW9uOiAgICAxMDAlICAgICAgICAgICBDUFUgdXRpbGl6YXRpb246ICAgIDM0JQorCisgICAodGhlIHN0cmFpZ2h0IHBlcmZvcm1hbmNlIGFkdmFudGFnZSBvZiBtdXRleGVzIGlzIDQxJSwgdGhlIHBlci1jeWNsZQorICAgIGVmZmljaWVuY3kgb2YgbXV0ZXhlcyBpcyA0LjEgdGltZXMgYmV0dGVyLikKKworIC0gdGhlcmUgYXJlIG5vIGZhc3RwYXRoIHRyYWRlb2ZmcywgdGhlIG11dGV4IGZhc3RwYXRoIGlzIGp1c3QgYXMgdGlnaHQKKyAgIGFzIHRoZSBzZW1hcGhvcmUgZmFzdHBhdGguIE9uIHg4NiwgdGhlIGxvY2tpbmcgZmFzdHBhdGggaXMgMgorICAgaW5zdHJ1Y3Rpb25zOgorCisgICAgYzAzNzdjY2IgPG11dGV4X2xvY2s+OgorICAgIGMwMzc3Y2NiOiAgICAgICBmMCBmZiAwOCAgICAgICAgICAgICAgICBsb2NrIGRlY2wgKCVlYXgpCisgICAgYzAzNzdjY2U6ICAgICAgIDc4IDBlICAgICAgICAgICAgICAgICAgIGpzICAgICBjMDM3N2NkZSA8LnRleHQubG9jay5tdXRleD4KKyAgICBjMDM3N2NkMDogICAgICAgYzMgICAgICAgICAgICAgICAgICAgICAgcmV0CisKKyAgIHRoZSB1bmxvY2tpbmcgZmFzdHBhdGggaXMgZXF1YWxseSB0aWdodDoKKworICAgIGMwMzc3Y2QxIDxtdXRleF91bmxvY2s+OgorICAgIGMwMzc3Y2QxOiAgICAgICBmMCBmZiAwMCAgICAgICAgICAgICAgICBsb2NrIGluY2wgKCVlYXgpCisgICAgYzAzNzdjZDQ6ICAgICAgIDdlIDBmICAgICAgICAgICAgICAgICAgIGpsZSAgICBjMDM3N2NlNSA8LnRleHQubG9jay5tdXRleCsweDc+CisgICAgYzAzNzdjZDY6ICAgICAgIGMzICAgICAgICAgICAgICAgICAgICAgIHJldAorCisgLSAnc3RydWN0IG11dGV4JyBzZW1hbnRpY3MgYXJlIHdlbGwtZGVmaW5lZCBhbmQgYXJlIGVuZm9yY2VkIGlmCisgICBDT05GSUdfREVCVUdfTVVURVhFUyBpcyB0dXJuZWQgb24uIFNlbWFwaG9yZXMgb24gdGhlIG90aGVyIGhhbmQgaGF2ZQorICAgdmlydHVhbGx5IG5vIGRlYnVnZ2luZyBjb2RlIG9yIGluc3RydW1lbnRhdGlvbi4gVGhlIG11dGV4IHN1YnN5c3RlbQorICAgY2hlY2tzIGFuZCBlbmZvcmNlcyB0aGUgZm9sbG93aW5nIHJ1bGVzOgorCisgICAqIC0gb25seSBvbmUgdGFzayBjYW4gaG9sZCB0aGUgbXV0ZXggYXQgYSB0aW1lCisgICAqIC0gb25seSB0aGUgb3duZXIgY2FuIHVubG9jayB0aGUgbXV0ZXgKKyAgICogLSBtdWx0aXBsZSB1bmxvY2tzIGFyZSBub3QgcGVybWl0dGVkCisgICAqIC0gcmVjdXJzaXZlIGxvY2tpbmcgaXMgbm90IHBlcm1pdHRlZAorICAgKiAtIGEgbXV0ZXggb2JqZWN0IG11c3QgYmUgaW5pdGlhbGl6ZWQgdmlhIHRoZSBBUEkKKyAgICogLSBhIG11dGV4IG9iamVjdCBtdXN0IG5vdCBiZSBpbml0aWFsaXplZCB2aWEgbWVtc2V0IG9yIGNvcHlpbmcKKyAgICogLSB0YXNrIG1heSBub3QgZXhpdCB3aXRoIG11dGV4IGhlbGQKKyAgICogLSBtZW1vcnkgYXJlYXMgd2hlcmUgaGVsZCBsb2NrcyByZXNpZGUgbXVzdCBub3QgYmUgZnJlZWQKKyAgICogLSBoZWxkIG11dGV4ZXMgbXVzdCBub3QgYmUgcmVpbml0aWFsaXplZAorICAgKiAtIG11dGV4ZXMgbWF5IG5vdCBiZSB1c2VkIGluIGlycSBjb250ZXh0cworCisgICBmdXJ0aGVybW9yZSwgdGhlcmUgYXJlIGFsc28gY29udmVuaWVuY2UgZmVhdHVyZXMgaW4gdGhlIGRlYnVnZ2luZworICAgY29kZToKKworICAgKiAtIHVzZXMgc3ltYm9saWMgbmFtZXMgb2YgbXV0ZXhlcywgd2hlbmV2ZXIgdGhleSBhcmUgcHJpbnRlZCBpbiBkZWJ1ZyBvdXRwdXQKKyAgICogLSBwb2ludC1vZi1hY3F1aXJlIHRyYWNraW5nLCBzeW1ib2xpYyBsb29rdXAgb2YgZnVuY3Rpb24gbmFtZXMKKyAgICogLSBsaXN0IG9mIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW0sIHByaW50b3V0IG9mIHRoZW0KKyAgICogLSBvd25lciB0cmFja2luZworICAgKiAtIGRldGVjdHMgc2VsZi1yZWN1cnNpbmcgbG9ja3MgYW5kIHByaW50cyBvdXQgYWxsIHJlbGV2YW50IGluZm8KKyAgICogLSBkZXRlY3RzIG11bHRpLXRhc2sgY2lyY3VsYXIgZGVhZGxvY2tzIGFuZCBwcmludHMgb3V0IGFsbCBhZmZlY3RlZAorICAgKiAgIGxvY2tzIGFuZCB0YXNrcyAoYW5kIG9ubHkgdGhvc2UgdGFza3MpCisKK0Rpc2FkdmFudGFnZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIHN0cmljdGVyIG11dGV4IEFQSSBtZWFucyB5b3UgY2Fubm90IHVzZSBtdXRleGVzIHRoZSBzYW1lIHdheSB5b3UKK2NhbiB1c2Ugc2VtYXBob3JlczogZS5nLiB0aGV5IGNhbm5vdCBiZSB1c2VkIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQsCitub3IgY2FuIHRoZXkgYmUgdW5sb2NrZWQgZnJvbSBhIGRpZmZlcmVudCBjb250ZXh0IHRoYXQgd2hpY2ggYWNxdWlyZWQKK2l0LiBbIEknbSBub3QgYXdhcmUgb2YgYW55IG90aGVyIChlLmcuIHBlcmZvcm1hbmNlKSBkaXNhZHZhbnRhZ2VzIGZyb20KK3VzaW5nIG11dGV4ZXMgYXQgdGhlIG1vbWVudCwgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBmaW5kIGFueS4gXQorCitJbXBsZW1lbnRhdGlvbiBvZiBtdXRleGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKydzdHJ1Y3QgbXV0ZXgnIGlzIHRoZSBuZXcgbXV0ZXggdHlwZSwgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L211dGV4LmgKK2FuZCBpbXBsZW1lbnRlZCBpbiBrZXJuZWwvbXV0ZXguYy4gSXQgaXMgYSBjb3VudGVyLWJhc2VkIG11dGV4IHdpdGggYQorc3BpbmxvY2sgYW5kIGEgd2FpdC1saXN0LiBUaGUgY291bnRlciBoYXMgMyBzdGF0ZXM6IDEgZm9yICJ1bmxvY2tlZCIsCiswIGZvciAibG9ja2VkIiBhbmQgbmVnYXRpdmUgbnVtYmVycyAodXN1YWxseSAtMSkgZm9yICJsb2NrZWQsIHBvdGVudGlhbAord2FpdGVycyBxdWV1ZWQiLgorCit0aGUgQVBJcyBvZiAnc3RydWN0IG11dGV4JyBoYXZlIGJlZW4gc3RyZWFtbGluZWQ6CisKKyBERUZJTkVfTVVURVgobmFtZSk7CisKKyBtdXRleF9pbml0KG11dGV4KTsKKworIHZvaWQgbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOworIGludCAgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBtdXRleCAqbG9jayk7CisgaW50ICBtdXRleF90cnlsb2NrKHN0cnVjdCBtdXRleCAqbG9jayk7Cisgdm9pZCBtdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpsb2NrKTsKKyBpbnQgIG11dGV4X2lzX2xvY2tlZChzdHJ1Y3QgbXV0ZXggKmxvY2spOworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2s5OGxpbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2s5OGxpbi50eHQKaW5kZXggODUxZmM5Ny4uZjlkOTc5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zazk4bGluLnR4dApAQCAtMjQ1LDcgKzI0NSw3IEBACiBUaGlzIHBhcmFtZXRlcnMgaXMgb25seSByZWxldmFudCBpZiBhdXRvLW5lZ290aWF0aW9uIGZvciB0aGlzIHBvcnQgaXMgCiBub3Qgc2V0IHRvICJTZW5zZSIuIElmIGF1dG8tbmVnb3RpYXRpb24gaXMgc2V0IHRvICJPbiIsIGFsbCB0aHJlZSB2YWx1ZXMKIGFyZSBwb3NzaWJsZS4gSWYgaXQgaXMgc2V0IHRvICJPZmYiLCBvbmx5ICJGdWxsIiBhbmQgIkhhbGYiIGFyZSBhbGxvd2VkLgotVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsbCBpZiB5b3VyIGxpbmsgcGFydG5lciBkb2VzIG5vdCBzdXBwb3J0IGFsbAorVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIGlmIHlvdXIgbGluayBwYXJ0bmVyIGRvZXMgbm90IHN1cHBvcnQgYWxsCiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuCiAKIEZsb3cgQ29udHJvbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0CmluZGV4IGNkMGZjZDguLjA4Yzc5ZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKQEAgLTIxMiw3ICsyMTIsNyBAQAogCiBjYXQgYGNhdCAvcHJvYy9bMC05XSovbWFwcyB8IGdyZXAgLyB8IHNlZCAnczouKiAvOi86JyB8IHNvcnQgLXVgID4gL2Rldi9udWxsCiAKLWFmdGVyIHJlc3VtZS4gc3dhcG9mZiAtYTsgc3dhcG9uIC1hIG1heSBhbHNvIGJlIHVzZWZ1bGwuCithZnRlciByZXN1bWUuIHN3YXBvZmYgLWE7IHN3YXBvbiAtYSBtYXkgYWxzbyBiZSB1c2VmdWwuCiAKIFE6IFdoYXQgaGFwcGVucyB0byBkZXZpY2VzIGR1cmluZyBzd3N1c3A/IFRoZXkgc2VlbSB0byBiZSByZXN1bWVkCiBkdXJpbmcgc3lzdGVtIHN1c3BlbmQ/CkBAIC0zMjMsNyArMzIzLDcgQEAKIEE6IE5vLCBpdCBzaG91bGQgd29yayBva2F5LCBhcyBsb25nIGFzIHlvdXIgYXBwIGRvZXMgbm90IG1sb2NrKCkKIGl0LiBKdXN0IHByZXBhcmUgYmlnIGVub3VnaCBzd2FwIHBhcnRpdGlvbi4KIAotUTogV2hhdCBpbmZvcm1hdGlvbiBpcyB1c2VmdWxsIGZvciBkZWJ1Z2dpbmcgc3VzcGVuZC10by1kaXNrIHByb2JsZW1zPworUTogV2hhdCBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBzdXNwZW5kLXRvLWRpc2sgcHJvYmxlbXM/CiAKIEE6IFdlbGwsIGxhc3QgbWVzc2FnZXMgb24gdGhlIHNjcmVlbiBhcmUgYWx3YXlzIHVzZWZ1bC4gSWYgc29tZXRoaW5nCiBpcyBicm9rZW4sIGl0IGlzIHVzdWFsbHkgc29tZSBrZXJuZWwgZHJpdmVyLCB0aGVyZWZvcmUgdHJ5aW5nIHdpdGggYXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0diBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgppbmRleCAzMzAyNDZhLi43NGZiMDg1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CkBAIC0xNDEsMyArMTQxLDQgQEAKIDE0MCAtPiBPc3ByZXkgNDQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwN10KIDE0MSAtPiBBc291bmQgU2t5ZXllIFBDVFYKIDE0MiAtPiBTYWJyZW50IFRWLUZNIChidHR2IHZlcnNpb24pCisxNDMgLT4gSGF1cHBhdWdlIEltcGFjdFZDQiAoYnQ4NzgpICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjEzZWJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKaW5kZXggYTEwMTdkMS4uMzRiNmU1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OApAQCAtMTYsNyArMTYsNyBAQAogIDE1IC0+IERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkYjAwXQogIDE2IC0+IEtXb3JsZCBMVFY4ODNSRgogIDE3IC0+IERWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkLVEgICAgICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkODEwXQotIDE4IC0+IEhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo5MDAyXQorIDE4IC0+IEhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo5MDAyLDAwNzA6OTAwMV0KICAxOSAtPiBDb25leGFudCBEVkItVCByZWZlcmVuY2UgZGVzaWduICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6MDE4N10KICAyMCAtPiBQcm92aWRlbyBQVjI1OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE1NDA6MjU4MF0KICAyMSAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIFBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZGIxMF0KQEAgLTM1LDMgKzM1LDExIEBACiAgMzQgLT4gQVRJIEhEVFYgV29uZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDAyOmExMDFdCiAgMzUgLT4gV2luRmFzdCBEVFYxMDAwLVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2NWZdCiAgMzYgLT4gQVZlclRWIDMwMyAoTTEyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjAwMGFdCisgMzcgLT4gSGF1cHBhdWdlIE5vdmEtUy1QbHVzIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjkyMDEsMDA3MDo5MjAyXQorIDM4IC0+IEhhdXBwYXVnZSBOb3ZhLVNFMiBEVkItUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo5MjAwXQorIDM5IC0+IEtXb3JsZCBEVkItUyAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTdkZTowOGIyXQorIDQwIC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMTAwIERWQi1UL0h5YnJpZCAgICAgICAgICAgICAgICBbMDA3MDo5NDAwLDAwNzA6OTQwMl0KKyA0MSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTEwMCBEVkItVC9IeWJyaWQgKExvdyBQcm9maWxlKSAgWzAwNzA6OTgwMCwwMDcwOjk4MDJdCisgNDIgLT4gZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UIFBybyAgICAgICAgICAgICAgICAgICAgIFsxODIyOjAwMjVdCisgNDMgLT4gS1dvcmxkL1ZTdHJlYW0gWFBlcnQgRFZCLVQgd2l0aCBjeDIyNzAyICAgICAgICAgICAgIFsxN2RlOjA4YTFdCisgNDQgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIERpZ2l0YWwgICAgICAgICAgICAgICAgIFsxOGFjOmRiNTBdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggZWZiNzA4ZS4uY2IzYTU5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtNTYsNyArNTYsNyBAQAogIDU1IC0+IExpZmVWaWV3IEZseURWQi1UIERVTyAgICAgICAgICAgICAgICAgICAgWzUxNjg6MDUwMiw1MTY4OjAzMDZdCiAgNTYgLT4gQXZlcm1lZGlhIEFWZXJUViAzMDcgICAgICAgICAgICAgICAgICAgICBbMTQ2MTphNzBhXQogIDU3IC0+IEF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNICAgICAgICAgICAgICAgWzE0NjE6ZjMxZl0KLSA1OCAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIChzYWE3MTM1KSAgICAgICAgICAgIFsxNDIxOjAzNTAsMTQyMTowMzcwLDE0MjE6MTM3MF0KKyA1OCAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIChzYWE3MTM1KSAgICAgICAgICAgIFsxNDIxOjAzNTAsMTQyMTowMzUxLDE0MjE6MDM3MCwxNDIxOjEzNzBdCiAgNTkgLT4gS3dvcmxkL1RldmlvbiBWLVN0cmVhbSBYcGVydCBUViBQVlI3MTM0CiAgNjAgLT4gVHlwaG9vbiBEVkItVCBEdW8gRGlnaXRhbC9BbmFsb2cgQ2FyZGJ1cyBbNGU0MjowNTAyXQogIDYxIC0+IFBoaWxpcHMgVE9VR0ggRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiAgICAgWzExMzE6MjAwNF0KQEAgLTgxLDQgKzgxLDUgQEAKICA4MCAtPiBBU1VTIERpZ2ltYXRyaXggVFYgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjAyMTBdCiAgODEgLT4gUGhpbGlwcyBUaWdlciByZWZlcmVuY2UgZGVzaWduICAgICAgICAgICBbMTEzMToyMDE4XQogIDgyIC0+IE1TSSBUVkBBbnl3aGVyZSBwbHVzICAgICAgICAgICAgICAgICAgICAgWzE0NjI6NjIzMV0KLQorIDgzIC0+IFRlcnJhdGVjIENpbmVyZ3kgMjUwIFBDSSBUViAgICAgICAgICAgICAgWzE1M2I6MTE2MF0KKyA4NCAtPiBMaWZlVmlldyBGbHlEVkIgVHJpbyAgICAgICAgICAgICAgICAgICAgIFs1MTY4OjAzMTldCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCA5ZDY1NDRlLi4wYmYzZDViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTQwLDcgKzQwLDcgQEAKIHR1bmVyPTM5IC0gTEcgTlRTQyAobmV3ZXIgVEFQQyBzZXJpZXMpCiB0dW5lcj00MCAtIEhJVEFDSEkgVjctSjE4MEFUCiB0dW5lcj00MSAtIFBoaWxpcHMgUEFMX01LIChGSTEyMTYgTUspCi10dW5lcj00MiAtIFBoaWxpcHMgMTIzNkQgQVRTQy9OVFNDIGRhdWwgaW4KK3R1bmVyPTQyIC0gUGhpbGlwcyAxMjM2RCBBVFNDL05UU0MgZHVhbCBpbgogdHVuZXI9NDMgLSBQaGlsaXBzIE5UU0MgTUszIChGTTEyMzZNSzMgb3IgRk0xMjM2L0YpCiB0dW5lcj00NCAtIFBoaWxpcHMgNCBpbiAxIChBVEkgVFYgV29uZGVyIFByby9Db25leGFudCkKIHR1bmVyPTQ1IC0gTWljcm90dW5lIDQwNDkgRk01CkBAIC01MCw3ICs1MCw3IEBACiB0dW5lcj00OSAtIE1pY3JvdHVuZSA0MDQyIEZJNSBBVFNDL05UU0MgZHVhbCBpbgogdHVuZXI9NTAgLSBUQ0wgMjAwMk4KIHR1bmVyPTUxIC0gUGhpbGlwcyBQQUwvU0VDQU1fRCAoRk0gMTI1NiBJLUgzKQotdHVuZXI9NTIgLSBUaG9tc29uIEREVCA3NjEwIChBVFNDL05UU0MpCit0dW5lcj01MiAtIFRob21zb24gRFRUIDc2MTAgKEFUU0MvTlRTQykKIHR1bmVyPTUzIC0gUGhpbGlwcyBGUTEyODYKIHR1bmVyPTU0IC0gdGRhODI5MCs3NQogdHVuZXI9NTUgLSBUQ0wgMjAwMk1CCkBAIC01OCw3ICs1OCw3IEBACiB0dW5lcj01NyAtIFBoaWxpcHMgRlExMjM2QSBNSzQKIHR1bmVyPTU4IC0gWW1lYyBUVmlzaW9uIFRWRi04NTMxTUYvODgzMU1GLzg3MzFNRgogdHVuZXI9NTkgLSBZbWVjIFRWaXNpb24gVFZGLTU1MzNNRgotdHVuZXI9NjAgLSBUaG9tc29uIEREVCA3NjExIChBVFNDL05UU0MpCit0dW5lcj02MCAtIFRob21zb24gRFRUIDc2MVggKEFUU0MvTlRTQykKIHR1bmVyPTYxIC0gVGVuYSBUTkY5NTMzLUQvSUYvVE5GOTUzMy1CL0RGCiB0dW5lcj02MiAtIFBoaWxpcHMgVEVBNTc2N0hOIEZNIFJhZGlvCiB0dW5lcj02MyAtIFBoaWxpcHMgRk1EMTIxNk1FIE1LMyBIeWJyaWQgVHVuZXIKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggODAyNGQxYi4uMDc0MjAxNiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTU0NiwxMyArNTQ2LDYgQEAKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi92NGwtZHZiLmdpdAogUzoJTWFpbnRhaW5lZAogCi1CVVNMT0dJQyBTQ1NJIERSSVZFUgotUDoJTGVvbmFyZCBOLiBadWJrb2ZmCi1NOglMZW9uYXJkIE4uIFp1YmtvZmYgPGxuekBkYW5kZWxpb24uY29tPgotTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8KLVM6CU1haW50YWluZWQKLQogQ09NTU9OIElOVEVSTkVUIEZJTEUgU1lTVEVNIChDSUZTKQogUDoJU3RldmUgRnJlbmNoCiBNOglzZnJlbmNoQHNhbWJhLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA1OTllNzQ0Li5mYjQ5N2VhIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMjUxLDcgKzI1MSw3IEBACiAjIElmIGl0IGlzIHNldCB0byAic2lsZW50XyIsIG5vdGhpbmcgd2lsIGJlIHByaW50ZWQgYXQgYWxsLCBzaW5jZQogIyB0aGUgdmFyaWFibGUgJChzaWxlbnRfY21kX2NjX29fYykgZG9lc24ndCBleGlzdC4KICMKLSMgQSBzaW1wbGUgdmFyaWFudCBpcyB0byBwcmVmaXggY29tbWFuZHMgd2l0aCAkKFEpIC0gdGhhdCdzIHVzZWZ1bGwKKyMgQSBzaW1wbGUgdmFyaWFudCBpcyB0byBwcmVmaXggY29tbWFuZHMgd2l0aCAkKFEpIC0gdGhhdCdzIHVzZWZ1bAogIyBmb3IgY29tbWFuZHMgdGhhdCBzaGFsbCBiZSBoaWRkZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KICMKICMJJChRKWxuICRAIDo8CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA3YTc0ZTNlLi41MGI5YWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTk5LDEzICs5OSw2IEBACiAJICBFdGhlcm5ldCBpbnRlcmZhY2UsIHR3byBQQ01DSUEgc29ja2V0cywgdHdvIHNlcmlhbCBwb3J0cyBhbmQgYQogCSAgcGFyYWxsZWwgcG9ydC4KIAotY29uZmlnIEFSQ0hfQ0FNRUxPVAotCWJvb2wgIkVweGExMGRiIgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBbHRlcmEncyBFeGNhbGlidXIgWEExMCBkZXZlbG9wbWVudCBib2FyZC4KLQkgIElmIHlvdSB3b3VsZCBsaWtlIHRvIGJ1aWxkIHlvdXIga2VybmVsIHRvIHJ1biBvbiBvbmUgb2YgdGhlc2UgYm9hcmRzCi0JICB0aGVuIHlvdSBtdXN0IHNheSAnWScgaGVyZS4gT3RoZXJ3aXNlIHNheSAnTicKLQogY29uZmlnIEFSQ0hfRk9PVEJSSURHRQogCWJvb2wgIkZvb3RCcmlkZ2UiCiAJc2VsZWN0IEZPT1RCUklER0UKQEAgLTIxMywxMiArMjA2LDE2IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEFnaWxlbnQgQUFFQy0yMDAwCiAKK2NvbmZpZyBBUkNIX0FUOTFSTTkyMDAKKwlib29sICJBVDkxUk05MjAwIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYW4gQVQ5MVJNOTIwMC1iYXNlZAorCSAgYm9hcmQuCisKIGVuZGNob2ljZQogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtY2xwczcxMXgvS2NvbmZpZyIKIAotc291cmNlICJhcmNoL2FybS9tYWNoLWVweGExMGRiL0tjb25maWciCi0KIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWciCkBAIC0yNTMsNiArMjUwLDggQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWciCisKICMgRGVmaW5pdGlvbnMgdG8gbWFrZSBsaWZlIGVhc2llcgogY29uZmlnIEFSQ0hfQUNPUk4KIAlib29sCkBAIC00MTgsNyArNDE3LDggQEAKIAkJICAgQVJDSF9FQlNBMjg1IHx8IEFSQ0hfSU1YIHx8IEFSQ0hfSU5URUdSQVRPUiB8fCBcCiAJCSAgIEFSQ0hfTFVCQk9DSyB8fCBNQUNIX01BSU5TVE9ORSB8fCBBUkNIX05FVFdJTkRFUiB8fCBcCiAJCSAgIEFSQ0hfT01BUCB8fCBBUkNIX1A3MjBUIHx8IEFSQ0hfUFhBX0lEUCB8fCBcCi0JCSAgIEFSQ0hfU0ExMTAwIHx8IEFSQ0hfU0hBUksgfHwgQVJDSF9WRVJTQVRJTEUKKwkJICAgQVJDSF9TQTExMDAgfHwgQVJDSF9TSEFSSyB8fCBBUkNIX1ZFUlNBVElMRSB8fCBcCisJCSAgIEFSQ0hfQVQ5MVJNOTIwMAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgTEVEcyBvbiB5b3VyIG1hY2hpbmUgd2lsbCBiZSB1c2VkCiAJICB0byBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGN1cnJlbnQgc3lzdGVtIHN0YXR1cy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYWZhZjNhMS4uMWZhMmExMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTg0LDcgKzg0LDYgQEAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUFhBKQkgICA6PSBweGEKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTDcyMDApCSAgIDo9IGw3MjAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpIDo9IGludGVncmF0b3IKLSBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0FNRUxPVCkJICAgOj0gZXB4YTEwZGIKICB0ZXh0b2ZzLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gMHgwMDAyODAwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9DTFBTNzExWCkgICA6PSBjbHBzNzExeAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JT1AzWFgpCSAgIDo9IGlvcDN4eApAQCAtMTAwLDYgKzk5LDcgQEAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSDcyMFgpCSAgIDo9IGg3MjB4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0FBRUMyMDAwKSAgIDo9IGFhZWMyMDAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSAgIDo9IHJlYWx2aWV3CisgbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApIDo9IGF0OTFybTkyMDAKIAogaWZlcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQogIyBUaGlzIGlzIHdoYXQgaGFwcGVucyBpZiB5b3UgZm9yZ2V0IHRoZSBJT0NTMTYgbGluZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA2YjUwNWNlLi4zNWZmZTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0yMSwxMCArMjEsNiBAQAogT0JKUwkJKz0gaGVhZC1zaGFyay5vIG9mdy1zaGFyay5vCiBlbmRpZgogCi1pZmVxICgkKENPTkZJR19BUkNIX0NBTUVMT1QpLHkpCi1PQkpTCQkrPSBoZWFkLWVweGExMGRiLm8KLWVuZGlmCi0KIGlmZXEgKCQoQ09ORklHX0FSQ0hfTDcyMDApLHkpCiBPQkpTCQkrPSBoZWFkLWw3MjAwLm8KIGVuZGlmCkBAIC01MCw2ICs0NiwxMCBAQAogT0JKUwkJKz0gaGVhZC1zaGFycHNsLm8KIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkseSkKK09CSlMJCSs9IGhlYWQtYXQ5MXJtOTIwMC5vCitlbmRpZgorCiBpZmVxICgkKENPTkZJR19ERUJVR19JQ0VEQ0MpLHkpCiBPQkpTICAgICAgICAgICAgKz0gaWNlLWRjYy5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtYXQ5MXJtOTIwMC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtYXQ5MXJtOTIwMC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTllYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1hdDkxcm05MjAwLlMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWF0OTFybTkyMDAuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworCQkuc2VjdGlvbgkiLnN0YXJ0IiwgImF4IgorCisJCUAgQXRtZWwgQVQ5MVJNOTIwMC1ESyA6IDI2MgorCQltb3YJcjMsCSMoTUFDSF9UWVBFX0FUOTFSTTkyMDBESyAmIDB4ZmYpCisJCW9ycglyMywgcjMsICMoTUFDSF9UWVBFX0FUOTFSTTkyMDBESyAmIDB4ZmYwMCkKKwkJY21wCXI3LCByMworCQliZXEJOTlmCisKKwkJQCBDb2dlbnQgQ1NCMzM3IDogMzk5CisJCW1vdglyMywJIyhNQUNIX1RZUEVfQ1NCMzM3ICYgMHhmZikKKwkJb3JyCXIzLCByMywgIyhNQUNIX1RZUEVfQ1NCMzM3ICYgMHhmZjAwKQorCQljbXAJcjcsIHIzCisJCWJlcQk5OWYKKworCQlAIENvZ2VudCBDU0I2MzcgOiA2NDgKKwkJbW92CXIzLAkjKE1BQ0hfVFlQRV9DU0I2MzcgJiAweGZmKQorCQlvcnIJcjMsIHIzLAkjKE1BQ0hfVFlQRV9DU0I2MzcgJiAweGZmMDApCisJCWNtcAlyNywgcjMKKwkJYmVxCTk5ZgorCisJCUAgQXRtZWwgQVQ5MVJNOTIwMC1FSyA6IDcwNQorCQltb3YJcjMsCSMoTUFDSF9UWVBFX0FUOTFSTTkyMDBFSyAmIDB4ZmYpCisJCW9ycglyMywgcjMsICMoTUFDSF9UWVBFX0FUOTFSTTkyMDBFSyAmIDB4ZmYwMCkKKwkJY21wCXI3LCByMworCQliZXEJOTlmCisKKwkJQCBDb25pdGVjIENhcm1ldmEgOiA3NjkKKwkJbW92CXIzLAkjKE1BQ0hfVFlQRV9DQVJNRVZBICYgMHhmZikKKwkJb3JyCXIzLCByMywgIyhNQUNIX1RZUEVfQ0FSTUVWQSAmIDB4ZmYwMCkKKwkJY21wCXI3LCByMworCQliZXEJOTlmCisKKwkJQCBLd2lrQnl0ZSBLQjkyMHggOiA2MTIKKwkJbW92CXIzLAkjKE1BQ0hfVFlQRV9LQjkyMDAgJiAweGZmKQorCQlvcnIJcjMsIHIzLCAjKE1BQ0hfVFlQRV9LQjkyMDAgJiAweGZmMDApCisJCWNtcAlyNywgcjMKKwkJYmVxCTk5ZgorCisJCUAgVW5rbm93biBib2FyZCwgdXNlIHRoZSBBVDkxUk05MjAwREsgYm9hcmQKKwkJQCBtb3YJcjcsICNNQUNIX1RZUEVfQVQ5MVJNOTIwMAorCQltb3YJcjcsCSMoTUFDSF9UWVBFX0FUOTFSTTkyMDBESyAmIDB4ZmYpCisJCW9ycglyNywgcjcsICMoTUFDSF9UWVBFX0FUOTFSTTkyMDBESyAmIDB4ZmYwMCkKKworOTk6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1lcHhhMTBkYi5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtZXB4YTEwZGIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU3NjgxZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1lcHhhMTBkYi5TCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9leGNhbGlidXIuaD4KLQotCQkuc2VjdGlvbgkiLnN0YXJ0IiwgImF4IgotCQltb3YJcjcsICNNQUNIX1RZUEVfQ0FNRUxPVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKaW5kZXggY2NiYjRjMC4uMDg5YzlkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCkBAIC02Myw3ICs2Myw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwppbmRleCA1ZDkyYWY5Li5jZmU2YmQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCkBAIC02Niw3ICs2Niw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFzdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Jhc3RfZGVmY29uZmlnCmluZGV4IDM1ZTNhOTkuLjY4ODYwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFzdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iYXN0X2RlZmNvbmZpZwpAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnCmluZGV4IGQ4ZmUwZjQuLmY4MWE2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnCkBAIC02NSw3ICs2NSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2xwczc1MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbHBzNzUwMF9kZWZjb25maWcKaW5kZXggOTA4NzU4My4uYWY5YWU1MzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY2xwczc1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY2xwczc1MDBfZGVmY29uZmlnCkBAIC01Nyw3ICs1Nyw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwppbmRleCA0MGRmZTA3Li4xNTQ2OGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCkBAIC03MSw3ICs3MSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKaW5kZXggMDYyMjkwMi4uM2MzNDYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKQEAgLTg3LDcgKzg3LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKaW5kZXggNmY2MTkyOS4uYWZjZmZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCkBAIC02Myw3ICs2Myw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRUJTQTExMD15Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwppbmRleCA3OGIwOGVkLi42YmE3MzU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKQEAgLTU3LDcgKzU3LDYgQEAKIENPTkZJR19BUkNIX0NMUFM3MTFYPXkKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnCmluZGV4IGZkN2MwMDQuLjk1OTJlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZwpAQCAtODYsNyArODYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwODAyMTlfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDgwMjE5X2RlZmNvbmZpZwppbmRleCA5NjM0MmFmLi5mYmUzMTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VwODAyMTlfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA4MDIxOV9kZWZjb25maWcKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU9QM1hYPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXB4YTEwZGJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcHhhMTBkYl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYjhiNTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcHhhMTBkYl9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2NDQgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAyMjo0Njo1MSAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0NBTUVMT1Q9eQotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIEVweGExMGRiCi0jCi0KLSMKLSMgUExEIGhvdHN3YXAgc3VwcG9ydAotIwotQ09ORklHX1BMRD15Ci0jIENPTkZJR19QTERfSE9UU1dBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9BUk05MjJUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VUEwLDExNTIwMCBpbml0cmQ9MHgwMDIwMDAwMCw4TSByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX1BQUD15Ci1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9eQotQ09ORklHX1BQUF9TWU5DX1RUWT15Ci1DT05GSUdfUFBQX0RFRkxBVEU9eQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfVUFSVDAwPXkKLUNPTkZJR19TRVJJQUxfVUFSVDAwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9eQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCmluZGV4IDk3MzdjNDguLjJhNjEyZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRk9PVEJSSURHRT15CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZwppbmRleCBiNmY2ODhkLi42NWRjNzNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZwpAQCAtNTcsNyArNTcsNiBAQAogQ09ORklHX0FSQ0hfQ0xQUzcxMVg9eQogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCBiOWRlMDdkLi43YTBkYTBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtNjUsNyArNjUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnCmluZGV4IDM5YzEzYTMuLjExNjkyMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnCkBAIC02MCw3ICs2MCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKaW5kZXggZmJmNWMyNC4uOWQ2MmVkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKaW5kZXggZmI0MWEzNi4uYTQ1YjU3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCkBAIC02Niw3ICs2Niw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCmluZGV4IDI3ZWU3NjguLmQxYmE3ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwpAQCAtNjUsNyArNjUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lOVEVHUkFUT1I9eQogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTMxMjQ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXEzMTI0NF9kZWZjb25maWcKaW5kZXggZTcxNDQzYi4uYzA3NjI4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pcTMxMjQ0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lxMzEyNDRfZGVmY29uZmlnCkBAIC02NSw3ICs2NSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lPUDNYWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lxODAzMjFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzIxX2RlZmNvbmZpZwppbmRleCBhYjVhZDIzLi4xOGZhMTYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lxODAzMjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMyMV9kZWZjb25maWcKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU9QM1hYPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lxODAzMzFfZGVmY29uZmlnCmluZGV4IGJiNTM2MTMuLmY1MDAzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMxX2RlZmNvbmZpZwpAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzWFg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMl9kZWZjb25maWcKaW5kZXggMzA1ZjAxZi4uMThiM2YzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lxODAzMzJfZGVmY29uZmlnCkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lPUDNYWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnCmluZGV4IGU2YTRkMjYuLmQ5ZDZiYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnCkBAIC04Niw3ICs4Niw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMV9kZWZjb25maWcKaW5kZXggNTU3MmNmOS4uMmRjOWQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMV9kZWZjb25maWcKQEAgLTg2LDcgKzg2LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwppbmRleCAwZmRkYmRlLi40MjQ4MTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwpAQCAtODYsNyArODYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCmluZGV4IDg5YjlhYTAuLmVhOGY0YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCkBAIC04Niw3ICs4Niw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwppbmRleCA2MTNhZmFiLi40OTc1YjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCkBAIC04NSw3ICs4NSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCmluZGV4IGI4OGFlYmEuLmFkMTA0OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZwppbmRleCA3MDMzODI5Li5jM2E5MzI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKQEAgLTYyLDcgKzYyLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwppbmRleCBkNjQ3MDZkLi42N2VhYTI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwpAQCAtNjAsNyArNjAsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCmluZGV4IDg3Y2JlZGYuLjIwOGQ1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCkBAIC02MCw3ICs2MCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnCmluZGV4IDRiYzg3MTcuLjgxZGFhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHVzbDcyMDBfZGVmY29uZmlnCmluZGV4IDNjYTY0Y2EuLjQyZjZhNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHVzbDcyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHVzbDcyMDBfZGVmY29uZmlnCkBAIC02Miw3ICs2Miw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZwppbmRleCAxNTNkNjg1Li5iMTEyYmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCkBAIC02Myw3ICs2Myw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZwppbmRleCA2NTE3ZDE2Li5kMTZmNmNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnCkBAIC02Myw3ICs2Myw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKaW5kZXggN2ZiMWY3Yy4uM2QzNTI1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKQEAgLTY1LDcgKzY1LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCmluZGV4IDZlODFhY2YuLjJjYWUxZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKQEAgLTU4LDcgKzU4LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZPT1RCUklER0U9eQogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwppbmRleCA1MjlmMGY3Li5lZTNlY2JkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCkBAIC04NSw3ICs4NSw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCmluZGV4IDEwZmVjODkuLjI0ZThiZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZwppbmRleCAyMWMzMjc4Li5iNzFkMzFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwppbmRleCAwNDg1YjJmLi4zZjFlYzRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwpAQCAtNjUsNyArNjUsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKaW5kZXggMTkxODRjMS4uYjQ5OGFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZwpAQCAtNjYsNyArNjYsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwppbmRleCAzZjk3NTkwLi4zM2YzMTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTg1LDcgKzg1LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKaW5kZXggZTNmYWNjNC4uZDA1MmM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCkBAIC02Miw3ICs2Miw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKaW5kZXggMjcxODIzZi4uYzQ4ZDE3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKQEAgLTY2LDcgKzY2LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCmluZGV4IDUzNzNlZWIuLjJlNWE2MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DQU1FTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zbWRrMjQxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NtZGsyNDEwX2RlZmNvbmZpZwppbmRleCAyYzYwODY1Li40ZDEyM2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NtZGsyNDEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NtZGsyNDEwX2RlZmNvbmZpZwpAQCAtNTgsNyArNTgsNiBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCmluZGV4IDk4OTU1MzkuLmQxYWNlM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCkBAIC04Nyw3ICs4Nyw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwppbmRleCBkNzJmMmM3Li4yNjg3YTIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCBiNTY0NWM0Li4xZDUwZDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC03MTAsNyArNzEwLDggQEAKIAkJZGVzYy0+cGVuZGluZyA9IDA7CiAJCWRlc2MtPmRpc2FibGVfZGVwdGggPSAxOwogCi0JCWlmIChuZXctPmZsYWdzICYgU0FfVFJJR0dFUl9NQVNLKSB7CisJCWlmIChuZXctPmZsYWdzICYgU0FfVFJJR0dFUl9NQVNLICYmCisJCSAgICBkZXNjLT5jaGlwLT5zZXRfdHlwZSkgewogCQkJdW5zaWduZWQgaW50IHR5cGUgPSBuZXctPmZsYWdzICYgU0FfVFJJR0dFUl9NQVNLOwogCQkJZGVzYy0+Y2hpcC0+c2V0X3R5cGUoaXJxLCB0eXBlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjcyMThmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWcKQEAgLTAsMCArMSw1NCBAQAoraWYgQVJDSF9BVDkxUk05MjAwCisKK21lbnUgIkFUOTFSTTkyMDAgSW1wbGVtZW50YXRpb25zIgorCitjb21tZW50ICJBVDkxUk05MjAwIEJvYXJkIFR5cGUiCisKK2NvbmZpZyBBUkNIX0FUOTFSTTkyMDBESworCWJvb2wgIkF0bWVsIEFUOTFSTTkyMDAtREsgRGV2ZWxvcG1lbnQgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVJNOTIwMC1ESyBEZXZlbG9wbWVudCBib2FyZAorCitjb25maWcgTUFDSF9BVDkxUk05MjAwRUsKKwlib29sICJBdG1lbCBBVDkxUk05MjAwLUVLIEV2YWx1YXRpb24gS2l0IgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFSTTkyMDAtRUsgRXZhbHVhdGlvbiBLaXQKKworY29uZmlnIE1BQ0hfQ1NCMzM3CisJYm9vbCAiQ29nZW50IENTQjMzNyBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQ29nZW50J3MgQ1NCMzM3IGJvYXJkCisKK2NvbmZpZyBNQUNIX0NTQjYzNworCWJvb2wgIkNvZ2VudCBDU0I2MzcgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvZ2VudCdzIENTQjYzNyBib2FyZAorCitjb25maWcgTUFDSF9DQVJNRVZBCisJYm9vbCAiQ29uaXRlYydzIEFSTSZFVkEiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvbml0ZWMncyBBVDkxUk05MjAwLU1DVS1Nb2R1bGUKKworY29uZmlnIE1BQ0hfS0I5MjAwCisJYm9vbCAiS3dpa0J5dGUncyBLQjkyMHgiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEt3aWtCeXRlJ3MgS0I5MjB4IGJvYXJkCisKKworY29tbWVudCAiQVQ5MVJNOTIwMCBGZWF0dXJlIFNlbGVjdGlvbnMiCisKK2NvbmZpZyBBVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MKKwlib29sICJQcm9ncmFtbWFibGUgQ2xvY2tzIgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBuZWVkIHRvIHByb2dyYW0gb25lIG9yIG1vcmUgb2YgdGhlIFBDSzAuLlBDSzMKKwkgIHByb2dyYW1tYWJsZSBjbG9jayBvdXRwdXRzLgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyODA1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKQEAgLTAsMCArMSwyNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworb2JqLXkJCTo9IGNsb2NrLm8gaXJxLm8gdGltZS5vIGdwaW8ubyBjb21tb24ubyBkZXZpY2VzLm8KK29iai1tCQk6PQorb2JqLW4JCTo9CitvYmotCQk6PQorCisjIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKKyNvYmotJChDT05GSUdfQVJDSF9BVDkxUk05MjAwREspCSs9IGJvYXJkLWRrLm8KKyNvYmotJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGJvYXJkLWVrLm8KKyNvYmotJChDT05GSUdfTUFDSF9DU0IzMzcpCSs9IGJvYXJkLWNzYjMzNy5vCisjb2JqLSQoQ09ORklHX01BQ0hfQ1NCNjM3KQkrPSBib2FyZC1jc2I2MzcubworI29iai0kKENPTkZJR19NQUNIX0NBUk1FVkEpCSs9IGJvYXJkLWNhcm1ldmEubworI29iai0kKENPTkZJR19NQUNIX0tCOTIwMCkJKz0gYm9hcmQta2I5MjAyLm8KKworIyBMRURzIHN1cHBvcnQKKyNsZWQtJChDT05GSUdfQVJDSF9BVDkxUk05MjAwREspCSs9IGxlZHMubworI2xlZC0kKENPTkZJR19NQUNIX0FUOTFSTTkyMDBFSykJKz0gbGVkcy5vCisjbGVkLSQoQ09ORklHX01BQ0hfQ1NCMzM3KQkrPSBsZWRzLm8KKyNsZWQtJChDT05GSUdfTUFDSF9DU0I2MzcpCSs9IGxlZHMubworI2xlZC0kKENPTkZJR19NQUNIX0tCOTIwMCkJKz0gbGVkcy5vCitvYmotJChDT05GSUdfTEVEUykgKz0gJChsZWQteSkKKworIyBWR0Egc3VwcG9ydAorI29iai0kKENPTkZJR19GQl9TMUQxM1hYWCkJKz0gaWNzMTUyMy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjdkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDkgQEAKKyMgTm90ZTogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYWx3YXlzIGJlIHRydWU6CisjICAgWlJFTEFERFIgPT0gdmlydF90b19waHlzKFRFWFRBRERSKQorIyAgIFBBUkFNU19QSFlTIG11c3QgYmUgd2l0aGluIDRNQiBvZiBaUkVMQUREUgorIyAgIElOSVRSRF9QSFlTIG11c3QgYmUgaW4gUkFNCisKKyAgIHpyZWxhZGRyLXkJOj0gMHgyMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDIwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MjA0MTAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzgxOTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgkJLyogZm9yIG1hc3RlciBjbG9jayBnbG9iYWwgKi8KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI3VuZGVmCURFQlVHCisKKy8qCisgKiBUaGVyZSdzIGEgbG90IG1vcmUgd2hpY2ggY2FuIGJlIGRvbmUgd2l0aCBjbG9ja3MsIGluY2x1ZGluZyBjcHVmcmVxCisgKiBpbnRlZ3JhdGlvbiwgc2xvdyBjbG9jayBtb2RlIHN1cHBvcnQgKGZvciBzeXN0ZW0gc3VzcGVuZCksIGxldHRpbmcKKyAqIFBMTEIgYmUgdXNlZCBhdCBvdGhlciByYXRlcyAob24gYm9hcmRzIHRoYXQgZG9uJ3QgbmVlZCBVU0IpLCBldGMuCisgKi8KKworc3RydWN0IGNsayB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBsb25nCXJhdGVfaHo7CisJc3RydWN0IGNsawkqcGFyZW50OworCXUzMgkJcG1jX21hc2s7CisJdm9pZAkJKCptb2RlKShzdHJ1Y3QgY2xrICosIGludCk7CisJdW5zaWduZWQJaWQ6MjsJCS8qIFBDSzAuLjMsIG9yIDMyay9tYWluL2EvYiAqLworCXVuc2lnbmVkCXByaW1hcnk6MTsKKwl1bnNpZ25lZAlwbGw6MTsKKwl1bnNpZ25lZAlwcm9ncmFtbWFibGU6MTsKKwl1MTYJCXVzZXJzOworfTsKKworc3RhdGljIHNwaW5sb2NrX3QJY2xrX2xvY2s7CitzdGF0aWMgdTMyCQlhdDkxX3BsbGJfdXNiX2luaXQ7CisKKy8qCisgKiBGb3VyIHByaW1hcnkgY2xvY2sgc291cmNlczogIHR3byBjcnlzdGFsIG9zY2lsbGF0b3JzICgzMkssIG1haW4pLCBhbmQKKyAqIHR3byBQTExzLiAgUExMQSB1c3VhbGx5IHJ1bnMgdGhlIG1hc3RlciBjbG9jazsgYW5kIFBMTEIgbXVzdCBydW4gYXQKKyAqIDQ4IE1IeiAodW5sZXNzIG5vIFVTQiBmdW5jdGlvbiBjbG9ja3MgYXJlIG5lZWRlZCkuICBUaGUgbWFpbiBjbG9jayBhbmQKKyAqIGJvdGggUExMcyBhcmUgdHVybmVkIG9mZiB0byBydW4gaW4gInNsb3cgY2xvY2sgbW9kZSIgKHN5c3RlbSBzdXNwZW5kKS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY2xrMzJrID0geworCS5uYW1lCQk9ICJjbGszMmsiLAorCS5yYXRlX2h6CT0gQVQ5MV9TTE9XX0NMT0NLLAorCS51c2VycwkJPSAxLAkJLyogYWx3YXlzIG9uICovCisJLmlkCQk9IDAsCisJLnByaW1hcnkJPSAxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1haW5fY2xrID0geworCS5uYW1lCQk9ICJtYWluIiwKKwkucG1jX21hc2sJPSAxIDw8IDAsCS8qIGluIFBNQ19TUiAqLworCS51c2VycwkJPSAxLAorCS5pZAkJPSAxLAorCS5wcmltYXJ5CT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBwbGxhID0geworCS5uYW1lCQk9ICJwbGxhIiwKKwkucGFyZW50CQk9ICZtYWluX2NsaywKKwkucG1jX21hc2sJPSAxIDw8IDEsCS8qIGluIFBNQ19TUiAqLworCS5pZAkJPSAyLAorCS5wcmltYXJ5CT0gMSwKKwkucGxsCQk9IDEsCit9OworCitzdGF0aWMgdm9pZCBwbGxiX21vZGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaXNfb24pCit7CisJdTMyCXZhbHVlOworCisJaWYgKGlzX29uKSB7CisJCWlzX29uID0gQVQ5MV9QTUNfTE9DS0I7CisJCXZhbHVlID0gYXQ5MV9wbGxiX3VzYl9pbml0OworCX0gZWxzZQorCQl2YWx1ZSA9IDA7CisKKwlhdDkxX3N5c193cml0ZShBVDkxX0NLR1JfUExMQlIsIHZhbHVlKTsKKworCWRvIHsKKwkJY3B1X3JlbGF4KCk7CisJfSB3aGlsZSAoKGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTE9DS0IpICE9IGlzX29uKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgcGxsYiA9IHsKKwkubmFtZQkJPSAicGxsYiIsCisJLnBhcmVudAkJPSAmbWFpbl9jbGssCisJLnBtY19tYXNrCT0gMSA8PCAyLAkvKiBpbiBQTUNfU1IgKi8KKwkubW9kZQkJPSBwbGxiX21vZGUsCisJLmlkCQk9IDMsCisJLnByaW1hcnkJPSAxLAorCS5wbGwJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIHBtY19zeXNfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKK3sKKwlpZiAoaXNfb24pCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRVIsIGNsay0+cG1jX21hc2spOworCWVsc2UKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgY2xrLT5wbWNfbWFzayk7Cit9CisKKy8qIFVTQiBmdW5jdGlvbiBjbG9ja3MgKFBMTEIgbXVzdCBiZSA0OCBNSHopICovCitzdGF0aWMgc3RydWN0IGNsayB1ZHBjayA9IHsKKwkubmFtZQkJPSAidWRwY2siLAorCS5wYXJlbnQJCT0gJnBsbGIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfVURQLAorCS5tb2RlCQk9IHBtY19zeXNfbW9kZSwKK307CitzdGF0aWMgc3RydWN0IGNsayB1aHBjayA9IHsKKwkubmFtZQkJPSAidWhwY2siLAorCS5wYXJlbnQJCT0gJnBsbGIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfVUhQLAorCS5tb2RlCQk9IHBtY19zeXNfbW9kZSwKK307CisKKyNpZmRlZiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTCisvKgorICogVGhlIGZvdXIgcHJvZ3JhbW1hYmxlIGNsb2NrcyBjYW4gYmUgcGFyZW50ZWQgYnkgYW55IHByaW1hcnkgY2xvY2suCisgKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKKwkubmFtZQkJPSAicGNrMCIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKKwkubW9kZQkJPSBwbWNfc3lzX21vZGUsCisJLnByb2dyYW1tYWJsZQk9IDEsCisJLmlkCQk9IDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKKwkubmFtZQkJPSAicGNrMSIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKKwkubW9kZQkJPSBwbWNfc3lzX21vZGUsCisJLnByb2dyYW1tYWJsZQk9IDEsCisJLmlkCQk9IDEsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKKwkubmFtZQkJPSAicGNrMiIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKKwkubW9kZQkJPSBwbWNfc3lzX21vZGUsCisJLnByb2dyYW1tYWJsZQk9IDEsCisJLmlkCQk9IDIsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKKwkubmFtZQkJPSAicGNrMyIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKKwkubW9kZQkJPSBwbWNfc3lzX21vZGUsCisJLnByb2dyYW1tYWJsZQk9IDEsCisJLmlkCQk9IDMsCit9OworI2VuZGlmCS8qIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgKi8KKworCisvKgorICogVGhlIG1hc3RlciBjbG9jayBpcyBkaXZpZGVkIGZyb20gdGhlIENQVSBjbG9jayAoYnkgMS00KS4gIEl0J3MgdXNlZCBmb3IKKyAqIG1lbW9yeSwgaW50ZXJmYWNlcyB0byBvbi1jaGlwIHBlcmlwaGVyYWxzLCB0aGUgQUlDLCBhbmQgc29tZXRpbWVzIG1vcmUKKyAqIChlLmcgYmF1ZCByYXRlIGdlbmVyYXRpb24pLiAgSXQncyBzb3VyY2VkIGZyb20gb25lIG9mIHRoZSBwcmltYXJ5IGNsb2Nrcy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbWNrID0geworCS5uYW1lCQk9ICJtY2siLAorCS5wbWNfbWFzawk9IDEgPDwgMywJLyogaW4gUE1DX1NSICovCisJLnVzZXJzCQk9IDEsCQkvKiAobXVzdCBiZSkgYWx3YXlzIG9uICovCit9OworCitzdGF0aWMgdm9pZCBwbWNfcGVyaXBoX21vZGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaXNfb24pCit7CisJaWYgKGlzX29uKQorCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0VSLCBjbGstPnBtY19tYXNrKTsKKwllbHNlCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRFIsIGNsay0+cG1jX21hc2spOworfQorCitzdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0geworCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKKwkucGFyZW50CQk9ICZtY2ssCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1VEUCwKKwkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgb2hjaV9jbGsgPSB7CisJLm5hbWUJCT0gIm9oY2lfY2xrIiwKKwkucGFyZW50CQk9ICZtY2ssCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1VIUCwKKwkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY29uc3QgY2xvY2tfbGlzdFtdID0geworCS8qIGZvdXIgcHJpbWFyeSBjbG9ja3MgLS0gTVVTVCBCRSBGSVJTVCEgKi8KKwkmY2xrMzJrLAorCSZtYWluX2NsaywKKwkmcGxsYSwKKwkmcGxsYiwKKworCS8qIFBMTEIgY2hpbGRyZW4gKFVTQikgKi8KKwkmdWRwY2ssCisJJnVocGNrLAorCisjaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUworCS8qIHByb2dyYW1tYWJsZSBjbG9ja3MgKi8KKwkmcGNrMCwKKwkmcGNrMSwKKwkmcGNrMiwKKwkmcGNrMywKKyNlbmRpZgkvKiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTICovCisKKwkvKiBNQ0sgYW5kIHBlcmlwaGVyYWxzICovCisJJm1jaywKKwkvLyB1c2FydDAuLnVzYXJ0MworCS8vIG1tYworCSZ1ZGNfY2xrLAorCS8vIGkyYworCS8vIHNwaQorCS8vIHNzYzAuLnNzYzIKKwkvLyB0YzAuLnRjNQorCSZvaGNpX2NsaywKKwkvLyBldGhlcgorfTsKKworCisvKiBjbG9ja3MgYXJlIGFsbCBzdGF0aWMgZm9yIG5vdzsgbm8gcmVmY291bnRpbmcgbmVjZXNzYXJ5ICovCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbG9ja19saXN0KTsgaSsrKSB7CisJCWlmIChzdHJjbXAoaWQsIGNsb2NrX2xpc3RbaV0tPm5hbWUpID09IDApCisJCQlyZXR1cm4gY2xvY2tfbGlzdFtpXTsKKwl9CisKKwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCitzdGF0aWMgdm9pZCBfX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPnBhcmVudCkKKwkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKwlpZiAoY2xrLT51c2VycysrID09IDAgJiYgY2xrLT5tb2RlKQorCQljbGstPm1vZGUoY2xrLCAxKTsKK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlfX2Nsa19lbmFibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKworc3RhdGljIHZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJQlVHX09OKGNsay0+dXNlcnMgPT0gMCk7CisJaWYgKC0tY2xrLT51c2VycyA9PSAwICYmIGNsay0+bW9kZSkKKwkJY2xrLT5tb2RlKGNsaywgMCk7CisJaWYgKGNsay0+cGFyZW50KQorCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKK30KKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2Rpc2FibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXVuc2lnbmVkIGxvbmcJcmF0ZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCWZvciAoOzspIHsKKwkJcmF0ZSA9IGNsay0+cmF0ZV9oejsKKwkJaWYgKHJhdGUgfHwgIWNsay0+cGFyZW50KQorCQkJYnJlYWs7CisJCWNsayA9IGNsay0+cGFyZW50OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCXJldHVybiByYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTCisKKy8qCisgKiBGb3Igbm93LCBvbmx5IHRoZSBwcm9ncmFtbWFibGUgY2xvY2tzIHN1cHBvcnQgcmVwYXJlbnRpbmcgKE1DSyBjb3VsZAorICogZG8gdGhpcyB0b28sIHdpdGggY2FyZSkgb3IgcmF0ZSBjaGFuZ2luZyAodGhlIFBMTHMgY291bGQgZG8gdGhpcyB0b28sCisgKiBkaXR0byBNQ0sgYnV0IHRoYXQncyBtb3JlIGZvciBjcHVmcmVxKS4gIERyaXZlcnMgbWF5IHJlcGFyZW50IHRvIGdldAorICogYSBiZXR0ZXIgcmF0ZSBtYXRjaDsgd2UgZG9uJ3QuCisgKi8KKworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXVuc2lnbmVkCXByZXNjYWxlOworCXVuc2lnbmVkIGxvbmcJYWN0dWFsOworCisJaWYgKCFjbGstPnByb2dyYW1tYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKKwlmb3IgKHByZXNjYWxlID0gMDsgcHJlc2NhbGUgPCA3OyBwcmVzY2FsZSsrKSB7CisJCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpCisJCQlicmVhazsKKwkJYWN0dWFsID4+PSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisJcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdW5zaWduZWQJcHJlc2NhbGU7CisJdW5zaWduZWQgbG9uZwlhY3R1YWw7CisKKwlpZiAoIWNsay0+cHJvZ3JhbW1hYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2xrLT51c2VycykKKwkJcmV0dXJuIC1FQlVTWTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OworCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDc7IHByZXNjYWxlKyspIHsKKwkJaWYgKGFjdHVhbCAmJiBhY3R1YWwgPD0gcmF0ZSkgeworCQkJdTMyCXBja3I7CisKKwkJCXBja3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCkpOworCQkJcGNrciAmPSAweDAzOworCQkJcGNrciB8PSBwcmVzY2FsZSA8PCAyOworCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENLUihjbGstPmlkKSwgcGNrcik7CisJCQljbGstPnJhdGVfaHogPSBhY3R1YWw7CisJCQlicmVhazsKKwkJfQorCQlhY3R1YWwgPj49IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gKHByZXNjYWxlIDwgNykgPyBhY3R1YWwgOiAtRU5PRU5UOworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CisKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKGNsay0+dXNlcnMpCisJCXJldHVybiAtRUJVU1k7CisJaWYgKCFwYXJlbnQtPnByaW1hcnkgfHwgIWNsay0+cHJvZ3JhbW1hYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCWNsay0+cmF0ZV9oeiA9IHBhcmVudC0+cmF0ZV9oejsKKwljbGstPnBhcmVudCA9IHBhcmVudDsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0tSKGNsay0+aWQpLCBwYXJlbnQtPmlkKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcGFyZW50KTsKKworI2VuZGlmCS8qIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgYXQ5MV9jbGtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwl1MzIJCXNjc3IsIHBjc3IsIHNyOworCXVuc2lnbmVkCWk7CisKKwlzZXFfcHJpbnRmKHMsICJTQ1NSID0gJTh4XG4iLCBzY3NyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19TQ1NSKSk7CisJc2VxX3ByaW50ZihzLCAiUENTUiA9ICU4eFxuIiwgcGNzciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENTUikpOworCisJc2VxX3ByaW50ZihzLCAiTU9SICA9ICU4eFxuIiwgYXQ5MV9zeXNfcmVhZChBVDkxX0NLR1JfTU9SKSk7CisJc2VxX3ByaW50ZihzLCAiTUNGUiA9ICU4eFxuIiwgYXQ5MV9zeXNfcmVhZChBVDkxX0NLR1JfTUNGUikpOworCXNlcV9wcmludGYocywgIlBMTEEgPSAlOHhcbiIsIGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7CisJc2VxX3ByaW50ZihzLCAiUExMQiA9ICU4eFxuIiwgYXQ5MV9zeXNfcmVhZChBVDkxX0NLR1JfUExMQlIpKTsKKworCXNlcV9wcmludGYocywgIk1DS1IgPSAlOHhcbiIsIGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfTUNLUikpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXNlcV9wcmludGYocywgIlBDSyVkID0gJTh4XG4iLCBpLCBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1BDS1IoaSkpKTsKKwlzZXFfcHJpbnRmKHMsICJTUiAgID0gJTh4XG4iLCBzciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfU1IpKTsKKworCXNlcV9wcmludGYocywgIlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbG9ja19saXN0KTsgaSsrKSB7CisJCWNoYXIJCSpzdGF0ZTsKKwkJc3RydWN0IGNsawkqY2xrID0gY2xvY2tfbGlzdFtpXTsKKworCQlpZiAoY2xrLT5tb2RlID09IHBtY19zeXNfbW9kZSkKKwkJCXN0YXRlID0gKHNjc3IgJiBjbGstPnBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKKwkJZWxzZSBpZiAoY2xrLT5tb2RlID09IHBtY19wZXJpcGhfbW9kZSkKKwkJCXN0YXRlID0gKHBjc3IgJiBjbGstPnBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKKwkJZWxzZSBpZiAoY2xrLT5wbWNfbWFzaykKKwkJCXN0YXRlID0gKHNyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7CisJCWVsc2UgaWYgKGNsayA9PSAmY2xrMzJrIHx8IGNsayA9PSAmbWFpbl9jbGspCisJCQlzdGF0ZSA9ICJvbiI7CisJCWVsc2UKKwkJCXN0YXRlID0gIiI7CisKKwkJc2VxX3ByaW50ZihzLCAiJS0xMHMgdXNlcnM9JWQgJS0zcyAlOWxkIEh6ICVzXG4iLAorCQkJY2xrLT5uYW1lLCBjbGstPnVzZXJzLCBzdGF0ZSwgY2xrX2dldF9yYXRlKGNsayksCisJCQljbGstPnBhcmVudCA/IGNsay0+cGFyZW50LT5uYW1lIDogIiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDkxX2Nsa19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhdDkxX2Nsa19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXQ5MV9jbGtfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBhdDkxX2Nsa19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX2Nsa19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwkvKiAvc3lzL2tlcm5lbC9kZWJ1Zy9hdDkxX2NsayAqLworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhdDkxX2NsayIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMLCBOVUxMLCAmYXQ5MV9jbGtfb3BlcmF0aW9ucyk7CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKGF0OTFfY2xrX2RlYnVnZnNfaW5pdCk7CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1MzIgX19pbml0IGF0OTFfcGxsX3JhdGUoc3RydWN0IGNsayAqcGxsLCB1MzIgZnJlcSwgdTMyIHJlZykKK3sKKwl1bnNpZ25lZCBtdWwsIGRpdjsKKworCWRpdiA9IHJlZyAmIDB4ZmY7CisJbXVsID0gKHJlZyA+PiAxNikgJiAweDdmZjsKKwlpZiAoZGl2ICYmIG11bCkgeworCQlmcmVxIC89IGRpdjsKKwkJZnJlcSAqPSBtdWwgKyAxOworCX0gZWxzZQorCQlmcmVxID0gMDsKKwlpZiAocGxsID09ICZwbGxiICYmIChyZWcgJiAoMSA8PCAyOCkpKQorCQlmcmVxIC89IDI7CisJcmV0dXJuIGZyZXE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBfX2luaXQgYXQ5MV9wbGxfY2FsYyh1bnNpZ25lZCBtYWluX2ZyZXEsIHVuc2lnbmVkIG91dF9mcmVxKQoreworCXVuc2lnbmVkIGksIGRpdiA9IDAsIG11bCA9IDAsIGRpZmYgPSAxIDw8IDMwOworCXVuc2lnbmVkIHJldCA9IChvdXRfZnJlcSA+IDE1NTAwMDAwMCkgPyAweGJlMDAgOiAweDNlMDA7CisKKwkvKiBQTEwgb3V0cHV0IG1heCAyNDAgTUh6IChvciAxODAgTUh6IHBlciBlcnJhdGEpICovCisJaWYgKG91dF9mcmVxID4gMjQwMDAwMDAwKQorCQlnb3RvIGZhaWw7CisKKwlmb3IgKGkgPSAxOyBpIDwgMjU2OyBpKyspIHsKKwkJaW50IGRpZmYxOworCQl1bnNpZ25lZCBpbnB1dCwgbXVsMTsKKworCQkvKgorCQkgKiBQTEwgaW5wdXQgYmV0d2VlbiAxTUh6IGFuZCAzMk1IeiBwZXIgc3BlYywgYnV0IGxvd2VyCisJCSAqIGZyZXF1ZW5jZXMgc2VlbSBuZWNlc3NhcnkgaW4gc29tZSBjYXNlcyBzbyBhbGxvdyAxMDBLLgorCQkgKi8KKwkJaW5wdXQgPSBtYWluX2ZyZXEgLyBpOworCQlpZiAoaW5wdXQgPCAxMDAwMDApCisJCQljb250aW51ZTsKKwkJaWYgKGlucHV0ID4gMzIwMDAwMDApCisJCQljb250aW51ZTsKKworCQltdWwxID0gb3V0X2ZyZXEgLyBpbnB1dDsKKwkJaWYgKG11bDEgPiAyMDQ4KQorCQkJY29udGludWU7CisJCWlmIChtdWwxIDwgMikKKwkJCWdvdG8gZmFpbDsKKworCQlkaWZmMSA9IG91dF9mcmVxIC0gaW5wdXQgKiBtdWwxOworCQlpZiAoZGlmZjEgPCAwKQorCQkJZGlmZjEgPSAtZGlmZjE7CisJCWlmIChkaWZmID4gZGlmZjEpIHsKKwkJCWRpZmYgPSBkaWZmMTsKKwkJCWRpdiA9IGk7CisJCQltdWwgPSBtdWwxOworCQkJaWYgKGRpZmYgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSAyNTYgJiYgZGlmZiA+IChvdXRfZnJlcSA+PiA1KSkKKwkJZ290byBmYWlsOworCXJldHVybiByZXQgfCAoKG11bCAtIDEpIDw8IDE2KSB8IGRpdjsKK2ZhaWw6CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgYXQ5MV9jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKK3sKKwl1bnNpZ25lZCB0bXAsIGZyZXEsIG1ja3I7CisKKwlzcGluX2xvY2tfaW5pdCgmY2xrX2xvY2spOworCisJLyoKKwkgKiBXaGVuIHRoZSBib290bG9hZGVyIGluaXRpYWxpemVkIHRoZSBtYWluIG9zY2lsbGF0b3IgY29ycmVjdGx5LAorCSAqIHRoZXJlJ3Mgbm8gcHJvYmxlbSB1c2luZyB0aGUgY3ljbGUgY291bnRlci4gIEJ1dCBpZiBpdCBkaWRuJ3QsCisJICogb3Igd2hlbiB1c2luZyBvc2NpbGxhdG9yIGJ5cGFzcyBtb2RlLCB3ZSBtdXN0IGJlIHRvbGQgdGhlIHNwZWVkCisJICogb2YgdGhlIG1haW4gY2xvY2suCisJICovCisJaWYgKCFtYWluX2Nsb2NrKSB7CisJCWRvIHsKKwkJCXRtcCA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX01DRlIpOworCQl9IHdoaWxlICghKHRtcCAmIDB4MTAwMDApKTsKKwkJbWFpbl9jbG9jayA9ICh0bXAgJiAweGZmZmYpICogKEFUOTFfU0xPV19DTE9DSyAvIDE2KTsKKwl9CisJbWFpbl9jbGsucmF0ZV9oeiA9IG1haW5fY2xvY2s7CisKKwkvKiByZXBvcnQgaWYgUExMQSBpcyBtb3JlIHRoYW4gbWlsZGx5IG92ZXJjbG9ja2VkICovCisJcGxsYS5yYXRlX2h6ID0gYXQ5MV9wbGxfcmF0ZSgmcGxsYSwgbWFpbl9jbG9jaywgYXQ5MV9zeXNfcmVhZChBVDkxX0NLR1JfUExMQVIpKTsKKwlpZiAocGxsYS5yYXRlX2h6ID4gMjA5MDAwMDAwKQorCQlwcl9pbmZvKCJDbG9ja3M6IFBMTEEgb3ZlcmNsb2NrZWQsICVsZCBNSHpcbiIsIHBsbGEucmF0ZV9oeiAvIDEwMDAwMDApOworCisJLyoKKwkgKiBVU0IgY2xvY2sgaW5pdDogIGNob29zZSA0OCBNSHogUExMQiB2YWx1ZSwgdHVybiBhbGwgY2xvY2tzIG9mZiwKKwkgKiBkaXNhYmxlIDQ4TUh6IGNsb2NrIGR1cmluZyB1c2IgcGVyaXBoZXJhbCBzdXNwZW5kLgorCSAqCisJICogUkVWSVNJVDogIGFzc3VtZXMgTUNLIGRvZXNuJ3QgZGVyaXZlIGZyb20gUExMQiEKKwkgKi8KKwlhdDkxX3BsbGJfdXNiX2luaXQgPSBhdDkxX3BsbF9jYWxjKG1haW5fY2xvY2ssIDQ4MDAwMDAwICogMikgfCAweDEwMDAwMDAwOworCXBsbGIucmF0ZV9oeiA9IGF0OTFfcGxsX3JhdGUoJnBsbGIsIG1haW5fY2xvY2ssIGF0OTFfcGxsYl91c2JfaW5pdCk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENEUiwgKDEgPDwgQVQ5MV9JRF9VSFApIHwgKDEgPDwgQVQ5MV9JRF9VRFApKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0RSLCBBVDkxX1BNQ19VSFAgfCBBVDkxX1BNQ19VRFApOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfQ0tHUl9QTExCUiwgMCk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MV9QTUNfTUNLVURQKTsKKworCS8qCisJICogTUNLIGFuZCBDUFUgZGVyaXZlIGZyb20gb25lIG9mIHRob3NlIHByaW1hcnkgY2xvY2tzLgorCSAqIEZvciBub3csIGFzc3VtZSB0aGlzIHBhcmVudGFnZSB3b24ndCBjaGFuZ2UuCisJICovCisJbWNrciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfTUNLUik7CisJbWNrLnBhcmVudCA9IGNsb2NrX2xpc3RbbWNrciAmIEFUOTFfUE1DX0NTU107CisJbWNrLnBhcmVudC0+dXNlcnMrKzsKKwlmcmVxID0gbWNrLnBhcmVudC0+cmF0ZV9oejsKKwlmcmVxIC89ICgxIDw8ICgobWNrciA+PiAyKSAmIDMpKTsJCS8qIHByZXNjYWxlICovCisJbWNrLnJhdGVfaHogPSBmcmVxIC8gKDEgKyAoKG1ja3IgPj4gOCkgJiAzKSk7CS8qIG1kaXYgKi8KKworCXByaW50aygiQ2xvY2tzOiBDUFUgJXUgTUh6LCBtYXN0ZXIgJXUgTUh6LCBtYWluICV1LiUwM3UgTUh6XG4iLAorCQlmcmVxIC8gMTAwMDAwMCwgKHVuc2lnbmVkKSBtY2sucmF0ZV9oeiAvIDEwMDAwMDAsCisJCSh1bnNpZ25lZCkgbWFpbl9jbG9jayAvIDEwMDAwMDAsCisJCSgodW5zaWduZWQpIG1haW5fY2xvY2sgJSAxMDAwMDAwKSAvIDEwMDApOworCisJLyogRklYTUUgZ2V0IHJpZCBvZiBtYXN0ZXJfY2xvY2sgZ2xvYmFsICovCisJYXQ5MV9tYXN0ZXJfY2xvY2sgPSBtY2sucmF0ZV9oejsKKworI2lmZGVmIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MKKwkvKiBlc3RhYmxpc2ggUENLMC4uUENLMyBwYXJlbnRhZ2UgKi8KKwlmb3IgKHRtcCA9IDA7IHRtcCA8IEFSUkFZX1NJWkUoY2xvY2tfbGlzdCk7IHRtcCsrKSB7CisJCXN0cnVjdCBjbGsJKmNsayA9IGNsb2NrX2xpc3RbdG1wXSwgKnBhcmVudDsKKwkJdTMyCQlwY2tyOworCisJCWlmICghY2xrLT5wcm9ncmFtbWFibGUpCisJCQljb250aW51ZTsKKworCQlwY2tyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19QQ0tSKGNsay0+aWQpKTsKKwkJcGFyZW50ID0gY2xvY2tfbGlzdFtwY2tyICYgM107CisJCWNsay0+cGFyZW50ID0gcGFyZW50OworCQljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHogLyAoMSA8PCAoKHBja3IgPj4gMikgJiAzKSk7CisJfQorI2Vsc2UKKwkvKiBkaXNhYmxlIHVudXNlZCBjbG9ja3MgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0RSLCBBVDkxX1BNQ19QQ0swIHwgQVQ5MV9QTUNfUENLMSB8IEFUOTFfUE1DX1BDSzIgfCBBVDkxX1BNQ19QQ0szKTsKKyNlbmRpZgkvKiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTICovCisKKwkvKiBGSVhNRSBzZXZlcmFsIHVudXNlZCBjbG9ja3MgbWF5IHN0aWxsIGJlIGFjdGl2ZS4uLiAgcHJvdmlkZQorCSAqIGEgQ09ORklHIG9wdGlvbiB0byB0dXJuIG9mZiBhbGwgdW51c2VkIGNsb2NrcyBhdCBzb21lIHBvaW50CisJICogYmVmb3JlIGRyaXZlciBpbml0IHN0YXJ0cy4KKwkgKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NDhmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY29tbW9uLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY29tbW9uLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGF0OTFybTkyMDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TWVMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1lTKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfU1BJLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NQSSksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TU0MyLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NTQzIpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfU1NDMSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TU0MxKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NTQzAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1NDMCksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9VUzMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVVMzKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1VTMiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9VUzIpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVVMxLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1VTMSksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9VUzAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVVMwKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX0VNQUMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfRU1BQyksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9UV0ksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVFdJKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX01DSSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9NQ0kpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVURQLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1VEUCksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9UQ0IxLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1RDQjEpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVENCMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9UQ0IwKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoYXQ5MXJtOTIwMF9pb19kZXNjLCBBUlJBWV9TSVpFKGF0OTFybTkyMDBfaW9fZGVzYykpOworfQorCisKK3Vuc2lnbmVkIGxvbmcgYXQ5MV9tYXN0ZXJfY2xvY2s7CisKK0VYUE9SVF9TWU1CT0woYXQ5MV9tYXN0ZXJfY2xvY2spOworCisKK2ludCBhdDkxX3NlcmlhbF9tYXBbQVQ5MV9OUl9VQVJUXTsKK2ludCBhdDkxX2NvbnNvbGVfcG9ydDsKKworRVhQT1JUX1NZTUJPTChhdDkxX3NlcmlhbF9tYXApOworRVhQT1JUX1NZTUJPTChhdDkxX2NvbnNvbGVfcG9ydCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYzZTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcGlvLmg+CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVU0IgSG9zdAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKK3N0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MXJtOTIwMF91c2JoX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX1VIUF9CQVNFLAorCQkuZW5kCT0gQVQ5MV9VSFBfQkFTRSArIFNaXzFNIC0xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9JRF9VSFAsCisJCS5lbmQJPSBBVDkxX0lEX1VIUCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdXNiaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFybTkyMDAtb2hjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGF0OTFybTkyMDBfdXNiaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MXJtOTIwMF91c2JoX3Jlc291cmNlKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCXVzYmhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF91c2JoX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVU0IgRGV2aWNlIChHYWRnZXQpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFfdWRjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1VEUCwKKwkJLmVuZAk9IEFUOTFfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVkY19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYXQ5MV91ZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX3VkY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWlmIChkYXRhLT52YnVzX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+dmJ1c19waW4sIDEpOworCX0KKwlpZiAoZGF0YS0+cHVsbHVwX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cHVsbHVwX3BpbiwgMCk7CisKKwl1ZGNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF91ZGNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBFdGhlcm5ldAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSTV9BVDkxX0VUSEVSKSB8fCBkZWZpbmVkKENPTkZJR19BUk1fQVQ5MV9FVEhFUl9NT0RVTEUpCitzdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIGV0aF9kYXRhOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2V0aF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfZXRoZXIiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmV0aF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWlmIChkYXRhLT5waHlfaXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOworCX0KKworCS8qIFBpbnMgdXNlZCBmb3IgTUlJIGFuZCBSTUlJICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNiwgMCk7CS8qIEVNRElPICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMCk7CS8qIEVNREMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAwKTsJLyogRVJYRVIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogRVJYMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTIsIDApOwkvKiBFUlgwICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CS8qIEVDUlNfRUNSU0RWICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIEVUWDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkvKiBFVFgwICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAwKTsJLyogRVRYRU4gKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDApOwkvKiBFVFhDS19FUkVGQ0sgKi8KKworCWlmICghZGF0YS0+aXNfcm1paSkgeworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAwKTsJLyogRVJYQ0sgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxOCwgMCk7CS8qIEVDT0wgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNywgMCk7CS8qIEVSWERWICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTYsIDApOwkvKiBFUlgzICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDApOwkvKiBFUlgyICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTQsIDApOwkvKiBFVFhFUiAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjEzLCAwKTsJLyogRVRYMyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjEyLCAwKTsJLyogRVRYMiAqLworCX0KKworCWV0aF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX2V0aF9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IGF0OTFfZXRoX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENvbXBhY3QgRmxhc2ggLyBQQ01DSUEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfY2ZfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX2NmIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmNmX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIGlucHV0L2lycSAqLworCWlmIChkYXRhLT5pcnFfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+aXJxX3BpbiwgMSk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmlycV9waW4sIDEpOworCX0KKwlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOworCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmRldF9waW4sIDEpOworCisJLyogb3V0cHV0cywgaW5pdGlhbGx5IG9mZiAqLworCWlmIChkYXRhLT52Y2NfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52Y2NfcGluLCAwKTsKKwlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yc3RfcGluLCAwKTsKKworCWNmX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfY2ZfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTU1DIC8gU0QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MVJNOTIwMCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTFSTTkyMDBfTU9EVUxFKQorc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBtbWNfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxX21tY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9NQ0ksCisJCS5lbmQJPSBBVDkxX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9tbWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxcm05MjAwX21jaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBhdDkxX21tY19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF0OTFfbW1jX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJLyogaW5wdXQvaXJxICovCisJaWYgKGRhdGEtPmRldF9waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7CisJfQorCWlmIChkYXRhLT53cF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+d3BfcGluLCAxKTsKKworCS8qIENMSyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOworCisJaWYgKGRhdGEtPmlzX2IpIHsKKwkJLyogQ01EICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgMCk7CisKKwkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOworCQlpZiAoZGF0YS0+d2lyZTQpIHsKKwkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOworCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CisJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIENNRCAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI4LCAwKTsKKworCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOworCQlpZiAoZGF0YS0+d2lyZTQpIHsKKwkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMywgMCk7CisJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOworCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsKKwkJfQorCX0KKworCW1tY19kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX21tY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZDU0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ2VuZXJpYy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKwordm9pZCBhdDkxX2dwaW9faXJxX3NldHVwKHVuc2lnbmVkIGJhbmtzKTsKKworc3RydWN0IHN5c190aW1lcjsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGF0OTFybTkyMDBfdGltZXI7CisKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX21hcF9pbyh2b2lkKTsKKworZXh0ZXJuIGludCBfX2luaXQgYXQ5MV9jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQyZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSFAgTGFicworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKK3N0YXRpYyBjb25zdCB1MzIgcGlvX2NvbnRyb2xsZXJfb2Zmc2V0WzRdID0geworCUFUOTFfUElPQSwKKwlBVDkxX1BJT0IsCisJQVQ5MV9QSU9DLAorCUFUOTFfUElPRCwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpwaW5fdG9fY29udHJvbGxlcih1bnNpZ25lZCBwaW4pCit7CisJdm9pZCBfX2lvbWVtICpzeXNfYmFzZSA9ICh2b2lkIF9faW9tZW0gKikgQVQ5MV9WQV9CQVNFX1NZUzsKKworCXBpbiAtPSBQSU5fQkFTRTsKKwlwaW4gLz0gMzI7CisJaWYgKGxpa2VseShwaW4gPCBCR0FfR1BJT19CQU5LUykpCisJCXJldHVybiBzeXNfYmFzZSArIHBpb19jb250cm9sbGVyX29mZnNldFtwaW5dOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGluX3RvX21hc2sodW5zaWduZWQgcGluKQoreworCXBpbiAtPSBQSU5fQkFTRTsKKwlyZXR1cm4gMSA8PCAocGluICUgMzIpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBOb3QgYWxsIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBhcmUgZXhwb3NlZCB0aHJvdWdoIHRoZXNlIGNhbGxzOyB0aGV5CisgKiBvbmx5IGVuY2Fwc3VsYXRlIHRoZSBtb3N0IGNvbW1vbiBmZWF0dXJlcyBhbmQgbW9kZXMuICAoU28gaWYgeW91CisgKiB3YW50IHRvIGNoYW5nZSBzaWduYWxzIGluIGdyb3VwcywgZG8gaXQgZGlyZWN0bHkuKQorICoKKyAqIEJvb3Rsb2FkZXJzIHdpbGwgdXN1YWxseSBoYW5kbGUgc29tZSBvZiB0aGUgcGluIG11bHRpcGxleGluZyBzZXR1cC4KKyAqIFRoZSBpbnRlbnQgaXMgY2VydGFpbmx5IHRoYXQgYnkgdGhlIHRpbWUgTGludXggaXMgZnVsbHkgYm9vdGVkLCBhbGwKKyAqIHBpbnMgc2hvdWxkIGhhdmUgYmVlbiBmdWxseSBpbml0aWFsaXplZC4gIFRoZXNlIHNldHVwIGNhbGxzIHNob3VsZAorICogb25seSBiZSB1c2VkIGJ5IGJvYXJkIHNldHVwIHJvdXRpbmVzLCBvciBwb3NzaWJseSBpbiBkcml2ZXIgcHJvYmUoKS4KKyAqCisgKiBGb3IgYm9vdGxvYWRlcnMgZG9pbmcgYWxsIHRoYXQgc2V0dXAsIHRoZXNlIGNhbGxzIGNvdWxkIGJlIGlubGluZWQKKyAqIGFzIE5PUHMgc28gTGludXggd29uJ3QgZHVwbGljYXRlIGFueSBzZXR1cCBjb2RlCisgKi8KKworCisvKgorICogbXV4IHRoZSBwaW4gdG8gdGhlICJBIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCisgKi8KK2ludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0FfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCit7CisJdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCisJaWYgKCFwaW8pCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0FTUik7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhdDkxX3NldF9BX3BlcmlwaCk7CisKKworLyoKKyAqIG11eCB0aGUgcGluIHRvIHRoZSAiQiIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgorICovCitpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19CU1IpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUERSKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXQ5MV9zZXRfQl9wZXJpcGgpOworCisKKy8qCisgKiBtdXggdGhlIHBpbiB0byB0aGUgZ3BpbyBjb250cm9sbGVyIChpbnN0ZWFkIG9mICJBIiBvciAiQiIgcGVyaXBoZXJhbCksIGFuZAorICogY29uZmlndXJlIGl0IGZvciBhbiBpbnB1dC4KKyAqLworaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZ3Bpb19pbnB1dCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19pbnB1dCk7CisKKworLyoKKyAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiIG9yICJCIiBwZXJpcGhlcmFsKSwKKyAqIGFuZCBjb25maWd1cmUgaXQgZm9yIGFuIG91dHB1dC4KKyAqLworaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZ3Bpb19vdXRwdXQodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCisJaWYgKCFwaW8pCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUFVEUik7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWx1ZSA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7CisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRVIpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhdDkxX3NldF9ncGlvX291dHB1dCk7CisKKworLyoKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBnbGl0Y2ggZmlsdGVyOyBtb3N0bHkgdXNlZCB3aXRoIElSUSBoYW5kbGluZy4KKyAqLworaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVnbGl0Y2godW5zaWduZWQgcGluLCBpbnQgaXNfb24pCit7CisJdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCisJaWYgKCFwaW8pCisJCXJldHVybiAtRUlOVkFMOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAoaXNfb24gPyBQSU9fSUZFUiA6IFBJT19JRkRSKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGF0OTFfc2V0X2RlZ2xpdGNoKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoKKyAqIGFzc3VtaW5nIHRoZSBwaW4gaXMgbXV4ZWQgYXMgYSBncGlvIG91dHB1dCwgc2V0IGl0cyB2YWx1ZS4KKyAqLworaW50IGF0OTFfc2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCisJaWYgKCFwaW8pCisJCXJldHVybiAtRUlOVkFMOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsdWUgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGF0OTFfc2V0X2dwaW9fdmFsdWUpOworCisKKy8qCisgKiByZWFkIHRoZSBwaW4ncyB2YWx1ZSAod29ya3MgZXZlbiBpZiBpdCdzIG5vdCBtdXhlZCBhcyBhIGdwaW8pLgorICovCitpbnQgYXQ5MV9nZXRfZ3Bpb192YWx1ZSh1bnNpZ25lZCBwaW4pCit7CisJdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCXUzMgkJcGRzcjsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwZHNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX1BEU1IpOworCXJldHVybiAocGRzciAmIG1hc2spICE9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGF0OTFfZ2V0X2dwaW9fdmFsdWUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKiBTZXZlcmFsIEFJQyBjb250cm9sbGVyIGlycXMgYXJlIGRpc3BhdGNoZWQgdGhyb3VnaCB0aGlzIEdQSU8gaGFuZGxlci4KKyAqIFRvIHVzZSBhbnkgQVQ5MV9QSU5fKiBhcyBhbiBleHRlcm5hbGx5IHRyaWdnZXJlZCBJUlEsIGZpcnN0IGNhbGwKKyAqIGF0OTFfc2V0X2dwaW9faW5wdXQoKSB0aGVuIG1heWJlIGVuYWJsZSBpdHMgZ2xpdGNoIGZpbHRlci4KKyAqIFRoZW4ganVzdCByZXF1ZXN0X2lycSgpIHdpdGggdGhlIHBpbiBJRDsgaXQgd29ya3MgbGlrZSBhbnkgQVJNIElSUQorICogaGFuZGxlciwgdGhvdWdoIGl0IGFsd2F5cyB0cmlnZ2VycyBvbiByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZXMuCisgKgorICogQWx0ZXJuYXRpdmVseSwgY2VydGFpbiBwaW5zIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIElSUTAuLklSUTYgYWZ0ZXIKKyAqIGNvbmZpZ3VyaW5nIHRoZW0gd2l0aCBhdDkxX3NldF9hX3BlcmlwaCgpIG9yIGF0OTFfc2V0X2JfcGVyaXBoKCkuCisgKiBJUlEwLi5JUlE2IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGUuZy4gbGV2ZWwgdnMgZWRnZSB0cmlnZ2VyaW5nLgorICovCisKK3N0YXRpYyB2b2lkIGdwaW9faXJxX21hc2sodW5zaWduZWQgcGluKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmIChwaW8pCisJCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIHBpbikKK3sKKwl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisKKwlpZiAocGlvKQorCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lFUik7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBwaW4sIHVuc2lnbmVkIHR5cGUpCit7CisJcmV0dXJuICh0eXBlID09IElSUVRfQk9USEVER0UpID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBncGlvX2lycWNoaXAgPSB7CisJLm1hc2sJCT0gZ3Bpb19pcnFfbWFzaywKKwkudW5tYXNrCQk9IGdwaW9faXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBncGlvX2lycV90eXBlLAorfTsKKworc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZAlwaW47CisJc3RydWN0IGlycWRlc2MJKmdwaW87CisJdm9pZCBfX2lvbWVtCSpwaW87CisJdTMyCQlpc3I7CisKKwlwaW8gPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikgZGVzYy0+Y2hpcGRhdGE7CisKKwkvKiB0ZW1wb3JhcmlseSBtYXNrIChsZXZlbCBzZW5zaXRpdmUpIHBhcmVudCBJUlEgKi8KKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwlmb3IgKDs7KSB7CisJCWlzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JU1IpICYgX19yYXdfcmVhZGwocGlvICsgUElPX0lNUik7CisJCWlmICghaXNyKQorCQkJYnJlYWs7CisKKwkJcGluID0gKHVuc2lnbmVkKSBkZXNjLT5kYXRhOworCQlncGlvID0gJmlycV9kZXNjW3Bpbl07CisKKwkJd2hpbGUgKGlzcikgeworCQkJaWYgKGlzciAmIDEpCisJCQkJZ3Bpby0+aGFuZGxlKHBpbiwgZ3BpbywgcmVncyk7CisJCQlwaW4rKzsKKwkJCWdwaW8rKzsKKwkJCWlzciA+Pj0gMTsKKwkJfQorCX0KKwlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkvKiBub3cgaXQgbWF5IHJlLXRyaWdnZXIgKi8KK30KKworLyogY2FsbCB0aGlzIGZyb20gYm9hcmQtc3BlY2lmaWMgaW5pdF9pcnEgKi8KK3ZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFfc2V0dXAodW5zaWduZWQgYmFua3MpCit7CisJdW5zaWduZWQJcGlvYywgcGluLCBpZDsKKworCWlmIChiYW5rcyA+IDQpCisJCWJhbmtzID0gNDsKKwlmb3IgKHBpb2MgPSAwLCBwaW4gPSBQSU5fQkFTRSwgaWQgPSBBVDkxX0lEX1BJT0E7CisJCQlwaW9jIDwgYmFua3M7CisJCQlwaW9jKyssIGlkKyspIHsKKwkJdm9pZCBfX2lvbWVtCSpjb250cm9sbGVyOworCQl1bnNpZ25lZAlpOworCisJCWNvbnRyb2xsZXIgPSAodm9pZCBfX2lvbWVtICopIEFUOTFfVkFfQkFTRV9TWVMgKyBwaW9fY29udHJvbGxlcl9vZmZzZXRbcGlvY107CisJCV9fcmF3X3dyaXRlbCh+MCwgY29udHJvbGxlciArIFBJT19JRFIpOworCisJCXNldF9pcnFfZGF0YShpZCwgKHZvaWQgKikgcGluKTsKKwkJc2V0X2lycV9jaGlwZGF0YShpZCwgKHZvaWQgX19mb3JjZSAqKSBjb250cm9sbGVyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKywgcGluKyspIHsKKwkJCXNldF9pcnFfY2hpcChwaW4sICZncGlvX2lycWNoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKHBpbiwgZG9fc2ltcGxlX0lSUSk7CisJCQlzZXRfaXJxX2ZsYWdzKHBpbiwgSVJRRl9WQUxJRCk7CisJCX0KKworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpZCwgZ3Bpb19pcnFfaGFuZGxlcik7CisKKwkJLyogZW5hYmxlIHRoZSBQSU8gcGVyaXBoZXJhbCBjbG9jayAqLworCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0VSLCAxIDw8IGlkKTsKKwl9CisJcHJfaW5mbygiQVQ5MTogJWQgZ3BpbyBpcnFzIGluICVkIGJhbmtzXG4iLCBwaW4gLSBQSU5fQkFTRSwgYmFua3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjJiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFNBTiBQZW9wbGUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVRNRUwKKyAqICBDb3B5cmlnaHQgKEMpIFJpY2sgQnJvbnNvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisvKgorICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0OTFybTkyMDBfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7CisJNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbCAqLworCTAsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLworCTAsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLworCTAsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLworCTAsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLworCTYsCS8qIFVTQVJUIDAgKi8KKwk2LAkvKiBVU0FSVCAxICovCisJNiwJLyogVVNBUlQgMiAqLworCTYsCS8qIFVTQVJUIDMgKi8KKwkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCisJNCwJLyogVVNCIERldmljZSBQb3J0ICovCisJMCwJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCisJNiwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisJNSwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgKi8KKwk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAqLworCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyICovCisJMCwJLyogVGltZXIgQ291bnRlciAwICovCisJMCwJLyogVGltZXIgQ291bnRlciAxICovCisJMCwJLyogVGltZXIgQ291bnRlciAyICovCisJMCwJLyogVGltZXIgQ291bnRlciAzICovCisJMCwJLyogVGltZXIgQ291bnRlciA0ICovCisJMCwJLyogVGltZXIgQ291bnRlciA1ICovCisJMywJLyogVVNCIEhvc3QgcG9ydCAqLworCTMsCS8qIEV0aGVybmV0IE1BQyAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KK307CisKKworc3RhdGljIHZvaWQgYXQ5MXJtOTIwMF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qIERpc2FibGUgaW50ZXJydXB0IG9uIEFJQyAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX0lEQ1IsIDEgPDwgaXJxKTsKK30KKworc3RhdGljIHZvaWQgYXQ5MXJtOTIwMF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUMgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19JRUNSLCAxIDw8IGlycSk7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MXJtOTIwMF9pcnFfdHlwZSh1bnNpZ25lZCBpcnEsIHVuc2lnbmVkIHR5cGUpCit7CisJdW5zaWduZWQgaW50IHNtciwgc3JjdHlwZTsKKworCS8qIGNoYW5nZSB0cmlnZ2VyaW5nIG9ubHkgZm9yIEZJUSBhbmQgZXh0ZXJuYWwgSVJRMC4uSVJRNiAqLworCWlmICgoaXJxIDwgQVQ5MV9JRF9JUlEwKSAmJiAoaXJxICE9IEFUOTFfSURfRklRKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElSUVRfSElHSDoKKwkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfSElHSDsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX1JJU0lORzoKKwkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfUklTSU5HOworCQlicmVhazsKKwljYXNlIElSUVRfTE9XOgorCQlzcmN0eXBlID0gQVQ5MV9BSUNfU1JDVFlQRV9MT1c7CisJCWJyZWFrOworCWNhc2UgSVJRVF9GQUxMSU5HOgorCQlzcmN0eXBlID0gQVQ5MV9BSUNfU1JDVFlQRV9GQUxMSU5HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbXIgPSBhdDkxX3N5c19yZWFkKEFUOTFfQUlDX1NNUihpcnEpKSAmIH5BVDkxX0FJQ19TUkNUWVBFOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX1NNUihpcnEpLCBzbXIgfCBzcmN0eXBlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGF0OTFybTkyMDBfaXJxX2NoaXAgPSB7CisJLmFjawkJPSBhdDkxcm05MjAwX21hc2tfaXJxLAorCS5tYXNrCQk9IGF0OTFybTkyMDBfbWFza19pcnEsCisJLnVubWFzawkJPSBhdDkxcm05MjAwX3VubWFza19pcnEsCisJLnNldF90eXBlCT0gYXQ5MXJtOTIwMF9pcnFfdHlwZSwKK307CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBBSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgKi8KK3ZvaWQgX19pbml0IGF0OTFybTkyMDBfaW5pdF9pcnEodW5zaWduZWQgaW50IHByaW9yaXR5W05SX0FJQ19JUlFTXSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIE5vIHByaW9yaXR5IGxpc3Qgc3BlY2lmaWVkIGZvciB0aGlzIGJvYXJkIC0+IHVzZSBkZWZhdWx0cyAqLworCWlmIChwcmlvcml0eSA9PSBOVUxMKQorCQlwcmlvcml0eSA9IGF0OTFybTkyMDBfZGVmYXVsdF9pcnFfcHJpb3JpdHk7CisKKwkvKgorCSAqIFRoZSBJVlIgaXMgdXNlZCBieSBtYWNybyBnZXRfaXJxbnJfYW5kX2Jhc2UgdG8gcmVhZCBhbmQgdmVyaWZ5LgorCSAqIFRoZSBpcnEgbnVtYmVyIGlzIE5SX0FJQ19JUlFTIHdoZW4gYSBzcHVyaW91cyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9BSUNfSVJRUzsgaSsrKSB7CisJCS8qIFB1dCBpcnEgbnVtYmVyIGluIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXI6ICovCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX1NWUihpKSwgaSk7CisJCS8qIFN0b3JlIHRoZSBTb3VyY2UgTW9kZSBSZWdpc3RlciBhcyBkZWZpbmVkIGluIHRhYmxlIGFib3ZlICovCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX1NNUihpKSwgQVQ5MV9BSUNfU1JDVFlQRV9MT1cgfCBwcmlvcml0eVtpXSk7CisKKwkJc2V0X2lycV9jaGlwKGksICZhdDkxcm05MjAwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCisJCS8qIFBlcmZvcm0gOCBFbmQgT2YgSW50ZXJydXB0IENvbW1hbmQgdG8gbWFrZSBzdXJlIEFJQyB3aWxsIG5vdCBMb2NrIG91dCBuSVJRICovCisJCWlmIChpIDwgOCkKKwkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX0VPSUNSLCAwKTsKKwl9CisKKwkvKgorCSAqIFNwdXJpb3VzIEludGVycnVwdCBJRCBpbiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgaXMgTlJfQUlDX0lSUVMKKwkgKiBXaGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0LCB0aGUgSVJRIFZlY3RvciBSZWdpc3RlciByZWFkcyB0aGUgdmFsdWUgc3RvcmVkIGluIEFJQ19TUFUKKwkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX0FJQ19TUFUsIE5SX0FJQ19JUlFTKTsKKworCS8qIE5vIGRlYnVnZ2luZyBpbiBBSUM6IERlYnVnIChQcm90ZWN0KSBDb250cm9sIFJlZ2lzdGVyICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9BSUNfRENSLCAwKTsKKworCS8qIERpc2FibGUgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX0lEQ1IsIDB4RkZGRkZGRkYpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfQUlDX0lDQ1IsIDB4RkZGRkZGRkYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2ZGQyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC90aW1lLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFUTUVMCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisvKgorICogVGhlIFNUX0NSVFIgaXMgdXBkYXRlZCBhc3luY2hyb25vdXNseSB0byB0aGUgbWFzdGVyIGNsb2NrLiAgSXQgaXMgdGhlcmVmb3JlCisgKiAgbmVjZXNzYXJ5IHRvIHJlYWQgaXQgdHdpY2UgKHdpdGggdGhlIHNhbWUgdmFsdWUpIHRvIGVuc3VyZSBhY2N1cmFjeS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfQ1JUUih2b2lkKSB7CisJdW5zaWduZWQgbG9uZyB4MSwgeDI7CisKKwlkbyB7CisJCXgxID0gYXQ5MV9zeXNfcmVhZChBVDkxX1NUX0NSVFIpOworCQl4MiA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9DUlRSKTsKKwl9IHdoaWxlICh4MSAhPSB4Mik7CisKKwlyZXR1cm4geDE7Cit9CisKKy8qCisgKiBSZXR1cm5zIG51bWJlciBvZiBtaWNyb3NlY29uZHMgc2luY2UgbGFzdCB0aW1lciBpbnRlcnJ1cHQuICBOb3RlIHRoYXQgaW50ZXJydXB0cworICogd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgZG9fZ2V0dGltZW9mZGF5KCkKKyAqICAnTEFUQ0gnIGlzIGh3Y2xvY2sgdGlja3MgKHNlZSBDTE9DS19USUNLX1JBVEUgaW4gdGltZXguaCkgcGVyIGppZmZ5LgorICogICd0aWNrJyBpcyB1c2VjcyBwZXIgamlmZnkgKGxpbnV4L3RpbWV4LmgpLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhdDkxcm05MjAwX2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGVsYXBzZWQ7CisKKwllbGFwc2VkID0gKHJlYWRfQ1JUUigpIC0gYXQ5MV9zeXNfcmVhZChBVDkxX1NUX1JUQVIpKSAmIEFUOTFfU1RfQUxNVjsKKworCXJldHVybiAodW5zaWduZWQgbG9uZykoZWxhcHNlZCAqICh0aWNrX25zZWMgLyAxMDAwKSkgLyBMQVRDSDsKK30KKworLyoKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhdDkxcm05MjAwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgcnRhcjsKKworCWlmIChhdDkxX3N5c19yZWFkKEFUOTFfU1RfU1IpICYgQVQ5MV9TVF9QSVRTKSB7CS8qIFRoaXMgaXMgYSBzaGFyZWQgaW50ZXJydXB0ICovCisJCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJCWRvIHsKKwkJCXRpbWVyX3RpY2socmVncyk7CisJCQlydGFyID0gKGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9SVEFSKSArIExBVENIKSAmIEFUOTFfU1RfQUxNVjsKKwkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfUlRBUiwgcnRhcik7CisJCX0gd2hpbGUgKCgocmVhZF9DUlRSKCkgLSBhdDkxX3N5c19yZWFkKEFUOTFfU1RfUlRBUikpICYgQVQ5MV9TVF9BTE1WKSA+PSBMQVRDSCk7CisKKwkJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWVsc2UKKwkJcmV0dXJuIElSUV9OT05FOwkJLyogbm90IGhhbmRsZWQgKi8KK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYXQ5MXJtOTIwMF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gImF0OTFfdGljayIsCisJLmZsYWdzCQk9IFNBX1NISVJRIHwgU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gYXQ5MXJtOTIwMF90aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LgorICovCit2b2lkIF9faW5pdCBhdDkxcm05MjAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwkvKiBEaXNhYmxlIGFsbCB0aW1lciBpbnRlcnJ1cHRzICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9JRFIsIEFUOTFfU1RfUElUUyB8IEFUOTFfU1RfV0RPVkYgfCBBVDkxX1NUX1JUVElOQyB8IEFUOTFfU1RfQUxNUyk7CisJKHZvaWQpIGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9TUik7CS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKworCS8qCisJICogTWFrZSBJUlFzIGhhcHBlbiBmb3IgdGhlIHN5c3RlbSB0aW1lci4KKwkgKi8KKwlzZXR1cF9pcnEoQVQ5MV9JRF9TWVMsICZhdDkxcm05MjAwX3RpbWVyX2lycSk7CisKKwkvKiBTZXQgaW5pdGlhbCBhbGFybSB0byAwICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9SVEFSLCAwKTsKKworCS8qIFJlYWwgdGltZSBjb3VudGVyIGluY3JlbWVudGVkIGV2ZXJ5IDMwLjUxNzU4IG1pY3Jvc2Vjb25kcyAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfUlRNUiwgMSk7CisKKwkvKiBTZXQgUGVyaW9kIEludGVydmFsIHRpbWVyICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9QSU1SLCBMQVRDSCk7CisKKwkvKiBDaGFuZ2UgdGhlIGtlcm5lbCdzICd0aWNrJyB2YWx1ZSB0byAxMDAwOSB1c2VjLiAodGhlIGRlZmF1bHQgaXMgMTAwMDApICovCisJdGlja191c2VjID0gKExBVENIICogMTAwMDAwMCkgLyBDTE9DS19USUNLX1JBVEU7CisKKwkvKiBFbmFibGUgUGVyaW9kIEludGVydmFsIFRpbWVyIGludGVycnVwdCAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfSUVSLCBBVDkxX1NUX1BJVFMpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGF0OTFybTkyMDBfdGltZXIgPSB7CisJLmluaXQJCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gYXQ5MXJtOTIwMF9nZXR0aW1lb2Zmc2V0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVkODk2ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1pZiBBUkNIX0NBTUVMT1QKLQotbWVudSAiRXB4YTEwZGIiCi0KLWNvbW1lbnQgIlBMRCBob3Rzd2FwIHN1cHBvcnQiCi0KLWNvbmZpZyBQTEQKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBQTERfSE9UU1dBUAotCWJvb2wgIlN1cHBvcnQgZm9yIFBMRCBkZXZpY2UgaG90cGx1Z2dpbmcgKGV4cGVyaW1lbnRhbCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGR5bmFtaWMgbG9hZGluZyBhbmQgY29uZmlndXJhdGlvbiBvZgotCSAgY29tcGF0aWJsZSBkcml2ZXJzIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBQTEQgYXJlIGNoYW5nZWQuIFRoaXMKLQkgIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgcmVxdWlyZXMgY29uZmlndXJhdGlvbiB0b29scyB3aGljaCBhcmUKLQkgIG5vdCB5ZXQgZ2VuZXJhbGx5IGF2YWlsYWJsZS4gU2F5IE4gaGVyZS4gWW91IG11c3QgZW5hYmxlIHRoZSBrZXJuZWwKLQkgIG1vZHVsZSBsb2FkZXIgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrLgotCi1lbmRtZW51Ci0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmYmQ3ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KLSMKLQotIyBPYmplY3QgZmlsZSBsaXN0cy4KLQotb2JqLXkJCQk6PSBhcmNoLm8gaXJxLm8gbW0ubyB0aW1lLm8gCi1vYmotbQkJCTo9Ci1vYmotbgkJCTo9Ci1vYmotCQkJOj0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9NYWtlZmlsZS5ib290CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGJlYzdkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvTWFrZWZpbGUuYm9vdAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvYXJjaC5jIGIvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9hcmNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YzU2NTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9hcmNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvYXJjaC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLmlvYmFzZQkJPSAweDNmOCwKLQkJLmlycQkJPSBJUlFfVUFSVElOVDAsCi0jZXJyb3IgRklYTUUKLQkJLnVhcnRjbGsJPSAwLAotCQkucmVnc2hpZnQJPSAwLAotCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKLQl9LAotCXsKLQkJLmlvYmFzZQkJPSAweDJmOCwKLQkJLmlycQkJPSBJUlFfVUFSVElOVDEsCi0jZXJyb3IgRklYTUUKLQkJLnVhcnRjbGsJPSAwLAotCQkucmVnc2hpZnQJPSAwLAotCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKLQl9LAotCXsgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKLQkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKLQkuZGV2CQkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCi0JfSwKLX07Ci0KLWV4dGVybiB2b2lkIGVweGExMGRiX21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIGVweGExMGRiX2luaXRfaXJxKHZvaWQpOwotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgZXB4YTEwZGJfdGltZXI7Ci0KLU1BQ0hJTkVfU1RBUlQoQ0FNRUxPVCwgIkFsdGVyYSBFcHhhMTBkYiIpCi0JLyogTWFpbnRhaW5lcjogQWx0ZXJhIENvcnBvcmF0aW9uICovCi0JLnBoeXNfcmFtCT0gMHgwMDAwMDAwMCwKLQkucGh5c19pbwk9IDB4N2ZmZmMwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGZmZmZjMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLm1hcF9pbwkJPSBlcHhhMTBkYl9tYXBfaW8sCi0JLmluaXRfaXJxCT0gZXB4YTEwZGJfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZlcHhhMTBkYl90aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmY5MjdlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvaXJxLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pbnRfY3RybDAwLmg+Ci0KLQotc3RhdGljIHZvaWQgZXB4YV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICB3cml0ZWwoMSA8PCBpcnEsIElOVF9NQyhJT19BRERSRVNTKEVYQ19JTlRfQ1RSTDAwX0JBU0UpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVweGFfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICB3cml0ZWwoMSA8PCBpcnEsIElOVF9NUyhJT19BRERSRVNTKEVYQ19JTlRfQ1RSTDAwX0JBU0UpKSk7Ci19Ci0gCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBlcHhhX2lycV9jaGlwID0gewotCS5hY2sJCT0gZXB4YV9tYXNrX2lycSwKLQkubWFzawkJPSBlcHhhX21hc2tfaXJxLAotCS51bm1hc2sJCT0gZXB4YV91bm1hc2tfaXJxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcnFfcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiaXJxX2hhbmRsZXIiLAotCS5zdGFydAk9IElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSksCi0JLmVuZAk9IElPX0FERFJFU1MoSU5UX1BSSU9SSVRZX0ZDKEVYQ19JTlRfQ1RSTDAwX0JBU0UpKSs0LAotfTsKLQotdm9pZCBfX2luaXQgZXB4YTEwZGJfaW5pdF9pcnEodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQkKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmlycV9yZXNvdXJjZSk7Ci0KLQkvKgotCSAqIFRoaXMgYml0IHNldHMgdXAgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHVzaW5nIAotCSAqIHRoZSA2IFBMRCBpbnRlcnJ1cHRzIG1vZGUgKHRoZSBkZWZhdWx0KSBlYWNoIAotCSAqIGlycXMgaXMgYXNzaWduZWQgYSBwcmlvcml0eSB3aGljaCBpcyB0aGUgc2FtZQotCSAqIGFzIGl0cyBpbnRlcnJ1cHQgbnVtYmVyLiBUaGlzIHNjaGVtZSBpcyB1c2VkIGJlY2F1c2UgCi0JICogaXRzIGVhc3ksIGJ1dCB5b3UgbWF5IHdhbnQgdG8gY2hhbmdlIGl0IGRlcGVuZGluZwotCSAqIG9uIHRoZSBjb250ZW50cyBvZiB5b3VyIFBMRAotCSAqLwotCi0Jd3JpdGVsKDMsSU5UX01PREUoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkpOwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspewotCQl3cml0ZWwoaSsxLCBJTlRfUFJJT1JJVFlfUDAoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkgKyAoNCppKSk7Ci0JCXNldF9pcnFfY2hpcChpLCZlcHhhX2lycV9jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGksZG9fbGV2ZWxfSVJRKTsKLQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0JfQotCi0JLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCXdyaXRlbCgtMSxJTlRfTUMoSU9fQUREUkVTUyhFWENfSU5UX0NUUkwwMF9CQVNFKSkpOwotCi19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL21tLmMgYi9hcmNoL2FybS9tYWNoLWVweGExMGRiL21tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDBkMjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcHhhMTBkYi9tbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL21tLmMKLSAqCi0gKiAgTU0gcm91dGluZXMgZm9yIEFsdGVyYSdhIEVweGExMGRiIGJvYXJkCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotIAotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0vKiBQYWdlIHRhYmxlIG1hcHBpbmcgZm9yIEkvTyByZWdpb24gKi8KLSAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZXB4YTEwZGJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoRVhDX1JFR0lTVEVSU19CQVNFKSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYQ19SRUdJU1RFUlNfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhFWENfUExEX0JMT0NLMF9CQVNFKSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYQ19QTERfQkxPQ0swX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoRVhDX1BMRF9CTE9DSzFfQkFTRSksCi0JCS5wZm4JCT1fX3BoeXNfdG9fcGZuKEVYQ19QTERfQkxPQ0sxX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoRVhDX1BMRF9CTE9DSzJfQkFTRSksCi0JCS5waHlzaWNhbAk9IF9fcGh5c190b19wZm4oRVhDX1BMRF9CTE9DSzJfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhFWENfUExEX0JMT0NLM19CQVNFKSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYQ19QTERfQkxPQ0szX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbAk9IEZMQVNIX1ZBRERSKEVYQ19FQklfQkxPQ0swX0JBU0UpLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhDX0VCSV9CTE9DSzBfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1pfMTZNLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9Ci19OwotCi12b2lkIF9faW5pdCBlcHhhMTBkYl9tYXBfaW8odm9pZCkKLXsKLQlpb3RhYmxlX2luaXQoZXB4YTEwZGJfaW9fZGVzYywgQVJSQVlfU0laRShlcHhhMTBkYl9pb19kZXNjKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVweGExMGRiL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjEwODRkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZXB4YTEwZGIvdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVweGExMGRiL3RpbWUuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucwotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2xlZHMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2RlZmluZSBUSU1FUjAwX1RZUEUgKHZvbGF0aWxlIHVuc2lnbmVkIGludCopCi0jaW5jbHVkZSA8YXNtL2FyY2gvdGltZXIwMC5oPgotCi1zdGF0aWMgaW50IGVweGExMGRiX3NldF9ydGModm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBlcHhhMTBkYl9ydGNfaW5pdCh2b2lkKQotewotCXNldF9ydGMgPSBlcHhhMTBkYl9zZXRfcnRjOwotCi0JcmV0dXJuIDA7Ci19Ci0KLV9faW5pdGNhbGwoZXB4YTEwZGJfcnRjX2luaXQpOwotCi0KLS8qCi0gKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdAotZXB4YTEwZGJfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0KLQkvLyAuLi5jbGVhciB0aGUgaW50ZXJydXB0Ci0JKlRJTUVSMF9DUihJT19BRERSRVNTKEVYQ19USU1FUjAwX0JBU0UpKXw9VElNRVIwX0NSX0NJX01TSzsKLQotCXRpbWVyX3RpY2socmVncyk7Ci0Jd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZXB4YTEwZGJfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJFeGNhbGlidXIgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAotCS5oYW5kbGVyCT0gZXB4YTEwZGJfdGltZXJfaW50ZXJydXB0LAotfTsKLQotLyoKLSAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZXB4YTEwZGJfdGltZXJfaW5pdCh2b2lkKQotewotCS8qIFN0YXJ0IHRoZSB0aW1lciAqLwotCSpUSU1FUjBfTElNSVQoSU9fQUREUkVTUyhFWENfVElNRVIwMF9CQVNFKSk9KHVuc2lnbmVkIGludCkoRVhDX0FIQjJfQ0xLX0ZSRVFVRU5DWS8yMDApOwotCSpUSU1FUjBfUFJFU0NBTEUoSU9fQUREUkVTUyhFWENfVElNRVIwMF9CQVNFKSk9MTsKLQkqVElNRVIwX0NSKElPX0FERFJFU1MoRVhDX1RJTUVSMDBfQkFTRSkpPVRJTUVSMF9DUl9JRV9NU0sgfCBUSU1FUjBfQ1JfU19NU0s7Ci0KLQlzZXR1cF9pcnEoSVJRX1RJTUVSMCwgJmVweGExMGRiX3RpbWVyX2lycSk7Ci19Ci0KLXN0cnVjdCBzeXNfdGltZXIgZXB4YTEwZGJfdGltZXIgPSB7Ci0JLmluaXQJCT0gZXB4YTEwZGJfdGltZXJfaW5pdCwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKaW5kZXggYmQ5MDBiNy4uOTJmZjVkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJb21hcF93cml0ZWwoMHgwMDAwMDA4OCwgT01BUDczMF9GTEFTSF9BQ0ZHXzApOwogCiAJLyoKLQkgKiBFdGhlcm5ldCBzdXBwb3J0IHRyb3VnaCB0aGUgZGVidWcgYm9hcmQKKwkgKiBFdGhlcm5ldCBzdXBwb3J0IHRocm91Z2ggdGhlIGRlYnVnIGJvYXJkCiAJICogQ1MxIHRpbWluZ3Mgc2V0dXAKIAkgKi8KIAlvbWFwX3dyaXRlbCgweDAwMDBmZmYzLCBPTUFQNzMwX0ZMQVNIX0NGR18xKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKaW5kZXggNTgzMGFlMy4uZmMwOWJhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKQEAgLTI1MywxMDAgKzI1MywxMDEgQEAKIC8qIGNsb2NrIGRlZmluaXRpb25zICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzW10gPSB7Ci0JeyAubmFtZSAgICA9ICJuYW5kIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX2gsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fTkFORAotCX0sCi0JeyAubmFtZSAgICA9ICJsY2QiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfaCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9MQ0RDCi0JfSwKLQl7IC5uYW1lICAgID0gInVzYi1ob3N0IiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX2gsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fVVNCSAotCX0sCi0JeyAubmFtZSAgICA9ICJ1c2ItZGV2aWNlIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX2gsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fVVNCRAotCX0sCi0JeyAubmFtZSAgICA9ICJ0aW1lcnMiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9QV01UCi0JfSwKLQl7IC5uYW1lICAgID0gInNkaSIsCi0JICAuaWQJICAgPSAtMSwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX1NESQotCX0sCi0JeyAubmFtZSAgICA9ICJ1YXJ0IiwKLQkgIC5pZAkgICA9IDAsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VQVJUMAotCX0sCi0JeyAubmFtZSAgICA9ICJ1YXJ0IiwKLQkgIC5pZAkgICA9IDEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VQVJUMQotCX0sCi0JeyAubmFtZSAgICA9ICJ1YXJ0IiwKLQkgIC5pZAkgICA9IDIsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9VQVJUMgotCX0sCi0JeyAubmFtZSAgICA9ICJncGlvIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX3AsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fR1BJTwotCX0sCi0JeyAubmFtZSAgICA9ICJydGMiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9SVEMKLQl9LAotCXsgLm5hbWUgICAgPSAiYWRjIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX3AsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fQURDCi0JfSwKLQl7IC5uYW1lICAgID0gImkyYyIsCi0JICAuaWQJICAgPSAtMSwKLQkgIC5wYXJlbnQgID0gJmNsa19wLAotCSAgLmVuYWJsZSAgPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCi0JICAuY3RybGJpdCA9IFMzQzI0MTBfQ0xLQ09OX0lJQwotCX0sCi0JeyAubmFtZSAgICA9ICJpaXMiLAotCSAgLmlkCSAgID0gLTEsCi0JICAucGFyZW50ICA9ICZjbGtfcCwKLQkgIC5lbmFibGUgID0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAotCSAgLmN0cmxiaXQgPSBTM0MyNDEwX0NMS0NPTl9JSVMKLQl9LAotCXsgLm5hbWUgICAgPSAic3BpIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX3AsCi0JICAuZW5hYmxlICA9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKLQkgIC5jdHJsYml0ID0gUzNDMjQxMF9DTEtDT05fU1BJCi0JfSwKLQl7IC5uYW1lICAgID0gIndhdGNoZG9nIiwKLQkgIC5pZAkgICA9IC0xLAotCSAgLnBhcmVudCAgPSAmY2xrX3AsCi0JICAuY3RybGJpdCA9IDAKKwl7CisJCS5uYW1lCQk9ICJuYW5kIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fTkFORCwKKwl9LCB7CisJCS5uYW1lCQk9ICJsY2QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9MQ0RDLAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1ob3N0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVVNCSCwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1c2ItZGV2aWNlIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVVNCRCwKKwl9LCB7CisJCS5uYW1lCQk9ICJ0aW1lcnMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9QV01ULAorCX0sIHsKKwkJLm5hbWUJCT0gInNkaSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1NESSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VQVJUMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VQVJUMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VQVJUMiwKKwl9LCB7CisJCS5uYW1lCQk9ICJncGlvIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fR1BJTywKKwl9LCB7CisJCS5uYW1lCQk9ICJydGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9SVEMsCisJfSwgeworCQkubmFtZQkJPSAiYWRjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fQURDLAorCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0lJQywKKwl9LCB7CisJCS5uYW1lCQk9ICJpaXMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9JSVMsCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fU1BJLAorCX0sIHsKKwkJLm5hbWUJCT0gIndhdGNoZG9nIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmN0cmxiaXQJPSAwLAogCX0KIH07CiAKQEAgLTM5MCwxNiArMzkxLDE1IEBACiAJY2xrX3AucmF0ZSA9IHBjbGs7CiAJY2xrX2YucmF0ZSA9IGZjbGs7CiAKLQkvKiBpdCBsb29rcyBsaWtlIGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXIgaGVyZSBpcyBub3QgZ29vZAotCSAqIGVub3VnaCwgYW5kIGNhdXNlcyB0aGUgb2RkIGhhbmcgYXQgaW5pdGlhbCBib290IHRpbWUsIHNvCi0JICogZG8gYWxsIG9mIHRoZW0gaW5kaXZkdWFsbHkuCisJLyogV2UgbXVzdCBiZSBjYXJlZnVsIGRpc2FibGluZyB0aGUgY2xvY2tzIHdlIGFyZSBub3QgaW50ZW5kaW5nIHRvCisJICogYmUgdXNpbmcgYXQgYm9vdCB0aW1lLCBhcyBzdWJzeXRlbXMgc3VjaCBhcyB0aGUgTENEIHdoaWNoIGRvCisJICogdGhlaXIgb3duIERNQSByZXF1ZXN0cyB0byB0aGUgYnVzIGNhbiBjYXVzZSB0aGUgc3lzdGVtIHRvIGxvY2t1cAorCSAqIGlmIHRoZXkgd2hlcmUgaW4gdGhlIG1pZGRsZSBvZiByZXF1ZXN0aW5nIGJ1cyBhY2Nlc3MuCiAJICoKLQkgKiBJIHRoaW5rIGRpc2FibGluZyB0aGUgTENEIGNsb2NrIGlmIHRoZSBMQ0QgaXMgYWN0aXZlIGlzCi0JICogdmVyeSBkYW5nZXJvdXMsIGFuZCB0aGVyZWZvcmUgdGhlIGJvb3Rsb2FkZXIgc2hvdWxkIGJlCi0JICogY2FyZWZ1bCB0byBub3QgZW5hYmxlIHRoZSBMQ0QgY2xvY2sgaWYgaXQgaXMgbm90IG5lZWRlZC4KLQkgKgotCSAqIGFuZCBvZiBjb3Vyc2UsIHRoaXMgbG9va3MgbmVhdGVyCi0JICovCisJICogRGlzYWJsaW5nIHRoZSBMQ0QgY2xvY2sgaWYgdGhlIExDRCBpcyBhY3RpdmUgaXMgdmVyeSBkYW5nZXJvdXMsCisJICogYW5kIHRoZXJlZm9yZSB0aGUgYm9vdGxvYWRlciBzaG91bGQgYmUgIGNhcmVmdWwgdG8gbm90IGVuYWJsZQorCSAqIHRoZSBMQ0QgY2xvY2sgaWYgaXQgaXMgbm90IG5lZWRlZC4KKwkqLwogCiAJczNjMjR4eF9jbGtfZW5hYmxlKFMzQzI0MTBfQ0xLQ09OX05BTkQsIDApOwogCXMzYzI0eHhfY2xrX2VuYWJsZShTM0MyNDEwX0NMS0NPTl9VU0JILCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGU4NGZkZGUuLjNiNzlkMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtNjIsOCArNjIsOCBAQAogIyBBUk05MjBUCiBjb25maWcgQ1BVX0FSTTkyMFQKIAlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiAhQVJDSF9TM0MyNDEwCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9TM0MyNDEwIHx8IEFSQ0hfSU1YIHx8IEFSQ0hfQUFFQzIwMDAKLQlkZWZhdWx0IHkgaWYgQVJDSF9TM0MyNDEwCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9TM0MyNDEwIHx8IEFSQ0hfSU1YIHx8IEFSQ0hfQUFFQzIwMDAgfHwgQVJDSF9BVDkxUk05MjAwCisJZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX0FUOTFSTTkyMDAKIAlzZWxlY3QgQ1BVXzMydjQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApAQCAtODMsOCArODMsOCBAQAogIyBBUk05MjJUCiBjb25maWcgQ1BVX0FSTTkyMlQKIAlib29sICJTdXBwb3J0IEFSTTkyMlQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKLQlkZXBlbmRzIG9uIEFSQ0hfQ0FNRUxPVCB8fCBBUkNIX0xIN0E0MFggfHwgQVJDSF9JTlRFR1JBVE9SCi0JZGVmYXVsdCB5IGlmIEFSQ0hfQ0FNRUxPVCB8fCBBUkNIX0xIN0E0MFgKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0lOVEVHUkFUT1IKKwlkZWZhdWx0IHkgaWYgQVJDSF9MSDdBNDBYCiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwppbmRleCAxMDkwMTM5Li5kZTNjZTFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCkBAIC04NiwxMSArODYsMTIgQEAKIH0KIAogc3RhdGljIGludAotcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKK3JlbWFwX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCSB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIHNpemU7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSBfX3Bmbl90b19waHlzKHBmbik7CiAJaW50IGVyciA9IDA7CiAJcGdkX3QgKiBkaXI7CiAKQEAgLTEzMCwzNiArMTMxLDQ0IEBACiAgKiBtYXBwaW5nLiAgU2VlIGluY2x1ZGUvYXNtLWFybS9wcm9jLWFybXYvcGd0YWJsZS5oIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCiB2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworIAlzdHJ1Y3Qgdm1fc3RydWN0ICogYXJlYTsKKworIAlhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7CisgCWlmICghYXJlYSkKKyAJCXJldHVybiBOVUxMOworIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKKyAJaWYgKHJlbWFwX2FyZWFfcGFnZXMoYWRkciwgcGZuLCBzaXplLCBmbGFncykpIHsKKyAJCXZmcmVlKGFkZHIpOworIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKG9mZnNldCArIChjaGFyICopYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKF9faW9yZW1hcF9wZm4pOworCit2b2lkIF9faW9tZW0gKgogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQl2b2lkICogYWRkcjsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICogYXJlYTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyOworCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyOworIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7CisgCXVuc2lnbmVkIGxvbmcgcGZuID0gX19waHlzX3RvX3BmbihwaHlzX2FkZHIpOwogCi0JLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KKyAJLyoKKyAJICogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUKKwkgKi8KIAlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKIAlpZiAoIXNpemUgfHwgbGFzdF9hZGRyIDwgcGh5c19hZGRyKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKKyAJICogUGFnZSBhbGlnbiB0aGUgbWFwcGluZyBzaXplCiAJICovCi0Jb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKLQlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOwogCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkciArIDEpIC0gcGh5c19hZGRyOwogCi0JLyoKLQkgKiBPaywgZ28gZm9yIGl0Li4KLQkgKi8KLQlhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7Ci0JaWYgKCFhcmVhKQotCQlyZXR1cm4gTlVMTDsKLQlhZGRyID0gYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKLQkJdmZyZWUoYWRkcik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKKyAJcmV0dXJuIF9faW9yZW1hcF9wZm4ocGZuLCBvZmZzZXQsIHNpemUsIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggNDY1NDg3NC4uZDBmOWJiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogRnJpIE5vdiAyNSAxNDo0MzowNCAyMDA1CisjIExhc3QgdXBkYXRlOiBNb24gSmFuIDkgMTI6NTY6NDIgMjAwNgogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC05MTAsMyArOTEwLDMxIEBACiBuYWRpYTJ2YgkJTUFDSF9OQURJQTJWQgkJTkFESUEyVkIJCTg5NwogcjEwMDAJCQlNQUNIX1IxMDAwCQlSMTAwMAkJCTg5OAogaHc5MDI1MAkJCU1BQ0hfSFc5MDI1MAkJSFc5MDI1MAkJCTg5OQorb21hcF8yNDMwc2RwCQlNQUNIX09NQVBfMjQzMFNEUAlPTUFQXzI0MzBTRFAJCTkwMAorZGF2aW5jaV9ldm0JCU1BQ0hfREFWSU5DSV9FVk0JREFWSU5DSV9FVk0JCTkwMQorb21hcF90b3JuYWRvCQlNQUNIX09NQVBfVE9STkFETwlPTUFQX1RPUk5BRE8JCTkwMgorb2xvY3JlZWsJCU1BQ0hfT0xPQ1JFRUsJCU9MT0NSRUVLCQk5MDMKK3BhbG16NzIJCQlNQUNIX1BBTE1aNzIJCVBBTE1aNzIJCQk5MDQKK254ZGI1MDAJCQlNQUNIX05YREI1MDAJCU5YREI1MDAJCQk5MDUKK2FwZjkzMjgJCQlNQUNIX0FQRjkzMjgJCUFQRjkzMjgJCQk5MDYKK29tYXBfd2lwb3EJCU1BQ0hfT01BUF9XSVBPUQkJT01BUF9XSVBPUQkJOTA3CitvbWFwX3R3aXAJCU1BQ0hfT01BUF9UV0lQCQlPTUFQX1RXSVAJCTkwOAoreHNjYWxlX3RyZW82NTAJCU1BQ0hfWFNDQUxFX1BBTE1UUkVPNjUwCVhTQ0FMRV9QQUxNVFJFTzY1MAk5MDkKK2FjdW1lbgkJCU1BQ0hfQUNVTUVOCQlBQ1VNRU4JCQk5MTAKK3hwMTAwCQkJTUFDSF9YUDEwMAkJWFAxMDAJCQk5MTEKK2ZzMjQxMAkJCU1BQ0hfRlMyNDEwCQlGUzI0MTAJCQk5MTIKK3B4YTI3MF9jZXJmCQlNQUNIX1BYQTI3MF9DRVJGCVBYQTI3MF9DRVJGCQk5MTMKK3NxMmZ0bHBhbG0JCU1BQ0hfU1EyRlRMUEFMTQkJU1EyRlRMUEFMTQkJOTE0Citic2Vtc2VydmVyCQlNQUNIX0JTRU1TRVJWRVIJCUJTRU1TRVJWRVIJCTkxNQorbmV0Y2xpZW50CQlNQUNIX05FVENMSUVOVAkJTkVUQ0xJRU5UCQk5MTYKK3hzY2FsZV9wYWxtdHQ1CQlNQUNIX1hTQ0FMRV9QQUxNVFQ1CVhTQ0FMRV9QQUxNVFQ1CQk5MTcKK3hzY2FsZV9wYWxtdGMJCU1BQ0hfT01BUF9QQUxNVEMJT01BUF9QQUxNVEMJCTkxOAorb21hcF9hcG9sbG9uCQlNQUNIX09NQVBfQVBPTExPTglPTUFQX0FQT0xMT04JCTkxOQorYXJnb25sdmV2YgkJTUFDSF9BUkdPTkxWRVZCCQlBUkdPTkxWRVZCCQk5MjAKK3JlYV8yZAkJCU1BQ0hfUkVBXzJECQlSRUFfMkQJCQk5MjEKK2V0aTNlNTI0CQlNQUNIX1RJM0U1MjQJCVRJM0U1MjQJCQk5MjIKK2F0ZWI5MjAwCQlNQUNIX0FURUI5MjAwCQlBVEVCOTIwMAkJOTIzCithdWNrbGFuZAkJTUFDSF9BVUNLTEFORAkJQVVDS0xBTkQJCTkyNAorYWszMjIwbQkJCU1BQ0hfQUszMzIwTQkJQUszMzIwTQkJCTkyNQorZHVyYW1heAkJCU1BQ0hfRFVSQU1BWAkJRFVSQU1BWAkJCTkyNgorbjM1CQkJTUFDSF9OMzUJCU4zNQkJCTkyNwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2NyeXB0by9hZXMtaTU4Ni1hc20uUyBiL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtLlMKaW5kZXggN2I3M2M2Ny4uOTExYjE1MyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2NyeXB0by9hZXMtaTU4Ni1hc20uUworKysgYi9hcmNoL2kzODYvY3J5cHRvL2Flcy1pNTg2LWFzbS5TCkBAIC0yNTUsMTggKzI1NSwxNyBAQAogCXhvciAgICAgOCglZWJwKSwlcjQKIAl4b3IgICAgIDEyKCVlYnApLCVyNQogCi0Jc3ViICAgICAkOCwlZXNwICAgICAgICAgICAvLyBzcGFjZSBmb3IgcmVnaXN0ZXIgc2F2ZXMgb24gc3RhY2sKLQlhZGQgICAgICQxNiwlZWJwICAgICAgICAgIC8vIGluY3JlbWVudCB0byBuZXh0IHJvdW5kIGtleQotCXN1YiAgICAgJDEwLCVyMyAgICAgICAgICAKLQlqZSAgICAgIDRmICAgICAgICAgICAgICAvLyAxMCByb3VuZHMgZm9yIDEyOC1iaXQga2V5Ci0JYWRkICAgICAkMzIsJWVicAotCXN1YiAgICAgJDIsJXIzCi0JamUgICAgICAzZiAgICAgICAgICAgICAgLy8gMTIgcm91bmRzIGZvciAxMjgtYml0IGtleQotCWFkZCAgICAgJDMyLCVlYnAKKwlzdWIgICAgICQ4LCVlc3AJCS8vIHNwYWNlIGZvciByZWdpc3RlciBzYXZlcyBvbiBzdGFjaworCWFkZCAgICAgJDE2LCVlYnAJLy8gaW5jcmVtZW50IHRvIG5leHQgcm91bmQga2V5CisJY21wICAgICAkMTIsJXIzCisJamIgICAgICA0ZgkJLy8gMTAgcm91bmRzIGZvciAxMjgtYml0IGtleQorCWxlYSAgICAgMzIoJWVicCksJWVicAorCWplICAgICAgM2YJCS8vIDEyIHJvdW5kcyBmb3IgMTkyLWJpdCBrZXkKKwlsZWEgICAgIDMyKCVlYnApLCVlYnAKIAotMjoJZndkX3JuZDEoIC02NCglZWJwKSAsZnRfdGFiKQkvLyAxNCByb3VuZHMgZm9yIDEyOC1iaXQga2V5CisyOglmd2Rfcm5kMSggLTY0KCVlYnApICxmdF90YWIpCS8vIDE0IHJvdW5kcyBmb3IgMjU2LWJpdCBrZXkKIAlmd2Rfcm5kMiggLTQ4KCVlYnApICxmdF90YWIpCi0zOglmd2Rfcm5kMSggLTMyKCVlYnApICxmdF90YWIpCS8vIDEyIHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKKzM6CWZ3ZF9ybmQxKCAtMzIoJWVicCkgLGZ0X3RhYikJLy8gMTIgcm91bmRzIGZvciAxOTItYml0IGtleQogCWZ3ZF9ybmQyKCAtMTYoJWVicCkgLGZ0X3RhYikKIDQ6CWZ3ZF9ybmQxKCAgICAoJWVicCkgLGZ0X3RhYikJLy8gMTAgcm91bmRzIGZvciAxMjgtYml0IGtleQogCWZ3ZF9ybmQyKCArMTYoJWVicCkgLGZ0X3RhYikKQEAgLTMzNCwxOCArMzMzLDE3IEBACiAJeG9yICAgICA4KCVlYnApLCVyNAogCXhvciAgICAgMTIoJWVicCksJXI1CiAKLQlzdWIgICAgICQ4LCVlc3AgICAgICAgICAvLyBzcGFjZSBmb3IgcmVnaXN0ZXIgc2F2ZXMgb24gc3RhY2sKLQlzdWIgICAgICQxNiwlZWJwICAgICAgICAvLyBpbmNyZW1lbnQgdG8gbmV4dCByb3VuZCBrZXkKLQlzdWIgICAgICQxMCwlcjMgICAgICAgICAgCi0JamUgICAgICA0ZiAgICAgICAgICAgICAgLy8gMTAgcm91bmRzIGZvciAxMjgtYml0IGtleQotCXN1YiAgICAgJDMyLCVlYnAKLQlzdWIgICAgICQyLCVyMwotCWplICAgICAgM2YgICAgICAgICAgICAgIC8vIDEyIHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKLQlzdWIgICAgICQzMiwlZWJwCisJc3ViICAgICAkOCwlZXNwCQkvLyBzcGFjZSBmb3IgcmVnaXN0ZXIgc2F2ZXMgb24gc3RhY2sKKwlzdWIgICAgICQxNiwlZWJwCS8vIGluY3JlbWVudCB0byBuZXh0IHJvdW5kIGtleQorCWNtcCAgICAgJDEyLCVyMworCWpiICAgICAgNGYJCS8vIDEwIHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKKwlsZWEgICAgIC0zMiglZWJwKSwlZWJwCisJamUgICAgICAzZgkJLy8gMTIgcm91bmRzIGZvciAxOTItYml0IGtleQorCWxlYSAgICAgLTMyKCVlYnApLCVlYnAKIAotMjoJaW52X3JuZDEoICs2NCglZWJwKSwgaXRfdGFiKQkvLyAxNCByb3VuZHMgZm9yIDEyOC1iaXQga2V5CisyOglpbnZfcm5kMSggKzY0KCVlYnApLCBpdF90YWIpCS8vIDE0IHJvdW5kcyBmb3IgMjU2LWJpdCBrZXkKIAlpbnZfcm5kMiggKzQ4KCVlYnApLCBpdF90YWIpCi0zOglpbnZfcm5kMSggKzMyKCVlYnApLCBpdF90YWIpCS8vIDEyIHJvdW5kcyBmb3IgMTI4LWJpdCBrZXkKKzM6CWludl9ybmQxKCArMzIoJWVicCksIGl0X3RhYikJLy8gMTIgcm91bmRzIGZvciAxOTItYml0IGtleQogCWludl9ybmQyKCArMTYoJWVicCksIGl0X3RhYikKIDQ6CWludl9ybmQxKCAgICAoJWVicCksIGl0X3RhYikJLy8gMTAgcm91bmRzIGZvciAxMjgtYml0IGtleQogCWludl9ybmQyKCAtMTYoJWVicCksIGl0X3RhYikKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLmMgYi9hcmNoL2kzODYvY3J5cHRvL2Flcy5jCmluZGV4IDg4ZWU4NWMuLmE1MDM5N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLmMKKysrIGIvYXJjaC9pMzg2L2NyeXB0by9hZXMuYwpAQCAtMzYsNiArMzYsOCBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgogICoKICAqLworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTU5LDcgKzYxLDYgQEAKIH07CiAKICNkZWZpbmUgV1BPTFkgMHgwMTFiCi0jZGVmaW5lIHUzMl9pbih4KSBsZTMyX3RvX2NwdXAoKGNvbnN0IF9fbGUzMiAqKSh4KSkKICNkZWZpbmUgYnl0ZXMyd29yZChiMCwgYjEsIGIyLCBiMykgIFwKIAkoKCh1MzIpKGIzKSA8PCAyNCkgfCAoKHUzMikoYjIpIDw8IDE2KSB8ICgodTMyKShiMSkgPDwgOCkgfCAoYjApKQogCkBAIC05Myw3ICs5NCw2IEBACiAKIHUzMiBmdF90YWJbNF1bMjU2XTsKIHUzMiBmbF90YWJbNF1bMjU2XTsKLXN0YXRpYyB1MzIgbHNfdGFiWzRdWzI1Nl07CiBzdGF0aWMgdTMyIGltX3RhYls0XVsyNTZdOwogdTMyIGlsX3RhYls0XVsyNTZdOwogdTMyIGl0X3RhYls0XVsyNTZdOwpAQCAtMTQ0LDE1ICsxNDQsNiBAQAogCQlmbF90YWJbMl1baV0gPSB1cHIodywgMik7CiAJCWZsX3RhYlszXVtpXSA9IHVwcih3LCAzKTsKIAkJCi0JCS8qCi0JCSAqIHRhYmxlIGZvciBrZXkgc2NoZWR1bGUgaWYgZmxfdGFiIGFib3ZlIGlzCi0JCSAqIG5vdCBvZiB0aGUgcmVxdWlyZWQgZm9ybQotCQkgKi8KLQkJbHNfdGFiWzBdW2ldID0gdzsKLQkJbHNfdGFiWzFdW2ldID0gdXByKHcsIDEpOwotCQlsc190YWJbMl1baV0gPSB1cHIodywgMik7Ci0JCWxzX3RhYlszXVtpXSA9IHVwcih3LCAzKTsKLQkJCiAJCWIgPSBmaShpbnZfYWZmaW5lKCh1OClpKSk7CiAJCXcgPSBieXRlczJ3b3JkKGZlKGIpLCBmOShiKSwgZmQoYiksIGZiKGIpKTsKIApAQCAtMzkzLDEzICszODQsMTQgQEAKIAlpbnQgaTsKIAl1MzIgc3NbOF07CiAJc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OwogCiAJLyogZW5jcnlwdGlvbiBzY2hlZHVsZSAqLwogCQotCWN0eC0+ZWtleVswXSA9IHNzWzBdID0gdTMyX2luKGluX2tleSk7Ci0JY3R4LT5la2V5WzFdID0gc3NbMV0gPSB1MzJfaW4oaW5fa2V5ICsgNCk7Ci0JY3R4LT5la2V5WzJdID0gc3NbMl0gPSB1MzJfaW4oaW5fa2V5ICsgOCk7Ci0JY3R4LT5la2V5WzNdID0gc3NbM10gPSB1MzJfaW4oaW5fa2V5ICsgMTIpOworCWN0eC0+ZWtleVswXSA9IHNzWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKKwljdHgtPmVrZXlbMV0gPSBzc1sxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CisJY3R4LT5la2V5WzJdID0gc3NbMl0gPSBsZTMyX3RvX2NwdShrZXlbMl0pOworCWN0eC0+ZWtleVszXSA9IHNzWzNdID0gbGUzMl90b19jcHUoa2V5WzNdKTsKIAogCXN3aXRjaChrZXlfbGVuKSB7CiAJY2FzZSAxNjoKQEAgLTQxMCw4ICs0MDIsOCBAQAogCQlicmVhazsKIAkJCiAJY2FzZSAyNDoKLQkJY3R4LT5la2V5WzRdID0gc3NbNF0gPSB1MzJfaW4oaW5fa2V5ICsgMTYpOwotCQljdHgtPmVrZXlbNV0gPSBzc1s1XSA9IHUzMl9pbihpbl9rZXkgKyAyMCk7CisJCWN0eC0+ZWtleVs0XSA9IHNzWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKTsKKwkJY3R4LT5la2V5WzVdID0gc3NbNV0gPSBsZTMyX3RvX2NwdShrZXlbNV0pOwogCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQogCQkJa2U2KGN0eC0+ZWtleSwgaSk7CiAJCWtlbDYoY3R4LT5la2V5LCA3KTsgCkBAIC00MTksMTAgKzQxMSwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgMzI6Ci0JCWN0eC0+ZWtleVs0XSA9IHNzWzRdID0gdTMyX2luKGluX2tleSArIDE2KTsKLQkJY3R4LT5la2V5WzVdID0gc3NbNV0gPSB1MzJfaW4oaW5fa2V5ICsgMjApOwotCQljdHgtPmVrZXlbNl0gPSBzc1s2XSA9IHUzMl9pbihpbl9rZXkgKyAyNCk7Ci0JCWN0eC0+ZWtleVs3XSA9IHNzWzddID0gdTMyX2luKGluX2tleSArIDI4KTsKKwkJY3R4LT5la2V5WzRdID0gc3NbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pOworCQljdHgtPmVrZXlbNV0gPSBzc1s1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CisJCWN0eC0+ZWtleVs2XSA9IHNzWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKTsKKwkJY3R4LT5la2V5WzddID0gc3NbN10gPSBsZTMyX3RvX2NwdShrZXlbN10pOwogCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJa2U4KGN0eC0+ZWtleSwgaSk7CiAJCWtlbDgoY3R4LT5la2V5LCA2KTsKQEAgLTQzNiwxMCArNDI4LDEwIEBACiAJCiAJLyogZGVjcnlwdGlvbiBzY2hlZHVsZSAqLwogCQotCWN0eC0+ZGtleVswXSA9IHNzWzBdID0gdTMyX2luKGluX2tleSk7Ci0JY3R4LT5ka2V5WzFdID0gc3NbMV0gPSB1MzJfaW4oaW5fa2V5ICsgNCk7Ci0JY3R4LT5ka2V5WzJdID0gc3NbMl0gPSB1MzJfaW4oaW5fa2V5ICsgOCk7Ci0JY3R4LT5ka2V5WzNdID0gc3NbM10gPSB1MzJfaW4oaW5fa2V5ICsgMTIpOworCWN0eC0+ZGtleVswXSA9IHNzWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKKwljdHgtPmRrZXlbMV0gPSBzc1sxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CisJY3R4LT5ka2V5WzJdID0gc3NbMl0gPSBsZTMyX3RvX2NwdShrZXlbMl0pOworCWN0eC0+ZGtleVszXSA9IHNzWzNdID0gbGUzMl90b19jcHUoa2V5WzNdKTsKIAogCXN3aXRjaCAoa2V5X2xlbikgewogCWNhc2UgMTY6CkBAIC00NTAsOCArNDQyLDggQEAKIAkJYnJlYWs7CiAJCQogCWNhc2UgMjQ6Ci0JCWN0eC0+ZGtleVs0XSA9IGZmKHNzWzRdID0gdTMyX2luKGluX2tleSArIDE2KSk7Ci0JCWN0eC0+ZGtleVs1XSA9IGZmKHNzWzVdID0gdTMyX2luKGluX2tleSArIDIwKSk7CisJCWN0eC0+ZGtleVs0XSA9IGZmKHNzWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKSk7CisJCWN0eC0+ZGtleVs1XSA9IGZmKHNzWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKSk7CiAJCWtkZjYoY3R4LT5ka2V5LCAwKTsKIAkJZm9yIChpID0gMTsgaSA8IDc7IGkrKykKIAkJCWtkNihjdHgtPmRrZXksIGkpOwpAQCAtNDU5LDEwICs0NTEsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDMyOgotCQljdHgtPmRrZXlbNF0gPSBmZihzc1s0XSA9IHUzMl9pbihpbl9rZXkgKyAxNikpOwotCQljdHgtPmRrZXlbNV0gPSBmZihzc1s1XSA9IHUzMl9pbihpbl9rZXkgKyAyMCkpOwotCQljdHgtPmRrZXlbNl0gPSBmZihzc1s2XSA9IHUzMl9pbihpbl9rZXkgKyAyNCkpOwotCQljdHgtPmRrZXlbN10gPSBmZihzc1s3XSA9IHUzMl9pbihpbl9rZXkgKyAyOCkpOworCQljdHgtPmRrZXlbNF0gPSBmZihzc1s0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSkpOworCQljdHgtPmRrZXlbNV0gPSBmZihzc1s1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSkpOworCQljdHgtPmRrZXlbNl0gPSBmZihzc1s2XSA9IGxlMzJfdG9fY3B1KGtleVs2XSkpOworCQljdHgtPmRrZXlbN10gPSBmZihzc1s3XSA9IGxlMzJfdG9fY3B1KGtleVs3XSkpOwogCQlrZGY4KGN0eC0+ZGtleSwgMCk7CiAJCWZvciAoaSA9IDE7IGkgPCA2OyBpKyspCiAJCQlrZDgoY3R4LT5ka2V5LCBpKTsKQEAgLTQ4NCw2ICs0NzYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImFlcyIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJhZXMtaTU4NiIsCisJLmNyYV9wcmlvcml0eQkJPQkyMDAsCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CUFFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGFlc19jdHgpLApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY2hhbmdlbG9nIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY2hhbmdlbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWY3NmI4Li4wMDAwMDAwCi0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NoYW5nZWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiAgRW5oYW5jZWQgQ1BVIHR5cGUgZGV0ZWN0aW9uIGJ5IE1pa2UgSmFnZGlzLCBQYXRyaWNrIFN0LiBKZWFuCi0gKiAgYW5kIE1hcnRpbiBNYXJlcywgTm92ZW1iZXIgMTk5Ny4KLSAqCi0gKiAgRm9yY2UgQ3lyaXggNng4NihNWCkgYW5kIE0gSUkgcHJvY2Vzc29ycyB0byByZXBvcnQgTVRSUiBjYXBhYmlsaXR5Ci0gKiAgYW5kIEN5cml4ICJjb21hIGJ1ZyIgcmVjb2duaXRpb24gYnkKLSAqICBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4gRmVicnVhcnkgMTk5OS4KLSAqIAotICogIEZvcmNlIENlbnRhdXIgQzYgcHJvY2Vzc29ycyB0byByZXBvcnQgTVRSUiBjYXBhYmlsaXR5LgotICogIEJhcnQgSGFydGdlcnMgPGJhcnRAZXRwbW9kLnBoeXMudHVlLm5sPiwgTWF5IDE5OTkuCi0gKgotICogIEludGVsIE1vYmlsZSBQZW50aXVtIElJIGRldGVjdGlvbiBmaXguIFNlYW4gR2lsbGV5LCBKdW5lIDE5OTkuCi0gKgotICogIElEVCBXaW5jaGlwIHR3ZWFrcywgbWlzYyBjbGVhbiB1cHMuCi0gKiAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4sIEF1Z3VzdCAxOTk5Ci0gKgotICogIEJldHRlciBkZXRlY3Rpb24gb2YgQ2VudGF1ci9JRFQgV2luQ2hpcCBtb2RlbHMuCi0gKiAgQmFydCBIYXJ0Z2VycyA8YmFydEBldHBtb2QucGh5cy50dWUubmw+LCBBdWd1c3QgMTk5OS4KLSAqCi0gKiAgQ2xlYW5lZCB1cCBjYWNoZS1kZXRlY3Rpb24gY29kZQotICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBPY3RvYmVyIDE5OTkKLSAqCi0gKiAgQWRkZWQgcHJvcGVyIEwyIGNhY2hlIGRldGVjdGlvbiBmb3IgQ29wcGVybWluZQotICogIERyYWdhbiBTdGFuY2V2aWMgPHZpc2l0b3JAdmFsaW51eC5jb20+LCBPY3RvYmVyIDE5OTkKLSAqCi0gKiAgQWRkZWQgdGhlIG9yaWdpbmFsIGFycmF5IGZvciBjYXBhYmlsaXR5IGZsYWdzIGJ1dCBmb3Jnb3QgdG8gY3JlZGl0IAotICogIG15c2VsZiA6KSAofjE5OTgpIEZpeGVkL2NsZWFuZWQgdXAgc29tZSBjcHVfbW9kZWxfaW5mbyBhbmQgb3RoZXIgc3R1ZmYKLSAqICBKYXVkZXIgSG8gPGphdWRlcmhvQGNhcnVtYmEuY29tPiwgSmFudWFyeSAyMDAwCi0gKgotICogIERldGVjdGlvbiBmb3IgQ2VsZXJvbiBjb3BwZXJtaW5lLCBpZGVudGlmeV9jcHUoKSBvdmVyaGF1bGVkLAotICogIGFuZCBhIGZldyBvdGhlciBjbGVhbiB1cHMuCi0gKiAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4sIEFwcmlsIDIwMDAKLSAqCi0gKiAgUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKLSAqICBHZW5lcmFsIEZQVSBzdGF0ZSBoYW5kbGluZyBjbGVhbnVwcwotICogIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCi0gKgotICogIEFkZGVkIHByb3BlciBDYXNjYWRlcyBDUFUgYW5kIEwyIGNhY2hlIGRldGVjdGlvbiBmb3IgQ2FzY2FkZXMKLSAqICBhbmQgOC13YXkgdHlwZSBjYWNoZSBoYXBweSBidW5jaCBmcm9tIEludGVsOl4pCi0gKiAgRHJhZ2FuIFN0YW5jZXZpYyA8dmlzaXRvckB2YWxpbnV4LmNvbT4sIE1heSAyMDAwIAotICoKLSAqICBGb3J3YXJkIHBvcnQgQU1EIER1cm9uIGVycmF0YSBUMTMgZnJvbSAyLjIuMTdwcmUKLSAqICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiwgQXVndXN0IDIwMDAKLSAqCi0gKiAgRm9yd2FyZCBwb3J0IGxvdHMgb2YgZml4ZXMvaW1wcm92ZW1lbnRzIGZyb20gMi4yLjE4cHJlCi0gKiAgQ3lyaXggSUlJLCBQZW50aXVtIElWIHN1cHBvcnQuCi0gKiAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4sIE9jdG9iZXIgMjAwMAotICoKLSAqICBNYXNzaXZlIGNsZWFudXAgb2YgQ1BVIGRldGVjdGlvbiBhbmQgYnVnIGhhbmRsaW5nOwotICogIFRyYW5zbWV0YSBDUFUgZGV0ZWN0aW9uLAotICogIEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiwgTm92ZW1iZXIgMjAwMAotICoKLSAqICBWSUEgQzMgU3VwcG9ydC4KLSAqICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiwgTWFyY2ggMjAwMQotICoKLSAqICBBTUQgQXRobG9uL0R1cm9uL1RodW5kZXJiaXJkIGJsdWVzbW9rZSBzdXBwb3J0LgotICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBBcHJpbCAyMDAxLgotICoKLSAqICBDYWNoZVNpemUgYnVnIHdvcmthcm91bmQgdXBkYXRlcyBmb3IgQU1ELCBJbnRlbCAmIFZJQSBDeXJpeC4KLSAqICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiwgU2VwdGVtYmVyLCBPY3RvYmVyIDIwMDEuCi0gKgotICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvY2hhbmdlbG9nIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9jaGFuZ2Vsb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMTM2ODUuLjAwMDAwMDAKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9jaGFuZ2Vsb2cKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotICAgIENoYW5nZUxvZwotCi0gICAgUHJlaGlzdG9yeSBNYXJ0aW4gVGlzY2ho5HVzZXIgPG1hcnRpbkBpa2NiYXJrYS5memsuZGU+Ci0JICAgICAgIEluaXRpYWwgcmVnaXN0ZXItc2V0dGluZyBjb2RlIChmcm9tIHByb2Zvcm0tMS4wKS4KLSAgICAxOTk3MTIxNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgT3JpZ2luYWwgdmVyc2lvbiBmb3IgL3Byb2MvbXRyciBpbnRlcmZhY2UsIFNNUC1zYWZlLgotICB2MS4wCi0gICAgMTk5NzEyMTcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEJ1ZyBmaXggZm9yIGlvY3RscygpJ3MuCi0JICAgICAgIEFkZGVkIHNhbXBsZSBjb2RlIGluIERvY3VtZW50YXRpb24vbXRyci50eHQKLSAgdjEuMQotICAgIDE5OTcxMjE4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBEaXNhbGxvdyBvdmVybGFwcGluZyByZWdpb25zLgotICAgIDE5OTcxMjE5ICAgSmVucyBNYXVyZXIgPGptYXVyZXJAbWVudWV0dC5yaGVpbi1tYWluLmRlPgotICAgICAgICAgICAgICAgUmVnaXN0ZXItc2V0dGluZyBmaXh1cHMuCi0gIHYxLjIKLSAgICAxOTk3MTIyMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRml4dXBzIGZvciBrZXJuZWwgMi4xLjc1LgotICB2MS4zCi0gICAgMTk5NzEyMjkgICBEYXZpZCBXcmFnZyA8ZHB3QGRvYy5pYy5hYy51az4KLSAgICAgICAgICAgICAgIFJlZ2lzdGVyLXNldHRpbmcgZml4dXBzIGFuZCBjb25mb3JtaXR5IHdpdGggSW50ZWwgY29udmVudGlvbnMuCi0gICAgMTk5NzEyMjkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENvc21ldGljIGNoYW5nZXMgYW5kIHdyb3RlIHRoaXMgQ2hhbmdlTG9nIDstKQotICAgIDE5OTgwMTA2ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBGaXh1cHMgZm9yIGtlcm5lbCAyLjEuNzguCi0gIHYxLjQKLSAgICAxOTk4MDExOSAgIERhdmlkIFdyYWdnIDxkcHdAZG9jLmljLmFjLnVrPgotICAgICAgICAgICAgICAgSW5jbHVkZWQgcGFzc2l2ZS1yZWxlYXNlIGVuYWJsZSBjb2RlIChlbHNld2hlcmUgaW4gUENJIHNldHVwKS4KLSAgdjEuNQotICAgIDE5OTgwMTMxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBSZXBsYWNlZCBnbG9iYWwga2VybmVsIGxvY2sgd2l0aCBwcml2YXRlIHNwaW5sb2NrLgotICB2MS42Ci0gICAgMTk5ODAyMDEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEFkZGVkIHdhaXQgZm9yIG90aGVyIENQVXMgdG8gY29tcGxldGUgY2hhbmdlcy4KLSAgdjEuNwotICAgIDE5OTgwMjAyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBCdWcgZml4IGluIGRlZmluaXRpb24gb2YgPHNldF9tdHJyPiBmb3IgVVAuCi0gIHYxLjgKLSAgICAxOTk4MDMxOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRml4dXBzIGZvciBrZXJuZWwgMi4xLjkwLgotICAgIDE5OTgwMzIzICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBNb3ZlIFNNUCBCSU9TIGZpeHVwIGJlZm9yZSBzZWNvbmRhcnkgQ1BVcyBjYWxsIDxjYWxpYnJhdGVfZGVsYXk+Ci0gIHYxLjkKLSAgICAxOTk4MDMyNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRml4ZWQgdGVzdCBmb3Igb3ZlcmxhcHBpbmcgcmVnaW9uczogY29uZnVzZWQgYnkgYWRqYWNlbnQgcmVnaW9ucwotICAgIDE5OTgwMzI2ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBBZGRlZCB3YmludmQgaW4gPHNldF9tdHJyX3ByZXBhcmU+LgotICAgIDE5OTgwNDAxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBCdWcgZml4IGZvciBub24tU01QIGNvbXBpbGF0aW9uLgotICAgIDE5OTgwNDE4ICAgRGF2aWQgV3JhZ2cgPGRwd0Bkb2MuaWMuYWMudWs+Ci0gICAgICAgICAgICAgICBGaXhlZC1NVFJSIHN5bmNocm9uaXNhdGlvbiBmb3IgU01QIGFuZCB1c2UgYXRvbWljIG9wZXJhdGlvbnMKLQkgICAgICAgaW5zdGVhZCBvZiBzcGlubG9ja3MuCi0gICAgMTk5ODA0MTggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRGlmZmVyZW50aWF0ZSBkaWZmZXJlbnQgTVRSUiByZWdpc3RlciBjbGFzc2VzIGZvciBCSU9TIGZpeHVwLgotICB2MS4xMAotICAgIDE5OTgwNDE5ICAgRGF2aWQgV3JhZ2cgPGRwd0Bkb2MuaWMuYWMudWs+Ci0JICAgICAgIEJ1ZyBmaXggaW4gdmFyaWFibGUgTVRSUiBzeW5jaHJvbmlzYXRpb24uCi0gIHYxLjExCi0gICAgMTk5ODA0MTkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4dXBzIGZvciBrZXJuZWwgMi4xLjk3LgotICB2MS4xMgotICAgIDE5OTgwNDIxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFNhZmVyIHN5bmNocm9uaXNhdGlvbiBhY3Jvc3MgQ1BVcyB3aGVuIGNoYW5naW5nIE1UUlJzLgotICB2MS4xMwotICAgIDE5OTgwNDIzICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEJ1Z2ZpeCBmb3IgU01QIHN5c3RlbXMgd2l0aG91dCBNVFJSIHN1cHBvcnQuCi0gIHYxLjE0Ci0gICAgMTk5ODA0MjcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgVHJhcCBjYWxscyB0byA8bXRycl9hZGQ+IGFuZCA8bXRycl9kZWw+IG9uIG5vbi1NVFJSIG1hY2hpbmVzLgotICB2MS4xNQotICAgIDE5OTgwNDI3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFVzZSBhdG9taWMgYml0b3BzIGZvciBzZXR0aW5nIFNNUCBjaGFuZ2UgbWFzay4KLSAgdjEuMTYKLSAgICAxOTk4MDQyOCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIHNwdXJpb3VzIGRpYWdub3N0aWMgbWVzc2FnZS4KLSAgdjEuMTcKLSAgICAxOTk4MDQyOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBNb3ZlZCByZWdpc3Rlci1zZXR0aW5nIG1hY3JvcyBpbnRvIHRoaXMgZmlsZS4KLQkgICAgICAgTW92ZWQgc2V0dXAgY29kZSBmcm9tIGluaXQvbWFpbi5jIHRvIGkzODYtc3BlY2lmaWMgYXJlYXMuCi0gIHYxLjE4Ci0gICAgMTk5ODA1MDIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgTW92ZWQgTVRSUiBkZXRlY3Rpb24gb3V0c2lkZSBjb25kaXRpb25hbHMgaW4gPG10cnJfaW5pdD4uCi0gIHYxLjE5Ci0gICAgMTk5ODA1MDIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudDogbWVudGlvbiBQZW50aXVtIElJIGFuZCBBR1AuCi0gIHYxLjIwCi0gICAgMTk5ODA1MjEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgT25seSBtYW5pcHVsYXRlIGludGVycnVwdCBlbmFibGUgZmxhZyBvbiBsb2NhbCBDUFUuCi0JICAgICAgIEFsbG93IGVuY2xvc2VkIHVuY2FjaGFibGUgcmVnaW9ucy4KLSAgdjEuMjEKLSAgICAxOTk4MDYxMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBbHdheXMgZGVmaW5lIDxtYWluX2xvY2s+LgotICB2MS4yMgotICAgIDE5OTgwOTAxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJlbW92ZWQgbW9kdWxlIHN1cHBvcnQgaW4gb3JkZXIgdG8gdGlkeSB1cCBjb2RlLgotCSAgICAgICBBZGRlZCBzYW5pdHkgY2hlY2sgZm9yIDxtdHJyX2FkZD4vPG10cnJfZGVsPiBiZWZvcmUgPG10cnJfaW5pdD4uCi0JICAgICAgIENyZWF0ZWQgYWRkaXRpb24gcXVldWUgZm9yIHByaW9yIHRvIFNNUCBjb21tZW5jZS4KLSAgdjEuMjMKLSAgICAxOTk4MDkwMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBQb3J0ZWQgcGF0Y2ggdG8ga2VybmVsIDIuMS4xMjAtcHJlMy4KLSAgdjEuMjQKLSAgICAxOTk4MDkxMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIHNhbml0eSBjaGVja3MgYW5kIGFkZGl0aW9uIHF1ZXVlOiBMaW51cyBwcmVmZXJzIGFuIE9PUFMuCi0gIHYxLjI1Ci0gICAgMTk5ODEwMDEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgaGFybWxlc3MgY29tcGlsZXIgd2FybmluZyBpbiBpbmNsdWRlL2FzbS1pMzg2L210cnIuaAotCSAgICAgICBGaXhlZCB2ZXJzaW9uIG51bWJlcmluZyBhbmQgaGlzdG9yeSBmb3IgdjEuMjMgLT4gdjEuMjQuCi0gIHYxLjI2Ci0gICAgMTk5OTAxMTggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgZGV2ZnMgc3VwcG9ydC4KLSAgdjEuMjcKLSAgICAxOTk5MDEyMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDaGFuZ2VkIGxvY2tpbmcgdG8gc3BpbiB3aXRoIHJlc2NoZWR1bGUuCi0JICAgICAgIE1hZGUgdXNlIG9mIG5ldyA8c21wX2NhbGxfZnVuY3Rpb24+LgotICB2MS4yOAotICAgIDE5OTkwMjAxICAgWm9sdOFuIEL2c3r2cm3pbnlpIDx6Ym9zem9yQG1haWwuZXh0ZXJuZXQuaHU+Ci0JICAgICAgIEV4dGVuZGVkIHRoZSBkcml2ZXIgdG8gYmUgYWJsZSB0byB1c2UgQ3lyaXggc3R5bGUgQVJScy4KLSAgICAxOTk5MDIwNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZXN0cnVjdHVyZWQgQ3lyaXggc3VwcG9ydC4KLSAgdjEuMjkKLSAgICAxOTk5MDIwNCAgIFpvbHThbiBC9nN69nJt6W55aSA8emJvc3pvckBtYWlsLmV4dGVybmV0Lmh1PgotCSAgICAgICBSZWZpbmVkIEFSUiBzdXBwb3J0OiBlbmFibGUgTUFQRU4gaW4gc2V0X210cnJfcHJlcGFyZSgpCi0JICAgICAgIGFuZCBkaXNhYmxlIE1BUEVOIGluIHNldF9tdHJyX2RvbmUoKS4KLSAgICAxOTk5MDIwNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBNaW5vciBjbGVhbnVwcy4KLSAgdjEuMzAKLSAgICAxOTk5MDIwOCAgIFpvbHThbiBC9nN69nJt6W55aSA8emJvc3pvckBtYWlsLmV4dGVybmV0Lmh1PgotICAgICAgICAgICAgICAgUHJvdGVjdCBwbGFpbiA2eDg2cyAoYW5kIG90aGVyIHByb2Nlc3NvcnMgd2l0aG91dCB0aGUKLSAgICAgICAgICAgICAgIFBhZ2UgR2xvYmFsIEVuYWJsZSBmZWF0dXJlKSBhZ2FpbnN0IGFjY2Vzc2luZyBDUjQgaW4KLSAgICAgICAgICAgICAgIHNldF9tdHJyX3ByZXBhcmUoKSBhbmQgc2V0X210cnJfZG9uZSgpLgotICAgIDE5OTkwMjEwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFR1cm5lZCA8c2V0X210cnJfdXA+IGFuZCA8Z2V0X210cnI+IGludG8gZnVuY3Rpb24gcG9pbnRlcnMuCi0gIHYxLjMxCi0gICAgMTk5OTAyMTIgICBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KLSAgICAgICAgICAgICAgIE1ham9yIHJld3JpdGUgb2YgY3lyaXhfYXJyX2luaXQoKTogZG8gbm90IHRvdWNoIEFSUnMsCi0gICAgICAgICAgICAgICBsZWF2ZSB0aGVtIGFzIHRoZSBCSU9TIGhhdmUgc2V0IHRoZW0gdXAuCi0gICAgICAgICAgICAgICBFbmFibGUgdXNhZ2Ugb2YgYWxsIDggQVJScy4KLSAgICAgICAgICAgICAgIEF2b2lkIG11bHRpcGxpY2F0aW9ucyBieSAzIGV2ZXJ5d2hlcmUgYW5kIG90aGVyCi0gICAgICAgICAgICAgICBjb2RlIGNsZWFuIHVwcy9zcGVlZCB1cHMuCi0gICAgMTk5OTAyMTMgICBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KLSAgICAgICAgICAgICAgIFNldCB1cCBvdGhlciBDeXJpeCBwcm9jZXNzb3JzIGlkZW50aWNhbCB0byB0aGUgYm9vdCBjcHUuCi0gICAgICAgICAgICAgICBTaW5jZSBDeXJpeCBkb24ndCBzdXBwb3J0IEludGVsIEFQSUMsIHRoaXMgaXMgbCdhcnQgcG91ciBsJ2FydC4KLSAgICAgICAgICAgICAgIFdlaWdoIEFSUnMgYnkgc2l6ZToKLSAgICAgICAgICAgICAgIElmIHNpemUgPD0gMzJNIGlzIGdpdmVuLCBzZXQgdXAgQVJSIyB3ZSB3ZXJlIGdpdmVuLgotICAgICAgICAgICAgICAgSWYgc2l6ZSA+ICAzMk0gaXMgZ2l2ZW4sIHNldCB1cCBBUlI3IG9ubHkgaWYgaXQgaXMgZnJlZSwKLSAgICAgICAgICAgICAgIGZhaWwgb3RoZXJ3aXNlLgotICAgIDE5OTkwMjE0ICAgWm9sdOFuIEL2c3r2cm3pbnlpIDx6Ym9zem9yQG1haWwuZXh0ZXJuZXQuaHU+Ci0gICAgICAgICAgICAgICBBbHNvIGNoZWNrIGZvciBzaXplID49IDI1NksgaWYgd2UgYXJlIHRvIHNldCB1cCBBUlI3LAotICAgICAgICAgICAgICAgbXRycl9hZGQoKSByZXR1cm5zIHRoZSB2YWx1ZSBpdCBnZXRzIGZyb20gc2V0X210cnIoKQotICAgIDE5OTkwMjE4ICAgWm9sdOFuIEL2c3r2cm3pbnlpIDx6Ym9zem9yQG1haWwuZXh0ZXJuZXQuaHU+Ci0gICAgICAgICAgICAgICBSZW1vdmUgQ3lyaXggImNvbWEgYnVnIiB3b3JrYXJvdW5kIGZyb20gaGVyZS4KLSAgICAgICAgICAgICAgIE1vdmVkIHRvIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYyBhbmQKLSAgICAgICAgICAgICAgIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvYnVncy5oCi0gICAgMTk5OTAyMjggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgTVRSUklPQ19LSUxMX0VOVFJZIGlvY3RsKDIpCi0JICAgICAgIFRyYXAgZm9yIGNvdW50ZXIgdW5kZXJmbG93IGluIDxtdHJyX2ZpbGVfZGVsPi4KLQkgICAgICAgVHJhcCBmb3IgNCBNaUIgYWxpZ25lZCByZWdpb25zIGZvciBQUHJvLCBzdGVwcGluZyA8PSA3LgotICAgIDE5OTkwMzAxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENyZWF0ZWQgPGdldF9mcmVlX3JlZ2lvbj4gaG9vay4KLSAgICAxOTk5MDMwNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBUZW1wb3JhcmlseSBkaXNhYmxlIEFNRCBzdXBwb3J0IG5vdyBNVFJSIGNhcGFiaWxpdHkgZmxhZyBpcyBzZXQuCi0gIHYxLjMyCi0gICAgMTk5OTAzMDggICBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KLQkgICAgICAgQWRqdXN0IG15IGNoYW5nZXMgKDE5OTkwMjEyLTE5OTkwMjE4KSB0byBSaWNoYXJkIEdvb2NoJ3MKLQkgICAgICAgbGF0ZXN0IGNoYW5nZXMuICgxOTk5MDIyOC0xOTk5MDMwNSkKLSAgdjEuMzMKLSAgICAxOTk5MDMwOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCB0eXBvIGluIDxwcmludGs+IG1lc3NhZ2UuCi0gICAgMTk5OTAzMTAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgU3VwcG9ydCBLNi1JSS9JSUkgYmFzZWQgb24gQWxhbiBDb3gncyA8YWxhbkByZWRoYXQuY29tPiBwYXRjaGVzLgotICB2MS4zNAotICAgIDE5OTkwNTExICAgQmFydCBIYXJ0Z2VycyA8YmFydEBldHBtb2QucGh5cy50dWUubmw+Ci0JICAgICAgIFN1cHBvcnQgQ2VudGF1ciBDNiBNQ1Incy4KLSAgICAxOTk5MDUxMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBNaW5vciBjbGVhbnVwcy4KLSAgdjEuMzUKLSAgICAxOTk5MDcwNyAgIFpvbHThbiBC9nN69nJt6W55aSA8emJvc3pvckBtYWlsLmV4dGVybmV0Lmh1PgotICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciBBUlIzIGlzIHByb3RlY3RlZCBpbiBjeXJpeF9nZXRfZnJlZV9yZWdpb24oKQotICAgICAgICAgICAgICAgYW5kIG10cnJfZGVsKCkuIFRoZSBjb2RlIHdvbid0IGF0dGVtcHQgdG8gZGVsZXRlIG9yIGNoYW5nZSBpdAotICAgICAgICAgICAgICAgZnJvbSBub3cgb24gaWYgdGhlIEJJT1MgcHJvdGVjdGVkIEFSUjMuIEl0IHNpbGVudGx5IHNraXBzIEFSUjMKLSAgICAgICAgICAgICAgIGluIGN5cml4X2dldF9mcmVlX3JlZ2lvbigpIG9yIHJldHVybnMgd2l0aCBhbiBlcnJvciBjb2RlIGZyb20KLSAgICAgICAgICAgICAgIG10cnJfZGVsKCkuCi0gICAgMTk5OTA3MTEgICBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KLSAgICAgICAgICAgICAgIFJlc2V0IHNvbWUgYml0cyBpbiB0aGUgQ0NScyBpbiBjeXJpeF9hcnJfaW5pdCgpIHRvIGRpc2FibGUgU01NCi0gICAgICAgICAgICAgICBpZiBBUlIzIGlzbid0IHByb3RlY3RlZC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBpZiBTTU0gaXMgYWN0aXZlCi0gICAgICAgICAgICAgICBhbmQgQVJSMyBpc24ndCBwcm90ZWN0ZWQgdGhlbiBkZWxldGluZyBhbmQgc2V0dGluZyBBUlIzIGFnYWluCi0gICAgICAgICAgICAgICBtYXkgbG9jayB1cCB0aGUgcHJvY2Vzc29yLiBXaXRoIFNNTSBlbnRpcmVseSBkaXNhYmxlZCwgaXQgZG9lcwotICAgICAgICAgICAgICAgbm90IGhhcHBlbi4KLSAgICAxOTk5MDgxMiAgIFpvbHThbiBC9nN69nJt6W55aSA8emJvc3pvckBtYWlsLmV4dGVybmV0Lmh1PgotICAgICAgICAgICAgICAgUmVhcnJhbmdlIHN3aXRjaCgpIHN0YXRlbWVudHMgc28gdGhlIGRyaXZlciBhY2NvbW9kYXRlcyB0bwotICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCB0aGUgQU1EIEF0aGxvbiBoYW5kbGVzIGl0cyBNVFJScyB0aGUgc2FtZSB3YXkKLSAgICAgICAgICAgICAgIGFzIEludGVsIGRvZXMuCi0gICAgMTk5OTA4MTQgICBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KLQkgICAgICAgRG91YmxlIGNoZWNrIGZvciBJbnRlbCBpbiBtdHJyX2FkZCgpJ3MgYmlnIHN3aXRjaCgpIGJlY2F1c2UKLQkgICAgICAgdGhhdCByZXZpc2lvbiBjaGVjayBpcyBvbmx5IHZhbGlkIGZvciBJbnRlbCBDUFVzLgotICAgIDE5OTkwODE5ICAgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KLSAgICAgICAgICAgICAgIFRlc3RlZCBab2x0YW4ncyBjaGFuZ2VzIG9uIGEgcHJlIHByb2R1Y3Rpb24gQXRobG9uIC0gMTAwJQotICAgICAgICAgICAgICAgc3VjY2Vzcy4KLSAgICAxOTk5MTAwOCAgIE1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkc0Bjb2xvcmZ1bGxpZmUuY29tPgotICAgIAkgICAgICAgcmVwbGFjZWQgc3Bpbl9sb2NrX3Jlc2NoZWR1bGUoKSB3aXRoIGEgbm9ybWFsIHNlbWFwaG9yZS4KLSAgdjEuMzYKLSAgICAyMDAwMDIyMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQ29tcGlsZSBmaXggaWYgcHJvY2ZzIGFuZCBkZXZmcyBub3QgZW5hYmxlZC4KLQkgICAgICAgRm9ybWF0dGluZyBjaGFuZ2VzLgotICB2MS4zNwotICAgIDIwMDAxMTA5ICAgSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+Ci0JICAgICAgIFVzZSB0aGUgbmV3IGNlbnRyYWxpemVkIENQVSBmZWF0dXJlIGRldGVjdHMuCi0KLSAgdjEuMzgKLSAgICAyMDAxMDMwOSAgIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+Ci0JICAgICAgIEFkZCBzdXBwb3J0IGZvciBDeXJpeCBJSUkuCi0KLSAgdjEuMzkKLSAgICAyMDAxMDMxMiAgIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+Ci0gICAgICAgICAgICAgICBVZ2gsIEkgYnJva2UgQU1EIHN1cHBvcnQuCi0JICAgICAgIFJld29ya2VkIGZpeCBieSBUcm9lbHMgV2Fsc3RlZCBIYW5zZW4gPHRyb2Vsc0B0aHVsZS5ubz4KLQotICB2MS40MAotICAgIDIwMDEwMzI3ICAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KLQkgICAgICAgQWRhcHRlZCBDeXJpeCBJSUkgc3VwcG9ydCB0byBpbmNsdWRlIFZJQSBDMy4KLQotICB2Mi4wCi0gICAgMjAwMjAzMDYgICBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgotICAgICAgICAgICAgICAgU3BsaXQgbXRyci5jIC0+IG10cnIvKi5jCi0gICAgICAgICAgICAgICBDb252ZXJ0ZWQgdG8gTGludXggS2VybmVsIENvZGluZyBTdHlsZQotICAgICAgICAgICAgICAgRml4ZWQgc2V2ZXJhbCBtaW5vciBuaXRzIGluIGZvcm0KLSAgICAgICAgICAgICAgIE1vdmVkIHNvbWUgU01QLW9ubHkgZnVuY3Rpb25zIG91dCwgc28gdGhleSBjYW4gYmUgdXNlZAotICAgICAgICAgICAgICAgIGZvciBwb3dlciBtYW5hZ2VtZW50IGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICBUT0RPOiBGaXggdXNlciBpbnRlcmZhY2UgY3J1ZnQuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IGMzMGExNmQuLmU4YTUzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCkBAIC0yMjIsNiArMjIyLDEwIEBACiB7CiAJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm47CisJaWYgKCFlbmFibGUpCisJCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHBhZ2VfYWRkcmVzcyhwYWdlKSwKKwkJCQkJCSBwYWdlX2FkZHJlc3MocGFnZStudW1wYWdlcykpOworCiAJLyogdGhlIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkIC0gdGhlIGNhbGxzIGNhbm5vdCBmYWlsLAogCSAqIGxhcmdlIHBhZ2VzIGFyZSBkaXNhYmxlZCBhdCBib290IHRpbWUuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCAwNmJlNDA1Li45Yzg5ZWViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTExNzEsNyArMTE3MSw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICgobWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgbW9kdWxlX25hbWUsICZ2cGVfZm9wcykgPCAwKSkgeworCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIG1vZHVsZV9uYW1lLCAmdnBlX2ZvcHMpOworCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKCJWUEUgbG9hZGVyOiB1bmFibGUgdG8gcmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZVxuIik7CiAJCXJldHVybiBtYWpvcjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDk3N2VlM2EuLjM0YWIwZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC05NzIsNyArOTcyLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BQQ19SVEFTCi0JLyogVG8gaGVscCBlYXJseSBkZWJ1Z2dpbmcgdmlhIHRoZSBmcm9udCBwYW5lbCwgd2UgcmV0cmVpdmUgYSBtaW5pbWFsCisJLyogVG8gaGVscCBlYXJseSBkZWJ1Z2dpbmcgdmlhIHRoZSBmcm9udCBwYW5lbCwgd2UgcmV0cmlldmUgYSBtaW5pbWFsCiAJICogc2V0IG9mIFJUQVMgaW5mb3Mgbm93IGlmIGF2YWlsYWJsZQogCSAqLwogCXsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggNDI4M2ZhMy4uYWUyZTJhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogfQogCiAvKgotICogQ2FsbCBlYXJseSBkdXJpbmcgYm9vdCwgYmVmb3JlIG1lbSBpbml0IG9yIGJvb3RtZW0sIHRvIHJldHJlaXZlIHRoZSBSVEFTCisgKiBDYWxsIGVhcmx5IGR1cmluZyBib290LCBiZWZvcmUgbWVtIGluaXQgb3IgYm9vdG1lbSwgdG8gcmV0cmlldmUgdGhlIFJUQVMKICAqIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBkZXZpY2UtdHJlZSBhbmQgYWxsb2NhdGUgdGhlIFJNTyBidWZmZXIgZm9yIHVzZXJsYW5kCiAgKiBhY2Nlc3Nlcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDk4ZTlmMDUuLjgxNTY3ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCiAJLyoKIAkgKiBGaWxsIHRoZSBwcGM2NF9jYWNoZXMgJiBzeXN0ZW1jZmcgc3RydWN0dXJlcyB3aXRoIGluZm9ybWF0aW9ucwotCSAqIHJldHJlaXZlZCBmcm9tIHRoZSBkZXZpY2UtdHJlZS4gTmVlZCB0byBiZSBjYWxsZWQgYmVmb3JlCisJICogcmV0cmlldmVkIGZyb20gdGhlIGRldmljZS10cmVlLiBOZWVkIHRvIGJlIGNhbGxlZCBiZWZvcmUKIAkgKiBmaW5pc2hfZGV2aWNlX3RyZWUoKSBzaW5jZSB0aGUgbGF0ZXIgcmVxdWlyZXMgc29tZSBvZiB0aGUKIAkgKiBpbmZvcm1hdGlvbnMgZmlsbGVkIHVwIGhlcmUgdG8gcHJvcGVybHkgcGFyc2UgdGhlIGludGVycnVwdAogCSAqIHRyZWUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCA1YmI0MzNjLi4xNDkzNTFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbWVtX3NpemUsIHJuZF9tZW1fc2l6ZSwgcHRlZ19jb3VudDsKIAogCS8qIElmIGhhc2ggc2l6ZSBpc24ndCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSwgd2UgdHJ5IHRvCi0JICogcmV0cmVpdmUgaXQgZnJvbSB0aGUgZGV2aWNlLXRyZWUuIElmIGl0J3Mgbm90IHRoZXJlIG5laXRoZXIsIHdlCisJICogcmV0cmlldmUgaXQgZnJvbSB0aGUgZGV2aWNlLXRyZWUuIElmIGl0J3Mgbm90IHRoZXJlIG5laXRoZXIsIHdlCiAJICogY2FsY3VsYXRlIGl0IG5vdyBiYXNlZCBvbiB0aGUgdG90YWwgUkFNIHNpemUKIAkgKi8KIAlpZiAocHBjNjRfcGZ0X3NpemUgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggMWYzNTA3Yy4uZDJiYTM1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogc3RhdGljIHZvaWQgc3B1ZnNfcHJ1bmVfZGlyKHN0cnVjdCBkZW50cnkgKmRpcikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICp0bXA7Ci0JZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVudHJ5LCB0bXAsICZkaXItPmRfc3ViZGlycywgZF9jaGlsZCkgewogCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CkBAIC0xNTQsNyArMTU0LDcgQEAKIAkJfQogCX0KIAlzaHJpbmtfZGNhY2hlX3BhcmVudChkaXIpOwotCXVwKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgc3B1ZnNfcm1kaXIoc3RydWN0IGlub2RlICpyb290LCBzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVudHJ5KQpAQCAtMTYyLDE1ICsxNjIsMTUgQEAKIAlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eDsKIAogCS8qIHJlbW92ZSBhbGwgZW50cmllcyAqLwotCWRvd24oJnJvb3QtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZyb290LT5pX211dGV4KTsKIAlzcHVmc19wcnVuZV9kaXIoZGlyX2RlbnRyeSk7Ci0JdXAoJnJvb3QtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnJvb3QtPmlfbXV0ZXgpOwogCiAJLyogV2UgaGF2ZSB0byBnaXZlIHVwIHRoZSBtbV9zdHJ1Y3QgKi8KIAljdHggPSBTUFVGU19JKGRpcl9kZW50cnktPmRfaW5vZGUpLT5pX2N0eDsKIAlzcHVfZm9yZ2V0KGN0eCk7CiAKLQkvKiBYWFggRG8gd2UgbmVlZCB0byBob2xkIGlfc2VtIGhlcmUgPyAqLworCS8qIFhYWCBEbyB3ZSBuZWVkIHRvIGhvbGQgaV9tdXRleCBoZXJlID8gKi8KIAlyZXR1cm4gc2ltcGxlX3JtZGlyKHJvb3QsIGRpcl9kZW50cnkpOwogfQogCkBAIC0zMzAsNyArMzMwLDcgQEAKIG91dF9kcHV0OgogCWRwdXQoZGVudHJ5KTsKIG91dF9kaXI6Ci0JdXAoJm5kLT5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm5kLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCmluZGV4IGE0YjUwYzQuLmE0MTVlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCkBAIC04MCw3ICs4MCw3IEBACiB9OwogCiAvKiBQb3dlciBtb2RlIGRhdGEgaXMgYW4gYXJyYXkgb2YgdGhlIDMyIGJpdHMgUENSIHZhbHVlcyB0byB1c2UgZm9yCi0gKiB0aGUgdmFyaW91cyBmcmVxdWVuY2llcywgcmV0cmVpdmVkIGZyb20gdGhlIGRldmljZS10cmVlCisgKiB0aGUgdmFyaW91cyBmcmVxdWVuY2llcywgcmV0cmlldmVkIGZyb20gdGhlIGRldmljZS10cmVlCiAgKi8KIHN0YXRpYyB1MzIgKmc1X3Btb2RlX2RhdGE7CiBzdGF0aWMgaW50IGc1X3Btb2RlX21heDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDQ2YTZhZDYuLmEzZmIzMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSw0NiArMSw2NyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExCi0jIFN1biBNYXIgIDYgMjA6NDc6MjkgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1CisjIE1vbiBKYW4gIDkgMTQ6MzY6MjkgMjAwNgogIworQ09ORklHX1NQQVJDPXkKK0NPTkZJR19TUEFSQzY0PXkKIENPTkZJR182NEJJVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19TUEFSQzY0X1BBR0VfU0laRV84S0I9eQorIyBDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV81MTJLQiBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV80TUIgaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE1Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC01MiwyMCArNzMsMzIgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQorCisjCisjIEJsb2NrIGxheWVyCisjCisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKIAogIwogIyBHZW5lcmFsIG1hY2hpbmUgc2V0dXAKICMKLUNPTkZJR19CQkNfSTJDPW0KLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfU01QPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19OUl9DUFVTPTQKIENPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9bQogIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX1NUQVQ9bQogQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUz15CkBAIC03NSwxNSArMTA4LDIyIEBACiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCiBDT05GSUdfVVMzX0ZSRVE9bQogQ09ORklHX1VTMkVfRlJFUT1tCi1DT05GSUdfU1BBUkM2ND15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUI9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiBDT05GSUdfU0JVUz15CiBDT05GSUdfU0JVU0NIQVI9eQpAQCAtOTEsMTMwICsxMzEsMTQyIEBACiBDT05GSUdfU1VOX0lPPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19SVEM9eQogIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9OQU1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NVTl9PUEVOUFJPTUZTPW0KIENPTkZJR19TUEFSQzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQklORk1UX0VMRjMyPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUMzIgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19TT0xBUklTX0VNVUw9bQogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwotQ09ORklHX1BBUlBPUlQ9bQotQ09ORklHX1BBUlBPUlRfUEM9bQotQ09ORklHX1BBUlBPUlRfUENfRklGTz15Ci0jIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9TVU5CUFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9PVEhFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF8xMjg0PXkKLUNPTkZJR19QUklOVEVSPW0KLUNPTkZJR19FTlZDVFJMPW0KLUNPTkZJR19ESVNQTEFZN1NFRz1tCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfU09MQVJJU19FTVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKK0NPTkZJR19BUlBEPXkKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD15CitDT05GSUdfSU5FVF9FU1A9eQorQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKK0NPTkZJR19UQ1BfQ09OR19BRFZBTkNFRD15CisKKyMKKyMgVENQIGNvbmdlc3Rpb24gY29udHJvbAorIworQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9bQorQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KK0NPTkZJR19UQ1BfQ09OR19IVENQPW0KK0NPTkZJR19UQ1BfQ09OR19IU1RDUD1tCitDT05GSUdfVENQX0NPTkdfSFlCTEE9bQorQ09ORklHX1RDUF9DT05HX1ZFR0FTPW0KK0NPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRT1tCitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCisKKyMKKyMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfRENDUF9DQ0lEMz1tCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCisKKyMKKyMgRENDUCBLZXJuZWwgSGFja2luZworIworIyBDT05GSUdfSVBfRENDUF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQX1VOTE9BRF9IQUNLIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CitDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBzdXBwb3J0CisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKICMKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9QTTI9eQotIyBDT05GSUdfRkJfUE0yX0ZJRk9fRElTQ09OTkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CVzIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0czIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRzY9eQotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLUNPTkZJR19GQl9BVFk9eQotQ09ORklHX0ZCX0FUWV9DVD15Ci0jIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZX1hMX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX0FUWV9HWD15Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotQ09ORklHX0ZCX1NCVVM9eQotQ09ORklHX0ZCX0ZGQj15Ci0jIENPTkZJR19GQl9UQ1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0cxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QOTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9MRU8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPTV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLUNPTkZJR19GT05UX1NVTjh4MTY9eQotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTE9HTz15Ci0jIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAotQ09ORklHX0xPR09fU1VOX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfU1VOQ09SRT15Ci1DT05GSUdfU0VSSUFMX1NVTlpJTE9HPXkKLUNPTkZJR19TRVJJQUxfU1VOWklMT0dfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1NVTlNVPXkKLUNPTkZJR19TRVJJQUxfU1VOU1VfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1NVTlNBQj1tCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotCi0jCi0jIE1pc2MgTGludXgvU1BBUkMgZHJpdmVycwotIwotQ09ORklHX1NVTl9PUEVOUFJPTUlPPW0KLUNPTkZJR19TVU5fTU9TVEVLX1JUQz15Ci1DT05GSUdfT0JQX0ZMQVNIPW0KLSMgQ09ORklHX1NVTl9CUFAgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCiAKICMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQpAQCAtMjIyLDEwICsyNzQsMTggQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAKICMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIwogIyBCbG9jayBkZXZpY2VzCiAjCiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CkBAIC0yMzQsMjIgKzI5NCwxMyBAQAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9TWDg9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfVUI9bQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEU9eQotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCkBAIC0yNjUsNyArMzE2LDcgQEAKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQogIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKLUNPTkZJR19CTEtfREVWX0lERVRBUEU9bQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CkBAIC0yNzgsNyArMzI5LDcgQEAKICMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfT1BUSTYyMT1tCisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAogQ09ORklHX0lERURNQV9QQ0lfQVVUTz15CkBAIC0yODYsMjcgKzMzNywyNSBAQAogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0FMSTE1WDM9eQogIyBDT05GSUdfV0RDX0FMSTE1WDMgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfQU1ENzRYWD1tCi1DT05GSUdfQkxLX0RFVl9DTUQ2NFg9bQotQ09ORklHX0JMS19ERVZfVFJJRkxFWD1tCi1DT05GSUdfQkxLX0RFVl9DWTgyQzY5Mz1tCi1DT05GSUdfQkxLX0RFVl9DUzU1MjA9bQotQ09ORklHX0JMS19ERVZfQ1M1NTMwPW0KLUNPTkZJR19CTEtfREVWX0hQVDM0WD1tCi0jIENPTkZJR19IUFQzNFhfQVVUT0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9IUFQzNjY9bQotQ09ORklHX0JMS19ERVZfU0MxMjAwPW0KLUNPTkZJR19CTEtfREVWX1BJSVg9bQotQ09ORklHX0JMS19ERVZfTlM4NzQxNT1tCi1DT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQ9bQotIyBDT05GSUdfUERDMjAyWFhfQlVSU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXPW0KLSMgQ09ORklHX1BEQzIwMlhYX0ZPUkNFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NWV0tTPW0KLUNPTkZJR19CTEtfREVWX1NJSU1BR0U9bQotQ09ORklHX0JMS19ERVZfU0xDOTBFNjY9bQotQ09ORklHX0JMS19ERVZfVFJNMjkwPW0KLUNPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD1tCisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKICMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldApAQCAtMzE2LDYgKzM2NSw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKK0NPTkZJR19SQUlEX0FUVFJTPW0KIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0zMjMsMTEgKzM3MywxMiBAQAogIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQogIwogQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotQ09ORklHX0NIUl9ERVZfT1NTVD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj1tCiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogCiAjCiAjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwpAQCAtMzQwLDg5ICszOTEsNDIgQEAKICMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKLUNPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCi1DT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQ9bQotQ09ORklHX1NDU0lfM1dfOVhYWD1tCi1DT05GSUdfU0NTSV9BQ0FSRD1tCi1DT05GSUdfU0NTSV9BQUNSQUlEPW0KK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0FJQzc5WFg9bQotQ09ORklHX0FJQzc5WFhfQ01EU19QRVJfREVWSUNFPTMyCi1DT05GSUdfQUlDNzlYWF9SRVNFVF9ERUxBWV9NUz0xNTAwMAotIyBDT05GSUdfQUlDNzlYWF9CVUlMRF9GSVJNV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BSUM3OVhYX0VOQUJMRV9SRF9TVFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJQzc5WFhfREVCVUdfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BSUM3OVhYX0RFQlVHX01BU0s9MAotIyBDT05GSUdfQUlDNzlYWF9SRUdfUFJFVFRZX1BSSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NBVEE9eQotQ09ORklHX1NDU0lfU0FUQV9BSENJPW0KLUNPTkZJR19TQ1NJX1NBVEFfU1ZXPW0KLUNPTkZJR19TQ1NJX0FUQV9QSUlYPW0KLUNPTkZJR19TQ1NJX1NBVEFfTlY9bQotQ09ORklHX1NDU0lfU0FUQV9QUk9NSVNFPW0KLUNPTkZJR19TQ1NJX1NBVEFfUVNUT1I9bQotQ09ORklHX1NDU0lfU0FUQV9TWDQ9bQotQ09ORklHX1NDU0lfU0FUQV9TSUw9bQotQ09ORklHX1NDU0lfU0FUQV9TSVM9bQotQ09ORklHX1NDU0lfU0FUQV9VTEk9bQotQ09ORklHX1NDU0lfU0FUQV9WSUE9bQotQ09ORklHX1NDU0lfU0FUQV9WSVRFU1NFPW0KLUNPTkZJR19TQ1NJX0RNWDMxOTFEPW0KLUNPTkZJR19TQ1NJX0VBVEFfUElPPW0KKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotQ09ORklHX1NDU0lfSVBTPW0KLUNPTkZJR19TQ1NJX0lOSVRJTz1tCi1DT05GSUdfU0NTSV9JTklBMTAwPW0KLUNPTkZJR19TQ1NJX1BQQT1tCi1DT05GSUdfU0NTSV9JTU09bQotIyBDT05GSUdfU0NTSV9JWklQX0VQUDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVpJUF9TTE9XX0NUUiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfMj15Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0xCi1DT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMT0dJQ19JU1A9bQotQ09ORklHX1NDU0lfUUxPR0lDX0ZDPXkKLUNPTkZJR19TQ1NJX1FMT0dJQ19GQ19GSVJNV0FSRT15CisjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMT0dJQ1BUST1tCisjIENPTkZJR19TQ1NJX1FMT0dJQ1BUSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTEEyWFhYPXkKLSMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAotQ09ORklHX1NDU0lfREMzOTV4PW0KKyMgQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotQ09ORklHX1NDU0lfREVCVUc9bQotQ09ORklHX1NDU0lfU1VORVNQPXkKLQotIwotIyBGaWJyZSBDaGFubmVsIHN1cHBvcnQKLSMKLUNPTkZJR19GQzQ9bQotCi0jCi0jIEZDNCBkcml2ZXJzCi0jCi1DT05GSUdfRkM0X1NPQz1tCi1DT05GSUdfRkM0X1NPQ0FMPW0KLQotIwotIyBGQzQgdGFyZ2V0cwotIwotQ09ORklHX1NDU0lfUExVVE89bQotQ09ORklHX1NDU0lfRkNBTD1tCisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1VORVNQIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDQyLDQyNyArNDQ2LDM0IEBACiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fWkVSTz1tCisjIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAogCiAjCiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19GVVNJT049bQotQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTQwCi1DT05GSUdfRlVTSU9OX0NUTD1tCi1DT05GSUdfRlVTSU9OX0xBTj1tCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIwotQ09ORklHX0lFRUUxMzk0PW0KKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKIAogIwotIyBTdWJzeXN0ZW0gT3B0aW9ucworIyBJMk8gZGV2aWNlIHN1cHBvcnQKICMKLSMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTEzOTRfT1VJX0RCPXkKLUNPTkZJR19JRUVFMTM5NF9FWFRSQV9DT05GSUdfUk9NUz15Ci1DT05GSUdfSUVFRTEzOTRfQ09ORklHX1JPTV9JUDEzOTQ9eQorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIwotIyBEZXZpY2UgRHJpdmVycworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfSUVFRTEzOTRfUENJTFlOWD1tCi1DT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9bQotCi0jCi0jIFByb3RvY29sIERyaXZlcnMKLSMKLUNPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQotQ09ORklHX0lFRUUxMzk0X1NCUDI9bQotIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KLUNPTkZJR19JRUVFMTM5NF9SQVdJTz1tCi1DT05GSUdfSUVFRTEzOTRfQ01QPW0KLUNPTkZJR19JRUVFMTM5NF9BTURUUD1tCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19ORVRMSU5LX0RFVj15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT1tCi1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotQ09ORklHX05FVF9JUElQPW0KLUNPTkZJR19ORVRfSVBHUkU9bQotQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQotQ09ORklHX0lQX01ST1VURT15Ci1DT05GSUdfSVBfUElNU01fVjE9eQotQ09ORklHX0lQX1BJTVNNX1YyPXkKLUNPTkZJR19BUlBEPXkKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci1DT05GSUdfSU5FVF9BSD15Ci1DT05GSUdfSU5FVF9FU1A9eQotQ09ORklHX0lORVRfSVBDT01QPXkKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVBfVlM9bQotIyBDT05GSUdfSVBfVlNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCi0KLSMKLSMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAotIwotQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15Ci1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXkKLUNPTkZJR19JUF9WU19QUk9UT19FU1A9eQotQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKLQotIwotIyBJUFZTIHNjaGVkdWxlcgotIwotQ09ORklHX0lQX1ZTX1JSPW0KLUNPTkZJR19JUF9WU19XUlI9bQotQ09ORklHX0lQX1ZTX0xDPW0KLUNPTkZJR19JUF9WU19XTEM9bQotQ09ORklHX0lQX1ZTX0xCTEM9bQotQ09ORklHX0lQX1ZTX0xCTENSPW0KLUNPTkZJR19JUF9WU19ESD1tCi1DT05GSUdfSVBfVlNfU0g9bQotQ09ORklHX0lQX1ZTX1NFRD1tCi1DT05GSUdfSVBfVlNfTlE9bQotCi0jCi0jIElQVlMgYXBwbGljYXRpb24gaGVscGVyCi0jCi1DT05GSUdfSVBfVlNfRlRQPW0KLUNPTkZJR19JUFY2PW0KLUNPTkZJR19JUFY2X1BSSVZBQ1k9eQotQ09ORklHX0lORVQ2X0FIPW0KLUNPTkZJR19JTkVUNl9FU1A9bQotQ09ORklHX0lORVQ2X0lQQ09NUD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JUFY2X1RVTk5FTD1tCi1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQlJJREdFX05FVEZJTFRFUj15Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9DVF9BQ0NUPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfUVVFVUU9bQotQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEhZU0RFVj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9GSUxURVI9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQotQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCi1DT05GSUdfSVBfTkZfUkFXPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCi1DT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQotQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVA2X05GX1FVRVVFPW0KLUNPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCi1DT05GSUdfSVA2X05GX01BVENIX1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCi1DT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUEhZU0RFVj1tCi1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVA2X05GX1JBVz1tCi0KLSMKLSMgREVDbmV0OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0RFQ05FVF9ORl9HUkFCVUxBVE9SPW0KLQotIwotIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KLUNPTkZJR19CUklER0VfRUJUX0JST1VURT1tCi1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCi1DT05GSUdfQlJJREdFX0VCVF9UX05BVD1tCi1DT05GSUdfQlJJREdFX0VCVF84MDJfMz1tCi1DT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCi1DT05GSUdfQlJJREdFX0VCVF9BUlA9bQotQ09ORklHX0JSSURHRV9FQlRfSVA9bQotQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQotQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCi1DT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KLUNPTkZJR19CUklER0VfRUJUX1NUUD1tCi1DT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KLUNPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KLUNPTkZJR19CUklER0VfRUJUX0ROQVQ9bQotQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KLUNPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KLUNPTkZJR19CUklER0VfRUJUX1NOQVQ9bQotQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KLUNPTkZJR19CUklER0VfRUJUX1VMT0c9bQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLUNPTkZJR19BVE09eQotQ09ORklHX0FUTV9DTElQPXkKLSMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAotQ09ORklHX0FUTV9MQU5FPW0KLUNPTkZJR19BVE1fTVBPQT1tCi1DT05GSUdfQVRNX0JSMjY4ND1tCi1DT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUj15Ci1DT05GSUdfQlJJREdFPW0KLUNPTkZJR19WTEFOXzgwMjFRPW0KLUNPTkZJR19ERUNORVQ9bQotQ09ORklHX0RFQ05FVF9ST1VURVI9eQotQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUks9eQotQ09ORklHX0xMQz1tCi1DT05GSUdfTExDMj1tCi1DT05GSUdfSVBYPW0KLSMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAotQ09ORklHX0FUQUxLPW0KLSMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAotQ09ORklHX1gyNT1tCi1DT05GSUdfTEFQQj1tCi1DT05GSUdfTkVUX0RJVkVSVD15Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi1DT05GSUdfTkVUX1NDSEVEPXkKLSMgQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfU0NIX0NMS19DUFU9eQotQ09ORklHX05FVF9TQ0hfQ0JRPW0KLUNPTkZJR19ORVRfU0NIX0hUQj1tCi1DT05GSUdfTkVUX1NDSF9IRlNDPW0KLUNPTkZJR19ORVRfU0NIX0FUTT15Ci1DT05GSUdfTkVUX1NDSF9QUklPPW0KLUNPTkZJR19ORVRfU0NIX1JFRD1tCi1DT05GSUdfTkVUX1NDSF9TRlE9bQotQ09ORklHX05FVF9TQ0hfVEVRTD1tCi1DT05GSUdfTkVUX1NDSF9UQkY9bQotQ09ORklHX05FVF9TQ0hfR1JFRD1tCi1DT05GSUdfTkVUX1NDSF9EU01BUks9bQotQ09ORklHX05FVF9TQ0hfTkVURU09bQotQ09ORklHX05FVF9TQ0hfSU5HUkVTUz1tCi1DT05GSUdfTkVUX1FPUz15Ci1DT05GSUdfTkVUX0VTVElNQVRPUj15Ci1DT05GSUdfTkVUX0NMUz15Ci1DT05GSUdfTkVUX0NMU19CQVNJQz1tCi1DT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFND1tCi1DT05GSUdfTkVUX0NMU19ST1VURT15Ci1DT05GSUdfTkVUX0NMU19GVz1tCi1DT05GSUdfTkVUX0NMU19VMzI9bQotQ09ORklHX0NMU19VMzJfUEVSRj15Ci1DT05GSUdfTkVUX0NMU19JTkQ9eQotQ09ORklHX0NMU19VMzJfTUFSSz15Ci1DT05GSUdfTkVUX0NMU19SU1ZQPW0KLUNPTkZJR19ORVRfQ0xTX1JTVlA2PW0KLUNPTkZJR19ORVRfRU1BVENIPXkKLUNPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCi1DT05GSUdfTkVUX0VNQVRDSF9DTVA9bQotQ09ORklHX05FVF9FTUFUQ0hfTkJZVEU9bQotQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KLUNPTkZJR19ORVRfRU1BVENIX01FVEE9bQotQ09ORklHX05FVF9DTFNfQUNUPXkKLUNPTkZJR19ORVRfQUNUX1BPTElDRT1tCi1DT05GSUdfTkVUX0FDVF9HQUNUPW0KLUNPTkZJR19HQUNUX1BST0I9eQotQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KLUNPTkZJR19ORVRfQUNUX0lQVD1tCi1DT05GSUdfTkVUX0FDVF9QRURJVD1tCi0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi1DT05GSUdfTkVUX1BLVEdFTj1tCi1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci1DT05GSUdfSEFNUkFESU89eQotCi0jCi0jIFBhY2tldCBSYWRpbyBwcm90b2NvbHMKLSMKLUNPTkZJR19BWDI1PW0KLUNPTkZJR19BWDI1X0RBTUFfU0xBVkU9eQotQ09ORklHX05FVFJPTT1tCi1DT05GSUdfUk9TRT1tCi0KLSMKLSMgQVguMjUgbmV0d29yayBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfQlBRRVRIRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFZQ09NX1NFUl9GRFggaXMgbm90IHNldAotIyBDT05GSUdfQkFZQ09NX1NFUl9IRFggaXMgbm90IHNldAotIyBDT05GSUdfQkFZQ09NX1BBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQU0gaXMgbm90IHNldAotQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCi1DT05GSUdfSVJMQU49bQotQ09ORklHX0lSTkVUPW0KLUNPTkZJR19JUkNPTU09bQotQ09ORklHX0lSREFfVUxUUkE9eQotCi0jCi0jIElyREEgb3B0aW9ucwotIwotQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKLUNPTkZJR19JUkRBX0ZBU1RfUlI9eQotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotCi0jCi0jIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTUFURUxfRklSPW0KLSMgQ09ORklHX1ZMU0lfRklSIGlzIG5vdCBzZXQKLUNPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCi1DT05GSUdfQlRfUkZDT01NPW0KLUNPTkZJR19CVF9SRkNPTU1fVFRZPXkKLUNPTkZJR19CVF9CTkVQPW0KLUNPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15Ci1DT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQotQ09ORklHX0JUX0NNVFA9bQotQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0JUX0hDSVVTQj1tCi1DT05GSUdfQlRfSENJVVNCX1NDTz15Ci1DT05GSUdfQlRfSENJVUFSVD1tCi1DT05GSUdfQlRfSENJVUFSVF9IND15Ci1DT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKLUNPTkZJR19CVF9IQ0lVQVJUX0JDU1BfVFhDUkM9eQotQ09ORklHX0JUX0hDSUJDTTIwM1g9bQotQ09ORklHX0JUX0hDSUJQQTEwWD1tCi1DT05GSUdfQlRfSENJQkZVU0I9bQotQ09ORklHX0JUX0hDSVZIQ0k9bQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KLUNPTkZJR19CT05ESU5HPW0KLUNPTkZJR19FUVVBTElaRVI9bQotQ09ORklHX1RVTj1tCi0jIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAogCiAjCiAjIEFSQ25ldCBkZXZpY2VzCkBAIC04NzAsODYgKzQ4MSw3MyBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQotQ09ORklHX1NVTkxBTkNFPXkKLUNPTkZJR19IQVBQWU1FQUw9eQotQ09ORklHX1NVTkJNQUM9bQotQ09ORklHX1NVTlFFPW0KLUNPTkZJR19TVU5HRU09eQotQ09ORklHX05FVF9WRU5ET1JfM0NPTT15Ci1DT05GSUdfVk9SVEVYPW0KLUNPTkZJR19UWVBIT09OPW0KKyMgQ09ORklHX1NVTkxBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5CTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CitDT05GSUdfQ0FTU0lOST1tCisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUX1RVTElQPXkKLUNPTkZJR19ERTIxMDRYPW0KLUNPTkZJR19UVUxJUD1tCi0jIENPTkZJR19UVUxJUF9NV0kgaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVBfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVFVMSVBfTkFQST15Ci1DT05GSUdfVFVMSVBfTkFQSV9IV19NSVRJR0FUSU9OPXkKLUNPTkZJR19ERTRYNT1tCi1DT05GSUdfV0lOQk9ORF84NDA9bQotIyBDT05GSUdfRE05MTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci1DT05GSUdfUENORVQzMj1tCisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19BREFQVEVDX1NUQVJGSVJFPW0KLUNPTkZJR19BREFQVEVDX1NUQVJGSVJFX05BUEk9eQotQ09ORklHX0I0ND1tCi1DT05GSUdfRk9SQ0VERVRIPW0KLUNPTkZJR19ER1JTPW0KLUNPTkZJR19FRVBSTzEwMD1tCi1DT05GSUdfRTEwMD1tCi1DT05GSUdfRkVBTE5YPW0KLUNPTkZJR19OQVRTRU1JPW0KLUNPTkZJR19ORTJLX1BDST1tCisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPTz1tCi0jIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAotIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAotQ09ORklHX1NJUzkwMD1tCi1DT05GSUdfRVBJQzEwMD1tCi1DT05GSUdfU1VOREFOQ0U9bQotQ09ORklHX1NVTkRBTkNFX01NSU89eQotQ09ORklHX1ZJQV9SSElORT1tCi0jIENPTkZJR19WSUFfUkhJTkVfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKICMKLUNPTkZJR19BQ0VOSUM9bQotIyBDT05GSUdfQUNFTklDX09NSVRfVElHT05fSSBpcyBub3Qgc2V0Ci1DT05GSUdfREwySz1tCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9bQogQ09ORklHX0UxMDAwX05BUEk9eQotQ09ORklHX01ZUklfU0JVUz1tCi1DT05GSUdfTlM4MzgyMD1tCi1DT05GSUdfSEFNQUNIST1tCi1DT05GSUdfWUVMTE9XRklOPW0KLUNPTkZJR19SODE2OT1tCi1DT05GSUdfUjgxNjlfTkFQST15Ci1DT05GSUdfUjgxNjlfVkxBTj15Ci1DT05GSUdfU0s5OExJTj1tCi1DT05GSUdfVklBX1ZFTE9DSVRZPW0KKyMgQ09ORklHX01ZUklfU0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz1tCitDT05GSUdfQk5YMj1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCi1DT05GSUdfSVhHQj1tCi1DT05GSUdfSVhHQl9OQVBJPXkKLUNPTkZJR19TMklPPW0KLUNPTkZJR19TMklPX05BUEk9eQotQ09ORklHXzJCVUZGX01PREU9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtOTU5LDE0MCArNTU3LDMxIEBACiAjCiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwotQ09ORklHX05FVF9SQURJTz15Ci0KLSMKLSMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKLSMKLSMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAotIwotQ09ORklHX0hFUk1FUz1tCi1DT05GSUdfUExYX0hFUk1FUz1tCi1DT05GSUdfVE1EX0hFUk1FUz1tCi1DT05GSUdfUENJX0hFUk1FUz1tCi1DT05GSUdfQVRNRUw9bQotQ09ORklHX1BDSV9BVE1FTD1tCi0KLSMKLSMgUHJpc20gR1QvRHVldHRlIDgwMi4xMShhL2IvZykgUENJL0NhcmRidXMgc3VwcG9ydAotIwotQ09ORklHX1BSSVNNNTQ9bQotQ09ORklHX05FVF9XSVJFTEVTUz15CisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCiAjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAotCi0jCi0jIEFUTSBkcml2ZXJzCi0jCi1DT05GSUdfQVRNX1RDUD1tCi0jIENPTkZJR19BVE1fTEFOQUkgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0VOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRklSRVNUUkVBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSURUNzcyNTIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0FNQkFTU0FET1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0hPUklaT04gaXMgbm90IHNldAotQ09ORklHX0FUTV9GT1JFMjAwRV9NQVlCRT1tCi1DT05GSUdfQVRNX0ZPUkUyMDBFX1BDQT15Ci1DT05GSUdfQVRNX0ZPUkUyMDBFX1BDQV9ERUZBVUxUX0ZXPXkKLUNPTkZJR19BVE1fRk9SRTIwMEVfU0JBPXkKLUNPTkZJR19BVE1fRk9SRTIwMEVfU0JBX0RFRkFVTFRfRlc9eQotQ09ORklHX0FUTV9GT1JFMjAwRV9VU0VfVEFTS0xFVD15Ci1DT05GSUdfQVRNX0ZPUkUyMDBFX1RYX1JFVFJZPTE2Ci1DT05GSUdfQVRNX0ZPUkUyMDBFX0RFQlVHPTAKLUNPTkZJR19BVE1fRk9SRTIwMEU9bQotQ09ORklHX0FUTV9IRT1tCi1DT05GSUdfQVRNX0hFX1VTRV9TVU5JPXkKLUNPTkZJR19GRERJPXkKLSMgQ09ORklHX0RFRlhYIGlzIG5vdCBzZXQKLUNPTkZJR19TS0ZQPW0KLUNPTkZJR19ISVBQST15Ci0jIENPTkZJR19ST0FEUlVOTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QTElQPW0KLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX1NZTkNfVFRZPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX0JTRENPTVA9bQotQ09ORklHX1BQUE9FPW0KLUNPTkZJR19QUFBPQVRNPW0KLUNPTkZJR19TTElQPW0KLUNPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSVBfU01BUlQ9eQotIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRkM9eQotQ09ORklHX1NIQVBFUj1tCi1DT05GSUdfTkVUQ09OU09MRT1tCisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCiAjCi1DT05GSUdfSVNETj1tCi0KLSMKLSMgT2xkIElTRE40TGludXgKLSMKLSMgQ09ORklHX0lTRE5fSTRMIGlzIG5vdCBzZXQKLQotIwotIyBDQVBJIHN1YnN5c3RlbQotIwotQ09ORklHX0lTRE5fQ0FQST1tCi0jIENPTkZJR19JU0ROX0RSVl9BVk1CMV9WRVJCT1NFX1JFQVNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVNETl9DQVBJX0NBUEkyMD1tCi0KLSMKLSMgQ0FQSSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQWN0aXZlIEFWTSBjYXJkcwotIwotQ09ORklHX0NBUElfQVZNPXkKLUNPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDST1tCi1DT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ0lWND15Ci1DT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ01DSUE9bQotQ09ORklHX0lTRE5fRFJWX0FWTUIxX1QxUENJPW0KLUNPTkZJR19JU0ROX0RSVl9BVk1CMV9DND1tCi0KLSMKLSMgQWN0aXZlIEVpY29uIERJVkEgU2VydmVyIGNhcmRzCi0jCi1DT05GSUdfQ0FQSV9FSUNPTj15Ci1DT05GSUdfSVNETl9ESVZBUz1tCi1DT05GSUdfSVNETl9ESVZBU19CUklQQ0k9eQotQ09ORklHX0lTRE5fRElWQVNfUFJJUENJPXkKLUNPTkZJR19JU0ROX0RJVkFTX0RJVkFDQVBJPW0KLUNPTkZJR19JU0ROX0RJVkFTX1VTRVJJREk9bQotQ09ORklHX0lTRE5fRElWQVNfTUFJTlQ9bQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKICMgVGVsZXBob255IFN1cHBvcnQKICMKLUNPTkZJR19QSE9ORT1tCi1DT05GSUdfUEhPTkVfSVhKPW0KLQotIwotIyBVbml4OTggUFRZIHN1cHBvcnQKLSMKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfVU5JWDk4X1BUWV9DT1VOVD0yNTYKLQotIwotIyBYRnJlZTg2IERSSSBzdXBwb3J0Ci0jCi1DT05GSUdfRFJNPXkKLUNPTkZJR19EUk1fVERGWD1tCi0jIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTExMTIsMjYgKzYwMSw2IEBACiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLUNPTkZJR19HQU1FUE9SVD1tCi1DT05GSUdfU09VTkRfR0FNRVBPUlQ9bQotIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVF9WT1JURVggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRk04MDEgaXMgbm90IHNldAotQ09ORklHX0dBTUVQT1JUX0NTNDYxWD1tCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLSMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19QQ0lQUzI9bQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci1DT05GSUdfU0VSSU9fUkFXPW0KLQotIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKQEAgLTExNDMsNyArNjEyLDcgQEAKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKIENPTkZJR19NT1VTRV9TRVJJQUw9eQotQ09ORklHX01PVVNFX1ZTWFhYQUE9bQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CkBAIC0xMTUxLDQwNiArNjIwLDI1MCBAQAogIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fUENJUFMyPW0KK0NPTkZJR19TRVJJT19MSUJQUzI9eQorQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TVU5DT1JFPXkKKyMgQ09ORklHX1NFUklBTF9TVU5aSUxPRyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1NVTlNVPXkKK0NPTkZJR19TRVJJQUxfU1VOU1VfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1NVTlNBQj1tCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19SVEM9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCiAjIEkyQyBzdXBwb3J0CiAjCiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj1tCisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEFsZ29yaXRobXMKICMKIENPTkZJR19JMkNfQUxHT0JJVD15Ci1DT05GSUdfSTJDX0FMR09QQ0Y9bQotQ09ORklHX0kyQ19BTEdPUENBPW0KKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfQUxJMTUzNT1tCi1DT05GSUdfSTJDX0FMSTE1NjM9bQotQ09ORklHX0kyQ19BTEkxNVgzPW0KLUNPTkZJR19JMkNfQU1ENzU2PW0KLSMgQ09ORklHX0kyQ19BTUQ3NTZfUzQ4ODIgaXMgbm90IHNldAotQ09ORklHX0kyQ19BTUQ4MTExPW0KLUNPTkZJR19JMkNfSTgwMT1tCi1DT05GSUdfSTJDX0k4MTA9bQotQ09ORklHX0kyQ19JU0E9bQotQ09ORklHX0kyQ19ORk9SQ0UyPW0KLUNPTkZJR19JMkNfUEFSUE9SVD1tCi1DT05GSUdfSTJDX1BBUlBPUlRfTElHSFQ9bQotQ09ORklHX0kyQ19QSUlYND1tCi1DT05GSUdfSTJDX1BST1NBVkFHRT1tCi1DT05GSUdfSTJDX1NBVkFHRTQ9bQotQ09ORklHX1NDeDIwMF9BQ0I9bQotQ09ORklHX0kyQ19TSVM1NTk1PW0KLUNPTkZJR19JMkNfU0lTNjMwPW0KLUNPTkZJR19JMkNfU0lTOTZYPW0KLUNPTkZJR19JMkNfU1RVQj1tCi1DT05GSUdfSTJDX1ZJQT1tCi1DT05GSUdfSTJDX1ZJQVBSTz1tCi1DT05GSUdfSTJDX1ZPT0RPTzM9bQotQ09ORklHX0kyQ19QQ0FfSVNBPW0KKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfU0VOU09SPW0KLUNPTkZJR19TRU5TT1JTX0FETTEwMjE9bQotQ09ORklHX1NFTlNPUlNfQURNMTAyNT1tCi1DT05GSUdfU0VOU09SU19BRE0xMDI2PW0KLUNPTkZJR19TRU5TT1JTX0FETTEwMzE9bQotQ09ORklHX1NFTlNPUlNfQVNCMTAwPW0KLUNPTkZJR19TRU5TT1JTX0RTMTYyMT1tCi1DT05GSUdfU0VOU09SU19GU0NIRVI9bQotQ09ORklHX1NFTlNPUlNfRlNDUE9TPW0KLUNPTkZJR19TRU5TT1JTX0dMNTE4U009bQotQ09ORklHX1NFTlNPUlNfR0w1MjBTTT1tCi1DT05GSUdfU0VOU09SU19JVDg3PW0KLUNPTkZJR19TRU5TT1JTX0xNNjM9bQotQ09ORklHX1NFTlNPUlNfTE03NT1tCi1DT05GSUdfU0VOU09SU19MTTc3PW0KLUNPTkZJR19TRU5TT1JTX0xNNzg9bQotQ09ORklHX1NFTlNPUlNfTE04MD1tCi1DT05GSUdfU0VOU09SU19MTTgzPW0KLUNPTkZJR19TRU5TT1JTX0xNODU9bQotQ09ORklHX1NFTlNPUlNfTE04Nz1tCi1DT05GSUdfU0VOU09SU19MTTkwPW0KLUNPTkZJR19TRU5TT1JTX01BWDE2MTk9bQotQ09ORklHX1NFTlNPUlNfUEM4NzM2MD1tCi1DT05GSUdfU0VOU09SU19TTVNDNDdCMzk3PW0KLUNPTkZJR19TRU5TT1JTX1NJUzU1OTU9bQotQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE9bQotQ09ORklHX1NFTlNPUlNfVklBNjg2QT1tCi1DT05GSUdfU0VOU09SU19XODM3ODFEPW0KLUNPTkZJR19TRU5TT1JTX1c4M0w3ODVUUz1tCi1DT05GSUdfU0VOU09SU19XODM2MjdIRj1tCi0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIwotQ09ORklHX1NFTlNPUlNfRUVQUk9NPW0KLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9bQotQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCi1DT05GSUdfU0VOU09SU19SVEM4NTY0PW0KKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBGaWxlIHN5c3RlbXMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZTX0ZTPW0KLUNPTkZJR19KRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19KRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCi0jIFhGUyBzdXBwb3J0CisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwotQ09ORklHX1hGU19GUz1tCi1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotQ09ORklHX1hGU19RVU9UQT15Ci1DT05GSUdfWEZTX1NFQ1VSSVRZPXkKLUNPTkZJR19YRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19NSU5JWF9GUz1tCi1DT05GSUdfUk9NRlNfRlM9bQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIyBNaXNjIGRldmljZXMKICMKLUNPTkZJR19JU085NjYwX0ZTPW0KLUNPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQogCiAjCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCiAjCi1DT05GSUdfRkFUX0ZTPW0KLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfREVWRlNfRlM9eQotQ09ORklHX0RFVkZTX01PVU5UPXkKLSMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQVFNfRlNfWEFUVFI9eQotIyBDT05GSUdfREVWUFRTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfWEFUVFI9eQotQ09ORklHX1RNUEZTX1NFQ1VSSVRZPXkKLUNPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19BREZTX0ZTPW0KLSMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAotQ09ORklHX0FGRlNfRlM9bQotQ09ORklHX0hGU19GUz1tCi1DT05GSUdfSEZTUExVU19GUz1tCi1DT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19CRlNfRlM9bQotQ09ORklHX0VGU19GUz1tCi1DT05GSUdfQ1JBTUZTPW0KLUNPTkZJR19WWEZTX0ZTPW0KLUNPTkZJR19IUEZTX0ZTPW0KLUNPTkZJR19RTlg0RlNfRlM9bQotQ09ORklHX1NZU1ZfRlM9bQotQ09ORklHX1VGU19GUz1tCi1DT05GSUdfVUZTX0ZTX1dSSVRFPXkKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz1tCi1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU19ESVJFQ1RJTz15Ci1DT05GSUdfTkZTRD1tCi1DT05GSUdfTkZTRF9WMz15Ci1DT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX0xPQ0tEPW0KLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX1NVTlJQQz1tCi1DT05GSUdfU1VOUlBDX0dTUz1tCi1DT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KLUNPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKLUNPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQX0ZTPW0KLSMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09EQV9GUz1tCi0jIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAotQ09ORklHX0FGU19GUz1tCi1DT05GSUdfUlhSUEM9bQotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX1NVTl9QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQotQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQotQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi1DT05GSUdfTkxTX0FTQ0lJPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLUNPTkZJR19OTFNfSVNPODg1OV8yPW0KLUNPTkZJR19OTFNfSVNPODg1OV8zPW0KLUNPTkZJR19OTFNfSVNPODg1OV80PW0KLUNPTkZJR19OTFNfSVNPODg1OV81PW0KLUNPTkZJR19OTFNfSVNPODg1OV82PW0KLUNPTkZJR19OTFNfSVNPODg1OV83PW0KLUNPTkZJR19OTFNfSVNPODg1OV85PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQotQ09ORklHX05MU19JU084ODU5XzE1PW0KLUNPTkZJR19OTFNfS09JOF9SPW0KLUNPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19OTFNfVVRGOD1tCiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi1DT05GSUdfVklERU9fREVWPXkKLQotIwotIyBWaWRlbyBGb3IgTGludXgKLSMKLQotIwotIyBWaWRlbyBBZGFwdGVycwotIwotQ09ORklHX1ZJREVPX0JUODQ4PW0KLUNPTkZJR19WSURFT19CV1FDQU09bQotQ09ORklHX1ZJREVPX0NRQ0FNPW0KLUNPTkZJR19WSURFT19XOTk2Nj1tCi1DT05GSUdfVklERU9fQ1BJQT1tCi1DT05GSUdfVklERU9fQ1BJQV9QUD1tCi1DT05GSUdfVklERU9fQ1BJQV9VU0I9bQotQ09ORklHX1ZJREVPX1NBQTUyNDZBPW0KLUNPTkZJR19WSURFT19TQUE1MjQ5PW0KLUNPTkZJR19UVU5FUl8zMDM2PW0KLSMgQ09ORklHX1ZJREVPX1NUUkFESVMgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fWk9SQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzEzNCBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTVhCPW0KLUNPTkZJR19WSURFT19EUEM9bQotQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTj1tCi1DT05GSUdfVklERU9fSEVYSVVNX0dFTUlOST1tCi1DT05GSUdfVklERU9fQ1g4OD1tCi1DT05GSUdfVklERU9fT1ZDQU1DSElQPW0KLQotIwotIyBSYWRpbyBBZGFwdGVycwotIwotQ09ORklHX1JBRElPX0dFTVRFS19QQ0k9bQotQ09ORklHX1JBRElPX01BWElSQURJTz1tCi1DT05GSUdfUkFESU9fTUFFU1RSTz1tCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKLUNPTkZJR19EVkI9eQotQ09ORklHX0RWQl9DT1JFPW0KKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CiAKICMKLSMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCisjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19EVkJfQVY3MTEwPW0KLSMgQ09ORklHX0RWQl9BVjcxMTBfT1NEIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfQlVER0VUPW0KLUNPTkZJR19EVkJfQlVER0VUX0NJPW0KLUNPTkZJR19EVkJfQlVER0VUX0FWPW0KLUNPTkZJR19EVkJfQlVER0VUX1BBVENIPW0KK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUkFERU9OPXkKK0NPTkZJR19GQl9SQURFT05fSTJDPXkKKyMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKLSMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLSMgQ09ORklHX0RWQl9UVFVTQl9CVURHRVQgaXMgbm90IHNldAotQ09ORklHX0RWQl9UVFVTQl9ERUM9bQotQ09ORklHX0RWQl9ESUJVU0I9bQotIyBDT05GSUdfRFZCX0RJQlVTQl9NSVNERVNJR05FRF9ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfRElCQ09NX0RFQlVHPXkKLUNPTkZJR19EVkJfQ0lORVJHWVQyPW0KLSMgQ09ORklHX0RWQl9DSU5FUkdZVDJfVFVOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST01fQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF9TVU44eDE2PXkKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiAKICMKLSMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMgTG9nbyBjb25maWd1cmF0aW9uCiAjCi1DT05GSUdfRFZCX0IyQzJfU0tZU1RBUj1tCi1DT05GSUdfRFZCX0IyQzJfVVNCPW0KLQotIwotIyBTdXBwb3J0ZWQgQlQ4NzggQWRhcHRlcnMKLSMKLUNPTkZJR19EVkJfQlQ4WFg9bQotCi0jCi0jIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCi0jCi0KLSMKLSMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKLSMKLQotIwotIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKLSMKLUNPTkZJR19EVkJfU1RWMDI5OT1tCi1DT05GSUdfRFZCX0NYMjQxMTA9bQotQ09ORklHX0RWQl9UREE4MDgzPW0KLUNPTkZJR19EVkJfVERBODBYWD1tCi1DT05GSUdfRFZCX01UMzEyPW0KLUNPTkZJR19EVkJfVkVTMVg5Mz1tCi0KLSMKLSMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKLSMKLUNPTkZJR19EVkJfU1A4ODcwPW0KLUNPTkZJR19EVkJfU1A4ODdYPW0KLUNPTkZJR19EVkJfQ1gyMjcwMD1tCi1DT05GSUdfRFZCX0NYMjI3MDI9bQotQ09ORklHX0RWQl9MNjQ3ODE9bQotQ09ORklHX0RWQl9UREExMDA0WD1tCi1DT05GSUdfRFZCX05YVDYwMDA9bQotQ09ORklHX0RWQl9NVDM1Mj1tCi1DT05GSUdfRFZCX0RJQjMwMDBNQj1tCi1DT05GSUdfRFZCX0RJQjMwMDBNQz1tCi0KLSMKLSMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKLSMKLUNPTkZJR19EVkJfQVRNRUxfQVQ3NkM2NTE9bQotQ09ORklHX0RWQl9WRVMxODIwPW0KLUNPTkZJR19EVkJfVERBMTAwMjE9bQotQ09ORklHX0RWQl9TVFYwMjk3PW0KLQotIwotIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdGVyaWFsIERUVikgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX05YVDIwMDI9bQotQ09ORklHX1ZJREVPX1NBQTcxNDY9bQotQ09ORklHX1ZJREVPX1NBQTcxNDZfVlY9bQotQ09ORklHX1ZJREVPX1ZJREVPQlVGPW0KLUNPTkZJR19WSURFT19UVU5FUj1tCi1DT05GSUdfVklERU9fQlVGPW0KLUNPTkZJR19WSURFT19CVENYPW0KLUNPTkZJR19WSURFT19JUj1tCi1DT05GSUdfVklERU9fVFZFRVBST009bQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX1NVTl9DTFVUMjI0PXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTE1NjMsNyArODc2LDYgQEAKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX0hXREVQPW0KIENPTkZJR19TTkRfUkFXTUlEST1tCiBDT05GSUdfU05EX1NFUVVFTkNFUj1tCiBDT05GSUdfU05EX1NFUV9EVU1NWT1tCkBAIC0xNTcxLDggKzg4Myw5IEBACiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLUNPTkZJR19TTkRfQklUMzJfRU1VTD1tCiAjIENPTkZJR19TTkRfUlRDVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogCkBAIC0xNTgwLDU5ICs4OTMsNTggQEAKICMgR2VuZXJpYyBkZXZpY2VzCiAjCiBDT05GSUdfU05EX01QVTQwMV9VQVJUPW0KLUNPTkZJR19TTkRfT1BMM19MSUI9bQotQ09ORklHX1NORF9WWF9MSUI9bQorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KK0NPTkZJR19TTkRfQUM5N19CVVM9bQogQ09ORklHX1NORF9EVU1NWT1tCiBDT05GSUdfU05EX1ZJUk1JREk9bQotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfTVRQQVY9bQogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAKICMKICMgUENJIGRldmljZXMKICMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQUxJNTQ1MT1tCi1DT05GSUdfU05EX0FUSUlYUD1tCi1DT05GSUdfU05EX0FUSUlYUF9NT0RFTT1tCi1DT05GSUdfU05EX0FVODgxMD1tCi1DT05GSUdfU05EX0FVODgyMD1tCi1DT05GSUdfU05EX0FVODgzMD1tCi1DT05GSUdfU05EX0FaVDMzMjg9bQotQ09ORklHX1NORF9CVDg3WD1tCi0jIENPTkZJR19TTkRfQlQ4N1hfT1ZFUkNMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQ1M0NlhYPW0KLSMgQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0NTNDI4MT1tCi1DT05GSUdfU05EX0VNVTEwSzE9bQotQ09ORklHX1NORF9FTVUxMEsxWD1tCi1DT05GSUdfU05EX0NBMDEwNj1tCi1DT05GSUdfU05EX0tPUkcxMjEyPW0KLUNPTkZJR19TTkRfTUlYQVJUPW0KLUNPTkZJR19TTkRfTk0yNTY9bQorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotQ09ORklHX1NORF9UUklERU5UPW0KLUNPTkZJR19TTkRfWU1GUENJPW0KLUNPTkZJR19TTkRfQUxTNDAwMD1tCi1DT05GSUdfU05EX0NNSVBDST1tCi1DT05GSUdfU05EX0VOUzEzNzA9bQotQ09ORklHX1NORF9FTlMxMzcxPW0KLUNPTkZJR19TTkRfRVMxOTM4PW0KLUNPTkZJR19TTkRfRVMxOTY4PW0KLUNPTkZJR19TTkRfTUFFU1RSTzM9bQotQ09ORklHX1NORF9GTTgwMT1tCi1DT05GSUdfU05EX0ZNODAxX1RFQTU3NVg9bQotQ09ORklHX1NORF9JQ0UxNzEyPW0KLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfSU5URUw4WDA9bQotQ09ORklHX1NORF9JTlRFTDhYME09bQotQ09ORklHX1NORF9TT05JQ1ZJQkVTPW0KKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVklBODJYWF9NT0RFTT1tCi1DT05GSUdfU05EX1ZYMjIyPW0KKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgZGV2aWNlcwpAQCAtMTY0MiwxMiArOTU0LDIwIEBACiAjCiAjIEFMU0EgU3BhcmMgZGV2aWNlcwogIwotQ09ORklHX1NORF9TVU5fQU1ENzkzMD1tCisjIENPTkZJR19TTkRfU1VOX0FNRDc5MzAgaXMgbm90IHNldAogQ09ORklHX1NORF9TVU5fQ1M0MjMxPW0KKyMgQ09ORklHX1NORF9TVU5fREJSSSBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIAogIwogIyBVU0Igc3VwcG9ydAogIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTY1OCw4ICs5NzgsNiBAQAogIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtMTY2NywzNiArOTg1LDI5IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9bQotQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCi0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIEJsdWV0b290aCBUVFkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGRpc2FibGVkIEJsdWV0b290aCBzdWJzeXN0ZW0KKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwotIyBDT05GSUdfVVNCX01JREkgaXMgbm90IHNldAotQ09ORklHX1VTQl9BQ009bQotQ09ORklHX1VTQl9QUklOVEVSPW0KIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1RPUkFHRV9SV19ERVRFQ1Q9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9IUDgyMDBlPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQotQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCkBAIC0xNzA2LDEzNSArMTAxNyw3NSBAQAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9XQUNPTT1tCi1DT05GSUdfVVNCX0tCVEFCPW0KKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTVRPVUNIPW0KLUNPTkZJR19VU0JfRUdBTEFYPW0KKyMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9BVElfUkVNT1RFPW0KKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKLUNPTkZJR19VU0JfTURDODAwPW0KLUNPTkZJR19VU0JfTUlDUk9URUs9bQorIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JQk1DQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tPTklDQVdDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVjUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0U0MDEgaXMgbm90IHNldAotQ09ORklHX1VTQl9TTjlDMTAyPW0KLSMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotQ09ORklHX1VTQl9XOTk2OENGPW0KKworIworIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotQ09ORklHX1VTQl9DQVRDPW0KLUNPTkZJR19VU0JfS0FXRVRIPW0KLUNPTkZJR19VU0JfUEVHQVNVUz1tCi1DT05GSUdfVVNCX1JUTDgxNTA9bQotQ09ORklHX1VTQl9VU0JORVQ9bQotCi0jCi0jIFVTQiBIb3N0LXRvLUhvc3QgQ2FibGVzCi0jCi1DT05GSUdfVVNCX0FMSV9NNTYzMj15Ci1DT05GSUdfVVNCX0FOMjcyMD15Ci1DT05GSUdfVVNCX0JFTEtJTj15Ci1DT05GSUdfVVNCX0dFTkVTWVM9eQotQ09ORklHX1VTQl9ORVQxMDgwPXkKLUNPTkZJR19VU0JfUEwyMzAxPXkKLUNPTkZJR19VU0JfS0MyMTkwPXkKLQotIwotIyBJbnRlbGxpZ2VudCBVU0IgRGV2aWNlcy9HYWRnZXRzCi0jCi1DT05GSUdfVVNCX0FSTUxJTlVYPXkKLUNPTkZJR19VU0JfRVBTT04yODg4PXkKLUNPTkZJR19VU0JfWkFVUlVTPXkKLUNPTkZJR19VU0JfQ0RDRVRIRVI9eQotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi1DT05GSUdfVVNCX0FYODgxN1g9eQorIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLUNPTkZJR19VU0JfVVNTNzIwPW0KIAogIwogIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CiAjCi1DT05GSUdfVVNCX1NFUklBTD1tCi1DT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLUNPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCi1DT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQotQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCi1DT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCi1DT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCi1DT05GSUdfVVNCX1NFUklBTF9JUFc9bQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMThYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5VyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXTEMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCi1DT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU0VSSUFMX1RJPW0KLUNPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCi1DT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQotQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCi1DT05GSUdfVVNCX0VaVVNCPXkKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKICMKLUNPTkZJR19VU0JfRU1JNjI9bQotQ09ORklHX1VTQl9FTUkyNj1tCi1DT05GSUdfVVNCX0FVRVJTV0FMRD1tCi1DT05GSUdfVVNCX1JJTzUwMD1tCi1DT05GSUdfVVNCX0xFR09UT1dFUj1tCi1DT05GSUdfVVNCX0xDRD1tCi1DT05GSUdfVVNCX0xFRD1tCi1DT05GSUdfVVNCX0NZVEhFUk09bQotQ09ORklHX1VTQl9QSElER0VUS0lUPW0KLUNPTkZJR19VU0JfUEhJREdFVFNFUlZPPW0KLUNPTkZJR19VU0JfSURNT1VTRT1tCi1DT05GSUdfVVNCX1RFU1Q9bQorIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIEFUTS9EU0wgZHJpdmVycworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKICMKLUNPTkZJR19VU0JfQVRNPW0KLUNPTkZJR19VU0JfU1BFRURUT1VDSD1tCiAKICMKICMgVVNCIEdhZGdldCBTdXBwb3J0CkBAIC0xODQyLDUwICsxMDkzLDE4NSBAQAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKLUNPTkZJR19JTkZJTklCQU5EPW0KLUNPTkZJR19JTkZJTklCQU5EX01USENBPW0KLSMgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBXYXRjaGRvZyBDYXJkcworIyBTTiBEZXZpY2VzCiAjCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCiAjCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjIE1pc2MgTGludXgvU1BBUkMgZHJpdmVycwogIwotQ09ORklHX1NPRlRfV0FUQ0hET0c9bQotQ09ORklHX1dBVENIRE9HX0NQMVhYWD1tCi1DT05GSUdfV0FUQ0hET0dfUklPPW0KK0NPTkZJR19TVU5fT1BFTlBST01JTz1tCitDT05GSUdfU1VOX01PU1RFS19SVEM9eQorIyBDT05GSUdfT0JQX0ZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9CUFAgaXMgbm90IHNldAorIyBDT05GSUdfQkJDX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZDVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVk3U0VHIGlzIG5vdCBzZXQKIAogIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMgRmlicmUgQ2hhbm5lbCBzdXBwb3J0CiAjCi1DT05GSUdfUENJUENXQVRDSERPRz1tCi1DT05GSUdfV0RUUENJPW0KLUNPTkZJR19XRFRfNTAxX1BDST15CisjIENPTkZJR19GQzQgaXMgbm90IHNldAogCiAjCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIyBGaWxlIHN5c3RlbXMKICMKLUNPTkZJR19VU0JQQ1dBVENIRE9HPW0KK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0CisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfSFVHRVRMQkZTPXkKK0NPTkZJR19IVUdFVExCX1BBR0U9eQorQ09ORklHX1JBTUZTPXkKK0NPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0tQUk9CRVM9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfUFJJTlRLX1RJTUU9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiBDT05GSUdfU0NIRURTVEFUUz15CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE4OTQsMTIgKzEyODAsMTMgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotQ09ORklHX0tQUk9CRVM9eQogIyBDT05GSUdfREVCVUdfRENGTFVTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0RFQ19MT0NLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTk0NSw2ICsxMzMyLDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQzMyPXkKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKaW5kZXggMTFhODQ4NC4uNzEwMDAyOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTY1NywxMyArMTY1NywxMCBAQAogCS8qIENoZWNrIGlmIGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKQogCSAqIHdhcyBpbnZva2VkLgogCSAqLwotCWxkdWIJCVslY3VycHRyICsgVElfU1lTX05PRVJST1JdLCAlbDAKLQlicnoscHQJCSVsMCwgMWYKLQkgbm9wCi0JYmEscHQJCSV4Y2MsIDgwZgorCWxkdWIgICAgICAgICAgICBbJWN1cnB0ciArIFRJX1NZU19OT0VSUk9SXSwgJWwyCisJYnJueixhLHBuICAgICAgICVsMiwgODBmCiAJIHN0YgkJJWcwLCBbJWN1cnB0ciArIFRJX1NZU19OT0VSUk9SXQogCi0xOgogCWNtcAkJJW8wLCAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLCiAJYmdldSxwbgkJJXhjYywgMWYKIAkgYW5kY2MJCSVsMCwgKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0FVRElUKSwgJWw2CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKaW5kZXggOWU4MzYyZS4uMzBiY2FmNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vZWJ1cy5oPgpAQCAtNzAsNiArNzEsOSBAQAogCW1hY2hpbmVfaGFsdCgpOwogfQogCit2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKSA9IG1hY2hpbmVfcG93ZXJfb2ZmOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBwb3dlcmQodm9pZCAqX191bnVzZWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMgYi9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMKaW5kZXggYWNmZGFhMi4uZmIxYjk2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by9hZXMuYwpAQCAtNzQsOCArNzQsNiBAQAogCXJldHVybiB4ID4+IChuIDw8IDMpOwogfQogCi0jZGVmaW5lIHUzMl9pbih4KSBsZTMyX3RvX2NwdSgqKGNvbnN0IF9fbGUzMiAqKSh4KSkKLQogc3RydWN0IGFlc19jdHgKIHsKIAl1MzIga2V5X2xlbmd0aDsKQEAgLTIzNCw2ICsyMzIsNyBAQAogCQkgICAgICAgdTMyICpmbGFncykKIHsKIAlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7CiAJdTMyIGksIGosIHQsIHUsIHYsIHc7CiAKIAlpZiAoa2V5X2xlbiAhPSAxNiAmJiBrZXlfbGVuICE9IDI0ICYmIGtleV9sZW4gIT0gMzIpIHsKQEAgLTI0MywxMCArMjQyLDEwIEBACiAKIAljdHgtPmtleV9sZW5ndGggPSBrZXlfbGVuOwogCi0JRF9LRVlba2V5X2xlbiArIDI0XSA9IEVfS0VZWzBdID0gdTMyX2luKGluX2tleSk7Ci0JRF9LRVlba2V5X2xlbiArIDI1XSA9IEVfS0VZWzFdID0gdTMyX2luKGluX2tleSArIDQpOwotCURfS0VZW2tleV9sZW4gKyAyNl0gPSBFX0tFWVsyXSA9IHUzMl9pbihpbl9rZXkgKyA4KTsKLQlEX0tFWVtrZXlfbGVuICsgMjddID0gRV9LRVlbM10gPSB1MzJfaW4oaW5fa2V5ICsgMTIpOworCURfS0VZW2tleV9sZW4gKyAyNF0gPSBFX0tFWVswXSA9IGxlMzJfdG9fY3B1KGtleVswXSk7CisJRF9LRVlba2V5X2xlbiArIDI1XSA9IEVfS0VZWzFdID0gbGUzMl90b19jcHUoa2V5WzFdKTsKKwlEX0tFWVtrZXlfbGVuICsgMjZdID0gRV9LRVlbMl0gPSBsZTMyX3RvX2NwdShrZXlbMl0pOworCURfS0VZW2tleV9sZW4gKyAyN10gPSBFX0tFWVszXSA9IGxlMzJfdG9fY3B1KGtleVszXSk7CiAKIAlzd2l0Y2ggKGtleV9sZW4pIHsKIAljYXNlIDE2OgpAQCAtMjU2LDE3ICsyNTUsMTcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDI0OgotCQlFX0tFWVs0XSA9IHUzMl9pbihpbl9rZXkgKyAxNik7Ci0JCXQgPSBFX0tFWVs1XSA9IHUzMl9pbihpbl9rZXkgKyAyMCk7CisJCUVfS0VZWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKTsKKwkJdCA9IEVfS0VZWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKIAkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKIAkJCWxvb3A2IChpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDMyOgotCQlFX0tFWVs0XSA9IHUzMl9pbihpbl9rZXkgKyAxNik7Ci0JCUVfS0VZWzVdID0gdTMyX2luKGluX2tleSArIDIwKTsKLQkJRV9LRVlbNl0gPSB1MzJfaW4oaW5fa2V5ICsgMjQpOwotCQl0ID0gRV9LRVlbN10gPSB1MzJfaW4oaW5fa2V5ICsgMjgpOworCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CisJCUVfS0VZWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKKwkJRV9LRVlbNl0gPSBsZTMyX3RvX2NwdShrZXlbNl0pOworCQl0ID0gRV9LRVlbN10gPSBsZTMyX3RvX2NwdShrZXlbN10pOwogCQlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQogCQkJbG9vcDgoaSk7CiAJCWJyZWFrOwpAQCAtMjkwLDYgKzI4OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiYWVzIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImFlcy14ODZfNjQiLAorCS5jcmFfcHJpb3JpdHkJCT0JMjAwLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBhZXNfY3R4KSwKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCmluZGV4IGNiNmUzOGUuLjkzN2Q4MWYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJaWYgKChzaWduZWQgbG9uZykoZ2V0X2Njb3VudCgpIC0gbmV4dCkgPiAwKQogCQlnb3RvIGFnYWluOwogCi0JLyogQWxsb3cgcGxhdGZvcm0gdG8gZG8gc29tZXRoaW5nIHVzZWZ1bGwgKFdkb2cpLiAqLworCS8qIEFsbG93IHBsYXRmb3JtIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgKFdkb2cpLiAqLwogCiAJcGxhdGZvcm1faGVhcnRiZWF0KCk7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggNTJlMWQ0MS4uYzQ0MmYyZSAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiBjb25maWcgQ1JZUFRPX0FFUwogCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMiCi0JZGVwZW5kcyBvbiBDUllQVE8gJiYgIShYODYgfHwgVU1MX1g4NikKKwlkZXBlbmRzIG9uIENSWVBUTwogCWhlbHAKIAkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwgCiAJICBhbGdvcml0aG0uCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzLmMgYi9jcnlwdG8vYWVzLmMKaW5kZXggNWRmOTI4OC4uMGE2YTVjMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flcy5jCisrKyBiL2NyeXB0by9hZXMuYwpAQCAtNzMsOSArNzMsNiBAQAogCXJldHVybiB4ID4+IChuIDw8IDMpOwogfQogCi0jZGVmaW5lIHUzMl9pbih4KSBsZTMyX3RvX2NwdSgqKGNvbnN0IHUzMiAqKSh4KSkKLSNkZWZpbmUgdTMyX291dCh0bywgZnJvbSkgKCoodTMyICopKHRvKSA9IGNwdV90b19sZTMyKGZyb20pKQotCiBzdHJ1Y3QgYWVzX2N0eCB7CiAJaW50IGtleV9sZW5ndGg7CiAJdTMyIEVbNjBdOwpAQCAtMjU2LDYgKzI1Myw3IEBACiBhZXNfc2V0X2tleSh2b2lkICpjdHhfYXJnLCBjb25zdCB1OCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKIHsKIAlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7CiAJdTMyIGksIHQsIHUsIHYsIHc7CiAKIAlpZiAoa2V5X2xlbiAhPSAxNiAmJiBrZXlfbGVuICE9IDI0ICYmIGtleV9sZW4gIT0gMzIpIHsKQEAgLTI2NSwxMCArMjYzLDEwIEBACiAKIAljdHgtPmtleV9sZW5ndGggPSBrZXlfbGVuOwogCi0JRV9LRVlbMF0gPSB1MzJfaW4gKGluX2tleSk7Ci0JRV9LRVlbMV0gPSB1MzJfaW4gKGluX2tleSArIDQpOwotCUVfS0VZWzJdID0gdTMyX2luIChpbl9rZXkgKyA4KTsKLQlFX0tFWVszXSA9IHUzMl9pbiAoaW5fa2V5ICsgMTIpOworCUVfS0VZWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKKwlFX0tFWVsxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CisJRV9LRVlbMl0gPSBsZTMyX3RvX2NwdShrZXlbMl0pOworCUVfS0VZWzNdID0gbGUzMl90b19jcHUoa2V5WzNdKTsKIAogCXN3aXRjaCAoa2V5X2xlbikgewogCWNhc2UgMTY6CkBAIC0yNzgsMTcgKzI3NiwxNyBAQAogCQlicmVhazsKIAogCWNhc2UgMjQ6Ci0JCUVfS0VZWzRdID0gdTMyX2luIChpbl9rZXkgKyAxNik7Ci0JCXQgPSBFX0tFWVs1XSA9IHUzMl9pbiAoaW5fa2V5ICsgMjApOworCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CisJCXQgPSBFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCQlsb29wNiAoaSk7CiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKLQkJRV9LRVlbNF0gPSB1MzJfaW4gKGluX2tleSArIDE2KTsKLQkJRV9LRVlbNV0gPSB1MzJfaW4gKGluX2tleSArIDIwKTsKLQkJRV9LRVlbNl0gPSB1MzJfaW4gKGluX2tleSArIDI0KTsKLQkJdCA9IEVfS0VZWzddID0gdTMyX2luIChpbl9rZXkgKyAyOCk7CisJCUVfS0VZWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKTsKKwkJRV9LRVlbNV0gPSBsZTMyX3RvX2NwdShrZXlbNV0pOworCQlFX0tFWVs2XSA9IGxlMzJfdG9fY3B1KGtleVs2XSk7CisJCXQgPSBFX0tFWVs3XSA9IGxlMzJfdG9fY3B1KGtleVs3XSk7CiAJCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCiAJCQlsb29wOCAoaSk7CiAJCWJyZWFrOwpAQCAtMzI0LDEzICszMjIsMTUgQEAKIHN0YXRpYyB2b2lkIGFlc19lbmNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpvdXQsIGNvbnN0IHU4ICppbikKIHsKIAljb25zdCBzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKnNyYyA9IChjb25zdCBfX2xlMzIgKilpbjsKKwlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7CiAJdTMyIGIwWzRdLCBiMVs0XTsKIAljb25zdCB1MzIgKmtwID0gRV9LRVkgKyA0OwogCi0JYjBbMF0gPSB1MzJfaW4gKGluKSBeIEVfS0VZWzBdOwotCWIwWzFdID0gdTMyX2luIChpbiArIDQpIF4gRV9LRVlbMV07Ci0JYjBbMl0gPSB1MzJfaW4gKGluICsgOCkgXiBFX0tFWVsyXTsKLQliMFszXSA9IHUzMl9pbiAoaW4gKyAxMikgXiBFX0tFWVszXTsKKwliMFswXSA9IGxlMzJfdG9fY3B1KHNyY1swXSkgXiBFX0tFWVswXTsKKwliMFsxXSA9IGxlMzJfdG9fY3B1KHNyY1sxXSkgXiBFX0tFWVsxXTsKKwliMFsyXSA9IGxlMzJfdG9fY3B1KHNyY1syXSkgXiBFX0tFWVsyXTsKKwliMFszXSA9IGxlMzJfdG9fY3B1KHNyY1szXSkgXiBFX0tFWVszXTsKIAogCWlmIChjdHgtPmtleV9sZW5ndGggPiAyNCkgewogCQlmX25yb3VuZCAoYjEsIGIwLCBrcCk7CkBAIC0zNTMsMTAgKzM1MywxMCBAQAogCWZfbnJvdW5kIChiMSwgYjAsIGtwKTsKIAlmX2xyb3VuZCAoYjAsIGIxLCBrcCk7CiAKLQl1MzJfb3V0IChvdXQsIGIwWzBdKTsKLQl1MzJfb3V0IChvdXQgKyA0LCBiMFsxXSk7Ci0JdTMyX291dCAob3V0ICsgOCwgYjBbMl0pOwotCXUzMl9vdXQgKG91dCArIDEyLCBiMFszXSk7CisJZHN0WzBdID0gY3B1X3RvX2xlMzIoYjBbMF0pOworCWRzdFsxXSA9IGNwdV90b19sZTMyKGIwWzFdKTsKKwlkc3RbMl0gPSBjcHVfdG9fbGUzMihiMFsyXSk7CisJZHN0WzNdID0gY3B1X3RvX2xlMzIoYjBbM10pOwogfQogCiAvKiBkZWNyeXB0IGEgYmxvY2sgb2YgdGV4dCAqLwpAQCAtMzc3LDE0ICszNzcsMTYgQEAKIHN0YXRpYyB2b2lkIGFlc19kZWNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpvdXQsIGNvbnN0IHU4ICppbikKIHsKIAljb25zdCBzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKnNyYyA9IChjb25zdCBfX2xlMzIgKilpbjsKKwlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7CiAJdTMyIGIwWzRdLCBiMVs0XTsKIAljb25zdCBpbnQga2V5X2xlbiA9IGN0eC0+a2V5X2xlbmd0aDsKIAljb25zdCB1MzIgKmtwID0gRF9LRVkgKyBrZXlfbGVuICsgMjA7CiAKLQliMFswXSA9IHUzMl9pbiAoaW4pIF4gRV9LRVlba2V5X2xlbiArIDI0XTsKLQliMFsxXSA9IHUzMl9pbiAoaW4gKyA0KSBeIEVfS0VZW2tleV9sZW4gKyAyNV07Ci0JYjBbMl0gPSB1MzJfaW4gKGluICsgOCkgXiBFX0tFWVtrZXlfbGVuICsgMjZdOwotCWIwWzNdID0gdTMyX2luIChpbiArIDEyKSBeIEVfS0VZW2tleV9sZW4gKyAyN107CisJYjBbMF0gPSBsZTMyX3RvX2NwdShzcmNbMF0pIF4gRV9LRVlba2V5X2xlbiArIDI0XTsKKwliMFsxXSA9IGxlMzJfdG9fY3B1KHNyY1sxXSkgXiBFX0tFWVtrZXlfbGVuICsgMjVdOworCWIwWzJdID0gbGUzMl90b19jcHUoc3JjWzJdKSBeIEVfS0VZW2tleV9sZW4gKyAyNl07CisJYjBbM10gPSBsZTMyX3RvX2NwdShzcmNbM10pIF4gRV9LRVlba2V5X2xlbiArIDI3XTsKIAogCWlmIChrZXlfbGVuID4gMjQpIHsKIAkJaV9ucm91bmQgKGIxLCBiMCwga3ApOwpAQCAtNDA3LDE4ICs0MDksMjEgQEAKIAlpX25yb3VuZCAoYjEsIGIwLCBrcCk7CiAJaV9scm91bmQgKGIwLCBiMSwga3ApOwogCi0JdTMyX291dCAob3V0LCBiMFswXSk7Ci0JdTMyX291dCAob3V0ICsgNCwgYjBbMV0pOwotCXUzMl9vdXQgKG91dCArIDgsIGIwWzJdKTsKLQl1MzJfb3V0IChvdXQgKyAxMiwgYjBbM10pOworCWRzdFswXSA9IGNwdV90b19sZTMyKGIwWzBdKTsKKwlkc3RbMV0gPSBjcHVfdG9fbGUzMihiMFsxXSk7CisJZHN0WzJdID0gY3B1X3RvX2xlMzIoYjBbMl0pOworCWRzdFszXSA9IGNwdV90b19sZTMyKGIwWzNdKTsKIH0KIAogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImFlcyIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJhZXMtZ2VuZXJpYyIsCisJLmNyYV9wcmlvcml0eQkJPQkxMDAsCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CUFFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGFlc19jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGFlc19hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FudWJpcy5jIGIvY3J5cHRvL2FudWJpcy5jCmluZGV4IDM5MjVlYjAuLjJjNzk2YmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnViaXMuYworKysgYi9jcnlwdG8vYW51YmlzLmMKQEAgLTMyLDggKzMyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQU5VQklTX01JTl9LRVlfU0laRQkxNgogI2RlZmluZSBBTlVCSVNfTUFYX0tFWV9TSVpFCTQwCkBAIC00NjEsOCArNDYzLDggQEAKIHN0YXRpYyBpbnQgYW51YmlzX3NldGtleSh2b2lkICpjdHhfYXJnLCBjb25zdCB1OCAqaW5fa2V5LAogCQkJIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1MzIgKmZsYWdzKQogewotCi0JaW50IE4sIFIsIGksIHBvcywgcjsKKwljb25zdCBfX2JlMzIgKmtleSA9IChjb25zdCBfX2JlMzIgKilpbl9rZXk7CisJaW50IE4sIFIsIGksIHI7CiAJdTMyIGthcHBhW0FOVUJJU19NQVhfTl07CiAJdTMyIGludGVyW0FOVUJJU19NQVhfTl07CiAKQEAgLTQ4MywxMyArNDg1LDggQEAKIAljdHgtPlIgPSBSID0gOCArIE47CiAKIAkvKiAqIG1hcCBjaXBoZXIga2V5IHRvIGluaXRpYWwga2V5IHN0YXRlIChtdSk6ICovCi0JCWZvciAoaSA9IDAsIHBvcyA9IDA7IGkgPCBOOyBpKyssIHBvcyArPSA0KSB7Ci0JCWthcHBhW2ldID0KLQkJCShpbl9rZXlbcG9zICAgIF0gPDwgMjQpIF4KLQkJCShpbl9rZXlbcG9zICsgMV0gPDwgMTYpIF4KLQkJCShpbl9rZXlbcG9zICsgMl0gPDwgIDgpIF4KLQkJCShpbl9rZXlbcG9zICsgM10gICAgICApOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorCQlrYXBwYVtpXSA9IGJlMzJfdG9fY3B1KGtleVtpXSk7CiAKIAkvKgogCSAqIGdlbmVyYXRlIFIgKyAxIHJvdW5kIGtleXM6CkBAIC01NzgsNyArNTc1LDkgQEAKIHN0YXRpYyB2b2lkIGFudWJpc19jcnlwdCh1MzIgcm91bmRLZXlbQU5VQklTX01BWF9ST1VORFMgKyAxXVs0XSwKIAkJdTggKmNpcGhlcnRleHQsIGNvbnN0IHU4ICpwbGFpbnRleHQsIGNvbnN0IGludCBSKQogewotCWludCBpLCBwb3MsIHI7CisJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopcGxhaW50ZXh0OworCV9fYmUzMiAqZHN0ID0gKF9fYmUzMiAqKWNpcGhlcnRleHQ7CisJaW50IGksIHI7CiAJdTMyIHN0YXRlWzRdOwogCXUzMiBpbnRlcls0XTsKIApAQCAtNTg2LDE0ICs1ODUsOCBAQAogCSAqIG1hcCBwbGFpbnRleHQgYmxvY2sgdG8gY2lwaGVyIHN0YXRlIChtdSkKIAkgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5IChzaWdtYVtLXjBdKToKIAkgKi8KLQlmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgNDsgaSsrLCBwb3MgKz0gNCkgewotCQlzdGF0ZVtpXSA9Ci0JCQkocGxhaW50ZXh0W3BvcyAgICBdIDw8IDI0KSBeCi0JCQkocGxhaW50ZXh0W3BvcyArIDFdIDw8IDE2KSBeCi0JCQkocGxhaW50ZXh0W3BvcyArIDJdIDw8ICA4KSBeCi0JCQkocGxhaW50ZXh0W3BvcyArIDNdICAgICAgKSBeCi0JCQlyb3VuZEtleVswXVtpXTsKLQl9CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJc3RhdGVbaV0gPSBiZTMyX3RvX2NwdShzcmNbaV0pIF4gcm91bmRLZXlbMF1baV07CiAKIAkvKgogCSAqIFIgLSAxIGZ1bGwgcm91bmRzOgpAQCAtNjYzLDEzICs2NTYsOCBAQAogCSAqIG1hcCBjaXBoZXIgc3RhdGUgdG8gY2lwaGVydGV4dCBibG9jayAobXVeey0xfSk6CiAJICovCiAKLQlmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgNDsgaSsrLCBwb3MgKz0gNCkgewotCQl1MzIgdyA9IGludGVyW2ldOwotCQljaXBoZXJ0ZXh0W3BvcyAgICBdID0gKHU4KSh3ID4+IDI0KTsKLQkJY2lwaGVydGV4dFtwb3MgKyAxXSA9ICh1OCkodyA+PiAxNik7Ci0JCWNpcGhlcnRleHRbcG9zICsgMl0gPSAodTgpKHcgPj4gIDgpOwotCQljaXBoZXJ0ZXh0W3BvcyArIDNdID0gKHU4KSh3ICAgICAgKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJZHN0W2ldID0gY3B1X3RvX2JlMzIoaW50ZXJbaV0pOwogfQogCiBzdGF0aWMgdm9pZCBhbnViaXNfZW5jcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQpAQCAtNjg5LDYgKzY3Nyw3IEBACiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CUFOVUJJU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2YgKHN0cnVjdCBhbnViaXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQkzLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChhbnViaXNfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsgLmNpcGhlciA9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCA0MGFlNDJlLi5lMjYxNTZmIDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KICAqIENvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBDcnlwdG9hcGksIGJ5IEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZmFzdC5ubz4KICAqIGFuZCBOZXR0bGUsIGJ5IE5pZWxzIE32bGxlci4KQEAgLTE4LDkgKzE5LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIExJU1RfSEVBRChjcnlwdG9fYWxnX2xpc3QpOwpAQCAtMzksNiArNDIsNyBAQAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICpxLCAqYWxnID0gTlVMTDsKKwlpbnQgYmVzdCA9IC0xOwogCiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQ2LDExICs1MCwyMyBAQAogCWRvd25fcmVhZCgmY3J5cHRvX2FsZ19zZW0pOwogCQogCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmNyeXB0b19hbGdfbGlzdCwgY3JhX2xpc3QpIHsKLQkJaWYgKCEoc3RyY21wKHEtPmNyYV9uYW1lLCBuYW1lKSkpIHsKLQkJCWlmIChjcnlwdG9fYWxnX2dldChxKSkKLQkJCQlhbGcgPSBxOworCQlpbnQgZXhhY3QsIGZ1enp5OworCisJCWV4YWN0ID0gIXN0cmNtcChxLT5jcmFfZHJpdmVyX25hbWUsIG5hbWUpOworCQlmdXp6eSA9ICFzdHJjbXAocS0+Y3JhX25hbWUsIG5hbWUpOworCQlpZiAoIWV4YWN0ICYmICEoZnV6enkgJiYgcS0+Y3JhX3ByaW9yaXR5ID4gYmVzdCkpCisJCQljb250aW51ZTsKKworCQlpZiAodW5saWtlbHkoIWNyeXB0b19hbGdfZ2V0KHEpKSkKKwkJCWNvbnRpbnVlOworCisJCWJlc3QgPSBxLT5jcmFfcHJpb3JpdHk7CisJCWlmIChhbGcpCisJCQljcnlwdG9fYWxnX3B1dChhbGcpOworCQlhbGcgPSBxOworCisJCWlmIChleGFjdCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCQogCXVwX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKQEAgLTIwNyw5ICsyMjMsMjYgQEAKIAlrZnJlZSh0Zm0pOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fc2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSAiLWdlbmVyaWMiOworCWNoYXIgKmRyaXZlcl9uYW1lID0gKGNoYXIgKilhbGctPmNyYV9kcml2ZXJfbmFtZTsKKwlpbnQgbGVuOworCisJaWYgKCpkcml2ZXJfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsY3B5KGRyaXZlcl9uYW1lLCBhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FKTsKKwlpZiAobGVuICsgc2l6ZW9mKHN1ZmZpeCkgPiBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKworCW1lbWNweShkcml2ZXJfbmFtZSArIGxlbiwgc3VmZml4LCBzaXplb2Yoc3VmZml4KSk7CisJcmV0dXJuIDA7Cit9CisKIGludCBjcnlwdG9fcmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqcTsKIAogCWlmIChhbGctPmNyYV9hbGlnbm1hc2sgJiAoYWxnLT5jcmFfYWxpZ25tYXNrICsgMSkpCkBAIC0yMTgsMTMgKzI1MSwyMCBAQAogCWlmIChhbGctPmNyYV9hbGlnbm1hc2sgJiBhbGctPmNyYV9ibG9ja3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGFsZy0+Y3JhX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSkKKwlpZiAoYWxnLT5jcmFfYmxvY2tzaXplID4gUEFHRV9TSVpFIC8gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWxnLT5jcmFfcHJpb3JpdHkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkKKwlyZXQgPSBjcnlwdG9fc2V0X2RyaXZlcl9uYW1lKGFsZyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQ7CisKIAlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CiAJCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmY3J5cHRvX2FsZ19saXN0LCBjcmFfbGlzdCkgewotCQlpZiAoIShzdHJjbXAocS0+Y3JhX25hbWUsIGFsZy0+Y3JhX25hbWUpKSkgeworCQlpZiAoIXN0cmNtcChxLT5jcmFfZHJpdmVyX25hbWUsIGFsZy0+Y3JhX2RyaXZlcl9uYW1lKSkgewogCQkJcmV0ID0gLUVFWElTVDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYmxvd2Zpc2guYyBiL2NyeXB0by9ibG93ZmlzaC5jCmluZGV4IGE4YjI5ZDUuLjdmNzEwYjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibG93ZmlzaC5jCisrKyBiL2NyeXB0by9ibG93ZmlzaC5jCkBAIC0xOSw4ICsxOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIEJGX0JMT0NLX1NJWkUgOAogI2RlZmluZSBCRl9NSU5fS0VZX1NJWkUgNApAQCAtNDUxLDYgKzQ1Myw3IEBACiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CUJGX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgYmZfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQkzLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1LmMgYi9jcnlwdG8vY2FzdDUuYwppbmRleCBiYzQyZjQyLi44ODM0Yzg1IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDUuYworKysgYi9jcnlwdG8vY2FzdDUuYwpAQCAtMjEsMTEgKzIxLDEzIEBACiAqLwogCiAKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBDQVNUNV9CTE9DS19TSVpFIDgKICNkZWZpbmUgQ0FTVDVfTUlOX0tFWV9TSVpFIDUKQEAgLTU3OCw2ICs1ODAsOCBAQAogc3RhdGljIHZvaWQgY2FzdDVfZW5jcnlwdCh2b2lkICpjdHgsIHU4ICogb3V0YnVmLCBjb25zdCB1OCAqIGluYnVmKQogewogCXN0cnVjdCBjYXN0NV9jdHggKmMgPSAoc3RydWN0IGNhc3Q1X2N0eCAqKSBjdHg7CisJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CisJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBsLCByLCB0OwogCXUzMiBJOwkJCS8qIHVzZWQgYnkgdGhlIEZ4IG1hY3JvcyAqLwogCXUzMiAqS207CkBAIC01ODksOCArNTkzLDggQEAKIAkvKiAoTDAsUjApIDwtLSAobTEuLi5tNjQpLiAgKFNwbGl0IHRoZSBwbGFpbnRleHQgaW50byBsZWZ0IGFuZAogCSAqIHJpZ2h0IDMyLWJpdCBoYWx2ZXMgTDAgPSBtMS4uLm0zMiBhbmQgUjAgPSBtMzMuLi5tNjQuKQogCSAqLwotCWwgPSBpbmJ1ZlswXSA8PCAyNCB8IGluYnVmWzFdIDw8IDE2IHwgaW5idWZbMl0gPDwgOCB8IGluYnVmWzNdOwotCXIgPSBpbmJ1Zls0XSA8PCAyNCB8IGluYnVmWzVdIDw8IDE2IHwgaW5idWZbNl0gPDwgOCB8IGluYnVmWzddOworCWwgPSBiZTMyX3RvX2NwdShzcmNbMF0pOworCXIgPSBiZTMyX3RvX2NwdShzcmNbMV0pOwogCiAJLyogKDE2IHJvdW5kcykgZm9yIGkgZnJvbSAxIHRvIDE2LCBjb21wdXRlIExpIGFuZCBSaSBhcyBmb2xsb3dzOgogCSAqICBMaSA9IFJpLTE7CkBAIC02MzQsMTkgKzYzOCwxNSBAQAogCiAJLyogYzEuLi5jNjQgPC0tIChSMTYsTDE2KS4gIChFeGNoYW5nZSBmaW5hbCBibG9ja3MgTDE2LCBSMTYgYW5kCiAJICogIGNvbmNhdGVuYXRlIHRvIGZvcm0gdGhlIGNpcGhlcnRleHQuKSAqLwotCW91dGJ1ZlswXSA9IChyID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzFdID0gKHIgPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbMl0gPSAociA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzNdID0gciAmIDB4ZmY7Ci0Jb3V0YnVmWzRdID0gKGwgPj4gMjQpICYgMHhmZjsKLQlvdXRidWZbNV0gPSAobCA+PiAxNikgJiAweGZmOwotCW91dGJ1Zls2XSA9IChsID4+IDgpICYgMHhmZjsKLQlvdXRidWZbN10gPSBsICYgMHhmZjsKKwlkc3RbMF0gPSBjcHVfdG9fYmUzMihyKTsKKwlkc3RbMV0gPSBjcHVfdG9fYmUzMihsKTsKIH0KIAogc3RhdGljIHZvaWQgY2FzdDVfZGVjcnlwdCh2b2lkICpjdHgsIHU4ICogb3V0YnVmLCBjb25zdCB1OCAqIGluYnVmKQogewogCXN0cnVjdCBjYXN0NV9jdHggKmMgPSAoc3RydWN0IGNhc3Q1X2N0eCAqKSBjdHg7CisJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CisJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBsLCByLCB0OwogCXUzMiBJOwogCXUzMiAqS207CkBAIC02NTUsOCArNjU1LDggQEAKIAlLbSA9IGMtPkttOwogCUtyID0gYy0+S3I7CiAKLQlsID0gaW5idWZbMF0gPDwgMjQgfCBpbmJ1ZlsxXSA8PCAxNiB8IGluYnVmWzJdIDw8IDggfCBpbmJ1ZlszXTsKLQlyID0gaW5idWZbNF0gPDwgMjQgfCBpbmJ1Zls1XSA8PCAxNiB8IGluYnVmWzZdIDw8IDggfCBpbmJ1Zls3XTsKKwlsID0gYmUzMl90b19jcHUoc3JjWzBdKTsKKwlyID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAogCWlmICghKGMtPnJyKSkgewogCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMTVdLCBLclsxNV0pOwpAQCAtNjkwLDE0ICs2OTAsOCBAQAogCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMF0sIEtyWzBdKTsKIAl9CiAKLQlvdXRidWZbMF0gPSAociA+PiAyNCkgJiAweGZmOwotCW91dGJ1ZlsxXSA9IChyID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzJdID0gKHIgPj4gOCkgJiAweGZmOwotCW91dGJ1ZlszXSA9IHIgJiAweGZmOwotCW91dGJ1Zls0XSA9IChsID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzVdID0gKGwgPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbNl0gPSAobCA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzddID0gbCAmIDB4ZmY7CisJZHN0WzBdID0gY3B1X3RvX2JlMzIocik7CisJZHN0WzFdID0gY3B1X3RvX2JlMzIobCk7CiB9CiAKIHN0YXRpYyB2b2lkIGtleV9zY2hlZHVsZSh1MzIgKiB4LCB1MzIgKiB6LCB1MzIgKiBrKQpAQCAtNzgyLDcgKzc3Niw3IEBACiAJdTMyIHhbNF07CiAJdTMyIHpbNF07CiAJdTMyIGtbMTZdOwotCXU4IHBfa2V5WzE2XTsKKwlfX2JlMzIgcF9rZXlbNF07CiAJc3RydWN0IGNhc3Q1X2N0eCAqYyA9IChzdHJ1Y3QgY2FzdDVfY3R4ICopIGN0eDsKIAkKIAlpZiAoa2V5X2xlbiA8IDUgfHwga2V5X2xlbiA+IDE2KSB7CkBAIC03OTYsMTIgKzc5MCwxMCBAQAogCW1lbWNweShwX2tleSwga2V5LCBrZXlfbGVuKTsKIAogCi0JeFswXSA9IHBfa2V5WzBdIDw8IDI0IHwgcF9rZXlbMV0gPDwgMTYgfCBwX2tleVsyXSA8PCA4IHwgcF9rZXlbM107Ci0JeFsxXSA9IHBfa2V5WzRdIDw8IDI0IHwgcF9rZXlbNV0gPDwgMTYgfCBwX2tleVs2XSA8PCA4IHwgcF9rZXlbN107Ci0JeFsyXSA9Ci0JICAgIHBfa2V5WzhdIDw8IDI0IHwgcF9rZXlbOV0gPDwgMTYgfCBwX2tleVsxMF0gPDwgOCB8IHBfa2V5WzExXTsKLQl4WzNdID0KLQkgICAgcF9rZXlbMTJdIDw8IDI0IHwgcF9rZXlbMTNdIDw8IDE2IHwgcF9rZXlbMTRdIDw8IDggfCBwX2tleVsxNV07CisJeFswXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzBdKTsKKwl4WzFdID0gYmUzMl90b19jcHUocF9rZXlbMV0pOworCXhbMl0gPSBiZTMyX3RvX2NwdShwX2tleVsyXSk7CisJeFszXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzNdKTsKIAogCWtleV9zY2hlZHVsZSh4LCB6LCBrKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKQEAgLTgxNyw2ICs4MDksNyBAQAogCS5jcmFfZmxhZ3MgCT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZSAJPSBDQVNUNV9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZSAJPSBzaXplb2Yoc3RydWN0IGNhc3Q1X2N0eCksCisJLmNyYV9hbGlnbm1hc2sJPSAzLAogCS5jcmFfbW9kdWxlIAk9IFRISVNfTU9EVUxFLAogCS5jcmFfbGlzdCAJPSBMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAogCS5jcmFfdSAJCT0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q2LmMgYi9jcnlwdG8vY2FzdDYuYwppbmRleCAzZWIwODEwLi45ZTI4NzQwIDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDYuYworKysgYi9jcnlwdG8vY2FzdDYuYwpAQCAtMTgsMTEgKzE4LDEzIEBACiAgKi8KIAogCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ0FTVDZfQkxPQ0tfU0laRSAxNgogI2RlZmluZSBDQVNUNl9NSU5fS0VZX1NJWkUgMTYKQEAgLTM4NCw3ICszODYsNyBAQAogewogCWludCBpOwogCXUzMiBrZXlbOF07Ci0JdTggcF9rZXlbMzJdOyAvKiBwYWRkZWQga2V5ICovCisJX19iZTMyIHBfa2V5WzhdOyAvKiBwYWRkZWQga2V5ICovCiAJc3RydWN0IGNhc3Q2X2N0eCAqYyA9IChzdHJ1Y3QgY2FzdDZfY3R4ICopIGN0eDsKIAogCWlmIChrZXlfbGVuIDwgMTYgfHwga2V5X2xlbiA+IDMyIHx8IGtleV9sZW4gJSA0ICE9IDApIHsKQEAgLTM5NSwxNCArMzk3LDE0IEBACiAJbWVtc2V0IChwX2tleSwgMCwgMzIpOwogCW1lbWNweSAocF9rZXksIGluX2tleSwga2V5X2xlbik7CiAJCi0Ja2V5WzBdID0gcF9rZXlbMF0gPDwgMjQgfCBwX2tleVsxXSA8PCAxNiB8IHBfa2V5WzJdIDw8IDggfCBwX2tleVszXTsJCS8qIEEgKi8KLQlrZXlbMV0gPSBwX2tleVs0XSA8PCAyNCB8IHBfa2V5WzVdIDw8IDE2IHwgcF9rZXlbNl0gPDwgOCB8IHBfa2V5WzddOwkJLyogQiAqLwotCWtleVsyXSA9IHBfa2V5WzhdIDw8IDI0IHwgcF9rZXlbOV0gPDwgMTYgfCBwX2tleVsxMF0gPDwgOCB8IHBfa2V5WzExXTsJCS8qIEMgKi8KLQlrZXlbM10gPSBwX2tleVsxMl0gPDwgMjQgfCBwX2tleVsxM10gPDwgMTYgfCBwX2tleVsxNF0gPDwgOCB8IHBfa2V5WzE1XTsJLyogRCAqLwotCWtleVs0XSA9IHBfa2V5WzE2XSA8PCAyNCB8IHBfa2V5WzE3XSA8PCAxNiB8IHBfa2V5WzE4XSA8PCA4IHwgcF9rZXlbMTldOwkvKiBFICovCi0Ja2V5WzVdID0gcF9rZXlbMjBdIDw8IDI0IHwgcF9rZXlbMjFdIDw8IDE2IHwgcF9rZXlbMjJdIDw8IDggfCBwX2tleVsyM107CS8qIEYgKi8KLQlrZXlbNl0gPSBwX2tleVsyNF0gPDwgMjQgfCBwX2tleVsyNV0gPDwgMTYgfCBwX2tleVsyNl0gPDwgOCB8IHBfa2V5WzI3XTsJLyogRyAqLwotCWtleVs3XSA9IHBfa2V5WzI4XSA8PCAyNCB8IHBfa2V5WzI5XSA8PCAxNiB8IHBfa2V5WzMwXSA8PCA4IHwgcF9rZXlbMzFdOwkvKiBIICovCisJa2V5WzBdID0gYmUzMl90b19jcHUocF9rZXlbMF0pOwkJLyogQSAqLworCWtleVsxXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzFdKTsJCS8qIEIgKi8KKwlrZXlbMl0gPSBiZTMyX3RvX2NwdShwX2tleVsyXSk7CQkvKiBDICovCisJa2V5WzNdID0gYmUzMl90b19jcHUocF9rZXlbM10pOwkJLyogRCAqLworCWtleVs0XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzRdKTsJCS8qIEUgKi8KKwlrZXlbNV0gPSBiZTMyX3RvX2NwdShwX2tleVs1XSk7CQkvKiBGICovCisJa2V5WzZdID0gYmUzMl90b19jcHUocF9rZXlbNl0pOwkJLyogRyAqLworCWtleVs3XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzddKTsJCS8qIEggKi8KIAkKIAogCkBAIC00NDQsMTQgKzQ0NiwxNiBAQAogCiBzdGF0aWMgdm9pZCBjYXN0Nl9lbmNyeXB0ICh2b2lkICogY3R4LCB1OCAqIG91dGJ1ZiwgY29uc3QgdTggKiBpbmJ1ZikgewogCXN0cnVjdCBjYXN0Nl9jdHggKiBjID0gKHN0cnVjdCBjYXN0Nl9jdHggKiljdHg7CisJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CisJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBibG9ja1s0XTsKIAl1MzIgKiBLbTsgCiAJdTggKiBLcjsKIAotCWJsb2NrWzBdID0gaW5idWZbMF0gPDwgMjQgfCBpbmJ1ZlsxXSA8PCAxNiB8IGluYnVmWzJdIDw8IDggfCBpbmJ1ZlszXTsKLQlibG9ja1sxXSA9IGluYnVmWzRdIDw8IDI0IHwgaW5idWZbNV0gPDwgMTYgfCBpbmJ1Zls2XSA8PCA4IHwgaW5idWZbN107Ci0JYmxvY2tbMl0gPSBpbmJ1Zls4XSA8PCAyNCB8IGluYnVmWzldIDw8IDE2IHwgaW5idWZbMTBdIDw8IDggfCBpbmJ1ZlsxMV07Ci0JYmxvY2tbM10gPSBpbmJ1ZlsxMl0gPDwgMjQgfCBpbmJ1ZlsxM10gPDwgMTYgfCBpbmJ1ZlsxNF0gPDwgOCB8IGluYnVmWzE1XTsKKwlibG9ja1swXSA9IGJlMzJfdG9fY3B1KHNyY1swXSk7CisJYmxvY2tbMV0gPSBiZTMyX3RvX2NwdShzcmNbMV0pOworCWJsb2NrWzJdID0gYmUzMl90b19jcHUoc3JjWzJdKTsKKwlibG9ja1szXSA9IGJlMzJfdG9fY3B1KHNyY1szXSk7CiAKIAlLbSA9IGMtPkttWzBdOyBLciA9IGMtPktyWzBdOyBRIChibG9jaywgS3IsIEttKTsKIAlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRIChibG9jaywgS3IsIEttKTsKQEAgLTQ2NSwzNSArNDY5LDI1IEBACiAJS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7CiAJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKIAlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCQotCW91dGJ1ZlswXSA9IChibG9ja1swXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1ZlsxXSA9IChibG9ja1swXSA+PiAxNikgJiAweGZmOwotCW91dGJ1ZlsyXSA9IChibG9ja1swXSA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzNdID0gYmxvY2tbMF0gJiAweGZmOwotCW91dGJ1Zls0XSA9IChibG9ja1sxXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1Zls1XSA9IChibG9ja1sxXSA+PiAxNikgJiAweGZmOwotCW91dGJ1Zls2XSA9IChibG9ja1sxXSA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzddID0gYmxvY2tbMV0gJiAweGZmOwotCW91dGJ1Zls4XSA9IChibG9ja1syXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1Zls5XSA9IChibG9ja1syXSA+PiAxNikgJiAweGZmOwotCW91dGJ1ZlsxMF0gPSAoYmxvY2tbMl0gPj4gOCkgJiAweGZmOwotCW91dGJ1ZlsxMV0gPSBibG9ja1syXSAmIDB4ZmY7Ci0Jb3V0YnVmWzEyXSA9IChibG9ja1szXSA+PiAyNCkgJiAweGZmOwotCW91dGJ1ZlsxM10gPSAoYmxvY2tbM10gPj4gMTYpICYgMHhmZjsKLQlvdXRidWZbMTRdID0gKGJsb2NrWzNdID4+IDgpICYgMHhmZjsKLQlvdXRidWZbMTVdID0gYmxvY2tbM10gJiAweGZmOwkKKworCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKKwlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CisJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOworCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKIH0JCiAKIHN0YXRpYyB2b2lkIGNhc3Q2X2RlY3J5cHQgKHZvaWQgKiBjdHgsIHU4ICogb3V0YnVmLCBjb25zdCB1OCAqIGluYnVmKSB7CiAJc3RydWN0IGNhc3Q2X2N0eCAqIGMgPSAoc3RydWN0IGNhc3Q2X2N0eCAqKWN0eDsKKwljb25zdCBfX2JlMzIgKnNyYyA9IChjb25zdCBfX2JlMzIgKilpbmJ1ZjsKKwlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXRidWY7CiAJdTMyIGJsb2NrWzRdOwogCXUzMiAqIEttOyAKIAl1OCAqIEtyOwogCi0JYmxvY2tbMF0gPSBpbmJ1ZlswXSA8PCAyNCB8IGluYnVmWzFdIDw8IDE2IHwgaW5idWZbMl0gPDwgOCB8IGluYnVmWzNdOwotCWJsb2NrWzFdID0gaW5idWZbNF0gPDwgMjQgfCBpbmJ1Zls1XSA8PCAxNiB8IGluYnVmWzZdIDw8IDggfCBpbmJ1Zls3XTsKLQlibG9ja1syXSA9IGluYnVmWzhdIDw8IDI0IHwgaW5idWZbOV0gPDwgMTYgfCBpbmJ1ZlsxMF0gPDwgOCB8IGluYnVmWzExXTsKLQlibG9ja1szXSA9IGluYnVmWzEyXSA8PCAyNCB8IGluYnVmWzEzXSA8PCAxNiB8IGluYnVmWzE0XSA8PCA4IHwgaW5idWZbMTVdOworCWJsb2NrWzBdID0gYmUzMl90b19jcHUoc3JjWzBdKTsKKwlibG9ja1sxXSA9IGJlMzJfdG9fY3B1KHNyY1sxXSk7CisJYmxvY2tbMl0gPSBiZTMyX3RvX2NwdShzcmNbMl0pOworCWJsb2NrWzNdID0gYmUzMl90b19jcHUoc3JjWzNdKTsKIAogCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUSAoYmxvY2ssIEtyLCBLbSk7CiAJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRIChibG9jaywgS3IsIEttKTsKQEAgLTUwOCwyMiArNTAyLDEwIEBACiAJS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7CiAJS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7CiAJCi0Jb3V0YnVmWzBdID0gKGJsb2NrWzBdID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzFdID0gKGJsb2NrWzBdID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzJdID0gKGJsb2NrWzBdID4+IDgpICYgMHhmZjsKLQlvdXRidWZbM10gPSBibG9ja1swXSAmIDB4ZmY7Ci0Jb3V0YnVmWzRdID0gKGJsb2NrWzFdID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzVdID0gKGJsb2NrWzFdID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzZdID0gKGJsb2NrWzFdID4+IDgpICYgMHhmZjsKLQlvdXRidWZbN10gPSBibG9ja1sxXSAmIDB4ZmY7Ci0Jb3V0YnVmWzhdID0gKGJsb2NrWzJdID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzldID0gKGJsb2NrWzJdID4+IDE2KSAmIDB4ZmY7Ci0Jb3V0YnVmWzEwXSA9IChibG9ja1syXSA+PiA4KSAmIDB4ZmY7Ci0Jb3V0YnVmWzExXSA9IGJsb2NrWzJdICYgMHhmZjsKLQlvdXRidWZbMTJdID0gKGJsb2NrWzNdID4+IDI0KSAmIDB4ZmY7Ci0Jb3V0YnVmWzEzXSA9IChibG9ja1szXSA+PiAxNikgJiAweGZmOwotCW91dGJ1ZlsxNF0gPSAoYmxvY2tbM10gPj4gOCkgJiAweGZmOwotCW91dGJ1ZlsxNV0gPSBibG9ja1szXSAmIDB4ZmY7CQorCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKKwlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CisJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOworCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKIH0JCiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7CkBAIC01MzEsNiArNTEzLDcgQEAKIAkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZSA9IENBU1Q2X0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjYXN0Nl9jdHgpLAorCS5jcmFfYWxpZ25tYXNrID0gMywKIAkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAogCS5jcmFfbGlzdCA9IExJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCiAJLmNyYV91ID0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NpcGhlci5jIGIvY3J5cHRvL2NpcGhlci5jCmluZGV4IGRmZDRiY2YuLjY1YmNlYTAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jaXBoZXIuYworKysgYi9jcnlwdG8vY2lwaGVyLmMKQEAgLTIxMiw5ICsyMTIsMTAgQEAKIAlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gZGVzYy0+dGZtOwogCXZvaWQgKCp4b3IpKHU4ICosIGNvbnN0IHU4ICopID0gdGZtLT5jcnRfdS5jaXBoZXIuY2l0X3hvcl9ibG9jazsKIAlpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayhkZXNjLT50Zm0pOwogCi0JdTggc3RhY2tbc3JjID09IGRzdCA/IGJzaXplIDogMF07Ci0JdTggKmJ1ZiA9IHN0YWNrOworCXU4IHN0YWNrW3NyYyA9PSBkc3QgPyBic2l6ZSArIGFsaWdubWFzayA6IDBdOworCXU4ICpidWYgPSAodTggKilBTElHTigodW5zaWduZWQgbG9uZylzdGFjaywgYWxpZ25tYXNrICsgMSk7CiAJdTggKipkc3RfcCA9IHNyYyA9PSBkc3QgPyAmYnVmIDogJmRzdDsKIAogCXZvaWQgKCpmbikodm9pZCAqLCB1OCAqLCBjb25zdCB1OCAqKSA9IGRlc2MtPmNyZm47CmRpZmYgLS1naXQgYS9jcnlwdG8vY3JjMzJjLmMgYi9jcnlwdG8vY3JjMzJjLmMKaW5kZXggMjU2OTU2Yy4uOTUzMzYyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyYzMyYy5jCisrKyBiL2NyeXB0by9jcmMzMmMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIENIS1NVTV9CTE9DS19TSVpFCTMyCmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzLmMgYi9jcnlwdG8vZGVzLmMKaW5kZXggYTNjODYzZC4uN2JiNTQ4NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlcy5jCisrKyBiL2NyeXB0by9kZXMuYwpAQCAtMTIsMTEgKzEyLDEzIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBERVNfS0VZX1NJWkUJCTgKICNkZWZpbmUgREVTX0VYUEtFWV9XT1JEUwkzMgpAQCAtOTQ3LDYgKzk0OSw3IEBACiAJLmNyYV9ibG9ja3NpemUJCT0JREVTX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgZGVzX2N0eCksCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZGVzX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CiAJLmNpYV9taW5fa2V5c2l6ZQk9CURFU19LRVlfU0laRSwKZGlmZiAtLWdpdCBhL2NyeXB0by9pbnRlcm5hbC5oIGIvY3J5cHRvL2ludGVybmFsLmgKaW5kZXggMzdhYTY1Mi4uOTU5ZTYwMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2ludGVybmFsLmgKKysrIGIvY3J5cHRvL2ludGVybmFsLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpAQCAtMTYsMTAgKzE3LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KIAorZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY3J5cHRvX2FsZ19saXN0OworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgY3J5cHRvX2FsZ19zZW07CisKIGV4dGVybiBlbnVtIGttX3R5cGUgY3J5cHRvX2ttX3R5cGVzW107CiAKIHN0YXRpYyBpbmxpbmUgZW51bSBrbV90eXBlIGNyeXB0b19rbWFwX3R5cGUoaW50IG91dCkKZGlmZiAtLWdpdCBhL2NyeXB0by9raGF6YWQuYyBiL2NyeXB0by9raGF6YWQuYwppbmRleCA3MzhjYjBkLi44MDdmMmJmIDEwMDY0NAotLS0gYS9jcnlwdG8va2hhemFkLmMKKysrIGIvY3J5cHRvL2toYXphZC5jCkBAIC0yMiw4ICsyMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIEtIQVpBRF9LRVlfU0laRQkJMTYKICNkZWZpbmUgS0hBWkFEX0JMT0NLX1NJWkUJOApAQCAtNzU1LDggKzc1Nyw4IEBACiBzdGF0aWMgaW50IGtoYXphZF9zZXRrZXkodm9pZCAqY3R4X2FyZywgY29uc3QgdTggKmluX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCiB7Ci0KIAlzdHJ1Y3Qga2hhemFkX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2JlNjQgKmtleSA9IChjb25zdCBfX2JlNjQgKilpbl9rZXk7CiAJaW50IHI7CiAJY29uc3QgdTY0ICpTID0gVDc7CiAJdTY0IEsyLCBLMTsKQEAgLTc2NywyMiArNzY5LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JSzIgPSAoKHU2NClpbl9rZXlbIDBdIDw8IDU2KSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDFdIDw8IDQ4KSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDJdIDw8IDQwKSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDNdIDw8IDMyKSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDRdIDw8IDI0KSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDVdIDw8IDE2KSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDZdIDw8ICA4KSBeCi0JICAgICAoKHU2NClpbl9rZXlbIDddICAgICAgKTsKLQlLMSA9ICgodTY0KWluX2tleVsgOF0gPDwgNTYpIF4KLQkgICAgICgodTY0KWluX2tleVsgOV0gPDwgNDgpIF4KLQkgICAgICgodTY0KWluX2tleVsxMF0gPDwgNDApIF4KLQkgICAgICgodTY0KWluX2tleVsxMV0gPDwgMzIpIF4KLQkgICAgICgodTY0KWluX2tleVsxMl0gPDwgMjQpIF4KLQkgICAgICgodTY0KWluX2tleVsxM10gPDwgMTYpIF4KLQkgICAgICgodTY0KWluX2tleVsxNF0gPDwgIDgpIF4KLQkgICAgICgodTY0KWluX2tleVsxNV0gICAgICApOworCUsyID0gYmU2NF90b19jcHUoa2V5WzBdKTsKKwlLMSA9IGJlNjRfdG9fY3B1KGtleVsxXSk7CiAKIAkvKiBzZXR1cCB0aGUgZW5jcnlwdCBrZXkgKi8KIAlmb3IgKHIgPSAwOyByIDw9IEtIQVpBRF9ST1VORFM7IHIrKykgewpAQCAtODIwLDE5ICs4MDgsMTIgQEAKIHN0YXRpYyB2b2lkIGtoYXphZF9jcnlwdChjb25zdCB1NjQgcm91bmRLZXlbS0hBWkFEX1JPVU5EUyArIDFdLAogCQl1OCAqY2lwaGVydGV4dCwgY29uc3QgdTggKnBsYWludGV4dCkKIHsKLQorCWNvbnN0IF9fYmU2NCAqc3JjID0gKGNvbnN0IF9fYmU2NCAqKXBsYWludGV4dDsKKwlfX2JlNjQgKmRzdCA9IChfX2JlNjQgKiljaXBoZXJ0ZXh0OwogCWludCByOwogCXU2NCBzdGF0ZTsKIAotCXN0YXRlID0gKCh1NjQpcGxhaW50ZXh0WzBdIDw8IDU2KSBeCi0JCSgodTY0KXBsYWludGV4dFsxXSA8PCA0OCkgXgotCQkoKHU2NClwbGFpbnRleHRbMl0gPDwgNDApIF4KLQkJKCh1NjQpcGxhaW50ZXh0WzNdIDw8IDMyKSBeCi0JCSgodTY0KXBsYWludGV4dFs0XSA8PCAyNCkgXgotCQkoKHU2NClwbGFpbnRleHRbNV0gPDwgMTYpIF4KLQkJKCh1NjQpcGxhaW50ZXh0WzZdIDw8ICA4KSBeCi0JCSgodTY0KXBsYWludGV4dFs3XSAgICAgICkgXgotCQlyb3VuZEtleVswXTsKKwlzdGF0ZSA9IGJlNjRfdG9fY3B1KCpzcmMpIF4gcm91bmRLZXlbMF07CiAKIAlmb3IgKHIgPSAxOyByIDwgS0hBWkFEX1JPVU5EUzsgcisrKSB7CiAJCXN0YXRlID0gVDBbKGludCkoc3RhdGUgPj4gNTYpICAgICAgIF0gXgpAQCAtODU2LDE1ICs4MzcsNyBAQAogCQkoVDdbKGludCkoc3RhdGUgICAgICApICYgMHhmZl0gJiAweDAwMDAwMDAwMDAwMDAwZmZVTEwpIF4KIAkJcm91bmRLZXlbS0hBWkFEX1JPVU5EU107CiAKLQljaXBoZXJ0ZXh0WzBdID0gKHU4KShzdGF0ZSA+PiA1Nik7Ci0JY2lwaGVydGV4dFsxXSA9ICh1OCkoc3RhdGUgPj4gNDgpOwotCWNpcGhlcnRleHRbMl0gPSAodTgpKHN0YXRlID4+IDQwKTsKLQljaXBoZXJ0ZXh0WzNdID0gKHU4KShzdGF0ZSA+PiAzMik7Ci0JY2lwaGVydGV4dFs0XSA9ICh1OCkoc3RhdGUgPj4gMjQpOwotCWNpcGhlcnRleHRbNV0gPSAodTgpKHN0YXRlID4+IDE2KTsKLQljaXBoZXJ0ZXh0WzZdID0gKHU4KShzdGF0ZSA+PiAgOCk7Ci0JY2lwaGVydGV4dFs3XSA9ICh1OCkoc3RhdGUgICAgICApOwotCisJKmRzdCA9IGNwdV90b19iZTY0KHN0YXRlKTsKIH0KIAogc3RhdGljIHZvaWQga2hhemFkX2VuY3J5cHQodm9pZCAqY3R4X2FyZywgdTggKmRzdCwgY29uc3QgdTggKnNyYykKQEAgLTg4NCw2ICs4NTcsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlLSEFaQURfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mIChzdHJ1Y3Qga2hhemFkX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JNywKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoa2hhemFkX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ0LmMgYi9jcnlwdG8vbWQ0LmMKaW5kZXggYmVmNmE5ZS4uYTJkNmRmNSAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNC5jCisrKyBiL2NyeXB0by9tZDQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIE1ENF9ESUdFU1RfU0laRQkJMTYKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUuYyBiL2NyeXB0by9tZDUuYwppbmRleCAxZWQ0NWY5Li43ZjA0MWFlIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1LmMKKysrIGIvY3J5cHRvL21kNS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNkZWZpbmUgTUQ1X0RJR0VTVF9TSVpFCQkxNgpkaWZmIC0tZ2l0IGEvY3J5cHRvL21pY2hhZWxfbWljLmMgYi9jcnlwdG8vbWljaGFlbF9taWMuYwppbmRleCBhNDcwYmNiLi40ZjZhYjIzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWljaGFlbF9taWMuYworKysgYi9jcnlwdG8vbWljaGFlbF9taWMuYwpAQCAtMTAsMTAgKzEwLDEyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAKIHN0cnVjdCBtaWNoYWVsX21pY19jdHggewpAQCAtNDMsMjEgKzQ1LDYgQEAKIH0gd2hpbGUgKDApCiAKIAotc3RhdGljIGlubGluZSB1MzIgZ2V0X2xlMzIoY29uc3QgdTggKnApCi17Ci0JcmV0dXJuIHBbMF0gfCAocFsxXSA8PCA4KSB8IChwWzJdIDw8IDE2KSB8IChwWzNdIDw8IDI0KTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X2xlMzIodTggKnAsIHUzMiB2KQotewotCXBbMF0gPSB2OwotCXBbMV0gPSB2ID4+IDg7Ci0JcFsyXSA9IHYgPj4gMTY7Ci0JcFszXSA9IHYgPj4gMjQ7Ci19Ci0KLQogc3RhdGljIHZvaWQgbWljaGFlbF9pbml0KHZvaWQgKmN0eCkKIHsKIAlzdHJ1Y3QgbWljaGFlbF9taWNfY3R4ICptY3R4ID0gY3R4OwpAQCAtNjgsNiArNTUsNyBAQAogc3RhdGljIHZvaWQgbWljaGFlbF91cGRhdGUodm9pZCAqY3R4LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbWljaGFlbF9taWNfY3R4ICptY3R4ID0gY3R4OworCWNvbnN0IF9fbGUzMiAqc3JjOwogCiAJaWYgKG1jdHgtPnBlbmRpbmdfbGVuKSB7CiAJCWludCBmbGVuID0gNCAtIG1jdHgtPnBlbmRpbmdfbGVuOwpAQCAtODEsMjEgKzY5LDIzIEBACiAJCWlmIChtY3R4LT5wZW5kaW5nX2xlbiA8IDQpCiAJCQlyZXR1cm47CiAKLQkJbWN0eC0+bCBePSBnZXRfbGUzMihtY3R4LT5wZW5kaW5nKTsKKwkJc3JjID0gKGNvbnN0IF9fbGUzMiAqKW1jdHgtPnBlbmRpbmc7CisJCW1jdHgtPmwgXj0gbGUzMl90b19jcHVwKHNyYyk7CiAJCW1pY2hhZWxfYmxvY2sobWN0eC0+bCwgbWN0eC0+cik7CiAJCW1jdHgtPnBlbmRpbmdfbGVuID0gMDsKIAl9CiAKKwlzcmMgPSAoY29uc3QgX19sZTMyICopZGF0YTsKKwogCXdoaWxlIChsZW4gPj0gNCkgewotCQltY3R4LT5sIF49IGdldF9sZTMyKGRhdGEpOworCQltY3R4LT5sIF49IGxlMzJfdG9fY3B1cChzcmMrKyk7CiAJCW1pY2hhZWxfYmxvY2sobWN0eC0+bCwgbWN0eC0+cik7Ci0JCWRhdGEgKz0gNDsKIAkJbGVuIC09IDQ7CiAJfQogCiAJaWYgKGxlbiA+IDApIHsKIAkJbWN0eC0+cGVuZGluZ19sZW4gPSBsZW47Ci0JCW1lbWNweShtY3R4LT5wZW5kaW5nLCBkYXRhLCBsZW4pOworCQltZW1jcHkobWN0eC0+cGVuZGluZywgc3JjLCBsZW4pOwogCX0KIH0KIApAQCAtMTA0LDYgKzk0LDcgQEAKIHsKIAlzdHJ1Y3QgbWljaGFlbF9taWNfY3R4ICptY3R4ID0gY3R4OwogCXU4ICpkYXRhID0gbWN0eC0+cGVuZGluZzsKKwlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7CiAKIAkvKiBMYXN0IGJsb2NrIGFuZCBwYWRkaW5nICgweDVhLCA0Li43IHggMCkgKi8KIAlzd2l0Y2ggKG1jdHgtPnBlbmRpbmdfbGVuKSB7CkBAIC0xMjUsOCArMTE2LDggQEAKIAkvKiBsIF49IDA7ICovCiAJbWljaGFlbF9ibG9jayhtY3R4LT5sLCBtY3R4LT5yKTsKIAotCXB1dF9sZTMyKG91dCwgbWN0eC0+bCk7Ci0JcHV0X2xlMzIob3V0ICsgNCwgbWN0eC0+cik7CisJZHN0WzBdID0gY3B1X3RvX2xlMzIobWN0eC0+bCk7CisJZHN0WzFdID0gY3B1X3RvX2xlMzIobWN0eC0+cik7CiB9CiAKIApAQCAtMTM0LDEzICsxMjUsMTYgQEAKIAkJCSAgdTMyICpmbGFncykKIHsKIAlzdHJ1Y3QgbWljaGFlbF9taWNfY3R4ICptY3R4ID0gY3R4OworCWNvbnN0IF9fbGUzMiAqZGF0YSA9IChjb25zdCBfX2xlMzIgKilrZXk7CisKIAlpZiAoa2V5bGVuICE9IDgpIHsKIAkJaWYgKGZsYWdzKQogCQkJKmZsYWdzID0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltY3R4LT5sID0gZ2V0X2xlMzIoa2V5KTsKLQltY3R4LT5yID0gZ2V0X2xlMzIoa2V5ICsgNCk7CisKKwltY3R4LT5sID0gbGUzMl90b19jcHUoZGF0YVswXSk7CisJbWN0eC0+ciA9IGxlMzJfdG9fY3B1KGRhdGFbMV0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vcHJvYy5jIGIvY3J5cHRvL3Byb2MuYwppbmRleCA2MzBiYTkxLi5jMGE1ZGQ3IDEwMDY0NAotLS0gYS9jcnlwdG8vcHJvYy5jCisrKyBiL2NyeXB0by9wcm9jLmMKQEAgLTQsNiArNCw3IEBACiAgKiBQcm9jZnMgaW5mb3JtYXRpb24uCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTE4LDkgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNyeXB0b19hbGdfbGlzdDsKLWV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGNyeXB0b19hbGdfc2VtOwotCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnY7CkBAIC01Myw3ICs1MSw5IEBACiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IChzdHJ1Y3QgY3J5cHRvX2FsZyAqKXA7CiAJCiAJc2VxX3ByaW50ZihtLCAibmFtZSAgICAgICAgIDogJXNcbiIsIGFsZy0+Y3JhX25hbWUpOworCXNlcV9wcmludGYobSwgImRyaXZlciAgICAgICA6ICVzXG4iLCBhbGctPmNyYV9kcml2ZXJfbmFtZSk7CiAJc2VxX3ByaW50ZihtLCAibW9kdWxlICAgICAgIDogJXNcbiIsIG1vZHVsZV9uYW1lKGFsZy0+Y3JhX21vZHVsZSkpOworCXNlcV9wcmludGYobSwgInByaW9yaXR5ICAgICA6ICVkXG4iLCBhbGctPmNyYV9wcmlvcml0eSk7CiAJCiAJc3dpdGNoIChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NlcnBlbnQuYyBiL2NyeXB0by9zZXJwZW50LmMKaW5kZXggM2NmMmM1MC4uNTJhZDFhNDkyIDEwMDY0NAotLS0gYS9jcnlwdG8vc2VycGVudC5jCisrKyBiL2NyeXB0by9zZXJwZW50LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBLZXkgaXMgcGFkZGVkIHRvIHRoZSBtYXhpbXVtIG9mIDI1NiBiaXRzIGJlZm9yZSByb3VuZCBrZXkgZ2VuZXJhdGlvbi4KICAqIEFueSBrZXkgbGVuZ3RoIDw9IDI1NiBiaXRzICgzMiBieXRlcykgaXMgYWxsb3dlZCBieSB0aGUgYWxnb3JpdGhtLgpAQCAtNTUyLDYgKzU1Myw3IEBACiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CVNFUlBFTlRfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzZXJwZW50X2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoc2VycGVudF9hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTEuYyBiL2NyeXB0by9zaGExLmMKaW5kZXggNDAxNmYzYi4uMjE1NzFlZDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGExLmMKKysrIGIvY3J5cHRvL3NoYTEuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC00OCwyMyArNDksMzMgQEAKIHN0YXRpYyB2b2lkIHNoYTFfdXBkYXRlKHZvaWQgKmN0eCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IHNoYTFfY3R4ICpzY3R4ID0gY3R4OwotCXVuc2lnbmVkIGludCBpLCBqOwotCXUzMiB0ZW1wW1NIQV9XT1JLU1BBQ0VfV09SRFNdOworCXVuc2lnbmVkIGludCBwYXJ0aWFsLCBkb25lOworCWNvbnN0IHU4ICpzcmM7CiAKLQlqID0gKHNjdHgtPmNvdW50ID4+IDMpICYgMHgzZjsKLQlzY3R4LT5jb3VudCArPSBsZW4gPDwgMzsKKwlwYXJ0aWFsID0gc2N0eC0+Y291bnQgJiAweDNmOworCXNjdHgtPmNvdW50ICs9IGxlbjsKKwlkb25lID0gMDsKKwlzcmMgPSBkYXRhOwogCi0JaWYgKChqICsgbGVuKSA+IDYzKSB7Ci0JCW1lbWNweSgmc2N0eC0+YnVmZmVyW2pdLCBkYXRhLCAoaSA9IDY0LWopKTsKLQkJc2hhX3RyYW5zZm9ybShzY3R4LT5zdGF0ZSwgc2N0eC0+YnVmZmVyLCB0ZW1wKTsKLQkJZm9yICggOyBpICsgNjMgPCBsZW47IGkgKz0gNjQpIHsKLQkJCXNoYV90cmFuc2Zvcm0oc2N0eC0+c3RhdGUsICZkYXRhW2ldLCB0ZW1wKTsKKwlpZiAoKHBhcnRpYWwgKyBsZW4pID4gNjMpIHsKKwkJdTMyIHRlbXBbU0hBX1dPUktTUEFDRV9XT1JEU107CisKKwkJaWYgKHBhcnRpYWwpIHsKKwkJCWRvbmUgPSAtcGFydGlhbDsKKwkJCW1lbWNweShzY3R4LT5idWZmZXIgKyBwYXJ0aWFsLCBkYXRhLCBkb25lICsgNjQpOworCQkJc3JjID0gc2N0eC0+YnVmZmVyOwogCQl9Ci0JCWogPSAwOworCisJCWRvIHsKKwkJCXNoYV90cmFuc2Zvcm0oc2N0eC0+c3RhdGUsIHNyYywgdGVtcCk7CisJCQlkb25lICs9IDY0OworCQkJc3JjID0gZGF0YSArIGRvbmU7CisJCX0gd2hpbGUgKGRvbmUgKyA2MyA8IGxlbik7CisKKwkJbWVtc2V0KHRlbXAsIDAsIHNpemVvZih0ZW1wKSk7CisJCXBhcnRpYWwgPSAwOwogCX0KLQllbHNlIGkgPSAwOwotCW1lbXNldCh0ZW1wLCAwLCBzaXplb2YodGVtcCkpOwotCW1lbWNweSgmc2N0eC0+YnVmZmVyW2pdLCAmZGF0YVtpXSwgbGVuIC0gaSk7CisJbWVtY3B5KHNjdHgtPmJ1ZmZlciArIHBhcnRpYWwsIHNyYywgbGVuIC0gZG9uZSk7CiB9CiAKIApAQCAtNzIsMzcgKzgzLDI0IEBACiBzdGF0aWMgdm9pZCBzaGExX2ZpbmFsKHZvaWQqIGN0eCwgdTggKm91dCkKIHsKIAlzdHJ1Y3Qgc2hhMV9jdHggKnNjdHggPSBjdHg7Ci0JdTMyIGksIGosIGluZGV4LCBwYWRsZW47Ci0JdTY0IHQ7Ci0JdTggYml0c1s4XSA9IHsgMCwgfTsKKwlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXQ7CisJdTMyIGksIGluZGV4LCBwYWRsZW47CisJX19iZTY0IGJpdHM7CiAJc3RhdGljIGNvbnN0IHU4IHBhZGRpbmdbNjRdID0geyAweDgwLCB9OwogCi0JdCA9IHNjdHgtPmNvdW50OwotCWJpdHNbN10gPSAweGZmICYgdDsgdD4+PTg7Ci0JYml0c1s2XSA9IDB4ZmYgJiB0OyB0Pj49ODsKLQliaXRzWzVdID0gMHhmZiAmIHQ7IHQ+Pj04OwotCWJpdHNbNF0gPSAweGZmICYgdDsgdD4+PTg7Ci0JYml0c1szXSA9IDB4ZmYgJiB0OyB0Pj49ODsKLQliaXRzWzJdID0gMHhmZiAmIHQ7IHQ+Pj04OwotCWJpdHNbMV0gPSAweGZmICYgdDsgdD4+PTg7Ci0JYml0c1swXSA9IDB4ZmYgJiB0OworCWJpdHMgPSBjcHVfdG9fYmU2NChzY3R4LT5jb3VudCA8PCAzKTsKIAogCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0ICovCi0JaW5kZXggPSAoc2N0eC0+Y291bnQgPj4gMykgJiAweDNmOworCWluZGV4ID0gc2N0eC0+Y291bnQgJiAweDNmOwogCXBhZGxlbiA9IChpbmRleCA8IDU2KSA/ICg1NiAtIGluZGV4KSA6ICgoNjQrNTYpIC0gaW5kZXgpOwogCXNoYTFfdXBkYXRlKHNjdHgsIHBhZGRpbmcsIHBhZGxlbik7CiAKIAkvKiBBcHBlbmQgbGVuZ3RoICovCi0Jc2hhMV91cGRhdGUoc2N0eCwgYml0cywgc2l6ZW9mIGJpdHMpOyAKKwlzaGExX3VwZGF0ZShzY3R4LCAoY29uc3QgdTggKikmYml0cywgc2l6ZW9mKGJpdHMpKTsKIAogCS8qIFN0b3JlIHN0YXRlIGluIGRpZ2VzdCAqLwotCWZvciAoaSA9IGogPSAwOyBpIDwgNTsgaSsrLCBqICs9IDQpIHsKLQkJdTMyIHQyID0gc2N0eC0+c3RhdGVbaV07Ci0JCW91dFtqKzNdID0gdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCW91dFtqKzJdID0gdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCW91dFtqKzFdID0gdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCW91dFtqICBdID0gdDIgJiAweGZmOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlkc3RbaV0gPSBjcHVfdG9fYmUzMihzY3R4LT5zdGF0ZVtpXSk7CiAKIAkvKiBXaXBlIGNvbnRleHQgKi8KIAltZW1zZXQoc2N0eCwgMCwgc2l6ZW9mICpzY3R4KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEyNTYuYyBiL2NyeXB0by9zaGEyNTYuYwppbmRleCBjNzhkYTUwLi45ZDVlZjY3IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhMjU2LmMKKysrIGIvY3J5cHRvL3NoYTI1Ni5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApAQCAtMjc5LDIyICsyODAsMTUgQEAKIHN0YXRpYyB2b2lkIHNoYTI1Nl9maW5hbCh2b2lkKiBjdHgsIHU4ICpvdXQpCiB7CiAJc3RydWN0IHNoYTI1Nl9jdHggKnNjdHggPSBjdHg7Ci0JdTggYml0c1s4XTsKLQl1bnNpZ25lZCBpbnQgaW5kZXgsIHBhZF9sZW4sIHQ7Ci0JaW50IGksIGo7CisJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0OworCV9fYmUzMiBiaXRzWzJdOworCXVuc2lnbmVkIGludCBpbmRleCwgcGFkX2xlbjsKKwlpbnQgaTsKIAlzdGF0aWMgY29uc3QgdTggcGFkZGluZ1s2NF0gPSB7IDB4ODAsIH07CiAKIAkvKiBTYXZlIG51bWJlciBvZiBiaXRzICovCi0JdCA9IHNjdHgtPmNvdW50WzBdOwotCWJpdHNbN10gPSB0OyB0ID4+PSA4OwotCWJpdHNbNl0gPSB0OyB0ID4+PSA4OwotCWJpdHNbNV0gPSB0OyB0ID4+PSA4OwotCWJpdHNbNF0gPSB0OwotCXQgPSBzY3R4LT5jb3VudFsxXTsKLQliaXRzWzNdID0gdDsgdCA+Pj0gODsKLQliaXRzWzJdID0gdDsgdCA+Pj0gODsKLQliaXRzWzFdID0gdDsgdCA+Pj0gODsKLQliaXRzWzBdID0gdDsKKwliaXRzWzFdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMF0pOworCWJpdHNbMF0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFsxXSk7CiAKIAkvKiBQYWQgb3V0IHRvIDU2IG1vZCA2NC4gKi8KIAlpbmRleCA9IChzY3R4LT5jb3VudFswXSA+PiAzKSAmIDB4M2Y7CkBAIC0zMDIsMTYgKzI5NiwxMSBAQAogCXNoYTI1Nl91cGRhdGUoc2N0eCwgcGFkZGluZywgcGFkX2xlbik7CiAKIAkvKiBBcHBlbmQgbGVuZ3RoIChiZWZvcmUgcGFkZGluZykgKi8KLQlzaGEyNTZfdXBkYXRlKHNjdHgsIGJpdHMsIDgpOworCXNoYTI1Nl91cGRhdGUoc2N0eCwgKGNvbnN0IHU4ICopYml0cywgc2l6ZW9mKGJpdHMpKTsKIAogCS8qIFN0b3JlIHN0YXRlIGluIGRpZ2VzdCAqLwotCWZvciAoaSA9IGogPSAwOyBpIDwgODsgaSsrLCBqICs9IDQpIHsKLQkJdCA9IHNjdHgtPnN0YXRlW2ldOwotCQlvdXRbaiszXSA9IHQ7IHQgPj49IDg7Ci0JCW91dFtqKzJdID0gdDsgdCA+Pj0gODsKLQkJb3V0W2orMV0gPSB0OyB0ID4+PSA4OwotCQlvdXRbaiAgXSA9IHQ7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWRzdFtpXSA9IGNwdV90b19iZTMyKHNjdHgtPnN0YXRlW2ldKTsKIAogCS8qIFplcm9pemUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAqLwogCW1lbXNldChzY3R4LCAwLCBzaXplb2YoKnNjdHgpKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGE1MTIuYyBiL2NyeXB0by9zaGE1MTIuYwppbmRleCBjNjYzNDM4Li4zZTZlOTM5IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhNTEyLmMKKysrIGIvY3J5cHRvL3NoYTUxMi5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTIzNSwzOSArMjM2LDE3IEBACiBzaGE1MTJfZmluYWwodm9pZCAqY3R4LCB1OCAqaGFzaCkKIHsKICAgICAgICAgc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBjdHg7Ci0JCiAgICAgICAgIHN0YXRpYyB1OCBwYWRkaW5nWzEyOF0gPSB7IDB4ODAsIH07Ci0KLSAgICAgICAgdTMyIHQ7Ci0JdTY0IHQyOwotICAgICAgICB1OCBiaXRzWzEyOF07CisJX19iZTY0ICpkc3QgPSAoX19iZTY0ICopaGFzaDsKKwlfX2JlMzIgYml0c1s0XTsKIAl1bnNpZ25lZCBpbnQgaW5kZXgsIHBhZF9sZW47Ci0JaW50IGksIGo7Ci0KLSAgICAgICAgaW5kZXggPSBwYWRfbGVuID0gdCA9IGkgPSBqID0gMDsKLSAgICAgICAgdDIgPSAwOworCWludCBpOwogCiAJLyogU2F2ZSBudW1iZXIgb2YgYml0cyAqLwotCXQgPSBzY3R4LT5jb3VudFswXTsKLQliaXRzWzE1XSA9IHQ7IHQ+Pj04OwotCWJpdHNbMTRdID0gdDsgdD4+PTg7Ci0JYml0c1sxM10gPSB0OyB0Pj49ODsKLQliaXRzWzEyXSA9IHQ7IAotCXQgPSBzY3R4LT5jb3VudFsxXTsKLQliaXRzWzExXSA9IHQ7IHQ+Pj04OwotCWJpdHNbMTBdID0gdDsgdD4+PTg7Ci0JYml0c1s5IF0gPSB0OyB0Pj49ODsKLQliaXRzWzggXSA9IHQ7IAotCXQgPSBzY3R4LT5jb3VudFsyXTsKLQliaXRzWzcgXSA9IHQ7IHQ+Pj04OwotCWJpdHNbNiBdID0gdDsgdD4+PTg7Ci0JYml0c1s1IF0gPSB0OyB0Pj49ODsKLQliaXRzWzQgXSA9IHQ7IAotCXQgPSBzY3R4LT5jb3VudFszXTsKLQliaXRzWzMgXSA9IHQ7IHQ+Pj04OwotCWJpdHNbMiBdID0gdDsgdD4+PTg7Ci0JYml0c1sxIF0gPSB0OyB0Pj49ODsKLQliaXRzWzAgXSA9IHQ7IAorCWJpdHNbM10gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFswXSk7CisJYml0c1syXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzFdKTsKKwliaXRzWzFdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMl0pOworCWJpdHNbMF0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFszXSk7CiAKIAkvKiBQYWQgb3V0IHRvIDExMiBtb2QgMTI4LiAqLwogCWluZGV4ID0gKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHg3ZjsKQEAgLTI3NSwyMSArMjU0LDEyIEBACiAJc2hhNTEyX3VwZGF0ZShzY3R4LCBwYWRkaW5nLCBwYWRfbGVuKTsKIAogCS8qIEFwcGVuZCBsZW5ndGggKGJlZm9yZSBwYWRkaW5nKSAqLwotCXNoYTUxMl91cGRhdGUoc2N0eCwgYml0cywgMTYpOworCXNoYTUxMl91cGRhdGUoc2N0eCwgKGNvbnN0IHU4ICopYml0cywgc2l6ZW9mKGJpdHMpKTsKIAogCS8qIFN0b3JlIHN0YXRlIGluIGRpZ2VzdCAqLwotCWZvciAoaSA9IGogPSAwOyBpIDwgODsgaSsrLCBqICs9IDgpIHsKLQkJdDIgPSBzY3R4LT5zdGF0ZVtpXTsKLQkJaGFzaFtqKzddID0gKGNoYXIpdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCWhhc2hbais2XSA9IChjaGFyKXQyICYgMHhmZjsgdDI+Pj04OwotCQloYXNoW2orNV0gPSAoY2hhcil0MiAmIDB4ZmY7IHQyPj49ODsKLQkJaGFzaFtqKzRdID0gKGNoYXIpdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCWhhc2hbaiszXSA9IChjaGFyKXQyICYgMHhmZjsgdDI+Pj04OwotCQloYXNoW2orMl0gPSAoY2hhcil0MiAmIDB4ZmY7IHQyPj49ODsKLQkJaGFzaFtqKzFdID0gKGNoYXIpdDIgJiAweGZmOyB0Mj4+PTg7Ci0JCWhhc2hbaiAgXSA9IChjaGFyKXQyICYgMHhmZjsKLQl9Ci0JCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZHN0W2ldID0gY3B1X3RvX2JlNjQoc2N0eC0+c3RhdGVbaV0pOworCiAJLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICovCiAJbWVtc2V0KHNjdHgsIDAsIHNpemVvZihzdHJ1Y3Qgc2hhNTEyX2N0eCkpOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3RlYS5jIGIvY3J5cHRvL3RlYS5jCmluZGV4IDU5MjRlZmQuLmE2YTAyYjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZWEuYworKysgYi9jcnlwdG8vdGVhLmMKQEAgLTIyLDggKzIyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgVEVBX0tFWV9TSVpFCQkxNgogI2RlZmluZSBURUFfQkxPQ0tfU0laRQkJOApAQCAtMzUsOSArMzcsNiBAQAogI2RlZmluZSBYVEVBX1JPVU5EUwkJMzIKICNkZWZpbmUgWFRFQV9ERUxUQQkJMHg5ZTM3NzliOQogCi0jZGVmaW5lIHUzMl9pbih4KSBsZTMyX3RvX2NwdSgqKGNvbnN0IF9fbGUzMiAqKSh4KSkKLSNkZWZpbmUgdTMyX291dCh0bywgZnJvbSkgKCooX19sZTMyICopKHRvKSA9IGNwdV90b19sZTMyKGZyb20pKQotCiBzdHJ1Y3QgdGVhX2N0eCB7CiAJdTMyIEtFWVs0XTsKIH07CkBAIC00OSw4ICs0OCw4IEBACiBzdGF0aWMgaW50IHRlYV9zZXRrZXkodm9pZCAqY3R4X2FyZywgY29uc3QgdTggKmluX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCiB7IAotCiAJc3RydWN0IHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OwogCQogCWlmIChrZXlfbGVuICE9IDE2KQogCXsKQEAgLTU4LDEwICs1NywxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljdHgtPktFWVswXSA9IHUzMl9pbiAoaW5fa2V5KTsKLQljdHgtPktFWVsxXSA9IHUzMl9pbiAoaW5fa2V5ICsgNCk7Ci0JY3R4LT5LRVlbMl0gPSB1MzJfaW4gKGluX2tleSArIDgpOwotCWN0eC0+S0VZWzNdID0gdTMyX2luIChpbl9rZXkgKyAxMik7CisJY3R4LT5LRVlbMF0gPSBsZTMyX3RvX2NwdShrZXlbMF0pOworCWN0eC0+S0VZWzFdID0gbGUzMl90b19jcHUoa2V5WzFdKTsKKwljdHgtPktFWVsyXSA9IGxlMzJfdG9fY3B1KGtleVsyXSk7CisJY3R4LT5LRVlbM10gPSBsZTMyX3RvX2NwdShrZXlbM10pOwogCiAJcmV0dXJuIDA7IAogCkBAIC03Myw5ICs3MiwxMSBAQAogCXUzMiBrMCwgazEsIGsyLCBrMzsKIAogCXN0cnVjdCB0ZWFfY3R4ICpjdHggPSBjdHhfYXJnOworCWNvbnN0IF9fbGUzMiAqaW4gPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqb3V0ID0gKF9fbGUzMiAqKWRzdDsKIAotCXkgPSB1MzJfaW4gKHNyYyk7Ci0JeiA9IHUzMl9pbiAoc3JjICsgNCk7CisJeSA9IGxlMzJfdG9fY3B1KGluWzBdKTsKKwl6ID0gbGUzMl90b19jcHUoaW5bMV0pOwogCiAJazAgPSBjdHgtPktFWVswXTsKIAlrMSA9IGN0eC0+S0VZWzFdOwpAQCAtOTAsMTkgKzkxLDIwIEBACiAJCXogKz0gKCh5IDw8IDQpICsgazIpIF4gKHkgKyBzdW0pIF4gKCh5ID4+IDUpICsgazMpOwogCX0KIAkKLQl1MzJfb3V0IChkc3QsIHkpOwotCXUzMl9vdXQgKGRzdCArIDQsIHopOworCW91dFswXSA9IGNwdV90b19sZTMyKHkpOworCW91dFsxXSA9IGNwdV90b19sZTMyKHopOwogfQogCiBzdGF0aWMgdm9pZCB0ZWFfZGVjcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogeyAKIAl1MzIgeSwgeiwgbiwgc3VtOwogCXUzMiBrMCwgazEsIGsyLCBrMzsKLQogCXN0cnVjdCB0ZWFfY3R4ICpjdHggPSBjdHhfYXJnOworCWNvbnN0IF9fbGUzMiAqaW4gPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqb3V0ID0gKF9fbGUzMiAqKWRzdDsKIAotCXkgPSB1MzJfaW4gKHNyYyk7Ci0JeiA9IHUzMl9pbiAoc3JjICsgNCk7CisJeSA9IGxlMzJfdG9fY3B1KGluWzBdKTsKKwl6ID0gbGUzMl90b19jcHUoaW5bMV0pOwogCiAJazAgPSBjdHgtPktFWVswXTsKIAlrMSA9IGN0eC0+S0VZWzFdOwpAQCAtMTE5LDE2ICsxMjEsMTUgQEAKIAkJc3VtIC09IFRFQV9ERUxUQTsKIAl9CiAJCi0JdTMyX291dCAoZHN0LCB5KTsKLQl1MzJfb3V0IChkc3QgKyA0LCB6KTsKLQorCW91dFswXSA9IGNwdV90b19sZTMyKHkpOworCW91dFsxXSA9IGNwdV90b19sZTMyKHopOwogfQogCiBzdGF0aWMgaW50IHh0ZWFfc2V0a2V5KHZvaWQgKmN0eF9hcmcsIGNvbnN0IHU4ICppbl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1MzIgKmZsYWdzKQogeyAKLQogCXN0cnVjdCB4dGVhX2N0eCAqY3R4ID0gY3R4X2FyZzsKKwljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7CiAJCiAJaWYgKGtleV9sZW4gIT0gMTYpCiAJewpAQCAtMTM2LDEwICsxMzcsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY3R4LT5LRVlbMF0gPSB1MzJfaW4gKGluX2tleSk7Ci0JY3R4LT5LRVlbMV0gPSB1MzJfaW4gKGluX2tleSArIDQpOwotCWN0eC0+S0VZWzJdID0gdTMyX2luIChpbl9rZXkgKyA4KTsKLQljdHgtPktFWVszXSA9IHUzMl9pbiAoaW5fa2V5ICsgMTIpOworCWN0eC0+S0VZWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKKwljdHgtPktFWVsxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CisJY3R4LT5LRVlbMl0gPSBsZTMyX3RvX2NwdShrZXlbMl0pOworCWN0eC0+S0VZWzNdID0gbGUzMl90b19jcHUoa2V5WzNdKTsKIAogCXJldHVybiAwOyAKIApAQCAtMTQ3LDE0ICsxNDgsMTUgQEAKIAogc3RhdGljIHZvaWQgeHRlYV9lbmNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7IAotCiAJdTMyIHksIHosIHN1bSA9IDA7CiAJdTMyIGxpbWl0ID0gWFRFQV9ERUxUQSAqIFhURUFfUk9VTkRTOwogCiAJc3RydWN0IHh0ZWFfY3R4ICpjdHggPSBjdHhfYXJnOworCWNvbnN0IF9fbGUzMiAqaW4gPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqb3V0ID0gKF9fbGUzMiAqKWRzdDsKIAotCXkgPSB1MzJfaW4gKHNyYyk7Ci0JeiA9IHUzMl9pbiAoc3JjICsgNCk7CisJeSA9IGxlMzJfdG9fY3B1KGluWzBdKTsKKwl6ID0gbGUzMl90b19jcHUoaW5bMV0pOwogCiAJd2hpbGUgKHN1bSAhPSBsaW1pdCkgewogCQl5ICs9ICgoeiA8PCA0IF4geiA+PiA1KSArIHopIF4gKHN1bSArIGN0eC0+S0VZW3N1bSYzXSk7IApAQCAtMTYyLDE5ICsxNjQsMTkgQEAKIAkJeiArPSAoKHkgPDwgNCBeIHkgPj4gNSkgKyB5KSBeIChzdW0gKyBjdHgtPktFWVtzdW0+PjExICYzXSk7IAogCX0KIAkKLQl1MzJfb3V0IChkc3QsIHkpOwotCXUzMl9vdXQgKGRzdCArIDQsIHopOwotCisJb3V0WzBdID0gY3B1X3RvX2xlMzIoeSk7CisJb3V0WzFdID0gY3B1X3RvX2xlMzIoeik7CiB9CiAKIHN0YXRpYyB2b2lkIHh0ZWFfZGVjcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogeyAKLQogCXUzMiB5LCB6LCBzdW07CiAJc3RydWN0IHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICppbiA9IChjb25zdCBfX2xlMzIgKilzcmM7CisJX19sZTMyICpvdXQgPSAoX19sZTMyICopZHN0OwogCi0JeSA9IHUzMl9pbiAoc3JjKTsKLQl6ID0gdTMyX2luIChzcmMgKyA0KTsKKwl5ID0gbGUzMl90b19jcHUoaW5bMF0pOworCXogPSBsZTMyX3RvX2NwdShpblsxXSk7CiAKIAlzdW0gPSBYVEVBX0RFTFRBICogWFRFQV9ST1VORFM7CiAKQEAgLTE4NCwyMiArMTg2LDIyIEBACiAJCXkgLT0gKCh6IDw8IDQgXiB6ID4+IDUpICsgeikgXiAoc3VtICsgY3R4LT5LRVlbc3VtICYgM10pOwogCX0KIAkKLQl1MzJfb3V0IChkc3QsIHkpOwotCXUzMl9vdXQgKGRzdCArIDQsIHopOwotCisJb3V0WzBdID0gY3B1X3RvX2xlMzIoeSk7CisJb3V0WzFdID0gY3B1X3RvX2xlMzIoeik7CiB9CiAKIAogc3RhdGljIHZvaWQgeGV0YV9lbmNyeXB0KHZvaWQgKmN0eF9hcmcsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7IAotCiAJdTMyIHksIHosIHN1bSA9IDA7CiAJdTMyIGxpbWl0ID0gWFRFQV9ERUxUQSAqIFhURUFfUk9VTkRTOwogCiAJc3RydWN0IHh0ZWFfY3R4ICpjdHggPSBjdHhfYXJnOworCWNvbnN0IF9fbGUzMiAqaW4gPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqb3V0ID0gKF9fbGUzMiAqKWRzdDsKIAotCXkgPSB1MzJfaW4gKHNyYyk7Ci0JeiA9IHUzMl9pbiAoc3JjICsgNCk7CisJeSA9IGxlMzJfdG9fY3B1KGluWzBdKTsKKwl6ID0gbGUzMl90b19jcHUoaW5bMV0pOwogCiAJd2hpbGUgKHN1bSAhPSBsaW1pdCkgewogCQl5ICs9ICh6IDw8IDQgXiB6ID4+IDUpICsgKHogXiBzdW0pICsgY3R4LT5LRVlbc3VtJjNdOwpAQCAtMjA3LDE5ICsyMDksMTkgQEAKIAkJeiArPSAoeSA8PCA0IF4geSA+PiA1KSArICh5IF4gc3VtKSArIGN0eC0+S0VZW3N1bT4+MTEgJjNdOwogCX0KIAkKLQl1MzJfb3V0IChkc3QsIHkpOwotCXUzMl9vdXQgKGRzdCArIDQsIHopOwotCisJb3V0WzBdID0gY3B1X3RvX2xlMzIoeSk7CisJb3V0WzFdID0gY3B1X3RvX2xlMzIoeik7CiB9CiAKIHN0YXRpYyB2b2lkIHhldGFfZGVjcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogeyAKLQogCXUzMiB5LCB6LCBzdW07CiAJc3RydWN0IHRlYV9jdHggKmN0eCA9IGN0eF9hcmc7CisJY29uc3QgX19sZTMyICppbiA9IChjb25zdCBfX2xlMzIgKilzcmM7CisJX19sZTMyICpvdXQgPSAoX19sZTMyICopZHN0OwogCi0JeSA9IHUzMl9pbiAoc3JjKTsKLQl6ID0gdTMyX2luIChzcmMgKyA0KTsKKwl5ID0gbGUzMl90b19jcHUoaW5bMF0pOworCXogPSBsZTMyX3RvX2NwdShpblsxXSk7CiAKIAlzdW0gPSBYVEVBX0RFTFRBICogWFRFQV9ST1VORFM7CiAKQEAgLTIyOSw5ICsyMzEsOCBAQAogCQl5IC09ICh6IDw8IDQgXiB6ID4+IDUpICsgKHogXiBzdW0pICsgY3R4LT5LRVlbc3VtICYgM107CiAJfQogCQotCXUzMl9vdXQgKGRzdCwgeSk7Ci0JdTMyX291dCAoZHN0ICsgNCwgeik7Ci0KKwlvdXRbMF0gPSBjcHVfdG9fbGUzMih5KTsKKwlvdXRbMV0gPSBjcHVfdG9fbGUzMih6KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHRlYV9hbGcgPSB7CkBAIC0yMzksNiArMjQwLDcgQEAKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JVEVBX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZiAoc3RydWN0IHRlYV9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKHRlYV9hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JeyAuY2lwaGVyID0gewpAQCAtMjU0LDYgKzI1Niw3IEBACiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CVhURUFfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mIChzdHJ1Y3QgeHRlYV9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKHh0ZWFfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsgLmNpcGhlciA9IHsKQEAgLTI2OSw2ICsyNzIsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlYVEVBX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZiAoc3RydWN0IHh0ZWFfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQkzLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCh4dGVhX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGdyMTkyLmMgYi9jcnlwdG8vdGdyMTkyLmMKaW5kZXggZjBhNDVjZi4uMmQ4ZTQ0ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3RncjE5Mi5jCisrKyBiL2NyeXB0by90Z3IxOTIuYwpAQCAtMjQsOCArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBUR1IxOTJfRElHRVNUX1NJWkUgMjQKICNkZWZpbmUgVEdSMTYwX0RJR0VTVF9TSVpFIDIwCkBAIC00NjcsMTggKzQ2OSwxMCBAQAogCXU2NCBhLCBiLCBjLCBhYSwgYmIsIGNjOwogCXU2NCB4WzhdOwogCWludCBpOwotCWNvbnN0IHU4ICpwdHIgPSBkYXRhOworCWNvbnN0IF9fbGU2NCAqcHRyID0gKGNvbnN0IF9fbGU2NCAqKWRhdGE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBwdHIgKz0gOCkgewotCQl4W2ldID0gKCgodTY0KXB0cls3XSApIDw8IDU2KSBeCi0JCSgoKHU2NClwdHJbNl0gJiAweGZmTCkgPDwgNDgpIF4KLQkJKCgodTY0KXB0cls1XSAmIDB4ZmZMKSA8PCA0MCkgXgotCQkoKCh1NjQpcHRyWzRdICYgMHhmZkwpIDw8IDMyKSBeCi0JCSgoKHU2NClwdHJbM10gJiAweGZmTCkgPDwgMjQpIF4KLQkJKCgodTY0KXB0clsyXSAmIDB4ZmZMKSA8PCAxNikgXgotCQkoKCh1NjQpcHRyWzFdICYgMHhmZkwpIDw8ICA4KSBeCi0JCSgoKHU2NClwdHJbMF0gJiAweGZmTCkgICAgICApOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQl4W2ldID0gbGU2NF90b19jcHUocHRyW2ldKTsKIAogCS8qIHNhdmUgKi8KIAlhID0gYWEgPSB0Y3R4LT5hOwpAQCAtNTU4LDkgKzU1MiwxMCBAQAogc3RhdGljIHZvaWQgdGdyMTkyX2ZpbmFsKHZvaWQgKmN0eCwgdTggKiBvdXQpCiB7CiAJc3RydWN0IHRncjE5Ml9jdHggKnRjdHggPSBjdHg7CisJX19iZTY0ICpkc3QgPSAoX19iZTY0ICopb3V0OworCV9fYmU2NCAqYmU2NHA7CisJX19sZTMyICpsZTMycDsKIAl1MzIgdCwgbXNiLCBsc2I7Ci0JdTggKnA7Ci0JaW50IGksIGo7CiAKIAl0Z3IxOTJfdXBkYXRlKHRjdHgsIE5VTEwsIDApOyAvKiBmbHVzaCAqLyA7CiAKQEAgLTU5NCw0MSArNTg5LDE2IEBACiAJCW1lbXNldCh0Y3R4LT5oYXNoLCAwLCA1Nik7ICAgIC8qIGZpbGwgbmV4dCBibG9jayB3aXRoIHplcm9lcyAqLwogCX0KIAkvKiBhcHBlbmQgdGhlIDY0IGJpdCBjb3VudCAqLwotCXRjdHgtPmhhc2hbNTZdID0gbHNiOwotCXRjdHgtPmhhc2hbNTddID0gbHNiID4+IDg7Ci0JdGN0eC0+aGFzaFs1OF0gPSBsc2IgPj4gMTY7Ci0JdGN0eC0+aGFzaFs1OV0gPSBsc2IgPj4gMjQ7Ci0JdGN0eC0+aGFzaFs2MF0gPSBtc2I7Ci0JdGN0eC0+aGFzaFs2MV0gPSBtc2IgPj4gODsKLQl0Y3R4LT5oYXNoWzYyXSA9IG1zYiA+PiAxNjsKLQl0Y3R4LT5oYXNoWzYzXSA9IG1zYiA+PiAyNDsKKwlsZTMycCA9IChfX2xlMzIgKikmdGN0eC0+aGFzaFs1Nl07CisJbGUzMnBbMF0gPSBjcHVfdG9fbGUzMihsc2IpOworCWxlMzJwWzFdID0gY3B1X3RvX2xlMzIobXNiKTsKKwogCXRncjE5Ml90cmFuc2Zvcm0odGN0eCwgdGN0eC0+aGFzaCk7CiAKLQlwID0gdGN0eC0+aGFzaDsKLQkqcCsrID0gdGN0eC0+YSA+PiA1NjsgKnArKyA9IHRjdHgtPmEgPj4gNDg7ICpwKysgPSB0Y3R4LT5hID4+IDQwOwotCSpwKysgPSB0Y3R4LT5hID4+IDMyOyAqcCsrID0gdGN0eC0+YSA+PiAyNDsgKnArKyA9IHRjdHgtPmEgPj4gMTY7Ci0JKnArKyA9IHRjdHgtPmEgPj4gIDg7ICpwKysgPSB0Y3R4LT5hO1wKLQkqcCsrID0gdGN0eC0+YiA+PiA1NjsgKnArKyA9IHRjdHgtPmIgPj4gNDg7ICpwKysgPSB0Y3R4LT5iID4+IDQwOwotCSpwKysgPSB0Y3R4LT5iID4+IDMyOyAqcCsrID0gdGN0eC0+YiA+PiAyNDsgKnArKyA9IHRjdHgtPmIgPj4gMTY7Ci0JKnArKyA9IHRjdHgtPmIgPj4gIDg7ICpwKysgPSB0Y3R4LT5iOwotCSpwKysgPSB0Y3R4LT5jID4+IDU2OyAqcCsrID0gdGN0eC0+YyA+PiA0ODsgKnArKyA9IHRjdHgtPmMgPj4gNDA7Ci0JKnArKyA9IHRjdHgtPmMgPj4gMzI7ICpwKysgPSB0Y3R4LT5jID4+IDI0OyAqcCsrID0gdGN0eC0+YyA+PiAxNjsKLQkqcCsrID0gdGN0eC0+YyA+PiAgODsgKnArKyA9IHRjdHgtPmM7Ci0KLQotCS8qIHVucGFjayB0aGUgaGFzaCAqLwotCWogPSA3OwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJb3V0W2otLV0gPSAodGN0eC0+YSA+PiA4ICogaSkgJiAweGZmOwotCX0KLQlqID0gMTU7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlvdXRbai0tXSA9ICh0Y3R4LT5iID4+IDggKiBpKSAmIDB4ZmY7Ci0JfQotCWogPSAyMzsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCW91dFtqLS1dID0gKHRjdHgtPmMgPj4gOCAqIGkpICYgMHhmZjsKLQl9CisJYmU2NHAgPSAoX19iZTY0ICopdGN0eC0+aGFzaDsKKwlkc3RbMF0gPSBiZTY0cFswXSA9IGNwdV90b19iZTY0KHRjdHgtPmEpOworCWRzdFsxXSA9IGJlNjRwWzFdID0gY3B1X3RvX2JlNjQodGN0eC0+Yik7CisJZHN0WzJdID0gYmU2NHBbMl0gPSBjcHVfdG9fYmU2NCh0Y3R4LT5jKTsKIH0KIAogc3RhdGljIHZvaWQgdGdyMTYwX2ZpbmFsKHZvaWQgKmN0eCwgdTggKiBvdXQpCmRpZmYgLS1naXQgYS9jcnlwdG8vdHdvZmlzaC5jIGIvY3J5cHRvL3R3b2Zpc2guYwppbmRleCA0ZWZmZjhjLi5hMjZkODg1IDEwMDY0NAotLS0gYS9jcnlwdG8vdHdvZmlzaC5jCisrKyBiL2NyeXB0by90d29maXNoLmMKQEAgLTM3LDYgKzM3LDggQEAKICAqIEFic3RyYWN0IEFsZ2VicmFfIGJ5IEpvc2VwaCBBLiBHYWxsaWFuLCBlc3BlY2lhbGx5IGNoYXB0ZXIgMjIgaW4gdGhlCiAgKiBUaGlyZCBFZGl0aW9uLgogICovCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC02MjEsMTMgKzYyMywxMSBAQAogICogd2hpdGVuaW5nIHN1YmtleSBudW1iZXIgbS4gKi8KIAogI2RlZmluZSBJTlBBQ0sobiwgeCwgbSkgXAotICAgeCA9IGluWzQgKiAobildIF4gKGluWzQgKiAobikgKyAxXSA8PCA4KSBcCi0gICAgIF4gKGluWzQgKiAobikgKyAyXSA8PCAxNikgXiAoaW5bNCAqIChuKSArIDNdIDw8IDI0KSBeIGN0eC0+d1ttXQorICAgeCA9IGxlMzJfdG9fY3B1KHNyY1tuXSkgXiBjdHgtPndbbV0KIAogI2RlZmluZSBPVVRVTlBBQ0sobiwgeCwgbSkgXAogICAgeCBePSBjdHgtPndbbV07IFwKLSAgIG91dFs0ICogKG4pXSA9IHg7IG91dFs0ICogKG4pICsgMV0gPSB4ID4+IDg7IFwKLSAgIG91dFs0ICogKG4pICsgMl0gPSB4ID4+IDE2OyBvdXRbNCAqIChuKSArIDNdID0geCA+PiAyNAorICAgZHN0W25dID0gY3B1X3RvX2xlMzIoeCkKIAogI2RlZmluZSBURl9NSU5fS0VZX1NJWkUgMTYKICNkZWZpbmUgVEZfTUFYX0tFWV9TSVpFIDMyCkBAIC04MDQsNiArODA0LDggQEAKIHN0YXRpYyB2b2lkIHR3b2Zpc2hfZW5jcnlwdCh2b2lkICpjeCwgdTggKm91dCwgY29uc3QgdTggKmluKQogewogCXN0cnVjdCB0d29maXNoX2N0eCAqY3R4ID0gY3g7CisJY29uc3QgX19sZTMyICpzcmMgPSAoY29uc3QgX19sZTMyICopaW47CisJX19sZTMyICpkc3QgPSAoX19sZTMyICopb3V0OwogCiAJLyogVGhlIGZvdXIgMzItYml0IGNodW5rcyBvZiB0aGUgdGV4dC4gKi8KIAl1MzIgYSwgYiwgYywgZDsKQEAgLTgzOSw2ICs4NDEsOCBAQAogc3RhdGljIHZvaWQgdHdvZmlzaF9kZWNyeXB0KHZvaWQgKmN4LCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCiB7CiAJc3RydWN0IHR3b2Zpc2hfY3R4ICpjdHggPSBjeDsKKwljb25zdCBfX2xlMzIgKnNyYyA9IChjb25zdCBfX2xlMzIgKilpbjsKKwlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7CiAgIAogCS8qIFRoZSBmb3VyIDMyLWJpdCBjaHVua3Mgb2YgdGhlIHRleHQuICovCiAJdTMyIGEsIGIsIGMsIGQ7CkBAIC04NzUsNiArODc5LDcgQEAKIAkuY3JhX2ZsYWdzICAgICAgICAgID0gICBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplICAgICAgPSAgIFRGX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplICAgICAgICA9ICAgc2l6ZW9mKHN0cnVjdCB0d29maXNoX2N0eCksCisJLmNyYV9hbGlnbm1hc2sgICAgICA9CTMsCiAJLmNyYV9tb2R1bGUgICAgICAgICA9ICAgVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0ICAgICAgICAgICA9ICAgTElTVF9IRUFEX0lOSVQoYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UgICAgICAgICAgICAgID0gICB7IC5jaXBoZXIgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vd3A1MTIuYyBiL2NyeXB0by93cDUxMi5jCmluZGV4IGZkNmUyMGUuLmIyMjZhMTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by93cDUxMi5jCisrKyBiL2NyeXB0by93cDUxMi5jCkBAIC0yMiw4ICsyMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIFdQNTEyX0RJR0VTVF9TSVpFIDY0CiAjZGVmaW5lIFdQMzg0X0RJR0VTVF9TSVpFIDQ4CkBAIC03NzgsMTkgKzc4MCwxMCBAQAogCXU2NCBibG9ja1s4XTsgICAgLyogbXUoYnVmZmVyKSAqLwogCXU2NCBzdGF0ZVs4XTsgICAgLyogdGhlIGNpcGhlciBzdGF0ZSAqLwogCXU2NCBMWzhdOwotCXU4ICpidWZmZXIgPSB3Y3R4LT5idWZmZXI7CisJY29uc3QgX19iZTY0ICpidWZmZXIgPSAoY29uc3QgX19iZTY0ICopd2N0eC0+YnVmZmVyOwogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKywgYnVmZmVyICs9IDgpIHsKLQkJYmxvY2tbaV0gPQotCQkoKCh1NjQpYnVmZmVyWzBdICAgICAgICApIDw8IDU2KSBeCi0JCSgoKHU2NClidWZmZXJbMV0gJiAweGZmTCkgPDwgNDgpIF4KLQkJKCgodTY0KWJ1ZmZlclsyXSAmIDB4ZmZMKSA8PCA0MCkgXgotCQkoKCh1NjQpYnVmZmVyWzNdICYgMHhmZkwpIDw8IDMyKSBeCi0JCSgoKHU2NClidWZmZXJbNF0gJiAweGZmTCkgPDwgMjQpIF4KLQkJKCgodTY0KWJ1ZmZlcls1XSAmIDB4ZmZMKSA8PCAxNikgXgotCQkoKCh1NjQpYnVmZmVyWzZdICYgMHhmZkwpIDw8ICA4KSBeCi0JCSgoKHU2NClidWZmZXJbN10gJiAweGZmTCkgICAgICApOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlibG9ja1tpXSA9IGJlNjRfdG9fY3B1KGJ1ZmZlcltpXSk7CiAKIAlzdGF0ZVswXSA9IGJsb2NrWzBdIF4gKEtbMF0gPSB3Y3R4LT5oYXNoWzBdKTsKIAlzdGF0ZVsxXSA9IGJsb2NrWzFdIF4gKEtbMV0gPSB3Y3R4LT5oYXNoWzFdKTsKQEAgLTEwNjksNyArMTA2Miw3IEBACiAgICAJdTggKmJpdExlbmd0aCAgID0gd2N0eC0+Yml0TGVuZ3RoOwogICAgCWludCBidWZmZXJCaXRzICA9IHdjdHgtPmJ1ZmZlckJpdHM7CiAgICAJaW50IGJ1ZmZlclBvcyAgID0gd2N0eC0+YnVmZmVyUG9zOwotICAgCXU4ICpkaWdlc3QgICAgICA9IG91dDsKKwlfX2JlNjQgKmRpZ2VzdCAgPSAoX19iZTY0ICopb3V0OwogCiAgICAJYnVmZmVyW2J1ZmZlclBvc10gfD0gMHg4MFUgPj4gKGJ1ZmZlckJpdHMgJiA3KTsKICAgIAlidWZmZXJQb3MrKzsKQEAgLTEwODgsMTcgKzEwODEsOCBAQAogICAgCW1lbWNweSgmYnVmZmVyW1dQNTEyX0JMT0NLX1NJWkUgLSBXUDUxMl9MRU5HVEhCWVRFU10sCiAJCSAgIGJpdExlbmd0aCwgV1A1MTJfTEVOR1RIQllURVMpOwogICAgCXdwNTEyX3Byb2Nlc3NfYnVmZmVyKHdjdHgpOwotICAgCWZvciAoaSA9IDA7IGkgPCBXUDUxMl9ESUdFU1RfU0laRS84OyBpKyspIHsKLQkJZGlnZXN0WzBdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+IDU2KTsKLQkJZGlnZXN0WzFdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+IDQ4KTsKLQkJZGlnZXN0WzJdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+IDQwKTsKLQkJZGlnZXN0WzNdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+IDMyKTsKLQkJZGlnZXN0WzRdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+IDI0KTsKLQkJZGlnZXN0WzVdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+IDE2KTsKLQkJZGlnZXN0WzZdID0gKHU4KSh3Y3R4LT5oYXNoW2ldID4+ICA4KTsKLQkJZGlnZXN0WzddID0gKHU4KSh3Y3R4LT5oYXNoW2ldICAgICAgKTsKLQkJZGlnZXN0ICs9IDg7Ci0gICAJfQorCWZvciAoaSA9IDA7IGkgPCBXUDUxMl9ESUdFU1RfU0laRS84OyBpKyspCisJCWRpZ2VzdFtpXSA9IGNwdV90b19iZTY0KHdjdHgtPmhhc2hbaV0pOwogICAgCXdjdHgtPmJ1ZmZlckJpdHMgICA9IGJ1ZmZlckJpdHM7CiAgICAJd2N0eC0+YnVmZmVyUG9zICAgID0gYnVmZmVyUG9zOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbWJhL2J1cy5jIGIvZHJpdmVycy9hbWJhL2J1cy5jCmluZGV4IDFiYmRkMTYuLjg4OTg1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCiAjZGVmaW5lIHRvX2FtYmFfZGV2aWNlKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgYW1iYV9kZXZpY2UsIGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggYTQ1MmIxMy4uODY0NzI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXVuc2lnbmVkIG9mZnNldCwgYnZfb2ZmczsKIAlpbnQgbGVuLCByZXQ7CiAKLQlkb3duKCZtYXBwaW5nLT5ob3N0LT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmbWFwcGluZy0+aG9zdC0+aV9tdXRleCk7CiAJaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlvZmZzZXQgPSBwb3MgJiAoKHBnb2ZmX3QpUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJYnZfb2ZmcyA9IGJ2ZWMtPmJ2X29mZnNldDsKQEAgLTI3OCw3ICsyNzgsNyBAQAogCX0KIAlyZXQgPSAwOwogb3V0OgotCXVwKCZtYXBwaW5nLT5ob3N0LT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwogdW5sb2NrOgogCXVubG9ja19wYWdlKHBhZ2UpOwpAQCAtNTI3LDEyICs1MjcsMTIgQEAKIAlsby0+bG9fcGVuZGluZysrOwogCWxvb3BfYWRkX2Jpbyhsbywgb2xkX2Jpbyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZsby0+bG9fbG9jayk7Ci0JdXAoJmxvLT5sb19iaF9tdXRleCk7CisJY29tcGxldGUoJmxvLT5sb19iaF9kb25lKTsKIAlyZXR1cm4gMDsKIAogb3V0OgogCWlmIChsby0+bG9fcGVuZGluZyA9PSAwKQotCQl1cCgmbG8tPmxvX2JoX211dGV4KTsKKwkJY29tcGxldGUoJmxvLT5sb19iaF9kb25lKTsKIAlzcGluX3VubG9ja19pcnEoJmxvLT5sb19sb2NrKTsKIAliaW9faW9fZXJyb3Iob2xkX2Jpbywgb2xkX2Jpby0+Ymlfc2l6ZSk7CiAJcmV0dXJuIDA7CkBAIC01OTMsMjMgKzU5MywyMCBAQAogCWxvLT5sb19wZW5kaW5nID0gMTsKIAogCS8qCi0JICogdXAgc2VtLCB3ZSBhcmUgcnVubmluZworCSAqIGNvbXBsZXRlIGl0LCB3ZSBhcmUgcnVubmluZwogCSAqLwotCXVwKCZsby0+bG9fc2VtKTsKKwljb21wbGV0ZSgmbG8tPmxvX2RvbmUpOwogCiAJZm9yICg7OykgewogCQlpbnQgcGVuZGluZzsKIAotCQkvKgotCQkgKiBpbnRlcnJ1cHRpYmxlIGp1c3QgdG8gbm90IGNvbnRyaWJ1dGUgdG8gbG9hZCBhdmcKLQkJICovCi0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJmxvLT5sb19iaF9tdXRleCkpCisJCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmxvLT5sb19iaF9kb25lKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19pcnEoJmxvLT5sb19sb2NrKTsKIAogCQkvKgotCQkgKiBjb3VsZCBiZSB1cHBlZCBiZWNhdXNlIG9mIHRlYXItZG93biwgbm90IHBlbmRpbmcgd29yaworCQkgKiBjb3VsZCBiZSBjb21wbGV0ZWQgYmVjYXVzZSBvZiB0ZWFyLWRvd24sIG5vdCBwZW5kaW5nIHdvcmsKIAkJICovCiAJCWlmICh1bmxpa2VseSghbG8tPmxvX3BlbmRpbmcpKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJmxvLT5sb19sb2NrKTsKQEAgLTYzMiw3ICs2MjksNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JdXAoJmxvLT5sb19zZW0pOworCWNvbXBsZXRlKCZsby0+bG9fZG9uZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0Myw3ICs4NDAsNyBAQAogCXNldF9ibG9ja3NpemUoYmRldiwgbG9fYmxvY2tzaXplKTsKIAogCWtlcm5lbF90aHJlYWQobG9vcF90aHJlYWQsIGxvLCBDTE9ORV9LRVJORUwpOwotCWRvd24oJmxvLT5sb19zZW0pOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmxvLT5sb19kb25lKTsKIAlyZXR1cm4gMDsKIAogIG91dF9wdXRmOgpAQCAtOTA5LDEwICs5MDYsMTAgQEAKIAlsby0+bG9fc3RhdGUgPSBMb19ydW5kb3duOwogCWxvLT5sb19wZW5kaW5nLS07CiAJaWYgKCFsby0+bG9fcGVuZGluZykKLQkJdXAoJmxvLT5sb19iaF9tdXRleCk7CisJCWNvbXBsZXRlKCZsby0+bG9fYmhfZG9uZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZsby0+bG9fbG9jayk7CiAKLQlkb3duKCZsby0+bG9fc2VtKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZsby0+bG9fZG9uZSk7CiAKIAlsby0+bG9fYmFja2luZ19maWxlID0gTlVMTDsKIApAQCAtMTI4OSw4ICsxMjg2LDggQEAKIAkJaWYgKCFsby0+bG9fcXVldWUpCiAJCQlnb3RvIG91dF9tZW00OwogCQlpbml0X01VVEVYKCZsby0+bG9fY3RsX211dGV4KTsKLQkJaW5pdF9NVVRFWF9MT0NLRUQoJmxvLT5sb19zZW0pOwotCQlpbml0X01VVEVYX0xPQ0tFRCgmbG8tPmxvX2JoX211dGV4KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZsby0+bG9fZG9uZSk7CisJCWluaXRfY29tcGxldGlvbigmbG8tPmxvX2JoX2RvbmUpOwogCQlsby0+bG9fbnVtYmVyID0gaTsKIAkJc3Bpbl9sb2NrX2luaXQoJmxvLT5sb19sb2NrKTsKIAkJZGlzay0+bWFqb3IgPSBMT09QX01BSk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zeDguYyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKaW5kZXggYTdlMDk3NS4uMmFlMDhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zeDguYworKysgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpZiAwCkBAIC0zMDMsNyArMzAzLDcgQEAKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAkJZnNtX3Rhc2s7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlCQlwcm9iZV9zZW07CisJc3RydWN0IGNvbXBsZXRpb24JCXByb2JlX2NvbXA7CiB9OwogCiBzdHJ1Y3QgY2FybV9yZXNwb25zZSB7CkBAIC0xMzQ2LDcgKzEzNDYsNyBAQAogCX0KIAogCWNhc2UgSFNUX1BST0JFX0ZJTklTSEVEOgotCQl1cCgmaG9zdC0+cHJvYmVfc2VtKTsKKwkJY29tcGxldGUoJmhvc3QtPnByb2JlX2NvbXApOwogCQlicmVhazsKIAogCWNhc2UgSFNUX0VSUk9SOgpAQCAtMTYyMiw3ICsxNjIyLDcgQEAKIAlob3N0LT5mbGFncyA9IHBjaV9kYWMgPyBGTF9EQUMgOiAwOwogCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKIAlJTklUX1dPUksoJmhvc3QtPmZzbV90YXNrLCBjYXJtX2ZzbV90YXNrLCBob3N0KTsKLQlpbml0X01VVEVYX0xPQ0tFRCgmaG9zdC0+cHJvYmVfc2VtKTsKKwlpbml0X2NvbXBsZXRpb24oJmhvc3QtPnByb2JlX2NvbXApOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaG9zdC0+cmVxKTsgaSsrKQogCQlob3N0LT5yZXFbaV0udGFnID0gaTsKQEAgLTE2OTEsOCArMTY5MSw4IEBACiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CiAKLQlEUFJJTlRLKCJ3YWl0aW5nIGZvciBwcm9iZV9zZW1cbiIpOwotCWRvd24oJmhvc3QtPnByb2JlX3NlbSk7CisJRFBSSU5USygid2FpdGluZyBmb3IgcHJvYmVfY29tcFxuIik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaG9zdC0+cHJvYmVfY29tcCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogcGNpICVzLCBwb3J0cyAlZCwgaW8gJWx4LCBpcnEgJXUsIG1ham9yICVkXG4iLAogCSAgICAgICBob3N0LT5uYW1lLCBwY2lfbmFtZShwZGV2KSwgKGludCkgQ0FSTV9NQVhfUE9SVFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2NtMjA2LmMgYi9kcml2ZXJzL2Nkcm9tL2NtMjA2LmMKaW5kZXggMDFmMDM1MS4uY2UxMjdmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jbTIwNi5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY20yMDYuYwpAQCAtMzIsNyArMzIsNyBAQAogIDE4IG1ydCAxOTk1OiAwLjI0IFdvcmtpbmcgYmFja2dyb3VuZCByZWFkLWFoZWFkLiAoc3RpbGwgcHJvYmxlbXMpCiAgMjYgbXJ0IDE5OTU6IDAuMjUgTXVsdGktc2Vzc2lvbiBpb2N0bCBhZGRlZCAoa2VybmVsIHYxLjIpLgogICAgICAgICAgICAgICBTdGF0aXN0aWNzIGltcGxlbWVudGVkLCB0aG91Z2ggc2VwYXJhdGUgc3RhdHMyMDYuaC4KLQkgICAgICBBY2Nlc3NpYmxlIHRyb3VnaCBpb2N0bCAweDEwMDAgKGp1c3QgYSBudW1iZXIpLgorCSAgICAgIEFjY2Vzc2libGUgdGhyb3VnaCBpb2N0bCAweDEwMDAgKGp1c3QgYSBudW1iZXIpLgogCSAgICAgIEhhcmQgdG8gY2hvb3NlIGJldHdlZW4gdjEuMiBkZXZlbG9wbWVudCBhbmQgMS4xLjc1LgogCSAgICAgIEJvdHRvbS1oYWxmIGRvZXNuJ3Qgd29yayB3aXRoIDEuMi4uLgogCSAgICAgIDAuMjVhOiBmaXhlZC4uLiB0eXBvLiBTdGlsbCBwcm9ibGVtcy4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDViMmQxODAuLjcwNGMzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTc0MSw3ICs3NDEsNyBAQAogewogCWxvZmZfdCByZXQ7CiAKLQlkb3duKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlzd2l0Y2ggKG9yaWcpIHsKIAkJY2FzZSAwOgogCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CkBAIC03NTYsNyArNzU2LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU5WQUw7CiAJfQotCXVwKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeXNycS5jIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKaW5kZXggMTQ1Mjc1ZS4uNTc2NWY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5c3JxLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKQEAgLTE1Myw2ICsxNTMsMjEgQEAKIAogLyogRU5EIFNZTkMgU1lTUlEgSEFORExFUlMgQkxPQ0sgKi8KIAorI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCisKK3N0YXRpYyB2b2lkCitzeXNycV9oYW5kbGVfc2hvd2xvY2tzKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCW11dGV4X2RlYnVnX3Nob3dfYWxsX2xvY2tzKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3Nob3dsb2Nrc19vcCA9IHsKKwkuaGFuZGxlcgk9IHN5c3JxX2hhbmRsZV9zaG93bG9ja3MsCisJLmhlbHBfbXNnCT0gInNob3ctYWxsLWxvY2tzKEQpIiwKKwkuYWN0aW9uX21zZwk9ICJTaG93IExvY2tzIEhlbGQiLAorfTsKKworI2VuZGlmCiAKIC8qIFNIT1cgU1lTUlEgSEFORExFUlMgQkxPQ0sgKi8KIApAQCAtMjk0LDcgKzMwOSwxMSBAQAogI2Vsc2UKIC8qIGMgKi8JTlVMTCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCisvKiBkICovICZzeXNycV9zaG93bG9ja3Nfb3AsCisjZWxzZQogLyogZCAqLyBOVUxMLAorI2VuZGlmCiAvKiBlICovCSZzeXNycV90ZXJtX29wLAogLyogZiAqLwkmc3lzcnFfbW9vbV9vcCwKIC8qIGcgKi8JTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9jcHU1d2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvY3B1NXdkdC5jCmluZGV4IGU3NTA0NWYuLjNlODQxMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9jcHU1d2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2NwdTV3ZHQuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTU3LDcgKzU4LDcgQEAKIC8qIHNvbWUgZGV2aWNlIGRhdGEgKi8KIAogc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IHNlbWFwaG9yZSBzdG9wOworCXN0cnVjdCBjb21wbGV0aW9uIHN0b3A7CiAJdm9sYXRpbGUgaW50IHJ1bm5pbmc7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdm9sYXRpbGUgaW50IHF1ZXVlOwpAQCAtODUsNyArODYsNyBAQAogCX0KIAllbHNlIHsKIAkJLyogdGlja3MgZG9lc24ndCBtYXR0ZXIgYW55d2F5ICovCi0JCXVwKCZjcHU1d2R0X2RldmljZS5zdG9wKTsKKwkJY29tcGxldGUoJmNwdTV3ZHRfZGV2aWNlLnN0b3ApOwogCX0KIAogfQpAQCAtMjM5LDcgKzI0MCw3IEBACiAJaWYgKCAhdmFsICkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInNvcnJ5LCB3YXMgbXkgZmF1bHRcbiIpOwogCi0JaW5pdF9NVVRFWF9MT0NLRUQoJmNwdTV3ZHRfZGV2aWNlLnN0b3ApOworCWluaXRfY29tcGxldGlvbigmY3B1NXdkdF9kZXZpY2Uuc3RvcCk7CiAJY3B1NXdkdF9kZXZpY2UucXVldWUgPSAwOwogCiAJY2xlYXJfYml0KDAsICZjcHU1d2R0X2RldmljZS5pbnVzZSk7CkBAIC0yNjksNyArMjcwLDcgQEAKIHsKIAlpZiAoIGNwdTV3ZHRfZGV2aWNlLnF1ZXVlICkgewogCQljcHU1d2R0X2RldmljZS5xdWV1ZSA9IDA7Ci0JCWRvd24oJmNwdTV3ZHRfZGV2aWNlLnN0b3ApOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjcHU1d2R0X2RldmljZS5zdG9wKTsKIAl9CiAKIAltaXNjX2RlcmVnaXN0ZXIoJmNwdTV3ZHRfbWlzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwppbmRleCA3MTQwN2M1Li42NDgxOWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKQEAgLTk5LDkgKzk5LDYgQEAKIAlyZXR1cm4geCA+PiAobiA8PCAzKTsKIH0KIAotI2RlZmluZSB1aW50MzJfdF9pbih4KSBsZTMyX3RvX2NwdSgqKGNvbnN0IHVpbnQzMl90ICopKHgpKQotI2RlZmluZSB1aW50MzJfdF9vdXQodG8sIGZyb20pICgqKHVpbnQzMl90ICopKHRvKSA9IGNwdV90b19sZTMyKGZyb20pKQotCiAjZGVmaW5lIEVfS0VZIGN0eC0+RQogI2RlZmluZSBEX0tFWSBjdHgtPkQKIApAQCAtMjk0LDYgKzI5MSw3IEBACiBhZXNfc2V0X2tleSh2b2lkICpjdHhfYXJnLCBjb25zdCB1aW50OF90ICppbl9rZXksIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1aW50MzJfdCAqZmxhZ3MpCiB7CiAJc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoY3R4X2FyZyk7CisJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OwogCXVpbnQzMl90IGksIHQsIHUsIHYsIHc7CiAJdWludDMyX3QgUFtBRVNfRVhURU5ERURfS0VZX1NJWkVdOwogCXVpbnQzMl90IHJvdW5kczsKQEAgLTMxMywxMCArMzExLDEwIEBACiAJY3R4LT5FID0gY3R4LT5lX2RhdGE7CiAJY3R4LT5EID0gY3R4LT5lX2RhdGE7CiAKLQlFX0tFWVswXSA9IHVpbnQzMl90X2luIChpbl9rZXkpOwotCUVfS0VZWzFdID0gdWludDMyX3RfaW4gKGluX2tleSArIDQpOwotCUVfS0VZWzJdID0gdWludDMyX3RfaW4gKGluX2tleSArIDgpOwotCUVfS0VZWzNdID0gdWludDMyX3RfaW4gKGluX2tleSArIDEyKTsKKwlFX0tFWVswXSA9IGxlMzJfdG9fY3B1KGtleVswXSk7CisJRV9LRVlbMV0gPSBsZTMyX3RvX2NwdShrZXlbMV0pOworCUVfS0VZWzJdID0gbGUzMl90b19jcHUoa2V5WzJdKTsKKwlFX0tFWVszXSA9IGxlMzJfdG9fY3B1KGtleVszXSk7CiAKIAkvKiBQcmVwYXJlIGNvbnRyb2wgd29yZHMuICovCiAJbWVtc2V0KCZjdHgtPmN3b3JkLCAwLCBzaXplb2YoY3R4LT5jd29yZCkpOwpAQCAtMzQzLDE3ICszNDEsMTcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDI0OgotCQlFX0tFWVs0XSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyAxNik7Ci0JCXQgPSBFX0tFWVs1XSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyAyMCk7CisJCUVfS0VZWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKTsKKwkJdCA9IEVfS0VZWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKIAkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKIAkJCWxvb3A2IChpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDMyOgotCQlFX0tFWVs0XSA9IHVpbnQzMl90X2luIChpbl9rZXkgKyAxNik7Ci0JCUVfS0VZWzVdID0gdWludDMyX3RfaW4gKGluX2tleSArIDIwKTsKLQkJRV9LRVlbNl0gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgMjQpOwotCQl0ID0gRV9LRVlbN10gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgMjgpOworCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGluX2tleVs0XSk7CisJCUVfS0VZWzVdID0gbGUzMl90b19jcHUoaW5fa2V5WzVdKTsKKwkJRV9LRVlbNl0gPSBsZTMyX3RvX2NwdShpbl9rZXlbNl0pOworCQl0ID0gRV9LRVlbN10gPSBsZTMyX3RvX2NwdShpbl9rZXlbN10pOwogCQlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQogCQkJbG9vcDggKGkpOwogCQlicmVhazsKQEAgLTQ2OCw2ICs0NjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImFlcyIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJhZXMtcGFkbG9jayIsCisJLmNyYV9wcmlvcml0eQkJPQkzMDAsCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CUFFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGFlc19jdHgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay5oIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay5oCmluZGV4IDNjZjJiN2EuLmI3ODQ4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaAorKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLmgKQEAgLTE3LDcgKzE3LDcgQEAKIAogLyogQ29udHJvbCB3b3JkLiAqLwogc3RydWN0IGN3b3JkIHsKLQlpbnQgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorCXVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiAJCXJvdW5kczo0LAogCQlhbGdvOjMsCiAJCWtleWdlbjoxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCAxZGRhYTcxLi43Y2IyZDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtNjU1LDcgKzY1NSw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGNvbnRhaW5lcl9vZihkZXYsIGlkZV9od2lmX3QsIGdlbmRldik7CiAKLQl1cCgmaHdpZi0+Z2VuZGV2X3JlbF9zZW0pOworCWNvbXBsZXRlKCZod2lmLT5nZW5kZXZfcmVsX2NvbXApOwogfQogCiBzdGF0aWMgdm9pZCBod2lmX3JlZ2lzdGVyIChpZGVfaHdpZl90ICpod2lmKQpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAlkcml2ZS0+cXVldWUgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOwogCi0JdXAoJmRyaXZlLT5nZW5kZXZfcmVsX3NlbSk7CisJY29tcGxldGUoJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCBiMDY5YjEzLi5lYzVhNGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJaHdpZi0+bXdkbWFfbWFzayA9IDB4ODA7CS8qIGRpc2FibGUgYWxsIG13ZG1hICovCiAJaHdpZi0+c3dkbWFfbWFzayA9IDB4ODA7CS8qIGRpc2FibGUgYWxsIHN3ZG1hICovCiAKLQlzZW1hX2luaXQoJmh3aWYtPmdlbmRldl9yZWxfc2VtLCAwKTsKKwlpbml0X2NvbXBsZXRpb24oJmh3aWYtPmdlbmRldl9yZWxfY29tcCk7CiAKIAlkZWZhdWx0X2h3aWZfaW9wcyhod2lmKTsKIAlkZWZhdWx0X2h3aWZfdHJhbnNwb3J0KGh3aWYpOwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJCWRyaXZlLT5pc19mbGFzaAkJCT0gMDsKIAkJZHJpdmUtPnZkbWEJCQk9IDA7CiAJCUlOSVRfTElTVF9IRUFEKCZkcml2ZS0+bGlzdCk7Ci0JCXNlbWFfaW5pdCgmZHJpdmUtPmdlbmRldl9yZWxfc2VtLCAwKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKIAl9CiB9CiAKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOwogCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7Ci0JCWRvd24oJmRyaXZlLT5nZW5kZXZfcmVsX3NlbSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogCQlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CiAJfQogCWh3aWYtPnByZXNlbnQgPSAwOwpAQCAtNjYyLDcgKzY2Miw3IEBACiAJLyogTW9yZSBtZXNzZWQgdXAgbG9ja2luZyAuLi4gKi8KIAlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmaHdpZi0+Z2VuZGV2KTsKLQlkb3duKCZod2lmLT5nZW5kZXZfcmVsX3NlbSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaHdpZi0+Z2VuZGV2X3JlbF9jb21wKTsKIAogCS8qCiAJICogUmVtb3ZlIHVzIGZyb20gdGhlIGtlcm5lbCdzIGtub3dsZWRnZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2ExMTExcHMyLmMKaW5kZXggM2YwZGYzMy4uZWJkOTk3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2ExMTExLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCmluZGV4IDIwN2NhZTMuLjBhMzdhZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIHsKIAljaGFyIHNbMTBdOwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBjYXBpZnNfcm9vdDsKLQlkb3duKCZyb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGxvb2t1cF9vbmVfbGVuKHMsIHJvb3QsIHNwcmludGYocywgIiVkIiwgbnVtKSk7CiB9CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogCWRlbnRyeSA9IGdldF9ub2RlKG51bWJlcik7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSAmJiAhZGVudHJ5LT5kX2lub2RlKQogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCXVwKCZjYXBpZnNfcm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmY2FwaWZzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogfQogCiB2b2lkIGNhcGlmc19mcmVlX25jY2kodW5zaWduZWQgaW50IG51bWJlcikKQEAgLTE3NSw3ICsxNzUsNyBAQAogCQl9CiAJCWRwdXQoZGVudHJ5KTsKIAl9Ci0JdXAoJmNhcGlmc19yb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYXBpZnNfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGNhcGlmc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggOGQwOTU4Yy4uNGY1MGVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtNjMwLDEyICs2MzAsMTIgQEAKIAlzcHJpbnRmKG5vZGVuYW1lLCAiL3UzQDAsZjgwMDAwMDAvaTJjQGY4MDAxMDAwL2NwdWlkQGElZCIsIGNwdSA/IDIgOiAwKTsKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKG5vZGVuYW1lKTsKIAlpZiAobnAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInRoZXJtX3BtNzI6IEZhaWxlZCB0byByZXRyZWl2ZSBjcHVpZCBub2RlIGZyb20gZGV2aWNlLXRyZWVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInRoZXJtX3BtNzI6IEZhaWxlZCB0byByZXRyaWV2ZSBjcHVpZCBub2RlIGZyb20gZGV2aWNlLXRyZWVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZGF0YSA9ICh1OCAqKWdldF9wcm9wZXJ0eShucCwgImNwdWlkIiwgJmxlbik7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInRoZXJtX3BtNzI6IEZhaWxlZCB0byByZXRyZWl2ZSBjcHVpZCBwcm9wZXJ0eSBmcm9tIGRldmljZS10cmVlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0aGVybV9wbTcyOiBGYWlsZWQgdG8gcmV0cmlldmUgY3B1aWQgcHJvcGVydHkgZnJvbSBkZXZpY2UtdHJlZVxuIik7CiAJCW9mX25vZGVfcHV0KG5wKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jCmluZGV4IDgwZGRmOTcuLmViNjlhNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKQEAgLTI2LDcgKzI2LDcgQEAKICAqICAgICh0eXBpY2FsbHkgdGhlIGRyaXZlIGZhbikKICAqICAtIHRoZSBtYWluIGNvbnRyb2wgKGZpcnN0IGNvbnRyb2wpIGdldHMgdGhlIHRhcmdldCB2YWx1ZSBzY2FsZWQgd2l0aAogICogICAgdGhlIGZpcnN0IHBhaXIgb2YgZmFjdG9ycywgYW5kIGlzIHRoZW4gbW9kaWZpZWQgYXMgYmVsb3cKLSAqICAtIHRoZSB2YWx1ZSBvZiB0aGUgdGFyZ2V0IG9mIHRoZSBDUFUgRmFuIGNvbnRyb2wgbG9vcCBpcyByZXRyZWl2ZWQsCisgKiAgLSB0aGUgdmFsdWUgb2YgdGhlIHRhcmdldCBvZiB0aGUgQ1BVIEZhbiBjb250cm9sIGxvb3AgaXMgcmV0cmlldmVkLAogICogICAgc2NhbGVkIHdpdGggdGhlIHNlY29uZCBwYWlyIG9mIGZhY3RvcnMsIGFuZCB0aGUgbWF4IG9mIHRoYXQgYW5kCiAgKiAgICB0aGUgc2NhbGVkIHRhcmdldCBpcyBhcHBsaWVkIHRvIHRoZSBtYWluIGNvbnRyb2wuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDBlNDgxNTEuLjVjMjEwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTgzNyw5ICs4MzcsOSBAQAogewogCXNldF9jYXBhY2l0eShtZC0+ZGlzaywgc2l6ZSk7CiAKLQlkb3duKCZtZC0+c3VzcGVuZGVkX2JkZXYtPmJkX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRlZF9iZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CiAJaV9zaXplX3dyaXRlKG1kLT5zdXNwZW5kZWRfYmRldi0+YmRfaW5vZGUsIChsb2ZmX3Qpc2l6ZSA8PCBTRUNUT1JfU0hJRlQpOwotCXVwKCZtZC0+c3VzcGVuZGVkX2JkZXYtPmJkX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtZC0+c3VzcGVuZGVkX2JkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKIH0KIAogc3RhdGljIGludCBfX2JpbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgZG1fdGFibGUgKnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggZTQyM2ExNi4uMDMwMjcyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTM0NjAsOSArMzQ2MCw5IEBACiAKIAkJYmRldiA9IGJkZ2V0X2Rpc2sobWRkZXYtPmdlbmRpc2ssIDApOwogCQlpZiAoYmRldikgewotCQkJZG93bigmYmRldi0+YmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKIAkJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgbWRkZXYtPmFycmF5X3NpemUgPDwgMTApOwotCQkJdXAoJmJkZXYtPmJkX2lub2RlLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKIAkJCWJkcHV0KGJkZXYpOwogCQl9CiAJfQpAQCAtMzQ4Niw5ICszNDg2LDkgQEAKIAogCQliZGV2ID0gYmRnZXRfZGlzayhtZGRldi0+Z2VuZGlzaywgMCk7CiAJCWlmIChiZGV2KSB7Ci0JCQlkb3duKCZiZGV2LT5iZF9pbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBtZGRldi0+YXJyYXlfc2l6ZSA8PCAxMCk7Ci0JCQl1cCgmYmRldi0+YmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJYmRwdXQoYmRldik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCmluZGV4IDA5ZWM5NjQuLmI2MTQ2MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCkBAIC0yNTMsNyArMjUzLDEwIEBACiAKIAlpZiggZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewogCQlERUJfUygoImluaXRpYWxpemluZyB2YmkuLi5cbiIpKTsKLQkJcmVzdWx0ID0gc2FhNzE0Nl92YmlfdW9wcy5vcGVuKGRldixmaWxlKTsKKwkJaWYgKGRldi0+ZXh0X3Z2X2RhdGEtPmNhcGFiaWxpdGllcyAmIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFKQorCQkJcmVzdWx0ID0gc2FhNzE0Nl92YmlfdW9wcy5vcGVuKGRldixmaWxlKTsKKwkJaWYgKGRldi0+ZXh0X3Z2X2RhdGEtPnZiaV9mb3BzLm9wZW4pCisJCQlkZXYtPmV4dF92dl9kYXRhLT52YmlfZm9wcy5vcGVuKGlub2RlLCBmaWxlKTsKIAl9IGVsc2UgewogCQlERUJfUygoImluaXRpYWxpemluZyB2aWRlby4uLlxuIikpOwogCQlyZXN1bHQgPSBzYWE3MTQ2X3ZpZGVvX3VvcHMub3BlbihkZXYsZmlsZSk7CkBAIC0yODksNyArMjkyLDEwIEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiggZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQlzYWE3MTQ2X3ZiaV91b3BzLnJlbGVhc2UoZGV2LGZpbGUpOworCQlpZiAoZGV2LT5leHRfdnZfZGF0YS0+Y2FwYWJpbGl0aWVzICYgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCisJCQlzYWE3MTQ2X3ZiaV91b3BzLnJlbGVhc2UoZGV2LGZpbGUpOworCQlpZiAoZGV2LT5leHRfdnZfZGF0YS0+dmJpX2ZvcHMucmVsZWFzZSkKKwkJCWRldi0+ZXh0X3Z2X2RhdGEtPnZiaV9mb3BzLnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCX0gZWxzZSB7CiAJCXNhYTcxNDZfdmlkZW9fdW9wcy5yZWxlYXNlKGRldixmaWxlKTsKIAl9CkBAIC0zMzIsNiArMzM4LDcgQEAKIAkJQlVHKCk7CiAJCXJldHVybiAwOwogCX0KKwogCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcihxLHZtYSk7CiB9CiAKQEAgLTM4MSw3ICszODgsMTAgQEAKIAkJfQogCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTogewogLy8JCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6IGZpbGU6JXAsIGRhdGE6JXAsIGNvdW50OiVsdVxuIiwgZmlsZSwgZGF0YSwgKHVuc2lnbmVkIGxvbmcpY291bnQpKTsKLQkJcmV0dXJuIHNhYTcxNDZfdmJpX3VvcHMucmVhZChmaWxlLGRhdGEsY291bnQscHBvcyk7CisJCWlmIChmaC0+ZGV2LT5leHRfdnZfZGF0YS0+Y2FwYWJpbGl0aWVzICYgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCisJCQlyZXR1cm4gc2FhNzE0Nl92YmlfdW9wcy5yZWFkKGZpbGUsZGF0YSxjb3VudCxwcG9zKTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTM5MCwxMiArNDAwLDMxIEBACiAJfQogfQogCitzdGF0aWMgc3NpemVfdCBmb3BzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJCWlmIChmaC0+ZGV2LT5leHRfdnZfZGF0YS0+dmJpX2ZvcHMud3JpdGUpCisJCQlyZXR1cm4gZmgtPmRldi0+ZXh0X3Z2X2RhdGEtPnZiaV9mb3BzLndyaXRlKGZpbGUsIGRhdGEsIGNvdW50LCBwcG9zKTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGZvcHNfb3BlbiwKIAkucmVsZWFzZQk9IGZvcHNfcmVsZWFzZSwKIAkucmVhZAkJPSBmb3BzX3JlYWQsCisJLndyaXRlCQk9IGZvcHNfd3JpdGUsCiAJLnBvbGwJCT0gZm9wc19wb2xsLAogCS5tbWFwCQk9IGZvcHNfbW1hcCwKIAkuaW9jdGwJCT0gZm9wc19pb2N0bCwKQEAgLTQ2Nyw3ICs0OTYsOCBAQAogCW1lbXNldCh2di0+ZF9jbGlwcGluZy5jcHVfYWRkciwgMHgwLCBTQUE3MTQ2X0NMSVBQSU5HX01FTSk7CiAKIAlzYWE3MTQ2X3ZpZGVvX3VvcHMuaW5pdChkZXYsdnYpOwotCXNhYTcxNDZfdmJpX3VvcHMuaW5pdChkZXYsdnYpOworCWlmIChkZXYtPmV4dF92dl9kYXRhLT5jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9WQklfQ0FQVFVSRSkKKwkJc2FhNzE0Nl92YmlfdW9wcy5pbml0KGRldix2dik7CiAKIAlkZXYtPnZ2X2RhdGEgPSB2djsKIAlkZXYtPnZ2X2NhbGxiYWNrID0gJnZ2X2NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9obHAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaGxwLmMKaW5kZXggZWM1MmRmZi4uMzNiZWM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9obHAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2hscC5jCkBAIC01NjIsMTkgKzU2MiwyNiBAQAogCiAJaW50IGJfZGVwdGggPSB2di0+b3ZfZm10LT5kZXB0aDsKIAlpbnQgYl9icGwgPSB2di0+b3ZfZmIuZm10LmJ5dGVzcGVybGluZTsKLQl1MzIgYmFzZSA9ICh1MzIpdnYtPm92X2ZiLmJhc2U7CisJLyogVGhlIHVuc2lnbmVkIGxvbmcgY2FzdCBpcyB0byByZW1vdmUgYSA2NC1iaXQgY29tcGlsZSB3YXJuaW5nIHNpbmNlCisJICAgaXQgbG9va3MgbGlrZSBhIDY0LWJpdCBhZGRyZXNzIGlzIGNhc3QgdG8gYSAzMi1iaXQgdmFsdWUsIGV2ZW4KKwkgICB0aG91Z2ggdGhlIGJhc2UgcG9pbnRlciBpcyByZWFsbHkgYSAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyB0aGF0CisJICAgZ29lcyBpbnRvIGEgMzItYml0IERNQSByZWdpc3Rlci4KKwkgICBGSVhNRTogbWlnaHQgbm90IHdvcmsgb24gc29tZSA2NC1iaXQgcGxhdGZvcm1zLCBidXQgc2VlIHRoZSBGSVhNRQorCSAgIGluIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICh2aWRlb2RldjIuaCkgZm9yIHRoYXQuCisJICovCisJdTMyIGJhc2UgPSAodTMyKSh1bnNpZ25lZCBsb25nKXZ2LT5vdl9mYi5iYXNlOwogCiAJc3RydWN0CXNhYTcxNDZfdmlkZW9fZG1hIHZkbWExOwogCiAJLyogY2FsY3VsYXRlIG1lbW9yeSBvZmZzZXRzIGZvciBwaWN0dXJlLCBsb29rIGlmIHdlIHNoYWxsIHRvcC1kb3duLWZsaXAgKi8KIAl2ZG1hMS5waXRjaAk9IDIqYl9icGw7CiAJaWYgKCAwID09IHZ2LT52ZmxpcCApIHsKLQkJdmRtYTEuYmFzZV9ldmVuID0gKHUzMiliYXNlICsgKHdfeSAqICh2ZG1hMS5waXRjaC8yKSkgKyAod194ICogKGJfZGVwdGggLyA4KSk7CisJCXZkbWExLmJhc2VfZXZlbiA9IGJhc2UgKyAod195ICogKHZkbWExLnBpdGNoLzIpKSArICh3X3ggKiAoYl9kZXB0aCAvIDgpKTsKIAkJdmRtYTEuYmFzZV9vZGQgID0gdmRtYTEuYmFzZV9ldmVuICsgKHZkbWExLnBpdGNoIC8gMik7CiAJCXZkbWExLnByb3RfYWRkciA9IHZkbWExLmJhc2VfZXZlbiArICh3X2hlaWdodCAqICh2ZG1hMS5waXRjaCAvIDIpKTsKIAl9CiAJZWxzZSB7Ci0JCXZkbWExLmJhc2VfZXZlbiA9ICh1MzIpYmFzZSArICgod195K3dfaGVpZ2h0KSAqICh2ZG1hMS5waXRjaC8yKSkgKyAod194ICogKGJfZGVwdGggLyA4KSk7CisJCXZkbWExLmJhc2VfZXZlbiA9IGJhc2UgKyAoKHdfeSt3X2hlaWdodCkgKiAodmRtYTEucGl0Y2gvMikpICsgKHdfeCAqIChiX2RlcHRoIC8gOCkpOwogCQl2ZG1hMS5iYXNlX29kZCAgPSB2ZG1hMS5iYXNlX2V2ZW4gLSAodmRtYTEucGl0Y2ggLyAyKTsKIAkJdmRtYTEucHJvdF9hZGRyID0gdmRtYTEuYmFzZV9vZGQgLSAod19oZWlnaHQgKiAodmRtYTEucGl0Y2ggLyAyKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92YmkuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmJpLmMKaW5kZXggMDYzOTg2ZS4uNDY4ZDNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92YmkuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jCkBAIC01MDAsOSArNTAwLDkgQEAKIH0KIAogc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZiaV91b3BzID0gewotCS5pbml0IAkJPSB2YmlfaW5pdCwKLQkub3BlbiAJCT0gdmJpX29wZW4sCisJLmluaXQJCT0gdmJpX2luaXQsCisJLm9wZW4JCT0gdmJpX29wZW4sCiAJLnJlbGVhc2UJPSB2YmlfY2xvc2UsCiAJLmlycV9kb25lCT0gdmJpX2lycV9kb25lLAotCS5yZWFkIAkJPSB2YmlfcmVhZCwKKwkucmVhZAkJPSB2YmlfcmVhZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKaW5kZXggMWQ5NjEwMi4uN2ViYWM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwpAQCAtMTUxLDggKzE1MSw4IEBACiAKIAlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKIAkJZmllbGQgPSAod2luLT53LmhlaWdodCA+IG1heGgvMikKLQkJICAgICAgICA/IFY0TDJfRklFTERfSU5URVJMQUNFRAotCQkgICAgICAgIDogVjRMMl9GSUVMRF9UT1A7CisJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAorCQkJOiBWNEwyX0ZJRUxEX1RPUDsKIAkJfQogCXN3aXRjaCAoZmllbGQpIHsKIAljYXNlIFY0TDJfRklFTERfVE9QOgpAQCAtMTExNCwxMCArMTExNCw2IEBACiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ19PVkVSTEFZOgotCi0KLQotCiAJewogCQlpbnQgb24gPSAqKGludCAqKWFyZzsKIAkJaW50IGVyciA9IDA7CkBAIC0xMzU5LDcgKzEzNTUsNiBAQAogCXNhYTcxNDZfYnVmZmVyX3F1ZXVlKGZoLT5kZXYsJnZ2LT52aWRlb19xLGJ1Zik7CiB9CiAKLQogc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHEtPnByaXZfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKaW5kZXggMjFhOTA0NS4uMGI5NDBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogfQogCiBzdGF0aWMgaW50IGxnZHQzMzAzX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCSAgICAgICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQorCQkJICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQogewogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmZS0+ZHZiLT5wcml2OwogCXU4IGJ1Zls0XTsKQEAgLTQ4NSwxMiArNDg1LDE2IEBACiAvKiB0cnkgdG8gZmlndXJlIG91dCB0aGUgZnJvbnRlbmQsIGVhY2ggY2FyZC9ib3ggY2FuIGhhdmUgb24gb2YgdGhlIGZvbGxvd2luZyBsaXN0ICovCiBpbnQgZmxleGNvcF9mcm9udGVuZF9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgKm9wczsKKwogCS8qIHRyeSB0aGUgc2t5IHYyLjYgKHN0djAyOTkvU2Ftc3VuZyB0Ym11MjQxMTIoc2wxOTM1KSkgKi8KIAlpZiAoKGZjLT5mZSA9IHN0djAyOTlfYXR0YWNoKCZzYW1zdW5nX3RibXUyNDExMl9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7Ci0JCWZjLT5mZS0+b3BzLT5zZXRfdm9sdGFnZSA9IGZsZXhjb3Bfc2V0X3ZvbHRhZ2U7CisJCW9wcyA9IGZjLT5mZS0+b3BzOwogCi0JCWZjLT5mZV9zbGVlcCAgICAgICAgICAgICA9IGZjLT5mZS0+b3BzLT5zbGVlcDsKLQkJZmMtPmZlLT5vcHMtPnNsZWVwICAgICAgID0gZmxleGNvcF9zbGVlcDsKKwkJb3BzLT5zZXRfdm9sdGFnZSA9IGZsZXhjb3Bfc2V0X3ZvbHRhZ2U7CisKKwkJZmMtPmZlX3NsZWVwICAgICAgICAgICAgID0gb3BzLT5zbGVlcDsKKwkJb3BzLT5zbGVlcCAgICAgICAgICAgICAgID0gZmxleGNvcF9zbGVlcDsKIAogCQlmYy0+ZGV2X3R5cGUgICAgICAgICAgPSBGQ19TS1k7CiAJCWluZm8oImZvdW5kIHRoZSBzdHYwMjk5IGF0IGkyYyBhZGRyZXNzOiAweCUwMngiLHNhbXN1bmdfdGJtdTI0MTEyX2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKQEAgLTUyMiwxNSArNTI2LDE3IEBACiAJfSBlbHNlCiAJLyogdHJ5IHRoZSBza3kgdjIuMyAodnAzMTAvU2Ftc3VuZyB0YmR1MTgxMzIodHNhNTA1OSkpICovCiAJaWYgKChmYy0+ZmUgPSB2cDMxMF9hdHRhY2goJnNreXN0YXIyM19zYW1zdW5nX3RiZHUxODEzMl9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7Ci0JCWZjLT5mZS0+b3BzLT5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gZmxleGNvcF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwotCQlmYy0+ZmUtPm9wcy0+ZGlzZXFjX3NlbmRfYnVyc3QgICAgICA9IGZsZXhjb3BfZGlzZXFjX3NlbmRfYnVyc3Q7Ci0JCWZjLT5mZS0+b3BzLT5zZXRfdG9uZSAgICAgICAgICAgICAgID0gZmxleGNvcF9zZXRfdG9uZTsKLQkJZmMtPmZlLT5vcHMtPnNldF92b2x0YWdlICAgICAgICAgICAgPSBmbGV4Y29wX3NldF92b2x0YWdlOworCQlvcHMgPSBmYy0+ZmUtPm9wczsKIAotCQlmYy0+ZmVfc2xlZXAgICAgICAgICAgICAgICAgICAgICAgICA9IGZjLT5mZS0+b3BzLT5zbGVlcDsKLQkJZmMtPmZlLT5vcHMtPnNsZWVwICAgICAgICAgICAgICAgICAgPSBmbGV4Y29wX3NsZWVwOworCQlvcHMtPmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBmbGV4Y29wX2Rpc2VxY19zZW5kX21hc3Rlcl9jbWQ7CisJCW9wcy0+ZGlzZXFjX3NlbmRfYnVyc3QgICAgICA9IGZsZXhjb3BfZGlzZXFjX3NlbmRfYnVyc3Q7CisJCW9wcy0+c2V0X3RvbmUgICAgICAgICAgICAgICA9IGZsZXhjb3Bfc2V0X3RvbmU7CisJCW9wcy0+c2V0X3ZvbHRhZ2UgICAgICAgICAgICA9IGZsZXhjb3Bfc2V0X3ZvbHRhZ2U7CiAKLQkJZmMtPmRldl90eXBlICAgICAgICAgICAgICAgICAgICAgICAgPSBGQ19TS1lfT0xEOworCQlmYy0+ZmVfc2xlZXAgICAgICAgICAgICAgICAgPSBvcHMtPnNsZWVwOworCQlvcHMtPnNsZWVwICAgICAgICAgICAgICAgICAgPSBmbGV4Y29wX3NsZWVwOworCisJCWZjLT5kZXZfdHlwZSAgICAgICAgICAgICAgICA9IEZDX1NLWV9PTEQ7CiAJCWluZm8oImZvdW5kIHRoZSB2cDMxMCAoYWthIG10MzEyKSBhdCBpMmMgYWRkcmVzczogMHglMDJ4Iixza3lzdGFyMjNfc2Ftc3VuZ190YmR1MTgxMzJfY29uZmlnLmRlbW9kX2FkZHJlc3MpOwogCX0KIApAQCAtNTQwLDggKzU0Niw5IEBACiAJfSBlbHNlIHsKIAkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZmMtPmR2Yl9hZGFwdGVyLCBmYy0+ZmUpKSB7CiAJCQllcnIoImZyb250ZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQhIik7Ci0JCQlpZiAoZmMtPmZlLT5vcHMtPnJlbGVhc2UgIT0gTlVMTCkKLQkJCQlmYy0+ZmUtPm9wcy0+cmVsZWFzZShmYy0+ZmUpOworCQkJb3BzID0gZmMtPmZlLT5vcHM7CisJCQlpZiAob3BzLT5yZWxlYXNlICE9IE5VTEwpCisJCQkJb3BzLT5yZWxlYXNlKGZjLT5mZSk7CiAJCQlmYy0+ZmUgPSBOVUxMOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAppbmRleCAyM2NjNjQzLi4zMTUzZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCkBAIC0zOSwxMSArMzksMTMgQEAKIC8qIEZsZXhDb3AgSUJJIFJlZ2lzdGVycyAqLwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9sZS5oIgotI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZWxzZQorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9iZS5oIgogI2Vsc2UKIAkjZXJyb3Igbm8gZW5kaWFuIGRlZmluZWQKICNlbmRpZgorI2VuZGlmCiAKICNkZWZpbmUgZmNfZGF0YV9UYWdfSURfRFZCICAweDNlCiAjZGVmaW5lIGZjX2RhdGFfVGFnX0lEX0FUU0MgMHgzZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCA4OTc3YzdhLi4zYTJmZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMTM0MSwzMCArMTM0MSw0MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRzdF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgZHN0X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCSAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHAsCisJCQkgICAgdW5zaWduZWQgaW50IG1vZGVfZmxhZ3MsCisJCQkgICAgaW50ICpkZWxheSwKKwkJCSAgICBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQlkc3Rfc2V0X2ZyZXEoc3RhdGUsIHAtPmZyZXF1ZW5jeSk7Ci0JZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJTZXQgRnJlcXVlbmN5PVslZF0iLCBwLT5mcmVxdWVuY3kpOworCWlmIChwICE9IE5VTEwpIHsKKwkJZHN0X3NldF9mcmVxKHN0YXRlLCBwLT5mcmVxdWVuY3kpOworCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIlNldCBGcmVxdWVuY3k9WyVkXSIsIHAtPmZyZXF1ZW5jeSk7CiAKLQlpZiAoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX1NBVCkgewotCQlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfT0JTX1JFR1MpCi0JCQlkc3Rfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKLQkJZHN0X3NldF9mZWMoc3RhdGUsIHAtPnUucXBzay5mZWNfaW5uZXIpOwotCQlkc3Rfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIHAtPnUucXBzay5zeW1ib2xfcmF0ZSk7Ci0JCWRzdF9zZXRfcG9sYXJpemF0aW9uKHN0YXRlKTsKLQkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJTZXQgU3ltYm9scmF0ZT1bJWRdIiwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKKwkJaWYgKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19TQVQpIHsKKwkJCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19PQlNfUkVHUykKKwkJCQlkc3Rfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKKwkJCWRzdF9zZXRfZmVjKHN0YXRlLCBwLT51LnFwc2suZmVjX2lubmVyKTsKKwkJCWRzdF9zZXRfc3ltYm9scmF0ZShzdGF0ZSwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKKwkJCWRzdF9zZXRfcG9sYXJpemF0aW9uKHN0YXRlKTsKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0RFQlVHLCAxLCAiU2V0IFN5bWJvbHJhdGU9WyVkXSIsIHAtPnUucXBzay5zeW1ib2xfcmF0ZSk7CiAKLQl9IGVsc2UgaWYgKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19URVJSKQotCQlkc3Rfc2V0X2JhbmR3aWR0aChzdGF0ZSwgcC0+dS5vZmRtLmJhbmR3aWR0aCk7Ci0JZWxzZSBpZiAoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0NBQkxFKSB7Ci0JCWRzdF9zZXRfZmVjKHN0YXRlLCBwLT51LnFhbS5mZWNfaW5uZXIpOwotCQlkc3Rfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIHAtPnUucWFtLnN5bWJvbF9yYXRlKTsKLQkJZHN0X3NldF9tb2R1bGF0aW9uKHN0YXRlLCBwLT51LnFhbS5tb2R1bGF0aW9uKTsKKwkJfSBlbHNlIGlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfVEVSUikKKwkJCWRzdF9zZXRfYmFuZHdpZHRoKHN0YXRlLCBwLT51Lm9mZG0uYmFuZHdpZHRoKTsKKwkJZWxzZSBpZiAoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0NBQkxFKSB7CisJCQlkc3Rfc2V0X2ZlYyhzdGF0ZSwgcC0+dS5xYW0uZmVjX2lubmVyKTsKKwkJCWRzdF9zZXRfc3ltYm9scmF0ZShzdGF0ZSwgcC0+dS5xYW0uc3ltYm9sX3JhdGUpOworCQkJZHN0X3NldF9tb2R1bGF0aW9uKHN0YXRlLCBwLT51LnFhbS5tb2R1bGF0aW9uKTsKKwkJfQorCQlkc3Rfd3JpdGVfdHVuYShmZSk7CiAJfQotCWRzdF93cml0ZV90dW5hKGZlKTsKIAorCWlmICghKG1vZGVfZmxhZ3MgJiBGRV9UVU5FX01PREVfT05FU0hPVCkpCisJCWRzdF9yZWFkX3N0YXR1cyhmZSwgc3RhdHVzKTsKKworCSpkZWxheSA9IEhaLzEwOwogCXJldHVybiAwOwogfQogCkBAIC0xNDQ1LDcgKzE0NTUsNyBAQAogCiAJLnJlbGVhc2UgPSBkc3RfcmVsZWFzZSwKIAkuaW5pdCA9IGRzdF9pbml0LAotCS5zZXRfZnJvbnRlbmQgPSBkc3Rfc2V0X2Zyb250ZW5kLAorCS50dW5lID0gZHN0X3NldF9mcm9udGVuZCwKIAkuZ2V0X2Zyb250ZW5kID0gZHN0X2dldF9mcm9udGVuZCwKIAkucmVhZF9zdGF0dXMgPSBkc3RfcmVhZF9zdGF0dXMsCiAJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gZHN0X3JlYWRfc2lnbmFsX3N0cmVuZ3RoLApAQCAtMTQ2OSw3ICsxNDc5LDcgQEAKIAogCS5yZWxlYXNlID0gZHN0X3JlbGVhc2UsCiAJLmluaXQgPSBkc3RfaW5pdCwKLQkuc2V0X2Zyb250ZW5kID0gZHN0X3NldF9mcm9udGVuZCwKKwkudHVuZSA9IGRzdF9zZXRfZnJvbnRlbmQsCiAJLmdldF9mcm9udGVuZCA9IGRzdF9nZXRfZnJvbnRlbmQsCiAJLnJlYWRfc3RhdHVzID0gZHN0X3JlYWRfc3RhdHVzLAogCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGRzdF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKQEAgLTE0OTYsNyArMTUwNiw3IEBACiAKIAkucmVsZWFzZSA9IGRzdF9yZWxlYXNlLAogCS5pbml0ID0gZHN0X2luaXQsCi0JLnNldF9mcm9udGVuZCA9IGRzdF9zZXRfZnJvbnRlbmQsCisJLnR1bmUgPSBkc3Rfc2V0X2Zyb250ZW5kLAogCS5nZXRfZnJvbnRlbmQgPSBkc3RfZ2V0X2Zyb250ZW5kLAogCS5yZWFkX3N0YXR1cyA9IGRzdF9yZWFkX3N0YXR1cywKIAkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBkc3RfcmVhZF9zaWduYWxfc3RyZW5ndGgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCmluZGV4IDIyMzk2NTEuLmM2NTBiNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCkBAIC0yODMsMTYgKzI4MywxNyBAQAogCQlod19idWZmZXItPm1zZ1s0XSA9IDB4MDM7CiAJCWh3X2J1ZmZlci0+bXNnWzVdID0gbGVuZ3RoICYgMHhmZjsKIAkJaHdfYnVmZmVyLT5tc2dbNl0gPSAweDAwOworCiAJCS8qCiAJCSAqCU5lZWQgdG8gY29tcHV0ZSBsZW5ndGggZm9yIEVONTAyMjEgc2VjdGlvbiA4LjMuMiwgZm9yIHRoZSB0aW1lIGJlaW5nCiAJCSAqCWFzc3VtaW5nIDguMy4yIGlzIG5vdCBhcHBsaWNhYmxlCiAJCSAqLwogCQltZW1jcHkoJmh3X2J1ZmZlci0+bXNnWzddLCAmcF9jYV9tZXNzYWdlLT5tc2dbNF0sIGxlbmd0aCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCB3cml0ZV90b184ODIwKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfbXNnICpod19idWZmZXIsIHU4IGxlbmd0aCwgdTggcmVwbHkpCiB7CiAJaWYgKChkc3RfcHV0X2NpKHN0YXRlLCBod19idWZmZXItPm1zZywgbGVuZ3RoLCBod19idWZmZXItPm1zZywgcmVwbHkpKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggNzc5NzdlOS4uMDFiNGUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTYwMCw3ICs2MDAsNiBAQAogCXN0cnVjdCBkc3Rfc3RhdGUqIHN0YXRlID0gTlVMTDsKIAogCXN3aXRjaCh0eXBlKSB7Ci0jaWZkZWYgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEUKIAljYXNlIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFOgogCQljYXJkLT5mZSA9IG10MzUyX2F0dGFjaCgmdGhvbXNvbl9kdHQ3NTc5X2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlpZiAoY2FyZC0+ZmUgIT0gTlVMTCkgewpAQCAtNjA4LDIyICs2MDcsMTUgQEAKIAkJCWNhcmQtPmZlLT5vcHMtPmluZm8uZnJlcXVlbmN5X21heCA9IDg2MjAwMDAwMDsKIAkJfQogCQlicmVhazsKLSNlbmRpZgogCi0jaWZkZWYgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURQogCWNhc2UgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURToKIAkJbGdkdDMzMHhfcmVzZXQoY2FyZCk7CiAJCWNhcmQtPmZlID0gbGdkdDMzMHhfYXR0YWNoKCZ0ZHZzX3R1YTYwMzRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKQogCQkJZHByaW50ayAoImR2Yl9idDh4eDogbGdkdDMzMHggZGV0ZWN0ZWRcbiIpOwogCQlicmVhazsKLSNlbmRpZgogCi0jaWZkZWYgQlRUVl9CT0FSRF9UV0lOSEFOX1ZQMzAyMQotCWNhc2UgQlRUVl9CT0FSRF9UV0lOSEFOX1ZQMzAyMToKLSNlbHNlCiAJY2FzZSBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFY6Ci0jZW5kaWYKIAkJLyoKIAkJICogSXQgaXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZyb250ZW5kIHVzaW5nIHRoZSBJMkMgYnVzIChzZWUgdGhlIE5lYnVsYSBTREspOwogCQkgKiB0aGlzIHdvdWxkIGJlIGEgY2xlYW5lciBzb2x1dGlvbiB0aGFuIHRyeWluZyBlYWNoIGZyb250ZW5kIGluIHR1cm4uCkBAIC04MTIsOSArODA0LDcgQEAKIAkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSAwOwogCQlicmVhazsKIAotI2lmZGVmIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFCiAJY2FzZSBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURToKLSNlbmRpZgogCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDBDMDYwOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwogCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CkBAIC04MjMsMTkgKzgxMywxMyBAQAogCQkgKiBEQV9BUFAocGFyYWxsZWwpICovCiAJCWJyZWFrOwogCi0jaWZkZWYgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURQogCWNhc2UgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURToKLSNlbmRpZgogCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDBjMDYwOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSBCVDg3OF9SSVNDX1NZTkNfTUFTSzsKIAkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSBCVDg3OF9BRkJVUyB8IEJUODc4X0FGRFNSOwogCQlicmVhazsKIAotI2lmZGVmIEJUVFZfQk9BUkRfVFdJTkhBTl9WUDMwMjEKLQljYXNlIEJUVFZfQk9BUkRfVFdJTkhBTl9WUDMwMjE6Ci0jZWxzZQogCWNhc2UgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWOgotI2VuZGlmCiAJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6CiAJCWNhcmQtPmdwaW9fbW9kZSA9ICgxIDw8IDI2KSB8ICgxIDw8IDE0KSB8ICgxIDw8IDUpOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZwppbmRleCA3Y2Y0YzRhLi42MDE4ZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZwpAQCAtMjEsMzUgKzIxLDM1IEBACiBjb25maWcgRFZCX0NJTkVSR1lUMl9TVFJFQU1fVVJCX0NPVU5UCiAJaW50ICJOdW1iZXIgb2YgcXVldWVkIFVTQiBSZXF1ZXN0IEJsb2NrcyBmb3IgSGlnaHNwZWVkIFN0cmVhbSBUcmFuc2ZlcnMiCiAJZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyX1RVTklORwotICAgICAgICBkZWZhdWx0ICIzMiIKKwlkZWZhdWx0ICIzMiIKIAloZWxwCiAJICBVU0IgUmVxdWVzdCBCbG9ja3MgZm9yIEhpZ2hzcGVlZCBTdHJlYW0gdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQgaW4KIAkgIGEgcXVldWUgZm9yIHRoZSBIb3N0IENvbnRyb2xsZXIuCiAKIAkgIFVzdWFsbHkgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBzYWZlIGNob2ljZS4KIAotCSAgWW91IG1heSBpbmNyZWFzZSB0aGlzIG51bWJlciBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgZGV2aWNlIGluIGEgCi0JICBTZXJ2ZXIgRW52aXJvbm1lbnQgd2l0aCBtYW55IGhpZ2gtdHJhZmZpYyBVU0IgSGlnaHNwZWVkIGRldmljZXMgCisJICBZb3UgbWF5IGluY3JlYXNlIHRoaXMgbnVtYmVyIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBkZXZpY2UgaW4gYQorCSAgU2VydmVyIEVudmlyb25tZW50IHdpdGggbWFueSBoaWdoLXRyYWZmaWMgVVNCIEhpZ2hzcGVlZCBkZXZpY2VzCiAJICBzaGFyaW5nIHRoZSBzYW1lIFVTQiBidXMuCiAKIAogY29uZmlnIERWQl9DSU5FUkdZVDJfU1RSRUFNX0JVRl9TSVpFCiAJaW50ICJTaXplIG9mIFVSQiBTdHJlYW0gQnVmZmVycyBmb3IgSGlnaHNwZWVkIFRyYW5zZmVycyIKIAlkZXBlbmRzIG9uIERWQl9DSU5FUkdZVDJfVFVOSU5HCi0gICAgICAgIGRlZmF1bHQgIjUxMiIKKwlkZWZhdWx0ICI1MTIiCiAJaGVscAogCSAgU2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgbmF0aXZlIGJ1ZmZlciBzaXplIG9mIDUxMiBieXRlcy4KIAkgIERlZmF1bHQgdmFsdWUgaXMgYSBzYWZlIGNob2ljZS4KIAotCSAgWW91IG1heSBpbmNyZWFzZSB0aGlzIG51bWJlciBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgZGV2aWNlIGluIGEgCi0JICBTZXJ2ZXIgRW52aXJvbm1lbnQgd2l0aCBtYW55IGhpZ2gtdHJhZmZpYyBVU0IgSGlnaHNwZWVkIGRldmljZXMgCisJICBZb3UgbWF5IGluY3JlYXNlIHRoaXMgbnVtYmVyIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBkZXZpY2UgaW4gYQorCSAgU2VydmVyIEVudmlyb25tZW50IHdpdGggbWFueSBoaWdoLXRyYWZmaWMgVVNCIEhpZ2hzcGVlZCBkZXZpY2VzCiAJICBzaGFyaW5nIHRoZSBzYW1lIFVTQiBidXMuCiAKIAogY29uZmlnIERWQl9DSU5FUkdZVDJfUVVFUllfSU5URVJWQUwKIAlpbnQgIlN0YXR1cyB1cGRhdGUgaW50ZXJ2YWwgW21pbGxpc2Vjb25kc10iCiAJZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyX1RVTklORwotICAgICAgICBkZWZhdWx0ICIyNTAiCisJZGVmYXVsdCAiMjUwIgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGludGVydmFsIGZvciBzdGF0dXMgcmVhZG91dHMgZnJvbSB0aGUgZGVtb2R1bGF0b3IuCiAJICBZb3UgbWF5IHRyeSBsb3dlciB2YWx1ZXMgaWYgeW91IG5lZWQgbW9yZSByZXNwb25zaXZlIHNpZ25hbCBxdWFsaXR5CkBAIC02NCw5ICs2NCw5IEBACiBjb25maWcgRFZCX0NJTkVSR1lUMl9FTkFCTEVfUkNfSU5QVVRfREVWSUNFCiAJYm9vbCAiUmVnaXN0ZXIgdGhlIG9uYm9hcmQgSVIgUmVtb3RlIENvbnRyb2wgUmVjZWl2ZXIgYXMgSW5wdXQgRGV2aWNlIgogCWRlcGVuZHMgb24gRFZCX0NJTkVSR1lUMl9UVU5JTkcKLSAgICAgICAgZGVmYXVsdCAieWVzIgorCWRlZmF1bHQgInllcyIKIAloZWxwCi0JICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBvbmJvYXJkIEluZnJhcmVkIFJlbW90ZSAKKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uYm9hcmQgSW5mcmFyZWQgUmVtb3RlCiAJICBDb250cm9sIFJlY2VpdmVyIGFzIExpbnV4LUlucHV0IGRldmljZS4KIAogCSAgUmlnaHQgbm93IG9ubHkgdGhlIGtleWNvZGUgdGFibGUgZm9yIHRoZSBkZWZhdWx0IFJlbW90ZSBDb250cm9sCkBAIC03Nyw3ICs3Nyw3IEBACiBjb25maWcgRFZCX0NJTkVSR1lUMl9SQ19RVUVSWV9JTlRFUlZBTAogCWludCAiSW5mcmFyZWQgUmVtb3RlIENvbnRyb2xsZXIgdXBkYXRlIGludGVydmFsIFttaWxsaXNlY29uZHNdIgogCWRlcGVuZHMgb24gRFZCX0NJTkVSR1lUMl9UVU5JTkcgJiYgRFZCX0NJTkVSR1lUMl9FTkFCTEVfUkNfSU5QVVRfREVWSUNFCi0gICAgICAgIGRlZmF1bHQgIjUwIgorCWRlZmF1bHQgIjUwIgogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGEgdmVyeSBmYXN0LXJlcGVhdGluZyByZW1vdGUgY29udHJvbCB5b3UgY2FuIHRyeSBsb3dlcgogCSAgdmFsdWVzLCBmb3Igbm9ybWFsIGNvbnN1bWVyIHJlY2VpdmVycyB0aGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwppbmRleCAxZDY5YmYwLi5jNGI0YzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCkBAIC0xMzEsNiArMTMxLDggQEAKIAogCXdhaXRfcXVldWVfaGVhZF90IHBvbGxfd3E7CiAJaW50IHBlbmRpbmdfZmVfZXZlbnRzOworCWludCBkaXNjb25uZWN0X3BlbmRpbmc7CisJYXRvbWljX3QgaW51c2U7CiAKIAl2b2lkICpzdHJlYW1idWY7CiAJZG1hX2FkZHJfdCBzdHJlYW1idWZfZG1haGFuZGxlOwpAQCAtMzQzLDcgKzM0NSw3IEBACiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBkdmJkbXhmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkZW11eC0+cHJpdjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKKwlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoY2luZXJneXQyLT5zdHJlYW1pbmcgPT0gMCkKQEAgLTM1OSw3ICszNjEsNyBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZGVtdXgtPnByaXY7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKC0tY2luZXJneXQyLT5zdHJlYW1pbmcgPT0gMCkKQEAgLTQ3OSwyMyArNDgxLDM3IEBACiB7CiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkdmJkZXYtPnByaXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gLUVSRVNUQVJUU1lTOwogCi0JaWYgKChlcnIgPSBkdmJfZ2VuZXJpY19vcGVuKGlub2RlLCBmaWxlKSkpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJaWYgKChlcnIgPSBkdmJfZ2VuZXJpY19vcGVuKGlub2RlLCBmaWxlKSkpIHsKKwkJdXAoJmNpbmVyZ3l0Mi0+c2VtKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKIAkJY2luZXJneXQyX3NsZWVwKGNpbmVyZ3l0MiwgMCk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5xdWVyeV93b3JrLCBIWi8yKTsKIAl9CiAKKwlhdG9taWNfaW5jKCZjaW5lcmd5dDItPmludXNlKTsKKwogCXVwKCZjaW5lcmd5dDItPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGNpbmVyZ3l0Ml91bnJlZ2lzdGVyKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKK3sKKwlkdmJfdW5yZWdpc3Rlcl9kZXZpY2UoY2luZXJneXQyLT5mZWRldik7CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmY2luZXJneXQyLT5hZGFwdGVyKTsKKworCWNpbmVyZ3l0Ml9mcmVlX3N0cmVhbV91cmJzKGNpbmVyZ3l0Mik7CisJa2ZyZWUoY2luZXJneXQyKTsKK30KKwogc3RhdGljIGludCBjaW5lcmd5dDJfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTUwNCw3ICs1MjAsNyBAQAogCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKKwlpZiAoIWNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nICYmIChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkgewogCQljYW5jZWxfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnF1ZXJ5X3dvcmspOwogCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCQljaW5lcmd5dDJfc2xlZXAoY2luZXJneXQyLCAxKTsKQEAgLTUxMiw2ICs1MjgsMTEgQEAKIAogCXVwKCZjaW5lcmd5dDItPnNlbSk7CiAKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2luZXJneXQyLT5pbnVzZSkgJiYgY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcpIHsKKwkJd2FybigiZGVsYXllZCB1bnJlZ2lzdGVyIGluIHJlbGVhc2UiKTsKKwkJY2luZXJneXQyX3VucmVnaXN0ZXIoY2luZXJneXQyKTsKKwl9CisKIAlyZXR1cm4gZHZiX2dlbmVyaWNfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTUxOSw3ICs1NDAsMTQgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IGR2YmRldi0+cHJpdjsKKworCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwogCXBvbGxfd2FpdChmaWxlLCAmY2luZXJneXQyLT5wb2xsX3dxLCB3YWl0KTsKKworCXVwKCZjaW5lcmd5dDItPnNlbSk7CisKIAlyZXR1cm4gKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMUFJJKTsKIH0KIApAQCAtNTY0LDEwICs1OTIsMTUgQEAKIAkJCQkoX191MTYgX191c2VyICopIGFyZyk7CiAKIAljYXNlIEZFX1JFQURfVU5DT1JSRUNURURfQkxPQ0tTOgotCQkvKiBVTkMgYXJlIGFscmVhZHkgY29udmVydGVkIHRvIGhvc3QgYnl0ZSBvcmRlci4uLiAqLwotCQlyZXR1cm4gcHV0X3VzZXIoc3RhdC0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQsCi0JCQkJKF9fdTMyIF9fdXNlciAqKSBhcmcpOworCXsKKwkJdWludDMyX3QgdW5jX2NvdW50OwogCisJCXVuY19jb3VudCA9IHN0YXQtPnVuY29ycmVjdGVkX2Jsb2NrX2NvdW50OworCQlzdGF0LT51bmNvcnJlY3RlZF9ibG9ja19jb3VudCA9IDA7CisKKwkJLyogVU5DIGFyZSBhbHJlYWR5IGNvbnZlcnRlZCB0byBob3N0IGJ5dGUgb3JkZXIuLi4gKi8KKwkJcmV0dXJuIHB1dF91c2VyKHVuY19jb3VudCwoX191MzIgX191c2VyICopIGFyZyk7CisJfQogCWNhc2UgRkVfU0VUX0ZST05URU5EOgogCXsKIAkJc3RydWN0IGR2YnRfc2V0X3BhcmFtZXRlcnNfbXNnICpwYXJhbSA9ICZjaW5lcmd5dDItPnBhcmFtOwpAQCAtNTgwLDcgKzYxMyw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgKHZvaWQgIF9fdXNlciopIGFyZywgc2l6ZW9mKHApKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKKwkJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCQlwYXJhbS0+Y21kID0gQ0lORVJHWVQyX0VQMV9TRVRfVFVORVJfUEFSQU1FVEVSUzsKQEAgLTY5MSw3ICs3MjQsNyBAQAogCXN0cnVjdCBjaW5lcmd5dDJfcmNfZXZlbnQgcmNfZXZlbnRzWzEyXTsKIAlpbnQgbiwgbGVuLCBpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQorCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJcmV0dXJuOwogCiAJbGVuID0gY2luZXJneXQyX2NvbW1hbmQoY2luZXJneXQyLCBidWYsIHNpemVvZihidWYpLApAQCAtNzg2LDcgKzgxOSw2IEBACiBzdGF0aWMgdm9pZCBjaW5lcmd5dDJfdW5yZWdpc3Rlcl9yYyhzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpCiB7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5yY19xdWVyeV93b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2KTsKIH0KIApAQCAtODE3LDcgKzg0OSw3IEBACiAJdWludDhfdCBsb2NrX2JpdHM7CiAJdWludDMyX3QgdW5jOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQorCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJcmV0dXJuOwogCiAJdW5jID0gcy0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7CkBAIC05MTcsMjggKzk0OSwyNSBAQAogewogCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQotCQlyZXR1cm47CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCWNpbmVyZ3l0Ml91bnJlZ2lzdGVyX3JjKGNpbmVyZ3l0Mik7CiAKLQljaW5lcmd5dDItPmRlbXV4LmRteC5jbG9zZSgmY2luZXJneXQyLT5kZW11eC5kbXgpOwotCWR2Yl9uZXRfcmVsZWFzZSgmY2luZXJneXQyLT5kdmJuZXQpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmY2luZXJneXQyLT5kbXhkZXYpOwotCWR2Yl9kbXhfcmVsZWFzZSgmY2luZXJneXQyLT5kZW11eCk7Ci0JZHZiX3VucmVnaXN0ZXJfZGV2aWNlKGNpbmVyZ3l0Mi0+ZmVkZXYpOwotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlcik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5xdWVyeV93b3JrKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+cG9sbF93cSk7CiAKLQljaW5lcmd5dDJfZnJlZV9zdHJlYW1fdXJicyhjaW5lcmd5dDIpOwotCXVwKCZjaW5lcmd5dDItPnNlbSk7Ci0Ja2ZyZWUoY2luZXJneXQyKTsKKwljaW5lcmd5dDItPmRlbXV4LmRteC5jbG9zZSgmY2luZXJneXQyLT5kZW11eC5kbXgpOworCWNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nID0gMTsKKworCWlmICghYXRvbWljX3JlYWQoJmNpbmVyZ3l0Mi0+aW51c2UpKQorCQljaW5lcmd5dDJfdW5yZWdpc3RlcihjaW5lcmd5dDIpOwogfQogCiBzdGF0aWMgaW50IGNpbmVyZ3l0Ml9zdXNwZW5kIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQorCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChzdGF0ZS5ldmVudCA+IFBNX0VWRU5UX09OKSB7CkBAIC05NjEsNyArOTkwLDcgQEAKIAlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAlzdHJ1Y3QgZHZidF9zZXRfcGFyYW1ldGVyc19tc2cgKnBhcmFtID0gJmNpbmVyZ3l0Mi0+cGFyYW07CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCFjaW5lcmd5dDItPnNsZWVwaW5nKSB7CkBAIC0xMDE0LDQgKzEwNDMsMyBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJIb2xnZXIgV2FlY2h0bGVyLCBEYW5pZWwgTWFjayIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZwppbmRleCBhOWE3YjM0Li4xMmVlOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL0tjb25maWcKQEAgLTUsNyArNSw3IEBACiAJaGVscAogCSAgRFZCIGNvcmUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRldmljZSBoYW5kbGluZywgc29mdHdhcmUgZmFsbGJhY2tzIGV0Yy4KIAkgIFNheSBZIHdoZW4geW91IGhhdmUgYSBEVkIgY2FyZCBhbmQgd2FudCB0byB1c2UgaXQuIFNheSBZIGlmIHlvdXIgd2FudAotCSAgdG8gYnVpbGQgeW91ciBkcml2ZXJzIG91dHNpZGUgdGhlIGtlcm5lbCwgYnV0IG5lZWQgdGhlIERWQiBjb3JlLiBBbGwgCisJICB0byBidWlsZCB5b3VyIGRyaXZlcnMgb3V0c2lkZSB0aGUga2VybmVsLCBidXQgbmVlZCB0aGUgRFZCIGNvcmUuIEFsbAogCSAgaW4ta2VybmVsIGRyaXZlcnMgd2lsbCBzZWxlY3QgdGhpcyBhdXRvbWF0aWNhbGx5IGlmIG5lZWRlZC4KIAkgIElmIHVuc3VyZSBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9NYWtlZmlsZQppbmRleCBjNmJhYWMyLi43YWRiNTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogZHZiLWNvcmUtb2JqcyA9IGR2YmRldi5vIGRteGRldi5vIGR2Yl9kZW11eC5vIGR2Yl9maWx0ZXIubyBcCi0JICAgICAgICBkdmJfY2FfZW41MDIyMS5vIGR2Yl9mcm9udGVuZC5vIFwKKwkJZHZiX2NhX2VuNTAyMjEubyBkdmJfZnJvbnRlbmQubyBcCiAJCWR2Yl9uZXQubyBkdmJfcmluZ2J1ZmZlci5vCiAKIG9iai0kKENPTkZJR19EVkJfQ09SRSkgKz0gZHZiLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKaW5kZXggNTk1NmMzNS4uNGJiNzc5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCkBAIC0xNzQ1LDkgKzE3NDUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGNhLT5zbG90X2NvdW50OyBpKyspIHsKIAkJZHZiX2NhX2VuNTAyMjFfc2xvdF9zaHV0ZG93bihjYSwgaSk7Ci0JCWlmIChjYS0+c2xvdF9pbmZvW2ldLnJ4X2J1ZmZlci5kYXRhICE9IE5VTEwpIHsKLQkJCXZmcmVlKGNhLT5zbG90X2luZm9baV0ucnhfYnVmZmVyLmRhdGEpOwotCQl9CisJCXZmcmVlKGNhLT5zbG90X2luZm9baV0ucnhfYnVmZmVyLmRhdGEpOwogCX0KIAlrZnJlZShjYS0+c2xvdF9pbmZvKTsKIAlkdmJfdW5yZWdpc3Rlcl9kZXZpY2UoY2EtPmR2YmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZmlsdGVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZmlsdGVyLmMKaW5kZXggYzQ5ZmQwYi4uNzcyMDAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2ZpbHRlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9maWx0ZXIuYwpAQCAtNDA5LDE2ICs0MDksMTYgQEAKIAogCWlmICgoaW5idWZbNl0gJiAweGMwKSA9PSAweDgwKXsgLyogbXBlZzIgKi8KIAkJaWYgKGJ1Zls3XSAmIFBUU19PTkxZKQotCQkgICAgICAgIHB0cyA9IGJ1Zis5OworCQkJcHRzID0gYnVmKzk7CiAJCWVsc2UgcHRzID0gTlVMTDsKIAkJYnVmID0gaW5idWYgKyA5ICsgaW5idWZbOF07CiAJfSBlbHNlIHsgICAgICAgIC8qIG1wZWcxICovCiAJCWZvciAoYnVmID0gaW5idWYgKyA2OyAqYnVmID09IDB4ZmY7IGJ1ZisrKQotCQkgICAgICAgIGlmIChidWYgPT0gaW5idWYgKyA2ICsgMTYpIHsKLQkJICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgICAgICAgIH0KKwkJCWlmIChidWYgPT0gaW5idWYgKyA2ICsgMTYpIHsKKwkJCQlicmVhazsKKwkJCX0KIAkJaWYgKCgqYnVmICYgMHhjMCkgPT0gMHg0MCkKLQkJICAgICAgICBidWYgKz0gMjsKKwkJCWJ1ZiArPSAyOwogCQlza2lwID0gbXBlZzFfc2tpcF90YWJsZSBbKmJ1ZiA+PiA0XTsKIAkJaWYgKHNraXAgPT0gNSB8fCBza2lwID09IDEwKSBwdHMgPSBidWY7CiAJCWVsc2UgcHRzID0gTlVMTDsKQEAgLTUyOSw5ICs1MjksOSBAQAogCXBpYy0+cGljdHVyZV9oZWFkZXIgPSAwOwogCXBpYy0+c2VxdWVuY2VfaGVhZGVyX2RhdGEKIAkJPSAoIElOSVRfSE9SSVpPTlRBTF9TSVpFIDw8IDIwICkKLQkJICAgICAgICB8ICggSU5JVF9WRVJUSUNBTF9TSVpFIDw8IDggKQotCQkgICAgICAgIHwgKCBJTklUX0FTUEVDVF9SQVRJTyA8PCA0ICkKLQkJICAgICAgICB8ICggSU5JVF9GUkFNRV9SQVRFICk7CisJCQl8ICggSU5JVF9WRVJUSUNBTF9TSVpFIDw8IDggKQorCQkJfCAoIElOSVRfQVNQRUNUX1JBVElPIDw8IDQgKQorCQkJfCAoIElOSVRfRlJBTUVfUkFURSApOwogCXBpYy0+bXBlZzFfZmxhZyA9IDA7CiAJcGljLT52aW5mby5ob3Jpem9udGFsX3NpemUKIAkJPSBJTklUX0RJU1BfSE9SSVpPTlRBTF9TSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA5NWVhNTA5Li40YTA4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtOTIsNiArOTIsNyBAQAogCiBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgewogCisJLyogdGhyZWFkL2Zyb250ZW5kIHZhbHVlcyAqLwogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAJc3RydWN0IGR2Yl9mZV9ldmVudHMgZXZlbnRzOwpAQCAtMTAwLDIwICsxMDEsMjUgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwogCXBpZF90IHRocmVhZF9waWQ7CiAJdW5zaWduZWQgbG9uZyByZWxlYXNlX2ppZmZpZXM7Ci0JaW50IHN0YXRlOwotCWludCBiZW5kaW5nOwotCWludCBsbmJfZHJpZnQ7Ci0JaW50IGludmVyc2lvbjsKLQlpbnQgYXV0b19zdGVwOwotCWludCBhdXRvX3N1Yl9zdGVwOwotCWludCBzdGFydGVkX2F1dG9fc3RlcDsKLQlpbnQgbWluX2RlbGF5OwotCWludCBtYXhfZHJpZnQ7Ci0JaW50IHN0ZXBfc2l6ZTsKLQlpbnQgZXhpdDsKLQlpbnQgd2FrZXVwOworCXVuc2lnbmVkIGludCBleGl0OworCXVuc2lnbmVkIGludCB3YWtldXA7CiAJZmVfc3RhdHVzX3Qgc3RhdHVzOwotCWZlX3NlY190b25lX21vZGVfdCB0b25lOworCXVuc2lnbmVkIGxvbmcgdHVuZV9tb2RlX2ZsYWdzOworCXVuc2lnbmVkIGludCBkZWxheTsKKworCS8qIHN3emlnemFnIHZhbHVlcyAqLworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgYmVuZGluZzsKKwlpbnQgbG5iX2RyaWZ0OworCXVuc2lnbmVkIGludCBpbnZlcnNpb247CisJdW5zaWduZWQgaW50IGF1dG9fc3RlcDsKKwl1bnNpZ25lZCBpbnQgYXV0b19zdWJfc3RlcDsKKwl1bnNpZ25lZCBpbnQgc3RhcnRlZF9hdXRvX3N0ZXA7CisJdW5zaWduZWQgaW50IG1pbl9kZWxheTsKKwl1bnNpZ25lZCBpbnQgbWF4X2RyaWZ0OworCXVuc2lnbmVkIGludCBzdGVwX3NpemU7CisJaW50IHF1YWxpdHk7CisJdW5zaWduZWQgaW50IGNoZWNrX3dyYXBwZWQ7CiB9OwogCiAKQEAgLTIwOCwyMSArMjE0LDIxIEBACiAJCWZlLT5vcHMtPmluaXQoZmUpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfZGVsYXkoaW50ICpxdWFsaXR5LCBpbnQgKmRlbGF5LCBpbnQgbWluX2RlbGF5LCBpbnQgbG9ja2VkKQorc3RhdGljIHZvaWQgZHZiX2Zyb250ZW5kX3N3emlnemFnX3VwZGF0ZV9kZWxheShzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiwgaW50IGxvY2tlZCkKIHsKLQkgICAgaW50IHEyOworCWludCBxMjsKIAotCSAgICBkcHJpbnRrICgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JICAgIGlmIChsb2NrZWQpCi0JCSAgICAgICgqcXVhbGl0eSkgPSAoKnF1YWxpdHkgKiAyMjAgKyAzNioyNTYpIC8gMjU2OwotCSAgICBlbHNlCi0JCSAgICAgICgqcXVhbGl0eSkgPSAoKnF1YWxpdHkgKiAyMjAgKyAwKSAvIDI1NjsKKwlpZiAobG9ja2VkKQorCQkoZmVwcml2LT5xdWFsaXR5KSA9IChmZXByaXYtPnF1YWxpdHkgKiAyMjAgKyAzNioyNTYpIC8gMjU2OworCWVsc2UKKwkJKGZlcHJpdi0+cXVhbGl0eSkgPSAoZmVwcml2LT5xdWFsaXR5ICogMjIwICsgMCkgLyAyNTY7CiAKLQkgICAgcTIgPSAqcXVhbGl0eSAtIDEyODsKLQkgICAgcTIgKj0gcTI7CisJcTIgPSBmZXByaXYtPnF1YWxpdHkgLSAxMjg7CisJcTIgKj0gcTI7CiAKLQkgICAgKmRlbGF5ID0gbWluX2RlbGF5ICsgcTIgKiBIWiAvICgxMjgqMTI4KTsKKwlmZXByaXYtPmRlbGF5ID0gZmVwcml2LT5taW5fZGVsYXkgKyBxMiAqIEhaIC8gKDEyOCoxMjgpOwogfQogCiAvKioKQEAgLTIzMiw3ICsyMzgsNyBAQAogICogQHBhcmFtIGNoZWNrX3dyYXBwZWQgQ2hlY2tzIGlmIGFuIGl0ZXJhdGlvbiBoYXMgY29tcGxldGVkLiBETyBOT1QgU0VUIE9OIFRIRSBGSVJTVCBBVFRFTVBUCiAgKiBAcmV0dXJucyBOdW1iZXIgb2YgY29tcGxldGUgaXRlcmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBwZXJmb3JtZWQuCiAgKi8KLXN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2F1dG90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgY2hlY2tfd3JhcHBlZCkKK3N0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX3N3emlnemFnX2F1dG90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgY2hlY2tfd3JhcHBlZCkKIHsKIAlpbnQgYXV0b2ludmVyc2lvbjsKIAlpbnQgcmVhZHkgPSAwOwpAQCAtMzIxLDYgKzMyNywxMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZHZiX2Zyb250ZW5kX3N3emlnemFnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWZlX3N0YXR1c190IHM7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKworCS8qIGlmIHdlJ3ZlIGdvdCBubyBwYXJhbWV0ZXJzLCBqdXN0IGtlZXAgaWRsaW5nICovCisJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX0lETEUpIHsKKwkJZmVwcml2LT5kZWxheSA9IDMqSFo7CisJCWZlcHJpdi0+cXVhbGl0eSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBpbiBTQ0FOIG1vZGUsIHdlIGp1c3Qgc2V0IHRoZSBmcm9udGVuZCB3aGVuIGFza2VkIGFuZCBsZWF2ZSBpdCBhbG9uZSAqLworCWlmIChmZXByaXYtPnR1bmVfbW9kZV9mbGFncyAmIEZFX1RVTkVfTU9ERV9PTkVTSE9UKSB7CisJCWlmIChmZXByaXYtPnN0YXRlICYgRkVTVEFURV9SRVRVTkUpIHsKKwkJCWlmIChmZS0+b3BzLT5zZXRfZnJvbnRlbmQpCisJCQkJZmUtPm9wcy0+c2V0X2Zyb250ZW5kKGZlLCAmZmVwcml2LT5wYXJhbWV0ZXJzKTsKKwkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX1RVTkVEOworCQl9CisJCWZlcHJpdi0+ZGVsYXkgPSAzKkhaOworCQlmZXByaXYtPnF1YWxpdHkgPSAwOworCQlyZXR1cm47CisJfQorCisJLyogZ2V0IHRoZSBmcm9udGVuZCBzdGF0dXMgKi8KKwlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSB7CisJCXMgPSAwOworCX0gZWxzZSB7CisJCWlmIChmZS0+b3BzLT5yZWFkX3N0YXR1cykKKwkJCWZlLT5vcHMtPnJlYWRfc3RhdHVzKGZlLCAmcyk7CisJCWlmIChzICE9IGZlcHJpdi0+c3RhdHVzKSB7CisJCQlkdmJfZnJvbnRlbmRfYWRkX2V2ZW50KGZlLCBzKTsKKwkJCWZlcHJpdi0+c3RhdHVzID0gczsKKwkJfQorCX0KKworCS8qIGlmIHdlJ3JlIG5vdCB0dW5lZCwgYW5kIHdlIGhhdmUgYSBsb2NrLCBtb3ZlIHRvIHRoZSBUVU5FRCBzdGF0ZSAqLworCWlmICgoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfV0FJVEZPUkxPQ0spICYmIChzICYgRkVfSEFTX0xPQ0spKSB7CisJCWR2Yl9mcm9udGVuZF9zd3ppZ3phZ191cGRhdGVfZGVsYXkoZmVwcml2LCBzICYgRkVfSEFTX0xPQ0spOworCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9UVU5FRDsKKworCQkvKiBpZiB3ZSdyZSB0dW5lZCwgdGhlbiB3ZSBoYXZlIGRldGVybWluZWQgdGhlIGNvcnJlY3QgaW52ZXJzaW9uICovCisJCWlmICgoIShmZS0+b3BzLT5pbmZvLmNhcHMgJiBGRV9DQU5fSU5WRVJTSU9OX0FVVE8pKSAmJgorCQkgICAgKGZlcHJpdi0+cGFyYW1ldGVycy5pbnZlcnNpb24gPT0gSU5WRVJTSU9OX0FVVE8pKSB7CisJCQlmZXByaXYtPnBhcmFtZXRlcnMuaW52ZXJzaW9uID0gZmVwcml2LT5pbnZlcnNpb247CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSB0dW5lZCBhbHJlYWR5LCBjaGVjayB3ZSdyZSBzdGlsbCBsb2NrZWQgKi8KKwlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfVFVORUQpIHsKKwkJZHZiX2Zyb250ZW5kX3N3emlnemFnX3VwZGF0ZV9kZWxheShmZXByaXYsIHMgJiBGRV9IQVNfTE9DSyk7CisKKwkJLyogd2UncmUgdHVuZWQsIGFuZCB0aGUgbG9jayBpcyBzdGlsbCBnb29kLi4uICovCisJCWlmIChzICYgRkVfSEFTX0xPQ0spIHsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsgLyogaWYgd2UgX1dFUkVfIHR1bmVkLCBidXQgbm93IGRvbid0IGhhdmUgYSBsb2NrICovCisJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9aSUdaQUdfRkFTVDsKKwkJCWZlcHJpdi0+c3RhcnRlZF9hdXRvX3N0ZXAgPSBmZXByaXYtPmF1dG9fc3RlcDsKKwkJCWZlcHJpdi0+Y2hlY2tfd3JhcHBlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBpZiB3ZSdyZSBpbiB0aGUgTE9TVExPQ0sgc3RhdGUsCisJICogdGhlIGZyb250ZW5kIGlzIHNldCB0byBGRV9DQU5fUkVDT1ZFUiwgYW5kIHRoZSBtYXhfZHJpZnQgaXMgMCAqLworCWlmICgoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfTE9TVExPQ0spICYmCisJICAgIChmZS0+b3BzLT5pbmZvLmNhcHMgJiBGRV9DQU5fUkVDT1ZFUikgJiYgKGZlcHJpdi0+bWF4X2RyaWZ0ID09IDApKSB7CisJCWR2Yl9mcm9udGVuZF9zd3ppZ3phZ191cGRhdGVfZGVsYXkoZmVwcml2LCBzICYgRkVfSEFTX0xPQ0spOworCQlyZXR1cm47CisJfQorCisJLyogZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIERJU0VRQyBzdGF0ZSwgc2luY2UgdGhpcworCSAqIG1pZ2h0IGJlIHNvbWVvbmUgd2l0aCBhIG1vdG9yaXplZCBkaXNoIGNvbnRyb2xsZWQgYnkgRElTRVFDLgorCSAqIElmIGl0cyBhY3R1YWxseSBhIHJlLXR1bmUsIHRoZXJlIHdpbGwgYmUgYSBTRVRfRlJPTlRFTkQgc29vbiBlbm91Z2guCSovCisJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX0RJU0VRQykgeworCQlkdmJfZnJvbnRlbmRfc3d6aWd6YWdfdXBkYXRlX2RlbGF5KGZlcHJpdiwgcyAmIEZFX0hBU19MT0NLKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlJ3JlIGluIHRoZSBSRVRVTkUgc3RhdGUsIHNldCBldmVyeXRoaW5nIHVwIGZvciBhIGJyYW5kCisJICogbmV3IHNjYW4sIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW52ZXJzaW9uIHNldHRpbmcsIGFzIHRoZSBuZXh0CisJICogdHVuZSBpcyBfdmVyeV8gbGlrZWx5IHRvIHJlcXVpcmUgdGhlIHNhbWUgKi8KKwlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSB7CisJCWZlcHJpdi0+bG5iX2RyaWZ0ID0gMDsKKwkJZmVwcml2LT5hdXRvX3N0ZXAgPSAwOworCQlmZXByaXYtPmF1dG9fc3ViX3N0ZXAgPSAwOworCQlmZXByaXYtPnN0YXJ0ZWRfYXV0b19zdGVwID0gMDsKKwkJZmVwcml2LT5jaGVja193cmFwcGVkID0gMDsKKwl9CisKKwkvKiBmYXN0IHppZ3phZy4gKi8KKwlpZiAoKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1NFQVJDSElOR19GQVNUKSB8fCAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSkgeworCQlmZXByaXYtPmRlbGF5ID0gZmVwcml2LT5taW5fZGVsYXk7CisKKwkJLyogcGVmb3JtIGEgdHVuZSAqLworCQlpZiAoZHZiX2Zyb250ZW5kX3N3emlnemFnX2F1dG90dW5lKGZlLCBmZXByaXYtPmNoZWNrX3dyYXBwZWQpKSB7CisJCQkvKiBPSywgaWYgd2UndmUgcnVuIG91dCBvZiB0cmlhbHMgYXQgdGhlIGZhc3Qgc3BlZWQuCisJCQkgKiBEcm9wIGJhY2sgdG8gc2xvdyBmb3IgdGhlIF9uZXh0XyBhdHRlbXB0ICovCisJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9TRUFSQ0hJTkdfU0xPVzsKKwkJCWZlcHJpdi0+c3RhcnRlZF9hdXRvX3N0ZXAgPSBmZXByaXYtPmF1dG9fc3RlcDsKKwkJCXJldHVybjsKKwkJfQorCQlmZXByaXYtPmNoZWNrX3dyYXBwZWQgPSAxOworCisJCS8qIGlmIHdlJ3ZlIGp1c3QgcmV0dW5lZCwgZW50ZXIgdGhlIFpJR1pBR19GQVNUIHN0YXRlLgorCQkgKiBUaGlzIGVuc3VyZXMgd2UgY2Fubm90IHJldHVybiBmcm9tIGFuCisJCSAqIEZFX1NFVF9GUk9OVEVORCBpb2N0bCBiZWZvcmUgdGhlIGZpcnN0IGZyb250ZW5kIHR1bmUKKwkJICogb2NjdXJzICovCisJCWlmIChmZXByaXYtPnN0YXRlICYgRkVTVEFURV9SRVRVTkUpIHsKKwkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX1RVTklOR19GQVNUOworCQl9CisJfQorCisJLyogc2xvdyB6aWd6YWcgKi8KKwlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfU0VBUkNISU5HX1NMT1cpIHsKKwkJZHZiX2Zyb250ZW5kX3N3emlnemFnX3VwZGF0ZV9kZWxheShmZXByaXYsIHMgJiBGRV9IQVNfTE9DSyk7CisKKwkJLyogTm90ZTogZG9uJ3QgYm90aGVyIGNoZWNraW5nIGZvciB3cmFwcGluZzsgd2Ugc3RheSBpbiB0aGlzCisJCSAqIHN0YXRlIHVudGlsIHdlIGdldCBhIGxvY2sgKi8KKwkJZHZiX2Zyb250ZW5kX3N3emlnemFnX2F1dG90dW5lKGZlLCAwKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2lzX2V4aXRpbmcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKQEAgLTMzMCw3ICs0NTksNyBAQAogCiAJaWYgKGZlcHJpdi0+ZHZiZGV2LT53cml0ZXJzID09IDEpCiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGZlcHJpdi0+cmVsZWFzZV9qaWZmaWVzICsKLQkJCQkJZHZiX3NodXRkb3duX3RpbWVvdXQgKiBIWikpCisJCQkJICBkdmJfc2h1dGRvd25fdGltZW91dCAqIEhaKSkKIAkJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC0zNTUsMTggKzQ4NCwxNCBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmVwcml2LT53YWl0X3F1ZXVlKTsKIH0KIAotLyoKLSAqIEZJWE1FOiB1c2UgbGludXgva3RocmVhZC5oCi0gKi8KIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gZGF0YTsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAljaGFyIG5hbWUgWzE1XTsKLQlpbnQgcXVhbGl0eSA9IDAsIGRlbGF5ID0gMypIWjsKIAlmZV9zdGF0dXNfdCBzOwotCWludCBjaGVja193cmFwcGVkID0gMDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtczsKIAogCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCkBAIC0zNzcsNiArNTAyLDkgQEAKIAlzaWdmaWxsc2V0KCZjdXJyZW50LT5ibG9ja2VkKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKKwlmZXByaXYtPmNoZWNrX3dyYXBwZWQgPSAwOworCWZlcHJpdi0+cXVhbGl0eSA9IDA7CisJZmVwcml2LT5kZWxheSA9IDMqSFo7CiAJZmVwcml2LT5zdGF0dXMgPSAwOwogCWR2Yl9mcm9udGVuZF9pbml0KGZlKTsKIAlmZXByaXYtPndha2V1cCA9IDA7CkBAIC0zODYsNyArNTE0LDcgQEAKIAogCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZmVwcml2LT53YWl0X3F1ZXVlLAogCQkJCQkJCSAgIGR2Yl9mcm9udGVuZF9zaG91bGRfd2FrZXVwKGZlKSwKLQkJCQkJCQkgICBkZWxheSk7CisJCQkJCQkJICAgZmVwcml2LT5kZWxheSk7CiAJCWlmICgwICE9IGR2Yl9mcm9udGVuZF9pc19leGl0aW5nKGZlKSkgewogCQkJLyogZ290IHNpZ25hbCBvciBxdWl0dGluZyAqLwogCQkJYnJlYWs7CkBAIC0zOTcsMTA4ICs1MjUsMjIgQEAKIAkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZmVwcml2LT5zZW0pKQogCQkJYnJlYWs7CiAKLQkJLyogaWYgd2UndmUgZ290IG5vIHBhcmFtZXRlcnMsIGp1c3Qga2VlcCBpZGxpbmcgKi8KLQkJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX0lETEUpIHsKLQkJCWRlbGF5ID0gMypIWjsKLQkJCXF1YWxpdHkgPSAwOwotCQkJY29udGludWU7Ci0JCX0KKwkJLyogZG8gYW4gaXRlcmF0aW9uIG9mIHRoZSB0dW5pbmcgbG9vcCAqLworCQlpZiAoZmUtPm9wcy0+dHVuZSkgeworCQkJLyogaGF2ZSB3ZSBiZWVuIGFza2VkIHRvIHJldHVuZT8gKi8KKwkJCXBhcmFtcyA9IE5VTEw7CisJCQlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSB7CisJCQkJcGFyYW1zID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKKwkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9UVU5FRDsKKwkJCX0KIAotCQkvKiBnZXQgdGhlIGZyb250ZW5kIHN0YXR1cyAqLwotCQlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSB7Ci0JCQlzID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChmZS0+b3BzLT5yZWFkX3N0YXR1cykKLQkJCQlmZS0+b3BzLT5yZWFkX3N0YXR1cyhmZSwgJnMpOworCQkJZmUtPm9wcy0+dHVuZShmZSwgcGFyYW1zLCBmZXByaXYtPnR1bmVfbW9kZV9mbGFncywgJmZlcHJpdi0+ZGVsYXksICZzKTsKIAkJCWlmIChzICE9IGZlcHJpdi0+c3RhdHVzKSB7CiAJCQkJZHZiX2Zyb250ZW5kX2FkZF9ldmVudChmZSwgcyk7CiAJCQkJZmVwcml2LT5zdGF0dXMgPSBzOwogCQkJfQotCQl9Ci0JCS8qIGlmIHdlJ3JlIG5vdCB0dW5lZCwgYW5kIHdlIGhhdmUgYSBsb2NrLCBtb3ZlIHRvIHRoZSBUVU5FRCBzdGF0ZSAqLwotCQlpZiAoKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1dBSVRGT1JMT0NLKSAmJiAocyAmIEZFX0hBU19MT0NLKSkgewotCQkJdXBkYXRlX2RlbGF5KCZxdWFsaXR5LCAmZGVsYXksIGZlcHJpdi0+bWluX2RlbGF5LCBzICYgRkVfSEFTX0xPQ0spOwotCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfVFVORUQ7Ci0KLQkJCS8qIGlmIHdlJ3JlIHR1bmVkLCB0aGVuIHdlIGhhdmUgZGV0ZXJtaW5lZCB0aGUgY29ycmVjdCBpbnZlcnNpb24gKi8KLQkJCWlmICgoIShmZS0+b3BzLT5pbmZvLmNhcHMgJiBGRV9DQU5fSU5WRVJTSU9OX0FVVE8pKSAmJgotCQkJICAgIChmZXByaXYtPnBhcmFtZXRlcnMuaW52ZXJzaW9uID09IElOVkVSU0lPTl9BVVRPKSkgewotCQkJCWZlcHJpdi0+cGFyYW1ldGVycy5pbnZlcnNpb24gPSBmZXByaXYtPmludmVyc2lvbjsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogaWYgd2UgYXJlIHR1bmVkIGFscmVhZHksIGNoZWNrIHdlJ3JlIHN0aWxsIGxvY2tlZCAqLwotCQlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfVFVORUQpIHsKLQkJCXVwZGF0ZV9kZWxheSgmcXVhbGl0eSwgJmRlbGF5LCBmZXByaXYtPm1pbl9kZWxheSwgcyAmIEZFX0hBU19MT0NLKTsKLQotCQkJLyogd2UncmUgdHVuZWQsIGFuZCB0aGUgbG9jayBpcyBzdGlsbCBnb29kLi4uICovCi0JCQlpZiAocyAmIEZFX0hBU19MT0NLKQotCQkJCWNvbnRpbnVlOwotCQkJZWxzZSB7IC8qIGlmIHdlIF9XRVJFXyB0dW5lZCwgYnV0IG5vdyBkb24ndCBoYXZlIGEgbG9jayAqLwotCQkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX1pJR1pBR19GQVNUOwotCQkJCWZlcHJpdi0+c3RhcnRlZF9hdXRvX3N0ZXAgPSBmZXByaXYtPmF1dG9fc3RlcDsKLQkJCQljaGVja193cmFwcGVkID0gMDsKLQkJCX0KLQkJfQotCi0JCS8qIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBMT1NUTE9DSyBzdGF0ZSwKLQkJICogdGhlIGZyb250ZW5kIGlzIHNldCB0byBGRV9DQU5fUkVDT1ZFUiwgYW5kIHRoZSBtYXhfZHJpZnQgaXMgMCAqLwotCQlpZiAoKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX0xPU1RMT0NLKSAmJgotCQkgICAgKGZlLT5vcHMtPmluZm8uY2FwcyAmIEZFX0NBTl9SRUNPVkVSKSAmJiAoZmVwcml2LT5tYXhfZHJpZnQgPT0gMCkpIHsKLQkJCXVwZGF0ZV9kZWxheSgmcXVhbGl0eSwgJmRlbGF5LCBmZXByaXYtPm1pbl9kZWxheSwgcyAmIEZFX0hBU19MT0NLKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIERJU0VRQyBzdGF0ZSwgc2luY2UgdGhpcwotCQkgKiBtaWdodCBiZSBzb21lb25lIHdpdGggYSBtb3Rvcml6ZWQgZGlzaCBjb250cm9sbGVkIGJ5IERJU0VRQy4KLQkJICogSWYgaXRzIGFjdHVhbGx5IGEgcmUtdHVuZSwgdGhlcmUgd2lsbCBiZSBhIFNFVF9GUk9OVEVORCBzb29uIGVub3VnaC4JKi8KLQkJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX0RJU0VRQykgewotCQkJdXBkYXRlX2RlbGF5KCZxdWFsaXR5LCAmZGVsYXksIGZlcHJpdi0+bWluX2RlbGF5LCBzICYgRkVfSEFTX0xPQ0spOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBpZiB3ZSdyZSBpbiB0aGUgUkVUVU5FIHN0YXRlLCBzZXQgZXZlcnl0aGluZyB1cCBmb3IgYSBicmFuZAotCQkgKiBuZXcgc2Nhbiwga2VlcGluZyB0aGUgY3VycmVudCBpbnZlcnNpb24gc2V0dGluZywgYXMgdGhlIG5leHQKLQkJICogdHVuZSBpcyBfdmVyeV8gbGlrZWx5IHRvIHJlcXVpcmUgdGhlIHNhbWUgKi8KLQkJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1JFVFVORSkgewotCQkJZmVwcml2LT5sbmJfZHJpZnQgPSAwOwotCQkJZmVwcml2LT5hdXRvX3N0ZXAgPSAwOwotCQkJZmVwcml2LT5hdXRvX3N1Yl9zdGVwID0gMDsKLQkJCWZlcHJpdi0+c3RhcnRlZF9hdXRvX3N0ZXAgPSAwOwotCQkJY2hlY2tfd3JhcHBlZCA9IDA7Ci0JCX0KLQotCQkvKiBmYXN0IHppZ3phZy4gKi8KLQkJaWYgKChmZXByaXYtPnN0YXRlICYgRkVTVEFURV9TRUFSQ0hJTkdfRkFTVCkgfHwgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1JFVFVORSkpIHsKLQkJCWRlbGF5ID0gZmVwcml2LT5taW5fZGVsYXk7Ci0KLQkJCS8qIHBlZm9ybSBhIHR1bmUgKi8KLQkJCWlmIChkdmJfZnJvbnRlbmRfYXV0b3R1bmUoZmUsIGNoZWNrX3dyYXBwZWQpKSB7Ci0JCQkJLyogT0ssIGlmIHdlJ3ZlIHJ1biBvdXQgb2YgdHJpYWxzIGF0IHRoZSBmYXN0IHNwZWVkLgotCQkJCSAqIERyb3AgYmFjayB0byBzbG93IGZvciB0aGUgX25leHRfIGF0dGVtcHQgKi8KLQkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9TRUFSQ0hJTkdfU0xPVzsKLQkJCQlmZXByaXYtPnN0YXJ0ZWRfYXV0b19zdGVwID0gZmVwcml2LT5hdXRvX3N0ZXA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQljaGVja193cmFwcGVkID0gMTsKLQotCQkJLyogaWYgd2UndmUganVzdCByZXR1bmVkLCBlbnRlciB0aGUgWklHWkFHX0ZBU1Qgc3RhdGUuCi0JCQkgKiBUaGlzIGVuc3VyZXMgd2UgY2Fubm90IHJldHVybiBmcm9tIGFuCi0JCQkgKiBGRV9TRVRfRlJPTlRFTkQgaW9jdGwgYmVmb3JlIHRoZSBmaXJzdCBmcm9udGVuZCB0dW5lCi0JCQkgKiBvY2N1cnMgKi8KLQkJCWlmIChmZXByaXYtPnN0YXRlICYgRkVTVEFURV9SRVRVTkUpIHsKLQkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9UVU5JTkdfRkFTVDsKLQkJCX0KLQkJfQotCi0JCS8qIHNsb3cgemlnemFnICovCi0JCWlmIChmZXByaXYtPnN0YXRlICYgRkVTVEFURV9TRUFSQ0hJTkdfU0xPVykgewotCQkJdXBkYXRlX2RlbGF5KCZxdWFsaXR5LCAmZGVsYXksIGZlcHJpdi0+bWluX2RlbGF5LCBzICYgRkVfSEFTX0xPQ0spOwotCi0JCQkvKiBOb3RlOiBkb24ndCBib3RoZXIgY2hlY2tpbmcgZm9yIHdyYXBwaW5nOyB3ZSBzdGF5IGluIHRoaXMKLQkJCSAqIHN0YXRlIHVudGlsIHdlIGdldCBhIGxvY2sgKi8KLQkJCWR2Yl9mcm9udGVuZF9hdXRvdHVuZShmZSwgMCk7CisJCX0gZWxzZSB7CisJCQlkdmJfZnJvbnRlbmRfc3d6aWd6YWcoZmUpOwogCQl9CiAJfQogCkBAIC03MzMsNyArNzc1LDYgQEAKIAkJCWVyciA9IGZlLT5vcHMtPnNldF90b25lKGZlLCAoZmVfc2VjX3RvbmVfbW9kZV90KSBwYXJnKTsKIAkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX0RJU0VRQzsKIAkJCWZlcHJpdi0+c3RhdHVzID0gMDsKLQkJCWZlcHJpdi0+dG9uZSA9IChmZV9zZWNfdG9uZV9tb2RlX3QpIHBhcmc7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTc0Nyw3ICs3ODgsNyBAQAogCiAJY2FzZSBGRV9ESVNITkVUV09SS19TRU5EX0xFR0FDWV9DTUQ6CiAJCWlmIChmZS0+b3BzLT5kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKSB7Ci0JCQllcnIgPSBmZS0+b3BzLT5kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKGZlLCAodW5zaWduZWQgaW50KSBwYXJnKTsKKwkJCWVyciA9IGZlLT5vcHMtPmRpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQoZmUsICh1bnNpZ25lZCBsb25nKSBwYXJnKTsKIAkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX0RJU0VRQzsKIAkJCWZlcHJpdi0+c3RhdHVzID0gMDsKIAkJfSBlbHNlIGlmIChmZS0+b3BzLT5zZXRfdm9sdGFnZSkgewpAQCAtNzY3LDEzICs4MDgsMTMgQEAKIAkJCSAqIGluaXRpYWxpemF0aW9uLCBzbyBwYXJnIGlzIDggYml0cyBhbmQgZG9lcyBub3QKIAkJCSAqIGluY2x1ZGUgdGhlIGluaXRpYWxpemF0aW9uIG9yIHN0YXJ0IGJpdAogCQkJICovCi0JCQl1bnNpZ25lZCBpbnQgY21kID0gKCh1bnNpZ25lZCBpbnQpIHBhcmcpIDw8IDE7CisJCQl1bnNpZ25lZCBsb25nIGNtZCA9ICgodW5zaWduZWQgbG9uZykgcGFyZykgPDwgMTsKIAkJCXN0cnVjdCB0aW1ldmFsIG5leHR0aW1lOwogCQkJc3RydWN0IHRpbWV2YWwgdHZbMTBdOwogCQkJaW50IGk7CiAJCQl1OCBsYXN0ID0gMTsKIAkJCWlmIChkdmJfZnJvbnRlbmRfZGVidWcpCi0JCQkJcHJpbnRrKCIlcyBzd2l0Y2ggY29tbWFuZDogMHglMDR4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisJCQkJcHJpbnRrKCIlcyBzd2l0Y2ggY29tbWFuZDogMHglMDRseFxuIiwgX19GVU5DVElPTl9fLCBjbWQpOwogCQkJZG9fZ2V0dGltZW9mZGF5KCZuZXh0dGltZSk7CiAJCQlpZiAoZHZiX2Zyb250ZW5kX2RlYnVnKQogCQkJCW1lbWNweSgmdHZbMF0sICZuZXh0dGltZSwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CkBAIC04MTQsNyArODU1LDcgQEAKIAogCWNhc2UgRkVfRU5BQkxFX0hJR0hfTE5CX1ZPTFRBR0U6CiAJCWlmIChmZS0+b3BzLT5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSkKLQkJCWVyciA9IGZlLT5vcHMtPmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlKGZlLCAoaW50KSBwYXJnKTsKKwkJCWVyciA9IGZlLT5vcHMtPmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlKGZlLCAobG9uZykgcGFyZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBGRV9TRVRfRlJPTlRFTkQ6IHsKQEAgLTg5MSw2ICs5MzIsMTAgQEAKIAkJCWVyciA9IGZlLT5vcHMtPmdldF9mcm9udGVuZChmZSwgKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyopIHBhcmcpOwogCQl9CiAJCWJyZWFrOworCisJY2FzZSBGRV9TRVRfRlJPTlRFTkRfVFVORV9NT0RFOgorCQlmZXByaXYtPnR1bmVfbW9kZV9mbGFncyA9ICh1bnNpZ25lZCBsb25nKSBwYXJnOworCQlicmVhazsKIAl9OwogCiAJdXAgKCZmZXByaXYtPnNlbSk7CkBAIC05MzIsNiArOTc3LDkgQEAKIAogCQkvKiAgZW1wdHkgZXZlbnQgcXVldWUgKi8KIAkJZmVwcml2LT5ldmVudHMuZXZlbnRyID0gZmVwcml2LT5ldmVudHMuZXZlbnR3ID0gMDsKKworCQkvKiBub3JtYWwgdHVuZSBtb2RlIHdoZW4gb3BlbmVkIFIvVyAqLworCQlmZXByaXYtPnR1bmVfbW9kZV9mbGFncyAmPSB+RkVfVFVORV9NT0RFX09ORVNIT1Q7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTk5MCw3ICsxMDM4LDYgQEAKIAlpbml0X01VVEVYICgmZmVwcml2LT5ldmVudHMuc2VtKTsKIAlmZS0+ZHZiID0gZHZiOwogCWZlcHJpdi0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX09GRjsKLQlmZXByaXYtPnRvbmUgPSBTRUNfVE9ORV9PRkY7CiAKIAlwcmludGsgKCJEVkI6IHJlZ2lzdGVyaW5nIGZyb250ZW5kICVpICglcykuLi5cbiIsCiAJCWZlLT5kdmItPm51bSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggMWUwODQwZC4uNzBhNmQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTU4LDEwICs1OCwxOSBAQAogCWludCAoKmluaXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAlpbnQgKCpzbGVlcCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOwogCisJLyogaWYgdGhpcyBpcyBzZXQsIGl0IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzd3ppZ3phZyAqLworCWludCAoKnR1bmUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMsCisJCSAgICB1bnNpZ25lZCBpbnQgbW9kZV9mbGFncywKKwkJICAgIGludCAqZGVsYXksCisJCSAgICBmZV9zdGF0dXNfdCAqc3RhdHVzKTsKKworCS8qIHRoZXNlIHR3byBhcmUgb25seSB1c2VkIGZvciB0aGUgc3d6aWd6YWcgY29kZSAqLwogCWludCAoKnNldF9mcm9udGVuZCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKTsKLQlpbnQgKCpnZXRfZnJvbnRlbmQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcyk7CiAJaW50ICgqZ2V0X3R1bmVfc2V0dGluZ3MpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MqIHNldHRpbmdzKTsKIAorCWludCAoKmdldF9mcm9udGVuZCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKTsKKwogCWludCAoKnJlYWRfc3RhdHVzKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cyk7CiAJaW50ICgqcmVhZF9iZXIpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcik7CiAJaW50ICgqcmVhZF9zaWduYWxfc3RyZW5ndGgpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHN0cmVuZ3RoKTsKQEAgLTc0LDggKzgzLDkgQEAKIAlpbnQgKCpkaXNlcWNfc2VuZF9idXJzdCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY19taW5pX2NtZF90IG1pbmljbWQpOwogCWludCAoKnNldF90b25lKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpOwogCWludCAoKnNldF92b2x0YWdlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKTsKLQlpbnQgKCplbmFibGVfaGlnaF9sbmJfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBhcmcpOwotCWludCAoKmRpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1bnNpZ25lZCBpbnQgY21kKTsKKwlpbnQgKCplbmFibGVfaGlnaF9sbmJfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGxvbmcgYXJnKTsKKwlpbnQgKCpkaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdW5zaWduZWQgbG9uZyBjbWQpOworCWludCAoKmkyY19nYXRlX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKTsKIH07CiAKICNkZWZpbmUgTUFYX0VWRU5UIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCA4NmJiYTgxLi42NzExZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC0xMjIyLDcgKzEyMjIsNyBAQAogCXJldHVybiBpZl9udW07CiB9CiAKLXN0YXRpYyBpbnQgZHZiX25ldF9yZW1vdmVfaWYoc3RydWN0IGR2Yl9uZXQgKmR2Ym5ldCwgdW5zaWduZWQgaW50IG51bSkKK3N0YXRpYyBpbnQgZHZiX25ldF9yZW1vdmVfaWYoc3RydWN0IGR2Yl9uZXQgKmR2Ym5ldCwgdW5zaWduZWQgbG9uZyBudW0pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGR2Ym5ldC0+ZGV2aWNlW251bV07CiAJc3RydWN0IGR2Yl9uZXRfcHJpdiAqcHJpdjsKQEAgLTEyOTYsOSArMTI5Niw5IEBACiAKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKCh1bnNpZ25lZCBpbnQpIHBhcmcgPj0gRFZCX05FVF9ERVZJQ0VTX01BWCkKKwkJaWYgKCh1bnNpZ25lZCBsb25nKSBwYXJnID49IERWQl9ORVRfREVWSUNFU19NQVgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0gZHZiX25ldF9yZW1vdmVfaWYoZHZibmV0LCAodW5zaWduZWQgaW50KSBwYXJnKTsKKwkJcmV0ID0gZHZiX25ldF9yZW1vdmVfaWYoZHZibmV0LCAodW5zaWduZWQgbG9uZykgcGFyZyk7CiAJCWlmICghcmV0KQogCQkJbW9kdWxlX3B1dChkdmJkZXYtPmFkYXB0ZXItPm1vZHVsZSk7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYwppbmRleCAyODNjNmU5Li43N2FkMjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKQEAgLTExMiwxMCArMTEyLDEwIEBACiAJc3BsaXQgPSAocmJ1Zi0+cHJlYWQgKyBsZW4gPiByYnVmLT5zaXplKSA/IHJidWYtPnNpemUgLSByYnVmLT5wcmVhZCA6IDA7CiAJaWYgKHNwbGl0ID4gMCkgewogCQlpZiAoIXVzZXJtZW0pCi0JCSAgICAgICAgbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgc3BsaXQpOworCQkJbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgc3BsaXQpOwogCQllbHNlCi0JCSAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHNwbGl0KSkKLQkJICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHNwbGl0KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnVmICs9IHNwbGl0OwogCQl0b2RvIC09IHNwbGl0OwogCQlyYnVmLT5wcmVhZCA9IDA7CkBAIC0xMjQsNyArMTI0LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgdG9kbyk7CiAJZWxzZQogCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgdG9kbykpCi0JCSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJidWYtPnByZWFkID0gKHJidWYtPnByZWFkICsgdG9kbykgJSByYnVmLT5zaXplOwogCkBAIC0xNjcsNyArMTY3LDcgQEAKIH0KIAogc3NpemVfdCBkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZChzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsIHNpemVfdCBpZHgsCi0JCSAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCB1OCogYnVmLCBzaXplX3QgbGVuLCBpbnQgdXNlcm1lbSkKKwkJCQlpbnQgb2Zmc2V0LCB1OCogYnVmLCBzaXplX3QgbGVuLCBpbnQgdXNlcm1lbSkKIHsKIAlzaXplX3QgdG9kbzsKIAlzaXplX3Qgc3BsaXQ7CkBAIC0xODMsMTAgKzE4MywxMCBAQAogCXNwbGl0ID0gKChpZHggKyBsZW4pID4gcmJ1Zi0+c2l6ZSkgPyByYnVmLT5zaXplIC0gaWR4IDogMDsKIAlpZiAoc3BsaXQgPiAwKSB7CiAJCWlmICghdXNlcm1lbSkKLQkJICAgICAgICBtZW1jcHkoYnVmLCByYnVmLT5kYXRhK2lkeCwgc3BsaXQpOworCQkJbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStpZHgsIHNwbGl0KTsKIAkJZWxzZQotCQkgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5kYXRhK2lkeCwgc3BsaXQpKQotCQkgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+ZGF0YStpZHgsIHNwbGl0KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnVmICs9IHNwbGl0OwogCQl0b2RvIC09IHNwbGl0OwogCQlpZHggPSAwOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCW1lbWNweShidWYsIHJidWYtPmRhdGEraWR4LCB0b2RvKTsKIAllbHNlCiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5kYXRhK2lkeCwgdG9kbykpCi0JCSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBsZW47CiB9CkBAIC0yMDksMTIgKzIwOSwxMiBAQAogCS8vIGNsZWFuIHVwIGRpc3Bvc2VkIHBhY2tldHMKIAl3aGlsZShkdmJfcmluZ2J1ZmZlcl9hdmFpbChyYnVmKSA+IERWQl9SSU5HQlVGRkVSX1BLVEhEUlNJWkUpIHsKIAkJaWYgKERWQl9SSU5HQlVGRkVSX1BFRUsocmJ1ZiwgMikgPT0gUEtUX0RJU1BPU0VEKSB7Ci0JCSAgICAgICAgcGt0bGVuID0gRFZCX1JJTkdCVUZGRVJfUEVFSyhyYnVmLCAwKSA8PCA4OwotCQkgICAgICAgIHBrdGxlbiB8PSBEVkJfUklOR0JVRkZFUl9QRUVLKHJidWYsIDEpOwotCQkgICAgICAgIERWQl9SSU5HQlVGRkVSX1NLSVAocmJ1ZiwgcGt0bGVuICsgRFZCX1JJTkdCVUZGRVJfUEtUSERSU0laRSk7CisJCQlwa3RsZW4gPSBEVkJfUklOR0JVRkZFUl9QRUVLKHJidWYsIDApIDw8IDg7CisJCQlwa3RsZW4gfD0gRFZCX1JJTkdCVUZGRVJfUEVFSyhyYnVmLCAxKTsKKwkJCURWQl9SSU5HQlVGRkVSX1NLSVAocmJ1ZiwgcGt0bGVuICsgRFZCX1JJTkdCVUZGRVJfUEtUSERSU0laRSk7CiAJCX0gZWxzZSB7Ci0JCSAgICAgICAgLy8gZmlyc3QgcGFja2V0IGlzIG5vdCBkaXNwb3NlZCwgc28gd2Ugc3RvcCBjbGVhbmluZyBub3cKLQkJICAgICAgICBicmVhazsKKwkJCS8vIGZpcnN0IHBhY2tldCBpcyBub3QgZGlzcG9zZWQsIHNvIHdlIHN0b3AgY2xlYW5pbmcgbm93CisJCQlicmVhazsKIAkJfQogCX0KIH0KQEAgLTI0Miw4ICsyNDIsOCBAQAogCQljdXJwa3RzdGF0dXMgPSByYnVmLT5kYXRhWyhpZHggKyAyKSAlIHJidWYtPnNpemVdOwogCiAJCWlmIChjdXJwa3RzdGF0dXMgPT0gUEtUX1JFQURZKSB7Ci0JCSAgICAgICAgKnBrdGxlbiA9IGN1cnBrdGxlbjsKLQkJICAgICAgICByZXR1cm4gaWR4OworCQkJKnBrdGxlbiA9IGN1cnBrdGxlbjsKKwkJCXJldHVybiBpZHg7CiAJCX0KIAogCQljb25zdW1lZCArPSBjdXJwa3RsZW4gKyBEVkJfUklOR0JVRkZFUl9QS1RIRFJTSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmgKaW5kZXggZmE0NzZmNi4uNmQyNTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5oCkBAIC0xMDYsNyArMTA2LDcgQEAKICoqIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIG9yIC1FRkFVTFQKICovCiBleHRlcm4gc3NpemVfdCBkdmJfcmluZ2J1ZmZlcl9yZWFkKHN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqcmJ1ZiwgdTggKmJ1ZiwKLQkJICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIGludCB1c2VybWVtKTsKKwkJCQkgICBzaXplX3QgbGVuLCBpbnQgdXNlcm1lbSk7CiAKIAogLyogd3JpdGUgcm91dGluZXMgJiBtYWNyb3MgKi8KQEAgLTEyMSw3ICsxMjEsNyBAQAogKiogcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgb3IgLUVGQVVMVAogKi8KIGV4dGVybiBzc2l6ZV90IGR2Yl9yaW5nYnVmZmVyX3dyaXRlKHN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqcmJ1ZiwgY29uc3QgdTggKmJ1ZiwKLQkJICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKwkJCQkgICAgc2l6ZV90IGxlbik7CiAKIAogLyoqCkBAIC0xMzMsNyArMTMzLDcgQEAKICAqIHJldHVybnMgTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIG9yIC1FRkFVTFQsIC1FTk9NRU0sIC1FVklOQUwuCiAgKi8KIGV4dGVybiBzc2l6ZV90IGR2Yl9yaW5nYnVmZmVyX3BrdF93cml0ZShzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsIHU4KiBidWYsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworCQkJCQlzaXplX3QgbGVuKTsKIAogLyoqCiAgKiBSZWFkIGZyb20gYSBwYWNrZXQgaW4gdGhlIHJpbmdidWZmZXIuIE5vdGU6IHVubGlrZSBkdmJfcmluZ2J1ZmZlcl9yZWFkKCksIHRoaXMKQEAgLTE0OSw3ICsxNDksNyBAQAogICogcmV0dXJucyBOdW1iZXIgb2YgYnl0ZXMgcmVhZCwgb3IgLUVGQVVMVC4KICAqLwogZXh0ZXJuIHNzaXplX3QgZHZiX3JpbmdidWZmZXJfcGt0X3JlYWQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmLCBzaXplX3QgaWR4LAotCQkgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsIHU4KiBidWYsIHNpemVfdCBsZW4sIGludCB1c2VybWVtKTsKKwkJCQkgICAgICAgaW50IG9mZnNldCwgdTgqIGJ1Ziwgc2l6ZV90IGxlbiwgaW50IHVzZXJtZW0pOwogCiAvKioKICAqIERpc3Bvc2Ugb2YgYSBwYWNrZXQgaW4gdGhlIHJpbmcgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCBhNGFlZTg2Li4wNmI2OTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtOTIsMTAgKzkyLDEwIEBACiAJCW9sZF9mb3BzID0gZmlsZS0+Zl9vcDsKIAkJZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KGR2YmRldi0+Zm9wcyk7CiAJCWlmKGZpbGUtPmZfb3AtPm9wZW4pCi0JCSAgICAgICAgZXJyID0gZmlsZS0+Zl9vcC0+b3Blbihpbm9kZSxmaWxlKTsKKwkJCWVyciA9IGZpbGUtPmZfb3AtPm9wZW4oaW5vZGUsZmlsZSk7CiAJCWlmIChlcnIpIHsKLQkJICAgICAgICBmb3BzX3B1dChmaWxlLT5mX29wKTsKLQkJICAgICAgICBmaWxlLT5mX29wID0gZm9wc19nZXQob2xkX2ZvcHMpOworCQkJZm9wc19wdXQoZmlsZS0+Zl9vcCk7CisJCQlmaWxlLT5mX29wID0gZm9wc19nZXQob2xkX2ZvcHMpOwogCQl9CiAJCWZvcHNfcHV0KG9sZF9mb3BzKTsKIAkJcmV0dXJuIGVycjsKQEAgLTM1NiwxOCArMzU2LDE4IEBACiAJY2FzZSBfSU9DX1dSSVRFOgogCWNhc2UgKF9JT0NfV1JJVEUgfCBfSU9DX1JFQUQpOgogCQlpZiAoX0lPQ19TSVpFKGNtZCkgPD0gc2l6ZW9mKHNidWYpKSB7Ci0JCSAgICAgICAgcGFyZyA9IHNidWY7CisJCQlwYXJnID0gc2J1ZjsKIAkJfSBlbHNlIHsKLQkJICAgICAgICAvKiB0b28gYmlnIHRvIGFsbG9jYXRlIGZyb20gc3RhY2sgKi8KLQkJICAgICAgICBtYnVmID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSxHRlBfS0VSTkVMKTsKLQkJICAgICAgICBpZiAoTlVMTCA9PSBtYnVmKQotCQkgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0JCSAgICAgICAgcGFyZyA9IG1idWY7CisJCQkvKiB0b28gYmlnIHRvIGFsbG9jYXRlIGZyb20gc3RhY2sgKi8KKwkJCW1idWYgPSBrbWFsbG9jKF9JT0NfU0laRShjbWQpLEdGUF9LRVJORUwpOworCQkJaWYgKE5VTEwgPT0gbWJ1ZikKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXBhcmcgPSBtYnVmOwogCQl9CiAKIAkJZXJyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKHBhcmcsICh2b2lkIF9fdXNlciAqKWFyZywgX0lPQ19TSVpFKGNtZCkpKQotCQkgICAgICAgIGdvdG8gb3V0OworCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCX0KIApAQCAtMzg0LDcgKzM4NCw3IEBACiAJY2FzZSBfSU9DX1JFQUQ6CiAJY2FzZSAoX0lPQ19XUklURSB8IF9JT0NfUkVBRCk6CiAJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBwYXJnLCBfSU9DX1NJWkUoY21kKSkpCi0JCSAgICAgICAgZXJyID0gLUVGQVVMVDsKKwkJCWVyciA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaAppbmRleCAwY2M2ZTRhLi43NGVkNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaApAQCAtOTcsNyArOTcsNyBAQAogZ2VuZXJpY191c2VyY29weSgpICBzb21lZGF5Li4uICovCiAKIGV4dGVybiBpbnQgZHZiX3VzZXJjb3B5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKIAkJCSAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDU0ZTJiMjkuLjkwYTY5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTM3LDE2ICszNywxNiBAQAogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQiBkZW1vZHVsYXRvci4KIAogCSAgRGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI6Ci0JICAgIFR3aW5oYW5EVFYgVVNCLVRlciAoVlA3MDQxKQotCSAgICBUd2luaGFuRFRWIE1hZ2ljIEJveCAoVlA3MDQxZSkKLQkgICAgS1dvcmxkL0pldFdheS9BRFNUZWNoIFYtU3RyZWFtIFhQRVJUIERUViAtIERWQi1UIFVTQjEuMSBhbmQgVVNCMi4wCi0JICAgIEhhbWEgRFZCLVQgVVNCMS4xLUJveAotCSAgICBEaUJjb20gVVNCMS4xIHJlZmVyZW5jZSBkZXZpY2VzIChub24tcHVibGljKQotCSAgICBVbHRpbWEgRWxlY3Ryb25pYy9BcnRlYyBUMSBVU0IgVFZCT1gKLQkgICAgQ29tcHJvIFZpZGVvbWF0ZSBEVkItVTIwMDAgLSBEVkItVCBVU0IKLQkgICAgR3JhbmR0ZWMgRFZCLVQgVVNCCi0JICAgIEF2ZXJtZWRpYSBBdmVyVFYgRFZCVCBVU0IxLjEKIAkgICAgQXJ0ZWMgVDEgVVNCMS4xIGJveGVzCisJICAgIEF2ZXJtZWRpYSBBdmVyVFYgRFZCVCBVU0IxLjEKKwkgICAgQ29tcHJvIFZpZGVvbWF0ZSBEVkItVTIwMDAgLSBEVkItVCBVU0IKKwkgICAgRGlCY29tIFVTQjEuMSByZWZlcmVuY2UgZGV2aWNlcyAobm9uLXB1YmxpYykKKwkgICAgR3JhbmR0ZWMgRFZCLVQgVVNCCisJICAgIEhhbWEgRFZCLVQgVVNCMS4xLUJveAorCSAgICBLV29ybGQvSmV0V2F5L0FEU1RlY2ggVi1TdHJlYW0gWFBFUlQgRFRWIC0gRFZCLVQgVVNCMS4xIGFuZCBVU0IyLjAKKwkgICAgVHdpbmhhbkRUViBNYWdpYyBCb3ggKFZQNzA0MWUpCisJICAgIFR3aW5oYW5EVFYgVVNCLVRlciAoVlA3MDQxKQorCSAgICBVbHRpbWEgRWxlY3Ryb25pYy9BcnRlYyBUMSBVU0IgVFZCT1gKIAogCSAgVGhlIFZQNzA0MSBzZWVtcyB0byBiZSBpZGVudGljYWwgdG8gIkNUUyBQb3J0YWJsZSIgKENoaW5lc2UKIAkgIFRlbGV2aXNpb24gU3lzdGVtKS4KQEAgLTU0LDYgKzU0LDEyIEBACiAJICBTYXkgWSBpZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UgYW5kIHdhbnQgdG8gdXNlIGl0LiBZb3Ugc2hvdWxkIGJ1aWxkIGl0IGFzCiAJICBhIG1vZHVsZS4KIAorY29uZmlnIERWQl9VU0JfRElCVVNCX01CX0ZBVUxUWQorCWJvb2wgIlN1cHBvcnQgZmF1bHR5IFVTQiBJRHMiCisJZGVwZW5kcyBvbiBEVkJfVVNCX0RJQlVTQl9NQgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGZhdWx0eSBVU0IgSURzIGR1ZSB0byBhbiBpbnZhbGlkIEVFUFJPTSBvbiBzb21lIEFydGVjIGRldmljZXMuCisKIGNvbmZpZyBEVkJfVVNCX0RJQlVTQl9NQwogCXRyaXN0YXRlICJEaUJjb20gVVNCIERWQi1UIGRldmljZXMgKGJhc2VkIG9uIHRoZSBEaUIzMDAwTS1DL1ApIChzZWUgaGVscCBmb3IgZGV2aWNlIGxpc3QpIgogCWRlcGVuZHMgb24gRFZCX1VTQgpAQCAtNjMsOCArNjksOCBAQAogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQy9QIGRlbW9kdWxhdG9yLgogCiAJICBEZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKLQkgICAgRGlCY29tIFVTQjIuMCByZWZlcmVuY2UgZGV2aWNlcyAobm9uLXB1YmxpYykKIAkgICAgQXJ0ZWMgVDEgVVNCMi4wIGJveGVzCisJICAgIERpQmNvbSBVU0IyLjAgcmVmZXJlbmNlIGRldmljZXMgKG5vbi1wdWJsaWMpCiAKIAkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuIFlvdSBzaG91bGQgYnVpbGQgaXQgYXMKIAkgIGEgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCmluZGV4IGQwNWZhYjAuLjM1OGVkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTExLDEwICsxMSwxMSBAQAogICogZGVzaWduLCBzbyBpdCBjYW4gYmUgcmV1c2VkIGZvciB0aGUgImFuYWxvZ3VlLW9ubHkiIGRldmljZSAoaWYgaXQgd2lsbAogICogYXBwZWFyIGF0IGFsbCkuCiAgKgotICogVE9ETzogY2hlY2sgaWYgdGhlIGN4MjU4NDAtZHJpdmVyIChmcm9tIGl2dHYpIGNhbiBiZSB1c2VkIGZvciB0aGUgYW5hbG9ndWUKLSAqIHBhcnQKKyAqIFRPRE86IFVzZSB0aGUgY3gyNTg0MC1kcml2ZXIgZm9yIHRoZSBhbmFsb2d1ZSBwYXJ0CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA1IE1pY2hhZWwgS3J1Zmt5IChta3J1Zmt5QG0xay5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hyaXMgUGFzY29lIChjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdSkKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTI1LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjeHVzYi5oIgogCiAjaW5jbHVkZSAiY3gyMjcwMi5oIgorI2luY2x1ZGUgImxnZHQzMzB4LmgiCisjaW5jbHVkZSAibXQzNTIuaCIKKyNpbmNsdWRlICJtdDM1Ml9wcml2LmgiCiAKIC8qIGRlYnVnICovCiBpbnQgZHZiX3VzYl9jeHVzYl9kZWJ1ZzsKQEAgLTE1Niw2ICsxNjAsOTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjeHVzYl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCit7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXU4IGlyY29kZVs0XTsKKwlpbnQgaTsKKworCWN4dXNiX2N0cmxfbXNnKGQsIENNRF9HRVRfSVJfQ09ERSwgTlVMTCwgMCwgaXJjb2RlLCA0KTsKKworCSpldmVudCA9IDA7CisJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCWlmIChrZXltYXBbaV0uY3VzdG9tID09IGlyY29kZVsyXSAmJgorCQkgICAga2V5bWFwW2ldLmRhdGEgPT0gaXJjb2RlWzNdKSB7CisJCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkdmJfdXNiX3JjX2tleSBkdmljb19tY2VfcmNfa2V5c1tdID0geworCXsgMHhmZSwgMHgwMiwgS0VZX1RWIH0sCisJeyAweGZlLCAweDBlLCBLRVlfTVAzIH0sCisJeyAweGZlLCAweDFhLCBLRVlfRFZEIH0sCisJeyAweGZlLCAweDFlLCBLRVlfRkFWT1JJVEVTIH0sCisJeyAweGZlLCAweDE2LCBLRVlfU0VUVVAgfSwKKwl7IDB4ZmUsIDB4NDYsIEtFWV9QT1dFUjIgfSwKKwl7IDB4ZmUsIDB4MGEsIEtFWV9FUEcgfSwKKwl7IDB4ZmUsIDB4NDksIEtFWV9CQUNLIH0sCisJeyAweGZlLCAweDRkLCBLRVlfTUVOVSB9LAorCXsgMHhmZSwgMHg1MSwgS0VZX1VQIH0sCisJeyAweGZlLCAweDViLCBLRVlfTEVGVCB9LAorCXsgMHhmZSwgMHg1ZiwgS0VZX1JJR0hUIH0sCisJeyAweGZlLCAweDUzLCBLRVlfRE9XTiB9LAorCXsgMHhmZSwgMHg1ZSwgS0VZX09LIH0sCisJeyAweGZlLCAweDU5LCBLRVlfSU5GTyB9LAorCXsgMHhmZSwgMHg1NSwgS0VZX1RBQiB9LAorCXsgMHhmZSwgMHgwZiwgS0VZX1BSRVZJT1VTU09ORyB9LC8qIFJlcGxheSAqLworCXsgMHhmZSwgMHgxMiwgS0VZX05FWFRTT05HIH0sCS8qIFNraXAgKi8KKwl7IDB4ZmUsIDB4NDIsIEtFWV9FTlRFUgkgfSwJLyogV2luZG93cy9TdGFydCAqLworCXsgMHhmZSwgMHgxNSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweGZlLCAweDA1LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHhmZSwgMHgxMSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHhmZSwgMHgwOSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweGZlLCAweDUyLCBLRVlfQ0FNRVJBIH0sCisJeyAweGZlLCAweDVhLCBLRVlfVFVORVIgfSwJLyogTGl2ZSAqLworCXsgMHhmZSwgMHgxOSwgS0VZX09QRU4gfSwKKwl7IDB4ZmUsIDB4MGIsIEtFWV8xIH0sCisJeyAweGZlLCAweDE3LCBLRVlfMiB9LAorCXsgMHhmZSwgMHgxYiwgS0VZXzMgfSwKKwl7IDB4ZmUsIDB4MDcsIEtFWV80IH0sCisJeyAweGZlLCAweDUwLCBLRVlfNSB9LAorCXsgMHhmZSwgMHg1NCwgS0VZXzYgfSwKKwl7IDB4ZmUsIDB4NDgsIEtFWV83IH0sCisJeyAweGZlLCAweDRjLCBLRVlfOCB9LAorCXsgMHhmZSwgMHg1OCwgS0VZXzkgfSwKKwl7IDB4ZmUsIDB4MTMsIEtFWV9BTkdMRSB9LAkvKiBBc3BlY3QgKi8KKwl7IDB4ZmUsIDB4MDMsIEtFWV8wIH0sCisJeyAweGZlLCAweDFmLCBLRVlfWk9PTSB9LAorCXsgMHhmZSwgMHg0MywgS0VZX1JFV0lORCB9LAorCXsgMHhmZSwgMHg0NywgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHhmZSwgMHg0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweGZlLCAweDU3LCBLRVlfTVVURSB9LAorCXsgMHhmZSwgMHgwZCwgS0VZX1NUT1AgfSwKKwl7IDB4ZmUsIDB4MDEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ZmUsIDB4NGUsIEtFWV9QT1dFUiB9LAorfTsKKworc3RhdGljIGludCBjeHVzYl9kZWUxNjAxX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCit7CisJc3RhdGljIHU4IGNsb2NrX2NvbmZpZyBbXSAgPSB7IENMT0NLX0NUTCwgIDB4MzgsIDB4MzggfTsKKwlzdGF0aWMgdTggcmVzZXQgW10gICAgICAgICA9IHsgUkVTRVQsICAgICAgMHg4MCB9OworCXN0YXRpYyB1OCBhZGNfY3RsXzFfY2ZnIFtdID0geyBBRENfQ1RMXzEsICAweDQwIH07CisJc3RhdGljIHU4IGFnY19jZmcgW10gICAgICAgPSB7IEFHQ19UQVJHRVQsIDB4MjgsIDB4MjAgfTsKKwlzdGF0aWMgdTggZ3BwX2N0bF9jZmcgW10gICA9IHsgR1BQX0NUTCwgICAgMHgzMyB9OworCXN0YXRpYyB1OCBjYXB0X3JhbmdlX2NmZ1tdID0geyBDQVBUX1JBTkdFLCAweDMyIH07CisKKwltdDM1Ml93cml0ZShmZSwgY2xvY2tfY29uZmlnLCAgIHNpemVvZihjbG9ja19jb25maWcpKTsKKwl1ZGVsYXkoMjAwKTsKKwltdDM1Ml93cml0ZShmZSwgcmVzZXQsICAgICAgICAgIHNpemVvZihyZXNldCkpOworCW10MzUyX3dyaXRlKGZlLCBhZGNfY3RsXzFfY2ZnLCAgc2l6ZW9mKGFkY19jdGxfMV9jZmcpKTsKKworCW10MzUyX3dyaXRlKGZlLCBhZ2NfY2ZnLCAgICAgICAgc2l6ZW9mKGFnY19jZmcpKTsKKwltdDM1Ml93cml0ZShmZSwgZ3BwX2N0bF9jZmcsICAgIHNpemVvZihncHBfY3RsX2NmZykpOworCW10MzUyX3dyaXRlKGZlLCBjYXB0X3JhbmdlX2NmZywgc2l6ZW9mKGNhcHRfcmFuZ2VfY2ZnKSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGN4MjI3MDJfY29uZmlnIGN4dXNiX2N4MjI3MDJfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHg2MywKIApAQCAtMTY1LDE3ICsyNjIsNDcgQEAKIAkucGxsX3NldCAgPSBkdmJfdXNiX3BsbF9zZXRfaTJjLAogfTsKIAorc3RydWN0IGxnZHQzMzB4X2NvbmZpZyBjeHVzYl9sZ2R0MzMweF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBlLAorCS5kZW1vZF9jaGlwICAgID0gTEdEVDMzMDMsCisJLnBsbF9zZXQgICAgICAgPSBkdmJfdXNiX3BsbF9zZXRfaTJjLAorfTsKKworc3RydWN0IG10MzUyX2NvbmZpZyBjeHVzYl9kZWUxNjAxX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGYsCisJLmRlbW9kX2luaXQgICAgPSBjeHVzYl9kZWUxNjAxX2RlbW9kX2luaXQsCisJLnBsbF9zZXQgICAgICAgPSBkdmJfdXNiX3BsbF9zZXQsCit9OworCiAvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KLXN0YXRpYyBpbnQgY3h1c2JfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgY3h1c2JfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJdTggYnBsbFs0XSA9IHsgMHgwYiwgMHhkYywgMHg5YywgMHhhMCB9OwogCWQtPnBsbF9hZGRyID0gMHg2MTsKLQltZW1jcHkoZC0+cGxsX2luaXQsYnBsbCw0KTsKKwltZW1jcHkoZC0+cGxsX2luaXQsIGJwbGwsIDQpOwogCWQtPnBsbF9kZXNjID0gJmR2Yl9wbGxfZm1kMTIxNm1lOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGN4dXNiX2xnaDA2NGZfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwl1OCBicGxsWzRdID0geyAweDAwLCAweDAwLCAweDE4LCAweDUwIH07CisJLyogYnBsbFsyXSA6IHVuc2V0IGJpdCAzLCBzZXQgYml0cyA0JjUKKwkgICBicGxsWzNdIDogMHg1MCAtIGRpZ2l0YWwsIDB4MjAgLSBhbmFsb2cgKi8KKwlkLT5wbGxfYWRkciA9IDB4NjE7CisJbWVtY3B5KGQtPnBsbF9pbml0LCBicGxsLCA0KTsKKwlkLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3RkdnNfdHVhNjAzNDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeHVzYl9kZWUxNjAxX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJZC0+cGxsX2FkZHIgPSAweDYxOworCWQtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTc5OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dXNiX2N4MjI3MDJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKIAl1OCBiOwogCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LDAsNikgPCAwKQpAQCAtMTg5LDIyICszMTYsODQgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAorc3RhdGljIGludCBjeHVzYl9sZ2R0MzMweF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LDAsNykgPCAwKQorCQllcnIoInNldCBpbnRlcmZhY2UgZmFpbGVkIik7CisKKwljeHVzYl9jdHJsX21zZyhkLENNRF9ESUdJVEFMLCBOVUxMLCAwLCBOVUxMLCAwKTsKKworCWlmICgoZC0+ZmUgPSBsZ2R0MzMweF9hdHRhY2goJmN4dXNiX2xnZHQzMzB4X2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBjeHVzYl9kZWUxNjAxX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKGQtPnVkZXYsMCwwKSA8IDApCisJCWVycigic2V0IGludGVyZmFjZSBmYWlsZWQiKTsKKworCWN4dXNiX2N0cmxfbXNnKGQsQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOworCisJaWYgKChkLT5mZSA9IG10MzUyX2F0dGFjaCgmY3h1c2JfZGVlMTYwMV9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBEVmlDTyBibHVlYmlyZCBmaXJtd2FyZSBuZWVkcyB0aGUgIndhcm0iIHByb2R1Y3QgSUQgdG8gYmUgcGF0Y2hlZCBpbnRvIHRoZQorICogZmlybXdhcmUgZmlsZSBiZWZvcmUgZG93bmxvYWQuCisgKi8KKworI2RlZmluZSBCTFVFQklSRF8wMV9JRF9PRkZTRVQgNjYzOAorc3RhdGljIGludCBibHVlYmlyZF9wYXRjaF9kdmljb19maXJtd2FyZV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlpZiAoZnctPnNpemUgPCBCTFVFQklSRF8wMV9JRF9PRkZTRVQgKyA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmdy0+ZGF0YVtCTFVFQklSRF8wMV9JRF9PRkZTRVRdID09IChVU0JfVklEX0RWSUNPICYgMHhmZikgJiYKKwkgICAgZnctPmRhdGFbQkxVRUJJUkRfMDFfSURfT0ZGU0VUICsgMV0gPT0gVVNCX1ZJRF9EVklDTyA+PiA4KSB7CisKKwkJLyogRklYTUU6IGFyZSB3ZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgZnctZGF0YSA/ICovCisJCWZ3LT5kYXRhW0JMVUVCSVJEXzAxX0lEX09GRlNFVCArIDJdID0gdWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgKyAxOworCQlmdy0+ZGF0YVtCTFVFQklSRF8wMV9JRF9PRkZTRVQgKyAzXSA9IHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID4+IDg7CisKKwkJcmV0dXJuIHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUodWRldixmdyxDWVBSRVNTX0ZYMik7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgY3h1c2JfbWVkaW9uX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9sZ2gwNjRmX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kZWUxNjAxX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgY3h1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZjeHVzYl9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpOworCWlmIChkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmN4dXNiX21lZGlvbl9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDAgfHwKKwkJZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZjeHVzYl9ibHVlYmlyZF9sZ2gwNjRmX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAorCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmN4dXNiX2JsdWViaXJkX2RlZTE2MDFfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY3h1c2JfdGFibGUgW10gPSB7CiAJCXsgVVNCX0RFVklDRShVU0JfVklEX01FRElPTiwgVVNCX1BJRF9NRURJT05fTUQ5NTcwMCkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEcwNjRGX0NPTEQpIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHMDY0Rl9XQVJNKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9ERUUxNjAxX0NPTEQpIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RFRTE2MDFfV0FSTSkgfSwKIAkJe30JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBjeHVzYl90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX3Byb3BlcnRpZXMgPSB7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9tZWRpb25fcHJvcGVydGllcyA9IHsKIAkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCiAKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKQEAgLTIxMyw4ICs0MDIsOCBAQAogCiAJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKIAkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX3Bvd2VyX2N0cmwsCi0JLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl90dW5lcl9hdHRhY2gsCisJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9jeDIyNzAyX2Zyb250ZW5kX2F0dGFjaCwKKwkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2ZtZDEyMTZtZV90dW5lcl9hdHRhY2gsCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKIApAQCAtMjQwLDYgKzQyOSw5MSBAQAogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnaDA2NGZfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgICAgICAgICAgPSBERVZJQ0VfU1BFQ0lGSUMsCisJLmZpcm13YXJlICAgICAgICAgID0gImR2Yi11c2ItYmx1ZWJpcmQtMDEuZnciLAorCS5kb3dubG9hZF9maXJtd2FyZSA9IGJsdWViaXJkX3BhdGNoX2R2aWNvX2Zpcm13YXJlX2Rvd25sb2FkLAorCS8qIHVzZSB1c2IgYWx0IHNldHRpbmcgMCBmb3IgRVA0IHRyYW5zZmVyIChkdmItdCksCisJICAgdXNlIHVzYiBhbHQgc2V0dGluZyA3IGZvciBFUDIgdHJhbnNmZXIgKGF0c2MpICovCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgY3h1c2Jfc3RhdGUpLAorCisJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX3Bvd2VyX2N0cmwsCisJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9sZ2R0MzMweF9mcm9udGVuZF9hdHRhY2gsCisJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ2gwNjRmX3R1bmVyX2F0dGFjaCwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJLnVyYiA9IHsKKwkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCisJCS5jb3VudCA9IDUsCisJCS5lbmRwb2ludCA9IDB4MDIsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAorCQkJfQorCQl9CisJfSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAgICJEVmlDTyBGdXNpb25IRFRWNSBVU0IgR29sZCIsCisJCQl7ICZjeHVzYl90YWJsZVsxXSwgTlVMTCB9LAorCQkJeyAmY3h1c2JfdGFibGVbMl0sIE5VTEwgfSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kZWUxNjAxX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJLnVzYl9jdHJsICAgICAgICAgID0gREVWSUNFX1NQRUNJRklDLAorCS5maXJtd2FyZSAgICAgICAgICA9ICJkdmItdXNiLWJsdWViaXJkLTAxLmZ3IiwKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBibHVlYmlyZF9wYXRjaF9kdmljb19maXJtd2FyZV9kb3dubG9hZCwKKwkvKiB1c2UgdXNiIGFsdCBzZXR0aW5nIDAgZm9yIEVQNCB0cmFuc2ZlciAoZHZiLXQpLAorCSAgIHVzZSB1c2IgYWx0IHNldHRpbmcgNyBmb3IgRVAyIHRyYW5zZmVyIChhdHNjKSAqLworCisJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKKworCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9wb3dlcl9jdHJsLAorCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfZGVlMTYwMV9mcm9udGVuZF9hdHRhY2gsCisJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9kZWUxNjAxX3R1bmVyX2F0dGFjaCwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxNTAsCisJLnJjX2tleV9tYXAgICAgICAgPSBkdmljb19tY2VfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZHZpY29fbWNlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkudXJiID0geworCQkudHlwZSA9IERWQl9VU0JfQlVMSywKKwkJLmNvdW50ID0gNSwKKwkJLmVuZHBvaW50ID0gMHgwNCwKKwkJLnUgPSB7CisJCQkuYnVsayA9IHsKKwkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCisJCQl9CisJCX0KKwl9LAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgRHVhbCBVU0IiLAorCQkJeyAmY3h1c2JfdGFibGVbM10sIE5VTEwgfSwKKwkJCXsgJmN4dXNiX3RhYmxlWzRdLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4dXNiX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiZHZiX3VzYl9jeHVzYiIsCiAJLnByb2JlCQk9IGN4dXNiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5oCmluZGV4IDEzNWMyYTguLjA4N2M5OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmgKQEAgLTIxLDYgKzIxLDggQEAKICNkZWZpbmUgQ01EX1NUUkVBTUlOR19PTiAgMHgzNgogI2RlZmluZSBDTURfU1RSRUFNSU5HX09GRiAweDM3CiAKKyNkZWZpbmUgQ01EX0dFVF9JUl9DT0RFICAgMHg0NworCiAjZGVmaW5lIENNRF9BTkFMT0cgICAgICAgIDB4NTAKICNkZWZpbmUgQ01EX0RJR0lUQUwgICAgICAgMHg1MQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwppbmRleCA1MmFjM2U1Li5kZDVhMTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKQEAgLTY1LDExICs2NSwxMSBAQAogCQlkLT50dW5lcl9wYXNzX2N0cmwoZC0+ZmUsMCxtc2dbMF0uYWRkcik7CiAKIAlpZiAoYjJbMF0gPT0gMHhmZSkgewotCQlpbmZvKCJ0aGlzIGRldmljZSBoYXMgdGhlIFRob21zb24gQ2FibGUgb25ib2FyZC4gV2hpY2ggaXMgZGVmYXVsdC4iKTsKKwkJaW5mbygiVGhpcyBkZXZpY2UgaGFzIHRoZSBUaG9tc29uIENhYmxlIG9uYm9hcmQuIFdoaWNoIGlzIGRlZmF1bHQuIik7CiAJCWRpYnVzYl90aG9tc29uX3R1bmVyX2F0dGFjaChkKTsKIAl9IGVsc2UgewogCQl1OCBicGxsWzRdID0geyAweDBiLCAweGY1LCAweDg1LCAweGFiIH07Ci0JCWluZm8oInRoaXMgZGV2aWNlIGhhcyB0aGUgUGFuYXNvbmljIEVOVjc3SDExRDUgb25ib2FyZC4iKTsKKwkJaW5mbygiVGhpcyBkZXZpY2UgaGFzIHRoZSBQYW5hc29uaWMgRU5WNzdIMTFENSBvbmJvYXJkLiIpOwogCQlkLT5wbGxfYWRkciA9IDB4NjA7CiAJCW1lbWNweShkLT5wbGxfaW5pdCxicGxsLDQpOwogCQlkLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3RkYTY2NXg7CkBAIC05OCwxNSArOTgsMTUgQEAKIAogLyogZG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIElEIHRhYmxlICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGlidXNiX2RpYjMwMDBtYl90YWJsZSBbXSA9IHsKLS8qIDAwICovCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLAkJVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0JfQ09MRCl9LAotLyogMDEgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsCQlVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQl9XQVJNKX0sCisvKiAwMCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywJCVVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX0NPTEQpIH0sCisvKiAwMSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywJCVVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX1dBUk0pIH0sCiAvKiAwMiAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9DT01QUk8sCQlVU0JfUElEX0NPTVBST19EVkJVMjAwMF9DT0xEKSB9LAogLyogMDMgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQ09NUFJPLAkJVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfV0FSTSkgfSwKIC8qIDA0ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0NPTVBST19VTkssCVVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1VOS19DT0xEKSB9LAogLyogMDUgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLAkJVVNCX1BJRF9ESUJDT01fTU9EMzAwMF9DT0xEKSB9LAogLyogMDYgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLAkJVVNCX1BJRF9ESUJDT01fTU9EMzAwMF9XQVJNKSB9LAotLyogMDcgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRU1QSUEsCQkJVVNCX1BJRF9LV09STERfVlNUUkVBTV9DT0xEKSB9LAotLyogMDggKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRU1QSUEsCQkJVVNCX1BJRF9LV09STERfVlNUUkVBTV9XQVJNKSB9LAorLyogMDcgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRU1QSUEsCQlVU0JfUElEX0tXT1JMRF9WU1RSRUFNX0NPTEQpIH0sCisvKiAwOCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9FTVBJQSwJCVVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fV0FSTSkgfSwKIC8qIDA5ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0dSQU5EVEVDLAkJVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xEKSB9LAogLyogMTAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfR1JBTkRURUMsCQlVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX1dBUk0pIH0sCiAvKiAxMSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9HUkFORFRFQywJCVVTQl9QSURfRElCQ09NX01PRDMwMDBfQ09MRCkgfSwKQEAgLTExNywyNyArMTE3LDM0IEBACiAvKiAxNiAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLAlVU0JfUElEX1RXSU5IQU5fVlA3MDQxX1dBUk0pIH0sCiAvKiAxNyAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9UV0lOSEFOLAkJVVNCX1BJRF9UV0lOSEFOX1ZQNzA0MV9DT0xEKSB9LAogLyogMTggKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVFdJTkhBTiwJCVVTQl9QSURfVFdJTkhBTl9WUDcwNDFfV0FSTSkgfSwKLS8qIDE5ICovCXsgVVNCX0RFVklDRShVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDLCBVU0JfUElEX1VMVElNQV9UVkJPWF9DT0xEKSB9LAotLyogMjAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsIFVTQl9QSURfVUxUSU1BX1RWQk9YX1dBUk0pIH0sCi0vKiAyMSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X0NPTEQpIH0sCi0vKiAyMiAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X1dBUk0pIH0sCisvKiAxOSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywJVVNCX1BJRF9VTFRJTUFfVFZCT1hfQ09MRCkgfSwKKy8qIDIwICovCXsgVVNCX0RFVklDRShVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDLAlVU0JfUElEX1VMVElNQV9UVkJPWF9XQVJNKSB9LAorLyogMjEgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsCVVTQl9QSURfVUxUSU1BX1RWQk9YX0FOMjIzNV9DT0xEKSB9LAorLyogMjIgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsCVVTQl9QSURfVUxUSU1BX1RWQk9YX0FOMjIzNV9XQVJNKSB9LAogLyogMjMgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQURTVEVDSCwJCVVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQpIH0sCiAKIC8qIGRldmljZSBJRCB3aXRoIGRlZmF1bHQgRElCVVNCMl8wLWZpcm13YXJlIGFuZCB3aXRoIHRoZSBoYWNrZWQgZmlybXdhcmUgKi8KIC8qIDI0ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0FEU1RFQ0gsCQlVU0JfUElEX0FEU1RFQ0hfVVNCMl9XQVJNKSB9LAotLyogMjUgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfS1lFLAkJCVVTQl9QSURfS1lFX0RWQl9UX0NPTEQpIH0sCi0vKiAyNiAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9LWUUsCQkJVVNCX1BJRF9LWUVfRFZCX1RfV0FSTSkgfSwKKy8qIDI1ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0tZRSwJCVVTQl9QSURfS1lFX0RWQl9UX0NPTEQpIH0sCisvKiAyNiAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9LWUUsCQlVU0JfUElEX0tZRV9EVkJfVF9XQVJNKSB9LAogCiAvKiAyNyAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STEQsCQlVU0JfUElEX0tXT1JMRF9WU1RSRUFNX0NPTEQpIH0sCiAKLS8qIDI4ICovCXsgVVNCX0RFVklDRShVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDLAkJVVNCX1BJRF9VTFRJTUFfVFZCT1hfVVNCMl9DT0xEKSB9LAotLyogMjkgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsCQlVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX1dBUk0pIH0sCisvKiAyOCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywJVVNCX1BJRF9VTFRJTUFfVFZCT1hfVVNCMl9DT0xEKSB9LAorLyogMjkgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsCVVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfV0FSTSkgfSwKIAotLy8gI2RlZmluZSBEVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFlfVVNCX0lEcworLyoKKyAqIFhYWDogQXMgQXJ0ZWMganVzdCAnZm9yZ290JyB0byBwcm9ncmFtIHRoZSBFRVBST00gb24gc29tZSBBcnRlYyBUMSBkZXZpY2VzCisgKiAgICAgIHdlIGRvbid0IGNhdGNoIHRoZXNlIGZhdWx0eSBJRHMgKG5hbWVseSAnQ3lwcmVzcyBGWDEgVVNCIGNvbnRyb2xsZXInKSB0aGF0CisgKiAgICAgIGhhdmUgYmVlbiBsZWZ0IG9uIHRoZSBkZXZpY2UuIElmIHlvdSBkb24ndCBoYXZlIHN1Y2ggYSBkZXZpY2UgYnV0IGFuIEFydGVjCisgKiAgICAgIGRldmljZSB0aGF0J3Mgc3VwcG9zZWQgdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyIGJ1dCBpcyBub3QgZGV0ZWN0ZWQgYnkgaXQsCisgKiAgICAgIGZyZWUgdG8gZW5hYmxlIENPTkZJR19EVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFkgdmlhIHlvdXIga2VybmVsIGNvbmZpZy4KKyAqLwogCi0jaWZkZWYgRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZX1VTQl9JRHMKKyNpZmRlZiBDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZCiAvKiAzMCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BTkNIT1IsCQlVU0JfUElEX1VMVElNQV9UVkJPWF9BTkNIT1JfQ09MRCkgfSwKICNlbmRpZgorCiAJCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkaWJ1c2JfZGliMzAwMG1iX3RhYmxlKTsKQEAgLTI1Nyw3ICsyNjQsNyBAQAogCQl9CiAJfSwKIAotI2lmZGVmIERWQl9VU0JfRElCVVNCX01CX0ZBVUxUWV9VU0JfSURzCisjaWZkZWYgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWQogCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKICNlbHNlCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLApAQCAtMjY3LDExICsyNzQsMTIgQEAKIAkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjBdLCBOVUxMIH0sCiAJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzIxXSwgTlVMTCB9LAogCQl9LAotI2lmZGVmIERWQl9VU0JfRElCVVNCX01CX0ZBVUxUWV9VU0JfSURzCisjaWZkZWYgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWQogCQl7CSJBcnRlYyBUMSBVU0IxLjEgVFZCT1ggd2l0aCBBTjIyMzUgKGZhdWx0eSBVU0IgSURzKSIsCiAJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzMwXSwgTlVMTCB9LAogCQkJeyBOVUxMIH0sCiAJCX0sCisJCXsgTlVMTCB9LAogI2VuZGlmCiAJfQogfTsKQEAgLTMyMyw2ICszMzEsNyBAQAogCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyN10sIE5VTEwgfSwKIAkJCXsgTlVMTCB9CiAJCX0sCisJCXsgTlVMTCB9LAogCX0KIH07CiAKQEAgLTM2OSw2ICszNzgsNyBAQAogCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyOF0sIE5VTEwgfSwKIAkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjldLCBOVUxMIH0sCiAJCX0sCisJCXsgTlVMTCB9LAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCmluZGV4IDQ1MDQxN2EuLmU2YzU1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwpAQCAtMzIsNyArMzIsNyBAQAogCXNuZGJ1ZlsxXSA9IHZ2OwogCXNuZGJ1ZlsyXSA9IHdvID8gd2xlbiA6IHJsZW47CiAKLQlpZiAoIXdvKSB7CisJaWYgKHdvKSB7CiAJCW1lbWNweSgmc25kYnVmWzNdLHdidWYsd2xlbik7CiAJCWR2Yl91c2JfZ2VuZXJpY193cml0ZShkLHNuZGJ1Ziw3KTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwppbmRleCA2ZTJiYWM4Li4xMzBlYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCSAgLmNvbGRfaWRzID0geyAmZHR0MjAwdV91c2JfdGFibGVbMF0sIE5VTEwgfSwKIAkJICAud2FybV9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVsxXSwgTlVMTCB9LAogCQl9LAotCQl7IE5VTEwgfSwKKwkJeyAwIH0sCiAJfQogfTsKIApAQCAtMTYwLDcgKzE2MCw3IEBACiAJLnBpZF9maWx0ZXJfY291bnQgPSAxNSwKIAogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAotCS5maXJtd2FyZSA9ICJkdmItdXNiLXd0MjIwdS0wMS5mdyIsCisJLmZpcm13YXJlID0gImR2Yi11c2Itd3QyMjB1LTAyLmZ3IiwKIAogCS5wb3dlcl9jdHJsICAgICAgPSBkdHQyMDB1X3Bvd2VyX2N0cmwsCiAJLnN0cmVhbWluZ19jdHJsICA9IGR0dDIwMHVfc3RyZWFtaW5nX2N0cmwsCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJICAuY29sZF9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVsyXSwgTlVMTCB9LAogCQkgIC53YXJtX2lkcyA9IHsgJmR0dDIwMHVfdXNiX3RhYmxlWzNdLCBOVUxMIH0sCiAJCX0sCi0JCXsgTlVMTCB9LAorCQl7IDAgfSwKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5oCmluZGV4IDZmMWYzMDQuLjAwNWIwYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIF9EVkJfVVNCX0RUVDIwMFVfSF8KIAogI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImR0dDIwMHUiCisKICNpbmNsdWRlICJkdmItdXNiLmgiCiAKIGV4dGVybiBpbnQgZHZiX3VzYl9kdHQyMDB1X2RlYnVnOwpAQCAtMjUsMTUgKzI2LDE1IEBACiAgKiAgODggLSBsb2NraW5nIDIgYnl0ZXMgKDB4ODAgMHg0MCA9PSBubyBzaWduYWwsIDB4ODkgMHgyMCA9PSBuaWNlIHNpZ25hbCkKICAqLwogCi0jZGVmaW5lIEdFVF9TUEVFRCAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgR0VUX1RVTkVfU1RBVFVTICAgICAgMHg4MQotI2RlZmluZSBHRVRfUkNfQ09ERSAgICAgICAgICAweDg0Ci0jZGVmaW5lIEdFVF9DT05GSUdVUkFUSU9OICAgIDB4ODgKLSNkZWZpbmUgR0VUX0FHQyAgICAgICAgICAgICAgMHg4OQotI2RlZmluZSBHRVRfU05SICAgICAgICAgICAgICAweDhhCi0jZGVmaW5lIEdFVF9WSVRfRVJSX0NOVCAgICAgIDB4OGMKLSNkZWZpbmUgR0VUX1JTX0VSUl9DTlQgICAgICAgMHg4ZAotI2RlZmluZSBHRVRfUlNfVU5DT1JfQkxLX0NOVCAweDhlCisjZGVmaW5lIEdFVF9TUEVFRAkJMHgwMAorI2RlZmluZSBHRVRfVFVORV9TVEFUVVMJCTB4ODEKKyNkZWZpbmUgR0VUX1JDX0NPREUJCTB4ODQKKyNkZWZpbmUgR0VUX0NPTkZJR1VSQVRJT04JMHg4OAorI2RlZmluZSBHRVRfQUdDCQkJMHg4OQorI2RlZmluZSBHRVRfU05SCQkJMHg4YQorI2RlZmluZSBHRVRfVklUX0VSUl9DTlQJCTB4OGMKKyNkZWZpbmUgR0VUX1JTX0VSUl9DTlQJCTB4OGQKKyNkZWZpbmUgR0VUX1JTX1VOQ09SX0JMS19DTlQJMHg4ZQogCiAvKiB3cml0ZQogICogIDAxIC0gaW5pdApAQCAtNDQsMTIgKzQ1LDEyIEBACiAgKiAgMDggLSB0cmFuc2ZlciBzd2l0Y2gKICAqLwogCi0jZGVmaW5lIFNFVF9JTklUICAgICAgICAgMHgwMQotI2RlZmluZSBTRVRfUkZfRlJFUSAgICAgIDB4MDIKLSNkZWZpbmUgU0VUX0JBTkRXSURUSCAgICAweDAzCi0jZGVmaW5lIFNFVF9QSURfRklMVEVSICAgMHgwNAotI2RlZmluZSBSRVNFVF9QSURfRklMVEVSIDB4MDUKLSNkZWZpbmUgU0VUX1NUUkVBTUlORyAgICAweDA4CisjZGVmaW5lIFNFVF9JTklUCQkweDAxCisjZGVmaW5lIFNFVF9SRl9GUkVRCQkweDAyCisjZGVmaW5lIFNFVF9CQU5EV0lEVEgJCTB4MDMKKyNkZWZpbmUgU0VUX1BJRF9GSUxURVIJCTB4MDQKKyNkZWZpbmUgUkVTRVRfUElEX0ZJTFRFUgkweDA1CisjZGVmaW5lIFNFVF9TVFJFQU1JTkcJCTB4MDgKIAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkdHQyMDB1X2ZlX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItY29tbW9uLmgKaW5kZXggNzMwMDQ4OS4uYTM0NjBiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1jb21tb24uaApAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBkZWJfbWVtKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfZGVidWcsMHg4MCxhcmdzKQogCiAvKiBjb21tb25seSB1c2VkICBtZXRob2RzICovCi1leHRlcm4gaW50IHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBkdmJfdXNiX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICosIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgKik7CiAKIGV4dGVybiBpbnQgZHZiX3VzYl91cmJfc3VibWl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKTsKIGV4dGVybiBpbnQgZHZiX3VzYl91cmJfa2lsbChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1maXJtd2FyZS5jCmluZGV4IDUyNDRlMzkuLjg1MzU4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1maXJtd2FyZS5jCkBAIC05LDcgKzksNiBAQAogICovCiAjaW5jbHVkZSAiZHZiLXVzYi1jb21tb24uaCIKIAotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKIHN0cnVjdCB1c2JfY3lwcmVzc19jb250cm9sbGVyIHsKQEAgLTE5LDkgKzE4LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jeXByZXNzX2NvbnRyb2xsZXIgY3lwcmVzc1tdID0gewotCXsgLmlkID0gQ1lQUkVTU19BTjIxMzUsIC5uYW1lID0gIkN5cHJlc3MgQU4yMTM1IiwgLmNwdV9jc19yZWdpc3RlciA9IDB4N2Y5MiB9LAotCXsgLmlkID0gQ1lQUkVTU19BTjIyMzUsIC5uYW1lID0gIkN5cHJlc3MgQU4yMjM1IiwgLmNwdV9jc19yZWdpc3RlciA9IDB4N2Y5MiB9LAotCXsgLmlkID0gQ1lQUkVTU19GWDIsICAgIC5uYW1lID0gIkN5cHJlc3MgRlgyIiwgICAgLmNwdV9jc19yZWdpc3RlciA9IDB4ZTYwMCB9LAorCXsgLmlkID0gREVWSUNFX1NQRUNJRklDLCAubmFtZSA9ICJEZXZpY2Ugc3BlY2lmaWMiLCAuY3B1X2NzX3JlZ2lzdGVyID0gMCB9LAorCXsgLmlkID0gQ1lQUkVTU19BTjIxMzUsICAubmFtZSA9ICJDeXByZXNzIEFOMjEzNSIsICAuY3B1X2NzX3JlZ2lzdGVyID0gMHg3ZjkyIH0sCisJeyAuaWQgPSBDWVBSRVNTX0FOMjIzNSwgIC5uYW1lID0gIkN5cHJlc3MgQU4yMjM1IiwgIC5jcHVfY3NfcmVnaXN0ZXIgPSAweDdmOTIgfSwKKwl7IC5pZCA9IENZUFJFU1NfRlgyLCAgICAgLm5hbWUgPSAiQ3lwcmVzcyBGWDIiLCAgICAgLmNwdV9jc19yZWdpc3RlciA9IDB4ZTYwMCB9LAogfTsKIAogLyoKQEAgLTMwLDcxICszMCwxMTcgQEAKIHN0YXRpYyBpbnQgdXNiX2N5cHJlc3Nfd3JpdGVtZW0oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsdTE2IGFkZHIsdTggKmRhdGEsIHU4IGxlbikKIHsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LDApLAotCQkJMHhhMCwgVVNCX1RZUEVfVkVORE9SLCBhZGRyLCAweDAwLCBkYXRhLCBsZW4sIDUqSFopOworCQkJMHhhMCwgVVNCX1RZUEVfVkVORE9SLCBhZGRyLCAweDAwLCBkYXRhLCBsZW4sIDUwMDApOwogfQogCi1pbnQgdXNiX2N5cHJlc3NfbG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCB0eXBlKQoraW50IHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGludCB0eXBlKQogewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwotCXUxNiBhZGRyOwotCXU4ICpiLCpwOwotCWludCByZXQgPSAwLGk7CisJc3RydWN0IGhleGxpbmUgaHg7CisJdTggcmVzZXQ7CisJaW50IHJldCxwb3M9MDsKIAotCWlmICgocmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGVuYW1lLCAmdWRldi0+ZGV2KSkgIT0gMCkgewotCQllcnIoImRpZCBub3QgZmluZCB0aGUgZmlybXdhcmUgZmlsZS4gKCVzKSAiCi0JCQkiUGxlYXNlIHNlZSBsaW51eC9Eb2N1bWVudGF0aW9uL2R2Yi8gZm9yIG1vcmUgZGV0YWlscyBvbiBmaXJtd2FyZS1wcm9ibGVtcy4iLAotCQkJZmlsZW5hbWUpOworCS8qIHN0b3AgdGhlIENQVSAqLworCXJlc2V0ID0gMTsKKwlpZiAoKHJldCA9IHVzYl9jeXByZXNzX3dyaXRlbWVtKHVkZXYsY3lwcmVzc1t0eXBlXS5jcHVfY3NfcmVnaXN0ZXIsJnJlc2V0LDEpKSAhPSAxKQorCQllcnIoImNvdWxkIG5vdCBzdG9wIHRoZSBVU0IgY29udHJvbGxlciBDUFUuIik7CisKKwl3aGlsZSAoKHJldCA9IGR2Yl91c2JfZ2V0X2hleGxpbmUoZncsJmh4LCZwb3MpKSA+IDApIHsKKwkJZGViX2Z3KCJ3cml0aW5nIHRvIGFkZHJlc3MgMHglMDR4IChidWZmZXI6IDB4JTAyeCAlMDJ4KVxuIixoeC5hZGRyLGh4LmxlbixoeC5jaGspOworCQlyZXQgPSB1c2JfY3lwcmVzc193cml0ZW1lbSh1ZGV2LGh4LmFkZHIsaHguZGF0YSxoeC5sZW4pOworCisJCWlmIChyZXQgIT0gaHgubGVuKSB7CisJCQllcnIoImVycm9yIHdoaWxlIHRyYW5zZmVycmluZyBmaXJtd2FyZSAiCisJCQkJIih0cmFuc2ZlcnJlZCBzaXplOiAlZCwgYmxvY2sgc2l6ZTogJWQpIiwKKwkJCQlyZXQsaHgubGVuKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmV0IDwgMCkgeworCQllcnIoImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZCBhdCAlZCB3aXRoICVkIixwb3MscmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpbmZvKCJkb3dubG9hZGluZyBmaXJtd2FyZSBmcm9tIGZpbGUgJyVzJyB0byB0aGUgJyVzJyIsZmlsZW5hbWUsY3lwcmVzc1t0eXBlXS5uYW1lKTsKLQotCXAgPSBrbWFsbG9jKGZ3LT5zaXplLEdGUF9LRVJORUwpOwotCWlmIChwICE9IE5VTEwpIHsKLQkJdTggcmVzZXQ7Ci0JCS8qCi0JCSAqIHlvdSBjYW5ub3QgdXNlIHRoZSBmdy0+ZGF0YSBhcyBidWZmZXIgZm9yCi0JCSAqIHVzYl9jb250cm9sX21zZywgYSBuZXcgYnVmZmVyIGhhcyB0byBiZQotCQkgKiBjcmVhdGVkCi0JCSAqLwotCQltZW1jcHkocCxmdy0+ZGF0YSxmdy0+c2l6ZSk7Ci0KLQkJLyogc3RvcCB0aGUgQ1BVICovCi0JCXJlc2V0ID0gMTsKLQkJaWYgKChyZXQgPSB1c2JfY3lwcmVzc193cml0ZW1lbSh1ZGV2LGN5cHJlc3NbdHlwZV0uY3B1X2NzX3JlZ2lzdGVyLCZyZXNldCwxKSkgIT0gMSkKLQkJCWVycigiY291bGQgbm90IHN0b3AgdGhlIFVTQiBjb250cm9sbGVyIENQVS4iKTsKLQkJZm9yKGkgPSAwOyBwW2krM10gPT0gMCAmJiBpIDwgZnctPnNpemU7ICkgewotCQkJYiA9ICh1OCAqKSAmcFtpXTsKLQkJCWFkZHIgPSBjcHVfdG9fbGUxNiggKigodTE2ICopICZiWzFdKSApOwotCi0JCQlkZWJfZncoIndyaXRpbmcgdG8gYWRkcmVzcyAweCUwNHggKGJ1ZmZlcjogMHglMDJ4JTAyeClcbiIsYWRkcixiWzFdLGJbMl0pOwotCi0JCQlyZXQgPSB1c2JfY3lwcmVzc193cml0ZW1lbSh1ZGV2LGFkZHIsJmJbNF0sYlswXSk7Ci0KLQkJCWlmIChyZXQgIT0gYlswXSkgewotCQkJCWVycigiZXJyb3Igd2hpbGUgdHJhbnNmZXJyaW5nIGZpcm13YXJlICIKLQkJCQkJIih0cmFuc2ZlcnJlZCBzaXplOiAlZCwgYmxvY2sgc2l6ZTogJWQpIiwKLQkJCQkJcmV0LGJbMF0pOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpICs9IDUgKyBiWzBdOwotCQl9Ci0JCS8qIGxlbmd0aCBpbiByZXQgKi8KLQkJaWYgKHJldCA+IDApCi0JCQlyZXQgPSAwOworCWlmIChyZXQgPT0gMCkgewogCQkvKiByZXN0YXJ0IHRoZSBDUFUgKi8KIAkJcmVzZXQgPSAwOwogCQlpZiAocmV0IHx8IHVzYl9jeXByZXNzX3dyaXRlbWVtKHVkZXYsY3lwcmVzc1t0eXBlXS5jcHVfY3NfcmVnaXN0ZXIsJnJlc2V0LDEpICE9IDEpIHsKIAkJCWVycigiY291bGQgbm90IHJlc3RhcnQgdGhlIFVTQiBjb250cm9sbGVyIENQVS4iKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCX0KLQotCQlrZnJlZShwKTsKLQl9IGVsc2UgewotCQlyZXQgPSAtRU5PTUVNOwotCX0KLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTzsKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUpOworCitpbnQgZHZiX3VzYl9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyAqcHJvcHMpCit7CisJaW50IHJldDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKworCWlmICgocmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIHByb3BzLT5maXJtd2FyZSwgJnVkZXYtPmRldikpICE9IDApIHsKKwkJZXJyKCJkaWQgbm90IGZpbmQgdGhlIGZpcm13YXJlIGZpbGUuICglcykgIgorCQkJIlBsZWFzZSBzZWUgbGludXgvRG9jdW1lbnRhdGlvbi9kdmIvIGZvciBtb3JlIGRldGFpbHMgb24gZmlybXdhcmUtcHJvYmxlbXMuICglZCkiLAorCQkJcHJvcHMtPmZpcm13YXJlLHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaW5mbygiZG93bmxvYWRpbmcgZmlybXdhcmUgZnJvbSBmaWxlICclcyciLHByb3BzLT5maXJtd2FyZSk7CisKKwlzd2l0Y2ggKHByb3BzLT51c2JfY3RybCkgeworCQljYXNlIENZUFJFU1NfQU4yMTM1OgorCQljYXNlIENZUFJFU1NfQU4yMjM1OgorCQljYXNlIENZUFJFU1NfRlgyOgorCQkJcmV0ID0gdXNiX2N5cHJlc3NfbG9hZF9maXJtd2FyZSh1ZGV2LCBmdywgcHJvcHMtPnVzYl9jdHJsKTsKKwkJCWJyZWFrOworCQljYXNlIERFVklDRV9TUEVDSUZJQzoKKwkJCWlmIChwcm9wcy0+ZG93bmxvYWRfZmlybXdhcmUpCisJCQkJcmV0ID0gcHJvcHMtPmRvd25sb2FkX2Zpcm13YXJlKHVkZXYsZncpOworCQkJZWxzZSB7CisJCQkJZXJyKCJCVUc6IGRyaXZlciBkaWRuJ3Qgc3BlY2lmaWVkIGEgZG93bmxvYWRfZmlybXdhcmUtY2FsbGJhY2ssIGFsdGhvdWdoIGl0IGNsYWltcyB0byBoYXZlIGEgREVWSUNFX1NQRUNJRklDIG9uZS4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGR2Yl91c2JfZ2V0X2hleGxpbmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgc3RydWN0IGhleGxpbmUgKmh4LCBpbnQgKnBvcykKK3sKKwl1OCAqYiA9ICh1OCAqKSAmZnctPmRhdGFbKnBvc107CisJaW50IGRhdGFfb2ZmcyA9IDQ7CisJaWYgKCpwb3MgPj0gZnctPnNpemUpCisJCXJldHVybiAwOworCisJbWVtc2V0KGh4LDAsc2l6ZW9mKHN0cnVjdCBoZXhsaW5lKSk7CisKKwloeC0+bGVuICA9IGJbMF07CisKKwlpZiAoKCpwb3MgKyBoeC0+bGVuICsgNCkgPj0gZnctPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJaHgtPmFkZHIgPSBsZTE2X3RvX2NwdSggKigodTE2ICopICZiWzFdKSApOworCWh4LT50eXBlID0gYlszXTsKKworCWlmIChoeC0+dHlwZSA9PSAweDA0KSB7CisJCS8qIGJbNF0gYW5kIGJbNV0gYXJlIHRoZSBFeHRlbmRlZCBsaW5lYXIgYWRkcmVzcyByZWNvcmQgZGF0YSBmaWVsZCAqLworCQloeC0+YWRkciB8PSAoYls0XSA8PCAyNCkgfCAoYls1XSA8PCAxNik7CisvKgkJaHgtPmxlbiAtPSAyOworCQlkYXRhX29mZnMgKz0gMjsgKi8KKwl9CisJbWVtY3B5KGh4LT5kYXRhLCZiW2RhdGFfb2Zmc10saHgtPmxlbik7CisJaHgtPmNoayA9IGJbaHgtPmxlbiArIGRhdGFfb2Zmc107CisKKwkqcG9zICs9IGh4LT5sZW4gKyA1OworCisJcmV0dXJuICpwb3M7Cit9CitFWFBPUlRfU1lNQk9MKGR2Yl91c2JfZ2V0X2hleGxpbmUpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMKaW5kZXggZGE5NzA5NC4uOWIyNTQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pMmMuYwpAQCAtNTIsOSArNTIsOCBAQAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBkLT5wbGxfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGQtPnBsbF9pbml0LCAubGVuID0gNCB9OwogCWludCByZXQgPSAwOwogCi0JLyogaWYgdGhlcmUgaXMgbm90aGluZyB0byBpbml0aWFsaXplICovCi0JaWYgKGQtPnBsbF9pbml0WzBdID09IDB4MDAgJiYgZC0+cGxsX2luaXRbMV0gPT0gMHgwMCAmJgotCQlkLT5wbGxfaW5pdFsyXSA9PSAweDAwICYmIGQtPnBsbF9pbml0WzNdID09IDB4MDApCisJLyogaWYgcGxsX2Rlc2MgaXMgbm90IHVzZWQgKi8KKwlpZiAoZC0+cGxsX2Rlc2MgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZC0+dHVuZXJfcGFzc19jdHJsKQpAQCAtODAsNiArNzksOSBAQAogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGZlLT5kdmItPnByaXY7CiAKKwlpZiAoZC0+cGxsX2Rlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKIAlkZWJfcGxsKCJwbGwgYWRkcjogJXgsIGZyZXE6ICVkICVwXG4iLGQtPnBsbF9hZGRyLGZlcC0+ZnJlcXVlbmN5LGQtPnBsbF9kZXNjKTsKIAogCWJbMF0gPSBkLT5wbGxfYWRkciA8PCAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDZiZTk5ZTUuLmQyMjkzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTg2LDExICs4NiwxNSBAQAogI2RlZmluZSBVU0JfUElEX1dJTlRWX05PVkFfVF9VU0IyX0NPTEQJCTB4OTMwMAogI2RlZmluZSBVU0JfUElEX1dJTlRWX05PVkFfVF9VU0IyX1dBUk0JCTB4OTMwMQogI2RlZmluZSBVU0JfUElEX05FQlVMQV9ESUdJVFYJCQkJMHgwMjAxCi0jZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEdaMjAxCQkweGRiMDAKLSNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9USDc1NzkJCTB4ZGIxMAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHRFQJCQkweGQ4MjAKLSNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MR1oyMDFfMQkJMHhkYjAxCi0jZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfVEg3NTc5XzIJCTB4ZGIxMQorI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHMDY0Rl9DT0xECQkweGQ1MDAKKyNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MRzA2NEZfV0FSTQkJMHhkNTAxCisjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEdaMjAxX0NPTEQJCTB4ZGIwMAorI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHWjIwMV9XQVJNCQkweGRiMDEKKyNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9USDc1NzlfQ09MRAkJMHhkYjEwCisjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfVEg3NTc5X1dBUk0JCTB4ZGIxMQorI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RFRTE2MDFfQ09MRAkJMHhkYjUwCisjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfREVFMTYwMV9XQVJNCQkweGRiNTEKICNkZWZpbmUgVVNCX1BJRF9NRURJT05fTUQ5NTcwMAkJCQkweDA5MzIKICNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfQ09MRAkJCQkweDcwMWUKICNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfV0FSTQkJCQkweDcwMWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCmluZGV4IGRkOGUwYjkuLjJlMjMwNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwpAQCAtMTM4LDYgKzEzOCw5IEBACiAKIAlpbnQgcmV0ID0gLUVOT01FTSxjb2xkPTA7CiAKKwlpZiAoZHUgIT0gTlVMTCkKKwkJKmR1ID0gTlVMTDsKKwogCWlmICgoZGVzYyA9IGR2Yl91c2JfZmluZF9kZXZpY2UodWRldixwcm9wcywmY29sZCkpID09IE5VTEwpIHsKIAkJZGViX2Vycigic29tZXRoaW5nIHdlbnQgdmVyeSB3cm9uZywgZGV2aWNlIHdhcyBub3QgZm91bmQgaW4gY3VycmVudCBkZXZpY2UgbGlzdCAtIGxldCdzIHNlZSB3aGF0IGNvbWVzIG5leHQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNDUsMzkgKzE0OCw0MSBAQAogCiAJaWYgKGNvbGQpIHsKIAkJaW5mbygiZm91bmQgYSAnJXMnIGluIGNvbGQgc3RhdGUsIHdpbGwgdHJ5IHRvIGxvYWQgYSBmaXJtd2FyZSIsZGVzYy0+bmFtZSk7Ci0JCXJldCA9IHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUodWRldixwcm9wcy0+ZmlybXdhcmUscHJvcHMtPnVzYl9jdHJsKTsKLQl9IGVsc2UgewotCQlpbmZvKCJmb3VuZCBhICclcycgaW4gd2FybSBzdGF0ZS4iLGRlc2MtPm5hbWUpOwotCQlkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlKSxHRlBfS0VSTkVMKTsKLQkJaWYgKGQgPT0gTlVMTCkgewotCQkJZXJyKCJubyBtZW1vcnkgZm9yICdzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UnIik7CisJCXJldCA9IGR2Yl91c2JfZG93bmxvYWRfZmlybXdhcmUodWRldixwcm9wcyk7CisJCWlmICghcHJvcHMtPm5vX3JlY29ubmVjdCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KLQkJbWVtc2V0KGQsMCxzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlKSk7Ci0KLQkJZC0+dWRldiA9IHVkZXY7Ci0JCW1lbWNweSgmZC0+cHJvcHMscHJvcHMsc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMpKTsKLQkJZC0+ZGVzYyA9IGRlc2M7Ci0JCWQtPm93bmVyID0gb3duZXI7Ci0KLQkJaWYgKGQtPnByb3BzLnNpemVfb2ZfcHJpdiA+IDApIHsKLQkJCWQtPnByaXYgPSBrbWFsbG9jKGQtPnByb3BzLnNpemVfb2ZfcHJpdixHRlBfS0VSTkVMKTsKLQkJCWlmIChkLT5wcml2ID09IE5VTEwpIHsKLQkJCQllcnIoIm5vIG1lbW9yeSBmb3IgcHJpdiBpbiAnc3RydWN0IGR2Yl91c2JfZGV2aWNlJyIpOwotCQkJCWtmcmVlKGQpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJbWVtc2V0KGQtPnByaXYsMCxkLT5wcm9wcy5zaXplX29mX3ByaXYpOwotCQl9Ci0KLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkKTsKLQotCQlpZiAoZHUgIT0gTlVMTCkKLQkJCSpkdSA9IGQ7Ci0KLQkJcmV0ID0gZHZiX3VzYl9pbml0KGQpOwogCX0KIAorCWluZm8oImZvdW5kIGEgJyVzJyBpbiB3YXJtIHN0YXRlLiIsZGVzYy0+bmFtZSk7CisJZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZSksR0ZQX0tFUk5FTCk7CisJaWYgKGQgPT0gTlVMTCkgeworCQllcnIoIm5vIG1lbW9yeSBmb3IgJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWVtc2V0KGQsMCxzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlKSk7CisKKwlkLT51ZGV2ID0gdWRldjsKKwltZW1jcHkoJmQtPnByb3BzLHByb3BzLHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzKSk7CisJZC0+ZGVzYyA9IGRlc2M7CisJZC0+b3duZXIgPSBvd25lcjsKKworCWlmIChkLT5wcm9wcy5zaXplX29mX3ByaXYgPiAwKSB7CisJCWQtPnByaXYgPSBrbWFsbG9jKGQtPnByb3BzLnNpemVfb2ZfcHJpdixHRlBfS0VSTkVMKTsKKwkJaWYgKGQtPnByaXYgPT0gTlVMTCkgeworCQkJZXJyKCJubyBtZW1vcnkgZm9yIHByaXYgaW4gJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKKwkJCWtmcmVlKGQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGQtPnByaXYsMCxkLT5wcm9wcy5zaXplX29mX3ByaXYpOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZCk7CisKKwlpZiAoZHUgIT0gTlVMTCkKKwkJKmR1ID0gZDsKKworCXJldCA9IGR2Yl91c2JfaW5pdChkKTsKKwogCWlmIChyZXQgPT0gMCkKIAkJaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFuZCBjb25uZWN0ZWQuIixkZXNjLT5uYW1lKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IGI0YTFhOTguLmRkNTY4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC0xMCw4ICsxMCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKQEAgLTk0LDcgKzk0LDExIEBACiAgKiBAdXNiX2N0cmw6IHdoaWNoIFVTQiBkZXZpY2Utc2lkZSBjb250cm9sbGVyIGlzIGluIHVzZS4gTmVlZGVkIGZvciBmaXJtd2FyZQogICogIGRvd25sb2FkLgogICogQGZpcm13YXJlOiBuYW1lIG9mIHRoZSBmaXJtd2FyZSBmaWxlLgotICoKKyAqIEBkb3dubG9hZF9maXJtd2FyZTogY2FsbGVkIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSB3aGVuIHRoZSB1c2JfY3RybCBpcworICogIERFVklDRV9TUEVDSUZJQy4KKyAqIEBub19yZWNvbm5lY3Q6IGRldmljZSBkb2Vzbid0IGRvIGEgcmVjb25uZWN0IGFmdGVyIGRvd25sb2FkaW5nIHRoZSBmaXJtd2FyZSwKKyAgICBzbyBkbyB0aGUgd2FybSBpbml0aWFsaXphdGlvbiByaWdodCBhZnRlciBpdAorCiAgKiBAc2l6ZV9vZl9wcml2OiBob3cgbWFueSBieXRlcyBzaGFsbCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBwcml2YXRlIGZpZWxkCiAgKiAgb2Ygc3RydWN0IGR2Yl91c2JfZGV2aWNlLgogICoKQEAgLTE0MiwxMSArMTQ2LDE0IEBACiAJaW50IGNhcHM7CiAJaW50IHBpZF9maWx0ZXJfY291bnQ7CiAKLSNkZWZpbmUgQ1lQUkVTU19BTjIxMzUgIDAKLSNkZWZpbmUgQ1lQUkVTU19BTjIyMzUgIDEKLSNkZWZpbmUgQ1lQUkVTU19GWDIgICAgIDIKKyNkZWZpbmUgREVWSUNFX1NQRUNJRklDIDAKKyNkZWZpbmUgQ1lQUkVTU19BTjIxMzUgIDEKKyNkZWZpbmUgQ1lQUkVTU19BTjIyMzUgIDIKKyNkZWZpbmUgQ1lQUkVTU19GWDIgICAgIDMKIAlpbnQgdXNiX2N0cmw7Ci0JY29uc3QgY2hhciAqZmlybXdhcmU7CisJY29uc3QgY2hhciBmaXJtd2FyZVtGSVJNV0FSRV9OQU1FX01BWF07CisJaW50ICgqZG93bmxvYWRfZmlybXdhcmUpIChzdHJ1Y3QgdXNiX2RldmljZSAqLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKik7CisJaW50IG5vX3JlY29ubmVjdDsKIAogCWludCBzaXplX29mX3ByaXY7CiAKQEAgLTMyNiw1ICszMzMsMTUgQEAKIGV4dGVybiBpbnQgZHZiX3VzYl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICosIHU4W10pOwogZXh0ZXJuIGludCBkdmJfdXNiX3BsbF9zZXRfaTJjKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICopOwogCisvKiBjb21tb25seSB1c2VkIGZpcm13YXJlIGRvd25sb2FkIHR5cGVzIGFuZCBmdW5jdGlvbiAqLworc3RydWN0IGhleGxpbmUgeworCXU4IGxlbjsKKwl1MzIgYWRkcjsKKwl1OCB0eXBlOworCXU4IGRhdGFbMjU1XTsKKwl1OCBjaGs7Cit9OworZXh0ZXJuIGludCBkdmJfdXNiX2dldF9oZXhsaW5lKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqLCBzdHJ1Y3QgaGV4bGluZSAqLCBpbnQgKik7CitleHRlcm4gaW50IHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGludCB0eXBlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKaW5kZXggZmFjNDhmYy4uNDEyMDM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwpAQCAtMTI5LDEwICsxMjksNiBAQAogCQlkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShkLGksICZiKTsKIAogCQltYWNbNSAtIChpIC0gMTM2KV0gPSBiOwotCi0vKgkJZGViX2VlKCIlMDJ4ICIsYik7Ci0JCWlmICgoaSsxKSAlIDE2ID09IDApCi0JCQlkZWJfZWUoIlxuIik7Ki8KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE1Myw3ICsxNDksNyBAQAogLyogMDEgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCAgICAgVVNCX1BJRF9XSU5UVl9OT1ZBX1RfVVNCMl9XQVJNKSB9LAogCQkJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbm92YV90X3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBub3ZhX3RfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBub3ZhX3RfcHJvcGVydGllcyA9IHsKIAkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLApAQCAtMTk4LDYgKzE5NCw3IEBACiAJCQl7ICZub3ZhX3RfdGFibGVbMF0sIE5VTEwgfSwKIAkJCXsgJm5vdmFfdF90YWJsZVsxXSwgTlVMTCB9LAogCQl9LAorCQl7IE5VTEwgfSwKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYwppbmRleCAxMDRiNWQwLi4wODg1ZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogfQogCiBzdGF0aWMgaW50IHZwNzAyeF9mZV9zZW5kX2Rpc2VxY19tc2cgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJICAgICAgICAgICAgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqbSkKKwkJCQkgICAgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqbSkKIHsKIAlzdHJ1Y3QgdnA3MDJ4X2ZlX3N0YXRlICpzdCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IGNtZFs4XSxpYnVmWzEwXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5oCmluZGV4IDRhM2U4YzcuLmE4MDhkNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguaApAQCAtMTMsNDcgKzEzLDQ3IEBACiAvKiBjb21tYW5kcyBhcmUgcmVhZCBhbmQgd3JpdHRlbiB3aXRoIFVTQiBjb250cm9sIG1lc3NhZ2VzICovCiAKIC8qIGNvbnNlY3V0aXZlIHJlYWQvd3JpdGUgb3BlcmF0aW9uICovCi0jZGVmaW5lIFJFUVVFU1RfT1VUICAgICAgIDB4QjIKLSNkZWZpbmUgUkVRVUVTVF9JTgkJICAweEIzCisjZGVmaW5lIFJFUVVFU1RfT1VUCQkweEIyCisjZGVmaW5lIFJFUVVFU1RfSU4JCTB4QjMKIAogLyogdGhlIG91dC1idWZmZXIgb2YgdGhlc2UgY29uc2VjdXRpdmUgb3BlcmF0aW9ucyBjb250YWluIHN1Yi1jb21tYW5kcyB3aGVuIGJbMF0gPSAwCiAgKiByZXF1ZXN0OiAweEIyOyBpOiAwOyB2OiAwOyBiWzBdID0gMCwgYlsxXSA9IHN1YmNtZCwgYWRkaXRpb25hbCBidWZmZXIKICAqIHRoZSByZXR1cm5pbmcgYnVmZmVyIGxvb2tzIGFzIGZvbGxvd3MKICAqIHJlcXVlc3Q6IDB4QjM7IGk6IDA7IHY6IDA7IGJbMF0gPSAweEIzLCBhZGRpdGlvbmFsIGJ1ZmZlciAqLwogCi0jZGVmaW5lIEdFVF9UVU5FUl9TVEFUVVMgIDB4MDUKKyNkZWZpbmUgR0VUX1RVTkVSX1NUQVRVUwkweDA1CiAvKiBhZGRpdGlvbmFsIGluIGJ1ZmZlcjoKICAqIDAgICAxICAgMiAgICAzICAgICAgICAgICAgICA0ICAgNSAgIDYgICAgICAgICAgICAgICA3ICAgICAgIDgKICAqIE4vQSBOL0EgMHgwNSBzaWduYWwtcXVhbGl0eSBOL0EgTi9BIHNpZ25hbC1zdHJlbmd0aCBsb2NrPT0wIE4vQSAqLwogCi0jZGVmaW5lIEdFVF9TWVNURU1fU1RSSU5HIDB4MDYKKyNkZWZpbmUgR0VUX1NZU1RFTV9TVFJJTkcJMHgwNgogLyogYWRkaXRpb25hbCBpbiBidWZmZXI6CiAgKiAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDgKICAqIE4vQSAnVScgJ1MnICdCJyAnNycgJzAnICcyJyAnWCcgTi9BICovCiAKLSNkZWZpbmUgU0VUX0RJU0VRQ19DTUQgICAgMHgwOAorI2RlZmluZSBTRVRfRElTRVFDX0NNRAkJMHgwOAogLyogYWRkaXRpb25hbCBvdXQgYnVmZmVyOgogICogMCAgICAxICAyICAzICA0CiAgKiBsZW4gIFgxIFgyIFgzIFg0CiAgKiBhZGRpdGlvbmFsIGluIGJ1ZmZlcjoKICAqIDAgICAxIDIKLSAqIE4vQSAwIDAgICBiWzFdID09IGJbMl0gPT0gMCAtPiBzdWNjZXNzIG90aGVyd2lzZSBub3QgKi8KKyAqIE4vQSAwIDAgICBiWzFdID09IGJbMl0gPT0gMCAtPiBzdWNjZXNzLCBmYWlsdXJlIG90aGVyd2lzZSAqLwogCi0jZGVmaW5lIFNFVF9MTkJfUE9XRVIgICAgIDB4MDkKKyNkZWZpbmUgU0VUX0xOQl9QT1dFUgkJMHgwOQogLyogYWRkaXRpb25hbCBvdXQgYnVmZmVyOgogICogMCAgICAxICAgIDIKICAqIDB4MDAgMHhmZiAxID0gb24sIDAgPSBvZmYKICAqIGFkZGl0aW9uYWwgaW4gYnVmZmVyOgogICogMCAgIDEgMgotICogTi9BIDAgMCAgIGJbMV0gPT0gYlsyXSA9PSAwIC0+IHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5vdCAqLworICogTi9BIDAgMCAgIGJbMV0gPT0gYlsyXSA9PSAwIC0+IHN1Y2Nlc3MgZmFpbHVyZSBvdGhlcndpc2UgKi8KIAotI2RlZmluZSBHRVRfTUFDX0FERFJFU1MgICAweDBBCisjZGVmaW5lIEdFVF9NQUNfQUREUkVTUwkJMHgwQQogLyogI2RlZmluZSBHRVRfTUFDX0FERFJFU1MgICAweDBCICovCiAvKiBhZGRpdGlvbmFsIGluIGJ1ZmZlcjoKICAqIDAgICAxICAgMiAgICAgICAgICAgIDMgICAgNCAgICA1ICAgIDYgICAgNyAgICA4CiAgKiBOL0EgTi9BIDB4MEEgb3IgMHgwQiBNQUMwIE1BQzEgTUFDMiBNQUMzIE1BQzQgTUFDNSAqLwogCi0jZGVmaW5lIFNFVF9QSURfRklMVEVSICAgIDB4MTEKKyNkZWZpbmUgU0VUX1BJRF9GSUxURVIJCTB4MTEKIC8qIGFkZGl0aW9uYWwgaW4gYnVmZmVyOgogICogMCAgICAgICAgMSAgICAgICAgLi4uIDE0ICAgICAgIDE1ICAgICAgIDE2CiAgKiBQSUQwX01TQiBQSUQwX0xTQiAuLi4gUElEN19NU0IgUElEN19MU0IgUElEX2FjdGl2ZSAoYml0cykgKi8KQEAgLTY0LDM5ICs2NCwzOCBAQAogICogZnJlcTAgZnJlcTEgZGl2c3RlcCBzcmF0ZTAgc3JhdGUxIHNyYXRlMiBmbGFnIGNoa3N1bQogICovCiAKLQogLyogb25lIGRpcmVjdGlvbiByZXF1ZXN0cyAqLwotI2RlZmluZSBSRUFEX1JFTU9URV9SRVEgICAgICAgMHhCNAorI2RlZmluZSBSRUFEX1JFTU9URV9SRVEJCTB4QjQKIC8qIElOICBpOiAwOyB2OiAwOyBiWzBdID09IHJlcXVlc3QsIGJbMV0gPT0ga2V5ICovCiAKLSNkZWZpbmUgUkVBRF9QSURfTlVNQkVSX1JFUSAgIDB4QjUKKyNkZWZpbmUgUkVBRF9QSURfTlVNQkVSX1JFUQkweEI1CiAvKiBJTiAgaTogMDsgdjogMDsgYlswXSA9PSByZXF1ZXN0LCBiWzFdID09IDAsIGJbMl0gPSBwaWQgbnVtYmVyICovCiAKLSNkZWZpbmUgV1JJVEVfRUVQUk9NX1JFUSAgICAgIDB4QjYKKyNkZWZpbmUgV1JJVEVfRUVQUk9NX1JFUQkweEI2CiAvKiBPVVQgaTogb2Zmc2V0OyB2OiB2YWx1ZSB0byB3cml0ZTsgbm8gZXh0cmEgYnVmZmVyICovCiAKLSNkZWZpbmUgUkVBRF9FRVBST01fUkVRICAgICAgIDB4QjcKKyNkZWZpbmUgUkVBRF9FRVBST01fUkVRCQkweEI3CiAvKiBJTiAgaTogYnVmZmVybGVuOyB2OiBvZmZzZXQ7IGJ1ZmZlciB3aXRoIGJ1ZmZlcmxlbiBieXRlcyAqLwogCi0jZGVmaW5lIFJFQURfU1RBVFVTICAgICAgICAgICAweEI4CisjZGVmaW5lIFJFQURfU1RBVFVTCQkweEI4CiAvKiBJTiAgaTogMDsgdjogMDsgYnVmZmVybGVuIDEwICovCiAKLSNkZWZpbmUgUkVBRF9UVU5FUl9SRUdfUkVRICAgIDB4QjkKKyNkZWZpbmUgUkVBRF9UVU5FUl9SRUdfUkVRCTB4QjkKIC8qIElOICBpOiAwOyB2OiByZWdpc3RlcjsgYlswXSA9IHZhbHVlICovCiAKLSNkZWZpbmUgUkVBRF9GWDJfUkVHX1JFUSAgICAgIDB4QkEKKyNkZWZpbmUgUkVBRF9GWDJfUkVHX1JFUQkweEJBCiAvKiBJTiAgaTogb2Zmc2V0OyB2OiAwOyBiWzBdID0gdmFsdWUgKi8KIAotI2RlZmluZSBXUklURV9GWDJfUkVHX1JFUSAgICAgMHhCQgorI2RlZmluZSBXUklURV9GWDJfUkVHX1JFUQkweEJCCiAvKiBPVVQgaTogb2Zmc2V0OyB2OiB2YWx1ZSB0byB3cml0ZTsgMSBieXRlIGV4dHJhIGJ1ZmZlciAqLwogCi0jZGVmaW5lIFNFVF9UVU5FUl9QT1dFUl9SRVEgICAweEJDCisjZGVmaW5lIFNFVF9UVU5FUl9QT1dFUl9SRVEJMHhCQwogLyogSU4gIGk6IDAgPSBwb3dlciBvZmYsIDEgPSBwb3dlciBvbiAqLwogCi0jZGVmaW5lIFdSSVRFX1RVTkVSX1JFR19SRVEgICAweEJECisjZGVmaW5lIFdSSVRFX1RVTkVSX1JFR19SRVEJMHhCRAogLyogSU4gIGk6IHJlZ2lzdGVyLCB2OiB2YWx1ZSB0byB3cml0ZSwgbm8gZXh0cmEgYnVmZmVyICovCiAKLSNkZWZpbmUgUkVTRVRfVFVORVIgICAgICAgICAgIDB4QkUKKyNkZWZpbmUgUkVTRVRfVFVORVIJCTB4QkUKIC8qIElOICBpOiAwLCB2OiAwLCBubyBleHRyYSBidWZmZXIgKi8KIAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiB2cDcwMnhfZmVfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwppbmRleCAzODM1MjM1Li4wMjgyMDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQkgIC5jb2xkX2lkcyA9IHsgJnZwNzA0NV91c2JfdGFibGVbMl0sIE5VTEwgfSwKIAkJICAud2FybV9pZHMgPSB7ICZ2cDcwNDVfdXNiX3RhYmxlWzNdLCBOVUxMIH0sCiAJCX0sCi0JCXsgTlVMTCB9LAorCQl7IDAgfSwKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDhlMjY5ZTEuLmRiM2E4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0xNiw2ICsxNiwxMiBAQAogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9DWDI0MTIzCisJdHJpc3RhdGUgIkNvbmV4YW50IENYMjQxMjMgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQorCWhlbHAKKwkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29uZmlnIERWQl9UREE4MDgzCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBODA4MyBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCkBAIC01MCwxOCArNTYsMTkgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAKIGNvbmZpZyBEVkJfU1A4ODcwCi0gCXRyaXN0YXRlICJTcGFzZSBzcDg4NzAgYmFzZWQiCisJdHJpc3RhdGUgIlNwYXNlIHNwODg3MCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKLSAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIAkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCiAJICAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBzcDg4NzAiIHRvCi0JICBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUuCisJICBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUKKwkgIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogCiBjb25maWcgRFZCX1NQODg3WAotIAl0cmlzdGF0ZSAiU3Bhc2Ugc3A4ODd4IGJhc2VkIgorCXRyaXN0YXRlICJTcGFzZSBzcDg4N3ggYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCkBAIC02OSw3ICs3Niw4IEBACiAKIAkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCiAJICAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBzcDg4N3giIHRvCi0JICBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUuCisJICBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUKKwkgIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogCiBjb25maWcgRFZCX0NYMjI3MDAKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMjcwMCBiYXNlZCIKQEAgLTc4LDEwICs4NiwxMCBAQAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0NYMjI3MDIKLSAJdHJpc3RhdGUgIkNvbmV4YW50IGN4MjI3MDIgZGVtb2R1bGF0b3IgKE9GRE0pIgotIAlkZXBlbmRzIG9uIERWQl9DT1JFCi0gCWhlbHAKLSAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisJdHJpc3RhdGUgIkNvbmV4YW50IGN4MjI3MDIgZGVtb2R1bGF0b3IgKE9GRE0pIgorCWRlcGVuZHMgb24gRFZCX0NPUkUKKwloZWxwCisJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTDY0NzgxCiAJdHJpc3RhdGUgIkxTSSBMNjQ3ODEiCkBAIC05OCw4ICsxMDYsOSBAQAogCiAJICBUaGlzIGRyaXZlciBuZWVkcyBleHRlcm5hbCBmaXJtd2FyZS4gUGxlYXNlIHVzZSB0aGUgY29tbWFuZHMKIAkgICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIHRkYTEwMDQ1IiwKLSAgCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgdGRhMTAwNDYiIHRvCi0JICBkb3dubG9hZC9leHRyYWN0IHRoZW0sIGFuZCB0aGVuIGNvcHkgdGhlbSB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlLgorCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgdGRhMTAwNDYiIHRvCisJICBkb3dubG9hZC9leHRyYWN0IHRoZW0sIGFuZCB0aGVuIGNvcHkgdGhlbSB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlCisJICBvciAvbGliL2Zpcm13YXJlIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KIAogY29uZmlnIERWQl9OWFQ2MDAwCiAJdHJpc3RhdGUgIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUNjAwMCBiYXNlZCIKQEAgLTE0MCwxMyArMTQ5LDEzIEBACiAJdHJpc3RhdGUgIlZMU0kgVkVTMTgyMCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAJaGVscAotIAkgIEEgRFZCLUMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwkgIEEgRFZCLUMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9UREExMDAyMQogCXRyaXN0YXRlICJQaGlsaXBzIFREQTEwMDIxIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIAloZWxwCi0gCSAgQSBEVkItQyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCSAgQSBEVkItQyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX1NUVjAyOTcKIAl0cmlzdGF0ZSAiU1QgU1RWMDI5NyBiYXNlZCIKQEAgLTE2NCw2ICsxNzMsMTEgQEAKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorCSAgVGhpcyBkcml2ZXIgbmVlZHMgZXh0ZXJuYWwgZmlybXdhcmUuIFBsZWFzZSB1c2UgdGhlIGNvbW1hbmQKKwkgICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIG54dDIwMDIiIHRvCisJICBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUKKwkgIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgorCiBjb25maWcgRFZCX05YVDIwMFgKIAl0cmlzdGF0ZSAiTmV4dHdhdmUgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKQEAgLTE3Miw2ICsxODYsMTIgQEAKIAkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAogCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCisJICBUaGlzIGRyaXZlciBuZWVkcyBleHRlcm5hbCBmaXJtd2FyZS4gUGxlYXNlIHVzZSB0aGUgY29tbWFuZHMKKwkgICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIG54dDIwMDIiIGFuZAorCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgbnh0MjAwNCIgdG8KKwkgIGRvd25sb2FkL2V4dHJhY3QgdGhlbSwgYW5kIHRoZW4gY29weSB0aGVtIHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUKKwkgIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgorCiBjb25maWcgRFZCX09SNTEyMTEKIAl0cmlzdGF0ZSAib3I1MTIxMSBiYXNlZCAocGNIRFRWIEhEMjAwMCBjYXJkKSIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggYTk4NzYwZi4uNjE1ZWM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMzIsMyArMzIsNCBAQAogb2JqLSQoQ09ORklHX0RWQl9CQ00zNTEwKSArPSBiY20zNTEwLm8KIG9iai0kKENPTkZJR19EVkJfUzVIMTQyMCkgKz0gczVoMTQyMC5vCiBvYmotJChDT05GSUdfRFZCX0xHRFQzMzBYKSArPSBsZ2R0MzMweC5vCitvYmotJChDT05GSUdfRFZCX0NYMjQxMjMpICs9IGN4MjQxMjMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmMKaW5kZXggOGNlYjlhMy4uM2IxMzJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYmNtMzUxMC5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAliY20zNTEwX3JlZ2lzdGVyX3ZhbHVlIGI7CiAJaW50IHJldDsKIAotCWlmICgocmV0IDwgYmNtMzUxMF9yZWFkQihzdCwweGZhLCZiKSkgPCAwKQorCWlmICgocmV0ID0gYmNtMzUxMF9yZWFkQihzdCwweGZhLCZiKSkgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJYi5CRVJDVExfZmEuUkVTWU5DID0gMDsgYmNtMzUxMF93cml0ZUIoc3QsMHhmYSxiKTsKQEAgLTYyMywxMyArNjIzLDEzIEBACiAJCWVycigiY291bGQgbm90IGxvYWQgZmlybXdhcmUgKCVzKTogJWQiLEJDTTM1MTBfREVGQVVMVF9GSVJNV0FSRSxyZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlkZWJfaW5mbygiZ290IGZpcm13YXJlOiAlZFxuIixmdy0+c2l6ZSk7CisJZGViX2luZm8oImdvdCBmaXJtd2FyZTogJXpkXG4iLGZ3LT5zaXplKTsKIAogCWIgPSBmdy0+ZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7KSB7CiAJCWFkZHIgPSBsZTE2X3RvX2NwdSggKiggKHUxNiAqKSZiW2ldICkgKTsKIAkJbGVuICA9IGxlMTZfdG9fY3B1KCAqKCAodTE2ICopJmJbaSsyXSApICk7Ci0JCWRlYl9pbmZvKCJmaXJtd2FyZSBjaHVuaywgYWRkcjogMHglMDR4LCBsZW46IDB4JTA0eCwgdG90YWwgbGVuZ3RoOiAweCUwNHhcbiIsYWRkcixsZW4sZnctPnNpemUpOworCQlkZWJfaW5mbygiZmlybXdhcmUgY2h1bmssIGFkZHI6IDB4JTA0eCwgbGVuOiAweCUwNHgsIHRvdGFsIGxlbmd0aDogMHglMDR6eFxuIixhZGRyLGxlbixmdy0+c2l6ZSk7CiAJCWlmICgocmV0ID0gYmNtMzUxMF93cml0ZV9yYW0oc3QsYWRkciwmYltpKzRdLGxlbikpIDwgMCkgewogCQkJZXJyKCJmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWQ6ICVkXG4iLHJldCk7CiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKaW5kZXggNWRlMGU2ZDMuLjBmYzg5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwpAQCAtMTk1LDYgKzE5NSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4MjI3MDJfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkcHJpbnRrICgiJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIGVuYWJsZSk7CisJaWYgKGVuYWJsZSkKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpICYgMHhmZSk7CisJZWxzZQorCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgfCAxKTsKK30KKwogLyogVGFsayB0byB0aGUgZGVtb2QsIHNldCB0aGUgRkVDLCBHVUFSRCwgUUFNIHNldHRpbmdzIGV0YyAqLwogc3RhdGljIGludCBjeDIyNzAyX3NldF90cHMgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CkBAIC0yMDIsNyArMjEyLDcgQEAKIAlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCS8qIHNldCBQTEwgKi8KLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLDB4MEQpICYweGZlKTsKKwljeDIyNzAyX2kyY19nYXRlX2N0cmwoZmUsIDEpOwogCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KSB7CiAJCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIHApOwogCX0gZWxzZSBpZiAoc3RhdGUtPmNvbmZpZy0+cGxsX2Rlc2MpIHsKQEAgLTIxNiw3ICsyMjYsNyBAQAogCX0gZWxzZSB7CiAJCUJVRygpOwogCX0KLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLDB4MEQpIHwgMSk7CisJY3gyMjcwMl9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAogCS8qIHNldCBpbnZlcnNpb24gKi8KIAljeDIyNzAyX3NldF9pbnZlcnNpb24gKHN0YXRlLCBwLT5pbnZlcnNpb24pOwpAQCAtMzQ5LDExICszNTksMTAgQEAKIAljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHhmOCwgKHN0YXRlLT5jb25maWctPm91dHB1dF9tb2RlIDw8IDEpICYgMHgwMik7CiAKIAkvKiBpbml0IFBMTCAqLwotCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdCkgewotCQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLDB4MEQpICYgMHhmZSk7CisJaWYgKHN0YXRlLT5jb25maWctPnBsbF9pbml0KQogCQlzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdChmZSk7Ci0JCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsMHgwRCkgfCAxKTsKLQl9CisKKwljeDIyNzAyX2kyY19nYXRlX2N0cmwoZmUsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MzEsNiArNTQwLDcgQEAKIAkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBjeDIyNzAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAogCS5yZWFkX3NuciA9IGN4MjI3MDJfcmVhZF9zbnIsCiAJLnJlYWRfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRfdWNibG9ja3MsCisJLmkyY19nYXRlX2N0cmwgPSBjeDIyNzAyX2kyY19nYXRlX2N0cmwsCiB9OwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYwppbmRleCAwYzRkYjgwLi5kMTVkMzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDI0MTEwLmgiCkBAIC01Niw3ICs1NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qge3U4IHJlZzsgdTggZGF0YTt9IGN4MjQxMTBfcmVnZGF0YVtdPQogCQkgICAgICAvKiBDb21tZW50cyBiZWdpbm5pbmcgd2l0aCBAIGRlbm90ZSB0aGlzIHZhbHVlIHNob3VsZAotCQkgICAgICAgICBiZSB0aGUgZGVmYXVsdCAqLworCQkJIGJlIHRoZSBkZWZhdWx0ICovCiAJe3sweDA5LDB4MDF9LCAvKiBTb2Z0UmVzZXRBbGwgKi8KIAkgezB4MDksMHgwMH0sIC8qIHJlbGVhc2UgcmVzZXQgKi8KIAkgezB4MDEsMHhlOH0sIC8qIE1TQiBvZiBjb2RlIHJhdGUgMjcuNU1TL3MgKi8KQEAgLTY3LDI2ICs2NiwyNiBAQAogCSB7MHgwNywweDAxfSwgLyogQCBGY2xrLCBpLmUuIHNhbXBsaW5nIGNsb2NrLCA2ME1IeiAqLwogCSB7MHgwYSwweDAwfSwgLyogQCBwYXJ0aWFsIGNoaXAgZGlzYWJsZXMsIGRvIG5vdCBzZXQgKi8KIAkgezB4MGIsMHgwMX0sIC8qIHNldCBvdXRwdXQgY2xvY2sgaW4gZ2FwcGVkIG1vZGUsIHN0YXJ0IHNpZ25hbCBsb3cKLQkJICAgICAgICAgYWN0aXZlIGZvciBmaXJzdCBieXRlICovCisJCQkgYWN0aXZlIGZvciBmaXJzdCBieXRlICovCiAJIHsweDBjLDB4MTF9LCAvKiBubyBwYXJpdHkgYnl0ZXMsIGxhcmdlIGhvbGQgdGltZSwgc2VyaWFsIGRhdGEgb3V0ICovCiAJIHsweDBkLDB4NmZ9LCAvKiBAIFJTIFN5bmMvVW5zeW5jIHRocmVzaG9sZHMgKi8KIAkgezB4MTAsMHg0MH0sIC8qIGNoaXAgZG9jIGlzIG1pc2xlYWRpbmcgaGVyZTogd3JpdGUgYml0IDYgYXMgMQotCQkgICAgICAgICB0byBhdm9pZCBzdGFydGluZyB0aGUgQkVSIGNvdW50ZXIuIFJlc2V0IHRoZQotCQkgICAgICAgICBDUkMgdGVzdCBiaXQuIEZpbml0ZSBjb3VudGluZyBzZWxlY3RlZCAqLworCQkJIHRvIGF2b2lkIHN0YXJ0aW5nIHRoZSBCRVIgY291bnRlci4gUmVzZXQgdGhlCisJCQkgQ1JDIHRlc3QgYml0LiBGaW5pdGUgY291bnRpbmcgc2VsZWN0ZWQgKi8KIAkgezB4MTUsMHhmZn0sIC8qIEAgc2l6ZSBvZiB0aGUgbGltaXRlZCB0aW1lIHdpbmRvdyBmb3IgUlMgQkVSCi0JCSAgICAgICAgIGVzdGltYXRpb24uIEl0IGlzIDx2YWx1ZT4qMjU2IFJTIGJsb2NrcywgdGhpcwotCQkgICAgICAgICBnaXZlcyBhcHByb3guIDIuNiBzZWMgYXQgMjcuNU1TL3MsIHJhdGUgMy80ICovCisJCQkgZXN0aW1hdGlvbi4gSXQgaXMgPHZhbHVlPioyNTYgUlMgYmxvY2tzLCB0aGlzCisJCQkgZ2l2ZXMgYXBwcm94LiAyLjYgc2VjIGF0IDI3LjVNUy9zLCByYXRlIDMvNCAqLwogCSB7MHgxNiwweDAwfSwgLyogQCBlbmFibGUgYWxsIFJTIG91dHB1dCBwb3J0cyAqLwogCSB7MHgxNywweDA0fSwgLyogQCB0aW1lIHdpbmRvdyBhbGxvd2VkIGZvciB0aGUgUlMgdG8gc3luYyAqLwogCSB7MHgxOCwweGFlfSwgLyogQCBhbGxvdyBhbGwgc3RhbmRhcmQgRFZCIGNvZGUgcmF0ZXMgdG8gYmUgc2Nhbm5lZAotCQkgICAgICAgICBmb3IgYXV0b21hdGljYWxseSAqLworCQkJIGZvciBhdXRvbWF0aWNhbGx5ICovCiAJCSAgICAgIC8qIGxlYXZlIHRoZSBjdXJyZW50IGNvZGUgcmF0ZSBhbmQgbm9ybWFsaXphdGlvbgotCQkgICAgICAgICByZWdpc3RlcnMgYXMgdGhleSBhcmUgYWZ0ZXIgcmVzZXQuLi4gKi8KKwkJCSByZWdpc3RlcnMgYXMgdGhleSBhcmUgYWZ0ZXIgcmVzZXQuLi4gKi8KIAkgezB4MjEsMHgxMH0sIC8qIEAgZHVyaW5nIEF1dG9BY3EsIHNlYXJjaCBlYWNoIHZpdGVyYmkgc2V0dGluZwotCQkgICAgICAgICBvbmx5IG9uY2UgKi8KKwkJCSBvbmx5IG9uY2UgKi8KIAkgezB4MjMsMHgxOH0sIC8qIEAgc2l6ZSBvZiB0aGUgbGltaXRlZCB0aW1lIHdpbmRvdyBmb3IgVml0ZXJiaSBCRVIKLQkJICAgICAgICAgZXN0aW1hdGlvbi4gSXQgaXMgPHZhbHVlPio2NTUzNiBjaGFubmVsIGJpdHMsIGkuZS4KLQkJICAgICAgICAgYXBwcm94LiAzOG1zIGF0IDI3LjVNUy9zLCByYXRlIDMvNCAqLworCQkJIGVzdGltYXRpb24uIEl0IGlzIDx2YWx1ZT4qNjU1MzYgY2hhbm5lbCBiaXRzLCBpLmUuCisJCQkgYXBwcm94LiAzOG1zIGF0IDI3LjVNUy9zLCByYXRlIDMvNCAqLwogCSB7MHgyNCwweDI0fSwgLyogZG8gbm90IHRyaWdnZXIgVml0ZXJiaSBDUkMgdGVzdC4gRmluaXRlIGNvdW50IHdpbmRvdyAqLwogCQkgICAgICAvKiBsZWF2ZSBmcm9udC1lbmQgQUdDIHBhcmFtZXRlcnMgYXQgZGVmYXVsdCB2YWx1ZXMgKi8KIAkJICAgICAgLyogbGVhdmUgZGVjaW1hdGlvbiBBR0MgcGFyYW1ldGVycyBhdCBkZWZhdWx0IHZhbHVlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2MWM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTAsMCArMSw4ODkgQEAKKy8qCisgICAgQ29uZXhhbnQgY3gyNDEyMy9jeDI0MTA5IC0gRFZCIFFQU0sgU2F0ZWxsaXRlIGRlbW9kL3R1bmVyIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXZlbiBUb3RoIDxzdG90aEBoYXVwcGF1Z2UuY29tPgorCisgICAgU3VwcG9ydCBmb3IgS1dvcmxkIERWQi1TIDEwMCBieSBWYWRpbSBDYXRhbmEgPHNreXN0YXJAbW9sZG92YS5jYz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImN4MjQxMjMuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgcHJpbnRrIChLRVJOX0RFQlVHICJjeDI0MTIzOiAiIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworc3RydWN0IGN4MjQxMjNfc3RhdGUKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBvcHM7CisJY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnKiBjb25maWc7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJdTMyIGxhc3RiZXI7CisJdTE2IHNucjsKKwl1OCAgbG5icmVnOworCisJLyogU29tZSBQTEwgc3BlY2lmaWNzIGZvciB0dW5pbmcgKi8KKwl1MzIgVkNBYXJnOworCXUzMiBWR0Fhcmc7CisJdTMyIGJhbmRzZWxlY3Rhcmc7CisJdTMyIHBsbGFyZzsKKworCS8qIFRoZSBEZW1vZC9UdW5lciBjYW4ndCBlYXNpbHkgcHJvdmlkZSB0aGVzZSwgd2UgY2FjaGUgdGhlbSAqLworCXUzMiBjdXJyZW50ZnJlcTsKKwl1MzIgY3VycmVudHN5bWJvbHJhdGU7Cit9OworCisvKiBWYXJpb3VzIHR1bmVyIGRlZmF1bHRzIG5lZWQgdG8gYmUgZXN0YWJsaXNoZWQgZm9yIGEgZ2l2ZW4gc3ltYm9sIHJhdGUgU3BzICovCitzdGF0aWMgc3RydWN0Cit7CisJdTMyIHN5bWJvbHJhdGVfbG93OworCXUzMiBzeW1ib2xyYXRlX2hpZ2g7CisJdTMyIFZDQXNsb3BlOworCXUzMiBWQ0FvZmZzZXQ7CisJdTMyIFZHQTFvZmZzZXQ7CisJdTMyIFZHQTJvZmZzZXQ7CisJdTMyIFZDQXByb2dkYXRhOworCXUzMiBWR0Fwcm9nZGF0YTsKK30gY3gyNDEyM19BR0NfdmFsc1tdID0KK3sKKwl7CisJCS5zeW1ib2xyYXRlX2xvdwkJPSAxMDAwMDAwLAorCQkuc3ltYm9scmF0ZV9oaWdoCT0gNDk5OTk5OSwKKwkJLlZDQXNsb3BlCQk9IDB4MDcsCisJCS5WQ0FvZmZzZXQJCT0gMHgwZiwKKwkJLlZHQTFvZmZzZXQJCT0gMHgxZjgsCisJCS5WR0Eyb2Zmc2V0CQk9IDB4MWY4LAorCQkuVkdBcHJvZ2RhdGEJCT0gKDIgPDwgMTgpIHwgKDB4MWY4IDw8IDkpIHwgMHgxZjgsCisJCS5WQ0Fwcm9nZGF0YQkJPSAoNCA8PCAxOCkgfCAoMHgwNyA8PCA5KSB8IDB4MDcsCisJfSwKKwl7CisJCS5zeW1ib2xyYXRlX2xvdwkJPSAgNTAwMDAwMCwKKwkJLnN5bWJvbHJhdGVfaGlnaAk9IDE0OTk5OTk5LAorCQkuVkNBc2xvcGUJCT0gMHgxZiwKKwkJLlZDQW9mZnNldAkJPSAweDFmLAorCQkuVkdBMW9mZnNldAkJPSAweDFlMCwKKwkJLlZHQTJvZmZzZXQJCT0gMHgxODAsCisJCS5WR0Fwcm9nZGF0YQkJPSAoMiA8PCAxOCkgfCAoMHgxODAgPDwgOSkgfCAweDFlMCwKKwkJLlZDQXByb2dkYXRhCQk9ICg0IDw8IDE4KSB8ICgweDA3IDw8IDkpIHwgMHgxZiwKKwl9LAorCXsKKwkJLnN5bWJvbHJhdGVfbG93CQk9IDE1MDAwMDAwLAorCQkuc3ltYm9scmF0ZV9oaWdoCT0gNDUwMDAwMDAsCisJCS5WQ0FzbG9wZQkJPSAweDNmLAorCQkuVkNBb2Zmc2V0CQk9IDB4M2YsCisJCS5WR0Exb2Zmc2V0CQk9IDB4MTgwLAorCQkuVkdBMm9mZnNldAkJPSAweDEwMCwKKwkJLlZHQXByb2dkYXRhCQk9ICgyIDw8IDE4KSB8ICgweDEwMCA8PCA5KSB8IDB4MTgwLAorCQkuVkNBcHJvZ2RhdGEJCT0gKDQgPDwgMTgpIHwgKDB4MDcgPDwgOSkgfCAweDNmLAorCX0sCit9OworCisvKgorICogVmFyaW91cyB0dW5lciBkZWZhdWx0cyBuZWVkIHRvIGJlIGVzdGFibGlzaGVkIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSBrSHouCisgKiBmaXhtZTogVGhlIGJvdW5kcyBvbiB0aGUgYmFuZHMgZG8gbm90IG1hdGNoIHRoZSBkb2MgaW4gcmVhbCBsaWZlLgorICogZml4bWU6IFNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gbW92ZWQsIG90aGVyIG1pZ2h0IG5lZWQgYWRqdXN0bWVudC4KKyAqLworc3RhdGljIHN0cnVjdAoreworCXUzMiBmcmVxX2xvdzsKKwl1MzIgZnJlcV9oaWdoOworCXUzMiBiYW5kc2VsZWN0OworCXUzMiBWQ09kaXZpZGVyOworCXUzMiBWQ09udW1iZXI7CisJdTMyIHByb2dkYXRhOworfSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tdID0KK3sKKwl7CisJCS5mcmVxX2xvdwk9IDk1MDAwMCwKKwkJLmZyZXFfaGlnaAk9IDEwMTg5OTksCisJCS5iYW5kc2VsZWN0CT0gMHg0MCwKKwkJLlZDT2RpdmlkZXIJPSA0LAorCQkuVkNPbnVtYmVyCT0gNywKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDAgPDwgOSkgfCAweDQwLAorCX0sCisJeworCQkuZnJlcV9sb3cJPSAxMDE5MDAwLAorCQkuZnJlcV9oaWdoCT0gMTA3NDk5OSwKKwkJLmJhbmRzZWxlY3QJPSAweDgwLAorCQkuVkNPZGl2aWRlcgk9IDQsCisJCS5WQ09udW1iZXIJPSA4LAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOCkgfCAoMCA8PCA5KSB8IDB4ODAsCisJfSwKKwl7CisJCS5mcmVxX2xvdwk9IDEwNzUwMDAsCisJCS5mcmVxX2hpZ2gJPSAxMjI3OTk5LAorCQkuYmFuZHNlbGVjdAk9IDB4MDEsCisJCS5WQ09kaXZpZGVyCT0gMiwKKwkJLlZDT251bWJlcgk9IDEsCisJCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHgwMSwKKwl9LAorCXsKKwkJLmZyZXFfbG93CT0gMTIyODAwMCwKKwkJLmZyZXFfaGlnaAk9IDEzNDk5OTksCisJCS5iYW5kc2VsZWN0CT0gMHgwMiwKKwkJLlZDT2RpdmlkZXIJPSAyLAorCQkuVkNPbnVtYmVyCT0gMiwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDAyLAorCX0sCisJeworCQkuZnJlcV9sb3cJPSAxMzUwMDAwLAorCQkuZnJlcV9oaWdoCT0gMTQ4MTk5OSwKKwkJLmJhbmRzZWxlY3QJPSAweDA0LAorCQkuVkNPZGl2aWRlcgk9IDIsCisJCS5WQ09udW1iZXIJPSAzLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOCkgfCAoMSA8PCA5KSB8IDB4MDQsCisJfSwKKwl7CisJCS5mcmVxX2xvdwk9IDE0ODIwMDAsCisJCS5mcmVxX2hpZ2gJPSAxNTk1OTk5LAorCQkuYmFuZHNlbGVjdAk9IDB4MDgsCisJCS5WQ09kaXZpZGVyCT0gMiwKKwkJLlZDT251bWJlcgk9IDQsCisJCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHgwOCwKKwl9LAorCXsKKwkJLmZyZXFfbG93CT0gMTU5NjAwMCwKKwkJLmZyZXFfaGlnaAk9IDE3MTc5OTksCisJCS5iYW5kc2VsZWN0CT0gMHgxMCwKKwkJLlZDT2RpdmlkZXIJPSAyLAorCQkuVkNPbnVtYmVyCT0gNSwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDEwLAorCX0sCisJeworCQkuZnJlcV9sb3cJPSAxNzE4MDAwLAorCQkuZnJlcV9oaWdoCT0gMTg1NTk5OSwKKwkJLmJhbmRzZWxlY3QJPSAweDIwLAorCQkuVkNPZGl2aWRlcgk9IDIsCisJCS5WQ09udW1iZXIJPSA2LAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOCkgfCAoMSA8PCA5KSB8IDB4MjAsCisJfSwKKwl7CisJCS5mcmVxX2xvdwk9IDE4NTYwMDAsCisJCS5mcmVxX2hpZ2gJPSAyMDM1OTk5LAorCQkuYmFuZHNlbGVjdAk9IDB4NDAsCisJCS5WQ09kaXZpZGVyCT0gMiwKKwkJLlZDT251bWJlcgk9IDcsCisJCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHg0MCwKKwl9LAorCXsKKwkJLmZyZXFfbG93CT0gMjAzNjAwMCwKKwkJLmZyZXFfaGlnaAk9IDIxNDk5OTksCisJCS5iYW5kc2VsZWN0CT0gMHg4MCwKKwkJLlZDT2RpdmlkZXIJPSAyLAorCQkuVkNPbnVtYmVyCT0gOCwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDgwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHsKKwl1OCByZWc7CisJdTggZGF0YTsKK30gY3gyNDEyM19yZWdkYXRhW10gPQoreworCXsweDAwLCAweDAzfSwgLyogUmVzZXQgc3lzdGVtICovCisJezB4MDAsIDB4MDB9LCAvKiBDbGVhciByZXNldCAqLworCXsweDAxLCAweDNifSwgLyogQXBwbHkgc2Vuc2libGUgZGVmYXVsdHMsIGZyb20gYW4gaTJjIHNuaWZmZXIgKi8KKwl7MHgwMywgMHgwN30sCisJezB4MDQsIDB4MTB9LAorCXsweDA1LCAweDA0fSwKKwl7MHgwNiwgMHgzMX0sCisJezB4MGQsIDB4MDJ9LAorCXsweDBlLCAweDAzfSwKKwl7MHgwZiwgMHhmZX0sCisJezB4MTAsIDB4MDF9LAorCXsweDE0LCAweDAxfSwKKwl7MHgxNSwgMHg5OH0sCisJezB4MTYsIDB4MDB9LAorCXsweDE3LCAweDAxfSwKKwl7MHgxYiwgMHgwNX0sCisJezB4MWMsIDB4ODB9LAorCXsweDFkLCAweDAwfSwKKwl7MHgxZSwgMHgwMH0sCisJezB4MjAsIDB4NDF9LAorCXsweDIxLCAweDE1fSwKKwl7MHgyNywgMHgxNH0sCisJezB4MjgsIDB4NDZ9LAorCXsweDI5LCAweDAwfSwKKwl7MHgyYSwgMHhiMH0sCisJezB4MmIsIDB4NzN9LAorCXsweDJjLCAweDAwfSwKKwl7MHgyZCwgMHgwMH0sCisJezB4MmUsIDB4MDB9LAorCXsweDJmLCAweDAwfSwKKwl7MHgzMCwgMHgwMH0sCisJezB4MzEsIDB4MDB9LAorCXsweDMyLCAweDhjfSwKKwl7MHgzMywgMHgwMH0sCisJezB4MzQsIDB4MDB9LAorCXsweDM1LCAweDAzfSwKKwl7MHgzNiwgMHgwMn0sCisJezB4MzcsIDB4M2F9LAorCXsweDNhLCAweDAwfSwJLyogRW5hYmxlIEFHQyBhY2N1bXVsYXRvciAqLworCXsweDQ0LCAweDAwfSwKKwl7MHg0NSwgMHgwMH0sCisJezB4NDYsIDB4MDV9LAorCXsweDU2LCAweDQxfSwKKwl7MHg1NywgMHhmZn0sCisJezB4NjcsIDB4ODN9LAorfTsKKworc3RhdGljIGludCBjeDI0MTIzX3dyaXRlcmVnKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgaW50IHJlZywgaW50IGRhdGEpCit7CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OworCWludCBlcnI7CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgeworCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX0ZVTkNUSU9OX18sIGVyciwgcmVnLCBkYXRhKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM193cml0ZWxuYnJlZyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGludCByZWcsIGludCBkYXRhKQoreworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKKwkvKiBmaXhtZTogcHV0IHRoZSBpbnRlcnNpbCBhZGRyIGludCB0aGUgY29uZmlnICovCisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4MDgsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisJaW50IGVycjsKKworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJCXByaW50aygiJXM6IHdyaXRlbG5icmVnIGVycm9yIChlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX0ZVTkNUSU9OX18sIGVyciwgcmVnLCBkYXRhKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJLyogY2FjaGUgdGhlIHdyaXRlLCBubyB3YXkgdG8gcmVhZCBiYWNrICovCisJc3RhdGUtPmxuYnJlZyA9IGRhdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX3JlYWRyZWcoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCB1OCByZWcpCit7CisJaW50IHJldDsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMSB9CisJfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50aygiJXM6IHJlZz0weCV4IChlcnJvcj0lZClcbiIsIF9fRlVOQ1RJT05fXywgcmVnLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBiMVswXTsKK30KKworc3RhdGljIGludCBjeDI0MTIzX3JlYWRsbmJyZWcoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCB1OCByZWcpCit7CisJcmV0dXJuIHN0YXRlLT5sbmJyZWc7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQoreworCXN3aXRjaCAoaW52ZXJzaW9uKSB7CisJY2FzZSBJTlZFUlNJT05fT0ZGOgorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgMHg3Zik7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCkgfCAweDgwKTsKKwkJYnJlYWs7CisJY2FzZSBJTlZFUlNJT05fT046CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwZSkgfCAweDgwKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgxMCwgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDEwKSB8IDB4ODApOworCQlicmVhazsKKwljYXNlIElOVkVSU0lPTl9BVVRPOgorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDEwLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTApICYgMHg3Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX3NwZWN0cmFsX2ludmVyc2lvbl90ICppbnZlcnNpb24pCit7CisJdTggdmFsOworCisJdmFsID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDFiKSA+PiA3OworCisJaWYgKHZhbCA9PSAwKQorCQkqaW52ZXJzaW9uID0gSU5WRVJTSU9OX09GRjsKKwllbHNlCisJCSppbnZlcnNpb24gPSBJTlZFUlNJT05fT047CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX3NldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCBmZWMpCit7CisJaWYgKCAoZmVjIDwgRkVDX05PTkUpIHx8IChmZWMgPiBGRUNfQVVUTykgKQorCQlmZWMgPSBGRUNfQVVUTzsKKworCS8qIEhhcmR3YXJlIGhhcyA1LzExIGFuZCAzLzUgYnV0IGFyZSBuZXZlciB1bnVzZWQgKi8KKwlzd2l0Y2ggKGZlYykgeworCWNhc2UgRkVDX05PTkU6CisJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDAxKTsKKwljYXNlIEZFQ18xXzI6CisJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDAyKTsKKwljYXNlIEZFQ18yXzM6CisJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDA0KTsKKwljYXNlIEZFQ18zXzQ6CisJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDA4KTsKKwljYXNlIEZFQ181XzY6CisJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDIwKTsKKwljYXNlIEZFQ183Xzg6CisJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDgwKTsKKwljYXNlIEZFQ19BVVRPOgorCQlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHhhZSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQoreworCWludCByZXQ7CisJdTggdmFsOworCisJcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJdmFsID0gcmV0ICYgMHgwNzsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMToKKwkJKmZlYyA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJKmZlYyA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJKmZlYyA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgNToKKwkJKmZlYyA9IEZFQ180XzU7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJKmZlYyA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJKmZlYyA9IEZFQ183Xzg7CisJCWJyZWFrOworCWNhc2UgMjoJLyogKmZlYyA9IEZFQ18zXzU7IGJyZWFrOyAqLworCWNhc2UgMDoJLyogKmZlYyA9IEZFQ181XzExOyBicmVhazsgKi8KKwkJKmZlYyA9IEZFQ19BVVRPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqZmVjID0gRkVDX05PTkU7IC8vIGNhbid0IGhhcHBlbgorCX0KKworCXJldHVybiAwOworfQorCisvKiBmaXhtZTogU3ltYm9sIHJhdGVzIDwgM01TcHMgbWF5IG5vdCB3b3JrIGJlY2F1c2Ugb2YgcHJlY2lzaW9uIGxvc3MgKi8KK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIHUzMiBzcmF0ZSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gKHNyYXRlIC8gMTE4NSkgKiAxMDA7CisKKwkvKiBDb21wZW5zYXRlIGZvciBzY2FsaW5nIHVwLCBieSByZW1vdmluZyAxNyBzeW1ib2xzIHBlciAxTXNwcyAqLworCXZhbCA9IHZhbCAtICgxNyAqIChzcmF0ZSAvIDEwMDAwMDApKTsKKworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDgsICh2YWwgPj4gMTYpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDksICh2YWwgPj4gIDgpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsICh2YWwgICAgICApICYgMHhmZiApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCYXNlZCBvbiB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5IGFuZCBzeW1ib2xyYXRlLCB0aGUgdHVuZXIgQUdDIGhhcyB0byBiZSBjb25maWd1cmVkCisgKiBhbmQgdGhlIGNvcnJlY3QgYmFuZCBzZWxlY3RlZC4gQ2FsY3VsYXRlIHRob3NlIHZhbHVlcworICovCitzdGF0aWMgaW50IGN4MjQxMjNfcGxsX2NhbGN1bGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUzMiBuZGl2ID0gMCwgYWRpdiA9IDAsIHZjb19kaXYgPSAwOworCWludCBpID0gMDsKKworCS8qIERlZmF1bHRzIGZvciBsb3cgZnJlcSwgbG93IHJhdGUgKi8KKwlzdGF0ZS0+VkNBYXJnID0gY3gyNDEyM19BR0NfdmFsc1swXS5WQ0Fwcm9nZGF0YTsKKwlzdGF0ZS0+VkdBYXJnID0gY3gyNDEyM19BR0NfdmFsc1swXS5WR0Fwcm9nZGF0YTsKKwlzdGF0ZS0+YmFuZHNlbGVjdGFyZyA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLnByb2dkYXRhOworCXZjb19kaXYgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXS5WQ09kaXZpZGVyOworCisJLyogRm9yIHRoZSBnaXZlbiBzeW1ib2xlcmF0ZSwgZGV0ZXJtaW5lIHRoZSBWQ0EgYW5kIFZHQSBwcm9ncmFtbWluZyBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjeDI0MTIzX0FHQ192YWxzKSAvIHNpemVvZihjeDI0MTIzX0FHQ192YWxzWzBdKTsgaSsrKQorCXsKKwkJaWYgKChjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfbG93IDw9IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgJiYKKwkJCQkoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2hpZ2ggPj0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSApIHsKKwkJCXN0YXRlLT5WQ0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzW2ldLlZDQXByb2dkYXRhOworCQkJc3RhdGUtPlZHQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uVkdBcHJvZ2RhdGE7CisJCX0KKwl9CisKKwkvKiBGb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeSwgZGV0ZXJtaW5lIHRoZSBiYW5kc2VsZWN0IHByb2dyYW1taW5nIGJpdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKSAvIHNpemVvZihjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXSk7IGkrKykKKwl7CisJCWlmICgoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgorCQkJCShjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2hpZ2ggPj0gcC0+ZnJlcXVlbmN5KSApIHsKKwkJCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0ucHJvZ2RhdGE7CisJCQl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uVkNPZGl2aWRlcjsKKwkJfQorCX0KKworCS8qIERldGVybWluZSB0aGUgTi9BIGRpdmlkZXJzIGZvciB0aGUgcmVxdWVzdGVkIGxiYW5kIGZyZXEgKGluIGtIeikuICovCisJLyogTm90ZTogMTAxMTEgKGtIeikgaXMgdGhlIENyeXN0YWwgRnJlcSBhbmQgZGl2aWRlciBvZiAxMC4gKi8KKwluZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYpIC8gKDEwMTExIC8gMTApIC8gMikgLyAzMikgJiAweDFmZjsKKwlhZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYpIC8gKDEwMTExIC8gMTApIC8gMikgJSAzMikgJiAweDFmOworCisJaWYgKGFkaXYgPT0gMCkKKwkJYWRpdisrOworCisJLyogZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBsbCBmcmVxdWVuY3kgdmFsdWVzLiAqLworCS8qIENvbW1hbmQgMTEsIHJlZmRpdiAxMSwgY3B1bXAgcG9sYXJpdHkgMSwgY3B1bXAgY3VycmVudCAzbUEgMTAuICovCisJc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgyIDw8IDE0KTsKKwlzdGF0ZS0+cGxsYXJnIHw9IChuZGl2IDw8IDUpIHwgYWRpdjsKKworCXJldHVybiAwOworfQorCisvKgorICogVHVuZXIgZGF0YSBpcyAyMSBiaXRzIGxvbmcsIG11c3QgYmUgbGVmdC1hbGlnbmVkIGluIGRhdGEuCisgKiBUdW5lciBjeDI0MTA5IGlzIHdyaXR0ZW4gdGhyb3VnaCBhIGRlZGljYXRlZCAzd2lyZSBpbnRlcmZhY2Ugb24gdGhlIGRlbW9kIGNoaXAuCisgKi8KK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfd3JpdGVyZWcoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCwgdTMyIGRhdGEpCit7CisJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJLyogYWxpZ24gdGhlIDIxIGJ5dGVzIGludG8gdG8gYml0MjMgYm91bmRhcnkgKi8KKwlkYXRhID0gZGF0YSA8PCAzOworCisJLyogUmVzZXQgdGhlIGRlbW9kIHBsbCB3b3JkIGxlbmd0aCB0byAweDE1IGJpdHMgKi8KKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIxLCAweDE1KTsKKworCS8qIHdyaXRlIHRoZSBtc2IgOCBiaXRzLCB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhID4+IDE2KSAmIDB4ZmYpOworCXdoaWxlICgoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDIwKSAmIDB4NDApID09IDApIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByaW50aygiJXM6ICBkZW1vZHVsYXRvciBpcyBub3QgcmVzcG9uZGluZywgcG9zc2libHkgaHVuZywgYWJvcnRpbmcuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9CisKKwkvKiBzZW5kIGFub3RoZXIgOCBieXRlcywgd2FpdCBmb3IgdGhlIHNlbmQgdG8gYmUgY29tcGxldGVkICovCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDQwKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YT4+OCkgJiAweGZmICk7CisJd2hpbGUgKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjApICYgMHg0MCkgPT0gMCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJpbnRrKCIlczogIGRlbW9kdWxhdG9yIGlzIG5vdCByZXNwb25kaW5nLCBwb3NzaWJseSBodW5nLCBhYm9ydGluZy5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwkJfQorCQltc2xlZXAoMTApOworCX0KKworCS8qIHNlbmQgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGlzIGJ5dGUsIHBhZGRlZCB3aXRoIDMgTEJCLCB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhKSAmIDB4ZmYgKTsKKwl3aGlsZSAoKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgJiAweDgwKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJpbnRrKCIlczogIGRlbW9kdWxhdG9yIGlzIG5vdCByZXNwb25kaW5nLCBwb3NzaWJseSBodW5nLCBhYm9ydGluZy5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwkJfQorCQltc2xlZXAoMTApOworCX0KKworCS8qIFRyaWdnZXIgdGhlIGRlbW9kIHRvIGNvbmZpZ3VyZSB0aGUgdHVuZXIgKi8KKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIwLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjApIHwgMik7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMCwgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDIwKSAmIDB4ZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaWYgKGN4MjQxMjNfcGxsX2NhbGN1bGF0ZShmZSwgcCkgIT0gMCkgeworCQlwcmludGsoIiVzOiBjeDI0MTIzX3BsbF9jYWxjdXRhdGUgZmFpbGVkXG4iLF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdyaXRlIHRoZSBuZXcgVkNPL1ZHQSAqLworCWN4MjQxMjNfcGxsX3dyaXRlcmVnKGZlLCBwLCBzdGF0ZS0+VkNBYXJnKTsKKwljeDI0MTIzX3BsbF93cml0ZXJlZyhmZSwgcCwgc3RhdGUtPlZHQWFyZyk7CisKKwkvKiBXcml0ZSB0aGUgbmV3IGJhbmRzZWxlY3QgYW5kIHBsbCBhcmdzICovCisJY3gyNDEyM19wbGxfd3JpdGVyZWcoZmUsIHAsIHN0YXRlLT5iYW5kc2VsZWN0YXJnKTsKKwljeDI0MTIzX3BsbF93cml0ZXJlZyhmZSwgcCwgc3RhdGUtPnBsbGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgaTsKKworCS8qIENvbmZpZ3VyZSB0aGUgZGVtb2QgdG8gYSBnb29kIHNldCBvZiBkZWZhdWx0cyAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY3gyNDEyM19yZWdkYXRhKSAvIHNpemVvZihjeDI0MTIzX3JlZ2RhdGFbMF0pOyBpKyspCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIGN4MjQxMjNfcmVnZGF0YVtpXS5yZWcsIGN4MjQxMjNfcmVnZGF0YVtpXS5kYXRhKTsKKworCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdCkKKwkJc3RhdGUtPmNvbmZpZy0+cGxsX2luaXQoZmUpOworCisJLyogQ29uZmlndXJlIHRoZSBMTkIgZm9yIDE0ViAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT51c2VfaXNsNjQyMSkKKwkJY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCAweDJhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCB2YWw7CisKKwlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnVzZV9pc2w2NDIxKSB7CisKKwljYXNlIDE6CisKKwkJdmFsID0gY3gyNDEyM19yZWFkbG5icmVnKHN0YXRlLCAweDApOworCisJCXN3aXRjaCAodm9sdGFnZSkgeworCQljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVsbmJyZWcoc3RhdGUsIDB4MCwgdmFsICYgMHgzMik7IC8qIFYgMTN2ICovCisJCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgfCAweDA0KTsgLyogSCAxOHYgKi8KKwkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgJiAweDMwKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCisJY2FzZSAwOgorCisJCXZhbCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSk7CisKKwkJc3dpdGNoICh2b2x0YWdlKSB7CisJCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCQlkcHJpbnRrKCIlczogc2V0dGluZyB2b2x0YWdlIDEzVlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT5lbmFibGVfbG5iX3ZvbHRhZ2UpCisJCQkJc3RhdGUtPmNvbmZpZy0+ZW5hYmxlX2xuYl92b2x0YWdlKGZlLCAxKTsKKwkJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCB2YWwgfCAweDgwKTsKKwkJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJCWRwcmludGsoIiVzOiBzZXR0aW5nIHZvbHRhZ2UgMThWXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJaWYgKHN0YXRlLT5jb25maWctPmVuYWJsZV9sbmJfdm9sdGFnZSkKKwkJCQlzdGF0ZS0+Y29uZmlnLT5lbmFibGVfbG5iX3ZvbHRhZ2UoZmUsIDEpOworCQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHZhbCAmIDB4N2YpOworCQljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJCWRwcmludGsoIiVzOiBzZXR0aW5nIHZvbHRhZ2Ugb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJaWYgKHN0YXRlLT5jb25maWctPmVuYWJsZV9sbmJfdm9sdGFnZSkKKwkJCQlzdGF0ZS0+Y29uZmlnLT5lbmFibGVfbG5iX3ZvbHRhZ2UoZmUsIDApOworCQkJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCQkgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCit7CisJLyogZml4bWU6IEltcGxlbWVudCBkaXNlcWMgKi8KKwlwcmludGsoIiVzOiBObyBzdXBwb3J0IHlldFxuIixfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaW50IHN5bmMgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTQpOworCWludCBsb2NrID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDIwKTsKKworCSpzdGF0dXMgPSAwOworCWlmIChsb2NrICYgMHgwMSkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7CisJaWYgKHN5bmMgJiAweDA0KQorCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOworCWlmIChzeW5jICYgMHgwOCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAoc3luYyAmIDB4ODApCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlZCB0byByZXR1cm4gdGhlIG1lYXN1cmVtZW50IG9mIGVycm9ycyBpbiBibG9ja3MsIGJlY2F1c2Ugbm8gVUNCTE9DS1MgdmFsdWUKKyAqIGlzIGF2YWlsYWJsZSwgc28gdGhpcyB2YWx1ZSBkb3VibGVzIHVwIHRvIHNhdGlzZnkgYm90aCBtZWFzdXJlbWVudHMKKyAqLworc3RhdGljIGludCBjeDI0MTIzX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN0YXRlLT5sYXN0YmVyID0KKwkJKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWMpICYgMHgzZikgPDwgMTYpIHwKKwkJKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxZCkgPDwgOCB8CisJCWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxZSkpOworCisJLyogRG8gdGhlIHNpZ25hbCBxdWFsaXR5IHByb2Nlc3NpbmcgaGVyZSwgaXQncyBkZXJpdmVkIGZyb20gdGhlIEJFUi4gKi8KKwkvKiBTY2FsZSB0aGUgQkVSIGZyb20gYSAyNGJpdCB0byBhIFNOUiAxNiBiaXQgd2hlcmUgaGlnaGVyID0gYmV0dGVyICovCisJaWYgKHN0YXRlLT5sYXN0YmVyIDwgNTAwMCkKKwkJc3RhdGUtPnNuciA9IDY1NSoxMDA7CisJZWxzZSBpZiAoIChzdGF0ZS0+bGFzdGJlciA+PSAgIDUwMDApICYmIChzdGF0ZS0+bGFzdGJlciA8ICA1NTAwMCkgKQorCQlzdGF0ZS0+c25yID0gNjU1KjkwOworCWVsc2UgaWYgKCAoc3RhdGUtPmxhc3RiZXIgPj0gIDU1MDAwKSAmJiAoc3RhdGUtPmxhc3RiZXIgPCAxNTAwMDApICkKKwkJc3RhdGUtPnNuciA9IDY1NSo4MDsKKwllbHNlIGlmICggKHN0YXRlLT5sYXN0YmVyID49IDE1MDAwMCkgJiYgKHN0YXRlLT5sYXN0YmVyIDwgMjUwMDAwKSApCisJCXN0YXRlLT5zbnIgPSA2NTUqNzA7CisJZWxzZSBpZiAoIChzdGF0ZS0+bGFzdGJlciA+PSAyNTAwMDApICYmIChzdGF0ZS0+bGFzdGJlciA8IDQ1MDAwMCkgKQorCQlzdGF0ZS0+c25yID0gNjU1KjY1OworCWVsc2UKKwkJc3RhdGUtPnNuciA9IDA7CisKKwkqYmVyID0gc3RhdGUtPmxhc3RiZXI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNpZ25hbF9zdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwkqc2lnbmFsX3N0cmVuZ3RoID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDNiKSA8PCA4OyAvKiBsYXJnZXIgPSBiZXR0ZXIgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMjNfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCSpzbnIgPSBzdGF0ZS0+c25yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCSp1Y2Jsb2NrcyA9IHN0YXRlLT5sYXN0YmVyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQorCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKKworCXN0YXRlLT5jdXJyZW50ZnJlcT1wLT5mcmVxdWVuY3k7CisJc3RhdGUtPmN1cnJlbnRzeW1ib2xyYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOworCisJY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0YXRlLCBwLT5pbnZlcnNpb24pOworCWN4MjQxMjNfc2V0X2ZlYyhzdGF0ZSwgcC0+dS5xcHNrLmZlY19pbm5lcik7CisJY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdGF0ZSwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKKwljeDI0MTIzX3BsbF90dW5lKGZlLCBwKTsKKworCS8qIEVuYWJsZSBhdXRvbWF0aWMgYXF1aXNpdGlvbiBhbmQgcmVzZXQgY3ljbGUgKi8KKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAzLCAoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDAzKSB8IDB4MDcpKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDEwKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoY3gyNDEyM19nZXRfaW52ZXJzaW9uKHN0YXRlLCAmcC0+aW52ZXJzaW9uKSAhPSAwKSB7CisJCXByaW50aygiJXM6IEZhaWxlZCB0byBnZXQgaW52ZXJzaW9uIHN0YXR1c1xuIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJaWYgKGN4MjQxMjNfZ2V0X2ZlYyhzdGF0ZSwgJnAtPnUucXBzay5mZWNfaW5uZXIpICE9IDApIHsKKwkJcHJpbnRrKCIlczogRmFpbGVkIHRvIGdldCBmZWMgc3RhdHVzXG4iLF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlwLT5mcmVxdWVuY3kgPSBzdGF0ZS0+Y3VycmVudGZyZXE7CisJcC0+dS5xcHNrLnN5bWJvbF9yYXRlID0gc3RhdGUtPmN1cnJlbnRzeW1ib2xyYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCit7CisJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggdmFsOworCisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLT51c2VfaXNsNjQyMSkgeworCWNhc2UgMToKKworCQl2YWwgPSBjeDI0MTIzX3JlYWRsbmJyZWcoc3RhdGUsIDB4MCk7CisKKwkJc3dpdGNoICh0b25lKSB7CisJCWNhc2UgU0VDX1RPTkVfT046CisJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgfCAweDEwKTsKKwkJY2FzZSBTRUNfVE9ORV9PRkY6CisJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgJiAweDJmKTsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiJXM6IENBU0UgcmVhY2hlZCBkZWZhdWx0IHdpdGggdG9uZT0lZFxuIiwgX19GVU5DVElPTl9fLCB0b25lKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwljYXNlIDA6CisKKwkJdmFsID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDI5KTsKKworCQlzd2l0Y2ggKHRvbmUpIHsKKwkJY2FzZSBTRUNfVE9ORV9PTjoKKwkJCWRwcmludGsoIiVzOiBzZXR0aW5nIHRvbmUgb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgdmFsIHwgMHgxMCk7CisJCWNhc2UgU0VDX1RPTkVfT0ZGOgorCQkJZHByaW50aygiJXM6IHNldHRpbmcgdG9uZSBvZmZcbiIsX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCB2YWwgJiAweGVmKTsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiJXM6IENBU0UgcmVhY2hlZCBkZWZhdWx0IHdpdGggdG9uZT0lZFxuIiwgX19GVU5DVElPTl9fLCB0b25lKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjQxMjNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkcHJpbnRrKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMjNfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcqIGNvbmZpZywKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlID0gTlVMTDsKKwlpbnQgcmV0OworCisJZHByaW50aygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJCXByaW50aygiVW5hYmxlIHRvIGttYWxsb2NcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKwltZW1jcHkoJnN0YXRlLT5vcHMsICZjeDI0MTIzX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmxhc3RiZXIgPSAwOworCXN0YXRlLT5zbnIgPSAwOworCXN0YXRlLT5sbmJyZWcgPSAwOworCXN0YXRlLT5WQ0FhcmcgPSAwOworCXN0YXRlLT5WR0FhcmcgPSAwOworCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gMDsKKwlzdGF0ZS0+cGxsYXJnID0gMDsKKwlzdGF0ZS0+Y3VycmVudGZyZXEgPSAwOworCXN0YXRlLT5jdXJyZW50c3ltYm9scmF0ZSA9IDA7CisKKwkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KKwlyZXQgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MDApOworCWlmICgocmV0ICE9IDB4ZDEpICYmIChyZXQgIT0gMHhlMSkpIHsKKwkJcHJpbnRrKCJWZXJzaW9uICE9IGQxIG9yIGUxXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJc3RhdGUtPmZyb250ZW5kLm9wcyA9ICZzdGF0ZS0+b3BzOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDEyM19vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiQ29uZXhhbnQgQ1gyNDEyMy9DWDI0MTA5IiwKKwkJLnR5cGUgPSBGRV9RUFNLLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gMTAxMSwgLyoga0h6IGZvciBRUFNLIGZyb250ZW5kcyAqLworCQkuZnJlcXVlbmN5X3RvbGVyYW5jZSA9IDI5NTAwLAorCQkuc3ltYm9sX3JhdGVfbWluID0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heCA9IDQ1MDAwMDAwLAorCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9SRUNPVkVSCisJfSwKKworCS5yZWxlYXNlID0gY3gyNDEyM19yZWxlYXNlLAorCisJLmluaXQgPSBjeDI0MTIzX2luaXRmZSwKKwkuc2V0X2Zyb250ZW5kID0gY3gyNDEyM19zZXRfZnJvbnRlbmQsCisJLmdldF9mcm9udGVuZCA9IGN4MjQxMjNfZ2V0X2Zyb250ZW5kLAorCS5yZWFkX3N0YXR1cyA9IGN4MjQxMjNfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gY3gyNDEyM19yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IGN4MjQxMjNfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSBjeDI0MTIzX3JlYWRfdWNibG9ja3MsCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZywKKwkuc2V0X3RvbmUgPSBjeDI0MTIzX3NldF90b25lLAorCS5zZXRfdm9sdGFnZSA9IGN4MjQxMjNfc2V0X3ZvbHRhZ2UsCit9OworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiRFZCIEZyb250ZW5kIG1vZHVsZSBmb3IgQ29uZXhhbnQgY3gyNDEyMy9jeDI0MTA5IGhhcmR3YXJlIik7CitNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitFWFBPUlRfU1lNQk9MKGN4MjQxMjNfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTIyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgICAgQ29uZXhhbnQgY3gyNDEyMy9jeDI0MTA5IC0gRFZCIFFQU0sgU2F0ZWxsaXRlIGRlbW9kL3R1bmVyIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXZlbiBUb3RoIDxzdG90aEBoYXVwcGF1Z2UuY29tPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaWZuZGVmIENYMjQxMjNfSAorI2RlZmluZSBDWDI0MTIzX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCitzdHJ1Y3QgY3gyNDEyM19jb25maWcKK3sKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwkvKgorCSAgIGNhcmRzIGxpa2UgSGF1cHBhdWdlIE5vdmEtUyBQbHVzL05vdmEtU0UyIHVzZSBhbiBJbnRlcnNpbCBJU0w2NDIxIGNoaXAKKwkgICBmb3IgTE5CIGNvbnRyb2wsIHdoaWxlIEtXb3JsZCBEVkItUyAxMDAgdXNlIHRoZSBMTkJEQyBhbmQgTE5CVG9uZSBiaXRzCisJICAgZnJvbSByZWdpc3RlciAweDI5IG9mIHRoZSBDWDI0MTIzIGRlbW9kdWxhdG9yCisJKi8KKwlpbnQgdXNlX2lzbDY0MjE7CisKKwkvKiBQTEwgbWFpbnRlbmFuY2UgKi8KKwlpbnQgKCpwbGxfaW5pdCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOworCWludCAoKnBsbF9zZXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcyk7CisKKwkvKiBOZWVkIHRvIHNldCBkZXZpY2UgcGFyYW0gZm9yIHN0YXJ0X2RtYSAqLworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKKworCXZvaWQgKCplbmFibGVfbG5iX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgb24pOworfTsKKworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisKKyNlbmRpZiAvKiBDWDI0MTIzX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IGY4NTdiODYuLmEzZDU3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtMTA3LDE4ICsxMDcsMTkgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfbWljcm90dW5lXzQwNDIpOwogCi1zdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGhvbXNvbl9kdHQ3NjExID0gewotCS5uYW1lICA9ICJUaG9tc29uIGR0dDc2MTEiLAotCS5taW4gICA9ICA0NDAwMDAwMCwKLQkubWF4ICAgPSA5NTgwMDAwMDAsCitzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGhvbXNvbl9kdHQ3NjF4ID0geworCS8qIERUVCA3NjExIDc2MTFBIDc2MTIgNzYxMyA3NjEzQSA3NjE0IDc2MTUgNzYxNUEgKi8KKwkubmFtZSAgPSAiVGhvbXNvbiBkdHQ3NjF4IiwKKwkubWluICAgPSAgNTcwMDAwMDAsCisJLm1heCAgID0gODYzMDAwMDAwLAogCS5jb3VudCA9IDMsCiAJLmVudHJpZXMgPSB7Ci0JCXsgMTU3MjUwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4OGUsIDB4MzkgfSwKLQkJeyA0NTQwMDAwMDAsIDQ0MDAwMDAwLCA2MjUwMCwgMHg4ZSwgMHgzYSB9LAorCQl7IDE0NzAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweDhlLCAweDM5IH0sCisJCXsgNDE3MDAwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4OGUsIDB4M2EgfSwKIAkJeyA5OTk5OTk5OTksIDQ0MDAwMDAwLCA2MjUwMCwgMHg4ZSwgMHgzYyB9LAogCX0sCiB9OwotRVhQT1JUX1NZTUJPTChkdmJfcGxsX3Rob21zb25fZHR0NzYxMSk7CitFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfdGhvbXNvbl9kdHQ3NjF4KTsKIAogc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3Vua25vd25fMSA9IHsKIAkubmFtZSAgPSAidW5rbm93biAxIiwgLyogdXNlZCBieSBkbnR2IGxpdmUgZHZiLXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCmluZGV4IDQ5N2QzMWQuLjI0ZDRkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaApAQCAtMjUsNyArMjUsNyBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2R0dDc2MTA7CiBleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX2xnX3oyMDE7CiBleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX21pY3JvdHVuZV80MDQyOwotZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2R0dDc2MTE7CitleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3Rob21zb25fZHR0NzYxeDsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdW5rbm93bl8xOwogCiBleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3R1YTYwMTB4czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmMKaW5kZXggY2I1MzAxODY1Li45ZDIxNDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYwpAQCAtMjcsNiArMjcsNyBAQAogICogICBEVmlDTyBGdXNpb25IRFRWIDMgR29sZC1UCiAgKiAgIERWaUNPIEZ1c2lvbkhEVFYgNSBHb2xkCiAgKiAgIERWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlCisgKiAgIERWaUNPIEZ1c2lvbkhEVFYgNSBVU0IgR29sZAogICogICBBaXIyUEMvQWlyU3RhciAyIEFUU0MgM3JkIGdlbmVyYXRpb24gKEhENTAwMCkKICAqCiAgKiBUT0RPOgpAQCAtNDAyLDYgKzQwMyw4IEBACiAJCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIHBhcmFtKTsKIAogCS8qIEtlZXAgdHJhY2sgb2YgdGhlIG5ldyBmcmVxdWVuY3kgKi8KKwkvKiBGSVhNRSB0aGlzIGlzIHRoZSB3cm9uZyB3YXkgdG8gZG8gdGhpcy4uLiAgICAgICAgICAgKi8KKwkvKiBUaGUgdHVuZXIgaXMgc2hhcmVkIHdpdGggdGhlIHZpZGVvNGxpbnV4IGFuYWxvZyBBUEkgKi8KIAlzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3kgPSBwYXJhbS0+ZnJlcXVlbmN5OwogCiAJbGdkdDMzMHhfU3dSZXNldChzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jCmluZGV4IDhkNjcyMjguLmVjNGU2NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jCkBAIC01MDEsNyArNTAxLDggQEAKIAljYXNlIElEX1ZQMzEwOgogCS8vIEZvciBub3cgd2Ugd2lsbCBkbyB0aGlzIG9ubHkgZm9yIHRoZSBWUDMxMC4KIAkvLyBJdCBzaG91bGQgYmUgYmV0dGVyIGZvciB0aGUgbXQzMTIgYXMgd2VsbCwgYnV0IHR1bm5pbmcgd2lsbCBiZSBzbG93ZXIuIEFDQ0pyIDA5LzI5LzAzCi0JCWlmICgocmV0ID0gbXQzMTJfcmVhZHJlZyhzdGF0ZSwgQ09ORklHLCAmY29uZmlnX3ZhbCkgPCAwKSkKKwkJcmV0ID0gbXQzMTJfcmVhZHJlZyhzdGF0ZSwgQ09ORklHLCAmY29uZmlnX3ZhbCk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJaWYgKHAtPnUucXBzay5zeW1ib2xfcmF0ZSA+PSAzMDAwMDAwMCkgLy9Ob3RlIHRoYXQgMzBNUy9zIHNob3VsZCB1c2UgOTBNSHoKIAkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDAyLmMKaW5kZXggNTJjNDE2MC4uNGYyNjNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAwMi5jCkBAIC0yMiw3ICsyMiw4IEBACiAvKgogICogVGhpcyBkcml2ZXIgbmVlZHMgZXh0ZXJuYWwgZmlybXdhcmUuIFBsZWFzZSB1c2UgdGhlIGNvbW1hbmQKICAqICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIG54dDIwMDIiIHRvCi0gKiBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUuCisgKiBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUKKyAqIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogICovCiAjZGVmaW5lIE5YVDIwMDJfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLW54dDIwMDIuZnciCiAjZGVmaW5lIENSQ19DQ0lUX01BU0sgMHgxMDIxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDYwMDAuYwppbmRleCBhNDU4YTNiLi5hMTZlZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQ2MDAwLmMKQEAgLTU3NCwxMSArNTc0LDExIEBACiAJCS5zeW1ib2xfcmF0ZV9tYXggPSA5MzYwMDAwLAkvKiBGSVhNRSAqLwogCQkuc3ltYm9sX3JhdGVfdG9sZXJhbmNlID0gNDAwMCwKIAkJLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAotCQkgICAgICAgIEZFX0NBTl9GRUNfNF81IHwgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzZfNyB8Ci0JCSAgICAgICAgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDXzhfOSB8IEZFX0NBTl9GRUNfQVVUTyB8Ci0JCSAgICAgICAgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNX0FVVE8gfAotCQkgICAgICAgIEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAotCQkgICAgICAgIEZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwkJCUZFX0NBTl9GRUNfNF81IHwgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzZfNyB8CisJCQlGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfOF85IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV9BVVRPIHwKKwkJCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAogCX0sCiAKIAkucmVsZWFzZSA9IG54dDYwMDBfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5jCmluZGV4IDUzMWY3NjIuLjdjM2FlZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYwpAQCAtMjUsNyArMjUsOCBAQAogLyoKICAqIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCiAgKiAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBvcjUxMjExIiB0bwotICogZG93bmxvYWQvZXh0cmFjdCBpdCwgYW5kIHRoZW4gY29weSBpdCB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlLgorICogZG93bmxvYWQvZXh0cmFjdCBpdCwgYW5kIHRoZW4gY29weSBpdCB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlCisgKiBvciAvbGliL2Zpcm13YXJlIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KICAqLwogI2RlZmluZSBPUjUxMjExX0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS1vcjUxMjExLmZ3IgogCkBAIC0xMTIsNyArMTEzLDcgQEAKIAl1OCB0dWRhdGFbNTg1XTsKIAlpbnQgaTsKIAotCWRwcmludGsoIkZpcm13YXJlIGlzICVkIGJ5dGVzXG4iLGZ3LT5zaXplKTsKKwlkcHJpbnRrKCJGaXJtd2FyZSBpcyAlemQgYnl0ZXNcbiIsZnctPnNpemUpOwogCiAJLyogR2V0IGVwcm9tIGRhdGEgKi8KIAl0dWRhdGFbMF0gPSAxNzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jCmluZGV4IDE4NzE1MDkuLmQ2OTQ3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuYwpAQCAtNTIxLDggKzUyMSw4IEBACiAKIAkJY2FzZSBGRUNfM180OgogCQkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMCwgMHgwNCk7Ci0JCSAgICAgICAgczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMSwgMHgxMiB8IGludmVyc2lvbik7Ci0JCSAgICAgICAgYnJlYWs7CisJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMxLCAweDEyIHwgaW52ZXJzaW9uKTsKKwkJCWJyZWFrOwogCiAJCWNhc2UgRkVDXzVfNjoKIAkJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MzAsIDB4MDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3MC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3MC5jCmluZGV4IGZjMDZjZDYuLjczODI5ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4NzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODcwLmMKQEAgLTIyLDcgKzIyLDggQEAKIC8qCiAgKiBUaGlzIGRyaXZlciBuZWVkcyBleHRlcm5hbCBmaXJtd2FyZS4gUGxlYXNlIHVzZSB0aGUgY29tbWFuZAogICogIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgYWxwc190ZGxiNyIgdG8KLSAqIGRvd25sb2FkL2V4dHJhY3QgaXQsIGFuZCB0aGVuIGNvcHkgaXQgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS4KKyAqIGRvd25sb2FkL2V4dHJhY3QgaXQsIGFuZCB0aGVuIGNvcHkgaXQgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZQorICogb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCiAgKi8KICNkZWZpbmUgU1A4ODcwX0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS1zcDg4NzAuZnciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guYwppbmRleCBlM2I2NjU3Li5lYjhhNjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3eC5jCkBAIC01LDcgKzUsOCBAQAogLyoKICAqIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCiAgKiAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBzcDg4N3giIHRvCi0gKiBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUuCisgKiBkb3dubG9hZC9leHRyYWN0IGl0LCBhbmQgdGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUKKyAqIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogICovCiAjZGVmaW5lIFNQODg3WF9ERUZBVUxUX0ZJUk1XQVJFICJkdmItZmUtc3A4ODd4LmZ3IgogCkBAIC01ODEsNyArNTgyLDcgQEAKIAkJLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAogCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CiAJCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwKLQkJICAgICAgICBGRV9DQU5fUkVDT1ZFUgorCQkJRkVfQ0FOX1JFQ09WRVIKIAl9LAogCiAJLnJlbGVhc2UgPSBzcDg4N3hfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCmluZGV4IDE3N2Q3MWQuLjViY2QwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYwpAQCAtMTMxLDYgKzEzMSwxMyBAQAogCXJldHVybiByZXQgPT0gMiA/IDAgOiByZXQ7CiB9CiAKK2ludCBzdHYwMjk5X2VuYWJsZV9wbGxpMmMgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0cnVjdCBzdHYwMjk5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJcmV0dXJuIHN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweGI1KTsJLyogIGVuYWJsZSBpMmMgcmVwZWF0ZXIgb24gc3R2MDI5OSAgKi8KK30KKwogc3RhdGljIGludCBzdHYwMjk5X3NldF9GRUMgKHN0cnVjdCBzdHYwMjk5X3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgZmVjKQogewogCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKQEAgLTM4Nyw3ICszOTQsNyBAQAogCX07CiB9CiAKLXN0YXRpYyBpbnQgc3R2MDI5OV9zZW5kX2xlZ2FjeV9kaXNoX2NtZCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiBjbWQpCitzdGF0aWMgaW50IHN0djAyOTlfc2VuZF9sZWdhY3lfZGlzaF9jbWQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1bnNpZ25lZCBsb25nIGNtZCkKIHsKIAlzdHJ1Y3Qgc3R2MDI5OV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCByZWcweDA4OwpAQCAtNDA3LDcgKzQxNCw3IEBACiAKIAljbWQgPSBjbWQgPDwgMTsKIAlpZiAoZGVidWdfbGVnYWN5X2Rpc2hfc3dpdGNoKQotCQlwcmludGsgKCIlcyBzd2l0Y2ggY29tbWFuZDogMHglMDR4XG4iLF9fRlVOQ1RJT05fXywgY21kKTsKKwkJcHJpbnRrICgiJXMgc3dpdGNoIGNvbW1hbmQ6IDB4JTA0bHhcbiIsX19GVU5DVElPTl9fLCBjbWQpOwogCiAJZG9fZ2V0dGltZW9mZGF5ICgmbmV4dHRpbWUpOwogCWlmIChkZWJ1Z19sZWdhY3lfZGlzaF9zd2l0Y2gpCkBAIC03MTcsNSArNzI0LDYgQEAKIAkgICAgICAiQW5kcmVhcyBPYmVycml0dGVyLCBBbmRyZXcgZGUgUXVpbmNleSwgS2VubmV0aCBBYWZs+HkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorRVhQT1JUX1NZTUJPTChzdHYwMjk5X2VuYWJsZV9wbGxpMmMpOwogRVhQT1JUX1NZTUJPTChzdHYwMjk5X3dyaXRlcmVnKTsKIEVYUE9SVF9TWU1CT0woc3R2MDI5OV9hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKaW5kZXggOWFmM2Q3MS4uMzJjODdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCkBAIC05NCw2ICs5NCw3IEBACiB9OwogCiBleHRlcm4gaW50IHN0djAyOTlfd3JpdGVyZWcgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCByZWcsIHU4IGRhdGEpOworZXh0ZXJuIGludCBzdHYwMjk5X2VuYWJsZV9wbGxpMmMgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHN0djAyOTlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwMjk5X2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCmluZGV4IDQyNWNkMTkuLjIxMjU1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCkBAIC05NSw3ICs5NSw3IEBACiAJdTggYjAgW10gPSB7IHJlZyB9OwogCXU4IGIxIFtdID0geyAwIH07CiAJc3RydWN0IGkyY19tc2cgbXNnIFtdID0geyB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAotCQkgICAgICAgICAgICAgICAgICB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDEgfSB9OworCQkJCSAgeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAxIH0gfTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyIChzdGF0ZS0+aTJjLCBtc2csIDIpOwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJCS5mcmVxdWVuY3lfbWF4ID0gODU4MDAwMDAwLAogCQkuc3ltYm9sX3JhdGVfbWluID0gKFhJTi8yKS82NCwgICAgIC8qIFNBQ0xLLzY0ID09IChYSU4vMikvNjQgKi8KIAkJLnN5bWJvbF9yYXRlX21heCA9IChYSU4vMikvNCwgICAgICAvKiBTQUNMSy80ICovCi0JI2lmIDAKKyNpZiAwCiAJCS5mcmVxdWVuY3lfdG9sZXJhbmNlID0gPz8/LAogCQkuc3ltYm9sX3JhdGVfdG9sZXJhbmNlID0gPz8/LCAgLyogcHBtICovICAvKiA9PSA4JSAoc3BlYyBwLiA1KSAqLwogCSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwppbmRleCBkZDAyYWZmLi5jNjNlOWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwpAQCAtMjMsNyArMjMsOCBAQAogICogVGhpcyBkcml2ZXIgbmVlZHMgZXh0ZXJuYWwgZmlybXdhcmUuIFBsZWFzZSB1c2UgdGhlIGNvbW1hbmRzCiAgKiAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSB0ZGExMDA0NSIsCiAgKiAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSB0ZGExMDA0NiIgdG8KLSAqIGRvd25sb2FkL2V4dHJhY3QgdGhlbSwgYW5kIHRoZW4gY29weSB0aGVtIHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUuCisgKiBkb3dubG9hZC9leHRyYWN0IHRoZW0sIGFuZCB0aGVuIGNvcHkgdGhlbSB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlCisgKiBvciAvbGliL2Zpcm13YXJlIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KICAqLwogI2RlZmluZSBUREExMDA0NV9ERUZBVUxUX0ZJUk1XQVJFICJkdmItZmUtdGRhMTAwNDUuZnciCiAjZGVmaW5lIFREQTEwMDQ2X0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS10ZGExMDA0Ni5mdyIKQEAgLTI3MSwzMiArMjcyLDU3IEBACiBzdGF0aWMgaW50IHRkYTEwMDQ2aF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0ZGExMDA0eF9zdGF0ZSAqc3RhdGUsCiAJCQkJICAgZmVfYmFuZHdpZHRoX3QgYmFuZHdpZHRoKQogewotCXN0YXRpYyB1OCBiYW5kd2lkdGhfNm1oeltdID0geyAweDgwLCAweDE1LCAweGZlLCAweGFiLCAweDhlIH07Ci0Jc3RhdGljIHU4IGJhbmR3aWR0aF83bWh6W10gPSB7IDB4NmUsIDB4MDIsIDB4NTMsIDB4YzgsIDB4MjUgfTsKLQlzdGF0aWMgdTggYmFuZHdpZHRoXzhtaHpbXSA9IHsgMHg2MCwgMHgxMiwgMHhhOCwgMHhlNCwgMHhiZCB9OworCXN0YXRpYyB1OCBiYW5kd2lkdGhfNm1oel81M01bXSA9IHsgMHg3YiwgMHgyZSwgMHgxMSwgMHhmMCwgMHhkMiB9OworCXN0YXRpYyB1OCBiYW5kd2lkdGhfN21oel81M01bXSA9IHsgMHg2YSwgMHgwMiwgMHg2YSwgMHg0MywgMHg5ZiB9OworCXN0YXRpYyB1OCBiYW5kd2lkdGhfOG1oel81M01bXSA9IHsgMHg1YywgMHgzMiwgMHhjMiwgMHg5NiwgMHg2ZCB9OwogCisJc3RhdGljIHU4IGJhbmR3aWR0aF82bWh6XzQ4TVtdID0geyAweDcwLCAweDAyLCAweDQ5LCAweDI0LCAweDkyIH07CisJc3RhdGljIHU4IGJhbmR3aWR0aF83bWh6XzQ4TVtdID0geyAweDYwLCAweDAyLCAweGFhLCAweGFhLCAweGFiIH07CisJc3RhdGljIHU4IGJhbmR3aWR0aF84bWh6XzQ4TVtdID0geyAweDU0LCAweDAzLCAweDBjLCAweDMwLCAweGMzIH07CisJaW50IHRkYTEwMDQ2X2NsazUzbTsKKworCWlmICgoc3RhdGUtPmNvbmZpZy0+aWZfZnJlcSA9PSBUREExMDA0Nl9GUkVRXzA0NSkgfHwKKwkgICAgKHN0YXRlLT5jb25maWctPmlmX2ZyZXEgPT0gVERBMTAwNDZfRlJFUV8wNTIpKQorCQl0ZGExMDA0Nl9jbGs1M20gPSAwOworCWVsc2UKKwkJdGRhMTAwNDZfY2xrNTNtID0gMTsKIAlzd2l0Y2ggKGJhbmR3aWR0aCkgewogCWNhc2UgQkFORFdJRFRIXzZfTUhaOgotCQl0ZGExMDA0eF93cml0ZV9idWYoc3RhdGUsIFREQTEwMDQ2SF9USU1FX1dSRUYxLCBiYW5kd2lkdGhfNm1oeiwgc2l6ZW9mKGJhbmR3aWR0aF82bWh6KSk7CisJCWlmICh0ZGExMDA0Nl9jbGs1M20pCisJCQl0ZGExMDA0eF93cml0ZV9idWYoc3RhdGUsIFREQTEwMDQ2SF9USU1FX1dSRUYxLCBiYW5kd2lkdGhfNm1oel81M00sCisJCQkJCQkgIHNpemVvZihiYW5kd2lkdGhfNm1oel81M00pKTsKKwkJZWxzZQorCQkJdGRhMTAwNHhfd3JpdGVfYnVmKHN0YXRlLCBUREExMDA0NkhfVElNRV9XUkVGMSwgYmFuZHdpZHRoXzZtaHpfNDhNLAorCQkJCQkJICBzaXplb2YoYmFuZHdpZHRoXzZtaHpfNDhNKSk7CiAJCWlmIChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxID09IFREQTEwMDQ2X0ZSRVFfMDQ1KSB7Ci0JCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MDkpOwotCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDRmKTsKKwkJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHgwYSk7CisJCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4YWIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBCQU5EV0lEVEhfN19NSFo6Ci0JCXRkYTEwMDR4X3dyaXRlX2J1ZihzdGF0ZSwgVERBMTAwNDZIX1RJTUVfV1JFRjEsIGJhbmR3aWR0aF83bWh6LCBzaXplb2YoYmFuZHdpZHRoXzdtaHopKTsKKwkJaWYgKHRkYTEwMDQ2X2NsazUzbSkKKwkJCXRkYTEwMDR4X3dyaXRlX2J1ZihzdGF0ZSwgVERBMTAwNDZIX1RJTUVfV1JFRjEsIGJhbmR3aWR0aF83bWh6XzUzTSwKKwkJCQkJCSAgc2l6ZW9mKGJhbmR3aWR0aF83bWh6XzUzTSkpOworCQllbHNlCisJCQl0ZGExMDA0eF93cml0ZV9idWYoc3RhdGUsIFREQTEwMDQ2SF9USU1FX1dSRUYxLCBiYW5kd2lkdGhfN21oel80OE0sCisJCQkJCQkgIHNpemVvZihiYW5kd2lkdGhfN21oel80OE0pKTsKIAkJaWYgKHN0YXRlLT5jb25maWctPmlmX2ZyZXEgPT0gVERBMTAwNDZfRlJFUV8wNDUpIHsKLQkJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHgwYSk7Ci0JCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4NzkpOworCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTVNCLCAweDBjKTsKKwkJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHgwMCk7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnVmKHN0YXRlLCBUREExMDA0NkhfVElNRV9XUkVGMSwgYmFuZHdpZHRoXzhtaHosIHNpemVvZihiYW5kd2lkdGhfOG1oeikpOworCQlpZiAodGRhMTAwNDZfY2xrNTNtKQorCQkJdGRhMTAwNHhfd3JpdGVfYnVmKHN0YXRlLCBUREExMDA0NkhfVElNRV9XUkVGMSwgYmFuZHdpZHRoXzhtaHpfNTNNLAorCQkJCQkJICBzaXplb2YoYmFuZHdpZHRoXzhtaHpfNTNNKSk7CisJCWVsc2UKKwkJCXRkYTEwMDR4X3dyaXRlX2J1ZihzdGF0ZSwgVERBMTAwNDZIX1RJTUVfV1JFRjEsIGJhbmR3aWR0aF84bWh6XzQ4TSwKKwkJCQkJCSAgc2l6ZW9mKGJhbmR3aWR0aF84bWh6XzQ4TSkpOwogCQlpZiAoc3RhdGUtPmNvbmZpZy0+aWZfZnJlcSA9PSBUREExMDA0Nl9GUkVRXzA0NSkgewotCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTVNCLCAweDBiKTsKLQkJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHhhMyk7CisJCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MGQpOworCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDU1KTsKIAkJfQogCQlicmVhazsKIApAQCAtNDE4LDkgKzQ0NCwyMiBAQAogc3RhdGljIHZvaWQgdGRhMTAwNDZfaW5pdF9wbGxzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0cnVjdCB0ZGExMDA0eF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgdGRhMTAwNDZfY2xrNTNtOworCisJaWYgKChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxID09IFREQTEwMDQ2X0ZSRVFfMDQ1KSB8fAorCSAgICAoc3RhdGUtPmNvbmZpZy0+aWZfZnJlcSA9PSBUREExMDA0Nl9GUkVRXzA1MikpCisJCXRkYTEwMDQ2X2NsazUzbSA9IDA7CisJZWxzZQorCQl0ZGExMDA0Nl9jbGs1M20gPSAxOwogCiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMSwgMHhmMCk7Ci0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMiwgMHgwYSk7IC8vIFBMTCBNID0gMTAKKwlpZih0ZGExMDA0Nl9jbGs1M20pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidGRhMTAwNHg6IHNldHRpbmcgdXAgcGxscyBmb3IgNTNNSHogc2FtcGxpbmcgY2xvY2tcbiIpOworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwyLCAweDA4KTsgLy8gUExMIE0gPSA4CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidGRhMTAwNHg6IHNldHRpbmcgdXAgcGxscyBmb3IgNDhNSHogc2FtcGxpbmcgY2xvY2tcbiIpOworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwyLCAweDAzKTsgLy8gUExMIE0gPSAzCisJfQogCWlmIChzdGF0ZS0+Y29uZmlnLT54dGFsX2ZyZXEgPT0gVERBMTAwNDZfWFRBTF80TSApIHsKIAkJZHByaW50aygiJXM6IHNldHRpbmcgdXAgUExMcyBmb3IgYSA0IE1IeiBYdGFsXG4iLCBfX0ZVTkNUSU9OX18pOwogCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwzLCAwKTsgLy8gUExMIFAgPSBOID0gMApAQCAtNDI4LDI2ICs0NjcsMzIgQEAKIAkJZHByaW50aygiJXM6IHNldHRpbmcgdXAgUExMcyBmb3IgYSAxNiBNSHogWHRhbFxuIiwgX19GVU5DVElPTl9fKTsKIAkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMywgMyk7IC8vIFBMTCBQID0gMCwgTiA9IDMKIAl9Ci0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX09GRlNFVCwgOTkpOworCWlmKHRkYTEwMDQ2X2NsazUzbSkKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX09GRlNFVCwgMHg2Nyk7CisJZWxzZQorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfT0ZGU0VULCAweDcyKTsKKwkvKiBOb3RlIGNsb2NrIGZyZXF1ZW5jeSBpcyBoYW5kbGVkIGltcGxpY2l0bHkgKi8KIAlzd2l0Y2ggKHN0YXRlLT5jb25maWctPmlmX2ZyZXEpIHsKLQljYXNlIFREQTEwMDQ2X0ZSRVFfMzYxNzoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTVNCLCAweGQ0KTsKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDJjKTsKLQkJYnJlYWs7Ci0JY2FzZSBUREExMDA0Nl9GUkVRXzM2MTM6Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHhkNCk7Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHgxMyk7Ci0JCWJyZWFrOwogCWNhc2UgVERBMTAwNDZfRlJFUV8wNDU6Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHgwYik7Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHhhMyk7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHgwYyk7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHgwMCk7CiAJCWJyZWFrOwogCWNhc2UgVERBMTAwNDZfRlJFUV8wNTI6Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHgwYyk7Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHgwNik7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHgwZCk7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHhjNyk7CisJCWJyZWFrOworCWNhc2UgVERBMTAwNDZfRlJFUV8zNjE3OgorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4ZDcpOworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4NTkpOworCQlicmVhazsKKwljYXNlIFREQTEwMDQ2X0ZSRVFfMzYxMzoKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTVNCLCAweGQ3KTsKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDNmKTsKIAkJYnJlYWs7CiAJfQogCXRkYTEwMDQ2aF9zZXRfYmFuZHdpZHRoKHN0YXRlLCBCQU5EV0lEVEhfOF9NSFopOyAvLyBkZWZhdWx0IGJhbmR3aWR0aCA4IE1IegorCS8qIGxldCB0aGUgUExMcyBzZXR0bGUgKi8KKwltc2xlZXAoMTIwKTsKIH0KIAogc3RhdGljIGludCB0ZGExMDA0Nl9md3VwbG9hZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKQEAgLTQ2MiwxMyArNTA3LDEzIEBACiAJLyogbGV0IHRoZSBjbG9ja3MgcmVjb3ZlciBmcm9tIHNsZWVwICovCiAJbXNsZWVwKDUpOwogCisJLyogVGhlIFBMTHMgbmVlZCB0byBiZSByZXByb2dyYW1tZWQgYWZ0ZXIgc2xlZXAgKi8KKwl0ZGExMDA0Nl9pbml0X3BsbHMoZmUpOworCiAJLyogZG9uJ3QgcmUtdXBsb2FkIHVubGVzcyBuZWNlc3NhcnkgKi8KIAlpZiAodGRhMTAwNHhfY2hlY2tfdXBsb2FkX29rKHN0YXRlKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCS8qIHNldCBwYXJhbWV0ZXJzICovCi0JdGRhMTAwNDZfaW5pdF9wbGxzKGZlKTsKLQogCWlmIChzdGF0ZS0+Y29uZmlnLT5yZXF1ZXN0X2Zpcm13YXJlICE9IE5VTEwpIHsKIAkJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyAidGRhMTAwNHg6IHdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZC4uLlxuIik7CkBAIC00ODQsNyArNTI5LDYgQEAKIAkJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKIAkJLyogYm9vdCBmcm9tIGZpcm13YXJlIGVlcHJvbSAqLwotCQkvKiBIYWMgTm90ZTogd2UgbWlnaHQgbmVlZCB0byBkbyBzb21lIEdQSU8gTWFnaWMgaGVyZSAqLwogCQlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogYm9vdGluZyBmcm9tIGVlcHJvbVxuIik7CiAJCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgNCwgNCk7CiAJCW1zbGVlcCgzMDApOwpAQCAtNjA2LDEwICs2NTAsOSBAQAogCiAJLy8gdGRhIHNldHVwCiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAweDIwLCAwKTsgLy8gZGlzYWJsZSBEU1Agd2F0Y2hkb2cgdGltZXIKLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQVVUTywgNyk7IC8vIHNlbGVjdCBIUCBzdHJlYW0KLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkMxLCA4KTsgLy8gZGlzYWJsZSBwdWxzZSBraWxsZXIKKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQVVUTywgMHg4Nyk7ICAgIC8vIDEwMCBwcG0gY3J5c3RhbCwgc2VsZWN0IEhQIHN0cmVhbQorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzEsIDgpOyAgICAgIC8vIGRpc2FibGUgcHVsc2Uga2lsbGVyCiAKLQl0ZGExMDA0Nl9pbml0X3BsbHMoZmUpOwogCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+YWdjX2NvbmZpZykgewogCWNhc2UgVERBMTAwNDZfQUdDX0RFRkFVTFQ6CiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDB4MDApOyAvLyBBR0Mgc2V0dXAKQEAgLTYyNiwyNSArNjY5LDIyIEBACiAJY2FzZSBUREExMDA0Nl9BR0NfVERBODI3WDoKIAkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfQ09ORiwgMHgwMik7ICAgLy8gQUdDIHNldHVwCiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX1RIUiwgMHg3MCk7ICAgIC8vIEFHQyBUaHJlc2hvbGQKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfUkVOT1JNLCAweDBFKTsgLy8gR2FpbiBSZW5vcm1hbGl6ZQotCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfUE9MQVJJVFksIDB4NjApOyAvLyBzZXQgQUdDIHBvbGFyaXRpZXMKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfUkVOT1JNLCAweDA4KTsgLy8gR2FpbiBSZW5vcm1hbGl6ZQorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfUE9MQVJJVFksIDB4NmEpOyAvLyBzZXQgQUdDIHBvbGFyaXRpZXMKIAkJYnJlYWs7CiAJfQorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQURDMiwgMHgzOCk7CiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GX1RSSVNUQVRFMSwgMHg2MSk7IC8vIFR1cm4gYm90aCBBR0Mgb3V0cHV0cyBvbgogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX1RVTl9NSU4sIDApOwkgIC8vIH0KIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19UVU5fTUFYLCAweGZmKTsgLy8gfSBBR0MgbWluL21heCB2YWx1ZXMKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19JRl9NSU4sIDApOwkgIC8vIH0KIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19JRl9NQVgsIDB4ZmYpOyAgLy8gfQotCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX0dBSU5TLCAxKTsgLy8gSUYgZ2FpbiAyLCBUVU4gZ2FpbiAxCisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfR0FJTlMsIDB4MTIpOyAvLyBJRiBnYWluIDIsIFRVTiBnYWluIDEKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NWQkVSX0NUUkwsIDB4MWEpOyAvLyAxMF42IFZCRVIgbWVhc3VyZW1lbnQgYml0cwogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GX1RTMSwgNyk7IC8vIE1QRUcyIGludGVyZmFjZSBjb25maWcKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORl9UUzIsIDB4YzApOyAvLyBNUEVHMiBpbnRlcmZhY2UgY29uZmlnCiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgMHgzYSwgMHg4MCwgc3RhdGUtPmNvbmZpZy0+aW52ZXJ0X29jbGsgPDwgNyk7CiAKLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfVFJJU1RBVEUyLCAweGUxKTsgLy8gdHJpc3RhdGUgc2V0dXAKLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0dQSU9fT1VUX1NFTCwgMHhjYyk7IC8vIEdQSU8gb3V0cHV0IGNvbmZpZwotCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfR1BJT19TRUxFQ1QsIDgpOyAvLyBHUElPIHNlbGVjdAotCiAJc3RhdGUtPmluaXRpYWxpc2VkID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4Niw5ICs3MjYsOSBAQAogCiAJLy8gU2V0IHN0YW5kYXJkIHBhcmFtcy4uIG9yIHB1dCB0aGVtIHRvIGF1dG8KIAlpZiAoKGZlX3BhcmFtcy0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9PSBGRUNfQVVUTykgfHwKLQkgICAgKGZlX3BhcmFtcy0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9PSBGRUNfQVVUTykgfHwKLQkgICAgKGZlX3BhcmFtcy0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPT0gUUFNX0FVVE8pIHx8Ci0JICAgIChmZV9wYXJhbXMtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX0FVVE8pKSB7CisJCShmZV9wYXJhbXMtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPT0gRkVDX0FVVE8pIHx8CisJCShmZV9wYXJhbXMtPnUub2ZkbS5jb25zdGVsbGF0aW9uID09IFFBTV9BVVRPKSB8fAorCQkoZmVfcGFyYW1zLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID09IEhJRVJBUkNIWV9BVVRPKSkgewogCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9BVVRPLCAxLCAxKTsJLy8gZW5hYmxlIGF1dG8KIAkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfSU5fQ09ORjEsIDB4MDMsIDApOwkvLyB0dXJuIG9mZiBjb25zdGVsbGF0aW9uIGJpdHMKIAkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfSU5fQ09ORjEsIDB4NjAsIDApOwkvLyB0dXJuIG9mZiBoaWVyYXJjaHkgYml0cwpAQCAtODUxLDYgKzg5MSw3IEBACiBzdGF0aWMgaW50IHRkYTEwMDR4X2dldF9mZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZV9wYXJhbXMpCiB7CiAJc3RydWN0IHRkYTEwMDR4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCiAJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvLyBpbnZlcnNpb24gc3RhdHVzCkBAIC04NzUsMTYgKzkxNiwxOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0KIAljYXNlIFREQTEwMDRYX0RFTU9EX1REQTEwMDQ2OgogCQlzd2l0Y2ggKHRkYTEwMDR4X3JlYWRfYnl0ZShzdGF0ZSwgVERBMTAwNDZIX1RJTUVfV1JFRjEpKSB7Ci0JCWNhc2UgMHg2MDoKKwkJY2FzZSAweDVjOgorCQljYXNlIDB4NTQ6CiAJCQlmZV9wYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfOF9NSFo7CiAJCQlicmVhazsKLQkJY2FzZSAweDZlOgorCQljYXNlIDB4NmE6CisJCWNhc2UgMHg2MDoKIAkJCWZlX3BhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF83X01IWjsKIAkJCWJyZWFrOwotCQljYXNlIDB4ODA6CisJCWNhc2UgMHg3YjoKKwkJY2FzZSAweDcwOgogCQkJZmVfcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWcKaW5kZXggZjAyODQyYi4uODRmOGY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIFBsdXRvMiBGUEdBIGxpa2UgdGhlIFNhdGVsY28KIAkgIEVhc3l3YXRjaCBNb2JpbGUgVGVycmVzdHJpYWwgRFZCLVQgUmVjZWl2ZXIuCiAKLSAgICAgICAgICBTaW5jZSB0aGVzZSBjYXJkcyBoYXZlIG5vIE1QRUcgZGVjb2RlciBvbmJvYXJkLCB0aGV5IHRyYW5zbWl0CisJICBTaW5jZSB0aGVzZSBjYXJkcyBoYXZlIG5vIE1QRUcgZGVjb2RlciBvbmJvYXJkLCB0aGV5IHRyYW5zbWl0CiAJICBvbmx5IGNvbXByZXNzZWQgTVBFRyBkYXRhIG92ZXIgdGhlIFBDSSBidXMsIHNvIHlvdSBuZWVkCiAJICBhbiBleHRlcm5hbCBzb2Z0d2FyZSBkZWNvZGVyIHRvIHdhdGNoIFRWIG9uIHlvdXIgY29tcHV0ZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCmluZGV4IGZhNTAzNGEuLjViMmFhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwpAQCAtMTgsOSArMTgsMTAgQEAKIAkgIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgdGhlIGZ1bGxmZWF0dXJlZCBjYXJkcyB3aXRoCiAJICBvbmJvYXJkIE1QRUcyIGRlY29kZXIuCiAKLSAgICAgICAgICBUaGlzIGRyaXZlciBuZWVkcyBhbiBleHRlcm5hbCBmaXJtd2FyZS4gUGxlYXNlIHVzZSB0aGUgc2NyaXB0Ci0gICAgICAgICAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgYXY3MTEwIiB0bwotICAgICAgICAgIGRvd25sb2FkL2V4dHJhY3QgaXQsIGFuZCB0aGVuIGNvcHkgaXQgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS4KKwkgIFRoaXMgZHJpdmVyIG5lZWRzIGFuIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBzY3JpcHQKKwkgICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGF2NzExMCIgdG8KKwkgIGRvd25sb2FkL2V4dHJhY3QgaXQsIGFuZCB0aGVuIGNvcHkgaXQgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZQorCSAgb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCiAKIAkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGNhcmQgYW5kIHdhbnQgdG8gdXNlIGl0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL01ha2VmaWxlCmluZGV4IDgyNWFiMWMuLmE2OTA3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiBob3N0cHJvZ3MteQk6PSBmZHVtcAogCiBpZmRlZiBDT05GSUdfRFZCX0FWNzExMF9GSVJNV0FSRQotJChvYmopL2F2NzExMC5vOiAkKG9iaikvZmR1bXAgJChvYmopL2F2NzExMF9maXJtLmggCiskKG9iaikvYXY3MTEwLm86ICQob2JqKS9mZHVtcCAkKG9iaikvYXY3MTEwX2Zpcm0uaAogCiAkKG9iaikvYXY3MTEwX2Zpcm0uaDoKIAkkKG9iaikvZmR1bXAgJChDT05GSUdfRFZCX0FWNzExMF9GSVJNV0FSRV9GSUxFKSBkdmJfdHRwY2lfZncgJEAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggN2RhZTkxZS4uOGNlNDE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTEzMyw3ICsxMzMsMTMgQEAKIAkvKiByZW1haW5pbmcgaW5pdHMgYWNjb3JkaW5nIHRvIGNhcmQgYW5kIGZyb250ZW5kIHR5cGUgKi8KIAlhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyA9IDA7CiAJYXY3MTEwLT5jdXJyZW50X2lucHV0ID0gMDsKLQlpZiAoaTJjX3dyaXRlcmVnKGF2NzExMCwgMHgyMCwgMHgwMCwgMHgwMCkgPT0gMSkgeworCWlmIChkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEzYzIgJiYgZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMDBhKSB7CisJCXByaW50aygiZHZiLXR0cGNpOiBNU1AzNDE1IGF1ZGlvIERBQyBAIGNhcmQgJWRcbiIsCisJCQlhdjcxMTAtPmR2Yl9hZGFwdGVyLm51bSk7CisJCWF2NzExMC0+YWRhY190eXBlID0gRFZCX0FEQUNfTVNQMzR4NTsKKwkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfQVVESU9EQUMsIEFEU3dpdGNoLCAxLCAwKTsgLy8gU1BESUYgb24KKwl9CisJZWxzZSBpZiAoaTJjX3dyaXRlcmVnKGF2NzExMCwgMHgyMCwgMHgwMCwgMHgwMCkgPT0gMSkgewogCQlwcmludGsgKCJkdmItdHRwY2k6IENyeXN0YWwgYXVkaW8gREFDIEAgY2FyZCAlZCBkZXRlY3RlZFxuIiwKIAkJCWF2NzExMC0+ZHZiX2FkYXB0ZXIubnVtKTsKIAkJYXY3MTEwLT5hZGFjX3R5cGUgPSBEVkJfQURBQ19DUllTVEFMOwpAQCAtMTU2LDEwICsxNjIsMTAgQEAKIAllbHNlIHsKIAkJYXY3MTEwLT5hZGFjX3R5cGUgPSBhZGFjOwogCQlwcmludGsoImR2Yi10dHBjaTogYWRhYyB0eXBlIHNldCB0byAlZCBAIGNhcmQgJWRcbiIsCi0JCQlhdjcxMTAtPmR2Yl9hZGFwdGVyLm51bSwgYXY3MTEwLT5hZGFjX3R5cGUpOworCQkJYXY3MTEwLT5hZGFjX3R5cGUsIGF2NzExMC0+ZHZiX2FkYXB0ZXIubnVtKTsKIAl9CiAKLQlpZiAoYXY3MTEwLT5hZGFjX3R5cGUgPT0gRFZCX0FEQUNfTk9ORSB8fCBhdjcxMTAtPmFkYWNfdHlwZSA9PSBEVkJfQURBQ19NU1ApIHsKKwlpZiAoYXY3MTEwLT5hZGFjX3R5cGUgPT0gRFZCX0FEQUNfTk9ORSB8fCBhdjcxMTAtPmFkYWNfdHlwZSA9PSBEVkJfQURBQ19NU1AzNHgwKSB7CiAJCS8vIHN3aXRjaCBEVkIgU0NBUlQgb24KIAkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfQVVESU9EQUMsIE1haW5Td2l0Y2gsIDEsIDApOwogCQlpZiAocmV0IDwgMCkKQEAgLTE5MCwxOSArMTk2LDE3IEBACiAKIAlhdjcxMTBfYm9vdGFybShhdjcxMTApOwogCW1zbGVlcCgxMDApOworCisJaW5pdF9hdjcxMTBfYXYoYXY3MTEwKTsKKworCS8qIGNhcmQtc3BlY2lmaWMgcmVjb3ZlcnkgKi8KKwlpZiAoYXY3MTEwLT5yZWNvdmVyKQorCQlhdjcxMTAtPnJlY292ZXIoYXY3MTEwKTsKKwogCXJlc3RhcnRfZmVlZHMoYXY3MTEwKTsKIAlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURGSUxURVIsIFNldElSLCAxLCBhdjcxMTAtPmlyX2NvbmZpZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFybV9lcnJvcihzdHJ1Y3QgYXY3MTEwICphdjcxMTApCi17Ci0JZHByaW50ayg0LCAiJXBcbiIsYXY3MTEwKTsKLQotCWF2NzExMC0+YXJtX2Vycm9ycysrOwotCWF2NzExMC0+YXJtX3JlYWR5ID0gMDsKLQlyZWNvdmVyX2FybShhdjcxMTApOwotfQotCiBzdGF0aWMgdm9pZCBhdjcxMTBfYXJtX3N5bmMoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogewogCWF2NzExMC0+YXJtX3JtbW9kID0gMTsKQEAgLTI0MCwyNiArMjQ0LDIyIEBACiAKIAkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCiAJCQlicmVhazsKLQogCQluZXdsb29wcyA9IHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgU1RBVFVTX0xPT1BTLCAwLCAyKTsKIAkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOwogCi0JCWlmIChuZXdsb29wcyA9PSBhdjcxMTAtPmFybV9sb29wcykgeworCQlpZiAobmV3bG9vcHMgPT0gYXY3MTEwLT5hcm1fbG9vcHMgfHwgYXY3MTEwLT5hcm1fZXJyb3JzID4gMykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IEFSTSBjcmFzaGVkIEAgY2FyZCAlZFxuIiwKIAkJCSAgICAgICBhdjcxMTAtPmR2Yl9hZGFwdGVyLm51bSk7CiAKLQkJCWFybV9lcnJvcihhdjcxMTApOwotCQkJYXY3NzEwX3NldF92aWRlb19tb2RlKGF2NzExMCwgdmlkbW9kZSk7Ci0KLQkJCWluaXRfYXY3MTEwX2F2KGF2NzExMCk7CisJCQlyZWNvdmVyX2FybShhdjcxMTApOwogCiAJCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPmRjb21sb2NrKSkKIAkJCQlicmVhazsKLQogCQkJbmV3bG9vcHMgPSByZGViaShhdjcxMTAsIERFQklOT1NXQVAsIFNUQVRVU19MT09QUywgMCwgMikgLSAxOwogCQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOwogCQl9CiAJCWF2NzExMC0+YXJtX2xvb3BzID0gbmV3bG9vcHM7CisJCWF2NzExMC0+YXJtX2Vycm9ycyA9IDA7CiAJfQogCiAJYXY3MTEwLT5hcm1fdGhyZWFkID0gTlVMTDsKQEAgLTUxMCwxMCArNTEwLDYgQEAKIAkJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgUlhfQlVGRiwgMCwgMik7CiAKIAkJYXY3MTEwLT52aWRlb19zaXplLmggPSBoX2FyICYgMHhmZmY7Ci0JCWRwcmludGsoOCwgIkdQSU8wIGlycTogREFUQV9NUEVHX1ZJREVPX0VWRU5UOiB3L2gvYXIgPSAldS8ldS8ldVxuIiwKLQkJCWF2NzExMC0+dmlkZW9fc2l6ZS53LAotCQkJYXY3MTEwLT52aWRlb19zaXplLmgsCi0JCQlhdjcxMTAtPnZpZGVvX3NpemUuYXNwZWN0X3JhdGlvKTsKIAogCQlldmVudC50eXBlID0gVklERU9fRVZFTlRfU0laRV9DSEFOR0VEOwogCQlldmVudC51LnNpemUudyA9IGF2NzExMC0+dmlkZW9fc2l6ZS53OwpAQCAtNTM1LDYgKzUzMSwxMSBAQAogCQkJZXZlbnQudS5zaXplLmFzcGVjdF9yYXRpbyA9IFZJREVPX0ZPUk1BVF80XzM7CiAJCQlhdjcxMTAtPnZpZGVvc3RhdGUudmlkZW9fZm9ybWF0ID0gVklERU9fRk9STUFUXzRfMzsKIAkJfQorCisJCWRwcmludGsoOCwgIkdQSU8wIGlycTogREFUQV9NUEVHX1ZJREVPX0VWRU5UOiB3L2gvYXIgPSAldS8ldS8ldVxuIiwKKwkJCWF2NzExMC0+dmlkZW9fc2l6ZS53LCBhdjcxMTAtPnZpZGVvX3NpemUuaCwKKwkJCWF2NzExMC0+dmlkZW9fc2l6ZS5hc3BlY3RfcmF0aW8pOworCiAJCWR2Yl92aWRlb19hZGRfZXZlbnQoYXY3MTEwLCAmZXZlbnQpOwogCQlicmVhazsKIAl9CkBAIC03MTQsNiArNzE1LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IFNldFBJRHMoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MTYgdnBpZCwgdTE2IGFwaWQsIHUxNiB0dHBpZCwKIAkJCSAgdTE2IHN1YnBpZCwgdTE2IHBjcnBpZCkKIHsKKwl1MTYgYWZsYWdzID0gMDsKKwogCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCiAJaWYgKHZwaWQgPT0gMHgxZmZmIHx8IGFwaWQgPT0gMHgxZmZmIHx8CkBAIC03MjUsOCArNzI4LDExIEBACiAJCWF2NzExMC0+cGlkc1tETVhfUEVTX1BDUl0gPSAwOwogCX0KIAotCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURGSUxURVIsIE11bHRpUElELCA1LAotCQkJICAgICBwY3JwaWQsIHZwaWQsIGFwaWQsIHR0cGlkLCBzdWJwaWQpOworCWlmIChhdjcxMTAtPmF1ZGlvc3RhdGUuYnlwYXNzX21vZGUpCisJCWFmbGFncyB8PSAweDgwMDA7CisKKwlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUElERklMVEVSLCBNdWx0aVBJRCwgNiwKKwkJCSAgICAgcGNycGlkLCB2cGlkLCBhcGlkLCB0dHBpZCwgc3VicGlkLCBhZmxhZ3MpOwogfQogCiBpbnQgQ2hhbmdlUElEcyhzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHUxNiB2cGlkLCB1MTYgYXBpZCwgdTE2IHR0cGlkLApAQCAtMTA0Myw3ICsxMDQ5LDcgQEAKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSAmYXY3MTEwLT5kZW11eDsKIAlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQ7CiAJaW50IG1vZGU7Ci0JaW50IGk7CisJaW50IGksIGo7CiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIApAQCAtMTA1MSwxMCArMTA1NywyMSBAQAogCWF2NzExMC0+cGxheWluZyA9IDA7CiAJYXY3MTEwLT5yZWNfbW9kZSA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZHZiZG14LT5maWx0ZXJudW07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkdmJkbXgtPmZlZWRudW07IGkrKykgewogCQlmZWVkID0gJmR2YmRteC0+ZmVlZFtpXTsKLQkJaWYgKGZlZWQtPnN0YXRlID09IERNWF9TVEFURV9HTykKKwkJaWYgKGZlZWQtPnN0YXRlID09IERNWF9TVEFURV9HTykgeworCQkJaWYgKGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfU0VDKSB7CisJCQkJZm9yIChqID0gMDsgaiA8IGR2YmRteC0+ZmlsdGVybnVtOyBqKyspIHsKKwkJCQkJaWYgKGR2YmRteC0+ZmlsdGVyW2pdLnR5cGUgIT0gRE1YX1RZUEVfU0VDKQorCQkJCQkJY29udGludWU7CisJCQkJCWlmIChkdmJkbXgtPmZpbHRlcltqXS5maWx0ZXIucGFyZW50ICE9ICZmZWVkLT5mZWVkLnNlYykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlpZiAoZHZiZG14LT5maWx0ZXJbal0uc3RhdGUgPT0gRE1YX1NUQVRFX0dPKQorCQkJCQkJZHZiZG14LT5maWx0ZXJbal0uc3RhdGUgPSBETVhfU1RBVEVfUkVBRFk7CisJCQkJfQorCQkJfQogCQkJYXY3MTEwX3N0YXJ0X2ZlZWQoZmVlZCk7CisJCX0KIAl9CiAKIAlpZiAobW9kZSkKQEAgLTE0ODMsOSArMTUwMCw5IEBACiAJCWlmIChyZXQgPT0gLUVOT0VOVCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IGNvdWxkIG5vdCBsb2FkIGZpcm13YXJlLCIKIAkJCSAgICAgICAiIGZpbGUgbm90IGZvdW5kOiBkdmItdHRwY2ktMDEuZndcbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IHVzdWFsbHkgdGhpcyBzaG91bGQgYmUgaW4iCi0JCQkgICAgICAgIiAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBhbmQgY2FuIGJlIGRvd25sb2FkZWQgaGVyZSIKKwkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiB1c3VhbGx5IHRoaXMgc2hvdWxkIGJlIGluICIKKwkJCSAgICAgICAiL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBvciAvbGliL2Zpcm13YXJlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBhbmQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSIKIAkJCSAgICAgICAiIGh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWQvZHZiL2Zpcm13YXJlL1xuIik7CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IGNhbm5vdCByZXF1ZXN0IGZpcm13YXJlIgpAQCAtMjExMCw4ICsyMTI3LDEwIEBACiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKIAogCWludCByZXQgPSBhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQlhdjcxMTAtPnNhdmVkX2ZlX3BhcmFtcyA9ICpwYXJhbXM7CiAJCXJldCA9IGF2NzExMC0+ZmVfc2V0X2Zyb250ZW5kKGZlLCBwYXJhbXMpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTUzLDggKzIxNzIsMTAgQEAKIAlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSBmZS0+ZHZiLT5wcml2OwogCiAJaW50IHJldCA9IGF2NzExMF9mZV9sb2NrX2ZpeChhdjcxMTAsIDApOwotCWlmICghcmV0KQorCWlmICghcmV0KSB7CisJCWF2NzExMC0+c2F2ZWRfbWFzdGVyX2NtZCA9ICpjbWQ7CiAJCXJldCA9IGF2NzExMC0+ZmVfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZChmZSwgY21kKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjE2Myw4ICsyMTg0LDEwIEBACiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKIAogCWludCByZXQgPSBhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQlhdjcxMTAtPnNhdmVkX21pbmljbWQgPSBtaW5pY21kOwogCQlyZXQgPSBhdjcxMTAtPmZlX2Rpc2VxY19zZW5kX2J1cnN0KGZlLCBtaW5pY21kKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjE3Myw4ICsyMTk2LDEwIEBACiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKIAogCWludCByZXQgPSBhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQlhdjcxMTAtPnNhdmVkX3RvbmUgPSB0b25lOwogCQlyZXQgPSBhdjcxMTAtPmZlX3NldF90b25lKGZlLCB0b25lKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjE4MywxMiArMjIwOCwxNCBAQAogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKIAlpbnQgcmV0ID0gYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgMCk7Ci0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKKwkJYXY3MTEwLT5zYXZlZF92b2x0YWdlID0gdm9sdGFnZTsKIAkJcmV0ID0gYXY3MTEwLT5mZV9zZXRfdm9sdGFnZShmZSwgdm9sdGFnZSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXY3MTEwX2ZlX2Rpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHVuc2lnbmVkIGludCBjbWQpCitzdGF0aWMgaW50IGF2NzExMF9mZV9kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1bnNpZ25lZCBsb25nIGNtZCkKIHsKIAlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSBmZS0+ZHZiLT5wcml2OwogCkBAIC0yMTk4LDYgKzIyMjUsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBkdmJfc19yZWNvdmVyKHN0cnVjdCBhdjcxMTAqIGF2NzExMCkKK3sKKwlhdjcxMTBfZmVfaW5pdChhdjcxMTAtPmZlKTsKKworCWF2NzExMF9mZV9zZXRfdm9sdGFnZShhdjcxMTAtPmZlLCBhdjcxMTAtPnNhdmVkX3ZvbHRhZ2UpOworCWlmIChhdjcxMTAtPnNhdmVkX21hc3Rlcl9jbWQubXNnX2xlbikgeworCQltc2xlZXAoMjApOworCQlhdjcxMTBfZmVfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZChhdjcxMTAtPmZlLCAmYXY3MTEwLT5zYXZlZF9tYXN0ZXJfY21kKTsKKwl9CisJbXNsZWVwKDIwKTsKKwlhdjcxMTBfZmVfZGlzZXFjX3NlbmRfYnVyc3QoYXY3MTEwLT5mZSwgYXY3MTEwLT5zYXZlZF9taW5pY21kKTsKKwltc2xlZXAoMjApOworCWF2NzExMF9mZV9zZXRfdG9uZShhdjcxMTAtPmZlLCBhdjcxMTAtPnNhdmVkX3RvbmUpOworCisJYXY3MTEwX2ZlX3NldF9mcm9udGVuZChhdjcxMTAtPmZlLCAmYXY3MTEwLT5zYXZlZF9mZV9wYXJhbXMpOworfQorCiBzdGF0aWMgdTggcmVhZF9wd20oc3RydWN0IGF2NzExMCogYXY3MTEwKQogewogCXU4IGIgPSAweGZmOwpAQCAtMjIzNSw2ICsyMjc5LDcgQEAKIAkJCQlhdjcxMTAtPmZlLT5vcHMtPmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBhdjcxMTBfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKIAkJCQlhdjcxMTAtPmZlLT5vcHMtPmRpc2VxY19zZW5kX2J1cnN0ID0gYXY3MTEwX2Rpc2VxY19zZW5kX2J1cnN0OwogCQkJCWF2NzExMC0+ZmUtPm9wcy0+c2V0X3RvbmUgPSBhdjcxMTBfc2V0X3RvbmU7CisJCQkJYXY3MTEwLT5yZWNvdmVyID0gZHZiX3NfcmVjb3ZlcjsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMjI0NCwxNSArMjI4OSwxNyBAQAogCQkJCWF2NzExMC0+ZmUtPm9wcy0+ZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGF2NzExMF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwogCQkJCWF2NzExMC0+ZmUtPm9wcy0+ZGlzZXFjX3NlbmRfYnVyc3QgPSBhdjcxMTBfZGlzZXFjX3NlbmRfYnVyc3Q7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLT5zZXRfdG9uZSA9IGF2NzExMF9zZXRfdG9uZTsKKwkJCQlhdjcxMTAtPnJlY292ZXIgPSBkdmJfc19yZWNvdmVyOwogCQkJCWJyZWFrOwogCQkJfQogCiAJCQkvLyBUcnkgdGhlIGdydW5kaWcgMjk1MDQtNDUxCi0JCSAgICAgICAgYXY3MTEwLT5mZSA9IHRkYTgwODNfYXR0YWNoKCZncnVuZGlnXzI5NTA0XzQ1MV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKKwkJCWF2NzExMC0+ZmUgPSB0ZGE4MDgzX2F0dGFjaCgmZ3J1bmRpZ18yOTUwNF80NTFfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CiAJCQlpZiAoYXY3MTEwLT5mZSkgewogCQkJCWF2NzExMC0+ZmUtPm9wcy0+ZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGF2NzExMF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwogCQkJCWF2NzExMC0+ZmUtPm9wcy0+ZGlzZXFjX3NlbmRfYnVyc3QgPSBhdjcxMTBfZGlzZXFjX3NlbmRfYnVyc3Q7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLT5zZXRfdG9uZSA9IGF2NzExMF9zZXRfdG9uZTsKKwkJCQlhdjcxMTAtPnJlY292ZXIgPSBkdmJfc19yZWNvdmVyOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0yMjc0LDEyICsyMzIxLDEyIEBACiAJCWNhc2UgMHgwMDAxOiAvLyBIYXVwcGF1Z2UvVFQgTmV4dXMtVCBwcmVtaXVtIHJldjEuWAogCiAJCQkvLyBBTFBTIFRETEI3Ci0JCSAgICAgICAgYXY3MTEwLT5mZSA9IHNwODg3MF9hdHRhY2goJmFscHNfdGRsYjdfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CisJCQlhdjcxMTAtPmZlID0gc3A4ODcwX2F0dGFjaCgmYWxwc190ZGxiN19jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwMDAyOiAvLyBIYXVwcGF1Z2UvVFQgRFZCLUMgcHJlbWl1bSByZXYyLlgKIAotCQkgICAgICAgIGF2NzExMC0+ZmUgPSB2ZXMxODIwX2F0dGFjaCgmYWxwc190ZGJlMl9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwLCByZWFkX3B3bShhdjcxMTApKTsKKwkJCWF2NzExMC0+ZmUgPSB2ZXMxODIwX2F0dGFjaCgmYWxwc190ZGJlMl9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwLCByZWFkX3B3bShhdjcxMTApKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwMDA2OiAvKiBGdWppdHN1LVNpZW1lbnMgRFZCLVMgcmV2IDEuNiAqLwpAQCAtMjI4OSw2ICsyMzM2LDcgQEAKIAkJCQlhdjcxMTAtPmZlLT5vcHMtPmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBhdjcxMTBfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKIAkJCQlhdjcxMTAtPmZlLT5vcHMtPmRpc2VxY19zZW5kX2J1cnN0ID0gYXY3MTEwX2Rpc2VxY19zZW5kX2J1cnN0OwogCQkJCWF2NzExMC0+ZmUtPm9wcy0+c2V0X3RvbmUgPSBhdjcxMTBfc2V0X3RvbmU7CisJCQkJYXY3MTEwLT5yZWNvdmVyID0gZHZiX3NfcmVjb3ZlcjsKIAkJCX0KIAkJCWJyZWFrOwogCkBAIC0yMzE0LDggKzIzNjIsMTEgQEAKIAkJY2FzZSAweDAwMEU6IC8qIEhhdXBwYXVnZS9UVCBOZXh1cy1TIHJldiAyLjMgKi8KIAkJCS8qIEFMUFMgQlNCRTEgKi8KIAkJCWF2NzExMC0+ZmUgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic2JlMV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKLQkJCWlmIChhdjcxMTAtPmZlKQorCQkJaWYgKGF2NzExMC0+ZmUpIHsKIAkJCQlhdjcxMTAtPmZlLT5vcHMtPnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOworCQkJCWF2NzExMC0+ZmUtPm9wcy0+ZGlzaG5ldHdvcmtfc2VuZF9sZWdhY3lfY29tbWFuZCA9IE5VTEw7CisJCQkJYXY3MTEwLT5yZWNvdmVyID0gZHZiX3NfcmVjb3ZlcjsKKwkJCX0KIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaAppbmRleCBjY2UwMGVmLi42ZWEzMGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaApAQCAtOTgsNyArOTgsOCBAQAogCWludCBhZGFjX3R5cGU7CSAgICAgICAvKiBhdWRpbyBEQUMgdHlwZSAqLwogI2RlZmluZSBEVkJfQURBQ19USQkgIDAKICNkZWZpbmUgRFZCX0FEQUNfQ1JZU1RBTCAgMQotI2RlZmluZSBEVkJfQURBQ19NU1AJICAyCisjZGVmaW5lIERWQl9BREFDX01TUDM0eDAgIDIKKyNkZWZpbmUgRFZCX0FEQUNfTVNQMzR4NSAgMwogI2RlZmluZSBEVkJfQURBQ19OT05FCSAtMQogCiAKQEAgLTIyOCw2ICsyMjksOSBAQAogCXN0cnVjdCBkdmJfdmlkZW9fZXZlbnRzICB2aWRlb19ldmVudHM7CiAJdmlkZW9fc2l6ZV90CQkgdmlkZW9fc2l6ZTsKIAorCXUxNgkJCXdzc01vZGU7CisJdTE2CQkJd3NzRGF0YTsKKwogCXUzMgkJCWlyX2NvbmZpZzsKIAl1MzIJCQlpcl9jb21tYW5kOwogCXZvaWQJCQkoKmlyX2hhbmRsZXIpKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTMyIGlyY29tKTsKQEAgLTI0NSw2ICsyNDksMTUgQEAKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlOwogCWZlX3N0YXR1c190IGZlX3N0YXR1czsKKworCS8qIGNyYXNoIHJlY292ZXJ5ICovCisJdm9pZAkJCQkoKnJlY292ZXIpKHN0cnVjdCBhdjcxMTAqIGF2NzExMCk7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzCXNhdmVkX2ZlX3BhcmFtczsKKwlmZV9zZWNfdm9sdGFnZV90CQlzYXZlZF92b2x0YWdlOworCWZlX3NlY190b25lX21vZGVfdAkJc2F2ZWRfdG9uZTsKKwlzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kCXNhdmVkX21hc3Rlcl9jbWQ7CisJZmVfc2VjX21pbmlfY21kX3QJCXNhdmVkX21pbmljbWQ7CisKIAlpbnQgKCpmZV9pbml0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiAJaW50ICgqZmVfcmVhZF9zdGF0dXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKTsKIAlpbnQgKCpmZV9kaXNlcWNfcmVzZXRfb3ZlcmxvYWQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKQEAgLTI1Miw3ICsyNjUsNyBAQAogCWludCAoKmZlX2Rpc2VxY19zZW5kX2J1cnN0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX21pbmlfY21kX3QgbWluaWNtZCk7CiAJaW50ICgqZmVfc2V0X3RvbmUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSk7CiAJaW50ICgqZmVfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwotCWludCAoKmZlX2Rpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1bnNpZ25lZCBpbnQgY21kKTsKKwlpbnQgKCpmZV9kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdW5zaWduZWQgbG9uZyBjbWQpOwogCWludCAoKmZlX3NldF9mcm9udGVuZCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKaW5kZXggMDY5NmE1YS4uNDAwZmFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKQEAgLTMwOSw3ICszMDksNyBAQAogCQlpMmNfd3JpdGVyZWcoYXY3MTEwLCAweDIwLCAweDA0LCB2b2xyaWdodCk7CiAJCXJldHVybiAwOwogCi0JY2FzZSBEVkJfQURBQ19NU1A6CisJY2FzZSBEVkJfQURBQ19NU1AzNHgwOgogCQl2b2wgID0gKHZvbGxlZnQgPiB2b2xyaWdodCkgPyB2b2xsZWZ0IDogdm9scmlnaHQ7CiAJCXZhbAk9ICh2b2wgKiAweDczIC8gMjU1KSA8PCA4OwogCQlpZiAodm9sID4gMCkKQEAgLTEyNTYsNyArMTI1Niw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBVURJT19TRVRfQllQQVNTX01PREU6Ci0JCXJldCA9IC1FSU5WQUw7CisJCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjEpCisJCQlyZXQgPSAtRUlOVkFMOworCQlhdjcxMTAtPmF1ZGlvc3RhdGUuYnlwYXNzX21vZGUgPSAoaW50KWFyZzsKIAkJYnJlYWs7CiAKIAljYXNlIEFVRElPX0NIQU5ORUxfU0VMRUNUOgpAQCAtMTI5NSw3ICsxMjk3LDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBBVURJT19HRVRfQ0FQQUJJTElUSUVTOgotCQkqKGludCAqKXBhcmcgPSBBVURJT19DQVBfTFBDTSB8IEFVRElPX0NBUF9NUDEgfCBBVURJT19DQVBfTVAyOworCQlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIxKQorCQkJKih1bnNpZ25lZCBpbnQgKilwYXJnID0gQVVESU9fQ0FQX0xQQ00gfCBBVURJT19DQVBfTVAxIHwgQVVESU9fQ0FQX01QMjsKKwkJZWxzZQorCQkJKih1bnNpZ25lZCBpbnQgKilwYXJnID0gQVVESU9fQ0FQX0xQQ00gfCBBVURJT19DQVBfRFRTIHwgQVVESU9fQ0FQX0FDMyB8CisJCQkJCQlBVURJT19DQVBfTVAxIHwgQVVESU9fQ0FQX01QMjsKIAkJYnJlYWs7CiAKIAljYXNlIEFVRElPX0NMRUFSX0JVRkZFUjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKaW5kZXggODcxMDZlOC4uY2IzNzc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKQEAgLTIzMCw2ICsyMzAsOCBAQAogCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CiAKKwlhdjcxMTAtPmFybV9yZWFkeSA9IDA7CisKIAlzYWE3MTQ2X3NldGdwaW8oZGV2LCBSRVNFVF9MSU5FLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOwogCiAJLyogRGlzYWJsZSBERUJJIGFuZCBHUElPIGlycSAqLwpAQCAtMzYxLDYgKzM2Myw3IEBACiAJCQlicmVhazsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6ICVzKCk6IHRpbWVvdXQgd2FpdGluZyBmb3IgQ09NTUFORCBpZGxlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJYXY3MTEwLT5hcm1fZXJyb3JzKys7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQltc2xlZXAoMSk7CkBAIC0xMjA2LDkgKzEyMDksOSBAQAogCXN3aXRjaCAoY2FwLT5jbWQpIHsKIAljYXNlIE9TRF9DQVBfTUVNU0laRToKIAkJaWYgKEZXXzRNX1NEUkFNKGF2NzExMC0+YXJtX2FwcCkpCi0JCSAgICAgICAgY2FwLT52YWwgPSAxMDAwMDAwOworCQkJY2FwLT52YWwgPSAxMDAwMDAwOwogCQllbHNlCi0JCSAgICAgICAgY2FwLT52YWwgPSA5MjAwMDsKKwkJCWNhcC0+dmFsID0gOTIwMDA7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaAppbmRleCAyYTVlODdiLi44NGI4MzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaApAQCAtMTY3LDcgKzE2Nyw4IEBACiAJTG9hZFZpZENvZGUsCiAJU2V0TW9uaXRvclR5cGUsCiAJU2V0UGFuU2NhblR5cGUsCi0JU2V0RnJlZXplTW9kZQorCVNldEZyZWV6ZU1vZGUsCisJU2V0V1NTQ29uZmlnCiB9OwogCiBlbnVtIGF2NzExMF9yZWNfcGxheV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pci5jCmluZGV4IGY1ZTU5ZmMuLjkxMzgxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pci5jCkBAIC0xNyw2ICsxNyw4IEBACiBzdGF0aWMgc3RydWN0IGF2NzExMCAqYXZfbGlzdFs0XTsKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAKK3N0YXRpYyB1OCBkZWxheV90aW1lcl9maW5pc2hlZDsKKwogc3RhdGljIHUxNiBrZXlfbWFwIFsyNTZdID0gewogCUtFWV8wLCBLRVlfMSwgS0VZXzIsIEtFWV8zLCBLRVlfNCwgS0VZXzUsIEtFWV82LCBLRVlfNywKIAlLRVlfOCwgS0VZXzksIEtFWV9CQUNLLCAwLCBLRVlfUE9XRVIsIEtFWV9NVVRFLCAwLCBLRVlfSU5GTywKQEAgLTExMiwxMyArMTE0LDE2IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcoJmtleXVwX3RpbWVyKSkgewogCQlkZWxfdGltZXIoJmtleXVwX3RpbWVyKTsKIAkJaWYgKGtleXVwX3RpbWVyLmRhdGEgIT0ga2V5Y29kZSB8fCBuZXdfdG9nZ2xlICE9IG9sZF90b2dnbGUpIHsKKwkJCWRlbGF5X3RpbWVyX2ZpbmlzaGVkID0gMDsKIAkJCWlucHV0X2V2ZW50KGlucHV0X2RldiwgRVZfS0VZLCBrZXl1cF90aW1lci5kYXRhLCAhITApOwogCQkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsICEwKTsKIAkJfSBlbHNlCi0JCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMik7Ci0KLQl9IGVsc2UKKwkJCWlmIChkZWxheV90aW1lcl9maW5pc2hlZCkKKwkJCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMik7CisJfSBlbHNlIHsKKwkJZGVsYXlfdGltZXJfZmluaXNoZWQgPSAwOwogCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgITApOworCX0KIAogCWtleXVwX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgVVBfVElNRU9VVDsKIAlrZXl1cF90aW1lci5kYXRhID0ga2V5Y29kZTsKQEAgLTE0NSw3ICsxNTAsOCBAQAogCiBzdGF0aWMgdm9pZCBpbnB1dF9yZXBlYXRfa2V5KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSAgICAgICAvKiBkdW1teSByb3V0aW5lIHRvIGRpc2FibGUgYXV0b3JlcGVhdCBpbiB0aGUgaW5wdXQgZHJpdmVyICovCisJLyogY2FsbGVkIGJ5IHRoZSBpbnB1dCBkcml2ZXIgYWZ0ZXIgcmVwW1JFUF9ERUxBWV0gbXMgKi8KKwlkZWxheV90aW1lcl9maW5pc2hlZCA9IDE7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCmluZGV4IGI1YWVhNDEuLjk0Y2YzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKQEAgLTQ5MCw2ICs0OTAsNTggQEAKIAkJZHByaW50aygyLCAiVklESU9DX1NfQVVESU86ICVkXG4iLCBhLT5pbmRleCk7CiAJCWJyZWFrOwogCX0KKwljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCA9IGFyZzsKKwkJZHByaW50aygyLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOworCQltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7CisJCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPj0gMHgyNjIzKSB7CisJCQljYXAtPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJCWNhcC0+c2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKKwkJZHByaW50aygyLCAiVklESU9DX0dfRk1UOlxuIik7CisJCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgfHwKKwkJICAgIEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKKwkJCXJldHVybiAtRUFHQUlOOyAvKiBoYW5kbGVkIGJ5IGNvcmUgZHJpdmVyICovCisJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOworCQlpZiAoYXY3MTEwLT53c3NNb2RlKSB7CisJCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKKwkJZHByaW50aygyLCAiVklESU9DX1NfRk1UXG4iKTsKKwkJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCB8fAorCQkgICAgRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIzKQorCQkJcmV0dXJuIC1FQUdBSU47IC8qIGhhbmRsZWQgYnkgY29yZSBkcml2ZXIgKi8KKwkJaWYgKGYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgIT0gVjRMMl9TTElDRURfV1NTXzYyNSAmJgorCQkgICAgZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSAhPSBWNEwyX1NMSUNFRF9XU1NfNjI1KSB7CisJCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKKwkJCS8qIFdTUyBjb250cm9sbGVkIGJ5IGZpcm13YXJlICovCisJCQlhdjcxMTAtPndzc01vZGUgPSAwOworCQkJYXY3MTEwLT53c3NEYXRhID0gMDsKKwkJCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9FTkNPREVSLAorCQkJCQkgICAgIFNldFdTU0NvbmZpZywgMSwgMCk7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKKwkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCQlmLT5mbXQuc2xpY2VkLmlvX3NpemUgPSBzaXplb2YgKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7CisJCQkvKiBXU1MgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UgKi8KKwkJCWF2NzExMC0+d3NzTW9kZSA9IDE7CisJCQlhdjcxMTAtPndzc0RhdGEgPSAwOworCQl9CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlwcmludGsoIm5vIHN1Y2ggaW9jdGxcbiIpOwogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpAQCAtNDk3LDYgKzU0OSw0NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF2NzExMF92YmlfcmVzZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCopIGRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlhdjcxMTAtPndzc01vZGUgPSAwOworCWF2NzExMC0+d3NzRGF0YSA9IDA7CisJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwgU2V0V1NTQ29uZmlnLCAxLCAwKTsKK30KKworc3RhdGljIHNzaXplX3QgYXY3MTEwX3ZiaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAqKSBkZXYtPmV4dF9wcml2OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSBkOworCWludCByYzsKKworCWRwcmludGsoMiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjMgfHwgIWF2NzExMC0+d3NzTW9kZSB8fCBjb3VudCAhPSBzaXplb2YgZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZkLCBkYXRhLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgoZC5pZCAhPSAwICYmIGQuaWQgIT0gVjRMMl9TTElDRURfV1NTXzYyNSkgfHwgZC5maWVsZCAhPSAwIHx8IGQubGluZSAhPSAyMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGQuaWQpIHsKKwkJYXY3MTEwLT53c3NEYXRhID0gKChkLmRhdGFbMV0gPDwgOCkgJiAweDNmMDApIHwgZC5kYXRhWzBdOworCQlyYyA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0VOQ09ERVIsIFNldFdTU0NvbmZpZywKKwkJCQkgICAyLCAxLCBhdjcxMTAtPndzc0RhdGEpOworCX0gZWxzZSB7CisJCWF2NzExMC0+d3NzRGF0YSA9IDA7CisJCXJjID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwgU2V0V1NTQ29uZmlnLCAxLCAwKTsKKwl9CisJcmV0dXJuIChyYyA8IDApID8gcmMgOiBjb3VudDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElOSVRJQUxJWkFUSU9OCkBAIC01MTIsNiArNjA0LDkgQEAKIAl7IFZJRElPQ19TX1RVTkVSLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAogCXsgVklESU9DX0dfQVVESU8sCVNBQTcxNDZfRVhDTFVTSVZFIH0sCiAJeyBWSURJT0NfU19BVURJTywJU0FBNzE0Nl9FWENMVVNJVkUgfSwKKwl7IFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQLCBTQUE3MTQ2X0VYQ0xVU0lWRSB9LAorCXsgVklESU9DX0dfRk1ULAkJU0FBNzE0Nl9CRUZPUkUgfSwKKwl7IFZJRElPQ19TX0ZNVCwJCVNBQTcxNDZfQkVGT1JFIH0sCiAJeyAwLCAwIH0KIH07CiAKQEAgLTU4Nyw3ICs2ODIsNyBAQAogCiAJcHJpbnRrKCJkdmItdHRwY2k6IERWQi1DIGFuYWxvZyBtb2R1bGUgQCBjYXJkICVkIGRldGVjdGVkLCBpbml0aWFsaXppbmcgTVNQMzQwMFxuIiwKIAkJYXY3MTEwLT5kdmJfYWRhcHRlci5udW0pOwotCWF2NzExMC0+YWRhY190eXBlID0gRFZCX0FEQUNfTVNQOworCWF2NzExMC0+YWRhY190eXBlID0gRFZCX0FEQUNfTVNQMzR4MDsKIAltc2xlZXAoMTAwKTsgLy8gdGhlIHByb2JpbmcgYWJvdmUgcmVzZXRzIHRoZSBtc3AuLi4KIAltc3BfcmVhZHJlZyhhdjcxMTAsIE1TUF9SRF9EU1AsIDB4MDAxZSwgJnZlcnNpb24xKTsKIAltc3BfcmVhZHJlZyhhdjcxMTAsIE1TUF9SRF9EU1AsIDB4MDAxZiwgJnZlcnNpb24yKTsKQEAgLTY5MiwxMiArNzg3LDExIEBACiAJCXNhYTcxNDZfdnZfcmVsZWFzZShkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKSB7Ci0JCWlmIChzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmYXY3MTEwLT52YmlfZGV2LCBkZXYsICJhdjcxMTAiLCBWRkxfVFlQRV9WQkkpKSB7Ci0JCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgdmJpIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKLQkJfSBlbHNlIHsKKwlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmF2NzExMC0+dmJpX2RldiwgZGV2LCAiYXY3MTEwIiwgVkZMX1RZUEVfVkJJKSkgeworCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgdmJpIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKKwl9IGVsc2UgeworCQlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpCiAJCQlhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8PSBBTkFMT0dfVFVORVJfVkJJOwotCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzc4LDcgKzg3Miw3IEBACiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IGF2NzExMF92dl9kYXRhX3N0ID0gewogCS5pbnB1dHMJCT0gMSwKIAkuYXVkaW9zCQk9IDEsCi0JLmNhcGFiaWxpdGllcwk9IDAsCisJLmNhcGFiaWxpdGllcwk9IFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVULAogCS5mbGFncwkJPSAwLAogCiAJLnN0ZHMJCT0gJnN0YW5kYXJkWzBdLApAQCAtNzg3LDEyICs4ODEsMTYgQEAKIAogCS5pb2N0bHMJCT0gJmlvY3Rsc1swXSwKIAkuaW9jdGwJCT0gYXY3MTEwX2lvY3RsLAorCisJLnZiaV9mb3BzLm9wZW4JPSBhdjcxMTBfdmJpX3Jlc2V0LAorCS52YmlfZm9wcy5yZWxlYXNlID0gYXY3MTEwX3ZiaV9yZXNldCwKKwkudmJpX2ZvcHMud3JpdGUJPSBhdjcxMTBfdmJpX3dyaXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diBhdjcxMTBfdnZfZGF0YV9jID0gewogCS5pbnB1dHMJCT0gMSwKIAkuYXVkaW9zCQk9IDEsCi0JLmNhcGFiaWxpdGllcwk9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUsCisJLmNhcGFiaWxpdGllcwk9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfCBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVCwKIAkuZmxhZ3MJCT0gU0FBNzE0Nl9VU0VfUE9SVF9CX0ZPUl9WQkksCiAKIAkuc3RkcwkJPSAmc3RhbmRhcmRbMF0sCkBAIC04MDEsNSArODk5LDkgQEAKIAogCS5pb2N0bHMJCT0gJmlvY3Rsc1swXSwKIAkuaW9jdGwJCT0gYXY3MTEwX2lvY3RsLAorCisJLnZiaV9mb3BzLm9wZW4JPSBhdjcxMTBfdmJpX3Jlc2V0LAorCS52YmlfZm9wcy5yZWxlYXNlID0gYXY3MTEwX3ZiaV9yZXNldCwKKwkudmJpX2ZvcHMud3JpdGUJPSBhdjcxMTBfdmJpX3dyaXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwppbmRleCA5ZjUxYmFlLi5mOWQwMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJc2FhNzE0Nl9zZXRncGlvKGJ1ZGdldF9hdi0+YnVkZ2V0LmRldiwgMSwgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAl1ZGVsYXkoMSk7CiAKLQlyZXN1bHQgPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9hdi0+YnVkZ2V0LCBERUJJQ0lDQU0sIGFkZHJlc3MgJiAweGZmZiwgMSwgMCwgMCk7CisJcmVzdWx0ID0gdHRwY2lfYnVkZ2V0X2RlYmlyZWFkKCZidWRnZXRfYXYtPmJ1ZGdldCwgREVCSUNJQ0FNLCBhZGRyZXNzICYgMHhmZmYsIDEsIDAsIDEpOwogCiAJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKQogCQlidWRnZXRfYXYtPnNsb3Rfc3RhdHVzID0gMDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXNhYTcxNDZfc2V0Z3BpbyhidWRnZXRfYXYtPmJ1ZGdldC5kZXYsIDEsIFNBQTcxNDZfR1BJT19PVVRISSk7CiAJdWRlbGF5KDEpOwogCi0JcmVzdWx0ID0gdHRwY2lfYnVkZ2V0X2RlYml3cml0ZSgmYnVkZ2V0X2F2LT5idWRnZXQsIERFQklDSUNBTSwgYWRkcmVzcyAmIDB4ZmZmLCAxLCB2YWx1ZSwgMCwgMCk7CisJcmVzdWx0ID0gdHRwY2lfYnVkZ2V0X2RlYml3cml0ZSgmYnVkZ2V0X2F2LT5idWRnZXQsIERFQklDSUNBTSwgYWRkcmVzcyAmIDB4ZmZmLCAxLCB2YWx1ZSwgMCwgMSk7CiAKIAlpZiAocmVzdWx0ID09IC1FVElNRURPVVQpCiAJCWJ1ZGdldF9hdi0+c2xvdF9zdGF0dXMgPSAwOwpAQCAtMTkyLDcgKzE5Miw3IEBACiB7CiAJc3RydWN0IGJ1ZGdldF9hdiAqYnVkZ2V0X2F2ID0gKHN0cnVjdCBidWRnZXRfYXYgKikgY2EtPmRhdGE7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXRfYXYtPmJ1ZGdldC5kZXY7Ci0JaW50IHRpbWVvdXQgPSA1MDA7IC8vIDUgc2Vjb25kcyAoNC40LjYgUmVhZHkpCisJaW50IHRpbWVvdXQgPSA1MDsgLy8gNSBzZWNvbmRzICg0LjQuNiBSZWFkeSkKIAogCWlmIChzbG90ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjU2LDE5ICsyNTYsMzcgQEAKIHsKIAlzdHJ1Y3QgYnVkZ2V0X2F2ICpidWRnZXRfYXYgPSAoc3RydWN0IGJ1ZGdldF9hdiAqKSBjYS0+ZGF0YTsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSA9IGJ1ZGdldF9hdi0+YnVkZ2V0LmRldjsKKwlpbnQgY2FtX3ByZXNlbnQgPSAwOwogCiAJaWYgKHNsb3QgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWJ1ZGdldF9hdi0+c2xvdF9zdGF0dXMpIHsKKwlpZiAoIWJ1ZGdldF9hdi0+c2xvdF9zdGF0dXMpCisJeworCQkvLyBmaXJzdCBvZiBhbGwgdGVzdCB0aGUgY2FyZCBkZXRlY3QgbGluZQogCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAzLCBTQUE3MTQ2X0dQSU9fSU5QVVQpOwogCQl1ZGVsYXkoMSk7CiAJCWlmIChzYWE3MTQ2X3JlYWQoc2FhLCBQU1IpICYgTUFTS18wNikKIAkJeworCQkJY2FtX3ByZXNlbnQgPSAxOworCQl9CisJCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDMsIFNBQTcxNDZfR1BJT19PVVRMTyk7CisKKwkJLy8gdGhhdCBpcyB1bnJlbGlhYmxlIGhvd2V2ZXIsIHNvIHRyeSBhbmQgcmVhZCBmcm9tIElPIG1lbW9yeQorCQlpZiAoIWNhbV9wcmVzZW50KQorCQl7CisJCQlzYWE3MTQ2X3NldGdwaW8oYnVkZ2V0X2F2LT5idWRnZXQuZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOworCQkJaWYgKHR0cGNpX2J1ZGdldF9kZWJpcmVhZCgmYnVkZ2V0X2F2LT5idWRnZXQsIERFQklDSUNBTSwgMCwgMSwgMCwgMSkgIT0gLUVUSU1FRE9VVCkKKwkJCXsKKwkJCQljYW1fcHJlc2VudCA9IDE7CisJCQl9CisJCX0KKworCQkvLyBkaWQgd2UgZmluZCBzb21ldGhpbmc/CisJCWlmIChjYW1fcHJlc2VudCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnVkZ2V0LWF2OiBjYW0gaW5zZXJ0ZWRcbiIpOwogCQkJYnVkZ2V0X2F2LT5zbG90X3N0YXR1cyA9IDE7CiAJCX0KLQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMywgU0FBNzE0Nl9HUElPX09VVExPKTsKIAl9IGVsc2UgaWYgKCFvcGVuKSB7CiAJCXNhYTcxNDZfc2V0Z3BpbyhidWRnZXRfYXYtPmJ1ZGdldC5kZXYsIDEsIFNBQTcxNDZfR1BJT19PVVRMTyk7CiAJCWlmICh0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9hdi0+YnVkZ2V0LCBERUJJQ0lDQU0sIDAsIDEsIDAsIDEpID09IC1FVElNRURPVVQpCkBAIC00ODQsNiArNTAyLDE0MCBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIE1JTjIoYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2RlZmluZSBNSU4zKGEsYixjKSBNSU4yKE1JTjIoYSxiKSxjKQorCitzdGF0aWMgaW50IHBoaWxpcHNfc3UxMjc4c2gyX3R1YTYxMDBfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXU4IHJlZzAgWzJdID0geyAweDAwLCAweDAwIH07CisJdTggcmVnMSBbNF0gPSB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwl1OCByZWcyIFszXSA9IHsgMHgwMiwgMHgwMCwgMHgwMCB9OworCWludCBfZmJhbmQ7CisJaW50IGZpcnN0X1pGOworCWludCBSLCBBLCBOLCBQLCBNOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IDB4NjAsLmZsYWdzID0gMCwuYnVmID0gTlVMTCwubGVuID0gMCB9OworCWludCBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3k7CisKKwlmaXJzdF9aRiA9IChmcmVxKSAvIDEwMDA7CisKKwlpZiAoYWJzKE1JTjIoYWJzKGZpcnN0X1pGLTExOTApLGFicyhmaXJzdF9aRi0xNzkwKSkpIDwKKwkJICAgYWJzKE1JTjMoYWJzKGZpcnN0X1pGLTEyMDIpLGFicyhmaXJzdF9aRi0xNTQyKSxhYnMoZmlyc3RfWkYtMTg5MCkpKSkKKwkJX2ZiYW5kID0gMjsKKwllbHNlCisJCV9mYmFuZCA9IDM7CisKKwlpZiAoX2ZiYW5kID09IDIpIHsKKwkJaWYgKCgoZmlyc3RfWkYgPj0gOTUwKSAmJiAoZmlyc3RfWkYgPCAxMzUwKSkgfHwKKwkJCQkgICAgKChmaXJzdF9aRiA+PSAxNDMwKSAmJiAoZmlyc3RfWkYgPCAxOTUwKSkpCisJCQlyZWcwWzFdID0gMHgwNzsKKwkJZWxzZSBpZiAoKChmaXJzdF9aRiA+PSAxMzUwKSAmJiAoZmlyc3RfWkYgPCAxNDMwKSkgfHwKKwkJCQkJICgoZmlyc3RfWkYgPj0gMTk1MCkgJiYgKGZpcnN0X1pGIDwgMjE1MCkpKQorCQkJcmVnMFsxXSA9IDB4MEI7CisJfQorCisJaWYoX2ZiYW5kID09IDMpIHsKKwkJaWYgKCgoZmlyc3RfWkYgPj0gOTUwKSAmJiAoZmlyc3RfWkYgPCAxMzUwKSkgfHwKKwkJCQkgICAgKChmaXJzdF9aRiA+PSAxNDU1KSAmJiAoZmlyc3RfWkYgPCAxOTUwKSkpCisJCQlyZWcwWzFdID0gMHgwNzsKKwkJZWxzZSBpZiAoKChmaXJzdF9aRiA+PSAxMzUwKSAmJiAoZmlyc3RfWkYgPCAxNDIwKSkgfHwKKwkJCQkJICgoZmlyc3RfWkYgPj0gMTk1MCkgJiYgKGZpcnN0X1pGIDwgMjE1MCkpKQorCQkJcmVnMFsxXSA9IDB4MEI7CisJCWVsc2UgaWYgKChmaXJzdF9aRiA+PSAxNDIwKSAmJiAoZmlyc3RfWkYgPCAxNDU1KSkKKwkJCXJlZzBbMV0gPSAweDBGOworCX0KKworCWlmIChmaXJzdF9aRiA+IDE1MjUpCisJCXJlZzFbMV0gfD0gMHg4MDsKKwllbHNlCisJCXJlZzFbMV0gJj0gMHg3RjsKKworCWlmIChfZmJhbmQgPT0gMikgeworCQlpZiAoZmlyc3RfWkYgPiAxNDMwKSB7IC8qIDE0MzBNSFogKi8KKwkJCXJlZzFbMV0gJj0gMHhDRjsgLyogTjIgKi8KKwkJCXJlZzJbMV0gJj0gMHhDRjsgLyogUjIgKi8KKwkJCXJlZzJbMV0gfD0gMHgxMDsKKwkJfSBlbHNlIHsKKwkJCXJlZzFbMV0gJj0gMHhDRjsgLyogTjIgKi8KKwkJCXJlZzFbMV0gfD0gMHgyMDsKKwkJCXJlZzJbMV0gJj0gMHhDRjsgLyogUjIgKi8KKwkJCXJlZzJbMV0gfD0gMHgxMDsKKwkJfQorCX0KKworCWlmIChfZmJhbmQgPT0gMykgeworCQlpZiAoKGZpcnN0X1pGID49IDE0NTUpICYmCisJCQkJICAgKGZpcnN0X1pGIDwgMTYzMCkpIHsKKwkJCXJlZzFbMV0gJj0gMHhDRjsgLyogTjIgKi8KKwkJCXJlZzFbMV0gfD0gMHgyMDsKKwkJCXJlZzJbMV0gJj0gMHhDRjsgLyogUjIgKi8KKwkJCQkgICB9IGVsc2UgeworCQkJCQkgICBpZiAoZmlyc3RfWkYgPCAxNDU1KSB7CisJCQkJCQkgICByZWcxWzFdICY9IDB4Q0Y7IC8qIE4yICovCisJCQkJCQkgICByZWcxWzFdIHw9IDB4MjA7CisJCQkJCQkgICByZWcyWzFdICY9IDB4Q0Y7IC8qIFIyICovCisJCQkJCQkgICByZWcyWzFdIHw9IDB4MTA7CisJCQkJCSAgIH0gZWxzZSB7CisJCQkJCQkgICBpZiAoZmlyc3RfWkYgPj0gMTYzMCkgeworCQkJCQkJCSAgIHJlZzFbMV0gJj0gMHhDRjsgLyogTjIgKi8KKwkJCQkJCQkgICByZWcyWzFdICY9IDB4Q0Y7IC8qIFIyICovCisJCQkJCQkJICAgcmVnMlsxXSB8PSAweDEwOworCQkJCQkJICAgfQorCQkJCQkgICB9CisJCQkJICAgfQorCX0KKworCS8qIHNldCBwb3J0cywgZW5hYmxlIFAwIGZvciBzeW1ib2wgcmF0ZXMgPiA0TXMvcyAqLworCWlmIChwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSA+PSA0MDAwMDAwKQorCQlyZWcxWzFdIHw9IDB4MGM7CisJZWxzZQorCQlyZWcxWzFdIHw9IDB4MDQ7CisKKwlyZWcyWzFdIHw9IDB4MGM7CisKKwlSID0gNjQ7CisJQSA9IDY0OworCVAgPSA2NDsJIC8vMzIKKworCU0gPSAoZnJlcSAqIFIpIC8gNDsJCS8qIGluIE1oeiAqLworCU4gPSAoTSAtIEEgKiAxMDAwKSAvIChQICogMTAwMCk7CisKKwlyZWcxWzFdIHw9IChOID4+IDkpICYgMHgwMzsKKwlyZWcxWzJdCSA9IChOID4+IDEpICYgMHhmZjsKKwlyZWcxWzNdCSA9IChOIDw8IDcpICYgMHg4MDsKKworCXJlZzJbMV0gfD0gKFIgPj4gOCkgJiAweDAzOworCXJlZzJbMl0JID0gUiAmIDB4RkY7CS8qIFIgKi8KKworCXJlZzFbM10gfD0gQSAmIDB4N2Y7CS8qIEEgKi8KKworCWlmIChQID09IDY0KQorCQlyZWcxWzFdIHw9IDB4NDA7IC8qIFByZXNjYWxlciA2NC82NSAqLworCisJcmVnMFsxXSB8PSAweDAzOworCisJLyogYWxyZWFkeSBlbmFibGVkIC0gZG8gbm90IHJlZW5hYmxlIGkyYyByZXBlYXRlciBvciBUWCBmYWlscyAqLworCW1zZy5idWYgPSByZWcwOworCW1zZy5sZW4gPSBzaXplb2YocmVnMCk7CisJaWYgKGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJc3R2MDI5OV9lbmFibGVfcGxsaTJjKGZlKTsKKwltc2cuYnVmID0gcmVnMTsKKwltc2cubGVuID0gc2l6ZW9mKHJlZzEpOworCWlmIChpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXN0djAyOTlfZW5hYmxlX3BsbGkyYyhmZSk7CisJbXNnLmJ1ZiA9IHJlZzI7CisJbXNnLmxlbiA9IHNpemVvZihyZWcyKTsKKwlpZiAoaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHU4IHR5cGhvb25fY2luZXJneTEyMDBzX2luaXR0YWJbXSA9IHsKIAkweDAxLCAweDE1LAogCTB4MDIsIDB4MzAsCkBAIC01NTMsNiArNzA1LDE4IEBACiAJLnBsbF9zZXQgPSBwaGlsaXBzX3N1MTI3OF90eV9jaV9wbGxfc2V0LAogfTsKIAorc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBjaW5lcmd5XzEyMDBzXzE4OTRfMDAxMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gdHlwaG9vbl9jaW5lcmd5MTIwMHNfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDAsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gcGhpbGlwc19zdTEyNzhfdHlfY2lfc2V0X3N5bWJvbF9yYXRlLAorCS5wbGxfc2V0ID0gcGhpbGlwc19zdTEyNzhzaDJfdHVhNjEwMF9wbGxfc2V0LAorfTsKIAogc3RhdGljIGludCBwaGlsaXBzX2N1MTIxNl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKQEAgLTc0OSw2ICs5MTMsMTUgQEAKIAlzd2l0Y2ggKHNhYS0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7CiAKIAljYXNlIFNVQklEX0RWQlNfS05DMToKKwkJaWYgKHNhYS0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTg5NCkgeworCQkJZmUgPSBzdHYwMjk5X2F0dGFjaCgmY2luZXJneV8xMjAwc18xODk0XzAwMTBfY29uZmlnLAorCQkJCQkgICAgICZidWRnZXRfYXYtPmJ1ZGdldC5pMmNfYWRhcCk7CisJCX0gZWxzZSB7CisJCQlmZSA9IHN0djAyOTlfYXR0YWNoKCZ0eXBob29uX2NvbmZpZywKKwkJCQkJICAgICAmYnVkZ2V0X2F2LT5idWRnZXQuaTJjX2FkYXApOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBTVUJJRF9EVkJTX0tOQzFfUExVUzoKIAljYXNlIFNVQklEX0RWQlNfVFlQSE9PTjoKIAkJZmUgPSBzdHYwMjk5X2F0dGFjaCgmdHlwaG9vbl9jb25maWcsCkBAIC0xMDAzLDYgKzExNzYsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV90YmxbXSA9IHsKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXMsIDB4MTEzMSwgMHg0ZjU2KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXMsIDB4MTEzMSwgMHgwMDEwKSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXMsIDB4MTg5NCwgMHgwMDEwKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXNwLCAweDExMzEsIDB4MDAxMSksCiAJTUFLRV9FWFRFTlNJT05fUENJKGtuYzFjLCAweDE4OTQsIDB4MDAyMCksCiAJTUFLRV9FWFRFTlNJT05fUENJKGtuYzFjcCwgMHgxODk0LCAweDAwMjEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKaW5kZXggMDE3ZmNiYy4uNjMzZTY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCkBAIC00MDQsOSArNDA0LDcgQEAKIAl0YXNrbGV0X2luaXQoJmJ1ZGdldC0+dnBlX3Rhc2tsZXQsIHZwZWlycSwgKHVuc2lnbmVkIGxvbmcpIGJ1ZGdldCk7CiAKIAkvKiBmcm9udGVuZCBwb3dlciBvbiAqLwotCWlmIChiaS0+dHlwZSA9PSBCVURHRVRfRlNfQUNUSVZZKQotCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUSEkpOwotCWVsc2UKKwlpZiAoYmktPnR5cGUgIT0gQlVER0VUX0ZTX0FDVElWWSkKIAkJc2FhNzE0Nl9zZXRncGlvKGRldiwgMiwgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAogCWlmIChidWRnZXRfcmVnaXN0ZXIoYnVkZ2V0KSA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCmluZGV4IGZhZmU2NDAuLjIzOGM3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCkBAIC0xMTIsNiArMTEyLDcgQEAKICAqICAgUm91dGluZXMgZm9yIHRoZSBGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IGJ1ZGdldCBjYXJkCiAgKiAgIDIyIGtIeiB0b25lIGFuZCBEaVNFcUMgYXJlIGhhbmRsZWQgYnkgdGhlIGZyb250ZW5kLgogICogICBWb2x0YWdlIG11c3QgYmUgc2V0IGhlcmUuCisgKiAgIEdQSU8gMTogTE5CUCBFTiwgR1BJTyAyOiBMTkJQIFZTRUwKICAqLwogc3RhdGljIGludCBTZXRWb2x0YWdlX0FjdGl2eSAoc3RydWN0IGJ1ZGdldCAqYnVkZ2V0LCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CkBAIC0xMjEsMTEgKzEyMiwxNiBAQAogCiAJc3dpdGNoICh2b2x0YWdlKSB7CiAJCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUSEkpOwogCQkJc2FhNzE0Nl9zZXRncGlvKGRldiwgMiwgU0FBNzE0Nl9HUElPX09VVExPKTsKIAkJCWJyZWFrOwogCQljYXNlIFNFQ19WT0xUQUdFXzE4OgorCQkJc2FhNzE0Nl9zZXRncGlvKGRldiwgMSwgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAkJCXNhYTcxNDZfc2V0Z3BpbyhkZXYsIDIsIFNBQTcxNDZfR1BJT19PVVRISSk7CiAJCQlicmVhazsKKwkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMDYsNyArMjEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBhcmcpCitzdGF0aWMgaW50IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGJ1ZGdldCogYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXQqKSBmZS0+ZHZiLT5wcml2OwogCXU4IGJ1ZjsKQEAgLTU4MCw2ICs1ODYsNyBAQAogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+ZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7CisJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kID0gTlVMTDsKIAkJCWlmIChsbmJwMjFfaW5pdChidWRnZXQpKSB7CiAJCQkJcHJpbnRrKCIlczogTm8gTE5CUDIxIGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCQlnb3RvIGVycm9yX291dDsKQEAgLTYyNCw3ICs2MzEsNyBAQAogCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHN0djAyOTlfYXR0YWNoKCZhbHBzX2JzcnU2X2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnNldF92b2x0YWdlID0gc2llbWVuc19idWRnZXRfc2V0X3ZvbHRhZ2U7Ci0JCQlicmVhazsKKwkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPmRpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQgPSBOVUxMOwogCQl9CiAJCWJyZWFrOwogCkBAIC02MzIsNyArNjM5LDcgQEAKIAkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSB0ZGE4MDgzX2F0dGFjaCgmZ3J1bmRpZ18yOTUwNF80NTFfY29uZmlnLCAmYnVkZ2V0LT5pMmNfYWRhcCk7CiAJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgewogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+c2V0X3ZvbHRhZ2UgPSBzaWVtZW5zX2J1ZGdldF9zZXRfdm9sdGFnZTsKLQkJCWJyZWFrOworCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+ZGlzaG5ldHdvcmtfc2VuZF9sZWdhY3lfY29tbWFuZCA9IE5VTEw7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL3R0cGNpLWVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvdHRwY2ktZWVwcm9tLmMKaW5kZXggMThhYTIyYi4uMWYzMWU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvdHRwY2ktZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvdHRwY2ktZWVwcm9tLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgICBIb2xnZXIgV2FlY2h0bGVyCUNvbnZlcmdlbmNlCiAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBSYWxwaCBNZXR6bGVyIDxyamttQG1ldHpsZXJicm9zLmRlPgotCQkgICAgICAgICAgICBNZXR6bGVyIEJyb3RoZXJzIFN5c3RlbWVudHdpY2tsdW5nIEdiUgorCQkJICAgIE1ldHpsZXIgQnJvdGhlcnMgU3lzdGVtZW50d2lja2x1bmcgR2JSCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnCmluZGV4IGM2YzFkNDEuLjkxNDU4N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAJICBTdXBwb3J0IGZvciBleHRlcm5hbCBVU0IgYWRhcHRlcnMgZGVzaWduZWQgYnkgVGVjaG5vdHJlbmQgYW5kCiAJICBwcm9kdWNlZCBieSBIYXVwcGF1Z2UsIHNoaXBwZWQgdW5kZXIgdGhlIGJyYW5kIG5hbWUgJ05vdmEtVVNCJy4KIAotICAgICAgICAgIFRoZXNlIGRldmljZXMgZG9uJ3QgaGF2ZSBhIE1QRUcgZGVjb2RlciBidWlsdCBpbiwgc28geW91IG5lZWQKKwkgIFRoZXNlIGRldmljZXMgZG9uJ3QgaGF2ZSBhIE1QRUcgZGVjb2RlciBidWlsdCBpbiwgc28geW91IG5lZWQKIAkgIGFuIGV4dGVybmFsIHNvZnR3YXJlIGRlY29kZXIgdG8gd2F0Y2ggVFYuCiAKIAkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy9LY29uZmlnCmluZGV4IGMzMzQ1MjYuLjgzNjExMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy9LY29uZmlnCkBAIC04LDE0ICs4LDE1IEBACiAJICBwcm9kdWNlZCBieSBIYXVwcGF1Z2UsIHNoaXBwZWQgdW5kZXIgdGhlIGJyYW5kIG5hbWUgJ0RFQzIwMDAtdCcKIAkgIGFuZCAnREVDMzAwMC1zJy4KIAotICAgICAgICAgIEV2ZW4gaWYgdGhlc2UgZGV2aWNlcyBoYXZlIGEgTVBFRyBkZWNvZGVyIGJ1aWx0IGluLCB0aGV5IHRyYW5zbWl0CisJICBFdmVuIGlmIHRoZXNlIGRldmljZXMgaGF2ZSBhIE1QRUcgZGVjb2RlciBidWlsdCBpbiwgdGhleSB0cmFuc21pdAogCSAgb25seSBjb21wcmVzc2VkIE1QRUcgZGF0YSBvdmVyIHRoZSBVU0IgYnVzLCBzbyB5b3UgbmVlZAogCSAgYW4gZXh0ZXJuYWwgc29mdHdhcmUgZGVjb2RlciB0byB3YXRjaCBUViBvbiB5b3VyIGNvbXB1dGVyLgogCi0gICAgICAgICAgVGhpcyBkcml2ZXIgbmVlZHMgZXh0ZXJuYWwgZmlybXdhcmUuIFBsZWFzZSB1c2UgdGhlIGNvbW1hbmRzCi0gICAgICAgICAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgZGVjMjAwMHQiLAotICAgICAgICAgICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGRlYzI1NDB0IiwKLSAgICAgICAgICAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBkZWMzMDAwcyIsCi0gICAgICAgICAgZG93bmxvYWQvZXh0cmFjdCB0aGVtLCBhbmQgdGhlbiBjb3B5IHRoZW0gdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS4KKwkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kcworCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgZGVjMjAwMHQiLAorCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgZGVjMjU0MHQiLAorCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgZGVjMzAwMHMiLAorCSAgZG93bmxvYWQvZXh0cmFjdCB0aGVtLCBhbmQgdGhlbiBjb3B5IHRoZW0gdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZQorCSAgb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCiAKIAkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKaW5kZXggOGFiYzIxOC4uZDg5NjZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAKIHN0YXRpYyBpbnQgdHR1c2JfZGVjX2F1ZGlvX3BlczJ0c19jYih2b2lkICpwcml2LCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotCXN0cnVjdCB0dHVzYl9kZWMgKmRlYyA9IChzdHJ1Y3QgdHR1c2JfZGVjICopcHJpdjsKKwlzdHJ1Y3QgdHR1c2JfZGVjICpkZWMgPSBwcml2OwogCiAJZGVjLT5hdWRpb19maWx0ZXItPmZlZWQtPmNiLnRzKGRhdGEsIDE4OCwgTlVMTCwgMCwKIAkJCQkgICAgICAgJmRlYy0+YXVkaW9fZmlsdGVyLT5mZWVkLT5mZWVkLnRzLApAQCAtMzgwLDcgKzM4MCw3IEBACiAKIHN0YXRpYyBpbnQgdHR1c2JfZGVjX3ZpZGVvX3BlczJ0c19jYih2b2lkICpwcml2LCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotCXN0cnVjdCB0dHVzYl9kZWMgKmRlYyA9IChzdHJ1Y3QgdHR1c2JfZGVjICopcHJpdjsKKwlzdHJ1Y3QgdHR1c2JfZGVjICpkZWMgPSBwcml2OwogCiAJZGVjLT52aWRlb19maWx0ZXItPmZlZWQtPmNiLnRzKGRhdGEsIDE4OCwgTlVMTCwgMCwKIAkJCQkgICAgICAgJmRlYy0+dmlkZW9fZmlsdGVyLT5mZWVkLT5mZWVkLnRzLApAQCAtOTY1LDggKzk2NSw4IEBACiAKIAljYXNlIERNWF9UU19QRVNfVEVMRVRFWFQ6CiAJCWRlYy0+cGlkW0RNWF9QRVNfVEVMRVRFWFRdID0gZHZiZG14ZmVlZC0+cGlkOwotCQlkcHJpbnRrKCIgIHBlc190eXBlOiBETVhfVFNfUEVTX1RFTEVURVhUXG4iKTsKLQkJYnJlYWs7CisJCWRwcmludGsoIiAgcGVzX3R5cGU6IERNWF9UU19QRVNfVEVMRVRFWFQobm90IHN1cHBvcnRlZClcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKIAogCWNhc2UgRE1YX1RTX1BFU19QQ1I6CiAJCWRwcmludGsoIiAgcGVzX3R5cGU6IERNWF9UU19QRVNfUENSXG4iKTsKQEAgLTk3NSw4ICs5NzUsOCBAQAogCQlicmVhazsKIAogCWNhc2UgRE1YX1RTX1BFU19PVEhFUjoKLQkJZHByaW50aygiICBwZXNfdHlwZTogRE1YX1RTX1BFU19PVEhFUlxuIik7Ci0JCWJyZWFrOworCQlkcHJpbnRrKCIgIHBlc190eXBlOiBETVhfVFNfUEVTX09USEVSKG5vdCBzdXBwb3J0ZWQpXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CiAKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCIgIHBlc190eXBlOiB1bmtub3duICglZClcbiIsIGR2YmRteGZlZWQtPnBlc190eXBlKTsKQEAgLTExODIsNyArMTE4Miw3IEBACiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpZGVjKTsKIH0KIAotc3RhdGljIGludCB0dHVzYl9pbml0X3JjKHN0cnVjdCB0dHVzYl9kZWMgKmRlYykKK3N0YXRpYyBpbnQgdHR1c2JfaW5pdF9yYyggc3RydWN0IHR0dXNiX2RlYyAqZGVjKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAl1OCBiW10gPSB7IDB4MDAsIDB4MDEgfTsKQEAgLTEyMDMsMTMgKzEyMDMsMTIgQEAKIAlpbnB1dF9kZXYtPmtleWNvZGUgPSByY19rZXlzOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmNfa2V5cyk7IGkrKykKLQkJc2V0X2JpdChyY19rZXlzW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCSAgc2V0X2JpdChyY19rZXlzW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIAogCWlmICh1c2Jfc3VibWl0X3VyYihkZWMtPmlycV91cmIsIEdGUF9LRVJORUwpKQogCQlwcmludGsoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIsX19GVU5DVElPTl9fKTsKLQogCS8qIGVuYWJsZSBpcnEgcGlwZSAqLwogCXR0dXNiX2RlY19zZW5kX2NvbW1hbmQoZGVjLDB4YjAsc2l6ZW9mKGIpLGIsTlVMTCxOVUxMKTsKIApAQCAtMTM5NSw2ICsxMzk0LDcgQEAKIAkJCS8qIFdlIGNhbid0IHRydXN0IHRoZSBVU0IgSURzIHRoYXQgc29tZSBmaXJtd2FyZXMKIAkJCSAgIGdpdmUgdGhlIGJveCAqLwogCQkJc3dpdGNoIChtb2RlbCkgeworCQkJY2FzZSAweDAwMDcwMDAxOgogCQkJY2FzZSAweDAwMDcwMDA4OgogCQkJY2FzZSAweDAwMDcwMDBjOgogCQkJCXR0dXNiX2RlY19zZXRfbW9kZWwoZGVjLCBUVFVTQl9ERUMzMDAwUyk7CkBAIC0xNTg4LDcgKzE1ODgsNyBAQAogCQkJICAgaW50IHBhcmFtX2xlbmd0aCwgY29uc3QgdTggcGFyYW1zW10sCiAJCQkgICBpbnQgKnJlc3VsdF9sZW5ndGgsIHU4IGNtZF9yZXN1bHRbXSkKIHsKLQlzdHJ1Y3QgdHR1c2JfZGVjKiBkZWMgPSAoc3RydWN0IHR0dXNiX2RlYyopIGZlLT5kdmItPnByaXY7CisJc3RydWN0IHR0dXNiX2RlYyogZGVjID0gZmUtPmR2Yi0+cHJpdjsKIAlyZXR1cm4gdHR1c2JfZGVjX3NlbmRfY29tbWFuZChkZWMsIGNvbW1hbmQsIHBhcmFtX2xlbmd0aCwgcGFyYW1zLCByZXN1bHRfbGVuZ3RoLCBjbWRfcmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMKaW5kZXggNzI1YWYzYS4uYTVhNDYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JkZWNmZS5jCkBAIC00Miw4ICs0MiwzOSBAQAogCiBzdGF0aWMgaW50IHR0dXNiZGVjZmVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCiB7Ci0JKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfVklURVJCSSB8Ci0JCSAgRkVfSEFTX1NZTkMgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19MT0NLOworCXN0cnVjdCB0dHVzYmRlY2ZlX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCXU4IHJlc3VsdFs0XTsKKwlpbnQgbGVuLCByZXQ7CisKKwkqc3RhdHVzPTA7CisKKwlyZXQ9c3RhdGUtPmNvbmZpZy0+c2VuZF9jb21tYW5kKGZlLCAweDczLCBzaXplb2YoYiksIGIsICZsZW4sIHJlc3VsdCk7CisJaWYocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYobGVuICE9IDQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5leHBlY3RlZCByZXBseVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3dpdGNoKHJlc3VsdFszXSkgeworCQljYXNlIDE6ICAvKiBub3QgdHVuZWQgeWV0ICovCisJCWNhc2UgMjogIC8qIG5vIHNpZ25hbC9ubyBsb2NrKi8KKwkJCWJyZWFrOworCQljYXNlIDM6CSAvKiBzaWduYWwgZm91bmQgYW5kIGxvY2tlZCovCisJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19WSVRFUkJJIHwKKwkJCUZFX0hBU19TWU5DIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSzsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQkqc3RhdHVzID0gRkVfVElNRURPVVQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIiVzOiByZXR1cm5lZCB1bmtub3duIHZhbHVlOiAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdFszXSk7CisJCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0LDYgKzk1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdHR1c2JkZWNmZV9kdmJ0X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MqIGZlc2V0dGluZ3MpCit7CisJCWZlc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDE1MDA7CisJCS8qIERyaWZ0IGNvbXBlbnNhdGlvbiBtYWtlcyBubyBzZW5zZSBmb3IgRFZCLVQgKi8KKwkJZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gMDsKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdHR1c2JkZWNmZV9kdmJzX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCB0dHVzYmRlY2ZlX3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgdHR1c2JkZWNmZV9zdGF0ZSopIGZlLT5kZW1vZHVsYXRvcl9wcml2OwpAQCAtMjEyLDYgKzI1Myw4IEBACiAKIAkuc2V0X2Zyb250ZW5kID0gdHR1c2JkZWNmZV9kdmJ0X3NldF9mcm9udGVuZCwKIAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHR0dXNiZGVjZmVfZHZidF9nZXRfdHVuZV9zZXR0aW5ncywKKwogCS5yZWFkX3N0YXR1cyA9IHR0dXNiZGVjZmVfcmVhZF9zdGF0dXMsCiB9OwogCkBAIC0yMjMsMTEgKzI2NiwxMSBAQAogCQkuZnJlcXVlbmN5X21pbgkJPSA5NTAwMDAsCiAJCS5mcmVxdWVuY3lfbWF4CQk9IDIxNTAwMDAsCiAJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAxMjUsCisJCS5zeW1ib2xfcmF0ZV9taW4gICAgICAgID0gMTAwMDAwMCwgIC8qIGd1ZXNzZWQgKi8KKwkJLnN5bWJvbF9yYXRlX21heCAgICAgICAgPSA0NTAwMDAwMCwgLyogZ3Vlc3NlZCAqLwogCQkuY2FwcyA9CUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CiAJCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKLQkJCUZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV9BVVRPIHwKLQkJCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAotCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCQkJRkVfQ0FOX1FQU0sKIAl9LAogCiAJLnJlbGVhc2UgPSB0dHVzYmRlY2ZlX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yYWRpby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9taXJvcGNtMjAtcmFkaW8uYwppbmRleCBjMmViZTg3Li5kYzI5MmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yYWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vbWlyb3BjbTIwLXJhZGlvLmMKQEAgLTIyMCw2ICsyMjAsNyBAQAogCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAogCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSBwY20yMF9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKaW5kZXggODc3Yzc3MC4uOTE0ZGVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKQEAgLTI5OSw2ICsyOTksNyBAQAogCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAogCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkgICAgICAgID0gcnRfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwppbmRleCA1MzE5YTljLi41MjNiZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKQEAgLTI1Niw2ICsyNTYsNyBAQAogCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAogCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSBhel9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCA5YjA0MDYzLi5mMWI1YWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC00OTAsNiArNDkwLDcgQEAKIAkucmVsZWFzZSAgICAgICAJPSBjYWRldF9yZWxlYXNlLAogCS5yZWFkCQk9IGNhZGV0X3JlYWQsCiAJLmlvY3RsCQk9IGNhZGV0X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwppbmRleCA3OGIyODg4Li42OWFjOGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwpAQCAtMzAxLDYgKzMwMSw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IGdlbXRla19wY2lfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwppbmRleCA2NDE4ZjAzLi40NzE3M2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKQEAgLTIzMyw2ICsyMzMsNyBAQAogCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAogCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSBnZW10ZWtfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCmluZGV4IGU1ZTIwMjEuLmMzMGVmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCkBAIC03Miw2ICs3Miw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHJhZGlvX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKaW5kZXggN2IzM2Q4Zi4uYzk3NWRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCkBAIC04MCw2ICs4MCw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCSAgICAgICAgPSByYWRpb19pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtYXhpcmFkaW9fcmFkaW8gPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwppbmRleCBiMjI1NmQ2Li4yOGE0N2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwpAQCAtMTk5LDYgKzE5OSw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHJ0X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwppbmRleCA2ZjAzY2U0Li4wMjI5Zjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwpAQCAtMjI1LDYgKzIyNSw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IGZtaV9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwppbmRleCA3MTk3MWU5Li4wOTlmZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC00OCw3ICs0OCw3IEBACiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiAKIC8qIGh3IHByZWNpc2lvbiBpcyAxMi41IGtIegotICogSXQgaXMgb25seSB1c2VmdWxsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgMjAwICg9MC4wMTI1TWh6KSwKKyAqIEl0IGlzIG9ubHkgdXNlZnVsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgMjAwICg9MC4wMTI1TWh6KSwKICAqIG90aGVyIGJpdHMgd2lsbCBiZSB0cnVuY2F0ZWQKICAqLwogI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KS8yMDArODU2KQpAQCAtMzU2LDYgKzM1Niw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgID0gZm1yMl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwppbmRleCBiMDM1NzNjLi5mY2ZkZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCkBAIC0yNzYsNiArMjc2LDcgQEAKIAkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKIAkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdHRfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKaW5kZXggYjMwMGJlZC4uNWEwOTlhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwpAQCAtMjU1LDYgKzI1NSw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHRyX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwppbmRleCBmMzA0ZjNjLi44YWM5YThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwpAQCAtMjYxLDYgKzI2MSw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHR5cGhvb25faW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCmluZGV4IDRjNmQ2ZmIuLmQ1OTBlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCkBAIC0zMTMsNiArMzEzLDcgQEAKIAkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKIAkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gem9sX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IGZjODdlZmMuLjJmZTI2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTcsNiArNywxNSBAQAogCiBjb21tZW50ICJWaWRlbyBBZGFwdGVycyIKIAorY29uZmlnIFZJREVPX0FEVl9ERUJVRworCWJvb2wgIkVuYWJsZSBhZHZhbmNlZCBkZWJ1ZyBmdW5jdGlvbmFsaXR5IgorCWRlcGVuZHMgb24gVklERU9fREVWCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgYWR2YW5jZWQgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkgb24gc29tZQorCSAgVjRMIGRldmljZXMuCisJICBJbiBkb3VidCwgc2F5IE4uCisKIGNvbmZpZyBWSURFT19CVDg0OAogCXRyaXN0YXRlICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQwpAQCAtMzQyLDYgKzM1MSw2IEBACiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBkcml2ZXJzIGZvciBTQUE3MTE1LCBTQUE3MTI3IGFuZCBDWDI1ODQwCi0JICB2aWRlbyAgZGVjb2RlcnMuCisJICB2aWRlbyBkZWNvZGVycy4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggODIwNjBmOS4uZGQyNDg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC0zLDE1ICszLDE5IEBACiAjCiAKIGJ0dHYtb2Jqcwk6PQlidHR2LWRyaXZlci5vIGJ0dHYtY2FyZHMubyBidHR2LWlmLm8gXAotCQkJYnR0di1yaXNjLm8gYnR0di12YmkubyBidHR2LWkyYy5vIGJ0dHYtZ3Bpby5vCisJCQlidHR2LXJpc2MubyBidHR2LXZiaS5vIGJ0dHYtaTJjLm8gYnR0di1ncGlvLm8gXAorCQkJYnR0di1pbnB1dC5vCiB6b3Jhbi1vYmpzICAgICAgOj0JenIzNjEyMC5vIHpyMzYxMjBfaTJjLm8genIzNjEyMF9tZW0ubwogenIzNjA2Ny1vYmpzCTo9CXpvcmFuX3Byb2Nmcy5vIHpvcmFuX2RldmljZS5vIFwKIAkJCXpvcmFuX2RyaXZlci5vIHpvcmFuX2NhcmQubwogdHVuZXItb2Jqcwk6PQl0dW5lci1jb3JlLm8gdHVuZXItc2ltcGxlLm8gbXQyMHh4Lm8gdGRhODI5MC5vIHRlYTU3Njcubwotb2JqLSQoQ09ORklHX1ZJREVPX0RFVikgKz0gdmlkZW9kZXYubyB2NGwyLWNvbW1vbi5vIHY0bDEtY29tcGF0Lm8KKworbXNwMzQwMC1vYmpzCTo9CW1zcDM0MDAtZHJpdmVyLm8gbXNwMzQwMC1rdGhyZWFkcy5vCisKK29iai0kKENPTkZJR19WSURFT19ERVYpICs9IHZpZGVvZGV2Lm8gdjRsMi1jb21tb24ubyB2NGwxLWNvbXBhdC5vIGNvbXBhdF9pb2N0bDMyLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSBidHR2Lm8gbXNwMzQwMC5vIHR2YXVkaW8ubyBcCi0JdGRhNzQzMi5vIHRkYTk4NzUubyBpci1rYmQtaTJjLm8gaXIta2JkLWdwaW8ubworCXRkYTc0MzIubyB0ZGE5ODc1Lm8gaXIta2JkLWkyYy5vCiBvYmotJChDT05GSUdfU09VTkRfVFZNSVhFUikgKz0gdHZtaXhlci5vCiAKIG9iai0kKENPTkZJR19WSURFT19aUjM2MTIwKSArPSB6b3Jhbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwppbmRleCA4ODFjZGNiLi43ZDVhMDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKQEAgLTc0OSw2ICs3NDksNyBAQAogCS5yZWxlYXNlCT0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLnJlYWQJCT0gYXJfcmVhZCwKIAkuaW9jdGwJCT0gYXJfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuYwppbmRleCAxYzNmZjVmLi5kZGE0YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jCkBAIC0zMCw4ICszMCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCiAjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKwogI2luY2x1ZGUgImJ0dHYuaCIKICNpbmNsdWRlICJidDgzMi5oIgogCkBAIC00Miw5ICs0MywxMCBAQAogCQkJCSAgICAgICBJMkNfQ0xJRU5UX0VORCB9OwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2ludCBkZWJ1ZyAgICA9IDA7ICAgIC8qIGRlYnVnIG91dHB1dCAqLworbW9kdWxlX3BhcmFtKGRlYnVnLCAgICAgICAgICAgIGludCwgMDY0NCk7CiAKLSNkZWZpbmUgZHByaW50ayAgICAgaWYgKGRlYnVnKSBwcmludGsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBidDgzMl9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKQEAgLTYxLDIzICs2MywyNiBAQAogCWludCBpLHJjOwogCWJ1ZlswXT0weDgwOyAvLyBzdGFydCBhdCByZWdpc3RlciAwIHdpdGggYXV0by1pbmNyZW1lbnQKIAlpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwxKSkpCi0JCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIscmMpOworCQl2NGxfZXJyKGkyY19jbGllbnRfcywiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIixyYyk7CiAKIAlmb3IoaT0wO2k8NjU7aSsrKQogCQlidWZbaV09MDsKIAlpZiAoNjUgIT0gKHJjPWkyY19tYXN0ZXJfcmVjdihpMmNfY2xpZW50X3MsYnVmLDY1KSkpCi0JCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNjUpXG4iLHJjKTsKKwkJdjRsX2VycihpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNjUpXG4iLHJjKTsKIAogCS8vIE5vdGU6IE9uIFJFQUQgdGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGN1cnJlbnQgaW5kZXgKIAkvLyAgKGUuZy4gMHg4MCwgd2hhdCB3ZSBqdXN0IHdyb3RlKQogCi0JaWYoMSkgeworCWlmKGRlYnVnPjEpIHsKIAkJaW50IGk7Ci0JCXByaW50aygiQlQ4MzIgaGV4ZHVtcDpcbiIpOworCQl2NGxfZGJnKDIsaTJjX2NsaWVudF9zLCJoZXhkdW1wOiIpOwogCQlmb3IoaT0xO2k8NjU7aSsrKSB7CiAJCQlpZihpIT0xKSB7Ci0JCQkgIGlmKCgoaS0xKSU4KT09MCkgcHJpbnRrKCIgIik7Ci0JCQkgIGlmKCgoaS0xKSUxNik9PTApIHByaW50aygiXG4iKTsKKwkJCQlpZigoKGktMSklOCk9PTApIHByaW50aygiICIpOworCQkJCWlmKCgoaS0xKSUxNik9PTApIHsKKwkJCQkJcHJpbnRrKCJcbiIpOworCQkJCQl2NGxfZGJnKDIsaTJjX2NsaWVudF9zLCJoZXhkdW1wOiIpOworCQkJCX0KIAkJCX0KIAkJCXByaW50aygiICUwMngiLGJ1ZltpXSk7CiAJCX0KQEAgLTk2LDU2ICsxMDEsNTYgQEAKIAlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCiAJaWYoYnVmWzB4NDBdICE9IDB4MzEpIHsKLQkJcHJpbnRrKCJidDgzMjogdGhpcyBpMmMgY2hpcCBpcyBubyBidDgzMiAoaWQ9JTAyeCkuIERldGFjaGluZy5cbiIsYnVmWzB4NDBdKTsKKwkJdjRsX2VycihpMmNfY2xpZW50X3MsIlRoaXMgaTJjIGNoaXAgaXMgbm8gYnQ4MzIgKGlkPSUwMngpLiBEZXRhY2hpbmcuXG4iLGJ1ZlsweDQwXSk7CiAJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiAwOwogCX0KIAotCXByaW50aygiV3JpdGUgMCB0cCBWUFNUQVRVU1xuIik7CisJdjRsX2VycihpMmNfY2xpZW50X3MsIldyaXRlIDAgdHAgVlBTVEFUVVNcbiIpOwogCWJ1ZlswXT1CVDgzMl9WUF9TVEFUVVM7IC8vIFJlZy41MgogCWJ1ZlsxXT0gMHgwMDsKIAlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0JCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJdjRsX2VycihpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAogCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAKIAogCS8vIExlYXZlIGxvdyBwb3dlciBtb2RlOgotCXByaW50aygiQnQ4MzI6IGxlYXZlIGxvdyBwb3dlciBtb2RlLlxuIik7CisJdjRsX2VycihpMmNfY2xpZW50X3MsImxlYXZlIGxvdyBwb3dlciBtb2RlLlxuIik7CiAJYnVmWzBdPUJUODMyX0NBTV9TRVRVUDA7IC8vMHgzOSA1NwogCWJ1ZlsxXT0weDA4OwogCWlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDIpKSkKLQkJcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBMTFBNOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJdjRsX2VycihpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3IgTExQTTogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CiAKIAlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCi0JcHJpbnRrKCJXcml0ZSAwIHRwIFZQU1RBVFVTXG4iKTsKKwl2NGxfaW5mbyhpMmNfY2xpZW50X3MsIldyaXRlIDAgdHAgVlBTVEFUVVNcbiIpOwogCWJ1ZlswXT1CVDgzMl9WUF9TVEFUVVM7IC8vIFJlZy41MgogCWJ1ZlsxXT0gMHgwMDsKIAlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0JCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJdjRsX2VycihpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAogCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAKIAogCS8vIEVuYWJsZSBPdXRwdXQKLQlwcmludGsoIkVuYWJsZSBPdXRwdXRcbiIpOworCXY0bF9pbmZvKGkyY19jbGllbnRfcywiRW5hYmxlIE91dHB1dFxuIik7CiAJYnVmWzBdPUJUODMyX1ZQX0NPTlRST0wxOyAvLyBSZWcuNDAKIAlidWZbMV09IDB4MjcgJiAofjB4MDEpOyAvLyBEZWZhdWx0IHwgIXNraXAKIAlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0JCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgRU86IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCQl2NGxfZXJyKGkyY19jbGllbnRfcywiaTJjIGkvbyBlcnJvciBFTzogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CiAKIAlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCiAKIAkvLyBmb3IgdGVzdGluZyAoZXZlbiB3b3JrcyB3aGVuIG5vIGNhbWVyYSBhdHRhY2hlZCkKLQlwcmludGsoImJ0ODMyOiAqKiogR2VuZXJhdGUgTlRTQyBNIEJhcnMgKioqKipcbiIpOworCXY0bF9pbmZvKGkyY19jbGllbnRfcywiKioqIEdlbmVyYXRlIE5UU0MgTSBCYXJzICoqKioqXG4iKTsKIAlidWZbMF09QlQ4MzJfVlBfVEVTVENPTlRST0wwOyAvLyBSZWcuIDQyCiAJYnVmWzFdPTM7IC8vIEdlbmVyYXRlIE5UU0MgU3lzdGVtIE0gYmFycywgR2VuZXJhdGUgRnJhbWUgdGltaW5nIGludGVybmFsbHkKIAlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0JCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgTUJBUjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CisJCXY0bF9pbmZvKGkyY19jbGllbnRfcywiaTJjIGkvbyBlcnJvciBNQkFSOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAotCXByaW50aygiQnQ4MzI6IENhbWVyYSBQcmVzZW50OiAlc1xuIiwKKwl2NGxfaW5mbyhpMmNfY2xpZW50X3MsIkNhbWVyYSBQcmVzZW50OiAlc1xuIiwKIAkJKGJ1ZlsxK0JUODMyX0NBTV9TVEFUVVNdICYgQlQ4MzJfNTZfQ0FNRVJBX1BSRVNFTlQpID8gInllcyI6Im5vIik7CiAKIAlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwpAQCAtMTU5LDEzICsxNjQsOSBAQAogewogCXN0cnVjdCBidDgzMiAqdDsKIAotCXByaW50aygiYnQ4MzJfYXR0YWNoXG4iKTsKLQogCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKIAljbGllbnRfdGVtcGxhdGUuYWRkciAgICA9IGFkZHI7CiAKLQlwcmludGsoImJ0ODMyOiBjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkcjw8MSk7Ci0KIAlpZiAoTlVMTCA9PSAodCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQodCwwLHNpemVvZigqdCkpOwpAQCAtMTczLDYgKzE3NCw5IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKCZ0LT5jbGllbnQsIHQpOwogCWkyY19hdHRhY2hfY2xpZW50KCZ0LT5jbGllbnQpOwogCisJdjRsX2luZm8oJnQtPmNsaWVudCwiY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOworCisKIAlpZighIGJ0ODMyX2luaXQoJnQtPmNsaWVudCkpIHsKIAkJYnQ4MzJfZGV0YWNoKCZ0LT5jbGllbnQpOwogCQlyZXR1cm4gLTE7CkBAIC0xODMsMTMgKzE4Nyw4IEBACiAKIHN0YXRpYyBpbnQgYnQ4MzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewotI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQogCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIGJ0ODMyX2F0dGFjaCk7Ci0jZWxzZQotCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfQl9CVDg0OCkKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBidDgzMl9hdHRhY2gpOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5Nyw3ICsxOTYsNyBAQAogewogCXN0cnVjdCBidDgzMiAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JcHJpbnRrKCJidDgzMjogZGV0YWNoLlxuIik7CisJdjRsX2luZm8oJnQtPmNsaWVudCwiZGV0dGFjaFxuIik7CiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZSh0KTsKIAlyZXR1cm4gMDsKQEAgLTIwOCw3ICsyMDcsOCBAQAogewogCXN0cnVjdCBidDgzMiAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JcHJpbnRrKCJidDgzMjogY29tbWFuZCAleFxuIixjbWQpOworCWlmIChkZWJ1Zz4xKQorCQl2NGxfaTJjX3ByaW50X2lvY3RsKCZ0LT5jbGllbnQsY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgQlQ4MzJfSEVYRFVNUDogewpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJCWNhc2UgQlQ4MzJfUkVBVFRBQ0g6Ci0JCQlwcmludGsoImJ0ODMyOiByZS1hdHRhY2hcbiIpOworCQkJdjRsX2luZm8oJnQtPmNsaWVudCwicmUtYXR0YWNoXG4iKTsKIAkJCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOwogCQkJaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7CiAJCWJyZWFrOwpAQCAtMjMxLDkgKzIzMSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgICA9ICJpMmMgYnQ4MzIgZHJpdmVyIiwKKwkJLm5hbWUgICA9ICJidDgzMiIsCiAJfSwKLQkuaWQgICAgICAgICAgICAgPSAtMSwgLyogRklYTUUgKi8KKwkuaWQgICAgICAgICAgICAgPSAwLCAvKiBGSVhNRSAqLwogCS5hdHRhY2hfYWRhcHRlciA9IGJ0ODMyX3Byb2JlLAogCS5kZXRhY2hfY2xpZW50ICA9IGJ0ODMyX2RldGFjaCwKIAkuY29tbWFuZCAgICAgICAgPSBidDgzMl9jb21tYW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYwppbmRleCAwMTJiZTYzLi4xNjIxYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiYnR0dnAuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAvKiBmd2QgZGVjbCAqLwogc3RhdGljIHZvaWQgYm9vdF9tc3AzNHh4KHN0cnVjdCBidHR2ICpidHYsIGludCBwaW4pOwpAQCAtMjkyLDYgKzI5Myw5IEBACiAJLyogbGlrZWx5IGJyb2tlbiwgdmVuZG9yIGlkIGRvZXNuJ3QgbWF0Y2ggdGhlIG90aGVyIG1hZ2ljIHZpZXdzIC4uLgogCSAqIHsgMHhhMGZjYTA0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzLCAiR3VpbGxlbW90IE1heGkgVFYgVmlkZW8gMyIgfSwgKi8KIAorCS8qIER1cGxpY2F0ZSBQQ0kgSUQsIHJlY29uZmlndXJlIGZvciB0aGlzIGJvYXJkIGR1cmluZyB0aGUgZWVwcm9tIHJlYWQuCisJKiB7IDB4MTNlYjAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQiwgICJIYXVwcGF1Z2UgSW1wYWN0VkNCIiB9LCAqLworCiAJLyogRFZCIGNhcmRzICh1c2luZyBwY2kgZnVuY3Rpb24gLjEgZm9yIG1wZWcgZGF0YSB4ZmVyKSAqLwogCXsgMHgwMTAxMDA3MSwgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWLCAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIgfSwKIAl7IDB4MDc2MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSwgICAgIkF2ZXJNZWRpYSBBdmVyVFYgRFZCLVQgNzYxIiB9LApAQCAtMjEzNiw3ICsyMTQwLDYgQEAKIAkJLmhhc19yZW1vdGUJPSAxLAogCQkuZ3Bpb21hc2sJPSAweDFiLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAotCQkuYW55X2lycQkJPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfUFYxNDNdID0gewogCQkvKiBKb3JnZSBCb25jb21wdGUgLSBEVEkyIDxqb3JnZUBkdGkyLm5ldD4gKi8KQEAgLTI4MTcsNiArMjgyMCwyMiBAQAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKKwkvKiAtLS0tIGNhcmQgMHg4ZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQl0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgSW1wYWN0VkNCIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDAsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gLTEsCisJCS5ncGlvbWFzawk9IDB4MGYsIC8qIG9sZDogNyAqLworCQkubXV4c2VsCQk9IHsgMCwgMSwgMywgMn0sIC8qIENvbXBvc2l0ZSAwLTMgKi8KKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnR0dl9udW1fdHZjYXJkcyA9IEFSUkFZX1NJWkUoYnR0dl90dmNhcmRzKTsKQEAgLTMwMzcsMjYgKzMwNTYsMzMgQEAKIAkJc3dpdGNoIChpZCkgewogCQljYXNlIDE6CiAJCQlpbmZvID0gIlBBTCAvIG1vbm8iOworCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpbmZvID0gIlBBTCtTRUNBTSAvIHN0ZXJlbyI7CiAJCQlidHYtPmhhc19yYWRpbyA9IDE7CisJCQlidHYtPnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUVNTOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCWluZm8gPSAiTlRTQyAvIHN0ZXJlbyI7CiAJCQlidHYtPmhhc19yYWRpbyA9IDE7CisJCQlidHYtPnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUVNTOwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKIAkJCWluZm8gPSAiUEFMK1NFQ0FNIC8gbW9ubyI7CisJCQlidHYtPnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUVNTOwogCQkJYnJlYWs7CiAJCWNhc2UgNToKIAkJCWluZm8gPSAiTlRTQyAvIG1vbm8iOworCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKIAkJCWJyZWFrOwogCQljYXNlIDY6CiAJCQlpbmZvID0gIk5UU0MgLyBzdGVyZW8iOworCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKIAkJCWJyZWFrOwogCQljYXNlIDc6CiAJCQlpbmZvID0gIlBBTCAvIHN0ZXJlbyI7CisJCQlidHYtPnRkYTk4ODdfY29uZiA9IFREQTk4ODdfSU5URVJDQVJSSUVSOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpbmZvID0gIm9vcHM6IHVua25vd24gY2FyZCI7CkBAIC0zMDY3LDggKzMwOTMsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiYnR0diVkOiBwaW5uYWNsZS9tdDogaWQ9JWQgaW5mbz1cIiVzXCIgcmFkaW89JXNcbiIsCiAJCSAgICAgICBidHYtPmMubnIsIGlkLCBpbmZvLCBidHYtPmhhc19yYWRpbyA/ICJ5ZXMiIDogIm5vIik7Ci0JCWJ0di0+dHVuZXJfdHlwZSAgPSAzMzsKLQkJYnR2LT5waW5uYWNsZV9pZCA9IGlkOworCQlidHYtPnR1bmVyX3R5cGUgPSBUVU5FUl9NVDIwMzI7CiAJfQogfQogCkBAIC0zMzcwLDkgKzMzOTUsOSBAQAogCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKIAl9CiAKLQlpZiAoYnR2LT5waW5uYWNsZV9pZCAhPSBVTlNFVCkgewotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBBVURDX0NPTkZJR19QSU5OQUNMRSwKLQkJCQkJCQkmYnR2LT5waW5uYWNsZV9pZCk7CisJaWYgKGJ0di0+dGRhOTg4N19jb25mKSB7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFREQTk4ODdfU0VUX0NPTkZJRywKKwkJCQkJCQkmYnR2LT50ZGE5ODg3X2NvbmYpOwogCX0KIAogCWJ0di0+c3ZocyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKQEAgLTMzODcsOCArMzQxMiw2IEBACiAJCWJ0di0+aGFzX3JlbW90ZT0xOwogCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19ncGlvaXJxKQogCQlidHYtPmdwaW9pcnE9MTsKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hbnlfaXJxKQotCQlidHYtPmFueV9pcnEgPSAxOwogCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX2hvb2spCiAJCWJ0di0+YXVkaW9faG9vaz1idHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX2hvb2s7CiAKQEAgLTM0MjQsNyArMzQ0Nyw3IEBACiAKIAkvKiB0dW5lciBtb2R1bGVzICovCiAJdGRhOTg4NyA9IDA7Ci0JaWYgKGJ0di0+cGlubmFjbGVfaWQgIT0gVU5TRVQpCisJaWYgKGJ0di0+dGRhOTg4N19jb25mKQogCQl0ZGE5ODg3ID0gMTsKIAlpZiAoMCA9PSB0ZGE5ODg3ICYmIDAgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfZHZiICYmCiAJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19UREE5ODg3LCAiVERBOTg4NyIpID49MCkKQEAgLTM0NzEsNiArMzQ5NCwyMSBAQAogCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmJ0di0+aTJjX2NsaWVudCwgJnR2LCBlZXByb21fZGF0YSk7CiAJYnR2LT50dW5lcl90eXBlID0gdHYudHVuZXJfdHlwZTsKIAlidHYtPmhhc19yYWRpbyAgPSB0di5oYXNfcmFkaW87CisKKwlwcmludGsoImJ0dHYlZDogSGF1cHBhdWdlIGVlcHJvbSBpbmRpY2F0ZXMgbW9kZWwjJWRcbiIsCisJCWJ0di0+Yy5uciwgdHYubW9kZWwpOworCisJLyoKKwkgKiBTb21lIG9mIHRoZSA4NzggYm9hcmRzIGhhdmUgZHVwbGljYXRlIFBDSSBJRHMuIFN3aXRjaCB0aGUgYm9hcmQKKwkgKiB0eXBlIGJhc2VkIG9uIG1vZGVsICMuCisJICovCisJaWYodHYubW9kZWwgPT0gNjQ5MDApIHsKKwkJcHJpbnRrKCJidHR2JWQ6IFN3aXRjaGluZyBib2FyZCB0eXBlIGZyb20gJXMgdG8gJXNcbiIsCisJCQlidHYtPmMubnIsCisJCQlidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5hbWUsCisJCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9IQVVQUEFVR0VfSU1QQUNUVkNCXS5uYW1lKTsKKwkJYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0I7CisJfQogfQogCiBzdGF0aWMgaW50IHRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKHN0cnVjdCBidHR2ICpidHYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKaW5kZXggMDBiZDhlYS4uMGU2OTcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYwpAQCAtMzQsMTMgKzM0LDE0IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlICJidHR2cC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jaW5jbHVkZSAiYnR0dnAuaCIKLQogI2luY2x1ZGUgInJkcy5oIgogCiAKQEAgLTIxMCw2ICsyMTEsOSBAQAogCQkudmRlbGF5ICAgICAgICAgPSAweDIwLAogCQkudmJpcGFjayAgICAgICAgPSAyNTUsCiAJCS5zcmFtICAgICAgICAgICA9IDAsCisJCS8qIElUVS1SIGZyYW1lIGxpbmUgbnVtYmVyIG9mIHRoZSBmaXJzdCBWQkkgbGluZQorCQkgICB3ZSBjYW4gY2FwdHVyZSwgb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQgZmllbGQuICovCisJCS52YmlzdGFydAk9IHsgNywzMjAgfSwKIAl9LHsKIAkJLnY0bDJfaWQgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAogCQkubmFtZSAgICAgICAgICAgPSAiTlRTQyIsCkBAIC0yMjYsNiArMjMwLDcgQEAKIAkJLnZkZWxheSAgICAgICAgID0gMHgxYSwKIAkJLnZiaXBhY2sgICAgICAgID0gMTQ0LAogCQkuc3JhbSAgICAgICAgICAgPSAxLAorCQkudmJpc3RhcnQJPSB7IDEwLCAyNzMgfSwKIAl9LHsKIAkJLnY0bDJfaWQgICAgICAgID0gVjRMMl9TVERfU0VDQU0sCiAJCS5uYW1lICAgICAgICAgICA9ICJTRUNBTSIsCkBAIC0yNDIsNiArMjQ3LDcgQEAKIAkJLnZkZWxheSAgICAgICAgID0gMHgyMCwKIAkJLnZiaXBhY2sgICAgICAgID0gMjU1LAogCQkuc3JhbSAgICAgICAgICAgPSAwLCAvKiBsaWtlIFBBTCwgY29ycmVjdD8gKi8KKwkJLnZiaXN0YXJ0CT0geyA3LCAzMjAgfSwKIAl9LHsKIAkJLnY0bDJfaWQgICAgICAgID0gVjRMMl9TVERfUEFMX05jLAogCQkubmFtZSAgICAgICAgICAgPSAiUEFMLU5jIiwKQEAgLTI1OCw2ICsyNjQsNyBAQAogCQkudmRlbGF5ICAgICAgICAgPSAweDFhLAogCQkudmJpcGFjayAgICAgICAgPSAxNDQsCiAJCS5zcmFtICAgICAgICAgICA9IC0xLAorCQkudmJpc3RhcnQJPSB7IDcsIDMyMCB9LAogCX0sewogCQkudjRsMl9pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfTSwKIAkJLm5hbWUgICAgICAgICAgID0gIlBBTC1NIiwKQEAgLTI3NCw2ICsyODEsNyBAQAogCQkudmRlbGF5ICAgICAgICAgPSAweDFhLAogCQkudmJpcGFjayAgICAgICAgPSAxNDQsCiAJCS5zcmFtICAgICAgICAgICA9IC0xLAorCQkudmJpc3RhcnQJPSB7IDEwLCAyNzMgfSwKIAl9LHsKIAkJLnY0bDJfaWQgICAgICAgID0gVjRMMl9TVERfUEFMX04sCiAJCS5uYW1lICAgICAgICAgICA9ICJQQUwtTiIsCkBAIC0yOTAsNiArMjk4LDcgQEAKIAkJLnZkZWxheSAgICAgICAgID0gMHgyMCwKIAkJLnZiaXBhY2sgICAgICAgID0gMTQ0LAogCQkuc3JhbSAgICAgICAgICAgPSAtMSwKKwkJLnZiaXN0YXJ0CT0geyA3LCAzMjB9LAogCX0sewogCQkudjRsMl9pZCAgICAgICAgPSBWNEwyX1NURF9OVFNDX01fSlAsCiAJCS5uYW1lICAgICAgICAgICA9ICJOVFNDLUpQIiwKQEAgLTMwNiw2ICszMTUsNyBAQAogCQkudmRlbGF5ICAgICAgICAgPSAweDE2LAogCQkudmJpcGFjayAgICAgICAgPSAxNDQsCiAJCS5zcmFtICAgICAgICAgICA9IC0xLAorCQkudmJpc3RhcnQJPSB7MTAsIDI3M30sCiAJfSx7CiAJCS8qIHRoYXQgb25lIGhvcGVmdWxseSB3b3JrcyB3aXRoIHRoZSBzdHJhbmdlIHRpbWluZwogCQkgKiB3aGljaCB2aWRlbyByZWNvcmRlcnMgcHJvZHVjZSB3aGVuIHBsYXlpbmcgYSBOVFNDCkBAIC0zMjYsNiArMzM2LDcgQEAKIAkJLnZiaXBhY2sgICAgICAgID0gMjU1LAogCQkudnRvdGFsICAgICAgICAgPSA1MjQsCiAJCS5zcmFtICAgICAgICAgICA9IC0xLAorCQkudmJpc3RhcnQJPSB7IDEwLCAyNzMgfSwKIAl9CiB9Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBCVFRWX1RWTk9STVMgPSBBUlJBWV9TSVpFKGJ0dHZfdHZub3Jtcyk7CkBAIC0xNTEwLDE0ICsxNTIxLDYgQEAKIAkuYnVmX3JlbGVhc2UgID0gYnVmZmVyX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKLQkiPyIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJTVFVORVIiLCAiR1BJQ1QiLCAiU1BJQ1QiLAotCSJDQ0FQVFVSRSIsICJHV0lOIiwgIlNXSU4iLCAiR0ZCVUYiLCAiU0ZCVUYiLCAiS0VZIiwgIkdGUkVRIiwKLQkiU0ZSRVEiLCAiR0FVRElPIiwgIlNBVURJTyIsICJTWU5DIiwgIk1DQVBUVVJFIiwgIkdNQlVGIiwgIkdVTklUIiwKLQkiR0NBUFRVUkUiLCAiU0NBUFRVUkUiLCAiU1BMQVlNT0RFIiwgIlNXUklURU1PREUiLCAiR1BMQVlJTkZPIiwKLQkiU01JQ1JPQ09ERSIsICJHVkJJRk1UIiwgIlNWQklGTVQiIH07Ci0jZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCi0KIHN0YXRpYyBpbnQgYnR0dl9jb21tb25faW9jdGxzKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjIwNiwyMiArMjIwOSw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmIChidHR2X2RlYnVnID4gMSkgewotCQlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7Ci0JCWNhc2UgJ3YnOgotCQkJcHJpbnRrKCJidHR2JWQ6IGlvY3RsIDB4JXggKHY0bDEsIFZJRElPQyVzKVxuIiwKLQkJCSAgICAgICBidHYtPmMubnIsIGNtZCwgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/Ci0JCQkgICAgICAgdjRsMV9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKLQkJCWJyZWFrOwotCQljYXNlICdWJzoKLQkJCXByaW50aygiYnR0diVkOiBpb2N0bCAweCV4ICh2NGwyLCAlcylcbiIsCi0JCQkgICAgICAgYnR2LT5jLm5yLCBjbWQsICB2NGwyX2lvY3RsX25hbWVzW19JT0NfTlIoY21kKV0pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoImJ0dHYlZDogaW9jdGwgMHgleCAoPz8/KVxuIiwKLQkJCSAgICAgICBidHYtPmMubnIsIGNtZCk7Ci0JCX0KLQl9CisJaWYgKGJ0dHZfZGVidWcgPiAxKQorCQl2NGxfcHJpbnRfaW9jdGwoYnR2LT5jLm5hbWUsIGNtZCk7CisKIAlpZiAoYnR2LT5lcnJvcnMpCiAJCWJ0dHZfcmVpbml0X2J0ODQ4KGJ0dik7CiAKQEAgLTI1NzAsMTAgKzI1NjAsMTAgQEAKIAkJZm10LT5jb3VudFswXSAgICAgICAgID0gZm10Mi5mbXQudmJpLmNvdW50WzBdOwogCQlmbXQtPnN0YXJ0WzFdICAgICAgICAgPSBmbXQyLmZtdC52Ymkuc3RhcnRbMV07CiAJCWZtdC0+Y291bnRbMV0gICAgICAgICA9IGZtdDIuZm10LnZiaS5jb3VudFsxXTsKLQkJaWYgKGZtdDIuZm10LnZiaS5mbGFncyAmIFZCSV9VTlNZTkMpCi0JCQlmbXQtPmZsYWdzICAgfD0gVjRMMl9WQklfVU5TWU5DOwotCQlpZiAoZm10Mi5mbXQudmJpLmZsYWdzICYgVkJJX0lOVEVSTEFDRUQpCi0JCQlmbXQtPmZsYWdzICAgfD0gVjRMMl9WQklfSU5URVJMQUNFRDsKKwkJaWYgKGZtdDIuZm10LnZiaS5mbGFncyAmIFY0TDJfVkJJX1VOU1lOQykKKwkJCWZtdC0+ZmxhZ3MgICB8PSBWQklfVU5TWU5DOworCQlpZiAoZm10Mi5mbXQudmJpLmZsYWdzICYgVjRMMl9WQklfSU5URVJMQUNFRCkKKwkJCWZtdC0+ZmxhZ3MgICB8PSBWQklfSU5URVJMQUNFRDsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DU1ZCSUZNVDoKQEAgLTMxMjAsNiArMzExMCw3IEBACiAJLm9wZW4JICA9IGJ0dHZfb3BlbiwKIAkucmVsZWFzZSAgPSBidHR2X3JlbGVhc2UsCiAJLmlvY3RsCSAgPSBidHR2X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlawkgID0gbm9fbGxzZWVrLAogCS5yZWFkCSAgPSBidHR2X3JlYWQsCiAJLm1tYXAJICA9IGJ0dHZfbW1hcCwKQEAgLTMyMjksNiArMzIyMCw3IEBACiAJY2FzZSBWSURJT0NTRlJFUToKIAljYXNlIFZJRElPQ0dBVURJTzoKIAljYXNlIFZJRElPQ1NBVURJTzoKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgogCQlyZXR1cm4gYnR0dl9jb21tb25faW9jdGxzKGJ0dixjbWQsYXJnKTsKIAogCWRlZmF1bHQ6CkBAIC0zNzAxLDggKzM2OTMsOCBAQAogCiAJYnR2PShzdHJ1Y3QgYnR0diAqKWRldl9pZDsKIAotCWlmIChidHYtPmFueV9pcnEpCi0JCWhhbmRsZWQgPSBidHR2X2FueV9pcnEoJmJ0di0+Yyk7CisJaWYgKGJ0di0+Y3VzdG9tX2lycSkKKwkJaGFuZGxlZCA9IGJ0di0+Y3VzdG9tX2lycShidHYpOwogCiAJY291bnQ9MDsKIAl3aGlsZSAoMSkgewpAQCAtMzczOCw5ICszNzMwLDkgQEAKIAkJaWYgKGFzdGF0JkJUODQ4X0lOVF9WU1lOQykKIAkJCWJ0di0+ZmllbGRfY291bnQrKzsKIAotCQlpZiAoYXN0YXQgJiBCVDg0OF9JTlRfR1BJTlQpIHsKKwkJaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9HUElOVCkgJiYgYnR2LT5yZW1vdGUpIHsKIAkJCXdha2VfdXAoJmJ0di0+Z3Bpb3EpOwotCQkJYnR0dl9ncGlvX2lycSgmYnR2LT5jKTsKKwkJCWJ0dHZfaW5wdXRfaXJxKGJ0dik7CiAJCX0KIAogCQlpZiAoYXN0YXQgJiBCVDg0OF9JTlRfSTJDRE9ORSkgewpAQCAtMzk0Niw3ICszOTM4LDYgQEAKIAogCWJ0di0+aTJjX3JjID0gLTE7CiAJYnR2LT50dW5lcl90eXBlICA9IFVOU0VUOwotCWJ0di0+cGlubmFjbGVfaWQgPSBVTlNFVDsKIAlidHYtPm5ld19pbnB1dCAgID0gVU5TRVQ7CiAJYnR2LT5oYXNfcmFkaW89cmFkaW9bYnR2LT5jLm5yXTsKIApAQCAtNDA2NSwxMSArNDA1NiwxMSBAQAogCX0KIAogCS8qIGFkZCBzdWJkZXZpY2VzICovCi0JaWYgKGJ0di0+aGFzX3JlbW90ZSkKLQkJYnR0dl9zdWJfYWRkX2RldmljZSgmYnR2LT5jLCAicmVtb3RlIik7CiAJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YikKIAkJYnR0dl9zdWJfYWRkX2RldmljZSgmYnR2LT5jLCAiZHZiIik7CiAKKwlidHR2X2lucHV0X2luaXQoYnR2KTsKKwogCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSAqLwogCWJ0dHZfbnVtKys7CiAJcmV0dXJuIDA7CkBAIC00MTA0LDYgKzQwOTUsNyBAQAogCS8qIHRlbGwgZ3BpbyBtb2R1bGVzIHdlIGFyZSBsZWF2aW5nIC4uLiAqLwogCWJ0di0+c2h1dGRvd249MTsKIAl3YWtlX3VwKCZidHYtPmdwaW9xKTsKKwlidHR2X2lucHV0X2ZpbmkoYnR2KTsKIAlidHR2X3N1Yl9kZWxfZGV2aWNlcygmYnR2LT5jKTsKIAogCS8qIHVucmVnaXN0ZXIgaTJjX2J1cyArIGlucHV0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWdwaW8uYwppbmRleCA2MTZhNWI3Li41NzVjZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1ncGlvLmMKQEAgLTExMywyNCArMTEzLDYgQEAKIAl9CiB9CiAKLWludCBidHR2X2FueV9pcnEoc3RydWN0IGJ0dHZfY29yZSAqY29yZSkKLXsKLQlzdHJ1Y3QgYnR0dl9zdWJfZHJpdmVyICpkcnY7Ci0Jc3RydWN0IGJ0dHZfc3ViX2RldmljZSAqZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07Ci0JaW50IGhhbmRsZWQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaChpdGVtLCZjb3JlLT5zdWJzKSB7Ci0JCWRldiA9IGxpc3RfZW50cnkoaXRlbSxzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlLGxpc3QpOwotCQlkcnYgPSB0b19idHR2X3N1Yl9kcnYoZGV2LT5kZXYuZHJpdmVyKTsKLQkJaWYgKGRydiAmJiBkcnYtPmFueV9pcnEpIHsKLQkJCWlmIChkcnYtPmFueV9pcnEoZGV2KSkKLQkJCQloYW5kbGVkID0gMTsKLQkJfQotCX0KLQlyZXR1cm4gaGFuZGxlZDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGV4dGVybmFsOiBzdWItZHJpdmVyIHJlZ2lzdGVyL3VucmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYwppbmRleCBkNjQxOGMwLi43NDhkNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWkyYy5jCkBAIC0yOCwxMCArMjgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgImJ0dHZwLmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYnR0dl9pMmNfYWxnb19iaXRfdGVtcGxhdGU7CiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGJ0dHZfaTJjX2FkYXBfc3dfdGVtcGxhdGU7CkBAIC0xMDUsMTAgKzEwNiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgYnR0dl9pMmNfYWRhcF9zd190ZW1wbGF0ZSA9IHsKIAkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJLmNsYXNzICAgICAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLSNlbmRpZgotCS5uYW1lICAgICAgICAgICAgICA9ICJidDg0OCIsCisJLm5hbWUgICAgICAgICAgICAgID0gImJ0dHYiLAogCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4LAogCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCiB9OwpAQCAtMjc1LDEwICsyNzQsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBidHR2X2kyY19hZGFwX2h3X3RlbXBsYXRlID0gewotCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCi0jaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRworCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5jbGFzcyAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLSNlbmRpZgogCS5uYW1lICAgICAgICAgID0gImJ0ODc4IiwKIAkuaWQgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4IC8qIEZJWE1FICovLAogCS5hbGdvICAgICAgICAgID0gJmJ0dHZfYWxnbywKQEAgLTQ0MSwxMiArNDM4LDEwIEBACiAJaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOwogCWJ0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmJ0di0+Yy5pMmNfYWRhcDsKIAotI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub192aWRlbykKIAkJYnR2LT5jLmkyY19hZGFwLmNsYXNzICY9IH5JMkNfQ0xBU1NfVFZfQU5BTE9HOwogCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19kdmIpCiAJCWJ0di0+Yy5pMmNfYWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKLSNlbmRpZgogCiAJaWYgKGJ0di0+dXNlX2kyY19odykgewogCQlidHYtPmkyY19yYyA9IGkyY19hZGRfYWRhcHRlcigmYnR2LT5jLmkyY19hZGFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pbnB1dC5jCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWdwaW8uYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlucHV0LmMKaW5kZXggZGUxMzg1ZS4uMTIxOTdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pbnB1dC5jCkBAIC0yNCwxMSArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAiYnR0di5oIgorI2luY2x1ZGUgImJ0dHZwLmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTU2LDkgKzE1NCw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogUmljYXJkbyBDZXJxdWVpcmEgPHY0bEBjZXJxdWVpcmEub3JnPiAqLwotLyogV2VpcmQgbWF0Y2hpbmcsIHNpbmNlIHRoZSByZW1vdGUgaGFzICJ1bmNvbW1vbiIga2V5cyAqLwotCiBzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY29uY2VwdHJvbmljW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAogCVsgMzAgXSA9IEtFWV9QT1dFUiwgICAgICAgLy8gcG93ZXIKQEAgLTI3OSwzNCArMjc0LDYgQEAKIAlbMHgzNl0gPSBLRVlfUEMKIH07CiAKLXN0cnVjdCBJUiB7Ci0Jc3RydWN0IGJ0dHZfc3ViX2RldmljZSAgKnN1YjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICAgICAgICAqaW5wdXQ7Ci0Jc3RydWN0IGlyX2lucHV0X3N0YXRlICAgaXI7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgbmFtZVszMl07Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgcGh5c1szMl07Ci0KLQkvKiBVc3VhbCBncGlvIHNpZ25hbGxpbmcgKi8KLQotCXUzMiAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5Y29kZTsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleWRvd247Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgbWFza19rZXl1cDsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBwb2xsaW5nOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGxhc3RfZ3BpbzsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICB3b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOwotCi0JLyogUkM1IGdwaW8gKi8KLQl1MzIgcmM1X2dwaW87Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfZW5kOwkvKiB0aW1lcl9lbmQgZm9yIGNvZGUgY29tcGxldGlvbiAqLwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyX2tleXVwOwkvKiB0aW1lcl9lbmQgZm9yIGtleSByZWxlYXNlICovCi0JdTMyIGxhc3RfcmM1OwkJCS8qIGxhc3QgZ29vZCByYzUgY29kZSAqLwotCXUzMiBsYXN0X2JpdDsJCQkvKiBsYXN0IHJhdyBiaXQgc2VlbiAqLwotCXUzMiBjb2RlOwkJCS8qIHJhdyBjb2RlIHVuZGVyIGNvbnN0cnVjdGlvbiAqLwotCXN0cnVjdCB0aW1ldmFsIGJhc2VfdGltZTsJLyogdGltZSBvZiBsYXN0IHNlZW4gY29kZSAqLwotCWludCBhY3RpdmU7CQkJLyogYnVpbGRpbmcgcmF3IGNvZGUgKi8KLX07Ci0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7ICAgIC8qIGRlYnVnIGxldmVsICgwLDEsMikgKi8KIHN0YXRpYyBpbnQgcmVwZWF0X2RlbGF5ID0gNTAwOwpAQCAtMzE0LDMxICsyODEsMTcgQEAKIHN0YXRpYyBpbnQgcmVwZWF0X3BlcmlvZCA9IDMzOwogbW9kdWxlX3BhcmFtKHJlcGVhdF9wZXJpb2QsIGludCwgMDY0NCk7CiAKLSNkZWZpbmUgREVWTkFNRSAiaXIta2JkLWdwaW8iCi0jZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChkZWJ1ZykgXAotCXByaW50ayhLRVJOX0RFQlVHIERFVk5BTUUgIjogIiBmbXQgLCAjIyBhcmcpCi0KLXN0YXRpYyB2b2lkIGlyX2lycShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpOwotc3RhdGljIGludCBpcl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpcl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKLQotc3RhdGljIHN0cnVjdCBidHR2X3N1Yl9kcml2ZXIgZHJpdmVyID0gewotCS5kcnYgPSB7Ci0JCS5uYW1lCT0gREVWTkFNRSwKLQkJLnByb2JlCT0gaXJfcHJvYmUsCi0JCS5yZW1vdmUJPSBpcl9yZW1vdmUsCi0JfSwKLQkuZ3Bpb19pcnEgCT0gaXJfaXJxLAotfTsKKyNkZWZpbmUgREVWTkFNRSAiYnR0di1pbnB1dCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBpcl9oYW5kbGVfa2V5KHN0cnVjdCBJUiAqaXIpCitzdGF0aWMgdm9pZCBpcl9oYW5kbGVfa2V5KHN0cnVjdCBidHR2ICpidHYpCiB7CisJc3RydWN0IGJ0dHZfaXIgKmlyID0gYnR2LT5yZW1vdGU7CiAJdTMyIGdwaW8sZGF0YTsKIAogCS8qIHJlYWQgZ3BpbyB2YWx1ZSAqLwotCWdwaW8gPSBidHR2X2dwaW9fcmVhZChpci0+c3ViLT5jb3JlKTsKKwlncGlvID0gYnR0dl9ncGlvX3JlYWQoJmJ0di0+Yyk7CiAJaWYgKGlyLT5wb2xsaW5nKSB7CiAJCWlmIChpci0+bGFzdF9ncGlvID09IGdwaW8pCiAJCQlyZXR1cm47CkBAIC0zNDcsNTYgKzMwMCwzNiBAQAogCiAJLyogZXh0cmFjdCBkYXRhICovCiAJZGF0YSA9IGlyX2V4dHJhY3RfYml0cyhncGlvLCBpci0+bWFza19rZXljb2RlKTsKLQlkcHJpbnRrKERFVk5BTUUgIjogaXJxIGdwaW89MHgleCBjb2RlPSVkIHwgJXMlcyVzXG4iLAorCWRwcmludGsoS0VSTl9JTkZPIERFVk5BTUUgIjogaXJxIGdwaW89MHgleCBjb2RlPSVkIHwgJXMlcyVzXG4iLAogCQlncGlvLCBkYXRhLAogCQlpci0+cG9sbGluZyAgICAgICAgICAgICAgID8gInBvbGwiICA6ICJpcnEiLAogCQkoZ3BpbyAmIGlyLT5tYXNrX2tleWRvd24pID8gIiBkb3duIiA6ICIiLAogCQkoZ3BpbyAmIGlyLT5tYXNrX2tleXVwKSAgID8gIiB1cCIgICA6ICIiKTsKIAotCWlmIChpci0+bWFza19rZXlkb3duKSB7Ci0JCS8qIGJpdCBzZXQgb24ga2V5ZG93biAqLwotCQlpZiAoZ3BpbyAmIGlyLT5tYXNrX2tleWRvd24pIHsKLQkJCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBkYXRhLCBkYXRhKTsKLQkJfSBlbHNlIHsKLQkJCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dCwgJmlyLT5pcik7Ci0JCX0KLQotCX0gZWxzZSBpZiAoaXItPm1hc2tfa2V5dXApIHsKLQkJLyogYml0IGNsZWFyZWQgb24ga2V5ZG93biAqLwotCQlpZiAoMCA9PSAoZ3BpbyAmIGlyLT5tYXNrX2tleXVwKSkgewotCQkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsIGRhdGEsIGRhdGEpOwotCQl9IGVsc2UgewotCQkJaXJfaW5wdXRfbm9rZXkoaXItPmlucHV0LCAmaXItPmlyKTsKLQkJfQotCisJaWYgKChpci0+bWFza19rZXlkb3duICAmJiAgKDAgIT0gKGdwaW8gJiBpci0+bWFza19rZXlkb3duKSkpIHx8CisJICAgIChpci0+bWFza19rZXl1cCAgICAmJiAgKDAgPT0gKGdwaW8gJiBpci0+bWFza19rZXl1cCkpKSkgeworCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsJmlyLT5pcixkYXRhLGRhdGEpOwogCX0gZWxzZSB7Ci0JCS8qIGNhbid0IGRpc3R1cmdpc3NoIGtleWRvd24vdXAgOi0vICovCi0JCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBkYXRhLCBkYXRhKTsKLQkJaXJfaW5wdXRfbm9rZXkoaXItPmlucHV0LCAmaXItPmlyKTsKKwkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwmaXItPmlyKTsKIAl9CisKIH0KIAotc3RhdGljIHZvaWQgaXJfaXJxKHN0cnVjdCBidHR2X3N1Yl9kZXZpY2UgKnN1YikKK3ZvaWQgYnR0dl9pbnB1dF9pcnEoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlzdHJ1Y3QgSVIgKmlyID0gZGV2X2dldF9kcnZkYXRhKCZzdWItPmRldik7CisJc3RydWN0IGJ0dHZfaXIgKmlyID0gYnR2LT5yZW1vdGU7CiAKIAlpZiAoIWlyLT5wb2xsaW5nKQotCQlpcl9oYW5kbGVfa2V5KGlyKTsKKwkJaXJfaGFuZGxlX2tleShidHYpOwogfQogCi1zdGF0aWMgdm9pZCBpcl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBidHR2X2lucHV0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgSVIgKmlyID0gKHN0cnVjdCBJUiopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgaXJfd29yayh2b2lkICpkYXRhKQotewotCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCXN0cnVjdCBidHR2ICpidHYgPSAoc3RydWN0IGJ0dHYqKWRhdGE7CisJc3RydWN0IGJ0dHZfaXIgKmlyID0gYnR2LT5yZW1vdGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JaXJfaGFuZGxlX2tleShpcik7CisJaXJfaGFuZGxlX2tleShidHYpOwogCXRpbWVvdXQgPSBqaWZmaWVzICsgKGlyLT5wb2xsaW5nICogSFogLyAxMDAwKTsKIAltb2RfdGltZXIoJmlyLT50aW1lciwgdGltZW91dCk7CiB9CkBAIC00MzUsMjYgKzM2OCwyNiBAQAogCQkJcmM1IHw9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJZHByaW50aygiYmFkIGNvZGU6ICV4XG4iLCBvcmdfY29kZSk7CisJCQlkcHJpbnRrKEtFUk5fV0FSTklORyAiYmFkIGNvZGU6ICV4XG4iLCBvcmdfY29kZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlkcHJpbnRrKCJjb2RlPSV4LCByYzU9JXgsIHN0YXJ0PSV4LCB0b2dnbGU9JXgsIGFkZHJlc3M9JXgsICIKKwlkcHJpbnRrKEtFUk5fV0FSTklORyAiY29kZT0leCwgcmM1PSV4LCBzdGFydD0leCwgdG9nZ2xlPSV4LCBhZGRyZXNzPSV4LCAiCiAJCSJpbnN0cj0leFxuIiwgcmM1LCBvcmdfY29kZSwgUkM1X1NUQVJUKHJjNSksCiAJCVJDNV9UT0dHTEUocmM1KSwgUkM1X0FERFIocmM1KSwgUkM1X0lOU1RSKHJjNSkpOwogCXJldHVybiByYzU7CiB9CiAKLXN0YXRpYyBpbnQgaXJfcmM1X2lycShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpCitzdGF0aWMgaW50IGJ0dHZfcmM1X2lycShzdHJ1Y3QgYnR0diAqYnR2KQogewotCXN0cnVjdCBJUiAqaXIgPSBkZXZfZ2V0X2RydmRhdGEoJnN1Yi0+ZGV2KTsKKwlzdHJ1Y3QgYnR0dl9pciAqaXIgPSBidHYtPnJlbW90ZTsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAl1MzIgZ3BpbzsKIAl1MzIgZ2FwOwogCXVuc2lnbmVkIGxvbmcgY3VycmVudF9qaWZmaWVzLCB0aW1lb3V0OwogCiAJLyogcmVhZCBncGlvIHBvcnQgKi8KLQlncGlvID0gYnR0dl9ncGlvX3JlYWQoaXItPnN1Yi0+Y29yZSk7CisJZ3BpbyA9IGJ0dHZfZ3Bpb19yZWFkKCZidHYtPmMpOwogCiAJLyogcmVtb3RlIElSUT8gKi8KIAlpZiAoIShncGlvICYgMHgyMCkpCkBAIC00OTMsMTQgKzQyNiwxNSBAQAogCX0KIAogCS8qIHRvZ2dsZSBHUElPIHBpbiA0IHRvIHJlc2V0IHRoZSBpcnEgKi8KLQlidHR2X2dwaW9fd3JpdGUoaXItPnN1Yi0+Y29yZSwgZ3BpbyAmIH4oMSA8PCA0KSk7Ci0JYnR0dl9ncGlvX3dyaXRlKGlyLT5zdWItPmNvcmUsIGdwaW8gfCAoMSA8PCA0KSk7CisJYnR0dl9ncGlvX3dyaXRlKCZidHYtPmMsIGdwaW8gJiB+KDEgPDwgNCkpOworCWJ0dHZfZ3Bpb193cml0ZSgmYnR2LT5jLCBncGlvIHwgKDEgPDwgNCkpOwogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBpcl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKKworc3RhdGljIHZvaWQgYnR0dl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgSVIgKmlyID0gKHN0cnVjdCBJUiAqKWRhdGE7CisJc3RydWN0IGJ0dHZfaXIgKmlyID0gKHN0cnVjdCBidHR2X2lyICopZGF0YTsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAl1bnNpZ25lZCBsb25nIGN1cnJlbnRfamlmZmllcywgdGltZW91dDsKIAl1MzIgZ2FwOwpAQCAtNTE5LDIwICs0NTMsMjAgQEAKIAogCS8qIEFsbG93IHNvbWUgdGltbWVyIGppdHRlciAoUkM1IGlzIH4yNG1zIGFueXdheSBzbyB0aGlzIGlzIG9rKSAqLwogCWlmIChnYXAgPCAyODAwMCkgewotCQlkcHJpbnRrKCJzcHVyaW91cyB0aW1lcl9lbmRcbiIpOworCQlkcHJpbnRrKEtFUk5fV0FSTklORyAic3B1cmlvdXMgdGltZXJfZW5kXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlyLT5hY3RpdmUgPSAwOwogCWlmIChpci0+bGFzdF9iaXQgPCAyMCkgewogCQkvKiBpZ25vcmUgc3B1cmlvdXMgY29kZXMgKGNhdXNlZCBieSBsaWdodC9vdGhlciByZW1vdGVzKSAqLwotCQlkcHJpbnRrKCJzaG9ydCBjb2RlOiAleFxuIiwgaXItPmNvZGUpOworCQlkcHJpbnRrKEtFUk5fV0FSTklORyAic2hvcnQgY29kZTogJXhcbiIsIGlyLT5jb2RlKTsKIAl9IGVsc2UgewogCQl1MzIgcmM1ID0gcmM1X2RlY29kZShpci0+Y29kZSk7CiAKIAkJLyogdHdvIHN0YXJ0IGJpdHM/ICovCiAJCWlmIChSQzVfU1RBUlQocmM1KSAhPSAzKSB7Ci0JCQlkcHJpbnRrKCJyYzUgc3RhcnQgYml0cyBpbnZhbGlkOiAldVxuIiwgUkM1X1NUQVJUKHJjNSkpOworCQkJZHByaW50ayhLRVJOX1dBUk5JTkcgInJjNSBzdGFydCBiaXRzIGludmFsaWQ6ICV1XG4iLCBSQzVfU1RBUlQocmM1KSk7CiAKIAkJCS8qIHJpZ2h0IGFkZHJlc3M/ICovCiAJCX0gZWxzZSBpZiAoUkM1X0FERFIocmM1KSA9PSAweDApIHsKQEAgLTU0MiwxMCArNDc2LDEwIEBACiAJCQkvKiBHb29kIGNvZGUsIGRlY2lkZSBpZiByZXBlYXQvcmVwcmVzcyAqLwogCQkJaWYgKHRvZ2dsZSAhPSBSQzVfVE9HR0xFKGlyLT5sYXN0X3JjNSkgfHwKIAkJCSAgICBpbnN0ciAhPSBSQzVfSU5TVFIoaXItPmxhc3RfcmM1KSkgewotCQkJCWRwcmludGsoImluc3RydWN0aW9uICV4LCB0b2dnbGUgJXhcbiIsIGluc3RyLAorCQkJCWRwcmludGsoS0VSTl9XQVJOSU5HICJpbnN0cnVjdGlvbiAleCwgdG9nZ2xlICV4XG4iLCBpbnN0ciwKIAkJCQkJdG9nZ2xlKTsKLQkJCQlpcl9pbnB1dF9ub2tleShpci0+aW5wdXQsICZpci0+aXIpOwotCQkJCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBpbnN0ciwKKwkJCQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKKwkJCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGluc3RyLAogCQkJCQkJIGluc3RyKTsKIAkJCX0KIApAQCAtNTYwLDM0ICs0OTQsMzcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3JjNV90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBidHR2X3JjNV90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IElSICppciA9IChzdHJ1Y3QgSVIgKilkYXRhOworCXN0cnVjdCBidHR2X2lyICppciA9IChzdHJ1Y3QgYnR0dl9pciAqKWRhdGE7CiAKLQlkcHJpbnRrKCJrZXkgcmVsZWFzZWRcbiIpOwotCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dCwgJmlyLT5pcik7CisJZHByaW50ayhLRVJOX0RFQlVHICJrZXkgcmVsZWFzZWRcbiIpOworCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgaXJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGJ0dHZfaW5wdXRfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KQogewotCXN0cnVjdCBidHR2X3N1Yl9kZXZpY2UgKnN1YiA9IHRvX2J0dHZfc3ViX2RldihkZXYpOwotCXN0cnVjdCBJUiAqaXI7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCBidHR2X2lyICppcjsKIAlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBOVUxMOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAKLQlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOworCWlmICghYnR2LT5oYXNfcmVtb3RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSxHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpIHsKIAkJa2ZyZWUoaXIpOwogCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWVtc2V0KGlyLDAsc2l6ZW9mKCppcikpOwogCiAJLyogZGV0ZWN0ICYgY29uZmlndXJlICovCi0Jc3dpdGNoIChzdWItPmNvcmUtPnR5cGUpIHsKKwlzd2l0Y2ggKGJ0di0+Yy50eXBlKSB7CiAJY2FzZSBCVFRWX0JPQVJEX0FWRVJNRURJQToKIAljYXNlIEJUVFZfQk9BUkRfQVZQSE9ORTk4OgogCWNhc2UgQlRUVl9CT0FSRF9BVkVSTUVESUE5ODoKQEAgLTY0MywxMiArNTgwLDEyIEBACiAJCWJyZWFrOwogCWNhc2UgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX25lYnVsYTsKLQkJZHJpdmVyLmFueV9pcnEgPSBpcl9yYzVfaXJxOwotCQlkcml2ZXIuZ3Bpb19pcnEgPSBOVUxMOworCQlidHYtPmN1c3RvbV9pcnEgPSBidHR2X3JjNV9pcnE7CiAJCWlyLT5yYzVfZ3BpbyA9IDE7CiAJCWJyZWFrOwogCX0KIAlpZiAoTlVMTCA9PSBpcl9jb2RlcykgeworCQlkcHJpbnRrKEtFUk5fSU5GTyAiT29vcHM6IElSIGNvbmZpZyBlcnJvciBbY2FyZD0lZF1cbiIsYnR2LT5jLnR5cGUpOwogCQlrZnJlZShpcik7CiAJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNjU3LDEwOSArNTk0LDkyIEBACiAJaWYgKGlyLT5yYzVfZ3BpbykgewogCQl1MzIgZ3BpbzsKIAkgICAgCS8qIGVuYWJsZSByZW1vdGUgaXJxICovCi0JCWJ0dHZfZ3Bpb19pbm91dChzdWItPmNvcmUsICgxIDw8IDQpLCAxIDw8IDQpOwotCQlncGlvID0gYnR0dl9ncGlvX3JlYWQoc3ViLT5jb3JlKTsKLQkJYnR0dl9ncGlvX3dyaXRlKHN1Yi0+Y29yZSwgZ3BpbyAmIH4oMSA8PCA0KSk7Ci0JCWJ0dHZfZ3Bpb193cml0ZShzdWItPmNvcmUsIGdwaW8gfCAoMSA8PCA0KSk7CisJCWJ0dHZfZ3Bpb19pbm91dCgmYnR2LT5jLCAoMSA8PCA0KSwgMSA8PCA0KTsKKwkJZ3BpbyA9IGJ0dHZfZ3Bpb19yZWFkKCZidHYtPmMpOworCQlidHR2X2dwaW9fd3JpdGUoJmJ0di0+YywgZ3BpbyAmIH4oMSA8PCA0KSk7CisJCWJ0dHZfZ3Bpb193cml0ZSgmYnR2LT5jLCBncGlvIHwgKDEgPDwgNCkpOwogCX0gZWxzZSB7CiAJCS8qIGluaXQgaGFyZHdhcmUtc3BlY2lmaWMgc3R1ZmYgKi8KLQkJYnR0dl9ncGlvX2lub3V0KHN1Yi0+Y29yZSwgaXItPm1hc2tfa2V5Y29kZSB8IGlyLT5tYXNrX2tleWRvd24sIDApOworCQlidHR2X2dwaW9faW5vdXQoJmJ0di0+YywgaXItPm1hc2tfa2V5Y29kZSB8IGlyLT5tYXNrX2tleWRvd24sIDApOwogCX0KIAogCS8qIGluaXQgaW5wdXQgZGV2aWNlICovCisJaXItPmRldiA9IGlucHV0X2RldjsKKwogCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiYnR0diBJUiAoY2FyZD0lZCkiLAotCQkgc3ViLT5jb3JlLT50eXBlKTsKKwkJIGJ0di0+Yy50eXBlKTsKIAlzbnByaW50Zihpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSwgInBjaS0lcy9pcjAiLAotCQkgcGNpX25hbWUoc3ViLT5jb3JlLT5wY2kpKTsKKwkJIHBjaV9uYW1lKGJ0di0+Yy5wY2kpKTsKIAogCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlLCBpcl9jb2Rlcyk7CiAJaW5wdXRfZGV2LT5uYW1lID0gaXItPm5hbWU7CiAJaW5wdXRfZGV2LT5waHlzID0gaXItPnBoeXM7CiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1BDSTsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAxOwotCWlmIChzdWItPmNvcmUtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcikgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBzdWItPmNvcmUtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKLQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gc3ViLT5jb3JlLT5wY2ktPnN1YnN5c3RlbV9kZXZpY2U7CisJaWYgKGJ0di0+Yy5wY2ktPnN1YnN5c3RlbV92ZW5kb3IpIHsKKwkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgID0gYnR2LT5jLnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKKwkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gYnR2LT5jLnBjaS0+c3Vic3lzdGVtX2RldmljZTsKIAl9IGVsc2UgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBzdWItPmNvcmUtPnBjaS0+dmVuZG9yOwotCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBzdWItPmNvcmUtPnBjaS0+ZGV2aWNlOworCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBidHYtPmMucGNpLT52ZW5kb3I7CisJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGJ0di0+Yy5wY2ktPmRldmljZTsKIAl9Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZzdWItPmNvcmUtPnBjaS0+ZGV2OworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmYnR2LT5jLnBjaS0+ZGV2OwogCi0JaXItPmlucHV0ID0gaW5wdXRfZGV2OwotCWlyLT5zdWIgPSBzdWI7Ci0KKwlidHYtPnJlbW90ZSA9IGlyOwogCWlmIChpci0+cG9sbGluZykgewotCQlJTklUX1dPUksoJmlyLT53b3JrLCBpcl93b3JrLCBpcik7CiAJCWluaXRfdGltZXIoJmlyLT50aW1lcik7Ci0JCWlyLT50aW1lci5mdW5jdGlvbiA9IGlyX3RpbWVyOwotCQlpci0+dGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylpcjsKLQkJc2NoZWR1bGVfd29yaygmaXItPndvcmspOworCQlpci0+dGltZXIuZnVuY3Rpb24gPSBidHR2X2lucHV0X3RpbWVyOworCQlpci0+dGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylidHY7CisJCWlyLT50aW1lci5leHBpcmVzICA9IGppZmZpZXMgKyBIWjsKKwkJYWRkX3RpbWVyKCZpci0+dGltZXIpOwogCX0gZWxzZSBpZiAoaXItPnJjNV9ncGlvKSB7CiAJCS8qIHNldCB0aW1lcl9lbmQgZm9yIGNvZGUgY29tcGxldGlvbiAqLwogCQlpbml0X3RpbWVyKCZpci0+dGltZXJfZW5kKTsKLQkJaXItPnRpbWVyX2VuZC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9lbmQ7CisJCWlyLT50aW1lcl9lbmQuZnVuY3Rpb24gPSBidHR2X3JjNV90aW1lcl9lbmQ7CiAJCWlyLT50aW1lcl9lbmQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlyOwogCiAJCWluaXRfdGltZXIoJmlyLT50aW1lcl9rZXl1cCk7Ci0JCWlyLT50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9rZXl1cDsKKwkJaXItPnRpbWVyX2tleXVwLmZ1bmN0aW9uID0gYnR0dl9yYzVfdGltZXJfa2V5dXA7CiAJCWlyLT50aW1lcl9rZXl1cC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaXI7CiAJfQogCiAJLyogYWxsIGRvbmUgKi8KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpcik7Ci0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGJ0di0+cmVtb3RlLT5kZXYpOworCXByaW50ayhERVZOQU1FICI6ICVzIGRldGVjdGVkIGF0ICVzXG4iLGlyLT5uYW1lLGlyLT5waHlzKTsKIAogCS8qIHRoZSByZW1vdGUgaXNuJ3QgYXMgYm91bmN5IGFzIGEga2V5Ym9hcmQgKi8KLQlpci0+aW5wdXQtPnJlcFtSRVBfREVMQVldID0gcmVwZWF0X2RlbGF5OwotCWlyLT5pbnB1dC0+cmVwW1JFUF9QRVJJT0RdID0gcmVwZWF0X3BlcmlvZDsKKwlpci0+ZGV2LT5yZXBbUkVQX0RFTEFZXSA9IHJlcGVhdF9kZWxheTsKKwlpci0+ZGV2LT5yZXBbUkVQX1BFUklPRF0gPSByZXBlYXRfcGVyaW9kOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3ZvaWQgYnR0dl9pbnB1dF9maW5pKHN0cnVjdCBidHR2ICpidHYpCiB7Ci0Jc3RydWN0IElSICppciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChidHYtPnJlbW90ZSA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQlpZiAoaXItPnBvbGxpbmcpIHsKLQkJZGVsX3RpbWVyKCZpci0+dGltZXIpOworCWlmIChidHYtPnJlbW90ZS0+cG9sbGluZykgeworCQlkZWxfdGltZXJfc3luYygmYnR2LT5yZW1vdGUtPnRpbWVyKTsKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAl9CiAKLQlpZiAoaXItPnJjNV9ncGlvKSB7CisKKwlpZiAoYnR2LT5yZW1vdGUtPnJjNV9ncGlvKSB7CiAJCXUzMiBncGlvOwogCi0JCWRlbF90aW1lcigmaXItPnRpbWVyX2VuZCk7CisJCWRlbF90aW1lcl9zeW5jKCZidHYtPnJlbW90ZS0+dGltZXJfZW5kKTsKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCQlncGlvID0gYnR0dl9ncGlvX3JlYWQoaXItPnN1Yi0+Y29yZSk7Ci0JCWJ0dHZfZ3Bpb193cml0ZShpci0+c3ViLT5jb3JlLCBncGlvICYgfigxIDw8IDQpKTsKKwkJZ3BpbyA9IGJ0dHZfZ3Bpb19yZWFkKCZidHYtPmMpOworCQlidHR2X2dwaW9fd3JpdGUoJmJ0di0+YywgZ3BpbyAmIH4oMSA8PCA0KSk7CiAJfQogCi0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKLQlrZnJlZShpcik7Ci0JcmV0dXJuIDA7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYnR2LT5yZW1vdGUtPmRldik7CisJa2ZyZWUoYnR2LT5yZW1vdGUpOworCWJ0di0+cmVtb3RlID0gTlVMTDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1NT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyLCBQYXZlbCBNYWNoZWsiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiaW5wdXQgZHJpdmVyIGZvciBidDh4OCBncGlvIElSIHJlbW90ZSBjb250cm9scyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IGlyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gYnR0dl9zdWJfcmVnaXN0ZXIoJmRyaXZlciwgInJlbW90ZSIpOwotfQotCi1zdGF0aWMgdm9pZCBpcl9maW5pKHZvaWQpCi17Ci0JYnR0dl9zdWJfdW5yZWdpc3RlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaXJfaW5pdCk7Ci1tb2R1bGVfZXhpdChpcl9maW5pKTsKLQogCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LXZiaS5jCmluZGV4IGY0ZjU4YzYuLjcyYWZkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtdmJpLmMKQEAgLTMxLDYgKzMxLDEyIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAiYnR0dnAuaCIKIAorLyogT2Zmc2V0IGZyb20gbGluZSBzeW5jIHB1bHNlIGxlYWRpbmcgZWRnZSAoMEgpIGluIDEgLyBzYW1wbGluZ19yYXRlOgorICAgYnQ4eDggL0hSRVNFVCBwdWxzZSBzdGFydHMgYXQgMEggYW5kIGhhcyBsZW5ndGggNjQgLyBmQ0xLeDEgKEV8T19WVEMKKyAgIEhTRk1UID0gMCkuIFZCSV9IREVMQVkgKGFsd2F5cyAwKSBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgdHJhaWxpbmcgZWRnZQorICAgb2YgL0hSRVNFVCBpbiAxIC8gZkNMS3gxLCBhbmQgdGhlIHNhbXBsaW5nX3JhdGUgdHZub3JtLT5Gc2MgaXMgZkNMS3gyLiAqLworI2RlZmluZSBWQklfT0ZGU0VUICgoNjQgKyAwKSAqIDIpCisKICNkZWZpbmUgVkJJX0RFRkxJTkVTIDE2CiAjZGVmaW5lIFZCSV9NQVhMSU5FUyAzMgogCkBAIC0xNjMsNDAgKzE2OSwzMCBAQAogdm9pZCBidHR2X3ZiaV90cnlfZm10KHN0cnVjdCBidHR2X2ZoICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtOwotCXUzMiBzdGFydDAsc3RhcnQxOwotCXMzMiBjb3VudDAsY291bnQxLGNvdW50OworCXM2NCBjb3VudDAsY291bnQxLGNvdW50OwogCiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tmaC0+YnR2LT50dm5vcm1dOwogCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCWYtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSAgICA9IHR2bm9ybS0+RnNjOwogCWYtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDIwNDg7CiAJZi0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ICAgID0gVjRMMl9QSVhfRk1UX0dSRVk7Ci0JZi0+Zm10LnZiaS5vZmZzZXQgICAgICAgICAgID0gMjQ0OworCWYtPmZtdC52Ymkub2Zmc2V0ICAgICAgICAgICA9IFZCSV9PRkZTRVQ7CiAJZi0+Zm10LnZiaS5mbGFncyAgICAgICAgICAgID0gMDsKLQlzd2l0Y2ggKGZoLT5idHYtPnR2bm9ybSkgewotCWNhc2UgMTogLyogTlRTQyAqLwotCQlzdGFydDAgPSAxMDsKLQkJc3RhcnQxID0gMjczOwotCQlicmVhazsKLQljYXNlIDA6IC8qIFBBTCAqLwotCWNhc2UgMjogLyogU0VDQU0gKi8KLQlkZWZhdWx0OgotCQlzdGFydDAgPSA3OwotCQlzdGFydDEgPSAzMjA7Ci0JfQogCi0JY291bnQwID0gKGYtPmZtdC52Ymkuc3RhcnRbMF0gKyBmLT5mbXQudmJpLmNvdW50WzBdKSAtIHN0YXJ0MDsKLQljb3VudDEgPSAoZi0+Zm10LnZiaS5zdGFydFsxXSArIGYtPmZtdC52YmkuY291bnRbMV0pIC0gc3RhcnQxOwotCWNvdW50ICA9IG1heChjb3VudDAsY291bnQxKTsKLQlpZiAoY291bnQgPiBWQklfTUFYTElORVMpCi0JCWNvdW50ID0gVkJJX01BWExJTkVTOwotCWlmIChjb3VudCA8IDEpCi0JCWNvdW50ID0gMTsKKwkvKiBzNjQgdG8gcHJldmVudCBvdmVyZmxvdy4gKi8KKwljb3VudDAgPSAoczY0KSBmLT5mbXQudmJpLnN0YXJ0WzBdICsgZi0+Zm10LnZiaS5jb3VudFswXQorCQktIHR2bm9ybS0+dmJpc3RhcnRbMF07CisJY291bnQxID0gKHM2NCkgZi0+Zm10LnZiaS5zdGFydFsxXSArIGYtPmZtdC52YmkuY291bnRbMV0KKwkJLSB0dm5vcm0tPnZiaXN0YXJ0WzFdOworCWNvdW50ICA9IGNsYW1wIChtYXggKGNvdW50MCwgY291bnQxKSwgMUxMLCAoczY0KSBWQklfTUFYTElORVMpOwogCi0JZi0+Zm10LnZiaS5zdGFydFswXSA9IHN0YXJ0MDsKLQlmLT5mbXQudmJpLnN0YXJ0WzFdID0gc3RhcnQxOworCWYtPmZtdC52Ymkuc3RhcnRbMF0gPSB0dm5vcm0tPnZiaXN0YXJ0WzBdOworCWYtPmZtdC52Ymkuc3RhcnRbMV0gPSB0dm5vcm0tPnZiaXN0YXJ0WzFdOwogCWYtPmZtdC52YmkuY291bnRbMF0gPSBjb3VudDsKIAlmLT5mbXQudmJpLmNvdW50WzFdID0gY291bnQ7CisKKwlmLT5mbXQudmJpLnJlc2VydmVkWzBdID0gMDsKKwlmLT5mbXQudmJpLnJlc2VydmVkWzFdID0gMDsKIH0KIAogdm9pZCBidHR2X3ZiaV9nZXRfZm10KHN0cnVjdCBidHR2X2ZoICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQpAQCAtMjA5LDIxICsyMDUsMTIgQEAKIAlmLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgPSB0dm5vcm0tPkZzYzsKIAlmLT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSAyMDQ4OwogCWYtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCAgICA9IFY0TDJfUElYX0ZNVF9HUkVZOwotCWYtPmZtdC52Ymkub2Zmc2V0ICAgICAgICAgICA9IDI0NDsKKwlmLT5mbXQudmJpLm9mZnNldCAgICAgICAgICAgPSBWQklfT0ZGU0VUOworCWYtPmZtdC52Ymkuc3RhcnRbMF0gICAgICAgICA9IHR2bm9ybS0+dmJpc3RhcnRbMF07CisJZi0+Zm10LnZiaS5zdGFydFsxXSAgICAgICAgID0gdHZub3JtLT52YmlzdGFydFsxXTsKIAlmLT5mbXQudmJpLmNvdW50WzBdICAgICAgICAgPSBmaC0+bGluZXM7CiAJZi0+Zm10LnZiaS5jb3VudFsxXSAgICAgICAgID0gZmgtPmxpbmVzOwogCWYtPmZtdC52YmkuZmxhZ3MgICAgICAgICAgICA9IDA7Ci0Jc3dpdGNoIChmaC0+YnR2LT50dm5vcm0pIHsKLQljYXNlIDE6IC8qIE5UU0MgKi8KLQkJZi0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCQlmLT5mbXQudmJpLnN0YXJ0WzFdID0gMjczOwotCQlicmVhazsKLQljYXNlIDA6IC8qIFBBTCAqLwotCWNhc2UgMjogLyogU0VDQU0gKi8KLQlkZWZhdWx0OgotCQlmLT5mbXQudmJpLnN0YXJ0WzBdID0gNzsKLQkJZi0+Zm10LnZiaS5zdGFydFsxXSA9IDMxOTsKLQl9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCmluZGV4IDkzMjk4ZjAuLjlmZWFhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCkBAIC0xNiw2ICsxNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZXhwb3J0ZWQgYnkgYnR0di1jYXJkcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTYzLDYgKzE2NSw3IEBACiAjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZNDQwICAgICAgICAgICAgICAgMHg4YwogI2RlZmluZSBCVFRWX0JPQVJEX0FTT1VORF9TS1lFWUUJICAgMHg4ZAogI2RlZmluZSBCVFRWX0JPQVJEX1NBQlJFTlRfVFZGTSAgIAkgICAweDhlCisjZGVmaW5lIEJUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQiAgICAgMHg4ZgogCiAvKiBpMmMgYWRkcmVzcyBsaXN0ICovCiAjZGVmaW5lIEkyQ19UU0E1NTIyICAgICAgICAweGMyCkBAIC0yMTAsNiArMjEzLDM0IEBACiAKIHN0cnVjdCBidHR2OwogCisKK3N0cnVjdCBidHR2X2lyIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICAgICAgICAqZGV2OworCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAgIGlyOworCWNoYXIgICAgICAgICAgICAgICAgICAgIG5hbWVbMzJdOworCWNoYXIgICAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOworCisJLyogVXN1YWwgZ3BpbyBzaWduYWxsaW5nICovCisKKwl1MzIgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleWNvZGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgbWFza19rZXlkb3duOworCXUzMiAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5dXA7CisJdTMyICAgICAgICAgICAgICAgICAgICAgcG9sbGluZzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBsYXN0X2dwaW87CisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICB0aW1lcjsKKworCS8qIFJDNSBncGlvICovCisJdTMyIHJjNV9ncGlvOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyX2VuZDsJLyogdGltZXJfZW5kIGZvciBjb2RlIGNvbXBsZXRpb24gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcl9rZXl1cDsJLyogdGltZXJfZW5kIGZvciBrZXkgcmVsZWFzZSAqLworCXUzMiBsYXN0X3JjNTsJCQkvKiBsYXN0IGdvb2QgcmM1IGNvZGUgKi8KKwl1MzIgbGFzdF9iaXQ7CQkJLyogbGFzdCByYXcgYml0IHNlZW4gKi8KKwl1MzIgY29kZTsJCQkvKiByYXcgY29kZSB1bmRlciBjb25zdHJ1Y3Rpb24gKi8KKwlzdHJ1Y3QgdGltZXZhbCBiYXNlX3RpbWU7CS8qIHRpbWUgb2YgbGFzdCBzZWVuIGNvZGUgKi8KKwlpbnQgYWN0aXZlOwkJCS8qIGJ1aWxkaW5nIHJhdyBjb2RlICovCit9OworCiBzdHJ1Y3QgdHZjYXJkCiB7CiAJY2hhciAqbmFtZTsKQEAgLTIzNSw3ICsyNjYsNiBAQAogCXVuc2lnbmVkIGludCBoYXNfZHZiOjE7CiAJdW5zaWduZWQgaW50IGhhc19yZW1vdGU6MTsKIAl1bnNpZ25lZCBpbnQgbm9fZ3Bpb2lycToxOwotCXVuc2lnbmVkIGludCBhbnlfaXJxOjE7CiAKIAkvKiBvdGhlciBzZXR0aW5ncyAqLwogCXVuc2lnbmVkIGludCBwbGw7CkBAIC0zMzUsNyArMzY1LDYgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAgIGRydjsKIAljaGFyICAgICAgICAgICAgICAgICAgIHdhbnRlZFtCVVNfSURfU0laRV07CiAJdm9pZCAgICAgICAgICAgICAgICAgICAoKmdwaW9faXJxKShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpOwotCWludCAgICAgICAgICAgICAgICAgICAgKCphbnlfaXJxKShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpOwogfTsKICNkZWZpbmUgdG9fYnR0dl9zdWJfZHJ2KHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBidHR2X3N1Yl9kcml2ZXIsIGRydikKIApAQCAtMzYzLDYgKzM5MiwxMCBAQAogCQkJIHVuc2lnbmVkIGNoYXIgYjIsIGludCBib3RoKTsKIGV4dGVybiB2b2lkIGJ0dHZfcmVhZGVlKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgKmVlZGF0YSwgaW50IGFkZHIpOwogCitleHRlcm4gaW50IGJ0dHZfaW5wdXRfaW5pdChzdHJ1Y3QgYnR0diAqZGV2KTsKK2V4dGVybiB2b2lkIGJ0dHZfaW5wdXRfZmluaShzdHJ1Y3QgYnR0diAqZGV2KTsKK2V4dGVybiB2b2lkIGJ0dHZfaW5wdXRfaXJxKHN0cnVjdCBidHR2ICpkZXYpOworCiAjZW5kaWYgLyogX0JUVFZfSF8gKi8KIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmgKaW5kZXggMWU2YTU2My4uZGQwMGMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaApAQCAtNzMsNiArNzMsOCBAQAogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKKyNkZWZpbmUgY2xhbXAoeCwgbG93LCBoaWdoKSBtaW4gKG1heCAobG93LCB4KSwgaGlnaCkKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnR0dl90dm5vcm0gewpAQCAtODgsNiArOTAsOSBAQAogCXU4ICAgIHZiaXBhY2s7CiAJdTE2ICAgdnRvdGFsOwogCWludCAgIHNyYW07CisJLyogSVRVLVIgZnJhbWUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0IFZCSSBsaW5lIHdlIGNhbgorCSAgIGNhcHR1cmUsIG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGZpZWxkLiAqLworCXUxNiAgIHZiaXN0YXJ0WzJdOwogfTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gYnR0dl90dm5vcm1zW107CiAKQEAgLTIwOSw3ICsyMTQsNiBAQAogaW50IGJ0dHZfc3ViX2FkZF9kZXZpY2Uoc3RydWN0IGJ0dHZfY29yZSAqY29yZSwgY2hhciAqbmFtZSk7CiBpbnQgYnR0dl9zdWJfZGVsX2RldmljZXMoc3RydWN0IGJ0dHZfY29yZSAqY29yZSk7CiB2b2lkIGJ0dHZfZ3Bpb19pcnEoc3RydWN0IGJ0dHZfY29yZSAqY29yZSk7Ci1pbnQgYnR0dl9hbnlfaXJxKHN0cnVjdCBidHR2X2NvcmUgKmNvcmUpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI3MCwxMiArMjc0LDEzIEBACiAJLyogY2FyZCBjb25maWd1cmF0aW9uIGluZm8gKi8KIAl1bnNpZ25lZCBpbnQgY2FyZGlkOyAgIC8qIHBjaSBzdWJzeXN0ZW0gaWQgKGJ0ODc4IGJhc2VkIG9uZXMpICovCiAJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7ICAvKiB0dW5lciBjaGlwIHR5cGUgKi8KLQl1bnNpZ25lZCBpbnQgcGlubmFjbGVfaWQ7CisJdW5zaWduZWQgaW50IHRkYTk4ODdfY29uZjsKIAl1bnNpZ25lZCBpbnQgc3ZoczsKIAlzdHJ1Y3QgYnR0dl9wbGxfaW5mbyBwbGw7CiAJaW50IHRyaXRvbjE7CiAJaW50IGdwaW9pcnE7Ci0JaW50IGFueV9pcnE7CisJaW50ICgqY3VzdG9tX2lycSkoc3RydWN0IGJ0dHYgKmJ0dik7CisKIAlpbnQgdXNlX2kyY19odzsKIAogCS8qIG9sZCBncGlvIGludGVyZmFjZSAqLwpAQCAtMzAwLDcgKzMwNSw3IEBACiAKIAkvKiBpbmZyYXJlZCByZW1vdGUgKi8KIAlpbnQgaGFzX3JlbW90ZTsKLQlzdHJ1Y3QgYnR0dl9pbnB1dCAqcmVtb3RlOworCXN0cnVjdCBidHR2X2lyICpyZW1vdGU7CiAKIAkvKiBsb2NraW5nICovCiAJc3BpbmxvY2tfdCBzX2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCmluZGV4IDAwNjVkMGMuLjZiYWQ5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCkBAIC04NzUsNiArODc1LDcgQEAKIAkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKIAkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSBxY2FtX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQJCT0gcWNhbV9yZWFkLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYwppbmRleCA3NTQ0MmVjLi45OTc2ZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKQEAgLTY4Nyw2ICs2ODcsNyBAQAogCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAogCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHFjYW1faW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkucmVhZAkJPSBxY2FtX3JlYWQsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTk0YjAxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCkBAIC0wLDAgKzEsNzMyIEBACisvKgorICogaW9jdGwzMi5jOiBDb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0IG5hdGl2ZSBpb2N0bHMuCisgKglTZXBhcmF0ZWQgZnJvbSBmcyBzdHVmZiBieSBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwICBKYWt1YiBKZWxpbmVrICAoamFrdWJAcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiAgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEBzdXNlLmN6KQorICogQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBtYWNxZWwuYmUpCisgKgorICogVGhlc2Ugcm91dGluZXMgbWFpbnRhaW4gYXJndW1lbnQgc2l6ZSBjb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0CisgKiBpb2N0bHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCB2aWRlb190dW5lcjMyIHsKKwljb21wYXRfaW50X3QgdHVuZXI7CisJY2hhciBuYW1lWzMyXTsKKwljb21wYXRfdWxvbmdfdCByYW5nZWxvdywgcmFuZ2VoaWdoOworCXUzMiBmbGFnczsJLyogSXQgaXMgcmVhbGx5IHUzMiBpbiB2aWRlb2Rldi5oICovCisJdTE2IG1vZGUsIHNpZ25hbDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3ZpZGVvX3R1bmVyMzIoc3RydWN0IHZpZGVvX3R1bmVyICprcCwgc3RydWN0IHZpZGVvX3R1bmVyMzIgX191c2VyICp1cCkKK3sKKwlpZihnZXRfdXNlcihrcC0+dHVuZXIsICZ1cC0+dHVuZXIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlfX2NvcHlfZnJvbV91c2VyKGtwLT5uYW1lLCB1cC0+bmFtZSwgMzIpOworCV9fZ2V0X3VzZXIoa3AtPnJhbmdlbG93LCAmdXAtPnJhbmdlbG93KTsKKwlfX2dldF91c2VyKGtwLT5yYW5nZWhpZ2gsICZ1cC0+cmFuZ2VoaWdoKTsKKwlfX2dldF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncyk7CisJX19nZXRfdXNlcihrcC0+bW9kZSwgJnVwLT5tb2RlKTsKKwlfX2dldF91c2VyKGtwLT5zaWduYWwsICZ1cC0+c2lnbmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdmlkZW9fdHVuZXIzMihzdHJ1Y3QgdmlkZW9fdHVuZXIgKmtwLCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMiBfX3VzZXIgKnVwKQoreworCWlmKHB1dF91c2VyKGtwLT50dW5lciwgJnVwLT50dW5lcikpCisJCXJldHVybiAtRUZBVUxUOworCV9fY29weV90b191c2VyKHVwLT5uYW1lLCBrcC0+bmFtZSwgMzIpOworCV9fcHV0X3VzZXIoa3AtPnJhbmdlbG93LCAmdXAtPnJhbmdlbG93KTsKKwlfX3B1dF91c2VyKGtwLT5yYW5nZWhpZ2gsICZ1cC0+cmFuZ2VoaWdoKTsKKwlfX3B1dF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncyk7CisJX19wdXRfdXNlcihrcC0+bW9kZSwgJnVwLT5tb2RlKTsKKwlfX3B1dF91c2VyKGtwLT5zaWduYWwsICZ1cC0+c2lnbmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHZpZGVvX2J1ZmZlcjMyIHsKKwljb21wYXRfY2FkZHJfdCBiYXNlOworCWNvbXBhdF9pbnRfdCBoZWlnaHQsIHdpZHRoLCBkZXB0aCwgYnl0ZXNwZXJsaW5lOworfTsKKworc3RhdGljIGludCBnZXRfdmlkZW9fYnVmZmVyMzIoc3RydWN0IHZpZGVvX2J1ZmZlciAqa3AsIHN0cnVjdCB2aWRlb19idWZmZXIzMiBfX3VzZXIgKnVwKQoreworCXUzMiB0bXA7CisKKwlpZiAoZ2V0X3VzZXIodG1wLCAmdXAtPmJhc2UpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFRoaXMgaXMgYWN0dWFsbHkgYSBwaHlzaWNhbCBhZGRyZXNzIHN0b3JlZAorCSAqIGFzIGEgdm9pZCBwb2ludGVyLgorCSAqLworCWtwLT5iYXNlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgdG1wOworCisJX19nZXRfdXNlcihrcC0+aGVpZ2h0LCAmdXAtPmhlaWdodCk7CisJX19nZXRfdXNlcihrcC0+d2lkdGgsICZ1cC0+d2lkdGgpOworCV9fZ2V0X3VzZXIoa3AtPmRlcHRoLCAmdXAtPmRlcHRoKTsKKwlfX2dldF91c2VyKGtwLT5ieXRlc3BlcmxpbmUsICZ1cC0+Ynl0ZXNwZXJsaW5lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdmlkZW9fYnVmZmVyMzIoc3RydWN0IHZpZGVvX2J1ZmZlciAqa3AsIHN0cnVjdCB2aWRlb19idWZmZXIzMiBfX3VzZXIgKnVwKQoreworCXUzMiB0bXAgPSAodTMyKSgodW5zaWduZWQgbG9uZylrcC0+YmFzZSk7CisKKwlpZihwdXRfdXNlcih0bXAsICZ1cC0+YmFzZSkpCisJCXJldHVybiAtRUZBVUxUOworCV9fcHV0X3VzZXIoa3AtPmhlaWdodCwgJnVwLT5oZWlnaHQpOworCV9fcHV0X3VzZXIoa3AtPndpZHRoLCAmdXAtPndpZHRoKTsKKwlfX3B1dF91c2VyKGtwLT5kZXB0aCwgJnVwLT5kZXB0aCk7CisJX19wdXRfdXNlcihrcC0+Ynl0ZXNwZXJsaW5lLCAmdXAtPmJ5dGVzcGVybGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2aWRlb19jbGlwMzIgeworCXMzMiB4LCB5LCB3aWR0aCwgaGVpZ2h0OwkvKiBJdHMgcmVhbGx5IHMzMiBpbiB2aWRlb2Rldi5oICovCisJY29tcGF0X2NhZGRyX3QgbmV4dDsKK307CisKK3N0cnVjdCB2aWRlb193aW5kb3czMiB7CisJdTMyIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNocm9tYWtleSwgZmxhZ3M7CisJY29tcGF0X2NhZGRyX3QgY2xpcHM7CisJY29tcGF0X2ludF90IGNsaXBjb3VudDsKK307CisKK3N0YXRpYyBpbnQgbmF0aXZlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCisJaWYgKGZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKQorCQlyZXQgPSBmaWxlLT5mX29wLT51bmxvY2tlZF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7CisJZWxzZSBpZiAoZmlsZS0+Zl9vcC0+aW9jdGwpIHsKKwkJbG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZmlsZS0+Zl9vcC0+aW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJdW5sb2NrX2tlcm5lbCgpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKworLyogWW91IGdldCBiYWNrIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjbGlwcy4uLiAqLworc3RhdGljIGludCBwdXRfdmlkZW9fd2luZG93MzIoc3RydWN0IHZpZGVvX3dpbmRvdyAqa3AsIHN0cnVjdCB2aWRlb193aW5kb3czMiBfX3VzZXIgKnVwKQoreworCWlmKHB1dF91c2VyKGtwLT54LCAmdXAtPngpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlfX3B1dF91c2VyKGtwLT55LCAmdXAtPnkpOworCV9fcHV0X3VzZXIoa3AtPndpZHRoLCAmdXAtPndpZHRoKTsKKwlfX3B1dF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KTsKKwlfX3B1dF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KTsKKwlfX3B1dF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncyk7CisJX19wdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2NGwyX2NsaXAzMgoreworCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgIGM7CisJY29tcGF0X2NhZGRyX3QgCQluZXh0OworfTsKKworc3RydWN0IHY0bDJfd2luZG93MzIKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICB3OworCWVudW0gdjRsMl9maWVsZCAgCWZpZWxkOworCV9fdTMyCQkJY2hyb21ha2V5OworCWNvbXBhdF9jYWRkcl90CQljbGlwczsgLyogYWN0dWFsbHkgc3RydWN0IHY0bDJfY2xpcDMyICogKi8KKwlfX3UzMgkJCWNsaXBjb3VudDsKKwljb21wYXRfY2FkZHJfdAkJYml0bWFwOworfTsKKworc3RhdGljIGludCBnZXRfdjRsMl93aW5kb3czMihzdHJ1Y3QgdjRsMl93aW5kb3cgKmtwLCBzdHJ1Y3QgdjRsMl93aW5kb3czMiBfX3VzZXIgKnVwKQoreworCWlmIChjb3B5X2Zyb21fdXNlcigma3AtPncsICZ1cC0+dywgc2l6ZW9mKHVwLT53KSkpCisJCXJldHVybiAtRUZBVUxUOworCV9fZ2V0X3VzZXIoa3AtPmZpZWxkLCAmdXAtPmZpZWxkKTsKKwlfX2dldF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KTsKKwlfX2dldF91c2VyKGtwLT5jbGlwY291bnQsICZ1cC0+Y2xpcGNvdW50KTsKKwlpZiAoa3AtPmNsaXBjb3VudCA+IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChrcC0+Y2xpcGNvdW50KSB7CisJCXN0cnVjdCB2NGwyX2NsaXAzMiAqdWNsaXBzID0gY29tcGF0X3B0cih1cC0+Y2xpcHMpOworCQlzdHJ1Y3QgdjRsMl9jbGlwICprY2xpcHM7CisJCWludCBuID0ga3AtPmNsaXBjb3VudDsKKworCQlrY2xpcHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuICogc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApKTsKKwkJa3AtPmNsaXBzID0ga2NsaXBzOworCQl3aGlsZSAoLS1uID49IDApIHsKKwkJCWNvcHlfZnJvbV91c2VyKCZrY2xpcHMtPmMsICZ1Y2xpcHMtPmMsIHNpemVvZih1Y2xpcHMtPmMpKTsKKwkJCWtjbGlwcy0+bmV4dCA9IG4gPyBrY2xpcHMgKyAxIDogMDsKKwkJCXVjbGlwcyArPSAxOworCQkJa2NsaXBzICs9IDE7CisJCX0KKwl9IGVsc2UKKwkJa3AtPmNsaXBzID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdjRsMl93aW5kb3czMihzdHJ1Y3QgdjRsMl93aW5kb3cgKmtwLCBzdHJ1Y3QgdjRsMl93aW5kb3czMiBfX3VzZXIgKnVwKQoreworCWlmIChjb3B5X3RvX3VzZXIoJnVwLT53LCAma3AtPncsIHNpemVvZih1cC0+dykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlfX3B1dF91c2VyKGtwLT5maWVsZCwgJnVwLT5maWVsZCk7CisJX19wdXRfdXNlcihrcC0+Y2hyb21ha2V5LCAmdXAtPmNocm9tYWtleSk7CisJX19wdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF92NGwyX3BpeF9mb3JtYXQoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgX191c2VyICp1cCkKK3sKKwlyZXR1cm4gY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdXRfdjRsMl9waXhfZm9ybWF0KHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IF9fdXNlciAqdXApCit7CisJcmV0dXJuIGNvcHlfdG9fdXNlcih1cCwga3AsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF92NGwyX3ZiaV9mb3JtYXQoc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgX191c2VyICp1cCkKK3sKKwlyZXR1cm4gY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdXRfdjRsMl92YmlfZm9ybWF0KHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0IF9fdXNlciAqdXApCit7CisJcmV0dXJuIGNvcHlfdG9fdXNlcih1cCwga3AsIHNpemVvZihzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0KSk7Cit9CisKK3N0cnVjdCB2NGwyX2Zvcm1hdDMyCit7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisJdW5pb24KKwl7CisJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQJcGl4OyAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCisJCXN0cnVjdCB2NGwyX3dpbmRvdzMyCXdpbjsgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWQorCQlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0CXZiaTsgIC8vIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUKKwkJX191OAlyYXdfZGF0YVsyMDBdOyAgICAgICAgLy8gdXNlci1kZWZpbmVkCisJfSBmbXQ7Cit9OworCitzdGF0aWMgaW50IGdldF92NGwyX2Zvcm1hdDMyKHN0cnVjdCB2NGwyX2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyIF9fdXNlciAqdXApCit7CisJaWYoZ2V0X3VzZXIoa3AtPnR5cGUsICZ1cC0+dHlwZSkpCisJCXJldHVybiAtRUZBVUxUOworCXN3aXRjaCAoa3AtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJcmV0dXJuIGdldF92NGwyX3BpeF9mb3JtYXQoJmtwLT5mbXQucGl4LCAmdXAtPmZtdC5waXgpOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgorCQlyZXR1cm4gZ2V0X3Y0bDJfd2luZG93MzIoJmtwLT5mbXQud2luLCAmdXAtPmZtdC53aW4pOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKKwkJcmV0dXJuIGdldF92NGwyX3ZiaV9mb3JtYXQoJmtwLT5mbXQudmJpLCAmdXAtPmZtdC52YmkpOworCWRlZmF1bHQ6CisJCXByaW50aygiY29tcGF0X2lvY3RsIDogdW5leHBlY3RlZCBWSURJT0NfRk1UIHR5cGUgJWRcbiIsCisJCQkJCQkJCWtwLT50eXBlKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHV0X3Y0bDJfZm9ybWF0MzIoc3RydWN0IHY0bDJfZm9ybWF0ICprcCwgc3RydWN0IHY0bDJfZm9ybWF0MzIgX191c2VyICp1cCkKK3sKKwlpZihwdXRfdXNlcihrcC0+dHlwZSwgJnVwLT50eXBlKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc3dpdGNoIChrcC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlyZXR1cm4gcHV0X3Y0bDJfcGl4X2Zvcm1hdCgma3AtPmZtdC5waXgsICZ1cC0+Zm10LnBpeCk7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6CisJCXJldHVybiBwdXRfdjRsMl93aW5kb3czMigma3AtPmZtdC53aW4sICZ1cC0+Zm10Lndpbik7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgorCQlyZXR1cm4gcHV0X3Y0bDJfdmJpX2Zvcm1hdCgma3AtPmZtdC52YmksICZ1cC0+Zm10LnZiaSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9Cit9CisKK3N0cnVjdCB2NGwyX3N0YW5kYXJkMzIKK3sKKwlfX3UzMgkJICAgICBpbmRleDsKKwlfX3UzMgkJICAgICBpZFsyXTsgLyogX191NjQgd291bGQgZ2V0IHRoZSBhbGlnbm1lbnQgd3JvbmcgKi8KKwlfX3U4CQkgICAgIG5hbWVbMjRdOworCXN0cnVjdCB2NGwyX2ZyYWN0ICAgIGZyYW1lcGVyaW9kOyAvKiBGcmFtZXMsIG5vdCBmaWVsZHMgKi8KKwlfX3UzMgkJICAgICBmcmFtZWxpbmVzOworCV9fdTMyCQkgICAgIHJlc2VydmVkWzRdOworfTsKKworc3RhdGljIGludCBnZXRfdjRsMl9zdGFuZGFyZDMyKHN0cnVjdCB2NGwyX3N0YW5kYXJkICprcCwgc3RydWN0IHY0bDJfc3RhbmRhcmQzMiBfX3VzZXIgKnVwKQoreworCS8qIG90aGVyIGZpZWxkcyBhcmUgbm90IHNldCBieSB0aGUgdXNlciwgbm9yIHVzZWQgYnkgdGhlIGRyaXZlciAqLworCXJldHVybiBnZXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpOworfQorCitzdGF0aWMgaW50IHB1dF92NGwyX3N0YW5kYXJkMzIoc3RydWN0IHY0bDJfc3RhbmRhcmQgKmtwLCBzdHJ1Y3QgdjRsMl9zdGFuZGFyZDMyIF9fdXNlciAqdXApCit7CisJaWYocHV0X3VzZXIoa3AtPmluZGV4LCAmdXAtPmluZGV4KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJX19jb3B5X3RvX3VzZXIodXAtPmlkLCAma3AtPmlkLCBzaXplb2YoX191NjQpKTsKKwlfX2NvcHlfdG9fdXNlcih1cC0+bmFtZSwga3AtPm5hbWUsIDI0KTsKKwlfX3B1dF91c2VyKGtwLT5mcmFtZXBlcmlvZCwgJnVwLT5mcmFtZXBlcmlvZCk7CisJX19wdXRfdXNlcihrcC0+ZnJhbWVsaW5lcywgJnVwLT5mcmFtZWxpbmVzKTsKKwlfX2NvcHlfdG9fdXNlcih1cC0+cmVzZXJ2ZWQsIGtwLT5yZXNlcnZlZCwgNCAqIHNpemVvZihfX3UzMikpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdjRsMl9idWZmZXIzMgoreworCV9fdTMyCQkJaW5kZXg7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKKwlfX3UzMgkJCWJ5dGVzdXNlZDsKKwlfX3UzMgkJCWZsYWdzOworCWVudW0gdjRsMl9maWVsZAkJZmllbGQ7CisJc3RydWN0IGNvbXBhdF90aW1ldmFsCXRpbWVzdGFtcDsKKwlzdHJ1Y3QgdjRsMl90aW1lY29kZQl0aW1lY29kZTsKKwlfX3UzMgkJCXNlcXVlbmNlOworCisJLyogbWVtb3J5IGxvY2F0aW9uICovCisJZW51bSB2NGwyX21lbW9yeSAgICAgICAgbWVtb3J5OworCXVuaW9uIHsKKwkJX191MzIgICAgICAgICAgIG9mZnNldDsKKwkJY29tcGF0X2xvbmdfdCAgIHVzZXJwdHI7CisJfSBtOworCV9fdTMyCQkJbGVuZ3RoOworCV9fdTMyCQkJaW5wdXQ7CisJX191MzIJCQlyZXNlcnZlZDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3Y0bDJfYnVmZmVyMzIoc3RydWN0IHY0bDJfYnVmZmVyICprcCwgc3RydWN0IHY0bDJfYnVmZmVyMzIgX191c2VyICp1cCkKK3sKKworCWlmIChnZXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlfX2dldF91c2VyKGtwLT50eXBlLCAmdXAtPnR5cGUpOworCV9fZ2V0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKTsKKwlfX2dldF91c2VyKGtwLT5tZW1vcnksICZ1cC0+bWVtb3J5KTsKKwlfX2dldF91c2VyKGtwLT5pbnB1dCwgJnVwLT5pbnB1dCk7CisJc3dpdGNoKGtwLT5tZW1vcnkpIHsKKwljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWJyZWFrOworCWNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKKwkJeworCQl1bnNpZ25lZCBsb25nIHRtcCA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIodXAtPm0udXNlcnB0cik7CisKKwkJX19nZXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCk7CisJCV9fZ2V0X3VzZXIoa3AtPm0udXNlcnB0ciwgJnRtcCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX01FTU9SWV9PVkVSTEFZOgorCQlfX2dldF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdjRsMl9idWZmZXIzMihzdHJ1Y3QgdjRsMl9idWZmZXIgKmtwLCBzdHJ1Y3QgdjRsMl9idWZmZXIzMiBfX3VzZXIgKnVwKQoreworCWlmIChwdXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlfX3B1dF91c2VyKGtwLT50eXBlLCAmdXAtPnR5cGUpOworCV9fcHV0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKTsKKwlfX3B1dF91c2VyKGtwLT5tZW1vcnksICZ1cC0+bWVtb3J5KTsKKwlfX3B1dF91c2VyKGtwLT5pbnB1dCwgJnVwLT5pbnB1dCk7CisJc3dpdGNoKGtwLT5tZW1vcnkpIHsKKwljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCV9fcHV0X3VzZXIoa3AtPmxlbmd0aCwgJnVwLT5sZW5ndGgpOworCQlfX3B1dF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKKwkJX19wdXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCk7CisJCV9fcHV0X3VzZXIoa3AtPm0udXNlcnB0ciwgJnVwLT5tLnVzZXJwdHIpOworCQlicmVhazsKKwljYXNlIFY0TDJfTUVNT1JZX09WRVJMQVk6CisJCV9fcHV0X3VzZXIoa3AtPm0ub2Zmc2V0LCAmdXAtPm0ub2Zmc2V0KTsKKwkJYnJlYWs7CisJfQorCV9fcHV0X3VzZXIoa3AtPmJ5dGVzdXNlZCwgJnVwLT5ieXRlc3VzZWQpOworCV9fcHV0X3VzZXIoa3AtPmZpZWxkLCAmdXAtPmZpZWxkKTsKKwlfX3B1dF91c2VyKGtwLT50aW1lc3RhbXAudHZfc2VjLCAmdXAtPnRpbWVzdGFtcC50dl9zZWMpOworCV9fcHV0X3VzZXIoa3AtPnRpbWVzdGFtcC50dl91c2VjLCAmdXAtPnRpbWVzdGFtcC50dl91c2VjKTsKKwlfX2NvcHlfdG9fdXNlcigmdXAtPnRpbWVjb2RlLCAma3AtPnRpbWVjb2RlLCBzaXplb2Yoc3RydWN0IHY0bDJfdGltZWNvZGUpKTsKKwlfX3B1dF91c2VyKGtwLT5zZXF1ZW5jZSwgJnVwLT5zZXF1ZW5jZSk7CisJX19wdXRfdXNlcihrcC0+cmVzZXJ2ZWQsICZ1cC0+cmVzZXJ2ZWQpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcjMyCit7CisJX191MzIJCQljYXBhYmlsaXR5OworCV9fdTMyCQkJZmxhZ3M7CisJY29tcGF0X2NhZGRyX3QgCQliYXNlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQJZm10OworfTsKKworc3RhdGljIGludCBnZXRfdjRsMl9mcmFtZWJ1ZmZlcjMyKHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICprcCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMiBfX3VzZXIgKnVwKQoreworCXUzMiB0bXA7CisKKwlpZiAoZ2V0X3VzZXIodG1wLCAmdXAtPmJhc2UpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlrcC0+YmFzZSA9IGNvbXBhdF9wdHIodG1wKTsKKwlfX2dldF91c2VyKGtwLT5jYXBhYmlsaXR5LCAmdXAtPmNhcGFiaWxpdHkpOworCV9fZ2V0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKTsKKwlnZXRfdjRsMl9waXhfZm9ybWF0KCZrcC0+Zm10LCAmdXAtPmZtdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHV0X3Y0bDJfZnJhbWVidWZmZXIzMihzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqa3AsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyMzIgX191c2VyICp1cCkKK3sKKwl1MzIgdG1wID0gKHUzMikoKHVuc2lnbmVkIGxvbmcpa3AtPmJhc2UpOworCisJaWYocHV0X3VzZXIodG1wLCAmdXAtPmJhc2UpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlfX3B1dF91c2VyKGtwLT5jYXBhYmlsaXR5LCAmdXAtPmNhcGFiaWxpdHkpOworCV9fcHV0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKTsKKwlwdXRfdjRsMl9waXhfZm9ybWF0KCZrcC0+Zm10LCAmdXAtPmZtdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2NGwyX2lucHV0MzIgCS8qIGlkZW50aWNhbCBsYXlvdXQsIGJ1dCBkaWZmZXJlbnQgc2l6ZSAqLworeworCV9fdTMyCSAgICAgaW5kZXg7CQkvKiAgV2hpY2ggaW5wdXQgKi8KKwlfX3U4CSAgICAgbmFtZVszMl07CQkvKiAgTGFiZWwgKi8KKwlfX3UzMgkgICAgIHR5cGU7CQkvKiAgVHlwZSBvZiBpbnB1dCAqLworCV9fdTMyCSAgICAgYXVkaW9zZXQ7CQkvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLworCV9fdTMyICAgICAgICB0dW5lcjsgICAgICAgICAgICAgLyogIEFzc29jaWF0ZWQgdHVuZXIgKi8KKwlfX3UzMgkgICAgIHN0ZFsyXTsJCS8qIF9fdTY0IHdvdWxkIGdldCB0aGUgcGFkZGluZyB3cm9uZyAqLworCV9fdTMyCSAgICAgc3RhdHVzOworCV9fdTMyCSAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFZJRElPQ0dUVU5FUjMyCQlfSU9XUigndicsNCwgc3RydWN0IHZpZGVvX3R1bmVyMzIpCisjZGVmaW5lIFZJRElPQ1NUVU5FUjMyCQlfSU9XKCd2Jyw1LCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMikKKyNkZWZpbmUgVklESU9DR1dJTjMyCQlfSU9SKCd2Jyw5LCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIpCisjZGVmaW5lIFZJRElPQ1NXSU4zMgkJX0lPVygndicsMTAsIHN0cnVjdCB2aWRlb193aW5kb3czMikKKyNkZWZpbmUgVklESU9DR0ZCVUYzMgkJX0lPUigndicsMTEsIHN0cnVjdCB2aWRlb19idWZmZXIzMikKKyNkZWZpbmUgVklESU9DU0ZCVUYzMgkJX0lPVygndicsMTIsIHN0cnVjdCB2aWRlb19idWZmZXIzMikKKyNkZWZpbmUgVklESU9DR0ZSRVEzMgkJX0lPUigndicsMTQsIHUzMikKKyNkZWZpbmUgVklESU9DU0ZSRVEzMgkJX0lPVygndicsMTUsIHUzMikKKworI2RlZmluZSBWSURJT0NfR19GTVQzMgkJX0lPV1IgKCdWJywgIDQsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyKQorI2RlZmluZSBWSURJT0NfU19GTVQzMgkJX0lPV1IgKCdWJywgIDUsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyKQorI2RlZmluZSBWSURJT0NfUVVFUllCVUYzMglfSU9XUiAoJ1YnLCAgOSwgc3RydWN0IHY0bDJfYnVmZmVyMzIpCisjZGVmaW5lIFZJRElPQ19HX0ZCVUYzMgkJX0lPUiAgKCdWJywgMTAsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyMzIpCisjZGVmaW5lIFZJRElPQ19TX0ZCVUYzMgkJX0lPVyAgKCdWJywgMTEsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyMzIpCisvKiBWSURJT0NfT1ZFUkxBWSBpcyBub3cgX0lPVywgYnV0IHdhcyBfSU9XUiAqLworI2RlZmluZSBWSURJT0NfT1ZFUkxBWTMyCV9JT1dSICgnVicsIDE0LCBjb21wYXRfaW50X3QpCisjZGVmaW5lIFZJRElPQ19RQlVGMzIJCV9JT1dSICgnVicsIDE1LCBzdHJ1Y3QgdjRsMl9idWZmZXIzMikKKyNkZWZpbmUgVklESU9DX0RRQlVGMzIJCV9JT1dSICgnVicsIDE3LCBzdHJ1Y3QgdjRsMl9idWZmZXIzMikKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9OMzIJX0lPVyAgKCdWJywgMTgsIGNvbXBhdF9pbnRfdCkKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRjMyCV9JT1cgICgnVicsIDE5LCBjb21wYXRfaW50X3QpCisjZGVmaW5lIFZJRElPQ19FTlVNU1REMzIJX0lPV1IgKCdWJywgMjUsIHN0cnVjdCB2NGwyX3N0YW5kYXJkMzIpCisjZGVmaW5lIFZJRElPQ19FTlVNSU5QVVQzMglfSU9XUiAoJ1YnLCAyNiwgc3RydWN0IHY0bDJfaW5wdXQzMikKKy8qIFZJRElPQ19TX0NUUkwgaXMgbm93IF9JT1dSLCBidXQgd2FzIF9JT1cgKi8KKyNkZWZpbmUgVklESU9DX1NfQ1RSTDMyCQlfSU9XICAoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX0dfSU5QVVQzMglfSU9SICAoJ1YnLCAzOCwgY29tcGF0X2ludF90KQorI2RlZmluZSBWSURJT0NfU19JTlBVVDMyCV9JT1dSICgnVicsIDM5LCBjb21wYXRfaW50X3QpCisjZGVmaW5lIFZJRElPQ19UUllfRk1UMzIgICAgICAJX0lPV1IgKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyKQorCitlbnVtIHsKKwlNYXhDbGlwcyA9ICh+MFUtc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKS9zaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApCit9OworCitzdGF0aWMgaW50IGRvX3NldF93aW5kb3coc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB2aWRlb193aW5kb3czMiBfX3VzZXIgKnVwID0gY29tcGF0X3B0cihhcmcpOworCXN0cnVjdCB2aWRlb193aW5kb3cgX191c2VyICp2dzsKKwlzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKnA7CisJaW50IG5jbGlwczsKKwl1MzIgbjsKKworCWlmIChnZXRfdXNlcihuY2xpcHMsICZ1cC0+Y2xpcGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBQZWN1bGlhciBpbnRlcmZhY2UuLi4gKi8KKwlpZiAobmNsaXBzIDwgMCkKKwkJbmNsaXBzID0gVklERU9fQ0xJUE1BUF9TSVpFOworCisJaWYgKG5jbGlwcyA+IE1heENsaXBzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZ3ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpICsKKwkJCQkgICAgbmNsaXBzICogc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSk7CisKKwlwID0gbmNsaXBzID8gKHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqKSh2dyArIDEpIDogTlVMTDsKKworCWlmIChnZXRfdXNlcihuLCAmdXAtPngpIHx8IHB1dF91c2VyKG4sICZ2dy0+eCkgfHwKKwkgICAgZ2V0X3VzZXIobiwgJnVwLT55KSB8fCBwdXRfdXNlcihuLCAmdnctPnkpIHx8CisJICAgIGdldF91c2VyKG4sICZ1cC0+d2lkdGgpIHx8IHB1dF91c2VyKG4sICZ2dy0+d2lkdGgpIHx8CisJICAgIGdldF91c2VyKG4sICZ1cC0+aGVpZ2h0KSB8fCBwdXRfdXNlcihuLCAmdnctPmhlaWdodCkgfHwKKwkgICAgZ2V0X3VzZXIobiwgJnVwLT5jaHJvbWFrZXkpIHx8IHB1dF91c2VyKG4sICZ2dy0+Y2hyb21ha2V5KSB8fAorCSAgICBnZXRfdXNlcihuLCAmdXAtPmZsYWdzKSB8fCBwdXRfdXNlcihuLCAmdnctPmZsYWdzKSB8fAorCSAgICBnZXRfdXNlcihuLCAmdXAtPmNsaXBjb3VudCkgfHwgcHV0X3VzZXIobiwgJnZ3LT5jbGlwY291bnQpIHx8CisJICAgIGdldF91c2VyKG4sICZ1cC0+Y2xpcHMpIHx8IHB1dF91c2VyKHAsICZ2dy0+Y2xpcHMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChuY2xpcHMpIHsKKwkJc3RydWN0IHZpZGVvX2NsaXAzMiBfX3VzZXIgKnUgPSBjb21wYXRfcHRyKG4pOworCQlpbnQgaTsKKwkJaWYgKCF1KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZvciAoaSA9IDA7IGkgPCBuY2xpcHM7IGkrKywgdSsrLCBwKyspIHsKKwkJCXMzMiB2OworCQkJaWYgKGdldF91c2VyKHYsICZ1LT54KSB8fAorCQkJICAgIHB1dF91c2VyKHYsICZwLT54KSB8fAorCQkJICAgIGdldF91c2VyKHYsICZ1LT55KSB8fAorCQkJICAgIHB1dF91c2VyKHYsICZwLT55KSB8fAorCQkJICAgIGdldF91c2VyKHYsICZ1LT53aWR0aCkgfHwKKwkJCSAgICBwdXRfdXNlcih2LCAmcC0+d2lkdGgpIHx8CisJCQkgICAgZ2V0X3VzZXIodiwgJnUtPmhlaWdodCkgfHwKKwkJCSAgICBwdXRfdXNlcih2LCAmcC0+aGVpZ2h0KSB8fAorCQkJICAgIHB1dF91c2VyKE5VTEwsICZwLT5uZXh0KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCXJldHVybiBuYXRpdmVfaW9jdGwoZmlsZSwgVklESU9DU1dJTiwgKHVuc2lnbmVkIGxvbmcpdncpOworfQorCitzdGF0aWMgaW50IGRvX3ZpZGVvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB2aWRlb190dW5lciB2dDsKKwkJc3RydWN0IHZpZGVvX2J1ZmZlciB2YjsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKKwkJc3RydWN0IHY0bDJfZm9ybWF0IHYyZjsKKwkJc3RydWN0IHY0bDJfYnVmZmVyIHYyYjsKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgdjJmYjsKKwkJc3RydWN0IHY0bDJfc3RhbmRhcmQgdjJzOworCQl1bnNpZ25lZCBsb25nIHZ4OworCX0ga2FyZzsKKwl2b2lkIF9fdXNlciAqdXAgPSBjb21wYXRfcHRyKGFyZyk7CisJaW50IGNvbXBhdGlibGVfYXJnID0gMTsKKwlpbnQgZXJyID0gMDsKKworCS8qIEZpcnN0LCBjb252ZXJ0IHRoZSBjb21tYW5kLiAqLworCXN3aXRjaChjbWQpIHsKKwljYXNlIFZJRElPQ0dUVU5FUjMyOiBjbWQgPSBWSURJT0NHVFVORVI7IGJyZWFrOworCWNhc2UgVklESU9DU1RVTkVSMzI6IGNtZCA9IFZJRElPQ1NUVU5FUjsgYnJlYWs7CisJY2FzZSBWSURJT0NHV0lOMzI6IGNtZCA9IFZJRElPQ0dXSU47IGJyZWFrOworCWNhc2UgVklESU9DR0ZCVUYzMjogY21kID0gVklESU9DR0ZCVUY7IGJyZWFrOworCWNhc2UgVklESU9DU0ZCVUYzMjogY21kID0gVklESU9DU0ZCVUY7IGJyZWFrOworCWNhc2UgVklESU9DR0ZSRVEzMjogY21kID0gVklESU9DR0ZSRVE7IGJyZWFrOworCWNhc2UgVklESU9DU0ZSRVEzMjogY21kID0gVklESU9DU0ZSRVE7IGJyZWFrOworCWNhc2UgVklESU9DX0dfRk1UMzI6IGNtZCA9IFZJRElPQ19HX0ZNVDsgYnJlYWs7CisJY2FzZSBWSURJT0NfU19GTVQzMjogY21kID0gVklESU9DX1NfRk1UOyBicmVhazsKKwljYXNlIFZJRElPQ19RVUVSWUJVRjMyOiBjbWQgPSBWSURJT0NfUVVFUllCVUY7IGJyZWFrOworCWNhc2UgVklESU9DX1FCVUYzMjogY21kID0gVklESU9DX1FCVUY7IGJyZWFrOworCWNhc2UgVklESU9DX0RRQlVGMzI6IGNtZCA9IFZJRElPQ19EUUJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NfU1RSRUFNT04zMjogY21kID0gVklESU9DX1NUUkVBTU9OOyBicmVhazsKKwljYXNlIFZJRElPQ19TVFJFQU1PRkYzMjogY21kID0gVklESU9DX1NUUkVBTU9GRjsgYnJlYWs7CisJY2FzZSBWSURJT0NfR19GQlVGMzI6IGNtZCA9IFZJRElPQ19HX0ZCVUY7IGJyZWFrOworCWNhc2UgVklESU9DX1NfRkJVRjMyOiBjbWQgPSBWSURJT0NfU19GQlVGOyBicmVhazsKKwljYXNlIFZJRElPQ19PVkVSTEFZMzI6IGNtZCA9IFZJRElPQ19PVkVSTEFZOyBicmVhazsKKwljYXNlIFZJRElPQ19FTlVNU1REMzI6IGNtZCA9IFZJRElPQ19FTlVNU1REOyBicmVhazsKKwljYXNlIFZJRElPQ19FTlVNSU5QVVQzMjogY21kID0gVklESU9DX0VOVU1JTlBVVDsgYnJlYWs7CisJY2FzZSBWSURJT0NfU19DVFJMMzI6IGNtZCA9IFZJRElPQ19TX0NUUkw7IGJyZWFrOworCWNhc2UgVklESU9DX0dfSU5QVVQzMjogY21kID0gVklESU9DX0dfSU5QVVQ7IGJyZWFrOworCWNhc2UgVklESU9DX1NfSU5QVVQzMjogY21kID0gVklESU9DX1NfSU5QVVQ7IGJyZWFrOworCWNhc2UgVklESU9DX1RSWV9GTVQzMjogY21kID0gVklESU9DX1RSWV9GTVQ7IGJyZWFrOworCX07CisKKwlzd2l0Y2goY21kKSB7CisJY2FzZSBWSURJT0NTVFVORVI6CisJY2FzZSBWSURJT0NHVFVORVI6CisJCWVyciA9IGdldF92aWRlb190dW5lcjMyKCZrYXJnLnZ0LCB1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKworCQlicmVhazsKKworCWNhc2UgVklESU9DU0ZCVUY6CisJCWVyciA9IGdldF92aWRlb19idWZmZXIzMigma2FyZy52YiwgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NTRlJFUToKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCWNhc2UgVklESU9DX09WRVJMQVk6CisJY2FzZSBWSURJT0NfU1RSRUFNT046CisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgorCQllcnIgPSBnZXRfdXNlcihrYXJnLnZ4LCAodTMyIF9fdXNlciAqKXVwKTsKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfRkJVRjoKKwkJZXJyID0gZ2V0X3Y0bDJfZnJhbWVidWZmZXIzMigma2FyZy52MmZiLCB1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0ZNVDoKKwljYXNlIFZJRElPQ19TX0ZNVDoKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCQllcnIgPSBnZXRfdjRsMl9mb3JtYXQzMigma2FyZy52MmYsIHVwKTsKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCWNhc2UgVklESU9DX1FCVUY6CisJY2FzZSBWSURJT0NfRFFCVUY6CisJCWVyciA9IGdldF92NGwyX2J1ZmZlcjMyKCZrYXJnLnYyYiwgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwkJZXJyID0gZ2V0X3Y0bDJfc3RhbmRhcmQzMigma2FyZy52MnMsIHVwKTsKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DR1dJTjoKKwljYXNlIFZJRElPQ0dGQlVGOgorCWNhc2UgVklESU9DR0ZSRVE6CisJY2FzZSBWSURJT0NfR19GQlVGOgorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwl9OworCisJaWYoZXJyKQorCQlnb3RvIG91dDsKKworCWlmKGNvbXBhdGlibGVfYXJnKQorCQllcnIgPSBuYXRpdmVfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyl1cCk7CisJZWxzZSB7CisJCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKwkJZXJyID0gbmF0aXZlX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpJmthcmcpOworCQlzZXRfZnMob2xkX2ZzKTsKKwl9CisJaWYoZXJyID09IDApIHsKKwkJc3dpdGNoKGNtZCkgeworCQljYXNlIFZJRElPQ0dUVU5FUjoKKwkJCWVyciA9IHB1dF92aWRlb190dW5lcjMyKCZrYXJnLnZ0LCB1cCk7CisJCQlicmVhazsKKworCQljYXNlIFZJRElPQ0dXSU46CisJCQllcnIgPSBwdXRfdmlkZW9fd2luZG93MzIoJmthcmcudncsIHVwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVklESU9DR0ZCVUY6CisJCQllcnIgPSBwdXRfdmlkZW9fYnVmZmVyMzIoJmthcmcudmIsIHVwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVklESU9DX0dfRkJVRjoKKwkJCWVyciA9IHB1dF92NGwyX2ZyYW1lYnVmZmVyMzIoJmthcmcudjJmYiwgdXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBWSURJT0NfR19GTVQ6CisJCWNhc2UgVklESU9DX1NfRk1UOgorCQljYXNlIFZJRElPQ19UUllfRk1UOgorCQkJZXJyID0gcHV0X3Y0bDJfZm9ybWF0MzIoJmthcmcudjJmLCB1cCk7CisJCQlicmVhazsKKworCQljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwkJY2FzZSBWSURJT0NfUUJVRjoKKwkJY2FzZSBWSURJT0NfRFFCVUY6CisJCQllcnIgPSBwdXRfdjRsMl9idWZmZXIzMigma2FyZy52MmIsIHVwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJCQllcnIgPSBwdXRfdjRsMl9zdGFuZGFyZDMyKCZrYXJnLnYycywgdXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBWSURJT0NHRlJFUToKKwkJY2FzZSBWSURJT0NfR19JTlBVVDoKKwkJCWVyciA9IHB1dF91c2VyKCgodTMyKWthcmcudngpLCAodTMyIF9fdXNlciAqKXVwKTsKKwkJCWJyZWFrOworCQl9OworCX0KK291dDoKKwlyZXR1cm4gZXJyOworfQorCitsb25nIHY0bF9jb21wYXRfaW9jdGwzMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldCA9IC1FTk9JT0NUTENNRDsKKworCWlmICghZmlsZS0+Zl9vcC0+aW9jdGwpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DU1dJTjMyOgorCQlyZXQgPSBkb19zZXRfd2luZG93KGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBWSURJT0NHVFVORVIzMjoKKwljYXNlIFZJRElPQ1NUVU5FUjMyOgorCWNhc2UgVklESU9DR1dJTjMyOgorCWNhc2UgVklESU9DR0ZCVUYzMjoKKwljYXNlIFZJRElPQ1NGQlVGMzI6CisJY2FzZSBWSURJT0NHRlJFUTMyOgorCWNhc2UgVklESU9DU0ZSRVEzMjoKKwljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwljYXNlIFZJRElPQ19HX0ZNVDMyOgorCWNhc2UgVklESU9DX1NfRk1UMzI6CisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwljYXNlIFZJRElPQ19RVUVSWUJVRjMyOgorCWNhc2UgVklESU9DX0dfRkJVRjMyOgorCWNhc2UgVklESU9DX1NfRkJVRjMyOgorCWNhc2UgVklESU9DX09WRVJMQVkzMjoKKwljYXNlIFZJRElPQ19RQlVGMzI6CisJY2FzZSBWSURJT0NfRFFCVUYzMjoKKwljYXNlIFZJRElPQ19TVFJFQU1PTjMyOgorCWNhc2UgVklESU9DX1NUUkVBTU9GRjMyOgorCWNhc2UgVklESU9DX0dfUEFSTToKKwljYXNlIFZJRElPQ19HX1NURDoKKwljYXNlIFZJRElPQ19TX1NURDoKKwljYXNlIFZJRElPQ19FTlVNU1REMzI6CisJY2FzZSBWSURJT0NfRU5VTUlOUFVUMzI6CisJY2FzZSBWSURJT0NfR19DVFJMOgorCWNhc2UgVklESU9DX1NfQ1RSTDMyOgorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwljYXNlIFZJRElPQ19HX0lOUFVUMzI6CisJY2FzZSBWSURJT0NfU19JTlBVVDMyOgorCWNhc2UgVklESU9DX1RSWV9GTVQzMjoKKwkJcmV0ID0gZG9fdmlkZW9faW9jdGwoZmlsZSwgY21kLCBhcmcpOworCQlicmVhazsKKworCS8qIExpdHRsZSB2LCB0aGUgdmlkZW80bGludXggaW9jdGxzIChjb25mbGljdD8pICovCisJY2FzZSBWSURJT0NHQ0FQOgorCWNhc2UgVklESU9DR0NIQU46CisJY2FzZSBWSURJT0NTQ0hBTjoKKwljYXNlIFZJRElPQ0dQSUNUOgorCWNhc2UgVklESU9DU1BJQ1Q6CisJY2FzZSBWSURJT0NDQVBUVVJFOgorCWNhc2UgVklESU9DS0VZOgorCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCWNhc2UgVklESU9DU1lOQzoKKwljYXNlIFZJRElPQ01DQVBUVVJFOgorCWNhc2UgVklESU9DR01CVUY6CisJY2FzZSBWSURJT0NHVU5JVDoKKwljYXNlIFZJRElPQ0dDQVBUVVJFOgorCWNhc2UgVklESU9DU0NBUFRVUkU6CisKKwkvKiBCVFRWIHNwZWNpZmljLi4uICovCisJY2FzZSBfSU9XKCd2JywgIEJBU0VfVklESU9DUFJJVkFURSswLCBjaGFyIFsyNTZdKToKKwljYXNlIF9JT1IoJ3YnLCAgQkFTRV9WSURJT0NQUklWQVRFKzEsIGNoYXIgWzI1Nl0pOgorCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMiwgdW5zaWduZWQgaW50KToKKwljYXNlIF9JT1coJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzMsIGNoYXIgWzE2XSk6IC8qIHN0cnVjdCBidHR2X3BsbF9pbmZvICovCisJY2FzZSBfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs0LCBpbnQpOgorCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNSwgaW50KToKKwljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzYsIGludCk6CisJY2FzZSBfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs3LCBpbnQpOgorCQlyZXQgPSBuYXRpdmVfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCitsb25nIHY0bF9jb21wYXRfaW9jdGwzMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKyNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwodjRsX2NvbXBhdF9pb2N0bDMyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCBiN2VjOWJmLi45ZjU5NTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzgwNyw2ICszODA3LDcgQEAKIAkucmVhZAkJPSBjcGlhX3JlYWQsCiAJLm1tYXAJCT0gY3BpYV9tbWFwLAogCS5pb2N0bCAgICAgICAgICA9IGNwaWFfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKaW5kZXggNjQzZWFkMS4uYjQyMTA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJpMmMgZGV2aWNlIGRyaXZlciBmb3IgY3M1M2wzMmEgQXVkaW8gQURDIik7CiBNT0RVTEVfQVVUSE9SKCJNYXJ0aW4gVmF1Z2hhbiIpOwpAQCAtMzksMjEgKzM5LDYgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlc1xuXHRcdFx0MD1PZmYgKGRlZmF1bHQpLCAxPU9uIik7CiAKLSNkZWZpbmUgY3M1M2wzMmFfZGJnKGZtdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZykgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIFwKLQkJCSAgICAgICBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkJCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjczUzbDMyYV9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAotCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotI2RlZmluZSBjczUzbDMyYV9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7IFwKLQlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjIgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogCkBAIC03NCw1MCArNTksNTkgQEAKIHN0YXRpYyBpbnQgY3M1M2wzMmFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgIHZvaWQgKmFyZykKIHsKLQlpbnQgKmlucHV0ID0gYXJnOworCXN0cnVjdCB2NGwyX2F1ZGlvICppbnB1dCA9IGFyZzsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIEFVRENfU0VUX0lOUFVUOgotCQlzd2l0Y2ggKCppbnB1dCkgewotCQljYXNlIEFVRElPX1RVTkVSOgotCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAxLCAweDAxKTsKLQkJCWJyZWFrOwotCQljYXNlIEFVRElPX0VYVEVSTjoKLQkJCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgyMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19NVVRFOgotCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAzLCAweEYwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFVRElPX1VOTVVURToKLQkJCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMywgMHgzMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNzNTNsMzJhX2VycigiSW52YWxpZCBpbnB1dCAlZC5cbiIsICppbnB1dCk7CisJY2FzZSBWSURJT0NfU19BVURJTzoKKwkJLyogVGhlcmUgYXJlIDIgcGh5c2ljYWwgaW5wdXRzLCBidXQgdGhlIHNlY29uZCBpbnB1dCBjYW4gYmUKKwkJICAgcGxhY2VkIGluIHR3byBtb2RlcywgdGhlIGZpcnN0IG1vZGUgYnlwYXNzZXMgdGhlIFBHQSAoZ2FpbiksCisJCSAgIHRoZSBzZWNvbmQgZ29lcyB0aHJvdWdoIHRoZSBQR0EuIEhlbmNlIHRoZXJlIGFyZSB0aHJlZQorCQkgICBwb3NzaWJsZSBpbnB1dHMgdG8gY2hvb3NlIGZyb20uICovCisJCWlmIChpbnB1dC0+aW5kZXggPiAyKSB7CisJCQl2NGxfZXJyKGNsaWVudCwgIkludmFsaWQgaW5wdXQgJWQuXG4iLCBpbnB1dC0+aW5kZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAxLCAweDAxICsgKGlucHV0LT5pbmRleCA8PCA0KSk7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19BVURJTzoKKwkJbWVtc2V0KGlucHV0LCAwLCBzaXplb2YoKmlucHV0KSk7CisJCWlucHV0LT5pbmRleCA9IChjczUzbDMyYV9yZWFkKGNsaWVudCwgMHgwMSkgPj4gNCkgJiAzOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKKwkJCWN0cmwtPnZhbHVlID0gKGNzNTNsMzJhX3JlYWQoY2xpZW50LCAweDAzKSAmIDB4YzApICE9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fVk9MVU1FKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWN0cmwtPnZhbHVlID0gKHM4KWNzNTNsMzJhX3JlYWQoY2xpZW50LCAweDA0KTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7Ci0KLQkJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoY3RybC0+dmFsdWUgPiAxMiB8fCBjdHJsLT52YWx1ZSA8IC05MCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwNCwgKHU4KSBjdHJsLT52YWx1ZSk7Ci0JCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDUsICh1OCkgY3RybC0+dmFsdWUpOworCQlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgeworCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAzLCBjdHJsLT52YWx1ZSA/IDB4ZjAgOiAweDMwKTsKIAkJCWJyZWFrOwogCQl9CisJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGN0cmwtPnZhbHVlID4gMTIgfHwgY3RybC0+dmFsdWUgPCAtOTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA0LCAodTgpIGN0cmwtPnZhbHVlKTsKKwkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA1LCAodTgpIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgogCQl7CiAJCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDEpOwogCQkJdTggbSA9IGNzNTNsMzJhX3JlYWQoY2xpZW50LCAweDAzKTsKKwkJCXM4IHZvbCA9IGNzNTNsMzJhX3JlYWQoY2xpZW50LCAweDA0KTsKIAotCQkJY3M1M2wzMmFfaW5mbygiSW5wdXQ6ICVzJXNcbiIsCi0JCQkJICAgICAgdiA9PSAweDIxID8gImV4dGVybmFsIGxpbmUgaW4iIDogInR1bmVyIiwKKwkJCXY0bF9pbmZvKGNsaWVudCwgIklucHV0OiAgJWQlc1xuIiwgKHYgPj4gNCkgJiAzLAogCQkJCSAgICAgIChtICYgMHhDMCkgPyAiIChtdXRlZCkiIDogIiIpOworCQkJdjRsX2luZm8oY2xpZW50LCAiVm9sdW1lOiAlZCBkQlxuIiwgdm9sKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE1NywxMiArMTUxLDEyIEBACiAJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcjsKIAlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgImNzNTNsMzJhIik7CiAKLQljczUzbDMyYV9pbmZvKCJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CiAKIAlmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykgewogCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIGkpOwogCi0JCWNzNTNsMzJhX2RiZygiUmVhZCBSZWcgJWQgJTAyeFxuIiwgaSwgdik7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiUmVhZCBSZWcgJWQgJTAyeFxuIiwgaSwgdik7CiAJfQogCiAJLyogU2V0IGNzNTNsMzJhIGludGVybmFsIHJlZ2lzdGVyIGZvciBBZGFwdGVjIDIwMTAvMjQxMCBzZXR1cCAqLwpAQCAtMTgwLDcgKzE3NCw3IEBACiAJZm9yIChpID0gMTsgaSA8PSA3OyBpKyspIHsKIAkJdTggdiA9IGNzNTNsMzJhX3JlYWQoY2xpZW50LCBpKTsKIAotCQljczUzbDMyYV9kYmcoIlJlYWQgUmVnICVkICUwMnhcbiIsIGksIHYpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIlJlYWQgUmVnICVkICUwMnhcbiIsIGksIHYpOwogCX0KIAogCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CkBAIC0xOTAsMTEgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgY3M1M2wzMmFfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotI2Vsc2UKLQlpZiAoYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfQlQ4NDgpCi0jZW5kaWYKIAkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBjczUzbDMyYV9hdHRhY2gpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKaW5kZXggNzQwOTA4Zi4uY2I5YTc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCkBAIC0yMywxMSArMjMsMTMgQEAKIAogI2luY2x1ZGUgImN4MjU4NDAuaCIKIAotaW5saW5lIHN0YXRpYyBpbnQgc2V0X2F1ZGNsa19mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkJIGVudW0gdjRsMl9hdWRpb19jbG9ja19mcmVxIGZyZXEpCitzdGF0aWMgaW50IHNldF9hdWRjbGtfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgZnJlcSkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAorCWlmIChmcmVxICE9IDMyMDAwICYmIGZyZXEgIT0gNDQxMDAgJiYgZnJlcSAhPSA0ODAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBhc3NlcnQgc29mdCByZXNldCAqLwogCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDB4MDEpOwogCkBAIC0zNSwxMCArMzcsOSBAQAogCS8qIFNBX01DTEtfU0VMPTEsIFNBX01DTEtfRElWPTB4MTAgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMjcsIDB4NTApOwogCi0Jc3dpdGNoIChzdGF0ZS0+YXVkaW9faW5wdXQpIHsKLQljYXNlIEFVRElPX1RVTkVSOgorCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7CiAJCXN3aXRjaCAoZnJlcSkgewotCQljYXNlIFY0TDJfQVVEQ0xLXzMyX0tIWjoKKwkJY2FzZSAzMjAwMDoKIAkJCS8qIFZJRF9QTEwgYW5kIEFVWF9QTEwgKi8KIAkJCWN4MjU4NDBfd3JpdGU0KGNsaWVudCwgMHgxMDgsIDB4MGYwNDA2MTApOwogCkBAIC01MSw3ICs1Miw3IEBACiAJCQljeDI1ODQwX3dyaXRlNChjbGllbnQsIDB4OTBjLCAweDdmZjcwMTA4KTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVjRMMl9BVURDTEtfNDQxX0tIWjoKKwkJY2FzZSA0NDEwMDoKIAkJCS8qIFZJRF9QTEwgYW5kIEFVWF9QTEwgKi8KIAkJCWN4MjU4NDBfd3JpdGU0KGNsaWVudCwgMHgxMDgsIDB4MGYwNDA5MTApOwogCkBAIC02NCw3ICs2NSw3IEBACiAJCQljeDI1ODQwX3dyaXRlNChjbGllbnQsIDB4OTBjLCAweDU5NmQwMTA4KTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVjRMMl9BVURDTEtfNDhfS0haOgorCQljYXNlIDQ4MDAwOgogCQkJLyogVklEX1BMTCBhbmQgQVVYX1BMTCAqLwogCQkJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDEwOCwgMHgwZjA0MGExMCk7CiAKQEAgLTc3LDE0ICs3OCw5IEBACiAJCQljeDI1ODQwX3dyaXRlNChjbGllbnQsIDB4OTBjLCAweGFhNGYwMTA4KTsKIAkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBVURJT19FWFRFUk5fMToKLQljYXNlIEFVRElPX0VYVEVSTl8yOgotCWNhc2UgQVVESU9fSU5URVJOOgotCWNhc2UgQVVESU9fUkFESU86CisJfSBlbHNlIHsKIAkJc3dpdGNoIChmcmVxKSB7Ci0JCWNhc2UgVjRMMl9BVURDTEtfMzJfS0haOgorCQljYXNlIDMyMDAwOgogCQkJLyogVklEX1BMTCBhbmQgQVVYX1BMTCAqLwogCQkJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDEwOCwgMHgwZjA0MDgxZSk7CiAKQEAgLTEwMyw3ICs5OSw3IEBACiAJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMjcsIDB4NTQpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBWNEwyX0FVRENMS180NDFfS0haOgorCQljYXNlIDQ0MTAwOgogCQkJLyogVklEX1BMTCBhbmQgQVVYX1BMTCAqLwogCQkJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDEwOCwgMHgwZjA0MDkxOCk7CiAKQEAgLTExOSw3ICsxMTUsNyBAQAogCQkJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDkwYywgMHg4NTczMDEwOCk7CiAJCQlicmVhazsKIAotCQljYXNlIFY0TDJfQVVEQ0xLXzQ4X0tIWjoKKwkJY2FzZSA0ODAwMDoKIAkJCS8qIFZJRF9QTEwgYW5kIEFVWF9QTEwgKi8KIAkJCWN4MjU4NDBfd3JpdGU0KGNsaWVudCwgMHgxMDgsIDB4MGYwNDBhMTgpOwogCkBAIC0xMzUsNyArMTMxLDYgQEAKIAkJCWN4MjU4NDBfd3JpdGU0KGNsaWVudCwgMHg5MGMsIDB4NTU1NTAxMDgpOwogCQkJYnJlYWs7CiAJCX0KLQkJYnJlYWs7CiAJfQogCiAJLyogZGVhc3NlcnQgc29mdCByZXNldCAqLwpAQCAtMTQ2LDUxICsxNDEsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfaW5wdXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGF1ZGlvX2lucHV0KQordm9pZCBjeDI1ODQwX2F1ZGlvX3NldF9wYXRoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQljeDI1ODQwX2RiZygic2V0IGF1ZGlvIGlucHV0ICglZClcbiIsIGF1ZGlvX2lucHV0KTsKLQogCS8qIHN0b3AgbWljcm9jb250cm9sbGVyICovCiAJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDApOwogCiAJLyogTXV0ZSBldmVyeXRoaW5nIHRvIHByZXZlbnQgdGhlIFBGRlQhICovCiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OGQzLCAweDFmKTsKIAotCXN3aXRjaCAoYXVkaW9faW5wdXQpIHsKLQljYXNlIEFVRElPX1RVTkVSOgotCQkvKiBTZXQgUGF0aDEgdG8gQW5hbG9nIERlbW9kIE1haW4gQ2hhbm5lbCAqLwotCQljeDI1ODQwX3dyaXRlNChjbGllbnQsIDB4OGQwLCAweDcwMzgwNjFmKTsKLQotCQkvKiBXaGVuIHRoZSBtaWNyb2NvbnRyb2xsZXIgZGV0ZWN0cyB0aGUKLQkJICogYXVkaW8gZm9ybWF0LCBpdCB3aWxsIHVubXV0ZSB0aGUgbGluZXMgKi8KLQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDB4MTApOwotCQlicmVhazsKLQotCWNhc2UgQVVESU9fRVhURVJOXzE6Ci0JY2FzZSBBVURJT19FWFRFUk5fMjoKLQljYXNlIEFVRElPX0lOVEVSTjoKLQljYXNlIEFVRElPX1JBRElPOgorCWlmIChzdGF0ZS0+YXVkX2lucHV0ID09IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7CiAJCS8qIFNldCBQYXRoMSB0byBTZXJpYWwgQXVkaW8gSW5wdXQgKi8KIAkJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDhkMCwgMHgxMjEwMDEwMSk7CiAKIAkJLyogVGhlIG1pY3JvY29udHJvbGxlciBzaG91bGQgbm90IGJlIHN0YXJ0ZWQgZm9yIHRoZQogCQkgKiBub24tdHVuZXIgaW5wdXRzOiBhdXRvZGV0ZWN0aW9uIGlzIHNwZWNpZmljIGZvcgogCQkgKiBUViBhdWRpby4gKi8KLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJLyogU2V0IFBhdGgxIHRvIEFuYWxvZyBEZW1vZCBNYWluIENoYW5uZWwgKi8KKwkJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDhkMCwgMHg3MDM4MDYxZik7CiAKLQlkZWZhdWx0OgotCQljeDI1ODQwX2RiZygiSW52YWxpZCBhdWRpbyBpbnB1dCBzZWxlY3Rpb24gJWRcbiIsIGF1ZGlvX2lucHV0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIFdoZW4gdGhlIG1pY3JvY29udHJvbGxlciBkZXRlY3RzIHRoZQorCQkgKiBhdWRpbyBmb3JtYXQsIGl0IHdpbGwgdW5tdXRlIHRoZSBsaW5lcyAqLworCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODAzLCB+MHgxMCwgMHgxMCk7CiAJfQogCi0Jc3RhdGUtPmF1ZGlvX2lucHV0ID0gYXVkaW9faW5wdXQ7Ci0KLQlyZXR1cm4gc2V0X2F1ZGNsa19mcmVxKGNsaWVudCwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKKwlzZXRfYXVkY2xrX2ZyZXEoY2xpZW50LCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwogfQogCi1pbmxpbmUgc3RhdGljIGludCBnZXRfdm9sdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGdldF92b2x1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAkvKiBWb2x1bWUgcnVucyArMThkQiB0byAtOTZkQiBpbiAxLzJkQiBzdGVwcwogCSAqIGNoYW5nZSB0byBmaXQgdGhlIG1zcDM0MDAgLTExNGRCIHRvICsxMmRCIHJhbmdlICovCkBAIC0yMDEsNyArMTgxLDcgQEAKIAlyZXR1cm4gdm9sIDw8IDk7CiB9CiAKLWlubGluZSBzdGF0aWMgdm9pZCBzZXRfdm9sdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2b2x1bWUpCitzdGF0aWMgdm9pZCBzZXRfdm9sdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2b2x1bWUpCiB7CiAJLyogRmlyc3QgY29udmVydCB0aGUgdm9sdW1lIHRvIG1zcDM0MDAgdmFsdWVzICgwLTEyNykgKi8KIAlpbnQgdm9sID0gdm9sdW1lID4+IDk7CkBAIC0yMTgsNyArMTk4LDcgQEAKIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDQsIDIyOCAtICh2b2wgKiAyKSk7CiB9CiAKLWlubGluZSBzdGF0aWMgaW50IGdldF9iYXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGdldF9iYXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJLyogYmFzcyBpcyA0OSBzdGVwcyArMTJkQiB0byAtMTJkQiAqLwogCkBAIC0yMjgsMTMgKzIwOCwxMyBAQAogCXJldHVybiBiYXNzOwogfQogCi1pbmxpbmUgc3RhdGljIHZvaWQgc2V0X2Jhc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGJhc3MpCitzdGF0aWMgdm9pZCBzZXRfYmFzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYmFzcykKIHsKIAkvKiBQQVRIMV9FUV9CQVNTX1ZPTCAqLwogCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4ZDksIH4weDNmLCA0OCAtIChiYXNzICogNDggLyAweGZmZmYpKTsKIH0KIAotaW5saW5lIHN0YXRpYyBpbnQgZ2V0X3RyZWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBnZXRfdHJlYmxlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJLyogdHJlYmxlIGlzIDQ5IHN0ZXBzICsxMmRCIHRvIC0xMmRCICovCiAKQEAgLTI0NCwxMyArMjI0LDEzIEBACiAJcmV0dXJuIHRyZWJsZTsKIH0KIAotaW5saW5lIHN0YXRpYyB2b2lkIHNldF90cmVibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHRyZWJsZSkKK3N0YXRpYyB2b2lkIHNldF90cmVibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHRyZWJsZSkKIHsKIAkvKiBQQVRIMV9FUV9UUkVCTEVfVk9MICovCiAJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDhkYiwgfjB4M2YsIDQ4IC0gKHRyZWJsZSAqIDQ4IC8gMHhmZmZmKSk7CiB9CiAKLWlubGluZSBzdGF0aWMgaW50IGdldF9iYWxhbmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGdldF9iYWxhbmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJLyogYmFsYW5jZSBpcyA3IGJpdCwgMCB0byAtOTZkQiAqLwogCkBAIC0yNjQsNyArMjQ0LDcgQEAKIAlyZXR1cm4gYmFsYW5jZSA8PCA4OwogfQogCi1pbmxpbmUgc3RhdGljIHZvaWQgc2V0X2JhbGFuY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGJhbGFuY2UpCitzdGF0aWMgdm9pZCBzZXRfYmFsYW5jZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYmFsYW5jZSkKIHsKIAlpbnQgYmFsID0gYmFsYW5jZSA+PiA4OwogCWlmIChiYWwgPiAweDgwKSB7CkBAIC0yODAsMTcgKzI2MCwxNyBAQAogCX0KIH0KIAotaW5saW5lIHN0YXRpYyBpbnQgZ2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgZ2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAkvKiBjaGVjayBTUkMxX01VVEVfRU4gKi8KIAlyZXR1cm4gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4ZDMpICYgMHgyID8gMSA6IDA7CiB9CiAKLWlubGluZSBzdGF0aWMgdm9pZCBzZXRfbXV0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbXV0ZSkKK3N0YXRpYyB2b2lkIHNldF9tdXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBtdXRlKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JaWYgKHN0YXRlLT5hdWRpb19pbnB1dCA9PSBBVURJT19UVU5FUikgeworCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7CiAJCS8qIE11c3QgdHVybiBvZmYgbWljcm9jb250cm9sbGVyIGluIG9yZGVyIHRvIG11dGUgc291bmQuCiAJCSAqIE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGJlc3QgbWV0aG9kLCBidXQgaXQgZG9lcyB3b3JrLgogCQkgKiBJZiB0aGUgbWljcm9jb250cm9sbGVyIGlzIHJ1bm5pbmcsIHRoZW4gaXQgd2lsbCB1bmRvIGFueQpAQCAtMzE0LDEwICsyOTQsOSBAQAogCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQVVEQ19TRVRfSU5QVVQ6Ci0JCXJldHVybiBzZXRfaW5wdXQoY2xpZW50LCAqKGludCAqKWFyZyk7CiAJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JCXJldHVybiBzZXRfYXVkY2xrX2ZyZXEoY2xpZW50LCAqKGVudW0gdjRsMl9hdWRpb19jbG9ja19mcmVxICopYXJnKTsKKwkJcmV0dXJuIHNldF9hdWRjbGtfZnJlcShjbGllbnQsICoodTMyICopYXJnKTsKKwogCWNhc2UgVklESU9DX0dfQ1RSTDoKIAkJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKQEAgLTMzOSw2ICszMTgsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CisKIAljYXNlIFZJRElPQ19TX0NUUkw6CiAJCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CkBAIC0zNjAsNiArMzQwLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDNiMDlmNDYuLmQ0NTIzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTQzLDExICs0MywxMSBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAKLWludCBjeDI1ODQwX2RlYnVnID0gMDsKK2ludCBkZWJ1ZyA9IDA7CiAKLW1vZHVsZV9wYXJhbShjeDI1ODQwX2RlYnVnLCBib29sLCAwNjQ0KTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDY0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MoY3gyNTg0MF9kZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlcyBbMD1PZmYgKGRlZmF1bHQpIDE9T25dIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1lc3NhZ2VzIFswPU9mZiAoZGVmYXVsdCkgMT1Pbl0iKTsKIAogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKQEAgLTExNSwxMyArMTE1LDEzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2V0X2lucHV0KHN0cnVjdCBpMmNfY2xpZW50ICosIGVudW0gY3gyNTg0MF9pbnB1dCk7Ci1zdGF0aWMgdm9pZCBpbnB1dF9jaGFuZ2Uoc3RydWN0IGkyY19jbGllbnQgKik7CitzdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBlbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0LAorCQkJCQkJZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IGF1ZF9pbnB1dCk7CiBzdGF0aWMgdm9pZCBsb2dfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kbGwxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBpbml0X2RsbDEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAkvKiBUaGlzIGlzIHRoZSBIYXVwcGF1Z2Ugc2VxdWVuY2UgdXNlZCB0bwogCSAqIGluaXRpYWxpemUgdGhlIERlbGF5IExvY2sgTG9vcCAxIChBREMgRExMKS4gKi8KQEAgLTEzNSw3ICsxMzUsNyBAQAogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDE1YiwgMHgxMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RsbDIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGluaXRfZGxsMihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCS8qIFRoaXMgaXMgdGhlIEhhdXBwYXVnZSBzZXF1ZW5jZSB1c2VkIHRvCiAJICogaW5pdGlhbGl6ZSB0aGUgRGVsYXkgTG9jayBMb29wIDIgKEFEQyBETEwpLiAqLwpAQCAtMTk1LDEwICsxOTUsOCBAQAogCS8qIEFDOTcgc2hpZnQgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4Y2YsIDB4MGYpOwogCi0JLyogKHJlKXNldCB2aWRlbyBpbnB1dCAqLwotCXNldF9pbnB1dChjbGllbnQsIHN0YXRlLT5pbnB1dCk7Ci0JLyogKHJlKXNldCBhdWRpbyBpbnB1dCAqLwotCWN4MjU4NDBfYXVkaW8oY2xpZW50LCBBVURDX1NFVF9JTlBVVCwgJnN0YXRlLT5hdWRpb19pbnB1dCk7CisJLyogKHJlKXNldCBpbnB1dCAqLworCXNldF9pbnB1dChjbGllbnQsIHN0YXRlLT52aWRfaW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOwogCiAJLyogc3RhcnQgbWljcm9jb250cm9sbGVyICovCiAJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDB4MTApOwpAQCAtMjIzLDcgKzIyMSw3IEBACiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDgwYiwgMHgxMCk7CiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CiAJCS8qIE5UU0MgKi8KLQkJaWYgKHN0YXRlLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9QVlIxNTBfV09SS0FST1VORCkgeworCQlpZiAoc3RhdGUtPnB2cjE1MF93b3JrYXJvdW5kKSB7CiAJCQkvKiBDZXJ0YWluIEhhdXBwYXVnZSBQVlIxNTAgbW9kZWxzIGhhdmUgYSBoYXJkd2FyZSBidWcKIAkJCSAgIHRoYXQgY2F1c2VzIGF1ZGlvIHRvIGRyb3Agb3V0LiBGb3IgdGhlc2UgbW9kZWxzIHRoZQogCQkJICAgYXVkaW8gc3RhbmRhcmQgbXVzdCBiZSBzZXQgZXhwbGljaXRseS4KQEAgLTI1OSw3MiArMjU3LDY4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBlbnVtIGN4MjU4NDBfaW5wdXQgaW5wdXQpCitzdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBlbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0LAorCQkJCQkJZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IGF1ZF9pbnB1dCkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCBpc19jb21wb3NpdGUgPSAodmlkX2lucHV0ID49IENYMjU4NDBfQ09NUE9TSVRFMSAmJgorCQkJICAgdmlkX2lucHV0IDw9IENYMjU4NDBfQ09NUE9TSVRFOCk7CisJdTggcmVnOwogCi0JY3gyNTg0MF9kYmcoImRlY29kZXIgc2V0IGlucHV0ICglZClcbiIsIGlucHV0KTsKKwl2NGxfZGJnKDEsIGNsaWVudCwgImRlY29kZXIgc2V0IHZpZGVvIGlucHV0ICVkLCBhdWRpbyBpbnB1dCAlZFxuIiwKKwkJCXZpZF9pbnB1dCwgYXVkX2lucHV0KTsKIAotCXN3aXRjaCAoaW5wdXQpIHsKLQljYXNlIENYMjU4NDBfVFVORVI6Ci0JCWN4MjU4NDBfZGJnKCJub3cgc2V0dGluZyBUdW5lciBpbnB1dFxuIik7CisJaWYgKGlzX2NvbXBvc2l0ZSkgeworCQlyZWcgPSAweGYwICsgKHZpZF9pbnB1dCAtIENYMjU4NDBfQ09NUE9TSVRFMSk7CisJfSBlbHNlIHsKKwkJaW50IGx1bWEgPSB2aWRfaW5wdXQgJiAweGYwOworCQlpbnQgY2hyb21hID0gdmlkX2lucHV0ICYgMHhmMDA7CiAKLQkJaWYgKHN0YXRlLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9QVlIxNTAgfHwKLQkJICAgIHN0YXRlLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9QVlIxNTBfV09SS0FST1VORCkgewotCQkJLyogQ0hfU0VMX0FEQzI9MSAqLwotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDEwMiwgfjB4MiwgMHgwMik7CisJCWlmICgodmlkX2lucHV0ICYgfjB4ZmYwKSB8fAorCQkgICAgbHVtYSA8IENYMjU4NDBfU1ZJREVPX0xVTUExIHx8IGx1bWEgPiBDWDI1ODQwX1NWSURFT19MVU1BNCB8fAorCQkgICAgY2hyb21hIDwgQ1gyNTg0MF9TVklERU9fQ0hST01BNCB8fCBjaHJvbWEgPiBDWDI1ODQwX1NWSURFT19DSFJPTUE4KSB7CisJCQl2NGxfZXJyKGNsaWVudCwgIjB4JTA0eCBpcyBub3QgYSB2YWxpZCB2aWRlbyBpbnB1dCFcbiIsIHZpZF9pbnB1dCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCi0JCS8qIFZpZGVvIElucHV0IENvbnRyb2wgKi8KLQkJaWYgKHN0YXRlLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9QRzYwMCkgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTAzLCAweDExKTsKKwkJcmVnID0gMHhmMCArICgobHVtYSAtIENYMjU4NDBfU1ZJREVPX0xVTUExKSA+PiA0KTsKKwkJaWYgKGNocm9tYSA+PSBDWDI1ODQwX1NWSURFT19DSFJPTUE3KSB7CisJCQlyZWcgJj0gMHgzZjsKKwkJCXJlZyB8PSAoY2hyb21hIC0gQ1gyNTg0MF9TVklERU9fQ0hST01BNykgPj4gMjsKIAkJfSBlbHNlIHsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDEwMywgMHg0Nik7CisJCQlyZWcgJj0gMHhjZjsKKwkJCXJlZyB8PSAoY2hyb21hIC0gQ1gyNTg0MF9TVklERU9fQ0hST01BNCkgPj4gNDsKIAkJfQorCX0KIAotCQkvKiBJTlBVVF9NT0RFPTAgKi8KLQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDQwMSwgfjB4NiwgMHgwMCk7CisJc3dpdGNoIChhdWRfaW5wdXQpIHsKKwljYXNlIENYMjU4NDBfQVVESU9fU0VSSUFMOgorCQkvKiBkbyBub3RoaW5nLCB1c2Ugc2VyaWFsIGF1ZGlvIGlucHV0ICovCiAJCWJyZWFrOwotCi0JY2FzZSBDWDI1ODQwX0NPTVBPU0lURTA6Ci0JY2FzZSBDWDI1ODQwX0NPTVBPU0lURTE6Ci0JCWN4MjU4NDBfZGJnKCJub3cgc2V0dGluZyBDb21wb3NpdGUgaW5wdXRcbiIpOwotCi0JCS8qIFZpZGVvIElucHV0IENvbnRyb2wgKi8KLQkJaWYgKHN0YXRlLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9QRzYwMCkgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTAzLCAweDAwKTsKLQkJfSBlbHNlIHsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDEwMywgMHgwMik7Ci0JCX0KLQotCQkvKiBJTlBVVF9NT0RFPTAgKi8KLQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDQwMSwgfjB4NiwgMHgwMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDWDI1ODQwX1NWSURFTzA6Ci0JY2FzZSBDWDI1ODQwX1NWSURFTzE6Ci0JCWN4MjU4NDBfZGJnKCJub3cgc2V0dGluZyBTLVZpZGVvIGlucHV0XG4iKTsKLQotCQkvKiBDSF9TRUxfQURDMj0wICovCi0JCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHgxMDIsIH4weDIsIDB4MDApOwotCi0JCS8qIFZpZGVvIElucHV0IENvbnRyb2wgKi8KLQkJaWYgKHN0YXRlLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9QRzYwMCkgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTAzLCAweDAyKTsKLQkJfSBlbHNlIHsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDEwMywgMHgxMCk7Ci0JCX0KLQotCQkvKiBJTlBVVF9NT0RFPTEgKi8KLQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDQwMSwgfjB4NiwgMHgwMik7Ci0JCWJyZWFrOworCWNhc2UgQ1gyNTg0MF9BVURJTzQ6IHJlZyAmPSB+MHgzMDsgYnJlYWs7CisJY2FzZSBDWDI1ODQwX0FVRElPNTogcmVnICY9IH4weDMwOyByZWcgfD0gMHgxMDsgYnJlYWs7CisJY2FzZSBDWDI1ODQwX0FVRElPNjogcmVnICY9IH4weDMwOyByZWcgfD0gMHgyMDsgYnJlYWs7CisJY2FzZSBDWDI1ODQwX0FVRElPNzogcmVnICY9IH4weGMwOyBicmVhazsKKwljYXNlIENYMjU4NDBfQVVESU84OiByZWcgJj0gfjB4YzA7IHJlZyB8PSAweDQwOyBicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWN4MjU4NDBfZXJyKCIlZCBpcyBub3QgYSB2YWxpZCBpbnB1dCFcbiIsIGlucHV0KTsKKwkJdjRsX2VycihjbGllbnQsICIweCUwNHggaXMgbm90IGEgdmFsaWQgYXVkaW8gaW5wdXQhXG4iLCBhdWRfaW5wdXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzdGF0ZS0+aW5wdXQgPSBpbnB1dDsKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMDMsIHJlZyk7CisJLyogU2V0IElOUFVUX01PREUgdG8gQ29tcG9zaXRlICgwKSBvciBTLVZpZGVvICgxKSAqLworCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg0MDEsIH4weDYsIGlzX2NvbXBvc2l0ZSA/IDAgOiAweDAyKTsKKwkvKiBTZXQgQ0hfU0VMX0FEQzIgdG8gMSBpZiBpbnB1dCBjb21lcyBmcm9tIENIMyAqLworCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHgxMDIsIH4weDIsIChyZWcgJiAweDgwKSA9PSAwID8gMiA6IDApOworCS8qIFNldCBEVUFMX01PREVfQURDMiB0byAxIGlmIGlucHV0IGNvbWVzIGZyb20gYm90aCBDSDIgYW5kIENIMyAqLworCWlmICgocmVnICYgMHhjMCkgIT0gMHhjMCAmJiAocmVnICYgMHgzMCkgIT0gMHgzMCkKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDEwMiwgfjB4NCwgNCk7CisJZWxzZQorCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4MTAyLCB+MHg0LCAwKTsKKworCXN0YXRlLT52aWRfaW5wdXQgPSB2aWRfaW5wdXQ7CisJc3RhdGUtPmF1ZF9pbnB1dCA9IGF1ZF9pbnB1dDsKKwljeDI1ODQwX2F1ZGlvX3NldF9wYXRoKGNsaWVudCk7CiAJaW5wdXRfY2hhbmdlKGNsaWVudCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zOTUsMjMgKzM4OSwxNCBAQAogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgQ1gyNTg0MF9DSURfQ0FSRFRZUEU6Ci0JCXN3aXRjaCAoY3RybC0+dmFsdWUpIHsKLQkJY2FzZSBDQVJEVFlQRV9QVlIxNTA6Ci0JCWNhc2UgQ0FSRFRZUEVfUFZSMTUwX1dPUktBUk9VTkQ6Ci0JCWNhc2UgQ0FSRFRZUEVfUEc2MDA6Ci0JCQlzdGF0ZS0+Y2FyZHR5cGUgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCX0KLQotCQlzZXRfaW5wdXQoY2xpZW50LCBzdGF0ZS0+aW5wdXQpOworCWNhc2UgQ1gyNTg0MF9DSURfRU5BQkxFX1BWUjE1MF9XT1JLQVJPVU5EOgorCQlzdGF0ZS0+cHZyMTUwX3dvcmthcm91bmQgPSBjdHJsLT52YWx1ZTsKKwkJc2V0X2lucHV0KGNsaWVudCwgc3RhdGUtPnZpZF9pbnB1dCwgc3RhdGUtPmF1ZF9pbnB1dCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQljeDI1ODQwX2VycigiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsCisJCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLAogCQkJCSAgICBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQpAQCAtNDIxLDcgKzQwNiw3IEBACiAKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQljeDI1ODQwX2VycigiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLAorCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsCiAJCQkJICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC00MzEsNyArNDE2LDcgQEAKIAogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJY3gyNTg0MF9lcnIoImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLAorCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwKIAkJCQkgICAgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KQEAgLTQ0Miw3ICs0MjcsNyBAQAogCiAJY2FzZSBWNEwyX0NJRF9IVUU6CiAJCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCWN4MjU4NDBfZXJyKCJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CisJCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTQ1NSw2ICs0NDAsOSBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCXJldHVybiBjeDI1ODQwX2F1ZGlvKGNsaWVudCwgVklESU9DX1NfQ1RSTCwgY3RybCk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQ2NSwxMSArNDUzLDExIEBACiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBDWDI1ODQwX0NJRF9DQVJEVFlQRToKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+Y2FyZHR5cGU7CisJY2FzZSBDWDI1ODQwX0NJRF9FTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQ6CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPnB2cjE1MF93b3JrYXJvdW5kOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWN0cmwtPnZhbHVlID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MTQpICsgMTI4OworCQljdHJsLT52YWx1ZSA9IChzOCljeDI1ODQwX3JlYWQoY2xpZW50LCAweDQxNCkgKyAxMjg7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJCWN0cmwtPnZhbHVlID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MTUpID4+IDE7CkBAIC00NzgsNyArNDY2LDcgQEAKIAkJY3RybC0+dmFsdWUgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyMCkgPj4gMTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWN0cmwtPnZhbHVlID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjIpOworCQljdHJsLT52YWx1ZSA9IChzOCljeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyMik7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKQEAgLTUyNyw3ICs1MTUsNyBAQAogCiAJCWlmICgocGl4LT53aWR0aCAqIDE2IDwgSHNyYykgfHwgKEhzcmMgPCBwaXgtPndpZHRoKSB8fAogCQkgICAgKFZsaW5lcyAqIDggPCBWc3JjKSB8fCAoVnNyYyA8IFZsaW5lcykpIHsKLQkJCWN4MjU4NDBfZXJyKCIlZHglZCBpcyBub3QgYSB2YWxpZCBzaXplIVxuIiwKKwkJCXY0bF9lcnIoY2xpZW50LCAiJWR4JWQgaXMgbm90IGEgdmFsaWQgc2l6ZSFcbiIsCiAJCQkJICAgIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC01NDUsNyArNTMzLDcgQEAKIAkJZWxzZQogCQkJZmlsdGVyID0gMzsKIAotCQljeDI1ODQwX2RiZygiZGVjb2RlciBzZXQgc2l6ZSAlZHglZCAtPiBzY2FsZSAgJXV4JXVcbiIsCisJCXY0bF9kYmcoMSwgY2xpZW50LCAiZGVjb2RlciBzZXQgc2l6ZSAlZHglZCAtPiBzY2FsZSAgJXV4JXVcbiIsCiAJCQkgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsIEhTQywgVlNDKTsKIAogCQkvKiBIU0NBTEU9SFNDICovCkBAIC01NzQsMTcgKzU2Miw5OCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIGN4MjU4NDBfcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICAgICAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDI1NSwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEyOCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0sIHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICAgICAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSA2NCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0sIHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMjU1LAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gNjQsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwl9LCB7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfSFVFLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIkh1ZSIsCisJCS5taW5pbXVtICAgICAgID0gLTEyOCwKKwkJLm1heGltdW0gICAgICAgPSAxMjcsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkuZmxhZ3MgCSAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCisJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDU4ODgwLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiQmFsYW5jZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwl9LCB7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBU1MsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiQmFzcyIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICAgICAgICA9ICJUcmVibGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCisJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiBzdGF0aWMgaW50IGN4MjU4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgdm9pZCAqYXJnKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQlpbnQgcmVzdWx0ID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzcyB0byB0aGUKIAkgKiBjeDI1ODQwIHJlZ2lzdGVycyBmb3IgdGVzdGluZyAqLwpAQCAtNjE1LDE4ICs2ODQsMTYgQEAKIAkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgY21kLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JY2FzZSBBVURDX1NFVF9JTlBVVDoKLQkJcmVzdWx0ID0gY3gyNTg0MF9hdWRpbyhjbGllbnQsIGNtZCwgYXJnKTsKLQkJYnJlYWs7CisJCXJldHVybiBjeDI1ODQwX2F1ZGlvKGNsaWVudCwgY21kLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JCWN4MjU4NDBfZGJnKCJlbmFibGUgb3V0cHV0XG4iKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJlbmFibGUgb3V0cHV0XG4iKTsKIAkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCAweDhjKTsKIAkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCAweDA3KTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JCWN4MjU4NDBfZGJnKCJkaXNhYmxlIG91dHB1dFxuIik7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiZGlzYWJsZSBvdXRwdXRcbiIpOwogCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIDB4MDApOwogCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIDB4MDApOwogCQlicmVhazsKQEAgLTYzNiwyOCArNzAzLDU4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXN1bHQgPSBnZXRfdjRsY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKLQkJYnJlYWs7CisJCXJldHVybiBnZXRfdjRsY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKIAogCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmVzdWx0ID0gc2V0X3Y0bGN0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKWFyZyk7Ci0JCWJyZWFrOworCQlyZXR1cm4gc2V0X3Y0bGN0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKWFyZyk7CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI1ODQwX3FjdHJsKTsgaSsrKQorCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gY3gyNTg0MF9xY3RybFtpXS5pZCkgeworCQkJCW1lbWNweShxYywgJmN4MjU4NDBfcWN0cmxbaV0sIHNpemVvZigqcWMpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJY2FzZSBWSURJT0NfR19TVEQ6CiAJCSoodjRsMl9zdGRfaWQgKilhcmcgPSBjeDI1ODQwX2dldF92NGxzdGQoY2xpZW50KTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19TX1NURDoKLQkJcmVzdWx0ID0gc2V0X3Y0bHN0ZChjbGllbnQsICoodjRsMl9zdGRfaWQgKilhcmcpOworCQlzdGF0ZS0+cmFkaW8gPSAwOworCQlyZXR1cm4gc2V0X3Y0bHN0ZChjbGllbnQsICoodjRsMl9zdGRfaWQgKilhcmcpOworCisJY2FzZSBBVURDX1NFVF9SQURJTzoKKwkJc3RhdGUtPnJhZGlvID0gMTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19HX0lOUFVUOgotCQkqKGludCAqKWFyZyA9IHN0YXRlLT5pbnB1dDsKKwkJKihpbnQgKilhcmcgPSBzdGF0ZS0+dmlkX2lucHV0OwogCQlicmVhazsKIAogCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXJlc3VsdCA9IHNldF9pbnB1dChjbGllbnQsICooaW50ICopYXJnKTsKKwkJcmV0dXJuIHNldF9pbnB1dChjbGllbnQsICooZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0ICopYXJnLCBzdGF0ZS0+YXVkX2lucHV0KTsKKworCWNhc2UgVklESU9DX1NfQVVESU86CisJeworCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqaW5wdXQgPSBhcmc7CisKKwkJcmV0dXJuIHNldF9pbnB1dChjbGllbnQsIHN0YXRlLT52aWRfaW5wdXQsIGlucHV0LT5pbmRleCk7CisJfQorCisJY2FzZSBWSURJT0NfR19BVURJTzoKKwl7CisJCXN0cnVjdCB2NGwyX2F1ZGlvICppbnB1dCA9IGFyZzsKKworCQltZW1zZXQoaW5wdXQsIDAsIHNpemVvZigqaW5wdXQpKTsKKwkJaW5wdXQtPmluZGV4ID0gc3RhdGUtPmF1ZF9pbnB1dDsKIAkJYnJlYWs7CisJfQogCiAJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCWlucHV0X2NoYW5nZShjbGllbnQpOwpAQCAtNjcwLDYgKzc2Nyw5IEBACiAJCXU4IHZwcmVzID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MGEpICYgMHgxMDsKIAkJaW50IHZhbCA9IDA7CiAKKwkJaWYgKHN0YXRlLT5yYWRpbykKKwkJCWJyZWFrOworCiAJCXZ0LT5jYXBhYmlsaXR5IHw9CiAJCSAgICBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8CiAJCSAgICBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKQEAgLTcyNCwxMiArODI0LDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfR19GTVQ6Ci0JCXJlc3VsdCA9IGdldF92NGxmbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKLQkJYnJlYWs7CisJCXJldHVybiBnZXRfdjRsZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7CiAKIAljYXNlIFZJRElPQ19TX0ZNVDoKLQkJcmVzdWx0ID0gc2V0X3Y0bGZtdChjbGllbnQsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmcpOwotCQlicmVhazsKKwkJcmV0dXJuIHNldF92NGxmbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKIAogCWNhc2UgVklESU9DX0lOVF9SRVNFVDoKIAkJY3gyNTg0MF9pbml0aWFsaXplKGNsaWVudCwgMCk7CkBAIC03NDEsMTEgKzgzOSwxMCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWN4MjU4NDBfZXJyKCJpbnZhbGlkIGlvY3RsICV4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNzc1LDcgKzg3Miw3IEBACiAJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9jeDI1ODQwOwogCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAiY3gyNTg0MCIpOwogCi0JY3gyNTg0MF9kYmcoImRldGVjdGluZyBjeDI1ODQwIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsIGFkZHJlc3MgPDwgMSk7CisJdjRsX2RiZygxLCBjbGllbnQsICJkZXRlY3RpbmcgY3gyNTg0MCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLCBhZGRyZXNzIDw8IDEpOwogCiAJZGV2aWNlX2lkID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMDEpIDw8IDg7CiAJZGV2aWNlX2lkIHw9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTAwKTsKQEAgLTc4MywxMiArODgwLDEyIEBACiAJLyogVGhlIGhpZ2ggYnl0ZSBvZiB0aGUgZGV2aWNlIElEIHNob3VsZCBiZQogCSAqIDB4ODQgaWYgY2hpcCBpcyBwcmVzZW50ICovCiAJaWYgKChkZXZpY2VfaWQgJiAweGZmMDApICE9IDB4ODQwMCkgewotCQljeDI1ODQwX2RiZygiY3gyNTg0MCBub3QgZm91bmRcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgImN4MjU4NDAgbm90IGZvdW5kXG4iKTsKIAkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JY3gyNTg0MF9pbmZvKCJjeDI1JTN4LTIleCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwl2NGxfaW5mbyhjbGllbnQsICJjeDI1JTN4LTIleCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJICAgIChkZXZpY2VfaWQgJiAweGZmZjApID4+IDQsCiAJCSAgICAoZGV2aWNlX2lkICYgMHgwZikgPCAzID8gKGRldmljZV9pZCAmIDB4MGYpICsgMSA6IDMsCiAJCSAgICBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOwpAQCAtODAxLDEwICs4OTgsMTAgQEAKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKIAltZW1zZXQoc3RhdGUsIDAsIHNpemVvZihzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSkpOwotCXN0YXRlLT5pbnB1dCA9IENYMjU4NDBfVFVORVI7Ci0Jc3RhdGUtPmF1ZGNsa19mcmVxID0gVjRMMl9BVURDTEtfNDhfS0haOwotCXN0YXRlLT5hdWRpb19pbnB1dCA9IEFVRElPX1RVTkVSOwotCXN0YXRlLT5jYXJkdHlwZSA9IENBUkRUWVBFX1BWUjE1MDsKKwlzdGF0ZS0+dmlkX2lucHV0ID0gQ1gyNTg0MF9DT01QT1NJVEU3OworCXN0YXRlLT5hdWRfaW5wdXQgPSBDWDI1ODQwX0FVRElPODsKKwlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSA0ODAwMDsKKwlzdGF0ZS0+cHZyMTUwX3dvcmthcm91bmQgPSAwOwogCiAJY3gyNTg0MF9pbml0aWFsaXplKGNsaWVudCwgMSk7CiAKQEAgLTgxNSwxMSArOTEyLDcgQEAKIAogc3RhdGljIGludCBjeDI1ODQwX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKLSNlbHNlCi0JaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX0JUODQ4KQotI2VuZGlmCiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmN4MjU4NDBfZGV0ZWN0X2NsaWVudCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04NDYsOSArOTM5LDcgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJjeDI1ODQwIiwKIAl9LAotCiAJLmlkID0gSTJDX0RSSVZFUklEX0NYMjU4NDAsCi0KIAkuYXR0YWNoX2FkYXB0ZXIgPSBjeDI1ODQwX2F0dGFjaF9hZGFwdGVyLAogCS5kZXRhY2hfY2xpZW50ID0gY3gyNTg0MF9kZXRhY2hfY2xpZW50LAogCS5jb21tYW5kID0gY3gyNTg0MF9jb21tYW5kLApAQCAtODkyLDExICs5ODMsMTMgQEAKIAl1OCBwcmVmX21vZGUgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwOSk7CiAJdTggYWZjMCA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4ODBiKTsKIAl1OCBtdXRlX2N0bCA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4OGQzKTsKKwlpbnQgdmlkX2lucHV0ID0gc3RhdGUtPnZpZF9pbnB1dDsKKwlpbnQgYXVkX2lucHV0ID0gc3RhdGUtPmF1ZF9pbnB1dDsKIAljaGFyICpwOwogCi0JY3gyNTg0MF9pbmZvKCJWaWRlbyBzaWduYWw6ICAgICAgICAgICAgICAlc3ByZXNlbnRcbiIsCisJdjRsX2luZm8oY2xpZW50LCAiVmlkZW8gc2lnbmFsOiAgICAgICAgICAgICAgJXNwcmVzZW50XG4iLAogCQkgICAgKG1pY3JvY3RybF92aWRmbXQgJiAweDEwKSA/ICIiIDogIm5vdCAiKTsKLQljeDI1ODQwX2luZm8oIkRldGVjdGVkIGZvcm1hdDogICAgICAgICAgICVzXG4iLAorCXY0bF9pbmZvKGNsaWVudCwgIkRldGVjdGVkIGZvcm1hdDogICAgICAgICAgICVzXG4iLAogCQkgICAgZm10X3N0cnNbZ2VuX3N0YXQxICYgMHhmXSk7CiAKIAlzd2l0Y2ggKG1vZF9kZXRfc3RhdDApIHsKQEAgLTkxMSw3ICsxMDA0LDcgQEAKIAljYXNlIDB4ZmU6IHAgPSAiZm9yY2VkIG1vZGUiOyBicmVhazsKIAlkZWZhdWx0OiBwID0gIm5vdCBkZWZpbmVkIjsKIAl9Ci0JY3gyNTg0MF9pbmZvKCJEZXRlY3RlZCBhdWRpbyBtb2RlOiAgICAgICAlc1xuIiwgcCk7CisJdjRsX2luZm8oY2xpZW50LCAiRGV0ZWN0ZWQgYXVkaW8gbW9kZTogICAgICAgJXNcbiIsIHApOwogCiAJc3dpdGNoIChtb2RfZGV0X3N0YXQxKSB7CiAJY2FzZSAweDAwOiBwID0gIm5vdCBkZWZpbmVkIjsgYnJlYWs7CkBAIC05MzcsMTAgKzEwMzAsMTAgQEAKIAljYXNlIDB4ZmY6IHAgPSAibm8gZGV0ZWN0ZWQgYXVkaW8gc3RhbmRhcmQiOyBicmVhazsKIAlkZWZhdWx0OiBwID0gIm5vdCBkZWZpbmVkIjsKIAl9Ci0JY3gyNTg0MF9pbmZvKCJEZXRlY3RlZCBhdWRpbyBzdGFuZGFyZDogICAlc1xuIiwgcCk7Ci0JY3gyNTg0MF9pbmZvKCJBdWRpbyBtdXRlZDogICAgICAgICAgICAgICAlc1xuIiwKKwl2NGxfaW5mbyhjbGllbnQsICJEZXRlY3RlZCBhdWRpbyBzdGFuZGFyZDogICAlc1xuIiwgcCk7CisJdjRsX2luZm8oY2xpZW50LCAiQXVkaW8gbXV0ZWQ6ICAgICAgICAgICAgICAgJXNcbiIsCiAJCSAgICAobXV0ZV9jdGwgJiAweDIpID8gInllcyIgOiAibm8iKTsKLQljeDI1ODQwX2luZm8oIkF1ZGlvIG1pY3JvY29udHJvbGxlcjogICAgICVzXG4iLAorCXY0bF9pbmZvKGNsaWVudCwgIkF1ZGlvIG1pY3JvY29udHJvbGxlcjogICAgICVzXG4iLAogCQkgICAgKGRvd25sb2FkX2N0bCAmIDB4MTApID8gInJ1bm5pbmciIDogInN0b3BwZWQiKTsKIAogCXN3aXRjaCAoYXVkaW9fY29uZmlnID4+IDQpIHsKQEAgLTk2Miw3ICsxMDU1LDcgQEAKIAljYXNlIDB4MGY6IHAgPSAiYXV0b21hdGljIGRldGVjdGlvbiI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsKIAl9Ci0JY3gyNTg0MF9pbmZvKCJDb25maWd1cmVkIGF1ZGlvIHN0YW5kYXJkOiAlc1xuIiwgcCk7CisJdjRsX2luZm8oY2xpZW50LCAiQ29uZmlndXJlZCBhdWRpbyBzdGFuZGFyZDogJXNcbiIsIHApOwogCiAJaWYgKChhdWRpb19jb25maWcgPj4gNCkgPCAweEYpIHsKIAkJc3dpdGNoIChhdWRpb19jb25maWcgJiAweEYpIHsKQEAgLTk3OSw3ICsxMDcyLDcgQEAKIAkJY2FzZSAweDBhOiBwID0gIlNBUCI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7CiAJCX0KLQkJY3gyNTg0MF9pbmZvKCJDb25maWd1cmVkIGF1ZGlvIG1vZGU6ICAgICAlc1xuIiwgcCk7CisJCXY0bF9pbmZvKGNsaWVudCwgIkNvbmZpZ3VyZWQgYXVkaW8gbW9kZTogICAgICVzXG4iLCBwKTsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGF1ZGlvX2NvbmZpZyAmIDB4RikgewogCQljYXNlIDB4MDA6IHAgPSAiQkciOyBicmVhazsKQEAgLTk5NSwzMCArMTA4OCwyNyBAQAogCQljYXNlIDB4MGY6IHAgPSAiYXV0b21hdGljIHN0YW5kYXJkIGFuZCBtb2RlIGRldGVjdGlvbiI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7CiAJCX0KLQkJY3gyNTg0MF9pbmZvKCJDb25maWd1cmVkIGF1ZGlvIHN5c3RlbTogICAlc1xuIiwgcCk7CisJCXY0bF9pbmZvKGNsaWVudCwgIkNvbmZpZ3VyZWQgYXVkaW8gc3lzdGVtOiAgICVzXG4iLCBwKTsKIAl9CiAKLQljeDI1ODQwX2luZm8oIlNwZWNpZmllZCBzdGFuZGFyZDogICAgICAgICVzXG4iLAorCXY0bF9pbmZvKGNsaWVudCwgIlNwZWNpZmllZCBzdGFuZGFyZDogICAgICAgICVzXG4iLAogCQkgICAgdmlkZm10X3NlbCA/IGZtdF9zdHJzW3ZpZGZtdF9zZWxdIDogImF1dG9tYXRpYyBkZXRlY3Rpb24iKTsKIAotCXN3aXRjaCAoc3RhdGUtPmlucHV0KSB7Ci0JY2FzZSBDWDI1ODQwX0NPTVBPU0lURTA6IHAgPSAiQ29tcG9zaXRlIDAiOyBicmVhazsKLQljYXNlIENYMjU4NDBfQ09NUE9TSVRFMTogcCA9ICJDb21wb3NpdGUgMSI7IGJyZWFrOwotCWNhc2UgQ1gyNTg0MF9TVklERU8wOiBwID0gIlMtVmlkZW8gMCI7IGJyZWFrOwotCWNhc2UgQ1gyNTg0MF9TVklERU8xOiBwID0gIlMtVmlkZW8gMSI7IGJyZWFrOwotCWNhc2UgQ1gyNTg0MF9UVU5FUjogcCA9ICJUdW5lciI7IGJyZWFrOworCWlmICh2aWRfaW5wdXQgPj0gQ1gyNTg0MF9DT01QT1NJVEUxICYmCisJICAgIHZpZF9pbnB1dCA8PSBDWDI1ODQwX0NPTVBPU0lURTgpIHsKKwkJdjRsX2luZm8oY2xpZW50LCAiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgQ29tcG9zaXRlICVkXG4iLAorCQkJdmlkX2lucHV0IC0gQ1gyNTg0MF9DT01QT1NJVEUxICsgMSk7CisJfSBlbHNlIHsKKwkJdjRsX2luZm8oY2xpZW50LCAiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgUy1WaWRlbyAoTHVtYSBJbiVkLCBDaHJvbWEgSW4lZClcbiIsCisJCQkodmlkX2lucHV0ICYgMHhmMCkgPj4gNCwgKHZpZF9pbnB1dCAmIDB4ZjAwKSA+PiA4KTsKIAl9Ci0JY3gyNTg0MF9pbmZvKCJTcGVjaWZpZWQgaW5wdXQ6ICAgICAgICAgICAlc1xuIiwgcCk7Ci0JY3gyNTg0MF9pbmZvKCJTcGVjaWZpZWQgYXVkaW8gaW5wdXQ6ICAgICAlc1xuIiwKLQkJICAgIHN0YXRlLT5hdWRpb19pbnB1dCA9PSAwID8gIlR1bmVyIiA6ICJFeHRlcm5hbCIpOworCWlmIChhdWRfaW5wdXQpIHsKKwkJdjRsX2luZm8oY2xpZW50LCAiU3BlY2lmaWVkIGF1ZGlvIGlucHV0OiAgICAgVHVuZXIgKEluJWQpXG4iLCBhdWRfaW5wdXQpOworCX0gZWxzZSB7CisJCXY0bF9pbmZvKGNsaWVudCwgIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIEV4dGVybmFsXG4iKTsKKwl9CiAKLQlzd2l0Y2ggKHN0YXRlLT5hdWRjbGtfZnJlcSkgewotCWNhc2UgVjRMMl9BVURDTEtfNDQxX0tIWjogcCA9ICI0NC4xIGtIeiI7IGJyZWFrOwotCWNhc2UgVjRMMl9BVURDTEtfNDhfS0haOiBwID0gIjQ4IGtIeiI7IGJyZWFrOwotCWNhc2UgVjRMMl9BVURDTEtfMzJfS0haOiBwID0gIjMyIGtIeiI7IGJyZWFrOwotCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsKLQl9Ci0JY3gyNTg0MF9pbmZvKCJTcGVjaWZpZWQgYXVkaW9jbG9jayBmcmVxOiAlc1xuIiwgcCk7CisJdjRsX2luZm8oY2xpZW50LCAiU3BlY2lmaWVkIGF1ZGlvY2xvY2sgZnJlcTogJWQgSHpcbiIsIHN0YXRlLT5hdWRjbGtfZnJlcSk7CiAKIAlzd2l0Y2ggKHByZWZfbW9kZSAmIDB4ZikgewogCWNhc2UgMDogcCA9ICJtb25vL2xhbmd1YWdlIEEiOyBicmVhazsKQEAgLTEwMzEsNyArMTEyMSw3IEBACiAJY2FzZSA3OiBwID0gImxhbmd1YWdlIEFCIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOwogCX0KLQljeDI1ODQwX2luZm8oIlByZWZlcnJlZCBhdWRpbyBtb2RlOiAgICAgICVzXG4iLCBwKTsKKwl2NGxfaW5mbyhjbGllbnQsICJQcmVmZXJyZWQgYXVkaW8gbW9kZTogICAgICAlc1xuIiwgcCk7CiAKIAlpZiAoKGF1ZGlvX2NvbmZpZyAmIDB4ZikgPT0gMHhmKSB7CiAJCXN3aXRjaCAoKGFmYzAgPj4gMykgJiAweDMpIHsKQEAgLTEwNDAsNyArMTEzMCw3IEBACiAJCWNhc2UgMjogcCA9ICJhdXRvZGV0ZWN0IjsgYnJlYWs7CiAJCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsKIAkJfQotCQljeDI1ODQwX2luZm8oIlNlbGVjdGVkIDY1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKKwkJdjRsX2luZm8oY2xpZW50LCAiU2VsZWN0ZWQgNjUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOwogCiAJCXN3aXRjaCAoYWZjMCAmIDB4NykgewogCQljYXNlIDA6IHAgPSAiY2hyb21hIjsgYnJlYWs7CkBAIC0xMDUwLDYgKzExNDAsNiBAQAogCQljYXNlIDQ6IHAgPSAiYXV0b2RldGVjdCI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7CiAJCX0KLQkJY3gyNTg0MF9pbmZvKCJTZWxlY3RlZCA0NSBNSHogZm9ybWF0OiAgICAlc1xuIiwgcCk7CisJCXY0bF9pbmZvKGNsaWVudCwgIlNlbGVjdGVkIDQ1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtZmlybXdhcmUuYwppbmRleCBkZjlkNTBhLi5lMWE3ODIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWZpcm13YXJlLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KQEAgLTM4LDcgKzM3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZmFzdGZ3LCAiTG9hZCBmaXJtd2FyZSBmYXN0IFswPTEwME1IeiAxPTMzM01IeiAoZGVmYXVsdCldIik7CiBNT0RVTEVfUEFSTV9ERVNDKGZpcm13YXJlLCAiRmlybXdhcmUgaW1hZ2UgW2RlZmF1bHQ6ICIgRldGSUxFICJdIik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaTJjX2RlbGF5KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBkZWxheSkKK3N0YXRpYyB2b2lkIHNldF9pMmNfZGVsYXkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRlbGF5KQogewogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWxnb2QgPSBjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YTsKIApAQCAtNTIsNyArNTEsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2Z3X2xvYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIHN0YXJ0X2Z3X2xvYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAkvKiBETF9BRERSX0xCPTAgRExfQUREUl9IQj0wICovCiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4ODAwLCAweDAwKTsKQEAgLTY2LDcgKzY1LDcgQEAKIAkJc2V0X2kyY19kZWxheShjbGllbnQsIDMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5kX2Z3X2xvYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGVuZF9md19sb2FkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaWYgKGZhc3RmdykKIAkJc2V0X2kyY19kZWxheShjbGllbnQsIDEwKTsKQEAgLTc3LDM4ICs3Niw0NyBAQAogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDgwMywgMHgwMyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2Z3X2xvYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHNpemUpCitzdGF0aWMgaW50IGNoZWNrX2Z3X2xvYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHNpemUpCiB7CiAJLyogRExfQUREUl9IQiBETF9BRERSX0xCICovCiAJaW50IHMgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwMSkgPDwgODsKIAlzIHw9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4ODAwKTsKIAogCWlmIChzaXplICE9IHMpIHsKLQkJY3gyNTg0MF9lcnIoImZpcm13YXJlICVzIGxvYWQgZmFpbGVkXG4iLCBmaXJtd2FyZSk7CisJCXY0bF9lcnIoY2xpZW50LCAiZmlybXdhcmUgJXMgbG9hZCBmYWlsZWRcbiIsIGZpcm13YXJlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY3gyNTg0MF9pbmZvKCJsb2FkZWQgJXMgZmlybXdhcmUgKCVkIGJ5dGVzKVxuIiwgZmlybXdhcmUsIHNpemUpOworCXY0bF9pbmZvKGNsaWVudCwgImxvYWRlZCAlcyBmaXJtd2FyZSAoJWQgYnl0ZXMpXG4iLCBmaXJtd2FyZSwgc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZ3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICogZGF0YSwgaW50IHNpemUpCitzdGF0aWMgaW50IGZ3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICogZGF0YSwgaW50IHNpemUpCiB7Ci0JaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIHNpemUpIDwgc2l6ZSkgeworCWludCBzZW50OworCisJaWYgKChzZW50ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgc2l6ZSkpIDwgc2l6ZSkgewogCiAJCWlmIChmYXN0ZncpIHsKLQkJCWN4MjU4NDBfZXJyKCIzMzNNSHogaTJjIGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iKTsKKwkJCXY0bF9lcnIoY2xpZW50LCAiMzMzTUh6IGkyYyBmaXJtd2FyZSBsb2FkIGZhaWxlZFxuIik7CiAJCQlmYXN0ZncgPSAwOwogCQkJc2V0X2kyY19kZWxheShjbGllbnQsIDEwKTsKIAorCQkJaWYgKHNlbnQgPiAyKSB7CisJCQkJdTE2IGRsX2FkZHIgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwMSkgPDwgODsKKwkJCQlkbF9hZGRyIHw9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4ODAwKTsKKwkJCQlkbF9hZGRyIC09IHNlbnQgLSAyOworCQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDgwMSwgZGxfYWRkciA+PiA4KTsKKwkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4MDAsIGRsX2FkZHIgJiAweGZmKTsKKwkJCX0KKwogCQkJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIHNpemUpIDwgc2l6ZSkgewotCQkJCWN4MjU4NDBfZXJyCi0JCQkJICAgICgiMTAwTUh6IGkyYyBmaXJtd2FyZSBsb2FkIGZhaWxlZFxuIik7CisJCQkJdjRsX2VycihjbGllbnQsICIxMDBNSHogaTJjIGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVOT1NZUzsKIAkJCX0KIAogCQl9IGVsc2UgewotCQkJY3gyNTg0MF9lcnIoImZpcm13YXJlIGxvYWQgaTJjIGZhaWx1cmVcbiIpOworCQkJdjRsX2VycihjbGllbnQsICJmaXJtd2FyZSBsb2FkIGkyYyBmYWlsdXJlXG4iKTsKIAkJCXJldHVybiAtRU5PU1lTOwogCQl9CiAKQEAgLTEyNCw3ICsxMzIsNyBAQAogCWludCBzaXplLCBzZW5kLCByZXR2YWw7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZpcm13YXJlLCBGV0RFVihjbGllbnQpKSAhPSAwKSB7Ci0JCWN4MjU4NDBfZXJyKCJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgZmlybXdhcmUpOworCQl2NGxfZXJyKGNsaWVudCwgInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmaXJtd2FyZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYwppbmRleCAxM2JhNGUxLi4wNGQ4NzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYwpAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSAiY3gyNTg0MC5oIgogCi1zdGF0aWMgaW5saW5lIGludCBvZGRfcGFyaXR5KHU4IGMpCitzdGF0aWMgaW50IG9kZF9wYXJpdHkodTggYykKIHsKIAljIF49IChjID4+IDQpOwogCWMgXj0gKGMgPj4gMik7CkBAIC0zMSw3ICszMSw3IEBACiAJcmV0dXJuIGMgJiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkZWNvZGVfdnBzKHU4ICogZHN0LCB1OCAqIHApCitzdGF0aWMgaW50IGRlY29kZV92cHModTggKiBkc3QsIHU4ICogcCkKIHsKIAlzdGF0aWMgY29uc3QgdTggYmlwaGFzZV90YmxbXSA9IHsKIAkJMHhmMCwgMHg3OCwgMHg3MCwgMHhmMCwgMHhiNCwgMHgzYywgMHgzNCwgMHhiNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC5oCmluZGV4IDQwYWE1OWYuLmZkMjJmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAuaApAQCAtMjQsNDggKzI0LDYwIEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKLWV4dGVybiBpbnQgY3gyNTg0MF9kZWJ1ZzsKLQotI2RlZmluZSBjeDI1ODQwX2RiZyhmbXQsIGFyZy4uLikgZG8geyBpZiAoY3gyNTg0MF9kZWJ1ZykgXAotCXByaW50ayhLRVJOX0lORk8gIiVzIGRlYnVnICVkLSUwNHg6ICIgZm10LCBcCi0JICAgICAgIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGN4MjU4NDBfZXJyKGZtdCwgYXJnLi4uKSBkbyB7IFwKLQlwcmludGsoS0VSTl9FUlIgIiVzICVkLSUwNHg6ICIgZm10LCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkgICAgICAgaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjeDI1ODQwX2luZm8oZm10LCBhcmcuLi4pIGRvIHsgXAotCXByaW50ayhLRVJOX0lORk8gIiVzICVkLSUwNHg6ICIgZm10LCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkgICAgICAgaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDWDI1ODQwX0NJRF9DQVJEVFlQRSAoVjRMMl9DSURfUFJJVkFURV9CQVNFKzApCi0KLS8qIFRoZSBDQVJEVFlQRV9QVlIxNTBfV09SS0FST1VORCBjYXJkdHlwZSBhY3RpdmF0ZXMgYSB3b3JrYXJvdW5kIGZvciBhCi0gICBoYXJkd2FyZSBidWcgdGhhdCBpcyBwcmVzZW50IGluIFBWUjE1MCAoYW5kIHBvc3NpYmxlIFBWUjUwMCkgY2FyZHMgdGhhdAotICAgaGF2ZSBjZXJ0YWluIE5UU0MgdHVuZXJzICh0dmVlcHJvbSBtb2RlbCBudW1iZXJzIDg1LCA5OSBhbmQgMTEyKS4gVGhlCisvKiBFTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQgYWN0aXZhdGVzIGEgd29ya2Fyb3VuZCBmb3IgYSBoYXJkd2FyZSBidWcgdGhhdCBpcworICAgcHJlc2VudCBpbiBIYXVwcGF1Z2UgUFZSLTE1MCAoYW5kIHBvc3NpYmx5IFBWUi01MDApIGNhcmRzIHRoYXQgaGF2ZQorICAgY2VydGFpbiBOVFNDIHR1bmVycyAodHZlZXByb20gdHVuZXIgbW9kZWwgbnVtYmVycyA4NSwgOTkgYW5kIDExMikuIFRoZQogICAgYXVkaW8gYXV0b2RldGVjdCBmYWlscyBvbiBzb21lIGNoYW5uZWxzIGZvciB0aGVzZSBtb2RlbHMgYW5kIHRoZSB3b3JrYXJvdW5kCiAgICBpcyB0byBzZWxlY3QgdGhlIGF1ZGlvIHN0YW5kYXJkIGV4cGxpY2l0bHkuIE1hbnkgdGhhbmtzIHRvIEhhdXBwYXVnZSBmb3IKICAgIHByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uLiAqLwotZW51bSBjeDI1ODQwX2NhcmR0eXBlIHsKLQlDQVJEVFlQRV9QVlIxNTAsCi0JQ0FSRFRZUEVfUEc2MDAsCi0JQ0FSRFRZUEVfUFZSMTUwX1dPUktBUk9VTkQsCisjZGVmaW5lIENYMjU4NDBfQ0lEX0VOQUJMRV9QVlIxNTBfV09SS0FST1VORCAoVjRMMl9DSURfUFJJVkFURV9CQVNFKzApCisKK2VudW0gY3gyNTg0MF92aWRlb19pbnB1dCB7CisJLyogQ29tcG9zaXRlIHZpZGVvIGlucHV0cyBJbjEtSW44ICovCisJQ1gyNTg0MF9DT01QT1NJVEUxID0gMSwKKwlDWDI1ODQwX0NPTVBPU0lURTIsCisJQ1gyNTg0MF9DT01QT1NJVEUzLAorCUNYMjU4NDBfQ09NUE9TSVRFNCwKKwlDWDI1ODQwX0NPTVBPU0lURTUsCisJQ1gyNTg0MF9DT01QT1NJVEU2LAorCUNYMjU4NDBfQ09NUE9TSVRFNywKKwlDWDI1ODQwX0NPTVBPU0lURTgsCisKKwkvKiBTLVZpZGVvIGlucHV0cyBjb25zaXN0IG9mIG9uZSBsdW1hIGlucHV0IChJbjEtSW40KSBPUmVkIHdpdGggb25lCisJICAgY2hyb21hIGlucHV0IChJbjUtSW44KSAqLworCUNYMjU4NDBfU1ZJREVPX0xVTUExID0gMHgxMCwKKwlDWDI1ODQwX1NWSURFT19MVU1BMiA9IDB4MjAsCisJQ1gyNTg0MF9TVklERU9fTFVNQTMgPSAweDMwLAorCUNYMjU4NDBfU1ZJREVPX0xVTUE0ID0gMHg0MCwKKwlDWDI1ODQwX1NWSURFT19DSFJPTUE0ID0gMHg0MDAsCisJQ1gyNTg0MF9TVklERU9fQ0hST01BNSA9IDB4NTAwLAorCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTYgPSAweDYwMCwKKwlDWDI1ODQwX1NWSURFT19DSFJPTUE3ID0gMHg3MDAsCisJQ1gyNTg0MF9TVklERU9fQ0hST01BOCA9IDB4ODAwLAorCisJLyogUy1WaWRlbyBhbGlhc2VzIGZvciBjb21tb24gbHVtYS9jaHJvbWEgY29tYmluYXRpb25zICovCisJQ1gyNTg0MF9TVklERU8xID0gMHg1MTAsCisJQ1gyNTg0MF9TVklERU8yID0gMHg2MjAsCisJQ1gyNTg0MF9TVklERU8zID0gMHg3MzAsCisJQ1gyNTg0MF9TVklERU80ID0gMHg4NDAsCiB9OwogCi1lbnVtIGN4MjU4NDBfaW5wdXQgewotCUNYMjU4NDBfVFVORVIsCi0JQ1gyNTg0MF9DT01QT1NJVEUwLAotCUNYMjU4NDBfQ09NUE9TSVRFMSwKLQlDWDI1ODQwX1NWSURFTzAsCi0JQ1gyNTg0MF9TVklERU8xCitlbnVtIGN4MjU4NDBfYXVkaW9faW5wdXQgeworCS8qIEF1ZGlvIGlucHV0czogc2VyaWFsIG9yIEluNC1JbjggKi8KKwlDWDI1ODQwX0FVRElPX1NFUklBTCwKKwlDWDI1ODQwX0FVRElPNCA9IDQsCisJQ1gyNTg0MF9BVURJTzUsCisJQ1gyNTg0MF9BVURJTzYsCisJQ1gyNTg0MF9BVURJTzcsCisJQ1gyNTg0MF9BVURJTzgsCiB9OwogCiBzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSB7Ci0JZW51bSBjeDI1ODQwX2NhcmR0eXBlIGNhcmR0eXBlOwotCWVudW0gY3gyNTg0MF9pbnB1dCBpbnB1dDsKLQlpbnQgYXVkaW9faW5wdXQ7Ci0JZW51bSB2NGwyX2F1ZGlvX2Nsb2NrX2ZyZXEgYXVkY2xrX2ZyZXE7CisJaW50IHB2cjE1MF93b3JrYXJvdW5kOworCWludCByYWRpbzsKKwllbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0OworCWVudW0gY3gyNTg0MF9hdWRpb19pbnB1dCBhdWRfaW5wdXQ7CisJdTMyIGF1ZGNsa19mcmVxOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTg0LDYgKzk2LDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDI1ODUwLWF1ZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogaW50IGN4MjU4NDBfYXVkaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3ZvaWQgY3gyNTg0MF9hdWRpb19zZXRfcGF0aChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IDg1YmE0MTAuLjc2ZmNiNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC0yOSw2ICsyOSwyMSBAQAogCSAgWW91IG11c3QgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgRFZCL0FUU0MgZGVtb2R1bGF0b3JzLgogCSAgSWYgeW91IGFyZSB1bnN1cmUgd2hpY2ggeW91IG5lZWQsIGNob29zZSBhbGwgb2YgdGhlbS4KIAorY29uZmlnIFZJREVPX0NYODhfQUxTQQorCXRyaXN0YXRlICJBTFNBIERNQSBhdWRpbyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fQ1g4OCAmJiBTTkQKKwlzZWxlY3QgU05EX1BDTV9PU1MKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBkaXJlY3QgKERNQSkgYXVkaW8gb24KKwkgIENvbmV4YW50IDIzODh4IGJhc2VkIFRWIGNhcmRzLgorCSAgSXQgb25seSB3b3JrcyB3aXRoIGJvYXJkcyB3aXRoIGZ1bmN0aW9uIDAxIGVuYWJsZWQuCisJICBUbyBjaGVjayBpZiB5b3VyIGJvYXJkIHN1cHBvcnRzLCB1c2UgbHNwY2kgLW4uCisJICBJZiBzdXBwb3J0ZWQsIHlvdSBzaG91bGQgc2VlIDE0NzE6ODgwMSBvciAxNDcxOjg4MTEKKwkgIFBDSSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4ODgtYWxzYS4KKwogY29uZmlnIFZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKIAlib29sICJCdWlsZCBhbGwgc3VwcG9ydGVkIGZyb250ZW5kcyBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIKIAlkZWZhdWx0IHkKQEAgLTM4LDYgKzUzLDcgQEAKIAlzZWxlY3QgRFZCX0NYMjI3MDIKIAlzZWxlY3QgRFZCX0xHRFQzMzBYCiAJc2VsZWN0IERWQl9OWFQyMDBYCisJc2VsZWN0IERWQl9DWDI0MTIzCiAJLS0taGVscC0tLQogCSAgVGhpcyBidWlsZHMgY3g4OC1kdmIgd2l0aCBhbGwgY3VycmVudGx5IHN1cHBvcnRlZCBmcm9udGVuZAogCSAgZGVtb2R1bGF0b3JzLiAgSWYgeW91IHdpc2ggdG8gdHdlYWsgeW91ciBjb25maWd1cmF0aW9uLCBhbmQKQEAgLTg5LDMgKzEwNSwxMiBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTlhUMjAwMi9OWFQyMDA0IGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fQ1g4OF9EVkJfQ1gyNDEyMworCWJvb2wgIkNvbmV4YW50IENYMjQxMjMgRFZCLVMgU3VwcG9ydCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9DWDI0MTIzCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIERWQi1TIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBDWDI0MTIzIGRlbW9kdWxhdG9yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCmluZGV4IDU0NDAxYjAuLmU0YjIxMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiBjeDg4MDItb2Jqcwk6PSBjeDg4LW1wZWcubwogCiBvYmotJChDT05GSUdfVklERU9fQ1g4OCkgKz0gY3g4OHh4Lm8gY3g4ODAwLm8gY3g4ODAyLm8gY3g4OC1ibGFja2JpcmQubwotb2JqLSQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSArPSBjeDg4LWR2Yi5vCitvYmotJChDT05GSUdfVklERU9fQ1g4OF9EVkIpICs9IGN4ODgtZHZiLm8gY3g4OC12cDMwNTQtaTJjLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCiBFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCkBAIC0xNiw1ICsxNiw3IEBACiBleHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX0xHRFQzMzBYKSAgKz0gLURIQVZFX0xHRFQzMzBYPTEKIGV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfTVQzNTIpICAgICArPSAtREhBVkVfTVQzNTI9MQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9OWFQyMDBYKSAgICs9IC1ESEFWRV9OWFQyMDBYPTEKK2V4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfQ1gyNDEyMykgICArPSAtREhBVkVfQ1gyNDEyMz0xCitleHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fQ1g4OF9EVkIpKz0gLURIQVZFX1ZQMzA1NF9JMkM9MQogCiBFWFRSQV9DRkxBR1MgKz0gJChleHRyYS1jZmxhZ3MteSkgJChleHRyYS1jZmxhZ3MtbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njk1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC0wLDAgKzEsODQ4IEBACisvKgorICoKKyAqICBTdXBwb3J0IGZvciBhdWRpbyBjYXB0dXJlCisgKiAgUENJIGZ1bmN0aW9uICMxIG9mIHRoZSBjeDIzODh4LgorICoKKyAqICAgIChjKSAyMDA1LDIwMDYgUmljYXJkbyBDZXJxdWVpcmEgPHY0bEBjZXJxdWVpcmEub3JnPgorICogICAgKGMpIDIwMDUgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPgorICogICAgQmFzZWQgb24gYSBkdW1teSBjeDg4IG1vZHVsZSBieSBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CisgKiAgICBCYXNlZCBvbiBkdW1teS5jIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjaW5jbHVkZSAiY3g4OC5oIgorI2luY2x1ZGUgImN4ODgtcmVnLmgiCisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCxmbXQsIGFyZy4uLikJaWYgKGRlYnVnID49IGxldmVsKSBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMTogIiBmbXQsIGNoaXAtPmNvcmUtPm5hbWUgLCAjIyBhcmcpCisKKyNkZWZpbmUgZHByaW50a19jb3JlKGxldmVsLGZtdCwgYXJnLi4uKQlpZiAoZGVidWcgPj0gbGV2ZWwpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMvMTogIiBmbXQsIGNoaXAtPmNvcmUtPm5hbWUgLCAjIyBhcmcpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlEYXRhIHR5cGUgZGVjbGFyYXRpb25zIC0gQ2FuIGJlIG1vZGVkIHRvIGEgaGVhZGVyIGZpbGUgbGF0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGVzZSBjYW4gYmUgcmVwbGFjZWQgYWZ0ZXIgZG9uZSAqLworI2RlZmluZSBNSVhFUl9BRERSX0xBU1QgTUFYX0NYODhfSU5QVVQKKworc3RydWN0IGN4ODhfYXVkaW9fZGV2IHsKKwlzdHJ1Y3QgY3g4OF9jb3JlICAgICAgICAgICAqY29yZTsKKwlzdHJ1Y3QgY3g4OF9kbWFxdWV1ZSAgICAgICBxOworCisJLyogcGNpIGkvbyAqLworCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpwY2k7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgcGNpX3JldixwY2lfbGF0OworCisJLyogYXVkaW8gY29udHJvbHMgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBpcnE7CisKKwlzbmRfY2FyZF90ICAgICAgICAgICAgICAgICAqY2FyZDsKKworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgIHJlZ19sb2NrOworCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgZG1hX3NpemU7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcGVyaW9kX3NpemU7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgbnVtX3BlcmlvZHM7CisKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmIGRtYV9yaXNjOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgbWl4ZXJfdm9sdW1lW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlX3NvdXJjZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CisKKwlsb25nIGludCByZWFkX2NvdW50OworCWxvbmcgaW50IHJlYWRfb2Zmc2V0OworCisJc3RydWN0IGN4ODhfYnVmZmVyICAgKmJ1ZjsKKworCWxvbmcgb3BlbmVkOworCXNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbTsKKworfTsKK3R5cGVkZWYgc3RydWN0IGN4ODhfYXVkaW9fZGV2IHNuZF9jeDg4X2NhcmRfdDsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlNb2R1bGUgZ2xvYmFsIHN0YXRpYyB2YXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gezEsIFsxIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKK3N0YXRpYyBzbmRfY2FyZF90ICpzbmRfY3g4OF9jYXJkc1tTTkRSVl9DQVJEU107CisKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgY3g4OHggc291bmRjYXJkLiBkZWZhdWx0IGVuYWJsZWQuIik7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgY3g4OHggY2FwdHVyZSBpbnRlcmZhY2UocykuIik7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCQlNb2R1bGUgbWFjcm9zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4OHggYmFzZWQgVFYgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIlJpY2FyZG8gQ2VycXVlaXJhIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDb25leGFudCwyMzg4MX0sIgorCQkJInt7Q29uZXhhbnQsMjM4ODJ9LCIKKwkJCSJ7e0NvbmV4YW50LDIzODgzfSIpOworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWcsaW50LDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlNb2R1bGUgc3BlY2lmaWMgZnVudGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQk9BUkQgU3BlY2lmaWM6IFNldHMgYXVkaW8gRE1BCisgKi8KKworaW50IF9jeDg4X3N0YXJ0X2F1ZGlvX2RtYShzbmRfY3g4OF9jYXJkX3QgKmNoaXApCit7CisJc3RydWN0IGN4ODhfYnVmZmVyICAgKmJ1ZiA9IGNoaXAtPmJ1ZjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlPWNoaXAtPmNvcmU7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqYXVkaW9fY2ggPSAmY3g4OF9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gyNV07CisKKworCWRwcmludGsoMSwgIlN0YXJ0aW5nIGF1ZGlvIERNQSBmb3IgJWkgYnl0ZXMvbGluZSBhbmQgJWkgKCVpKSBsaW5lcyBhdCBhZGRyZXNzICUwOHhcbiIsYnVmLT5icGwsIGNoaXAtPm51bV9wZXJpb2RzLCBhdWRpb19jaC0+Zmlmb19zaXplIC8gYnVmLT5icGwsIGF1ZGlvX2NoLT5maWZvX3N0YXJ0KTsKKworCS8qIHNldHVwIGZpZm8gKyBmb3JtYXQgLSBvdXQgY2hhbm5lbCAqLworCWN4ODhfc3JhbV9jaGFubmVsX3NldHVwKGNoaXAtPmNvcmUsICZjeDg4X3NyYW1fY2hhbm5lbHNbU1JBTV9DSDI1XSwKKwkJCQlidWYtPmJwbCwgYnVmLT5yaXNjLmRtYSk7CisKKwkvKiBzZXRzIGJwbCBzaXplICovCisJY3hfd3JpdGUoTU9fQVVERF9MTkdUSCwgYnVmLT5icGwpOworCisJLyogcmVzZXQgY291bnRlciAqLworCWN4X3dyaXRlKE1PX0FVRERfR1BDTlRSTCxHUF9DT1VOVF9DT05UUk9MX1JFU0VUKTsKKworCWRwcmludGsoMSwiRW5hYmxpbmcgSVJRLCBzZXR0aW5nIG1hc2sgZnJvbSAweCV4IHRvIDB4JXhcbiIsY2hpcC0+Y29yZS0+cGNpX2lycW1hc2ssKGNoaXAtPmNvcmUtPnBjaV9pcnFtYXNrIHwgMHgwMikpOworCS8qIGVuYWJsZSBpcnFzICovCisJY3hfc2V0KE1PX1BDSV9JTlRNU0ssIGNoaXAtPmNvcmUtPnBjaV9pcnFtYXNrIHwgMHgwMik7CisKKworCS8qIEVuYWJsZXMgY29ycmVzcG9uZGluZyBiaXRzIGF0IEFVRF9JTlRfU1RBVCAqLworCWN4X3dyaXRlKE1PX0FVRF9JTlRNU0ssCisJCQkoMTw8MTYpfAorCQkJKDE8PDEyKXwKKwkJCSgxPDw0KXwKKwkJCSgxPDwwKQorCQkJKTsKKworCS8qIHN0YXJ0IGRtYSAqLworCWN4X3NldChNT19ERVZfQ05UUkwyLCAoMTw8NSkpOyAvKiBFbmFibGVzIFJpc2MgUHJvY2Vzc29yICovCisJY3hfc2V0KE1PX0FVRF9ETUFDTlRSTCwgMHgxMSk7IC8qIGF1ZGlvIGRvd25zdHJlYW0gRklGTyBhbmQgUklTQyBlbmFibGUgKi8KKworCWlmIChkZWJ1ZykKKwkJY3g4OF9zcmFtX2NoYW5uZWxfZHVtcChjaGlwLT5jb3JlLCAmY3g4OF9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gyNV0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCT0FSRCBTcGVjaWZpYzogUmVzZXRzIGF1ZGlvIERNQQorICovCitpbnQgX2N4ODhfc3RvcF9hdWRpb19kbWEoc25kX2N4ODhfY2FyZF90ICpjaGlwKQoreworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU9Y2hpcC0+Y29yZTsKKwlkcHJpbnRrKDEsICJTdG9wcGluZyBhdWRpbyBETUFcbiIpOworCisJLyogc3RvcCBkbWEgKi8KKwljeF9jbGVhcihNT19BVURfRE1BQ05UUkwsIDB4MTEpOworCisJLyogZGlzYWJsZSBpcnFzICovCisJY3hfY2xlYXIoTU9fUENJX0lOVE1TSywgMHgwMik7CisJY3hfY2xlYXIoTU9fQVVEX0lOVE1TSywKKwkJCSgxPDwxNil8CisJCQkoMTw8MTIpfAorCQkJKDE8PDQpfAorCQkJKDE8PDApCisJCQkpOworCisJaWYgKGRlYnVnKQorCQljeDg4X3NyYW1fY2hhbm5lbF9kdW1wKGNoaXAtPmNvcmUsICZjeDg4X3NyYW1fY2hhbm5lbHNbU1JBTV9DSDI1XSk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfSVJRX0xPT1AgMTAKKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBJUlEgZG1hIGJpdHMKKyAqLworc3RhdGljIGNoYXIgKmN4ODhfYXVkX2lycXNbMzJdID0geworCSJkbl9yaXNjaTEiLCAidXBfcmlzY2kxIiwgInJkc19kbl9yaXNjMSIsIC8qIDAtMiAqLworCU5VTEwsCQkJCQkgIC8qIHJlc2VydmVkICovCisJImRuX3Jpc2NpMiIsICJ1cF9yaXNjaTIiLCAicmRzX2RuX3Jpc2MyIiwgLyogNC02ICovCisJTlVMTCwJCQkJCSAgLyogcmVzZXJ2ZWQgKi8KKwkiZG5mX29mIiwgInVwZl91ZiIsICJyZHNfZG5mX3VmIiwJICAvKiA4LTEwICovCisJTlVMTCwJCQkJCSAgLyogcmVzZXJ2ZWQgKi8KKwkiZG5fc3luYyIsICJ1cF9zeW5jIiwgInJkc19kbl9zeW5jIiwJICAvKiAxMi0xNCAqLworCU5VTEwsCQkJCQkgIC8qIHJlc2VydmVkICovCisJIm9wY19lcnIiLCAicGFyX2VyciIsICJyaXBfZXJyIiwJICAvKiAxNi0xOCAqLworCSJwY2lfYWJvcnQiLCAiYmVyX2lycSIsICJtY2hnX2lycSIJICAvKiAxOS0yMSAqLworfTsKKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBUaHJlYXRzIElSUSBhdWRpbyBzcGVjaWZpYyBjYWxscworICovCitzdGF0aWMgdm9pZCBjeDg4MDFfYXVkX2lycShzbmRfY3g4OF9jYXJkX3QgKmNoaXApCit7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGNoaXAtPmNvcmU7CisJdTMyIHN0YXR1cywgbWFzazsKKwl1MzIgY291bnQ7CisKKwlzdGF0dXMgPSBjeF9yZWFkKE1PX0FVRF9JTlRTVEFUKTsKKwltYXNrICAgPSBjeF9yZWFkKE1PX0FVRF9JTlRNU0spOworCWlmICgwID09IChzdGF0dXMgJiBtYXNrKSkgeworCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCQlyZXR1cm47CisJfQorCWN4X3dyaXRlKE1PX0FVRF9JTlRTVEFULCBzdGF0dXMpOworCWlmIChkZWJ1ZyA+IDEgIHx8ICAoc3RhdHVzICYgbWFzayAmIH4weGZmKSkKKwkJY3g4OF9wcmludF9pcnFiaXRzKGNvcmUtPm5hbWUsICJpcnEgYXVkIiwKKwkJCQkgICBjeDg4X2F1ZF9pcnFzLCBzdGF0dXMsIG1hc2spOworCS8qIHJpc2Mgb3AgY29kZSBlcnJvciAqLworCWlmIChzdGF0dXMgJiAoMSA8PCAxNikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMvMDogYXVkaW8gcmlzYyBvcCBjb2RlIGVycm9yXG4iLGNvcmUtPm5hbWUpOworCQljeF9jbGVhcihNT19BVURfRE1BQ05UUkwsIDB4MTEpOworCQljeDg4X3NyYW1fY2hhbm5lbF9kdW1wKGNvcmUsICZjeDg4X3NyYW1fY2hhbm5lbHNbU1JBTV9DSDI1XSk7CisJfQorCisJLyogcmlzYzEgZG93bnN0cmVhbSAqLworCWlmIChzdGF0dXMgJiAweDAxKSB7CisJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCQljb3VudCA9IGN4X3JlYWQoTU9fQVVERF9HUENOVCk7CisJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJCWlmIChjaGlwLT5yZWFkX2NvdW50ID09IDApCisJCQljaGlwLT5yZWFkX2NvdW50ICs9IGNoaXAtPmRtYV9zaXplOworCX0KKworCWlmICAoY2hpcC0+cmVhZF9jb3VudCA+PSBjaGlwLT5wZXJpb2Rfc2l6ZSkgeworCQlkcHJpbnRrKDIsICJFbGFwc2luZyBwZXJpb2RcbiIpOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnN1YnN0cmVhbSk7CisJfQorCisJZHByaW50aygzLCJMZWF2aW5nIGF1ZGlvIElSUSBoYW5kbGVyLi4uXG4iKTsKKworCS8qIEZJWE1FOiBBbnkgb3RoZXIgc3RhdHVzIHNob3VsZCBkZXNlcnZlIGEgc3BlY2lhbCBoYW5kbGluZz8gKi8KK30KKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBIYW5kbGVzIElSUSBjYWxscworICovCitzdGF0aWMgaXJxcmV0dXJuX3QgY3g4ODAxX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gY2hpcC0+Y29yZTsKKwl1MzIgc3RhdHVzOworCWludCBsb29wLCBoYW5kbGVkID0gMDsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBNQVhfSVJRX0xPT1A7IGxvb3ArKykgeworCQlzdGF0dXMgPSBjeF9yZWFkKE1PX1BDSV9JTlRTVEFUKSAmIChjb3JlLT5wY2lfaXJxbWFzayB8IDB4MDIpOworCQlpZiAoMCA9PSBzdGF0dXMpCisJCQlnb3RvIG91dDsKKwkJZHByaW50ayggMywgImN4ODgwMV9pcnFcbiIgKTsKKwkJZHByaW50ayggMywgIiAgICBsb29wOiAlZC8lZFxuIiwgbG9vcCwgTUFYX0lSUV9MT09QICk7CisJCWRwcmludGsoIDMsICIgICAgc3RhdHVzOiAlZFxuIiwgc3RhdHVzICk7CisJCWhhbmRsZWQgPSAxOworCQljeF93cml0ZShNT19QQ0lfSU5UU1RBVCwgc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgMHgwMikKKwkJeworCQkJZHByaW50ayggMiwgIiAgICBBTFNBIElSUSBoYW5kbGluZ1xuIiApOworCQkJY3g4ODAxX2F1ZF9pcnEoY2hpcCk7CisJCX0KKwl9OworCisJaWYgKE1BWF9JUlFfTE9PUCA9PSBsb29wKSB7CisJCWRwcmludGsoIDAsICJjbGVhcmluZyBtYXNrXG4iICk7CisJCWRwcmludGsoMSwiJXMvMDogaXJxIGxvb3AgLS0gY2xlYXJpbmcgbWFza1xuIiwKKwkJICAgICAgIGNvcmUtPm5hbWUpOworCQljeF9jbGVhcihNT19QQ0lfSU5UTVNLLDB4MDIpOworCX0KKworIG91dDoKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworCitzdGF0aWMgaW50IGRzcF9idWZmZXJfZnJlZShzbmRfY3g4OF9jYXJkX3QgKmNoaXApCit7CisJQlVHX09OKCFjaGlwLT5kbWFfc2l6ZSk7CisKKwlkcHJpbnRrKDIsIkZyZWVpbmcgYnVmZmVyXG4iKTsKKwl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKGNoaXAtPnBjaSwgJmNoaXAtPmRtYV9yaXNjKTsKKwl2aWRlb2J1Zl9kbWFfZnJlZSgmY2hpcC0+ZG1hX3Jpc2MpOworCWJ0Y3hfcmlzY21lbV9mcmVlKGNoaXAtPnBjaSwmY2hpcC0+YnVmLT5yaXNjKTsKKwlrZnJlZShjaGlwLT5idWYpOworCisJY2hpcC0+ZG1hX3NpemUgPSAwOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkJQUxTQSBQQ00gSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERpZ2l0YWwgaGFyZHdhcmUgZGVmaW5pdGlvbgorICovCitzdGF0aWMgc25kX3BjbV9oYXJkd2FyZV90IHNuZF9jeDg4X2RpZ2l0YWxfaHcgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKworCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPQkJNDgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gKDIqMjA0OCksCisJLnBlcmlvZF9ieXRlc19taW4gPSAyNTYsCisJLnBlcmlvZF9ieXRlc19tYXggPSAyMDQ4LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMTYsCit9OworCisvKgorICogYXVkaW8gcGNtIGNhcHR1cmUgcnVudGltZSBmcmVlCisgKi8KK3N0YXRpYyB2b2lkIHNuZF9jYXJkX2N4ODhfcnVudGltZV9mcmVlKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lKQoreworfQorLyoKKyAqIGF1ZGlvIHBjbSBjYXB0dXJlIG9wZW4gY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3g4OF9wY21fb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWludCBlcnI7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmY2hpcC0+b3BlbmVkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBfZXJyb3I7CisKKwljaGlwLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisKKwljaGlwLT5yZWFkX2NvdW50ID0gMDsKKwljaGlwLT5yZWFkX29mZnNldCA9IDA7CisKKwlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9jeDg4X3J1bnRpbWVfZnJlZTsKKwlydW50aW1lLT5odyA9IHNuZF9jeDg4X2RpZ2l0YWxfaHc7CisKKwlyZXR1cm4gMDsKK19lcnJvcjoKKwlkcHJpbnRrKDEsIkVycm9yIG9wZW5pbmcgUENNIVxuIik7CisJY2xlYXJfYml0KDAsICZjaGlwLT5vcGVuZWQpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIGF1ZGlvIGNsb3NlIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4ODhfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQoreworCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWNsZWFyX2JpdCgwLCAmY2hpcC0+b3BlbmVkKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBod19wYXJhbXMgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3g4OF9od19wYXJhbXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKwkJCQkgc25kX3BjbV9od19wYXJhbXNfdCAqIGh3X3BhcmFtcykKK3sKKwlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGN4ODhfYnVmZmVyICpidWY7CisKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSkgeworCQlkc3BfYnVmZmVyX2ZyZWUoY2hpcCk7CisJCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCX0KKworCisJY2hpcC0+cGVyaW9kX3NpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7CisJY2hpcC0+bnVtX3BlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhod19wYXJhbXMpOworCWNoaXAtPmRtYV9zaXplID0gY2hpcC0+cGVyaW9kX3NpemUgKiBwYXJhbXNfcGVyaW9kcyhod19wYXJhbXMpOworCisJQlVHX09OKCFjaGlwLT5kbWFfc2l6ZSk7CisKKwlkcHJpbnRrKDEsIlNldHRpbmcgYnVmZmVyXG4iKTsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpLEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGJ1ZiwwLHNpemVvZigqYnVmKSk7CisKKworCWJ1Zi0+dmIubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwlidWYtPnZiLndpZHRoICA9IGNoaXAtPnBlcmlvZF9zaXplOworCWJ1Zi0+dmIuaGVpZ2h0ID0gY2hpcC0+bnVtX3BlcmlvZHM7CisJYnVmLT52Yi5zaXplICAgPSBjaGlwLT5kbWFfc2l6ZTsKKwlidWYtPnZiLmZpZWxkICA9IFY0TDJfRklFTERfTk9ORTsKKworCXZpZGVvYnVmX2RtYV9pbml0KCZidWYtPnZiLmRtYSk7CisJdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKCZidWYtPnZiLmRtYSxQQ0lfRE1BX0ZST01ERVZJQ0UsCisJCQkoUEFHRV9BTElHTihidWYtPnZiLnNpemUpID4+IFBBR0VfU0hJRlQpKTsKKworCXZpZGVvYnVmX2RtYV9wY2lfbWFwKGNoaXAtPnBjaSwmYnVmLT52Yi5kbWEpOworCisKKwljeDg4X3Jpc2NfZGF0YWJ1ZmZlcihjaGlwLT5wY2ksICZidWYtPnJpc2MsCisJCQlidWYtPnZiLmRtYS5zZ2xpc3QsCisJCQlidWYtPnZiLndpZHRoLCBidWYtPnZiLmhlaWdodCk7CisKKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwlidWYtPnZiLnN0YXRlID0gU1RBVEVfUFJFUEFSRUQ7CisKKwlidWYtPmJwbCA9IGNoaXAtPnBlcmlvZF9zaXplOworCWNoaXAtPmJ1ZiA9IGJ1ZjsKKwljaGlwLT5kbWFfcmlzYyA9IGJ1Zi0+dmIuZG1hOworCisJZHByaW50aygxLCJCdWZmZXIgcmVhZHkgYXQgJXVcbiIsY2hpcC0+ZG1hX3Jpc2MubnJfcGFnZXMpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5kbWFfcmlzYy52bWFsbG9jOworCXJldHVybiAwOworfQorCisvKgorICogaHcgZnJlZSBjYWxsYmFjaworICovCitzdGF0aWMgaW50IHNuZF9jeDg4X2h3X2ZyZWUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKworCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKSB7CisJCWRzcF9idWZmZXJfZnJlZShjaGlwKTsKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwcmVwYXJlIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4ODhfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHRyaWdnZXIgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3g4OF9jYXJkX3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWVycj1fY3g4OF9zdGFydF9hdWRpb19kbWEoY2hpcCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZXJyPV9jeDg4X3N0b3BfYXVkaW9fZG1hKGNoaXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnI9LUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBwb2ludGVyIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfY3g4OF9wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKK3sKKwlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpZiAoY2hpcC0+cmVhZF9jb3VudCkgeworCQljaGlwLT5yZWFkX2NvdW50IC09IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCQljaGlwLT5yZWFkX29mZnNldCArPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwkJaWYgKGNoaXAtPnJlYWRfb2Zmc2V0ID09IGNoaXAtPmRtYV9zaXplKQorCQkJY2hpcC0+cmVhZF9vZmZzZXQgPSAwOworCX0KKworCWRwcmludGsoMiwgIlBvaW50ZXIgdGltZSwgd2lsbCByZXR1cm4gJWxpLCByZWFkICVsaVxuIixjaGlwLT5yZWFkX29mZnNldCxjaGlwLT5yZWFkX2NvdW50KTsKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGNoaXAtPnJlYWRfb2Zmc2V0KTsKKworfQorCisvKgorICogb3BlcmF0b3JzCisgKi8KK3N0YXRpYyBzbmRfcGNtX29wc190IHNuZF9jeDg4X3BjbV9vcHMgPSB7CisJLm9wZW4gPSBzbmRfY3g4OF9wY21fb3BlbiwKKwkuY2xvc2UgPSBzbmRfY3g4OF9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gc25kX2N4ODhfaHdfcGFyYW1zLAorCS5od19mcmVlID0gc25kX2N4ODhfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9jeDg4X3ByZXBhcmUsCisJLnRyaWdnZXIgPSBzbmRfY3g4OF9jYXJkX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBzbmRfY3g4OF9wb2ludGVyLAorfTsKKworLyoKKyAqIGNyZWF0ZSBhIFBDTSBkZXZpY2UKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgc25kX2N4ODhfcGNtKHNuZF9jeDg4X2NhcmRfdCAqY2hpcCwgaW50IGRldmljZSwgY2hhciAqbmFtZSkKK3sKKwlpbnQgZXJyOworCXNuZF9wY21fdCAqcGNtOworCisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgbmFtZSwgZGV2aWNlLCAwLCAxLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJc3RyY3B5KHBjbS0+bmFtZSwgbmFtZSk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2N4ODhfcGNtX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCQlDT05UUk9MIElOVEVSRkFDRQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX2luZm8oc25kX2tjb250cm9sX3QgKmtjb250cm9sLCBzbmRfY3RsX2VsZW1faW5mb190ICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4M2Y7CisKKwlyZXR1cm4gMDsKK30KKworLyogT0sgLSBUT0RPOiB0ZXN0IGl0ICovCitzdGF0aWMgaW50IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX2dldChzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp2YWx1ZSkKK3sKKwlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZT1jaGlwLT5jb3JlOworCisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAweDNmIC0gKGN4X3JlYWQoQVVEX1ZPTF9DVEwpICYgMHgzZik7CisKKwlyZXR1cm4gMDsKK30KKworLyogT0sgLSBUT0RPOiB0ZXN0IGl0ICovCitzdGF0aWMgaW50IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX3B1dChzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp2YWx1ZSkKK3sKKwlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZT1jaGlwLT5jb3JlOworCWludCB2OworCXUzMiBvbGRfY29udHJvbDsKKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKKwlvbGRfY29udHJvbCA9IDB4M2YgLSAoY3hfcmVhZChBVURfVk9MX0NUTCkgJiAweDNmKTsKKwl2ID0gMHgzZiAtICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDB4M2YpOworCWN4X2FuZG9yKEFVRF9WT0xfQ1RMLCAweDNmLCB2KTsKKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKKworCXJldHVybiB2ICE9IG9sZF9jb250cm9sOworfQorCitzdGF0aWMgc25kX2tjb250cm9sX25ld190IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkNhcHR1cmUgVm9sdW1lIiwKKwkuaW5mbyA9IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX2luZm8sCisJLmdldCA9IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX2dldCwKKwkucHV0ID0gc25kX2N4ODhfY2FwdHVyZV92b2x1bWVfcHV0LAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJQmFzaWMgRmxvdyBmb3IgU291bmQgRGV2aWNlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQQ0kgSUQgVGFibGUgLSAxNGYxOjg4MDEgYW5kIDE0ZjE6ODgxMSBtZWFucyBmdW5jdGlvbiAxOiBBdWRpbworICogT25seSBib2FyZHMgd2l0aCBlZXByb20gYW5kIGJ5dGUgMSBhdCBlZXByb209MSBoYXZlIGl0CisgKi8KKworc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4OF9hdWRpb19wY2lfdGJsW10gPSB7CisJezB4MTRmMSwweDg4MDEsUENJX0FOWV9JRCxQQ0lfQU5ZX0lELDAsMCwwfSwKKwl7MHgxNGYxLDB4ODgxMSxQQ0lfQU5ZX0lELFBDSV9BTllfSUQsMCwwLDB9LAorCXswLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN4ODhfYXVkaW9fcGNpX3RibCk7CisKKy8qCisgKiBDaGlwLXNwZWNpZmljIGRlc3RydWN0b3IKKyAqLworCitzdGF0aWMgaW50IHNuZF9jeDg4X2ZyZWUoc25kX2N4ODhfY2FyZF90ICpjaGlwKQoreworCisJaWYgKGNoaXAtPmlycSA+PSAwKXsKKwkJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJfQorCisJY3g4OF9jb3JlX3B1dChjaGlwLT5jb3JlLGNoaXAtPnBjaSk7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXBvbmVudCBEZXN0cnVjdG9yCisgKi8KK3N0YXRpYyB2b2lkIHNuZF9jeDg4X2Rldl9mcmVlKHNuZF9jYXJkX3QgKiBjYXJkKQoreworCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXNuZF9jeDg4X2ZyZWUoY2hpcCk7Cit9CisKKworLyoKKyAqIEFsc2EgQ29uc3RydWN0b3IgLSBDb21wb25lbnQgcHJvYmUKKyAqLworCitzdGF0aWMgaW50IGRldm5vPTA7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3g4OF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgICAgc25kX2N4ODhfY2FyZF90ICoqcmNoaXApCit7CisJc25kX2N4ODhfY2FyZF90ICAgKmNoaXA7CisJc3RydWN0IGN4ODhfY29yZSAgKmNvcmU7CisJaW50ICAgICAgICAgICAgICAgZXJyOworCisJKnJjaGlwID0gTlVMTDsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlwY2lfc2V0X21hc3RlcihwY2kpOworCisJY2hpcCA9IChzbmRfY3g4OF9jYXJkX3QgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJY29yZSA9IGN4ODhfY29yZV9nZXQocGNpKTsKKworCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpLDB4ZmZmZmZmZmYpKSB7CisJCWRwcmludGsoMCwgIiVzLzE6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLGNvcmUtPm5hbWUpOworCQllcnIgPSAtRUlPOworCQljeDg4X2NvcmVfcHV0KGNvcmUscGNpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKworCS8qIHBjaSBpbml0ICovCisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJY2hpcC0+cGNpID0gcGNpOworCWNoaXAtPmlycSA9IC0xOworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CisKKwljeDg4X3Jlc2V0KGNvcmUpOworCWlmIChOVUxMID09IGNvcmUpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJa2ZyZWUgKGNoaXApOworCQlyZXR1cm4gZXJyOworCX0KKwljaGlwLT5jb3JlID0gY29yZTsKKworCS8qIGdldCBpcnEgKi8KKwllcnIgPSByZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgY3g4ODAxX2lycSwKKwkJCSAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsIGNoaXAtPmNvcmUtPm5hbWUsIGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCWRwcmludGsoMCwgIiVzOiBjYW4ndCBnZXQgSVJRICVkXG4iLAorCQkgICAgICAgY2hpcC0+Y29yZS0+bmFtZSwgY2hpcC0+cGNpLT5pcnEpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHByaW50IHBjaSBpbmZvICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpLCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjaGlwLT5wY2lfcmV2KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2ksIFBDSV9MQVRFTkNZX1RJTUVSLCAgJmNoaXAtPnBjaV9sYXQpOworCisJZHByaW50aygxLCJBTFNBICVzLyVpOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgorCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWx4XG4iLCBjb3JlLT5uYW1lLCBkZXZubywKKwkgICAgICAgcGNpX25hbWUocGNpKSwgY2hpcC0+cGNpX3JldiwgcGNpLT5pcnEsCisJICAgICAgIGNoaXAtPnBjaV9sYXQscGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwwKSk7CisKKwljaGlwLT5pcnEgPSBwY2ktPmlycTsKKwlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKKworCSpyY2hpcCA9IGNoaXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY3g4OF9hdWRpb19pbml0ZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJc25kX2NhcmRfdCAgICAgICAqY2FyZDsKKwlzbmRfY3g4OF9jYXJkX3QgICpjaGlwOworCWludCAgICAgICAgICAgICAgZXJyOworCisJaWYgKGRldm5vID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gKC1FTk9ERVYpOworCisJaWYgKCFlbmFibGVbZGV2bm9dKSB7CisJCSsrZGV2bm87CisJCXJldHVybiAoLUVOT0VOVCk7CisJfQorCisJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpKTsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAoLUVOT01FTSk7CisKKwljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3g4OF9kZXZfZnJlZTsKKworCWVyciA9IHNuZF9jeDg4X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIChlcnIpOworCisJZXJyID0gc25kX2N4ODhfcGNtKGNoaXAsIDAsICJDWDg4IERpZ2l0YWwiKTsKKworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwllcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lLCBjaGlwKSk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXN0cmNweSAoY2FyZC0+ZHJpdmVyLCAiQ1g4OHgiKTsKKwlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgIkNvbmV4YW50IENYJXgiLCBwY2ktPmRldmljZSk7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0ICUjbHgiLAorCQljYXJkLT5zaG9ydG5hbWUsIHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApKTsKKwlzdHJjcHkgKGNhcmQtPm1peGVybmFtZSwgIkNYODgiKTsKKworCWRwcmludGsgKDAsICIlcy8laTogQUxTQSBzdXBwb3J0IGZvciBjeDIzODh4IGJvYXJkc1xuIiwKKwkgICAgICAgY2FyZC0+ZHJpdmVyLGRldm5vKTsKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAoZXJyKTsKKwl9CisJc25kX2N4ODhfY2FyZHNbZGV2bm9dID0gY2FyZDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksY2FyZCk7CisKKwlkZXZubysrOworCXJldHVybiAwOworfQorLyoKKyAqIEFMU0EgZGVzdHJ1Y3RvcgorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3g4OF9hdWRpb19maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IGN4ODhfYXVkaW9fZGV2ICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisKKwlzbmRfY2FyZF9mcmVlKCh2b2lkICopY2FyZCk7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKworCWRldm5vLS07Cit9CisKKy8qCisgKiBQQ0kgZHJpdmVyIGRlZmluaXRpb24KKyAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3g4OF9hdWRpb19wY2lfZHJpdmVyID0geworCS5uYW1lICAgICA9ICJjeDg4X2F1ZGlvIiwKKwkuaWRfdGFibGUgPSBjeDg4X2F1ZGlvX3BjaV90YmwsCisJLnByb2JlICAgID0gY3g4OF9hdWRpb19pbml0ZGV2LAorCS5yZW1vdmUgICA9IGN4ODhfYXVkaW9fZmluaWRldiwKKwlTTkRfUENJX1BNX0NBTExCQUNLUworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCQlMSU5VWCBNT0RVTEUgSU5JVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBtb2R1bGUgaW5pdAorICovCitzdGF0aWMgaW50IGN4ODhfYXVkaW9faW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gImN4MjM4OHggYWxzYSBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCisJICAgICAgIChDWDg4X1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAorCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gIDgpICYgMHhmZiwKKwkgICAgICAgQ1g4OF9WRVJTSU9OX0NPREUgJiAweGZmKTsKKyNpZmRlZiBTTkFQU0hPVAorCXByaW50ayhLRVJOX0lORk8gImN4MjM4OHg6IHNuYXBzaG90IGRhdGUgJTA0ZC0lMDJkLSUwMmRcbiIsCisJICAgICAgIFNOQVBTSE9ULzEwMDAwLCAoU05BUFNIT1QvMTAwKSUxMDAsIFNOQVBTSE9UJTEwMCk7CisjZW5kaWYKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3g4OF9hdWRpb19wY2lfZHJpdmVyKTsKK30KKworLyoKKyAqIG1vZHVsZSByZW1vdmUKKyAqLworc3RhdGljIHZvaWQgY3g4OF9hdWRpb19maW5pKHZvaWQpCit7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4ODhfYXVkaW9fcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGN4ODhfYXVkaW9faW5pdCk7Cittb2R1bGVfZXhpdChjeDg4X2F1ZGlvX2ZpbmkpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggNzRlNTdhNS4uYTQ5MDYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTMyLDEwICszMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJjeDg4LmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGN4MjM4OHgvY3gyMzQxNiBiYXNlZCBtcGVnIGVuY29kZXIgY2FyZHMiKTsKLU1PRFVMRV9BVVRIT1IoIkplbGxlIEZva3MgPGplbGxlQGZva3MuOG0uY29tPiIpOwotTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOworTU9EVUxFX0FVVEhPUigiSmVsbGUgRm9rcyA8amVsbGVAZm9rcy44bS5jb20+LCBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXBlZ2J1ZnMgPSAzMjsKQEAgLTEzNzUsNyArMTM3NSw3IEBACiAJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSBkZXYtPmNvcmU7CiAKIAlpZiAoZGVidWcgPiAxKQotCQljeDg4X3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKKwkJdjRsX3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CiAKQEAgLTE2ODksNiArMTY4OSwxOCBAQAogCW1lbWNweSgmZGV2LT5wYXJhbXMsJmRlZmF1bHRfbXBlZ19wYXJhbXMsc2l6ZW9mKGRlZmF1bHRfbXBlZ19wYXJhbXMpKTsKIAltZW1jcHkoJmRldi0+ZG5yX3BhcmFtcywmZGVmYXVsdF9kbnJfcGFyYW1zLHNpemVvZihkZWZhdWx0X2Rucl9wYXJhbXMpKTsKIAorCWlmIChjb3JlLT5ib2FyZCA9PSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9ST1NMWU4pIHsKKworCQlpZiAoY29yZS0+dHVuZXJfZm9ybWF0cyAmIFY0TDJfU1REXzUyNV82MCkgeworCQkJZGV2LT5oZWlnaHQgPSA0ODA7CisJCQlkZXYtPnBhcmFtcy52aV9mcmFtZV9yYXRlID0gMzA7CisJCX0gZWxzZSB7CisJCQlkZXYtPmhlaWdodCA9IDU3NjsKKwkJCWRldi0+cGFyYW1zLnZpX2ZyYW1lX3JhdGUgPSAyNTsKKwkJfQorCisJfQorCiAJZXJyID0gY3g4ODAyX2luaXRfY29tbW9uKGRldik7CiAJaWYgKDAgIT0gZXJyKQogCQlnb3RvIGZhaWxfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IDk1MTcwOWEuLmE3NmQ1NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtNjExLDEyICs2MTEsMTIgQEAKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAotCQkJLmdwaW8wICA9IDB4ZWQxMiwgIC8qIGludGVybmFsIGRlY29kZXIgKi8KKwkJCS5ncGlvMCAgPSAweGVkMWEsCiAJCQkuZ3BpbzIgID0gMHgwMGZmLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfREVCVUcsCiAJCQkudm11eCAgID0gMCwKLQkJCS5ncGlvMCAgPSAweGZmMDEsICAvKiBtb25vIGZyb20gdHVuZXIgY2hpcCAqLworCQkJLmdwaW8wICA9IDB4ZmYwMSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKQEAgLTcwOCw3ICs3MDgsNyBAQAogCX0sCiAJW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfVF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDMgR29sZC1UIiwKLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEhPTVNPTl9EVFQ3NjExLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9USE9NU09OX0RUVDc2MVgsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTg5Nyw2ICs4OTcsMTU4IEBACiAJCQkuZ3BpbzMgID0gMHgwMDAwLAogCQl9fSwKIAl9LAorCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzFdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIE5vdmEtUy1QbHVzIERWQi1TIiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXQJCT0ge3sKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4CT0gMCwKKwkJfSx7CisJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXgJPSAxLAorCQl9LHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4CT0gMiwKKwkJfX0sCisJCS5kdmIJCT0gMSwKKwl9LAorCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBOb3ZhLVNFMiBEVkItUyIsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0CQk9IHt7CisJCQkudHlwZQk9IENYODhfVk1VWF9EVkIsCisJCQkudm11eAk9IDAsCisJCX19LAorCQkuZHZiCQk9IDEsCisJfSwKKwlbQ1g4OF9CT0FSRF9LV09STERfRFZCU18xMDBdID0geworCQkubmFtZQkJPSAiS1dvcmxkIERWQi1TIDEwMCIsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0CQk9IHt7CisJCQkudHlwZQk9IENYODhfVk1VWF9EVkIsCisJCQkudm11eAk9IDAsCisJCX0seworCQkJLnR5cGUJPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4CT0gMSwKKwkJfSx7CisJCQkudHlwZQk9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eAk9IDIsCisJCX19LAorCQkuZHZiCQk9IDEsCisJfSwKKwlbQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMF0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTEwMCBEVkItVC9IeWJyaWQiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5pbnB1dAkJPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCX0seworCQkJLnR5cGUJPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4CT0gMSwKKwkJfSx7CisJCQkudHlwZQk9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eAk9IDIsCisJCX19LAorCQkvKiBmaXhtZTogQWRkIHJhZGlvIHN1cHBvcnQgKi8KKwkJLmR2YgkJPSAxLAorCX0sCisJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBMUF0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTEwMCBEVkItVC9IeWJyaWQgKExvdyBQcm9maWxlKSIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlucHV0CQk9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJfSx7CisJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXgJPSAxLAorCQl9fSwKKwkJLyogZml4bWU6IEFkZCByYWRpbyBzdXBwb3J0ICovCisJCS5kdmIJCT0gMSwKKwl9LAorCVtDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk9dID0geworCQkubmFtZSAgICAgICAgICAgPSAiZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UIFBybyIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQgfCBUREE5ODg3X1BPUlQxX0FDVElWRSB8CisJCQkJICBUREE5ODg3X1BPUlQyX0FDVElWRSwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4ZjgwODA4LAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wCT0gMHhmODA4MDgsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMAk9IDB4ZjgwODA4LAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJIC50eXBlICA9IENYODhfUkFESU8sCisJCQkgLmdwaW8wID0gMHhmODA4MDgsCisJCX0sCisJCS5kdmIgICAgICAgICAgICA9IDEsCisJfSwKKwlbQ1g4OF9CT0FSRF9LV09STERfRFZCX1RfQ1gyMjcwMl0gPSB7CisJCS8qIEt3b3JsZCBWLXN0cmVhbSBYcGVydCBEVkItVCB3aXRoIFRob21zb24gdHVuZXIgKi8KKwkJLyogRFRUIDc1NzkgQ29uZXhhbnQgQ1gyMjcwMi0xOSBDb25leGFudCBDWDIzODh4ICAqLworCQkvKiBNYW5lbnRpIE1hcmNvIDxtYXJjb19tYW5lbnRpQGNvbG1hbi5pdD4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIktXb3JsZC9WU3RyZWFtIFhQZXJ0IERWQi1UIHdpdGggY3gyMjcwMiIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwNzAwLAorCQkJLmdwaW8yICA9IDB4MDEwMSwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDcwMCwKKwkJCS5ncGlvMiAgPSAweDAxMDEsCisJCX19LAorCQkuZHZiICAgICAgICAgICAgPSAxLAorCX0sCisJW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgRHVhbCBEaWdpdGFsIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULCAvKiBObyBhbmFsb2cgdHVuZXIgKi8KKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDAwMjdkZiwKKwkJIH0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwMDAyN2RmLAorCQl9fSwKKwkJLmR2YiAgICAgICAgICAgID0gMSwKKwl9LAorCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfYmNvdW50ID0gQVJSQVlfU0laRShjeDg4X2JvYXJkcyk7CiAKQEAgLTEwNDQsNiArMTE5Niw1NCBAQAogCQkuc3VidmVuZG9yID0gMHgxNDYxLAogCQkuc3ViZGV2aWNlID0gMHgwMDBhLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVkVSVFZfMzAzLAorCX0seworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg5MjAwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMSwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4OTIwMSwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMSwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4OTIwMiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMSwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTdkZSwKKwkJLnN1YmRldmljZSA9IDB4MDhiMiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfS1dPUkxEX0RWQlNfMTAwLAorCX0seworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg5NDAwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4OTQwMiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDk4MDAsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwTFAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDk4MDIsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwTFAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDkwMDEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9EVkJfVDEsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDE4MjIsCisJCS5zdWJkZXZpY2UgPSAweDAwMjUsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk8sCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCisJCS5zdWJkZXZpY2UgPSAweDA4YTEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF9DWDIyNzAyLAorCX0seworCQkuc3VidmVuZG9yID0gMHgxOGFjLAorCQkuc3ViZGV2aWNlID0gMHhkYjUwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUwsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9pZGNvdW50ID0gQVJSQVlfU0laRShjeDg4X3N1Ymlkcyk7CkBAIC0xMDc1LDIwICsxMjc1LDE5IEBACiAJICAgICAgIGNvcmUtPm5hbWUsIGNvcmUtPnR1bmVyX3R5cGUsIGVlcHJvbV9kYXRhWzBdKTsKIH0KIAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBoYXVwcGF1Z2VfZWVwcm9tKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHU4ICplZXByb21fZGF0YSkKIHsKIAlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKIAl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZjb3JlLT5pMmNfY2xpZW50LCAmdHYsIGVlcHJvbV9kYXRhKTsKIAljb3JlLT50dW5lcl90eXBlID0gdHYudHVuZXJfdHlwZTsKKwljb3JlLT50dW5lcl9mb3JtYXRzID0gdHYudHVuZXJfZm9ybWF0czsKIAljb3JlLT5oYXNfcmFkaW8gID0gdHYuaGFzX3JhZGlvOwogCiAJLyogTWFrZSBzdXJlIHdlIHN1cHBvcnQgdGhlIGJvYXJkIG1vZGVsICovCiAJc3dpdGNoICh0di5tb2RlbCkKIAl7CisJY2FzZSAyODU1MjogLyogV2luVFYtUFZSICdSb3NseW4nIChObyBJUikgKi8KIAljYXNlIDkwMDAyOiAvKiBOb3ZhLVQtUENJICg5MDAyKSAqLwogCWNhc2UgOTIwMDE6IC8qIE5vdmEtUy1QbHVzIChWaWRlbyBhbmQgSVIpICovCiAJY2FzZSA5MjAwMjogLyogTm92YS1TLVBsdXMgKFZpZGVvIGFuZCBJUikgKi8KQEAgLTEwOTYsNyArMTI5NSw5IEBACiAJY2FzZSA5MDUwMDogLyogTm92YS1ULVBDSSAob2VtKSAqLwogCWNhc2UgOTA1MDE6IC8qIE5vdmEtVC1QQ0kgKG9lbS9JUikgKi8KIAljYXNlIDkyMDAwOiAvKiBOb3ZhLVNFMiAoT0VNLCBObyBWaWRlbyBvciBJUikgKi8KLQorCWNhc2UgOTQwMDk6IC8qIFdpblRWLUhWUjExMDAgKFZpZGVvIGFuZCBJUiBSZXRhaWwpICovCisJY2FzZSA5NDUwMTogLyogV2luVFYtSFZSMTEwMCAoVmlkZW8gYW5kIElSIE9FTSkgKi8KKwljYXNlIDk4NTU5OiAvKiBXaW5UVi1IVlIxMTAwTFAgKFZpZGVvIG5vIElSLCBSZXRhaWwgLSBMb3cgUHJvZmlsZSkgKi8KIAkJLyoga25vd24gKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEyMTEsMTIgKzE0MTIsMjEgQEAKIAkJaWYgKDAgPT0gY29yZS0+aTJjX3JjKQogCQkJbGVhZHRla19lZXByb20oY29yZSxlZXByb20pOwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTRTJfUzE6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9EVkJfVDE6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMExQOgogCQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCiAJCQloYXVwcGF1Z2VfZWVwcm9tKGNvcmUsZWVwcm9tKTsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJTXzEwMDoKKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDAwN2Y4KTsKKwkJY3hfd3JpdGUoTU9fR1AxX0lPLCAweDAwMDAwMDAxKTsKKwkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BMVVM6CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTDoKIAkJLyogR1BJTzA6MCBpcyBob29rZWQgdG8gbXQzNTIgcmVzZXQgcGluICovCiAJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAxMDEpOwogCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwMDEpOwpAQCAtMTIzMiw2ICsxNDQyLDkgQEAKIAkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDA3KTsKIAkJY3hfc2V0KE1PX0dQMl9JTywgMHgwMDAwMDEwMSk7CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1RfUFJPOgorCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwODA4MDgpOworCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVI6CiAJCWlmICgwID09IGNvcmUtPmkyY19yYykgewogCQkJLyogZW5hYmxlIHR1bmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggYmI2ZWI1NC4uOTk3NWJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaW5jbHVkZSAiY3g4OC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CkBAIC03Niw2MCArNzcsNiBAQAogc3RhdGljIExJU1RfSEVBRChjeDg4X2Rldmxpc3QpOwogc3RhdGljIERFQ0xBUkVfTVVURVgoZGV2bGlzdCk7CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogZGVidWcgaGVscCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLXN0YXRpYyBjb25zdCBjaGFyICp2NGwxX2lvY3Rsc1tdID0gewotCSIwIiwgIkNHQVAiLCAiR0NIQU4iLCAiU0NIQU4iLCAiR1RVTkVSIiwgIlNUVU5FUiIsICJHUElDVCIsICJTUElDVCIsCi0JIkNDQVBUVVJFIiwgIkdXSU4iLCAiU1dJTiIsICJHRkJVRiIsICJTRkJVRiIsICJLRVkiLCAiR0ZSRVEiLAotCSJTRlJFUSIsICJHQVVESU8iLCAiU0FVRElPIiwgIlNZTkMiLCAiTUNBUFRVUkUiLCAiR01CVUYiLCAiR1VOSVQiLAotCSJHQ0FQVFVSRSIsICJTQ0FQVFVSRSIsICJTUExBWU1PREUiLCAiU1dSSVRFTU9ERSIsICJHUExBWUlORk8iLAotCSJTTUlDUk9DT0RFIiwgIkdWQklGTVQiLCAiU1ZCSUZNVCIgfTsKLSNkZWZpbmUgVjRMMV9JT0NUTFMgQVJSQVlfU0laRSh2NGwxX2lvY3RscykKLQotc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW9jdGxzW10gPSB7Ci0JIlFVRVJZQ0FQIiwgIjEiLCAiRU5VTV9QSVhGTVQiLCAiRU5VTV9GQlVGRk1UIiwgIkdfRk1UIiwgIlNfRk1UIiwKLQkiR19DT01QIiwgIlNfQ09NUCIsICJSRVFCVUZTIiwgIlFVRVJZQlVGIiwgIkdfRkJVRiIsICJTX0ZCVUYiLAotCSJHX1dJTiIsICJTX1dJTiIsICJQUkVWSUVXIiwgIlFCVUYiLCAiMTYiLCAiRFFCVUYiLCAiU1RSRUFNT04iLAotCSJTVFJFQU1PRkYiLCAiR19QRVJGIiwgIkdfUEFSTSIsICJTX1BBUk0iLCAiR19TVEQiLCAiU19TVEQiLAotCSJFTlVNU1REIiwgIkVOVU1JTlBVVCIsICJHX0NUUkwiLCAiU19DVFJMIiwgIkdfVFVORVIiLCAiU19UVU5FUiIsCi0JIkdfRlJFUSIsICJTX0ZSRVEiLCAiR19BVURJTyIsICJTX0FVRElPIiwgIjM1IiwgIlFVRVJZQ1RSTCIsCi0JIlFVRVJZTUVOVSIsICJHX0lOUFVUIiwgIlNfSU5QVVQiLCAiRU5VTUNWVCIsICI0MSIsICI0MiIsICI0MyIsCi0JIjQ0IiwgIjQ1IiwgICJHX09VVFBVVCIsICJTX09VVFBVVCIsICJFTlVNT1VUUFVUIiwgIkdfQVVET1VUIiwKLQkiU19BVURPVVQiLCAiRU5VTUZYIiwgIkdfRUZGRUNUIiwgIlNfRUZGRUNUIiwgIkdfTU9EVUxBVE9SIiwKLQkiU19NT0RVTEFUT1IiCi19OwotI2RlZmluZSBWNEwyX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW9jdGxzKQotCi12b2lkIGN4ODhfcHJpbnRfaW9jdGwoY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNtZCkKLXsKLQljaGFyICpkaXI7Ci0KLQlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKLQljYXNlIF9JT0NfTk9ORTogICAgICAgICAgICAgIGRpciA9ICItLSI7IGJyZWFrOwotCWNhc2UgX0lPQ19SRUFEOiAgICAgICAgICAgICAgZGlyID0gInItIjsgYnJlYWs7Ci0JY2FzZSBfSU9DX1dSSVRFOiAgICAgICAgICAgICBkaXIgPSAiLXciOyBicmVhazsKLQljYXNlIF9JT0NfUkVBRCB8IF9JT0NfV1JJVEU6IGRpciA9ICJydyI7IGJyZWFrOwotCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgZGlyID0gIj8/IjsgYnJlYWs7Ci0JfQotCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKLQljYXNlICd2JzoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDEsICVzLCBWSURJT0MlcylcbiIsCi0JCSAgICAgICBuYW1lLCBjbWQsIGRpciwgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/Ci0JCSAgICAgICB2NGwxX2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIj8/PyIpOwotCQlicmVhazsKLQljYXNlICdWJzoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDIsICVzLCBWSURJT0NfJXMpXG4iLAotCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIChfSU9DX05SKGNtZCkgPCBWNEwyX0lPQ1RMUykgPwotCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKD8/PywgJXMsICMlZClcbiIsCi0JCSAgICAgICBuYW1lLCBjbWQsIGRpciwgX0lPQ19OUihjbWQpKTsKLQl9Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBOT19TWU5DX0xJTkUgKC0xVSkKIAogc3RhdGljIHUzMiogY3g4OF9yaXNjX2ZpZWxkKHUzMiAqcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LApAQCAtMjkxLDkgKzIzOCw5IEBACiAgKiAgICBjaGFubmVsICAyMiAgICAodSB2aWRlbykgIC0gIDIuMGsKICAqICAgIGNoYW5uZWwgIDIzICAgICh2IHZpZGVvKSAgLSAgMi4wawogICogICAgY2hhbm5lbCAgMjQgICAgKHZiaSkgICAgICAtICA0LjBrCi0gKiAgICBjaGFubmVscyAyNSsyNiAoYXVkaW8pICAgIC0gIDAuNWsKKyAqICAgIGNoYW5uZWxzIDI1KzI2IChhdWRpbykgICAgLSAgNC4wawogICogICAgY2hhbm5lbCAgMjggICAgKG1wZWcpICAgICAtICA0LjBrCi0gKiAgICBUT1RBTCAgICAgICAgICAgICAgICAgICAgID0gMjUuNWsKKyAqICAgIFRPVEFMICAgICAgICAgICAgICAgICAgICAgPSAyOS4wawogICoKICAqIEV2ZXJ5IGNoYW5uZWwgaGFzIDE2MCBieXRlcyBjb250cm9sIGRhdGEgKDY0IGJ5dGVzIGluc3RydWN0aW9uCiAgKiBxdWV1ZSBhbmQgNiBDRFQgZW50cmllcyksIHdoaWNoIGlzIGNsb3NlIHRvIDJrIHRvdGFsLgpAQCAtMzU5LDcgKzMwNiw3IEBACiAJCS5jdHJsX3N0YXJ0ID0gMHgxODA2ODAsCiAJCS5jZHQgICAgICAgID0gMHgxODA2ODAgKyA2NCwKIAkJLmZpZm9fc3RhcnQgPSAweDE4NTQwMCwKLQkJLmZpZm9fc2l6ZSAgPSAweDAwMDIwMCwKKwkJLmZpZm9fc2l6ZSAgPSAweDAwMTAwMCwKIAkJLnB0cjFfcmVnICAgPSBNT19ETUEyNV9QVFIxLAogCQkucHRyMl9yZWcgICA9IE1PX0RNQTI1X1BUUjIsCiAJCS5jbnQxX3JlZyAgID0gTU9fRE1BMjVfQ05UMSwKQEAgLTM3MSw3ICszMTgsNyBAQAogCQkuY3RybF9zdGFydCA9IDB4MTgwNzIwLAogCQkuY2R0ICAgICAgICA9IDB4MTgwNjgwICsgNjQsICAvKiBzYW1lIGFzIGF1ZGlvIElOICovCiAJCS5maWZvX3N0YXJ0ID0gMHgxODU0MDAsICAgICAgIC8qIHNhbWUgYXMgYXVkaW8gSU4gKi8KLQkJLmZpZm9fc2l6ZSAgPSAweDAwMDIwMCwgICAgICAgLyogc2FtZSBhcyBhdWRpbyBJTiAqLworCQkuZmlmb19zaXplICA9IDB4MDAxMDAwLCAgICAgICAvKiBzYW1lIGFzIGF1ZGlvIElOICovCiAJCS5wdHIxX3JlZyAgID0gTU9fRE1BMjZfUFRSMSwKIAkJLnB0cjJfcmVnICAgPSBNT19ETUEyNl9QVFIyLAogCQkuY250MV9yZWcgICA9IE1PX0RNQTI2X0NOVDEsCkBAIC0zODIsNyArMzI5LDcgQEAKIAkJLmNtZHNfc3RhcnQgPSAweDE4MDIwMCwKIAkJLmN0cmxfc3RhcnQgPSAweDE4MDdDMCwKIAkJLmNkdCAgICAgICAgPSAweDE4MDdDMCArIDY0LAotCQkuZmlmb19zdGFydCA9IDB4MTg1NjAwLAorCQkuZmlmb19zdGFydCA9IDB4MTg2NDAwLAogCQkuZmlmb19zaXplICA9IDB4MDAxMDAwLAogCQkucHRyMV9yZWcgICA9IE1PX0RNQTI4X1BUUjEsCiAJCS5wdHIyX3JlZyAgID0gTU9fRE1BMjhfUFRSMiwKQEAgLTg0OCw3ICs3OTUsNiBAQAogCiAJLyogc3RhcnQgZG1hICovCiAJY3hfd3JpdGUoTU9fQVVEX0RNQUNOVFJMLCAweDAwMDMpOyAvKiBVcCBhbmQgRG93biBmaWZvIGVuYWJsZSAqLwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMDgsNyArMTE1NCw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1FWFBPUlRfU1lNQk9MKGN4ODhfcHJpbnRfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChjeDg4X3ByaW50X2lycWJpdHMpOwogCiBFWFBPUlRfU1lNQk9MKGN4ODhfY29yZV9pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCA5OWVhOTU1Li40MmMwMTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMyw3ICszLDcgQEAKICAqIGRldmljZSBkcml2ZXIgZm9yIENvbmV4YW50IDIzODh4IGJhc2VkIFRWIGNhcmRzCiAgKiBNUEVHIFRyYW5zcG9ydCBTdHJlYW0gKERWQikgcm91dGluZXMKICAqCi0gKiAoYykgMjAwNCBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PgorICogKGMpIDIwMDQsIDIwMDUgQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4KICAqIChjKSAyMDA0IEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMxLDEwICszMSwxNCBAQAogCiAjaW5jbHVkZSAiY3g4OC5oIgogI2luY2x1ZGUgImR2Yi1wbGwuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaWZkZWYgSEFWRV9NVDM1MgogIyBpbmNsdWRlICJtdDM1Mi5oIgogIyBpbmNsdWRlICJtdDM1Ml9wcml2LmgiCisjIGlmZGVmIEhBVkVfVlAzMDU0X0kyQworIyAgaW5jbHVkZSAiY3g4OC12cDMwNTQtaTJjLmgiCisjIGVuZGlmCiAjZW5kaWYKICNpZmRlZiBIQVZFX0NYMjI3MDIKICMgaW5jbHVkZSAiY3gyMjcwMi5oIgpAQCAtNDgsNiArNTIsOSBAQAogI2lmZGVmIEhBVkVfTlhUMjAwWAogIyBpbmNsdWRlICJueHQyMDB4LmgiCiAjZW5kaWYKKyNpZmRlZiBIQVZFX0NYMjQxMjMKKyMgaW5jbHVkZSAiY3gyNDEyMy5oIgorI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBjeDIzODh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4iKTsKQEAgLTEyNSw2ICsxMzIsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkdmljb19kdWFsX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RhdGljIHU4IGNsb2NrX2NvbmZpZyBbXSAgPSB7IENMT0NLX0NUTCwgIDB4MzgsIDB4MzggfTsKKwlzdGF0aWMgdTggcmVzZXQgW10gICAgICAgICA9IHsgUkVTRVQsICAgICAgMHg4MCB9OworCXN0YXRpYyB1OCBhZGNfY3RsXzFfY2ZnIFtdID0geyBBRENfQ1RMXzEsICAweDQwIH07CisJc3RhdGljIHU4IGFnY19jZmcgW10gICAgICAgPSB7IEFHQ19UQVJHRVQsIDB4MjgsIDB4MjAgfTsKKwlzdGF0aWMgdTggZ3BwX2N0bF9jZmcgW10gICA9IHsgR1BQX0NUTCwgICAgMHgzMyB9OworCXN0YXRpYyB1OCBjYXB0X3JhbmdlX2NmZ1tdID0geyBDQVBUX1JBTkdFLCAweDMyIH07CisKKwltdDM1Ml93cml0ZShmZSwgY2xvY2tfY29uZmlnLCAgIHNpemVvZihjbG9ja19jb25maWcpKTsKKwl1ZGVsYXkoMjAwKTsKKwltdDM1Ml93cml0ZShmZSwgcmVzZXQsICAgICAgICAgIHNpemVvZihyZXNldCkpOworCW10MzUyX3dyaXRlKGZlLCBhZGNfY3RsXzFfY2ZnLCAgc2l6ZW9mKGFkY19jdGxfMV9jZmcpKTsKKworCW10MzUyX3dyaXRlKGZlLCBhZ2NfY2ZnLCAgICAgICAgc2l6ZW9mKGFnY19jZmcpKTsKKwltdDM1Ml93cml0ZShmZSwgZ3BwX2N0bF9jZmcsICAgIHNpemVvZihncHBfY3RsX2NmZykpOworCW10MzUyX3dyaXRlKGZlLCBjYXB0X3JhbmdlX2NmZywgc2l6ZW9mKGNhcHRfcmFuZ2VfY2ZnKSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkbnR2X2xpdmVfZHZidF9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0YXRpYyB1OCBjbG9ja19jb25maWcgW10gID0geyAweDg5LCAweDM4LCAweDM5IH07CkBAIC0xNzIsNiArMjAwLDk4IEBACiAJLmRlbW9kX2luaXQgICAgPSBkbnR2X2xpdmVfZHZidF9kZW1vZF9pbml0LAogCS5wbGxfc2V0ICAgICAgID0gbXQzNTJfcGxsX3NldCwKIH07CisKK3N0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIGR2aWNvX2Z1c2lvbmhkdHZfZHVhbCA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MEYsCisJLmRlbW9kX2luaXQgICAgPSBkdmljb19kdWFsX2RlbW9kX2luaXQsCisJLnBsbF9zZXQgICAgICAgPSBtdDM1Ml9wbGxfc2V0LAorfTsKKworI2lmZGVmIEhBVkVfVlAzMDU0X0kyQworc3RhdGljIGludCBkbnR2X2xpdmVfZHZidF9wcm9fZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdGF0aWMgdTggY2xvY2tfY29uZmlnIFtdICA9IHsgMHg4OSwgMHgzOCwgMHgzOCB9OworCXN0YXRpYyB1OCByZXNldCBbXSAgICAgICAgID0geyAweDUwLCAweDgwIH07CisJc3RhdGljIHU4IGFkY19jdGxfMV9jZmcgW10gPSB7IDB4OEUsIDB4NDAgfTsKKwlzdGF0aWMgdTggYWdjX2NmZyBbXSAgICAgICA9IHsgMHg2NywgMHgxMCwgMHgyMCwgMHgwMCwgMHhGRiwgMHhGRiwKKwkJCQkgICAgICAgMHgwMCwgMHhGRiwgMHgwMCwgMHg0MCwgMHg0MCB9OworCXN0YXRpYyB1OCBkbnR2X2V4dHJhW10gICAgID0geyAweEI1LCAweDdBIH07CisJc3RhdGljIHU4IGNhcHRfcmFuZ2VfY2ZnW10gPSB7IDB4NzUsIDB4MzIgfTsKKworCW10MzUyX3dyaXRlKGZlLCBjbG9ja19jb25maWcsICAgc2l6ZW9mKGNsb2NrX2NvbmZpZykpOworCXVkZWxheSgyMDAwKTsKKwltdDM1Ml93cml0ZShmZSwgcmVzZXQsICAgICAgICAgIHNpemVvZihyZXNldCkpOworCW10MzUyX3dyaXRlKGZlLCBhZGNfY3RsXzFfY2ZnLCAgc2l6ZW9mKGFkY19jdGxfMV9jZmcpKTsKKworCW10MzUyX3dyaXRlKGZlLCBhZ2NfY2ZnLCAgICAgICAgc2l6ZW9mKGFnY19jZmcpKTsKKwl1ZGVsYXkoMjAwMCk7CisJbXQzNTJfd3JpdGUoZmUsIGRudHZfZXh0cmEsICAgICBzaXplb2YoZG50dl9leHRyYSkpOworCW10MzUyX3dyaXRlKGZlLCBjYXB0X3JhbmdlX2NmZywgc2l6ZW9mKGNhcHRfcmFuZ2VfY2ZnKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaGlsaXBzX2ZtZDEyMTZfcGxsX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKKworCS8qIHRoaXMgbWVzc2FnZSBpcyB0byBzZXQgdXAgQVRDIGFuZCBBTEMgKi8KKwlzdGF0aWMgdTggZm1kMTIxNl9pbml0W10gPSB7IDB4MGIsIDB4ZGMsIDB4OWMsIDB4YTAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPQorCQl7IC5hZGRyID0gZGV2LT5jb3JlLT5wbGxfYWRkciwgLmZsYWdzID0gMCwKKwkJICAuYnVmID0gZm1kMTIxNl9pbml0LCAubGVuID0gc2l6ZW9mKGZtZDEyMTZfaW5pdCkgfTsKKwlpbnQgZXJyOworCisJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoJmRldi0+Y29yZS0+aTJjX2FkYXAsICZtc2csIDEpKSAhPSAxKSB7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG50dl9saXZlX2R2YnRfcHJvX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMsCisJCQkJICAgICAgdTgqIHBsbGJ1ZikKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9CisJCXsgLmFkZHIgPSBkZXYtPmNvcmUtPnBsbF9hZGRyLCAuZmxhZ3MgPSAwLAorCQkgIC5idWYgPSBwbGxidWYrMSwgLmxlbiA9IDQgfTsKKwlpbnQgZXJyOworCisJLyogU3dpdGNoIFBMTCB0byBEVkIgbW9kZSAqLworCWVyciA9IHBoaWxpcHNfZm1kMTIxNl9wbGxfaW5pdChmZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFR1bmUgUExMICovCisJcGxsYnVmWzBdID0gZGV2LT5jb3JlLT5wbGxfYWRkciA8PCAxOworCWR2Yl9wbGxfY29uZmlndXJlKGRldi0+Y29yZS0+cGxsX2Rlc2MsIHBsbGJ1ZisxLAorCQkJICBwYXJhbXMtPmZyZXF1ZW5jeSwKKwkJCSAgcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKTsKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3g4OC1kdmI6ICVzIGVycm9yICIKKwkJCSAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXywgcGxsYnVmWzBdLCBwbGxidWZbMV0sIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIGRudHZfbGl2ZV9kdmJ0X3Byb19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBmLAorCS5ub190dW5lciAgICAgID0gMSwKKwkuZGVtb2RfaW5pdCAgICA9IGRudHZfbGl2ZV9kdmJ0X3Byb19kZW1vZF9pbml0LAorCS5wbGxfc2V0ICAgICAgID0gZG50dl9saXZlX2R2YnRfcHJvX3BsbF9zZXQsCit9OworI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfQ1gyMjcwMgpAQCAtMTg4LDYgKzMwOCwxMiBAQAogCS5wbGxfYWRkcmVzcyAgID0gMHg2MSwKIAkucGxsX2Rlc2MgICAgICA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzU5eCwKIH07CitzdGF0aWMgc3RydWN0IGN4MjI3MDJfY29uZmlnIGhhdXBwYXVnZV9odnIxMTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjMsCisJLm91dHB1dF9tb2RlICAgPSBDWDIyNzAyX1NFUklBTF9PVVRQVVQsCisJLnBsbF9hZGRyZXNzICAgPSAweDYxLAorCS5wbGxfZGVzYyAgICAgID0gJmR2Yl9wbGxfZm1kMTIxNm1lLAorfTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9PUjUxMTMyCkBAIC0zMTQsNiArNDQwLDQwIEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0NYMjQxMjMKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJaW50IGlzX3B1bmN0dXJlZCkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OworCWRldi0+dHNfZ2VuX2NudHJsID0gMHgyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjeDI0MTIzX2VuYWJsZV9sbmJfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IG9uKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCWlmIChvbikKKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDAwNmY5KTsKKwllbHNlCisJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwMDZmQik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDEyM19jb25maWcgaGF1cHBhdWdlX25vdmFzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcwkJPSAweDU1LAorCS51c2VfaXNsNjQyMQkJPSAxLAorCS5zZXRfdHNfcGFyYW1zCQk9IGN4MjQxMjNfc2V0X3RzX3BhcmFtLAorfTsKKworc3RhdGljIHN0cnVjdCBjeDI0MTIzX2NvbmZpZyBrd29ybGRfZHZic18xMDBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzCQk9IDB4MTUsCisJLnVzZV9pc2w2NDIxCQk9IDAsCisJLnNldF90c19wYXJhbXMJCT0gY3gyNDEyM19zZXRfdHNfcGFyYW0sCisJLmVuYWJsZV9sbmJfdm9sdGFnZQk9IGN4MjQxMjNfZW5hYmxlX2xuYl92b2x0YWdlLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGR2Yl9yZWdpc3RlcihzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwpAQCAtMzI5LDEwICs0ODksMTYgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMTQwMF9EVkJfVDE6CiAJY2FzZSBDWDg4X0JPQVJEX0NPTkVYQU5UX0RWQl9UMToKKwljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQl9UX0NYMjI3MDI6CiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMDoKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBjeDIyNzAyX2F0dGFjaCgmY29ubmV4YW50X3JlZmJvYXJkX2NvbmZpZywKIAkJCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMExQOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGN4MjI3MDJfYXR0YWNoKCZoYXVwcGF1Z2VfaHZyMTEwMF9jb25maWcsCisJCQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9NVDM1MgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMToKQEAgLTM1NSw2ICs1MjEsMjQgQEAKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBtdDM1Ml9hdHRhY2goJmRudHZfbGl2ZV9kdmJ0X2NvbmZpZywKIAkJCQkJCSAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1RfUFJPOgorI2lmZGVmIEhBVkVfVlAzMDU0X0kyQworCQlkZXYtPmNvcmUtPnBsbF9hZGRyID0gMHg2MTsKKwkJZGV2LT5jb3JlLT5wbGxfZGVzYyA9ICZkdmJfcGxsX2ZtZDEyMTZtZTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBtdDM1Ml9hdHRhY2goJmRudHZfbGl2ZV9kdmJ0X3Byb19jb25maWcsCisJCQkmKChzdHJ1Y3QgdnAzMDU0X2kyY19zdGF0ZSAqKWRldi0+Y2FyZF9wcml2KS0+YWRhcCk7CisjZWxzZQorCQlwcmludGsoIiVzOiBidWlsdCB3aXRob3V0IHZwMzA1NCBzdXBwb3J0XG4iLCBkZXYtPmNvcmUtPm5hbWUpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUw6CisJCS8qIFRoZSB0aW4gYm94IHNheXMgREVFMTYwMSwgYnV0IGl0IHNlZW1zIHRvIGJlIERUVDc1NzkKKwkJICogY29tcGF0aWJsZSwgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBNVDM1MiBBR0MgZ2Fpbi4gKi8KKwkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7CisJCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc1Nzk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZkdmljb19mdXNpb25oZHR2X2R1YWwsCisJCQkJCQkgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlicmVhazsKICNlbmRpZgogI2lmZGVmIEhBVkVfT1I1MTEzMgogCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgpAQCAtMzkzLDcgKzU3Nyw3IEBACiAJCWN4X3NldChNT19HUDBfSU8sIDkpOwogCQltZGVsYXkoMjAwKTsKIAkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7Ci0JCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc2MTE7CisJCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc2MXg7CiAJCWRldi0+ZHZiLmZyb250ZW5kID0gbGdkdDMzMHhfYXR0YWNoKCZmdXNpb25oZHR2XzNfZ29sZCwKIAkJCQkJCSAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCX0KQEAgLTQyMSw2ICs2MDUsMTcgQEAKIAkJCQkJCSAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgSEFWRV9DWDI0MTIzCisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGN4MjQxMjNfYXR0YWNoKCZoYXVwcGF1Z2Vfbm92YXNfY29uZmlnLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQlNfMTAwOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGN4MjQxMjNfYXR0YWNoKCZrd29ybGRfZHZic18xMDBfY29uZmlnLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50aygiJXM6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSk7CkBAIC00NzMsNiArNjY4LDEyIEBACiAJaWYgKDAgIT0gZXJyKQogCQlnb3RvIGZhaWxfZnJlZTsKIAorI2lmZGVmIEhBVkVfVlAzMDU0X0kyQworCWVyciA9IHZwMzA1NF9pMmNfcHJvYmUoZGV2KTsKKwlpZiAoMCAhPSBlcnIpCisJCWdvdG8gZmFpbF9mcmVlOworI2VuZGlmCisKIAkvKiBkdmIgc3R1ZmYgKi8KIAlwcmludGsoIiVzLzI6IGN4MjM4OHggYmFzZWQgZHZiIGNhcmRcbiIsIGNvcmUtPm5hbWUpOwogCXZpZGVvYnVmX3F1ZXVlX2luaXQoJmRldi0+ZHZiLmR2YnEsICZkdmJfcW9wcywKQEAgLTQ4NCw2ICs2ODUsOSBAQAogCWVyciA9IGR2Yl9yZWdpc3RlcihkZXYpOwogCWlmICgwICE9IGVycikKIAkJZ290byBmYWlsX2Zpbmk7CisKKwkvKiBNYWludGFpbiBhIHJlZmVyZW5jZSB0byBjeDg4LXZpZGVvIGNhbiBxdWVyeSB0aGUgODgwMiBkZXZpY2UuICovCisJY29yZS0+ZHZiZGV2ID0gZGV2OwogCXJldHVybiAwOwogCiAgZmFpbF9maW5pOgpAQCAtNDk5LDkgKzcwMywxNiBAQAogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKKwkvKiBEZXN0cm95IGFueSA4ODAyIHJlZmVyZW5jZS4gKi8KKwlkZXYtPmNvcmUtPmR2YmRldiA9IE5VTEw7CisKIAkvKiBkdmIgKi8KIAl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmZGV2LT5kdmIpOwogCisjaWZkZWYgSEFWRV9WUDMwNTRfSTJDCisJdnAzMDU0X2kyY19yZW1vdmUoZGV2KTsKKyNlbmRpZgorCiAJLyogY29tbW9uICovCiAJY3g4ODAyX2ZpbmlfY29tbW9uKGRldik7CiAJY3g4OF9jb3JlX3B1dChkZXYtPmNvcmUsZGV2LT5wY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwppbmRleCA0YThmYjE2Li5mNzIwOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiY3g4OC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX2RlYnVnID0gMDsKIG1vZHVsZV9wYXJhbShpMmNfZGVidWcsIGludCwgMDY0NCk7CkBAIC0xMzUsNyArMTM2LDE3IEBACiB7CiAJaWYgKDAgIT0gY29yZS0+aTJjX3JjKQogCQlyZXR1cm47Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmY29yZS0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKKworCWlmIChjb3JlLT5kdmJkZXYpIHsKKwkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMtPmkyY19nYXRlX2N0cmwpCisJCQljb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLT5pMmNfZ2F0ZV9jdHJsKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLCAxKTsKKworCQlpMmNfY2xpZW50c19jb21tYW5kKCZjb3JlLT5pMmNfYWRhcCwgY21kLCBhcmcpOworCisJCWlmIChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLT5pMmNfZ2F0ZV9jdHJsKQorCQkJY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy0+aTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMCk7CisJfSBlbHNlCisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmNvcmUtPmkyY19hZGFwLCBjbWQsIGFyZyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgY3g4ODAwX2kyY19hbGdvX3RlbXBsYXRlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggNDYxMDE5ZC4uMjg2Yzg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMyBQYXZlbCBNYWNoZWsKICAqIENvcHlyaWdodCAoYykgMjAwNCBHZXJkIEtub3JyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgQ2hyaXMgUGFzY29lCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgQ2hyaXMgUGFzY29lCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOSw5ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgotCiAjaW5jbHVkZSAiY3g4OC5oIgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTI1OCw2ICsyNTcsMTE0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyogQVZFUlRWIFNUVURJTyAzMDMgUmVtb3RlICovCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcnR2XzMwM1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDJhIF0gPSBLRVlfS1AxLAorCVsgMHgzMiBdID0gS0VZX0tQMiwKKwlbIDB4M2EgXSA9IEtFWV9LUDMsCisJWyAweDRhIF0gPSBLRVlfS1A0LAorCVsgMHg1MiBdID0gS0VZX0tQNSwKKwlbIDB4NWEgXSA9IEtFWV9LUDYsCisJWyAweDZhIF0gPSBLRVlfS1A3LAorCVsgMHg3MiBdID0gS0VZX0tQOCwKKwlbIDB4N2EgXSA9IEtFWV9LUDksCisJWyAweDBlIF0gPSBLRVlfS1AwLAorCisJWyAweDAyIF0gPSBLRVlfUE9XRVIsCisJWyAweDIyIF0gPSBLRVlfVklERU8sCisJWyAweDQyIF0gPSBLRVlfQVVESU8sCisJWyAweDYyIF0gPSBLRVlfWk9PTSwKKwlbIDB4MGEgXSA9IEtFWV9UViwKKwlbIDB4MTIgXSA9IEtFWV9DRCwKKwlbIDB4MWEgXSA9IEtFWV9URVhULAorCisJWyAweDE2IF0gPSBLRVlfU1VCVElUTEUsCisJWyAweDFlIF0gPSBLRVlfUkVXSU5ELAorCVsgMHgwNiBdID0gS0VZX1BSSU5ULAorCisJWyAweDJlIF0gPSBLRVlfU0VBUkNILAorCVsgMHgzNiBdID0gS0VZX1NMRUVQLAorCVsgMHgzZSBdID0gS0VZX1NIVUZGTEUsCisJWyAweDI2IF0gPSBLRVlfTVVURSwKKworCVsgMHg0ZSBdID0gS0VZX1JFQ09SRCwKKwlbIDB4NTYgXSA9IEtFWV9QQVVTRSwKKwlbIDB4NWUgXSA9IEtFWV9TVE9QLAorCVsgMHg0NiBdID0gS0VZX1BMQVksCisKKwlbIDB4NmUgXSA9IEtFWV9SRUQsCisJWyAweDBiIF0gPSBLRVlfR1JFRU4sCisJWyAweDY2IF0gPSBLRVlfWUVMTE9XLAorCVsgMHgwMyBdID0gS0VZX0JMVUUsCisKKwlbIDB4NzYgXSA9IEtFWV9MRUZULAorCVsgMHg3ZSBdID0gS0VZX1JJR0hULAorCVsgMHgxMyBdID0gS0VZX0RPV04sCisJWyAweDFiIF0gPSBLRVlfVVAsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERpZ2l0YWxOb3cgRE5UViBMaXZlISBEVkItVCBQcm8gUmVtb3RlICovCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG50dl9saXZlX2R2YnRfcHJvW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4MTYgXSA9IEtFWV9QT1dFUiwKKwlbIDB4NWIgXSA9IEtFWV9IT01FLAorCisJWyAweDU1IF0gPSBLRVlfVFYsCQkvKiBsaXZlIHR2ICovCisJWyAweDU4IF0gPSBLRVlfVFVORVIsCQkvKiBkaWdpdGFsIFJhZGlvICovCisJWyAweDVhIF0gPSBLRVlfUkFESU8sCQkvKiBGTSByYWRpbyAqLworCVsgMHg1OSBdID0gS0VZX0RWRCwJCS8qIGR2ZCBtZW51ICovCisJWyAweDAzIF0gPSBLRVlfMSwKKwlbIDB4MDEgXSA9IEtFWV8yLAorCVsgMHgwNiBdID0gS0VZXzMsCisJWyAweDA5IF0gPSBLRVlfNCwKKwlbIDB4MWQgXSA9IEtFWV81LAorCVsgMHgxZiBdID0gS0VZXzYsCisJWyAweDBkIF0gPSBLRVlfNywKKwlbIDB4MTkgXSA9IEtFWV84LAorCVsgMHgxYiBdID0gS0VZXzksCisJWyAweDBjIF0gPSBLRVlfQ0FOQ0VMLAorCVsgMHgxNSBdID0gS0VZXzAsCisJWyAweDRhIF0gPSBLRVlfQ0xFQVIsCisJWyAweDEzIF0gPSBLRVlfQkFDSywKKwlbIDB4MDAgXSA9IEtFWV9UQUIsCisJWyAweDRiIF0gPSBLRVlfVVAsCisJWyAweDRlIF0gPSBLRVlfTEVGVCwKKwlbIDB4NGYgXSA9IEtFWV9PSywKKwlbIDB4NTIgXSA9IEtFWV9SSUdIVCwKKwlbIDB4NTEgXSA9IEtFWV9ET1dOLAorCVsgMHgxZSBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgwYSBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDAyIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDA1IF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgxMSBdID0gS0VZX1JFQ09SRCwKKwlbIDB4MTQgXSA9IEtFWV9QTEFZLAorCVsgMHg0YyBdID0gS0VZX1BBVVNFLAorCVsgMHgxYSBdID0gS0VZX1NUT1AsCisJWyAweDQwIF0gPSBLRVlfUkVXSU5ELAorCVsgMHgxMiBdID0gS0VZX0ZBU1RGT1JXQVJELAorCVsgMHg0MSBdID0gS0VZX1BSRVZJT1VTU09ORywJLyogcmVwbGF5IHw8ICovCisJWyAweDQyIF0gPSBLRVlfTkVYVFNPTkcsCS8qIHNraXAgPnwgKi8KKwlbIDB4NTQgXSA9IEtFWV9DQU1FUkEsCQkvKiBjYXB0dXJlICovCisJWyAweDUwIF0gPSBLRVlfTEFOR1VBR0UsCS8qIHNhcCAqLworCVsgMHg0NyBdID0gS0VZX1RWMiwJCS8qIHBpcCAqLworCVsgMHg0ZCBdID0gS0VZX1NDUkVFTiwKKwlbIDB4NDMgXSA9IEtFWV9TVUJUSVRMRSwKKwlbIDB4MTAgXSA9IEtFWV9NVVRFLAorCVsgMHg0OSBdID0gS0VZX0FVRElPLAkJLyogbC9yICovCisJWyAweDA3IF0gPSBLRVlfU0xFRVAsCisJWyAweDA4IF0gPSBLRVlfVklERU8sCQkvKiBhL3YgKi8KKwlbIDB4MGUgXSA9IEtFWV9QUkVWSU9VUywJLyogcmVjYWxsICovCisJWyAweDQ1IF0gPSBLRVlfWk9PTSwJCS8qIHpvb20gKyAqLworCVsgMHg0NiBdID0gS0VZX0FOR0xFLAkJLyogem9vbSAtICovCisJWyAweDU2IF0gPSBLRVlfUkVELAorCVsgMHg1NyBdID0gS0VZX0dSRUVOLAorCVsgMHg1YyBdID0gS0VZX1lFTExPVywKKwlbIDB4NWQgXSA9IEtFWV9CTFVFLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiBzdHJ1Y3QgY3g4OF9JUiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKQEAgLTI2Niw3ICszNzMsNyBAQAogCWNoYXIgcGh5c1szMl07CiAKIAkvKiBzYW1wbGUgZnJvbSBncGlvIHBpbiAxNiAqLwotCWludCBzYW1wbGluZzsKKwl1MzIgc2FtcGxpbmc7CiAJdTMyIHNhbXBsZXNbMTZdOwogCWludCBzY291bnQ7CiAJdW5zaWduZWQgbG9uZyByZWxlYXNlOwpAQCAtMzg0LDEwICs0OTEsMTMgQEAKIAljYXNlIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMToKIAkJaXJfY29kZXMgPSBpcl9jb2Rlc19jaW5lcmd5XzE0MDA7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1BEOwotCQlpci0+c2FtcGxpbmcgPSAxOworCQlpci0+c2FtcGxpbmcgPSAweGViMDQ7IC8qIGFkZHJlc3MgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMToKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTRTJfUzE6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKQEAgLTQyNyw2ICs1MzcsMTkgQEAKIAkJaXItPm1hc2tfa2V5dXAgPSAweDQwOwogCQlpci0+cG9sbGluZyA9IDE7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9BVkVSVFZfMzAzOgorCWNhc2UgQ1g4OF9CT0FSRF9BVkVSVFZfU1RVRElPXzMwMzoKKwkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX2F2ZXJ0dl8zMDM7CisJCWlyLT5ncGlvX2FkZHIgICAgPSBNT19HUDJfSU87CisJCWlyLT5tYXNrX2tleWNvZGUgPSAweGZiOworCQlpci0+bWFza19rZXlkb3duID0gMHgwMjsKKwkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLworCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTzoKKwkJaXJfY29kZXMgPSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm87CisJCWlyX3R5cGUgPSBJUl9UWVBFX1BEOworCQlpci0+c2FtcGxpbmcgPSAweGZmMDA7IC8qIGFkZHJlc3MgKi8KKwkJYnJlYWs7CiAJfQogCiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKQEAgLTQ4NCw2ICs2MDcsMTAgQEAKIAlpZiAoTlVMTCA9PSBpcikKIAkJcmV0dXJuIDA7CiAKKwlpZiAoaXItPnNhbXBsaW5nKSB7CisJCWN4X3dyaXRlKE1PX0REU0NGR19JTywgMHgwKTsKKwkJY29yZS0+cGNpX2lycW1hc2sgJj0gfigxIDw8IDE4KTsKKwl9CiAJaWYgKGlyLT5wb2xsaW5nKSB7CiAJCWRlbF90aW1lcigmaXItPnRpbWVyKTsKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKQEAgLTUzNSw2ICs2NjIsNyBAQAogCS8qIGRlY29kZSBpdCAqLwogCXN3aXRjaCAoY29yZS0+Ym9hcmQpIHsKIAljYXNlIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMToKKwljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTzoKIAkJaXJjb2RlID0gaXJfZGVjb2RlX3B1bHNlZGlzdGFuY2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDEsIDQpOwogCiAJCWlmIChpcmNvZGUgPT0gMHhmZmZmZmZmZikgeyAvKiBkZWNvZGluZyBlcnJvciAqLwpAQCAtNTUwLDcgKzY3OCw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmICgoaXJjb2RlICYgMHhmZmZmKSAhPSAweGViMDQpIHsgLyogd3JvbmcgYWRkcmVzcyAqLworCQlpZiAoKGlyY29kZSAmIDB4ZmZmZikgIT0gKGlyLT5zYW1wbGluZyAmIDB4ZmZmZikpIHsgLyogd3JvbmcgYWRkcmVzcyAqLwogCQkJaXJfZHByaW50aygicHVsc2UgZGlzdGFuY2UgZGVjb2RlZCB3cm9uZyBhZGRyZXNzXG4iKTsKIAkJCWJyZWFrOwogCQl9CkBAIC01NjcsNiArNjk1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMToKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTRTJfUzE6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6CiAJCWlyY29kZSA9IGlyX2RlY29kZV9iaXBoYXNlKGlyLT5zYW1wbGVzLCBpci0+c2NvdW50LCA1LCA3KTsKIAkJaXJfZHByaW50aygiYmlwaGFzZSBkZWNvZGVkOiAleFxuIiwgaXJjb2RlKTsKIAkJaWYgKChpcmNvZGUgJiAweGZmZmZmMDAwKSAhPSAweDMwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggMzVlNmQwYy4uYzc5Y2MxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtNzgsNiArNzgsMTEgQEAKIAkJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9HT0xEOgogCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDE8PDEzKTsKIAkJCWJyZWFrOworCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKKwkJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgorCQkJY3hfd3JpdGUoTU9fUElOTVVYX0lPLCAweDg4KTsgLyogRW5hYmxlIE1QRUcgcGFyYWxsZWwgSU8gYW5kIHZpZGVvIHNpZ25hbCBwaW5zICovCisJCQl1ZGVsYXkoMTAwKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDB4MDApOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggYTFiMTIwYy4uMjQxMThlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtMTMyLDE0ICsxMzIsMjIgQEAKIHsKIAl1MzIgdm9sdW1lOwogCisjaWZuZGVmIFVTSU5HX0NYODhfQUxTQQogCS8qIHJlc3RhcnQgZG1hOyBUaGlzIGF2b2lkcyBidXp6IGluIE5JQ0FNIGFuZCBpcyBnb29kIGluIG90aGVycyAgKi8KIAljeDg4X3N0b3BfYXVkaW9fZG1hKGNvcmUpOworI2VuZGlmCiAJY3hfd3JpdGUoQVVEX1JBVEVfVEhSRVNfRE1ELCAweDAwMDAwMEMwKTsKKyNpZm5kZWYgVVNJTkdfQ1g4OF9BTFNBCiAJY3g4OF9zdGFydF9hdWRpb19kbWEoY29yZSk7CisjZW5kaWYKIAogCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0uYmxhY2tiaXJkKSB7CiAJCS8qIHNldHMgc291bmQgaW5wdXQgZnJvbSBleHRlcm5hbCBhZGMgKi8KLQkJY3hfc2V0KEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7CisJCWlmIChjb3JlLT5ib2FyZCA9PSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9ST1NMWU4pCisJCQljeF9jbGVhcihBVURfQ1RMLCBFTl9JMlNJTl9FTkFCTEUpOworCQllbHNlCisJCQljeF9zZXQoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKKwogCQljeF93cml0ZShBVURfSTJTSU5QVVRDTlRMLCA0KTsKIAkJY3hfd3JpdGUoQVVEX0JBVURSQVRFLCAxKTsKIAkJLyogJ3Bhc3MtdGhydSBtb2RlJzogdGhpcyBlbmFibGVzIHRoZSBpMnMgb3V0cHV0IHRvIHRoZSBtcGVnIGVuY29kZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDI0YTQ4ZjguLjlhMDI1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAjaW5jbHVkZSAiY3g4OC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKIC8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgpAQCAtMjQwLDcgKzI0MSw3IEBACiAJCQkubWluaW11bSAgICAgICA9IDAsCiAJCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCiAJCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4M2YsCiAJCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCX0sCiAJCS5vZmYgICAgICAgICAgICAgICAgICAgPSAwLApAQCAtMjcxLDcgKzI3Miw3IEBACiAJCQkubWluaW11bSAgICAgICA9IDAsCiAJCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCiAJCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4N2YsCiAJCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCX0sCiAJCS5vZmYgICAgICAgICAgICAgICAgICAgPSAwLApAQCAtMjg1LDYgKzI4Niw3IEBACiAJCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKIAkJCS5taW5pbXVtICAgICAgID0gMCwKIAkJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMSwKIAkJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAkJfSwKIAkJLnJlZyAgICAgICAgICAgICAgICAgICA9IEFVRF9WT0xfQ1RMLApAQCAtMjk4LDcgKzMwMCw3IEBACiAJCQkubWluaW11bSAgICAgICA9IDAsCiAJCQkubWF4aW11bSAgICAgICA9IDB4M2YsCiAJCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MWYsCiAJCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCX0sCiAJCS5yZWcgICAgICAgICAgICAgICAgICAgPSBBVURfVk9MX0NUTCwKQEAgLTkxNyw2ICs5MTksOSBAQAogCQljdGwtPnZhbHVlID0gKCh2YWx1ZSArIChjLT5vZmYgPDwgYy0+c2hpZnQpKSAmIGMtPm1hc2spID4+IGMtPnNoaWZ0OwogCQlicmVhazsKIAl9CisJcHJpbnRrKCJnZXRfY29udHJvbCBpZD0weCVYIHJlZz0weCUwMnggdmFsPTB4JTAyeCAobWFzayAweCUwMngpJXNcbiIsCisJCQkJCWN0bC0+aWQsIGMtPnJlZywgY3RsLT52YWx1ZSwKKwkJCQkJYy0+bWFzaywgYy0+c3JlZyA/ICIgW3NoYWRvd2VkXSIgOiAiIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNSwxMyArOTMwLDEzIEBACiB7CiAJLyogc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsgKi8KIAlzdHJ1Y3QgY3g4OF9jdHJsICpjID0gTlVMTDsKLQl1MzIgdl9zYXRfdmFsdWU7Ci0JdTMyIHZhbHVlOworCXUzMiB2YWx1ZSxtYXNrOwogCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IENYODgwMF9DVExTOyBpKyspCi0JCWlmIChjeDg4MDBfY3Rsc1tpXS52LmlkID09IGN0bC0+aWQpCisJZm9yIChpID0gMDsgaSA8IENYODgwMF9DVExTOyBpKyspIHsKKwkJaWYgKGN4ODgwMF9jdGxzW2ldLnYuaWQgPT0gY3RsLT5pZCkgewogCQkJYyA9ICZjeDg4MDBfY3Rsc1tpXTsKKwkJfQorCX0KIAlpZiAoTlVMTCA9PSBjKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtOTM5LDYgKzk0NCw3IEBACiAJCWN0bC0+dmFsdWUgPSBjLT52Lm1pbmltdW07CiAJaWYgKGN0bC0+dmFsdWUgPiBjLT52Lm1heGltdW0pCiAJCWN0bC0+dmFsdWUgPSBjLT52Lm1heGltdW07CisJbWFzaz1jLT5tYXNrOwogCXN3aXRjaCAoY3RsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAkJdmFsdWUgPSAoY3RsLT52YWx1ZSA8IDB4NDApID8gKDB4NDAgLSBjdGwtPnZhbHVlKSA6IGN0bC0+dmFsdWU7CkBAIC05NDgsNTYgKzk1NCw0NCBAQAogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCS8qIHNwZWNpYWwgdl9zYXQgaGFuZGxpbmcgKi8KLQkJdl9zYXRfdmFsdWUgPSBjdGwtPnZhbHVlIC0gKDB4N2YgLSAweDVhKTsKLQkJaWYgKHZfc2F0X3ZhbHVlID4gMHhmZikKLQkJCXZfc2F0X3ZhbHVlID0gMHhmZjsKLQkJaWYgKHZfc2F0X3ZhbHVlIDwgMHgwMCkKLQkJCXZfc2F0X3ZhbHVlID0gMHgwMDsKLQkJY3hfYW5kb3IoTU9fVVZfU0FUVVJBVElPTiwgMHhmZjAwLCB2X3NhdF92YWx1ZSA8PCA4KTsKLQkJLyogZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgcm91dGUgZm9yIHVfc2F0ICovCisKKwkJdmFsdWUgPSAoKGN0bC0+dmFsdWUgLSBjLT5vZmYpIDw8IGMtPnNoaWZ0KSAmIGMtPm1hc2s7CisKKwkJaWYgKGNvcmUtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJLyogRm9yIFNFQ0FNLCBib3RoIFUgYW5kIFYgc2F0IHNob3VsZCBiZSBlcXVhbCAqLworCQkJdmFsdWU9dmFsdWU8PDh8dmFsdWU7CisJCX0gZWxzZSB7CisJCQkvKiBLZWVwcyBVIFNhdHVyYXRpb24gcHJvcG9ydGlvbmFsIHRvIFYgU2F0ICovCisJCQl2YWx1ZT0odmFsdWUqMHg1YSkvMHg3Zjw8OHx2YWx1ZTsKKwkJfQorCQltYXNrPTB4ZmZmZjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmFsdWUgPSAoKGN0bC0+dmFsdWUgLSBjLT5vZmYpIDw8IGMtPnNoaWZ0KSAmIGMtPm1hc2s7CiAJCWJyZWFrOwogCX0KLQlkcHJpbnRrKDEsInNldF9jb250cm9sIGlkPTB4JVggcmVnPTB4JXggdmFsPTB4JXglc1xuIiwKLQkJY3RsLT5pZCwgYy0+cmVnLCB2YWx1ZSwgYy0+c3JlZyA/ICIgW3NoYWRvd2VkXSIgOiAiIik7CisJcHJpbnRrKCJzZXRfY29udHJvbCBpZD0weCVYIHJlZz0weCUwMnggdmFsPTB4JTAyeCAobWFzayAweCUwMngpJXNcbiIsCisJCQkJCWN0bC0+aWQsIGMtPnJlZywgdmFsdWUsCisJCQkJCW1hc2ssIGMtPnNyZWcgPyAiIFtzaGFkb3dlZF0iIDogIiIpOwogCWlmIChjLT5zcmVnKSB7Ci0JCWN4X3NhbmRvcihjLT5zcmVnLCBjLT5yZWcsIGMtPm1hc2ssIHZhbHVlKTsKKwkJY3hfc2FuZG9yKGMtPnNyZWcsIGMtPnJlZywgbWFzaywgdmFsdWUpOwogCX0gZWxzZSB7Ci0JCWN4X2FuZG9yKGMtPnJlZywgYy0+bWFzaywgdmFsdWUpOworCQljeF9hbmRvcihjLT5yZWcsIG1hc2ssIHZhbHVlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLS8qIHN0YXRpYyB2b2lkIGluaXRfY29udHJvbHMoc3RydWN0IGN4ODgwMF9kZXYgKmRldikgKi8KIHN0YXRpYyB2b2lkIGluaXRfY29udHJvbHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSkKIHsKLQlzdGF0aWMgc3RydWN0IHY0bDJfY29udHJvbCBtdXRlID0gewotCQkuaWQgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkudmFsdWUgPSAxLAotCX07Ci0Jc3RhdGljIHN0cnVjdCB2NGwyX2NvbnRyb2wgdm9sdW1lID0gewotCQkuaWQgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS52YWx1ZSA9IDB4M2YsCi0JfTsKLQlzdGF0aWMgc3RydWN0IHY0bDJfY29udHJvbCBodWUgPSB7Ci0JCS5pZCAgICA9IFY0TDJfQ0lEX0hVRSwKLQkJLnZhbHVlID0gMHg4MCwKLQl9OwotCXN0YXRpYyBzdHJ1Y3QgdjRsMl9jb250cm9sIGNvbnRyYXN0ID0gewotCQkuaWQgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKLQkJLnZhbHVlID0gMHg4MCwKLQl9OwotCXN0YXRpYyBzdHJ1Y3QgdjRsMl9jb250cm9sIGJyaWdodG5lc3MgPSB7Ci0JCS5pZCAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCi0JCS52YWx1ZSA9IDB4ODAsCi0JfTsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJaW50IGk7CiAKLQlzZXRfY29udHJvbChjb3JlLCZtdXRlKTsKLQlzZXRfY29udHJvbChjb3JlLCZ2b2x1bWUpOwotCXNldF9jb250cm9sKGNvcmUsJmh1ZSk7Ci0Jc2V0X2NvbnRyb2woY29yZSwmY29udHJhc3QpOwotCXNldF9jb250cm9sKGNvcmUsJmJyaWdodG5lc3MpOworCWZvciAoaSA9IDA7IGkgPCBDWDg4MDBfQ1RMUzsgaSsrKSB7CisJCWN0cmwuaWQ9Y3g4ODAwX2N0bHNbaV0udi5pZDsKKwkJY3RybC52YWx1ZT1jeDg4MDBfY3Rsc1tpXS52LmRlZmF1bHRfdmFsdWUKKwkJCQkrY3g4ODAwX2N0bHNbaV0ub2ZmOworCQlzZXRfY29udHJvbChjb3JlLCAmY3RybCk7CisJfQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTExMjUsNyArMTExOSw3IEBACiAJaW50IGVycjsKIAogCWlmICh2aWRlb19kZWJ1ZyA+IDEpCi0JCWN4ODhfcHJpbnRfaW9jdGwoY29yZS0+bmFtZSxjbWQpOworCQl2NGxfcHJpbnRfaW9jdGwoY29yZS0+bmFtZSxjbWQpOwogCXN3aXRjaCAoY21kKSB7CiAKIAkvKiAtLS0gY2FwYWJpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTI2MSw3ICsxMjU1LDcgQEAKIAogCWRwcmludGsoIDEsICJDT1JFIElPQ1RMOiAweCV4XG4iLCBjbWQgKTsKIAlpZiAodmlkZW9fZGVidWcgPiAxKQotCQljeDg4X3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKKwkJdjRsX3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJLyogLS0tLS0tLS0tLSB0diBub3JtcyAtLS0tLS0tLS0tICovCkBAIC0xNDgxLDcgKzE0NzUsNyBAQAogCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gZGV2LT5jb3JlOwogCiAJaWYgKHZpZGVvX2RlYnVnID4gMSkKLQkJY3g4OF9wcmludF9pb2N0bChjb3JlLT5uYW1lLGNtZCk7CisJCXY0bF9wcmludF9pb2N0bChjb3JlLT5uYW1lLGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1FVRVJZQ0FQOgpAQCAtMTc0MCw2ICsxNzM0LDcgQEAKIAkucG9sbCAgICAgICAgICA9IHZpZGVvX3BvbGwsCiAJLm1tYXAJICAgICAgID0gdmlkZW9fbW1hcCwKIAkuaW9jdGwJICAgICAgID0gdmlkZW9faW9jdGwsCisJLmNvbXBhdF9pb2N0bCAgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgPSBub19sbHNlZWssCiB9OwogCkBAIC0xNzY3LDYgKzE3NjIsNyBAQAogCS5vcGVuICAgICAgICAgID0gdmlkZW9fb3BlbiwKIAkucmVsZWFzZSAgICAgICA9IHZpZGVvX3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgPSByYWRpb19pb2N0bCwKKwkuY29tcGF0X2lvY3RsICA9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKQEAgLTE5MjgsOCArMTkyNCw4IEBACiAKIAkvKiBpbml0aWFsIGRldmljZSBjb25maWd1cmF0aW9uICovCiAJZG93bigmY29yZS0+bG9jayk7Ci0JaW5pdF9jb250cm9scyhjb3JlKTsKIAljeDg4X3NldF90dm5vcm0oY29yZSx0dm5vcm1zKTsKKwlpbml0X2NvbnRyb2xzKGNvcmUpOwogCXZpZGVvX211eChjb3JlLDApOwogCXVwKCZjb3JlLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MmNkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisKKyAgICBjeDg4LXZwMzA1NC1pMmMuYyAgLS0gIHN1cHBvcnQgZm9yIHRoZSBzZWNvbmRhcnkgSTJDIGJ1cyBvZiB0aGUKKwkJCSAgIEROVFYgTGl2ZSEgRFZCLVQgUHJvIChWUC0zMDU0KSwgd2lyZWQgYXM6CisJCQkgICBHUElPWzBdIC0+IFNDTCwgR1BJT1sxXSAtPiBTREEKKworICAgIChjKSAyMDA1IENocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJjeDg4LmgiCisjaW5jbHVkZSAiY3g4OC12cDMwNTQtaTJjLmgiCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgdnAzMDU0X2JpdF9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkYXRhOworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisJc3RydWN0IHZwMzA1NF9pMmNfc3RhdGUgKnZwMzA1NF9pMmMgPSBkZXYtPmNhcmRfcHJpdjsKKworCWlmIChzdGF0ZSkgeworCQl2cDMwNTRfaTJjLT5zdGF0ZSB8PSAgMHgwMDAxOwkvKiBTQ0wgaGlnaCAqLworCQl2cDMwNTRfaTJjLT5zdGF0ZSAmPSB+MHgwMTAwOwkvKiBleHRlcm5hbCBwdWxsdXAgKi8KKwl9IGVsc2UgeworCQl2cDMwNTRfaTJjLT5zdGF0ZSAmPSB+MHgwMDAxOwkvKiBTQ0wgbG93ICovCisJCXZwMzA1NF9pMmMtPnN0YXRlIHw9ICAweDAxMDA7CS8qIGRyaXZlIHBpbiAqLworCX0KKwljeF93cml0ZShNT19HUDBfSU8sIDB4MDEwMDAwIHwgdnAzMDU0X2kyYy0+c3RhdGUpOworCWN4X3JlYWQoTU9fR1AwX0lPKTsKK30KKworc3RhdGljIHZvaWQgdnAzMDU0X2JpdF9zZXRzZGEodm9pZCAqZGF0YSwgaW50IHN0YXRlKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkYXRhOworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisJc3RydWN0IHZwMzA1NF9pMmNfc3RhdGUgKnZwMzA1NF9pMmMgPSBkZXYtPmNhcmRfcHJpdjsKKworCWlmIChzdGF0ZSkgeworCQl2cDMwNTRfaTJjLT5zdGF0ZSB8PSAgMHgwMDAyOwkvKiBTREEgaGlnaCAqLworCQl2cDMwNTRfaTJjLT5zdGF0ZSAmPSB+MHgwMjAwOwkvKiB0cmlzdGF0ZSBwaW4gKi8KKwl9IGVsc2UgeworCQl2cDMwNTRfaTJjLT5zdGF0ZSAmPSB+MHgwMDAyOwkvKiBTREEgbG93ICovCisJCXZwMzA1NF9pMmMtPnN0YXRlIHw9ICAweDAyMDA7CS8qIGRyaXZlIHBpbiAqLworCX0KKwljeF93cml0ZShNT19HUDBfSU8sIDB4MDIwMDAwIHwgdnAzMDU0X2kyYy0+c3RhdGUpOworCWN4X3JlYWQoTU9fR1AwX0lPKTsKK30KKworc3RhdGljIGludCB2cDMwNTRfYml0X2dldHNjbCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkYXRhOworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisJdTMyIHN0YXRlOworCisJc3RhdGUgPSBjeF9yZWFkKE1PX0dQMF9JTyk7CisJcmV0dXJuIChzdGF0ZSAmIDB4MDEpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdnAzMDU0X2JpdF9nZXRzZGEodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCXUzMiBzdGF0ZTsKKworCXN0YXRlID0gY3hfcmVhZChNT19HUDBfSU8pOworCXJldHVybiAoc3RhdGUgJiAweDAyKSA/IDEgOiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIHZwMzA1NF9pMmNfYWxnb190ZW1wbGF0ZSA9IHsKKwkuc2V0c2RhICA9IHZwMzA1NF9iaXRfc2V0c2RhLAorCS5zZXRzY2wgID0gdnAzMDU0X2JpdF9zZXRzY2wsCisJLmdldHNkYSAgPSB2cDMwNTRfYml0X2dldHNkYSwKKwkuZ2V0c2NsICA9IHZwMzA1NF9iaXRfZ2V0c2NsLAorCS51ZGVsYXkgID0gMTYsCisJLm1kZWxheSAgPSAxMCwKKwkudGltZW91dCA9IDIwMCwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgdnAzMDU0X2kyY19hZGFwX3RlbXBsYXRlID0geworCS5uYW1lICAgICAgICAgICAgICA9ICJjeDIzODh4IiwKKwkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkuaWQgICAgICAgICAgICAgICAgPSBJMkNfSFdfQl9DWDIzODh4LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHZwMzA1NF9pMmNfY2xpZW50X3RlbXBsYXRlID0geworCS5uYW1lCT0gIlZQLTMwNTQiLAorfTsKKworaW50IHZwMzA1NF9pMmNfcHJvYmUoc3RydWN0IGN4ODgwMl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCXN0cnVjdCB2cDMwNTRfaTJjX3N0YXRlICp2cDMwNTRfaTJjOworCWludCByYzsKKworCWlmIChjb3JlLT5ib2FyZCAhPSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk8pCisJCXJldHVybiAwOworCisJZGV2LT5jYXJkX3ByaXYgPSBremFsbG9jKHNpemVvZigqdnAzMDU0X2kyYyksIEdGUF9LRVJORUwpOworCWlmIChkZXYtPmNhcmRfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwl2cDMwNTRfaTJjID0gZGV2LT5jYXJkX3ByaXY7CisKKwltZW1jcHkoJnZwMzA1NF9pMmMtPmFkYXAsICZ2cDMwNTRfaTJjX2FkYXBfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZih2cDMwNTRfaTJjLT5hZGFwKSk7CisJbWVtY3B5KCZ2cDMwNTRfaTJjLT5hbGdvLCAmdnAzMDU0X2kyY19hbGdvX3RlbXBsYXRlLAorCSAgICAgICBzaXplb2YodnAzMDU0X2kyYy0+YWxnbykpOworCW1lbWNweSgmdnAzMDU0X2kyYy0+Y2xpZW50LCAmdnAzMDU0X2kyY19jbGllbnRfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZih2cDMwNTRfaTJjLT5jbGllbnQpKTsKKworCXZwMzA1NF9pMmMtPmFkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CisKKwl2cDMwNTRfaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5wY2ktPmRldjsKKwlzdHJsY3B5KHZwMzA1NF9pMmMtPmFkYXAubmFtZSwgY29yZS0+bmFtZSwKKwkJc2l6ZW9mKHZwMzA1NF9pMmMtPmFkYXAubmFtZSkpOworCXZwMzA1NF9pMmMtPmFsZ28uZGF0YSA9IGRldjsKKwlpMmNfc2V0X2FkYXBkYXRhKCZ2cDMwNTRfaTJjLT5hZGFwLCBkZXYpOworCXZwMzA1NF9pMmMtPmFkYXAuYWxnb19kYXRhID0gJnZwMzA1NF9pMmMtPmFsZ287CisJdnAzMDU0X2kyYy0+Y2xpZW50LmFkYXB0ZXIgPSAmdnAzMDU0X2kyYy0+YWRhcDsKKworCXZwMzA1NF9iaXRfc2V0c2NsKGRldiwxKTsKKwl2cDMwNTRfYml0X3NldHNkYShkZXYsMSk7CisKKwlyYyA9IGkyY19iaXRfYWRkX2J1cygmdnAzMDU0X2kyYy0+YWRhcCk7CisJaWYgKDAgIT0gcmMpIHsKKwkJcHJpbnRrKCIlczogdnAzMDU0X2kyYyByZWdpc3RlciBGQUlMRURcbiIsIGNvcmUtPm5hbWUpOworCisJCWtmcmVlKGRldi0+Y2FyZF9wcml2KTsKKwkJZGV2LT5jYXJkX3ByaXYgPSBOVUxMOworCX0KKworCXJldHVybiByYzsKK30KKwordm9pZCB2cDMwNTRfaTJjX3JlbW92ZShzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQoreworCXN0cnVjdCB2cDMwNTRfaTJjX3N0YXRlICp2cDMwNTRfaTJjID0gZGV2LT5jYXJkX3ByaXY7CisKKwlpZiAodnAzMDU0X2kyYyA9PSBOVUxMIHx8CisJICAgIGRldi0+Y29yZS0+Ym9hcmQgIT0gQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1RfUFJPKQorCQlyZXR1cm47CisKKwlpMmNfYml0X2RlbF9idXMoJnZwMzA1NF9pMmMtPmFkYXApOworCWtmcmVlKHZwMzA1NF9pMmMpOworfQorCitFWFBPUlRfU1lNQk9MKHZwMzA1NF9pMmNfcHJvYmUpOworRVhQT1JUX1NZTUJPTCh2cDMwNTRfaTJjX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhMGEwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuaApAQCAtMCwwICsxLDM1IEBACisvKgorCisgICAgY3g4OC12cDMwNTQtaTJjLmggIC0tICBzdXBwb3J0IGZvciB0aGUgc2Vjb25kYXJ5IEkyQyBidXMgb2YgdGhlCisJCQkgICBETlRWIExpdmUhIERWQi1UIFBybyAoVlAtMzA1NCksIHdpcmVkIGFzOgorCQkJICAgR1BJT1swXSAtPiBTQ0wsIEdQSU9bMV0gLT4gU0RBCisKKyAgICAoYykgMjAwNSBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdHJ1Y3QgdnAzMDU0X2kyY19zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAgYWRhcDsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgICBhbGdvOworCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgIGNsaWVudDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitpbnQgIHZwMzA1NF9pMmNfcHJvYmUoc3RydWN0IGN4ODgwMl9kZXYgKmRldik7Cit2b2lkIHZwMzA1NF9pMmNfcmVtb3ZlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggNzdiZWFmYy4uZTlmZDU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0xNzksNiArMTc5LDE0IEBACiAjZGVmaW5lIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVIgICAgICAgICAgMzQKICNkZWZpbmUgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjEwMDAgICAgICAgICAzNQogI2RlZmluZSBDWDg4X0JPQVJEX0FWRVJUVl8zMDMgICAgICAgICAgICAgIDM2CisjZGVmaW5lIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMSAgMzcKKyNkZWZpbmUgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMSAgICAzOAorI2RlZmluZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJTXzEwMCAgICAgICAgIDM5CisjZGVmaW5lIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDAgICAgICAgNDAKKyNkZWZpbmUgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMExQICAgICA0MQorI2RlZmluZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk8gICAgIDQyCisjZGVmaW5lIENYODhfQk9BUkRfS1dPUkxEX0RWQl9UX0NYMjI3MDIgICAgNDMKKyNkZWZpbmUgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUwgNDQKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCkBAIC0yODAsNiArMjg4LDkgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICB0ZGE5ODg3X2NvbmY7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaGFzX3JhZGlvOwogCisJLyogU3VwcG9ydGVkIFY0TCBfU1REXyB0dW5lciBmb3JtYXRzICovCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgdHVuZXJfZm9ybWF0czsKKwogCS8qIGNvbmZpZyBpbmZvIC0tIGR2YiAqLwogCXN0cnVjdCBkdmJfcGxsX2Rlc2MgICAgICAgICpwbGxfZGVzYzsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBwbGxfYWRkcjsKQEAgLTMwMSw2ICszMTIsOSBAQAogCiAJLyogdmFyaW91cyB2NGwgY29udHJvbHMgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBmcmVxOworCisJLyogY3g4OC12aWRlbyBuZWVkcyB0byBhY2Nlc3MgY3g4ODAyIGZvciBoeWJyaWQgdHVuZXIgcGxsIGFjY2Vzcy4gKi8KKwlzdHJ1Y3QgY3g4ODAyX2RldiAgICAgICAgICAqZHZiZGV2OwogfTsKIAogc3RydWN0IGN4ODgwMF9kZXY7CkBAIC00MTEsNiArNDI1LDggQEAKIAlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CiAJdm9pZCogICAgICAgICAgICAgICAgICAgICAgZmVfaGFuZGxlOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqZmVfcmVsZWFzZSkodm9pZCAqaGFuZGxlKTsKKworCXZvaWQJCQkgICAqY2FyZF9wcml2OwogCS8qIGZvciBzd2l0Y2hpbmcgbW9kdWxhdGlvbiB0eXBlcyAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIHRzX2dlbl9jbnRybDsKIApAQCAtNDQ3LDcgKzQ2Myw2IEBACiAKIGV4dGVybiB2b2lkIGN4ODhfcHJpbnRfaXJxYml0cyhjaGFyICpuYW1lLCBjaGFyICp0YWcsIGNoYXIgKipzdHJpbmdzLAogCQkJICAgICAgIHUzMiBiaXRzLCB1MzIgbWFzayk7Ci1leHRlcm4gdm9pZCBjeDg4X3ByaW50X2lvY3RsKGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjbWQpOwogCiBleHRlcm4gaW50IGN4ODhfY29yZV9pcnEoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIHN0YXR1cyk7CiBleHRlcm4gdm9pZCBjeDg4X3dha2V1cChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCA1Nzc3OWU2Li41OGY3YjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgIm1zcDM0MDAuaCIKIAogI2luY2x1ZGUgImVtMjh4eC5oIgpAQCAtMjYxLDcgKzI2Miw2IEBACiAJLyogcmVxdWVzdCBzb21lIG1vZHVsZXMgKi8KIAlpZiAoZGV2LT5tb2RlbCA9PSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yKSB7CiAJCXN0cnVjdCB0dmVlcHJvbSB0djsKLQkJc3RydWN0IHY0bDJfYXVkaW9vdXQgYW87CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJcmVxdWVzdF9tb2R1bGUoInR2ZWVwcm9tIik7CiAJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CkBAIC0yNzQsMTIgKzI3NCw4IEBACiAKIAkJZGV2LT50dW5lcl90eXBlPSB0di50dW5lcl90eXBlOwogCQlpZiAodHYuYXVkaW9fcHJvY2Vzc29yID09IEFVRElPX0NISVBfTVNQMzRYWCkgeworCQkJZGV2LT5pMnNfc3BlZWQ9MjA0ODAwMDsKIAkJCWRldi0+aGFzX21zcDM0eHg9MTsKLQkJCW1lbXNldCAoJmFvLDAsc2l6ZW9mKGFvKSk7Ci0KLQkJCWFvLmluZGV4PTI7Ci0JCQlhby5tb2RlPVY0TDJfQVVETU9ERV8zMkJJVFM7Ci0JCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0FVRE9VVCwgJmFvKTsKIAkJfSBlbHNlCiAJCQlkZXYtPmhhc19tc3AzNHh4PTA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKaW5kZXggMGNmZTc1NC4uZGZmMzg5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qICNkZWZpbmUgRU5BQkxFX0RFQlVHX0lTT0NfRlJBTUVTICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29yZV9kZWJ1ZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29yZV9kZWJ1ZyA9IDA7CiBtb2R1bGVfcGFyYW0oY29yZV9kZWJ1ZyxpbnQsMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNvcmVfZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbY29yZV0iKTsKIApAQCAtNDEsNyArNDEsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlcyAlcyA6ImZtdCwgXAogCQkJIGRldi0+bmFtZSwgX19GVU5DVElPTl9fICwgIyNhcmcpOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZ19kZWJ1ZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX2RlYnVnID0gMDsKIG1vZHVsZV9wYXJhbShyZWdfZGVidWcsaW50LDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZWdfZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbVVJCIHJlZ10iKTsKIApAQCAtNTAsNyArNTAsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlcyAlcyA6ImZtdCwgXAogCQkJIGRldi0+bmFtZSwgX19GVU5DVElPTl9fICwgIyNhcmcpOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlzb2NfZGVidWc7CitzdGF0aWMgdW5zaWduZWQgaW50IGlzb2NfZGVidWcgPSAwOwogbW9kdWxlX3BhcmFtKGlzb2NfZGVidWcsaW50LDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpc29jX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2lzb2MgdHJhbnNmZXJzXSIpOwogCkBAIC02Myw1OSArNjMsNiBAQAogbW9kdWxlX3BhcmFtKGFsdCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWx0LCAiYWx0ZXJuYXRlIHNldHRpbmcgdG8gdXNlIGZvciB2aWRlbyBlbmRwb2ludCIpOwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKLQkiMCIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJTVFVORVIiLCAiR1BJQ1QiLCAiU1BJQ1QiLAotCSJDQ0FQVFVSRSIsICJHV0lOIiwgIlNXSU4iLCAiR0ZCVUYiLCAiU0ZCVUYiLCAiS0VZIiwgIkdGUkVRIiwKLQkiU0ZSRVEiLCAiR0FVRElPIiwgIlNBVURJTyIsICJTWU5DIiwgIk1DQVBUVVJFIiwgIkdNQlVGIiwgIkdVTklUIiwKLQkiR0NBUFRVUkUiLCAiU0NBUFRVUkUiLCAiU1BMQVlNT0RFIiwgIlNXUklURU1PREUiLCAiR1BMQVlJTkZPIiwKLQkiU01JQ1JPQ09ERSIsICJHVkJJRk1UIiwgIlNWQklGTVQiIH07Ci0jZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCi0KLXN0YXRpYyBjb25zdCBjaGFyICp2NGwyX2lvY3Rsc1tdID0gewotCSJRVUVSWUNBUCIsICIxIiwgIkVOVU1fUElYRk1UIiwgIkVOVU1fRkJVRkZNVCIsICJHX0ZNVCIsICJTX0ZNVCIsCi0JIkdfQ09NUCIsICJTX0NPTVAiLCAiUkVRQlVGUyIsICJRVUVSWUJVRiIsICJHX0ZCVUYiLCAiU19GQlVGIiwKLQkiR19XSU4iLCAiU19XSU4iLCAiUFJFVklFVyIsICJRQlVGIiwgIjE2IiwgIkRRQlVGIiwgIlNUUkVBTU9OIiwKLQkiU1RSRUFNT0ZGIiwgIkdfUEVSRiIsICJHX1BBUk0iLCAiU19QQVJNIiwgIkdfU1REIiwgIlNfU1REIiwKLQkiRU5VTVNURCIsICJFTlVNSU5QVVQiLCAiR19DVFJMIiwgIlNfQ1RSTCIsICJHX1RVTkVSIiwgIlNfVFVORVIiLAotCSJHX0ZSRVEiLCAiU19GUkVRIiwgIkdfQVVESU8iLCAiU19BVURJTyIsICIzNSIsICJRVUVSWUNUUkwiLAotCSJRVUVSWU1FTlUiLCAiR19JTlBVVCIsICJTX0lOUFVUIiwgIkVOVU1DVlQiLCAiNDEiLCAiNDIiLCAiNDMiLAotCSI0NCIsICI0NSIsICAiR19PVVRQVVQiLCAiU19PVVRQVVQiLCAiRU5VTU9VVFBVVCIsICJHX0FVRE9VVCIsCi0JIlNfQVVET1VUIiwgIkVOVU1GWCIsICJHX0VGRkVDVCIsICJTX0VGRkVDVCIsICJHX01PRFVMQVRPUiIsCi0JIlNfTU9EVUxBVE9SIgotfTsKLSNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKLQotdm9pZCBlbTI4eHhfcHJpbnRfaW9jdGwoY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNtZCkKLXsKLQljaGFyICpkaXI7Ci0KLQlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKLQljYXNlIF9JT0NfTk9ORTogICAgICAgICAgICAgIGRpciA9ICItLSI7IGJyZWFrOwotCWNhc2UgX0lPQ19SRUFEOiAgICAgICAgICAgICAgZGlyID0gInItIjsgYnJlYWs7Ci0JY2FzZSBfSU9DX1dSSVRFOiAgICAgICAgICAgICBkaXIgPSAiLXciOyBicmVhazsKLQljYXNlIF9JT0NfUkVBRCB8IF9JT0NfV1JJVEU6IGRpciA9ICJydyI7IGJyZWFrOwotCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgZGlyID0gIj8/IjsgYnJlYWs7Ci0JfQotCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKLQljYXNlICd2JzoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDEsICVzLCBWSURJT0MlcylcbiIsCi0JCSAgICAgICBuYW1lLCBjbWQsIGRpciwgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/Ci0JCSAgICAgICB2NGwxX2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIj8/PyIpOwotCQlicmVhazsKLQljYXNlICdWJzoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDIsICVzLCBWSURJT0NfJXMpXG4iLAotCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIChfSU9DX05SKGNtZCkgPCBWNEwyX0lPQ1RMUykgPwotCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKD8/PywgJXMsICMlZClcbiIsCi0JCSAgICAgICBuYW1lLCBjbWQsIGRpciwgX0lPQ19OUihjbWQpKTsKLQl9Ci19Ci0KIAogLyoKICAqIGVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoKQpAQCAtMTI2LDcgKzczLDcgQEAKIAljb25zdCBzaXplX3QgaW1hZ2VzaXplID0gUEFHRV9BTElHTihkZXYtPmZyYW1lX3NpemUpOwkvKm5lZWRzIHRvIGJlIHBhZ2UgYWxpZ25lZCBjYXVzZSB0aGUgYnVmZmVycyBjYW4gYmUgbWFwcGVkIGluZGl2aWR1YWxseSEgKi8KIAl2b2lkICpidWZmID0gTlVMTDsKIAl1MzIgaTsKLQllbTI4eHhfY29yZWRiZygicmVxdWVzdGVkICVpIGJ1ZmZlcnMgd2l0aCBzaXplICV6ZCIsIGNvdW50LCBpbWFnZXNpemUpOworCWVtMjh4eF9jb3JlZGJnKCJyZXF1ZXN0ZWQgJWkgYnVmZmVycyB3aXRoIHNpemUgJXppIiwgY291bnQsIGltYWdlc2l6ZSk7CiAJaWYgKGNvdW50ID4gRU0yOFhYX05VTV9GUkFNRVMpCiAJCWNvdW50ID0gRU0yOFhYX05VTV9GUkFNRVM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCBkMTRiY2Y0Li4wNTkxYTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDg2LDkgKzQ4Nyw3IEBACiAJLmluY191c2UgPSBpbmNfdXNlLAogCS5kZWNfdXNlID0gZGVjX3VzZSwKICNlbmRpZgotI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAkuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotI2VuZGlmCiAJLm5hbWUgPSAiZW0yOHh4IiwKIAkuaWQgPSBJMkNfSFdfQl9FTTI4WFgsCiAJLmFsZ28gPSAmZW0yOHh4X2FsZ28sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IDNhNTYxMjAuLmZkYzI1NTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkx1ZG92aWNvIENhdmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+LCAiIFwKIAkJICAgICAgIk1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+LCAiIFwKQEAgLTEwNiw4ICsxMDcsMzIgQEAKICNkZWZpbmUgVFZOT1JNUyBBUlJBWV9TSVpFKHR2bm9ybXMpCiAKIC8qIHN1cHBvcnRlZCBjb250cm9scyAqLworLyogQ29tbW9uIHRvIGFsbCBib2FyZHMgKi8KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgZW0yOHh4X3FjdHJsW10gPSB7CiAJeworCQkuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVtID0gMHgxZiwKKwkJLnN0ZXAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgxZiwKKwkJLmZsYWdzID0gMCwKKwl9LHsKKwkJLmlkID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSA9ICJNdXRlIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkuZmxhZ3MgPSAwLAorCX0KK307CisKKy8qIEZJWE1FOiBUaGVzZSBhcmUgc3BlY2lmaWMgdG8gc2FhNzExeCAtIHNob3VsZCBiZSBtb3ZlZCB0byBpdHMgY29kZSAqLworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBzYWE3MTF4X3FjdHJsW10gPSB7CisJewogCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkJyaWdodG5lc3MiLApAQCAtMTM1LDI0ICsxNjAsNiBAQAogCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCiAJCS5mbGFncyA9IDAsCiAJfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJWb2x1bWUiLAotCQkubWluaW11bSA9IDB4MCwKLQkJLm1heGltdW0gPSAweDFmLAotCQkuc3RlcCA9IDB4MSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweDFmLAotCQkuZmxhZ3MgPSAwLAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lID0gIk11dGUiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMSwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS5mbGFncyA9IDAsCi0JfSx7CiAJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlJlZCBjaHJvbWEgYmFsYW5jZSIsCkBAIC0xNzksNyArMTg2LDcgQEAKIAkJLnN0ZXAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKIAkJLmZsYWdzID0gMCwKLQkgfQorCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbTI4eHhfdXNiX2RyaXZlcjsKQEAgLTI4MCw2ICsyODcsOCBAQAogCWVtMjh4eF92aWRlb2RiZygiU2V0dGluZyBpbnB1dCBpbmRleD0lZCwgdm11eD0lZCwgYW11eD0lZFxuIixpbmRleCxpbnB1dCxkZXYtPmN0bF9haW5wdXQpOwogCiAJaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKKwkJaWYgKGRldi0+aTJzX3NwZWVkKQorCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRLCAmZGV2LT5pMnNfc3BlZWQpOwogCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0FVRElPLCAmZGV2LT5jdGxfYWlucHV0KTsKIAkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKIAkJZW0yOHh4X2F1ZGlvX3NvdXJjZShkZXYsIGFpbnB1dCk7CkBAIC02NzQsNyArNjgzLDYgQEAKICAqLwogc3RhdGljIGludCBlbTI4eHhfZ2V0X2N0cmwoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXMzMiB0bXA7CiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGU7CkBAIC02ODIsNiArNjkwLDE2IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CiAJCWN0cmwtPnZhbHVlID0gZGV2LT52b2x1bWU7CiAJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLypGSVhNRTogc2hvdWxkIGJlIG1vdmVkIHRvIHNhYTcxMXggKi8KK3N0YXRpYyBpbnQgc2FhNzExeF9nZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJczMyIHRtcDsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlpZiAoKHRtcCA9IGVtMjh4eF9icmlnaHRuZXNzX2dldChkZXYpKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTczMSw2ICs3NDksMTUgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKIAkJZGV2LT52b2x1bWUgPSBjdHJsLT52YWx1ZTsKIAkJcmV0dXJuIGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKkZJWE1FOiBzaG91bGQgYmUgbW92ZWQgdG8gc2FhNzExeCAqLworc3RhdGljIGludCBzYWE3MTF4X3NldF9jdHJsKHN0cnVjdCBlbTI4eHggKmRldiwgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlyZXR1cm4gZW0yOHh4X2JyaWdodG5lc3Nfc2V0KGRldiwgY3RybC0+dmFsdWUpOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CkBAIC05OTQsMTQgKzEwMjEsMzQgQEAKIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJCXsKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCQl1OCBpLCBuOwotCQkJbiA9IHNpemVvZihlbTI4eHhfcWN0cmwpIC8gc2l6ZW9mKGVtMjh4eF9xY3RybFswXSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IGVtMjh4eF9xY3RybFtpXS5pZCkgewotCQkJCQltZW1jcHkocWMsICYoZW0yOHh4X3FjdHJsW2ldKSwKKwkJCWludCBpLCBpZD1xYy0+aWQ7CisKKwkJCW1lbXNldChxYywwLHNpemVvZigqcWMpKTsKKwkJCXFjLT5pZD1pZDsKKworCQkJaWYgKCFkZXYtPmhhc19tc3AzNHh4KSB7CisJCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW0yOHh4X3FjdHJsKTsgaSsrKSB7CisJCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IGVtMjh4eF9xY3RybFtpXS5pZCkgeworCQkJCQkJbWVtY3B5KHFjLCAmKGVtMjh4eF9xY3RybFtpXSksCisJCQkJCQlzaXplb2YoKnFjKSk7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApIHsKKwkJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsY21kLHFjKTsKKwkJCQlpZiAocWMtPnR5cGUpCisJCQkJCXJldHVybiAwOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYWE3MTF4X3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gc2FhNzExeF9xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYoc2FhNzExeF9xY3RybFtpXSksCiAJCQkJCSAgICAgICBzaXplb2YoKnFjKSk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KKwkJCX0KIAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTEwMDksMjkgKzEwNTYsNjQgQEAKIAljYXNlIFZJRElPQ19HX0NUUkw6CiAJCXsKIAkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCQlpbnQgcmV0dmFsPS1FSU5WQUw7CiAKKwkJCWlmICghZGV2LT5oYXNfbXNwMzR4eCkKKwkJCQlyZXR2YWw9ZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCQlpZiAocmV0dmFsPT0tRUlOVkFMKSB7CisJCQkJaWYgKGRldi0+ZGVjb2RlciA9PSBFTTI4WFhfVFZQNTE1MCkgeworCQkJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsY21kLGFyZyk7CisJCQkJCXJldHVybiAwOworCQkJCX0KIAotCQkJcmV0dXJuIGVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOworCQkJCXJldHVybiBzYWE3MTF4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCQl9IGVsc2UgcmV0dXJuIHJldHZhbDsKIAkJfQogCi0JY2FzZSBWSURJT0NfU19DVFJMX09MRDoJLyogPz8/ICovCiAJY2FzZSBWSURJT0NfU19DVFJMOgogCQl7CiAJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQkJdTggaSwgbjsKKwkJCXU4IGk7CiAKLQotCQkJbiA9IHNpemVvZihlbTI4eHhfcWN0cmwpIC8gc2l6ZW9mKGVtMjh4eF9xY3RybFswXSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKLQkJCQkJaWYgKGN0cmwtPnZhbHVlIDwKLQkJCQkJICAgIGVtMjh4eF9xY3RybFtpXS5taW5pbXVtCi0JCQkJCSAgICB8fCBjdHJsLT52YWx1ZSA+Ci0JCQkJCSAgICBlbTI4eHhfcWN0cmxbaV0ubWF4aW11bSkKLQkJCQkJCXJldHVybiAtRVJBTkdFOwotCi0JCQkJCXJldHVybiBlbTI4eHhfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCWlmICghZGV2LT5oYXNfbXNwMzR4eCl7CisJCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW0yOHh4X3FjdHJsKTsgaSsrKSB7CisJCQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKKwkJCQkJCWlmIChjdHJsLT52YWx1ZSA8CisJCQkJCQllbTI4eHhfcWN0cmxbaV0ubWluaW11bQorCQkJCQkJfHwgY3RybC0+dmFsdWUgPgorCQkJCQkJZW0yOHh4X3FjdHJsW2ldLm1heGltdW0pCisJCQkJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQkJCQlyZXR1cm4gZW0yOHh4X3NldF9jdHJsKGRldiwgY3RybCk7CisJCQkJCX0KIAkJCQl9CisJCQl9CisKKwkJCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApIHsKKwkJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsY21kLGFyZyk7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgaWYgKCFkZXYtPmhhc19tc3AzNHh4KSB7CisJCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW0yOHh4X3FjdHJsKTsgaSsrKSB7CisJCQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKKwkJCQkJCWlmIChjdHJsLT52YWx1ZSA8CisJCQkJCQllbTI4eHhfcWN0cmxbaV0ubWluaW11bQorCQkJCQkJfHwgY3RybC0+dmFsdWUgPgorCQkJCQkJZW0yOHh4X3FjdHJsW2ldLm1heGltdW0pCisJCQkJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQkJCQlyZXR1cm4gZW0yOHh4X3NldF9jdHJsKGRldiwgY3RybCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2FhNzExeF9xY3RybCk7IGkrKykgeworCQkJCQlpZiAoY3RybC0+aWQgPT0gc2FhNzExeF9xY3RybFtpXS5pZCkgeworCQkJCQkJaWYgKGN0cmwtPnZhbHVlIDwKKwkJCQkJCXNhYTcxMXhfcWN0cmxbaV0ubWluaW11bQorCQkJCQkJfHwgY3RybC0+dmFsdWUgPgorCQkJCQkJc2FhNzExeF9xY3RybFtpXS5tYXhpbXVtKQorCQkJCQkJCXJldHVybiAtRVJBTkdFOworCQkJCQkJcmV0dXJuIHNhYTcxMXhfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMTE4Nyw3ICsxMjY5LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAodmlkZW9fZGVidWcgPiAxKQotCQllbTI4eHhfcHJpbnRfaW9jdGwoZGV2LT5uYW1lLGNtZCk7CisJCXY0bF9wcmludF9pb2N0bChkZXYtPm5hbWUsY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CiAKQEAgLTE1NjQsNiArMTY0Niw4IEBACiAJLnBvbGwgPSBlbTI4eHhfdjRsMl9wb2xsLAogCS5tbWFwID0gZW0yOHh4X3Y0bDJfbW1hcCwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAorCS5jb21wYXRfaW9jdGwgICA9IHY0bF9jb21wYXRfaW9jdGwzMiwKKwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHVzYiBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODQ4LDkgKzE5MzIsMTIgQEAKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCisvKkZJWE1FOiBJUiBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovCisKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCisKIAlkb3duX3dyaXRlKCZlbTI4eHhfZGlzY29ubmVjdCk7CiAKIAlkb3duKCZkZXYtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCA1YzdhNDFjLi4zM2RlOWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICBlbTI4eHgtY2FyZHMuYyAtIGRyaXZlciBmb3IgRW1waWEgRU0yODAwL0VNMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIGRldmljZXMKKyAgIGVtMjh4eC5oIC0gZHJpdmVyIGZvciBFbXBpYSBFTTI4MDAvRU0yODIwLzI4NDAgVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcwogCiAgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KIAkJICAgICAgTHVkb3ZpY28gQ2F2ZWRvbiA8Y2F2ZWRvbkBzc3N1cC5pdD4KQEAgLTIxNiw2ICsyMTYsOCBAQAogCXVuc2lnbmVkIGludCBoYXNfbXNwMzR4eDoxOwogCXVuc2lnbmVkIGludCBoYXNfdGRhOTg4NzoxOwogCisJdTMyIGkyc19zcGVlZDsJCS8qIEkyUyBzcGVlZCBmb3IgYXVkaW8gZGlnaXRhbCBzdHJlYW0gKi8KKwogCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKIAogCWludCB0dW5lcl90eXBlOwkJLyogdHlwZSBvZiB0aGUgdHVuZXIgKi8KQEAgLTI5Myw4ICsyOTUsNiBAQAogCiAvKiBQcm92aWRlZCBieSBlbTI4eHgtY29yZS5jICovCiAKLXZvaWQgZW0yOHh4X3ByaW50X2lvY3RsKGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjbWQpOwotCiB1MzIgZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUzMiBjb3VudCk7CiB2b2lkIGVtMjh4eF9xdWV1ZV91bnVzZWRmcmFtZXMoc3RydWN0IGVtMjh4eCAqZGV2KTsKIHZvaWQgZW0yOHh4X3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3QgZW0yOHh4ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCAzY2MxZDZhLi41OGIwZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgICA9ICJpciByZW1vdGUga2JkIGRyaXZlciIsCisJCS5uYW1lICAgPSAiaXIta2JkLWkyYyIsCiAJfSwKIAkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfSU5GUkFSRUQsCiAJLmF0dGFjaF9hZGFwdGVyID0gaXJfcHJvYmUsCkBAIC0zMDQsMTggKzMwNCwyMCBAQAogCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IElSX2kyYyksR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpciB8fCAhaW5wdXRfZGV2KSB7Ci0JCWtmcmVlKGlyKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJa2ZyZWUoaXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWVtc2V0KGlyLDAsc2l6ZW9mKCppcikpOwogCiAJaXItPmMgPSBjbGllbnRfdGVtcGxhdGU7CiAJaXItPmlucHV0ID0gaW5wdXRfZGV2OwogCi0JaTJjX3NldF9jbGllbnRkYXRhKCZpci0+YywgaXIpOwogCWlyLT5jLmFkYXB0ZXIgPSBhZGFwOwogCWlyLT5jLmFkZHIgICAgPSBhZGRyOwogCisJaTJjX3NldF9jbGllbnRkYXRhKCZpci0+YywgaXIpOworCiAJc3dpdGNoKGFkZHIpIHsKIAljYXNlIDB4NjQ6CiAJCW5hbWUgICAgICAgID0gIlBpeGVsdmlldyI7CkBAIC0zNzgsMTMgKzM4MCwxNSBAQAogCQkgaXItPmMuZGV2LmJ1c19pZCk7CiAKIAkvKiBpbml0ICsgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlICovCi0JaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZpci0+aXIsIGlyX3R5cGUsIGlyX2NvZGVzKTsKLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUJPSBCVVNfSTJDOwotCWlucHV0X2Rldi0+bmFtZQkJPSBpci0+Yy5uYW1lOwotCWlucHV0X2Rldi0+cGh5cwkJPSBpci0+cGh5czsKKwlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwmaXItPmlyLGlyX3R5cGUsaXItPmlyX2NvZGVzKTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOworCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5jLm5hbWU7CisJaW5wdXRfZGV2LT5waHlzICAgICAgID0gaXItPnBoeXM7CiAKIAkvKiByZWdpc3RlciBldmVudCBkZXZpY2UgKi8KIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwlwcmludGsoREVWTkFNRSAiOiAlcyBkZXRlY3RlZCBhdCAlcyBbJXNdXG4iLAorCSAgICAgICBpci0+aW5wdXQtPm5hbWUsaXItPmlucHV0LT5waHlzLGFkYXAtPm5hbWUpOwogCiAJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCiAJSU5JVF9XT1JLKCZpci0+d29yaywgaXJfd29yaywgaXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCAzZjJhODgyLi4yODY5NDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMTc1NCw2ICsxNzU0LDcgQEAKIAkucmVsZWFzZQk9IG1leWVfcmVsZWFzZSwKIAkubW1hcAkJPSBtZXllX21tYXAsCiAJLmlvY3RsCQk9IG1leWVfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkucG9sbAkJPSBtZXllX3BvbGwsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOGM1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKQEAgLTAsMCArMSwxMjc0IEBACisvKgorICogUHJvZ3JhbW1pbmcgdGhlIG1zcHg0eHggc291bmQgcHJvY2Vzc29yIGZhbWlseQorICoKKyAqIChjKSAxOTk3LTIwMDEgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgorICoKKyAqIHdoYXQgd29ya3MgYW5kIHdoYXQgZG9lc24ndDoKKyAqCisgKiAgQU0tTW9ubworICogICAgICBTdXBwb3J0IGZvciBIYXVwcGF1Z2UgY2FyZHMgYWRkZWQgKGRlY29kaW5nIGhhbmRsZWQgYnkgdHVuZXIpIGFkZGVkIGJ5CisgKiAgICAgIEZyZWRlcmljIENyb3phdCA8ZmNyb3phdEBtYWlsLmRvdGNvbS5mcj4KKyAqCisgKiAgRk0tTW9ubworICogICAgICBzaG91bGQgd29yay4gVGhlIHN0ZXJlbyBtb2RlcyBhcmUgYmFja3dhcmQgY29tcGF0aWJsZSB0byBGTS1tb25vLAorICogICAgICB0aGVyZWZvcmUgRk0tTW9ubyBzaG91bGQgYmUgYWxsd2F5cyBhdmFpbGFibGUuCisgKgorICogIEZNLVN0ZXJlbyAoQi9HLCB1c2VkIGluIGdlcm1hbnkpCisgKiAgICAgIHNob3VsZCB3b3JrLCB3aXRoIGF1dG9kZXRlY3QKKyAqCisgKiAgRk0tU3RlcmVvIChzYXRlbGxpdGUpCisgKiAgICAgIHNob3VsZCB3b3JrLCBubyBhdXRvZGV0ZWN0IChpLmUuIGRlZmF1bHQgaXMgbW9ubywgYnV0IHlvdSBjYW4KKyAqICAgICAgc3dpdGNoIHRvIHN0ZXJlbyAtLSB1bnRlc3RlZCkKKyAqCisgKiAgTklDQU0gKEIvRywgTCAsIHVzZWQgaW4gVUssIFNjYW5kaW5hdmlhLCBTcGFpbiBhbmQgRnJhbmNlKQorICogICAgICBzaG91bGQgd29yaywgd2l0aCBhdXRvZGV0ZWN0LiBTdXBwb3J0IGZvciBOSUNBTSB3YXMgYWRkZWQgYnkKKyAqICAgICAgUGVra2EgUGlldGlrYWluZW4gPHBwQG5ldHBwbC5maT4KKyAqCisgKiBUT0RPOgorICogICAtIGJldHRlciBTQVQgc3VwcG9ydAorICoKKyAqIDk4MDYyMyAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQorICogICAgICAgICB1c2luZyBzb3VuZGNvcmUgaW5zdGVhZCBvZiBPU1MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgIm1zcDM0MDAuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitNT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIG1zcDM0eHggVFYgc291bmQgcHJvY2Vzc29yIik7CitNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IG9wbW9kZSAgID0gT1BNT0RFX0FVVE87CitpbnQgZGVidWcgICAgPSAwOyAgICAvKiBkZWJ1ZyBvdXRwdXQgKi8KK2ludCBvbmNlICAgICA9IDA7ICAgIC8qIG5vIGNvbnRpbm91cyBzdGVyZW8gbW9uaXRvcmluZyAqLworaW50IGFtc291bmQgID0gMDsgICAgLyogaGFyZC13aXJlIEFNIHNvdW5kIGF0IDYuNSBIeiAoZnJhbmNlKSwKKwkJCSAgICAgICB0aGUgYXV0b3NjYW4gc2VlbXMgd29yayB3ZWxsIG9ubHkgd2l0aCBGTS4uLiAqLworaW50IHN0YW5kYXJkID0gMTsgICAgLyogT3ZlcnJpZGUgYXV0byBkZXRlY3Qgb2YgYXVkaW8gc3RhbmRhcmQsIGlmIG5lZWRlZC4gKi8KK2ludCBkb2xieSAgICA9IDA7CisKK2ludCBzdGVyZW9fdGhyZXNob2xkID0gMHgxOTA7IC8qIGEyIHRocmVzaG9sZCBmb3Igc3RlcmVvL2JpbGluZ3VhbAorCQkJCQkobXNwMzR4eGcgb25seSkgMHgwMGEwLTB4MDNjMCAqLworCisvKiByZWFkLW9ubHkgKi8KK21vZHVsZV9wYXJhbShvcG1vZGUsICAgICAgICAgICBpbnQsIDA0NDQpOworCisvKiByZWFkLXdyaXRlICovCittb2R1bGVfcGFyYW0ob25jZSwgICAgICAgICAgICAgYm9vbCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGVidWcsICAgICAgICAgICAgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShzdGVyZW9fdGhyZXNob2xkLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHN0YW5kYXJkLCAgICAgICAgIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oYW1zb3VuZCwgICAgICAgICAgYm9vbCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZG9sYnksICAgICAgICAgICAgYm9vbCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0Mob3Btb2RlLCAiRm9yY2VzIGEgTVNQMzQwMCBvcG1vZGUuIDA9TWFudWFsLCAxPUF1dG9kZXRlY3QsIDI9QXV0b2RldGVjdCBhbmQgYXV0b3NlbGVjdCIpOworTU9EVUxFX1BBUk1fREVTQyhvbmNlLCAiTm8gY29udGludW91cyBzdGVyZW8gbW9uaXRvcmluZyIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbMC0zXSIpOworTU9EVUxFX1BBUk1fREVTQyhzdGVyZW9fdGhyZXNob2xkLCAiU2V0cyBzaWduYWwgdGhyZXNob2xkIHRvIGFjdGl2YXRlIHN0ZXJlbyIpOworTU9EVUxFX1BBUk1fREVTQyhzdGFuZGFyZCwgIlNwZWNpZnkgYXVkaW8gc3RhbmRhcmQ6IDMyID0gTlRTQywgNjQgPSByYWRpbywgRGVmYXVsdDogQXV0b2RldGVjdCIpOworTU9EVUxFX1BBUk1fREVTQyhhbXNvdW5kLCAiSGFyZHdpcmUgQU0gc291bmQgYXQgNi41SHogKEZyYW5jZSksIEZNIGNhbiBhdXRvc2NhbiIpOworTU9EVUxFX1BBUk1fREVTQyhkb2xieSwgIkFjdGl2YXRlcyBEb2xieSBwcm9jZXNzc2luZyIpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGNvbnRyb2wgc3ViYWRkcmVzcyAqLworI2RlZmluZSBJMkNfTVNQX0NPTlRST0wgMHgwMAorLyogZGVtb2R1bGF0b3IgdW5pdCBzdWJhZGRyZXNzICovCisjZGVmaW5lIEkyQ19NU1BfREVNICAgICAweDEwCisvKiBEU1AgdW5pdCBzdWJhZGRyZXNzICovCisjZGVmaW5lIEkyQ19NU1BfRFNQICAgICAweDEyCisKKy8qIEFkZHJlc3NlcyB0byBzY2FuICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDgwID4+IDEsIDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK0kyQ19DTElFTlRfSU5TTU9EOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZnVuY3Rpb25zIGZvciB0YWxraW5nIHRvIHRoZSBNU1AzNDAwQyBTb3VuZCBwcm9jZXNzb3IgICAgICAgICAgICAgICAgICAgKi8KKworaW50IG1zcF9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCS8qIHJlc2V0IGFuZCByZWFkIHJldmlzaW9uIGNvZGUgKi8KKwlzdGF0aWMgdTggcmVzZXRfb2ZmWzNdID0geyBJMkNfTVNQX0NPTlRST0wsIDB4ODAsIDB4MDAgfTsKKwlzdGF0aWMgdTggcmVzZXRfb25bM10gID0geyBJMkNfTVNQX0NPTlRST0wsIDB4MDAsIDB4MDAgfTsKKwlzdGF0aWMgdTggd3JpdGVbM10gICAgID0geyBJMkNfTVNQX0RTUCArIDEsIDB4MDAsIDB4MWUgfTsKKwl1OCByZWFkWzJdOworCXN0cnVjdCBpMmNfbXNnIHJlc2V0WzJdID0geworCQl7IGNsaWVudC0+YWRkciwgSTJDX01fSUdOT1JFX05BSywgMywgcmVzZXRfb2ZmIH0sCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9JR05PUkVfTkFLLCAzLCByZXNldF9vbiAgfSwKKwl9OworCXN0cnVjdCBpMmNfbXNnIHRlc3RbMl0gPSB7CisJCXsgY2xpZW50LT5hZGRyLCAwLCAgICAgICAgMywgd3JpdGUgfSwKKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAyLCByZWFkICB9LAorCX07CisKKwl2NGxfZGJnKDMsIGNsaWVudCwgIm1zcF9yZXNldFxuIik7CisJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZyZXNldFswXSwgMSkgIT0gMSB8fAorCSAgICBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmcmVzZXRbMV0sIDEpICE9IDEgfHwKKwkgICAgaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgdGVzdCwgMikgIT0gMikgeworCQl2NGxfZXJyKGNsaWVudCwgImNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc3BfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZGV2LCBpbnQgYWRkcikKK3sKKwlpbnQgZXJyLCByZXR2YWw7CisJdTggd3JpdGVbM107CisJdTggcmVhZFsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0geworCQl7IGNsaWVudC0+YWRkciwgMCwgICAgICAgIDMsIHdyaXRlIH0sCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgMiwgcmVhZCAgfQorCX07CisKKwl3cml0ZVswXSA9IGRldiArIDE7CisJd3JpdGVbMV0gPSBhZGRyID4+IDg7CisJd3JpdGVbMl0gPSBhZGRyICYgMHhmZjsKKworCWZvciAoZXJyID0gMDsgZXJyIDwgMzsgZXJyKyspIHsKKwkJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpCisJCQlicmVhazsKKwkJdjRsX3dhcm4oY2xpZW50LCAiSS9PIGVycm9yICMlZCAocmVhZCAweCUwMngvMHglMDJ4KVxuIiwgZXJyLAorCQkgICAgICAgZGV2LCBhZGRyKTsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMCkpOworCX0KKwlpZiAoZXJyID09IDMpIHsKKwkJdjRsX3dhcm4oY2xpZW50LCAiZ2l2aW5nIHVwLCByZXNldHRpbmcgY2hpcC4gU291bmQgd2lsbCBnbyBvZmYsIHNvcnJ5IGZvbGtzIDotfFxuIik7CisJCW1zcF9yZXNldChjbGllbnQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHZhbCA9IHJlYWRbMF0gPDwgOCB8IHJlYWRbMV07CisJdjRsX2RiZygzLCBjbGllbnQsICJtc3BfcmVhZCgweCV4LCAweCV4KTogMHgleFxuIiwgZGV2LCBhZGRyLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBtc3BfcmVhZF9kZW0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIpCit7CisJcmV0dXJuIG1zcF9yZWFkKGNsaWVudCwgSTJDX01TUF9ERU0sIGFkZHIpOworfQorCitpbnQgbXNwX3JlYWRfZHNwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhZGRyKQoreworCXJldHVybiBtc3BfcmVhZChjbGllbnQsIEkyQ19NU1BfRFNQLCBhZGRyKTsKK30KKworc3RhdGljIGludCBtc3Bfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRldiwgaW50IGFkZHIsIGludCB2YWwpCit7CisJaW50IGVycjsKKwl1OCBidWZmZXJbNV07CisKKwlidWZmZXJbMF0gPSBkZXY7CisJYnVmZmVyWzFdID0gYWRkciA+PiA4OworCWJ1ZmZlclsyXSA9IGFkZHIgJiAgMHhmZjsKKwlidWZmZXJbM10gPSB2YWwgID4+IDg7CisJYnVmZmVyWzRdID0gdmFsICAmICAweGZmOworCisJdjRsX2RiZygzLCBjbGllbnQsICJtc3Bfd3JpdGUoMHgleCwgMHgleCwgMHgleClcbiIsIGRldiwgYWRkciwgdmFsKTsKKwlmb3IgKGVyciA9IDA7IGVyciA8IDM7IGVycisrKSB7CisJCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDUpID09IDUpCisJCQlicmVhazsKKwkJdjRsX3dhcm4oY2xpZW50LCAiSS9PIGVycm9yICMlZCAod3JpdGUgMHglMDJ4LzB4JTAyeClcbiIsIGVyciwKKwkJICAgICAgIGRldiwgYWRkcik7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKwl9CisJaWYgKGVyciA9PSAzKSB7CisJCXY0bF93YXJuKGNsaWVudCwgImdpdmluZyB1cCwgcmVzZXR0aW5nIGNoaXAuIFNvdW5kIHdpbGwgZ28gb2ZmLCBzb3JyeSBmb2xrcyA6LXxcbiIpOworCQltc3BfcmVzZXQoY2xpZW50KTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1zcF93cml0ZV9kZW0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIsIGludCB2YWwpCit7CisJcmV0dXJuIG1zcF93cml0ZShjbGllbnQsIEkyQ19NU1BfREVNLCBhZGRyLCB2YWwpOworfQorCitpbnQgbXNwX3dyaXRlX2RzcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkciwgaW50IHZhbCkKK3sKKwlyZXR1cm4gbXNwX3dyaXRlKGNsaWVudCwgSTJDX01TUF9EU1AsIGFkZHIsIHZhbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqIGJpdHMgIDkgIDggIDUgLSBTQ0FSVCBEU1AgaW5wdXQgU2VsZWN0OgorICogICAgICAgMCAgMCAgMCAtIFNDQVJUIDEgdG8gRFNQIGlucHV0IChyZXNldCBwb3NpdGlvbikKKyAqICAgICAgIDAgIDEgIDAgLSBNT05PIHRvIERTUCBpbnB1dAorICogICAgICAgMSAgMCAgMCAtIFNDQVJUIDIgdG8gRFNQIGlucHV0CisgKiAgICAgICAxICAxICAxIC0gTXV0ZSBEU1AgaW5wdXQKKyAqCisgKiBiaXRzIDExIDEwICA2IC0gU0NBUlQgMSBPdXRwdXQgU2VsZWN0OgorICogICAgICAgMCAgMCAgMCAtIHVuZGVmaW5lZCAocmVzZXQgcG9zaXRpb24pCisgKiAgICAgICAwICAxICAwIC0gU0NBUlQgMiBJbnB1dCB0byBTQ0FSVCAxIE91dHB1dCAoZm9yIGRldmljZXMgd2l0aCAyIFNDQVJUUykKKyAqICAgICAgIDEgIDAgIDAgLSBNT05PIGlucHV0IHRvIFNDQVJUIDEgT3V0cHV0CisgKiAgICAgICAxICAxICAwIC0gU0NBUlQgMSBEQSB0byBTQ0FSVCAxIE91dHB1dAorICogICAgICAgMCAgMCAgMSAtIFNDQVJUIDIgREEgdG8gU0NBUlQgMSBPdXRwdXQKKyAqICAgICAgIDAgIDEgIDEgLSBTQ0FSVCAxIElucHV0IHRvIFNDQVJUIDEgT3V0cHV0CisgKiAgICAgICAxICAxICAxIC0gTXV0ZSBTQ0FSVCAxIE91dHB1dAorICoKKyAqIGJpdHMgMTMgMTIgIDcgLSBTQ0FSVCAyIE91dHB1dCBTZWxlY3QgKGZvciBkZXZpY2VzIHdpdGggMiBPdXRwdXQgU0NBUlQpOgorICogICAgICAgMCAgMCAgMCAtIFNDQVJUIDEgREEgdG8gU0NBUlQgMiBPdXRwdXQgKHJlc2V0IHBvc2l0aW9uKQorICogICAgICAgMCAgMSAgMCAtIFNDQVJUIDEgSW5wdXQgdG8gU0NBUlQgMiBPdXRwdXQKKyAqICAgICAgIDEgIDAgIDAgLSBNT05PIGlucHV0IHRvIFNDQVJUIDIgT3V0cHV0CisgKiAgICAgICAwICAwICAxIC0gU0NBUlQgMiBEQSB0byBTQ0FSVCAyIE91dHB1dAorICogICAgICAgMCAgMSAgMSAtIFNDQVJUIDIgSW5wdXQgdG8gU0NBUlQgMiBPdXRwdXQKKyAqICAgICAgIDEgIDEgIDAgLSBNdXRlIFNDQVJUIDIgT3V0cHV0CisgKgorICogQml0cyA0IHRvIDAgc2hvdWxkIGJlIHplcm8uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNjYXJ0c1szXVs5XSA9IHsKKwkvKiBNQVNLICAgIElOMSAgICAgSU4yICAgICBJTjFfREEgIElOMl9EQSAgSU4zICAgICBJTjQgICAgIE1PTk8gICAgTVVURSAgICovCisJLyogU0NBUlQgRFNQIElucHV0IHNlbGVjdCAqLworCXsgMHgwMzIwLCAweDAwMDAsIDB4MDIwMCwgLTEsICAgICAtMSwgICAgIDB4MDMwMCwgMHgwMDIwLCAweDAxMDAsIDB4MDMyMCB9LAorCS8qIFNDQVJUMSBPdXRwdXQgc2VsZWN0ICovCisJeyAweDBjNDAsIDB4MDQ0MCwgMHgwNDAwLCAweDBjMDAsIDB4MDA0MCwgMHgwMDAwLCAweDA4NDAsIDB4MDgwMCwgMHgwYzQwIH0sCisJLyogU0NBUlQyIE91dHB1dCBzZWxlY3QgKi8KKwl7IDB4MzA4MCwgMHgxMDAwLCAweDEwODAsIDB4MDAwMCwgMHgwMDgwLCAweDIwODAsIDB4MzA4MCwgMHgyMDAwLCAweDMwMDAgfSwKK307CisKK3N0YXRpYyBjaGFyICpzY2FydF9uYW1lc1tdID0geworCSJtYXNrIiwgImluMSIsICJpbjIiLCAiaW4xIGRhIiwgImluMiBkYSIsICJpbjMiLCAiaW40IiwgIm1vbm8iLCAibXV0ZSIKK307CisKK3ZvaWQgbXNwX3NldF9zY2FydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW4sIGludCBvdXQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN0YXRlLT5pbl9zY2FydD1pbjsKKworCWlmIChpbiA+PSAxICYmIGluIDw9IDggJiYgb3V0ID49IDAgJiYgb3V0IDw9IDIpIHsKKwkJaWYgKC0xID09IHNjYXJ0c1tvdXRdW2luXSkKKwkJCXJldHVybjsKKworCQlzdGF0ZS0+YWNiICY9IH5zY2FydHNbb3V0XVtTQ0FSVF9NQVNLXTsKKwkJc3RhdGUtPmFjYiB8PSAgc2NhcnRzW291dF1baW5dOworCX0gZWxzZQorCQlzdGF0ZS0+YWNiID0gMHhmNjA7IC8qIE11dGUgSW5wdXQgYW5kIFNDQVJUIDEgT3V0cHV0ICovCisKKwl2NGxfZGJnKDEsIGNsaWVudCwgInNjYXJ0IHN3aXRjaDogJXMgPT4gJWQgKEFDQj0weCUwNHgpXG4iLAorCQkJCQkJc2NhcnRfbmFtZXNbaW5dLCBvdXQsIHN0YXRlLT5hY2IpOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDEzLCBzdGF0ZS0+YWNiKTsKKworCS8qIFNldHMgSTJTIHNwZWVkIDAgPSAxLjAyNCBNYnBzLCAxID0gMi4wNDggTWJwcyAqLworCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOworfQorCit2b2lkIG1zcF9zZXRfbXV0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGxfZGJnKDEsIGNsaWVudCwgIm11dGUgYXVkaW9cbiIpOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDAsIDApOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDcsIDEpOworCWlmIChzdGF0ZS0+aGFzX3NjYXJ0Ml9vdXRfdm9sdW1lKQorCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDQwLCAxKTsKKwlpZiAoc3RhdGUtPmhhc19oZWFkcGhvbmVzKQorCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA2LCAwKTsKK30KKwordm9pZCBtc3Bfc2V0X2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgYmFsID0gMCwgYmFzcywgdHJlYmxlLCBsb3VkbmVzczsKKwlpbnQgdmFsID0gMDsKKworCWlmICghc3RhdGUtPm11dGVkKQorCQl2YWwgPSAoc3RhdGUtPnZvbHVtZSAqIDB4N2YgLyA2NTUzNSkgPDwgODsKKworCXY0bF9kYmcoMSwgY2xpZW50LCAibXV0ZT0lcyB2b2x1bWU9JWRcbiIsCisJCXN0YXRlLT5tdXRlZCA/ICJvbiIgOiAib2ZmIiwgc3RhdGUtPnZvbHVtZSk7CisKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAwLCB2YWwpOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDcsIHN0YXRlLT5tdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKKwlpZiAoc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSkKKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDA0MCwgc3RhdGUtPm11dGVkID8gMHgxIDogKHZhbCB8IDB4MSkpOworCWlmIChzdGF0ZS0+aGFzX2hlYWRwaG9uZXMpCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDYsIHZhbCk7CisJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCXJldHVybjsKKworCWlmICh2YWwpCisJCWJhbCA9ICh1OCkoKHN0YXRlLT5iYWxhbmNlIC8gMjU2KSAtIDEyOCk7CisJYmFzcyA9ICgoc3RhdGUtPmJhc3MgLSAzMjc2OCkgKiAweDYwIC8gNjU1MzUpIDw8IDg7CisJdHJlYmxlID0gKChzdGF0ZS0+dHJlYmxlIC0gMzI3NjgpICogMHg2MCAvIDY1NTM1KSA8PCA4OworCWxvdWRuZXNzID0gc3RhdGUtPmxvdWRuZXNzID8gKCg1ICogNCkgPDwgOCkgOiAwOworCisJdjRsX2RiZygxLCBjbGllbnQsICJiYWxhbmNlPSVkIGJhc3M9JWQgdHJlYmxlPSVkIGxvdWRuZXNzPSVkXG4iLAorCQlzdGF0ZS0+YmFsYW5jZSwgc3RhdGUtPmJhc3MsIHN0YXRlLT50cmVibGUsIHN0YXRlLT5sb3VkbmVzcyk7CisKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAxLCBiYWwgPDwgOCk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwMiwgYmFzcyk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwMywgdHJlYmxlKTsKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA0LCBsb3VkbmVzcyk7CisJaWYgKCFzdGF0ZS0+aGFzX2hlYWRwaG9uZXMpCisJCXJldHVybjsKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDMwLCBiYWwgPDwgOCk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAzMSwgYmFzcyk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAzMiwgdHJlYmxlKTsKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDMzLCBsb3VkbmVzcyk7Cit9CisKK2ludCBtc3BfbW9kdXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKHN0YXRlLT5yYWRpbykgeworCQl2NGxfZGJnKDEsIGNsaWVudCwgInZpZGVvIG1vZGUgc2VsZWN0ZWQgdG8gUmFkaW9cbiIpOworCQlyZXR1cm4gMHgwMDAzOworCX0KKworCWlmIChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFBBTFxuIik7CisKKyNpZiAxCisJCS8qIGV4cGVyaW1lbnRhbDogbm90IHN1cmUgdGhpcyB3b3JrcyB3aXRoIGFsbCBjaGlwIHZlcnNpb25zICovCisJCXJldHVybiAweDcwMDM7CisjZWxzZQorCQkvKiBwcmV2aW91cyB2YWx1ZSwgdHJ5IHRoaXMgaWYgaXQgYnJlYWtzIC4uLiAqLworCQlyZXR1cm4gMHgxMDAzOworI2VuZGlmCisJfQorCWlmIChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBOVFNDXG4iKTsKKwkJcmV0dXJuIDB4MjAwMzsKKwl9CisJaWYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBTRUNBTVxuIik7CisJCXJldHVybiAweDAwMDM7CisJfQorCXJldHVybiAweDAwMDM7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKK3N0YXRpYyB2b2lkIG1zcF93YWtlX3RocmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoTlVMTCA9PSBzdGF0ZS0+a3RocmVhZCkKKwkJcmV0dXJuOworCW1zcF9zZXRfbXV0ZShjbGllbnQpOworCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOworCXN0YXRlLT5yZXN0YXJ0ID0gMTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT53cSk7Cit9CisKK2ludCBtc3Bfc2xlZXAoc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUsIGludCB0aW1lb3V0KQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJYWRkX3dhaXRfcXVldWUoJnN0YXRlLT53cSwgJndhaXQpOworCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWlmICh0aW1lb3V0IDwgMCkgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlKCk7CisJCX0gZWxzZSB7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUKKwkJCQkJCShtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKTsKKwkJfQorCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCZzdGF0ZS0+d3EsICZ3YWl0KTsKKwl0cnlfdG9fZnJlZXplKCk7CisJcmV0dXJuIHN0YXRlLT5yZXN0YXJ0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoaW50IHJ4c3ViY2hhbnMpCit7CisJaW50IG1vZGUgPSAwOworCisJaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCisJCW1vZGUgfD0gVklERU9fU09VTkRfU1RFUkVPOworCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpCisJCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzI7CisJaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMSkKKwkJbW9kZSB8PSBWSURFT19TT1VORF9MQU5HMTsKKwlpZiAobW9kZSA9PSAwKQorCQltb2RlIHw9IFZJREVPX1NPVU5EX01PTk87CisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyBpbnQgbXNwX21vZGVfdjRsMV90b192NGwyKGludCBtb2RlKQoreworCWlmIChtb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQorCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwlpZiAobW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQorCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX0xBTkcyOworCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzEpCisJCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzE7CisJcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9NT05POworfQorCitzdGF0aWMgdm9pZCBtc3BfYW55X2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoc3RhdGUtPm9wbW9kZSkgeworCWNhc2UgT1BNT0RFX01BTlVBTDoKKwljYXNlIE9QTU9ERV9BVVRPREVURUNUOgorCQlhdXRvZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCQlicmVhazsKKwljYXNlIE9QTU9ERV9BVVRPU0VMRUNUOgorCQltc3AzNHh4Z19kZXRlY3Rfc3RlcmVvKGNsaWVudCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBtc3BfcWN0cmxfc3RkW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAorCQkuc3RlcCAgICAgICAgICA9IDY1NTM1LzEwMCwKKwkJLmRlZmF1bHRfdmFsdWUgPSA1ODg4MCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfSx7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgbXNwX3FjdHJsX3NvdW5kX3Byb2Nlc3NpbmdbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fQkFMQU5DRSwKKwkJLm5hbWUgICAgICAgICAgPSAiQmFsYW5jZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBU1MsCisJCS5uYW1lICAgICAgICAgID0gIkJhc3MiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCisJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfSx7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVFJFQkxFLAorCQkubmFtZSAgICAgICAgICA9ICJUcmVibGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCisJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfSx7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTE9VRE5FU1MsCisJCS5uYW1lICAgICAgICAgID0gIkxvdWRuZXNzIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LAorfTsKKworCitzdGF0aWMgdm9pZCBtc3BfYW55X3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhdWRtb2RlKQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKHN0YXRlLT5vcG1vZGUpIHsKKwljYXNlIE9QTU9ERV9NQU5VQUw6CisJY2FzZSBPUE1PREVfQVVUT0RFVEVDVDoKKwkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDA7CisJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIGF1ZG1vZGUpOworCQlicmVhazsKKwljYXNlIE9QTU9ERV9BVVRPU0VMRUNUOgorCQltc3AzNHh4Z19zZXRfYXVkbW9kZShjbGllbnQsIGF1ZG1vZGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXNwX2dldF9jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+dm9sdW1lOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKKwkJCXJldHVybiAtRUlOVkFMOworCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5iYWxhbmNlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YmFzczsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+dHJlYmxlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CisJCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPmxvdWRuZXNzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc3Bfc2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlzdGF0ZS0+dm9sdW1lID0gY3RybC0+dmFsdWU7CisJCWlmIChzdGF0ZS0+dm9sdW1lID09IDApCisJCQlzdGF0ZS0+YmFsYW5jZSA9IDMyNzY4OworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+PSAyKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCXN0YXRlLT5tdXRlZCA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3RhdGUtPmJhc3MgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3RhdGUtPnRyZWJsZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CisJCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXN0YXRlLT5sb3VkbmVzcyA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3RhdGUtPmJhbGFuY2UgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zcF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUxNiAqc2FyZyA9IGFyZzsKKwlpbnQgc2NhcnQgPSAwOworCisJaWYgKGRlYnVnID49IDIpCisJCXY0bF9pMmNfcHJpbnRfaW9jdGwoY2xpZW50LCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEFVRENfU0VUX0lOUFVUOgorCQlpZiAoKnNhcmcgPT0gc3RhdGUtPmlucHV0KQorCQkJYnJlYWs7CisJCXN0YXRlLT5pbnB1dCA9ICpzYXJnOworCQlzd2l0Y2ggKCpzYXJnKSB7CisJCWNhc2UgQVVESU9fUkFESU86CisJCQkvKiBIYXVwcGF1Z2UgdXNlcyBJTjIgZm9yIHRoZSByYWRpbyAqLworCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9GTV9SQURJTzsKKwkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOXzE6CisJCQkvKiBJTjEgaXMgb2Z0ZW4gdXNlZCBmb3IgZXh0ZXJuYWwgaW5wdXQgLi4uICovCisJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0VYVEVSTjsKKwkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4xOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOXzI6CisJCQkvKiAuLi4gc29tZXRpbWVzIGl0IGlzIElOMiB0aHJvdWdoIDspICovCisJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0VYVEVSTjsKKwkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQlzdGF0ZS0+bW9kZSA9IC0xOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoKnNhcmcgJiBBVURJT19NVVRFKQorCQkJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBTQ0FSVF9NVVRFLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzY2FydCkgeworCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQltc3Bfc2V0X3NjYXJ0KGNsaWVudCwgc2NhcnQsIDApOworCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwZCwgMHgxOTAwKTsKKwkJCWlmIChzdGF0ZS0+b3Btb2RlICE9IE9QTU9ERV9BVVRPU0VMRUNUKQorCQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIHN0YXRlLT5hdWRtb2RlKTsKKwkJfQorCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIEFVRENfU0VUX1JBRElPOgorCQlpZiAoc3RhdGUtPnJhZGlvKQorCQkJcmV0dXJuIDA7CisJCXN0YXRlLT5yYWRpbyA9IDE7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAic3dpdGNoaW5nIHRvIHJhZGlvIG1vZGVcbiIpOworCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMDsKKwkJc3dpdGNoIChzdGF0ZS0+b3Btb2RlKSB7CisJCWNhc2UgT1BNT0RFX01BTlVBTDoKKwkJCS8qIHNldCBtc3AzNDAwIHRvIEZNIHJhZGlvIG1vZGUgKi8KKwkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9SQURJTyk7CisJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoMTAuNyksCisJCQkJCSAgICBNU1BfQ0FSUklFUigxMC43KSk7CisJCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBPUE1PREVfQVVUT0RFVEVDVDoKKwkJY2FzZSBPUE1PREVfQVVUT1NFTEVDVDoKKwkJCS8qIHRoZSB0aHJlYWQgd2lsbCBkbyBmb3IgdXMgKi8KKwkJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkvKiAtLS0gdjRsIGlvY3RscyAtLS0gKi8KKwkvKiB0YWtlIGNhcmU6IGJ0dHYgZG9lcyB1c2Vyc3BhY2UgY29weWluZywgd2UnbGwgZ2V0IGEKKwkgICBrZXJuZWwgcG9pbnRlciBoZXJlLi4uICovCisJY2FzZSBWSURJT0NHQVVESU86CisJeworCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOworCisJCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19WT0xVTUUgfCBWSURFT19BVURJT19NVVRBQkxFOworCQlpZiAoc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQorCQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX0JBTEFOQ0UgfAorCQkJCVZJREVPX0FVRElPX0JBU1MgfAorCQkJCVZJREVPX0FVRElPX1RSRUJMRTsKKwkJaWYgKHN0YXRlLT5tdXRlZCkKKwkJCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOworCQl2YS0+dm9sdW1lID0gc3RhdGUtPnZvbHVtZTsKKwkJdmEtPmJhbGFuY2UgPSBzdGF0ZS0+dm9sdW1lID8gc3RhdGUtPmJhbGFuY2UgOiAzMjc2ODsKKwkJdmEtPmJhc3MgPSBzdGF0ZS0+YmFzczsKKwkJdmEtPnRyZWJsZSA9IHN0YXRlLT50cmVibGU7CisKKwkJaWYgKHN0YXRlLT5yYWRpbykKKwkJCWJyZWFrOworCQlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkKKwkJCW1zcF9hbnlfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCQl2YS0+bW9kZSA9IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShzdGF0ZS0+cnhzdWJjaGFucyk7CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DU0FVRElPOgorCXsKKwkJc3RydWN0IHZpZGVvX2F1ZGlvICp2YSA9IGFyZzsKKworCQlzdGF0ZS0+bXV0ZWQgPSAodmEtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSk7CisJCXN0YXRlLT52b2x1bWUgPSB2YS0+dm9sdW1lOworCQlzdGF0ZS0+YmFsYW5jZSA9IHZhLT5iYWxhbmNlOworCQlzdGF0ZS0+YmFzcyA9IHZhLT5iYXNzOworCQlzdGF0ZS0+dHJlYmxlID0gdmEtPnRyZWJsZTsKKwkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCisJCWlmICh2YS0+bW9kZSAhPSAwICYmIHN0YXRlLT5yYWRpbyA9PSAwKQorCQkJbXNwX2FueV9zZXRfYXVkbW9kZShjbGllbnQsIG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1NDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjID0gYXJnOworCQlpbnQgdXBkYXRlID0gMDsKKwkJdjRsMl9zdGRfaWQgc3RkOworCisJCWlmIChzdGF0ZS0+cmFkaW8pCisJCQl1cGRhdGUgPSAxOworCQlzdGF0ZS0+cmFkaW8gPSAwOworCQlpZiAodmMtPm5vcm0gPT0gVklERU9fTU9ERV9QQUwpCisJCQlzdGQgPSBWNEwyX1NURF9QQUw7CisJCWVsc2UgaWYgKHZjLT5ub3JtID09IFZJREVPX01PREVfU0VDQU0pCisJCQlzdGQgPSBWNEwyX1NURF9TRUNBTTsKKwkJZWxzZQorCQkJc3RkID0gVjRMMl9TVERfTlRTQzsKKwkJaWYgKHN0ZCAhPSBzdGF0ZS0+djRsMl9zdGQpIHsKKwkJCXN0YXRlLT52NGwyX3N0ZCA9IHN0ZDsKKwkJCXVwZGF0ZSA9IDE7CisJCX0KKwkJaWYgKHVwZGF0ZSkKKwkJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1NGUkVROgorCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCXsKKwkJLyogbmV3IGNoYW5uZWwgLS0ga2ljayBhdWRpbyBjYXJyaWVyIHNjYW4gKi8KKwkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CisJCWJyZWFrOworCX0KKworCS8qIG1zcDM0eHggc3BlY2lmaWMgKi8KKwljYXNlIE1TUF9TRVRfTUFUUklYOgorCXsKKwkJc3RydWN0IG1zcF9tYXRyaXggKm1zcG0gPSBhcmc7CisKKwkJbXNwX3NldF9zY2FydChjbGllbnQsIG1zcG0tPmlucHV0LCBtc3BtLT5vdXRwdXQpOworCQlicmVhazsKKwl9CisKKwkvKiAtLS0gdjRsMiBpb2N0bHMgLS0tICovCisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CisJCWludCB1cGRhdGUgPSBzdGF0ZS0+cmFkaW8gfHwgc3RhdGUtPnY0bDJfc3RkICE9ICppZDsKKworCQlzdGF0ZS0+djRsMl9zdGQgPSAqaWQ7CisJCXN0YXRlLT5yYWRpbyA9IDA7CisJCWlmICh1cGRhdGUpCisJCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCXsKKwkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CisKKwkJaWYgKGktPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCQlzd2l0Y2ggKGktPmluZGV4KSB7CisJCWNhc2UgQVVESU9fUkFESU86CisJCQlzdHJjcHkoaS0+bmFtZSwgIlJhZGlvIik7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk5fMToKKwkJCXN0cmNweShpLT5uYW1lLCAiRXh0ZXJuIDEiKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8yOgorCQkJc3RyY3B5KGktPm5hbWUsICJFeHRlcm4gMiIpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQlzdHJjcHkoaS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19BVURJTzoKKwl7CisJCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOworCisJCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKKworCQlzd2l0Y2ggKGEtPmluZGV4KSB7CisJCWNhc2UgQVVESU9fUkFESU86CisJCQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk5fMToKKwkJCXN0cmNweShhLT5uYW1lLCAiRXh0ZXJuIDEiKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8yOgorCQkJc3RyY3B5KGEtPm5hbWUsICJFeHRlcm4gMiIpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQlzdHJjcHkoYS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltc3BfYW55X2RldGVjdF9zdGVyZW8oY2xpZW50KTsKKwkJaWYgKHN0YXRlLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pIHsKKwkJCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJCX0KKworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19TX0FVRElPOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKnNhcmcgPSBhcmc7CisKKwkJc3dpdGNoIChzYXJnLT5pbmRleCkgeworCQljYXNlIEFVRElPX1JBRElPOgorCQkJLyogSGF1cHBhdWdlIHVzZXMgSU4yIGZvciB0aGUgcmFkaW8gKi8KKwkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fUkFESU87CisJCQlzY2FydCAgICAgICA9IFNDQVJUX0lOMjsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8xOgorCQkJLyogSU4xIGlzIG9mdGVuIHVzZWQgZm9yIGV4dGVybmFsIGlucHV0IC4uLiAqLworCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9FWFRFUk47CisJCQlzY2FydCAgICAgICA9IFNDQVJUX0lOMTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8yOgorCQkJLyogLi4uIHNvbWV0aW1lcyBpdCBpcyBJTjIgdGhyb3VnaCA7KSAqLworCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9FWFRFUk47CisJCQlzY2FydCAgICAgICA9IFNDQVJUX0lOMjsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX1RVTkVSOgorCQkJc3RhdGUtPm1vZGUgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzY2FydCkgeworCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQltc3Bfc2V0X3NjYXJ0KGNsaWVudCwgc2NhcnQsIDApOworCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwZCwgMHgxOTAwKTsKKwkJfQorCQlpZiAoc2FyZy0+Y2FwYWJpbGl0eSA9PSBWNEwyX0FVRENBUF9TVEVSRU8pIHsKKwkJCXN0YXRlLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJfSBlbHNlIHsKKwkJCXN0YXRlLT5hdWRtb2RlICY9IH5WNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQl9CisJCW1zcF9hbnlfc2V0X2F1ZG1vZGUoY2xpZW50LCBzdGF0ZS0+YXVkbW9kZSk7CisJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19HX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOworCisJCWlmIChzdGF0ZS0+cmFkaW8pCisJCQlicmVhazsKKwkJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpCisJCQltc3BfYW55X2RldGVjdF9zdGVyZW8oY2xpZW50KTsKKwkJdnQtPmF1ZG1vZGUgICAgPSBzdGF0ZS0+YXVkbW9kZTsKKwkJdnQtPnJ4c3ViY2hhbnMgPSBzdGF0ZS0+cnhzdWJjaGFuczsKKwkJdnQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfU19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IChzdHJ1Y3QgdjRsMl90dW5lciAqKWFyZzsKKworCQlpZiAoc3RhdGUtPnJhZGlvKQorCQkJYnJlYWs7CisJCS8qIG9ubHkgc2V0IGF1ZG1vZGUgKi8KKwkJaWYgKHZ0LT5hdWRtb2RlICE9IC0xICYmIHZ0LT5hdWRtb2RlICE9IDApCisJCQltc3BfYW55X3NldF9hdWRtb2RlKGNsaWVudCwgdnQtPmF1ZG1vZGUpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19HX0FVRE9VVDoKKwl7CisJCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICphID0gKHN0cnVjdCB2NGwyX2F1ZGlvb3V0ICopYXJnOworCQlpbnQgaWR4ID0gYS0+aW5kZXg7CisKKwkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOworCisJCXN3aXRjaCAoaWR4KSB7CisJCWNhc2UgMDoKKwkJCXN0cmNweShhLT5uYW1lLCAiU2NhcnQxIE91dCIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXN0cmNweShhLT5uYW1lLCAiU2NhcnQyIE91dCIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN0cmNweShhLT5uYW1lLCAiSTJTIE91dCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCX0KKworCWNhc2UgVklESU9DX1NfQVVET1VUOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKmEgPSAoc3RydWN0IHY0bDJfYXVkaW9vdXQgKilhcmc7CisKKwkJaWYgKGEtPmluZGV4IDwgMCB8fCBhLT5pbmRleCA+IDIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2NGxfZGJnKDEsIGNsaWVudCwgIlNldHRpbmcgYXVkaW8gb3V0IG9uIG1zcDM0eHggdG8gaW5wdXQgJWlcbiIsIGEtPmluZGV4KTsKKwkJbXNwX3NldF9zY2FydChjbGllbnQsIHN0YXRlLT5pbl9zY2FydCwgYS0+aW5kZXggKyAxKTsKKworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVE6CisJeworCQl1MzIgKmEgPSAodTMyICopYXJnOworCisJCXY0bF9kYmcoMSwgY2xpZW50LCAiU2V0dGluZyBJMlMgc3BlZWQgdG8gJWRcbiIsICphKTsKKworCQlzd2l0Y2ggKCphKSB7CisJCQljYXNlIDEwMjQwMDA6CisJCQkJc3RhdGUtPmkyc19tb2RlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjA0ODAwMDoKKwkJCQlzdGF0ZS0+aTJzX21vZGUgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtc3BfcWN0cmxfc3RkKTsgaSsrKQorCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gbXNwX3FjdHJsX3N0ZFtpXS5pZCkgeworCQkJCW1lbWNweShxYywgJm1zcF9xY3RybF9zdGRbaV0sIHNpemVvZigqcWMpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXNwX3FjdHJsX3NvdW5kX3Byb2Nlc3NpbmcpOyBpKyspCisJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBtc3BfcWN0cmxfc291bmRfcHJvY2Vzc2luZ1tpXS5pZCkgeworCQkJCW1lbWNweShxYywgJm1zcF9xY3RybF9zb3VuZF9wcm9jZXNzaW5nW2ldLCBzaXplb2YoKnFjKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJcmV0dXJuIG1zcF9nZXRfY3RybChjbGllbnQsIGFyZyk7CisKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJCXJldHVybiBtc3Bfc2V0X2N0cmwoY2xpZW50LCBhcmcpOworCisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwl7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpCisJCQltc3BfYW55X2RldGVjdF9zdGVyZW8oY2xpZW50KTsKKwkJdjRsX2luZm8oY2xpZW50LCAiJXMgcmV2MSA9IDB4JTA0eCByZXYyID0gMHglMDR4XG4iLAorCQkJCWNsaWVudC0+bmFtZSwgc3RhdGUtPnJldjEsIHN0YXRlLT5yZXYyKTsKKwkJdjRsX2luZm8oY2xpZW50LCAiQXVkaW86ICAgIHZvbHVtZSAlZCVzXG4iLAorCQkJCXN0YXRlLT52b2x1bWUsIHN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7CisJCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpIHsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIkF1ZGlvOiAgICBiYWxhbmNlICVkIGJhc3MgJWQgdHJlYmxlICVkIGxvdWRuZXNzICVzXG4iLAorCQkJCQlzdGF0ZS0+YmFsYW5jZSwgc3RhdGUtPmJhc3MsIHN0YXRlLT50cmVibGUsCisJCQkJCXN0YXRlLT5sb3VkbmVzcyA/ICJvbiIgOiAib2ZmIik7CisJCX0KKwkJc3dpdGNoIChzdGF0ZS0+bW9kZSkgeworCQljYXNlIE1TUF9NT0RFX0FNX0RFVEVDVDogcCA9ICJBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0KSI7IGJyZWFrOworCQljYXNlIE1TUF9NT0RFX0ZNX1JBRElPOiBwID0gIkZNIFJhZGlvIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfRk1fVEVSUkE6IHAgPSAiVGVycmVzdGlhbCBGTS1tb25vICsgRk0tc3RlcmVvIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfRk1fU0FUOiBwID0gIlNhdGVsbGl0ZSBGTS1tb25vIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfRk1fTklDQU0xOiBwID0gIk5JQ0FNL0ZNIChCL0csIEQvSykiOyBicmVhazsKKwkJY2FzZSBNU1BfTU9ERV9GTV9OSUNBTTI6IHAgPSAiTklDQU0vRk0gKEkpIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfQU1fTklDQU06IHAgPSAiTklDQU0vQU0gKEwpIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfQlRTQzogcCA9ICJCVFNDIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfRVhURVJOOiBwID0gIkV4dGVybmFsIGlucHV0IjsgYnJlYWs7CisJCWRlZmF1bHQ6IHAgPSAidW5rbm93biI7IGJyZWFrOworCQl9CisJCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9NQU5VQUwpIHsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIk1vZGU6ICAgICAlcyAoJXMlcylcbiIsIHAsCisJCQkJKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKSA/ICJzdGVyZW8iIDogIm1vbm8iLAorCQkJCShzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKSA/ICIsIGR1YWwiIDogIiIpOworCQl9IGVsc2UgeworCQkJdjRsX2luZm8oY2xpZW50LCAiTW9kZTogICAgICVzXG4iLCBwKTsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIlN0YW5kYXJkOiAlcyAoJXMlcylcbiIsCisJCQkJbXNwX3N0YW5kYXJkX3N0ZF9uYW1lKHN0YXRlLT5zdGQpLAorCQkJCShzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykgPyAic3RlcmVvIiA6ICJtb25vIiwKKwkJCQkoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMikgPyAiLCBkdWFsIiA6ICIiKTsKKwkJfQorCQl2NGxfaW5mbyhjbGllbnQsICJBQ0I6ICAgICAgMHglMDR4XG4iLCBzdGF0ZS0+YWNiKTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJLyogbm90aGluZyAqLworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKKworCXY0bF9kYmcoMSwgY2xpZW50LCAic3VzcGVuZFxuIik7CisJbXNwX3Jlc2V0KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKKworCXY0bF9kYmcoMSwgY2xpZW50LCAicmVzdW1lXG4iKTsKKwltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXI7CisKK3N0YXRpYyBpbnQgbXNwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlOworCWludCAoKnRocmVhZF9mdW5jKSh2b2lkICpkYXRhKSA9IE5VTEw7CisJaW50IG1zcF9oYXJkOworCWludCBtc3BfZmFtaWx5OworCWludCBtc3BfcmV2aXNpb247CisJaW50IG1zcF9wcm9kdWN0LCBtc3BfcHJvZF9oaSwgbXNwX3Byb2RfbG87CisJaW50IG1zcF9yb207CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoY2xpZW50LCAwLCBzaXplb2YoKmNsaWVudCkpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAibXNwMzQwMCIpOworCisJaWYgKG1zcF9yZXNldChjbGllbnQpID09IC0xKSB7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAibXNwMzQwMCBub3QgZm91bmRcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCisJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJc3RhdGUtPnY0bDJfc3RkID0gVjRMMl9TVERfTlRTQzsKKwlzdGF0ZS0+dm9sdW1lID0gNTg4ODA7CS8qIDBkYiBnYWluICovCisJc3RhdGUtPmJhbGFuY2UgPSAzMjc2ODsJLyogMGRiIGdhaW4gKi8KKwlzdGF0ZS0+YmFzcyA9IDMyNzY4OworCXN0YXRlLT50cmVibGUgPSAzMjc2ODsKKwlzdGF0ZS0+bG91ZG5lc3MgPSAwOworCXN0YXRlLT5pbnB1dCA9IC0xOworCXN0YXRlLT5tdXRlZCA9IDA7CisJc3RhdGUtPmkyc19tb2RlID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdGF0ZS0+d3EpOworCisJc3RhdGUtPnJldjEgPSBtc3BfcmVhZF9kc3AoY2xpZW50LCAweDFlKTsKKwlpZiAoc3RhdGUtPnJldjEgIT0gLTEpCisJCXN0YXRlLT5yZXYyID0gbXNwX3JlYWRfZHNwKGNsaWVudCwgMHgxZik7CisJdjRsX2RiZygxLCBjbGllbnQsICJyZXYxPTB4JTA0eCwgcmV2Mj0weCUwNHhcbiIsIHN0YXRlLT5yZXYxLCBzdGF0ZS0+cmV2Mik7CisJaWYgKHN0YXRlLT5yZXYxID09IC0xIHx8IChzdGF0ZS0+cmV2MSA9PSAwICYmIHN0YXRlLT5yZXYyID09IDApKSB7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAibm90IGFuIG1zcDM0MDAgKGNhbm5vdCByZWFkIGNoaXAgdmVyc2lvbilcbiIpOworCQlrZnJlZShzdGF0ZSk7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisKKwltc3BfZmFtaWx5ID0gKChzdGF0ZS0+cmV2MSA+PiA0KSAmIDB4MGYpICsgMzsKKwltc3BfcHJvZHVjdCA9IChzdGF0ZS0+cmV2MiA+PiA4KSAmIDB4ZmY7CisJbXNwX3Byb2RfaGkgPSBtc3BfcHJvZHVjdCAvIDEwOworCW1zcF9wcm9kX2xvID0gbXNwX3Byb2R1Y3QgJSAxMDsKKwltc3BfcmV2aXNpb24gPSAoc3RhdGUtPnJldjEgJiAweDBmKSArICdAJzsKKwltc3BfaGFyZCA9ICgoc3RhdGUtPnJldjEgPj4gOCkgJiAweGZmKSArICdAJzsKKwltc3Bfcm9tID0gc3RhdGUtPnJldjIgJiAweDFmOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSksICJNU1AlZDQlMDJkJWMtJWMlZCIsCisJCQltc3BfZmFtaWx5LCBtc3BfcHJvZHVjdCwKKwkJCW1zcF9yZXZpc2lvbiwgbXNwX2hhcmQsIG1zcF9yb20pOworCisJLyogSGFzIE5JQ0FNIHN1cHBvcnQ6IGFsbCBtc3B4NDF4IGFuZCBtc3B4NDV4IHByb2R1Y3RzIGhhdmUgTklDQU0gKi8KKwlzdGF0ZS0+aGFzX25pY2FtID0gbXNwX3Byb2RfaGkgPT0gMSB8fCBtc3BfcHJvZF9oaSA9PSA1OworCS8qIEhhcyByYWRpbyBzdXBwb3J0OiB3YXMgYWRkZWQgd2l0aCByZXZpc2lvbiBHICovCisJc3RhdGUtPmhhc19yYWRpbyA9IG1zcF9yZXZpc2lvbiA+PSAnRyc7CisJLyogSGFzIGhlYWRwaG9uZXMgb3V0cHV0OiBub3QgZm9yIHN0cmlwcGVkIGRvd24gcHJvZHVjdHMgKi8KKwlzdGF0ZS0+aGFzX2hlYWRwaG9uZXMgPSBtc3BfcHJvZF9sbyA8IDU7CisJLyogSGFzIHNjYXJ0NCBpbnB1dDogbm90IGluIHByZSBEIHJldmlzaW9ucywgbm90IGluIHN0cmlwcGVkIEQgcmV2cyAqLworCXN0YXRlLT5oYXNfc2NhcnQ0ID0gbXNwX2ZhbWlseSA+PSA0IHx8IChtc3BfcmV2aXNpb24gPj0gJ0QnICYmIG1zcF9wcm9kX2xvIDwgNSk7CisJLyogSGFzIHNjYXJ0MiBhbmQgc2NhcnQzIGlucHV0cyBhbmQgc2NhcnQyIG91dHB1dDogbm90IGluIHN0cmlwcGVkCisJICAgZG93biBwcm9kdWN0cyBvZiB0aGUgJzMnIGZhbWlseSAqLworCXN0YXRlLT5oYXNfc2NhcnQyM19pbl9zY2FydDJfb3V0ID0gbXNwX2ZhbWlseSA+PSA0IHx8IG1zcF9wcm9kX2xvIDwgNTsKKwkvKiBIYXMgc2NhcnQyIGEgdm9sdW1lIGNvbnRyb2w/IE5vdCBpbiBwcmUtRCByZXZpc2lvbnMuICovCisJc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSA9IG1zcF9yZXZpc2lvbiA+ICdDJyAmJiBzdGF0ZS0+aGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dDsKKwkvKiBIYXMgYSBjb25maWd1cmFibGUgaTJzIG91dD8gKi8KKwlzdGF0ZS0+aGFzX2kyc19jb25mID0gbXNwX3JldmlzaW9uID49ICdHJyAmJiBtc3BfcHJvZF9sbyA8IDc7CisJLyogSGFzIHN1Yndvb2ZlciBvdXRwdXQ6IG5vdCBpbiBwcmUtRCByZXZzIGFuZCBub3QgaW4gc3RyaXBwZWQgZG93biBwcm9kdWN0cyAqLworCXN0YXRlLT5oYXNfc3Vid29vZmVyID0gbXNwX3JldmlzaW9uID49ICdEJyAmJiBtc3BfcHJvZF9sbyA8IDU7CisJLyogSGFzIHNvdW5kcHJvY2Vzc2luZyAoYmFzcy90cmVibGUvYmFsYW5jZS9sb3VkbmVzcy9lcXVhbGl6ZXIpOiBub3QgaW4KKwkgICBzdHJpcHBlZCBkb3duIHByb2R1Y3RzICovCisJc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nID0gbXNwX3Byb2RfbG8gPCA3OworCS8qIEhhcyBWaXJ0dWFsIERvbGJ5IFN1cnJvdW5kOiBvbmx5IGluIG1zcDM0eDEgKi8KKwlzdGF0ZS0+aGFzX3ZpcnR1YWxfZG9sYnlfc3Vycm91bmQgPSBtc3BfcmV2aXNpb24gPT0gJ0cnICYmIG1zcF9wcm9kX2xvID09IDE7CisJLyogSGFzIFZpcnR1YWwgRG9sYnkgU3Vycm91bmQgJiBEb2xieSBQcm8gTG9naWM6IG9ubHkgaW4gbXNwMzR4MiAqLworCXN0YXRlLT5oYXNfZG9sYnlfcHJvX2xvZ2ljID0gbXNwX3JldmlzaW9uID09ICdHJyAmJiBtc3BfcHJvZF9sbyA9PSAyOworCisJc3RhdGUtPm9wbW9kZSA9IG9wbW9kZTsKKwlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUTykgeworCQkvKiBNU1AgcmV2aXNpb24gRyBhbmQgdXAgaGF2ZSBib3RoIGF1dG9kZXRlY3QgYW5kIGF1dG9zZWxlY3QgKi8KKwkJaWYgKG1zcF9yZXZpc2lvbiA+PSAnRycpCisJCQlzdGF0ZS0+b3Btb2RlID0gT1BNT0RFX0FVVE9TRUxFQ1Q7CisJCS8qIE1TUCByZXZpc2lvbiBEIGFuZCB1cCBoYXZlIGF1dG9kZXRlY3QgKi8KKwkJZWxzZSBpZiAobXNwX3JldmlzaW9uID49ICdEJykKKwkJCXN0YXRlLT5vcG1vZGUgPSBPUE1PREVfQVVUT0RFVEVDVDsKKwkJZWxzZQorCQkJc3RhdGUtPm9wbW9kZSA9IE9QTU9ERV9NQU5VQUw7CisJfQorCisJLyogaGVsbG8gd29ybGQgOi0pICovCisJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIGNsaWVudC0+bmFtZSwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKKwl2NGxfaW5mbyhjbGllbnQsICIlcyAiLCBjbGllbnQtPm5hbWUpOworCWlmIChzdGF0ZS0+aGFzX25pY2FtICYmIHN0YXRlLT5oYXNfcmFkaW8pCisJCXByaW50aygic3VwcG9ydHMgbmljYW0gYW5kIHJhZGlvLCAiKTsKKwllbHNlIGlmIChzdGF0ZS0+aGFzX25pY2FtKQorCQlwcmludGsoInN1cHBvcnRzIG5pY2FtLCAiKTsKKwllbHNlIGlmIChzdGF0ZS0+aGFzX3JhZGlvKQorCQlwcmludGsoInN1cHBvcnRzIHJhZGlvLCAiKTsKKwlwcmludGsoIm1vZGUgaXMgIik7CisKKwkvKiB2ZXJzaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCisJc3dpdGNoIChzdGF0ZS0+b3Btb2RlKSB7CisJY2FzZSBPUE1PREVfTUFOVUFMOgorCQlwcmludGsoIm1hbnVhbCIpOworCQl0aHJlYWRfZnVuYyA9IG1zcDM0MDBjX3RocmVhZDsKKwkJYnJlYWs7CisJY2FzZSBPUE1PREVfQVVUT0RFVEVDVDoKKwkJcHJpbnRrKCJhdXRvZGV0ZWN0Iik7CisJCXRocmVhZF9mdW5jID0gbXNwMzQxMGRfdGhyZWFkOworCQlicmVhazsKKwljYXNlIE9QTU9ERV9BVVRPU0VMRUNUOgorCQlwcmludGsoImF1dG9kZXRlY3QgYW5kIGF1dG9zZWxlY3QiKTsKKwkJdGhyZWFkX2Z1bmMgPSBtc3AzNHh4Z190aHJlYWQ7CisJCWJyZWFrOworCX0KKwlwcmludGsoIlxuIik7CisKKwkvKiBzdGFydHVwIGNvbnRyb2wgdGhyZWFkIGlmIG5lZWRlZCAqLworCWlmICh0aHJlYWRfZnVuYykgeworCQlzdGF0ZS0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHRocmVhZF9mdW5jLCBjbGllbnQsICJtc3AzNHh4Iik7CisKKwkJaWYgKHN0YXRlLT5rdGhyZWFkID09IE5VTEwpCisJCQl2NGxfd2FybihjbGllbnQsICJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXG4iKTsKKwkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CisJfQorCisJLyogZG9uZSAqLworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc3BfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbXNwX2F0dGFjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNwX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGVycjsKKworCS8qIHNodXRkb3duIGNvbnRyb2wgdGhyZWFkICovCisJaWYgKHN0YXRlLT5rdGhyZWFkKSB7CisJCXN0YXRlLT5yZXN0YXJ0ID0gMTsKKwkJa3RocmVhZF9zdG9wKHN0YXRlLT5rdGhyZWFkKTsKKwl9CisJbXNwX3Jlc2V0KGNsaWVudCk7CisKKwllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlrZnJlZShzdGF0ZSk7CisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlciA9IHsKKwkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfTVNQMzQwMCwKKwkuYXR0YWNoX2FkYXB0ZXIgPSBtc3BfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgID0gbXNwX2RldGFjaCwKKwkuY29tbWFuZCAgICAgICAgPSBtc3BfY29tbWFuZCwKKwkuZHJpdmVyID0geworCQkubmFtZSAgICA9ICJtc3AzNDAwIiwKKwkJLnN1c3BlbmQgPSBtc3Bfc3VzcGVuZCwKKwkJLnJlc3VtZSAgPSBtc3BfcmVzdW1lLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtc3AzNDAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1zcDM0MDBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1zcDM0MDBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQobXNwMzQwMF9jbGVhbnVwX21vZHVsZSk7CisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU5YjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKQEAgLTAsMCArMSwxMDEwIEBACisvKgorICogUHJvZ3JhbW1pbmcgdGhlIG1zcHg0eHggc291bmQgcHJvY2Vzc29yIGZhbWlseQorICoKKyAqIChjKSAxOTk3LTIwMDEgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSAibXNwMzQwMC5oIgorCisvKiB0aGlzIG9uZSB1c2VzIHRoZSBhdXRvbWF0aWMgc291bmQgc3RhbmRhcmQgZGV0ZWN0aW9uIG9mIG5ld2VyIG1zcDM0eHgKKyAgIGNoaXAgdmVyc2lvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCWludCByZXR2YWw7CisJaW50IG1haW4sIHNlY29uZDsKKwljaGFyICpuYW1lOworfSBtc3Bfc3RkbGlzdFtdID0geworCXsgMHgwMDAwLCAwLCAwLCAiY291bGQgbm90IGRldGVjdCBzb3VuZCBzdGFuZGFyZCIgfSwKKwl7IDB4MDAwMSwgMCwgMCwgImF1dG9kZXRlY3Qgc3RhcnQiIH0sCisJeyAweDAwMDIsIE1TUF9DQVJSSUVSKDQuNSksIE1TUF9DQVJSSUVSKDQuNzIpLCAiNC41LzQuNzIgIE0gRHVhbCBGTS1TdGVyZW8iIH0sCisJeyAweDAwMDMsIE1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNzQyMTg3NSksICI1LjUvNS43NCAgQi9HIER1YWwgRk0tU3RlcmVvIiB9LAorCXsgMHgwMDA0LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjI1NzgxMjUpLCAiNi41LzYuMjUgIEQvSzEgRHVhbCBGTS1TdGVyZW8iIH0sCisJeyAweDAwMDUsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNzQyMTg3NSksICI2LjUvNi43NCAgRC9LMiBEdWFsIEZNLVN0ZXJlbyIgfSwKKwl7IDB4MDAwNiwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwgIjYuNSAgRC9LIEZNLU1vbm8gKEhERVYzKSIgfSwKKwl7IDB4MDAwOCwgTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS44NSksICI1LjUvNS44NSAgQi9HIE5JQ0FNIEZNIiB9LAorCXsgMHgwMDA5LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBMIE5JQ0FNIEFNIiB9LAorCXsgMHgwMDBhLCBNU1BfQ0FSUklFUig2LjApLCBNU1BfQ0FSUklFUig2LjU1KSwgIjYuMC82LjU1ICBJIE5JQ0FNIEZNIiB9LAorCXsgMHgwMDBiLCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBEL0sgTklDQU0gRk0iIH0sCisJeyAweDAwMGMsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDUuODUpLCAiNi41LzUuODUgIEQvSyBOSUNBTSBGTSAoSERFVjIpIiB9LAorCXsgMHgwMDIwLCBNU1BfQ0FSUklFUig0LjUpLCBNU1BfQ0FSUklFUig0LjUpLCAiNC41ICBNIEJUU0MtU3RlcmVvIiB9LAorCXsgMHgwMDIxLCBNU1BfQ0FSUklFUig0LjUpLCBNU1BfQ0FSUklFUig0LjUpLCAiNC41ICBNIEJUU0MtTW9ubyArIFNBUCIgfSwKKwl7IDB4MDAzMCwgTVNQX0NBUlJJRVIoNC41KSwgTVNQX0NBUlJJRVIoNC41KSwgIjQuNSAgTSBFSUEtSiBKYXBhbiBTdGVyZW8iIH0sCisJeyAweDAwNDAsIE1TUF9DQVJSSUVSKDEwLjcpLCBNU1BfQ0FSUklFUigxMC43KSwgIjEwLjcgIEZNLVN0ZXJlbyBSYWRpbyIgfSwKKwl7IDB4MDA1MCwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwgIjYuNSAgU0FULU1vbm8iIH0sCisJeyAweDAwNTEsIE1TUF9DQVJSSUVSKDcuMDIpLCBNU1BfQ0FSUklFUig3LjIwKSwgIjcuMDIvNy4yMCAgU0FULVN0ZXJlbyIgfSwKKwl7IDB4MDA2MCwgTVNQX0NBUlJJRVIoNy4yKSwgTVNQX0NBUlJJRVIoNy4yKSwgIjcuMiAgU0FUIEFEUiIgfSwKKwl7ICAgICAtMSwgMCwgMCwgTlVMTCB9LCAvKiBFT0YgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXNwMzQwMGNfaW5pdF9kYXRhX2RlbSB7CisJaW50IGZpcjFbNl07CisJaW50IGZpcjJbNl07CisJaW50IGNkbzE7CisJaW50IGNkbzI7CisJaW50IGFkX2N2OworCWludCBtb2RlX3JlZzsKKwlpbnQgZHNwX3NyYzsKKwlpbnQgZHNwX21hdHJpeDsKK30gbXNwMzQwMGNfaW5pdF9kYXRhW10gPSB7CisJewkvKiBBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0IC8gbXNwMzQwMCkgKi8KKwkJezc1LCAxOSwgMzYsIDM1LCAzOSwgNDB9LAorCQl7NzUsIDE5LCAzNiwgMzUsIDM5LCA0MH0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwNTAwLCAweDAwMjAsIDB4MzAwMAorCX0sewkvKiBBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0IC8gbXNwMzQxMCkgKi8KKwkJey0xLCAtMSwgLTgsIDIsIDU5LCAxMjZ9LAorCQl7LTEsIC0xLCAtOCwgMiwgNTksIDEyNn0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwMTAwLCAweDAwMjAsIDB4MzAwMAorCX0sewkvKiBGTSBSYWRpbyAqLworCQl7LTgsIC04LCA0LCA2LCA3OCwgMTA3fSwKKwkJey04LCAtOCwgNCwgNiwgNzgsIDEwN30sCisJCU1TUF9DQVJSSUVSKDEwLjcpLCBNU1BfQ0FSUklFUigxMC43KSwKKwkJMHgwMGQwLCAweDA0ODAsIDB4MDAyMCwgMHgzMDAwCisJfSx7CS8qIFRlcnJlc3RpYWwgRk0tbW9ubyArIEZNLXN0ZXJlbyAqLworCQl7MywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKKwkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwNDgwLCAweDAwMzAsIDB4MzAwMAorCX0sewkvKiBTYXQgRk0tbW9ubyAqLworCQl7IDEsIDksIDE0LCAyNCwgMzMsIDM3fSwKKwkJeyAzLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAorCQlNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpLAorCQkweDAwYzYsIDB4MDQ4MCwgMHgwMDAwLCAweDMwMDAKKwl9LHsJLyogTklDQU0vRk0gLS0gIEIvRyAoNS41LzUuODUpLCBEL0sgKDYuNS81Ljg1KSAqLworCQl7LTIsIC04LCAtMTAsIDEwLCA1MCwgODZ9LAorCQl7MywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKKwkJTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS41KSwKKwkJMHgwMGQwLCAweDAwNDAsIDB4MDEyMCwgMHgzMDAwCisJfSx7CS8qIE5JQ0FNL0ZNIC0tIEkgKDYuMC82LjU1MikgKi8KKwkJezIsIDQsIC02LCAtNCwgNDAsIDk0fSwKKwkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCisJCU1TUF9DQVJSSUVSKDYuMCksIE1TUF9DQVJSSUVSKDYuMCksCisJCTB4MDBkMCwgMHgwMDQwLCAweDAxMjAsIDB4MzAwMAorCX0sewkvKiBOSUNBTS9BTSAtLSBMICg2LjUvNS44NSkgKi8KKwkJey0yLCAtOCwgLTEwLCAxMCwgNTAsIDg2fSwKKwkJey00LCAtMTIsIC05LCAyMywgNzksIDEyNn0sCisJCU1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSksCisJCTB4MDBjNiwgMHgwMTQwLCAweDAxMjAsIDB4N2MwMworCX0sCit9OworCitzdHJ1Y3QgbXNwMzQwMGNfY2Fycmllcl9kZXRlY3QgeworCWludCAgIGNkbzsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIHN0cnVjdCBtc3AzNDAwY19jYXJyaWVyX2RldGVjdCBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluW10gPSB7CisJLyogbWFpbiBjYXJyaWVyICovCisJeyBNU1BfQ0FSUklFUig0LjUpLCAgICAgICAgIjQuNSAgIE5UU0MiICAgICAgICAgICAgICAgICAgIH0sCisJeyBNU1BfQ0FSUklFUig1LjUpLCAgICAgICAgIjUuNSAgIFBBTCBCL0ciICAgICAgICAgICAgICAgIH0sCisJeyBNU1BfQ0FSUklFUig2LjApLCAgICAgICAgIjYuMCAgIFBBTCBJIiAgICAgICAgICAgICAgICAgIH0sCisJeyBNU1BfQ0FSUklFUig2LjUpLCAgICAgICAgIjYuNSAgIFBBTCBEL0sgKyBTQVQgKyBTRUNBTSIgIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXNwMzQwMGNfY2Fycmllcl9kZXRlY3QgbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNTVbXSA9IHsKKwkvKiBQQUwgQi9HICovCisJeyBNU1BfQ0FSUklFUig1Ljc0MjE4NzUpLCAgIjUuNzQyIFBBTCBCL0cgRk0tc3RlcmVvIiAgICAgfSwKKwl7IE1TUF9DQVJSSUVSKDUuODUpLCAgICAgICAiNS44NSAgUEFMIEIvRyBOSUNBTSIgICAgICAgICB9Cit9OworCitzdGF0aWMgc3RydWN0IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzY1W10gPSB7CisJLyogUEFMIFNBVCAvIFNFQ0FNICovCisJeyBNU1BfQ0FSUklFUig1Ljg1KSwgICAgICAgIjUuODUgIFBBTCBEL0sgKyBTRUNBTSBOSUNBTSIgfSwKKwl7IE1TUF9DQVJSSUVSKDYuMjU3ODEyNSksICAiNi4yNSAgUEFMIEQvSzEgRk0tc3RlcmVvIiB9LAorCXsgTVNQX0NBUlJJRVIoNi43NDIxODc1KSwgICI2Ljc0ICBQQUwgRC9LMiBGTS1zdGVyZW8iIH0sCisJeyBNU1BfQ0FSUklFUig3LjAyKSwgICAgICAgIjcuMDIgIFBBTCBTQVQgRk0tc3RlcmVvIHMvYiIgfSwKKwl7IE1TUF9DQVJSSUVSKDcuMjApLCAgICAgICAiNy4yMCAgUEFMIFNBVCBGTS1zdGVyZW8gcyIgICB9LAorCXsgTVNQX0NBUlJJRVIoNy4zOCksICAgICAgICI3LjM4ICBQQUwgU0FUIEZNLXN0ZXJlbyBiIiAgIH0sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY29uc3QgY2hhciAqbXNwX3N0YW5kYXJkX3N0ZF9uYW1lKGludCBzdGQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBtc3Bfc3RkbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKKwkJaWYgKG1zcF9zdGRsaXN0W2ldLnJldHZhbCA9PSBzdGQpCisJCQlyZXR1cm4gbXNwX3N0ZGxpc3RbaV0ubmFtZTsKKwlyZXR1cm4gInVua25vd24iOworfQorCit2b2lkIG1zcDM0MDBjX3NldGNhcnJpZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNkbzEsIGludCBjZG8yKQoreworCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwOTMsIGNkbzEgJiAweGZmZik7CisJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDA5YiwgY2RvMSA+PiAxMik7CisJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDBhMywgY2RvMiAmIDB4ZmZmKTsKKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMGFiLCBjZG8yID4+IDEyKTsKKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDU2LCAwKTsgLypMT0FEX1JFR18xLzIqLworfQorCit2b2lkIG1zcDM0MDBjX3NldG1vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHR5cGUpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCXY0bF9kYmcoMSwgY2xpZW50LCAic2V0bW9kZTogJWRcbiIsIHR5cGUpOworCXN0YXRlLT5tb2RlICAgICAgID0gdHlwZTsKKwlzdGF0ZS0+YXVkbW9kZSAgICA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKworCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwYmIsIG1zcDM0MDBjX2luaXRfZGF0YVt0eXBlXS5hZF9jdik7CisKKwlmb3IgKGkgPSA1OyBpID49IDA7IGktLSkgICAgICAgICAgICAgICAvKiBmaXIgMSAqLworCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDAxLCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uZmlyMVtpXSk7CisKKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDA1LCAweDAwMDQpOyAvKiBmaXIgMiAqLworCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwMDUsIDB4MDA0MCk7CisJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDAwNSwgMHgwMDAwKTsKKwlmb3IgKGkgPSA1OyBpID49IDA7IGktLSkKKwkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDAwNSwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmZpcjJbaV0pOworCisJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDA4MywgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLm1vZGVfcmVnKTsKKworCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uY2RvMSwKKwkJCSAgICBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uY2RvMik7CisKKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDU2LCAwKTsgLypMT0FEX1JFR18xLzIqLworCisJaWYgKGRvbGJ5KSB7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDgsIDB4MDUyMCk7IC8qIEkyUzEgKi8KKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwOSwgMHgwNjIwKTsgLyogSTJTMiAqLworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBiLCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uZHNwX3NyYyk7CisJfSBlbHNlIHsKKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwOCwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmRzcF9zcmMpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA5LCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uZHNwX3NyYyk7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGIsIG1zcDM0MDBjX2luaXRfZGF0YVt0eXBlXS5kc3Bfc3JjKTsKKwl9CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwYSwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmRzcF9zcmMpOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGUsIG1zcDM0MDBjX2luaXRfZGF0YVt0eXBlXS5kc3BfbWF0cml4KTsKKworCWlmIChzdGF0ZS0+aGFzX25pY2FtKSB7CisJCS8qIG5pY2FtIHByZXNjYWxlICovCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMTAsIDB4NWEwMCk7IC8qIHdhczogMHgzMDAwICovCisJfQorfQorCisvKiB0dXJuIG9uL29mZiBuaWNhbSArIHN0ZXJlbyAqLwordm9pZCBtc3AzNDAwY19zZXRzdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG1vZGUpCit7CisJc3RhdGljIGNoYXIgKnN0cm1vZGVbXSA9IHsgIm1vbm8iLCAic3RlcmVvIiwgImxhbmcyIiwgImxhbmcxIiB9OworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5pY2FtID0gMDsJCS8qIGNoYW5uZWwgc291cmNlOiBGTS9BTSBvciBuaWNhbSAqLworCWludCBzcmMgPSAwOworCisJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpIHsKKwkJLyogdGhpcyBtZXRob2Qgd291bGQgYnJlYWsgZXZlcnl0aGluZywgbGV0J3MgbWFrZSBzdXJlCisJCSAqIGl0J3MgbmV2ZXIgY2FsbGVkCisJCSAqLworCQl2NGxfZGJnKDEsIGNsaWVudCwgInNldHN0ZXJlbyBjYWxsZWQgd2l0aCBtb2RlPSVkIGluc3RlYWQgb2Ygc2V0X3NvdXJjZSAoaWdub3JlZClcbiIsCisJCSAgICAgbW9kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzd2l0Y2ggZGVtb2R1bGF0b3IgKi8KKwlzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7CisJY2FzZSBNU1BfTU9ERV9GTV9URVJSQToKKwkJdjRsX2RiZygxLCBjbGllbnQsICJGTSBzZXRzdGVyZW86ICVzXG4iLCBzdHJtb2RlW21vZGVdKTsKKwkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGUsIDB4MzAwMSk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwZSwgMHgzMDAwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTVNQX01PREVfRk1fU0FUOgorCQl2NGxfZGJnKDEsIGNsaWVudCwgIlNBVCBzZXRzdGVyZW86ICVzXG4iLCBzdHJtb2RlW21vZGVdKTsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMiksIE1TUF9DQVJSSUVSKDcuMDIpKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig3LjM4KSwgTVNQX0NBUlJJRVIoNy4wMikpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMzgpLCBNU1BfQ0FSUklFUig3LjAyKSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMToKKwljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjoKKwljYXNlIE1TUF9NT0RFX0FNX05JQ0FNOgorCQl2NGxfZGJnKDEsIGNsaWVudCwgIk5JQ0FNIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7CisJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LHN0YXRlLT5zZWNvbmQsc3RhdGUtPm1haW4pOworCQlpZiAoc3RhdGUtPm5pY2FtX29uKQorCQkJbmljYW09MHgwMTAwOworCQlicmVhazsKKwljYXNlIE1TUF9NT0RFX0JUU0M6CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiQlRTQyBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOworCQluaWNhbT0weDAzMDA7CisJCWJyZWFrOworCWNhc2UgTVNQX01PREVfRVhURVJOOgorCQl2NGxfZGJnKDEsIGNsaWVudCwgImV4dGVybiBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOworCQluaWNhbSA9IDB4MDIwMDsKKwkJYnJlYWs7CisJY2FzZSBNU1BfTU9ERV9GTV9SQURJTzoKKwkJdjRsX2RiZygxLCBjbGllbnQsICJGTS1SYWRpbyBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGxfZGJnKDEsIGNsaWVudCwgIm1vbm8gc2V0c3RlcmVvXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHN3aXRjaCBhdWRpbyAqLworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJc3JjID0gMHgwMDIwIHwgbmljYW07CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCWlmIChzdGF0ZS0+bW9kZSA9PSBNU1BfTU9ERV9BTV9OSUNBTSkgeworCQkJdjRsX2RiZygxLCBjbGllbnQsICJzd2l0Y2hpbmcgdG8gQU0gbW9ub1xuIik7CisJCQkvKiBBTSBtb25vIGRlY29kaW5nIGlzIGhhbmRsZWQgYnkgdHVuZXIsIG5vdCBNU1AgY2hpcCAqLworCQkJLyogU0NBUlQgc3dpdGNoaW5nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBTQ0FSVF9NT05PLCAwKTsKKwkJCXNyYyA9IDB4MDIwMDsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCXNyYyA9IDB4MDAwMCB8IG5pY2FtOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJc3JjID0gMHgwMDEwIHwgbmljYW07CisJCWJyZWFrOworCX0KKwl2NGxfZGJnKDEsIGNsaWVudCwgInNldHN0ZXJlbyBmaW5hbCBzb3VyY2UvbWF0cml4ID0gMHgleFxuIiwgc3JjKTsKKworCWlmIChkb2xieSkgeworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA4LCAweDA1MjApOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA5LCAweDA2MjApOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBhLCBzcmMpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBiLCBzcmMpOworCX0gZWxzZSB7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDgsIHNyYyk7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDksIHNyYyk7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGEsIHNyYyk7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGIsIHNyYyk7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGMsIHNyYyk7CisJCWlmIChzdGF0ZS0+aGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dCkKKwkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwNDEsIHNyYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtc3AzNDAwY19wcmludF9tb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlmIChzdGF0ZS0+bWFpbiA9PSBzdGF0ZS0+c2Vjb25kKSB7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAibW9ubyBzb3VuZCBjYXJyaWVyOiAlZC4lMDNkIE1IelxuIiwKKwkJICAgICAgIHN0YXRlLT5tYWluIC8gOTEwMDAwLCAoc3RhdGUtPm1haW4gLyA5MTApICUgMTAwMCk7CisJfSBlbHNlIHsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJtYWluIHNvdW5kIGNhcnJpZXI6ICVkLiUwM2QgTUh6XG4iLAorCQkgICAgICAgc3RhdGUtPm1haW4gLyA5MTAwMDAsIChzdGF0ZS0+bWFpbiAvIDkxMCkgJSAxMDAwKTsKKwl9CisJaWYgKHN0YXRlLT5tb2RlID09IE1TUF9NT0RFX0ZNX05JQ0FNMSB8fCBzdGF0ZS0+bW9kZSA9PSBNU1BfTU9ERV9GTV9OSUNBTTIpCisJCXY0bF9kYmcoMSwgY2xpZW50LCAiTklDQU0vRk0gY2FycmllciAgOiAlZC4lMDNkIE1IelxuIiwKKwkJICAgICAgIHN0YXRlLT5zZWNvbmQgLyA5MTAwMDAsIChzdGF0ZS0+c2Vjb25kLzkxMCkgJSAxMDAwKTsKKwlpZiAoc3RhdGUtPm1vZGUgPT0gTVNQX01PREVfQU1fTklDQU0pCisJCXY0bF9kYmcoMSwgY2xpZW50LCAiTklDQU0vQU0gY2FycmllciAgOiAlZC4lMDNkIE1IelxuIiwKKwkJICAgICAgIHN0YXRlLT5zZWNvbmQgLyA5MTAwMDAsIChzdGF0ZS0+c2Vjb25kIC8gOTEwKSAlIDEwMDApOworCWlmIChzdGF0ZS0+bW9kZSA9PSBNU1BfTU9ERV9GTV9URVJSQSAmJiBzdGF0ZS0+bWFpbiAhPSBzdGF0ZS0+c2Vjb25kKSB7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiRk0tc3RlcmVvIGNhcnJpZXIgOiAlZC4lMDNkIE1IelxuIiwKKwkJICAgICAgIHN0YXRlLT5zZWNvbmQgLyA5MTAwMDAsIChzdGF0ZS0+c2Vjb25kIC8gOTEwKSAlIDEwMDApOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50IGF1dG9kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdmFsOworCWludCByeHN1YmNoYW5zID0gc3RhdGUtPnJ4c3ViY2hhbnM7CisJaW50IG5ld25pY2FtICAgPSBzdGF0ZS0+bmljYW1fb247CisJaW50IHVwZGF0ZSA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7CisJY2FzZSBNU1BfTU9ERV9GTV9URVJSQToKKwkJdmFsID0gbXNwX3JlYWRfZHNwKGNsaWVudCwgMHgxOCk7CisJCWlmICh2YWwgPiAzMjc2NykKKwkJCXZhbCAtPSA2NTUzNjsKKwkJdjRsX2RiZygyLCBjbGllbnQsICJzdGVyZW8gZGV0ZWN0IHJlZ2lzdGVyOiAlZFxuIiwgdmFsKTsKKwkJaWYgKHZhbCA+IDQwOTYpIHsKKwkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POworCQl9IGVsc2UgaWYgKHZhbCA8IC00MDk2KSB7CisJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKKwkJfSBlbHNlIHsKKwkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQl9CisJCW5ld25pY2FtID0gMDsKKwkJYnJlYWs7CisJY2FzZSBNU1BfTU9ERV9GTV9OSUNBTTE6CisJY2FzZSBNU1BfTU9ERV9GTV9OSUNBTTI6CisJY2FzZSBNU1BfTU9ERV9BTV9OSUNBTToKKwkJdmFsID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHgyMyk7CisJCXY0bF9kYmcoMiwgY2xpZW50LCAibmljYW0gc3luYz0lZCwgbW9kZT0lZFxuIiwKKwkJCXZhbCAmIDEsICh2YWwgJiAweDFlKSA+PiAxKTsKKworCQlpZiAodmFsICYgMSkgeworCQkJLyogbmljYW0gc3luY2VkICovCisJCQlzd2l0Y2ggKCh2YWwgJiAweDFlKSA+PiAxKSAgeworCQkJY2FzZSAwOgorCQkJY2FzZSA4OgorCQkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQljYXNlIDk6CisJCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8KKwkJCQkJfCBWNEwyX1RVTkVSX1NVQl9MQU5HMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCWNhc2UgMTA6CisJCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8KKwkJCQkJfCBWNEwyX1RVTkVSX1NVQl9MQU5HMQorCQkJCQl8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW5ld25pY2FtID0gMTsKKwkJfSBlbHNlIHsKKwkJCW5ld25pY2FtID0gMDsKKwkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQl9CisJCWJyZWFrOworCWNhc2UgTVNQX01PREVfQlRTQzoKKwkJdmFsID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHgyMDApOworCQl2NGxfZGJnKDIsIGNsaWVudCwgInN0YXR1cz0weCV4IChwcmk9JXMsIHNlYz0lcywgJXMlcyVzKVxuIiwKKwkJCXZhbCwKKwkJCSh2YWwgJiAweDAwMDIpID8gIm5vIiAgICAgOiAieWVzIiwKKwkJCSh2YWwgJiAweDAwMDQpID8gIm5vIiAgICAgOiAieWVzIiwKKwkJCSh2YWwgJiAweDAwNDApID8gInN0ZXJlbyIgOiAibW9ubyIsCisJCQkodmFsICYgMHgwMDgwKSA/ICIsIG5pY2FtIDJuZCBtb25vIiA6ICIiLAorCQkJKHZhbCAmIDB4MDEwMCkgPyAiLCBiaWxpbmd1YWwvU0FQIiAgOiAiIik7CisJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQlpZiAodmFsICYgMHgwMDQwKSByeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJaWYgKHZhbCAmIDB4MDEwMCkgcnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9MQU5HMTsKKwkJYnJlYWs7CisJfQorCWlmIChyeHN1YmNoYW5zICE9IHN0YXRlLT5yeHN1YmNoYW5zKSB7CisJCXVwZGF0ZSA9IDE7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAid2F0Y2g6IHJ4c3ViY2hhbnMgJWQgPT4gJWRcbiIsCisJCQlzdGF0ZS0+cnhzdWJjaGFucyxyeHN1YmNoYW5zKTsKKwkJc3RhdGUtPnJ4c3ViY2hhbnMgPSByeHN1YmNoYW5zOworCX0KKwlpZiAobmV3bmljYW0gIT0gc3RhdGUtPm5pY2FtX29uKSB7CisJCXVwZGF0ZSA9IDE7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAid2F0Y2g6IG5pY2FtICVkID0+ICVkXG4iLAorCQkJc3RhdGUtPm5pY2FtX29uLG5ld25pY2FtKTsKKwkJc3RhdGUtPm5pY2FtX29uID0gbmV3bmljYW07CisJfQorCXJldHVybiB1cGRhdGU7Cit9CisKKy8qCisgKiBBIGtlcm5lbCB0aHJlYWQgZm9yIG1zcDM0MDAgY29udHJvbCAtLSB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZQorICogaW4gdGhlIGlvY3RsIHdoaWxlIGRvaW5nIHRoZSBzb3VuZCBjYXJyaWVyICYgc3RlcmVvIGRldGVjdAorICovCisvKiBzdGVyZW8vbXVsdGlsYW5nIG1vbml0b3JpbmcgKi8KK3N0YXRpYyB2b2lkIHdhdGNoX3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoYXV0b2RldGVjdF9zdGVyZW8oY2xpZW50KSkgeworCQlpZiAoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKKwkJZWxzZSBpZiAoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMSkKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9MQU5HMSk7CisJCWVsc2UKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwl9CisKKwlpZiAob25jZSkKKwkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDA7Cit9CisKK2ludCBtc3AzNDAwY190aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3AzNDAwY19jYXJyaWVyX2RldGVjdCAqY2Q7CisJaW50IGNvdW50LCBtYXgxLG1heDIsdmFsMSx2YWwyLCB2YWwsdGhpczsKKworCisJdjRsX2RiZygxLCBjbGllbnQsICJtc3AzNDAwIGRhZW1vbiBzdGFydGVkXG4iKTsKKwlmb3IgKDs7KSB7CisJCXY0bF9kYmcoMiwgY2xpZW50LCAibXNwMzQwMCB0aHJlYWQ6IHNsZWVwXG4iKTsKKwkJbXNwX3NsZWVwKHN0YXRlLCAtMSk7CisJCXY0bF9kYmcoMiwgY2xpZW50LCAibXNwMzQwMCB0aHJlYWQ6IHdha2V1cFxuIik7CisKKwlyZXN0YXJ0OgorCQl2NGxfZGJnKDEsIGNsaWVudCwgInRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKKwkJc3RhdGUtPnJlc3RhcnQgPSAwOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YXRlLT5yYWRpbyB8fCBNU1BfTU9ERV9FWFRFUk4gPT0gc3RhdGUtPm1vZGUpIHsKKwkJCS8qIG5vIGNhcnJpZXIgc2NhbiwganVzdCB1bm11dGUgKi8KKwkJCXY0bF9kYmcoMSwgY2xpZW50LCAidGhyZWFkOiBubyBjYXJyaWVyIHNjYW5cbiIpOworCQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBtdXRlICovCisJCW1zcF9zZXRfbXV0ZShjbGllbnQpOworCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfQU1fREVURUNUIC8qICsxICovICk7CisJCXZhbDEgPSB2YWwyID0gMDsKKwkJbWF4MSA9IG1heDIgPSAtMTsKKwkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDA7CisKKwkJLyogc29tZSB0aW1lIGZvciB0aGUgdHVuZXIgdG8gc3luYyAqLworCQlpZiAobXNwX3NsZWVwKHN0YXRlLDIwMCkpCisJCQlnb3RvIHJlc3RhcnQ7CisKKwkJLyogY2FycmllciBkZXRlY3QgcGFzcyAjMSAtLSBtYWluIGNhcnJpZXIgKi8KKwkJY2QgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluOworCQljb3VudCA9IEFSUkFZX1NJWkUobXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfbWFpbik7CisKKwkJaWYgKGFtc291bmQgJiYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1NFQ0FNKSkgeworCQkJLyogYXV0b2RldGVjdCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIEFNIC4uLiAqLworCQkJbWF4MSA9IDM7CisJCQljb3VudCA9IDA7CisJCQl2NGxfZGJnKDEsIGNsaWVudCwgIkFNIHNvdW5kIG92ZXJyaWRlXG4iKTsKKwkJfQorCisJCWZvciAodGhpcyA9IDA7IHRoaXMgPCBjb3VudDsgdGhpcysrKSB7CisJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgY2RbdGhpc10uY2RvLGNkW3RoaXNdLmNkbyk7CisJCQlpZiAobXNwX3NsZWVwKHN0YXRlLDEwMCkpCisJCQkJZ290byByZXN0YXJ0OworCQkJdmFsID0gbXNwX3JlYWRfZHNwKGNsaWVudCwgMHgxYik7CisJCQlpZiAodmFsID4gMzI3NjcpCisJCQkJdmFsIC09IDY1NTM2OworCQkJaWYgKHZhbDEgPCB2YWwpCisJCQkJdmFsMSA9IHZhbCwgbWF4MSA9IHRoaXM7CisJCQl2NGxfZGJnKDEsIGNsaWVudCwgImNhcnJpZXIxIHZhbDogJTVkIC8gJXNcbiIsIHZhbCxjZFt0aGlzXS5uYW1lKTsKKwkJfQorCisJCS8qIGNhcnJpZXIgZGV0ZWN0IHBhc3MgIzIgLS0gc2Vjb25kIChzdGVyZW8pIGNhcnJpZXIgKi8KKwkJc3dpdGNoIChtYXgxKSB7CisJCWNhc2UgMTogLyogNS41ICovCisJCQljZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzU1OworCQkJY291bnQgPSBBUlJBWV9TSVpFKG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzU1KTsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIDYuNSAqLworCQkJY2QgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF82NTsKKwkJCWNvdW50ID0gQVJSQVlfU0laRShtc3AzNDAwY19jYXJyaWVyX2RldGVjdF82NSk7CisJCQlicmVhazsKKwkJY2FzZSAwOiAvKiA0LjUgKi8KKwkJY2FzZSAyOiAvKiA2LjAgKi8KKwkJZGVmYXVsdDoKKwkJCWNkID0gTlVMTDsKKwkJCWNvdW50ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGFtc291bmQgJiYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1NFQ0FNKSkgeworCQkJLyogYXV0b2RldGVjdCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIEFNIC4uLiAqLworCQkJY2QgPSBOVUxMOworCQkJY291bnQgPSAwOworCQkJbWF4MiA9IDA7CisJCX0KKwkJZm9yICh0aGlzID0gMDsgdGhpcyA8IGNvdW50OyB0aGlzKyspIHsKKwkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBjZFt0aGlzXS5jZG8sY2RbdGhpc10uY2RvKTsKKwkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsMTAwKSkKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl2YWwgPSBtc3BfcmVhZF9kc3AoY2xpZW50LCAweDFiKTsKKwkJCWlmICh2YWwgPiAzMjc2NykKKwkJCQl2YWwgLT0gNjU1MzY7CisJCQlpZiAodmFsMiA8IHZhbCkKKwkJCQl2YWwyID0gdmFsLCBtYXgyID0gdGhpczsKKwkJCXY0bF9kYmcoMSwgY2xpZW50LCAiY2FycmllcjIgdmFsOiAlNWQgLyAlc1xuIiwgdmFsLGNkW3RoaXNdLm5hbWUpOworCQl9CisKKwkJLyogcHJvZ3JhbSB0aGUgbXNwMzQwMCBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMgKi8KKwkJc3RhdGUtPm1haW4gICA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0X21haW5bbWF4MV0uY2RvOworCQlzd2l0Y2ggKG1heDEpIHsKKwkJY2FzZSAxOiAvKiA1LjUgKi8KKwkJCWlmIChtYXgyID09IDApIHsKKwkJCQkvKiBCL0cgRk0tc3RlcmVvICovCisJCQkJc3RhdGUtPnNlY29uZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzU1W21heDJdLmNkbzsKKwkJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fVEVSUkEpOworCQkJCXN0YXRlLT5uaWNhbV9vbiA9IDA7CisJCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOworCQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOworCQkJfSBlbHNlIGlmIChtYXgyID09IDEgJiYgc3RhdGUtPmhhc19uaWNhbSkgeworCQkJCS8qIEIvRyBOSUNBTSAqLworCQkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF81NVttYXgyXS5jZG87CisJCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMSk7CisJCQkJc3RhdGUtPm5pY2FtX29uID0gMTsKKwkJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOworCQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOworCQkJfSBlbHNlIHsKKwkJCQlnb3RvIG5vX3NlY29uZDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIDYuMCAqLworCQkJLyogUEFMIEkgTklDQU0gKi8KKwkJCXN0YXRlLT5zZWNvbmQgPSBNU1BfQ0FSUklFUig2LjU1Mik7CisJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0yKTsKKwkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7CisJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOworCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiA2LjUgKi8KKwkJCWlmIChtYXgyID09IDEgfHwgbWF4MiA9PSAyKSB7CisJCQkJLyogRC9LIEZNLXN0ZXJlbyAqLworCQkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF82NVttYXgyXS5jZG87CisJCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKKwkJCQlzdGF0ZS0+bmljYW1fb24gPSAwOworCQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKKwkJCX0gZWxzZSBpZiAobWF4MiA9PSAwICYmIChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9TRUNBTSkpIHsKKwkJCQkvKiBMIE5JQ0FNIG9yIEFNLW1vbm8gKi8KKwkJCQlzdGF0ZS0+c2Vjb25kID0gbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOworCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9OSUNBTSk7CisJCQkJc3RhdGUtPm5pY2FtX29uID0gMDsKKwkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKKwkJCQkvKiB2b2x1bWUgcHJlc2NhbGUgZm9yIFNDQVJUIChBTSBtb25vIGlucHV0KSAqLworCQkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGQsIDB4MTkwMCk7CisJCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CisJCQl9IGVsc2UgaWYgKG1heDIgPT0gMCAmJiBzdGF0ZS0+aGFzX25pY2FtKSB7CisJCQkJLyogRC9LIE5JQ0FNICovCisJCQkJc3RhdGUtPnNlY29uZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzY1W21heDJdLmNkbzsKKwkJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0xKTsKKwkJCQlzdGF0ZS0+bmljYW1fb24gPSAxOworCQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CisJCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CisJCQl9IGVsc2UgeworCQkJCWdvdG8gbm9fc2Vjb25kOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMDogLyogNC41ICovCisJCWRlZmF1bHQ6CisJCW5vX3NlY29uZDoKKwkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluW21heDFdLmNkbzsKKwkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9URVJSQSk7CisJCQlzdGF0ZS0+bmljYW1fb24gPSAwOworCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKKwkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogdW5tdXRlICovCisJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKKworCQlpZiAoZGVidWcpCisJCQltc3AzNDAwY19wcmludF9tb2RlKGNsaWVudCk7CisKKwkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlICovCisJCXdoaWxlIChzdGF0ZS0+d2F0Y2hfc3RlcmVvKSB7CisJCQlpZiAobXNwX3NsZWVwKHN0YXRlLDUwMDApKQorCQkJCWdvdG8gcmVzdGFydDsKKwkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOworCQl9CisJfQorCXY0bF9kYmcoMSwgY2xpZW50LCAidGhyZWFkOiBleGl0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgbXNwMzQxMGRfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGE7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdmFsLCBpLCBzdGQ7CisKKwl2NGxfZGJnKDEsIGNsaWVudCwgIm1zcDM0MTAgZGFlbW9uIHN0YXJ0ZWRcbiIpOworCisJZm9yICg7OykgeworCQl2NGxfZGJnKDIsIGNsaWVudCwgIm1zcDM0MTAgdGhyZWFkOiBzbGVlcFxuIik7CisJCW1zcF9zbGVlcChzdGF0ZSwtMSk7CisJCXY0bF9kYmcoMiwgY2xpZW50LCAibXNwMzQxMCB0aHJlYWQ6IHdha2V1cFxuIik7CisKKwlyZXN0YXJ0OgorCQl2NGxfZGJnKDEsIGNsaWVudCwgInRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKKwkJc3RhdGUtPnJlc3RhcnQgPSAwOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YXRlLT5tb2RlID09IE1TUF9NT0RFX0VYVEVSTikgeworCQkJLyogbm8gY2FycmllciBzY2FuIG5lZWRlZCwganVzdCB1bm11dGUgKi8KKwkJCXY0bF9kYmcoMSwgY2xpZW50LCAidGhyZWFkOiBubyBjYXJyaWVyIHNjYW5cbiIpOworCQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBwdXQgaW50byBzYW5lIHN0YXRlIChhbmQgbXV0ZSkgKi8KKwkJbXNwX3Jlc2V0KGNsaWVudCk7CisKKwkJLyogc29tZSB0aW1lIGZvciB0aGUgdHVuZXIgdG8gc3luYyAqLworCQlpZiAobXNwX3NsZWVwKHN0YXRlLDIwMCkpCisJCQlnb3RvIHJlc3RhcnQ7CisKKwkJLyogc3RhcnQgYXV0b2RldGVjdCAqLworCQlpZiAoc3RhdGUtPnJhZGlvKQorCQkJc3RkID0gMHg0MDsKKwkJZWxzZQorCQkJc3RkID0gKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgyMCA6IDE7CisJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOworCisJCWlmIChkZWJ1ZykKKwkJCXY0bF9kYmcoMSwgY2xpZW50LCAic2V0dGluZyBzdGFuZGFyZDogJXMgKDB4JTA0eClcbiIsCisJCQkgICAgICAgbXNwX3N0YW5kYXJkX3N0ZF9uYW1lKHN0ZCksIHN0ZCk7CisKKwkJaWYgKHN0ZCAhPSAxKSB7CisJCQkvKiBwcm9ncmFtbWVkIHNvbWUgc3BlY2lmaWMgbW9kZSAqLworCQkJdmFsID0gc3RkOworCQl9IGVsc2UgeworCQkJLyogdHJpZ2dlcmVkIGF1dG9kZXRlY3QgKi8KKwkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCBzdGQpOworCQkJZm9yICg7OykgeworCQkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIDEwMCkpCisJCQkJCWdvdG8gcmVzdGFydDsKKworCQkJCS8qIGNoZWNrIHJlc3VsdHMgKi8KKwkJCQl2YWwgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCAweDdlKTsKKwkJCQlpZiAodmFsIDwgMHgwN2ZmKQorCQkJCQlicmVhazsKKwkJCQl2NGxfZGJnKDEsIGNsaWVudCwgImRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzc1xuIik7CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgbXNwX3N0ZGxpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCisJCQlpZiAobXNwX3N0ZGxpc3RbaV0ucmV0dmFsID09IHZhbCkKKwkJCQlicmVhazsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJjdXJyZW50IHN0YW5kYXJkOiAlcyAoMHglMDR4KVxuIiwKKwkJCW1zcF9zdGFuZGFyZF9zdGRfbmFtZSh2YWwpLCB2YWwpOworCQlzdGF0ZS0+bWFpbiAgID0gbXNwX3N0ZGxpc3RbaV0ubWFpbjsKKwkJc3RhdGUtPnNlY29uZCA9IG1zcF9zdGRsaXN0W2ldLnNlY29uZDsKKwkJc3RhdGUtPnN0ZCA9IHZhbDsKKworCQlpZiAoYW1zb3VuZCAmJiAhc3RhdGUtPnJhZGlvICYmIChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYKKwkJCQkodmFsICE9IDB4MDAwOSkpIHsKKwkJCS8qIGF1dG9kZXRlY3Rpb24gaGFzIGZhaWxlZCwgbGV0IGJhY2t1cCAqLworCQkJdjRsX2RiZygxLCBjbGllbnQsICJhdXRvZGV0ZWN0aW9uIGZhaWxlZCwiCisJCQkJIiBzd2l0Y2hpbmcgdG8gYmFja3VwIHN0YW5kYXJkOiAlcyAoMHglMDR4KVxuIiwKKwkJCQltc3Bfc3RkbGlzdFs4XS5uYW1lID8gbXNwX3N0ZGxpc3RbOF0ubmFtZSA6ICJ1bmtub3duIix2YWwpOworCQkJdmFsID0gMHgwMDA5OworCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MjAsIHZhbCk7CisJCX0KKworCQkvKiBzZXQgdmFyaW91cyBwcmVzY2FsZXMgKi8KKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGQsIDB4MTkwMCk7IC8qIHNjYXJ0ICovCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDBlLCAweDI0MDMpOyAvKiBGTSAqLworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMCwgMHg1YTAwKTsgLyogbmljYW0gKi8KKworCQkvKiBzZXQgc3RlcmVvICovCisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgMHgwMDA4OiAvKiBCL0cgTklDQU0gKi8KKwkJY2FzZSAweDAwMGE6IC8qIEkgTklDQU0gKi8KKwkJCWlmICh2YWwgPT0gMHgwMDA4KQorCQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fTklDQU0xOworCQkJZWxzZQorCQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fTklDQU0yOworCQkJLyoganVzdCB0dXJuIG9uIHN0ZXJlbyAqLworCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQlzdGF0ZS0+bmljYW1fb24gPSAxOworCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMDA5OgorCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9BTV9OSUNBTTsKKwkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7CisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMDIwOiAvKiBCVFNDICovCisJCQkvKiBqdXN0IHR1cm4gb24gc3RlcmVvICovCisJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0JUU0M7CisJCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJCXN0YXRlLT5uaWNhbV9vbiA9IDA7CisJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CisJCQlicmVhazsKKwkJY2FzZSAweDAwNDA6IC8qIEZNIHJhZGlvICovCisJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0ZNX1JBRElPOworCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQlzdGF0ZS0+bmljYW1fb24gPSAwOworCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDA7CisJCQkvKiBub3QgbmVlZGVkIGluIHRoZW9yeSBpZiB3ZSBoYXZlIHJhZGlvLCBidXQKKwkJCSAgIHNob3J0IHByb2dyYW1taW5nIGVuYWJsZXMgY2FycmllciBtdXRlICovCisJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fUkFESU8pOworCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDEwLjcpLAorCQkJCQkgICAgTVNQX0NBUlJJRVIoMTAuNykpOworCQkJLyogc2NhcnQgcm91dGluZyAqLworCQkJbXNwX3NldF9zY2FydChjbGllbnQsU0NBUlRfSU4yLDApOworCQkJLyogbXNwMzR4eCBkb2VzIHJhZGlvIGRlY29kaW5nICovCisJCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwOCwgMHgwMDIwKTsKKwkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDA5LCAweDAwMjApOworCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGIsIDB4MDAyMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDAwMDM6CisJCWNhc2UgMHgwMDA0OgorCQljYXNlIDB4MDAwNToKKwkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fVEVSUkE7CisJCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJCQlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCQkJc3RhdGUtPm5pY2FtX29uID0gMDsKKwkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB1bm11dGUsIHJlc3RvcmUgbWlzYyByZWdpc3RlcnMgKi8KKwkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMywgc3RhdGUtPmFjYik7CisJCWlmIChzdGF0ZS0+aGFzX2kyc19jb25mKQorCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7CisKKwkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlICovCisJCXdoaWxlIChzdGF0ZS0+d2F0Y2hfc3RlcmVvKSB7CisJCQlpZiAobXNwX3NsZWVwKHN0YXRlLDUwMDApKQorCQkJCWdvdG8gcmVzdGFydDsKKwkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOworCQl9CisJfQorCXY0bF9kYmcoMSwgY2xpZW50LCAidGhyZWFkOiBleGl0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogbXNwMzR4eEcgKyAoYXV0b3NlbGVjdCBuby10aHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHRoaXMgb25lIHVzZXMgYm90aCBhdXRvbWF0aWMgc3RhbmRhcmQgZGV0ZWN0aW9uIGFuZCBhdXRvbWF0aWMgc291bmQgICAgICovCisvKiBzZWxlY3Qgd2hpY2ggYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3ZXIgRyB2ZXJzaW9ucyAgICAgICAgICAgICAgICAgICAgICAqLworLyogc3RydWN0IG1zcDogb25seSBub3JtLCBhY2IgYW5kIHNvdXJjZSBhcmUgcmVhbGx5IHVzZWQgaW4gdGhpcyBtb2RlICAgICAgKi8KKworLyogc2V0IHRoZSBzYW1lICdzb3VyY2UnIGZvciB0aGUgbG91ZHNwZWFrZXIsIHNjYXJ0IGFuZCBxdWFzaS1wZWFrIGRldGVjdG9yCisgKiB0aGUgdmFsdWUgZm9yIHNvdXJjZSBpcyB0aGUgc2FtZSBhcyBiaXQgMTU6OCBvZiBEU1AgcmVnaXN0ZXJzIDB4MDgsCisgKiAweDBhIGFuZCAweDBjOiAwPW1vbm8sIDE9c3RlcmVvIG9yIEF8QiwgMj1TQ0FSVCwgMz1zdGVyZW8gb3IgQSwgND1zdGVyZW8gb3IgQgorICoKKyAqIHRoaXMgZnVuY3Rpb24gcmVwbGFjZXMgbXNwMzQwMGNfc2V0c3RlcmVvCisgKi8KK3N0YXRpYyB2b2lkIG1zcDM0eHhnX3NldF9zb3VyY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHNvdXJjZSkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJLyogZml4IG1hdHJpeCBtb2RlIHRvIHN0ZXJlbyBhbmQgbGV0IHRoZSBtc3AgY2hvb3NlIHdoYXQKKwkgKiB0byBvdXRwdXQgYWNjb3JkaW5nIHRvICdzb3VyY2UnLCBhcyByZWNvbW1lbmRlZAorCSAqIGZvciBNT05PIChzb3VyY2U9PTApIGRvd25taXhpbmcgc2V0IGJpdFs3OjBdIHRvIDB4MzAKKwkgKi8KKwlpbnQgdmFsdWUgPSAoc291cmNlICYgMHgwNykgPDwgOCB8IChzb3VyY2UgPT0gMCA/IDB4MzAgOiAweDIwKTsKKworCXY0bF9kYmcoMSwgY2xpZW50LCAic2V0IHNvdXJjZSB0byAlZCAoMHgleClcbiIsIHNvdXJjZSwgdmFsdWUpOworCS8qIExvdWRzcGVha2VyIE91dHB1dCAqLworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDA4LCB2YWx1ZSk7CisJLyogU0NBUlQxIERBIE91dHB1dCAqLworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDBhLCB2YWx1ZSk7CisJLyogUXVhc2ktcGVhayBkZXRlY3RvciAqLworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDBjLCB2YWx1ZSk7CisJLyoKKwkgKiBzZXQgaWRlbnRpZmljYXRpb24gdGhyZXNob2xkLiBQZXJzb25hbGx5LCBJCisJICogSSBzZXQgaXQgdG8gYSBoaWdoZXIgdmFsdWUgdGhhdCB0aGUgZGVmYXVsdAorCSAqIG9mIDB4MTkwIHRvIGlnbm9yZSBub2lzeSBzdGVyZW8gc2lnbmFscy4KKwkgKiB0aGlzIG5lZWRzIHR1bmluZy4gKHJlY29tbWVuZGVkIHJhbmdlIDB4MDBhMC0weDAzYzApCisJICogMHg3ZjAgPSBmb3JjZWQgbW9ubyBtb2RlCisJICovCisJLyogYTIgdGhyZXNob2xkIGZvciBzdGVyZW8vYmlsaW5ndWFsICovCisJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MjIsIHN0ZXJlb190aHJlc2hvbGQpOworCXN0YXRlLT5zb3VyY2UgPSBzb3VyY2U7Cit9CisKKy8qIChyZS0paW5pdGlhbGl6ZSB0aGUgbXNwMzR4eGcsIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBub3JtIGluIHN0YXRlLT5ub3JtCisgKiByZXR1cm4gMCBpZiBpdCB3b3JrZWQsIC0xIGlmIGl0IGZhaWxlZAorICovCitzdGF0aWMgaW50IG1zcDM0eHhnX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbW9kdXMsIHN0ZDsKKworCWlmIChtc3BfcmVzZXQoY2xpZW50KSkKKwkJcmV0dXJuIC0xOworCisJLyogbWFrZSBzdXJlIHRoYXQgaW5wdXQvb3V0cHV0IGlzIG11dGVkIChwYXJhbm9pZCBtb2RlKSAqLworCS8qIEFDQiwgbXV0ZSBEU1AgaW5wdXQsIG11dGUgU0NBUlQgMSAqLworCWlmIChtc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMywgMHgwZjIwKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHN0YXRlLT5oYXNfaTJzX2NvbmYpCisJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOworCisJLyogc3RlcC1ieS1zdGVwIGluaXRpYWxpc2F0aW9uLCBhcyBkZXNjcmliZWQgaW4gdGhlIG1hbnVhbCAqLworCW1vZHVzID0gbXNwX21vZHVzKGNsaWVudCk7CisJaWYgKHN0YXRlLT5yYWRpbykKKwkJc3RkID0gMHg0MDsKKwllbHNlCisJCXN0ZCA9IChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9OVFNDKSA/IDB4MjAgOiAxOworCW1vZHVzICY9IH4weDAzOyAvKiBTVEFUVVNfQ0hBTkdFID0gMCAqLworCW1vZHVzIHw9IDB4MDE7ICAvKiBBVVRPTUFUSUNfU09VTkRfREVURUNUSU9OID0gMSAqLworCWlmIChtc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgzMCwgbW9kdXMpKQorCQlyZXR1cm4gLTE7CisJaWYgKG1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCBzdGQpKQorCQlyZXR1cm4gLTE7CisKKwkvKiB3cml0ZSB0aGUgZHNwcyB0aGF0IG1heSBoYXZlIGFuIGluZmx1ZW5jZSBvbgorCSAgIHN0YW5kYXJkL2F1ZGlvIGF1dG9kZXRlY3Rpb24gcmlnaHQgbm93ICovCisJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIHN0YXRlLT5zb3VyY2UpOworCisJLyogQU0vRk0gUHJlc2NhbGUgWzE1OjhdIDc1a2h6IGRldmlhdGlvbiAqLworCWlmIChtc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwZSwgMHgzMDAwKSkKKwkJcmV0dXJuIC0xOworCisJLyogTklDQU0gUHJlc2NhbGUgOWRiIGdhaW4gKGFzIHJlY29tbWVuZGVkKSAqLworCWlmIChtc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMCwgMHg1YTAwKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtc3AzNHh4Z190aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB2YWwsIHN0ZCwgaTsKKworCXY0bF9kYmcoMSwgY2xpZW50LCAibXNwMzR4eGcgZGFlbW9uIHN0YXJ0ZWRcbiIpOworCisJc3RhdGUtPnNvdXJjZSA9IDE7IC8qIGRlZmF1bHQgKi8KKwlmb3IgKDs7KSB7CisJCXY0bF9kYmcoMiwgY2xpZW50LCAibXNwMzR4eGcgdGhyZWFkOiBzbGVlcFxuIik7CisJCW1zcF9zbGVlcChzdGF0ZSwgLTEpOworCQl2NGxfZGJnKDIsIGNsaWVudCwgIm1zcDM0eHhnIHRocmVhZDogd2FrZXVwXG4iKTsKKworCXJlc3RhcnQ6CisJCXY0bF9kYmcoMSwgY2xpZW50LCAidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOworCQlzdGF0ZS0+cmVzdGFydCA9IDA7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKworCQkvKiBzZXR1cCB0aGUgY2hpcCovCisJCW1zcDM0eHhnX3Jlc2V0KGNsaWVudCk7CisJCXN0ZCA9IHN0YW5kYXJkOworCQlpZiAoc3RkICE9IDB4MDEpCisJCQlnb3RvIHVubXV0ZTsKKworCQkvKiB3YXRjaCBhdXRvZGV0ZWN0ICovCisJCXY0bF9kYmcoMSwgY2xpZW50LCAidHJpZ2dlcmVkIGF1dG9kZXRlY3QsIHdhaXRpbmcgZm9yIHJlc3VsdFxuIik7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlpZiAobXNwX3NsZWVwKHN0YXRlLCAxMDApKQorCQkJCWdvdG8gcmVzdGFydDsKKworCQkJLyogY2hlY2sgcmVzdWx0cyAqLworCQkJdmFsID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHg3ZSk7CisJCQlpZiAodmFsIDwgMHgwN2ZmKSB7CisJCQkJc3RkID0gdmFsOworCQkJCWJyZWFrOworCQkJfQorCQkJdjRsX2RiZygyLCBjbGllbnQsICJkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3NcbiIpOworCQl9CisJCWlmIChzdGQgPT0gMSkgeworCQkJdjRsX2RiZygxLCBjbGllbnQsICJkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAgdHJpZXMuIGdpdmluZyB1cC5cbiIpOworCQkJY29udGludWU7CisJCX0KKworCXVubXV0ZToKKwkJc3RhdGUtPnN0ZCA9IHN0ZDsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJjdXJyZW50IHN0YW5kYXJkOiAlcyAoMHglMDR4KVxuIiwKKwkJCW1zcF9zdGFuZGFyZF9zdGRfbmFtZShzdGQpLCBzdGQpOworCisJCS8qIHVubXV0ZTogZGlzcGF0Y2ggc291bmQgdG8gc2NhcnQgb3V0cHV0LCBzZXQgc2NhcnQgdm9sdW1lICovCisJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKKworCQkvKiByZXN0b3JlIEFDQiAqLworCQlpZiAobXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIHN0YXRlLT5hY2IpKQorCQkJcmV0dXJuIC0xOworCisJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOworCX0KKwl2NGxfZGJnKDEsIGNsaWVudCwgInRocmVhZDogZXhpdFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwMzR4eGdfZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpbnQgc3RhdHVzID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHgwMjAwKTsKKwlpbnQgaXNfYmlsaW5ndWFsID0gc3RhdHVzICYgMHgxMDA7CisJaW50IGlzX3N0ZXJlbyA9IHN0YXR1cyAmIDB4NDA7CisKKwlzdGF0ZS0+cnhzdWJjaGFucyA9IDA7CisJaWYgKGlzX3N0ZXJlbykKKwkJc3RhdGUtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCWVsc2UKKwkJc3RhdGUtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwlpZiAoaXNfYmlsaW5ndWFsKSB7CisJCXN0YXRlLT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7CisJCS8qIEknbSBzdXBwb3NlZCB0byBjaGVjayB3aGV0aGVyIGl0J3MgU0FQIG9yIG5vdAorCQkgKiBhbmQgc2V0IG9ubHkgTEFORzIvU0FQIGluIHRoaXMgY2FzZS4gWWV0LCB0aGUgTVNQCisJCSAqIGRvZXMgYSBsb3Qgb2Ygd29yayB0byBoaWRlIHRoaXMgYW5kIGhhbmRsZSBldmVyeXRoaW5nCisJCSAqIHRoZSBzYW1lIHdheS4gSSBkb24ndCB3YW50IHRvIHdvcmsgYXJvdW5kIGl0IHNvIHVubGVzcworCQkgKiB0aGlzIGlzIGEgcHJvYmxlbSwgSSdsbCBoYW5kbGUgU0FQIGp1c3QgbGlrZSBsYW5nMS9sYW5nMi4KKwkJICovCisJfQorCXY0bF9kYmcoMSwgY2xpZW50LCAic3RhdHVzPTB4JXgsIHN0ZXJlbz0lZCwgYmlsaW5ndWFsPSVkIC0+IHJ4c3ViY2hhbnM9JWRcbiIsCisJCXN0YXR1cywgaXNfc3RlcmVvLCBpc19iaWxpbmd1YWwsIHN0YXRlLT5yeHN1YmNoYW5zKTsKK30KKwordm9pZCBtc3AzNHh4Z19zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYXVkbW9kZSkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBzb3VyY2U7CisKKwlzd2l0Y2ggKGF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQlzb3VyY2UgPSAwOyAvKiBtb25vIG9ubHkgKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQlzb3VyY2UgPSAxOyAvKiBzdGVyZW8gb3IgQXxCLCBzZWUgY29tbWVudCBpbiBtc3AzNHh4Z19nZXRfdjRsMl9zdGVyZW8oKSAqLworCQkvKiBwcm9ibGVtOiB0aGF0IGNvdWxkIGFsc28gbWVhbiAyIChzY2FydCBpbnB1dCkgKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCXNvdXJjZSA9IDM7IC8qIHN0ZXJlbyBvciBBICovCisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQlzb3VyY2UgPSA0OyAvKiBzdGVyZW8gb3IgQiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdWRtb2RlID0gMDsKKwkJc291cmNlICA9IDE7CisJCWJyZWFrOworCX0KKwlzdGF0ZS0+YXVkbW9kZSA9IGF1ZG1vZGU7CisJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIHNvdXJjZSk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MzI1M2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjI5ICswLDAgQEAKLS8qCi0gKiBwcm9ncmFtbWluZyB0aGUgbXNwMzQqIHNvdW5kIHByb2Nlc3NvciBmYW1pbHkKLSAqCi0gKiAoYykgMTk5Ny0yMDAxIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KLSAqCi0gKiB3aGF0IHdvcmtzIGFuZCB3aGF0IGRvZXNuJ3Q6Ci0gKgotICogIEFNLU1vbm8KLSAqICAgICAgU3VwcG9ydCBmb3IgSGF1cHBhdWdlIGNhcmRzIGFkZGVkIChkZWNvZGluZyBoYW5kbGVkIGJ5IHR1bmVyKSBhZGRlZCBieQotICogICAgICBGcmVkZXJpYyBDcm96YXQgPGZjcm96YXRAbWFpbC5kb3Rjb20uZnI+Ci0gKgotICogIEZNLU1vbm8KLSAqICAgICAgc2hvdWxkIHdvcmsuIFRoZSBzdGVyZW8gbW9kZXMgYXJlIGJhY2t3YXJkIGNvbXBhdGlibGUgdG8gRk0tbW9ubywKLSAqICAgICAgdGhlcmVmb3JlIEZNLU1vbm8gc2hvdWxkIGJlIGFsbHdheXMgYXZhaWxhYmxlLgotICoKLSAqICBGTS1TdGVyZW8gKEIvRywgdXNlZCBpbiBnZXJtYW55KQotICogICAgICBzaG91bGQgd29yaywgd2l0aCBhdXRvZGV0ZWN0Ci0gKgotICogIEZNLVN0ZXJlbyAoc2F0ZWxsaXRlKQotICogICAgICBzaG91bGQgd29yaywgbm8gYXV0b2RldGVjdCAoaS5lLiBkZWZhdWx0IGlzIG1vbm8sIGJ1dCB5b3UgY2FuCi0gKiAgICAgIHN3aXRjaCB0byBzdGVyZW8gLS0gdW50ZXN0ZWQpCi0gKgotICogIE5JQ0FNIChCL0csIEwgLCB1c2VkIGluIFVLLCBTY2FuZGluYXZpYSwgU3BhaW4gYW5kIEZyYW5jZSkKLSAqICAgICAgc2hvdWxkIHdvcmssIHdpdGggYXV0b2RldGVjdC4gU3VwcG9ydCBmb3IgTklDQU0gd2FzIGFkZGVkIGJ5Ci0gKiAgICAgIFBla2thIFBpZXRpa2FpbmVuIDxwcEBuZXRwcGwuZmk+Ci0gKgotICoKLSAqIFRPRE86Ci0gKiAgIC0gYmV0dGVyIFNBVCBzdXBwb3J0Ci0gKgotICoKLSAqIDk4MDYyMyAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQotICogICAgICAgICB1c2luZyBzb3VuZGNvcmUgaW5zdGVhZCBvZiBPU1MKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+Ci0jaW5jbHVkZSAibXNwMzQwMC5oIgotCi0jZGVmaW5lIG1zcDM0MDBfZGJnKGZtdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZykgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIFwKLQkJCSAgICAgICBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkJCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotLyogTWVkaXVtIHZvbHVtZSBkZWJ1Zy4gKi8KLSNkZWZpbmUgbXNwMzQwMF9kYmdfbWVkaXVtdm9sKGZtdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSAyKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZWJ1ZyAlZC0lMDR4OiAiIGZtdCwgXAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCQkJCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBIaWdoIHZvbHVtZSBkZWJ1Zy4gVXNlIHdpdGggY2FyZS4gKi8KLSNkZWZpbmUgbXNwMzQwMF9kYmdfaGlnaHZvbChmbXQsIGFyZy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gMTYpIFwKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzIGRlYnVnICVkLSUwNHg6ICIgZm10LCBcCi0JCQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JCQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbXNwMzQwMF9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAotCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotI2RlZmluZSBtc3AzNDAwX3dhcm4oZm10LCBhcmcuLi4pIGRvIHsgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICVkLSUwNHg6ICIgZm10LCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbXNwMzQwMF9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7IFwKLQlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgT1BNT0RFX0FVVE8gICAgLTEKLSNkZWZpbmUgT1BNT0RFX01BTlVBTCAgIDAKLSNkZWZpbmUgT1BNT0RFX1NJTVBMRSAgIDEgICAvKiB1c2Ugc2hvcnQgcHJvZ3JhbW1pbmcgKD49IG1zcDM0MTAgb25seSkgKi8KLSNkZWZpbmUgT1BNT0RFX1NJTVBMRVIgIDIgICAvKiB1c2Ugc2hvcnRlciBwcm9ncmFtbWluZyAoPj0gbXNwMzR4eEcpICAgKi8KLQotLyogaW5zbW9kIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBpbnQgb3Btb2RlICAgPSBPUE1PREVfQVVUTzsKLXN0YXRpYyBpbnQgZGVidWcgICAgPSAwOyAgICAvKiBkZWJ1ZyBvdXRwdXQgKi8KLXN0YXRpYyBpbnQgb25jZSAgICAgPSAwOyAgICAvKiBubyBjb250aW5vdXMgc3RlcmVvIG1vbml0b3JpbmcgKi8KLXN0YXRpYyBpbnQgYW1zb3VuZCAgPSAwOyAgICAvKiBoYXJkLXdpcmUgQU0gc291bmQgYXQgNi41IEh6IChmcmFuY2UpLAotCQkJICAgICAgIHRoZSBhdXRvc2NhbiBzZWVtcyB3b3JrIHdlbGwgb25seSB3aXRoIEZNLi4uICovCi1zdGF0aWMgaW50IHN0YW5kYXJkID0gMTsgICAgLyogT3ZlcnJpZGUgYXV0byBkZXRlY3Qgb2YgYXVkaW8gc3RhbmRhcmQsIGlmIG5lZWRlZC4gKi8KLXN0YXRpYyBpbnQgZG9sYnkgICAgPSAwOwotCi1zdGF0aWMgaW50IHN0ZXJlb190aHJlc2hvbGQgPSAweDE5MDsgLyogYTIgdGhyZXNob2xkIGZvciBzdGVyZW8vYmlsaW5ndWFsCi0JCQkJCShtc3AzNHh4ZyBvbmx5KSAweDAwYTAtMHgwM2MwICovCi0jZGVmaW5lIERGUF9DT1VOVCAweDQxCi1zdGF0aWMgY29uc3QgaW50IGJsX2RmcFtdID0gewotCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDgsIDB4MDksIDB4MGEsCi0JMHgwYiwgMHgwZCwgMHgwZSwgMHgxMAotfTsKLQotI2RlZmluZSBJU19NU1AzNFhYX0cobXNwKSAoKG1zcCktPm9wbW9kZT09MikKLQotc3RydWN0IG1zcDM0MDBjIHsKLQlpbnQgcmV2MSxyZXYyOwotCi0JaW50IG9wbW9kZTsKLQlpbnQgbmljYW07Ci0JaW50IG1vZGU7Ci0JaW50IG5vcm07Ci0JaW50IHN0ZXJlbzsKLQlpbnQgbmljYW1fb247Ci0JaW50IGFjYjsKLQlpbnQgaW5fc2NhcnQ7Ci0JaW50IGkyc19tb2RlOwotCWludCBtYWluLCBzZWNvbmQ7CS8qIHNvdW5kIGNhcnJpZXIgKi8KLQlpbnQgaW5wdXQ7Ci0JaW50IHNvdXJjZTsgICAgICAgICAgICAgLyogc2VlIG1zcDM0eHhnX3NldF9zb3VyY2UgKi8KLQotCS8qIHY0bDIgKi8KLQlpbnQgYXVkbW9kZTsKLQlpbnQgcnhzdWJjaGFuczsKLQotCWludCBtdXRlZDsKLQlpbnQgbGVmdCwgcmlnaHQ7CS8qIHZvbHVtZSAqLwotCWludCBiYXNzLCB0cmVibGU7Ci0KLQkvKiBzaGFkb3cgcmVnaXN0ZXIgc2V0ICovCi0JaW50IGRmcF9yZWdzW0RGUF9DT1VOVF07Ci0KLQkvKiB0aHJlYWQgKi8KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAqa3RocmVhZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3cTsKLQlpbnQgICAgICAgICAgICAgICAgICByZXN0YXJ0OjE7Ci0JaW50ICAgICAgICAgICAgICAgICAgd2F0Y2hfc3RlcmVvOjE7Ci19OwotCi0jZGVmaW5lIE1JTihhLGIpICgoKGEpPihiKSk/KGIpOihhKSkKLSNkZWZpbmUgTUFYKGEsYikgKCgoYSk+KGIpKT8oYSk6KGIpKQotI2RlZmluZSBIQVZFX05JQ0FNKG1zcCkgICAoKChtc3AtPnJldjI+PjgpICYgMHhmZikgIT0gMDApCi0jZGVmaW5lIEhBVkVfU0lNUExFKG1zcCkgICgobXNwLT5yZXYxICAgICAgJiAweGZmKSA+PSAnRCctJ0AnKQotI2RlZmluZSBIQVZFX1NJTVBMRVIobXNwKSAoKG1zcC0+cmV2MSAgICAgICYgMHhmZikgPj0gJ0cnLSdAJykKLSNkZWZpbmUgSEFWRV9SQURJTyhtc3ApICAgKChtc3AtPnJldjEgICAgICAmIDB4ZmYpID49ICdHJy0nQCcpCi0KLSNkZWZpbmUgVklERU9fTU9ERV9SQURJTyAxNiAgICAgIC8qIG5vcm0gbWFnaWMgZm9yIHJhZGlvIG1vZGUgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiByZWFkLW9ubHkgKi8KLW1vZHVsZV9wYXJhbShvcG1vZGUsICAgICAgICAgICBpbnQsIDA0NDQpOwotCi0vKiByZWFkLXdyaXRlICovCi1tb2R1bGVfcGFyYW0ob25jZSwgICAgICAgICAgICAgaW50LCAwNjQ0KTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgICAgICAgICAgICBpbnQsIDA2NDQpOwotbW9kdWxlX3BhcmFtKHN0ZXJlb190aHJlc2hvbGQsIGludCwgMDY0NCk7Ci1tb2R1bGVfcGFyYW0oc3RhbmRhcmQsICAgICAgICAgaW50LCAwNjQ0KTsKLW1vZHVsZV9wYXJhbShhbXNvdW5kLCAgICAgICAgICBpbnQsIDA2NDQpOwotbW9kdWxlX3BhcmFtKGRvbGJ5LCAgICAgICAgICAgIGludCwgMDY0NCk7Ci0KLU1PRFVMRV9QQVJNX0RFU0Mob3Btb2RlLCAiRm9yY2VzIGEgTVNQMzQwMCBvcG1vZGUuIDA9TWFudWFsLCAxPVNpbXBsZSwgMj1TaW1wbGVyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG9uY2UsICJObyBjb250aW51b3VzIHN0ZXJlbyBtb25pdG9yaW5nIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHN0ZXJlb190aHJlc2hvbGQsICJTZXRzIHNpZ25hbCB0aHJlc2hvbGQgdG8gYWN0aXZhdGUgc3RlcmVvIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHN0YW5kYXJkLCAiU3BlY2lmeSBhdWRpbyBzdGFuZGFyZDogMzIgPSBOVFNDLCA2NCA9IHJhZGlvLCBEZWZhdWx0OiBBdXRvZGV0ZWN0Iik7Ci1NT0RVTEVfUEFSTV9ERVNDKGFtc291bmQsICJIYXJkd2lyZSBBTSBzb3VuZCBhdCA2LjVIeiAoRnJhbmNlKSwgRk0gY2FuIGF1dG9zY2FuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRvbGJ5LCAiQWN0aXZhdGVzIERvbGJ5IHByb2Nlc3NzaW5nIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZSBJMkNfTVNQMzQwMEMgICAgICAgMHg4MAotI2RlZmluZSBJMkNfTVNQMzQwMENfQUxUICAgMHg4OAotCi0jZGVmaW5lIEkyQ19NU1AzNDAwQ19ERU0gICAweDEwCi0jZGVmaW5lIEkyQ19NU1AzNDAwQ19ERlAgICAweDEyCi0KLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19NU1AzNDAwQyAgICAgID4+IDEsCi0JSTJDX01TUDM0MDBDX0FMVCAgPj4gMSwKLQlJMkNfQ0xJRU5UX0VORAotfTsKLUkyQ19DTElFTlRfSU5TTU9EOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIG1zcDM0eHggVFYgc291bmQgcHJvY2Vzc29yIik7Ci1NT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBmdW5jdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIE1TUDM0MDBDIFNvdW5kIHByb2Nlc3NvciAgICAgICAgICAgICAgICAgICAqLwotCi1zdGF0aWMgaW50IG1zcDM0MDBjX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JLyogcmVzZXQgYW5kIHJlYWQgcmV2aXNpb24gY29kZSAqLwotCXN0YXRpYyBjaGFyIHJlc2V0X29mZlszXSA9IHsgMHgwMCwgMHg4MCwgMHgwMCB9OwotCXN0YXRpYyBjaGFyIHJlc2V0X29uWzNdICA9IHsgMHgwMCwgMHgwMCwgMHgwMCB9OwotCXN0YXRpYyBjaGFyIHdyaXRlWzNdICAgICA9IHsgSTJDX01TUDM0MDBDX0RGUCArIDEsIDB4MDAsIDB4MWUgfTsKLQljaGFyIHJlYWRbMl07Ci0Jc3RydWN0IGkyY19tc2cgcmVzZXRbMl0gPSB7Ci0JCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9JR05PUkVfTkFLLCAzLCByZXNldF9vZmYgfSwKLQkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX0lHTk9SRV9OQUssIDMsIHJlc2V0X29uICB9LAotCX07Ci0Jc3RydWN0IGkyY19tc2cgdGVzdFsyXSA9IHsKLQkJeyBjbGllbnQtPmFkZHIsIDAsICAgICAgICAzLCB3cml0ZSB9LAotCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDIsIHJlYWQgIH0sCi0JfTsKLQotCW1zcDM0MDBfZGJnX2hpZ2h2b2woIm1zcDM0MDBjX3Jlc2V0XG4iKTsKLQlpZiAoICgxICE9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsJnJlc2V0WzBdLDEpKSB8fAotCSAgICAgKDEgIT0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwmcmVzZXRbMV0sMSkpIHx8Ci0JICAgICAoMiAhPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLHRlc3QsMikpICkgewotCQltc3AzNDAwX2VycigiY2hpcCByZXNldCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1zcDM0MDBjX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRldiwgaW50IGFkZHIpCi17Ci0JaW50IGVycixyZXR2YWw7Ci0KLQl1bnNpZ25lZCBjaGFyIHdyaXRlWzNdOwotCXVuc2lnbmVkIGNoYXIgcmVhZFsyXTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0gewotCQl7IGNsaWVudC0+YWRkciwgMCwgICAgICAgIDMsIHdyaXRlIH0sCi0JCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgMiwgcmVhZCAgfQotCX07Ci0KLQl3cml0ZVswXSA9IGRldisxOwotCXdyaXRlWzFdID0gYWRkciA+PiA4OwotCXdyaXRlWzJdID0gYWRkciAmIDB4ZmY7Ci0KLQlmb3IgKGVyciA9IDA7IGVyciA8IDM7KSB7Ci0JCWlmICgyID09IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsbXNncywyKSkKLQkJCWJyZWFrOwotCQllcnIrKzsKLQkJbXNwMzQwMF93YXJuKCJJL08gZXJyb3IgIyVkIChyZWFkIDB4JTAyeC8weCUwMngpXG4iLCBlcnIsCi0JCSAgICAgICBkZXYsIGFkZHIpOwotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0JfQotCWlmICgzID09IGVycikgewotCQltc3AzNDAwX3dhcm4oImdpdmluZyB1cCwgcmVzZXR0aW5nIGNoaXAuIFNvdW5kIHdpbGwgZ28gb2ZmLCBzb3JyeSBmb2xrcyA6LXxcbiIpOwotCQltc3AzNDAwY19yZXNldChjbGllbnQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHZhbCA9IHJlYWRbMF0gPDwgOCB8IHJlYWRbMV07Ci0JbXNwMzQwMF9kYmdfaGlnaHZvbCgibXNwMzQwMGNfcmVhZCgweCV4LCAweCV4KTogMHgleFxuIiwgZGV2LCBhZGRyLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgbXNwMzQwMGNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRldiwgaW50IGFkZHIsIGludCB2YWwpCi17Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls1XTsKLQotCWJ1ZmZlclswXSA9IGRldjsKLQlidWZmZXJbMV0gPSBhZGRyID4+IDg7Ci0JYnVmZmVyWzJdID0gYWRkciAmICAweGZmOwotCWJ1ZmZlclszXSA9IHZhbCAgPj4gODsKLQlidWZmZXJbNF0gPSB2YWwgICYgIDB4ZmY7Ci0KLQltc3AzNDAwX2RiZ19oaWdodm9sKCJtc3AzNDAwY193cml0ZSgweCV4LCAweCV4LCAweCV4KVxuIiwgZGV2LCBhZGRyLCB2YWwpOwotCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKLQkJaWYgKDUgPT0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCA1KSkKLQkJCWJyZWFrOwotCQllcnIrKzsKLQkJbXNwMzQwMF93YXJuKCJJL08gZXJyb3IgIyVkICh3cml0ZSAweCUwMngvMHglMDJ4KVxuIiwgZXJyLAotCQkgICAgICAgZGV2LCBhZGRyKTsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMCkpOwotCX0KLQlpZiAoMyA9PSBlcnIpIHsKLQkJbXNwMzQwMF93YXJuKCJnaXZpbmcgdXAsIHJlc2V0aW5nIGNoaXAuIFNvdW5kIHdpbGwgZ28gb2ZmLCBzb3JyeSBmb2xrcyA6LXxcbiIpOwotCQltc3AzNDAwY19yZXNldChjbGllbnQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogVGhpcyBtYWNybyBpcyBhbGxvd2VkIGZvciAqY29uc3RhbnRzKiBvbmx5LCBnY2MgbXVzdCBjYWxjdWxhdGUgaXQKLSAgIGF0IGNvbXBpbGUgdGltZS4gIFJlbWVtYmVyIC0tIG5vIGZsb2F0cyBpbiBrZXJuZWwgbW9kZSAqLwotI2RlZmluZSBNU1BfQ0FSUklFUihmcmVxKSAoKGludCkoKGZsb2F0KShmcmVxLzE4LjQzMikqKDE8PDI0KSkpCi0KLSNkZWZpbmUgTVNQX01PREVfQU1fREVURUNUICAgMAotI2RlZmluZSBNU1BfTU9ERV9GTV9SQURJTyAgICAyCi0jZGVmaW5lIE1TUF9NT0RFX0ZNX1RFUlJBICAgIDMKLSNkZWZpbmUgTVNQX01PREVfRk1fU0FUICAgICAgNAotI2RlZmluZSBNU1BfTU9ERV9GTV9OSUNBTTEgICA1Ci0jZGVmaW5lIE1TUF9NT0RFX0ZNX05JQ0FNMiAgIDYKLSNkZWZpbmUgTVNQX01PREVfQU1fTklDQU0gICAgNwotI2RlZmluZSBNU1BfTU9ERV9CVFNDICAgICAgICA4Ci0jZGVmaW5lIE1TUF9NT0RFX0VYVEVSTiAgICAgIDkKLQotc3RhdGljIHN0cnVjdCBNU1BfSU5JVF9EQVRBX0RFTSB7Ci0JaW50IGZpcjFbNl07Ci0JaW50IGZpcjJbNl07Ci0JaW50IGNkbzE7Ci0JaW50IGNkbzI7Ci0JaW50IGFkX2N2OwotCWludCBtb2RlX3JlZzsKLQlpbnQgZGZwX3NyYzsKLQlpbnQgZGZwX21hdHJpeDsKLX0gbXNwX2luaXRfZGF0YVtdID0gewotCXsJLyogQU0gKGZvciBjYXJyaWVyIGRldGVjdCAvIG1zcDM0MDApICovCi0JCXs3NSwgMTksIDM2LCAzNSwgMzksIDQwfSwKLQkJezc1LCAxOSwgMzYsIDM1LCAzOSwgNDB9LAotCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAotCQkweDAwZDAsIDB4MDUwMCwgMHgwMDIwLCAweDMwMDAKLQl9LHsJLyogQU0gKGZvciBjYXJyaWVyIGRldGVjdCAvIG1zcDM0MTApICovCi0JCXstMSwgLTEsIC04LCAyLCA1OSwgMTI2fSwKLQkJey0xLCAtMSwgLTgsIDIsIDU5LCAxMjZ9LAotCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAotCQkweDAwZDAsIDB4MDEwMCwgMHgwMDIwLCAweDMwMDAKLQl9LHsJLyogRk0gUmFkaW8gKi8KLQkJey04LCAtOCwgNCwgNiwgNzgsIDEwN30sCi0JCXstOCwgLTgsIDQsIDYsIDc4LCAxMDd9LAotCQlNU1BfQ0FSUklFUigxMC43KSwgTVNQX0NBUlJJRVIoMTAuNyksCi0JCTB4MDBkMCwgMHgwNDgwLCAweDAwMjAsIDB4MzAwMAotCX0sewkvKiBUZXJyZXN0aWFsIEZNLW1vbm8gKyBGTS1zdGVyZW8gKi8KLQkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCi0JCXszLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAotCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAotCQkweDAwZDAsIDB4MDQ4MCwgMHgwMDMwLCAweDMwMDAKLQl9LHsJLyogU2F0IEZNLW1vbm8gKi8KLQkJeyAxLCA5LCAxNCwgMjQsIDMzLCAzN30sCi0JCXsgMywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKLQkJTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwKLQkJMHgwMGM2LCAweDA0ODAsIDB4MDAwMCwgMHgzMDAwCi0JfSx7CS8qIE5JQ0FNL0ZNIC0tICBCL0cgKDUuNS81Ljg1KSwgRC9LICg2LjUvNS44NSkgKi8KLQkJey0yLCAtOCwgLTEwLCAxMCwgNTAsIDg2fSwKLQkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCi0JCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCi0JCTB4MDBkMCwgMHgwMDQwLCAweDAxMjAsIDB4MzAwMAotCX0sewkvKiBOSUNBTS9GTSAtLSBJICg2LjAvNi41NTIpICovCi0JCXsyLCA0LCAtNiwgLTQsIDQwLCA5NH0sCi0JCXszLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAotCQlNU1BfQ0FSUklFUig2LjApLCBNU1BfQ0FSUklFUig2LjApLAotCQkweDAwZDAsIDB4MDA0MCwgMHgwMTIwLCAweDMwMDAKLQl9LHsJLyogTklDQU0vQU0gLS0gTCAoNi41LzUuODUpICovCi0JCXstMiwgLTgsIC0xMCwgMTAsIDUwLCA4Nn0sCi0JCXstNCwgLTEyLCAtOSwgMjMsIDc5LCAxMjZ9LAotCQlNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpLAotCQkweDAwYzYsIDB4MDE0MCwgMHgwMTIwLCAweDdjMDMKLQl9LAotfTsKLQotc3RydWN0IENBUlJJRVJfREVURUNUIHsKLQlpbnQgICBjZG87Ci0JY2hhciAqbmFtZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgQ0FSUklFUl9ERVRFQ1QgY2Fycmllcl9kZXRlY3RfbWFpbltdID0gewotCS8qIG1haW4gY2FycmllciAqLwotCXsgTVNQX0NBUlJJRVIoNC41KSwgICAgICAgICI0LjUgICBOVFNDIiAgICAgICAgICAgICAgICAgICB9LAotCXsgTVNQX0NBUlJJRVIoNS41KSwgICAgICAgICI1LjUgICBQQUwgQi9HIiAgICAgICAgICAgICAgICB9LAotCXsgTVNQX0NBUlJJRVIoNi4wKSwgICAgICAgICI2LjAgICBQQUwgSSIgICAgICAgICAgICAgICAgICB9LAotCXsgTVNQX0NBUlJJRVIoNi41KSwgICAgICAgICI2LjUgICBQQUwgRC9LICsgU0FUICsgU0VDQU0iICB9Ci19OwotCi1zdGF0aWMgc3RydWN0IENBUlJJRVJfREVURUNUIGNhcnJpZXJfZGV0ZWN0XzU1W10gPSB7Ci0JLyogUEFMIEIvRyAqLwotCXsgTVNQX0NBUlJJRVIoNS43NDIxODc1KSwgICI1Ljc0MiBQQUwgQi9HIEZNLXN0ZXJlbyIgICAgIH0sCi0JeyBNU1BfQ0FSUklFUig1Ljg1KSwgICAgICAgIjUuODUgIFBBTCBCL0cgTklDQU0iICAgICAgICAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBDQVJSSUVSX0RFVEVDVCBjYXJyaWVyX2RldGVjdF82NVtdID0gewotCS8qIFBBTCBTQVQgLyBTRUNBTSAqLwotCXsgTVNQX0NBUlJJRVIoNS44NSksICAgICAgICI1Ljg1ICBQQUwgRC9LICsgU0VDQU0gTklDQU0iIH0sCi0JeyBNU1BfQ0FSUklFUig2LjI1NzgxMjUpLCAgIjYuMjUgIFBBTCBEL0sxIEZNLXN0ZXJlbyIgfSwKLQl7IE1TUF9DQVJSSUVSKDYuNzQyMTg3NSksICAiNi43NCAgUEFMIEQvSzIgRk0tc3RlcmVvIiB9LAotCXsgTVNQX0NBUlJJRVIoNy4wMiksICAgICAgICI3LjAyICBQQUwgU0FUIEZNLXN0ZXJlbyBzL2IiIH0sCi0JeyBNU1BfQ0FSUklFUig3LjIwKSwgICAgICAgIjcuMjAgIFBBTCBTQVQgRk0tc3RlcmVvIHMiICAgfSwKLQl7IE1TUF9DQVJSSUVSKDcuMzgpLCAgICAgICAiNy4zOCAgUEFMIFNBVCBGTS1zdGVyZW8gYiIgICB9LAotfTsKLQotI2RlZmluZSBDQVJSSUVSX0NPVU5UKHgpIChzaXplb2YoeCkvc2l6ZW9mKHN0cnVjdCBDQVJSSUVSX0RFVEVDVCkpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKLSAqIGJpdHMgIDkgIDggIDUgLSBTQ0FSVCBEU1AgaW5wdXQgU2VsZWN0OgotICogICAgICAgMCAgMCAgMCAtIFNDQVJUIDEgdG8gRFNQIGlucHV0IChyZXNldCBwb3NpdGlvbikKLSAqICAgICAgIDAgIDEgIDAgLSBNT05PIHRvIERTUCBpbnB1dAotICogICAgICAgMSAgMCAgMCAtIFNDQVJUIDIgdG8gRFNQIGlucHV0Ci0gKiAgICAgICAxICAxICAxIC0gTXV0ZSBEU1AgaW5wdXQKLSAqCi0gKiBiaXRzIDExIDEwICA2IC0gU0NBUlQgMSBPdXRwdXQgU2VsZWN0OgotICogICAgICAgMCAgMCAgMCAtIHVuZGVmaW5lZCAocmVzZXQgcG9zaXRpb24pCi0gKiAgICAgICAwICAxICAwIC0gU0NBUlQgMiBJbnB1dCB0byBTQ0FSVCAxIE91dHB1dCAoZm9yIGRldmljZXMgd2l0aCAyIFNDQVJUUykKLSAqICAgICAgIDEgIDAgIDAgLSBNT05PIGlucHV0IHRvIFNDQVJUIDEgT3V0cHV0Ci0gKiAgICAgICAxICAxICAwIC0gU0NBUlQgMSBEQSB0byBTQ0FSVCAxIE91dHB1dAotICogICAgICAgMCAgMCAgMSAtIFNDQVJUIDIgREEgdG8gU0NBUlQgMSBPdXRwdXQKLSAqICAgICAgIDAgIDEgIDEgLSBTQ0FSVCAxIElucHV0IHRvIFNDQVJUIDEgT3V0cHV0Ci0gKiAgICAgICAxICAxICAxIC0gTXV0ZSBTQ0FSVCAxIE91dHB1dAotICoKLSAqIGJpdHMgMTMgMTIgIDcgLSBTQ0FSVCAyIE91dHB1dCBTZWxlY3QgKGZvciBkZXZpY2VzIHdpdGggMiBPdXRwdXQgU0NBUlQpOgotICogICAgICAgMCAgMCAgMCAtIFNDQVJUIDEgREEgdG8gU0NBUlQgMiBPdXRwdXQgKHJlc2V0IHBvc2l0aW9uKQotICogICAgICAgMCAgMSAgMCAtIFNDQVJUIDEgSW5wdXQgdG8gU0NBUlQgMiBPdXRwdXQKLSAqICAgICAgIDEgIDAgIDAgLSBNT05PIGlucHV0IHRvIFNDQVJUIDIgT3V0cHV0Ci0gKiAgICAgICAwICAwICAxIC0gU0NBUlQgMiBEQSB0byBTQ0FSVCAyIE91dHB1dAotICogICAgICAgMCAgMSAgMSAtIFNDQVJUIDIgSW5wdXQgdG8gU0NBUlQgMiBPdXRwdXQKLSAqICAgICAgIDEgIDEgIDAgLSBNdXRlIFNDQVJUIDIgT3V0cHV0Ci0gKgotICogQml0cyA0IHRvIDAgc2hvdWxkIGJlIHplcm8uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IHNjYXJ0c1szXVs5XSA9IHsKLQkvKiBNQVNLICAgIElOMSAgICAgSU4yICAgICBJTjFfREEgIElOMl9EQSAgSU4zICAgICBJTjQgICAgIE1PTk8gICAgTVVURSAgICovCi0JLyogU0NBUlQgRFNQIElucHV0IHNlbGVjdCAqLwotCXsgMHgwMzIwLCAweDAwMDAsIDB4MDIwMCwgLTEsICAgICAtMSwgICAgIDB4MDMwMCwgMHgwMDIwLCAweDAxMDAsIDB4MDMyMCB9LAotCS8qIFNDQVJUMSBPdXRwdXQgc2VsZWN0ICovCi0JeyAweDBjNDAsIDB4MDQ0MCwgMHgwNDAwLCAweDBjMDAsIDB4MDA0MCwgMHgwMDAwLCAweDA4NDAsIDB4MDgwMCwgMHgwYzQwIH0sCi0JLyogU0NBUlQyIE91dHB1dCBzZWxlY3QgKi8KLQl7IDB4MzA4MCwgMHgxMDAwLCAweDEwODAsIDB4MDAwMCwgMHgwMDgwLCAweDIwODAsIDB4MzA4MCwgMHgyMDAwLCAweDMwMDAgfSwKLX07Ci0KLXN0YXRpYyBjaGFyICpzY2FydF9uYW1lc1tdID0gewotCSJtYXNrIiwgImluMSIsICJpbjIiLCAiaW4xIGRhIiwgImluMiBkYSIsICJpbjMiLCAiaW40IiwgIm1vbm8iLCAibXV0ZSIKLX07Ci0KLXN0YXRpYyB2b2lkIG1zcDM0MDBjX3NldF9zY2FydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW4sIGludCBvdXQpCi17Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCW1zcC0+aW5fc2NhcnQ9aW47Ci0KLQlpZiAoaW4gPj0gMSAmJiBpbiA8PSA4ICYmIG91dCA+PSAwICYmIG91dCA8PSAyKSB7Ci0JCWlmICgtMSA9PSBzY2FydHNbb3V0XVtpbl0pCi0JCQlyZXR1cm47Ci0KLQkJbXNwLT5hY2IgJj0gfnNjYXJ0c1tvdXRdW1NDQVJUX01BU0tdOwotCQltc3AtPmFjYiB8PSAgc2NhcnRzW291dF1baW5dOwotCX0gZWxzZQotCQltc3AtPmFjYiA9IDB4ZjYwOyAvKiBNdXRlIElucHV0IGFuZCBTQ0FSVCAxIE91dHB1dCAqLwotCi0JbXNwMzQwMF9kYmcoInNjYXJ0IHN3aXRjaDogJXMgPT4gJWQgKEFDQj0weCUwNHgpXG4iLAotCQkJCQkJc2NhcnRfbmFtZXNbaW5dLCBvdXQsIG1zcC0+YWNiKTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgxMywgbXNwLT5hY2IpOwotCi0JLyogU2V0cyBJMlMgc3BlZWQgMCA9IDEuMDI0IE1icHMsIDEgPSAyLjA0OCBNYnBzICovCi0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4NDAsIG1zcC0+aTJzX21vZGUpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQgbXNwMzQwMGNfc2V0Y2FycmllcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgY2RvMSwgaW50IGNkbzIpCi17Ci0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4MDA5MywgY2RvMSAmIDB4ZmZmKTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHgwMDliLCBjZG8xID4+IDEyKTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHgwMGEzLCBjZG8yICYgMHhmZmYpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDAwYWIsIGNkbzIgPj4gMTIpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDAwNTYsIDApOyAvKkxPQURfUkVHXzEvMiovCi19Ci0KLXN0YXRpYyB2b2lkIG1zcDM0MDBjX3NldHZvbHVtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIGludCBtdXRlZCwgaW50IGxlZnQsIGludCByaWdodCkKLSB7Ci0JaW50IHZvbCA9IDAsIHZhbCA9IDAsIGJhbGFuY2UgPSAwOwotCi0JaWYgKCFtdXRlZCkgewotCQkvKiAweDdmIGluc3RlYWQgaWYgMHg3MyBoZXJlIGhhcyBzb3VuZCBxdWFsaXR5IGlzc3VlcywKLQkJICogcHJvYmFibHkgZHVlIHRvIG92ZXJtb2R1bGF0aW9uICsgY2xpcHBpbmcgLi4uICovCi0JCXZvbCA9IChsZWZ0ID4gcmlnaHQpID8gbGVmdCA6IHJpZ2h0OwotCQl2YWwgPSAodm9sICogMHg3MyAvIDY1NTM1KSA8PCA4OwotCX0KLQlpZiAodm9sID4gMCkgewotCQliYWxhbmNlID0gKChyaWdodCAtIGxlZnQpICogMTI3KSAvIHZvbDsKLQl9Ci0KLQltc3AzNDAwX2RiZygic2V0dm9sdW1lOiBtdXRlPSVzICVkOiVkICB2PTB4JTAyeCBiPTB4JTAyeFxuIiwKLQkJbXV0ZWQgPyAib24iIDogIm9mZiIsIGxlZnQsIHJpZ2h0LCB2YWwgPj4gOCwgYmFsYW5jZSk7Ci0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwMCwgdmFsKTsgLyogbG91ZHNwZWFrZXIgKi8KLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA2LCB2YWwpOyAvKiBoZWFkcGhvbmVzICAqLwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDcsCi0JCQkJCW11dGVkID8gMHgxIDogKHZhbCB8IDB4MSkpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgwMDAxLCBiYWxhbmNlIDw8IDgpOwotfQotCi1zdGF0aWMgdm9pZCBtc3AzNDAwY19zZXRiYXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBiYXNzKQotewotCWludCB2YWwgPSAoKGJhc3MtMzI3NjgpICogMHg2MCAvIDY1NTM1KSA8PCA4OwotCi0JbXNwMzQwMF9kYmcoInNldGJhc3M6ICVkIDB4JTAyeFxuIiwgYmFzcywgdmFsID4+IDgpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDIsIHZhbCk7IC8qIGxvdWRzcGVha2VyICovCi19Ci0KLXN0YXRpYyB2b2lkIG1zcDM0MDBjX3NldHRyZWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdHJlYmxlKQotewotCWludCB2YWwgPSAoKHRyZWJsZS0zMjc2OCkgKiAweDYwIC8gNjU1MzUpIDw8IDg7Ci0KLQltc3AzNDAwX2RiZygic2V0dHJlYmxlOiAlZCAweCUwMnhcbiIsdHJlYmxlLCB2YWw+PjgpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDMsIHZhbCk7IC8qIGxvdWRzcGVha2VyICovCi19Ci0KLXN0YXRpYyB2b2lkIG1zcDM0MDBjX3NldG1vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgaTsKLQotCW1zcDM0MDBfZGJnKCJzZXRtb2RlOiAlZFxuIix0eXBlKTsKLQltc3AtPm1vZGUgICAgICAgPSB0eXBlOwotCW1zcC0+YXVkbW9kZSAgICA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCW1zcC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0KLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHgwMGJiLCAgICAgICAgICAvKiBhZF9jdiAqLwotCQkgICAgICAgbXNwX2luaXRfZGF0YVt0eXBlXS5hZF9jdik7Ci0KLQlmb3IgKGkgPSA1OyBpID49IDA7IGktLSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpciAxICovCi0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDAwMDEsCi0JCQkgICAgICAgbXNwX2luaXRfZGF0YVt0eXBlXS5maXIxW2ldKTsKLQotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDAwMDUsIDB4MDAwNCk7IC8qIGZpciAyICovCi0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4MDAwNSwgMHgwMDQwKTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHgwMDA1LCAweDAwMDApOwotCWZvciAoaSA9IDU7IGkgPj0gMDsgaS0tKQotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHgwMDA1LAotCQkJICAgICAgIG1zcF9pbml0X2RhdGFbdHlwZV0uZmlyMltpXSk7Ci0KLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHgwMDgzLCAgICAgLyogTU9ERV9SRUcgKi8KLQkJICAgICAgIG1zcF9pbml0X2RhdGFbdHlwZV0ubW9kZV9yZWcpOwotCi0JbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIG1zcF9pbml0X2RhdGFbdHlwZV0uY2RvMSwKLQkJCSAgICBtc3BfaW5pdF9kYXRhW3R5cGVdLmNkbzIpOwotCi0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4MDA1NiwgMCk7IC8qTE9BRF9SRUdfMS8yKi8KLQotCWlmIChkb2xieSkgewotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA4LAotCQkJICAgICAgIDB4MDUyMCk7IC8qIEkyUzEgKi8KLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwOSwKLQkJCSAgICAgICAweDA2MjApOyAvKiBJMlMyICovCi0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMGIsCi0JCQkgICAgICAgbXNwX2luaXRfZGF0YVt0eXBlXS5kZnBfc3JjKTsKLQl9IGVsc2UgewotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA4LAotCQkJICAgICAgIG1zcF9pbml0X2RhdGFbdHlwZV0uZGZwX3NyYyk7Ci0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDksCi0JCQkgICAgICAgbXNwX2luaXRfZGF0YVt0eXBlXS5kZnBfc3JjKTsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwYiwKLQkJCSAgICAgICBtc3BfaW5pdF9kYXRhW3R5cGVdLmRmcF9zcmMpOwotCX0KLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDBhLAotCQkgICAgICAgbXNwX2luaXRfZGF0YVt0eXBlXS5kZnBfc3JjKTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDBlLAotCQkgICAgICAgbXNwX2luaXRfZGF0YVt0eXBlXS5kZnBfbWF0cml4KTsKLQotCWlmIChIQVZFX05JQ0FNKG1zcCkpIHsKLQkJLyogbmljYW0gcHJlc2NhbGUgKi8KLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAxMCwgMHg1YTAwKTsgLyogd2FzOiAweDMwMDAgKi8KLQl9Ci19Ci0KLS8qIGdpdmVuIGEgYml0bWFzayBvZiBWSURFT19TT1VORF9YWFggcmV0dXJucyB0aGUgImJlc3QiIGluIHRoZSBiaXRtYXNrICovCi1zdGF0aWMgaW50IGJlc3RfdmlkZW9fc291bmQoaW50IHJ4c3ViY2hhbnMpCi17Ci0JaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzEpCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzE7Ci0JaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMikKLQkJcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9MQU5HMjsKLQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci19Ci0KLS8qIHR1cm4gb24vb2ZmIG5pY2FtICsgc3RlcmVvICovCi1zdGF0aWMgdm9pZCBtc3AzNDAwY19zZXRzdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG1vZGUpCi17Ci0Jc3RhdGljIGNoYXIgKnN0cm1vZGVbXSA9IHsgIjAiLCAibW9ubyIsICJzdGVyZW8iLCAiMyIsCi0JCSJsYW5nMSIsICI1IiwgIjYiLCAiNyIsICJsYW5nMiIKLQl9OwotCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IG5pY2FtID0gMDsJCS8qIGNoYW5uZWwgc291cmNlOiBGTS9BTSBvciBuaWNhbSAqLwotCWludCBzcmMgPSAwOwotCi0JaWYgKElTX01TUDM0WFhfRyhtc3ApKSB7Ci0JCS8qIHRoaXMgbWV0aG9kIHdvdWxkIGJyZWFrIGV2ZXJ5dGhpbmcsIGxldCdzIG1ha2Ugc3VyZQotCQkgKiBpdCdzIG5ldmVyIGNhbGxlZAotCQkgKi8KLQkJbXNwMzQwMF9kYmcKLQkJICAgICgiREVCVUcgV0FSTklORyBzZXRzdGVyZW8gY2FsbGVkIHdpdGggbW9kZT0lZCBpbnN0ZWFkIG9mIHNldF9zb3VyY2UgKGlnbm9yZWQpXG4iLAotCQkgICAgIG1vZGUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogc3dpdGNoIGRlbW9kdWxhdG9yICovCi0Jc3dpdGNoIChtc3AtPm1vZGUpIHsKLQljYXNlIE1TUF9NT0RFX0ZNX1RFUlJBOgotCQltc3AzNDAwX2RiZygiRk0gc2V0c3RlcmVvOiAlc1xuIiwgc3RybW9kZVttb2RlXSk7Ci0JCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LG1zcC0+c2Vjb25kLG1zcC0+bWFpbik7Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDBlLCAweDMwMDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKLQkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMGUsIDB4MzAwMCk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIE1TUF9NT0RFX0ZNX1NBVDoKLQkJbXNwMzQwMF9kYmcoIlNBVCBzZXRzdGVyZW86ICVzXG4iLCBzdHJtb2RlW21vZGVdKTsKLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMiksIE1TUF9DQVJSSUVSKDcuMDIpKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig3LjM4KSwgTVNQX0NBUlJJRVIoNy4wMikpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMzgpLCBNU1BfQ0FSUklFUig3LjAyKSk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMToKLQljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjoKLQljYXNlIE1TUF9NT0RFX0FNX05JQ0FNOgotCQltc3AzNDAwX2RiZygiTklDQU0gc2V0c3RlcmVvOiAlc1xuIixzdHJtb2RlW21vZGVdKTsKLQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsbXNwLT5zZWNvbmQsbXNwLT5tYWluKTsKLQkJaWYgKG1zcC0+bmljYW1fb24pCi0JCQluaWNhbT0weDAxMDA7Ci0JCWJyZWFrOwotCWNhc2UgTVNQX01PREVfQlRTQzoKLQkJbXNwMzQwMF9kYmcoIkJUU0Mgc2V0c3RlcmVvOiAlc1xuIixzdHJtb2RlW21vZGVdKTsKLQkJbmljYW09MHgwMzAwOwotCQlicmVhazsKLQljYXNlIE1TUF9NT0RFX0VYVEVSTjoKLQkJbXNwMzQwMF9kYmcoImV4dGVybiBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOwotCQluaWNhbSA9IDB4MDIwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNU1BfTU9ERV9GTV9SQURJTzoKLQkJbXNwMzQwMF9kYmcoIkZNLVJhZGlvIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW1zcDM0MDBfZGJnKCJtb25vIHNldHN0ZXJlb1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBzd2l0Y2ggYXVkaW8gKi8KLQlzd2l0Y2ggKGJlc3RfdmlkZW9fc291bmQobW9kZSkpIHsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCXNyYyA9IDB4MDAyMCB8IG5pY2FtOwotCQlicmVhazsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQlpZiAobXNwLT5tb2RlID09IE1TUF9NT0RFX0FNX05JQ0FNKSB7Ci0JCQltc3AzNDAwX2RiZygic3dpdGNoaW5nIHRvIEFNIG1vbm9cbiIpOwotCQkJLyogQU0gbW9ubyBkZWNvZGluZyBpcyBoYW5kbGVkIGJ5IHR1bmVyLCBub3QgTVNQIGNoaXAgKi8KLQkJCS8qIFNDQVJUIHN3aXRjaGluZyBjb250cm9sIHJlZ2lzdGVyICovCi0JCQltc3AzNDAwY19zZXRfc2NhcnQoY2xpZW50LFNDQVJUX01PTk8sMCk7Ci0JCQlzcmMgPSAweDAyMDA7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQlzcmMgPSAweDAwMDAgfCBuaWNhbTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6Ci0JCXNyYyA9IDB4MDAxMCB8IG5pY2FtOwotCQlicmVhazsKLQl9Ci0JbXNwMzQwMF9kYmcoInNldHN0ZXJlbyBmaW5hbCBzb3VyY2UvbWF0cml4ID0gMHgleFxuIiwgc3JjKTsKLQotCWlmIChkb2xieSkgewotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA4LDB4MDUyMCk7Ci0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDksMHgwNjIwKTsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwYSxzcmMpOwotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDBiLHNyYyk7Ci0JfSBlbHNlIHsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwOCxzcmMpOwotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA5LHNyYyk7Ci0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMGEsc3JjKTsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwYixzcmMpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW1zcDM0MDBjX3ByaW50X21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaWYgKG1zcC0+bWFpbiA9PSBtc3AtPnNlY29uZCkgewotCQltc3AzNDAwX2RiZygibW9ubyBzb3VuZCBjYXJyaWVyOiAlZC4lMDNkIE1IelxuIiwKLQkJICAgICAgIG1zcC0+bWFpbi85MTAwMDAsKG1zcC0+bWFpbi85MTApJTEwMDApOwotCX0gZWxzZSB7Ci0JCW1zcDM0MDBfZGJnKCJtYWluIHNvdW5kIGNhcnJpZXI6ICVkLiUwM2QgTUh6XG4iLAotCQkgICAgICAgbXNwLT5tYWluLzkxMDAwMCwobXNwLT5tYWluLzkxMCklMTAwMCk7Ci0JfQotCWlmIChtc3AtPm1vZGUgPT0gTVNQX01PREVfRk1fTklDQU0xIHx8IG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9GTV9OSUNBTTIpCi0JCW1zcDM0MDBfZGJnKCJOSUNBTS9GTSBjYXJyaWVyICAgOiAlZC4lMDNkIE1IelxuIiwKLQkJICAgICAgIG1zcC0+c2Vjb25kLzkxMDAwMCwobXNwLT5zZWNvbmQvOTEwKSUxMDAwKTsKLQlpZiAobXNwLT5tb2RlID09IE1TUF9NT0RFX0FNX05JQ0FNKQotCQltc3AzNDAwX2RiZygiTklDQU0vQU0gY2FycmllciAgIDogJWQuJTAzZCBNSHpcbiIsCi0JCSAgICAgICBtc3AtPnNlY29uZC85MTAwMDAsKG1zcC0+c2Vjb25kLzkxMCklMTAwMCk7Ci0JaWYgKG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9GTV9URVJSQSAmJgotCSAgICBtc3AtPm1haW4gIT0gbXNwLT5zZWNvbmQpIHsKLQkJbXNwMzQwMF9kYmcoIkZNLXN0ZXJlbyBjYXJyaWVyIDogJWQuJTAzZCBNSHpcbiIsCi0JCSAgICAgICBtc3AtPnNlY29uZC85MTAwMDAsKG1zcC0+c2Vjb25kLzkxMCklMTAwMCk7Ci0JfQotfQotCi0jZGVmaW5lIE1TUDM0MDBfTUFYIDQKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqbXNwc1tNU1AzNDAwX01BWF07Ci1zdGF0aWMgdm9pZCBtc3AzNDAwY19yZXN0b3JlX2RmcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgREZQX0NPVU5UOyBpKyspIHsKLQkJaWYgKC0xID09IG1zcC0+ZGZwX3JlZ3NbaV0pCi0JCQljb250aW51ZTsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCBpLCBtc3AtPmRmcF9yZWdzW2ldKTsKLQl9Ci19Ci0KLS8qIGlmIHRoZSBkZnBfcmVncyBpcyBzZXQsIHNldCB3aGF0J3MgaW4gdGhlcmUuIE90aGVyd2lzZSwgc2V0IHRoZSBkZWZhdWx0IHZhbHVlICovCi1zdGF0aWMgaW50IG1zcDM0MDBjX3dyaXRlX2RmcF93aXRoX2RlZmF1bHQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQkJaW50IGFkZHIsIGludCBkZWZhdWx0X3ZhbHVlKQotewotCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHZhbHVlID0gZGVmYXVsdF92YWx1ZTsKLQlpZiAoYWRkciA8IERGUF9DT1VOVCAmJiAtMSAhPSBtc3AtPmRmcF9yZWdzW2FkZHJdKQotCQl2YWx1ZSA9IG1zcC0+ZGZwX3JlZ3NbYWRkcl07Ci0JcmV0dXJuIG1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgYWRkciwgdmFsdWUpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdHJ1Y3QgUkVHSVNURVJfRFVNUCB7Ci0JaW50ICAgYWRkcjsKLQljaGFyICpuYW1lOwotfTsKLQotc3RydWN0IFJFR0lTVEVSX0RVTVAgZDFbXSA9IHsKLQl7MHgwMDdlLCAiYXV0b2RldGVjdCJ9LAotCXsweDAwMjMsICJDX0FEX0JJVFMgIn0sCi0JezB4MDAzOCwgIkFERF9CSVRTICAifSwKLQl7MHgwMDNlLCAiQ0lCX0JJVFMgICJ9LAotCXsweDAwNTcsICJFUlJPUl9SQVRFIn0sCi19OwotCi1zdGF0aWMgaW50IGF1dG9kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgdmFsOwotCWludCByeHN1YmNoYW5zID0gbXNwLT5yeHN1YmNoYW5zOwotCWludCBuZXduaWNhbSAgID0gbXNwLT5uaWNhbV9vbjsKLQlpbnQgdXBkYXRlID0gMDsKLQotCXN3aXRjaCAobXNwLT5tb2RlKSB7Ci0JY2FzZSBNU1BfTU9ERV9GTV9URVJSQToKLQkJdmFsID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MTgpOwotCQlpZiAodmFsID4gMzI3NjcpCi0JCQl2YWwgLT0gNjU1MzY7Ci0JCW1zcDM0MDBfZGJnKCJzdGVyZW8gZGV0ZWN0IHJlZ2lzdGVyOiAlZFxuIix2YWwpOwotCQlpZiAodmFsID4gNDA5NikgewotCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCX0gZWxzZSBpZiAodmFsIDwgLTQwOTYpIHsKLQkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCQl9IGVsc2UgewotCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCX0KLQkJbmV3bmljYW0gPSAwOwotCQlicmVhazsKLQljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMToKLQljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjoKLQljYXNlIE1TUF9NT0RFX0FNX05JQ0FNOgotCQl2YWwgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgyMyk7Ci0JCW1zcDM0MDBfZGJnKCJuaWNhbSBzeW5jPSVkLCBtb2RlPSVkXG4iLAotCQkJdmFsICYgMSwgKHZhbCAmIDB4MWUpID4+IDEpOwotCi0JCWlmICh2YWwgJiAxKSB7Ci0JCQkvKiBuaWNhbSBzeW5jZWQgKi8KLQkJCXN3aXRjaCAoKHZhbCAmIDB4MWUpID4+IDEpICB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDg6Ci0JCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCWNhc2UgOToKLQkJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTwotCQkJCQl8IFY0TDJfVFVORVJfU1VCX0xBTkcxOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJY2FzZSAxMDoKLQkJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTwotCQkJCQl8IFY0TDJfVFVORVJfU1VCX0xBTkcxCi0JCQkJCXwgVjRMMl9UVU5FUl9TVUJfTEFORzI7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJCWJyZWFrOwotCQkJfQotCQkJbmV3bmljYW09MTsKLQkJfSBlbHNlIHsKLQkJCW5ld25pY2FtID0gMDsKLQkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTVNQX01PREVfQlRTQzoKLQkJdmFsID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERU0sIDB4MjAwKTsKLQkJbXNwMzQwMF9kYmcoInN0YXR1cz0weCV4IChwcmk9JXMsIHNlYz0lcywgJXMlcyVzKVxuIiwKLQkJCXZhbCwKLQkJCSh2YWwgJiAweDAwMDIpID8gIm5vIiAgICAgOiAieWVzIiwKLQkJCSh2YWwgJiAweDAwMDQpID8gIm5vIiAgICAgOiAieWVzIiwKLQkJCSh2YWwgJiAweDAwNDApID8gInN0ZXJlbyIgOiAibW9ubyIsCi0JCQkodmFsICYgMHgwMDgwKSA/ICIsIG5pY2FtIDJuZCBtb25vIiA6ICIiLAotCQkJKHZhbCAmIDB4MDEwMCkgPyAiLCBiaWxpbmd1YWwvU0FQIiAgOiAiIik7Ci0JCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQlpZiAodmFsICYgMHgwMDQwKSByeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJaWYgKHZhbCAmIDB4MDEwMCkgcnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9MQU5HMTsKLQkJYnJlYWs7Ci0JfQotCWlmIChyeHN1YmNoYW5zICE9IG1zcC0+cnhzdWJjaGFucykgewotCQl1cGRhdGUgPSAxOwotCQltc3AzNDAwX2RiZygid2F0Y2g6IHJ4c3ViY2hhbnMgJWQgPT4gJWRcbiIsCi0JCQltc3AtPnJ4c3ViY2hhbnMscnhzdWJjaGFucyk7Ci0JCW1zcC0+cnhzdWJjaGFucyA9IHJ4c3ViY2hhbnM7Ci0JfQotCWlmIChuZXduaWNhbSAhPSBtc3AtPm5pY2FtX29uKSB7Ci0JCXVwZGF0ZSA9IDE7Ci0JCW1zcDM0MDBfZGJnKCJ3YXRjaDogbmljYW0gJWQgPT4gJWRcbiIsCi0JCQltc3AtPm5pY2FtX29uLG5ld25pY2FtKTsKLQkJbXNwLT5uaWNhbV9vbiA9IG5ld25pY2FtOwotCX0KLQlyZXR1cm4gdXBkYXRlOwotfQotCi0vKgotICogQSBrZXJuZWwgdGhyZWFkIGZvciBtc3AzNDAwIGNvbnRyb2wgLS0gd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUKLSAqIGluIHRoZSBpb2N0bCB3aGlsZSBkb2luZyB0aGUgc291bmQgY2FycmllciAmIHN0ZXJlbyBkZXRlY3QKLSAqLwotCi1zdGF0aWMgaW50IG1zcDM0eHhfc2xlZXAoc3RydWN0IG1zcDM0MDBjICptc3AsIGludCB0aW1lb3V0KQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JYWRkX3dhaXRfcXVldWUoJm1zcC0+d3EsICZ3YWl0KTsKLQlpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlpZiAodGltZW91dCA8IDApIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZSgpOwotCQl9IGVsc2UgewotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlCi0JCQkJCQkobXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSk7Ci0JCX0KLQl9Ci0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmbXNwLT53cSwgJndhaXQpOwotCXRyeV90b19mcmVlemUoKTsKLQlyZXR1cm4gbXNwLT5yZXN0YXJ0OwotfQotCi0vKiBzdGVyZW8vbXVsdGlsYW5nIG1vbml0b3JpbmcgKi8KLXN0YXRpYyB2b2lkIHdhdGNoX3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpZiAoYXV0b2RldGVjdF9zdGVyZW8oY2xpZW50KSkgewotCQlpZiAobXNwLT5zdGVyZW8gJiBWNEwyX1RVTkVSX01PREVfU1RFUkVPKQotCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7Ci0JCWVsc2UgaWYgKG1zcC0+c3RlcmVvICYgVklERU9fU09VTkRfTEFORzEpCi0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTEFORzEpOwotCQllbHNlCi0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7Ci0JfQotCi0JaWYgKG9uY2UpCi0JCW1zcC0+d2F0Y2hfc3RlcmVvID0gMDsKLX0KLQotCi1zdGF0aWMgaW50IG1zcDM0MDBjX3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhOwotCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IENBUlJJRVJfREVURUNUICpjZDsKLQlpbnQgY291bnQsIG1heDEsbWF4Mix2YWwxLHZhbDIsIHZhbCx0aGlzOwotCi0KLQltc3AzNDAwX2luZm8oIm1zcDM0MDAgZGFlbW9uIHN0YXJ0ZWRcbiIpOwotCWZvciAoOzspIHsKLQkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNDAwIHRocmVhZDogc2xlZXBcbiIpOwotCQltc3AzNHh4X3NsZWVwKG1zcCwtMSk7Ci0JCW1zcDM0MDBfZGJnX21lZGl1bXZvbCgibXNwMzQwMCB0aHJlYWQ6IHdha2V1cFxuIik7Ci0KLQlyZXN0YXJ0OgotCQltc3AzNDAwX2RiZygidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOwotCQltc3AtPnJlc3RhcnQgPSAwOwotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKFZJREVPX01PREVfUkFESU8gPT0gbXNwLT5ub3JtIHx8Ci0JCSAgICBNU1BfTU9ERV9FWFRFUk4gID09IG1zcC0+bW9kZSkgewotCQkJLyogbm8gY2FycmllciBzY2FuLCBqdXN0IHVubXV0ZSAqLwotCQkJbXNwMzQwMF9pbmZvKCJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7Ci0JCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBtdXRlICovCi0JCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIDAsIDApOwotCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfQU1fREVURUNUIC8qICsxICovICk7Ci0JCXZhbDEgPSB2YWwyID0gMDsKLQkJbWF4MSA9IG1heDIgPSAtMTsKLQkJbXNwLT53YXRjaF9zdGVyZW8gPSAwOwotCi0JCS8qIHNvbWUgdGltZSBmb3IgdGhlIHR1bmVyIHRvIHN5bmMgKi8KLQkJaWYgKG1zcDM0eHhfc2xlZXAobXNwLDIwMCkpCi0JCQlnb3RvIHJlc3RhcnQ7Ci0KLQkJLyogY2FycmllciBkZXRlY3QgcGFzcyAjMSAtLSBtYWluIGNhcnJpZXIgKi8KLQkJY2QgPSBjYXJyaWVyX2RldGVjdF9tYWluOwotCQljb3VudCA9IENBUlJJRVJfQ09VTlQoY2Fycmllcl9kZXRlY3RfbWFpbik7Ci0KLQkJaWYgKGFtc291bmQgJiYgKG1zcC0+bm9ybSA9PSBWSURFT19NT0RFX1NFQ0FNKSkgewotCQkJLyogYXV0b2RldGVjdCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIEFNIC4uLiAqLwotCQkJbWF4MSA9IDM7Ci0JCQljb3VudCA9IDA7Ci0JCQltc3AzNDAwX2RiZygiQU0gc291bmQgb3ZlcnJpZGVcbiIpOwotCQl9Ci0KLQkJZm9yICh0aGlzID0gMDsgdGhpcyA8IGNvdW50OyB0aGlzKyspIHsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBjZFt0aGlzXS5jZG8sY2RbdGhpc10uY2RvKTsKLQkJCWlmIChtc3AzNHh4X3NsZWVwKG1zcCwxMDApKQotCQkJCWdvdG8gcmVzdGFydDsKLQkJCXZhbCA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDFiKTsKLQkJCWlmICh2YWwgPiAzMjc2NykKLQkJCQl2YWwgLT0gNjU1MzY7Ci0JCQlpZiAodmFsMSA8IHZhbCkKLQkJCQl2YWwxID0gdmFsLCBtYXgxID0gdGhpczsKLQkJCW1zcDM0MDBfZGJnKCJjYXJyaWVyMSB2YWw6ICU1ZCAvICVzXG4iLCB2YWwsY2RbdGhpc10ubmFtZSk7Ci0JCX0KLQotCQkvKiBjYXJyaWVyIGRldGVjdCBwYXNzICMyIC0tIHNlY29uZCAoc3RlcmVvKSBjYXJyaWVyICovCi0JCXN3aXRjaCAobWF4MSkgewotCQljYXNlIDE6IC8qIDUuNSAqLwotCQkJY2QgPSBjYXJyaWVyX2RldGVjdF81NTsKLQkJCWNvdW50ID0gQ0FSUklFUl9DT1VOVChjYXJyaWVyX2RldGVjdF81NSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOiAvKiA2LjUgKi8KLQkJCWNkID0gY2Fycmllcl9kZXRlY3RfNjU7Ci0JCQljb3VudCA9IENBUlJJRVJfQ09VTlQoY2Fycmllcl9kZXRlY3RfNjUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMDogLyogNC41ICovCi0JCWNhc2UgMjogLyogNi4wICovCi0JCWRlZmF1bHQ6Ci0JCQljZCA9IE5VTEw7Ci0JCQljb3VudCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChhbXNvdW5kICYmIChtc3AtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkpIHsKLQkJCS8qIGF1dG9kZXRlY3QgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBBTSAuLi4gKi8KLQkJCWNkID0gTlVMTDsKLQkJCWNvdW50ID0gMDsKLQkJCW1heDIgPSAwOwotCQl9Ci0JCWZvciAodGhpcyA9IDA7IHRoaXMgPCBjb3VudDsgdGhpcysrKSB7Ci0JCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgY2RbdGhpc10uY2RvLGNkW3RoaXNdLmNkbyk7Ci0JCQlpZiAobXNwMzR4eF9zbGVlcChtc3AsMTAwKSkKLQkJCQlnb3RvIHJlc3RhcnQ7Ci0JCQl2YWwgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgxYik7Ci0JCQlpZiAodmFsID4gMzI3NjcpCi0JCQkJdmFsIC09IDY1NTM2OwotCQkJaWYgKHZhbDIgPCB2YWwpCi0JCQkJdmFsMiA9IHZhbCwgbWF4MiA9IHRoaXM7Ci0JCQltc3AzNDAwX2RiZygiY2FycmllcjIgdmFsOiAlNWQgLyAlc1xuIiwgdmFsLGNkW3RoaXNdLm5hbWUpOwotCQl9Ci0KLQkJLyogcHJvZ3JhbW0gdGhlIG1zcDM0MDAgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzICovCi0JCW1zcC0+bWFpbiAgID0gY2Fycmllcl9kZXRlY3RfbWFpblttYXgxXS5jZG87Ci0JCXN3aXRjaCAobWF4MSkgewotCQljYXNlIDE6IC8qIDUuNSAqLwotCQkJaWYgKG1heDIgPT0gMCkgewotCQkJCS8qIEIvRyBGTS1zdGVyZW8gKi8KLQkJCQltc3AtPnNlY29uZCA9IGNhcnJpZXJfZGV0ZWN0XzU1W21heDJdLmNkbzsKLQkJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fVEVSUkEpOwotCQkJCW1zcC0+bmljYW1fb24gPSAwOwotCQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKLQkJCQltc3AtPndhdGNoX3N0ZXJlbyA9IDE7Ci0JCQl9IGVsc2UgaWYgKG1heDIgPT0gMSAmJiBIQVZFX05JQ0FNKG1zcCkpIHsKLQkJCQkvKiBCL0cgTklDQU0gKi8KLQkJCQltc3AtPnNlY29uZCA9IGNhcnJpZXJfZGV0ZWN0XzU1W21heDJdLmNkbzsKLQkJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0xKTsKLQkJCQltc3AtPm5pY2FtX29uID0gMTsKLQkJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgbXNwLT5zZWNvbmQsIG1zcC0+bWFpbik7Ci0JCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlnb3RvIG5vX3NlY29uZDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDI6IC8qIDYuMCAqLwotCQkJLyogUEFMIEkgTklDQU0gKi8KLQkJCW1zcC0+c2Vjb25kID0gTVNQX0NBUlJJRVIoNi41NTIpOwotCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMik7Ci0JCQltc3AtPm5pY2FtX29uID0gMTsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBtc3AtPnNlY29uZCwgbXNwLT5tYWluKTsKLQkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDM6IC8qIDYuNSAqLwotCQkJaWYgKG1heDIgPT0gMSB8fCBtYXgyID09IDIpIHsKLQkJCQkvKiBEL0sgRk0tc3RlcmVvICovCi0JCQkJbXNwLT5zZWNvbmQgPSBjYXJyaWVyX2RldGVjdF82NVttYXgyXS5jZG87Ci0JCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKLQkJCQltc3AtPm5pY2FtX29uID0gMDsKLQkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7Ci0JCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwotCQkJfSBlbHNlIGlmIChtYXgyID09IDAgJiYKLQkJCQkgICBtc3AtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkgewotCQkJCS8qIEwgTklDQU0gb3IgQU0tbW9ubyAqLwotCQkJCW1zcC0+c2Vjb25kID0gY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOwotCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9OSUNBTSk7Ci0JCQkJbXNwLT5uaWNhbV9vbiA9IDA7Ci0JCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOwotCQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBtc3AtPnNlY29uZCwgbXNwLT5tYWluKTsKLQkJCQkvKiB2b2x1bWUgcHJlc2NhbGUgZm9yIFNDQVJUIChBTSBtb25vIGlucHV0KSAqLwotCQkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMGQsIDB4MTkwMCk7Ci0JCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwotCQkJfSBlbHNlIGlmIChtYXgyID09IDAgJiYgSEFWRV9OSUNBTShtc3ApKSB7Ci0JCQkJLyogRC9LIE5JQ0FNICovCi0JCQkJbXNwLT5zZWNvbmQgPSBjYXJyaWVyX2RldGVjdF82NVttYXgyXS5jZG87Ci0JCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMSk7Ci0JCQkJbXNwLT5uaWNhbV9vbiA9IDE7Ci0JCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIG1zcC0+c2Vjb25kLCBtc3AtPm1haW4pOwotCQkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJZ290byBub19zZWNvbmQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAwOiAvKiA0LjUgKi8KLQkJZGVmYXVsdDoKLQkJbm9fc2Vjb25kOgotCQkJbXNwLT5zZWNvbmQgPSBjYXJyaWVyX2RldGVjdF9tYWluW21heDFdLmNkbzsKLQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9URVJSQSk7Ci0JCQltc3AtPm5pY2FtX29uID0gMDsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBtc3AtPnNlY29uZCwgbXNwLT5tYWluKTsKLQkJCW1zcC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHVubXV0ZSAqLwotCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwotCQltc3AzNDAwY19yZXN0b3JlX2RmcChjbGllbnQpOwotCi0JCWlmIChkZWJ1ZykKLQkJCW1zcDM0MDBjX3ByaW50X21vZGUoY2xpZW50KTsKLQotCQkvKiBtb25pdG9yIHR2IGF1ZGlvIG1vZGUgKi8KLQkJd2hpbGUgKG1zcC0+d2F0Y2hfc3RlcmVvKSB7Ci0JCQlpZiAobXNwMzR4eF9zbGVlcChtc3AsNTAwMCkpCi0JCQkJZ290byByZXN0YXJ0OwotCQkJd2F0Y2hfc3RlcmVvKGNsaWVudCk7Ci0JCX0KLQl9Ci0JbXNwMzQwMF9kYmcoInRocmVhZDogZXhpdFxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiB0aGlzIG9uZSB1c2VzIHRoZSBhdXRvbWF0aWMgc291bmQgc3RhbmRhcmQgZGV0ZWN0aW9uIG9mIG5ld2VyICAgICAgICAgICAqLwotLyogbXNwMzR4eCBjaGlwIHZlcnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotc3RhdGljIHN0cnVjdCBNT0RFUyB7Ci0JaW50IHJldHZhbDsKLQlpbnQgbWFpbiwgc2Vjb25kOwotCWNoYXIgKm5hbWU7Ci19IG1vZGVsaXN0W10gPSB7Ci0JeyAweDAwMDAsIDAsIDAsICJFUlJPUiIgfSwKLQl7IDB4MDAwMSwgMCwgMCwgImF1dG9kZXRlY3Qgc3RhcnQiIH0sCi0JeyAweDAwMDIsIE1TUF9DQVJSSUVSKDQuNSksIE1TUF9DQVJSSUVSKDQuNzIpLCAiNC41LzQuNzIgIE0gRHVhbCBGTS1TdGVyZW8iIH0sCi0JeyAweDAwMDMsIE1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNzQyMTg3NSksICI1LjUvNS43NCAgQi9HIER1YWwgRk0tU3RlcmVvIiB9LAotCXsgMHgwMDA0LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjI1NzgxMjUpLCAiNi41LzYuMjUgIEQvSzEgRHVhbCBGTS1TdGVyZW8iIH0sCi0JeyAweDAwMDUsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNzQyMTg3NSksICI2LjUvNi43NCAgRC9LMiBEdWFsIEZNLVN0ZXJlbyIgfSwKLQl7IDB4MDAwNiwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwgIjYuNSAgRC9LIEZNLU1vbm8gKEhERVYzKSIgfSwKLQl7IDB4MDAwOCwgTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS44NSksICI1LjUvNS44NSAgQi9HIE5JQ0FNIEZNIiB9LAotCXsgMHgwMDA5LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBMIE5JQ0FNIEFNIiB9LAotCXsgMHgwMDBhLCBNU1BfQ0FSUklFUig2LjApLCBNU1BfQ0FSUklFUig2LjU1KSwgIjYuMC82LjU1ICBJIE5JQ0FNIEZNIiB9LAotCXsgMHgwMDBiLCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBEL0sgTklDQU0gRk0iIH0sCi0JeyAweDAwMGMsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDUuODUpLCAiNi41LzUuODUgIEQvSyBOSUNBTSBGTSAoSERFVjIpIiB9LAotCXsgMHgwMDIwLCBNU1BfQ0FSUklFUig0LjUpLCBNU1BfQ0FSUklFUig0LjUpLCAiNC41ICBNIEJUU0MtU3RlcmVvIiB9LAotCXsgMHgwMDIxLCBNU1BfQ0FSUklFUig0LjUpLCBNU1BfQ0FSUklFUig0LjUpLCAiNC41ICBNIEJUU0MtTW9ubyArIFNBUCIgfSwKLQl7IDB4MDAzMCwgTVNQX0NBUlJJRVIoNC41KSwgTVNQX0NBUlJJRVIoNC41KSwgIjQuNSAgTSBFSUEtSiBKYXBhbiBTdGVyZW8iIH0sCi0JeyAweDAwNDAsIE1TUF9DQVJSSUVSKDEwLjcpLCBNU1BfQ0FSUklFUigxMC43KSwgIjEwLjcgIEZNLVN0ZXJlbyBSYWRpbyIgfSwKLQl7IDB4MDA1MCwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwgIjYuNSAgU0FULU1vbm8iIH0sCi0JeyAweDAwNTEsIE1TUF9DQVJSSUVSKDcuMDIpLCBNU1BfQ0FSUklFUig3LjIwKSwgIjcuMDIvNy4yMCAgU0FULVN0ZXJlbyIgfSwKLQl7IDB4MDA2MCwgTVNQX0NBUlJJRVIoNy4yKSwgTVNQX0NBUlJJRVIoNy4yKSwgIjcuMiAgU0FUIEFEUiIgfSwKLQl7ICAgICAtMSwgMCwgMCwgTlVMTCB9LCAvKiBFT0YgKi8KLX07Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbXNwMzR4eF9zdGFuZGFyZF9tb2RlX25hbWUoaW50IG1vZGUpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgbW9kZWxpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCi0JCWlmIChtb2RlbGlzdFtpXS5yZXR2YWwgPT0gbW9kZSkKLQkJCXJldHVybiBtb2RlbGlzdFtpXS5uYW1lOwotCXJldHVybiAidW5rbm93biI7Ci19Ci0KLXN0YXRpYyBpbnQgbXNwMzR4eF9tb2R1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbm9ybSkKLXsKLQlzd2l0Y2ggKG5vcm0pIHsKLQljYXNlIFZJREVPX01PREVfUEFMOgotCQltc3AzNDAwX2RiZygidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBQQUxcbiIpOwotCi0jaWYgMQotCQkvKiBleHBlcmltZW50YWw6IG5vdCBzdXJlIHRoaXMgd29ya3Mgd2l0aCBhbGwgY2hpcCB2ZXJzaW9ucyAqLwotCQlyZXR1cm4gMHg3MDAzOwotI2Vsc2UKLQkJLyogcHJldmlvdXMgdmFsdWUsIHRyeSB0aGlzIGlmIGl0IGJyZWFrcyAuLi4gKi8KLQkJcmV0dXJuIDB4MTAwMzsKLSNlbmRpZgotCWNhc2UgVklERU9fTU9ERV9OVFNDOiAgLyogQlRTQyAqLwotCQltc3AzNDAwX2RiZygidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBOVFNDXG4iKTsKLQkJcmV0dXJuIDB4MjAwMzsKLQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCW1zcDM0MDBfZGJnKCJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFNFQ0FNXG4iKTsKLQkJcmV0dXJuIDB4MDAwMzsKLQljYXNlIFZJREVPX01PREVfUkFESU86Ci0JCW1zcDM0MDBfZGJnKCJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFJhZGlvXG4iKTsKLQkJcmV0dXJuIDB4MDAwMzsKLQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJbXNwMzQwMF9kYmcoInZpZGVvIG1vZGUgc2VsZWN0ZWQgdG8gQXV0b1xuIik7Ci0JCXJldHVybiAweDIwMDM7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDB4MDAwMzsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbXNwMzR4eF9zdGFuZGFyZChpbnQgbm9ybSkKLXsKLQlzd2l0Y2ggKG5vcm0pIHsKLQljYXNlIFZJREVPX01PREVfUEFMOgotCQlyZXR1cm4gMTsKLQljYXNlIFZJREVPX01PREVfTlRTQzogIC8qIEJUU0MgKi8KLQkJcmV0dXJuIDB4MDAyMDsKLQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCXJldHVybiAxOwotCWNhc2UgVklERU9fTU9ERV9SQURJTzoKLQkJcmV0dXJuIDB4MDA0MDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbXNwMzQxMGRfdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGE7Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgbW9kZSx2YWwsaSxzdGQ7Ci0KLQltc3AzNDAwX2luZm8oIm1zcDM0MTAgZGFlbW9uIHN0YXJ0ZWRcbiIpOwotCi0JZm9yICg7OykgewotCQltc3AzNDAwX2RiZ19tZWRpdW12b2woIm1zcDM0MTAgdGhyZWFkOiBzbGVlcFxuIik7Ci0JCW1zcDM0eHhfc2xlZXAobXNwLC0xKTsKLQkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNDEwIHRocmVhZDogd2FrZXVwXG4iKTsKLQotCXJlc3RhcnQ6Ci0JCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IHJlc3RhcnQgc2NhblxuIik7Ci0JCW1zcC0+cmVzdGFydCA9IDA7Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlicmVhazsKLQotCQlpZiAobXNwLT5tb2RlID09IE1TUF9NT0RFX0VYVEVSTikgewotCQkJLyogbm8gY2FycmllciBzY2FuIG5lZWRlZCwganVzdCB1bm11dGUgKi8KLQkJCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7Ci0JCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHB1dCBpbnRvIHNhbmUgc3RhdGUgKGFuZCBtdXRlKSAqLwotCQltc3AzNDAwY19yZXNldChjbGllbnQpOwotCi0JCS8qIHNvbWUgdGltZSBmb3IgdGhlIHR1bmVyIHRvIHN5bmMgKi8KLQkJaWYgKG1zcDM0eHhfc2xlZXAobXNwLDIwMCkpCi0JCQlnb3RvIHJlc3RhcnQ7Ci0KLQkJLyogc3RhcnQgYXV0b2RldGVjdCAqLwotCQltb2RlID0gbXNwMzR4eF9tb2R1cyhjbGllbnQsIG1zcC0+bm9ybSk7Ci0JCXN0ZCAgPSBtc3AzNHh4X3N0YW5kYXJkKG1zcC0+bm9ybSk7Ci0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgzMCwgbW9kZSk7Ci0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgyMCwgc3RkKTsKLQkJbXNwLT53YXRjaF9zdGVyZW8gPSAwOwotCi0JCWlmIChkZWJ1ZykKLQkJCW1zcDM0MDBfZGJnKCJzZXR0aW5nIG1vZGU6ICVzICgweCUwNHgpXG4iLAotCQkJICAgICAgIG1zcDM0eHhfc3RhbmRhcmRfbW9kZV9uYW1lKHN0ZCkgLHN0ZCk7Ci0KLQkJaWYgKHN0ZCAhPSAxKSB7Ci0JCQkvKiBwcm9ncmFtbWVkIHNvbWUgc3BlY2lmaWMgbW9kZSAqLwotCQkJdmFsID0gc3RkOwotCQl9IGVsc2UgewotCQkJLyogdHJpZ2dlcmVkIGF1dG9kZXRlY3QgKi8KLQkJCWZvciAoOzspIHsKLQkJCQlpZiAobXNwMzR4eF9zbGVlcChtc3AsMTAwKSkKLQkJCQkJZ290byByZXN0YXJ0OwotCi0JCQkJLyogY2hlY2sgcmVzdWx0cyAqLwotCQkJCXZhbCA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDdlKTsKLQkJCQlpZiAodmFsIDwgMHgwN2ZmKQotCQkJCQlicmVhazsKLQkJCQltc3AzNDAwX2RiZygiZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzXG4iKTsKLQkJCX0KLQkJfQotCQlmb3IgKGkgPSAwOyBtb2RlbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKLQkJCWlmIChtb2RlbGlzdFtpXS5yZXR2YWwgPT0gdmFsKQotCQkJCWJyZWFrOwotCQltc3AzNDAwX2RiZygiY3VycmVudCBtb2RlOiAlcyAoMHglMDR4KVxuIiwKLQkJCW1vZGVsaXN0W2ldLm5hbWUgPyBtb2RlbGlzdFtpXS5uYW1lIDogInVua25vd24iLAotCQkJdmFsKTsKLQkJbXNwLT5tYWluICAgPSBtb2RlbGlzdFtpXS5tYWluOwotCQltc3AtPnNlY29uZCA9IG1vZGVsaXN0W2ldLnNlY29uZDsKLQotCQlpZiAoYW1zb3VuZCAmJiAobXNwLT5ub3JtID09IFZJREVPX01PREVfU0VDQU0pICYmICh2YWwgIT0gMHgwMDA5KSkgewotCQkJLyogYXV0b2RldGVjdGlvbiBoYXMgZmFpbGVkLCBsZXQgYmFja3VwICovCi0JCQltc3AzNDAwX2RiZygiYXV0b2RldGVjdGlvbiBmYWlsZWQsIgotCQkJCSIgc3dpdGNoaW5nIHRvIGJhY2t1cCBtb2RlOiAlcyAoMHglMDR4KVxuIiwKLQkJCQltb2RlbGlzdFs4XS5uYW1lID8gbW9kZWxpc3RbOF0ubmFtZSA6ICJ1bmtub3duIix2YWwpOwotCQkJdmFsID0gMHgwMDA5OwotCQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDIwLCB2YWwpOwotCQl9Ci0KLQkJLyogc2V0IHZhcmlvdXMgcHJlc2NhbGVzICovCi0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgwZCwgMHgxOTAwKTsgLyogc2NhcnQgKi8KLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDBlLCAweDI0MDMpOyAvKiBGTSAqLwotCQltc3AzNDAwY193cml0ZShjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MTAsIDB4NWEwMCk7IC8qIG5pY2FtICovCi0KLQkJLyogc2V0IHN0ZXJlbyAqLwotCQlzd2l0Y2ggKHZhbCkgewotCQljYXNlIDB4MDAwODogLyogQi9HIE5JQ0FNICovCi0JCWNhc2UgMHgwMDBhOiAvKiBJIE5JQ0FNICovCi0JCQlpZiAodmFsID09IDB4MDAwOCkKLQkJCQltc3AtPm1vZGUgPSBNU1BfTU9ERV9GTV9OSUNBTTE7Ci0JCQllbHNlCi0JCQkJbXNwLT5tb2RlID0gTVNQX01PREVfRk1fTklDQU0yOwotCQkJLyoganVzdCB0dXJuIG9uIHN0ZXJlbyAqLwotCQkJbXNwLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQkJbXNwLT5uaWNhbV9vbiA9IDE7Ci0JCQltc3AtPndhdGNoX3N0ZXJlbyA9IDE7Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDA5OgotCQkJbXNwLT5tb2RlID0gTVNQX01PREVfQU1fTklDQU07Ci0JCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJbXNwLT5uaWNhbV9vbiA9IDE7Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9NT05PKTsKLQkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDAyMDogLyogQlRTQyAqLwotCQkJLyoganVzdCB0dXJuIG9uIHN0ZXJlbyAqLwotCQkJbXNwLT5tb2RlID0gTVNQX01PREVfQlRTQzsKLQkJCW1zcC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCW1zcC0+bmljYW1fb24gPSAwOwotCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwotCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCxWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDA0MDogLyogRk0gcmFkaW8gKi8KLQkJCW1zcC0+bW9kZSAgID0gTVNQX01PREVfRk1fUkFESU87Ci0JCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCQltc3AtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQkJbXNwLT5uaWNhbV9vbiA9IDA7Ci0JCQltc3AtPndhdGNoX3N0ZXJlbyA9IDA7Ci0JCQkvKiBub3QgbmVlZGVkIGluIHRoZW9yeSBpZiBIQVZFX1JBRElPKCksIGJ1dAotCQkJICAgc2hvcnQgcHJvZ3JhbW1pbmcgZW5hYmxlcyBjYXJyaWVyIG11dGUgKi8KLQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LE1TUF9NT0RFX0ZNX1JBRElPKTsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUigxMC43KSwKLQkJCQkJICAgIE1TUF9DQVJSSUVSKDEwLjcpKTsKLQkJCS8qIHNjYXJ0IHJvdXRpbmcgKi8KLQkJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsU0NBUlRfSU4yLDApOwotCQkJLyogbXNwMzR4eCBkb2VzIHJhZGlvIGRlY29kaW5nICovCi0JCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwOCwgMHgwMDIwKTsKLQkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDA5LCAweDAwMjApOwotCQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MGIsIDB4MDAyMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAweDAwMDM6Ci0JCWNhc2UgMHgwMDA0OgotCQljYXNlIDB4MDAwNToKLQkJCW1zcC0+bW9kZSAgID0gTVNQX01PREVfRk1fVEVSUkE7Ci0JCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJbXNwLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JCQltc3AtPm5pY2FtX29uID0gMDsKLQkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogdW5tdXRlLCByZXN0b3JlIG1pc2MgcmVnaXN0ZXJzICovCi0JCW1zcDM0MDBjX3NldGJhc3MoY2xpZW50LCBtc3AtPmJhc3MpOwotCQltc3AzNDAwY19zZXR0cmVibGUoY2xpZW50LCBtc3AtPnRyZWJsZSk7Ci0JCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7Ci0JCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgxMywgbXNwLT5hY2IpOwotCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHg0MCwgbXNwLT5pMnNfbW9kZSk7Ci0JCW1zcDM0MDBjX3Jlc3RvcmVfZGZwKGNsaWVudCk7Ci0KLQkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlICovCi0JCXdoaWxlIChtc3AtPndhdGNoX3N0ZXJlbykgewotCQkJaWYgKG1zcDM0eHhfc2xlZXAobXNwLDUwMDApKQotCQkJCWdvdG8gcmVzdGFydDsKLQkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOwotCQl9Ci0JfQotCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IGV4aXRcbiIpOwotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogbXNwMzR4eEcgKyAoc2ltcGxlciBuby10aHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIHRoaXMgb25lIHVzZXMgYm90aCBhdXRvbWF0aWMgc3RhbmRhcmQgZGV0ZWN0aW9uIGFuZCBhdXRvbWF0aWMgc291bmQgICAgICovCi0vKiBzZWxlY3Qgd2hpY2ggYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3ZXIgRyB2ZXJzaW9ucyAgICAgICAgICAgICAgICAgICAgICAqLwotLyogc3RydWN0IG1zcDogb25seSBub3JtLCBhY2IgYW5kIHNvdXJjZSBhcmUgcmVhbGx5IHVzZWQgaW4gdGhpcyBtb2RlICAgICAgKi8KLQotc3RhdGljIHZvaWQgbXNwMzR4eGdfc2V0X3NvdXJjZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgc291cmNlKTsKLQotLyogKHJlLSlpbml0aWFsaXplIHRoZSBtc3AzNHh4ZywgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IG5vcm0gaW4gbXNwLT5ub3JtCi0gKiByZXR1cm4gMCBpZiBpdCB3b3JrZWQsIC0xIGlmIGl0IGZhaWxlZAotICovCi1zdGF0aWMgaW50IG1zcDM0eHhnX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgbW9kdXMsc3RkOwotCi0JaWYgKG1zcDM0MDBjX3Jlc2V0KGNsaWVudCkpCi0JCXJldHVybiAtMTsKLQotCS8qIG1ha2Ugc3VyZSB0aGF0IGlucHV0L291dHB1dCBpcyBtdXRlZCAocGFyYW5vaWQgbW9kZSkgKi8KLQlpZiAobXNwMzQwMGNfd3JpdGUoY2xpZW50LAotCQkJICAgSTJDX01TUDM0MDBDX0RGUCwKLQkJCSAgIDB4MTMsIC8qIEFDQiAqLwotCQkJICAgMHgwZjIwIC8qIG11dGUgRFNQIGlucHV0LCBtdXRlIFNDQVJUIDEgKi8pKQotCQlyZXR1cm4gLTE7Ci0KLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHg0MCwgbXNwLT5pMnNfbW9kZSk7Ci0KLQkvKiBzdGVwLWJ5LXN0ZXAgaW5pdGlhbGlzYXRpb24sIGFzIGRlc2NyaWJlZCBpbiB0aGUgbWFudWFsICovCi0JbW9kdXMgPSBtc3AzNHh4X21vZHVzKGNsaWVudCwgbXNwLT5ub3JtKTsKLQlzdGQgICA9IG1zcDM0eHhfc3RhbmRhcmQobXNwLT5ub3JtKTsKLQltb2R1cyAmPSB+MHgwMzsgLyogU1RBVFVTX0NIQU5HRT0wICovCi0JbW9kdXMgfD0gMHgwMTsgIC8qIEFVVE9NQVRJQ19TT1VORF9ERVRFQ1RJT049MSAqLwotCWlmIChtc3AzNDAwY193cml0ZShjbGllbnQsCi0JCQkgICBJMkNfTVNQMzQwMENfREVNLAotCQkJICAgMHgzMC8qTU9EVVMqLywKLQkJCSAgIG1vZHVzKSkKLQkJcmV0dXJuIC0xOwotCWlmIChtc3AzNDAwY193cml0ZShjbGllbnQsCi0JCQkgICBJMkNfTVNQMzQwMENfREVNLAotCQkJICAgMHgyMC8qc3RhbmRhcmQqLywKLQkJCSAgIHN0ZCkpCi0JCXJldHVybiAtMTsKLQotCS8qIHdyaXRlIHRoZSBkZnBzIHRoYXQgbWF5IGhhdmUgYW4gaW5mbHVlbmNlIG9uCi0JICAgc3RhbmRhcmQvYXVkaW8gYXV0b2RldGVjdGlvbiByaWdodCBub3cgKi8KLQltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgbXNwLT5zb3VyY2UpOwotCi0JaWYgKG1zcDM0MDBjX3dyaXRlX2RmcF93aXRoX2RlZmF1bHQoY2xpZW50LCAweDBlLAkvKiBBTS9GTSBQcmVzY2FsZSAqLwotCQkJCQkgICAgMHgzMDAwCi0JCQkJCSAgICAvKiBkZWZhdWx0OiBbMTU6OF0gNzVraHogZGV2aWF0aW9uICovCi0JICAgICkpCi0JCXJldHVybiAtMTsKLQotCWlmIChtc3AzNDAwY193cml0ZV9kZnBfd2l0aF9kZWZhdWx0KGNsaWVudCwgMHgxMCwJLyogTklDQU0gUHJlc2NhbGUgKi8KLQkJCQkJICAgIDB4NWEwMAotCQkJCQkgICAgLyogZGVmYXVsdDogOWRiIGdhaW4gKGFzIHJlY29tbWVuZGVkKSAqLwotCSAgICApKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtc3AzNHh4Z190aHJlYWQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YTsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCB2YWwsIHN0ZCwgaTsKLQotCW1zcDM0MDBfaW5mbygibXNwMzR4eGcgZGFlbW9uIHN0YXJ0ZWRcbiIpOwotCi0JbXNwLT5zb3VyY2UgPSAxOyAvKiBkZWZhdWx0ICovCi0JZm9yICg7OykgewotCQltc3AzNDAwX2RiZ19tZWRpdW12b2woIm1zcDM0eHhnIHRocmVhZDogc2xlZXBcbiIpOwotCQltc3AzNHh4X3NsZWVwKG1zcCwtMSk7Ci0JCW1zcDM0MDBfZGJnX21lZGl1bXZvbCgibXNwMzR4eGcgdGhyZWFkOiB3YWtldXBcbiIpOwotCi0JcmVzdGFydDoKLQkJbXNwMzQwMF9kYmcoInRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKLQkJbXNwLT5yZXN0YXJ0ID0gMDsKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOwotCi0JCS8qIHNldHVwIHRoZSBjaGlwKi8KLQkJbXNwMzR4eGdfcmVzZXQoY2xpZW50KTsKLQkJc3RkID0gc3RhbmRhcmQ7Ci0JCWlmIChzdGQgIT0gMHgwMSkKLQkJCWdvdG8gdW5tdXRlOwotCi0JCS8qIHdhdGNoIGF1dG9kZXRlY3QgKi8KLQkJbXNwMzQwMF9kYmcoInRyaWdnZXJlZCBhdXRvZGV0ZWN0LCB3YWl0aW5nIGZvciByZXN1bHRcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQkJaWYgKG1zcDM0eHhfc2xlZXAobXNwLDEwMCkpCi0JCQkJZ290byByZXN0YXJ0OwotCi0JCQkvKiBjaGVjayByZXN1bHRzICovCi0JCQl2YWwgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHg3ZSk7Ci0JCQlpZiAodmFsIDwgMHgwN2ZmKSB7Ci0JCQkJc3RkID0gdmFsOwotCQkJCWJyZWFrOwotCQkJfQotCQkJbXNwMzQwMF9kYmcoImRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzc1xuIik7Ci0JCX0KLQkJaWYgKDB4MDEgPT0gc3RkKSB7Ci0JCQltc3AzNDAwX2RiZygiZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwIHRyaWVzLiBnaXZpbmcgdXAuXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQl1bm11dGU6Ci0JCW1zcDM0MDBfZGJnKCJjdXJyZW50IG1vZGU6ICVzICgweCUwNHgpXG4iLAotCQkJbXNwMzR4eF9zdGFuZGFyZF9tb2RlX25hbWUoc3RkKSwgc3RkKTsKLQotCQkvKiB1bm11dGU6IGRpc3BhdGNoIHNvdW5kIHRvIHNjYXJ0IG91dHB1dCwgc2V0IHNjYXJ0IHZvbHVtZSAqLwotCQltc3AzNDAwX2RiZygidW5tdXRlXG4iKTsKLQotCQltc3AzNDAwY19zZXRiYXNzKGNsaWVudCwgbXNwLT5iYXNzKTsKLQkJbXNwMzQwMGNfc2V0dHJlYmxlKGNsaWVudCwgbXNwLT50cmVibGUpOwotCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwotCi0JCS8qIHJlc3RvcmUgQUNCICovCi0JCWlmIChtc3AzNDAwY193cml0ZShjbGllbnQsCi0JCQkJICAgSTJDX01TUDM0MDBDX0RGUCwKLQkJCQkgICAweDEzLCAvKiBBQ0IgKi8KLQkJCQkgICBtc3AtPmFjYikpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4NDAsIG1zcC0+aTJzX21vZGUpOwotCX0KLQltc3AzNDAwX2RiZygidGhyZWFkOiBleGl0XG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogc2V0IHRoZSBzYW1lICdzb3VyY2UnIGZvciB0aGUgbG91ZHNwZWFrZXIsIHNjYXJ0IGFuZCBxdWFzaS1wZWFrIGRldGVjdG9yCi0gKiB0aGUgdmFsdWUgZm9yIHNvdXJjZSBpcyB0aGUgc2FtZSBhcyBiaXQgMTU6OCBvZiBERlAgcmVnaXN0ZXJzIDB4MDgsCi0gKiAweDBhIGFuZCAweDBjOiAwPW1vbm8sIDE9c3RlcmVvIG9yIEF8QiwgMj1TQ0FSVCwgMz1zdGVyZW8gb3IgQSwgND1zdGVyZW8gb3IgQgotICoKLSAqIHRoaXMgZnVuY3Rpb24gcmVwbGFjZXMgbXNwMzQwMGNfc2V0c3RlcmVvCi0gKi8KLXN0YXRpYyB2b2lkIG1zcDM0eHhnX3NldF9zb3VyY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHNvdXJjZSkKLXsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JLyogZml4IG1hdHJpeCBtb2RlIHRvIHN0ZXJlbyBhbmQgbGV0IHRoZSBtc3AgY2hvb3NlIHdoYXQKLQkgKiB0byBvdXRwdXQgYWNjb3JkaW5nIHRvICdzb3VyY2UnLCBhcyByZWNvbW1lbmRlZAotCSAqIGZvciBNT05PIChzb3VyY2U9PTApIGRvd25taXhpbmcgc2V0IGJpdFs3OjBdIHRvIDB4MzAKLQkgKi8KLQlpbnQgdmFsdWUgPSAoc291cmNlJjB4MDcpPDw4fChzb3VyY2U9PTAgPyAweDMwOjB4MjApOwotCW1zcDM0MDBfZGJnKCJzZXQgc291cmNlIHRvICVkICgweCV4KVxuIiwgc291cmNlLCB2YWx1ZSk7Ci0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LAotCQkgICAgICAgSTJDX01TUDM0MDBDX0RGUCwKLQkJICAgICAgIDB4MDgsIC8qIExvdWRzcGVha2VyIE91dHB1dCAqLwotCQkgICAgICAgdmFsdWUpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwKLQkJICAgICAgIEkyQ19NU1AzNDAwQ19ERlAsCi0JCSAgICAgICAweDBhLCAvKiBTQ0FSVDEgREEgT3V0cHV0ICovCi0JCSAgICAgICB2YWx1ZSk7Ci0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LAotCQkgICAgICAgSTJDX01TUDM0MDBDX0RGUCwKLQkJICAgICAgIDB4MGMsIC8qIFF1YXNpLXBlYWsgZGV0ZWN0b3IgKi8KLQkJICAgICAgIHZhbHVlKTsKLQkvKgotCSAqIHNldCBpZGVudGlmaWNhdGlvbiB0aHJlc2hvbGQuIFBlcnNvbmFsbHksIEkKLQkgKiBJIHNldCBpdCB0byBhIGhpZ2hlciB2YWx1ZSB0aGF0IHRoZSBkZWZhdWx0Ci0JICogb2YgMHgxOTAgdG8gaWdub3JlIG5vaXN5IHN0ZXJlbyBzaWduYWxzLgotCSAqIHRoaXMgbmVlZHMgdHVuaW5nLiAocmVjb21tZW5kZWQgcmFuZ2UgMHgwMGEwLTB4MDNjMCkKLQkgKiAweDdmMCA9IGZvcmNlZCBtb25vIG1vZGUKLQkgKi8KLQltc3AzNDAwY193cml0ZShjbGllbnQsCi0JCSAgICAgICBJMkNfTVNQMzQwMENfREVNLAotCQkgICAgICAgMHgyMiwgLyogYTIgdGhyZXNob2xkIGZvciBzdGVyZW8vYmlsaW5ndWFsICovCi0JCSAgICAgICBzdGVyZW9fdGhyZXNob2xkKTsKLQltc3AtPnNvdXJjZT1zb3VyY2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zcDM0eHhnX2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaW50IHN0YXR1cyA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LAotCQkJCSAgIEkyQ19NU1AzNDAwQ19ERU0sCi0JCQkJICAgMHgwMjAwIC8qIFNUQVRVUyAqLyk7Ci0JaW50IGlzX2JpbGluZ3VhbCA9IHN0YXR1cyYweDEwMDsKLQlpbnQgaXNfc3RlcmVvID0gc3RhdHVzJjB4NDA7Ci0KLQltc3AtPnJ4c3ViY2hhbnMgPSAwOwotCWlmIChpc19zdGVyZW8pCi0JCW1zcC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JZWxzZQotCQltc3AtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQlpZiAoaXNfYmlsaW5ndWFsKSB7Ci0JCW1zcC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9MQU5HMXxWNEwyX1RVTkVSX1NVQl9MQU5HMjsKLQkJLyogSSdtIHN1cHBvc2VkIHRvIGNoZWNrIHdoZXRoZXIgaXQncyBTQVAgb3Igbm90Ci0JCSAqIGFuZCBzZXQgb25seSBMQU5HMi9TQVAgaW4gdGhpcyBjYXNlLiBZZXQsIHRoZSBNU1AKLQkJICogZG9lcyBhIGxvdCBvZiB3b3JrIHRvIGhpZGUgdGhpcyBhbmQgaGFuZGxlIGV2ZXJ5dGhpbmcKLQkJICogdGhlIHNhbWUgd2F5LiBJIGRvbid0IHdhbnQgdG8gd29yayBhcm91bmQgaXQgc28gdW5sZXNzCi0JCSAqIHRoaXMgaXMgYSBwcm9ibGVtLCBJJ2xsIGhhbmRsZSBTQVAganVzdCBsaWtlIGxhbmcxL2xhbmcyLgotCQkgKi8KLQl9Ci0JbXNwMzQwMF9kYmcoInN0YXR1cz0weCV4LCBzdGVyZW89JWQsIGJpbGluZ3VhbD0lZCAtPiByeHN1YmNoYW5zPSVkXG4iLAotCQlzdGF0dXMsIGlzX3N0ZXJlbywgaXNfYmlsaW5ndWFsLCBtc3AtPnJ4c3ViY2hhbnMpOwotfQotCi1zdGF0aWMgdm9pZCBtc3AzNHh4Z19zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYXVkbW9kZSkKLXsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBzb3VyY2U7Ci0KLQlzd2l0Y2ggKGF1ZG1vZGUpIHsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQlzb3VyY2U9MDsgLyogbW9ubyBvbmx5ICovCi0JCWJyZWFrOwotCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJc291cmNlPTE7IC8qIHN0ZXJlbyBvciBBfEIsIHNlZSBjb21tZW50IGluIG1zcDM0eHhnX2dldF92NGwyX3N0ZXJlbygpICovCi0JCS8qIHByb2JsZW06IHRoYXQgY291bGQgYWxzbyBtZWFuIDIgKHNjYXJ0IGlucHV0KSAqLwotCQlicmVhazsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJc291cmNlPTM7IC8qIHN0ZXJlbyBvciBBICovCi0JCWJyZWFrOwotCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQlzb3VyY2U9NDsgLyogc3RlcmVvIG9yIEIgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXVkbW9kZSA9IDA7Ci0JCXNvdXJjZSAgPSAxOwotCQlicmVhazsKLQl9Ci0JbXNwLT5hdWRtb2RlID0gYXVkbW9kZTsKLQltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgc291cmNlKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IG1zcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpOwotc3RhdGljIGludCBtc3BfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotc3RhdGljIGludCBtc3BfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKLXN0YXRpYyBpbnQgbXNwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLQotc3RhdGljIGludCBtc3Bfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBtc3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwotCi1zdGF0aWMgdm9pZCBtc3Bfd2FrZV90aHJlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmlkICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX01TUDM0MDAsCi0JLmF0dGFjaF9hZGFwdGVyID0gbXNwX3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IG1zcF9kZXRhY2gsCi0JLmNvbW1hbmQgICAgICAgID0gbXNwX2NvbW1hbmQsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgICAgPSAiaTJjIG1zcDM0MDAgZHJpdmVyIiwKLQkJLnN1c3BlbmQgPSBtc3Bfc3VzcGVuZCwKLQkJLnJlc3VtZSAgPSBtc3BfcmVzdW1lLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0KLXsKLQkubmFtZSAgICAgID0gIih1bnNldCkiLAotCS5kcml2ZXIgICAgPSAmZHJpdmVyLAotfTsKLQotc3RhdGljIGludCBtc3BfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQotewotCXN0cnVjdCBtc3AzNDAwYyAqbXNwOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmY2xpZW50X3RlbXBsYXRlOwotCWludCAoKnRocmVhZF9mdW5jKSh2b2lkICpkYXRhKSA9IE5VTEw7Ci0JaW50IGk7Ci0KLQljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7Ci0JY2xpZW50X3RlbXBsYXRlLmFkZHIgPSBhZGRyOwotCi0JaWYgKC0xID09IG1zcDM0MDBjX3Jlc2V0KCZjbGllbnRfdGVtcGxhdGUpKSB7Ci0JCW1zcDM0MDBfZGJnKCJubyBjaGlwIGZvdW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChOVUxMID09IChjbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0JaWYgKE5VTEwgPT0gKG1zcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc3AzNDAwYyksR0ZQX0tFUk5FTCkpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChtc3AsMCxzaXplb2Yoc3RydWN0IG1zcDM0MDBjKSk7Ci0JbXNwLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCW1zcC0+bGVmdCA9IDU4ODgwOwkvKiAwZGIgZ2FpbiAqLwotCW1zcC0+cmlnaHQgPSA1ODg4MDsJLyogMGRiIGdhaW4gKi8KLQltc3AtPmJhc3MgPSAzMjc2ODsKLQltc3AtPnRyZWJsZSA9IDMyNzY4OwotCW1zcC0+aW5wdXQgPSAtMTsKLQltc3AtPm11dGVkID0gMDsKLQltc3AtPmkyc19tb2RlID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgREZQX0NPVU5UOyBpKyspCi0JCW1zcC0+ZGZwX3JlZ3NbaV0gPSAtMTsKLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIG1zcCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbXNwLT53cSk7Ci0KLQlpZiAoLTEgPT0gbXNwMzQwMGNfcmVzZXQoY2xpZW50KSkgewotCQlrZnJlZShtc3ApOwotCQlrZnJlZShjbGllbnQpOwotCQltc3AzNDAwX2RiZygibm8gY2hpcCBmb3VuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQltc3AtPnJldjEgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgxZSk7Ci0JaWYgKC0xICE9IG1zcC0+cmV2MSkKLQkJbXNwLT5yZXYyID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MWYpOwotCWlmICgoLTEgPT0gbXNwLT5yZXYxKSB8fCAoMCA9PSBtc3AtPnJldjEgJiYgMCA9PSBtc3AtPnJldjIpKSB7Ci0JCWtmcmVlKG1zcCk7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCW1zcDM0MDBfZGJnKCJlcnJvciB3aGlsZSByZWFkaW5nIGNoaXAgdmVyc2lvblxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbXNwMzQwMF9kYmcoInJldjE9MHglMDR4LCByZXYyPTB4JTA0eFxuIiwgbXNwLT5yZXYxLCBtc3AtPnJldjIpOwotCi0JbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKLQotCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSksICJNU1AlYzQlMDJkJWMtJWMlZCIsCi0JCSAoKG1zcC0+cmV2MT4+NCkmMHgwZikgKyAnMycsCi0JCSAobXNwLT5yZXYyPj44KSYweGZmLCAobXNwLT5yZXYxJjB4MGYpKydAJywKLQkJICgobXNwLT5yZXYxPj44KSYweGZmKSsnQCcsIG1zcC0+cmV2MiYweDFmKTsKLQotCW1zcC0+b3Btb2RlID0gb3Btb2RlOwotCWlmIChPUE1PREVfQVVUTyA9PSBtc3AtPm9wbW9kZSkgewotCQlpZiAoSEFWRV9TSU1QTEVSKG1zcCkpCi0JCQltc3AtPm9wbW9kZSA9IE9QTU9ERV9TSU1QTEVSOwotCQllbHNlIGlmIChIQVZFX1NJTVBMRShtc3ApKQotCQkJbXNwLT5vcG1vZGUgPSBPUE1PREVfU0lNUExFOwotCQllbHNlCi0JCQltc3AtPm9wbW9kZSA9IE9QTU9ERV9NQU5VQUw7Ci0JfQotCi0JLyogaGVsbG8gd29ybGQgOi0pICovCi0JbXNwMzQwMF9pbmZvKCJjaGlwPSVzIiwgY2xpZW50LT5uYW1lKTsKLQlpZiAoSEFWRV9OSUNBTShtc3ApKQotCQlwcmludGsoIiArbmljYW0iKTsKLQlpZiAoSEFWRV9TSU1QTEUobXNwKSkKLQkJcHJpbnRrKCIgK3NpbXBsZSIpOwotCWlmIChIQVZFX1NJTVBMRVIobXNwKSkKLQkJcHJpbnRrKCIgK3NpbXBsZXIiKTsKLQlpZiAoSEFWRV9SQURJTyhtc3ApKQotCQlwcmludGsoIiArcmFkaW8iKTsKLQotCS8qIHZlcnNpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLQlzd2l0Y2ggKG1zcC0+b3Btb2RlKSB7Ci0JY2FzZSBPUE1PREVfTUFOVUFMOgotCQlwcmludGsoIiBtb2RlPW1hbnVhbCIpOwotCQl0aHJlYWRfZnVuYyA9IG1zcDM0MDBjX3RocmVhZDsKLQkJYnJlYWs7Ci0JY2FzZSBPUE1PREVfU0lNUExFOgotCQlwcmludGsoIiBtb2RlPXNpbXBsZSIpOwotCQl0aHJlYWRfZnVuYyA9IG1zcDM0MTBkX3RocmVhZDsKLQkJYnJlYWs7Ci0JY2FzZSBPUE1PREVfU0lNUExFUjoKLQkJcHJpbnRrKCIgbW9kZT1zaW1wbGVyIik7Ci0JCXRocmVhZF9mdW5jID0gbXNwMzR4eGdfdGhyZWFkOwotCQlicmVhazsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotCi0JLyogc3RhcnR1cCBjb250cm9sIHRocmVhZCBpZiBuZWVkZWQgKi8KLQlpZiAodGhyZWFkX2Z1bmMpIHsKLQkJbXNwLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkX2Z1bmMsIGNsaWVudCwgIm1zcDM0eHgiKTsKLQotCQlpZiAoTlVMTCA9PSBtc3AtPmt0aHJlYWQpCi0JCQltc3AzNDAwX3dhcm4oImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOwotCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQl9Ci0KLQkvKiBkb25lICovCi0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQotCS8qIHVwZGF0ZSBvdXIgb3duIGFycmF5ICovCi0JZm9yIChpID0gMDsgaSA8IE1TUDM0MDBfTUFYOyBpKyspIHsKLQkJaWYgKE5VTEwgPT0gbXNwc1tpXSkgewotCQkJbXNwc1tpXSA9IGNsaWVudDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXNwX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBtc3AzNDAwYyAqbXNwICA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBpOwotCi0JLyogc2h1dGRvd24gY29udHJvbCB0aHJlYWQgKi8KLQlpZiAobXNwLT5rdGhyZWFkKSB7Ci0JCW1zcC0+cmVzdGFydCA9IDE7Ci0JCWt0aHJlYWRfc3RvcChtc3AtPmt0aHJlYWQpOwotCX0KLQltc3AzNDAwY19yZXNldChjbGllbnQpOwotCi0JLyogdXBkYXRlIG91ciBvd24gYXJyYXkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVNQMzQwMF9NQVg7IGkrKykgewotCQlpZiAoY2xpZW50ID09IG1zcHNbaV0pIHsKLQkJCW1zcHNbaV0gPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCi0Ja2ZyZWUobXNwKTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1zcF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBtc3BfYXR0YWNoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbXNwX3dha2VfdGhyZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpZiAoTlVMTCA9PSBtc3AtPmt0aHJlYWQpCi0JCXJldHVybjsKLQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LG1zcC0+bXV0ZWQsMCwwKTsKLQltc3AtPndhdGNoX3N0ZXJlbyA9IDA7Ci0JbXNwLT5yZXN0YXJ0ID0gMTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1zcC0+d3EpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IG1vZGVfdjRsMl90b192NGwxKGludCByeHN1YmNoYW5zKQotewotCWludCBtb2RlID0gMDsKLQotCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQotCQltb2RlIHw9IFZJREVPX1NPVU5EX1NURVJFTzsKLQlpZiAocnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKQotCQltb2RlIHw9IFZJREVPX1NPVU5EX0xBTkcyOwotCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzEpCi0JCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzE7Ci0JaWYgKDAgPT0gbW9kZSkKLQkJbW9kZSB8PSBWSURFT19TT1VORF9NT05POwotCXJldHVybiBtb2RlOwotfQotCi1zdGF0aWMgaW50IG1vZGVfdjRsMV90b192NGwyKGludCBtb2RlKQotewotCWlmIChtb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQotCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQotCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX0xBTkcyOwotCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzEpCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzE7Ci0JcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9NT05POwotfQotCi1zdGF0aWMgdm9pZCBtc3BfYW55X2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXN3aXRjaCAobXNwLT5vcG1vZGUpIHsKLQljYXNlIE9QTU9ERV9NQU5VQUw6Ci0JY2FzZSBPUE1PREVfU0lNUExFOgotCQlhdXRvZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwotCQlicmVhazsKLQljYXNlIE9QTU9ERV9TSU1QTEVSOgotCQltc3AzNHh4Z19kZXRlY3Rfc3RlcmVvKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbXNwX2FueV9zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYXVkbW9kZSkKLXsKLQlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXN3aXRjaCAobXNwLT5vcG1vZGUpIHsKLQljYXNlIE9QTU9ERV9NQU5VQUw6Ci0JY2FzZSBPUE1PREVfU0lNUExFOgotCQltc3AtPndhdGNoX3N0ZXJlbyA9IDA7Ci0JCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIGF1ZG1vZGUpOwotCQlicmVhazsKLQljYXNlIE9QTU9ERV9TSU1QTEVSOgotCQltc3AzNHh4Z19zZXRfYXVkbW9kZShjbGllbnQsIGF1ZG1vZGUpOwotCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGljIGludCBtc3BfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG1zcDM0MDBjICptc3AgID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JX191MTYgICAgICAgICAgICpzYXJnID0gYXJnOwotCWludCBzY2FydCA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBBVURDX1NFVF9JTlBVVDoKLQkJbXNwMzQwMF9kYmcoIkFVRENfU0VUX0lOUFVUKCVkKVxuIiwqc2FyZyk7Ci0KLQkJaWYgKCpzYXJnID09IG1zcC0+aW5wdXQpCi0JCQlicmVhazsKLQkJbXNwLT5pbnB1dCA9ICpzYXJnOwotCQlzd2l0Y2ggKCpzYXJnKSB7Ci0JCWNhc2UgQVVESU9fUkFESU86Ci0JCQkvKiBIYXVwcGF1Z2UgdXNlcyBJTjIgZm9yIHRoZSByYWRpbyAqLwotCQkJbXNwLT5tb2RlICAgPSBNU1BfTU9ERV9GTV9SQURJTzsKLQkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fRVhURVJOXzE6Ci0JCQkvKiBJTjEgaXMgb2Z0ZW4gdXNlZCBmb3IgZXh0ZXJuYWwgaW5wdXQgLi4uICovCi0JCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0VYVEVSTjsKLQkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4xOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fRVhURVJOXzI6Ci0JCQkvKiAuLi4gc29tZXRpbWVzIGl0IGlzIElOMiB0aHJvdWdoIDspICovCi0JCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0VYVEVSTjsKLQkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fVFVORVI6Ci0JCQltc3AtPm1vZGUgICA9IC0xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoKnNhcmcgJiBBVURJT19NVVRFKQotCQkJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsU0NBUlRfTVVURSwwKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzY2FydCkgewotCQkJbXNwLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQkJbXNwLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsc2NhcnQsMCk7Ci0JCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwweDAwMGQsMHgxOTAwKTsKLQkJCWlmIChtc3AtPm9wbW9kZSAhPSBPUE1PREVfU0lNUExFUikKLQkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBtc3AtPmF1ZG1vZGUpOwotCQl9Ci0JCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwotCQlicmVhazsKLQotCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCW1zcDM0MDBfZGJnKCJBVURDX1NFVF9SQURJT1xuIik7Ci0JCW1zcC0+bm9ybSA9IFZJREVPX01PREVfUkFESU87Ci0JCW1zcDM0MDBfZGJnKCJzd2l0Y2hpbmcgdG8gcmFkaW8gbW9kZVxuIik7Ci0JCW1zcC0+d2F0Y2hfc3RlcmVvID0gMDsKLQkJc3dpdGNoIChtc3AtPm9wbW9kZSkgewotCQljYXNlIE9QTU9ERV9NQU5VQUw6Ci0JCQkvKiBzZXQgbXNwMzQwMCB0byBGTSByYWRpbyBtb2RlICovCi0JCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCxNU1BfTU9ERV9GTV9SQURJTyk7Ci0JCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoMTAuNyksCi0JCQkJCSAgICBNU1BfQ0FSUklFUigxMC43KSk7Ci0JCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BNT0RFX1NJTVBMRToKLQkJY2FzZSBPUE1PREVfU0lNUExFUjoKLQkJCS8qIHRoZSB0aHJlYWQgd2lsbCBkbyBmb3IgdXMgKi8KLQkJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JCS8qIHdvcmstaW4tcHJvZ3Jlc3M6ICBob29rIHRvIGNvbnRyb2wgdGhlIERGUCByZWdpc3RlcnMgKi8KLQljYXNlIE1TUF9TRVRfREZQUkVHOgotCXsKLQkJc3RydWN0IG1zcF9kZnByZWcgKnIgPSBhcmc7Ci0JCWludCBpOwotCi0JCWlmIChyLT5yZWcgPCAwIHx8IHItPnJlZyA+PSBERlBfQ09VTlQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihibF9kZnApIC8gc2l6ZW9mKGludCk7IGkrKykKLQkJCWlmIChyLT5yZWcgPT0gYmxfZGZwW2ldKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQltc3AtPmRmcF9yZWdzW3ItPnJlZ10gPSByLT52YWx1ZTsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCByLT5yZWcsIHItPnZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVNQX0dFVF9ERlBSRUc6Ci0JewotCQlzdHJ1Y3QgbXNwX2RmcHJlZyAqciA9IGFyZzsKLQotCQlpZiAoci0+cmVnIDwgMCB8fCByLT5yZWcgPj0gREZQX0NPVU5UKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXItPnZhbHVlID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIHItPnJlZyk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwotCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQotCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KLQljYXNlIFZJRElPQ0dBVURJTzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7Ci0KLQkJbXNwMzQwMF9kYmcoIlZJRElPQ0dBVURJT1xuIik7Ci0JCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19WT0xVTUUgfAotCQkJVklERU9fQVVESU9fQkFTUyB8Ci0JCQlWSURFT19BVURJT19UUkVCTEUgfAotCQkJVklERU9fQVVESU9fTVVUQUJMRTsKLQkJaWYgKG1zcC0+bXV0ZWQpCi0JCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fTVVURTsKLQotCQlpZiAobXNwLT5tdXRlZCkKLQkJCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwotCQl2YS0+dm9sdW1lID0gTUFYKG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7Ci0JCXZhLT5iYWxhbmNlID0gKDMyNzY4ICogTUlOKG1zcC0+bGVmdCwgbXNwLT5yaWdodCkpIC8KLQkJICAgICh2YS0+dm9sdW1lID8gdmEtPnZvbHVtZSA6IDEpOwotCQl2YS0+YmFsYW5jZSA9IChtc3AtPmxlZnQgPCBtc3AtPnJpZ2h0KSA/Ci0JCSAgICAoNjU1MzUgLSB2YS0+YmFsYW5jZSkgOiB2YS0+YmFsYW5jZTsKLQkJaWYgKDAgPT0gdmEtPnZvbHVtZSkKLQkJCXZhLT5iYWxhbmNlID0gMzI3Njg7Ci0JCXZhLT5iYXNzID0gbXNwLT5iYXNzOwotCQl2YS0+dHJlYmxlID0gbXNwLT50cmVibGU7Ci0KLQkJbXNwX2FueV9kZXRlY3Rfc3RlcmVvKGNsaWVudCk7Ci0JCXZhLT5tb2RlID0gbW9kZV92NGwyX3RvX3Y0bDEobXNwLT5yeHN1YmNoYW5zKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DU0FVRElPOgotCXsKLQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2YSA9IGFyZzsKLQotCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPXG4iKTsKLQkJbXNwLT5tdXRlZCA9ICh2YS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKTsKLQkJbXNwLT5sZWZ0ID0gKE1JTig2NTUzNiAtIHZhLT5iYWxhbmNlLCAzMjc2OCkgKgotCQkJICAgICB2YS0+dm9sdW1lKSAvIDMyNzY4OwotCQltc3AtPnJpZ2h0ID0gKE1JTih2YS0+YmFsYW5jZSwgMzI3NjgpICogdmEtPnZvbHVtZSkgLyAzMjc2ODsKLQkJbXNwLT5iYXNzID0gdmEtPmJhc3M7Ci0JCW1zcC0+dHJlYmxlID0gdmEtPnRyZWJsZTsKLQkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIHZhLT52b2x1bWUgdG8gJWRcbiIsCi0JCQl2YS0+dm9sdW1lKTsKLQkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIHZhLT5iYWxhbmNlIHRvICVkXG4iLAotCQkJdmEtPmJhbGFuY2UpOwotCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgdmEtPmZsYWdzIHRvICVkXG4iLAotCQkJdmEtPmZsYWdzKTsKLQkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIG1zcC0+bGVmdCB0byAlZFxuIiwKLQkJCW1zcC0+bGVmdCk7Ci0JCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyBtc3AtPnJpZ2h0IHRvICVkXG4iLAotCQkJbXNwLT5yaWdodCk7Ci0JCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyBtc3AtPmJhc3MgdG8gJWRcbiIsCi0JCQltc3AtPmJhc3MpOwotCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgbXNwLT50cmVibGUgdG8gJWRcbiIsCi0JCQltc3AtPnRyZWJsZSk7Ci0JCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyBtc3AtPm1vZGUgdG8gJWRcbiIsCi0JCQltc3AtPm1vZGUpOwotCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwotCQltc3AzNDAwY19zZXRiYXNzKGNsaWVudCwgbXNwLT5iYXNzKTsKLQkJbXNwMzQwMGNfc2V0dHJlYmxlKGNsaWVudCwgbXNwLT50cmVibGUpOwotCi0JCWlmICh2YS0+bW9kZSAhPSAwICYmIG1zcC0+bm9ybSAhPSBWSURFT19NT0RFX1JBRElPKQotCQkJbXNwX2FueV9zZXRfYXVkbW9kZShjbGllbnQsbW9kZV92NGwxX3RvX3Y0bDIodmEtPm1vZGUpKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NTQ0hBTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jaGFubmVsICp2YyA9IGFyZzsKLQotCQltc3AzNDAwX2RiZygiVklESU9DU0NIQU4gKG5vcm09JWQpXG4iLHZjLT5ub3JtKTsKLQkJbXNwLT5ub3JtID0gdmMtPm5vcm07Ci0JCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ1NGUkVROgotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCXsKLQkJLyogbmV3IGNoYW5uZWwgLS0ga2ljayBhdWRpbyBjYXJyaWVyIHNjYW4gKi8KLQkJbXNwMzQwMF9kYmcoIlZJRElPQ1NGUkVRXG4iKTsKLQkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIG1zcDM0eHggc3BlY2lmaWMgKi8KLQljYXNlIE1TUF9TRVRfTUFUUklYOgotCXsKLQkJc3RydWN0IG1zcF9tYXRyaXggKm1zcG0gPSBhcmc7Ci0KLQkJbXNwMzQwMF9kYmcoIk1TUF9TRVRfTUFUUklYXG4iKTsKLQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCwgbXNwbS0+aW5wdXQsIG1zcG0tPm91dHB1dCk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIC0tLSB2NGwyIGlvY3RscyAtLS0gKi8KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQotCQkvKkZJWE1FOiB1c2UgVjRMMiBtb2RlIGZsYWdzIG9uIG1zcDM0MDAgaW5zdGVhZCBvZiBWNEwxKi8KLQkJaWYgKCppZCAmIFY0TDJfU1REX1BBTCkgewotCQkJbXNwLT5ub3JtPVZJREVPX01PREVfUEFMOwotCQl9IGVsc2UgaWYgKCppZCAmIFY0TDJfU1REX1NFQ0FNKSB7Ci0JCQltc3AtPm5vcm09VklERU9fTU9ERV9TRUNBTTsKLQkJfSBlbHNlIHsKLQkJCW1zcC0+bm9ybT1WSURFT19NT0RFX05UU0M7Ci0JCX0KLQotCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJaWYgKGktPmluZGV4ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOwotCQlzd2l0Y2ggKGktPmluZGV4KSB7Ci0JCWNhc2UgQVVESU9fUkFESU86Ci0JCQlzdHJjcHkoaS0+bmFtZSwiUmFkaW8iKTsKLQkJCWJyZWFrOwotCQljYXNlIEFVRElPX0VYVEVSTl8xOgotCQkJc3RyY3B5KGktPm5hbWUsIkV4dGVybiAxIik7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMjoKLQkJCXN0cmNweShpLT5uYW1lLCJFeHRlcm4gMiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fVFVORVI6Ci0JCQlzdHJjcHkoaS0+bmFtZSwiVGVsZXZpc2lvbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0FVRElPOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7Ci0KLQkJbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKLQotCQlzd2l0Y2ggKGEtPmluZGV4KSB7Ci0JCWNhc2UgQVVESU9fUkFESU86Ci0JCQlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKLQkJCWJyZWFrOwotCQljYXNlIEFVRElPX0VYVEVSTl8xOgotCQkJc3RyY3B5KGEtPm5hbWUsIkV4dGVybiAxIik7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMjoKLQkJCXN0cmNweShhLT5uYW1lLCJFeHRlcm4gMiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fVFVORVI6Ci0JCQlzdHJjcHkoYS0+bmFtZSwiVGVsZXZpc2lvbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW1zcF9hbnlfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwotCQlpZiAobXNwLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pIHsKLQkJCWEtPmNhcGFiaWxpdHk9VjRMMl9BVURDQVBfU1RFUkVPOwotCQl9Ci0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqc2FyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKHNhcmctPmluZGV4KSB7Ci0JCWNhc2UgQVVESU9fUkFESU86Ci0JCQkvKiBIYXVwcGF1Z2UgdXNlcyBJTjIgZm9yIHRoZSByYWRpbyAqLwotCQkJbXNwLT5tb2RlICAgPSBNU1BfTU9ERV9GTV9SQURJTzsKLQkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fRVhURVJOXzE6Ci0JCQkvKiBJTjEgaXMgb2Z0ZW4gdXNlZCBmb3IgZXh0ZXJuYWwgaW5wdXQgLi4uICovCi0JCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0VYVEVSTjsKLQkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4xOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fRVhURVJOXzI6Ci0JCQkvKiAuLi4gc29tZXRpbWVzIGl0IGlzIElOMiB0aHJvdWdoIDspICovCi0JCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0VYVEVSTjsKLQkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fVFVORVI6Ci0JCQltc3AtPm1vZGUgICA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNjYXJ0KSB7Ci0JCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCQltc3AtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCxzY2FydCwwKTsKLQkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLDB4MDAwZCwweDE5MDApOwotCQl9Ci0JCWlmIChzYXJnLT5jYXBhYmlsaXR5PT1WNEwyX0FVRENBUF9TVEVSRU8pIHsKLQkJCW1zcC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCX0gZWxzZSB7Ci0JCQltc3AtPmF1ZG1vZGUgJj0gflY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCX0KLQkJbXNwX2FueV9zZXRfYXVkbW9kZShjbGllbnQsIG1zcC0+YXVkbW9kZSk7Ci0JCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQotCQltc3BfYW55X2RldGVjdF9zdGVyZW8oY2xpZW50KTsKLQkJdnQtPmF1ZG1vZGUgICAgPSBtc3AtPmF1ZG1vZGU7Ci0JCXZ0LT5yeHN1YmNoYW5zID0gbXNwLT5yeHN1YmNoYW5zOwotCQl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8Ci0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMXwKLQkJCVY0TDJfVFVORVJfQ0FQX0xBTkcyOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp2dD0oc3RydWN0IHY0bDJfdHVuZXIgKilhcmc7Ci0KLQkJLyogb25seSBzZXQgYXVkbW9kZSAqLwotCQlpZiAodnQtPmF1ZG1vZGUgIT0gLTEgJiYgdnQtPmF1ZG1vZGUgIT0gMCkKLQkJCW1zcF9hbnlfc2V0X2F1ZG1vZGUoY2xpZW50LCB2dC0+YXVkbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0dfQVVET1VUOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKmE9KHN0cnVjdCB2NGwyX2F1ZGlvb3V0ICopYXJnOwotCQlpbnQgaWR4PWEtPmluZGV4OwotCi0JCW1lbXNldChhLDAsc2l6ZW9mKCphKSk7Ci0KLQkJc3dpdGNoIChpZHgpIHsKLQkJY2FzZSAwOgotCQkJc3RyY3B5KGEtPm5hbWUsIlNjYXJ0MSBPdXQiKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlzdHJjcHkoYS0+bmFtZSwiU2NhcnQyIE91dCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXN0cmNweShhLT5uYW1lLCJJMlMgT3V0Iik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCi0JfQotCWNhc2UgVklESU9DX1NfQVVET1VUOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKmE9KHN0cnVjdCB2NGwyX2F1ZGlvb3V0ICopYXJnOwotCi0JCWlmIChhLT5pbmRleDwwfHxhLT5pbmRleD4yKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGEtPmluZGV4PT0yKSB7Ci0JCQlpZiAoYS0+bW9kZSA9PSBWNEwyX0FVRE1PREVfMzJCSVRTKQotCQkJCW1zcC0+aTJzX21vZGU9MTsKLQkJCWVsc2UKLQkJCQltc3AtPmkyc19tb2RlPTA7Ci0JCX0KLQkJbXNwMzQwMF9kYmcoIlNldHRpbmcgYXVkaW8gb3V0IG9uIG1zcDM0eHggdG8gaW5wdXQgJWksIG1vZGUgJWlcbiIsCi0JCQkJCQlhLT5pbmRleCxtc3AtPmkyc19tb2RlKTsKLQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCxtc3AtPmluX3NjYXJ0LGEtPmluZGV4KzEpOwotCi0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6Ci0JCS8qIG5vdGhpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1zcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyY19jbGllbnQsIGRldik7Ci0KLQltc3AzNDAwX2RiZygibXNwMzR4eDogc3VzcGVuZFxuIik7Ci0JbXNwMzQwMGNfcmVzZXQoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtc3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOwotCi0JbXNwMzQwMF9kYmcoIm1zcDM0eHg6IHJlc3VtZVxuIik7Ci0JbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1zcDM0MDBfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBtc3AzNDAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KG1zcDM0MDBfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQobXNwMzQwMF9jbGVhbnVwX21vZHVsZSk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuaAppbmRleCAyZDlmZjQwLi44YTA1Y2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuaApAQCAtNiwyMiArNiwyOCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0cnVjdCBtc3BfZGZwcmVnIHsKLSAgICBpbnQgcmVnOwotICAgIGludCB2YWx1ZTsKLX07Ci0KIHN0cnVjdCBtc3BfbWF0cml4IHsKICAgaW50IGlucHV0OwogICBpbnQgb3V0cHV0OwogfTsKIAotI2RlZmluZSBNU1BfU0VUX0RGUFJFRyAgICAgX0lPVygnbScsMTUsc3RydWN0IG1zcF9kZnByZWcpCi0jZGVmaW5lIE1TUF9HRVRfREZQUkVHICAgICBfSU9XKCdtJywxNixzdHJ1Y3QgbXNwX2RmcHJlZykKLQogLyogaW9jdGwgZm9yIE1TUF9TRVRfTUFUUklYIHdpbGwgaGF2ZSB0byBiZSByZWdpc3RlcmVkICovCiAjZGVmaW5lIE1TUF9TRVRfTUFUUklYICAgICBfSU9XKCdtJywxNyxzdHJ1Y3QgbXNwX21hdHJpeCkKIAorLyogVGhpcyBtYWNybyBpcyBhbGxvd2VkIGZvciAqY29uc3RhbnRzKiBvbmx5LCBnY2MgbXVzdCBjYWxjdWxhdGUgaXQKKyAgIGF0IGNvbXBpbGUgdGltZS4gIFJlbWVtYmVyIC0tIG5vIGZsb2F0cyBpbiBrZXJuZWwgbW9kZSAqLworI2RlZmluZSBNU1BfQ0FSUklFUihmcmVxKSAoKGludCkoKGZsb2F0KShmcmVxIC8gMTguNDMyKSAqICgxIDw8IDI0KSkpCisKKyNkZWZpbmUgTVNQX01PREVfQU1fREVURUNUICAgMAorI2RlZmluZSBNU1BfTU9ERV9GTV9SQURJTyAgICAyCisjZGVmaW5lIE1TUF9NT0RFX0ZNX1RFUlJBICAgIDMKKyNkZWZpbmUgTVNQX01PREVfRk1fU0FUICAgICAgNAorI2RlZmluZSBNU1BfTU9ERV9GTV9OSUNBTTEgICA1CisjZGVmaW5lIE1TUF9NT0RFX0ZNX05JQ0FNMiAgIDYKKyNkZWZpbmUgTVNQX01PREVfQU1fTklDQU0gICAgNworI2RlZmluZSBNU1BfTU9ERV9CVFNDICAgICAgICA4CisjZGVmaW5lIE1TUF9NT0RFX0VYVEVSTiAgICAgIDkKKwogI2RlZmluZSBTQ0FSVF9NQVNLICAgIDAKICNkZWZpbmUgU0NBUlRfSU4xICAgICAxCiAjZGVmaW5lIFNDQVJUX0lOMiAgICAgMgpAQCAtMzYsNCArNDIsODQgQEAKICNkZWZpbmUgU0NBUlQxX09VVCAgICAxCiAjZGVmaW5lIFNDQVJUMl9PVVQgICAgMgogCisjZGVmaW5lIE9QTU9ERV9BVVRPICAgICAgIC0xCisjZGVmaW5lIE9QTU9ERV9NQU5VQUwgICAgICAwCisjZGVmaW5lIE9QTU9ERV9BVVRPREVURUNUICAxICAgLyogdXNlIGF1dG9kZXRlY3QgKD49IG1zcDM0MTAgb25seSkgKi8KKyNkZWZpbmUgT1BNT0RFX0FVVE9TRUxFQ1QgIDIgICAvKiB1c2UgYXV0b2RldGVjdCAmIGF1dG9zZWxlY3QgKD49IG1zcDM0eHhHKSAgICovCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitleHRlcm4gaW50IGRlYnVnOworZXh0ZXJuIGludCBvbmNlOworZXh0ZXJuIGludCBhbXNvdW5kOworZXh0ZXJuIGludCBzdGFuZGFyZDsKK2V4dGVybiBpbnQgZG9sYnk7CitleHRlcm4gaW50IHN0ZXJlb190aHJlc2hvbGQ7CisKK3N0cnVjdCBtc3Bfc3RhdGUgeworCWludCByZXYxLCByZXYyOworCXU4IGhhc19uaWNhbTsKKwl1OCBoYXNfcmFkaW87CisJdTggaGFzX2hlYWRwaG9uZXM7CisJdTggaGFzX250c2NfanBfZF9rMzsKKwl1OCBoYXNfc2NhcnQ0OworCXU4IGhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQ7CisJdTggaGFzX3NjYXJ0Ml9vdXRfdm9sdW1lOworCXU4IGhhc19pMnNfY29uZjsKKwl1OCBoYXNfc3Vid29vZmVyOworCXU4IGhhc19zb3VuZF9wcm9jZXNzaW5nOworCXU4IGhhc192aXJ0dWFsX2RvbGJ5X3N1cnJvdW5kOworCXU4IGhhc19kb2xieV9wcm9fbG9naWM7CisKKwlpbnQgcmFkaW87CisJaW50IG9wbW9kZTsKKwlpbnQgc3RkOworCWludCBtb2RlOworCXY0bDJfc3RkX2lkIHY0bDJfc3RkOworCWludCBuaWNhbV9vbjsKKwlpbnQgYWNiOworCWludCBpbl9zY2FydDsKKwlpbnQgaTJzX21vZGU7CisJaW50IG1haW4sIHNlY29uZDsJLyogc291bmQgY2FycmllciAqLworCWludCBpbnB1dDsKKwlpbnQgc291cmNlOyAgICAgICAgICAgICAvKiBzZWUgbXNwMzR4eGdfc2V0X3NvdXJjZSAqLworCisJLyogdjRsMiAqLworCWludCBhdWRtb2RlOworCWludCByeHN1YmNoYW5zOworCisJaW50IHZvbHVtZSwgbXV0ZWQ7CisJaW50IGJhbGFuY2UsIGxvdWRuZXNzOworCWludCBiYXNzLCB0cmVibGU7CisKKwkvKiB0aHJlYWQgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAqa3RocmVhZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3cTsKKwlpbnQgICAgICAgICAgICAgICAgICByZXN0YXJ0OjE7CisJaW50ICAgICAgICAgICAgICAgICAgd2F0Y2hfc3RlcmVvOjE7Cit9OworCisvKiBtc3AzNDAwLWRyaXZlci5jICovCitpbnQgbXNwX3dyaXRlX2RlbShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkciwgaW50IHZhbCk7CitpbnQgbXNwX3dyaXRlX2RzcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkciwgaW50IHZhbCk7CitpbnQgbXNwX3JlYWRfZGVtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhZGRyKTsKK2ludCBtc3BfcmVhZF9kc3Aoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIpOworaW50IG1zcF9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3ZvaWQgbXNwX3NldF9zY2FydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW4sIGludCBvdXQpOwordm9pZCBtc3Bfc2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Cit2b2lkIG1zcF9zZXRfYXVkaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitpbnQgbXNwX21vZHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworaW50IG1zcF9zbGVlcChzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpOworCisvKiBtc3AzNDAwLWt0aHJlYWRzLmMgKi8KK2NvbnN0IGNoYXIgKm1zcF9zdGFuZGFyZF9zdGRfbmFtZShpbnQgc3RkKTsKK3ZvaWQgbXNwMzQwMGNfc2V0Y2FycmllcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgY2RvMSwgaW50IGNkbzIpOwordm9pZCBtc3AzNDAwY19zZXRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB0eXBlKTsKK3ZvaWQgbXNwMzQwMGNfc2V0c3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBtb2RlKTsKK2ludCBhdXRvZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK2ludCBtc3AzNDAwY190aHJlYWQodm9pZCAqZGF0YSk7CitpbnQgbXNwMzQxMGRfdGhyZWFkKHZvaWQgKmRhdGEpOworaW50IG1zcDM0eHhnX3RocmVhZCh2b2lkICpkYXRhKTsKK3ZvaWQgbXNwMzR4eGdfZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3ZvaWQgbXNwMzR4eGdfc2V0X2F1ZG1vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGF1ZG1vZGUpOworCiAjZW5kaWYgLyogTVNQMzQwMF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210MjB4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYwppbmRleCAyMTgwMDE4Li4yYzE5Yzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210MjB4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMKQEAgLTIwLDYgKzIwLDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaW9fYW50ZW5uYSA9IDA7CiBtb2R1bGVfcGFyYW0ocmFkaW9fYW50ZW5uYSwgICAgIGludCwgMDY0NCk7CiAKKy8qIGZyb20gdHVuZXItY29yZS5jICovCitleHRlcm4gaW50IGRlYnVnOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgTVQyMDMyIDB4MDQKQEAgLTQwMSw3ICs0MDQsNyBAQAogCWRpdjJhPShsbzIvOCktMTsKIAlkaXYyYj1sbzItKGRpdjJhKzEpKjg7CiAKLQlpZiAodHVuZXJfZGVidWcgPiAxKSB7CisJaWYgKGRlYnVnID4gMSkgewogCQl0dW5lcl9kYmcoImxvMSBsbzIgPSAlZCAlZFxuIiwgbG8xLCBsbzIpOwogCQl0dW5lcl9kYmcoIm51bTEgbnVtMiBkaXYxYSBkaXYxYiBkaXYyYSBkaXYyYj0gJXggJXggJXggJXggJXggJXhcbiIsCiAJCQkgIG51bTEsbnVtMixkaXYxYSxkaXYxYixkaXYyYSxkaXYyYik7CkBAIC00MTcsNyArNDIwLDcgQEAKIAlidWZbNV09ZGl2MmE7CiAJaWYobnVtMiE9MCkgYnVmWzVdPWJ1Zls1XXwweDQwOwogCi0JaWYgKHR1bmVyX2RlYnVnID4gMSkgeworCWlmIChkZWJ1ZyA+IDEpIHsKIAkJaW50IGk7CiAJCXR1bmVyX2RiZygiYnVmcyBpczogIik7CiAJCWZvcihpPTA7aTw2O2krKykKQEAgLTQ5NCwxMSArNDk3LDE4IEBACiAJdC0+dHZfZnJlcSAgICA9IE5VTEw7CiAJdC0+cmFkaW9fZnJlcSA9IE5VTEw7CiAJdC0+c3RhbmRieSAgICA9IE5VTEw7CisJaWYgKHQtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgeworCQl0dW5lcl9kYmcoInBpbm5hY2xlIG50c2NcbiIpOworCQl0LT5yYWRpb19pZjIgPSA0MTMwMCAqIDEwMDA7CisJfSBlbHNlIHsKKwkJdHVuZXJfZGJnKCJwaW5uYWNsZSBwYWxcbiIpOworCQl0LT5yYWRpb19pZjIgPSAzMzMwMCAqIDEwMDA7CisJfQogCW5hbWUgPSAidW5rbm93biI7CiAKIAlpMmNfbWFzdGVyX3NlbmQoYyxidWYsMSk7CiAJaTJjX21hc3Rlcl9yZWN2KGMsYnVmLDIxKTsKLQlpZiAodHVuZXJfZGVidWcpIHsKKwlpZiAoZGVidWcpIHsKIAkJaW50IGk7CiAJCXR1bmVyX2RiZygiTVQyMHh4IGhleGR1bXA6Iik7CiAJCWZvcihpPTA7aTwyMTtpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IGQwNDc5M2YuLjkxNjgxYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxNDZfdnYuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAibXhiLmgiCiAjaW5jbHVkZSAidGVhNjQxNWMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCmluZGV4IDI1MDQyMDcuLjllNjQ0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYwpAQCAtODgzLDYgKzg4Myw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgID0gcG1zX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQgICAgICAgICAgID0gcG1zX3JlYWQsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKaW5kZXggYTUxYzdiZC4uNzNiNGYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKQEAgLTcwMiw2ICs3MDIsNyBAQAogCS5vcGVuCQk9IHNhYTUyNDlfb3BlbiwKIAkucmVsZWFzZSAgICAgICAJPSBzYWE1MjQ5X3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgID0gc2FhNTI0OV9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKaW5kZXggZDYwYTc4My4uZTcwYjE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKQEAgLTQyNywxOCArNDI3LDggQEAKIAogc3RhdGljIGludCBzYWE2NTg4X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKIAkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBzYWE2NTg4X2F0dGFjaCk7Ci0jZWxzZQotCXN3aXRjaCAoYWRhcC0+aWQpIHsKLQljYXNlIEkyQ19IV19CX0JUODQ4OgotCWNhc2UgSTJDX0hXX0JfUklWQToKLQljYXNlIEkyQ19IV19TQUE3MTM0OgotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTY1ODhfYXR0YWNoKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Niw3ICs0ODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImkyYyBzYWE2NTg4IGRyaXZlciIsCisJCS5uYW1lID0gInNhYTY1ODgiLAogCX0sCiAJLmlkID0gLTEsCQkvKiBGSVhNRSAqLwogCS5hdHRhY2hfYWRhcHRlciA9IHNhYTY1ODhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDI5ZTI4YzcuLjRhNGJjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC0zOSwzMSArMzksMTggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExNC9TQUE3MTE1IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiwgS2V2aW4gVGhheWVyLCBDaHJpcyBLZW5uZWR5LCBIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOwogCiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBzYWE3MTE1X2RiZyhmbXQsYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZykgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIFwKLQkJCSAgICAgICBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkJCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzYWE3MTE1X2VycihmbXQsIGFyZy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fRVJSICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JICAgICAgIGkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNhYTcxMTVfaW5mbyhmbXQsIGFyZy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQyID4+IDEsIDB4NDAgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogCkBAIC03MywxMiArNjAsMTMgQEAKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJaW50IGlucHV0OwogCWludCBlbmFibGU7CisJaW50IHJhZGlvOwogCWludCBicmlnaHQ7CiAJaW50IGNvbnRyYXN0OwogCWludCBodWU7CiAJaW50IHNhdDsKIAllbnVtIHY0bDJfY2hpcF9pZGVudCBpZGVudDsKLQllbnVtIHY0bDJfYXVkaW9fY2xvY2tfZnJlcSBhdWRjbGtfZnJlcTsKKwl1MzIgYXVkY2xrX2ZyZXE7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDY5LDgwICs0NTcsNiBAQAogCTB4MDAsIDB4MDAKIH07CiAKLS8qID09PT09PT09PT09PT09IFNBQTc3MTUgQVVESU8gc2V0dGluZ3MgPT09PT09PT09PT09PSAqLwotCi0vKiA0OC4wIGtIeiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfNDhfYXVkaW9bXSA9IHsKLQkweDM0LCAweGNlLAotCTB4MzUsIDB4ZmIsCi0JMHgzNiwgMHgzMCwKLQkweDAwLCAweDAwCi19OwotCi0vKiA0NC4xIGtIeiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfNDQxX2F1ZGlvW10gPSB7Ci0JMHgzNCwgMHhmMiwKLQkweDM1LCAweDAwLAotCTB4MzYsIDB4MmQsCi0JMHgwMCwgMHgwMAotfTsKLQotLyogMzIuMCBrSHogKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnXzMyX2F1ZGlvW10gPSB7Ci0JMHgzNCwgMHhkZiwKLQkweDM1LCAweGE3LAotCTB4MzYsIDB4MjAsCi0JMHgwMCwgMHgwMAotfTsKLQotLyogNDguMCBrSHogNjBoeiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfNjBoel80OF9hdWRpb1tdID0gewotCTB4MzAsIDB4Y2QsCi0JMHgzMSwgMHgyMCwKLQkweDMyLCAweDAzLAotCTB4MDAsIDB4MDAKLX07Ci0KLS8qIDQ4LjAga0h6IDUwaHogKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnXzUwaHpfNDhfYXVkaW9bXSA9IHsKLQkweDMwLCAweDAwLAotCTB4MzEsIDB4YzAsCi0JMHgzMiwgMHgwMywKLQkweDAwLCAweDAwCi19OwotCi0vKiA0NC4xIGtIeiA2MGh6ICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE1X2NmZ182MGh6XzQ0MV9hdWRpb1tdID0gewotCTB4MzAsIDB4YmMsCi0JMHgzMSwgMHhkZiwKLQkweDMyLCAweDAyLAotCTB4MDAsIDB4MDAKLX07Ci0KLS8qIDQ0LjEga0h6IDUwaHogKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnXzUwaHpfNDQxX2F1ZGlvW10gPSB7Ci0JMHgzMCwgMHgwMCwKLQkweDMxLCAweDcyLAotCTB4MzIsIDB4MDMsCi0JMHgwMCwgMHgwMAotfTsKLQotLyogMzIuMCBrSHogNjBoeiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfNjBoel8zMl9hdWRpb1tdID0gewotCTB4MzAsIDB4ZGUsCi0JMHgzMSwgMHgxNSwKLQkweDMyLCAweDAyLAotCTB4MDAsIDB4MDAKLX07Ci0KLS8qIDMyLjAga0h6IDUwaHogKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnXzUwaHpfMzJfYXVkaW9bXSA9IHsKLQkweDMwLCAweDAwLAotCTB4MzEsIDB4ODAsCi0JMHgzMiwgMHgwMiwKLQkweDAwLCAweDAwCi19OwotCiBzdGF0aWMgaW50IHNhYTcxMTVfb2RkX3Bhcml0eSh1OCBjKQogewogCWMgXj0gKGMgPj4gNCk7CkBAIC02MjcsNDAgKzU0MSwzOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgc2FhNzExNV9zZXRfYXVkaW9fY2xvY2tfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBlbnVtIHY0bDJfYXVkaW9fY2xvY2tfZnJlcSBmcmVxKQorc3RhdGljIGludCBzYWE3MTE1X3NldF9hdWRpb19jbG9ja19mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiBmcmVxKQogewogCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUzMiBhY3BmOworCXUzMiBhY25pOworCXUzMiBoejsKKwl1NjQgZjsKIAotCXNhYTcxMTVfZGJnKCJzZXQgYXVkaW8gY2xvY2sgZnJlcTogJWRcbiIsIGZyZXEpOwotCXN3aXRjaCAoZnJlcSkgewotCQljYXNlIFY0TDJfQVVEQ0xLXzMyX0tIWjoKLQkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfMzJfYXVkaW8pOwotCQkJaWYgKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApIHsKLQkJCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfMzJfYXVkaW8pOwotCQkJfSBlbHNlIHsKLQkJCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzUwaHpfMzJfYXVkaW8pOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9BVURDTEtfNDQxX0tIWjoKLQkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNDQxX2F1ZGlvKTsKLQkJCWlmIChzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKSB7Ci0JCQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ182MGh6XzQ0MV9hdWRpbyk7Ci0JCQl9IGVsc2UgewotCQkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel80NDFfYXVkaW8pOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9BVURDTEtfNDhfS0haOgotCQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ180OF9hdWRpbyk7Ci0JCQlpZiAoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewotCQkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel80OF9hdWRpbyk7Ci0JCQl9IGVsc2UgewotCQkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel80OF9hdWRpbyk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXNhYTcxMTVfZGJnKCJpbnZhbGlkIGF1ZGlvIHNldHRpbmcgJWRcbiIsIGZyZXEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXY0bF9kYmcoMSwgY2xpZW50LCAic2V0IGF1ZGlvIGNsb2NrIGZyZXE6ICVkXG4iLCBmcmVxKTsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChmcmVxIDwgMzIwMDAgfHwgZnJlcSA+IDQ4MDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGh6IGlzIHRoZSByZWZyZXNoIHJhdGUgdGltZXMgMTAwICovCisJaHogPSAoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyA1OTk0IDogNTAwMDsKKwkvKiBhY3BmID0gKDI1NiAqIGZyZXEpIC8gZmllbGRfZnJlcXVlbmN5ID09ICgyNTYgKiAxMDAgKiBmcmVxKSAvIGh6ICovCisJYWNwZiA9ICgyNTYwMCAqIGZyZXEpIC8gaHo7CisJLyogYWNuaSA9ICgyNTYgKiBmcmVxICogMl4yMykgLyBjcnlzdGFsX2ZyZXF1ZW5jeSA9CisJCSAgKGZyZXEgKiAyXig4KzIzKSkgLyBjcnlzdGFsX2ZyZXF1ZW5jeSA9CisJCSAgKGZyZXEgPDwgMzEpIC8gMzIuMTEgTUh6ICovCisJZiA9IGZyZXE7CisJZiA9IGYgPDwgMzE7CisJZG9fZGl2KGYsIDMyMTEwMDAwKTsKKwlhY25pID0gZjsKKworCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDMwLCBhY3BmICYgMHhmZik7CisJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MzEsIChhY3BmID4+IDgpICYgMHhmZik7CisJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MzIsIChhY3BmID4+IDE2KSAmIDB4MDMpOworCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDM0LCBhY25pICYgMHhmZik7CisJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MzUsIChhY25pID4+IDgpICYgMHhmZik7CisJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MzYsIChhY25pID4+IDE2KSAmIDB4M2YpOwogCXN0YXRlLT5hdWRjbGtfZnJlcSA9IGZyZXE7CiAJcmV0dXJuIDA7CiB9CkBAIC02NzIsNyArNTg0LDcgQEAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQlzYWE3MTE1X2VycigiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bF9lcnIoY2xpZW50LCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTY4Miw3ICs1OTQsNyBAQAogCiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJc2FhNzExNV9lcnIoImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOworCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTY5Miw3ICs2MDQsNyBAQAogCiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQlzYWE3MTE1X2VycigiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bF9lcnIoY2xpZW50LCAiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTcwMiwxMyArNjE0LDE2IEBACiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJc2FhNzExNV9lcnIoImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bF9lcnIoY2xpZW50LCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIAogCQlzdGF0ZS0+aHVlID0gY3RybC0+dmFsdWU7CiAJCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDBkLCBzdGF0ZS0+aHVlKTsKIAkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc0MywxMiArNjU4LDIyIEBACiAJc3RydWN0IHNhYTcxMTVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHRhc2tiID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMHg4MCkgJiAweDEwOwogCisJLyogUHJldmVudCB1bm5lY2Vzc2FyeSBzdGFuZGFyZCBjaGFuZ2VzLiBEdXJpbmcgYSBzdGFuZGFyZAorCSAgIGNoYW5nZSB0aGUgSS1Qb3J0IGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkLiBBbnkgZGV2aWNlcworCSAgIHJlYWRpbmcgZnJvbSB0aGF0IHBvcnQgY2FuIGdldCBjb25mdXNlZC4KKwkgICBOb3RlIHRoYXQgVklESU9DX1NfU1REIGlzIGFsc28gdXNlZCB0byBzd2l0Y2ggZnJvbQorCSAgIHJhZGlvIHRvIFRWIG1vZGUsIHNvIGlmIGEgVklESU9DX1NfU1REIGlzIGJyb2FkY2FzdCB0bworCSAgIGFsbCBJMkMgZGV2aWNlcyB0aGVuIHlvdSBkbyBub3Qgd2FudCB0byBoYXZlIGFuIHVud2FudGVkCisJICAgc2lkZS1lZmZlY3QgaGVyZS4gKi8KKwlpZiAoc3RkID09IHN0YXRlLT5zdGQpCisJCXJldHVybjsKKwogCS8vIFRoaXMgd29ya3MgZm9yIE5UU0MtTSwgU0VDQU0tTCBhbmQgdGhlIDUwSHogUEFMIHZhcmlhbnRzLgogCWlmIChzdGQgJiBWNEwyX1NURF81MjVfNjApIHsKLQkJc2FhNzExNV9kYmcoImRlY29kZXIgc2V0IHN0YW5kYXJkIDYwIEh6XG4iKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJkZWNvZGVyIHNldCBzdGFuZGFyZCA2MCBIelxuIik7CiAJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel92aWRlbyk7CiAJfSBlbHNlIHsKLQkJc2FhNzExNV9kYmcoImRlY29kZXIgc2V0IHN0YW5kYXJkIDUwIEh6XG4iKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJkZWNvZGVyIHNldCBzdGFuZGFyZCA1MCBIelxuIik7CiAJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel92aWRlbyk7CiAJfQogCkBAIC03NzMsMjQgKzY5OCwxNyBAQAogc3RhdGljIHZvaWQgc2FhNzExNV9sb2dfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHNhYTcxMTVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JY2hhciAqYXVkZnJlcSA9ICJ1bmRlZmluZWQiOwogCWludCByZWcxZSwgcmVnMWY7CiAJaW50IHNpZ25hbE9rOwogCWludCB2Y3I7CiAKLQlzd2l0Y2ggKHN0YXRlLT5hdWRjbGtfZnJlcSkgewotCQljYXNlIFY0TDJfQVVEQ0xLXzMyX0tIWjogIGF1ZGZyZXEgPSAiMzIga0h6IjsgYnJlYWs7Ci0JCWNhc2UgVjRMMl9BVURDTEtfNDQxX0tIWjogYXVkZnJlcSA9ICI0NC4xIGtIeiI7IGJyZWFrOwotCQljYXNlIFY0TDJfQVVEQ0xLXzQ4X0tIWjogIGF1ZGZyZXEgPSAiNDgga0h6IjsgYnJlYWs7Ci0JfQotCi0Jc2FhNzExNV9pbmZvKCJBdWRpbyBmcmVxdWVuY3k6ICVzXG4iLCBhdWRmcmVxKTsKKwl2NGxfaW5mbyhjbGllbnQsICJBdWRpbyBmcmVxdWVuY3k6ICVkIEh6XG4iLCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwogCWlmIChjbGllbnQtPm5hbWVbNl0gPT0gJzQnKSB7CiAJCS8qIHN0YXR1cyBmb3IgdGhlIHNhYTcxMTQgKi8KIAkJcmVnMWYgPSBzYWE3MTE1X3JlYWQoY2xpZW50LCAweDFmKTsKIAkJc2lnbmFsT2sgPSAocmVnMWYgJiAweGMxKSA9PSAweDgxOwotCQlzYWE3MTE1X2luZm8oIlZpZGVvIHNpZ25hbDogICAgJXNcbiIsIHNpZ25hbE9rID8gIm9rIiA6ICJiYWQiKTsKLQkJc2FhNzExNV9pbmZvKCJGcmVxdWVuY3k6ICAgICAgICVzXG4iLCAocmVnMWYgJiAweDIwKSA/ICI2MEh6IiA6ICI1MEh6Iik7CisJCXY0bF9pbmZvKGNsaWVudCwgIlZpZGVvIHNpZ25hbDogICAgJXNcbiIsIHNpZ25hbE9rID8gIm9rIiA6ICJiYWQiKTsKKwkJdjRsX2luZm8oY2xpZW50LCAiRnJlcXVlbmN5OiAgICAgICAlc1xuIiwgKHJlZzFmICYgMHgyMCkgPyAiNjAgSHoiIDogIjUwIEh6Iik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgwMSwyMSArNzE5LDI2IEBACiAJc2lnbmFsT2sgPSAocmVnMWYgJiAweGMxKSA9PSAweDgxICYmIChyZWcxZSAmIDB4YzApID09IDB4ODA7CiAJdmNyID0gIShyZWcxZiAmIDB4MTApOwogCi0Jc2FhNzExNV9pbmZvKCJWaWRlbyBzaWduYWw6ICAgICVzXG4iLCBzaWduYWxPayA/ICh2Y3IgPyAiVkNSIiA6ICJicm9hZGNhc3QvRFZEIikgOiAiYmFkIik7Ci0Jc2FhNzExNV9pbmZvKCJGcmVxdWVuY3k6ICAgICAgICVzXG4iLCAocmVnMWYgJiAweDIwKSA/ICI2MEh6IiA6ICI1MEh6Iik7CisJaWYgKHN0YXRlLT5pbnB1dCA+PSA2KSB7CisJCXY0bF9pbmZvKGNsaWVudCwgIklucHV0OiAgICAgICAgICAgUy1WaWRlbyAlZFxuIiwgc3RhdGUtPmlucHV0IC0gNik7CisJfSBlbHNlIHsKKwkJdjRsX2luZm8oY2xpZW50LCAiSW5wdXQ6ICAgICAgICAgICBDb21wb3NpdGUgJWRcbiIsIHN0YXRlLT5pbnB1dCk7CisJfQorCXY0bF9pbmZvKGNsaWVudCwgIlZpZGVvIHNpZ25hbDogICAgJXNcbiIsIHNpZ25hbE9rID8gKHZjciA/ICJWQ1IiIDogImJyb2FkY2FzdC9EVkQiKSA6ICJiYWQiKTsKKwl2NGxfaW5mbyhjbGllbnQsICJGcmVxdWVuY3k6ICAgICAgICVzXG4iLCAocmVnMWYgJiAweDIwKSA/ICI2MCBIeiIgOiAiNTAgSHoiKTsKIAogCXN3aXRjaCAocmVnMWUgJiAweDAzKSB7CiAJCWNhc2UgMToKLQkJCXNhYTcxMTVfaW5mbygiRGV0ZWN0ZWQgZm9ybWF0OiBOVFNDXG4iKTsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIkRldGVjdGVkIGZvcm1hdDogTlRTQ1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJc2FhNzExNV9pbmZvKCJEZXRlY3RlZCBmb3JtYXQ6IFBBTFxuIik7CisJCQl2NGxfaW5mbyhjbGllbnQsICJEZXRlY3RlZCBmb3JtYXQ6IFBBTFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJc2FhNzExNV9pbmZvKCJEZXRlY3RlZCBmb3JtYXQ6IFNFQ0FNXG4iKTsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIkRldGVjdGVkIGZvcm1hdDogU0VDQU1cbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzYWE3MTE1X2luZm8oIkRldGVjdGVkIGZvcm1hdDogQlcvTm8gY29sb3JcbiIpOworCQkJdjRsX2luZm8oY2xpZW50LCAiRGV0ZWN0ZWQgZm9ybWF0OiBCVy9ObyBjb2xvclxuIik7CiAJCQlicmVhazsKIAl9CiB9CkBAIC05NDAsNyArODYzLDcgQEAKIAogCXBpeCA9ICYoZm10LT5mbXQucGl4KTsKIAotCXNhYTcxMTVfZGJnKCJkZWNvZGVyIHNldCBzaXplXG4iKTsKKwl2NGxfZGJnKDEsIGNsaWVudCwgImRlY29kZXIgc2V0IHNpemVcbiIpOwogCiAJLyogRklYTUUgbmVlZCBiZXR0ZXIgYm91bmRzIGNoZWNraW5nIGhlcmUgKi8KIAlpZiAoKHBpeC0+d2lkdGggPCAxKSB8fCAocGl4LT53aWR0aCA+IDE0NDApKQpAQCAtOTY2LDcgKzg4OSw3IEBACiAJCUhQU0MgPSBIUFNDID8gSFBTQyA6IDE7CiAJCUhGU0MgPSAoaW50KSgoMTAyNCAqIDcyMCkgLyAoSFBTQyAqIHBpeC0+d2lkdGgpKTsKIAotCQlzYWE3MTE1X2RiZygiSHBzYzogMHglMDV4LCBIZnNjOiAweCUwNXhcbiIsIEhQU0MsIEhGU0MpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIkhwc2M6IDB4JTA1eCwgSGZzYzogMHglMDV4XG4iLCBIUFNDLCBIRlNDKTsKIAkJLyogRklYTUUgaGFyZGNvZGVzIHRvICJUYXNrIEIiCiAJCSAqIHdyaXRlIEggcHJlc2NhbGVyIGludGVnZXIgKi8KIAkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZDAsICh1OCkgKEhQU0MgJiAweDNmKSk7CkBAIC05ODAsMTAgKzkwMywxMCBAQAogCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHhERCwgKHU4KSAoKEhGU0MgPj4gOSkgJiAweGZmKSk7CiAJfSBlbHNlIHsKIAkJaWYgKGlzXzUwaHopIHsKLQkJCXNhYTcxMTVfZGJnKCJTZXR0aW5nIGZ1bGwgNTBoeiB3aWR0aFxuIik7CisJCQl2NGxfZGJnKDEsIGNsaWVudCwgIlNldHRpbmcgZnVsbCA1MGh6IHdpZHRoXG4iKTsKIAkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel9mdWxscmVzX3gpOwogCQl9IGVsc2UgewotCQkJc2FhNzExNV9kYmcoIlNldHRpbmcgZnVsbCA2MGh6IHdpZHRoXG4iKTsKKwkJCXY0bF9kYmcoMSwgY2xpZW50LCAiU2V0dGluZyBmdWxsIDYwaHogd2lkdGhcbiIpOwogCQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ182MGh6X2Z1bGxyZXNfeCk7CiAJCX0KIAl9CkBAIC05OTIsNyArOTE1LDcgQEAKIAogCWlmIChwaXgtPmhlaWdodCAhPSBWc3JjKSB7CiAJCVZTQ1kgPSAoaW50KSgoMTAyNCAqIFZzcmMpIC8gcGl4LT5oZWlnaHQpOwotCQlzYWE3MTE1X2RiZygiVnNyYzogJWQsIFZzY3k6IDB4JTA1eFxuIiwgVnNyYywgVlNDWSk7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiVnNyYzogJWQsIFZzY3k6IDB4JTA1eFxuIiwgVnNyYywgVlNDWSk7CiAKIAkJLyogQ29ycmVjdCBDb250cmFzdCBhbmQgTHVtaW5hbmNlICovCiAJCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweGQ1LCAodTgpICg2NCAqIDEwMjQgLyBWU0NZKSk7CkBAIC0xMDA2LDEwICs5MjksMTAgQEAKIAkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZTMsICh1OCkgKChWU0NZID4+IDgpICYgMHhmZikpOwogCX0gZWxzZSB7CiAJCWlmIChpc181MGh6KSB7Ci0JCQlzYWE3MTE1X2RiZygiU2V0dGluZyBmdWxsIDUwSHogaGVpZ2h0XG4iKTsKKwkJCXY0bF9kYmcoMSwgY2xpZW50LCAiU2V0dGluZyBmdWxsIDUwSHogaGVpZ2h0XG4iKTsKIAkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel9mdWxscmVzX3kpOwogCQl9IGVsc2UgewotCQkJc2FhNzExNV9kYmcoIlNldHRpbmcgZnVsbCA2MGh6IGhlaWdodFxuIik7CisJCQl2NGxfZGJnKDEsIGNsaWVudCwgIlNldHRpbmcgZnVsbCA2MGh6IGhlaWdodFxuIik7CiAJCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfZnVsbHJlc195KTsKIAkJfQogCX0KQEAgLTEwODksNiArMTAxMiw0OCBAQAogCiAvKiA9PT09PT09PT09PT0gU0FBNzExNSBBVURJTyBzZXR0aW5ncyAoZW5kKSA9PT09PT09PT09PT09ICovCiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgc2FhNzExNV9xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMjU1LAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDI1NSwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDY0LAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSA2NCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0sIHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9IVUUsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiSHVlIiwKKwkJLm1pbmltdW0gICAgICAgPSAtMTI4LAorCQkubWF4aW11bSAgICAgICA9IDEyNywKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCS5mbGFncyAJICAgICAgID0gMCwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIGludCBzYWE3MTE1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwpAQCAtMTEwMywxNiArMTA2OCwxOCBAQAogCQlyZXR1cm4gc2FhNzExNV9nZXRfdjRsZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7CiAKIAljYXNlIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUToKLQkJcmV0dXJuIHNhYTcxMTVfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCAqKGVudW0gdjRsMl9hdWRpb19jbG9ja19mcmVxICopYXJnKTsKKwkJcmV0dXJuIHNhYTcxMTVfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCAqKHUzMiAqKWFyZyk7CiAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOwogCQlpbnQgc3RhdHVzOwogCisJCWlmIChzdGF0ZS0+cmFkaW8pCisJCQlicmVhazsKIAkJc3RhdHVzID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMHgxZik7CiAKLQkJc2FhNzExNV9kYmcoInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwogCQl2dC0+c2lnbmFsID0gKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgPyAweGZmZmYgOiAweDA7CiAJCWJyZWFrOwogCX0KQEAgLTExMjcsMjAgKzEwOTQsMzggQEAKIAljYXNlIFZJRElPQ19TX0NUUkw6CiAJCXJldHVybiBzYWE3MTE1X3NldF92NGxjdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwogCisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2FhNzExNV9xY3RybCk7IGkrKykKKwkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHNhYTcxMTVfcWN0cmxbaV0uaWQpIHsKKwkJCQltZW1jcHkocWMsICZzYWE3MTE1X3FjdHJsW2ldLCBzaXplb2YoKnFjKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWNhc2UgVklESU9DX0dfU1REOgogCQkqKHY0bDJfc3RkX2lkICopYXJnID0gc2FhNzExNV9nZXRfdjRsc3RkKGNsaWVudCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfU19TVEQ6CisJCXN0YXRlLT5yYWRpbyA9IDA7CiAJCXNhYTcxMTVfc2V0X3Y0bHN0ZChjbGllbnQsICoodjRsMl9zdGRfaWQgKilhcmcpOwogCQlicmVhazsKIAorCWNhc2UgQVVEQ19TRVRfUkFESU86CisJCXN0YXRlLT5yYWRpbyA9IDE7CisJCWJyZWFrOworCiAJY2FzZSBWSURJT0NfR19JTlBVVDoKIAkJKihpbnQgKilhcmcgPSBzdGF0ZS0+aW5wdXQ7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJc2FhNzExNV9kYmcoImRlY29kZXIgc2V0IGlucHV0ICVkXG4iLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiZGVjb2RlciBzZXQgaW5wdXQgJWRcbiIsICppYXJnKTsKIAkJLyogaW5wdXRzIGZyb20gMC05IGFyZSBhdmFpbGFibGUgKi8KIAkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDkpIHsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE0OCw3ICsxMTMzLDcgQEAKIAogCQlpZiAoc3RhdGUtPmlucHV0ID09ICppYXJnKQogCQkJYnJlYWs7Ci0JCXNhYTcxMTVfZGJnKCJub3cgc2V0dGluZyAlcyBpbnB1dFxuIiwKKwkJdjRsX2RiZygxLCBjbGllbnQsICJub3cgc2V0dGluZyAlcyBpbnB1dFxuIiwKIAkJCSppYXJnID49IDYgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIik7CiAJCXN0YXRlLT5pbnB1dCA9ICppYXJnOwogCkBAIC0xMTY1LDcgKzExNTAsNyBAQAogCiAJY2FzZSBWSURJT0NfU1RSRUFNT046CiAJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgotCQlzYWE3MTE1X2RiZygiJXMgb3V0cHV0XG4iLAorCQl2NGxfZGJnKDEsIGNsaWVudCwgIiVzIG91dHB1dFxuIiwKIAkJCShjbWQgPT0gVklESU9DX1NUUkVBTU9OKSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKIAogCQlpZiAoc3RhdGUtPmVuYWJsZSAhPSAoY21kID09IFZJRElPQ19TVFJFQU1PTikpIHsKQEAgLTExNzksNyArMTE2NCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCQlzYWE3MTE1X2RiZygiZGVjb2RlciBSRVNFVFxuIik7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiZGVjb2RlciBSRVNFVFxuIik7CiAJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKIAkJYnJlYWs7CiAKQEAgLTEyNzMsMTkgKzEyNTgsMTkgQEAKIAljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMTU7CiAJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJzYWE3MTE1Iik7CiAKLQlzYWE3MTE1X2RiZygiZGV0ZWN0aW5nIHNhYTcxMTUgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwgYWRkcmVzcyA8PCAxKTsKKwl2NGxfZGJnKDEsIGNsaWVudCwgImRldGVjdGluZyBzYWE3MTE1IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsIGFkZHJlc3MgPDwgMSk7CiAKIAlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMCwgNSk7CiAJY2hpcF9pZCA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDApICYgMHgwZjsKIAlpZiAoY2hpcF9pZCAhPSA0ICYmIGNoaXBfaWQgIT0gNSkgewotCQlzYWE3MTE1X2RiZygic2FhNzExNSBub3QgZm91bmRcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgInNhYTcxMTUgbm90IGZvdW5kXG4iKTsKIAkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChjaGlwX2lkID09IDQpIHsKIAkJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJzYWE3MTE0Iik7CiAJfQotCXNhYTcxMTVfaW5mbygic2FhNzExJWQgZm91bmQgQCAweCV4ICglcylcbiIsIGNoaXBfaWQsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CisJdjRsX2luZm8oY2xpZW50LCAic2FhNzExJWQgZm91bmQgQCAweCV4ICglcylcbiIsIGNoaXBfaWQsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CiAKIAlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOwpAQCAtMTI5NywxNCArMTI4MiwxNSBAQAogCXN0YXRlLT5zdGQgPSBWNEwyX1NURF9OVFNDOwogCXN0YXRlLT5pbnB1dCA9IC0xOwogCXN0YXRlLT5lbmFibGUgPSAxOworCXN0YXRlLT5yYWRpbyA9IDA7CiAJc3RhdGUtPmJyaWdodCA9IDEyODsKIAlzdGF0ZS0+Y29udHJhc3QgPSA2NDsKIAlzdGF0ZS0+aHVlID0gMDsKIAlzdGF0ZS0+c2F0ID0gNjQ7CiAJc3RhdGUtPmlkZW50ID0gKGNoaXBfaWQgPT0gNCkgPyBWNEwyX0lERU5UX1NBQTcxMTQgOiBWNEwyX0lERU5UX1NBQTcxMTU7Ci0Jc3RhdGUtPmF1ZGNsa19mcmVxID0gVjRMMl9BVURDTEtfNDhfS0haOworCXN0YXRlLT5hdWRjbGtfZnJlcSA9IDQ4MDAwOwogCi0Jc2FhNzExNV9kYmcoIndyaXRpbmcgaW5pdCB2YWx1ZXNcbiIpOworCXY0bF9kYmcoMSwgY2xpZW50LCAid3JpdGluZyBpbml0IHZhbHVlc1xuIik7CiAKIAkvKiBpbml0IHRvIDYwaHovNDhraHogKi8KIAlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfaW5pdF9hdXRvX2lucHV0KTsKQEAgLTEzMTIsMTMgKzEyOTgsMTIgQEAKIAlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfZnVsbHJlc194KTsKIAlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfZnVsbHJlc195KTsKIAlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfdmlkZW8pOwotCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNDhfYXVkaW8pOwotCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel80OF9hdWRpbyk7CisJc2FhNzExNV9zZXRfYXVkaW9fY2xvY2tfZnJlcShjbGllbnQsIHN0YXRlLT5hdWRjbGtfZnJlcSk7CiAJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ19yZXNldF9zY2FsZXIpOwogCiAJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKIAotCXNhYTcxMTVfZGJnKCJzdGF0dXM6ICgxRSkgMHglMDJ4LCAoMUYpIDB4JTAyeFxuIiwKKwl2NGxfZGJnKDEsIGNsaWVudCwgInN0YXR1czogKDFFKSAweCUwMngsICgxRikgMHglMDJ4XG4iLAogCQlzYWE3MTE1X3JlYWQoY2xpZW50LCAweDFlKSwgc2FhNzExNV9yZWFkKGNsaWVudCwgMHgxZikpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzI2LDExICsxMzExLDcgQEAKIAogc3RhdGljIGludCBzYWE3MTE1X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKLSNlbHNlCi0JaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX0JUODQ4KQotI2VuZGlmCiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMTVfYXR0YWNoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTF4LmMKaW5kZXggODAwODUzNy4uZjM5YTdiZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCkBAIC01NjcsOSArNTY3LDcgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJzYWE3MTF4IiwKIAl9LAotCiAJLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMVgsCi0KIAkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTF4X2F0dGFjaF9hZGFwdGVyLAogCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExeF9kZXRhY2hfY2xpZW50LAogCS5jb21tYW5kID0gc2FhNzExeF9jb21tYW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwppbmRleCBiY2E2ZWQwLi4yMDA5YzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwpAQCAtNjYsMzAgKzY2LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBsZXZlbCAoMC0yKSIpOwogTU9EVUxFX1BBUk1fREVTQyh0ZXN0X2ltYWdlLCAidGVzdF9pbWFnZSAoMC0xKSIpOwogCi0jZGVmaW5lIHNhYTcxMjdfZGJnKGZtdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSAxKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZWJ1ZyAlZC0lMDR4OiAiIGZtdCwgXAotCQkJICAgICAgIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCQkJICAgICAgIGkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBIaWdoIHZvbHVtZSBkZWJ1Zy4gVXNlIHdpdGggY2FyZS4gKi8KLSNkZWZpbmUgc2FhNzEyN19kYmdfaGlnaHZvbChmbXQsIGFyZy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPT0gMikgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIFwKLQkJCSAgICAgICBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkJCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzYWE3MTI3X2VycihmbXQsIGFyZy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fRVJSICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JICAgICAgIGkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNhYTcxMjdfaW5mbyhmbXQsIGFyZy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKIApAQCAtMzM2LDcgKzMxMiw3IEBACiAJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpID09IDApCiAJCQlyZXR1cm4gMDsKIAl9Ci0Jc2FhNzEyN19lcnIoIkkyQyBXcml0ZSBQcm9ibGVtXG4iKTsKKwl2NGxfZXJyKGNsaWVudCwgIkkyQyBXcml0ZSBQcm9ibGVtXG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTM2Miw3ICszMzgsNyBAQAogCWlmIChlbmFibGUgJiYgKGRhdGEtPmZpZWxkICE9IDAgfHwgZGF0YS0+bGluZSAhPSAxNikpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChzdGF0ZS0+dnBzX2VuYWJsZSAhPSBlbmFibGUpIHsKLQkJc2FhNzEyN19kYmcoIlR1cm4gVlBTIFNpZ25hbCAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJUdXJuIFZQUyBTaWduYWwgJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7CiAJCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDU0LCBlbmFibGUgPDwgNyk7CiAJCXN0YXRlLT52cHNfZW5hYmxlID0gZW5hYmxlOwogCX0KQEAgLTM3NCw3ICszNTAsNyBAQAogCXN0YXRlLT52cHNfZGF0YVsyXSA9IGRhdGEtPmRhdGFbMTFdOwogCXN0YXRlLT52cHNfZGF0YVszXSA9IGRhdGEtPmRhdGFbMTJdOwogCXN0YXRlLT52cHNfZGF0YVs0XSA9IGRhdGEtPmRhdGFbMTNdOwotCXNhYTcxMjdfZGJnKCJTZXQgVlBTIGRhdGEgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCXY0bF9kYmcoMSwgY2xpZW50LCAiU2V0IFZQUyBkYXRhICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJc3RhdGUtPnZwc19kYXRhWzBdLCBzdGF0ZS0+dnBzX2RhdGFbMV0sCiAJCXN0YXRlLT52cHNfZGF0YVsyXSwgc3RhdGUtPnZwc19kYXRhWzNdLAogCQlzdGF0ZS0+dnBzX2RhdGFbNF0pOwpAQCAtMzk3LDcgKzM3Myw3IEBACiAJaWYgKGVuYWJsZSAmJiAoZGF0YS0+ZmllbGQgIT0gMCB8fCBkYXRhLT5saW5lICE9IDIxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHN0YXRlLT5jY19lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCXNhYTcxMjdfZGJnKCJUdXJuIENDICVzXG4iLCBlbmFibGUgPyAib24iIDogIm9mZiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIlR1cm4gQ0MgJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7CiAJCXNhYTcxMjdfd3JpdGUoY2xpZW50LCBTQUE3MTI3X1JFR19DTE9TRURfQ0FQVElPTiwKIAkJCQkoc3RhdGUtPnhkc19lbmFibGUgPDwgNykgfCAoZW5hYmxlIDw8IDYpIHwgMHgxMSk7CiAJCXN0YXRlLT5jY19lbmFibGUgPSBlbmFibGU7CkBAIC00MDUsNyArMzgxLDcgQEAKIAlpZiAoIWVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKLQlzYWE3MTI3X2RiZ19oaWdodm9sKCJDQyBkYXRhOiAlMDR4XG4iLCBjYyk7CisJdjRsX2RiZygyLCBjbGllbnQsICJDQyBkYXRhOiAlMDR4XG4iLCBjYyk7CiAJc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0xJTkVfMjFfT0REXzAsIGNjICYgMHhmZik7CiAJc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0xJTkVfMjFfT0REXzEsIGNjID4+IDgpOwogCXN0YXRlLT5jY19kYXRhID0gY2M7CkBAIC00MjMsNyArMzk5LDcgQEAKIAlpZiAoZW5hYmxlICYmIChkYXRhLT5maWVsZCAhPSAxIHx8IGRhdGEtPmxpbmUgIT0gMjEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3RhdGUtPnhkc19lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCXNhYTcxMjdfZGJnKCJUdXJuIFhEUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJUdXJuIFhEUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKIAkJc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0NMT1NFRF9DQVBUSU9OLAogCQkJCShlbmFibGUgPDwgNykgfCAoc3RhdGUtPmNjX2VuYWJsZSA8PCA2KSB8IDB4MTEpOwogCQlzdGF0ZS0+eGRzX2VuYWJsZSA9IGVuYWJsZTsKQEAgLTQzMSw3ICs0MDcsNyBAQAogCWlmICghZW5hYmxlKQogCQlyZXR1cm4gMDsKIAotCXNhYTcxMjdfZGJnX2hpZ2h2b2woIlhEUyBkYXRhOiAlMDR4XG4iLCB4ZHMpOworCXY0bF9kYmcoMiwgY2xpZW50LCAiWERTIGRhdGE6ICUwNHhcbiIsIHhkcyk7CiAJc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0xJTkVfMjFfRVZFTl8wLCB4ZHMgJiAweGZmKTsKIAlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyN19SRUdfTElORV8yMV9FVkVOXzEsIHhkcyA+PiA4KTsKIAlzdGF0ZS0+eGRzX2RhdGEgPSB4ZHM7CkBAIC00NDgsNyArNDI0LDcgQEAKIAlpZiAoZW5hYmxlICYmIChkYXRhLT5maWVsZCAhPSAwIHx8IGRhdGEtPmxpbmUgIT0gMjMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3RhdGUtPndzc19lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCXNhYTcxMjdfZGJnKCJUdXJuIFdTUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJUdXJuIFdTUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKIAkJc2FhNzEyN193cml0ZShjbGllbnQsIDB4MjcsIGVuYWJsZSA8PCA3KTsKIAkJc3RhdGUtPndzc19lbmFibGUgPSBlbmFibGU7CiAJfQpAQCAtNDU3LDcgKzQzMyw3IEBACiAKIAlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHgyNiwgZGF0YS0+ZGF0YVswXSk7CiAJc2FhNzEyN193cml0ZShjbGllbnQsIDB4MjcsIDB4ODAgfCAoZGF0YS0+ZGF0YVsxXSAmIDB4M2YpKTsKLQlzYWE3MTI3X2RiZygiV1NTIG1vZGU6ICVzXG4iLCB3c3Nfc3Ryc1tkYXRhLT5kYXRhWzBdICYgMHhmXSk7CisJdjRsX2RiZygxLCBjbGllbnQsICJXU1MgbW9kZTogJXNcbiIsIHdzc19zdHJzW2RhdGEtPmRhdGFbMF0gJiAweGZdKTsKIAlzdGF0ZS0+d3NzX21vZGUgPSAoZGF0YS0+ZGF0YVsxXSAmIDB4M2YpIDw8IDggfCBkYXRhLT5kYXRhWzBdOwogCXJldHVybiAwOwogfQpAQCAtNDY5LDExICs0NDUsMTEgQEAKIAlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWlmIChlbmFibGUpIHsKLQkJc2FhNzEyN19kYmcoIkVuYWJsZSBWaWRlbyBPdXRwdXRcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIkVuYWJsZSBWaWRlbyBPdXRwdXRcbiIpOwogCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHgyZCwgc3RhdGUtPnJlZ18yZCk7CiAJCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDYxLCBzdGF0ZS0+cmVnXzYxKTsKIAl9IGVsc2UgewotCQlzYWE3MTI3X2RiZygiRGlzYWJsZSBWaWRlbyBPdXRwdXRcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIkRpc2FibGUgVmlkZW8gT3V0cHV0XG4iKTsKIAkJc2FhNzEyN193cml0ZShjbGllbnQsIDB4MmQsIChzdGF0ZS0+cmVnXzJkICYgMHhmMCkpOwogCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHg2MSwgKHN0YXRlLT5yZWdfNjEgfCAweGMwKSk7CiAJfQpAQCAtNDg5LDExICs0NjUsMTEgQEAKIAljb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqaW5pdHRhYjsKIAogCWlmIChzdGQgJiBWNEwyX1NURF81MjVfNjApIHsKLQkJc2FhNzEyN19kYmcoIlNlbGVjdGluZyA2MCBIeiB2aWRlbyBTdGFuZGFyZFxuIik7CisJCXY0bF9kYmcoMSwgY2xpZW50LCAiU2VsZWN0aW5nIDYwIEh6IHZpZGVvIFN0YW5kYXJkXG4iKTsKIAkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNjBoejsKIAkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNjBIWl9EQUNfQ09OVFJPTDsKIAl9IGVsc2UgewotCQlzYWE3MTI3X2RiZygiU2VsZWN0aW5nIDUwIEh6IHZpZGVvIFN0YW5kYXJkXG4iKTsKKwkJdjRsX2RiZygxLCBjbGllbnQsICJTZWxlY3RpbmcgNTAgSHogdmlkZW8gU3RhbmRhcmRcbiIpOwogCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ181MGh6OwogCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN181MEhaX0RBQ19DT05UUk9MOwogCX0KQEAgLTU0NCw3ICs1MjAsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzYWE3MTI3X2RiZygiU2VsZWN0aW5nICVzIG91dHB1dCB0eXBlXG4iLCBvdXRwdXRfc3Ryc1tvdXRwdXRdKTsKKwl2NGxfZGJnKDEsIGNsaWVudCwgIlNlbGVjdGluZyAlcyBvdXRwdXQgdHlwZVxuIiwgb3V0cHV0X3N0cnNbb3V0cHV0XSk7CiAKIAkvKiBDb25maWd1cmUgRW5jb2RlciAqLwogCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDJkLCBzdGF0ZS0+cmVnXzJkKTsKQEAgLTU2MSwxMiArNTM3LDEyIEBACiAKIAlzd2l0Y2ggKGlucHV0KSB7CiAJY2FzZSBTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMOgkvKiBhdmlhICovCi0JCXNhYTcxMjdfZGJnKCJTZWxlY3RpbmcgTm9ybWFsIEVuY29kZXIgSW5wdXRcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIlNlbGVjdGluZyBOb3JtYWwgRW5jb2RlciBJbnB1dFxuIik7CiAJCXN0YXRlLT5yZWdfM2FfY2IgPSAwOwogCQlicmVhazsKIAogCWNhc2UgU0FBNzEyN19JTlBVVF9UWVBFX1RFU1RfSU1BR0U6CS8qIGNvbG9yIGJhciAqLwotCQlzYWE3MTI3X2RiZygiU2VsZWN0aW5nIENvbG9yIEJhciBnZW5lcmF0b3JcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgIlNlbGVjdGluZyBDb2xvciBCYXIgZ2VuZXJhdG9yXG4iKTsKIAkJc3RhdGUtPnJlZ18zYV9jYiA9IDB4ODA7CiAJCWJyZWFrOwogCkBAIC02MzMsMTQgKzYwOSwxNCBAQAogCQlicmVhazsKIAogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCXNhYTcxMjdfaW5mbygiU3RhbmRhcmQ6ICVzXG4iLCAoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAiNjAgSHoiIDogIjUwIEh6Iik7Ci0JCXNhYTcxMjdfaW5mbygiSW5wdXQ6ICAgICVzXG4iLCBzdGF0ZS0+aW5wdXRfdHlwZSA/ICAiY29sb3IgYmFycyIgOiAibm9ybWFsIik7Ci0JCXNhYTcxMjdfaW5mbygiT3V0cHV0OiAgICVzXG4iLCBzdGF0ZS0+dmlkZW9fZW5hYmxlID8KKwkJdjRsX2luZm8oY2xpZW50LCAiU3RhbmRhcmQ6ICVzXG4iLCAoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAiNjAgSHoiIDogIjUwIEh6Iik7CisJCXY0bF9pbmZvKGNsaWVudCwgIklucHV0OiAgICAlc1xuIiwgc3RhdGUtPmlucHV0X3R5cGUgPyAgImNvbG9yIGJhcnMiIDogIm5vcm1hbCIpOworCQl2NGxfaW5mbyhjbGllbnQsICJPdXRwdXQ6ICAgJXNcbiIsIHN0YXRlLT52aWRlb19lbmFibGUgPwogCQkJb3V0cHV0X3N0cnNbc3RhdGUtPm91dHB1dF90eXBlXSA6ICJkaXNhYmxlZCIpOwotCQlzYWE3MTI3X2luZm8oIldTUzogICAgICAlc1xuIiwgc3RhdGUtPndzc19lbmFibGUgPworCQl2NGxfaW5mbyhjbGllbnQsICJXU1M6ICAgICAgJXNcbiIsIHN0YXRlLT53c3NfZW5hYmxlID8KIAkJCXdzc19zdHJzW3N0YXRlLT53c3NfbW9kZV0gOiAiZGlzYWJsZWQiKTsKLQkJc2FhNzEyN19pbmZvKCJWUFM6ICAgICAgJXNcbiIsIHN0YXRlLT52cHNfZW5hYmxlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Ci0JCXNhYTcxMjdfaW5mbygiQ0M6ICAgICAgICVzXG4iLCBzdGF0ZS0+Y2NfZW5hYmxlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJCXY0bF9pbmZvKGNsaWVudCwgIlZQUzogICAgICAlc1xuIiwgc3RhdGUtPnZwc19lbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwkJdjRsX2luZm8oY2xpZW50LCAiQ0M6ICAgICAgICVzXG4iLCBzdGF0ZS0+Y2NfZW5hYmxlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAJCWJyZWFrOwogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwpAQCAtNzIzLDcgKzY5OSw3IEBACiAJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTI3OwogCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAic2FhNzEyNyIpOwogCi0Jc2FhNzEyN19kYmcoImRldGVjdGluZyBzYWE3MTI3IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsIGFkZHJlc3MgPDwgMSk7CisJdjRsX2RiZygxLCBjbGllbnQsICJkZXRlY3Rpbmcgc2FhNzEyNyBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLCBhZGRyZXNzIDw8IDEpOwogCiAJLyogRmlyc3QgdGVzdCByZWdpc3RlciAwOiBCaXRzIDUtNyBhcmUgYSB2ZXJzaW9uIElEIChzaG91bGQgYmUgMCksCiAJICAgYW5kIGJpdCAyIHNob3VsZCBhbHNvIGJlIDAuCkBAIC03MzIsNyArNzA4LDcgQEAKIAkgICAweDFkIGFmdGVyIGEgcmVzZXQgYW5kIG5vdCBleHBlY3RlZCB0byBldmVyIGNoYW5nZS4gKi8KIAlpZiAoKHNhYTcxMjdfcmVhZChjbGllbnQsIDApICYgMHhlNCkgIT0gMCB8fAogCQkJKHNhYTcxMjdfcmVhZChjbGllbnQsIDB4MjkpICYgMHgzZikgIT0gMHgxZCkgewotCQlzYWE3MTI3X2RiZygic2FhNzEyNyBub3QgZm91bmRcbiIpOworCQl2NGxfZGJnKDEsIGNsaWVudCwgInNhYTcxMjcgbm90IGZvdW5kXG4iKTsKIAkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzQ4LDcgKzcyNCw3IEBACiAKIAkvKiBDb25maWd1cmUgRW5jb2RlciAqLwogCi0Jc2FhNzEyN19kYmcoIkNvbmZpZ3VyaW5nIGVuY29kZXJcbiIpOworCXY0bF9kYmcoMSwgY2xpZW50LCAiQ29uZmlndXJpbmcgZW5jb2RlclxuIik7CiAJc2FhNzEyN193cml0ZV9pbml0dGFiKGNsaWVudCwgc2FhNzEyN19pbml0X2NvbmZpZ19jb21tb24pOwogCXNhYTcxMjdfc2V0X3N0ZChjbGllbnQsIFY0TDJfU1REX05UU0MpOwogCXNhYTcxMjdfc2V0X291dHB1dF90eXBlKGNsaWVudCwgU0FBNzEyN19PVVRQVVRfVFlQRV9CT1RIKTsKQEAgLTc2OSwxMiArNzQ1LDEyIEBACiAJcmVhZF9yZXN1bHQgPSBzYWE3MTI3X3JlYWQoY2xpZW50LCBTQUE3MTI5X1JFR19GQURFX0tFWV9DT0wyKTsKIAlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMiwgMHhhYSk7CiAJaWYgKHNhYTcxMjdfcmVhZChjbGllbnQsIFNBQTcxMjlfUkVHX0ZBREVfS0VZX0NPTDIpID09IDB4YWEpIHsKLQkJc2FhNzEyN19pbmZvKCJzYWE3MTI5IGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOworCQl2NGxfaW5mbyhjbGllbnQsICJzYWE3MTI5IGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOwogCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMiwgcmVhZF9yZXN1bHQpOwogCQlzYWE3MTI3X3dyaXRlX2luaXR0YWIoY2xpZW50LCBzYWE3MTI5X2luaXRfY29uZmlnX2V4dHJhKTsKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTI5OwogCX0gZWxzZSB7Ci0JCXNhYTcxMjdfaW5mbygic2FhNzEyNyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKKwkJdjRsX2luZm8oY2xpZW50LCAic2FhNzEyNyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTI3OwogCX0KIApAQCAtNzg3LDExICs3NjMsNyBAQAogCiBzdGF0aWMgaW50IHNhYTcxMjdfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotI2Vsc2UKLQlpZiAoYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfQlQ4NDgpCi0jZW5kaWYKIAkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBzYWE3MTI3X2F0dGFjaCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKaW5kZXggNDYxNWE5OC4uYWQ3M2M0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKQEAgLTksNyArOSw4IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogCkBAIC01MDksNyArNTEwLDYgQEAKIHsKIAlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoOwogCi0JcHJpbnRrKCJzYWE2NzUyaHM6IGNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKIAogCWlmIChOVUxMID09IChoID0ga21hbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTI1LDYgKzUyNSw4IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKCZoLT5jbGllbnQsIGgpOwogCWkyY19hdHRhY2hfY2xpZW50KCZoLT5jbGllbnQpOwogCisJdjRsX2luZm8oJmgtPmNsaWVudCwic2FhNjc1MmhzOiBjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkcjw8MSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTk4LDcgKzYwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgICA9ICJpMmMgc2FhNjc1MmhzIE1QRUcgZW5jb2RlciIsCisJCS5uYW1lICAgPSAic2FhNjc1MmhzIiwKIAl9LAogCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9TQUE2NzUySFMsCiAJLmF0dGFjaF9hZGFwdGVyID0gc2FhNjc1MmhzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCmluZGV4IGFkZTA1ZjcuLmE3YTZhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKQEAgLTIwLDEzICsyMCwxMyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDY3MmZiMjAuLjc3ZTViZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogLyogY29tbWx5IHVzZWQgc3RyaW5ncyAqLwogc3RhdGljIGNoYXIgbmFtZV9tdXRlW10gICAgPSAibXV0ZSI7CkBAIC0yNTU1LDYgKzI1NTYsNjkgQEAKIAkJCS5hbXV4ICAgPSBMSU5FMSwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0NJTkVSR1kyNTBQQ0ldID0geworCQkvKiByZW1vdGUtY29udHJvbCBkb2VzIG5vdCB3b3JrLiBUaGUgc2lnbmFsIGFib3V0IGEKKwkJICAga2V5IHByZXNzIGNvbWVzIGluIHZpYSBncGlvLCBidXQgdGhlIGtleSBjb2RlCisJCSAgIGRvZXNuJ3QuIE5laXRoZXIgZG9lcyBpdCBoYXZlIGFuIGkyYyByZW1vdGUgY29udHJvbAorCQkgICBpbnRlcmZhY2UuICovCisJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IDI1MCBQQ0kgVFYiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHg4MDIwMDAwMCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywgIC8qIE5PVCB0ZXN0ZWQgKi8KKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSAgID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS5ncGlvICAgPSAweDAyMDAwMDAsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9GTFlEVkJfVFJJT10gPSB7CisJCS8qIExpZmVWaWV3IExSMzE5IEZseURWQiBUcmlvICovCisJCS8qIFBldGVyIE1pc3NlbCA8cGV0ZXIubWlzc2VsQG9ubGluZWhvbWUuZGU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlEVkIgVHJpbyIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sJPSAweDAwMjAwMDAwLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAkvKiBBbmFsb2cgYnJvYWRjYXN0L2NhYmxlIFRWICovCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDIwMDAwMCwJLyogR1BJTzIxPUhpZ2ggZm9yIFRWIGlucHV0ICovCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywJLyogUy1WaWRlbyBzaWduYWwgb24gUy1WaWRlbyBpbnB1dCAqLworCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCS8qIENvbXBvc2l0ZSBzaWduYWwgb24gUy1WaWRlbyBpbnB1dCAqLworCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCS8qIENvbXBvc2l0ZSBpbnB1dCAqLworCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDAwMDAwLAkvKiBHUElPMjE9TG93IGZvciBGTSByYWRpbyBhbnRlbm5hICovCisJCX0sCisJfSwKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtMjg5NSw2ICsyOTU5LDEyIEBACiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKIAkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKKwkJLnN1YmRldmljZSAgICA9IDB4MDM1MSwJCS8qIFBDSSB2ZXJzaW9uLCBuZXcgcmV2aXNpb24gKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfVFYsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKIAkJLnN1YmRldmljZSAgICA9IDB4MDM3MCwJCS8qIGNhcmRidXMgdmVyc2lvbiAqLwogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9UViwKIAl9LHsKQEAgLTMwMDIsNiArMzA3MiwxOCBAQAogCQkuc3ViZGV2aWNlICAgID0gMHg2MjMxLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9NU0lfVFZBVEFOWVdIRVJFX1BMVVMsCiAJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTUzYiwKKwkJLnN1YmRldmljZSAgICA9IDB4MTE2MCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQ0lORVJHWTI1MFBDSSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAkvKiBTQUEgNzEzMUUgKi8KKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OCwKKwkJLnN1YmRldmljZSAgICA9IDB4MDMxOSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZRFZCX1RSSU8sCisJfSx7CiAJCS8qIC0tLSBib2FyZHMgd2l0aG91dCBlZXByb20gKyBzdWJzeXN0ZW0gSUQgLS0tICovCiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKQEAgLTMwOTAsNiArMzE3Miw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9HT18wMDdfRk06CiAvKiAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9TQUJSRU5UX1NCVFRWRk06ICAqLyAvKiBub3QgZmluaXNoZWQgeWV0ICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UVl9QVlI6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9HT0xEX1BMVVM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UVl9HT0xEX1BMVVNJSToKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggMjFjYjNkNi4uYWNjYmMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtOTUsNzcgKzk1LDYgQEAKICNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKGNvcmVfZGVidWcpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMvY29yZTogIiBmbXQsIGRldi0+bmFtZSAsICMjIGFyZykKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBkZWJ1ZyBoZWxwIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKnY0bDFfaW9jdGxzW10gPSB7Ci0JIjAiLCAiR0NBUCIsICJHQ0hBTiIsICJTQ0hBTiIsICJHVFVORVIiLCAiU1RVTkVSIiwgIkdQSUNUIiwgIlNQSUNUIiwKLQkiQ0NBUFRVUkUiLCAiR1dJTiIsICJTV0lOIiwgIkdGQlVGIiwgIlNGQlVGIiwgIktFWSIsICJHRlJFUSIsCi0JIlNGUkVRIiwgIkdBVURJTyIsICJTQVVESU8iLCAiU1lOQyIsICJNQ0FQVFVSRSIsICJHTUJVRiIsICJHVU5JVCIsCi0JIkdDQVBUVVJFIiwgIlNDQVBUVVJFIiwgIlNQTEFZTU9ERSIsICJTV1JJVEVNT0RFIiwgIkdQTEFZSU5GTyIsCi0JIlNNSUNST0NPREUiLCAiR1ZCSUZNVCIsICJTVkJJRk1UIiB9OwotI2RlZmluZSBWNEwxX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDFfaW9jdGxzKQotCi1zdGF0aWMgY29uc3QgY2hhciAqdjRsMl9pb2N0bHNbXSA9IHsKLQkiUVVFUllDQVAiLCAiMSIsICJFTlVNX1BJWEZNVCIsICJFTlVNX0ZCVUZGTVQiLCAiR19GTVQiLCAiU19GTVQiLAotCSJHX0NPTVAiLCAiU19DT01QIiwgIlJFUUJVRlMiLCAiUVVFUllCVUYiLCAiR19GQlVGIiwgIlNfRkJVRiIsCi0JIkdfV0lOIiwgIlNfV0lOIiwgIlBSRVZJRVciLCAiUUJVRiIsICIxNiIsICJEUUJVRiIsICJTVFJFQU1PTiIsCi0JIlNUUkVBTU9GRiIsICJHX1BFUkYiLCAiR19QQVJNIiwgIlNfUEFSTSIsICJHX1NURCIsICJTX1NURCIsCi0JIkVOVU1TVEQiLCAiRU5VTUlOUFVUIiwgIkdfQ1RSTCIsICJTX0NUUkwiLCAiR19UVU5FUiIsICJTX1RVTkVSIiwKLQkiR19GUkVRIiwgIlNfRlJFUSIsICJHX0FVRElPIiwgIlNfQVVESU8iLCAiMzUiLCAiUVVFUllDVFJMIiwKLQkiUVVFUllNRU5VIiwgIkdfSU5QVVQiLCAiU19JTlBVVCIsICJFTlVNQ1ZUIiwgIjQxIiwgIjQyIiwgIjQzIiwKLQkiNDQiLCAiNDUiLCAgIkdfT1VUUFVUIiwgIlNfT1VUUFVUIiwgIkVOVU1PVVRQVVQiLCAiR19BVURPVVQiLAotCSJTX0FVRE9VVCIsICJFTlVNRlgiLCAiR19FRkZFQ1QiLCAiU19FRkZFQ1QiLCAiR19NT0RVTEFUT1IiLAotCSJTX01PRFVMQVRPUiIKLX07Ci0jZGVmaW5lIFY0TDJfSU9DVExTIEFSUkFZX1NJWkUodjRsMl9pb2N0bHMpCi0KLXN0YXRpYyBjb25zdCBjaGFyICpvc3NwY21faW9jdGxzW10gPSB7Ci0JIlJFU0VUIiwgIlNZTkMiLCAiU1BFRUQiLCAiU1RFUkVPIiwgIkdFVEJMS1NJWkUiLCAiU0VURk1UIiwKLQkiQ0hBTk5FTFMiLCAiPyIsICJQT1NUIiwgIlNVQkRJVklERSIsICJTRVRGUkFHTUVOVCIsICJHRVRGTVRTIiwKLQkiR0VUT1NQQUNFIiwgIkdFVElTUEFDRSIsICJOT05CTE9DSyIsICJHRVRDQVBTIiwgIkdFVC9TRVRUUklHR0VSIiwKLQkiR0VUSVBUUiIsICJHRVRPUFRSIiwgIk1BUElOQlVGIiwgIk1BUE9VVEJVRiIsICJTRVRTWU5DUk8iLAotCSJTRVREVVBMRVgiLCAiR0VUT0RFTEFZIgotfTsKLSNkZWZpbmUgT1NTUENNX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW9jdGxzKQotCi12b2lkIHNhYTcxMzRfcHJpbnRfaW9jdGwoY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNtZCkKLXsKLQljaGFyICpkaXI7Ci0KLQlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKLQljYXNlIF9JT0NfTk9ORTogICAgICAgICAgICAgIGRpciA9ICItLSI7IGJyZWFrOwotCWNhc2UgX0lPQ19SRUFEOiAgICAgICAgICAgICAgZGlyID0gInItIjsgYnJlYWs7Ci0JY2FzZSBfSU9DX1dSSVRFOiAgICAgICAgICAgICBkaXIgPSAiLXciOyBicmVhazsKLQljYXNlIF9JT0NfUkVBRCB8IF9JT0NfV1JJVEU6IGRpciA9ICJydyI7IGJyZWFrOwotCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgZGlyID0gIj8/IjsgYnJlYWs7Ci0JfQotCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKLQljYXNlICd2JzoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDEsICVzLCBWSURJT0MlcylcbiIsCi0JCSAgICAgICBuYW1lLCBjbWQsIGRpciwgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/Ci0JCSAgICAgICB2NGwxX2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIj8/PyIpOwotCQlicmVhazsKLQljYXNlICdWJzoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDIsICVzLCBWSURJT0NfJXMpXG4iLAotCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIChfSU9DX05SKGNtZCkgPCBWNEwyX0lPQ1RMUykgPwotCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKLQkJYnJlYWs7Ci0JY2FzZSAnUCc6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW9jdGwgMHglMDh4IChvc3MgZHNwLCAlcywgU05EQ1RMX0RTUF8lcylcbiIsCi0JCSAgICAgICBuYW1lLCBjbWQsIGRpciwgKF9JT0NfTlIoY21kKSA8IE9TU1BDTV9JT0NUTFMpID8KLQkJICAgICAgIG9zc3BjbV9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKLQkJYnJlYWs7Ci0JY2FzZSAnTSc6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW9jdGwgMHglMDh4IChvc3MgbWl4ZXIsICVzLCAjJWQpXG4iLAotCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIF9JT0NfTlIoY21kKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW9jdGwgMHglMDh4ICg/Pz8sICVzLCAjJWQpXG4iLAotCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIF9JT0NfTlIoY21kKSk7Ci0JfQotfQotCiB2b2lkIHNhYTcxMzRfdHJhY2tfZ3BpbyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgY2hhciAqbXNnKQogewogCXVuc2lnbmVkIGxvbmcgbW9kZSxzdGF0dXM7CkBAIC0yMTEsNyArMTQwLDcgQEAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKLXN0YXRpYyBpbnQgcGVuZGluZ19yZWdpc3RlcmVkOworc3RhdGljIGludCBwZW5kaW5nX3JlZ2lzdGVyZWQ9MDsKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGVuZGluZ19ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IHBlbmRpbmdfY2FsbCwKIH07CkBAIC02MTAsMTEgKzUzOSwzOCBAQAogCQkgICAgY2FyZF9oYXNfbXBlZyhkZXYpKQogCQkJc2FhNzEzNF9pcnFfdHNfZG9uZShkZXYsc3RhdHVzKTsKIAotCQlpZiAoKHJlcG9ydCAmIChTQUE3MTM0X0lSUV9SRVBPUlRfR1BJTzE2IHwKLQkJCSAgICAgICBTQUE3MTM0X0lSUV9SRVBPUlRfR1BJTzE4KSkgJiYKLQkJICAgIGRldi0+cmVtb3RlKQotCQkJc2FhNzEzNF9pbnB1dF9pcnEoZGV2KTsKKwkJaWYgKHJlcG9ydCAmIFNBQTcxMzRfSVJRX1JFUE9SVF9HUElPMTYpIHsKKwkJCXN3aXRjaCAoZGV2LT5oYXNfcmVtb3RlKSB7CisJCQkJY2FzZSBTQUE3MTM0X1JFTU9URV9HUElPOgorCQkJCQlpZiAgKGRldi0+cmVtb3RlLT5tYXNrX2tleWRvd24gJiAweDEwMDAwKSB7CisJCQkJCQlzYWE3MTM0X2lucHV0X2lycShkZXYpOworCQkJCQl9CisJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBTQUE3MTM0X1JFTU9URV9JMkM6CisJCQkJCWJyZWFrOwkJCS8qIEZJWE1FOiBpbnZva2UgSTJDIGdldF9rZXkoKSAqLworCisJCQkJZGVmYXVsdDoJCQkvKiBHUElPMTYgbm90IHVzZWQgYnkgSVIgcmVtb3RlICovCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHJlcG9ydCAmIFNBQTcxMzRfSVJRX1JFUE9SVF9HUElPMTgpIHsKKwkJCXN3aXRjaCAoZGV2LT5oYXNfcmVtb3RlKSB7CisJCQkJY2FzZSBTQUE3MTM0X1JFTU9URV9HUElPOgorCQkJCQlpZiAoKGRldi0+cmVtb3RlLT5tYXNrX2tleWRvd24gJiAweDQwMDAwKSB8fAorCQkJCQkgICAgKGRldi0+cmVtb3RlLT5tYXNrX2tleXVwICYgMHg0MDAwMCkpIHsKKwkJCQkJCXNhYTcxMzRfaW5wdXRfaXJxKGRldik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFNBQTcxMzRfUkVNT1RFX0kyQzoKKwkJCQkJYnJlYWs7CQkJLyogRklYTUU6IGludm9rZSBJMkMgZ2V0X2tleSgpICovCisKKwkJCQlkZWZhdWx0OgkJCS8qIEdQSU8xOCBub3QgdXNlZCBieSBJUiByZW1vdGUgKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KIAl9CiAKIAlpZiAoMTAgPT0gbG9vcCkgewpAQCAtNjI0LDEzICs1ODAsMTYgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzL2lycTogbG9vcGluZyAtLSAiCiAJCQkgICAgICAgImNsZWFyaW5nIFBFIChwYXJpdHkgZXJyb3IhKSBlbmFibGUgYml0XG4iLGRldi0+bmFtZSk7CiAJCQlzYWFfY2xlYXJsKFNBQTcxMzRfSVJRMixTQUE3MTM0X0lSUTJfSU5URV9QRSk7Ci0JCX0gZWxzZSBpZiAocmVwb3J0ICYgKFNBQTcxMzRfSVJRX1JFUE9SVF9HUElPMTYgfAotCQkJCSAgICAgU0FBNzEzNF9JUlFfUkVQT1JUX0dQSU8xOCkpIHsKLQkJCS8qIGRpc2FibGUgZ3BpbyBJUlFzICovCisJCX0gZWxzZSBpZiAocmVwb3J0ICYgU0FBNzEzNF9JUlFfUkVQT1JUX0dQSU8xNikgeworCQkJLyogZGlzYWJsZSBncGlvMTYgSVJRICovCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcy9pcnE6IGxvb3BpbmcgLS0gIgotCQkJICAgICAgICJjbGVhcmluZyBHUElPIGVuYWJsZSBiaXRzXG4iLGRldi0+bmFtZSk7Ci0JCQlzYWFfY2xlYXJsKFNBQTcxMzRfSVJRMiwgKFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xNiB8Ci0JCQkJCQkgIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOCkpOworCQkJICAgICAgICJjbGVhcmluZyBHUElPMTYgZW5hYmxlIGJpdFxuIixkZXYtPm5hbWUpOworCQkJc2FhX2NsZWFybChTQUE3MTM0X0lSUTIsIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xNik7CisJCX0gZWxzZSBpZiAocmVwb3J0ICYgU0FBNzEzNF9JUlFfUkVQT1JUX0dQSU8xOCkgeworCQkJLyogZGlzYWJsZSBncGlvMTggSVJRcyAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMvaXJxOiBsb29waW5nIC0tICIKKwkJCSAgICAgICAiY2xlYXJpbmcgR1BJTzE4IGVuYWJsZSBiaXRcbiIsZGV2LT5uYW1lKTsKKwkJCXNhYV9jbGVhcmwoU0FBNzEzNF9JUlEyLCBTQUE3MTM0X0lSUTJfSU5URV9HUElPMTgpOwogCQl9IGVsc2UgewogCQkJLyogZGlzYWJsZSBhbGwgaXJxcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMvaXJxOiBsb29waW5nIC0tICIKQEAgLTcxMSwxMCArNjcwLDE0IEBACiAJCVNBQTcxMzRfSVJRMl9JTlRFX1BFICAgICAgfAogCQlTQUE3MTM0X0lSUTJfSU5URV9BUjsKIAotCWlmIChkZXYtPmhhc19yZW1vdGUgPT0gU0FBNzEzNF9SRU1PVEVfR1BJTykKLQkJaXJxMl9tYXNrIHw9IChTQUE3MTM0X0lSUTJfSU5URV9HUElPMTggIHwKLQkJCSAgICAgIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOEEgfAotCQkJICAgICAgU0FBNzEzNF9JUlEyX0lOVEVfR1BJTzE2ICApOworCWlmIChkZXYtPmhhc19yZW1vdGUgPT0gU0FBNzEzNF9SRU1PVEVfR1BJTykgeworCQlpZiAoZGV2LT5yZW1vdGUtPm1hc2tfa2V5ZG93biAmIDB4MTAwMDApCisJCQlpcnEyX21hc2sgfD0gU0FBNzEzNF9JUlEyX0lOVEVfR1BJTzE2OworCQllbHNlIGlmIChkZXYtPnJlbW90ZS0+bWFza19rZXlkb3duICYgMHg0MDAwMCkKKwkJCWlycTJfbWFzayB8PSBTQUE3MTM0X0lSUTJfSU5URV9HUElPMTg7CisJCWVsc2UgaWYgKGRldi0+cmVtb3RlLT5tYXNrX2tleXVwICYgMHg0MDAwMCkKKwkJCWlycTJfbWFzayB8PSBTQUE3MTM0X0lSUTJfSU5URV9HUElPMThBOworCX0KIAogCXNhYV93cml0ZWwoU0FBNzEzNF9JUlExLCAwKTsKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMiwgaXJxMl9tYXNrKTsKQEAgLTExNzMsNyArMTEzNiw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLUVYUE9SVF9TWU1CT0woc2FhNzEzNF9wcmludF9pb2N0bCk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfZGV2bGlzdCk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfYm9hcmRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggZTAxNjQ4MC4uMzk5Zjk5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCiAjaW5jbHVkZSAic2FhNzEzNC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKICNpZmRlZiBIQVZFX01UMzUyCiAjIGluY2x1ZGUgIm10MzUyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggNTc1ZjNlOC4uYmQ0YzM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInNhYTcxMzQuaCIKIAogI2luY2x1ZGUgPG1lZGlhL3NhYTY3NTJocy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xNjMsNyArMTY0LDcgQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChkZWJ1ZyA+IDEpCi0JCXNhYTcxMzRfcHJpbnRfaW9jdGwoZGV2LT5uYW1lLGNtZCk7CisJCXY0bF9wcmludF9pb2N0bChkZXYtPm5hbWUsY21kKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1FVRVJZQ0FQOgogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKaW5kZXggMTc5MmQwMy4uNjE2MjU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCiAjaW5jbHVkZSAic2FhNzEzNC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTM5MCw5ICszOTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHNhYTcxMzRfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAotI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAkuY2xhc3MgICAgICAgICA9IEkyQ19DTEFTU19UVl9BTkFMT0csCi0jZW5kaWYKIAkubmFtZSAgICAgICAgICA9ICJzYWE3MTM0IiwKIAkuaWQgICAgICAgICAgICA9IEkyQ19IV19TQUE3MTM0LAogCS5hbGdvICAgICAgICAgID0gJnNhYTcxMzRfYWxnbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IGFiNzVjYTUuLjgyZDI4Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtNTYsMjMgKzU2LDIzIEBACiAJWyAgIDEyIF0gPSBLRVlfS1A4LAogCVsgICAxMyBdID0gS0VZX0tQOSwKIAotCVsgICAxNCBdID0gS0VZX1RVTkVSLCAgICAgICAgLy8gQWlyL0NhYmxlCisJWyAgIDE0IF0gPSBLRVlfTU9ERSwgICAgICAgICAvLyBBaXIvQ2FibGUKIAlbICAgMTcgXSA9IEtFWV9WSURFTywgICAgICAgIC8vIFZpZGVvCiAJWyAgIDIxIF0gPSBLRVlfQVVESU8sICAgICAgICAvLyBBdWRpbwotCVsgICAgMCBdID0gS0VZX1BPV0VSLCAgICAgICAgLy8gUG92ZXIKKwlbICAgIDAgXSA9IEtFWV9QT1dFUiwgICAgICAgIC8vIFBvd2VyCisJWyAgIDI0IF0gPSBLRVlfVFVORVIsICAgICAgICAvLyBBViBTb3VyY2UKIAlbICAgIDIgXSA9IEtFWV9aT09NLCAgICAgICAgIC8vIEZ1bGxzY3JlZW4KKwlbICAgMjYgXSA9IEtFWV9MQU5HVUFHRSwgICAgIC8vIFN0ZXJlbwogCVsgICAyNyBdID0gS0VZX01VVEUsICAgICAgICAgLy8gTXV0ZQotCVsgICAyMCBdID0gS0VZX1ZPTFVNRVVQLAotCVsgICAyMyBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAgIDIwIF0gPSBLRVlfVk9MVU1FVVAsICAgICAvLyBWb2x1bWUgKworCVsgICAyMyBdID0gS0VZX1ZPTFVNRURPV04sICAgLy8gVm9sdW1lIC0KIAlbICAgMTggXSA9IEtFWV9DSEFOTkVMVVAsICAgIC8vIENoYW5uZWwgKwogCVsgICAxOSBdID0gS0VZX0NIQU5ORUxET1dOLCAgLy8gQ2hhbm5lbCAtCi0JWyAgICA2IF0gPSBLRVlfQUdBSU4sICAgICAgICAvLyBSZWNhbAotCVsgICAxNiBdID0gS0VZX0tQRU5URVIsICAgICAgLy8gRW50ZXIKLQotCVsgICAyNiBdID0gS0VZX0YyMiwgICAgICAgICAgLy8gU3RlcmVvCi0JWyAgIDI0IF0gPSBLRVlfRURJVCwgICAgICAgICAvLyBBViBTb3VyY2UKKwlbICAgIDYgXSA9IEtFWV9BR0FJTiwgICAgICAgIC8vIFJlY2FsbAorCVsgICAxNiBdID0gS0VZX0VOVEVSLCAgICAgIC8vIEVudGVyCiB9OwogCisKIHN0YXRpYyBJUl9LRVlUQUJfVFlQRSBjaW5lcmd5X2NvZGVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAlbICAgIDAgXSA9IEtFWV9LUDAsCiAJWyAgICAxIF0gPSBLRVlfS1AxLApAQCAtNTQzLDEyICs1NDMsMjIgQEAKIAlkcHJpbnRrKCJidWlsZF9rZXkgZ3Bpbz0weCV4IG1hc2s9MHgleCBkYXRhPSVkXG4iLAogCQlncGlvLCBpci0+bWFza19rZXljb2RlLCBkYXRhKTsKIAotCWlmICgoaXItPm1hc2tfa2V5ZG93biAgJiYgICgwICE9IChncGlvICYgaXItPm1hc2tfa2V5ZG93bikpKSB8fAotCSAgICAoaXItPm1hc2tfa2V5dXAgICAgJiYgICgwID09IChncGlvICYgaXItPm1hc2tfa2V5dXApKSkpIHsKLQkJaXJfaW5wdXRfa2V5ZG93bihpci0+ZGV2LCAmaXItPmlyLCBkYXRhLCBkYXRhKTsKLQl9IGVsc2UgewotCQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKKwlpZiAoaXItPnBvbGxpbmcpIHsKKwkJaWYgKChpci0+bWFza19rZXlkb3duICAmJiAgKDAgIT0gKGdwaW8gJiBpci0+bWFza19rZXlkb3duKSkpIHx8CisJCSAgICAoaXItPm1hc2tfa2V5dXAgICAgJiYgICgwID09IChncGlvICYgaXItPm1hc2tfa2V5dXApKSkpIHsKKwkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSwgZGF0YSk7CisJCX0gZWxzZSB7CisJCQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKKwkJfQogCX0KKwllbHNlIHsJLyogSVJRIGRyaXZlbiBtb2RlIC0gaGFuZGxlIGtleSBwcmVzcyBhbmQgcmVsZWFzZSBpbiBvbmUgZ28gKi8KKwkJaWYgKChpci0+bWFza19rZXlkb3duICAmJiAgKDAgIT0gKGdwaW8gJiBpci0+bWFza19rZXlkb3duKSkpIHx8CisJCSAgICAoaXItPm1hc2tfa2V5dXAgICAgJiYgICgwID09IChncGlvICYgaXItPm1hc2tfa2V5dXApKSkpIHsKKwkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSwgZGF0YSk7CisJCQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCkBAIC02ODYsNiArNjk2LDcgQEAKIAkJcG9sbGluZwkgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfUFZSOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfR09MRF9QTFVTOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfR09MRF9QTFVTSUk6CiAJCWlyX2NvZGVzICAgICA9IHZpZGVvbWF0ZV90dl9wdnJfY29kZXM7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDNGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtb3NzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYwppbmRleCA4YmFkZDJhLi43NDQ4ZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYwpAQCAtMzczLDYgKzM3Myw0MiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqb3NzcGNtX2lvY3Rsc1tdID0geworCSJSRVNFVCIsICJTWU5DIiwgIlNQRUVEIiwgIlNURVJFTyIsICJHRVRCTEtTSVpFIiwgIlNFVEZNVCIsCisJIkNIQU5ORUxTIiwgIj8iLCAiUE9TVCIsICJTVUJESVZJREUiLCAiU0VURlJBR01FTlQiLCAiR0VURk1UUyIsCisJIkdFVE9TUEFDRSIsICJHRVRJU1BBQ0UiLCAiTk9OQkxPQ0siLCAiR0VUQ0FQUyIsICJHRVQvU0VUVFJJR0dFUiIsCisJIkdFVElQVFIiLCAiR0VUT1BUUiIsICJNQVBJTkJVRiIsICJNQVBPVVRCVUYiLCAiU0VUU1lOQ1JPIiwKKwkiU0VURFVQTEVYIiwgIkdFVE9ERUxBWSIKK307CisjZGVmaW5lIE9TU1BDTV9JT0NUTFMgQVJSQVlfU0laRShvc3NwY21faW9jdGxzKQorCitzdGF0aWMgdm9pZCBzYWE3MTM0X29zc19wcmludF9pb2N0bChjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgY21kKQoreworCWNoYXIgKmRpcjsKKworCXN3aXRjaCAoX0lPQ19ESVIoY21kKSkgeworCWNhc2UgX0lPQ19OT05FOiAgICAgICAgICAgICAgZGlyID0gIi0tIjsgYnJlYWs7CisJY2FzZSBfSU9DX1JFQUQ6ICAgICAgICAgICAgICBkaXIgPSAici0iOyBicmVhazsKKwljYXNlIF9JT0NfV1JJVEU6ICAgICAgICAgICAgIGRpciA9ICItdyI7IGJyZWFrOworCWNhc2UgX0lPQ19SRUFEIHwgX0lPQ19XUklURTogZGlyID0gInJ3IjsgYnJlYWs7CisJZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICBkaXIgPSAiPz8iOyBicmVhazsKKwl9CisJc3dpdGNoIChfSU9DX1RZUEUoY21kKSkgeworCWNhc2UgJ1AnOgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlvY3RsIDB4JTA4eCAob3NzIGRzcCwgJXMsIFNORENUTF9EU1BfJXMpXG4iLAorCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIChfSU9DX05SKGNtZCkgPCBPU1NQQ01fSU9DVExTKSA/CisJCSAgICAgICBvc3NwY21faW9jdGxzW19JT0NfTlIoY21kKV0gOiAiPz8/Iik7CisJCWJyZWFrOworCWNhc2UgJ00nOgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlvY3RsIDB4JTA4eCAob3NzIG1peGVyLCAlcywgIyVkKVxuIiwKKwkJICAgICAgIG5hbWUsIGNtZCwgZGlyLCBfSU9DX05SKGNtZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlvY3RsIDB4JTA4eCAoPz8/LCAlcywgIyVkKVxuIiwKKwkJICAgICAgIG5hbWUsIGNtZCwgZGlyLCBfSU9DX05SKGNtZCkpOworCX0KK30KKwogc3RhdGljIGludCBkc3BfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0zODIsNyArNDE4LDcgQEAKIAlpbnQgdmFsID0gMDsKIAogCWlmIChkZWJ1ZyA+IDEpCi0JCXNhYTcxMzRfcHJpbnRfaW9jdGwoZGV2LT5uYW1lLGNtZCk7CisJCXNhYTcxMzRfb3NzX3ByaW50X2lvY3RsKGRldi0+bmFtZSxjbWQpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBPU1NfR0VUVkVSU0lPTjoKIAkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHApOwpAQCAtNjc4LDcgKzcxNCw3IEBACiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAKIAlpZiAoZGVidWcgPiAxKQotCQlzYWE3MTM0X3ByaW50X2lvY3RsKGRldi0+bmFtZSxjbWQpOworCQlzYWE3MTM0X29zc19wcmludF9pb2N0bChkZXYtPm5hbWUsY21kKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgT1NTX0dFVFZFUlNJT046CiAJCXJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCmluZGV4IDQ1Yzg1MmQuLmFkZmE4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CkBAIC0xNjg5LDcgKzE2OTAsNyBAQAogCWludCBlcnI7CiAKIAlpZiAodmlkZW9fZGVidWcgPiAxKQotCQlzYWE3MTM0X3ByaW50X2lvY3RsKGRldi0+bmFtZSxjbWQpOworCQl2NGxfcHJpbnRfaW9jdGwoZGV2LT5uYW1lLGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1NfQ1RSTDoKQEAgLTIxNDIsNyArMjE0Myw3IEBACiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCiAJaWYgKHZpZGVvX2RlYnVnID4gMSkKLQkJc2FhNzEzNF9wcmludF9pb2N0bChkZXYtPm5hbWUsY21kKTsKKwkJdjRsX3ByaW50X2lvY3RsKGRldi0+bmFtZSxjbWQpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJewpAQCAtMjI2Miw2ICsyMjYzLDcgQEAKIAkucG9sbCAgICAgPSB2aWRlb19wb2xsLAogCS5tbWFwCSAgPSB2aWRlb19tbWFwLAogCS5pb2N0bAkgID0gdmlkZW9faW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgPSBub19sbHNlZWssCiB9OwogCkBAIC0yMjcxLDYgKzIyNzMsNyBAQAogCS5vcGVuCSAgPSB2aWRlb19vcGVuLAogCS5yZWxlYXNlICA9IHZpZGVvX3JlbGVhc2UsCiAJLmlvY3RsCSAgPSByYWRpb19pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICA9IG5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IGFkZDQ5ZGIuLmU3MGVhZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMzcsNiArMzcsOSBAQAogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW8tYnVmLWR2Yi5oPgogCiAjaWZuZGVmIFRSVUUKQEAgLTQ3LDEwICs1MCw2IEBACiAjZW5kaWYKICNkZWZpbmUgVU5TRVQgKC0xVSkKIAotI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGVudW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTIwOSw2ICsyMDgsOCBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNURUtfRElHSU1BVFJJWF9UViA4MAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfVElHRVIgIDgxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfTVNJX1RWQVRBTllXSEVSRV9QTFVTICA4MgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1kyNTBQQ0kgODMKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlEVkJfVFJJTyA4NAogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApAQCAtNTQ2LDcgKzU0Nyw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkICBzYWE3MTM0X2Rldmxpc3Q7CiAKLXZvaWQgc2FhNzEzNF9wcmludF9pb2N0bChjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgY21kKTsKIHZvaWQgc2FhNzEzNF90cmFja19ncGlvKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBjaGFyICptc2cpOwogCiAjZGVmaW5lIFNBQTcxMzRfUEdUQUJMRV9TSVpFIDQwOTYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKaW5kZXggZDQ0OTdkYi4uNmVlNTRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKQEAgLTE5NzQsNiArMTk3NCw3IEBACiAJLm9wZW4JCT0gc2FhX29wZW4sCiAJLnJlbGVhc2UJPSBzYWFfcmVsZWFzZSwKIAkuaW9jdGwJCT0gc2FhX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQJCT0gc2FhX3JlYWQsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IHNhYV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKaW5kZXggNTQ5Yzk5Mi4uOTkyNjFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKQEAgLTUwLDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgImJ0dHYuaCIKICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaWZuZGVmIFZJREVPX0FVRElPX0JBTEFOQ0UKICMgZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UgMzIKQEAgLTkwLDkgKzkxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7CiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwogCi0jZGVmaW5lIGRwcmludGsgIGlmIChkZWJ1ZykgcHJpbnRrCi0jZGVmaW5lIGQycHJpbnRrIGlmIChkZWJ1ZyA+IDEpIHByaW50awotCiAvKiBUaGUgVERBNzQzMiBpcyBtYWRlIGJ5IFNUUy1UaG9tcHNvbgogICogaHR0cDovL3d3dy5zdC5jb20KICAqIGh0dHA6Ly91cy5zdC5jb20vc3RvbmxpbmUvYm9va3MvcGRmL2RvY3MvNDA1Ni5wZGYKQEAgLTIyOSwxMiArMjI3LDEyIEBACiBzdGF0aWMgaW50IHRkYTc0MzJfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHN1YmFkZHIsIGludCB2YWwpCiB7CiAJdW5zaWduZWQgY2hhciBidWZmZXJbMl07Ci0JZDJwcmludGsoInRkYTc0MzI6IEluIHRkYTc0MzJfd3JpdGVcbiIpOwotCWRwcmludGsoInRkYTc0MzI6IFdyaXRpbmcgJWQgMHgleFxuIiwgc3ViYWRkciwgdmFsKTsKKwl2NGxfZGJnKDIsY2xpZW50LCJJbiB0ZGE3NDMyX3dyaXRlXG4iKTsKKwl2NGxfZGJnKDEsY2xpZW50LCJXcml0aW5nICVkIDB4JXhcbiIsIHN1YmFkZHIsIHZhbCk7CiAJYnVmZmVyWzBdID0gc3ViYWRkcjsKIAlidWZmZXJbMV0gPSB2YWw7CiAJaWYgKDIgIT0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWZmZXIsMikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidGRhNzQzMjogSS9PIGVycm9yLCB0cnlpbmcgKHdyaXRlICVkIDB4JXgpXG4iLAorCQl2NGxfZXJyKGNsaWVudCwiSS9PIGVycm9yLCB0cnlpbmcgKHdyaXRlICVkIDB4JXgpXG4iLAogCQkgICAgICAgc3ViYWRkciwgdmFsKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI0Nyw5ICsyNDUsOSBAQAogewogCXN0cnVjdCB0ZGE3NDMyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgY2hhciBidWZbMTZdOwotCWQycHJpbnRrKCJ0ZGE3NDMyOiBJbiB0ZGE3NDMyX3NldFxuIik7CisJdjRsX2RiZygyLGNsaWVudCwiSW4gdGRhNzQzMl9zZXRcbiIpOwogCi0JZHByaW50ayhLRVJOX0lORk8KKwl2NGxfZGJnKDEsY2xpZW50LAogCQkidGRhNzQzMjogNzQzMl9zZXQoMHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMngpXG4iLAogCQl0LT5pbnB1dCx0LT52b2x1bWUsdC0+YmFzcyx0LT50cmVibGUsdC0+bGYsdC0+bHIsdC0+cmYsdC0+cnIsdC0+bG91ZCk7CiAJYnVmWzBdICA9IFREQTc0MzJfSU47CkBAIC0yNjMsNyArMjYxLDcgQEAKIAlidWZbOF0gID0gdC0+cnI7CiAJYnVmWzldICA9IHQtPmxvdWQ7CiAJaWYgKDEwICE9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDEwKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZGE3NDMyOiBJL08gZXJyb3IsIHRyeWluZyB0ZGE3NDMyX3NldFxuIik7CisJCXY0bF9lcnIoY2xpZW50LCJJL08gZXJyb3IsIHRyeWluZyB0ZGE3NDMyX3NldFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI3Myw3ICsyNzEsNyBAQAogc3RhdGljIHZvaWQgZG9fdGRhNzQzMl9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRkYTc0MzIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlkMnByaW50aygidGRhNzQzMjogSW4gdGRhNzQzMl9pbml0XG4iKTsKKwl2NGxfZGJnKDIsY2xpZW50LCJJbiB0ZGE3NDMyX2luaXRcbiIpOwogCiAJdC0+aW5wdXQgID0gVERBNzQzMl9TVEVSRU9fSU4gfCAgLyogTWFpbiAoc3RlcmVvKSBpbnB1dCAgICovCiAJCSAgICBUREE3NDMyX0JBU1NfU1lNICB8ICAvKiBTeW1tZXRyaWMgYmFzcyBjdXQgICAgKi8KQEAgLTMwMSw3ICsyOTksNiBAQAogewogCXN0cnVjdCB0ZGE3NDMyICp0OwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JZDJwcmludGsoInRkYTc0MzI6IEluIHRkYTc0MzJfYXR0YWNoXG4iKTsKIAogCXQgPSBrbWFsbG9jKHNpemVvZiAqdCxHRlBfS0VSTkVMKTsKIAlpZiAoIXQpCkBAIC0zMTUsMjEgKzMxMiwxNiBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHQpOwogCiAJZG9fdGRhNzQzMl9pbml0KGNsaWVudCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAidGRhNzQzMjogaW5pdFxuIik7Ci0KIAlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkciA8PCAxLCBhZGFwLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0ZGE3NDMyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKIAkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCB0ZGE3NDMyX2F0dGFjaCk7Ci0jZWxzZQotCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfQl9CVDg0OCkKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCB0ZGE3NDMyX2F0dGFjaCk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzQ4LDcgKzM0MCw5IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHRkYTc0MzIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlkMnByaW50aygidGRhNzQzMjogSW4gdGRhNzQzMl9jb21tYW5kXG4iKTsKKwl2NGxfZGJnKDIsY2xpZW50LCJJbiB0ZGE3NDMyX2NvbW1hbmRcbiIpOworCWlmIChkZWJ1Zz4xKQorCQl2NGxfaTJjX3ByaW50X2lvY3RsKGNsaWVudCxjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAkvKiAtLS0gdjRsIGlvY3RscyAtLS0gKi8KQEAgLTM1OSw3ICszNTMsNiBAQAogCWNhc2UgVklESU9DR0FVRElPOgogCXsKIAkJc3RydWN0IHZpZGVvX2F1ZGlvICp2YSA9IGFyZzsKLQkJZHByaW50aygidGRhNzQzMjogVklESU9DR0FVRElPXG4iKTsKIAogCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fVk9MVU1FIHwKIAkJCVZJREVPX0FVRElPX0JBU1MgfApAQCAtNDE0LDcgKzQwNyw2IEBACiAJY2FzZSBWSURJT0NTQVVESU86CiAJewogCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCQlkcHJpbnRrKCJ0ZGE3NDMyOiBWSURFT0NTQVVESU9cbiIpOwogCiAJCWlmKHZhLT5mbGFncyAmIFZJREVPX0FVRElPX1ZPTFVNRSl7CiAJCQlpZighbWF4dm9sKXsgLyogbWF4ICsyMGRiICovCkBAIC00OTAsMTEgKzQ4Miw2IEBACiAKIAl9IC8qIGVuZCBvZiBWSURFT0NTQVVESU8gY2FzZSAqLwogCi0JZGVmYXVsdDogLyogTm90IFZJREVPQ0dBVURJTyBvciBWSURFT0NTQVVESU8gKi8KLQotCQkvKiBub3RoaW5nICovCi0JCWQycHJpbnRrKCJ0ZGE3NDMyOiBEZWZhdWx0XG4iKTsKLQogCX0gLyogZW5kIG9mIChjbWQpIHN3aXRjaCAqLwogCiAJcmV0dXJuIDA7CkBAIC01MDIsNyArNDg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSAgICA9ICJpMmMgdGRhNzQzMiBkcml2ZXIiLAorCQkubmFtZSAgICA9ICJ0ZGE3NDMyIiwKIAl9LAogCS5pZCAgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfVERBNzQzMiwKIAkuYXR0YWNoX2FkYXB0ZXIgID0gdGRhNzQzMl9wcm9iZSwKQEAgLTUxOSw3ICs1MDYsNyBAQAogc3RhdGljIGludCBfX2luaXQgdGRhNzQzMl9pbml0KHZvaWQpCiB7CiAJaWYgKCAobG91ZG5lc3MgPCAwKSB8fCAobG91ZG5lc3MgPiAxNSkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidGRhNzQzMjogbG91ZG5lc3MgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxNVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAibG91ZG5lc3MgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxNVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYwppbmRleCA2MWQ5NGRkLi4yNDk4Yjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYwpAQCAtMzk4LDE0ICszOTgsOCBAQAogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBWNEwyX1NURF9NTgkoVjRMMl9TVERfUEFMX018VjRMMl9TVERfUEFMX058VjRMMl9TVERfUEFMX05jfFY0TDJfU1REX05UU0MpCi0jZGVmaW5lIFY0TDJfU1REX0IJKFY0TDJfU1REX1BBTF9CfFY0TDJfU1REX1BBTF9CMXxWNEwyX1NURF9TRUNBTV9CKQotI2RlZmluZSBWNEwyX1NURF9HSAkoVjRMMl9TVERfUEFMX0d8VjRMMl9TVERfUEFMX0h8VjRMMl9TVERfU0VDQU1fR3xWNEwyX1NURF9TRUNBTV9IKQotI2RlZmluZSBWNEwyX1NURF9ESwkoVjRMMl9TVERfUEFMX0RLfFY0TDJfU1REX1NFQ0FNX0RLKQotCiBzdGF0aWMgdm9pZCBzZXRfYXVkaW8oc3RydWN0IHR1bmVyICp0KQogewogCWNoYXIqIG1vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jCmluZGV4IDljM2VjZjcuLjI5OTM5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jCkBAIC0yNTcsMTMgKzI1Nyw4IEBACiAKIHN0YXRpYyBpbnQgdGRhOTg3NV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCiB7Ci0jaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRwogCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgdGRhOTg3NV9hdHRhY2gpOwotI2Vsc2UKLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX0JfQlQ4NDgpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgdGRhOTg3NV9hdHRhY2gpOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3Myw3ICszNjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICAgPSAiaTJjIHRkYTk4NzUgZHJpdmVyIiwKKwkJLm5hbWUgICA9ICJ0ZGE5ODc1IiwKIAl9LAogCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAogCS5hdHRhY2hfYWRhcHRlciA9IHRkYTk4NzVfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4ODcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jCmluZGV4IDcxNjVhMWIuLjljZjQ3ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogCiAKQEAgLTU3LDcgKzU3LDYgQEAKIAl2NGwyX3N0ZF9pZCAgICAgICAgc3RkOwogCWVudW0gdHVuZXJfbW9kZSAgICBtb2RlOwogCXVuc2lnbmVkIGludCAgICAgICBjb25maWc7Ci0JdW5zaWduZWQgaW50ICAgICAgIHBpbm5hY2xlX2lkOwogCXVuc2lnbmVkIGludCAgICAgICB1c2luZ192NGwyOwogCXVuc2lnbmVkIGludCAJICAgcmFkaW9fbW9kZTsKIAl1bnNpZ25lZCBjaGFyIAkgICBkYXRhWzRdOwpAQCAtMTE1LDYgKzExNCw5IEBACiAjZGVmaW5lIGNBdWRpb0dhaW4wICAgICAgICAgICAgIDB4MDAgICAgLy8gYml0IGM3CiAjZGVmaW5lIGNBdWRpb0dhaW42ICAgICAgICAgICAgIDB4ODAgICAgLy8gYml0IGM3CiAKKyNkZWZpbmUgY1RvcE1hc2sgICAgICAgICAgICAgICAgMHgxZiAgICAvLyBiaXQgYzA6NAorI2RlZmluZSBjVG9wUGFsU2VjYW1EZWZhdWx0CTB4MTQgCS8vIGJpdCBjMDo0CisjZGVmaW5lIGNUb3BOdHNjUmFkaW9EZWZhdWx0IAkweDEwIAkvLyBiaXQgYzA6NAogCiAvLy8vIHRoaXJkIHJlZyAoZSkKICNkZWZpbmUgY0F1ZGlvSUZfNF81ICAgICAgICAgICAgIDB4MDAgICAgLy8gYml0IGUwOjEKQEAgLTE0NiwxMyArMTQ4LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHZub3JtIHR2bm9ybXNbXSA9IHsKIAl7Ci0JCS5zdGQgICA9IFY0TDJfU1REX1BBTF9CRywKLQkJLm5hbWUgID0gIlBBTC1CRyIsCisJCS5zdGQgICA9IFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX1BBTF9IIHwgVjRMMl9TVERfUEFMX04sCisJCS5uYW1lICA9ICJQQUwtQkdITiIsCiAJCS5iICAgICA9ICggY05lZ2F0aXZlRm1UViAgfAogCQkJICAgY1FTUyAgICAgICAgICAgKSwKIAkJLmMgICAgID0gKCBjRGVlbXBoYXNpc09OICB8Ci0JCQkgICBjRGVlbXBoYXNpczUwICApLAotCQkuZSAgICAgPSAoIGNBdWRpb0lGXzVfNSAgIHwKKwkJCSAgIGNEZWVtcGhhc2lzNTAgIHwKKwkJCSAgIGNUb3BQYWxTZWNhbURlZmF1bHQpLAorCQkuZSAgICAgPSAoIGNHYXRpbmdfMzYgICAgIHwKKwkJCSAgIGNBdWRpb0lGXzVfNSAgIHwKIAkJCSAgIGNWaWRlb0lGXzM4XzkwICksCiAJfSx7CiAJCS5zdGQgICA9IFY0TDJfU1REX1BBTF9JLApAQCAtMTYwLDggKzE2NCwxMCBAQAogCQkuYiAgICAgPSAoIGNOZWdhdGl2ZUZtVFYgIHwKIAkJCSAgIGNRU1MgICAgICAgICAgICksCiAJCS5jICAgICA9ICggY0RlZW1waGFzaXNPTiAgfAotCQkJICAgY0RlZW1waGFzaXM1MCAgKSwKLQkJLmUgICAgID0gKCBjQXVkaW9JRl82XzAgICB8CisJCQkgICBjRGVlbXBoYXNpczUwICB8CisJCQkgICBjVG9wUGFsU2VjYW1EZWZhdWx0KSwKKwkJLmUgICAgID0gKCBjR2F0aW5nXzM2ICAgICB8CisJCQkgICBjQXVkaW9JRl82XzAgICB8CiAJCQkgICBjVmlkZW9JRl8zOF85MCApLAogCX0sewogCQkuc3RkICAgPSBWNEwyX1NURF9QQUxfREssCkBAIC0xNjksNTIgKzE3NSw4MCBAQAogCQkuYiAgICAgPSAoIGNOZWdhdGl2ZUZtVFYgIHwKIAkJCSAgIGNRU1MgICAgICAgICAgICksCiAJCS5jICAgICA9ICggY0RlZW1waGFzaXNPTiAgfAotCQkJICAgY0RlZW1waGFzaXM1MCAgKSwKLQkJLmUgICAgID0gKCBjQXVkaW9JRl82XzUgICB8Ci0JCQkgICBjVmlkZW9JRl8zOF8wMCApLAorCQkJICAgY0RlZW1waGFzaXM1MCAgfAorCQkJICAgY1RvcFBhbFNlY2FtRGVmYXVsdCksCisJCS5lICAgICA9ICggY0dhdGluZ18zNiAgICAgfAorCQkJICAgY0F1ZGlvSUZfNl81ICAgfAorCQkJICAgY1ZpZGVvSUZfMzhfOTAgKSwKIAl9LHsKLQkJLnN0ZCAgID0gVjRMMl9TVERfUEFMX00gfCBWNEwyX1NURF9QQUxfTiwKLQkJLm5hbWUgID0gIlBBTC1NL04iLAorCQkuc3RkICAgPSBWNEwyX1NURF9QQUxfTSB8IFY0TDJfU1REX1BBTF9OYywKKwkJLm5hbWUgID0gIlBBTC1NL05jIiwKIAkJLmIgICAgID0gKCBjTmVnYXRpdmVGbVRWICB8CiAJCQkgICBjUVNTICAgICAgICAgICApLAogCQkuYyAgICAgPSAoIGNEZWVtcGhhc2lzT04gIHwKLQkJCSAgIGNEZWVtcGhhc2lzNzUgICksCi0JCS5lICAgICA9ICggY0F1ZGlvSUZfNF81ICAgfAorCQkJICAgY0RlZW1waGFzaXM3NSAgfAorCQkJICAgY1RvcE50c2NSYWRpb0RlZmF1bHQpLAorCQkuZSAgICAgPSAoIGNHYXRpbmdfMzYgICAgIHwKKwkJCSAgIGNBdWRpb0lGXzRfNSAgIHwKIAkJCSAgIGNWaWRlb0lGXzQ1Xzc1ICksCiAJfSx7CisJCS5zdGQgICA9IFY0TDJfU1REX1NFQ0FNX0IgfCBWNEwyX1NURF9TRUNBTV9HIHwgVjRMMl9TVERfU0VDQU1fSCwKKwkJLm5hbWUgID0gIlNFQ0FNLUJHSCIsCisJCS5iICAgICA9ICggY1Bvc2l0aXZlQW1UViAgfAorCQkJICAgY1FTUyAgICAgICAgICAgKSwKKwkJLmMgICAgID0gKCBjVG9wUGFsU2VjYW1EZWZhdWx0KSwKKwkJLmUgICAgID0gKCBjR2F0aW5nXzM2CSAgfAorCQkJICAgY0F1ZGlvSUZfNV81ICAgfAorCQkJICAgY1ZpZGVvSUZfMzhfOTAgKSwKKwl9LHsKIAkJLnN0ZCAgID0gVjRMMl9TVERfU0VDQU1fTCwKIAkJLm5hbWUgID0gIlNFQ0FNLUwiLAogCQkuYiAgICAgPSAoIGNQb3NpdGl2ZUFtVFYgIHwKIAkJCSAgIGNRU1MgICAgICAgICAgICksCisJCS5jICAgICA9ICggY1RvcFBhbFNlY2FtRGVmYXVsdCksCiAJCS5lICAgICA9ICggY0dhdGluZ18zNgkgIHwKIAkJCSAgIGNBdWRpb0lGXzZfNSAgIHwKIAkJCSAgIGNWaWRlb0lGXzM4XzkwICksCiAJfSx7CisJCS5zdGQgICA9IFY0TDJfU1REX1NFQ0FNX0xDLAorCQkubmFtZSAgPSAiU0VDQU0tTCciLAorCQkuYiAgICAgPSAoIGNPdXRwdXRQb3J0MkluYWN0aXZlIHwKKwkJCSAgIGNQb3NpdGl2ZUFtVFYgIHwKKwkJCSAgIGNRU1MgICAgICAgICAgICksCisJCS5jICAgICA9ICggY1RvcFBhbFNlY2FtRGVmYXVsdCksCisJCS5lICAgICA9ICggY0dhdGluZ18zNgkgIHwKKwkJCSAgIGNBdWRpb0lGXzZfNSAgIHwKKwkJCSAgIGNWaWRlb0lGXzMzXzkwICksCisJfSx7CiAJCS5zdGQgICA9IFY0TDJfU1REX1NFQ0FNX0RLLAogCQkubmFtZSAgPSAiU0VDQU0tREsiLAogCQkuYiAgICAgPSAoIGNOZWdhdGl2ZUZtVFYgIHwKIAkJCSAgIGNRU1MgICAgICAgICAgICksCiAJCS5jICAgICA9ICggY0RlZW1waGFzaXNPTiAgfAotCQkJICAgY0RlZW1waGFzaXM1MCAgKSwKLQkJLmUgICAgID0gKCBjQXVkaW9JRl82XzUgICB8Ci0JCQkgICBjVmlkZW9JRl8zOF8wMCApLAorCQkJICAgY0RlZW1waGFzaXM1MCAgfAorCQkJICAgY1RvcFBhbFNlY2FtRGVmYXVsdCksCisJCS5lICAgICA9ICggY0dhdGluZ18zNiAgICAgfAorCQkJICAgY0F1ZGlvSUZfNl81ICAgfAorCQkJICAgY1ZpZGVvSUZfMzhfOTAgKSwKIAl9LHsKIAkJLnN0ZCAgID0gVjRMMl9TVERfTlRTQ19NLAogCQkubmFtZSAgPSAiTlRTQy1NIiwKIAkJLmIgICAgID0gKCBjTmVnYXRpdmVGbVRWICB8CiAJCQkgICBjUVNTICAgICAgICAgICApLAogCQkuYyAgICAgPSAoIGNEZWVtcGhhc2lzT04gIHwKLQkJCSAgIGNEZWVtcGhhc2lzNzUgICksCisJCQkgICBjRGVlbXBoYXNpczc1ICB8CisJCQkgICBjVG9wTnRzY1JhZGlvRGVmYXVsdCksCiAJCS5lICAgICA9ICggY0dhdGluZ18zNiAgICAgfAogCQkJICAgY0F1ZGlvSUZfNF81ICAgfAogCQkJICAgY1ZpZGVvSUZfNDVfNzUgKSwKIAl9LHsKIAkJLnN0ZCAgID0gVjRMMl9TVERfTlRTQ19NX0pQLAotCQkubmFtZSAgPSAiTlRTQy1KUCIsCisJCS5uYW1lICA9ICJOVFNDLU0tSlAiLAogCQkuYiAgICAgPSAoIGNOZWdhdGl2ZUZtVFYgIHwKIAkJCSAgIGNRU1MgICAgICAgICAgICksCiAJCS5jICAgICA9ICggY0RlZW1waGFzaXNPTiAgfAotCQkJICAgY0RlZW1waGFzaXM1MCAgKSwKKwkJCSAgIGNEZWVtcGhhc2lzNTAgIHwKKwkJCSAgIGNUb3BOdHNjUmFkaW9EZWZhdWx0KSwKIAkJLmUgICAgID0gKCBjR2F0aW5nXzM2ICAgICB8CiAJCQkgICBjQXVkaW9JRl80XzUgICB8CiAJCQkgICBjVmlkZW9JRl81OF83NSApLApAQCAtMjI2LDggKzI2MCwxMCBAQAogCS5iICAgID0gKCBjRm1SYWRpbyAgICAgICB8CiAJCSAgY1FTUyAgICAgICAgICAgKSwKIAkuYyAgICA9ICggY0RlZW1waGFzaXNPRkYgfAotCQkgIGNBdWRpb0dhaW42ICksCi0JLmUgICAgPSAoIGNBdWRpb0lGXzVfNSAgIHwKKwkJICBjQXVkaW9HYWluNiAgICB8CisJCSAgY1RvcE50c2NSYWRpb0RlZmF1bHQpLAorCS5lICAgID0gKCBjVHVuZXJHYWluTG93ICB8CisJCSAgY0F1ZGlvSUZfNV81ICAgfAogCQkgIGNSYWRpb0lGXzM4XzkwICksCiB9OwogCkBAIC0yMzYsOCArMjcyLDEwIEBACiAJLmIgICAgPSAoIGNGbVJhZGlvICAgICAgIHwKIAkJICBjUVNTICAgICAgICAgICApLAogCS5jICAgID0gKCBjRGVlbXBoYXNpc09OICB8Ci0JCSAgY0RlZW1waGFzaXM1MCksCi0JLmUgICAgPSAoIGNBdWRpb0lGXzVfNSAgIHwKKwkJICBjRGVlbXBoYXNpczc1ICB8CisJCSAgY1RvcE50c2NSYWRpb0RlZmF1bHQpLAorCS5lICAgID0gKCBjVHVuZXJHYWluTG93ICB8CisJCSAgY0F1ZGlvSUZfNV81ICAgfAogCQkgIGNSYWRpb0lGXzM4XzkwICksCiB9OwogCkBAIC00MDAsNyArNDM4LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydDEgID0gVU5TRVQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IHBvcnQyICA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBxc3MgICAgPSBVTlNFVDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWRqdXN0ID0gMHgxMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWRqdXN0ID0gVU5TRVQ7CisKIG1vZHVsZV9wYXJhbShwb3J0MSwgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShwb3J0MiwgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShxc3MsIGludCwgMDY0NCk7CkBAIC00MjgsOCArNDY3LDEwIEBACiAJCQlidWZbMV0gJj0gfmNRU1M7CiAJfQogCi0JaWYgKGFkanVzdCA+PSAweDAwICYmIGFkanVzdCA8IDB4MjApCisJaWYgKGFkanVzdCA+PSAweDAwICYmIGFkanVzdCA8IDB4MjApIHsKKwkJYnVmWzJdICY9IH5jVG9wTWFzazsKIAkJYnVmWzJdIHw9IGFkanVzdDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2NSw2ICs1MDYsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmICh0LT5jb25maWcgJiBUREE5ODg3X1RPUF9TRVQpIHsKKwkJYnVmWzJdICY9IH5jVG9wTWFzazsKKwkJYnVmWzJdIHw9ICh0LT5jb25maWcgPj4gOCkgJiBjVG9wTWFzazsKKwl9CiAJaWYgKCh0LT5jb25maWcgJiBUREE5ODg3X0lOVEVSQ0FSUklFUl9OVFNDKSAmJiAodC0+c3RkICYgVjRMMl9TVERfTlRTQykpCiAJCWJ1ZlsxXSAmPSB+Y1FTUzsKIAlyZXR1cm4gMDsKQEAgLTQ3MiwzOCArNTE3LDEzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCB0ZGE5ODg3X3NldF9waW5uYWNsZShzdHJ1Y3QgdGRhOTg4NyAqdCwgY2hhciAqYnVmKQotewotCXVuc2lnbmVkIGludCBiQ2Fycmllck1vZGUgPSBVTlNFVDsKK3N0YXRpYyBjaGFyIHBhbFtdID0gIi0tIjsKK3N0YXRpYyBjaGFyIHNlY2FtW10gPSAiLS0iOworc3RhdGljIGNoYXIgbnRzY1tdID0gIi0iOwogCi0JaWYgKHQtPnN0ZCAmIFY0TDJfU1REXzYyNV81MCkgewotCQlpZiAoKDEgPT0gdC0+cGlubmFjbGVfaWQpIHx8ICg3ID09IHQtPnBpbm5hY2xlX2lkKSkgewotCQkJYkNhcnJpZXJNb2RlID0gY0ludGVyY2FycmllcjsKLQkJfSBlbHNlIHsKLQkJCWJDYXJyaWVyTW9kZSA9IGNRU1M7Ci0JCX0KLQl9Ci0JaWYgKHQtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewotCQlpZiAoKDUgPT0gdC0+cGlubmFjbGVfaWQpIHx8ICg2ID09IHQtPnBpbm5hY2xlX2lkKSkgewotCQkJYkNhcnJpZXJNb2RlID0gY0ludGVyY2FycmllcjsKLQkJfSBlbHNlIHsKLQkJCWJDYXJyaWVyTW9kZSA9IGNRU1M7Ci0JCX0KLQl9Ci0KLQlpZiAoYkNhcnJpZXJNb2RlICE9IFVOU0VUKSB7Ci0JCWJ1ZlsxXSAmPSB+MHgwNDsKLQkJYnVmWzFdIHw9IGJDYXJyaWVyTW9kZTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNoYXIgcGFsW10gPSAiLSI7CiBtb2R1bGVfcGFyYW1fc3RyaW5nKHBhbCwgcGFsLCBzaXplb2YocGFsKSwgMDY0NCk7Ci1zdGF0aWMgY2hhciBzZWNhbVtdID0gIi0iOwogbW9kdWxlX3BhcmFtX3N0cmluZyhzZWNhbSwgc2VjYW0sIHNpemVvZihzZWNhbSksIDA2NDQpOworbW9kdWxlX3BhcmFtX3N0cmluZyhudHNjLCBudHNjLCBzaXplb2YobnRzYyksIDA2NDQpOwogCiBzdGF0aWMgaW50IHRkYTk4ODdfZml4dXBfc3RkKHN0cnVjdCB0ZGE5ODg3ICp0KQogewpAQCAtNTE0LDggKzUzNCwxNyBAQAogCQljYXNlICdCJzoKIAkJY2FzZSAnZyc6CiAJCWNhc2UgJ0cnOgotCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1CR1xuIik7Ci0JCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfQkc7CisJCWNhc2UgJ2gnOgorCQljYXNlICdIJzoKKwkJY2FzZSAnbic6CisJCWNhc2UgJ04nOgorCQkJaWYgKHBhbFsxXSA9PSAnYycgfHwgcGFsWzFdID09ICdDJykgeworCQkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFBBTCA9PiBQQUwtTmNcbiIpOworCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9OYzsKKwkJCX0gZWxzZSB7CisJCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1CR0hOXG4iKTsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9QQUxfSCB8IFY0TDJfU1REX1BBTF9OOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ2knOgogCQljYXNlICdJJzoKQEAgLTUyOSw2ICs1NTgsMTEgQEAKIAkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFBBTCA9PiBQQUwtREtcbiIpOwogCQkJdC0+c3RkID0gVjRMMl9TVERfUEFMX0RLOwogCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQljYXNlICdNJzoKKwkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFBBTCA9PiBQQUwtTVxuIik7CisJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfTTsKKwkJCWJyZWFrOwogCQljYXNlICctJzoKIAkJCS8qIGRlZmF1bHQgcGFyYW1ldGVyLCBkbyBub3RoaW5nICovCiAJCQlicmVhazsKQEAgLTUzOSw2ICs1NzMsMTUgQEAKIAl9CiAJaWYgKCh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTSkgPT0gVjRMMl9TVERfU0VDQU0pIHsKIAkJc3dpdGNoIChzZWNhbVswXSkgeworCQljYXNlICdiJzoKKwkJY2FzZSAnQic6CisJCWNhc2UgJ2cnOgorCQljYXNlICdHJzoKKwkJY2FzZSAnaCc6CisJCWNhc2UgJ0gnOgorCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogU0VDQU0gPT4gU0VDQU0tQkdIXG4iKTsKKwkJCXQtPnN0ZCA9IFY0TDJfU1REX1NFQ0FNX0IgfCBWNEwyX1NURF9TRUNBTV9HIHwgVjRMMl9TVERfU0VDQU1fSDsKKwkJCWJyZWFrOwogCQljYXNlICdkJzoKIAkJY2FzZSAnRCc6CiAJCWNhc2UgJ2snOgpAQCAtNTQ4LDggKzU5MSwxMyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQljYXNlICdMJzoKLQkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFNFQ0FNID0+IFNFQ0FNLUxcbiIpOwotCQkJdC0+c3RkID0gVjRMMl9TVERfU0VDQU1fTDsKKwkJCWlmIChzZWNhbVsxXSA9PSAnYycgfHwgc2VjYW1bMV0gPT0gJ0MnKSB7CisJCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogU0VDQU0gPT4gU0VDQU0tTCdcbiIpOworCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1NFQ0FNX0xDOworCQkJfSBlbHNlIHsKKwkJCQl0ZGE5ODg3X2RiZygiaW5zbW9kIGZpeHVwOiBTRUNBTSA9PiBTRUNBTS1MXG4iKTsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9TRUNBTV9MOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJy0nOgogCQkJLyogZGVmYXVsdCBwYXJhbWV0ZXIsIGRvIG5vdGhpbmcgKi8KQEAgLTU1OSw2ICs2MDcsMjYgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmICgodC0+c3RkICYgVjRMMl9TVERfTlRTQykgPT0gVjRMMl9TVERfTlRTQykgeworCQlzd2l0Y2ggKG50c2NbMF0pIHsKKwkJY2FzZSAnbSc6CisJCWNhc2UgJ00nOgorCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogTlRTQyA9PiBOVFNDLU1cbiIpOworCQkJdC0+c3RkID0gVjRMMl9TVERfTlRTQ19NOworCQkJYnJlYWs7CisJCWNhc2UgJ2onOgorCQljYXNlICdKJzoKKwkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IE5UU0MgPT4gTlRTQ19NX0pQXG4iKTsKKwkJCXQtPnN0ZCA9IFY0TDJfU1REX05UU0NfTV9KUDsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCS8qIGRlZmF1bHQgcGFyYW1ldGVyLCBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRkYTk4ODdfaW5mbygibnRzYz0gYXJndW1lbnQgbm90IHJlY29nbmlzZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4MSwxMiArNjQ5LDIyIEBACiAJbWVtc2V0KHQtPmRhdGEsMCxzaXplb2YodC0+ZGF0YSkpOwogCXRkYTk4ODdfc2V0X3R2bm9ybSh0LHQtPmRhdGEpOwogCisJLyogQSBub3RlIG9uIHRoZSBwb3J0IHNldHRpbmdzOgorCSAgIFRoZXNlIHNldHRpbmdzIHRlbmQgdG8gZGVwZW5kIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGJvYXJkLgorCSAgIEJ5IGRlZmF1bHQgdGhleSBhcmUgc2V0IHRvIGluYWN0aXZlIChiaXQgdmFsdWUgMSkgYnkgdGhpcyBkcml2ZXIsCisJICAgb3ZlcndyaXRpbmcgYW55IGNoYW5nZXMgbWFkZSBieSB0aGUgdHZub3JtLiBUaGlzIG1lYW5zIHRoYXQgaXQKKwkgICBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIG1vZHVsZSB1c2luZyB0aGUgdGRhOTg4NyB0byBzZXQKKwkgICB0aGVzZSB2YWx1ZXMgaW4gY2FzZSBvZiBjaGFuZ2VzIGluIHRoZSB0dm5vcm0uCisJICAgSW4gbWFueSBjYXNlcyBwb3J0IDIgc2hvdWxkIGJlIG1hZGUgYWN0aXZlICgwKSB3aGVuIHNlbGVjdGluZworCSAgIFNFQ0FNLUwsIGFuZCBwb3J0IDIgc2hvdWxkIHJlbWFpbiBpbmFjdGl2ZSAoMSkgZm9yIFNFQ0FNLUwnLgorCisJICAgRm9yIHRoZSBvdGhlciBzdGFuZGFyZHMgdGhlIHRkYTk4ODcgYXBwbGljYXRpb24gbm90ZSBzYXlzIHRoYXQKKwkgICB0aGUgcG9ydHMgc2hvdWxkIGJlIHNldCB0byBhY3RpdmUgKDApLCBidXQsIGFnYWluLCB0aGF0IG1heQorCSAgIGRpZmZlciBkZXBlbmRpbmcgb24gdGhlIHByZWNpc2UgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKwkgKi8KIAl0LT5kYXRhWzFdIHw9IGNPdXRwdXRQb3J0MUluYWN0aXZlOwogCXQtPmRhdGFbMV0gfD0gY091dHB1dFBvcnQySW5hY3RpdmU7CiAKLQlpZiAoVU5TRVQgIT0gdC0+cGlubmFjbGVfaWQpIHsKLQkJdGRhOTg4N19zZXRfcGlubmFjbGUodCx0LT5kYXRhKTsKLQl9CiAJdGRhOTg4N19zZXRfY29uZmlnKHQsdC0+ZGF0YSk7CiAJdGRhOTg4N19zZXRfaW5zbW9kKHQsdC0+ZGF0YSk7CiAKQEAgLTU5NCw3ICs2NzIsNiBAQAogCQl0LT5kYXRhWzFdIHw9IGNGb3JjZWRNdXRlQXVkaW9PTjsKIAl9CiAKLQogCXRkYTk4ODdfZGJnKCJ3cml0aW5nOiBiPTB4JTAyeCBjPTB4JTAyeCBlPTB4JTAyeFxuIiwKIAkJdC0+ZGF0YVsxXSx0LT5kYXRhWzJdLHQtPmRhdGFbM10pOwogCWlmIChkZWJ1ZyA+IDEpCkBAIC02MjUsNyArNzAyLDYgQEAKIAogCXQtPmNsaWVudCAgICAgID0gY2xpZW50X3RlbXBsYXRlOwogCXQtPnN0ZCAgICAgICAgID0gMDsKLQl0LT5waW5uYWNsZV9pZCA9IFVOU0VUOwogCXQtPnJhZGlvX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCiAJdGRhOTg4N19pbmZvKCJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyPDwxLCBhZGFwLT5uYW1lKTsKQEAgLTYzOCwxOCArNzE0LDggQEAKIAogc3RhdGljIGludCB0ZGE5ODg3X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKIAkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCB0ZGE5ODg3X2F0dGFjaCk7Ci0jZWxzZQotCXN3aXRjaCAoYWRhcC0+aWQpIHsKLQljYXNlIEkyQ19IV19CX0JUODQ4OgotCWNhc2UgSTJDX0hXX0JfUklWQToKLQljYXNlIEkyQ19IV19TQUE3MTM0OgotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHRkYTk4ODdfYXR0YWNoKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY4OSwxNCArNzU1LDYgQEAKIAkJdGRhOTg4N19jb25maWd1cmUodCk7CiAJCWJyZWFrOwogCX0KLQljYXNlIEFVRENfQ09ORklHX1BJTk5BQ0xFOgotCXsKLQkJaW50ICppID0gYXJnOwotCi0JCXQtPnBpbm5hY2xlX2lkID0gKmk7Ci0JCXRkYTk4ODdfY29uZmlndXJlKHQpOwotCQlicmVhazsKLQl9CiAJY2FzZSBUREE5ODg3X1NFVF9DT05GSUc6CiAJewogCQlpbnQgKmkgPSBhcmc7CkBAIC03ODcsNyArODQ1LDcgQEAKIAl9CiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKIAl7Ci0JCXRkYTk4ODdfaW5mbygiRGF0YSBieXRlczogYj0lMDJ4IGM9JTAyeCBlPSUwMnhcbiIsIHQtPmRhdGFbMV0sIHQtPmRhdGFbMl0sIHQtPmRhdGFbM10pOworCQl0ZGE5ODg3X2luZm8oIkRhdGEgYnl0ZXM6IGI9MHglMDJ4IGM9MHglMDJ4IGU9MHglMDJ4XG4iLCB0LT5kYXRhWzFdLCB0LT5kYXRhWzJdLCB0LT5kYXRhWzNdKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC04MjQsNyArODgyLDcgQEAKIAkuZGV0YWNoX2NsaWVudCAgPSB0ZGE5ODg3X2RldGFjaCwKIAkuY29tbWFuZCAgICAgICAgPSB0ZGE5ODg3X2NvbW1hbmQsCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgICAgPSAiaTJjIHRkYTk4ODcgZHJpdmVyIiwKKwkJLm5hbWUgICAgPSAidGRhOTg4NyIsCiAJCS5zdXNwZW5kID0gdGRhOTg4N19zdXNwZW5kLAogCQkucmVzdW1lICA9IHRkYTk4ODdfcmVzdW1lLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTU3NjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCmluZGV4IGE5Mzc1ZWYuLjI2MWI3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCkBAIC0xNyw2ICsxNyw5IEBACiAKICNkZWZpbmUgUFJFRklYICJURUE1NzY3ICIKIAorLyogZnJvbSB0dW5lci1jb3JlLmMgKi8KK2V4dGVybiBpbnQgZGVidWc7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQ2LDcgKzI0OSw3IEBACiAJaWYgKDUgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgNSkpKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDUpXG4iLCByYyk7CiAKLQlpZiAodHVuZXJfZGVidWcpIHsKKwlpZiAoZGVidWcpIHsKIAkJaWYgKDUgIT0gKHJjID0gaTJjX21hc3Rlcl9yZWN2KGMsIGJ1ZmZlciwgNSkpKQogCQkJdHVuZXJfd2FybigiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA1KVxuIiwgcmMpOwogCQllbHNlCkBAIC0yNjQsNyArMjY3LDcgQEAKIAlpZiAoNSAhPSAocmMgPSBpMmNfbWFzdGVyX3JlY3YoYywgYnVmZmVyLCA1KSkpCiAJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNSlcbiIsIHJjKTsKIAotCXJldHVybiAoKGJ1ZmZlclszXSAmIFRFQTU3NjdfQURDX0xFVkVMX01BU0spIDw8ICgxMyAtIDQpKTsKKwlyZXR1cm4gKChidWZmZXJbM10gJiBURUE1NzY3X0FEQ19MRVZFTF9NQVNLKSA8PCA4KTsKIH0KIAogc3RhdGljIGludCB0ZWE1NzY3X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggYzEzYzdiOS4uNTdiYzU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTIwLDEwICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogCi0jaW5jbHVkZSAibXNwMzQwMC5oIgotCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKIC8qIHN0YW5kYXJkIGkyYyBpbnNtb2Qgb3B0aW9ucyAqLwpAQCAtMzgsMjEgKzM3LDMwIEBACiAKIC8qIGluc21vZCBvcHRpb25zIHVzZWQgYXQgaW5pdCB0aW1lID0+IHJlYWQvb25seSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhZGRyID0gMDsKLW1vZHVsZV9wYXJhbShhZGRyLCBpbnQsIDA0NDQpOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IG5vX2F1dG9kZXRlY3QgPSAwOwotbW9kdWxlX3BhcmFtKG5vX2F1dG9kZXRlY3QsIGludCwgMDQ0NCk7Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hvd19pMmMgPSAwOwotbW9kdWxlX3BhcmFtKHNob3dfaTJjLCBpbnQsIDA0NDQpOwogCiAvKiBpbnNtb2Qgb3B0aW9ucyB1c2VkIGF0IHJ1bnRpbWUgPT4gcmVhZC93cml0ZSAqLwotdW5zaWduZWQgaW50IHR1bmVyX2RlYnVnID0gMDsKLW1vZHVsZV9wYXJhbSh0dW5lcl9kZWJ1ZywgaW50LCAwNjQ0KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHVuZXJfZGVidWcgPSAwOworaW50IGRlYnVnID0gMDsKIAogc3RhdGljIHVuc2lnbmVkIGludCB0dl9yYW5nZVsyXSA9IHsgNDQsIDk1OCB9Owogc3RhdGljIHVuc2lnbmVkIGludCByYWRpb19yYW5nZVsyXSA9IHsgNjUsIDEwOCB9OwogCitzdGF0aWMgY2hhciBwYWxbXSA9ICItLSI7CitzdGF0aWMgY2hhciBzZWNhbVtdID0gIi0tIjsKK3N0YXRpYyBjaGFyIG50c2NbXSA9ICItIjsKKworbW9kdWxlX3BhcmFtKGFkZHIsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0obm9fYXV0b2RldGVjdCwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzaG93X2kyYywgaW50LCAwNDQ0KTsKKy8qIE5vdGU6IHR1bmVyX2RlYnVnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuMTcgKi8KK21vZHVsZV9wYXJhbSh0dW5lcl9kZWJ1ZywgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKKworbW9kdWxlX3BhcmFtX3N0cmluZyhwYWwsIHBhbCwgc2l6ZW9mKHBhbCksIDA2NDQpOworbW9kdWxlX3BhcmFtX3N0cmluZyhzZWNhbSwgc2VjYW0sIHNpemVvZihzZWNhbSksIDA2NDQpOworbW9kdWxlX3BhcmFtX3N0cmluZyhudHNjLCBudHNjLCBzaXplb2YobnRzYyksIDA2NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHR2X3JhbmdlLCBpbnQsIE5VTEwsIDA2NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHJhZGlvX3JhbmdlLCBpbnQsIE5VTEwsIDA2NDQpOwogCkBAIC0yNDksMTEgKzI1Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjaGFyIHBhbFtdID0gIi0iOwotbW9kdWxlX3BhcmFtX3N0cmluZyhwYWwsIHBhbCwgc2l6ZW9mKHBhbCksIDA2NDQpOwotc3RhdGljIGNoYXIgc2VjYW1bXSA9ICItLSI7Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKHNlY2FtLCBzZWNhbSwgc2l6ZW9mKHNlY2FtKSwgMDY0NCk7Ci0KIC8qIGdldCBtb3JlIHByZWNpc2Ugbm9ybSBpbmZvIGZyb20gaW5zbW9kIG9wdGlvbiAqLwogc3RhdGljIGludCB0dW5lcl9maXh1cF9zdGQoc3RydWN0IHR1bmVyICp0KQogewpAQCAtMjg1LDggKzI4OCwxMyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgJ04nOgogCQljYXNlICduJzoKLQkJCXR1bmVyX2RiZyAoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1OXG4iKTsKLQkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9OOworCQkJaWYgKHBhbFsxXSA9PSAnYycgfHwgcGFsWzFdID09ICdDJykgeworCQkJCXR1bmVyX2RiZygiaW5zbW9kIGZpeHVwOiBQQUwgPT4gUEFMLU5jXG4iKTsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfTmM7CisJCQl9IGVsc2UgeworCQkJCXR1bmVyX2RiZyAoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1OXG4iKTsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfTjsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlICctJzoKIAkJCS8qIGRlZmF1bHQgcGFyYW1ldGVyLCBkbyBub3RoaW5nICovCkBAIC0yOTgsNiArMzA2LDE1IEBACiAJfQogCWlmICgodC0+c3RkICYgVjRMMl9TVERfU0VDQU0pID09IFY0TDJfU1REX1NFQ0FNKSB7CiAJCXN3aXRjaCAoc2VjYW1bMF0pIHsKKwkJY2FzZSAnYic6CisJCWNhc2UgJ0InOgorCQljYXNlICdnJzoKKwkJY2FzZSAnRyc6CisJCWNhc2UgJ2gnOgorCQljYXNlICdIJzoKKwkJCXR1bmVyX2RiZygiaW5zbW9kIGZpeHVwOiBTRUNBTSA9PiBTRUNBTS1CR0hcbiIpOworCQkJdC0+c3RkID0gVjRMMl9TVERfU0VDQU1fQiB8IFY0TDJfU1REX1NFQ0FNX0cgfCBWNEwyX1NURF9TRUNBTV9IOworCQkJYnJlYWs7CiAJCWNhc2UgJ2QnOgogCQljYXNlICdEJzoKIAkJY2FzZSAnayc6CkBAIC0zMjQsOSArMzQxLDYwIEBACiAJCX0KIAl9CiAKKwlpZiAoKHQtPnN0ZCAmIFY0TDJfU1REX05UU0MpID09IFY0TDJfU1REX05UU0MpIHsKKwkJc3dpdGNoIChudHNjWzBdKSB7CisJCWNhc2UgJ20nOgorCQljYXNlICdNJzoKKwkJCXR1bmVyX2RiZygiaW5zbW9kIGZpeHVwOiBOVFNDID0+IE5UU0MtTVxuIik7CisJCQl0LT5zdGQgPSBWNEwyX1NURF9OVFNDX007CisJCQlicmVhazsKKwkJY2FzZSAnaic6CisJCWNhc2UgJ0onOgorCQkJdHVuZXJfZGJnKCJpbnNtb2QgZml4dXA6IE5UU0MgPT4gTlRTQ19NX0pQXG4iKTsKKwkJCXQtPnN0ZCA9IFY0TDJfU1REX05UU0NfTV9KUDsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCS8qIGRlZmF1bHQgcGFyYW1ldGVyLCBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXR1bmVyX2luZm8oIm50c2M9IGFyZ3VtZW50IG5vdCByZWNvZ25pc2VkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB0dW5lcl9zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBsb25nIGZyZXEsIGZyZXFfZnJhY3Rpb247CisJY29uc3QgY2hhciAqcDsKKworCXN3aXRjaCAodC0+bW9kZSkgeworCQljYXNlIFY0TDJfVFVORVJfUkFESU86IAkgICAgcCA9ICJyYWRpbyI7IGJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfQU5BTE9HX1RWOiAgcCA9ICJhbmFsb2cgVFYiOyBicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX0RJR0lUQUxfVFY6IHAgPSAiZGlnaXRhbCBUViI7IGJyZWFrOworCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOworCX0KKwlpZiAodC0+bW9kZSA9PSBWNEwyX1RVTkVSX1JBRElPKSB7CisJCWZyZXEgPSB0LT5mcmVxIC8gMTYwMDA7CisJCWZyZXFfZnJhY3Rpb24gPSAodC0+ZnJlcSAlIDE2MDAwKSAqIDEwMCAvIDE2MDAwOworCX0gZWxzZSB7CisJCWZyZXEgPSB0LT5mcmVxIC8gMTY7CisJCWZyZXFfZnJhY3Rpb24gPSAodC0+ZnJlcSAlIDE2KSAqIDEwMCAvIDE2OworCX0KKwl0dW5lcl9pbmZvKCJUdW5lciBtb2RlOiAgICAgICVzXG4iLCBwKTsKKwl0dW5lcl9pbmZvKCJGcmVxdWVuY3k6ICAgICAgICVsdS4lMDJsdSBNSHpcbiIsIGZyZXEsIGZyZXFfZnJhY3Rpb24pOworCXR1bmVyX2luZm8oIlN0YW5kYXJkOiAgICAgICAgMHglMDhsbHhcbiIsIHQtPnN0ZCk7CisJaWYgKHQtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgeworCQlpZiAodC0+aGFzX3NpZ25hbCkgeworCQkJdHVuZXJfaW5mbygiU2lnbmFsIHN0cmVuZ3RoOiAlZFxuIiwgdC0+aGFzX3NpZ25hbChjbGllbnQpKTsKKwkJfQorCQlpZiAodC0+aXNfc3RlcmVvKSB7CisJCQl0dW5lcl9pbmZvKCJTdGVyZW86ICAgICAgICAgICVzXG4iLCB0LT5pc19zdGVyZW8oY2xpZW50KSA/ICJ5ZXMiIDogIm5vIik7CisJCX0KKwl9Cit9CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIHN0YXRpYyB2YXIgVXNlZCBvbmx5IGluIHR1bmVyX2F0dGFjaCBhbmQgdHVuZXJfcHJvYmUgKi8KQEAgLTM1Miw2ICs0MjAsMTEgQEAKIAl0LT5yYWRpb19pZjIgPSAxMDcwMCAqIDEwMDA7CS8qIDEwLjdNSHogLSBGTSByYWRpbyAqLwogCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCXQtPm1vZGVfbWFzayA9IFRfVU5JTklUSUFMSVpFRDsKKwlpZiAodHVuZXJfZGVidWcpIHsKKwkJZGVidWcgPSB0dW5lcl9kZWJ1ZzsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0dW5lcjogdHVuZXJfZGVidWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDIuNi4xNy5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgInR1bmVyOiB1c2UgdGhlIGRlYnVnIG9wdGlvbiBpbnN0ZWFkLlxuIik7CisJfQogCiAJaWYgKHNob3dfaTJjKSB7CiAJCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzE2XTsKQEAgLTQ3OCw3ICs1NTEsOSBAQAogc3RhdGljIGludCB0dW5lcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1bnNpZ25lZCBpbnQgKmlhcmcgPSAoaW50ICopYXJnOworCisJaWYgKGRlYnVnPjEpCisJCXY0bF9pMmNfcHJpbnRfaW9jdGwoJih0LT5pMmMpLGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCS8qIC0tLSBjb25maWd1cmF0aW9uIC0tLSAqLwpAQCAtNTAxLDE4ICs1NzYsNiBAQAogCQkJCXQtPnN0YW5kYnkgKGNsaWVudCk7CiAJCQlicmVhazsKIAkJfQotCWNhc2UgQVVEQ19DT05GSUdfUElOTkFDTEU6Ci0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSAyOgotCQkJdHVuZXJfZGJnKCJwaW5uYWNsZSBwYWxcbiIpOwotCQkJdC0+cmFkaW9faWYyID0gMzMzMDAgKiAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXR1bmVyX2RiZygicGlubmFjbGUgbnRzY1xuIik7Ci0JCQl0LT5yYWRpb19pZjIgPSA0MTMwMCAqIDEwMDA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKIAljYXNlIFZJRElPQ1NBVURJTzoKIAkJaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ1NBVURJTyIpID09IEVJTlZBTCkKIAkJCXJldHVybiAwOwpAQCAtNTIzLDkgKzU4Niw2IEBACiAJCXR1bmVyX2RiZygiVklESU9DU0FVRElPIG5vdCBpbXBsZW1lbnRlZC5cbiIpOwogCiAJCWJyZWFrOwotCWNhc2UgTVNQX1NFVF9NQVRSSVg6Ci0JY2FzZSBUREE5ODg3X1NFVF9DT05GSUc6Ci0JCWJyZWFrOwogCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwogCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQogCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KQEAgLTcwOCwxMCArNzY4LDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JZGVmYXVsdDoKLQkJdHVuZXJfZGJnKCJVbmltcGxlbWVudGVkIElPQ1RMIDB4JTA4eChkaXI9JWQsdHA9JyVjJyxucj0lZCxzej0lZClcbiIsCi0JCQkJCSBjbWQsIF9JT0NfRElSKGNtZCksIF9JT0NfVFlQRShjbWQpLAotCQkJCQlfSU9DX05SKGNtZCksIF9JT0NfU0laRShjbWQpKTsKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCQl0dW5lcl9zdGF0dXMoY2xpZW50KTsKIAkJYnJlYWs7CiAJfQogCkBAIC03NDcsMTAgKzgwNSwxMCBAQAogCS5kZXRhY2hfY2xpZW50ID0gdHVuZXJfZGV0YWNoLAogCS5jb21tYW5kID0gdHVuZXJfY29tbWFuZCwKIAkuZHJpdmVyID0gewotCQkgICAubmFtZSA9ICJ0dW5lciIsCi0JCSAgIC5zdXNwZW5kID0gdHVuZXJfc3VzcGVuZCwKLQkJICAgLnJlc3VtZSA9IHR1bmVyX3Jlc3VtZSwKLQkJICAgfSwKKwkJLm5hbWUgICAgPSAidHVuZXIiLAorCQkuc3VzcGVuZCA9IHR1bmVyX3N1c3BlbmQsCisJCS5yZXN1bWUgID0gdHVuZXJfcmVzdW1lLAorCX0sCiB9Owogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKIAkubmFtZSA9ICIodHVuZXIgdW5zZXQpIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCmluZGV4IGUwYzlmZGIuLmU1ZmI3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwpAQCAtOCw2ICs4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogCitzdGF0aWMgaW50IG9mZnNldCA9IDA7Cittb2R1bGVfcGFyYW0ob2Zmc2V0LCBpbnQsIDA2NjYpOworTU9EVUxFX1BBUk1fREVTQyhvZmZzZXQsIkFsbG93cyB0byBzcGVjaWZ5IGFuIG9mZnNldCBmb3IgdHVuZXIiKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiB0diBzdGFuZGFyZCBzZWxlY3Rpb24gZm9yIFRlbWljIDQwNDYgRk01CkBAIC03NSwyNCArNzksMjAgQEAKICNkZWZpbmUgVFVORVJfUExMX0xPQ0tFRCAgIDB4NDAKICNkZWZpbmUgVFVORVJfU1RFUkVPX01LMyAgIDB4MDQKIAorI2RlZmluZSBUVU5FUl9NQVhfUkFOR0VTICAgMworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB0dW5lcnR5cGUKIHsKIAljaGFyICpuYW1lOwotCXVuc2lnbmVkIGNoYXIgVmVuZG9yOwotCXVuc2lnbmVkIGNoYXIgVHlwZTsKIAotCXVuc2lnbmVkIHNob3J0IHRocmVzaDE7ICAvKiAgYmFuZCBzd2l0Y2ggVkhGX0xPIDw9PiBWSEZfSEkgICovCi0JdW5zaWduZWQgc2hvcnQgdGhyZXNoMjsgIC8qICBiYW5kIHN3aXRjaCBWSEZfSEkgPD0+IFVIRiAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIFZIRl9MOwotCXVuc2lnbmVkIGNoYXIgVkhGX0g7Ci0JdW5zaWduZWQgY2hhciBVSEY7CisJaW50IGNvdW50OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIHNob3J0IHRocmVzaDsKKwkJdW5zaWduZWQgY2hhciBjYjsKKwl9IHJhbmdlc1tUVU5FUl9NQVhfUkFOR0VTXTsKIAl1bnNpZ25lZCBjaGFyIGNvbmZpZzsKLQl1bnNpZ25lZCBzaG9ydCBJRlBDb2ZmOyAvKiA2MjIuND0xNiozOC45MCBNSHogUEFMLAotCQkJCSAgIDczMiAgPTE2KjQ1Ljc1IE5UU0NpLAotCQkJCSAgIDk0MCAgPTE2KjU4Ljc1IE5UU0MtSmFwYW4KLQkJCQkgICA3MDQgID0xNio0NCAgICBBVFNDICovCiB9OwogCiAvKgpAQCAtMTAyLDE1OCArMTAyLDY5NiBAQAogICovCiBzdGF0aWMgc3RydWN0IHR1bmVydHlwZSB0dW5lcnNbXSA9IHsKIAkvKiAwLTkgKi8KLQl7ICJUZW1pYyBQQUwgKDQwMDIgRkg1KSIsIFRFTUlDLCBQQUwsCi0JICAxNioxNDAuMjUsMTYqNDYzLjI1LDB4MDIsMHgwNCwweDAxLDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIFBBTF9JIChGSTEyNDYgYW5kIGNvbXBhdGlibGVzKSIsIFBoaWxpcHMsIFBBTF9JLAotCSAgMTYqMTQwLjI1LDE2KjQ2My4yNSwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0JeyAiUGhpbGlwcyBOVFNDIChGSTEyMzYsRk0xMjM2IGFuZCBjb21wYXRpYmxlcykiLCBQaGlsaXBzLCBOVFNDLAotCSAgMTYqMTU3LjI1LDE2KjQ1MS4yNSwweEEwLDB4OTAsMHgzMCwweDhlLDczMn0sCi0JeyAiUGhpbGlwcyAoU0VDQU0rUEFMX0JHKSAoRkkxMjE2TUYsIEZNMTIxNk1GLCBGUjEyMTZNRikiLCBQaGlsaXBzLCBTRUNBTSwKLQkgIDE2KjE2OC4yNSwxNio0NDcuMjUsMHhBNywweDk3LDB4MzcsMHg4ZSw2MjN9LAotCXsgIk5vVHVuZXIiLCBOb1R1bmVyLCBOT1RVTkVSLAotCSAgMCwwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JeyAiUGhpbGlwcyBQQUxfQkcgKEZJMTIxNiBhbmQgY29tcGF0aWJsZXMpIiwgUGhpbGlwcywgUEFMLAotCSAgMTYqMTY4LjI1LDE2KjQ0Ny4yNSwweEEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0JeyAiVGVtaWMgTlRTQyAoNDAzMiBGWTUpIiwgVEVNSUMsIE5UU0MsCi0JICAxNioxNTcuMjUsMTYqNDYzLjI1LDB4MDIsMHgwNCwweDAxLDB4OGUsNzMyfSwKLQl7ICJUZW1pYyBQQUxfSSAoNDA2MiBGWTUpIiwgVEVNSUMsIFBBTF9JLAotCSAgMTYqMTcwLjAwLDE2KjQ1MC4wMCwweDAyLDB4MDQsMHgwMSwweDhlLDYyM30sCi0JeyAiVGVtaWMgTlRTQyAoNDAzNiBGWTUpIiwgVEVNSUMsIE5UU0MsCi0JICAxNioxNTcuMjUsMTYqNDYzLjI1LDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLQl7ICJBbHBzIEhTQkgxIiwgVEVNSUMsIE5UU0MsCi0JICAxNioxMzcuMjUsMTYqMzg1LjI1LDB4MDEsMHgwMiwweDA4LDB4OGUsNzMyfSwKKwlbVFVORVJfVEVNSUNfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMICg0MDAyIEZINSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxfSV0gPSB7IC8qIFBoaWxpcHMgUEFMX0kgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTF9JIChGSTEyNDYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9QSElMSVBTX05UU0NdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIE5UU0MgKEZJMTIzNixGTTEyMzYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ1MS4yNSAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9QSElMSVBTX1NFQ0FNXSA9IHsgLyogUGhpbGlwcyBTRUNBTSAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgKFNFQ0FNK1BBTF9CRykgKEZJMTIxNk1GLCBGTTEyMTZNRiwgRlIxMjE2TUYpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4YTcsIH0sCisJCQl7IDE2ICogNDQ3LjI1IC8qTUh6Ki8sIDB4OTcsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzcsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0FCU0VOVF0gPSB7IC8qIFR1bmVyIEFic2VudCAqLworCQkubmFtZSAgID0gIk5vVHVuZXIiLAorCQkuY291bnQgID0gMSwKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMCwgMHgwMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4MDAsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0JHIChGSTEyMTYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2OC4yNSAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ0Ny4yNSAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9URU1JQ19OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLworCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQwMzIgRlk1KSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDA0LCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDAxLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9URU1JQ19QQUxfSV0gPSB7IC8qIFRFTUlDIFBBTF9JICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0kgKDQwNjIgRlk1KSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDA0LCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDAxLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9URU1JQ180MDM2Rlk1X05UU0NdID0geyAvKiBURU1JQyBOVFNDICovCisJCS5uYW1lICAgPSAiVGVtaWMgTlRTQyAoNDAzNiBGWTUpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0FMUFNfVFNCSDFfTlRTQ10gPSB7IC8qIFRFTUlDIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJBbHBzIEhTQkgxIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCiAKIAkvKiAxMC0xOSAqLwotCXsgIkFscHMgVFNCRTEiLCBURU1JQywgUEFMLAotCSAgMTYqMTM3LjI1LDE2KjM4NS4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDczMn0sCi0JeyAiQWxwcyBUU0JCNSIsIEFscHMsIFBBTF9JLCAvKiB0ZXN0ZWQgKFVLIFVIRikgd2l0aCBNb2R1bGFydGVjaCBNTTIwNSAqLwotCSAgMTYqMTMzLjI1LDE2KjM1MS4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDYzMn0sCi0JeyAiQWxwcyBUU0JFNSIsIEFscHMsIFBBTCwgLyogdW50ZXN0ZWQgLSBkYXRhIHNoZWV0IGd1ZXNzLiBPbmx5IElGIGRpZmZlcnMuICovCi0JICAxNioxMzMuMjUsMTYqMzUxLjI1LDB4MDEsMHgwMiwweDA4LDB4OGUsNjIyfSwKLQl7ICJBbHBzIFRTQkM1IiwgQWxwcywgUEFMLCAvKiB1bnRlc3RlZCAtIGRhdGEgc2hlZXQgZ3Vlc3MuIE9ubHkgSUYgZGlmZmVycy4gKi8KLQkgIDE2KjEzMy4yNSwxNiozNTEuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MDh9LAotCXsgIlRlbWljIFBBTF9CRyAoNDAwNkZINSkiLCBURU1JQywgUEFMLAotCSAgMTYqMTcwLjAwLDE2KjQ1MC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0JeyAiQWxwcyBUU0NINiIsIEFscHMsIE5UU0MsCi0JICAxNioxMzcuMjUsMTYqMzg1LjI1LDB4MTQsMHgxMiwweDExLDB4OGUsNzMyfSwKLQl7ICJUZW1pYyBQQUxfREsgKDQwMTYgRlk1KSIsIFRFTUlDLCBQQUwsCi0JICAxNioxNjguMjUsMTYqNDU2LjI1LDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIE5UU0NfTSAoTUsyKSIsIFBoaWxpcHMsIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLQl7ICJUZW1pYyBQQUxfSSAoNDA2NiBGWTUpIiwgVEVNSUMsIFBBTF9JLAotCSAgMTYqMTY5LjAwLCAxNio0NTQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJUZW1pYyBQQUwqIGF1dG8gKDQwMDYgRk41KSIsIFRFTUlDLCBQQUwsCi0JICAxNioxNjkuMDAsIDE2KjQ1NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCVtUVU5FUl9BTFBTX1RTQkUxX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIkFscHMgVFNCRTEiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiAzODUuMjUgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfQUxQU19UU0JCNV9QQUxfSV0gPSB7IC8qIEFscHMgUEFMX0kgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQkI1IiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogMzUxLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0FMUFNfVFNCRTVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQkU1IiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogMzUxLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0FMUFNfVFNCQzVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQkM1IiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogMzUxLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1RFTUlDXzQwMDZGSDVfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0JHICg0MDA2Rkg1KSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9BTFBTX1RTSEM2X05UU0NdID0geyAvKiBBbHBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQ0g2IiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MTQsIH0sCisJCQl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MTIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MTEsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1RFTUlDX1BBTF9ES10gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESyAoNDAxNiBGWTUpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDU2LjI1IC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1BISUxJUFNfTlRTQ19NXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBOVFNDX00gKE1LMikiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSV0gPSB7IC8qIFRFTUlDIFBBTF9JICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0kgKDQwNjYgRlk1KSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2OS4wMCAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTCogYXV0byAoNDAwNiBGTjUpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTY5LjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCiAKIAkvKiAyMC0yOSAqLwotCXsgIlRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkiLCBURU1JQywgUEFMLAotCSAgMTYqMTQxLjAwLCAxNio0NjQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJUZW1pYyBOVFNDICg0MDM5IEZSNSkiLCBURU1JQywgTlRTQywKLQkgIDE2KjE1OC4wMCwgMTYqNDUzLjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDczMn0sCi0JeyAiVGVtaWMgUEFML1NFQ0FNIG11bHRpICg0MDQ2IEZNNSkiLCBURU1JQywgUEFMLAotCSAgMTYqMTY5LjAwLCAxNio0NTQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIFBBTF9ESyAoRkkxMjU2IGFuZCBjb21wYXRpYmxlcykiLCBQaGlsaXBzLCBQQUwsCi0JICAxNioxNzAuMDAsMTYqNDUwLjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2TUUpIiwgUGhpbGlwcywgUEFMLAotCSAgMTYqMTcwLjAwLDE2KjQ1MC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0JeyAiTEcgUEFMX0krRk0gKFRBUEMtSTAwMUQpIiwgTEdJTk5PVEVLLCBQQUxfSSwKLQkgIDE2KjE3MC4wMCwxNio0NTAuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotCXsgIkxHIFBBTF9JIChUQVBDLUk3MDFEKSIsIExHSU5OT1RFSywgUEFMX0ksCi0JICAxNioxNzAuMDAsMTYqNDUwLjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJMRyBOVFNDK0ZNIChUUEk4TlNSMDFGKSIsIExHSU5OT1RFSywgTlRTQywKLQkgIDE2KjIxMC4wMCwxNio0OTcuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotCXsgIkxHIFBBTF9CRytGTSAoVFBJOFBTQjAxRCkiLCBMR0lOTk9URUssIFBBTCwKLQkgIDE2KjE3MC4wMCwxNio0NTAuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotCXsgIkxHIFBBTF9CRyAoVFBJOFBTQjExRCkiLCBMR0lOTk9URUssIFBBTCwKLQkgIDE2KjE3MC4wMCwxNio0NTAuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCVtUVU5FUl9URU1JQ180MDA5RlI1X1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLworCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQwMzkgRlI1KSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE1OC4wMCAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ1My4wMCAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9URU1JQ180MDQ2Rk01XSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFML1NFQ0FNIG11bHRpICg0MDQ2IEZNNSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNjkuMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxfREtdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0RLIChGSTEyNTYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9QSElMSVBTX0ZRMTIxNk1FXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2TUUpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0xHX1BBTF9JX0ZNXSA9IHsgLyogTEdJTk5PVEVLIFBBTF9JICovCisJCS5uYW1lICAgPSAiTEcgUEFMX0krRk0gKFRBUEMtSTAwMUQpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0xHX1BBTF9JXSA9IHsgLyogTEdJTk5PVEVLIFBBTF9JICovCisJCS5uYW1lICAgPSAiTEcgUEFMX0kgKFRBUEMtSTcwMUQpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0xHX05UU0NfRk1dID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLworCQkubmFtZSAgID0gIkxHIE5UU0MrRk0gKFRQSThOU1IwMUYpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMjEwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDk3LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0xHX1BBTF9GTV0gPSB7IC8qIExHSU5OT1RFSyBQQUwgKi8KKwkJLm5hbWUgICA9ICJMRyBQQUxfQkcrRk0gKFRQSThQU0IwMUQpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX0xHX1BBTF0gPSB7IC8qIExHSU5OT1RFSyBQQUwgKi8KKwkJLm5hbWUgICA9ICJMRyBQQUxfQkcgKFRQSThQU0IxMUQpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCiAKIAkvKiAzMC0zOSAqLwotCXsgIlRlbWljIFBBTCogYXV0byArIEZNICg0MDA5IEZONSkiLCBURU1JQywgUEFMLAotCSAgMTYqMTQxLjAwLCAxNio0NjQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJTSEFSUCBOVFNDX0pQICgyVTVKRjU1NDApIiwgU0hBUlAsIE5UU0MsIC8qIDk0MD0xNio1OC43NSBOVFNDQEphcGFuICovCi0JICAxNioxMzcuMjUsMTYqMzE3LjI1LDB4MDEsMHgwMiwweDA4LDB4OGUsOTQwIH0sCi0JeyAiU2Ftc3VuZyBQQUwgVENQTTkwOTFQRDI3IiwgU2Ftc3VuZywgUEFMLCAvKiBmcm9tIHNvdXJjZWZvcmdlIHYzdHYgKi8KLQkgIDE2KjE2OSwxNio0NjQsMHhBMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotCXsgIk1UMjB4eCB1bml2ZXJzYWwiLCBNaWNyb3R1bmUsIFBBTHxOVFNDLAorCVtUVU5FUl9URU1JQ180MDA5Rk41X01VTFRJX1BBTF9GTV0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTCogYXV0byArIEZNICg0MDA5IEZONSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0NdID0geyAvKiBTSEFSUCBOVFNDICovCisJCS5uYW1lICAgPSAiU0hBUlAgTlRTQ19KUCAoMlU1SkY1NTQwKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDEzNy4yNSAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDMxNy4yNSAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9TYW1zdW5nX1BBTF9UQ1BNOTA5MVBEMjddID0geyAvKiBTYW1zdW5nIFBBTCAqLworCQkubmFtZSAgID0gIlNhbXN1bmcgUEFMIFRDUE05MDkxUEQyNyIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2OSAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ2NCAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9NVDIwMzJdID0geyAvKiBNaWNyb3R1bmUgUEFMfE5UU0MgKi8KKwkJLm5hbWUgICA9ICJNVDIweHggdW5pdmVyc2FsIiwKIAkgIC8qIHNlZSBtdDIweHguYyBmb3IgZGV0YWlscyAqLyB9LAotCXsgIlRlbWljIFBBTF9CRyAoNDEwNiBGSDUpIiwgVEVNSUMsIFBBTCwKLQkgIDE2KjE0MS4wMCwgMTYqNDY0LjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0JeyAiVGVtaWMgUEFMX0RLL1NFQ0FNX0wgKDQwMTIgRlk1KSIsIFRFTUlDLCBQQUwsCi0JICAxNioxNDAuMjUsIDE2KjQ2My4yNSwgMHgwMiwweDA0LDB4MDEsMHg4ZSw2MjN9LAotCXsgIlRlbWljIE5UU0MgKDQxMzYgRlk1KSIsIFRFTUlDLCBOVFNDLAotCSAgMTYqMTU4LjAwLCAxNio0NTMuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLQl7ICJMRyBQQUwgKG5ld2VyIFRBUEMgc2VyaWVzKSIsIExHSU5OT1RFSywgUEFMLAotCSAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKSIsIFBoaWxpcHMsIFBBTCwKLQkgIDE2KjE1OC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw2MjMgfSwKLQl7ICJMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykiLCBMR0lOTk9URUssIE5UU0MsCi0JICAxNioxNzAuMDAsIDE2KjQ1MC4wMCwgMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzJ9LAorCVtUVU5FUl9URU1JQ180MTA2Rkg1XSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0JHICg0MTA2IEZINSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfVEVNSUNfNDAxMkZZNV0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESy9TRUNBTV9MICg0MDEyIEZZNSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfVEVNSUNfNDEzNkZZNV0gPSB7IC8qIFRFTUlDIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJUZW1pYyBOVFNDICg0MTM2IEZZNSkiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NTMuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfTEdfUEFMX05FV19UQVBDXSA9IHsgLyogTEdJTk5PVEVLIFBBTCAqLworCQkubmFtZSAgID0gIkxHIFBBTCAobmV3ZXIgVEFQQyBzZXJpZXMpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE1OC4wMCAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9MR19OVFNDX05FV19UQVBDXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNzAuMDAgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKIAogCS8qIDQwLTQ5ICovCi0JeyAiSElUQUNISSBWNy1KMTgwQVQiLCBISVRBQ0hJLCBOVFNDLAotCSAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4OGUsOTQwIH0sCi0JeyAiUGhpbGlwcyBQQUxfTUsgKEZJMTIxNiBNSykiLCBQaGlsaXBzLCBQQUwsCi0JICAxNioxNDAuMjUsMTYqNDYzLjI1LDB4MDEsMHhjMiwweGNmLDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIDEyMzZEIEFUU0MvTlRTQyBkYXVsIGluIiwgUGhpbGlwcywgQVRTQywKLQkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotCXsgIlBoaWxpcHMgTlRTQyBNSzMgKEZNMTIzNk1LMyBvciBGTTEyMzYvRikiLCBQaGlsaXBzLCBOVFNDLAotCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDczMn0sCi0JeyAiUGhpbGlwcyA0IGluIDEgKEFUSSBUViBXb25kZXIgUHJvL0NvbmV4YW50KSIsIFBoaWxpcHMsIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyfSwKLQl7ICJNaWNyb3R1bmUgNDA0OSBGTTUiLCBNaWNyb3R1bmUsIFBBTCwKLQkgIDE2KjE0MS4wMCwxNio0NjQuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotCXsgIlBhbmFzb25pYyBWUDI3cy9FTkdFNDMyNEQiLCBQYW5hc29uaWMsIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4MDEsMHgwMiwweDA4LDB4Y2UsOTQwfSwKLQl7ICJMRyBOVFNDIChUQVBFIHNlcmllcykiLCBMR0lOTk9URUssIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyIH0sCi0JeyAiVGVubmEgVE5GIDg4MzEgQkdGRikiLCBQaGlsaXBzLCBQQUwsCi0JICAxNioxNjEuMjUsMTYqNDYzLjI1LDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLQl7ICJNaWNyb3R1bmUgNDA0MiBGSTUgQVRTQy9OVFNDIGR1YWwgaW4iLCBNaWNyb3R1bmUsIE5UU0MsCi0JICAxNioxNjIuMDAsMTYqNDU3LjAwLDB4YTIsMHg5NCwweDMxLDB4OGUsNzMyfSwKKwlbVFVORVJfSElUQUNISV9OVFNDXSA9IHsgLyogSElUQUNISSBOVFNDICovCisJCS5uYW1lICAgPSAiSElUQUNISSBWNy1KMTgwQVQiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNzAuMDAgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxfTUtdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX01LIChGSTEyMTYgTUspIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTQwLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4YzIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4Y2YsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1BISUxJUFNfQVRTQ10gPSB7IC8qIFBoaWxpcHMgQVRTQyAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgMTIzNkQgQVRTQy9OVFNDIGR1YWwgaW4iLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19GTTEyMzZfTUszXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBOVFNDIE1LMyAoRk0xMjM2TUszIG9yIEZNMTIzNi9GKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9QSElMSVBTXzRJTjFdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIDQgaW4gMSAoQVRJIFRWIFdvbmRlciBQcm8vQ29uZXhhbnQpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX01JQ1JPVFVORV80MDQ5Rk01XSA9IHsgLyogTWljcm90dW5lIFBBTCAqLworCQkubmFtZSAgID0gIk1pY3JvdHVuZSA0MDQ5IEZNNSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE0MS4wMCAvKk1IeiovLCAweGEwLCB9LAorCQkJeyAxNiAqIDQ2NC4wMCAvKk1IeiovLCAweDkwLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9QQU5BU09OSUNfVlAyN10gPSB7IC8qIFBhbmFzb25pYyBOVFNDICovCisJCS5uYW1lICAgPSAiUGFuYXNvbmljIFZQMjdzL0VOR0U0MzI0RCIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHhjZSwKKwl9LAorCVtUVU5FUl9MR19OVFNDX1RBUEVdID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLworCQkubmFtZSAgID0gIkxHIE5UU0MgKFRBUEUgc2VyaWVzKSIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9UTkZfODgzMUJHRkZdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlRlbm5hIFRORiA4ODMxIEJHRkYpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTYxLjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJCQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX01JQ1JPVFVORV80MDQyRkk1XSA9IHsgLyogTWljcm90dW5lIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJNaWNyb3R1bmUgNDA0MiBGSTUgQVRTQy9OVFNDIGR1YWwgaW4iLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNjIuMDAgLypNSHoqLywgMHhhMiwgfSwKKwkJCXsgMTYgKiA0NTcuMDAgLypNSHoqLywgMHg5NCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMSwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKIAogCS8qIDUwLTU5ICovCi0JeyAiVENMIDIwMDJOIiwgVENMLCBOVFNDLAotCSAgMTYqMTcyLjAwLDE2KjQ0OC4wMCwweDAxLDB4MDIsMHgwOCwweDhlLDczMn0sCi0JeyAiUGhpbGlwcyBQQUwvU0VDQU1fRCAoRk0gMTI1NiBJLUgzKSIsIFBoaWxpcHMsIFBBTCwKLQkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw2MjMgfSwKLQl7ICJUaG9tc29uIEREVCA3NjEwIChBVFNDL05UU0MpIiwgVEhPTVNPTiwgQVRTQywKLQkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHgzOSwweDNhLDB4M2MsMHg4ZSw3MzJ9LAotCXsgIlBoaWxpcHMgRlExMjg2IiwgUGhpbGlwcywgTlRTQywKLQkgIDE2KjE2MC4wMCwxNio0NTQuMDAsMHg0MSwweDQyLDB4MDQsMHg4ZSw5NDB9LCAvKiBVSEYgYmFuZCB1bnRlc3RlZCAqLwotCXsgInRkYTgyOTArNzUiLCBQaGlsaXBzLCBQQUx8TlRTQywKKwlbVFVORVJfVENMXzIwMDJOXSA9IHsgLyogVENMIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJUQ0wgMjAwMk4iLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNzIuMDAgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiA0NDguMDAgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19GTTEyNTZfSUgzXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTV9EIChGTSAxMjU2IEktSDMpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1RIT01TT05fRFRUNzYxMF0gPSB7IC8qIFRIT01TT04gQVRTQyAqLworCQkubmFtZSAgID0gIlRob21zb24gRFRUIDc2MTAgKEFUU0MvTlRTQykiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHgzOSwgfSwKKwkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHgzYSwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzYywgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19GUTEyODZdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZRMTI4NiIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDQxLCB9LAorCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDQyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9QSElMSVBTX1REQTgyOTBdID0geyAvKiBQaGlsaXBzIFBBTHxOVFNDICovCisJCS5uYW1lICAgPSAidGRhODI5MCs3NSIsCiAJICAvKiBzZWUgdGRhODI5MC5jIGZvciBkZXRhaWxzICovIH0sCi0JeyAiVENMIDIwMDJNQiIsIFRDTCwgUEFMLAotCSAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4Y2UsNjIzfSwKLQl7ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2QU1FIE1LNCkiLCBQaGlsaXBzLCBQQUwsCi0JICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4Y2UsNjIzIH0sCi0JeyAiUGhpbGlwcyBGUTEyMzZBIE1LNCIsIFBoaWxpcHMsIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyIH0sCi0JeyAiWW1lYyBUVmlzaW9uIFRWRi04NTMxTUYvODgzMU1GLzg3MzFNRiIsIFBoaWxpcHMsIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLQl7ICJZbWVjIFRWaXNpb24gVFZGLTU1MzNNRiIsIFBoaWxpcHMsIE5UU0MsCi0JICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyfSwKKwlbVFVORVJfVENMXzIwMDJNQl0gPSB7IC8qIFRDTCBQQUwgKi8KKwkJLm5hbWUgICA9ICJUQ0wgMjAwMk1CIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJCX0sCisJCS5jb25maWcgPSAweGNlLAorCX0sCisJW1RVTkVSX1BISUxJUFNfRlExMjE2QU1FX01LNF0gPSB7IC8qIFBoaWxpcHMgUEFMICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZRMTIxNkFNRSBNSzQpIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCisJCX0sCisJCS5jb25maWcgPSAweGNlLAorCX0sCisJW1RVTkVSX1BISUxJUFNfRlExMjM2QV9NSzRdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZRMTIzNkEgTUs0IiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDhlLAorCX0sCisJW1RVTkVSX1lNRUNfVFZGXzg1MzFNRl0gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLworCQkubmFtZSAgID0gIlltZWMgVFZpc2lvbiBUVkYtODUzMU1GLzg4MzFNRi84NzMxTUYiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhhMCwgfSwKKwkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfWU1FQ19UVkZfNTUzM01GXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiWW1lYyBUVmlzaW9uIFRWRi01NTMzTUYiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKIAogCS8qIDYwLTY5ICovCi0JeyAiVGhvbXNvbiBERFQgNzYxMSAoQVRTQy9OVFNDKSIsIFRIT01TT04sIEFUU0MsCi0JICAxNioxNTcuMjUsMTYqNDU0LjAwLDB4MzksMHgzYSwweDNjLDB4OGUsNzMyfSwKLQl7ICJUZW5hIFRORjk1MzMtRC9JRi9UTkY5NTMzLUIvREYiLCBQaGlsaXBzLCBQQUwsCi0JICAxNioxNjAuMjUsMTYqNDY0LjI1LDB4MDEsMHgwMiwweDA0LDB4OGUsNjIzfSwKLQl7ICJQaGlsaXBzIFRFQTU3NjdITiBGTSBSYWRpbyIsIFBoaWxpcHMsIFJBRElPLAorCVtUVU5FUl9USE9NU09OX0RUVDc2MVhdID0geyAvKiBUSE9NU09OIEFUU0MgKi8KKwkJLyogRFRUIDc2MTEgNzYxMUEgNzYxMiA3NjEzIDc2MTNBIDc2MTQgNzYxNSA3NjE1QSAqLworCQkubmFtZSAgID0gIlRob21zb24gRFRUIDc2MVggKEFUU0MvTlRTQykiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNDUuMjUgLypNSHoqLywgMHgzOSwgfSwKKwkJCXsgMTYgKiA0MTUuMjUgLypNSHoqLywgMHgzYSwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzYywgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfVEVOQV85NTMzX0RJXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJUZW5hIFRORjk1MzMtRC9JRi9UTkY5NTMzLUIvREYiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxNjAuMjUgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiA0NjQuMjUgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfVEVBNTc2N10gPSB7IC8qIFBoaWxpcHMgUkFESU8gKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFRFQTU3NjdITiBGTSBSYWRpbyIsCiAJICAvKiBzZWUgdGVhNTc2Ny5jIGZvciBkZXRhaWxzICovfSwKLQl7ICJQaGlsaXBzIEZNRDEyMTZNRSBNSzMgSHlicmlkIFR1bmVyIiwgUGhpbGlwcywgUEFMLAotCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDUxLDB4NTIsMHg1NCwweDg2LDYyMyB9LAotCXsgIkxHIFREVlMtSDA2MkYvVFVBNjAzNCIsIExHSU5OT1RFSywgQVRTQywKLQkgIDE2KjE2MC4wMCwxNio0NTUuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzJ9LAotCXsgIlltZWMgVFZGNjZUNS1CL0RGRiIsIFBoaWxpcHMsIFBBTCwKLQkgIDE2KjE2MC4yNSwxNio0NjQuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MjN9LAotCXsgIkxHIE5UU0MgKFRBTE4gbWluaSBzZXJpZXMpIiwgTEdJTk5PVEVLLCBOVFNDLAotCSAgMTYqMTM3LjI1LDE2KjM3My4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDczMiB9LAotCXsgIlBoaWxpcHMgVEQxMzE2IEh5YnJpZCBUdW5lciIsIFBoaWxpcHMsIFBBTCwKLQkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHhhMSwweGEyLDB4YTQsMHhjOCw2MjMgfSwKLQl7ICJQaGlsaXBzIFRVVjEyMzZEIEFUU0MvTlRTQyBkdWFsIGluIiwgUGhpbGlwcywgQVRTQywKLQkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHgwMSwweDAyLDB4MDQsMHhjZSw3MzIgfSwKLQl7ICJUZW5hIFRORiA1MzM1IE1GIiwgUGhpbGlwcywgTlRTQywKLQkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzIgfSwKKwlbVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZNRDEyMTZNRSBNSzMgSHlicmlkIFR1bmVyIiwKKwkJLmNvdW50ICA9IDMsCisJCS5yYW5nZXMgPSB7CisJCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4NTEsIH0sCisJCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4NTIsIH0sCisJCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4NTQsIH0sCisJCX0sCisJCS5jb25maWcgPSAweDg2LAorCX0sCisJW1RVTkVSX0xHX1REVlNfSDA2MkZdID0geyAvKiBMR0lOTk9URUsgQVRTQyAqLworCQkubmFtZSAgID0gIkxHIFREVlMtSDA2MkYvVFVBNjAzNCIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxIH0sCisJCQl7IDE2ICogNDU1LjAwIC8qTUh6Ki8sIDB4MDIgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkZdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlltZWMgVFZGNjZUNS1CL0RGRiIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4yNSAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ2NC4yNSAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorCVtUVU5FUl9MR19OVFNDX1RBTE5fTUlOSV0gPSB7IC8qIExHSU5OT1RFSyBOVFNDICovCisJCS5uYW1lICAgPSAiTEcgTlRTQyAoVEFMTiBtaW5pIHNlcmllcykiLAorCQkuY291bnQgID0gMywKKwkJLnJhbmdlcyA9IHsKKwkJCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgwMSwgfSwKKwkJCXsgMTYgKiAzNzMuMjUgLypNSHoqLywgMHgwMiwgfSwKKwkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwkJfSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKKwlbVFVORVJfUEhJTElQU19URDEzMTZdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgVEQxMzE2IEh5YnJpZCBUdW5lciIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweGExLCB9LAorCQkJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweGEyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweGE0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHhjOCwKKwl9LAorCVtUVU5FUl9QSElMSVBTX1RVVjEyMzZEXSA9IHsgLyogUGhpbGlwcyBBVFNDICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBUVVYxMjM2RCBBVFNDL05UU0MgZHVhbCBpbiIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHhjZSwKKwl9LAorCVtUVU5FUl9UTkZfNTMzNU1GXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiVGVuYSBUTkYgNTMzNSBNRiIsCisJCS5jb3VudCAgPSAzLAorCQkucmFuZ2VzID0geworCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAxLCB9LAorCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAorCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCQl9LAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAogfTsKIAogdW5zaWduZWQgY29uc3QgaW50IHR1bmVyX2NvdW50ID0gQVJSQVlfU0laRSh0dW5lcnMpOwpAQCAtMzA1LDIwICs4NDMsMTkgQEAKIAl1MTYgZGl2OwogCXN0cnVjdCB0dW5lcnR5cGUgKnR1bjsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKLQlpbnQgcmM7CisJaW50IHJjLCBJRlBDb2ZmLCBpOwogCiAJdHVuID0gJnR1bmVyc1t0LT50eXBlXTsKLQlpZiAoZnJlcSA8IHR1bi0+dGhyZXNoMSkgewotCQljb25maWcgPSB0dW4tPlZIRl9MOwotCQl0dW5lcl9kYmcoInR2OiBWSEYgbG93cmFuZ2VcbiIpOwotCX0gZWxzZSBpZiAoZnJlcSA8IHR1bi0+dGhyZXNoMikgewotCQljb25maWcgPSB0dW4tPlZIRl9IOwotCQl0dW5lcl9kYmcoInR2OiBWSEYgaGlnaCByYW5nZVxuIik7Ci0JfSBlbHNlIHsKLQkJY29uZmlnID0gdHVuLT5VSEY7Ci0JCXR1bmVyX2RiZygidHY6IFVIRiByYW5nZVxuIik7CisJZm9yIChpID0gMDsgaSA8IHR1bi0+Y291bnQ7IGkrKykgeworCQlpZiAoZnJlcSA+IHR1bi0+cmFuZ2VzW2ldLnRocmVzaCkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKIAl9Ci0KKwljb25maWcgPSB0dW4tPnJhbmdlc1tpXS5jYjsKKwkvKiAgaSA9PSAwIC0+IFZIRl9MTyAgKi8KKwkvKiAgaSA9PSAxIC0+IFZIRl9ISSAgKi8KKwkvKiAgaSA9PSAyIC0+IFVIRiAgICAgKi8KKwl0dW5lcl9kYmcoInR2OiByYW5nZSAlZFxuIixpKTsKIAogCS8qIHR2IG5vcm0gc3BlY2lmaWMgc3R1ZmYgZm9yIG11bHRpLW5vcm0gdHVuZXJzICovCiAJc3dpdGNoICh0LT50eXBlKSB7CkBAIC00MjAsNyArOTU3LDM3IEBACiAJICogZnJlcXVlbmN5IGluIGNhc2UgKHdhbnRlZCBmcmVxdWVuY3kgPCBjdXJyZW50IGZyZXF1ZW5jeSkuCiAJICovCiAKLQlkaXY9ZnJlcSArIHR1bi0+SUZQQ29mZjsKKwkvKiBJRlBDb2ZmID0gVmlkZW8gSW50ZXJtZWRpYXRlIEZyZXF1ZW5jeSAtIFZpZjoKKwkJOTQwICA9MTYqNTguNzUgIE5UU0MvSiAoSmFwYW4pCisJCTczMiAgPTE2KjQ1Ljc1ICBNL04gU1RECisJCTcwNCAgPTE2KjQ0ICAgICBBVFNDIChhdCBEVkIgY29kZSkKKwkJNjMyICA9MTYqMzkuNTAgIEkgVS5LLgorCQk2MjIuND0xNiozOC45MCAgQi9HIEQvSyBJLCBMIFNURAorCQk1OTIgID0xNiozNy4wMCAgRCBDaGluYQorCQk1OTAgID0xNi4zNi44NzUgQiBBdXN0cmFsaWEKKwkJNTQzLjI9MTYqMzMuOTUgIEwnIFNURAorCQkxNzEuMj0xNioxMC43MCAgRk0gUmFkaW8gKGF0IHNldF9yYWRpb19mcmVxKQorCSovCisKKwlpZiAodC0+c3RkID09IFY0TDJfU1REX05UU0NfTV9KUCkgeworCQlJRlBDb2ZmID0gOTQwOworCX0gZWxzZSBpZiAoKHQtPnN0ZCAmIFY0TDJfU1REX01OKSAmJgorCQkgICEodC0+c3RkICYgflY0TDJfU1REX01OKSkgeworCQlJRlBDb2ZmID0gNzMyOworCX0gZWxzZSBpZiAodC0+c3RkID09IFY0TDJfU1REX1NFQ0FNX0xDKSB7CisJCUlGUENvZmYgPSA1NDM7CisJfSBlbHNlIHsKKwkJSUZQQ29mZiA9IDYyMzsKKwl9CisKKwlkaXY9ZnJlcSArIElGUENvZmYgKyBvZmZzZXQ7CisKKwl0dW5lcl9kYmcoIkZyZXE9ICVkLiUwMmQgTUh6LCBWX0lGPSVkLiUwMmQgTUh6LCBPZmZzZXQ9JWQuJTAyZCBNSHosIGRpdj0lMGRcbiIsCisJCQkJCWZyZXEgLyAxNiwgZnJlcSAlIDE2ICogMTAwIC8gMTYsCisJCQkJCUlGUENvZmYgLyAxNiwgSUZQQ29mZiAlIDE2ICogMTAwIC8gMTYsCisJCQkJCW9mZnNldCAvIDE2LCBvZmZzZXQgJSAxNiAqIDEwMCAvIDE2LAorCQkJCQlkaXYpOworCiAJaWYgKHQtPnR5cGUgPT0gVFVORVJfUEhJTElQU19TRUNBTSAmJiBmcmVxIDwgdC0+ZnJlcSkgewogCQlidWZmZXJbMF0gPSB0dW4tPmNvbmZpZzsKIAkJYnVmZmVyWzFdID0gY29uZmlnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCAwMjkyYzVhLi5iNTgyOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAidHZhdWRpby5oIgogCkBAIC00NiwxNyArNDcsNiBAQAogCiAjZGVmaW5lIFVOU0VUICAgICgtMVUpCiAKLSNkZWZpbmUgdHZhdWRpb19pbmZvKGZtdCwgYXJnLi4uKSBkbyB7XAotCXByaW50ayhLRVJOX0lORk8gInR2YXVkaW8gJWQtJTA0eDogIiBmbXQsIFwKLQkJCWNoaXAtPmMuYWRhcHRlci0+bnIsIGNoaXAtPmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgdHZhdWRpb193YXJuKGZtdCwgYXJnLi4uKSBkbyB7XAotCXByaW50ayhLRVJOX1dBUk5JTkcgInR2YXVkaW8gJWQtJTA0eDogIiBmbXQsIFwKLQkJCWNoaXAtPmMuYWRhcHRlci0+bnIsIGNoaXAtPmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgdHZhdWRpb19kYmcoZm10LCBhcmcuLi4pIGRvIHtcCi0JaWYgKGRlYnVnKSBcCi0JCXByaW50ayhLRVJOX0lORk8gInR2YXVkaW8gJWQtJTA0eDogIiBmbXQsIFwKLQkJCWNoaXAtPmMuYWRhcHRlci0+bnIsIGNoaXAtPmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogb3VyIHN0cnVjdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0xMzEsNyArMTIxLDcgQEAKIAkvKiBjdXJyZW50IHNldHRpbmdzICovCiAJX191MTYgbGVmdCxyaWdodCx0cmVibGUsYmFzcyxtb2RlOwogCWludCBwcmV2bW9kZTsKLQlpbnQgbm9ybTsKKwlpbnQgcmFkaW87CiAKIAkvKiB0aHJlYWQgKi8KIAlwaWRfdCAgICAgICAgICAgICAgICB0cGlkOwpAQCAtMTQyLDggKzEzMiw2IEBACiAJaW50ICAgICAgICAgICAgICAgICAgd2F0Y2hfc3RlcmVvOwogfTsKIAotI2RlZmluZSBWSURFT19NT0RFX1JBRElPIDE2ICAgICAgLyogbm9ybSBtYWdpYyBmb3IgcmFkaW8gbW9kZSAqLwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBpMmMgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTE3MSwyMyArMTU5LDIzIEBACiAJdW5zaWduZWQgY2hhciBidWZmZXJbMl07CiAKIAlpZiAoLTEgPT0gc3ViYWRkcikgewotCQl0dmF1ZGlvX2RiZygiJXM6IGNoaXBfd3JpdGU6IDB4JXhcbiIsCisJCXY0bF9kYmcoMSwgJmNoaXAtPmMsICIlczogY2hpcF93cml0ZTogMHgleFxuIiwKIAkJCWNoaXAtPmMubmFtZSwgdmFsKTsKIAkJY2hpcC0+c2hhZG93LmJ5dGVzWzFdID0gdmFsOwogCQlidWZmZXJbMF0gPSB2YWw7CiAJCWlmICgxICE9IGkyY19tYXN0ZXJfc2VuZCgmY2hpcC0+YyxidWZmZXIsMSkpIHsKLQkJCXR2YXVkaW9fd2FybigiJXM6IEkvTyBlcnJvciAod3JpdGUgMHgleClcbiIsCisJCQl2NGxfd2FybigmY2hpcC0+YywgIiVzOiBJL08gZXJyb3IgKHdyaXRlIDB4JXgpXG4iLAogCQkJCWNoaXAtPmMubmFtZSwgdmFsKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0gZWxzZSB7Ci0JCXR2YXVkaW9fZGJnKCIlczogY2hpcF93cml0ZTogcmVnJWQ9MHgleFxuIiwKKwkJdjRsX2RiZygxLCAmY2hpcC0+YywgIiVzOiBjaGlwX3dyaXRlOiByZWclZD0weCV4XG4iLAogCQkJY2hpcC0+Yy5uYW1lLCBzdWJhZGRyLCB2YWwpOwogCQljaGlwLT5zaGFkb3cuYnl0ZXNbc3ViYWRkcisxXSA9IHZhbDsKIAkJYnVmZmVyWzBdID0gc3ViYWRkcjsKIAkJYnVmZmVyWzFdID0gdmFsOwogCQlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoJmNoaXAtPmMsYnVmZmVyLDIpKSB7Ci0JCQl0dmF1ZGlvX3dhcm4oIiVzOiBJL08gZXJyb3IgKHdyaXRlIHJlZyVkPTB4JXgpXG4iLAorCQkJdjRsX3dhcm4oJmNoaXAtPmMsICIlczogSS9PIGVycm9yICh3cml0ZSByZWclZD0weCV4KVxuIiwKIAkJCWNoaXAtPmMubmFtZSwgc3ViYWRkciwgdmFsKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMjEyLDExICsyMDAsMTEgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlcjsKIAogCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmY2hpcC0+YywmYnVmZmVyLDEpKSB7Ci0JCXR2YXVkaW9fd2FybigiJXM6IEkvTyBlcnJvciAocmVhZClcbiIsCisJCXY0bF93YXJuKCZjaGlwLT5jLCAiJXM6IEkvTyBlcnJvciAocmVhZClcbiIsCiAJCWNoaXAtPmMubmFtZSk7CiAJCXJldHVybiAtMTsKIAl9Ci0JdHZhdWRpb19kYmcoIiVzOiBjaGlwX3JlYWQ6IDB4JXhcbiIsY2hpcC0+Yy5uYW1lLCBidWZmZXIpOworCXY0bF9kYmcoMSwgJmNoaXAtPmMsICIlczogY2hpcF9yZWFkOiAweCV4XG4iLGNoaXAtPmMubmFtZSwgYnVmZmVyKTsKIAlyZXR1cm4gYnVmZmVyOwogfQogCkBAIC0yMzEsMTAgKzIxOSwxMCBAQAogCXdyaXRlWzBdID0gc3ViYWRkcjsKIAogCWlmICgyICE9IGkyY190cmFuc2ZlcihjaGlwLT5jLmFkYXB0ZXIsbXNncywyKSkgewotCQl0dmF1ZGlvX3dhcm4oIiVzOiBJL08gZXJyb3IgKHJlYWQyKVxuIiwgY2hpcC0+Yy5uYW1lKTsKKwkJdjRsX3dhcm4oJmNoaXAtPmMsICIlczogSS9PIGVycm9yIChyZWFkMilcbiIsIGNoaXAtPmMubmFtZSk7CiAJCXJldHVybiAtMTsKIAl9Ci0JdHZhdWRpb19kYmcoIiVzOiBjaGlwX3JlYWQyOiByZWclZD0weCV4XG4iLAorCXY0bF9kYmcoMSwgJmNoaXAtPmMsICIlczogY2hpcF9yZWFkMjogcmVnJWQ9MHgleFxuIiwKIAkJY2hpcC0+Yy5uYW1lLCBzdWJhZGRyLHJlYWRbMF0pOwogCXJldHVybiByZWFkWzBdOwogfQpAQCAtMjQ3LDcgKzIzNSw3IEBACiAJCXJldHVybiAwOwogCiAJLyogdXBkYXRlIG91ciBzaGFkb3cgcmVnaXN0ZXIgc2V0OyBwcmludCBieXRlcyBpZiAoZGVidWcgPiAwKSAqLwotCXR2YXVkaW9fZGJnKCIlczogY2hpcF9jbWQoJXMpOiByZWc9JWQsIGRhdGE6IiwKKwl2NGxfZGJnKDEsICZjaGlwLT5jLCAiJXM6IGNoaXBfY21kKCVzKTogcmVnPSVkLCBkYXRhOiIsCiAJCWNoaXAtPmMubmFtZSwgbmFtZSxjbWQtPmJ5dGVzWzBdKTsKIAlmb3IgKGkgPSAxOyBpIDwgY21kLT5jb3VudDsgaSsrKSB7CiAJCWlmIChkZWJ1ZykKQEAgLTI1OSw3ICsyNDcsNyBAQAogCiAJLyogc2VuZCBkYXRhIHRvIHRoZSBjaGlwICovCiAJaWYgKGNtZC0+Y291bnQgIT0gaTJjX21hc3Rlcl9zZW5kKCZjaGlwLT5jLGNtZC0+Ynl0ZXMsY21kLT5jb3VudCkpIHsKLQkJdHZhdWRpb193YXJuKCIlczogSS9PIGVycm9yICglcylcbiIsIGNoaXAtPmMubmFtZSwgbmFtZSk7CisJCXY0bF93YXJuKCZjaGlwLT5jLCAiJXM6IEkvTyBlcnJvciAoJXMpXG4iLCBjaGlwLT5jLm5hbWUsIG5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOwpAQCAtMjg2LDcgKzI3NCw3IEBACiAKIAlkYWVtb25pemUoIiVzIiwgY2hpcC0+Yy5uYW1lKTsKIAlhbGxvd19zaWduYWwoU0lHVEVSTSk7Ci0JdHZhdWRpb19kYmcoIiVzOiB0aHJlYWQgc3RhcnRlZFxuIiwgY2hpcC0+Yy5uYW1lKTsKKwl2NGxfZGJnKDEsICZjaGlwLT5jLCAiJXM6IHRocmVhZCBzdGFydGVkXG4iLCBjaGlwLT5jLm5hbWUpOwogCiAJZm9yICg7OykgewogCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKQEAgLTI5OCwxMCArMjg2LDEwIEBACiAJCXRyeV90b19mcmVlemUoKTsKIAkJaWYgKGNoaXAtPmRvbmUgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKLQkJdHZhdWRpb19kYmcoIiVzOiB0aHJlYWQgd2FrZXVwXG4iLCBjaGlwLT5jLm5hbWUpOworCQl2NGxfZGJnKDEsICZjaGlwLT5jLCAiJXM6IHRocmVhZCB3YWtldXBcbiIsIGNoaXAtPmMubmFtZSk7CiAKIAkJLyogZG9uJ3QgZG8gYW55dGhpbmcgZm9yIHJhZGlvIG9yIGlmIG1vZGUgIT0gYXV0byAqLwotCQlpZiAoY2hpcC0+bm9ybSA9PSBWSURFT19NT0RFX1JBRElPIHx8IGNoaXAtPm1vZGUgIT0gMCkKKwkJaWYgKGNoaXAtPnJhZGlvIHx8IGNoaXAtPm1vZGUgIT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGhhdmUgYSBsb29rIHdoYXQncyBnb2luZyBvbiAqLwpAQCAtMzExLDcgKzI5OSw3IEBACiAJCW1vZF90aW1lcigmY2hpcC0+d3QsIGppZmZpZXMrMipIWik7CiAJfQogCi0JdHZhdWRpb19kYmcoIiVzOiB0aHJlYWQgZXhpdGluZ1xuIiwgY2hpcC0+Yy5uYW1lKTsKKwl2NGxfZGJnKDEsICZjaGlwLT5jLCAiJXM6IHRocmVhZCBleGl0aW5nXG4iLCBjaGlwLT5jLm5hbWUpOwogCWNvbXBsZXRlX2FuZF9leGl0KCZjaGlwLT50ZXhpdCwgMCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMjQsNyArMzEyLDcgQEAKIAlpZiAobW9kZSA9PSBjaGlwLT5wcmV2bW9kZSkKIAlyZXR1cm47CiAKLQl0dmF1ZGlvX2RiZygiJXM6IHRocmVhZCBjaGVja21vZGVcbiIsIGNoaXAtPmMubmFtZSk7CisJdjRsX2RiZygxLCAmY2hpcC0+YywgIiVzOiB0aHJlYWQgY2hlY2ttb2RlXG4iLCBjaGlwLT5jLm5hbWUpOwogCWNoaXAtPnByZXZtb2RlID0gbW9kZTsKIAogCWlmIChtb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQpAQCAtMzcxLDcgKzM1OSw3IEBACiAJaWYgKHZhbCAmIFREQTk4NDBfU1RfU1RFUkVPKQogCQltb2RlIHw9IFZJREVPX1NPVU5EX1NURVJFTzsKIAotCXR2YXVkaW9fZGJnICgidGRhOTg0MF9nZXRtb2RlKCk6IHJhdyBjaGlwIHJlYWQ6ICVkLCByZXR1cm46ICVkXG4iLAorCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJ0ZGE5ODQwX2dldG1vZGUoKTogcmF3IGNoaXAgcmVhZDogJWQsIHJldHVybjogJWRcbiIsCiAJCXZhbCwgbW9kZSk7CiAJcmV0dXJuIG1vZGU7CiB9CkBAIC02NjcsNyArNjU1LDcgQEAKIAkJbW9kZSB8PSBWSURFT19TT1VORF9TVEVSRU87CiAJaWYgKHZhbCAmIFREQTk4NzNfRFVBTCkKIAkJbW9kZSB8PSBWSURFT19TT1VORF9MQU5HMSB8IFZJREVPX1NPVU5EX0xBTkcyOwotCXR2YXVkaW9fZGJnICgidGRhOTg3M19nZXRtb2RlKCk6IHJhdyBjaGlwIHJlYWQ6ICVkLCByZXR1cm46ICVkXG4iLAorCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJ0ZGE5ODczX2dldG1vZGUoKTogcmF3IGNoaXAgcmVhZDogJWQsIHJldHVybjogJWRcbiIsCiAJCXZhbCwgbW9kZSk7CiAJcmV0dXJuIG1vZGU7CiB9CkBAIC02NzgsMTIgKzY2NiwxMiBAQAogCS8qCWludCBhZGpfZGF0YSA9IGNoaXAtPnNoYWRvdy5ieXRlc1tUREE5ODczX0FEKzFdIDsgKi8KIAogCWlmICgoc3dfZGF0YSAmIFREQTk4NzNfSU5QX01BU0spICE9IFREQTk4NzNfSU5URVJOQUwpIHsKLQkJdHZhdWRpb19kYmcoInRkYTk4NzNfc2V0bW9kZSgpOiBleHRlcm5hbCBpbnB1dFxuIik7CisJCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJ0ZGE5ODczX3NldG1vZGUoKTogZXh0ZXJuYWwgaW5wdXRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JdHZhdWRpb19kYmcoInRkYTk4NzNfc2V0bW9kZSgpOiBjaGlwLT5zaGFkb3cuYnl0ZXNbJWRdID0gJWRcbiIsIFREQTk4NzNfU1crMSwgY2hpcC0+c2hhZG93LmJ5dGVzW1REQTk4NzNfU1crMV0pOwotCXR2YXVkaW9fZGJnKCJ0ZGE5ODczX3NldG1vZGUoKTogc3dfZGF0YSAgPSAlZFxuIiwgc3dfZGF0YSk7CisJdjRsX2RiZygxLCAmY2hpcC0+YywgInRkYTk4NzNfc2V0bW9kZSgpOiBjaGlwLT5zaGFkb3cuYnl0ZXNbJWRdID0gJWRcbiIsIFREQTk4NzNfU1crMSwgY2hpcC0+c2hhZG93LmJ5dGVzW1REQTk4NzNfU1crMV0pOworCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJ0ZGE5ODczX3NldG1vZGUoKTogc3dfZGF0YSAgPSAlZFxuIiwgc3dfZGF0YSk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFZJREVPX1NPVU5EX01PTk86CkBAIC03MDQsNyArNjkyLDcgQEAKIAl9CiAKIAljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzNfU1csIHN3X2RhdGEpOwotCXR2YXVkaW9fZGJnKCJ0ZGE5ODczX3NldG1vZGUoKTogcmVxLiBtb2RlICVkOyBjaGlwX3dyaXRlOiAlZFxuIiwKKwl2NGxfZGJnKDEsICZjaGlwLT5jLCAidGRhOTg3M19zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgY2hpcF93cml0ZTogJWRcbiIsCiAJCW1vZGUsIHN3X2RhdGEpOwogfQogCkBAIC04NDMsNyArODMxLDcgQEAKIAkJY2hpcF93cml0ZShjaGlwLCBUREE5ODc0QV9TREFDT1NSLCAodGRhOTg3NGFfbW9kZSkgPyAweDgxOjB4ODApOwogCQljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzRBX0FPU1IsIDB4MDApOyAvKiBvciAweDEwICovCiAJfQotCXR2YXVkaW9fZGJnKCJ0ZGE5ODc0YV9zZXR1cCgpOiAlcyBbMHglMDJYXS5cbiIsCisJdjRsX2RiZygxLCAmY2hpcC0+YywgInRkYTk4NzRhX3NldHVwKCk6ICVzIFsweCUwMlhdLlxuIiwKIAkJdGRhOTg3NGFfbW9kZWxpc3RbdGRhOTg3NGFfU1REXS5uYW1lLHRkYTk4NzRhX1NURCk7CiAJcmV0dXJuIDE7CiB9CkBAIC04ODYsNyArODc0LDcgQEAKIAkJCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKIAl9CiAKLQl0dmF1ZGlvX2RiZygidGRhOTg3NGFfZ2V0bW9kZSgpOiBEU1I9MHglWCwgTlNSPTB4JVgsIE5FQ1I9MHglWCwgcmV0dXJuOiAlZC5cbiIsCisJdjRsX2RiZygxLCAmY2hpcC0+YywgInRkYTk4NzRhX2dldG1vZGUoKTogRFNSPTB4JVgsIE5TUj0weCVYLCBORUNSPTB4JVgsIHJldHVybjogJWQuXG4iLAogCQkgZHNyLCBuc3IsIG5lY3IsIG1vZGUpOwogCXJldHVybiBtb2RlOwogfQpAQCAtOTMyLDcgKzkyMCw3IEBACiAJCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NEFfQU9TUiwgYW9zcik7CiAJCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NEFfTURBQ09TUiwgbWRhY29zcik7CiAKLQkJdHZhdWRpb19kYmcoInRkYTk4NzRhX3NldG1vZGUoKTogcmVxLiBtb2RlICVkOyBBT1NSPTB4JVgsIE1EQUNPU1I9MHglWC5cbiIsCisJCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJ0ZGE5ODc0YV9zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgQU9TUj0weCVYLCBNREFDT1NSPTB4JVguXG4iLAogCQkJbW9kZSwgYW9zciwgbWRhY29zcik7CiAKIAl9IGVsc2UgeyAvKiBkaWMgPT0gMHgwNyAqLwpAQCAtOTY3LDcgKzk1NSw3IEBACiAJCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NEFfRk1NUiwgZm1tcik7CiAJCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NEFfQU9TUiwgYW9zcik7CiAKLQkJdHZhdWRpb19kYmcoInRkYTk4NzRhX3NldG1vZGUoKTogcmVxLiBtb2RlICVkOyBGTU1SPTB4JVgsIEFPU1I9MHglWC5cbiIsCisJCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJ0ZGE5ODc0YV9zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgRk1NUj0weCVYLCBBT1NSPTB4JVguXG4iLAogCQkJbW9kZSwgZm1tciwgYW9zcik7CiAJfQogfQpAQCAtOTgxLDEwICs5NjksMTAgQEAKIAlpZigtMSA9PSAoc2ljID0gY2hpcF9yZWFkMihjaGlwLFREQTk4NzRBX1NJQykpKQogCQlyZXR1cm4gMDsKIAotCXR2YXVkaW9fZGJnKCJ0ZGE5ODc0YV9jaGVja2l0KCk6IERJQz0weCVYLCBTSUM9MHglWC5cbiIsIGRpYywgc2ljKTsKKwl2NGxfZGJnKDEsICZjaGlwLT5jLCAidGRhOTg3NGFfY2hlY2tpdCgpOiBESUM9MHglWCwgU0lDPTB4JVguXG4iLCBkaWMsIHNpYyk7CiAKIAlpZigoZGljID09IDB4MTEpfHwoZGljID09IDB4MDcpKSB7Ci0JCXR2YXVkaW9faW5mbygiZm91bmQgdGRhOTg3NCVzLlxuIiwgKGRpYyA9PSAweDExKSA/ICJhIjoiaCIpOworCQl2NGxfaW5mbygmY2hpcC0+YywgImZvdW5kIHRkYTk4NzQlcy5cbiIsIChkaWMgPT0gMHgxMSkgPyAiYSI6ImgiKTsKIAkJdGRhOTg3NGFfZGljID0gZGljOwkvKiByZW1lbWJlciBkZXZpY2UgaWQuICovCiAJCXJldHVybiAxOwogCX0KQEAgLTExOTYsNyArMTE4NCw3IEBACiAJfWVsc2UgaWYgKCEodmFsICYgVEE4ODc0Wl9CMCkpewogCQltb2RlIHw9IFZJREVPX1NPVU5EX1NURVJFTzsKIAl9Ci0JLyogdHZhdWRpb19kYmcgKCJ0YTg4NzR6X2dldG1vZGUoKTogcmF3IGNoaXAgcmVhZDogMHglMDJ4LCByZXR1cm46IDB4JTAyeFxuIiwgdmFsLCBtb2RlKTsgKi8KKwkvKiB2NGxfZGJnKDEsICZjaGlwLT5jLCAidGE4ODc0el9nZXRtb2RlKCk6IHJhdyBjaGlwIHJlYWQ6IDB4JTAyeCwgcmV0dXJuOiAweCUwMnhcbiIsIHZhbCwgbW9kZSk7ICovCiAJcmV0dXJuIG1vZGU7CiB9CiAKQEAgLTEyMDksNyArMTE5Nyw3IEBACiB7CiAJaW50IHVwZGF0ZSA9IDE7CiAJYXVkaW9jbWQgKnQgPSBOVUxMOwotCXR2YXVkaW9fZGJnKCJ0YTg4NzR6X3NldG1vZGUoKTogbW9kZTogMHglMDJ4XG4iLCBtb2RlKTsKKwl2NGxfZGJnKDEsICZjaGlwLT5jLCAidGE4ODc0el9zZXRtb2RlKCk6IG1vZGU6IDB4JTAyeFxuIiwgbW9kZSk7CiAKIAlzd2l0Y2gobW9kZSl7CiAJY2FzZSBWSURFT19TT1VORF9NT05POgpAQCAtMTQ5MCw3ICsxNDc4LDcgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoJmNoaXAtPmMsIGNoaXApOwogCiAJLyogZmluZCBkZXNjcmlwdGlvbiBmb3IgdGhlIGNoaXAgKi8KLQl0dmF1ZGlvX2RiZygiY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOworCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkcjw8MSk7CiAJZm9yIChkZXNjID0gY2hpcGxpc3Q7IGRlc2MtPm5hbWUgIT0gTlVMTDsgZGVzYysrKSB7CiAJCWlmICgwID09ICooZGVzYy0+aW5zbW9kb3B0KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTUwMiwxMiArMTQ5MCwxMiBAQAogCQlicmVhazsKIAl9CiAJaWYgKGRlc2MtPm5hbWUgPT0gTlVMTCkgewotCQl0dmF1ZGlvX2RiZygibm8gbWF0Y2hpbmcgY2hpcCBkZXNjcmlwdGlvbiBmb3VuZFxuIik7CisJCXY0bF9kYmcoMSwgJmNoaXAtPmMsICJubyBtYXRjaGluZyBjaGlwIGRlc2NyaXB0aW9uIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCXR2YXVkaW9faW5mbygiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIGRlc2MtPm5hbWUsIGFkZHI8PDEsIGFkYXAtPm5hbWUpOworCXY0bF9pbmZvKCZjaGlwLT5jLCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIGRlc2MtPm5hbWUsIGFkZHI8PDEsIGFkYXAtPm5hbWUpOwogCWlmIChkZXNjLT5mbGFncykgewotCQl0dmF1ZGlvX2RiZygibWF0Y2hlczolcyVzJXMuXG4iLAorCQl2NGxfZGJnKDEsICZjaGlwLT5jLCAibWF0Y2hlczolcyVzJXMuXG4iLAogCQkJKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSAgICAgPyAiIHZvbHVtZSIgICAgICA6ICIiLAogCQkJKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkgPyAiIGJhc3MvdHJlYmxlIiA6ICIiLAogCQkJKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpICAgPyAiIGF1ZGlvbXV4IiAgICA6ICIiKTsKQEAgLTE1NTAsNyArMTUzOCw3IEBACiAJCWluaXRfY29tcGxldGlvbigmY2hpcC0+dGV4aXQpOwogCQljaGlwLT50cGlkID0ga2VybmVsX3RocmVhZChjaGlwX3RocmVhZCwodm9pZCAqKWNoaXAsMCk7CiAJCWlmIChjaGlwLT50cGlkIDwgMCkKLQkJCXR2YXVkaW9fd2FybigiJXM6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIsCisJCQl2NGxfd2FybigmY2hpcC0+YywgIiVzOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXG4iLAogCQkJICAgICAgIGNoaXAtPmMubmFtZSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2hpcC0+d3EpOwogCX0KQEAgLTE1NjMsMTcgKzE1NTEsOCBAQAogCSAgIGJlY2F1c2UgZGVkaWNhdGVkIGRyaXZlcnMgYXJlIHVzZWQgKi8KIAlpZiAoKGFkYXAtPmlkID09IEkyQ19IV19TQUE3MTQ2KSkKIAkJcmV0dXJuIDA7Ci0jaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRwogCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgY2hpcF9hdHRhY2gpOwotI2Vsc2UKLQlzd2l0Y2ggKGFkYXAtPmlkKSB7Ci0JY2FzZSBJMkNfSFdfQl9CVDg0ODoKLQljYXNlIEkyQ19IV19CX1JJVkE6Ci0JY2FzZSBJMkNfSFdfU0FBNzEzNDoKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBjaGlwX2F0dGFjaCk7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MDQsNyArMTU4Myw3IEBACiAJc3RydWN0IENISVBTVEFURSAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCBDSElQREVTQyAgKmRlc2MgPSBjaGlwbGlzdCArIGNoaXAtPnR5cGU7CiAKLQl0dmF1ZGlvX2RiZygiJXM6IGNoaXBfY29tbWFuZCAweCV4XG4iLCBjaGlwLT5jLm5hbWUsIGNtZCk7CisJdjRsX2RiZygxLCAmY2hpcC0+YywgIiVzOiBjaGlwX2NvbW1hbmQgMHgleFxuIiwgY2hpcC0+Yy5uYW1lLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEFVRENfU0VUX0lOUFVUOgpAQCAtMTYxNyw3ICsxNTk2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEFVRENfU0VUX1JBRElPOgotCQljaGlwLT5ub3JtID0gVklERU9fTU9ERV9SQURJTzsKKwkJY2hpcC0+cmFkaW8gPSAxOwogCQljaGlwLT53YXRjaF9zdGVyZW8gPSAwOwogCQkvKiBkZWxfdGltZXIoJmNoaXAtPnd0KTsgKi8KIAkJYnJlYWs7CkBAIC0xNjQzLDcgKzE2MjIsNyBAQAogCQkJdmEtPmJhc3MgICA9IGNoaXAtPmJhc3M7CiAJCQl2YS0+dHJlYmxlID0gY2hpcC0+dHJlYmxlOwogCQl9Ci0JCWlmIChjaGlwLT5ub3JtICE9IFZJREVPX01PREVfUkFESU8pIHsKKwkJaWYgKCFjaGlwLT5yYWRpbykgewogCQkJaWYgKGRlc2MtPmdldG1vZGUpCiAJCQkJdmEtPm1vZGUgPSBkZXNjLT5nZXRtb2RlKGNoaXApOwogCQkJZWxzZQpAQCAtMTY3OCwxNSArMTY1Nyw4MCBAQAogCQl9CiAJCWJyZWFrOwogCX0KLQljYXNlIFZJRElPQ1NDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjID0gYXJnOwogCi0JCWNoaXAtPm5vcm0gPSB2Yy0+bm9ybTsKKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOworCQlpbnQgbW9kZSA9IDA7CisKKwkJc3dpdGNoICh2dC0+YXVkbW9kZSkgeworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQkJbW9kZSA9IFZJREVPX1NPVU5EX01PTk87CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQkJbW9kZSA9IFZJREVPX1NPVU5EX1NURVJFTzsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJCW1vZGUgPSBWSURFT19TT1VORF9MQU5HMTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJCW1vZGUgPSBWSURFT19TT1VORF9MQU5HMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZGVzYy0+c2V0bW9kZSAmJiBtb2RlKSB7CisJCQljaGlwLT53YXRjaF9zdGVyZW8gPSAwOworCQkJLyogZGVsX3RpbWVyKCZjaGlwLT53dCk7ICovCisJCQljaGlwLT5tb2RlID0gbW9kZTsKKwkJCWRlc2MtPnNldG1vZGUoY2hpcCwgbW9kZSk7CisJCX0KIAkJYnJlYWs7CiAJfQotCWNhc2UgVklESU9DU0ZSRVE6CisKKwljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOworCQlpbnQgbW9kZSA9IFZJREVPX1NPVU5EX01PTk87CisKKwkJaWYgKGNoaXAtPnJhZGlvKQorCQkJYnJlYWs7CisJCXZ0LT5hdWRtb2RlID0gMDsKKwkJdnQtPnJ4c3ViY2hhbnMgPSAwOworCQl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOworCisJCWlmIChkZXNjLT5nZXRtb2RlKQorCQkJbW9kZSA9IGRlc2MtPmdldG1vZGUoY2hpcCk7CisKKwkJaWYgKG1vZGUgJiBWSURFT19TT1VORF9NT05PKQorCQkJdnQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJaWYgKG1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCisJCQl2dC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzEpCisJCQl2dC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8CisJCQkJCSAgVjRMMl9UVU5FUl9TVUJfTEFORzI7CisKKwkJbW9kZSA9IGNoaXAtPm1vZGU7CisJCWlmIChtb2RlICYgVklERU9fU09VTkRfTU9OTykKKwkJCXZ0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCWlmIChtb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQorCQkJdnQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKQorCQkJdnQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CisJCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzIpCisJCQl2dC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMjsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NTQ0hBTjoKKwljYXNlIFZJRElPQ19TX1NURDoKKwkJY2hpcC0+cmFkaW8gPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DU0ZSRVE6CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCWNoaXAtPm1vZGUgPSAwOyAvKiBhdXRvbWF0aWMgKi8KIAkJaWYgKGRlc2MtPmNoZWNrbW9kZSkgewogCQkJZGVzYy0+c2V0bW9kZShjaGlwLFZJREVPX1NPVU5EX01PTk8pOwpAQCAtMTY5NSwxNSArMTczOSwxNCBAQAogCQkJbW9kX3RpbWVyKCZjaGlwLT53dCwgamlmZmllcysyKkhaKTsKIAkJCS8qIHRoZSB0aHJlYWQgd2lsbCBjYWxsIGNoZWNrbW9kZSgpIGxhdGVyICovCiAJCX0KLQl9CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICAgID0gImdlbmVyaWMgaTJjIGF1ZGlvIGRyaXZlciIsCisJCS5uYW1lICAgID0gInR2YXVkaW8iLAogCX0sCiAJLmlkICAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UVkFVRElPLAogCS5hdHRhY2hfYWRhcHRlciAgPSBjaGlwX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IDhhYzRjYjguLmZkMGFjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBIYXVwcGF1Z2UgZWVwcm9tIGRlY29kZXIgZHJpdmVyIik7CkBAIC01MiwyMSArNTMsMTkgQEAKIAogI2RlZmluZSBTVFJNKGFycmF5LGkpIChpIDwgc2l6ZW9mKGFycmF5KS9zaXplb2YoY2hhciopID8gYXJyYXlbaV0gOiAidW5rbm93biIpCiAKLSNkZWZpbmUgdHZlZXByb21faW5mbyhmbXQsIGFyZy4uLikgZG8ge1wKLQlwcmludGsoS0VSTl9JTkZPICJ0dmVlcHJvbSAlZC0lMDR4OiAiIGZtdCwgXAotCQkJYy0+YWRhcHRlci0+bnIsIGMtPmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHR2ZWVwcm9tX3dhcm4oZm10LCBhcmcuLi4pIGRvIHtcCi0JcHJpbnRrKEtFUk5fV0FSTklORyAidHZlZXByb20gJWQtJTA0eDogIiBmbXQsIFwKLQkJCWMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQotI2RlZmluZSB0dmVlcHJvbV9kYmcoZm10LCBhcmcuLi4pIGRvIHtcCisjZGVmaW5lIHR2ZWVwcm9tX2luZm8oZm10LCBhcmcuLi4pIFwKKwl2NGxfcHJpbnRrKEtFUk5fSU5GTywgInR2ZWVwcm9tIiwgYy0+YWRhcHRlciwgYy0+YWRkciwgZm10ICwgIyMgYXJnKQorI2RlZmluZSB0dmVlcHJvbV93YXJuKGZtdCwgYXJnLi4uKSBcCisJdjRsX3ByaW50ayhLRVJOX1dBUk5JTkcsICJ0dmVlcHJvbSIsIGMtPmFkYXB0ZXIsIGMtPmFkZHIsIGZtdCAsICMjIGFyZykKKyNkZWZpbmUgdHZlZXByb21fZGJnKGZtdCwgYXJnLi4uKSBkbyB7IFwKIAlpZiAoZGVidWcpIFwKLQkJcHJpbnRrKEtFUk5fSU5GTyAidHZlZXByb20gJWQtJTA0eDogIiBmbXQsIFwKLQkJCWMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCQl2NGxfcHJpbnRrKEtFUk5fREVCVUcsICJ0dmVlcHJvbSIsIGMtPmFkYXB0ZXIsIGMtPmFkZHIsIGZtdCAsICMjIGFyZyk7IFwKKwl9IHdoaWxlICgwKQogCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBzb21lIGhhdXBwYXVnZSBzcGVjaWZpYyBzdHVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCisvKgorICogVGhlIEhhdXBwYXVnZSBlZXByb20gdXNlcyBhbiA4Yml0IGZpZWxkIHRvIGRldGVybWluZSB3aGljaAorICogdHVuZXIgZm9ybWF0cyB0aGUgdHVuZXIgc3VwcG9ydHMuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgSEFVUFBBVUdFX1RVTkVSX0ZNVAogewogCWludAlpZDsKQEAgLTc0LDE0ICs3MywxNCBAQAogfQogaGF1cHBhdWdlX3R1bmVyX2ZtdFtdID0KIHsKLQl7IDB4MDAwMDAwMDAsICIgdW5rbm93bjEiIH0sCi0JeyAweDAwMDAwMDAwLCAiIHVua25vd24yIiB9LAotCXsgMHgwMDAwMDAwNywgIiBQQUwoQi9HKSIgfSwKLQl7IDB4MDAwMDEwMDAsICIgTlRTQyhNKSIgfSwKLQl7IDB4MDAwMDAwMTAsICIgUEFMKEkpIiB9LAotCXsgMHgwMDQwMDAwMCwgIiBTRUNBTShML0wnKSIgfSwKLQl7IDB4MDAwMDBlMDAsICIgUEFMKEQvSykiIH0sCi0JeyAweDAzMDAwMDAwLCAiIEFUU0MvRFZCIERpZ2l0YWwiIH0sCisJeyBWNEwyX1NURF9VTktOT1dOLCIgVU5LTk9XTiIgfSwKKwl7IFY0TDJfU1REX1VOS05PV04sIiBGTSIgfSwKKwl7IFY0TDJfU1REX1BBTF9CRywgIiBQQUwoQi9HKSIgfSwKKwl7IFY0TDJfU1REX05UU0NfTSwgIiBOVFNDKE0pIiB9LAorCXsgVjRMMl9TVERfUEFMX0ksICAiIFBBTChJKSIgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0wsIiBTRUNBTShML0wnKSIgfSwKKwl7IFY0TDJfU1REX1BBTF9ESywgIiBQQUwoRC9EMS9LKSIgfSwKKwl7IFY0TDJfU1REX0FUU0MsICAgIiBBVFNDL0RWQiBEaWdpdGFsIiB9LAogfTsKIAogLyogVGhpcyBpcyB0aGUgZnVsbCBsaXN0IG9mIHBvc3NpYmxlIHR1bmVycy4gTWFueSB0aGFua3MgdG8gSGF1cHBhdWdlIGZvcgpAQCAtMzg3LDcgKzM4Niw3IEBACiAJaWYgKChlZXByb21fZGF0YVswXSA9PSAweDFhKSAmJiAoZWVwcm9tX2RhdGFbMV0gPT0gMHhlYikgJiYKIAkJCShlZXByb21fZGF0YVsyXSA9PSAweDY3KSAmJiAoZWVwcm9tX2RhdGFbM10gPT0gMHg5NSkpCiAJCXN0YXJ0PTB4YTA7IC8qIEdlbmVyaWMgZW0yOHh4IG9mZnNldCAqLwotCWVsc2UgaWYgKCgoZWVwcm9tX2RhdGFbMF0gJiAweGYwKSA9PSAweDEwKSAmJgorCWVsc2UgaWYgKCgoZWVwcm9tX2RhdGFbMF0gJiAweGUxKSA9PSAweDAxKSAmJgogCQkJCQkoZWVwcm9tX2RhdGFbMV0gPT0gMHgwMCkgJiYKIAkJCQkJKGVlcHJvbV9kYXRhWzJdID09IDB4MDApICYmCiAJCQkJCShlZXByb21fZGF0YVs4XSA9PSAweDg0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dm1peGVyLmMKaW5kZXggZTgzN2Y5Zi4uOWU4NmNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dm1peGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dm1peGVyLmMKQEAgLTIyNywxMyArMjI3LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLSNpZmRlZiBJMkNfUEVDCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgICAgPSAidHYgY2FyZCBtaXhlciBkcml2ZXIiLAorCQkubmFtZSAgICA9ICJ0dm1peGVyIiwKIAl9LAotI2Vsc2UKLQkubmFtZSAgICAgICAgICAgID0gInR2IGNhcmQgbWl4ZXIgZHJpdmVyIiwKLSNlbmRpZgogCS5pZCAgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfVFZNSVhFUiwKIAkuZGV0YWNoX2FkYXB0ZXIgID0gdHZtaXhlcl9hZGFwdGVycywKIAkuYXR0YWNoX2FkYXB0ZXIgID0gdHZtaXhlcl9hZGFwdGVycywKQEAgLTI2NywyMiArMjYzLDggQEAKIAlzdHJ1Y3QgdmlkZW9fYXVkaW8gdmE7CiAJaW50IGksbWlub3I7CiAKLSNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCiAJaWYgKCEoY2xpZW50LT5hZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpKQogCQlyZXR1cm4gLTE7Ci0jZWxzZQotCS8qIFRWIGNhcmQgPz8/ICovCi0Jc3dpdGNoIChjbGllbnQtPmFkYXB0ZXItPmlkKSB7Ci0JY2FzZSBJMkNfSFdfU01CVVNfVk9PRE9PMzoKLQljYXNlIEkyQ19IV19CX0JUODQ4OgotCWNhc2UgSTJDX0hXX0JfUklWQToKLQkJLyogb2ssIGhhdmUgYSBsb29rIC4uLiAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBpZ25vcmUgdGhhdCBvbmUgKi8KLQkJcmV0dXJuIC0xOwotCX0KLSNlbmRpZgogCiAJLyogdW5yZWdpc3RlciA/PyAqLwogCWZvciAoaSA9IDA7IGkgPCBERVZfTUFYOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggYTYwNDQyZS4uYzM1YjgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAidHZwNTE1MF9yZWcuaCIKIApAQCAtMjgsMzMgKzI5LDM4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCisjZGVmaW5lIHR2cDUxNTBfaW5mbyhmbXQsIGFyZy4uLikgZG8geyBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKKwkgICAgICAgaTJjX2FkYXB0ZXJfaWQoYy0+YWRhcHRlciksIGMtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorI2RlZmluZSB0dnA1MTUwX2RiZyhudW0sIGZtdCwgYXJnLi4uKSBcCiAJZG8geyBcCiAJCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGRlYnVnICVkLSUwNHg6ICIgZm10LFwKKwkJCQljLT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCisJCQkJaTJjX2FkYXB0ZXJfaWQoYy0+YWRhcHRlciksIFwKKwkJCQljLT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHR2cDUxNTBfcWN0cmxbXSA9IHsKIAl7Ci0JIC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCi0JIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCi0JIC5taW5pbXVtID0gMCwKLQkgLm1heGltdW0gPSAyNTUsCi0JIC5zdGVwID0gMSwKLQkgLmRlZmF1bHRfdmFsdWUgPSAwLAotCSAuZmxhZ3MgPSAwLAotCSB9LCB7Ci0JICAgICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKLQkgICAgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgIC5uYW1lID0gIkNvbnRyYXN0IiwKLQkgICAgIC5taW5pbXVtID0gMCwKLQkgICAgIC5tYXhpbXVtID0gMjU1LAotCSAgICAgLnN0ZXAgPSAweDEsCi0JICAgICAuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCi0JICAgICAuZmxhZ3MgPSAwLAotCSAgICAgfSwgeworCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzID0gMCwKKwl9LCB7CisJCS5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKKwkJLmZsYWdzID0gMCwKKwl9LCB7CiAJCSAuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAogCQkgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkgLm5hbWUgPSAiU2F0dXJhdGlvbiIsCkBAIC02MywxNiArNjksMTYgQEAKIAkJIC5zdGVwID0gMHgxLAogCQkgLmRlZmF1bHRfdmFsdWUgPSAweDEwLAogCQkgLmZsYWdzID0gMCwKLQkJIH0sIHsKLQkJICAgICAuaWQgPSBWNEwyX0NJRF9IVUUsCi0JCSAgICAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkgICAgIC5uYW1lID0gIkh1ZSIsCi0JCSAgICAgLm1pbmltdW0gPSAtMTI4LAotCQkgICAgIC5tYXhpbXVtID0gMTI3LAotCQkgICAgIC5zdGVwID0gMHgxLAotCQkgICAgIC5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKLQkJICAgICAuZmxhZ3MgPSAwLAotCQkgICAgIH0KKwl9LCB7CisJCS5pZCA9IFY0TDJfQ0lEX0hVRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJIdWUiLAorCQkubWluaW11bSA9IC0xMjgsCisJCS5tYXhpbXVtID0gMTI3LAorCQkuc3RlcCA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZmxhZ3MgPSAwLAorCX0KIH07CiAKIHN0cnVjdCB0dnA1MTUwIHsKQEAgLTk0LDEyICsxMDAsMTQgQEAKIAogCWJ1ZmZlclswXSA9IGFkZHI7CiAJaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgMSkpKQotCQlkcHJpbnRrKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLCByYyk7CisJCXR2cDUxNTBfZGJnKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLCByYyk7CiAKIAltc2xlZXAoMTApOwogCiAJaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9yZWN2KGMsIGJ1ZmZlciwgMSkpKQotCQlkcHJpbnRrKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLCByYyk7CisJCXR2cDUxNTBfZGJnKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLCByYyk7CisKKwl0dnA1MTUwX2RiZygyLCAidHZwNTE1MDogcmVhZCAweCUwMnggPSAweCUwMnhcbiIsIGFkZHIsIGJ1ZmZlclswXSk7CiAKIAlyZXR1cm4gKGJ1ZmZlclswXSk7CiB9CkBAIC0xMDksMTMgKzExNywxMiBAQAogewogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOwogCWludCByYzsKLS8qCXN0cnVjdCB0dnA1MTUwICpjb3JlID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOyAqLwogCiAJYnVmZmVyWzBdID0gYWRkcjsKIAlidWZmZXJbMV0gPSB2YWx1ZTsKLQlkcHJpbnRrKDEsICJ0dnA1MTUwOiB3cml0aW5nIDB4JTAyeCAweCUwMnhcbiIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKKwl0dnA1MTUwX2RiZygyLCAidHZwNTE1MDogd3JpdGluZyAweCUwMnggMHglMDJ4XG4iLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CiAJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgMikpKQotCQlkcHJpbnRrKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLCByYyk7CisJCXR2cDUxNTBfZGJnKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLCByYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjKQpAQCAtNDM3LDQ4ICs0NDQsMzQ2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdHZwNTE1MF9zZWxtdXgoc3RydWN0IGkyY19jbGllbnQgKmMsCiAJCQkJICBlbnVtIHR2cDUxNTBfaW5wdXQgaW5wdXQpCiB7CisJaW50IG9wbW9kZT0wOworCiAJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAKIAlpZiAoIWRlY29kZXItPmVuYWJsZSkKIAkJaW5wdXQgfD0gVFZQNTE1MF9CTEFDS19TQ1JFRU47CiAKKwlzd2l0Y2ggKGlucHV0KSB7CisJY2FzZSBUVlA1MTUwX0FOQUxPR19DSDA6CisJY2FzZSBUVlA1MTUwX0FOQUxPR19DSDE6CisJCW9wbW9kZT0weDMwOwkJLyogVFYgTW9kZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvcG1vZGU9MDsJCS8qIEF1dG8gTW9kZSAqLworCQlicmVhazsKKwl9CisKKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfT1BfTU9ERV9DVEwsIG9wbW9kZSk7CiAJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1ZEX0lOX1NSQ19TRUxfMSwgaW5wdXQpOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCitzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB7CisJdW5zaWduZWQgY2hhciByZWc7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKK307CisKKy8qIERlZmF1bHQgdmFsdWVzIGFzIHN1Z2VzdGVkIGF0IFRWUDUxNTBBTTEgZGF0YXNoZWV0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNTE1MF9pbml0X2RlZmF1bHRbXSA9IHsKKwl7IC8qIDB4MDAgKi8KKwkJVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEsMHgwMAorCX0sCisJeyAvKiAweDAxICovCisJCVRWUDUxNTBfQU5BTF9DSExfQ1RMLDB4MTUKKwl9LAorCXsgLyogMHgwMiAqLworCQlUVlA1MTUwX09QX01PREVfQ1RMLDB4MDAKKwl9LAorCXsgLyogMHgwMyAqLworCQlUVlA1MTUwX01JU0NfQ1RMLDB4MDEKKwl9LAorCXsgLyogMHgwNiAqLworCQlUVlA1MTUwX0NPTE9SX0tJTF9USFNIX0NUTCwweDEwCisJfSwKKwl7IC8qIDB4MDcgKi8KKwkJVFZQNTE1MF9MVU1BX1BST0NfQ1RMXzEsMHg2MAorCX0sCisJeyAvKiAweDA4ICovCisJCVRWUDUxNTBfTFVNQV9QUk9DX0NUTF8yLDB4MDAKKwl9LAorCXsgLyogMHgwOSAqLworCQlUVlA1MTUwX0JSSUdIVF9DVEwsMHg4MAorCX0sCisJeyAvKiAweDBhICovCisJCVRWUDUxNTBfU0FUVVJBVElPTl9DVEwsMHg4MAorCX0sCisJeyAvKiAweDBiICovCisJCVRWUDUxNTBfSFVFX0NUTCwweDAwCisJfSwKKwl7IC8qIDB4MGMgKi8KKwkJVFZQNTE1MF9DT05UUkFTVF9DVEwsMHg4MAorCX0sCisJeyAvKiAweDBkICovCisJCVRWUDUxNTBfREFUQV9SQVRFX1NFTCwweDQ3CisJfSwKKwl7IC8qIDB4MGUgKi8KKwkJVFZQNTE1MF9MVU1BX1BST0NfQ1RMXzMsMHgwMAorCX0sCisJeyAvKiAweDBmICovCisJCVRWUDUxNTBfQ09ORl9TSEFSRURfUElOLDB4MDgKKwl9LAorCXsgLyogMHgxMSAqLworCQlUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX01TQiwweDAwCisJfSwKKwl7IC8qIDB4MTIgKi8KKwkJVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVF9MU0IsMHgwMAorCX0sCisJeyAvKiAweDEzICovCisJCVRWUDUxNTBfQUNUX1ZEX0NST1BfU1RQX01TQiwweDAwCisJfSwKKwl7IC8qIDB4MTQgKi8KKwkJVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVFBfTFNCLDB4MDAKKwl9LAorCXsgLyogMHgxNSAqLworCQlUVlA1MTUwX0dFTkxPQ0ssMHgwMQorCX0sCisJeyAvKiAweDE2ICovCisJCVRWUDUxNTBfSE9SSVpfU1lOQ19TVEFSVCwweDgwCisJfSwKKwl7IC8qIDB4MTggKi8KKwkJVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUQVJULDB4MDAKKwl9LAorCXsgLyogMHgxOSAqLworCQlUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RPUCwweDAwCisJfSwKKwl7IC8qIDB4MWEgKi8KKwkJVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMSwweDBjCisJfSwKKwl7IC8qIDB4MWIgKi8KKwkJVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMiwweDE0CisJfSwKKwl7IC8qIDB4MWMgKi8KKwkJVFZQNTE1MF9JTlRfUkVTRVRfUkVHX0IsMHgwMAorCX0sCisJeyAvKiAweDFkICovCisJCVRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQiwweDAwCisJfSwKKwl7IC8qIDB4MWUgKi8KKwkJVFZQNTE1MF9JTlRUX0NPTkZJR19SRUdfQiwweDAwCisJfSwKKwl7IC8qIDB4MjggKi8KKwkJVFZQNTE1MF9WSURFT19TVEQsMHgwMAorCX0sCisJeyAvKiAweDJlICovCisJCVRWUDUxNTBfTUFDUk9WSVNJT05fT05fQ1RSLDB4MGYKKwl9LAorCXsgLyogMHgyZiAqLworCQlUVlA1MTUwX01BQ1JPVklTSU9OX09GRl9DVFIsMHgwMQorCX0sCisJeyAvKiAweGJiICovCisJCVRWUDUxNTBfVEVMRVRFWFRfRklMX0VOQSwweDAwCisJfSwKKwl7IC8qIDB4YzAgKi8KKwkJVFZQNTE1MF9JTlRfU1RBVFVTX1JFR19BLDB4MDAKKwl9LAorCXsgLyogMHhjMSAqLworCQlUVlA1MTUwX0lOVF9FTkFCTEVfUkVHX0EsMHgwMAorCX0sCisJeyAvKiAweGMyICovCisJCVRWUDUxNTBfSU5UX0NPTkYsMHgwNAorCX0sCisJeyAvKiAweGM4ICovCisJCVRWUDUxNTBfRklGT19JTlRfVEhSRVNIT0xELDB4ODAKKwl9LAorCXsgLyogMHhjOSAqLworCQlUVlA1MTUwX0ZJRk9fUkVTRVQsMHgwMAorCX0sCisJeyAvKiAweGNhICovCisJCVRWUDUxNTBfTElORV9OVU1CRVJfSU5ULDB4MDAKKwl9LAorCXsgLyogMHhjYiAqLworCQlUVlA1MTUwX1BJWF9BTElHTl9SRUdfTE9XLDB4NGUKKwl9LAorCXsgLyogMHhjYyAqLworCQlUVlA1MTUwX1BJWF9BTElHTl9SRUdfSElHSCwweDAwCisJfSwKKwl7IC8qIDB4Y2QgKi8KKwkJVFZQNTE1MF9GSUZPX09VVF9DVFJMLDB4MDEKKwl9LAorCXsgLyogMHhjZiAqLworCQlUVlA1MTUwX0ZVTExfRklFTERfRU5BXzEsMHgwMAorCX0sCisJeyAvKiAweGQwICovCisJCVRWUDUxNTBfRlVMTF9GSUVMRF9FTkFfMiwweDAwCisJfSwKKwl7IC8qIDB4ZmMgKi8KKwkJVFZQNTE1MF9GVUxMX0ZJRUxEX01PREVfUkVHLDB4N2YKKwl9LAorCXsgLyogZW5kIG9mIGRhdGEgKi8KKwkJMHhmZiwweGZmCisJfQorfTsKKworLyogRGVmYXVsdCB2YWx1ZXMgYXMgc3VnZXN0ZWQgYXQgVFZQNTE1MEFNMSBkYXRhc2hlZXQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA1MTUwX2luaXRfZW5hYmxlW10gPSB7CisJeworCQlUVlA1MTUwX0NPTkZfU0hBUkVEX1BJTiwgMgorCX0sewkvKiBBdXRvbWF0aWMgb2Zmc2V0IGFuZCBBR0MgZW5hYmxlZCAqLworCQlUVlA1MTUwX0FOQUxfQ0hMX0NUTCwgMHgxNQorCX0sewkvKiBBY3RpdmF0ZSBZQ3JDYiBvdXRwdXQgMHg5IG9yIDB4ZCA/ICovCisJCVRWUDUxNTBfTUlTQ19DVEwsIDB4NmYKKwl9LHsJLyogQWN0aXZhdGVzIHZpZGVvIHN0ZCBhdXRvZGV0ZWN0aW9uIGZvciBhbGwgc3RhbmRhcmRzICovCisJCVRWUDUxNTBfQVVUT1NXX01TSywgMHgwCisJfSx7CS8qIERlZmF1bHQgZm9ybWF0OiAweDQ3LiBGb3IgNDoyOjI6IDB4NDAgKi8KKwkJVFZQNTE1MF9EQVRBX1JBVEVfU0VMLCAweDQ3CisJfSx7CisJCVRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzEsIDB4MGMKKwl9LHsKKwkJVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMiwgMHg1NAorCX0sewkvKiBOb24gZG9jdW1lbnRlZCwgYnV0IGluaXRpYWxpemVkIG9uIFdpblRWIFVTQjIgKi8KKwkJMHgyNywgMHgyMAorCX0seworCQkweGZmLDB4ZmYKKwl9Cit9OworCitzdHJ1Y3QgaTJjX3ZiaV9yYW1fdmFsdWUgeworCXUxNiByZWc7CisJdW5zaWduZWQgY2hhciB2YWx1ZXNbMjZdOworfTsKKworc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlIHZiaV9yYW1fZGVmYXVsdFtdID0KK3sKKwl7MHgwMTAsIC8qIFdTVCBTRUNBTSA2ICovCisJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiAsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjYsIDB4ZTYsIDB4YjQsIDB4MGUsIDB4MCwgMHgwLCAweDAsIDB4MTAsIDB4MCB9CisJfSwKKwl7MHgwMzAsIC8qIFdTVCBQQUwgQiA2ICovCisJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiAsIDB4MjcsIDB4MmUsIDB4MjAsIDB4MmIsIDB4YTYsIDB4NzIsIDB4MTAsIDB4MCwgMHgwLCAweDAsIDB4MTAsIDB4MCB9CisJfSwKKwl7MHgwNTAsIC8qIFdTVCBQQUwgQyA2ICovCisJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiAsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjIsIDB4YTYsIDB4OTgsIDB4MGQsIDB4MCwgMHgwLCAweDAsIDB4MTAsIDB4MCB9CisJfSwKKwl7MHgwNzAsIC8qIFdTVCBOVFNDIDYgKi8KKwkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmICwgMHgyNywgMHgyZSwgMHgyMCwgMHgyMywgMHg2OSwgMHg5MywgMHgwZCwgMHgwLCAweDAsIDB4MCwgMHgxMCwgMHgwIH0KKwl9LAorCXsweDA5MCwgLyogTkFCVFMsIE5UU0MgNiAqLworCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYgLCAweGU3LCAweDJlLCAweDIwLCAweDIyLCAweDY5LCAweDkzLCAweDBkLCAweDAsIDB4MCwgMHgwLCAweDE1LCAweDAgfQorCX0sCisJezB4MGIwLCAvKiBOQUJUUywgTlRTQy1KIDYgKi8KKwkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmICwgMHhhNywgMHgyZSwgMHgyMCwgMHgyMywgMHg2OSwgMHg5MywgMHgwZCwgMHgwLCAweDAsIDB4MCwgMHgxMCwgMHgwIH0KKwl9LAorCXsweDBkMCwgLyogQ0MsIFBBTC9TRUNBTSA2ICovCisJCXsgMHhhYSwgMHgyYSwgMHhmZiwgMHgzZiAsIDB4MDQsIDB4NTEsIDB4NmUsIDB4MDIsIDB4YTYsIDB4N2IsIDB4MDksIDB4MCwgMHgwLCAweDAsIDB4MjcsIDB4MCB9CisJfSwKKwl7MHgwZjAsIC8qIENDLCBOVFNDIDYgKi8KKwkJeyAweGFhLCAweDJhLCAweGZmLCAweDNmICwgMHgwNCwgMHg1MSwgMHg2ZSwgMHgwMiwgMHg2OSwgMHg4YywgMHgwOSwgMHgwLCAweDAsIDB4MCwgMHgyNywgMHgwIH0KKwl9LAorCXsweDExMCwgLyogV1NTLCBQQUwvU0VDQU0gNiAqLworCQl7IDB4NWIsIDB4NTUsIDB4YzUsIDB4ZmYgLCAweDAsIDB4NzEsIDB4NmUsIDB4NDIsIDB4YTYsIDB4Y2QsIDB4MGYsIDB4MCwgMHgwLCAweDAsIDB4M2EsIDB4MCB9CisJfSwKKwl7MHgxMzAsIC8qIFdTUywgTlRTQyBDICovCisJCXsgMHgzOCwgMHgwMCwgMHgzZiwgMHgwMCAsIDB4MCwgMHg3MSwgMHg2ZSwgMHg0MywgMHg2OSwgMHg3YywgMHgwOCwgMHgwLCAweDAsIDB4MCwgMHgzOSwgMHgwIH0KKwl9LAorCXsweDE1MCwgLyogVklUQywgUEFML1NFQ0FNIDYgKi8KKwkJeyAweDAsIDB4MCwgMHgwLCAweDAgLCAweDAsIDB4OGYsIDB4NmQsIDB4NDksIDB4YTYsIDB4ODUsIDB4MDgsIDB4MCwgMHgwLCAweDAsIDB4NGMsIDB4MCB9CisJfSwKKwl7MHgxNzAsIC8qIFZJVEMsIE5UU0MgNiAqLworCQl7IDB4MCwgMHgwLCAweDAsIDB4MCAsIDB4MCwgMHg4ZiwgMHg2ZCwgMHg0OSwgMHg2OSwgMHg5NCwgMHgwOCwgMHgwLCAweDAsIDB4MCwgMHg0YywgMHgwIH0KKwl9LAorCXsgKHUxNiktMSB9Cit9OworCitzdGF0aWMgaW50IHR2cDUxNTBfd3JpdGVfaW5pdHRhYihzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgKnJlZ3MpCit7CisJd2hpbGUgKHJlZ3MtPnJlZyAhPSAweGZmKSB7CisJCXR2cDUxNTBfd3JpdGUoYywgcmVncy0+cmVnLCByZWdzLT52YWx1ZSk7CisJCXJlZ3MrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHZwNTE1MF92ZHBfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkgY29uc3Qgc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlICpyZWdzKQoreworCXVuc2lnbmVkIGludCBpOworCisJLyogRGlzYWJsZSBGdWxsIEZpZWxkICovCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0ZVTExfRklFTERfRU5BXzEsIDApOworCisJLyogQmVmb3JlIHByb2dyYW1taW5nLCBMaW5lIG1vZGUgc2hvdWxkIGJlIGF0IDB4ZmYgKi8KKwlmb3IgKGk9VFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8yOyBpPD1UVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDQ7IGkrKykKKwkJdHZwNTE1MF93cml0ZShjLCBpLCAweGZmKTsKKworCS8qIExvYWQgUmFtIFRhYmxlICovCisJd2hpbGUgKHJlZ3MtPnJlZyAhPSAodTE2KS0xICkgeworCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ09ORl9SQU1fQUREUl9ISUdILHJlZ3MtPnJlZz4+OCk7CisJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9DT05GX1JBTV9BRERSX0xPVyxyZWdzLT5yZWcpOworCisJCWZvciAoaT0wO2k8MTY7aSsrKQorCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1ZEUF9DT05GX1JBTV9EQVRBLHJlZ3MtPnZhbHVlc1tpXSk7CisKKwkJcmVncysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dnA1MTUwX3NldF9zdGQoc3RydWN0IGkyY19jbGllbnQgKmMsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKIAlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlpbnQgZm10PTA7CiAKLQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ09ORl9TSEFSRURfUElOLCAyKTsKKwlkZWNvZGVyLT5ub3JtPXN0ZDsKIAotCS8qIEF1dG9tYXRpYyBvZmZzZXQgYW5kIEFHQyBlbmFibGVkICovCi0JdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0FOQUxfQ0hMX0NUTCwgMHgxNSk7CisJLyogRmlyc3QgdGVzdHMgc2hvdWxkIGJlIGFnYWluc3Qgc3BlY2lmaWMgc3RkICovCiAKLQkvKiBOb3JtYWwgT3BlcmF0aW9uICovCi0vLyAgICAgIHR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9PUF9NT0RFX0NUTCwgMHgwMCk7CisJaWYgKHN0ZCA9PSBWNEwyX1NURF9BTEwpIHsKKwkJZm10PTA7CS8qIEF1dG9kZXRlY3QgbW9kZSAqLworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfTlRTQ180NDMpIHsKKwkJZm10PTB4YTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTF9NKSB7CisJCWZtdD0weDY7CisJfSBlbHNlIGlmIChzdGQgJiAoVjRMMl9TVERfUEFMX058IFY0TDJfU1REX1BBTF9OYykpIHsKKwkJZm10PTB4ODsKKwl9IGVsc2UgeworCQkvKiBUaGVuLCB0ZXN0IGFnYWluc3QgZ2VuZXJpYyBvbmVzICovCisJCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCQlmbXQ9MHgyOworCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQkJZm10PTB4NDsKKwkJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJZm10PTB4YzsKKwkJfQorCX0KIAotCS8qIEFjdGl2YXRlIFlDckNiIG91dHB1dCAweDkgb3IgMHhkID8gKi8KLQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfTUlTQ19DVEwsIDB4NmYpOworCXR2cDUxNTBfZGJnKDEsIlNldCB2aWRlbyBzdGQgcmVnaXN0ZXIgdG8gJWQuXG4iLGZtdCk7CisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1ZJREVPX1NURCwgZm10KTsKIAotCS8qIEFjdGl2YXRlcyB2aWRlbyBzdGQgYXV0b2RldGVjdGlvbiBmb3IgYWxsIHN0YW5kYXJkcyAqLwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9BVVRPU1dfTVNLLCAweDApOworCXJldHVybiAwOworfQogCi0JLyogRGVmYXVsdCBmb3JtYXQ6IDB4NDcsIDQ6MjoyOiAweDQwICovCi0JdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0RBVEFfUkFURV9TRUwsIDB4NDcpOworc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJdTggdHlwZSwgdmVyXzY1NiwgbXNiX2lkLCBsc2JfaWQsIG1zYl9yb20sIGxzYl9yb207CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAKKwl0eXBlPXR2cDUxNTBfcmVhZChjLFRWUDUxNTBfQVVUT1NXX01TSyk7CisJbXNiX2lkPXR2cDUxNTBfcmVhZChjLFRWUDUxNTBfTVNCX0RFVl9JRCk7CisJbHNiX2lkPXR2cDUxNTBfcmVhZChjLFRWUDUxNTBfTFNCX0RFVl9JRCk7CisJbXNiX3JvbT10dnA1MTUwX3JlYWQoYyxUVlA1MTUwX1JPTV9NQUpPUl9WRVIpOworCWxzYl9yb209dHZwNTE1MF9yZWFkKGMsVFZQNTE1MF9ST01fTUlOT1JfVkVSKTsKKworCWlmICh0eXBlPT0weGRjKSB7CisJCXZlcl82NTY9dHZwNTE1MF9yZWFkKGMsVFZQNTE1MF9SRVZfU0VMRUNUKTsKKwkJdHZwNTE1MF9pbmZvKCJ0dnAlMDJ4JTAyeGFtMSBkZXRlY3RlZCA2NTYgdmVyc2lvbiBpcyAlZC5cbiIsbXNiX2lkLCBsc2JfaWQsdmVyXzY1Nik7CisJfSBlbHNlIGlmICh0eXBlPT0weGZjKSB7CisJCXR2cDUxNTBfaW5mbygidHZwJTAyeCUwMnhhIGRldGVjdGVkLlxuIixtc2JfaWQsIGxzYl9pZCk7CisJfSBlbHNlIHsKKwkJdHZwNTE1MF9pbmZvKCJ1bmtub3duIHR2cCUwMnglMDJ4IGNoaXAgZGV0ZWN0ZWQoJWQpLlxuIixtc2JfaWQsbHNiX2lkLHR5cGUpOworCX0KKwl0dnA1MTUwX2luZm8oIlJvbSB2ZXIgaXMgJWQuJWRcbiIsbXNiX3JvbSxsc2Jfcm9tKTsKKworCS8qIEluaXRpYWxpemVzIFRWUDUxNTAgdG8gaXRzIGRlZmF1bHQgdmFsdWVzICovCisJdHZwNTE1MF93cml0ZV9pbml0dGFiKGMsIHR2cDUxNTBfaW5pdF9kZWZhdWx0KTsKKworCS8qIEluaXRpYWxpemVzIFZEUCByZWdpc3RlcnMgKi8KKwl0dnA1MTUwX3ZkcF9pbml0KGMsIHZiaV9yYW1fZGVmYXVsdCk7CisKKwkvKiBTZWxlY3RzIGRlY29kZXIgaW5wdXQgKi8KIAl0dnA1MTUwX3NlbG11eChjLCBkZWNvZGVyLT5pbnB1dCk7CiAKLQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzEsIDB4MGMpOwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMiwgMHg1NCk7CisJLyogSW5pdGlhbGl6ZXMgVFZQNTE1MCB0byBzdHJlYW0gZW5hYmxlZCB2YWx1ZXMgKi8KKwl0dnA1MTUwX3dyaXRlX2luaXR0YWIoYywgdHZwNTE1MF9pbml0X2VuYWJsZSk7CiAKLQl0dnA1MTUwX3dyaXRlKGMsIDB4MjcsIDB4MjApOwkvKiA/Pz8/Pz8/Pz8/ICovCi0KLQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfVklERU9fU1RELCAweDApOwkvKiBBdXRvIHN3aXRjaCAqLwotCisJLyogSW5pdGlhbGl6ZSBpbWFnZSBwcmVmZXJlbmNlcyAqLwogCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9CUklHSFRfQ1RMLCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7CiAJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwgZGVjb2Rlci0+Y29udHJhc3QgPj4gOCk7CiAJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMLCBkZWNvZGVyLT5jb250cmFzdCA+PiA4KTsKIAl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfSFVFX0NUTCwgKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA4KTsKKworCXR2cDUxNTBfc2V0X3N0ZChjLCBkZWNvZGVyLT5ub3JtKTsKIH07CiAKIHN0YXRpYyBpbnQgdHZwNTE1MF9nZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKQEAgLTQ5OCw5ICs4MDMsOCBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCQljdHJsLT52YWx1ZSA9IHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0hVRV9DVEwpOwogCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgdHZwNTE1MF9zZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKQEAgLTUyMCwyOCArODI0LDU5IEBACiAJY2FzZSBWNEwyX0NJRF9IVUU6CiAJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9IVUVfQ1RMLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJCUkyQyBDb21tYW5kCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgdHZwNTE1MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHR2cDUxNTBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCiAJc3dpdGNoIChjbWQpIHsKIAogCWNhc2UgMDoKKwljYXNlIFZJRElPQ19JTlRfUkVTRVQ6CiAJY2FzZSBERUNPREVSX0lOSVQ6Ci0JCXR2cDUxNTBfcmVzZXQoY2xpZW50KTsKKwkJdHZwNTE1MF9yZXNldChjKTsKKwkJYnJlYWs7CisJY2FzZSBWSURJT0NfU19TVEQ6CisJCWlmIChkZWNvZGVyLT5ub3JtID09ICoodjRsMl9zdGRfaWQgKilhcmcpCisJCQlicmVhazsKKwkJcmV0dXJuIHR2cDUxNTBfc2V0X3N0ZChjLCAqKHY0bDJfc3RkX2lkICopYXJnKTsKKwljYXNlIFZJRElPQ19HX1NURDoKKwkJKih2NGwyX3N0ZF9pZCAqKWFyZyA9IGRlY29kZXItPm5vcm07CiAJCWJyZWFrOwogCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgorCXsKKwkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKKworCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1RWUDUxNTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVnLT52YWwgPSB0dnA1MTUwX3JlYWQoYywgcmVnLT5yZWcgJiAweGZmKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfSU5UX1NfUkVHSVNURVI6CisJeworCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCisJCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfVFZQNTE1MCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQl0dnA1MTUwX3dyaXRlKGMsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisKIAljYXNlIERFQ09ERVJfRFVNUDoKLQkJZHVtcF9yZWcoY2xpZW50KTsKKwkJZHVtcF9yZWcoYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CkBAIC02MDAsNyArOTM1LDcgQEAKIAkJCX0KIAogCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKLQkJCXR2cDUxNTBfc2VsbXV4KGNsaWVudCwgZGVjb2Rlci0+aW5wdXQpOworCQkJdHZwNTE1MF9zZWxtdXgoYywgZGVjb2Rlci0+aW5wdXQpOwogCiAJCQlicmVhazsKIAkJfQpAQCAtNjIwLDE5ICs5NTUsMTggQEAKIAogCQkJZGVjb2Rlci0+ZW5hYmxlID0gKCppYXJnICE9IDApOwogCi0JCQl0dnA1MTUwX3NlbG11eChjbGllbnQsIGRlY29kZXItPmlucHV0KTsKKwkJCXR2cDUxNTBfc2VsbXV4KGMsIGRlY29kZXItPmlucHV0KTsKIAogCQkJYnJlYWs7CiAJCX0KIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJCXsKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCQl1OCBpLCBuOworCQkJaW50IGk7CiAKLQkJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiVklESU9DX1FVRVJZQ1RSTCIpOworCQkJdHZwNTE1MF9kYmcoMSwgIlZJRElPQ19RVUVSWUNUUkwgY2FsbGVkXG4iKTsKIAotCQkJbiA9IHNpemVvZih0dnA1MTUwX3FjdHJsKSAvIHNpemVvZih0dnA1MTUwX3FjdHJsWzBdKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dnA1MTUwX3FjdHJsKTsgaSsrKQogCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHR2cDUxNTBfcWN0cmxbaV0uaWQpIHsKIAkJCQkJbWVtY3B5KHFjLCAmKHR2cDUxNTBfcWN0cmxbaV0pLAogCQkJCQkgICAgICAgc2l6ZW9mKCpxYykpOwpAQCAtNjQ0LDE2ICs5NzgsMTQgQEAKIAljYXNlIFZJRElPQ19HX0NUUkw6CiAJCXsKIAkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlZJRElPQ19HX0NUUkwiKTsKKwkJCXR2cDUxNTBfZGJnKDEsICJWSURJT0NfR19DVFJMIGNhbGxlZFxuIik7CiAKLQkJCXJldHVybiB0dnA1MTUwX2dldF9jdHJsKGNsaWVudCwgY3RybCk7CisJCQlyZXR1cm4gdHZwNTE1MF9nZXRfY3RybChjLCBjdHJsKTsKIAkJfQotCWNhc2UgVklESU9DX1NfQ1RSTF9PTEQ6CS8qID8/PyAqLwogCWNhc2UgVklESU9DX1NfQ1RSTDoKIAkJewogCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKIAkJCXU4IGksIG47Ci0JCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlZJRElPQ19TX0NUUkwiKTsKIAkJCW4gPSBzaXplb2YodHZwNTE1MF9xY3RybCkgLyBzaXplb2YodHZwNTE1MF9xY3RybFswXSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQkJCWlmIChjdHJsLT5pZCA9PSB0dnA1MTUwX3FjdHJsW2ldLmlkKSB7CkBAIC02NjIsMTEgKzk5NCwxMCBAQAogCQkJCQkgICAgfHwgY3RybC0+dmFsdWUgPgogCQkJCQkgICAgdHZwNTE1MF9xY3RybFtpXS5tYXhpbXVtKQogCQkJCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fREVCVUcKLQkJCQkJCSJWSURJT0NfU19DVFJMOiBpZD0lZCwgdmFsdWU9JWQiLAorCQkJCQl0dnA1MTUwX2RiZygxLAorCQkJCQkJIlZJRElPQ19TX0NUUkw6IGlkPSVkLCB2YWx1ZT0lZFxuIiwKIAkJCQkJCWN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7Ci0JCQkJCXJldHVybiB0dnA1MTUwX3NldF9jdHJsKGNsaWVudCwgY3RybCk7CisJCQkJCXJldHVybiB0dnA1MTUwX3NldF9jdHJsKGMsIGN0cmwpOwogCQkJCX0KIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02NzcsMjUgKzEwMDgsMjUgQEAKIAkJCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7CiAJCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwogCQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCQl0dnA1MTUwX3dyaXRlKGNsaWVudCwgVFZQNTE1MF9CUklHSFRfQ1RMLAorCQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9CUklHSFRfQ1RMLAogCQkJCQkgICAgICBkZWNvZGVyLT5icmlnaHQgPj4gOCk7CiAJCQl9CiAJCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gcGljLT5jb250cmFzdCkgewogCQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KIAkJCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQkJdHZwNTE1MF93cml0ZShjbGllbnQsIFRWUDUxNTBfQ09OVFJBU1RfQ1RMLAorCQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9DT05UUkFTVF9DVEwsCiAJCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDgpOwogCQkJfQogCQkJaWYgKGRlY29kZXItPnNhdCAhPSBwaWMtPmNvbG91cikgewogCQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KIAkJCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCQl0dnA1MTUwX3dyaXRlKGNsaWVudCwgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCwKKwkJCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwsCiAJCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDgpOwogCQkJfQogCQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgewogCQkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KIAkJCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCQl0dnA1MTUwX3dyaXRlKGNsaWVudCwgVFZQNTE1MF9IVUVfQ1RMLAorCQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9IVUVfQ1RMLAogCQkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOwogCQkJfQogCQkJYnJlYWs7CkBAIC03MjAsMTIgKzEwNTEsMTIgQEAKIHN0YXRpYyBpbnQgdHZwNTE1MF9kZXRlY3RfY2xpZW50KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgaW50IGFkZHJlc3MsIGludCBraW5kKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CiAJc3RydWN0IHR2cDUxNTAgKmNvcmU7CiAJaW50IHJ2OwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KKwlpZiAoZGVidWcpCisJCXByaW50ayggS0VSTl9JTkZPCiAJCSJ0dnA1MTUwLmM6IGRldGVjdGluZyB0dnA1MTUwIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCiAJCWFkZHJlc3MgPDwgMSk7CiAKQEAgLTczOCwyMiArMTA2OSwyMiBAQAogCSAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKIAkJcmV0dXJuIDA7CiAKLQljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gMCkKKwljID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYyA9PSAwKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKwltZW1jcHkoYywgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CiAKIAljb3JlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR2cDUxNTApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29yZSA9PSAwKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KGNvcmUsIDAsIHNpemVvZihzdHJ1Y3QgdHZwNTE1MCkpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNvcmUpOworCWkyY19zZXRfY2xpZW50ZGF0YShjLCBjb3JlKTsKIAotCXJ2ID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlydiA9IGkyY19hdHRhY2hfY2xpZW50KGMpOwogCi0JY29yZS0+bm9ybSA9IFZJREVPX01PREVfQVVUTzsKKwljb3JlLT5ub3JtID0gVjRMMl9TVERfQUxMOwogCWNvcmUtPmlucHV0ID0gMjsKIAljb3JlLT5lbmFibGUgPSAxOwogCWNvcmUtPmJyaWdodCA9IDMyNzY4OwpAQCAtNzYyLDM3ICsxMDkzLDQxIEBACiAJY29yZS0+c2F0ID0gMzI3Njg7CiAKIAlpZiAocnYpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwkJa2ZyZWUoYyk7CiAJCWtmcmVlKGNvcmUpOwogCQlyZXR1cm4gcnY7CiAJfQogCiAJaWYgKGRlYnVnID4gMSkKLQkJZHVtcF9yZWcoY2xpZW50KTsKKwkJZHVtcF9yZWcoYyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHZwNTE1MF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KKwlpZiAoZGVidWcpCisJCXByaW50ayggS0VSTl9JTkZPCiAJCSJ0dnA1MTUwLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKIAkJYWRhcHRlci0+bmFtZSwgYWRhcHRlci0+aWQpOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnR2cDUxNTBfZGV0ZWN0X2NsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHR2cDUxNTBfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKIHsKLQlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCWludCBlcnI7CiAKLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCXR2cDUxNTBfZGJnKDEsCisJCSJ0dnA1MTUwLmM6IHJlbW92aW5nIHR2cDUxNTAgYWRhcHRlciBvbiBhZGRyZXNzIDB4JXhcbiIsCisJCWMtPmFkZHIgPDwgMSk7CisKKwllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjKTsKIAlpZiAoZXJyKSB7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJa2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKKwlrZnJlZShjKTsKIAogCXJldHVybiAwOwogfQpAQCAtODAzLDkgKzExMzgsNyBAQAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInR2cDUxNTAiLAogCX0sCi0KLQkvKiBGSVhNRSAqLwotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAorCS5pZCA9IEkyQ19EUklWRVJJRF9UVlA1MTUwLAogCiAJLmF0dGFjaF9hZGFwdGVyID0gdHZwNTE1MF9hdHRhY2hfYWRhcHRlciwKIAkuZGV0YWNoX2NsaWVudCA9IHR2cDUxNTBfZGV0YWNoX2NsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCA0MTM0NTQ5Li4yYWI1YjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC05NTEsNiArOTUxLDEwIEBACiAJCQlkcHJpbnRrKCJWSURJT0NHVkJJRk1UIC8gVklESU9DX0dfRk1UOiAlZFxuIiwgZXJyKTsKIAkJCWJyZWFrOwogCQl9CisJCWlmIChmbXQyLT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0dSRVkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwogCQlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSBmbXQyLT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmU7CiAJCWZtdC0+c2FtcGxpbmdfcmF0ZSAgICA9IGZtdDItPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZTsKQEAgLTk2Niw2ICs5NzAsMTEgQEAKIAl7CiAJCXN0cnVjdCB2YmlfZm9ybWF0ICAgICAgKmZtdCA9IGFyZzsKIAorCQlpZiAoVklERU9fUEFMRVRURV9SQVcgIT0gZm10LT5zYW1wbGVfZm9ybWF0KSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwogCQlmbXQyID0ga21hbGxvYyhzaXplb2YoKmZtdDIpLEdGUF9LRVJORUwpOwogCQltZW1zZXQoZm10MiwgMCwgc2l6ZW9mKCpmbXQyKSk7CiAKQEAgLTk4Niw3ICs5OTUsNyBAQAogCiAJCWlmIChmbXQyLT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgIT0gZm10LT5zYW1wbGVzX3Blcl9saW5lIHx8CiAJCSAgICBmbXQyLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgIT0gZm10LT5zYW1wbGluZ19yYXRlICAgIHx8Ci0JCSAgICBWSURFT19QQUxFVFRFX1JBVyAgICAgICAgICAgICAgIT0gZm10LT5zYW1wbGVfZm9ybWF0ICAgIHx8CisJCSAgICBmbXQyLT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgICAgIT0gVjRMMl9QSVhfRk1UX0dSRVkgICAgIHx8CiAJCSAgICBmbXQyLT5mbXQudmJpLnN0YXJ0WzBdICAgICAgICAgIT0gZm10LT5zdGFydFswXSAgICAgICAgIHx8CiAJCSAgICBmbXQyLT5mbXQudmJpLmNvdW50WzBdICAgICAgICAgIT0gZm10LT5jb3VudFswXSAgICAgICAgIHx8CiAJCSAgICBmbXQyLT5mbXQudmJpLnN0YXJ0WzFdICAgICAgICAgIT0gZm10LT5zdGFydFsxXSAgICAgICAgIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggNjJhN2Q2My4uNWRiZDdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtNTgsNiArNTgsOCBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKICNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KQEAgLTE5MCw1NSArMTkyLDE3NCBAQAogCVtWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVRdICAgID0gInZiaS1vdXQiLAogfTsKIAotY2hhciAqdjRsMl9pb2N0bF9uYW1lc1syNTZdID0gewotCVswIC4uLiAyNTVdICAgICAgICAgICAgICAgICAgICAgID0gIlVOS05PV04iLAotCVtfSU9DX05SKFZJRElPQ19RVUVSWUNBUCldICAgICAgID0gIlZJRElPQ19RVUVSWUNBUCIsCi0JW19JT0NfTlIoVklESU9DX1JFU0VSVkVEKV0gICAgICAgPSAiVklESU9DX1JFU0VSVkVEIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTV9GTVQpXSAgICAgICA9ICJWSURJT0NfRU5VTV9GTVQiLAotCVtfSU9DX05SKFZJRElPQ19HX0ZNVCldICAgICAgICAgID0gIlZJRElPQ19HX0ZNVCIsCi0JW19JT0NfTlIoVklESU9DX1NfRk1UKV0gICAgICAgICAgPSAiVklESU9DX1NfRk1UIiwKLQlbX0lPQ19OUihWSURJT0NfUkVRQlVGUyldICAgICAgICA9ICJWSURJT0NfUkVRQlVGUyIsCi0JW19JT0NfTlIoVklESU9DX1FVRVJZQlVGKV0gICAgICAgPSAiVklESU9DX1FVRVJZQlVGIiwKLQlbX0lPQ19OUihWSURJT0NfR19GQlVGKV0gICAgICAgICA9ICJWSURJT0NfR19GQlVGIiwKLQlbX0lPQ19OUihWSURJT0NfU19GQlVGKV0gICAgICAgICA9ICJWSURJT0NfU19GQlVGIiwKLQlbX0lPQ19OUihWSURJT0NfT1ZFUkxBWSldICAgICAgICA9ICJWSURJT0NfT1ZFUkxBWSIsCi0JW19JT0NfTlIoVklESU9DX1FCVUYpXSAgICAgICAgICAgPSAiVklESU9DX1FCVUYiLAotCVtfSU9DX05SKFZJRElPQ19EUUJVRildICAgICAgICAgID0gIlZJRElPQ19EUUJVRiIsCi0JW19JT0NfTlIoVklESU9DX1NUUkVBTU9OKV0gICAgICAgPSAiVklESU9DX1NUUkVBTU9OIiwKLQlbX0lPQ19OUihWSURJT0NfU1RSRUFNT0ZGKV0gICAgICA9ICJWSURJT0NfU1RSRUFNT0ZGIiwKLQlbX0lPQ19OUihWSURJT0NfR19QQVJNKV0gICAgICAgICA9ICJWSURJT0NfR19QQVJNIiwKLQlbX0lPQ19OUihWSURJT0NfU19QQVJNKV0gICAgICAgICA9ICJWSURJT0NfU19QQVJNIiwKLQlbX0lPQ19OUihWSURJT0NfR19TVEQpXSAgICAgICAgICA9ICJWSURJT0NfR19TVEQiLAotCVtfSU9DX05SKFZJRElPQ19TX1NURCldICAgICAgICAgID0gIlZJRElPQ19TX1NURCIsCi0JW19JT0NfTlIoVklESU9DX0VOVU1TVEQpXSAgICAgICAgPSAiVklESU9DX0VOVU1TVEQiLAotCVtfSU9DX05SKFZJRElPQ19FTlVNSU5QVVQpXSAgICAgID0gIlZJRElPQ19FTlVNSU5QVVQiLAotCVtfSU9DX05SKFZJRElPQ19HX0NUUkwpXSAgICAgICAgID0gIlZJRElPQ19HX0NUUkwiLAotCVtfSU9DX05SKFZJRElPQ19TX0NUUkwpXSAgICAgICAgID0gIlZJRElPQ19TX0NUUkwiLAotCVtfSU9DX05SKFZJRElPQ19HX1RVTkVSKV0gICAgICAgID0gIlZJRElPQ19HX1RVTkVSIiwKLQlbX0lPQ19OUihWSURJT0NfU19UVU5FUildICAgICAgICA9ICJWSURJT0NfU19UVU5FUiIsCi0JW19JT0NfTlIoVklESU9DX0dfQVVESU8pXSAgICAgICAgPSAiVklESU9DX0dfQVVESU8iLAotCVtfSU9DX05SKFZJRElPQ19TX0FVRElPKV0gICAgICAgID0gIlZJRElPQ19TX0FVRElPIiwKLQlbX0lPQ19OUihWSURJT0NfUVVFUllDVFJMKV0gICAgICA9ICJWSURJT0NfUVVFUllDVFJMIiwKLQlbX0lPQ19OUihWSURJT0NfUVVFUllNRU5VKV0gICAgICA9ICJWSURJT0NfUVVFUllNRU5VIiwKLQlbX0lPQ19OUihWSURJT0NfR19JTlBVVCldICAgICAgICA9ICJWSURJT0NfR19JTlBVVCIsCi0JW19JT0NfTlIoVklESU9DX1NfSU5QVVQpXSAgICAgICAgPSAiVklESU9DX1NfSU5QVVQiLAotCVtfSU9DX05SKFZJRElPQ19HX09VVFBVVCldICAgICAgID0gIlZJRElPQ19HX09VVFBVVCIsCi0JW19JT0NfTlIoVklESU9DX1NfT1VUUFVUKV0gICAgICAgPSAiVklESU9DX1NfT1VUUFVUIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTU9VVFBVVCldICAgICA9ICJWSURJT0NfRU5VTU9VVFBVVCIsCi0JW19JT0NfTlIoVklESU9DX0dfQVVET1VUKV0gICAgICAgPSAiVklESU9DX0dfQVVET1VUIiwKLQlbX0lPQ19OUihWSURJT0NfU19BVURPVVQpXSAgICAgICA9ICJWSURJT0NfU19BVURPVVQiLAotCVtfSU9DX05SKFZJRElPQ19HX01PRFVMQVRPUildICAgID0gIlZJRElPQ19HX01PRFVMQVRPUiIsCi0JW19JT0NfTlIoVklESU9DX1NfTU9EVUxBVE9SKV0gICAgPSAiVklESU9DX1NfTU9EVUxBVE9SIiwKLQlbX0lPQ19OUihWSURJT0NfR19GUkVRVUVOQ1kpXSAgICA9ICJWSURJT0NfR19GUkVRVUVOQ1kiLAotCVtfSU9DX05SKFZJRElPQ19TX0ZSRVFVRU5DWSldICAgID0gIlZJRElPQ19TX0ZSRVFVRU5DWSIsCi0JW19JT0NfTlIoVklESU9DX0NST1BDQVApXSAgICAgICAgPSAiVklESU9DX0NST1BDQVAiLAotCVtfSU9DX05SKFZJRElPQ19HX0NST1ApXSAgICAgICAgID0gIlZJRElPQ19HX0NST1AiLAotCVtfSU9DX05SKFZJRElPQ19TX0NST1ApXSAgICAgICAgID0gIlZJRElPQ19TX0NST1AiLAotCVtfSU9DX05SKFZJRElPQ19HX0pQRUdDT01QKV0gICAgID0gIlZJRElPQ19HX0pQRUdDT01QIiwKLQlbX0lPQ19OUihWSURJT0NfU19KUEVHQ09NUCldICAgICA9ICJWSURJT0NfU19KUEVHQ09NUCIsCi0JW19JT0NfTlIoVklESU9DX1FVRVJZU1REKV0gICAgICAgPSAiVklESU9DX1FVRVJZU1REIiwKLQlbX0lPQ19OUihWSURJT0NfVFJZX0ZNVCldICAgICAgICA9ICJWSURJT0NfVFJZX0ZNVCIsCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgSEFWRV9WNEwxCitzdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKKwlbX0lPQ19OUihWSURJT0NHQ0FQKV0gICAgICAgPSAiVklESU9DR0NBUCIsCisJW19JT0NfTlIoVklESU9DR0NIQU4pXSAgICAgID0gIlZJRElPQ0dDSEFOIiwKKwlbX0lPQ19OUihWSURJT0NTQ0hBTildICAgICAgPSAiVklESU9DU0NIQU4iLAorCVtfSU9DX05SKFZJRElPQ0dUVU5FUildICAgICA9ICJWSURJT0NHVFVORVIiLAorCVtfSU9DX05SKFZJRElPQ1NUVU5FUildICAgICA9ICJWSURJT0NTVFVORVIiLAorCVtfSU9DX05SKFZJRElPQ0dQSUNUKV0gICAgICA9ICJWSURJT0NHUElDVCIsCisJW19JT0NfTlIoVklESU9DU1BJQ1QpXSAgICAgID0gIlZJRElPQ1NQSUNUIiwKKwlbX0lPQ19OUihWSURJT0NDQVBUVVJFKV0gICAgPSAiVklESU9DQ0FQVFVSRSIsCisJW19JT0NfTlIoVklESU9DR1dJTildICAgICAgID0gIlZJRElPQ0dXSU4iLAorCVtfSU9DX05SKFZJRElPQ1NXSU4pXSAgICAgICA9ICJWSURJT0NTV0lOIiwKKwlbX0lPQ19OUihWSURJT0NHRkJVRildICAgICAgPSAiVklESU9DR0ZCVUYiLAorCVtfSU9DX05SKFZJRElPQ1NGQlVGKV0gICAgICA9ICJWSURJT0NTRkJVRiIsCisJW19JT0NfTlIoVklESU9DS0VZKV0gICAgICAgID0gIlZJRElPQ0tFWSIsCisJW19JT0NfTlIoVklESU9DR0ZSRVEpXSAgICAgID0gIlZJRElPQ0dGUkVRIiwKKwlbX0lPQ19OUihWSURJT0NTRlJFUSldICAgICAgPSAiVklESU9DU0ZSRVEiLAorCVtfSU9DX05SKFZJRElPQ0dBVURJTyldICAgICA9ICJWSURJT0NHQVVESU8iLAorCVtfSU9DX05SKFZJRElPQ1NBVURJTyldICAgICA9ICJWSURJT0NTQVVESU8iLAorCVtfSU9DX05SKFZJRElPQ1NZTkMpXSAgICAgICA9ICJWSURJT0NTWU5DIiwKKwlbX0lPQ19OUihWSURJT0NNQ0FQVFVSRSldICAgPSAiVklESU9DTUNBUFRVUkUiLAorCVtfSU9DX05SKFZJRElPQ0dNQlVGKV0gICAgICA9ICJWSURJT0NHTUJVRiIsCisJW19JT0NfTlIoVklESU9DR1VOSVQpXSAgICAgID0gIlZJRElPQ0dVTklUIiwKKwlbX0lPQ19OUihWSURJT0NHQ0FQVFVSRSldICAgPSAiVklESU9DR0NBUFRVUkUiLAorCVtfSU9DX05SKFZJRElPQ1NDQVBUVVJFKV0gICA9ICJWSURJT0NTQ0FQVFVSRSIsCisJW19JT0NfTlIoVklESU9DU1BMQVlNT0RFKV0gID0gIlZJRElPQ1NQTEFZTU9ERSIsCisJW19JT0NfTlIoVklESU9DU1dSSVRFTU9ERSldID0gIlZJRElPQ1NXUklURU1PREUiLAorCVtfSU9DX05SKFZJRElPQ0dQTEFZSU5GTyldICA9ICJWSURJT0NHUExBWUlORk8iLAorCVtfSU9DX05SKFZJRElPQ1NNSUNST0NPREUpXSA9ICJWSURJT0NTTUlDUk9DT0RFIiwKKwlbX0lPQ19OUihWSURJT0NHVkJJRk1UKV0gICAgPSAiVklESU9DR1ZCSUZNVCIsCisJW19JT0NfTlIoVklESU9DU1ZCSUZNVCldICAgID0gIlZJRElPQ1NWQklGTVQiCiB9OworI2RlZmluZSBWNEwxX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDFfaW9jdGxzKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICp2NGwyX2lvY3Rsc1tdID0geworCVtfSU9DX05SKFZJRElPQ19RVUVSWUNBUCldICAgICAgICAgPSAiVklESU9DX1FVRVJZQ0FQIiwKKwlbX0lPQ19OUihWSURJT0NfUkVTRVJWRUQpXSAgICAgICAgID0gIlZJRElPQ19SRVNFUlZFRCIsCisJW19JT0NfTlIoVklESU9DX0VOVU1fRk1UKV0gICAgICAgICA9ICJWSURJT0NfRU5VTV9GTVQiLAorCVtfSU9DX05SKFZJRElPQ19HX0ZNVCldICAgICAgICAgICAgPSAiVklESU9DX0dfRk1UIiwKKwlbX0lPQ19OUihWSURJT0NfU19GTVQpXSAgICAgICAgICAgID0gIlZJRElPQ19TX0ZNVCIsCisJW19JT0NfTlIoVklESU9DX0dfTVBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfR19NUEVHQ09NUCIsCisJW19JT0NfTlIoVklESU9DX1NfTVBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfU19NUEVHQ09NUCIsCisJW19JT0NfTlIoVklESU9DX1JFUUJVRlMpXSAgICAgICAgICA9ICJWSURJT0NfUkVRQlVGUyIsCisJW19JT0NfTlIoVklESU9DX1FVRVJZQlVGKV0gICAgICAgICA9ICJWSURJT0NfUVVFUllCVUYiLAorCVtfSU9DX05SKFZJRElPQ19HX0ZCVUYpXSAgICAgICAgICAgPSAiVklESU9DX0dfRkJVRiIsCisJW19JT0NfTlIoVklESU9DX1NfRkJVRildICAgICAgICAgICA9ICJWSURJT0NfU19GQlVGIiwKKwlbX0lPQ19OUihWSURJT0NfT1ZFUkxBWSldICAgICAgICAgID0gIlZJRElPQ19PVkVSTEFZIiwKKwlbX0lPQ19OUihWSURJT0NfUUJVRildICAgICAgICAgICAgID0gIlZJRElPQ19RQlVGIiwKKwlbX0lPQ19OUihWSURJT0NfRFFCVUYpXSAgICAgICAgICAgID0gIlZJRElPQ19EUUJVRiIsCisJW19JT0NfTlIoVklESU9DX1NUUkVBTU9OKV0gICAgICAgICA9ICJWSURJT0NfU1RSRUFNT04iLAorCVtfSU9DX05SKFZJRElPQ19TVFJFQU1PRkYpXSAgICAgICAgPSAiVklESU9DX1NUUkVBTU9GRiIsCisJW19JT0NfTlIoVklESU9DX0dfUEFSTSldICAgICAgICAgICA9ICJWSURJT0NfR19QQVJNIiwKKwlbX0lPQ19OUihWSURJT0NfU19QQVJNKV0gICAgICAgICAgID0gIlZJRElPQ19TX1BBUk0iLAorCVtfSU9DX05SKFZJRElPQ19HX1NURCldICAgICAgICAgICAgPSAiVklESU9DX0dfU1REIiwKKwlbX0lPQ19OUihWSURJT0NfU19TVEQpXSAgICAgICAgICAgID0gIlZJRElPQ19TX1NURCIsCisJW19JT0NfTlIoVklESU9DX0VOVU1TVEQpXSAgICAgICAgICA9ICJWSURJT0NfRU5VTVNURCIsCisJW19JT0NfTlIoVklESU9DX0VOVU1JTlBVVCldICAgICAgICA9ICJWSURJT0NfRU5VTUlOUFVUIiwKKwlbX0lPQ19OUihWSURJT0NfR19DVFJMKV0gICAgICAgICAgID0gIlZJRElPQ19HX0NUUkwiLAorCVtfSU9DX05SKFZJRElPQ19TX0NUUkwpXSAgICAgICAgICAgPSAiVklESU9DX1NfQ1RSTCIsCisJW19JT0NfTlIoVklESU9DX0dfVFVORVIpXSAgICAgICAgICA9ICJWSURJT0NfR19UVU5FUiIsCisJW19JT0NfTlIoVklESU9DX1NfVFVORVIpXSAgICAgICAgICA9ICJWSURJT0NfU19UVU5FUiIsCisJW19JT0NfTlIoVklESU9DX0dfQVVESU8pXSAgICAgICAgICA9ICJWSURJT0NfR19BVURJTyIsCisJW19JT0NfTlIoVklESU9DX1NfQVVESU8pXSAgICAgICAgICA9ICJWSURJT0NfU19BVURJTyIsCisJW19JT0NfTlIoVklESU9DX1FVRVJZQ1RSTCldICAgICAgICA9ICJWSURJT0NfUVVFUllDVFJMIiwKKwlbX0lPQ19OUihWSURJT0NfUVVFUllNRU5VKV0gICAgICAgID0gIlZJRElPQ19RVUVSWU1FTlUiLAorCVtfSU9DX05SKFZJRElPQ19HX0lOUFVUKV0gICAgICAgICAgPSAiVklESU9DX0dfSU5QVVQiLAorCVtfSU9DX05SKFZJRElPQ19TX0lOUFVUKV0gICAgICAgICAgPSAiVklESU9DX1NfSU5QVVQiLAorCVtfSU9DX05SKFZJRElPQ19HX09VVFBVVCldICAgICAgICAgPSAiVklESU9DX0dfT1VUUFVUIiwKKwlbX0lPQ19OUihWSURJT0NfU19PVVRQVVQpXSAgICAgICAgID0gIlZJRElPQ19TX09VVFBVVCIsCisJW19JT0NfTlIoVklESU9DX0VOVU1PVVRQVVQpXSAgICAgICA9ICJWSURJT0NfRU5VTU9VVFBVVCIsCisJW19JT0NfTlIoVklESU9DX0dfQVVET1VUKV0gICAgICAgICA9ICJWSURJT0NfR19BVURPVVQiLAorCVtfSU9DX05SKFZJRElPQ19TX0FVRE9VVCldICAgICAgICAgPSAiVklESU9DX1NfQVVET1VUIiwKKwlbX0lPQ19OUihWSURJT0NfR19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19HX01PRFVMQVRPUiIsCisJW19JT0NfTlIoVklESU9DX1NfTU9EVUxBVE9SKV0gICAgICA9ICJWSURJT0NfU19NT0RVTEFUT1IiLAorCVtfSU9DX05SKFZJRElPQ19HX0ZSRVFVRU5DWSldICAgICAgPSAiVklESU9DX0dfRlJFUVVFTkNZIiwKKwlbX0lPQ19OUihWSURJT0NfU19GUkVRVUVOQ1kpXSAgICAgID0gIlZJRElPQ19TX0ZSRVFVRU5DWSIsCisJW19JT0NfTlIoVklESU9DX0NST1BDQVApXSAgICAgICAgICA9ICJWSURJT0NfQ1JPUENBUCIsCisJW19JT0NfTlIoVklESU9DX0dfQ1JPUCldICAgICAgICAgICA9ICJWSURJT0NfR19DUk9QIiwKKwlbX0lPQ19OUihWSURJT0NfU19DUk9QKV0gICAgICAgICAgID0gIlZJRElPQ19TX0NST1AiLAorCVtfSU9DX05SKFZJRElPQ19HX0pQRUdDT01QKV0gICAgICAgPSAiVklESU9DX0dfSlBFR0NPTVAiLAorCVtfSU9DX05SKFZJRElPQ19TX0pQRUdDT01QKV0gICAgICAgPSAiVklESU9DX1NfSlBFR0NPTVAiLAorCVtfSU9DX05SKFZJRElPQ19RVUVSWVNURCldICAgICAgICAgPSAiVklESU9DX1FVRVJZU1REIiwKKwlbX0lPQ19OUihWSURJT0NfVFJZX0ZNVCldICAgICAgICAgID0gIlZJRElPQ19UUllfRk1UIiwKKwlbX0lPQ19OUihWSURJT0NfRU5VTUFVRElPKV0gICAgICAgID0gIlZJRElPQ19FTlVNQVVESU8iLAorCVtfSU9DX05SKFZJRElPQ19FTlVNQVVET1VUKV0gICAgICAgPSAiVklESU9DX0VOVU1BVURPVVQiLAorCVtfSU9DX05SKFZJRElPQ19HX1BSSU9SSVRZKV0gICAgICAgPSAiVklESU9DX0dfUFJJT1JJVFkiLAorCVtfSU9DX05SKFZJRElPQ19TX1BSSU9SSVRZKV0gICAgICAgPSAiVklESU9DX1NfUFJJT1JJVFkiLAorI2lmIDEKKwlbX0lPQ19OUihWSURJT0NfR19TTElDRURfVkJJX0NBUCldID0gIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIiwKKyNlbmRpZgorCVtfSU9DX05SKFZJRElPQ19MT0dfU1RBVFVTKV0gICAgICAgPSAiVklESU9DX0xPR19TVEFUVVMiCit9OworI2RlZmluZSBWNEwyX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW9jdGxzKQorCitzdGF0aWMgY29uc3QgY2hhciAqdjRsMl9pbnRfaW9jdGxzW10gPSB7CisjaWZkZWYgSEFWRV9WSURFT19ERUNPREVSCisJW19JT0NfTlIoREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTKV0gICAgPSAiREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTIiwKKwlbX0lPQ19OUihERUNPREVSX0dFVF9TVEFUVVMpXSAgICAgICAgICA9ICJERUNPREVSX0dFVF9TVEFUVVMiLAorCVtfSU9DX05SKERFQ09ERVJfU0VUX05PUk0pXSAgICAgICAgICAgID0gIkRFQ09ERVJfU0VUX05PUk0iLAorCVtfSU9DX05SKERFQ09ERVJfU0VUX0lOUFVUKV0gICAgICAgICAgID0gIkRFQ09ERVJfU0VUX0lOUFVUIiwKKwlbX0lPQ19OUihERUNPREVSX1NFVF9PVVRQVVQpXSAgICAgICAgICA9ICJERUNPREVSX1NFVF9PVVRQVVQiLAorCVtfSU9DX05SKERFQ09ERVJfRU5BQkxFX09VVFBVVCldICAgICAgID0gIkRFQ09ERVJfRU5BQkxFX09VVFBVVCIsCisJW19JT0NfTlIoREVDT0RFUl9TRVRfUElDVFVSRSldICAgICAgICAgPSAiREVDT0RFUl9TRVRfUElDVFVSRSIsCisJW19JT0NfTlIoREVDT0RFUl9TRVRfR1BJTyldICAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfR1BJTyIsCisJW19JT0NfTlIoREVDT0RFUl9JTklUKV0gICAgICAgICAgICAgICAgPSAiREVDT0RFUl9JTklUIiwKKwlbX0lPQ19OUihERUNPREVSX1NFVF9WQklfQllQQVNTKV0gICAgICA9ICJERUNPREVSX1NFVF9WQklfQllQQVNTIiwKKwlbX0lPQ19OUihERUNPREVSX0RVTVApXSAgICAgICAgICAgICAgICA9ICJERUNPREVSX0RVTVAiLAorI2VuZGlmCisJW19JT0NfTlIoQVVEQ19TRVRfUkFESU8pXSAgICAgICAgICAgICAgPSAiQVVEQ19TRVRfUkFESU8iLAorCVtfSU9DX05SKEFVRENfU0VUX0lOUFVUKV0gICAgICAgICAgICAgID0gIkFVRENfU0VUX0lOUFVUIiwKKworCVtfSU9DX05SKFRVTkVSX1NFVF9UWVBFX0FERFIpXSAgICAgICAgID0gIlRVTkVSX1NFVF9UWVBFX0FERFIiLAorCVtfSU9DX05SKFRVTkVSX1NFVF9TVEFOREJZKV0gICAgICAgICAgID0gIlRVTkVSX1NFVF9TVEFOREJZIiwKKwlbX0lPQ19OUihUREE5ODg3X1NFVF9DT05GSUcpXSAgICAgICAgICA9ICJUREE5ODg3X1NFVF9DT05GSUciLAorCisJW19JT0NfTlIoVklESU9DX0lOVF9TX1JFR0lTVEVSKV0gICAgICAgPSAiVklESU9DX0lOVF9TX1JFR0lTVEVSIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX0dfUkVHSVNURVIpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfUkVHSVNURVIiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfUkVTRVQpXSAgICAgICAgICAgID0gIlZJRElPQ19JTlRfUkVTRVQiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSldID0gIlZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSIsCisJW19JT0NfTlIoVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkUpXSAgPSAiVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkUiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19WQklfREFUQSldICAgICAgID0gIlZJRElPQ19JTlRfU19WQklfREFUQSIsCisJW19JT0NfTlIoVklESU9DX0lOVF9HX1ZCSV9EQVRBKV0gICAgICAgPSAiVklESU9DX0lOVF9HX1ZCSV9EQVRBIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX0dfQ0hJUF9JREVOVCldICAgICA9ICJWSURJT0NfSU5UX0dfQ0hJUF9JREVOVCIsCisJW19JT0NfTlIoVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSldICAgPSAiVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSIKK307CisjZGVmaW5lIFY0TDJfSU5UX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW50X2lvY3RscykKKworLyogQ29tbW9uIGlvY3RsIGRlYnVnIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5CisgICBleHRlcm5hbCBpb2N0bCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGludGVybmFsIFY0TCBpb2N0bCAqLwordm9pZCB2NGxfcHJpbnRrX2lvY3RsKHVuc2lnbmVkIGludCBjbWQpCit7CisJY2hhciAqZGlyOworCisJc3dpdGNoIChfSU9DX0RJUihjbWQpKSB7CisJY2FzZSBfSU9DX05PTkU6ICAgICAgICAgICAgICBkaXIgPSAiLS0iOyBicmVhazsKKwljYXNlIF9JT0NfUkVBRDogICAgICAgICAgICAgIGRpciA9ICJyLSI7IGJyZWFrOworCWNhc2UgX0lPQ19XUklURTogICAgICAgICAgICAgZGlyID0gIi13IjsgYnJlYWs7CisJY2FzZSBfSU9DX1JFQUQgfCBfSU9DX1dSSVRFOiBkaXIgPSAicnciOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgIGRpciA9ICIqRVJSKiI7IGJyZWFrOworCX0KKwlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7CisJY2FzZSAnZCc6CisJCXByaW50aygidjRsMl9pbnQgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKKwkJICAgICAgIChfSU9DX05SKGNtZCkgPCBWNEwyX0lOVF9JT0NUTFMpID8KKwkJICAgICAgIHY0bDJfaW50X2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIlVOS05PV04iLCBkaXIsIGNtZCk7CisJCWJyZWFrOworI2lmZGVmIEhBVkVfVjRMMQorCWNhc2UgJ3YnOgorCQlwcmludGsoInY0bDEgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKKwkJICAgICAgIChfSU9DX05SKGNtZCkgPCBWNEwxX0lPQ1RMUykgPworCQkgICAgICAgdjRsMV9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgJ1YnOgorCQlwcmludGsoInY0bDIgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKKwkJICAgICAgIChfSU9DX05SKGNtZCkgPCBWNEwyX0lPQ1RMUykgPworCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygidW5rbm93biBpb2N0bCAnJWMnLCBkaXI9JXMsICMlZCAoMHglMDh4KVxuIiwKKwkJICAgICAgIF9JT0NfVFlQRShjbWQpLCBkaXIsIF9JT0NfTlIoY21kKSwgY21kKTsKKwl9Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTI1Myw3ICszNzQsNyBAQAogCiBFWFBPUlRfU1lNQk9MKHY0bDJfZmllbGRfbmFtZXMpOwogRVhQT1JUX1NZTUJPTCh2NGwyX3R5cGVfbmFtZXMpOwotRVhQT1JUX1NZTUJPTCh2NGwyX2lvY3RsX25hbWVzKTsKK0VYUE9SVF9TWU1CT0wodjRsX3ByaW50a19pb2N0bCk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKaW5kZXggNmRlNWIwMC4uOWE5OTAyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwpAQCAtNjgsNyArNjgsOCBAQAogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KTsKIAotI2lmIDEgLyogbmVlZGVkIHVudGlsIGFsbCBkcml2ZXJzIGFyZSBmaXhlZCAqLworI2lmIDEKKwkvKiBuZWVkZWQgdW50aWwgYWxsIGRyaXZlcnMgYXJlIGZpeGVkICovCiAJaWYgKCF2ZmQtPnJlbGVhc2UpCiAJCXJldHVybjsKICNlbmRpZgpAQCAtMzM4LDEzICszMzksMTQgQEAKIAlpZiAodmZkLT5kZXYpCiAJCXZmZC0+Y2xhc3NfZGV2LmRldiA9IHZmZC0+ZGV2OwogCXZmZC0+Y2xhc3NfZGV2LmNsYXNzICAgICAgID0gJnZpZGVvX2NsYXNzOwotCXZmZC0+Y2xhc3NfZGV2LmRldnQgICAgICAgPSBNS0RFVihWSURFT19NQUpPUiwgdmZkLT5taW5vcik7CisJdmZkLT5jbGFzc19kZXYuZGV2dCAgICAgICAgPSBNS0RFVihWSURFT19NQUpPUiwgdmZkLT5taW5vcik7CiAJc3RybGNweSh2ZmQtPmNsYXNzX2Rldi5jbGFzc19pZCwgdmZkLT5kZXZmc19uYW1lICsgNCwgQlVTX0lEX1NJWkUpOwogCWNsYXNzX2RldmljZV9yZWdpc3RlcigmdmZkLT5jbGFzc19kZXYpOwogCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmZkLT5jbGFzc19kZXYsCi0JCQkJICZjbGFzc19kZXZpY2VfYXR0cl9uYW1lKTsKKwkJCQkmY2xhc3NfZGV2aWNlX2F0dHJfbmFtZSk7CiAKLSNpZiAxIC8qIG5lZWRlZCB1bnRpbCBhbGwgZHJpdmVycyBhcmUgZml4ZWQgKi8KKyNpZiAxCisJLyogbmVlZGVkIHVudGlsIGFsbCBkcml2ZXJzIGFyZSBmaXhlZCAqLwogCWlmICghdmZkLT5yZWxlYXNlKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRlb2RldjogXCIlc1wiIGhhcyBubyByZWxlYXNlIGNhbGxiYWNrLiAiCiAJCSAgICAgICAiUGxlYXNlIGZpeCB5b3VyIGRyaXZlciBmb3IgcHJvcGVyIHN5c2ZzIHN1cHBvcnQsIHNlZSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKaW5kZXggYzMxOGJhMy4uYjdiMGFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwpAQCAtMTg3LDYgKzE4Nyw3IEBACiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgID0gdzk5NjZfdjRsX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQgICAgICAgICAgID0gdzk5NjZfdjRsX3JlYWQsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCmluZGV4IGJiZmQ1NWMuLmMyZTZkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwpAQCAtMjUsNyArMjUsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgpAQCAtMzMsMjAgKzMyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIndtODc3NSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlVsZiBFa2x1bmQsIEhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIHdtODc3NV9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAotCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotI2RlZmluZSB3bTg3NzVfaW5mbyhmbXQsIGFyZy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCi0KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzYgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogCkBAIC03MCw3ICs2MSw3IEBACiAJaW50IGk7CiAKIAlpZiAocmVnIDwgMCB8fCByZWcgPj0gVE9UX1JFR1MpIHsKLQkJd204Nzc1X2VycigiSW52YWxpZCByZWdpc3RlciBSJWRcbiIsIHJlZyk7CisJCXY0bF9lcnIoY2xpZW50LCAiSW52YWxpZCByZWdpc3RlciBSJWRcbiIsIHJlZyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTgwLDcgKzcxLDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCXdtODc3NV9lcnIoIkkyQzogY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCB2YWwsIHJlZyk7CisJdjRsX2VycihjbGllbnQsICJJMkM6IGNhbm5vdCB3cml0ZSAlMDN4IHRvIHJlZ2lzdGVyIFIlZFxuIiwgdmFsLCByZWcpOwogCXJldHVybiAtMTsKIH0KIApAQCAtODgsMzggKzc5LDUzIEBACiAJCQkgIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgd204Nzc1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCAqaW5wdXQgPSBhcmc7CisJc3RydWN0IHY0bDJfYXVkaW8gKmlucHV0ID0gYXJnOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQVVEQ19TRVRfSU5QVVQ6CisJY2FzZSBWSURJT0NfU19BVURJTzoKKwkJLyogVGhlcmUgYXJlIDQgaW5wdXRzIGFuZCBvbmUgb3V0cHV0LiBaZXJvIG9yIG1vcmUgaW5wdXRzCisJCSAgIGFyZSBtdWx0aXBsZXhlZCB0b2dldGhlciB0byB0aGUgb3V0cHV0LiBIZW5jZSB0aGVyZSBhcmUKKwkJICAgMTYgY29tYmluYXRpb25zLgorCQkgICBJZiBvbmx5IG9uZSBpbnB1dCBpcyBhY3RpdmUgKHRoZSBub3JtYWwgY2FzZSkgdGhlbiB0aGUKKwkJICAgaW5wdXQgdmFsdWVzIDEsIDIsIDQgb3IgOCBzaG91bGQgYmUgdXNlZC4gKi8KKwkJaWYgKGlucHV0LT5pbmRleCA+IDE1KSB7CisJCQl2NGxfZXJyKGNsaWVudCwgIkludmFsaWQgaW5wdXQgJWQuXG4iLCBpbnB1dC0+aW5kZXgpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc3RhdGUtPmlucHV0ID0gaW5wdXQtPmluZGV4OworCQlpZiAoc3RhdGUtPm11dGVkKQorCQkJYnJlYWs7CiAJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgwYzApOwogCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTQsIDB4MWQ0KTsKIAkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE1LCAweDFkNCk7CisJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDAgKyBzdGF0ZS0+aW5wdXQpOworCQlicmVhazsKIAotCQlpZiAoKmlucHV0ID09IEFVRElPX1JBRElPKSB7Ci0JCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTA4KTsKLQkJCXN0YXRlLT5pbnB1dCA9IDg7Ci0JCQlzdGF0ZS0+bXV0ZWQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCppbnB1dCA9PSBBVURJT19NVVRFKSB7Ci0JCQlzdGF0ZS0+bXV0ZWQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCppbnB1dCA9PSBBVURJT19VTk1VVEUpIHsKKwljYXNlIFZJRElPQ19HX0FVRElPOgorCQltZW1zZXQoaW5wdXQsIDAsIHNpemVvZigqaW5wdXQpKTsKKwkJaW5wdXQtPmluZGV4ID0gc3RhdGUtPmlucHV0OworCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19DVFJMOgorCQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fTVVURSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzdGF0ZS0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDBjMCk7CisJCXdtODc3NV93cml0ZShjbGllbnQsIFIxNCwgMHgxZDQpOworCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTUsIDB4MWQ0KTsKKwkJaWYgKCFzdGF0ZS0+bXV0ZWQpCiAJCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTAwICsgc3RhdGUtPmlucHV0KTsKLQkJCXN0YXRlLT5tdXRlZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBBbGwgb3RoZXIgaW5wdXRzLi4uICovCi0JCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDIpOwotCQlzdGF0ZS0+aW5wdXQgPSAyOwotCQlzdGF0ZS0+bXV0ZWQgPSAwOwogCQlicmVhazsKIAogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCXdtODc3NV9pbmZvKCJJbnB1dDogJXMlc1xuIiwKLQkJCSAgICBzdGF0ZS0+aW5wdXQgPT0gOCA/ICJyYWRpbyIgOiAiZGVmYXVsdCIsCisJCXY0bF9pbmZvKGNsaWVudCwgIklucHV0OiAlZCVzXG4iLCBzdGF0ZS0+aW5wdXQsCiAJCQkgICAgc3RhdGUtPm11dGVkID8gIiAobXV0ZWQpIiA6ICIiKTsKIAkJYnJlYWs7CiAKQEAgLTE3MCw3ICsxNzYsNyBAQAogCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXI7CiAJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJ3bTg3NzUiKTsKIAotCXdtODc3NV9pbmZvKCJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CiAKIAlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NzVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkgewpAQCAtMjA2LDExICsyMTIsNyBAQAogCiBzdGF0aWMgaW50IHdtODc3NV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0jaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRwogCWlmIChhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCi0jZWxzZQotCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9CVDg0OCkKLSNlbmRpZgogCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHdtODc3NV9hdHRhY2gpOwogCXJldHVybiAwOwogfQpAQCAtMjM1LDEyICsyMzcsMTAgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJ3bTg3NzUiLAogCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfV004Nzc1LAotCisJLmlkICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX1dNODc3NSwKIAkuYXR0YWNoX2FkYXB0ZXIgPSB3bTg3NzVfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgPSB3bTg3NzVfZGV0YWNoLAotCS5jb21tYW5kID0gd204Nzc1X2NvbW1hbmQsCisJLmRldGFjaF9jbGllbnQgID0gd204Nzc1X2RldGFjaCwKKwkuY29tbWFuZCAgICAgICAgPSB3bTg3NzVfY29tbWFuZCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKaW5kZXggNDAzNGYxYi4uMTUyODNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCkBAIC00Njc4LDYgKzQ2NzgsNyBAQAogCS5vcGVuID0gem9yYW5fb3BlbiwKIAkucmVsZWFzZSA9IHpvcmFuX2Nsb3NlLAogCS5pb2N0bCA9IHpvcmFuX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIAkucmVhZCA9IHpvcmFuX3JlYWQsCiAJLndyaXRlID0gem9yYW5fd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5jCmluZGV4IDA3Mjg2ODEuLmQ0YzYzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5jCkBAIC0xNDkwLDYgKzE0OTAsNyBAQAogCS53cml0ZQkJPSB6b3Jhbl93cml0ZSwKIAkucG9sbAkJPSB6b3Jhbl9wb2xsLAogCS5pb2N0bAkJPSB6b3Jhbl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5tbWFwCQk9IHpvcmFuX21tYXAsCiAJLm1pbm9yCQk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FLmlvY3RsIGIvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUuaW9jdGwKaW5kZXggNzNkZDA4NC4uNjVjMGM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUuaW9jdGwKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUuaW9jdGwKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgRU5PTUVNICAgICAgS2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCiAKICAgIEEgcmV0dXJuIHZhbHVlIG9mIDAgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSB2YWx1ZSB3YXMgYWN0dWFsbHkKLSAgIHByb3Blcmx5IHJldHJlaXZlZC4gIFRoZSB1c2VyIHNob3VsZCBjaGVjayB0aGUgcmVzdWx0IGxpc3QgCisgICBwcm9wZXJseSByZXRyaWV2ZWQuICBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhlIHJlc3VsdCBsaXN0IAogICAgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBzdGF0dXMgb2YgdGhlIHRyYW5zYWN0aW9uLgogCiBWSUlJLiBEb3dubG9hZGluZyBTb2Z0d2FyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jLmMgYi9kcml2ZXJzL21tYy9tbWMuYwppbmRleCA2Njk2ZjcxLi5iZmNhNWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWMuYworKysgYi9kcml2ZXJzL21tYy9tbWMuYwpAQCAtNDk1LDYgKzQ5NSw3IEBACiAKIAkJY2FzZSAyOiAvKiBNTUMgdjIuMCAtIHYyLjIgKi8KIAkJY2FzZSAzOiAvKiBNTUMgdjMuMSAtIHYzLjMgKi8KKwkJY2FzZSA0OiAvKiBNTUMgdjQgKi8KIAkJCWNhcmQtPmNpZC5tYW5maWQJPSBVTlNUVUZGX0JJVFMocmVzcCwgMTIwLCA4KTsKIAkJCWNhcmQtPmNpZC5vZW1pZAkJPSBVTlNUVUZGX0JJVFMocmVzcCwgMTA0LCAxNik7CiAJCQljYXJkLT5jaWQucHJvZF9uYW1lWzBdCT0gVU5TVFVGRl9CSVRTKHJlc3AsIDk2LCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY19ibG9jay5jIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKaW5kZXggZDVmMjg5OC4uZjJjNDJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKQEAgLTE4Nyw3ICsxODcsMTMgQEAKIAkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1dSSVRFOwogCQkJYnJxLmRhdGEuYmxvY2tzID0gMTsKIAkJfQotCQlicnEubXJxLnN0b3AgPSBicnEuZGF0YS5ibG9ja3MgPiAxID8gJmJycS5zdG9wIDogTlVMTDsKKworCQlpZiAoYnJxLmRhdGEuYmxvY2tzID4gMSkgeworCQkJYnJxLmRhdGEuZmxhZ3MgfD0gTU1DX0RBVEFfTVVMVEk7CisJCQlicnEubXJxLnN0b3AgPSAmYnJxLnN0b3A7CisJCX0gZWxzZSB7CisJCQlicnEubXJxLnN0b3AgPSBOVUxMOworCQl9CiAKIAkJYnJxLmRhdGEuc2cgPSBtcS0+c2c7CiAJCWJycS5kYXRhLnNnX2xlbiA9IGJsa19ycV9tYXBfc2cocmVxLT5xLCByZXEsIGJycS5kYXRhLnNnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3dic2QuYyBiL2RyaXZlcnMvbW1jL3dic2QuYwppbmRleCA0ZjEzYmQyLi5mMjU3NTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy93YnNkLmMKKysrIGIvZHJpdmVycy9tbWMvd2JzZC5jCkBAIC05MCw3ICs5MCw3IEBACiAgKiBCYXNpYyBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2JzZF91bmxvY2tfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgaW5saW5lIHZvaWQgd2JzZF91bmxvY2tfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJQlVHX09OKGhvc3QtPmNvbmZpZyA9PSAwKTsKIApAQCAtOTgsMTQgKzk4LDE0IEBACiAJb3V0Yihob3N0LT51bmxvY2tfY29kZSwgaG9zdC0+Y29uZmlnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfbG9ja19jb25maWcoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2xvY2tfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJQlVHX09OKGhvc3QtPmNvbmZpZyA9PSAwKTsKIAogCW91dGIoTE9DS19DT0RFLCBob3N0LT5jb25maWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2JzZF93cml0ZV9jb25maWcoc3RydWN0IHdic2RfaG9zdCogaG9zdCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3dyaXRlX2NvbmZpZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCB1OCByZWcsIHU4IHZhbHVlKQogewogCUJVR19PTihob3N0LT5jb25maWcgPT0gMCk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCW91dGIodmFsdWUsIGhvc3QtPmNvbmZpZyArIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHU4IHdic2RfcmVhZF9jb25maWcoc3RydWN0IHdic2RfaG9zdCogaG9zdCwgdTggcmVnKQorc3RhdGljIGlubGluZSB1OCB3YnNkX3JlYWRfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHU4IHJlZykKIHsKIAlCVUdfT04oaG9zdC0+Y29uZmlnID09IDApOwogCkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogCXJldHVybiBpbmIoaG9zdC0+Y29uZmlnICsgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3dyaXRlX2luZGV4KHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsIHU4IGluZGV4LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3dyaXRlX2luZGV4KHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHU4IGluZGV4LCB1OCB2YWx1ZSkKIHsKIAlvdXRiKGluZGV4LCBob3N0LT5iYXNlICsgV0JTRF9JRFhSKTsKIAlvdXRiKHZhbHVlLCBob3N0LT5iYXNlICsgV0JTRF9EQVRBUik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggd2JzZF9yZWFkX2luZGV4KHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsIHU4IGluZGV4KQorc3RhdGljIGlubGluZSB1OCB3YnNkX3JlYWRfaW5kZXgoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgdTggaW5kZXgpCiB7CiAJb3V0YihpbmRleCwgaG9zdC0+YmFzZSArIFdCU0RfSURYUik7CiAJcmV0dXJuIGluYihob3N0LT5iYXNlICsgV0JTRF9EQVRBUik7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAqIENvbW1vbiByb3V0aW5lcwogICovCiAKLXN0YXRpYyB2b2lkIHdic2RfaW5pdF9kZXZpY2Uoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfaW5pdF9kZXZpY2Uoc3RydWN0IHdic2RfaG9zdCAqaG9zdCkKIHsKIAl1OCBzZXR1cCwgaWVyOwogCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlpbmIoaG9zdC0+YmFzZSArIFdCU0RfSVNSKTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9yZXNldChzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIHZvaWQgd2JzZF9yZXNldChzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCXU4IHNldHVwOwogCkBAIC0yMTEsMTQgKzIxMSwxMyBAQAogCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfU0VUVVAsIHNldHVwKTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9yZXF1ZXN0X2VuZChzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QqIG1ycSkKK3N0YXRpYyB2b2lkIHdic2RfcmVxdWVzdF9lbmQoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBkbWFmbGFnczsKIAogCURCR0YoIkVuZGluZyByZXF1ZXN0LCBjbWQgKCV4KVxuIiwgbXJxLT5jbWQtPm9wY29kZSk7CiAKLQlpZiAoaG9zdC0+ZG1hID49IDApCi0JeworCWlmIChob3N0LT5kbWEgPj0gMCkgewogCQkvKgogCQkgKiBSZWxlYXNlIElTQSBETUEgY29udHJvbGxlci4KIAkJICovCkBAIC0yNDcsNyArMjQ2LDcgQEAKICAqIFNjYXR0ZXIvZ2F0aGVyIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2luaXRfc2coc3RydWN0IHdic2RfaG9zdCogaG9zdCwgc3RydWN0IG1tY19kYXRhKiBkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHdic2RfaW5pdF9zZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJLyoKIAkgKiBHZXQgaW5mby4gYWJvdXQgU0cgbGlzdCBmcm9tIGRhdGEgc3RydWN0dXJlLgpAQCAtMjU5LDcgKzI1OCw3IEBACiAJaG9zdC0+cmVtYWluID0gaG9zdC0+Y3VyX3NnLT5sZW5ndGg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHdic2RfbmV4dF9zZyhzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIGlubGluZSBpbnQgd2JzZF9uZXh0X3NnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJLyoKIAkgKiBTa2lwIHRvIG5leHQgU0cgZW50cnkuCkBAIC0yNzAsMzMgKzI2OSwzMiBAQAogCS8qCiAJICogQW55IGVudHJpZXMgbGVmdD8KIAkgKi8KLQlpZiAoaG9zdC0+bnVtX3NnID4gMCkKLQkgIHsKLQkgICAgaG9zdC0+b2Zmc2V0ID0gMDsKLQkgICAgaG9zdC0+cmVtYWluID0gaG9zdC0+Y3VyX3NnLT5sZW5ndGg7Ci0JICB9CisJaWYgKGhvc3QtPm51bV9zZyA+IDApIHsKKwkJaG9zdC0+b2Zmc2V0ID0gMDsKKwkJaG9zdC0+cmVtYWluID0gaG9zdC0+Y3VyX3NnLT5sZW5ndGg7CisJfQogCiAJcmV0dXJuIGhvc3QtPm51bV9zZzsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyKiB3YnNkX2ttYXBfc2coc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbmxpbmUgY2hhciAqd2JzZF9rbWFwX3NnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJaG9zdC0+bWFwcGVkX3NnID0ga21hcF9hdG9taWMoaG9zdC0+Y3VyX3NnLT5wYWdlLCBLTV9CSU9fU1JDX0lSUSkgKwogCQlob3N0LT5jdXJfc2ctPm9mZnNldDsKIAlyZXR1cm4gaG9zdC0+bWFwcGVkX3NnOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2JzZF9rdW5tYXBfc2coc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2t1bm1hcF9zZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWt1bm1hcF9hdG9taWMoaG9zdC0+bWFwcGVkX3NnLCBLTV9CSU9fU1JDX0lSUSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX3NnX3RvX2RtYShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2RhdGEqIGRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgd2JzZF9zZ190b19kbWEoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGludCBsZW4sIGksIHNpemU7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0KiBzZzsKLQljaGFyKiBkbWFidWYgPSBob3N0LT5kbWFfYnVmZmVyOwotCWNoYXIqIHNnYnVmOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJY2hhciAqZG1hYnVmID0gaG9zdC0+ZG1hX2J1ZmZlcjsKKwljaGFyICpzZ2J1ZjsKIAogCXNpemUgPSBob3N0LT5zaXplOwogCkBAIC0zMDgsOCArMzA2LDcgQEAKIAkgKiBiZSB0aGUgZW50aXJlIGxpc3QgdGhvdWdoIHNvIG1ha2Ugc3VyZSB0aGF0CiAJICogd2UgZG8gbm90IHRyYW5zZmVyIHRvbyBtdWNoLgogCSAqLwotCWZvciAoaSA9IDA7aSA8IGxlbjtpKyspCi0JeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlzZ2J1ZiA9IGttYXBfYXRvbWljKHNnW2ldLnBhZ2UsIEtNX0JJT19TUkNfSVJRKSArIHNnW2ldLm9mZnNldDsKIAkJaWYgKHNpemUgPCBzZ1tpXS5sZW5ndGgpCiAJCQltZW1jcHkoZG1hYnVmLCBzZ2J1Ziwgc2l6ZSk7CkBAIC0zMzcsMTIgKzMzNCwxMiBAQAogCWhvc3QtPnNpemUgLT0gc2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfZG1hX3RvX3NnKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsIHN0cnVjdCBtbWNfZGF0YSogZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2RtYV90b19zZyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IGxlbiwgaSwgc2l6ZTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QqIHNnOwotCWNoYXIqIGRtYWJ1ZiA9IGhvc3QtPmRtYV9idWZmZXI7Ci0JY2hhciogc2didWY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwljaGFyICpkbWFidWYgPSBob3N0LT5kbWFfYnVmZmVyOworCWNoYXIgKnNnYnVmOwogCiAJc2l6ZSA9IGhvc3QtPnNpemU7CiAKQEAgLTM1NCw4ICszNTEsNyBAQAogCSAqIGJlIHRoZSBlbnRpcmUgbGlzdCB0aG91Z2ggc28gbWFrZSBzdXJlIHRoYXQKIAkgKiB3ZSBkbyBub3QgdHJhbnNmZXIgdG9vIG11Y2guCiAJICovCi0JZm9yIChpID0gMDtpIDwgbGVuO2krKykKLQl7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXNnYnVmID0ga21hcF9hdG9taWMoc2dbaV0ucGFnZSwgS01fQklPX1NSQ19JUlEpICsgc2dbaV0ub2Zmc2V0OwogCQlpZiAoc2l6ZSA8IHNnW2ldLmxlbmd0aCkKIAkJCW1lbWNweShzZ2J1ZiwgZG1hYnVmLCBzaXplKTsKQEAgLTM4Nyw0NiArMzgzLDM4IEBACiAgKiBDb21tYW5kIGhhbmRsaW5nCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfZ2V0X3Nob3J0X3JlcGx5KHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QsCi0Jc3RydWN0IG1tY19jb21tYW5kKiBjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgd2JzZF9nZXRfc2hvcnRfcmVwbHkoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwKKwkJCQkJc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJLyoKIAkgKiBDb3JyZWN0IHJlc3BvbnNlIHR5cGU/CiAJICovCi0JaWYgKHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SU1BMRU4pICE9IFdCU0RfUlNQX1NIT1JUKQotCXsKKwlpZiAod2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JTUExFTikgIT0gV0JTRF9SU1BfU0hPUlQpIHsKIAkJY21kLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJcmV0dXJuOwogCX0KIAotCWNtZC0+cmVzcFswXSA9Ci0JCXdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SRVNQMTIpIDw8IDI0OwotCWNtZC0+cmVzcFswXSB8PQotCQl3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDEzKSA8PCAxNjsKLQljbWQtPnJlc3BbMF0gfD0KLQkJd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JFU1AxNCkgPDwgODsKLQljbWQtPnJlc3BbMF0gfD0KLQkJd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JFU1AxNSkgPDwgMDsKLQljbWQtPnJlc3BbMV0gPQotCQl3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE2KSA8PCAyNDsKKwljbWQtPnJlc3BbMF0gID0gd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JFU1AxMikgPDwgMjQ7CisJY21kLT5yZXNwWzBdIHw9IHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SRVNQMTMpIDw8IDE2OworCWNtZC0+cmVzcFswXSB8PSB3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE0KSA8PCA4OworCWNtZC0+cmVzcFswXSB8PSB3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE1KSA8PCAwOworCWNtZC0+cmVzcFsxXSAgPSB3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDE2KSA8PCAyNDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdic2RfZ2V0X2xvbmdfcmVwbHkoc3RydWN0IHdic2RfaG9zdCogaG9zdCwKLQlzdHJ1Y3QgbW1jX2NvbW1hbmQqIGNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YnNkX2dldF9sb25nX3JlcGx5KHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsCisJc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJaW50IGk7CiAKIAkvKgogCSAqIENvcnJlY3QgcmVzcG9uc2UgdHlwZT8KIAkgKi8KLQlpZiAod2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1JTUExFTikgIT0gV0JTRF9SU1BfTE9ORykKLQl7CisJaWYgKHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9SU1BMRU4pICE9IFdCU0RfUlNQX0xPTkcpIHsKIAkJY21kLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJcmV0dXJuOwogCX0KIAotCWZvciAoaSA9IDA7aSA8IDQ7aSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWNtZC0+cmVzcFtpXSA9CiAJCQl3YnNkX3JlYWRfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUkVTUDEgKyBpICogNCkgPDwgMjQ7CiAJCWNtZC0+cmVzcFtpXSB8PQpAQCAtNDM4LDcgKzQyNiw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB3YnNkX3NlbmRfY29tbWFuZChzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQqIGNtZCkKK3N0YXRpYyB2b2lkIHdic2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQogewogCWludCBpOwogCXU4IHN0YXR1cywgaXNyOwpAQCAtNDU2LDcgKzQ0NCw3IEBACiAJICogU2VuZCB0aGUgY29tbWFuZCAoQ1JDIGNhbGN1bGF0ZWQgYnkgaG9zdCkuCiAJICovCiAJb3V0YihjbWQtPm9wY29kZSwgaG9zdC0+YmFzZSArIFdCU0RfQ01EUik7Ci0JZm9yIChpID0gMztpID49IDA7aS0tKQorCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKQogCQlvdXRiKChjbWQtPmFyZyA+PiAoaSAqIDgpKSAmIDB4ZmYsIGhvc3QtPmJhc2UgKyBXQlNEX0NNRFIpOwogCiAJY21kLT5lcnJvciA9IE1NQ19FUlJfTk9ORTsKQEAgLTQ3MSw4ICs0NTksNyBAQAogCS8qCiAJICogRG8gd2UgZXhwZWN0IGEgcmVwbHk/CiAJICovCi0JaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF9NQVNLKSAhPSBNTUNfUlNQX05PTkUpCi0JeworCWlmICgoY21kLT5mbGFncyAmIE1NQ19SU1BfTUFTSykgIT0gTU1DX1JTUF9OT05FKSB7CiAJCS8qCiAJCSAqIFJlYWQgYmFjayBzdGF0dXMuCiAJCSAqLwpAQCAtNDg4LDggKzQ3NSw3IEBACiAJCWVsc2UgaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpICYmIChpc3IgJiBXQlNEX0lOVF9DUkMpKQogCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOwogCQkvKiBBbGwgb2sgKi8KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF9NQVNLKSA9PSBNTUNfUlNQX1NIT1JUKQogCQkJCXdic2RfZ2V0X3Nob3J0X3JlcGx5KGhvc3QsIGNtZCk7CiAJCQllbHNlCkBAIC01MDQsMTAgKzQ5MCwxMCBAQAogICogRGF0YSBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCB3YnNkX2VtcHR5X2ZpZm8oc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfZW1wdHlfZmlmbyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewotCXN0cnVjdCBtbWNfZGF0YSogZGF0YSA9IGhvc3QtPm1ycS0+Y21kLT5kYXRhOwotCWNoYXIqIGJ1ZmZlcjsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5tcnEtPmNtZC0+ZGF0YTsKKwljaGFyICpidWZmZXI7CiAJaW50IGksIGZzciwgZmlmbzsKIAogCS8qCkBAIC01MjIsOCArNTA4LDcgQEAKIAkgKiBEcmFpbiB0aGUgZmlmby4gVGhpcyBoYXMgYSB0ZW5kZW5jeSB0byBsb29wIGxvbmdlcgogCSAqIHRoYW4gdGhlIEZJRk8gbGVuZ3RoICh1c3VhbGx5IG9uZSBibG9jaykuCiAJICovCi0Jd2hpbGUgKCEoKGZzciA9IGluYihob3N0LT5iYXNlICsgV0JTRF9GU1IpKSAmIFdCU0RfRklGT19FTVBUWSkpCi0JeworCXdoaWxlICghKChmc3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfRlNSKSkgJiBXQlNEX0ZJRk9fRU1QVFkpKSB7CiAJCS8qCiAJCSAqIFRoZSBzaXplIGZpZWxkIGluIHRoZSBGU1IgaXMgYnJva2VuIHNvIHdlIGhhdmUgdG8KIAkJICogZG8gc29tZSBndWVzc2luZy4KQEAgLTUzNSw4ICs1MjAsNyBAQAogCQllbHNlCiAJCQlmaWZvID0gMTsKIAotCQlmb3IgKGkgPSAwO2kgPCBmaWZvO2krKykKLQkJeworCQlmb3IgKGkgPSAwOyBpIDwgZmlmbzsgaSsrKSB7CiAJCQkqYnVmZmVyID0gaW5iKGhvc3QtPmJhc2UgKyBXQlNEX0RGUik7CiAJCQlidWZmZXIrKzsKIAkJCWhvc3QtPm9mZnNldCsrOwpAQCAtNTQ3LDggKzUzMSw3IEBACiAJCQkvKgogCQkJICogVHJhbnNmZXIgZG9uZT8KIAkJCSAqLwotCQkJaWYgKGRhdGEtPmJ5dGVzX3hmZXJlZCA9PSBob3N0LT5zaXplKQotCQkJeworCQkJaWYgKGRhdGEtPmJ5dGVzX3hmZXJlZCA9PSBob3N0LT5zaXplKSB7CiAJCQkJd2JzZF9rdW5tYXBfc2coaG9zdCk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNTU2LDE1ICs1MzksMTMgQEAKIAkJCS8qCiAJCQkgKiBFbmQgb2Ygc2NhdHRlciBsaXN0IGVudHJ5PwogCQkJICovCi0JCQlpZiAoaG9zdC0+cmVtYWluID09IDApCi0JCQl7CisJCQlpZiAoaG9zdC0+cmVtYWluID09IDApIHsKIAkJCQl3YnNkX2t1bm1hcF9zZyhob3N0KTsKIAogCQkJCS8qCiAJCQkJICogR2V0IG5leHQgZW50cnkuIENoZWNrIGlmIGxhc3QuCiAJCQkJICovCi0JCQkJaWYgKCF3YnNkX25leHRfc2coaG9zdCkpCi0JCQkJeworCQkJCWlmICghd2JzZF9uZXh0X3NnKGhvc3QpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFdlIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50LgogCQkJCQkgKiBJdCBtZWFucyB0aGF0IHdlJ3JlIHRyeWluZyB0bwpAQCAtNTk0LDEwICs1NzUsMTAgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+Zmlmb190YXNrbGV0KTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9maWxsX2ZpZm8oc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfZmlsbF9maWZvKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7Ci0Jc3RydWN0IG1tY19kYXRhKiBkYXRhID0gaG9zdC0+bXJxLT5jbWQtPmRhdGE7Ci0JY2hhciogYnVmZmVyOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPm1ycS0+Y21kLT5kYXRhOworCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgaSwgZnNyLCBmaWZvOwogCiAJLyoKQEAgLTYxMyw4ICs1OTQsNyBAQAogCSAqIEZpbGwgdGhlIGZpZm8uIFRoaXMgaGFzIGEgdGVuZGVuY3kgdG8gbG9vcCBsb25nZXIKIAkgKiB0aGFuIHRoZSBGSUZPIGxlbmd0aCAodXN1YWxseSBvbmUgYmxvY2spLgogCSAqLwotCXdoaWxlICghKChmc3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfRlNSKSkgJiBXQlNEX0ZJRk9fRlVMTCkpCi0JeworCXdoaWxlICghKChmc3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfRlNSKSkgJiBXQlNEX0ZJRk9fRlVMTCkpIHsKIAkJLyoKIAkJICogVGhlIHNpemUgZmllbGQgaW4gdGhlIEZTUiBpcyBicm9rZW4gc28gd2UgaGF2ZSB0bwogCQkgKiBkbyBzb21lIGd1ZXNzaW5nLgpAQCAtNjI2LDggKzYwNiw3IEBACiAJCWVsc2UKIAkJCWZpZm8gPSAxNTsKIAotCQlmb3IgKGkgPSAxNjtpID4gZmlmbztpLS0pCi0JCXsKKwkJZm9yIChpID0gMTY7IGkgPiBmaWZvOyBpLS0pIHsKIAkJCW91dGIoKmJ1ZmZlciwgaG9zdC0+YmFzZSArIFdCU0RfREZSKTsKIAkJCWJ1ZmZlcisrOwogCQkJaG9zdC0+b2Zmc2V0Kys7CkBAIC02MzgsOCArNjE3LDcgQEAKIAkJCS8qCiAJCQkgKiBUcmFuc2ZlciBkb25lPwogCQkJICovCi0JCQlpZiAoZGF0YS0+Ynl0ZXNfeGZlcmVkID09IGhvc3QtPnNpemUpCi0JCQl7CisJCQlpZiAoZGF0YS0+Ynl0ZXNfeGZlcmVkID09IGhvc3QtPnNpemUpIHsKIAkJCQl3YnNkX2t1bm1hcF9zZyhob3N0KTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC02NDcsMTUgKzYyNSwxMyBAQAogCQkJLyoKIAkJCSAqIEVuZCBvZiBzY2F0dGVyIGxpc3QgZW50cnk/CiAJCQkgKi8KLQkJCWlmIChob3N0LT5yZW1haW4gPT0gMCkKLQkJCXsKKwkJCWlmIChob3N0LT5yZW1haW4gPT0gMCkgewogCQkJCXdic2Rfa3VubWFwX3NnKGhvc3QpOwogCiAJCQkJLyoKIAkJCQkgKiBHZXQgbmV4dCBlbnRyeS4gQ2hlY2sgaWYgbGFzdC4KIAkJCQkgKi8KLQkJCQlpZiAoIXdic2RfbmV4dF9zZyhob3N0KSkKLQkJCQl7CisJCQkJaWYgKCF3YnNkX25leHRfc2coaG9zdCkpIHsKIAkJCQkJLyoKIAkJCQkJICogV2Ugc2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMgcG9pbnQuCiAJCQkJCSAqIEl0IG1lYW5zIHRoYXQgd2UncmUgdHJ5aW5nIHRvCkBAIC02ODQsNyArNjYwLDcgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5maWZvX3Rhc2tsZXQpOwogfQogCi1zdGF0aWMgdm9pZCB3YnNkX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2RhdGEqIGRhdGEpCitzdGF0aWMgdm9pZCB3YnNkX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdTE2IGJsa3NpemU7CiAJdTggc2V0dXA7CkBAIC03MDYsOCArNjgyLDEwIEBACiAJICovCiAJaWYgKGRhdGEtPnRpbWVvdXRfbnMgPiAxMjcwMDAwMDApCiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfVEFBQywgMTI3KTsKLQllbHNlCi0JCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfVEFBQywgZGF0YS0+dGltZW91dF9ucy8xMDAwMDAwKTsKKwllbHNlIHsKKwkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9UQUFDLAorCQkJZGF0YS0+dGltZW91dF9ucyAvIDEwMDAwMDApOworCX0KIAogCWlmIChkYXRhLT50aW1lb3V0X2Nsa3MgPiAyNTUpCiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfTlNBQywgMjU1KTsKQEAgLTcyMiwyMyArNzAwLDE4IEBACiAJICogU3BhY2UgZm9yIENSQyBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBzaXplLgogCSAqIFR3byBieXRlcyBhcmUgbmVlZGVkIGZvciBlYWNoIGRhdGEgbGluZS4KIAkgKi8KLQlpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfMSkKLQl7CisJaWYgKGhvc3QtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzEpIHsKIAkJYmxrc2l6ZSA9ICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpICsgMjsKIAogCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX1BCU01TQiwgKGJsa3NpemUgPj4gNCkgJiAweEYwKTsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9QQlNMU0IsIGJsa3NpemUgJiAweEZGKTsKLQl9Ci0JZWxzZSBpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKLQl7CisJfSBlbHNlIGlmIChob3N0LT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CiAJCWJsa3NpemUgPSAoMSA8PCBkYXRhLT5ibGtzel9iaXRzKSArIDIgKiA0OwogCi0JCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUEJTTVNCLCAoKGJsa3NpemUgPj4gNCkgJiAweEYwKQotCQkJfCBXQlNEX0RBVEFfV0lEVEgpOworCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX1BCU01TQiwKKwkJCSgoYmxrc2l6ZSA+PiA0KSAmIDB4RjApIHwgV0JTRF9EQVRBX1dJRFRIKTsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9QQlNMU0IsIGJsa3NpemUgJiAweEZGKTsKLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJcmV0dXJuOwogCX0KQEAgLTc1NSwxNCArNzI4LDEyIEBACiAJLyoKIAkgKiBETUEgdHJhbnNmZXI/CiAJICovCi0JaWYgKGhvc3QtPmRtYSA+PSAwKQotCXsKKwlpZiAoaG9zdC0+ZG1hID49IDApIHsKIAkJLyoKIAkJICogVGhlIGJ1ZmZlciBmb3IgRE1BIGlzIG9ubHkgNjQga0IuCiAJCSAqLwogCQlCVUdfT04oaG9zdC0+c2l6ZSA+IDB4MTAwMDApOwotCQlpZiAoaG9zdC0+c2l6ZSA+IDB4MTAwMDApCi0JCXsKKwkJaWYgKGhvc3QtPnNpemUgPiAweDEwMDAwKSB7CiAJCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzk0LDkgKzc2NSw3IEBACiAJCSAqIEVuYWJsZSBETUEgb24gdGhlIGhvc3QuCiAJCSAqLwogCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX0RNQSwgV0JTRF9ETUFfRU5BQkxFKTsKLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBrZWVwIHByaW50awogCQkgKiBvdXRwdXQgdG8gYSBtaW5pbXVtLgpAQCAtODE3LDEzICs3ODYsMTAgQEAKIAkJICogU2V0IHVwIEZJRk8gdGhyZXNob2xkIGxldmVscyAoYW5kIGZpbGwKIAkJICogYnVmZmVyIGlmIGRvaW5nIGEgd3JpdGUpLgogCQkgKi8KLQkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKLQkJeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CiAJCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX0ZJRk9FTiwKIAkJCQlXQlNEX0ZJRk9FTl9GVUxMIHwgOCk7Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX0ZJRk9FTiwKIAkJCQlXQlNEX0ZJRk9FTl9FTVBUWSB8IDgpOwogCQkJd2JzZF9maWxsX2ZpZm8oaG9zdCk7CkBAIC04MzMsNyArNzk5LDcgQEAKIAlkYXRhLT5lcnJvciA9IE1NQ19FUlJfTk9ORTsKIH0KIAotc3RhdGljIHZvaWQgd2JzZF9maW5pc2hfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBzdHJ1Y3QgbW1jX2RhdGEqIGRhdGEpCitzdGF0aWMgdm9pZCB3YnNkX2ZpbmlzaF9kYXRhKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGRtYWZsYWdzOwogCWludCBjb3VudDsKQEAgLTg1MSwxNiArODE3LDE0IEBACiAJICogV2FpdCBmb3IgdGhlIGNvbnRyb2xsZXIgdG8gbGVhdmUgZGF0YQogCSAqIHRyYW5zZmVyIHN0YXRlLgogCSAqLwotCWRvCi0JeworCWRvIHsKIAkJc3RhdHVzID0gd2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX1NUQVRVUyk7CiAJfSB3aGlsZSAoc3RhdHVzICYgKFdCU0RfQkxPQ0tfUkVBRCB8IFdCU0RfQkxPQ0tfV1JJVEUpKTsKIAogCS8qCiAJICogRE1BIHRyYW5zZmVyPwogCSAqLwotCWlmIChob3N0LT5kbWEgPj0gMCkKLQl7CisJaWYgKGhvc3QtPmRtYSA+PSAwKSB7CiAJCS8qCiAJCSAqIERpc2FibGUgRE1BIG9uIHRoZSBob3N0LgogCQkgKi8KQEAgLTg3OCwxNiArODQyLDEzIEBACiAJCS8qCiAJCSAqIEFueSBsZWZ0b3ZlciBkYXRhPwogCQkgKi8KLQkJaWYgKGNvdW50KQotCQl7CisJCWlmIChjb3VudCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wbGV0ZSBETUEgdHJhbnNmZXIuICIKIAkJCQkiJWQgYnl0ZXMgbGVmdC5cbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGNvdW50KTsKIAogCQkJZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKLQkJfQotCQllbHNlCi0JCXsKKwkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUcmFuc2ZlciBkYXRhIGZyb20gRE1BIGJ1ZmZlciB0bwogCQkJICogU0cgbGlzdC4KQEAgLTkxMCwxMCArODcxLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgd2JzZF9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCogbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QqIG1ycSkKK3N0YXRpYyB2b2lkIHdic2RfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0Jc3RydWN0IG1tY19jb21tYW5kKiBjbWQ7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CiAKIAkvKgogCSAqIERpc2FibGUgdGFza2xldHMgdG8gYXZvaWQgYSBkZWFkbG9jay4KQEAgLTkzMCw4ICs4OTEsNyBAQAogCSAqIElmIHRoZXJlIGlzIG5vIGNhcmQgaW4gdGhlIHNsb3QgdGhlbgogCSAqIHRpbWVvdXQgaW1tZWRpYXRseS4KIAkgKi8KLQlpZiAoIShob3N0LT5mbGFncyAmIFdCU0RfRkNBUkRfUFJFU0VOVCkpCi0JeworCWlmICghKGhvc3QtPmZsYWdzICYgV0JTRF9GQ0FSRF9QUkVTRU5UKSkgewogCQljbWQtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtOTM5LDggKzg5OSw3IEBACiAJLyoKIAkgKiBEb2VzIHRoZSByZXF1ZXN0IGluY2x1ZGUgZGF0YT8KIAkgKi8KLQlpZiAoY21kLT5kYXRhKQotCXsKKwlpZiAoY21kLT5kYXRhKSB7CiAJCXdic2RfcHJlcGFyZV9kYXRhKGhvc3QsIGNtZC0+ZGF0YSk7CiAKIAkJaWYgKGNtZC0+ZGF0YS0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKQpAQCAtOTU0LDggKzkxMyw3IEBACiAJICogd2lsbCBiZSBmaW5pc2hlZCBhZnRlciB0aGUgZGF0YSBoYXMKIAkgKiB0cmFuc2ZlcmVkLgogCSAqLwotCWlmIChjbWQtPmRhdGEgJiYgKGNtZC0+ZXJyb3IgPT0gTU1DX0VSUl9OT05FKSkKLQl7CisJaWYgKGNtZC0+ZGF0YSAmJiAoY21kLT5lcnJvciA9PSBNTUNfRVJSX05PTkUpKSB7CiAJCS8qCiAJCSAqIERpcnR5IGZpeCBmb3IgaGFyZHdhcmUgYnVnLgogCQkgKi8KQEAgLTk3MywxNCArOTMxLDE0IEBACiAJc3Bpbl91bmxvY2tfYmgoJmhvc3QtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB3YnNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0KiBtbWMsIHN0cnVjdCBtbWNfaW9zKiBpb3MpCitzdGF0aWMgdm9pZCB3YnNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJdTggY2xrLCBzZXR1cCwgcHdyOwogCiAJREJHRigiY2xvY2sgJXVIeiBidXNtb2RlICV1IHBvd2VybW9kZSAldSBjcyAldSBWZGQgJXUgd2lkdGggJXVcbiIsCi0JICAgICBpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+Y2hpcF9zZWxlY3QsCi0JICAgICBpb3MtPnZkZCwgaW9zLT5idXNfd2lkdGgpOworCQlpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsIGlvcy0+Y2hpcF9zZWxlY3QsCisJCWlvcy0+dmRkLCBpb3MtPmJ1c193aWR0aCk7CiAKIAlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwogCkBAIC0xMDA0LDggKzk2Miw3IEBACiAJICogT25seSB3cml0ZSB0byB0aGUgY2xvY2sgcmVnaXN0ZXIgd2hlbgogCSAqIHRoZXJlIGlzIGFuIGFjdHVhbCBjaGFuZ2UuCiAJICovCi0JaWYgKGNsayAhPSBob3N0LT5jbGspCi0JeworCWlmIChjbGsgIT0gaG9zdC0+Y2xrKSB7CiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfQ0xLLCBjbGspOwogCQlob3N0LT5jbGsgPSBjbGs7CiAJfQpAQCAtMTAxMyw4ICs5NzAsNyBAQAogCS8qCiAJICogUG93ZXIgdXAgY2FyZC4KIAkgKi8KLQlpZiAoaW9zLT5wb3dlcl9tb2RlICE9IE1NQ19QT1dFUl9PRkYpCi0JeworCWlmIChpb3MtPnBvd2VyX21vZGUgIT0gTU1DX1BPV0VSX09GRikgewogCQlwd3IgPSBpbmIoaG9zdC0+YmFzZSArIFdCU0RfQ1NSKTsKIAkJcHdyICY9IH5XQlNEX1BPV0VSX047CiAJCW91dGIocHdyLCBob3N0LT5iYXNlICsgV0JTRF9DU1IpOwpAQCAtMTAyNiwyMyArOTgyLDE5IEBACiAJICogdGhhdCBuZWVkcyB0byBiZSBkaXNhYmxlZC4KIAkgKi8KIAlzZXR1cCA9IHdic2RfcmVhZF9pbmRleChob3N0LCBXQlNEX0lEWF9TRVRVUCk7Ci0JaWYgKGlvcy0+Y2hpcF9zZWxlY3QgPT0gTU1DX0NTX0hJR0gpCi0JeworCWlmIChpb3MtPmNoaXBfc2VsZWN0ID09IE1NQ19DU19ISUdIKSB7CiAJCUJVR19PTihpb3MtPmJ1c193aWR0aCAhPSBNTUNfQlVTX1dJRFRIXzEpOwogCQlzZXR1cCB8PSBXQlNEX0RBVDNfSDsKIAkJaG9zdC0+ZmxhZ3MgfD0gV0JTRF9GSUdOT1JFX0RFVEVDVDsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKHNldHVwICYgV0JTRF9EQVQzX0gpCi0JCXsKKwl9IGVsc2UgeworCQlpZiAoc2V0dXAgJiBXQlNEX0RBVDNfSCkgewogCQkJc2V0dXAgJj0gfldCU0RfREFUM19IOwogCiAJCQkvKgogCQkJICogV2UgY2Fubm90IHJlc3VtZSBjYXJkIGRldGVjdGlvbiBpbW1lZGlhdGx5CiAJCQkgKiBiZWNhdXNlIG9mIGNhcGFjaXRhbmNlIGFuZCBkZWxheXMgaW4gdGhlIGNoaXAuCiAJCQkgKi8KLQkJCW1vZF90aW1lcigmaG9zdC0+aWdub3JlX3RpbWVyLCBqaWZmaWVzICsgSFovMTAwKTsKKwkJCW1vZF90aW1lcigmaG9zdC0+aWdub3JlX3RpbWVyLCBqaWZmaWVzICsgSFogLyAxMDApOwogCQl9CiAJfQogCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfU0VUVVAsIHNldHVwKTsKQEAgLTEwNTYsOSArMTAwOCw5IEBACiAJc3Bpbl91bmxvY2tfYmgoJmhvc3QtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHdic2RfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCogbW1jKQorc3RhdGljIGludCB3YnNkX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKIHsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAl1OCBjc3I7CiAKIAlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwpAQCAtMTA5Niw3ICsxMDQ4LDcgQEAKIAogc3RhdGljIHZvaWQgd2JzZF9yZXNldF9pZ25vcmUodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCopZGF0YTsKKwlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gKHN0cnVjdCB3YnNkX2hvc3QgKilkYXRhOwogCiAJQlVHX09OKGhvc3QgPT0gTlVMTCk7CiAKQEAgLTExMTksNyArMTA3MSw3IEBACiAgKiBUYXNrbGV0cwogICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1tY19kYXRhKiB3YnNkX2dldF9kYXRhKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbWNfZGF0YSAqd2JzZF9nZXRfZGF0YShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCVdBUk5fT04oIWhvc3QtPm1ycSk7CiAJaWYgKCFob3N0LT5tcnEpCkBAIC0xMTM4LDE0ICsxMDkwLDEzIEBACiAKIHN0YXRpYyB2b2lkIHdic2RfdGFza2xldF9jYXJkKHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKKwlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gKHN0cnVjdCB3YnNkX2hvc3QgKilwYXJhbTsKIAl1OCBjc3I7CiAJaW50IGRlbGF5ID0gLTE7CiAKIAlzcGluX2xvY2soJmhvc3QtPmxvY2spOwogCi0JaWYgKGhvc3QtPmZsYWdzICYgV0JTRF9GSUdOT1JFX0RFVEVDVCkKLQl7CisJaWYgKGhvc3QtPmZsYWdzICYgV0JTRF9GSUdOT1JFX0RFVEVDVCkgewogCQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTUzLDIzICsxMTA0LDE4IEBACiAJY3NyID0gaW5iKGhvc3QtPmJhc2UgKyBXQlNEX0NTUik7CiAJV0FSTl9PTihjc3IgPT0gMHhmZik7CiAKLQlpZiAoY3NyICYgV0JTRF9DQVJEUFJFU0VOVCkKLQl7Ci0JCWlmICghKGhvc3QtPmZsYWdzICYgV0JTRF9GQ0FSRF9QUkVTRU5UKSkKLQkJeworCWlmIChjc3IgJiBXQlNEX0NBUkRQUkVTRU5UKSB7CisJCWlmICghKGhvc3QtPmZsYWdzICYgV0JTRF9GQ0FSRF9QUkVTRU5UKSkgewogCQkJREJHKCJDYXJkIGluc2VydGVkXG4iKTsKIAkJCWhvc3QtPmZsYWdzIHw9IFdCU0RfRkNBUkRfUFJFU0VOVDsKIAogCQkJZGVsYXkgPSA1MDA7CiAJCX0KLQl9Ci0JZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBXQlNEX0ZDQVJEX1BSRVNFTlQpCi0JeworCX0gZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBXQlNEX0ZDQVJEX1BSRVNFTlQpIHsKIAkJREJHKCJDYXJkIHJlbW92ZWRcbiIpOwogCQlob3N0LT5mbGFncyAmPSB+V0JTRF9GQ0FSRF9QUkVTRU5UOwogCi0JCWlmIChob3N0LT5tcnEpCi0JCXsKKwkJaWYgKGhvc3QtPm1ycSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FyZCByZW1vdmVkIGR1cmluZyB0cmFuc2ZlciFcbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwogCQkJd2JzZF9yZXNldChob3N0KTsKQEAgLTExOTMsOCArMTEzOSw4IEBACiAKIHN0YXRpYyB2b2lkIHdic2RfdGFza2xldF9maWZvKHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKLQlzdHJ1Y3QgbW1jX2RhdGEqIGRhdGE7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0ICopcGFyYW07CisJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMTIxMyw4ICsxMTU5LDcgQEAKIAkvKgogCSAqIERvbmU/CiAJICovCi0JaWYgKGhvc3QtPnNpemUgPT0gZGF0YS0+Ynl0ZXNfeGZlcmVkKQotCXsKKwlpZiAoaG9zdC0+c2l6ZSA9PSBkYXRhLT5ieXRlc194ZmVyZWQpIHsKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9GSUZPRU4sIDApOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5maW5pc2hfdGFza2xldCk7CiAJfQpAQCAtMTIyNSw4ICsxMTcwLDggQEAKIAogc3RhdGljIHZvaWQgd2JzZF90YXNrbGV0X2NyYyh1bnNpZ25lZCBsb25nIHBhcmFtKQogewotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCopcGFyYW07Ci0Jc3RydWN0IG1tY19kYXRhKiBkYXRhOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCAqKXBhcmFtOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAogCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CiAKQEAgLTEyNDksOCArMTE5NCw4IEBACiAKIHN0YXRpYyB2b2lkIHdic2RfdGFza2xldF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKLQlzdHJ1Y3QgbW1jX2RhdGEqIGRhdGE7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0ICopcGFyYW07CisJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMTI3Myw4ICsxMjE4LDggQEAKIAogc3RhdGljIHZvaWQgd2JzZF90YXNrbGV0X2ZpbmlzaCh1bnNpZ25lZCBsb25nIHBhcmFtKQogewotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCopcGFyYW07Ci0Jc3RydWN0IG1tY19kYXRhKiBkYXRhOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IHdic2RfaG9zdCAqKXBhcmFtOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAogCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CiAKQEAgLTEyOTQsMTQgKzEyMzksMTMgQEAKIAogc3RhdGljIHZvaWQgd2JzZF90YXNrbGV0X2Jsb2NrKHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7Ci0Jc3RydWN0IHdic2RfaG9zdCogaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0KilwYXJhbTsKLQlzdHJ1Y3QgbW1jX2RhdGEqIGRhdGE7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgd2JzZF9ob3N0ICopcGFyYW07CisJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIAogCWlmICgod2JzZF9yZWFkX2luZGV4KGhvc3QsIFdCU0RfSURYX0NSQ1NUQVRVUykgJiBXQlNEX0NSQ19NQVNLKSAhPQotCQlXQlNEX0NSQ19PSykKLQl7CisJCVdCU0RfQ1JDX09LKSB7CiAJCWRhdGEgPSB3YnNkX2dldF9kYXRhKGhvc3QpOwogCQlpZiAoIWRhdGEpCiAJCQlnb3RvIGVuZDsKQEAgLTEzMjMsNyArMTI2Nyw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB3YnNkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3QgPSBkZXZfaWQ7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IGRldl9pZDsKIAlpbnQgaXNyOwogCiAJaXNyID0gaW5iKGhvc3QtPmJhc2UgKyBXQlNEX0lTUik7CkBAIC0xMzY1LDEwICsxMzA5LDEwIEBACiAgKiBBbGxvY2F0ZS9mcmVlIE1NQyBzdHJ1Y3R1cmUuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9hbGxvY19tbWMoc3RydWN0IGRldmljZSogZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9hbGxvY19tbWMoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCogbW1jOwotCXN0cnVjdCB3YnNkX2hvc3QqIGhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKIAogCS8qCiAJICogQWxsb2NhdGUgTU1DIHN0cnVjdHVyZS4KQEAgLTEzODgsNyArMTMzMiw3IEBACiAJbW1jLT5vcHMgPSAmd2JzZF9vcHM7CiAJbW1jLT5mX21pbiA9IDM3NTAwMDsKIAltbWMtPmZfbWF4ID0gMjQwMDAwMDA7Ci0JbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQ7CisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKIAltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CkBAIC0xNDI0LDEwICsxMzY4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX2ZyZWVfbW1jKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX2ZyZWVfbW1jKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QqIG1tYzsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAKIAltbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpZiAoIW1tYykKQEAgLTE0NDcsNyArMTM5MSw3IEBACiAgKiBTY2FuIGZvciBrbm93biBjaGlwIGlkOnMKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3NjYW4oc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdic2Rfc2NhbihzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWludCBpLCBqLCBrOwogCWludCBpZDsKQEAgLTE0NzcsMTYgKzE0MjEsMTQgQEAKIAkJCXdic2RfbG9ja19jb25maWcoaG9zdCk7CiAKIAkJCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHZhbGlkX2lkcyk7IGsrKykgewotCQkJCWlmIChpZCA9PSB2YWxpZF9pZHNba10pCi0JCQkJeworCQkJCWlmIChpZCA9PSB2YWxpZF9pZHNba10pIHsKIAkJCQkJaG9zdC0+Y2hpcF9pZCA9IGlkOwogCiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGlkICE9IDB4RkZGRikKLQkJCXsKKwkJCWlmIChpZCAhPSAweEZGRkYpIHsKIAkJCQlEQkcoIlVua25vd24gaGFyZHdhcmUgKGlkICV4KSBmb3VuZCBhdCAleFxuIiwKIAkJCQkJaWQsIGNvbmZpZ19wb3J0c1tpXSk7CiAJCQl9CkBAIC0xNTA1LDcgKzE0NDcsNyBAQAogICogQWxsb2NhdGUvZnJlZSBpbyBwb3J0IHJhbmdlcwogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfcmVxdWVzdF9yZWdpb24oc3RydWN0IHdic2RfaG9zdCogaG9zdCwgaW50IGJhc2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QsIGludCBiYXNlKQogewogCWlmIChpbyAmIDB4NykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTE4LDcgKzE0NjAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3JlbGVhc2VfcmVnaW9ucyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWlmIChob3N0LT5iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihob3N0LT5iYXNlLCA4KTsKQEAgLTE1MzUsNyArMTQ3Nyw3IEBACiAgKiBBbGxvY2F0ZS9mcmVlIERNQSBwb3J0IGFuZCBidWZmZXIKICAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X2RtYShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBpbnQgZG1hKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHdic2RfcmVxdWVzdF9kbWEoc3RydWN0IHdic2RfaG9zdCAqaG9zdCwgaW50IGRtYSkKIHsKIAlpZiAoZG1hIDwgMCkKIAkJcmV0dXJuOwpAQCAtMTU3OSw4ICsxNTIxLDggQEAKIAkgKi8KIAlCVUdfT04oMSk7CiAKLQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPm1tYy0+ZGV2LCBob3N0LT5kbWFfYWRkciwgV0JTRF9ETUFfU0laRSwKLQkJRE1BX0JJRElSRUNUSU9OQUwpOworCWRtYV91bm1hcF9zaW5nbGUoaG9zdC0+bW1jLT5kZXYsIGhvc3QtPmRtYV9hZGRyLAorCQlXQlNEX0RNQV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CiAJaG9zdC0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdClOVUxMOwogCiAJa2ZyZWUoaG9zdC0+ZG1hX2J1ZmZlcik7CkBAIC0xNTk0LDExICsxNTM2LDEyIEBACiAJCSJGYWxsaW5nIGJhY2sgb24gRklGTy5cbiIsIGRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3JlbGVhc2VfZG1hKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX2RtYShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewotCWlmIChob3N0LT5kbWFfYWRkcikKLQkJZG1hX3VubWFwX3NpbmdsZShob3N0LT5tbWMtPmRldiwgaG9zdC0+ZG1hX2FkZHIsIFdCU0RfRE1BX1NJWkUsCi0JCQlETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKGhvc3QtPmRtYV9hZGRyKSB7CisJCWRtYV91bm1hcF9zaW5nbGUoaG9zdC0+bW1jLT5kZXYsIGhvc3QtPmRtYV9hZGRyLAorCQkJV0JTRF9ETUFfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOworCX0KIAlrZnJlZShob3N0LT5kbWFfYnVmZmVyKTsKIAlpZiAoaG9zdC0+ZG1hID49IDApCiAJCWZyZWVfZG1hKGhvc3QtPmRtYSk7CkBAIC0xNjEyLDcgKzE1NTUsNyBAQAogICogQWxsb2NhdGUvZnJlZSBJUlEuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X2lycShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LCBpbnQgaXJxKQorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X2lycShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBpbnQgaXJxKQogewogCWludCByZXQ7CiAKQEAgLTE2MjksMTcgKzE1NzIsMjMgQEAKIAkvKgogCSAqIFNldCB1cCB0YXNrbGV0cy4KIAkgKi8KLQl0YXNrbGV0X2luaXQoJmhvc3QtPmNhcmRfdGFza2xldCwgd2JzZF90YXNrbGV0X2NhcmQsICh1bnNpZ25lZCBsb25nKWhvc3QpOwotCXRhc2tsZXRfaW5pdCgmaG9zdC0+Zmlmb190YXNrbGV0LCB3YnNkX3Rhc2tsZXRfZmlmbywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7Ci0JdGFza2xldF9pbml0KCZob3N0LT5jcmNfdGFza2xldCwgd2JzZF90YXNrbGV0X2NyYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7Ci0JdGFza2xldF9pbml0KCZob3N0LT50aW1lb3V0X3Rhc2tsZXQsIHdic2RfdGFza2xldF90aW1lb3V0LCAodW5zaWduZWQgbG9uZylob3N0KTsKLQl0YXNrbGV0X2luaXQoJmhvc3QtPmZpbmlzaF90YXNrbGV0LCB3YnNkX3Rhc2tsZXRfZmluaXNoLCAodW5zaWduZWQgbG9uZylob3N0KTsKLQl0YXNrbGV0X2luaXQoJmhvc3QtPmJsb2NrX3Rhc2tsZXQsIHdic2RfdGFza2xldF9ibG9jaywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJdGFza2xldF9pbml0KCZob3N0LT5jYXJkX3Rhc2tsZXQsIHdic2RfdGFza2xldF9jYXJkLAorCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJdGFza2xldF9pbml0KCZob3N0LT5maWZvX3Rhc2tsZXQsIHdic2RfdGFza2xldF9maWZvLAorCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJdGFza2xldF9pbml0KCZob3N0LT5jcmNfdGFza2xldCwgd2JzZF90YXNrbGV0X2NyYywKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOworCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGltZW91dF90YXNrbGV0LCB3YnNkX3Rhc2tsZXRfdGltZW91dCwKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOworCXRhc2tsZXRfaW5pdCgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQsIHdic2RfdGFza2xldF9maW5pc2gsCisJCQkodW5zaWduZWQgbG9uZylob3N0KTsKKwl0YXNrbGV0X2luaXQoJmhvc3QtPmJsb2NrX3Rhc2tsZXQsIHdic2RfdGFza2xldF9ibG9jaywKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3JlbGVhc2VfaXJxKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX2lycShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCWlmICghaG9zdC0+aXJxKQogCQlyZXR1cm47CkBAIC0xNjYwLDcgKzE2MDksNyBAQAogICogQWxsb2NhdGUgYWxsIHJlc291cmNlcyBmb3IgdGhlIGhvc3QuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0LAorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LAogCWludCBiYXNlLCBpbnQgaXJxLCBpbnQgZG1hKQogewogCWludCByZXQ7CkBAIC0xNjkxLDcgKzE2NDAsNyBAQAogICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIGZvciB0aGUgaG9zdC4KICAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHdic2RfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHdic2RfaG9zdCAqaG9zdCkKIHsKIAl3YnNkX3JlbGVhc2VfZG1hKGhvc3QpOwogCXdic2RfcmVsZWFzZV9pcnEoaG9zdCk7CkBAIC0xNzAyLDcgKzE2NTEsNyBAQAogICogQ29uZmlndXJlIHRoZSByZXNvdXJjZXMgdGhlIGNoaXAgc2hvdWxkIHVzZS4KICAqLwogCi1zdGF0aWMgdm9pZCB3YnNkX2NoaXBfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QqIGhvc3QpCitzdGF0aWMgdm9pZCB3YnNkX2NoaXBfY29uZmlnKHN0cnVjdCB3YnNkX2hvc3QgKmhvc3QpCiB7CiAJd2JzZF91bmxvY2tfY29uZmlnKGhvc3QpOwogCkBAIC0xNzQ2LDcgKzE2OTUsNyBAQAogICogQ2hlY2sgdGhhdCBjb25maWd1cmVkIHJlc291cmNlcyBhcmUgY29ycmVjdC4KICAqLwogCi1zdGF0aWMgaW50IHdic2RfY2hpcF92YWxpZGF0ZShzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0KQorc3RhdGljIGludCB3YnNkX2NoaXBfdmFsaWRhdGUoc3RydWN0IHdic2RfaG9zdCAqaG9zdCkKIHsKIAlpbnQgYmFzZSwgaXJxLCBkbWE7CiAKQEAgLTE3ODYsNyArMTczNSw3IEBACiAgKiBQb3dlcnMgZG93biB0aGUgU0QgZnVuY3Rpb24KICAqLwogCi1zdGF0aWMgdm9pZCB3YnNkX2NoaXBfcG93ZXJvZmYoc3RydWN0IHdic2RfaG9zdCogaG9zdCkKK3N0YXRpYyB2b2lkIHdic2RfY2hpcF9wb3dlcm9mZihzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQogewogCXdic2RfdW5sb2NrX2NvbmZpZyhob3N0KTsKIApAQCAtMTgwMiwxMSArMTc1MSwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfaW5pdChzdHJ1Y3QgZGV2aWNlKiBkZXYsIGludCBiYXNlLCBpbnQgaXJxLCBpbnQgZG1hLAorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJhc2UsIGludCBpcnEsIGludCBkbWEsCiAJaW50IHBucCkKIHsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0ID0gTlVMTDsKLQlzdHJ1Y3QgbW1jX2hvc3QqIG1tYyA9IE5VTEw7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdCA9IE5VTEw7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBOVUxMOwogCWludCByZXQ7CiAKIAlyZXQgPSB3YnNkX2FsbG9jX21tYyhkZXYpOwpAQCAtMTgyMCwxNiArMTc2OSwxMiBAQAogCSAqIFNjYW4gZm9yIGhhcmR3YXJlLgogCSAqLwogCXJldCA9IHdic2Rfc2Nhbihob3N0KTsKLQlpZiAocmV0KQotCXsKLQkJaWYgKHBucCAmJiAocmV0ID09IC1FTk9ERVYpKQotCQl7CisJaWYgKHJldCkgeworCQlpZiAocG5wICYmIChyZXQgPT0gLUVOT0RFVikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCQkiOiBVbmFibGUgdG8gY29uZmlybSBkZXZpY2UgcHJlc2VuY2UuIFlvdSBtYXkgIgogCQkJCSJleHBlcmllbmNlIGxvY2stdXBzLlxuIik7Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQl3YnNkX2ZyZWVfbW1jKGRldik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC0xODM5LDggKzE3ODQsNyBAQAogCSAqIFJlcXVlc3QgcmVzb3VyY2VzLgogCSAqLwogCXJldCA9IHdic2RfcmVxdWVzdF9yZXNvdXJjZXMoaG9zdCwgaW8sIGlycSwgZG1hKTsKLQlpZiAocmV0KQotCXsKKwlpZiAocmV0KSB7CiAJCXdic2RfcmVsZWFzZV9yZXNvdXJjZXMoaG9zdCk7CiAJCXdic2RfZnJlZV9tbWMoZGV2KTsKIAkJcmV0dXJuIHJldDsKQEAgLTE4NDksMTggKzE3OTMsMTUgQEAKIAkvKgogCSAqIFNlZSBpZiBjaGlwIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQuCiAJICovCi0JaWYgKHBucCkKLQl7Ci0JCWlmICgoaG9zdC0+Y29uZmlnICE9IDApICYmICF3YnNkX2NoaXBfdmFsaWRhdGUoaG9zdCkpCi0JCXsKKwlpZiAocG5wKSB7CisJCWlmICgoaG9zdC0+Y29uZmlnICE9IDApICYmICF3YnNkX2NoaXBfdmFsaWRhdGUoaG9zdCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCQkiOiBQblAgYWN0aXZlIGJ1dCBjaGlwIG5vdCBjb25maWd1cmVkISAiCiAJCQkJIllvdSBwcm9iYWJseSBoYXZlIGEgYnVnZ3kgQklPUy4gIgogCQkJCSJDb25maWd1cmluZyBjaGlwIG1hbnVhbGx5LlxuIik7CiAJCQl3YnNkX2NoaXBfY29uZmlnKGhvc3QpOwogCQl9Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJd2JzZF9jaGlwX2NvbmZpZyhob3N0KTsKIAogCS8qCkBAIC0xODY4LDggKzE4MDksNyBAQAogCSAqIE5vdCB0ZXN0ZWQuCiAJICovCiAjaWZkZWYgQ09ORklHX1BNCi0JaWYgKGhvc3QtPmNvbmZpZykKLQl7CisJaWYgKGhvc3QtPmNvbmZpZykgewogCQl3YnNkX3VubG9ja19jb25maWcoaG9zdCk7CiAJCXdic2Rfd3JpdGVfY29uZmlnKGhvc3QsIFdCU0RfQ09ORl9QTUUsIDB4QTApOwogCQl3YnNkX2xvY2tfY29uZmlnKGhvc3QpOwpAQCAtMTkwMiwxMCArMTg0MiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlKiBkZXYsIGludCBwbnApCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2JzZF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwbnApCiB7Ci0Jc3RydWN0IG1tY19ob3N0KiBtbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgd2JzZF9ob3N0KiBob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKIAogCWlmICghbW1jKQogCQlyZXR1cm47CkBAIC0xOTI5LDEyICsxODY5LDEyIEBACiAgKiBOb24tUG5QCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gd2JzZF9pbml0KCZkZXYtPmRldiwgaW8sIGlycSwgZG1hLCAwKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgd2JzZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgd2JzZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXdic2Rfc2h1dGRvd24oJmRldi0+ZGV2LCAwKTsKIApAQCAtMTk0OCw3ICsxODg4LDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci13YnNkX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqIHBucGRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3dic2RfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpwbnBkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCiB7CiAJaW50IGlvLCBpcnEsIGRtYTsKIApAQCAtMTk2Nyw3ICsxOTA3LDcgQEAKIAlyZXR1cm4gd2JzZF9pbml0KCZwbnBkZXYtPmRldiwgaW8sIGlycSwgZG1hLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHdic2RfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqIGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3YnNkX3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKmRldikKIHsKIAl3YnNkX3NodXRkb3duKCZkZXYtPmRldiwgMSk7CiB9CkBAIC0xOTgwLDM3ICsxOTIwLDU0IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCB3YnNkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHdic2Rfc3VzcGVuZChzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJQlVHX09OKGhvc3QgPT0gTlVMTCk7CisKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB3YnNkX3Jlc3VtZShzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0KQoreworCUJVR19PTihob3N0ID09IE5VTEwpOworCisJd2JzZF9pbml0X2RldmljZShob3N0KTsKKworCXJldHVybiBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKK30KKworc3RhdGljIGludCB3YnNkX3BsYXRmb3JtX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAJaW50IHJldDsKIAotCWlmICghbW1jKQorCWlmIChtbWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlEQkcoIlN1c3BlbmRpbmcuLi5cbiIpOwotCi0JcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHJldDsKKwlEQkdGKCJTdXNwZW5kaW5nLi4uXG4iKTsKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCisJcmV0ID0gd2JzZF9zdXNwZW5kKGhvc3QsIHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJd2JzZF9jaGlwX3Bvd2Vyb2ZmKGhvc3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2JzZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCB3YnNkX3BsYXRmb3JtX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAKLQlpZiAoIW1tYykKKwlpZiAobW1jID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JREJHKCJSZXN1bWluZy4uLlxuIik7CisJREJHRigiUmVzdW1pbmcuLi5cbiIpOwogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKQEAgLTIwMjEsMTUgKzE5NzgsNjggQEAKIAkgKi8KIAltZGVsYXkoNSk7CiAKLQl3YnNkX2luaXRfZGV2aWNlKGhvc3QpOwotCi0JcmV0dXJuIG1tY19yZXN1bWVfaG9zdChtbWMpOworCXJldHVybiB3YnNkX3Jlc3VtZShob3N0KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTlAKKworc3RhdGljIGludCB3YnNkX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoJnBucF9kZXYtPmRldik7CisJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKKworCWlmIChtbWMgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlEQkdGKCJTdXNwZW5kaW5nLi4uXG4iKTsKKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJcmV0dXJuIHdic2Rfc3VzcGVuZChob3N0LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgd2JzZF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKCZwbnBfZGV2LT5kZXYpOworCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CisKKwlpZiAobW1jID09IE5VTEwpCisJCXJldHVybiAwOworCisJREJHRigiUmVzdW1pbmcuLi5cbiIpOworCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwkvKgorCSAqIFNlZSBpZiBjaGlwIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQuCisJICovCisJaWYgKGhvc3QtPmNvbmZpZyAhPSAwKSB7CisJCWlmICghd2JzZF9jaGlwX3ZhbGlkYXRlKGhvc3QpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkJIjogUG5QIGFjdGl2ZSBidXQgY2hpcCBub3QgY29uZmlndXJlZCEgIgorCQkJCSJZb3UgcHJvYmFibHkgaGF2ZSBhIGJ1Z2d5IEJJT1MuICIKKwkJCQkiQ29uZmlndXJpbmcgY2hpcCBtYW51YWxseS5cbiIpOworCQkJd2JzZF9jaGlwX2NvbmZpZyhob3N0KTsKKwkJfQorCX0KKworCS8qCisJICogQWxsb3cgZGV2aWNlIHRvIGluaXRpYWxpc2UgaXRzZWxmIHByb3Blcmx5LgorCSAqLworCW1kZWxheSg1KTsKKworCXJldHVybiB3YnNkX3Jlc3VtZShob3N0KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKwogI2Vsc2UgLyogQ09ORklHX1BNICovCiAKLSNkZWZpbmUgd2JzZF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgd2JzZF9yZXN1bWUgTlVMTAorI2RlZmluZSB3YnNkX3BsYXRmb3JtX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3YnNkX3BsYXRmb3JtX3Jlc3VtZSBOVUxMCisKKyNkZWZpbmUgd2JzZF9wbnBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdic2RfcG5wX3Jlc3VtZSBOVUxMCiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtMjAzOSw4ICsyMDQ5LDggQEAKIAkucHJvYmUJCT0gd2JzZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcmVtb3ZlKSwKIAotCS5zdXNwZW5kCT0gd2JzZF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gd2JzZF9yZXN1bWUsCisJLnN1c3BlbmQJPSB3YnNkX3BsYXRmb3JtX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3YnNkX3BsYXRmb3JtX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAl9LApAQCAtMjA1Myw2ICsyMDYzLDkgQEAKIAkuaWRfdGFibGUJPSBwbnBfZGV2X3RhYmxlLAogCS5wcm9iZQkJPSB3YnNkX3BucF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcG5wX3JlbW92ZSksCisKKwkuc3VzcGVuZAk9IHdic2RfcG5wX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3YnNkX3BucF9yZXN1bWUsCiB9OwogCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwpAQCAtMjA3MiwzMSArMjA4NSwyNiBAQAogCiAjaWZkZWYgQ09ORklHX1BOUAogCi0JaWYgKCFub3BucCkKLQl7CisJaWYgKCFub3BucCkgewogCQlyZXN1bHQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZ3YnNkX3BucF9kcml2ZXIpOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CiAJfQotCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCi0JaWYgKG5vcG5wKQotCXsKKwlpZiAobm9wbnApIHsKIAkJcmVzdWx0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJcmV0dXJuIHJlc3VsdDsKIAogCQl3YnNkX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUklWRVJfTkFNRSwgLTEpOwotCQlpZiAoIXdic2RfZGV2aWNlKQotCQl7CisJCWlmICghd2JzZF9kZXZpY2UpIHsKIAkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCiAJCXJlc3VsdCA9IHBsYXRmb3JtX2RldmljZV9hZGQod2JzZF9kZXZpY2UpOwotCQlpZiAocmVzdWx0KQotCQl7CisJCWlmIChyZXN1bHQpIHsKIAkJCXBsYXRmb3JtX2RldmljZV9wdXQod2JzZF9kZXZpY2UpOwogCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKIAkJCXJldHVybiByZXN1bHQ7CkBAIC0yMTE1LDggKzIxMjMsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCi0JaWYgKG5vcG5wKQotCXsKKwlpZiAobm9wbnApIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod2JzZF9kZXZpY2UpOwogCiAJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggYjliNzdjZi4uN2FiZDdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtNDczLDE0ICs0NzMsNiBAQAogCSAgSVhEUDQyNSBhbmQgQ295b3RlLiBJZiB5b3UgaGF2ZSBhbiBJWFAyMDAwIGJhc2VkIGJvYXJkIGFuZAogCSAgd291bGQgbGlrZSB0byB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgogCi1jb25maWcgTVREX0VQWEExMERCCi0JdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIEVweGExMGRiIgotCWRlcGVuZHMgb24gTVREX0NGSSAmJiBNVERfUEFSVElUSU9OUyAmJiBBUkNIX0NBTUVMT1QKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGZsYXNoIGRldmljZXMgb24gdGhlIEFsdGVyYQotCSAgRXhjYWxpYnVyIFhBMTAgRGV2ZWxvcG1lbnQgQm9hcmQuIElmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwKLQkgIGZvciBvbiBvZiB0aGVzZSBib2FyZHMgdGhlbiB5b3Ugc2hvdWxkIHNheSAnWScgb3RoZXJ3aXNlIHNheSAnTicuCi0KIGNvbmZpZyBNVERfRk9SVFVORVQKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gdGhlIEZvcnR1TmV0IGJvYXJkIgogCWRlcGVuZHMgb24gTVREX0NGSSAmJiBNVERfUEFSVElUSU9OUyAmJiBTQTExMDBfRk9SVFVORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDJmN2UyNTQuLmFiNzFmMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNiBAQAogb2JqLSQoQ09ORklHX01URF9DU1RNX01JUFNfSVhYKQkrPSBjc3RtX21pcHNfaXh4Lm8KIG9iai0kKENPTkZJR19NVERfREMyMTI4NSkJKz0gZGMyMTI4NS5vCiBvYmotJChDT05GSUdfTVREX0RJTE5FVFBDKQkrPSBkaWxuZXRwYy5vCi1vYmotJChDT05GSUdfTVREX0VQWEExMERCKQkrPSBlcHhhMTBkYi1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0lRODAzMTApCSs9IGlxODAzMTAubwogb2JqLSQoQ09ORklHX01URF9MNDQwR1gpCSs9IGw0NDBneC5vCiBvYmotJChDT05GSUdfTVREX0FNRDc2WFJPTSkJKz0gYW1kNzZ4cm9tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZXB4YTEwZGItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZXB4YTEwZGItZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1YjA3OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2VweGExMGRiLWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gRVBYQSBiYXNlZCBkZXZpY2VzCi0gKgotICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUmVkIEhhdCwgSW5jLgotICoKLSAqICRJZDogZXB4YTEwZGItZmxhc2guYyx2IDEuMTUgMjAwNS8xMS8wNyAxMToxNDoyNyBnbGVpeG5lciBFeHAgJAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLSNpZmRlZiBDT05GSUdfRVBYQTEwREIKLSNkZWZpbmUgQk9BUkRfTkFNRSAiRVBYQTEwREIiCi0jZWxzZQotI2RlZmluZSBCT0FSRF9OQU1FICJFUFhBMURCIgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbnJfcGFydHMgPSAwOwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLXN0YXRpYyBpbnQgZXB4YV9kZWZhdWx0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzKTsKLQotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGVweGFfbWFwID0gewotCS5uYW1lID0JCSJFUFhBIGZsYXNoIiwKLQkuc2l6ZSA9CQlGTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkyLAotCS5waHlzID0JCUZMQVNIX1NUQVJULAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJhZnMiLCBOVUxMIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVweGFfbXRkX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCXByaW50ayhLRVJOX05PVElDRSAiJXMgZmxhc2ggZGV2aWNlOiAweCV4IGF0IDB4JXhcbiIsIEJPQVJEX05BTUUsIEZMQVNIX1NJWkUsIEZMQVNIX1NUQVJUKTsKLQotCWVweGFfbWFwLnZpcnQgPSBpb3JlbWFwKEZMQVNIX1NUQVJULCBGTEFTSF9TSVpFKTsKLQlpZiAoIWVweGFfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCAlcyBmbGFzaFxuIixCT0FSRF9OQU1FKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNpbXBsZV9tYXBfaW5pdCgmZXB4YV9tYXApOwotCi0JbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZlcHhhX21hcCk7Ci0JaWYgKCFteW10ZCkgewotCQlpb3VubWFwKCh2b2lkICopZXB4YV9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQkvKiBVbmxvY2sgdGhlIGZsYXNoIGRldmljZS4gKi8KLQlpZihteW10ZC0+dW5sb2NrKXsKLQkJZm9yIChpPTA7IGk8bXltdGQtPm51bWVyYXNlcmVnaW9ucztpKyspewotCQkJaW50IGo7Ci0JCQlmb3Ioaj0wO2o8bXltdGQtPmVyYXNlcmVnaW9uc1tpXS5udW1ibG9ja3M7aisrKXsKLQkJCQlteW10ZC0+dW5sb2NrKG15bXRkLG15bXRkLT5lcmFzZXJlZ2lvbnNbaV0ub2Zmc2V0ICsgaiAqIG15bXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2VzaXplLG15bXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2VzaXplKTsKLQkJCX0KLQkJfQotCX0KLQotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCW5yX3BhcnRzID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMobXltdGQsIHByb2JlcywgJnBhcnRzLCAwKTsKLQotCWlmIChucl9wYXJ0cyA+IDApIHsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKG15bXRkLCBwYXJ0cywgbnJfcGFydHMpOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQkvKiBObyByZWNvZ25pc2VkIHBhcnRpdGlvbmluZyBzY2hlbWVzIGZvdW5kIC0gdXNlIGRlZmF1bHRzICovCi0JbnJfcGFydHMgPSBlcHhhX2RlZmF1bHRfcGFydGl0aW9ucyhteW10ZCwgJnBhcnRzKTsKLQlpZiAobnJfcGFydHMgPiAwKSB7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIG5yX3BhcnRzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogSWYgYWxsIGVsc2UgZmFpbHMuLi4gKi8KLQlhZGRfbXRkX2RldmljZShteW10ZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBlcHhhX210ZF9jbGVhbnVwKHZvaWQpCi17Ci0JaWYgKG15bXRkKSB7Ci0JCWlmIChucl9wYXJ0cykKLQkJCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZCk7Ci0JCWVsc2UKLQkJCWRlbF9tdGRfZGV2aWNlKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCX0KLQlpZiAoZXB4YV9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopZXB4YV9tYXAudmlydCk7Ci0JCWVweGFfbWFwLnZpcnQgPSAwOwotCX0KLX0KLQotCi0vKgotICogVGhpcyB3aWxsIGRvIGZvciBub3csIG9uY2Ugd2UgZGVjaWRlIHdoaWNoIGJvb3RsZHIgd2UncmUgZmluYWxseQotICogZ29pbmcgdG8gdXNlIHRoZW4gd2UnbGwgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gYW5kIGRvIGl0IHByb3Blcmx5Ci0gKgotICogUGFydGlvbnMgYXJlIGN1cnJlbnRseSAoYXMgb2Zmc2V0cyBmcm9tIGJhc2Ugb2YgZmxhc2gpOgotICogMHgwMDAwMDAwMCAtIDB4MDAzRkZGRkYgLSBib290bG9hZGVyICghKQotICogMHgwMDQwMDAwMCAtIDB4MDBGRkZGRkYgLSBGbGFzaGRpc2sKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlcHhhX2RlZmF1bHRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3Rlciwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCWludCByZXQsIGk7Ci0JaW50IG5wYXJ0aXRpb25zID0gMDsKLQljaGFyICpuYW1lczsKLQljb25zdCBjaGFyICpuYW1lID0gImpmZnMiOwotCi0JcHJpbnRrKCJVc2luZyBkZWZhdWx0IHBhcnRpdGlvbnMgZm9yICVzXG4iLEJPQVJEX05BTUUpOwotCW5wYXJ0aXRpb25zPTE7Ci0JcGFydHMgPSBrbWFsbG9jKG5wYXJ0aXRpb25zKnNpemVvZigqcGFydHMpK3N0cmxlbihuYW1lKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtemVybyhwYXJ0cyxucGFydGl0aW9ucypzaXplb2YoKnBhcnRzKStzdHJsZW4obmFtZSkpOwotCWlmICghcGFydHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCWk9MDsKLQluYW1lcyA9IChjaGFyICopJnBhcnRzW25wYXJ0aXRpb25zXTsKLQlwYXJ0c1tpXS5uYW1lID0gbmFtZXM7Ci0JbmFtZXMgKz0gc3RybGVuKG5hbWUpICsgMTsKLQlzdHJjcHkocGFydHNbaV0ubmFtZSwgbmFtZSk7Ci0KLSNpZmRlZiBDT05GSUdfRVBYQTEwREIKLQlwYXJ0c1tpXS5zaXplID0gRkxBU0hfU0laRS0weDAwNDAwMDAwOwotCXBhcnRzW2ldLm9mZnNldCA9IDB4MDA0MDAwMDA7Ci0jZWxzZQotCXBhcnRzW2ldLnNpemUgPSBGTEFTSF9TSVpFLTB4MDAxODAwMDA7Ci0JcGFydHNbaV0ub2Zmc2V0ID0gMHgwMDE4MDAwMDsKLSNlbmRpZgotCi0gb3V0OgotCSpwcGFydHMgPSBwYXJ0czsKLQlyZXR1cm4gbnBhcnRpdGlvbnM7Ci19Ci0KLQotbW9kdWxlX2luaXQoZXB4YV9tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChlcHhhX210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiQ2xpdmUgRGF2aWVzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFsdGVyYSBlcHhhIG10ZCBmbGFzaCBtYXAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDczM2JjMjUuLjQ5NTk4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjcsNiArMjcsMTkgQEAKICMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy4KIGlmIE5FVERFVklDRVMKIAorY29uZmlnIElGQgorCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUX0NMU19BQ1QKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGFuIGludGVybWlkaWF0ZSBkcml2ZXIgdGhhdCBhbGxvd3Mgc2hhcmluZyBvZgorCSAgcmVzb3VyY2VzLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgaWZiLiAgSWYgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgaWZiCisJICBkZXZpY2UgYXQgYSB0aW1lLCB5b3UgbmVlZCB0byBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLgorCSAgSW5zdGVhZCBvZiAnaWZiJywgdGhlIGRldmljZXMgd2lsbCB0aGVuIGJlIGNhbGxlZCAnaWZiMCcsCisJICAnaWZiMScgZXRjLgorCSAgTG9vayBhdCB0aGUgaXByb3V0ZTIgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgZm9yIHVzYWdlIGV0YworCiBjb25maWcgRFVNTVkKIAl0cmlzdGF0ZSAiRHVtbXkgbmV0IGRyaXZlciBzdXBwb3J0IgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggYjc0YTdjYi4uMDBlNzJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTEyNSw2ICsxMjUsNyBAQAogZW5kaWYKIAogb2JqLSQoQ09ORklHX0RVTU1ZKSArPSBkdW1teS5vCitvYmotJChDT05GSUdfSUZCKSArPSBpZmIubwogb2JqLSQoQ09ORklHX0RFNjAwKSArPSBkZTYwMC5vCiBvYmotJChDT05GSUdfREU2MjApICs9IGRlNjIwLm8KIG9iai0kKENPTkZJR19MQU5DRSkgKz0gbGFuY2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL0tjb25maWcgYi9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZwppbmRleCA0NzAzNjRkLi42MjUxODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZwpAQCAtMzEsMTYgKzMxLDMgQEAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhbiBBY29ybiBzeXN0ZW0gd2l0aCBvbmUgb2YgdGhlc2UgbmV0d29yayBjYXJkcywgeW91CiAJICBzaG91bGQgc2F5IFkgdG8gdGhpcyBvcHRpb24gaWYgeW91IHdpc2ggdG8gdXNlIGl0IHdpdGggTGludXguCi0KLWNvbmZpZyBBUk1fRVRIRVIwMAotCXRyaXN0YXRlICJBbHRlcmEgRXRoZXIwMCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEFSTSAmJiBBUkNIX0NBTUVMT1QKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIEFsdGVyYSdzIGV0aGVyMDAgZXRoZXJuZXQgbWFjIElQIGNvcmUuIFNheQotCSAgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoaXMgaW50byB0aGUga2VybmVsLiBJdAotCSAgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKHNheSBNIGhlcmUpIHRoYXQgY2FuIGJlIGluc2VydGVkLwotCSAgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgUExEIGlzIGNvbmZpZ3VyZWQuCi0JICBJZiB0aGlzIGRyaXZlciBpcyBydW5uaW5nIG9uIGFuIGVweGExMCBkZXZlbG9wbWVudCBib2FyZCB0aGVuIGl0Ci0JICB3aWxsIGdlbmVyYXRlIGEgc3VpdGFibGUgaHcgYWRkcmVzcyBiYXNlZCBvbiB0aGUgYm9hcmQgc2VyaWFsCi0JICBudW1iZXIgKE1URCBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzKS4gT3RoZXJ3aXNlIHlvdSB3aWxsCi0JICBuZWVkIHRvIHNldCBhIHN1aXRhYmxlIGh3IGFkZHJlc3MgdXNpbmcgaWZjb25maWcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUKaW5kZXggYjBkNzA2OC4uYmMyNjNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2FybS9NYWtlZmlsZQpAQCAtNCw3ICs0LDYgQEAKICMKIAogb2JqLSQoQ09ORklHX0FSTV9BTTc5Qzk2MUEpCSs9IGFtNzljOTYxYS5vCi1vYmotJChDT05GSUdfQVJNX0VUSEVSMDApCSs9IGV0aGVyMDAubwogb2JqLSQoQ09ORklHX0FSTV9FVEhFUkgpCSs9IGV0aGVyaC5vCiBvYmotJChDT05GSUdfQVJNX0VUSEVSMykJKz0gZXRoZXIzLm8KIG9iai0kKENPTkZJR19BUk1fRVRIRVIxKQkrPSBldGhlcjEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCmluZGV4IDg3Nzg5MWEuLjUzZTNhZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKQEAgLTY2OCw5ICs2NjgsOCBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhbTc5Yzk2MV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBfX2luaXQgYW03OWM5NjFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldl9wcml2ICpwcml2OwpAQCAtNzU4LDE1ICs3NTcsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYW03OWM5NjFfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhbTc5Yzk2MSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbTc5Yzk2MV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGFtNzljOTYxX3Byb2JlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhbTc5Yzk2MSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFtNzljOTYxX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhbTc5Yzk2MV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtNzljOTYxX2RyaXZlcik7CiB9CiAKIF9faW5pdGNhbGwoYW03OWM5NjFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIwMC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxZjRlMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxNyArMCwwIEBACi0vKgotICogIGRyaXZlcnMvbmV0L2V0aGVyMDAuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qIGluY2x1ZGVzICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGQvcGxkX2hvdHN3YXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9leGNhbGlidXIuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL2V0aGVyMDAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90ZGtwaHkuaD4KLQotCi1NT0RVTEVfQVVUSE9SKCJDbGl2ZSBEYXZpZXMiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQWx0ZXJhIEV0aGVyMDAgSVAgY29yZSBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2RlZmluZSBQS1RfQlVGX1NaIDE1NDAgLyogU2l6ZSBvZiBlYWNoIHJ4IGJ1ZmZlciAqLwotI2RlZmluZSBFVEhfTlIgNCAvKiBOdW1iZXIgb2YgTUFDcyB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotCi0jZGVmaW5lIERFQlVHKHgpCi0KLSNkZWZpbmUgX19kbWFfdmEoeCkgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGludClwcml2LT5kbWFfZGF0YSsoKCh1bnNpZ25lZCBpbnQpKHgpKSYoRVhDX1NQU1JBTV9CTE9DSzBfU0laRS0xKSkpCi0jZGVmaW5lIF9fZG1hX3BhKHgpICh1bnNpZ25lZCBpbnQpKEVYQ19TUFNSQU1fQkxPQ0swX0JBU0UrKCgodW5zaWduZWQgaW50KSh4KSktKHVuc2lnbmVkIGludClwcml2LT5kbWFfZGF0YSkpCi0KLSNkZWZpbmUgRVRIRVIwMF9CQVNFCTAKLSNkZWZpbmUJRVRIRVIwMF9UWVBFCi0jZGVmaW5lIEVUSEVSMDBfTkFNRSAiZXRoZXIwMCIKLSNkZWZpbmUgTUFDX1JFR19TSVpFIDB4NDAwIC8qIHNpemUgb2YgTUFDIHJlZ2lzdGVyIGFyZWEgKi8KLQotCi0KLS8qIHR5cGVkZWZzICovCi0KLS8qIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBkcml2ZXIgY29udHJvbCBzdHJ1Y3R1cmUgKi8KLQotI2RlZmluZSBSWF9OVU1fQlVGRiAgICAgMTAKLSNkZWZpbmUgUlhfTlVNX0ZERVNDICAgIDEwCi0jZGVmaW5lIFRYX05VTV9GREVTQyAgICAxMAotCi1zdHJ1Y3QgdHhfZmRhX2VudHsKLQlGREFfREVTQyAgZmQ7Ci0JQlVGX0RFU0MgIGJkOwotCUJVRl9ERVNDICBwYWQ7Ci19Owotc3RydWN0IHJ4X2ZkYV9lbnR7Ci0JRkRBX0RFU0MgIGZkOwotCUJVRl9ERVNDICBiZDsKLQlCVUZfREVTQyAgcGFkOwotfTsKLXN0cnVjdCByeF9ibGlzdF9lbnR7Ci0JRkRBX0RFU0MgIGZkOwotCUJVRl9ERVNDICBiZDsKLQlCVUZfREVTQyAgcGFkOwotfTsKLXN0cnVjdCBuZXRfcHJpdgotewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBza19idWZmKiBza2I7Ci0Jdm9pZCogZG1hX2RhdGE7Ci0Jc3RydWN0IHJ4X2JsaXN0X2VudCogIHJ4X2JsaXN0X3ZwOwotCXN0cnVjdCByeF9mZGFfZW50KiByeF9mZGFfcHRyOwotCXN0cnVjdCB0eF9mZGFfZW50KiB0eF9mZGFsaXN0X3ZwOwotCXN0cnVjdCB0cV9zdHJ1Y3QgIHRxX21lbXVwZGF0ZTsKLQl1bnNpZ25lZCBjaGFyICAgbWVtdXBkYXRlX3NjaGVkdWxlZDsKLQl1bnNpZ25lZCBjaGFyICAgcnhfZGlzYWJsZWQ7Ci0JdW5zaWduZWQgY2hhciAgIHF1ZXVlX3N0b3BwZWQ7Ci0Jc3BpbmxvY2tfdCByeF9sb2NrOwotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdmVuZG9yX2lkWzJdPXsweDA3LDB4ZWR9OwotCi0jaWZkZWYgRVRIRVIwMF9ERUJVRwotCi0vKiBEdW1wIChtb3N0KSByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZyBwdXBvc2VzICovCi0KLXN0YXRpYyB2b2lkIGR1bXBfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KXsKLQlzdHJ1Y3QgbmV0X3ByaXYqIHByaXY9ZGV2LT5wcml2OwotCXVuc2lnbmVkIGludCogaTsKLQotCXByaW50aygiXG4gUlggZnJlZSBkZXNjcmlwdG9yIGFyZWE6XG4iKTsKLQotCWZvcihpPSh1bnNpZ25lZCBpbnQqKXByaXYtPnJ4X2ZkYV9wdHI7Ci0JICAgIGk8KCh1bnNpZ25lZCBpbnQqKShwcml2LT5yeF9mZGFfcHRyK1JYX05VTV9GREVTQykpOyl7Ci0JCXByaW50aygiJSM4eCAlIzh4ICUjOHggJSM4eFxuIiwqaSwqKGkrMSksKihpKzIpLCooaSszKSk7Ci0JCWkrPTQ7Ci0JfQotCi0JcHJpbnRrKCJcbiBSWCBidWZmZXIgbGlzdDpcbiIpOwotCi0JZm9yKGk9KHVuc2lnbmVkIGludCopcHJpdi0+cnhfYmxpc3RfdnA7Ci0JICAgIGk8KCh1bnNpZ25lZCBpbnQqKShwcml2LT5yeF9ibGlzdF92cCtSWF9OVU1fQlVGRikpOyl7Ci0JCXByaW50aygiJSM4eCAlIzh4ICUjOHggJSM4eFxuIiwqaSwqKGkrMSksKihpKzIpLCooaSszKSk7Ci0JCWkrPTQ7Ci0JfQotCi0JcHJpbnRrKCJcbiBUWCBmcmFtZSBkZXNjcmlwdG9yIGxpc3Q6XG4iKTsKLQotCWZvcihpPSh1bnNpZ25lZCBpbnQqKXByaXYtPnR4X2ZkYWxpc3RfdnA7Ci0JICAgIGk8KCh1bnNpZ25lZCBpbnQqKShwcml2LT50eF9mZGFsaXN0X3ZwK1RYX05VTV9GREVTQykpOyl7Ci0JCXByaW50aygiJSM4eCAlIzh4ICUjOHggJSM4eFxuIiwqaSwqKGkrMSksKihpKzIpLCooaSszKSk7Ci0JCWkrPTQ7Ci0JfQotCi0JcHJpbnRrKCJcbmRtYSBjdGw9JSN4XG4iLHJlYWR3KEVUSEVSX0RNQV9DVEwoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJ0eGZybXB0cj0lI3hcbiIscmVhZHcoRVRIRVJfVFhGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJ0eHRocnNoPSUjeFxuIixyZWFkdyhFVEhFUl9UWFRIUlNIKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygidHhwb2xsY3RyPSUjeFxuIixyZWFkdyhFVEhFUl9UWFBPTExDVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJibGZybXB0cj0lI3hcbiIscmVhZHcoRVRIRVJfQkxGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJyeGZyYWdzaXplPSUjeFxuIixyZWFkdyhFVEhFUl9SWEZSQUdTSVpFKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygidHhfaW50X2VuPSUjeFxuIixyZWFkdyhFVEhFUl9JTlRfRU4oZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJmZGFfYmFzPSUjeFxuIixyZWFkdyhFVEhFUl9GREFfQkFTKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygiZmRhX2xpbT0lI3hcbiIscmVhZHcoRVRIRVJfRkRBX0xJTShkZXYtPmJhc2VfYWRkcikpKTsKLQlwcmludGsoImludF9zcmM9JSN4XG4iLHJlYWR3KEVUSEVSX0lOVF9TUkMoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJwYXVzZWNudD0lI3hcbiIscmVhZHcoRVRIRVJfUEFVU0VDTlQoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJyZW1wYXVjbnQ9JSN4XG4iLHJlYWR3KEVUSEVSX1JFTVBBVUNOVChkZXYtPmJhc2VfYWRkcikpKTsKLQlwcmludGsoInR4Y29uZnJtc3RhdD0lI3hcbiIscmVhZHcoRVRIRVJfVFhDT05GUk1TVEFUKGRldi0+YmFzZV9hZGRyKSkpOwotCXByaW50aygibWFjX2N0bD0lI3hcbiIscmVhZHcoRVRIRVJfTUFDX0NUTChkZXYtPmJhc2VfYWRkcikpKTsKLQlwcmludGsoImFyY19jdGw9JSN4XG4iLHJlYWR3KEVUSEVSX0FSQ19DVEwoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JcHJpbnRrKCJ0eF9jdGw9JSN4XG4iLHJlYWR3KEVUSEVSX1RYX0NUTChkZXYtPmJhc2VfYWRkcikpKTsKLX0KLSNlbmRpZiAvKiBFVEhFUjAwX0RFQlVHICovCi0KLQotc3RhdGljIGludCBldGhlcjAwX3dyaXRlX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBhZGRyZXNzLCBzaG9ydCB2YWx1ZSkKLXsKLQl2b2xhdGlsZSBpbnQgY291bnQgPSAxMDI0OwotCXdyaXRldyh2YWx1ZSxFVEhFUl9NRF9EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0Jd3JpdGV3KCBFVEhFUl9NRF9DQV9CVVNZX01TSyB8Ci0JCUVUSEVSX01EX0NBX1dSX01TSyB8Ci0JCShhZGRyZXNzICYgRVRIRVJfTURfQ0FfQUREUl9NU0spLAotCQlFVEhFUl9NRF9DQShkZXYtPmJhc2VfYWRkcikpOwotCi0JLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLQl3aGlsZSgocmVhZHcoRVRIRVJfTURfQ0EoZGV2LT5iYXNlX2FkZHIpKSAmIEVUSEVSX01EX0NBX0JVU1lfTVNLKSYmY291bnQpewotCQljb3VudC0tOwotCX0KLQlpZiAoIWNvdW50KXsKLQkJcHJpbnRrKCJXcml0ZSB0byBwaHkgZmFpbGVkLCBhZGRyPSUjeCwgZGF0YT0lI3hcbiIsYWRkcmVzcywgdmFsdWUpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZXRoZXIwMF9yZWFkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBhZGRyZXNzKQotewotCXZvbGF0aWxlIGludCBjb3VudCA9IDEwMjQ7Ci0Jd3JpdGV3KCBFVEhFUl9NRF9DQV9CVVNZX01TSyB8Ci0JCShhZGRyZXNzICYgRVRIRVJfTURfQ0FfQUREUl9NU0spLAotCQlFVEhFUl9NRF9DQShkZXYtPmJhc2VfYWRkcikpOwotCi0JLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLQl3aGlsZSgocmVhZHcoRVRIRVJfTURfQ0EoZGV2LT5iYXNlX2FkZHIpKSAmIEVUSEVSX01EX0NBX0JVU1lfTVNLKSYmY291bnQpewotCQljb3VudC0tOwotCX0KLQlpZiAoIWNvdW50KXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVhZCBmcm9tIHBoeSB0aW1lZCBvdXRcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIHJlYWR3KEVUSEVSX01EX0RBVEEoZGV2LT5iYXNlX2FkZHIpKTsKLX0KLQotc3RhdGljIHZvaWQgZXRoZXIwMF9waHlfaW50KGludCBpcnFfbnVtLCB2b2lkKiBkZXZfaWQsIHN0cnVjdCBwdF9yZWdzKiByZWdzKQotewotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY9ZGV2X2lkOwotCWludCBpcnFfc3RhdHVzOwotCi0JaXJxX3N0YXR1cz1ldGhlcjAwX3JlYWRfcGh5KGRldiwgUEhZX0lSUV9DT05UUk9MKTsKLQotCWlmKGlycV9zdGF0dXMgJiBQSFlfSVJRX0NPTlRST0xfQU5FR19DT01QX0lOVF9NU0spewotCQkvKgotCQkgKiBBdXRvbmVnb3RpYXRpb24gY29tcGxldGUgb24gZXB4YTEwZGIuIFRoZSBtYWMgZG9lc24ndAotCQkgKiB0d2lnIGlmIHdlJ3JlIGluIGZ1bGwgZHVwbGV4IHNvIHdlIG5lZWQgdG8gY2hlY2sgdGhlCi0JCSAqIHBoeSBzdGF0dXMgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgbWFjIGFjY29yZGluZ2x5Ci0JCSAqLwotCQlpZihldGhlcjAwX3JlYWRfcGh5KGRldiwgUEhZX1NUQVRVUykmKFBIWV9TVEFUVVNfMTBUX0ZfTVNLfFBIWV9TVEFUVVNfMTAwX1hfRl9NU0spKXsKLQkJCWludCB0bXA7Ci0JCQl0bXA9cmVhZGwoRVRIRVJfTUFDX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCQkJd3JpdGVsKHRtcHxFVEhFUl9NQUNfQ1RMX0ZVTExEVVBfTVNLLEVUSEVSX01BQ19DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQkJfQotCX0KLQotCWlmKGlycV9zdGF0dXMmUEhZX0lSUV9DT05UUk9MX0xTX0NIR19JTlRfTVNLKXsKLQotCQlpZihldGhlcjAwX3JlYWRfcGh5KGRldiwgUEhZX1NUQVRVUykmIFBIWV9TVEFUVVNfTElOS19NU0spewotCQkJLyogTGluayBpcyB1cCAqLwotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQkJLy9wcmludGsoIkNhcnJpZXIgb25cbiIpOwotCQl9ZWxzZXsKLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQkvL3ByaW50aygiQ2FycmllciBvZmZcbiIpOwotCi0JCX0KLQl9Ci0KLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfYmxpc3RfZW50cnkoc3RydWN0IHNrX2J1ZmYqIHNrYixzdHJ1Y3QgcnhfYmxpc3RfZW50KiBibGlzdF9lbnRfcHRyKXsKLQkvKiBNYWtlIHRoZSBidWZmZXIgY29uc2lzdGVudCB3aXRoIHRoZSBjYWNoZSBhcyB0aGUgbWFjIGlzIGdvaW5nIHRvIHdyaXRlCi0JICogZGlyZWN0bHkgaW50byBpdCovCi0JYmxpc3RfZW50X3B0ci0+ZmQuRkRTeXN0ZW09KHVuc2lnbmVkIGludClza2I7Ci0JYmxpc3RfZW50X3B0ci0+YmQuQnVmZkRhdGE9KGNoYXIqKV9fcGEoc2tiLT5kYXRhKTsKLQljb25zaXN0ZW50X3N5bmMoc2tiLT5kYXRhLFBLVF9CVUZfU1osUENJX0RNQV9GUk9NREVWSUNFKTsKLSAgICAgICAgLyogYWxpZ24gSVAgb24gMTYgQnl0ZSAoRE1BX0NUTCBzZXQgdG8gc2tpcCAyIGJ5dGVzKSAqLwotCXNrYl9yZXNlcnZlKHNrYiwyKTsKLQlibGlzdF9lbnRfcHRyLT5iZC5CdWZmTGVuZ3RoPVBLVF9CVUZfU1otMjsKLQlibGlzdF9lbnRfcHRyLT5mZC5GRExlbmd0aD0xOwotCWJsaXN0X2VudF9wdHItPmZkLkZEQ3RsPUZEQ1RMX0NPV05TRkRfTVNLOwotCWJsaXN0X2VudF9wdHItPmJkLkJEQ3RsPUJEQ1RMX0NPV05TQkRfTVNLOwotfQotCi0KLXN0YXRpYyBpbnQgZXRoZXIwMF9tZW1faW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXN0cnVjdCBuZXRfcHJpdiogcHJpdj1kZXYtPnByaXY7Ci0Jc3RydWN0IHR4X2ZkYV9lbnQgKnR4X2ZkX3B0ciwqdHhfZW5kX3B0cjsKLQlzdHJ1Y3QgcnhfYmxpc3RfZW50KiBibGlzdF9lbnRfcHRyOwotCWludCBpOwotCi0JLyoKLQkgKiBHcmFiIGEgYmxvY2sgb2Ygb24gY2hpcCBTUkFNIHRvIGNvbnRhaW4gdGhlIGNvbnRyb2wgc3R1Y3R1cmVzIGZvcgotCSAqIHRoZSBldGhlcm5ldCBNQUMuIFRoaXMgdW5jYWNoZWQgYmVjdWFzZSBpdCBuZWVkcyB0byBiZSBhY2Nlc3NlcyBieSBib3RoCi0JICogYnVzIG1hc3RlcnMgKGNwdSArIG1hYykuIEhvd2V2ZXIsIGl0IHNob3VsZG4ndCBtYXR0ZXIgdG9vIG11Y2ggaW4gdGVybXMKLQkgKiBvZiBzcGVlZCBhcyBpdHMgb24gY2hpcCBtZW1vcnkKLQkgKi8KLQlwcml2LT5kbWFfZGF0YT1pb3JlbWFwX25vY2FjaGUoRVhDX1NQU1JBTV9CTE9DSzBfQkFTRSxFWENfU1BTUkFNX0JMT0NLMF9TSVpFICk7Ci0JaWYgKCFwcml2LT5kbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwcml2LT5yeF9mZGFfcHRyPShzdHJ1Y3QgcnhfZmRhX2VudCopcHJpdi0+ZG1hX2RhdGE7Ci0JLyoKLQkgKiBOb3cgc2hhcmUgaXQgb3V0IGFtb25nc3QgdGhlIEZyYW1lIGRlc2NyaXB0b3JzIGFuZCB0aGUgYnVmZmVyIGxpc3QKLQkgKi8KLQlwcml2LT5yeF9ibGlzdF92cD0oc3RydWN0IHJ4X2JsaXN0X2VudCopKCh1bnNpZ25lZCBpbnQpcHJpdi0+ZG1hX2RhdGErUlhfTlVNX0ZERVNDKnNpemVvZihzdHJ1Y3QgcnhfZmRhX2VudCkpOwotCi0JLyoKLQkgKkluaXRhbGlzZSB0aGUgRkRBIGxpc3QKLQkgKi8KLQkvKiBzZXQgb3duZXJzaGlwIHRvIHRoZSBjb250cm9sbGVyICovCi0JbWVtc2V0KHByaXYtPnJ4X2ZkYV9wdHIsMHg4MCxSWF9OVU1fRkRFU0Mqc2l6ZW9mKHN0cnVjdCByeF9mZGFfZW50KSk7Ci0KLQkvKgotCSAqSW5pdGlhbGlzZSB0aGUgYnVmZmVyIGxpc3QKLQkgKi8KLQlibGlzdF9lbnRfcHRyPXByaXYtPnJ4X2JsaXN0X3ZwOwotCWk9MDsKLQl3aGlsZShibGlzdF9lbnRfcHRyPChwcml2LT5yeF9ibGlzdF92cCtSWF9OVU1fQlVGRikpewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlibGlzdF9lbnRfcHRyLT5mZC5GRExlbmd0aD0xOwotCQlza2I9ZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKTsKLQkJaWYoc2tiKXsKLQkJCXNldHVwX2JsaXN0X2VudHJ5KHNrYixibGlzdF9lbnRfcHRyKTsKLQkJCWJsaXN0X2VudF9wdHItPmZkLkZETmV4dD0oRkRBX0RFU0MqKV9fZG1hX3BhKGJsaXN0X2VudF9wdHIrMSk7Ci0JCQlibGlzdF9lbnRfcHRyLT5iZC5CRFN0YXQ9aSsrOwotCQkJYmxpc3RfZW50X3B0cisrOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJpbnRrKCJGYWlsZWQgdG8gaW5pdGFsaXNlIGJ1ZmZlciBsaXN0XG4iKTsKLQkJfQotCi0JfQotCWJsaXN0X2VudF9wdHItLTsKLQlibGlzdF9lbnRfcHRyLT5mZC5GRE5leHQ9KEZEQV9ERVNDKilfX2RtYV9wYShwcml2LT5yeF9ibGlzdF92cCk7Ci0KLQlwcml2LT50eF9mZGFsaXN0X3ZwPShzdHJ1Y3QgdHhfZmRhX2VudCopKHByaXYtPnJ4X2JsaXN0X3ZwK1JYX05VTV9CVUZGKTsKLQotCS8qIEluaXRpYWxpc2UgdGhlIGJ1ZmZlcnMgdG8gYmUgYSBjaXJjdWxhciBsaXN0LiBUaGUgbWFjIHdpbGwgdGhlbiBnbyBwb2xsCi0JICogdGhlIGxpc3QgdW50aWwgaXQgZmluZHMgYSBmcmFtZSByZWFkeSB0byB0cmFuc21pdCAqLwotCXR4X2VuZF9wdHI9cHJpdi0+dHhfZmRhbGlzdF92cCtUWF9OVU1fRkRFU0M7Ci0JZm9yKHR4X2ZkX3B0cj1wcml2LT50eF9mZGFsaXN0X3ZwO3R4X2ZkX3B0cjx0eF9lbmRfcHRyO3R4X2ZkX3B0cisrKXsKLQkJdHhfZmRfcHRyLT5mZC5GRE5leHQ9KEZEQV9ERVNDKilfX2RtYV9wYSgodHhfZmRfcHRyKzEpKTsKLQkJdHhfZmRfcHRyLT5mZC5GREN0bD0xOwotCQl0eF9mZF9wdHItPmZkLkZEU3RhdD0wOwotCQl0eF9mZF9wdHItPmZkLkZETGVuZ3RoPTE7Ci0KLQl9Ci0JLyogQ2hhbmdlIHRoZSBsYXN0IEZETmV4dCBwb2ludGVyIHRvIG1ha2UgYSBjaXJjdWxhciBsaXN0ICovCi0JdHhfZmRfcHRyLS07Ci0JdHhfZmRfcHRyLT5mZC5GRE5leHQ9KEZEQV9ERVNDKilfX2RtYV9wYShwcml2LT50eF9mZGFsaXN0X3ZwKTsKLQotCS8qIFBvaW50IHRoZSBkZXZpY2UgYXQgdGhlIGNoYWluIG9mIFJ4IGFuZCBUeCBCdWZmZXJzICovCi0Jd3JpdGVsKCh1bnNpZ25lZCBpbnQpX19kbWFfcGEocHJpdi0+cnhfZmRhX3B0ciksRVRIRVJfRkRBX0JBUyhkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCgoUlhfTlVNX0ZERVNDLTEpKnNpemVvZihzdHJ1Y3QgcnhfZmRhX2VudCksRVRIRVJfRkRBX0xJTShkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCgodW5zaWduZWQgaW50KV9fZG1hX3BhKHByaXYtPnJ4X2JsaXN0X3ZwKSxFVEhFUl9CTEZSTVBUUihkZXYtPmJhc2VfYWRkcikpOwotCi0Jd3JpdGVsKCh1bnNpZ25lZCBpbnQpX19kbWFfcGEocHJpdi0+dHhfZmRhbGlzdF92cCksRVRIRVJfVFhGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgZXRoZXIwMF9tZW1fdXBkYXRlKHZvaWQqIGRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2PWRldl9pZDsKLQlzdHJ1Y3QgbmV0X3ByaXYqIHByaXY9ZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmKiBza2I7Ci0Jc3RydWN0IHR4X2ZkYV9lbnQgKmZkYV9wdHI9cHJpdi0+dHhfZmRhbGlzdF92cDsKLQlzdHJ1Y3QgcnhfYmxpc3RfZW50KiBibGlzdF9lbnRfcHRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlwcml2LT50cV9tZW11cGRhdGUuc3luYz0wOwotCS8vcHJpdi0+dHFfbWVtdXBkYXRlLmxpc3Q9Ci0JcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZD0wOwotCi0JLyogVHJhbnNtaXQgaW50ZXJydXB0ICovCi0Jd2hpbGUoZmRhX3B0cjwocHJpdi0+dHhfZmRhbGlzdF92cCtUWF9OVU1fRkRFU0MpKXsKLQkJaWYoIShGRENUTF9DT1dOU0ZEX01TSyZmZGFfcHRyLT5mZC5GREN0bCkgJiYgKEVUSEVSX1RYX1NUQVRfQ09NUF9NU0smZmRhX3B0ci0+ZmQuRkRTdGF0KSl7Ci0JCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQlwcml2LT5zdGF0cy50eF9ieXRlcys9ZmRhX3B0ci0+YmQuQnVmZkxlbmd0aDsKLQkJCXNrYj0oc3RydWN0IHNrX2J1ZmYqKWZkYV9wdHItPmZkLkZEU3lzdGVtOwotCQkJLy9wcmludGsoIiVkOnR4Y2xuOmZkYT0lI3ggc2tiPSUjeFxuIixqaWZmaWVzLGZkYV9wdHIsc2tiKTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWZkYV9wdHItPmZkLkZEU3lzdGVtPTA7Ci0JCQlmZGFfcHRyLT5mZC5GRFN0YXQ9MDsKLQkJCWZkYV9wdHItPmZkLkZEQ3RsPTA7Ci0JCX0KLQkJZmRhX3B0cisrOwotCX0KLQkvKiBGaWxsIGluIGFueSBtaXNzaW5nIGJ1ZmZlcnMgZnJvbSB0aGUgcmVjZWl2ZWQgcXVldWUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jayxmbGFncyk7Ci0JYmxpc3RfZW50X3B0cj1wcml2LT5yeF9ibGlzdF92cDsKLQl3aGlsZShibGlzdF9lbnRfcHRyPChwcml2LT5yeF9ibGlzdF92cCtSWF9OVU1fQlVGRikpewotCQkvKiBmZC5GRFN5c3RlbSBvZiAwIGluZGljYXRlcyB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciBpbiB0aGUgSVNSICovCi0JCWlmKCFibGlzdF9lbnRfcHRyLT5mZC5GRFN5c3RlbSl7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJc2tiPWRldl9hbGxvY19za2IoUEtUX0JVRl9TWik7Ci0JCQlibGlzdF9lbnRfcHRyLT5mZC5GRFN5c3RlbT0odW5zaWduZWQgaW50KXNrYjsKLQkJCWlmKHNrYil7Ci0JCQkJc2V0dXBfYmxpc3RfZW50cnkoc2tiLGJsaXN0X2VudF9wdHIpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWJsaXN0X2VudF9wdHIrKzsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jayxmbGFncyk7Ci0JaWYocHJpdi0+cXVldWVfc3RvcHBlZCl7Ci0JCS8vcHJpbnRrKCIlZDpjbG46c3RhcnQgcVxuIixqaWZmaWVzKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQl9Ci0JaWYocHJpdi0+cnhfZGlzYWJsZWQpewotCQkvL3ByaW50aygiJWQ6ZW5hYmxlX2lycVxuIixqaWZmaWVzKTsKLQkJcHJpdi0+cnhfZGlzYWJsZWQ9MDsKLQkJd3JpdGVsKEVUSEVSX1JYX0NUTF9SWEVOX01TSyxFVEhFUl9SWF9DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBldGhlcjAwX2ludCggaW50IGlycV9udW0sIHZvaWQqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MqIHJlZ3MpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldj1kZXZfaWQ7Ci0Jc3RydWN0IG5ldF9wcml2KiBwcml2PWRldi0+cHJpdjsKLQotCXVuc2lnbmVkIGludCAgIGludGVycnVwdFZhbHVlOwotCi0JaW50ZXJydXB0VmFsdWU9cmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpOwotCi0JLy9wcmludGsoIklOVF9TUkM9JXhcbiIsaW50ZXJydXB0VmFsdWUpOwotCi0JaWYoIShyZWFkbChFVEhFUl9JTlRfU1JDKGRldi0+YmFzZV9hZGRyKSkgJiBFVEhFUl9JTlRfU1JDX0lSUV9NU0spKQotCXsKLQkJcmV0dXJuOwkJLyogSW50ZXJydXB0IHdhc24ndCBjYXVzZWQgYnkgdXMhISAqLwotCX0KLQotCWlmKHJlYWRsKEVUSEVSX0lOVF9TUkMoZGV2LT5iYXNlX2FkZHIpKSYKLQkgICAoRVRIRVJfSU5UX1NSQ19JTlRNQUNSWF9NU0sgfAotCSAgICBFVEhFUl9JTlRfU1JDX0ZEQUVYX01TSyB8Ci0JICAgIEVUSEVSX0lOVF9TUkNfQkxFWF9NU0spKSB7Ci0JCXN0cnVjdCByeF9ibGlzdF9lbnQqIGJsaXN0X2VudF9wdHI7Ci0JCXN0cnVjdCByeF9mZGFfZW50KiBmZGFfZW50X3B0cjsKLQkJc3RydWN0IHNrX2J1ZmYqIHNrYjsKLQotCQlmZGFfZW50X3B0cj1wcml2LT5yeF9mZGFfcHRyOwotCQlzcGluX2xvY2soJnByaXYtPnJ4X2xvY2spOwotCQl3aGlsZShmZGFfZW50X3B0cjwocHJpdi0+cnhfZmRhX3B0citSWF9OVU1fRkRFU0MpKXsKLQkJCWludCByZXN1bHQ7Ci0KLQkJCWlmKCEoZmRhX2VudF9wdHItPmZkLkZEQ3RsJkZEQ1RMX0NPV05TRkRfTVNLKSkKLQkJCXsKLQkJCQkvKiBUaGlzIGZyYW1lIGlzIHJlYWR5IGZvciBwcm9jZXNzaW5nICovCi0JCQkJLypmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGJ1ZmZlciBpbiB0aGUgYnVmZmVybGlzdCAqLwotCQkJCWJsaXN0X2VudF9wdHI9cHJpdi0+cnhfYmxpc3RfdnArZmRhX2VudF9wdHItPmJkLkJEU3RhdDsKLQkJCQlza2I9KHN0cnVjdCBza19idWZmKilibGlzdF9lbnRfcHRyLT5mZC5GRFN5c3RlbTsKLQotCQkJCS8qIFBhc3MgdGhpcyBza2IgdXAgdGhlIHN0YWNrICovCi0JCQkJc2tiLT5kZXY9ZGV2OwotCQkJCXNrYl9wdXQoc2tiLGZkYV9lbnRfcHRyLT5mZC5GRExlbmd0aCk7Ci0JCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLQkJCQlza2ItPmlwX3N1bW1lZD1DSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCQlyZXN1bHQ9bmV0aWZfcngoc2tiKTsKLQkJCQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCQkJCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQlwcml2LT5zdGF0cy5yeF9ieXRlcys9ZmRhX2VudF9wdHItPmZkLkZETGVuZ3RoOwotCi0JCQkJLyogRnJlZSB0aGUgRkRBIGVudHJ5ICovCi0JCQkJZmRhX2VudF9wdHItPmJkLkJEU3RhdD0weGZmOwotCQkJCWZkYV9lbnRfcHRyLT5mZC5GREN0bD1GRENUTF9DT1dOU0ZEX01TSzsKLQotCQkJCS8qIEFsbG9jYXRlIGEgbmV3IHNrYiBhbmQgcG9pbnQgdGhlIGJkIGVudHJ5IHRvIGl0ICovCi0JCQkJYmxpc3RfZW50X3B0ci0+ZmQuRkRTeXN0ZW09MDsKLQkJCQlza2I9ZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKTsKLQkJCQkvL3ByaW50aygiYWxsb2Nza2I9JSN4XG4iLHNrYik7Ci0JCQkJaWYoc2tiKXsKLQkJCQkJc2V0dXBfYmxpc3RfZW50cnkoc2tiLGJsaXN0X2VudF9wdHIpOwotCi0JCQkJfQotCQkJCWVsc2UgaWYoIXByaXYtPm1lbXVwZGF0ZV9zY2hlZHVsZWQpewotCQkJCQlpbnQgdG1wOwotCQkJCQkvKiBUaGVyZSBhcmUgbm8gYnVmZmVycyBhdCB0aGUgbW9tZW50LCBzbyBzY2hlZHVsZSAqLwotCQkJCQkvKiB0aGUgYmFja2dyb3VuZCB0YXNrIHRvIHNvcnQgdGhpcyBvdXQgKi8KLQkJCQkJc2NoZWR1bGVfdGFzaygmcHJpdi0+dHFfbWVtdXBkYXRlKTsKLQkJCQkJcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZD0xOwotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6Tm8gYnVmZmVycyIsZGV2LT5uYW1lKTsKLQkJCQkJLyogSWYgdGhpcyBpbnRlcnJ1cHQgd2FzIGR1ZSB0byBhIGxhY2sgb2YgYnVmZmVycyB0aGVuCi0JCQkJCSAqIHdlJ2QgYmV0dGVyIHN0b3AgdGhlIHJlY2VpdmVyIHRvbyAqLwotCQkJCQlpZihpbnRlcnJ1cHRWYWx1ZSZFVEhFUl9JTlRfU1JDX0JMRVhfTVNLKXsKLQkJCQkJCXByaXYtPnJ4X2Rpc2FibGVkPTE7Ci0JCQkJCQl0bXA9cmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpOwotCQkJCQkJd3JpdGVsKHRtcCZ+RVRIRVJfUlhfQ1RMX1JYRU5fTVNLLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOkhhbHRpbmcgcngiLGRldi0+bmFtZSk7Ci0JCQkJCX0KLQotCQkJCX0KLQotCQkJfQotCQkJZmRhX2VudF9wdHIrKzsKLQkJfQotCQlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7Ci0KLQkJLyogQ2xlYXIgdGhlICBpbnRlcnJ1cHRzICovCi0JCXdyaXRlbChFVEhFUl9JTlRfU1JDX0lOVE1BQ1JYX01TSyB8IEVUSEVSX0lOVF9TUkNfRkRBRVhfTVNLCi0JCSAgICAgICB8IEVUSEVSX0lOVF9TUkNfQkxFWF9NU0ssRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpOwotCi0JfQotCi0JaWYocmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpJkVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfTVNLKXsKLQotCQlpZighcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZCl7Ci0JCQlzY2hlZHVsZV90YXNrKCZwcml2LT50cV9tZW11cGRhdGUpOwotCQkJcHJpdi0+bWVtdXBkYXRlX3NjaGVkdWxlZD0xOwotCQl9Ci0JCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KLQkJd3JpdGVsKEVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfTVNLLEVUSEVSX0lOVF9TUkMoZGV2LT5iYXNlX2FkZHIpKTsKLQl9Ci0KLQlpZiAocmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpICYgKEVUSEVSX0lOVF9TUkNfU1dJTlRfTVNLfAotCQkJCQkJICAgIEVUSEVSX0lOVF9TUkNfSU5URUFSTk9UX01TS3wKLQkJCQkJCSAgICBFVEhFUl9JTlRfU1JDX0lOVExJTktfTVNLfAotCQkJCQkJICAgIEVUSEVSX0lOVF9TUkNfSU5URVhCRF9NU0t8Ci0JCQkJCQkgICAgRVRIRVJfSU5UX1NSQ19JTlRUWENUTENNUF9NU0spKQotCXsKLQkJLyoKLQkJICoJTm90IHVzaW5nIGFueSBvZiB0aGVzZSBzbyB0aGV5IHNob3VsZG4ndCBoYXBwZW4KLQkJICoKLQkJICoJSW4gdGhlIGNhc2VkIG9mIElOVEVYQkQgLSBpZiB5b3UgYWxsb2NhdGUgbW9yZQotCQkgKiAgICAgIHRoYW4gMjggZGVjc3JpcHRvcnMgeW91IG1heSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoaXMKLQkJICovCi0JCXByaW50aygiTm90IHVzaW5nIHRoaXMgaW50ZXJydXB0XG4iKTsKLQl9Ci0KLQlpZiAocmVhZGwoRVRIRVJfSU5UX1NSQyhkZXYtPmJhc2VfYWRkcikpICYKLQkgICAgKEVUSEVSX0lOVF9TUkNfSU5UU0JVU19NU0sgfAotCSAgICAgRVRIRVJfSU5UX1NSQ19JTlROUkFCVF9NU0sKLQkgICAgIHxFVEhFUl9JTlRfU1JDX0RNUEFSRVJSX01TSykpCi0JewotCQkvKgotCQkgKiBIYXJkd2FyZSBlcnJvcnMsIHdlIGNhbiBlaXRoZXIgaWdub3JlIHRoZW0gYW5kIGhvcGUgdGhleSBnbyBhd2F5Ci0JCSAqb3IgcmVzZXQgdGhlIGRldmljZSwgSSdsbCB0cnkgdGhlIGZpcnN0IGZvciBub3cgdG8gc2VlIGlmIHRoZXkgaGFwcGVuCi0JCSAqLwotCQlwcmludGsoIkhhcmR3YXJlIGVycm9yXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGV0aGVyMDBfc2V0dXBfZXRoZXJuZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWludCB0bXA7Ci0KLQlkZXYtPmFkZHJfbGVuPTY7Ci0Jd3JpdGV3KDAsRVRIRVJfQVJDX0FEUihkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCgoZGV2LT5kZXZfYWRkclswXTw8MjQpIHwKLQkJKGRldi0+ZGV2X2FkZHJbMV08PDE2KSB8Ci0JCShkZXYtPmRldl9hZGRyWzJdPDw4KSB8Ci0JCWRldi0+ZGV2X2FkZHJbM10sCi0JCUVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQl3cml0ZXcoNCxFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0JdG1wPXJlYWRsKEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0JdG1wJj0weGZmZmY7Ci0JdG1wfD0oZGV2LT5kZXZfYWRkcls0XTw8MjQpIHwgKGRldi0+ZGV2X2FkZHJbNV08PDE2KTsKLQl3cml0ZWwodG1wLCBFVEhFUl9BUkNfREFUQShkZXYtPmJhc2VfYWRkcikpOwotCS8qIEVuYWJsZSB0aGlzIGVudHJ5IGluIHRoZSBBUkMgKi8KLQotCXdyaXRlbCgxLEVUSEVSX0FSQ19FTkEoZGV2LT5iYXNlX2FkZHIpKTsKLQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZCBldGhlcjAwX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgKi8KLQl3cml0ZXcoRVRIRVJfTUFDX0NUTF9SRVNFVF9NU0ssRVRIRVJfTUFDX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UncmUgbm90IGdvaW5nIHRvIHNlbmQgYW55dGhpbmcKLQkgKi8KLQotCXdyaXRldyhFVEhFUl9UWF9DVExfVFhIQUxUX01TSyxFVEhFUl9UWF9DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHdlJ3JlIG5vdCBnb2luZyB0byByZWNlaXZlIGFueXRoaW5nCi0JICovCi0Jd3JpdGV3KEVUSEVSX1JYX0NUTF9SWEhBTFRfTVNLLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JLyoKLQkgKiBEaXNhYmxlIEludGVycnVwdHMgZm9yIG5vdywgYW5kIHNldCB0aGUgYnVyc3Qgc2l6ZSB0byA4IGJ5dGVzCi0JICovCi0KLQl3cml0ZWwoRVRIRVJfRE1BX0NUTF9JTlRNQVNLX01TSyB8Ci0JICAgICAgICgoOCA8PCBFVEhFUl9ETUFfQ1RMX0RNQlVSU1RfT0ZTVCkgJiBFVEhFUl9ETUFfQ1RMX0RNQlVSU1RfTVNLKQotCSAgICAgICB8KDI8PEVUSEVSX0RNQV9DVExfUlhBTElHTl9PRlNUKSwKLQkgICAgICAgRVRIRVJfRE1BX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0KLQkvKgotCSAqIFNldCBUeFRocnNoIC0gc3RhcnQgdHJhbnNtaXR0aW5nIGEgcGFja2V0IGFmdGVyIDE1MTQKLQkgKiBieXRlcyBvciB3aGVuIGEgcGFja2V0IGlzIGNvbXBsZXRlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QKLQkgKi8KLQkgd3JpdGV3KDE1MTQsRVRIRVJfVFhUSFJTSChkZXYtPmJhc2VfYWRkcikpOwotCi0JLyoKLQkgKiBTZXQgVHhQb2xsQ3RyLiAgRWFjaCBjeWNsZSBpcwotCSAqIDYxLjQ0IG1pY3Jvc2Vjb25kcyB3aXRoIGEgMzMgTUh6IGJ1cwotCSAqLwotCSB3cml0ZXcoMSxFVEhFUl9UWFBPTExDVFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCS8qCi0JICogU2V0IFJ4X0N0bCAtIFR1cm4gb2ZmIHJlY2VwdGlvbiBhbmQgbGV0IFJ4RGF0YSB0dXJuIGl0Ci0JICogb24gbGF0ZXIKLQkgKi8KLQkgd3JpdGV3KEVUSEVSX1JYX0NUTF9SWEhBTFRfTVNLLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi19Ci0KLQotc3RhdGljIHZvaWQgZXRoZXIwMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JaW50IGNvdW50PWRldi0+bWNfY291bnQ7Ci0KLQkvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSBpZiBpdCdzIGFza2VkIGZvci4gKi8KLQotCWlmIChkZXYtPmZsYWdzJklGRl9QUk9NSVNDKXsKLQotCQl3cml0ZXcoIEVUSEVSX0FSQ19DVExfQ09NUEVOX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0JST0FEQUNDX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0dST1VQQUNDX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX1NUQVRJT05BQ0NfTVNLLAotCQkJRVRIRVJfQVJDX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBHZXQgYWxsIG11bHRpY2FzdCBwYWNrZXRzIGlmIHJlcXVpcmVkLCBvciBpZiB0aGVyZSBhcmUgdG9vCi0JICogbWFueSBhZGRyZXNzZXMgdG8gZml0IGluIGhhcmR3YXJlCi0JICovCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpewotCQl3cml0ZXcoIEVUSEVSX0FSQ19DVExfQ09NUEVOX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0dST1VQQUNDX01TSyB8Ci0JCQlFVEhFUl9BUkNfQ1RMX0JST0FEQUNDX01TSywKLQkJCUVUSEVSX0FSQ19DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZGV2LT5tY19jb3VudCA+IChFVEhFUl9BUkNfU0laRSAtIDEpKXsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJUb28gbWFueSBtdWx0aWNhc3QgYWRkcmVzc2VzIGZvciBoYXJkd2FyZSB0byBmaWx0ZXIgLSByZWNlaXZpbmcgYWxsIG11bHRpY2FzdCBwYWNrZXRzXG4iKTsKLQkJd3JpdGV3KCBFVEhFUl9BUkNfQ1RMX0NPTVBFTl9NU0sgfAotCQkJRVRIRVJfQVJDX0NUTF9HUk9VUEFDQ19NU0sgfAotCQkJRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19NU0ssCi0JCQlFVEhFUl9BUkNfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZihkZXYtPm1jX2NvdW50KXsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0X2VudD1kZXYtPm1jX2xpc3Q7Ci0JCXVuc2lnbmVkIGludCB0ZW1wLGk7Ci0JCURFQlVHKHByaW50aygibWNfY291bnQ9JWQgbWNfbGlzdD0lI3hcbiIsZGV2LT4gbWNfY291bnQsIGRldi0+bWNfbGlzdCkpOwotCQlERUJVRyhwcmludGsoIm1jIGFkZHI9JTAyI3glMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJCSAgICAgbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzVdLAotCQkJICAgICBtY19saXN0X2VudC0+ZG1pX2FkZHJbNF0sCi0JCQkgICAgIG1jX2xpc3RfZW50LT5kbWlfYWRkclszXSwKLQkJCSAgICAgbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzJdLAotCQkJICAgICBtY19saXN0X2VudC0+ZG1pX2FkZHJbMV0sCi0JCQkgICAgIG1jX2xpc3RfZW50LT5kbWlfYWRkclswXSk7KQotCi0JCS8qCi0JCSAqIFRoZSBmaXJzdCA2IGJ5dGVzIGFyZSB0aGUgTUFDIGFkZHJlc3MsIHNvCi0JCSAqIGRvbid0IGNoYW5nZSB0aGVtIQotCQkgKi8KLQkJd3JpdGV3KDQsRVRIRVJfQVJDX0FEUihkZXYtPmJhc2VfYWRkcikpOwotCQl0ZW1wPXJlYWRsKEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0JCXRlbXAmPTB4ZmZmZjAwMDA7Ci0KLQkJLyogRGlzYWJsZSB0aGUgY3VycmVudCBtdWx0aWNhc3Qgc3R1ZmYgKi8KLQkJd3JpdGVsKDEsRVRIRVJfQVJDX0VOQShkZXYtPmJhc2VfYWRkcikpOwotCi0JCWZvcig7Oyl7Ci0JCQl0ZW1wfD1tY19saXN0X2VudC0+ZG1pX2FkZHJbMV0gfAotCQkJCW1jX2xpc3RfZW50LT5kbWlfYWRkclswXTw8ODsKLQkJCXdyaXRlbCh0ZW1wLEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkJCWk9cmVhZGwoRVRIRVJfQVJDX0FEUihkZXYtPmJhc2VfYWRkcikpOwotCQkJd3JpdGV3KGkrNCxFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkJCXRlbXA9bWNfbGlzdF9lbnQtPmRtaV9hZGRyWzVdfAotCQkJCW1jX2xpc3RfZW50LT5kbWlfYWRkcls0XTw8OCB8Ci0JCQkJbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzNdPDwxNiB8Ci0JCQkJbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzJdPDwyNDsKLQkJCXdyaXRlbCh0ZW1wLEVUSEVSX0FSQ19EQVRBKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkJCWNvdW50LS07Ci0JCQlpZighbWNfbGlzdF9lbnQtPm5leHQgfHwgIWNvdW50KXsKLQkJCQlicmVhazsKLQkJCX0KLQkJCURFQlVHKHByaW50aygibWNfbGlzdF9uZXh0PSUjeFxuIixtY19saXN0X2VudC0+bmV4dCk7KQotCQkJbWNfbGlzdF9lbnQ9bWNfbGlzdF9lbnQtPm5leHQ7Ci0KLQotCQkJaT1yZWFkbChFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0JCQl3cml0ZWwoaSs0LEVUSEVSX0FSQ19BRFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkJdGVtcD1tY19saXN0X2VudC0+ZG1pX2FkZHJbM118Ci0JCQkJbWNfbGlzdF9lbnQtPmRtaV9hZGRyWzJdPDw4IHwKLQkJCQltY19saXN0X2VudC0+ZG1pX2FkZHJbMV08PDE2IHwKLQkJCQltY19saXN0X2VudC0+ZG1pX2FkZHJbMF08PDI0OwotCQkJd3JpdGVsKHRlbXAsRVRIRVJfQVJDX0RBVEEoZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkJaT1yZWFkbChFVEhFUl9BUkNfQURSKGRldi0+YmFzZV9hZGRyKSk7Ci0JCQl3cml0ZWwoaSs0LEVUSEVSX0FSQ19BRFIoZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkJdGVtcD1tY19saXN0X2VudC0+ZG1pX2FkZHJbNF08PDE2IHwKLQkJCQltY19saXN0X2VudC0+ZG1pX2FkZHJbNV08PDI0OwotCi0JCQl3cml0ZWwodGVtcCxFVEhFUl9BUkNfREFUQShkZXYtPmJhc2VfYWRkcikpOwotCi0JCQljb3VudC0tOwotCQkJaWYoIW1jX2xpc3RfZW50LT5uZXh0IHx8ICFjb3VudCl7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltY19saXN0X2VudD1tY19saXN0X2VudC0+bmV4dDsKLQkJfQotCi0KLQkJaWYoY291bnQpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJNdWx0aWNhc3QgbGlzdCBzaXplIGVycm9yXG4iKTsKLQotCi0JCXdyaXRldyggRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19NU0t8Ci0JCQlFVEhFUl9BUkNfQ1RMX0NPTVBFTl9NU0ssCi0JCQlFVEhFUl9BUkNfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQl9Ci0KLQkvKiBlbmFibGUgdGhlIGFjdGl2ZSBBUkMgZW50aWVzICovCi0Jd3JpdGV3KCgxPDwoY291bnQrMikpLTEsRVRIRVJfQVJDX0VOQShkZXYtPmJhc2VfYWRkcikpOwotfQotCi0KLXN0YXRpYyBpbnQgZXRoZXIwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JaW50IHJlc3VsdCx0bXA7Ci0Jc3RydWN0IG5ldF9wcml2KiBwcml2OwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXJzICovCi0JcmVzdWx0PXJlcXVlc3RfaXJxKGRldi0+aXJxLGV0aGVyMDBfaW50LDAsImV0aGVyMDAiLGRldik7Ci0JaWYocmVzdWx0KQotCQlnb3RvIG9wZW5fZXJyMTsKLQotCXJlc3VsdD1yZXF1ZXN0X2lycSgyLGV0aGVyMDBfcGh5X2ludCwwLCJldGhlcjAwX3BoeSIsZGV2KTsKLQlpZihyZXN1bHQpCi0JCWdvdG8gb3Blbl9lcnIyOwotCi0JZXRoZXIwMF9yZXNldChkZXYpOwotCXJlc3VsdD1ldGhlcjAwX21lbV9pbml0KGRldik7Ci0JaWYocmVzdWx0KQotCQlnb3RvIG9wZW5fZXJyMzsKLQotCi0JZXRoZXIwMF9zZXR1cF9ldGhlcm5ldF9hZGRyZXNzKGRldik7Ci0KLQlldGhlcjAwX3NldF9tdWx0aWNhc3QoZGV2KTsKLQotCXJlc3VsdD1ldGhlcjAwX3dyaXRlX3BoeShkZXYsUEhZX0NPTlRST0wsIFBIWV9DT05UUk9MX0FORUdFTl9NU0sgfCBQSFlfQ09OVFJPTF9SQU5FR19NU0spOwotCWlmKHJlc3VsdCkKLQkJZ290byBvcGVuX2VycjQ7Ci0JcmVzdWx0PWV0aGVyMDBfd3JpdGVfcGh5KGRldixQSFlfSVJRX0NPTlRST0wsIFBIWV9JUlFfQ09OVFJPTF9MU19DSEdfSUVfTVNLIHwKLQkJCQkgUEhZX0lSUV9DT05UUk9MX0FORUdfQ09NUF9JRV9NU0spOwotCWlmKHJlc3VsdCkKLQkJZ290byBvcGVuX2VycjQ7Ci0KLQkvKiBTdGFydCB0aGUgZGV2aWNlIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0Jd3JpdGV3KEVUSEVSX1JYX0NUTF9SWEVOX01TSwotLy8JICAgICAgIHwgRVRIRVJfUlhfQ1RMX1NUUklQQ1JDX01TSwotCSAgICAgICB8IEVUSEVSX1JYX0NUTF9FTkdPT0RfTVNLCi0JICAgICAgIHwgRVRIRVJfUlhfQ1RMX0VOUlhQQVJfTVNLfCBFVEhFUl9SWF9DVExfRU5MT05HRVJSX01TSwotCSAgICAgICB8IEVUSEVSX1JYX0NUTF9FTk9WRVJfTVNLfCBFVEhFUl9SWF9DVExfRU5DUkNFUlJfTVNLLAotCSAgICAgICBFVEhFUl9SWF9DVEwoZGV2LT5iYXNlX2FkZHIpKTsKLQotCXdyaXRldyhFVEhFUl9UWF9DVExfVFhFTl9NU0t8Ci0JICAgICAgIEVUSEVSX1RYX0NUTF9FTkVYREVGRVJfTVNLfAotCSAgICAgICBFVEhFUl9UWF9DVExfRU5MQ0FSUl9NU0t8Ci0JICAgICAgIEVUSEVSX1RYX0NUTF9FTkVYQ09MTF9NU0t8Ci0JICAgICAgIEVUSEVSX1RYX0NUTF9FTkxBVEVDT0xMX01TS3wKLQkgICAgICAgRVRIRVJfVFhfQ1RMX0VOVFhQQVJfTVNLfAotCSAgICAgICBFVEhFUl9UWF9DVExfRU5DT01QX01TSywKLQkgICAgICAgRVRIRVJfVFhfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQl0bXA9cmVhZGwoRVRIRVJfRE1BX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCXdyaXRlbCh0bXAmfkVUSEVSX0RNQV9DVExfSU5UTUFTS19NU0ssRVRIRVJfRE1BX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JcmV0dXJuIDA7Ci0KLSBvcGVuX2VycjQ6Ci0JZXRoZXIwMF9yZXNldChkZXYpOwotIG9wZW5fZXJyMzoKLQlmcmVlX2lycSgyLGRldik7Ci0gb3Blbl9lcnIyOgotCWZyZWVfaXJxKGRldi0+aXJxLGRldik7Ci0gb3Blbl9lcnIxOgotCXJldHVybiByZXN1bHQ7Ci0KLX0KLQotCi1zdGF0aWMgaW50IGV0aGVyMDBfdHgoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlzdHJ1Y3QgbmV0X3ByaXYgKnByaXY9ZGV2LT5wcml2OwotCXN0cnVjdCB0eF9mZGFfZW50ICpmZGFfcHRyOwotCWludCBpOwotCi0KLQkvKgotCSAqCUZpbmQgYW4gZW1wdHkgc2xvdCBpbiB3aGljaCB0byBzdGljayB0aGUgZnJhbWUKLQkgKi8KLQlmZGFfcHRyPShzdHJ1Y3QgdHhfZmRhX2VudCopX19kbWFfdmEocmVhZGwoRVRIRVJfVFhGUk1QVFIoZGV2LT5iYXNlX2FkZHIpKSk7Ci0JaT0wOwotCXdoaWxlKGk8VFhfTlVNX0ZERVNDKXsKLQkJaWYgKGZkYV9wdHItPmZkLkZEU3RhdHx8KGZkYV9wdHItPmZkLkZEQ3RsICYgRkRDVExfQ09XTlNGRF9NU0spKXsKLQkJCWZkYV9wdHIgPShzdHJ1Y3QgdHhfZmRhX2VudCopIF9fZG1hX3ZhKChzdHJ1Y3QgdHhfZmRhX2VudCopZmRhX3B0ci0+ZmQuRkROZXh0KTsKLQkJfQotCQllbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgc2tiIGRhdGEgZnJvbSB0aGUgY2FjaGUqLwotCWNvbnNpc3RlbnRfc3luYyhza2ItPmRhdGEsc2tiLT5sZW4sUENJX0RNQV9UT0RFVklDRSk7Ci0JZmRhX3B0ci0+YmQuQnVmZkRhdGE9KGNoYXIqKV9fcGEoc2tiLT5kYXRhKTsKLQlmZGFfcHRyLT5iZC5CdWZmTGVuZ3RoPSh1bnNpZ25lZCBzaG9ydClza2ItPmxlbjsKLQkvKiBTYXZlIHRoZSBwb2ludGVyIHRvIHRoZSBza2IgZm9yIGZyZWVpbmcgbGF0ZXIgKi8KLQlmZGFfcHRyLT5mZC5GRFN5c3RlbT0odW5zaWduZWQgaW50KXNrYjsKLQlmZGFfcHRyLT5mZC5GRFN0YXQ9MDsKLQkvKiBQYXNzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVycyB0byB0aGUgY29udHJvbGxlciAqLwotCWZkYV9wdHItPmZkLkZEQ3RsPTE7Ci0JZmRhX3B0ci0+ZmQuRkRDdGx8PUZEQ1RMX0NPV05TRkRfTVNLOwotCi0JLyogSWYgdGhlIG5leHQgYnVmZmVyIGluIHRoZSBsaXN0IGlzIGZ1bGwsIHN0b3AgdGhlIHF1ZXVlICovCi0JZmRhX3B0cj0oc3RydWN0IHR4X2ZkYV9lbnQqKV9fZG1hX3ZhKGZkYV9wdHItPmZkLkZETmV4dCk7Ci0JaWYgKChmZGFfcHRyLT5mZC5GRFN0YXQpfHwoZmRhX3B0ci0+ZmQuRkRDdGwgJiBGRENUTF9DT1dOU0ZEX01TSykpewotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXByaXYtPnF1ZXVlX3N0b3BwZWQ9MTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpldGhlcjAwX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc3RydWN0IG5ldF9wcml2ICpwcml2PWRldi0+cHJpdjsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi0KLXN0YXRpYyBpbnQgZXRoZXIwMF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc3RydWN0IG5ldF9wcml2ICpwcml2PWRldi0+cHJpdjsKLQlpbnQgdG1wOwotCi0JLyogU3RvcC9kaXNhYmxlIHRoZSBkZXZpY2UuICovCi0JdG1wPXJlYWR3KEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCXRtcCY9fihFVEhFUl9SWF9DVExfUlhFTl9NU0sgfCBFVEhFUl9SWF9DVExfRU5HT09EX01TSyk7Ci0JdG1wfD1FVEhFUl9SWF9DVExfUlhIQUxUX01TSzsKLQl3cml0ZXcodG1wLEVUSEVSX1JYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCi0JdG1wPXJlYWRsKEVUSEVSX1RYX0NUTChkZXYtPmJhc2VfYWRkcikpOwotCXRtcCY9fkVUSEVSX1RYX0NUTF9UWEVOX01TSzsKLQl0bXB8PUVUSEVSX1RYX0NUTF9UWEhBTFRfTVNLOwotCXdyaXRlbCh0bXAsRVRIRVJfVFhfQ1RMKGRldi0+YmFzZV9hZGRyKSk7Ci0KLQkvKiBGcmVlIHVwIHN5c3RlbSByZXNvdXJjZXMgKi8KLQlmcmVlX2lycShkZXYtPmlycSxkZXYpOwotCWZyZWVfaXJxKDIsZGV2KTsKLQlpb3VubWFwKHByaXYtPmRtYV9kYXRhKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGV0aGVyMDBfZ2V0X2V0aGVybmV0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlzdHJ1Y3QgbXRkX2luZm8gKm15bXRkPU5VTEw7Ci0JaW50IGk7Ci0Jc2l6ZV90IHJldGxlbjsKLQotCS8qCi0JICogRm9yIHRoZSBFcHhhMTAgZGV2IGJvYXJkIChjYW1lbG90KSwgdGhlIGV0aGVybmV0IE1BQwotCSAqIGFkZHJlc3MgaXMgb2YgdGhlIGZvcm0gIDAwOmFhOmFhOjAwOnh4Onh4IHdoZXJlCi0JICogMDA6YWE6YWEgaXMgdGhlIEFsdGVyYSB2ZW5kb3IgSUQgYW5kIHh4Onh4IGlzIHRoZQotCSAqIGxhc3QgMiBieXRlcyBvZiB0aGUgYm9hcmQgc2VyaWFsIG51bWJlciwgYXMgcHJvZ3JhbW1lZAotCSAqIGludG8gdGhlIE9UUCBhcmVhIG9mIHRoZSBmbGFzaCBkZXZpY2Ugb24gRUJJMS4gSWYgdGhpcwotCSAqIGlzbid0IGFuIGV4cGExMCBkZXYgYm9hcmQsIG9yIHRoZXJlJ3Mgbm8gbXRkIHN1cHBvcnQgdG8KLQkgKiByZWFkIHRoZSBzZXJpYWwgbnVtYmVyIGZyb20gZmxhc2ggdGhlbiB3ZSdsbCBmb3JjZSB0aGUKLQkgKiB1c2UgdG8gc2V0IHRoZWlyIG93biBtYWMgYWRkcmVzcyB1c2luZyBpZmNvbmZpZy4KLQkgKi8KLQotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLSNpZmRlZiBDT05GSUdfTVRECi0JLyogZ2V0IHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBmaXJzdCBtdGQgZGV2aWNlKi8KLQlmb3IoaT0wO2k8TUFYX01URF9ERVZJQ0VTO2krKyl7Ci0JCW15bXRkPWdldF9tdGRfZGV2aWNlKE5VTEwsaSk7Ci0JCWlmKCFteW10ZHx8IXN0cmNtcChteW10ZC0+bmFtZSwiRVBYQTEwREIgZmxhc2giKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmKCFteW10ZCB8fCAhbXltdGQtPnJlYWRfdXNlcl9wcm90X3JlZyl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyBmcm9tIGZsYXNoXG4iLGRldi0+bmFtZSk7Ci0JfWVsc2V7Ci0JCW15bXRkLT5yZWFkX3VzZXJfcHJvdF9yZWcobXltdGQsMiwxLCZyZXRsZW4sJmRldi0+ZGV2X2FkZHJbNV0pOwotCQlteW10ZC0+cmVhZF91c2VyX3Byb3RfcmVnKG15bXRkLDMsMSwmcmV0bGVuLCZkZXYtPmRldl9hZGRyWzRdKTsKLQkJZGV2LT5kZXZfYWRkclszXT0wOwotCQlkZXYtPmRldl9hZGRyWzJdPXZlbmRvcl9pZFsxXTsKLQkJZGV2LT5kZXZfYWRkclsxXT12ZW5kb3JfaWRbMF07Ci0JCWRldi0+ZGV2X2FkZHJbMF09MDsKLQl9Ci0jZWxzZQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNVEQgc3VwcG9ydCByZXF1aXJlZCB0byByZWFkIE1BQyBhZGRyZXNzIGZyb20gRVBYQTEwIGRldiBib2FyZFxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotI2VuZGlmCi0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCi0JCXByaW50aygiJXM6IEludmFsaWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MuICBQbGVhc2Ugc2V0IHVzaW5nICIKLQkJCSJpZmNvbmZpZ1xuIiwgZGV2LT5uYW1lKTsKLQotfQotCi0vKgotICogS2VlcCBhIG1hcHBpbmcgb2YgZGV2X2luZm8gYWRkcmVzc2VzIC0+IHBvcnQgbGluZXMgdG8gdXNlIHdoZW4KLSAqIHJlbW92aW5nIHBvcnRzIGRldj09TlVMTCBpbmRpY2F0ZXMgdW51c2VkIGVudHJ5Ci0gKi8KLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UqIGRldl9saXN0W0VUSF9OUl07Ci0KLXN0YXRpYyBpbnQgZXRoZXIwMF9hZGRfZGV2aWNlKHN0cnVjdCBwbGRoc19kZXZfaW5mbyogZGV2X2luZm8sdm9pZCogZGV2X3BzX2RhdGEpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbmV0X3ByaXYgKnByaXY7Ci0Jdm9pZCAqbWFwX2FkZHI7Ci0JaW50IHJlc3VsdDsKLQlpbnQgaTsKLQotCWk9MDsKLQl3aGlsZShkZXZfbGlzdFtpXSAmJiBpIDwgRVRIX05SKQotCQlpKys7Ci0KLQlpZihpPT1FVEhfTlIpewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJldGhlcjAwOiBNYXhpbXVtIG51bWJlciBvZiBwb3J0cyByZWFjaGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXZfaW5mby0+YmFzZV9hZGRyLCBNQUNfUkVHX1NJWkUsICJldGhlcjAwIikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldF9wcml2KSk7Ci0JaWYoIWRldikgewotCQlyZXN1bHQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9yZWxlYXNlOwotCX0KLQlwcml2ID0gZGV2LT5wcml2OwotCi0JcHJpdi0+dHFfbWVtdXBkYXRlLnJvdXRpbmU9ZXRoZXIwMF9tZW1fdXBkYXRlOwotCXByaXYtPnRxX21lbXVwZGF0ZS5kYXRhPSh2b2lkKikgZGV2OwotCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOwotCi0JbWFwX2FkZHI9aW9yZW1hcF9ub2NhY2hlKGRldl9pbmZvLT5iYXNlX2FkZHIsU1pfNEspOwotCWlmKCFtYXBfYWRkcil7Ci0JCXJlc3VsdCA9IC1FTk9NRU07Ci0JCW91dF9rZnJlZTsKLQl9Ci0KLQlkZXYtPm9wZW49ZXRoZXIwMF9vcGVuOwotCWRldi0+c3RvcD1ldGhlcjAwX3N0b3A7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q9ZXRoZXIwMF9zZXRfbXVsdGljYXN0OwotCWRldi0+aGFyZF9zdGFydF94bWl0PWV0aGVyMDBfdHg7Ci0JZGV2LT5nZXRfc3RhdHM9ZXRoZXIwMF9zdGF0czsKLQotCWV0aGVyMDBfZ2V0X2V0aGVybmV0X2FkZHJlc3MoZGV2KTsKLQotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLQotCWRldi0+YmFzZV9hZGRyPSh1bnNpZ25lZCBpbnQpbWFwX2FkZHI7Ci0JZGV2LT5pcnE9ZGV2X2luZm8tPmlycTsKLQlkZXYtPmZlYXR1cmVzPU5FVElGX0ZfRFlOQUxMT0MgfCBORVRJRl9GX0hXX0NTVU07Ci0KLQlyZXN1bHQ9cmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYocmVzdWx0KXsKLQkJcHJpbnRrKCJFdGhlcjAwOiBFcnJvciAlaSByZWdpc3RlcmluZyBkcml2ZXJcbiIscmVzdWx0KTsKLQkJZ290byBvdXRfdW5tYXA7Ci0JfQotCXByaW50aygicmVnaXN0ZXJlZCBldGhlcjAwIGRldmljZSBhdCAlI3hcbiIsZGV2X2luZm8tPmJhc2VfYWRkcik7Ci0KLQlkZXZfbGlzdFtpXT1kZXY7Ci0KLQlyZXR1cm4gcmVzdWx0OwotCi0gb3V0X3VubWFwOgotCWlvdW5tYXAobWFwX2FkZHIpOwotIG91dF9rZnJlZToKLQlmcmVlX25ldGRldihkZXYpOwotIG91dF9yZWxlYXNlOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXZfaW5mby0+YmFzZV9hZGRyLCBNQUNfUkVHX1NJWkUpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIGludCBldGhlcjAwX3JlbW92ZV9kZXZpY2VzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IoaT0wO2k8RVRIX05SO2krKyl7Ci0JCWlmKGRldl9saXN0W2ldKXsKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2X2xpc3RbaV0pOwotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2X2xpc3RbaV0pOwotCQkJaW91bm1hcCgodm9pZCopZGV2X2xpc3RbaV0tPmJhc2VfYWRkcik7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2X2xpc3RbaV0tPmJhc2VfYWRkciwgTUFDX1JFR19TSVpFKTsKLQkJCWZyZWVfbmV0ZGV2KGRldl9saXN0W2ldKTsKLQkJCWRldl9saXN0W2ldPTA7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxkX2hvdHN3YXBfb3BzIGV0aGVyMDBfcGxkaHNfb3BzPXsKLQkubmFtZSA9IEVUSEVSMDBfTkFNRSwKLQkuYWRkX2RldmljZSA9IGV0aGVyMDBfYWRkX2RldmljZSwKLQkucmVtb3ZlX2RldmljZXMgPSBldGhlcjAwX3JlbW92ZV9kZXZpY2VzLAotfTsKLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXRoZXIwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludCByZXN1bHQ7Ci0JcmVzdWx0PWV0aGVyMDBfcmVtb3ZlX2RldmljZXMoKTsKLQlpZihyZXN1bHQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImV0aGVyMDA6IGZhaWxlZCB0byByZW1vdmUgYWxsIGRldmljZXNcbiIpOwotCi0JcGxkaHNfdW5yZWdpc3Rlcl9kcml2ZXIoRVRIRVIwMF9OQU1FKTsKLX0KLW1vZHVsZV9leGl0KGV0aGVyMDBfY2xlYW51cF9tb2R1bGUpOwotCi0KLXN0YXRpYyBpbnQgX19pbml0IGV0aGVyMDBfbW9kX2luaXQodm9pZCkKLXsKLQlwcmludGsoIm1vZCBpbml0XG4iKTsKLQlyZXR1cm4gcGxkaHNfcmVnaXN0ZXJfZHJpdmVyKCZldGhlcjAwX3BsZGhzX29wcyk7Ci0KLX0KLQotbW9kdWxlX2luaXQoZXRoZXIwMF9tb2RfaW5pdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYwppbmRleCAxY2M1M2FiLi5mMWQ1YjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCkBAIC02OSw3ICs2OSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSAiZXRoZXIzIGV0aGVybmV0IGRyaXZlciAoYykgMTk5NS0yMDAwIFIuTS5LaW5nIHYxLjE3XG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKaW5kZXggOTQyYTI4MS4uNmE5M2I2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlICIuLi84MzkwLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IDQxYjNkODMuLmY0NDI0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtNTE1LDYgKzUxNSw3IEBACiAJCQljb3VudCA9IGtpc3NfZXNjKHAsICh1bnNpZ25lZCBjaGFyICopYXgtPnhidWZmLCBsZW4pOwogCQl9CiAgIAl9CisJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAogCXNldF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJmF4LT50dHktPmZsYWdzKTsKIAlhY3R1YWwgPSBheC0+dHR5LT5kcml2ZXItPndyaXRlKGF4LT50dHksIGF4LT54YnVmZiwgY291bnQpOwpAQCAtNTI0LDcgKzUyNSw2IEBACiAJYXgtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWF4LT54bGVmdCA9IGNvdW50IC0gYWN0dWFsOwogCWF4LT54aGVhZCA9IGF4LT54YnVmZiArIGFjdHVhbDsKLQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogfQogCiAvKiBFbmNhcHN1bGF0ZSBhbiBBWC4yNSBwYWNrZXQgYW5kIGtpY2sgaXQgaW50byBhIFRUWSBxdWV1ZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IGU5MmMxN2YuLjU1YzdlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAgKiBDb252ZXJ0IGFuIGFkZHJlc3MgaW4gYSBrZXJuZWwgYnVmZmVyIHRvIGEgYnVzL3BoeXMvZG1hIGFkZHJlc3MuCiAgKiBUaGlzIHdvcmsgKm9ubHkqIGZvciBtZW1vcnkgZnJhZ21lbnRzIHBhcnQgb2YgbHAtPnBhZ2VfdmFkZHIsCiAgKiBiZWNhdXNlIGl0IHdhcyBwcm9wZXJseSBETUEgYWxsb2NhdGVkIHZpYSBwY2lfYWxsb2NfY29uc2lzdGVudCgpLAotICogc28gd2UganVzdCBuZWVkIHRvICJyZXRyZWl2ZSIgdGhlIG9yaWdpbmFsIG1hcHBpbmcgdG8gYnVzL3BoeXMvZG1hCisgKiBzbyB3ZSBqdXN0IG5lZWQgdG8gInJldHJpZXZlIiB0aGUgb3JpZ2luYWwgbWFwcGluZyB0byBidXMvcGh5cy9kbWEKICAqIGFkZHJlc3MgLSBKZWFuIElJICovCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgdmlydF90b193aGF0ZXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgKiBwdHIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjk5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtMCwwICsxLDI5NCBAQAorLyogZHJpdmVycy9uZXQvaWZiLmM6IAorCisJVGhlIHB1cnBvc2Ugb2YgdGhpcyBkcml2ZXIgaXMgdG8gcHJvdmlkZSBhIGRldmljZSB0aGF0IGFsbG93cworCWZvciBzaGFyaW5nIG9mIHJlc291cmNlczoKKworCTEpIHFkaXNjcy9wb2xpY2llcyB0aGF0IGFyZSBwZXIgZGV2aWNlIGFzIG9wcG9zZWQgdG8gc3lzdGVtIHdpZGUuCisJaWZiIGFsbG93cyBmb3IgYSBkZXZpY2Ugd2hpY2ggY2FuIGJlIHJlZGlyZWN0ZWQgdG8gdGh1cyBwcm92aWRpbmcKKwlhbiBpbXByZXNzaW9uIG9mIHNoYXJpbmcuCisKKwkyKSBBbGxvd3MgZm9yIHF1ZXVlaW5nIGluY29taW5nIHRyYWZmaWMgZm9yIHNoYXBpbmcgaW5zdGVhZCBvZgorCWRyb3BwaW5nLiAKKwkKKwlUaGUgb3JpZ2luYWwgY29uY2VwdCBpcyBiYXNlZCBvbiB3aGF0IGlzIGtub3duIGFzIHRoZSBJTVEKKwlkcml2ZXIgaW5pdGlhbGx5IHdyaXR0ZW4gYnkgTWFydGluIERldmVyYSwgbGF0ZXIgcmV3cml0dGVuCisJYnkgUGF0cmljayBNY0hhcmR5IGFuZCB0aGVuIG1haW50YWluZWQgYnkgQW5kcmUgQ29ycmVhLgorCisJWW91IG5lZWQgdGhlIHRjIGFjdGlvbiAgbWlycm9yIG9yIHJlZGlyZWN0IHRvIGZlZWQgdGhpcyBkZXZpY2UKKyAgICAgICAJcGFja2V0cy4KKworCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKwltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgIAlBdXRob3JzOglKYW1hbCBIYWRpIFNhbGltICgyMDA1KQorIAorKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+IAorCisjZGVmaW5lIFRYX1RJTUVPVVQgICgyKkhaKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgVFhfUV9MSU1JVCAgICAzMgorc3RydWN0IGlmYl9wcml2YXRlIHsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgICBpZmJfdGFza2xldDsKKwlpbnQgICAgIHRhc2tsZXRfcGVuZGluZzsKKwkvKiBtb3N0bHkgZGVidWcgc3RhdHMgbGVhdmUgaW4gZm9yIG5vdyAqLworCXVuc2lnbmVkIGxvbmcgICBzdF90YXNrX2VudGVyOyAvKiB0YXNrbGV0IGVudGVyZWQgKi8KKwl1bnNpZ25lZCBsb25nICAgc3RfdHhxX3JlZmxfdHJ5OyAvKiB0cmFuc21pdCBxdWV1ZSByZWZpbGwgYXR0ZW1wdCAqLworCXVuc2lnbmVkIGxvbmcgICBzdF9yeHFfZW50ZXI7IC8qIHJlY2VpdmUgcXVldWUgZW50ZXJlZCAqLworCXVuc2lnbmVkIGxvbmcgICBzdF9yeDJ0eF90cmFuOyAvKiByZWNlaXZlIHRvIHRyYXNtaXQgdHJhbnNmZXJzICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3J4cV9ub3RlbnRlcjsgLypyZWNlaXZlUSBub3QgZW50ZXJlZCwgcmVzY2hlZCAqLworCXVuc2lnbmVkIGxvbmcgICBzdF9yeF9mcm1fZWdyOyAvKiByZWNlaXZlZCBmcm9tIGVncmVzcyBwYXRoICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3J4X2ZybV9pbmc7IC8qIHJlY2VpdmVkIGZyb20gaW5ncmVzcyBwYXRoICovCisJdW5zaWduZWQgbG9uZyAgIHN0X3J4cV9jaGVjazsKKwl1bnNpZ25lZCBsb25nICAgc3RfcnhxX3JzY2g7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgcnE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgdHE7Cit9OworCitzdGF0aWMgaW50IG51bWlmYnMgPSAxOworCitzdGF0aWMgdm9pZCByaV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KTsKK3N0YXRpYyBpbnQgaWZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmYl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGlmYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpZmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK3N0YXRpYyB2b2lkIHJpX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXYpIAoreworCisJc3RydWN0IG5ldF9kZXZpY2UgKl9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXY7CisJc3RydWN0IGlmYl9wcml2YXRlICpkcCA9IG5ldGRldl9wcml2KF9kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkcC0+c3RhdHM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWRwLT5zdF90YXNrX2VudGVyKys7CisJaWYgKChza2IgPSBza2JfcGVlaygmZHAtPnRxKSkgPT0gTlVMTCkgeworCQlkcC0+c3RfdHhxX3JlZmxfdHJ5Kys7CisJCWlmIChzcGluX3RyeWxvY2soJl9kZXYtPnhtaXRfbG9jaykpIHsKKwkJCWRwLT5zdF9yeHFfZW50ZXIrKzsKKwkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRwLT5ycSkpICE9IE5VTEwpIHsKKwkJCQlza2JfcXVldWVfdGFpbCgmZHAtPnRxLCBza2IpOworCQkJCWRwLT5zdF9yeDJ0eF90cmFuKys7CisJCQl9CisJCQlzcGluX3VubG9jaygmX2Rldi0+eG1pdF9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJlc2NoZWR1bGUgKi8KKwkJCWRwLT5zdF9yeHFfbm90ZW50ZXIrKzsKKwkJCWdvdG8gcmVzY2hlZDsKKwkJfQorCX0KKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRwLT50cSkpICE9IE5VTEwpIHsKKwkJdTMyIGZyb20gPSBHX1RDX0ZST00oc2tiLT50Y192ZXJkKTsKKworCQlza2ItPnRjX3ZlcmQgPSAwOworCQlza2ItPnRjX3ZlcmQgPSBTRVRfVENfTkNMUyhza2ItPnRjX3ZlcmQpOworCQlzdGF0cy0+dHhfcGFja2V0cysrOworCQlzdGF0cy0+dHhfYnl0ZXMgKz1za2ItPmxlbjsKKwkJaWYgKGZyb20gJiBBVF9FR1JFU1MpIHsKKwkJCWRwLT5zdF9yeF9mcm1fZWdyKys7CisJCQlkZXZfcXVldWVfeG1pdChza2IpOworCQl9IGVsc2UgaWYgKGZyb20gJiBBVF9JTkdSRVNTKSB7CisKKwkJCWRwLT5zdF9yeF9mcm1faW5nKys7CisJCQluZXRpZl9yeChza2IpOworCQl9IGVsc2UgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJfQorCX0KKworCWlmIChzcGluX3RyeWxvY2soJl9kZXYtPnhtaXRfbG9jaykpIHsKKwkJZHAtPnN0X3J4cV9jaGVjaysrOworCQlpZiAoKHNrYiA9IHNrYl9wZWVrKCZkcC0+cnEpKSA9PSBOVUxMKSB7CisJCQlkcC0+dGFza2xldF9wZW5kaW5nID0gMDsKKwkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKF9kZXYpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoX2Rldik7CisJCX0gZWxzZSB7CisJCQlkcC0+c3RfcnhxX3JzY2grKzsKKwkJCXNwaW5fdW5sb2NrKCZfZGV2LT54bWl0X2xvY2spOworCQkJZ290byByZXNjaGVkOworCQl9CisJCXNwaW5fdW5sb2NrKCZfZGV2LT54bWl0X2xvY2spOworCX0gZWxzZSB7CityZXNjaGVkOgorCQlkcC0+dGFza2xldF9wZW5kaW5nID0gMTsKKwkJdGFza2xldF9zY2hlZHVsZSgmZHAtPmlmYl90YXNrbGV0KTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgX19pbml0IGlmYl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCisJZGV2LT5nZXRfc3RhdHMgPSBpZmJfZ2V0X3N0YXRzOworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWZiX3htaXQ7CisJZGV2LT5vcGVuID0gJmlmYl9vcGVuOworCWRldi0+c3RvcCA9ICZpZmJfY2xvc2U7CisKKwkvKiBGaWxsIGluIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldC1nZW5lcmljIHZhbHVlcy4gKi8KKwlldGhlcl9zZXR1cChkZXYpOworCWRldi0+dHhfcXVldWVfbGVuID0gVFhfUV9MSU1JVDsKKwlkZXYtPmNoYW5nZV9tdHUgPSBOVUxMOworCWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOworCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CisJU0VUX01PRFVMRV9PV05FUihkZXYpOworCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOworfQorCitzdGF0aWMgaW50IGlmYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlmYl9wcml2YXRlICpkcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRwLT5zdGF0czsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZnJvbSA9IEdfVENfRlJPTShza2ItPnRjX3ZlcmQpOworCisJc3RhdHMtPnR4X3BhY2tldHMrKzsKKwlzdGF0cy0+dHhfYnl0ZXMrPXNrYi0+bGVuOworCisJaWYgKCFmcm9tIHx8ICFza2ItPmlucHV0X2RldikgeworZHJvcHBlZDoKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qIAorCQkgKiBub3RlIHdlIGNvdWxkIGJlIGdvaW5nCisJCSAqIGluZ3Jlc3MgLT4gZWdyZXNzIG9yCisJCSAqIGVncmVzcyAtPiBpbmdyZXNzCisJCSovCisJCXNrYi0+ZGV2ID0gc2tiLT5pbnB1dF9kZXY7CisJCXNrYi0+aW5wdXRfZGV2ID0gZGV2OworCQlpZiAoZnJvbSAmIEFUX0lOR1JFU1MpIHsKKwkJCXNrYl9wdWxsKHNrYiwgc2tiLT5kZXYtPmhhcmRfaGVhZGVyX2xlbik7CisJCX0gZWxzZSB7CisJCQlpZiAoIShmcm9tICYgQVRfRUdSRVNTKSkgeworCQkJCWdvdG8gZHJvcHBlZDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChza2JfcXVldWVfbGVuKCZkcC0+cnEpID49IGRldi0+dHhfcXVldWVfbGVuKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlza2JfcXVldWVfdGFpbCgmZHAtPnJxLCBza2IpOworCWlmICghZHAtPnRhc2tsZXRfcGVuZGluZykgeworCQlkcC0+dGFza2xldF9wZW5kaW5nID0gMTsKKwkJdGFza2xldF9zY2hlZHVsZSgmZHAtPmlmYl90YXNrbGV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmYl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWZiX3ByaXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZHAtPnN0YXRzOworCisJcHJfZGVidWcoInRhc2tsZXRzIHN0YXRzICVsZDolbGQ6JWxkOiVsZDolbGQ6JWxkOiVsZDolbGQ6JWxkIFxuIiwKKwkJZHAtPnN0X3Rhc2tfZW50ZXIsIGRwLT5zdF90eHFfcmVmbF90cnksIGRwLT5zdF9yeHFfZW50ZXIsIAorCQlkcC0+c3RfcngydHhfdHJhbiBkcC0+c3RfcnhxX25vdGVudGVyLCBkcC0+c3RfcnhfZnJtX2VnciwKKwkJZHAtPnN0X3J4X2ZybV9pbmcsIGRwLT5zdF9yeHFfY2hlY2ssIGRwLT5zdF9yeHFfcnNjaCApOworCisJcmV0dXJuIHN0YXRzOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKippZmJzOworCisvKiBOdW1iZXIgb2YgaWZiIGRldmljZXMgdG8gYmUgc2V0IHVwIGJ5IHRoaXMgbW9kdWxlLiAqLworbW9kdWxlX3BhcmFtKG51bWlmYnMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bWlmYnMsICJOdW1iZXIgb2YgaWZiIGRldmljZXMiKTsKKworc3RhdGljIGludCBpZmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWZiX3ByaXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXRhc2tsZXRfa2lsbCgmZHAtPmlmYl90YXNrbGV0KTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJc2tiX3F1ZXVlX3B1cmdlKCZkcC0+cnEpOworCXNrYl9xdWV1ZV9wdXJnZSgmZHAtPnRxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZmJfcHJpdmF0ZSAqZHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJdGFza2xldF9pbml0KCZkcC0+aWZiX3Rhc2tsZXQsIHJpX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZHAtPnJxKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZkcC0+dHEpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgaWZiX2luaXRfb25lKGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2lmYjsKKwlpbnQgZXJyOworCisJZGV2X2lmYiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGlmYl9wcml2YXRlKSwKKwkJCQkgImlmYiVkIiwgaWZiX3NldHVwKTsKKworCWlmICghZGV2X2lmYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihkZXZfaWZiKSkpIHsKKwkJZnJlZV9uZXRkZXYoZGV2X2lmYik7CisJCWRldl9pZmIgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmYnNbaW5kZXhdID0gZGV2X2lmYjsgCisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaWZiX2ZyZWVfb25lKGludCBpbmRleCkKK3sKKwl1bnJlZ2lzdGVyX25ldGRldihpZmJzW2luZGV4XSk7CisJZnJlZV9uZXRkZXYoaWZic1tpbmRleF0pOworfSAKKworc3RhdGljIGludCBfX2luaXQgaWZiX2luaXRfbW9kdWxlKHZvaWQpCit7IAorCWludCBpLCBlcnIgPSAwOworCWlmYnMgPSBrbWFsbG9jKG51bWlmYnMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7IAorCWlmICghaWZicykKKwkJcmV0dXJuIC1FTk9NRU07IAorCWZvciAoaSA9IDA7IGkgPCBudW1pZmJzICYmICFlcnI7IGkrKykKKwkJZXJyID0gaWZiX2luaXRfb25lKGkpOyAKKwlpZiAoZXJyKSB7IAorCQl3aGlsZSAoLS1pID49IDApCisJCQlpZmJfZnJlZV9vbmUoaSk7CisJfQorCisJcmV0dXJuIGVycjsKK30gCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpZmJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1pZmJzOyBpKyspIAorCQlpZmJfZnJlZV9vbmUoaSk7IAorCWtmcmVlKGlmYnMpOwkKK30KKworbW9kdWxlX2luaXQoaWZiX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGlmYl9jbGVhbnVwX21vZHVsZSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW1hbCBIYWRpIFNhbGltIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwppbmRleCAwNDljMzRiMy4uNTkzZDhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0xNTk4LDcgKzE1OTgsNyBAQAogICAgIHN3aXRjaChjbWQpIHsKICAgICAgIGNhc2UgU0lPQ0dNSUlQSFk6CQkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFBIWSBpbiB1c2UuICovCiAJZGF0YVswXSA9IDA7CQkvKiB3ZSBoYXZlIG9ubHkgdGhpcyBhZGRyZXNzICovCi0JLyogZmFsbCB0cm91Z2ggKi8KKwkvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgIGNhc2UgU0lPQ0dNSUlSRUc6CQkvKiBSZWFkIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyLiAqLwogCWRhdGFbM10gPSBtaWlfcmQoaW9hZGRyLCBkYXRhWzBdICYgMHgxZiwgZGF0YVsxXSAmIDB4MWYpOwogCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2RpbS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2RpbS5jCmluZGV4IDBmZGRmNjEuLjA3YzFiNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tkaW0uYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZGltLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgKiogVGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzZWMgaXMgdGhlIHNhbWUgYXMgZXhwZWN0ZWQuCiAgICAgICAgICAgICAgICAgKiogRXZhbHVsYXRlIHRoZSBkZXNjcmlwdG9yLXJhdGlvLiBJZiBpdCBoYXMgY2hhbmdlZCwgYSByZXNpemUgCi0gICAgICAgICAgICAgICAgKiogaW4gdGhlIG1vZGVyYXRpb24gdGltZXIgbWlnaHQgYmUgdXNlZnVsbAorICAgICAgICAgICAgICAgICoqIGluIHRoZSBtb2RlcmF0aW9uIHRpbWVyIG1pZ2h0IGJlIHVzZWZ1bAogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKE1fRElNSU5GTy5BdXRvU2l6aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlc2l6ZURpbVRpbWVyRHVyYXRpb24ocEFDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKaW5kZXggMTk3ZWRkNy4uYTVmMmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKQEAgLTI4NTEsNyArMjg1MSw3IEBACiAgKiBEZXNjcmlwdGlvbjoKICAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIGFuIGlvY3RsIGlzIGlzc3VlZCBvbiB0aGUgZGV2aWNlLgogICoJVGhlcmUgYXJlIHRocmVlIHN1YmZ1bmN0aW9uIGZvciByZWFkaW5nLCB3cml0aW5nIGFuZCB0ZXN0LXdyaXRpbmcKLSAqCXRoZSBwcml2YXRlIE1JQiBkYXRhIHN0cnVjdHVyZSAodXNlZnVsbCBmb3IgU3lzS29ubmVjdC1pbnRlcm5hbCB0b29scykuCisgKgl0aGUgcHJpdmF0ZSBNSUIgZGF0YSBzdHJ1Y3R1cmUgKHVzZWZ1bCBmb3IgU3lzS29ubmVjdC1pbnRlcm5hbCB0b29scykuCiAgKgogICogUmV0dXJuczoKICAqCTAsIGlmIGV2ZXJ5dGhpbmcgaXMgb2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXBubWkuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXBubWkuYwppbmRleCA1OGUxYTViZS4uYTM4NjE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlcG5taS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXBubWkuYwpAQCAtNjExLDcgKzYxMSw3IEBACiAgKiBEZXNjcmlwdGlvbjoKICAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHN0dWZmLiBUaGUgcHJlc2V0IGRvZXMKICAqCXRoZSBzYW1lIGFzIGEgc2V0LCBidXQgcmV0dXJucyBqdXN0IGJlZm9yZSBmaW5hbGx5IHNldHRpbmcgdGhlCi0gKgluZXcgdmFsdWUuIFRoaXMgaXMgdXNlZnVsbCB0byBjaGVjayBpZiBhIHNldCBtaWdodCBiZSBzdWNjZXNzZnVsbC4KKyAqCW5ldyB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgdG8gY2hlY2sgaWYgYSBzZXQgbWlnaHQgYmUgc3VjY2Vzc2Z1bGwuCiAgKglJZiB0aGUgaW5zdGFuY2UgLTEgaXMgcGFzc2VkLCBhbiBhcnJheSBvZiB2YWx1ZXMgaXMgc3VwcG9zZWQgYW5kCiAgKglhbGwgaW5zdGFuY2VzIG9mIHRoZSBPSUQgd2lsbCBiZSBzZXQuCiAgKgpAQCAtNjU0LDcgKzY1NCw3IEBACiAgKiBEZXNjcmlwdGlvbjoKICAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHN0dWZmLiBUaGUgcHJlc2V0IGRvZXMKICAqCXRoZSBzYW1lIGFzIGEgc2V0LCBidXQgcmV0dXJucyBqdXN0IGJlZm9yZSBmaW5hbGx5IHNldHRpbmcgdGhlCi0gKgluZXcgdmFsdWUuIFRoaXMgaXMgdXNlZnVsbCB0byBjaGVjayBpZiBhIHNldCBtaWdodCBiZSBzdWNjZXNzZnVsbC4KKyAqCW5ldyB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgdG8gY2hlY2sgaWYgYSBzZXQgbWlnaHQgYmUgc3VjY2Vzc2Z1bGwuCiAgKglJZiB0aGUgaW5zdGFuY2UgLTEgaXMgcGFzc2VkLCBhbiBhcnJheSBvZiB2YWx1ZXMgaXMgc3VwcG9zZWQgYW5kCiAgKglhbGwgaW5zdGFuY2VzIG9mIHRoZSBPSUQgd2lsbCBiZSBzZXQuCiAgKgpAQCAtODcwLDcgKzg3MCw3IEBACiAgKiBEZXNjcmlwdGlvbjoKICAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHNldCBzdHVmZi4gVGhlIHByZXNldCBkb2VzCiAgKgl0aGUgc2FtZSBhcyBhIHNldCwgYnV0IHJldHVybnMganVzdCBiZWZvcmUgZmluYWxseSBzZXR0aW5nIHRoZQotICoJbmV3IHZhbHVlLiBUaGlzIGlzIHVzZWZ1bGwgdG8gY2hlY2sgaWYgYSBzZXQgbWlnaHQgYmUgc3VjY2Vzc2Z1bGwuCisgKgluZXcgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIHRvIGNoZWNrIGlmIGEgc2V0IG1pZ2h0IGJlIHN1Y2Nlc3NmdWxsLgogICoJVGhlIHN1Yi1mdW5jdGlvbiBydW5zIHRocm91Z2ggdGhlIElkVGFibGUsIGNoZWNrcyB3aGljaCBPSURzIGFyZSBhYmxlCiAgKgl0byBzZXQsIGFuZCBjYWxscyB0aGUgaGFuZGxlciBmdW5jdGlvbiBvZiB0aGUgT0lEIHRvIHBlcmZvcm0gdGhlCiAgKglwcmVzZXQuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBzdG9yZWQgaW4KQEAgLTY0NzMsNyArNjQ3Myw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKglUaGUgQ09NTU9OIG1vZHVsZSBvbmx5IHRlbGxzIHVzIGlmIHRoZSBtb2RlIGlzIGhhbGYgb3IgZnVsbCBkdXBsZXguCi0gKglCdXQgaW4gdGhlIGRlY2FkZSBvZiBhdXRvIHNlbnNpbmcgaXQgaXMgdXNlZnVsbCBmb3IgdGhlIHVzZXIgdG8KKyAqCUJ1dCBpbiB0aGUgZGVjYWRlIG9mIGF1dG8gc2Vuc2luZyBpdCBpcyB1c2VmdWwgZm9yIHRoZSB1c2VyIHRvCiAgKglrbm93IGlmIHRoZSBtb2RlIHdhcyBuZWdvdGlhdGVkIG9yIGZvcmNlZC4gVGhlcmVmb3JlIHdlIGhhdmUgYQogICoJbG9vayB0byB0aGUgbW9kZSwgd2hpY2ggd2FzIGxhc3QgdXNlZCBieSB0aGUgbmVnb3RpYXRpb24gcHJvY2Vzcy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9sZWQuYyBiL2RyaXZlcnMvcGFyaXNjL2xlZC5jCmluZGV4IDk1YmQwN2IuLjMxNWJlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2xlZC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKICAgICoqIAogICAgKiogbGVkX2dldF9uZXRfYWN0aXZpdHkoKQogICAgKiogCi0gICAqKiBjYWxjdWxhdGUgaWYgdGhlcmUgd2FzIFRYLSBvciBSWC10cm91Z2hwdXQgb24gdGhlIG5ldHdvcmsgaW50ZXJmYWNlcworICAgKiogY2FsY3VsYXRlIGlmIHRoZXJlIHdhcyBUWC0gb3IgUlgtdGhyb3VnaHB1dCBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2VzCiAgICAqKiAoYW5hbG9nIHRvIGRldl9nZXRfaW5mbygpIGZyb20gbmV0L2NvcmUvZGV2LmMpCiAgICAqKiAgIAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9jLmMgYi9kcml2ZXJzL3BjaS9wcm9jLmMKaW5kZXggZDIxODk0Yy4uOTJhODg1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYy5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2MuYwpAQCAtMjUsNyArMjUsNyBAQAogCWxvZmZfdCBuZXcgPSAtMTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlzd2l0Y2ggKHdoZW5jZSkgewogCWNhc2UgMDoKIAkJbmV3ID0gb2ZmOwpAQCAtNDEsNyArNDEsNyBAQAogCQluZXcgPSAtRUlOVkFMOwogCWVsc2UKIAkJZmlsZS0+Zl9wb3MgPSBuZXc7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIG5ldzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKaW5kZXggMDllZDA1Ny4uZGRhNWE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAKICNpbmNsdWRlICIuLi9zY3NpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMKaW5kZXggODA0MTI1ZS4uYTI4OTQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYwpAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KIAogI2luY2x1ZGUgIi4uL3Njc2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYwppbmRleCA4MWUyNjZiLi5lNmM5NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSAiLi4vc2NzaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCmluZGV4IDNhN2E0NmIuLjU4M2QyZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICNpbmNsdWRlICIuLi9zY3NpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKaW5kZXggNGQxZThmNS4uM2ZmZWM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKaW5kZXggMzMzM2Q3Yi4uMzExM2JkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogI2luY2x1ZGUgIi4uL3Njc2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggMjIxZTk2ZS4uNzhhYWQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTI0OTMsNyArMjQ5Myw3IEBACiAJfQogCWlmIChyZXNwKSB7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKLQkJCW1lbXNldChyZXNwLCAwLCByZXNTeik7CisJCQltZW1zZXQocGFnZV9hZGRyZXNzKHJlc3ApLCAwLCByZXNTeik7CiAJCWlmIChyZXRTenApCiAJCQkqcmV0U3pwID0gcmVzU3o7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDE4OTFjZjUuLmU4NDU0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTU0LDYgKzU0LDggQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzaGFyZV9pcnFzID0gU0VSSUFMODI1MF9TSEFSRV9JUlFTOwogCitzdGF0aWMgdW5zaWduZWQgaW50IG5yX3VhcnRzID0gQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM7CisKIC8qCiAgKiBEZWJ1Z2dpbmcuCiAgKi8KQEAgLTIxMTgsNyArMjEyMCw3IEBACiAJCXJldHVybjsKIAlmaXJzdCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX3VhcnRzOyBpKyspIHsKIAkJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCiAJCXVwLT5wb3J0LmxpbmUgPSBpOwpAQCAtMjEzNyw3ICsyMTM5LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwLCB1cCA9IHNlcmlhbDgyNTBfcG9ydHM7Ci0JICAgICBpIDwgQVJSQVlfU0laRShvbGRfc2VyaWFsX3BvcnQpICYmIGkgPCBVQVJUX05SOworCSAgICAgaSA8IEFSUkFZX1NJWkUob2xkX3NlcmlhbF9wb3J0KSAmJiBpIDwgbnJfdWFydHM7CiAJICAgICBpKyssIHVwKyspIHsKIAkJdXAtPnBvcnQuaW9iYXNlICAgPSBvbGRfc2VyaWFsX3BvcnRbaV0ucG9ydDsKIAkJdXAtPnBvcnQuaXJxICAgICAgPSBpcnFfY2Fub25pY2FsaXplKG9sZF9zZXJpYWxfcG9ydFtpXS5pcnEpOwpAQCAtMjE1OSw3ICsyMTYxLDcgQEAKIAogCXNlcmlhbDgyNTBfaXNhX2luaXRfcG9ydHMoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdWFydHM7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKIAkJdXAtPnBvcnQuZGV2ID0gZGV2OwpAQCAtMjI2Miw3ICsyMjY0LDcgQEAKIAkgKiBpZiBzbywgc2VhcmNoIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIHBvcnQgdGhhdCBkb2VzIGhhdmUKIAkgKiBjb25zb2xlIHN1cHBvcnQuCiAJICovCi0JaWYgKGNvLT5pbmRleCA+PSBVQVJUX05SKQorCWlmIChjby0+aW5kZXggPj0gbnJfdWFydHMpCiAJCWNvLT5pbmRleCA9IDA7CiAJcG9ydCA9ICZzZXJpYWw4MjUwX3BvcnRzW2NvLT5pbmRleF0ucG9ydDsKIAlpZiAoIXBvcnQtPmlvYmFzZSAmJiAhcG9ydC0+bWVtYmFzZSkKQEAgLTIyOTgsNyArMjMwMCw3IEBACiAJaW50IGxpbmU7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAotCWZvciAobGluZSA9IDA7IGxpbmUgPCBVQVJUX05SOyBsaW5lKyspIHsKKwlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgbnJfdWFydHM7IGxpbmUrKykgewogCQlwb3J0ID0gJnNlcmlhbDgyNTBfcG9ydHNbbGluZV0ucG9ydDsKIAkJaWYgKHVhcnRfbWF0Y2hfcG9ydChwLCBwb3J0KSkKIAkJCXJldHVybiBsaW5lOwpAQCAtMjQyMCw3ICsyNDIyLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdWFydHM7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKIAkJaWYgKHVwLT5wb3J0LmRldiA9PSAmZGV2LT5kZXYpCkBAIC0yNDg3LDcgKzI0ODksNyBAQAogCS8qCiAJICogRmlyc3QsIGZpbmQgYSBwb3J0IGVudHJ5IHdoaWNoIG1hdGNoZXMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdWFydHM7IGkrKykKIAkJaWYgKHVhcnRfbWF0Y2hfcG9ydCgmc2VyaWFsODI1MF9wb3J0c1tpXS5wb3J0LCBwb3J0KSkKIAkJCXJldHVybiAmc2VyaWFsODI1MF9wb3J0c1tpXTsKIApAQCAtMjQ5Niw3ICsyNDk4LDcgQEAKIAkgKiBmcmVlIGVudHJ5LiAgV2UgbG9vayBmb3Igb25lIHdoaWNoIGhhc24ndCBiZWVuIHByZXZpb3VzbHkKIAkgKiB1c2VkIChpbmRpY2F0ZWQgYnkgemVybyBpb2Jhc2UpLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5yX3VhcnRzOyBpKyspCiAJCWlmIChzZXJpYWw4MjUwX3BvcnRzW2ldLnBvcnQudHlwZSA9PSBQT1JUX1VOS05PV04gJiYKIAkJICAgIHNlcmlhbDgyNTBfcG9ydHNbaV0ucG9ydC5pb2Jhc2UgPT0gMCkKIAkJCXJldHVybiAmc2VyaWFsODI1MF9wb3J0c1tpXTsKQEAgLTI1MDUsNyArMjUwNyw3IEBACiAJICogVGhhdCBhbHNvIGZhaWxlZC4gIExhc3QgcmVzb3J0IGlzIHRvIGZpbmQgYW55IGVudHJ5IHdoaWNoCiAJICogZG9lc24ndCBoYXZlIGEgcmVhbCBwb3J0IGFzc29jaWF0ZWQgd2l0aCBpdC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBucl91YXJ0czsgaSsrKQogCQlpZiAoc2VyaWFsODI1MF9wb3J0c1tpXS5wb3J0LnR5cGUgPT0gUE9SVF9VTktOT1dOKQogCQkJcmV0dXJuICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCkBAIC0yNTkwLDggKzI1OTIsMTEgQEAKIHsKIAlpbnQgcmV0LCBpOwogCisJaWYgKG5yX3VhcnRzID4gVUFSVF9OUikKKwkJbnJfdWFydHMgPSBVQVJUX05SOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiA4MjUwLzE2NTUwIGRyaXZlciAkUmV2aXNpb246IDEuOTAgJCAiCi0JCSIlZCBwb3J0cywgSVJRIHNoYXJpbmcgJXNhYmxlZFxuIiwgKGludCkgVUFSVF9OUiwKKwkJIiVkIHBvcnRzLCBJUlEgc2hhcmluZyAlc2FibGVkXG4iLCBucl91YXJ0cywKIAkJc2hhcmVfaXJxcyA/ICJlbiIgOiAiZGlzIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQpAQCAtMjY1MSw2ICsyNjU2LDkgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc2hhcmVfaXJxcywgIlNoYXJlIElSUXMgd2l0aCBvdGhlciBub24tODI1MC8xNng1MCBkZXZpY2VzIgogCSIgKHVuc2FmZSkiKTsKIAorbW9kdWxlX3BhcmFtKG5yX3VhcnRzLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobnJfdWFydHMsICJNYXhpbXVtIG51bWJlciBvZiBVQVJUcyBzdXBwb3J0ZWQuICgxLSIgX19NT0RVTEVfU1RSSU5HKENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUykgIikiKTsKKwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9SU0EKIG1vZHVsZV9wYXJhbV9hcnJheShwcm9iZV9yc2EsIHVsb25nLCAmcHJvYmVfcnNhX2NvdW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocHJvYmVfcnNhLCAiUHJvYmUgSS9PIHBvcnRzIGZvciBSU0EiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDgxMmJhZTYuLjFiYWUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtOTUsNiArOTUsMTYgQEAKIAkgIFBDSSBlbnVtZXJhdGlvbiBhbmQgYW55IHBvcnRzIHRoYXQgbWF5IGJlIGFkZGVkIGF0IHJ1bi10aW1lCiAJICB2aWEgaG90LXBsdWcsIG9yIGFueSBJU0EgbXVsdGktcG9ydCBzZXJpYWwgY2FyZHMuCiAKK2NvbmZpZyBTRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTCisJaW50ICJOdW1iZXIgb2YgODI1MC8xNjU1MCBzZXJpYWwgcG9ydHMgdG8gcmVnaXN0ZXIgYXQgcnVudGltZSIKKwlkZXBlbmRzIG9uIFNFUklBTF84MjUwCisJZGVmYXVsdCAiNCIKKwloZWxwCisJICBTZXQgdGhpcyB0byB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VyaWFsIHBvcnRzIHlvdSB3YW50CisJICB0aGUga2VybmVsIHRvIHJlZ2lzdGVyIGF0IGJvb3QgdGltZS4gIFRoaXMgY2FuIGJlIG92ZXJyaWRlbgorCSAgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAibnJfdWFydHMiLCBvciBib290LXRpbWUgcGFyYW1ldGVyCisJICA4MjUwLm5yX3VhcnRzCisKIGNvbmZpZyBTRVJJQUxfODI1MF9FWFRFTkRFRAogCWJvb2wgIkV4dGVuZGVkIDgyNTAvMTY1NTAgc2VyaWFsIGRyaXZlciBvcHRpb25zIgogCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAKQEAgLTM1OSwyOSArMzY5LDYgQEAKIAkgIHlvdXIgYm9vdCBsb2FkZXIgKGxpbG8gb3IgbG9hZGxpbikgYWJvdXQgaG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUKIAkgIGtlcm5lbCBhdCBib290IHRpbWUuKQogCi1jb25maWcgU0VSSUFMX1VBUlQwMAotCWJvb2wgIkV4Y2FsaWJ1ciBzZXJpYWwgcG9ydCAodWFydDAwKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfQ0FNRUxPVAotCXNlbGVjdCBTRVJJQUxfQ09SRQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBoYXJkIGxvZ2ljIHVhcnQgb24gRXhjYWxpYnVyLiBUaGlzCi0JICBkcml2ZXIgYWxzbyBzdXBwb3J0cyBzb2Z0IGxvZ2ljIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHVhcnQgY29yZS4KLQotY29uZmlnIFNFUklBTF9VQVJUMDBfQ09OU09MRQotCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gRXhjYWxpYnVyIHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX1VBUlQwMAotCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IGEgc2VyaWFsIGNvbnNvbGUgb24gYW4gRXhjYWxpYnVyCi0JICBoYXJkIGxvZ2ljIHVhcnQgb3IgdWFydDAwIElQIGNvcmUuCi0KLQkgIEV2ZW4gaWYgeW91IHNheSBZIGhlcmUsIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB2aXJ0dWFsIGNvbnNvbGUKLQkgICgvZGV2L3R0eTApIHdpbGwgc3RpbGwgYmUgdXNlZCBhcyB0aGUgc3lzdGVtIGNvbnNvbGUgYnkgZGVmYXVsdCwgYnV0Ci0JICB5b3UgY2FuIGFsdGVyIHRoYXQgdXNpbmcgYSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBzdWNoIGFzCi0JICAiY29uc29sZT10dHlTMSIuIChUcnkgIm1hbiBib290cGFyYW0iIG9yIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZgotCSAgeW91ciBib290IGxvYWRlciAobGlsbyBvciBsb2FkbGluKSBhYm91dCBob3cgdG8gcGFzcyBvcHRpb25zIHRvIHRoZQotCSAga2VybmVsIGF0IGJvb3QgdGltZS4pCi0KIGNvbmZpZyBTRVJJQUxfTVBTQwogCWJvb2wgIk1hcnZlbGwgTVBTQyBzZXJpYWwgcG9ydCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUFBDMzIgJiYgTVY2NFg2MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCBkN2M3YzcxLi4xMzcxNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtMjksNyArMjksNiBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QWEEpICs9IHB4YS5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NBMTEwMCkgKz0gc2ExMTAwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUzNDMjQxMCkgKz0gczNjMjQxMC5vCi1vYmotJChDT05GSUdfU0VSSUFMX1VBUlQwMCkgKz0gdWFydDAwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfU1VOQ09SRSkgKz0gc3VuY29yZS5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NVTlpJTE9HKSArPSBzdW56aWxvZy5vCiBvYmotJChDT05GSUdfU0VSSUFMX0lQMjJfWklMT0cpICs9IGlwMjJ6aWxvZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCAzNGM1NzZkLi45NTg5NTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTE0NDAsNiArMTQ0MCw3IEBACiAJCSAqIG1vZGVtIGlzIHJlYWR5IGZvciB1cy4KIAkJICovCiAJCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlwb3J0LT5vcHMtPmVuYWJsZV9tcyhwb3J0KTsKIAkJbWN0cmwgPSBwb3J0LT5vcHMtPmdldF9tY3RybChwb3J0KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5sb2NrKTsKIAkJaWYgKG1jdHJsICYgVElPQ01fQ0FSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdWFydDAwLmMgYi9kcml2ZXJzL3NlcmlhbC91YXJ0MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiNTA0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3NlcmlhbC91YXJ0MDAuYworKysgL2Rldi9udWxsCkBAIC0xLDc4MiArMCwwIEBACi0vKgotICogIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3VhcnQwMC5jCi0gKgotICogIERyaXZlciBmb3IgVUFSVDAwIHNlcmlhbCBwb3J0cwotICoKLSAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFsX2FtYmEuYywgYnkgQVJNIExpbWl0ZWQgJiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCi0gKiAgQ29weXJpZ2h0IDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogIFVwZGF0ZSBmb3IgMi42LjQgYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqICAkSWQ6IHVhcnQwMC5jLHYgMS4zNSAyMDAyLzA3LzI4IDEwOjAzOjI4IHJtayBFeHAgJAotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1VBUlQwMF9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKLSNkZWZpbmUgU1VQUE9SVF9TWVNSUQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotCi0jaW5jbHVkZSA8YXNtL2FyY2gvZXhjYWxpYnVyLmg+Ci0jZGVmaW5lIFVBUlQwMF9UWVBFICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKQotI2luY2x1ZGUgPGFzbS9hcmNoL3VhcnQwMC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2ludF9jdHJsMDAuaD4KLQotI2RlZmluZSBVQVJUX05SCQkyCi0KLSNkZWZpbmUgU0VSSUFMX1VBUlQwMF9OQU1FCSJ0dHlVQSIKLSNkZWZpbmUgU0VSSUFMX1VBUlQwMF9NQUpPUgkyMDQKLSNkZWZpbmUgU0VSSUFMX1VBUlQwMF9NSU5PUgkxNiAgICAgIC8qIFRlbXBvcmFyeSAtIHdpbGwgY2hhbmdlIGluIGZ1dHVyZSAqLwotI2RlZmluZSBTRVJJQUxfVUFSVDAwX05SCVVBUlRfTlIKLSNkZWZpbmUgVUFSVF9QT1JUX1NJWkUgMHg1MAotCi0jZGVmaW5lIFVBUlQwMF9JU1JfUEFTU19MSU1JVAkyNTYKLQotLyoKLSAqIEFjY2VzcyBtYWNyb3MgZm9yIHRoZSBVQVJUMDAgVUFSVHMKLSAqLwotI2RlZmluZSBVQVJUX0dFVF9JTlRfU1RBVFVTKHApCWlubChVQVJUX0lTUigocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX1BVVF9JRVMocCwgYykgICAgICBvdXRsKGMsVUFSVF9JRVMoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUVTKHApICAgICAgICAgaW5sKFVBUlRfSUVTKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfUFVUX0lFQyhwLCBjKSAgICAgIG91dGwoYyxVQVJUX0lFQygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9JRUMocCkgICAgICAgICBpbmwoVUFSVF9JRUMoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUihwLCBjKSAgICAgb3V0bChjLFVBUlRfVEQoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUihwKSAgICAgICAgaW5sKFVBUlRfUkQoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfUlNSKHApICAgICAgICAgaW5sKFVBUlRfUlNSKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfR0VUX1JEUyhwKSAgICAgICAgIGlubChVQVJUX1JEUygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9NU1IocCkgICAgICAgICBpbmwoVUFSVF9NU1IoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfTUNSKHApICAgICAgICAgaW5sKFVBUlRfTUNSKChwKS0+bWVtYmFzZSkpCi0jZGVmaW5lIFVBUlRfUFVUX01DUihwLCBjKSAgICAgIG91dGwoYyxVQVJUX01DUigocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9NQyhwKSAgICAgICAgICBpbmwoVUFSVF9NQygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX1BVVF9NQyhwLCBjKSAgICAgICBvdXRsKGMsVUFSVF9NQygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX0dFVF9UU1IocCkgICAgICAgICBpbmwoVUFSVF9UU1IoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfRElWX0hJKHApCWlubChVQVJUX0RJVl9ISSgocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX1BVVF9ESVZfSEkocCxjKQlvdXRsKGMsVUFSVF9ESVZfSEkoKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9HRVRfRElWX0xPKHApCWlubChVQVJUX0RJVl9MTygocCktPm1lbWJhc2UpKQotI2RlZmluZSBVQVJUX1BVVF9ESVZfTE8ocCxjKQlvdXRsKGMsVUFSVF9ESVZfTE8oKHApLT5tZW1iYXNlKSkKLSNkZWZpbmUgVUFSVF9SWF9EQVRBKHMpCQkoKHMpICYgVUFSVF9SU1JfUlhfTEVWRUxfTVNLKQotI2RlZmluZSBVQVJUX1RYX1JFQURZKHMpCSgoKHMpICYgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKSA8IDE1KQotLy8jZGVmaW5lIFVBUlRfVFhfRU1QVFkocCkJKChVQVJUX0dFVF9GUihwKSAmIFVBUlQwMF9VQVJURlJfVE1TSykgPT0gMCkKLQotc3RhdGljIHZvaWQgdWFydDAwX3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlVQVJUX1BVVF9JRUMocG9ydCwgVUFSVF9JRUNfVElFX01TSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JVUFSVF9QVVRfSUVDKHBvcnQsIFVBUlRfSUVDX1JFX01TSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlVQVJUX1BVVF9JRVMocG9ydCwgVUFSVF9JRVNfTUVfTVNLKTsKLX0KLQotc3RhdGljIHZvaWQKLXVhcnQwMF9yeF9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OwotCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCByZHMsIGZsZywgaWdub3JlZCA9IDA7Ci0KLQlzdGF0dXMgPSBVQVJUX0dFVF9SU1IocG9ydCk7Ci0Jd2hpbGUgKFVBUlRfUlhfREFUQShzdGF0dXMpKSB7Ci0JCS8qIAotCQkgKiBXZSBuZWVkIHRvIHJlYWQgcmRzIGJlZm9yZSByZWFkaW5nIHRoZSAKLQkJICogY2hhcmFjdGVyIGZyb20gdGhlIGZpZm8KLQkJICovCi0JCXJkcyA9IFVBUlRfR0VUX1JEUyhwb3J0KTsKLQkJY2ggPSBVQVJUX0dFVF9DSEFSKHBvcnQpOwotCQlwb3J0LT5pY291bnQucngrKzsKLQotCQlpZiAodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpCi0JCQlnb3RvIGlnbm9yZV9jaGFyOwotCi0JCWZsZyA9IFRUWV9OT1JNQUw7Ci0KLQkJLyoKLQkJICogTm90ZSB0aGF0IHRoZSBlcnJvciBoYW5kbGluZyBjb2RlIGlzCi0JCSAqIG91dCBvZiB0aGUgbWFpbiBleGVjdXRpb24gcGF0aAotCQkgKi8KLQkJaWYgKHJkcyAmIChVQVJUX1JEU19CSV9NU0sgfFVBUlRfUkRTX0ZFX01TS3wKLQkJCSAgIFVBUlRfUkRTX1BFX01TSyB8VUFSVF9SRFNfUEVfTVNLKSkKLQkJCWdvdG8gaGFuZGxlX2Vycm9yOwotCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjaCwgcmVncykpCi0JCQlnb3RvIGlnbm9yZV9jaGFyOwotCi0JZXJyb3JfcmV0dXJuOgotCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGcpOwotCi0JaWdub3JlX2NoYXI6Ci0JCXN0YXR1cyA9IFVBUlRfR0VUX1JTUihwb3J0KTsKLQl9Ci0gb3V0OgotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JcmV0dXJuOwotCi0gaGFuZGxlX2Vycm9yOgotCWlmIChyZHMgJiBVQVJUX1JEU19CSV9NU0spIHsKLQkJc3RhdHVzICY9IH4oVUFSVF9SRFNfRkVfTVNLIHwgVUFSVF9SRFNfUEVfTVNLKTsKLQkJcG9ydC0+aWNvdW50LmJyaysrOwotCQlpZiAodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCi0JCQlnb3RvIGlnbm9yZV9jaGFyOwotCX0gZWxzZSBpZiAocmRzICYgVUFSVF9SRFNfUEVfTVNLKQotCQlwb3J0LT5pY291bnQucGFyaXR5Kys7Ci0JZWxzZSBpZiAocmRzICYgVUFSVF9SRFNfRkVfTVNLKQotCQlwb3J0LT5pY291bnQuZnJhbWUrKzsKLQlpZiAocmRzICYgVUFSVF9SRFNfT0VfTVNLKQotCQlwb3J0LT5pY291bnQub3ZlcnJ1bisrOwotCi0JaWYgKHJkcyAmIHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzaykgewotCQlpZiAoKytpZ25vcmVkID4gMTAwKQotCQkJZ290byBvdXQ7Ci0JCWdvdG8gaWdub3JlX2NoYXI7Ci0JfQotCXJkcyAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOwotCi0JaWYgKHJkcyAmIFVBUlRfUkRTX0JJX01TSykKLQkJZmxnID0gVFRZX0JSRUFLOwotCWVsc2UgaWYgKHJkcyAmIFVBUlRfUkRTX1BFX01TSykKLQkJZmxnID0gVFRZX1BBUklUWTsKLQllbHNlIGlmIChyZHMgJiBVQVJUX1JEU19GRV9NU0spCi0JCWZsZyA9IFRUWV9GUkFNRTsKLQotCWlmIChyZHMgJiBVQVJUX1JEU19PRV9NU0spIHsKLQkJLyoKLQkJICogQ0hFQ0s6IGRvZXMgb3ZlcnJ1biBhZmZlY3QgdGhlIGN1cnJlbnQgY2hhcmFjdGVyPwotCQkgKiBBU1NVTVBUSU9OOiBpdCBkb2VzIG5vdC4KLQkJICovCi0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsZyk7Ci0JCWNoID0gMDsKLQkJZmxnID0gVFRZX09WRVJSVU47Ci0JfQotI2lmZGVmIFNVUFBPUlRfU1lTUlEKLQlwb3J0LT5zeXNycSA9IDA7Ci0jZW5kaWYKLQlnb3RvIGVycm9yX3JldHVybjsKLX0KLQotc3RhdGljIHZvaWQgdWFydDAwX3R4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7Ci0JaW50IGNvdW50OwotCi0JaWYgKHBvcnQtPnhfY2hhcikgewotCQl3aGlsZSAoKFVBUlRfR0VUX1RTUihwb3J0KSAmIFVBUlRfVFNSX1RYX0xFVkVMX01TSykgPT0gMTUpCi0JCQliYXJyaWVyKCk7Ci0JCVVBUlRfUFVUX0NIQVIocG9ydCwgcG9ydC0+eF9jaGFyKTsKLQkJcG9ydC0+aWNvdW50LnR4Kys7Ci0JCXBvcnQtPnhfY2hhciA9IDA7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQocG9ydCkpIHsKLQkJdWFydDAwX3N0b3BfdHgocG9ydCk7Ci0JCXJldHVybjsKLQl9Ci0KLQljb3VudCA9IHBvcnQtPmZpZm9zaXplID4+IDE7Ci0JZG8gewotCQl3aGlsZSAoKFVBUlRfR0VUX1RTUihwb3J0KSAmIFVBUlRfVFNSX1RYX0xFVkVMX01TSykgPT0gMTUpCi0JCQliYXJyaWVyKCk7Ci0JCVVBUlRfUFVUX0NIQVIocG9ydCwgeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKLQkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKLQkJcG9ydC0+aWNvdW50LnR4Kys7Ci0JCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCi0JCQlicmVhazsKLQl9IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0KLQlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCi0JCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOwotCi0JaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKLQkJdWFydDAwX3N0b3BfdHgocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCVVBUlRfUFVUX0lFUyhwb3J0LCBVQVJUX0lFU19USUVfTVNLKTsKLQl1YXJ0MDBfdHhfY2hhcnMocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9tb2RlbV9zdGF0dXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gVUFSVF9HRVRfTVNSKHBvcnQpOwotCi0JaWYgKCEoc3RhdHVzICYgKFVBUlRfTVNSX0RDVFNfTVNLIHwgVUFSVF9NU1JfRERTUl9NU0sgfCAKLQkJCVVBUlRfTVNSX1RFUklfTVNLIHwgVUFSVF9NU1JfRERDRF9NU0spKSkKLQkJcmV0dXJuOwotCi0JaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0REQ0RfTVNLKQotCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIHN0YXR1cyAmIFVBUlRfTVNSX0RDRF9NU0spOwotCi0JaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0REU1JfTVNLKQotCQlwb3J0LT5pY291bnQuZHNyKys7Ci0KLQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENUU19NU0spCi0JCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwgc3RhdHVzICYgVUFSVF9NU1JfQ1RTX01TSyk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHVhcnQwMF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCBzdGF0dXMsIHBhc3NfY291bnRlciA9IDA7Ci0KLQlzdGF0dXMgPSBVQVJUX0dFVF9JTlRfU1RBVFVTKHBvcnQpOwotCWRvIHsKLQkJaWYgKHN0YXR1cyAmIFVBUlRfSVNSX1JJX01TSykKLQkJCXVhcnQwMF9yeF9jaGFycyhwb3J0LCByZWdzKTsKLQkJaWYgKHN0YXR1cyAmIFVBUlRfSVNSX01JX01TSykKLQkJCXVhcnQwMF9tb2RlbV9zdGF0dXMocG9ydCk7Ci0JCWlmIChzdGF0dXMgJiAoVUFSVF9JU1JfVElfTVNLIHwgVUFSVF9JU1JfVElJX01TSykpCi0JCQl1YXJ0MDBfdHhfY2hhcnMocG9ydCk7Ci0JCWlmIChwYXNzX2NvdW50ZXIrKyA+IFVBUlQwMF9JU1JfUEFTU19MSU1JVCkKLQkJCWJyZWFrOwotCi0JCXN0YXR1cyA9IFVBUlRfR0VUX0lOVF9TVEFUVVMocG9ydCk7Ci0JfSB3aGlsZSAoc3RhdHVzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB1YXJ0MDBfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gVUFSVF9HRVRfVFNSKHBvcnQpICYgVUFSVF9UU1JfVFhfTEVWRUxfTVNLPyAwIDogVElPQ1NFUl9URU1UOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHVhcnQwMF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gVUFSVF9HRVRfTVNSKHBvcnQpOwotCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ0RfTVNLKQotCQlyZXN1bHQgfD0gVElPQ01fQ0FSOwotCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EU1JfTVNLKQotCQlyZXN1bHQgfD0gVElPQ01fRFNSOwotCWlmIChzdGF0dXMgJiBVQVJUX01TUl9DVFNfTVNLKQotCQlyZXN1bHQgfD0gVElPQ01fQ1RTOwotCWlmIChzdGF0dXMgJiBVQVJUX01TUl9SSV9NU0spCi0JCXJlc3VsdCB8PSBUSU9DTV9SSTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9zZXRfbWN0cmxfbnVsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHVhcnQwMF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG1jcjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JbWNyID0gVUFSVF9HRVRfTUNSKHBvcnQpOwotCWlmIChicmVha19zdGF0ZSA9PSAtMSkKLQkJbWNyIHw9IFVBUlRfTUNSX0JSX01TSzsKLQllbHNlCi0JCW1jciAmPSB+VUFSVF9NQ1JfQlJfTVNLOwotCVVBUlRfUFVUX01DUihwb3J0LCBtY3IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXVhcnQwMF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKLXsKLQl1bnNpZ25lZCBpbnQgdWFydF9tYywgb2xkX2llcywgYmF1ZCwgcXVvdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBXZSBkb24ndCBzdXBwb3J0IENSRUFEICh5ZXQpCi0JICovCi0JdGVybWlvcy0+Y19jZmxhZyB8PSBDUkVBRDsKLQotCS8qCi0JICogQXNrIHRoZSBjb3JlIHRvIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBmb3IgdXMuCi0JICovCi0JYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOyAKLQlxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKLQotCS8qIGJ5dGUgc2l6ZSBhbmQgcGFyaXR5ICovCi0Jc3dpdGNoICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpIHsKLQljYXNlIENTNToKLQkJdWFydF9tYyA9IFVBUlRfTUNfQ0xTX0NIQVJMRU5fNTsKLQkJYnJlYWs7Ci0JY2FzZSBDUzY6Ci0JCXVhcnRfbWMgPSBVQVJUX01DX0NMU19DSEFSTEVOXzY7Ci0JCWJyZWFrOwotCWNhc2UgQ1M3OgotCQl1YXJ0X21jID0gVUFSVF9NQ19DTFNfQ0hBUkxFTl83OwotCQlicmVhazsKLQlkZWZhdWx0OiAvLyBDUzgKLQkJdWFydF9tYyA9IFVBUlRfTUNfQ0xTX0NIQVJMRU5fODsKLQkJYnJlYWs7Ci0JfQotCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKQotCQl1YXJ0X21jfD0gVUFSVF9NQ19TVF9UV087Ci0JaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpIHsKLQkJdWFydF9tYyB8PSBVQVJUX01DX1BFX01TSzsKLQkJaWYgKCEodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkpCi0JCQl1YXJ0X21jIHw9IFVBUlRfTUNfRVBfTVNLOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFVwZGF0ZSB0aGUgcGVyLXBvcnQgdGltZW91dC4KLQkgKi8KLQl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIGJhdWQpOwotCi0JcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IFVBUlRfUkRTX09FX01TSzsKLQlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElOUENLKQotCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfUkRTX0ZFX01TSyB8IFVBUlRfUkRTX1BFX01TSzsKLQlpZiAodGVybWlvcy0+Y19pZmxhZyAmIChCUktJTlQgfCBQQVJNUkspKQotCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfUkRTX0JJX01TSzsKLQotCS8qCi0JICogQ2hhcmFjdGVycyB0byBpZ25vcmUKLQkgKi8KLQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgPSAwOwotCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQotCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9SRFNfRkVfTVNLIHwgVUFSVF9SRFNfUEVfTVNLOwotCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOQlJLKSB7Ci0JCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX1JEU19CSV9NU0s7Ci0JCS8qCi0JCSAqIElmIHdlJ3JlIGlnbm9yaW5nIHBhcml0eSBhbmQgYnJlYWsgaW5kaWNhdG9ycywKLQkJICogaWdub3JlIG92ZXJydW5zIHRvIChmb3IgcmVhbCByYXcgc3VwcG9ydCkuCi0JCSAqLwotCQlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKLQkJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX1JEU19PRV9NU0s7Ci0JfQotCi0JLyogZmlyc3QsIGRpc2FibGUgZXZlcnl0aGluZyAqLwotCW9sZF9pZXMgPSBVQVJUX0dFVF9JRVMocG9ydCk7IAotCi0JaWYgKFVBUlRfRU5BQkxFX01TKHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcpKQotCQlvbGRfaWVzIHw9IFVBUlRfSUVTX01FX01TSzsKLQotCS8qIFNldCBiYXVkIHJhdGUgKi8KLQlVQVJUX1BVVF9ESVZfTE8ocG9ydCwgKHF1b3QgJiAweGZmKSk7Ci0JVUFSVF9QVVRfRElWX0hJKHBvcnQsICgocXVvdCAmIDB4ZjAwKSA+PiA4KSk7Ci0KLQlVQVJUX1BVVF9NQyhwb3J0LCB1YXJ0X21jKTsKLQlVQVJUX1BVVF9JRVMocG9ydCwgb2xkX2llcyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgdWFydDAwX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0aGUgSVJRCi0JICovCi0JcmVzdWx0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCB1YXJ0MDBfaW50LCAwLCAidWFydDAwIiwgcG9ydCk7Ci0JaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3Qgb2YgaXJxICVkIGZhaWxlZFxuIiwgcG9ydC0+aXJxKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKgotCSAqIEZpbmFsbHksIGVuYWJsZSBpbnRlcnJ1cHRzLiBVc2UgdGhlIFRJSSBpbnRlcnJ1cHQgdG8gbWluaW1pc2UgCi0JICogdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZC4gSWYgaGlnaGVyIHBlcmZvcm1hbmNlIGlzIAotCSAqIG5lZWRlZCwgY29uc2lkZXIgdXNpbmcgdGhlIFRJIGludGVycnVwdCB3aXRoIGEgc3VpdGFibGUgRklGTwotCSAqIHRocmVzaG9sZAotCSAqLwotCVVBUlRfUFVUX0lFUyhwb3J0LCBVQVJUX0lFU19SRV9NU0sgfCBVQVJUX0lFU19USUVfTVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1YXJ0MDBfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQkvKgotCSAqIGRpc2FibGUgYWxsIGludGVycnVwdHMsIGRpc2FibGUgdGhlIHBvcnQKLQkgKi8KLQlVQVJUX1BVVF9JRUMocG9ydCwgMHhmZik7Ci0KLQkvKiBkaXNhYmxlIGJyZWFrIGNvbmRpdGlvbiBhbmQgZmlmb3MgKi8KLQlVQVJUX1BVVF9NQ1IocG9ydCwgVUFSVF9HRVRfTUNSKHBvcnQpICZ+VUFSVF9NQ1JfQlJfTVNLKTsKLQotICAgICAgICAvKgotCSAqIEZyZWUgdGhlIGludGVycnVwdAotCSAqLwotCWZyZWVfaXJxKHBvcnQtPmlycSwgcG9ydCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICp1YXJ0MDBfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXJldHVybiBwb3J0LT50eXBlID09IFBPUlRfVUFSVDAwID8gIkFsdGVyYSBVQVJUMDAiIDogTlVMTDsKLX0KLQotLyoKLSAqIFJlbGVhc2UgdGhlIG1lbW9yeSByZWdpb24ocykgYmVpbmcgdXNlZCBieSAncG9ydCcKLSAqLwotc3RhdGljIHZvaWQgdWFydDAwX3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBVQVJUX1BPUlRfU0laRSk7Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9DQU1FTE9UCi0JaWYgKHBvcnQtPm1lbWJhc2UgIT0gKHZvaWQqKUlPX0FERFJFU1MoRVhDX1VBUlQwMF9CQVNFKSkgewotCQlpb3VubWFwKHBvcnQtPm1lbWJhc2UpOwotCX0KLSNlbmRpZgotfQotCi0vKgotICogUmVxdWVzdCB0aGUgbWVtb3J5IHJlZ2lvbihzKSBiZWluZyB1c2VkIGJ5ICdwb3J0JwotICovCi1zdGF0aWMgaW50IHVhcnQwMF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gcmVxdWVzdF9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIFVBUlRfUE9SVF9TSVpFLCAic2VyaWFsX3VhcnQwMCIpCi0JCQkhPSBOVUxMID8gMCA6IC1FQlVTWTsKLX0KLQotLyoKLSAqIENvbmZpZ3VyZS9hdXRvY29uZmlndXJlIHRoZSBwb3J0LgotICovCi1zdGF0aWMgdm9pZCB1YXJ0MDBfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQotewotCi0JLyoKLQkgKiBNYXAgdGhlIGlvIG1lbW9yeSBpZiB0aGlzIGlzIGEgc29mdCB1YXJ0Ci0JICovCi0JaWYgKCFwb3J0LT5tZW1iYXNlKQotCQlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHBvcnQtPm1hcGJhc2UsU1pfNEspOwotCi0JaWYgKCFwb3J0LT5tZW1iYXNlKQotCQlwcmludGsoS0VSTl9FUlIgInNlcmlhbDAwOiBjYW5ub3QgbWFwIGlvIG1lbW9yeVxuIik7Ci0JZWxzZQotCQlwb3J0LT50eXBlID0gUE9SVF9VQVJUMDA7Ci0KLX0KLQotLyoKLSAqIHZlcmlmeSB0aGUgbmV3IHNlcmlhbF9zdHJ1Y3QgKGZvciBUSU9DU1NFUklBTCkuCi0gKi8KLXN0YXRpYyBpbnQgdWFydDAwX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCi17Ci0JaW50IHJldCA9IDA7Ci0JaWYgKHNlci0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgc2VyLT50eXBlICE9IFBPUlRfVUFSVDAwKQotCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKLQkJcmV0ID0gLUVJTlZBTDsKLQlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQotCQlyZXQgPSAtRUlOVkFMOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgdWFydDAwX3BvcHMgPSB7Ci0JLnR4X2VtcHR5CT0gdWFydDAwX3R4X2VtcHR5LAotCS5zZXRfbWN0cmwJPSB1YXJ0MDBfc2V0X21jdHJsX251bGwsCi0JLmdldF9tY3RybAk9IHVhcnQwMF9nZXRfbWN0cmwsCi0JLnN0b3BfdHgJPSB1YXJ0MDBfc3RvcF90eCwKLQkuc3RhcnRfdHgJPSB1YXJ0MDBfc3RhcnRfdHgsCi0JLnN0b3BfcngJPSB1YXJ0MDBfc3RvcF9yeCwKLQkuZW5hYmxlX21zCT0gdWFydDAwX2VuYWJsZV9tcywKLQkuYnJlYWtfY3RsCT0gdWFydDAwX2JyZWFrX2N0bCwKLQkuc3RhcnR1cAk9IHVhcnQwMF9zdGFydHVwLAotCS5zaHV0ZG93bgk9IHVhcnQwMF9zaHV0ZG93biwKLQkuc2V0X3Rlcm1pb3MJPSB1YXJ0MDBfc2V0X3Rlcm1pb3MsCi0JLnR5cGUJCT0gdWFydDAwX3R5cGUsCi0JLnJlbGVhc2VfcG9ydAk9IHVhcnQwMF9yZWxlYXNlX3BvcnQsCi0JLnJlcXVlc3RfcG9ydAk9IHVhcnQwMF9yZXF1ZXN0X3BvcnQsCi0JLmNvbmZpZ19wb3J0CT0gdWFydDAwX2NvbmZpZ19wb3J0LAotCS52ZXJpZnlfcG9ydAk9IHVhcnQwMF92ZXJpZnlfcG9ydCwKLX07Ci0KLQotI2lmZGVmIENPTkZJR19BUkNIX0NBTUVMT1QKLXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IGVweGExMGRiX3BvcnQgPSB7Ci0JLm1lbWJhc2UJPSAodm9pZCopSU9fQUREUkVTUyhFWENfVUFSVDAwX0JBU0UpLAotCS5tYXBiYXNlCT0gRVhDX1VBUlQwMF9CQVNFLAotCS5pb3R5cGUJCT0gU0VSSUFMX0lPX01FTSwKLQkuaXJxCQk9IElSUV9VQVJULAotCS51YXJ0Y2xrCT0gRVhDX0FIQjJfQ0xLX0ZSRVFVRU5DWSwKLQkuZmlmb3NpemUJPSAxNiwKLQkub3BzCQk9ICZ1YXJ0MDBfcG9wcywKLQkuZmxhZ3MJCT0gQVNZTkNfQk9PVF9BVVRPQ09ORiwKLX07Ci0jZW5kaWYKLQotCi0jaWZkZWYgQ09ORklHX1NFUklBTF9VQVJUMDBfQ09OU09MRQotc3RhdGljIHZvaWQgdWFydDAwX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBjb3VudCkKLXsKLSNpZmRlZiBDT05GSUdfQVJDSF9DQU1FTE9UCi0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZlcHhhMTBkYl9wb3J0OwotCXVuc2lnbmVkIGludCBzdGF0dXMsIG9sZF9pZXM7Ci0JaW50IGk7Ci0KLQkvKgotCSAqCUZpcnN0IHNhdmUgdGhlIENSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwotCSAqLwotCW9sZF9pZXMgPSBVQVJUX0dFVF9JRVMocG9ydCk7Ci0JVUFSVF9QVVRfSUVDKHBvcnQsMHhmZik7Ci0KLQkvKgotCSAqCU5vdywgZG8gZWFjaCBjaGFyYWN0ZXIKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlkbyB7Ci0JCQlzdGF0dXMgPSBVQVJUX0dFVF9UU1IocG9ydCk7Ci0JCX0gd2hpbGUgKCFVQVJUX1RYX1JFQURZKHN0YXR1cykpOwotCQlVQVJUX1BVVF9DSEFSKHBvcnQsIHNbaV0pOwotCQlpZiAoc1tpXSA9PSAnXG4nKSB7Ci0JCQlkbyB7Ci0JCQkJc3RhdHVzID0gVUFSVF9HRVRfVFNSKHBvcnQpOwotCQkJfSB3aGlsZSAoIVVBUlRfVFhfUkVBRFkoc3RhdHVzKSk7Ci0JCQlVQVJUX1BVVF9DSEFSKHBvcnQsICdccicpOwotCQl9Ci0JfQotCi0JLyoKLQkgKglGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKLQkgKglhbmQgcmVzdG9yZSB0aGUgSUVTCi0JICovCi0JZG8gewotCQlzdGF0dXMgPSBVQVJUX0dFVF9UU1IocG9ydCk7Ci0JfSB3aGlsZSAoc3RhdHVzICYgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKTsKLQlVQVJUX1BVVF9JRVMocG9ydCwgb2xkX2llcyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgX19pbml0Ci11YXJ0MDBfY29uc29sZV9nZXRfb3B0aW9ucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgKmJhdWQsCi0JCQkgICBpbnQgKnBhcml0eSwgaW50ICpiaXRzKQotewotCXVuc2lnbmVkIGludCB1YXJ0X21jLCBxdW90OwotCi0JdWFydF9tYyA9IFVBUlRfR0VUX01DKHBvcnQpOwotCi0JKnBhcml0eSA9ICduJzsKLQlpZiAodWFydF9tYyAmIFVBUlRfTUNfUEVfTVNLKSB7Ci0JCWlmICh1YXJ0X21jICYgVUFSVF9NQ19FUF9NU0spCi0JCQkqcGFyaXR5ID0gJ2UnOwotCQllbHNlCi0JCQkqcGFyaXR5ID0gJ28nOwotCX0KLQotCXN3aXRjaCAodWFydF9tYyAmIFVBUlRfTUNfQ0xTX01TSykgewotCWNhc2UgVUFSVF9NQ19DTFNfQ0hBUkxFTl81OgotCQkqYml0cyA9IDU7Ci0JCWJyZWFrOwotCWNhc2UgVUFSVF9NQ19DTFNfQ0hBUkxFTl82OgotCQkqYml0cyA9IDY7Ci0JCWJyZWFrOwotCWNhc2UgVUFSVF9NQ19DTFNfQ0hBUkxFTl83OgotCQkqYml0cyA9IDc7Ci0JCWJyZWFrOwotCWNhc2UgVUFSVF9NQ19DTFNfQ0hBUkxFTl84OgotCQkqYml0cyA9IDg7Ci0JCWJyZWFrOwotCX0KLQlxdW90ID0gVUFSVF9HRVRfRElWX0xPKHBvcnQpIHwgKFVBUlRfR0VUX0RJVl9ISShwb3J0KSA8PCA4KTsKLQkqYmF1ZCA9IHBvcnQtPnVhcnRjbGsgLyAoMTYgKnF1b3QgKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgdWFydDAwX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQotewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7Ci0JaW50IGJhdWQgPSAxMTUyMDA7Ci0JaW50IGJpdHMgPSA4OwotCWludCBwYXJpdHkgPSAnbic7Ci0JaW50IGZsb3cgPSAnbic7Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9DQU1FTE9UCi0JcG9ydCA9ICZlcHhhMTBkYl9wb3J0OyAgICAgICAgICAgICA7Ci0jZWxzZQotCXJldHVybiAtRU5PREVWOwotI2VuZGlmCi0JaWYgKG9wdGlvbnMpCi0JCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKLQllbHNlCi0JCXVhcnQwMF9jb25zb2xlX2dldF9vcHRpb25zKHBvcnQsICZiYXVkLCAmcGFyaXR5LCAmYml0cyk7Ci0KLQlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKLX0KLQotZXh0ZXJuIHN0cnVjdCB1YXJ0X2RyaXZlciB1YXJ0MDBfcmVnOwotc3RhdGljIHN0cnVjdCBjb25zb2xlIHVhcnQwMF9jb25zb2xlID0gewotCS5uYW1lCQk9IFNFUklBTF9VQVJUMDBfTkFNRSwKLQkud3JpdGUJCT0gdWFydDAwX2NvbnNvbGVfd3JpdGUsCi0JLmRldmljZQkJPSB1YXJ0X2NvbnNvbGVfZGV2aWNlLAotCS5zZXR1cAkJPSB1YXJ0MDBfY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleAkJPSAwLAotCS5kYXRhCQk9ICZ1YXJ0MDBfcmVnLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdWFydDAwX2NvbnNvbGVfaW5pdCh2b2lkKQotewotCXJlZ2lzdGVyX2NvbnNvbGUoJnVhcnQwMF9jb25zb2xlKTsKLQlyZXR1cm4gMDsKLX0KLWNvbnNvbGVfaW5pdGNhbGwodWFydDAwX2NvbnNvbGVfaW5pdCk7Ci0KLSNkZWZpbmUgVUFSVDAwX0NPTlNPTEUJJnVhcnQwMF9jb25zb2xlCi0jZWxzZQotI2RlZmluZSBVQVJUMDBfQ09OU09MRQlOVUxMCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciB1YXJ0MDBfcmVnID0gewotCS5vd25lcgkJCT0gTlVMTCwKLQkuZHJpdmVyX25hbWUJCT0gU0VSSUFMX1VBUlQwMF9OQU1FLAotCS5kZXZfbmFtZQkJPSBTRVJJQUxfVUFSVDAwX05BTUUsCi0JLm1ham9yCQkJPSBTRVJJQUxfVUFSVDAwX01BSk9SLAotCS5taW5vcgkJCT0gU0VSSUFMX1VBUlQwMF9NSU5PUiwKLQkubnIJCQk9IFVBUlRfTlIsCi0JLmNvbnMJCQk9IFVBUlQwMF9DT05TT0xFLAotfTsKLQotc3RydWN0IGRldl9wb3J0X2VudHJ5ewotCXVuc2lnbmVkIGludCBiYXNlX2FkZHI7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfUExEX0hPVFNXQVAKLQotc3RhdGljIHN0cnVjdCBkZXZfcG9ydF9lbnRyeSBkZXZfcG9ydF9tYXBbVUFSVF9OUl07Ci0KLS8qCi0gKiBLZWVwIGEgbWFwcGluZyBvZiBkZXZfaW5mbyBhZGRyZXNzZXMgLT4gcG9ydCBsaW5lcyB0byB1c2Ugd2hlbgotICogcmVtb3ZpbmcgcG9ydHMgZGV2PT1OVUxMIGluZGljYXRlcyB1bnVzZWQgZW50cnkKLSAqLwotCi1zdHJ1Y3QgdWFydDAwX3BzX2RhdGF7Ci0JdW5zaWduZWQgaW50IGNsazsKLQl1bnNpZ25lZCBpbnQgZmlmb3NpemU7Ci19OwotCi1pbnQgdWFydDAwX2FkZF9kZXZpY2Uoc3RydWN0IHBsZGhzX2Rldl9pbmZvKiBkZXZfaW5mbywgdm9pZCogZGV2X3BzX2RhdGEpCi17Ci0Jc3RydWN0IHVhcnQwMF9wc19kYXRhKiBkZXZfcHM9ZGV2X3BzX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqIHBvcnQ7Ci0JaW50IGkscmVzdWx0OwotCi0JaT0wOwotCXdoaWxlKGRldl9wb3J0X21hcFtpXS5wb3J0KQotCQlpKys7Ci0KLQlpZihpPT1VQVJUX05SKXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidWFydDAwOiBNYXhpbXVtIG51bWJlciBvZiBwb3J0cyByZWFjaGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcG9ydD1rbWFsbG9jKHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSxHRlBfS0VSTkVMKTsKLQlpZighcG9ydCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwcmludGsoImNsaz0lZCBmaWZvPSVkXG4iLGRldl9wcy0+Y2xrLGRldl9wcy0+Zmlmb3NpemUpOwotCXBvcnQtPm1lbWJhc2U9MDsKLQlwb3J0LT5tYXBiYXNlPWRldl9pbmZvLT5iYXNlX2FkZHI7Ci0JcG9ydC0+aW90eXBlPVNFUklBTF9JT19NRU07Ci0JcG9ydC0+aXJxPWRldl9pbmZvLT5pcnE7Ci0JcG9ydC0+dWFydGNsaz1kZXZfcHMtPmNsazsKLQlwb3J0LT5maWZvc2l6ZT1kZXZfcHMtPmZpZm9zaXplOwotCXBvcnQtPm9wcz0mdWFydDAwX3BvcHM7Ci0JcG9ydC0+bGluZT1pOwotCXBvcnQtPmZsYWdzPUFTWU5DX0JPT1RfQVVUT0NPTkY7Ci0KLQlyZXN1bHQ9dWFydF9hZGRfb25lX3BvcnQoJnVhcnQwMF9yZWcsIHBvcnQpOwotCWlmKHJlc3VsdCl7Ci0JCXByaW50aygidWFydF9hZGRfb25lX3BvcnQgcmV0dXJuZWQgJWRcbiIscmVzdWx0KTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JZGV2X3BvcnRfbWFwW2ldLmJhc2VfYWRkcj1kZXZfaW5mby0+YmFzZV9hZGRyOwotCWRldl9wb3J0X21hcFtpXS5wb3J0PXBvcnQ7Ci0JcHJpbnRrKCJ1YXJ0MDA6IGFkZGVkIGRldmljZSBhdCAleCBhcyB0dHlVQSVkXG4iLGRldl9wb3J0X21hcFtpXS5iYXNlX2FkZHIsaSk7Ci0JcmV0dXJuIDA7Ci0KLX0KLQotaW50IHVhcnQwMF9yZW1vdmVfZGV2aWNlcyh2b2lkKQotewotCWludCBpLHJlc3VsdDsKLQotCi0JcmVzdWx0PTA7Ci0JZm9yKGk9MTtpPFVBUlRfTlI7aSsrKXsKLQkJaWYoZGV2X3BvcnRfbWFwW2ldLmJhc2VfYWRkcil7Ci0JCQlyZXN1bHQ9dWFydF9yZW1vdmVfb25lX3BvcnQoJnVhcnQwMF9yZWcsIGRldl9wb3J0X21hcFtpXS5wb3J0KTsKLQkJCWlmKHJlc3VsdCkKLQkJCQlyZXR1cm4gcmVzdWx0OwotCi0JCQkvKiBwb3J0IHJlbW92ZWQgc3VjZXNzZnVsbHksIHNvIG5vdyB0aWR5IHVwICovCi0JCQlrZnJlZShkZXZfcG9ydF9tYXBbaV0ucG9ydCk7Ci0JCQlkZXZfcG9ydF9tYXBbaV0uYmFzZV9hZGRyPTA7Ci0JCQlkZXZfcG9ydF9tYXBbaV0ucG9ydD1OVUxMOwotCQl9Ci0JfQotCXJldHVybiAwOwotCi19Ci0KLXN0cnVjdCBwbGRfaG90c3dhcF9vcHMgdWFydDAwX3BsZGhzX29wcz17Ci0JLm5hbWUJCT0gInVhcnQwMCIsCi0JLmFkZF9kZXZpY2UJPSB1YXJ0MDBfYWRkX2RldmljZSwKLQkucmVtb3ZlX2RldmljZXMJPSB1YXJ0MDBfcmVtb3ZlX2RldmljZXMsCi19OwotCi0jZW5kaWYKLQotc3RhdGljIGludCBfX2luaXQgdWFydDAwX2luaXQodm9pZCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBVQVJUMDAgZHJpdmVyICRSZXZpc2lvbjogMS4zNSAkXG4iKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInNlcmlhbF91YXJ0MDA6VXNpbmcgdGVtcG9yYXJ5IG1ham9yL21pbm9yIHBhaXJzIgotCQkiIC0gdGhlc2UgV0lMTCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZVxuIik7Ci0KLQlyZXN1bHQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmdWFydDAwX3JlZyk7Ci0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIHJlc3VsdDsKLSNpZmRlZiBDT05GSUdfQVJDSF9DQU1FTE9UCi0JcmVzdWx0ID0gdWFydF9hZGRfb25lX3BvcnQoJnVhcnQwMF9yZWcsJmVweGExMGRiX3BvcnQpOwotI2VuZGlmCi0JaWYgKHJlc3VsdCkKLQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmdWFydDAwX3JlZyk7Ci0KLSNpZmRlZiAgQ09ORklHX1BMRF9IT1RTV0FQCi0JcGxkaHNfcmVnaXN0ZXJfZHJpdmVyKCZ1YXJ0MDBfcGxkaHNfb3BzKTsKLSNlbmRpZgotCXJldHVybiByZXN1bHQ7Ci19Ci0KLV9faW5pdGNhbGwodWFydDAwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDRkZGM0NTMuLjNjZjk0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTE4NCwxMyArMTg0LDEzIEBACiAJYnVzLT5kX2lub2RlLT5pX2dpZCA9IGJ1c2dpZDsKIAlidXMtPmRfaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBidXNtb2RlOwogCi0JZG93bigmYnVzLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmYnVzLT5kX2lub2RlLT5pX211dGV4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKQogCQlpZiAoZGV2LT5kX2lub2RlKQogCQkJdXBkYXRlX2RldihkZXYpOwogCi0JdXAoJmJ1cy0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmYnVzLT5kX2lub2RlLT5pX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlpZiAoIXJvb3QpCiAJCXJldHVybjsKIAotCWRvd24oJnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcm9vdC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgewogCQlpZiAoYnVzLT5kX2lub2RlKSB7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkJfQogCX0KIAotCXVwKCZyb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIH0KIAogc3RhdGljIGludCByZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCkBAIC0zMzMsMTAgKzMzMywxMCBAQAogc3RhdGljIGludCB1c2Jmc191bmxpbmsgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKIAlkcHV0KGRlbnRyeSk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJZF9kZWxldGUoZGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0Niw3ICszNDYsNyBAQAogCWludCBlcnJvciA9IC1FTk9URU1QVFk7CiAJc3RydWN0IGlub2RlICogaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlkZW50cnlfdW5oYXNoKGRlbnRyeSk7CiAJaWYgKHVzYmZzX2VtcHR5KGRlbnRyeSkpIHsKIAkJZGVudHJ5LT5kX2lub2RlLT5pX25saW5rIC09IDI7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJZGlyLT5pX25saW5rLS07CiAJCWVycm9yID0gMDsKIAl9Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKCFlcnJvcikKIAkJZF9kZWxldGUoZGVudHJ5KTsKIAlkcHV0KGRlbnRyeSk7CkBAIC0zODAsNyArMzgwLDcgQEAKIHsKIAlsb2ZmX3QgcmV0dmFsID0gLUVJTlZBTDsKIAotCWRvd24oJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaChvcmlnKSB7CiAJY2FzZSAwOgogCQlpZiAob2Zmc2V0ID4gMCkgewpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCXVwKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCX0KIAogCSpkZW50cnkgPSBOVUxMOwotCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJKmRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7CiAJCWlmICgobW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKQEAgLTQ4OSw3ICs0ODksNyBAQAogCQkJZXJyb3IgPSB1c2Jmc19jcmVhdGUgKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CiAJfSBlbHNlCiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwotCXVwKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC01MjgsNyArNTI4LDcgQEAKIAlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlKQogCQlyZXR1cm47CiAKLQlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmICh1c2Jmc19wb3NpdGl2ZShkZW50cnkpKSB7CiAJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKIAkJCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKQEAgLTUzOCw3ICs1MzgsNyBAQAogCQlkcHV0KGRlbnRyeSk7CiAJCX0KIAl9Ci0JdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggMGNlYTk3OC4uZGU1OWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMTg5MSw3ICsxODkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NZTkNXUklURTsKIAlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKIAllcnIgPSBmaWxwLT5mX29wLT5mc3luYyhmaWxwLCBmaWxwLT5mX2RlbnRyeSwgMSk7CkBAIC0xOTAxLDcgKzE5MDEsNyBAQAogCWlmICghcmMpCiAJCXJjID0gZXJyOwogCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9TWU5DV1JJVEU7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJVkxEQkcoY3VybHVuLCAiZmRhdGFzeW5jIC0+ICVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCA1YzQwOTgwLi5jNmMyNzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMTU2MiwxMCArMTU2MiwxMCBAQAogCQlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOwogCiAJCS8qIGJyZWFrIGxpbmsgdG8gZGNhY2hlICovCi0JCWRvd24gKCZwYXJlbnQtPmlfc2VtKTsKKwkJbXV0ZXhfbG9jayAoJnBhcmVudC0+aV9tdXRleCk7CiAJCWRfZGVsZXRlIChkZW50cnkpOwogCQlkcHV0IChkZW50cnkpOwotCQl1cCAoJnBhcmVudC0+aV9zZW0pOworCQltdXRleF91bmxvY2sgKCZwYXJlbnQtPmlfbXV0ZXgpOwogCiAJCS8qIGZkcyBtYXkgc3RpbGwgYmUgb3BlbiAqLwogCQlnb3RvIHJlc3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKaW5kZXggZWQxODk5ZC4uYmUzZmQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtMTEsMTQgKzExLDE0IEBACiAJICBUaGUgRW5oYW5jZWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoRUhDSSkgaXMgc3RhbmRhcmQgZm9yIFVTQiAyLjAKIAkgICJoaWdoIHNwZWVkIiAoNDgwIE1iaXQvc2VjLCA2MCBNYnl0ZS9zZWMpIGhvc3QgY29udHJvbGxlciBoYXJkd2FyZS4KIAkgIElmIHlvdXIgVVNCIGhvc3QgY29udHJvbGxlciBzdXBwb3J0cyBVU0IgMi4wLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bwotCSAgY29uZmlndXJlIHRoaXMgSG9zdCBDb250cm9sbGVyIERyaXZlci4gIEF0IHRoaXMgd3JpdGluZywgdGhlIHByaW1hcnkKLQkgIGltcGxlbWVudGF0aW9uIG9mIEVIQ0kgaXMgYSBjaGlwIGZyb20gTkVDLCB3aWRlbHkgYXZhaWxhYmxlIGluIGFkZC1vbgotCSAgUENJIGNhcmRzLCBidXQgaW1wbGVtZW50YXRpb25zIGFyZSBpbiB0aGUgd29ya3MgZnJvbSBvdGhlciB2ZW5kb3JzCi0JICBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KKwkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIAorCSAgdGhlIHByaW1hcnkgaW1wbGVtZW50YXRpb24gb2YgRUhDSSBpcyBhIGNoaXAgZnJvbSBORUMsIHdpZGVseSBhdmFpbGFibGUKKwkgIGluIGFkZC1vbiBQQ0kgY2FyZHMsIGJ1dCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIHRoZSB3b3JrcyBmcm9tIG90aGVyIAorCSAgdmVuZG9ycyBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KIAogCSAgRUhDSSBjb250cm9sbGVycyBhcmUgcGFja2FnZWQgd2l0aCAiY29tcGFuaW9uIiBob3N0IGNvbnRyb2xsZXJzIChPSENJCiAJICBvciBVSENJKSB0byBoYW5kbGUgVVNCIDEuMSBkZXZpY2VzIGNvbm5lY3RlZCB0byByb290IGh1YiBwb3J0cy4gIFBvcnRzCi0JICB3aWxsIGNvbm5lY3QgdG8gRUhDSSBpZiBpdCB0aGUgZGV2aWNlIGlzIGhpZ2ggc3BlZWQsIG90aGVyd2lzZSB0aGV5CisJICB3aWxsIGNvbm5lY3QgdG8gRUhDSSBpZiB0aGUgZGV2aWNlIGlzIGhpZ2ggc3BlZWQsIG90aGVyd2lzZSB0aGV5CiAJICBjb25uZWN0IHRvIGEgY29tcGFuaW9uIGNvbnRyb2xsZXIuICBJZiB5b3UgY29uZmlndXJlIEVIQ0ksIHlvdSBzaG91bGQKIAkgIHByb2JhYmx5IGNvbmZpZ3VyZSB0aGUgT0hDSSAoZm9yIE5FQyBhbmQgc29tZSBvdGhlciB2ZW5kb3JzKSBVU0IgSG9zdAogCSAgQ29udHJvbGxlciBEcml2ZXIgb3IgVUhDSSAoZm9yIFZpYSBtb3RoZXJib2FyZHMpIEhvc3QgQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jIGIvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jCmluZGV4IDZhNTcwMGUuLjI1NjQ2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL2RzYnIxMDAuYworKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMKQEAgLTEyNyw2ICsxMjcsNyBAQAogCS5vcGVuID0JCXVzYl9kc2JyMTAwX29wZW4sCiAJLnJlbGVhc2UgPSAgICAgCXVzYl9kc2JyMTAwX2Nsb3NlLAogCS5pb2N0bCA9ICAgICAgICB1c2JfZHNicjEwMF9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwppbmRleCAzYTBlOGNlLi44YWY2NjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmMKQEAgLTQ3NzQsNiArNDc3NCw3IEBACiAJLnJlYWQgPQkJb3Y1MXhfdjRsMV9yZWFkLAogCS5tbWFwID0JCW92NTF4X3Y0bDFfbW1hcCwKIAkuaW9jdGwgPQlvdjUxeF92NGwxX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYwppbmRleCAwOWNhNjEyLi40ZjliMGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCkBAIC0xNTQsNiArMTU0LDcgQEAKIAkucG9sbCA9CQlwd2NfdmlkZW9fcG9sbCwKIAkubW1hcCA9CQlwd2NfdmlkZW9fbW1hcCwKIAkuaW9jdGwgPSAgICAgICAgcHdjX3ZpZGVvX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKIH07CiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBwd2NfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jIGIvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYwppbmRleCBiMmFlMjlhLi4yYmE1NjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmMKQEAgLTExOTMsNiArMTE5Myw3IEBACiAgICAgICAgIC5yZWFkID0gICAgICAgICBzZTQwMV9yZWFkLAogICAgICAgICAubW1hcCA9ICAgICAgICAgc2U0MDFfbW1hcCwKIAkuaW9jdGwgPSAgICAgICAgc2U0MDFfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrID0gICAgICAgbm9fbGxzZWVrLAogfTsKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNlNDAxX3RlbXBsYXRlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuYwppbmRleCA3NzQwMzhiLi5iNDk3YTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuYworKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuYwpAQCAtMTM0Myw2ICsxMzQzLDcgQEAKIAkucmVhZCA9CQlzdHY2ODBfcmVhZCwKIAkubW1hcCA9CQlzdHY2ODBfbW1hcCwKIAkuaW9jdGwgPSAgICAgICAgc3R2NjgwX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKIH07CiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzdHY2ODBfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYwppbmRleCA0YmQxMTMzLi42M2E3MmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmMKQEAgLTk1Myw2ICs5NTMsNyBAQAogCS5yZWFkID0gICB1c2J2aWRlb192NGxfcmVhZCwKIAkubW1hcCA9ICAgdXNidmlkZW9fdjRsX21tYXAsCiAJLmlvY3RsID0gIHVzYnZpZGVvX3Y0bF9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgdXNidmlkZW9fdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwppbmRleCAxYzczMTU1Li41ZGYxNDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMKQEAgLTEyMzYsNiArMTIzNiw3IEBACiAJLnJlYWQJCT0gdmljYW1fcmVhZCwKIAkubW1hcAkJPSB2aWNhbV9tbWFwLAogCS5pb2N0bAkJPSB2aWNhbV9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCmluZGV4IDM2MDVhNmYuLmJmZjk0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMKQEAgLTM0OTAsNiArMzQ5MCw3IEBACiAJLnJlbGVhc2UgPSB3OTk2OGNmX3JlbGVhc2UsCiAJLnJlYWQgPSAgICB3OTk2OGNmX3JlYWQsCiAJLmlvY3RsID0gICB3OTk2OGNmX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLm1tYXAgPSAgICB3OTk2OGNmX21tYXAsCiAJLmxsc2VlayA9ICBub19sbHNlZWssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggYWYxODM1NS4uNGU5NjM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIAkJCX0gd2hpbGUgKHJldHZhbCAhPSA1ICYmIHJldHZhbCAhPSBFTk9ERVYpOwogCiAJCQlpZiAocmV0dmFsICE9IDUpIHsKLQkJCQllcnIoIiVzIC0gZmFpbGVkIHRvIHJldHJlaXZlIHNlcmlhbCBsaW5lIHNldHRpbmdzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOwogCQkJCXJldHVybiByZXR2YWw7CiAJCQl9IGVsc2UgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCA4YmM4MzM3Li40ZGQ2ODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKnQ7CiAKLQkvKiBMaXN0IHRyb3VnaCBrbm93IGRldmljZXMgYW5kIHNlZSBpZiB0aGUgdXNiIGlkIG1hdGNoZXMgKi8KKwkvKiBDaGVjayBpZiB0aGUgdXNiIGlkIG1hdGNoZXMgYSBrbm93biBkZXZpY2UgKi8KIAlsaXN0X2Zvcl9lYWNoKHAsICZ1c2Jfc2VyaWFsX2RyaXZlcl9saXN0KSB7CiAJCXQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciwgZHJpdmVyX2xpc3QpOwogCQlpZCA9IHVzYl9tYXRjaF9pZChpZmFjZSwgdC0+aWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9tb25pdG9yLmMKaW5kZXggZWE3Yzg2My4uN2Y5ODM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jCkBAIC00MjMsNyArNDIzLDcgQEAKIC8qCiAgKiBQcm9iZSBkaXNwbGF5IG9uIGJvdGggcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGNhcmQncyBjb25uZWN0b3IgKGlmIGFueSkKICAqIGJ5IHZhcmlvdXMgYXZhaWxhYmxlIHRlY2huaXF1ZXMgKGkyYywgT0YgZGV2aWNlIHRyZWUsIEJJT1MsIC4uLikgYW5kCi0gKiB0cnkgdG8gcmV0cmVpdmUgRURJRC4gVGhlIGFsZ29yaXRobSBoZXJlIGNvbWVzIGZyb20gWEZyZWUncyByYWRlb24KKyAqIHRyeSB0byByZXRyaWV2ZSBFRElELiBUaGUgYWxnb3JpdGhtIGhlcmUgY29tZXMgZnJvbSBYRnJlZSdzIHJhZGVvbgogICogZHJpdmVyCiAgKi8KIHZvaWQgX19kZXZpbml0IHJhZGVvbl9wcm9iZV9zY3JlZW5zKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwppbmRleCBhOTMwMGY5Li41NWEzNTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vTWFrZWZpbGUKaW5kZXggZDAyNDRjMDQuLjRlZjVjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDcgQEAKIAogIyBIb3cgdG8gZ2VuZXJhdGUgbG9nbydzCiAKLSMgVXNlIGxvZ28tY2ZpbGVzIHRvIHJldHJlaXZlIGxpc3Qgb2YgLmMgZmlsZXMgdG8gYmUgYnVpbHQKKyMgVXNlIGxvZ28tY2ZpbGVzIHRvIHJldHJpZXZlIGxpc3Qgb2YgLmMgZmlsZXMgdG8gYmUgYnVpbHQKIGxvZ28tY2ZpbGVzID0gJChub3RkaXIgJChwYXRzdWJzdCAlLiQoMiksICUuYywgXAogICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoc3JjdHJlZSkvJChzcmMpLyokKDEpLiQoMikpKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IDJlYTEzNTQuLjA4N2U1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTE3OCw3ICsxNzgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hc3NhYmV0Lmg+CkBAIC0xNDU1LDcgKzE0NTQsMTEgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNhMTEwMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaTsKLQlpbnQgcmV0OworCWludCByZXQsIGlycTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKDB4YjAxMDAwMDAsIDB4MTAwMDAsICJMQ0QiKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE0NzAsNyArMTQ3Myw3IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfTENELCBzYTExMDBmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBzYTExMDBmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsCiAJCQkgICJMQ0QiLCBmYmkpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzYTExMDBmYjogcmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKQEAgLTE0OTIsNyArMTQ5NSw3IEBACiAKIAlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZmFpbGVkOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCWZiaS0+ZnJlcV90cmFuc2l0aW9uLm5vdGlmaWVyX2NhbGwgPSBzYTExMDBmYl9mcmVxX3RyYW5zaXRpb247CkBAIC0xNTA0LDcgKzE1MDcsOSBAQAogCS8qIFRoaXMgZHJpdmVyIGNhbm5vdCBiZSB1bmxvYWRlZCBhdCB0aGUgbW9tZW50ICovCiAJcmV0dXJuIDA7CiAKLWZhaWxlZDoKKyBlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBmYmkpOworIGZhaWxlZDoKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShmYmkpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbigweGIwMTAwMDAwLCAweDEwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvS2NvbmZpZyBiL2RyaXZlcnMvdzEvS2NvbmZpZwppbmRleCA5YTFlMDBkLi40YmFmNjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL0tjb25maWcKKysrIGIvZHJpdmVycy93MS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogY29uZmlnIFcxCiAJdHJpc3RhdGUgIkRhbGxhcydzIDEtd2lyZSBzdXBwb3J0IgogCS0tLWhlbHAtLS0KLQkgIERhbGxhcydzIDEtd2lyZSBidXMgaXMgdXNlZnVsbCB0byBjb25uZWN0IHNsb3cgMS1waW4gZGV2aWNlcworCSAgRGFsbGFzJ3MgMS13aXJlIGJ1cyBpcyB1c2VmdWwgdG8gY29ubmVjdCBzbG93IDEtcGluIGRldmljZXMKIAkgIHN1Y2ggYXMgaUJ1dHRvbnMgYW5kIHRoZXJtYWwgc2Vuc29ycy4KIAogCSAgSWYgeW91IHdhbnQgVzEgc3VwcG9ydCwgeW91IHNob3VsZCBzYXkgWSBoZXJlLgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCBkOTMzZWYxLi5hMTdiMjg4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNjYzLDcgKzY2Myw3IEBACiB9CiAKIC8qKgotICogdjlmc192ZnNfZ2V0YXR0ciAtIHJldHJlaXZlIGZpbGUgbWV0YWRhdGEKKyAqIHY5ZnNfdmZzX2dldGF0dHIgLSByZXRyaWV2ZSBmaWxlIG1ldGFkYXRhCiAgKiBAbW50IC0gbW91bnQgaW5mb3JtYXRpb24KICAqIEBkZW50cnkgLSBmaWxlIHRvIGdldCBhdHRyaWJ1dGVzIG9uCiAgKiBAc3RhdCAtIG1ldGFkYXRhIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9pbm9kZS5jIGIvZnMvYWZmcy9pbm9kZS5jCmluZGV4IDllYmU4ODEuLjQ0ZDQzOWMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvaW5vZGUuYworKysgYi9mcy9hZmZzL2lub2RlLmMKQEAgLTI0NCwxMCArMjQ0LDEwIEBACiAJcHJfZGVidWcoIkFGRlM6IHB1dF9pbm9kZShpbm89JWx1LCBubGluaz0ldSlcbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOwogCWFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7CiAJaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgPT0gMSkgewotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWlmIChpbm9kZS0+aV9zaXplICE9IEFGRlNfSShpbm9kZSktPm1tdV9wcml2YXRlKQogCQkJYWZmc190cnVuY2F0ZShpbm9kZSk7Ci0JCXVwKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mcy9yb290LmMgYi9mcy9hdXRvZnMvcm9vdC5jCmluZGV4IGExYWIxYzAuLjgwODEzNGEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mcy9yb290LmMKKysrIGIvZnMvYXV0b2ZzL3Jvb3QuYwpAQCAtMjI5LDkgKzIyOSw5IEBACiAJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9BVVRPRlNfUEVORElORzsKIAlkX2FkZChkZW50cnksIE5VTEwpOwogCi0JdXAoJmRpci0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlhdXRvZnNfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKLQlkb3duKCZkaXItPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgc3RpbGwgcGVuZGluZywgY2hlY2sgaWYgd2UgaGFkIHRvIGhhbmRsZQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCAyMjQxNDA1Li41NDFiMTllIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtNDg5LDkgKzQ4OSw5IEBACiAJZF9hZGQoZGVudHJ5LCBOVUxMKTsKIAogCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpIHsKLQkJdXAoJmRpci0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJCShkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkoZGVudHJ5LCBuZCk7Ci0JCWRvd24oJmRpci0+aV9zZW0pOworCQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCAyNTY4ZWI0Li45Y2NjN2Q4IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCisrKyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTU4OCwxMSArNTg4LDExIEBACiAJCWNhc2UgMjogc2V0X2JpdChFbmFibGVkLCAmZS0+ZmxhZ3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgMzogcm9vdCA9IGRnZXQoZmlsZS0+Zl92ZnNtbnQtPm1udF9zYi0+c19yb290KTsKLQkJCWRvd24oJnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJCQlraWxsX25vZGUoZSk7CiAKLQkJCXVwKCZyb290LT5kX2lub2RlLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJZHB1dChyb290KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OiByZXR1cm4gcmVzOwpAQCAtNjIyLDcgKzYyMiw3IEBACiAJCXJldHVybiBQVFJfRVJSKGUpOwogCiAJcm9vdCA9IGRnZXQoc2ItPnNfcm9vdCk7Ci0JZG93bigmcm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGUtPm5hbWUsIHJvb3QsIHN0cmxlbihlLT5uYW1lKSk7CiAJZXJyID0gUFRSX0VSUihkZW50cnkpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKQEAgLTY1OCw3ICs2NTgsNyBAQAogb3V0MjoKIAlkcHV0KGRlbnRyeSk7CiBvdXQ6Ci0JdXAoJnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRwdXQocm9vdCk7CiAKIAlpZiAoZXJyKSB7CkBAIC03MDMsMTIgKzcwMywxMiBAQAogCQljYXNlIDE6IGVuYWJsZWQgPSAwOyBicmVhazsKIAkJY2FzZSAyOiBlbmFibGVkID0gMTsgYnJlYWs7CiAJCWNhc2UgMzogcm9vdCA9IGRnZXQoZmlsZS0+Zl92ZnNtbnQtPm1udF9zYi0+c19yb290KTsKLQkJCWRvd24oJnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmVudHJpZXMpKQogCQkJCWtpbGxfbm9kZShsaXN0X2VudHJ5KGVudHJpZXMubmV4dCwgTm9kZSwgbGlzdCkpOwogCi0JCQl1cCgmcm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAkJCWRwdXQocm9vdCk7CiAJCWRlZmF1bHQ6IHJldHVybiByZXM7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBlMGRmOTRjMy4uNmU1MDM0NiAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCWxvZmZfdCBzaXplOwogCWxvZmZfdCByZXR2YWw7CiAKLQlkb3duKCZiZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmJkX2lub2RlLT5pX211dGV4KTsKIAlzaXplID0gaV9zaXplX3JlYWQoYmRfaW5vZGUpOwogCiAJc3dpdGNoIChvcmlnaW4pIHsKQEAgLTIxOSw3ICsyMTksNyBAQAogCQl9CiAJCXJldHZhbCA9IG9mZnNldDsKIAl9Ci0JdXAoJmJkX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZiZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAkKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggNTVmMDk3NWEuLjY0NjZiYzhhIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMzUyLDExICszNTIsMTEgQEAKIAkgKiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcnMsCiAJICogd2hpY2ggY291bGQgY2F1c2UgbGl2ZWxvY2tzIGluIGZzeW5jX2J1ZmZlcnNfbGlzdAogCSAqLwotCWRvd24oJm1hcHBpbmctPmhvc3QtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZtYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKIAllcnIgPSBmaWxlLT5mX29wLT5mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSwgZGF0YXN5bmMpOwogCWlmICghcmV0KQogCQlyZXQgPSBlcnI7Ci0JdXAoJm1hcHBpbmctPmhvc3QtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOwogCWVyciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwogCWlmICghcmV0KQogCQlyZXQgPSBlcnI7CkBAIC0yMzM4LDcgKzIzMzgsNyBAQAogCV9fYmxvY2tfY29tbWl0X3dyaXRlKGlub2RlLHBhZ2UsZnJvbSx0byk7CiAJLyoKIAkgKiBObyBuZWVkIHRvIHVzZSBpX3NpemVfcmVhZCgpIGhlcmUsIHRoZSBpX3NpemUKLQkgKiBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCBpX3NlbS4KKwkgKiBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCBpX211dGV4LgogCSAqLwogCWlmIChwb3MgPiBpbm9kZS0+aV9zaXplKSB7CiAJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDJhMTNhMmIuLmUxMDIxM2IgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtODYwLDkgKzg2MCw5IEBACiAJCQkJRGVsZXRlT3Bsb2NrUUVudHJ5KG9wbG9ja19pdGVtKTsKIAkJCQkvKiBjYW4gbm90IGdyYWIgaW5vZGUgc2VtIGhlcmUgc2luY2UgaXQgd291bGQKIAkJCQlkZWFkbG9jayB3aGVuIG9wbG9jayByZWNlaXZlZCBvbiBkZWxldGUgCi0JCQkJc2luY2UgdmZzX3VubGluayBob2xkcyB0aGUgaV9zZW0gYWNyb3NzCisJCQkJc2luY2UgdmZzX3VubGluayBob2xkcyB0aGUgaV9tdXRleCBhY3Jvc3MKIAkJCQl0aGUgY2FsbCAqLwotCQkJCS8qIGRvd24oJmlub2RlLT5pX3NlbSk7Ki8KKwkJCQkvKiBtdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ki8KIAkJCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQkJCQlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKIAkJCQkJaWYoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID09IDApIHsKQEAgLTg3MSw3ICs4NzEsNyBAQAogCQkJCQl9CiAJCQkJfSBlbHNlCiAJCQkJCXJjID0gMDsKLQkJCQkvKiB1cCgmaW5vZGUtPmlfc2VtKTsqLworCQkJCS8qIG11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOyovCiAJCQkJaWYgKHJjKQogCQkJCQlDSUZTX0koaW5vZGUpLT53cml0ZV9iZWhpbmRfcmMgPSByYzsKIAkJCQljRllJKDEsKCJPcGxvY2sgZmx1c2ggaW5vZGUgJXAgcmMgJWQiLGlub2RlLHJjKSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggOTU1OGY1MS4uM2ViY2U5NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMTA0MCw5ICsxMDQwLDkgQEAKIAl9CiAKIAkvKiBjYW4gbm90IGdyYWIgdGhpcyBzZW0gc2luY2Uga2VybmVsIGZpbGVzeXMgbG9ja2luZyBkb2N1bWVudGF0aW9uCi0JICAgaW5kaWNhdGVzIGlfc2VtIG1heSBiZSB0YWtlbiBieSB0aGUga2VybmVsIG9uIGxvb2t1cCBhbmQgcmVuYW1lCi0JICAgd2hpY2ggY291bGQgZGVhZGxvY2sgaWYgd2UgZ3JhYiB0aGUgaV9zZW0gaGVyZSBhcyB3ZWxsICovCi0vKglkb3duKCZkaXJlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOyovCisJICAgaW5kaWNhdGVzIGlfbXV0ZXggbWF5IGJlIHRha2VuIGJ5IHRoZSBrZXJuZWwgb24gbG9va3VwIGFuZCByZW5hbWUKKwkgICB3aGljaCBjb3VsZCBkZWFkbG9jayBpZiB3ZSBncmFiIHRoZSBpX211dGV4IGhlcmUgYXMgd2VsbCAqLworLyoJbXV0ZXhfbG9jaygmZGlyZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOyovCiAJLyogbmVlZCB0byB3cml0ZSBvdXQgZGlydHkgcGFnZXMgaGVyZSAgKi8KIAlpZiAoZGlyZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZykgewogCQkvKiBkbyB3ZSBuZWVkIHRvIGxvY2sgaW5vZGUgdW50aWwgYWZ0ZXIgaW52YWxpZGF0ZSBjb21wbGV0ZXMKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJCQl9CiAJCX0KIAl9Ci0vKgl1cCgmZGlyZW50cnktPmRfaW5vZGUtPmlfc2VtKTsgKi8KKy8qCW11dGV4X3VubG9jaygmZGlyZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOyAqLwogCQogCWtmcmVlKGZ1bGxfcGF0aCk7CiAJRnJlZVhpZCh4aWQpOwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9kaXIuYyBiL2ZzL2NvZGEvZGlyLmMKaW5kZXggMjM5MTc2Ni4uOGYxYTUxNyAxMDA2NDQKLS0tIGEvZnMvY29kYS9kaXIuYworKysgYi9mcy9jb2RhL2Rpci5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAljb2RhX3Zmc19zdGF0LnJlYWRkaXIrKzsKIAogCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCWRvd24oJmhvc3RfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZob3N0X2lub2RlLT5pX211dGV4KTsKIAlob3N0X2ZpbGUtPmZfcG9zID0gY29kYV9maWxlLT5mX3BvczsKIAogCWlmICghaG9zdF9maWxlLT5mX29wLT5yZWFkZGlyKSB7CkBAIC00NzUsNyArNDc1LDcgQEAKIAl9CiBvdXQ6CiAJY29kYV9maWxlLT5mX3BvcyA9IGhvc3RfZmlsZS0+Zl9wb3M7Ci0JdXAoJmhvc3RfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmhvc3RfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZmlsZS5jIGIvZnMvY29kYS9maWxlLmMKaW5kZXggZTZiYzAyMi4uMzBiNDYzMCAxMDA2NDQKLS0tIGEvZnMvY29kYS9maWxlLmMKKysrIGIvZnMvY29kYS9maWxlLmMKQEAgLTc3LDE0ICs3NywxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCWRvd24oJmNvZGFfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZjb2RhX2lub2RlLT5pX211dGV4KTsKIAogCXJldCA9IGhvc3RfZmlsZS0+Zl9vcC0+d3JpdGUoaG9zdF9maWxlLCBidWYsIGNvdW50LCBwcG9zKTsKIAogCWNvZGFfaW5vZGUtPmlfc2l6ZSA9IGhvc3RfaW5vZGUtPmlfc2l6ZTsKIAljb2RhX2lub2RlLT5pX2Jsb2NrcyA9IChjb2RhX2lub2RlLT5pX3NpemUgKyA1MTEpID4+IDk7CiAJY29kYV9pbm9kZS0+aV9tdGltZSA9IGNvZGFfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCXVwKCZjb2RhX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjb2RhX2lub2RlLT5pX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNzIsOSArMjcyLDkgQEAKIAlpZiAoaG9zdF9maWxlLT5mX29wICYmIGhvc3RfZmlsZS0+Zl9vcC0+ZnN5bmMpIHsKIAkJaG9zdF9kZW50cnkgPSBob3N0X2ZpbGUtPmZfZGVudHJ5OwogCQlob3N0X2lub2RlID0gaG9zdF9kZW50cnktPmRfaW5vZGU7Ci0JCWRvd24oJmhvc3RfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfbG9jaygmaG9zdF9pbm9kZS0+aV9tdXRleCk7CiAJCWVyciA9IGhvc3RfZmlsZS0+Zl9vcC0+ZnN5bmMoaG9zdF9maWxlLCBob3N0X2RlbnRyeSwgZGF0YXN5bmMpOwotCQl1cCgmaG9zdF9pbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmhvc3RfaW5vZGUtPmlfbXV0ZXgpOwogCX0KIAogCWlmICggIWVyciAmJiAhZGF0YXN5bmMgKSB7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQzYTI1MDguLjU1ZDlhM2EgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0yMDcsMjQ0ICsyMDcsNiBAQAogCXJldHVybiBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKIH0KIAotc3RydWN0IHZpZGVvX3R1bmVyMzIgewotCWNvbXBhdF9pbnRfdCB0dW5lcjsKLQljaGFyIG5hbWVbMzJdOwotCWNvbXBhdF91bG9uZ190IHJhbmdlbG93LCByYW5nZWhpZ2g7Ci0JdTMyIGZsYWdzOwkvKiBJdCBpcyByZWFsbHkgdTMyIGluIHZpZGVvZGV2LmggKi8KLQl1MTYgbW9kZSwgc2lnbmFsOwotfTsKLQotc3RhdGljIGludCBnZXRfdmlkZW9fdHVuZXIzMihzdHJ1Y3QgdmlkZW9fdHVuZXIgKmtwLCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMiBfX3VzZXIgKnVwKQotewotCWludCBpOwotCi0JaWYoZ2V0X3VzZXIoa3AtPnR1bmVyLCAmdXAtPnR1bmVyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JZm9yKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJX19nZXRfdXNlcihrcC0+bmFtZVtpXSwgJnVwLT5uYW1lW2ldKTsKLQlfX2dldF91c2VyKGtwLT5yYW5nZWxvdywgJnVwLT5yYW5nZWxvdyk7Ci0JX19nZXRfdXNlcihrcC0+cmFuZ2VoaWdoLCAmdXAtPnJhbmdlaGlnaCk7Ci0JX19nZXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpOwotCV9fZ2V0X3VzZXIoa3AtPm1vZGUsICZ1cC0+bW9kZSk7Ci0JX19nZXRfdXNlcihrcC0+c2lnbmFsLCAmdXAtPnNpZ25hbCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3ZpZGVvX3R1bmVyMzIoc3RydWN0IHZpZGVvX3R1bmVyICprcCwgc3RydWN0IHZpZGVvX3R1bmVyMzIgX191c2VyICp1cCkKLXsKLQlpbnQgaTsKLQotCWlmKHB1dF91c2VyKGtwLT50dW5lciwgJnVwLT50dW5lcikpCi0JCXJldHVybiAtRUZBVUxUOwotCWZvcihpID0gMDsgaSA8IDMyOyBpKyspCi0JCV9fcHV0X3VzZXIoa3AtPm5hbWVbaV0sICZ1cC0+bmFtZVtpXSk7Ci0JX19wdXRfdXNlcihrcC0+cmFuZ2Vsb3csICZ1cC0+cmFuZ2Vsb3cpOwotCV9fcHV0X3VzZXIoa3AtPnJhbmdlaGlnaCwgJnVwLT5yYW5nZWhpZ2gpOwotCV9fcHV0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKTsKLQlfX3B1dF91c2VyKGtwLT5tb2RlLCAmdXAtPm1vZGUpOwotCV9fcHV0X3VzZXIoa3AtPnNpZ25hbCwgJnVwLT5zaWduYWwpOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgdmlkZW9fYnVmZmVyMzIgewotCWNvbXBhdF9jYWRkcl90IGJhc2U7Ci0JY29tcGF0X2ludF90IGhlaWdodCwgd2lkdGgsIGRlcHRoLCBieXRlc3BlcmxpbmU7Ci19OwotCi1zdGF0aWMgaW50IGdldF92aWRlb19idWZmZXIzMihzdHJ1Y3QgdmlkZW9fYnVmZmVyICprcCwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyIF9fdXNlciAqdXApCi17Ci0JdTMyIHRtcDsKLQotCWlmIChnZXRfdXNlcih0bXAsICZ1cC0+YmFzZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogVGhpcyBpcyBhY3R1YWxseSBhIHBoeXNpY2FsIGFkZHJlc3Mgc3RvcmVkCi0JICogYXMgYSB2b2lkIHBvaW50ZXIuCi0JICovCi0Ja3AtPmJhc2UgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSB0bXA7Ci0KLQlfX2dldF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KTsKLQlfX2dldF91c2VyKGtwLT53aWR0aCwgJnVwLT53aWR0aCk7Ci0JX19nZXRfdXNlcihrcC0+ZGVwdGgsICZ1cC0+ZGVwdGgpOwotCV9fZ2V0X3VzZXIoa3AtPmJ5dGVzcGVybGluZSwgJnVwLT5ieXRlc3BlcmxpbmUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHB1dF92aWRlb19idWZmZXIzMihzdHJ1Y3QgdmlkZW9fYnVmZmVyICprcCwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyIF9fdXNlciAqdXApCi17Ci0JdTMyIHRtcCA9ICh1MzIpKCh1bnNpZ25lZCBsb25nKWtwLT5iYXNlKTsKLQotCWlmKHB1dF91c2VyKHRtcCwgJnVwLT5iYXNlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JX19wdXRfdXNlcihrcC0+aGVpZ2h0LCAmdXAtPmhlaWdodCk7Ci0JX19wdXRfdXNlcihrcC0+d2lkdGgsICZ1cC0+d2lkdGgpOwotCV9fcHV0X3VzZXIoa3AtPmRlcHRoLCAmdXAtPmRlcHRoKTsKLQlfX3B1dF91c2VyKGtwLT5ieXRlc3BlcmxpbmUsICZ1cC0+Ynl0ZXNwZXJsaW5lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHZpZGVvX2NsaXAzMiB7Ci0JczMyIHgsIHksIHdpZHRoLCBoZWlnaHQ7CS8qIEl0cyByZWFsbHkgczMyIGluIHZpZGVvZGV2LmggKi8KLQljb21wYXRfY2FkZHJfdCBuZXh0OwotfTsKLQotc3RydWN0IHZpZGVvX3dpbmRvdzMyIHsKLQl1MzIgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2hyb21ha2V5LCBmbGFnczsKLQljb21wYXRfY2FkZHJfdCBjbGlwczsKLQljb21wYXRfaW50X3QgY2xpcGNvdW50OwotfTsKLQotLyogWW91IGdldCBiYWNrIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjbGlwcy4uLiAqLwotc3RhdGljIGludCBwdXRfdmlkZW9fd2luZG93MzIoc3RydWN0IHZpZGVvX3dpbmRvdyAqa3AsIHN0cnVjdCB2aWRlb193aW5kb3czMiBfX3VzZXIgKnVwKQotewotCWlmKHB1dF91c2VyKGtwLT54LCAmdXAtPngpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlfX3B1dF91c2VyKGtwLT55LCAmdXAtPnkpOwotCV9fcHV0X3VzZXIoa3AtPndpZHRoLCAmdXAtPndpZHRoKTsKLQlfX3B1dF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KTsKLQlfX3B1dF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KTsKLQlfX3B1dF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncyk7Ci0JX19wdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgVklESU9DR1RVTkVSMzIJCV9JT1dSKCd2Jyw0LCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMikKLSNkZWZpbmUgVklESU9DU1RVTkVSMzIJCV9JT1coJ3YnLDUsIHN0cnVjdCB2aWRlb190dW5lcjMyKQotI2RlZmluZSBWSURJT0NHV0lOMzIJCV9JT1IoJ3YnLDksIHN0cnVjdCB2aWRlb193aW5kb3czMikKLSNkZWZpbmUgVklESU9DU1dJTjMyCQlfSU9XKCd2JywxMCwgc3RydWN0IHZpZGVvX3dpbmRvdzMyKQotI2RlZmluZSBWSURJT0NHRkJVRjMyCQlfSU9SKCd2JywxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyKQotI2RlZmluZSBWSURJT0NTRkJVRjMyCQlfSU9XKCd2JywxMiwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyKQotI2RlZmluZSBWSURJT0NHRlJFUTMyCQlfSU9SKCd2JywxNCwgdTMyKQotI2RlZmluZSBWSURJT0NTRlJFUTMyCQlfSU9XKCd2JywxNSwgdTMyKQotCi1lbnVtIHsKLQlNYXhDbGlwcyA9ICh+MFUtc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKS9zaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApCi19OwotCi1zdGF0aWMgaW50IGRvX3NldF93aW5kb3codW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgdmlkZW9fd2luZG93MzIgX191c2VyICp1cCA9IGNvbXBhdF9wdHIoYXJnKTsKLQlzdHJ1Y3QgdmlkZW9fd2luZG93IF9fdXNlciAqdnc7Ci0Jc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICpwOwotCWludCBuY2xpcHM7Ci0JdTMyIG47Ci0KLQlpZiAoZ2V0X3VzZXIobmNsaXBzLCAmdXAtPmNsaXBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogUGVjdWxpYXIgaW50ZXJmYWNlLi4uICovCi0JaWYgKG5jbGlwcyA8IDApCi0JCW5jbGlwcyA9IFZJREVPX0NMSVBNQVBfU0laRTsKLQotCWlmIChuY2xpcHMgPiBNYXhDbGlwcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl2dyA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93KSArCi0JCQkJICAgIG5jbGlwcyAqIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkpOwotCi0JcCA9IG5jbGlwcyA/IChzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKikodncgKyAxKSA6IE5VTEw7Ci0KLQlpZiAoZ2V0X3VzZXIobiwgJnVwLT54KSB8fCBwdXRfdXNlcihuLCAmdnctPngpIHx8Ci0JICAgIGdldF91c2VyKG4sICZ1cC0+eSkgfHwgcHV0X3VzZXIobiwgJnZ3LT55KSB8fAotCSAgICBnZXRfdXNlcihuLCAmdXAtPndpZHRoKSB8fCBwdXRfdXNlcihuLCAmdnctPndpZHRoKSB8fAotCSAgICBnZXRfdXNlcihuLCAmdXAtPmhlaWdodCkgfHwgcHV0X3VzZXIobiwgJnZ3LT5oZWlnaHQpIHx8Ci0JICAgIGdldF91c2VyKG4sICZ1cC0+Y2hyb21ha2V5KSB8fCBwdXRfdXNlcihuLCAmdnctPmNocm9tYWtleSkgfHwKLQkgICAgZ2V0X3VzZXIobiwgJnVwLT5mbGFncykgfHwgcHV0X3VzZXIobiwgJnZ3LT5mbGFncykgfHwKLQkgICAgZ2V0X3VzZXIobiwgJnVwLT5jbGlwY291bnQpIHx8IHB1dF91c2VyKG4sICZ2dy0+Y2xpcGNvdW50KSB8fAotCSAgICBnZXRfdXNlcihuLCAmdXAtPmNsaXBzKSB8fCBwdXRfdXNlcihwLCAmdnctPmNsaXBzKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAobmNsaXBzKSB7Ci0JCXN0cnVjdCB2aWRlb19jbGlwMzIgX191c2VyICp1ID0gY29tcGF0X3B0cihuKTsKLQkJaW50IGk7Ci0JCWlmICghdSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlmb3IgKGkgPSAwOyBpIDwgbmNsaXBzOyBpKyssIHUrKywgcCsrKSB7Ci0JCQlzMzIgdjsKLQkJCWlmIChnZXRfdXNlcih2LCAmdS0+eCkgfHwKLQkJCSAgICBwdXRfdXNlcih2LCAmcC0+eCkgfHwKLQkJCSAgICBnZXRfdXNlcih2LCAmdS0+eSkgfHwKLQkJCSAgICBwdXRfdXNlcih2LCAmcC0+eSkgfHwKLQkJCSAgICBnZXRfdXNlcih2LCAmdS0+d2lkdGgpIHx8Ci0JCQkgICAgcHV0X3VzZXIodiwgJnAtPndpZHRoKSB8fAotCQkJICAgIGdldF91c2VyKHYsICZ1LT5oZWlnaHQpIHx8Ci0JCQkgICAgcHV0X3VzZXIodiwgJnAtPmhlaWdodCkgfHwKLQkJCSAgICBwdXRfdXNlcihOVUxMLCAmcC0+bmV4dCkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBWSURJT0NTV0lOLCAodW5zaWduZWQgbG9uZylwKTsKLX0KLQotc3RhdGljIGludCBkb192aWRlb19pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXVuaW9uIHsKLQkJc3RydWN0IHZpZGVvX3R1bmVyIHZ0OwotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIHZiOwotCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHZ3OwotCQl1bnNpZ25lZCBsb25nIHZ4OwotCX0ga2FyZzsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jdm9pZCBfX3VzZXIgKnVwID0gY29tcGF0X3B0cihhcmcpOwotCWludCBlcnIgPSAwOwotCi0JLyogRmlyc3QsIGNvbnZlcnQgdGhlIGNvbW1hbmQuICovCi0Jc3dpdGNoKGNtZCkgewotCWNhc2UgVklESU9DR1RVTkVSMzI6IGNtZCA9IFZJRElPQ0dUVU5FUjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NTVFVORVIzMjogY21kID0gVklESU9DU1RVTkVSOyBicmVhazsKLQljYXNlIFZJRElPQ0dXSU4zMjogY21kID0gVklESU9DR1dJTjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NHRkJVRjMyOiBjbWQgPSBWSURJT0NHRkJVRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NTRkJVRjMyOiBjbWQgPSBWSURJT0NTRkJVRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NHRlJFUTMyOiBjbWQgPSBWSURJT0NHRlJFUTsgYnJlYWs7Ci0JY2FzZSBWSURJT0NTRlJFUTMyOiBjbWQgPSBWSURJT0NTRlJFUTsgYnJlYWs7Ci0JfTsKLQotCXN3aXRjaChjbWQpIHsKLQljYXNlIFZJRElPQ1NUVU5FUjoKLQljYXNlIFZJRElPQ0dUVU5FUjoKLQkJZXJyID0gZ2V0X3ZpZGVvX3R1bmVyMzIoJmthcmcudnQsIHVwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NGQlVGOgotCQllcnIgPSBnZXRfdmlkZW9fYnVmZmVyMzIoJmthcmcudmIsIHVwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NGUkVROgotCQllcnIgPSBnZXRfdXNlcihrYXJnLnZ4LCAodTMyIF9fdXNlciAqKXVwKTsKLQkJYnJlYWs7Ci0JfTsKLQlpZihlcnIpCi0JCWdvdG8gb3V0OwotCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKSZrYXJnKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCWlmKGVyciA9PSAwKSB7Ci0JCXN3aXRjaChjbWQpIHsKLQkJY2FzZSBWSURJT0NHVFVORVI6Ci0JCQllcnIgPSBwdXRfdmlkZW9fdHVuZXIzMigma2FyZy52dCwgdXApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURJT0NHV0lOOgotCQkJZXJyID0gcHV0X3ZpZGVvX3dpbmRvdzMyKCZrYXJnLnZ3LCB1cCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJRElPQ0dGQlVGOgotCQkJZXJyID0gcHV0X3ZpZGVvX2J1ZmZlcjMyKCZrYXJnLnZiLCB1cCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJRElPQ0dGUkVROgotCQkJZXJyID0gcHV0X3VzZXIoKCh1MzIpa2FyZy52eCksICh1MzIgX191c2VyICopdXApOwotCQkJYnJlYWs7Ci0JCX07Ci0JfQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0cnVjdCBjb21wYXRfZG14X2V2ZW50IHsKIAlkbXhfZXZlbnRfdAlldmVudDsKIAljb21wYXRfdGltZV90CXRpbWVTdGFtcDsKQEAgLTMwMTUsMTQgKzI3NzcsNiBAQAogI2lmZGVmIENPTkZJR19KQkRfREVCVUcKIEhBTkRMRV9JT0NUTChFWFQzX0lPQzMyX1dBSVRfRk9SX1JFQURPTkxZLCBkb19leHQzX2lvY3RsKQogI2VuZGlmCi1IQU5ETEVfSU9DVEwoVklESU9DR1RVTkVSMzIsIGRvX3ZpZGVvX2lvY3RsKQotSEFORExFX0lPQ1RMKFZJRElPQ1NUVU5FUjMyLCBkb192aWRlb19pb2N0bCkKLUhBTkRMRV9JT0NUTChWSURJT0NHV0lOMzIsIGRvX3ZpZGVvX2lvY3RsKQotSEFORExFX0lPQ1RMKFZJRElPQ1NXSU4zMiwgZG9fc2V0X3dpbmRvdykKLUhBTkRMRV9JT0NUTChWSURJT0NHRkJVRjMyLCBkb192aWRlb19pb2N0bCkKLUhBTkRMRV9JT0NUTChWSURJT0NTRkJVRjMyLCBkb192aWRlb19pb2N0bCkKLUhBTkRMRV9JT0NUTChWSURJT0NHRlJFUTMyLCBkb192aWRlb19pb2N0bCkKLUhBTkRMRV9JT0NUTChWSURJT0NTRlJFUTMyLCBkb192aWRlb19pb2N0bCkKIC8qIE9uZSBTTUIgaW9jdGwgbmVlZHMgdHJhbnNsYXRpb25zLiAqLwogI2RlZmluZSBTTUJfSU9DX0dFVE1PVU5UVUlEXzMyIF9JT1IoJ3UnLCAxLCBjb21wYXRfdWlkX3QpCiBIQU5ETEVfSU9DVEwoU01CX0lPQ19HRVRNT1VOVFVJRF8zMiwgZG9fc21iX2dldG1vdW50dWlkKQpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCBlNDhiNTM5Li5iNjY4ZWM2IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtMjg4LDEwICsyODgsMTAgQEAKIAogLyoKICAqIE9ubHkgc3ViZGlyZWN0b3JpZXMgY291bnQgaGVyZS4gIEZpbGVzIChDT05GSUdGU19OT1RfUElOTkVEKSBhcmUKLSAqIGF0dHJpYnV0ZXMgYW5kIGFyZSByZW1vdmVkIGJ5IHJtZGlyKCkuICBXZSByZWN1cnNlLCB0YWtpbmcgaV9zZW0KKyAqIGF0dHJpYnV0ZXMgYW5kIGFyZSByZW1vdmVkIGJ5IHJtZGlyKCkuICBXZSByZWN1cnNlLCB0YWtpbmcgaV9tdXRleAogICogb24gYWxsIGNoaWxkcmVuIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yIGRlZmF1bHQgZGV0YWNoLiAgSWYgdGhlCiAgKiByZXN1bHQgaXMgY2xlYW4sIHRoZW4gY29uZmlnZnNfZGV0YWNoX2dyb3VwKCkgd2lsbCBoYW5kbGUgZHJvcHBpbmcKLSAqIGlfc2VtLiAgSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZSBjYWxsZXIgd2lsbCBjbGVhbiB1cCB0aGUgaV9zZW0KKyAqIGlfbXV0ZXguICBJZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlIGNhbGxlciB3aWxsIGNsZWFuIHVwIHRoZSBpX211dGV4CiAgKiBob2xkZXJzIHZpYSBjb25maWdmc19kZXRhY2hfcm9sbGJhY2soKS4KICAqLwogc3RhdGljIGludCBjb25maWdmc19kZXRhY2hfcHJlcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCkBAIC0zMDksOCArMzA5LDggQEAKIAkJaWYgKHNkLT5zX3R5cGUgJiBDT05GSUdGU19OT1RfUElOTkVEKQogCQkJY29udGludWU7CiAJCWlmIChzZC0+c190eXBlICYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7Ci0JCQlkb3duKCZzZC0+c19kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKLQkJCS8qIE1hcmsgdGhhdCB3ZSd2ZSB0YWtlbiBpX3NlbSAqLworCQkJbXV0ZXhfbG9jaygmc2QtPnNfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwkJCS8qIE1hcmsgdGhhdCB3ZSd2ZSB0YWtlbiBpX211dGV4ICovCiAJCQlzZC0+c190eXBlIHw9IENPTkZJR0ZTX1VTRVRfRFJPUFBJTkc7CiAKIAkJCXJldCA9IGNvbmZpZ2ZzX2RldGFjaF9wcmVwKHNkLT5zX2RlbnRyeSk7CkBAIC0zMjcsNyArMzI3LDcgQEAKIH0KIAogLyoKLSAqIFdhbGsgdGhlIHRyZWUsIGRyb3BwaW5nIGlfc2VtIHdoZXJldmVyIENPTkZJR0ZTX1VTRVRfRFJPUFBJTkcgaXMKKyAqIFdhbGsgdGhlIHRyZWUsIGRyb3BwaW5nIGlfbXV0ZXggd2hlcmV2ZXIgQ09ORklHRlNfVVNFVF9EUk9QUElORyBpcwogICogc2V0LgogICovCiBzdGF0aWMgdm9pZCBjb25maWdmc19kZXRhY2hfcm9sbGJhY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpAQCAtMzQxLDcgKzM0MSw3IEBACiAKIAkJCWlmIChzZC0+c190eXBlICYgQ09ORklHRlNfVVNFVF9EUk9QUElORykgewogCQkJCXNkLT5zX3R5cGUgJj0gfkNPTkZJR0ZTX1VTRVRfRFJPUFBJTkc7Ci0JCQkJdXAoJnNkLT5zX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCQkJCW11dGV4X3VubG9jaygmc2QtPnNfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAkJCX0KIAkJfQogCX0KQEAgLTQyNCwxMSArNDI0LDExIEBACiAKIAkJLyoKIAkJICogRnJvbSBybWRpci91bnJlZ2lzdGVyLCBhIGNvbmZpZ2ZzX2RldGFjaF9wcmVwKCkgcGFzcwotCQkgKiBoYXMgdGFrZW4gb3VyIGlfc2VtIGZvciB1cy4gIERyb3AgaXQuCisJCSAqIGhhcyB0YWtlbiBvdXIgaV9tdXRleCBmb3IgdXMuICBEcm9wIGl0LgogCQkgKiBGcm9tIG1rZGlyL3JlZ2lzdGVyIGNsZWFudXAsIHRoZXJlIGlzIG5vIHNlbSBoZWxkLgogCQkgKi8KIAkJaWYgKHNkLT5zX3R5cGUgJiBDT05GSUdGU19VU0VUX0RST1BQSU5HKQotCQkJdXAoJmNoaWxkLT5kX2lub2RlLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJmNoaWxkLT5kX2lub2RlLT5pX211dGV4KTsKIAogCQlkX2RlbGV0ZShjaGlsZCk7CiAJCWRwdXQoY2hpbGQpOwpAQCAtNDkzLDExICs0OTMsMTEgQEAKIAkJLyogRllJLCB3ZSdyZSBmYWtpbmcgbWtkaXIgaGVyZQogCQkgKiBJJ20gbm90IHN1cmUgd2UgbmVlZCB0aGlzIHNlbWFwaG9yZSwgYXMgd2UncmUgY2FsbGVkCiAJCSAqIGZyb20gb3VyIHBhcmVudCdzIG1rZGlyLiAgVGhhdCBob2xkcyBvdXIgcGFyZW50J3MKLQkJICogaV9zZW0sIHNvIGFmYWlrIGxvb2t1cCBjYW5ub3QgY29udGludWUgdGhyb3VnaCBvdXIKKwkJICogaV9tdXRleCwgc28gYWZhaWsgbG9va3VwIGNhbm5vdCBjb250aW51ZSB0aHJvdWdoIG91cgogCQkgKiBwYXJlbnQgdG8gZmluZCB1cywgbGV0IGFsb25lIG1lc3Mgd2l0aCBvdXIgdHJlZS4KLQkJICogVGhhdCBzYWlkLCB0YWtpbmcgb3VyIGlfc2VtIGlzIGNsb3NlciB0byBta2RpcgorCQkgKiBUaGF0IHNhaWQsIHRha2luZyBvdXIgaV9tdXRleCBpcyBjbG9zZXIgdG8gbWtkaXIKIAkJICogZW11bGF0aW9uLCBhbmQgc2hvdWxkbid0IGh1cnQuICovCi0JCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJCWZvciAoaSA9IDA7IGdyb3VwLT5kZWZhdWx0X2dyb3Vwc1tpXTsgaSsrKSB7CiAJCQluZXdfZ3JvdXAgPSBncm91cC0+ZGVmYXVsdF9ncm91cHNbaV07CkBAIC01MDcsNyArNTA3LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCi0JCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCX0KIAogCWlmIChyZXQpCkBAIC04NTYsNyArODU2LDcgQEAKIAlkb3duX3dyaXRlKCZjb25maWdmc19yZW5hbWVfc2VtKTsKIAlwYXJlbnQgPSBpdGVtLT5wYXJlbnQtPmRlbnRyeTsKIAotCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAluZXdfZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmV3X25hbWUsIHBhcmVudCwgc3RybGVuKG5ld19uYW1lKSk7CiAJaWYgKCFJU19FUlIobmV3X2RlbnRyeSkpIHsKQEAgLTg3Miw3ICs4NzIsNyBAQAogCQkJZXJyb3IgPSAtRUVYSVNUOwogCQlkcHV0KG5ld19kZW50cnkpOwogCX0KLQl1cCgmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXVwX3dyaXRlKCZjb25maWdmc19yZW5hbWVfc2VtKTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTg4NCw5ICs4ODQsOSBAQAogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogcGFyZW50X3NkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY29uZmlnZnNfbmV3X2RpcmVudChwYXJlbnRfc2QsIE5VTEwpOwotCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZmlsZS0+cHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07CiAKQEAgLTg5Nyw5ICs4OTcsOSBAQAogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogY3Vyc29yID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JZG93bigmZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlsaXN0X2RlbF9pbml0KCZjdXJzb3ItPnNfc2libGluZyk7Ci0JdXAoJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAogCXJlbGVhc2VfY29uZmlnZnNfZGlyZW50KGN1cnNvcik7CiAKQEAgLTk3NSw3ICs5NzUsNyBAQAogewogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwpAQCAtOTgzLDcgKzk4Myw3IEBACiAJCQlpZiAob2Zmc2V0ID49IDApCiAJCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl1cCgmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJCQlsaXN0X2FkZF90YWlsKCZjdXJzb3ItPnNfc2libGluZywgcCk7CiAJCX0KIAl9Ci0JdXAoJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gb2Zmc2V0OwogfQogCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCXNkID0gY29uZmlnZnNfc2ItPnNfcm9vdC0+ZF9mc2RhdGE7CiAJbGlua19ncm91cCh0b19jb25maWdfZ3JvdXAoc2QtPnNfZWxlbWVudCksIGdyb3VwKTsKIAotCWRvd24oJmNvbmZpZ2ZzX3NiLT5zX3Jvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZjb25maWdmc19zYi0+c19yb290LT5kX2lub2RlLT5pX211dGV4KTsKIAogCW5hbWUubmFtZSA9IGdyb3VwLT5jZ19pdGVtLmNpX25hbWU7CiAJbmFtZS5sZW4gPSBzdHJsZW4obmFtZS5uYW1lKTsKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAJZWxzZQogCQlkX2RlbGV0ZShkZW50cnkpOwogCi0JdXAoJmNvbmZpZ2ZzX3NiLT5zX3Jvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmNvbmZpZ2ZzX3NiLT5zX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKGRlbnRyeSkgewogCSAgICBkcHV0KGRlbnRyeSk7CkBAIC0xMDc5LDE4ICsxMDc5LDE4IEBACiAJCXJldHVybjsKIAl9CiAKLQlkb3duKCZjb25maWdmc19zYi0+c19yb290LT5kX2lub2RlLT5pX3NlbSk7Ci0JZG93bigmZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmY29uZmlnZnNfc2ItPnNfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoY29uZmlnZnNfZGV0YWNoX3ByZXAoZGVudHJ5KSkgewogCQlwcmludGsoS0VSTl9FUlIgImNvbmZpZ2ZzOiBUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1lbXB0eSBzdWJzeXN0ZW0hXG4iKTsKIAl9CiAJY29uZmlnZnNfZGV0YWNoX2dyb3VwKCZncm91cC0+Y2dfaXRlbSk7CiAJZGVudHJ5LT5kX2lub2RlLT5pX2ZsYWdzIHw9IFNfREVBRDsKLQl1cCgmZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJZF9kZWxldGUoZGVudHJ5KTsKIAotCXVwKCZjb25maWdmc19zYi0+c19yb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjb25maWdmc19zYi0+c19yb290LT5kX2lub2RlLT5pX211dGV4KTsKIAogCWRwdXQoZGVudHJ5KTsKIApkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZmlsZS5jIGIvZnMvY29uZmlnZnMvZmlsZS5jCmluZGV4IGFmMWZmYzkuLmMyNmNkNjEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2ZpbGUuYworKysgYi9mcy9jb25maWdmcy9maWxlLmMKQEAgLTMzNiw5ICszMzYsOSBAQAogCXVtb2RlX3QgbW9kZSA9IChhdHRyLT5jYV9tb2RlICYgU19JQUxMVUdPKSB8IFNfSUZSRUc7CiAJaW50IGVycm9yID0gMDsKIAotCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZXJyb3IgPSBjb25maWdmc19tYWtlX2RpcmVudChwYXJlbnRfc2QsIE5VTEwsICh2b2lkICopIGF0dHIsIG1vZGUsIHR5cGUpOwotCXVwKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9pbm9kZS5jIGIvZnMvY29uZmlnZnMvaW5vZGUuYwppbmRleCA2YjI3NGM2Li42NTc3YzU4IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9pbm9kZS5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAvKgogICogVW5oYXNoZXMgdGhlIGRlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGNvbmZpZ2ZzX2RpcmVudAotICogQ2FsbGVkIHdpdGggcGFyZW50IGlub2RlJ3MgaV9zZW0gaGVsZC4KKyAqIENhbGxlZCB3aXRoIHBhcmVudCBpbm9kZSdzIGlfbXV0ZXggaGVsZC4KICAqLwogdm9pZCBjb25maWdmc19kcm9wX2RlbnRyeShzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogc2QsIHN0cnVjdCBkZW50cnkgKiBwYXJlbnQpCiB7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogc2Q7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqIHBhcmVudF9zZCA9IGRpci0+ZF9mc2RhdGE7CiAKLQlkb3duKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICZwYXJlbnRfc2QtPnNfY2hpbGRyZW4sIHNfc2libGluZykgewogCQlpZiAoIXNkLT5zX2VsZW1lbnQpCiAJCQljb250aW51ZTsKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JdXAoJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2lub2RlLmMgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKaW5kZXggYTg2YWM0YS4uZDRmMWEyYyAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9pbm9kZS5jCisrKyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJfQogCiAJKmRlbnRyeSA9IE5VTEw7Ci0JZG93bigmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAkqZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOwogCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKIAkJaWYgKChtb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKQpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCQllcnJvciA9IGRlYnVnZnNfY3JlYXRlKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CiAJfSBlbHNlCiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwotCXVwKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNzMsNyArMjczLDcgQEAKIAlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlKQogCQlyZXR1cm47CiAKLQlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkZWJ1Z2ZzX3Bvc2l0aXZlKGRlbnRyeSkpIHsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewogCQkJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQpAQCAtMjgzLDcgKzI4Myw3IEBACiAJCWRwdXQoZGVudHJ5KTsKIAkJfQogCX0KLQl1cCgmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXNpbXBsZV9yZWxlYXNlX2ZzKCZkZWJ1Z2ZzX21vdW50LCAmZGVidWdmc19tb3VudF9jb3VudCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z2ZzX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9mcy9kZXZmcy9iYXNlLmMgYi9mcy9kZXZmcy9iYXNlLmMKaW5kZXggMTI3NDQyMi4uYjYyMTUyMSAxMDA2NDQKLS0tIGEvZnMvZGV2ZnMvYmFzZS5jCisrKyBiL2ZzL2RldmZzL2Jhc2UuYwpAQCAtMjE2MiwyNyArMjE2MiwyNyBAQAogCSAqCiAJICogbWFrZSBzdXJlIHRoYXQKIAkgKiAgIGRfaW5zdGFudGlhdGUgYWx3YXlzIHJ1bnMgdW5kZXIgbG9jawotCSAqICAgd2UgcmVsZWFzZSBpX3NlbSBsb2NrIGJlZm9yZSBnb2luZyB0byBzbGVlcAorCSAqICAgd2UgcmVsZWFzZSBpX211dGV4IGxvY2sgYmVmb3JlIGdvaW5nIHRvIHNsZWVwCiAJICoKIAkgKiB1bmZvcnR1bmF0ZWx5IHNvbWV0aW1lcyBkX3JldmFsaWRhdGUgaXMgY2FsbGVkIHdpdGgKLQkgKiBhbmQgc29tZXRpbWVzIHdpdGhvdXQgaV9zZW0gbG9jayBoZWxkLiBUaGUgZm9sbG93aW5nIGNoZWNrcworCSAqIGFuZCBzb21ldGltZXMgd2l0aG91dCBpX211dGV4IGxvY2sgaGVsZC4gVGhlIGZvbGxvd2luZyBjaGVja3MKIAkgKiBhdHRlbXB0IHRvIGRlZHVjZSB3aGVuIHdlIG5lZWQgdG8gYWRkIChhbmQgZHJvcCByZXNwLikgbG9jawogCSAqIGhlcmUuIFRoaXMgcmVsaWVzIG9uIGN1cnJlbnQgKDIuNi4yKSBjYWxsaW5nIGNvdmVudGlvbnM6CiAJICoKLQkgKiAgIGxvb2t1cF9oYXNoIGlzIGFsd2F5cyBydW4gdW5kZXIgaV9zZW0gYW5kIGlzIHBhc3NpbmcgTlVMTAorCSAqICAgbG9va3VwX2hhc2ggaXMgYWx3YXlzIHJ1biB1bmRlciBpX211dGV4IGFuZCBpcyBwYXNzaW5nIE5VTEwKIAkgKiAgIGFzIG5kCiAJICoKLQkgKiAgIG9wZW4oLi4uLE9fQ1JFQVRFLC4uLikgY2FsbHMgX2xvb2t1cF9oYXNoIHVuZGVyIGlfc2VtCisJICogICBvcGVuKC4uLixPX0NSRUFURSwuLi4pIGNhbGxzIF9sb29rdXBfaGFzaCB1bmRlciBpX211dGV4CiAJICogICBhbmQgc2V0cyBmbGFncyB0byBMT09LVVBfT1BFTnxMT09LVVBfQ1JFQVRFCiAJICoKIAkgKiAgIGFsbCBvdGhlciBpbnZvY2F0aW9ucyBvZiAtPmRfcmV2YWxpZGF0ZSBzZWVtIHRvIGhhcHBlbgotCSAqICAgb3V0c2lkZSBvZiBpX3NlbQorCSAqICAgb3V0c2lkZSBvZiBpX211dGV4CiAJICovCiAJbmVlZF9sb2NrID0gbmQgJiYKIAkgICAgKCEobmQtPmZsYWdzICYgTE9PS1VQX0NSRUFURSkgfHwgKG5kLT5mbGFncyAmIExPT0tVUF9QQVJFTlQpKTsKIAogCWlmIChuZWVkX2xvY2spCi0JCWRvd24oJmRpci0+aV9zZW0pOworCQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwogCiAJaWYgKGlzX2RldmZzZF9vcl9jaGlsZChmc19pbmZvKSkgewogCQlkZXZmc19oYW5kbGVfdCBkZSA9IGxvb2t1cF9pbmZvLT5kZTsKQEAgLTIyMjEsOSArMjIyMSw5IEBACiAJCWFkZF93YWl0X3F1ZXVlKCZsb29rdXBfaW5mby0+d2FpdF9xdWV1ZSwgJndhaXQpOwogCQlyZWFkX3VubG9jaygmcGFyZW50LT51LmRpci5sb2NrKTsKIAkJLyogYXQgdGhpcyBwb2ludCBpdCBpcyBhbHdheXMgKGhvcGVmdWxseSkgbG9ja2VkICovCi0JCXVwKCZkaXItPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwotCQlkb3duKCZkaXItPmlfc2VtKTsKKwkJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKIAkJLyoKIAkJICogVGhpcyBkb2VzIG5vdCBuZWVkIG5vciBzaG91bGQgcmVtb3ZlIHdhaXQgZnJvbSB3YWl0X3F1ZXVlLgogCQkgKiBXYWl0IHF1ZXVlIGhlYWQgaXMgbmV2ZXIgcmV1c2VkIC0gbm90aGluZyBpcyBldmVyIGFkZGVkIHRvIGl0CkBAIC0yMjM4LDcgKzIyMzgsNyBAQAogCiAgICAgICBvdXQ6CiAJaWYgKG5lZWRfbG9jaykKLQkJdXAoJmRpci0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJcmV0dXJuIDE7CiB9CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZF9yZXZhbGlkYXRlX3dhaXQgICovCiAKQEAgLTIyODQsOSArMjI4NCw5IEBACiAJLyogIFVubG9jayBkaXJlY3Rvcnkgc2VtYXBob3JlLCB3aGljaCB3aWxsIHJlbGVhc2UgYW55IHdhaXRlcnMuIFRoZXkKIAkgICB3aWxsIGdldCB0aGUgaGFzaGVkIGRlbnRyeSwgYW5kIG1heSBiZSBmb3JjZWQgdG8gd2FpdCBmb3IKIAkgICByZXZhbGlkYXRpb24gICovCi0JdXAoJmRpci0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAl3YWl0X2Zvcl9kZXZmc2RfZmluaXNoZWQoZnNfaW5mbyk7CS8qICBJZiBJJ20gbm90IGRldmZzZCwgbXVzdCB3YWl0ICAqLwotCWRvd24oJmRpci0+aV9zZW0pOwkvKiAgR3JhYiBpdCBhZ2FpbiBiZWNhdXNlIHRoZW0ncyB0aGUgcnVsZXMgICovCisJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsJLyogIEdyYWIgaXQgYWdhaW4gYmVjYXVzZSB0aGVtJ3MgdGhlIHJ1bGVzICAqLwogCWRlID0gbG9va3VwX2luZm8uZGU7CiAJLyogIElmIHNvbWVvbmUgZWxzZSBoYXMgYmVlbiBzbyBraW5kIGFzIHRvIG1ha2UgdGhlIGlub2RlLCB3ZSBnbyBob21lCiAJICAgZWFybHkgICovCmRpZmYgLS1naXQgYS9mcy9kZXZwdHMvaW5vZGUuYyBiL2ZzL2RldnB0cy9pbm9kZS5jCmluZGV4IGYyYmU0NGQuLmJmYjhhMjMgMTAwNjQ0Ci0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jCisrKyBiL2ZzL2RldnB0cy9pbm9kZS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAljaGFyIHNbMTJdOwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBkZXZwdHNfcm9vdDsKLQlkb3duKCZyb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGxvb2t1cF9vbmVfbGVuKHMsIHJvb3QsIHNwcmludGYocywgIiVkIiwgbnVtKSk7CiB9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWlmICghSVNfRVJSKGRlbnRyeSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAotCXVwKCZkZXZwdHNfcm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGV2cHRzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJZHB1dChkZW50cnkpOwogCX0KIAotCXVwKCZkZXZwdHNfcm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGV2cHRzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIHR0eTsKIH0KQEAgLTE5Niw3ICsxOTYsNyBAQAogCQl9CiAJCWRwdXQoZGVudHJ5KTsKIAl9Ci0JdXAoJmRldnB0c19yb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZwdHNfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZGV2cHRzX2ZzKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IDM5MzFlN2YuLjMwZGJiZDEgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC01Niw3ICs1Niw3IEBACiAgKiBsb2NrX3R5cGUgaXMgRElPX0xPQ0tJTkcgZm9yIHJlZ3VsYXIgZmlsZXMgb24gZGlyZWN0LUlPLW5haXZlIGZpbGVzeXN0ZW1zLgogICogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0byBkbyB0aGUgZmFuY3kgbG9ja2luZyB3aGljaCBwcmV2ZW50cwogICogZGlyZWN0LUlPIGZyb20gYmVpbmcgYWJsZSB0byByZWFkIHVuaW5pdGlhbGlzZWQgZGlzayBibG9ja3MuICBJZiBpdHMgemVybwotICogKGJsb2NrZGV2KSB0aGlzIGxvY2tpbmcgaXMgbm90IGRvbmUsIGFuZCBpZiBpdCBpcyBESU9fT1dOX0xPQ0tJTkcgaV9zZW0gaXMKKyAqIChibG9ja2RldikgdGhpcyBsb2NraW5nIGlzIG5vdCBkb25lLCBhbmQgaWYgaXQgaXMgRElPX09XTl9MT0NLSU5HIGlfbXV0ZXggaXMKICAqIG5vdCBoZWxkIGZvciB0aGUgZW50aXJlIGRpcmVjdCB3cml0ZSAodGFrZW4gYnJpZWZseSwgaW5pdGlhbGx5LCBkdXJpbmcgYQogICogZGlyZWN0IHJlYWQgdGhvdWdoLCBidXQgaXRzIG5ldmVyIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGRpcmVjdC1JTykuCiAgKi8KQEAgLTkzMCw3ICs5MzAsNyBAQAogfQogCiAvKgotICogUmVsZWFzZXMgYm90aCBpX3NlbSBhbmQgaV9hbGxvY19zZW0KKyAqIFJlbGVhc2VzIGJvdGggaV9tdXRleCBhbmQgaV9hbGxvY19zZW0KICAqLwogc3RhdGljIHNzaXplX3QKIGRpcmVjdF9pb193b3JrZXIoaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIApAQCAtMTA2MiwxMSArMTA2MiwxMSBAQAogCiAJLyoKIAkgKiBBbGwgYmxvY2sgbG9va3VwcyBoYXZlIGJlZW4gcGVyZm9ybWVkLiBGb3IgUkVBRCByZXF1ZXN0cwotCSAqIHdlIGNhbiBsZXQgaV9zZW0gZ28gbm93IHRoYXQgaXRzIGFjaGlldmVkIGl0cyBwdXJwb3NlCisJICogd2UgY2FuIGxldCBpX211dGV4IGdvIG5vdyB0aGF0IGl0cyBhY2hpZXZlZCBpdHMgcHVycG9zZQogCSAqIG9mIHByb3RlY3RpbmcgdXMgZnJvbSBsb29raW5nIHVwIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLgogCSAqLwogCWlmICgocncgPT0gUkVBRCkgJiYgKGRpby0+bG9ja190eXBlID09IERJT19MT0NLSU5HKSkKLQkJdXAoJmRpby0+aW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkaW8tPmlub2RlLT5pX211dGV4KTsKIAogCS8qCiAJICogT0ssIGFsbCBCSU9zIGFyZSBzdWJtaXR0ZWQsIHNvIHdlIGNhbiBkZWNyZW1lbnQgYmlvX2NvdW50IHRvIHRydWx5CkBAIC0xMTQ1LDE4ICsxMTQ1LDE4IEBACiAgKiBUaGUgbG9ja2luZyBydWxlcyBhcmUgZ292ZXJuZWQgYnkgdGhlIGRpb19sb2NrX3R5cGUgcGFyYW1ldGVyLgogICoKICAqIERJT19OT19MT0NLSU5HIChubyBsb2NraW5nLCBmb3IgcmF3IGJsb2NrIGRldmljZSBhY2Nlc3MpCi0gKiBGb3Igd3JpdGVzLCBpX3NlbSBpcyBub3QgaGVsZCBvbiBlbnRyeTsgaXQgaXMgbmV2ZXIgdGFrZW4uCisgKiBGb3Igd3JpdGVzLCBpX211dGV4IGlzIG5vdCBoZWxkIG9uIGVudHJ5OyBpdCBpcyBuZXZlciB0YWtlbi4KICAqCiAgKiBESU9fTE9DS0lORyAoc2ltcGxlIGxvY2tpbmcgZm9yIHJlZ3VsYXIgZmlsZXMpCi0gKiBGb3Igd3JpdGVzIHdlIGFyZSBjYWxsZWQgdW5kZXIgaV9zZW0gYW5kIHJldHVybiB3aXRoIGlfc2VtIGhlbGQsIGV2ZW4gdGhvdWdoCisgKiBGb3Igd3JpdGVzIHdlIGFyZSBjYWxsZWQgdW5kZXIgaV9tdXRleCBhbmQgcmV0dXJuIHdpdGggaV9tdXRleCBoZWxkLCBldmVuIHRob3VnaAogICogaXQgaXMgaW50ZXJuYWxseSBkcm9wcGVkLgotICogRm9yIHJlYWRzLCBpX3NlbSBpcyBub3QgaGVsZCBvbiBlbnRyeSwgYnV0IGl0IGlzIHRha2VuIGFuZCBkcm9wcGVkIGJlZm9yZQorICogRm9yIHJlYWRzLCBpX211dGV4IGlzIG5vdCBoZWxkIG9uIGVudHJ5LCBidXQgaXQgaXMgdGFrZW4gYW5kIGRyb3BwZWQgYmVmb3JlCiAgKiByZXR1cm5pbmcuCiAgKgogICogRElPX09XTl9MT0NLSU5HIChmaWxlc3lzdGVtIHByb3ZpZGVzIHN5bmNocm9uaXNhdGlvbiBhbmQgaGFuZGxpbmcgb2YKICAqCXVuaW5pdGlhbGlzZWQgZGF0YSwgYWxsb3dpbmcgcGFyYWxsZWwgZGlyZWN0IHJlYWRlcnMgYW5kIHdyaXRlcnMpCi0gKiBGb3Igd3JpdGVzIHdlIGFyZSBjYWxsZWQgd2l0aG91dCBpX3NlbSwgcmV0dXJuIHdpdGhvdXQgaXQsIG5ldmVyIHRvdWNoIGl0LgotICogRm9yIHJlYWRzLCBpX3NlbSBpcyBoZWxkIG9uIGVudHJ5IGFuZCB3aWxsIGJlIHJlbGVhc2VkIGJlZm9yZSByZXR1cm5pbmcuCisgKiBGb3Igd3JpdGVzIHdlIGFyZSBjYWxsZWQgd2l0aG91dCBpX211dGV4LCByZXR1cm4gd2l0aG91dCBpdCwgbmV2ZXIgdG91Y2ggaXQuCisgKiBGb3IgcmVhZHMsIGlfbXV0ZXggaXMgaGVsZCBvbiBlbnRyeSBhbmQgd2lsbCBiZSByZWxlYXNlZCBiZWZvcmUgcmV0dXJuaW5nLgogICoKICAqIEFkZGl0aW9uYWwgaV9hbGxvY19zZW0gbG9ja2luZyByZXF1aXJlbWVudHMgZGVzY3JpYmVkIGlubGluZSBiZWxvdy4KICAqLwpAQCAtMTIxNCwxMSArMTIxNCwxMSBAQAogCSAqIEZvciBibG9jayBkZXZpY2UgYWNjZXNzIERJT19OT19MT0NLSU5HIGlzIHVzZWQsCiAJICoJbmVpdGhlciByZWFkZXJzIG5vciB3cml0ZXJzIGRvIGFueSBsb2NraW5nIGF0IGFsbAogCSAqIEZvciByZWd1bGFyIGZpbGVzIHVzaW5nIERJT19MT0NLSU5HLAotCSAqCXJlYWRlcnMgbmVlZCB0byBncmFiIGlfc2VtIGFuZCBpX2FsbG9jX3NlbQotCSAqCXdyaXRlcnMgbmVlZCB0byBncmFiIGlfYWxsb2Nfc2VtIG9ubHkgKGlfc2VtIGlzIGFscmVhZHkgaGVsZCkKKwkgKglyZWFkZXJzIG5lZWQgdG8gZ3JhYiBpX211dGV4IGFuZCBpX2FsbG9jX3NlbQorCSAqCXdyaXRlcnMgbmVlZCB0byBncmFiIGlfYWxsb2Nfc2VtIG9ubHkgKGlfbXV0ZXggaXMgYWxyZWFkeSBoZWxkKQogCSAqIEZvciByZWd1bGFyIGZpbGVzIHVzaW5nIERJT19PV05fTE9DS0lORywKIAkgKgluZWl0aGVyIHJlYWRlcnMgbm9yIHdyaXRlcnMgdGFrZSBhbnkgbG9ja3MgaGVyZQotCSAqCShpX3NlbSBpcyBhbHJlYWR5IGhlbGQgYW5kIHJlbGVhc2UgZm9yIHdyaXRlcnMgaGVyZSkKKwkgKgkoaV9tdXRleCBpcyBhbHJlYWR5IGhlbGQgYW5kIHJlbGVhc2UgZm9yIHdyaXRlcnMgaGVyZSkKIAkgKi8KIAlkaW8tPmxvY2tfdHlwZSA9IGRpb19sb2NrX3R5cGU7CiAJaWYgKGRpb19sb2NrX3R5cGUgIT0gRElPX05PX0xPQ0tJTkcpIHsKQEAgLTEyMjgsNyArMTIyOCw3IEBACiAKIAkJCW1hcHBpbmcgPSBpb2NiLT5raV9maWxwLT5mX21hcHBpbmc7CiAJCQlpZiAoZGlvX2xvY2tfdHlwZSAhPSBESU9fT1dOX0xPQ0tJTkcpIHsKLQkJCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJCQlyZWFkZXJfd2l0aF9pc2VtID0gMTsKIAkJCX0KIApAQCAtMTI0MCw3ICsxMjQwLDcgQEAKIAkJCX0KIAogCQkJaWYgKGRpb19sb2NrX3R5cGUgPT0gRElPX09XTl9MT0NLSU5HKSB7Ci0JCQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQkJcmVhZGVyX3dpdGhfaXNlbSA9IDA7CiAJCQl9CiAJCX0KQEAgLTEyNjYsNyArMTI2Niw3IEBACiAKIG91dDoKIAlpZiAocmVhZGVyX3dpdGhfaXNlbSkKLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChydyAmIFdSSVRFKQogCQljdXJyZW50LT5mbGFncyAmPSB+UEZfU1lOQ1dSSVRFOwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCAyYTYyYjNkLi5jYjZkNWJmIDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogICogb3BlcmF0aW9uIGlzIGp1c3QgcmVhZGluZyBwb2ludGVycyBmcm9tIGlub2RlIChvciBub3QgdXNpbmcgdGhlbSBhdCBhbGwpIHRoZQogICogcmVhZCBsb2NrIGlzIGVub3VnaC4gSWYgcG9pbnRlcnMgYXJlIGFsdGVyZWQgZnVuY3Rpb24gbXVzdCBob2xkIHdyaXRlIGxvY2sKICAqICh0aGVzZSBsb2NraW5nIHJ1bGVzIGFsc28gYXBwbHkgZm9yIFNfTk9RVU9UQSBmbGFnIGluIHRoZSBpbm9kZSAtIG5vdGUgdGhhdAotICogZm9yIGFsdGVyaW5nIHRoZSBmbGFnIGlfc2VtIGlzIGFsc28gbmVlZGVkKS4gIElmIG9wZXJhdGlvbiBpcyBob2xkaW5nCisgKiBmb3IgYWx0ZXJpbmcgdGhlIGZsYWcgaV9tdXRleCBpcyBhbHNvIG5lZWRlZCkuICBJZiBvcGVyYXRpb24gaXMgaG9sZGluZwogICogcmVmZXJlbmNlIHRvIGRxdW90IGluIG90aGVyIHdheSAoZS5nLiBxdW90YWN0bCBvcHMpIGl0IG11c3QgYmUgZ3VhcmRlZCBieQogICogZHFvbm9mZl9zZW0uCiAgKiBUaGlzIGxvY2tpbmcgYXNzdXJlcyB0aGF0OgpAQCAtMTE3LDkgKzExNyw5IEBACiAgKiBzcGlubG9jayB0byBpbnRlcm5hbCBidWZmZXJzIGJlZm9yZSB3cml0aW5nLgogICoKICAqIExvY2sgb3JkZXJpbmcgKGluY2x1ZGluZyByZWxhdGVkIFZGUyBsb2NrcykgaXMgdGhlIGZvbGxvd2luZzoKLSAqICAgaV9zZW0gPiBkcW9ub2ZmX3NlbSA+IGlwcnVuZV9zZW0gPiBqb3VybmFsX2xvY2sgPiBkcXB0cl9zZW0gPgorICogICBpX211dGV4ID4gZHFvbm9mZl9zZW0gPiBpcHJ1bmVfc2VtID4gam91cm5hbF9sb2NrID4gZHFwdHJfc2VtID4KICAqICAgPiBkcXVvdC0+ZHFfbG9jayA+IGRxaW9fc2VtCi0gKiBpX3NlbSBvbiBxdW90YSBmaWxlcyBpcyBzcGVjaWFsIChpdCdzIGJlbG93IGRxaW9fc2VtKQorICogaV9tdXRleCBvbiBxdW90YSBmaWxlcyBpcyBzcGVjaWFsIChpdCdzIGJlbG93IGRxaW9fc2VtKQogICovCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHFfbGlzdF9sb2NrKTsKQEAgLTEzNjksMTEgKzEzNjksMTEgQEAKIAkJCS8qIElmIHF1b3RhIHdhcyByZWVuYWJsZWQgaW4gdGhlIG1lYW50aW1lLCB3ZSBoYXZlCiAJCQkgKiBub3RoaW5nIHRvIGRvICovCiAJCQlpZiAoIXNiX2hhc19xdW90YV9lbmFibGVkKHNiLCBjbnQpKSB7Ci0JCQkJZG93bigmdG9wdXRpbm9kZVtjbnRdLT5pX3NlbSk7CisJCQkJbXV0ZXhfbG9jaygmdG9wdXRpbm9kZVtjbnRdLT5pX211dGV4KTsKIAkJCQl0b3B1dGlub2RlW2NudF0tPmlfZmxhZ3MgJj0gfihTX0lNTVVUQUJMRSB8CiAJCQkJICBTX05PQVRJTUUgfCBTX05PUVVPVEEpOwogCQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ0b3B1dGlub2RlW2NudF0tPmlfZGF0YSwgMCk7Ci0JCQkJdXAoJnRvcHV0aW5vZGVbY250XS0+aV9zZW0pOworCQkJCW11dGV4X3VubG9jaygmdG9wdXRpbm9kZVtjbnRdLT5pX211dGV4KTsKIAkJCQltYXJrX2lub2RlX2RpcnR5KHRvcHV0aW5vZGVbY250XSk7CiAJCQkJaXB1dCh0b3B1dGlub2RlW2NudF0pOwogCQkJfQpAQCAtMTQxNyw3ICsxNDE3LDcgQEAKIAl3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDEpOwogCS8qIEFuZCBub3cgZmx1c2ggdGhlIGJsb2NrIGNhY2hlIHNvIHRoYXQga2VybmVsIHNlZXMgdGhlIGNoYW5nZXMgKi8KIAlpbnZhbGlkYXRlX2JkZXYoc2ItPnNfYmRldiwgMCk7Ci0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJZG93bigmZHFvcHQtPmRxb25vZmZfc2VtKTsKIAlpZiAoc2JfaGFzX3F1b3RhX2VuYWJsZWQoc2IsIHR5cGUpKSB7CiAJCWVycm9yID0gLUVCVVNZOwpAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAKIAkJZ290byBvdXRfZmlsZV9pbml0OwogCX0KIAl1cCgmZHFvcHQtPmRxaW9fc2VtKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlzZXRfZW5hYmxlX2ZsYWdzKGRxb3B0LCB0eXBlKTsKIAogCWFkZF9kcXVvdF9yZWYoc2IsIHR5cGUpOwpAQCAtMTQ3MCw3ICsxNDcwLDcgQEAKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gb2xkZmxhZ3M7CiAJCXVwX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKIAl9Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiBvdXRfZm10OgogCXB1dF9xdW90YV9mb3JtYXQoZm10KTsKIApkaWZmIC0tZ2l0IGEvZnMvZXhwb3J0ZnMvZXhwZnMuYyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKaW5kZXggYzQ5ZDYyNS4uNWJmZTQwMCAxMDA2NDQKLS0tIGEvZnMvZXhwb3J0ZnMvZXhwZnMuYworKysgYi9mcy9leHBvcnRmcy9leHBmcy5jCkBAIC0xNzcsOSArMTc3LDkgQEAKIAkJCXN0cnVjdCBkZW50cnkgKnBwZDsKIAkJCXN0cnVjdCBkZW50cnkgKm5wZDsKIAotCQkJZG93bigmcGQtPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X2xvY2soJnBkLT5kX2lub2RlLT5pX211dGV4KTsKIAkJCXBwZCA9IENBTEwobm9wcyxnZXRfcGFyZW50KShwZCk7Ci0JCQl1cCgmcGQtPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcGQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJCQlpZiAoSVNfRVJSKHBwZCkpIHsKIAkJCQllcnIgPSBQVFJfRVJSKHBwZCk7CkBAIC0yMDEsOSArMjAxLDkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCWRwcmludGsoImZpbmRfZXhwb3J0ZWRfZGVudHJ5OiBmb3VuZCBuYW1lOiAlc1xuIiwgbmJ1Zik7Ci0JCQlkb3duKCZwcGQtPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X2xvY2soJnBwZC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCQlucGQgPSBsb29rdXBfb25lX2xlbihuYnVmLCBwcGQsIHN0cmxlbihuYnVmKSk7Ci0JCQl1cCgmcHBkLT5kX2lub2RlLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJnBwZC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCQlpZiAoSVNfRVJSKG5wZCkpIHsKIAkJCQllcnIgPSBQVFJfRVJSKG5wZCk7CiAJCQkJZHByaW50aygiZmluZF9leHBvcnRlZF9kZW50cnk6IGxvb2t1cCBmYWlsZWQ6ICVkXG4iLCBlcnIpOwpAQCAtMjQyLDkgKzI0Miw5IEBACiAJCXN0cnVjdCBkZW50cnkgKm5yZXN1bHQ7CiAJCWVyciA9IENBTEwobm9wcyxnZXRfbmFtZSkodGFyZ2V0X2RpciwgbmJ1ZiwgcmVzdWx0KTsKIAkJaWYgKCFlcnIpIHsKLQkJCWRvd24oJnRhcmdldF9kaXItPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X2xvY2soJnRhcmdldF9kaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJbnJlc3VsdCA9IGxvb2t1cF9vbmVfbGVuKG5idWYsIHRhcmdldF9kaXIsIHN0cmxlbihuYnVmKSk7Ci0JCQl1cCgmdGFyZ2V0X2Rpci0+ZF9pbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZ0YXJnZXRfZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAkJCWlmICghSVNfRVJSKG5yZXN1bHQpKSB7CiAJCQkJaWYgKG5yZXN1bHQtPmRfaW5vZGUpIHsKIAkJCQkJZHB1dChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9hY2wuYyBiL2ZzL2V4dDIvYWNsLmMKaW5kZXggNmFmMmY0MS4uMjM5MTMzZCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9hY2wuYworKysgYi9mcy9leHQyL2FjbC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIH0KIAogLyoKLSAqIGlub2RlLT5pX3NlbTogZG9uJ3QgY2FyZQorICogaW5vZGUtPmlfbXV0ZXg6IGRvbid0IGNhcmUKICAqLwogc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKgogZXh0Ml9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQpAQCAtMjExLDcgKzIxMSw3IEBACiB9CiAKIC8qCi0gKiBpbm9kZS0+aV9zZW06IGRvd24KKyAqIGlub2RlLT5pX211dGV4OiBkb3duCiAgKi8KIHN0YXRpYyBpbnQKIGV4dDJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQpAQCAtMzAxLDggKzMwMSw4IEBACiAvKgogICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gZXh0Ml9uZXdfaW5vZGUuCiAgKgotICogZGlyLT5pX3NlbTogZG93bgotICogaW5vZGUtPmlfc2VtOiB1cCAoYWNjZXNzIHRvIGlub2RlIGlzIHN0aWxsIGV4Y2x1c2l2ZSkKKyAqIGRpci0+aV9tdXRleDogZG93bgorICogaW5vZGUtPmlfbXV0ZXg6IHVwIChhY2Nlc3MgdG8gaW5vZGUgaXMgc3RpbGwgZXhjbHVzaXZlKQogICovCiBpbnQKIGV4dDJfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCkBAIC0zNjEsNyArMzYxLDcgQEAKICAqIGZvciBkaXJlY3RvcmllcykgYXJlIGFkZGVkLiBUaGVyZSBhcmUgbm8gbW9yZSBiaXRzIGF2YWlsYWJsZSBpbiB0aGUKICAqIGZpbGUgbW9kZS4KICAqCi0gKiBpbm9kZS0+aV9zZW06IGRvd24KKyAqIGlub2RlLT5pX211dGV4OiBkb3duCiAgKi8KIGludAogZXh0Ml9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmgKaW5kZXggZTk3N2Y4NS4uMDBkZTBhNyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9leHQyLmgKKysrIGIvZnMvZXh0Mi9leHQyLmgKQEAgLTUzLDcgKzUzLDcgQEAKICNpZmRlZiBDT05GSUdfRVhUMl9GU19YQVRUUgogCS8qCiAJICogRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgcmVhZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBtYWluIGZpbGUKLQkgKiBkYXRhLiBUYWtpbmcgaV9zZW0gZXZlbiB3aGVuIHJlYWRpbmcgd291bGQgY2F1c2UgY29udGVudGlvbgorCSAqIGRhdGEuIFRha2luZyBpX211dGV4IGV2ZW4gd2hlbiByZWFkaW5nIHdvdWxkIGNhdXNlIGNvbnRlbnRpb24KIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCA1MjJmYTcwLi44ZDY4MTk4IDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0xMTUyLDcgKzExNTIsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCB0bXBfYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXdoaWxlICh0b3dyaXRlID4gMCkgewogCQl0b2NvcHkgPSBzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgPCB0b3dyaXRlID8KIAkJCQlzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgOiB0b3dyaXRlOwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAKIAlpbm9kZS0+aV92ZXJzaW9uKys7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gbGVuIC0gdG93cml0ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jCmluZGV4IDAwOTk0NjIuLmY3YTNiNWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHIuYworKysgYi9mcy9leHQyL3hhdHRyLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogLyoKICAqIElub2RlIG9wZXJhdGlvbiBsaXN0eGF0dHIoKQogICoKLSAqIGRlbnRyeS0+ZF9pbm9kZS0+aV9zZW06IGRvbid0IGNhcmUKKyAqIGRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleDogZG9uJ3QgY2FyZQogICovCiBzc2l6ZV90CiBleHQyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5jIGIvZnMvZXh0My9hY2wuYwppbmRleCAzYWMzODI2Li45ZWQxMzJjIDEwMDY0NAotLS0gYS9mcy9leHQzL2FjbC5jCisrKyBiL2ZzL2V4dDMvYWNsLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogLyoKICAqIElub2RlIG9wZXJhdGlvbiBnZXRfcG9zaXhfYWNsKCkuCiAgKgotICogaW5vZGUtPmlfc2VtOiBkb24ndCBjYXJlCisgKiBpbm9kZS0+aV9tdXRleDogZG9uJ3QgY2FyZQogICovCiBzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqCiBleHQzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCkBAIC0yMTYsNyArMjE2LDcgQEAKIC8qCiAgKiBTZXQgdGhlIGFjY2VzcyBvciBkZWZhdWx0IEFDTCBvZiBhbiBpbm9kZS4KICAqCi0gKiBpbm9kZS0+aV9zZW06IGRvd24gdW5sZXNzIGNhbGxlZCBmcm9tIGV4dDNfbmV3X2lub2RlCisgKiBpbm9kZS0+aV9tdXRleDogZG93biB1bmxlc3MgY2FsbGVkIGZyb20gZXh0M19uZXdfaW5vZGUKICAqLwogc3RhdGljIGludAogZXh0M19zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLApAQCAtMzA2LDggKzMwNiw4IEBACiAvKgogICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gZXh0M19uZXdfaW5vZGUuCiAgKgotICogZGlyLT5pX3NlbTogZG93bgotICogaW5vZGUtPmlfc2VtOiB1cCAoYWNjZXNzIHRvIGlub2RlIGlzIHN0aWxsIGV4Y2x1c2l2ZSkKKyAqIGRpci0+aV9tdXRleDogZG93bgorICogaW5vZGUtPmlfbXV0ZXg6IHVwIChhY2Nlc3MgdG8gaW5vZGUgaXMgc3RpbGwgZXhjbHVzaXZlKQogICovCiBpbnQKIGV4dDNfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCkBAIC0zNjgsNyArMzY4LDcgQEAKICAqIGZvciBkaXJlY3RvcmllcykgYXJlIGFkZGVkLiBUaGVyZSBhcmUgbm8gbW9yZSBiaXRzIGF2YWlsYWJsZSBpbiB0aGUKICAqIGZpbGUgbW9kZS4KICAqCi0gKiBpbm9kZS0+aV9zZW06IGRvd24KKyAqIGlub2RlLT5pX211dGV4OiBkb3duCiAgKi8KIGludAogZXh0M19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA3YzQ1YWNmLi41NmJmNzY1IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC0yMTUwLDcgKzIxNTAsNyBAQAogCiBzdGF0aWMgdm9pZCBleHQzX3dyaXRlX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKIHsKLQlpZiAoZG93bl90cnlsb2NrKCZzYi0+c19sb2NrKSA9PSAwKQorCWlmIChtdXRleF90cnlsb2NrKCZzYi0+c19sb2NrKSAhPSAwKQogCQlCVUcoKTsKIAlzYi0+c19kaXJ0ID0gMDsKIH0KQEAgLTI2MDEsNyArMjYwMSw3IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAloYW5kbGVfdCAqaGFuZGxlID0gam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJd2hpbGUgKHRvd3JpdGUgPiAwKSB7CiAJCXRvY29weSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA8IHRvd3JpdGUgPwogCQkJCXNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA6IHRvd3JpdGU7CkBAIC0yNjQ0LDcgKzI2NDQsNyBAQAogCWlub2RlLT5pX3ZlcnNpb24rKzsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gbGVuIC0gdG93cml0ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0My94YXR0ci5jIGIvZnMvZXh0My94YXR0ci5jCmluZGV4IDQzMGRlOWYuLjIzODE5OWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMveGF0dHIuYworKysgYi9mcy9leHQzL3hhdHRyLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogLyoKICAqIElub2RlIG9wZXJhdGlvbiBsaXN0eGF0dHIoKQogICoKLSAqIGRlbnRyeS0+ZF9pbm9kZS0+aV9zZW06IGRvbid0IGNhcmUKKyAqIGRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleDogZG9uJ3QgY2FyZQogICovCiBzc2l6ZV90CiBleHQzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggZWVmMWI4MS4uZGIwZGU1YyAxMDA2NDQKLS0tIGEvZnMvZmF0L2Rpci5jCisrKyBiL2ZzL2ZhdC9kaXIuYwpAQCAtNzI5LDEzICs3MjksMTMgQEAKIAogCWJ1Zi5kaXJlbnQgPSBkMTsKIAlidWYucmVzdWx0ID0gMDsKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXQgPSAtRU5PRU5UOwogCWlmICghSVNfREVBRERJUihpbm9kZSkpIHsKIAkJcmV0ID0gX19mYXRfcmVhZGRpcihpbm9kZSwgZmlscCwgJmJ1ZiwgZmF0X2lvY3RsX2ZpbGxkaXIsCiAJCQkJICAgIHNob3J0X29ubHksIGJvdGgpOwogCX0KLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IGJ1Zi5yZXN1bHQ7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDliMDdjMzIuLmQzMDg3NmMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKKysrIGIvZnMvZmF0L2ZpbGUuYwpAQCAtNDEsNyArNDEsNyBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAkJaWYgKElTX1JET05MWShpbm9kZSkpIHsKIAkJCWVyciA9IC1FUk9GUzsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlNU0RPU19JKGlub2RlKS0+aV9hdHRycyA9IGF0dHIgJiBBVFRSX1VOVVNFRDsKIAkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJdXA6Ci0JCXVwKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA1NDU1OTE2Li45MjMzNzFiIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC0zNSw3ICszNSw3IEBACiAJaW50IHJldDsKIAogCXJldCA9IC1FUkVTVEFSVFNZUzsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKFBJUEVfU0VNKCppbm9kZSkpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoUElQRV9NVVRFWCgqaW5vZGUpKSkKIAkJZ290byBlcnJfbm9sb2NrX25vY2xlYW51cDsKIAogCWlmICghaW5vZGUtPmlfcGlwZSkgewpAQCAtMTE5LDcgKzExOSw3IEBACiAJfQogCiAJLyogT2shICovCi0JdXAoUElQRV9TRU0oKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CiAJcmV0dXJuIDA7CiAKIGVycl9yZDoKQEAgLTEzOSw3ICsxMzksNyBAQAogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAKIGVycl9ub2NsZWFudXA6Ci0JdXAoUElQRV9TRU0oKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CiAKIGVycl9ub2xvY2tfbm9jbGVhbnVwOgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDA1ZGVkZGQuLjYzZDI5ODAgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC01NjAsOSArNTYwLDkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3NpemVfdCByZXM7CiAJLyogRG9uJ3QgYWxsb3cgcGFyYWxsZWwgd3JpdGVzIHRvIHRoZSBzYW1lIGZpbGUgKi8KLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXMgPSBmdXNlX2RpcmVjdF9pbyhmaWxlLCBidWYsIGNvdW50LCBwcG9zLCAxKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQogCmRpZmYgLS1naXQgYS9mcy9oZnMvaW5vZGUuYyBiL2ZzL2hmcy9pbm9kZS5jCmluZGV4IGQ0OTkzOTNhLi4wNTBhNDkyNyAxMDA2NDQKLS0tIGEvZnMvaGZzL2lub2RlLmMKKysrIGIvZnMvaGZzL2lub2RlLmMKQEAgLTU0NywxMyArNTQ3LDEzIEBACiAJaWYgKGF0b21pY19yZWFkKCZmaWxlLT5mX2NvdW50KSAhPSAwKQogCQlyZXR1cm4gMDsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmSEZTX0koaW5vZGUpLT5vcGVuY250KSkgewotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWhmc19maWxlX3RydW5jYXRlKGlub2RlKTsKIAkJLy9pZiAoaW5vZGUtPmlfZmxhZ3MgJiBTX0RFQUQpIHsKIAkJLy8JaGZzX2RlbGV0ZV9jYXQoaW5vZGUtPmlfaW5vLCBIRlNQTFVTX1NCKHNiKS5oaWRkZW5fZGlyLCBOVUxMKTsKIAkJLy8JaGZzX2RlbGV0ZV9pbm9kZShpbm9kZSk7CiAJCS8vfQotCQl1cCgmaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggYzdkMzE2NC4uOWZiNTE2MyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuYworKysgYi9mcy9oZnNwbHVzL2JpdG1hcC5jCkBAIC0yOSw3ICsyOSw3IEBACiAJCXJldHVybiBzaXplOwogCiAJZHByaW50KERCR19CSVRNQVAsICJibG9ja19hbGxvY2F0ZTogJXUsJXUsJXVcbiIsIHNpemUsIG9mZnNldCwgbGVuKTsKLQlkb3duKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmSEZTUExVU19TQihzYikuYWxsb2NfZmlsZS0+aV9tdXRleCk7CiAJbWFwcGluZyA9IEhGU1BMVVNfU0Ioc2IpLmFsbG9jX2ZpbGUtPmlfbWFwcGluZzsKIAlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUywKIAkJCSAgICAgICAoZmlsbGVyX3QgKiltYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UsIE5VTEwpOwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJc2ItPnNfZGlydCA9IDE7CiAJZHByaW50KERCR19CSVRNQVAsICItPiAldSwldVxuIiwgc3RhcnQsICptYXgpOwogb3V0OgotCXVwKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX211dGV4KTsKIAlyZXR1cm4gc3RhcnQ7CiB9CiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogCWlmICgob2Zmc2V0ICsgY291bnQpID4gSEZTUExVU19TQihzYikudG90YWxfYmxvY2tzKQogCQlyZXR1cm4gLTI7CiAKLQlkb3duKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmSEZTUExVU19TQihzYikuYWxsb2NfZmlsZS0+aV9tdXRleCk7CiAJbWFwcGluZyA9IEhGU1BMVVNfU0Ioc2IpLmFsbG9jX2ZpbGUtPmlfbWFwcGluZzsKIAlwbnIgPSBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFM7CiAJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBwbnIsIChmaWxsZXJfdCAqKW1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZSwgTlVMTCk7CkBAIC0yMTUsNyArMjE1LDcgQEAKIAlrdW5tYXAocGFnZSk7CiAJSEZTUExVU19TQihzYikuZnJlZV9ibG9ja3MgKz0gbGVuOwogCXNiLT5zX2RpcnQgPSAxOwotCXVwKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX211dGV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jCmluZGV4IGZjOTg1ODMuLjk4M2JjZDAgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuYworKysgYi9mcy9oZnNwbHVzL2lub2RlLmMKQEAgLTI3NiwxMyArMjc2LDEzIEBACiAJaWYgKGF0b21pY19yZWFkKCZmaWxlLT5mX2NvdW50KSAhPSAwKQogCQlyZXR1cm4gMDsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmSEZTUExVU19JKGlub2RlKS5vcGVuY250KSkgewotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7CiAJCWlmIChpbm9kZS0+aV9mbGFncyAmIFNfREVBRCkgewogCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLT5pX2lubywgSEZTUExVU19TQihzYikuaGlkZGVuX2RpciwgTlVMTCk7CiAJCQloZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7CiAJCX0KLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZGlyLmMgYi9mcy9ocGZzL2Rpci5jCmluZGV4IDAyMTdjM2EuLjU1OTFmOTYgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZGlyLmMKKysrIGIvZnMvaHBmcy9kaXIuYwpAQCAtMzIsMTkgKzMyLDE5IEBACiAKIAkvKnByaW50aygiZGlyIGxzZWVrXG4iKTsqLwogCWlmIChuZXdfb2ZmID09IDAgfHwgbmV3X29mZiA9PSAxIHx8IG5ld19vZmYgPT0gMTEgfHwgbmV3X29mZiA9PSAxMiB8fCBuZXdfb2ZmID09IDEzKSBnb3RvIG9rOwotCWRvd24oJmktPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpLT5pX211dGV4KTsKIAlwb3MgPSAoKGxvZmZfdCkgaHBmc19kZV9hc19kb3duX2FzX3Bvc3NpYmxlKHMsIGhwZnNfaW5vZGUtPmlfZG5vKSA8PCA0KSArIDE7CiAJd2hpbGUgKHBvcyAhPSBuZXdfb2ZmKSB7CiAJCWlmIChtYXBfcG9zX2RpcmVudChpLCAmcG9zLCAmcWJoKSkgaHBmc19icmVsc2U0KCZxYmgpOwogCQllbHNlIGdvdG8gZmFpbDsKIAkJaWYgKHBvcyA9PSAxMikgZ290byBmYWlsOwogCX0KLQl1cCgmaS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaS0+aV9tdXRleCk7CiBvazoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGZpbHAtPmZfcG9zID0gbmV3X29mZjsKIGZhaWw6Ci0JdXAoJmktPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmktPmlfbXV0ZXgpOwogCS8qcHJpbnRrKCJpbGxlZ2FsIGxzZWVrOiAlMDE2bGx4XG4iLCBuZXdfb2ZmKTsqLwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gLUVTUElQRTsKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYyBiL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYwppbmRleCA1MjkzMDkxLi5hNDRkYzU4IDEwMDY0NAotLS0gYS9mcy9ocHBmcy9ocHBmc19rZXJuLmMKKysrIGIvZnMvaHBwZnMvaHBwZnNfa2Vybi5jCkBAIC0xNzEsMTIgKzE3MSwxMiBAQAogCiAJZXJyID0gLUVOT01FTTsKIAlwYXJlbnQgPSBIUFBGU19JKGlubyktPnByb2NfZGVudHJ5OwotCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcHJvY19kZW50cnkgPSBkX2xvb2t1cChwYXJlbnQsICZkZW50cnktPmRfbmFtZSk7CiAJaWYocHJvY19kZW50cnkgPT0gTlVMTCl7CiAJCXByb2NfZGVudHJ5ID0gZF9hbGxvYyhwYXJlbnQsICZkZW50cnktPmRfbmFtZSk7CiAJCWlmKHByb2NfZGVudHJ5ID09IE5VTEwpewotCQkJdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJbmV3ID0gKCpwYXJlbnQtPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCkocGFyZW50LT5kX2lub2RlLApAQCAtMTg2LDcgKzE4Niw3IEBACiAJCQlwcm9jX2RlbnRyeSA9IG5ldzsKIAkJfQogCX0KLQl1cCgmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYoSVNfRVJSKHByb2NfZGVudHJ5KSkKIAkJcmV0dXJuKHByb2NfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggOGM0MTMxNS4uZmYxYjdkMSAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAJdm1hX2xlbiA9IChsb2ZmX3QpKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlmaWxlX2FjY2Vzc2VkKGZpbGUpOwogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSFVHRVRMQiB8IFZNX1JFU0VSVkVEOwogCXZtYS0+dm1fb3BzID0gJmh1Z2V0bGJfdm1fb3BzOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaWYgKGlub2RlLT5pX3NpemUgPCBsZW4pCiAJCWlub2RlLT5pX3NpemUgPSBsZW47CiBvdXQ6Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggZmQ1NjhjYS4uZTA4NzY3ZiAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlJTklUX0hMSVNUX05PREUoJmlub2RlLT5pX2hhc2gpOwogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOwogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZXZpY2VzKTsKLQlzZW1hX2luaXQoJmlub2RlLT5pX3NlbSwgMSk7CisJbXV0ZXhfaW5pdCgmaW5vZGUtPmlfbXV0ZXgpOwogCWluaXRfcndzZW0oJmlub2RlLT5pX2FsbG9jX3NlbSk7CiAJSU5JVF9SQURJWF9UUkVFKCZpbm9kZS0+aV9kYXRhLnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7CiAJcndsb2NrX2luaXQoJmlub2RlLT5pX2RhdGEudHJlZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMvaW5vZGUtdjIzLmMgYi9mcy9qZmZzL2lub2RlLXYyMy5jCmluZGV4IDI1NTllZTEuLmZjMzg1NWEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvaW5vZGUtdjIzLmMKKysrIGIvZnMvamZmcy9pbm9kZS12MjMuYwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKIAkgKiBUaGlzIHdpbGwgbmV2ZXIgdHJpZ2dlciB3aXRoIHNhbmUgcGFnZSBzaXplcy4gIGxlYXZlIGl0IGluCiAJICogYW55d2F5LCBzaW5jZSBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIG1lcmdlIGxhcmdlciB3cml0ZXMKIAkgKiAodGhlIGN1cnJlbnQgaWRlYSBpcyB0byBwb2tlIGEgdGhyZWFkIHRoYXQgZG9lcyB0aGUgYWN0dWFsCi0JICogSS9PIGFuZCBzdGFydHMgYnkgZG9pbmcgYSBkb3duKCZpbm9kZS0+aV9zZW0pLiAgdGhlbiB3ZQorCSAqIEkvTyBhbmQgc3RhcnRzIGJ5IGRvaW5nIGEgbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpLiAgdGhlbiB3ZQogCSAqIHdvdWxkIG5lZWQgdG8gZ2V0IHRoZSBwYWdlIGNhY2hlIHBhZ2VzIGFuZCBoYXZlIGEgbGlzdCBvZgogCSAqIEkvTyByZXF1ZXN0cyBhbmQgZG8gd3JpdGUtbWVyZ2luZyBoZXJlLgogCSAqIC0tIHBydW1wZgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbmNvcmUuaCBiL2ZzL2pmcy9qZnNfaW5jb3JlLmgKaW5kZXggYzBmZDdiMy4uZGMyMWE1YiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbmNvcmUuaAorKysgYi9mcy9qZnMvamZzX2luY29yZS5oCkBAIC01OCw3ICs1OCw3IEBACiAJLyoKIAkgKiByZHdybG9jayBzZXJpYWxpemVzIHh0cmVlIGJldHdlZW4gcmVhZHMgJiB3cml0ZXMgYW5kIHN5bmNocm9uaXplcwogCSAqIGNoYW5nZXMgdG8gc3BlY2lhbCBpbm9kZXMuICBJdCdzIHVzZSB3b3VsZCBiZSByZWR1bmRhbnQgb24KLQkgKiBkaXJlY3RvcmllcyBzaW5jZSB0aGUgaV9zZW0gdGFrZW4gaW4gdGhlIFZGUyBpcyBzdWZmaWNpZW50LgorCSAqIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBpX211dGV4IHRha2VuIGluIHRoZSBWRlMgaXMgc3VmZmljaWVudC4KIAkgKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIHJkd3Jsb2NrOwogCS8qCkBAIC02OCw3ICs2OCw3IEBACiAJICogaW5vZGUgaXMgYmxvY2tlZCBpbiB0eEJlZ2luIG9yIFR4QmVnaW5Bbm9uCiAJICovCiAJc3RydWN0IHNlbWFwaG9yZSBjb21taXRfc2VtOwotCS8qIHhhdHRyX3NlbSBhbGxvd3MgdXMgdG8gYWNjZXNzIHRoZSB4YXR0cnMgd2l0aG91dCB0YWtpbmcgaV9zZW0gKi8KKwkvKiB4YXR0cl9zZW0gYWxsb3dzIHVzIHRvIGFjY2VzcyB0aGUgeGF0dHJzIHdpdGhvdXQgdGFraW5nIGlfbXV0ZXggKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKIAlsaWRfdAl4dGxpZDsJCS8qIGxpZCBvZiB4dHJlZSBsb2NrIG9uIGRpcmVjdG9yeSAqLwogI2lmZGVmIENPTkZJR19KRlNfUE9TSVhfQUNMCmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCA5YzUwNTIzLi42M2MwMjBlIDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAogbG9mZl90IGRjYWNoZV9kaXJfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7Ci0JZG93bigmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwpAQCAtODIsNyArODIsNyBAQAogCQkJaWYgKG9mZnNldCA+PSAwKQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJdXAoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAob2Zmc2V0ICE9IGZpbGUtPmZfcG9zKSB7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCX0KIAl9Ci0JdXAoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtMzU2LDcgKzM1Niw3IEBACiAKIAkvKgogCSAqIE5vIG5lZWQgdG8gdXNlIGlfc2l6ZV9yZWFkKCkgaGVyZSwgdGhlIGlfc2l6ZQotCSAqIGNhbm5vdCBjaGFuZ2UgdW5kZXIgdXMgYmVjYXVzZSB3ZSBob2xkIHRoZSBpX3NlbS4KKwkgKiBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCB0aGUgaV9tdXRleC4KIAkgKi8KIAlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSkKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMzAwZWFlMC4uMGE4ZjA3MyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICogcmVzdWx0OwogCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFyZW50LT5kX2lub2RlOwogCi0JZG93bigmZGlyLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKIAkvKgogCSAqIEZpcnN0IHJlLWRvIHRoZSBjYWNoZWQgbG9va3VwIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZAogCSAqIHdoaWxlIHdlIHdhaXRlZCBmb3IgdGhlIGRpcmVjdG9yeSBzZW1hcGhvcmUuLgpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCQllbHNlCiAJCQkJcmVzdWx0ID0gZGVudHJ5OwogCQl9Ci0JCXVwKCZkaXItPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNDcyLDcgKzQ3Miw3IEBACiAJICogVWhodWghIE5hc3R5IGNhc2U6IHRoZSBjYWNoZSB3YXMgcmUtcG9wdWxhdGVkIHdoaWxlCiAJICogd2Ugd2FpdGVkIG9uIHRoZSBzZW1hcGhvcmUuIE5lZWQgdG8gcmV2YWxpZGF0ZS4KIAkgKi8KLQl1cCgmZGlyLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWlmIChyZXN1bHQtPmRfb3AgJiYgcmVzdWx0LT5kX29wLT5kX3JldmFsaWRhdGUpIHsKIAkJaWYgKCFyZXN1bHQtPmRfb3AtPmRfcmV2YWxpZGF0ZShyZXN1bHQsIG5kKSAmJiAhZF9pbnZhbGlkYXRlKHJlc3VsdCkpIHsKIAkJCWRwdXQocmVzdWx0KTsKQEAgLTEzNjYsNyArMTM2Niw3IEBACiAJc3RydWN0IGRlbnRyeSAqcDsKIAogCWlmIChwMSA9PSBwMikgewotCQlkb3duKCZwMS0+ZF9pbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTM3NCwzMCArMTM3NCwzMCBAQAogCiAJZm9yIChwID0gcDE7IHAtPmRfcGFyZW50ICE9IHA7IHAgPSBwLT5kX3BhcmVudCkgewogCQlpZiAocC0+ZF9wYXJlbnQgPT0gcDIpIHsKLQkJCWRvd24oJnAyLT5kX2lub2RlLT5pX3NlbSk7Ci0JCQlkb3duKCZwMS0+ZF9pbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfbG9jaygmcDItPmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJbXV0ZXhfbG9jaygmcDEtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIHA7CiAJCX0KIAl9CiAKIAlmb3IgKHAgPSBwMjsgcC0+ZF9wYXJlbnQgIT0gcDsgcCA9IHAtPmRfcGFyZW50KSB7CiAJCWlmIChwLT5kX3BhcmVudCA9PSBwMSkgewotCQkJZG93bigmcDEtPmRfaW5vZGUtPmlfc2VtKTsKLQkJCWRvd24oJnAyLT5kX2lub2RlLT5pX3NlbSk7CisJCQltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQltdXRleF9sb2NrKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCQlyZXR1cm4gcDsKIAkJfQogCX0KIAotCWRvd24oJnAxLT5kX2lub2RlLT5pX3NlbSk7Ci0JZG93bigmcDItPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9jaygmcDItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiBOVUxMOwogfQogCiB2b2lkIHVubG9ja19yZW5hbWUoc3RydWN0IGRlbnRyeSAqcDEsIHN0cnVjdCBkZW50cnkgKnAyKQogewotCXVwKCZwMS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcDEtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChwMSAhPSBwMikgewotCQl1cCgmcDItPmRfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCXVwKCZwMS0+ZF9pbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CiAJfQogfQpAQCAtMTU2MywxNCArMTU2MywxNCBAQAogCiAJZGlyID0gbmQtPmRlbnRyeTsKIAluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7Ci0JZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKIAlwYXRoLm1udCA9IG5kLT5tbnQ7CiAKIGRvX2xhc3Q6CiAJZXJyb3IgPSBQVFJfRVJSKHBhdGguZGVudHJ5KTsKIAlpZiAoSVNfRVJSKHBhdGguZGVudHJ5KSkgewotCQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIAkJaWYgKCFJU19QT1NJWEFDTChkaXItPmRfaW5vZGUpKQogCQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOwogCQllcnJvciA9IHZmc19jcmVhdGUoZGlyLT5kX2lub2RlLCBwYXRoLmRlbnRyeSwgbW9kZSwgbmQpOwotCQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAkJZHB1dChuZC0+ZGVudHJ5KTsKIAkJbmQtPmRlbnRyeSA9IHBhdGguZGVudHJ5OwogCQlpZiAoZXJyb3IpCkBAIC0xNTkzLDcgKzE1OTMsNyBAQAogCS8qCiAJICogSXQgYWxyZWFkeSBleGlzdHMuCiAJICovCi0JdXAoJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAogCWVycm9yID0gLUVFWElTVDsKIAlpZiAoZmxhZyAmIE9fRVhDTCkKQEAgLTE2NjUsNyArMTY2NSw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAJZGlyID0gbmQtPmRlbnRyeTsKLQlkb3duKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXBhdGguZGVudHJ5ID0gbG9va3VwX2hhc2gobmQpOwogCXBhdGgubW50ID0gbmQtPm1udDsKIAlfX3B1dG5hbWUobmQtPmxhc3QubmFtZSk7CkBAIC0xNjgwLDEzICsxNjgwLDEzIEBACiAgKiBTaW1wbGUgZnVuY3Rpb24gdG8gbG9va3VwIGFuZCByZXR1cm4gYSBkZW50cnkgYW5kIGNyZWF0ZSBpdAogICogaWYgaXQgZG9lc24ndCBleGlzdC4gIElzIFNNUC1zYWZlLgogICoKLSAqIFJldHVybnMgd2l0aCBuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX3NlbSBsb2NrZWQuCisgKiBSZXR1cm5zIHdpdGggbmQtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCBsb2NrZWQuCiAgKi8KIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9jcmVhdGUoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBpc19kaXIpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gRVJSX1BUUigtRUVYSVNUKTsKIAotCWRvd24oJm5kLT5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAkvKgogCSAqIFl1Y2t5IGxhc3QgY29tcG9uZW50IG9yIG5vIGxhc3QgY29tcG9uZW50IGF0IGFsbD8KIAkgKiAoZm9vLy4sIGZvby8uLiwgLy8vLy8pCkBAIC0xNzg0LDcgKzE3ODQsNyBAQAogCQl9CiAJCWRwdXQoZGVudHJ5KTsKIAl9Ci0JdXAoJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKIAlwdXRuYW1lKHRtcCk7CkBAIC0xODM2LDcgKzE4MzYsNyBAQAogCQkJZXJyb3IgPSB2ZnNfbWtkaXIobmQuZGVudHJ5LT5kX2lub2RlLCBkZW50cnksIG1vZGUpOwogCQkJZHB1dChkZW50cnkpOwogCQl9Ci0JCXVwKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKIAkJcHV0bmFtZSh0bXApOwpAQCAtMTg4NSw3ICsxODg1LDcgQEAKIAogCURRVU9UX0lOSVQoZGlyKTsKIAotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZGVudHJ5X3VuaGFzaChkZW50cnkpOwogCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkKIAkJZXJyb3IgPSAtRUJVU1k7CkBAIC0xODk3LDcgKzE4OTcsNyBAQAogCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mbGFncyB8PSBTX0RFQUQ7CiAJCX0KIAl9Ci0JdXAoJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoIWVycm9yKSB7CiAJCWRfZGVsZXRlKGRlbnRyeSk7CiAJfQpAQCAtMTkzMiwxNCArMTkzMiwxNCBAQAogCQkJZXJyb3IgPSAtRUJVU1k7CiAJCQlnb3RvIGV4aXQxOwogCX0KLQlkb3duKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQllcnJvciA9IHZmc19ybWRpcihuZC5kZW50cnktPmRfaW5vZGUsIGRlbnRyeSk7CiAJCWRwdXQoZGVudHJ5KTsKIAl9Ci0JdXAoJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIGV4aXQxOgogCXBhdGhfcmVsZWFzZSgmbmQpOwogZXhpdDoKQEAgLTE5NTksNyArMTk1OSw3IEBACiAKIAlEUVVPVF9JTklUKGRpcik7CiAKLQlkb3duKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkKIAkJZXJyb3IgPSAtRUJVU1k7CiAJZWxzZSB7CkBAIC0xOTY3LDcgKzE5NjcsNyBAQAogCQlpZiAoIWVycm9yKQogCQkJZXJyb3IgPSBkaXItPmlfb3AtPnVubGluayhkaXIsIGRlbnRyeSk7CiAJfQotCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAkvKiBXZSBkb24ndCBkX2RlbGV0ZSgpIE5GUyBzaWxseXJlbmFtZWQgZmlsZXMtLXRoZXkgc3RpbGwgZXhpc3QuICovCiAJaWYgKCFlcnJvciAmJiAhKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ORlNGU19SRU5BTUVEKSkgewpAQCAtMTk3OSw3ICsxOTc5LDcgQEAKIAogLyoKICAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBhY3R1YWwgdHJ1bmNhdGlvbiBvZiB0aGUgZmlsZSB3aWxsIG9jY3VyIG91dHNpZGUgaXRzCi0gKiBkaXJlY3RvcnkncyBpX3NlbS4gIFRydW5jYXRlIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGlmIHRoZXJlIGlzIGEgbG90IG9mCisgKiBkaXJlY3RvcnkncyBpX211dGV4LiAgVHJ1bmNhdGUgY2FuIHRha2UgYSBsb25nIHRpbWUgaWYgdGhlcmUgaXMgYSBsb3Qgb2YKICAqIHdyaXRlb3V0IGhhcHBlbmluZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gcHJldmVudCBhY2Nlc3MgdG8gdGhlIGRpcmVjdG9yeQogICogd2hpbGUgd2FpdGluZyBvbiB0aGUgSS9PLgogICovCkBAIC0yMDAxLDcgKzIwMDEsNyBAQAogCWVycm9yID0gLUVJU0RJUjsKIAlpZiAobmQubGFzdF90eXBlICE9IExBU1RfTk9STSkKIAkJZ290byBleGl0MTsKLQlkb3duKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewpAQCAtMjAxNSw3ICsyMDE1LDcgQEAKIAlleGl0MjoKIAkJZHB1dChkZW50cnkpOwogCX0KLQl1cCgmbmQuZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChpbm9kZSkKIAkJaXB1dChpbm9kZSk7CS8qIHRydW5jYXRlIHRoZSBpbm9kZSBoZXJlICovCiBleGl0MToKQEAgLTIwNzUsNyArMjA3NSw3IEBACiAJCQllcnJvciA9IHZmc19zeW1saW5rKG5kLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBmcm9tLCBTX0lBTExVR08pOwogCQkJZHB1dChkZW50cnkpOwogCQl9Ci0JCXVwKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKIAkJcHV0bmFtZSh0byk7CkBAIC0yMTEzLDEwICsyMTEzLDEwIEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlkb3duKCZvbGRfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJRFFVT1RfSU5JVChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7Ci0JdXAoJm9sZF9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm9sZF9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCiAJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIG5ld19kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0yMTU3LDcgKzIxNTcsNyBAQAogCQllcnJvciA9IHZmc19saW5rKG9sZF9uZC5kZW50cnksIG5kLmRlbnRyeS0+ZF9pbm9kZSwgbmV3X2RlbnRyeSk7CiAJCWRwdXQobmV3X2RlbnRyeSk7CiAJfQotCXVwKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiBvdXRfcmVsZWFzZToKIAlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKQEAgLTIxNzgsNyArMjE3OCw3IEBACiAgKgkgICBzYi0+c192ZnNfcmVuYW1lX3NlbS4gV2UgbWlnaHQgYmUgbW9yZSBhY2N1cmF0ZSwgYnV0IHRoYXQncyBhbm90aGVyCiAgKgkgICBzdG9yeS4KICAqCWMpIHdlIGhhdmUgdG8gbG9jayBfdGhyZWVfIG9iamVjdHMgLSBwYXJlbnRzIGFuZCB2aWN0aW0gKGlmIGl0IGV4aXN0cykuCi0gKgkgICBBbmQgdGhhdCAtIGFmdGVyIHdlIGdvdCAtPmlfc2VtIG9uIHBhcmVudHMgKHVudGlsIHRoZW4gd2UgZG9uJ3Qga25vdworICoJICAgQW5kIHRoYXQgLSBhZnRlciB3ZSBnb3QgLT5pX211dGV4IG9uIHBhcmVudHMgKHVudGlsIHRoZW4gd2UgZG9uJ3Qga25vdwogICoJICAgd2hldGhlciB0aGUgdGFyZ2V0IGV4aXN0cykuICBTb2x1dGlvbjogdHJ5IHRvIGJlIHNtYXJ0IHdpdGggbG9ja2luZwogICoJICAgb3JkZXIgZm9yIGlub2Rlcy4gIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0cmVlIHRvcG9sb2d5IG1heSBjaGFuZ2UKICAqCSAgIG9ubHkgdW5kZXIgLT5zX3Zmc19yZW5hbWVfc2VtIF9hbmRfIHRoYXQgcGFyZW50IG9mIHRoZSBvYmplY3Qgd2UKQEAgLTIxOTUsOSArMjE5NSw5IEBACiAgKgkgICBzdHVmZiBpbnRvIFZGUyksIGJ1dCB0aGUgZm9ybWVyIGlzIG5vdCBnb2luZyBhd2F5LiBTb2x1dGlvbjogdGhlIHNhbWUKICAqCSAgIHRyaWNrIGFzIGluIHJtZGlyKCkuCiAgKgllKSBjb252ZXJzaW9uIGZyb20gZmhhbmRsZSB0byBkZW50cnkgbWF5IGNvbWUgaW4gdGhlIHdyb25nIG1vbWVudCAtIHdoZW4KLSAqCSAgIHdlIGFyZSByZW1vdmluZyB0aGUgdGFyZ2V0LiBTb2x1dGlvbjogd2Ugd2lsbCBoYXZlIHRvIGdyYWIgLT5pX3NlbQorICoJICAgd2UgYXJlIHJlbW92aW5nIHRoZSB0YXJnZXQuIFNvbHV0aW9uOiB3ZSB3aWxsIGhhdmUgdG8gZ3JhYiAtPmlfbXV0ZXgKICAqCSAgIGluIHRoZSBmaGFuZGxlX3RvX2RlbnRyeSBjb2RlLiBbRklYTUUgLSBjdXJyZW50IG5mc2ZoLmMgcmVsaWVzIG9uCi0gKgkgICAtPmlfc2VtIG9uIHBhcmVudHMsIHdoaWNoIHdvcmtzIGJ1dCBsZWFkcyB0byBzb21lIHRydWVseSBleGNlc3NpdmUKKyAqCSAgIC0+aV9tdXRleCBvbiBwYXJlbnRzLCB3aGljaCB3b3JrcyBidXQgbGVhZHMgdG8gc29tZSB0cnVlbHkgZXhjZXNzaXZlCiAgKgkgICBsb2NraW5nXS4KICAqLwogc3RhdGljIGludCB2ZnNfcmVuYW1lX2RpcihzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCkBAIC0yMjIyLDcgKzIyMjIsNyBAQAogCiAJdGFyZ2V0ID0gbmV3X2RlbnRyeS0+ZF9pbm9kZTsKIAlpZiAodGFyZ2V0KSB7Ci0JCWRvd24oJnRhcmdldC0+aV9zZW0pOworCQltdXRleF9sb2NrKCZ0YXJnZXQtPmlfbXV0ZXgpOwogCQlkZW50cnlfdW5oYXNoKG5ld19kZW50cnkpOwogCX0KIAlpZiAoZF9tb3VudHBvaW50KG9sZF9kZW50cnkpfHxkX21vdW50cG9pbnQobmV3X2RlbnRyeSkpCkBAIC0yMjMyLDcgKzIyMzIsNyBAQAogCWlmICh0YXJnZXQpIHsKIAkJaWYgKCFlcnJvcikKIAkJCXRhcmdldC0+aV9mbGFncyB8PSBTX0RFQUQ7Ci0JCXVwKCZ0YXJnZXQtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0YXJnZXQtPmlfbXV0ZXgpOwogCQlpZiAoZF91bmhhc2hlZChuZXdfZGVudHJ5KSkKIAkJCWRfcmVoYXNoKG5ld19kZW50cnkpOwogCQlkcHV0KG5ld19kZW50cnkpOwpAQCAtMjI1NSw3ICsyMjU1LDcgQEAKIAlkZ2V0KG5ld19kZW50cnkpOwogCXRhcmdldCA9IG5ld19kZW50cnktPmRfaW5vZGU7CiAJaWYgKHRhcmdldCkKLQkJZG93bigmdGFyZ2V0LT5pX3NlbSk7CisJCW11dGV4X2xvY2soJnRhcmdldC0+aV9tdXRleCk7CiAJaWYgKGRfbW91bnRwb2ludChvbGRfZGVudHJ5KXx8ZF9tb3VudHBvaW50KG5ld19kZW50cnkpKQogCQllcnJvciA9IC1FQlVTWTsKIAllbHNlCkBAIC0yMjY2LDcgKzIyNjYsNyBAQAogCQkJZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpOwogCX0KIAlpZiAodGFyZ2V0KQotCQl1cCgmdGFyZ2V0LT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmdGFyZ2V0LT5pX211dGV4KTsKIAlkcHV0KG5ld19kZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggM2U4ZmI2MS4uZjBlMzUzZiAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogCQlyZXR1cm4gLUVOT1RESVI7CiAKIAllcnIgPSAtRU5PRU5UOwotCWRvd24oJm5kLT5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoSVNfREVBRERJUihuZC0+ZGVudHJ5LT5kX2lub2RlKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC04MjYsNyArODI2LDcgQEAKIAlpZiAoSVNfUk9PVChuZC0+ZGVudHJ5KSB8fCAhZF91bmhhc2hlZChuZC0+ZGVudHJ5KSkKIAkJZXJyID0gYXR0YWNoX3JlY3Vyc2l2ZV9tbnQobW50LCBuZCwgTlVMTCk7CiBvdXRfdW5sb2NrOgotCXVwKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoIWVycikKIAkJc2VjdXJpdHlfc2JfcG9zdF9hZGRtb3VudChtbnQsIG5kKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTYyLDcgKzk2Miw3IEBACiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVOT0VOVDsKLQlkb3duKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmbmQtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKElTX0RFQURESVIobmQtPmRlbnRyeS0+ZF9pbm9kZSkpCiAJCWdvdG8gb3V0MTsKIApAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAlsaXN0X2RlbF9pbml0KCZvbGRfbmQubW50LT5tbnRfZXhwaXJlKTsKIAlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CiBvdXQxOgotCXVwKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZuZC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dDoKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJaWYgKCFlcnIpCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCXVzZXJfbmQuZGVudHJ5ID0gZGdldChjdXJyZW50LT5mcy0+cm9vdCk7CiAJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKIAlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKLQlkb3duKCZvbGRfbmQuZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmb2xkX25kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmIChJU19NTlRfU0hBUkVEKG9sZF9uZC5tbnQpIHx8CiAJCUlTX01OVF9TSEFSRUQobmV3X25kLm1udC0+bW50X3BhcmVudCkgfHwKQEAgLTE2MjYsNyArMTYyNiw3IEBACiAJcGF0aF9yZWxlYXNlKCZyb290X3BhcmVudCk7CiAJcGF0aF9yZWxlYXNlKCZwYXJlbnRfbmQpOwogb3V0MjoKLQl1cCgmb2xkX25kLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmb2xkX25kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJdXBfd3JpdGUoJm5hbWVzcGFjZV9zZW0pOwogCXBhdGhfcmVsZWFzZSgmdXNlcl9uZCk7CiAJcGF0aF9yZWxlYXNlKCZvbGRfbmQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IGU5MjU1MTkuLmExNTU0YmUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkvKiBFbnN1cmUgY29uc2lzdGVudCBwYWdlIGFsaWdubWVudCBvZiB0aGUgZGF0YS4KIAkgKiBOb3RlOiBhc3N1bWVzIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGlzIG1hcHBpbmcgZWl0aGVyCi0JICoJIHRocm91Z2ggaW5vZGUtPmlfc2VtIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLgorCSAqCSB0aHJvdWdoIGlub2RlLT5pX211dGV4IG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLgogCSAqLwogCWlmIChwYWdlLT5pbmRleCA9PSAwKQogCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBQQUdFX0NBQ0hFX1NJWkUsIC0xKTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogCiBsb2ZmX3QgbmZzX2xsc2Vla19kaXIoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7Ci0JZG93bigmZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbHAtPmZfcG9zOwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJCSgoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKilmaWxwLT5wcml2YXRlX2RhdGEpLT5kaXJfY29va2llID0gMDsKIAl9CiBvdXQ6Ci0JdXAoJmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAlvcGVuZmxhZ3MgJj0gfihPX0NSRUFUfE9fVFJVTkMpOwogCiAJLyoKLQkgKiBOb3RlOiB3ZSdyZSBub3QgaG9sZGluZyBpbm9kZS0+aV9zZW0gYW5kIHNvIG1heSBiZSByYWNpbmcgd2l0aAorCSAqIE5vdGU6IHdlJ3JlIG5vdCBob2xkaW5nIGlub2RlLT5pX211dGV4IGFuZCBzbyBtYXkgYmUgcmFjaW5nIHdpdGgKIAkgKiBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBkaXJlY3RvcnkuIFdlIHRoZXJlZm9yZSBzYXZlIHRoZQogCSAqIGNoYW5nZSBhdHRyaWJ1dGUgKmJlZm9yZSogd2UgZG8gdGhlIFJQQyBjYWxsLgogCSAqLwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAkJcmV0dXJuIGRlbnRyeTsKIAlpZiAoIWRlc2MtPnBsdXMgfHwgIShlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFIpKQogCQlyZXR1cm4gTlVMTDsKLQkvKiBOb3RlOiBjYWxsZXIgaXMgYWxyZWFkeSBob2xkaW5nIHRoZSBkaXItPmlfc2VtISAqLworCS8qIE5vdGU6IGNhbGxlciBpcyBhbHJlYWR5IGhvbGRpbmcgdGhlIGRpci0+aV9tdXRleCEgKi8KIAlkZW50cnkgPSBkX2FsbG9jKHBhcmVudCwgJm5hbWUpOwogCWlmIChkZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRyZWNvdmVyLmMgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKaW5kZXggOTU0Y2Y4OS4uYmU5NjNhMSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCisrKyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwpAQCAtMTIxLDkgKzEyMSw5IEBACiBzdGF0aWMgdm9pZAogbmZzZDRfc3luY19yZWNfZGlyKHZvaWQpCiB7Ci0JZG93bigmcmVjX2Rpci5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJbmZzZF9zeW5jX2RpcihyZWNfZGlyLmRlbnRyeSk7Ci0JdXAoJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKIGludApAQCAtMTQzLDcgKzE0Myw3IEBACiAJbmZzNF9zYXZlX3VzZXIoJnVpZCwgJmdpZCk7CiAKIAkvKiBsb2NrIHRoZSBwYXJlbnQgKi8KLQlkb3duKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAogCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGRuYW1lLCByZWNfZGlyLmRlbnRyeSwgSEVYRElSX0xFTi0xKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKQEAgLTE1OSw3ICsxNTksNyBAQAogb3V0X3B1dDoKIAlkcHV0KGRlbnRyeSk7CiBvdXRfdW5sb2NrOgotCXVwKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcmVjX2Rpci5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChzdGF0dXMgPT0gMCkgewogCQljbHAtPmNsX2ZpcnN0c3RhdGUgPSAxOwogCQluZnNkNF9zeW5jX3JlY19kaXIoKTsKQEAgLTI1OSw5ICsyNTksOSBAQAogCQlwcmludGsoIm5mc2Q0OiBub24tZmlsZSBmb3VuZCBpbiBjbGllbnQgcmVjb3ZlcnkgZGlyZWN0b3J5XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gdmZzX3VubGluayhkaXItPmRfaW5vZGUsIGRlbnRyeSk7Ci0JdXAoJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yNzQsOSArMjc0LDkgQEAKIAkgKiBhbnkgcmVndWxhciBmaWxlcyBhbnl3YXksIGp1c3QgaW4gY2FzZSB0aGUgZGlyZWN0b3J5IHdhcyBjcmVhdGVkIGJ5CiAJICogYSBrZXJuZWwgZnJvbSB0aGUgZnV0dXJlLi4uLiAqLwogCW5mc2Q0X2xpc3RfcmVjX2RpcihkZW50cnksIG5mc2Q0X3JlbW92ZV9jbGlkX2ZpbGUpOwotCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gdmZzX3JtZGlyKGRpci0+ZF9pbm9kZSwgZGVudHJ5KTsKLQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTI4OCw5ICsyODgsOSBAQAogCiAJZHByaW50aygiTkZTRDogbmZzZDRfdW5saW5rX2NsaWRfZGlyLiBuYW1lICUuKnNcbiIsIG5hbWxlbiwgbmFtZSk7CiAKLQlkb3duKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCByZWNfZGlyLmRlbnRyeSwgbmFtbGVuKTsKLQl1cCgmcmVjX2Rpci5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJc3RhdHVzID0gUFRSX0VSUihkZW50cnkpOwogCQlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggZGY0MDE5Zi4uYmIzNmI0MyAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC0zOTAsMTIgKzM5MCwxMiBAQAogCiAJZXJyb3IgPSAtRU9QTk9UU1VQUDsKIAlpZiAoaW5vZGUtPmlfb3AgJiYgaW5vZGUtPmlfb3AtPnNldHhhdHRyKSB7Ci0JCWRvd24oJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJc2VjdXJpdHlfaW5vZGVfc2V0eGF0dHIoZGVudHJ5LCBrZXksIGJ1ZiwgbGVuLCAwKTsKIAkJZXJyb3IgPSBpbm9kZS0+aV9vcC0+c2V0eGF0dHIoZGVudHJ5LCBrZXksIGJ1ZiwgbGVuLCAwKTsKIAkJaWYgKCFlcnJvcikKIAkJCXNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0eGF0dHIoZGVudHJ5LCBrZXksIGJ1ZiwgbGVuLCAwKTsKLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCX0KIG91dDoKIAlrZnJlZShidWYpOwpAQCAtNzM5LDkgKzczOSw5IEBACiAgICAgICAgIGludCBlcnI7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWRwcmludGsoIm5mc2Q6IHN5bmMgZmlsZSAlc1xuIiwgZmlscC0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAllcnI9bmZzZF9kb3N5bmMoZmlscCwgZmlscC0+Zl9kZW50cnksIGZpbHAtPmZfb3ApOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTg4NSw5ICs4ODUsOSBAQAogCXN0cnVjdCBpYXR0cglpYTsKIAlpYS5pYV92YWxpZCA9IEFUVFJfS0lMTF9TVUlEIHwgQVRUUl9LSUxMX1NHSUQ7CiAKLQlkb3duKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCW5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmaWEpOwotCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuYwppbmRleCBlZGEwNTZiLi45NDgwYTA1IDEwMDY0NAotLS0gYS9mcy9udGZzL2F0dHJpYi5jCisrKyBiL2ZzL250ZnMvYXR0cmliLmMKQEAgLTE1MzIsNyArMTUzMiw3IEBACiAgKiBOT1RFIHRvIHNlbGY6IE5vIGNoYW5nZXMgaW4gdGhlIGF0dHJpYnV0ZSBsaXN0IGFyZSByZXF1aXJlZCB0byBtb3ZlIGZyb20KICAqCQkgYSByZXNpZGVudCB0byBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUuCiAgKgotICogTG9ja2luZzogLSBUaGUgY2FsbGVyIG11c3QgaG9sZCBpX3NlbSBvbiB0aGUgaW5vZGUuCisgKiBMb2NraW5nOiAtIFRoZSBjYWxsZXIgbXVzdCBob2xkIGlfbXV0ZXggb24gdGhlIGlub2RlLgogICovCiBpbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KG50ZnNfaW5vZGUgKm5pLCBjb25zdCB1MzIgZGF0YV9zaXplKQogewpAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAkvKgogCSAqIFRoaXMgbmVlZHMgdG8gYmUgbGFzdCBzaW5jZSB0aGUgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIC0+cmVhZHBhZ2UKIAkgKiBhbmQgLT53cml0ZXBhZ2UgY2FuIHJ1biBjb25jdXJyZW50bHkgd2l0aCB1cyBhcyB0aGV5IGFyZSBub3QKLQkgKiBzZXJpYWxpemVkIG9uIGlfc2VtLiAgTm90ZSwgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGZhaWwgb25jZSB3ZSBmbGlwCisJICogc2VyaWFsaXplZCBvbiBpX211dGV4LiAgTm90ZSwgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGZhaWwgb25jZSB3ZSBmbGlwCiAJICogdGhpcyBzd2l0Y2gsIHdoaWNoIGlzIGFub3RoZXIgcmVhc29uIHRvIGRvIHRoaXMgbGFzdC4KIAkgKi8KIAlOSW5vU2V0Tm9uUmVzaWRlbnQobmkpOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9kaXIuYyBiL2ZzL250ZnMvZGlyLmMKaW5kZXggNzk1YzNkMS4uYjA2OTBkNCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9kaXIuYworKysgYi9mcy9udGZzL2Rpci5jCkBAIC02OSw3ICs2OSw3IEBACiAgKiB3b3JrIGJ1dCB3ZSBkb24ndCBjYXJlIGZvciBob3cgcXVpY2tseSBvbmUgY2FuIGFjY2VzcyB0aGVtLiBUaGlzIGFsc28gZml4ZXMKICAqIHRoZSBkY2FjaGUgYWxpYXNpbmcgaXNzdWVzLgogICoKLSAqIExvY2tpbmc6ICAtIENhbGxlciBtdXN0IGhvbGQgaV9zZW0gb24gdGhlIGRpcmVjdG9yeS4KKyAqIExvY2tpbmc6ICAtIENhbGxlciBtdXN0IGhvbGQgaV9tdXRleCBvbiB0aGUgZGlyZWN0b3J5LgogICoJICAgICAtIEVhY2ggcGFnZSBjYWNoZSBwYWdlIGluIHRoZSBpbmRleCBhbGxvY2F0aW9uIG1hcHBpbmcgbXVzdCBiZQogICoJICAgICAgIGxvY2tlZCB3aGlsc3QgYmVpbmcgYWNjZXNzZWQgb3RoZXJ3aXNlIHdlIG1heSBmaW5kIGEgY29ycnVwdAogICoJICAgICAgIHBhZ2UgZHVlIHRvIGl0IGJlaW5nIHVuZGVyIC0+d3JpdGVwYWdlIGF0IHRoZSBtb21lbnQgd2hpY2gKQEAgLTEwODUsMTEgKzEwODUsMTEgQEAKICAqIFdoaWxlIHRoaXMgd2lsbCByZXR1cm4gdGhlIG5hbWVzIGluIHJhbmRvbSBvcmRlciB0aGlzIGRvZXNuJ3QgbWF0dGVyIGZvcgogICogLT5yZWFkZGlyIGJ1dCBPVE9IIHJlc3VsdHMgaW4gYSBmYXN0ZXIgLT5yZWFkZGlyLgogICoKLSAqIFZGUyBjYWxscyAtPnJlYWRkaXIgd2l0aG91dCBCS0wgYnV0IHdpdGggaV9zZW0gaGVsZC4gVGhpcyBwcm90ZWN0cyB0aGUgVkZTCisgKiBWRlMgY2FsbHMgLT5yZWFkZGlyIHdpdGhvdXQgQktMIGJ1dCB3aXRoIGlfbXV0ZXggaGVsZC4gVGhpcyBwcm90ZWN0cyB0aGUgVkZTCiAgKiBwYXJ0cyAoZS5nLiAtPmZfcG9zIGFuZCAtPmlfc2l6ZSwgYW5kIGl0IGFsc28gcHJvdGVjdHMgYWdhaW5zdCBkaXJlY3RvcnkKICAqIG1vZGlmaWNhdGlvbnMpLgogICoKLSAqIExvY2tpbmc6ICAtIENhbGxlciBtdXN0IGhvbGQgaV9zZW0gb24gdGhlIGRpcmVjdG9yeS4KKyAqIExvY2tpbmc6ICAtIENhbGxlciBtdXN0IGhvbGQgaV9tdXRleCBvbiB0aGUgZGlyZWN0b3J5LgogICoJICAgICAtIEVhY2ggcGFnZSBjYWNoZSBwYWdlIGluIHRoZSBpbmRleCBhbGxvY2F0aW9uIG1hcHBpbmcgbXVzdCBiZQogICoJICAgICAgIGxvY2tlZCB3aGlsc3QgYmVpbmcgYWNjZXNzZWQgb3RoZXJ3aXNlIHdlIG1heSBmaW5kIGEgY29ycnVwdAogICoJICAgICAgIHBhZ2UgZHVlIHRvIGl0IGJlaW5nIHVuZGVyIC0+d3JpdGVwYWdlIGF0IHRoZSBtb21lbnQgd2hpY2gKQEAgLTE1MjAsNyArMTUyMCw3IEBACiAgKiBOb3RlOiBJbiB0aGUgcGFzdCBAZmlscCBjb3VsZCBiZSBOVUxMIHNvIHdlIGlnbm9yZSBpdCBhcyB3ZSBkb24ndCBuZWVkIGl0CiAgKiBhbnl3YXkuCiAgKgotICogTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCBpX3NlbSBvbiB0aGUgaW5vZGUuCisgKiBMb2NraW5nOiBDYWxsZXIgbXVzdCBob2xkIGlfbXV0ZXggb24gdGhlIGlub2RlLgogICoKICAqIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIHdyaXRlIGFsbCBhdHRyaWJ1dGUvaW5kZXggaW5vZGVzIGFzc29jaWF0ZWQKICAqIHdpdGggdGhpcyBpbm9kZSBidXQgc2luY2Ugd2UgaGF2ZSBubyBzaW1wbGUgd2F5IG9mIGdldHRpbmcgdG8gdGhlbSB3ZSBpZ25vcmUKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggNzI3NTMzOC4uMzBmNzFhYyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICogdGhpcyBpcyB0aGUgY2FzZSwgdGhlIG5lY2Vzc2FyeSB6ZXJvaW5nIHdpbGwgYWxzbyBoYXZlIGhhcHBlbmVkIGFuZCB0aGF0IGFsbAogICogbWV0YWRhdGEgaXMgc2VsZi1jb25zaXN0ZW50LgogICoKLSAqIExvY2tpbmc6IGlfc2VtIG9uIHRoZSB2ZnMgaW5vZGUgY29ycnNlcG9uc2luZCB0byB0aGUgbnRmcyBpbm9kZSBAbmkgbXVzdCBiZQorICogTG9ja2luZzogaV9tdXRleCBvbiB0aGUgdmZzIGlub2RlIGNvcnJzZXBvbnNpbmQgdG8gdGhlIG50ZnMgaW5vZGUgQG5pIG11c3QgYmUKICAqCSAgICBoZWxkIGJ5IHRoZSBjYWxsZXIuCiAgKi8KIHN0YXRpYyBpbnQgbnRmc19hdHRyX2V4dGVuZF9pbml0aWFsaXplZChudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld19pbml0X3NpemUsCkBAIC00NzMsNyArNDczLDcgQEAKICAqIEBieXRlczoJbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4KICAqCiAgKiBUaGlzIGlzIGNhbGxlZCBmb3Igbm9uLXJlc2lkZW50IGF0dHJpYnV0ZXMgZnJvbSBudGZzX2ZpbGVfYnVmZmVyZWRfd3JpdGUoKQotICogd2l0aCBpX3NlbSBoZWxkIG9uIHRoZSBpbm9kZSAoQHBhZ2VzWzBdLT5tYXBwaW5nLT5ob3N0KS4gIFRoZXJlIGFyZQorICogd2l0aCBpX211dGV4IGhlbGQgb24gdGhlIGlub2RlIChAcGFnZXNbMF0tPm1hcHBpbmctPmhvc3QpLiAgVGhlcmUgYXJlCiAgKiBAbnJfcGFnZXMgcGFnZXMgaW4gQHBhZ2VzIHdoaWNoIGFyZSBsb2NrZWQgYnV0IG5vdCBrbWFwKClwZWQuICBUaGUgc291cmNlCiAgKiBkYXRhIGhhcyBub3QgeWV0IGJlZW4gY29waWVkIGludG8gdGhlIEBwYWdlcy4KICAqIApAQCAtMTYzNyw3ICsxNjM3LDcgQEAKICAqIEBwb3M6CWJ5dGUgcG9zaXRpb24gaW4gZmlsZSBhdCB3aGljaCB0aGUgd3JpdGUgYmVnaW5zCiAgKiBAYnl0ZXM6CW51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuCiAgKgotICogVGhpcyBpcyBjYWxsZWQgZnJvbSBudGZzX2ZpbGVfYnVmZmVyZWRfd3JpdGUoKSB3aXRoIGlfc2VtIGhlbGQgb24gdGhlIGlub2RlCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIG50ZnNfZmlsZV9idWZmZXJlZF93cml0ZSgpIHdpdGggaV9tdXRleCBoZWxkIG9uIHRoZSBpbm9kZQogICogKEBwYWdlc1swXS0+bWFwcGluZy0+aG9zdCkuICBUaGVyZSBhcmUgQG5yX3BhZ2VzIHBhZ2VzIGluIEBwYWdlcyB3aGljaCBhcmUKICAqIGxvY2tlZCBidXQgbm90IGttYXAoKXBlZC4gIFRoZSBzb3VyY2UgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIGNvcGllZCBpbnRvIHRoZQogICogQHBhZ2UuICBudGZzX3ByZXBhcmVfcGFnZXNfZm9yX25vbl9yZXNpZGVudF93cml0ZSgpIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUKQEAgLTE4MTQsNyArMTgxNCw3IEBACiAvKioKICAqIG50ZnNfZmlsZV9idWZmZXJlZF93cml0ZSAtCiAgKgotICogTG9ja2luZzogVGhlIHZmcyBpcyBob2xkaW5nIC0+aV9zZW0gb24gdGhlIGlub2RlLgorICogTG9ja2luZzogVGhlIHZmcyBpcyBob2xkaW5nIC0+aV9tdXRleCBvbiB0aGUgaW5vZGUuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsCkBAIC0yMTk2LDkgKzIxOTYsOSBAQAogCiAJQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0ID0gbnRmc19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgJmxvY2FsX2lvdiwgMSwgJmlvY2ItPmtpX3Bvcyk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKHJldCA+IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKIAkJaW50IGVyciA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTIyMjEsMTIgKzIyMjEsMTIgQEAKIAlzdHJ1Y3Qga2lvY2Iga2lvY2I7CiAJc3NpemVfdCByZXQ7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpbml0X3N5bmNfa2lvY2IoJmtpb2NiLCBmaWxlKTsKIAlyZXQgPSBudGZzX2ZpbGVfYWlvX3dyaXRlX25vbG9jaygma2lvY2IsIGlvdiwgbnJfc2VncywgcHBvcyk7CiAJaWYgKHJldCA9PSAtRUlPQ0JRVUVVRUQpCiAJCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CiAJCWludCBlcnIgPSBzeW5jX3BhZ2VfcmFuZ2UoaW5vZGUsIG1hcHBpbmcsICpwcG9zIC0gcmV0LCByZXQpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTIyNjksNyArMjI2OSw3IEBACiAgKiBOb3RlOiBJbiB0aGUgcGFzdCBAZmlscCBjb3VsZCBiZSBOVUxMIHNvIHdlIGlnbm9yZSBpdCBhcyB3ZSBkb24ndCBuZWVkIGl0CiAgKiBhbnl3YXkuCiAgKgotICogTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCBpX3NlbSBvbiB0aGUgaW5vZGUuCisgKiBMb2NraW5nOiBDYWxsZXIgbXVzdCBob2xkIGlfbXV0ZXggb24gdGhlIGlub2RlLgogICoKICAqIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIHdyaXRlIGFsbCBhdHRyaWJ1dGUvaW5kZXggaW5vZGVzIGFzc29jaWF0ZWQKICAqIHdpdGggdGhpcyBpbm9kZSBidXQgc2luY2Ugd2UgaGF2ZSBubyBzaW1wbGUgd2F5IG9mIGdldHRpbmcgdG8gdGhlbSB3ZSBpZ25vcmUKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguYwppbmRleCA4ZjJkNTcyLi45ZjU0MjdjIDEwMDY0NAotLS0gYS9mcy9udGZzL2luZGV4LmMKKysrIGIvZnMvbnRmcy9pbmRleC5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiBBbGxvY2F0ZSBhIG5ldyBpbmRleCBjb250ZXh0LCBpbml0aWFsaXplIGl0IHdpdGggQGlkeF9uaSBhbmQgcmV0dXJuIGl0LgogICogUmV0dXJuIE5VTEwgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCiAgKgotICogTG9ja2luZzogIENhbGxlciBtdXN0IGhvbGQgaV9zZW0gb24gdGhlIGluZGV4IGlub2RlLgorICogTG9ja2luZzogIENhbGxlciBtdXN0IGhvbGQgaV9tdXRleCBvbiB0aGUgaW5kZXggaW5vZGUuCiAgKi8KIG50ZnNfaW5kZXhfY29udGV4dCAqbnRmc19pbmRleF9jdHhfZ2V0KG50ZnNfaW5vZGUgKmlkeF9uaSkKIHsKQEAgLTUwLDcgKzUwLDcgQEAKICAqCiAgKiBSZWxlYXNlIHRoZSBpbmRleCBjb250ZXh0IEBpY3R4LCByZWxlYXNpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgogICoKLSAqIExvY2tpbmc6ICBDYWxsZXIgbXVzdCBob2xkIGlfc2VtIG9uIHRoZSBpbmRleCBpbm9kZS4KKyAqIExvY2tpbmc6ICBDYWxsZXIgbXVzdCBob2xkIGlfbXV0ZXggb24gdGhlIGluZGV4IGlub2RlLgogICovCiB2b2lkIG50ZnNfaW5kZXhfY3R4X3B1dChudGZzX2luZGV4X2NvbnRleHQgKmljdHgpCiB7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAqIG9yIG50ZnNfaW5kZXhfZW50cnlfd3JpdGUoKSBiZWZvcmUgdGhlIGNhbGwgdG8gbnRmc19pbmRleF9jdHhfcHV0KCkgdG8KICAqIGVuc3VyZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSB3cml0dGVuIHRvIGRpc2suCiAgKgotICogTG9ja2luZzogIC0gQ2FsbGVyIG11c3QgaG9sZCBpX3NlbSBvbiB0aGUgaW5kZXggaW5vZGUuCisgKiBMb2NraW5nOiAgLSBDYWxsZXIgbXVzdCBob2xkIGlfbXV0ZXggb24gdGhlIGluZGV4IGlub2RlLgogICoJICAgICAtIEVhY2ggcGFnZSBjYWNoZSBwYWdlIGluIHRoZSBpbmRleCBhbGxvY2F0aW9uIG1hcHBpbmcgbXVzdCBiZQogICoJICAgICAgIGxvY2tlZCB3aGlsc3QgYmVpbmcgYWNjZXNzZWQgb3RoZXJ3aXNlIHdlIG1heSBmaW5kIGEgY29ycnVwdAogICoJICAgICAgIHBhZ2UgZHVlIHRvIGl0IGJlaW5nIHVuZGVyIC0+d3JpdGVwYWdlIGF0IHRoZSBtb21lbnQgd2hpY2gKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCBiMjRmNGM0Li5iZGE3YTA4IDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0yMTI1LDEzICsyMTI1LDEzIEBACiAJCW50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTsKIAkJaWYgKE5Jbm9JbmRleEFsbG9jUHJlc2VudChuaSkpIHsKIAkJCXN0cnVjdCBpbm9kZSAqYnZpID0gTlVMTDsKLQkJCWRvd24oJnZpLT5pX3NlbSk7CisJCQltdXRleF9sb2NrKCZ2aS0+aV9tdXRleCk7CiAJCQlpZiAoYXRvbWljX3JlYWQoJnZpLT5pX2NvdW50KSA9PSAyKSB7CiAJCQkJYnZpID0gbmktPml0eXBlLmluZGV4LmJtcF9pbm87CiAJCQkJaWYgKGJ2aSkKIAkJCQkJbmktPml0eXBlLmluZGV4LmJtcF9pbm8gPSBOVUxMOwogCQkJfQotCQkJdXAoJnZpLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJnZpLT5pX211dGV4KTsKIAkJCWlmIChidmkpCiAJCQkJaXB1dChidmkpOwogCQl9CkBAIC0yMzExLDcgKzIzMTEsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1lcnJubyBvbiBlcnJvci4KICAqCi0gKiBDYWxsZWQgd2l0aCAtPmlfc2VtIGhlbGQuICBJbiBhbGwgYnV0IG9uZSBjYXNlIC0+aV9hbGxvY19zZW0gaXMgaGVsZCBmb3IKKyAqIENhbGxlZCB3aXRoIC0+aV9tdXRleCBoZWxkLiAgSW4gYWxsIGJ1dCBvbmUgY2FzZSAtPmlfYWxsb2Nfc2VtIGlzIGhlbGQgZm9yCiAgKiB3cml0aW5nLiAgVGhlIG9ubHkgY2FzZSBpbiB0aGUga2VybmVsIHdoZXJlIC0+aV9hbGxvY19zZW0gaXMgbm90IGhlbGQgaXMKICAqIG1tL2ZpbGVtYXAuYzo6Z2VuZXJpY19maWxlX2J1ZmZlcmVkX3dyaXRlKCkgd2hlcmUgdm10cnVuY2F0ZSgpIGlzIGNhbGxlZAogICogd2l0aCB0aGUgY3VycmVudCBpX3NpemUgYXMgdGhlIG9mZnNldC4gIFRoZSBhbmFsb2dvdXMgcGxhY2UgaW4gTlRGUyBpcyBpbgpAQCAtMjgzMSw3ICsyODMxLDcgQEAKICAqIFdlIGFsc28gYWJvcnQgYWxsIGNoYW5nZXMgb2YgdXNlciwgZ3JvdXAsIGFuZCBtb2RlIGFzIHdlIGRvIG5vdCBpbXBsZW1lbnQKICAqIHRoZSBOVEZTIEFDTHMgeWV0LgogICoKLSAqIENhbGxlZCB3aXRoIC0+aV9zZW0gaGVsZC4gIEZvciB0aGUgQVRUUl9TSVpFIChpLmUuIC0+dHJ1bmNhdGUpIGNhc2UsIGFsc28KKyAqIENhbGxlZCB3aXRoIC0+aV9tdXRleCBoZWxkLiAgRm9yIHRoZSBBVFRSX1NJWkUgKGkuZS4gLT50cnVuY2F0ZSkgY2FzZSwgYWxzbwogICogY2FsbGVkIHdpdGggLT5pX2FsbG9jX3NlbSBoZWxkIGZvciB3cml0aW5nLgogICoKICAqIEJhc2ljYWxseSB0aGlzIGlzIGEgY29weSBvZiBnZW5lcmljIG5vdGlmeV9jaGFuZ2UoKSBhbmQgaW5vZGVfc2V0YXR0cigpCmRpZmYgLS1naXQgYS9mcy9udGZzL25hbWVpLmMgYi9mcy9udGZzL25hbWVpLmMKaW5kZXggMzUxZGJjMy4uNWVhOWViOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9uYW1laS5jCisrKyBiL2ZzL250ZnMvbmFtZWkuYwpAQCAtOTYsNyArOTYsNyBAQAogICogICAgbmFtZS4gV2UgdGhlbiBjb252ZXJ0IHRoZSBuYW1lIHRvIHRoZSBjdXJyZW50IE5MUyBjb2RlIHBhZ2UsIGFuZCBwcm9jZWVkCiAgKiAgICBzZWFyY2hpbmcgZm9yIGEgZGVudHJ5IHdpdGggdGhpcyBuYW1lLCBldGMsIGFzIGluIGNhc2UgMiksIGFib3ZlLgogICoKLSAqIExvY2tpbmc6IENhbGxlciBtdXN0IGhvbGQgaV9zZW0gb24gdGhlIGRpcmVjdG9yeS4KKyAqIExvY2tpbmc6IENhbGxlciBtdXN0IGhvbGQgaV9tdXRleCBvbiB0aGUgZGlyZWN0b3J5LgogICovCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXJfaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50LAogCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKQEAgLTI1NCw3ICsyNTQsNyBAQAogCW5sc19uYW1lLmhhc2ggPSBmdWxsX25hbWVfaGFzaChubHNfbmFtZS5uYW1lLCBubHNfbmFtZS5sZW4pOwogCiAJLyoKLQkgKiBOb3RlOiBObyBuZWVkIGZvciBkZW50LT5kX2xvY2sgbG9jayBhcyBpX3NlbSBpcyBoZWxkIG9uIHRoZQorCSAqIE5vdGU6IE5vIG5lZWQgZm9yIGRlbnQtPmRfbG9jayBsb2NrIGFzIGlfbXV0ZXggaXMgaGVsZCBvbiB0aGUKIAkgKiBwYXJlbnQgaW5vZGUuCiAJICovCiAKQEAgLTM3NCw3ICszNzQsNyBAQAogICogVGhlIGNvZGUgaXMgYmFzZWQgb24gdGhlIGV4dDMgLT5nZXRfcGFyZW50KCkgaW1wbGVtZW50YXRpb24gZm91bmQgaW4KICAqIGZzL2V4dDMvbmFtZWkuYzo6ZXh0M19nZXRfcGFyZW50KCkuCiAgKgotICogTm90ZTogbnRmc19nZXRfcGFyZW50KCkgaXMgY2FsbGVkIHdpdGggQGNoaWxkX2RlbnQtPmRfaW5vZGUtPmlfc2VtIGRvd24uCisgKiBOb3RlOiBudGZzX2dldF9wYXJlbnQoKSBpcyBjYWxsZWQgd2l0aCBAY2hpbGRfZGVudC0+ZF9pbm9kZS0+aV9tdXRleCBkb3duLgogICoKICAqIFJldHVybiB0aGUgZGVudHJ5IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3Mgb3IgdGhlIGVycm9yIGNvZGUgb24KICAqIGVycm9yIChJU19FUlIoKSBpcyB0cnVlKS4KZGlmZiAtLWdpdCBhL2ZzL250ZnMvcXVvdGEuYyBiL2ZzL250ZnMvcXVvdGEuYwppbmRleCA4MzNkZjJhLi5kMGVmNDE4IDEwMDY0NAotLS0gYS9mcy9udGZzL3F1b3RhLmMKKysrIGIvZnMvbnRmcy9xdW90YS5jCkBAIC00OCw3ICs0OCw3IEBACiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIlF1b3RhIGlub2RlcyBhcmUgbm90IG9wZW4uIik7CiAJCXJldHVybiBGQUxTRTsKIAl9Ci0JZG93bigmdm9sLT5xdW90YV9xX2luby0+aV9zZW0pOworCW11dGV4X2xvY2soJnZvbC0+cXVvdGFfcV9pbm8tPmlfbXV0ZXgpOwogCWljdHggPSBudGZzX2luZGV4X2N0eF9nZXQoTlRGU19JKHZvbC0+cXVvdGFfcV9pbm8pKTsKIAlpZiAoIWljdHgpIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGdldCBpbmRleCBjb250ZXh0LiIpOwpAQCAtOTgsNyArOTgsNyBAQAogCW50ZnNfaW5kZXhfZW50cnlfbWFya19kaXJ0eShpY3R4KTsKIHNldF9kb25lOgogCW50ZnNfaW5kZXhfY3R4X3B1dChpY3R4KTsKLQl1cCgmdm9sLT5xdW90YV9xX2luby0+aV9zZW0pOworCW11dGV4X3VubG9jaygmdm9sLT5xdW90YV9xX2luby0+aV9tdXRleCk7CiAJLyoKIAkgKiBXZSBzZXQgdGhlIGZsYWcgc28gd2UgZG8gbm90IHRyeSB0byBtYXJrIHRoZSBxdW90YXMgb3V0IG9mIGRhdGUKIAkgKiBhZ2FpbiBvbiByZW1vdW50LgpAQCAtMTEwLDcgKzExMCw3IEBACiBlcnJfb3V0OgogCWlmIChpY3R4KQogCQludGZzX2luZGV4X2N0eF9wdXQoaWN0eCk7Ci0JdXAoJnZvbC0+cXVvdGFfcV9pbm8tPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnZvbC0+cXVvdGFfcV9pbm8tPmlfbXV0ZXgpOwogCXJldHVybiBGQUxTRTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jCmluZGV4IDZjMTZkYjkuLjI4MGUzODMgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvc3VwZXIuYworKysgYi9mcy9udGZzL3N1cGVyLmMKQEAgLTEyMTMsMTAgKzEyMTMsMTAgQEAKIAkgKiBGaW5kIHRoZSBpbm9kZSBudW1iZXIgZm9yIHRoZSBoaWJlcm5hdGlvbiBmaWxlIGJ5IGxvb2tpbmcgdXAgdGhlCiAJICogZmlsZW5hbWUgaGliZXJmaWwuc3lzIGluIHRoZSByb290IGRpcmVjdG9yeS4KIAkgKi8KLQlkb3duKCZ2b2wtPnJvb3RfaW5vLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmdm9sLT5yb290X2luby0+aV9tdXRleCk7CiAJbXJlZiA9IG50ZnNfbG9va3VwX2lub2RlX2J5X25hbWUoTlRGU19JKHZvbC0+cm9vdF9pbm8pLCBoaWJlcmZpbCwgMTIsCiAJCQkmbmFtZSk7Ci0JdXAoJnZvbC0+cm9vdF9pbm8tPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnZvbC0+cm9vdF9pbm8tPmlfbXV0ZXgpOwogCWlmIChJU19FUlJfTVJFRihtcmVmKSkgewogCQlyZXQgPSBNUkVGX0VSUihtcmVmKTsKIAkJLyogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIFdpbmRvd3MgaXMgbm90IGhpYmVybmF0ZWQuICovCkBAIC0xMzA3LDEwICsxMzA3LDEwIEBACiAJICogRmluZCB0aGUgaW5vZGUgbnVtYmVyIGZvciB0aGUgcXVvdGEgZmlsZSBieSBsb29raW5nIHVwIHRoZSBmaWxlbmFtZQogCSAqICRRdW90YSBpbiB0aGUgZXh0ZW5kZWQgc3lzdGVtIGZpbGVzIGRpcmVjdG9yeSAkRXh0ZW5kLgogCSAqLwotCWRvd24oJnZvbC0+ZXh0ZW5kX2luby0+aV9zZW0pOworCW11dGV4X2xvY2soJnZvbC0+ZXh0ZW5kX2luby0+aV9tdXRleCk7CiAJbXJlZiA9IG50ZnNfbG9va3VwX2lub2RlX2J5X25hbWUoTlRGU19JKHZvbC0+ZXh0ZW5kX2lubyksIFF1b3RhLCA2LAogCQkJJm5hbWUpOwotCXVwKCZ2b2wtPmV4dGVuZF9pbm8tPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnZvbC0+ZXh0ZW5kX2luby0+aV9tdXRleCk7CiAJaWYgKElTX0VSUl9NUkVGKG1yZWYpKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBxdW90YXMgYXJlIGRpc2FibGVkIGFuZCBoYXZlCkBAIC0xMzkwLDEwICsxMzkwLDEwIEBACiAJICogRmluZCB0aGUgaW5vZGUgbnVtYmVyIGZvciB0aGUgdHJhbnNhY3Rpb24gbG9nIGZpbGUgYnkgbG9va2luZyB1cCB0aGUKIAkgKiBmaWxlbmFtZSAkVXNuSnJubCBpbiB0aGUgZXh0ZW5kZWQgc3lzdGVtIGZpbGVzIGRpcmVjdG9yeSAkRXh0ZW5kLgogCSAqLwotCWRvd24oJnZvbC0+ZXh0ZW5kX2luby0+aV9zZW0pOworCW11dGV4X2xvY2soJnZvbC0+ZXh0ZW5kX2luby0+aV9tdXRleCk7CiAJbXJlZiA9IG50ZnNfbG9va3VwX2lub2RlX2J5X25hbWUoTlRGU19JKHZvbC0+ZXh0ZW5kX2lubyksIFVzbkpybmwsIDgsCiAJCQkmbmFtZSk7Ci0JdXAoJnZvbC0+ZXh0ZW5kX2luby0+aV9zZW0pOworCW11dGV4X3VubG9jaygmdm9sLT5leHRlbmRfaW5vLT5pX211dGV4KTsKIAlpZiAoSVNfRVJSX01SRUYobXJlZikpIHsKIAkJLyoKIAkJICogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRyYW5zYWN0aW9uIGxvZ2dpbmcgaXMgZGlzYWJsZWQsCkBAIC0yMzEyLDkgKzIzMTIsOSBAQAogCWlmICghbGlzdF9lbXB0eSgmc2ItPnNfZGlydHkpKSB7CiAJCWNvbnN0IGNoYXIgKnMxLCAqczI7CiAKLQkJZG93bigmdm9sLT5tZnRfaW5vLT5pX3NlbSk7CisJCW11dGV4X2xvY2soJnZvbC0+bWZ0X2luby0+aV9tdXRleCk7CiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKHZvbC0+bWZ0X2luby0+aV9tYXBwaW5nLCAwKTsKLQkJdXAoJnZvbC0+bWZ0X2luby0+aV9zZW0pOworCQltdXRleF91bmxvY2soJnZvbC0+bWZ0X2luby0+aV9tdXRleCk7CiAJCXdyaXRlX2lub2RlX25vdyh2b2wtPm1mdF9pbm8sIDEpOwogCQlpZiAoIWxpc3RfZW1wdHkoJnNiLT5zX2RpcnR5KSkgewogCQkJc3RhdGljIGNvbnN0IGNoYXIgKl9zMSA9ICJpbm9kZXMiOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuYyBiL2ZzL29jZnMyL2FsbG9jLmMKaW5kZXggNDY1Zjc5Ny4uNmI5ODEyZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC05NjYsNyArOTY2LDcgQEAKIAltbG9nX2VudHJ5KCJzdGFydF9ibGsgPSAlIk1MRnU2NCIsIG51bV9jbHVzdGVycyA9ICV1XG4iLCBzdGFydF9ibGssCiAJCSAgIG51bV9jbHVzdGVycyk7CiAKLQlCVUdfT04oIWRvd25fdHJ5bG9jaygmdGxfaW5vZGUtPmlfc2VtKSk7CisJQlVHX09OKG11dGV4X3RyeWxvY2soJnRsX2lub2RlLT5pX211dGV4KSk7CiAKIAlzdGFydF9jbHVzdGVyID0gb2NmczJfYmxvY2tzX3RvX2NsdXN0ZXJzKG9zYi0+c2IsIHN0YXJ0X2Jsayk7CiAKQEAgLTExMDgsNyArMTEwOCw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogRXhwZWN0cyB5b3UgdG8gYWxyZWFkeSBiZSBob2xkaW5nIHRsX2lub2RlLT5pX3NlbSAqLworLyogRXhwZWN0cyB5b3UgdG8gYWxyZWFkeSBiZSBob2xkaW5nIHRsX2lub2RlLT5pX211dGV4ICovCiBzdGF0aWMgaW50IF9fb2NmczJfZmx1c2hfdHJ1bmNhdGVfbG9nKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCWludCBzdGF0dXM7CkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlCVUdfT04oIWRvd25fdHJ5bG9jaygmdGxfaW5vZGUtPmlfc2VtKSk7CisJQlVHX09OKG11dGV4X3RyeWxvY2soJnRsX2lub2RlLT5pX211dGV4KSk7CiAKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHRsX2JoLT5iX2RhdGE7CiAJdGwgPSAmZGktPmlkMi5pX2RlYWxsb2M7CkBAIC0xMTk4LDkgKzExOTgsOSBAQAogCWludCBzdGF0dXM7CiAJc3RydWN0IGlub2RlICp0bF9pbm9kZSA9IG9zYi0+b3NiX3RsX2lub2RlOwogCi0JZG93bigmdGxfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZ0bF9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gX19vY2ZzMl9mbHVzaF90cnVuY2F0ZV9sb2cob3NiKTsKLQl1cCgmdGxfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnRsX2lub2RlLT5pX211dGV4KTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogCW1sb2coMCwgImNsZWFudXAgJXUgcmVjb3JkcyBmcm9tICUiTUxGdTY0IlxuIiwgbnVtX3JlY3MsCiAJICAgICB0bF9jb3B5LT5pX2Jsa25vKTsKIAotCWRvd24oJnRsX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCWZvcihpID0gMDsgaSA8IG51bV9yZWNzOyBpKyspIHsKIAkJaWYgKG9jZnMyX3RydW5jYXRlX2xvZ19uZWVkc19mbHVzaChvc2IpKSB7CiAJCQlzdGF0dXMgPSBfX29jZnMyX2ZsdXNoX3RydW5jYXRlX2xvZyhvc2IpOwpAQCAtMTM5NSw3ICsxMzk1LDcgQEAKIAl9CiAKIGJhaWxfdXA6Ci0JdXAoJnRsX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ0bF9pbm9kZS0+aV9tdXRleCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTg0MCw3ICsxODQwLDcgQEAKIAogCW1sb2coMCwgImNsdXN0ZXJzX3RvX2RlbCA9ICV1IGluIHRoaXMgcGFzc1xuIiwgY2x1c3RlcnNfdG9fZGVsKTsKIAotCWRvd24oJnRsX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCXRsX3NlbSA9IDE7CiAJLyogb2NmczJfdHJ1bmNhdGVfbG9nX25lZWRzX2ZsdXNoIGd1YXJhbnRlZXMgdXMgYXQgbGVhc3Qgb25lCiAJICogcmVjb3JkIGlzIGZyZWUgZm9yIHVzZS4gSWYgdGhlcmUgaXNuJ3QgYW55LCB3ZSBmbHVzaCB0byBnZXQKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQl1cCgmdGxfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnRsX2lub2RlLT5pX211dGV4KTsKIAl0bF9zZW0gPSAwOwogCiAJb2NmczJfY29tbWl0X3RyYW5zKGhhbmRsZSk7CkBAIC0xODkwLDcgKzE4OTAsNyBAQAogCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOwogCiAJaWYgKHRsX3NlbSkKLQkJdXAoJnRsX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKGhhbmRsZSkKIAkJb2NmczJfY29tbWl0X3RyYW5zKGhhbmRsZSk7CkBAIC0xOTk0LDcgKzE5OTQsNyBAQAogCQkJZ290byBiYWlsOwogCQl9CiAKLQkJZG93bigmZXh0X2FsbG9jX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X2xvY2soJmV4dF9hbGxvY19pbm9kZS0+aV9tdXRleCk7CiAJCSgqdGMpLT50Y19leHRfYWxsb2NfaW5vZGUgPSBleHRfYWxsb2NfaW5vZGU7CiAKIAkJc3RhdHVzID0gb2NmczJfbWV0YV9sb2NrKGV4dF9hbGxvY19pbm9kZSwKQEAgLTIwMjYsNyArMjAyNiw3IEBACiAJCWlmICh0Yy0+dGNfZXh0X2FsbG9jX2xvY2tlZCkKIAkJCW9jZnMyX21ldGFfdW5sb2NrKHRjLT50Y19leHRfYWxsb2NfaW5vZGUsIDEpOwogCi0JCXVwKCZ0Yy0+dGNfZXh0X2FsbG9jX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmdGMtPnRjX2V4dF9hbGxvY19pbm9kZS0+aV9tdXRleCk7CiAJCWlwdXQodGMtPnRjX2V4dF9hbGxvY19pbm9kZSk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKaW5kZXggNWZkNjBjMS4uY2Y3ODI4ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwpAQCAtNjUzLDcgKzY1Myw3IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqbzJoYl9ncm91cCA9IE5VTEwsICpyZXQgPSBOVUxMOwogCXZvaWQgKmRlZnMgPSBOVUxMOwogCi0JLyogdGhpcyBydW5zIHVuZGVyIHRoZSBwYXJlbnQgZGlyJ3MgaV9zZW07IHRoZXJlIGNhbiBiZSBvbmx5CisJLyogdGhpcyBydW5zIHVuZGVyIHRoZSBwYXJlbnQgZGlyJ3MgaV9tdXRleDsgdGhlcmUgY2FuIGJlIG9ubHkKIAkgKiBvbmUgY2FsbGVyIGluIGhlcmUgYXQgYSB0aW1lICovCiAJaWYgKG8ybm1fc2luZ2xlX2NsdXN0ZXIpCiAJCWdvdG8gb3V0OyAvKiBFTk9TUEMgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggODU2ZTIwYS4uNTcxNThmYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogfQogCiAvKgotICogTk9URTogdGhpcyBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHBhcmVudCBkaXIgaV9zZW0gdGFrZW4uCisgKiBOT1RFOiB0aGlzIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggcGFyZW50IGRpciBpX211dGV4IHRha2VuLgogICovCiBpbnQgb2NmczJfZmluZF9maWxlc19vbl9kaXNrKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgIGludCBuYW1lbGVuLApAQCAtMjQ1LDcgKzI0NSw3IEBACiAgKiBSZXR1cm4gMCBpZiB0aGUgbmFtZSBkb2VzIG5vdCBleGlzdAogICogUmV0dXJuIC1FRVhJU1QgaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbmFtZQogICoKLSAqIENhbGxlcnMgc2hvdWxkIGhhdmUgaV9zZW0gKyBhIGNsdXN0ZXIgbG9jayBvbiBkaXIKKyAqIENhbGxlcnMgc2hvdWxkIGhhdmUgaV9tdXRleCArIGEgY2x1c3RlciBsb2NrIG9uIGRpcgogICovCiBpbnQgb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggNzJhZTllMy4uY2E1ZjlmOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtNDkyLDcgKzQ5Miw3IEBACiAJfQogCiAJLyogYmxvY2tzIHBlb3BlIGluIHJlYWQvd3JpdGUgZnJvbSByZWFkaW5nIG91ciBhbGxvY2F0aW9uCi0JICogdW50aWwgd2UncmUgZG9uZSBjaGFuZ2luZyBpdC4gV2UgZGVwZW5kIG9uIGlfc2VtIHRvIGJsb2NrCisJICogdW50aWwgd2UncmUgZG9uZSBjaGFuZ2luZyBpdC4gV2UgZGVwZW5kIG9uIGlfbXV0ZXggdG8gYmxvY2sKIAkgKiBvdGhlciBleHRlbmQvdHJ1bmNhdGUgY2FsbHMgd2hpbGUgd2UncmUgaGVyZS4gT3JkZXJpbmcgd3J0CiAJICogc3RhcnRfdHJhbnMgaXMgaW1wb3J0YW50IGhlcmUgLS0gYWx3YXlzIGRvIGl0IGJlZm9yZSEgKi8KIAlkb3duX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKQEAgLTk1OCw4ICs5NTgsOCBAQAogCQlmaWxwLT5mX2ZsYWdzICY9IH5PX0RJUkVDVDsKICNlbmRpZgogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKLQkvKiB0byBtYXRjaCBzZXRhdHRyJ3MgaV9zZW0gLT4gaV9hbGxvY19zZW0gLT4gcndfbG9jayBvcmRlcmluZyAqLworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkvKiB0byBtYXRjaCBzZXRhdHRyJ3MgaV9tdXRleCAtPiBpX2FsbG9jX3NlbSAtPiByd19sb2NrIG9yZGVyaW5nICovCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgewogCQloYXZlX2FsbG9jX3NlbSA9IDE7CiAJCWRvd25fcmVhZCgmaW5vZGUtPmlfYWxsb2Nfc2VtKTsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJCXVwX3JlYWQoJmlub2RlLT5pX2FsbG9jX3NlbSk7CiAJaWYgKHJ3X2xldmVsICE9IC0xKSAKIAkJb2NmczJfcndfdW5sb2NrKGlub2RlLCByd19sZXZlbCk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAltbG9nX2V4aXQocmV0KTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuYyBiL2ZzL29jZnMyL2lub2RlLmMKaW5kZXggYTkxYmE0ZC4uZDRlY2MwNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuYworKysgYi9mcy9vY2ZzMi9pbm9kZS5jCkBAIC00ODUsMTAgKzQ4NSwxMCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JZG93bigmaW5vZGVfYWxsb2NfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gb2NmczJfbWV0YV9sb2NrKGlub2RlX2FsbG9jX2lub2RlLCBOVUxMLCAmaW5vZGVfYWxsb2NfYmgsIDEpOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXVwKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlX2FsbG9jX2lub2RlLT5pX211dGV4KTsKIAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCW9jZnMyX2NvbW1pdF90cmFucyhoYW5kbGUpOwogYmFpbF91bmxvY2s6CiAJb2NmczJfbWV0YV91bmxvY2soaW5vZGVfYWxsb2NfaW5vZGUsIDEpOwotCXVwKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGVfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOwogCWJyZWxzZShpbm9kZV9hbGxvY19iaCk7CiBiYWlsOgogCWlwdXQoaW5vZGVfYWxsb2NfaW5vZGUpOwpAQCAtNTY3LDEwICs1NjcsMTAgQEAKIAkvKiBMb2NrIHRoZSBvcnBoYW4gZGlyLiBUaGUgbG9jayB3aWxsIGJlIGhlbGQgZm9yIHRoZSBlbnRpcmUKIAkgKiBkZWxldGVfaW5vZGUgb3BlcmF0aW9uLiBXZSBkbyB0aGlzIG5vdyB0byBhdm9pZCByYWNlcyB3aXRoCiAJICogcmVjb3ZlcnkgY29tcGxldGlvbiBvbiBvdGhlciBub2Rlcy4gKi8KLQlkb3duKCZvcnBoYW5fZGlyX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gb2NmczJfbWV0YV9sb2NrKG9ycGhhbl9kaXJfaW5vZGUsIE5VTEwsICZvcnBoYW5fZGlyX2JoLCAxKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQl1cCgmb3JwaGFuX2Rpcl9pbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwogCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtNTkzLDcgKzU5Myw3IEBACiAKIGJhaWxfdW5sb2NrX2RpcjoKIAlvY2ZzMl9tZXRhX3VubG9jayhvcnBoYW5fZGlyX2lub2RlLCAxKTsKLQl1cCgmb3JwaGFuX2Rpcl9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJYnJlbHNlKG9ycGhhbl9kaXJfYmgpOwogYmFpbDoKIAlpcHV0KG9ycGhhbl9kaXJfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IDA0NDI4MDQuLjMwM2M4ZDkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAogCS8qIHdlJ3JlIG9idmlvdXNseSBjaGFuZ2luZyBpdC4uLiAqLwotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJLyogc2FuaXR5IGNoZWNrICovCiAJQlVHX09OKE9DRlMyX0koaW5vZGUpLT5pcF9oYW5kbGUpOwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCU9DRlMyX0koaW5vZGUpLT5pcF9oYW5kbGUgPSBOVUxMOwogCQlsaXN0X2RlbF9pbml0KCZPQ0ZTMl9JKGlub2RlKS0+aXBfaGFuZGxlX2xpc3QpOwogCi0JCXVwKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJaXB1dChpbm9kZSk7CiAJfQogfQpAQCAtMTQzMywxMCArMTQzMywxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkb3duKCZvcnBoYW5fZGlyX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gb2NmczJfbWV0YV9sb2NrKG9ycGhhbl9kaXJfaW5vZGUsIE5VTEwsIE5VTEwsIDApOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXVwKCZvcnBoYW5fZGlyX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTQ1MSw3ICsxNDUxLDcgQEAKIAkJaWYgKCFiaCkKIAkJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQl1cCgmb3JwaGFuX2Rpcl9pbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZvcnBoYW5fZGlyX2lub2RlLT5pX211dGV4KTsKIAkJCWlmIChiaCkKIAkJCQlicmVsc2UoYmgpOwogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTQ2NSw3ICsxNDY1LDcgQEAKIAogCQkJaWYgKCFvY2ZzMl9jaGVja19kaXJfZW50cnkob3JwaGFuX2Rpcl9pbm9kZSwKIAkJCQkJCSAgZGUsIGJoLCBsb2NhbCkpIHsKLQkJCQl1cCgmb3JwaGFuX2Rpcl9pbm9kZS0+aV9zZW0pOworCQkJCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJCQkJc3RhdHVzID0gLUVJTlZBTDsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJYnJlbHNlKGJoKTsKQEAgLTE1MDksNyArMTUwOSw3IEBACiAJCX0KIAkJYnJlbHNlKGJoKTsKIAl9Ci0JdXAoJm9ycGhhbl9kaXJfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwogCiAJb2NmczJfbWV0YV91bmxvY2sob3JwaGFuX2Rpcl9pbm9kZSwgMCk7CiAJaGF2ZV9kaXNrX2xvY2sgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IGZlMzczYTIuLjE0OWIzNTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYworKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCQkJCSAgJmFsbG9jX2JoLCAwLCBpbm9kZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJYnJlbHNlKGFsbG9jX2JoKTsKIAogCWlmIChpbm9kZSkgewotCQl1cCgmaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWlwdXQoaW5vZGUpOwogCX0KIApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAKIC8qCiAgKiBtYWtlIHN1cmUgd2UndmUgZ290IGF0IGxlYXN0IGJpdHN3YW50ZWQgY29udGlndW91cyBiaXRzIGluIHRoZQotICogbG9jYWwgYWxsb2MuIFlvdSBsb3NlIHRoZW0gd2hlbiB5b3UgZHJvcCBpX3NlbS4KKyAqIGxvY2FsIGFsbG9jLiBZb3UgbG9zZSB0aGVtIHdoZW4geW91IGRyb3AgaV9tdXRleC4KICAqCiAgKiBXZSB3aWxsIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIHRyYW5zYWN0aW9uIHBhc3NlZCBpbiwgYnV0IG1heSBzdGFydAogICogb3VyIG93biBpbiBvcmRlciB0byBzaGlmdCB3aW5kb3dzLgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggNDhiZjdmMC4uMzY0ZDY0YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0xNjksNyArMTY5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgb2NmczJfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpZiAoZG93bl90cnlsb2NrKCZzYi0+c19sb2NrKSA9PSAwKQorCWlmIChtdXRleF90cnlsb2NrKCZzYi0+c19sb2NrKSAhPSAwKQogCQlCVUcoKTsKIAlzYi0+c19kaXJ0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA3NWYzMzI5Li5hM2IzYTliIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0yMTEsOSArMjExLDkgQEAKIAkJbmV3YXR0cnMuaWFfdmFsaWQgfD0gQVRUUl9GSUxFOwogCX0KIAotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZXJyID0gbm90aWZ5X2NoYW5nZShkZW50cnksICZuZXdhdHRycyk7Ci0JdXAoJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zOTgsOSArMzk4LDkgQEAKIAkJICAgIChlcnJvciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX1dSSVRFKSkgIT0gMCkKIAkJCWdvdG8gZHB1dF9hbmRfb3V0OwogCX0KLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAllcnJvciA9IG5vdGlmeV9jaGFuZ2UobmQuZGVudHJ5LCAmbmV3YXR0cnMpOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogZHB1dF9hbmRfb3V0OgogCXBhdGhfcmVsZWFzZSgmbmQpOwogb3V0OgpAQCAtNDUxLDkgKzQ1MSw5IEBACiAJCSAgICAoZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSkpICE9IDApCiAJCQlnb3RvIGRwdXRfYW5kX291dDsKIAl9Ci0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJZXJyb3IgPSBub3RpZnlfY2hhbmdlKG5kLmRlbnRyeSwgJm5ld2F0dHJzKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIGRwdXRfYW5kX291dDoKIAlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKQEAgLTYyMCwxMyArNjIwLDEzIEBACiAJZXJyID0gLUVQRVJNOwogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCiAJCWdvdG8gb3V0X3B1dGY7Ci0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKG1vZGUgPT0gKG1vZGVfdCkgLTEpCiAJCW1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCW5ld2F0dHJzLmlhX21vZGUgPSAobW9kZSAmIFNfSUFMTFVHTykgfCAoaW5vZGUtPmlfbW9kZSAmIH5TX0lBTExVR08pOwogCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9NT0RFIHwgQVRUUl9DVElNRTsKIAllcnIgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKQEAgLTY1NCwxMyArNjU0LDEzIEBACiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAobW9kZSA9PSAobW9kZV90KSAtMSkKIAkJbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJbmV3YXR0cnMuaWFfbW9kZSA9IChtb2RlICYgU19JQUxMVUdPKSB8IChpbm9kZS0+aV9tb2RlICYgflNfSUFMTFVHTyk7CiAJbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX01PREUgfCBBVFRSX0NUSU1FOwogCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIGRwdXRfYW5kX291dDoKIAlwYXRoX3JlbGVhc2UoJm5kKTsKQEAgLTY5Niw5ICs2OTYsOSBAQAogCX0KIAlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCW5ld2F0dHJzLmlhX3ZhbGlkIHw9IEFUVFJfS0lMTF9TVUlEfEFUVFJfS0lMTF9TR0lEOwotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWVycm9yID0gbm90aWZ5X2NoYW5nZShkZW50cnksICZuZXdhdHRycyk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9LY29uZmlnIGIvZnMvcGFydGl0aW9ucy9LY29uZmlnCmluZGV4IGUyMjdhMDQuLjc0OTBjYzkgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZworKysgYi9mcy9wYXJ0aXRpb25zL0tjb25maWcKQEAgLTIxLDI2ICsyMSwzMCBAQAogCSAgU3VwcG9ydCBoYXJkIGRpc2tzIHBhcnRpdGlvbmVkIHVuZGVyIEFjb3JuIG9wZXJhdGluZyBzeXN0ZW1zLgogCiBjb25maWcgQUNPUk5fUEFSVElUSU9OX0NVTUFOQQotCWJvb2wgIkN1bWFuYSBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEICYmIEFDT1JOX1BBUlRJVElPTgorCWJvb2wgIkN1bWFuYSBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VECiAJZGVmYXVsdCB5IGlmIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFDT1JOX1BBUlRJVElPTgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2gKIAkgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgdGhlIEN1bWFuYSBpbnRlcmZhY2Ugb24gQWNvcm4gbWFjaGluZXMuCiAKIGNvbmZpZyBBQ09STl9QQVJUSVRJT05fRUVTT1gKLQlib29sICJFRVNPWCBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEICYmIEFDT1JOX1BBUlRJVElPTgorCWJvb2wgIkVFU09YIHBhcnRpdGlvbiBzdXBwb3J0IiBpZiBQQVJUSVRJT05fQURWQU5DRUQKIAlkZWZhdWx0IHkgaWYgQVJDSF9BQ09STgorCWRlcGVuZHMgb24gQUNPUk5fUEFSVElUSU9OCiAKIGNvbmZpZyBBQ09STl9QQVJUSVRJT05fSUNTCi0JYm9vbCAiSUNTIHBhcnRpdGlvbiBzdXBwb3J0IiBpZiBQQVJUSVRJT05fQURWQU5DRUQgJiYgQUNPUk5fUEFSVElUSU9OCisJYm9vbCAiSUNTIHBhcnRpdGlvbiBzdXBwb3J0IiBpZiBQQVJUSVRJT05fQURWQU5DRUQKIAlkZWZhdWx0IHkgaWYgQVJDSF9BQ09STgorCWRlcGVuZHMgb24gQUNPUk5fUEFSVElUSU9OCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgaGFyZCBkaXNrcyB1bmRlciBMaW51eCB3aGljaAogCSAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyB0aGUgSUNTIGludGVyZmFjZSBvbiBBY29ybiBtYWNoaW5lcy4KIAogY29uZmlnIEFDT1JOX1BBUlRJVElPTl9BREZTCi0JYm9vbCAiTmF0aXZlIGZpbGVjb3JlIHBhcnRpdGlvbiBzdXBwb3J0IiBpZiBQQVJUSVRJT05fQURWQU5DRUQgJiYgQUNPUk5fUEFSVElUSU9OCisJYm9vbCAiTmF0aXZlIGZpbGVjb3JlIHBhcnRpdGlvbiBzdXBwb3J0IiBpZiBQQVJUSVRJT05fQURWQU5DRUQKIAlkZWZhdWx0IHkgaWYgQVJDSF9BQ09STgorCWRlcGVuZHMgb24gQUNPUk5fUEFSVElUSU9OCiAJaGVscAogCSAgVGhlIEFjb3JuIERpc2MgRmlsaW5nIFN5c3RlbSBpcyB0aGUgc3RhbmRhcmQgZmlsZSBzeXN0ZW0gb2YgdGhlCiAJICBSaXNjT1Mgb3BlcmF0aW5nIHN5c3RlbSB3aGljaCBydW5zIG9uIEFjb3JuJ3MgQVJNLWJhc2VkIFJpc2MgUEMKQEAgLTQ4LDE1ICs1MiwxNyBAQAogCSAgYFknIGhlcmUsIExpbnV4IHdpbGwgc3VwcG9ydCBkaXNrIHBhcnRpdGlvbnMgY3JlYXRlZCB1bmRlciBBREZTLgogCiBjb25maWcgQUNPUk5fUEFSVElUSU9OX1BPV0VSVEVDCi0JYm9vbCAiUG93ZXJUZWMgcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRCAmJiBBQ09STl9QQVJUSVRJT04KKwlib29sICJQb3dlclRlYyBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VECiAJZGVmYXVsdCB5IGlmIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFDT1JOX1BBUlRJVElPTgogCWhlbHAKIAkgIFN1cHBvcnQgcmVhZGluZyBwYXJ0aXRpb24gdGFibGVzIGNyZWF0ZWQgb24gQWNvcm4gbWFjaGluZXMgdXNpbmcKIAkgIHRoZSBQb3dlclRlYyBTQ1NJIGRyaXZlLgogCiBjb25maWcgQUNPUk5fUEFSVElUSU9OX1JJU0NJWAotCWJvb2wgIlJJU0NpWCBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEICYmIEFDT1JOX1BBUlRJVElPTgorCWJvb2wgIlJJU0NpWCBwYXJ0aXRpb24gc3VwcG9ydCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VECiAJZGVmYXVsdCB5IGlmIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFDT1JOX1BBUlRJVElPTgogCWhlbHAKIAkgIE9uY2UgdXBvbiBhIHRpbWUsIHRoZXJlIHdhcyBhIG5hdGl2ZSBVbml4IHBvcnQgZm9yIHRoZSBBY29ybiBzZXJpZXMKIAkgIG9mIG1hY2hpbmVzIGNhbGxlZCBSSVNDaVguICBJZiB5b3Ugc2F5ICdZJyBoZXJlLCBMaW51eCB3aWxsIGJlIGFibGUKQEAgLTIyNCw1ICsyMzAsMyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgaGFyZCBkaXNrcyB1bmRlciBMaW51eCB3aGljaAogCSAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyBFRkkgR1BULiAgUHJlc2VudGx5IG9ubHkgdXNlZnVsIG9uIHRoZQogCSAgSUEtNjQgcGxhdGZvcm0uCi0KLSMgICAgICBkZWZpbmVfYm9vbCBDT05GSUdfQUNPUk5fUEFSVElUSU9OX0NVTUFOQSB5CmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNjZhYTBiOS4uYWNiMDMwYiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAJICogaXMgY29uc2lkZXJlZCBhIG5vbmludGVyYWN0aXZlIHdhaXQ6CiAJICovCiAJcHJlcGFyZV90b193YWl0KFBJUEVfV0FJVCgqaW5vZGUpLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFfFRBU0tfTk9OSU5URVJBQ1RJVkUpOwotCXVwKFBJUEVfU0VNKCppbm9kZSkpOworCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwogCXNjaGVkdWxlKCk7CiAJZmluaXNoX3dhaXQoUElQRV9XQUlUKCppbm9kZSksICZ3YWl0KTsKLQlkb3duKFBJUEVfU0VNKCppbm9kZSkpOworCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiAJZG9fd2FrZXVwID0gMDsKIAlyZXQgPSAwOwotCWRvd24oUElQRV9TRU0oKmlub2RlKSk7CisJbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwogCWluZm8gPSBpbm9kZS0+aV9waXBlOwogCWZvciAoOzspIHsKIAkJaW50IGJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJfQogCQlwaXBlX3dhaXQoaW5vZGUpOwogCX0KLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAkvKiBTaWduYWwgd3JpdGVycyBhc3luY2hyb25vdXNseSB0aGF0IHRoZXJlIGlzIG1vcmUgcm9vbS4gICovCiAJaWYgKGRvX3dha2V1cCkgewogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoUElQRV9XQUlUKCppbm9kZSkpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JZG93bihQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CiAJaW5mbyA9IGlub2RlLT5pX3BpcGU7CiAKIAlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKS0tOwogCX0KIG91dDoKLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAlpZiAoZG9fd2FrZXVwKSB7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CiAJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOwpAQCAtMzgxLDcgKzM4MSw3IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEZJT05SRUFEOgotCQkJZG93bihQSVBFX1NFTSgqaW5vZGUpKTsKKwkJCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAkJCWluZm8gPSAgaW5vZGUtPmlfcGlwZTsKIAkJCWNvdW50ID0gMDsKIAkJCWJ1ZiA9IGluZm8tPmN1cmJ1ZjsKQEAgLTM5MCw3ICszOTAsNyBAQAogCQkJCWNvdW50ICs9IGluZm8tPmJ1ZnNbYnVmXS5sZW47CiAJCQkJYnVmID0gKGJ1ZisxKSAmIChQSVBFX0JVRkZFUlMtMSk7CiAJCQl9Ci0JCQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwkJCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwogCQkJcmV0dXJuIHB1dF91c2VyKGNvdW50LCAoaW50IF9fdXNlciAqKWFyZyk7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQzMyw3ICs0MzMsNyBAQAogc3RhdGljIGludAogcGlwZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkZWNyLCBpbnQgZGVjdykKIHsKLQlkb3duKFBJUEVfU0VNKCppbm9kZSkpOworCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAlQSVBFX1JFQURFUlMoKmlub2RlKSAtPSBkZWNyOwogCVBJUEVfV1JJVEVSUygqaW5vZGUpIC09IGRlY3c7CiAJaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpIHsKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX0lOKTsKIAkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOwogCX0KLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU0LDkgKzQ1NCw5IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWludCByZXR2YWw7CiAKLQlkb3duKFBJUEVfU0VNKCppbm9kZSkpOworCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpKTsKLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNDcxLDkgKzQ3MSw5IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWludCByZXR2YWw7CiAKLQlkb3duKFBJUEVfU0VNKCppbm9kZSkpOworCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpKTsKLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNDg4LDE0ICs0ODgsMTQgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldHZhbDsKIAotCWRvd24oUElQRV9TRU0oKmlub2RlKSk7CisJbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwogCiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sIFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSk7CiAKIAlpZiAocmV0dmFsID49IDApCiAJCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19XUklURVJTKCppbm9kZSkpOwogCi0JdXAoUElQRV9TRU0oKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTUzNCw5ICs1MzQsOSBAQAogewogCS8qIFdlIGNvdWxkIGhhdmUgcGVyaGFwcyB1c2VkIGF0b21pY190LCBidXQgdGhpcyBhbmQgZnJpZW5kcwogCSAgIGJlbG93IGFyZSB0aGUgb25seSBwbGFjZXMuICBTbyBpdCBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4gICovCi0JZG93bihQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CiAJUElQRV9SRUFERVJTKCppbm9kZSkrKzsKLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTQ0LDkgKzU0NCw5IEBACiBzdGF0aWMgaW50CiBwaXBlX3dyaXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JZG93bihQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CiAJUElQRV9XUklURVJTKCppbm9kZSkrKzsKLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTU0LDEyICs1NTQsMTIgQEAKIHN0YXRpYyBpbnQKIHBpcGVfcmR3cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWRvd24oUElQRV9TRU0oKmlub2RlKSk7CisJbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQogCQlQSVBFX1JFQURFUlMoKmlub2RlKSsrOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJUElQRV9XUklURVJTKCppbm9kZSkrKzsKLQl1cChQSVBFX1NFTSgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEuYyBiL2ZzL3F1b3RhLmMKaW5kZXggNjEyZTA0ZC4uZDE0ZDg3MiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEuYworKysgYi9mcy9xdW90YS5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOwogCiAJLyogTm93IHdoZW4gZXZlcnl0aGluZyBpcyB3cml0dGVuIHdlIGNhbiBkaXNjYXJkIHRoZSBwYWdlY2FjaGUgc28KLQkgKiB0aGF0IHVzZXJzcGFjZSBzZWVzIHRoZSBjaGFuZ2VzLiBXZSBuZWVkIGlfc2VtIGFuZCBzbyB3ZSBjb3VsZAorCSAqIHRoYXQgdXNlcnNwYWNlIHNlZXMgdGhlIGNoYW5nZXMuIFdlIG5lZWQgaV9tdXRleCBhbmQgc28gd2UgY291bGQKIAkgKiBub3QgZG8gaXQgaW5zaWRlIGRxb25vZmZfc2VtLiBNb3Jlb3ZlciB3ZSBuZWVkIHRvIGJlIGNhcmVmdWxsCiAJICogYWJvdXQgcmFjZXMgd2l0aCBxdW90YW9mZigpICh0aGF0IGlzIHRoZSByZWFzb24gd2h5IHdlIGhhdmUgb3duCiAJICogcmVmZXJlbmNlIHRvIGlub2RlKS4gKi8KQEAgLTE4NCw5ICsxODQsOSBAQAogCXVwKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKIAkJaWYgKGRpc2NhcmRbY250XSkgewotCQkJZG93bigmZGlzY2FyZFtjbnRdLT5pX3NlbSk7CisJCQltdXRleF9sb2NrKCZkaXNjYXJkW2NudF0tPmlfbXV0ZXgpOwogCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmRpc2NhcmRbY250XS0+aV9kYXRhLCAwKTsKLQkJCXVwKCZkaXNjYXJkW2NudF0tPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmZGlzY2FyZFtjbnRdLT5pX211dGV4KTsKIAkJCWlwdXQoZGlzY2FyZFtjbnRdKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCBkZjM0NjhhLi4zZjdhMWE2IDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0zMyw3ICszMyw3IEBACiAJbG9uZyBsb25nIHJldHZhbDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAyOgogCQkJb2Zmc2V0ICs9IGlub2RlLT5pX3NpemU7CkBAIC00OSw3ICs0OSw3IEBACiAJCX0KIAkJcmV0dmFsID0gb2Zmc2V0OwogCX0KLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9mcy9yZWFkZGlyLmMgYi9mcy9yZWFkZGlyLmMKaW5kZXggYjAzNTc5Yi4uYjYxMDkzMiAxMDA2NDQKLS0tIGEvZnMvcmVhZGRpci5jCisrKyBiL2ZzL3JlYWRkaXIuYwpAQCAtMzAsMTMgKzMwLDEzIEBACiAJaWYgKHJlcykKIAkJZ290byBvdXQ7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXMgPSAtRU5PRU5UOwogCWlmICghSVNfREVBRERJUihpbm9kZSkpIHsKIAkJcmVzID0gZmlsZS0+Zl9vcC0+cmVhZGRpcihmaWxlLCBidWYsIGZpbGxlcik7CiAJCWZpbGVfYWNjZXNzZWQoZmlsZSk7CiAJfQotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggNzg5MmE4Ni4uMTI3ZTdkMiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtNDksNyArNDksNyBAQAogCX0KIAogCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCS8qIGZyZWVpbmcgcHJlYWxsb2NhdGlvbiBvbmx5IGludm9sdmVzIHJlbG9nZ2luZyBibG9ja3MgdGhhdAogCSAqIGFyZSBhbHJlYWR5IGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgcHJlYWxsb2NhdGlvbiBnZXRzCiAJICogZnJlZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHRyYW5zYWN0aW9uLCBzbyBpdCBpcyBpbXBvc3NpYmxlIGZvcgpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCWVyciA9IHJlaXNlcmZzX3RydW5jYXRlX2ZpbGUoaW5vZGUsIDApOwogCX0KICAgICAgIG91dDoKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xMzQyLDcgKzEzNDIsNyBAQAogCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIGNvdW50KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsJLy8gbG9ja3MgdGhlIGVudGlyZSBmaWxlIGZvciBqdXN0IHVzCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwkvLyBsb2NrcyB0aGUgZW50aXJlIGZpbGUgZm9yIGp1c3QgdXMKIAogCXBvcyA9ICpwcG9zOwogCkBAIC0xNTMyLDEyICsxNTMyLDEyIEBACiAJCSAgICBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBmaWxlLT5mX21hcHBpbmcsCiAJCQkJCU9TWU5DX01FVEFEQVRBIHwgT1NZTkNfREFUQSk7CiAKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZWlzZXJmc19hc3luY19wcm9ncmVzc193YWl0KGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gKGFscmVhZHlfd3JpdHRlbiAhPSAwKSA/IGFscmVhZHlfd3JpdHRlbiA6IHJlczsKIAogICAgICAgb3V0OgotCXVwKCZpbm9kZS0+aV9zZW0pOwkvLyB1bmxvY2sgdGhlIGZpbGUgb24gZXhpdC4KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsJLy8gdW5sb2NrIHRoZSBmaWxlIG9uIGV4aXQuCiAJcmV0dXJuIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggYTVlM2EwZC4uZmZhMzRiOCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC00MCwxMiArNDAsMTIgQEAKIAogCS8qIFRoZSA9IDAgaGFwcGVucyB3aGVuIHdlIGFib3J0IGNyZWF0aW5nIGEgbmV3IGlub2RlIGZvciBzb21lIHJlYXNvbiBsaWtlIGxhY2sgb2Ygc3BhY2UuLiAqLwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpICYmIElOT0RFX1BLRVkoaW5vZGUpLT5rX29iamVjdGlkICE9IDApIHsJLyogYWxzbyBoYW5kbGVzIGJhZF9pbm9kZSBjYXNlICovCi0JCWRvd24oJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAogCQlyZWlzZXJmc19kZWxldGVfeGF0dHJzKGlub2RlKTsKIAogCQlpZiAoam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBqYmVnaW5fY291bnQpKSB7Ci0JCQl1cCgmaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKQEAgLTU5LDExICs1OSwxMSBAQAogCQkJRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CiAKIAkJaWYgKGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCkpIHsKLQkJCXVwKCZpbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXVwKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCQkvKiBjaGVjayByZXR1cm4gdmFsdWUgZnJvbSByZWlzZXJmc19kZWxldGVfb2JqZWN0IGFmdGVyCiAJCSAqIGVuZGluZyB0aGUgdHJhbnNhY3Rpb24KQEAgLTU1MSw3ICs1NTEsNyBAQAogCiAJLyogd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvbnZlcnNpb24gZGlkIG5vdCBoYXBwZW4gd2hpbGUKIAkgKiogd2Ugd2VyZSBsb2NraW5nIHRoZSBwYWdlIGJlY2F1c2UgYW55b25lIHRoYXQgY291bGQgY29udmVydAotCSAqKiBtdXN0IGZpcnN0IHRha2UgaV9zZW0uCisJICoqIG11c3QgZmlyc3QgdGFrZSBpX211dGV4LgogCSAqKgogCSAqKiBXZSBtdXN0IGZpeCB0aGUgdGFpbCBwYWdlIGZvciB3cml0aW5nIGJlY2F1c2UgaXQgbWlnaHQgaGF2ZSBidWZmZXJzCiAJICoqIHRoYXQgYXJlIG1hcHBlZCwgYnV0IGhhdmUgYSBibG9jayBudW1iZXIgb2YgMC4gIFRoaXMgaW5kaWNhdGVzIHRhaWwKQEAgLTU4Niw3ICs1ODYsNyBAQAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCiAjaWZkZWYgUkVJU0VSRlNfUFJFQUxMT0NBVEUKLQlpZiAoIShmbGFncyAmIEdFVF9CTE9DS19OT19JU0VNKSkgeworCWlmICghKGZsYWdzICYgR0VUX0JMT0NLX05PX0lNVVgpKSB7CiAJCXJldHVybiByZWlzZXJmc19uZXdfdW5mX2Jsb2NrbnJzMih0aCwgaW5vZGUsIGFsbG9jYXRlZF9ibG9ja19uciwKIAkJCQkJCSAgcGF0aCwgYmxvY2spOwogCX0KQEAgLTIzMTgsNyArMjMxOCw3IEBACiAJLyogdGhpcyBpcyB3aGVyZSB3ZSBmaWxsIGluIGhvbGVzIGluIHRoZSBmaWxlLiAqLwogCWlmICh1c2VfZ2V0X2Jsb2NrKSB7CiAJCXJldHZhbCA9IHJlaXNlcmZzX2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwKLQkJCQkJICAgIEdFVF9CTE9DS19DUkVBVEUgfCBHRVRfQkxPQ0tfTk9fSVNFTQorCQkJCQkgICAgR0VUX0JMT0NLX0NSRUFURSB8IEdFVF9CTE9DS19OT19JTVVYCiAJCQkJCSAgICB8IEdFVF9CTE9DS19OT19EQU5HTEUpOwogCQlpZiAoIXJldHZhbCkgewogCQkJaWYgKCFidWZmZXJfbWFwcGVkKGJoX3Jlc3VsdCkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMgYi9mcy9yZWlzZXJmcy9pb2N0bC5jCmluZGV4IDgxZmMwMDIuLmJhOGJmOGQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMKKysrIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJLyogd2UgbmVlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGlzIGNoYW5naW5nIHRoZSBmaWxlIHNpemUgYmVuZWF0aAogCSAqKiB1cwogCSAqLwotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJd3JpdGVfZnJvbSA9IGlub2RlLT5pX3NpemUgJiAoYmxvY2tzaXplIC0gMSk7CiAJLyogaWYgd2UgYXJlIG9uIGEgYmxvY2sgYm91bmRhcnksIHdlIGFyZSBhbHJlYWR5IHVucGFja2VkLiAgKi8KQEAgLTE1Niw3ICsxNTYsNyBAQAogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAogICAgICAgb3V0OgotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDQyYWZiNWIuLjM5N2Q5NTkgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMjIxMSw3ICsyMjExLDcgQEAKIAlzaXplX3QgdG93cml0ZSA9IGxlbjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgdG1wX2JoLCAqYmg7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAl3aGlsZSAodG93cml0ZSA+IDApIHsKIAkJdG9jb3B5ID0gc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDwgdG93cml0ZSA/CiAJCSAgICBzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgOiB0b3dyaXRlOwpAQCAtMjI1MCw3ICsyMjUwLDcgQEAKIAlpbm9kZS0+aV92ZXJzaW9uKys7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gbGVuIC0gdG93cml0ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMgYi9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYwppbmRleCBjOTJlMTI0Li4xOTZlOTcxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYworKysgYi9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJCQkJCSAxKSAqIHBfc19zYi0+c19ibG9ja3NpemU7CiAJcG9zMSA9IHBvczsKIAotCS8vIHdlIGFyZSBwcm90ZWN0ZWQgYnkgaV9zZW0uIFRoZSB0YWlsIGNhbiBub3QgZGlzYXBwZXIsIG5vdAorCS8vIHdlIGFyZSBwcm90ZWN0ZWQgYnkgaV9tdXRleC4gVGhlIHRhaWwgY2FuIG5vdCBkaXNhcHBlciwgbm90CiAJLy8gYXBwZW5kIGNhbiBiZSBkb25lIGVpdGhlcgogCS8vIHdlIGFyZSBpbiB0cnVuY2F0ZSBvciBwYWNraW5nIHRhaWwgaW4gZmlsZV9yZWxlYXNlCiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IDAyMDkxZWEuLmYxODk1ZjAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtNjcsMTEgKzY3LDExIEBACiAJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAoIXhhcm9vdC0+ZF9pbm9kZSkgewogCQlpbnQgZXJyOwotCQlkb3duKCZwcml2cm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZwcml2cm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCWVyciA9CiAJCSAgICBwcml2cm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIocHJpdnJvb3QtPmRfaW5vZGUsIHhhcm9vdCwKIAkJCQkJCSAgIDA3MDApOwotCQl1cCgmcHJpdnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2cm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAkJaWYgKGVycikgewogCQkJZHB1dCh4YXJvb3QpOwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJfSBlbHNlIGlmIChmbGFncyAmIFhBVFRSX1JFUExBQ0UgfHwgZmxhZ3MgJiBGTF9SRUFET05MWSkgewogCQlnb3RvIG91dDsKIAl9IGVsc2UgewotCQkvKiBpbm9kZS0+aV9zZW0gaXMgZG93biwgc28gbm90aGluZyBlbHNlIGNhbiB0cnkgdG8gY3JlYXRlCisJCS8qIGlub2RlLT5pX211dGV4IGlzIGRvd24sIHNvIG5vdGhpbmcgZWxzZSBjYW4gdHJ5IHRvIGNyZWF0ZQogCQkgKiB0aGUgc2FtZSB4YXR0ciAqLwogCQllcnIgPSB4YWRpci0+ZF9pbm9kZS0+aV9vcC0+Y3JlYXRlKHhhZGlyLT5kX2lub2RlLCB4YWZpbGUsCiAJCQkJCQkgICAwNzAwIHwgU19JRlJFRywgTlVMTCk7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAqIGFuZCBkb24ndCBtZXNzIHdpdGggZi0+Zl9wb3MsIGJ1dCB0aGUgaWRlYSBpcyB0aGUgc2FtZS4gIERvIHNvbWUKICAqIGFjdGlvbiBvbiBlYWNoIGFuZCBldmVyeSBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5LgogICoKLSAqIHdlJ3JlIGNhbGxlZCB3aXRoIGlfc2VtIGhlbGQsIHNvIHRoZXJlIGFyZSBubyB3b3JyaWVzIGFib3V0IHRoZSBkaXJlY3RvcnkKKyAqIHdlJ3JlIGNhbGxlZCB3aXRoIGlfbXV0ZXggaGVsZCwgc28gdGhlcmUgYXJlIG5vIHdvcnJpZXMgYWJvdXQgdGhlIGRpcmVjdG9yeQogICogY2hhbmdpbmcgdW5kZXJuZWF0aCB1cy4KICAqLwogc3RhdGljIGludCBfX3hhdHRyX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCkBAIC00MjYsNyArNDI2LDcgQEAKIAlpbnQgcmVzID0gLUVOT1RESVI7CiAJaWYgKCFmaWxlLT5mX29wIHx8ICFmaWxlLT5mX29wLT5yZWFkZGlyKQogCQlnb3RvIG91dDsKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIC8vICAgICAgICBkb3duKCZpbm9kZS0+aV96b21iaWUpOwogCXJlcyA9IC1FTk9FTlQ7CiAJaWYgKCFJU19ERUFERElSKGlub2RlKSkgewpAQCAtNDM1LDcgKzQzNSw3IEBACiAJCXVubG9ja19rZXJuZWwoKTsKIAl9CiAvLyAgICAgICAgdXAoJmlub2RlLT5pX3pvbWJpZSk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAgICAgICBvdXQ6CiAJcmV0dXJuIHJlczsKIH0KQEAgLTQ4MCw3ICs0ODAsNyBAQAogLyogR2VuZXJpYyBleHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHhhIHBsdWdpbnMgKi8KIAogLyoKLSAqIGlub2RlLT5pX3NlbTogZG93bgorICogaW5vZGUtPmlfbXV0ZXg6IGRvd24KICAqLwogaW50CiByZWlzZXJmc194YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLApAQCAtNTM1LDcgKzUzNSw3IEBACiAJLyogUmVzaXplIGl0IHNvIHdlJ3JlIG9rIHRvIHdyaXRlIHRoZXJlICovCiAJbmV3YXR0cnMuaWFfc2l6ZSA9IGJ1ZmZlcl9zaXplOwogCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9TSVpFIHwgQVRUUl9DVElNRTsKLQlkb3duKCZ4aW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZ4aW5vZGUtPmlfbXV0ZXgpOwogCWVyciA9IG5vdGlmeV9jaGFuZ2UoZnAtPmZfZGVudHJ5LCAmbmV3YXR0cnMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZpbHA7CkBAIC01OTgsNyArNTk4LDcgQEAKIAl9CiAKICAgICAgIG91dF9maWxwOgotCXVwKCZ4aW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJnhpbm9kZS0+aV9tdXRleCk7CiAJZnB1dChmcCk7CiAKICAgICAgIG91dDoKQEAgLTYwNiw3ICs2MDYsNyBAQAogfQogCiAvKgotICogaW5vZGUtPmlfc2VtOiBkb3duCisgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKIHJlaXNlcmZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCkBAIC03OTMsNyArNzkzLDcgQEAKIAogfQogCi0vKiBUaGlzIGlzIGNhbGxlZCB3LyBpbm9kZS0+aV9zZW0gZG93bmVkICovCisvKiBUaGlzIGlzIGNhbGxlZCB3LyBpbm9kZS0+aV9tdXRleCBkb3duZWQgKi8KIGludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGZpbGUgKmZwOwpAQCAtOTQ2LDcgKzk0Niw3IEBACiAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gZ2V0eGF0dHIoKQotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfc2VtCisgKiBQcmVsaW1pbmFyeSBsb2NraW5nOiB3ZSBkb3duIGRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleAogICovCiBzc2l6ZV90CiByZWlzZXJmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCkBAIC05NzAsNyArOTcwLDcgQEAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gc2V0eGF0dHIoKQogICoKLSAqIGRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0gZG93bgorICogZGVudHJ5LT5kX2lub2RlLT5pX211dGV4IGRvd24KICAqLwogaW50CiByZWlzZXJmc19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLApAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gcmVtb3ZleGF0dHIoKQogICoKLSAqIGRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0gZG93bgorICogZGVudHJ5LT5kX2lub2RlLT5pX211dGV4IGRvd24KICAqLwogaW50IHJlaXNlcmZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTEwOTEsNyArMTA5MSw3IEBACiAvKgogICogSW5vZGUgb3BlcmF0aW9uIGxpc3R4YXR0cigpCiAgKgotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfc2VtCisgKiBQcmVsaW1pbmFyeSBsb2NraW5nOiB3ZSBkb3duIGRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleAogICovCiBzc2l6ZV90IHJlaXNlcmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQogewpAQCAtMTI4OSw5ICsxMjg5LDkgQEAKIAkJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQkJaWYgKCEobW91bnRfZmxhZ3MgJiBNU19SRE9OTFkpICYmICFkZW50cnktPmRfaW5vZGUpIHsKIAkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQkJCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJCQllcnIgPSBpbm9kZS0+aV9vcC0+bWtkaXIoaW5vZGUsIGRlbnRyeSwgMDcwMCk7Ci0JCQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQkJaWYgKGVycikgewogCQkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJCWRlbnRyeSA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCmluZGV4IGE0N2FjOWEuLjJkYzk1MzUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gZ2V0X3Bvc2l4X2FjbCgpLgogICoKLSAqIGlub2RlLT5pX3NlbTogZG93bgorICogaW5vZGUtPmlfbXV0ZXg6IGRvd24KICAqIEJLTCBoZWxkIFtiZWZvcmUgMi41LnhdCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKnJlaXNlcmZzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCkBAIC0yMzcsNyArMjM3LDcgQEAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gc2V0X3Bvc2l4X2FjbCgpLgogICoKLSAqIGlub2RlLT5pX3NlbTogZG93bgorICogaW5vZGUtPmlfbXV0ZXg6IGRvd24KICAqIEJLTCBoZWxkIFtiZWZvcmUgMi41LnhdCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTMxMiw3ICszMTIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyogZGlyLT5pX3NlbTogZG93biwKKy8qIGRpci0+aV9tdXRleDogbG9ja2VkLAogICogaW5vZGUgaXMgbmV3IGFuZCBub3QgcmVsZWFzZWQgaW50byB0aGUgd2lsZCB5ZXQgKi8KIGludAogcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvcmVsYXlmcy9pbm9kZS5jIGIvZnMvcmVsYXlmcy9pbm9kZS5jCmluZGV4IDdiN2YyY2IuLjM4MzUyMzAgMTAwNjQ0Ci0tLSBhL2ZzL3JlbGF5ZnMvaW5vZGUuYworKysgYi9mcy9yZWxheWZzL2lub2RlLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCX0KIAogCXBhcmVudCA9IGRnZXQocGFyZW50KTsKLQlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWQgPSBsb29rdXBfb25lX2xlbihuYW1lLCBwYXJlbnQsIHN0cmxlbihuYW1lKSk7CiAJaWYgKElTX0VSUihkKSkgewogCQlkID0gTlVMTDsKQEAgLTEzOSw3ICsxMzksNyBAQAogCXNpbXBsZV9yZWxlYXNlX2ZzKCZyZWxheWZzX21vdW50LCAmcmVsYXlmc19tb3VudF9jb3VudCk7CiAKIGV4aXQ6Ci0JdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAlkcHV0KHBhcmVudCk7CiAJcmV0dXJuIGQ7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwYXJlbnQgPSBkZ2V0KHBhcmVudCk7Ci0JZG93bigmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CiAJCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKIAkJCWVycm9yID0gc2ltcGxlX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKQEAgLTIxNSw3ICsyMTUsNyBAQAogCX0KIAlpZiAoIWVycm9yKQogCQlkcHV0KGRlbnRyeSk7Ci0JdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAlkcHV0KHBhcmVudCk7CiAKIAlpZiAoIWVycm9yKQpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJc3NpemVfdCByZXQgPSAwOwogCXZvaWQgKmZyb207CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZighcmVsYXlfZmlsZV9yZWFkX2F2YWlsKGJ1ZiwgKnBwb3MpKQogCQlnb3RvIG91dDsKIApAQCAtNDk0LDcgKzQ5NCw3IEBACiAJcmVsYXlfZmlsZV9yZWFkX2NvbnN1bWUoYnVmLCByZWFkX3N0YXJ0LCBjb3VudCk7CiAJKnBwb3MgPSByZWxheV9maWxlX3JlYWRfZW5kX3BvcyhidWYsIHJlYWRfc3RhcnQsIGNvdW50KTsKIG91dDoKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwYTMwZTUxLi5jMTc3YjkyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAkJSU5JVF9ITElTVF9IRUFEKCZzLT5zX2Fub24pOwogCQlJTklUX0xJU1RfSEVBRCgmcy0+c19pbm9kZXMpOwogCQlpbml0X3J3c2VtKCZzLT5zX3Vtb3VudCk7Ci0JCXNlbWFfaW5pdCgmcy0+c19sb2NrLCAxKTsKKwkJbXV0ZXhfaW5pdCgmcy0+c19sb2NrKTsKIAkJZG93bl93cml0ZSgmcy0+c191bW91bnQpOwogCQlzLT5zX2NvdW50ID0gU19CSUFTOwogCQlhdG9taWNfc2V0KCZzLT5zX2FjdGl2ZSwgMSk7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IGQzNjc4MDMuLjQ5YmQyMTkgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC05OSw3ICs5OSw3IEBACiAJaW50IGVycm9yOwogCXVtb2RlX3QgbW9kZSA9IFNfSUZESVJ8IFNfSVJXWFUgfCBTX0lSVUdPIHwgU19JWFVHTzsKIAotCWRvd24oJnAtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZwLT5kX2lub2RlLT5pX211dGV4KTsKIAkqZCA9IGxvb2t1cF9vbmVfbGVuKG4sIHAsIHN0cmxlbihuKSk7CiAJaWYgKCFJU19FUlIoKmQpKSB7CiAJCWVycm9yID0gc3lzZnNfbWFrZV9kaXJlbnQocC0+ZF9mc2RhdGEsICpkLCBrLCBtb2RlLCBTWVNGU19ESVIpOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCWRwdXQoKmQpOwogCX0gZWxzZQogCQllcnJvciA9IFBUUl9FUlIoKmQpOwotCXVwKCZwLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwLT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXN0cnVjdCBkZW50cnkgKiBwYXJlbnQgPSBkZ2V0KGQtPmRfcGFyZW50KTsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2Q7CiAKLQlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRfZGVsZXRlKGQpOwogCXNkID0gZC0+ZF9mc2RhdGE7CiAgCWxpc3RfZGVsX2luaXQoJnNkLT5zX3NpYmxpbmcpOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJcHJfZGVidWcoIiBvICVzIHJlbW92aW5nIGRvbmUgKCVkKVxuIixkLT5kX25hbWUubmFtZSwKIAkJIGF0b21pY19yZWFkKCZkLT5kX2NvdW50KSk7CiAKLQl1cCgmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRwdXQocGFyZW50KTsKIH0KIApAQCAtMjg2LDcgKzI4Niw3IEBACiAJCXJldHVybjsKIAogCXByX2RlYnVnKCJzeXNmcyAlczogcmVtb3ZpbmcgZGlyXG4iLGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcGFyZW50X3NkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2QsIHRtcCwgJnBhcmVudF9zZC0+c19jaGlsZHJlbiwgc19zaWJsaW5nKSB7CiAJCWlmICghc2QtPnNfZWxlbWVudCB8fCAhKHNkLT5zX3R5cGUgJiBTWVNGU19OT1RfUElOTkVEKSkKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQlzeXNmc19kcm9wX2RlbnRyeShzZCwgZGVudHJ5KTsKIAkJc3lzZnNfcHV0KHNkKTsKIAl9Ci0JdXAoJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAogCXJlbW92ZV9kaXIoZGVudHJ5KTsKIAkvKioKQEAgLTMxOCw3ICszMTgsNyBAQAogCWRvd25fd3JpdGUoJnN5c2ZzX3JlbmFtZV9zZW0pOwogCXBhcmVudCA9IGtvYmotPnBhcmVudC0+ZGVudHJ5OwogCi0JZG93bigmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAogCW5ld19kZW50cnkgPSBsb29rdXBfb25lX2xlbihuZXdfbmFtZSwgcGFyZW50LCBzdHJsZW4obmV3X25hbWUpKTsKIAlpZiAoIUlTX0VSUihuZXdfZGVudHJ5KSkgewpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCQllcnJvciA9IC1FRVhJU1Q7CiAJCWRwdXQobmV3X2RlbnRyeSk7CiAJfQotCXVwKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsJCisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXVwX3dyaXRlKCZzeXNmc19yZW5hbWVfc2VtKTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTM0NSw5ICszNDUsOSBAQAogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogcGFyZW50X3NkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc3lzZnNfbmV3X2RpcmVudChwYXJlbnRfc2QsIE5VTEwpOwotCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZmlsZS0+cHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07CiAKQEAgLTM1OCw5ICszNTgsOSBAQAogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogY3Vyc29yID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JZG93bigmZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlsaXN0X2RlbF9pbml0KCZjdXJzb3ItPnNfc2libGluZyk7Ci0JdXAoJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAogCXJlbGVhc2Vfc3lzZnNfZGlyZW50KGN1cnNvcik7CiAKQEAgLTQzNiw3ICs0MzYsNyBAQAogewogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAotCWRvd24oJmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCQlpZiAob2Zmc2V0ID49IDApCiAJCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl1cCgmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQkJbGlzdF9hZGRfdGFpbCgmY3Vyc29yLT5zX3NpYmxpbmcsIHApOwogCQl9CiAJfQotCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtNDgzLDQgKzQ4MywzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19jcmVhdGVfZGlyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX3JlbW92ZV9kaXIpOwogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVuYW1lX2Rpcik7Ci0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA0MDEzZDc5Li5kMGUzZDg0IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0zNjQsOSArMzY0LDkgQEAKIAl1bW9kZV90IG1vZGUgPSAoYXR0ci0+bW9kZSAmIFNfSUFMTFVHTykgfCBTX0lGUkVHOwogCWludCBlcnJvciA9IDA7CiAKLQlkb3duKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWVycm9yID0gc3lzZnNfbWFrZV9kaXJlbnQocGFyZW50X3NkLCBOVUxMLCAodm9pZCAqKSBhdHRyLCBtb2RlLCB0eXBlKTsKLQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc3RydWN0IGRlbnRyeSAqIHZpY3RpbTsKIAlpbnQgcmVzID0gLUVOT0VOVDsKIAotCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJdmljdGltID0gbG9va3VwX29uZV9sZW4oYXR0ci0+bmFtZSwgZGlyLCBzdHJsZW4oYXR0ci0+bmFtZSkpOwogCWlmICghSVNfRVJSKHZpY3RpbSkpIHsKIAkJLyogbWFrZSBzdXJlIGRlbnRyeSBpcyByZWFsbHkgdGhlcmUgKi8KQEAgLTQyMCw3ICs0MjAsNyBAQAogCQkgKi8KIAkJZHB1dCh2aWN0aW0pOwogCX0KLQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTQ0MSwyMiArNDQxLDIyIEBACiAJc3RydWN0IGlhdHRyIG5ld2F0dHJzOwogCWludCByZXMgPSAtRU5PRU5UOwogCi0JZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAl2aWN0aW0gPSBsb29rdXBfb25lX2xlbihhdHRyLT5uYW1lLCBkaXIsIHN0cmxlbihhdHRyLT5uYW1lKSk7CiAJaWYgKCFJU19FUlIodmljdGltKSkgewogCQlpZiAodmljdGltLT5kX2lub2RlICYmCiAJCSAgICAodmljdGltLT5kX3BhcmVudC0+ZF9pbm9kZSA9PSBkaXItPmRfaW5vZGUpKSB7CiAJCQlpbm9kZSA9IHZpY3RpbS0+ZF9pbm9kZTsKLQkJCWRvd24oJmlub2RlLT5pX3NlbSk7CisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQluZXdhdHRycy5pYV9tb2RlID0gKG1vZGUgJiBTX0lBTExVR08pIHwKIAkJCQkJCShpbm9kZS0+aV9tb2RlICYgflNfSUFMTFVHTyk7CiAJCQluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfTU9ERSB8IEFUVFJfQ1RJTUU7CiAJCQlyZXMgPSBub3RpZnlfY2hhbmdlKHZpY3RpbSwgJm5ld2F0dHJzKTsKLQkJCXVwKCZpbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCX0KIAkJZHB1dCh2aWN0aW0pOwogCX0KLQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTQ4MCw0ICs0ODAsMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfY3JlYXRlX2ZpbGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2ZpbGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfdXBkYXRlX2ZpbGUpOwotCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCA5NzBhMzNmLi5jMzEzMzIxIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiAvKgogICogVW5oYXNoZXMgdGhlIGRlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIHN5c2ZzX2RpcmVudAotICogQ2FsbGVkIHdpdGggcGFyZW50IGlub2RlJ3MgaV9zZW0gaGVsZC4KKyAqIENhbGxlZCB3aXRoIHBhcmVudCBpbm9kZSdzIGlfbXV0ZXggaGVsZC4KICAqLwogdm9pZCBzeXNmc19kcm9wX2RlbnRyeShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QsIHN0cnVjdCBkZW50cnkgKiBwYXJlbnQpCiB7CkBAIC0yMzIsNyArMjMyLDcgQEAKIAkJLyogbm8gaW5vZGUgbWVhbnMgdGhpcyBoYXNuJ3QgYmVlbiBtYWRlIHZpc2libGUgeWV0ICovCiAJCXJldHVybjsKIAotCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJnBhcmVudF9zZC0+c19jaGlsZHJlbiwgc19zaWJsaW5nKSB7CiAJCWlmICghc2QtPnNfZWxlbWVudCkKIAkJCWNvbnRpbnVlOwpAQCAtMjQzLDcgKzI0Myw1IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQl1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogfQotCi0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5bWxpbmsuYyBiL2ZzL3N5c2ZzL3N5bWxpbmsuYwppbmRleCBkZTQwMmZhLi5lMzhkNjMzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeW1saW5rLmMKKysrIGIvZnMvc3lzZnMvc3ltbGluay5jCkBAIC04Niw5ICs4Niw5IEBACiAKIAlCVUdfT04oIWtvYmogfHwgIWtvYmotPmRlbnRyeSB8fCAhbmFtZSk7CiAKLQlkb3duKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWVycm9yID0gc3lzZnNfYWRkX2xpbmsoZGVudHJ5LCBuYW1lLCB0YXJnZXQpOwotCXVwKCZkZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xNzcsNCArMTc3LDMgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfY3JlYXRlX2xpbmspOwogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2xpbmspOwotCmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IDJiYTExYTkuLmU5YTQyYzcgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogCXNpemVfdCB0b3dyaXRlID0gbGVuOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAl3aGlsZSAodG93cml0ZSA+IDApIHsKIAkJdG9jb3B5ID0gc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDwgdG93cml0ZSA/CiAJCQkJc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDogdG93cml0ZTsKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJfQogb3V0OgogCWlmIChsZW4gPT0gdG93cml0ZSkgewotCQl1cCgmaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChpbm9kZS0+aV9zaXplIDwgb2ZmK2xlbi10b3dyaXRlKQpAQCAtMTMwNSw3ICsxMzA1LDcgQEAKIAlpbm9kZS0+aV92ZXJzaW9uKys7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGxlbiAtIHRvd3JpdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jCmluZGV4IGJjYzIxNTYuLjM4NmE1MzIgMTAwNjQ0Ci0tLSBhL2ZzL3hhdHRyLmMKKysrIGIvZnMveGF0dHIuYwpAQCAtNTEsNyArNTEsNyBAQAogCQl9CiAJfQogCi0JZG93bigmZC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfc2V0eGF0dHIoZCwga25hbWUsIGt2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CkBAIC03Myw3ICs3Myw3IEBACiAJCQlmc25vdGlmeV94YXR0cihkKTsKIAl9CiBvdXQ6Ci0JdXAoJmQtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWtmcmVlKGt2YWx1ZSk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzIzLDkgKzMyMyw5IEBACiAJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfcmVtb3ZleGF0dHIoZCwga25hbWUpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKLQkJZG93bigmZC0+ZF9pbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZkLT5kX2lub2RlLT5pX211dGV4KTsKIAkJZXJyb3IgPSBkLT5kX2lub2RlLT5pX29wLT5yZW1vdmV4YXR0cihkLCBrbmFtZSk7Ci0JCXVwKCZkLT5kX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmZC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCWlmICghZXJyb3IpCiAJCQlmc25vdGlmeV94YXR0cihkKTsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L211dGV4LmggYi9mcy94ZnMvbGludXgtMi42L211dGV4LmgKaW5kZXggY2U3NzNkOC4uZDMzNjliNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9tdXRleC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYvbXV0ZXguaApAQCAtMTksNyArMTksNyBAQAogI2RlZmluZSBfX1hGU19TVVBQT1JUX01VVEVYX0hfXwogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyoKICAqIE1hcCB0aGUgbXV0ZXgnZXMgZnJvbSBJUklYIHRvIExpbnV4IHNlbWFwaG9yZXMuCkBAIC0yOCwxMiArMjgsOCBAQAogICogY2FsbGVycy4KICAqLwogI2RlZmluZSBNVVRFWF9ERUZBVUxUCQkweDAKLXR5cGVkZWYgc3RydWN0IHNlbWFwaG9yZQltdXRleF90OwogCi0jZGVmaW5lIG11dGV4X2luaXQobG9jaywgdHlwZSwgbmFtZSkJCXNlbWFfaW5pdChsb2NrLCAxKQotI2RlZmluZSBtdXRleF9kZXN0cm95KGxvY2spCQkJc2VtYV9pbml0KGxvY2ssIC05OSkKLSNkZWZpbmUgbXV0ZXhfbG9jayhsb2NrLCBudW0pCQkJZG93bihsb2NrKQotI2RlZmluZSBtdXRleF90cnlsb2NrKGxvY2spCQkJKGRvd25fdHJ5bG9jayhsb2NrKSA/IDAgOiAxKQotI2RlZmluZSBtdXRleF91bmxvY2sobG9jaykJCQl1cChsb2NrKQordHlwZWRlZiBzdHJ1Y3QgbXV0ZXgJCW11dGV4X3Q7CisvLyNkZWZpbmUgbXV0ZXhfZGVzdHJveShsb2NrKQkJCWRve313aGlsZSgwKQogCiAjZW5kaWYgLyogX19YRlNfU1VQUE9SVF9NVVRFWF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCAxNDIxNWE3Li40MWM0NzhiIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJaXAtPmlfbmxpbmsgPSB2YS52YV9ubGluazsKIAkJaXAtPmlfYmxvY2tzID0gdmEudmFfbmJsb2NrczsKIAotCQkvKiB3ZSdyZSB1bmRlciBpX3NlbSBzbyBpX3NpemUgY2FuJ3QgY2hhbmdlIHVuZGVyIHVzICovCisJCS8qIHdlJ3JlIHVuZGVyIGlfbXV0ZXggc28gaV9zaXplIGNhbid0IGNoYW5nZSB1bmRlciB1cyAqLwogCQlpZiAoaV9zaXplX3JlYWQoaXApICE9IHZhLnZhX3NpemUpCiAJCQlpX3NpemVfd3JpdGUoaXAsIHZhLnZhX3NpemUpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggMjc5ZTliYy4uNTY3NTExNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCX0KIAogCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKQotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRCh2cC0+dl92ZnNwLCBpcCwgRE1fRVZFTlRfUkVBRCkgJiYKQEAgLTI4Niw3ICsyODYsNyBAQAogCiB1bmxvY2tfaXNlbToKIAlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkKLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQlpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7CiAJCWxvY2t0eXBlID0gVlJXTE9DS19XUklURTsKIAotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJfSBlbHNlIHsKIAkJaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7CiAJCWxvY2t0eXBlID0gVlJXTE9DS19XUklURV9ESVJFQ1Q7CkBAIC02ODYsNyArNjg2LDcgQEAKIAkJaW50CQlkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpOwogCiAJCWlmIChuZWVkX2lzZW0pCi0JCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lTRU07CisJCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lNVVg7CiAKIAkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJCWVycm9yID0gWEZTX1NFTkRfREFUQSh4aXAtPmlfbW91bnQsIERNX0VWRU5UX1dSSVRFLCB2cCwKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlpZiAobmVlZF9pc2VtKSB7CiAJCQkvKiBkZW1vdGUgdGhlIGxvY2sgbm93IHRoZSBjYWNoZWQgcGFnZXMgYXJlIGdvbmUgKi8KIAkJCVhGU19JTE9DS19ERU1PVEUobXAsIGlvLCBYRlNfSU9MT0NLX0VYQ0wpOwotCQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCQkJaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7CiAJCQlsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEVfRElSRUNUOwpAQCAtODE3LDE0ICs4MTcsMTQgQEAKIAogCQl4ZnNfcnd1bmxvY2soYmRwLCBsb2NrdHlwZSk7CiAJCWlmIChuZWVkX2lzZW0pCi0JCQl1cCgmaW5vZGUtPmlfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUCh4aXAtPmlfbW91bnQsIERNX0VWRU5UX05PU1BBQ0UsIHZwLAogCQkJCURNX1JJR0hUX05VTEwsIHZwLCBETV9SSUdIVF9OVUxMLCBOVUxMLCBOVUxMLAogCQkJCTAsIDAsIDApOyAvKiBEZWxheSBmbGFnIGludGVudGlvbmFsbHkgIHVudXNlZCAqLwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9ub3VubG9ja3M7CiAJCWlmIChuZWVkX2lzZW0pCi0JCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQl4ZnNfcndsb2NrKGJkcCwgbG9ja3R5cGUpOwogCQlwb3MgPSB4aXAtPmlfZC5kaV9zaXplOwogCQlyZXQgPSAwOwpAQCAtOTI2LDcgKzkyNiw3IEBACiAJCiAJCXhmc19yd3VubG9jayhiZHAsIGxvY2t0eXBlKTsKIAkJaWYgKG5lZWRfaXNlbSkKLQkJCXVwKCZpbm9kZS0+aV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAkJZXJyb3IgPSBzeW5jX3BhZ2VfcmFuZ2UoaW5vZGUsIG1hcHBpbmcsIHBvcywgcmV0KTsKIAkJaWYgKCFlcnJvcikKQEAgLTkzOCw3ICs5MzgsNyBAQAogCXhmc19yd3VubG9jayhiZHAsIGxvY2t0eXBlKTsKICBvdXRfdW5sb2NrX2lzZW06CiAJaWYgKG5lZWRfaXNlbSkKLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogIG91dF9ub3VubG9ja3M6CiAJcmV0dXJuIC1lcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCAwMGI1MDQzLi43NzJhYzQ4IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkgKi8KIAlpZiAoYnJhbmRuZXdkcXVvdCkgewogCQlkcXAtPmRxX2ZsbmV4dCA9IGRxcC0+ZHFfZmxwcmV2ID0gZHFwOwotCQltdXRleF9pbml0KCZkcXAtPnFfcWxvY2ssICBNVVRFWF9ERUZBVUxULCAieGRxIik7CisJCW11dGV4X2luaXQoJmRxcC0+cV9xbG9jayk7CiAJCWluaXRuc2VtYSgmZHFwLT5xX2Zsb2NrLCAxLCAiZmRxIik7CiAJCXN2X2luaXQoJmRxcC0+cV9waW53YWl0LCBTVl9ERUZBVUxULCAicGRxIik7CiAKQEAgLTEzODIsNyArMTM4Miw3IEBACiB4ZnNfZHFsb2NrKAogCXhmc19kcXVvdF90ICpkcXApCiB7Ci0JbXV0ZXhfbG9jaygmKGRxcC0+cV9xbG9jayksIFBJTk9EKTsKKwltdXRleF9sb2NrKCYoZHFwLT5xX3Fsb2NrKSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA1MzI4YTI5My4uYmI2OTkxYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJeHFtLT5xbV9kcWZyZWVfcmF0aW8gPSBYRlNfUU1fRFFGUkVFX1JBVElPOwogCXhxbS0+cW1fbnJlZnMgPSAwOwogI2lmZGVmIERFQlVHCi0JbXV0ZXhfaW5pdCgmcWNoZWNrX2xvY2ssIE1VVEVYX0RFRkFVTFQsICJxY2hrIik7CisJeGZzX211dGV4X2luaXQoJnFjaGVja19sb2NrLCBNVVRFWF9ERUZBVUxULCAicWNoayIpOwogI2VuZGlmCiAJcmV0dXJuIHhxbTsKIH0KQEAgLTExNjYsNyArMTE2Niw3IEBACiAJcWluZi0+cWlfZHFyZWNsYWltcyA9IDA7CiAKIAkvKiBtdXRleCB1c2VkIHRvIHNlcmlhbGl6ZSBxdW90YW9mZnMgKi8KLQltdXRleF9pbml0KCZxaW5mLT5xaV9xdW90YW9mZmxvY2ssIE1VVEVYX0RFRkFVTFQsICJxb2ZmIik7CisJbXV0ZXhfaW5pdCgmcWluZi0+cWlfcXVvdGFvZmZsb2NrKTsKIAogCS8qIFByZWNhbGMgc29tZSBjb25zdGFudHMgKi8KIAlxaW5mLT5xaV9kcWNodW5rbGVuID0gWEZTX0ZTQl9UT19CQihtcCwgWEZTX0RRVU9UX0NMVVNURVJfU0laRV9GU0IpOwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAljaGFyCQkqc3RyLAogCWludAkJbikKIHsKLQltdXRleF9pbml0KCZsaXN0LT5xaF9sb2NrLCBNVVRFWF9ERUZBVUxULCBzdHIpOworCW11dGV4X2luaXQoJmxpc3QtPnFoX2xvY2spOwogCWxpc3QtPnFoX25leHQgPSBOVUxMOwogCWxpc3QtPnFoX3ZlcnNpb24gPSAwOwogCWxpc3QtPnFoX25lbGVtcyA9IDA7CkBAIC0yNzYyLDcgKzI3NjIsNyBAQAogeGZzX3FtX2ZyZWVsaXN0X2luaXQoeGZzX2ZybGlzdF90ICpxbCkKIHsKIAlxbC0+cWhfbmV4dCA9IHFsLT5xaF9wcmV2ID0gKHhmc19kcXVvdF90ICopIHFsOwotCW11dGV4X2luaXQoJnFsLT5xaF9sb2NrLCBNVVRFWF9ERUZBVUxULCAiZHFmIik7CisJbXV0ZXhfaW5pdCgmcWwtPnFoX2xvY2spOwogCXFsLT5xaF92ZXJzaW9uID0gMDsKIAlxbC0+cWhfbmVsZW1zID0gMDsKIH0KQEAgLTI3NzIsNyArMjc3Miw3IEBACiB7CiAJeGZzX2RxdW90X3QJKmRxcCwgKm5leHRkcXA7CiAKLQltdXRleF9sb2NrKCZxbC0+cWhfbG9jaywgUElOT0QpOworCW11dGV4X2xvY2soJnFsLT5xaF9sb2NrKTsKIAlmb3IgKGRxcCA9IHFsLT5xaF9uZXh0OwogCSAgICAgZHFwICE9ICh4ZnNfZHF1b3RfdCAqKXFsOyApIHsKIAkJeGZzX2RxbG9jayhkcXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5oIGIvZnMveGZzL3F1b3RhL3hmc19xbS5oCmluZGV4IDEyZGEyNTkuLjQ1NjhkZWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogI2RlZmluZSBYRlNfUU1fSVdBUk5MSU1JVAk1CiAjZGVmaW5lIFhGU19RTV9SVEJXQVJOTElNSVQJNQogCi0jZGVmaW5lIFhGU19RTV9MT0NLKHhxbSkJKG11dGV4X2xvY2soJnhxbSMjX2xvY2ssIFBJTk9EKSkKKyNkZWZpbmUgWEZTX1FNX0xPQ0soeHFtKQkobXV0ZXhfbG9jaygmeHFtIyNfbG9jaykpCiAjZGVmaW5lIFhGU19RTV9VTkxPQ0soeHFtKQkobXV0ZXhfdW5sb2NrKCZ4cW0jI19sb2NrKSkKICNkZWZpbmUgWEZTX1FNX0hPTEQoeHFtKQkoKHhxbSktPnFtX25yZWZzKyspCiAjZGVmaW5lIFhGU19RTV9SRUxFKHhxbSkJKCh4cW0pLT5xbV9ucmVmcy0tKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggZDlkMjk5My4uOTA0MDJhMSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAkJS0VSTl9JTkZPICJTR0kgWEZTIFF1b3RhIE1hbmFnZW1lbnQgc3Vic3lzdGVtXG4iOwogCiAJcHJpbnRrKG1lc3NhZ2UpOwotCW11dGV4X2luaXQoJnhmc19HcW1fbG9jaywgTVVURVhfREVGQVVMVCwgInhmc19xbWxvY2siKTsKKwltdXRleF9pbml0KCZ4ZnNfR3FtX2xvY2spOwogCXZmc19iaHZfc2V0X2N1c3RvbSgmeGZzX3Ftb3BzLCAmeGZzX3FtY29yZV94ZnMpOwogCXhmc19xbV9pbml0X3Byb2NmcygpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDI0NjkwZTEuLjg2YTFkMDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCSAqLwogCUFTU0VSVChtcC0+bV9xdW90YWluZm8pOwogCWlmIChtcC0+bV9xdW90YWluZm8pCi0JCW11dGV4X2xvY2soJihYRlNfUUlfUU9GRkxPQ0sobXApKSwgUElOT0QpOworCQltdXRleF9sb2NrKCYoWEZTX1FJX1FPRkZMT0NLKG1wKSkpOwogCiAJQVNTRVJUKG1wLT5tX3F1b3RhaW5mbyk7CiAKQEAgLTUwOCw3ICs1MDgsNyBAQAogCS8qCiAJICogU3dpdGNoIG9uIHF1b3RhIGVuZm9yY2VtZW50IGluIGNvcmUuCiAJICovCi0JbXV0ZXhfbG9jaygmKFhGU19RSV9RT0ZGTE9DSyhtcCkpLCBQSU5PRCk7CisJbXV0ZXhfbG9jaygmKFhGU19RSV9RT0ZGTE9DSyhtcCkpKTsKIAltcC0+bV9xZmxhZ3MgfD0gKGZsYWdzICYgWEZTX0FMTF9RVU9UQV9FTkZEKTsKIAltdXRleF91bmxvY2soJihYRlNfUUlfUU9GRkxPQ0sobXApKSk7CiAKQEAgLTYxNyw3ICs2MTcsNyBAQAogCSAqIGEgcXVvdGFvZmYgZnJvbSBoYXBwZW5pbmcpLiAoWFhYVGhpcyBkb2Vzbid0IGN1cnJlbnRseSBoYXBwZW4KIAkgKiBiZWNhdXNlIHdlIHRha2UgdGhlIHZmc2xvY2sgYmVmb3JlIGNhbGxpbmcgeGZzX3FtX3N5c2VudCkuCiAJICovCi0JbXV0ZXhfbG9jaygmKFhGU19RSV9RT0ZGTE9DSyhtcCkpLCBQSU5PRCk7CisJbXV0ZXhfbG9jaygmKFhGU19RSV9RT0ZGTE9DSyhtcCkpKTsKIAogCS8qCiAJICogR2V0IHRoZSBkcXVvdCAobG9ja2VkKSwgYW5kIGpvaW4gaXQgdG8gdGhlIHRyYW5zYWN0aW9uLgpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIAl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOwogCVhGU19iZmx1c2gobXAtPm1fZGRldl90YXJncCk7CiAKLQltdXRleF9sb2NrKCZxY2hlY2tfbG9jaywgUElOT0QpOworCW11dGV4X2xvY2soJnFjaGVja19sb2NrKTsKIAkvKiBUaGVyZSBzaG91bGQgYmUgYWJzb2x1dGVseSBubyBxdW90YSBhY3Rpdml0eSB3aGlsZSB0aGlzCiAJICAgaXMgZ29pbmcgb24uICovCiAJcW10ZXN0X3VkcXRhYiA9IGttZW1femFsbG9jKHFtdGVzdF9oYXNobWFzayAqCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3F1b3RhX3ByaXYuaCBiL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oCmluZGV4IDdhOWYzYmUuLmI3ZGRkMDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oCkBAIC01MSw3ICs1MSw3IEBACiAjZGVmaW5lIFhGU19RSV9NUExORVhUKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX2RxbGlzdC5xaF9uZXh0KQogI2RlZmluZSBYRlNfUUlfTVBMTkRRVU9UUyhtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3QucWhfbmVsZW1zKQogCi0jZGVmaW5lIFhRTUxDSyhoKQkJCShtdXRleF9sb2NrKCYoKGgpLT5xaF9sb2NrKSwgUElOT0QpKQorI2RlZmluZSBYUU1MQ0soaCkJCQkobXV0ZXhfbG9jaygmKChoKS0+cWhfbG9jaykpKQogI2RlZmluZSBYUU1VTkxDSyhoKQkJCShtdXRleF91bmxvY2soJigoaCktPnFoX2xvY2spKSkKICNpZmRlZiBERUJVRwogc3RydWN0IHhmc19kcWhhc2g7CmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC91dWlkLmMgYi9mcy94ZnMvc3VwcG9ydC91dWlkLmMKaW5kZXggNzBjZTQwOS4uNjllYzRmNSAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvdXVpZC5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L3V1aWQuYwpAQCAtMjQsNyArMjQsNyBAQAogdm9pZAogdXVpZF9pbml0KHZvaWQpCiB7Ci0JbXV0ZXhfaW5pdCgmdXVpZF9tb25pdG9yLCBNVVRFWF9ERUZBVUxULCAidXVpZF9tb25pdG9yIik7CisJbXV0ZXhfaW5pdCgmdXVpZF9tb25pdG9yKTsKIH0KIAogLyoKQEAgLTk0LDcgKzk0LDcgQEAKIHsKIAlpbnQJaSwgaG9sZTsKIAotCW11dGV4X2xvY2soJnV1aWRfbW9uaXRvciwgUFZGUyk7CisJbXV0ZXhfbG9jaygmdXVpZF9tb25pdG9yKTsKIAlmb3IgKGkgPSAwLCBob2xlID0gLTE7IGkgPCB1dWlkX3RhYmxlX3NpemU7IGkrKykgewogCQlpZiAodXVpZF9pc19uaWwoJnV1aWRfdGFibGVbaV0pKSB7CiAJCQlob2xlID0gaTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogewogCWludAlpOwogCi0JbXV0ZXhfbG9jaygmdXVpZF9tb25pdG9yLCBQVkZTKTsKKwltdXRleF9sb2NrKCZ1dWlkX21vbml0b3IpOwogCWZvciAoaSA9IDA7IGkgPCB1dWlkX3RhYmxlX3NpemU7IGkrKykgewogCQlpZiAodXVpZF9pc19uaWwoJnV1aWRfdGFibGVbaV0pKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RtYXBpLmggYi9mcy94ZnMveGZzX2RtYXBpLmgKaW5kZXggODY0YmY2OS4uYjRjN2YyYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kbWFwaS5oCisrKyBiL2ZzL3hmcy94ZnNfZG1hcGkuaApAQCAtMTUyLDcgKzE1Miw3IEBACiAKICNkZWZpbmUgRE1fRkxBR1NfTkRFTEFZCQkweDAwMQkvKiByZXR1cm4gRUFHQUlOIGFmdGVyIGRtX3BlbmRpbmcoKSAqLwogI2RlZmluZSBETV9GTEFHU19VTldBTlRFRAkweDAwMgkvKiBldmVudCBub3QgaW4gZnN5cyBkbV9ldmVudHNldF90ICovCi0jZGVmaW5lIERNX0ZMQUdTX0lTRU0JCTB4MDA0CS8qIHRocmVhZCBob2xkcyBpX3NlbSAqLworI2RlZmluZSBETV9GTEFHU19JTVVYCQkweDAwNAkvKiB0aHJlYWQgaG9sZHMgaV9tdXRleCAqLwogI2RlZmluZSBETV9GTEFHU19JQUxMT0NTRU1fUkQJMHgwMTAJLyogdGhyZWFkIGhvbGRzIGlfYWxsb2Nfc2VtIHJkICovCiAjZGVmaW5lIERNX0ZMQUdTX0lBTExPQ1NFTV9XUgkweDAyMAkvKiB0aHJlYWQgaG9sZHMgaV9hbGxvY19zZW0gd3IgKi8KIApAQCAtMTYxLDIxICsxNjEsMjEgQEAKICAqLwogI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQogI2RlZmluZSBETV9TRU1fRkxBR19SRChpb2ZsYWdzKSAoKChpb2ZsYWdzKSAmIElPX0lTRElSRUNUKSA/IFwKLQkJCSAgICAgIERNX0ZMQUdTX0lTRU0gOiAwKQotI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSUFMTE9DU0VNX1dSIHwgRE1fRkxBR1NfSVNFTSkKKwkJCSAgICAgIERNX0ZMQUdTX0lNVVggOiAwKQorI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSUFMTE9DU0VNX1dSIHwgRE1fRkxBR1NfSU1VWCkKICNlbmRpZgogCiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkgJiYgXAogICAgIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw0LDIyKSkKICNkZWZpbmUgRE1fU0VNX0ZMQUdfUkQoaW9mbGFncykgKCgoaW9mbGFncykgJiBJT19JU0RJUkVDVCkgPyBcCi0JCQkgICAgICBETV9GTEFHU19JQUxMT0NTRU1fUkQgOiBETV9GTEFHU19JU0VNKQotI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSUFMTE9DU0VNX1dSIHwgRE1fRkxBR1NfSVNFTSkKKwkJCSAgICAgIERNX0ZMQUdTX0lBTExPQ1NFTV9SRCA6IERNX0ZMQUdTX0lNVVgpCisjZGVmaW5lIERNX1NFTV9GTEFHX1dSCShETV9GTEFHU19JQUxMT0NTRU1fV1IgfCBETV9GTEFHU19JTVVYKQogI2VuZGlmCiAKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw0LDIxKQogI2RlZmluZSBETV9TRU1fRkxBR19SRChpb2ZsYWdzKSAoKChpb2ZsYWdzKSAmIElPX0lTRElSRUNUKSA/IFwKLQkJCSAgICAgIDAgOiBETV9GTEFHU19JU0VNKQotI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSVNFTSkKKwkJCSAgICAgIDAgOiBETV9GTEFHU19JTVVYKQorI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSU1VWCkKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuYyBiL2ZzL3hmcy94ZnNfbW91bnQuYwppbmRleCA1NDFkNWRkLi4zMDNhZjg2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmMKKysrIGIvZnMveGZzL3hmc19tb3VudC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogCUFJTF9MT0NLSU5JVCgmbXAtPm1fYWlsX2xvY2ssICJ4ZnNfYWlsIik7CiAJc3BpbmxvY2tfaW5pdCgmbXAtPm1fc2JfbG9jaywgInhmc19zYiIpOwotCW11dGV4X2luaXQoJm1wLT5tX2lsb2NrLCBNVVRFWF9ERUZBVUxULCAieGZzX2lsb2NrIik7CisJbXV0ZXhfaW5pdCgmbXAtPm1faWxvY2spOwogCWluaXRuc2VtYSgmbXAtPm1fZ3Jvd2xvY2ssIDEsICJ4ZnNfZ3JvdyIpOwogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgQUlMLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDA4YjJlMGEuLjM0MzJmZDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTUzMyw3ICs1MzMsNyBAQAogCWludAkJbXNiX2RlbHRhOwkvKiBDaGFuZ2UgdG8gbWFrZSB0byBzcGVjaWZpZWQgZmllbGQgKi8KIH0geGZzX21vZF9zYl90OwogCi0jZGVmaW5lCVhGU19NT1VOVF9JTE9DSyhtcCkJbXV0ZXhfbG9jaygmKChtcCktPm1faWxvY2spLCBQSU5PRCkKKyNkZWZpbmUJWEZTX01PVU5UX0lMT0NLKG1wKQltdXRleF9sb2NrKCYoKG1wKS0+bV9pbG9jaykpCiAjZGVmaW5lCVhGU19NT1VOVF9JVU5MT0NLKG1wKQltdXRleF91bmxvY2soJigobXApLT5tX2lsb2NrKSkKICNkZWZpbmUJWEZTX1NCX0xPQ0sobXApCQltdXRleF9zcGlubG9jaygmKG1wKS0+bV9zYl9sb2NrKQogI2RlZmluZQlYRlNfU0JfVU5MT0NLKG1wLHMpCW11dGV4X3NwaW51bmxvY2soJihtcCktPm1fc2JfbG9jaywocykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCmluZGV4IGNiMDNiYmUuLmZjNzdmNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCkBAIC0xNzYsNiArMTc2LDcgQEAKIH0KIAogI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKIAogI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCiAoewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLWFscGhhL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmNDA5MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5oCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CisgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKKyAqCisgKiBDb21tb24gZGVmaW5pdGlvbnMuCisgKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVDkxUk05MjAwX0gKKyNkZWZpbmUgQVQ5MVJNOTIwMF9ICisKKy8qCisgKiBQZXJpcGhlcmFsIGlkZW50aWZpZXJzL2ludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgQVQ5MV9JRF9GSVEJMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLworI2RlZmluZSBBVDkxX0lEX1NZUwkxCS8qIFN5c3RlbSBQZXJpcGhlcmFsICovCisjZGVmaW5lIEFUOTFfSURfUElPQQkyCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLworI2RlZmluZSBBVDkxX0lEX1BJT0IJMwkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKyNkZWZpbmUgQVQ5MV9JRF9QSU9DCTQJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCisjZGVmaW5lIEFUOTFfSURfUElPRAk1CS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLworI2RlZmluZSBBVDkxX0lEX1VTMAk2CS8qIFVTQVJUIDAgKi8KKyNkZWZpbmUgQVQ5MV9JRF9VUzEJNwkvKiBVU0FSVCAxICovCisjZGVmaW5lIEFUOTFfSURfVVMyCTgJLyogVVNBUlQgMiAqLworI2RlZmluZSBBVDkxX0lEX1VTMwk5CS8qIFVTQVJUIDMgKi8KKyNkZWZpbmUgQVQ5MV9JRF9NQ0kJMTAJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAqLworI2RlZmluZSBBVDkxX0lEX1VEUAkxMQkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KKyNkZWZpbmUgQVQ5MV9JRF9UV0kJMTIJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFfSURfU1BJCTEzCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAqLworI2RlZmluZSBBVDkxX0lEX1NTQzAJMTQJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMCAqLworI2RlZmluZSBBVDkxX0lEX1NTQzEJMTUJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworI2RlZmluZSBBVDkxX0lEX1NTQzIJMTYJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMiAqLworI2RlZmluZSBBVDkxX0lEX1RDMAkxNwkvKiBUaW1lciBDb3VudGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9JRF9UQzEJMTgJLyogVGltZXIgQ291bnRlciAxICovCisjZGVmaW5lIEFUOTFfSURfVEMyCTE5CS8qIFRpbWVyIENvdW50ZXIgMiAqLworI2RlZmluZSBBVDkxX0lEX1RDMwkyMAkvKiBUaW1lciBDb3VudGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9JRF9UQzQJMjEJLyogVGltZXIgQ291bnRlciA0ICovCisjZGVmaW5lIEFUOTFfSURfVEM1CTIyCS8qIFRpbWVyIENvdW50ZXIgNSAqLworI2RlZmluZSBBVDkxX0lEX1VIUAkyMwkvKiBVU0IgSG9zdCBwb3J0ICovCisjZGVmaW5lIEFUOTFfSURfRU1BQwkyNAkvKiBFdGhlcm5ldCBNQUMgKi8KKyNkZWZpbmUgQVQ5MV9JRF9JUlEwCTI1CS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLworI2RlZmluZSBBVDkxX0lEX0lSUTEJMjYJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovCisjZGVmaW5lIEFUOTFfSURfSVJRMgkyNwkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMikgKi8KKyNkZWZpbmUgQVQ5MV9JRF9JUlEzCTI4CS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEzKSAqLworI2RlZmluZSBBVDkxX0lEX0lSUTQJMjkJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTQpICovCisjZGVmaW5lIEFUOTFfSURfSVJRNQkzMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRNSkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9JUlE2CTMxCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlE2KSAqLworCisKKy8qCisgKiBQZXJpcGhlcmFsIHBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzLgorICovCisjZGVmaW5lIEFUOTFfQkFTRV9UQ0IwCQkweGZmZmEwMDAwCisjZGVmaW5lIEFUOTFfQkFTRV9UQzAJCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1RDMQkJMHhmZmZhMDA0MAorI2RlZmluZSBBVDkxX0JBU0VfVEMyCQkweGZmZmEwMDgwCisjZGVmaW5lIEFUOTFfQkFTRV9UQ0IxCQkweGZmZmE0MDAwCisjZGVmaW5lIEFUOTFfQkFTRV9UQzMJCTB4ZmZmYTQwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1RDNAkJMHhmZmZhNDA0MAorI2RlZmluZSBBVDkxX0JBU0VfVEM1CQkweGZmZmE0MDgwCisjZGVmaW5lIEFUOTFfQkFTRV9VRFAJCTB4ZmZmYjAwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX01DSQkJMHhmZmZiNDAwMAorI2RlZmluZSBBVDkxX0JBU0VfVFdJCQkweGZmZmI4MDAwCisjZGVmaW5lIEFUOTFfQkFTRV9FTUFDCQkweGZmZmJjMDAwCisjZGVmaW5lIEFUOTFfQkFTRV9VUzAJCTB4ZmZmYzAwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1VTMQkJMHhmZmZjNDAwMAorI2RlZmluZSBBVDkxX0JBU0VfVVMyCQkweGZmZmM4MDAwCisjZGVmaW5lIEFUOTFfQkFTRV9VUzMJCTB4ZmZmY2MwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1NTQzAJCTB4ZmZmZDAwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1NTQzEJCTB4ZmZmZDQwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1NTQzIJCTB4ZmZmZDgwMDAKKyNkZWZpbmUgQVQ5MV9CQVNFX1NQSQkJMHhmZmZlMDAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1lTCQkweGZmZmZmMDAwCisKKworLyoKKyAqIFBJTyBwaW4gZGVmaW5pdGlvbnMgKHBlcmlwaGVyYWwgQS9CIG11bHRpcGxleGluZykuCisgKi8KKyNkZWZpbmUgQVQ5MV9QQTBfTUlTTwkJKDEgPDwgIDApCS8qIEE6IFNQSSBNYXN0ZXItSW4gU2xhdmUtT3V0ICovCisjZGVmaW5lIEFUOTFfUEEwX1BDSzMJCSgxIDw8ICAwKQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAzICovCisjZGVmaW5lIEFUOTFfUEExX01PU0kJCSgxIDw8ICAxKQkvKiBBOiBTUEkgTWFzdGVyLU91dCBTbGF2ZS1JbiAqLworI2RlZmluZSBBVDkxX1BBMV9QQ0swCQkoMSA8PCAgMSkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMCAqLworI2RlZmluZSBBVDkxX1BBMl9TUENLCQkoMSA8PCAgMikJLyogQTogU1BJIFNlcmlhbCBDbG9jayAqLworI2RlZmluZSBBVDkxX1BBMl9JUlE0CQkoMSA8PCAgMikJLyogQjogRXh0ZXJuYWwgSW50ZXJydXB0IDQgKi8KKyNkZWZpbmUgQVQ5MV9QQTNfTlBDUzAJCSgxIDw8ICAzKQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwICovCisjZGVmaW5lIEFUOTFfUEEzX0lSUTUJCSgxIDw8ICAzKQkvKiBCOiBFeHRlcm5hbCBJbnRlcnJ1cHQgNSAqLworI2RlZmluZSBBVDkxX1BBNF9OUENTMQkJKDEgPDwgIDQpCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTRfUENLMQkJKDEgPDwgIDQpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTVfTlBDUzIJCSgxIDw8ICA1KQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovCisjZGVmaW5lIEFUOTFfUEE1X1RYRDMJCSgxIDw8ICA1KQkvKiBCOiBVU0FSVCBUcmFuc21pdCBEYXRhIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQTZfTlBDUzMJCSgxIDw8ICA2KQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovCisjZGVmaW5lIEFUOTFfUEE2X1JYRDMJCSgxIDw8ICA2KQkvKiBCOiBVU0FSVCBSZWNlaXZlIERhdGEgMyAqLworI2RlZmluZSBBVDkxX1BBN19FVFhDS19FUkVGQ0sJKDEgPDwgIDcpCS8qIEE6IEV0aGVybmV0IFJlZmVyZW5jZSBDbG9jayAvIFRyYW5zbWl0IENsb2NrICovCisjZGVmaW5lIEFUOTFfUEE3X1BDSzIJCSgxIDw8ICA3KQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyICovCisjZGVmaW5lIEFUOTFfUEE4X0VUWEVOCQkoMSA8PCAgOCkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUEE4X01DQ0RCCQkoMSA8PCAgOCkJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBCIENvbW1hbmQgKi8KKyNkZWZpbmUgQVQ5MV9QQTlfRVRYMAkJKDEgPDwgIDkpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BBOV9NQ0RCMAkJKDEgPDwgIDkpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQiBEYXRhIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTEwX0VUWDEJCSgxIDw8IDEwKQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTEwX01DREIxCQkoMSA8PCAxMCkJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBCIERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BBMTFfRUNSU19FQ1JTRFYJKDEgPDwgMTEpCS8qIEE6IEV0aGVybmV0IENhcnJpZXIgU2Vuc2UgLyBEYXRhIFZhbGlkICovCisjZGVmaW5lIEFUOTFfUEExMV9NQ0RCMgkJKDEgPDwgMTEpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQiBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTEyX0VSWDAJCSgxIDw8IDEyKQkvKiBBOiBFdGhlcm5ldCBSZWNlaXZlIERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BBMTJfTUNEQjMJCSgxIDw8IDEyKQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEIgRGF0YSAzICovCisjZGVmaW5lIEFUOTFfUEExM19FUlgxCQkoMSA8PCAxMykJLyogQTogRXRoZXJuZXQgUmVjZWl2ZSBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTEzX1RDTEswCQkoMSA8PCAxMykJLyogQjogVEMgRXh0ZXJuYWwgQ2xvY2sgSW5wdXQgMCAqLworI2RlZmluZSBBVDkxX1BBMTRfRVJYRVIJCSgxIDw8IDE0KQkvKiBBOiBFdGhlcm5ldCBSZWNlaXZlIEVycm9yICovCisjZGVmaW5lIEFUOTFfUEExNF9UQ0xLMQkJKDEgPDwgMTQpCS8qIEI6IFRDIEV4dGVybmFsIENsb2NrIElucHV0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTE1X0VNREMJCSgxIDw8IDE1KQkvKiBBOiBFdGhlcm5ldCBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKi8KKyNkZWZpbmUgQVQ5MV9QQTE1X1RDTEsyCQkoMSA8PCAxNSkJLyogQjogVEMgRXh0ZXJuYWwgQ2xvY2sgSW5wdXQgMiAqLworI2RlZmluZSBBVDkxX1BBMTZfRU1ESU8JCSgxIDw8IDE2KQkvKiBBOiBFdGhlcm5ldCBNYW5hZ2VtZW50IERhdGEgSS9PICovCisjZGVmaW5lIEFUOTFfUEExNl9JUlE2CQkoMSA8PCAxNikJLyogQjogRXh0ZXJuYWwgSW50ZXJydXB0IDYgKi8KKyNkZWZpbmUgQVQ5MV9QQTE3X1RYRDAJCSgxIDw8IDE3KQkvKiBBOiBVU0FSVCBUcmFuc21pdCBEYXRhIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTE3X1RJT0EwCQkoMSA8PCAxNykJLyogQjogVEMgSS9PIExpbmUgQSAwICovCisjZGVmaW5lIEFUOTFfUEExOF9SWEQwCQkoMSA8PCAxOCkJLyogQTogVVNBUlQgUmVjZWl2ZSBEYXRhIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTE4X1RJT0IwCQkoMSA8PCAxOCkJLyogQjogVEMgSS9PIExpbmUgQiAwICovCisjZGVmaW5lIEFUOTFfUEExOV9TQ0swCQkoMSA8PCAxOSkJLyogQTogVVNBUlQgU2VyaWFsIENsb2NrIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQTE5X1RJT0ExCQkoMSA8PCAxOSkJLyogQjogVEMgSS9PIExpbmUgQSAxICovCisjZGVmaW5lIEFUOTFfUEEyMF9DVFMwCQkoMSA8PCAyMCkJLyogQTogVVNBUlQgQ2xlYXIgVG8gU2VuZCAwICovCisjZGVmaW5lIEFUOTFfUEEyMF9USU9CMQkJKDEgPDwgMjApCS8qIEI6IFRDIEkvTyBMaW5lIEIgMSAqLworI2RlZmluZSBBVDkxX1BBMjFfUlRTMAkJKDEgPDwgMjEpCS8qIEE6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMCAqLworI2RlZmluZSBBVDkxX1BBMjFfVElPQTIJCSgxIDw8IDIxKQkvKiBCOiBUQyBJL08gTGluZSBBIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTIyX1JYRDIJCSgxIDw8IDIyKQkvKiBBOiBVU0FSVCBSZWNlaXZlIERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BBMjJfVElPQjIJCSgxIDw8IDIyKQkvKiBCOiBUQyBJL08gTGluZSBCIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTIzX1RYRDIJCSgxIDw8IDIzKQkvKiBBOiBVU0FSVCBUcmFuc21pdCBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTIzX0lSUTMJCSgxIDw8IDIzKQkvKiBCOiBFeHRlcm5hbCBJbnRlcnJ1cHQgMyAqLworI2RlZmluZSBBVDkxX1BBMjRfU0NLMgkJKDEgPDwgMjQpCS8qIEE6IFVTQVJUIFNlcmlhbCBDbG9jayAyICovCisjZGVmaW5lIEFUOTFfUEEyNF9QQ0sxCQkoMSA8PCAyNCkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLworI2RlZmluZSBBVDkxX1BBMjVfVFdECQkoMSA8PCAyNSkJLyogQTogVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhICovCisjZGVmaW5lIEFUOTFfUEEyNV9JUlEyCQkoMSA8PCAyNSkJLyogQjogRXh0ZXJuYWwgSW50ZXJydXB0IDIgKi8KKyNkZWZpbmUgQVQ5MV9QQTI2X1RXQ0sJCSgxIDw8IDI2KQkvKiBBOiBUV0kgVHdvLXdpcmUgU2VyaWFsIENsb2NrICovCisjZGVmaW5lIEFUOTFfUEEyNl9JUlExCQkoMSA8PCAyNikJLyogQjogRXh0ZXJuYWwgSW50ZXJydXB0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QQTI3X01DQ0sJCSgxIDw8IDI3KQkvKiBBOiBNTUMgTXVsdGltZWRpYSBDYXJkIENsb2NrICovCisjZGVmaW5lIEFUOTFfUEEyN19UQ0xLMwkJKDEgPDwgMjcpCS8qIEI6IFRDIEV4dGVybmFsIENsb2NrIElucHV0IDMgKi8KKyNkZWZpbmUgQVQ5MV9QQTI4X01DQ0RBCQkoMSA8PCAyOCkJLyogQTogTU1DIE11bHRpbWVkaWEgQ2FyZCBBIENvbW1hbmQgKi8KKyNkZWZpbmUgQVQ5MV9QQTI4X1RDTEs0CQkoMSA8PCAyOCkJLyogQjogVEMgRXh0ZXJuYWwgQ2xvY2sgSW5wdXQgNCAqLworI2RlZmluZSBBVDkxX1BBMjlfTUNEQTAJCSgxIDw8IDI5KQkvKiBBOiBNTUMgTXVsdGltZWRpYSBDYXJkIEEgRGF0YSAwICovCisjZGVmaW5lIEFUOTFfUEEyOV9UQ0xLNQkJKDEgPDwgMjkpCS8qIEI6IFRDIEV4dGVybmFsIENsb2NrIElucHV0IDUgKi8KKyNkZWZpbmUgQVQ5MV9QQTMwX0RSWEQJCSgxIDw8IDMwKQkvKiBBOiBEQkdVIFJlY2VpdmUgRGF0YSAqLworI2RlZmluZSBBVDkxX1BBMzBfQ1RTMgkJKDEgPDwgMzApCS8qIEI6IFVTQVJUIENsZWFyIFRvIFNlbmQgMiAqLworI2RlZmluZSBBVDkxX1BBMzFfRFRYRAkJKDEgPDwgMzEpCS8qIEE6IERCR1UgVHJhbnNtaXQgRGF0YSAqLworI2RlZmluZSBBVDkxX1BBMzFfUlRTMgkJKDEgPDwgMzEpCS8qIEI6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMiAqLworCisjZGVmaW5lIEFUOTFfUEIwX1RGMAkJKDEgPDwgIDApCS8qIEE6IFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQjBfUlRTMwkJKDEgPDwgIDApCS8qIEI6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMyAqLworI2RlZmluZSBBVDkxX1BCMV9USzAJCSgxIDw8ICAxKQkvKiBBOiBTU0MgVHJhbnNtaXQgQ2xvY2sgMCAqLworI2RlZmluZSBBVDkxX1BCMV9DVFMzCQkoMSA8PCAgMSkJLyogQjogVVNBUlQgQ2xlYXIgVG8gU2VuZCAzICovCisjZGVmaW5lIEFUOTFfUEIyX1REMAkJKDEgPDwgIDIpCS8qIEE6IFNTQyBUcmFuc21pdCBEYXRhIDAgKi8KKyNkZWZpbmUgQVQ5MV9QQjJfU0NLMwkJKDEgPDwgIDIpCS8qIEI6IFVTQVJUIFNlcmlhbCBDbG9jayAzICovCisjZGVmaW5lIEFUOTFfUEIzX1JEMAkJKDEgPDwgIDMpCS8qIEE6IFNTQyBSZWNlaXZlIERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BCM19NQ0RBMQkJKDEgPDwgIDMpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjRfUkswCQkoMSA8PCAgNCkJLyogQTogU1NDIFJlY2VpdmUgQ2xvY2sgMCAqLworI2RlZmluZSBBVDkxX1BCNF9NQ0RBMgkJKDEgPDwgIDQpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQjVfUkYwCQkoMSA8PCAgNSkJLyogQTogU1NDIFJlY2VpdmUgRnJhbWUgU3luYyAwICovCisjZGVmaW5lIEFUOTFfUEI1X01DREEzCQkoMSA8PCAgNSkJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBBIERhdGEgMyAqLworI2RlZmluZSBBVDkxX1BCNl9URjEJCSgxIDw8ICA2KQkvKiBBOiBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAxICovCisjZGVmaW5lIEFUOTFfUEI2X1RJT0EzCQkoMSA8PCAgNikJLyogQjogVEMgSS9PIExpbmUgQSAzICovCisjZGVmaW5lIEFUOTFfUEI3X1RLMQkJKDEgPDwgIDcpCS8qIEE6IFNTQyBUcmFuc21pdCBDbG9jayAxICovCisjZGVmaW5lIEFUOTFfUEI3X1RJT0IzCQkoMSA8PCAgNykJLyogQjogVEMgSS9PIExpbmUgQiAzICovCisjZGVmaW5lIEFUOTFfUEI4X1REMQkJKDEgPDwgIDgpCS8qIEE6IFNTQyBUcmFuc21pdCBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjhfVElPQTQJCSgxIDw8ICA4KQkvKiBCOiBUQyBJL08gTGluZSBBIDQgKi8KKyNkZWZpbmUgQVQ5MV9QQjlfUkQxCQkoMSA8PCAgOSkJLyogQTogU1NDIFJlY2VpdmUgRGF0YSAxICovCisjZGVmaW5lIEFUOTFfUEI5X1RJT0I0CQkoMSA8PCAgOSkJLyogQjogVEMgSS9PIExpbmUgQiA0ICovCisjZGVmaW5lIEFUOTFfUEIxMF9SSzEJCSgxIDw8IDEwKQkvKiBBOiBTU0MgUmVjZWl2ZSBDbG9jayAxICovCisjZGVmaW5lIEFUOTFfUEIxMF9USU9BNQkJKDEgPDwgMTApCS8qIEI6IFRDIEkvTyBMaW5lIEEgNSAqLworI2RlZmluZSBBVDkxX1BCMTFfUkYxCQkoMSA8PCAxMSkJLyogQTogU1NDIFJlY2VpdmUgRnJhbWUgU3luYyAxICovCisjZGVmaW5lIEFUOTFfUEIxMV9USU9CNQkJKDEgPDwgMTEpCS8qIEI6IFRDIEkvTyBMaW5lIEIgNSAqLworI2RlZmluZSBBVDkxX1BCMTJfVEYyCQkoMSA8PCAxMikJLyogQTogU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgMiAqLworI2RlZmluZSBBVDkxX1BCMTJfRVRYMgkJKDEgPDwgMTIpCS8qIEI6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BCMTNfVEsyCQkoMSA8PCAxMykJLyogQTogU1NDIFRyYW5zbWl0IENsb2NrIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjEzX0VUWDMJCSgxIDw8IDEzKQkvKiBCOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDMgKi8KKyNkZWZpbmUgQVQ5MV9QQjE0X1REMgkJKDEgPDwgMTQpCS8qIEE6IFNTQyBUcmFuc21pdCBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQjE0X0VUWEVSCQkoMSA8PCAxNCkJLyogQjogRXRoZXJuZXQgVHJhbnNtaXQgQ29kaW5nIEVycm9yICovCisjZGVmaW5lIEFUOTFfUEIxNV9SRDIJCSgxIDw8IDE1KQkvKiBBOiBTU0MgUmVjZWl2ZSBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQjE1X0VSWDIJCSgxIDw8IDE1KQkvKiBCOiBFdGhlcm5ldCBSZWNlaXZlIERhdGEgMiAqLworI2RlZmluZSBBVDkxX1BCMTZfUksyCQkoMSA8PCAxNikJLyogQTogU1NDIFJlY2VpdmUgQ2xvY2sgMiAqLworI2RlZmluZSBBVDkxX1BCMTZfRVJYMwkJKDEgPDwgMTYpCS8qIEI6IEV0aGVybmV0IFJlY2VpdmUgRGF0YSAzICovCisjZGVmaW5lIEFUOTFfUEIxN19SRjIJCSgxIDw8IDE3KQkvKiBBOiBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQjE3X0VSWERWCQkoMSA8PCAxNykJLyogQjogRXRoZXJuZXQgUmVjZWl2ZSBEYXRhIFZhbGlkICovCisjZGVmaW5lIEFUOTFfUEIxOF9SSTEJCSgxIDw8IDE4KQkvKiBBOiBVU0FSVCBSaW5nIEluZGljYXRvciAxICovCisjZGVmaW5lIEFUOTFfUEIxOF9FQ09MCQkoMSA8PCAxOCkJLyogQjogRXRoZXJuZXQgQ29sbGlzaW9uIERldGVjdGVkICovCisjZGVmaW5lIEFUOTFfUEIxOV9EVFIxCQkoMSA8PCAxOSkJLyogQTogVVNBUlQgRGF0YSBUZXJtaW5hbCBSZWFkeSAxICovCisjZGVmaW5lIEFUOTFfUEIxOV9FUlhDSwkJKDEgPDwgMTkpCS8qIEI6IEV0aGVybmV0IFJlY2VpdmUgQ2xvY2sgKi8KKyNkZWZpbmUgQVQ5MV9QQjIwX1RYRDEJCSgxIDw8IDIwKQkvKiBBOiBVU0FSVCBUcmFuc21pdCBEYXRhIDEgKi8KKyNkZWZpbmUgQVQ5MV9QQjIxX1JYRDEJCSgxIDw8IDIxKQkvKiBBOiBVU0FSVCBSZWNlaXZlIERhdGEgMSAqLworI2RlZmluZSBBVDkxX1BCMjJfU0NLMQkJKDEgPDwgMjIpCS8qIEE6IFVTQVJUIFNlcmlhbCBDbG9jayAxICovCisjZGVmaW5lIEFUOTFfUEIyM19EQ0QxCQkoMSA8PCAyMykJLyogQTogVVNBUlQgRGF0YSBDYXJyaWVyIERldGVjdCAxICovCisjZGVmaW5lIEFUOTFfUEIyNF9DVFMxCQkoMSA8PCAyNCkJLyogQTogVVNBUlQgQ2xlYXIgVG8gU2VuZCAxICovCisjZGVmaW5lIEFUOTFfUEIyNV9EU1IxCQkoMSA8PCAyNSkJLyogQTogVVNBUlQgRGF0YSBTZXQgUmVhZHkgMSAqLworI2RlZmluZSBBVDkxX1BCMjVfRUYxMDAJCSgxIDw8IDI1KQkvKiBCOiBFdGhlcm5ldCBGb3JjZSAxMDAgTWJpdCAqLworI2RlZmluZSBBVDkxX1BCMjZfUlRTMQkJKDEgPDwgMjYpCS8qIEE6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMSAqLworI2RlZmluZSBBVDkxX1BCMjdfUENLMAkJKDEgPDwgMjcpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDAgKi8KKyNkZWZpbmUgQVQ5MV9QQjI4X0ZJUQkJKDEgPDwgMjgpCS8qIEE6IEZhc3QgSW50ZXJydXB0ICovCisjZGVmaW5lIEFUOTFfUEIyOV9JUlEwCQkoMSA8PCAyOSkJLyogQTogRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8KKworI2RlZmluZSBBVDkxX1BDMF9CRkNLCQkoMSA8PCAgMCkJLyogQTogQnVyc3QgRmxhc2ggQ2xvY2sgKi8KKyNkZWZpbmUgQVQ5MV9QQzFfQkZSRFlfU01PRQkoMSA8PCAgMSkJLyogQTogQnVyc3QgRmxhc2ggUmVhZHkgLyBTbWFydE1lZGlhIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9QQzJfQkZBVkQJCSgxIDw8ICAyKQkvKiBBOiBCdXJzdCBGbGFzaCBBZGRyZXNzIFZhbGlkICovCisjZGVmaW5lIEFUOTFfUEMzX0JGQkFBX1NNV0UJKDEgPDwgIDMpCS8qIEE6IEJ1cnN0IEZsYXNoIEFkZHJlc3MgQWR2YW5jZSAvIFNtYXJ0TWVkaWEgV3JpdGUgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUEM0X0JGT0UJCSgxIDw8ICA0KQkvKiBBOiBCdXJzdCBGbGFzaCBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUEM1X0JGV0UJCSgxIDw8ICA1KQkvKiBBOiBCdXJzdCBGbGFzaCBXcml0ZSBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9QQzZfTldBSVQJCSgxIDw8ICA2KQkvKiBBOiBTTUMgV2FpdCBTaWduYWwgKi8KKyNkZWZpbmUgQVQ5MV9QQzdfQTIzCQkoMSA8PCAgNykJLyogQTogQWRkcmVzcyBCdXMgMjMgKi8KKyNkZWZpbmUgQVQ5MV9QQzhfQTI0CQkoMSA8PCAgOCkJLyogQTogQWRkcmVzcyBCdXMgMjQgKi8KKyNkZWZpbmUgQVQ5MV9QQzlfQTI1X0NGUk5XCSgxIDw8ICA5KQkvKiBBOiBBZGRyZXNzIEJ1cyAyNSAvIENvbXBhY3QgRmxhc2ggUmVhZCBOb3QgV3JpdGUgKi8KKyNkZWZpbmUgQVQ5MV9QQzEwX05DUzRfQ0ZDUwkoMSA8PCAxMCkJLyogQTogU01DIENoaXAgU2VsZWN0IDQgLyBDb21wYWN0IEZsYXNoIENoaXAgU2VsZWN0ICovCisjZGVmaW5lIEFUOTFfUEMxMV9OQ1M1X0NGQ0UxCSgxIDw8IDExKQkvKiBBOiBTTUMgQ2hpcCBTZWxlY3QgNSAvIENvbXBhY3QgRmxhc2ggQ2hpcCBFbmFibGUgMSAqLworI2RlZmluZSBBVDkxX1BDMTJfTkNTNl9DRkNFMgkoMSA8PCAxMikJLyogQTogU01DIENoaXAgU2VsZWN0IDYgLyBDb21wYWN0IEZsYXNoIENoaXAgRW5hYmxlIDIgKi8KKyNkZWZpbmUgQVQ5MV9QQzEzX05DUzcJCSgxIDw8IDEzKQkvKiBBOiBDaGlwIFNlbGVjdCA3ICovCisKKyNkZWZpbmUgQVQ5MV9QRDBfRVRYMAkJKDEgPDwgIDApCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BEMV9FVFgxCQkoMSA8PCAgMSkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAxICovCisjZGVmaW5lIEFUOTFfUEQyX0VUWDIJCSgxIDw8ICAyKQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QRDNfRVRYMwkJKDEgPDwgIDMpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMyAqLworI2RlZmluZSBBVDkxX1BENF9FVFhFTgkJKDEgPDwgIDQpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IEVuYWJsZSAqLworI2RlZmluZSBBVDkxX1BENV9FVFhFUgkJKDEgPDwgIDUpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IENvZGluZyBFcnJvciAqLworI2RlZmluZSBBVDkxX1BENl9EVFhECQkoMSA8PCAgNikJLyogQTogREJHVSBUcmFuc21pdCBEYXRhICovCisjZGVmaW5lIEFUOTFfUEQ3X1BDSzAJCSgxIDw8ICA3KQkvKiBBOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovCisjZGVmaW5lIEFUOTFfUEQ3X1RTWU5DCQkoMSA8PCAgNykJLyogQjogRVRNIFRyYWNlIFN5bmNocm9uaXphdGlvbiBTaWduYWwgKi8KKyNkZWZpbmUgQVQ5MV9QRDhfUENLMQkJKDEgPDwgIDgpCS8qIEE6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDhfVENMSwkJKDEgPDwgIDgpCS8qIEI6IEVUTSBUcmFjZSBDbG9jayAqLworI2RlZmluZSBBVDkxX1BEOV9QQ0syCQkoMSA8PCAgOSkJLyogQTogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLworI2RlZmluZSBBVDkxX1BEOV9UUFMwCQkoMSA8PCAgOSkJLyogQjogRVRNIFRyYWNlIEFSTSBQaXBlbGluZSBTdGF0dXMgMCAqLworI2RlZmluZSBBVDkxX1BEMTBfUENLMwkJKDEgPDwgMTApCS8qIEE6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8KKyNkZWZpbmUgQVQ5MV9QRDEwX1RQUzEJCSgxIDw8IDEwKQkvKiBCOiBFVE0gVHJhY2UgQVJNIFBpcGVsaW5lIFN0YXR1cyAxICovCisjZGVmaW5lIEFUOTFfUEQxMV9UUFMyCQkoMSA8PCAxMSkJLyogQjogRVRNIFRyYWNlIEFSTSBQaXBlbGluZSBTdGF0dXMgMiAqLworI2RlZmluZSBBVDkxX1BEMTJfVFBLMAkJKDEgPDwgMTIpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAwICovCisjZGVmaW5lIEFUOTFfUEQxM19UUEsxCQkoMSA8PCAxMykJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDE0X1RQSzIJCSgxIDw8IDE0KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMiAqLworI2RlZmluZSBBVDkxX1BEMTVfVEQwCQkoMSA8PCAxNSkJLyogQTogU1NDIFRyYW5zbWl0IERhdGEgMCAqLworI2RlZmluZSBBVDkxX1BEMTVfVFBLMwkJKDEgPDwgMTUpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAzICovCisjZGVmaW5lIEFUOTFfUEQxNl9URDEJCSgxIDw8IDE2KQkvKiBBOiBTU0MgVHJhbnNtaXQgRGF0YSAxICovCisjZGVmaW5lIEFUOTFfUEQxNl9UUEs0CQkoMSA8PCAxNikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDQgKi8KKyNkZWZpbmUgQVQ5MV9QRDE3X1REMgkJKDEgPDwgMTcpCS8qIEE6IFNTQyBUcmFuc21pdCBEYXRhIDIgKi8KKyNkZWZpbmUgQVQ5MV9QRDE3X1RQSzUJCSgxIDw8IDE3KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgNSAqLworI2RlZmluZSBBVDkxX1BEMThfTlBDUzEJCSgxIDw8IDE4KQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovCisjZGVmaW5lIEFUOTFfUEQxOF9UUEs2CQkoMSA8PCAxOCkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDYgKi8KKyNkZWZpbmUgQVQ5MV9QRDE5X05QQ1MyCQkoMSA8PCAxOSkJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLworI2RlZmluZSBBVDkxX1BEMTlfVFBLNwkJKDEgPDwgMTkpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCA3ICovCisjZGVmaW5lIEFUOTFfUEQyMF9OUENTMwkJKDEgPDwgMjApCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8KKyNkZWZpbmUgQVQ5MV9QRDIwX1RQSzgJCSgxIDw8IDIwKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgOCAqLworI2RlZmluZSBBVDkxX1BEMjFfUlRTMAkJKDEgPDwgMjEpICAJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAwICovCisjZGVmaW5lIEFUOTFfUEQyMV9UUEs5CQkoMSA8PCAyMSkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDkgKi8KKyNkZWZpbmUgQVQ5MV9QRDIyX1JUUzEJCSgxIDw8IDIyKQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDIyX1RQSzEwCQkoMSA8PCAyMikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDEwICovCisjZGVmaW5lIEFUOTFfUEQyM19SVFMyCQkoMSA8PCAyMykJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAyICovCisjZGVmaW5lIEFUOTFfUEQyM19UUEsxMQkJKDEgPDwgMjMpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxMSAqLworI2RlZmluZSBBVDkxX1BEMjRfUlRTMwkJKDEgPDwgMjQpCS8qIEE6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMyAqLworI2RlZmluZSBBVDkxX1BEMjRfVFBLMTIJCSgxIDw8IDI0KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTIgKi8KKyNkZWZpbmUgQVQ5MV9QRDI1X0RUUjEJCSgxIDw8IDI1KQkvKiBBOiBVU0FSVCBEYXRhIFRlcm1pbmFsIFJlYWR5IDEgKi8KKyNkZWZpbmUgQVQ5MV9QRDI1X1RQSzEzCQkoMSA8PCAyNSkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDEzICovCisjZGVmaW5lIEFUOTFfUEQyNl9UUEsxNAkJKDEgPDwgMjYpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxNCAqLworI2RlZmluZSBBVDkxX1BEMjdfVFBLMTUJCSgxIDw8IDI3KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfc3lzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZmZkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9zeXMuaApAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9zeXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKKyAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQorICoKKyAqIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCisgKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVDkxUk05MjAwX1NZU19ICisjZGVmaW5lIEFUOTFSTTkyMDBfU1lTX0gKKworLyoKKyAqIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyLgorICovCisjZGVmaW5lIEFUOTFfQUlDCTB4MDAwCisKKyNkZWZpbmUgQVQ5MV9BSUNfU01SKG4pCQkoQVQ5MV9BSUMgKyAoKG4pICogNCkpCS8qIFNvdXJjZSBNb2RlIFJlZ2lzdGVycyAwLTMxICovCisjZGVmaW5lCQlBVDkxX0FJQ19QUklPUgkJKDcgPDwgMCkJCS8qIFByaW9yaXR5IExldmVsICovCisjZGVmaW5lCQlBVDkxX0FJQ19TUkNUWVBFCSgzIDw8IDUpCQkvKiBJbnRlcnJ1cHQgU291cmNlIFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX0xPVwkJKDAgPDwgNSkKKyNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX0ZBTExJTkcJKDEgPDwgNSkKKyNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX0hJR0gJCSgyIDw8IDUpCisjZGVmaW5lCQkJQVQ5MV9BSUNfU1JDVFlQRV9SSVNJTkcJCSgzIDw8IDUpCisKKyNkZWZpbmUgQVQ5MV9BSUNfU1ZSKG4pCQkoQVQ5MV9BSUMgKyAweDgwICsgKChuKSAqIDQpKQkvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVycyAwLTMxICovCisjZGVmaW5lIEFUOTFfQUlDX0lWUgkJKEFUOTFfQUlDICsgMHgxMDApCS8qIEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfRlZSCQkoQVQ5MV9BSUMgKyAweDEwNCkJLyogRmFzdCBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0lTUgkJKEFUOTFfQUlDICsgMHgxMDgpCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfQUlDX0lSUUlECQkoMHgxZiA8PCAwKQkJLyogQ3VycmVudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworCisjZGVmaW5lIEFUOTFfQUlDX0lQUgkJKEFUOTFfQUlDICsgMHgxMGMpCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0lNUgkJKEFUOTFfQUlDICsgMHgxMTApCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0NJU1IJCShBVDkxX0FJQyArIDB4MTE0KQkvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfQUlDX05GSVEJCSgxIDw8IDApCQkvKiBuRklRIFN0YXR1cyAqLworI2RlZmluZQkJQVQ5MV9BSUNfTklSUQkJKDEgPDwgMSkJCS8qIG5JUlEgU3RhdHVzICovCisKKyNkZWZpbmUgQVQ5MV9BSUNfSUVDUgkJKEFUOTFfQUlDICsgMHgxMjApCS8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FJQ19JRENSCQkoQVQ5MV9BSUMgKyAweDEyNCkJLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FJQ19JQ0NSCQkoQVQ5MV9BSUMgKyAweDEyOCkJLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9BSUNfSVNDUgkJKEFUOTFfQUlDICsgMHgxMmMpCS8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FJQ19FT0lDUgkJKEFUOTFfQUlDICsgMHgxMzApCS8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FJQ19TUFUJCShBVDkxX0FJQyArIDB4MTM0KQkvKiBTcHVyaW91cyBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQUlDX0RDUgkJKEFUOTFfQUlDICsgMHgxMzgpCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfQUlDX0RDUl9QUk9UCSgxIDw8IDApCQkvKiBQcm90ZWN0aW9uIE1vZGUgKi8KKyNkZWZpbmUJCUFUOTFfQUlDX0RDUl9HTVNLCSgxIDw8IDEpCQkvKiBHZW5lcmFsIE1hc2sgKi8KKworCisvKgorICogRGVidWcgVW5pdC4KKyAqLworI2RlZmluZSBBVDkxX0RCR1UJMHgyMDAKKworI2RlZmluZSBBVDkxX0RCR1VfQ1IJCShBVDkxX0RCR1UgKyAweDAwKQkvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfREJHVV9NUgkJKEFUOTFfREJHVSArIDB4MDQpCS8qIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX0lFUgkJKEFUOTFfREJHVSArIDB4MDgpCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfREJHVV9UWFJEWQkJKDEgPDwgMSkJCS8qIFRyYW5zbWl0dGVyIFJlYWR5ICovCisjZGVmaW5lCQlBVDkxX0RCR1VfVFhFTVBUWQkoMSA8PCA5KQkJLyogVHJhbnNtaXR0ZXIgRW1wdHkgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX0lEUgkJKEFUOTFfREJHVSArIDB4MGMpCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfREJHVV9JTVIJCShBVDkxX0RCR1UgKyAweDEwKQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0RCR1VfU1IJCShBVDkxX0RCR1UgKyAweDE0KQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX1JIUgkJKEFUOTFfREJHVSArIDB4MTgpCS8qIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX1RIUgkJKEFUOTFfREJHVSArIDB4MWMpCS8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9EQkdVX0JSR1IJCShBVDkxX0RCR1UgKyAweDIwKQkvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfREJHVV9DSURSCQkoQVQ5MV9EQkdVICsgMHg0MCkJLyogQ2hpcCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0RCR1VfRVhJRAkJKEFUOTFfREJHVSArIDB4NDQpCS8qIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyICovCisKKworLyoKKyAqIFBJTyBDb250cm9sbGVycy4KKyAqLworI2RlZmluZSBBVDkxX1BJT0EJMHg0MDAKKyNkZWZpbmUgQVQ5MV9QSU9CCTB4NjAwCisjZGVmaW5lIEFUOTFfUElPQwkweDgwMAorI2RlZmluZSBBVDkxX1BJT0QJMHhhMDAKKworI2RlZmluZSBQSU9fUEVSCQkweDAwCS8qIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fUERSCQkweDA0CS8qIERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX1BTUgkJMHgwOAkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX09FUgkJMHgxMAkvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19PRFIJCTB4MTQJLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX09TUgkJMHgxOAkvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19JRkVSCTB4MjAJLyogR2xpdGNoIElucHV0IEZpbHRlciBFbmFibGUgKi8KKyNkZWZpbmUgUElPX0lGRFIJMHgyNAkvKiBHbGl0Y2ggSW5wdXQgRmlsdGVyIERpc2FibGUgKi8KKyNkZWZpbmUgUElPX0lGU1IJMHgyOAkvKiBHbGl0Y2ggSW5wdXQgRmlsdGVyIFN0YXR1cyAqLworI2RlZmluZSBQSU9fU09EUgkweDMwCS8qIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fQ09EUgkweDM0CS8qIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19PRFNSCTB4MzgJLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19QRFNSCTB4M2MJLyogUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19JRVIJCTB4NDAJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fSURSCQkweDQ0CS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19JTVIJCTB4NDgJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX0lTUgkJMHg0YwkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19NREVSCTB4NTAJLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fTUREUgkweDU0CS8qIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19NRFNSCTB4NTgJLyogTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fUFVEUgkweDYwCS8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fUFVFUgkweDY0CS8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19QVVNSCTB4NjgJLyogUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX0FTUgkJMHg3MAkvKiBQZXJpcGhlcmFsIEEgU2VsZWN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFBJT19CU1IJCTB4NzQJLyogUGVyaXBoZXJhbCBCIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fQUJTUgkweDc4CS8qIEFCIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fT1dFUgkweGEwCS8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElPX09XRFIJMHhhNAkvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBQSU9fT1dTUgkweGE4CS8qIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX1BJT19QKG4pCSgxIDw8IChuKSkKKworCisvKgorICogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyLgorICovCisjZGVmaW5lCUFUOTFfUE1DCTB4YzAwCisKKyNkZWZpbmUJQVQ5MV9QTUNfU0NFUgkJKEFUOTFfUE1DICsgMHgwMCkJLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1BNQ19TQ0RSCQkoQVQ5MV9QTUMgKyAweDA0KQkvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLworCisjZGVmaW5lCUFUOTFfUE1DX1NDU1IJCShBVDkxX1BNQyArIDB4MDgpCS8qIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1BDSwkJKDEgPDwgIDApCQkvKiBQcm9jZXNzb3IgQ2xvY2sgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1VEUAkJKDEgPDwgIDEpCQkvKiBVU0IgRGV2Y2ljZSBQb3J0IENsb2NrICovCisjZGVmaW5lCQlBVDkxX1BNQ19NQ0tVRFAJCSgxIDw8ICAyKQkJLyogVVNCIERldmljZSBQb3J0IE1hc3RlciBDbG9jayBBdXRvbWF0aWMgRGlzYWJsZSBvbiBTdXNwZW5kICovCisjZGVmaW5lCQlBVDkxX1BNQ19VSFAJCSgxIDw8ICA0KQkJLyogVVNCIEhvc3QgUG9ydCBDbG9jayAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLMAkJKDEgPDwgIDgpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMCAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLMQkJKDEgPDwgIDkpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMSAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLMgkJKDEgPDwgMTApCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMiAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLMwkJKDEgPDwgMTEpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMyAqLworCisjZGVmaW5lCUFUOTFfUE1DX1BDRVIJCShBVDkxX1BNQyArIDB4MTApCS8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUE1DX1BDRFIJCShBVDkxX1BNQyArIDB4MTQpCS8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1BNQ19QQ1NSCQkoQVQ5MV9QTUMgKyAweDE4KQkvKiBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lCUFUOTFfQ0tHUl9NT1IJCShBVDkxX1BNQyArIDB4MjApCS8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9QTUNfTU9TQ0VOCQkoMSAgICA8PCAwKQkJLyogTWFpbiBPc2NpbGxhdG9yIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9QTUNfT1NDT1VOVAkoMHhmZiA8PCA4KQkJLyogTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUgKi8KKworI2RlZmluZQlBVDkxX0NLR1JfTUNGUgkJKEFUOTFfUE1DICsgMHgyNCkJLyogTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX01BSU5GCQkoMHhmZmZmIDw8ICAwKQkJLyogTWFpbiBDbG9jayBGcmVxdWVuY3kgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX01BSU5SRFkJKDEJPDwgMTYpCQkvKiBNYWluIENsb2NrIFJlYWR5ICovCisKKyNkZWZpbmUJQVQ5MV9DS0dSX1BMTEFSCQkoQVQ5MV9QTUMgKyAweDI4KQkvKiBQTEwgQSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX0NLR1JfUExMQlIJCShBVDkxX1BNQyArIDB4MmMpCS8qIFBMTCBCIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1BNQ19ESVYJCSgweGZmICA8PCAgMCkJCS8qIERpdmlkZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1BMTENPVU5UCSgweDNmICA8PCAgOCkJCS8qIFBMTCBDb3VudGVyICovCisjZGVmaW5lCQlBVDkxX1BNQ19PVVQJCSgzICAgICA8PCAxNCkJCS8qIFBMTCBDbG9jayBGcmVxdWVuY3kgUmFuZ2UgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX01VTAkJKDB4N2ZmIDw8IDE2KQkJLyogUExMIE11bHRpcGxpZXIgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1VTQjk2TQkJKDEgICAgIDw8IDI4KQkJLyogRGl2aWRlciBieSAyIEVuYWJsZSAoUExMQiBvbmx5KSAqLworCisjZGVmaW5lCUFUOTFfUE1DX01DS1IJCShBVDkxX1BNQyArIDB4MzApCS8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9QTUNfQ1NTCQkoMyA8PCAgMCkJCS8qIE1hc3RlciBDbG9jayBTZWxlY3Rpb24gKi8KKyNkZWZpbmUJCQlBVDkxX1BNQ19DU1NfU0xPVwkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX1BNQ19DU1NfTUFJTgkJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX1BNQ19DU1NfUExMQQkJKDIgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX1BNQ19DU1NfUExMQgkJKDMgPDwgMCkKKyNkZWZpbmUJCUFUOTFfUE1DX1BSRVMJCSg3IDw8ICAyKQkJLyogTWFzdGVyIENsb2NrIFByZXNjYWxlciAqLworI2RlZmluZSAJCUFUOTFfUE1DX1BSRVNfMQkJCSgwIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU18yCQkJKDEgPDwgMikKKyNkZWZpbmUJCQlBVDkxX1BNQ19QUkVTXzQJCQkoMiA8PCAyKQorI2RlZmluZQkJCUFUOTFfUE1DX1BSRVNfOAkJCSgzIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU18xNgkJKDQgPDwgMikKKyNkZWZpbmUJCQlBVDkxX1BNQ19QUkVTXzMyCQkoNSA8PCAyKQorI2RlZmluZQkJCUFUOTFfUE1DX1BSRVNfNjQJCSg2IDw8IDIpCisjZGVmaW5lCQlBVDkxX1BNQ19NRElWCQkoMyA8PCAgOCkJCS8qIE1hc3RlciBDbG9jayBEaXZpc2lvbiAqLworI2RlZmluZQkJCUFUOTFfUE1DX01ESVZfMQkJCSgwIDw8IDgpCisjZGVmaW5lCQkJQVQ5MV9QTUNfTURJVl8yCQkJKDEgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1BNQ19NRElWXzMJCQkoMiA8PCA4KQorI2RlZmluZQkJCUFUOTFfUE1DX01ESVZfNAkJCSgzIDw8IDgpCisKKyNkZWZpbmUJQVQ5MV9QTUNfUENLUihuKQkoQVQ5MV9QTUMgKyAweDQwICsgKChuKSAqIDQpKQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMC0zIFJlZ2lzdGVycyAqLworI2RlZmluZQlBVDkxX1BNQ19JRVIJCShBVDkxX1BNQyArIDB4NjApCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9QTUNfSURSCQkoQVQ5MV9QTUMgKyAweDY0KQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1BNQ19TUgkJKEFUOTFfUE1DICsgMHg2OCkJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1BNQ19NT1NDUwkJKDEgPDwgIDApCQkvKiBNT1NDUyBGbGFnICovCisjZGVmaW5lCQlBVDkxX1BNQ19MT0NLQQkJKDEgPDwgIDEpCQkvKiBQTExBIExvY2sgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX0xPQ0tCCQkoMSA8PCAgMikJCS8qIFBMTEIgTG9jayAqLworI2RlZmluZQkJQVQ5MV9QTUNfTUNLUkRZCQkoMSA8PCAgMykJCS8qIE1hc3RlciBDbG9jayAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLMFJEWQkoMSA8PCAgOCkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAwICovCisjZGVmaW5lCQlBVDkxX1BNQ19QQ0sxUkRZCSgxIDw8ICA5KQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDEgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1BDSzJSRFkJKDEgPDwgMTApCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMiAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLM1JEWQkoMSA8PCAxMSkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAzICovCisjZGVmaW5lCUFUOTFfUE1DX0lNUgkJKEFUOTFfUE1DICsgMHg2YykJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKworCisvKgorICogU3lzdGVtIFRpbWVyLgorICovCisjZGVmaW5lCUFUOTFfU1QJCTB4ZDAwCisKKyNkZWZpbmUJQVQ5MV9TVF9DUgkJKEFUOTFfU1QgKyAweDAwKQkvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIAlBVDkxX1NUX1dEUlNUCQkoMSA8PCAwKQkJLyogV2F0Y2hkb2cgVGltZXIgUmVzdGFydCAqLworI2RlZmluZQlBVDkxX1NUX1BJTVIJCShBVDkxX1NUICsgMHgwNCkJLyogUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU1RfUElWCQkoMHhmZmZmIDw8ICAwKQkJLyogUGVyaW9kIEludGVydmFsIFZhbHVlICovCisjZGVmaW5lCUFUOTFfU1RfV0RNUgkJKEFUOTFfU1QgKyAweDA4KQkvKiBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NUX1dEVgkJKDB4ZmZmZiA8PCAgMCkJCS8qIFdhdGNoZG9nIENvdW50ZXIgVmFsdWUgKi8KKyNkZWZpbmUJCUFUOTFfU1RfUlNURU4JCSgxCTw8IDE2KQkJLyogUmVzZXQgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX1NUX0VYVEVOCQkoMQk8PCAxNykJCS8qIEV4dGVybmFsIFNpZ25hbCBBc3NlcnRpb24gRW5hYmxlICovCisjZGVmaW5lCUFUOTFfU1RfUlRNUgkJKEFUOTFfU1QgKyAweDBjKQkvKiBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9TVF9SVFBSRVMJCSgweGZmZmYgPDwgIDApCQkvKiBSZWFsLXRpbWUgUHJlc2NhbGFyIFZhbHVlICovCisjZGVmaW5lCUFUOTFfU1RfU1IJCShBVDkxX1NUICsgMHgxMCkJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NUX1BJVFMJCSgxIDw8IDApCQkvKiBQZXJpb2QgSW50ZXJ2YWwgVGltZXIgU3RhdHVzICovCisjZGVmaW5lCQlBVDkxX1NUX1dET1ZGCQkoMSA8PCAxKSAJCS8qIFdhdGNoZG9nIE92ZXJmbG93ICovCisjZGVmaW5lCQlBVDkxX1NUX1JUVElOQwkJKDEgPDwgMikgCQkvKiBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50ICovCisjZGVmaW5lCQlBVDkxX1NUX0FMTVMJCSgxIDw8IDMpIAkJLyogQWxhcm0gU3RhdHVzICovCisjZGVmaW5lCUFUOTFfU1RfSUVSCQkoQVQ5MV9TVCArIDB4MTQpCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9TVF9JRFIJCShBVDkxX1NUICsgMHgxOCkJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9TVF9JTVIJCShBVDkxX1NUICsgMHgxYykJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9TVF9SVEFSCQkoQVQ5MV9TVCArIDB4MjApCS8qIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9TVF9BTE1WCQkoMHhmZmZmZiA8PCAwKQkJLyogQWxhcm0gVmFsdWUgKi8KKyNkZWZpbmUJQVQ5MV9TVF9DUlRSCQkoQVQ5MV9TVCArIDB4MjQpCS8qIEN1cnJlbnQgUmVhbC10aW1lIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NUX0NSVFYJCSgweGZmZmZmIDw8IDApCQkvKiBDdXJyZW50IFJlYWwtVGltZSBWYWx1ZSAqLworCisKKy8qCisgKiBSZWFsLXRpbWUgQ2xvY2suCisgKi8KKyNkZWZpbmUJQVQ5MV9SVEMJMHhlMDAKKworI2RlZmluZQlBVDkxX1JUQ19DUgkJKEFUOTFfUlRDICsgMHgwMCkJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfVVBEVElNCQkoMSA8PCAgMCkJCS8qIFVwZGF0ZSBSZXF1ZXN0IFRpbWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX1VQRENBTAkJKDEgPDwgIDEpCQkvKiBVcGRhdGUgUmVxdWVzdCBDYWxlbmRhciBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfVElNRVZTRUwJKDMgPDwgIDgpCQkvKiBUaW1lIEV2ZW50IFNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFfUlRDX1RJTUVWU0VMX01JTlVURQkoMCA8PCA4KQorI2RlZmluZSAJCUFUOTFfUlRDX1RJTUVWU0VMX0hPVVIJCSgxIDw8IDgpCisjZGVmaW5lIAkJQVQ5MV9SVENfVElNRVZTRUxfREFZMjQJCSgyIDw8IDgpCisjZGVmaW5lIAkJQVQ5MV9SVENfVElNRVZTRUxfREFZMTIJCSgzIDw8IDgpCisjZGVmaW5lCQlBVDkxX1JUQ19DQUxFVlNFTAkoMyA8PCAxNikJCS8qIENhbGVuZGFyIEV2ZW50IFNlbGVjdGlvbiAqLworI2RlZmluZSAJCUFUOTFfUlRDX0NBTEVWU0VMX1dFRUsJCSgwIDw8IDE2KQorI2RlZmluZSAJCUFUOTFfUlRDX0NBTEVWU0VMX01PTlRICQkoMSA8PCAxNikKKyNkZWZpbmUgCQlBVDkxX1JUQ19DQUxFVlNFTF9ZRUFSCQkoMiA8PCAxNikKKworI2RlZmluZQlBVDkxX1JUQ19NUgkJKEFUOTFfUlRDICsgMHgwNCkJLyogTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSAJQVQ5MV9SVENfSFJNT0QJCSgxIDw8ICAwKQkJLyogMTIvMjQgSG91ciBNb2RlICovCisKKyNkZWZpbmUJQVQ5MV9SVENfVElNUgkJKEFUOTFfUlRDICsgMHgwOCkJLyogVGltZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfU0VDCQkoMHg3ZiA8PCAgMCkJCS8qIEN1cnJlbnQgU2Vjb25kICovCisjZGVmaW5lCQlBVDkxX1JUQ19NSU4JCSgweDdmIDw8ICA4KQkJLyogQ3VycmVudCBNaW51dGUgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX0hPVVIgCQkoMHgzZiA8PCAxNikJCS8qIEN1cnJlbnQgSG91ciAqLworI2RlZmluZQkJQXQ5MV9SVENfQU1QTQkJKDEgICAgPDwgMjIpCQkvKiBBbnRlIE1lcmlkaWVtIFBvc3QgTWVyaWRpZW0gSW5kaWNhdG9yICovCisKKyNkZWZpbmUJQVQ5MV9SVENfQ0FMUgkJKEFUOTFfUlRDICsgMHgwYykJLyogQ2FsZW5kYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfUlRDX0NFTlQJCSgweDdmIDw8ICAwKQkJLyogQ3VycmVudCBDZW50dXJ5ICovCisjZGVmaW5lCQlBVDkxX1JUQ19ZRUFSCQkoMHhmZiA8PCAgOCkJCS8qIEN1cnJlbnQgWWVhciAqLworI2RlZmluZQkJQVQ5MV9SVENfTU9OVEgJCSgweDFmIDw8IDE2KQkJLyogQ3VycmVudCBNb250aCAqLworI2RlZmluZQkJQVQ5MV9SVENfREFZCQkoNyAgICA8PCAyMSkJCS8qIEN1cnJlbnQgRGF5ICovCisjZGVmaW5lCQlBVDkxX1JUQ19EQVRFCQkoMHgzZiA8PCAyNCkJCS8qIEN1cnJlbnQgRGF0ZSAqLworCisjZGVmaW5lCUFUOTFfUlRDX1RJTUFMUgkJKEFUOTFfUlRDICsgMHgxMCkJLyogVGltZSBBbGFybSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfU0VDRU4JCSgxIDw8ICA3KQkJLyogU2Vjb25kIEFsYXJtIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9SVENfTUlORU4JCSgxIDw8IDE1KQkJLyogTWludXRlIEFsYXJtIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9SVENfSE9VUkVOCQkoMSA8PCAyMykJCS8qIEhvdXIgQWxhcm0gRW5hYmxlICovCisKKyNkZWZpbmUJQVQ5MV9SVENfQ0FMQUxSCQkoQVQ5MV9SVEMgKyAweDE0KQkvKiBDYWxlbmRhciBBbGFybSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9SVENfTVRIRU4JCSgxIDw8IDIzKQkJLyogTW9udGggQWxhcm0gRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX1JUQ19EQVRFRU4JCSgxIDw8IDMxKQkJLyogRGF0ZSBBbGFybSBFbmFibGUgKi8KKworI2RlZmluZQlBVDkxX1JUQ19TUgkJKEFUOTFfUlRDICsgMHgxOCkJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19BQ0tVUEQJCSgxIDw8ICAwKQkJLyogQWNrbm93bGVkZ2UgZm9yIFVwZGF0ZSAqLworI2RlZmluZQkJQVQ5MV9SVENfQUxBUk0JCSgxIDw8ICAxKQkJLyogQWxhcm0gRmxhZyAqLworI2RlZmluZQkJQVQ5MV9SVENfU0VDRVYJCSgxIDw8ICAyKQkJLyogU2Vjb25kIEV2ZW50ICovCisjZGVmaW5lCQlBVDkxX1JUQ19USU1FVgkJKDEgPDwgIDMpCQkvKiBUaW1lIEV2ZW50ICovCisjZGVmaW5lCQlBVDkxX1JUQ19DQUxFVgkJKDEgPDwgIDQpCQkvKiBDYWxlbmRhciBFdmVudCAqLworCisjZGVmaW5lCUFUOTFfUlRDX1NDQ1IJCShBVDkxX1JUQyArIDB4MWMpCS8qIFN0YXR1cyBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUlRDX0lFUgkJKEFUOTFfUlRDICsgMHgyMCkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1JUQ19JRFIJCShBVDkxX1JUQyArIDB4MjQpCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfUlRDX0lNUgkJKEFUOTFfUlRDICsgMHgyOCkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlBVDkxX1JUQ19WRVIJCShBVDkxX1JUQyArIDB4MmMpCS8qIFZhbGlkIEVudHJ5IFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1JUQ19OVlRJTQkJKDEgPDwgIDApCQkvKiBOb24gdmFsaWQgVGltZSAqLworI2RlZmluZQkJQVQ5MV9SVENfTlZDQUwJCSgxIDw8ICAxKQkJLyogTm9uIHZhbGlkIENhbGVuZGFyICovCisjZGVmaW5lCQlBVDkxX1JUQ19OVlRJTUFMUgkoMSA8PCAgMikJCS8qIE5vbiB2YWxpZCBUaW1lIEFsYXJtICovCisjZGVmaW5lCQlBVDkxX1JUQ19OVkNBTEFMUgkoMSA8PCAgMykJCS8qIE5vbiB2YWxpZCBDYWxlbmRhciBBbGFybSAqLworCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbGxlci4KKyAqLworI2RlZmluZSBBVDkxX01DCQkweGYwMAorCisjZGVmaW5lIEFUOTFfTUNfUkNSCQkoQVQ5MV9NQyArIDB4MDApCS8qIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNfUkNCCQkoMSA8PCAgMCkJCS8qIFJlbWFwIENvbW1hbmQgQml0ICovCisKKyNkZWZpbmUgQVQ5MV9NQ19BU1IJCShBVDkxX01DICsgMHgwNCkJLyogTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfTUNfQUFTUgkJKEFUOTFfTUMgKyAweDA4KQkvKiBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX01DX01QUgkJKEFUOTFfTUMgKyAweDBjKQkvKiBNQyBNYXN0ZXIgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKworLyogRXh0ZXJuYWwgQnVzIEludGVyZmFjZSAoRUJJKSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVQ5MV9FQklfQ1NBCQkoQVQ5MV9NQyArIDB4NjApCS8qIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRUJJX0NTMEEJCSgxIDw8IDApCQkvKiBDaGlwIFNlbGVjdCAwIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzBBX1NNQwkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzBBX0JGQwkJKDEgPDwgMCkKKyNkZWZpbmUJCUFUOTFfRUJJX0NTMUEJCSgxIDw8IDEpCQkvKiBDaGlwIFNlbGVjdCAxIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzFBX1NNQwkJKDAgPDwgMSkKKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKKyNkZWZpbmUJCUFUOTFfRUJJX0NTM0EJCSgxIDw8IDMpCQkvKiBDaGlwIFNlbGVjdCAyIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzNBX1NNQwkJKDAgPDwgMykKKyNkZWZpbmUJCQlBVDkxX0VCSV9DUzNBX1NNQ19TTUFSVE1FRElBCSgxIDw8IDMpCisjZGVmaW5lCQlBVDkxX0VCSV9DUzRBCQkoMSA8PCA0KQkJLyogQ2hpcCBTZWxlY3QgMyBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9FQklfQ1M0QV9TTUMJCSgwIDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9FQklfQ1M0QV9TTUNfQ09NUEFDVEZMQVNICSgxIDw8IDQpCisjZGVmaW5lIEFUOTFfRUJJX0NGR1IJCShBVDkxX01DICsgMHg2NCkJLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9FQklfREJQVUMJCSgxIDw8IDApCQkvKiBEYXRhIEJ1cyBQdWxsLVVwIENvbmZpZ3VyYXRpb24gKi8KKworLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIChTTUMpIHJlZ2lzdGVycyAqLworI2RlZmluZQlBVDkxX1NNQ19DU1IobikJCShBVDkxX01DICsgMHg3MCArICgobikgKiA0KSkvKiBTTUMgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU01DX05XUwkJKDB4N2YgPDwgIDApCQkvKiBOdW1iZXIgb2YgV2FpdCBTdGF0ZXMgKi8KKyNkZWZpbmUJCUFUOTFfU01DX1dTRU4JCSgxICAgIDw8ICA3KQkJLyogV2FpdCBTdGF0ZSBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfU01DX1RERgkJKDB4ZiAgPDwgIDgpCQkvKiBEYXRhIEZsb2F0IFRpbWUgKi8KKyNkZWZpbmUJCUFUOTFfU01DX0JBVAkJKDEgICAgPDwgMTIpCQkvKiBCeXRlIEFjY2VzcyBUeXBlICovCisjZGVmaW5lCQlBVDkxX1NNQ19EQlcJCSgzICAgIDw8IDEzKQkJLyogRGF0YSBCdXMgV2lkdGggKi8KKyNkZWZpbmUJCQlBVDkxX1NNQ19EQldfMTYJCSgxIDw8IDEzKQorI2RlZmluZQkJCUFUOTFfU01DX0RCV184CQkoMiA8PCAxMykKKyNkZWZpbmUJCUFUOTFfU01DX0RQUgkJKDEgPDwgMTUpCQkvKiBEYXRhIFJlYWQgUHJvdG9jb2wgKi8KKyNkZWZpbmUJCUFUOTFfU01DX0FDU1MJCSgzIDw8IDE2KQkJLyogQWRkcmVzcyB0byBDaGlwIFNlbGVjdCBTZXR1cCAqLworI2RlZmluZQkJCUFUOTFfU01DX0FDU1NfU1RECSgwIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfU01DX0FDU1NfMQkJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9TTUNfQUNTU18yCQkoMiA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX1NNQ19BQ1NTXzMJCSgzIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9TTUNfUldTRVRVUAkoNyA8PCAyNCkJCS8qIFJlYWQgJiBXcml0ZSBTaWduYWwgVGltZSBTZXR1cCAqLworI2RlZmluZQkJQVQ5MV9TTUNfUldIT0xECQkoNyA8PCAyOCkJCS8qIFJlYWQgJiBXcml0ZSBTaWduYWwgSG9sZCBUaW1lICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2JvYXJkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2JvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3ZDExMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBIUCBMYWJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiBUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvdW5kIGluIHBsYXRmb3JtX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSwKKyAqIGFuZCBkZXNjcmliaW5nIGJvYXJkLXNwZWNmaWMgZGF0YSBuZWVkZWQgYnkgZHJpdmVycy4gIEZvciBleGFtcGxlLAorICogd2hpY2ggcGluIGlzIHVzZWQgZm9yIGEgZ2l2ZW4gR1BJTyByb2xlLgorICoKKyAqIEluIDIuNiwgZHJpdmVycyBzaG91bGQgc3Ryb25nbHkgYXZvaWQgYm9hcmQtc3BlY2lmaWMga25vd2xlZGdlIHNvCisgKiB0aGF0IHN1cHBvcnRpbmcgbmV3IGJvYXJkcyBub3JtYWxseSB3b24ndCByZXF1aXJlIGRyaXZlciBwYXRjaGVzLgorICogTW9zdCBib2FyZC1zcGVjaWZpYyBrbm93bGVkZ2Ugc2hvdWxkIGJlIGluIGFyY2gvLi4uL2JvYXJkLSouYyBmaWxlcy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQk9BUkRfSAorI2RlZmluZSBfX0FTTV9BUkNIX0JPQVJEX0gKKworIC8qIENsb2NrcyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXQ5MV9tYXN0ZXJfY2xvY2s7CisKKyAvKiBTZXJpYWwgUG9ydCAqLworZXh0ZXJuIGludCBhdDkxX3NlcmlhbF9tYXBbQVQ5MV9OUl9VQVJUXTsKK2V4dGVybiBpbnQgYXQ5MV9jb25zb2xlX3BvcnQ7CisKKyAvKiBVU0IgRGV2aWNlICovCitzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB7CisJdTgJdmJ1c19waW47CQkvKiBoaWdoID09IGhvc3QgcG93ZXJpbmcgdXMgKi8KKwl1OAlwdWxsdXBfcGluOwkJLyogaGlnaCA9PSBEKyBwdWxsZWQgdXAgKi8KK307CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSk7CisKKyAvKiBDb21wYWN0IEZsYXNoICovCitzdHJ1Y3QgYXQ5MV9jZl9kYXRhIHsKKwl1OAlpcnFfcGluOwkJLyogSS9PIElSUSAqLworCXU4CWRldF9waW47CQkvKiBDYXJkIGRldGVjdCAqLworCXU4CXZjY19waW47CQkvKiBwb3dlciBzd2l0Y2hpbmcgKi8KKwl1OAlyc3RfcGluOwkJLyogY2FyZCByZXNldCAqLworfTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSk7CisKKyAvKiBNTUMgLyBTRCAqLworc3RydWN0IGF0OTFfbW1jX2RhdGEgeworCXU4CQlkZXRfcGluOwkvKiBjYXJkIGRldGVjdCBJUlEgKi8KKwl1bnNpZ25lZAlpc19iOjE7CQkvKiB1c2VzIEIgc2lkZSAodnMgQSkgKi8KKwl1bnNpZ25lZAl3aXJlNDoxOwkvKiAoU0QpIHN1cHBvcnRzIERBVDAuLkRBVDMgKi8KKwl1OAkJd3BfcGluOwkJLyogKFNEKSB3cml0ZXByb3RlY3QgZGV0ZWN0ICovCisJdTgJCXZjY19waW47CS8qIHBvd2VyIHN3aXRjaGluZyAoaGlnaCA9PSBvbikgKi8KK307CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSk7CisKKyAvKiBFdGhlcm5ldCAqLworc3RydWN0IGF0OTFfZXRoX2RhdGEgeworCXU4CQlwaHlfaXJxX3BpbjsJLyogUEhZIElSUSAqLworCXU4CQlpc19ybWlpOwkvKiB1c2luZyBSTUlJIGludGVyZmFjZT8gKi8KK307CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSk7CisKKyAvKiBVU0IgSG9zdCAqLworc3RydWN0IGF0OTFfdXNiaF9kYXRhIHsKKwl1OAkJcG9ydHM7CQkvKiBudW1iZXIgb2YgcG9ydHMgb24gcm9vdCBodWIgKi8KK307CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5NmI1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9kZWJ1Zy1tYWNyby5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFNBTiBQZW9wbGUKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworCS5tYWNybwlhZGRydWFydCxyeAorCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KKwlsZHJlcQlccngsID1BVDkxX0JBU0VfU1lTCQlAIFN5c3RlbSBwZXJpcGhlcmFscyAocGh5cyBhZGRyZXNzKQorCWxkcm5lCVxyeCwgPUFUOTFfVkFfQkFTRV9TWVMJCUAgU3lzdGVtIHBlcmlwaGVyYWxzICh2aXJ0IGFkZHJlc3MpCisJLmVuZG0KKworCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCXN0cmIJXHJkLCBbXHJ4LCAjQVQ5MV9EQkdVX1RIUl0JQCBXcml0ZSB0byBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyCisJLmVuZG0KKworCS5tYWNybwl3YWl0dWFydCxyZCxyeAorMTAwMToJbGRyCVxyZCwgW1xyeCwgI0FUOTFfREJHVV9TUl0JQCBSZWFkIFN0YXR1cyBSZWdpc3RlcgorCXRzdAlccmQsICNBVDkxX0RCR1VfVFhSRFkJCUAgREJHVV9UWFJEWSA9IDEgd2hlbiByZWFkeSB0byB0cmFuc21pdAorCWJlcQkxMDAxYgorCS5lbmRtCisKKwkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDE6CWxkcglccmQsIFtccngsICNBVDkxX0RCR1VfU1JdCUAgUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKwl0c3QJXHJkLCAjQVQ5MV9EQkdVX1RYRU1QVFkJCUAgREJHVV9UWEVNUFRZID0gMSB3aGVuIHRyYW5zbWlzc2lvbiBjb21wbGV0ZQorCWJlcQkxMDAxYgorCS5lbmRtCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RtYS5oCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BhcmFtLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZG1hLmgKaW5kZXggNzgzZGVkZC4uMjJjMWRmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RtYS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wYXJhbS5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RtYS5oCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhMzI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDI1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9lbnRyeS1tYWNyby5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFNBTiBQZW9wbGUKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIEFUOTFSTTkyMDAgcGxhdGZvcm1zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWxkcglcYmFzZSwgPShBVDkxX1ZBX0JBU0VfU1lTKQkJQCBiYXNlIHZpcnR1YWwgYWRkcmVzcyBvZiBTWVMgcGVyaXBoZXJhbHMKKwlsZHIJXGlycW5yLCBbXGJhc2UsICNBVDkxX0FJQ19JVlJdCQlAIHJlYWQgSVJRIHZlY3RvciByZWdpc3RlcjogZGUtYXNzZXJ0cyBuSVJRIHRvIHByb2Nlc3NvciAoYW5kIGNsZWFycyBpbnRlcnJ1cHQpCisJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNBVDkxX0FJQ19JU1JdCUAgcmVhZCBpbnRlcnJ1cHQgc291cmNlIG51bWJlcgorCXRlcQlcaXJxc3RhdCwgIzAJCQkJQCBJU1IgaXMgMCB3aGVuIG5vIGN1cnJlbnQgaW50ZXJydXB0LCBvciBzcHVyaW91cyBpbnRlcnJ1cHQKKwlzdHJlcQlcdG1wLCBbXGJhc2UsICNBVDkxX0FJQ19FT0lDUl0JCUAgbm90IGdvaW5nIHRvIGJlIGhhbmRsZWQgZnVydGhlciwgdGhlbiBBQ0sgaXQgbm93LgorCS5lbmRtCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwYTYxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQVQ5MVJNOTIwMF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9BVDkxUk05MjAwX0dQSU9fSAorCisjZGVmaW5lIFBJTl9CQVNFCQlOUl9BSUNfSVJRUworCisjZGVmaW5lIFBRRlBfR1BJT19CQU5LUwkJMwkvKiBQUUZQIHBhY2thZ2UgaGFzIDMgYmFua3MgKi8KKyNkZWZpbmUgQkdBX0dQSU9fQkFOS1MJCTQJLyogQkdBIHBhY2thZ2UgaGFzIDQgYmFua3MgKi8KKworLyogdGhlc2UgcGluIG51bWJlcnMgZG91YmxlIGFzIElSUSBudW1iZXJzLCBsaWtlIEFUOTFfSURfKiB2YWx1ZXMgKi8KKworI2RlZmluZQlBVDkxX1BJTl9QQTAJKFBJTl9CQVNFICsgMHgwMCArIDApCisjZGVmaW5lCUFUOTFfUElOX1BBMQkoUElOX0JBU0UgKyAweDAwICsgMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyCShQSU5fQkFTRSArIDB4MDAgKyAyKQorI2RlZmluZQlBVDkxX1BJTl9QQTMJKFBJTl9CQVNFICsgMHgwMCArIDMpCisjZGVmaW5lCUFUOTFfUElOX1BBNAkoUElOX0JBU0UgKyAweDAwICsgNCkKKworI2RlZmluZQlBVDkxX1BJTl9QQTUJKFBJTl9CQVNFICsgMHgwMCArIDUpCisjZGVmaW5lCUFUOTFfUElOX1BBNgkoUElOX0JBU0UgKyAweDAwICsgNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEE3CShQSU5fQkFTRSArIDB4MDAgKyA3KQorI2RlZmluZQlBVDkxX1BJTl9QQTgJKFBJTl9CQVNFICsgMHgwMCArIDgpCisjZGVmaW5lCUFUOTFfUElOX1BBOQkoUElOX0JBU0UgKyAweDAwICsgOSkKKworI2RlZmluZQlBVDkxX1BJTl9QQTEwCShQSU5fQkFTRSArIDB4MDAgKyAxMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEExMQkoUElOX0JBU0UgKyAweDAwICsgMTEpCisjZGVmaW5lCUFUOTFfUElOX1BBMTIJKFBJTl9CQVNFICsgMHgwMCArIDEyKQorI2RlZmluZQlBVDkxX1BJTl9QQTEzCShQSU5fQkFTRSArIDB4MDAgKyAxMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEExNAkoUElOX0JBU0UgKyAweDAwICsgMTQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEExNQkoUElOX0JBU0UgKyAweDAwICsgMTUpCisjZGVmaW5lCUFUOTFfUElOX1BBMTYJKFBJTl9CQVNFICsgMHgwMCArIDE2KQorI2RlZmluZQlBVDkxX1BJTl9QQTE3CShQSU5fQkFTRSArIDB4MDAgKyAxNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEExOAkoUElOX0JBU0UgKyAweDAwICsgMTgpCisjZGVmaW5lCUFUOTFfUElOX1BBMTkJKFBJTl9CQVNFICsgMHgwMCArIDE5KQorCisjZGVmaW5lCUFUOTFfUElOX1BBMjAJKFBJTl9CQVNFICsgMHgwMCArIDIwKQorI2RlZmluZQlBVDkxX1BJTl9QQTIxCShQSU5fQkFTRSArIDB4MDAgKyAyMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyMgkoUElOX0JBU0UgKyAweDAwICsgMjIpCisjZGVmaW5lCUFUOTFfUElOX1BBMjMJKFBJTl9CQVNFICsgMHgwMCArIDIzKQorI2RlZmluZQlBVDkxX1BJTl9QQTI0CShQSU5fQkFTRSArIDB4MDAgKyAyNCkKKworI2RlZmluZQlBVDkxX1BJTl9QQTI1CShQSU5fQkFTRSArIDB4MDAgKyAyNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyNgkoUElOX0JBU0UgKyAweDAwICsgMjYpCisjZGVmaW5lCUFUOTFfUElOX1BBMjcJKFBJTl9CQVNFICsgMHgwMCArIDI3KQorI2RlZmluZQlBVDkxX1BJTl9QQTI4CShQSU5fQkFTRSArIDB4MDAgKyAyOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEEyOQkoUElOX0JBU0UgKyAweDAwICsgMjkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEEzMAkoUElOX0JBU0UgKyAweDAwICsgMzApCisjZGVmaW5lCUFUOTFfUElOX1BBMzEJKFBJTl9CQVNFICsgMHgwMCArIDMxKQorCisjZGVmaW5lCUFUOTFfUElOX1BCMAkoUElOX0JBU0UgKyAweDIwICsgMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxCShQSU5fQkFTRSArIDB4MjAgKyAxKQorI2RlZmluZQlBVDkxX1BJTl9QQjIJKFBJTl9CQVNFICsgMHgyMCArIDIpCisjZGVmaW5lCUFUOTFfUElOX1BCMwkoUElOX0JBU0UgKyAweDIwICsgMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEI0CShQSU5fQkFTRSArIDB4MjAgKyA0KQorCisjZGVmaW5lCUFUOTFfUElOX1BCNQkoUElOX0JBU0UgKyAweDIwICsgNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEI2CShQSU5fQkFTRSArIDB4MjAgKyA2KQorI2RlZmluZQlBVDkxX1BJTl9QQjcJKFBJTl9CQVNFICsgMHgyMCArIDcpCisjZGVmaW5lCUFUOTFfUElOX1BCOAkoUElOX0JBU0UgKyAweDIwICsgOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEI5CShQSU5fQkFTRSArIDB4MjAgKyA5KQorCisjZGVmaW5lCUFUOTFfUElOX1BCMTAJKFBJTl9CQVNFICsgMHgyMCArIDEwKQorI2RlZmluZQlBVDkxX1BJTl9QQjExCShQSU5fQkFTRSArIDB4MjAgKyAxMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxMgkoUElOX0JBU0UgKyAweDIwICsgMTIpCisjZGVmaW5lCUFUOTFfUElOX1BCMTMJKFBJTl9CQVNFICsgMHgyMCArIDEzKQorI2RlZmluZQlBVDkxX1BJTl9QQjE0CShQSU5fQkFTRSArIDB4MjAgKyAxNCkKKworI2RlZmluZQlBVDkxX1BJTl9QQjE1CShQSU5fQkFTRSArIDB4MjAgKyAxNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxNgkoUElOX0JBU0UgKyAweDIwICsgMTYpCisjZGVmaW5lCUFUOTFfUElOX1BCMTcJKFBJTl9CQVNFICsgMHgyMCArIDE3KQorI2RlZmluZQlBVDkxX1BJTl9QQjE4CShQSU5fQkFTRSArIDB4MjAgKyAxOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEIxOQkoUElOX0JBU0UgKyAweDIwICsgMTkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyMAkoUElOX0JBU0UgKyAweDIwICsgMjApCisjZGVmaW5lCUFUOTFfUElOX1BCMjEJKFBJTl9CQVNFICsgMHgyMCArIDIxKQorI2RlZmluZQlBVDkxX1BJTl9QQjIyCShQSU5fQkFTRSArIDB4MjAgKyAyMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyMwkoUElOX0JBU0UgKyAweDIwICsgMjMpCisjZGVmaW5lCUFUOTFfUElOX1BCMjQJKFBJTl9CQVNFICsgMHgyMCArIDI0KQorCisjZGVmaW5lCUFUOTFfUElOX1BCMjUJKFBJTl9CQVNFICsgMHgyMCArIDI1KQorI2RlZmluZQlBVDkxX1BJTl9QQjI2CShQSU5fQkFTRSArIDB4MjAgKyAyNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEIyNwkoUElOX0JBU0UgKyAweDIwICsgMjcpCisjZGVmaW5lCUFUOTFfUElOX1BCMjgJKFBJTl9CQVNFICsgMHgyMCArIDI4KQorI2RlZmluZQlBVDkxX1BJTl9QQjI5CShQSU5fQkFTRSArIDB4MjAgKyAyOSkKKworI2RlZmluZQlBVDkxX1BJTl9QQjMwCShQSU5fQkFTRSArIDB4MjAgKyAzMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEIzMQkoUElOX0JBU0UgKyAweDIwICsgMzEpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEMwCShQSU5fQkFTRSArIDB4NDAgKyAwKQorI2RlZmluZQlBVDkxX1BJTl9QQzEJKFBJTl9CQVNFICsgMHg0MCArIDEpCisjZGVmaW5lCUFUOTFfUElOX1BDMgkoUElOX0JBU0UgKyAweDQwICsgMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEMzCShQSU5fQkFTRSArIDB4NDAgKyAzKQorI2RlZmluZQlBVDkxX1BJTl9QQzQJKFBJTl9CQVNFICsgMHg0MCArIDQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEM1CShQSU5fQkFTRSArIDB4NDAgKyA1KQorI2RlZmluZQlBVDkxX1BJTl9QQzYJKFBJTl9CQVNFICsgMHg0MCArIDYpCisjZGVmaW5lCUFUOTFfUElOX1BDNwkoUElOX0JBU0UgKyAweDQwICsgNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEM4CShQSU5fQkFTRSArIDB4NDAgKyA4KQorI2RlZmluZQlBVDkxX1BJTl9QQzkJKFBJTl9CQVNFICsgMHg0MCArIDkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxMAkoUElOX0JBU0UgKyAweDQwICsgMTApCisjZGVmaW5lCUFUOTFfUElOX1BDMTEJKFBJTl9CQVNFICsgMHg0MCArIDExKQorI2RlZmluZQlBVDkxX1BJTl9QQzEyCShQSU5fQkFTRSArIDB4NDAgKyAxMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxMwkoUElOX0JBU0UgKyAweDQwICsgMTMpCisjZGVmaW5lCUFUOTFfUElOX1BDMTQJKFBJTl9CQVNFICsgMHg0MCArIDE0KQorCisjZGVmaW5lCUFUOTFfUElOX1BDMTUJKFBJTl9CQVNFICsgMHg0MCArIDE1KQorI2RlZmluZQlBVDkxX1BJTl9QQzE2CShQSU5fQkFTRSArIDB4NDAgKyAxNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEMxNwkoUElOX0JBU0UgKyAweDQwICsgMTcpCisjZGVmaW5lCUFUOTFfUElOX1BDMTgJKFBJTl9CQVNFICsgMHg0MCArIDE4KQorI2RlZmluZQlBVDkxX1BJTl9QQzE5CShQSU5fQkFTRSArIDB4NDAgKyAxOSkKKworI2RlZmluZQlBVDkxX1BJTl9QQzIwCShQSU5fQkFTRSArIDB4NDAgKyAyMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyMQkoUElOX0JBU0UgKyAweDQwICsgMjEpCisjZGVmaW5lCUFUOTFfUElOX1BDMjIJKFBJTl9CQVNFICsgMHg0MCArIDIyKQorI2RlZmluZQlBVDkxX1BJTl9QQzIzCShQSU5fQkFTRSArIDB4NDAgKyAyMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyNAkoUElOX0JBU0UgKyAweDQwICsgMjQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyNQkoUElOX0JBU0UgKyAweDQwICsgMjUpCisjZGVmaW5lCUFUOTFfUElOX1BDMjYJKFBJTl9CQVNFICsgMHg0MCArIDI2KQorI2RlZmluZQlBVDkxX1BJTl9QQzI3CShQSU5fQkFTRSArIDB4NDAgKyAyNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEMyOAkoUElOX0JBU0UgKyAweDQwICsgMjgpCisjZGVmaW5lCUFUOTFfUElOX1BDMjkJKFBJTl9CQVNFICsgMHg0MCArIDI5KQorCisjZGVmaW5lCUFUOTFfUElOX1BDMzAJKFBJTl9CQVNFICsgMHg0MCArIDMwKQorI2RlZmluZQlBVDkxX1BJTl9QQzMxCShQSU5fQkFTRSArIDB4NDAgKyAzMSkKKworI2RlZmluZQlBVDkxX1BJTl9QRDAJKFBJTl9CQVNFICsgMHg2MCArIDApCisjZGVmaW5lCUFUOTFfUElOX1BEMQkoUElOX0JBU0UgKyAweDYwICsgMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyCShQSU5fQkFTRSArIDB4NjAgKyAyKQorI2RlZmluZQlBVDkxX1BJTl9QRDMJKFBJTl9CQVNFICsgMHg2MCArIDMpCisjZGVmaW5lCUFUOTFfUElOX1BENAkoUElOX0JBU0UgKyAweDYwICsgNCkKKworI2RlZmluZQlBVDkxX1BJTl9QRDUJKFBJTl9CQVNFICsgMHg2MCArIDUpCisjZGVmaW5lCUFUOTFfUElOX1BENgkoUElOX0JBU0UgKyAweDYwICsgNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEQ3CShQSU5fQkFTRSArIDB4NjAgKyA3KQorI2RlZmluZQlBVDkxX1BJTl9QRDgJKFBJTl9CQVNFICsgMHg2MCArIDgpCisjZGVmaW5lCUFUOTFfUElOX1BEOQkoUElOX0JBU0UgKyAweDYwICsgOSkKKworI2RlZmluZQlBVDkxX1BJTl9QRDEwCShQSU5fQkFTRSArIDB4NjAgKyAxMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxMQkoUElOX0JBU0UgKyAweDYwICsgMTEpCisjZGVmaW5lCUFUOTFfUElOX1BEMTIJKFBJTl9CQVNFICsgMHg2MCArIDEyKQorI2RlZmluZQlBVDkxX1BJTl9QRDEzCShQSU5fQkFTRSArIDB4NjAgKyAxMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxNAkoUElOX0JBU0UgKyAweDYwICsgMTQpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxNQkoUElOX0JBU0UgKyAweDYwICsgMTUpCisjZGVmaW5lCUFUOTFfUElOX1BEMTYJKFBJTl9CQVNFICsgMHg2MCArIDE2KQorI2RlZmluZQlBVDkxX1BJTl9QRDE3CShQSU5fQkFTRSArIDB4NjAgKyAxNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEQxOAkoUElOX0JBU0UgKyAweDYwICsgMTgpCisjZGVmaW5lCUFUOTFfUElOX1BEMTkJKFBJTl9CQVNFICsgMHg2MCArIDE5KQorCisjZGVmaW5lCUFUOTFfUElOX1BEMjAJKFBJTl9CQVNFICsgMHg2MCArIDIwKQorI2RlZmluZQlBVDkxX1BJTl9QRDIxCShQSU5fQkFTRSArIDB4NjAgKyAyMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyMgkoUElOX0JBU0UgKyAweDYwICsgMjIpCisjZGVmaW5lCUFUOTFfUElOX1BEMjMJKFBJTl9CQVNFICsgMHg2MCArIDIzKQorI2RlZmluZQlBVDkxX1BJTl9QRDI0CShQSU5fQkFTRSArIDB4NjAgKyAyNCkKKworI2RlZmluZQlBVDkxX1BJTl9QRDI1CShQSU5fQkFTRSArIDB4NjAgKyAyNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyNgkoUElOX0JBU0UgKyAweDYwICsgMjYpCisjZGVmaW5lCUFUOTFfUElOX1BEMjcJKFBJTl9CQVNFICsgMHg2MCArIDI3KQorI2RlZmluZQlBVDkxX1BJTl9QRDI4CShQSU5fQkFTRSArIDB4NjAgKyAyOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEQyOQkoUElOX0JBU0UgKyAweDYwICsgMjkpCisKKyNkZWZpbmUJQVQ5MV9QSU5fUEQzMAkoUElOX0JBU0UgKyAweDYwICsgMzApCisjZGVmaW5lCUFUOTFfUElOX1BEMzEJKFBJTl9CQVNFICsgMHg2MCArIDMxKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogc2V0dXAgc2V0dXAgcm91dGluZXMsIGNhbGxlZCBmcm9tIGJvYXJkIGluaXQgb3IgZHJpdmVyIHByb2JlKCkgKi8KK2V4dGVybiBpbnQgYXQ5MV9zZXRfQV9wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCk7CitleHRlcm4gaW50IGF0OTFfc2V0X0JfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOworZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX2lucHV0KHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOworZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7CitleHRlcm4gaW50IGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKKworLyogY2FsbGFibGUgYXQgYW55IHRpbWUgKi8KK2V4dGVybiBpbnQgYXQ5MV9zZXRfZ3Bpb192YWx1ZSh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7CitleHRlcm4gaW50IGF0OTFfZ2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluKTsKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDZjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQorICogIENvcHlyaWdodCAoQykgMjAwMyBBVE1FTAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXJtOTIwMF9zeXMuaD4KKworLyoKKyAqIFJlbWFwIHRoZSBwZXJpcGhlcmFscyBmcm9tIGFkZHJlc3MgMHhGRkZBMDAwMCAuLiAweEZGRkZGRkZGCisgKiB0byAweEZFRkEwMDAwIC4uIDB4RkYwMDAwMDAuICAoMzg0S2IpCisgKi8KKyNkZWZpbmUgQVQ5MV9JT19QSFlTX0JBU0UJMHhGRkZBMDAwMAorI2RlZmluZSBBVDkxX0lPX1NJWkUJCSgweEZGRkZGRkZGIC0gQVQ5MV9JT19QSFlTX0JBU0UgKyAxKQorI2RlZmluZSBBVDkxX0lPX1ZJUlRfQkFTRQkoMHhGRjAwMDAwMCAtIEFUOTFfSU9fU0laRSkKKworIC8qIENvbnZlcnQgYSBwaHlzaWNhbCBJTyBhZGRyZXNzIHRvIHZpcnR1YWwgSU8gYWRkcmVzcyAqLworI2RlZmluZSBBVDkxX0lPX1AyVih4KQkoKHgpIC0gQVQ5MV9JT19QSFlTX0JBU0UgKyBBVDkxX0lPX1ZJUlRfQkFTRSkKKworLyoKKyAqIFZpcnR1YWwgdG8gUGh5c2ljYWwgQWRkcmVzcyBtYXBwaW5nIGZvciBJTyBkZXZpY2VzLgorICovCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9TWVMJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1NQSQlBVDkxX0lPX1AyVihBVDkxX0JBU0VfU1BJKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfU1NDMglBVDkxX0lPX1AyVihBVDkxX0JBU0VfU1NDMikKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1NTQzEJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1NTQzEpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9TU0MwCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9TU0MwKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVVMzCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9VUzMpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9VUzIJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1VTMikKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1VTMQlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVVMxKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVVMwCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9VUzApCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9FTUFDCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9FTUFDKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVFdJCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9UV0kpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9NQ0kJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX01DSSkKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1VEUAlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVURQKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfVENCMQlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVENCMSkKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1RDQjAJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1RDQjApCisKKy8qIEludGVybmFsIFNSQU0gKi8KKyNkZWZpbmUgQVQ5MV9CQVNFX1NSQU0JCTB4MDAyMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ5MV9TUkFNX1NJWkUJCTB4MDAwMDQwMDAJLyogSW50ZXJuYWwgU1JBTSBTSVpFICgxNktiKSAqLworCisvKiBTZXJpYWwgcG9ydHMgKi8KKyNkZWZpbmUgQVQ5MV9OUl9VQVJUCQk1CQkvKiA0IFVTQVJUMydzIGFuZCBvbmUgREJHVSBwb3J0ICovCisKKy8qIEZMQVNIICovCisjZGVmaW5lIEFUOTFfRkxBU0hfQkFTRQkJMHgxMDAwMDAwMAkvKiBOQ1MwOiBGbGFzaCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KKworLyogU0RSQU0gKi8KKyNkZWZpbmUgQVQ5MV9TRFJBTV9CQVNFCQkweDIwMDAwMDAwCS8qIE5DUzE6IFNEUkFNIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCisvKiBTbWFydE1lZGlhICovCisjZGVmaW5lIEFUOTFfU01BUlRNRURJQV9CQVNFCTB4NDAwMDAwMDAJLyogTkNTMzogU21hcnRtZWRpYSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KKworLyogTXVsdGktTWFzdGVyIE1lbW9yeSBjb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFfVUhQX0JBU0UJCTB4MDAzMDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAqLworCisvKiBDbG9ja3MgKi8KKyNkZWZpbmUgQVQ5MV9TTE9XX0NMT0NLCQkzMjc2OAkJLyogc2xvdyBjbG9jayAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdDkxX3N5c19yZWFkKHVuc2lnbmVkIGludCByZWdfb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqYWRkciA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfU1lTOworCisJcmV0dXJuIHJlYWRsKGFkZHIgKyByZWdfb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0OTFfc3lzX3dyaXRlKHVuc2lnbmVkIGludCByZWdfb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXZvaWQgX19pb21lbSAqYWRkciA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfU1lTOworCisJd3JpdGVsKHZhbHVlLCBhZGRyICsgcmVnX29mZnNldCk7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pby5oCnNpbWlsYXJpdHkgaW5kZXggNzElCmNvcHkgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCmNvcHkgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pby5oCmluZGV4IGI4N2E3NWYuLjIzZTY3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pby5oCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lvLmgKICAqCi0gKiAgRXhjYWxpYnVyIHRpbWV4IHNwZWNpZmljYXRpb25zCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjAsNyArMTgsMTYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0vKgotICogPz8KLSAqLwotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCSg1MDAwMDAwMCAvIDE2KQorI2lmbmRlZiBfX0FTTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JT19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4RkZGRkZGRkYKKworI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YjA0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lycXMuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAorCisjZGVmaW5lIE5SX0FJQ19JUlFTIDMyCisKKworLyoKKyAqIEFja25vd2xlZGdlIGludGVycnVwdCB3aXRoIEFJQyBhZnRlciBpbnRlcnJ1cHQgaGFzIGJlZW4gaGFuZGxlZC4KKyAqICAgKGJ5IGtlcm5lbC9pcnEuYykKKyAqLworI2RlZmluZSBpcnFfZmluaXNoKGlycSkgZG8geyBhdDkxX3N5c193cml0ZShBVDkxX0FJQ19FT0lDUiwgMCk7IH0gd2hpbGUgKDApCisKKworLyoKKyAqIElSUSBpbnRlcnJ1cHQgc3ltYm9scyBhcmUgdGhlIEFUOTFfSURfKiBzeW1ib2xzIGluIGF0OTFybTkyMDAuaAorICogZm9yIElSUXMgaGFuZGxlZCBkaXJlY3RseSB0aHJvdWdoIHRoZSBBSUMsIG9yIGVsc2UgdGhlIEFUOTFfUElOXyoKKyAqIHN5bWJvbHMgaW4gZ3Bpby5oIGZvciBvbmVzIGhhbmRsZWQgaW5kaXJlY3RseSBhcyBHUElPcy4KKyAqIFdlIG1ha2UgcHJvdmlzaW9uIGZvciA0IGJhbmtzIG9mIEdQSU8uCisgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKyNkZWZpbmUJTlJfSVJRUwkJKE5SX0FJQ19JUlFTICsgKDQgKiAzMikpCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBJbml0aWFsaXplIHRoZSBJUlEgY29udHJvbGxlci4KKyAqLworZXh0ZXJuIHZvaWQgYXQ5MXJtOTIwMF9pbml0X2lycSh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvbWVtb3J5LmgKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvbWVtb3J5LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvbWVtb3J5LmgKaW5kZXggOTk5NTQxYi4uNDYyZjFmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwL21lbW9yeS5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL21lbW9yeS5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTcsMTMgKzE3LDE0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCisKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLS8qCi0gKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KLSAqLwotI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgUEhZU19PRkZTRVQJKEFUOTFfU0RSQU1fQkFTRSkKKwogCiAvKgogICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKQEAgLTMyLDcgKzMzLDkgQEAKICAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKICAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgogICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJKHggLSBQQUdFX09GRlNFVCArIC8qU0RSQU1fQkFTRSovMCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCAtIC8qU0RSQU1fQkFTRSovMCArIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3ZpcnRfdG9fYnVzX19pc19hX21hY3JvCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydF9faXNfYV9tYWNybworI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGFyYW0uaApzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3BhcmFtLmgKaW5kZXggYjg3YTc1Zi4uOTQ4MGY4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3BhcmFtLmgKQEAgLTEsOSArMSw3IEBACiAvKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWV4LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGFyYW0uaAogICoKLSAqICBFeGNhbGlidXIgdGltZXggc3BlY2lmaWNhdGlvbnMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMCw3ICsxOCwxMSBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKKyNpZm5kZWYgX19BU01fQVJDSF9QQVJBTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUEFSQU1fSAorCiAvKgotICogPz8KKyAqIFdlIHVzZSBkZWZhdWx0IHBhcmFtcwogICovCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDUwMDAwMDAwIC8gMTYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9waW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5NTAxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGlvLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3Bpby5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUElPX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19VU0FSVDAodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEExN19UWEQwIHwgQVQ5MV9QQTE4X1JYRDAgfCBBVDkxX1BBMjBfQ1RTMCk7CisKKwkvKgorCSAqIEVycmF0YSAjMzkgLSBSVFMwIGlzIG5vdCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBQQTIxLiAgV2UgbmVlZCB0byBkcml2ZQorCSAqICB0aGUgcGluIG1hbnVhbGx5LiAgRGVmYXVsdCBpcyBvZmYgKFJUUyBpcyBhY3RpdmUgbG93KS4KKwkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fUEVSLCBBVDkxX1BBMjFfUlRTMCk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX09FUiwgQVQ5MV9QQTIxX1JUUzApOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19TT0RSLCBBVDkxX1BBMjFfUlRTMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19VU0FSVDEodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19QRFIsIEFUOTFfUEIxOF9SSTEgfCBBVDkxX1BCMTlfRFRSMQorCQkJfCBBVDkxX1BCMjBfVFhEMSB8IEFUOTFfUEIyMV9SWEQxIHwgQVQ5MV9QQjIzX0RDRDEKKwkJCXwgQVQ5MV9QQjI0X0NUUzEgfCBBVDkxX1BCMjVfRFNSMSB8IEFUOTFfUEIyNl9SVFMxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1VTQVJUMih2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTIyX1JYRDIgfCBBVDkxX1BBMjNfVFhEMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19VU0FSVDModm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEE1X1RYRDMgfCBBVDkxX1BBNl9SWEQzKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fQlNSLCBBVDkxX1BBNV9UWEQzIHwgQVQ5MV9QQTZfUlhEMyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19EQkdVKHZvaWQpIHsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fUERSLCBBVDkxX1BBMzFfRFRYRCB8IEFUOTFfUEEzMF9EUlhEKTsKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgVHdvLVdpcmUgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fVFdJKHZvaWQpIHsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0EgKyBQSU9fUERSLCBBVDkxX1BBMjVfVFdEIHwgQVQ5MV9QQTI2X1RXQ0spOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19BU1IsIEFUOTFfUEEyNV9UV0QgfCBBVDkxX1BBMjZfVFdDSyk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX01ERVIsIEFUOTFfUEEyNV9UV0QgfCBBVDkxX1BBMjZfVFdDSyk7CQkvKiBvcGVuIGRyYWluICovCit9CisKKy8qCisgKiBFbmFibGUgdGhlIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1NQSSh2b2lkKSB7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9BICsgUElPX1BEUiwgQVQ5MV9QQTBfTUlTTyB8IEFUOTFfUEExX01PU0kgfCBBVDkxX1BBMl9TUENLKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1NQSV9DUzAodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEEzX05QQ1MwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1NQSV9DUzEodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEE0X05QQ1MxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1NQSV9DUzIodm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEE1X05QQ1MyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFUOTFfQ2ZnUElPX1NQSV9DUzModm9pZCkgeworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQSArIFBJT19QRFIsIEFUOTFfUEE2X05QQ1MzKTsKK30KKworLyoKKyAqIFNlbGVjdCB0aGUgRGF0YUZsYXNoIGNhcmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBBVDkxX0NmZ1BJT19EYXRhRmxhc2hDYXJkKHZvaWQpIHsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fUEVSLCBBVDkxX1BJT19QKDcpKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fT0VSLCBBVDkxX1BJT19QKDcpKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fQ09EUiwgQVQ5MV9QSU9fUCg3KSk7Cit9CisKKy8qCisgKiBFbmFibGUgTkFORCBGbGFzaCAoU21hcnRNZWRpYSkgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQVQ5MV9DZmdQSU9fU21hcnRNZWRpYSh2b2lkKSB7CisJLyogZW5hYmxlIFBDMD1TTUNFLCBQQzE9U01PRSwgUEMzPVNNV0UsIEEyMT1DTEUsIEEyMj1BTEUgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0MgKyBQSU9fQVNSLCBBVDkxX1BDMF9CRkNLIHwgQVQ5MV9QQzFfQkZSRFlfU01PRSB8IEFUOTFfUEMzX0JGQkFBX1NNV0UpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQyArIFBJT19QRFIsIEFUOTFfUEMwX0JGQ0sgfCBBVDkxX1BDMV9CRlJEWV9TTU9FIHwgQVQ5MV9QQzNfQkZCQUFfU01XRSk7CisKKwkvKiBDb25maWd1cmUgUEMyIGFzIGlucHV0IChzaWduYWwgUkVBRFkgb2YgdGhlIFNtYXJ0TWVkaWEpICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9DICsgUElPX1BFUiwgQVQ5MV9QQzJfQkZBVkQpOwkvKiBlbmFibGUgZGlyZWN0IG91dHB1dCBlbmFibGUgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BJT0MgKyBQSU9fT0RSLCBBVDkxX1BDMl9CRkFWRCk7CS8qIGRpc2FibGUgb3V0cHV0ICovCisKKwkvKiBDb25maWd1cmUgUEIxIGFzIGlucHV0IChzaWduYWwgQ2FyZCBEZXRlY3Qgb2YgdGhlIFNtYXJ0TWVkaWEpICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9CICsgUElPX1BFUiwgQVQ5MV9QSU9fUCgxKSk7CS8qIGVuYWJsZSBkaXJlY3Qgb3V0cHV0IGVuYWJsZSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19PRFIsIEFUOTFfUElPX1AoMSkpOwkvKiBkaXNhYmxlIG91dHB1dCAqLworfQorCitzdGF0aWMgaW5saW5lIGludCBBVDkxX1BJT19TbWFydE1lZGlhX1JEWSh2b2lkKSB7CisJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfUElPQyArIFBJT19QRFNSKSAmIEFUOTFfUElPX1AoMikpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEFUOTFfUElPX1NtYXJ0TWVkaWFfQ2FyZERldGVjdCh2b2lkKSB7CisJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfUElPQiArIFBJT19QRFNSKSAmIEFUOTFfUElPX1AoMSkpID8gMSA6IDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljNDI2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvc3lzdGVtLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvc3lzdGVtLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKgorCSAqIERpc2FibGUgdGhlIHByb2Nlc3NvciBjbG9jay4gIFRoZSBwcm9jZXNzb3Igd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisJICogcmUtZW5hYmxlZCBieSBhbiBpbnRlcnJ1cHQgb3IgYnkgYSByZXNldC4KKwkgKi8KKy8vCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRFIsIEFUOTFfUE1DX1BDSyk7CisKKwkvKgorCSAqIFNldCB0aGUgcHJvY2Vzc29yIChDUDE1KSBpbnRvICdXYWl0IGZvciBJbnRlcnJ1cHQnIG1vZGUuCisJICogVW5saWtlIGRpc2FibGluZyB0aGUgcHJvY2Vzc29yIGNsb2NrIHZpYSB0aGUgUE1DIChhYm92ZSkKKwkgKiAgdGhpcyBhbGxvd3MgdGhlIHByb2Nlc3NvciB0byBiZSB3b2tlbiB2aWEgSlRBRy4KKwkgKi8KKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJLyoKKwkgKiBQZXJmb3JtIGEgaGFyZHdhcmUgcmVzZXQgd2l0aCB0aGUgdXNlIG9mIHRoZSBXYXRjaGRvZyB0aW1lci4KKwkgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NUX1dETVIsIEFUOTFfU1RfUlNURU4gfCBBVDkxX1NUX0VYVEVOIHwgMSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9DUiwgQVQ5MV9TVF9XRFJTVCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdGltZXguaApzaW1pbGFyaXR5IGluZGV4IDc3JQpjb3B5IGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaApjb3B5IHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdGltZXguaAppbmRleCBiODdhNzVmLi4zZjExMmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdGltZXguaApAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGltZXguaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC90aW1leC5oCiAgKgotICogIEV4Y2FsaWJ1ciB0aW1leCBzcGVjaWZpY2F0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDcgKzE4LDExIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotLyoKLSAqID8/Ci0gKi8KLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoNTAwMDAwMDAgLyAxNikKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDkxX1NMT1dfQ0xPQ0spCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBkZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGUgc2VyaWFsIHBvcnQgaGFzIGFscmVhZHkgYmVlbgorICogaW5pdGlhbGl6ZWQgYnkgdGhlIGJvb3Rsb2FkZXIuICBXZSBzZWFyY2ggZm9yIHRoZSBmaXJzdCBlbmFibGVkCisgKiBwb3J0IGluIHRoZSBtb3N0IHByb2JhYmxlIG9yZGVyLiAgSWYgeW91IGRpZG4ndCBzZXR1cCBhIHBvcnQgaW4KKyAqIHlvdXIgYm9vdGxvYWRlciB0aGVuIG5vdGhpbmcgd2lsbCBhcHBlYXIgKHdoaWNoIG1pZ2h0IGJlIGRlc2lyZWQpLgorICoKKyAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQorICovCitzdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqcykKK3sKKwl2b2lkIF9faW9tZW0gKnN5cyA9ICh2b2lkIF9faW9tZW0gKikgQVQ5MV9CQVNFX1NZUzsJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCisJd2hpbGUgKCpzKSB7CisJCXdoaWxlICghKF9fcmF3X3JlYWRsKHN5cyArIEFUOTFfREJHVV9TUikgJiBBVDkxX0RCR1VfVFhSRFkpKSB7IGJhcnJpZXIoKTsgfQorCQlfX3Jhd193cml0ZWwoKnMsIHN5cyArIEFUOTFfREJHVV9USFIpOworCQlpZiAoKnMgPT0gJ1xuJykJeworCQkJd2hpbGUgKCEoX19yYXdfcmVhZGwoc3lzICsgQVQ5MV9EQkdVX1NSKSAmIEFUOTFfREJHVV9UWFJEWSkpIHsgYmFycmllcigpOyB9CisJCQlfX3Jhd193cml0ZWwoJ1xyJywgc3lzICsgQVQ5MV9EQkdVX1RIUik7CisJCX0KKwkJcysrOworCX0KKwkvKiB3YWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUgKi8KKwl3aGlsZSAoIShfX3Jhd19yZWFkbChzeXMgKyBBVDkxX0RCR1VfU1IpICYgQVQ5MV9EQkdVX1RYRU1QVFkpKSB7IGJhcnJpZXIoKTsgfQorfQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3ZtYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvdm1hbGxvYy5oCmluZGV4IDU0NmZiN2QuLjM0ZDk3MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3ZtYWxsb2MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdm1hbGxvYy5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3ZtYWxsb2MuaAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nLgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNyw0ICsxNywxMCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQorCisjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisKKyNkZWZpbmUgVk1BTExPQ19FTkQJCShBVDkxX0lPX1ZJUlRfQkFTRSAmIFBHRElSX01BU0spCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2RlYnVnLW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMTFjNTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZGVidWctbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2RlYnVnLW1hY3JvLlMKLSAqCi0gKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCi0gKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSovCi0KLSNpbmNsdWRlIDxhc20vYXJjaC9leGNhbGlidXIuaD4KLSNkZWZpbmUgVUFSVDAwX1RZUEUKLSNpbmNsdWRlIDxhc20vYXJjaC91YXJ0MDAuaD4KLQotCQkubWFjcm8JYWRkcnVhcnQscngKLQkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKLQkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwotCQlsZHIJXHJ4LCA9RVhDX1VBUlQwMF9CQVNFCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCi0JCW9ycm5lCVxyeCwgXHJ4LCAjMHhmZjAwMDAwMAlAIHZpcnR1YWwgYmFzZQotCQlvcnJuZQlccngsIFxyeCwgIzB4MDBmMDAwMDAKLQkJLmVuZG0KLQotCQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyCVxyZCwgW1xyeCwgI1VBUlRfVEQoMCldCi0JCS5lbmRtCi0KLQkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgW1xyeCwgI1VBUlRfVFNSKDApXQotCQlhbmQgCVxyZCwgXHJkLCAgI1VBUlRfVFNSX1RYX0xFVkVMX01TSwotCQljbXAJXHJkLCAjMTUKLQkJYmVxCTEwMDFiCi0JCS5lbmRtCi0KLQkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgW1xyeCwgI1VBUlRfVFNSKDApXQotCQlhbmRzIAlccmQsIFxyZCwgICNVQVJUX1RTUl9UWF9MRVZFTF9NU0sKLQkJYm5lCTEwMDFiCi0JCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTIwZWM4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jYW1lbG90L2RtYS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2VudHJ5LW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNmFlMDguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZW50cnktbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9lbnRyeS1tYWNyby5TCi0gKgotICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBlcHhhMTBkYiBwbGF0Zm9ybQotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0jaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KLSN1bmRlZiBJUlFfTU9ERSAvKiBzYW1lIG5hbWUgZGVmaW5lZCBpbiBhc20vcHJvYy9wdHJhY2UuaCAqLwotI2luY2x1ZGUgPGFzbS9hcmNoL2ludF9jdHJsMDAuaD4KLQotCQkubWFjcm8JZGlzYWJsZV9maXEKLQkJLmVuZG0KLQotCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0KLQkJbGRyCVxpcnFzdGF0LCA9SU5UX0lEKElPX0FERFJFU1MoRVhDX0lOVF9DVFJMMDBfQkFTRSkpCi0JCWxkcglcaXJxbnIsW1xpcnFzdGF0XQotCQljbXAJXGlycW5yLCMwCi0JCXN1Ym5lCVxpcnFucixcaXJxbnIsIzEKLQotCQkuZW5kbQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9ldGhlcjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9ldGhlcjAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MzdiOGEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZXRoZXIwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLSNpZm5kZWYgX19FVEhFUjAwX0gKLSNkZWZpbmUgX19FVEhFUjAwX0gKLQotCi0KLS8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEV0aGVybmV0IE1BQwotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIEFsdGVyYSBDb3Jwb3JhdGlvbiAyMDAwLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0vKgotKglTdHJ1Y3R1cmVzIGZvciB0aGUgRE1BIGNvbnRyb2xsZXIKLSovCi10eXBlZGVmIHN0cnVjdCBmZGFfZGVzYwotCXsKLQlzdHJ1Y3QgZmRhX2Rlc2MgKglGRE5leHQ7Ci0JbG9uZwkJCQlGRFN5c3RlbTsKLQlsb25nCQkJCUZEU3RhdDsKLQlzaG9ydAkJCQlGRExlbmd0aDsKLQlzaG9ydAkJCQlGREN0bDsKLQl9RkRBX0RFU0M7Ci0KLXR5cGVkZWYgc3RydWN0IGJ1Zl9kZXNjCi0JewotCWNoYXIgKglCdWZmRGF0YTsKLQlzaG9ydAlCdWZmTGVuZ3RoOwotCWNoYXIJQkRTdGF0OwotCWNoYXIJQkRDdGw7Ci0JfUJVRl9ERVNDOwotCi0vKgotKglDb250cm9sIG1hc2tzIGZvciB0aGUgRE1BIGNvbnRyb2xsZXIKLSovCi0jZGVmaW5lIEZEQ1RMX0JEQ09VTlRfTVNLCQkJCQkJKDB4MUYpCi0jZGVmaW5lIEZEQ1RMX0JEQ09VTlRfT0ZTVAkJCQkJCSgwKQotI2RlZmluZSBGRENUTF9GUk1PUFRfTVNLCQkJCQkJKDB4N0MwMCkKLSNkZWZpbmUgRkRDVExfRlJNT1BUX09GU1QJCQkJCQkoMTApCi0jZGVmaW5lCUZEQ1RMX0NPV05TRkRfTVNLCQkJCQkJKDB4ODAwMCkKLSNkZWZpbmUJRkRDVExfQ09XTlNGRF9PRlNUCQkJCQkJKDE1KQotCi0jZGVmaW5lIEJEQ1RMX1JYQkRTRVFOX01TSwkJCQkJCSgweDdGKQotI2RlZmluZSBCRENUTF9SWEJEU0VRTl9PRlNUCQkJCQkJKDApCi0jZGVmaW5lCUJEQ1RMX0NPV05TQkRfTVNLCQkJCQkJKDB4ODApCi0jZGVmaW5lCUJEQ1RMX0NPV05TQkRfT0ZTVAkJCQkJCSg3KQotCi0jZGVmaW5lIEZETkVYVF9FT0xfTVNLCQkJCQkJCSgweDEpCi0jZGVmaW5lIEZETkVYVF9FT0xfT0ZTVAkJCQkJCQkoMCkKLSNkZWZpbmUgRkRORVhUX0VPTF9QT0lOVEVSX01TSwkJCQkJKDB4RkZGRkZGRjApCi0jZGVmaW5lIEZETkVYVF9FT0xfUE9JTlRFUl9PRlNUCQkJCQkoNCkKLQotI2RlZmluZSBFVEhFUl9BUkNfU0laRSAgICAgICAgICgyMSkKLQotLyoKLSoJUmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIG1hc2tzCi0qLwotI2RlZmluZSBFVEhFUl9ETUFfQ1RMKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEwMCkpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfRE1CVVJTVF9PRlNUCQkJCSgyKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX0RNQlVSU1RfTVNLCQkJCSgweDFGQykKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9QT1dSTUdNTlRfT0ZTVAkJCSgxMSkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9QT1dSTUdNTlRfTVNLCQkJCSgweDEwMDApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfVFhCSUdFX09GU1QJCQkJKDE0KQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1RYQklHRV9NU0sJCQkJKDB4NDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9SWEJJR0VfT0ZTVAkJCQkoMTUpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUlhCSUdFX01TSwkJCQkoMHg4MDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1RYV0FLRVVQX09GU1QJCQkJKDE2KQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1RYV0FLRVVQX01TSwkJCQkoMHgxMDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9TV0lOVFJFUV9PRlNUCQkJCSgxNykKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9TV0lOVFJFUV9NU0sJCQkJKDB4MjAwMDApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfSU5UTUFTS19PRlNUCQkJCSgxOCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9JTlRNQVNLX01TSwkJCQkoMHg0MDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9NNjZFTlNUQVRfT0ZTVAkJCSgxOSkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9NNjZFTlNUQVRfTVNLCQkJCSgweDgwMDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNVFhJTklUX09GU1QJCQkJKDIwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNVFhJTklUX01TSwkJCQkoMHgxMDAwMDApCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1SWElOSVRfT0ZTVAkJCQkoMjEpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1SWElOSVRfTVNLCQkJCSgweDIwMDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9SWEFMSUdOX09GU1QJCQkJKDIyKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JYQUxJR05fTVNLCQkJCSgweEMwMDAwMCkKLSNkZWZpbmUgRVRIRVJfRE1BX0NUTF9STVNXUlFfT0ZTVAkJCQkoMjQpCi0jZGVmaW5lIEVUSEVSX0RNQV9DVExfUk1TV1JRX01TSwkJCQkoMHgxMDAwMDAwKQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNRU1CQU5LX09GU1QJCQkJKDI1KQotI2RlZmluZSBFVEhFUl9ETUFfQ1RMX1JNRU1CQU5LX01TSwkJCQkoMHgyMDAwMDAwKQotCi0jZGVmaW5lIEVUSEVSX1RYRlJNUFRSKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEwNCkpCi0KLSNkZWZpbmUgRVRIRVJfVFhUSFJTSChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzMDgpKQotCi0jZGVmaW5lIEVUSEVSX1RYUE9MTENUUihiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzMGMpKQotCi0jZGVmaW5lCUVUSEVSX0JMRlJNUFRSKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDExMCkpCi0jZGVmaW5lIEVUSEVSX0JMRkZSTVBUUl9FT0xfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfQkxGRlJNUFRSX0VPTF9NU0sJCQkJCSgweDEpCi0jZGVmaW5lIEVUSEVSX0JMRkZSTVBUUl9BRERSRVNTX09GU1QJCQkoNCkKLSNkZWZpbmUgRVRIRVJfQkxGRlJNUFRSX0FERFJFU1NfTVNLCQkJCSgweEZGRkZGRkYwKQotCi0jZGVmaW5lIEVUSEVSX1JYRlJBR1NJWkUoYmFzZSkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMTQpKQotI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX01JTkZSQUdfT0ZTVAkJCSgyKQotI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX01JTkZSQUdfTVNLCQkJKDB4RkZDKQotI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX0VOUEFDS19PRlNUCQkJKDE1KQotI2RlZmluZQlFVEhFUl9SWEZSQUdTSVpFX0VOUEFDS19NU0sJCQkJKDB4ODAwMCkKLQotI2RlZmluZSBFVEhFUl9JTlRfRU4oYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MTE4KSkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0ZEQUVYRU5fT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0ZEQUVYRU5fTVNLCQkJCSgweDEpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9CTEVYRU5fT0ZTVAkJCQkoMSkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0JMRVhOX01TSwkJCQkJKDB4MikKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX1NUQVJHQUJURU5fT0ZTVAkJCSgyKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fU1RBUkdBQlRFTl9NU0sJCQkJKDB4NCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX1JUQVJHQUJURU5fT0ZTVAkJCSgzKQotI2RlZmluZSBFVEhFUl9JTlRfRU5fUlRBUkdBQlRFTl9NU0sJCQkJKDB4OCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX1JNQVNBQlRFTl9PRlNUCQkJCSg0KQotI2RlZmluZSBFVEhFUl9JTlRfRU5fUk1BU0FCVEVOX01TSwkJCQkoMHgxMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX1NTWVNFUlJFTl9PRlNUCQkJCSg1KQotI2RlZmluZSBFVEhFUl9JTlRfRU5fU1NZU0VSUkVOX01TSwkJCQkoMHgyMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0RQQVJFUlJFTl9PRlNUCQkJCSg2KQotI2RlZmluZSBFVEhFUl9JTlRfRU5fRFBBUkVSUkVOX01TSwkJCQkoMHg0MCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0VBUk5PVEVOX09GU1QJCQkJKDcpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9FQVJOT1RFTl9NU0sJCQkJKDB4ODApCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9EUEFSREVOX09GU1QJCQkJKDgpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9EUEFSREVOX01TSwkJCQkoMHgxMDApCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9ETVBBUkVSUkVOX09GU1QJCQkoOSkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX0RNUEFSRVJSRU5fTVNLCQkJCSgweDIwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX1RYQ1RMQ01QRU5fT0ZTVAkJCSgxMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX1RYQ1RMQ01QRU5fTVNLCQkJCSgweDQwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX0VOX05SQUJURU5fT0ZTVAkJCQkoMTEpCi0jZGVmaW5lIEVUSEVSX0lOVF9FTl9OUkFCVEVOX01TSwkJCQkoMHg4MDApCi0KLSNkZWZpbmUJRVRIRVJfRkRBX0JBUyhiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMUMpKQotI2RlZmluZSBFVEhFUl9GREFfQkFTX0FERFJFU1NfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfRkRBX0JBU19BRERSRVNTX01TSwkJCQkoMHhGRkZGRkZGMCkKLQotI2RlZmluZSBFVEhFUl9GREFfTElNKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDEyMCkpCi0jZGVmaW5lIEVUSEVSX0ZEQV9MSU1fQ09VTlRfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfRkRBX0xJTV9DT1VOVF9NU0sJCQkJCSgweEZGRjApCi0KLSNkZWZpbmUgRVRIRVJfSU5UX1NSQyhiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMjQpKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVE1BQ1RYX09GU1QJCQkJKDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UTUFDVFhfTVNLCQkJCSgweDEpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UTUFDUlhfT0ZTVAkJCQkoMSkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRNQUNSWF9NU0sJCQkJKDB4MikKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRTQlVTX09GU1QJCQkJKDIpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UU0JVU19NU0sJCQkJKDB4NCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRGREFFWF9PRlNUCQkJCSgzKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEZEQUVYX01TSwkJCQkoMHg4KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEJMRVhfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRCTEVYX01TSwkJCQkoMHgxMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19TV0lOVF9PRlNUCQkJCSg1KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX1NXSU5UX01TSwkJCQkJKDB4MjApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URUFSTk9UX09GU1QJCQkoNikKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRFQVJOT1RfTVNLCQkJCSgweDQwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0RNUEFSRVJSX09GU1QJCQkJKDcpCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfRE1QQVJFUlJfTVNLCQkJCSgweDgwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEVYQkRfT0ZTVAkJCQkoOCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRFWEJEX01TSwkJCQkoMHgxMDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UVFhDVExDTVBfT0ZTVAkJCSg5KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVFRYQ1RMQ01QX01TSwkJCSgweDIwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlROUkFCVF9PRlNUCQkJCSgxMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlROUkFCVF9NU0sJCQkJKDB4NDAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0ZEQUVYX09GU1QJCQkJKDExKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0ZEQUVYX01TSwkJCQkJKDB4ODAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0JMRVhfT0ZTVAkJCQkJKDEyKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0JMRVhfTVNLCQkJCQkoMHgxMDAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0RNUEFSRVJSU1RBVF9PRlNUCQkJKDEzKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0RNUEFSRVJSU1RBVF9NU0sJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX05SQUJUX09GU1QJCQkJKDE0KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX05SQUJUX01TSwkJCQkJKDB4NDAwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRMSU5LX09GU1QJCQkJKDE1KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVExJTktfTVNLCQkJCSgweDgwMDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5URVhERUZFUl9PRlNUCQkJKDE2KQotI2RlZmluZSBFVEhFUl9JTlRfU1JDX0lOVEVYREVGRVJfTVNLCQkJKDB4MTAwMDApCi0jZGVmaW5lIEVUSEVSX0lOVF9TUkNfSU5UUk1PTl9PRlNUCQkJCSgxNykKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JTlRSTU9OX01TSwkJCQkoMHgyMDAwMCkKLSNkZWZpbmUgRVRIRVJfSU5UX1NSQ19JUlFfTVNLCQkJCQkoMHg4M0ZGKQotCi0jZGVmaW5lIEVUSEVSX1BBVVNFQ05UKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDQwKSkKLSNkZWZpbmUgRVRIRVJfUEFVU0VDTlRfQ09VTlRfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfUEFVU0VDTlRfQ09VTlRfTVNLCQkJCSgweEZGRkYpCi0KLSNkZWZpbmUgRVRIRVJfUkVNUEFVQ05UKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDQ0KSkKLSNkZWZpbmUgRVRIRVJfUkVNUEFVQ05UX0NPVU5UX09GU1QJCQkJKDApCi0jZGVmaW5lIEVUSEVSX1JFTVBBVUNOVF9DT1VOVF9NU0sJCQkJKDB4RkZGRikKLQotI2RlZmluZSBFVEhFUl9UWENPTkZSTVNUQVQoYmFzZSkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgzNDgpKQotI2RlZmluZSBFVEhFUl9UWENPTkZSTVNUQVRfVFNfU1RBVF9WQUxVRV9PRlNUCSgwKQotI2RlZmluZSBFVEhFUl9UWENPTkZSTVNUQVRfVFNfU1RBVF9WQUxVRV9NU0sJKDB4M0ZGRkZGKQotCi0jZGVmaW5lIEVUSEVSX01BQ19DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDApKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0hBTFRSRVFfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9IQUxUUkVRX01TSwkJCQkoMHgxKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0hBTFRJTU1fT0ZTVAkJCQkoMSkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9IQUxUSU1NX01TSwkJCQkoMHgyKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX1JFU0VUX09GU1QJCQkJKDIpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfUkVTRVRfTVNLCQkJCQkoMHg0KQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0ZVTExEVVBfT0ZTVAkJCQkoMykKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9GVUxMRFVQX01TSwkJCQkoMHg4KQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01BQ0xPT1BfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9NQUNMT09QX01TSwkJCQkoMHgxMCkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9DT05OX09GU1QJCQkJCSg1KQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0NPTk5fTVNLCQkJCQkoMHg2MCkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MT09QMTBfT0ZTVAkJCQkoNykKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MT09QMTBfTVNLCQkJCSgweDgwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xOS0NIR19PRlNUCQkJCSg4KQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0xOS0NIR19NU0sJCQkJKDB4MTAwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01JU1NST0xMX09GU1QJCQkJKDEwKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX01JU1NST0xMX01TSwkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfRU5NSVNTUk9MTF9PRlNUCQkJKDEzKQotI2RlZmluZSBFVEhFUl9NQUNfQ1RMX0VOTUlTU1JPTExfTVNLCQkJKDB4MjAwMCkKLSNkZWZpbmUgRVRIRVJfTUFDX0NUTF9MSU5LMTBfT0ZTVAkJCQkoMTUpCi0jZGVmaW5lIEVUSEVSX01BQ19DVExfTElOSzEwX01TSwkJCQkoMHg4MDAwKQotCi0jZGVmaW5lIEVUSEVSX0FSQ19DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4NCkpCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfU1RBVElPTkFDQ19PRlNUCQkJKDApCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfU1RBVElPTkFDQ19NU0sJCQkoMHgxKQotI2RlZmluZQlFVEhFUl9BUkNfQ1RMX0dST1VQQUNDX09GU1QJCQkJKDEpCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfR1JPVVBBQ0NfTVNLCQkJCSgweDIpCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfQlJPQURBQ0NfT0ZTVAkJCQkoMikKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9CUk9BREFDQ19NU0sJCQkJKDB4NCkKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9ORUdBUkNfT0ZTVAkJCQkoMykKLSNkZWZpbmUJRVRIRVJfQVJDX0NUTF9ORUdBUkNfTVNLCQkJCSgweDgpCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfQ09NUEVOX09GU1QJCQkJKDQpCi0jZGVmaW5lCUVUSEVSX0FSQ19DVExfQ09NUEVOX01TSwkJCQkoMHgxMCkKLQotI2RlZmluZSBFVEhFUl9UWF9DVEwoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4OCkpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9UWEVOX09GU1QJCQkJCSgwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfVFhFTl9NU0sJCQkJCSgweDEpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9UWEhBTFRfT0ZTVAkJCQkoMSkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX1RYSEFMVF9NU0sJCQkJCSgweDIpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9OT1BBRF9PRlNUCQkJCQkoMikKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX05PUEFEX01TSwkJCQkJKDB4NCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX05PQ1JDX09GU1QJCQkJCSgzKQotI2RlZmluZSBFVEhFUl9UWF9DVExfTk9DUkNfTVNLCQkJCQkoMHg4KQotI2RlZmluZSBFVEhFUl9UWF9DVExfRkJBQ0tfT0ZTVAkJCQkJKDQpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9GQkFDS19NU0sJCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfTk9FWERFRl9PRlNUCQkJCSg1KQotI2RlZmluZSBFVEhFUl9UWF9DVExfTk9FWERFRl9NU0sJCQkJKDB4MjApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9TRFBBVVNFX09GU1QJCQkJKDYpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9TRFBBVVNFX01TSwkJCQkoMHg0MCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX01JSTEwX09GU1QJCQkJCSg3KQotI2RlZmluZSBFVEhFUl9UWF9DVExfTUlJMTBfTVNLCQkJCQkoMHg4MCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOVU5ERVJfT0ZTVAkJCQkoOCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOVU5ERVJfTVNLCQkJCSgweDEwMCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VORVhERUZFUl9PRlNUCQkJCSg5KQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5FWERFRkVSX01TSwkJCQkoMHgyMDApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkxDQVJSX09GU1QJCQkJKDEwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5MQ0FSUl9NU0sJCQkJKDB4NDAwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5FWENPTExfT0ZTVAkJCQkoMTEpCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTkVYQ09MTF9NU0sJCQkJKDB4ODAwKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5MQVRFQ09MTF9PRlNUCQkJCSgxMikKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOTEFURUNPTExfTVNLCQkJCSgweDEwMDApCi0jZGVmaW5lIEVUSEVSX1RYX0NUTF9FTlRYUEFSX09GU1QJCQkJKDEzKQotI2RlZmluZSBFVEhFUl9UWF9DVExfRU5UWFBBUl9NU0sJCQkJKDB4MjAwMCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOQ09NUF9PRlNUCQkJCSgxNCkKLSNkZWZpbmUgRVRIRVJfVFhfQ1RMX0VOQ09NUF9NU0sJCQkJCSgweDQwMDApCi0KLSNkZWZpbmUgRVRIRVJfVFhfU1RBVChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHhjKSkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWENPTExfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWENPTExfTVNLCQkJCSgweEYpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfRVhDT0xMX09GU1QJCQkJKDQpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfRVhDT0xMX01TSwkJCQkoMHgxMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWERFRkVSX09GU1QJCQkJKDUpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhERUZFUl9NU0sJCQkJKDB4MjApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfUEFVU0VEX09GU1QJCQkJKDYpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfUEFVU0VEX01TSwkJCQkoMHg0MCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9JTlRUWF9PRlNUCQkJCSg3KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0lOVFRYX01TSwkJCQkJKDB4ODApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVU5ERVJfT0ZTVAkJCQkoOCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9VTkRFUl9NU0sJCQkJCSgweDEwMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9FWERFRkVSX09GU1QJCQkJKDkpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfRVhERUZFUl9NU0sJCQkJKDB4MjAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0xDQVJSX09GU1QJCQkJKDEwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0xDQVJSX01TSwkJCQkJKDB4NDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYMTBTVEFUX09GU1QJCQkJKDExKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYMTBTVEFUX01TSwkJCQkoMHg4MDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfTEFURUNPTExfT0ZTVAkJCQkoMTIpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfTEFURUNPTExfTVNLCQkJCSgweDEwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVJfT0ZTVAkJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVJfTVNLCQkJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0NPTVBfT0ZTVAkJCQkJKDE0KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX0NPTVBfTVNLCQkJCQkoMHg0MDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYSEFMVEVEX09GU1QJCQkJKDE1KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYSEFMVEVEX01TSwkJCQkoMHg4MDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1NRRVJSX09GU1QJCQkJKDE2KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1NRRVJSX01TSwkJCQkJKDB4MTAwMDApCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhNQ0FTVF9PRlNUCQkJCSgxNykKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWE1DQVNUX01TSwkJCQkoMHgyMDAwMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9UWEJDQVNUX09GU1QJCQkJKDE4KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYQkNBU1RfTVNLCQkJCSgweDQwMDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1ZMQU5fT0ZTVAkJCQkJKDE5KQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1ZMQU5fTVNLCQkJCQkoMHg4MDAwMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9NQUNDX09GU1QJCQkJCSgyMCkKLSNkZWZpbmUgRVRIRVJfVFhfU1RBVF9NQUNDX01TSwkJCQkJKDB4MTAwMDAwKQotI2RlZmluZSBFVEhFUl9UWF9TVEFUX1RYUEFVU0VfT0ZTVAkJCQkoMjEpCi0jZGVmaW5lIEVUSEVSX1RYX1NUQVRfVFhQQVVTRV9NU0sJCQkJKDB4MjAwMDAwKQotCi0jZGVmaW5lIEVUSEVSX1JYX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxMCkpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9SWEVOX09GU1QJCQkJCSgwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfUlhFTl9NU0sJCQkJCSgweDEpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9SWEhBTFRfT0ZTVAkJCQkoMSkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1JYSEFMVF9NU0sJCQkJCSgweDIpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9MT05HRU5fT0ZTVAkJCQkoMikKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0xPTkdFTl9NU0sJCQkJCSgweDQpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9TSE9SVEVOX09GU1QJCQkJKDMpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9TSE9SVEVOX01TSwkJCQkoMHg4KQotI2RlZmluZSBFVEhFUl9SWF9DVExfU1RSSVBDUkNfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1NUUklQQ1JDX01TSwkJCQkoMHgxMCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1BBU1NDVExfT0ZTVAkJCQkoNSkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX1BBU1NDVExfTVNLCQkJCSgweDIwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfSUdOT1JFQ1JDX09GU1QJCQkJKDYpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9JR05PUkVDUkNfTVNLCQkJCSgweDQwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5BTElHTl9PRlNUCQkJCSg4KQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5BTElHTl9NU0sJCQkJKDB4MTAwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5DUkNFUlJfT0ZTVAkJCQkoOSkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOQ1JDRVJSX01TSwkJCQkoMHgyMDApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTk9WRVJfT0ZTVAkJCQkoMTApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTk9WRVJfTVNLCQkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkxPTkdFUlJfT0ZTVAkJCQkoMTEpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTkxPTkdFUlJfTVNLCQkJCSgweDgwMCkKLSNkZWZpbmUgRVRIRVJfUlhfQ1RMX0VOUlhQQVJfT0ZTVAkJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX1JYX0NUTF9FTlJYUEFSX01TSwkJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5HT09EX09GU1QJCQkJKDE0KQotI2RlZmluZSBFVEhFUl9SWF9DVExfRU5HT09EX01TSwkJCQkJKDB4NDAwMCkKLQotI2RlZmluZSBFVEhFUl9SWF9TVEFUKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDE0KSkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MRU5FUlJfT0ZTVAkJCQkoNCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MRU5FUlJfTVNLCQkJCSgweDEwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NUTFJFQ0RfT0ZTVAkJCQkoNSkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9DVExSRUNEX01TSwkJCQkoMHgyMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9JTlRSWF9PRlNUCQkJCSg2KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0lOVFJYX01TSwkJCQkJKDB4NDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlgxMFNUQVRfT0ZTVAkJCQkoNykKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWDEwU1RBVF9NU0sJCQkJKDB4ODApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfQUxJR05FUlJfT0ZTVAkJCQkoOCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BTElHTkVSUl9NU0sJCQkJKDB4MTAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NSQ0VSUl9PRlNUCQkJCSg5KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0NSQ0VSUl9NU0sJCQkJKDB4MjAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX09WRVJGTE9XX09GU1QJCQkJKDEwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX09WRVJGTE9XX01TSwkJCQkoMHg0MDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfTE9OR0VSUl9PRlNUCQkJCSgxMSkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9MT05HRVJSX01TSwkJCQkoMHg4MDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhQQVJfT0ZTVAkJCQkoMTMpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhQQVJfTVNLCQkJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0dPT0RfT0ZTVAkJCQkJKDE0KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0dPT0RfTVNLCQkJCQkoMHg0MDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYSEFMVEVEX09GU1QJCQkJKDE1KQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYSEFMVEVEX01TSwkJCQkoMHg4MDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYTUNBU1RfT0ZTVAkJCQkoMTcpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhNQ0FTVF9NU0sJCQkJKDB4MTAwMDApCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhCQ0FTVF9PRlNUCQkJCSgxOCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWEJDQVNUX01TSwkJCQkoMHgyMDAwMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFZMQU5fT0ZTVAkJCQkoMTkpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfUlhWTEFOX01TSwkJCQkoMHg0MDAwMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9SWFBBVVNFX09GU1QJCQkJKDIwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX1JYUEFVU0VfTVNLCQkJCSgweDgwMDAwKQotI2RlZmluZSBFVEhFUl9SWF9TVEFUX0FSQ1NUQVRVU19PRlNUCQkJCSgyMSkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BUkNTVEFUVVNfTVNLCQkJCSgweEYwMDAwMCkKLSNkZWZpbmUgRVRIRVJfUlhfU1RBVF9BUkNFTlRfT0ZTVAkJCQkoMjUpCi0jZGVmaW5lIEVUSEVSX1JYX1NUQVRfQVJDRU5UX01TSwkJCQkoMHgxRjAwMDAwMCkKLQotI2RlZmluZSBFVEhFUl9NRF9EQVRBKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDE4KSkKLQotI2RlZmluZSBFVEhFUl9NRF9DQShiYXNlKQkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MWMpKQotI2RlZmluZSBFVEhFUl9NRF9DQV9BRERSX09GU1QJCQkJCSgwKQotI2RlZmluZSBFVEhFUl9NRF9DQV9BRERSX01TSwkJCQkJKDB4MUYpCi0jZGVmaW5lIEVUSEVSX01EX0NBX1BIWV9PRlNUCQkJCQkoNSkKLSNkZWZpbmUgRVRIRVJfTURfQ0FfUEhZX01TSwkJCQkJKDB4M0UwKQotI2RlZmluZSBFVEhFUl9NRF9DQV9XUl9PRlNUCQkJCQkoMTApCi0jZGVmaW5lIEVUSEVSX01EX0NBX1dSX01TSwkJCQkJKDB4NDAwKQotI2RlZmluZSBFVEhFUl9NRF9DQV9CVVNZX09GU1QJCQkJCSgxMSkKLSNkZWZpbmUgRVRIRVJfTURfQ0FfQlVTWV9NU0sJCQkJCSgweDgwMCkKLSNkZWZpbmUgRVRIRVJfTURfQ0FfUFJFU1VQUF9PRlNUCQkJCSgxMikKLSNkZWZpbmUgRVRIRVJfTURfQ0FfUFJFU1VQUF9NU0sJCQkJCSgweDEwMDApCi0KLSNkZWZpbmUgRVRIRVJfQVJDX0FEUihiYXNlKQkgICAgICAoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgxNjApKQotI2RlZmluZSBFVEhFUl9BUkNfQURSX0FSQ19MT0NfT0ZTVAkJCQkoMikKLSNkZWZpbmUgRVRIRVJfQVJDX0FEUl9BUkNfTE9DX01TSwkJCQkoMHhGRkMpCi0KLSNkZWZpbmUgRVRIRVJfQVJDX0RBVEEoYmFzZSkgIChFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDM2NCkpCi0KLSNkZWZpbmUgRVRIRVJfQVJDX0VOQShiYXNlKSAgIChFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDI4KSkKLSNkZWZpbmUgRVRIRVJfQVJDX0VOQV9NU0sJCQkJCSgweDFGRkZGRikKLQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTChiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHgyYykpCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX1BST01fQUREUl9PRlNUCQkJKDApCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX1BST01fQUREUl9NU0sJCQkoMHgzRikKLSNkZWZpbmUgRVRIRVJfUFJPTV9DVExfT1BDT0RFX09GU1QJCQkJKDEzKQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9PUENPREVfTVNLCQkJCSgweDYwMDApCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX09QQ09ERV9SRUFEX01TSwkJCSgweDQwMDApCi0jZGVmaW5lIEVUSEVSX1BST01fQ1RMX09QQ09ERV9XUklURV9NU0sJCQkoMHgyMDAwKQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9PUENPREVfRVJBU0VfTVNLCQkJKDB4NjAwMCkKLSNkZWZpbmUgRVRIRVJfUFJPTV9DVExfRU5BQkxFX01TSwkJCQkoMHgwMDMwKQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9ESVNBQkxFX01TSwkJCQkoMHgwMDAwKQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9CVVNZX09GU1QJCQkJKDE1KQotI2RlZmluZSBFVEhFUl9QUk9NX0NUTF9CVVNZX01TSwkJCQkJKDB4ODAwMCkKLQotI2RlZmluZSBFVEhFUl9QUk9NX0RBVEEoYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4MzApKQotCi0jZGVmaW5lIEVUSEVSX01JU1NfQ05UKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDNjKSkKLSNkZWZpbmUgRVRIRVJfTUlTU19DTlRfQ09VTlRfT0ZTVAkJCQkoMCkKLSNkZWZpbmUgRVRIRVJfTUlTU19DTlRfQ09VTlRfTVNLCQkJCSgweEZGRkYpCi0KLSNkZWZpbmUgRVRIRVJfQ05UREFUQShiYXNlKQkJCQkJCQkoRVRIRVIwMF9UWVBFIChiYXNlICsgMHg4MCkpCi0KLSNkZWZpbmUgRVRIRVJfQ05UQUNDKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDg0KSkKLSNkZWZpbmUgRVRIRVJfQ05UQUNDX0FERFJfT0ZTVAkJCQkJKDApCi0jZGVmaW5lIEVUSEVSX0NOVEFDQ19BRERSX01TSwkJCQkJKDB4RkYpCi0jZGVmaW5lIEVUSEVSX0NOVEFDQ19XUlJETl9PRlNUCQkJCQkoOCkKLSNkZWZpbmUgRVRIRVJfQ05UQUNDX1dSUkROX01TSwkJCQkJKDB4MTAwKQotI2RlZmluZSBFVEhFUl9DTlRBQ0NfQ0xFQVJfT0ZTVAkJCQkJKDkpCi0jZGVmaW5lIEVUSEVSX0NOVEFDQ19DTEVBUl9NU0sJCQkJCSgweDIwMCkKLQotI2RlZmluZSBFVEhFUl9UWFJNSU5URU4oYmFzZSkJCQkJCQkJKEVUSEVSMDBfVFlQRSAoYmFzZSArIDB4ODgpKQotI2RlZmluZSBFVEhFUl9UWFJNSU5URU5fTVNLCQkJCQkJKDB4M0ZGRkZGRkYpCi0KLSNkZWZpbmUgRVRIRVJfUlhSTUlOVEVOKGJhc2UpCQkJCQkJCShFVEhFUjAwX1RZUEUgKGJhc2UgKyAweDhDKSkKLSNkZWZpbmUgRVRIRVJfUlhSTUlOVEVOX01TSwkJCQkJCSgweEZGRkZGRikKLQotLyoKLSoJUk1PTiBSZWdpc3RlcnMKLSovCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjAJCQkJCQkweDAKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMQkJCQkJCTB4MQotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04yCQkJCQkJMHgyCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjMJCQkJCQkweDMKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9ONAkJCQkJCTB4NAotI2RlZmluZQkJUk1PTl9DT0xMSVNJT041CQkJCQkJMHg1Ci0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjYJCQkJCQkweDYKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9ONwkJCQkJCTB4NwotI2RlZmluZQkJUk1PTl9DT0xMSVNJT044CQkJCQkJMHg4Ci0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjkJCQkJCQkweDkKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTAJCQkJCTB4YQotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xMQkJCQkJMHhiCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjEyCQkJCQkweGMKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTMJCQkJCTB4ZAotI2RlZmluZQkJUk1PTl9DT0xMSVNJT04xNAkJCQkJMHhlCi0jZGVmaW5lCQlSTU9OX0NPTExJU0lPTjE1CQkJCQkweGYKLSNkZWZpbmUJCVJNT05fQ09MTElTSU9OMTYJCQkJCTB4MTAKLSNkZWZpbmUJCVJNT05fRlJBTUVTX1dJVEhfREVGRVJSRURfWE1JU1NJT05TCTB4MTEKLSNkZWZpbmUJCVJNT05fTEFURV9DT0xMSVNJT05TCQkJCTB4MTIKLSNkZWZpbmUJCVJNT05fRlJBTUVTX0xPU1RfRFVFX1RPX01BQ19YTUlUCTB4MTMKLSNkZWZpbmUJCVJNT05fQ0FSUklFUl9TRU5TRV9FUlJPUlMJCQkweDE0Ci0jZGVmaW5lCQlSTU9OX0ZSQU1FU19XSVRIX0VYQ0VTU0lWRV9ERUZFUkFMCTB4MTUKLSNkZWZpbmUJCVJNT05fVU5JQ0FTVF9GUkFNRVNfVFJBTlNNSVRURURfT0sJMHgxNgotI2RlZmluZQkJUk1PTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVRURURfT0sJMHgxNwotI2RlZmluZQkJUk1PTl9CUk9BRENBU1RfRlJBTUVTX1hNSVRURURfT0sJMHgxOAotI2RlZmluZQkJUk1PTl9TUUVfVEVTVF9FUlJPUlMJCQkJMHgxOQotI2RlZmluZQkJUk1PTl9QQVVTRV9NQUNDVFJMX0ZSQU1FU19YTUlUVEVECTB4MUEKLSNkZWZpbmUJCVJNT05fTUFDQ1RSTF9GUkFNRVNfWE1JVFRFRAkJCTB4MUIKLSNkZWZpbmUJCVJNT05fVkxBTl9GUkFNRVNfWE1JVFRFRAkJCTB4MUMKLSNkZWZpbmUJCVJNT05fT0NURVRTX1hNSVRURURfT0sJCQkJMHgxRAotI2RlZmluZQkJUk1PTl9PQ1RFVFNfWE1JVFRFRF9PS19ISQkJCTB4MUUKLQotI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVMwCQkJCTB4NDAKLSNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTMQkJCQkweDQxCi0jZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzIJCQkJMHg0MgotI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVMzCQkJCTB4NDMKLSNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTNAkJCQkweDQ0Ci0jZGVmaW5lCQlSTU9OX1JYX1BBQ0tFVF9TSVpFUzUJCQkJMHg0NQotI2RlZmluZQkJUk1PTl9SWF9QQUNLRVRfU0laRVM2CQkJCTB4NDYKLSNkZWZpbmUJCVJNT05fUlhfUEFDS0VUX1NJWkVTNwkJCQkweDQ3Ci0jZGVmaW5lCQlSTU9OX0ZSQU1FX0NIRUNLX1NFUVVFTkNFX0VSUk9SUwkweDQ4Ci0jZGVmaW5lCQlSTU9OX0FMSUdOTUVOVF9FUlJPUlMJCQkJMHg0OQotI2RlZmluZQkJUk1PTl9GUkFHTUVOVFMJCQkJCQkweDRBCi0jZGVmaW5lCQlSTU9OX0pBQkJFUlMJCQkJCQkweDRCCi0jZGVmaW5lCQlSTU9OX0ZSQU1FU19MT1NUX1RPX0lOVE1BQ1JDVkVSUgkweDRDCi0jZGVmaW5lCQlSTU9OX1VOSUNBU1RfRlJBTUVTX1JDVkRfT0sJCQkweDRECi0jZGVmaW5lCQlSTU9OX01VTFRJQ0FTVF9GUkFNRVNfUkNWRF9PSwkJMHg0RQotI2RlZmluZQkJUk1PTl9CUk9BRENBU1RfRlJBTUVTX1JDVkRfT0sJCTB4NEYKLSNkZWZpbmUJCVJNT05fSU5fUkFOR0VfTEVOR1RIX0VSUk9SUwkJCTB4NTAKLSNkZWZpbmUJCVJNT05fT1VUX09GX1JBTkdFX0xFTkdUSF9FUlJPUlMJCTB4NTEKLSNkZWZpbmUJCVJNT05fVkxBTl9GUkFNRVNfUkNWRAkJCQkweDUyCi0jZGVmaW5lCQlSTU9OX1BBVVNFX01BQ19DVFJMX0ZSQU1FU19SQ1ZECQkweDUzCi0jZGVmaW5lCQlSTU9OX01BQ19DVFJMX0ZSQU1FU19SQ1ZECQkJMHg1NAotI2RlZmluZQkJUk1PTl9PQ1RFVFNfUkNWRF9PSwkJCQkJMHg1NQotI2RlZmluZQkJUk1PTl9PQ1RFVFNfUkNWRF9PS19ISQkJCQkweDU2Ci0jZGVmaW5lCQlSTU9OX09DVEVUU19SQ1ZEX09USEVSCQkJCTB4NTcKLSNkZWZpbmUJCVJNT05fT0NURVRTX1JDVkRfT1RIRVJfSEkJCQkweDU4Ci0KLSNlbmRpZiAvKiBfX0VUSEVSMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvZXhjYWxpYnVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9leGNhbGlidXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM5MWRkNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9leGNhbGlidXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qIG1lZ2FmdW5jdGlvbiB3aXphcmQ6ICVBUk0tQmFzZWQgRXhjYWxpYnVyJQotICAgR0VORVJBVElPTjogU1RBTkRBUkQKLSAgIFZFUlNJT046IFdNMS4wCi0gICBNT0RVTEU6IEFSTS1CYXNlZCBFeGNhbGlidXIKLSAgIFBST0pFQ1Q6IGV4Y2FsaWJ1cgotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBGaWxlIE5hbWU6IHY6XGVtYmVkZGVkXGxpbnV4XGJvb3RsZHJcZXhjYWxpYnVyLmgKLSAgIE1lZ2FmdW5jdGlvbiBOYW1lKHMpOiBBUk0tQmFzZWQgRXhjYWxpYnVyCi0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICBUSElTIElTIEEgV0laQVJELUdFTkVSQVRFRCBGSUxFLiBETyBOT1QgRURJVCBUSElTIEZJTEUhCi0gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYJRVhDQUxJQlVSX0hfSU5DTFVERUQKLSNkZWZpbmUJRVhDQUxJQlVSX0hfSU5DTFVERUQKLQotI2RlZmluZSBFWENfREVGSU5FX1BST0NFU1NPUl9MSVRUTEVfRU5ESUFOCi0jZGVmaW5lIEVYQ19ERUZJTkVfQk9PVF9GUk9NX0ZMQVNICi0KLSNkZWZpbmUJRVhDX0lOUFVUX0NMS19GUkVRVUVOQ1kgKDUwMDAwMDAwKQotI2RlZmluZQlFWENfQUhCMV9DTEtfRlJFUVVFTkNZICgxNTAwMDAwMDApCi0jZGVmaW5lCUVYQ19BSEIyX0NMS19GUkVRVUVOQ1kgKDc1MDAwMDAwKQotI2RlZmluZQlFWENfU0RSQU1fQ0xLX0ZSRVFVRU5DWSAoNzUwMDAwMDApCi0KLS8qIFJlZ2lzdGVycyBCbG9jayAqLwotI2RlZmluZQlFWENfUkVHSVNURVJTX0JBU0UgKDB4N2ZmZmMwMDApCi0jZGVmaW5lCUVYQ19NT0RFX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDAwMCkKLSNkZWZpbmUJRVhDX0lPX0NUUkwwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDA0MCkKLSNkZWZpbmUJRVhDX01NQVAwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDA4MCkKLSNkZWZpbmUJRVhDX1BMRF9DT05GSUcwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDE0MCkKLSNkZWZpbmUJRVhDX1RJTUVSMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgyMDApCi0jZGVmaW5lCUVYQ19JTlRfQ1RSTDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4YzAwKQotI2RlZmluZQlFWENfQ0xPQ0tfQ1RSTDAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MzAwKQotI2RlZmluZQlFWENfV0FUQ0hET0cwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweGEwMCkKLSNkZWZpbmUJRVhDX1VBUlQwMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDI4MCkKLSNkZWZpbmUJRVhDX0VCSTAwX0JBU0UgKEVYQ19SRUdJU1RFUlNfQkFTRSArIDB4MzgwKQotI2RlZmluZQlFWENfU0RSQU0wMF9CQVNFIChFWENfUkVHSVNURVJTX0JBU0UgKyAweDQwMCkKLSNkZWZpbmUJRVhDX0FIQjEyX0JSSURHRV9DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHg4MDApCi0jZGVmaW5lCUVYQ19QTERfU1RSSVBFX0JSSURHRV9DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgxMDApCi0jZGVmaW5lCUVYQ19TVFJJUEVfUExEX0JSSURHRV9DVFJMMDBfQkFTRSAoRVhDX1JFR0lTVEVSU19CQVNFICsgMHgxMDApCi0KLSNkZWZpbmUJRVhDX1JFR0lTVEVSU19TSVpFICgweDAwMDA0MDAwKQotCi0vKiBFQkkgQmxvY2socykgKi8KLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzBfQkFTRSAoMHg0MDAwMDAwMCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzBfU0laRSAoMHgwMDQwMDAwMCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzBfV0lEVEggKDgpCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0swX05PTl9DQUNIRUFCTEUKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzFfQkFTRSAoMHg0MDQwMDAwMCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzFfU0laRSAoMHgwMDQwMDAwMCkKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzFfV0lEVEggKDE2KQotI2RlZmluZQlFWENfRUJJX0JMT0NLMV9OT05fQ0FDSEVBQkxFCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0syX0JBU0UgKDB4NDA4MDAwMDApCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0syX1NJWkUgKDB4MDA0MDAwMDApCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0syX1dJRFRIICgxNikKLSNkZWZpbmUJRVhDX0VCSV9CTE9DSzJfTk9OX0NBQ0hFQUJMRQotI2RlZmluZQlFWENfRUJJX0JMT0NLM19CQVNFICgweDQwYzAwMDAwKQotI2RlZmluZQlFWENfRUJJX0JMT0NLM19TSVpFICgweDAwNDAwMDAwKQotI2RlZmluZQlFWENfRUJJX0JMT0NLM19XSURUSCAoMTYpCi0jZGVmaW5lCUVYQ19FQklfQkxPQ0szX05PTl9DQUNIRUFCTEUKLQotLyogU0RSQU0gQmxvY2socykgKi8KLSNkZWZpbmUJRVhDX1NEUkFNX0JMT0NLMF9CQVNFICgweDAwMDAwMDAwKQotI2RlZmluZQlFWENfU0RSQU1fQkxPQ0swX1NJWkUgKDB4MDQwMDAwMDApCi0jZGVmaW5lCUVYQ19TRFJBTV9CTE9DSzBfV0lEVEggKDMyKQotI2RlZmluZQlFWENfU0RSQU1fQkxPQ0sxX0JBU0UgKDB4MDQwMDAwMDApCi0jZGVmaW5lCUVYQ19TRFJBTV9CTE9DSzFfU0laRSAoMHgwNDAwMDAwMCkKLSNkZWZpbmUJRVhDX1NEUkFNX0JMT0NLMV9XSURUSCAoMzIpCi0KLS8qIFNpbmdsZSBQb3J0IFNSQU0gQmxvY2socykgKi8KLSNkZWZpbmUJRVhDX1NQU1JBTV9CTE9DSzBfQkFTRSAoMHgwODAwMDAwMCkKLSNkZWZpbmUJRVhDX1NQU1JBTV9CTE9DSzBfU0laRSAoMHgwMDAyMDAwMCkKLSNkZWZpbmUJRVhDX1NQU1JBTV9CTE9DSzFfQkFTRSAoMHgwODAyMDAwMCkKLSNkZWZpbmUJRVhDX1NQU1JBTV9CTE9DSzFfU0laRSAoMHgwMDAyMDAwMCkKLQotLyogUExEIEJsb2NrKHMpICovCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0swX0JBU0UgKDB4ODAwMDAwMDApCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0swX1NJWkUgKDB4MDAwMDQwMDApCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0swX05PTl9DQUNIRUFCTEUKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzFfQkFTRSAoMHhmMDAwMDAwKQotI2RlZmluZQlFWENfUExEX0JMT0NLMV9TSVpFICgweDAwMDA0MDAwKQotI2RlZmluZQlFWENfUExEX0JMT0NLMV9OT05fQ0FDSEVBQkxFCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0syX0JBU0UgKDB4ODAwMDgwMDApCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0syX1NJWkUgKDB4MDAwMDQwMDApCi0jZGVmaW5lCUVYQ19QTERfQkxPQ0syX05PTl9DQUNIRUFCTEUKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzNfQkFTRSAoMHg4MDAwYzAwMCkKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzNfU0laRSAoMHgwMDAwNDAwMCkKLSNkZWZpbmUJRVhDX1BMRF9CTE9DSzNfTk9OX0NBQ0hFQUJMRQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9oYXJkd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTkyYzI5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2hhcmR3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMC9oYXJkd2FyZS5oCi0gKgotICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIEludGVncmF0b3IuCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAotI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKLQotI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+Ci0KLS8qCi0gKiBXaGVyZSBpbiB2aXJ0dWFsIG1lbW9yeSB0aGUgSU8gZGV2aWNlcyAodGltZXJzLCBzeXN0ZW0gY29udHJvbGxlcnMKLSAqIGFuZCBzbyBvbikKLSAqLwotI2RlZmluZSBJT19CQVNFCQkJMHhmMDAwMDAwMCAgICAgICAgICAgICAgICAgLy8gVkEgb2YgSU8gCi0jZGVmaW5lIElPX1NJWkUJCQkweDEwMDAwMDAwICAgICAgICAgICAgICAgICAvLyBIb3cgbXVjaD8KLSNkZWZpbmUgSU9fU1RBUlQJCUVYQ19SRUdJU1RFUlNfQkFTRSAgICAgICAgICAgICAgLy8gUEEgb2YgSU8KLS8qIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5ICovCi0jZGVmaW5lIElPX0FERFJFU1MoeCkgKCh4KSB8IDB4ZjAwMDAwMDApIAotCi0jZGVmaW5lIEZMQVNIX1ZCQVNFICAgICAgICAgICAgIDB4RkUwMDAwMDAKLSNkZWZpbmUgRkxBU0hfU0laRSAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBGTEFTSF9TVEFSVCAgICAgICAgICAgICBFWENfRUJJX0JMT0NLMF9CQVNFCi0jZGVmaW5lIEZMQVNIX1ZBRERSKHgpICgoeCl8MHhGRTAwMDAwMCkKLS8qCi0gKiBTaW1pbGFyIHRvIGFib3ZlLCBidXQgZm9yIFBDSSBhZGRyZXNzZXMgKG1lbW9yeSwgSU8sIENvbmZpZyBhbmQgdGhlCi0gKiBWMyBjaGlwIGl0c2VsZikuICBXQVJOSU5HOiB0aGlzIGhhcyB0byBtaXJyb3IgZGVmaW5pdGlvbnMgaW4gcGxhdGZvcm0uaAotICovCi0jaWYgMAotI2RlZmluZSBQQ0lfTUVNT1JZX1ZBRERSICAgICAgICAweGU4MDAwMDAwCi0jZGVmaW5lIFBDSV9DT05GSUdfVkFERFIgICAgICAgIDB4ZWMwMDAwMDAKLSNkZWZpbmUgUENJX1YzX1ZBRERSICAgICAgICAgICAgMHhlZDAwMDAwMAotI2RlZmluZSBQQ0lfSU9fVkFERFIgICAgICAgICAgICAweGVlMDAwMDAwCi0KLSNkZWZpbmUgUENJT19CQVNFCQlQQ0lfSU9fVkFERFIKLSNkZWZpbmUgUENJTUVNX0JBU0UJCVBDSV9NRU1PUllfVkFERFIKLQotCi0jZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCi0KLSNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4NjAwMAotI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0gCTB4MDAxMDAwMDAKLSNlbmRpZgotCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pbnRfY3RybDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pbnRfY3RybDAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZWM4NjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaW50X2N0cmwwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qCi0gKiAgCi0gKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEV4Y2FsaWJ1cgotICogIFRpbWVyIFRJTUVSMDAuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMSBBbHRlcmEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2lmbmRlZiBfX0lOVF9DVFJMMDBfSAotI2RlZmluZSBfX0lOVF9DVFJMMDBfSAotCi0jZGVmaW5lIElOVF9NUyhiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDAwICkpCi0jZGVmaW5lIElOVF9NU19GQ19NU0sgKDB4MTAwMDApCi0jZGVmaW5lIElOVF9NU19GQ19PRlNUICgxNikKLSNkZWZpbmUgSU5UX01TX00xX01TSyAoMHg4MDAwKQotI2RlZmluZSBJTlRfTVNfTTFfT0ZTVCAoMTUpCi0jZGVmaW5lIElOVF9NU19NMF9NU0sgKDB4NDAwMCkKLSNkZWZpbmUgSU5UX01TX00wX09GU1QgKDE0KQotI2RlZmluZSBJTlRfTVNfQUVfTVNLICgweDIwMDApCi0jZGVmaW5lIElOVF9NU19BRV9PRlNUICgxMykKLSNkZWZpbmUgSU5UX01TX1BFX01TSyAoMHgxMDAwKQotI2RlZmluZSBJTlRfTVNfUEVfT0ZTVCAoMTIpCi0jZGVmaW5lIElOVF9NU19FRV9NU0sgKDB4MDgwMCkKLSNkZWZpbmUgSU5UX01TX0VFX09GU1QgKDExKQotI2RlZmluZSBJTlRfTVNfUFNfTVNLICgweDA0MDApCi0jZGVmaW5lIElOVF9NU19QU19PRlNUICgxMCkKLSNkZWZpbmUgSU5UX01TX1QxX01TSyAoMHgwMjAwKQotI2RlZmluZSBJTlRfTVNfVDFfT0ZTVCAoOSkKLSNkZWZpbmUgSU5UX01TX1QwX01TSyAoMHgwMTAwKQotI2RlZmluZSBJTlRfTVNfVDBfT0ZTVCAoOCkKLSNkZWZpbmUgSU5UX01TX1VBX01TSyAoMHgwMDgwKQotI2RlZmluZSBJTlRfTVNfVUFfT0ZTVCAoNykKLSNkZWZpbmUgSU5UX01TX0lQX01TSyAoMHgwMDQwKQotI2RlZmluZSBJTlRfTVNfSVBfT0ZTVCAoNikKLSNkZWZpbmUgSU5UX01TX1A1X01TSyAoMHgwMDIwKQotI2RlZmluZSBJTlRfTVNfUDVfT0ZTVCAoNSkKLSNkZWZpbmUgSU5UX01TX1A0X01TSyAoMHgwMDEwKQotI2RlZmluZSBJTlRfTVNfUDRfT0ZTVCAoNCkKLSNkZWZpbmUgSU5UX01TX1AzX01TSyAoMHgwMDA4KQotI2RlZmluZSBJTlRfTVNfUDNfT0ZTVCAoMykKLSNkZWZpbmUgSU5UX01TX1AyX01TSyAoMHgwMDA0KQotI2RlZmluZSBJTlRfTVNfUDJfT0ZTVCAoMikKLSNkZWZpbmUgSU5UX01TX1AxX01TSyAoMHgwMDAyKQotI2RlZmluZSBJTlRfTVNfUDFfT0ZTVCAoMSkKLSNkZWZpbmUgSU5UX01TX1AwX01TSyAoMHgwMDAxKQotI2RlZmluZSBJTlRfTVNfUDBfT0ZTVCAoMCkKLQotI2RlZmluZSBJTlRfTUMoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgwNCApKQotI2RlZmluZSBJTlRfTUNfRkNfTVNLICgweDEwMDAwKQotI2RlZmluZSBJTlRfTUNfRkNfT0ZTVCAoMTYpCi0jZGVmaW5lIElOVF9NQ19NMV9NU0sgKDB4ODAwMCkKLSNkZWZpbmUgSU5UX01DX00xX09GU1QgKDE1KQotI2RlZmluZSBJTlRfTUNfTTBfTVNLICgweDQwMDApCi0jZGVmaW5lIElOVF9NQ19NMF9PRlNUICgxNCkKLSNkZWZpbmUgSU5UX01DX0FFX01TSyAoMHgyMDAwKQotI2RlZmluZSBJTlRfTUNfQUVfT0ZTVCAoMTMpCi0jZGVmaW5lIElOVF9NQ19QRV9NU0sgKDB4MTAwMCkKLSNkZWZpbmUgSU5UX01DX1BFX09GU1QgKDEyKQotI2RlZmluZSBJTlRfTUNfRUVfTVNLICgweDA4MDApCi0jZGVmaW5lIElOVF9NQ19FRV9PRlNUICgxMSkKLSNkZWZpbmUgSU5UX01DX1BTX01TSyAoMHgwNDAwKQotI2RlZmluZSBJTlRfTUNfUFNfT0ZTVCAoMTApCi0jZGVmaW5lIElOVF9NQ19UMV9NU0sgKDB4MDIwMCkKLSNkZWZpbmUgSU5UX01DX1QxX09GU1QgKDkpCi0jZGVmaW5lIElOVF9NQ19UMF9NU0sgKDB4MDEwMCkKLSNkZWZpbmUgSU5UX01DX1QwX09GU1QgKDgpCi0jZGVmaW5lIElOVF9NQ19VQV9NU0sgKDB4MDA4MCkKLSNkZWZpbmUgSU5UX01DX1VBX09GU1QgKDcpCi0jZGVmaW5lIElOVF9NQ19JUF9NU0sgKDB4MDA0MCkKLSNkZWZpbmUgSU5UX01DX0lQX09GU1QgKDYpCi0jZGVmaW5lIElOVF9NQ19QNV9NU0sgKDB4MDAyMCkKLSNkZWZpbmUgSU5UX01DX1A1X09GU1QgKDUpCi0jZGVmaW5lIElOVF9NQ19QNF9NU0sgKDB4MDAxMCkKLSNkZWZpbmUgSU5UX01DX1A0X09GU1QgKDQpCi0jZGVmaW5lIElOVF9NQ19QM19NU0sgKDB4MDAwOCkKLSNkZWZpbmUgSU5UX01DX1AzX09GU1QgKDMpCi0jZGVmaW5lIElOVF9NQ19QMl9NU0sgKDB4MDAwNCkKLSNkZWZpbmUgSU5UX01DX1AyX09GU1QgKDIpCi0jZGVmaW5lIElOVF9NQ19QMV9NU0sgKDB4MDAwMikKLSNkZWZpbmUgSU5UX01DX1AxX09GU1QgKDEpCi0jZGVmaW5lIElOVF9NQ19QMF9NU0sgKDB4MDAwMSkKLSNkZWZpbmUgSU5UX01DX1AwX09GU1QgKDApCi0KLSNkZWZpbmUgSU5UX1NTKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4MDggKSkKLSNkZWZpbmUgSU5UX1NTX0ZDX1NTSyAoMHg4MDAwKQotI2RlZmluZSBJTlRfU1NfRkNfT0ZTVCAoMTUpCi0jZGVmaW5lIElOVF9TU19NMV9TU0sgKDB4ODAwMCkKLSNkZWZpbmUgSU5UX1NTX00xX09GU1QgKDE1KQotI2RlZmluZSBJTlRfU1NfTTBfU1NLICgweDQwMDApCi0jZGVmaW5lIElOVF9TU19NMF9PRlNUICgxNCkKLSNkZWZpbmUgSU5UX1NTX0FFX1NTSyAoMHgyMDAwKQotI2RlZmluZSBJTlRfU1NfQUVfT0ZTVCAoMTMpCi0jZGVmaW5lIElOVF9TU19QRV9TU0sgKDB4MTAwMCkKLSNkZWZpbmUgSU5UX1NTX1BFX09GU1QgKDEyKQotI2RlZmluZSBJTlRfU1NfRUVfU1NLICgweDA4MDApCi0jZGVmaW5lIElOVF9TU19FRV9PRlNUICgxMSkKLSNkZWZpbmUgSU5UX1NTX1BTX1NTSyAoMHgwNDAwKQotI2RlZmluZSBJTlRfU1NfUFNfT0ZTVCAoMTApCi0jZGVmaW5lIElOVF9TU19UMV9TU0sgKDB4MDIwMCkKLSNkZWZpbmUgSU5UX1NTX1QxX09GU1QgKDkpCi0jZGVmaW5lIElOVF9TU19UMF9TU0sgKDB4MDEwMCkKLSNkZWZpbmUgSU5UX1NTX1QwX09GU1QgKDgpCi0jZGVmaW5lIElOVF9TU19VQV9TU0sgKDB4MDA4MCkKLSNkZWZpbmUgSU5UX1NTX1VBX09GU1QgKDcpCi0jZGVmaW5lIElOVF9TU19JUF9TU0sgKDB4MDA0MCkKLSNkZWZpbmUgSU5UX1NTX0lQX09GU1QgKDYpCi0jZGVmaW5lIElOVF9TU19QNV9TU0sgKDB4MDAyMCkKLSNkZWZpbmUgSU5UX1NTX1A1X09GU1QgKDUpCi0jZGVmaW5lIElOVF9TU19QNF9TU0sgKDB4MDAxMCkKLSNkZWZpbmUgSU5UX1NTX1A0X09GU1QgKDQpCi0jZGVmaW5lIElOVF9TU19QM19TU0sgKDB4MDAwOCkKLSNkZWZpbmUgSU5UX1NTX1AzX09GU1QgKDMpCi0jZGVmaW5lIElOVF9TU19QMl9TU0sgKDB4MDAwNCkKLSNkZWZpbmUgSU5UX1NTX1AyX09GU1QgKDIpCi0jZGVmaW5lIElOVF9TU19QMV9TU0sgKDB4MDAwMikKLSNkZWZpbmUgSU5UX1NTX1AxX09GU1QgKDEpCi0jZGVmaW5lIElOVF9TU19QMF9TU0sgKDB4MDAwMSkKLSNkZWZpbmUgSU5UX1NTX1AwX09GU1QgKDApCi0KLSNkZWZpbmUgSU5UX1JTKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4MEMgKSkKLSNkZWZpbmUgSU5UX1JTX0ZDX1JTSyAoMHgxMDAwMCkKLSNkZWZpbmUgSU5UX1JTX0ZDX09GU1QgKDE2KQotI2RlZmluZSBJTlRfUlNfTTFfUlNLICgweDgwMDApCi0jZGVmaW5lIElOVF9SU19NMV9PRlNUICgxNSkKLSNkZWZpbmUgSU5UX1JTX00wX1JTSyAoMHg0MDAwKQotI2RlZmluZSBJTlRfUlNfTTBfT0ZTVCAoMTQpCi0jZGVmaW5lIElOVF9SU19BRV9SU0sgKDB4MjAwMCkKLSNkZWZpbmUgSU5UX1JTX0FFX09GU1QgKDEzKQotI2RlZmluZSBJTlRfUlNfUEVfUlNLICgweDEwMDApCi0jZGVmaW5lIElOVF9SU19QRV9PRlNUICgxMikKLSNkZWZpbmUgSU5UX1JTX0VFX1JTSyAoMHgwODAwKQotI2RlZmluZSBJTlRfUlNfRUVfT0ZTVCAoMTEpCi0jZGVmaW5lIElOVF9SU19QU19SU0sgKDB4MDQwMCkKLSNkZWZpbmUgSU5UX1JTX1BTX09GU1QgKDEwKQotI2RlZmluZSBJTlRfUlNfVDFfUlNLICgweDAyMDApCi0jZGVmaW5lIElOVF9SU19UMV9PRlNUICg5KQotI2RlZmluZSBJTlRfUlNfVDBfUlNLICgweDAxMDApCi0jZGVmaW5lIElOVF9SU19UMF9PRlNUICg4KQotI2RlZmluZSBJTlRfUlNfVUFfUlNLICgweDAwODApCi0jZGVmaW5lIElOVF9SU19VQV9PRlNUICg3KQotI2RlZmluZSBJTlRfUlNfSVBfUlNLICgweDAwNDApCi0jZGVmaW5lIElOVF9SU19JUF9PRlNUICg2KQotI2RlZmluZSBJTlRfUlNfUDVfUlNLICgweDAwMjApCi0jZGVmaW5lIElOVF9SU19QNV9PRlNUICg1KQotI2RlZmluZSBJTlRfUlNfUDRfUlNLICgweDAwMTApCi0jZGVmaW5lIElOVF9SU19QNF9PRlNUICg0KQotI2RlZmluZSBJTlRfUlNfUDNfUlNLICgweDAwMDgpCi0jZGVmaW5lIElOVF9SU19QM19PRlNUICgzKQotI2RlZmluZSBJTlRfUlNfUDJfUlNLICgweDAwMDQpCi0jZGVmaW5lIElOVF9SU19QMl9PRlNUICgyKQotI2RlZmluZSBJTlRfUlNfUDFfUlNLICgweDAwMDIpCi0jZGVmaW5lIElOVF9SU19QMV9PRlNUICgxKQotI2RlZmluZSBJTlRfUlNfUDBfUlNLICgweDAwMDEpCi0jZGVmaW5lIElOVF9SU19QMF9PRlNUICgwKQotCi0jZGVmaW5lIElOVF9JRChiYXNlX2FkZHIpIChJTlRfQ1RSTDAwX1RZUEUgKGJhc2VfYWRkciAgKyAweDEwICkpCi0jZGVmaW5lIElOVF9JRF9JRF9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9JRF9JRF9PRlNUICgwKQotCi0jZGVmaW5lIElOVF9QTERfUFJJT1JJVFkoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgxNCApKQotI2RlZmluZSBJTlRfUExEX1BSSU9SSVRZX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QTERfUFJJT1JJVFlfUFJJX09GU1QgKDApCi0jZGVmaW5lIElOVF9QTERfUFJJT1JJVFlfR0FfTVNLICgweDQwKQotI2RlZmluZSBJTlRfUExEX1BSSU9SSVRZX0dBX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX01PREUoYmFzZV9hZGRyKSAoSU5UX0NUUkwwMF9UWVBFIChiYXNlX2FkZHIgICsgMHgxOCApKQotI2RlZmluZSBJTlRfTU9ERV9NT0RFX01TSyAoMHgzKQotI2RlZmluZSBJTlRfTU9ERV9NT0RFX09GU1QgKDApCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4ODAgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QMF9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AwX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4ODQgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QMV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AxX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4ODggKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QMl9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AyX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OEMgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QM19QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1AzX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0KGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OTAgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QNF9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A0X0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1KGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OTQgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QNV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1A1X0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OTQgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9JUF9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0lQX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4OUMgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9VQV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1VBX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QTAgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9UMF9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QwX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QTQgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9UMV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1QxX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QTggKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QU19QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BTX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QUMgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9FRV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0VFX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QjAgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9QRV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX1BFX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QjQgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9BRV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0FFX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00wKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QjggKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9NMF9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00wX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00xKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QkMgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9NMV9QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX00xX0ZRX09GU1QgKDYpCi0KLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDKGJhc2VfYWRkcikgKElOVF9DVFJMMDBfVFlQRSAoYmFzZV9hZGRyICArIDB4QzAgKSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX1BSSV9NU0sgKDB4M0YpCi0jZGVmaW5lIElOVF9QUklPUklUWV9GQ19QUklfT0ZTVCAoMCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX0ZRX01TSyAoMHg0MCkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZX0ZDX0ZRX09GU1QgKDYpCi0KLSNlbmRpZiAvKiBfX0lOVF9DVFJMMDBfSCAqLwotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmUxMDBjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2lvLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKLSNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCi0KLQotLyoKLSAqIEdlbmVyaWMgdmlydHVhbCByZWFkL3dyaXRlCi0gKi8KLS8qI2RlZmluZSBvdXRzdyAgIF9fYXJjaF93cml0ZXN3Ci0jZGVmaW5lIG91dHNsICAgX19hcmNoX3dyaXRlc2wKLSNkZWZpbmUgb3V0c2IgICBfX2FyY2hfd3JpdGVzYgotI2RlZmluZSBpbnNiICAgIF9fYXJjaF9yZWFkc2IKLSNkZWZpbmUgaW5zdyAgICBfX2FyY2hfcmVhZHN3Ci0jZGVmaW5lIGluc2wgICAgX19hcmNoX3JlYWRzbCovCi0KLSNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX21lbV9wY2koYSkgICAgICAgICAgICAoYSkgCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvaXJxcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzc1OGEzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL2lycXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2FtZWxvdC9pcnFzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0vKiBVc2UgdGhlIEV4Y2FsaWJ1ciBjaGlwIGRlZmluaXRpb25zICovCi0jZGVmaW5lIElOVF9DVFJMMDBfVFlQRQotI2luY2x1ZGUgImFzbS9hcmNoL2ludF9jdHJsMDAuaCIKLQotCi0jZGVmaW5lIElSUV9QTEQwICAgICAgICAgICAgICAgICAgICAgSU5UX01TX1AwX09GU1QKLSNkZWZpbmUgSVJRX1BMRDEgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUDFfT0ZTVAotI2RlZmluZSBJUlFfUExEMiAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QMl9PRlNUCi0jZGVmaW5lIElSUV9QTEQzICAgICAgICAgICAgICAgICAgICAgSU5UX01TX1AzX09GU1QKLSNkZWZpbmUgSVJRX1BMRDQgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUDRfT0ZTVAotI2RlZmluZSBJUlFfUExENSAgICAgICAgICAgICAgICAgICAgIElOVF9NU19QNV9PRlNUCi0jZGVmaW5lIElSUV9FWFQgICAgICAgICAgICAgICAgICAgICAgSU5UX01TX0lQX09GU1QKLSNkZWZpbmUgSVJRX1VBUlQgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfVUFfT0ZTVAotI2RlZmluZSBJUlFfVElNRVIwICAgICAgICAgICAgICAgICAgIElOVF9NU19UMF9PRlNUCi0jZGVmaW5lIElSUV9USU1FUjEgICAgICAgICAgICAgICAgICAgSU5UX01TX1QxX09GU1QKLSNkZWZpbmUgSVJRX1BMTCAgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfUExMX09GU1QKLSNkZWZpbmUgSVJRX0VCSSAgICAgICAgICAgICAgICAgICAgICBJTlRfTVNfRUJJX09GU1QKLSNkZWZpbmUgSVJRX1NUUklQRV9CUklER0UgICAgICAgICAgICBJTlRfTVNfUExMX09GU1QKLSNkZWZpbmUgSVJRX0FIQl9CUklER0UgICAgICAgICAgICAgICBJTlRfTVNfUExMX09GU1QKLSNkZWZpbmUgSVJRX0NPTU1SWCAgICAgICAgICAgICAgICAgICBJTlRfTVNfQ1JfT0ZTVAotI2RlZmluZSBJUlFfQ09NTVRYICAgICAgICAgICAgICAgICAgIElOVF9NU19DVF9PRlNUCi0jZGVmaW5lIElSUV9GQVNUX0NPTU0gICAgICAgICAgICAgICAgSU5UX01TX0ZDX09GU1QKLQotI2RlZmluZSBOUl9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgIChJTlRfTVNfRkNfT0ZTVCArIDEpCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL21vZGVfY3RybDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9tb2RlX2N0cmwwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGE3ZWZhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL21vZGVfY3RybDAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jaWZuZGVmIF9fTU9ERV9DVFJMMDBfSAotI2RlZmluZSBfX01PREVfQ1RSTDAwX0gKLQotLyoKLSAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgcmVzZXQgYW5kIG1vZGUgY29udHJvbAotICovCi0KLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0KLQotI2RlZmluZSBCT09UX0NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKSkKLSNkZWZpbmUgQk9PVF9DUl9CRl9NU0sgKDB4MSkKLSNkZWZpbmUgQk9PVF9DUl9CRl9PRlNUICgwKQotI2RlZmluZSBCT09UX0NSX0hNX01TSyAoMHgyKQotI2RlZmluZSBCT09UX0NSX0hNX09GU1QgKDEpCi0jZGVmaW5lIEJPT1RfQ1JfUkVfTVNLICgweDQpCi0jZGVmaW5lIEJPT1RfQ1JfUkVfT0ZTVCAoMikKLQotI2RlZmluZSBSRVNFVF9TUihCQVNFX0FERFIpIChNT0RFX0NUUkwwMF9UWVBFIChCQVNFX0FERFIgICsgMHg0ICkpCi0jZGVmaW5lIFJFU0VUX1NSX1dSX01TSyAoMHgxKQotI2RlZmluZSBSRVNFVF9TUl9XUl9PRlNUICgwKQotI2RlZmluZSBSRVNFVF9TUl9DUl9NU0sgKDB4MikKLSNkZWZpbmUgUkVTRVRfU1JfQ1JfT0ZTVCAoMSkKLSNkZWZpbmUgUkVTRVRfU1JfSlRfTVNLICgweDQpCi0jZGVmaW5lIFJFU0VUX1NSX0pUX09GU1QgKDIpCi0jZGVmaW5lIFJFU0VUX1NSX0VSX01TSyAoMHg4KQotI2RlZmluZSBSRVNFVF9TUl9FUl9PRlNUICgzKQotCi0jZGVmaW5lIElEX0NPREUoQkFTRV9BRERSKSAoTU9ERV9DVFJMMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDggKSkKLQotI2RlZmluZSBTUkFNMF9TUihCQVNFX0FERFIpIChNT0RFX0NUUkwwMF9UWVBFIChCQVNFX0FERFIgICsgMHgyMCApKQotI2RlZmluZSBTUkFNMF9TUl9TSVpFX01TSyAoMHhGRkZGRjAwMCkKLSNkZWZpbmUgU1JBTTBfU1JfU0laRV9PRlNUICgxMikKLQotI2RlZmluZSBTUkFNMV9TUihCQVNFX0FERFIpIChNT0RFX0NUUkwwMF9UWVBFIChCQVNFX0FERFIgICsgMHgyNCApKQotI2RlZmluZSBTUkFNMV9TUl9TSVpFX01TSyAoMHhGRkZGRjAwMCkKLSNkZWZpbmUgU1JBTTFfU1JfU0laRV9PRlNUICgxMikKLQotI2RlZmluZSBEUFNSQU0wX1NSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDMwICkpCi0KLSNkZWZpbmUgRFBTUkFNMF9TUl9NT0RFX01TSyAoMHhGKQotI2RlZmluZSBEUFNSQU0wX1NSX01PREVfT0ZTVCAoMCkKLSNkZWZpbmUgRFBTUkFNMF9TUl9HTEJMX01TSyAoMHgzMCkKLSNkZWZpbmUgRFBTUkFNMF9TUl9TSVpFX01TSyAoMHhGRkZGRjAwMCkKLSNkZWZpbmUgRFBTUkFNMF9TUl9TSVpFX09GU1QgKDEyKQotCi0jZGVmaW5lIERQU1JBTTBfTENSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDM0ICkpCi0jZGVmaW5lIERQU1JBTTBfTENSX0xDS0FERFJfTVNLICgweDFGRkUwKQotI2RlZmluZSBEUFNSQU0wX0xDUl9MQ0tBRERSX09GU1QgKDQpCi0KLSNkZWZpbmUgRFBTUkFNMV9TUihCQVNFX0FERFIpIChNT0RFX0NUUkwwMF9UWVBFIChCQVNFX0FERFIgICsgMHgzOCApKQotI2RlZmluZSBEUFNSQU0xX1NSX01PREVfTVNLICgweEYpCi0jZGVmaW5lIERQU1JBTTFfU1JfTU9ERV9PRlNUICgwKQotI2RlZmluZSBEUFNSQU0xX1NSX0dMQkxfTVNLICgweDMwKQotI2RlZmluZSBEUFNSQU0xX1NSX0dMQkxfT0ZTVCAoNCkKLSNkZWZpbmUgRFBTUkFNMV9TUl9TSVpFX01TSyAoMHhGRkZGRjAwMCkKLSNkZWZpbmUgRFBTUkFNMV9TUl9TSVpFX09GU1QgKDEyKQotCi0jZGVmaW5lIERQU1JBTTFfTENSKEJBU0VfQUREUikgKE1PREVfQ1RSTDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDNDICkpCi0jZGVmaW5lIERQU1JBTTFfTENSX0xDS0FERFJfTVNLICgweDFGRkUwKQotI2RlZmluZSBEUFNSQU0xX0xDUl9MQ0tBRERSX09GU1QgKDQpCi0KLSNlbmRpZiAvKiBfX01PREVfQ1RSTDAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wbGF0Zm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjliYjBmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsYXRmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgUExBVEZPUk1fSAotI2RlZmluZSBQTEFURk9STV9ICi0jaW5jbHVkZSAiZXhjYWxpYnVyLmgiCi0KLSNkZWZpbmUgTUFYSVJRTlVNIDE1IAotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsZF9jb25mMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3BsZF9jb25mMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmMmMzOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9wbGRfY29uZjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0jaWZuZGVmIF9fUExEX0NPTkYwMF9ICi0jZGVmaW5lIF9fUExEX0NPTkYwMF9ICi0KLS8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFBMRCBDb25maWd1cmF0aW9uIExvZ2ljCi0gKi8KLQotLyoKLSAqICAKLSAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgRXhjYWxpYnVyCi0gKiAgSW50ZXJydXB0IGNvbnRyb2xsZXIgSU5UX0NUUkwwMC4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotIAotI2RlZmluZSBDT05GSUdfQ09OVFJPTChCQVNFX0FERFIpIChQTERfQ09ORjAwX1RZUEUgKEJBU0VfQUREUikpICAKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfTEtfTVNLICgweDEpCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0xLX09GU1QgKDApCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0NPX01TSyAoMHgyKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9DT19PRlNUICgxKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9CX01TSyAgKDB4NCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfQl9PRlNUICgyKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9QQ19NU0sgKDB4OCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfUENfT0ZTVCAoMykKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfRV9NU0sgKDB4MTApCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0VfT0ZTVCAoNCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfRVNfTVNLICgweEUwKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FU19PRlNUICg1KQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9FU18wX01TSyAoMHgyMCkKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfRVNfMV9NU0sgKDB4NDApCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0VTXzJfTVNLICgweDgwKQotCi0jZGVmaW5lIENPTkZJR19DT05UUk9MX0NMT0NLKEJBU0VfQUREUikgKFBMRF9DT05GMDBfVFlQRSAoQkFTRV9BRERSICArIDB4NCApKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9DTE9DS19SQVRJT19NU0sgKDB4RkZGRikKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfQ0xPQ0tfUkFUSU9fT0ZTVCAoMCkKLQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9EQVRBKEJBU0VfQUREUikgKFBMRF9DT05GMDBfVFlQRSAoQkFTRV9BRERSICArIDB4OCApKQotI2RlZmluZSBDT05GSUdfQ09OVFJPTF9EQVRBX01TSyAoMHhGRkZGRkZGRikKLSNkZWZpbmUgQ09ORklHX0NPTlRST0xfREFUQV9PRlNUICgwKQotCi0jZGVmaW5lIENPTkZJR19VTkxPQ0soQkFTRV9BRERSKSAoUExEX0NPTkYwMF9UWVBFIChCQVNFX0FERFIgICsgMHhDICkpIAotI2RlZmluZSBDT05GSUdfVU5MT0NLX01TSyAoMHhGRkZGRkZGRikKLSNkZWZpbmUgQ09ORklHX1VOTE9DS19PRlNUICgwKQotCi0jZGVmaW5lIENPTkZJR19VTkxPQ0tfTUFHSUMgKDB4NTU0RTRDNEIpCi0KLSNlbmRpZiAvKiBfX1BMRF9DT05GMDBfSCAqLwotCi0KLQotCi0KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9zeXN0ZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ1YjA5Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi9zeXN0ZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvc3lzdGVtLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKLQotI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKLXsKLQkvKgotCSAqIFRoaXMgc2hvdWxkIGRvIGFsbCB0aGUgY2xvY2sgc3dpdGNoaW5nCi0JICogYW5kIHdhaXQgZm9yIGludGVycnVwdCB0cmlja3MKLQkgKi8KLQljcHVfZG9faWRsZSgpOwotfQotCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQotewotCS8qIEhtbS4uLiBXZSBjYW4gcHJvYmFibHkgZG8gc29tZXRoaW5nIHdpdGggdGhlIHdhdGNoZG9nLi4uICovCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdGRrcGh5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90ZGtwaHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxMDdiZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90ZGtwaHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogIGxpbnV4L2RyaXZlcnMvdGRrcGh5LmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaWZuZGVmIF9fVERLUEhZX0gKLSNkZWZpbmUgX19UREtQSFlfSAotCi0vKgotICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBUREsgNzhRMjEyMCBQSFkgCi0gKiB3aGljaCBpcyBvbiB0aGUgQ2FtZWxvdCBib2FyZAotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIEFsdGVyYSBDb3Jwb3JhdGlvbiAyMDAwLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotI2RlZmluZSBQSFlfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfQ09MVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfQ09MVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNykKLSNkZWZpbmUgUEhZX0NPTlRST0xfRFVQTEVYX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX0RVUExFWF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi0jZGVmaW5lIFBIWV9DT05UUk9MX1JBTkVHX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwKQotI2RlZmluZSBQSFlfQ09OVFJPTF9SQU5FR19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KQotI2RlZmluZSBQSFlfQ09OVFJPTF9JU09fTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwKQotI2RlZmluZSBQSFlfQ09OVFJPTF9JU09fT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgUEhZX0NPTlRST0xfUFdSRE5fTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX1BXUkROX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExKQotI2RlZmluZSBQSFlfQ09OVFJPTF9BTkVHRU5fTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX0FORUdFTl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyKQotI2RlZmluZSBQSFlfQ09OVFJPTF9TUEVFRFNMX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX1NQRUVEU0xfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEzKQotI2RlZmluZSBQSFlfQ09OVFJPTF9MT09QQktfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX0xPT1BCS19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0KQotI2RlZmluZSBQSFlfQ09OVFJPTF9SRVNFVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDApCi0jZGVmaW5lIFBIWV9DT05UUk9MX1JFU0VUX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1KQotCi0jZGVmaW5lIFBIWV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBQSFlfU1RBVFVTX0VUWERfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MSkKLSNkZWZpbmUgUEhZX1NUQVRVU19FWFREX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgUEhZX1NUQVRVU19KQUJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIpCi0jZGVmaW5lIFBIWV9TVEFUVVNfSkFCX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgUEhZX1NUQVRVU19MSU5LX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQpCi0jZGVmaW5lIFBIWV9TVEFUVVNfTElOS19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFBIWV9TVEFUVVNfQU5FR0FfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OCkKLSNkZWZpbmUgUEhZX1NUQVRVU19BTkVHQV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMykKLSNkZWZpbmUgUEhZX1NUQVRVU19SRkFVTFRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCkKLSNkZWZpbmUgUEhZX1NUQVRVU19SRkFVTFRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCkKLSNkZWZpbmUgUEhZX1NUQVRVU19BTkVHQ19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMCkKLSNkZWZpbmUgUEhZX1NUQVRVU19BTkVHQ19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX1NUQVRVU18xMFRfSF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDApCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTBUX0hfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExKQotI2RlZmluZSBQSFlfU1RBVFVTXzEwVF9GX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDApCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTBUX0ZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyKQotI2RlZmluZSBQSFlfU1RBVFVTXzEwMF9YX0hfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDApCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTAwX1hfSF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEzKQotI2RlZmluZSBQSFlfU1RBVFVTXzEwMF9YX0ZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDApCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTAwX1hfRl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0KQotI2RlZmluZSBQSFlfU1RBVFVTXzEwMFQ0X01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDApCi0jZGVmaW5lIFBIWV9TVEFUVVNfMTAwVDRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1KQotCi0jZGVmaW5lIFBIWV9JRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKQotI2RlZmluZSBQSFlfSUQxX09VSV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRikKLSNkZWZpbmUgUEhZX0lEMV9PVUlfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotCi0jZGVmaW5lIFBIWV9JRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzKQotI2RlZmluZSBQSFlfSUQyX1JOX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RikKLSNkZWZpbmUgUEhZX0lEMl9STl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfSUQyX01OX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4M0YwKQotI2RlZmluZSBQSFlfSUQyX01OX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCi0jZGVmaW5lIFBIWV9JRDJfT1VJX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGQzAwKQotI2RlZmluZSBQSFlfSUQyX09VSV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwKQotCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX1NFTEVDVE9SX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxRikKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfU0VMRUNUT1JfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BMF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTBfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0ExX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BMV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNikKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfQTJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0EyX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3KQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BM19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0EzX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9BNF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19BRFZFUlRJU0VNRU5UX0E0X09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9UQUZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkUwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9UQUZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfUkZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0FEVkVSVElTRU1FTlRfUkZfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEzKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9SU1ZEX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9SVlNEX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0KQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9OUF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfQURWRVJUSVNFTUVOVF9OUF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTUpCi0KLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9TNF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUYpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfUzRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX0E3X01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkUwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX0E3X09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9SRl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9SRl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEzKQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX0FDS19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQotI2RlZmluZSBQSFlfQVVUT19ORUdfTElOS19QQVJUTkVSX0FDS19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfTlBfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19MSU5LX1BBUlRORVJfTlBfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNSkKLQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX0xQQU5FR0FfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxKQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX0xQQU5FR0FfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9QUlhfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MikKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9QUlhfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fTlBBX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQpCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fTlBBX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX0xQTlBBX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4KQotI2RlZmluZSBQSFlfQVVUT19ORUdfRVhQQU5TSU9OX0xQTlBBX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMykKLSNkZWZpbmUgUEhZX0FVVE9fTkVHX0VYUEFOU0lPTl9QREZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTApCi0jZGVmaW5lIFBIWV9BVVRPX05FR19FWFBBTlNJT05fUERGX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQotCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTYpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUlhDQ19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUlhDQ19PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1BDU0JQX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1BDU0JQX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19SVlNQT0xfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfUlZTUE9MX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0FQT0xfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMCkgIAotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0FQT0xfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMF9ESVJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzBfRElSX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX0dQSU8wX0RBVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMF9EQVRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzFfRElSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMV9ESVJfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfR1BJTzFfREFUX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19HUElPMV9EQVRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfMTBCVF9OQVRVUkFMX0xPT1BCQUNLX0RBVF9NU0sgICAgICAgKDB4NDAwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDXzEwQlRfTkFUVVJBTF9MT09QQkFDS19EQVRfT0ZTVCAgICAgICgxMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ18xMEJUX1NRRV9URVNUX0lOSElCSVRfTVNLICAgICAgICAgICAoMHg4MDApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfMTBCVF9TUUVfVEVTVF9JTkhJQklUX09GU1QgICAgICAgICAgKDExKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1RYSElNX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQotI2RlZmluZSBQSFlfVkVORE9SX1NQRUNJRklDX1RYSElNX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTIpCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfSU5UX0xFVkVMX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDApCi0jZGVmaW5lIFBIWV9WRU5ET1JfU1BFQ0lGSUNfSU5UX0xFVkVMX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19SUFRSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKLSNkZWZpbmUgUEhZX1ZFTkRPUl9TUEVDSUZJQ19SUFRSX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1KQotCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTcpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9BTkVHX0NPTVBfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9BTkVHX0NPTVBfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUkZBVUxUX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUkZBVUxUX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xTX0NIR19JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xTX0NIR19JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MUF9BQ0tfSU5UX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MUF9BQ0tfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUERGX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUERGX0lOVF9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BSWF9JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BSWF9JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SWEVSX0lOVF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUlhFUl9JTlRfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNikKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0pBQkJFUl9JTlRfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9KQUJCRVJfSU5UX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfQU5FR19DT01QX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9BTkVHX0NPTVBfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfUkZBVUxUX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SRkFVTFRfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFNfQ0hHX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDApCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9MU19DSEdfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX0xQX0FDS19JRV9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfTFBfQUNLX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QREZfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BERl9JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTIpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9QUlhfSUVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1BSWF9JRV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFBIWV9JUlFfQ09OVFJPTF9SWEVSX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKLSNkZWZpbmUgUEhZX0lSUV9DT05UUk9MX1JYRVJfSUVfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0KQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfSkFCQkVSX0lFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQotI2RlZmluZSBQSFlfSVJRX0NPTlRST0xfSkFCQkVSX0lFX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTUpCi0KLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOCkKLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfUlhfTE9DS19NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDApCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX1JYX0xPQ0tfT0ZTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX1JYX1BBU1NfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwKQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19SWF9QQVNTX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19SQVRFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMCkKLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfUkFURV9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTApCi0jZGVmaW5lIFBIWV9ESUFHTk9TVElDX0RQTFhfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwKQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19EUExYX09GU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMSkKLSNkZWZpbmUgUEhZX0RJQUdOT1NUSUNfQU5FR0ZfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQotI2RlZmluZSBQSFlfRElBR05PU1RJQ19BTkVHRl9PRlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMikKLQotI2VuZGlmIC8qIF9fVERLUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWVyMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3RpbWVyMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhM2ZiNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi90aW1lcjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogIAotICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBFeGNhbGlidXIKLSAqICBUaW1lciBUSU1FUjAwLgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaWZuZGVmIF9fVElNRVIwMF9ICi0jZGVmaW5lIF9fVElNRVIwMF9ICi0KLS8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIHRpbWVycwotICovCi0KLQotI2RlZmluZSBUSU1FUjBfQ1IoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMCApKQotI2RlZmluZSBUSU1FUjBfQ1JfQl9NU0sgKDB4MjApCi0jZGVmaW5lIFRJTUVSMF9DUl9CX09GU1QgKDB4NSkKLSNkZWZpbmUgVElNRVIwX0NSX1NfTVNLICAoMHgxMCkKLSNkZWZpbmUgVElNRVIwX0NSX1NfT0ZTVCAoMHg0KQotI2RlZmluZSBUSU1FUjBfQ1JfQ0lfTVNLICgweDA4KQotI2RlZmluZSBUSU1FUjBfQ1JfQ0lfT0ZTVCAoMHgzKQotI2RlZmluZSBUSU1FUjBfQ1JfSUVfTVNLICgweDA0KQotI2RlZmluZSBUSU1FUjBfQ1JfSUVfT0ZTVCAoMHgyKQotI2RlZmluZSBUSU1FUjBfQ1JfTU9ERV9NU0sgKDB4MykKLSNkZWZpbmUgVElNRVIwX0NSX01PREVfT0ZTVCAoMCkKLSNkZWZpbmUgVElNRVIwX0NSX01PREVfRlJFRSAoMCkKLSNkZWZpbmUgVElNRVIwX0NSX01PREVfT05FICAoMSkKLSNkZWZpbmUgVElNRVIwX0NSX01PREVfSU5UVkwgKDIpCi0KLSNkZWZpbmUgVElNRVIwX1NSKEJBU0VfQUREUikgKFRJTUVSMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDAgKSkKLSNkZWZpbmUgVElNRVIwX1NSX0JfTVNLICgweDIwKQotI2RlZmluZSBUSU1FUjBfU1JfQl9PRlNUICgweDUpCi0jZGVmaW5lIFRJTUVSMF9TUl9TX01TSyAgKDB4MTApCi0jZGVmaW5lIFRJTUVSMF9TUl9TX09GU1QgKDB4NCkKLSNkZWZpbmUgVElNRVIwX1NSX0NJX01TSyAoMHgwOCkKLSNkZWZpbmUgVElNRVIwX1NSX0NJX09GU1QgKDB4MykKLSNkZWZpbmUgVElNRVIwX1NSX0lFX01TSyAoMHgwNCkKLSNkZWZpbmUgVElNRVIwX1NSX0lFX09GU1QgKDB4MikKLSNkZWZpbmUgVElNRVIwX1NSX01PREVfTVNLICgweDMpCi0jZGVmaW5lIFRJTUVSMF9TUl9NT0RFX09GU1QgKDApCi0jZGVmaW5lIFRJTUVSMF9TUl9NT0RFX0ZSRUUgKDApCi0jZGVmaW5lIFRJTUVSMF9TUl9NT0RFX09ORSAgKDEpCi0jZGVmaW5lIFRJTUVSMF9TUl9NT0RFX0lOVFZMICgyKQotCi0jZGVmaW5lIFRJTUVSMF9QUkVTQ0FMRShCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDAxMCApKQotI2RlZmluZSBUSU1FUjBfTElNSVQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMjAgKSkKLSNkZWZpbmUgVElNRVIwX1JFQUQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwMzAgKSkKLQotI2RlZmluZSBUSU1FUjFfQ1IoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHg0MCApKQotI2RlZmluZSBUSU1FUjFfQ1JfQl9NU0sgKDB4MjApCi0jZGVmaW5lIFRJTUVSMV9DUl9CX09GU1QgKDB4NSkKLSNkZWZpbmUgVElNRVIxX0NSX1NfTVNLICAoMHgxMCkKLSNkZWZpbmUgVElNRVIxX0NSX1NfT0ZTVCAoMHg0KQotI2RlZmluZSBUSU1FUjFfQ1JfQ0lfTVNLICgweDA4KQotI2RlZmluZSBUSU1FUjFfQ1JfQ0lfT0ZTVCAoMHgzKQotI2RlZmluZSBUSU1FUjFfQ1JfSUVfTVNLICgweDA0KQotI2RlZmluZSBUSU1FUjFfQ1JfSUVfT0ZTVCAoMHgyKQotI2RlZmluZSBUSU1FUjFfQ1JfTU9ERV9NU0sgKDB4MykKLSNkZWZpbmUgVElNRVIxX0NSX01PREVfT0ZTVCAoMCkKLSNkZWZpbmUgVElNRVIxX0NSX01PREVfRlJFRSAoMCkKLSNkZWZpbmUgVElNRVIxX0NSX01PREVfT05FICAoMSkKLSNkZWZpbmUgVElNRVIxX0NSX01PREVfSU5UVkwgKDIpCi0KLSNkZWZpbmUgVElNRVIxX1NSKEJBU0VfQUREUikgKFRJTUVSMDBfVFlQRSAoQkFTRV9BRERSICArIDB4NDAgKSkKLSNkZWZpbmUgVElNRVIxX1NSX0JfTVNLICgweDIwKQotI2RlZmluZSBUSU1FUjFfU1JfQl9PRlNUICgweDUpCi0jZGVmaW5lIFRJTUVSMV9TUl9TX01TSyAgKDB4MTApCi0jZGVmaW5lIFRJTUVSMV9TUl9TX09GU1QgKDB4NCkKLSNkZWZpbmUgVElNRVIxX1NSX0NJX01TSyAoMHgwOCkKLSNkZWZpbmUgVElNRVIxX1NSX0NJX09GU1QgKDB4MykKLSNkZWZpbmUgVElNRVIxX1NSX0lFX01TSyAoMHgwNCkKLSNkZWZpbmUgVElNRVIxX1NSX0lFX09GU1QgKDB4MikKLSNkZWZpbmUgVElNRVIxX1NSX01PREVfTVNLICgweDMpCi0jZGVmaW5lIFRJTUVSMV9TUl9NT0RFX09GU1QgKDApCi0jZGVmaW5lIFRJTUVSMV9TUl9NT0RFX0ZSRUUgKDApCi0jZGVmaW5lIFRJTUVSMV9TUl9NT0RFX09ORSAgKDEpCi0jZGVmaW5lIFRJTUVSMV9TUl9NT0RFX0lOVFZMICgyKQotCi0jZGVmaW5lIFRJTUVSMV9QUkVTQ0FMRShCQVNFX0FERFIpIChUSU1FUjAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDA1MCApKQotI2RlZmluZSBUSU1FUjFfTElNSVQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwNjAgKSkKLSNkZWZpbmUgVElNRVIxX1JFQUQoQkFTRV9BRERSKSAoVElNRVIwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwNzAgKSkKLQotI2VuZGlmIC8qIF9fVElNRVIwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91YXJ0MDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VhcnQwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWJkODkxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3VhcnQwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaWZuZGVmIF9fVUFSVDAwX0gKLSNkZWZpbmUgX19VQVJUMDBfSAotCi0vKgotICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBVQVJUCi0gKi8KLQotI2RlZmluZSBVQVJUX1RYX0ZJRk9fU0laRSAgICAgICgxNSkKLQotI2RlZmluZSBVQVJUX1JTUihCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MDAgKSkKLSNkZWZpbmUgVUFSVF9SU1JfUlhfTEVWRUxfTVNLICgweDFmKQotI2RlZmluZSBVQVJUX1JTUl9SWF9MRVZFTF9PRlNUICgwKQotI2RlZmluZSBVQVJUX1JTUl9SRV9NU0sgKDB4ODApCi0jZGVmaW5lIFVBUlRfUlNSX1JFX09GU1QgKDcpCi0KLSNkZWZpbmUgVUFSVF9SRFMoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDA0ICkpCi0jZGVmaW5lIFVBUlRfUkRTX0JJX01TSyAoMHg4KQotI2RlZmluZSBVQVJUX1JEU19CSV9PRlNUICg0KQotI2RlZmluZSBVQVJUX1JEU19GRV9NU0sgKDB4NCkKLSNkZWZpbmUgVUFSVF9SRFNfRkVfT0ZTVCAoMikKLSNkZWZpbmUgVUFSVF9SRFNfUEVfTVNLICgweDIpCi0jZGVmaW5lIFVBUlRfUkRTX1BFX09GU1QgKDEpCi0jZGVmaW5lIFVBUlRfUkRTX09FX01TSyAoMHgxKQotI2RlZmluZSBVQVJUX1JEU19PRV9PRlNUICgwKQotCi0jZGVmaW5lIFVBUlRfUkQoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDA4ICkpCi0jZGVmaW5lIFVBUlRfUkRfUlhfREFUQV9NU0sgKDB4ZmYpCi0jZGVmaW5lIFVBUlRfUkRfUlhfREFUQV9PRlNUICgwKQotCi0jZGVmaW5lIFVBUlRfVFNSKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgwYyApKQotI2RlZmluZSBVQVJUX1RTUl9UWF9MRVZFTF9NU0sgKDB4MWYpCi0jZGVmaW5lIFVBUlRfVFNSX1RYX0xFVkVMX09GU1QgKDApCi0jZGVmaW5lIFVBUlRfVFNSX1RYSV9NU0sgKDB4ODApCi0jZGVmaW5lIFVBUlRfVFNSX1RYSV9PRlNUICg3KQotCi0jZGVmaW5lIFVBUlRfVEQoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDEwICkpCi0jZGVmaW5lIFVBUlRfVERfVFhfREFUQV9NU0sgKDB4ZmYpCi0jZGVmaW5lIFVBUlRfVERfVFhfREFUQV9PRlNUICgwKQotCi0jZGVmaW5lIFVBUlRfRkNSKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgxNCApKQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfTVNLICgweGQwKQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfT0ZTVCAoNSkKLSNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzEgKDB4MDApCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl8yICgweDIwKQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfNCAoMHg0MCkKLSNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzYgKDB4NjApCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl84ICgweDgwKQotI2RlZmluZSBVQVJUX0ZDUl9SWF9USFJfMTAgKDB4YTApCi0jZGVmaW5lIFVBUlRfRkNSX1JYX1RIUl8xMiAoMHhjMCkKLSNkZWZpbmUgVUFSVF9GQ1JfUlhfVEhSXzE0ICgweGQwKQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfTVNLICgweDFjKQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfT0ZTVCAoMikKLSNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzAgKDB4MDApCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl8yICgweDA0KQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfNCAoMHgwOCkKLSNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzggKDB4MGMpCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl8xMCAoMHgxMCkKLSNkZWZpbmUgVUFSVF9GQ1JfVFhfVEhSXzEyICgweDE0KQotI2RlZmluZSBVQVJUX0ZDUl9UWF9USFJfMTQgKDB4MTgpCi0jZGVmaW5lIFVBUlRfRkNSX1RYX1RIUl8xNSAoMHgxYykKLSNkZWZpbmUgVUFSVF9GQ1JfUkNfTVNLICgweDAyKQotI2RlZmluZSBVQVJUX0ZDUl9SQ19PRlNUICgxKQotI2RlZmluZSBVQVJUX0ZDUl9UQ19NU0sgKDB4MDEpCi0jZGVmaW5lIFVBUlRfRkNSX1RDX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9JRVMoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDE4ICkpCi0jZGVmaW5lIFVBUlRfSUVTX01FX01TSyAoMHg4KQotI2RlZmluZSBVQVJUX0lFU19NRV9PRlNUICgzKQotI2RlZmluZSBVQVJUX0lFU19USUVfTVNLICgweDQpCi0jZGVmaW5lIFVBUlRfSUVTX1RJRV9PRlNUICgyKQotI2RlZmluZSBVQVJUX0lFU19URV9NU0sgKDB4MikKLSNkZWZpbmUgVUFSVF9JRVNfVEVfT0ZTVCAoMSkKLSNkZWZpbmUgVUFSVF9JRVNfUkVfTVNLICgweDEpCi0jZGVmaW5lIFVBUlRfSUVTX1JFX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9JRUMoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDFjICkpCi0jZGVmaW5lIFVBUlRfSUVDX01FX01TSyAoMHg4KQotI2RlZmluZSBVQVJUX0lFQ19NRV9PRlNUICgzKQotI2RlZmluZSBVQVJUX0lFQ19USUVfTVNLICgweDQpCi0jZGVmaW5lIFVBUlRfSUVDX1RJRV9PRlNUICgyKQotI2RlZmluZSBVQVJUX0lFQ19URV9NU0sgKDB4MikKLSNkZWZpbmUgVUFSVF9JRUNfVEVfT0ZTVCAoMSkKLSNkZWZpbmUgVUFSVF9JRUNfUkVfTVNLICgweDEpCi0jZGVmaW5lIFVBUlRfSUVDX1JFX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9JU1IoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDIwICkpCi0jZGVmaW5lIFVBUlRfSVNSX01JX01TSyAoMHg4KQotI2RlZmluZSBVQVJUX0lTUl9NSV9PRlNUICgzKQotI2RlZmluZSBVQVJUX0lTUl9USUlfTVNLICgweDQpCi0jZGVmaW5lIFVBUlRfSVNSX1RJSV9PRlNUICgyKQotI2RlZmluZSBVQVJUX0lTUl9USV9NU0sgKDB4MikKLSNkZWZpbmUgVUFSVF9JU1JfVElfT0ZTVCAoMSkKLSNkZWZpbmUgVUFSVF9JU1JfUklfTVNLICgweDEpCi0jZGVmaW5lIFVBUlRfSVNSX1JJX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9JSUQoQkFTRV9BRERSKSAoVUFSVDAwX1RZUEUgKEJBU0VfQUREUiAgKyAweDI0ICkpCi0jZGVmaW5lIFVBUlRfSUlEX0lJRF9NU0sgKDB4NykKLSNkZWZpbmUgVUFSVF9JSURfSUlEX09GU1QgKDApCi0KLSNkZWZpbmUgVUFSVF9NQyhCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MjggKSkKLSNkZWZpbmUgVUFSVF9NQ19PRV9NU0sgKDB4NDApCi0jZGVmaW5lIFVBUlRfTUNfT0VfT0ZTVCAoNikKLSNkZWZpbmUgVUFSVF9NQ19TUF9NU0sgKDB4MjApCi0jZGVmaW5lIFVBUlRfTUNfU1BfT0ZTVCAoNSkKLSNkZWZpbmUgVUFSVF9NQ19FUF9NU0sgKDB4MTApCi0jZGVmaW5lIFVBUlRfTUNfRVBfT0ZTVCAoNCkKLSNkZWZpbmUgVUFSVF9NQ19QRV9NU0sgKDB4MDgpCi0jZGVmaW5lIFVBUlRfTUNfUEVfT0ZTVCAoMykKLSNkZWZpbmUgVUFSVF9NQ19TVF9NU0sgKDB4MDQpCi0jZGVmaW5lIFVBUlRfTUNfU1RfT05FICgweDApCi0jZGVmaW5lIFVBUlRfTUNfU1RfVFdPICgweDA0KQotI2RlZmluZSBVQVJUX01DX1NUX09GU1QgKDIpCi0jZGVmaW5lIFVBUlRfTUNfQ0xTX01TSyAoMHgwMykKLSNkZWZpbmUgVUFSVF9NQ19DTFNfT0ZTVCAoMCkKLSNkZWZpbmUgVUFSVF9NQ19DTFNfQ0hBUkxFTl81ICgwKQotI2RlZmluZSBVQVJUX01DX0NMU19DSEFSTEVOXzYgKDEpCi0jZGVmaW5lIFVBUlRfTUNfQ0xTX0NIQVJMRU5fNyAoMikKLSNkZWZpbmUgVUFSVF9NQ19DTFNfQ0hBUkxFTl84ICgzKQotCi0jZGVmaW5lIFVBUlRfTUNSKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgyYyApKQotI2RlZmluZSBVQVJUX01DUl9BQ19NU0sgKDB4ODApCi0jZGVmaW5lIFVBUlRfTUNSX0FDX09GU1QgKDcpCi0jZGVmaW5lIFVBUlRfTUNSX0FSX01TSyAoMHg0MCkKLSNkZWZpbmUgVUFSVF9NQ1JfQVJfT0ZTVCAoNikKLSNkZWZpbmUgVUFSVF9NQ1JfQlJfTVNLICgweDIwKQotI2RlZmluZSBVQVJUX01DUl9CUl9PRlNUICg1KQotI2RlZmluZSBVQVJUX01DUl9MQl9NU0sgKDB4MTApCi0jZGVmaW5lIFVBUlRfTUNSX0xCX09GU1QgKDQpCi0jZGVmaW5lIFVBUlRfTUNSX0RDRF9NU0sgKDB4MDgpCi0jZGVmaW5lIFVBUlRfTUNSX0RDRF9PRlNUICgzKQotI2RlZmluZSBVQVJUX01DUl9SSV9NU0sgKDB4MDQpCi0jZGVmaW5lIFVBUlRfTUNSX1JJX09GU1QgKDIpCi0jZGVmaW5lIFVBUlRfTUNSX0RUUl9NU0sgKDB4MDIpCi0jZGVmaW5lIFVBUlRfTUNSX0RUUl9PRlNUICgxKQotI2RlZmluZSBVQVJUX01DUl9SVFNfTVNLICgweDAxKQotI2RlZmluZSBVQVJUX01DUl9SVFNfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX01TUihCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzAgKSkKLSNkZWZpbmUgVUFSVF9NU1JfRENEX01TSyAoMHg4MCkKLSNkZWZpbmUgVUFSVF9NU1JfRENEX09GU1QgKDcpCi0jZGVmaW5lIFVBUlRfTVNSX1JJX01TSyAoMHg0MCkKLSNkZWZpbmUgVUFSVF9NU1JfUklfT0ZTVCAoNikKLSNkZWZpbmUgVUFSVF9NU1JfRFNSX01TSyAoMHgyMCkKLSNkZWZpbmUgVUFSVF9NU1JfRFNSX09GU1QgKDUpCi0jZGVmaW5lIFVBUlRfTVNSX0NUU19NU0sgKDB4MTApCi0jZGVmaW5lIFVBUlRfTVNSX0NUU19PRlNUICg0KQotI2RlZmluZSBVQVJUX01TUl9ERENEX01TSyAoMHgwOCkKLSNkZWZpbmUgVUFSVF9NU1JfRERDRF9PRlNUICgzKQotI2RlZmluZSBVQVJUX01TUl9URVJJX01TSyAoMHgwNCkKLSNkZWZpbmUgVUFSVF9NU1JfVEVSSV9PRlNUICgyKQotI2RlZmluZSBVQVJUX01TUl9ERFNSX01TSyAoMHgwMikKLSNkZWZpbmUgVUFSVF9NU1JfRERTUl9PRlNUICgxKQotI2RlZmluZSBVQVJUX01TUl9EQ1RTX01TSyAoMHgwMSkKLSNkZWZpbmUgVUFSVF9NU1JfRENUU19PRlNUICgwKQotCi0jZGVmaW5lIFVBUlRfRElWX0xPKEJBU0VfQUREUikgKFVBUlQwMF9UWVBFIChCQVNFX0FERFIgICsgMHgzNCApKQotI2RlZmluZSBVQVJUX0RJVl9MT19ESVZfTVNLICgweGZmKQotI2RlZmluZSBVQVJUX0RJVl9MT19ESVZfT0ZTVCAoMCkKLQotI2RlZmluZSBVQVJUX0RJVl9ISShCQVNFX0FERFIpIChVQVJUMDBfVFlQRSAoQkFTRV9BRERSICArIDB4MzggKSkKLSNkZWZpbmUgVUFSVF9ESVZfSElfRElWX01TSyAoMHhmZikKLSNkZWZpbmUgVUFSVF9ESVZfSElfRElWX09GU1QgKDApCi0KLSNlbmRpZiAvKiBfX1VBUlQwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91bmNvbXByZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZmUwZTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdW5jb21wcmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi91bmNvbXByZXNzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotI2luY2x1ZGUgImFzbS9hcmNoL3BsYXRmb3JtLmgiCi0jaW5jbHVkZSAiYXNtL2hhcmR3YXJlLmgiCi0jZGVmaW5lIFVBUlQwMF9UWVBFICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKQotI2luY2x1ZGUgImFzbS9hcmNoL3VhcnQwMC5oIgotCi0vKgotICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCi0gKi8KLXN0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQotewotCXdoaWxlICgqcykgewotCQl3aGlsZSAoKCpVQVJUX1RTUihFWENfVUFSVDAwX0JBU0UpICYKLQkJICAgICAgIFVBUlRfVFNSX1RYX0xFVkVMX01TSyk9PTE1KQotCQkJYmFycmllcigpOwotCi0JCSpVQVJUX1REKEVYQ19VQVJUMDBfQkFTRSkgPSAqczsKLQotCQlpZiAoKnMgPT0gJ1xuJykgewotCQkJd2hpbGUgKCgqVUFSVF9UU1IoRVhDX1VBUlQwMF9CQVNFKSAmCi0JCQkgICAgICAgVUFSVF9UU1JfVFhfTEVWRUxfTVNLKT09MTUpCi0JCQkJYmFycmllcigpOwotCi0JCQkqVUFSVF9URChFWENfVUFSVDAwX0JBU0UpID0gJ1xyJzsKLQkJfQotCQlzKys7Ci0JfQotfQotCi0vKgotICogbm90aGluZyB0byBkbwotICovCi0jZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKLQotI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaAppbmRleCBmNzJiNjMzLi4zZDcyODNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oCkBAIC0xNzUsNiArMTc1LDggQEAKIAogI2VuZGlmIC8qIF9fTElOVVhfQVJNX0FSQ0hfXyAqLwogCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewogCWludCBjLCBvbGQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9pby5oCmluZGV4IDBjZjRkNGYuLmZkMDE0N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pby5oCkBAIC01Niw3ICs1NiwxMiBAQAogCiAvKgogICogQXJjaGl0ZWN0dXJlIGlvcmVtYXAgaW1wbGVtZW50YXRpb24uCisgKgorICogX19pb3JlbWFwIHRha2VzIENQVSBwaHlzaWNhbCBhZGRyZXNzLgorICoKKyAqIF9faW9yZW1hcF9wZm4gdGFrZXMgYSBQYWdlIEZyYW1lIE51bWJlciBhbmQgYW4gb2Zmc2V0IGludG8gdGhhdCBwYWdlCiAgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXBfcGZuKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKIApAQCAtMjYxLDYgKzI2Niw3IEBACiAgKgogICogaW9yZW1hcCB0YWtlcyBhIFBDSSBtZW1vcnkgYWRkcmVzcywgYXMgc3BlY2lmaWVkIGluCiAgKiBEb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0LgorICoKICAqLwogI2lmbmRlZiBfX2FyY2hfaW9yZW1hcAogI2RlZmluZSBpb3JlbWFwKGNvb2tpZSxzaXplKQkJX19pb3JlbWFwKGNvb2tpZSxzaXplLDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL21hcC5oCmluZGV4IGIzMzg5MzYuLjMzNTFiNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL21hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL21hcC5oCkBAIC0yNyw5ICsyNyw2IEBACiAjZGVmaW5lIE1UX1JPTQkJCTYKICNkZWZpbmUgTVRfSVhQMjAwMF9ERVZJQ0UJNwogCi0jZGVmaW5lCV9fcGh5c190b19wZm4ocGFkZHIpCSgocGFkZHIpID4+IFBBR0VfU0hJRlQpCi0jZGVmaW5lCV9fcGZuX3RvX3BoeXMocGZuKQkoKHBmbikgPDwgUEFHRV9TSElGVCkKLQogZXh0ZXJuIHZvaWQgY3JlYXRlX21lbW1hcF9ob2xlcyhzdHJ1Y3QgbWVtaW5mbyAqKTsKIGV4dGVybiB2b2lkIG1lbXRhYmxlX2luaXQoc3RydWN0IG1lbWluZm8gKik7CiBleHRlcm4gdm9pZCBpb3RhYmxlX2luaXQoc3RydWN0IG1hcF9kZXNjICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKaW5kZXggM2U1NzIzNi4uM2Q3ZjA4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaApAQCAtNTgsNiArNTgsMTIgQEAKICNlbmRpZgogCiAvKgorICogQ29udmVydCBhIHBoeXNpY2FsIGFkZHJlc3MgdG8gYSBQYWdlIEZyYW1lIE51bWJlciBhbmQgYmFjaworICovCisjZGVmaW5lCV9fcGh5c190b19wZm4ocGFkZHIpCSgocGFkZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lCV9fcGZuX3RvX3BoeXMocGZuKQkoKHBmbikgPDwgUEFHRV9TSElGVCkKKworLyoKICAqIFRoZSBtb2R1bGUgc3BhY2UgbGl2ZXMgYmV0d2VlbiB0aGUgYWRkcmVzc2VzIGdpdmVuIGJ5IFRBU0tfU0laRQogICogYW5kIFBBR0VfT0ZGU0VUIC0gaXQgbXVzdCBiZSB3aXRoaW4gMzJNQiBvZiB0aGUga2VybmVsIHRleHQuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tdXRleC5oIGIvaW5jbHVkZS9hc20tYXJtL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhYTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tdXRleC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL211dGV4LmgKKyAqCisgKiBBUk0gb3B0aW1pemVkIG11dGV4IGxvY2tpbmcgcHJpbWl0aXZlcworICoKKyAqIFBsZWFzZSBsb29rIGludG8gYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBhIGZvcm1hbCBkZWZpbml0aW9uLgorICovCisjaWZuZGVmIF9BU01fTVVURVhfSAorI2RlZmluZSBfQVNNX01VVEVYX0gKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKKy8qIE9uIHByZS1BUk12NiBoYXJkd2FyZSB0aGUgc3dwIGJhc2VkIGltcGxlbWVudGF0aW9uIGlzIHRoZSBtb3N0IGVmZmljaWVudC4gKi8KKyMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oPgorI2Vsc2UKKworLyoKKyAqIEF0dGVtcHRpbmcgdG8gbG9jayBhIG11dGV4IG9uIEFSTXY2KyBjYW4gYmUgZG9uZSB3aXRoIGEgYmFzdGFyZGl6ZWQKKyAqIGF0b21pYyBkZWNyZW1lbnQgKGl0IGlzIG5vdCBhIHJlbGlhYmxlIGF0b21pYyBkZWNyZW1lbnQgYnV0IGl0IHNhdGlzZmllcworICogdGhlIGRlZmluZWQgc2VtYW50aWNzIGZvciBvdXIgcHVycG9zZSwgd2hpbGUgYmVpbmcgc21hbGxlciBhbmQgZmFzdGVyCisgKiB0aGFuIGEgcmVhbCBhdG9taWMgZGVjcmVtZW50IG9yIGF0b21pYyBzd2FwLiAgVGhlIGlkZWEgaXMgdG8gYXR0ZW1wdAorICogZGVjcmVtZW50aW5nIHRoZSBsb2NrIHZhbHVlIG9ubHkgb25jZS4gIElmIG9uY2UgZGVjcmVtZW50ZWQgaXQgaXNuJ3QgemVybywKKyAqIG9yIGlmIGl0cyBzdG9yZS1iYWNrIGZhaWxzIGR1ZSB0byBhIGRpc3B1dGUgb24gdGhlIGV4Y2x1c2l2ZSBzdG9yZSwgd2UKKyAqIHNpbXBseSBiYWlsIG91dCBpbW1lZGlhdGVseSB0aHJvdWdoIHRoZSBzbG93IHBhdGggd2hlcmUgdGhlIGxvY2sgd2lsbCBiZQorICogcmVhdHRlbXB0ZWQgdW50aWwgaXQgc3VjY2VlZHMuCisgKi8KKyNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF9sb2NrKGNvdW50LCBmYWlsX2ZuKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWludCBfX2V4X2ZsYWcsIF9fcmVzOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0eXBlY2hlY2soYXRvbWljX3QgKiwgY291bnQpOwkJCQkJXAorCXR5cGVjaGVja19mbihmYXN0Y2FsbCB2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCisJCQkJCQkJCQlcCisJX19hc21fXyAoCQkJCQkJCVwKKwkJImxkcmV4CSUwLCBbJTJdCVxuIgkJCQlcCisJCSJzdWIJJTAsICUwLCAjMQlcbiIJCQkJXAorCQkic3RyZXgJJTEsICUwLCBbJTJdCVxuIgkJCQlcCisJCQkJCQkJCQlcCisJCTogIj0mciIgKF9fcmVzKSwgIj0mciIgKF9fZXhfZmxhZykJCQlcCisJCTogInIiICgmKGNvdW50KS0+Y291bnRlcikJCQkJXAorCQk6ICJjYyIsIm1lbW9yeSIgKTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoX19yZXMgfHwgX19leF9mbGFnKSkJCQkJXAorCQlmYWlsX2ZuKGNvdW50KTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoY291bnQsIGZhaWxfZm4pCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fZXhfZmxhZywgX19yZXM7CQkJCQkJXAorCQkJCQkJCQkJXAorCXR5cGVjaGVjayhhdG9taWNfdCAqLCBjb3VudCk7CQkJCQlcCisJdHlwZWNoZWNrX2ZuKGZhc3RjYWxsIGludCAoKikoYXRvbWljX3QgKiksIGZhaWxfZm4pOwkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gKAkJCQkJCQlcCisJCSJsZHJleAklMCwgWyUyXQlcbiIJCQkJXAorCQkic3ViCSUwLCAlMCwgIzEJXG4iCQkJCVwKKwkJInN0cmV4CSUxLCAlMCwgWyUyXQlcbiIJCQkJXAorCQkJCQkJCQkJXAorCQk6ICI9JnIiIChfX3JlcyksICI9JnIiIChfX2V4X2ZsYWcpCQkJXAorCQk6ICJyIiAoJihjb3VudCktPmNvdW50ZXIpCQkJCVwKKwkJOiAiY2MiLCJtZW1vcnkiICk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19yZXMgfD0gX19leF9mbGFnOwkJCQkJCVwKKwlpZiAodW5saWtlbHkoX19yZXMgIT0gMCkpCQkJCQlcCisJCV9fcmVzID0gZmFpbF9mbihjb3VudCk7CQkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisvKgorICogU2FtZSB0cmljayBpcyB1c2VkIGZvciB0aGUgdW5sb2NrIGZhc3QgcGF0aC4gSG93ZXZlciB0aGUgb3JpZ2luYWwgdmFsdWUsCisgKiByYXRoZXIgdGhhbiB0aGUgcmVzdWx0LCBpcyB1c2VkIHRvIHRlc3QgZm9yIHN1Y2Nlc3MgaW4gb3JkZXIgdG8gaGF2ZQorICogYmV0dGVyIGdlbmVyYXRlZCBhc3NlbWJseS4KKyAqLworI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayhjb3VudCwgZmFpbF9mbikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpbnQgX19leF9mbGFnLCBfX3JlcywgX19vcmlnOwkJCQkJXAorCQkJCQkJCQkJXAorCXR5cGVjaGVjayhhdG9taWNfdCAqLCBjb3VudCk7CQkJCQlcCisJdHlwZWNoZWNrX2ZuKGZhc3RjYWxsIHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fICgJCQkJCQkJXAorCQkibGRyZXgJJTAsIFslM10JXG4iCQkJCVwKKwkJImFkZAklMSwgJTAsICMxCVxuIgkJCQlcCisJCSJzdHJleAklMiwgJTEsIFslM10JXG4iCQkJCVwKKwkJCQkJCQkJCVwKKwkJOiAiPSZyIiAoX19vcmlnKSwgIj0mciIgKF9fcmVzKSwgIj0mciIgKF9fZXhfZmxhZykJXAorCQk6ICJyIiAoJihjb3VudCktPmNvdW50ZXIpCQkJCVwKKwkJOiAiY2MiLCJtZW1vcnkiICk7CQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KF9fb3JpZyB8fCBfX2V4X2ZsYWcpKQkJCQlcCisJCWZhaWxfZm4oY291bnQpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBJZiB0aGUgdW5sb2NrIHdhcyBkb25lIG9uIGEgY29udGVuZGVkIGxvY2ssIG9yIGlmIHRoZSB1bmxvY2sgc2ltcGx5IGZhaWxzCisgKiB0aGVuIHRoZSBtdXRleCByZW1haW5zIGxvY2tlZC4KKyAqLworI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCTEKKworLyoKKyAqIEZvciBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2sgd2UgdXNlIGFub3RoZXIgY29uc3RydWN0IHdoaWNoIGNvdWxkIGJlCisgKiBkZXNjcmliZWQgYXMgYSAic2luZ2xlIHZhbHVlIGNtcHhjaGciLgorICoKKyAqIFRoaXMgcHJvdmlkZXMgdGhlIG5lZWRlZCB0cnlsb2NrIHNlbWFudGljcyBsaWtlIGNtcHhjaGcgd291bGQsIGJ1dCBpdCBpcworICogbGlnaHRlciBhbmQgbGVzcyBnZW5lcmljIHRoYW4gYSB0cnVlIGNtcHhjaGcgaW1wbGVtZW50YXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soYXRvbWljX3QgKmNvdW50LCBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlpbnQgX19leF9mbGFnLCBfX3JlcywgX19vcmlnOworCisJX19hc21fXyAoCisKKwkJIjE6IGxkcmV4CSUwLCBbJTNdCVxuIgorCQkic3VicwkJJTEsICUwLCAjMQlcbiIKKwkJInN0cmV4ZXEJJTIsICUxLCBbJTNdCVxuIgorCQkibW92bHQJCSUwLCAjMAkJXG4iCisJCSJjbXBlcQkJJTIsICMwCQlcbiIKKwkJImJndAkJMWIJCVxuIgorCisJCTogIj0mciIgKF9fb3JpZyksICI9JnIiIChfX3JlcyksICI9JnIiIChfX2V4X2ZsYWcpCisJCTogInIiICgmY291bnQtPmNvdW50ZXIpCisJCTogImNjIiwgIm1lbW9yeSIgKTsKKworCXJldHVybiBfX29yaWc7Cit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCmluZGV4IDMwNzRiMGUuLjE1NTJjODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCkBAIC03Niw2ICs3Niw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKwogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXRvbWljLmgKaW5kZXggMmRmMmM3YS4uMGI1MWE4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2F0b21pYy5oCkBAIC0xMzYsNiArMTM2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL211dGV4LmggYi9pbmNsdWRlL2FzbS1jcmlzL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvbXV0ZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBQdWxsIGluIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbXV0ZXggZmFzdHBhdGguCisgKgorICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oCmluZGV4IDljOWU5NDkuLmE1OWY2ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmgKQEAgLTMyOCw2ICszMjgsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgb2xkLCBuZXcpKQorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKIAogI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCiAoewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L211dGV4LmggYi9pbmNsdWRlL2FzbS1mcnYvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZnJ2L211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LWRlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjE4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LWRlYy5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogYXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmgKKyAqCisgKiBHZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtdXRleCBmYXN0cGF0aCwgYmFzZWQgb24gYXRvbWljCisgKiBkZWNyZW1lbnQvaW5jcmVtZW50LgorICovCisjaWZuZGVmIF9BU01fR0VORVJJQ19NVVRFWF9ERUNfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTVVURVhfREVDX0gKKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrIC0gdHJ5IHRvIHRha2UgdGhlIGxvY2sgYnkgbW92aW5nIHRoZSBjb3VudAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gMSB0byBhIDAgdmFsdWUKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDEKKyAqCisgKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMSwgYW5kIGNhbGwgPGZhaWxfZm4+IGlmCisgKiBpdCB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBUaGlzIGZ1bmN0aW9uIE1VU1QgbGVhdmUgdGhlIHZhbHVlIGxvd2VyIHRoYW4KKyAqIDEgZXZlbiB3aGVuIHRoZSAiMSIgYXNzZXJ0aW9uIHdhc24ndCB0cnVlLgorICovCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayhjb3VudCwgZmFpbF9mbikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoYXRvbWljX2RlY19yZXR1cm4oY291bnQpIDwgMCkpCQkJXAorCQlmYWlsX2ZuKGNvdW50KTsJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlzbXBfbWIoKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKioKKyAqICBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsIC0gdHJ5IHRvIHRha2UgdGhlIGxvY2sgYnkgbW92aW5nIHRoZSBjb3VudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDEgdG8gYSAwIHZhbHVlCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAxCisgKgorICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCBjYWxsIDxmYWlsX2ZuPiBpZgorICogaXQgd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIGZhc3RwYXRoIHN1Y2NlZWRzLAorICogb3IgYW55dGhpbmcgdGhlIHNsb3cgcGF0aCBmdW5jdGlvbiByZXR1cm5zLgorICovCitzdGF0aWMgaW5saW5lIGludAorX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbChhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkKKwkJcmV0dXJuIGZhaWxfZm4oY291bnQpOworCWVsc2UgeworCQlzbXBfbWIoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKioKKyAqICBfX211dGV4X2Zhc3RwYXRoX3VubG9jayAtIHRyeSB0byBwcm9tb3RlIHRoZSBjb3VudCBmcm9tIDAgdG8gMQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMAorICoKKyAqIFRyeSB0byBwcm9tb3RlIHRoZSBjb3VudCBmcm9tIDAgdG8gMS4gSWYgaXQgd2Fzbid0IDAsIGNhbGwgPGZhaWxfZm4+LgorICogSW4gdGhlIGZhaWx1cmUgY2FzZSwgdGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIGVpdGhlciBzZXQgdGhlIHZhbHVlIHRvCisgKiAxLCBvciB0byBzZXQgaXQgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEuCisgKgorICogSWYgdGhlIGltcGxlbWVudGF0aW9uIHNldHMgaXQgdG8gYSB2YWx1ZSBvZiBsb3dlciB0aGFuIDEsIHRoZW4gdGhlCisgKiBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpIG1hY3JvIG5lZWRzIHRvIHJldHVybiAxLCBpdCBuZWVkcworICogdG8gcmV0dXJuIDAgb3RoZXJ3aXNlLgorICovCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKGNvdW50LCBmYWlsX2ZuKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXNtcF9tYigpOwkJCQkJCQlcCisJaWYgKHVubGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKGNvdW50KSA8PSAwKSkJCQlcCisJCWZhaWxfZm4oY291bnQpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKQkJMQorCisvKioKKyAqIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayAtIHRyeSB0byBhY3F1aXJlIHRoZSBtdXRleCwgd2l0aG91dCB3YWl0aW5nCisgKgorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCByZXR1cm4gMCAoZmFpbHVyZSkKKyAqIGlmIGl0IHdhc24ndCAxIG9yaWdpbmFsbHksIG9yIHJldHVybiAxIChzdWNjZXNzKSBvdGhlcndpc2UuIFRoaXMgZnVuY3Rpb24KKyAqIE1VU1QgbGVhdmUgdGhlIHZhbHVlIGxvd2VyIHRoYW4gMSBldmVuIHdoZW4gdGhlICIxIiBhc3NlcnRpb24gd2Fzbid0IHRydWUuCisgKiBBZGRpdGlvbmFsbHksIGlmIHRoZSB2YWx1ZSB3YXMgPCAwIG9yaWdpbmFsbHksIHRoaXMgZnVuY3Rpb24gbXVzdCBub3QgbGVhdmUKKyAqIGl0IHRvIDAgb24gZmFpbHVyZS4KKyAqCisgKiBJZiB0aGUgYXJjaGl0ZWN0dXJlIGhhcyBubyBlZmZlY3RpdmUgdHJ5bG9jayB2YXJpYW50LCBpdCBzaG91bGQgY2FsbCB0aGUKKyAqIDxmYWlsX2ZuPiBzcGlubG9jay1iYXNlZCB0cnlsb2NrIHZhcmlhbnQgdW5jb25kaXRpb25hbGx5LgorICovCitzdGF0aWMgaW5saW5lIGludAorX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKGF0b21pY190ICpjb3VudCwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCit7CisJLyoKKwkgKiBXZSBoYXZlIHR3byB2YXJpYW50cyBoZXJlLiBUaGUgY21weGNoZyBiYXNlZCBvbmUgaXMgdGhlIGJlc3Qgb25lCisJICogYmVjYXVzZSBpdCBuZXZlciBpbmR1Y2UgYSBmYWxzZSBjb250ZW50aW9uIHN0YXRlLiAgSXQgaXMgaW5jbHVkZWQKKwkgKiBoZXJlIGJlY2F1c2UgYXJjaGl0ZWN0dXJlcyB1c2luZyB0aGUgaW5jL2RlYyBhbGdvcml0aG1zIG92ZXIgdGhlCisJICogeGNoZyBvbmVzIGFyZSBtdWNoIG1vcmUgbGlrZWx5IHRvIHN1cHBvcnQgY21weGNoZyBuYXRpdmVseS4KKwkgKgorCSAqIElmIG5vdCB3ZSBmYWxsIGJhY2sgdG8gdGhlIHNwaW5sb2NrIGJhc2VkIHZhcmlhbnQgLSB0aGF0IGlzCisJICoganVzdCBhcyBlZmZpY2llbnQgKGFuZCBzaW1wbGVyKSBhcyBhICdkZXN0cnVjdGl2ZScgcHJvYmluZyBvZgorCSAqIHRoZSBtdXRleCBzdGF0ZSB3b3VsZCBiZS4KKwkgKi8KKyNpZmRlZiBfX0hBVkVfQVJDSF9DTVBYQ0hHCisJaWYgKGxpa2VseShhdG9taWNfY21weGNoZyhjb3VudCwgMSwgMCkpID09IDEpIHsKKwkJc21wX21iKCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIGZhaWxfZm4oY291bnQpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1udWxsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LW51bGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Y4YjdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1udWxsLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGFzbS1nZW5lcmljL211dGV4LW51bGwuaAorICoKKyAqIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIG11dGV4IGZhc3RwYXRoLCBiYXNlZCBvbiBOT1AgOi0pCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBtdXRleC1kZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBpdCBjYW4gYWxzbworICogYmUgdXNlZCBieSBhcmNoaXRlY3R1cmVzIHRoYXQgKGZvciB3aGF0ZXZlciByZWFzb24pIHdhbnQgdG8gdXNlIHRoZQorICogc3BpbmxvY2sgYmFzZWQgc2xvd3BhdGguCisgKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX01VVEVYX05VTExfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTVVURVhfTlVMTF9ICisKKy8qIGV4dHJhIHBhcmFtZXRlciBvbmx5IG5lZWRlZCBmb3IgbXV0ZXggZGVidWdnaW5nOiAqLworI2lmbmRlZiBfX0lQX18KKyMgZGVmaW5lIF9fSVBfXworI2VuZGlmCisKKyNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF9sb2NrKGNvdW50LCBmYWlsX2ZuKQkgICAgICBmYWlsX2ZuKGNvdW50IF9fUkVUX0lQX18pCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoY291bnQsIGZhaWxfZm4pICBmYWlsX2ZuKGNvdW50IF9fUkVUX0lQX18pCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKGNvdW50LCBmYWlsX2ZuKSAgICAgICBmYWlsX2ZuKGNvdW50IF9fUkVUX0lQX18pCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhjb3VudCwgZmFpbF9mbikgICAgICBmYWlsX2ZuKGNvdW50KQorI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCSAgICAgIDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LXhjaGcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjRmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL211dGV4LXhjaGcuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaAorICoKKyAqIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIG11dGV4IGZhc3RwYXRoLCBiYXNlZCBvbiB4Y2hnKCkuCisgKgorICogTk9URTogQW4geGNoZyBiYXNlZCBpbXBsZW1lbnRhdGlvbiBpcyBsZXNzIG9wdGltYWwgdGhhbiBhbiBhdG9taWMKKyAqICAgICAgIGRlY3JlbWVudC9pbmNyZW1lbnQgYmFzZWQgaW1wbGVtZW50YXRpb24uIElmIHlvdXIgYXJjaGl0ZWN0dXJlCisgKiAgICAgICBoYXMgYSByZWFzb25hYmxlIGF0b21pYyBkZWMvaW5jIHRoZW4geW91IHNob3VsZCBwcm9iYWJseSB1c2UKKyAqCSBhc20tZ2VuZXJpYy9tdXRleC1kZWMuaCBpbnN0ZWFkLCBvciB5b3UgY291bGQgb3Blbi1jb2RlIGFuCisgKgkgb3B0aW1pemVkIHZlcnNpb24gaW4gYXNtL211dGV4LmguCisgKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX01VVEVYX1hDSEdfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTVVURVhfWENIR19ICisKKy8qKgorICogIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDEgdG8gYSAwIHZhbHVlCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAxCisgKgorICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCBjYWxsIDxmYWlsX2ZuPiBpZiBpdAorICogd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuIDEKKyAqIGV2ZW4gd2hlbiB0aGUgIjEiIGFzc2VydGlvbiB3YXNuJ3QgdHJ1ZS4KKyAqLworI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2soY291bnQsIGZhaWxfZm4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KGF0b21pY194Y2hnKGNvdW50LCAwKSAhPSAxKSkJCQlcCisJCWZhaWxfZm4oY291bnQpOwkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCXNtcF9tYigpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbCAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAxIHRvIGEgMCB2YWx1ZQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMQorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgY2FsbCA8ZmFpbF9mbj4gaWYgaXQKKyAqIHdhc24ndCAxIG9yaWdpbmFsbHkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBmYXN0cGF0aCBzdWNjZWVkcywKKyAqIG9yIGFueXRoaW5nIHRoZSBzbG93IHBhdGggZnVuY3Rpb24gcmV0dXJucworICovCitzdGF0aWMgaW5saW5lIGludAorX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbChhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWlmICh1bmxpa2VseShhdG9taWNfeGNoZyhjb3VudCwgMCkgIT0gMSkpCisJCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKKwllbHNlIHsKKwkJc21wX21iKCk7CisJCXJldHVybiAwOworCX0KK30KKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF91bmxvY2sgLSB0cnkgdG8gcHJvbW90ZSB0aGUgbXV0ZXggZnJvbSAwIHRvIDEKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDAKKyAqCisgKiB0cnkgdG8gcHJvbW90ZSB0aGUgbXV0ZXggZnJvbSAwIHRvIDEuIGlmIGl0IHdhc24ndCAwLCBjYWxsIDxmdW5jdGlvbj4KKyAqIEluIHRoZSBmYWlsdXJlIGNhc2UsIHRoaXMgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBlaXRoZXIgc2V0IHRoZSB2YWx1ZSB0bworICogMSwgb3IgdG8gc2V0IGl0IHRvIGEgdmFsdWUgbG93ZXIgdGhhbiBvbmUuCisgKiBJZiB0aGUgaW1wbGVtZW50YXRpb24gc2V0cyBpdCB0byBhIHZhbHVlIG9mIGxvd2VyIHRoYW4gb25lLCB0aGUKKyAqIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkgbWFjcm8gbmVlZHMgdG8gcmV0dXJuIDEsIGl0IG5lZWRzCisgKiB0byByZXR1cm4gMCBvdGhlcndpc2UuCisgKi8KKyNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF91bmxvY2soY291bnQsIGZhaWxfZm4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc21wX21iKCk7CQkJCQkJCVwKKwlpZiAodW5saWtlbHkoYXRvbWljX3hjaGcoY291bnQsIDEpICE9IDApKQkJCVwKKwkJZmFpbF9mbihjb3VudCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCQkwCisKKy8qKgorICogX19tdXRleF9mYXN0cGF0aF90cnlsb2NrIC0gdHJ5IHRvIGFjcXVpcmUgdGhlIG11dGV4LCB3aXRob3V0IHdhaXRpbmcKKyAqCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogc3BpbmxvY2sgYmFzZWQgdHJ5bG9jayBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgcmV0dXJuIDAgKGZhaWx1cmUpCisgKiBpZiBpdCB3YXNuJ3QgMSBvcmlnaW5hbGx5LCBvciByZXR1cm4gMSAoc3VjY2Vzcykgb3RoZXJ3aXNlLiBUaGlzIGZ1bmN0aW9uCisgKiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuIDEgZXZlbiB3aGVuIHRoZSAiMSIgYXNzZXJ0aW9uIHdhc24ndCB0cnVlLgorICogQWRkaXRpb25hbGx5LCBpZiB0aGUgdmFsdWUgd2FzIDwgMCBvcmlnaW5hbGx5LCB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGxlYXZlCisgKiBpdCB0byAwIG9uIGZhaWx1cmUuCisgKgorICogSWYgdGhlIGFyY2hpdGVjdHVyZSBoYXMgbm8gZWZmZWN0aXZlIHRyeWxvY2sgdmFyaWFudCwgaXQgc2hvdWxkIGNhbGwgdGhlCisgKiA8ZmFpbF9mbj4gc3BpbmxvY2stYmFzZWQgdHJ5bG9jayB2YXJpYW50IHVuY29uZGl0aW9uYWxseS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWludCBwcmV2ID0gYXRvbWljX3hjaGcoY291bnQsIDApOworCisJaWYgKHVubGlrZWx5KHByZXYgPCAwKSkgeworCQkvKgorCQkgKiBUaGUgbG9jayB3YXMgbWFya2VkIGNvbnRlbmRlZCBzbyB3ZSBtdXN0IHJlc3RvcmUgdGhhdAorCQkgKiBzdGF0ZS4gSWYgd2hpbGUgZG9pbmcgc28gd2UgZ2V0IGJhY2sgYSBwcmV2IHZhbHVlIG9mIDEKKwkJICogdGhlbiB3ZSBqdXN0IG93biBpdC4KKwkJICoKKwkJICogWyBJbiB0aGUgcmFyZSBjYXNlIG9mIHRoZSBtdXRleCBnb2luZyB0byAxLCB0byAwLCB0byAtMQorCQkgKiAgIGFuZCB0aGVuIGJhY2sgdG8gMCBpbiB0aGlzIGZldy1pbnN0cnVjdGlvbnMgd2luZG93LAorCQkgKiAgIHRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gdHJpZ2dlciB0aGUgc2xvd3BhdGggZm9yIHRoZQorCQkgKiAgIG93bmVyJ3MgdW5sb2NrIHBhdGggbmVlZGxlc3NseSwgYnV0IHRoYXQncyBub3QgYSBwcm9ibGVtCisJCSAqICAgaW4gcHJhY3RpY2UuIF0KKwkJICovCisJCXByZXYgPSBhdG9taWNfeGNoZyhjb3VudCwgcHJldik7CisJCWlmIChwcmV2IDwgMCkKKwkJCXByZXYgPSAwOworCX0KKwlzbXBfbWIoKTsKKworCXJldHVybiBwcmV2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2F0b21pYy5oIGIvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKaW5kZXggZDg5MTU0MS4uMjFmNTQ0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKQEAgLTk1LDYgKzk1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9tdXRleC5oIGIvaW5jbHVkZS9hc20taDgzMDAvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvbXV0ZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBQdWxsIGluIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbXV0ZXggZmFzdHBhdGguCisgKgorICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKaW5kZXggN2E1NDcyZC4uZGU2NDlkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCkBAIC0yMTYsNiArMjE2LDcgQEAKIH0KIAogI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIG9sZCwgbmV3KSkKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgogICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tdXRleC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNWUzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L211dGV4LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBBc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXV0ZXggZmFzdHBhdGgsIGJhc2VkIG9uIGF0b21pYworICogZGVjcmVtZW50L2luY3JlbWVudC4KKyAqCisgKiBzdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKyNpZm5kZWYgX0FTTV9NVVRFWF9ICisjZGVmaW5lIF9BU01fTVVURVhfSAorCisvKioKKyAqICBfX211dGV4X2Zhc3RwYXRoX2xvY2sgLSB0cnkgdG8gdGFrZSB0aGUgbG9jayBieSBtb3ZpbmcgdGhlIGNvdW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAxIHRvIGEgMCB2YWx1ZQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDEKKyAqCisgKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMSwgYW5kIGNhbGwgPGZuPiBpZiBpdAorICogd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuIDEKKyAqIGV2ZW4gd2hlbiB0aGUgIjEiIGFzc2VydGlvbiB3YXNuJ3QgdHJ1ZS4KKyAqLworI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2soY291bnQsIGZhaWxfZm4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGR1bW15OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0eXBlY2hlY2soYXRvbWljX3QgKiwgY291bnQpOwkJCQkJXAorCXR5cGVjaGVja19mbihmYXN0Y2FsbCB2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCisJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQlMT0NLCSIgICBkZWNsICglJWVheCkJXG4iCQkJXAorCQkJIiAgIGpzICIjZmFpbF9mbiIJXG4iCQkJXAorCQkJCQkJCQkJXAorCQk6Ij1hIiAoZHVtbXkpCQkJCQkJXAorCQk6ICJhIiAoY291bnQpCQkJCQkJXAorCQk6ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIpOwkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qKgorICogIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwgLSB0cnkgdG8gdGFrZSB0aGUgbG9jayBieSBtb3ZpbmcgdGhlIGNvdW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gMSB0byBhIDAgdmFsdWUKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDEKKyAqCisgKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byBhIHZhbHVlIGxvd2VyIHRoYW4gMSwgYW5kIGNhbGwgPGZhaWxfZm4+IGlmIGl0CisgKiB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgZmFzdHBhdGggc3VjY2VlZHMsCisgKiBvciBhbnl0aGluZyB0aGUgc2xvdyBwYXRoIGZ1bmN0aW9uIHJldHVybnMKKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoYXRvbWljX3QgKmNvdW50LAorCQkJICAgICBpbnQgZmFzdGNhbGwgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlpZiAodW5saWtlbHkoYXRvbWljX2RlY19yZXR1cm4oY291bnQpIDwgMCkpCisJCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqICBfX211dGV4X2Zhc3RwYXRoX3VubG9jayAtIHRyeSB0byBwcm9tb3RlIHRoZSBtdXRleCBmcm9tIDAgdG8gMQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMAorICoKKyAqIHRyeSB0byBwcm9tb3RlIHRoZSBtdXRleCBmcm9tIDAgdG8gMS4gaWYgaXQgd2Fzbid0IDAsIGNhbGwgPGZhaWxfZm4+LgorICogSW4gdGhlIGZhaWx1cmUgY2FzZSwgdGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIGVpdGhlciBzZXQgdGhlIHZhbHVlCisgKiB0byAxLCBvciB0byBzZXQgaXQgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEuCisgKgorICogSWYgdGhlIGltcGxlbWVudGF0aW9uIHNldHMgaXQgdG8gYSB2YWx1ZSBvZiBsb3dlciB0aGFuIDEsIHRoZQorICogX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSBtYWNybyBuZWVkcyB0byByZXR1cm4gMSwgaXQgbmVlZHMKKyAqIHRvIHJldHVybiAwIG90aGVyd2lzZS4KKyAqLworI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayhjb3VudCwgZmFpbF9mbikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZHVtbXk7CQkJCQkJXAorCQkJCQkJCQkJXAorCXR5cGVjaGVjayhhdG9taWNfdCAqLCBjb3VudCk7CQkJCQlcCisJdHlwZWNoZWNrX2ZuKGZhc3RjYWxsIHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCUxPQ0sJIiAgIGluY2wgKCUlZWF4KQlcbiIJCQlcCisJCQkiICAgamxlICIjZmFpbF9mbiIJXG4iCQkJXAorCQkJCQkJCQkJXAorCQk6Ij1hIiAoZHVtbXkpCQkJCQkJXAorCQk6ICJhIiAoY291bnQpCQkJCQkJXAorCQk6ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkJMQorCisvKioKKyAqIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayAtIHRyeSB0byBhY3F1aXJlIHRoZSBtdXRleCwgd2l0aG91dCB3YWl0aW5nCisgKgorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCByZXR1cm4gMCAoZmFpbHVyZSkKKyAqIGlmIGl0IHdhc24ndCAxIG9yaWdpbmFsbHksIG9yIHJldHVybiAxIChzdWNjZXNzKSBvdGhlcndpc2UuIFRoaXMgZnVuY3Rpb24KKyAqIE1VU1QgbGVhdmUgdGhlIHZhbHVlIGxvd2VyIHRoYW4gMSBldmVuIHdoZW4gdGhlICIxIiBhc3NlcnRpb24gd2Fzbid0IHRydWUuCisgKiBBZGRpdGlvbmFsbHksIGlmIHRoZSB2YWx1ZSB3YXMgPCAwIG9yaWdpbmFsbHksIHRoaXMgZnVuY3Rpb24gbXVzdCBub3QgbGVhdmUKKyAqIGl0IHRvIDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCS8qCisJICogV2UgaGF2ZSB0d28gdmFyaWFudHMgaGVyZS4gVGhlIGNtcHhjaGcgYmFzZWQgb25lIGlzIHRoZSBiZXN0IG9uZQorCSAqIGJlY2F1c2UgaXQgbmV2ZXIgaW5kdWNlIGEgZmFsc2UgY29udGVudGlvbiBzdGF0ZS4gIEl0IGlzIGluY2x1ZGVkCisJICogaGVyZSBiZWNhdXNlIGFyY2hpdGVjdHVyZXMgdXNpbmcgdGhlIGluYy9kZWMgYWxnb3JpdGhtcyBvdmVyIHRoZQorCSAqIHhjaGcgb25lcyBhcmUgbXVjaCBtb3JlIGxpa2VseSB0byBzdXBwb3J0IGNtcHhjaGcgbmF0aXZlbHkuCisJICoKKwkgKiBJZiBub3Qgd2UgZmFsbCBiYWNrIHRvIHRoZSBzcGlubG9jayBiYXNlZCB2YXJpYW50IC0gdGhhdCBpcworCSAqIGp1c3QgYXMgZWZmaWNpZW50IChhbmQgc2ltcGxlcikgYXMgYSAnZGVzdHJ1Y3RpdmUnIHByb2Jpbmcgb2YKKwkgKiB0aGUgbXV0ZXggc3RhdGUgd291bGQgYmUuCisJICovCisjaWZkZWYgX19IQVZFX0FSQ0hfQ01QWENIRworCWlmIChsaWtlbHkoYXRvbWljX2NtcHhjaGcoY291bnQsIDEsIDApKSA9PSAxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIGZhaWxfZm4oY291bnQpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYXRvbWljLmgKaW5kZXggMTVjZjc5OC4uZDNlMGRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2F0b21pYy5oCkBAIC04OSw2ICs4OSw3IEBACiB9CiAKICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCBvbGQsIG5ldykpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCiAjZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKICh7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmggYi9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBQdWxsIGluIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbXV0ZXggZmFzdHBhdGguCisgKgorICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKaW5kZXggNzA3NjEyNy4uMzEyMmZlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2F0b21pYy5oCkBAIC0yNDMsNiArMjQzLDcgQEAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLHYpIChhdG9taWNfYWRkX3JldHVybigoaSksICh2KSkgPCAwKQogCiAjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCiAvKioKICAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLW0zMnIvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tdXRleC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIFB1bGwgaW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtdXRleCBmYXN0cGF0aC4KKyAqCisgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaAppbmRleCBiOGE0ZTc1Li5hNGE4NGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKQEAgLTE0MCw2ICsxNDAsNyBAQAogfQogCiAjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCiAjZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKICh7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL211dGV4LmggYi9pbmNsdWRlL2FzbS1tNjhrL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbXV0ZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBQdWxsIGluIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbXV0ZXggZmFzdHBhdGguCisgKgorICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2F0b21pYy5oCmluZGV4IDE3MDJkYmUuLjZjNGU0YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYXRvbWljLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogfQogCiAjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCiAjZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKICh7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbXV0ZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBQdWxsIGluIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbXV0ZXggZmFzdHBhdGguCisgKgorICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKaW5kZXggOTIyNTZlNC4uOTRhOTU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2F0b21pYy5oCkBAIC0yODksNiArMjg5LDcgQEAKIH0KIAogI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKIAogLyoqCiAgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL211dGV4LmggYi9pbmNsdWRlL2FzbS1taXBzL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbXV0ZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBQdWxsIGluIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbXV0ZXggZmFzdHBhdGguCisgKgorICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oCmluZGV4IDY0ZWJkMDguLjJjYTU2ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmgKQEAgLTE2NSw2ICsxNjUsNyBAQAogCiAvKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgogICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL211dGV4LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCmluZGV4IGFlMzk1YTAuLjI0OGY5YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaApAQCAtMTY1LDYgKzE2NSw3IEBACiB9CiAKICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgogICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tdXRleC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc211LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtdS5oCmluZGV4IDEzNGMyYjUuLjgyY2U0NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc211LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaApAQCAtMjIsNyArMjIsNyBAQAogLyoKICAqIFBhcnRpdGlvbiBpbmZvIGNvbW1hbmRzCiAgKgotICogVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gcmV0cmVpdmUgdGhlIHNkYi1wYXJ0aXRpb24tWFggZGF0YXMgZnJvbQorICogVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHNkYi1wYXJ0aXRpb24tWFggZGF0YXMgZnJvbQogICogdGhlIFNNVS4gVGhlIGxlbmdodCBpcyBhbHdheXMgMi4gRmlyc3QgYnl0ZSBpcyB0aGUgc3ViY29tbWFuZCBjb2RlCiAgKiBhbmQgc2Vjb25kIGJ5dGUgaXMgdGhlIHBhcnRpdGlvbiBJRC4KICAqCkBAIC0yMjUsNyArMjI1LDcgQEAKICAqCiAgKiBTTVVfQ01EX01JU0NfZWVfR0VUX0RBVEFCTE9DS19SRUMgaXMgdXNlZCwgYW1vbmcgb3RoZXJzLCB0bwogICogdHJhbnNmZXIgYmxvY2tzIG9mIGRhdGEgZnJvbSB0aGUgU01VLiBTbyBmYXIsIEkndmUgZGVjcnlwdGVkIGl0J3MKLSAqIHVzYWdlIHRvIHJldHJlaXZlIHBhcnRpdGlvbiBkYXRhLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3UgaGF2ZSB0bworICogdXNhZ2UgdG8gcmV0cmlldmUgcGFydGl0aW9uIGRhdGEuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSBoYXZlIHRvCiAgKiBicmVhayB5b3VyIHRyYW5zZmVyIGluICJjaHVua3MiIHNpbmNlIHRoYXQgY29tbWFuZCBjYW5ub3QgdHJhbnNmZXIKICAqIG1vcmUgdGhhbiBhIGNodW5rIGF0IGEgdGltZS4gVGhlIGNodW5rIHNpemUgdXNlZCBieSBPRiBpcyAweGUgYnl0ZXMsCiAgKiBidXQgaXQgc2VlbXMgdGhhdCB0aGUgZGFyd2luIGRyaXZlciB3aWxsIGxldCB5b3UgZG8gMHgxZSBieXRlcyBpZgpAQCAtNTU2LDcgKzU1Niw3IEBACiAJX191MzIJCWNtZHR5cGU7CiAjZGVmaW5lIFNNVV9DTURUWVBFX1NNVQkJCTAJLyogU01VIGNvbW1hbmQgKi8KICNkZWZpbmUgU01VX0NNRFRZUEVfV0FOVFNfRVZFTlRTCTEJLyogc3dpdGNoIGZkIHRvIGV2ZW50cyBtb2RlICovCi0jZGVmaW5lIFNNVV9DTURUWVBFX0dFVF9QQVJUSVRJT04JMgkvKiByZXRyZWl2ZSBhbiBzZGIgcGFydGl0aW9uICovCisjZGVmaW5lIFNNVV9DTURUWVBFX0dFVF9QQVJUSVRJT04JMgkvKiByZXRyaWV2ZSBhbiBzZGIgcGFydGl0aW9uICovCiAKIAlfX3U4CQljbWQ7CQkJLyogU01VIGNvbW1hbmQgYnl0ZSAqLwogCV9fdTgJCXBhZFszXTsJCQkvKiBwYWRkaW5nICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAppbmRleCBkODJhZWRmLi5iZTZmZWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKQEAgLTc1LDYgKzc1LDggQEAKIAkgICAgICAgX19DU19MT09QKHYsIG1hc2ssICJvciIpOwogfQogCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIiAgY3MgICAlMCwlMywwKCUyKVxuIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9tdXRleC5oIGIvaW5jbHVkZS9hc20tczM5MC9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKaW5kZXggNjE4ZDhlMC4uZmI2MjdkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKQEAgLTEwMSw2ICsxMDEsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisKIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL211dGV4LmggYi9pbmNsdWRlL2FzbS1zaC9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9tdXRleC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIFB1bGwgaW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtdXRleCBmYXN0cGF0aC4KKyAqCisgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc2g2NC9hdG9taWMuaAppbmRleCBmM2NlNWMwLi4yOGYyZWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvYXRvbWljLmgKQEAgLTExMyw2ICsxMTMsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisKIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLXNoNjQvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9tdXRleC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIFB1bGwgaW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtdXRleCBmYXN0cGF0aC4KKyAqCisgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCmluZGV4IGFjY2I0OTYuLmUxMDMzMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCkBAIC0yMCw2ICsyMCw3IEBACiAKIGV4dGVybiBpbnQgX19hdG9taWNfYWRkX3JldHVybihpbnQsIGF0b21pY190ICopOwogZXh0ZXJuIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqLCBpbnQsIGludCk7CisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogZXh0ZXJuIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL211dGV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tdXRleC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIFB1bGwgaW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtdXRleCBmYXN0cGF0aC4KKyAqCisgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaAppbmRleCAxMWY1YWE1Li4yNTI1NmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmgKQEAgLTcyLDYgKzcyLDcgQEAKICNkZWZpbmUgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGksIHYpIChhdG9taWM2NF9hZGRfcmV0KGksIHYpIDwgMCkKIAogI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKIAogI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCiAoewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tdXRleC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL211dGV4LmggYi9pbmNsdWRlL2FzbS11bS9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGMxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9tdXRleC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIFB1bGwgaW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtdXRleCBmYXN0cGF0aC4KKyAqCisgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tdjg1MC9hdG9taWMuaAppbmRleCBmNWI5YWI2Li4xNjZkZjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYXRvbWljLmgKQEAgLTEwNCw2ICsxMDQsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisKIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLXY4NTAvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tdXRleC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIFB1bGwgaW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtdXRleCBmYXN0cGF0aC4KKyAqCisgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKKyAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKaW5kZXggNzJlYjA3MS4uNmI1NDAyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hdG9taWMuaApAQCAtMzg5LDYgKzM4OSw3IEBACiAjZGVmaW5lIGF0b21pYzY0X2RlY19yZXR1cm4odikgIChhdG9taWM2NF9zdWJfcmV0dXJuKDEsdikpCiAKICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCBvbGQsIG5ldykpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCiAvKioKICAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tdXRleC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4YWJmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tdXRleC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQXNzZW1ibHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIG11dGV4IGZhc3RwYXRoLCBiYXNlZCBvbiBhdG9taWMKKyAqIGRlY3JlbWVudC9pbmNyZW1lbnQuCisgKgorICogc3RhcnRlZCBieSBJbmdvIE1vbG5hcjoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICovCisjaWZuZGVmIF9BU01fTVVURVhfSAorI2RlZmluZSBfQVNNX01VVEVYX0gKKworLyoqCisgKiBfX211dGV4X2Zhc3RwYXRoX2xvY2sgLSBkZWNyZW1lbnQgYW5kIGNhbGwgZnVuY3Rpb24gaWYgbmVnYXRpdmUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYW5kIGNhbGxzIDxmYWlsX2ZuPiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgorICovCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayh2LCBmYWlsX2ZuKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZHVtbXk7CQkJCQkJXAorCQkJCQkJCQkJXAorCXR5cGVjaGVjayhhdG9taWNfdCAqLCB2KTsJCQkJCVwKKwl0eXBlY2hlY2tfZm4oZmFzdGNhbGwgdm9pZCAoKikoYXRvbWljX3QgKiksIGZhaWxfZm4pOwkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJTE9DSwkiICAgZGVjbCAoJSVyZGkpCVxuIgkJCVwKKwkJCSIgICBqcyAyZgkJXG4iCQkJXAorCQkJIjE6CQkJXG4iCQkJXAorCQkJCQkJCQkJXAorCQlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpCQkJCQlcCisJCQkiMjogY2FsbCAiI2ZhaWxfZm4iCVxuIgkJCVwKKwkJCSIgICBqbXAgMWIJCVxuIgkJCVwKKwkJTE9DS19TRUNUSU9OX0VORAkJCQkJXAorCQkJCQkJCQkJXAorCQk6Ij1EIiAoZHVtbXkpCQkJCQkJXAorCQk6ICJEIiAodikJCQkJCQlcCisJCTogInJheCIsICJyc2kiLCAicmR4IiwgInJjeCIsCQkJCVwKKwkJICAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJtZW1vcnkiKTsJCQlcCit9IHdoaWxlICgwKQorCisvKioKKyAqICBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsIC0gdHJ5IHRvIHRha2UgdGhlIGxvY2sgYnkgbW92aW5nIHRoZSBjb3VudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDEgdG8gYSAwIHZhbHVlCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAxCisgKgorICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCBjYWxsIDxmYWlsX2ZuPiBpZgorICogaXQgd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIGZhc3RwYXRoIHN1Y2NlZWRzLAorICogb3IgYW55dGhpbmcgdGhlIHNsb3cgcGF0aCBmdW5jdGlvbiByZXR1cm5zCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwKKwkJCSAgICAgaW50IGZhc3RjYWxsICgqZmFpbF9mbikoYXRvbWljX3QgKikpCit7CisJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA8IDApKQorCQlyZXR1cm4gZmFpbF9mbihjb3VudCk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX211dGV4X2Zhc3RwYXRoX3VubG9jayAtIGluY3JlbWVudCBhbmQgY2FsbCBmdW5jdGlvbiBpZiBub25wb3NpdGl2ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIHJlc3VsdCBpcyBub25wb3NpdGl2ZQorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBhbmQgY2FsbHMgPGZhaWxfZm4+IGlmIHRoZSByZXN1bHQgaXMgbm9ucG9zaXRpdmUuCisgKi8KKyNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF91bmxvY2sodiwgZmFpbF9mbikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGR1bW15OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0eXBlY2hlY2soYXRvbWljX3QgKiwgdik7CQkJCQlcCisJdHlwZWNoZWNrX2ZuKGZhc3RjYWxsIHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCUxPQ0sJIiAgIGluY2wgKCUlcmRpKQlcbiIJCQlcCisJCQkiICAgamxlIDJmCQlcbiIJCQlcCisJCQkiMToJCQlcbiIJCQlcCisJCQkJCQkJCQlcCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikJCQkJCVwKKwkJCSIyOiBjYWxsICIjZmFpbF9mbiIJXG4iCQkJXAorCQkJIiAgIGptcCAxYgkJXG4iCQkJXAorCQlMT0NLX1NFQ1RJT05fRU5ECQkJCQlcCisJCQkJCQkJCQlcCisJCToiPUQiIChkdW1teSkJCQkJCQlcCisJCTogIkQiICh2KQkJCQkJCVwKKwkJOiAicmF4IiwgInJzaSIsICJyZHgiLCAicmN4IiwJCQkJXAorCQkgICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgIm1lbW9yeSIpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKQkxCisKKy8qKgorICogX19tdXRleF9mYXN0cGF0aF90cnlsb2NrIC0gdHJ5IHRvIGFjcXVpcmUgdGhlIG11dGV4LCB3aXRob3V0IHdhaXRpbmcKKyAqCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogZmFsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBDaGFuZ2UgdGhlIGNvdW50IGZyb20gMSB0byAwIGFuZCByZXR1cm4gMSAoc3VjY2VzcyksIG9yIHJldHVybiAwIChmYWlsdXJlKQorICogaWYgaXQgd2Fzbid0IDEgb3JpZ2luYWxseS4gW3RoZSBmYWxsYmFjayBmdW5jdGlvbiBpcyBuZXZlciB1c2VkIG9uCisgKiB4ODZfNjQsIGJlY2F1c2UgYWxsIHg4Nl82NCBDUFVzIGhhdmUgYSBDTVBYQ0hHIGluc3RydWN0aW9uLl0KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWlmIChsaWtlbHkoYXRvbWljX2NtcHhjaGcoY291bnQsIDEsIDApKSA9PSAxKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaAppbmRleCBlMmNlMDZiLi5mZTEwNWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2F0b21pYy5oCkBAIC0yMjQsNiArMjI0LDcgQEAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLHYpIChhdG9taWNfYWRkX3JldHVybigoaSksKHYpKSA8IDApCiAKICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgogICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL211dGV4LmggYi9pbmNsdWRlL2FzbS14dGVuc2EvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL211dGV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICoKKyAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYworICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCmluZGV4IDExOWY5ZDAuLjMzOTg3ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaApAQCAtMjE4LDMyICsyMTgsNiBAQAogQ09NUEFUSUJMRV9JT0NUTChWVF9SRVNJWkVYKQogQ09NUEFUSUJMRV9JT0NUTChWVF9MT0NLU1dJVENIKQogQ09NUEFUSUJMRV9JT0NUTChWVF9VTkxPQ0tTV0lUQ0gpCi0vKiBMaXR0bGUgdiAqLwotLyogTGl0dGxlIHYsIHRoZSB2aWRlbzRsaW51eCBpb2N0bHMgKGNvbmZsaWN0PykgKi8KLUNPTVBBVElCTEVfSU9DVEwoVklESU9DR0NBUCkKLUNPTVBBVElCTEVfSU9DVEwoVklESU9DR0NIQU4pCi1DT01QQVRJQkxFX0lPQ1RMKFZJRElPQ1NDSEFOKQotQ09NUEFUSUJMRV9JT0NUTChWSURJT0NHUElDVCkKLUNPTVBBVElCTEVfSU9DVEwoVklESU9DU1BJQ1QpCi1DT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0NBUFRVUkUpCi1DT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0tFWSkKLUNPTVBBVElCTEVfSU9DVEwoVklESU9DR0FVRElPKQotQ09NUEFUSUJMRV9JT0NUTChWSURJT0NTQVVESU8pCi1DT01QQVRJQkxFX0lPQ1RMKFZJRElPQ1NZTkMpCi1DT01QQVRJQkxFX0lPQ1RMKFZJRElPQ01DQVBUVVJFKQotQ09NUEFUSUJMRV9JT0NUTChWSURJT0NHTUJVRikKLUNPTVBBVElCTEVfSU9DVEwoVklESU9DR1VOSVQpCi1DT01QQVRJQkxFX0lPQ1RMKFZJRElPQ0dDQVBUVVJFKQotQ09NUEFUSUJMRV9JT0NUTChWSURJT0NTQ0FQVFVSRSkKLS8qIEJUVFYgc3BlY2lmaWMuLi4gKi8KLUNPTVBBVElCTEVfSU9DVEwoX0lPVygndicsICBCQVNFX1ZJRElPQ1BSSVZBVEUrMCwgY2hhciBbMjU2XSkpCi1DT01QQVRJQkxFX0lPQ1RMKF9JT1IoJ3YnLCAgQkFTRV9WSURJT0NQUklWQVRFKzEsIGNoYXIgWzI1Nl0pKQotQ09NUEFUSUJMRV9JT0NUTChfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSsyLCB1bnNpZ25lZCBpbnQpKQotQ09NUEFUSUJMRV9JT0NUTChfSU9XKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSszLCBjaGFyIFsxNl0pKSAvKiBzdHJ1Y3QgYnR0dl9wbGxfaW5mbyAqLwotQ09NUEFUSUJMRV9JT0NUTChfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs0LCBpbnQpKQotQ09NUEFUSUJMRV9JT0NUTChfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs1LCBpbnQpKQotQ09NUEFUSUJMRV9JT0NUTChfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs2LCBpbnQpKQotQ09NUEFUSUJMRV9JT0NUTChfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs3LCBpbnQpKQogLyogTGl0dGxlIHAgKC9kZXYvcnRjLCAvZGV2L2VudmN0cmwsIGV0Yy4pICovCiBDT01QQVRJQkxFX0lPQ1RMKFJUQ19BSUVfT04pCiBDT01QQVRJQkxFX0lPQ1RMKFJUQ19BSUVfT0ZGKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggM2M4OWRmNi4uZDg4YmY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KICAqIENvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBDcnlwdG9hcGksIGJ5IEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZmFzdC5ubz4KICAqIGFuZCBOZXR0bGUsIGJ5IE5pZWxzIE32bGxlci4KQEAgLTEyNiw3ICsxMjcsMTEgQEAKIAl1bnNpZ25lZCBpbnQgY3JhX2Jsb2Nrc2l6ZTsKIAl1bnNpZ25lZCBpbnQgY3JhX2N0eHNpemU7CiAJdW5zaWduZWQgaW50IGNyYV9hbGlnbm1hc2s7CisKKwlpbnQgY3JhX3ByaW9yaXR5OworCiAJY29uc3QgY2hhciBjcmFfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKwljb25zdCBjaGFyIGNyYV9kcml2ZXJfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIAogCXVuaW9uIHsKIAkJc3RydWN0IGNpcGhlcl9hbGcgY2lwaGVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaCBiL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKaW5kZXggZDQxZGY3MC4uYzhjYmQ5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCkBAIC0yNDAsNiArMjQwLDE1IEBACiB9OwogCiAKKy8qKgorICogV2hlbiBzZXQsIHRoaXMgZmxhZyB3aWxsIGRpc2FibGUgYW55IHppZ3phZ2dpbmcgb3Igb3RoZXIgIm5vcm1hbCIgdHVuaW5nCisgKiBiZWhhdmlvdXIuIEFkZGl0aW9uYWxseSwgdGhlcmUgd2lsbCBiZSBubyBhdXRvbWF0aWMgbW9uaXRvcmluZyBvZiB0aGUgbG9jaworICogc3RhdHVzLCBhbmQgaGVuY2Ugbm8gZnJvbnRlbmQgZXZlbnRzIHdpbGwgYmUgZ2VuZXJhdGVkLiBJZiBhIGZyb250ZW5kIGRldmljZQorICogaXMgY2xvc2VkLCB0aGlzIGZsYWcgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYgd2hlbiB0aGUgZGV2aWNlIGlzCisgKiByZW9wZW5lZCByZWFkLXdyaXRlLgorICovCisjZGVmaW5lIEZFX1RVTkVfTU9ERV9PTkVTSE9UIDB4MDEKKwogCiAjZGVmaW5lIEZFX0dFVF9JTkZPCQkgICBfSU9SKCdvJywgNjEsIHN0cnVjdCBkdmJfZnJvbnRlbmRfaW5mbykKIApAQCAtMjYwLDYgKzI2OSw3IEBACiAKICNkZWZpbmUgRkVfU0VUX0ZST05URU5ECQkgICBfSU9XKCdvJywgNzYsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykKICNkZWZpbmUgRkVfR0VUX0ZST05URU5ECQkgICBfSU9SKCdvJywgNzcsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykKKyNkZWZpbmUgRkVfU0VUX0ZST05URU5EX1RVTkVfTU9ERSAgX0lPKCdvJywgODEpIC8qIHVuc2lnbmVkIGludCAqLwogI2RlZmluZSBGRV9HRVRfRVZFTlQJCSAgIF9JT1IoJ28nLCA3OCwgc3RydWN0IGR2Yl9mcm9udGVuZF9ldmVudCkKIAogI2RlZmluZSBGRV9ESVNITkVUV09SS19TRU5EX0xFR0FDWV9DTUQgX0lPKCdvJywgODApIC8qIHVuc2lnbmVkIGludCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCmluZGV4IDRhNmY1MGUuLjIzZmU3NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKQEAgLTY2LDcgKzY2LDcgQEAKIH07CiAKIC8qCi0gKiBlYWNoIHF1ZXVlIGhhcyBhbiBlbGV2YXRvcl9xdWV1ZSBhc3NvaWNhdGVkIHdpdGggaXQKKyAqIGVhY2ggcXVldWUgaGFzIGFuIGVsZXZhdG9yX3F1ZXVlIGFzc29jaWF0ZWQgd2l0aCBpdAogICovCiBzdHJ1Y3QgZWxldmF0b3JfcXVldWUKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCmluZGV4IDI5MTRmN2IuLmU3MWRkOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaApAQCAtODcsNyArODcsNyBAQAogI2lmZGVmIENPTkZJR19FWFQzX0ZTX1hBVFRSCiAJLyoKIAkgKiBFeHRlbmRlZCBhdHRyaWJ1dGVzIGNhbiBiZSByZWFkIGluZGVwZW5kZW50bHkgb2YgdGhlIG1haW4gZmlsZQotCSAqIGRhdGEuIFRha2luZyBpX3NlbSBldmVuIHdoZW4gcmVhZGluZyB3b3VsZCBjYXVzZSBjb250ZW50aW9uCisJICogZGF0YS4gVGFraW5nIGlfbXV0ZXggZXZlbiB3aGVuIHJlYWRpbmcgd291bGQgY2F1c2UgY29udGVudGlvbgogCSAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvCiAJICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nCiAJICogRUFzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDRjODIyMTkuLjkyYWUzZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIxOSw2ICsyMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpAQCAtNDg0LDcgKzQ4NSw3IEBACiAJdW5zaWduZWQgbG9uZwkJaV9ibG9ja3M7CiAJdW5zaWduZWQgc2hvcnQgICAgICAgICAgaV9ieXRlczsKIAlzcGlubG9ja190CQlpX2xvY2s7CS8qIGlfYmxvY2tzLCBpX2J5dGVzLCBtYXliZSBpX3NpemUgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCWlfc2VtOworCXN0cnVjdCBtdXRleAkJaV9tdXRleDsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCWlfYWxsb2Nfc2VtOwogCXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zCSppX29wOwogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJKmlfZm9wOwkvKiBmb3JtZXIgLT5pX29wLT5kZWZhdWx0X2ZpbGVfb3BzICovCkBAIC04MjAsNyArODIxLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlzX21hZ2ljOwogCXN0cnVjdCBkZW50cnkJCSpzX3Jvb3Q7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQlzX3Vtb3VudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlCXNfbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCXNfbG9jazsKIAlpbnQJCQlzX2NvdW50OwogCWludAkJCXNfc3luY2luZzsKIAlpbnQJCQlzX25lZWRfc3luY19mczsKQEAgLTg5MiwxMyArODkzLDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKIHsKIAlnZXRfZnNfZXhjbCgpOwotCWRvd24oJnNiLT5zX2xvY2spOworCW11dGV4X2xvY2soJnNiLT5zX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKQogewogCXB1dF9mc19leGNsKCk7Ci0JdXAoJnNiLT5zX2xvY2spOworCW11dGV4X3VubG9jaygmc2ItPnNfbG9jayk7CiB9CiAKIC8qCkBAIC0xMTkxLDcgKzExOTIsNyBAQAogICogICAgZGlyZWN0b3J5LiAgVGhlIG5hbWUgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgQG5hbWUgKHdpdGggdGhlCiAgKiAgICB1bmRlcnN0YW5kaW5nIHRoYXQgaXQgaXMgYWxyZWFkeSBwb2ludGluZyB0byBhIGEgJU5BTUVfTUFYKzEgc2l6ZWQKICAqICAgIGJ1ZmZlci4gICBnZXRfbmFtZSgpIHNob3VsZCByZXR1cm4gJTAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCi0gKiAgICBvciBlcnJvci4gIEBnZXRfbmFtZSB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IEBwYXJlbnQtPmlfc2VtIGhlbGQuCisgKiAgICBvciBlcnJvci4gIEBnZXRfbmFtZSB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IEBwYXJlbnQtPmlfbXV0ZXggaGVsZC4KICAqCiAgKiBnZXRfcGFyZW50OgogICogICAgQGdldF9wYXJlbnQgc2hvdWxkIGZpbmQgdGhlIHBhcmVudCBkaXJlY3RvcnkgZm9yIHRoZSBnaXZlbiBAY2hpbGQgd2hpY2gKQEAgLTEyMTMsNyArMTIxNCw3IEBACiAgKiAgICBuZnNkX2ZpbmRfZmhfZGVudHJ5KCkgaW4gZWl0aGVyIHRoZSBAb2JqIG9yIEBwYXJlbnQgcGFyYW1ldGVycy4KICAqCiAgKiBMb2NraW5nIHJ1bGVzOgotICogICAgZ2V0X3BhcmVudCBpcyBjYWxsZWQgd2l0aCBjaGlsZC0+ZF9pbm9kZS0+aV9zZW0gZG93bgorICogICAgZ2V0X3BhcmVudCBpcyBjYWxsZWQgd2l0aCBjaGlsZC0+ZF9pbm9kZS0+aV9tdXRleCBkb3duCiAgKiAgICBnZXRfbmFtZSBpcyBub3QgKHdoaWNoIGlzIHBvc3NpYmx5IGluY29uc2lzdGVudCkKICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCBmYjQ2ZjhkLi42ZmYyZDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTEwMyw2ICsxMDMsNyBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExWAk3MwkvKiBzYWE3MTF4IHZpZGVvIGVuY29kZXJzCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9BS0lUQUlPRVhQCTc0CS8qIElPIEV4cGFuZGVyIG9uIFNoYXJwIFNMLUMxMDAwICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9JTkZSQVJFRAk3NQkvKiBJMkMgSW5mcmFSZWQgb24gVmlkZW8gYm9hcmRzICovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9UVlA1MTUwCTc2CS8qIFRWUDUxNTAgdmlkZW8gZGVjb2RlciAgICAgICAgKi8KIAogI2RlZmluZSBJMkNfRFJJVkVSSURfSTJDREVWCTkwMAogI2RlZmluZSBJMkNfRFJJVkVSSURfQVJQICAgICAgICA5MDIgICAgLyogU01CdXMgQVJQIENsaWVudCAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGVmOGQwY2IuLjlhOGMwNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjM4LDcgKzYzOSw3IEBACiAJaW50CQljcmNfY291bnQ7CS8qIGNyYyBjb3VudGVyIHRvIHJlZHVjZSBkcml2ZSBzcGVlZCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlCWdlbmRldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGdlbmRldl9yZWxfc2VtOwkvKiB0byBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLworCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsJLyogdG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KIH0gaWRlX2RyaXZlX3Q7CiAKICNkZWZpbmUgdG9faWRlX2RldmljZShkZXYpY29udGFpbmVyX29mKGRldiwgaWRlX2RyaXZlX3QsIGdlbmRldikKQEAgLTc5NCw3ICs3OTUsNyBAQAogCXVuc2lnbmVkCXNnX21hcHBlZCAgOiAxOwkvKiBzZ190YWJsZSBhbmQgc2dfbmVudHMgYXJlIHJlYWR5ICovCiAKIAlzdHJ1Y3QgZGV2aWNlCWdlbmRldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGdlbmRldl9yZWxfc2VtOyAvKiBUbyBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLworCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsgLyogVG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KIAogCXZvaWQJCSpod2lmX2RhdGE7CS8qIGV4dHJhIGh3aWYgZGF0YSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oCmluZGV4IGVmODVhYjUuLmFkNTY1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oCkBAIC04LDExICs4LDExIEBACiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7Ci0JLyogV2UgbmVlZCBhbiBpbnRlcm5hbCBzZW1hcGhvcmUgc2ltaWxhciB0byBpbm9kZS0+aV9zZW0uCisJLyogV2UgbmVlZCBhbiBpbnRlcm5hbCBtdXRleCBzaW1pbGFyIHRvIGlub2RlLT5pX211dGV4LgogCSAgIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IHVzZWQgdGhlIGV4aXN0aW5nIG9uZSwgYmVjYXVzZQogCSAgIGVpdGhlciB0aGUgR0Mgd291bGQgZGVhZGxvY2ssIG9yIHdlJ2QgaGF2ZSB0byByZWxlYXNlIGl0CiAJICAgYmVmb3JlIGxldHRpbmcgR0MgcHJvY2VlZC4gT3Igd2UnZCBoYXZlIHRvIHB1dCB1Z2xpbmVzcwotCSAgIGludG8gdGhlIEdDIGNvZGUgc28gaXQgZGlkbid0IGF0dGVtcHQgdG8gb2J0YWluIHRoZSBpX3NlbQorCSAgIGludG8gdGhlIEdDIGNvZGUgc28gaXQgZGlkbid0IGF0dGVtcHQgdG8gb2J0YWluIHRoZSBpX211dGV4CiAJICAgZm9yIHRoZSBpbm9kZShzKSB3aGljaCBhcmUgYWxyZWFkeSBsb2NrZWQgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggY2E3ZmY4Zi4uZDBlNmNhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0yODYsNiArMjg2LDE1IEBACiAJMTsgXAogfSkKIAorLyoKKyAqIENoZWNrIGF0IGNvbXBpbGUgdGltZSB0aGF0ICdmdW5jdGlvbicgaXMgYSBjZXJ0YWluIHR5cGUsIG9yIGlzIGEgcG9pbnRlcgorICogdG8gdGhhdCB0eXBlIChuZWVkcyB0byB1c2UgdHlwZWRlZiBmb3IgdGhlIGZ1bmN0aW9uIHR5cGUuKQorICovCisjZGVmaW5lIHR5cGVjaGVja19mbih0eXBlLGZ1bmN0aW9uKSBcCisoewl0eXBlb2YodHlwZSkgX190bXAgPSBmdW5jdGlvbjsgXAorCSh2b2lkKV9fdG1wOyBcCit9KQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZGVmaW5lIFNJX0xPQURfU0hJRlQJMTYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9vcC5oIGIvaW5jbHVkZS9saW51eC9sb29wLmgKaW5kZXggNDBmNjNjOS4uZjk2NTA2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb29wLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb29wLmgKQEAgLTU4LDkgKzU4LDkgQEAKIAlzdHJ1Y3QgYmlvIAkJKmxvX2JpbzsKIAlzdHJ1Y3QgYmlvCQkqbG9fYmlvdGFpbDsKIAlpbnQJCQlsb19zdGF0ZTsKLQlzdHJ1Y3Qgc2VtYXBob3JlCWxvX3NlbTsKKwlzdHJ1Y3QgY29tcGxldGlvbglsb19kb25lOworCXN0cnVjdCBjb21wbGV0aW9uCWxvX2JoX2RvbmU7CiAJc3RydWN0IHNlbWFwaG9yZQlsb19jdGxfbXV0ZXg7Ci0Jc3RydWN0IHNlbWFwaG9yZQlsb19iaF9tdXRleDsKIAlpbnQJCQlsb19wZW5kaW5nOwogCiAJcmVxdWVzdF9xdWV1ZV90CQkqbG9fcXVldWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGY4MGU2My4uM2YxZmFmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBhbm9uX3ZtYTsKQEAgLTEwMjQsNiArMTAyNSw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKIHsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpICYmICFlbmFibGUpCisJCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHBhZ2VfYWRkcmVzcyhwYWdlKSwKKwkJCQkJCSBwYWdlX2FkZHJlc3MocGFnZSArIG51bXBhZ2VzKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCBhZWY2MDQyLi5jY2QzZTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtMjcsMTQgKzI3LDE1IEBACiAjZGVmaW5lIE1NQ19SU1BfTUFTSwkoMyA8PCAwKQogI2RlZmluZSBNTUNfUlNQX0NSQwkoMSA8PCAzKQkJLyogZXhwZWN0IHZhbGlkIGNyYyAqLwogI2RlZmluZSBNTUNfUlNQX0JVU1kJKDEgPDwgNCkJCS8qIGNhcmQgbWF5IHNlbmQgYnVzeSAqLworI2RlZmluZSBNTUNfUlNQX09QQ09ERQkoMSA8PCA1KQkJLyogcmVzcG9uc2UgY29udGFpbnMgb3Bjb2RlICovCiAKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIHJlc3BvbnNlIHR5cGVzLCBhbmQgY29ycmVzcG9uZCB0byB2YWxpZCBiaXQKICAqIHBhdHRlcm5zIG9mIHRoZSBhYm92ZSBmbGFncy4gIE9uZSBhZGRpdGlvbmFsIHZhbGlkIHBhdHRlcm4KICAqIGlzIGFsbCB6ZXJvcywgd2hpY2ggbWVhbnMgd2UgZG9uJ3QgZXhwZWN0IGEgcmVzcG9uc2UuCiAgKi8KLSNkZWZpbmUgTU1DX1JTUF9SMQkoTU1DX1JTUF9TSE9SVHxNTUNfUlNQX0NSQykKLSNkZWZpbmUgTU1DX1JTUF9SMUIJKE1NQ19SU1BfU0hPUlR8TU1DX1JTUF9DUkN8TU1DX1JTUF9CVVNZKQorI2RlZmluZSBNTUNfUlNQX1IxCShNTUNfUlNQX1NIT1JUfE1NQ19SU1BfQ1JDfE1NQ19SU1BfT1BDT0RFKQorI2RlZmluZSBNTUNfUlNQX1IxQgkoTU1DX1JTUF9TSE9SVHxNTUNfUlNQX0NSQ3xNTUNfUlNQX09QQ09ERXxNTUNfUlNQX0JVU1kpCiAjZGVmaW5lIE1NQ19SU1BfUjIJKE1NQ19SU1BfTE9OR3xNTUNfUlNQX0NSQykKICNkZWZpbmUgTU1DX1JTUF9SMwkoTU1DX1JTUF9TSE9SVCkKICNkZWZpbmUgTU1DX1JTUF9SNgkoTU1DX1JTUF9TSE9SVHxNTUNfUlNQX0NSQykKQEAgLTY0LDYgKzY1LDcgQEAKICNkZWZpbmUgTU1DX0RBVEFfV1JJVEUJKDEgPDwgOCkKICNkZWZpbmUgTU1DX0RBVEFfUkVBRAkoMSA8PCA5KQogI2RlZmluZSBNTUNfREFUQV9TVFJFQU0JKDEgPDwgMTApCisjZGVmaW5lIE1NQ19EQVRBX01VTFRJCSgxIDw8IDExKQogCiAJdW5zaWduZWQgaW50CQlieXRlc194ZmVyZWQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXV0ZXgtZGVidWcuaCBiL2luY2x1ZGUvbGludXgvbXV0ZXgtZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2NkOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdXRleC1kZWJ1Zy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19MSU5VWF9NVVRFWF9ERUJVR19ICisjZGVmaW5lIF9fTElOVVhfTVVURVhfREVCVUdfSAorCisvKgorICogTXV0ZXhlcyAtIGRlYnVnZ2luZyBoZWxwZXJzOgorICovCisKKyNkZWZpbmUgX19ERUJVR19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgXAorCSwgLmhlbGRfbGlzdCA9IExJU1RfSEVBRF9JTklUKGxvY2tuYW1lLmhlbGRfbGlzdCksIFwKKwkgIC5uYW1lID0gI2xvY2tuYW1lICwgLm1hZ2ljID0gJmxvY2tuYW1lCisKKyNkZWZpbmUgbXV0ZXhfaW5pdChzZW0pCQlfX211dGV4X2luaXQoc2VtLCBfX0ZVTkNUSU9OX18pCisKK2V4dGVybiB2b2lkIEZBU1RDQUxMKG11dGV4X2Rlc3Ryb3koc3RydWN0IG11dGV4ICpsb2NrKSk7CisKK2V4dGVybiB2b2lkIG11dGV4X2RlYnVnX3Nob3dfYWxsX2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgbXV0ZXhfZGVidWdfc2hvd19oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmlsdGVyKTsKK2V4dGVybiB2b2lkIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB2b2lkIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGNvbnN0IHZvaWQgKmZyb20sIGNvbnN0IHZvaWQgKnRvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L211dGV4LmggYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjZTBmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXV0ZXguaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIE11dGV4ZXM6IGJsb2NraW5nIG11dHVhbCBleGNsdXNpb24gbG9ja3MKKyAqCisgKiBzdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYWluIGRhdGEgc3RydWN0dXJlIGFuZCBBUEkgZGVmaW5pdGlvbnMuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NVVRFWF9ICisjZGVmaW5lIF9fTElOVVhfTVVURVhfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBTaW1wbGUsIHN0cmFpZ2h0Zm9yd2FyZCBtdXRleGVzIHdpdGggc3RyaWN0IHNlbWFudGljczoKKyAqCisgKiAtIG9ubHkgb25lIHRhc2sgY2FuIGhvbGQgdGhlIG11dGV4IGF0IGEgdGltZQorICogLSBvbmx5IHRoZSBvd25lciBjYW4gdW5sb2NrIHRoZSBtdXRleAorICogLSBtdWx0aXBsZSB1bmxvY2tzIGFyZSBub3QgcGVybWl0dGVkCisgKiAtIHJlY3Vyc2l2ZSBsb2NraW5nIGlzIG5vdCBwZXJtaXR0ZWQKKyAqIC0gYSBtdXRleCBvYmplY3QgbXVzdCBiZSBpbml0aWFsaXplZCB2aWEgdGhlIEFQSQorICogLSBhIG11dGV4IG9iamVjdCBtdXN0IG5vdCBiZSBpbml0aWFsaXplZCB2aWEgbWVtc2V0IG9yIGNvcHlpbmcKKyAqIC0gdGFzayBtYXkgbm90IGV4aXQgd2l0aCBtdXRleCBoZWxkCisgKiAtIG1lbW9yeSBhcmVhcyB3aGVyZSBoZWxkIGxvY2tzIHJlc2lkZSBtdXN0IG5vdCBiZSBmcmVlZAorICogLSBoZWxkIG11dGV4ZXMgbXVzdCBub3QgYmUgcmVpbml0aWFsaXplZAorICogLSBtdXRleGVzIG1heSBub3QgYmUgdXNlZCBpbiBpcnEgY29udGV4dHMKKyAqCisgKiBUaGVzZSBzZW1hbnRpY3MgYXJlIGZ1bGx5IGVuZm9yY2VkIHdoZW4gREVCVUdfTVVURVhFUyBpcworICogZW5hYmxlZC4gRnVydGhlcm1vcmUsIGJlc2lkZXMgZW5mb3JjaW5nIHRoZSBhYm92ZSBydWxlcywgdGhlIG11dGV4CisgKiBkZWJ1Z2dpbmcgY29kZSBhbHNvIGltcGxlbWVudHMgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBmZWF0dXJlcworICogdGhhdCBtYWtlIGxvY2sgZGVidWdnaW5nIGVhc2llciBhbmQgZmFzdGVyOgorICoKKyAqIC0gdXNlcyBzeW1ib2xpYyBuYW1lcyBvZiBtdXRleGVzLCB3aGVuZXZlciB0aGV5IGFyZSBwcmludGVkIGluIGRlYnVnIG91dHB1dAorICogLSBwb2ludC1vZi1hY3F1aXJlIHRyYWNraW5nLCBzeW1ib2xpYyBsb29rdXAgb2YgZnVuY3Rpb24gbmFtZXMKKyAqIC0gbGlzdCBvZiBhbGwgbG9ja3MgaGVsZCBpbiB0aGUgc3lzdGVtLCBwcmludG91dCBvZiB0aGVtCisgKiAtIG93bmVyIHRyYWNraW5nCisgKiAtIGRldGVjdHMgc2VsZi1yZWN1cnNpbmcgbG9ja3MgYW5kIHByaW50cyBvdXQgYWxsIHJlbGV2YW50IGluZm8KKyAqIC0gZGV0ZWN0cyBtdWx0aS10YXNrIGNpcmN1bGFyIGRlYWRsb2NrcyBhbmQgcHJpbnRzIG91dCBhbGwgYWZmZWN0ZWQKKyAqICAgbG9ja3MgYW5kIHRhc2tzIChhbmQgb25seSB0aG9zZSB0YXNrcykKKyAqLworc3RydWN0IG11dGV4IHsKKwkvKiAxOiB1bmxvY2tlZCwgMDogbG9ja2VkLCBuZWdhdGl2ZTogbG9ja2VkLCBwb3NzaWJsZSB3YWl0ZXJzICovCisJYXRvbWljX3QJCWNvdW50OworCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKKyNpZmRlZiBDT05GSUdfREVCVUdfTVVURVhFUworCXN0cnVjdCB0aHJlYWRfaW5mbwkqb3duZXI7CisJc3RydWN0IGxpc3RfaGVhZAloZWxkX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJYWNxdWlyZV9pcDsKKwljb25zdCBjaGFyIAkJKm5hbWU7CisJdm9pZAkJCSptYWdpYzsKKyNlbmRpZgorfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGNvbnRyb2wgc3RydWN0dXJlIGZvciB0YXNrcyBibG9ja2VkIG9uIG11dGV4LAorICogd2hpY2ggcmVzaWRlcyBvbiB0aGUgYmxvY2tlZCB0YXNrJ3Mga2VybmVsIHN0YWNrOgorICovCitzdHJ1Y3QgbXV0ZXhfd2FpdGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOworI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCisJc3RydWN0IG11dGV4CQkqbG9jazsKKwl2b2lkCQkJKm1hZ2ljOworI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKKyMgaW5jbHVkZSA8bGludXgvbXV0ZXgtZGVidWcuaD4KKyNlbHNlCisjIGRlZmluZSBfX0RFQlVHX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKQorIyBkZWZpbmUgbXV0ZXhfaW5pdChtdXRleCkJCQlfX211dGV4X2luaXQobXV0ZXgsIE5VTEwpCisjIGRlZmluZSBtdXRleF9kZXN0cm95KG11dGV4KQkJCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBtdXRleF9kZWJ1Z19zaG93X2FsbF9sb2NrcygpCQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbXV0ZXhfZGVidWdfc2hvd19oZWxkX2xvY2tzKHApCQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZCh0YXNrKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoZnJvbSwgdG8pCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpIFwKKwkJeyAuY291bnQgPSBBVE9NSUNfSU5JVCgxKSBcCisJCSwgLndhaXRfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCBcCisJCSwgLndhaXRfbGlzdCA9IExJU1RfSEVBRF9JTklUKGxvY2tuYW1lLndhaXRfbGlzdCkgXAorCQlfX0RFQlVHX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSB9CisKKyNkZWZpbmUgREVGSU5FX01VVEVYKG11dGV4bmFtZSkgXAorCXN0cnVjdCBtdXRleCBtdXRleG5hbWUgPSBfX01VVEVYX0lOSVRJQUxJWkVSKG11dGV4bmFtZSkKKworZXh0ZXJuIHZvaWQgZmFzdGNhbGwgX19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKioKKyAqIG11dGV4X2lzX2xvY2tlZCAtIGlzIHRoZSBtdXRleCBsb2NrZWQKKyAqIEBsb2NrOiB0aGUgbXV0ZXggdG8gYmUgcXVlcmllZAorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgbXV0ZXggaXMgbG9ja2VkLCAwIGlmIHVubG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBmYXN0Y2FsbCBtdXRleF9pc19sb2NrZWQoc3RydWN0IG11dGV4ICpsb2NrKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmbG9jay0+Y291bnQpICE9IDE7Cit9CisKKy8qCisgKiBTZWUga2VybmVsL211dGV4LmMgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgQVBJcy4KKyAqIEFsc28gc2VlIERvY3VtZW50YXRpb24vbXV0ZXgtZGVzaWduLnR4dC4KKyAqLworZXh0ZXJuIHZvaWQgZmFzdGNhbGwgbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOworZXh0ZXJuIGludCBmYXN0Y2FsbCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IG11dGV4ICpsb2NrKTsKKy8qCisgKiBOT1RFOiBtdXRleF90cnlsb2NrKCkgZm9sbG93cyB0aGUgc3Bpbl90cnlsb2NrKCkgY29udmVudGlvbiwKKyAqICAgICAgIG5vdCB0aGUgZG93bl90cnlsb2NrKCkgY29udmVudGlvbiEKKyAqLworZXh0ZXJuIGludCBmYXN0Y2FsbCBtdXRleF90cnlsb2NrKHN0cnVjdCBtdXRleCAqbG9jayk7CitleHRlcm4gdm9pZCBmYXN0Y2FsbCBtdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpsb2NrKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCmluZGV4IGJiODQyZWEuLjA3OThiNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCkBAIC0yOTQsNyArMjk0LDcgQEAKIC8qCiAgKiBMb2NrIGEgZmlsZSBoYW5kbGUvaW5vZGUKICAqIE5PVEU6IGJvdGggZmhfbG9jayBhbmQgZmhfdW5sb2NrIGFyZSBkb25lICJieSBoYW5kIiBpbgotICogdmZzLmM6bmZzZF9yZW5hbWUgYXMgaXQgbmVlZHMgdG8gZ3JhYiAyIGlfc2VtJ3MgYXQgb25jZQorICogdmZzLmM6bmZzZF9yZW5hbWUgYXMgaXQgbmVlZHMgdG8gZ3JhYiAyIGlfbXV0ZXgncyBhdCBvbmNlCiAgKiBzbywgYW55IGNoYW5nZXMgaGVyZSBzaG91bGQgYmUgcmVmbGVjdGVkIHRoZXJlLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTMxNyw3ICszMTcsNyBAQAogCX0KIAogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWZpbGxfcHJlX3djYyhmaHApOwogCWZocC0+ZmhfbG9ja2VkID0gMTsKIH0KQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJaWYgKGZocC0+ZmhfbG9ja2VkKSB7CiAJCWZpbGxfcG9zdF93Y2MoZmhwKTsKLQkJdXAoJmZocC0+ZmhfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmZmhwLT5maF9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQlmaHAtPmZoX2xvY2tlZCA9IDA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKaW5kZXggMTc2NzA3My4uYjEyZTU5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCkBAIC0zNyw3ICszNyw3IEBACiAgICBtZW1vcnkgYWxsb2NhdGlvbiwgd2hlcmVhcyBQSVBFX0JVRiBtYWtlcyBhdG9taWNpdHkgZ3VhcmFudGVlcy4gICovCiAjZGVmaW5lIFBJUEVfU0laRQkJUEFHRV9TSVpFCiAKLSNkZWZpbmUgUElQRV9TRU0oaW5vZGUpCQkoJihpbm9kZSkuaV9zZW0pCisjZGVmaW5lIFBJUEVfTVVURVgoaW5vZGUpCSgmKGlub2RlKS5pX211dGV4KQogI2RlZmluZSBQSVBFX1dBSVQoaW5vZGUpCSgmKGlub2RlKS5pX3BpcGUtPndhaXQpCiAjZGVmaW5lIFBJUEVfUkVBREVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT5yZWFkZXJzKQogI2RlZmluZSBQSVBFX1dSSVRFUlMoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+d3JpdGVycykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCAwMDFhYjgyLi5lMjc2YzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0xODU3LDcgKzE4NTcsNyBAQAogI2RlZmluZSBHRVRfQkxPQ0tfQ1JFQVRFIDEJLyogYWRkIGFueXRoaW5nIHlvdSBuZWVkIHRvIGZpbmQgYmxvY2sgKi8KICNkZWZpbmUgR0VUX0JMT0NLX05PX0hPTEUgMgkvKiByZXR1cm4gLUVOT0VOVCBmb3IgZmlsZSBob2xlcyAqLwogI2RlZmluZSBHRVRfQkxPQ0tfUkVBRF9ESVJFQ1QgNAkvKiByZWFkIHRoZSB0YWlsIGlmIGluZGlyZWN0IGl0ZW0gbm90IGZvdW5kICovCi0jZGVmaW5lIEdFVF9CTE9DS19OT19JU0VNICAgICA4CS8qIGlfc2VtIGlzIG5vdCBoZWxkLCBkb24ndCBwcmVhbGxvY2F0ZSAqLworI2RlZmluZSBHRVRfQkxPQ0tfTk9fSU1VWCAgICAgOAkvKiBpX211dGV4IGlzIG5vdCBoZWxkLCBkb24ndCBwcmVhbGxvY2F0ZSAqLwogI2RlZmluZSBHRVRfQkxPQ0tfTk9fREFOR0xFICAgMTYJLyogZG9uJ3QgbGVhdmUgYW55IHRyYW5zYWN0aW9ucyBydW5uaW5nICovCiAKIGludCByZXN0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDc4ZWI5MmEuLjg1YjUzZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTgxNyw2ICs4MTcsMTEgQEAKIC8qIFByb3RlY3Rpb24gb2YgcHJvY19kZW50cnk6IG5lc3RpbmcgcHJvY19sb2NrLCBkY2FjaGVfbG9jaywgd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOyAqLwogCXNwaW5sb2NrX3QgcHJvY19sb2NrOwogCisjaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKKwkvKiBtdXRleCBkZWFkbG9jayBkZXRlY3Rpb24gKi8KKwlzdHJ1Y3QgbXV0ZXhfd2FpdGVyICpibG9ja2VkX29uOworI2VuZGlmCisKIC8qIGpvdXJuYWxsaW5nIGZpbGVzeXN0ZW0gaW5mbyAqLwogCXZvaWQgKmpvdXJuYWxfaW5mbzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaAppbmRleCAwZTllNDhiLi4xMjFlMjZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0xJTlVYX1ZJREVPX0RFQ09ERVJfSAogI2RlZmluZSBfTElOVVhfVklERU9fREVDT0RFUl9ICiAKKyNkZWZpbmUgSEFWRV9WSURFT19ERUNPREVSIDEKKwogc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSB7IC8qIHRoaXMgbmFtZSBpcyB0b28gbG9uZyAqLwogCV9fdTMyCWZsYWdzOwogI2RlZmluZQlWSURFT19ERUNPREVSX1BBTAkxCS8qIGNhbiBkZWNvZGUgUEFMIHNpZ25hbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggMWNkZWQ2OC4uY2U0MDY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC02NDIsNiArNjQyLDEyIEBACiAjZGVmaW5lIFY0TDJfU1REX0FUU0NfOF9WU0IgICAgICgodjRsMl9zdGRfaWQpMHgwMTAwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfQVRTQ18xNl9WU0IgICAgKCh2NGwyX3N0ZF9pZCkweDAyMDAwMDAwKQogCisvKiBzb21lIG1lcmdlZCBzdGFuZGFyZHMgKi8KKyNkZWZpbmUgVjRMMl9TVERfTU4JKFY0TDJfU1REX1BBTF9NfFY0TDJfU1REX1BBTF9OfFY0TDJfU1REX1BBTF9OY3xWNEwyX1NURF9OVFNDKQorI2RlZmluZSBWNEwyX1NURF9CCShWNEwyX1NURF9QQUxfQnxWNEwyX1NURF9QQUxfQjF8VjRMMl9TVERfU0VDQU1fQikKKyNkZWZpbmUgVjRMMl9TVERfR0gJKFY0TDJfU1REX1BBTF9HfFY0TDJfU1REX1BBTF9IfFY0TDJfU1REX1NFQ0FNX0d8VjRMMl9TVERfU0VDQU1fSCkKKyNkZWZpbmUgVjRMMl9TVERfREsJKFY0TDJfU1REX1BBTF9ES3xWNEwyX1NURF9TRUNBTV9ESykKKwogLyogc29tZSBjb21tb24gbmVlZGVkIHN0dWZmICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9CRwkJKFY0TDJfU1REX1BBTF9CCQl8XAogCQkJCSBWNEwyX1NURF9QQUxfQjEJfFwKQEAgLTY2Miw3ICs2NjgsOCBAQAogCQkJCSBWNEwyX1NURF9TRUNBTV9HCXxcCiAJCQkJIFY0TDJfU1REX1NFQ0FNX0gJfFwKIAkJCQkgVjRMMl9TVERfU0VDQU1fREsJfFwKLQkJCQkgVjRMMl9TVERfU0VDQU1fTCkKKwkJCQkgVjRMMl9TVERfU0VDQU1fTCAgICAgICB8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9MQykKIAogI2RlZmluZSBWNEwyX1NURF81MjVfNjAJCShWNEwyX1NURF9QQUxfTQkJfFwKIAkJCQkgVjRMMl9TVERfUEFMXzYwCXxcCkBAIC04ODgsNyArODk1LDYgQEAKIAogLyogIEZsYWdzIGZvciB0aGUgJ21vZGUnIGZpZWxkICovCiAjZGVmaW5lIFY0TDJfQVVETU9ERV9BVkwJCTB4MDAwMDEKLSNkZWZpbmUgVjRMMl9BVURNT0RFXzMyQklUUwkJMHgwMDAwMgogCiBzdHJ1Y3QgdjRsMl9hdWRpb291dAogewpAQCAtMTExMCw3ICsxMTE2LDYgQEAKIC8qIG5hbWVzIGZvciBmYW5jeSBkZWJ1ZyBvdXRwdXQgKi8KIGV4dGVybiBjaGFyICp2NGwyX2ZpZWxkX25hbWVzW107CiBleHRlcm4gY2hhciAqdjRsMl90eXBlX25hbWVzW107Ci1leHRlcm4gY2hhciAqdjRsMl9pb2N0bF9uYW1lc1tdOwogCiAvKiAgQ29tcGF0aWJpbGl0eSBsYXllciBpbnRlcmZhY2UgIC0tICB2NGwxLWNvbXBhdCBtb2R1bGUgKi8KIHR5cGVkZWYgaW50ICgqdjRsMl9raW9jdGwpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMTExOCw2ICsxMTIzLDExIEBACiBpbnQgdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICAgaW50IGNtZCwgdm9pZCAqYXJnLCB2NGwyX2tpb2N0bCBkcml2ZXJfaW9jdGwpOwogCisvKiAzMiBCaXRzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIDY0IGJpdHMgcHJvY2Vzc29ycyAqLworZXh0ZXJuIGxvbmcgdjRsX2NvbXBhdF9pb2N0bDMyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKKworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVYyX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaCBiL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmgKaW5kZXggYjdkNGIwOS4uMjk1ZDI1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaAorKysgYi9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCkBAIC0yMywxMSArMjMsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIHY0bCBkZXZpY2Ugd2FzIG9wZW5lZCBpbiBSYWRpbyBtb2RlICovCi0jZGVmaW5lIEFVRENfU0VUX1JBRElPICAgICAgICBfSU8oJ20nLDIpCi0vKiBzZWxlY3QgZnJvbSBUVixyYWRpbyxleHRlcm4sTVVURSAqLwotI2RlZmluZSBBVURDX1NFVF9JTlBVVCAgICAgICAgX0lPVygnbScsMTcsaW50KQotCiAvKiBhdWRpbyBpbnB1dHMgKi8KICNkZWZpbmUgQVVESU9fVFVORVIgICAgICAgIDB4MDAKICNkZWZpbmUgQVVESU9fUkFESU8gICAgICAgIDB4MDEKQEAgLTQwLDE1ICszNSw0IEBACiAjZGVmaW5lIEFVRElPX01VVEUgICAgICAgICAweDgwCiAjZGVmaW5lIEFVRElPX1VOTVVURSAgICAgICAweDgxCiAKLS8qIGFsbCB0aGUgc3R1ZmYgYmVsb3cgaXMgb2Jzb2xldGUgYW5kIGp1c3QgaGVyZSBmb3IgcmVmZXJlbmNlLiAgSSdsbAotICogcmVtb3ZlIGl0IG9uY2UgdGhlIGRyaXZlciBpcyB0ZXN0ZWQgYW5kIHdvcmtzIGZpbmUuCi0gKgotICogSW5zdGVhZCBjcmVhdGluZyBhbG90IG9mIHRpbnkgQVBJJ3MgZm9yIGFsbCBraW5kcyBvZiBkaWZmZXJlbnQKLSAqIGNoaXBzLCB3ZSdsbCBqdXN0IHBhc3MgdGhyb3V0aCB0aGUgdjRsIGlvY3RsIHN0cnVjdHMgKHY0bDIgbm90Ci0gKiB5ZXQuLi4pLiAgSXQgaXMgYSBiaXQgbGVzcyBmbGV4aWJsZSwgYnV0IG1vc3QvYWxsIHVzZWQgaTJjIGNoaXBzCi0gKiBtYWtlIHNlbnNlIGluIHY0bCBjb250ZXh0IG9ubHkuICBTbyBJIHRoaW5rIHRoYXQncyBhY2NlcHRhYmxlLi4uCi0gKi8KLQotLyogbWlzYyBzdHVmZiB0byBwYXNzIGFyb3VuZCBjb25maWcgaW5mbyB0byBpMmMgY2hpcHMgKi8KLSNkZWZpbmUgQVVEQ19DT05GSUdfUElOTkFDTEUgIF9JT1coJ20nLDMyLGludCkKICNlbmRpZiAvKiBBVURJT0NISVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAppbmRleCAxNmFmOTI5Li5lNWU3NDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMTc4LDYgKzE3OCw4IEBACiAKIAlzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzICppb2N0bHM7CiAJaW50ICgqaW9jdGwpKHN0cnVjdCBzYWE3MTQ2X2ZoKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmJpX2ZvcHM7CiB9OwogCiBzdHJ1Y3Qgc2FhNzE0Nl91c2Vfb3BzICB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggYjM3Y2RlNi4uNzY3NGIxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtODIsOSArODIsOSBAQAogI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMJNDMKIAogI2RlZmluZSBUVU5FUl9QSElMSVBTXzRJTjEJCTQ0CS8qIEFUSSBUViBXb25kZXIgUHJvIC0gQ29uZXhhbnQgKi8KLS8qIE1pY3JvdHVuZSBtZXJnZWdlZCB3aXRoIFRlbWljIDEyLzMxLzE5OTkgcGFydGlhbGx5IGZpbmFuY2VkIGJ5IEFscHMgLSB0aGVzZSBtYXkgYmUgc2ltaWxhciB0byBUZW1pYyAqLworLyogTWljcm90dW5lIG1lcmdlZCB3aXRoIFRlbWljIDEyLzMxLzE5OTkgcGFydGlhbGx5IGZpbmFuY2VkIGJ5IEFscHMgLSB0aGVzZSBtYXkgYmUgc2ltaWxhciB0byBUZW1pYyAqLwogI2RlZmluZSBUVU5FUl9NSUNST1RVTkVfNDA0OUZNNSAJNDUKLSNkZWZpbmUgVFVORVJfTUlDUk9UVU5FXzQwNDJfRkk1CTQ2CisjZGVmaW5lIFRVTkVSX1BBTkFTT05JQ19WUDI3CQk0NgogI2RlZmluZSBUVU5FUl9MR19OVFNDX1RBUEUJCTQ3CiAKICNkZWZpbmUgVFVORVJfVE5GXzg4MzFCR0ZGCQk0OApAQCAtMTAyLDcgKzEwMiw3IEBACiAjZGVmaW5lIFRVTkVSX1lNRUNfVFZGXzg1MzFNRgkJNTgKICNkZWZpbmUgVFVORVJfWU1FQ19UVkZfNTUzM01GCQk1OQkvKiBQaXhlbHZpZXcgUHJvIFVsdHJhIE5UU0MgKi8KIAotI2RlZmluZSBUVU5FUl9USE9NU09OX0RUVDc2MTEJCTYwCS8qIERWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkLVQgKi8KKyNkZWZpbmUgVFVORVJfVEhPTVNPTl9EVFQ3NjFYCQk2MAkvKiBEVFQgNzYxMSA3NjExQSA3NjEyIDc2MTMgNzYxM0EgNzYxNCA3NjE1IDc2MTVBICovCiAjZGVmaW5lIFRVTkVSX1RFTkFfOTUzM19ESQkJNjEKICNkZWZpbmUgVFVORVJfVEVBNTc2NwkJCTYyCS8qIE9ubHkgRk0gUmFkaW8gVHVuZXIgKi8KICNkZWZpbmUgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszCTYzCkBAIC0xMTUsNDcgKzExNSwyNiBAQAogI2RlZmluZSBUVU5FUl9QSElMSVBTX1RVVjEyMzZECQk2OAkvKiBBVEkgSERUViBXb25kZXIgKi8KICNkZWZpbmUgVFVORVJfVE5GXzUzMzVNRiAgICAgICAgICAgICAgICA2OQkvKiBTYWJyZW50IEJ0ODQ4ICAgKi8KIAotI2RlZmluZSBOT1RVTkVSIDAKLSNkZWZpbmUgUEFMICAgICAxCS8qIFBBTF9CRyAqLwotI2RlZmluZSBQQUxfSSAgIDIKLSNkZWZpbmUgTlRTQyAgICAzCi0jZGVmaW5lIFNFQ0FNICAgNAotI2RlZmluZSBBVFNDICAgIDUKLSNkZWZpbmUgUkFESU8gICA2Ci0KLSNkZWZpbmUgTm9UdW5lciAwCi0jZGVmaW5lIFBoaWxpcHMgMQotI2RlZmluZSBURU1JQyAgIDIKLSNkZWZpbmUgU29ueSAgICAzCi0jZGVmaW5lIEFscHMgICAgNAotI2RlZmluZSBMR0lOTk9URUsgNQotI2RlZmluZSBTSEFSUCAgIDYKLSNkZWZpbmUgU2Ftc3VuZyA3Ci0jZGVmaW5lIE1pY3JvdHVuZSA4Ci0jZGVmaW5lIEhJVEFDSEkgOQotI2RlZmluZSBQYW5hc29uaWMgMTAKLSNkZWZpbmUgVENMICAgICAxMQotI2RlZmluZSBUSE9NU09OIDEyCi0KLSNkZWZpbmUgVFVORVJfU0VUX1RZUEVfQUREUiAgICAgICAgICBfSU9XKCdUJywzLGludCkKLSNkZWZpbmUgVFVORVJfU0VUX1NUQU5EQlkgICAgICAgICAgICBfSU9XKCdUJyw0LGludCkKLSNkZWZpbmUgVERBOTg4N19TRVRfQ09ORklHICAgICAgICAgICBfSU9XKCd0Jyw1LGludCkKLQogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwotIyBkZWZpbmUgVERBOTg4N19QUkVTRU5UICAgICAgICAgICAgICgxPDwwKQotIyBkZWZpbmUgVERBOTg4N19QT1JUMV9JTkFDVElWRSAgICAgICgxPDwxKQotIyBkZWZpbmUgVERBOTg4N19QT1JUMl9JTkFDVElWRSAgICAgICgxPDwyKQotIyBkZWZpbmUgVERBOTg4N19RU1MgICAgICAgICAgICAgICAgICgxPDwzKQotIyBkZWZpbmUgVERBOTg4N19JTlRFUkNBUlJJRVIgICAgICAgICgxPDw0KQotIyBkZWZpbmUgVERBOTg4N19QT1JUMV9BQ1RJVkUgICAgICAgICgxPDw1KQotIyBkZWZpbmUgVERBOTg4N19QT1JUMl9BQ1RJVkUgICAgICAgICgxPDw2KQotIyBkZWZpbmUgVERBOTg4N19JTlRFUkNBUlJJRVJfTlRTQyAgICgxPDw3KQorI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKKyNkZWZpbmUgVERBOTg4N19QT1JUMV9JTkFDVElWRSAJCSgxPDwxKQorI2RlZmluZSBUREE5ODg3X1BPUlQyX0lOQUNUSVZFIAkJKDE8PDIpCisjZGVmaW5lIFREQTk4ODdfUVNTIAkJCSgxPDwzKQorI2RlZmluZSBUREE5ODg3X0lOVEVSQ0FSUklFUiAJCSgxPDw0KQorI2RlZmluZSBUREE5ODg3X1BPUlQxX0FDVElWRSAJCSgxPDw1KQorI2RlZmluZSBUREE5ODg3X1BPUlQyX0FDVElWRSAJCSgxPDw2KQorI2RlZmluZSBUREE5ODg3X0lOVEVSQ0FSUklFUl9OVFNDIAkoMTw8NykKKy8qIFR1bmVyIHRha2VvdmVyIHBvaW50IGFkanVzdG1lbnQsIGluIGRCLCAtMTYgPD0gdG9wIDw9IDE1ICovCisjZGVmaW5lIFREQTk4ODdfVE9QX01BU0sgCQkoMHgzZiA8PCA4KQorI2RlZmluZSBUREE5ODg3X1RPUF9TRVQgCQkoMSA8PCAxMykKKyNkZWZpbmUgVERBOTg4N19UT1AodG9wKSAJCShUREE5ODg3X1RPUF9TRVQgfCAoKCgxNiArICh0b3ApKSAmIDB4MWYpIDw8IDgpKQorCiAvKiBjb25maWcgb3B0aW9ucyAqLwotIyBkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTX01BU0sgICAgICgzPDwxNikKLSMgZGVmaW5lIFREQTk4ODdfREVFTVBIQVNJU19OT05FICAgICAoMTw8MTYpCi0jIGRlZmluZSBUREE5ODg3X0RFRU1QSEFTSVNfNTAgICAgICAgKDI8PDE2KQotIyBkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTXzc1ICAgICAgICgzPDwxNikKLSMgZGVmaW5lIFREQTk4ODdfQVVUT01VVEUgICAgICAgICAgICAoMTw8MTgpCisjZGVmaW5lIFREQTk4ODdfREVFTVBIQVNJU19NQVNLIAkoMzw8MTYpCisjZGVmaW5lIFREQTk4ODdfREVFTVBIQVNJU19OT05FIAkoMTw8MTYpCisjZGVmaW5lIFREQTk4ODdfREVFTVBIQVNJU181MCAJCSgyPDwxNikKKyNkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTXzc1IAkJKDM8PDE2KQorI2RlZmluZSBUREE5ODg3X0FVVE9NVVRFIAkJKDE8PDE4KQogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC0xNjcsMTAgKzE0NiwyNiBAQAogCVRfU1RBTkRCWQk9IDEgPDwgMzEKIH07CiAKKy8qIE9sZGVyIGJvYXJkcyBvbmx5IGhhZCBhIHNpbmdsZSB0dW5lciBkZXZpY2UuIE5vd2FkYXlzIG11bHRpcGxlIHR1bmVyCisgICBkZXZpY2VzIG1heSBiZSBwcmVzZW50IG9uIGEgc2luZ2xlIGJvYXJkLiBVc2luZyBUVU5FUl9TRVRfVFlQRV9BRERSCisgICB0byBwYXNzIHRoZSB0dW5lcl9zZXR1cCBzdHJ1Y3R1cmUgaXQgaXMgcG9zc2libGUgdG8gc2V0dXAgZWFjaCB0dW5lcgorICAgZGV2aWNlIGluIHR1cm4uCisKKyAgIFNpbmNlIG11bHRpcGxlIGRldmljZXMgbWF5IGJlIHByZXNlbnQgaXQgaXMgbm8gbG9uZ2VyIHN1ZmZpY2llbnQgdG8KKyAgIHNlbmQgYSBjb21tYW5kIHRvIGEgc2luZ2xlIGkyYyBkZXZpY2UuIEluc3RlYWQgeW91IHNob3VsZCBicm9hZGNhc3QKKyAgIHRoZSBjb21tYW5kIHRvIGFsbCBpMmMgZGV2aWNlcy4KKworICAgQnkgc2V0dGluZyB0aGUgbW9kZV9tYXNrIGNvcnJlY3RseSB5b3UgY2FuIHNlbGVjdCB3aGljaCBjb21tYW5kcyBhcmUKKyAgIGFjY2VwdGVkIGJ5IGEgc3BlY2lmaWMgdHVuZXIgZGV2aWNlLiBGb3IgZXhhbXBsZSwgc2V0IG1vZGVfbWFzayB0bworICAgVF9SQURJTyBpZiB0aGUgZGV2aWNlIGlzIGEgcmFkaW8tb25seSB0dW5lci4gVGhhdCBzcGVjaWZpYyB0dW5lciB3aWxsCisgICBvbmx5IGFjY2VwdCBjb21tYW5kcyB3aGVuIHRoZSB0dW5lciBpcyBpbiByYWRpbyBtb2RlIGFuZCBpZ25vcmUgdGhlbQorICAgd2hlbiB0aGUgdHVuZXIgaXMgc2V0IHRvIFRWIG1vZGUuCisgKi8KKwogc3RydWN0IHR1bmVyX3NldHVwIHsKLQl1bnNpZ25lZCBzaG9ydAlhZGRyOwotCXVuc2lnbmVkIGludAl0eXBlOwotCXVuc2lnbmVkIGludAltb2RlX21hc2s7CisJdW5zaWduZWQgc2hvcnQJYWRkcjsgCS8qIEkyQyBhZGRyZXNzICovCisJdW5zaWduZWQgaW50CXR5cGU7ICAgLyogVHVuZXIgdHlwZSAqLworCXVuc2lnbmVkIGludAltb2RlX21hc2s7ICAvKiBBbGxvd2VkIHR1bmVyIG1vZGVzICovCiB9OwogCiBzdHJ1Y3QgdHVuZXIgewpAQCAtMjA3LDcgKzIwMiw2IEBACiAJdm9pZCAoKnN0YW5kYnkpKHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgdHVuZXJfZGVidWc7CiBleHRlcm4gdW5zaWduZWQgY29uc3QgaW50IHR1bmVyX2NvdW50OwogCiBleHRlcm4gaW50IG1pY3JvdHVuZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKQEAgLTIxOSwxNSArMjEzLDE1IEBACiAKICNkZWZpbmUgdHVuZXJfd2FybihmbXQsIGFyZy4uLikgZG8ge1wKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+aTJjLmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKLQkJCXQtPmkyYy5hZGFwdGVyLT5uciwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisJCQlpMmNfYWRhcHRlcl9pZCh0LT5pMmMuYWRhcHRlciksIHQtPmkyYy5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQogI2RlZmluZSB0dW5lcl9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7XAogCXByaW50ayhLRVJOX0lORk8gIiVzICVkLSUwNHg6ICIgZm10LCB0LT5pMmMuZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCQkJdC0+aTJjLmFkYXB0ZXItPm5yLCB0LT5pMmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwkJCWkyY19hZGFwdGVyX2lkKHQtPmkyYy5hZGFwdGVyKSwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHR1bmVyX2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKLQlpZiAodHVuZXJfZGVidWcpIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzICVkLSUwNHg6ICIgZm10LCBcCi0JCQl0LT5pMmMuZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCQkJdC0+aTJjLmFkYXB0ZXItPm5yLCB0LT5pMmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwlleHRlcm4gaW50IGRlYnVnOyBcCisJaWYgKGRlYnVnKSBcCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+aTJjLmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKKwkJCWkyY19hZGFwdGVyX2lkKHQtPmkyYy5hZGFwdGVyKSwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCBkM2ZkNDgxLi4zY2MzMTMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC0yNiwxMiArMjYsNTcgQEAKICNpZm5kZWYgVjRMMl9DT01NT05fSF8KICNkZWZpbmUgVjRMMl9DT01NT05fSF8KIAotLyogVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRICovCi1lbnVtIHY0bDJfYXVkaW9fY2xvY2tfZnJlcSB7Ci0JVjRMMl9BVURDTEtfMzJfS0haICA9IDMyMDAwLAotCVY0TDJfQVVEQ0xLXzQ0MV9LSFogPSA0NDEwMCwKLQlWNEwyX0FVRENMS180OF9LSFogID0gNDgwMDAsCi19OworLyogdjRsIGRlYnVnZ2luZyBhbmQgZGlhZ25vc3RpY3MgKi8KKworLyogQ29tbW9uIHByaW50ayBjb25zdHVjdHMgZm9yIHY0bC1pMmMgZHJpdmVycy4gVGhlc2UgbWFjcm9zIGNyZWF0ZSBhIHVuaXF1ZQorICAgcHJlZml4IGNvbnNpc3Rpbmcgb2YgdGhlIGRyaXZlciBuYW1lLCB0aGUgYWRhcHRlciBudW1iZXIgYW5kIHRoZSBpMmMKKyAgIGFkZHJlc3MuICovCisjZGVmaW5lIHY0bF9wcmludGsobGV2ZWwsIG5hbWUsIGFkYXB0ZXIsIGFkZHIsIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKGxldmVsICIlcyAlZC0lMDR4OiAiIGZtdCwgbmFtZSwgaTJjX2FkYXB0ZXJfaWQoYWRhcHRlciksIGFkZHIgLCAjIyBhcmcpCisKKyNkZWZpbmUgdjRsX2NsaWVudF9wcmludGsobGV2ZWwsIGNsaWVudCwgZm10LCBhcmcuLi4pCQkJICAgIFwKKwl2NGxfcHJpbnRrKGxldmVsLCAoY2xpZW50KS0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgKGNsaWVudCktPmFkYXB0ZXIsIFwKKwkJICAgKGNsaWVudCktPmFkZHIsIGZtdCAsICMjIGFyZykKKworI2RlZmluZSB2NGxfZXJyKGNsaWVudCwgZm10LCBhcmcuLi4pIFwKKwl2NGxfY2xpZW50X3ByaW50ayhLRVJOX0VSUiwgY2xpZW50LCBmbXQgLCAjIyBhcmcpCisKKyNkZWZpbmUgdjRsX3dhcm4oY2xpZW50LCBmbXQsIGFyZy4uLikgXAorCXY0bF9jbGllbnRfcHJpbnRrKEtFUk5fV0FSTklORywgY2xpZW50LCBmbXQgLCAjIyBhcmcpCisKKyNkZWZpbmUgdjRsX2luZm8oY2xpZW50LCBmbXQsIGFyZy4uLikgXAorCXY0bF9jbGllbnRfcHJpbnRrKEtFUk5fSU5GTywgY2xpZW50LCBmbXQgLCAjIyBhcmcpCisKKy8qIFRoZXNlIHRocmVlIG1hY3JvcyBhc3N1bWUgdGhhdCB0aGUgZGVidWcgbGV2ZWwgaXMgc2V0IHdpdGggYSBtb2R1bGUKKyAgIHBhcmFtZXRlciBjYWxsZWQgJ2RlYnVnJy4gKi8KKyNkZWZpbmUgdjRsX2RiZyhsZXZlbCwgY2xpZW50LCBmbXQsIGFyZy4uLikJCQkJICAgICBcCisJZG8geyAJCQkJCQkJCSAgICAgXAorCQlleHRlcm4gaW50IGRlYnVnOwkJCQkJICAgICBcCisJCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKQkJCQkJICAgICBcCisJCQl2NGxfY2xpZW50X3ByaW50ayhLRVJOX0RFQlVHLCBjbGllbnQsIGZtdCAsICMjIGFyZyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBQcmludHMgdGhlIGlvY3RsIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0ICovCitleHRlcm4gdm9pZCB2NGxfcHJpbnRrX2lvY3RsKHVuc2lnbmVkIGludCBjbWQpOworCisvKiBVc2UgdGhpcyBtYWNybyBmb3Igbm9uLUkyQyBkcml2ZXJzLiBQYXNzIHRoZSBkcml2ZXIgbmFtZSBhcyB0aGUgZmlyc3QgYXJnLiAqLworI2RlZmluZSB2NGxfcHJpbnRfaW9jdGwobmFtZSwgY21kKSAgCQkgXAorCWRvIHsgIAkJCQkJIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiLCBuYW1lKTsgXAorCQl2NGxfcHJpbnRrX2lvY3RsKGNtZCk7CQkgXAorCX0gd2hpbGUgKDApCisKKy8qIFVzZSB0aGlzIG1hY3JvIGluIEkyQyBkcml2ZXJzIHdoZXJlICdjbGllbnQnIGlzIHRoZSBzdHJ1Y3QgaTJjX2NsaWVudAorICAgcG9pbnRlciAqLworI2RlZmluZSB2NGxfaTJjX3ByaW50X2lvY3RsKGNsaWVudCwgY21kKSAJCSAgIFwKKwlkbyB7ICAgICAgCQkJCQkgICBcCisJCXY0bF9jbGllbnRfcHJpbnRrKEtFUk5fREVCVUcsIGNsaWVudCwgIiIpOyBcCisJCXY0bF9wcmludGtfaW9jdGwoY21kKTsJCQkgICBcCisJfSB3aGlsZSAoMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbnRlcm5hbCBpb2N0bHMgKi8KIAogLyogVklESU9DX0lOVF9HX1JFR0lTVEVSIGFuZCBWSURJT0NfSU5UX1NfUkVHSVNURVIgKi8KIHN0cnVjdCB2NGwyX3JlZ2lzdGVyIHsKQEAgLTcwLDYgKzExNSwyMCBAQAogCVY0TDJfSURFTlRfQ1gyNTg0MyA9IDI0MywKIH07CiAKKy8qIGF1ZGlvIGlvY3RscyAqLworLyogdjRsIGRldmljZSB3YXMgb3BlbmVkIGluIFJhZGlvIG1vZGUgKi8KKyNkZWZpbmUgQVVEQ19TRVRfUkFESU8gICAgICAgIF9JTygnZCcsODgpCisvKiBzZWxlY3QgZnJvbSBUVixyYWRpbyxleHRlcm4sTVVURSAqLworI2RlZmluZSBBVURDX1NFVF9JTlBVVCAgICAgICAgX0lPVygnZCcsODksaW50KQorCisvKiB0dW5lciBpb2N0bHMgKi8KKy8qIFNldHMgdHVuZXIgdHlwZSBhbmQgaXRzIEkyQyBhZGRyICovCisjZGVmaW5lIFRVTkVSX1NFVF9UWVBFX0FERFIgICAgICAgICAgX0lPVygnZCcsOTAsaW50KQorLyogUHV0cyB0dW5lciBvbiBwb3dlcnNhdmluZyBzdGF0ZSwgZGlzYWJsaW5nIGl0LCBleGNlcHQgZm9yIGkyYyAqLworI2RlZmluZSBUVU5FUl9TRVRfU1RBTkRCWSAgICAgICAgICAgIF9JT1coJ2QnLDkxLGludCkKKy8qIFNldHMgdGRhOTg4NyBzcGVjaWZpYyBzdHVmZiwgbGlrZSBwb3J0MSwgcG9ydDIgYW5kIHFzcyAqLworI2RlZmluZSBUREE5ODg3X1NFVF9DT05GSUcgICAgICAgICAgIF9JT1coJ2QnLDkyLGludCkKKwogLyogb25seSBpbXBsZW1lbnRlZCBpZiBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIGRlZmluZWQgKi8KICNkZWZpbmUJVklESU9DX0lOVF9TX1JFR0lTVEVSIAkJX0lPUiAoJ2QnLCAxMDAsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyKQogI2RlZmluZQlWSURJT0NfSU5UX0dfUkVHSVNURVIgCQlfSU9XUignZCcsIDEwMSwgc3RydWN0IHY0bDJfcmVnaXN0ZXIpCkBAIC03NywxMCArMTM2LDEyIEBACiAvKiBSZXNldCB0aGUgSTJDIGNoaXAgKi8KICNkZWZpbmUgVklESU9DX0lOVF9SRVNFVCAgICAgICAgICAgIAlfSU8gICgnZCcsIDEwMikKIAotLyogU2V0IHRoZSBmcmVxdWVuY3kgb2YgdGhlIGF1ZGlvIGNsb2NrIG91dHB1dC4KKy8qIFNldCB0aGUgZnJlcXVlbmN5IChpbiBIeikgb2YgdGhlIGF1ZGlvIGNsb2NrIG91dHB1dC4KICAgIFVzZWQgdG8gc2xhdmUgYW4gYXVkaW8gcHJvY2Vzc29yIHRvIHRoZSB2aWRlbyBkZWNvZGVyLCBlbnN1cmluZyB0aGF0IGF1ZGlvCi0gICBhbmQgdmlkZW8gcmVtYWluIHN5bmNocm9uaXplZC4gKi8KLSNkZWZpbmUgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRIAlfSU9SICgnZCcsIDEwMywgZW51bSB2NGwyX2F1ZGlvX2Nsb2NrX2ZyZXEpCisgICBhbmQgdmlkZW8gcmVtYWluIHN5bmNocm9uaXplZC4KKyAgIFVzdWFsIHZhbHVlcyBmb3IgdGhlIGZyZXF1ZW5jeSBhcmUgNDgwMDAsIDQ0MTAwIG9yIDMyMDAwIEh6LgorICAgSWYgdGhlIGZyZXF1ZW5jeSBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIC1FSU5WQUwgaXMgcmV0dXJuZWQuICovCisjZGVmaW5lIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSAJX0lPVyAoJ2QnLCAxMDMsIHUzMikKIAogLyogVmlkZW8gZGVjb2RlcnMgdGhhdCBzdXBwb3J0IHNsaWNlZCBWQkkgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpb2N0bC4KICAgIEZpZWxkIHAgb2YgdGhlIHY0bDJfc2xpY2VkX3ZiaV9saW5lIHN0cnVjdCBpcyBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBWQkkKQEAgLTEwNyw0ICsxNjgsMTAgQEAKICAgIGJlIG1hZGUuICovCiAjZGVmaW5lIFZJRElPQ19JTlRfR19DSElQX0lERU5UCQlfSU9SICgnZCcsIDEwNywgZW51bSB2NGwyX2NoaXBfaWRlbnQgKikKIAorLyogU2V0cyBJMlMgc3BlZWQgaW4gYnBzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdmlkZSBhIHN0YW5kYXJkIHdheSB0byBzZWxlY3QgSTJTCisgICBjbG9jayB1c2VkIGJ5IGRyaXZpbmcgZGlnaXRhbCBhdWRpbyBzdHJlYW1zIGF0IHNvbWUgYm9hcmQgZGVzaWducy4KKyAgIFVzdWFsIHZhbHVlcyBmb3IgdGhlIGZyZXF1ZW5jeSBhcmUgMTAyNDAwMCBhbmQgMjA0ODAwMC4KKyAgIElmIHRoZSBmcmVxdWVuY3kgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiAtRUlOVkFMIGlzIHJldHVybmVkLiAqLworI2RlZmluZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRIAlfSU9XICgnZCcsIDEwOCwgdTMyKQorCiAjZW5kaWYgLyogVjRMMl9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FjdF9hcGkuaCBiL2luY2x1ZGUvbmV0L2FjdF9hcGkuaAppbmRleCBiNTVlYjdjLi4xMWU5ZWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hY3RfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQvYWN0X2FwaS5oCkBAIC02Myw3ICs2Myw3IEBACiAJX191MzIgICB0eXBlOyAvKiBUQkQgdG8gbWF0Y2gga2luZCAqLwogCV9fdTMyIAljYXBhYjsgIC8qIGNhcGFiaWxpdGllcyBpbmNsdWRlcyA0IGJpdCB2ZXJzaW9uICovCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWludCAgICAgKCphY3QpKHN0cnVjdCBza19idWZmICoqLCBzdHJ1Y3QgdGNfYWN0aW9uICosIHN0cnVjdCB0Y2ZfcmVzdWx0ICopOworCWludCAgICAgKCphY3QpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCB0Y19hY3Rpb24gKiwgc3RydWN0IHRjZl9yZXN1bHQgKik7CiAJaW50ICAgICAoKmdldF9zdGF0cykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHRjX2FjdGlvbiAqKTsKIAlpbnQgICAgICgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHRjX2FjdGlvbiAqLGludCAsIGludCk7CiAJaW50ICAgICAoKmNsZWFudXApKHN0cnVjdCB0Y19hY3Rpb24gKiwgaW50IGJpbmQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCA2NDkyZTczLi5iOTRkMWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX19ORVRfUEtUX1NDSEVEX0gKICNkZWZpbmUgX19ORVRfUEtUX1NDSEVEX0gKIAorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxuZXQvc2NoX2dlbmVyaWMuaD4KIAogc3RydWN0IHFkaXNjX3dhbGtlcgpAQCAtNTksOCArNjAsOCBAQAogdHlwZWRlZiBsb25nCQlwc2NoZWRfdGRpZmZfdDsKIAogI2RlZmluZSBQU0NIRURfR0VUX1RJTUUoc3RhbXApIGRvX2dldHRpbWVvZmRheSgmKHN0YW1wKSkKLSNkZWZpbmUgUFNDSEVEX1VTMkpJRkZJRSh1c2VjcykgKCgodXNlY3MpKygxMDAwMDAwL0haLTEpKS8oMTAwMDAwMC9IWikpCi0jZGVmaW5lIFBTQ0hFRF9KSUZGSUUyVVMoZGVsYXkpICgoZGVsYXkpKigxMDAwMDAwL0haKSkKKyNkZWZpbmUgUFNDSEVEX1VTMkpJRkZJRSh1c2VjcykgdXNlY3NfdG9famlmZmllcyh1c2VjcykKKyNkZWZpbmUgUFNDSEVEX0pJRkZJRTJVUyhkZWxheSkgamlmZmllc190b191c2VjcyhkZWxheSkKIAogI2Vsc2UgLyogIUNPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgKi8KIApAQCAtMTIzLDkgKzEyNCw5IEBACiAJCSAgIGRlZmF1bHQ6IFwKIAkJCSAgIF9fZGVsdGEgPSAwOyBcCiAJCSAgIGNhc2UgMjogXAotCQkJICAgX19kZWx0YSArPSAxMDAwMDAwOyBcCisJCQkgICBfX2RlbHRhICs9IFVTRUNfUEVSX1NFQzsgXAogCQkgICBjYXNlIDE6IFwKLQkJCSAgIF9fZGVsdGEgKz0gMTAwMDAwMDsgXAorCQkJICAgX19kZWx0YSArPSBVU0VDX1BFUl9TRUM7IFwKIAkgICAgICAgICAgIH0gXAogCSAgIH0gXAogCSAgIF9fZGVsdGE7IFwKQEAgLTEzNiw5ICsxMzcsOSBAQAogewogCWludCBkZWx0YTsKIAotCWlmIChib3VuZCA8PSAxMDAwMDAwIHx8IGRlbHRhX3NlYyA+ICgweDdGRkZGRkZGLzEwMDAwMDApLTEpCisJaWYgKGJvdW5kIDw9IFVTRUNfUEVSX1NFQyB8fCBkZWx0YV9zZWMgPiAoMHg3RkZGRkZGRi9VU0VDX1BFUl9TRUMpLTEpCiAJCXJldHVybiBib3VuZDsKLQlkZWx0YSA9IGRlbHRhX3NlYyAqIDEwMDAwMDA7CisJZGVsdGEgPSBkZWx0YV9zZWMgKiBVU0VDX1BFUl9TRUM7CiAJaWYgKGRlbHRhID4gYm91bmQgfHwgZGVsdGEgPCAwKQogCQlkZWx0YSA9IGJvdW5kOwogCXJldHVybiBkZWx0YTsKQEAgLTE1Miw5ICsxNTMsOSBAQAogCSAgIGRlZmF1bHQ6IFwKIAkJICAgX19kZWx0YSA9IHBzY2hlZF90b2RfZGlmZihfX2RlbHRhX3NlYywgYm91bmQpOyAgYnJlYWs7IFwKIAkgICBjYXNlIDI6IFwKLQkJICAgX19kZWx0YSArPSAxMDAwMDAwOyBcCisJCSAgIF9fZGVsdGEgKz0gVVNFQ19QRVJfU0VDOyBcCiAJICAgY2FzZSAxOiBcCi0JCSAgIF9fZGVsdGEgKz0gMTAwMDAwMDsgXAorCQkgICBfX2RlbHRhICs9IFVTRUNfUEVSX1NFQzsgXAogCSAgIGNhc2UgMDogXAogIAkJICAgaWYgKF9fZGVsdGEgPiBib3VuZCB8fCBfX2RlbHRhIDwgMCkgXAogIAkJCV9fZGVsdGEgPSBib3VuZDsgXApAQCAtMTcwLDE1ICsxNzEsMTUgQEAKICh7IFwKIAkgICBpbnQgX19kZWx0YSA9ICh0dikudHZfdXNlYyArIChkZWx0YSk7IFwKIAkgICAodHZfcmVzKS50dl9zZWMgPSAodHYpLnR2X3NlYzsgXAotCSAgIGlmIChfX2RlbHRhID4gMTAwMDAwMCkgeyAodHZfcmVzKS50dl9zZWMrKzsgX19kZWx0YSAtPSAxMDAwMDAwOyB9IFwKKwkgICBpZiAoX19kZWx0YSA+IFVTRUNfUEVSX1NFQykgeyAodHZfcmVzKS50dl9zZWMrKzsgX19kZWx0YSAtPSBVU0VDX1BFUl9TRUM7IH0gXAogCSAgICh0dl9yZXMpLnR2X3VzZWMgPSBfX2RlbHRhOyBcCiB9KQogCiAjZGVmaW5lIFBTQ0hFRF9UQUREKHR2LCBkZWx0YSkgXAogKHsgXAogCSAgICh0dikudHZfdXNlYyArPSAoZGVsdGEpOyBcCi0JICAgaWYgKCh0dikudHZfdXNlYyA+IDEwMDAwMDApIHsgKHR2KS50dl9zZWMrKzsgXAotCQkgKHR2KS50dl91c2VjIC09IDEwMDAwMDA7IH0gXAorCSAgIGlmICgodHYpLnR2X3VzZWMgPiBVU0VDX1BFUl9TRUMpIHsgKHR2KS50dl9zZWMrKzsgXAorCQkgKHR2KS50dl91c2VjIC09IFVTRUNfUEVSX1NFQzsgfSBcCiB9KQogCiAvKiBTZXQvY2hlY2sgdGhhdCB0aW1lIGlzIGluIHRoZSAicGFzdCBwZXJmZWN0IjsKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBjODk0M2I1Li5hOGFhNjE1IDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC02NjAsNyArNjYwLDcgQEAKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dF9wdXRuYW1lOwogCi0JZG93bigmbXF1ZXVlX21udC0+bW50X3Jvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZtcXVldWVfbW50LT5tbnRfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgbXF1ZXVlX21udC0+bW50X3Jvb3QsIHN0cmxlbihuYW1lKSk7CiAJaWYgKElTX0VSUihkZW50cnkpKSB7CiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwpAQCAtNjk3LDcgKzY5Nyw3IEBACiBvdXRfZXJyOgogCWZkID0gZXJyb3I7CiBvdXRfdXBzZW06Ci0JdXAoJm1xdWV1ZV9tbnQtPm1udF9yb290LT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtcXVldWVfbW50LT5tbnRfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiBvdXRfcHV0bmFtZToKIAlwdXRuYW1lKG5hbWUpOwogCXJldHVybiBmZDsKQEAgLTcxNCw3ICs3MTQsNyBAQAogCWlmIChJU19FUlIobmFtZSkpCiAJCXJldHVybiBQVFJfRVJSKG5hbWUpOwogCi0JZG93bigmbXF1ZXVlX21udC0+bW50X3Jvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZtcXVldWVfbW50LT5tbnRfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgbXF1ZXVlX21udC0+bW50X3Jvb3QsIHN0cmxlbihuYW1lKSk7CiAJaWYgKElTX0VSUihkZW50cnkpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGVudHJ5KTsKQEAgLTczNSw3ICs3MzUsNyBAQAogCWRwdXQoZGVudHJ5KTsKIAogb3V0X3VubG9jazoKLQl1cCgmbXF1ZXVlX21udC0+bW50X3Jvb3QtPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm1xdWV1ZV9tbnQtPm1udF9yb290LT5kX2lub2RlLT5pX211dGV4KTsKIAlwdXRuYW1lKG5hbWUpOwogCWlmIChpbm9kZSkKIAkJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGY1YTE0NS4uYTk0MGJhYyAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtNyw4ICs3LDkgQEAKIAkgICAgc3lzY3RsLm8gY2FwYWJpbGl0eS5vIHB0cmFjZS5vIHRpbWVyLm8gdXNlci5vIFwKIAkgICAgc2lnbmFsLm8gc3lzLm8ga21vZC5vIHdvcmtxdWV1ZS5vIHBpZC5vIFwKIAkgICAgcmN1cGRhdGUubyBpbnRlcm1vZHVsZS5vIGV4dGFibGUubyBwYXJhbXMubyBwb3NpeC10aW1lcnMubyBcCi0JICAgIGt0aHJlYWQubyB3YWl0Lm8ga2ZpZm8ubyBzeXNfbmkubyBwb3NpeC1jcHUtdGltZXJzLm8KKwkgICAga3RocmVhZC5vIHdhaXQubyBrZmlmby5vIHN5c19uaS5vIHBvc2l4LWNwdS10aW1lcnMubyBtdXRleC5vCiAKK29iai0kKENPTkZJR19ERUJVR19NVVRFWEVTKSArPSBtdXRleC1kZWJ1Zy5vCiBvYmotJChDT05GSUdfRlVURVgpICs9IGZ1dGV4Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0lTQV9ETUEpICs9IGRtYS5vCiBvYmotJChDT05GSUdfU01QKSArPSBjcHUubyBzcGlubG9jay5vCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZWFiNjRlMi4uMmE3NWU0NCAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTUxMyw3ICsxNTEzLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yOwogCi0JZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAlkZW50cnkgPSBjcHVzZXRfZ2V0X2RlbnRyeShkaXIsIGNmdC0+bmFtZSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQllcnJvciA9IGNwdXNldF9jcmVhdGVfZmlsZShkZW50cnksIDA2NDQgfCBTX0lGUkVHKTsKQEAgLTE1MjIsNyArMTUyMiw3IEBACiAJCWRwdXQoZGVudHJ5KTsKIAl9IGVsc2UKIAkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7Ci0JdXAoJmRpci0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTE3OTMsNyArMTc5Myw3IEBACiAKIAkvKgogCSAqIFJlbGVhc2UgbWFuYWdlX3NlbSBiZWZvcmUgY3B1c2V0X3BvcHVsYXRlX2RpcigpIGJlY2F1c2UgaXQKLQkgKiB3aWxsIGRvd24oKSB0aGlzIG5ldyBkaXJlY3RvcnkncyBpX3NlbSBhbmQgaWYgd2UgcmFjZSB3aXRoCisJICogd2lsbCBkb3duKCkgdGhpcyBuZXcgZGlyZWN0b3J5J3MgaV9tdXRleCBhbmQgaWYgd2UgcmFjZSB3aXRoCiAJICogYW5vdGhlciBta2Rpciwgd2UgbWlnaHQgZGVhZGxvY2suCiAJICovCiAJdXAoJm1hbmFnZV9zZW0pOwpAQCAtMTgxMiw3ICsxODEyLDcgQEAKIHsKIAlzdHJ1Y3QgY3B1c2V0ICpjX3BhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfZnNkYXRhOwogCi0JLyogdGhlIHZmcyBob2xkcyBpbm9kZS0+aV9zZW0gYWxyZWFkeSAqLworCS8qIHRoZSB2ZnMgaG9sZHMgaW5vZGUtPmlfbXV0ZXggYWxyZWFkeSAqLwogCXJldHVybiBjcHVzZXRfY3JlYXRlKGNfcGFyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlIHwgU19JRkRJUik7CiB9CiAKQEAgLTE4MjMsNyArMTgyMyw3IEBACiAJc3RydWN0IGNwdXNldCAqcGFyZW50OwogCWNoYXIgKnBhdGhidWYgPSBOVUxMOwogCi0JLyogdGhlIHZmcyBob2xkcyBib3RoIGlub2RlLT5pX3NlbSBhbHJlYWR5ICovCisJLyogdGhlIHZmcyBob2xkcyBib3RoIGlub2RlLT5pX211dGV4IGFscmVhZHkgKi8KIAogCWRvd24oJm1hbmFnZV9zZW0pOwogCWNwdXNldF91cGRhdGVfdGFza19tZW1vcnlfc3RhdGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGNhY2VhYmYuLjMwOWE0NmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTg2OSw2ICs4NzAsMTAgQEAKIAltcG9sX2ZyZWUodHNrLT5tZW1wb2xpY3kpOwogCXRzay0+bWVtcG9saWN5ID0gTlVMTDsKICNlbmRpZgorCS8qCisJICogSWYgREVCVUdfTVVURVhFUyBpcyBvbiwgbWFrZSBzdXJlIHdlIGFyZSBob2xkaW5nIG5vIGxvY2tzOgorCSAqLworCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQodHNrKTsKIAogCS8qIFBGX0RFQUQgY2F1c2VzIGZpbmFsIHB1dF90YXNrX3N0cnVjdCBhZnRlciB3ZSBzY2hlZHVsZS4gKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDcyZTMyNTIuLmIxOGQ2NDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtOTc5LDYgKzk3OSwxMCBAQAogIAl9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCisJcC0+YmxvY2tlZF9vbiA9IE5VTEw7IC8qIG5vdCBibG9ja2VkIHlldCAqLworI2VuZGlmCisKIAlwLT50Z2lkID0gcC0+cGlkOwogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkKIAkJcC0+dGdpZCA9IGN1cnJlbnQtPnRnaWQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2IwNTEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIGtlcm5lbC9tdXRleC1kZWJ1Zy5jCisgKgorICogRGVidWdnaW5nIGNvZGUgZm9yIG11dGV4ZXMKKyAqCisgKiBTdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogbG9jayBkZWJ1Z2dpbmcsIGxvY2tpbmcgdHJlZSwgZGVhZGxvY2sgZGV0ZWN0aW9uIHN0YXJ0ZWQgYnk6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgTHludXhXb3JrcywgSW5jLiwgSWdvciBNYW55aWxvdiwgQmlsbCBIdWV5CisgKiAgUmVsZWFzZWQgdW5kZXIgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vbXV0ZXguaD4KKworI2luY2x1ZGUgIm11dGV4LWRlYnVnLmgiCisKKy8qCisgKiBXZSBuZWVkIGEgZ2xvYmFsIGxvY2sgd2hlbiB3ZSB3YWxrIHRocm91Z2ggdGhlIG11bHRpLXByb2Nlc3MKKyAqIGxvY2sgdHJlZS4gT25seSB1c2VkIGluIHRoZSBkZWFkbG9jay1kZWJ1Z2dpbmcgY2FzZS4KKyAqLworREVGSU5FX1NQSU5MT0NLKGRlYnVnX211dGV4X2xvY2spOworCisvKgorICogQWxsIGxvY2tzIGhlbGQgYnkgYWxsIHRhc2tzLCBpbiBhIHNpbmdsZSBnbG9iYWwgbGlzdDoKKyAqLworTElTVF9IRUFEKGRlYnVnX211dGV4X2hlbGRfbG9ja3MpOworCisvKgorICogSW4gdGhlIGRlYnVnIGNhc2Ugd2UgY2FycnkgdGhlIGNhbGxlcidzIGluc3RydWN0aW9uIHBvaW50ZXIgaW50bworICogb3RoZXIgZnVuY3Rpb25zLCBidXQgd2UgZG9udCB3YW50IHRoZSBmdW5jdGlvbiBhcmd1bWVudCBvdmVyaGVhZAorICogaW4gdGhlIG5vbmRlYnVnIGNhc2UgLSBoZW5jZSB0aGVzZSBtYWNyb3M6CisgKi8KKyNkZWZpbmUgX19JUF9ERUNMX18JCSwgdW5zaWduZWQgbG9uZyBpcAorI2RlZmluZSBfX0lQX18JCQksIGlwCisjZGVmaW5lIF9fUkVUX0lQX18JCSwgKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCisKKy8qCisgKiAibXV0ZXggZGVidWdnaW5nIGVuYWJsZWQiIGZsYWcuIFdlIHR1cm4gaXQgb2ZmIHdoZW4gd2UgZGV0ZWN0CisgKiB0aGUgZmlyc3QgcHJvYmxlbSBiZWNhdXNlIHdlIGRvbnQgd2FudCB0byByZWN1cnNlIGJhY2sKKyAqIGludG8gdGhlIHRyYWNpbmcgY29kZSB3aGVuIGRvaW5nIGVycm9yIHByaW50ayBvcgorICogZXhlY3V0aW5nIGEgQlVHKCk6CisgKi8KK2ludCBkZWJ1Z19tdXRleF9vbiA9IDE7CisKK3N0YXRpYyB2b2lkIHByaW50a190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAocCkKKwkJcHJpbnRrKCIlMTZzOiU1ZCBbJXAsICUzZF0iLCBwLT5jb21tLCBwLT5waWQsIHAsIHAtPnByaW8pOworCWVsc2UKKwkJcHJpbnRrKCI8bm9uZT4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRrX3RpKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCit7CisJaWYgKHRpKQorCQlwcmludGtfdGFzayh0aS0+dGFzayk7CisJZWxzZQorCQlwcmludGsoIjxub25lPiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludGtfdGFza19zaG9ydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJaWYgKHApCisJCXByaW50aygiJXMvJWQgWyVwLCAlM2RdIiwgcC0+Y29tbSwgcC0+cGlkLCBwLCBwLT5wcmlvKTsKKwllbHNlCisJCXByaW50aygiPG5vbmU+Iik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50a19sb2NrKHN0cnVjdCBtdXRleCAqbG9jaywgaW50IHByaW50X293bmVyKQoreworCXByaW50aygiIFslcF0geyVzfVxuIiwgbG9jaywgbG9jay0+bmFtZSk7CisKKwlpZiAocHJpbnRfb3duZXIgJiYgbG9jay0+b3duZXIpIHsKKwkJcHJpbnRrKCIuLiBoZWxkIGJ5OiAgIik7CisJCXByaW50a190aShsb2NrLT5vd25lcik7CisJCXByaW50aygiXG4iKTsKKwl9CisJaWYgKGxvY2stPm93bmVyKSB7CisJCXByaW50aygiLi4uIGFjcXVpcmVkIGF0OiAgICAgICAgICAgICAgICIpOworCQlwcmludF9zeW1ib2woIiVzXG4iLCBsb2NrLT5hY3F1aXJlX2lwKTsKKwl9Cit9CisKKy8qCisgKiBwcmludGsgbG9ja3MgaGVsZCBieSBhIHRhc2s6CisgKi8KK3N0YXRpYyB2b2lkIHNob3dfdGFza19sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3dpdGNoIChwLT5zdGF0ZSkgeworCWNhc2UgVEFTS19SVU5OSU5HOgkJcHJpbnRrKCJSIik7IGJyZWFrOworCWNhc2UgVEFTS19JTlRFUlJVUFRJQkxFOglwcmludGsoIlMiKTsgYnJlYWs7CisJY2FzZSBUQVNLX1VOSU5URVJSVVBUSUJMRToJcHJpbnRrKCJEIik7IGJyZWFrOworCWNhc2UgVEFTS19TVE9QUEVEOgkJcHJpbnRrKCJUIik7IGJyZWFrOworCWNhc2UgRVhJVF9aT01CSUU6CQlwcmludGsoIloiKTsgYnJlYWs7CisJY2FzZSBFWElUX0RFQUQ6CQkJcHJpbnRrKCJYIik7IGJyZWFrOworCWRlZmF1bHQ6CQkJcHJpbnRrKCI/Iik7IGJyZWFrOworCX0KKwlwcmludGtfdGFzayhwKTsKKwlpZiAocC0+YmxvY2tlZF9vbikgeworCQlzdHJ1Y3QgbXV0ZXggKmxvY2sgPSBwLT5ibG9ja2VkX29uLT5sb2NrOworCisJCXByaW50aygiIGJsb2NrZWQgb24gbXV0ZXg6Iik7CisJCXByaW50a19sb2NrKGxvY2ssIDEpOworCX0gZWxzZQorCQlwcmludGsoIiAobm90IGJsb2NrZWQgb24gbXV0ZXgpXG4iKTsKK30KKworLyoKKyAqIHByaW50ayBhbGwgbG9ja3MgaGVsZCBpbiB0aGUgc3lzdGVtIChpZiBmaWx0ZXIgPT0gTlVMTCksCisgKiBvciBhbGwgbG9ja3MgYmVsb25naW5nIHRvIGEgc2luZ2xlIHRhc2sgKGlmIGZpbHRlciAhPSBOVUxMKToKKyAqLwordm9pZCBzaG93X2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpmaWx0ZXIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyciwgKmN1cnNvciA9IE5VTEw7CisJc3RydWN0IG11dGV4ICpsb2NrOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjb3VudCA9IDA7CisKKwlpZiAoZmlsdGVyKSB7CisJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcHJpbnRrKCJ8IHNob3dpbmcgYWxsIGxvY2tzIGhlbGQgYnk6IHwgICgiKTsKKwkJcHJpbnRrX3Rhc2tfc2hvcnQoZmlsdGVyKTsKKwkJcHJpbnRrKCIpOlxuIik7CisJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCXByaW50aygifCBzaG93aW5nIGFsbCBsb2NrcyBoZWxkOiB8XG4iKTsKKwkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCX0KKworCS8qCisJICogUGxheSBzYWZlIGFuZCBhY3F1aXJlIHRoZSBnbG9iYWwgdHJhY2UgbG9jay4gV2UKKwkgKiBjYW5ub3QgcHJpbnRrIHdpdGggdGhhdCBsb2NrIGhlbGQgc28gd2UgaXRlcmF0ZQorCSAqIHZlcnkgY2FyZWZ1bGx5OgorCSAqLworbmV4dDoKKwlkZWJ1Z19zcGluX2xvY2tfc2F2ZSgmZGVidWdfbXV0ZXhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2goY3VyciwgJmRlYnVnX211dGV4X2hlbGRfbG9ja3MpIHsKKwkJaWYgKGN1cnNvciAmJiBjdXJyICE9IGN1cnNvcikKKwkJCWNvbnRpbnVlOworCQlsb2NrID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgbXV0ZXgsIGhlbGRfbGlzdCk7CisJCXQgPSBsb2NrLT5vd25lcjsKKwkJaWYgKGZpbHRlciAmJiAodCAhPSBmaWx0ZXItPnRocmVhZF9pbmZvKSkKKwkJCWNvbnRpbnVlOworCQljb3VudCsrOworCQljdXJzb3IgPSBjdXJyLT5uZXh0OworCQlkZWJ1Z19zcGluX2xvY2tfcmVzdG9yZSgmZGVidWdfbXV0ZXhfbG9jaywgZmxhZ3MpOworCisJCXByaW50aygiXG4jJTAzZDogICAgICAgICAgICAiLCBjb3VudCk7CisJCXByaW50a19sb2NrKGxvY2ssIGZpbHRlciA/IDAgOiAxKTsKKwkJZ290byBuZXh0OworCX0KKwlkZWJ1Z19zcGluX2xvY2tfcmVzdG9yZSgmZGVidWdfbXV0ZXhfbG9jaywgZmxhZ3MpOworCXByaW50aygiXG4iKTsKK30KKwordm9pZCBtdXRleF9kZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisJaW50IGNvdW50ID0gMTA7CisJaW50IHVubG9jayA9IDE7CisKKwlwcmludGsoIlxuU2hvd2luZyBhbGwgYmxvY2tpbmcgbG9ja3MgaW4gdGhlIHN5c3RlbTpcbiIpOworCisJLyoKKwkgKiBIZXJlIHdlIHRyeSB0byBnZXQgdGhlIHRhc2tsaXN0X2xvY2sgYXMgaGFyZCBhcyBwb3NzaWJsZSwKKwkgKiBpZiBub3Qgc3VjY2Vzc2Z1bCBhZnRlciAyIHNlY29uZHMgd2UgaWdub3JlIGl0IChidXQga2VlcAorCSAqIHRyeWluZykuIFRoaXMgaXMgdG8gZW5hYmxlIGEgZGVidWcgcHJpbnRvdXQgZXZlbiBpZiBhCisJICogdGFza2xpc3RfbG9jay1ob2xkaW5nIHRhc2sgZGVhZGxvY2tzIG9yIGNyYXNoZXMuCisJICovCityZXRyeToKKwlpZiAoIXJlYWRfdHJ5bG9jaygmdGFza2xpc3RfbG9jaykpIHsKKwkJaWYgKGNvdW50ID09IDEwKQorCQkJcHJpbnRrKCJobSwgdGFza2xpc3RfbG9jayBsb2NrZWQsIHJldHJ5aW5nLi4uICIpOworCQlpZiAoY291bnQpIHsKKwkJCWNvdW50LS07CisJCQlwcmludGsoIiAjJWQiLCAxMC1jb3VudCk7CisJCQltZGVsYXkoMjAwKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJcHJpbnRrKCIgaWdub3JpbmcgaXQuXG4iKTsKKwkJdW5sb2NrID0gMDsKKwl9CisJaWYgKGNvdW50ICE9IDEwKQorCQlwcmludGsoIiBsb2NrZWQgaXQuXG4iKTsKKworCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKKwkJc2hvd190YXNrX2xvY2tzKHApOworCQlpZiAoIXVubG9jaykKKwkJCWlmIChyZWFkX3RyeWxvY2soJnRhc2tsaXN0X2xvY2spKQorCQkJCXVubG9jayA9IDE7CisJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKworCXByaW50aygiXG4iKTsKKwlzaG93X2hlbGRfbG9ja3MoTlVMTCk7CisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlpZiAodW5sb2NrKQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9kZWFkbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBtdXRleCAqbG9jaywKKwkJCSAgICBzdHJ1Y3QgbXV0ZXggKmxvY2tibGssIHVuc2lnbmVkIGxvbmcgaXApCit7CisJcHJpbnRrKCJcbiVzLyVkIGlzIHRyeWluZyB0byBhY3F1aXJlIHRoaXMgbG9jazpcbiIsCisJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJcHJpbnRrX2xvY2sobG9jaywgMSk7CisJcHJpbnRrKCIuLi4gdHJ5aW5nIGF0OiAgICAgICAgICAgICAgICAgIik7CisJcHJpbnRfc3ltYm9sKCIlc1xuIiwgaXApOworCXNob3dfaGVsZF9sb2NrcyhjdXJyZW50KTsKKworCWlmIChsb2NrYmxrKSB7CisJCXByaW50aygiYnV0ICVzLyVkIGlzIGRlYWRsb2NraW5nIGN1cnJlbnQgdGFzayAlcy8lZCFcblxuIiwKKwkJCXRhc2stPmNvbW0sIHRhc2stPnBpZCwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwkJcHJpbnRrKCJcbiVzLyVkIGlzIGJsb2NrZWQgb24gdGhpcyBsb2NrOlxuIiwKKwkJCXRhc2stPmNvbW0sIHRhc2stPnBpZCk7CisJCXByaW50a19sb2NrKGxvY2tibGssIDEpOworCisJCXNob3dfaGVsZF9sb2Nrcyh0YXNrKTsKKworCQlwcmludGsoIlxuJXMvJWQncyBbYmxvY2tlZF0gc3RhY2tkdW1wOlxuXG4iLAorCQkJdGFzay0+Y29tbSwgdGFzay0+cGlkKTsKKwkJc2hvd19zdGFjayh0YXNrLCBOVUxMKTsKKwl9CisKKwlwcmludGsoIlxuJXMvJWQncyBbY3VycmVudF0gc3RhY2tkdW1wOlxuXG4iLAorCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOworCWR1bXBfc3RhY2soKTsKKwltdXRleF9kZWJ1Z19zaG93X2FsbF9sb2NrcygpOworCXByaW50aygiWyB0dXJuaW5nIG9mZiBkZWFkbG9jayBkZXRlY3Rpb24uIFBsZWFzZSByZXBvcnQgdGhpcy4gXVxuXG4iKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworfQorCisvKgorICogUmVjdXJzaXZlbHkgY2hlY2sgZm9yIG11dGV4IGRlYWRsb2NrczoKKyAqLworc3RhdGljIGludCBjaGVja19kZWFkbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2ssIGludCBkZXB0aCwKKwkJCSAgc3RydWN0IHRocmVhZF9pbmZvICp0aSwgdW5zaWduZWQgbG9uZyBpcCkKK3sKKwlzdHJ1Y3QgbXV0ZXggKmxvY2tibGs7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJaWYgKCFkZWJ1Z19tdXRleF9vbikKKwkJcmV0dXJuIDA7CisKKwl0aSA9IGxvY2stPm93bmVyOworCWlmICghdGkpCisJCXJldHVybiAwOworCisJdGFzayA9IHRpLT50YXNrOworCWxvY2tibGsgPSBOVUxMOworCWlmICh0YXNrLT5ibG9ja2VkX29uKQorCQlsb2NrYmxrID0gdGFzay0+YmxvY2tlZF9vbi0+bG9jazsKKworCS8qIFNlbGYtZGVhZGxvY2s6ICovCisJaWYgKGN1cnJlbnQgPT0gdGFzaykgeworCQlERUJVR19PRkYoKTsKKwkJaWYgKGRlcHRoKQorCQkJcmV0dXJuIDE7CisJCXByaW50aygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCQlwcmludGsoICAiWyBCVUc6IGxvY2sgcmVjdXJzaW9uIGRlYWRsb2NrIGRldGVjdGVkISB8XG4iKTsKKwkJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCXJlcG9ydF9kZWFkbG9jayh0YXNrLCBsb2NrLCBOVUxMLCBpcCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFVnaCwgc29tZXRoaW5nIGNvcnJ1cHRlZCB0aGUgbG9jayBkYXRhIHN0cnVjdHVyZT8gKi8KKwlpZiAoZGVwdGggPiAyMCkgeworCQlERUJVR19PRkYoKTsKKwkJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCQlwcmludGsoICAiWyBCVUc6IGluZmluaXRlIGxvY2sgZGVwZW5kZW5jeSBkZXRlY3RlZCE/IHxcbiIpOworCQlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCXJlcG9ydF9kZWFkbG9jayh0YXNrLCBsb2NrLCBsb2NrYmxrLCBpcCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFJlY3Vyc2l2ZWx5IGNoZWNrIGZvciBkZXBlbmRlbmNpZXM6ICovCisJaWYgKGxvY2tibGsgJiYgY2hlY2tfZGVhZGxvY2sobG9ja2JsaywgZGVwdGgrMSwgdGksIGlwKSkgeworCQlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCQlwcmludGsoICAiWyBCVUc6IGNpcmN1bGFyIGxvY2tpbmcgZGVhZGxvY2sgZGV0ZWN0ZWQhIF1cbiIpOworCQlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlyZXBvcnRfZGVhZGxvY2sodGFzaywgbG9jaywgbG9ja2JsaywgaXApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhIHRhc2sgZXhpdHMsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlCisgKiB0YXNrIGlzIGhvbGRpbmcgYW55IGxvY2tzLCBhbmQgcmVwb3J0cyB0aGUgZmlyc3Qgb25lIGlmIHNvOgorICovCit2b2lkIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cnIsICpuZXh0OworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtdXRleCAqbG9jazsKKworCWlmICghZGVidWdfbXV0ZXhfb24pCisJCXJldHVybjsKKworCWRlYnVnX3NwaW5fbG9ja19zYXZlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnIsIG5leHQsICZkZWJ1Z19tdXRleF9oZWxkX2xvY2tzKSB7CisJCWxvY2sgPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBtdXRleCwgaGVsZF9saXN0KTsKKwkJdCA9IGxvY2stPm93bmVyOworCQlpZiAodCAhPSB0YXNrLT50aHJlYWRfaW5mbykKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbF9pbml0KGN1cnIpOworCQlERUJVR19PRkYoKTsKKwkJZGVidWdfc3Bpbl9sb2NrX3Jlc3RvcmUoJmRlYnVnX211dGV4X2xvY2ssIGZsYWdzKTsKKworCQlwcmludGsoIkJVRzogJXMvJWQsIGxvY2sgaGVsZCBhdCB0YXNrIGV4aXQgdGltZSFcbiIsCisJCQl0YXNrLT5jb21tLCB0YXNrLT5waWQpOworCQlwcmludGtfbG9jayhsb2NrLCAxKTsKKwkJaWYgKGxvY2stPm93bmVyICE9IHRhc2stPnRocmVhZF9pbmZvKQorCQkJcHJpbnRrKCJleGl0aW5nIHRhc2sgaXMgbm90IGV2ZW4gdGhlIG93bmVyPz9cbiIpOworCQlyZXR1cm47CisJfQorCWRlYnVnX3NwaW5fbG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBrZXJuZWwgbWVtb3J5IGlzIGZyZWVkIChvciB1bm1hcHBlZCksIG9yIGlmIGEgbXV0ZXgKKyAqIGlzIGRlc3Ryb3llZCBvciByZWluaXRpYWxpemVkIC0gdGhpcyBjb2RlIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzCisgKiBhbnkgaGVsZCBsb2NrIGluIHRoZSBtZW1vcnkgcmFuZ2Ugb2YgPGZyb20+IHRvIDx0bz46CisgKi8KK3ZvaWQgbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoY29uc3Qgdm9pZCAqZnJvbSwgY29uc3Qgdm9pZCAqdG8pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyciwgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbXV0ZXggKmxvY2s7CisJdm9pZCAqbG9ja19hZGRyOworCisJaWYgKCFkZWJ1Z19tdXRleF9vbikKKwkJcmV0dXJuOworCisJZGVidWdfc3Bpbl9sb2NrX3NhdmUoJmRlYnVnX211dGV4X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoY3VyciwgbmV4dCwgJmRlYnVnX211dGV4X2hlbGRfbG9ja3MpIHsKKwkJbG9jayA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IG11dGV4LCBoZWxkX2xpc3QpOworCQlsb2NrX2FkZHIgPSBsb2NrOworCQlpZiAobG9ja19hZGRyIDwgZnJvbSB8fCBsb2NrX2FkZHIgPj0gdG8pCisJCQljb250aW51ZTsKKwkJbGlzdF9kZWxfaW5pdChjdXJyKTsKKwkJREVCVUdfT0ZGKCk7CisJCWRlYnVnX3NwaW5fbG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7CisKKwkJcHJpbnRrKCJCVUc6ICVzLyVkLCBhY3RpdmUgbG9jayBbJXAoJXAtJXApXSBmcmVlZCFcbiIsCisJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGxvY2ssIGZyb20sIHRvKTsKKwkJZHVtcF9zdGFjaygpOworCQlwcmludGtfbG9jayhsb2NrLCAxKTsKKwkJaWYgKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSkKKwkJCXByaW50aygiZnJlZWluZyB0YXNrIGlzIG5vdCBldmVuIHRoZSBvd25lcj8/XG4iKTsKKwkJcmV0dXJuOworCX0KKwlkZWJ1Z19zcGluX2xvY2tfcmVzdG9yZSgmZGVidWdfbXV0ZXhfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrLT53YWl0X2xvY2sgaGVsZC4KKyAqLwordm9pZCBkZWJ1Z19tdXRleF9zZXRfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLAorCQkJICAgc3RydWN0IHRocmVhZF9pbmZvICpuZXdfb3duZXIgX19JUF9ERUNMX18pCit7CisJbG9jay0+b3duZXIgPSBuZXdfb3duZXI7CisJREVCVUdfV0FSTl9PTighbGlzdF9lbXB0eSgmbG9jay0+aGVsZF9saXN0KSk7CisJaWYgKGRlYnVnX211dGV4X29uKSB7CisJCWxpc3RfYWRkX3RhaWwoJmxvY2stPmhlbGRfbGlzdCwgJmRlYnVnX211dGV4X2hlbGRfbG9ja3MpOworCQlsb2NrLT5hY3F1aXJlX2lwID0gaXA7CisJfQorfQorCit2b2lkIGRlYnVnX211dGV4X2luaXRfd2FpdGVyKHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcikKK3sKKwltZW1zZXQod2FpdGVyLCAweDExLCBzaXplb2YoKndhaXRlcikpOworCXdhaXRlci0+bWFnaWMgPSB3YWl0ZXI7CisJSU5JVF9MSVNUX0hFQUQoJndhaXRlci0+bGlzdCk7Cit9CisKK3ZvaWQgZGVidWdfbXV0ZXhfd2FrZV93YWl0ZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIpCit7CisJU01QX0RFQlVHX1dBUk5fT04oIXNwaW5faXNfbG9ja2VkKCZsb2NrLT53YWl0X2xvY2spKTsKKwlERUJVR19XQVJOX09OKGxpc3RfZW1wdHkoJmxvY2stPndhaXRfbGlzdCkpOworCURFQlVHX1dBUk5fT04od2FpdGVyLT5tYWdpYyAhPSB3YWl0ZXIpOworCURFQlVHX1dBUk5fT04obGlzdF9lbXB0eSgmd2FpdGVyLT5saXN0KSk7Cit9CisKK3ZvaWQgZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIoc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKQoreworCURFQlVHX1dBUk5fT04oIWxpc3RfZW1wdHkoJndhaXRlci0+bGlzdCkpOworCW1lbXNldCh3YWl0ZXIsIDB4MjIsIHNpemVvZigqd2FpdGVyKSk7Cit9CisKK3ZvaWQgZGVidWdfbXV0ZXhfYWRkX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlciwKKwkJCSAgICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpIF9fSVBfREVDTF9fKQoreworCVNNUF9ERUJVR19XQVJOX09OKCFzcGluX2lzX2xvY2tlZCgmbG9jay0+d2FpdF9sb2NrKSk7CisJY2hlY2tfZGVhZGxvY2sobG9jaywgMCwgdGksIGlwKTsKKwkvKiBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyBibG9ja2VkIG9uIHRoZSBsb2NrOiAqLworCXRpLT50YXNrLT5ibG9ja2VkX29uID0gd2FpdGVyOworCXdhaXRlci0+bG9jayA9IGxvY2s7Cit9CisKK3ZvaWQgbXV0ZXhfcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlciwKKwkJCSBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQoreworCURFQlVHX1dBUk5fT04obGlzdF9lbXB0eSgmd2FpdGVyLT5saXN0KSk7CisJREVCVUdfV0FSTl9PTih3YWl0ZXItPnRhc2sgIT0gdGktPnRhc2spOworCURFQlVHX1dBUk5fT04odGktPnRhc2stPmJsb2NrZWRfb24gIT0gd2FpdGVyKTsKKwl0aS0+dGFzay0+YmxvY2tlZF9vbiA9IE5VTEw7CisKKwlsaXN0X2RlbF9pbml0KCZ3YWl0ZXItPmxpc3QpOworCXdhaXRlci0+dGFzayA9IE5VTEw7Cit9CisKK3ZvaWQgZGVidWdfbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlERUJVR19XQVJOX09OKGxvY2stPm1hZ2ljICE9IGxvY2spOworCURFQlVHX1dBUk5fT04oIWxvY2stPndhaXRfbGlzdC5wcmV2ICYmICFsb2NrLT53YWl0X2xpc3QubmV4dCk7CisJREVCVUdfV0FSTl9PTihsb2NrLT5vd25lciAhPSBjdXJyZW50X3RocmVhZF9pbmZvKCkpOworCWlmIChkZWJ1Z19tdXRleF9vbikgeworCQlERUJVR19XQVJOX09OKGxpc3RfZW1wdHkoJmxvY2stPmhlbGRfbGlzdCkpOworCQlsaXN0X2RlbF9pbml0KCZsb2NrLT5oZWxkX2xpc3QpOworCX0KK30KKwordm9pZCBkZWJ1Z19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlaW5pdGlhbGl6aW5nIGEgaGVsZCBsb2NrOgorCSAqLworCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopbG9jaywgKHZvaWQgKikobG9jayArIDEpKTsKKwlsb2NrLT5vd25lciA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJmxvY2stPmhlbGRfbGlzdCk7CisJbG9jay0+bmFtZSA9IG5hbWU7CisJbG9jay0+bWFnaWMgPSBsb2NrOworfQorCisvKioqCisgKiBtdXRleF9kZXN0cm95IC0gbWFyayBhIG11dGV4IHVudXNhYmxlCisgKiBAbG9jazogdGhlIG11dGV4IHRvIGJlIGRlc3Ryb3llZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIG11dGV4IHVuaW5pdGlhbGl6ZWQsIGFuZCBhbnkgc3Vic2VxdWVudAorICogdXNlIG9mIHRoZSBtdXRleCBpcyBmb3JiaWRkZW4uIFRoZSBtdXRleCBtdXN0IG5vdCBiZSBsb2NrZWQgd2hlbgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgZmFzdGNhbGwgbXV0ZXhfZGVzdHJveShzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJREVCVUdfV0FSTl9PTihtdXRleF9pc19sb2NrZWQobG9jaykpOworCWxvY2stPm1hZ2ljID0gTlVMTDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobXV0ZXhfZGVzdHJveSk7CisKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5oIGIva2VybmVsL211dGV4LWRlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzODQwNQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogTXV0ZXhlczogYmxvY2tpbmcgbXV0dWFsIGV4Y2x1c2lvbiBsb2NrcworICoKKyAqIHN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbXV0ZXggZGVidWdnaW5nIHJlbGF0ZWQgaW50ZXJuYWwgZGVjbGFyYXRpb25zLAorICogcHJvdG90eXBlcyBhbmQgaW5saW5lIGZ1bmN0aW9ucywgZm9yIHRoZSBDT05GSUdfREVCVUdfTVVURVhFUyBjYXNlLgorICogTW9yZSBkZXRhaWxzIGFyZSBpbiBrZXJuZWwvbXV0ZXgtZGVidWcuYy4KKyAqLworCitleHRlcm4gc3BpbmxvY2tfdCBkZWJ1Z19tdXRleF9sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZGVidWdfbXV0ZXhfaGVsZF9sb2NrczsKK2V4dGVybiBpbnQgZGVidWdfbXV0ZXhfb247CisKKy8qCisgKiBJbiB0aGUgZGVidWcgY2FzZSB3ZSBjYXJyeSB0aGUgY2FsbGVyJ3MgaW5zdHJ1Y3Rpb24gcG9pbnRlciBpbnRvCisgKiBvdGhlciBmdW5jdGlvbnMsIGJ1dCB3ZSBkb250IHdhbnQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IG92ZXJoZWFkCisgKiBpbiB0aGUgbm9uZGVidWcgY2FzZSAtIGhlbmNlIHRoZXNlIG1hY3JvczoKKyAqLworI2RlZmluZSBfX0lQX0RFQ0xfXwkJLCB1bnNpZ25lZCBsb25nIGlwCisjZGVmaW5lIF9fSVBfXwkJCSwgaXAKKyNkZWZpbmUgX19SRVRfSVBfXwkJLCAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkKKworLyoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrLT53YWl0X2xvY2sgaGVsZC4KKyAqLworZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywKKwkJCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X293bmVyIF9fSVBfREVDTF9fKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX211dGV4X2NsZWFyX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IE5VTEw7Cit9CisKK2V4dGVybiB2b2lkIGRlYnVnX211dGV4X2luaXRfd2FpdGVyKHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcik7CitleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF93YWtlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssCisJCQkJICAgIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcik7CitleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9mcmVlX3dhaXRlcihzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIpOworZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfYWRkX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssCisJCQkJICAgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyLAorCQkJCSAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgX19JUF9ERUNMX18pOworZXh0ZXJuIHZvaWQgbXV0ZXhfcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlciwKKwkJCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKTsKK2V4dGVybiB2b2lkIGRlYnVnX211dGV4X3VubG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOworZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUpOworCisjZGVmaW5lIGRlYnVnX3NwaW5fbG9jayhsb2NrKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsJCQlcCisJCWlmIChkZWJ1Z19tdXRleF9vbikJCQlcCisJCQlzcGluX2xvY2sobG9jayk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJ1Z19zcGluX3VubG9jayhsb2NrKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKGRlYnVnX211dGV4X29uKQkJCVwKKwkJCXNwaW5fdW5sb2NrKGxvY2spOwkJXAorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQkJXAorCQlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRlYnVnX3NwaW5fbG9ja19zYXZlKGxvY2ssIGZsYWdzKQkJXAorCWRvIHsJCQkJCQlcCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJCQlcCisJCWlmIChkZWJ1Z19tdXRleF9vbikJCQlcCisJCQlzcGluX2xvY2sobG9jayk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJ1Z19zcGluX2xvY2tfcmVzdG9yZShsb2NrLCBmbGFncykJCVwKKwlkbyB7CQkJCQkJXAorCQlpZiAoZGVidWdfbXV0ZXhfb24pCQkJXAorCQkJc3Bpbl91bmxvY2sobG9jayk7CQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCVwKKwkJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzcGluX2xvY2tfbXV0ZXgobG9jaykJCQkJXAorCWRvIHsJCQkJCQlcCisJCXN0cnVjdCBtdXRleCAqbCA9IGNvbnRhaW5lcl9vZihsb2NrLCBzdHJ1Y3QgbXV0ZXgsIHdhaXRfbG9jayk7IFwKKwkJCQkJCQlcCisJCURFQlVHX1dBUk5fT04oaW5faW50ZXJydXB0KCkpOwkJXAorCQlkZWJ1Z19zcGluX2xvY2soJmRlYnVnX211dGV4X2xvY2spOwlcCisJCXNwaW5fbG9jayhsb2NrKTsJCQlcCisJCURFQlVHX1dBUk5fT04obC0+bWFnaWMgIT0gbCk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzcGluX3VubG9ja19tdXRleChsb2NrKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAorCQlkZWJ1Z19zcGluX3VubG9jaygmZGVidWdfbXV0ZXhfbG9jayk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERFQlVHX09GRigpCQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoZGVidWdfbXV0ZXhfb24pIHsJCQkJXAorCQlkZWJ1Z19tdXRleF9vbiA9IDA7CQkJXAorCQljb25zb2xlX3ZlcmJvc2UoKTsJCQlcCisJCWlmIChzcGluX2lzX2xvY2tlZCgmZGVidWdfbXV0ZXhfbG9jaykpCVwKKwkJCXNwaW5fdW5sb2NrKCZkZWJ1Z19tdXRleF9sb2NrKTsJXAorCX0JCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERFQlVHX0JVRygpCQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoZGVidWdfbXV0ZXhfb24pIHsJCQkJXAorCQlERUJVR19PRkYoKTsJCQkJXAorCQlCVUcoKTsJCQkJCVwKKwl9CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBERUJVR19XQVJOX09OKGMpCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmICh1bmxpa2VseShjICYmIGRlYnVnX211dGV4X29uKSkgewkJXAorCQlERUJVR19PRkYoKTsJCQkJXAorCQlXQVJOX09OKDEpOwkJCQlcCisJfQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyMgZGVmaW5lIERFQlVHX0JVR19PTihjKQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAodW5saWtlbHkoYykpCQkJCVwKKwkJREVCVUdfQlVHKCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfU01QCisjIGRlZmluZSBTTVBfREVCVUdfV0FSTl9PTihjKQkJCURFQlVHX1dBUk5fT04oYykKKyMgZGVmaW5lIFNNUF9ERUJVR19CVUdfT04oYykJCQlERUJVR19CVUdfT04oYykKKyNlbHNlCisjIGRlZmluZSBTTVBfREVCVUdfV0FSTl9PTihjKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIFNNUF9ERUJVR19CVUdfT04oYykJCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmMgYi9rZXJuZWwvbXV0ZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWI5NjA2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBrZXJuZWwvbXV0ZXguYworICoKKyAqIE11dGV4ZXM6IGJsb2NraW5nIG11dHVhbCBleGNsdXNpb24gbG9ja3MKKyAqCisgKiBTdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogTWFueSB0aGFua3MgdG8gQXJqYW4gdmFuIGRlIFZlbiwgVGhvbWFzIEdsZWl4bmVyLCBTdGV2ZW4gUm9zdGVkdCBhbmQKKyAqIERhdmlkIEhvd2VsbHMgZm9yIHN1Z2dlc3Rpb25zIGFuZCBpbXByb3ZlbWVudHMuCisgKgorICogQWxzbyBzZWUgRG9jdW1lbnRhdGlvbi9tdXRleC1kZXNpZ24udHh0LgorICovCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKy8qCisgKiBJbiB0aGUgREVCVUcgY2FzZSB3ZSBhcmUgdXNpbmcgdGhlICJOVUxMIGZhc3RwYXRoIiBmb3IgbXV0ZXhlcywKKyAqIHdoaWNoIGZvcmNlcyBhbGwgY2FsbHMgaW50byB0aGUgc2xvd3BhdGg6CisgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfTVVURVhFUworIyBpbmNsdWRlICJtdXRleC1kZWJ1Zy5oIgorIyBpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1udWxsLmg+CisjZWxzZQorIyBpbmNsdWRlICJtdXRleC5oIgorIyBpbmNsdWRlIDxhc20vbXV0ZXguaD4KKyNlbmRpZgorCisvKioqCisgKiBtdXRleF9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgbXV0ZXgKKyAqIEBsb2NrOiB0aGUgbXV0ZXggdG8gYmUgaW5pdGlhbGl6ZWQKKyAqCisgKiBJbml0aWFsaXplIHRoZSBtdXRleCB0byB1bmxvY2tlZCBzdGF0ZS4KKyAqCisgKiBJdCBpcyBub3QgYWxsb3dlZCB0byBpbml0aWFsaXplIGFuIGFscmVhZHkgbG9ja2VkIG11dGV4LgorICovCit2b2lkIGZhc3RjYWxsIF9fbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDEpOworCXNwaW5fbG9ja19pbml0KCZsb2NrLT53YWl0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZsb2NrLT53YWl0X2xpc3QpOworCisJZGVidWdfbXV0ZXhfaW5pdChsb2NrLCBuYW1lKTsKK30KKworRVhQT1JUX1NZTUJPTChfX211dGV4X2luaXQpOworCisvKgorICogV2Ugc3BsaXQgdGhlIG11dGV4IGxvY2svdW5sb2NrIGxvZ2ljIGludG8gc2VwYXJhdGUgZmFzdHBhdGggYW5kCisgKiBzbG93cGF0aCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgcmVnaXN0ZXIgcHJlc3N1cmUgb24gdGhlIGZhc3RwYXRoLgorICogV2UgYWxzbyBwdXQgdGhlIGZhc3RwYXRoIGZpcnN0IGluIHRoZSBrZXJuZWwgaW1hZ2UsIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGJyYW5jaCBpcyBwcmVkaWN0ZWQgYnkgdGhlIENQVSBhcyBkZWZhdWx0LXVudGFrZW4uCisgKi8KK3N0YXRpYyB2b2lkIGZhc3RjYWxsIG5vaW5saW5lIF9fc2NoZWQKK19fbXV0ZXhfbG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCBfX0lQX0RFQ0xfXyk7CisKKy8qKioKKyAqIG11dGV4X2xvY2sgLSBhY3F1aXJlIHRoZSBtdXRleAorICogQGxvY2s6IHRoZSBtdXRleCB0byBiZSBhY3F1aXJlZAorICoKKyAqIExvY2sgdGhlIG11dGV4IGV4Y2x1c2l2ZWx5IGZvciB0aGlzIHRhc2suIElmIHRoZSBtdXRleCBpcyBub3QKKyAqIGF2YWlsYWJsZSByaWdodCBub3csIGl0IHdpbGwgc2xlZXAgdW50aWwgaXQgY2FuIGdldCBpdC4KKyAqCisgKiBUaGUgbXV0ZXggbXVzdCBsYXRlciBvbiBiZSByZWxlYXNlZCBieSB0aGUgc2FtZSB0YXNrIHRoYXQKKyAqIGFjcXVpcmVkIGl0LiBSZWN1cnNpdmUgbG9ja2luZyBpcyBub3QgYWxsb3dlZC4gVGhlIHRhc2sKKyAqIG1heSBub3QgZXhpdCB3aXRob3V0IGZpcnN0IHVubG9ja2luZyB0aGUgbXV0ZXguIEFsc28sIGtlcm5lbAorICogbWVtb3J5IHdoZXJlIHRoZSBtdXRleCByZXNpZGVzIG11dGV4IG11c3Qgbm90IGJlIGZyZWVkIHdpdGgKKyAqIHRoZSBtdXRleCBzdGlsbCBsb2NrZWQuIFRoZSBtdXRleCBtdXN0IGZpcnN0IGJlIGluaXRpYWxpemVkCisgKiAob3Igc3RhdGljYWxseSBkZWZpbmVkKSBiZWZvcmUgaXQgY2FuIGJlIGxvY2tlZC4gbWVtc2V0KCktaW5nCisgKiB0aGUgbXV0ZXggdG8gMCBpcyBub3QgYWxsb3dlZC4KKyAqCisgKiAoIFRoZSBDT05GSUdfREVCVUdfTVVURVhFUyAuY29uZmlnIG9wdGlvbiB0dXJucyBvbiBkZWJ1Z2dpbmcKKyAqICAgY2hlY2tzIHRoYXQgd2lsbCBlbmZvcmNlIHRoZSByZXN0cmljdGlvbnMgYW5kIHdpbGwgYWxzbyBkbworICogICBkZWFkbG9jayBkZWJ1Z2dpbmcuICkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gKGJ1dCBub3QgZXF1aXZhbGVudCB0bykgZG93bigpLgorICovCit2b2lkIGZhc3RjYWxsIF9fc2NoZWQgbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJLyoKKwkgKiBUaGUgbG9ja2luZyBmYXN0cGF0aCBpcyB0aGUgMS0+MCB0cmFuc2l0aW9uIGZyb20KKwkgKiAndW5sb2NrZWQnIGludG8gJ2xvY2tlZCcgc3RhdGUuCisJICoKKwkgKiBOT1RFOiBpZiBhc20vbXV0ZXguaCBpcyBpbmNsdWRlZCwgdGhlbiBzb21lIGFyY2hpdGVjdHVyZXMKKwkgKiByZWx5IG9uIG11dGV4X2xvY2soKSBoYXZpbmcgX25vIG90aGVyIGNvZGVfIGhlcmUgYnV0IHRoaXMKKwkgKiBmYXN0cGF0aC4gVGhhdCBhbGxvd3MgdGhlIGFzc2VtYmx5IGZhc3RwYXRoIHRvIGRvCisJICogdGFpbC1tZXJnaW5nIG9wdGltaXphdGlvbnMuIChJZiB5b3Ugd2FudCB0byBwdXQgdGVzdGNvZGUKKwkgKiBoZXJlLCBkbyBpdCB1bmRlciAjaWZuZGVmIENPTkZJR19NVVRFWF9ERUJVRy4pCisJICovCisJX19tdXRleF9mYXN0cGF0aF9sb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF9sb2NrX3Nsb3dwYXRoKTsKK30KKworRVhQT1JUX1NZTUJPTChtdXRleF9sb2NrKTsKKworc3RhdGljIHZvaWQgZmFzdGNhbGwgbm9pbmxpbmUgX19zY2hlZAorX19tdXRleF91bmxvY2tfc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQgX19JUF9ERUNMX18pOworCisvKioqCisgKiBtdXRleF91bmxvY2sgLSByZWxlYXNlIHRoZSBtdXRleAorICogQGxvY2s6IHRoZSBtdXRleCB0byBiZSByZWxlYXNlZAorICoKKyAqIFVubG9jayBhIG11dGV4IHRoYXQgaGFzIGJlZW4gbG9ja2VkIGJ5IHRoaXMgdGFzayBwcmV2aW91c2x5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4gVW5sb2NraW5nCisgKiBvZiBhIG5vdCBsb2NrZWQgbXV0ZXggaXMgbm90IGFsbG93ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIChidXQgbm90IGVxdWl2YWxlbnQgdG8pIHVwKCkuCisgKi8KK3ZvaWQgZmFzdGNhbGwgX19zY2hlZCBtdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpsb2NrKQoreworCS8qCisJICogVGhlIHVubG9ja2luZyBmYXN0cGF0aCBpcyB0aGUgMC0+MSB0cmFuc2l0aW9uIGZyb20gJ2xvY2tlZCcKKwkgKiBpbnRvICd1bmxvY2tlZCcgc3RhdGU6CisJICoKKwkgKiBOT1RFOiBubyBvdGhlciBjb2RlIG11c3QgYmUgaGVyZSAtIHNlZSBtdXRleF9sb2NrKCkgLgorCSAqLworCV9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF91bmxvY2tfc2xvd3BhdGgpOworfQorCitFWFBPUlRfU1lNQk9MKG11dGV4X3VubG9jayk7CisKKy8qCisgKiBMb2NrIGEgbXV0ZXggKHBvc3NpYmx5IGludGVycnVwdGlibGUpLCBzbG93cGF0aDoKKyAqLworc3RhdGljIGlubGluZSBpbnQgX19zY2hlZAorX19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssIGxvbmcgc3RhdGUgX19JUF9ERUNMX18pCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKKwlzdHJ1Y3QgbXV0ZXhfd2FpdGVyIHdhaXRlcjsKKwl1bnNpZ25lZCBpbnQgb2xkX3ZhbDsKKworCWRlYnVnX211dGV4X2luaXRfd2FpdGVyKCZ3YWl0ZXIpOworCisJc3Bpbl9sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2spOworCisJZGVidWdfbXV0ZXhfYWRkX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrLT50aHJlYWRfaW5mbywgaXApOworCisJLyogYWRkIHdhaXRpbmcgdGFza3MgdG8gdGhlIGVuZCBvZiB0aGUgd2FpdHF1ZXVlIChGSUZPKTogKi8KKwlsaXN0X2FkZF90YWlsKCZ3YWl0ZXIubGlzdCwgJmxvY2stPndhaXRfbGlzdCk7CisJd2FpdGVyLnRhc2sgPSB0YXNrOworCisJZm9yICg7OykgeworCQkvKgorCQkgKiBMZXRzIHRyeSB0byB0YWtlIHRoZSBsb2NrIGFnYWluIC0gdGhpcyBpcyBuZWVkZWQgZXZlbiBpZgorCQkgKiB3ZSBnZXQgaGVyZSBmb3IgdGhlIGZpcnN0IHRpbWUgKHNob3J0bHkgYWZ0ZXIgZmFpbGluZyB0bworCQkgKiBhY3F1aXJlIHRoZSBsb2NrKSwgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ2V0IGEgd2FrZXVwIG9uY2UKKwkJICogaXQncyB1bmxvY2tlZC4gTGF0ZXIgb24sIGlmIHdlIHNsZWVwLCB0aGlzIGlzIHRoZQorCQkgKiBvcGVyYXRpb24gdGhhdCBnaXZlcyB1cyB0aGUgbG9jay4gV2UgeGNoZyBpdCB0byAtMSwgc28KKwkJICogdGhhdCB3aGVuIHdlIHJlbGVhc2UgdGhlIGxvY2ssIHdlIHByb3Blcmx5IHdha2UgdXAgdGhlCisJCSAqIG90aGVyIHdhaXRlcnM6CisJCSAqLworCQlvbGRfdmFsID0gYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSk7CisJCWlmIChvbGRfdmFsID09IDEpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBnb3QgYSBzaWduYWw/IChUaGlzIGNvZGUgZ2V0cyBlbGltaW5hdGVkIGluIHRoZQorCQkgKiBUQVNLX1VOSU5URVJSVVBUSUJMRSBjYXNlLikKKwkJICovCisJCWlmICh1bmxpa2VseShzdGF0ZSA9PSBUQVNLX0lOVEVSUlVQVElCTEUgJiYKKwkJCQkJCXNpZ25hbF9wZW5kaW5nKHRhc2spKSkgeworCQkJbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrLT50aHJlYWRfaW5mbyk7CisJCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrKTsKKworCQkJZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIoJndhaXRlcik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJCV9fc2V0X3Rhc2tfc3RhdGUodGFzaywgc3RhdGUpOworCisJCS8qIGRpZG50IGdldCB0aGUgbG9jaywgZ28gdG8gc2xlZXA6ICovCisJCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2spOworCQlzY2hlZHVsZSgpOworCQlzcGluX2xvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jayk7CisJfQorCisJLyogZ290IHRoZSBsb2NrIC0gcmVqb2ljZSEgKi8KKwltdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIHRhc2stPnRocmVhZF9pbmZvKTsKKwlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgdGFzay0+dGhyZWFkX2luZm8gX19JUF9fKTsKKworCS8qIHNldCBpdCB0byAwIGlmIHRoZXJlIGFyZSBubyB3YWl0ZXJzIGxlZnQ6ICovCisJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKKwkJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDApOworCisJc3Bpbl91bmxvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jayk7CisKKwlkZWJ1Z19tdXRleF9mcmVlX3dhaXRlcigmd2FpdGVyKTsKKworCURFQlVHX1dBUk5fT04obGlzdF9lbXB0eSgmbG9jay0+aGVsZF9saXN0KSk7CisJREVCVUdfV0FSTl9PTihsb2NrLT5vd25lciAhPSB0YXNrLT50aHJlYWRfaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmFzdGNhbGwgbm9pbmxpbmUgX19zY2hlZAorX19tdXRleF9sb2NrX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50IF9fSVBfREVDTF9fKQoreworCXN0cnVjdCBtdXRleCAqbG9jayA9IGNvbnRhaW5lcl9vZihsb2NrX2NvdW50LCBzdHJ1Y3QgbXV0ZXgsIGNvdW50KTsKKworCV9fbXV0ZXhfbG9ja19jb21tb24obG9jaywgVEFTS19VTklOVEVSUlVQVElCTEUgX19JUF9fKTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIGxvY2ssIHNsb3dwYXRoOgorICovCitzdGF0aWMgZmFzdGNhbGwgbm9pbmxpbmUgdm9pZAorX19tdXRleF91bmxvY2tfc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQgX19JUF9ERUNMX18pCit7CisgICAgICAgIHN0cnVjdCBtdXRleCAqbG9jayA9IGNvbnRhaW5lcl9vZihsb2NrX2NvdW50LCBzdHJ1Y3QgbXV0ZXgsIGNvdW50KTsKKworCURFQlVHX1dBUk5fT04obG9jay0+b3duZXIgIT0gY3VycmVudF90aHJlYWRfaW5mbygpKTsKKworCXNwaW5fbG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrKTsKKworCS8qCisJICogc29tZSBhcmNoaXRlY3R1cmVzIGxlYXZlIHRoZSBsb2NrIHVubG9ja2VkIGluIHRoZSBmYXN0cGF0aCBmYWlsdXJlCisJICogY2FzZSwgb3RoZXJzIG5lZWQgdG8gbGVhdmUgaXQgbG9ja2VkLiBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBoYXZlIHRvCisJICogdW5sb2NrIGl0IGhlcmUKKwkgKi8KKwlpZiAoX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSkKKwkJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDEpOworCisJZGVidWdfbXV0ZXhfdW5sb2NrKGxvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSB7CisJCS8qIGdldCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgd2FpdC1saXN0OiAqLworCQlzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIgPQorCQkJCWxpc3RfZW50cnkobG9jay0+d2FpdF9saXN0Lm5leHQsCisJCQkJCSAgIHN0cnVjdCBtdXRleF93YWl0ZXIsIGxpc3QpOworCisJCWRlYnVnX211dGV4X3dha2Vfd2FpdGVyKGxvY2ssIHdhaXRlcik7CisKKwkJd2FrZV91cF9wcm9jZXNzKHdhaXRlci0+dGFzayk7CisJfQorCisJZGVidWdfbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CisKKwlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrKTsKK30KKworLyoKKyAqIEhlcmUgY29tZSB0aGUgbGVzcyBjb21tb24gKGFuZCBoZW5jZSBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsKSBBUElzOgorICogbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCkgYW5kIG11dGV4X3RyeWxvY2soKS4KKyAqLworc3RhdGljIGludCBmYXN0Y2FsbCBub2lubGluZSBfX3NjaGVkCitfX211dGV4X2xvY2tfaW50ZXJydXB0aWJsZV9zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCBfX0lQX0RFQ0xfXyk7CisKKy8qKioKKyAqIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSAtIGFjcXVpcmUgdGhlIG11dGV4LCBpbnRlcnJ1cHRhYmxlCisgKiBAbG9jazogdGhlIG11dGV4IHRvIGJlIGFjcXVpcmVkCisgKgorICogTG9jayB0aGUgbXV0ZXggbGlrZSBtdXRleF9sb2NrKCksIGFuZCByZXR1cm4gMCBpZiB0aGUgbXV0ZXggaGFzCisgKiBiZWVuIGFjcXVpcmVkIG9yIHNsZWVwIHVudGlsIHRoZSBtdXRleCBiZWNvbWVzIGF2YWlsYWJsZS4gSWYgYQorICogc2lnbmFsIGFycml2ZXMgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxvY2sgdGhlbiB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIC1FSU5UUi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gKGJ1dCBub3QgZXF1aXZhbGVudCB0bykgZG93bl9pbnRlcnJ1cHRpYmxlKCkuCisgKi8KK2ludCBmYXN0Y2FsbCBfX3NjaGVkIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJLyogTk9URTogbm8gb3RoZXIgY29kZSBtdXN0IGJlIGhlcmUgLSBzZWUgbXV0ZXhfbG9jaygpICovCisJcmV0dXJuIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwKKwkJCSgmbG9jay0+Y291bnQsIF9fbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX3Nsb3dwYXRoKTsKK30KKworRVhQT1JUX1NZTUJPTChtdXRleF9sb2NrX2ludGVycnVwdGlibGUpOworCitzdGF0aWMgaW50IGZhc3RjYWxsIG5vaW5saW5lIF9fc2NoZWQKK19fbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50IF9fSVBfREVDTF9fKQoreworCXN0cnVjdCBtdXRleCAqbG9jayA9IGNvbnRhaW5lcl9vZihsb2NrX2NvdW50LCBzdHJ1Y3QgbXV0ZXgsIGNvdW50KTsKKworCXJldHVybiBfX211dGV4X2xvY2tfY29tbW9uKGxvY2ssIFRBU0tfSU5URVJSVVBUSUJMRSBfX0lQX18pOworfQorCisvKgorICogU3BpbmxvY2sgYmFzZWQgdHJ5bG9jaywgd2UgdGFrZSB0aGUgc3BpbmxvY2sgYW5kIGNoZWNrIHdoZXRoZXIgd2UKKyAqIGNhbiBnZXQgdGhlIGxvY2s6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbXV0ZXhfdHJ5bG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCkKK3sKKwlzdHJ1Y3QgbXV0ZXggKmxvY2sgPSBjb250YWluZXJfb2YobG9ja19jb3VudCwgc3RydWN0IG11dGV4LCBjb3VudCk7CisJaW50IHByZXY7CisKKwlzcGluX2xvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jayk7CisKKwlwcmV2ID0gYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSk7CisJaWYgKGxpa2VseShwcmV2ID09IDEpKQorCQlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgY3VycmVudF90aHJlYWRfaW5mbygpIF9fUkVUX0lQX18pOworCS8qIFNldCBpdCBiYWNrIHRvIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRlcnM6ICovCisJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKKwkJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDApOworCisJc3Bpbl91bmxvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jayk7CisKKwlyZXR1cm4gcHJldiA9PSAxOworfQorCisvKioqCisgKiBtdXRleF90cnlsb2NrIC0gdHJ5IGFjcXVpcmUgdGhlIG11dGV4LCB3aXRob3V0IHdhaXRpbmcKKyAqIEBsb2NrOiB0aGUgbXV0ZXggdG8gYmUgYWNxdWlyZWQKKyAqCisgKiBUcnkgdG8gYWNxdWlyZSB0aGUgbXV0ZXggYXRvbWljYWxseS4gUmV0dXJucyAxIGlmIHRoZSBtdXRleAorICogaGFzIGJlZW4gYWNxdWlyZWQgc3VjY2Vzc2Z1bGx5LCBhbmQgMCBvbiBjb250ZW50aW9uLgorICoKKyAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgc3Bpbl90cnlsb2NrKCkgY29udmVudGlvbiwgc28KKyAqIGl0IGlzIG5lZ2F0ZWQgdG8gdGhlIGRvd25fdHJ5bG9jaygpIHJldHVybiB2YWx1ZXMhIEJlIGNhcmVmdWwKKyAqIGFib3V0IHRoaXMgd2hlbiBjb252ZXJ0aW5nIHNlbWFwaG9yZSB1c2VycyB0byBtdXRleGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4gVGhlCisgKiBtdXRleCBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRoZSBzYW1lIHRhc2sgdGhhdCBhY3F1aXJlZCBpdC4KKyAqLworaW50IGZhc3RjYWxsIG11dGV4X3RyeWxvY2soc3RydWN0IG11dGV4ICpsb2NrKQoreworCXJldHVybiBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soJmxvY2stPmNvdW50LAorCQkJCQlfX211dGV4X3RyeWxvY2tfc2xvd3BhdGgpOworfQorCitFWFBPUlRfU1lNQk9MKG11dGV4X3RyeWxvY2spOworCisKKwpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmggYi9rZXJuZWwvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZlODRlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL211dGV4LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIE11dGV4ZXM6IGJsb2NraW5nIG11dHVhbCBleGNsdXNpb24gbG9ja3MKKyAqCisgKiBzdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG11dGV4IGRlYnVnZ2luZyByZWxhdGVkIGludGVybmFsIHByb3RvdHlwZXMsIGZvciB0aGUKKyAqICFDT05GSUdfREVCVUdfTVVURVhFUyBjYXNlLiBNb3N0IG9mIHRoZW0gYXJlIE5PUHM6CisgKi8KKworI2RlZmluZSBzcGluX2xvY2tfbXV0ZXgobG9jaykJCQlzcGluX2xvY2sobG9jaykKKyNkZWZpbmUgc3Bpbl91bmxvY2tfbXV0ZXgobG9jaykJCQlzcGluX3VubG9jayhsb2NrKQorI2RlZmluZSBtdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssIHdhaXRlciwgdGkpIFwKKwkJX19saXN0X2RlbCgod2FpdGVyKS0+bGlzdC5wcmV2LCAod2FpdGVyKS0+bGlzdC5uZXh0KQorCisjZGVmaW5lIERFQlVHX1dBUk5fT04oYykJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgbmV3X293bmVyKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihsb2NrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfbXV0ZXhfaW5pdF93YWl0ZXIod2FpdGVyKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfbXV0ZXhfd2FrZV93YWl0ZXIobG9jaywgd2FpdGVyKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19tdXRleF9mcmVlX3dhaXRlcih3YWl0ZXIpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19tdXRleF9hZGRfd2FpdGVyKGxvY2ssIHdhaXRlciwgdGksIGlwKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX211dGV4X3VubG9jayhsb2NrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfbXV0ZXhfaW5pdChsb2NrLCBuYW1lKQkJCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIFJldHVybi1hZGRyZXNzIHBhcmFtZXRlcnMvZGVjbGFyYXRpb25zLiBUaGV5IGFyZSB2ZXJ5IHVzZWZ1bCBmb3IKKyAqIGRlYnVnZ2luZywgYnV0IGFkZCBvdmVyaGVhZCBpbiB0aGUgIURFQlVHIGNhc2UgLSBzbyB3ZSBnbyB0aGUKKyAqIHRyb3VibGUgb2YgdXNpbmcgdGhpcyBub3QgdG9vIGVsZWdhbnQgYnV0IHplcm8tY29zdCBzb2x1dGlvbjoKKyAqLworI2RlZmluZSBfX0lQX0RFQ0xfXworI2RlZmluZSBfX0lQX18KKyNkZWZpbmUgX19SRVRfSVBfXworCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IGNjYzQ1ZDQuLjA1ZWU0ODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0yMzYsMTIgKzIzNiw4IEBACiAgKiBhY3RpdmUgYmF0Y2ggYW5kIHRoZSBiYXRjaCB0byBiZSByZWdpc3RlcmVkIGhhcyBub3QgYWxyZWFkeSBvY2N1cnJlZC4KICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3N0YXRlLmxvY2suCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9zdGFydF9iYXRjaChzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCWludCBuZXh0X3BlbmRpbmcpCitzdGF0aWMgdm9pZCByY3Vfc3RhcnRfYmF0Y2goc3RydWN0IHJjdV9jdHJsYmxrICpyY3AsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKLQlpZiAobmV4dF9wZW5kaW5nKQotCQlyY3AtPm5leHRfcGVuZGluZyA9IDE7Ci0KIAlpZiAocmNwLT5uZXh0X3BlbmRpbmcgJiYKIAkJCXJjcC0+Y29tcGxldGVkID09IHJjcC0+Y3VyKSB7CiAJCXJjcC0+bmV4dF9wZW5kaW5nID0gMDsKQEAgLTI3NSw3ICsyNzEsNyBAQAogCWlmIChjcHVzX2VtcHR5KHJzcC0+Y3B1bWFzaykpIHsKIAkJLyogYmF0Y2ggY29tcGxldGVkICEgKi8KIAkJcmNwLT5jb21wbGV0ZWQgPSByY3AtPmN1cjsKLQkJcmN1X3N0YXJ0X2JhdGNoKHJjcCwgcnNwLCAwKTsKKwkJcmN1X3N0YXJ0X2JhdGNoKHJjcCwgcnNwKTsKIAl9CiB9CiAKQEAgLTQxMCw3ICs0MDYsOCBAQAogCQlpZiAoIXJjcC0+bmV4dF9wZW5kaW5nKSB7CiAJCQkvKiBhbmQgc3RhcnQgaXQvc2NoZWR1bGUgc3RhcnQgaWYgaXQncyBhIG5ldyBiYXRjaCAqLwogCQkJc3Bpbl9sb2NrKCZyc3AtPmxvY2spOwotCQkJcmN1X3N0YXJ0X2JhdGNoKHJjcCwgcnNwLCAxKTsKKwkJCXJjcC0+bmV4dF9wZW5kaW5nID0gMTsKKwkJCXJjdV9zdGFydF9iYXRjaChyY3AsIHJzcCk7CiAJCQlzcGluX3VubG9jaygmcnNwLT5sb2NrKTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDkyNzMzMDkuLjM0YTk0NWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC00Mzg2LDYgKzQzODYsNyBAQAogCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJbXV0ZXhfZGVidWdfc2hvd19hbGxfbG9ja3MoKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGM0ODI2MGYuLjFmY2Q4NTYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC05NSw2ICs5NSwxNCBAQAogCSAgaWYga2VybmVsIGNvZGUgdXNlcyBpdCBpbiBhIHByZWVtcHRpb24tdW5zYWZlIHdheS4gQWxzbywgdGhlIGtlcm5lbAogCSAgd2lsbCBkZXRlY3QgcHJlZW1wdGlvbiBjb3VudCB1bmRlcmZsb3dzLgogCitjb25maWcgREVCVUdfTVVURVhFUworCWJvb2wgIk11dGV4IGRlYnVnZ2luZywgZGVhZGxvY2sgZGV0ZWN0aW9uIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSBUaGlzIGFsbG93cyBtdXRleCBzZW1hbnRpY3MgdmlvbGF0aW9ucyBhbmQgbXV0ZXggcmVsYXRlZCBkZWFkbG9ja3MKKwkgKGxvY2t1cHMpIHRvIGJlIGRldGVjdGVkIGFuZCByZXBvcnRlZCBhdXRvbWF0aWNhbGx5LgorCiBjb25maWcgREVCVUdfU1BJTkxPQ0sKIAlib29sICJTcGlubG9jayBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA0NzhmNGM3Li41ZmNhMjczIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC02MSw3ICs2MSw3IEBACiAgKiAgICAgIC0+c3dhcF9sb2NrCQkoZXhjbHVzaXZlX3N3YXBfcGFnZSwgb3RoZXJzKQogICogICAgICAgIC0+bWFwcGluZy0+dHJlZV9sb2NrCiAgKgotICogIC0+aV9zZW0KKyAqICAtPmlfbXV0ZXgKICAqICAgIC0+aV9tbWFwX2xvY2sJCSh0cnVuY2F0ZS0+dW5tYXBfbWFwcGluZ19yYW5nZSkKICAqCiAgKiAgLT5tbWFwX3NlbQpAQCAtNzMsOSArNzMsOSBAQAogICogICAgLT5sb2NrX3BhZ2UJCShhY2Nlc3NfcHJvY2Vzc192bSkKICAqCiAgKiAgLT5tbWFwX3NlbQotICogICAgLT5pX3NlbQkJCShtc3luYykKKyAqICAgIC0+aV9tdXRleAkJCShtc3luYykKICAqCi0gKiAgLT5pX3NlbQorICogIC0+aV9tdXRleAogICogICAgLT5pX2FsbG9jX3NlbSAgICAgICAgICAgICAodmFyaW91cykKICAqCiAgKiAgLT5pbm9kZV9sb2NrCkBAIC0yNzYsNyArMjc2LDcgQEAKICAqIGludGVncml0eSIgb3BlcmF0aW9uLiAgSXQgd2FpdHMgdXBvbiBpbi1mbGlnaHQgd3JpdGVvdXQgYmVmb3JlIHN0YXJ0aW5nIGFuZAogICogd2FpdGluZyB1cG9uIG5ldyB3cml0ZW91dC4gIElmIHRoZXJlIHdhcyBhbiBJTyBlcnJvciwgcmV0dXJuIGl0LgogICoKLSAqIFdlIG5lZWQgdG8gcmUtdGFrZSBpX3NlbSBkdXJpbmcgdGhlIGdlbmVyaWNfb3N5bmNfaW5vZGUgbGlzdCB3YWxrIGJlY2F1c2UKKyAqIFdlIG5lZWQgdG8gcmUtdGFrZSBpX211dGV4IGR1cmluZyB0aGUgZ2VuZXJpY19vc3luY19pbm9kZSBsaXN0IHdhbGsgYmVjYXVzZQogICogaXQgaXMgb3RoZXJ3aXNlIGxpdmVsb2NrYWJsZS4KICAqLwogaW50IHN5bmNfcGFnZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKQEAgLTI5MCw5ICsyOTAsOSBAQAogCQlyZXR1cm4gMDsKIAlyZXQgPSBmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UobWFwcGluZywgcG9zLCBwb3MgKyBjb3VudCAtIDEpOwogCWlmIChyZXQgPT0gMCkgewotCQlkb3duKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCXJldCA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsIE9TWU5DX01FVEFEQVRBKTsKLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCX0KIAlpZiAocmV0ID09IDApCiAJCXJldCA9IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7CkBAIC0zMDEsNyArMzAxLDcgQEAKIEVYUE9SVF9TWU1CT0woc3luY19wYWdlX3JhbmdlKTsKIAogLyoKLSAqIE5vdGU6IEhvbGRpbmcgaV9zZW0gYWNyb3NzIHN5bmNfcGFnZV9yYW5nZV9ub2xvY2sgaXMgbm90IGEgZ29vZCBpZGVhCisgKiBOb3RlOiBIb2xkaW5nIGlfbXV0ZXggYWNyb3NzIHN5bmNfcGFnZV9yYW5nZV9ub2xvY2sgaXMgbm90IGEgZ29vZCBpZGVhCiAgKiBhcyBpdCBmb3JjZXMgT19TWU5DIHdyaXRlcnMgdG8gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzYW1lIGZpbGUKICAqIHRvIGJlIHNlcmlhbGlzZWQgcmlnaHQgdW50aWwgaW8gY29tcGxldGlvbi4KICAqLwpAQCAtMTg5Miw3ICsxODkyLDcgQEAKIAkvKgogCSAqIFN5bmMgdGhlIGZzIG1ldGFkYXRhIGJ1dCBub3QgdGhlIG1pbm9yIGlub2RlIGNoYW5nZXMgYW5kCiAJICogb2YgY291cnNlIG5vdCB0aGUgZGF0YSBhcyB3ZSBkaWQgZGlyZWN0IERNQSBmb3IgdGhlIElPLgotCSAqIGlfc2VtIGlzIGhlbGQsIHdoaWNoIHByb3RlY3RzIGdlbmVyaWNfb3N5bmNfaW5vZGUoKSBmcm9tCisJICogaV9tdXRleCBpcyBoZWxkLCB3aGljaCBwcm90ZWN0cyBnZW5lcmljX29zeW5jX2lub2RlKCkgZnJvbQogCSAqIGxpdmVsb2NraW5nLgogCSAqLwogCWlmICh3cml0dGVuID49IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKQEAgLTIxOTUsMTAgKzIxOTUsMTAgQEAKIAogCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKIAotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgJmxvY2FsX2lvdiwgMSwKIAkJCQkJCSZpb2NiLT5raV9wb3MpOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKHJldCA+IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKIAkJc3NpemVfdCBlcnI7CkBAIC0yMjIwLDkgKzIyMjAsOSBAQAogCXN0cnVjdCBpb3ZlYyBsb2NhbF9pb3YgPSB7IC5pb3ZfYmFzZSA9ICh2b2lkIF9fdXNlciAqKWJ1ZiwKIAkJCQkJLmlvdl9sZW4gPSBjb3VudCB9OwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0ID0gX19nZW5lcmljX2ZpbGVfd3JpdGVfbm9sb2NrKGZpbGUsICZsb2NhbF9pb3YsIDEsIHBwb3MpOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKHJldCA+IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKIAkJc3NpemVfdCBlcnI7CkBAIC0yMjU2LDkgKzIyNTYsOSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXNzaXplX3QgcmV0OwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0ID0gX19nZW5lcmljX2ZpbGVfd3JpdGVfbm9sb2NrKGZpbGUsIGlvdiwgbnJfc2VncywgcHBvcyk7Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewogCQlpbnQgZXJyOwpAQCAtMjI3Miw3ICsyMjcyLDcgQEAKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX3dyaXRldik7CiAKIC8qCi0gKiBDYWxsZWQgdW5kZXIgaV9zZW0gZm9yIHdyaXRlcyB0byBTX0lTUkVHIGZpbGVzLiAgIFJldHVybnMgLUVJTyBpZiBzb21ldGhpbmcKKyAqIENhbGxlZCB1bmRlciBpX211dGV4IGZvciB3cml0ZXMgdG8gU19JU1JFRyBmaWxlcy4gICBSZXR1cm5zIC1FSU8gaWYgc29tZXRoaW5nCiAgKiB3ZW50IHdyb25nIGR1cmluZyBwYWdlY2FjaGUgc2hvb3Rkb3duLgogICovCiBzdGF0aWMgc3NpemVfdApkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcF94aXAuYyBiL21tL2ZpbGVtYXBfeGlwLmMKaW5kZXggOWNmNjg3ZS4uZTJiMzRlOSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcF94aXAuYworKysgYi9tbS9maWxlbWFwX3hpcC5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkqcHBvcyA9IHBvczsKIAkvKgogCSAqIE5vIG5lZWQgdG8gdXNlIGlfc2l6ZV9yZWFkKCkgaGVyZSwgdGhlIGlfc2l6ZQotCSAqIGNhbm5vdCBjaGFuZ2UgdW5kZXIgdXMgYmVjYXVzZSB3ZSBob2xkIGlfc2VtLgorCSAqIGNhbm5vdCBjaGFuZ2UgdW5kZXIgdXMgYmVjYXVzZSB3ZSBob2xkIGlfbXV0ZXguCiAJICovCiAJaWYgKHBvcyA+IGlub2RlLT5pX3NpemUpIHsKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MpOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJbG9mZl90IHBvczsKIAlzc2l6ZV90IHJldDsKIAotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgbGVuKSkgewogCQlyZXQ9LUVGQVVMVDsKQEAgLTM5MCw3ICszOTAsNyBAQAogIG91dF9iYWNraW5nOgogCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBOVUxMOwogIG91dF91cDoKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGlwX2ZpbGVfd3JpdGUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAzOTQ0ZmVjLi43YTExZGRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTc4NCwxMyArMTc4NCwxMyBAQAogCWlmICghaW5vZGUtPmlfb3AgfHwgIWlub2RlLT5pX29wLT50cnVuY2F0ZV9yYW5nZSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlkb3duX3dyaXRlKCZpbm9kZS0+aV9hbGxvY19zZW0pOwogCXVubWFwX21hcHBpbmdfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCAoZW5kIC0gb2Zmc2V0KSwgMSk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmQpOwogCWlub2RlLT5pX29wLT50cnVuY2F0ZV9yYW5nZShpbm9kZSwgb2Zmc2V0LCBlbmQpOwogCXVwX3dyaXRlKCZpbm9kZS0+aV9hbGxvY19zZW0pOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9tbS9tc3luYy5jIGIvbW0vbXN5bmMuYwppbmRleCAxYjViNmY2Li4zNTYzYTU2IDEwMDY0NAotLS0gYS9tbS9tc3luYy5jCisrKyBiL21tL21zeW5jLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQkJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOwogCQkJaWYgKGZpbGUtPmZfb3AgJiYgZmlsZS0+Zl9vcC0+ZnN5bmMpIHsKIAkJCQkvKgotCQkJCSAqIFdlIGRvbid0IHRha2UgaV9zZW0gaGVyZSBiZWNhdXNlIG1tYXBfc2VtCisJCQkJICogV2UgZG9uJ3QgdGFrZSBpX211dGV4IGhlcmUgYmVjYXVzZSBtbWFwX3NlbQogCQkJCSAqIGlzIGFscmVhZHkgaGVsZC4KIAkJCQkgKi8KIAkJCQllcnIgPSBmaWxlLT5mX29wLT5mc3luYyhmaWxlLGZpbGUtPmZfZGVudHJ5LDEpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGUwZTg0OTIuLmE1ZTY4OTEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTQxNSw2ICs0MTUsOSBAQAogCWludCByZXNlcnZlZCA9IDA7CiAKIAlhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwkJbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQocGFnZV9hZGRyZXNzKHBhZ2UpLAorCQkJcGFnZV9hZGRyZXNzKHBhZ2UrKDE8PG9yZGVyKSkpOwogCiAjaWZuZGVmIENPTkZJR19NTVUKIAlmb3IgKGkgPSAxIDsgaSA8ICgxIDw8IG9yZGVyKSA7ICsraSkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA2NmVjNDMwLi5kZmJiODlmIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC0yMCwxMyArMjAsMTMgQEAKIC8qCiAgKiBMb2NrIG9yZGVyaW5nIGluIG1tOgogICoKLSAqIGlub2RlLT5pX3NlbQkod2hpbGUgd3JpdGluZyBvciB0cnVuY2F0aW5nLCBub3QgcmVhZGluZyBvciBmYXVsdGluZykKKyAqIGlub2RlLT5pX211dGV4CSh3aGlsZSB3cml0aW5nIG9yIHRydW5jYXRpbmcsIG5vdCByZWFkaW5nIG9yIGZhdWx0aW5nKQogICogICBpbm9kZS0+aV9hbGxvY19zZW0KICAqCiAgKiBXaGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgaW4gd3JpdGluZyBmcm9tIHVzZXIgdG8gZmlsZSwgZG93bl9yZWFkCi0gKiBvZiBtbWFwX3NlbSBuZXN0cyB3aXRoaW4gaV9zZW07IGluIHN5c19tc3luYywgaV9zZW0gbmVzdHMgd2l0aGluCi0gKiBkb3duX3JlYWQgb2YgbW1hcF9zZW07IGlfc2VtIGFuZCBkb3duX3dyaXRlIG9mIG1tYXBfc2VtIGFyZSBuZXZlcgotICogdGFrZW4gdG9nZXRoZXI7IGluIHRydW5jYXRpb24sIGlfc2VtIGlzIHRha2VuIG91dGVybW9zdC4KKyAqIG9mIG1tYXBfc2VtIG5lc3RzIHdpdGhpbiBpX211dGV4OyBpbiBzeXNfbXN5bmMsIGlfbXV0ZXggbmVzdHMgd2l0aGluCisgKiBkb3duX3JlYWQgb2YgbW1hcF9zZW07IGlfbXV0ZXggYW5kIGRvd25fd3JpdGUgb2YgbW1hcF9zZW0gYXJlIG5ldmVyCisgKiB0YWtlbiB0b2dldGhlcjsgaW4gdHJ1bmNhdGlvbiwgaV9tdXRleCBpcyB0YWtlbiBvdXRlcm1vc3QuCiAgKgogICogbW0tPm1tYXBfc2VtCiAgKiAgIHBhZ2UtPmZsYWdzIFBHX2xvY2tlZCAobG9ja19wYWdlKQpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYTFmMmYwMi4uMzQzYjNjMCAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0xMzcwLDcgKzEzNzAsNyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXBvcyA9ICpwcG9zOwogCXdyaXR0ZW4gPSAwOwpAQCAtMTQ1NSw3ICsxNDU1LDcgQEAKIAlpZiAod3JpdHRlbikKIAkJZXJyID0gd3JpdHRlbjsKIG91dDoKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDkxLDcgKzE0OTEsNyBAQAogCiAJCS8qCiAJCSAqIFdlIG11c3QgZXZhbHVhdGUgYWZ0ZXIsIHNpbmNlIHJlYWRzICh1bmxpa2Ugd3JpdGVzKQotCQkgKiBhcmUgY2FsbGVkIHdpdGhvdXQgaV9zZW0gcHJvdGVjdGlvbiBhZ2FpbnN0IHRydW5jYXRlCisJCSAqIGFyZSBjYWxsZWQgd2l0aG91dCBpX211dGV4IHByb3RlY3Rpb24gYWdhaW5zdCB0cnVuY2F0ZQogCQkgKi8KIAkJbnIgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAxYzQ2YzYzLi4zM2FhYjM0IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zMDcxLDYgKzMwNzEsNyBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlrZnJlZV9kZWJ1Z2NoZWNrKG9ianApOwogCWMgPSBwYWdlX2dldF9jYWNoZSh2aXJ0X3RvX3BhZ2Uob2JqcCkpOworCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9ianAsIG9ianArb2JqX3JlYWxsZW4oYykpOwogCV9fY2FjaGVfZnJlZShjLCAodm9pZCAqKW9ianApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDgwZjk0OGEuLjY1NDQ1NjUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMTE4Nyw5ICsxMTg3LDkgQEAKIAkJc2V0X2Jsb2Nrc2l6ZShiZGV2LCBwLT5vbGRfYmxvY2tfc2l6ZSk7CiAJCWJkX3JlbGVhc2UoYmRldik7CiAJfSBlbHNlIHsKLQkJZG93bigmaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlpbm9kZS0+aV9mbGFncyAmPSB+U19TV0FQRklMRTsKLQkJdXAoJmlub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCX0KIAlmaWxwX2Nsb3NlKHN3YXBfZmlsZSwgTlVMTCk7CiAJZXJyID0gMDsKQEAgLTE0MDYsNyArMTQwNiw3IEBACiAJCXAtPmJkZXYgPSBiZGV2OwogCX0gZWxzZSBpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQlwLT5iZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKLQkJZG93bigmaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlkaWRfZG93biA9IDE7CiAJCWlmIChJU19TV0FQRklMRShpbm9kZSkpIHsKIAkJCWVycm9yID0gLUVCVVNZOwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAlpZiAoZGlkX2Rvd24pIHsKIAkJaWYgKCFlcnJvcikKIAkJCWlub2RlLT5pX2ZsYWdzIHw9IFNfU1dBUEZJTEU7Ci0JCXVwKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYjFhNDYzZC4uNmNiM2ZmZiAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0xOTYsNyArMTk2LDcgQEAKICAqIEBtYXBwaW5nOiBtYXBwaW5nIHRvIHRydW5jYXRlCiAgKiBAbHN0YXJ0OiBvZmZzZXQgZnJvbSB3aGljaCB0byB0cnVuY2F0ZQogICoKLSAqIENhbGxlZCB1bmRlciAoYW5kIHNlcmlhbGlzZWQgYnkpIGlub2RlLT5pX3NlbS4KKyAqIENhbGxlZCB1bmRlciAoYW5kIHNlcmlhbGlzZWQgYnkpIGlub2RlLT5pX211dGV4LgogICovCiB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1MDgxMjg3Li5iZjY2YjExIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTA5MiwxNSArMTA5MiwxMiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG9mZnNldCA+IChpbnQpc2tiLT5sZW4pCi0JCUJVRygpOworCUJVR19PTihvZmZzZXQgPiAoaW50KXNrYi0+bGVuKTsKIAljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbi1vZmZzZXQsIDApOwogCiAJb2Zmc2V0ID0gc2tiLT50YWlsIC0gc2tiLT5oLnJhdzsKLQlpZiAob2Zmc2V0IDw9IDApCi0JCUJVRygpOwotCWlmIChza2ItPmNzdW0gKyAyID4gb2Zmc2V0KQotCQlCVUcoKTsKKwlCVUdfT04ob2Zmc2V0IDw9IDApOworCUJVR19PTihza2ItPmNzdW0gKyAyID4gb2Zmc2V0KTsKIAogCSoodTE2Kikoc2tiLT5oLnJhdyArIHNrYi0+Y3N1bSkgPSBjc3VtX2ZvbGQoY3N1bSk7CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCAwNzBmOTFjLi5kMDczMmU5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNzkxLDggKzc5MSw3IEBACiAJCWludCBlbmQgPSBvZmZzZXQgKyBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCWlmIChlbmQgPiBsZW4pIHsKIAkJCWlmIChza2JfY2xvbmVkKHNrYikpIHsKLQkJCQlpZiAoIXJlYWxsb2MpCi0JCQkJCUJVRygpOworCQkJCUJVR19PTighcmVhbGxvYyk7CiAJCQkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CkBAIC04OTQsOCArODkzLDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKmluc3AgPSBOVUxMOwogCiAJCWRvIHsKLQkJCWlmICghbGlzdCkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighbGlzdCk7CiAKIAkJCWlmIChsaXN0LT5sZW4gPD0gZWF0KSB7CiAJCQkJLyogRWF0ZW4gYXMgd2hvbGUuICovCkBAIC0xMTk5LDggKzExOTcsNyBAQAogCQkJc3RhcnQgPSBlbmQ7CiAJCX0KIAl9Ci0JaWYgKGxlbikKLQkJQlVHKCk7CisJQlVHX09OKGxlbik7CiAKIAlyZXR1cm4gY3N1bTsKIH0KQEAgLTEyODIsOCArMTI3OSw3IEBACiAJCQlzdGFydCA9IGVuZDsKIAkJfQogCX0KLQlpZiAobGVuKQotCQlCVUcoKTsKKwlCVUdfT04obGVuKTsKIAlyZXR1cm4gY3N1bTsKIH0KIApAQCAtMTI5Nyw4ICsxMjkzLDcgQEAKIAllbHNlCiAJCWNzc3RhcnQgPSBza2JfaGVhZGxlbihza2IpOwogCi0JaWYgKGNzc3RhcnQgPiBza2JfaGVhZGxlbihza2IpKQotCQlCVUcoKTsKKwlCVUdfT04oY3NzdGFydCA+IHNrYl9oZWFkbGVuKHNrYikpOwogCiAJbWVtY3B5KHRvLCBza2ItPmRhdGEsIGNzc3RhcnQpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggYmU1YTUxOS4uMTA1MDM5ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtODk5LDggKzg5OSw3IEBACiAJCXUzMiBfbWFzaywgKm1wOwogCiAJCW1wID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9tYXNrKSwgJl9tYXNrKTsKLQkJaWYgKG1wID09IE5VTEwpCi0JCQlCVUcoKTsKKwkJQlVHX09OKG1wID09IE5VTEwpOwogCQlmb3IgKGlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgewogCQkJaWYgKCptcCA9PSBpZmEtPmlmYV9tYXNrICYmCiAJCQkgICAgaW5ldF9pZmFfbWF0Y2gocnQtPnJ0X3NyYywgaWZhKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggYzQ5OTA4MS4uNDU3ZGI5OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTUwLDkgKzUwLDEwIEBACiAjZGVmaW5lIElORVRfRElBR19QVVQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbikgXAogCVJUQV9EQVRBKF9fUlRBX1BVVChza2IsIGF0dHJ0eXBlLCBhdHRybGVuKSkKIAotc3RhdGljIGludCBpbmV0X2RpYWdfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQlpbnQgZXh0LCB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgbmxtc2dfZmxhZ3MsCi0JCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKnVubGgpCitzdGF0aWMgaW50IGluZXRfY3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgaW50IGV4dCwgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IG5sbXNnX2ZsYWdzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CkBAIC03MCwyMCArNzEsMjIgQEAKIAlubGgtPm5sbXNnX2ZsYWdzID0gbmxtc2dfZmxhZ3M7CiAKIAlyID0gTkxNU0dfREFUQShubGgpOwotCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX1RJTUVfV0FJVCkgewotCQlpZiAoZXh0ICYgKDEgPDwgKElORVRfRElBR19NRU1JTkZPIC0gMSkpKQotCQkJbWluZm8gPSBJTkVUX0RJQUdfUFVUKHNrYiwgSU5FVF9ESUFHX01FTUlORk8sCi0JCQkJCSAgICAgIHNpemVvZigqbWluZm8pKTsKLQkJaWYgKGV4dCAmICgxIDw8IChJTkVUX0RJQUdfSU5GTyAtIDEpKSkKLQkJCWluZm8gPSBJTkVUX0RJQUdfUFVUKHNrYiwgSU5FVF9ESUFHX0lORk8sCi0JCQkJCSAgIGhhbmRsZXItPmlkaWFnX2luZm9fc2l6ZSk7Ci0JCQotCQlpZiAoKGV4dCAmICgxIDw8IChJTkVUX0RJQUdfQ09ORyAtIDEpKSkgJiYgaWNzay0+aWNza19jYV9vcHMpIHsKLQkJCXNpemVfdCBsZW4gPSBzdHJsZW4oaWNzay0+aWNza19jYV9vcHMtPm5hbWUpOwotCQkJc3RyY3B5KElORVRfRElBR19QVVQoc2tiLCBJTkVUX0RJQUdfQ09ORywgbGVuICsgMSksCi0JCQkgICAgICAgaWNzay0+aWNza19jYV9vcHMtPm5hbWUpOwotCQl9CisJQlVHX09OKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKTsKKworCWlmIChleHQgJiAoMSA8PCAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSkpCisJCW1pbmZvID0gSU5FVF9ESUFHX1BVVChza2IsIElORVRfRElBR19NRU1JTkZPLCBzaXplb2YoKm1pbmZvKSk7CisKKwlpZiAoZXh0ICYgKDEgPDwgKElORVRfRElBR19JTkZPIC0gMSkpKQorCQlpbmZvID0gSU5FVF9ESUFHX1BVVChza2IsIElORVRfRElBR19JTkZPLAorCQkJCSAgICAgaGFuZGxlci0+aWRpYWdfaW5mb19zaXplKTsKKworCWlmICgoZXh0ICYgKDEgPDwgKElORVRfRElBR19DT05HIC0gMSkpKSAmJiBpY3NrLT5pY3NrX2NhX29wcykgeworCQljb25zdCBzaXplX3QgbGVuID0gc3RybGVuKGljc2stPmljc2tfY2Ffb3BzLT5uYW1lKTsKKworCQlzdHJjcHkoSU5FVF9ESUFHX1BVVChza2IsIElORVRfRElBR19DT05HLCBsZW4gKyAxKSwKKwkJICAgICAgIGljc2stPmljc2tfY2Ffb3BzLT5uYW1lKTsKIAl9CisKIAlyLT5pZGlhZ19mYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCXItPmlkaWFnX3N0YXRlID0gc2stPnNrX3N0YXRlOwogCXItPmlkaWFnX3RpbWVyID0gMDsKQEAgLTkzLDM3ICs5Niw2IEBACiAJci0+aWQuaWRpYWdfY29va2llWzBdID0gKHUzMikodW5zaWduZWQgbG9uZylzazsKIAlyLT5pZC5pZGlhZ19jb29raWVbMV0gPSAodTMyKSgoKHVuc2lnbmVkIGxvbmcpc2sgPj4gMzEpID4+IDEpOwogCi0JaWYgKHItPmlkaWFnX3N0YXRlID09IFRDUF9USU1FX1dBSVQpIHsKLQkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwotCQlsb25nIHRtbyA9IHR3LT50d190dGQgLSBqaWZmaWVzOwotCQlpZiAodG1vIDwgMCkKLQkJCXRtbyA9IDA7Ci0KLQkJci0+aWQuaWRpYWdfc3BvcnQgPSB0dy0+dHdfc3BvcnQ7Ci0JCXItPmlkLmlkaWFnX2Rwb3J0ID0gdHctPnR3X2Rwb3J0OwotCQlyLT5pZC5pZGlhZ19zcmNbMF0gPSB0dy0+dHdfcmN2X3NhZGRyOwotCQlyLT5pZC5pZGlhZ19kc3RbMF0gPSB0dy0+dHdfZGFkZHI7Ci0JCXItPmlkaWFnX3N0YXRlID0gdHctPnR3X3N1YnN0YXRlOwotCQlyLT5pZGlhZ190aW1lciA9IDM7Ci0JCXItPmlkaWFnX2V4cGlyZXMgPSAodG1vICogMTAwMCArIEhaIC0gMSkgLyBIWjsKLQkJci0+aWRpYWdfcnF1ZXVlID0gMDsKLQkJci0+aWRpYWdfd3F1ZXVlID0gMDsKLQkJci0+aWRpYWdfdWlkID0gMDsKLQkJci0+aWRpYWdfaW5vZGUgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKLQkJaWYgKHItPmlkaWFnX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOwotCi0JCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopci0+aWQuaWRpYWdfc3JjLAotCQkJCSAgICAgICAmdHc2LT50d192Nl9yY3Zfc2FkZHIpOwotCQkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXItPmlkLmlkaWFnX2RzdCwKLQkJCQkgICAgICAgJnR3Ni0+dHdfdjZfZGFkZHIpOwotCQl9Ci0jZW5kaWYKLQkJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwotCQlyZXR1cm4gc2tiLT5sZW47Ci0JfQotCiAJci0+aWQuaWRpYWdfc3BvcnQgPSBpbmV0LT5zcG9ydDsKIAlyLT5pZC5pZGlhZ19kcG9ydCA9IGluZXQtPmRwb3J0OwogCXItPmlkLmlkaWFnX3NyY1swXSA9IGluZXQtPnJjdl9zYWRkcjsKQEAgLTE4NSw3ICsxNTcsNzUgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9leGFjdChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3N0YXRpYyBpbnQgaW5ldF90d3NrX2RpYWdfZmlsbChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXh0LCB1MzIgcGlkLAorCQkJICAgICAgIHUzMiBzZXEsIHUxNiBubG1zZ19mbGFncywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKnVubGgpCit7CisJbG9uZyB0bW87CisJc3RydWN0IGluZXRfZGlhZ19tc2cgKnI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHJldmlvdXNfdGFpbCA9IHNrYi0+dGFpbDsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IE5MTVNHX1BVVChza2IsIHBpZCwgc2VxLAorCQkJCQkgdW5saC0+bmxtc2dfdHlwZSwgc2l6ZW9mKCpyKSk7CisKKwlyID0gTkxNU0dfREFUQShubGgpOworCUJVR19PTih0dy0+dHdfc3RhdGUgIT0gVENQX1RJTUVfV0FJVCk7CisKKwlubGgtPm5sbXNnX2ZsYWdzID0gbmxtc2dfZmxhZ3M7CisKKwl0bW8gPSB0dy0+dHdfdHRkIC0gamlmZmllczsKKwlpZiAodG1vIDwgMCkKKwkJdG1vID0gMDsKKworCXItPmlkaWFnX2ZhbWlseQkgICAgICA9IHR3LT50d19mYW1pbHk7CisJci0+aWRpYWdfc3RhdGUJICAgICAgPSB0dy0+dHdfc3RhdGU7CisJci0+aWRpYWdfdGltZXIJICAgICAgPSAwOworCXItPmlkaWFnX3JldHJhbnMgICAgICA9IDA7CisJci0+aWQuaWRpYWdfaWYJICAgICAgPSB0dy0+dHdfYm91bmRfZGV2X2lmOworCXItPmlkLmlkaWFnX2Nvb2tpZVswXSA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpdHc7CisJci0+aWQuaWRpYWdfY29va2llWzFdID0gKHUzMikoKCh1bnNpZ25lZCBsb25nKXR3ID4+IDMxKSA+PiAxKTsKKwlyLT5pZC5pZGlhZ19zcG9ydCAgICAgPSB0dy0+dHdfc3BvcnQ7CisJci0+aWQuaWRpYWdfZHBvcnQgICAgID0gdHctPnR3X2Rwb3J0OworCXItPmlkLmlkaWFnX3NyY1swXSAgICA9IHR3LT50d19yY3Zfc2FkZHI7CisJci0+aWQuaWRpYWdfZHN0WzBdICAgID0gdHctPnR3X2RhZGRyOworCXItPmlkaWFnX3N0YXRlCSAgICAgID0gdHctPnR3X3N1YnN0YXRlOworCXItPmlkaWFnX3RpbWVyCSAgICAgID0gMzsKKwlyLT5pZGlhZ19leHBpcmVzICAgICAgPSAodG1vICogMTAwMCArIEhaIC0gMSkgLyBIWjsKKwlyLT5pZGlhZ19ycXVldWUJICAgICAgPSAwOworCXItPmlkaWFnX3dxdWV1ZQkgICAgICA9IDA7CisJci0+aWRpYWdfdWlkCSAgICAgID0gMDsKKwlyLT5pZGlhZ19pbm9kZQkgICAgICA9IDA7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorCWlmICh0dy0+dHdfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPQorCQkJCQkJaW5ldDZfdHdzaygoc3RydWN0IHNvY2sgKil0dyk7CisKKwkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXItPmlkLmlkaWFnX3NyYywKKwkJCSAgICAgICAmdHc2LT50d192Nl9yY3Zfc2FkZHIpOworCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopci0+aWQuaWRpYWdfZHN0LAorCQkJICAgICAgICZ0dzYtPnR3X3Y2X2RhZGRyKTsKKwl9CisjZW5kaWYKKwlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIHByZXZpb3VzX3RhaWw7CisJcmV0dXJuIHNrYi0+bGVuOworbmxtc2dfZmFpbHVyZToKKwlza2JfdHJpbShza2IsIHByZXZpb3VzX3RhaWwgLSBza2ItPmRhdGEpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJaW50IGV4dCwgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IG5sbXNnX2ZsYWdzLAorCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQoreworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkKKwkJcmV0dXJuIGluZXRfdHdza19kaWFnX2ZpbGwoKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKilzaywKKwkJCQkJICAgc2tiLCBleHQsIHBpZCwgc2VxLCBubG1zZ19mbGFncywKKwkJCQkJICAgdW5saCk7CisJcmV0dXJuIGluZXRfY3NrX2RpYWdfZmlsbChzaywgc2tiLCBleHQsIHBpZCwgc2VxLCBubG1zZ19mbGFncywgdW5saCk7Cit9CisKK3N0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9leGFjdChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKQogewogCWludCBlcnI7CiAJc3RydWN0IHNvY2sgKnNrOwpAQCAtMjM1LDcgKzI3NSw3IEBACiAJaWYgKCFyZXApCiAJCWdvdG8gb3V0OwogCi0JaWYgKGluZXRfZGlhZ19maWxsKHJlcCwgc2ssIHJlcS0+aWRpYWdfZXh0LAorCWlmIChza19kaWFnX2ZpbGwoc2ssIHJlcCwgcmVxLT5pZGlhZ19leHQsCiAJCQkgTkVUTElOS19DQihpbl9za2IpLnBpZCwKIAkJCSBubGgtPm5sbXNnX3NlcSwgMCwgbmxoKSA8PSAwKQogCQlCVUcoKTsKQEAgLTI4Myw3ICszMjMsNyBAQAogCiAKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX3J1bihjb25zdCB2b2lkICpiYywgaW50IGxlbiwKLQkJCSAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpCisJCQkgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpCiB7CiAJd2hpbGUgKGxlbiA+IDApIHsKIAkJaW50IHllcyA9IDE7CkBAIC0zMjIsNyArMzYyLDcgQEAKIAkJCQl5ZXMgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQkJCisKIAkJCWlmIChjb25kLT5wcmVmaXhfbGVuID09IDApCiAJCQkJYnJlYWs7CiAKQEAgLTMzMSw3ICszNzEsOCBAQAogCQkJZWxzZQogCQkJCWFkZHIgPSBlbnRyeS0+ZGFkZHI7CiAKLQkJCWlmIChiaXRzdHJpbmdfbWF0Y2goYWRkciwgY29uZC0+YWRkciwgY29uZC0+cHJlZml4X2xlbikpCisJCQlpZiAoYml0c3RyaW5nX21hdGNoKGFkZHIsIGNvbmQtPmFkZHIsCisJCQkJCSAgICBjb25kLT5wcmVmaXhfbGVuKSkKIAkJCQlicmVhazsKIAkJCWlmIChlbnRyeS0+ZmFtaWx5ID09IEFGX0lORVQ2ICYmCiAJCQkgICAgY29uZC0+ZmFtaWx5ID09IEFGX0lORVQpIHsKQEAgLTM0Niw3ICszODcsNyBAQAogCQl9CiAJCX0KIAotCQlpZiAoeWVzKSB7IAorCQlpZiAoeWVzKSB7CiAJCQlsZW4gLT0gb3AtPnllczsKIAkJCWJjICs9IG9wLT55ZXM7CiAJCX0gZWxzZSB7CkBAIC00MDcsMTQgKzQ0OCwxNSBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJYmMgKz0gb3AtPnllczsKKwkJYmMgICs9IG9wLT55ZXM7CiAJCWxlbiAtPSBvcC0+eWVzOwogCX0KIAlyZXR1cm4gbGVuID09IDAgPyAwIDogLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKLQkJCSAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQorc3RhdGljIGludCBpbmV0X2Nza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSAqciA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CiAKQEAgLTQ0NCwxNCArNDg2LDUwIEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gaW5ldF9kaWFnX2ZpbGwoc2tiLCBzaywgci0+aWRpYWdfZXh0LCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKLQkJCSAgICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLCBjYi0+bmxoKTsKKwlyZXR1cm4gaW5ldF9jc2tfZGlhZ19maWxsKHNrLCBza2IsIHItPmlkaWFnX2V4dCwKKwkJCQkgIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCSAgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwgY2ItPm5saCk7Cit9CisKK3N0YXRpYyBpbnQgaW5ldF90d3NrX2RpYWdfZHVtcChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSAqciA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CisKKwlpZiAoY2ItPm5saC0+bmxtc2dfbGVuID4gNCArIE5MTVNHX1NQQUNFKHNpemVvZigqcikpKSB7CisJCXN0cnVjdCBpbmV0X2RpYWdfZW50cnkgZW50cnk7CisJCXN0cnVjdCBydGF0dHIgKmJjID0gKHN0cnVjdCBydGF0dHIgKikociArIDEpOworCisJCWVudHJ5LmZhbWlseSA9IHR3LT50d19mYW1pbHk7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorCQlpZiAodHctPnR3X2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9CisJCQkJCQlpbmV0Nl90d3NrKChzdHJ1Y3Qgc29jayAqKXR3KTsKKwkJCWVudHJ5LnNhZGRyID0gdHc2LT50d192Nl9yY3Zfc2FkZHIuczZfYWRkcjMyOworCQkJZW50cnkuZGFkZHIgPSB0dzYtPnR3X3Y2X2RhZGRyLnM2X2FkZHIzMjsKKwkJfSBlbHNlCisjZW5kaWYKKwkJeworCQkJZW50cnkuc2FkZHIgPSAmdHctPnR3X3Jjdl9zYWRkcjsKKwkJCWVudHJ5LmRhZGRyID0gJnR3LT50d19kYWRkcjsKKwkJfQorCQllbnRyeS5zcG9ydCA9IHR3LT50d19udW07CisJCWVudHJ5LmRwb3J0ID0gbnRvaHModHctPnR3X2Rwb3J0KTsKKwkJZW50cnkudXNlcmxvY2tzID0gMDsgCisKKwkJaWYgKCFpbmV0X2RpYWdfYmNfcnVuKFJUQV9EQVRBKGJjKSwgUlRBX1BBWUxPQUQoYmMpLCAmZW50cnkpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGluZXRfdHdza19kaWFnX2ZpbGwodHcsIHNrYiwgci0+aWRpYWdfZXh0LAorCQkJCSAgIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCSAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksIGNiLT5ubGgpOwogfQogCiBzdGF0aWMgaW50IGluZXRfZGlhZ19maWxsX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQorCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MzIgcGlkLCB1MzIgc2VxLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICp1bmxoKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwpAQCAtNTA0LDcgKzU4Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfcmVxcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKKwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJc3RydWN0IGluZXRfZGlhZ19lbnRyeSBlbnRyeTsKIAlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSAqciA9IE5MTVNHX0RBVEEoY2ItPm5saCk7CkBAIC01NTYsNyArNjM0LDcgQEAKIAkJCQkJaW5ldDZfcnNrKHJlcSktPmxvY19hZGRyLnM2X2FkZHIzMiA6CiAjZW5kaWYKIAkJCQkJJmlyZXEtPmxvY19hZGRyOwotCQkJCWVudHJ5LmRhZGRyID0gCisJCQkJZW50cnkuZGFkZHIgPQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKIAkJCQkJKGVudHJ5LmZhbWlseSA9PSBBRl9JTkVUNikgPwogCQkJCQlpbmV0Nl9yc2socmVxKS0+cm10X2FkZHIuczZfYWRkcjMyIDoKQEAgLTU5OSw3ICs2NzcsNyBAQAogCWhhbmRsZXIgPSBpbmV0X2RpYWdfdGFibGVbY2ItPm5saC0+bmxtc2dfdHlwZV07CiAJQlVHX09OKGhhbmRsZXIgPT0gTlVMTCk7CiAJaGFzaGluZm8gPSBoYW5kbGVyLT5pZGlhZ19oYXNoaW5mbzsKLQkJCisKIAlzX2kgPSBjYi0+YXJnc1sxXTsKIAlzX251bSA9IG51bSA9IGNiLT5hcmdzWzJdOwogCkBAIC02MzAsNyArNzA4LDcgQEAKIAkJCQkgICAgY2ItPmFyZ3NbM10gPiAwKQogCQkJCQlnb3RvIHN5bl9yZWN2OwogCi0JCQkJaWYgKGluZXRfZGlhZ19kdW1wX3NvY2soc2tiLCBzaywgY2IpIDwgMCkgeworCQkJCWlmIChpbmV0X2Nza19kaWFnX2R1bXAoc2ssIHNrYiwgY2IpIDwgMCkgewogCQkJCQlpbmV0X2xpc3Rlbl91bmxvY2soaGFzaGluZm8pOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQpAQCAtNjcyLDcgKzc1MCw2IEBACiAJCQlzX251bSA9IDA7CiAKIAkJcmVhZF9sb2NrX2JoKCZoZWFkLT5sb2NrKTsKLQogCQludW0gPSAwOwogCQlza19mb3JfZWFjaChzaywgbm9kZSwgJmhlYWQtPmNoYWluKSB7CiAJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CkBAIC02ODQsOSArNzYxLDEwIEBACiAJCQlpZiAoci0+aWQuaWRpYWdfc3BvcnQgIT0gaW5ldC0+c3BvcnQgJiYKIAkJCSAgICByLT5pZC5pZGlhZ19zcG9ydCkKIAkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJaWYgKHItPmlkLmlkaWFnX2Rwb3J0ICE9IGluZXQtPmRwb3J0ICYmIHItPmlkLmlkaWFnX2Rwb3J0KQorCQkJaWYgKHItPmlkLmlkaWFnX2Rwb3J0ICE9IGluZXQtPmRwb3J0ICYmCisJCQkgICAgci0+aWQuaWRpYWdfZHBvcnQpCiAJCQkJZ290byBuZXh0X25vcm1hbDsKLQkJCWlmIChpbmV0X2RpYWdfZHVtcF9zb2NrKHNrYiwgc2ssIGNiKSA8IDApIHsKKwkJCWlmIChpbmV0X2Nza19kaWFnX2R1bXAoc2ssIHNrYiwgY2IpIDwgMCkgewogCQkJCXJlYWRfdW5sb2NrX2JoKCZoZWFkLT5sb2NrKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC02OTUsMTkgKzc3MywyMCBAQAogCQl9CiAKIAkJaWYgKHItPmlkaWFnX3N0YXRlcyAmIFRDUEZfVElNRV9XQUlUKSB7Ci0JCQlza19mb3JfZWFjaChzaywgbm9kZSwKKwkJCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3OworCisJCQlpbmV0X3R3c2tfZm9yX2VhY2godHcsIG5vZGUsCiAJCQkJICAgICZoYXNoaW5mby0+ZWhhc2hbaSArIGhhc2hpbmZvLT5laGFzaF9zaXplXS5jaGFpbikgewotCQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAogCQkJCWlmIChudW0gPCBzX251bSkKIAkJCQkJZ290byBuZXh0X2R5aW5nOwotCQkJCWlmIChyLT5pZC5pZGlhZ19zcG9ydCAhPSBpbmV0LT5zcG9ydCAmJgorCQkJCWlmIChyLT5pZC5pZGlhZ19zcG9ydCAhPSB0dy0+dHdfc3BvcnQgJiYKIAkJCQkgICAgci0+aWQuaWRpYWdfc3BvcnQpCiAJCQkJCWdvdG8gbmV4dF9keWluZzsKLQkJCQlpZiAoci0+aWQuaWRpYWdfZHBvcnQgIT0gaW5ldC0+ZHBvcnQgJiYKKwkJCQlpZiAoci0+aWQuaWRpYWdfZHBvcnQgIT0gdHctPnR3X2Rwb3J0ICYmCiAJCQkJICAgIHItPmlkLmlkaWFnX2Rwb3J0KQogCQkJCQlnb3RvIG5leHRfZHlpbmc7Ci0JCQkJaWYgKGluZXRfZGlhZ19kdW1wX3NvY2soc2tiLCBzaywgY2IpIDwgMCkgeworCQkJCWlmIChpbmV0X3R3c2tfZGlhZ19kdW1wKHR3LCBza2IsIGNiKSA8IDApIHsKIAkJCQkJcmVhZF91bmxvY2tfYmgoJmhlYWQtPmxvY2spOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQpAQCAtNzI0LDggKzgwMyw3IEBACiAJcmV0dXJuIHNrYi0+bGVuOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKLWluZXRfZGlhZ19yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQorc3RhdGljIGlubGluZSBpbnQgaW5ldF9kaWFnX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpCiB7CiAJaWYgKCEobmxoLT5ubG1zZ19mbGFncyZOTE1fRl9SRVFVRVNUKSkKIAkJcmV0dXJuIDA7CkBAIC03NTUsOSArODMzLDggQEAKIAkJfQogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGlkaWFnbmwsIHNrYiwgbmxoLAogCQkJCQkgIGluZXRfZGlhZ19kdW1wLCBOVUxMKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gaW5ldF9kaWFnX2dldF9leGFjdChza2IsIG5saCk7Ci0JfQogCiBlcnJfaW52YWw6CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC03NjYsMTUgKzg0MywxNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9kaWFnX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBubG1zZ2hkciAqIG5saDsKLQogCWlmIChza2ItPmxlbiA+PSBOTE1TR19TUEFDRSgwKSkgewotCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOwotCQlpZiAobmxoLT5ubG1zZ19sZW4gPCBzaXplb2YoKm5saCkgfHwgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKKwkJaW50IGVycjsKKwkJc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOworCisJCWlmIChubGgtPm5sbXNnX2xlbiA8IHNpemVvZigqbmxoKSB8fAorCQkgICAgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKIAkJCXJldHVybjsKIAkJZXJyID0gaW5ldF9kaWFnX3Jjdl9tc2coc2tiLCBubGgpOwotCQlpZiAoZXJyIHx8IG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9BQ0spIAorCQlpZiAoZXJyIHx8IG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9BQ0spCiAJCQluZXRsaW5rX2Fjayhza2IsIG5saCwgZXJyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwppbmRleCBjZTVmZTNmLi4yMTYwODc0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jCisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmMKQEAgLTMwNCw4ICszMDQsNyBAQAogCQkJLyogbG9vayBmb3IgYSBub2RlIHRvIGluc2VydCBpbnN0ZWFkIG9mIHAgKi8KIAkJCXN0cnVjdCBpbmV0X3BlZXIgKnQ7CiAJCQl0ID0gbG9va3VwX3JpZ2h0ZW1wdHkocCk7Ci0JCQlpZiAoKnN0YWNrcHRyWy0xXSAhPSB0KQotCQkJCUJVRygpOworCQkJQlVHX09OKCpzdGFja3B0clstMV0gIT0gdCk7CiAJCQkqKi0tc3RhY2twdHIgPSB0LT5hdmxfbGVmdDsKIAkJCS8qIHQgaXMgcmVtb3ZlZCwgdC0+djRkYWRkciA+IHgtPnY0ZGFkZHIgZm9yIGFueQogCQkJICogeCBpbiBwLT5hdmxfbGVmdCBzdWJ0cmVlLgpAQCAtMzE0LDggKzMxMyw3IEBACiAJCQl0LT5hdmxfbGVmdCA9IHAtPmF2bF9sZWZ0OwogCQkJdC0+YXZsX3JpZ2h0ID0gcC0+YXZsX3JpZ2h0OwogCQkJdC0+YXZsX2hlaWdodCA9IHAtPmF2bF9oZWlnaHQ7Ci0JCQlpZiAoZGVscFsxXSAhPSAmcC0+YXZsX2xlZnQpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oZGVscFsxXSAhPSAmcC0+YXZsX2xlZnQpOwogCQkJZGVscFsxXSA9ICZ0LT5hdmxfbGVmdDsgLyogd2FzICZwLT5hdmxfbGVmdCAqLwogCQl9CiAJCXBlZXJfYXZsX3JlYmFsYW5jZShzdGFjaywgc3RhY2twdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCBkZTE2ZTk0Li4xZTkzZWFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJfQogCiAJaWYgKGlwZ3JlX2ZiX3R1bm5lbF9kZXYtPmZsYWdzJklGRl9VUCkKLQkJcmV0dXJuIGlwZ3JlX2ZiX3R1bm5lbF9kZXYtPnByaXY7CisJCXJldHVybiBuZXRkZXZfcHJpdihpcGdyZV9mYl90dW5uZWxfZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc4LDcgKzI3OCw3IEBACiAJICByZXR1cm4gTlVMTDsKIAogCWRldi0+aW5pdCA9IGlwZ3JlX3R1bm5lbF9pbml0OwotCW50ID0gZGV2LT5wcml2OworCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAludC0+cGFybXMgPSAqcGFybXM7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikgPCAwKSB7CkBAIC0yODYsOSArMjg2LDYgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JbnQgPSBkZXYtPnByaXY7Ci0JbnQtPnBhcm1zID0gKnBhcm1zOwotCiAJZGV2X2hvbGQoZGV2KTsKIAlpcGdyZV90dW5uZWxfbGluayhudCk7CiAJcmV0dXJuIG50OwpAQCAtMjk5LDcgKzI5Niw3IEBACiAKIHN0YXRpYyB2b2lkIGlwZ3JlX3R1bm5lbF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpcGdyZV90dW5uZWxfdW5saW5rKChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXYpOworCWlwZ3JlX3R1bm5lbF91bmxpbmsobmV0ZGV2X3ByaXYoZGV2KSk7CiAJZGV2X3B1dChkZXYpOwogfQogCkBAIC01MTgsNyArNTE1LDcgQEAKIAkJc2tiMi0+ZHN0LT5vcHMtPnVwZGF0ZV9wbXR1KHNrYjItPmRzdCwgcmVsX2luZm8pOwogCQlyZWxfaW5mbyA9IGh0b25sKHJlbF9pbmZvKTsKIAl9IGVsc2UgaWYgKHR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEKSB7Ci0JCXN0cnVjdCBpcF90dW5uZWwgKnQgPSAoc3RydWN0IGlwX3R1bm5lbCopc2tiMi0+ZGV2LT5wcml2OworCQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoc2tiMi0+ZGV2KTsKIAkJaWYgKHQtPnBhcm1zLmlwaC50dGwpIHsKIAkJCXJlbF90eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7CiAJCQlyZWxfY29kZSA9IElDTVBfSE9TVF9VTlJFQUNIOwpAQCAtNjY5LDcgKzY2Niw3IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSAoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2OworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+c3RhdDsKIAlzdHJ1Y3QgaXBoZHIgICpvbGRfaXBoID0gc2tiLT5uaC5pcGg7CiAJc3RydWN0IGlwaGRyICAqdGlwaDsKQEAgLTkxNSw3ICs5MTIsNyBAQAogCQkJdCA9IGlwZ3JlX3R1bm5lbF9sb2NhdGUoJnAsIDApOwogCQl9CiAJCWlmICh0ID09IE5VTEwpCi0JCQl0ID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCQltZW1jcHkoJnAsICZ0LT5wYXJtcywgc2l6ZW9mKHApKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgJnAsIHNpemVvZihwKSkpCiAJCQllcnIgPSAtRUZBVUxUOwpAQCAtOTU1LDcgKzk1Miw3IEBACiAJCQl9IGVsc2UgewogCQkJCXVuc2lnbmVkIG5mbGFncz0wOwogCi0JCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkJCQlpZiAoTVVMVElDQVNUKHAuaXBoLmRhZGRyKSkKIAkJCQkJbmZsYWdzID0gSUZGX0JST0FEQ0FTVDsKQEAgLTEwMDQsNyArMTAwMSw3IEBACiAJCQlpZiAoKHQgPSBpcGdyZV90dW5uZWxfbG9jYXRlKCZwLCAwKSkgPT0gTlVMTCkKIAkJCQlnb3RvIGRvbmU7CiAJCQllcnIgPSAtRVBFUk07Ci0JCQlpZiAodCA9PSBpcGdyZV9mYl90dW5uZWxfZGV2LT5wcml2KQorCQkJaWYgKHQgPT0gbmV0ZGV2X3ByaXYoaXBncmVfZmJfdHVubmVsX2RldikpCiAJCQkJZ290byBkb25lOwogCQkJZGV2ID0gdC0+ZGV2OwogCQl9CkBAIC0xMDIxLDEyICsxMDE4LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBncmVfdHVubmVsX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAmKCgoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2KS0+c3RhdCk7CisJcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7CiB9CiAKIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmIChuZXdfbXR1IDwgNjggfHwgbmV3X210dSA+IDB4RkZGOCAtIHR1bm5lbC0+aGxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5tdHUgPSBuZXdfbXR1OwpAQCAtMTA2Niw3ICsxMDYzLDcgQEAKIHN0YXRpYyBpbnQgaXBncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHR5cGUsCiAJCQl2b2lkICpkYWRkciwgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfcHVzaChza2IsIHQtPmhsZW4pOwogCXUxNiAqcCA9ICh1MTYqKShpcGgrMSk7CiAKQEAgLTEwOTMsNyArMTA5MCw3IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcF90dW5uZWwgKnQgPSAoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2OworCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKE1VTFRJQ0FTVCh0LT5wYXJtcy5pcGguZGFkZHIpKSB7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IHQtPnBhcm1zLmxpbmssCkBAIC0xMTE3LDcgKzExMTQsNyBAQAogCiBzdGF0aWMgaW50IGlwZ3JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJaWYgKE1VTFRJQ0FTVCh0LT5wYXJtcy5pcGguZGFkZHIpICYmIHQtPm1saW5rKSB7CiAJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluZXRkZXZfYnlfaW5kZXgodC0+bWxpbmspOwogCQlpZiAoaW5fZGV2KSB7CkBAIC0xMTU3LDcgKzExNTQsNyBAQAogCWludCBtdHUgPSBFVEhfREFUQV9MRU47CiAJaW50IGFkZGVuZCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgNDsKIAotCXR1bm5lbCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAKIAl0dW5uZWwtPmRldiA9IGRldjsKQEAgLTEyMjEsNyArMTIxOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlwZ3JlX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcGhkciAqaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwogCiAJdHVubmVsLT5kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGMyMTY5YjQuLjMzMjRmYmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiYmQ4NWY1Li5iYzVjYTIzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JbnQgPSBkZXYtPnByaXY7CisJbnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlkZXYtPmluaXQgPSBpcGlwX3R1bm5lbF9pbml0OwogCW50LT5wYXJtcyA9ICpwYXJtczsKQEAgLTI2OSw3ICsyNjksNyBAQAogCQl0dW5uZWxzX3djWzBdID0gTlVMTDsKIAkJd3JpdGVfdW5sb2NrX2JoKCZpcGlwX2xvY2spOwogCX0gZWxzZQotCQlpcGlwX3R1bm5lbF91bmxpbmsoKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdik7CisJCWlwaXBfdHVubmVsX3VubGluayhuZXRkZXZfcHJpdihkZXYpKTsKIAlkZXZfcHV0KGRldik7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQlza2IyLT5kc3QtPm9wcy0+dXBkYXRlX3BtdHUoc2tiMi0+ZHN0LCByZWxfaW5mbyk7CiAJCXJlbF9pbmZvID0gaHRvbmwocmVsX2luZm8pOwogCX0gZWxzZSBpZiAodHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpIHsKLQkJc3RydWN0IGlwX3R1bm5lbCAqdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilza2IyLT5kZXYtPnByaXY7CisJCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihza2IyLT5kZXYpOwogCQlpZiAodC0+cGFybXMuaXBoLnR0bCkgewogCQkJcmVsX3R5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDsKIAkJCXJlbF9jb2RlID0gSUNNUF9IT1NUX1VOUkVBQ0g7CkBAIC01MTQsNyArNTE0LDcgQEAKIAogc3RhdGljIGludCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPnN0YXQ7CiAJc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAl1OCAgICAgdG9zID0gdHVubmVsLT5wYXJtcy5pcGgudG9zOwpAQCAtNjc0LDcgKzY3NCw3IEBACiAJCQl0ID0gaXBpcF90dW5uZWxfbG9jYXRlKCZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQotCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJbWVtY3B5KCZwLCAmdC0+cGFybXMsIHNpemVvZihwKSk7CiAJCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsICZwLCBzaXplb2YocCkpKQogCQkJZXJyID0gLUVGQVVMVDsKQEAgLTcxMSw3ICs3MTEsNyBAQAogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAJCQkJaXBpcF90dW5uZWxfdW5saW5rKHQpOwogCQkJCXQtPnBhcm1zLmlwaC5zYWRkciA9IHAuaXBoLnNhZGRyOwogCQkJCXQtPnBhcm1zLmlwaC5kYWRkciA9IHAuaXBoLmRhZGRyOwpAQCAtNzY1LDcgKzc2NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBpcF90dW5uZWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXYpLT5zdGF0KTsKKwlyZXR1cm4gJigoKHN0cnVjdCBpcF90dW5uZWwqKW5ldGRldl9wcml2KGRldikpLT5zdGF0KTsKIH0KIAogc3RhdGljIGludCBpcGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpAQCAtODAwLDcgKzgwMCw3IEBACiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCi0JdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwl0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwpAQCAtODM4LDcgKzgzOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlwaXBfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBkZXYtPnByaXY7CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDlhNWMwY2UuLmY1OGFjOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTE3OCw4ICsxNzgsOCBAQAogc3RhdGljIGludCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKilkZXYtPnByaXYpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKilkZXYtPnByaXYpLT50eF9wYWNrZXRzKys7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYoZGV2KSktPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KGRldikpLT50eF9wYWNrZXRzKys7CiAJaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCByZWdfdmlmX251bSwgSUdNUE1TR19XSE9MRVBLVCk7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJlZ192aWZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopZGV2LT5wcml2OworCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTExNDksOCArMTE0OSw4IEBACiAJaWYgKHZpZi0+ZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKSB7CiAJCXZpZi0+cGt0X291dCsrOwogCQl2aWYtPmJ5dGVzX291dCs9c2tiLT5sZW47Ci0JCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXZpZi0+ZGV2LT5wcml2KS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXZpZi0+ZGV2LT5wcml2KS0+dHhfcGFja2V0cysrOworCQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdih2aWYtPmRldikpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYodmlmLT5kZXYpKS0+dHhfcGFja2V0cysrOwogCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTIxMCw4ICsxMjEwLDggQEAKIAlpZiAodmlmLT5mbGFncyAmIFZJRkZfVFVOTkVMKSB7CiAJCWlwX2VuY2FwKHNrYiwgdmlmLT5sb2NhbCwgdmlmLT5yZW1vdGUpOwogCQkvKiBGSVhNRTogZXh0cmEgb3V0cHV0IGZpcmV3YWxsIHN0ZXAgdXNlZCB0byBiZSBoZXJlLiAtLVJSICovCi0JCSgoc3RydWN0IGlwX3R1bm5lbCAqKXZpZi0+ZGV2LT5wcml2KS0+c3RhdC50eF9wYWNrZXRzKys7Ci0JCSgoc3RydWN0IGlwX3R1bm5lbCAqKXZpZi0+ZGV2LT5wcml2KS0+c3RhdC50eF9ieXRlcys9c2tiLT5sZW47CisJCSgoc3RydWN0IGlwX3R1bm5lbCAqKW5ldGRldl9wcml2KHZpZi0+ZGV2KSktPnN0YXQudHhfcGFja2V0cysrOworCQkoKHN0cnVjdCBpcF90dW5uZWwgKiluZXRkZXZfcHJpdih2aWYtPmRldikpLT5zdGF0LnR4X2J5dGVzKz1za2ItPmxlbjsKIAl9CiAKIAlJUENCKHNrYiktPmZsYWdzIHw9IElQU0tCX0ZPUldBUkRFRDsKQEAgLTE0NjcsOCArMTQ2Nyw4IEBACiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKIAlza2ItPmRzdCA9IE5VTEw7Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopcmVnX2Rldi0+cHJpdiktPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXJlZ19kZXYtPnByaXYpLT5yeF9wYWNrZXRzKys7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYocmVnX2RldikpLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X3BhY2tldHMrKzsKIAluZl9yZXNldChza2IpOwogCW5ldGlmX3J4KHNrYik7CiAJZGV2X3B1dChyZWdfZGV2KTsKQEAgLTE1MjIsOCArMTUyMiw4IEBACiAJc2tiLT5pcF9zdW1tZWQgPSAwOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlkc3RfcmVsZWFzZShza2ItPmRzdCk7Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopcmVnX2Rldi0+cHJpdiktPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKXJlZ19kZXYtPnByaXYpLT5yeF9wYWNrZXRzKys7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYocmVnX2RldikpLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X3BhY2tldHMrKzsKIAlza2ItPmRzdCA9IE5VTEw7CiAJbmZfcmVzZXQoc2tiKTsKIAluZXRpZl9yeChza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZTdmYTI5ZS4uNzdmMzA0NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC05OTUsNyArOTk1LDcgQEAKIAkJICAgICAgICB8fCAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmNvbm50cmFjay0+c3RhdHVzKQogCQkgICAgICAgICAgICAmJiBjb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9BQ0tfU0VUKSkKIAkJICAgICYmIG50b2hsKHRoLT5hY2tfc2VxKSA9PSBjb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2VuZCkgewotCQkJLyogUlNUIHNlbnQgdG8gaW52YWxpZCBTWU4gb3IgQUNLIHdlIGhhZCBsZXQgdHJvdWdoCisJCQkvKiBSU1Qgc2VudCB0byBpbnZhbGlkIFNZTiBvciBBQ0sgd2UgaGFkIGxldCB0aHJvdWdoCiAJCQkgKiBhdCBhKSBhbmQgYykgYWJvdmU6CiAJCQkgKgogCQkJICogYSkgU1lOIHdhcyBpbiB3aW5kb3cgdGhlbgpAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAkJCSAqIHNlZ21lbnRzIHdlIGlnbm9yZWQuICovCiAJCQlnb3RvIGluX3dpbmRvdzsKIAkJfQotCQkvKiBKdXN0IGZhbGwgdHJvdWdoICovCisJCS8qIEp1c3QgZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJLyogS2VlcCBjb21waWxlcnMgaGFwcHkuICovCiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAwYTQ2MTIzLi5hOTdlZDU0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMzM0Nyw3ICszMzQ3LDcgQEAKIAkJCWludCBvZmZzZXQgPSBzdGFydCAtIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQkJaW50IHNpemUgPSBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgLSBzdGFydDsKIAotCQkJaWYgKG9mZnNldCA8IDApIEJVRygpOworCQkJQlVHX09OKG9mZnNldCA8IDApOwogCQkJaWYgKHNpemUgPiAwKSB7CiAJCQkJc2l6ZSA9IG1pbihjb3B5LCBzaXplKTsKIAkJCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCwgc2tiX3B1dChuc2tiLCBzaXplKSwgc2l6ZSkpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggYjRjNGJlYi4uZWZhM2U3MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMjI2LDYgKzIyNiw4IEBACiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+c2FkZHIsICZmbC0+Zmw2X3NyYyk7CiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+ZGFkZHIsIGZpcnN0X2hvcCk7CiAKKwlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OworCiAJbXR1ID0gZHN0X210dShkc3QpOwogCWlmICgoc2tiLT5sZW4gPD0gbXR1KSB8fCBpcGZyYWdvaykgewogCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKQEAgLTExODIsNiArMTE4NCw4IEBACiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+c2FkZHIsICZmbC0+Zmw2X3NyYyk7CiAJaXB2Nl9hZGRyX2NvcHkoJmhkci0+ZGFkZHIsIGZpbmFsX2RzdCk7CiAKKwlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OworCiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7CiAJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CQogCWVyciA9IE5GX0hPT0soUEZfSU5FVDYsIE5GX0lQNl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kc3QtPmRldiwgZHN0X291dHB1dCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZjA3OTYyMS4uYzNjMmJmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXQgPSBkZXYtPnByaXY7CisJdCA9IG5ldGRldl9wcml2KGRldik7CiAJZGV2LT5pbml0ID0gaXA2aXA2X3RubF9kZXZfaW5pdDsKIAl0LT5wYXJtcyA9ICpwOwogCkBAIC0zMDgsNyArMzA4LDcgQEAKIHN0YXRpYyB2b2lkCiBpcDZpcDZfdG5sX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoZGV2ID09IGlwNmlwNl9mYl90bmxfZGV2KSB7CiAJCXdyaXRlX2xvY2tfYmgoJmlwNmlwNl9sb2NrKTsKQEAgLTYyMyw3ICs2MjMsNyBAQAogc3RhdGljIGludCAKIGlwNmlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcDZfdG5sICp0ID0gKHN0cnVjdCBpcDZfdG5sICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnQtPnN0YXQ7CiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoID0gc2tiLT5uaC5pcHY2aDsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IE5VTEw7CkBAIC05MzMsMTEgKzkzMywxMSBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKChlcnIgPSBpcDZpcDZfdG5sX2xvY2F0ZSgmcCwgJnQsIDApKSA9PSAtRU5PREVWKQotCQkJCXQgPSAoc3RydWN0IGlwNl90bmwgKikgZGV2LT5wcml2OworCQkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCQkJZWxzZSBpZiAoZXJyKQogCQkJCWJyZWFrOwogCQl9IGVsc2UKLQkJCXQgPSAoc3RydWN0IGlwNl90bmwgKikgZGV2LT5wcml2OworCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkJbWVtY3B5KCZwLCAmdC0+cGFybXMsIHNpemVvZiAocCkpOwogCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCAmcCwgc2l6ZW9mIChwKSkpIHsKQEAgLTk1NSw3ICs5NTUsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFjcmVhdGUgJiYgZGV2ICE9IGlwNmlwNl9mYl90bmxfZGV2KSB7Ci0JCQl0ID0gKHN0cnVjdCBpcDZfdG5sICopIGRldi0+cHJpdjsKKwkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCQl9CiAJCWlmICghdCAmJiAoZXJyID0gaXA2aXA2X3RubF9sb2NhdGUoJnAsICZ0LCBjcmVhdGUpKSkgewogCQkJYnJlYWs7CkBAIC05OTEsMTIgKzk5MSwxMiBAQAogCQkJZXJyID0gaXA2aXA2X3RubF9sb2NhdGUoJnAsICZ0LCAwKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQlpZiAodCA9PSBpcDZpcDZfZmJfdG5sX2Rldi0+cHJpdikgeworCQkJaWYgKHQgPT0gbmV0ZGV2X3ByaXYoaXA2aXA2X2ZiX3RubF9kZXYpKSB7CiAJCQkJZXJyID0gLUVQRVJNOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewotCQkJdCA9IChzdHJ1Y3QgaXA2X3RubCAqKSBkZXYtPnByaXY7CisJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJfQogCQllcnIgPSB1bnJlZ2lzdGVyX25ldGRldmljZSh0LT5kZXYpOwogCQlicmVhazsKQEAgLTEwMTYsNyArMTAxNiw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgogaXA2aXA2X3RubF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gJigoKHN0cnVjdCBpcDZfdG5sICopIGRldi0+cHJpdiktPnN0YXQpOworCXJldHVybiAmKCgoc3RydWN0IGlwNl90bmwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7CiB9CiAKIC8qKgpAQCAtMTA3Myw3ICsxMDczLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogaXA2aXA2X3RubF9kZXZfaW5pdF9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IChzdHJ1Y3QgaXA2X3RubCAqKSBkZXYtPnByaXY7CisJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXQtPmZsLnByb3RvID0gSVBQUk9UT19JUFY2OwogCXQtPmRldiA9IGRldjsKIAlzdHJjcHkodC0+cGFybXMubmFtZSwgZGV2LT5uYW1lKTsKQEAgLTEwODcsNyArMTA4Nyw3IEBACiBzdGF0aWMgaW50CiBpcDZpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwNl90bmwgKnQgPSAoc3RydWN0IGlwNl90bmwgKikgZGV2LT5wcml2OworCXN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcDZpcDZfdG5sX2Rldl9pbml0X2dlbihkZXYpOwogCWlwNmlwNl90bmxfbGlua19jb25maWcodCk7CiAJcmV0dXJuIDA7CkBAIC0xMTAzLDcgKzExMDMsNyBAQAogc3RhdGljIGludCAKIGlwNmlwNl9mYl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJaXA2aXA2X3RubF9kZXZfaW5pdF9nZW4oZGV2KTsKIAlkZXZfaG9sZChkZXYpOwogCXRubHNfd2NbMF0gPSB0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCAwMjg3MmFlLi4wZGFlNDhhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCW50ID0gZGV2LT5wcml2OworCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkZXYtPmluaXQgPSBpcGlwNl90dW5uZWxfaW5pdDsKIAludC0+cGFybXMgPSAqcGFybXM7CiAKQEAgLTIxMCw3ICsyMTAsNyBAQAogCQl3cml0ZV91bmxvY2tfYmgoJmlwaXA2X2xvY2spOwogCQlkZXZfcHV0KGRldik7CiAJfSBlbHNlIHsKLQkJaXBpcDZfdHVubmVsX3VubGluaygoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2KTsKKwkJaXBpcDZfdHVubmVsX3VubGluayhuZXRkZXZfcHJpdihkZXYpKTsKIAkJZGV2X3B1dChkZXYpOwogCX0KIH0KQEAgLTM0Niw3ICszNDYsNyBAQAogCQlydDZpID0gcnQ2X2xvb2t1cCgmaXBoNi0+ZGFkZHIsICZpcGg2LT5zYWRkciwgTlVMTCwgMCk7CiAKIAkJaWYgKHJ0NmkgJiYgcnQ2aS0+cnQ2aV9kZXYgJiYgcnQ2aS0+cnQ2aV9kZXYtPnR5cGUgPT0gQVJQSFJEX1NJVCkgewotCQkJc3RydWN0IGlwX3R1bm5lbCAqIHQgPSAoc3RydWN0IGlwX3R1bm5lbCopcnQ2aS0+cnQ2aV9kZXYtPnByaXY7CisJCQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYocnQ2aS0+cnQ2aV9kZXYpOwogCQkJaWYgKHJlbF90eXBlID09IElDTVBWNl9USU1FX0VYQ0VFRCAmJiB0LT5wYXJtcy5pcGgudHRsKSB7CiAJCQkJcmVsX3R5cGUgPSBJQ01QVjZfREVTVF9VTlJFQUNIOwogCQkJCXJlbF9jb2RlID0gSUNNUFY2X0FERFJfVU5SRUFDSDsKQEAgLTQyNCw3ICs0MjQsNyBAQAogCiBzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gKHN0cnVjdCBpcF90dW5uZWwqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPnN0YXQ7CiAJc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoNiA9IHNrYi0+bmguaXB2Nmg7CkBAIC02MTAsNyArNjEwLDcgQEAKIAkJCXQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKCZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQotCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJbWVtY3B5KCZwLCAmdC0+cGFybXMsIHNpemVvZihwKSk7CiAJCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsICZwLCBzaXplb2YocCkpKQogCQkJZXJyID0gLUVGQVVMVDsKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJdCA9IChzdHJ1Y3QgaXBfdHVubmVsKilkZXYtPnByaXY7CisJCQkJdCA9IG5ldGRldl9wcml2KGRldik7CiAJCQkJaXBpcDZfdHVubmVsX3VubGluayh0KTsKIAkJCQl0LT5wYXJtcy5pcGguc2FkZHIgPSBwLmlwaC5zYWRkcjsKIAkJCQl0LT5wYXJtcy5pcGguZGFkZHIgPSBwLmlwaC5kYWRkcjsKQEAgLTY4Myw3ICs2ODMsNyBAQAogCQkJaWYgKCh0ID0gaXBpcDZfdHVubmVsX2xvY2F0ZSgmcCwgMCkpID09IE5VTEwpCiAJCQkJZ290byBkb25lOwogCQkJZXJyID0gLUVQRVJNOwotCQkJaWYgKHQgPT0gaXBpcDZfZmJfdHVubmVsX2Rldi0+cHJpdikKKwkJCWlmICh0ID09IG5ldGRldl9wcml2KGlwaXA2X2ZiX3R1bm5lbF9kZXYpKQogCQkJCWdvdG8gZG9uZTsKIAkJCWRldiA9IHQtPmRldjsKIAkJfQpAQCAtNzAwLDcgKzcwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBpcDZfdHVubmVsX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAmKCgoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2KS0+c3RhdCk7CisJcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7CiB9CiAKIHN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCkBAIC03MzUsNyArNzM1LDcgQEAKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7CiAJc3RydWN0IGlwaGRyICppcGg7CiAKLQl0dW5uZWwgPSAoc3RydWN0IGlwX3R1bm5lbCopZGV2LT5wcml2OworCXR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwogCiAJdHVubmVsLT5kZXYgPSBkZXY7CkBAIC03NzUsNyArNzc1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBpcDZfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBkZXYtPnByaXY7CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCXR1bm5lbC0+ZGV2ID0gZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggNTJlZmQwNC4uNGMyZjZkNiAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0yOTcsOCArMjk3LDcgQEAKIAkJZXJyID0gRUlOVFI7CiAJaWYgKGVyciA+PSA1MTIpCiAJCWVyciA9IEVJTlZBTDsKLQlpZiAoZXJyIDw9IDAgfHwgZXJyID49IDI1NikKLQkJQlVHKCk7CisJQlVHX09OKGVyciA8PSAwIHx8IGVyciA+PSAyNTYpOwogCiAJaGRyID0gKHN0cnVjdCBzYWRiX21zZyAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykpOwogCXBma2V5X2hkcl9kdXAoaGRyLCBvcmlnKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggNjE2NzEzNy4uOWExMzQ4YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTk4OCw3ICs5ODgsNyBAQAogCQkgICAgICAgIHx8ICghdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmY29ubnRyYWNrLT5zdGF0dXMpCiAJCSAgICAgICAgICAgICYmIGNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX0FDS19TRVQpKQogCQkgICAgJiYgbnRvaGwodGgtPmFja19zZXEpID09IGNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfZW5kKSB7Ci0JCQkvKiBSU1Qgc2VudCB0byBpbnZhbGlkIFNZTiBvciBBQ0sgd2UgaGFkIGxldCB0cm91Z2gKKwkJCS8qIFJTVCBzZW50IHRvIGludmFsaWQgU1lOIG9yIEFDSyB3ZSBoYWQgbGV0IHRocm91Z2gKIAkJCSAqIGF0IGEpIGFuZCBjKSBhYm92ZToKIAkJCSAqCiAJCQkgKiBhKSBTWU4gd2FzIGluIHdpbmRvdyB0aGVuCkBAIC05OTksNyArOTk5LDcgQEAKIAkJCSAqIHNlZ21lbnRzIHdlIGlnbm9yZWQuICovCiAJCQlnb3RvIGluX3dpbmRvdzsKIAkJfQotCQkvKiBKdXN0IGZhbGwgdHJvdWdoICovCisJCS8qIEp1c3QgZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJLyogS2VlcCBjb21waWxlcnMgaGFwcHkuICovCiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL01ha2VmaWxlIGIvbmV0L3NjaGVkL01ha2VmaWxlCmluZGV4IGU0OGQwZDQuLjBmMDZhZWMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9NYWtlZmlsZQorKysgYi9uZXQvc2NoZWQvTWFrZWZpbGUKQEAgLTcsMTMgKzcsMTMgQEAKIG9iai0kKENPTkZJR19ORVRfU0NIRUQpCQkrPSBzY2hfYXBpLm8gc2NoX2ZpZm8ubyBzY2hfYmxhY2tob2xlLm8KIG9iai0kKENPTkZJR19ORVRfQ0xTKQkJKz0gY2xzX2FwaS5vCiBvYmotJChDT05GSUdfTkVUX0NMU19BQ1QpCSs9IGFjdF9hcGkubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfUE9MSUNFKQkrPSBwb2xpY2Uubwotb2JqLSQoQ09ORklHX05FVF9DTFNfUE9MSUNFKQkrPSBwb2xpY2Uubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FDVCkJKz0gZ2FjdC5vCi1vYmotJChDT05GSUdfTkVUX0FDVF9NSVJSRUQpCSs9IG1pcnJlZC5vCi1vYmotJChDT05GSUdfTkVUX0FDVF9JUFQpCSs9IGlwdC5vCi1vYmotJChDT05GSUdfTkVUX0FDVF9QRURJVCkJKz0gcGVkaXQubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfU0lNUCkJKz0gc2ltcGxlLm8KK29iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSkJKz0gYWN0X3BvbGljZS5vCitvYmotJChDT05GSUdfTkVUX0NMU19QT0xJQ0UpCSs9IGFjdF9wb2xpY2Uubworb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FDVCkJKz0gYWN0X2dhY3Qubworb2JqLSQoQ09ORklHX05FVF9BQ1RfTUlSUkVEKQkrPSBhY3RfbWlycmVkLm8KK29iai0kKENPTkZJR19ORVRfQUNUX0lQVCkJKz0gYWN0X2lwdC5vCitvYmotJChDT05GSUdfTkVUX0FDVF9QRURJVCkJKz0gYWN0X3BlZGl0Lm8KK29iai0kKENPTkZJR19ORVRfQUNUX1NJTVApCSs9IGFjdF9zaW1wbGUubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfQ0JRKQkrPSBzY2hfY2JxLm8KIG9iai0kKENPTkZJR19ORVRfU0NIX0hUQikJKz0gc2NoX2h0Yi5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9IUEZRKQkrPSBzY2hfaHBmcS5vCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCAyY2UxY2IyLi43OTJjZTU5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCisrKyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXdoaWxlICgoYSA9IGFjdCkgIT0gTlVMTCkgewogcmVwZWF0OgogCQlpZiAoYS0+b3BzICYmIGEtPm9wcy0+YWN0KSB7Ci0JCQlyZXQgPSBhLT5vcHMtPmFjdCgmc2tiLCBhLCByZXMpOworCQkJcmV0ID0gYS0+b3BzLT5hY3Qoc2tiLCBhLCByZXMpOwogCQkJaWYgKFRDX01VTkdFRCAmIHNrYi0+dGNfdmVyZCkgewogCQkJCS8qIGNvcGllZCBhbHJlYWR5LCBhbGxvdyB0cmFtcGxpbmcgKi8KIAkJCQlza2ItPnRjX3ZlcmQgPSBTRVRfVENfT0syTVVOR0Uoc2tiLT50Y192ZXJkKTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCWlmIChhX28gPT0gTlVMTCkgewogI2lmZGVmIENPTkZJR19LTU9ECiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXJlcXVlc3RfbW9kdWxlKGFjdF9uYW1lKTsKKwkJcmVxdWVzdF9tb2R1bGUoImFjdF8lcyIsIGFjdF9uYW1lKTsKIAkJcnRubF9sb2NrKCk7CiAKIAkJYV9vID0gdGNfbG9va3VwX2FjdGlvbl9uKGFjdF9uYW1lKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBuZXQvc2NoZWQvZ2FjdC5jCnJlbmFtZSB0byBuZXQvc2NoZWQvYWN0X2dhY3QuYwppbmRleCBkMWM2ZDU0Li5hMWU2OGY3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZ2FjdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfZ2FjdC5jCkBAIC0xMzUsMTAgKzEzNSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLXRjZl9nYWN0KHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKK3RjZl9nYWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCiB7CiAJc3RydWN0IHRjZl9nYWN0ICpwID0gUFJJVihhLCBnYWN0KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAJaW50IGFjdGlvbiA9IFRDX0FDVF9TSE9UOwogCiAJc3Bpbl9sb2NrKCZwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9pcHQuYyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gbmV0L3NjaGVkL2lwdC5jCnJlbmFtZSB0byBuZXQvc2NoZWQvYWN0X2lwdC5jCmluZGV4IGY1MDEzNmUuLmI1MDAxOTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9pcHQuYworKysgYi9uZXQvc2NoZWQvYWN0X2lwdC5jCkBAIC0yMDEsMTEgKzIwMSwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci10Y2ZfaXB0KHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKK3RjZl9pcHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlpbnQgcmV0ID0gMCwgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgdGNmX2lwdCAqcCA9IFBSSVYoYSwgaXB0KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAKIAlpZiAoc2tiX2Nsb25lZChza2IpKSB7CiAJCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpCkBAIC0yMjIsNiArMjIxLDkgQEAKIAkgd29ycnkgbGF0ZXIgLSBkYW5nZXIgLSB0aGlzIEFQSSBzZWVtcyB0byBoYXZlIGNoYW5nZWQKIAkgZnJvbSBlYXJsaWVyIGtlcm5lbHMgKi8KIAorCS8qIGlwdGFibGVzIHRhcmdldHMgdGFrZSBhIGRvdWJsZSBza2IgcG9pbnRlciBpbiBjYXNlIHRoZSBza2IKKwkgKiBuZWVkcyB0byBiZSByZXBsYWNlZC4gV2UgZG9uJ3Qgb3duIHRoZSBza2IsIHNvIHRoaXMgbXVzdCBub3QKKwkgKiBoYXBwZW4uIFRoZSBwc2tiX2V4cGFuZF9oZWFkIGFib3ZlIHNob3VsZCBtYWtlIHN1cmUgb2YgdGhpcyAqLwogCXJldCA9IHAtPnQtPnUua2VybmVsLnRhcmdldC0+dGFyZ2V0KCZza2IsIHNrYi0+ZGV2LCBOVUxMLAogCQkJCQkgICAgcC0+aG9vaywgcC0+dC0+ZGF0YSwgTlVMTCk7CiAJc3dpdGNoIChyZXQpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9taXJyZWQuYyBiL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gbmV0L3NjaGVkL21pcnJlZC5jCnJlbmFtZSB0byBuZXQvc2NoZWQvYWN0X21pcnJlZC5jCmluZGV4IDIwZDA2OTEuLjRmY2NjYmQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9taXJyZWQuYworKysgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCkBAIC0xNTgsMTIgKzE1OCwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci10Y2ZfbWlycmVkKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKK3RjZl9taXJyZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlzdHJ1Y3QgdGNmX21pcnJlZCAqcCA9IFBSSVYoYSwgbWlycmVkKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAJdTMyIGF0ID0gR19UQ19BVChza2ItPnRjX3ZlcmQpOwogCiAJc3Bpbl9sb2NrKCZwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIG5ldC9zY2hlZC9wZWRpdC5jCnJlbmFtZSB0byBuZXQvc2NoZWQvYWN0X3BlZGl0LmMKaW5kZXggNzY3ZDI0Zi4uMTc0MmE2OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3BlZGl0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC0xMzAsMTAgKzEzMCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLXRjZl9wZWRpdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCit0Y2ZfcGVkaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlzdHJ1Y3QgdGNmX3BlZGl0ICpwID0gUFJJVihhLCBwZWRpdCk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCWludCBpLCBtdW5nZWQgPSAwOwogCXU4ICpwcHRyOwogCkBAIC0yNDYsMTAgKzI0NSwxMiBAQAogCXQubGFzdHVzZSA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gcC0+dG0ubGFzdHVzZSk7CiAJdC5leHBpcmVzID0gamlmZmllc190b19jbG9ja190KHAtPnRtLmV4cGlyZXMpOwogCVJUQV9QVVQoc2tiLCBUQ0FfUEVESVRfVE0sIHNpemVvZih0KSwgJnQpOworCWtmcmVlKG9wdCk7CiAJcmV0dXJuIHNrYi0+bGVuOwogCiBydGF0dHJfZmFpbHVyZToKIAlza2JfdHJpbShza2IsIGIgLSBza2ItPmRhdGEpOworCWtmcmVlKG9wdCk7CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvcG9saWNlLmMgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIG5ldC9zY2hlZC9wb2xpY2UuYwpyZW5hbWUgdG8gbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwppbmRleCBlYjM5ZmIyLi5mYTg3N2Y4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvcG9saWNlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpAQCAtMjg0LDExICsyODQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0Y2ZfYWN0X3BvbGljZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsCitzdGF0aWMgaW50IHRjZl9hY3RfcG9saWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCiB7CiAJcHNjaGVkX3RpbWVfdCBub3c7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXN0cnVjdCB0Y2ZfcG9saWNlICpwID0gUFJJVihhKTsKIAlsb25nIHRva3M7CiAJbG9uZyBwdG9rcyA9IDA7CkBAIC00MDgsNyArNDA3LDcgQEAKIG1vZHVsZV9pbml0KHBvbGljZV9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChwb2xpY2VfY2xlYW51cF9tb2R1bGUpOwogCi0jZW5kaWYKKyNlbHNlIC8qIENPTkZJR19ORVRfQ0xTX0FDVCAqLwogCiBzdHJ1Y3QgdGNmX3BvbGljZSAqIHRjZl9wb2xpY2VfbG9jYXRlKHN0cnVjdCBydGF0dHIgKnJ0YSwgc3RydWN0IHJ0YXR0ciAqZXN0KQogewpAQCAtNTQ1LDYgKzU0NCw3IEBACiAJc3Bpbl91bmxvY2soJnAtPmxvY2spOwogCXJldHVybiBwLT5hY3Rpb247CiB9CitFWFBPUlRfU1lNQk9MKHRjZl9wb2xpY2UpOwogCiBpbnQgdGNmX3BvbGljZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcG9saWNlICpwKQogewpAQCAtNjAxLDEzICs2MDEsNCBAQAogCXJldHVybiAtMTsKIH0KIAotCi1FWFBPUlRfU1lNQk9MKHRjZl9wb2xpY2UpOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX2Rlc3Ryb3kpOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX2R1bXApOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX2R1bXBfc3RhdHMpOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX2hhc2gpOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX2h0KTsKLUVYUE9SVF9TWU1CT0wodGNmX3BvbGljZV9sb2NhdGUpOwotRVhQT1JUX1NZTUJPTCh0Y2ZfcG9saWNlX2xvb2t1cCk7Ci1FWFBPUlRfU1lNQk9MKHRjZl9wb2xpY2VfbmV3X2luZGV4KTsKKyNlbmRpZiAvKiBDT05GSUdfTkVUX0NMU19BQ1QgKi8KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zaW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gbmV0L3NjaGVkL3NpbXBsZS5jCnJlbmFtZSB0byBuZXQvc2NoZWQvYWN0X3NpbXBsZS5jCmluZGV4IDhhNmFlNGYuLmU1ZjJlMWYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zaW1wbGUuYworKysgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCkBAIC00NCw5ICs0NCw4IEBACiAjaW5jbHVkZSA8bmV0L3BrdF9hY3QuaD4KICNpbmNsdWRlIDxuZXQvYWN0X2dlbmVyaWMuaD4KIAotc3RhdGljIGludCB0Y2Zfc2ltcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCitzdGF0aWMgaW50IHRjZl9zaW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXN0cnVjdCB0Y2ZfZGVmYWN0ICpwID0gUFJJVihhLCBkZWZhY3QpOwogCiAJc3Bpbl9sb2NrKCZwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfY2JxLmMgYi9uZXQvc2NoZWQvc2NoX2NicS5jCmluZGV4IDA5NDUzZjkuLjZjZDgxNzAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfY2JxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJICAgIChjbCA9IGNicV9jbGFzc19sb29rdXAocSwgcHJpbykpICE9IE5VTEwpCiAJCXJldHVybiBjbDsKIAotCSpxZXJyID0gTkVUX1hNSVRfRFJPUDsKKwkqcWVyciA9IE5FVF9YTUlUX0JZUEFTUzsKIAlmb3IgKDs7KSB7CiAJCWludCByZXN1bHQgPSAwOwogCQlkZWZtYXAgPSBoZWFkLT5kZWZhdWx0czsKQEAgLTQxMyw3ICs0MTMsNyBAQAogCXEtPnJ4X2NsYXNzID0gY2w7CiAjZW5kaWYKIAlpZiAoY2wgPT0gTlVMTCkgewotCQlpZiAocmV0ID09IE5FVF9YTUlUX0RST1ApCisJCWlmIChyZXQgPT0gTkVUX1hNSVRfQllQQVNTKQogCQkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IGMyNjc2NGIuLjkxMTMyZjYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIGRvIHsJCQkJCQkJCQlcCiAJc3RydWN0IHRpbWV2YWwgdHY7CQkJCQkJXAogCWRvX2dldHRpbWVvZmRheSgmdHYpOwkJCQkJCVwKLQkoc3RhbXApID0gMTAwMDAwMFVMTCAqIHR2LnR2X3NlYyArIHR2LnR2X3VzZWM7CQkJXAorCShzdGFtcCkgPSAxVUxMICogVVNFQ19QRVJfU0VDICogdHYudHZfc2VjICsgdHYudHZfdXNlYzsJCVwKIH0gd2hpbGUgKDApCiAjZW5kaWYKIApAQCAtNTAyLDggKzUwMiw4IEBACiAJdTY0IGR4OwogCiAJZHggPSAoKHU2NClkICogUFNDSEVEX0pJRkZJRTJVUyhIWikpOwotCWR4ICs9IDEwMDAwMDAgLSAxOwotCWRvX2RpdihkeCwgMTAwMDAwMCk7CisJZHggKz0gVVNFQ19QRVJfU0VDIC0gMTsKKwlkb19kaXYoZHgsIFVTRUNfUEVSX1NFQyk7CiAJcmV0dXJuIGR4OwogfQogCkBAIC01MjMsNyArNTIzLDcgQEAKIHsKIAl1NjQgZDsKIAotCWQgPSBkeCAqIDEwMDAwMDA7CisJZCA9IGR4ICogVVNFQ19QRVJfU0VDOwogCWRvX2RpdihkLCBQU0NIRURfSklGRklFMlVTKEhaKSk7CiAJcmV0dXJuICh1MzIpZDsKIH0KQEAgLTEyMjcsNyArMTIyNyw3IEBACiAJCWlmIChjbC0+bGV2ZWwgPT0gMCkKIAkJCXJldHVybiBjbDsKIAotCSpxZXJyID0gTkVUX1hNSVRfRFJPUDsKKwkqcWVyciA9IE5FVF9YTUlUX0JZUEFTUzsKIAl0Y2YgPSBxLT5yb290LmZpbHRlcl9saXN0OwogCXdoaWxlICh0Y2YgJiYgKHJlc3VsdCA9IHRjX2NsYXNzaWZ5KHNrYiwgdGNmLCAmcmVzKSkgPj0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtMTY0Myw3ICsxNjQzLDcgQEAKIAogCWNsID0gaGZzY19jbGFzc2lmeShza2IsIHNjaCwgJmVycik7CiAJaWYgKGNsID09IE5VTEwpIHsKLQkJaWYgKGVyciA9PSBORVRfWE1JVF9EUk9QKQorCQlpZiAoZXJyID09IE5FVF9YTUlUX0JZUEFTUykKIAkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggNTU4Y2MwOC4uM2VjOTVkZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIAlpZiAoKGNsID0gaHRiX2ZpbmQoc2tiLT5wcmlvcml0eSxzY2gpKSAhPSBOVUxMICYmIGNsLT5sZXZlbCA9PSAwKSAKIAkJcmV0dXJuIGNsOwogCi0JKnFlcnIgPSBORVRfWE1JVF9EUk9QOworCSpxZXJyID0gTkVUX1hNSVRfQllQQVNTOwogCXRjZiA9IHEtPmZpbHRlcl9saXN0OwogCXdoaWxlICh0Y2YgJiYgKHJlc3VsdCA9IHRjX2NsYXNzaWZ5KHNrYiwgdGNmLCAmcmVzKSkgPj0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtNzI0LDcgKzcyNCw3IEBACiAJfQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogICAgIH0gZWxzZSBpZiAoIWNsKSB7Ci0JaWYgKHJldCA9PSBORVRfWE1JVF9EUk9QKQorCWlmIChyZXQgPT0gTkVUX1hNSVRfQllQQVNTKQogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCWtmcmVlX3NrYiAoc2tiKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwppbmRleCAzYWMwZjQ5Li41YjNhM2U0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3ByaW8uYworKysgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwpAQCAtNTQsNyArNTQsNyBAQAogCXUzMiBiYW5kID0gc2tiLT5wcmlvcml0eTsKIAlzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7CiAKLQkqcWVyciA9IE5FVF9YTUlUX0RST1A7CisJKnFlcnIgPSBORVRfWE1JVF9CWVBBU1M7CiAJaWYgKFRDX0hfTUFKKHNrYi0+cHJpb3JpdHkpICE9IHNjaC0+aGFuZGxlKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAodGNfY2xhc3NpZnkoc2tiLCBxLT5maWx0ZXJfbGlzdCwgJnJlcykpIHsKQEAgLTkxLDcgKzkxLDggQEAKIAlxZGlzYyA9IHByaW9fY2xhc3NpZnkoc2tiLCBzY2gsICZyZXQpOwogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCWlmIChxZGlzYyA9PSBOVUxMKSB7Ci0JCWlmIChyZXQgPT0gTkVUX1hNSVRfRFJPUCkKKworCQlpZiAocmV0ID09IE5FVF9YTUlUX0JZUEFTUykKIAkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTE4LDcgKzExOSw3IEBACiAJcWRpc2MgPSBwcmlvX2NsYXNzaWZ5KHNrYiwgc2NoLCAmcmV0KTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlpZiAocWRpc2MgPT0gTlVMTCkgewotCQlpZiAocmV0ID09IE5FVF9YTUlUX0RST1ApCisJCWlmIChyZXQgPT0gTkVUX1hNSVRfQllQQVNTKQogCQkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IGM0YTJhOGMuLjc5YjhlZjMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAogc3RhdGljIGludCB0ZXFsX21hc3Rlcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRlcWxfbWFzdGVyICptYXN0ZXIgPSAodm9pZCopZGV2LT5wcml2OworCXN0cnVjdCB0ZXFsX21hc3RlciAqbWFzdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgUWRpc2MgKnN0YXJ0LCAqcTsKIAlpbnQgYnVzeTsKIAlpbnQgbm9yZXM7CkBAIC0zNTAsNyArMzUwLDcgQEAKIHN0YXRpYyBpbnQgdGVxbF9tYXN0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBRZGlzYyAqIHE7Ci0Jc3RydWN0IHRlcWxfbWFzdGVyICptID0gKHZvaWQqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm0gPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBtdHUgPSAweEZGRkU7CiAJdW5zaWduZWQgZmxhZ3MgPSBJRkZfTk9BUlB8SUZGX01VTFRJQ0FTVDsKIApAQCAtMzk3LDEzICszOTcsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp0ZXFsX21hc3Rlcl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0ZXFsX21hc3RlciAqbSA9ICh2b2lkKilkZXYtPnByaXY7CisJc3RydWN0IHRlcWxfbWFzdGVyICptID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlyZXR1cm4gJm0tPnN0YXRzOwogfQogCiBzdGF0aWMgaW50IHRlcWxfbWFzdGVyX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm0gPSAodm9pZCopZGV2LT5wcml2OworCXN0cnVjdCB0ZXFsX21hc3RlciAqbSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFFkaXNjICpxOwogCiAJaWYgKG5ld19tdHUgPCA2OCkKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiBzdGF0aWMgX19pbml0IHZvaWQgdGVxbF9tYXN0ZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm1hc3RlciA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm1hc3RlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFFkaXNjX29wcyAqb3BzID0gJm1hc3Rlci0+cW9wczsKIAogCW1hc3Rlci0+ZGV2CT0gZGV2OwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCW1hc3RlciA9IGRldi0+cHJpdjsKKwkJbWFzdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCQlzdHJsY3B5KG1hc3Rlci0+cW9wcy5pZCwgZGV2LT5uYW1lLCBJRk5BTVNJWik7CiAJCWVyciA9IHJlZ2lzdGVyX3FkaXNjKCZtYXN0ZXItPnFvcHMpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDJkN2Q4YTUuLmI4YjM4YWIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTEyNTAsOCArMTI1MCw3IEBACiAJCWNhc2UgU0NUUF9DTURfVElNRVJfU1RBUlQ6CiAJCQl0aW1lciA9ICZhc29jLT50aW1lcnNbY21kLT5vYmoudG9dOwogCQkJdGltZW91dCA9IGFzb2MtPnRpbWVvdXRzW2NtZC0+b2JqLnRvXTsKLQkJCWlmICghdGltZW91dCkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighdGltZW91dCk7CiAKIAkJCXRpbWVyLT5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CiAJCQlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMKaW5kZXggZjUwOWU5OS4uZGNhYTBjNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jYWNoZS5jCisrKyBiL25ldC9zdW5ycGMvY2FjaGUuYwpAQCAtNTc1LDEyICs1NzUsMTEgQEAKIAlpZiAocnAtPnEubGlzdC5uZXh0ID09ICZjZC0+cXVldWUpIHsKIAkJc3Bpbl91bmxvY2soJnF1ZXVlX2xvY2spOwogCQl1cCgmcXVldWVfaW9fc2VtKTsKLQkJaWYgKHJwLT5vZmZzZXQpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHJwLT5vZmZzZXQpOwogCQlyZXR1cm4gMDsKIAl9CiAJcnEgPSBjb250YWluZXJfb2YocnAtPnEubGlzdC5uZXh0LCBzdHJ1Y3QgY2FjaGVfcmVxdWVzdCwgcS5saXN0KTsKLQlpZiAocnEtPnEucmVhZGVyKSBCVUcoKTsKKwlCVUdfT04ocnEtPnEucmVhZGVyKTsKIAlpZiAocnAtPm9mZnNldCA9PSAwKQogCQlycS0+cmVhZGVycysrOwogCXNwaW5fdW5sb2NrKCZxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwppbmRleCBlMTRjMWNhZS4uOTc2NGM4MCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtNjksMTMgKzY5LDEzIEBACiAJc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IChzdHJ1Y3QgcnBjX2lub2RlICopZGF0YTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnJwY2ktPnZmc19pbm9kZTsKIAotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChycGNpLT5vcHMgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAJaWYgKHJwY2ktPm5yZWFkZXJzID09IDAgJiYgIWxpc3RfZW1wdHkoJnJwY2ktPnBpcGUpKQogCQlfX3JwY19wdXJnZV91cGNhbGwoaW5vZGUsIC1FVElNRURPVVQpOwogb3V0OgotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogfQogCiBpbnQKQEAgLTg0LDcgKzg0LDcgQEAKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gUlBDX0koaW5vZGUpOwogCWludCByZXMgPSAtRVBJUEU7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAocnBjaS0+b3BzID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCWlmIChycGNpLT5ucmVhZGVycykgewpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCXJlcyA9IDA7CiAJfQogb3V0OgotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXdha2VfdXAoJnJwY2ktPndhaXRxKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTE2LDcgKzExNiw3IEBACiB7CiAJc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IFJQQ19JKGlub2RlKTsKIAotCWRvd24oJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChycGNpLT5vcHMgIT0gTlVMTCkgewogCQlycGNpLT5ucmVhZGVycyA9IDA7CiAJCV9fcnBjX3B1cmdlX2xpc3QocnBjaSwgJnJwY2ktPmluX3VwY2FsbCwgLUVQSVBFKTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlycGNpLT5vcHMgPSBOVUxMOwogCX0KIAlycGNfaW5vZGVfc2V0b3duZXIoaW5vZGUsIE5VTEwpOwotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJwY2ktPnF1ZXVlX3RpbWVvdXQpOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiB9CkBAIC0xNTQsNyArMTU0LDcgQEAKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gUlBDX0koaW5vZGUpOwogCWludCByZXMgPSAtRU5YSU87CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAocnBjaS0+b3BzICE9IE5VTEwpIHsKIAkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCiAJCQlycGNpLT5ucmVhZGVycyArKzsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJcnBjaS0+bndyaXRlcnMgKys7CiAJCXJlcyA9IDA7CiAJfQotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXN0cnVjdCBycGNfaW5vZGUgKnJwY2kgPSBSUENfSShpbm9kZSk7CiAJc3RydWN0IHJwY19waXBlX21zZyAqbXNnOwogCi0JZG93bigmaW5vZGUtPmlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKHJwY2ktPm9wcyA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAltc2cgPSAoc3RydWN0IHJwY19waXBlX21zZyAqKWZpbHAtPnByaXZhdGVfZGF0YTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCWlmIChycGNpLT5vcHMtPnJlbGVhc2VfcGlwZSkKIAkJcnBjaS0+b3BzLT5yZWxlYXNlX3BpcGUoaW5vZGUpOwogb3V0OgotCXVwKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlzdHJ1Y3QgcnBjX3BpcGVfbXNnICptc2c7CiAJaW50IHJlcyA9IDA7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAocnBjaS0+b3BzID09IE5VTEwpIHsKIAkJcmVzID0gLUVQSVBFOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0yMjksNyArMjI5LDcgQEAKIAkJcnBjaS0+b3BzLT5kZXN0cm95X21zZyhtc2cpOwogCX0KIG91dF91bmxvY2s6Ci0JdXAoJmlub2RlLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMjQwLDExICsyNDAsMTEgQEAKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gUlBDX0koaW5vZGUpOwogCWludCByZXM7CiAKLQlkb3duKCZpbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXMgPSAtRVBJUEU7CiAJaWYgKHJwY2ktPm9wcyAhPSBOVUxMKQogCQlyZXMgPSBycGNpLT5vcHMtPmRvd25jYWxsKGZpbHAsIGJ1ZiwgbGVuKTsKLQl1cCgmaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogCWlmICghcmV0KSB7CiAJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJZG93bigmaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQljbG50ID0gUlBDX0koaW5vZGUpLT5wcml2YXRlOwogCQlpZiAoY2xudCkgewogCQkJYXRvbWljX2luYygmY2xudC0+Y2xfdXNlcnMpOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJCQlzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQl9Ci0JCXVwKCZpbm9kZS0+aV9zZW0pOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ5MSw3ICs0OTEsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKmR2ZWNbMTBdOwogCWludCBuID0gMDsKIAotCWRvd24oJmRpci0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+aV9tdXRleCk7CiByZXBlYXQ6CiAJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJnBhcmVudC0+ZF9zdWJkaXJzKSB7CkBAIC01MTksNyArNTE5LDcgQEAKIAkJfSB3aGlsZSAobik7CiAJCWdvdG8gcmVwZWF0OwogCX0KLQl1cCgmZGlyLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50CkBAIC01MzIsNyArNTMyLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IG1vZGUsIGk7CiAKLQlkb3duKCZkaXItPmlfc2VtKTsKKwltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW9mOyBpKyspIHsKIAkJZGVudHJ5ID0gZF9hbGxvY19uYW1lKHBhcmVudCwgZmlsZXNbaV0ubmFtZSk7CiAJCWlmICghZGVudHJ5KQpAQCAtNTUyLDEwICs1NTIsMTAgQEAKIAkJCWRpci0+aV9ubGluaysrOwogCQlkX2FkZChkZW50cnksIGlub2RlKTsKIAl9Ci0JdXAoJmRpci0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlyZXR1cm4gMDsKIG91dF9iYWQ6Ci0JdXAoJmRpci0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgZmFpbGVkIHRvIHBvcHVsYXRlIGRpcmVjdG9yeSAlc1xuIiwKIAkJCV9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOwogCXJldHVybiAtRU5PTUVNOwpAQCAtNjA5LDcgKzYwOSw3IEBACiAJaWYgKChlcnJvciA9IHJwY19sb29rdXBfcGFyZW50KHBhdGgsIG5kKSkgIT0gMCkKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCWRpciA9IG5kLT5kZW50cnktPmRfaW5vZGU7Ci0JZG93bigmZGlyLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKIAlkZW50cnkgPSBsb29rdXBfaGFzaChuZCk7CiAJaWYgKElTX0VSUihkZW50cnkpKQogCQlnb3RvIG91dF9lcnI7CkBAIC02MjAsNyArNjIwLDcgQEAKIAl9CiAJcmV0dXJuIGRlbnRyeTsKIG91dF9lcnI6Ci0JdXAoJmRpci0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlycGNfcmVsZWFzZV9wYXRoKG5kKTsKIAlyZXR1cm4gZGVudHJ5OwogfQpAQCAtNjQ2LDcgKzY0Niw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl9kZXBvcHVsYXRlOwogb3V0OgotCXVwKCZkaXItPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJcnBjX3JlbGVhc2VfcGF0aCgmbmQpOwogCXJldHVybiBkZW50cnk7CiBlcnJfZGVwb3B1bGF0ZToKQEAgLTY3MSw3ICs2NzEsNyBAQAogCWlmICgoZXJyb3IgPSBycGNfbG9va3VwX3BhcmVudChwYXRoLCAmbmQpKSAhPSAwKQogCQlyZXR1cm4gZXJyb3I7CiAJZGlyID0gbmQuZGVudHJ5LT5kX2lub2RlOwotCWRvd24oJmRpci0+aV9zZW0pOworCW11dGV4X2xvY2soJmRpci0+aV9tdXRleCk7CiAJZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CkBAIC02ODEsNyArNjgxLDcgQEAKIAllcnJvciA9IF9fcnBjX3JtZGlyKGRpciwgZGVudHJ5KTsKIAlkcHV0KGRlbnRyeSk7CiBvdXRfcmVsZWFzZToKLQl1cCgmZGlyLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCXJwY19yZWxlYXNlX3BhdGgoJm5kKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC03MTAsNyArNzEwLDcgQEAKIAlycGNpLT5vcHMgPSBvcHM7CiAJaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0NSRUFURSk7CiBvdXQ6Ci0JdXAoJmRpci0+aV9zZW0pOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlycGNfcmVsZWFzZV9wYXRoKCZuZCk7CiAJcmV0dXJuIGRlbnRyeTsKIGVycl9kcHV0OgpAQCAtNzMyLDcgKzczMiw3IEBACiAJaWYgKChlcnJvciA9IHJwY19sb29rdXBfcGFyZW50KHBhdGgsICZuZCkpICE9IDApCiAJCXJldHVybiBlcnJvcjsKIAlkaXIgPSBuZC5kZW50cnktPmRfaW5vZGU7Ci0JZG93bigmZGlyLT5pX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKIAlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQpOwogCWlmIChJU19FUlIoZGVudHJ5KSkgewogCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKQEAgLTc0Niw3ICs3NDYsNyBAQAogCWRwdXQoZGVudHJ5KTsKIAlpbm9kZV9kaXJfbm90aWZ5KGRpciwgRE5fREVMRVRFKTsKIG91dF9yZWxlYXNlOgotCXVwKCZkaXItPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJcnBjX3JlbGVhc2VfcGF0aCgmbmQpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGU0Mjk2YzguLmIxOWNjMjYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMTIyLDggKzEyMiw3IEBACiAJcnFzdHAtPnJxX2FyZ3VzZWQgPSAwOwogCXJxc3RwLT5ycV9yZXN1c2VkID0gMDsKIAlhcmdoaSA9IDA7Ci0JaWYgKHBhZ2VzID4gUlBDU1ZDX01BWFBBR0VTKQotCQlCVUcoKTsKKwlCVUdfT04ocGFnZXMgPiBSUENTVkNfTUFYUEFHRVMpOwogCXdoaWxlIChwYWdlcykgewogCQlzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICghcCkKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCA1ZjZhZTc5Li4xYjU5ODliIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC03ODQsNyArNzg0LDcgQEAKIAkJZXJyID0gdmZzX21rbm9kKG5kLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBtb2RlLCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X21rbm9kX2RwdXQ7Ci0JCXVwKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQlkcHV0KG5kLmRlbnRyeSk7CiAJCW5kLmRlbnRyeSA9IGRlbnRyeTsKIApAQCAtODIzLDcgKzgyMyw3IEBACiBvdXRfbWtub2RfZHB1dDoKIAlkcHV0KGRlbnRyeSk7CiBvdXRfbWtub2RfdW5sb2NrOgotCXVwKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwltdXRleF91bmxvY2soJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcGF0aF9yZWxlYXNlKCZuZCk7CiBvdXRfbWtub2RfcGFyZW50OgogCWlmIChlcnI9PS1FRVhJU1QpCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IDJmNDUzMWYuLjZlZDMzMDIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC01NDAsOCArNTQwLDcgQEAKIAkJCXN0YXJ0ID0gZW5kOwogCQl9CiAJfQotCWlmIChsZW4pCi0JCUJVRygpOworCUJVR19PTihsZW4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2ljdl93YWxrKTsKIApAQCAtNjEwLDggKzYwOSw3IEBACiAJCQlzdGFydCA9IGVuZDsKIAkJfQogCX0KLQlpZiAobGVuKQotCQlCVUcoKTsKKwlCVUdfT04obGVuKTsKIAlyZXR1cm4gZWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RvX3NndmVjKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDU5NjE0YTkuLjA3N2JiZjkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjQ4LDExICsyNDgsOSBAQAogCiB2b2lkIF9feGZybV9wb2xpY3lfZGVzdHJveShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSkKIHsKLQlpZiAoIXBvbGljeS0+ZGVhZCkKLQkJQlVHKCk7CisJQlVHX09OKCFwb2xpY3ktPmRlYWQpOwogCi0JaWYgKHBvbGljeS0+YnVuZGxlcykKLQkJQlVHKCk7CisJQlVHX09OKHBvbGljeS0+YnVuZGxlcyk7CiAKIAlpZiAoZGVsX3RpbWVyKCZwb2xpY3ktPnRpbWVyKSkKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKaW5kZXggMGM0ZjNhOS4uYmY5NmE2MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdApAQCAtMzAsNyArMzAsNyBAQAogIyAgICAgLSBTZWUgaW5jbHVkZS9saW51eC9tb2R1bGUuaCBmb3IgbW9yZSBkZXRhaWxzCiAKICMgU3RlcCA0IGlzIHNvbGVseSB1c2VkIHRvIGFsbG93IG1vZHVsZSB2ZXJzaW9uaW5nIGluIGV4dGVybmFsIG1vZHVsZXMsCi0jIHdoZXJlIHRoZSBDUkMgb2YgZWFjaCBtb2R1bGUgaXMgcmV0cmVpdmVkIGZyb20gdGhlIE1vZHVsZS5zeW1lcnMgZmlsZS4KKyMgd2hlcmUgdGhlIENSQyBvZiBlYWNoIG1vZHVsZSBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgTW9kdWxlLnN5bWVycyBmaWxlLgogCiAuUEhPTlk6IF9tb2Rwb3N0CiBfbW9kcG9zdDogX19tb2Rwb3N0CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rc3lzbWFwIGIvc2NyaXB0cy9ta3N5c21hcAppbmRleCBhNjQzMGUwLi40MzkwZmFiIDEwMDY0NAotLS0gYS9zY3JpcHRzL21rc3lzbWFwCisrKyBiL3NjcmlwdHMvbWtzeXNtYXAKQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2ggLXgKICMgQmFzZWQgb24gdGhlIHZtbGludXggZmlsZSBjcmVhdGUgdGhlIFN5c3RlbS5tYXAgZmlsZQogIyBTeXN0ZW0ubWFwIGlzIHVzZWQgYnkgbW9kdWxlLWluaXQgdG9vbHMgYW5kIHNvbWUgZGVidWdnaW5nCi0jIHRvb2xzIHRvIHJldHJlaXZlIHRoZSBhY3R1YWwgYWRkcmVzc2VzIG9mIHN5bWJvbHMgaW4gdGhlIGtlcm5lbC4KKyMgdG9vbHMgdG8gcmV0cmlldmUgdGhlIGFjdHVhbCBhZGRyZXNzZXMgb2Ygc3ltYm9scyBpbiB0aGUga2VybmVsLgogIwogIyBVc2FnZQogIyBta3N5c21hcCB2bWxpbnV4IFN5c3RlbS5tYXAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lub2RlLmMgYi9zZWN1cml0eS9pbm9kZS5jCmluZGV4IGE1OTY0NTAuLjBmNzdiMDIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2lub2RlLmMKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJKmRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7CiAJCWlmICgobW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKQEAgLTE4MSw3ICsxODEsNyBAQAogCQkJZXJyb3IgPSBjcmVhdGUocGFyZW50LT5kX2lub2RlLCAqZGVudHJ5LCBtb2RlKTsKIAl9IGVsc2UKIAkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7Ci0JdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTMwMiw3ICszMDIsNyBAQAogCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUpCiAJCXJldHVybjsKIAotCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKHBvc2l0aXZlKGRlbnRyeSkpIHsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewogCQkJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCQlkcHV0KGRlbnRyeSk7CiAJCX0KIAl9Ci0JdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAlzaW1wbGVfcmVsZWFzZV9mcygmbW91bnQsICZtb3VudF9jb3VudCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eWZzX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggMTZkZjEyNC4uN2ZkMDcyMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtMjEzNSw5ICsyMTM1LDcgQEAKIAlzdWJzdHJlYW0gPSBwY21fb3NzX2ZpbGUtPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CiAJaWYgKHN1YnN0cmVhbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOWElPOwotCXVwKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwogCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMShzdWJzdHJlYW0sIGJ1ZiwgY291bnQpOwotCWRvd24oJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CiAjaWZkZWYgT1NTX0RFQlVHCiAJcHJpbnRrKCJwY21fb3NzOiB3cml0ZSAlbGkgYnl0ZXMgKHdyb3RlICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXN1bHQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMKaW5kZXggOWVlNmMxNy4uNDBiNGY2NyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9tZW1vcnkuYwpAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlICJzZXFfaW5mby5oIgogI2luY2x1ZGUgInNlcV9sb2NrLmgiCiAKLS8qIHNlbWFwaG9yZSBpbiBzdHJ1Y3QgZmlsZSByZWNvcmQgKi8KLSNkZWZpbmUgc2VtYXBob3JlX29mKGZwKQkoKGZwKS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKQotCi0KIHN0YXRpYyBpbmxpbmUgaW50IHNuZF9zZXFfcG9vbF9hdmFpbGFibGUoc3RydWN0IHNuZF9zZXFfcG9vbCAqcG9vbCkKIHsKIAlyZXR1cm4gcG9vbC0+dG90YWxfZWxlbWVudHMgLSBhdG9taWNfcmVhZCgmcG9vbC0+Y291bnRlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCmluZGV4IDA5Y2IyNTAuLjk2MmU2ZDUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zTEU6CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zQkU6CiAJCWNoaXAtPnBjbV9zYW1wbGUgPSAzOwotCQkvKiBmYWxsIHRyb3VnaCAqLworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OiAvKiAyNC1iaXQgKi8KIAkJYXZhbCA9IEFLNDExN19ESUZfMjRSOwogCQljaGlwLT5wY21fZnJhbWUgPSAzOwo=