ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dAppbmRleCBjYjYzYjdhLi5kZjZjMDU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0CkBAIC0xLDUgKzEsNSBAQAotSG93IHRvIGdldCB0aGUgTmVidWxhLCBQQ1RWIGFuZCBUd2luaGFuIERTVCBjYXJkcyB3b3JraW5nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0hvdyB0byBnZXQgdGhlIE5lYnVsYSwgUENUViwgRnVzaW9uSERUViBMaXRlIGFuZCBUd2luaGFuIERTVCBjYXJkcyB3b3JraW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGlzIGNsYXNzIG9mIGNhcmRzIGhhcyBhIGJ0ODc4YSBhcyB0aGUgUENJIGludGVyZmFjZSwgYW5kCiByZXF1aXJlIHRoZSBidHR2IGRyaXZlci4KQEAgLTI2LDI3ICsyNiwzMSBAQAogCiBJbiBnZW5lcmFsIHlvdSBuZWVkIHRvIGxvYWQgdGhlIGJ0dHYgZHJpdmVyLCB3aGljaCB3aWxsIGhhbmRsZSB0aGUgZ3BpbyBhbmQKIGkyYyBjb21tdW5pY2F0aW9uIGZvciB1cywgcGx1cyB0aGUgY29tbW9uIGR2Yi1idDh4eCBkZXZpY2UgZHJpdmVyLgotVGhlIGZyb250ZW5kcyBmb3IgTmVidWxhIChueHQ2MDAwKSwgUGlubmFjbGUgUENUViAoY3gyNDExMCkgYW5kCi1Ud2luSGFuIChkc3QpIGFyZSBsb2FkZWQgYXV0b21hdGljYWxseSBieSB0aGUgZHZiLWJ0OHh4IGRldmljZSBkcml2ZXIuCitUaGUgZnJvbnRlbmRzIGZvciBOZWJ1bGEgKG54dDYwMDApLCBQaW5uYWNsZSBQQ1RWIChjeDI0MTEwKSwgVHdpbkhhbiAoZHN0KSwKK0Z1c2lvbkhEVFYgRFZCLVQgTGl0ZSAobXQzNTIpIGFuZCBGdXNpb25IRFRWNSBMaXRlIChsZ2R0MzMweCkgYXJlIGxvYWRlZAorYXV0b21hdGljYWxseSBieSB0aGUgZHZiLWJ0OHh4IGRldmljZSBkcml2ZXIuCiAKLTNhKSBOZWJ1bGEgLyBQaW5uYWNsZSBQQ1RWCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM2EpIE5lYnVsYSAvIFBpbm5hY2xlIFBDVFYgLyBGdXNpb25IRFRWIExpdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAkIG1vZHByb2JlIGJ0dHYgKG5vcm1hbGx5IGJ0dHYgaXMgYmVpbmcgbG9hZGVkIGF1dG9tYXRpY2FsbHkgYnkga21vZCkKLSAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4IChvciBqdXN0IHBsYWNlIGR2Yi1idDh4eCBpbiAvZXRjL21vZHVsZXMgZm9yIGF1dG9tYXRpYyBsb2FkaW5nKQorICAgJCBtb2Rwcm9iZSBkdmItYnQ4eHgKKworKG9yIGp1c3QgcGxhY2UgZHZiLWJ0OHh4IGluIC9ldGMvbW9kdWxlcyBmb3IgYXV0b21hdGljIGxvYWRpbmcpCiAKIAogM2IpIFR3aW5IYW4gYW5kIENsb25lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgJCBtb2Rwcm9iZSBidHR2IGkyY19odz0xIGNhcmQ9MHg3MQorICAgJCBtb2Rwcm9iZSBidHR2IGNhcmQ9MHg3MQogICAgJCBtb2Rwcm9iZSBkdmItYnQ4eHgKICAgICQgbW9kcHJvYmUgZHN0CiAKIFRoZSB2YWx1ZSAweDcxIHdpbGwgb3ZlcnJpZGUgdGhlIFBDSSB0eXBlIGRldGVjdGlvbiBmb3IgZHZiLWJ0OHh4LAotd2hpY2ggIGlzIG5lY2Vzc2FyeSBmb3IgVHdpbkhhbiBjYXJkcy4KK3doaWNoICBpcyBuZWNlc3NhcnkgZm9yIFR3aW5IYW4gY2FyZHMuIE9taXNzaW9uIG9mIHRoaXMgcGFyYW1ldGVyIG1pZ2h0IHJlc3VsdAoraW4gYSBzeXN0ZW0gbG9ja3VwLgogCi1JZiB5b3UncmUgaGF2aW5nIGFuIG9sZGVyIGNhcmQgKGJsdWUgY29sb3IgY2lyY3VpdCkgYW5kIGNhcmQ9MHg3MSBsb2NrcworSWYgeW91J3JlIGhhdmluZyBhbiBvbGRlciBjYXJkIChibHVlIGNvbG9yIFBDQikgYW5kIGNhcmQ9MHg3MSBsb2NrcyB1cAogeW91ciBtYWNoaW5lLCB0cnkgdXNpbmcgMHg2OCwgdG9vLiBJZiB0aGF0IGRvZXMgbm90IHdvcmssIGFzayBvbiB0aGUKIG1haWxpbmcgbGlzdC4KIApAQCAtNjQsMTEgKzY4LDQ3IEBACiBkc3RfYWRkb25zIHRha2VzIHZhbHVlcyAwIGFuZCAweDIwLiBBIHZhbHVlIG9mIDAgbWVhbnMgaXQgaXMgYSBGVEEgY2FyZC4KIDB4MjAgbWVhbnMgaXQgaGFzIGEgQ29uZGl0aW9uYWwgQWNjZXNzIHNsb3QuCiAKLVRoZSBhdXRvZGVjdGVkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieXRoZSBjYXJkcyAncmVzcG9uc2UKLXN0cmluZycgd2hpY2ggeW91IGNhbiBzZWUgaW4geW91ciBsb2dzIGUuZy4KK1RoZSBhdXRvZGV0ZWN0ZWQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBjYXJkcyAncmVzcG9uc2Ugc3RyaW5nJword2hpY2ggeW91IGNhbiBzZWUgaW4geW91ciBsb2dzIGUuZy4KIAogZHN0X2dldF9kZXZpY2VfaWQ6IFJlY29nbmlzZSBbRFNUTUNJXQogCitJZiB5b3UgbmVlZCB0byBzZW50IGluIGJ1ZyByZXBvcnRzIG9uIHRoZSBkc3QsIHBsZWFzZSBkbyBzZW5kIGluIGEgY29tcGxldGUKK2xvZyB3aXRoIHRoZSB2ZXJib3NlPTQgbW9kdWxlIHBhcmFtZXRlci4gRm9yIGdlbmVyYWwgdXNhZ2UsIHRoZSBkZWZhdWx0IHNldHRpbmcKK29mIHZlcmJvc2U9MSBpcyBpZGVhbC4KKworCis0KSBNdWx0aXBsZSBjYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhcHBlbiB0byBiZSBydW5uaW5nIG11bHRpcGxlIGNhcmRzLCBpdCB3b3VsZCBiZSBhZHZpc2FibGUgdG8gbG9hZAordGhlIGJ0dHYgbW9kdWxlIHdpdGggdGhlIGNhcmQgaWQuIFRoaXMgd291bGQgaGVscCB0byBzb2x2ZSBhbnkgbW9kdWxlIGxvYWRpbmcKK3Byb2JsZW1zIHRoYXQgeW91IG1pZ2h0IGZhY2UuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIFR3aW5oYW4gYW5kIENsb25lcyBjYXJkIGFsb25nIHdpdGggYSBGdXNpb25IRFRWNSBMaXRlCisKKwkkIG1vZHByb2JlIGJ0dHYgY2FyZD0weDcxIGNhcmQ9MHg4NworCitIZXJlIHRoZSBvcmRlciBvZiB0aGUgY2FyZCBpZCBpcyBpbXBvcnRhbnQgYW5kIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZQorcGh5c2ljYWwgb3JkZXIgb2YgdGhlIGNhcmRzLiBIZXJlIGNhcmQ9MHg3MSByZXByZXNlbnRzIHRoZSBUd2luaGFuIGFuZCBjbG9uZXMKK2FuZCBjYXJkPTB4ODcgcmVwcmVzZW50cyBGdXNpb24gSERUVjUgTGl0ZS4gVGhlc2UgYXJndW1lbnRzIGNhbiBhbHNvIGJlCitzcGVjaWZpZWQgaW4gZGVjaW1hbCwgcmF0aGVyIHRoYW4gaGV4OgorCisJJCBtb2Rwcm9iZSBidHR2IGNhcmQ9MTEzIGNhcmQ9MTM1CisKK1NvbWUgZXhhbXBsZXMgb2YgY2FyZC1pZCdzCisKK1Bpbm5hY2xlIFNhdAkJMHg1ZSAgKDk0KQorTmVidWxhIERpZ2kgVFYJCTB4NjggICgxMDQpCitQQyBIRFRWCQkJMHg3MCAgKDExMikKK1R3aW5oYW4JCQkweDcxICAoMTEzKQorRnVzaW9uSERUViBEVkItVCBMaXRlCTB4ODAgICgxMjgpCitGdXNpb25IRFRWNSBMaXRlCTB4ODcgICgxMzUpCisKK0ZvciBhIGZ1bGwgbGlzdCBvZiBjYXJkLWlkJ3MsIHNlZSB0aGUgVjRMIERvY3VtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwKK3NvdXJjZTogIGxpbnV4L0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgorCitJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoaXMgcGxlYXNlIGRvIGFzayBvbiB0aGUgbWFpbGluZyBsaXN0LgogCiAtLQogQXV0aG9yczogUmljaGFyZCBXYWxrZXIsIEphbWllIEhvbmFuLCBNaWNoYWVsIEh1bm9sZCwgTWFudSBBYnJhaGFtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQKaW5kZXggZWZkYzRlZS4uMTkzMjljZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvY2FyZHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2NhcmRzLnR4dApAQCAtNDEsNiArNDEsMTIgQEAKICAgIC0gZGliMzAwMG1iCTogRGlCY29tIDMwMDAtTUIgZGVtb2R1bGF0b3IKICAgRFZCLVMvQy9UOgogICAgLSBkc3QJCTogVHdpbkhhbiBEU1QgRnJvbnRlbmQKKyAgQVRTQzoKKyAgIC0gbnh0MjAweAkJOiBOeHR3YXZlIE5YVDIwMDIgJiBOWFQyMDA0CisgICAtIG9yNTEyMTEJCTogb3I1MTIxMSBiYXNlZCAocGNIRFRWIEhEMjAwMCBjYXJkKQorICAgLSBvcjUxMTMyCQk6IG9yNTExMzIgYmFzZWQgKHBjSERUViBIRDMwMDAgY2FyZCkKKyAgIC0gYmNtMzUxMAkJOiBCcm9hZGNvbSBCQ00zNTEwCisgICAtIGxnZHQzMzB4CQk6IExHIEVsZWN0cm9uaWNzIERUMzMwMiAmIERUMzMwMwogCiAKIG8gQ2FyZHMgYmFzZWQgb24gdGhlIFBoaWxsaXBzIHNhYTcxNDYgbXVsdGltZWRpYSBQQ0kgYnJpZGdlIGNoaXA6CkBAIC02Miw2ICs2OCwxMCBAQAogICAtIE5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYKICAgLSBUd2luSGFuIERTVAogICAtIEF2ZXJtZWRpYSBEVkItVAorICAtIENoYWluVGVjaCBkaWdpdG9wIERTVC0xMDAwIERWQi1TCisgIC0gcGNIRFRWIEhELTIwMDAgVFYKKyAgLSBEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUKKyAgLSBEVmlDTyBGdXNpb25IRFRWNSBMaXRlCiAKIG8gVGVjaG5vdHJlbmQgLyBIYXVwcGF1Z2UgRFZCIFVTQiBkZXZpY2VzOgogICAtIE5vdmEgVVNCCkBAIC04MywzICs5MywzMCBAQAogICAtIERpQmNvbSBVU0IyLjAgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKIAogbyBFeHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIGFuYWxvZyBtb2R1bGUgb2YgdGhlIFNpZW1lbnMgRFZCLUMgUENJIGNhcmQKKworbyBDYXJkcyBiYXNlZCBvbiB0aGUgQ29uZXhhbnQgY3gyMzg4eCBQQ0kgYnJpZGdlOgorICAtIEFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJCisgIC0gQVRJIEhEVFYgV29uZGVyCisgIC0gZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UCisgIC0gRFZpQ08gRnVzaW9uSERUViBEVkItVDEKKyAgLSBEVmlDTyBGdXNpb25IRFRWIERWQi1UIFBsdXMKKyAgLSBEVmlDTyBGdXNpb25IRFRWMyBHb2xkLVEKKyAgLSBEVmlDTyBGdXNpb25IRFRWMyBHb2xkLVQKKyAgLSBEVmlDTyBGdXNpb25IRFRWNSBHb2xkCisgIC0gSGF1cHBhdWdlIE5vdmEtVCBEVkItVAorICAtIEtXb3JsZC9WU3RyZWFtIFhQZXJ0IERWQi1UCisgIC0gcGNIRFRWIEhEMzAwMCBIRFRWCisgIC0gVGVycmFUZWMgQ2luZXJneSAxNDAwIERWQi1UCisgIC0gV2luRmFzdCBEVFYxMDAwLVQKKworbyBDYXJkcyBiYXNlZCBvbiB0aGUgUGhpbGxpcHMgc2FhNzEzNCBQQ0kgYnJpZGdlOgorICAtIE1lZGlvbiA3MTM0CisgIC0gUGlubmFjbGUgUENUViAzMDBpIERWQi1UICsgUEFMCisgIC0gTGlmZVZpZXcgRmx5RFZCLVQgRFVPCisgIC0gVHlwaG9vbiBEVkItVCBEdW8gRGlnaXRhbC9BbmFsb2cgQ2FyZGJ1cworICAtIFBoaWxpcHMgVE9VR0ggRFZCLVQgcmVmZXJlbmNlIGRlc2lnbgorICAtIFBoaWxpcHMgRVVST1BBIFYzIHJlZmVyZW5jZSBkZXNpZ24KKyAgLSBDb21wcm8gVmlkZW9tYXRlIERWQi1UMzAwCisgIC0gQ29tcHJvIFZpZGVvbWF0ZSBEVkItVDIwMAorICAtIEFWZXJNZWRpYSBBVmVyVFZIRCBNQ0UgQTE4MAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvY29udHJpYnV0b3JzLnR4dAppbmRleCBjOWQ1Y2UzLi4yY2JkMmQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2NvbnRyaWJ1dG9ycy50eHQKQEAgLTc1LDUgKzc1LDIyIEBACiBQZXRlciBCZXV0bmVyIDxwLmJldXRuZXJAZ214Lm5ldD4KICAgZm9yIHRoZSBJUiBjb2RlIGZvciB0aGUgdHR1c2ItZGVjIGRyaXZlcgogCitXaWxzb24gTWljaGFlbHMgPHdpbHNvbm1pY2hhZWxzQGVhcnRobGluay5uZXQ+CisgIGZvciB0aGUgbGdkdDMzMHggZnJvbnRlbmQgZHJpdmVyLCBhbmQgdmFyaW91cyBidWdmaXhlcworCitNaWNoYWVsIEtydWZreSA8bWtydWZreUBtMWsubmV0PgorICBmb3IgbWFpbnRhaW5pbmcgdjRsL2R2YiBpbnRlci10cmVlIGRlcGVuZGVuY2llcworCitUYXlsb3IgSmFjb2IgPHJ0amFjb2JAZWFydGhsaW5rLm5ldD4KKyAgZm9yIHRoZSBueHQyMDAyIGZyb250ZW5kIGRyaXZlcgorCitKZWFuLUZyYW5jb2lzIFRoaWJlcnQgPGplYW5mcmFuY29pc0BzYWdldHYuY29tPgorICBmb3IgdGhlIG54dDIwMDQgZnJvbnRlbmQgZHJpdmVyCisKK0tpcmsgTGFwcmF5IDxraXJrLmxhcHJheUBnbWFpbC5jb20+CisgIGZvciB0aGUgb3I1MTIxMSBhbmQgb3I1MTEzMiBmcm9udGVuZCBkcml2ZXJzLCBhbmQKKyAgZm9yIG1lcmdpbmcgdGhlIG54dDIwMDIgYW5kIG54dDIwMDQgbW9kdWxlcyBpbnRvIGEKKyAgc2luZ2xlIG54dDIwMHggZnJvbnRlbmQgZHJpdmVyLgorCiAoSWYgeW91IHRoaW5rIHlvdSBzaG91bGQgYmUgaW4gdGhpcyBsaXN0LCBidXQgeW91IGFyZSBub3QsIGRyb3AgYQogIGxpbmUgdG8gdGhlIERWQiBtYWlsaW5nIGxpc3QpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQppbmRleCBhNzUwZjAxLi5iZTZlYjRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKQEAgLTIyLDcgKzIyLDcgQEAKIHVzZSBJTzo6SGFuZGxlOwogCiBAY29tcG9uZW50cyA9ICggInNwODg3MCIsICJzcDg4N3giLCAidGRhMTAwNDUiLCAidGRhMTAwNDYiLCAiYXY3MTEwIiwgImRlYzIwMDB0IiwKLQkJImRlYzI1NDB0IiwgImRlYzMwMDBzIiwgInZwNzA0MSIsICJkaWJ1c2IiLCAibnh0MjAwMiIsCisJCSJkZWMyNTQwdCIsICJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLCAibnh0MjAwNCIsCiAJCSJvcjUxMjExIiwgIm9yNTExMzJfcWFtIiwgIm9yNTExMzJfdnNiIik7CiAKICMgQ2hlY2sgYXJncwpAQCAtMjUyLDYgKzI1MiwyMyBAQAogICAgICRvdXRmaWxlOwogfQogCitzdWIgbnh0MjAwNCB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiQVZlclRWSERfTUNFX0ExODBfRHJ2X3YxLjIuMi4xNi56aXAiOworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy5hdmVyLmNvbS9zdXBwb3J0L0RyaXZlcnMvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gIjExMWNiODg1YjFlMDA5MTg4MzQ2ZDcyYWNmZWQwMjRjIjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItZmUtbnh0MjAwNC5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgdmVyaWZ5KCIkdG1wZGlyLzN4SHlicmlkLnN5cyIsICRoYXNoKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyLzN4SHlicmlkLnN5cyIsIDQ2NTMwNCwgOTU4NCwgJG91dGZpbGUpOworCisgICAgJG91dGZpbGU7Cit9CisKIHN1YiBvcjUxMjExIHsKICAgICBteSAkZndmaWxlID0gImR2Yi1mZS1vcjUxMjExLmZ3IjsKICAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvJGZ3ZmlsZSI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2ZiY29uLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvZmJjb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZGNlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZiY29uLnR4dApAQCAtMCwwICsxLDE1MiBAQAorVGhlIEZyYW1lYnVmZmVyIENvbnNvbGUKKz09PT09PT09PT09PT09PT09PT09PT09CisKKwlUaGUgZnJhbWVidWZmZXIgY29uc29sZSAoZmJjb24pLCBhcyBpdHMgbmFtZSBpbXBsaWVzLCBpcyBhIHRleHQKK2NvbnNvbGUgcnVubmluZyBvbiB0b3Agb2YgdGhlIGZyYW1lYnVmZmVyIGRldmljZS4gSXQgaGFzIHRoZSBmdW5jdGlvbmFsaXR5IG9mCithbnkgc3RhbmRhcmQgdGV4dCBjb25zb2xlIGRyaXZlciwgc3VjaCBhcyB0aGUgVkdBIGNvbnNvbGUsIHdpdGggdGhlIGFkZGVkCitmZWF0dXJlcyB0aGF0IGNhbiBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBncmFwaGljYWwgbmF0dXJlIG9mIHRoZSBmcmFtZWJ1ZmZlci4KKworCSBJbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgaXMgb3B0aW9uYWwsIGFuZAorc29tZSBldmVuIHRyZWF0IGl0IGFzIGEgdG95LiBGb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcywgaXQgaXMgdGhlIG9ubHkgYXZhaWxhYmxlCitkaXNwbGF5IGRldmljZSwgdGV4dCBvciBncmFwaGljYWwuCisKKwkgV2hhdCBhcmUgdGhlIGZlYXR1cmVzIG9mIGZiY29uPyAgVGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgc3VwcG9ydHMKK2hpZ2ggcmVzb2x1dGlvbnMsIHZhcnlpbmcgZm9udCB0eXBlcywgZGlzcGxheSByb3RhdGlvbiwgcHJpbWl0aXZlIG11bHRpaGVhZCwKK2V0Yy4gVGhlb3JldGljYWxseSwgbXVsdGktY29sb3JlZCBmb250cywgYmxlbmRpbmcsIGFsaWFzaW5nLCBhbmQgYW55IGZlYXR1cmUKK21hZGUgYXZhaWxhYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIGdyYXBoaWNzIGNhcmQgYXJlIGFsc28gcG9zc2libGUuCisKK0EuIENvbmZpZ3VyYXRpb24KKworCVRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGNhbiBiZSBlbmFibGVkIGJ5IHVzaW5nIHlvdXIgZmF2b3JpdGUga2VybmVsCitjb25maWd1cmF0aW9uIHRvb2wuICBJdCBpcyB1bmRlciBEZXZpY2UgRHJpdmVycy0+R3JhcGhpY3MgU3VwcG9ydC0+U3VwcG9ydCBmb3IKK2ZyYW1lYnVmZmVyIGRldmljZXMtPkZyYW1lYnVmZmVyIENvbnNvbGUgU3VwcG9ydC4gU2VsZWN0ICd5JyB0byBjb21waWxlCitzdXBwb3J0IHN0YXRpY2FsbHksIG9yICdtJyBmb3IgbW9kdWxlIHN1cHBvcnQuICBUaGUgbW9kdWxlIHdpbGwgYmUgZmJjb24uCisKKwlJbiBvcmRlciBmb3IgZmJjb24gdG8gYWN0aXZhdGUsIGF0IGxlYXN0IG9uZSBmcmFtZWJ1ZmZlciBkcml2ZXIgaXMKK3JlcXVpcmVkLCBzbyBjaG9vc2UgZnJvbSBhbnkgb2YgdGhlIG51bWVyb3VzIGRyaXZlcnMgYXZhaWxhYmxlLiBGb3IgeDg2CitzeXN0ZW1zLCB0aGV5IGFsbW9zdCB1bml2ZXJzYWxseSBoYXZlIFZHQSBjYXJkcywgc28gdmdhMTZmYiBhbmQgdmVzYWZiIHdpbGwKK2Fsd2F5cyBiZSBhdmFpbGFibGUuIEhvd2V2ZXIsIHVzaW5nIGEgY2hpcHNldC1zcGVjaWZpYyBkcml2ZXIgd2lsbCBnaXZlIHlvdQorbW9yZSBzcGVlZCBhbmQgZmVhdHVyZXMsIHN1Y2ggYXMgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSB2aWRlbyBtb2RlCitkeW5hbWljYWxseS4KKworCVRvIGRpc3BsYXkgdGhlIHBlbmd1aW4gbG9nbywgY2hvb3NlIGFueSBsb2dvIGF2YWlsYWJsZSBpbiBMb2dvCitDb25maWd1cmF0aW9uLT5Cb290IHVwIGxvZ28uCisKKwlBbHNvLCB5b3Ugd2lsbCBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgY29tcGlsZWQtaW4gZm9udHMsIGJ1dCBpZgoreW91IGRvbid0IGRvIGFueXRoaW5nLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG9vbCB3aWxsIHNlbGVjdCBvbmUgZm9yIHlvdSwKK3VzdWFsbHkgYW4gOHgxNiBmb250LgorCitHT1RDSEE6IEEgY29tbW9uIGJ1ZyByZXBvcnQgaXMgZW5hYmxpbmcgdGhlIGZyYW1lYnVmZmVyIHdpdGhvdXQgZW5hYmxpbmcgdGhlCitmcmFtZWJ1ZmZlciBjb25zb2xlLiAgRGVwZW5kaW5nIG9uIHRoZSBkcml2ZXIsIHlvdSBtYXkgZ2V0IGEgYmxhbmtlZCBvcgorZ2FyYmxlZCBkaXNwbGF5LCBidXQgdGhlIHN5c3RlbSBzdGlsbCBib290cyB0byBjb21wbGV0aW9uLiAgSWYgeW91IGFyZQorZm9ydHVuYXRlIHRvIGhhdmUgYSBkcml2ZXIgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZ3JhcGhpY3MgY2hpcCwgdGhlbiB5b3UKK3dpbGwgc3RpbGwgZ2V0IGEgVkdBIGNvbnNvbGUuCisKK0IuIExvYWRpbmcKKworUG9zc2libGUgc2NlbmFyaW9zOgorCisxLiBEcml2ZXIgYW5kIGZiY29uIGFyZSBjb21waWxlZCBzdGF0aWNhbGx5CisKKwkgVXN1YWxseSwgZmJjb24gd2lsbCBhdXRvbWF0aWNhbGx5IHRha2Ugb3ZlciB5b3VyIGNvbnNvbGUuIFRoZSBub3RhYmxlCisJIGV4Y2VwdGlvbiBpcyB2ZXNhZmIuICBJdCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGFjdGl2YXRlZCB3aXRoIHRoZQorCSB2Z2E9IGJvb3Qgb3B0aW9uIHBhcmFtZXRlci4KKworMi4gRHJpdmVyIGlzIGNvbXBpbGVkIHN0YXRpY2FsbHksIGZiY29uIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlCisKKwkgRGVwZW5kaW5nIG9uIHRoZSBkcml2ZXIsIHlvdSBlaXRoZXIgZ2V0IGEgc3RhbmRhcmQgY29uc29sZSwgb3IgYQorCSBnYXJibGVkIGRpc3BsYXksIGFzIG1lbnRpb25lZCBhYm92ZS4gIFRvIGdldCBhIGZyYW1lYnVmZmVyIGNvbnNvbGUsCisJIGRvIGEgJ21vZHByb2JlIGZiY29uJy4KKworMy4gRHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBmYmNvbiBpcyBjb21waWxlZCBzdGF0aWNhbGx5CisKKwkgWW91IGdldCB5b3VyIHN0YW5kYXJkIGNvbnNvbGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHdpdGgKKwkgJ21vZHByb2JlIHh4eGZiJywgZmJjb24gYXV0b21hdGljYWxseSB0YWtlcyBvdmVyIHRoZSBjb25zb2xlIHdpdGgKKwkgdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiB1c2luZyB0aGUgZmJjb249bWFwOm4gb3B0aW9uLiBTZWUgYmVsb3cuCisKKzQuIERyaXZlciBhbmQgZmJjb24gYXJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLgorCisJIFlvdSBjYW4gbG9hZCB0aGVtIGluIGFueSBvcmRlci4gT25jZSBib3RoIGFyZSBsb2FkZWQsIGZiY29uIHdpbGwgdGFrZQorCSBvdmVyIHRoZSBjb25zb2xlLgorCitDLiBCb290IG9wdGlvbnMKKworICAgICAgICAgVGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgaGFzIHNldmVyYWwsIGxhcmdlbHkgdW5rbm93biwgYm9vdCBvcHRpb25zCisgICAgICAgICB0aGF0IGNhbiBjaGFuZ2UgaXRzIGJlaGF2aW9yLgorCisxLiBmYmNvbj1mb250OjxuYW1lPgorCisgICAgICAgIFNlbGVjdCB0aGUgaW5pdGlhbCBmb250IHRvIHVzZS4gVGhlIHZhbHVlICduYW1lJyBjYW4gYmUgYW55IG9mIHRoZQorICAgICAgICBjb21waWxlZC1pbiBmb250czogVkdBOHgxNiwgN3gxNCwgMTB4MTgsIFZHQTh4OCwgTUlOSTR4NiwgUm9tYW5MYXJnZSwKKyAgICAgICAgU1VOOHgxNiwgU1VOMTJ4MjIsIFByb0ZvbnQ2eDExLCBBY29ybjh4OCwgUEVBUkw4eDguCisKKwlOb3RlLCBub3QgYWxsIGRyaXZlcnMgY2FuIGhhbmRsZSBmb250IHdpdGggd2lkdGhzIG5vdCBkaXZpc2libGUgYnkgOCwKKyAgICAgICAgc3VjaCBhcyB2Z2ExNmZiLgorCisyLiBmYmNvbj1zY3JvbGxiYWNrOjx2YWx1ZT5ba10KKworICAgICAgICBUaGUgc2Nyb2xsYmFjayBidWZmZXIgaXMgbWVtb3J5IHRoYXQgaXMgdXNlZCB0byBwcmVzZXJ2ZSBkaXNwbGF5CisgICAgICAgIGNvbnRlbnRzIHRoYXQgaGFzIGFscmVhZHkgc2Nyb2xsZWQgcGFzdCB5b3VyIHZpZXcuICBUaGlzIGlzIGFjY2Vzc2VkCisgICAgICAgIGJ5IHVzaW5nIHRoZSBTaGlmdC1QYWdlVXAga2V5IGNvbWJpbmF0aW9uLiAgVGhlIHZhbHVlICd2YWx1ZScgaXMgYW55CisgICAgICAgIGludGVnZXIuIEl0IGRlZmF1bHRzIHRvIDMyS0IuICBUaGUgJ2snIHN1ZmZpeCBpcyBvcHRpb25hbCwgYW5kIHdpbGwKKyAgICAgICAgbXVsdGlwbHkgdGhlICd2YWx1ZScgYnkgMTAyNC4KKworMy4gZmJjb249bWFwOjwwMTIzPgorCisgICAgICAgIFRoaXMgaXMgYW4gaW50ZXJlc3Rpbmcgb3B0aW9uLiBJdCB0ZWxscyB3aGljaCBkcml2ZXIgZ2V0cyBtYXBwZWQgdG8KKyAgICAgICAgd2hpY2ggY29uc29sZS4gVGhlIHZhbHVlICcwMTIzJyBpcyBhIHNlcXVlbmNlIHRoYXQgZ2V0cyByZXBlYXRlZCB1bnRpbAorICAgICAgICB0aGUgdG90YWwgbGVuZ3RoIGlzIDY0IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgY29uc29sZXMgYXZhaWxhYmxlLiBJbgorICAgICAgICB0aGUgYWJvdmUgZXhhbXBsZSwgaXQgaXMgZXhwYW5kZWQgdG8gMDEyMzAxMjMwMTIzLi4uIGFuZCB0aGUgbWFwcGluZworICAgICAgICB3aWxsIGJlOgorCisJCXR0eSB8IDEgMiAzIDQgNSA2IDcgOCA5IC4uLgorCQlmYiAgfCAwIDEgMiAzIDAgMSAyIDMgMCAuLi4KKworCQkoJ2NhdCAvcHJvYy9mYicgc2hvdWxkIHRlbGwgeW91IHdoYXQgdGhlIGZiIG51bWJlcnMgYXJlKQorCisJT25lIHNpZGUgZWZmZWN0IHRoYXQgbWF5IGJlIHVzZWZ1bCBpcyB1c2luZyBhIG1hcCB2YWx1ZSB0aGF0IGV4Y2VlZHMKKwl0aGUgbnVtYmVyIG9mIGxvYWRlZCBmYiBkcml2ZXJzLiBGb3IgZXhhbXBsZSwgaWYgb25seSBvbmUgZHJpdmVyIGlzCisJYXZhaWxhYmxlLCBmYjAsIGFkZGluZyBmYmNvbj1tYXA6MSB0ZWxscyBmYmNvbiBub3QgdG8gdGFrZSBvdmVyIHRoZQorCWNvbnNvbGUuCisKKwlMYXRlciBvbiwgd2hlbiB5b3Ugd2FudCB0byBtYXAgdGhlIGNvbnNvbGUgdGhlIHRvIHRoZSBmcmFtZWJ1ZmZlcgorCWRldmljZSwgeW91IGNhbiB1c2UgdGhlIGNvbjJmYm1hcCB1dGlsaXR5LgorCis0LiBmYmNvbj12Yzo8bjE+LTxuMj4KKworCVRoaXMgb3B0aW9uIHRlbGxzIGZiY29uIHRvIHRha2Ugb3ZlciBvbmx5IGEgcmFuZ2Ugb2YgY29uc29sZXMgYXMKKwlzcGVjaWZpZWQgYnkgdGhlIHZhbHVlcyAnbjEnIGFuZCAnbjInLiBUaGUgcmVzdCBvZiB0aGUgY29uc29sZXMKKwlvdXRzaWRlIHRoZSBnaXZlbiByYW5nZSB3aWxsIHN0aWxsIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHN0YW5kYXJkCisJY29uc29sZSBkcml2ZXIuCisKKwlOT1RFOiBGb3IgeDg2IG1hY2hpbmVzLCB0aGUgc3RhbmRhcmQgY29uc29sZSBpcyB0aGUgVkdBIGNvbnNvbGUgd2hpY2gKKwlpcyB0eXBpY2FsbHkgbG9jYXRlZCBvbiB0aGUgc2FtZSB2aWRlbyBjYXJkLiAgVGh1cywgdGhlIGNvbnNvbGVzIHRoYXQKKwlhcmUgY29udHJvbGxlZCBieSB0aGUgVkdBIGNvbnNvbGUgd2lsbCBiZSBnYXJibGVkLgorCis0LiBmYmNvbj1yb3RhdGU6PG4+CisKKyAgICAgICAgVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgb3JpZW50YXRpb24gYW5nbGUgb2YgdGhlIGNvbnNvbGUgZGlzcGxheS4gVGhlCisgICAgICAgIHZhbHVlICduJyBhY2NlcHRzIHRoZSBmb2xsb3dpbmc6CisKKwkgICAgICAwIC0gbm9ybWFsIG9yaWVudGF0aW9uICgwIGRlZ3JlZSkKKwkgICAgICAxIC0gY2xvY2t3aXNlIG9yaWVudGF0aW9uICg5MCBkZWdyZWVzKQorCSAgICAgIDIgLSB1cHNpZGUgZG93biBvcmllbnRhdGlvbiAoMTgwIGRlZ3JlZXMpCisJICAgICAgMyAtIGNvdW50ZXJjbG9ja3dpc2Ugb3JpZW50YXRpb24gKDI3MCBkZWdyZWVzKQorCisJVGhlIGFuZ2xlIGNhbiBiZSBjaGFuZ2VkIGFueXRpbWUgYWZ0ZXJ3YXJkcyBieSAnZWNob2luZycgdGhlIHNhbWUKKwludW1iZXJzIHRvIGFueSBvbmUgb2YgdGhlIDIgYXR0cmlidXRlcyBmb3VuZCBpbgorCS9zeXMvY2xhc3MvZ3JhcGhpY3MvZmJ7eH0KKworCQljb25fcm90YXRlICAgICAtIHJvdGF0ZSB0aGUgZGlzcGxheSBvZiB0aGUgYWN0aXZlIGNvbnNvbGUKKwkJY29uX3JvdGF0ZV9hbGwgLSByb3RhdGUgdGhlIGRpc3BsYXkgb2YgYWxsIGNvbnNvbGVzCisKKwlDb25zb2xlIHJvdGF0aW9uIHdpbGwgb25seSBiZWNvbWUgYXZhaWxhYmxlIGlmIENvbnNvbGUgUm90YXRpb24KKwlTdXBwb3J0IGlzIGNvbXBpbGVkIGluIHlvdXIga2VybmVsLgorCisJTk9URTogVGhpcyBpcyBwdXJlbHkgY29uc29sZSByb3RhdGlvbi4gIEFueSBvdGhlciBhcHBsaWNhdGlvbnMgdGhhdAorCXVzZSB0aGUgZnJhbWVidWZmZXIgd2lsbCByZW1haW4gYXQgdGhlaXIgJ25vcm1hbCdvcmllbnRhdGlvbi4KKwlBY3R1YWxseSwgdGhlIHVuZGVybHlpbmcgZmIgZHJpdmVyIGlzIHRvdGFsbHkgaWdub3JhbnQgb2YgY29uc29sZQorCXJvdGF0aW9uLgorCistLS0KK0FudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IGRlY2RmOTkuLjQyOWRiNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTI1LDYgKzI1LDEzIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0Oglkcml2ZXJzIGRlcGVuZGluZyBvbiBPQlNPTEVURV9PU1NfRFJJVkVSCitXaGVuOglKYW51YXJ5IDIwMDYKK1doeToJT1NTIGRyaXZlcnMgd2l0aCBBTFNBIHJlcGxhY2VtZW50cworV2hvOglBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglSQ1UgQVBJIG1vdmVzIHRvIEVYUE9SVF9TWU1CT0xfR1BMCiBXaGVuOglBcHJpbCAyMDA2CiBGaWxlczoJaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLCBrZXJuZWwvcmN1cGRhdGUuYwpAQCAtNjAsNiArNjcsMjEgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CVZpZGVvNExpbnV4IEFQSSAxIGlvY3RscyBhbmQgdmlkZW9fZGVjb2Rlci5oIGZyb20gVmlkZW8gZGV2aWNlcy4KK1doZW46CUp1bHkgMjAwNgorV2h5OglWNEwxIEFQMSB3YXMgcmVwbGFjZWQgYnkgVjRMMiBBUEkuIGR1cmluZyBtaWdyYXRpb24gZnJvbSAyLjQgdG8gMi42CisJc2VyaWVzLiBUaGUgb2xkIEFQSSBoYXZlIGxvdHMgb2YgZHJhd2JhY2tzIGFuZCBkb24ndCBwcm92aWRlIGVub3VnaAorCW1lYW5zIHRvIHdvcmsgd2l0aCBhbGwgdmlkZW8gYW5kIGF1ZGlvIHN0YW5kYXJkcy4gVGhlIG5ld2VyIEFQSSBpcworCWFscmVhZHkgYXZhaWxhYmxlIG9uIHRoZSBtYWluIGRyaXZlcnMgYW5kIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisJTmV3ZXIgZHJpdmVycyBzaG91bGQgdXNlIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsIGZ1bmN0aW9uIHRvIGhhbmRsZQorCW9sZCBjYWxscywgcmVwbGFjaW5nIHRvIG5ld2VyIG9uZXMuCisJRGVjb2RlciBpb2N0cyBhcmUgdXNpbmcgaW50ZXJuYWxseSB0byBhbGxvdyB2aWRlbyBkcml2ZXJzIHRvCisJY29tbXVuaWNhdGUgd2l0aCB2aWRlbyBkZWNvZGVycy4gVGhpcyBzaG91bGQgYWxzbyBiZSBpbXByb3ZlZCB0byBhbGxvdworCVY0TDIgY2FsbHMgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIGNvbXBhdGlibGUgaW50ZXJuYWwgaW9jdGxzLgorV2hvOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglpMmMgc3lzZnMgbmFtZSBjaGFuZ2U6IGluMV9yZWYsIHZpZCBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBjcHUwX3ZpZAogV2hlbjoJTm92ZW1iZXIgMjAwNQogRmlsZXM6CWRyaXZlcnMvaTJjL2NoaXBzL2FkbTEwMjUuYywgZHJpdmVycy9pMmMvY2hpcHMvYWRtMTAyNi5jCkBAIC0xMTEsMyArMTMzLDEwIEBACiAJdG8gbGluayBhZ2FpbnN0IEFQSS1jb21wYXRpYmxlIGxpYnJhcnkgb24gdG9wIG9mIGxpYm5mbmV0bGlua19xdWV1ZSAKIAlpbnN0ZWFkIG9mIHRoZSBjdXJyZW50ICdsaWJpcHEnLgogV2hvOglIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUVYUE9SVF9TWU1CT0wobG9va3VwX2hhc2gpCitXaGVuOglKYW51YXJ5IDIwMDYKK1doeToJVG9vIGxvdy1sZXZlbCBpbnRlcmZhY2UuICBVc2UgbG9va3VwX29uZV9sZW4gb3IgbG9va3VwX2NyZWF0ZSBpbnN0ZWFkLgorV2hvOglDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CmluZGV4IGQxNjMzNGUuLmE4ZWRiMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dApAQCAtMTcsOCArMTcsNiBAQAogYnNkZGYJCQkoKikJTWFrZXMgYGRmJyBhY3QgbGlrZSBCU0QuCiBtaW5peGRmCQkJCU1ha2VzIGBkZicgYWN0IGxpa2UgTWluaXguCiAKLWNoZWNrCQkJCUNoZWNrIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGF0IG1vdW50IHRpbWUKLQkJCQkocmVxdWlyZXMgQ09ORklHX0VYVDJfQ0hFQ0spLgogY2hlY2s9bm9uZSwgbm9jaGVjawkoKikJRG9uJ3QgZG8gZXh0cmEgY2hlY2tpbmcgb2YgYml0bWFwcyBvbiBtb3VudAogCQkJCShjaGVjaz1ub3JtYWwgYW5kIGNoZWNrPXN0cmljdCBvcHRpb25zIHJlbW92ZWQpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggZTJiNTM2OS4uMjNlNmNjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTExNiwzICsxMTYsMTIyIEBACiAKIE9uY2Ugc3RhcnRlZCB3aXRoIFJVTl9BUlJBWSwgdW5pbml0aWFsaXplZCBzcGFyZXMgY2FuIGJlIGFkZGVkIHdpdGgKIEhPVF9BRERfRElTSy4KKworCisKK01EIGRldmljZXMgaW4gc3lzZnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK21kIGRldmljZXMgYXBwZWFyIGluIHN5c2ZzICgvc3lzKSBhcyByZWd1bGFyIGJsb2NrIGRldmljZXMsCitlLmcuCisgICAvc3lzL2Jsb2NrL21kMAorCitFYWNoICdtZCcgZGV2aWNlIHdpbGwgY29udGFpbiBhIHN1YmRpcmVjdG9yeSBjYWxsZWQgJ21kJyB3aGljaAorY29udGFpbnMgZnVydGhlciBtZC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlLgorCitBbGwgbWQgZGV2aWNlcyBjb250YWluOgorICBsZXZlbAorICAgICBhIHRleHQgZmlsZSBpbmRpY2F0aW5nIHRoZSAncmFpZCBsZXZlbCcuICBUaGlzIG1heSBiZSBhIHN0YW5kYXJkCisgICAgIG51bWVyaWNhbCBsZXZlbCBwcmVmaXhlZCBieSAiUkFJRC0iIC0gZS5nLiAiUkFJRC01Iiwgb3Igc29tZQorICAgICBvdGhlciBuYW1lIHN1Y2ggYXMgImxpbmVhciIgb3IgIm11bHRpcGF0aCIuCisgICAgIElmIG5vIHJhaWQgbGV2ZWwgaGFzIGJlZW4gc2V0IHlldCAoYXJyYXkgaXMgc3RpbGwgYmVpbmcKKyAgICAgYXNzZW1ibGVkKSwgdGhpcyBmaWxlIHdpbGwgYmUgZW1wdHkuCisKKyAgcmFpZF9kaXNrcworICAgICBhIHRleHQgZmlsZSB3aXRoIGEgc2ltcGxlIG51bWJlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZGV2aWNlcworICAgICBpbiBhIGZ1bGx5IGZ1bmN0aW9uYWwgYXJyYXkuICBJZiB0aGlzIGlzIG5vdCB5ZXQga25vd24sIHRoZSBmaWxlCisgICAgIHdpbGwgYmUgZW1wdHkuICBJZiBhbiBhcnJheSBpcyBiZWluZyByZXNpemVkIChub3QgY3VycmVudGx5CisgICAgIHBvc3NpYmxlKSB0aGlzIHdpbGwgY29udGFpbiB0aGUgbGFyZ2VyIG9mIHRoZSBvbGQgYW5kIG5ldyBzaXplcy4KKworQXMgY29tcG9uZW50IGRldmljZXMgYXJlIGFkZGVkIHRvIGFuIG1kIGFycmF5LCB0aGV5IGFwcGVhciBpbiB0aGUgJ21kJworZGlyZWN0b3J5IGFzIG5ldyBkaXJlY3RvcmllcyBuYW1lZAorICAgICAgZGV2LVhYWAord2hlcmUgWFhYIGlzIGEgbmFtZSB0aGF0IHRoZSBrZXJuZWwga25vd3MgZm9yIHRoZSBkZXZpY2UsIGUuZy4gaGRiMS4KK0VhY2ggZGlyZWN0b3J5IGNvbnRhaW5zOgorCisgICAgICBibG9jaworICAgICAgICBhIHN5bWxpbmsgdG8gdGhlIGJsb2NrIGRldmljZSBpbiAvc3lzL2Jsb2NrLCBlLmcuCisJICAgICAvc3lzL2Jsb2NrL21kMC9tZC9kZXYtaGRiMS9ibG9jayAtPiAuLi8uLi8uLi8uLi9ibG9jay9oZGIvaGRiMQorCisgICAgICBzdXBlcgorICAgICAgICBBIGZpbGUgY29udGFpbmluZyBhbiBpbWFnZSBvZiB0aGUgc3VwZXJibG9jayByZWFkIGZyb20sIG9yCisgICAgICAgIHdyaXR0ZW4gdG8sIHRoYXQgZGV2aWNlLgorCisgICAgICBzdGF0ZQorICAgICAgICBBIGZpbGUgcmVjb3JkaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkZXZpY2UgaW4gdGhlIGFycmF5CisJd2hpY2ggY2FuIGJlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKKwkgICAgICBmYXVsdHkgICAtIGRldmljZSBoYXMgYmVlbiBraWNrZWQgZnJvbSBhY3RpdmUgdXNlIGR1ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV0ZWN0ZWQgZmF1bHQKKwkgICAgICBpbl9zeW5jICAtIGRldmljZSBpcyBhIGZ1bGx5IGluLXN5bmMgbWVtYmVyIG9mIHRoZSBhcnJheQorCSAgICAgIHNwYXJlICAgIC0gZGV2aWNlIGlzIHdvcmtpbmcsIGJ1dCBub3QgYSBmdWxsIG1lbWJlci4KKwkJCSBUaGlzIGluY2x1ZGVzIHNwYXJlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcworCQkJIG9mIGJlaW5nIHJlY292ZXJyZWQgdG8KKwlUaGlzIGxpc3QgbWFrZSBncm93IGluIGZ1dHVyZS4KKworCitBbiBhY3RpdmUgbWQgZGV2aWNlIHdpbGwgYWxzbyBjb250YWluIGFuZCBlbnRyeSBmb3IgZWFjaCBhY3RpdmUgZGV2aWNlCitpbiB0aGUgYXJyYXkuICBUaGVzZSBhcmUgbmFtZWQKKworICAgIHJkTk4KKword2hlcmUgJ05OJyBpcyB0aGUgcG9zc2l0aW9uIGluIHRoZSBhcnJheSwgc3RhcnRpbmcgZnJvbSAwLgorU28gZm9yIGEgMyBkcml2ZSBhcnJheSB0aGVyZSB3aWxsIGJlIHJkMCwgcmQxLCByZDIuCitUaGVzZSBhcmUgc3ltYm9saWMgbGlua3MgdG8gdGhlIGFwcHJvcHJpYXRlICdkZXYtWFhYJyBlbnRyeS4KK1RodXMsIGZvciBleGFtcGxlLAorICAgICAgIGNhdCAvc3lzL2Jsb2NrL21kKi9tZC9yZCovc3RhdGUKK3dpbGwgc2hvdyAnaW5fc3luYycgb24gZXZlcnkgbGluZS4KKworCisKK0FjdGl2ZSBtZCBkZXZpY2VzIGZvciBsZXZlbHMgdGhhdCBzdXBwb3J0IGRhdGEgcmVkdW5kYW5jeSAoMSw0LDUsNikKK2Fsc28gaGF2ZQorCisgICBzeW5jX2FjdGlvbgorICAgICBhIHRleHQgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vbml0b3IgYW5kIGNvbnRyb2wgdGhlIHJlYnVpbGQKKyAgICAgcHJvY2Vzcy4gIEl0IGNvbnRhaW5zIG9uZSB3b3JkIHdoaWNoIGNhbiBiZSBvbmUgb2Y6CisgICAgICAgcmVzeW5jICAgICAgICAtIHJlZHVuZGFuY3kgaXMgYmVpbmcgcmVjYWxjdWxhdGVkIGFmdGVyIHVuY2xlYW4KKyAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24gb3IgY3JlYXRpb24KKyAgICAgICByZWNvdmVyICAgICAgIC0gYSBob3Qgc3BhcmUgaXMgYmVpbmcgYnVpbHQgdG8gcmVwbGFjZSBhCisgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZC9taXNzaW5nIGRldmljZQorICAgICAgIGlkbGUgICAgICAgICAgLSBub3RoaW5nIGlzIGhhcHBlbmluZworICAgICAgIGNoZWNrICAgICAgICAgLSBBIGZ1bGwgY2hlY2sgb2YgcmVkdW5kYW5jeSB3YXMgcmVxdWVzdGVkIGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgICBoYXBwZW5pbmcuICBUaGlzIHJlYWRzIGFsbCBibG9jayBhbmQgY2hlY2tzCisgICAgICAgICAgICAgICAgICAgICAgIHRoZW0uIEEgcmVwYWlyIG1heSBhbHNvIGhhcHBlbiBmb3Igc29tZSByYWlkCisgICAgICAgICAgICAgICAgICAgICAgIGxldmVscy4KKyAgICAgICByZXBhaXIgICAgICAgIC0gQSBmdWxsIGNoZWNrIGFuZCByZXBhaXIgaXMgaGFwcGVuaW5nLiAgVGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICBzaW1pbGFyIHRvICdyZXN5bmMnLCBidXQgd2FzIHJlcXVlc3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlciwgYW5kIHRoZSB3cml0ZS1pbnRlbnQgYml0bWFwIGlzIE5PVCB1c2VkIHRvCisJCSAgICAgICBvcHRpbWlzZSB0aGUgcHJvY2Vzcy4KKworICAgICAgVGhpcyBmaWxlIGlzIHdyaXRhYmxlLCBhbmQgZWFjaCBvZiB0aGUgc3RyaW5ncyB0aGF0IGNvdWxkIGJlCisgICAgICByZWFkIGFyZSBtZWFuaW5nZnVsIGZvciB3cml0aW5nLgorCisgICAgICAgJ2lkbGUnIHdpbGwgc3RvcCBhbiBhY3RpdmUgcmVzeW5jL3JlY292ZXJ5IGV0Yy4gIFRoZXJlIGlzIG5vCisgICAgICAgICAgIGd1YXJhbnRlZSB0aGF0IGFub3RoZXIgcmVzeW5jL3JlY292ZXJ5IG1heSBub3QgYmUgYXV0b21hdGljYWxseQorCSAgIHN0YXJ0ZWQgYWdhaW4sIHRob3VnaCBzb21lIGV2ZW50IHdpbGwgYmUgbmVlZGVkIHRvIHRyaWdnZXIKKyAgICAgICAgICAgdGhpcy4KKwkncmVzeW5jJyBvciAncmVjb3ZlcnknIGNhbiBiZSB1c2VkIHRvIHJlc3RhcnQgdGhlCisgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGlmIGl0IHdhcyBzdG9wcGVkIHdpdGggJ2lkbGUnLgorCSdjaGVjaycgYW5kICdyZXBhaXInIHdpbGwgc3RhcnQgdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3MKKyAgICAgICAgICAgcHJvdmlkaW5nIHRoZSBjdXJyZW50IHN0YXRlIGlzICdpZGxlJy4KKworICAgbWlzbWF0Y2hfY291bnQKKyAgICAgIFdoZW4gcGVyZm9ybWluZyAnY2hlY2snIGFuZCAncmVwYWlyJywgYW5kIHBvc3NpYmx5IHdoZW4KKyAgICAgIHBlcmZvcm1pbmcgJ3Jlc3luYycsIG1kIHdpbGwgY291bnQgdGhlIG51bWJlciBvZiBlcnJvcnMgdGhhdCBhcmUKKyAgICAgIGZvdW5kLiAgVGhlIGNvdW50IGluICdtaXNtYXRjaF9jbnQnIGlzIHRoZSBudW1iZXIgb2Ygc2VjdG9ycworICAgICAgdGhhdCB3ZXJlIHJlLXdyaXR0ZW4sIG9yIChmb3IgJ2NoZWNrJykgd291bGQgaGF2ZSBiZWVuCisgICAgICByZS13cml0dGVuLiAgQXMgbW9zdCByYWlkIGxldmVscyB3b3JrIGluIHVuaXRzIG9mIHBhZ2VzIHJhdGhlcgorICAgICAgdGhhbiBzZWN0b3JzLCB0aGlzIG15IGJlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYWN0dWFsIGVycm9ycworICAgICAgYnkgYSBmYWN0b3Igb2YgdGhlIG51bWJlciBvZiBzZWN0b3JzIGluIGEgcGFnZS4KKworRWFjaCBhY3RpdmUgbWQgZGV2aWNlIG1heSBhbHNvIGhhdmUgYXR0cmlidXRlcyBzcGVjaWZpYyB0byB0aGUKK3BlcnNvbmFsaXR5IG1vZHVsZSB0aGF0IG1hbmFnZXMgaXQuCitUaGVzZSBhcmUgc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2R1bGUgYW5kIGNvdWxkCitjaGFuZ2Ugc3Vic3RhbnRpYWxseSBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlcy4KKworVGhlc2UgY3VycmVudGx5IGluY2x1ZGUKKworICBzdHJpcGVfY2FjaGVfc2l6ZSAgKGN1cnJlbnRseSByYWlkNSBvbmx5KQorICAgICAgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHN0cmlwZSBjYWNoZS4gIFRoaXMgaXMgd3JpdGFibGUsIGJ1dAorICAgICAgdGhlcmUgYXJlIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMgKDMyNzY4LCAxNikuICBEZWZhdWx0IGlzIDEyOC4KKyAgc3RyaXBfY2FjaGVfYWN0aXZlIChjdXJyZW50bHkgcmFpZDUgb25seSkKKyAgICAgIG51bWJlciBvZiBhY3RpdmUgZW50cmllcyBpbiB0aGUgc3RyaXBlIGNhY2hlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIxMDAgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIxMDAKaW5kZXggMjA0Njk0OC4uM2FiNDAzNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMTAwCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjEwMApAQCAtMSwyNyArMSw4MiBAQAogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUludGVsKFIpIFBSTy9XaXJlbGVzcyAyMTAwIE5ldHdvcmsgQ29ubmVjdGlvbiBEcml2ZXIgZm9yIExpbnV4CitJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjEwMCBEcml2ZXIgZm9yIExpbnV4IGluIHN1cHBvcnQgb2Y6CisKK0ludGVsKFIpIFBSTy9XaXJlbGVzcyAyMTAwIE5ldHdvcmsgQ29ubmVjdGlvbgorCitDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSwgSW50ZWwgQ29ycG9yYXRpb24KKwogUkVBRE1FLmlwdzIxMDAKIAotTWFyY2ggMTQsIDIwMDUKK1ZlcnNpb246IDEuMS4zCitEYXRlICAgOiBPY3RvYmVyIDE3LCAyMDA1CiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQogSW5kZXgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotMC4gSW50cm9kdWN0aW9uCi0xLiBSZWxlYXNlIDEuMS4wIEN1cnJlbnQgRmVhdHVyZXMKLTIuIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCi0zLiBTeXNmcyBIZWxwZXIgRmlsZXMKLTQuIFJhZGlvIEtpbGwgU3dpdGNoCi01LiBEeW5hbWljIEZpcm13YXJlCi02LiBQb3dlciBNYW5hZ2VtZW50Ci03LiBTdXBwb3J0Ci04LiBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMC4gSU1QT1JUQU5UIElORk9STUFUSU9OIEJFRk9SRSBVU0lORyBUSElTIERSSVZFUgorMS4gSW50cm9kdWN0aW9uCisyLiBSZWxlYXNlIDEuMS4zIEN1cnJlbnQgRmVhdHVyZXMKKzMuIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCis0LiBTeXNmcyBIZWxwZXIgRmlsZXMKKzUuIFJhZGlvIEtpbGwgU3dpdGNoCis2LiBEeW5hbWljIEZpcm13YXJlCis3LiBQb3dlciBNYW5hZ2VtZW50Cis4LiBTdXBwb3J0Cis5LiBMaWNlbnNlCiAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0wLiBJbnRyb2R1Y3Rpb24KLS0tLS0tLS0tLS0tLSAtLS0tLSAgIC0tLS0tICAgICAgIC0tLS0gICAgICAgLS0tICAgICAgIC0tICAgICAgICAgLSAgICAgCiswLiAgIElNUE9SVEFOVCBJTkZPUk1BVElPTiBCRUZPUkUgVVNJTkcgVEhJUyBEUklWRVIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ltcG9ydGFudCBOb3RpY2UgRk9SIEFMTCBVU0VSUyBPUiBESVNUUklCVVRPUlMhISEhCisKK0ludGVsIHdpcmVsZXNzIExBTiBhZGFwdGVycyBhcmUgZW5naW5lZXJlZCwgbWFudWZhY3R1cmVkLCB0ZXN0ZWQsIGFuZAorcXVhbGl0eSBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IHRoZXkgbWVldCBhbGwgbmVjZXNzYXJ5IGxvY2FsIGFuZAorZ292ZXJubWVudGFsIHJlZ3VsYXRvcnkgYWdlbmN5IHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlZ2lvbnMgdGhhdCB0aGV5CithcmUgZGVzaWduYXRlZCBhbmQvb3IgbWFya2VkIHRvIHNoaXAgaW50by4gU2luY2Ugd2lyZWxlc3MgTEFOcyBhcmUKK2dlbmVyYWxseSB1bmxpY2Vuc2VkIGRldmljZXMgdGhhdCBzaGFyZSBzcGVjdHJ1bSB3aXRoIHJhZGFycywKK3NhdGVsbGl0ZXMsIGFuZCBvdGhlciBsaWNlbnNlZCBhbmQgdW5saWNlbnNlZCBkZXZpY2VzLCBpdCBpcyBzb21ldGltZXMKK25lY2Vzc2FyeSB0byBkeW5hbWljYWxseSBkZXRlY3QsIGF2b2lkLCBhbmQgbGltaXQgdXNhZ2UgdG8gYXZvaWQKK2ludGVyZmVyZW5jZSB3aXRoIHRoZXNlIGRldmljZXMuIEluIG1hbnkgaW5zdGFuY2VzIEludGVsIGlzIHJlcXVpcmVkIHRvCitwcm92aWRlIHRlc3QgZGF0YSB0byBwcm92ZSByZWdpb25hbCBhbmQgbG9jYWwgY29tcGxpYW5jZSB0byByZWdpb25hbCBhbmQKK2dvdmVybm1lbnRhbCByZWd1bGF0aW9ucyBiZWZvcmUgY2VydGlmaWNhdGlvbiBvciBhcHByb3ZhbCB0byB1c2UgdGhlCitwcm9kdWN0IGlzIGdyYW50ZWQuIEludGVsJ3Mgd2lyZWxlc3MgTEFOJ3MgRUVQUk9NLCBmaXJtd2FyZSwgYW5kCitzb2Z0d2FyZSBkcml2ZXIgYXJlIGRlc2lnbmVkIHRvIGNhcmVmdWxseSBjb250cm9sIHBhcmFtZXRlcnMgdGhhdCBhZmZlY3QKK3JhZGlvIG9wZXJhdGlvbiBhbmQgdG8gZW5zdXJlIGVsZWN0cm9tYWduZXRpYyBjb21wbGlhbmNlIChFTUMpLiBUaGVzZQorcGFyYW1ldGVycyBpbmNsdWRlLCB3aXRob3V0IGxpbWl0YXRpb24sIFJGIHBvd2VyLCBzcGVjdHJ1bSB1c2FnZSwKK2NoYW5uZWwgc2Nhbm5pbmcsIGFuZCBodW1hbiBleHBvc3VyZS4KKworRm9yIHRoZXNlIHJlYXNvbnMgSW50ZWwgY2Fubm90IHBlcm1pdCBhbnkgbWFuaXB1bGF0aW9uIGJ5IHRoaXJkIHBhcnRpZXMKK29mIHRoZSBzb2Z0d2FyZSBwcm92aWRlZCBpbiBiaW5hcnkgZm9ybWF0IHdpdGggdGhlIHdpcmVsZXNzIFdMQU4KK2FkYXB0ZXJzIChlLmcuLCB0aGUgRUVQUk9NIGFuZCBmaXJtd2FyZSkuIEZ1cnRoZXJtb3JlLCBpZiB5b3UgdXNlIGFueQorcGF0Y2hlcywgdXRpbGl0aWVzLCBvciBjb2RlIHdpdGggdGhlIEludGVsIHdpcmVsZXNzIExBTiBhZGFwdGVycyB0aGF0CitoYXZlIGJlZW4gbWFuaXB1bGF0ZWQgYnkgYW4gdW5hdXRob3JpemVkIHBhcnR5IChpLmUuLCBwYXRjaGVzLAordXRpbGl0aWVzLCBvciBjb2RlIChpbmNsdWRpbmcgb3BlbiBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zKSB3aGljaCBoYXZlCitub3QgYmVlbiB2YWxpZGF0ZWQgYnkgSW50ZWwpLCAoaSkgeW91IHdpbGwgYmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhlIHJlZ3VsYXRvcnkgY29tcGxpYW5jZSBvZiB0aGUgcHJvZHVjdHMsIChpaSkgSW50ZWwgd2lsbCBiZWFyCitubyBsaWFiaWxpdHksIHVuZGVyIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5IGZvciBhbnkgaXNzdWVzIGFzc29jaWF0ZWQKK3dpdGggdGhlIG1vZGlmaWVkIHByb2R1Y3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjbGFpbXMgdW5kZXIKK3RoZSB3YXJyYW50eSBhbmQvb3IgaXNzdWVzIGFyaXNpbmcgZnJvbSByZWd1bGF0b3J5IG5vbi1jb21wbGlhbmNlLCBhbmQKKyhpaWkpIEludGVsIHdpbGwgbm90IHByb3ZpZGUgb3IgYmUgcmVxdWlyZWQgdG8gYXNzaXN0IGluIHByb3ZpZGluZworc3VwcG9ydCB0byBhbnkgdGhpcmQgcGFydGllcyBmb3Igc3VjaCBtb2RpZmllZCBwcm9kdWN0cy4KKworTm90ZTogTWFueSByZWd1bGF0b3J5IGFnZW5jaWVzIGNvbnNpZGVyIFdpcmVsZXNzIExBTiBhZGFwdGVycyB0byBiZQorbW9kdWxlcywgYW5kIGFjY29yZGluZ2x5LCBjb25kaXRpb24gc3lzdGVtLWxldmVsIHJlZ3VsYXRvcnkgYXBwcm92YWwKK3Vwb24gcmVjZWlwdCBhbmQgcmV2aWV3IG9mIHRlc3QgZGF0YSBkb2N1bWVudGluZyB0aGF0IHRoZSBhbnRlbm5hcyBhbmQKK3N5c3RlbSBjb25maWd1cmF0aW9uIGRvIG5vdCBjYXVzZSB0aGUgRU1DIGFuZCByYWRpbyBvcGVyYXRpb24gdG8gYmUKK25vbi1jb21wbGlhbnQuCisKK1RoZSBkcml2ZXJzIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgZnJvbSBTb3VyY2VGb3JnZSBhcmUgcHJvdmlkZWQgYXMgYQorcGFydCBvZiBhIGRldmVsb3BtZW50IHByb2plY3QuICBDb25mb3JtYW5jZSB0byBsb2NhbCByZWd1bGF0b3J5CityZXF1aXJlbWVudHMgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbmRpdmlkdWFsIGRldmVsb3Blci4gIEFzCitzdWNoLCBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZGVwbG95aW5nIG9yIHNoaXBwaW5nIGEgZHJpdmVyIGFzIHBhcnQgb2YKK3NvbHV0aW9uIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gZGV2ZWxvcG1lbnQsIHBsZWFzZQorb2J0YWluIGEgdGVzdGVkIGRyaXZlciBmcm9tIEludGVsIEN1c3RvbWVyIFN1cHBvcnQgYXQ6CisKK2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25vdGVib29rL3NiL0NTLTAwNjQwOC5odG0KKworCisxLiBJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSAKIElQVzIxMDAgZHJpdmVyIHByb2plY3QuICBUaGUgbWFpbiBwcm9qZWN0IHdlYnNpdGUsIHdoZXJlIHRoZSBsYXRlc3QgCkBAIC0zNCw5ICs4OSw4IEBACiBmb3IgdGhlIGRyaXZlciBwcm9qZWN0LgogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMS4gUmVsZWFzZSAxLjEuMCBDdXJyZW50IFN1cHBvcnRlZCBGZWF0dXJlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAKKzIuIFJlbGVhc2UgMS4xLjMgQ3VycmVudCBTdXBwb3J0ZWQgRmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtIE1hbmFnZWQgKEJTUykgYW5kIEFkLUhvYyAoSUJTUykKIC0gV0VQIChzaGFyZWQga2V5IGFuZCBvcGVuKQogLSBXaXJlbGVzcyBUb29scyBzdXBwb3J0IApAQCAtNTEsOSArMTA1LDggQEAKIHBlcmZvcm1lZCBvbiBhIGdpdmVuIGZlYXR1cmUuCiAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0yLiBDb21tYW5kIExpbmUgUGFyYW1ldGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAKKzMuIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHVzZWQKIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBjb21tYW5kIHVzaW5nIHRoaXMKQEAgLTc1LDkgKzEyOCw5IEBACiBkaXNhYmxlCQlib29sZWFuCQlkaXNhYmxlPTEgLyogRG8gbm90IHBvd2VyIHRoZSBIVyAqLwogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMy4gU3lzZnMgSGVscGVyIEZpbGVzCis0LiBTeXNmcyBIZWxwZXIgRmlsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoZSBkcml2ZXIuICBNYW55IG9mIHRoZSAKIGdlbmVyYWwgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlIFdpcmVsZXNzIFRvb2xzIChpd2NvbmZpZykuICBUaGVyZQpAQCAtMTIwLDkgKzE3Myw4IEBACiAgIAliYXNlZCBSRiBraWxsIGZyb20gT04gLT4gT0ZGIC0+IE9OLCB0aGUgcmFkaW8gd2lsbCBOT1QgY29tZSBiYWNrIG9uCiAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci00LiBSYWRpbyBLaWxsIFN3aXRjaAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis1LiBSYWRpbyBLaWxsIFN3aXRjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1vc3QgbGFwdG9wcyBwcm92aWRlIHRoZSBhYmlsaXR5IGZvciB0aGUgdXNlciB0byBwaHlzaWNhbGx5IGRpc2FibGUgdGhlIHJhZGlvLgogU29tZSB2ZW5kb3JzIGhhdmUgaW1wbGVtZW50ZWQgdGhpcyBhcyBhIHBoeXNpY2FsIHN3aXRjaCB0aGF0IHJlcXVpcmVzIG5vCiBzb2Z0d2FyZSB0byB0dXJuIHRoZSByYWRpbyBvZmYgYW5kIG9uLiAgT24gb3RoZXIgbGFwdG9wcywgaG93ZXZlciwgdGhlIHN3aXRjaApAQCAtMTM0LDkgKzE4Niw4IEBACiBvbiB5b3VyIHN5c3RlbS4KIAogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTUuIER5bmFtaWMgRmlybXdhcmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCis2LiBEeW5hbWljIEZpcm13YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQXMgdGhlIGZpcm13YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIGEgcmVzdHJpY3RlZCB1c2UgbGljZW5zZSwgaXQgY2FuIG5vdCBiZSAKIGluY2x1ZGVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZXMuICBUbyBlbmFibGUgdGhlIElQVzIxMDAgeW91IHdpbGwgbmVlZCBhIAogZmlybXdhcmUgaW1hZ2UgdG8gbG9hZCBpbnRvIHRoZSB3aXJlbGVzcyBOSUMncyBwcm9jZXNzb3JzLgpAQCAtMTQ2LDkgKzE5Nyw4IEBACiBTZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGluc3RhbGxpbmcgdGhlIGZpcm13YXJlLgogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotNi4gUG93ZXIgTWFuYWdlbWVudAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAKKzcuIFBvd2VyIE1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUaGUgSVBXMjEwMCBzdXBwb3J0cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgUG93ZXIgU2F2ZSBQcm90b2NvbCAKIHRocm91Z2ggYSBwcml2YXRlIHdpcmVsZXNzIGV4dGVuc2lvbiBpbnRlcmZhY2UuICBUaGUgSVBXMjEwMCBzdXBwb3J0cyAKIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW50IG1vZGVzOgpAQCAtMjAwLDkgKzI1MCw4IEBACiBsZXZlbCBpZiBgaXdjb25maWcgZXRoMSBwb3dlciBvbmAgaXMgaW52b2tlZC4KIAogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTcuIFN1cHBvcnQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCis4LiBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBGb3IgZ2VuZXJhbCBkZXZlbG9wbWVudCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydCwKIGdvIHRvOgpAQCAtMjE4LDkgKzI2Nyw4IEBACiAKICAgICBodHRwOi8vc3VwcG9ydG1haWwuaW50ZWwuY29tCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOC4gTGljZW5zZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAKKzkuIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKaW5kZXggNjkxNjA4MC4uYzY0OTJkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMApAQCAtMSwzMyArMSw4OSBAQAogCiBJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGluIHN1cHBvcnQgb2Y6CiAKLUludGVsKFIpIFBSTy9XaXJlbGVzcyAyMjAwQkcgTmV0d29yayBDb25uZWN0aW9uIAotSW50ZWwoUikgUFJPL1dpcmVsZXNzIDI5MTVBQkcgTmV0d29yayBDb25uZWN0aW9uIAorSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIyMDBCRyBOZXR3b3JrIENvbm5lY3Rpb24KK0ludGVsKFIpIFBSTy9XaXJlbGVzcyAyOTE1QUJHIE5ldHdvcmsgQ29ubmVjdGlvbgogCi1Ob3RlOiBUaGUgSW50ZWwoUikgUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBhbmQgSW50ZWwoUikgCi1QUk8vV2lyZWxlc3MgMjIwMEJHIERyaXZlciBmb3IgTGludXggaXMgYSB1bmlmaWVkIGRyaXZlciB0aGF0IHdvcmtzIG9uIAotYm90aCBoYXJkd2FyZSBhZGFwdGVycyBsaXN0ZWQgYWJvdmUuIEluIHRoaXMgZG9jdW1lbnQgdGhlIEludGVsKFIpIAotUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCB3aWxsIGJlIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSAKK05vdGU6IFRoZSBJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGFuZCBJbnRlbChSKQorUFJPL1dpcmVsZXNzIDIyMDBCRyBEcml2ZXIgZm9yIExpbnV4IGlzIGEgdW5pZmllZCBkcml2ZXIgdGhhdCB3b3JrcyBvbgorYm90aCBoYXJkd2FyZSBhZGFwdGVycyBsaXN0ZWQgYWJvdmUuIEluIHRoaXMgZG9jdW1lbnQgdGhlIEludGVsKFIpCitQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IHdpbGwgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlCiB1bmlmaWVkIGRyaXZlci4KIAogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIEludGVsIENvcnBvcmF0aW9uCiAKIFJFQURNRS5pcHcyMjAwCiAKLVZlcnNpb246IDEuMC4wCi1EYXRlICAgOiBKYW51YXJ5IDMxLCAyMDA1CitWZXJzaW9uOiAxLjAuOAorRGF0ZSAgIDogT2N0b2JlciAyMCwgMjAwNQogCiAKIEluZGV4CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMC4gICBJTVBPUlRBTlQgSU5GT1JNQVRJT04gQkVGT1JFIFVTSU5HIFRISVMgRFJJVkVSCiAxLiAgIEludHJvZHVjdGlvbgogMS4xLiBPdmVydmlldyBvZiBmZWF0dXJlcwogMS4yLiBNb2R1bGUgcGFyYW1ldGVycwogMS4zLiBXaXJlbGVzcyBFeHRlbnNpb24gUHJpdmF0ZSBNZXRob2RzCiAxLjQuIFN5c2ZzIEhlbHBlciBGaWxlcwotMi4gICBBYm91dCB0aGUgVmVyc2lvbiBOdW1iZXJzCi0zLiAgIFN1cHBvcnQKLTQuICAgTGljZW5zZQorMi4gICBBZC1Ib2MgTmV0d29ya2luZworMy4gICBJbnRlcmFjdGluZyB3aXRoIFdpcmVsZXNzIFRvb2xzCiszLjEuIGl3Y29uZmlnIG1vZGUKKzQuICAgQWJvdXQgdGhlIFZlcnNpb24gTnVtYmVycworNS4gICBGaXJtd2FyZSBpbnN0YWxsYXRpb24KKzYuICAgU3VwcG9ydAorNy4gICBMaWNlbnNlCisKKworMC4gICBJTVBPUlRBTlQgSU5GT1JNQVRJT04gQkVGT1JFIFVTSU5HIFRISVMgRFJJVkVSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbXBvcnRhbnQgTm90aWNlIEZPUiBBTEwgVVNFUlMgT1IgRElTVFJJQlVUT1JTISEhISAKKworSW50ZWwgd2lyZWxlc3MgTEFOIGFkYXB0ZXJzIGFyZSBlbmdpbmVlcmVkLCBtYW51ZmFjdHVyZWQsIHRlc3RlZCwgYW5kCitxdWFsaXR5IGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgdGhleSBtZWV0IGFsbCBuZWNlc3NhcnkgbG9jYWwgYW5kCitnb3Zlcm5tZW50YWwgcmVndWxhdG9yeSBhZ2VuY3kgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVnaW9ucyB0aGF0IHRoZXkKK2FyZSBkZXNpZ25hdGVkIGFuZC9vciBtYXJrZWQgdG8gc2hpcCBpbnRvLiBTaW5jZSB3aXJlbGVzcyBMQU5zIGFyZQorZ2VuZXJhbGx5IHVubGljZW5zZWQgZGV2aWNlcyB0aGF0IHNoYXJlIHNwZWN0cnVtIHdpdGggcmFkYXJzLAorc2F0ZWxsaXRlcywgYW5kIG90aGVyIGxpY2Vuc2VkIGFuZCB1bmxpY2Vuc2VkIGRldmljZXMsIGl0IGlzIHNvbWV0aW1lcworbmVjZXNzYXJ5IHRvIGR5bmFtaWNhbGx5IGRldGVjdCwgYXZvaWQsIGFuZCBsaW1pdCB1c2FnZSB0byBhdm9pZAoraW50ZXJmZXJlbmNlIHdpdGggdGhlc2UgZGV2aWNlcy4gSW4gbWFueSBpbnN0YW5jZXMgSW50ZWwgaXMgcmVxdWlyZWQgdG8KK3Byb3ZpZGUgdGVzdCBkYXRhIHRvIHByb3ZlIHJlZ2lvbmFsIGFuZCBsb2NhbCBjb21wbGlhbmNlIHRvIHJlZ2lvbmFsIGFuZAorZ292ZXJubWVudGFsIHJlZ3VsYXRpb25zIGJlZm9yZSBjZXJ0aWZpY2F0aW9uIG9yIGFwcHJvdmFsIHRvIHVzZSB0aGUKK3Byb2R1Y3QgaXMgZ3JhbnRlZC4gSW50ZWwncyB3aXJlbGVzcyBMQU4ncyBFRVBST00sIGZpcm13YXJlLCBhbmQKK3NvZnR3YXJlIGRyaXZlciBhcmUgZGVzaWduZWQgdG8gY2FyZWZ1bGx5IGNvbnRyb2wgcGFyYW1ldGVycyB0aGF0IGFmZmVjdAorcmFkaW8gb3BlcmF0aW9uIGFuZCB0byBlbnN1cmUgZWxlY3Ryb21hZ25ldGljIGNvbXBsaWFuY2UgKEVNQykuIFRoZXNlCitwYXJhbWV0ZXJzIGluY2x1ZGUsIHdpdGhvdXQgbGltaXRhdGlvbiwgUkYgcG93ZXIsIHNwZWN0cnVtIHVzYWdlLAorY2hhbm5lbCBzY2FubmluZywgYW5kIGh1bWFuIGV4cG9zdXJlLiAKKworRm9yIHRoZXNlIHJlYXNvbnMgSW50ZWwgY2Fubm90IHBlcm1pdCBhbnkgbWFuaXB1bGF0aW9uIGJ5IHRoaXJkIHBhcnRpZXMKK29mIHRoZSBzb2Z0d2FyZSBwcm92aWRlZCBpbiBiaW5hcnkgZm9ybWF0IHdpdGggdGhlIHdpcmVsZXNzIFdMQU4KK2FkYXB0ZXJzIChlLmcuLCB0aGUgRUVQUk9NIGFuZCBmaXJtd2FyZSkuIEZ1cnRoZXJtb3JlLCBpZiB5b3UgdXNlIGFueQorcGF0Y2hlcywgdXRpbGl0aWVzLCBvciBjb2RlIHdpdGggdGhlIEludGVsIHdpcmVsZXNzIExBTiBhZGFwdGVycyB0aGF0CitoYXZlIGJlZW4gbWFuaXB1bGF0ZWQgYnkgYW4gdW5hdXRob3JpemVkIHBhcnR5IChpLmUuLCBwYXRjaGVzLAordXRpbGl0aWVzLCBvciBjb2RlIChpbmNsdWRpbmcgb3BlbiBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zKSB3aGljaCBoYXZlCitub3QgYmVlbiB2YWxpZGF0ZWQgYnkgSW50ZWwpLCAoaSkgeW91IHdpbGwgYmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhlIHJlZ3VsYXRvcnkgY29tcGxpYW5jZSBvZiB0aGUgcHJvZHVjdHMsIChpaSkgSW50ZWwgd2lsbCBiZWFyCitubyBsaWFiaWxpdHksIHVuZGVyIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5IGZvciBhbnkgaXNzdWVzIGFzc29jaWF0ZWQKK3dpdGggdGhlIG1vZGlmaWVkIHByb2R1Y3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjbGFpbXMgdW5kZXIKK3RoZSB3YXJyYW50eSBhbmQvb3IgaXNzdWVzIGFyaXNpbmcgZnJvbSByZWd1bGF0b3J5IG5vbi1jb21wbGlhbmNlLCBhbmQKKyhpaWkpIEludGVsIHdpbGwgbm90IHByb3ZpZGUgb3IgYmUgcmVxdWlyZWQgdG8gYXNzaXN0IGluIHByb3ZpZGluZworc3VwcG9ydCB0byBhbnkgdGhpcmQgcGFydGllcyBmb3Igc3VjaCBtb2RpZmllZCBwcm9kdWN0cy4gIAorCitOb3RlOiBNYW55IHJlZ3VsYXRvcnkgYWdlbmNpZXMgY29uc2lkZXIgV2lyZWxlc3MgTEFOIGFkYXB0ZXJzIHRvIGJlCittb2R1bGVzLCBhbmQgYWNjb3JkaW5nbHksIGNvbmRpdGlvbiBzeXN0ZW0tbGV2ZWwgcmVndWxhdG9yeSBhcHByb3ZhbAordXBvbiByZWNlaXB0IGFuZCByZXZpZXcgb2YgdGVzdCBkYXRhIGRvY3VtZW50aW5nIHRoYXQgdGhlIGFudGVubmFzIGFuZAorc3lzdGVtIGNvbmZpZ3VyYXRpb24gZG8gbm90IGNhdXNlIHRoZSBFTUMgYW5kIHJhZGlvIG9wZXJhdGlvbiB0byBiZQorbm9uLWNvbXBsaWFudC4KKworVGhlIGRyaXZlcnMgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIFNvdXJjZUZvcmdlIGFyZSBwcm92aWRlZCBhcyBhIAorcGFydCBvZiBhIGRldmVsb3BtZW50IHByb2plY3QuICBDb25mb3JtYW5jZSB0byBsb2NhbCByZWd1bGF0b3J5IAorcmVxdWlyZW1lbnRzIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgaW5kaXZpZHVhbCBkZXZlbG9wZXIuICBBcyAKK3N1Y2gsIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBkZXBsb3lpbmcgb3Igc2hpcHBpbmcgYSBkcml2ZXIgYXMgcGFydCBvZiAKK3NvbHV0aW9uIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gZGV2ZWxvcG1lbnQsIHBsZWFzZSAKK29idGFpbiBhIHRlc3RlZCBkcml2ZXIgZnJvbSBJbnRlbCBDdXN0b21lciBTdXBwb3J0IGF0OgorCitodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9ub3RlYm9vay9zYi9DUy0wMDY0MDguaHRtCiAKIAogMS4gICBJbnRyb2R1Y3Rpb24KQEAgLTQ1LDcgKzEwMSw3IEBACiAKIDEuMS4gT3ZlcnZpZXcgb2YgRmVhdHVyZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgY3VycmVudCByZWxlYXNlICgxLjAuMCkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKK1RoZSBjdXJyZW50IHJlbGVhc2UgKDEuMC44KSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgogCiArIEJTUyBtb2RlIChJbmZyYXN0cnVjdHVyZSwgTWFuYWdlZCkKICsgSUJTUyBtb2RlIChBZC1Ib2MpCkBAIC01NiwxNyArMTEyLDI3IEBACiArIEZ1bGwgQSByYXRlIHN1cHBvcnQgKDI5MTUgb25seSkKICsgVHJhbnNtaXQgcG93ZXIgY29udHJvbAogKyBTIHN0YXRlIHN1cHBvcnQgKEFDUEkgc3VzcGVuZC9yZXN1bWUpCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGN1cnJlbnRseSBlbmFibGVkLCBidXQgbm90IG9mZmljaWFsbHkKK3N1cHBvcnRlZDoKKworKyBXUEEKICsgbG9uZy9zaG9ydCBwcmVhbWJsZSBzdXBwb3J0CisrIE1vbml0b3IgbW9kZSAoYWthIFJGTW9uKQorCitUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiBvZmZpY2lhbGx5IHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBpcyBhIHJlZmxlY3Rpb24gCitvbiB0aGUgYW1vdW50IG9mIHZhbGlkYXRpb24gYW5kIGludGVyb3BlcmFiaWxpdHkgdGVzdGluZyB0aGF0IGhhcyBiZWVuCitwZXJmb3JtZWQgb24gYSBnaXZlbiBmZWF0dXJlLiAKIAogCiAKIDEuMi4gQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxpa2UgbWFueSBtb2R1bGVzIHVzZWQgaW4gdGhlIExpbnV4IGtlcm5lbCwgdGhlIEludGVsKFIpIFBSTy9XaXJlbGVzcyAKLTI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBhbGxvd3MgY2VydGFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgCi1wcm92aWRlZCBhcyBtb2R1bGUgcGFyYW1ldGVycy4gIFRoZSBtb3N0IGNvbW1vbiB3YXkgdG8gc3BlY2lmeSBhIG1vZHVsZSAKLXBhcmFtZXRlciBpcyB2aWEgdGhlIGNvbW1hbmQgbGluZS4gIAorTGlrZSBtYW55IG1vZHVsZXMgdXNlZCBpbiB0aGUgTGludXgga2VybmVsLCB0aGUgSW50ZWwoUikgUFJPL1dpcmVsZXNzCisyOTE1QUJHIERyaXZlciBmb3IgTGludXggYWxsb3dzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBwcm92aWRlZCAKK2FzIG1vZHVsZSBwYXJhbWV0ZXJzLiAgVGhlIG1vc3QgY29tbW9uIHdheSB0byBzcGVjaWZ5IGEgbW9kdWxlIHBhcmFtZXRlciAKK2lzIHZpYSB0aGUgY29tbWFuZCBsaW5lLiAgCiAKIFRoZSBnZW5lcmFsIGZvcm0gaXM6CiAKQEAgLTk2LDE0ICsxNjIsMTggQEAKIAogICBkZWJ1ZwogCUlmIHVzaW5nIGEgZGVidWcgYnVpbGQsIHRoaXMgaXMgdXNlZCB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZGVidWcKLQlpbmZvIGlzIGxvZ2dlZC4gIFNlZSB0aGUgJ2R2YWwnIGFuZCAnbG9hZCcgc2NyaXB0IGZvciBtb3JlIGluZm8gb24KLQlob3cgdG8gdXNlIHRoaXMgKHRoZSBkdmFsIGFuZCBsb2FkIHNjcmlwdHMgYXJlIHByb3ZpZGVkIGFzIHBhcnQgCisJaW5mbyBpcyBsb2dnZWQuICBTZWUgdGhlICdkdmFscycgYW5kICdsb2FkJyBzY3JpcHQgZm9yIG1vcmUgaW5mbyBvbgorCWhvdyB0byB1c2UgdGhpcyAodGhlIGR2YWxzIGFuZCBsb2FkIHNjcmlwdHMgYXJlIHByb3ZpZGVkIGFzIHBhcnQgCiAJb2YgdGhlIGlwdzIyMDAgZGV2ZWxvcG1lbnQgc25hcHNob3QgcmVsZWFzZXMgYXZhaWxhYmxlIGZyb20gdGhlIAogCVNvdXJjZUZvcmdlIHByb2plY3QgYXQgaHR0cDovL2lwdzIyMDAuc2YubmV0KQorICAKKyAgbGVkCisJQ2FuIGJlIHVzZWQgdG8gdHVybiBvbiBleHBlcmltZW50YWwgTEVEIGNvZGUuCisJMCA9IE9mZiwgMSA9IE9uLiAgRGVmYXVsdCBpcyAwLgogCiAgIG1vZGUKIAlDYW4gYmUgdXNlZCB0byBzZXQgdGhlIGRlZmF1bHQgbW9kZSBvZiB0aGUgYWRhcHRlci4gIAotCTAgPSBNYW5hZ2VkLCAxID0gQWQtSG9jCisJMCA9IE1hbmFnZWQsIDEgPSBBZC1Ib2MsIDIgPSBNb25pdG9yCiAKIAogMS4zLiBXaXJlbGVzcyBFeHRlbnNpb24gUHJpdmF0ZSBNZXRob2RzCkBAIC0xNjQsOCArMjM0LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBMaW51eCBrZXJuZWwgcHJvdmlkZXMgYSBwc2V1ZG8gZmlsZSBzeXN0ZW0gdGhhdCBjYW4gYmUgdXNlZCB0byAKLWFjY2VzcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBUaGUgSW50ZWwoUikgCi1QUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGV4cG9zZXMgc2V2ZXJhbCBjb25maWd1cmF0aW9uIAorYWNjZXNzIHZhcmlvdXMgY29tcG9uZW50cyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBJbnRlbChSKQorUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBleHBvc2VzIHNldmVyYWwgY29uZmlndXJhdGlvbgogcGFyYW1ldGVycyB0aHJvdWdoIHRoaXMgbWVjaGFuaXNtLgogCiBBbiBlbnRyeSBpbiB0aGUgc3lzZnMgY2FuIHN1cHBvcnQgcmVhZGluZyBhbmQvb3Igd3JpdGluZy4gIFlvdSBjYW4gCkBAIC0xODQsMTMgKzI1NCwxMyBAQAogCiBXaGVyZSAkVkFMVUUgd291bGQgYmUgYSBudW1iZXIgaW4gdGhlIGNhc2Ugb2YgdGhpcyBzeXNmcyBlbnRyeS4gIFRoZSAKIGlucHV0IHRvIHN5c2ZzIGZpbGVzIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBudW1iZXIuICBGb3IgZXhhbXBsZSwgdGhlIAotZmlybXdhcmUgbG9hZGVyIHVzZWQgYnkgaG90cGx1ZyB1dGlsaXplcyBzeXNmcyBlbnRyaWVzIGZvciB0cmFuc2ZlcnJpbmcgCitmaXJtd2FyZSBsb2FkZXIgdXNlZCBieSBob3RwbHVnIHV0aWxpemVzIHN5c2ZzIGVudHJpZXMgZm9yIHRyYW5zZmVyaW5nIAogdGhlIGZpcm13YXJlIGltYWdlIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBkcml2ZXIuCiAKIFRoZSBJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGV4cG9zZXMgc3lzZnMgZW50cmllcyAKLWF0IHR3byBsZXZlbHMgLS0gZHJpdmVyIGxldmVsLCB3aGljaCBhcHBseSB0byBhbGwgaW5zdGFuY2VzIG9mIHRoZSAKLWRyaXZlciAoaW4gdGhlIGV2ZW50IHRoYXQgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGluc3RhbGxlZCkgYW5kIAotZGV2aWNlIGxldmVsLCB3aGljaCBhcHBsaWVzIG9ubHkgdG8gdGhlIHNpbmdsZSBzcGVjaWZpYyBpbnN0YW5jZS4KK2F0IHR3byBsZXZlbHMgLS0gZHJpdmVyIGxldmVsLCB3aGljaCBhcHBseSB0byBhbGwgaW5zdGFuY2VzIG9mIHRoZSBkcml2ZXIgCisoaW4gdGhlIGV2ZW50IHRoYXQgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGluc3RhbGxlZCkgYW5kIGRldmljZSAKK2xldmVsLCB3aGljaCBhcHBsaWVzIG9ubHkgdG8gdGhlIHNpbmdsZSBzcGVjaWZpYyBpbnN0YW5jZS4KIAogCiAxLjQuMSBEcml2ZXIgTGV2ZWwgU3lzZnMgSGVscGVyIEZpbGVzCkBAIC0yMDMsNiArMjczLDcgQEAKIAlUaGlzIGNvbnRyb2xzIHRoZSBzYW1lIGdsb2JhbCBhcyB0aGUgJ2RlYnVnJyBtb2R1bGUgcGFyYW1ldGVyCiAKIAorCiAxLjQuMiBEZXZpY2UgTGV2ZWwgU3lzZnMgSGVscGVyIEZpbGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMTMsNyArMjg0LDcgQEAKIEZvciBleGFtcGxlOgogCS9zeXMvYnVzL3BjaS9kcml2ZXJzL2lwdzIyMDAvMDAwMDowMjowMS4wCiAKLUZvciB0aGUgZGV2aWNlIGxldmVsIGZpbGVzLCBzZWUgL3N5cy9idXMvcGNpL1tkcml2ZXJzL2lwdzIyMDA6CitGb3IgdGhlIGRldmljZSBsZXZlbCBmaWxlcywgc2VlIC9zeXMvYnVzL3BjaS9kcml2ZXJzL2lwdzIyMDA6CiAKICAgcmZfa2lsbAogCXJlYWQgLSAKQEAgLTIzMSw4ICszMDIsNTkgQEAKICAgdWNvZGUgCiAJcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgdWNvZGUgdmVyc2lvbiBudW1iZXIKIAorICBsZWQKKwlyZWFkIC0KKwkwID0gTEVEIGNvZGUgZGlzYWJsZWQKKwkxID0gTEVEIGNvZGUgZW5hYmxlZAorCXdyaXRlIC0KKwkwID0gRGlzYWJsZSBMRUQgY29kZQorCTEgPSBFbmFibGUgTEVEIGNvZGUKIAotMi4gICBBYm91dCB0aGUgVmVyc2lvbiBOdW1iZXJzCisJTk9URTogVGhlIExFRCBjb2RlIGhhcyBiZWVuIHJlcG9ydGVkIHRvIGhhbmcgc29tZSBzeXN0ZW1zIHdoZW4gCisJcnVubmluZyBpZmNvbmZpZyBhbmQgaXMgdGhlcmVmb3JlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKKworMi4gICBBZC1Ib2MgTmV0d29ya2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB1c2luZyBhIGRldmljZSBpbiBhbiBBZC1Ib2MgbmV0d29yaywgaXQgaXMgdXNlZnVsIHRvIHVuZGVyc3RhbmQgdGhlIAorc2VxdWVuY2UgYW5kIHJlcXVpcmVtZW50cyBmb3IgdGhlIGRyaXZlciB0byBiZSBhYmxlIHRvIGNyZWF0ZSwgam9pbiwgb3IgCittZXJnZSBuZXR3b3Jrcy4KKworVGhlIGZvbGxvd2luZyBhdHRlbXB0cyB0byBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiBzbyB0aGF0IHlvdSBjYW4gCitoYXZlIGEgY29uc2lzdGVudCBleHBlcmllbmNlIHdoaWxlIHVzaW5nIHRoZSBkcml2ZXIgYXMgYSBtZW1iZXIgb2YgYW4gCitBZC1Ib2MgbmV0d29yay4KKworMi4xLiBKb2luaW5nIGFuIEFkLUhvYyBOZXR3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IG9udG8gYW4gQWQtSG9jIG5ldHdvcmsgaXMgdG8gam9pbiBvbmUgdGhhdCAKK2FscmVhZHkgZXhpc3RzLgorCisyLjIuIENyZWF0aW5nIGFuIEFkLUhvYyBOZXR3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBBZC1Ib2MgbmV0d29ya3MgaXMgY3JlYXRlZCB1c2luZyB0aGUgc3ludGF4IG9mIHRoZSBXaXJlbGVzcyB0b29sLgorCitGb3IgRXhhbXBsZToKK2l3Y29uZmlnIGV0aDEgbW9kZSBhZC1ob2MgZXNzaWQgdGVzdGluZyBjaGFubmVsIDIKKworMi4zLiBNZXJnaW5nIEFkLUhvYyBOZXR3b3JrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCiszLiAgSW50ZXJhY3Rpb24gd2l0aCBXaXJlbGVzcyBUb29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMy4xIGl3Y29uZmlnIG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gY29uZmlndXJpbmcgdGhlIG1vZGUgb2YgdGhlIGFkYXB0ZXIsIGFsbCBydW4tdGltZSBjb25maWd1cmVkIHBhcmFtZXRlcnMKK2FyZSByZXNldCB0byB0aGUgdmFsdWUgdXNlZCB3aGVuIHRoZSBtb2R1bGUgd2FzIGxvYWRlZC4gIFRoaXMgaW5jbHVkZXMKK2NoYW5uZWxzLCByYXRlcywgRVNTSUQsIGV0Yy4KKworCis0LiAgIEFib3V0IHRoZSBWZXJzaW9uIE51bWJlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIER1ZSB0byB0aGUgbmF0dXJlIG9mIG9wZW4gc291cmNlIGRldmVsb3BtZW50IHByb2plY3RzLCB0aGVyZSBhcmUgCkBAIC0yNTksMTIgKzM4MSwyMyBAQAogVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIHdpbGwgYmUgaW5jcmVtZW50ZWQgd2hlbiBzaWduaWZpY2FudCBjaGFuZ2VzCiBhcmUgbWFkZSB0byB0aGUgZHJpdmVyLiAgQ3VycmVudGx5LCB0aGVyZSBhcmUgbm8gbWFqb3IgY2hhbmdlcyBwbGFubmVkLgogCis1LiAgRmlybXdhcmUgaW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTMuICBTdXBwb3J0CitUaGUgZHJpdmVyIHJlcXVpcmVzIGEgZmlybXdhcmUgaW1hZ2UsIGRvd25sb2FkIGl0IGFuZCBleHRyYWN0IHRoZQorZmlsZXMgdW5kZXIgL2xpYi9maXJtd2FyZSAob3Igd2hlcmV2ZXIgeW91ciBob3RwbHVnJ3MgZmlybXdhcmUuYWdlbnQKK3dpbGwgbG9vayBmb3IgZmlybXdhcmUgZmlsZXMpCisKK1RoZSBmaXJtd2FyZSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgVVJMOgorCisgICAgaHR0cDovL2lwdzIyMDAuc2YubmV0LworCisKKzYuICBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Gb3IgaW5zdGFsbGF0aW9uIHN1cHBvcnQgb2YgdGhlIDEuMC4wIHZlcnNpb24sIHlvdSBjYW4gY29udGFjdCAKLWh0dHA6Ly9zdXBwb3J0bWFpbC5pbnRlbC5jb20sIG9yIHlvdSBjYW4gdXNlIHRoZSBvcGVuIHNvdXJjZSBwcm9qZWN0IAorRm9yIGRpcmVjdCBzdXBwb3J0IG9mIHRoZSAxLjAuMCB2ZXJzaW9uLCB5b3UgY2FuIGNvbnRhY3QgCitodHRwOi8vc3VwcG9ydG1haWwuaW50ZWwuY29tLCBvciB5b3UgY2FuIHVzZSB0aGUgb3BlbiBzb3VyY2UgcHJvamVjdAogc3VwcG9ydC4KIAogRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvOgpAQCAtMjcyLDcgKzQwNSw3IEBACiAgICAgaHR0cDovL2lwdzIyMDAuc2YubmV0LwogCiAKLTQuICBMaWNlbnNlCis3LiAgTGljZW5zZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yOTcsNCArNDMwLDMgQEAKICAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0RlYnVnZ2luZzM5MC50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dAppbmRleCBhZGJmZTYyLi44NDRjMDNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dApAQCAtODcxLDcgKzg3MSw3IEBACiAKIAogCi1leHRlcm4gaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxwKQorc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9jayhzcGlubG9ja190ICpscCkKIHsKICAgICAgIGEwOiAgICAgICAxOCAzNCAgICAgICAgICAgbHIgICAgICAlcjMsJXI0CiAgICAgICBhMjogICAgICAgYTcgM2EgMDMgYmMgICAgIGFoaSAgICAgJXIzLDk1NgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZC1hcmNoLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtYXJjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxNjE1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWQtYXJjaC50eHQKQEAgLTAsMCArMSw4OSBAQAorCUNQVSBTY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gaGludHMgZm9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlCisKKwlOaWNrIFBpZ2dpbiwgMjAwNQorCitDb250ZXh0IHN3aXRjaAorPT09PT09PT09PT09PT0KKzEuIFJ1bnF1ZXVlIGxvY2tpbmcKK0J5IGRlZmF1bHQsIHRoZSBzd2l0Y2hfdG8gYXJjaCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcnVucXVldWUKK2xvY2tlZC4gVGhpcyBpcyB1c3VhbGx5IG5vdCBhIHByb2JsZW0gdW5sZXNzIHN3aXRjaF90byBtYXkgbmVlZCB0bwordGFrZSB0aGUgcnVucXVldWUgbG9jay4gVGhpcyBpcyB1c3VhbGx5IGR1ZSB0byBhIHdha2UgdXAgb3BlcmF0aW9uIGluCit0aGUgY29udGV4dCBzd2l0Y2guIFNlZSBpbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oIGZvciBhbiBleGFtcGxlLgorCitUbyByZXF1ZXN0IHRoZSBzY2hlZHVsZXIgY2FsbCBzd2l0Y2hfdG8gd2l0aCB0aGUgcnVucXVldWUgdW5sb2NrZWQsCit5b3UgbXVzdCBgI2RlZmluZSBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTV2AgaW4gYSBoZWFkZXIgZmlsZQorKHR5cGljYWxseSB0aGUgb25lIHdoZXJlIHN3aXRjaF90byBpcyBkZWZpbmVkKS4KKworVW5sb2NrZWQgY29udGV4dCBzd2l0Y2hlcyBpbnRyb2R1Y2Ugb25seSBhIHZlcnkgbWlub3IgcGVyZm9ybWFuY2UKK3BlbmFsdHkgdG8gdGhlIGNvcmUgc2NoZWR1bGVyIGltcGxlbWVudGF0aW9uIGluIHRoZSBDT05GSUdfU01QIGNhc2UuCisKKzIuIEludGVycnVwdCBzdGF0dXMKK0J5IGRlZmF1bHQsIHRoZSBzd2l0Y2hfdG8gYXJjaCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzCitkaXNhYmxlZC4gSW50ZXJydXB0cyBtYXkgYmUgZW5hYmxlZCBvdmVyIHRoZSBjYWxsIGlmIGl0IGlzIGxpa2VseSB0bworaW50cm9kdWNlIGEgc2lnbmlmaWNhbnQgaW50ZXJydXB0IGxhdGVuY3kgYnkgYWRkaW5nIHRoZSBsaW5lCitgI2RlZmluZSBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXYCBpbiB0aGUgc2FtZSBwbGFjZSBhcyBmb3IKK3VubG9ja2VkIGNvbnRleHQgc3dpdGNoZXMuIFRoaXMgZGVmaW5lIGFsc28gaW1wbGllcworYF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXYC4gU2VlIGluY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBmb3IgYW4KK2V4YW1wbGUuCisKKworQ1BVIGlkbGUKKz09PT09PT09CitZb3VyIGNwdV9pZGxlIHJvdXRpbmVzIG5lZWQgdG8gb2JleSB0aGUgZm9sbG93aW5nIHJ1bGVzOgorCisxLiBQcmVlbXB0IHNob3VsZCBub3cgZGlzYWJsZWQgb3ZlciBpZGxlIHJvdXRpbmVzLiBTaG91bGQgb25seQorICAgYmUgZW5hYmxlZCB0byBjYWxsIHNjaGVkdWxlKCkgdGhlbiBkaXNhYmxlZCBhZ2Fpbi4KKworMi4gbmVlZF9yZXNjaGVkL1RJRl9ORUVEX1JFU0NIRUQgaXMgb25seSBldmVyIHNldCwgYW5kIHdpbGwgbmV2ZXIKKyAgIGJlIGNsZWFyZWQgdW50aWwgdGhlIHJ1bm5pbmcgdGFzayBoYXMgY2FsbGVkIHNjaGVkdWxlKCkuIElkbGUKKyAgIHRocmVhZHMgbmVlZCBvbmx5IGV2ZXIgcXVlcnkgbmVlZF9yZXNjaGVkLCBhbmQgbWF5IG5ldmVyIHNldCBvcgorICAgY2xlYXIgaXQuCisKKzMuIFdoZW4gY3B1X2lkbGUgZmluZHMgKG5lZWRfcmVzY2hlZCgpID09ICd0cnVlJyksIGl0IHNob3VsZCBjYWxsCisgICBzY2hlZHVsZSgpLiBJdCBzaG91bGQgbm90IGNhbGwgc2NoZWR1bGUoKSBvdGhlcndpc2UuCisKKzQuIFRoZSBvbmx5IHRpbWUgaW50ZXJydXB0cyBuZWVkIHRvIGJlIGRpc2FibGVkIHdoZW4gY2hlY2tpbmcKKyAgIG5lZWRfcmVzY2hlZCBpcyBpZiB3ZSBhcmUgYWJvdXQgdG8gc2xlZXAgdGhlIHByb2Nlc3NvciB1bnRpbAorICAgdGhlIG5leHQgaW50ZXJydXB0ICh0aGlzIGRvZXNuJ3QgcHJvdmlkZSBhbnkgcHJvdGVjdGlvbiBvZgorICAgbmVlZF9yZXNjaGVkLCBpdCBwcmV2ZW50cyBsb3NpbmcgYW4gaW50ZXJydXB0KS4KKworCTRhLiBDb21tb24gcHJvYmxlbSB3aXRoIHRoaXMgdHlwZSBvZiBzbGVlcCBhcHBlYXJzIHRvIGJlOgorCSAgICAgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkgICAgICAgIGlmICghbmVlZF9yZXNjaGVkKCkpIHsKKwkgICAgICAgICAgICAgICAgbG9jYWxfaXJxX2VuYWJsZSgpOworCSAgICAgICAgICAgICAgICAqKiogcmVzY2hlZCBpbnRlcnJ1cHQgYXJyaXZlcyBoZXJlICoqKgorCSAgICAgICAgICAgICAgICBfX2FzbV9fKCJzbGVlcCB1bnRpbCBuZXh0IGludGVycnVwdCIpOworCSAgICAgICAgfQorCis1LiBUSUZfUE9MTElOR19OUkZMQUcgY2FuIGJlIHNldCBieSBpZGxlIHJvdXRpbmVzIHRoYXQgZG8gbm90CisgICBuZWVkIGFuIGludGVycnVwdCB0byB3YWtlIHRoZW0gdXAgd2hlbiBuZWVkX3Jlc2NoZWQgZ29lcyBoaWdoLgorICAgSW4gb3RoZXIgd29yZHMsIHRoZXkgbXVzdCBiZSBwZXJpb2RpY2FsbHkgcG9sbGluZyBuZWVkX3Jlc2NoZWQsCisgICBhbHRob3VnaCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBkbyBzb21lIGJhY2tncm91bmQgd29yayBvciBlbnRlcgorICAgYSBsb3cgQ1BVIHByaW9yaXR5LgorCisgICAJNWEuIElmIFRJRl9QT0xMSU5HX05SRkxBRyBpcyBzZXQsIGFuZCB3ZSBkbyBkZWNpZGUgdG8gZW50ZXIKKwkgICAgYW4gaW50ZXJydXB0IHNsZWVwLCBpdCBuZWVkcyB0byBiZSBjbGVhcmVkIHRoZW4gYSBtZW1vcnkKKwkgICAgYmFycmllciBpc3N1ZWQgKGZvbGxvd2VkIGJ5IGEgdGVzdCBvZiBuZWVkX3Jlc2NoZWQgd2l0aAorCSAgICBpbnRlcnJ1cHRzIGRpc2FibGVkLCBhcyBleHBsYWluZWQgaW4gMykuCisKK2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGhhcyBleGFtcGxlcyBvZiBib3RoIHBvbGxpbmcgYW5kCitzbGVlcGluZyBpZGxlIGZ1bmN0aW9ucy4KKworCitQb3NzaWJsZSBhcmNoLyBwcm9ibGVtcworPT09PT09PT09PT09PT09PT09PT09PT0KKworUG9zc2libGUgYXJjaCBwcm9ibGVtcyBJIGZvdW5kIChhbmQgZWl0aGVyIHRyaWVkIHRvIGZpeCBvciBkaWRuJ3QpOgorCitoODMwMCAtIElzIHN1Y2ggc2xlZXBpbmcgcmFjeSB2cyBpbnRlcnJ1cHRzPyAoU2VlICM0YSkuCisgICAgICAgIFRoZSBIOC8zMDAgbWFudWFsIEkgZm91bmQgaW5kaWNhdGVzIHllcywgaG93ZXZlciBkaXNhYmxpbmcgSVJRcworICAgICAgICBvdmVyIHRoZSBzbGVlcCBtZWFuIG9ubHkgTk1JcyBjYW4gd2FrZSBpdCB1cCwgc28gY2FuJ3QgZml4IGVhc2lseQorICAgICAgICB3aXRob3V0IGRvaW5nIHNwaW4gd2FpdGluZy4KKworaWE2NCAtIGlzIHNhZmVfaGFsdCBjYWxsIHJhY3kgdnMgaW50ZXJydXB0cz8gKGRvZXMgaXQgc2xlZXA/KSAoU2VlICM0YSkKKworc2g2NCAtIElzIHNsZWVwaW5nIHJhY3kgdnMgaW50ZXJydXB0cz8gKFNlZSAjNGEpCisKK3NwYXJjIC0gSVJRcyBvbiBhdCB0aGlzIHBvaW50KD8pLCBjaGFuZ2UgbG9jYWxfaXJxX3NhdmUgdG8gX2Rpc2FibGUuCisgICAgICAtIFRPRE86IG5lZWRzIHNlY29uZGFyeSBDUFVzIHRvIGRpc2FibGUgcHJlZW1wdCAoU2VlICMxKQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAppbmRleCA0NDE0MDdiMS4uYWZiZTlhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCkBAIC04LDcgKzgsNyBAQAogPC90ZD48dGQ+CiBPYnNvbGV0ZWQgYnkgVjRMMiBBUEkKIDwvdGQ+PC90cj48dHI+PHRkPgotPEEgSFJFRj1odHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy92aWRlbzRsaW51eC9BUEkvVjRMMl9BUEkuaHRtbD4KKzxBIEhSRUY9aHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvdmlkZW80bGludXgvQVBJL1Y0TDJfQVBJPgogVjRMMiBBUEk8L2E+CiA8L3RkPjx0ZD4KIFNob3VsZCBiZSB1c2VkIGZvciBuZXcgcHJvamVjdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0diBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgppbmRleCBlYzc4NWY5Li4yNDA0MDk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CkBAIC0xLDEzNyArMSwxNDIgQEAKLWNhcmQ9MCAtICAqKiogVU5LTk9XTi9HRU5FUklDICoqKgotY2FyZD0xIC0gTUlSTyBQQ1RWCi1jYXJkPTIgLSBIYXVwcGF1Z2UgKGJ0ODQ4KQotY2FyZD0zIC0gU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkKLWNhcmQ9NCAtIEludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkKLWNhcmQ9NSAtIERpYW1vbmQgRFRWMjAwMAotY2FyZD02IC0gQVZlck1lZGlhIFRWUGhvbmUKLWNhcmQ9NyAtIE1BVFJJWC1WaXNpb24gTVYtRGVsdGEKLWNhcmQ9OCAtIExpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2Ci1jYXJkPTkgLSBJTVMvSVhtaWNybyBUdXJib1RWCi1jYXJkPTEwIC0gSGF1cHBhdWdlIChidDg3OCkKLWNhcmQ9MTEgLSBNSVJPIFBDVFYgcHJvCi1jYXJkPTEyIC0gQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpCi1jYXJkPTEzIC0gQVZlck1lZGlhIFRWQ2FwdHVyZSA5OAotY2FyZD0xNCAtIEFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkKLWNhcmQ9MTUgLSBab2x0cml4IFRWLU1heAotY2FyZD0xNiAtIFByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpCi1jYXJkPTE3IC0gTGVhZHRlayBXaW5WaWV3IDYwMQotY2FyZD0xOCAtIEFWRUMgSW50ZXJjYXB0dXJlCi1jYXJkPTE5IC0gTGlmZXZpZXcgRmx5VmlkZW8gSUkgRVogL0ZseUtpdCBMUjM4IEJ0ODQ4IChjYXB0dXJlIG9ubHkpCi1jYXJkPTIwIC0gQ0VJIFJhZmZsZXMgQ2FyZAotY2FyZD0yMSAtIExpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwCi1jYXJkPTIyIC0gQXNrZXkgQ1BIMDUwLyBQaG9lYmUgVHYgTWFzdGVyICsgRk0KLWNhcmQ9MjMgLSBNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgKLWNhcmQ9MjQgLSBBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10KLWNhcmQ9MjUgLSBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIKLWNhcmQ9MjYgLSBIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkKLWNhcmQ9MjcgLSBMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAKLWNhcmQ9MjggLSBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpCi1jYXJkPTI5IC0gSW1hZ2VuYXRpb24gUFhDMjAwCi1jYXJkPTMwIC0gTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MAotY2FyZD0zMSAtIEZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkKLWNhcmQ9MzIgLSBJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJCi1jYXJkPTMzIC0gVGVycmF0ZWMgVGVycmFUVmFsdWUgVmVyc2lvbiBCdDg3OAotY2FyZD0zNCAtIExlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAKLWNhcmQ9MzUgLSBMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIC8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJCi1jYXJkPTM2IC0gTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lcgotY2FyZD0zNyAtIFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8KLWNhcmQ9MzggLSBBc2tleSBDUEgwNlggVFZpZXc5OQotY2FyZD0zOSAtIFBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUKLWNhcmQ9NDAgLSBTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IChidDg3OCksIDNEZnggVm9vZG9vVFYgMTAwCi1jYXJkPTQxIC0gQVZlck1lZGlhIFRWUGhvbmUgOTgKLWNhcmQ9NDIgLSBQcm9WaWRlbyBQVjk1MQotY2FyZD00MyAtIExpdHRsZSBPbkFpciBUVgotY2FyZD00NCAtIFNpZ21hIFRWSUktRk0KLWNhcmQ9NDUgLSBNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIKLWNhcmQ9NDYgLSBab2x0cml4IEdlbmllIFRWL0ZNCi1jYXJkPTQ3IC0gVGVycmF0ZWMgVFYvUmFkaW8rCi1jYXJkPTQ4IC0gQXNrZXkgQ1BIMDN4LyBEeW5hbGluayBNYWdpYyBUVmlldwotY2FyZD00OSAtIElPREFUQSBHVi1CQ1RWMy9QQ0kKLWNhcmQ9NTAgLSBQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQCi1jYXJkPTUxIC0gRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKQotY2FyZD01MiAtIFBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybwotY2FyZD01MyAtIFR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUwotY2FyZD01NCAtIExpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdCi1jYXJkPTU1IC0gQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYKLWNhcmQ9NTYgLSBMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAKLWNhcmQ9NTcgLSBHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KQotY2FyZD01OCAtIEFza2V5IENQSDA2MC8gUGhvZWJlIFRWIE1hc3RlciBPbmx5IChObyBGTSkKLWNhcmQ9NTkgLSBBc2tleSBDUEgwM3ggVFYgQ2FwdHVyZXIKLWNhcmQ9NjAgLSBNb2R1bGFyIFRlY2hub2xvZ3kgTU0xMDBQQ1RWCi1jYXJkPTYxIC0gQUcgRWxlY3Ryb25pY3MgR01WMQotY2FyZD02MiAtIEFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkKLWNhcmQ9NjMgLSBBVEkgVFYtV29uZGVyCi1jYXJkPTY0IC0gQVRJIFRWLVdvbmRlciBWRQotY2FyZD02NSAtIExpZmV2aWV3IEZseVZpZGVvIDIwMDBTIExSOTAKLWNhcmQ9NjYgLSBUZXJyYXRlYyBUVmFsdWVSYWRpbwotY2FyZD02NyAtIElPREFUQSBHVi1CQ1RWNC9QQ0kKLWNhcmQ9NjggLSAzRGZ4IFZvb2Rvb1RWIEZNIChFdXJvKSwgVm9vZG9vVFYgMjAwIChVU0EpCi1jYXJkPTY5IC0gQWN0aXZlIEltYWdpbmcgQUlNTVMKLWNhcmQ9NzAgLSBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpCi1jYXJkPTcxIC0gTGlmZXZpZXcgRmx5VmlkZW8gOThFWiAoY2FwdHVyZSBvbmx5KSBMUjUxCi1jYXJkPTcyIC0gUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKzlCIChQbGF5VFYgUHJvIHJldi45QiBGTStOSUNBTSkKLWNhcmQ9NzMgLSBTZW5zb3JheSAzMTEKLWNhcmQ9NzQgLSBSZW1vdGVWaXNpb24gTVggKFJWNjA1KQotY2FyZD03NSAtIFBvd2VyY29sb3IgTVRWODc4LyBNVFY4NzhSLyBNVFY4NzhGCi1jYXJkPTc2IC0gQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApCi1jYXJkPTc3IC0gR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSBDYXJkIChCdDg3OCkKLWNhcmQ9NzggLSBKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGCi1jYXJkPTc5IC0gRFNQIERlc2lnbiBUQ1ZJREVPCi1jYXJkPTgwIC0gSGF1cHBhdWdlIFdpblRWIFBWUgotY2FyZD04MSAtIElPREFUQSBHVi1CQ1RWNS9QQ0kKLWNhcmQ9ODIgLSBPc3ByZXkgMTAwLzE1MCAoODc4KQotY2FyZD04MyAtIE9zcHJleSAxMDAvMTUwICg4NDgpCi1jYXJkPTg0IC0gT3NwcmV5IDEwMSAoODQ4KQotY2FyZD04NSAtIE9zcHJleSAxMDEvMTUxCi1jYXJkPTg2IC0gT3NwcmV5IDEwMS8xNTEgdy8gc3ZpZAotY2FyZD04NyAtIE9zcHJleSAyMDAvMjAxLzI1MC8yNTEKLWNhcmQ9ODggLSBPc3ByZXkgMjAwLzI1MAotY2FyZD04OSAtIE9zcHJleSAyMTAvMjIwCi1jYXJkPTkwIC0gT3NwcmV5IDUwMAotY2FyZD05MSAtIE9zcHJleSA1NDAKLWNhcmQ9OTIgLSBPc3ByZXkgMjAwMAotY2FyZD05MyAtIElEUyBFYWdsZQotY2FyZD05NCAtIFBpbm5hY2xlIFBDVFYgU2F0Ci1jYXJkPTk1IC0gRm9ybWFjIFByb1RWIElJIChidDg3OCkKLWNhcmQ9OTYgLSBNYWNoVFYKLWNhcmQ9OTcgLSBFdXJlc3lzIFBpY29sbwotY2FyZD05OCAtIFByb1ZpZGVvIFBWMTUwCi1jYXJkPTk5IC0gQUQtVFZLNTAzCi1jYXJkPTEwMCAtIEhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbwotY2FyZD0xMDEgLSBQYWNlIFRWICYgUmFkaW8gQ2FyZAotY2FyZD0xMDIgLSBJVkMtMjAwCi1jYXJkPTEwMyAtIEdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kKLWNhcmQ9MTA0IC0gTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUVgotY2FyZD0xMDUgLSBQcm9WaWRlbyBQVjE0MwotY2FyZD0xMDYgLSBQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KQotY2FyZD0xMDcgLSBQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkKLWNhcmQ9MTA4IC0gUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkKLWNhcmQ9MTA5IC0gUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpCi1jYXJkPTExMCAtIElWQy0xMDAKLWNhcmQ9MTExIC0gSVZDLTEyMEcKLWNhcmQ9MTEyIC0gcGNIRFRWIEhELTIwMDAgVFYKLWNhcmQ9MTEzIC0gVHdpbmhhbiBEU1QgKyBjbG9uZXMKLWNhcmQ9MTE0IC0gV2luZmFzdCBWQzEwMAotY2FyZD0xMTUgLSBUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAKLWNhcmQ9MTE2IC0gU0lNVVMgR1ZDMTEwMAotY2FyZD0xMTcgLSBOR1MgTkdTVFYrCi1jYXJkPTExOCAtIExNTEJUNAotY2FyZD0xMTkgLSBUZWtyYW0gTTIwNSBQUk8KLWNhcmQ9MTIwIC0gQ29uY2VwdHJvbmljIENPTlRWRk1pCi1jYXJkPTEyMSAtIEV1cmVzeXMgUGljb2xvIFRldHJhCi1jYXJkPTEyMiAtIFNwaXJpdCBUViBUdW5lcgotY2FyZD0xMjMgLSBBVmVyTWVkaWEgQVZlclRWIERWQi1UIDc3MQotY2FyZD0xMjQgLSBBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MQotY2FyZD0xMjUgLSBNQVRSSVggVmlzaW9uIFNpZ21hLVNRCi1jYXJkPTEyNiAtIE1BVFJJWCBWaXNpb24gU2lnbWEtU0xDCi1jYXJkPTEyNyAtIEFQQUMgVmlld2NvbXAgODc4KEFNQVgpCi1jYXJkPTEyOCAtIERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZQotY2FyZD0xMjkgLSBWLUdlYXIgTXlWQ0QKLWNhcmQ9MTMwIC0gU3VwZXIgVFYgVHVuZXIKLWNhcmQ9MTMxIC0gVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2Ci1jYXJkPTEzMiAtIEtvZGljb20gNDQwMFIgKG1hc3RlcikKLWNhcmQ9MTMzIC0gS29kaWNvbSA0NDAwUiAoc2xhdmUpCi1jYXJkPTEzNCAtIEFkbGluayBSVFYyNAotY2FyZD0xMzUgLSBEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZQotY2FyZD0xMzYgLSBBY29ycCBZODc4RgorICAwIC0+ICAqKiogVU5LTk9XTi9HRU5FUklDICoqKgorICAxIC0+IE1JUk8gUENUVgorICAyIC0+IEhhdXBwYXVnZSAoYnQ4NDgpCisgIDMgLT4gU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkKKyAgNCAtPiBJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJCisgIDUgLT4gRGlhbW9uZCBEVFYyMDAwCisgIDYgLT4gQVZlck1lZGlhIFRWUGhvbmUKKyAgNyAtPiBNQVRSSVgtVmlzaW9uIE1WLURlbHRhCisgIDggLT4gTGlmZXZpZXcgRmx5VmlkZW8gSUkgKEJ0ODQ4KSBMUjI2IC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSMjYKKyAgOSAtPiBJTVMvSVhtaWNybyBUdXJib1RWCisgMTAgLT4gSGF1cHBhdWdlIChidDg3OCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjEzZWIsMDA3MDozOTAwLDI2MzY6MTBiNF0KKyAxMSAtPiBNSVJPIFBDVFYgcHJvCisgMTIgLT4gQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpCisgMTMgLT4gQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjAwMDIsMTQ2MTowMDA0LDE0NjE6MDMwMF0KKyAxNCAtPiBBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpCisgMTUgLT4gWm9sdHJpeCBUVi1NYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthMWEwOmEwZmNdCisgMTYgLT4gUHJvbGluayBQaXhlbHZpZXcgUGxheVRWIChidDg3OCkKKyAxNyAtPiBMZWFkdGVrIFdpblZpZXcgNjAxCisgMTggLT4gQVZFQyBJbnRlcmNhcHR1cmUKKyAxOSAtPiBMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkKKyAyMCAtPiBDRUkgUmFmZmxlcyBDYXJkCisgMjEgLT4gTGlmZXZpZXcgRmx5VmlkZW8gOTgvIEx1Y2t5IFN0YXIgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZVRWIExSNTAKKyAyMiAtPiBBc2tleSBDUEgwNTAvIFBob2ViZSBUdiBNYXN0ZXIgKyBGTSAgICAgICAgICAgICAgICAgWzE0ZmY6MzAwMl0KKyAyMyAtPiBNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzggWzE0Yzc6MDEwMV0KKyAyNCAtPiBBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10gICAgICAgICAgICAgWzE0NGY6MzAwMiwxNDRmOjMwMDUsMTQ0Zjo1MDAwLDE0ZmY6MzAwMF0KKyAyNSAtPiBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIKKyAyNiAtPiBIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkKKyAyNyAtPiBMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAKKyAyOCAtPiBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpICAgICAgICAgICAgICAgWzE1M2I6MTEyNywxODUyOjE4NTJdCisgMjkgLT4gSW1hZ2VuYXRpb24gUFhDMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMjk1OjIwMGFdCisgMzAgLT4gTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxZjdmOjE4NTBdCisgMzEgLT4gRm9ybWFjIGlQcm9UViwgRm9ybWFjIFByb1RWIEkgKGJ0ODQ4KQorIDMyIC0+IEludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkKKyAzMyAtPiBUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4ICAgICAgICAgICAgICAgICAgWzE1M2I6MTExNywxNTNiOjExMTgsMTUzYjoxMTE5LDE1M2I6MTExYSwxNTNiOjExMzQsMTUzYjo1MDE4XQorIDM0IC0+IExlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAgICAgICAgICAgICAgICBbMTA3ZDo2NjA2LDEwN2Q6NjYwOSw2NjA2OjIxN2QsZjZmZjpmZmY2XQorIDM1IC0+IExpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkgWzE4NTE6MTg1MCwxODUxOmEwNTBdCisgMzYgLT4gTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciBbMTg1MjoxODUyXQorIDM3IC0+IFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8KKyAzOCAtPiBBc2tleSBDUEgwNlggVFZpZXc5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NGY6MzAwMCwxNDRmOmEwMDUsYTA0ZjphMGZjXQorIDM5IC0+IFBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTFiZDowMDEyLGJkMTE6MTIwMCxiZDExOmZmMDAsMTFiZDpmZjEyXQorIDQwIC0+IFNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAgWzEwYjQ6MjYzNiwxMGI0OjI2NDUsMTIxYTozMDYwXQorIDQxIC0+IEFWZXJNZWRpYSBUVlBob25lIDk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MTowMDAxLDE0NjE6MDAwM10KKyA0MiAtPiBQcm9WaWRlbyBQVjk1MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FhMGM6MTQ2Y10KKyA0MyAtPiBMaXR0bGUgT25BaXIgVFYKKyA0NCAtPiBTaWdtYSBUVklJLUZNCisgNDUgLT4gTUFUUklYLVZpc2lvbiBNVi1EZWx0YSAyCisgNDYgLT4gWm9sdHJpeCBHZW5pZSBUVi9GTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNWIwOjQwMDAsMTViMDo0MDBhLDE1YjA6NDAwZCwxNWIwOjQwMTAsMTViMDo0MDE2XQorIDQ3IC0+IFRlcnJhdGVjIFRWL1JhZGlvKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTUzYjoxMTIzXQorIDQ4IC0+IEFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXcKKyA0OSAtPiBJT0RBVEEgR1YtQkNUVjMvUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwZmM6NDAyMF0KKyA1MCAtPiBQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQCisgNTEgLT4gRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKQorIDUyIC0+IFBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybworIDUzIC0+IFR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUworIDU0IC0+IExpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdCisgNTUgLT4gQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYKKyA1NiAtPiBMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAgICAgICAgICAgICAgICAgICAgICAgICAgW2EwNTE6NDFhMF0KKyA1NyAtPiBHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KSAgICAgICAgICAgICAgWzQzNDQ6NDE0Ml0KKyA1OCAtPiBBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pCisgNTkgLT4gQXNrZXkgQ1BIMDN4IFRWIENhcHR1cmVyCisgNjAgLT4gTW9kdWxhciBUZWNobm9sb2d5IE1NMTAwUENUVgorIDYxIC0+IEFHIEVsZWN0cm9uaWNzIEdNVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTVjYjowMTAxXQorIDYyIC0+IEFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkKKyA2MyAtPiBBVEkgVFYtV29uZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwMDI6MDAwMV0KKyA2NCAtPiBBVEkgVFYtV29uZGVyIFZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwMDI6MDAwM10KKyA2NSAtPiBMaWZldmlldyBGbHlWaWRlbyAyMDAwUyBMUjkwCisgNjYgLT4gVGVycmF0ZWMgVFZhbHVlUmFkaW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTNiOjExMzUsMTUzYjpmZjNiXQorIDY3IC0+IElPREFUQSBHVi1CQ1RWNC9QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTBmYzo0MDUwXQorIDY4IC0+IDNEZnggVm9vZG9vVFYgRk0gKEV1cm8pLCBWb29kb29UViAyMDAgKFVTQSkgICAgICAgICBbMTIxYTozMDAwLDEwYjQ6MjYzN10KKyA2OSAtPiBBY3RpdmUgSW1hZ2luZyBBSU1NUworIDcwIC0+IFByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi40Qyw4RSkKKyA3MSAtPiBMaWZldmlldyBGbHlWaWRlbyA5OEVaIChjYXB0dXJlIG9ubHkpIExSNTEgICAgICAgICAgWzE4NTE6MTg1MV0KKyA3MiAtPiBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKSBbMTU1NDo0MDExXQorIDczIC0+IFNlbnNvcmF5IDMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNjAwMDowMzExXQorIDc0IC0+IFJlbW90ZVZpc2lvbiBNWCAoUlY2MDUpCisgNzUgLT4gUG93ZXJjb2xvciBNVFY4NzgvIE1UVjg3OFIvIE1UVjg3OEYKKyA3NiAtPiBDYW5vcHVzIFdpbkRWUiBQQ0kgKENPTVBBUSBQcmVzYXJpbyAzNTI0SlAsIDUxMTJKUCkgWzBlMTE6MDA3OV0KKyA3NyAtPiBHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIENhcmQgKEJ0ODc4KQorIDc4IC0+IEpldHdheSBUVi9DYXB0dXJlIEpXLVRWODc4LUZCSywgS3dvcmxkIEtXLVRWODc4UkYgICBbMGEwMToxN2RlXQorIDc5IC0+IERTUCBEZXNpZ24gVENWSURFTworIDgwIC0+IEhhdXBwYXVnZSBXaW5UViBQVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo0NTAwXQorIDgxIC0+IElPREFUQSBHVi1CQ1RWNS9QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTBmYzo0MDcwLDEwZmM6ZDAxOF0KKyA4MiAtPiBPc3ByZXkgMTAwLzE1MCAoODc4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwMF0KKyA4MyAtPiBPc3ByZXkgMTAwLzE1MCAoODQ4KQorIDg0IC0+IE9zcHJleSAxMDEgKDg0OCkKKyA4NSAtPiBPc3ByZXkgMTAxLzE1MQorIDg2IC0+IE9zcHJleSAxMDEvMTUxIHcvIHN2aWQKKyA4NyAtPiBPc3ByZXkgMjAwLzIwMS8yNTAvMjUxCisgODggLT4gT3NwcmV5IDIwMC8yNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOmZmMDFdCisgODkgLT4gT3NwcmV5IDIxMC8yMjAKKyA5MCAtPiBPc3ByZXkgNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwMl0KKyA5MSAtPiBPc3ByZXkgNTQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwNF0KKyA5MiAtPiBPc3ByZXkgMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwM10KKyA5MyAtPiBJRFMgRWFnbGUKKyA5NCAtPiBQaW5uYWNsZSBQQ1RWIFNhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzExYmQ6MDAxY10KKyA5NSAtPiBGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KQorIDk2IC0+IE1hY2hUVgorIDk3IC0+IEV1cmVzeXMgUGljb2xvCisgOTggLT4gUHJvVmlkZW8gUFYxNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthYTAwOjE0NjAsYWEwMToxNDYxLGFhMDI6MTQ2MixhYTAzOjE0NjMsYWEwNDoxNDY0LGFhMDU6MTQ2NSxhYTA2OjE0NjYsYWEwNzoxNDY3XQorIDk5IC0+IEFELVRWSzUwMworMTAwIC0+IEhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbworMTAxIC0+IFBhY2UgVFYgJiBSYWRpbyBDYXJkCisxMDIgLT4gSVZDLTIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDAwOmExNTUsMDAwMTphMTU1LDAwMDI6YTE1NSwwMDAzOmExNTUsMDEwMDphMTU1LDAxMDE6YTE1NSwwMTAyOmExNTUsMDEwMzphMTU1XQorMTAzIC0+IEdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kgICAgICAgICAgICAgICAgICAgICAgICBbMDMwNDowMTAyXQorMTA0IC0+IE5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MTowMTAxXQorMTA1IC0+IFByb1ZpZGVvIFBWMTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWEwMDoxNDMwLGFhMDA6MTQzMSxhYTAwOjE0MzIsYWEwMDoxNDMzLGFhMDM6MTQzM10KKzEwNiAtPiBQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KQorMTA3IC0+IFBIWVRFQyBWRC0wMDktWDEgQ29tYmkgKGJ0ODc4KQorMTA4IC0+IFBIWVRFQyBWRC0wMDkgTWluaURJTiAoYnQ4NzgpCisxMDkgLT4gUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpCisxMTAgLT4gSVZDLTEwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZjAwOmExMzJdCisxMTEgLT4gSVZDLTEyMEcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZjAwOmExODIsZmYwMTphMTgyLGZmMDI6YTE4MixmZjAzOmExODIsZmYwNDphMTgyLGZmMDU6YTE4MixmZjA2OmExODIsZmYwNzphMTgyLGZmMDg6YTE4MixmZjA5OmExODIsZmYwYTphMTgyLGZmMGI6YTE4MixmZjBjOmExODIsZmYwZDphMTgyLGZmMGU6YTE4MixmZjBmOmExODJdCisxMTIgLT4gcGNIRFRWIEhELTIwMDAgVFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs3MDYzOjIwMDBdCisxMTMgLT4gVHdpbmhhbiBEU1QgKyBjbG9uZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMWJkOjAwMjYsMTgyMjowMDAxLDI3MGY6ZmMwMF0KKzExNCAtPiBXaW5mYXN0IFZDMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYwN10KKzExNSAtPiBUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAKKzExNiAtPiBTSU1VUyBHVkMxMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FhNmE6ODJiMl0KKzExNyAtPiBOR1MgTkdTVFYrCisxMTggLT4gTE1MQlQ0CisxMTkgLT4gVGVrcmFtIE0yMDUgUFJPCisxMjAgLT4gQ29uY2VwdHJvbmljIENPTlRWRk1pCisxMjEgLT4gRXVyZXN5cyBQaWNvbG8gVGV0cmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODA1OjAxMDUsMTgwNTowMTA2LDE4MDU6MDEwNywxODA1OjAxMDhdCisxMjIgLT4gU3Bpcml0IFRWIFR1bmVyCisxMjMgLT4gQVZlck1lZGlhIEFWZXJUViBEVkItVCA3NzEgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjA3NzFdCisxMjQgLT4gQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjA3NjFdCisxMjUgLT4gTUFUUklYIFZpc2lvbiBTaWdtYS1TUQorMTI2IC0+IE1BVFJJWCBWaXNpb24gU2lnbWEtU0xDCisxMjcgLT4gQVBBQyBWaWV3Y29tcCA4NzgoQU1BWCkKKzEyOCAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZGIxMF0KKzEyOSAtPiBWLUdlYXIgTXlWQ0QKKzEzMCAtPiBTdXBlciBUViBUdW5lcgorMTMxIC0+IFRpYmV0IFN5c3RlbXMgJ1Byb2dyZXNzIERWUicgQ1MxNgorMTMyIC0+IEtvZGljb20gNDQwMFIgKG1hc3RlcikKKzEzMyAtPiBLb2RpY29tIDQ0MDBSIChzbGF2ZSkKKzEzNCAtPiBBZGxpbmsgUlRWMjQKKzEzNSAtPiBEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDUwMF0KKzEzNiAtPiBBY29ycCBZODc4RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk1MTE6MTU0MF0KKzEzNyAtPiBDb25jZXB0cm9uaWMgQ1RWRk1pIHYyCisxMzggLT4gUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKQorMTM5IC0+IFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMAorMTQwIC0+IE9zcHJleSA0NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDpmZjA3XQorMTQxIC0+IEFzb3VuZCBTa3lleWUgUENUVgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDAzZGViMDcuLmExMDE3ZDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTEsMzIgKzEsMzcgQEAKLWNhcmQ9MCAtIFVOS05PV04vR0VORVJJQwotY2FyZD0xIC0gSGF1cHBhdWdlIFdpblRWIDM0eHh4IG1vZGVscwotY2FyZD0yIC0gR0RJIEJsYWNrIEdvbGQKLWNhcmQ9MyAtIFBpeGVsVmlldwotY2FyZD00IC0gQVRJIFRWIFdvbmRlciBQcm8KLWNhcmQ9NSAtIExlYWR0ZWsgV2luZmFzdCAyMDAwWFAgRXhwZXJ0Ci1jYXJkPTYgLSBBdmVyVFYgU3R1ZGlvIDMwMyAoTTEyNikKLWNhcmQ9NyAtIE1TSSBUVi1Abnl3aGVyZSBNYXN0ZXIKLWNhcmQ9OCAtIExlYWR0ZWsgV2luZmFzdCBEVjIwMDAKLWNhcmQ9OSAtIExlYWR0ZWsgUFZSIDIwMDAKLWNhcmQ9MTAgLSBJT0RBVEEgR1YtVkNQMy9QQ0kKLWNhcmQ9MTEgLSBQcm9saW5rIFBsYXlUViBQVlIKLWNhcmQ9MTIgLSBBU1VTIFBWUi00MTYKLWNhcmQ9MTMgLSBNU0kgVFYtQG55d2hlcmUKLWNhcmQ9MTQgLSBLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVAotY2FyZD0xNSAtIERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQxCi1jYXJkPTE2IC0gS1dvcmxkIExUVjg4M1JGCi1jYXJkPTE3IC0gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUQotY2FyZD0xOCAtIEhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQKLWNhcmQ9MTkgLSBDb25leGFudCBEVkItVCByZWZlcmVuY2UgZGVzaWduCi1jYXJkPTIwIC0gUHJvdmlkZW8gUFYyNTkKLWNhcmQ9MjEgLSBEVmlDTyBGdXNpb25IRFRWIERWQi1UIFBsdXMKLWNhcmQ9MjIgLSBkaWdpdGFsbm93IEROVFYgTGl2ZSEgRFZCLVQKLWNhcmQ9MjMgLSBwY0hEVFYgSEQzMDAwIEhEVFYKLWNhcmQ9MjQgLSBIYXVwcGF1Z2UgV2luVFYgMjh4eHggKFJvc2x5bikgbW9kZWxzCi1jYXJkPTI1IC0gRGlnaXRhbC1Mb2dpYyBNSUNST1NQQUNFIEVudGVydGFpbm1lbnQgQ2VudGVyIChNRUMpCi1jYXJkPTI2IC0gSU9EQVRBIEdWL0JDVFY3RQotY2FyZD0yNyAtIFBpeGVsVmlldyBQbGF5VFYgVWx0cmEgUHJvIChTdGVyZW8pCi1jYXJkPTI4IC0gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtVAotY2FyZD0yOSAtIEFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJCi1jYXJkPTMwIC0gVGVycmFUZWMgQ2luZXJneSAxNDAwIERWQi1UCi1jYXJkPTMxIC0gRFZpQ08gRnVzaW9uSERUViA1IEdvbGQKKyAgMCAtPiBVTktOT1dOL0dFTkVSSUMKKyAgMSAtPiBIYXVwcGF1Z2UgV2luVFYgMzR4eHggbW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6MzQwMCwwMDcwOjM0MDFdCisgIDIgLT4gR0RJIEJsYWNrIEdvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGM3OjAxMDYsMTRjNzowMTA3XQorICAzIC0+IFBpeGVsVmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTU1NDo0ODExXQorICA0IC0+IEFUSSBUViBXb25kZXIgUHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAwMjowMGY4XQorICA1IC0+IExlYWR0ZWsgV2luZmFzdCAyMDAwWFAgRXhwZXJ0ICAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2NjExLDEwN2Q6NjYxM10KKyAgNiAtPiBBdmVyVFYgU3R1ZGlvIDMwMyAoTTEyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6MDAwYl0KKyAgNyAtPiBNU0kgVFYtQG55d2hlcmUgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjI6ODYwNl0KKyAgOCAtPiBMZWFkdGVrIFdpbmZhc3QgRFYyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYyMF0KKyAgOSAtPiBMZWFkdGVrIFBWUiAyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYzYiwxMDdkOjY2M0NdCisgMTAgLT4gSU9EQVRBIEdWLVZDUDMvUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMGZjOmQwMDNdCisgMTEgLT4gUHJvbGluayBQbGF5VFYgUFZSCisgMTIgLT4gQVNVUyBQVlItNDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4MjNdCisgMTMgLT4gTVNJIFRWLUBueXdoZXJlCisgMTQgLT4gS1dvcmxkL1ZTdHJlYW0gWFBlcnQgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjA4YTZdCisgMTUgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMDBdCisgMTYgLT4gS1dvcmxkIExUVjg4M1JGCisgMTcgLT4gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ4MTBdCisgMTggLT4gSGF1cHBhdWdlIE5vdmEtVCBEVkItVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjkwMDJdCisgMTkgLT4gQ29uZXhhbnQgRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjAxODddCisgMjAgLT4gUHJvdmlkZW8gUFYyNTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTQwOjI1ODBdCisgMjEgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBQbHVzICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMTBdCisgMjIgLT4gcGNIRFRWIEhEMzAwMCBIRFRWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs3MDYzOjMwMDBdCisgMjMgLT4gZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOmE4YTZdCisgMjQgLT4gSGF1cHBhdWdlIFdpblRWIDI4eHh4IChSb3NseW4pIG1vZGVscyAgICAgICAgICAgICAgIFswMDcwOjI4MDFdCisgMjUgLT4gRGlnaXRhbC1Mb2dpYyBNSUNST1NQQUNFIEVudGVydGFpbm1lbnQgQ2VudGVyIChNRUMpIFsxNGYxOjAzNDJdCisgMjYgLT4gSU9EQVRBIEdWL0JDVFY3RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMGZjOmQwMzVdCisgMjcgLT4gUGl4ZWxWaWV3IFBsYXlUViBVbHRyYSBQcm8gKFN0ZXJlbykKKyAyOCAtPiBEVmlDTyBGdXNpb25IRFRWIDMgR29sZC1UICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDgyMF0KKyAyOSAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSAgICAgICAgICAgICAgICAgICAgICAgWzE0MjE6MDMzNF0KKyAzMCAtPiBUZXJyYVRlYyBDaW5lcmd5IDE0MDAgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgWzE1M2I6MTE2Nl0KKyAzMSAtPiBEVmlDTyBGdXNpb25IRFRWIDUgR29sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDUwMF0KKyAzMiAtPiBBdmVyTWVkaWEgVWx0cmFUViBNZWRpYSBDZW50ZXIgUENJIDU1MCAgICAgICAgICAgICAgWzE0NjE6ODAxMV0KKyAzMyAtPiBLd29ybGQgVi1TdHJlYW0gWHBlcnQgRFZECisgMzQgLT4gQVRJIEhEVFYgV29uZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDAyOmExMDFdCisgMzUgLT4gV2luRmFzdCBEVFYxMDAwLVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2NWZdCisgMzYgLT4gQVZlclRWIDMwMyAoTTEyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjAwMGFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYzdjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtMCwwICsxLDEwIEBACisgIDAgLT4gVW5rbm93biBFTTI4MDAgdmlkZW8gZ3JhYmJlciAgICAgICAgICAgICAoZW0yODAwKSAgICAgICAgW2ViMWE6MjgwMF0KKyAgMSAtPiBVbmtub3duIEVNMjgyMC8yODQwIHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKQorICAyIC0+IFRlcnJhdGVjIENpbmVyZ3kgMjUwIFVTQiAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFswY2NkOjAwMzZdCisgIDMgLT4gUGlubmFjbGUgUENUViBVU0IgMiAgICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwOF0KKyAgNCAtPiBIYXVwcGF1Z2UgV2luVFYgVVNCIDIgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjA0MDo0MjAwXQorICA1IC0+IE1TSSBWT1ggVVNCIDIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI4MjBdCisgIDYgLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVVNCICAgICAgICAgICAgICAgICAoZW0yODAwKQorICA3IC0+IExlYWR0ZWsgV2luZmFzdCBVU0IgSUkgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKKyAgOCAtPiBLd29ybGQgVVNCMjgwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCisgIDkgLT4gUGlubmFjbGUgRGF6emxlIERWQyA5MCAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwN10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCBkYzU3MjI1Li41N2M5ZDYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC02LDEwICs2LDEwIEBACiAgIDUgLT4gU0tOZXQgTW9uc3RlciBUViAgICAgICAgICAgICAgICAgICAgICAgICBbMTEzMTo0ZTg1XQogICA2IC0+IFRldmlvbiBNRCA5NzE3CiAgIDcgLT4gS05DIE9uZSBUVi1TdGF0aW9uIFJEUyAvIFR5cGhvb24gVFYgVHVuZXIgUkRTIFsxMTMxOmZlMDEsMTg5NDpmZTAxXQotICA4IC0+IFRlcnJhdGVjIENpbmVyZ3kgNDAwIFRWICAgICAgICAgICAgICAgICAgWzE1M0I6MTE0Ml0KKyAgOCAtPiBUZXJyYXRlYyBDaW5lcmd5IDQwMCBUViAgICAgICAgICAgICAgICAgIFsxNTNiOjExNDJdCiAgIDkgLT4gTWVkaW9uIDUwNDQKICAxMCAtPiBLd29ybGQvS3Vyb3V0b1NoaWtvdSBTQUE3MTMwLVRWUENJCi0gMTEgLT4gVGVycmF0ZWMgQ2luZXJneSA2MDAgVFYgICAgICAgICAgICAgICAgICBbMTUzQjoxMTQzXQorIDExIC0+IFRlcnJhdGVjIENpbmVyZ3kgNjAwIFRWICAgICAgICAgICAgICAgICAgWzE1M2I6MTE0M10KICAxMiAtPiBNZWRpb24gNzEzNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDNdCiAgMTMgLT4gVHlwaG9vbiBUVitSYWRpbyA5MDAzMQogIDE0IC0+IEVMU0EgRVgtVklTSU9OIDMwMFRWICAgICAgICAgICAgICAgICAgICAgWzEwNDg6MjI2Yl0KQEAgLTM2LDggKzM2LDggQEAKICAzNSAtPiBBdmVyTWVkaWEgQXZlclRWIFN0dWRpbyAzMDUgICAgICAgICAgICAgIFsxNDYxOjIxMTVdCiAgMzYgLT4gVVBNT1NUIFBVUlBMRSBUViAgICAgICAgICAgICAgICAgICAgICAgICBbMTJhYjowODAwXQogIDM3IC0+IEl0ZW1zIE11Y2hUViBQbHVzIC8gSVQtMDA1Ci0gMzggLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVFYgICAgICAgICAgICAgICAgICBbMTUzQjoxMTUyXQotIDM5IC0+IExpZmVWaWV3IEZseVRWIFBsYXRpbnVtIE1pbmkgICAgICAgICAgICAgWzUxNjg6MDIxMl0KKyAzOCAtPiBUZXJyYXRlYyBDaW5lcmd5IDIwMCBUViAgICAgICAgICAgICAgICAgIFsxNTNiOjExNTJdCisgMzkgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gTWluaSAgICAgICAgICAgICBbNTE2ODowMjEyLDRlNDI6MDIxMl0KICA0MCAtPiBDb21wcm8gVmlkZW9NYXRlIFRWIFBWUi9GTSAgICAgICAgICAgICAgIFsxODViOmMxMDBdCiAgNDEgLT4gQ29tcHJvIFZpZGVvTWF0ZSBUViBHb2xkKyAgICAgICAgICAgICAgICBbMTg1YjpjMTAwXQogIDQyIC0+IFNhYnJlbnQgU0JULVRWRk0gKHNhYTcxMzApCkBAIC00Niw3ICs0Niw3IEBACiAgNDUgLT4gQXZlcm1lZGlhIEFWZXJUViBTdHVkaW8gMzA3ICAgICAgICAgICAgICBbMTQ2MTo5NzE1XQogIDQ2IC0+IEFWZXJNZWRpYSBDYXJkYnVzIFRWL1JhZGlvIChFNTAwKSAgICAgICAgWzE0NjE6ZDZlZV0KICA0NyAtPiBUZXJyYXRlYyBDaW5lcmd5IDQwMCBtb2JpbGUgICAgICAgICAgICAgIFsxNTNiOjExNjJdCi0gNDggLT4gVGVycmF0ZWMgQ2luZXJneSA2MDAgVFYgTUszICAgICAgICAgICAgICBbMTUzQjoxMTU4XQorIDQ4IC0+IFRlcnJhdGVjIENpbmVyZ3kgNjAwIFRWIE1LMyAgICAgICAgICAgICAgWzE1M2I6MTE1OF0KICA0OSAtPiBDb21wcm8gVmlkZW9NYXRlIEdvbGQrIFBhbCAgICAgICAgICAgICAgIFsxODViOmMyMDBdCiAgNTAgLT4gUGlubmFjbGUgUENUViAzMDBpIERWQi1UICsgUEFMICAgICAgICAgICBbMTFiZDowMDJkXQogIDUxIC0+IFByb1ZpZGVvIFBWOTUyICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE1NDA6OTUyNF0KQEAgLTU2LDEyICs1NiwyNyBAQAogIDU1IC0+IExpZmVWaWV3IEZseURWQi1UIERVTyAgICAgICAgICAgICAgICAgICAgWzUxNjg6MDUwMiw1MTY4OjAzMDZdCiAgNTYgLT4gQXZlcm1lZGlhIEFWZXJUViAzMDcgICAgICAgICAgICAgICAgICAgICBbMTQ2MTphNzBhXQogIDU3IC0+IEF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNICAgICAgICAgICAgICAgWzE0NjE6ZjMxZl0KLSA1OCAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIChzYWE3MTM1KSAgICAgICAgICAgIFsxNDIxOjAzNTAsMTQyMTowMzcwXQorIDU4IC0+IEFEUyBUZWNoIEluc3RhbnQgVFYgKHNhYTcxMzUpICAgICAgICAgICAgWzE0MjE6MDM1MCwxNDIxOjAzNzAsMTQyMToxMzcwXQogIDU5IC0+IEt3b3JsZC9UZXZpb24gVi1TdHJlYW0gWHBlcnQgVFYgUFZSNzEzNAogIDYwIC0+IFR5cGhvb24gRFZCLVQgRHVvIERpZ2l0YWwvQW5hbG9nIENhcmRidXMgWzRlNDI6MDUwMl0KICA2MSAtPiBQaGlsaXBzIFRPVUdIIERWQi1UIHJlZmVyZW5jZSBkZXNpZ24gICAgIFsxMTMxOjIwMDRdCiAgNjIgLT4gQ29tcHJvIFZpZGVvTWF0ZSBUViBHb2xkK0lJCiAgNjMgLT4gS3dvcmxkIFhwZXJ0IFRWIFBWUjcxMzQKLSA2NCAtPiBGbHlUViBtaW5pIEFzdXMgRGlnaW1hdHJpeCAgICAgICAgICAgICAgIFsxMDQzOjAyMTAsMTA0MzowMjEwXQorIDY0IC0+IEZseVRWIG1pbmkgQXN1cyBEaWdpbWF0cml4ICAgICAgICAgICAgICAgWzEwNDM6MDIxMF0KICA2NSAtPiBWLVN0cmVhbSBTdHVkaW8gVFYgVGVybWluYXRvcgogIDY2IC0+IFl1YW4gVFVOLTkwMCAoc2FhNzEzNSkKKyA2NyAtPiBCZWhvbGRlciBCZWhvbGRUViA0MDkgRk0gICAgICAgICAgICAgICAgIFswMDAwOjQwOTFdCisgNjggLT4gR29UVmlldyA3MTM1IFBDSSAgICAgICAgICAgICAgICAgICAgICAgICBbNTQ1Njo3MTM1XQorIDY5IC0+IFBoaWxpcHMgRVVST1BBIFYzIHJlZmVyZW5jZSBkZXNpZ24gICAgICAgWzExMzE6MjAwNF0KKyA3MCAtPiBDb21wcm8gVmlkZW9tYXRlIERWQi1UMzAwICAgICAgICAgICAgICAgIFsxODViOmM5MDBdCisgNzEgLT4gQ29tcHJvIFZpZGVvbWF0ZSBEVkItVDIwMCAgICAgICAgICAgICAgICBbMTg1YjpjOTAxXQorIDcyIC0+IFJURCBFbWJlZGRlZCBUZWNobm9sb2dpZXMgVkZHNzM1MCAgICAgICAgWzE0MzU6NzM1MF0KKyA3MyAtPiBSVEQgRW1iZWRkZWQgVGVjaG5vbG9naWVzIFZGRzczMzAgICAgICAgIFsxNDM1OjczMzBdCisgNzQgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gTWluaTIgICAgICAgICAgICBbMTRjMDoxMjEyXQorIDc1IC0+IEFWZXJNZWRpYSBBVmVyVFZIRCBNQ0UgQTE4MCAgICAgICAgICAgICAgWzE0NjE6MTA0NF0KKyA3NiAtPiBTS05ldCBNb25zdGVyVFYgTW9iaWxlICAgICAgICAgICAgICAgICAgIFsxMTMxOjRlZTldCisgNzcgLT4gUGlubmFjbGUgUENUViAxMTBpIChzYWE3MTMzKSAgICAgICAgICAgICBbMTFiZDowMDJlXQorIDc4IC0+IEFTVVNUZUsgUDcxMzEgRHVhbCAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg2Ml0KKyA3OSAtPiBTZWRuYS9NdWNoVFYgUEMgVFYgQ2FyZGJ1cyBUVi9SYWRpbyAoSVRPMjUgUmV2OjJCKQorIDgwIC0+IEFTVVMgRGlnaW1hdHJpeCBUViAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6MDIxMF0KKyA4MSAtPiBQaGlsaXBzIFRpZ2VyIHJlZmVyZW5jZSBkZXNpZ24gICAgICAgICAgIFsxMTMxOjIwMThdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBmNTg3NmJlLi5lYzg0MGNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTUzLDcgKzUzLDcgQEAKIHR1bmVyPTUyIC0gVGhvbXNvbiBERFQgNzYxMCAoQVRTQy9OVFNDKQogdHVuZXI9NTMgLSBQaGlsaXBzIEZRMTI4NgogdHVuZXI9NTQgLSB0ZGE4MjkwKzc1Ci10dW5lcj01NSAtIExHIFBBTCAoVEFQRSBzZXJpZXMpCit0dW5lcj01NSAtIFRDTCAyMDAyTUIKIHR1bmVyPTU2IC0gUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZRMTIxNkFNRSBNSzQpCiB0dW5lcj01NyAtIFBoaWxpcHMgRlExMjM2QSBNSzQKIHR1bmVyPTU4IC0gWW1lYyBUVmlzaW9uIFRWRi04NTMxTUYvODgzMU1GLzg3MzFNRgpAQCAtNjUsMyArNjUsNSBAQAogdHVuZXI9NjQgLSBMRyBURFZTLUgwNjJGL1RVQTYwMzQKIHR1bmVyPTY1IC0gWW1lYyBUVkY2NlQ1LUIvREZGCiB0dW5lcj02NiAtIExHIE5UU0MgKFRBTE4gbWluaSBzZXJpZXMpCit0dW5lcj02NyAtIFBoaWxpcHMgVEQxMzE2IEh5YnJpZCBUdW5lcgordHVuZXI9NjggLSBQaGlsaXBzIFRVVjEyMzZEIEFUU0MvTlRTQyBkdWFsIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3g4OAppbmRleCA4OTdhYjgzLi4wNmEzM2E0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmN4ODgKQEAgLTE3LDkgKzE3LDkgQEAKIAktIFRoZSBjaGlwIHNwZWNzIGZvciB0aGUgb24tY2hpcCBUViBzb3VuZCBkZWNvZGVyIGFyZSBuZXh0CiAJICB0byB1c2VsZXNzIDotLwogCS0gTmV2ZXJsZXNzIHRoZSBidWlsdGluIFRWIHNvdW5kIGRlY29kZXIgc3RhcnRzIHdvcmtpbmcgbm93LAotICAgICAgICAgIGF0IGxlYXN0IGZvciBQQUwtQkcuICBPdGhlciBUViBub3JtcyBuZWVkIG90aGVyIGNvZGUgLi4uCi0gICAgICAgICAgRk9SIEFOWSBSRVBPUlRTIE9OIFRISVMgUExFQVNFIE1FTlRJT04gVEhFIFRWIE5PUk0gWU9VIEFSRQotICAgICAgICAgIFVTSU5HLgorCSAgYXQgbGVhc3QgZm9yIFBBTC1CRy4gIE90aGVyIFRWIG5vcm1zIG5lZWQgb3RoZXIgY29kZSAuLi4KKwkgIEZPUiBBTlkgUkVQT1JUUyBPTiBUSElTIFBMRUFTRSBNRU5USU9OIFRIRSBUViBOT1JNIFlPVSBBUkUKKwkgIFVTSU5HLgogCS0gTW9zdCB0dW5lciBjaGlwcyBkbyBwcm92aWRlIG1vbm8gc291bmQsIHdoaWNoIG1heSBvciBtYXkgbm90CiAJICBiZSB1c2VhYmxlIGRlcGVuZGluZyBvbiB0aGUgYm9hcmQgZGVzaWduLiAgV2l0aCB0aGUgSGF1cHBhdWdlCiAJICBjYXJkcyBpdCB3b3Jrcywgc28gdGhlcmUgaXMgbW9ubyBzb3VuZCBhdmFpbGFibGUgYXMgZmFsbGJhY2suCkBAIC02NSw1ICs2NSw1IEBACiAKICAgR2VyZAogCi0tLSAKKy0tCiBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuc2FhNzEzNAppbmRleCAxZjc4OGU0Li5iOTExZjA4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuc2FhNzEzNAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5zYWE3MTM0CkBAIC03OCw1ICs3OCw1IEBACiAKICAgR2VyZAogCi0tLSAKKy0tCiBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMKaW5kZXggOGYxOTQxZS4uZDMzODk2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NhcmRzCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcwpAQCAtMTQ5LDExICsxNDksMTEgQEAKICAgMikgVGhlcmUgaXMgYSBwcmludCBvbiB0aGUgUENCOgogICAgICAgTFIyNSAgICAgICA9IEZseXZpZGVvIChab3JhbiBaUjM2MTIwLCBTQUE3MTEwQSkKICAgICAgIExSMjYgUmV2Lk4gPSBGbHl2aWRlbyBJSSAoQnQ4NDgpCi0gICAgICAgICAgIFJldi5PID0gRmx5dmlkZW8gSUkgKEJ0ODc4KQorCSAgIFJldi5PID0gRmx5dmlkZW8gSUkgKEJ0ODc4KQogICAgICAgTFIzNyBSZXYuQyA9IEZseXZpZGVvIEVaIChDYXB0dXJlIG9ubHksIFpSMzYxMjAgKyBTQUE3MTEwKQogICAgICAgTFIzOCBSZXYuQTE9IEZseXZpZGVvIElJIEVaIChCdDg0OCBjYXB0dXJlIG9ubHkpCiAgICAgICBMUjUwIFJldi5RID0gRmx5dmlkZW8gOTggKHcvZWVwcm9tIGFuZCBQQ0kgc3Vic3lzdGVtIElEKQotICAgICAgICAgICBSZXYuVyA9IEZseXZpZGVvIDk4IChubyBlZXByb20pCisJICAgUmV2LlcgPSBGbHl2aWRlbyA5OCAobm8gZWVwcm9tKQogICAgICAgTFI1MSBSZXYuRSA9IEZseXZpZGVvIDk4IEVaIChjYXB0dXJlIG9ubHkpCiAgICAgICBMUjkwICAgICAgID0gRmx5dmlkZW8gMjAwMCAoQnQ4NzgpCiAJCSAgIEZseXZpZGVvIDIwMDBTIChCdDg3OCkgdy9TdGVyZW8gVFYgKFBhY2thZ2UgaW5jbC4gTFI5MSBkYXVnaHRlcmJvYXJkKQpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICBMUjEzNgkgPSBGbHl2aWRlbyAyMTAwLzMxMDAgKExvdyBwcm9maWxlLCBTQUE3MTMwL1NBQTcxMzQpCiAgICAgICBMUjEzNyAgICAgID0gRmx5dmlkZW8gRFYyMDAwL0RWMzAwMCAoU0FBNzEzMC9TQUE3MTM0ICsgSUVFRTEzOTQpCiAgICAgICBMUjEzOCBSZXYuQz0gRmx5dmlkZW8gMjAwMCAoU0FBNzEzMCkKLQkgICAgICAgIG9yIEZseXZpZGVvIDMwMDAgKFNBQTcxMzQpIHcvU3RlcmVvIFRWCisJCW9yIEZseXZpZGVvIDMwMDAgKFNBQTcxMzQpIHcvU3RlcmVvIFRWCiAJCSAgIFRoZXNlIGV4aXN0IGluIHZhcmlhdGlvbnMgdy9GTSBhbmQgdy9SZW1vdGUgc29tZXRpbWVzIGRlbm90ZWQKIAkJICAgYnkgc3VmZml4ZXMgIkZNIiBhbmQgIlIiLgogICAzKSBZb3UgaGF2ZSBhIGxhcHRvcCAobWluaVBDSSBjYXJkKToKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICA1MDY4MCAiVFYgVHVuZXIgUGFsIEJHIiAoYmx1ZSBwYWNrYWdlKT0gUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldiA5QikKICAgNTA2ODEgIlRWIFR1bmVyIFBDSSBQYWwgSSIgKHZhcmlhbnQgb2YgNTA2ODApCiAgIDUwNjgyICJUVmlldyBUVi9GTSBUdW5lciBQYWwgQkciICAgICAgID0gRmx5dmlkZW8gOThGTSAoTFI1MCBSZXYuUSkKLSAgICAgICAgIE5vdGU6IFRoZSBwYWNrYWdlIGhhcyBhIHBpY3R1cmUgb2YgQ1BIMDV4ICh3aGljaCB3b3VsZCBiZSBhIHJlYWwgVFZpZXcpCisJIE5vdGU6IFRoZSBwYWNrYWdlIGhhcyBhIHBpY3R1cmUgb2YgQ1BIMDV4ICh3aGljaCB3b3VsZCBiZSBhIHJlYWwgVFZpZXcpCiAgIDUwNjgzICJUViBUdW5lciBQQ0kgU0VDQU0iICh2YXJpYW50IG9mIDUwNjgwKQogICA1MDY4NCAiVFYgVHVuZXIgUGFsIEJHIiAgICAgICAgICAgICAgICA9IFBpeGVsdmlldyA4NzhUVihSZXYuM0QpCiAgIDUwNjg2ICJUViBUdW5lciIgICAgICAgICAgICAgICAgICAgICAgID0gS05DMSBUViBTdGF0aW9uCkBAIC00MTgsOSArNDE4LDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBMVDkzMDYvTUQ5MzA2ID0gQ1BIMDYxCiAgICBMVDk0MTUvTUQ5NDE1ID0gTFI5MCBSZXYuRiBvciBSZXYuRwotICAgICAgICAgIE1EOTU5MiA9IEF2ZXJtZWRpYSBUVnBob25lOTggKFBDSV9JRD0xNDYxOjAwMDMpLCBQQ0ItUmV2PU0xNjhJSS1CICh3L1REQTk4NzNIKQotICAgICAgICAgIE1EOTcxNyA9IEtOQyBPbmUgKFJldiBENCwgc2FhNzEzNCwgRk0xMjE2IE1LMiB0dW5lcikKLSAgICAgICAgICBNRDUwNDQgPSBLTkMgT25lIChSZXYgRDQsIHNhYTcxMzQsIEZNMTIxNk1FIE1LMyB0dW5lcikKKwkgIE1EOTU5MiA9IEF2ZXJtZWRpYSBUVnBob25lOTggKFBDSV9JRD0xNDYxOjAwMDMpLCBQQ0ItUmV2PU0xNjhJSS1CICh3L1REQTk4NzNIKQorCSAgTUQ5NzE3ID0gS05DIE9uZSAoUmV2IEQ0LCBzYWE3MTM0LCBGTTEyMTYgTUsyIHR1bmVyKQorCSAgTUQ1MDQ0ID0gS05DIE9uZSAoUmV2IEQ0LCBzYWE3MTM0LCBGTTEyMTZNRSBNSzMgdHVuZXIpCiAKIE1vZHVsYXIgVGVjaG5vbG9naWVzICh3d3cubW9kdWxhcnRlY2guY29tKSBVSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NTMsMTAgKzQ1MywxMCBAQAogICAgRGlzY29zIEFEUiBQQy1LYXJ0ZSBJU0EgKG5vIFRWISkKICAgIERpc2NvcyBBRFIgUEMtS2FydGUgUENJIChwcm9iYWJseSBubyBUVj8pCiAgICBUZWNobmktUEMtU2F0IChTYXQuIGFuYWxvZykKLSAgICAgICAgIFJldiAxLjIgKHpyMzYxMjAsIHZweDMyMjAsIHN0djAwMzAsIHNhYTUyNDYsIEJTSkUzLTQ5NEEpCisJIFJldiAxLjIgKHpyMzYxMjAsIHZweDMyMjAsIHN0djAwMzAsIHNhYTUyNDYsIEJTSkUzLTQ5NEEpCiAgICBNZWRpYWZvY3VzIEkgKHpyMzYxMjAvenIzNjEyNSwgZHJwMzUxMCwgU2F0LiBhbmFsb2cgKyBBRFIgUmFkaW8pCiAgICBNZWRpYWZvY3VzIElJIChzYWE3MTQ2LCBTYXQuIGFuYWxvZykKLSAgICAgICAgIFNhdEFEUiBSZXYgMi4xIChzYWE3MTQ2YSwgc2FhNzExM2gsIHN0djAwNTZhLCBtc3AzNDAwYywgZHJwMzUxMGEsIEJTS0UzLTMwN0EpCisJIFNhdEFEUiBSZXYgMi4xIChzYWE3MTQ2YSwgc2FhNzExM2gsIHN0djAwNTZhLCBtc3AzNDAwYywgZHJwMzUxMGEsIEJTS0UzLTMwN0EpCiAgICBTa3lTdGFyIDEgRFZCICAoQVY3MTEwKSA9IFRlY2hub3RyZW5kIFByZW1pdW0KICAgIFNreVN0YXIgMiBEVkIgIChCMkMyKSAoPVNreTJQQykKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKaW5kZXggYTcyZjRjOS4uN2NhMjE1NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCkBAIC00Miw5ICs0Miw5IEBACiB0aGUgU3Vic3lzdGVtIElEIGluIHRoZSBzZWNvbmQgbGluZSwgbG9va3MgbGlrZSB0aGlzOgogCiAwMDowYS4wIE11bHRpbWVkaWEgdmlkZW8gY29udHJvbGxlcjogQnJvb2t0cmVlIENvcnBvcmF0aW9uIEJ0ODc4IChyZXYgMDIpCi0gICAgICAgIFN1YnN5c3RlbTogSGF1cHBhdWdlIGNvbXB1dGVyIHdvcmtzIEluYy4gV2luVFYvR08KLSAgICAgICAgRmxhZ3M6IGJ1cyBtYXN0ZXIsIG1lZGl1bSBkZXZzZWwsIGxhdGVuY3kgMzIsIElSUSA1Ci0gICAgICAgIE1lbW9yeSBhdCBlMjAwMDAwMCAoMzItYml0LCBwcmVmZXRjaGFibGUpIFtzaXplPTRLXQorCVN1YnN5c3RlbTogSGF1cHBhdWdlIGNvbXB1dGVyIHdvcmtzIEluYy4gV2luVFYvR08KKwlGbGFnczogYnVzIG1hc3RlciwgbWVkaXVtIGRldnNlbCwgbGF0ZW5jeSAzMiwgSVJRIDUKKwlNZW1vcnkgYXQgZTIwMDAwMDAgKDMyLWJpdCwgcHJlZmV0Y2hhYmxlKSBbc2l6ZT00S10KIAogb25seSBidDg3OC1iYXNlZCBjYXJkcyBjYW4gaGF2ZSBhIHN1YnN5c3RlbSBJRCAod2hpY2ggZG9lcyBub3QgbWVhbgogdGhhdCBldmVyeSBjYXJkIHJlYWxseSBoYXMgb25lKS4gIGJ0ODQ4IGNhcmRzIGNhbid0IGhhdmUgYSBTdWJzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRCmluZGV4IGI4YzljMjYuLjFlNjMyOGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUQpAQCAtNjEsOCArNjEsOCBAQAogc3RydWN0IHR2Y2FyZAogewogCVsgLi4uIF0KLSAgICAgICAgdTMyIGdwaW9tYXNrOwotICAgICAgICB1MzIgYXVkaW9tdXhbNl07IC8qIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBtdXRlLCBzdGVyZW8gKi8KKwl1MzIgZ3Bpb21hc2s7CisJdTMyIGF1ZGlvbXV4WzZdOyAvKiBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgbXV0ZSwgc3RlcmVvICovCiB9OwogCiBncGlvbWFzayBzcGVjaWZpZXMgd2hpY2ggcGlucyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBhdWRpbyBtdXggY2hpcC4KQEAgLTEyNiwxMSArMTI2LDExIEBACiBwbGwgICAgICAgICAgICAgLSBzYW1lIGFzIHBsbD0gaW5zbW9kIG9wdGlvbgogdHVuZXJfdHlwZSAgICAgIC0gc2FtZSBhcyB0dW5lcj0gaW5zbW9kIG9wdGlvbgogKl9tb2R1bGVuYW1lICAgIC0gaGludCB3aGVuZXZlciBzb21lIGNhcmQgbmVlZHMgdGhpcyBvciB0aGF0IGF1ZGlvCi0gICAgICAgICAgICAgICAgICBtb2R1bGUgbG9hZGVkIHRvIHdvcmsgcHJvcGVybHkuCisJCSAgbW9kdWxlIGxvYWRlZCB0byB3b3JrIHByb3Blcmx5LgogaGFzX3JhZGlvCS0gd2hlbmV2ZXIgdGhpcyBUViBjYXJkIGhhcyBhIHJhZGlvIHR1bmVyLgogbm9fbXNwMzR4eAktICIxIiBkaXNhYmxlcyBsb2FkaW5nIG9mIG1zcDM0MDAubyBtb2R1bGUKLW5vX3RkYTk4NzUJLSAiMSIgZGlzYWJsZXMgbG9hZGluZyBvZiB0ZGE5ODc1Lm8gbW9kdWxlIAotbmVlZHNfdHZhdWRpbwktIHNldCB0byAiMSIgdG8gbG9hZCB0dmF1ZGlvLm8gbW9kdWxlIAorbm9fdGRhOTg3NQktICIxIiBkaXNhYmxlcyBsb2FkaW5nIG9mIHRkYTk4NzUubyBtb2R1bGUKK25lZWRzX3R2YXVkaW8JLSBzZXQgdG8gIjEiIHRvIGxvYWQgdHZhdWRpby5vIG1vZHVsZQogCiBJZiBzb21lIGNvbmZpZyBpdGVtIGlzIHNwZWNpZmllZCBib3RoIGZyb20gdGhlIHR2Y2FyZHMgYXJyYXkgYW5kIGFzCiBpbnNtb2Qgb3B0aW9uLCB0aGUgaW5zbW9kIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgpAQCAtMTQ0LDUgKzE0NCw1IEBACiAKIFBTOiBJZiB5b3UgaGF2ZSBhIG5ldyB3b3JraW5nIGVudHJ5LCBtYWlsIGl0IHRvIG1lLgogCi0tLSAKKy0tCiBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVHVuZXJzIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1R1bmVycwppbmRleCBkMThmYmM3Li4wYTM3MWQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVHVuZXJzCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9UdW5lcnMKQEAgLTIxLDcgKzIxLDcgQEAKICAgIEo9IE5UU0MtSmFwYW4KICAgIEw9IFNlY2FtIExMCiAgICBNPSBCRytJK0RLCi0gICBOPSBOVFNDIAorICAgTj0gTlRTQwogICAgUT0gQkcrSStESytMTAogIFs4OV06ID8KICBbMTI1XToKQEAgLTk2LDcgKzk2LDcgQEAKICAgVEFEQy1IMDAyRjogTlRTQyAoTCwxNzUvNDEwPzsgMi1CLCBDLVcrMTEsIFcrMTItNjkpCiAgIFRBREMtTTIwMUQ6IFBBTCBEL0srQi9HK0kgKEwsMTQzLzQyNSkgIChzb3VuZCBjb250cm9sIGF0IEkyQyBhZGRyZXNzIDB4YzgpCiAgIFRBREMtVDAwM0Y6IE5UU0MgVGFpd2FuICAoTCwxNzUvNDEwPzsgMi1CLCBDLVcrMTEsIFcrMTItNjkpCi0gIFN1ZmZpeDogCisgIFN1ZmZpeDoKICAgICBQPSBTdGFuZGFyZCBwaG9ubyBmZW1hbGUgc29ja2V0CiAgICAgRD0gSUVDIGZlbWFsZSBzb2NrZXQKICAgICBGPSBGLWNvbm5lY3RvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9saWZldmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2xpZmV2aWV3LnR4dAppbmRleCBiMDdlYTc5Li4wNWY5ZWI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2xpZmV2aWV3LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2xpZmV2aWV3LnR4dApAQCAtMTAsMzMgKzEwLDMzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc2FhNzEzNDoKLSAgICAgICAgICAgICAgICAvKiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAoTFIyMTRXRikgKi8KLSAgICAgICAgICAgICAgICAvKiAiUGV0ZXIgTWlzc2VsIDxwZXRlci5taXNzZWxAb25saW5laG9tZS5kZT4gKi8KLSAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gRk0iLAotICAgICAgICAgICAgICAgIC8qICAgICAgR1AyNyAgICBNRFQyMDA1IFBCNCBwaW4gMTAgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMjYgICAgTURUMjAwNSBQQjMgcGluIDkgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMjUgICAgTURUMjAwNSBQQjIgcGluIDggKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMjMgICAgTURUMjAwNSBQQjEgcGluIDcgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMjIgICAgTURUMjAwNSBQQjAgcGluIDYgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMjEgICAgTURUMjAwNSBQQjUgcGluIDExICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDIwICAgIE1EVDIwMDUgUEI2IHBpbiAxMiAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxOSAgICBNRFQyMDA1IFBCNyBwaW4gMTMgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIG5jICAgICAgTURUMjAwNSBQQTMgcGluIDIgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIFJlbW90ZSAgTURUMjAwNSBQQTIgcGluIDEgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMTggICAgTURUMjAwNSBQQTEgcGluIDE4ICovCi0gICAgICAgICAgICAgICAgLyogICAgICBuYyAgICAgIE1EVDIwMDUgUEEwIHBpbiAxNyBzdHJhcCBsb3cgKi8KKwkJLyogTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gRk0gKExSMjE0V0YpICovCisJCS8qICJQZXRlciBNaXNzZWwgPHBldGVyLm1pc3NlbEBvbmxpbmVob21lLmRlPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gRk0iLAorCQkvKiAgICAgIEdQMjcgICAgTURUMjAwNSBQQjQgcGluIDEwICovCisJCS8qICAgICAgR1AyNiAgICBNRFQyMDA1IFBCMyBwaW4gOSAqLworCQkvKiAgICAgIEdQMjUgICAgTURUMjAwNSBQQjIgcGluIDggKi8KKwkJLyogICAgICBHUDIzICAgIE1EVDIwMDUgUEIxIHBpbiA3ICovCisJCS8qICAgICAgR1AyMiAgICBNRFQyMDA1IFBCMCBwaW4gNiAqLworCQkvKiAgICAgIEdQMjEgICAgTURUMjAwNSBQQjUgcGluIDExICovCisJCS8qICAgICAgR1AyMCAgICBNRFQyMDA1IFBCNiBwaW4gMTIgKi8KKwkJLyogICAgICBHUDE5ICAgIE1EVDIwMDUgUEI3IHBpbiAxMyAqLworCQkvKiAgICAgIG5jICAgICAgTURUMjAwNSBQQTMgcGluIDIgKi8KKwkJLyogICAgICBSZW1vdGUgIE1EVDIwMDUgUEEyIHBpbiAxICovCisJCS8qICAgICAgR1AxOCAgICBNRFQyMDA1IFBBMSBwaW4gMTggKi8KKwkJLyogICAgICBuYyAgICAgIE1EVDIwMDUgUEEwIHBpbiAxNyBzdHJhcCBsb3cgKi8KIAotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxNyAgICBTdHJhcCAiR1A3Ij1IaWdoICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDE2ICAgIFN0cmFwICJHUDYiPUhpZ2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMD1SYWRpbyAxPVRWCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlcyBTQTYzMEQgRU5DSDEgYW5kIEhFRjQwNTIgQTEgcGlucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyBGTSByYWRpbyB0aHJvdWdoIFNJRiBpbnB1dCAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxNSAgICBuYyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxNCAgICBuYyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxMyAgICBuYyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxMiAgICBTdHJhcCAiR1A1IiA9IEhpZ2ggKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMTEgICAgU3RyYXAgIkdQNCIgPSBIaWdoICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDEwICAgIFN0cmFwICJHUDMiID0gSGlnaCAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AwOSAgICBTdHJhcCAiR1AyIiA9IExvdyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AwOCAgICBTdHJhcCAiR1AxIiA9IExvdyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AwNy4wMCBuYyAqLworCQkvKiAgICAgIEdQMTcgICAgU3RyYXAgIkdQNyI9SGlnaCAqLworCQkvKiAgICAgIEdQMTYgICAgU3RyYXAgIkdQNiI9SGlnaAorCQkJCTA9UmFkaW8gMT1UVgorCQkJCURyaXZlcyBTQTYzMEQgRU5DSDEgYW5kIEhFRjQwNTIgQTEgcGlucworCQkJCXRvIGRvIEZNIHJhZGlvIHRocm91Z2ggU0lGIGlucHV0ICovCisJCS8qICAgICAgR1AxNSAgICBuYyAqLworCQkvKiAgICAgIEdQMTQgICAgbmMgKi8KKwkJLyogICAgICBHUDEzICAgIG5jICovCisJCS8qICAgICAgR1AxMiAgICBTdHJhcCAiR1A1IiA9IEhpZ2ggKi8KKwkJLyogICAgICBHUDExICAgIFN0cmFwICJHUDQiID0gSGlnaCAqLworCQkvKiAgICAgIEdQMTAgICAgU3RyYXAgIkdQMyIgPSBIaWdoICovCisJCS8qICAgICAgR1AwOSAgICBTdHJhcCAiR1AyIiA9IExvdyAqLworCQkvKiAgICAgIEdQMDggICAgU3RyYXAgIkdQMSIgPSBMb3cgKi8KKwkJLyogICAgICBHUDA3LjAwIG5jICovCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDk5NWJmZDguLjU1NDFmOTkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xMzMwLDYgKzEzMzAsMjQgQEAKIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAvCiBTOglTdXBwb3J0ZWQKIAorSU5URUwgUFJPL1dJUkVMRVNTIDIxMDAgTkVUV09SSyBDT05ORUNUSU9OIFNVUFBPUlQKK1A6CVlpIFpodQorTToJeWkuemh1QGludGVsLmNvbQorUDoJSmFtZXMgS2V0cmVub3MKK006CWprZXRyZW5vQGxpbnV4LmludGVsLmNvbQorTDoJaHR0cDovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9tYWlsbWFuL2xpc3RpbmZvL2lwdzIxMDAtZGV2ZWwKK1c6CWh0dHA6Ly9pcHcyMTAwLnNvdXJjZWZvcmdlLm5ldAorUzoJU3VwcG9ydGVkCisKK0lOVEVMIFBSTy9XSVJFTEVTUyAyOTE1QUJHIE5FVFdPUksgQ09OTkVDVElPTiBTVVBQT1JUCitQOglZaSBaaHUKK006CXlpLnpodUBpbnRlbC5jb20KK1A6CUphbWVzIEtldHJlbm9zCitNOglqa2V0cmVub0BsaW51eC5pbnRlbC5jb20KK0w6CWh0dHA6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbWFpbG1hbi9saXN0aW5mby9pcHcyMTAwLWRldmVsCitXOglodHRwOi8vaXB3MjIwMC5zb3VyY2Vmb3JnZS5uZXQKK1M6CVN1cHBvcnRlZAorCiBJT0MzIERSSVZFUgogUDoJUmFsZiBCYWVjaGxlCiBNOglyYWxmQGxpbnV4LW1pcHMub3JnCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZWIyMGMzYWYuLmE4NjgyNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQzLDIxICs0MywxNyBAQAogI2luY2x1ZGUgInByb3RvLmgiCiAjaW5jbHVkZSAicGNpX2ltcGwuaCIKIAotdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKLXsKLQliYXJyaWVyKCk7Ci19Ci0KIHZvaWQKIGNwdV9pZGxlKHZvaWQpCiB7CisJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisKIAl3aGlsZSAoMSkgewotCQl2b2lkICgqaWRsZSkodm9pZCkgPSBkZWZhdWx0X2lkbGU7CiAJCS8qIEZJWE1FIC0tIEVWNiBhbmQgTENBNDUga25vdyBob3cgdG8gcG93ZXIgZG93bgogCQkgICB0aGUgQ1BVLiAgKi8KIAogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQotCQkJaWRsZSgpOworCQkJY3B1X3JlbGF4KCk7CiAJCXNjaGVkdWxlKCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggOTFkNWVmMy4uZWM3NzcyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0zNTYsNiArMzU2LDE2IEBACiAJICBTYXkgWSBoZXJlIHRvIGV4cGVyaW1lbnQgd2l0aCB0dXJuaW5nIENQVXMgb2ZmIGFuZCBvbi4gIENQVXMKIAkgIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUuCiAKK2NvbmZpZyBMT0NBTF9USU1FUlMKKwlib29sICJVc2UgbG9jYWwgdGltZXIgaW50ZXJydXB0cyIKKwlkZXBlbmRzIG9uIFNNUCAmJiBSRUFMVklFV19NUENPUkUKKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgbG9jYWwgdGltZXJzIG9uIFNNUCBwbGF0Zm9ybXMsIHJhdGhlciB0aGVuIHRoZQorCSAgbGVnYWN5IElQSSBicm9hZGNhc3QgbWV0aG9kLiAgTG9jYWwgdGltZXJzIGFsbG93cyB0aGUgc3lzdGVtCisJICBhY2NvdW50aW5nIHRvIGJlIHNwcmVhZCBhY3Jvc3MgdGhlIHRpbWVyIGludGVydmFsLCBwcmV2ZW50aW5nIGEKKwkgICJ0aHVuZGVyaW5nIGhlcmQiIGF0IGV2ZXJ5IHRpbWVyIHRpY2suCisKIGNvbmZpZyBQUkVFTVBUCiAJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA1MGYxM2VlLi41YWI5NDU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTI4Myw4ICsyODMsMTQgQEAKIAlwdXRzdHIoIi4iKTsKIH0KIAorI2lmbmRlZiBhcmNoX2Vycm9yCisjZGVmaW5lIGFyY2hfZXJyb3IoeCkKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQogeworCWFyY2hfZXJyb3IoeCk7CisKIAlwdXRzdHIoIlxuXG4iKTsKIAlwdXRzdHIoeCk7CiAJcHV0c3RyKCJcblxuIC0tIFN5c3RlbSBoYWx0ZWQiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKaW5kZXggYmI0ZWZmNi4uYzdmZGYzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKQEAgLTE5LDEyICsxOSw2IEBACiAKICNkZWZpbmUgU0NPT1BfUkVHKGQsYWRyKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopKGQgKyhhZHIpKSkKIAotLyogUENNQ0lBIHRvIFNjb29wIGxpbmthZ2Ugc3RydWN0dXJlcyBmb3IgcHhhMnh4X3NoYXJwc2wuYwotICAgVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gbGluayBtdWx0aXBsZSBzY29vcCBkZXZpY2VzIGludG8gb25lCi0gICBzaW5nbGUgZW50aXR5IGZvciB0aGUgcHhhMnh4X3BjbWNpYSBkZXZpY2UgKi8KLWludCBzY29vcF9udW07Ci1zdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2RldiAqc2Nvb3BfZGV2czsKLQogc3RydWN0ICBzY29vcF9kZXYgewogCXZvaWQgICpiYXNlOwogCXNwaW5sb2NrX3Qgc2Nvb3BfbG9jazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKaW5kZXggN2IxN2E4Ny4uN2EzMjYxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTksNiArOSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMTI2LDYgKzEyNyw5IEBACiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfNCk7CiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfOCk7CiAKKwkvKiBjcnlwdG8gaGFzaCAqLworRVhQT1JUX1NZTUJPTChzaGFfdHJhbnNmb3JtKTsKKwogCS8qIGdjYyBsaWIgZnVuY3Rpb25zICovCiBFWFBPUlRfU1lNQk9MKF9fYXNobGRpMyk7CiBFWFBPUlRfU1lNQk9MKF9fYXNocmRpMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCBhNTExZWM1Li5kOWZiODE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTQ3LDYgKzQ3LDEzIEBACiAJbW92bmUJcjAsIHNwCiAJYWRybmUJbHIsIDFiCiAJYm5lCWRvX0lQSQorCisjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUworCXRlc3RfZm9yX2x0aXJxIHIwLCByNiwgcjUsIGxyCisJbW92bmUJcjAsIHNwCisJYWRybmUJbHIsIDFiCisJYm5lCWRvX2xvY2FsX3RpbWVyCisjZW5kaWYKICNlbmRpZgogCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCA5ZGVmNDQwLi5kNzA5OWRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC0yNjQsNiArMjY0LDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTVAKIAkJc2hvd19pcGlfbGlzdChwKTsKKwkJc2hvd19sb2NhbF9pcnFzKHApOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIkVycjogJTEwbHVcbiIsIGlycV9lcnJfY291bnQpOwogCX0KQEAgLTk5NSw3ICs5OTYsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyOwogCWludCBpcnE7CiAKLQlkaXIgPSBwcm9jX21rZGlyKCJpcnEiLCAwKTsKKwlkaXIgPSBwcm9jX21rZGlyKCJpcnEiLCBOVUxMKTsKIAlpZiAoIWRpcikKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCBiYTI5ODI3Li4zMDQ5NGFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTg2LDEyICs4NiwxNiBAQAogICovCiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JaWYgKCFuZWVkX3Jlc2NoZWQoKSAmJiAhaGx0X2NvdW50ZXIpIHsKLQkJdGltZXJfZHluX3JlcHJvZ3JhbSgpOwotCQlhcmNoX2lkbGUoKTsKKwlpZiAoaGx0X2NvdW50ZXIpCisJCWNwdV9yZWxheCgpOworCWVsc2UgeworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQl0aW1lcl9keW5fcmVwcm9ncmFtKCk7CisJCQlhcmNoX2lkbGUoKTsKKwkJfQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQotCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIAogLyoKQEAgLTExNiwxMyArMTIwLDEzIEBACiAKIAkJaWYgKCFpZGxlKQogCQkJaWRsZSA9IGRlZmF1bHRfaWRsZTsKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWxlZHNfZXZlbnQobGVkX2lkbGVfc3RhcnQpOwogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJaWRsZSgpOwogCQlsZWRzX2V2ZW50KGxlZF9pZGxlX2VuZCk7Ci0JCXByZWVtcHRfZW5hYmxlKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCkBAIC0zNTUsNyArMzU5LDcgQEAKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHAtPnRocmVhZF9pbmZvOwogCXN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3M7CiAKLQljaGlsZHJlZ3MgPSAoKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKXRocmVhZCArIFRIUkVBRF9TVEFSVF9TUCkpIC0gMTsKKwljaGlsZHJlZ3MgPSAodm9pZCAqKXRocmVhZCArIFRIUkVBRF9TVEFSVF9TUCAtIHNpemVvZigqcmVncyk7CiAJKmNoaWxkcmVncyA9ICpyZWdzOwogCWNoaWxkcmVncy0+QVJNX3IwID0gMDsKIAljaGlsZHJlZ3MtPkFSTV9zcCA9IHN0YWNrX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IGVkYjVhNDAuLmU1NWVhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkJcmV0ID0gLUVJTzsKIAl9CiAKLQlzZWNvbmRhcnlfZGF0YS5zdGFjayA9IDA7CisJc2Vjb25kYXJ5X2RhdGEuc3RhY2sgPSBOVUxMOwogCXNlY29uZGFyeV9kYXRhLnBnZGlyID0gMDsKIAogCSpwbWRfb2Zmc2V0KHBnZCwgUEhZU19PRkZTRVQpID0gX19wbWQoMCk7CkBAIC0xODUsNiArMTg1LDExIEBACiAJbWlncmF0ZV9pcnFzKCk7CiAKIAkvKgorCSAqIFN0b3AgdGhlIGxvY2FsIHRpbWVyIGZvciB0aGlzIENQVS4KKwkgKi8KKwlsb2NhbF90aW1lcl9zdG9wKGNwdSk7CisKKwkvKgogCSAqIEZsdXNoIHVzZXIgY2FjaGUgYW5kIFRMQiBtYXBwaW5ncywgYW5kIHRoZW4gcmVtb3ZlIHRoaXMgQ1BVCiAJICogZnJvbSB0aGUgdm0gbWFzayBzZXQgb2YgYWxsIHByb2Nlc3Nlcy4KIAkgKi8KQEAgLTI1MSw3ICsyNTYsOSBAQAogYXNtbGlua2FnZSB2b2lkIF9fY3B1aW5pdCBzZWNvbmRhcnlfc3RhcnRfa2VybmVsKHZvaWQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSAmaW5pdF9tbTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHU7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlwcmludGsoIkNQVSV1OiBCb290ZWQgc2Vjb25kYXJ5IHByb2Nlc3NvclxuIiwgY3B1KTsKIApAQCAtMjY4LDYgKzI3NSw3IEBACiAJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwogCiAJY3B1X2luaXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAogCS8qCiAJICogR2l2ZSB0aGUgcGxhdGZvcm0gYSBjaGFuY2UgdG8gZG8gaXRzIG93biBpbml0aWFsaXNhdGlvbi4KQEAgLTI5MCw2ICsyOTgsMTEgQEAKIAljcHVfc2V0KGNwdSwgY3B1X29ubGluZV9tYXApOwogCiAJLyoKKwkgKiBTZXR1cCBsb2NhbCB0aW1lciBmb3IgdGhpcyBDUFUuCisJICovCisJbG9jYWxfdGltZXJfc2V0dXAoY3B1KTsKKworCS8qCiAJICogT0ssIGl0J3Mgb2ZmIHRvIHRoZSBpZGxlIHRocmVhZCBmb3IgdXMKIAkgKi8KIAljcHVfaWRsZSgpOwpAQCAtMzU5LDggKzM3Miw4IEBACiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cywgZnJvbSBhCiAgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgogICovCi1pbnQgc21wX2NhbGxfZnVuY3Rpb25fb25fY3B1KHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IHJldHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2FpdCwgY3B1bWFza190IGNhbGxtYXApCitzdGF0aWMgaW50IHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdSh2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJICAgIGludCByZXRyeSwgaW50IHdhaXQsIGNwdW1hc2tfdCBjYWxsbWFwKQogewogCXN0cnVjdCBzbXBfY2FsbF9zdHJ1Y3QgZGF0YTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CkBAIC00NTQsNiArNDY3LDE4IEBACiAJc2VxX3B1dGMocCwgJ1xuJyk7CiB9CiAKK3ZvaWQgc2hvd19sb2NhbF9pcnFzKHN0cnVjdCBzZXFfZmlsZSAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJc2VxX3ByaW50ZihwLCAiTE9DOiAiKTsKKworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdFtjcHVdLmxvY2FsX3RpbWVyX2lycXMpOworCisJc2VxX3B1dGMocCwgJ1xuJyk7Cit9CisKIHN0YXRpYyB2b2lkIGlwaV90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgdXNlciA9IHVzZXJfbW9kZShyZWdzKTsKQEAgLTQ2NCw2ICs0ODksMTggQEAKIAlpcnFfZXhpdCgpOwogfQogCisjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUworYXNtbGlua2FnZSB2b2lkIGRvX2xvY2FsX3RpbWVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAobG9jYWxfdGltZXJfYWNrKCkpIHsKKwkJaXJxX3N0YXRbY3B1XS5sb2NhbF90aW1lcl9pcnFzKys7CisJCWlwaV90aW1lcihyZWdzKTsKKwl9Cit9CisjZW5kaWYKKwogLyoKICAqIGlwaV9jYWxsX2Z1bmN0aW9uIC0gaGFuZGxlIElQSSBmcm9tIHNtcF9jYWxsX2Z1bmN0aW9uKCkKICAqCkBAIC01MTUsNyArNTUyLDcgQEAKICAqCiAgKiAgQml0IDAgLSBJbnRlci1wcm9jZXNzb3IgZnVuY3Rpb24gY2FsbAogICovCi12b2lkIGRvX0lQSShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBkb19JUEkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgaXBpX2RhdGEgKmlwaSA9ICZwZXJfY3B1KGlwaV9kYXRhLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2JpdG9wcy5oIGIvYXJjaC9hcm0vbGliL2JpdG9wcy5oCmluZGV4IGYzNWQ5MWYuLmI4YzE0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9saWIvYml0b3BzLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAlhbmQJcjIsIHIwLCAjNwogCW1vdglyMywgIzEKIAltb3YJcjMsIHIzLCBsc2wgcjIKLQlzYXZlX2FuZF9kaXNhYmxlX2lycXMgaXAsIHIyCisJc2F2ZV9hbmRfZGlzYWJsZV9pcnFzIGlwCiAJbGRyYglyMiwgW3IxLCByMCwgbHNyICMzXQogCVxpbnN0cglyMiwgcjIsIHIzCiAJc3RyYglyMiwgW3IxLCByMCwgbHNyICMzXQpAQCAtNTQsNyArNTQsNyBAQAogCWFkZAlyMSwgcjEsIHIwLCBsc3IgIzMKIAlhbmQJcjMsIHIwLCAjNwogCW1vdglyMCwgIzEKLQlzYXZlX2FuZF9kaXNhYmxlX2lycXMgaXAsIHIyCisJc2F2ZV9hbmRfZGlzYWJsZV9pcnFzIGlwCiAJbGRyYglyMiwgW3IxXQogCXRzdAlyMiwgcjAsIGxzbCByMwogCVxpbnN0cglyMiwgcjIsIHIwLCBsc2wgcjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jCmluZGV4IGJlMjgzY2QuLjM5OTAxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCBlYjVmNmQ3NC4uMTAwZmIzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC02MiwxNSArNjIsNiBAQAogCS5pb19vdXQJCT0gQ09SR0lfU0NPT1BfSU9fT1VULAogfTsKIAotc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IGNvcmdpX3BjbWNpYV9zY29vcFtdID0gewotewotCS5kZXYgICAgICAgID0gJmNvcmdpc2Nvb3BfZGV2aWNlLmRldiwKLQkuaXJxICAgICAgICA9IENPUkdJX0lSUV9HUElPX0NGX0lSUSwKLQkuY2RfaXJxICAgICA9IENPUkdJX0lSUV9HUElPX0NGX0NELAotCS5jZF9pcnFfc3RyID0gIlBDTUNJQTAgQ0QiLAotfSwKLX07Ci0KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29yZ2lzY29vcF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoYXJwLXNjb29wIiwKIAkuaWQJCT0gLTEsCkBAIC04MSw2ICs3Miw0NCBAQAogCS5yZXNvdXJjZQk9IGNvcmdpX3Njb29wX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIGNvcmdpX3BjbWNpYV9pbml0KHZvaWQpCit7CisJLyogU2V0dXAgZGVmYXVsdCBzdGF0ZSBvZiBHUElPIG91dHB1dHMKKwkgICBiZWZvcmUgd2UgZW5hYmxlIHRoZW0gYXMgb3V0cHV0cy4gKi8KKwlHUFNSKEdQSU80OF9uUE9FKSA9IEdQSU9fYml0KEdQSU80OF9uUE9FKSB8CisJCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8IEdQSU9fYml0KEdQSU81MF9uUElPUikgfAorCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwgR1BJT19iaXQoR1BJTzUyX25QQ0VfMSkgfAorCQlHUElPX2JpdChHUElPNTNfblBDRV8yKTsKKworCXB4YV9ncGlvX21vZGUoR1BJTzQ4X25QT0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ5X25QV0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUwX25QSU9SX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81MV9uUElPV19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTVfblBSRUdfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU2X25QV0FJVF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTdfbklPSVMxNl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTJfblBDRV8xX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81M19uUENFXzJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU0X3BTS1RTRUxfTUQpOworfQorCitzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgY29yZ2lfcGNtY2lhX3Njb29wW10gPSB7Cit7CisJLmRldiAgICAgICAgPSAmY29yZ2lzY29vcF9kZXZpY2UuZGV2LAorCS5pcnEgICAgICAgID0gQ09SR0lfSVJRX0dQSU9fQ0ZfSVJRLAorCS5jZF9pcnEgICAgID0gQ09SR0lfSVJRX0dQSU9fQ0ZfQ0QsCisJLmNkX2lycV9zdHIgPSAiUENNQ0lBMCBDRCIsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnIGNvcmdpX3BjbWNpYV9jb25maWcgPSB7CisJLmRldnMgICAgICAgICA9ICZjb3JnaV9wY21jaWFfc2Nvb3BbMF0sCisJLm51bV9kZXZzICAgICA9IDEsCisJLnBjbWNpYV9pbml0ICA9IGNvcmdpX3BjbWNpYV9pbml0LAorfTsKKworRVhQT1JUX1NZTUJPTChjb3JnaXNjb29wX2RldmljZSk7CisKIAogLyoKICAqIENvcmdpIFNTUCBEZXZpY2UKQEAgLTI5NCw4ICszMjMsNyBAQAogCXB4YV9zZXRfbWNpX2luZm8oJmNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmY29yZ2lfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIAotCXNjb29wX251bSA9IDE7Ci0Jc2Nvb3BfZGV2cyA9ICZjb3JnaV9wY21jaWFfc2Nvb3BbMF07CisJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJmNvcmdpX3BjbWNpYV9jb25maWc7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggYWQ2YTEzZi4uZWVmM2RlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTY1LDYgKzY1LDI3IEBACiAJLnJlc291cmNlCT0gcG9vZGxlX3Njb29wX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIHBvb2RsZV9wY21jaWFfaW5pdCh2b2lkKQoreworCS8qIFNldHVwIGRlZmF1bHQgc3RhdGUgb2YgR1BJTyBvdXRwdXRzCisJICAgYmVmb3JlIHdlIGVuYWJsZSB0aGVtIGFzIG91dHB1dHMuICovCisJR1BTUihHUElPNDhfblBPRSkgPSBHUElPX2JpdChHUElPNDhfblBPRSkgfAorCQlHUElPX2JpdChHUElPNDlfblBXRSkgfCBHUElPX2JpdChHUElPNTBfblBJT1IpIHwKKwkJR1BJT19iaXQoR1BJTzUxX25QSU9XKSB8IEdQSU9fYml0KEdQSU81Ml9uUENFXzEpIHwKKwkJR1BJT19iaXQoR1BJTzUzX25QQ0VfMik7CisKKwlweGFfZ3Bpb19tb2RlKEdQSU80OF9uUE9FX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU80OV9uUFdFX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81MF9uUElPUl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTFfblBJT1dfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU1X25QUkVHX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81Nl9uUFdBSVRfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU3X25JT0lTMTZfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUyX25QQ0VfMV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTNfblBDRV8yX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81NF9wU0tUU0VMX01EKTsKK30KKwogc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IHBvb2RsZV9wY21jaWFfc2Nvb3BbXSA9IHsKIHsKIAkuZGV2ICAgICAgICA9ICZwb29kbGVfc2Nvb3BfZGV2aWNlLmRldiwKQEAgLTc0LDYgKzk1LDE0IEBACiB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnIHBvb2RsZV9wY21jaWFfY29uZmlnID0geworCS5kZXZzICAgICAgICAgPSAmcG9vZGxlX3BjbWNpYV9zY29vcFswXSwKKwkubnVtX2RldnMgICAgID0gMSwKKwkucGNtY2lhX2luaXQgID0gcG9vZGxlX3BjbWNpYV9pbml0LAorfTsKKworRVhQT1JUX1NZTUJPTChwb29kbGVfc2Nvb3BfZGV2aWNlKTsKKwogCiAvKiBMb0NvTW8gZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxvY29tb19yZXNvdXJjZXNbXSA9IHsKQEAgLTI2OCw4ICsyOTcsNyBAQAogCXB4YV9zZXRfbWNpX2luZm8oJnBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJnBvb2RsZV9maWNwX3BsYXRmb3JtX2RhdGEpOwogCi0Jc2Nvb3BfbnVtID0gMTsKLQlzY29vcF9kZXZzID0gJnBvb2RsZV9wY21jaWFfc2Nvb3BbMF07CisJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnBvb2RsZV9wY21jaWFfY29uZmlnOwogCiAJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKaW5kZXggNmM2ODc4Yy4uNGU5YTY5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCkBAIC0xMDQsNiArMTA0LDY2IEBACiAJLnJlc291cmNlCT0gc3BpdHpfc2Nvb3AyX3Jlc291cmNlcywKIH07CiAKKyNkZWZpbmUgU1BJVFpfUFdSX1NEIDB4MDEKKyNkZWZpbmUgU1BJVFpfUFdSX0NGIDB4MDIKKworLyogUG93ZXIgY29udHJvbCBpcyBzaGFyZWQgd2l0aCBiZXR3ZWVuIG9uZSBvZiB0aGUgQ0Ygc2xvdHMgYW5kIFNEICovCitzdGF0aWMgdm9pZCBzcGl0el9jYXJkX3B3cl9jdHJsKGludCBkZXZpY2UsIHVuc2lnbmVkIHNob3J0IG5ld19jcHIpCit7CisJdW5zaWduZWQgc2hvcnQgY3ByID0gcmVhZF9zY29vcF9yZWcoJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfQ1BSKTsKKworCWlmIChuZXdfY3ByICYgMHgwMDA3KSB7CisJICAgICAgICBzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTUElUWl9TQ1BfQ0ZfUE9XRVIpOworCQlpZiAoIShjcHIgJiAweDAwMDIpICYmICEoY3ByICYgMHgwMDA0KSkKKwkJICAgICAgICBtZGVsYXkoNSk7CisJCWlmIChkZXZpY2UgPT0gU1BJVFpfUFdSX0NGKQorCQkgICAgICAgIGNwciB8PSAweDAwMDI7CisJCWlmIChkZXZpY2UgPT0gU1BJVFpfUFdSX1NEKQorCQkgICAgICAgIGNwciB8PSAweDAwMDQ7CisJICAgICAgICB3cml0ZV9zY29vcF9yZWcoJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfQ1BSLCBjcHIgfCBuZXdfY3ByKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2aWNlID09IFNQSVRaX1BXUl9DRikKKwkJICAgICAgICBjcHIgJj0gfjB4MDAwMjsKKwkJaWYgKGRldmljZSA9PSBTUElUWl9QV1JfU0QpCisJCSAgICAgICAgY3ByICY9IH4weDAwMDQ7CisJICAgICAgICB3cml0ZV9zY29vcF9yZWcoJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfQ1BSLCBjcHIgfCBuZXdfY3ByKTsKKwkJaWYgKCEoY3ByICYgMHgwMDAyKSAmJiAhKGNwciAmIDB4MDAwNCkpIHsKKwkJICAgICAgICBtZGVsYXkoMSk7CisJCSAgICAgICAgcmVzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTUElUWl9TQ1BfQ0ZfUE9XRVIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzcGl0el9wY21jaWFfaW5pdCh2b2lkKQoreworCS8qIFNldHVwIGRlZmF1bHQgc3RhdGUgb2YgR1BJTyBvdXRwdXRzCisJICAgYmVmb3JlIHdlIGVuYWJsZSB0aGVtIGFzIG91dHB1dHMuICovCisJR1BTUihHUElPNDhfblBPRSkgPSBHUElPX2JpdChHUElPNDhfblBPRSkgfAorCQlHUElPX2JpdChHUElPNDlfblBXRSkgfAlHUElPX2JpdChHUElPNTBfblBJT1IpIHwKKwkJR1BJT19iaXQoR1BJTzUxX25QSU9XKSB8IEdQSU9fYml0KEdQSU81NF9uUENFXzIpOworCUdQU1IoR1BJTzg1X25QQ0VfMSkgPSBHUElPX2JpdChHUElPODVfblBDRV8xKTsKKworCXB4YV9ncGlvX21vZGUoR1BJTzQ4X25QT0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ5X25QV0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUwX25QSU9SX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81MV9uUElPV19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTVfblBSRUdfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU2X25QV0FJVF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTdfbklPSVMxNl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPODVfblBDRV8xX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81NF9uUENFXzJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzEwNF9wU0tUU0VMX01EKTsKK30KKworc3RhdGljIHZvaWQgc3BpdHpfcGNtY2lhX3B3cihzdHJ1Y3QgZGV2aWNlICpzY29vcCwgdW5zaWduZWQgc2hvcnQgY3ByLCBpbnQgbnIpCit7CisJLyogT25seSBuZWVkIHRvIG92ZXJyaWRlIGJlaGF2aW91ciBmb3Igc2xvdCAwICovCisJaWYgKG5yID09IDApCisJCXNwaXR6X2NhcmRfcHdyX2N0cmwoU1BJVFpfUFdSX0NGLCBjcHIpOworCWVsc2UKKwkJd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DUFIsIGNwcik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2RldiBzcGl0el9wY21jaWFfc2Nvb3BbXSA9IHsKIHsKIAkuZGV2ICAgICAgICA9ICZzcGl0enNjb29wX2RldmljZS5kZXYsCkBAIC0xMTcsNiArMTc3LDE2IEBACiB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnIHNwaXR6X3BjbWNpYV9jb25maWcgPSB7CisJLmRldnMgICAgICAgICA9ICZzcGl0el9wY21jaWFfc2Nvb3BbMF0sCisJLm51bV9kZXZzICAgICA9IDIsCisJLnBjbWNpYV9pbml0ICA9IHNwaXR6X3BjbWNpYV9pbml0LAorCS5wb3dlcl9jdHJsICAgPSBzcGl0el9wY21jaWFfcHdyLAorfTsKKworRVhQT1JUX1NZTUJPTChzcGl0enNjb29wX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHNwaXR6c2Nvb3AyX2RldmljZSk7CisKIAogLyoKICAqIFNwaXR6IFNTUCBEZXZpY2UKQEAgLTIzNSwyNyArMzA1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFBvd2VyIGNvbnRyb2wgaXMgc2hhcmVkIHdpdGggb25lIG9mIHRoZSBDRiBzbG90cyBzbyB3ZSBoYXZlIGEgbWVzcyAqLwogc3RhdGljIHZvaWQgc3BpdHpfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKIHsKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAotCXVuc2lnbmVkIHNob3J0IGNwciA9IHJlYWRfc2Nvb3BfcmVnKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNDT09QX0NQUik7Ci0KLQlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7Ci0JCS8qIHByaW50ayhLRVJOX0RFQlVHICIlczogb25cbiIsIF9fRlVOQ1RJT05fXyk7ICovCi0JCXNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9DRl9QT1dFUik7Ci0JCW1kZWxheSgyKTsKLQkJd3JpdGVfc2Nvb3BfcmVnKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNDT09QX0NQUiwgY3ByIHwgMHgwNCk7Ci0JfSBlbHNlIHsKLQkJLyogcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7ICovCi0JCXdyaXRlX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIGNwciAmIH4weDA0KTsKLQotCQlpZiAoIShjcHIgfCAweDAyKSkgewotCQkJbWRlbGF5KDEpOwotCQkJcmVzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTUElUWl9TQ1BfQ0ZfUE9XRVIpOwotCQl9Ci0JfQorCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spCisJCXNwaXR6X2NhcmRfcHdyX2N0cmwoU1BJVFpfUFdSX1NELCAweDAwMDQpOworCWVsc2UKKwkJc3BpdHpfY2FyZF9wd3JfY3RybChTUElUWl9QV1JfU0QsIDB4MDAwMCk7CiB9CiAKIHN0YXRpYyBpbnQgc3BpdHpfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0zNTEsOCArNDA4LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2luaXQodm9pZCkKIHsKLQlzY29vcF9udW0gPSAyOwotCXNjb29wX2RldnMgPSAmc3BpdHpfcGNtY2lhX3Njb29wWzBdOworCXBsYXRmb3JtX3Njb29wX2NvbmZpZyA9ICZzcGl0el9wY21jaWFfY29uZmlnOworCiAJc3BpdHpfYmxfbWFjaGluZm8uc2V0X2JsX2ludGVuc2l0eSA9IHNwaXR6X2JsX3NldF9pbnRlbnNpdHk7CiAKIAljb21tb25faW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCmluZGV4IDdkYWQzZjEuLmI5YjIwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKQEAgLTEzMiwxMSArMTMyLDEzIEBACiAJdHYudHZfc2VjID0gcHhhX2dldF9ydGNfdGltZSgpOwogCWRvX3NldHRpbWVvZmRheSgmdHYpOwogCi0JT1NNUjAgPSAwOwkJLyogc2V0IGluaXRpYWwgbWF0Y2ggYXQgMCAqLworCU9JRVIgPSAwOwkJLyogZGlzYWJsZSBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworCU9TQ1IgPSBMQVRDSCoyOwkJLyogcHVzaCBPU0NSIG91dCBvZiB0aGUgd2F5ICovCisJT1NNUjAgPSBMQVRDSDsJCS8qIHNldCBpbml0aWFsIG1hdGNoICovCiAJT1NTUiA9IDB4ZjsJCS8qIGNsZWFyIHN0YXR1cyBvbiBhbGwgdGltZXJzICovCiAJc2V0dXBfaXJxKElSUV9PU1QwLCAmcHhhX3RpbWVyX2lycSk7Ci0JT0lFUiB8PSBPSUVSX0UwOwkvKiBlbmFibGUgbWF0Y2ggb24gdGltZXIgMCB0byBjYXVzZSBpbnRlcnJ1cHRzICovCi0JT1NDUiA9IDA7CQkvKiBpbml0aWFsaXplIGZyZWUtcnVubmluZyB0aW1lciwgZm9yY2UgZmlyc3QgbWF0Y2ggKi8KKwlPSUVSID0gT0lFUl9FMDsJCS8qIGVuYWJsZSBtYXRjaCBvbiB0aW1lciAwIHRvIGNhdXNlIGludGVycnVwdHMgKi8KKwlPU0NSID0gMDsJCS8qIGluaXRpYWxpemUgZnJlZS1ydW5uaW5nIHRpbWVyICovCiB9CiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IDQwMDYwOWYuLmMzMTIwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKQEAgLTk4LDYgKzk4LDkgQEAKIAkucmVzb3VyY2UJPSB0b3NhX3Njb29wX2pjX3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBQQ01DSUEKKyAqLwogc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IHRvc2FfcGNtY2lhX3Njb29wW10gPSB7CiB7CiAJLmRldiAgICAgICAgPSAmdG9zYXNjb29wX2RldmljZS5kZXYsCkBAIC0xMTEsMTYgKzExNCwxNTUgQEAKIH0sCiB9OwogCitzdGF0aWMgdm9pZCB0b3NhX3BjbWNpYV9pbml0KHZvaWQpCit7CisJLyogU2V0dXAgZGVmYXVsdCBzdGF0ZSBvZiBHUElPIG91dHB1dHMKKwkgICBiZWZvcmUgd2UgZW5hYmxlIHRoZW0gYXMgb3V0cHV0cy4gKi8KKwlHUFNSKEdQSU80OF9uUE9FKSA9IEdQSU9fYml0KEdQSU80OF9uUE9FKSB8CisJCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8IEdQSU9fYml0KEdQSU81MF9uUElPUikgfAorCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwgR1BJT19iaXQoR1BJTzUyX25QQ0VfMSkgfAorCQlHUElPX2JpdChHUElPNTNfblBDRV8yKTsKKworCXB4YV9ncGlvX21vZGUoR1BJTzQ4X25QT0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ5X25QV0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUwX25QSU9SX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81MV9uUElPV19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTVfblBSRUdfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU2X25QV0FJVF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTdfbklPSVMxNl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTJfblBDRV8xX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81M19uUENFXzJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU0X3BTS1RTRUxfTUQpOworfQorCitzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgdG9zYV9wY21jaWFfY29uZmlnID0geworCS5kZXZzICAgICAgICAgPSAmdG9zYV9wY21jaWFfc2Nvb3BbMF0sCisJLm51bV9kZXZzICAgICA9IDIsCisJLnBjbWNpYV9pbml0ICA9IHRvc2FfcGNtY2lhX2luaXQsCit9OworCisvKgorICogVVNCIERldmljZSBDb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHRvc2FfdWRjX2NvbW1hbmQoaW50IGNtZCkKK3sKKwlzd2l0Y2goY21kKQl7CisJCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKKwkJCXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfamNfZGV2aWNlLmRldixUT1NBX1NDT09QX0pDX1VTQl9QVUxMVVApOworCQkJYnJlYWs7CisJCWNhc2UgUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVDoKKwkJCXJlc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9qY19kZXZpY2UuZGV2LFRPU0FfU0NPT1BfSkNfVVNCX1BVTExVUCk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdG9zYV91ZGNfaXNfY29ubmVjdGVkKHZvaWQpCit7CisJcmV0dXJuICgoR1BMUihUT1NBX0dQSU9fVVNCX0lOKSAmIEdQSU9fYml0KFRPU0FfR1BJT19VU0JfSU4pKSA9PSAwKTsKK30KKworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHVkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLnVkY19jb21tYW5kCQk9IHRvc2FfdWRjX2NvbW1hbmQsCisJLnVkY19pc19jb25uZWN0ZWQJPSB0b3NhX3VkY19pc19jb25uZWN0ZWQsCit9OworCisvKgorICogTU1DL1NEIERldmljZQorICovCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHRvc2FfbWNpX3BsYXRmb3JtX2RhdGE7CisKK3N0YXRpYyBpbnQgdG9zYV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycXJldHVybl90ICgqdG9zYV9kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKworCS8qIHNldHVwIEdQSU8gZm9yIFBYQTI1eCBNTUMgY29udHJvbGxlciAqLworCXB4YV9ncGlvX21vZGUoR1BJTzZfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU84X01NQ0NTMF9NRCk7CisJcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fblNEX0RFVEVDVCB8IEdQSU9fSU4pOworCisJdG9zYV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIHRvc2FfZGV0ZWN0X2ludCwgU0FfSU5URVJSVVBULAorCQkJCSJNTUMvU0QgY2FyZCBkZXRlY3QiLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0X2lycV90eXBlKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgSVJRVF9CT1RIRURHRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG9zYV9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQoreworCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgeworCQlzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2RldmljZS5kZXYsVE9TQV9TQ09PUF9QV1JfT04pOworCX0gZWxzZSB7CisJCXJlc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9kZXZpY2UuZGV2LFRPU0FfU0NPT1BfUFdSX09OKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdG9zYV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHJlYWRfc2Nvb3BfcmVnKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUikmVE9TQV9TQ09PUF9TRF9XUCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdG9zYV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sgICAgICAgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgICAgICAgICAgID0gdG9zYV9tY2lfaW5pdCwKKwkuZ2V0X3JvCQk9IHRvc2FfbWNpX2dldF9ybywKKwkuc2V0cG93ZXIgICAgICAgPSB0b3NhX21jaV9zZXRwb3dlciwKKwkuZXhpdCAgICAgICAgICAgPSB0b3NhX21jaV9leGl0LAorfTsKKworLyoKKyAqIElyZGEKKyAqLworc3RhdGljIHZvaWQgdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKK3sKKwlpZiAobW9kZSAmIElSX09GRikgeworCQlyZXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldixUT1NBX1NDT09QX0lSX1BPV0VSRFdOKTsKKwkJcHhhX2dwaW9fbW9kZShHUElPNDdfU1RUWER8R1BJT19ERkxUX0xPVyk7CisJCXB4YV9ncGlvX21vZGUoR1BJTzQ3X1NUVFhEfEdQSU9fT1VUKTsKKwl9IGVsc2UgeworCQlweGFfZ3Bpb19tb2RlKEdQSU80N19TVFRYRF9NRCk7CisJCXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldixUT1NBX1NDT09QX0lSX1BPV0VSRFdOKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRvc2FfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKKwkudHJhbnNjZWl2ZXJfbW9kZSA9IHRvc2FfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorfTsKKworLyoKKyAqIFRvc2EgS2V5Ym9hcmQKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG9zYWtiZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInRvc2Eta2V5Ym9hcmQiLAorCS5pZAkJPSAtMSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmdG9zYXNjb29wX2RldmljZSwKIAkmdG9zYXNjb29wX2pjX2RldmljZSwKKwkmdG9zYWtiZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdG9zYV9pbml0KHZvaWQpCiB7CiAJcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fT05fUkVTRVQgfCBHUElPX0lOKTsKIAlweGFfZ3Bpb19tb2RlKFRPU0FfR1BJT19UQzYzOTNfSU5UIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fVVNCX0lOIHwgR1BJT19JTik7CiAKIAkvKiBzZXR1cCBzbGVlcCBtb2RlIHZhbHVlcyAqLwogCVBXRVIgID0gMHgwMDAwMDAwMjsKQEAgLTEzMSwxMyArMjczLDE1IEBACiAJUEdTUjIgPSAweDAwMDE0MDAwOwogCVBDRlIgfD0gUENGUl9PUERFOwogCi0JLy8gZW5hYmxlIGJhdHRfZmF1bHQKKwkvKiBlbmFibGUgYmF0dF9mYXVsdCAqLwogCVBNQ1IgPSAweDAxOwogCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJcHhhX3NldF9tY2lfaW5mbygmdG9zYV9tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCXB4YV9zZXRfZmljcF9pbmZvKCZ0b3NhX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnRvc2FfcGNtY2lhX2NvbmZpZzsKIAotCXNjb29wX251bSA9IDI7Ci0Jc2Nvb3BfZGV2cyA9ICZ0b3NhX3BjbWNpYV9zY29vcFswXTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX3Rvc2Eoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCmluZGV4IDAxMWE4NWMuLjM2ZTc2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQpAQCAtNSwzICs1LDUgQEAKIG9iai15CQkJCQk6PSBjb3JlLm8gY2xvY2subwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfRUIpCQkrPSByZWFsdmlld19lYi5vCiBvYmotJChDT05GSUdfU01QKQkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KK29iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJCSs9IGhvdHBsdWcubworb2JqLSQoQ09ORklHX0xPQ0FMX1RJTUVSUykJCSs9IGxvY2FsdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCA0ODJlYjUxLi5lMmM2ZmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtNTUwLDYgKzU1MCwxMSBAQAogCiAJdGltZXJfdGljayhyZWdzKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX0xPQ0FMX1RJTUVSUykKKwlzbXBfc2VuZF90aW1lcigpOworCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisjZW5kaWYKKwogCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzQ4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCitleHRlcm4gdm9sYXRpbGUgaW50IHBlbl9yZWxlYXNlOworCitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9raWxsZWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VudGVyX2xvd3Bvd2VyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlhc20gdm9sYXRpbGUoCSJtY3IJcDE1LCAwLCAlMSwgYzcsIGMxNCwgMFxuIgorCSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjNSwgMFxuIgorCSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjMTAsIDRcbiIKKwkvKgorCSAqIFR1cm4gb2ZmIGNvaGVyZW5jeQorCSAqLworCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSIJYmljCSUwLCAlMCwgIzB4MjBcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkiCWJpYwklMCwgJTAsICMweDA0XG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJICA6ICI9JnIiICh2KQorCSAgOiAiciIgKDApCisJICA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2xlYXZlX2xvd3Bvd2VyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlhc20gdm9sYXRpbGUoCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJIglvcnIJJTAsICUwLCAjMHgwNFxuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSIJb3JyCSUwLCAlMCwgIzB4MjBcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkgIDogIj0mciIgKHYpCisJICA6CisJICA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIHRoZXJlIGlzIG5vIHBvd2VyLWNvbnRyb2wgaGFyZHdhcmUgb24gdGhpcyBwbGF0Zm9ybSwgc28gYWxsCisJICogd2UgY2FuIGRvIGlzIHB1dCB0aGUgY29yZSBpbnRvIFdGSTsgdGhpcyBpcyBzYWZlIGFzIHRoZSBjYWxsaW5nCisJICogY29kZSB3aWxsIGhhdmUgYWxyZWFkeSBkaXNhYmxlZCBpbnRlcnJ1cHRzCisJICovCisJZm9yICg7OykgeworCQkvKgorCQkgKiBoZXJlJ3MgdGhlIFdGSQorCQkgKi8KKwkJYXNtKCIud29yZAkweGUzMjBmMDAzXG4iCisJCSAgICA6CisJCSAgICA6CisJCSAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKworCQlpZiAocGVuX3JlbGVhc2UgPT0gY3B1KSB7CisJCQkvKgorCQkJICogT0ssIHByb3BlciB3YWtldXAsIHdlJ3JlIGRvbmUKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBnZXR0aW5nIGhlcmUsIG1lYW5zIHRoYXQgd2UgaGF2ZSBjb21lIG91dCBvZiBXRkkgd2l0aG91dAorCQkgKiBoYXZpbmcgYmVlbiB3b2tlbiB1cCAtIHRoaXMgc2hvdWxkbid0IGhhcHBlbgorCQkgKgorCQkgKiBUaGUgdHJvdWJsZSBpcywgbGV0dGluZyBwZW9wbGUga25vdyBhYm91dCB0aGlzIGlzIG5vdCByZWFsbHkKKwkJICogcG9zc2libGUsIHNpbmNlIHdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBpbmNvaGVyZW50bHksIGFuZAorCQkgKiB0aGVyZWZvcmUgY2Fubm90IHNhZmVseSBjYWxsIHByaW50aygpIG9yIGFueXRoaW5nIGVsc2UKKwkJICovCisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJDUFUldTogc3B1cmlvdXMgd2FrZXVwIGNhbGxcbiIsIGNwdSk7CisjZW5kaWYKKwl9Cit9CisKK2ludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNwdV9raWxsZWQsIDUwMDApOworfQorCisvKgorICogcGxhdGZvcm0tc3BlY2lmaWMgY29kZSB0byBzaHV0ZG93biBhIENQVQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLwordm9pZCBwbGF0Zm9ybV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChjcHUgIT0gdGhpc19jcHUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRWVrISBwbGF0Zm9ybV9jcHVfZGllIHJ1bm5pbmcgb24gJXUsIHNob3VsZCBiZSAldVxuIiwKKwkJCSAgIHRoaXNfY3B1LCBjcHUpOworCQlCVUcoKTsKKwl9CisjZW5kaWYKKworCXByaW50ayhLRVJOX05PVElDRSAiQ1BVJXU6IHNodXRkb3duXG4iLCBjcHUpOworCWNvbXBsZXRlKCZjcHVfa2lsbGVkKTsKKworCS8qCisJICogd2UncmUgcmVhZHkgZm9yIHNodXRkb3duIG5vdywgc28gZG8gaXQKKwkgKi8KKwljcHVfZW50ZXJfbG93cG93ZXIoKTsKKwlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUpOworCisJLyoKKwkgKiBicmluZyB0aGlzIENQVSBiYWNrIGludG8gdGhlIHdvcmxkIG9mIGNhY2hlCisJICogY29oZXJlbmN5LCBhbmQgdGhlbiByZXN0b3JlIGludGVycnVwdHMKKwkgKi8KKwljcHVfbGVhdmVfbG93cG93ZXIoKTsKK30KKworaW50IG1hY2hfY3B1X2Rpc2FibGUodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIHdlIGRvbid0IGFsbG93IENQVSAwIHRvIGJlIHNodXRkb3duIChpdCBpcyBzdGlsbCB0b28gc3BlY2lhbAorCSAqIGUuZy4gY2xvY2sgdGljayBpbnRlcnJ1cHRzKQorCSAqLworCXJldHVybiBjcHUgPT0gMCA/IC1FUEVSTSA6IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvbG9jYWx0aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTE3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdHdkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKworI2RlZmluZSBUV0RfQkFTRShjcHUpCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfVFdEX0JBU0UpICsgXAorCQkJICgoY3B1KSAqIFJFQUxWSUVXX1RXRF9TSVpFKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXBjb3JlX3RpbWVyX3JhdGU7CisKKy8qCisgKiBsb2NhbF90aW1lcl9hY2s6IGNoZWNrcyBmb3IgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQuCisgKgorICogSWYgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQsIGFja25vd2xlZGdlIGFuZCByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgcmV0dXJuIDAuCisgKi8KK2ludCBsb2NhbF90aW1lcl9hY2sodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBUV0RfQkFTRShzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJaWYgKF9fcmF3X3JlYWRsKGJhc2UgKyBUV0RfVElNRVJfSU5UU1RBVCkpIHsKKwkJX19yYXdfd3JpdGVsKDEsIGJhc2UgKyBUV0RfVElNRVJfSU5UU1RBVCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFRXRF9CQVNFKGNwdSk7CisJdW5zaWduZWQgaW50IGxvYWQsIG9mZnNldDsKKwl1NjQgd2FpdGppZmZpZXM7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHJvdW5kLCB3ZSBuZWVkIHRvIHdvcmsgb3V0IGhvdyBmYXN0CisJICogdGhlIHRpbWVyIHRpY2tzCisJICovCisJaWYgKG1wY29yZV90aW1lcl9yYXRlID09IDApIHsKKwkJcHJpbnRrKCJDYWxpYnJhdGluZyBsb2NhbCB0aW1lci4uLiAiKTsKKworCQkvKiBXYWl0IGZvciBhIHRpY2sgdG8gc3RhcnQgKi8KKwkJd2FpdGppZmZpZXMgPSBnZXRfamlmZmllc182NCgpICsgMTsKKworCQl3aGlsZSAoZ2V0X2ppZmZpZXNfNjQoKSA8IHdhaXRqaWZmaWVzKQorCQkJdWRlbGF5KDEwKTsKKworCQkvKiBPSywgbm93IHRoZSB0aWNrIGhhcyBzdGFydGVkLCBsZXQncyBnZXQgdGhlIHRpbWVyIGdvaW5nICovCisJCXdhaXRqaWZmaWVzICs9IDU7CisKKwkJCQkgLyogZW5hYmxlLCBubyBpbnRlcnJ1cHQgb3IgcmVsb2FkICovCisJCV9fcmF3X3dyaXRlbCgweDEsIGJhc2UgKyBUV0RfVElNRVJfQ09OVFJPTCk7CisKKwkJCQkgLyogbWF4aW11bSB2YWx1ZSAqLworCQlfX3Jhd193cml0ZWwoMHhGRkZGRkZGRlUsIGJhc2UgKyBUV0RfVElNRVJfQ09VTlRFUik7CisKKwkJd2hpbGUgKGdldF9qaWZmaWVzXzY0KCkgPCB3YWl0amlmZmllcykKKwkJCXVkZWxheSgxMCk7CisKKwkJY291bnQgPSBfX3Jhd19yZWFkbChiYXNlICsgVFdEX1RJTUVSX0NPVU5URVIpOworCisJCW1wY29yZV90aW1lcl9yYXRlID0gKDB4RkZGRkZGRkZVIC0gY291bnQpICogKEhaIC8gNSk7CisKKwkJcHJpbnRrKCIlbHUuJTAybHVNSHouXG4iLCBtcGNvcmVfdGltZXJfcmF0ZSAvIDEwMDAwMDAsCisJCQkobXBjb3JlX3RpbWVyX3JhdGUgLyAxMDAwMDApICUgMTAwKTsKKwl9CisKKwlsb2FkID0gbXBjb3JlX3RpbWVyX3JhdGUgLyBIWjsKKworCV9fcmF3X3dyaXRlbChsb2FkLCBiYXNlICsgVFdEX1RJTUVSX0xPQUQpOworCV9fcmF3X3dyaXRlbCgweDcsICBiYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOworCisJLyoKKwkgKiBOb3cgbWFuZXV2ZXIgb3VyIGxvY2FsIHRpY2sgaW50byB0aGUgcmlnaHQgcGFydCBvZiB0aGUgamlmZnkuCisJICogU3RhcnQgYnkgd29ya2luZyBvdXQgd2hlcmUgd2l0aGluIHRoZSB0aWNrIG91ciBsb2NhbCB0aW1lcgorCSAqIGludGVycnVwdCBzaG91bGQgZ28uCisJICovCisJb2Zmc2V0ID0gKChtcGNvcmVfdGltZXJfcmF0ZSAvIEhaKSAvIChOUl9DUFVTICsgMSkpICogKGNwdSArIDEpOworCisJLyoKKwkgKiBnZXR0aW1lb2Zmc2V0KCkgd2lsbCByZXR1cm4gYSBudW1iZXIgb2YgdXMgc2luY2UgdGhlIGxhc3QgdGljay4KKwkgKiBDb252ZXJ0IHRoaXMgbnVtYmVyIG9mIHVzIHRvIGEgbG9jYWwgdGltZXIgdGljayBjb3VudC4KKwkgKiBCZSBjYXJlZnVsIG9mIGludGVnZXIgb3ZlcmZsb3cgd2hpbHN0IGtlZXBpbmcgbWF4aW11bSBwcmVjaXNpb24uCisJICoKKwkgKiB3aXRoIEhaPTEwMCBhbmQgMU1IeiAoZnBnYSkgfiAxR0h6IHByb2Nlc3NvcjoKKwkgKiBsb2FkID0gMSB+IDEwLDAwMAorCSAqIG1wY29yZV90aW1lcl9yYXRlLzEwMDAwID0gMTAwIH4gMTAwLDAwMAorCSAqCisJICogc28gdGhlIG11bHRpcGx5IHZhbHVlIHdpbGwgYmUgbGVzcyB0aGFuIDEwXjkgYWx3YXlzLgorCSAqLworCWxvYWQgPSAoc3lzdGVtX3RpbWVyLT5vZmZzZXQoKSAqIChtcGNvcmVfdGltZXJfcmF0ZSAvIDEwMDAwKSkgLyAxMDA7CisKKwkvKiBBZGQgb24gb3VyIG9mZnNldCB0byBnZXQgdGhlIGxvYWQgdmFsdWUgKi8KKwlsb2FkID0gKGxvYWQgKyBvZmZzZXQpICUgKG1wY29yZV90aW1lcl9yYXRlIC8gSFopOworCisJX19yYXdfd3JpdGVsKGxvYWQsIGJhc2UgKyBUV0RfVElNRVJfQ09VTlRFUik7CisKKwkvKiBNYWtlIHN1cmUgb3VyIGxvY2FsIGludGVycnVwdCBjb250cm9sbGVyIGhhcyB0aGlzIGVuYWJsZWQgKi8KKwlfX3Jhd193cml0ZWwoMSA8PCBJUlFfTE9DQUxUSU1FUiwKKwkJICAgICBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfR0lDX0RJU1RfQkFTRSkgKyBHSUNfRElTVF9FTkFCTEVfU0VUKTsKK30KKworLyoKKyAqIHRha2UgYSBsb2NhbCB0aW1lciBkb3duCisgKi8KK3ZvaWQgX19jcHVleGl0IGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSkKK3sKKwlfX3Jhd193cml0ZWwoMCwgVFdEX0JBU0UoY3B1KSArIFRXRF9USU1FUl9DT05UUk9MKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKaW5kZXggOTg0NDY0NC4uMGM3ZDRhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKQEAgLTMyLDcgKzMyLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbmNvcmVzOwogCi0JbmNvcmVzID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhSRUFMVklFV19NUENPUkVfU0NVX0JBU0UpICsgU0NVX0NPTkZJRyk7CisJbmNvcmVzID0gX19yYXdfcmVhZGwoX19pb19hZGRyZXNzKFJFQUxWSUVXX01QQ09SRV9TQ1VfQkFTRSkgKyBTQ1VfQ09ORklHKTsKIAogCXJldHVybiAobmNvcmVzICYgMHgwMykgKyAxOwogfQpAQCAtMTMzLDEyICsxMzMsMTIgQEAKICNpZiAxCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUIDB4MzAKIAlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSwKLQkJICAgICAoSU9fQUREUkVTUyhSRUFMVklFV19TWVNfQkFTRSkgKwotCQkgICAgICBSRUFMVklFV19TWVNfRkxBR1NTX09GRlNFVCkpOworCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQkgICAgIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUKTsKICNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQgMHgzNAogCV9fcmF3X3dyaXRlbCgzLAotCQkgICAgIChJT19BRERSRVNTKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgIFJFQUxWSUVXX1NZU19GTEFHU0NfT0ZGU0VUKSk7CisJCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQpOwogI2VuZGlmCiAKIAltYigpOwpAQCAtMTc1LDYgKzE3NSwxMSBAQAogCQltYXhfY3B1cyA9IG5jb3JlczsKIAogCS8qCisJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBmb3IgcHJpbWFyeSBDUFUKKwkgKi8KKwlsb2NhbF90aW1lcl9zZXR1cChjcHUpOworCisJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwb3NzaWJsZS9wcmVzZW50IG1hcHMuCiAJICogY3B1X3Bvc3NpYmxlX21hcCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzIHdoaWNoIG1heSBiZSBwcmVzZW50CiAJICogY3B1X3ByZXNlbnRfbWFwIGRlc2NyaWJlcyB0aGUgc2V0IG9mIENQVXMgcG9wdWxhdGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IGM3OTZiY2QuLjBiOWQ3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC0xMjEsNiArMTIxLDE0IEBACiAJICBzeXN0ZW0gcmVzZXRzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIFBDTEsuIFRoZSB0aW1lb3V0IG9uIGFuCiAJICAyMDBNSHogczNjMjQxMCBzaG91bGQgYmUgYWJvdXQgMzAgc2Vjb25kcy4KIAorY29uZmlnIFMzQzI0MTBfQk9PVF9FUlJPUl9SRVNFVAorCWJvb2wgIlMzQzI0MTAgUmVib290IG9uIGRlY29tcHJlc3Npb24gZXJyb3IiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIHN5c3RlbSBpZiB0aGUKKwkgIGtlcm5lbCBkZWNvbXByZXNzb3IgZGV0ZWN0cyBhbiBlcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbi4KKworCiBjb21tZW50ICJTM0MyNDEwIFNldHVwIgogCiBjb25maWcgUzNDMjQxMF9ETUEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKaW5kZXggODM5MGI2OC4uMGY4MWZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKQEAgLTU2LDggKzU2LDE2IEBACiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFudWJpc19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogICAvKiBJU0EgSU8gYXJlYXMgKi8KIAotICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwgMHgwLAkgICBTWl8xNk0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgMHgwLAkgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorICB7CisJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4MCksCisJLmxlbmd0aAkJPSBTWl80TSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKKyAgfSwgeworCS52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX0lTQV9XT1JELAorCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDApLAorCS5sZW5ndGggCT0gU1pfNE0sIE1UX0RFVklDRQorICB9LAogCiAgIC8qIHdlIGNvdWxkIHBvc3NpYmx5IGNvbXByZXNzIHRoZSBuZXh0IHNldCBkb3duIGludG8gYSBzZXQgb2Ygc21hbGxlciB0YWJsZXMKICAgICogcGFnZXRhYmxlcywgYnV0IHRoYXQgd291bGQgbWVhbiB1c2luZyBhbiBMMiBzZWN0aW9uLCBhbmQgaXQgc3RpbGwgbWVhbnMKQEAgLTY2LDE2ICs3NCw0MSBAQAogCiAgIC8qIENQTEQgY29udHJvbCByZWdpc3RlcnMgKi8KIAotICB7ICh1MzIpQU5VQklTX1ZBX0NUUkwxLAlBTlVCSVNfUEFfQ1RSTDEsCVNaXzRLLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUFOVUJJU19WQV9DVFJMMiwJQU5VQklTX1BBX0NUUkwyLAlTWl80SywgTVRfREVWSUNFIH0sCisgIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX1ZBX0NUUkwxLAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTlVCSVNfUEFfQ1RSTDEpLAorCS5sZW5ndGgJCT0gU1pfNEssCisJLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX1ZBX0NUUkwyLAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTlVCSVNfUEFfQ1RSTDIpLAorCS5sZW5ndGgJCT0gU1pfNEssCisJLnR5cGUJCT1NVF9ERVZJQ0UKKyAgfSwKIAogICAvKiBJREUgZHJpdmVzICovCiAKLSAgeyAodTMyKUFOVUJJU19JREVQUkksCQlTM0MyNDEwX0NTMywJCVNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUFOVUJJU19JREVQUklBVVgsCVMzQzI0MTBfQ1MzKygxPDwyNiksCVNaXzFNLCBNVF9ERVZJQ0UgfSwKLQotICB7ICh1MzIpQU5VQklTX0lERVNFQywJCVMzQzI0MTBfQ1M0LAkJU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpQU5VQklTX0lERVNFQ0FVWCwJUzNDMjQxMF9DUzQrKDE8PDI2KSwJU1pfMU0sIE1UX0RFVklDRSB9LAorICB7CisJLnZpcnR1YWwJPSAodTMyKUFOVUJJU19JREVQUkksCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKSwKKwkubGVuZ3RoCQk9IFNaXzFNLAorCS50eXBlCQk9IE1UX0RFVklDRQorICB9LCB7CisJLnZpcnR1YWwJPSAodTMyKUFOVUJJU19JREVQUklBVVgsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKygxPDwyNikpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX0lERVNFQywKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzQpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX0lERVNFQ0FVWCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzQrKDE8PDI2KSksCisJLmxlbmd0aAkJPSBTWl8xTSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKKyAgfSwKIH07CiAKICNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggMGI3MWM4OS4uMWJlMjU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtODksMzIgKzg5LDYzIEBACiAKIC8qIG1hY3JvcyB0byBtb2RpZnkgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgaW8gc3BhY2UgKi8KIAotI2RlZmluZSBQQV9DUzIoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1MyKQotI2RlZmluZSBQQV9DUzMoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1MzKQotI2RlZmluZSBQQV9DUzQoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1M0KQotI2RlZmluZSBQQV9DUzUoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1M1KQorI2RlZmluZSBQQV9DUzIoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzIpKQorI2RlZmluZSBQQV9DUzMoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzMpKQorI2RlZmluZSBQQV9DUzQoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzQpKQorI2RlZmluZSBQQV9DUzUoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzUpKQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGJhc3RfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKICAgLyogSVNBIElPIGFyZWFzICovCi0KLSAgeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFBBX0NTMihCQVNUX1BBX0lTQUlPKSwgICBTWl8xNk0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUEFfQ1MzKEJBU1RfUEFfSVNBSU8pLCAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCi0KLSAgLyogd2UgY291bGQgcG9zc2libHkgY29tcHJlc3MgdGhlIG5leHQgc2V0IGRvd24gaW50byBhIHNldCBvZiBzbWFsbGVyIHRhYmxlcwotICAgKiBwYWdldGFibGVzLCBidXQgdGhhdCB3b3VsZCBtZWFuIHVzaW5nIGFuIEwyIHNlY3Rpb24sIGFuZCBpdCBzdGlsbCBtZWFucwotICAgKiB3ZSBjYW5ub3QgYWN0dWFsbHkgZmVlZCB0aGUgc2FtZSByZWdpc3RlciB0byBhbiBMRFIgZHVlIHRvIDE2SyBzcGFjaW5nCi0gICAqLwotCisgIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX0lTQV9CWVRFLAorCSAgLnBmbgkJPSBQQV9DUzIoQkFTVF9QQV9JU0FJTyksCisJICAubGVuZ3RoCT0gU1pfMTZNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwKKwkgIC5wZm4JCT0gUEFfQ1MzKEJBU1RfUEFfSVNBSU8pLAorCSAgLmxlbmd0aAk9IFNaXzE2TSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwKICAgLyogYmFzdCBDUExEIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xzICovCi0gIHsgKHUzMilCQVNUX1ZBX0NUUkwxLCBCQVNUX1BBX0NUUkwxLAkJICAgU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpQkFTVF9WQV9DVFJMMiwgQkFTVF9QQV9DVFJMMiwJCSAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUJBU1RfVkFfQ1RSTDMsIEJBU1RfUEFfQ1RSTDMsCQkgICBTWl8xTSwgTVRfREVWSUNFIH0sCi0gIHsgKHUzMilCQVNUX1ZBX0NUUkw0LCBCQVNUX1BBX0NUUkw0LAkJICAgU1pfMU0sIE1UX0RFVklDRSB9LAotCisgIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX0NUUkwxLAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBU1RfUEFfQ1RSTDEpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpQkFTVF9WQV9DVFJMMiwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihCQVNUX1BBX0NUUkwyKSwKKwkgIC5sZW5ndGgJPSBTWl8xTSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKUJBU1RfVkFfQ1RSTDMsCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oQkFTVF9QQV9DVFJMMyksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX0NUUkw0LAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBU1RfUEFfQ1RSTDQpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LAogICAvKiBQQzEwNCBJUlEgbXV4ICovCi0gIHsgKHUzMilCQVNUX1ZBX1BDMTA0X0lSUVJFUSwgIEJBU1RfUEFfUEMxMDRfSVJRUkVRLCAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUJBU1RfVkFfUEMxMDRfSVJRUkFXLCAgQkFTVF9QQV9QQzEwNF9JUlFSQVcsICAgU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpQkFTVF9WQV9QQzEwNF9JUlFNQVNLLCBCQVNUX1BBX1BDMTA0X0lSUU1BU0ssICBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX1BDMTA0X0lSUVJFUSwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihCQVNUX1BBX1BDMTA0X0lSUVJFUSksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX1BDMTA0X0lSUVJBVywKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihCQVNUX1BBX1BDMTA0X0lSUVJBVyksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX1BDMTA0X0lSUU1BU0ssCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oQkFTVF9QQV9QQzEwNF9JUlFNQVNLKSwKKwkgIC5sZW5ndGgJPSBTWl8xTSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwKIAogICAvKiBwZXJpcGhlcmFsIHNwYWNlLi4uIG9uZSBmb3IgZWFjaCBvZiBmYXN0L3Nsb3cvYnl0ZS8xNmJpdCAqLwogICAvKiBub3RlLCBpZGUgaXMgb25seSBkZWNvZGVkIGluIHdvcmQgc3BhY2UsIGV2ZW4gdGhvdWdoIHNvbWUgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCmluZGV4IDI0ZDY5MDEuLmY4ZDg2ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCkBAIC01Niw4ICs1NiwxNyBAQAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyByeDM3MTVfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBkdW1wIElTQSBzcGFjZSBzb21ld2hlcmUgdW51c2VkICovCiAKLQl7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUzNDMjQxMF9DUzMsIFNaXzE2TSwgTVRfREVWSUNFIH0sCi0JeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFMzQzI0MTBfQ1MzLCBTWl8xNk0sIE1UX0RFVklDRSB9LAorCXsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMyksCisJCS5sZW5ndGgJCT0gU1pfMU0sCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX0lTQV9CWVRFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzMpLAorCQkubGVuZ3RoCQk9IFNaXzFNLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggZDY2NmM2Mi4uNGUzMTExOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCkBAIC01OCw4ICs1OCwyNyBAQAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrMjQ0MF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCS8qIElTQSBJTyBTcGFjZSBtYXAgKG1lbW9yeSBzcGFjZSBzZWxlY3RlZCBieSBBMjQpICovCiAKLQl7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUzNDMjQxMF9DUzIsIFNaXzE2TSwgTVRfREVWSUNFIH0sCi0JeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFMzQzI0MTBfQ1MyLCBTWl8xNk0sIE1UX0RFVklDRSB9LAorCXsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMiksCisJCS5sZW5ndGgJCT0gMHgxMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQgKyAweDEwMDAwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzIgKyAoMTw8MjQpKSwKKwkJLmxlbmd0aAkJPSBTWl80TSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMiksCisJCS5sZW5ndGgJCT0gMHgxMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUgKyAweDEwMDAwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzIgKyAoMTw8MjQpKSwKKwkJLmxlbmd0aAkJPSBTWl80TSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0KIH07CiAKICNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCmluZGV4IDQ2YjI1OTYuLmFlN2UwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCkBAIC03NCwyNyArNzQsNDcgQEAKIAogLyogbWFjcm9zIHRvIG1vZGlmeSB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBpbyBzcGFjZSAqLwogCi0jZGVmaW5lIFBBX0NTMihpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzIpCi0jZGVmaW5lIFBBX0NTMyhpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzMpCi0jZGVmaW5lIFBBX0NTNChpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzQpCi0jZGVmaW5lIFBBX0NTNShpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzUpCisjZGVmaW5lIFBBX0NTMihpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTMikpCisjZGVmaW5lIFBBX0NTMyhpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTMykpCisjZGVmaW5lIFBBX0NTNChpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTNCkpCisjZGVmaW5lIFBBX0NTNShpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTNSkpCiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdnIxMDAwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIElTQSBJTyBhcmVhcyAqLworICB7CisJICAudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwKKwkgIC5wZm4JCT0gUEFfQ1MyKEJBU1RfUEFfSVNBSU8pLAorCSAgLmxlbmd0aAk9IFNaXzE2TSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJICAucGZuCQk9IFBBX0NTMyhCQVNUX1BBX0lTQUlPKSwKKwkgIC5sZW5ndGgJPSBTWl8xNk0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sCiAKLSAgeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFBBX0NTMihCQVNUX1BBX0lTQUlPKSwJICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsIFBBX0NTMyhCQVNUX1BBX0lTQUlPKSwJICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKLQotICAvKiB3ZSBjb3VsZCBwb3NzaWJseSBjb21wcmVzcyB0aGUgbmV4dCBzZXQgZG93biBpbnRvIGEgc2V0IG9mIHNtYWxsZXIgdGFibGVzCi0gICAqIHBhZ2V0YWJsZXMsIGJ1dCB0aGF0IHdvdWxkIG1lYW4gdXNpbmcgYW4gTDIgc2VjdGlvbiwgYW5kIGl0IHN0aWxsIG1lYW5zCi0gICAqIHdlIGNhbm5vdCBhY3R1YWxseSBmZWVkIHRoZSBzYW1lIHJlZ2lzdGVyIHRvIGFuIExEUiBkdWUgdG8gMTZLIHNwYWNpbmcKLSAgICovCi0KLSAgLyogYmFzdCBDUExEIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xzICovCi0gIHsgKHUzMilWUjEwMDBfVkFfQ1RSTDEsIFZSMTAwMF9QQV9DVFJMMSwJICAgICAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKVZSMTAwMF9WQV9DVFJMMiwgVlIxMDAwX1BBX0NUUkwyLAkgICAgICAgU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpVlIxMDAwX1ZBX0NUUkwzLCBWUjEwMDBfUEFfQ1RSTDMsCSAgICAgICBTWl8xTSwgTVRfREVWSUNFIH0sCi0gIHsgKHUzMilWUjEwMDBfVkFfQ1RSTDQsIFZSMTAwMF9QQV9DVFJMNCwJICAgICAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKyAgLyogIENQTEQgY29udHJvbCByZWdpc3RlcnMsIGFuZCBleHRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbHMgKi8KKyAgeworCSAgLnZpcnR1YWwJPSAodTMyKVZSMTAwMF9WQV9DVFJMMSwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihWUjEwMDBfUEFfQ1RSTDEpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpVlIxMDAwX1ZBX0NUUkwyLAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFZSMTAwMF9QQV9DVFJMMiksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilWUjEwMDBfVkFfQ1RSTDMsCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oVlIxMDAwX1BBX0NUUkwzKSwKKwkgIC5sZW5ndGgJPSBTWl8xTSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKVZSMTAwMF9WQV9DVFJMNCwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihWUjEwMDBfUEFfQ1RSTDQpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LAogCiAgIC8qIHBlcmlwaGVyYWwgc3BhY2UuLi4gb25lIGZvciBlYWNoIG9mIGZhc3Qvc2xvdy9ieXRlLzE2Yml0ICovCiAgIC8qIG5vdGUsIGlkZSBpcyBvbmx5IGRlY29kZWQgaW4gd29yZCBzcGFjZSwgZXZlbiB0aG91Z2ggc29tZSByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCA0N2UwNDIwLi5lNGI0MzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCkBAIC0xMjQsMTEgKzEyNCwxMyBAQAogCXR2LnR2X3NlYyA9IHNhMTEwMF9nZXRfcnRjX3RpbWUoKTsKIAlkb19zZXR0aW1lb2ZkYXkoJnR2KTsKIAotCU9TTVIwID0gMDsJCS8qIHNldCBpbml0aWFsIG1hdGNoIGF0IDAgKi8KKwlPSUVSID0gMDsJCS8qIGRpc2FibGUgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKwlPU0NSID0gTEFUQ0gqMjsJCS8qIHB1c2ggT1NDUiBvdXQgb2YgdGhlIHdheSAqLworCU9TTVIwID0gTEFUQ0g7CQkvKiBzZXQgaW5pdGlhbCBtYXRjaCAqLwogCU9TU1IgPSAweGY7CQkvKiBjbGVhciBzdGF0dXMgb24gYWxsIHRpbWVycyAqLwogCXNldHVwX2lycShJUlFfT1NUMCwgJnNhMTEwMF90aW1lcl9pcnEpOwotCU9JRVIgfD0gT0lFUl9FMDsJLyogZW5hYmxlIG1hdGNoIG9uIHRpbWVyIDAgdG8gY2F1c2UgaW50ZXJydXB0cyAqLwotCU9TQ1IgPSAwOwkJLyogaW5pdGlhbGl6ZSBmcmVlLXJ1bm5pbmcgdGltZXIsIGZvcmNlIGZpcnN0IG1hdGNoICovCisJT0lFUiA9IE9JRVJfRTA7CQkvKiBlbmFibGUgbWF0Y2ggb24gdGltZXIgMCB0byBjYXVzZSBpbnRlcnJ1cHRzICovCisJT1NDUiA9IDA7CQkvKiBpbml0aWFsaXplIGZyZWUtcnVubmluZyB0aW1lciAqLwogfQogCiAjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCmluZGV4IDFmYjE2ZjkuLjJlZGUyZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtMjYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5ZWI5OTY0Li4xNTgzM2EwIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03NCwxNSArNzQsMTMgQEAKIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwotCXByZWVtcHRfZGlzYWJsZSgpOwogCXdoaWxlICgxKSB7Ci0JCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCQlpZiAoIW5lZWRfcmVzY2hlZCgpICYmICFobHRfY291bnRlcikKLQkJCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCX0KKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWNwdV9yZWxheCgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KLQlzY2hlZHVsZSgpOwogfQogCiBzdGF0aWMgY2hhciByZWJvb3RfbW9kZSA9ICdoJzsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCAyMDFmNGM5Li5mMmM1NTc0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9mYXN0dGltZXIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZmFzdHRpbWVyLmMKaW5kZXggMDk0ZmY0NS4uY2FjMDVhNSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9mYXN0dGltZXIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRlIDxhc20vcnRjLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9zdmludG8uaD4KICNpbmNsdWRlIDxhc20vZmFzdHRpbWVyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9uYW5kZmxhc2guYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL25hbmRmbGFzaC5jCmluZGV4IGZjMmE2MTkuLjkzZGRlYTRkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9uYW5kZmxhc2guYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9uYW5kZmxhc2guYwpAQCAtMTQsNyArMTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggZjg5NDU4MC4uZDc4OGJkYSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtMTgsNyArMTgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IDk1N2Y1NTEuLjEzODY3ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtMTYxLDYgKzE2MSw3IEBACiAJUkVHX1dSKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwgcndfbWFzaywgdmVjdF9tYXNrKTsKIAl1bm1hc2tfaXJxKElQSV9JTlRSX1ZFQ1QpOwogCXVubWFza19pcnEoVElNRVJfSU5UUl9WRUNUKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAljcHVfc2V0KGNwdSwgY3B1X29ubGluZV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5NDlhMGU0Li43YzgwYWZiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjE4LDcgKzIxOCw5IEBACiAJCQkJaWRsZSA9IGRlZmF1bHRfaWRsZTsKIAkJCWlkbGUoKTsKIAkJfQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzAwMWI4Mi4uNTRhNDUyMSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03NywxNiArNzcsMjAgQEAKICAqLwogdm9pZCBjcHVfaWRsZSh2b2lkKQogeworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCWlycV9zdGF0W3NtcF9wcm9jZXNzb3JfaWQoKV0uaWRsZV90aW1lc3RhbXAgPSBqaWZmaWVzOworCQkJaXJxX3N0YXRbY3B1XS5pZGxlX3RpbWVzdGFtcCA9IGppZmZpZXM7CiAKIAkJCWlmICghZnJ2X2RtYV9pbnByb2dyZXNzICYmIGlkbGUpCiAJCQkJaWRsZSgpOwogCQl9CiAKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwppbmRleCAyN2YxZmNlNi4uZmUyMWFkZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTMsMjIgKzUzLDE4IEBACiAjaWYgIWRlZmluZWQoQ09ORklHX0g4MzAwSF9TSU0pICYmICFkZWZpbmVkKENPTkZJR19IOFNfU0lNKQogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKLQl3aGlsZSgxKSB7Ci0JCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJCV9fYXNtX18oInNsZWVwIik7Ci0JCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl9Ci0JCXNjaGVkdWxlKCk7Ci0JfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCS8qIFhYWDogcmFjZSBoZXJlISBXaGF0IGlmIG5lZWRfcmVzY2hlZCgpIGdldHMgc2V0IG5vdz8gKi8KKwkJX19hc21fXygic2xlZXAiKTsKKwl9IGVsc2UKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogI2Vsc2UKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7Ci0Jd2hpbGUoMSkgewotCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQlzY2hlZHVsZSgpOwotCX0KKwljcHVfcmVsYXgoKTsKIH0KICNlbmRpZgogdm9pZCAoKmlkbGUpKHZvaWQpID0gZGVmYXVsdF9pZGxlOwpAQCAtODEsNyArNzcsMTMgQEAKICAqLwogdm9pZCBjcHVfaWRsZSh2b2lkKQogewotCWlkbGUoKTsKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJaWRsZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCX0KIH0KIAogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKaW5kZXggODZlODBjNS4uMDAzNTQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCkBAIC03NjksOCArNzY5LDI2IEBACiBzdGF0aWMgaW50IGFwbV9kb19pZGxlKHZvaWQpCiB7CiAJdTMyCWVheDsKKwl1OAlyZXQgPSAwOworCWludAlpZGxlZCA9IDA7CisJaW50CXBvbGxpbmc7CiAKLQlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfSURMRSwgMCwgMCwgJmVheCkpIHsKKwlwb2xsaW5nID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCWlmIChwb2xsaW5nKSB7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJfQorCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJaWRsZWQgPSAxOworCQlyZXQgPSBhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19JRExFLCAwLCAwLCAmZWF4KTsKKwl9CisJaWYgKHBvbGxpbmcpCisJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCisJaWYgKCFpZGxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmV0KSB7CiAJCXN0YXRpYyB1bnNpZ25lZCBsb25nIHQ7CiAKIAkJLyogVGhpcyBhbHdheXMgZmFpbHMgb24gc29tZSBTTVAgYm9hcmRzIHJ1bm5pbmcgVVAga2VybmVscy4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggN2ExNGZkZi4uMWNiMjYxZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTk5LDE0ICs5OSwyMiBAQAogICovCiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogeworCWxvY2FsX2lycV9lbmFibGUoKTsKKwogCWlmICghaGx0X2NvdW50ZXIgJiYgYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2spIHsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCXNhZmVfaGFsdCgpOwotCQllbHNlCi0JCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCXNhZmVfaGFsdCgpOworCQkJZWxzZQorCQkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJfQorCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAl9IGVsc2UgewotCQljcHVfcmVsYXgoKTsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWNwdV9yZWxheCgpOwogCX0KIH0KICNpZmRlZiBDT05GSUdfQVBNX01PRFVMRQpAQCAtMTIwLDI5ICsxMjgsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgcG9sbF9pZGxlICh2b2lkKQogewotCWludCBvbGR2YWw7Ci0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQkvKgotCSAqIERlYWwgd2l0aCBhbm90aGVyIENQVSBqdXN0IGhhdmluZyBjaG9zZW4gYSB0aHJlYWQgdG8KLQkgKiBydW4gaGVyZToKLQkgKi8KLQlvbGR2YWwgPSB0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKTsKLQotCWlmICghb2xkdmFsKSB7Ci0JCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCQlhc20gdm9sYXRpbGUoCi0JCQkiMjoiCi0JCQkidGVzdGwgJTAsICUxOyIKLQkJCSJyZXA7IG5vcDsiCi0JCQkiamUgMmI7IgotCQkJOiA6ICJpIihfVElGX05FRURfUkVTQ0hFRCksICJtIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncykpOwotCi0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JfSBlbHNlIHsKLQkJc2V0X25lZWRfcmVzY2hlZCgpOwotCX0KKwlhc20gdm9sYXRpbGUoCisJCSIyOiIKKwkJInRlc3RsICUwLCAlMTsiCisJCSJyZXA7IG5vcDsiCisJCSJqZSAyYjsiCisJCTogOiAiaSIoX1RJRl9ORUVEX1JFU0NIRUQpLCAibSIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpKTsKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtMTc5LDcgKzE3Miw5IEBACiAgKi8KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKLQlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CkBAIC0yMDEsNyArMTk2LDkgQEAKIAkJCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlkbGVfdGltZXN0YW1wID0gamlmZmllczsKIAkJCWlkbGUoKTsKIAkJfQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApAQCAtMjQ0LDE1ICsyNDEsMTIgQEAKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7Ci0JCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCQlkbyB7Ci0JCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7Ci0JCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQkJYnJlYWs7Ci0JCQlfX213YWl0KDAsIDApOwotCQl9IHdoaWxlICghbmVlZF9yZXNjaGVkKCkpOwotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOworCQlzbXBfbWIoKTsKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQkJYnJlYWs7CisJCV9fbXdhaXQoMCwgMCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKaW5kZXggYjQ4YWM2MzUuLmZkZmNiMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKQEAgLTEyOSw5ICsxMjksNyBAQAogRVhQT1JUX1NZTUJPTChkcml2ZV9pbmZvKTsKICNlbmRpZgogc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOwotI2lmZGVmIENPTkZJR19WVAogRVhQT1JUX1NZTUJPTChzY3JlZW5faW5mbyk7Ci0jZW5kaWYKIHN0cnVjdCBhcG1faW5mbyBhcG1faW5mbzsKIEVYUE9SVF9TWU1CT0woYXBtX2luZm8pOwogc3RydWN0IHN5c19kZXNjX3RhYmxlX3N0cnVjdCB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDQ3ZWM3NjcuLmJjNWE5ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC00ODUsNiArNDg1LDcgQEAKIAkgKiB0aGluZ3MgZG9uZSBoZXJlIHRvIHRoZSBtb3N0IG5lY2Vzc2FyeSB0aGluZ3MuCiAJICovCiAJY3B1X2luaXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzbXBfY2FsbGluKCk7CiAJd2hpbGUgKCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBzbXBfY29tbWVuY2VkX21hc2spKQogCQlyZXBfbm9wKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2lvY3RsLmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2lvY3RsLmMKaW5kZXggMTY0YjIxMS4uODg3MzkzOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9pb2N0bC5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfaW9jdGwuYwpAQCAtMjksMTAgKzI5LDggQEAKICNkZWZpbmUgQ09ERQogI2luY2x1ZGUgImNvbXBhdF9pb2N0bC5jIgogCi10eXBlZGVmIGludCAoKiBpb2N0bDMyX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBmaWxlICopOwotCiAjZGVmaW5lIENPTVBBVElCTEVfSU9DVEwoY21kKQkJSEFORExFX0lPQ1RMKChjbWQpLHN5c19pb2N0bCkKLSNkZWZpbmUgSEFORExFX0lPQ1RMKGNtZCxoYW5kbGVyKQl7IChjbWQpLCAoaW9jdGwzMl9oYW5kbGVyX3QpKGhhbmRsZXIpLCBOVUxMIH0sCisjZGVmaW5lIEhBTkRMRV9JT0NUTChjbWQsaGFuZGxlcikJeyAoY21kKSwgKGlvY3RsX3RyYW5zX2hhbmRsZXJfdCkoaGFuZGxlciksIE5VTEwgfSwKICNkZWZpbmUgSU9DVExfVEFCTEVfU1RBUlQgXAogCXN0cnVjdCBpb2N0bF90cmFucyBpb2N0bF9zdGFydFtdID0gewogI2RlZmluZSBJT0NUTF9UQUJMRV9FTkQgXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwppbmRleCBmMDgxYzYwLi5lYjM5YmM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwpAQCAtODgsNyArODgsNyBAQAogCWlmICghaWE2NF9waHlzX2FkZHJfdmFsaWQocGFkZHIpKQogCQlyZXR1cm4gSVNPTEFURV9OT05FOwogCi0JaWYgKCFwZm5fdmFsaWQocGFkZHIpKQorCWlmICghcGZuX3ZhbGlkKHBhZGRyID4+IFBBR0VfU0hJRlQpKQogCQlyZXR1cm4gSVNPTEFURV9OT05FOwogCiAJLyogY29udmVydCBwaHlzaWNhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIHBhZ2UgbnVtYmVyICovCkBAIC0xMDgsNiArMTA4LDcgQEAKIAkJcmV0dXJuIElTT0xBVEVfTkc7CiAKIAkvKiBhZGQgYXR0cmlidXRlICdSZXNlcnZlZCcgYW5kIHJlZ2lzdGVyIHRoZSBwYWdlICovCisJZ2V0X3BhZ2UocCk7CiAJU2V0UGFnZVJlc2VydmVkKHApOwogCXBhZ2VfaXNvbGF0ZVtudW1fcGFnZV9pc29sYXRlKytdID0gcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNTFlMDUwLi42NDBkNjkwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTk3LDExICsxOTcsMTUgQEAKIGRlZmF1bHRfaWRsZSAodm9pZCkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0Jd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJaWYgKGNhbl9kb19wYWxfaGFsdCkKLQkJCXNhZmVfaGFsdCgpOwotCQllbHNlCisJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQlpZiAoY2FuX2RvX3BhbF9oYWx0KSB7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQlzYWZlX2hhbHQoKTsKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJfSBlbHNlCiAJCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTI2MywxNiArMjY3LDE2IEBACiBjcHVfaWRsZSAodm9pZCkKIHsKIAl2b2lkICgqbWFya19pZGxlKShpbnQpID0gaWE2NF9tYXJrX2lkbGU7CisgIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgeworCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQl2b2lkICgqaWRsZSkodm9pZCk7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQogCQkJbWluX3h0cCgpOwogI2VuZGlmCi0JCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCXZvaWQgKCppZGxlKSh2b2lkKTsKLQogCQkJaWYgKF9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpKQogCQkJCV9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpID0gMDsKIApAQCAtMjg0LDE3ICsyODgsMTcgQEAKIAkJCWlmICghaWRsZSkKIAkJCQlpZGxlID0gZGVmYXVsdF9pZGxlOwogCQkJKCppZGxlKSgpOwotCQl9Ci0KLQkJaWYgKG1hcmtfaWRsZSkKLQkJCSgqbWFya19pZGxlKSgwKTsKLQorCQkJaWYgKG1hcmtfaWRsZSkKKwkJCQkoKm1hcmtfaWRsZSkoMCk7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlub3JtYWxfeHRwKCk7CisJCQlub3JtYWxfeHRwKCk7CiAjZW5kaWYKKwkJfQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCQljaGVja19wZ3RfY2FjaGUoKTsKLQkJaWYgKGNwdV9pc19vZmZsaW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkpCisJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQogCQkJcGxheV9kZWFkKCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA0MDBhNDg5Li44ZjQ0ZTdkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtMzk5LDYgKzM5OSw3IEBACiAJRHByaW50aygic3RhcnRfc2Vjb25kYXJ5OiBzdGFydGluZyBDUFUgMHgleFxuIiwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwogCWVmaV9tYXBfcGFsX2NvZGUoKTsKIAljcHVfaW5pdCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCXNtcF9jYWxsaW4oKTsKIAogCWNwdV9pZGxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMKaW5kZXggN2IwM2I4MC4uMWY1MDBjOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYwpAQCAtMjEyLDEzICsyMTIsMTMgQEAKIAkJICAgIHBkaV9wY2lidXNfaW5mbzsKIAogCQkvKiBEaXNhYmxlIHRoZSBkZXZpY2UncyBJUlEgICAqLwotCQlwY2lyZWdfaW50cl9lbmFibGVfYml0X2NscihwY2lidXNfaW5mbywgYml0KTsKKwkJcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9jbHIocGNpYnVzX2luZm8sICgxIDw8IGJpdCkpOwogCiAJCS8qIENoYW5nZSB0aGUgZGV2aWNlJ3MgSVJRICAgICovCiAJCXBjaXJlZ19pbnRyX2FkZHJfYWRkcl9zZXQocGNpYnVzX2luZm8sIGJpdCwgeHRhbGtfYWRkcik7CiAKIAkJLyogUmUtZW5hYmxlIHRoZSBkZXZpY2UncyBJUlEgKi8KLQkJcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9zZXQocGNpYnVzX2luZm8sIGJpdCk7CisJCXBjaXJlZ19pbnRyX2VuYWJsZV9iaXRfc2V0KHBjaWJ1c19pbmZvLCAoMSA8PCBiaXQpKTsKIAogCQlwY2licl9mb3JjZV9pbnRlcnJ1cHQoc25faXJxX2luZm8pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCmluZGV4IDRmNzE4YzMuLjVkNTM0MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCV9fc25fY2xycV9yZWxheGVkKCZwdHItPnBpYy5wX2ludF9lbmFibGUsIH5iaXRzKTsKKwkJCV9fc25fY2xycV9yZWxheGVkKCZwdHItPnBpYy5wX2ludF9lbmFibGUsIGJpdHMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwYW5pYwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlYTEzYThmLi5jYzRiNTcxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTA0LDcgKzEwNCw5IEBACiAKIAkJCWlkbGUoKTsKIAkJfQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCA2NDBkNTkyLi5iOTBjNTQxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtNDI2LDYgKzQyNiw3IEBACiBpbnQgX19pbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCiB7CiAJY3B1X2luaXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzbXBfY2FsbGluKCk7CiAJd2hpbGUgKCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBzbXBfY29tbWVuY2VkX21hc2spKQogCQljcHVfcmVsYXgoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTFiMWI5MC4uMTNkMTA5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDIsNyArMTAyLDkgQEAKIAl3aGlsZSAoMSkgewogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJaWRsZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKaW5kZXggMWVmMTVkNS4uNGYyMWY0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCkBAIC0xMTEsMTcgKzExMSw2IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRkJfRTEzNTYKLQlpZiAoKGFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJ2aWRlbz0iKSkgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKLQkJc3RyY2F0KGFyZ3B0ciwgIiB2aWRlbz1lMTM1NmZiOnN5c3RlbTpwYjEwMDAsbW11bmFsaWduOjEiKTsKLSNlbHNlCi0JCXN0cmNhdChhcmdwdHIsICIgdmlkZW89ZTEzNTZmYjpzeXN0ZW06cGIxNTAwIik7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19GQl9YUEVSVDk4CiAJaWYgKChhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAidmlkZW89IikpID09IE5VTEwpIHsKIAkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnCmluZGV4IGIyNjBlNTEuLjMyNmYzYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnCkBAIC02NTgsNyArNjU4LDYgQEAKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0UxMzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCmluZGV4IDlhNzI4YzIuLjYzOTBhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCkBAIC02MjgsNyArNjI4LDYgQEAKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0UxMzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKaW5kZXggZmZiMjNmYy4uZjE4ZDA1YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwpAQCAtNzU4LDcgKzc1OCw2IEBACiAjIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9FMTM1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZwppbmRleCAwNWU2NTIwLi4zN2JkOGQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZwpAQCAtODk3LDcgKzg5Nyw2IEBACiAjIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9FMTM1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKaW5kZXggMmJjNjFjYS4uODk3NDIwZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCkBAIC04NzYsNyArODc2LDYgQEAKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0UxMzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lvY3RsMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaW9jdGwzMi5jCmluZGV4IGVkOWIyZGEuLjllYTFmYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaW9jdGwzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaW9jdGwzMi5jCkBAIC0yNiwxMCArMjYsOCBAQAogI2RlZmluZSBDT0RFCiAjaW5jbHVkZSAiY29tcGF0X2lvY3RsLmMiCiAKLXR5cGVkZWYgaW50ICgqIGlvY3RsMzJfaGFuZGxlcl90KSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZywgc3RydWN0IGZpbGUgKik7Ci0KICNkZWZpbmUgQ09NUEFUSUJMRV9JT0NUTChjbWQpCQlIQU5ETEVfSU9DVEwoKGNtZCksc3lzX2lvY3RsKQotI2RlZmluZSBIQU5ETEVfSU9DVEwoY21kLGhhbmRsZXIpCXsgKGNtZCksIChpb2N0bDMyX2hhbmRsZXJfdCkoaGFuZGxlciksIE5VTEwgfSwKKyNkZWZpbmUgSEFORExFX0lPQ1RMKGNtZCxoYW5kbGVyKQl7IChjbWQpLCAoaW9jdGxfdHJhbnNfaGFuZGxlcl90KShoYW5kbGVyKSwgTlVMTCB9LAogI2RlZmluZSBJT0NUTF9UQUJMRV9TVEFSVCBcCiAJc3RydWN0IGlvY3RsX3RyYW5zIGlvY3RsX3N0YXJ0W10gPSB7CiAjZGVmaW5lIElPQ1RMX1RBQkxFX0VORCBcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDRmZTNkNTcuLmRkNzI1NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01Miw3ICs1Miw5IEBACiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQlpZiAoY3B1X3dhaXQpCiAJCQkJKCpjcHVfd2FpdCkoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IGZjYWNmMWEuLjI1NDcyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtODIsNyArODIsNyBAQAogICovCiBhc21saW5rYWdlIHZvaWQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCiAJY3B1X3Byb2JlKCk7CiAJY3B1X3JlcG9ydCgpOwpAQCAtOTUsNiArOTUsOCBAQAogCSAqLwogCiAJY2FsaWJyYXRlX2RlbGF5KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWNwdV9kYXRhW2NwdV0udWRlbGF5X3ZhbCA9IGxvb3BzX3Blcl9qaWZmeTsKIAogCXByb21fc21wX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L2lycS5jIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L2lycS5jCmluZGV4IDIzMGY1YTkuLjljZDljMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9pcnEuYworKysgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5MzgvaXJxLmMKQEAgLTg0LDcgKzg0LDYgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxhc20vdHg0OTM4L3JidHg0OTM4Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMWFkNDRmOS4uZTIzYzRlMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3ZmRjYTg3Li5mZWU0ZjFmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTg4LDExICs4OCwxNSBAQAogICovCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7CisJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQliYXJyaWVyKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWNoZWNrX3BndF9jYWNoZSgpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwppbmRleCA1ZGIzYmU0Li5hOWVjZjY0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCkBAIC00NjMsNiArNDYzLDcgQEAKICNlbmRpZgogCiAJc21wX2NwdV9pbml0KHNsYXZlX2lkKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAogI2lmIDAJLyogTk9UIFdPUktJTkcgWUVUIC0gc2VlIGVudHJ5LlMgKi8KIAlpc3RhY2sgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCxJU1RBQ0tfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDMyZjIxNTguLjA1NzhmODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTg4NywxMCArODg3LDYgQEAKIAlkaWUoIlVucmVjb3ZlcmFibGUgVk1YL0FsdGl2ZWMgVW5hdmFpbGFibGUgRXhjZXB0aW9uIiwgcmVncywgU0lHQUJSVCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLWV4dGVybiBwZXJmX2lycV90IHBlcmZfaXJxOwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfRTUwMCkKIHZvaWQgcGVyZm9ybWFuY2VfbW9uaXRvcl9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCA5NzA4MmE0Li43MWE2YWRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3Zpby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZCAqdmlvX21hdGNoX2RldmljZSgKIAkJY29uc3Qgc3RydWN0IHZpb19kZXZpY2VfaWQgKiwgY29uc3Qgc3RydWN0IHZpb19kZXYgKik7CkBAIC0yNjUsNyArMjY2LDMzIEBACiAJcmV0dXJuIChpZHMgIT0gTlVMTCkgJiYgKHZpb19tYXRjaF9kZXZpY2UoaWRzLCB2aW9fZGV2KSAhPSBOVUxMKTsKIH0KIAorc3RhdGljIGludCB2aW9faG90cGx1ZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCQljaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3QgdmlvX2RldiAqdmlvX2RldiA9IHRvX3Zpb19kZXYoZGV2KTsKKwljaGFyICpjcDsKKwlpbnQgbGVuZ3RoOworCisJaWYgKCFudW1fZW52cCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIXZpb19kZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKwljcCA9IChjaGFyICopZ2V0X3Byb3BlcnR5KHZpb19kZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCAiY29tcGF0aWJsZSIsICZsZW5ndGgpOworCWlmICghY3ApCisJCXJldHVybiAtRU5PREVWOworCisJZW52cFswXSA9IGJ1ZmZlcjsKKwlsZW5ndGggPSBzY25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwgIk1PREFMSUFTPXZpbzpUJXNTJXMiLAorCQkJCXZpb19kZXYtPnR5cGUsIGNwKTsKKwlpZiAoYnVmZmVyX3NpemUgLSBsZW5ndGggPD0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZW52cFsxXSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBidXNfdHlwZSB2aW9fYnVzX3R5cGUgPSB7CiAJLm5hbWUgPSAidmlvIiwKKwkuaG90cGx1ZyA9IHZpb19ob3RwbHVnLAogCS5tYXRjaCA9IHZpb19idXNfbWF0Y2gsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCBkM2U0YmY3Li43ZjhmMGNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtNjk0LDIwICs2OTQsMTkgQEAKIAkJaWYgKGh2bHBldmVudF9pc19wZW5kaW5nKCkpCiAJCQlwcm9jZXNzX2lTZXJpZXNfZXZlbnRzKCk7CiAKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGlzZXJpZXNfZGVkaWNhdGVkX2lkbGUodm9pZCkKIHsKIAlsb25nIG9sZHZhbDsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAogCXdoaWxlICgxKSB7Ci0JCW9sZHZhbCA9IHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpOwotCi0JCWlmICghb2xkdmFsKSB7Ci0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQorCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQkJcHBjNjRfcnVubGF0Y2hfb2ZmKCk7CiAJCQkJSE1UX2xvdygpOwpAQCAtNzIwLDEzICs3MTksMTIgQEAKIAkJCX0KIAogCQkJSE1UX21lZGl1bSgpOwotCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQkJfSBlbHNlIHsKLQkJCXNldF9uZWVkX3Jlc2NoZWQoKTsKIAkJfQogCiAJCXBwYzY0X3J1bmxhdGNoX29uKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IGU3OGMzOTMuLmEwOTNhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC00NjksNiArNDY5LDcgQEAKIAkJICogbW9yZS4KIAkJICovCiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKIAkJLyoKIAkJICogU01UIGR5bmFtaWMgbW9kZS4gQ2VkZSB3aWxsIHJlc3VsdCBpbiB0aGlzIHRocmVhZCBnb2luZwpAQCAtNDgxLDYgKzQ4Miw3IEBACiAJCQljZWRlX3Byb2Nlc3NvcigpOwogCQllbHNlCiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEdpdmUgdGhlIEhWIGFuIG9wcG9ydHVuaXR5IGF0IHRoZSBwcm9jZXNzb3IsIHNpbmNlIHdlIGFyZQpAQCAtNDkyLDExICs0OTQsMTEgQEAKIAogc3RhdGljIHZvaWQgcHNlcmllc19kZWRpY2F0ZWRfaWRsZSh2b2lkKQogeyAKLQlsb25nIG9sZHZhbDsKIAlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKmxwYWNhID0gZ2V0X3BhY2EoKTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfc25vb3plOwogCXVuc2lnbmVkIGxvbmcgKnNtdF9zbm9vemVfZGVsYXkgPSAmX19nZXRfY3B1X3ZhcihzbXRfc25vb3plX2RlbGF5KTsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAogCXdoaWxlICgxKSB7CiAJCS8qCkBAIC01MDUsMTAgKzUwNyw3IEBACiAJCSAqLwogCQlscGFjYS0+bHBwYWNhLmlkbGUgPSAxOwogCi0JCW9sZHZhbCA9IHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpOwotCQlpZiAoIW9sZHZhbCkgewotCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0KKwkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQkJc3RhcnRfc25vb3plID0gX19nZXRfdGIoKSArCiAJCQkJKnNtdF9zbm9vemVfZGVsYXkgKiB0Yl90aWNrc19wZXJfdXNlYzsKIApAQCAtNTMxLDE1ICs1MzAsMTQgQEAKIAkJCX0KIAogCQkJSE1UX21lZGl1bSgpOwotCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQkJfSBlbHNlIHsKLQkJCXNldF9uZWVkX3Jlc2NoZWQoKTsKIAkJfQogCiAJCWxwYWNhLT5scHBhY2EuaWRsZSA9IDA7CiAJCXBwYzY0X3J1bmxhdGNoX29uKCk7CiAKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAogCQlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCiAJCQljcHVfZGllKCk7CkBAIC01ODMsNyArNTgxLDkgQEAKIAkJbHBhY2EtPmxwcGFjYS5pZGxlID0gMDsKIAkJcHBjNjRfcnVubGF0Y2hfb24oKTsKIAorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKIAkJCWNwdV9kaWUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2NvbmZpZ3MvbXBjODM0eF9zeXNfZGVmY29uZmlnIGIvYXJjaC9wcGMvY29uZmlncy9tcGM4MzR4X3N5c19kZWZjb25maWcKaW5kZXggNGE1NTIyYy4uNjczZGM2NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvY29uZmlncy9tcGM4MzR4X3N5c19kZWZjb25maWcKKysrIGIvYXJjaC9wcGMvY29uZmlncy9tcGM4MzR4X3N5c19kZWZjb25maWcKQEAgLTEsMTYgKzEsMTcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1yYzQKLSMgVGh1IEZlYiAxNyAxNjoxMjoyMyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQKKyMgTW9uIE5vdiAgNyAxNTozODoyOSAyMDA1CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQogQ09ORklHX1BQQz15CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtMTgsMjMgKzE5LDI4IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtNDQsNiArNTAsNyBAQAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNTksMzQgKzY2LDg0IEBACiAjIENPTkZJR19QT1dFUjMgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVI0IGlzIG5vdCBzZXQKICMgQ09ORklHXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0U1MDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAogQ09ORklHX1BQQ19HRU41NTA9eQotQ09ORklHXzgzeHg9eQotCi0jCi0jIEZyZWVzY2FsZSA4M3h4IG9wdGlvbnMKLSMKLUNPTkZJR19NUEM4MzR4X1NZUz15Ci1DT05GSUdfTVBDODM0eD15CiBDT05GSUdfUFBDX1NURF9NTVU9eQogCiAjCiAjIFBsYXRmb3JtIG9wdGlvbnMKICMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQVVMgaXMgbm90IHNldAorIyBDT05GSUdfS0FUQU5BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTExPVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUENJNjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSUE1DMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRVNUTlVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQUlVDRSBpcyBub3Qgc2V0CisjIENPTkZJR19IRFBVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VWNjQyNjAgaXMgbm90IHNldAorIyBDT05GSUdfTE9QRUMgaXMgbm90IHNldAorIyBDT05GSUdfTVZNRTUxMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJQTUM3NTAgaXMgbm90IHNldAorIyBDT05GSUdfUFJQTUM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0FORFBPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRFNUT05FX1BQQzdEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTDQgaXMgbm90IHNldAorIyBDT05GSUdfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VTVDgyNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQlM4MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQWDgyNjAgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19BRFM4MjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkZBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTElURTUyMDAgaXMgbm90IHNldAorQ09ORklHX01QQzgzNHhfU1lTPXkKKyMgQ09ORklHX0VWNjQzNjAgaXMgbm90IHNldAorQ09ORklHXzgzeHg9eQorQ09ORklHX01QQzgzNHg9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfTVBDODN4eF9QQ0kyIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTk0LDEwICsxNTEsNiBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLQotIwogIyBBZHZhbmNlZCBzZXR1cAogIwogIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CkBAIC0xMTIsNiArMTY1LDc1IEBACiBDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMTIzLDYgKzI0NSwxMSBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIAogIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKICMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CkBAIC0xNDAsMTUgKzI2NywxOSBAQAogIyBCbG9jayBkZXZpY2VzCiAjCiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCkBAIC0xNTksNiArMjkwLDExIEBACiBDT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY5LDYgKzMwNSw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CiAKICMKQEAgLTE3OSw4NSArMzE2LDI1IEBACiAjCiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogCiAjCiAjIEkyTyBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIwogIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKICMKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC0yNjUsMjQgKzM0Miw5MCBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKworIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCiAjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorIyBDT05GSUdfRTEwMDBfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCiAjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCkBAIC0yOTMsMTAgKzQzNiwxNCBAQAogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtMzIzLDE0ICs0NzAsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC0zNDAsNiArNDc5LDEyIEBACiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtMzU4LDYgKzUwMyw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtMzc2LDYgKzUyMiw3IEBACiAjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAKICMKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCkBAIC0zODUsNiArNTMyLDEyIEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKICMgSTJDIHN1cHBvcnQKICMKIENPTkZJR19JMkM9eQpAQCAtNDAwLDQ4ICs1NTMsNDEgQEAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNDUzLDEwICs1OTksNTUgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCiAjIE1pc2MgZGV2aWNlcwogIwogCiAjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTQ3OSwxMSArNjcwLDEyIEBACiAjCiAjIFVTQiBzdXBwb3J0CiAjCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCiAKICMKQEAgLTUwMiwxMCArNjk0LDE1IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIworIyBTTiBEZXZpY2VzCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTUxNSwxNyArNzEyLDE2IEBACiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTU0NiwxMiArNzQyLDEwIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTU4MCw2ICs3NzQsNyBAQAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldApAQCAtNTg4LDYgKzc4Myw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtNjE0LDYgKzgxMCw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIApAQCAtNjI1LDcgKzgyMiw5IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2lkbGUuYyBiL2FyY2gvcHBjL2tlcm5lbC9pZGxlLmMKaW5kZXggMTFlNWI0NC4uM2M0ZTRjYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvaWRsZS5jCkBAIC01MywxMCArNTMsNiBAQAogCQl9CiAjZW5kaWYKIAl9Ci0JaWYgKG5lZWRfcmVzY2hlZCgpKQotCQlzY2hlZHVsZSgpOwotCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKLQkJY3B1X2RpZSgpOwogfQogCiAvKgpAQCAtNjQsMTEgKzYwLDIyIEBACiAgKi8KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKLQlmb3IgKDs7KQotCQlpZiAocHBjX21kLmlkbGUgIT0gTlVMTCkKLQkJCXBwY19tZC5pZGxlKCk7Ci0JCWVsc2UKLQkJCWRlZmF1bHRfaWRsZSgpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlmb3IgKDs7KSB7CisJCXdoaWxlIChuZWVkX3Jlc2NoZWQoKSkgeworCQkJaWYgKHBwY19tZC5pZGxlICE9IE5VTEwpCisJCQkJcHBjX21kLmlkbGUoKTsKKwkJCWVsc2UKKwkJCQlkZWZhdWx0X2lkbGUoKTsKKwkJfQorCisJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKKwkJCWNwdV9kaWUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwl9CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TWVNDVEwpICYmIGRlZmluZWQoQ09ORklHXzZ4eCkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcHBjL2tlcm5lbC9zbXAuYwppbmRleCBiYzViZjExLi40M2I4ZmMyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NtcC5jCkBAIC0zNDEsNiArMzQxLDcgQEAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAgICAgICAgIHNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOwogCXNldF9kZWModGJfdGlja3NfcGVyX2ppZmZ5KTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHVfY2FsbGluX21hcFtjcHVdID0gMTsKIAogCXByaW50aygiQ1BVICVkIGRvbmUgY2FsbGluLi4uXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKaW5kZXggNzliM2Y1My4uOThlZGM3NSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCkBAIC01MSw2ICs1MSw5IEBACiAKICNpbmNsdWRlIDxzeXNsaWIvcHBjODN4eF9zZXR1cC5oPgogCitzdGF0aWMgY29uc3QgY2hhciAqR0ZBUl9QSFlfMCA9ICJwaHkwOjAiOworc3RhdGljIGNvbnN0IGNoYXIgKkdGQVJfUEhZXzEgPSAicGh5MDoxIjsKKwogI2lmbmRlZiBDT05GSUdfUENJCiB1bnNpZ25lZCBsb25nIGlzYV9pb19iYXNlID0gMDsKIHVuc2lnbmVkIGxvbmcgaXNhX21lbV9iYXNlID0gMDsKQEAgLTk3LDYgKzEwMCw3IEBACiAJYmRfdCAqYmluZm8gPSAoYmRfdCAqKSBfX3JlczsKIAl1bnNpZ25lZCBpbnQgZnJlcTsKIAlzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZ2lhbmZhcl9tZGlvX2RhdGEgKm1kYXRhOwogCiAJLyogZ2V0IHRoZSBjb3JlIGZyZXF1ZW5jeSAqLwogCWZyZXEgPSBiaW5mby0+YmlfaW50ZnJlcTsKQEAgLTExMSwyNCArMTE1LDI3IEBACiAjZW5kaWYKIAltcGM4M3h4X2Vhcmx5X3NlcmlhbF9tYXAoKTsKIAorCS8qIHNldHVwIHRoZSBib2FyZCByZWxhdGVkIGluZm8gZm9yIHRoZSBNRElPIGJ1cyAqLworCW1kYXRhID0gKHN0cnVjdCBnaWFuZmFyX21kaW9fZGF0YSAqKSBwcGNfc3lzX2dldF9wZGF0YShNUEM4M3h4X01ESU8pOworCisJbWRhdGEtPmlycVswXSA9IE1QQzgzeHhfSVJRX0VYVDE7CisJbWRhdGEtPmlycVsxXSA9IE1QQzgzeHhfSVJRX0VYVDI7CisJbWRhdGEtPmlycVsyXSA9IC0xOworCW1kYXRhLT5pcnFbMzFdID0gLTE7CisJbWRhdGEtPnBhZGRyICs9IGJpbmZvLT5iaV9pbW1yX2Jhc2U7CisKIAkvKiBzZXR1cCB0aGUgYm9hcmQgcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGVuZXQgY29udHJvbGxlcnMgKi8KIAlwZGF0YSA9IChzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICopIHBwY19zeXNfZ2V0X3BkYXRhKE1QQzgzeHhfVFNFQzEpOwogCWlmIChwZGF0YSkgewogCQlwZGF0YS0+Ym9hcmRfZmxhZ3MgPSBGU0xfR0lBTkZBUl9CUkRfSEFTX1BIWV9JTlRSOwotCQlwZGF0YS0+aW50ZXJydXB0UEhZID0gTVBDODN4eF9JUlFfRVhUMTsKLQkJcGRhdGEtPnBoeWlkID0gMDsKLQkJLyogZml4dXAgcGh5IGFkZHJlc3MgKi8KLQkJcGRhdGEtPnBoeV9yZWdfYWRkciArPSBiaW5mby0+YmlfaW1tcl9iYXNlOworCQlwZGF0YS0+YnVzX2lkID0gR0ZBUl9QSFlfMDsKIAkJbWVtY3B5KHBkYXRhLT5tYWNfYWRkciwgYmluZm8tPmJpX2VuZXRhZGRyLCA2KTsKIAl9CiAKIAlwZGF0YSA9IChzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICopIHBwY19zeXNfZ2V0X3BkYXRhKE1QQzgzeHhfVFNFQzIpOwogCWlmIChwZGF0YSkgewogCQlwZGF0YS0+Ym9hcmRfZmxhZ3MgPSBGU0xfR0lBTkZBUl9CUkRfSEFTX1BIWV9JTlRSOwotCQlwZGF0YS0+aW50ZXJydXB0UEhZID0gTVBDODN4eF9JUlFfRVhUMjsKLQkJcGRhdGEtPnBoeWlkID0gMTsKLQkJLyogZml4dXAgcGh5IGFkZHJlc3MgKi8KLQkJcGRhdGEtPnBoeV9yZWdfYWRkciArPSBiaW5mby0+YmlfaW1tcl9iYXNlOworCQlwZGF0YS0+YnVzX2lkID0gR0ZBUl9QSFlfMTsKIAkJbWVtY3B5KHBkYXRhLT5tYWNfYWRkciwgYmluZm8tPmJpX2VuZXQxYWRkciwgNik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmgKaW5kZXggOTVmZGY0Yi4uN2JjYzZjMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIAogI2RlZmluZSBCT0FSRF9DQ1NSQkFSCQkoKHVpbnQpMHhlMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQppbmRleCA1YmQzM2JhLi41YjdmMmI4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCkBAIC0zMyw3ICszMyw2IEBACiBvYmotJChDT05GSUdfUFBDNHh4X0VETUEpCSs9IHBwYzR4eF9zZ2RtYS5vCiBpZmVxICgkKENPTkZJR180MHgpLHkpCiBvYmotJChDT05GSUdfUENJKQkJKz0gcGNpX2F1dG8ubyBwcGM0MDVfcGNpLm8KLW9iai0kKENPTkZJR19SQVBJRElPKQkJKz0gcHBjODV4eF9yaW8ubwogZW5kaWYKIGVuZGlmCiBvYmotJChDT05GSUdfOHh4KQkJKz0gbTh4eF9zZXR1cC5vIHBwYzh4eF9waWMubyAkKHdkdC1tcGM4eHgteSkgXApAQCAtOTYsNiArOTUsNyBAQAogaWZlcSAoJChDT05GSUdfODV4eCkseSkKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBwY2lfYXV0by5vCiBlbmRpZgorb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSBwcGM4NXh4X3Jpby5vCiBvYmotJChDT05GSUdfODN4eCkJCSs9IGlwaWMubyBwcGM4M3h4X3NldHVwLm8gcHBjX3N5cy5vIFwKIAkJCQkJbXBjODN4eF9zeXMubyBtcGM4M3h4X2RldmljZXMubwogaWZlcSAoJChDT05GSUdfODN4eCkseSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X2RldmljZXMuYwppbmRleCBkYmY4YWNhLi5mNDNmYmY5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjODN4eF9kZXZpY2VzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfZGV2aWNlcy5jCkBAIC0yNywxOCArMjcsMjAgQEAKICAqIHdoYXQgSU1NUkJBUiBpcywgd2lsbCBnZXQgZml4ZWQgdXAgYnkgbWFjaF9tcGM4M3h4X2ZpeHVwCiAgKi8KIAorc3RydWN0IGdpYW5mYXJfbWRpb19kYXRhIG1wYzgzeHhfbWRpb19wZGF0YSA9IHsKKwkucGFkZHIgPSAweDI0NTIwLAorfTsKKwogc3RhdGljIHN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgbXBjODN4eF90c2VjMV9wZGF0YSA9IHsKIAkuZGV2aWNlX2ZsYWdzID0gRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKIAkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CiAJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiwKLQkucGh5X3JlZ19hZGRyID0gMHgyNDAwMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhIG1wYzgzeHhfdHNlYzJfcGRhdGEgPSB7CiAJLmRldmljZV9mbGFncyA9IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCB8CiAJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfCBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04gfAogCSAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIsCi0JLnBoeV9yZWdfYWRkciA9IDB4MjQwMDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZzbF9pMmNfcGxhdGZvcm1fZGF0YSBtcGM4M3h4X2ZzbF9pMmMxX3BkYXRhID0gewpAQCAtMjIwLDYgKzIyMiwxMiBAQAogCQkJfSwKIAkJfSwKIAl9LAorCVtNUEM4M3h4X01ESU9dID0geworCQkubmFtZSA9ICJmc2wtZ2lhbmZhcl9tZGlvIiwKKwkJLmlkID0gMCwKKwkJLmRldi5wbGF0Zm9ybV9kYXRhID0gJm1wYzgzeHhfbWRpb19wZGF0YSwKKwkJLm51bV9yZXNvdXJjZXMgPSAwLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNoX21wYzgzeHhfZml4dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfc3lzLmMKaW5kZXggMjlhYTYzMy4uZGE3NDM0NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfc3lzLmMKQEAgLTI0LDcyICsyNCw3MiBAQAogCQkucHBjX3N5c19uYW1lCT0gIjgzNDlFIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDUwMDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gOCwKKwkJLm51bV9kZXZpY2VzCT0gOSwKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwgTVBDODN4eF9TRUMyLAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDkiLAogCQkubWFzayAJCT0gMHhGRkZGMDAwMCwKIAkJLnZhbHVlIAkJPSAweDgwNTEwMDAwLAotCQkubnVtX2RldmljZXMJPSA3LAorCQkubnVtX2RldmljZXMJPSA4LAogCQkuZGV2aWNlX2xpc3QJPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODN4eF9UU0VDMSwgTVBDODN4eF9UU0VDMiwgTVBDODN4eF9JSUMxLAogCQkJTVBDODN4eF9JSUMyLCBNUEM4M3h4X0RVQVJULAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDdFIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDUyMDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gOCwKKwkJLm51bV9kZXZpY2VzCT0gOSwKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwgTVBDODN4eF9TRUMyLAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDciLAogCQkubWFzayAJCT0gMHhGRkZGMDAwMCwKIAkJLnZhbHVlIAkJPSAweDgwNTMwMDAwLAotCQkubnVtX2RldmljZXMJPSA3LAorCQkubnVtX2RldmljZXMJPSA4LAogCQkuZGV2aWNlX2xpc3QJPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODN4eF9UU0VDMSwgTVBDODN4eF9UU0VDMiwgTVBDODN4eF9JSUMxLAogCQkJTVBDODN4eF9JSUMyLCBNUEM4M3h4X0RVQVJULAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDNFIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDU0MDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gNywKKwkJLm51bV9kZXZpY2VzCT0gOCwKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwgTVBDODN4eF9TRUMyLAotCQkJTVBDODN4eF9VU0IyX0RSLAorCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X01ESU8KIAkJfSwKIAl9LAogCXsKIAkJLnBwY19zeXNfbmFtZQk9ICI4MzQzIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDU1MDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gNiwKKwkJLm51bV9kZXZpY2VzCT0gNywKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwKLQkJCU1QQzgzeHhfVVNCMl9EUiwKKwkJCU1QQzgzeHhfVVNCMl9EUiwgTVBDODN4eF9NRElPCiAJCX0sCiAJfSwKIAl7CS8qIGRlZmF1bHQgbWF0Y2ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcm9tLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHJvbS5jCmluZGV4IDAzYjFmYzkuLmFmNGRlYWNlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHJvbS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcm9tLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3Byb21faW5pdC5jIGIvYXJjaC9wcGMvc3lzbGliL3Byb21faW5pdC5jCmluZGV4IDdmMTUxMzYuLmRmMTQ0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcm9tX2luaXQuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHJvbV9pbml0LmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYwppbmRleCA4ZmVjMjc0Li43MTViYzBlIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCkBAIC0zNCwxNSArMzQsMTEgQEAKIAogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKLQlsb25nIG9sZHZhbDsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJd2hpbGUgKDEpIHsKLQkJb2xkdmFsID0gdGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCk7Ci0KLQkJaWYgKCFvbGR2YWwpIHsKLQkJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCisJCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkgJiYgIWNwdV9pc19vZmZsaW5lKGNwdSkpIHsKIAkJCQlwcGM2NF9ydW5sYXRjaF9vZmYoKTsKIApAQCAtNTUsMTMgKzUxLDEyIEBACiAJCQl9CiAKIAkJCUhNVF9tZWRpdW0oKTsKLQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXRfbmVlZF9yZXNjaGVkKCk7CiAJCX0KIAogCQlwcGM2NF9ydW5sYXRjaF9vbigpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCiAJCQljcHVfZGllKCk7CiAJfQpAQCAtNzcsNyArNzIsOSBAQAogCiAJCWlmIChuZWVkX3Jlc2NoZWQoKSkgewogCQkJcHBjNjRfcnVubGF0Y2hfb24oKTsKKwkJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJCXNjaGVkdWxlKCk7CisJCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJfQogCiAJCWlmIChjcHVfaXNfb2ZmbGluZShzbXBfcHJvY2Vzc29yX2lkKCkpICYmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwppbmRleCBjOWYyZjYwLi5kZWU2YWI1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYworKysgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCkBAIC01OTIsMTIgKzU5MiwxNSBAQAogICovCiB2b2lkIGFwcGxkYXRhX3VucmVnaXN0ZXJfb3BzKHN0cnVjdCBhcHBsZGF0YV9vcHMgKm9wcykKIHsKKwl2b2lkICp0YWJsZTsKIAlzcGluX2xvY2soJmFwcGxkYXRhX29wc19sb2NrKTsKLQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShvcHMtPnN5c2N0bF9oZWFkZXIpOwogCWxpc3RfZGVsKCZvcHMtPmxpc3QpOwotCWtmcmVlKG9wcy0+Y3RsX3RhYmxlKTsKKwkvKiBhdCB0aGF0IHBvaW50IGFueSBpbmNvbWluZyBhY2Nlc3Mgd2lsbCBmYWlsICovCisJdGFibGUgPSBvcHMtPmN0bF90YWJsZTsKIAlvcHMtPmN0bF90YWJsZSA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJmFwcGxkYXRhX29wc19sb2NrKTsKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShvcHMtPnN5c2N0bF9oZWFkZXIpOworCWtmcmVlKHRhYmxlKTsKIAlQX0lORk8oIiVzLW9wcyB1bnJlZ2lzdGVyZWQhXG4iLCBvcHMtPm5hbWUpOwogfQogLyoqKioqKioqKioqKioqKioqKioqKiogbW9kdWxlLW9wcyBtYW5hZ2VtZW50IDxFTkQ+ICoqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IGJjNTkyODIuLjg5NmQzOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTQ4Niw3ICs0ODYsNyBAQAogICogLSBnb3RvIG5leHQgZW50cnkgaW4gcF9pbmZvCiAgKi8KIAotZXh0ZXJuIGlubGluZSBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBkZWJ1Z19uZXh0X2VudHJ5KGZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbykKIHsKIAlkZWJ1Z19pbmZvX3QgKmlkOwpAQCAtODAwLDcgKzgwMCw3IEBACiAgKiAtIHNldCBhY3RpdmUgZW50cnkgdG8gbmV4dCBpbiB0aGUgcmluZyBidWZmZXIKICAqLwogCi1leHRlcm4gaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcHJvY2VlZF9hY3RpdmVfZW50cnkoZGVidWdfaW5mb190ICogaWQpCiB7CiAJaWYgKChpZC0+YWN0aXZlX2VudHJpZXNbaWQtPmFjdGl2ZV9hcmVhXSArPSBpZC0+ZW50cnlfc2l6ZSkKQEAgLTgxNyw3ICs4MTcsNyBAQAogICogLSBzZXQgYWN0aXZlIGFyZWEgdG8gbmV4dCBpbiB0aGUgcmluZyBidWZmZXIKICAqLwogCi1leHRlcm4gaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcHJvY2VlZF9hY3RpdmVfYXJlYShkZWJ1Z19pbmZvX3QgKiBpZCkKIHsKIAlpZC0+YWN0aXZlX2FyZWErKzsKQEAgLTgyOCw3ICs4MjgsNyBAQAogICogZ2V0X2FjdGl2ZV9lbnRyeToKICAqLwogCi1leHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QqCiBnZXRfYWN0aXZlX2VudHJ5KGRlYnVnX2luZm9fdCAqIGlkKQogewogCXJldHVybiAoZGVidWdfZW50cnlfdCAqKSAoKChjaGFyICopIGlkLT5hcmVhc1tpZC0+YWN0aXZlX2FyZWFdCkBAIC04NDEsNyArODQxLDcgQEAKICAqIC0gc2V0IHRpbWVzdGFtcCwgY2FsbGVyIGFkZHJlc3MsIGNwdSBudW1iZXIgZXRjLgogICovCiAKLWV4dGVybiBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBkZWJ1Z19maW5pc2hfZW50cnkoZGVidWdfaW5mb190ICogaWQsIGRlYnVnX2VudHJ5X3QqIGFjdGl2ZSwgaW50IGxldmVsLAogCQkJaW50IGV4Y2VwdGlvbikKIHsKQEAgLTk3MSw3ICs5NzEsNyBAQAogICogY291bnRzIGFyZ3VtZW50cyBpbiBmb3JtYXQgc3RyaW5nIGZvciBzcHJpbnRmIHZpZXcKICAqLwogCi1leHRlcm4gaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIGRlYnVnX2NvdW50X251bWFyZ3MoY2hhciAqc3RyaW5nKQogewogCWludCBudW1hcmdzPTA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDlmM2RmZjYuLjc4YjY0ZmU1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtOTksMTUgKzk5LDE1IEBACiB7CiAJaW50IGNwdSwgcmM7CiAKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotICAgICAgICBpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotICAgICAgICAgICAgICAgIHNjaGVkdWxlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KIAkvKiBDUFUgaXMgZ29pbmcgaWRsZS4gKi8KIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChuZWVkX3Jlc2NoZWQoKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisKIAlyYyA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJmlkbGVfY2hhaW4sIENQVV9JRExFLCAodm9pZCAqKShsb25nKSBjcHUpOwogCWlmIChyYyAhPSBOT1RJRllfT0sgJiYgcmMgIT0gTk9USUZZX0RPTkUpCiAJCUJVRygpOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJX19jdGxfc2V0X2JpdCg4LCAxNSk7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlpZiAoY3B1X2lzX29mZmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKwlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkKIAkJY3B1X2RpZSgpOwogI2VuZGlmCiAKQEAgLTEzOSw4ICsxMzksMTQgQEAKIAogdm9pZCBjcHVfaWRsZSh2b2lkKQogewotCWZvciAoOzspCi0JCWRlZmF1bHRfaWRsZSgpOworCWZvciAoOzspIHsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWRlZmF1bHRfaWRsZSgpOworCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJfQogfQogCiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGUxM2M4N2IuLjU4NTZiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNTMzLDYgKzUzMyw3IEBACiB7CiAgICAgICAgIC8qIFNldHVwIHRoZSBjcHUgKi8KICAgICAgICAgY3B1X2luaXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKICAgICAgICAgLyogaW5pdCBwZXIgQ1BVIHRpbWVyICovCiAgICAgICAgIGluaXRfY3B1X3RpbWVyKCk7CiAjaWZkZWYgQ09ORklHX1ZJUlRfVElNRVIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggNjRlMzJkYS4uZmIyNjA3YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogICogICAxMSAgICAgICBQYWdlIHRyYW5zbGF0aW9uICAgICAtPiAgTm90IHByZXNlbnQgICAgICAgKG51bGxpZmljYXRpb24pCiAgKiAgIDNiICAgICAgIFJlZ2lvbiB0aGlyZCB0cmFucy4gIC0+ICBOb3QgcHJlc2VudCAgICAgICAobnVsbGlmaWNhdGlvbikKICAqLwotZXh0ZXJuIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBpbnQgaXNfcHJvdGVjdGlvbikKIHsKICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNmRjZTlkMC4uZmQ0ZjI0MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTEsMjggKzUxLDI0IEBACiAKIEVYUE9SVF9TWU1CT0woZW5hYmxlX2hsdCk7CiAKLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCit2b2lkIGNwdV9pZGxlKHZvaWQpCiB7CiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewogCQlpZiAoaGx0X2NvdW50ZXIpIHsKLQkJCXdoaWxlICgxKQotCQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCQkJYnJlYWs7CisJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCWNwdV9yZWxheCgpOwogCQl9IGVsc2UgewogCQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKIAkJCQljcHVfc2xlZXAoKTsKIAkJfQogCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCi12b2lkIGNwdV9pZGxlKHZvaWQpCi17Ci0JZGVmYXVsdF9pZGxlKCk7Ci19Ci0KIHZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKIHsKIAkvKiBTUi5CTD0xIGFuZCBpbnZva2UgYWRkcmVzcyBlcnJvciB0byBsZXQgQ1BVIHJlc2V0IChtYW51YWwgcmVzZXQpICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDVlY2VmYzAuLjU5ZTQ5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xMTIsNyArMTEyLDkgQEAKIAogaW50IHN0YXJ0X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07CkBAIC0xMjAsNiArMTIyLDcgQEAKIAlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKIAogCV9fc21wX3NsYXZlX2luaXQoY3B1KTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlwZXJfY3B1X3RyYXBfaW5pdCgpOwogCQogCWF0b21pY19pbmMoJmNwdXNfYm9vdGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zaDY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZWZkZTQxYy4uYjk1ZDA0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMwNywyMyArMzA3LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBobHQodm9pZCkKIHsKLQlpZiAoaGx0X2NvdW50ZXIpCi0JCXJldHVybjsKLQogCV9fYXNtX18gX192b2xhdGlsZV9fICgic2xlZXAiIDogOiA6ICJtZW1vcnkiKTsKIH0KIAogLyoKICAqIFRoZSBpZGxlIGxvb3Agb24gYSB1bmlwcm9jZXNzb3IgU0guLgogICovCi12b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQordm9pZCBjcHVfaWRsZSh2b2lkKQogewogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAJd2hpbGUgKDEpIHsKIAkJaWYgKGhsdF9jb3VudGVyKSB7Ci0JCQl3aGlsZSAoMSkKLQkJCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQkJCWJyZWFrOworCQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQljcHVfcmVsYXgoKTsKIAkJfSBlbHNlIHsKIAkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CkBAIC0zMzQsMTMgKzMzMCwxMSBAQAogCQkJfQogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQl9CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQotfQogCi12b2lkIGNwdV9pZGxlKHZvaWQpCi17Ci0JZGVmYXVsdF9pZGxlKCk7CiB9CiAKIHZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAyOWU3MmI1Li5lYTg2NDc0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC02NywxMyArNjcsNiBAQAogc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9tYXRoID0gTlVMTDsKIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF9zZXRbTlJfQ1BVU107CiAKLS8qCi0gKiBkZWZhdWx0X2lkbGUgaXMgbmV3IGluIDIuNS4gWFhYIFJldmlldywgY3VycmVudGx5IHN0b2xlbiBmcm9tIHNwYXJjNjQuCi0gKi8KLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCi17Ci19Ci0KICNpZm5kZWYgQ09ORklHX1NNUAogCiAjZGVmaW5lIFNVTjRDX0ZBVUxUX0hJR0ggMTAwCkBAIC05MiwxMiArODUsMTEgQEAKIAkJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGZwczsKIAkJCXVuc2lnbmVkIGxvbmcgbm93OwogCQkJdW5zaWduZWQgbG9uZyBmYXVsdHM7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCQlleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40Y19rZXJuZWxfZmF1bHRzOwogCQkJZXh0ZXJuIHZvaWQgc3VuNGNfZ3Jvd19rZXJuZWxfcmluZyh2b2lkKTsKIAotCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJCW5vdyA9IGppZmZpZXM7CiAJCQljb3VudCAtPSAobm93IC0gbGFzdF9qaWZmaWVzKTsKIAkJCWxhc3RfamlmZmllcyA9IG5vdzsKQEAgLTExMywxNCArMTA1LDE5IEBACiAJCQkJCXN1bjRjX2dyb3dfa2VybmVsX3JpbmcoKTsKIAkJCQl9CiAJCQl9Ci0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCX0KIAotCQl3aGlsZSgoIW5lZWRfcmVzY2hlZCgpKSAmJiBwbV9pZGxlKSB7Ci0JCQkoKnBtX2lkbGUpKCk7CisJCWlmIChwbV9pZGxlKSB7CisJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCSgqcG1faWRsZSkoKTsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQkJY3B1X3JlbGF4KCk7CiAJCX0KLQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCQljaGVja19wZ3RfY2FjaGUoKTsKIAl9CiB9CkBAIC0xMzAsMTMgKzEyNywxNSBAQAogLyogVGhpcyBpcyBiZWluZyBleGVjdXRlZCBpbiB0YXNrIDAgJ3VzZXIgc3BhY2UnLiAqLwogdm9pZCBjcHVfaWRsZSh2b2lkKQogeworICAgICAgICBzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlKDEpIHsKLQkJaWYobmVlZF9yZXNjaGVkKCkpIHsKLQkJCXNjaGVkdWxlKCk7Ci0JCQljaGVja19wZ3RfY2FjaGUoKTsKLQkJfQotCQliYXJyaWVyKCk7IC8qIG9yIGVsc2UgZ2NjIG9wdGltaXplcy4uLiAqLworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJY3B1X3JlbGF4KCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCWNoZWNrX3BndF9jYWNoZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb2N0bDMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvY3RsMzIuYwppbmRleCA5MmUyNjMwLi5jMmU5NmRhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvY3RsMzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvY3RsMzIuYwpAQCAtOTIsMTAgKzkyLDggQEAKIAlyZXR1cm4gc3lzX2lvY3RsIChmZCwgRkJJT1NDVVJTT1IsICh1bnNpZ25lZCBsb25nKXApOwogfQogCi10eXBlZGVmIGludCAoKiBpb2N0bDMyX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBmaWxlICopOwotCiAjZGVmaW5lIENPTVBBVElCTEVfSU9DVEwoY21kKQkJSEFORExFX0lPQ1RMKChjbWQpLHN5c19pb2N0bCkKLSNkZWZpbmUgSEFORExFX0lPQ1RMKGNtZCxoYW5kbGVyKQl7IChjbWQpLCAoaW9jdGwzMl9oYW5kbGVyX3QpKGhhbmRsZXIpLCBOVUxMIH0sCisjZGVmaW5lIEhBTkRMRV9JT0NUTChjbWQsaGFuZGxlcikJeyAoY21kKSwgKGlvY3RsX3RyYW5zX2hhbmRsZXJfdCkoaGFuZGxlciksIE5VTEwgfSwKICNkZWZpbmUgSU9DVExfVEFCTEVfU1RBUlQgXAogCXN0cnVjdCBpb2N0bF90cmFucyBpb2N0bF9zdGFydFtdID0gewogI2RlZmluZSBJT0NUTF9UQUJMRV9FTkQgXApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3ZDEwYjAzLi4wMmY5ZGVjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNzQsNyArNzQsOSBAQAogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJYmFycmllcigpOwogCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWNoZWNrX3BndF9jYWNoZSgpOwogCX0KIH0KQEAgLTgzLDIxICs4NSwzMSBAQAogCiAvKgogICogdGhlIGlkbGUgbG9vcCBvbiBhIFVsdHJhTXVsdGlQZW5ndWluLi4uCisgKgorICogVElGX1BPTExJTkdfTlJGTEFHIGlzIHNldCBiZWNhdXNlIHdlIGRvIG5vdCBzbGVlcCB0aGUgY3B1CisgKiBpbnNpZGUgb2YgdGhlIGlkbGVyIHRhc2ssIHNvIGFuIGludGVycnVwdCBpcyBub3QgbmVlZGVkCisgKiB0byBnZXQgYSBjbGVhbiBmYXN0IHJlc3BvbnNlLgorICoKKyAqIFhYWCBSZXZlcmlmeSB0aGlzIGFzc3VtcHRpb24uLi4gLURhdmVNCisgKgorICogQWRkZW5kdW06IFdlIGRvIHdhbnQgaXQgdG8gZG8gc29tZXRoaW5nIGZvciB0aGUgc2lnbmFsCisgKiAgICAgICAgICAgZGVsaXZlcnkgY2FzZSwgd2UgZGV0ZWN0IHRoYXQgYnkganVzdCBzZWVpbmcKKyAqICAgICAgICAgICBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHNlbmQgdGhpcyB0byBhbiBpZGxlciBvciBub3QuCiAgKi8KLSNkZWZpbmUgaWRsZV9tZV9oYXJkZXIoKQkoY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pZGxlX3ZvbHVtZSArPSAxKQotI2RlZmluZSB1bmlkbGVfbWUoKQkJKGNwdV9kYXRhKHNtcF9wcm9jZXNzb3JfaWQoKSkuaWRsZV92b2x1bWUgPSAwKQogdm9pZCBjcHVfaWRsZSh2b2lkKQogeworCWNwdWluZm9fc3BhcmMgKmNwdWluZm8gPSAmbG9jYWxfY3B1X2RhdGEoKTsKIAlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwogCXdoaWxlKDEpIHsKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQl1bmlkbGVfbWUoKTsKLQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCQljcHVpbmZvLT5pZGxlX3ZvbHVtZSA9IDA7CisJCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCQlzY2hlZHVsZSgpOwotCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJCWNoZWNrX3BndF9jYWNoZSgpOwogCQl9Ci0JCWlkbGVfbWVfaGFyZGVyKCk7CisJCWNwdWluZm8tPmlkbGVfdm9sdW1lKys7CiAKIAkJLyogVGhlIHN0b3JlIG9yZGVyaW5nIGlzIHNvIHRoYXQgSVJRIGhhbmRsZXJzIG9uCiAJCSAqIG90aGVyIGNwdXMgc2VlIG91ciBpbmNyZWFzaW5nIGlkbGVuZXNzIGZvciB0aGUgYnVkZHkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCmluZGV4IDVkOTBlZTkuLjc5N2E2NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpAQCAtMTY4LDYgKzE2OCw5IEBACiAJCXJtYigpOwogCiAJY3B1X3NldChjcHVpZCwgY3B1X29ubGluZV9tYXApOworCisJLyogaWRsZSB0aHJlYWQgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBwcmVlbXB0IGRpc2FibGVkICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CiB9CiAKIHZvaWQgY3B1X3BhbmljKHZvaWQpCkBAIC0xMTQ5LDIwICsxMTUyLDkgQEAKIAkgICAgICAgKGJvZ29zdW0vKDUwMDAvSFopKSUxMDApOwogfQogCi0vKiBUaGlzIG5lZWRuJ3QgZG8gYW55dGhpbmcgYXMgd2UgZG8gbm90IHNsZWVwIHRoZSBjcHUKLSAqIGluc2lkZSBvZiB0aGUgaWRsZXIgdGFzaywgc28gYW4gaW50ZXJydXB0IGlzIG5vdCBuZWVkZWQKLSAqIHRvIGdldCBhIGNsZWFuIGZhc3QgcmVzcG9uc2UuCi0gKgotICogWFhYIFJldmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4uLiAtRGF2ZU0KLSAqCi0gKiBBZGRlbmR1bTogV2UgZG8gd2FudCBpdCB0byBkbyBzb21ldGhpbmcgZm9yIHRoZSBzaWduYWwKLSAqICAgICAgICAgICBkZWxpdmVyeSBjYXNlLCB3ZSBkZXRlY3QgdGhhdCBieSBqdXN0IHNlZWluZwotICogICAgICAgICAgIGlmIHdlIGFyZSB0cnlpbmcgdG8gc2VuZCB0aGlzIHRvIGFuIGlkbGVyIG9yIG5vdC4KLSAqLwogdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCiB7Ci0JaWYgKGNwdV9kYXRhKGNwdSkuaWRsZV92b2x1bWUgPT0gMCkKLQkJc21wX3JlY2VpdmVfc2lnbmFsKGNwdSk7CisJc21wX3JlY2VpdmVfc2lnbmFsKGNwdSk7CiB9CiAKIC8qIFRoaXMgaXMgYSBub3AgYmVjYXVzZSB3ZSBjYXB0dXJlIGFsbCBvdGhlciBjcHVzCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCmluZGV4IGZlODY1ZDkuLjRjZjMxYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCkBAIC0yNDMsMzQgKzI0MywxOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdW1sX25ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHVtbF9uZXRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm8gPSB7Ci0JCS5jbWQgICAgID0gRVRIVE9PTF9HRFJWSU5GTywKLQkJLmRyaXZlciAgPSBEUklWRVJfTkFNRSwKLQkJLnZlcnNpb24gPSAiNDIiLAotCX07Ci0Jdm9pZCAqdXNlcmFkZHI7Ci0JdTMyIGV0aGNtZDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DRVRIVE9PTDoKLQkJdXNlcmFkZHIgPSBpZnItPmlmcl9kYXRhOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmV0aGNtZCwgdXNlcmFkZHIsIHNpemVvZihldGhjbWQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlzd2l0Y2ggKGV0aGNtZCkgewotCQljYXNlIEVUSFRPT0xfR0RSVklORk86Ci0JCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXN0cmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgIjQyIik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdW1sX25ldF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8JPSB1bWxfbmV0X2dldF9kcnZpbmZvLAorCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCiB2b2lkIHVtbF9uZXRfdXNlcl90aW1lcl9leHBpcmUodW5zaWduZWQgbG9uZyBfY29ubikKIHsKICNpZmRlZiB1bmRlZgpAQCAtMzU5LDcgKzM0Myw3IEBACiAJZGV2LT50eF90aW1lb3V0ID0gdW1sX25ldF90eF90aW1lb3V0OwogCWRldi0+c2V0X21hY19hZGRyZXNzID0gdW1sX25ldF9zZXRfbWFjOwogCWRldi0+Y2hhbmdlX210dSA9IHVtbF9uZXRfY2hhbmdlX210dTsKLQlkZXYtPmRvX2lvY3RsID0gdW1sX25ldF9pb2N0bDsKKwlkZXYtPmV0aHRvb2xfb3BzID0gJnVtbF9uZXRfZXRodG9vbF9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IChIWiA+PiAxKTsKIAlkZXYtPmlycSA9IFVNX0VUSF9JUlE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOWM3MDhjMy4uMzljZjI0NyAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM2LDExICszNiw4IEBACiAvKiBUaGUgaWRsZSBsb29wLiAgKi8KIHZvaWQgZGVmYXVsdF9pZGxlICh2b2lkKQogewotCXdoaWxlICgxKSB7Ci0JCXdoaWxlICghIG5lZWRfcmVzY2hlZCAoKSkKLQkJCWFzbSAoImhhbHQ7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wIiA6OjogImNjIik7Ci0JCXNjaGVkdWxlICgpOwotCX0KKwl3aGlsZSAoISBuZWVkX3Jlc2NoZWQgKCkpCisJCWFzbSAoImhhbHQ7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wIiA6OjogImNjIik7CiB9CiAKIHZvaWQgKCppZGxlKSh2b2lkKSA9IGRlZmF1bHRfaWRsZTsKQEAgLTU0LDcgKzUxLDE0IEBACiB2b2lkIGNwdV9pZGxlICh2b2lkKQogewogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCi0JKCppZGxlKSAoKTsKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJKCppZGxlKSAoKTsKKworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9pb2N0bC5jIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2lvY3RsLmMKaW5kZXggNGJhMGUyOS4uZTMzNWJkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2lvY3RsLmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2lvY3RsLmMKQEAgLTY0LDEyICs2NCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0X2lvY3RsLmg+CiAjZGVmaW5lIERFQ0xBUkVTCiAjaW5jbHVkZSAiY29tcGF0X2lvY3RsLmMiCi1DT01QQVRJQkxFX0lPQ1RMKEhESU9fU0VUX0tFRVBTRVRUSU5HUykKLUNPTVBBVElCTEVfSU9DVEwoSERJT19TQ0FOX0hXSUYpCi1DT01QQVRJQkxFX0lPQ1RMKEJMS1JBU0VUKQotQ09NUEFUSUJMRV9JT0NUTCgweDRCNTApICAgLyogS0RHSFdDTEsgLSBub3QgaW4gdGhlIGtlcm5lbCwgYnV0IGRvbid0IGNvbXBsYWluICovCi1DT01QQVRJQkxFX0lPQ1RMKDB4NEI1MSkgICAvKiBLRFNIV0NMSyAtIG5vdCBpbiB0aGUga2VybmVsLCBidXQgZG9uJ3QgY29tcGxhaW4gKi8KLUNPTVBBVElCTEVfSU9DVEwoRklPUVNJWkUpCiAKIC8qIEFuZCB0aGVzZSBpb2N0bHMgbmVlZCB0cmFuc2xhdGlvbiAqLwogLyogcmVhbHRpbWUgZGV2aWNlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiNWE4OWMwLi41OWJlODVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTg2LDEyICs4NiwyMiBAQAogICovCiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogeworCWxvY2FsX2lycV9lbmFibGUoKTsKKwogCWlmICghYXRvbWljX3JlYWQoJmhsdF9jb3VudGVyKSkgewotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQotCQkJc2FmZV9oYWx0KCk7Ci0JCWVsc2UKLQkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCQkJc2FmZV9oYWx0KCk7CisJCQllbHNlCisJCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQl9CisJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCX0gZWxzZSB7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQljcHVfcmVsYXgoKTsKIAl9CiB9CiAKQEAgLTEwMiwzMCArMTEyLDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvbGxfaWRsZSAodm9pZCkKIHsKLQlpbnQgb2xkdmFsOwotCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JLyoKLQkgKiBEZWFsIHdpdGggYW5vdGhlciBDUFUganVzdCBoYXZpbmcgY2hvc2VuIGEgdGhyZWFkIHRvCi0JICogcnVuIGhlcmU6Ci0JICovCi0Jb2xkdmFsID0gdGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCk7Ci0KLQlpZiAoIW9sZHZhbCkgewotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsgCi0JCWFzbSB2b2xhdGlsZSgKLQkJCSIyOiIKLQkJCSJ0ZXN0bCAlMCwlMTsiCi0JCQkicmVwOyBub3A7IgotCQkJImplIDJiOyIKLQkJCTogOgotCQkJImkiIChfVElGX05FRURfUkVTQ0hFRCksIAotCQkJIm0iIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzKSk7Ci0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JfSBlbHNlIHsKLQkJc2V0X25lZWRfcmVzY2hlZCgpOwotCX0KKwlhc20gdm9sYXRpbGUoCisJCSIyOiIKKwkJInRlc3RsICUwLCUxOyIKKwkJInJlcDsgbm9wOyIKKwkJImplIDJiOyIKKwkJOiA6CisJCSJpIiAoX1RJRl9ORUVEX1JFU0NIRUQpLAorCQkibSIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpKTsKIH0KIAogdm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpCkBAIC0xODcsNiArMTgzLDggQEAKICAqLwogdm9pZCBjcHVfaWRsZSAodm9pZCkKIHsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAJd2hpbGUgKDEpIHsKIAkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgewpAQCAtMjA0LDcgKzIwMiw5IEBACiAJCQlpZGxlKCk7CiAJCX0KIAorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApAQCAtMjE5LDE1ICsyMTksMTIgQEAKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7Ci0JCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCQlkbyB7Ci0JCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7Ci0JCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQkJYnJlYWs7Ci0JCQlfX213YWl0KDAsIDApOwotCQl9IHdoaWxlICghbmVlZF9yZXNjaGVkKCkpOwotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOworCQlzbXBfbWIoKTsKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQkJYnJlYWs7CisJCV9fbXdhaXQoMCwgMCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA0YjViMDg4Li5jNGU1OWJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKQEAgLTQ3Miw2ICs0NzIsNyBAQAogCSAqIHRoaW5ncyBkb25lIGhlcmUgdG8gdGhlIG1vc3QgbmVjZXNzYXJ5IHRoaW5ncy4KIAkgKi8KIAljcHVfaW5pdCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCXNtcF9jYWxsaW4oKTsKIAogCS8qIG90aGVyd2lzZSBnY2Mgd2lsbCBtb3ZlIHVwIHRoZSBzbXBfcHJvY2Vzc29yX2lkIGJlZm9yZSB0aGUgY3B1X2luaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDA4ZWY2ZDguLjZhNDRiNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwpAQCAtOTYsOCArOTYsOSBAQAogCXdoaWxlICgxKSB7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQlwbGF0Zm9ybV9pZGxlKCk7Ci0JCXByZWVtcHRfZW5hYmxlKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwppbmRleCAwNjgyZmZkLi45NmI5YmI0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKQEAgLTYxMSwzOCArNjExLDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpc3NfbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQotewotI2lmIDAKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvID0gewotCQkuY21kICAgICA9IEVUSFRPT0xfR0RSVklORk8sCi0JCS5kcml2ZXIgID0gRFJJVkVSX05BTUUsCi0JCS52ZXJzaW9uID0gIjQyIiwKLQl9OwotCXZvaWQgKnVzZXJhZGRyOwotCXUzMiBldGhjbWQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lPQ0VUSFRPT0w6Ci0JCXVzZXJhZGRyID0gaWZyLT5pZnJfZGF0YTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzd2l0Y2ggKGV0aGNtZCkgewotCQkJY2FzZSBFVEhUT09MX0dEUlZJTkZPOgotCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZpbmZvLCBzaXplb2YoaW5mbykpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gMDsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIHZvaWQgaXNzX25ldF91c2VyX3RpbWVyX2V4cGlyZSh1bnNpZ25lZCBsb25nIF9jb25uKQogewogfQpAQCAtNzMwLDcgKzY5OCw2IEBACiAJZGV2LT50eF90aW1lb3V0ID0gaXNzX25ldF90eF90aW1lb3V0OwogCWRldi0+c2V0X21hY19hZGRyZXNzID0gaXNzX25ldF9zZXRfbWFjOwogCWRldi0+Y2hhbmdlX210dSA9IGlzc19uZXRfY2hhbmdlX210dTsKLQlkZXYtPmRvX2lvY3RsID0gaXNzX25ldF9pb2N0bDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOwogCWRldi0+aXJxID0gLTE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggMTYxZGI0YS4uNTczYjZhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC0xNjcsNiArMTY3LDE5IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgdm9pZCBhY3BpX3NhZmVfaGFsdCh2b2lkKQoreworCWludCBwb2xsaW5nID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCWlmIChwb2xsaW5nKSB7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJfQorCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCXNhZmVfaGFsdCgpOworCWlmIChwb2xsaW5nKQorCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKK30KKwogc3RhdGljIGF0b21pY190IGMzX2NwdV9jb3VudDsKIAogc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3JfaWRsZSh2b2lkKQpAQCAtMTc3LDcgKzE5MCw3IEBACiAJaW50IHNsZWVwX3RpY2tzID0gMDsKIAl1MzIgdDEsIHQyID0gMDsKIAotCXByID0gcHJvY2Vzc29yc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlwciA9IHByb2Nlc3NvcnNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAoIXByKQogCQlyZXR1cm47CiAKQEAgLTE5Nyw4ICsyMTAsMTMgQEAKIAl9CiAKIAljeCA9IHByLT5wb3dlci5zdGF0ZTsKLQlpZiAoIWN4KQotCQlnb3RvIGVhc3lfb3V0OworCWlmICghY3gpIHsKKwkJaWYgKHBtX2lkbGVfc2F2ZSkKKwkJCXBtX2lkbGVfc2F2ZSgpOworCQllbHNlCisJCQlhY3BpX3NhZmVfaGFsdCgpOworCQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBDaGVjayBCTSBBY3Rpdml0eQpAQCAtMjc4LDcgKzI5Niw4IEBACiAJCWlmIChwbV9pZGxlX3NhdmUpCiAJCQlwbV9pZGxlX3NhdmUoKTsKIAkJZWxzZQotCQkJc2FmZV9oYWx0KCk7CisJCQlhY3BpX3NhZmVfaGFsdCgpOworCiAJCS8qCiAJCSAqIFRCRDogQ2FuJ3QgZ2V0IHRpbWUgZHVyYXRpb24gd2hpbGUgaW4gQzEsIGFzIHJlc3VtZXMKIAkJICogICAgICBnbyB0byBhbiBJU1IgcmF0aGVyIHRoYW4gaGVyZS4gIE5lZWQgdG8gaW5zdHJ1bWVudApAQCAtNDE0LDE2ICs0MzMsNiBAQAogCSAqLwogCWlmIChuZXh0X3N0YXRlICE9IHByLT5wb3dlci5zdGF0ZSkKIAkJYWNwaV9wcm9jZXNzb3JfcG93ZXJfYWN0aXZhdGUocHIsIG5leHRfc3RhdGUpOwotCi0JcmV0dXJuOwotCi0gICAgICBlYXN5X291dDoKLQkvKiBkbyBDMSBpbnN0ZWFkIG9mIGJ1c3kgbG9vcCAqLwotCWlmIChwbV9pZGxlX3NhdmUpCi0JCXBtX2lkbGVfc2F2ZSgpOwotCWVsc2UKLQkJc2FmZV9oYWx0KCk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3NldF9wb3dlcl9wb2xpY3koc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggMTQ2OGU4Yy4uMGFjYmZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTE4MTYsNyArMTgxNiw2IEBACiB9CiAKICNpZmRlZiBNT0RVTEUKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKIGludCBpbml0X21vZHVsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggNWVhZGJiOS4uMjgwMDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zNzE0LDYgKzM3MTQsMTIgQEAKIAkJVVNFVEYoRkRfVkVSSUZZKTsKIAl9CiAKKwkvKiBzZXQgdW5kZXJseWluZyBnZW5kaXNrIHBvbGljeSB0byByZWZsZWN0IHJlYWwgcm8vcncgc3RhdHVzICovCisJaWYgKFVURVNURihGRF9ESVNLX1dSSVRBQkxFKSkKKwkJaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cG9saWN5ID0gMDsKKwllbHNlCisJCWlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnBvbGljeSA9IDE7CisKIAlpZiAoVURSUy0+ZmRfcmVmID09IC0xIHx8IChVRFJTLT5mZF9yZWYgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpKSkKIAkJZ290byBvdXQyOwogCkBAIC0zNzcwLDggKzM3NzYsNyBAQAogCS8qIEFsbG93IGlvY3RscyBpZiB3ZSBoYXZlIHdyaXRlLXBlcm1pc3Npb25zIGV2ZW4gaWYgcmVhZC1vbmx5IG9wZW4uCiAJICogTmVlZGVkIHNvIHRoYXQgcHJvZ3JhbXMgc3VjaCBhcyBmZHJhd2NtZCBzdGlsbCBjYW4gd29yayBvbiB3cml0ZQogCSAqIHByb3RlY3RlZCBkaXNrcyAqLwotCWlmIChmaWxwLT5mX21vZGUgJiAyCi0JICAgIHx8IHBlcm1pc3Npb24oZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIDIsIE5VTEwpID09IDApCisJaWYgKChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgfHwgIWZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfV1JJVEUpKQogCQlmaWxwLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKTg7CiAKIAlpZiAoVUZEQ1MtPnJhd2NtZCA9PSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCBhMjgwZTY3Li41OWU1OTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtNTExLDE0ICs1MTEsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgcGt0X2lvc2NoZWRfcHJvY2Vzc19xdWV1ZShzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewotCXJlcXVlc3RfcXVldWVfdCAqcTsKIAogCWlmIChhdG9taWNfcmVhZCgmcGQtPmlvc2NoZWQuYXR0ZW50aW9uKSA9PSAwKQogCQlyZXR1cm47CiAJYXRvbWljX3NldCgmcGQtPmlvc2NoZWQuYXR0ZW50aW9uLCAwKTsKIAotCXEgPSBiZGV2X2dldF9xdWV1ZShwZC0+YmRldik7Ci0KIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAkJaW50IHJlYWRzX3F1ZXVlZCwgd3JpdGVzX3F1ZXVlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYyBiL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCA2ZDNmZWMxLi5lZmZmMGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCkBAIC0yMDMsMTAgKzIwMywxMCBAQAogCiAJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gQVRJX1BDSUdBUlRfUEFHRV9TSVpFKTsgaisrKSB7CiAJCQlpZiAoZ2FydF9pbmZvLT5pc19wY2llKQotCQkJCSpwY2lfZ2FydCA9IChjcHVfdG9fbGUzMihwYWdlX2Jhc2UpID4+IDgpIHwgMHhjOworCQkJCSpwY2lfZ2FydCA9IGNwdV90b19sZTMyKChwYWdlX2Jhc2UgPj4gOCkgfCAweGMpOwogCQkJZWxzZQogCQkJCSpwY2lfZ2FydCA9IGNwdV90b19sZTMyKHBhZ2VfYmFzZSk7Ci0JCQkqcGNpX2dhcnQrKzsKKwkJCXBjaV9nYXJ0Kys7CiAJCQlwYWdlX2Jhc2UgKz0gQVRJX1BDSUdBUlRfUEFHRV9TSVpFOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi5jIGIvZHJpdmVycy9jaGFyL2lwMi5jCmluZGV4IDZjZDEyZjIuLjdjYWRmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIuYworKysgYi9kcml2ZXJzL2NoYXIvaXAyLmMKQEAgLTcsNyArNyw2IEBACiAvLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9td2F2ZS90cDM3ODBpLmMgYi9kcml2ZXJzL2NoYXIvbXdhdmUvdHAzNzgwaS5jCmluZGV4IGQ2YzcyZTAuLmNjM2U1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9td2F2ZS90cDM3ODBpLmMKKysrIGIvZHJpdmVycy9jaGFyL213YXZlL3RwMzc4MGkuYwpAQCAtNDYsNyArNDYsNiBAQAogKglGaXJzdCByZWxlYXNlIHRvIHRoZSBwdWJsaWMKICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IDNiOTY1YTYuLjI2NDQ4ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC0zOCw3ICszOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCmluZGV4IDM1MjU0N2UuLjBiYmZjZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKQEAgLTkwLDcgKzkwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IGZlYjI1MTUuLjE0NTI3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAgICAgcmV0dXJuIG9wX3A7CiB9CiAKLXZvaWQgX19zeXNycV9wdXRfa2V5X29wIChpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKSB7CitzdGF0aWMgdm9pZCBfX3N5c3JxX3B1dF9rZXlfb3AgKGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3ApIHsKICAgICAgICAgaW50IGk7CiAKIAlpID0gc3lzcnFfa2V5X3RhYmxlX2tleTJpbmRleChrZXkpOwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJX19oYW5kbGVfc3lzcnEoa2V5LCBwdF9yZWdzLCB0dHksIDEpOwogfQogCi1pbnQgX19zeXNycV9zd2FwX2tleV9vcHMoaW50IGtleSwgc3RydWN0IHN5c3JxX2tleV9vcCAqaW5zZXJ0X29wX3AsCitzdGF0aWMgaW50IF9fc3lzcnFfc3dhcF9rZXlfb3BzKGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKmluc2VydF9vcF9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpyZW1vdmVfb3BfcCkgewogCiAJaW50IHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmggYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCmluZGV4IDk5YTYwNDkuLjkyOTNiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaApAQCAtMTksNyArMTksNiBAQAogICogCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYyBiL2RyaXZlcnMvY2hhci92aW9jb25zLmMKaW5kZXggOTg2MDFjNy4uNGQ3NWMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvY29ucy5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggODY3Y2M0ZS4uNjBhYWJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiBpc2VyaWVzL3Zpby5oCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDI1YWNmNDcuLjIzYTYzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMzgsNyArMzgsNiBAQAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX3BvbGljeQkqY3B1ZnJlcV9jcHVfZGF0YVtOUl9DUFVTXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3B1ZnJlcV9kcml2ZXJfbG9jayk7CiAKLQogLyogaW50ZXJuYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCk7CiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHZvaWQgKmRhdGEpOwpAQCAtMTExNSwyNCArMTExNCwyMSBAQAogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCiAJLyoKLQkgKiBDb252ZXJ0ZWQgdGhlIGxvY2tfY3B1X2hvdHBsdWcgdG8gcHJlZW1wdF9kaXNhYmxlKCkKLQkgKiBhbmQgcHJlZW1wdF9lbmFibGUoKS4gVGhpcyBpcyBhIGJpdCBrbHVkZ3kgYW5kIHJlbGllcyBvbiBob3cgY3B1Ci0JICogaG90cGx1ZyB3b3Jrcy4gQWxsIHdlIG5lZWQgaXMgYSBndWFyYW50ZWUgdGhhdCBjcHUgaG90cGx1ZyB3b24ndCBtYWtlCi0JICogcHJvZ3Jlc3Mgb24gYW55IGNwdS4gT25jZSB3ZSBkbyBwcmVlbXB0X2Rpc2FibGUoKSwgdGhpcyB3b3VsZCBlbnN1cmUKLQkgKiB0aGF0IGhvdHBsdWcgdGhyZWFkcyBkb24ndCBnZXQgb250byB0aGlzIGNwdSwgdGhlcmVieSBkZWxheWluZwotCSAqIHRoZSBjcHUgcmVtb3ZlIHByb2Nlc3MuCi0JICoKLQkgKiBXZSByZW1vdmVkIHRoZSBsb2NrX2NwdV9ob3RwbHVnIHNpbmNlIHdlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uCi0JICogdmlhIGNwdSBob3RwbHVnIGNhbGxiYWNrcywgd2hpY2ggcmVzdWx0IGluIGxvY2tpbmcgdGhlIGNwdSBob3RwbHVnCi0JICogdGhyZWFkIGl0c2VsZi4gQWdyZWUgdGhpcyBpcyBub3QgdmVyeSBjbGVhbiwgY3B1ZnJlcSBjb21tdW5pdHkKLQkgKiBjb3VsZCBpbXByb3ZlIHRoaXMgaWYgcmVxdWlyZWQuIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorCSAqIElmIHdlIGFyZSBhbHJlYWR5IGluIGNvbnRleHQgb2YgaG90cGx1ZyB0aHJlYWQsIHdlIGRvbnQgbmVlZCB0bworCSAqIGFjcXVpcmUgdGhlIGhvdHBsdWcgbG9jay4gT3RoZXJ3aXNlIGFjcXVpcmUgY3B1Y29udHJvbCB0byBwcmV2ZW50CisJICogaG90cGx1ZyBmcm9tIHJlbW92aW5nIHRoaXMgY3B1IHRoYXQgd2UgYXJlIHdvcmtpbmcgb24uCiAJICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKCFjdXJyZW50X2luX2NwdV9ob3RwbHVnKCkpCisJCWxvY2tfY3B1X2hvdHBsdWcoKTsKKwogCWRwcmludGsoInRhcmdldCBmb3IgQ1BVICV1OiAldSBrSHosIHJlbGF0aW9uICV1XG4iLCBwb2xpY3ktPmNwdSwKIAkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKIAlpZiAoY3B1X29ubGluZShwb2xpY3ktPmNwdSkgJiYgY3B1ZnJlcV9kcml2ZXItPnRhcmdldCkKIAkJcmV0dmFsID0gY3B1ZnJlcV9kcml2ZXItPnRhcmdldChwb2xpY3ksIHRhcmdldF9mcmVxLCByZWxhdGlvbik7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKworCWlmICghY3VycmVudF9pbl9jcHVfaG90cGx1ZygpKQorCQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMKaW5kZXggYmExNzI5Mi4uNmQ4MzI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kZWxsX3JidS5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYwpAQCAtMzQsNyArMzQsNiBAQAogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCmluZGV4IDI2ODdlMzQuLjMyMWEzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiAkSWQ6IGliX3NycC5jIDM5MzIgMjAwNS0xMS0wMSAxNzoxOToyOVogcm9sYW5kICQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggMDg3OTkxNS4uYzhhZTJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtNjY5LDcgKzY2OSw3IEBACiAJCUlOUFVUX0FERF9IT1RQTFVHX1ZBUigiTkFNRT1cIiVzXCIiLCBkZXYtPm5hbWUpOwogCWlmIChkZXYtPnBoeXMpCiAJCUlOUFVUX0FERF9IT1RQTFVHX1ZBUigiUEhZUz1cIiVzXCIiLCBkZXYtPnBoeXMpOwotCWlmIChkZXYtPnBoeXMpCisJaWYgKGRldi0+dW5pcSkKIAkJSU5QVVRfQUREX0hPVFBMVUdfVkFSKCJVTklRPVwiJXNcIiIsIGRldi0+dW5pcSk7CiAKIAlJTlBVVF9BRERfSE9UUExVR19CTV9WQVIoIkVWPSIsIGRldi0+ZXZiaXQsIEVWX01BWCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9pbml0LmMgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9pbml0LmMKaW5kZXggNDM0ZTY4NC4uMmY3YzlmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfaW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X2luaXQuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCmluZGV4IDBiMGVhMjYuLjFiMzdkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYwppbmRleCAwYmZkNjk4Li5mMWExZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMKKysrIGIvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2luY2x1ZGUgImlzZG5fZGl2ZXJ0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfZmNwY2lwbnAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jCmluZGV4IGI0ZDc5NWQuLmRjN2VmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBvIHR4X3NrYiBhdCBQSF9ERUFDVElWQVRFIHRpbWUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKaW5kZXggMmNmNWQxYS4uOGUxOTJhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYwppbmRleCAxZmQzZDRlLi5hY2MxZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCmluZGV4IDEyYzgxMzdiLi5jYjc5MWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCmluZGV4IGJhYmVjODEuLmFhMDE2MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA4N2Y1OWEwLi40MGU1NjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMTIsNyArMTIsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCmluZGV4IDRkNTcwMTEuLjZjMjZmMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwppbmRleCA4YTdkNTRhLi40NjQzZGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmggYi9kcml2ZXJzL2lzZG4vaWNuL2ljbi5oCmluZGV4IDkwMjhjYzMuLjdkNzI0NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmgKKysrIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uaApAQCAtMzUsNyArMzUsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIC8qIEtlcm5lbCBpbmNsdWRlcyAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmggYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuaAppbmRleCA4ZmI3YmMxLi5kNjk5ZmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuaAorKysgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuaApAQCAtMzMsNyArMzMsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIC8qIEtlcm5lbCBpbmNsdWRlcyAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmggYi9kcml2ZXJzL2lzZG4vc2MvaW5jbHVkZXMuaAppbmRleCA0NjExZGE2Li41Mjg2ZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vc2MvaW5jbHVkZXMuaAorKysgYi9kcml2ZXJzL2lzZG4vc2MvaW5jbHVkZXMuaApAQCAtNCw3ICs0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCAwMTY1NGZjLi41MTMxNTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI3Miw3ICsyNzEsOCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCUlURVJBVEVfUkRFVihtZGRldiwgcmRldiwgdG1wKSB7Ci0JCWlmICghIHJkZXYtPmluX3N5bmMgfHwgcmRldi0+ZmF1bHR5KQorCQlpZiAoISB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCisJCSAgICB8fCB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQljb250aW51ZTsKIAogCQl0YXJnZXQgPSAocmRldi0+c2Jfb2Zmc2V0IDw8IDEpICsgb2Zmc2V0ICsgaW5kZXggKiAoUEFHRV9TSVpFLzUxMik7CkBAIC0yOTIsNyArMjkyLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAKIAlJVEVSQVRFX1JERVYobWRkZXYsIHJkZXYsIHRtcCkKLQkJaWYgKHJkZXYtPmluX3N5bmMgJiYgIXJkZXYtPmZhdWx0eSkKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykKKwkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQltZF9zdXBlcl93cml0ZShtZGRldiwgcmRldiwKIAkJCQkgICAgICAgKHJkZXYtPnNiX29mZnNldDw8MSkgKyBvZmZzZXQKIAkJCQkgICAgICAgKyBwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUvNTEyKSwKQEAgLTMwMCw3ICszMDEsNyBAQAogCQkJCSAgICAgICBwYWdlKTsKIAogCWlmICh3YWl0KQotCQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LCBhdG9taWNfcmVhZCgmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCk7CisJCW1kX3N1cGVyX3dhaXQobWRkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC00ODEsNyArNDgyLDggQEAKIAkvKiB2ZXJpZnkgdGhhdCB0aGUgYml0bWFwLXNwZWNpZmljIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAlpZiAoc2ItPm1hZ2ljICE9IGNwdV90b19sZTMyKEJJVE1BUF9NQUdJQykpCiAJCXJlYXNvbiA9ICJiYWQgbWFnaWMiOwotCWVsc2UgaWYgKHNiLT52ZXJzaW9uICE9IGNwdV90b19sZTMyKEJJVE1BUF9NQUpPUikpCisJZWxzZSBpZiAobGUzMl90b19jcHUoc2ItPnZlcnNpb24pIDwgQklUTUFQX01BSk9SX0xPIHx8CisJCSBsZTMyX3RvX2NwdShzYi0+dmVyc2lvbikgPiBCSVRNQVBfTUFKT1JfSEkpCiAJCXJlYXNvbiA9ICJ1bnJlY29nbml6ZWQgc3VwZXJibG9jayB2ZXJzaW9uIjsKIAllbHNlIGlmIChjaHVua3NpemUgPCA1MTIgfHwgY2h1bmtzaXplID4gKDEwMjQgKiAxMDI0ICogNCkpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIG91dCBvZiByYW5nZSAoNTEyQiAtIDRNQikiOwpAQCAtNTI2LDYgKzUyOCw4IEBACiAJYml0bWFwLT5kYWVtb25fbGFzdHJ1biA9IGppZmZpZXM7CiAJYml0bWFwLT5tYXhfd3JpdGVfYmVoaW5kID0gd3JpdGVfYmVoaW5kOwogCWJpdG1hcC0+ZmxhZ3MgfD0gc2ItPnN0YXRlOworCWlmIChsZTMyX3RvX2NwdShzYi0+dmVyc2lvbikgPT0gQklUTUFQX01BSk9SX0hPU1RFTkRJQU4pCisJCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX0hPU1RFTkRJQU47CiAJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGxlNjRfdG9fY3B1KHNiLT5ldmVudHNfY2xlYXJlZCk7CiAJaWYgKHNiLT5zdGF0ZSAmIEJJVE1BUF9TVEFMRSkKIAkJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGJpdG1hcC0+bWRkZXYtPmV2ZW50czsKQEAgLTc2Myw3ICs3NjcsMTAgQEAKIAogIAkvKiBzZXQgdGhlIGJpdCAqLwogCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCXNldF9iaXQoYml0LCBrYWRkcik7CisJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfSE9TVEVORElBTikKKwkJc2V0X2JpdChiaXQsIGthZGRyKTsKKwllbHNlCisJCWV4dDJfc2V0X2JpdChiaXQsIGthZGRyKTsKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJUFJJTlRLKCJzZXQgZmlsZSBiaXQgJWx1IHBhZ2UgJWx1XG4iLCBiaXQsIHBhZ2UtPmluZGV4KTsKIApAQCAtODIxLDggKzgyOCw3IEBACiAJCQkJCSAgICB3YWtlX3VwX3Byb2Nlc3MoYml0bWFwLT53cml0ZWJhY2tfZGFlbW9uLT50c2spKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT53cml0ZV9sb2NrKTsKIAkJfSBlbHNlCi0JCQl3YWl0X2V2ZW50KGJpdG1hcC0+bWRkZXYtPnNiX3dhaXQsCi0JCQkJICAgYXRvbWljX3JlYWQoJmJpdG1hcC0+bWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCk7CisJCQltZF9zdXBlcl93YWl0KGJpdG1hcC0+bWRkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTg5MCw2ICs4OTYsNyBAQAogCW9sZGluZGV4ID0gfjBMOwogCiAJZm9yIChpID0gMDsgaSA8IGNodW5rczsgaSsrKSB7CisJCWludCBiOwogCQlpbmRleCA9IGZpbGVfcGFnZV9pbmRleChpKTsKIAkJYml0ID0gZmlsZV9wYWdlX29mZnNldChpKTsKIAkJaWYgKGluZGV4ICE9IG9sZGluZGV4KSB7IC8qIHRoaXMgaXMgYSBuZXcgcGFnZSwgcmVhZCBpdCBpbiAqLwpAQCAtOTM4LDcgKzk0NSwxMSBAQAogCiAJCQliaXRtYXAtPmZpbGVtYXBbYml0bWFwLT5maWxlX3BhZ2VzKytdID0gcGFnZTsKIAkJfQotCQlpZiAodGVzdF9iaXQoYml0LCBwYWdlX2FkZHJlc3MocGFnZSkpKSB7CisJCWlmIChiaXRtYXAtPmZsYWdzICYgQklUTUFQX0hPU1RFTkRJQU4pCisJCQliID0gdGVzdF9iaXQoYml0LCBwYWdlX2FkZHJlc3MocGFnZSkpOworCQllbHNlCisJCQliID0gZXh0Ml90ZXN0X2JpdChiaXQsIHBhZ2VfYWRkcmVzcyhwYWdlKSk7CisJCWlmIChiKSB7CiAJCQkvKiBpZiB0aGUgZGlzayBiaXQgaXMgc2V0LCBzZXQgdGhlIG1lbW9yeSBiaXQgKi8KIAkJCWJpdG1hcF9zZXRfbWVtb3J5X2JpdHMoYml0bWFwLCBpIDw8IENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCksCiAJCQkJCSAgICAgICAoKGkrMSkgPDwgKENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkpID49IHN0YXJ0KQpAQCAtMTA5Niw3ICsxMTA3LDEwIEBACiAJCQkJCQkgIC0xKTsKIAogCQkJCS8qIGNsZWFyIHRoZSBiaXQgKi8KLQkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChqKSwgcGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwkJCQlpZiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9IT1NURU5ESUFOKQorCQkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChqKSwgcGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwkJCQllbHNlCisJCQkJCWV4dDJfY2xlYXJfYml0KGZpbGVfcGFnZV9vZmZzZXQoaiksIHBhZ2VfYWRkcmVzcyhwYWdlKSk7CiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggOWVjZjUxZS4uYWRmOTYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMTMxLDYgKzEzMSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wczsKIAorc3RhdGljIGludCBzdGFydF9yZWFkb25seTsKKwogLyoKICAqIEVuYWJsZXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBleGlzdGluZyBtZCBhcnJheXMKICAqIGFsbF9tZGRldnNfbG9jayBwcm90ZWN0cyB0aGlzIGxpc3QuCkBAIC0xODEsNyArMTgzLDcgQEAKIAlpZiAoIW1kZGV2LT5yYWlkX2Rpc2tzICYmIGxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpIHsKIAkJbGlzdF9kZWwoJm1kZGV2LT5hbGxfbWRkZXZzKTsKIAkJYmxrX3B1dF9xdWV1ZShtZGRldi0+cXVldWUpOwotCQlrZnJlZShtZGRldik7CisJCWtvYmplY3RfdW5yZWdpc3RlcigmbWRkZXYtPmtvYmopOwogCX0KIAlzcGluX3VubG9jaygmYWxsX21kZGV2c19sb2NrKTsKIH0KQEAgLTMzMCwxOCArMzMyLDQ2IEBACiBzdGF0aWMgaW50IHN1cGVyX3dyaXR0ZW4oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQogewogCW1ka19yZGV2X3QgKnJkZXYgPSBiaW8tPmJpX3ByaXZhdGU7CisJbWRkZXZfdCAqbWRkZXYgPSByZGV2LT5tZGRldjsKIAlpZiAoYmlvLT5iaV9zaXplKQogCQlyZXR1cm4gMTsKIAogCWlmIChlcnJvciB8fCAhdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykpCi0JCW1kX2Vycm9yKHJkZXYtPm1kZGV2LCByZGV2KTsKKwkJbWRfZXJyb3IobWRkZXYsIHJkZXYpOwogCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJkZXYtPm1kZGV2LT5wZW5kaW5nX3dyaXRlcykpCi0JCXdha2VfdXAoJnJkZXYtPm1kZGV2LT5zYl93YWl0KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKSkKKwkJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOwogCWJpb19wdXQoYmlvKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdXBlcl93cml0dGVuX2JhcnJpZXIoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQoreworCXN0cnVjdCBiaW8gKmJpbzIgPSBiaW8tPmJpX3ByaXZhdGU7CisJbWRrX3JkZXZfdCAqcmRldiA9IGJpbzItPmJpX3ByaXZhdGU7CisJbWRkZXZfdCAqbWRkZXYgPSByZGV2LT5tZGRldjsKKwlpZiAoYmlvLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKworCWlmICghdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykgJiYKKwkgICAgZXJyb3IgPT0gLUVPUE5PVFNVUFApIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJLyogYmFycmllcnMgZG9uJ3QgYXBwZWFyIHRvIGJlIHN1cHBvcnRlZCA6LSggKi8KKwkJc2V0X2JpdChCYXJyaWVyc05vdHN1cHAsICZyZGV2LT5mbGFncyk7CisJCW1kZGV2LT5iYXJyaWVyc193b3JrID0gMDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1kZGV2LT53cml0ZV9sb2NrLCBmbGFncyk7CisJCWJpbzItPmJpX25leHQgPSBtZGRldi0+YmlvbGlzdDsKKwkJbWRkZXYtPmJpb2xpc3QgPSBiaW8yOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZGRldi0+d3JpdGVfbG9jaywgZmxhZ3MpOworCQl3YWtlX3VwKCZtZGRldi0+c2Jfd2FpdCk7CisJCWJpb19wdXQoYmlvKTsKKwkJcmV0dXJuIDA7CisJfQorCWJpb19wdXQoYmlvMik7CisJYmlvLT5iaV9wcml2YXRlID0gcmRldjsKKwlyZXR1cm4gc3VwZXJfd3JpdHRlbihiaW8sIGJ5dGVzX2RvbmUsIGVycm9yKTsKK30KKwogdm9pZCBtZF9zdXBlcl93cml0ZShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldiwKIAkJICAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0zNTAsMTYgKzM4MCw1NCBAQAogCSAqIGFuZCBkZWNyZW1lbnQgaXQgb24gY29tcGxldGlvbiwgd2FraW5nIHVwIHNiX3dhaXQKIAkgKiBpZiB6ZXJvIGlzIHJlYWNoZWQuCiAJICogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGNhbGwgbWRfZXJyb3IKKwkgKgorCSAqIEFzIHdlIG1pZ2h0IG5lZWQgdG8gcmVzdWJtaXQgdGhlIHJlcXVlc3QgaWYgQklPX1JXX0JBUlJJRVIKKwkgKiBjYXVzZXMgRU5PVFNVUFAsIHdlIGFsbG9jYXRlIGEgc3BhcmUgYmlvLi4uCiAJICovCiAJc3RydWN0IGJpbyAqYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCAxKTsKKwlpbnQgcncgPSAoMTw8QklPX1JXKSB8ICgxPDxCSU9fUldfU1lOQyk7CiAKIAliaW8tPmJpX2JkZXYgPSByZGV2LT5iZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwogCWJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHNpemUsIDApOwogCWJpby0+YmlfcHJpdmF0ZSA9IHJkZXY7CiAJYmlvLT5iaV9lbmRfaW8gPSBzdXBlcl93cml0dGVuOworCWJpby0+YmlfcncgPSBydzsKKwogCWF0b21pY19pbmMoJm1kZGV2LT5wZW5kaW5nX3dyaXRlcyk7Ci0Jc3VibWl0X2JpbygoMTw8QklPX1JXKXwoMTw8QklPX1JXX1NZTkMpLCBiaW8pOworCWlmICghdGVzdF9iaXQoQmFycmllcnNOb3RzdXBwLCAmcmRldi0+ZmxhZ3MpKSB7CisJCXN0cnVjdCBiaW8gKnJiaW87CisJCXJ3IHw9ICgxPDxCSU9fUldfQkFSUklFUik7CisJCXJiaW8gPSBiaW9fY2xvbmUoYmlvLCBHRlBfTk9JTyk7CisJCXJiaW8tPmJpX3ByaXZhdGUgPSBiaW87CisJCXJiaW8tPmJpX2VuZF9pbyA9IHN1cGVyX3dyaXR0ZW5fYmFycmllcjsKKwkJc3VibWl0X2JpbyhydywgcmJpbyk7CisJfSBlbHNlCisJCXN1Ym1pdF9iaW8ocncsIGJpbyk7Cit9CisKK3ZvaWQgbWRfc3VwZXJfd2FpdChtZGRldl90ICptZGRldikKK3sKKwkvKiB3YWl0IGZvciBhbGwgc3VwZXJibG9jayB3cml0ZXMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB0byBjb21wbGV0ZS4KKwkgKiBpZiBhbnkgaGFkIHRvIGJlIHJldHJpZWQgKGR1ZSB0byBCQVJSSUVSIHByb2JsZW1zKSwgcmV0cnkgdGhlbQorCSAqLworCURFRklORV9XQUlUKHdxKTsKKwlmb3IoOzspIHsKKwkJcHJlcGFyZV90b193YWl0KCZtZGRldi0+c2Jfd2FpdCwgJndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmIChhdG9taWNfcmVhZCgmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCkKKwkJCWJyZWFrOworCQl3aGlsZSAobWRkZXYtPmJpb2xpc3QpIHsKKwkJCXN0cnVjdCBiaW8gKmJpbzsKKwkJCXNwaW5fbG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJCWJpbyA9IG1kZGV2LT5iaW9saXN0OworCQkJbWRkZXYtPmJpb2xpc3QgPSBiaW8tPmJpX25leHQgOworCQkJYmlvLT5iaV9uZXh0ID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOworCQkJc3VibWl0X2JpbyhiaW8tPmJpX3J3LCBiaW8pOworCQl9CisJCXNjaGVkdWxlKCk7CisJfQorCWZpbmlzaF93YWl0KCZtZGRldi0+c2Jfd2FpdCwgJndxKTsKIH0KIAogc3RhdGljIGludCBiaV9jb21wbGV0ZShzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBieXRlc19kb25lLCBpbnQgZXJyb3IpCkBAIC02MTAsNyArNjc4LDcgQEAKIAltZHBfc3VwZXJfdCAqc2IgPSAobWRwX3N1cGVyX3QgKilwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSk7CiAKIAlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKLQlyZGV2LT5pbl9zeW5jID0gMDsKKwlyZGV2LT5mbGFncyA9IDA7CiAJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzID09IDApIHsKIAkJbWRkZXYtPm1ham9yX3ZlcnNpb24gPSAwOwogCQltZGRldi0+bWlub3JfdmVyc2lvbiA9IHNiLT5taW5vcl92ZXJzaW9uOwpAQCAtNjcxLDIxICs3MzksMTkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAobWRkZXYtPmxldmVsICE9IExFVkVMX01VTFRJUEFUSCkgewotCQlyZGV2LT5mYXVsdHkgPSAwOwotCQlyZGV2LT5mbGFncyA9IDA7CiAJCWRlc2MgPSBzYi0+ZGlza3MgKyByZGV2LT5kZXNjX25yOwogCiAJCWlmIChkZXNjLT5zdGF0ZSAmICgxPDxNRF9ESVNLX0ZBVUxUWSkpCi0JCQlyZGV2LT5mYXVsdHkgPSAxOworCQkJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CiAJCWVsc2UgaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfU1lOQykgJiYKIAkJCSBkZXNjLT5yYWlkX2Rpc2sgPCBtZGRldi0+cmFpZF9kaXNrcykgewotCQkJcmRldi0+aW5fc3luYyA9IDE7CisJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBkZXNjLT5yYWlkX2Rpc2s7CiAJCX0KIAkJaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfV1JJVEVNT1NUTFkpKQogCQkJc2V0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKIAl9IGVsc2UgLyogTVVMVElQQVRIIGFyZSBhbHdheXMgaW5zeW5jICovCi0JCXJkZXYtPmluX3N5bmMgPSAxOworCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5OSw2ICs3NjUsNyBAQAogCW1ka19yZGV2X3QgKnJkZXYyOwogCWludCBuZXh0X3NwYXJlID0gbWRkZXYtPnJhaWRfZGlza3M7CiAKKwogCS8qIG1ha2UgcmRldi0+c2IgbWF0Y2ggbWRkZXYgZGF0YS4uCiAJICoKIAkgKiAxLyB6ZXJvIG91dCBkaXNrcwpAQCAtNzU4LDIzICs4MjUsMjcgQEAKIAlzYi0+ZGlza3NbMF0uc3RhdGUgPSAoMTw8TURfRElTS19SRU1PVkVEKTsKIAlJVEVSQVRFX1JERVYobWRkZXYscmRldjIsdG1wKSB7CiAJCW1kcF9kaXNrX3QgKmQ7Ci0JCWlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDAgJiYgcmRldjItPmluX3N5bmMgJiYgIXJkZXYyLT5mYXVsdHkpCi0JCQlyZGV2Mi0+ZGVzY19uciA9IHJkZXYyLT5yYWlkX2Rpc2s7CisJCWludCBkZXNjX25yOworCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKKwkJCWRlc2NfbnIgPSByZGV2Mi0+cmFpZF9kaXNrOwogCQllbHNlCi0JCQlyZGV2Mi0+ZGVzY19uciA9IG5leHRfc3BhcmUrKzsKKwkJCWRlc2NfbnIgPSBuZXh0X3NwYXJlKys7CisJCXJkZXYyLT5kZXNjX25yID0gZGVzY19ucjsKIAkJZCA9ICZzYi0+ZGlza3NbcmRldjItPmRlc2NfbnJdOwogCQlucl9kaXNrcysrOwogCQlkLT5udW1iZXIgPSByZGV2Mi0+ZGVzY19ucjsKIAkJZC0+bWFqb3IgPSBNQUpPUihyZGV2Mi0+YmRldi0+YmRfZGV2KTsKIAkJZC0+bWlub3IgPSBNSU5PUihyZGV2Mi0+YmRldi0+YmRfZGV2KTsKLQkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJiByZGV2LT5pbl9zeW5jICYmICFyZGV2Mi0+ZmF1bHR5KQorCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKIAkJCWQtPnJhaWRfZGlzayA9IHJkZXYyLT5yYWlkX2Rpc2s7CiAJCWVsc2UKIAkJCWQtPnJhaWRfZGlzayA9IHJkZXYyLT5kZXNjX25yOyAvKiBjb21wYXRpYmlsaXR5ICovCi0JCWlmIChyZGV2Mi0+ZmF1bHR5KSB7CisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKSB7CiAJCQlkLT5zdGF0ZSA9ICgxPDxNRF9ESVNLX0ZBVUxUWSk7CiAJCQlmYWlsZWQrKzsKLQkJfSBlbHNlIGlmIChyZGV2Mi0+aW5fc3luYykgeworCQl9IGVsc2UgaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpKSB7CiAJCQlkLT5zdGF0ZSA9ICgxPDxNRF9ESVNLX0FDVElWRSk7CiAJCQlkLT5zdGF0ZSB8PSAoMTw8TURfRElTS19TWU5DKTsKIAkJCWFjdGl2ZSsrOwpAQCAtNzg3LDcgKzg1OCw2IEBACiAJCWlmICh0ZXN0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYyLT5mbGFncykpCiAJCQlkLT5zdGF0ZSB8PSAoMTw8TURfRElTS19XUklURU1PU1RMWSk7CiAJfQotCQogCS8qIG5vdyBzZXQgdGhlICJyZW1vdmVkIiBhbmQgImZhdWx0eSIgYml0cyBvbiBhbnkgbWlzc2luZyBkZXZpY2VzICovCiAJZm9yIChpPTAgOyBpIDwgbWRkZXYtPnJhaWRfZGlza3MgOyBpKyspIHsKIAkJbWRwX2Rpc2tfdCAqZCA9ICZzYi0+ZGlza3NbaV07CkBAIC05NDQsNyArMTAxNCw3IEBACiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gKHN0cnVjdCBtZHBfc3VwZXJibG9ja18xKilwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSk7CiAKIAlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKLQlyZGV2LT5pbl9zeW5jID0gMDsKKwlyZGV2LT5mbGFncyA9IDA7CiAJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzID09IDApIHsKIAkJbWRkZXYtPm1ham9yX3ZlcnNpb24gPSAxOwogCQltZGRldi0+cGF0Y2hfdmVyc2lvbiA9IDA7CkBAIC05OTYsMjIgKzEwNjYsMTkgQEAKIAkJcm9sZSA9IGxlMTZfdG9fY3B1KHNiLT5kZXZfcm9sZXNbcmRldi0+ZGVzY19ucl0pOwogCQlzd2l0Y2gocm9sZSkgewogCQljYXNlIDB4ZmZmZjogLyogc3BhcmUgKi8KLQkJCXJkZXYtPmZhdWx0eSA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSAweGZmZmU6IC8qIGZhdWx0eSAqLwotCQkJcmRldi0+ZmF1bHR5ID0gMTsKKwkJCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZGV2LT5pbl9zeW5jID0gMTsKLQkJCXJkZXYtPmZhdWx0eSA9IDA7CisJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSByb2xlOwogCQkJYnJlYWs7CiAJCX0KLQkJcmRldi0+ZmxhZ3MgPSAwOwogCQlpZiAoc2ItPmRldmZsYWdzICYgV3JpdGVNb3N0bHkxKQogCQkJc2V0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKIAl9IGVsc2UgLyogTVVMVElQQVRIIGFyZSBhbHdheXMgaW5zeW5jICovCi0JCXJkZXYtPmluX3N5bmMgPSAxOworCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNTUsOSArMTEyMiw5IEBACiAJCiAJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYyLHRtcCkgewogCQlpID0gcmRldjItPmRlc2NfbnI7Ci0JCWlmIChyZGV2Mi0+ZmF1bHR5KQorCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKIAkJCXNiLT5kZXZfcm9sZXNbaV0gPSBjcHVfdG9fbGUxNigweGZmZmUpOwotCQllbHNlIGlmIChyZGV2Mi0+aW5fc3luYykKKwkJZWxzZSBpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncykpCiAJCQlzYi0+ZGV2X3JvbGVzW2ldID0gY3B1X3RvX2xlMTYocmRldjItPnJhaWRfZGlzayk7CiAJCWVsc2UKIAkJCXNiLT5kZXZfcm9sZXNbaV0gPSBjcHVfdG9fbGUxNigweGZmZmYpOwpAQCAtMTExNSw2ICsxMTgyLDcgQEAKIHsKIAltZGtfcmRldl90ICpzYW1lX3BkZXY7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdLCBiMltCREVWTkFNRV9TSVpFXTsKKwlzdHJ1Y3Qga29iamVjdCAqa287CiAKIAlpZiAocmRldi0+bWRkZXYpIHsKIAkJTURfQlVHKCk7CkBAIC0xMTQzLDEwICsxMjExLDIyIEBACiAJCWlmIChmaW5kX3JkZXZfbnIobWRkZXYsIHJkZXYtPmRlc2NfbnIpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CisJYmRldm5hbWUocmRldi0+YmRldixiKTsKKwlpZiAoa29iamVjdF9zZXRfbmFtZSgmcmRldi0+a29iaiwgImRldi0lcyIsIGIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJCQkKIAlsaXN0X2FkZCgmcmRldi0+c2FtZV9zZXQsICZtZGRldi0+ZGlza3MpOwogCXJkZXYtPm1kZGV2ID0gbWRkZXY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWQ6IGJpbmQ8JXM+XG4iLCBiZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZDogYmluZDwlcz5cbiIsIGIpOworCisJcmRldi0+a29iai5wYXJlbnQgPSAmbWRkZXYtPmtvYmo7CisJa29iamVjdF9hZGQoJnJkZXYtPmtvYmopOworCisJaWYgKHJkZXYtPmJkZXYtPmJkX3BhcnQpCisJCWtvID0gJnJkZXYtPmJkZXYtPmJkX3BhcnQtPmtvYmo7CisJZWxzZQorCQlrbyA9ICZyZGV2LT5iZGV2LT5iZF9kaXNrLT5rb2JqOworCXN5c2ZzX2NyZWF0ZV9saW5rKCZyZGV2LT5rb2JqLCBrbywgImJsb2NrIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjAsNiArMTI0MCw4IEBACiAJbGlzdF9kZWxfaW5pdCgmcmRldi0+c2FtZV9zZXQpOwogCXByaW50ayhLRVJOX0lORk8gIm1kOiB1bmJpbmQ8JXM+XG4iLCBiZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsKIAlyZGV2LT5tZGRldiA9IE5VTEw7CisJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPmtvYmosICJibG9jayIpOworCWtvYmplY3RfZGVsKCZyZGV2LT5rb2JqKTsKIH0KIAogLyoKQEAgLTEyMTUsNyArMTI5Nyw3IEBACiAJbWRfYXV0b2RldGVjdF9kZXYocmRldi0+YmRldi0+YmRfZGV2KTsKICNlbmRpZgogCXVubG9ja19yZGV2KHJkZXYpOwotCWtmcmVlKHJkZXYpOworCWtvYmplY3RfcHV0KCZyZGV2LT5rb2JqKTsKIH0KIAogc3RhdGljIHZvaWQga2lja19yZGV2X2Zyb21fYXJyYXkobWRrX3JkZXZfdCAqIHJkZXYpCkBAIC0xMjg3LDcgKzEzNjksOCBAQAogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAlwcmludGsoS0VSTl9JTkZPICJtZDogcmRldiAlcywgU1o6JTA4bGx1IEY6JWQgUzolZCBETjoldVxuIiwKIAkJYmRldm5hbWUocmRldi0+YmRldixiKSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zaXplLAotCSAgICAgICAJcmRldi0+ZmF1bHR5LCByZGV2LT5pbl9zeW5jLCByZGV2LT5kZXNjX25yKTsKKwkgICAgICAgIHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSwgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSwKKwkgICAgICAgIHJkZXYtPmRlc2NfbnIpOwogCWlmIChyZGV2LT5zYl9sb2FkZWQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IHJkZXYgc3VwZXJibG9jazpcbiIpOwogCQlwcmludF9zYigobWRwX3N1cGVyX3QqKXBhZ2VfYWRkcmVzcyhyZGV2LT5zYl9wYWdlKSk7CkBAIC0xMzQ0LDcgKzE0MjcsNyBAQAogCWludCBzeW5jX3JlcTsKIAogcmVwZWF0OgotCXNwaW5fbG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAlzeW5jX3JlcSA9IG1kZGV2LT5pbl9zeW5jOwogCW1kZGV2LT51dGltZSA9IGdldF9zZWNvbmRzKCk7CiAJbWRkZXYtPmV2ZW50cyArKzsKQEAgLTEzNjcsMTEgKzE0NTAsMTEgQEAKIAkgKi8KIAlpZiAoIW1kZGV2LT5wZXJzaXN0ZW50KSB7CiAJCW1kZGV2LT5zYl9kaXJ0eSA9IDA7Ci0JCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOwogCQl3YWtlX3VwKCZtZGRldi0+c2Jfd2FpdCk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAogCWRwcmludGsoS0VSTl9JTkZPIAogCQkibWQ6IHVwZGF0aW5nICVzIFJBSUQgc3VwZXJibG9jayBvbiBkZXZpY2UgKGluIHN5bmMgJWQpXG4iLApAQCAtMTM4MSwxMSArMTQ2NCwxMSBAQAogCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAJCWRwcmludGsoS0VSTl9JTkZPICJtZDogIik7Ci0JCWlmIChyZGV2LT5mYXVsdHkpCisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQlkcHJpbnRrKCIoc2tpcHBpbmcgZmF1bHR5ICIpOwogCiAJCWRwcmludGsoIiVzICIsIGJkZXZuYW1lKHJkZXYtPmJkZXYsYikpOwotCQlpZiAoIXJkZXYtPmZhdWx0eSkgeworCQlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJbWRfc3VwZXJfd3JpdGUobWRkZXYscmRldiwKIAkJCQkgICAgICAgcmRldi0+c2Jfb2Zmc2V0PDwxLCByZGV2LT5zYl9zaXplLAogCQkJCSAgICAgICByZGV2LT5zYl9wYWdlKTsKQEAgLTEzOTksMjEgKzE0ODIsMTA2IEBACiAJCQkvKiBvbmx5IG5lZWQgdG8gd3JpdGUgb25lIHN1cGVyYmxvY2suLi4gKi8KIAkJCWJyZWFrOwogCX0KLQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LCBhdG9taWNfcmVhZCgmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCk7CisJbWRfc3VwZXJfd2FpdChtZGRldik7CiAJLyogaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSwgc2JfZGlydHkgd2FzIHNldCB0byAxLCBhbmQgd2UgcmUtd3JpdGUgc3VwZXIgKi8KIAotCXNwaW5fbG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAlpZiAobWRkZXYtPmluX3N5bmMgIT0gc3luY19yZXF8fCBtZGRldi0+c2JfZGlydHkgPT0gMSkgewogCQkvKiBoYXZlIHRvIHdyaXRlIGl0IG91dCBhZ2FpbiAqLwotCQlzcGluX3VubG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJZ290byByZXBlYXQ7CiAJfQogCW1kZGV2LT5zYl9kaXJ0eSA9IDA7Ci0Jc3Bpbl91bmxvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAl3YWtlX3VwKCZtZGRldi0+c2Jfd2FpdCk7CiAKIH0KIAorc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykobWRrX3JkZXZfdCAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkobWRrX3JkZXZfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCitzdGF0aWMgc3NpemVfdAorc3RhdGVfc2hvdyhtZGtfcmRldl90ICpyZGV2LCBjaGFyICpwYWdlKQoreworCWNoYXIgKnNlcCA9ICIiOworCWludCBsZW49MDsKKworCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJbGVuKz0gc3ByaW50ZihwYWdlK2xlbiwgIiVzZmF1bHR5IixzZXApOworCQlzZXAgPSAiLCI7CisJfQorCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJXNpbl9zeW5jIixzZXApOworCQlzZXAgPSAiLCI7CisJfQorCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJXNzcGFyZSIsIHNlcCk7CisJCXNlcCA9ICIsIjsKKwl9CisJcmV0dXJuIGxlbitzcHJpbnRmKHBhZ2UrbGVuLCAiXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5CityZGV2X3N0YXRlID0gX19BVFRSX1JPKHN0YXRlKTsKKworc3RhdGljIHNzaXplX3QKK3N1cGVyX3Nob3cobWRrX3JkZXZfdCAqcmRldiwgY2hhciAqcGFnZSkKK3sKKwlpZiAocmRldi0+c2JfbG9hZGVkICYmIHJkZXYtPnNiX3NpemUpIHsKKwkJbWVtY3B5KHBhZ2UsIHBhZ2VfYWRkcmVzcyhyZGV2LT5zYl9wYWdlKSwgcmRldi0+c2Jfc2l6ZSk7CisJCXJldHVybiByZGV2LT5zYl9zaXplOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KK3N0YXRpYyBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSByZGV2X3N1cGVyID0gX19BVFRSX1JPKHN1cGVyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJkZXZfZGVmYXVsdF9hdHRyc1tdID0geworCSZyZGV2X3N0YXRlLmF0dHIsCisJJnJkZXZfc3VwZXIuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBzc2l6ZV90CityZGV2X2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOworCW1ka19yZGV2X3QgKnJkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgbWRrX3JkZXZfdCwga29iaik7CisKKwlpZiAoIWVudHJ5LT5zaG93KQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gZW50cnktPnNob3cocmRldiwgcGFnZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZGV2X2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOworCW1ka19yZGV2X3QgKnJkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgbWRrX3JkZXZfdCwga29iaik7CisKKwlpZiAoIWVudHJ5LT5zdG9yZSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIGVudHJ5LT5zdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCByZGV2X2ZyZWUoc3RydWN0IGtvYmplY3QgKmtvKQoreworCW1ka19yZGV2X3QgKnJkZXYgPSBjb250YWluZXJfb2Yoa28sIG1ka19yZGV2X3QsIGtvYmopOworCWtmcmVlKHJkZXYpOworfQorc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgcmRldl9zeXNmc19vcHMgPSB7CisJLnNob3cJCT0gcmRldl9hdHRyX3Nob3csCisJLnN0b3JlCQk9IHJkZXZfYXR0cl9zdG9yZSwKK307CitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSByZGV2X2t0eXBlID0geworCS5yZWxlYXNlCT0gcmRldl9mcmVlLAorCS5zeXNmc19vcHMJPSAmcmRldl9zeXNmc19vcHMsCisJLmRlZmF1bHRfYXR0cnMJPSByZGV2X2RlZmF1bHRfYXR0cnMsCit9OworCiAvKgogICogSW1wb3J0IGEgZGV2aWNlLiBJZiAnc3VwZXJfZm9ybWF0JyA+PSAwLCB0aGVuIHNhbml0eSBjaGVjayB0aGUgc3VwZXJibG9jawogICoKQEAgLTE0NDUsMTEgKzE2MTMsMTUgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGFib3J0X2ZyZWU7CiAKKwlyZGV2LT5rb2JqLnBhcmVudCA9IE5VTEw7CisJcmRldi0+a29iai5rdHlwZSA9ICZyZGV2X2t0eXBlOworCWtvYmplY3RfaW5pdCgmcmRldi0+a29iaik7CisKIAlyZGV2LT5kZXNjX25yID0gLTE7Ci0JcmRldi0+ZmF1bHR5ID0gMDsKLQlyZGV2LT5pbl9zeW5jID0gMDsKKwlyZGV2LT5mbGFncyA9IDA7CiAJcmRldi0+ZGF0YV9vZmZzZXQgPSAwOwogCWF0b21pY19zZXQoJnJkZXYtPm5yX3BlbmRpbmcsIDApOworCWF0b21pY19zZXQoJnJkZXYtPnJlYWRfZXJyb3JzLCAwKTsKIAogCXNpemUgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IEJMT0NLX1NJWkVfQklUUzsKIAlpZiAoIXNpemUpIHsKQEAgLTE1MzcsNyArMTcwOSw3IEBACiAJCWlmIChtZGRldi0+bGV2ZWwgPT0gTEVWRUxfTVVMVElQQVRIKSB7CiAJCQlyZGV2LT5kZXNjX25yID0gaSsrOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcmRldi0+ZGVzY19ucjsKLQkJCXJkZXYtPmluX3N5bmMgPSAxOworCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQl9CiAJfQogCkBAIC0xNTUxLDYgKzE3MjMsMTYyIEBACiAKIH0KIAorc3RhdGljIHNzaXplX3QKK2xldmVsX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCit7CisJbWRrX3BlcnNvbmFsaXR5X3QgKnAgPSBtZGRldi0+cGVyczsKKwlpZiAocCA9PSBOVUxMICYmIG1kZGV2LT5yYWlkX2Rpc2tzID09IDApCisJCXJldHVybiAwOworCWlmIChtZGRldi0+bGV2ZWwgPj0gMCkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIlJBSUQtJWRcbiIsIG1kZGV2LT5sZXZlbCk7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHAtPm5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX2xldmVsID0gX19BVFRSX1JPKGxldmVsKTsKKworc3RhdGljIHNzaXplX3QKK3JhaWRfZGlza3Nfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBtZGRldi0+cmFpZF9kaXNrcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfcmFpZF9kaXNrcyA9IF9fQVRUUl9STyhyYWlkX2Rpc2tzKTsKKworc3RhdGljIHNzaXplX3QKK2FjdGlvbl9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCWNoYXIgKnR5cGUgPSAiaWRsZSI7CisJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpIHx8CisJICAgIHRlc3RfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKKwkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKSB7CisJCQlpZiAoIXRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpCisJCQkJdHlwZSA9ICJyZXN5bmMiOworCQkJZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssICZtZGRldi0+cmVjb3ZlcnkpKQorCQkJCXR5cGUgPSAiY2hlY2siOworCQkJZWxzZQorCQkJCXR5cGUgPSAicmVwYWlyIjsKKwkJfSBlbHNlCisJCQl0eXBlID0gInJlY292ZXIiOworCX0KKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHR5cGUpOworfQorCitzdGF0aWMgc3NpemVfdAorYWN0aW9uX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQoreworCWlmICghbWRkZXYtPnBlcnMgfHwgIW1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcChwYWdlLCAiaWRsZSIpPT0wIHx8IHN0cmNtcChwYWdlLCAiaWRsZVxuIik9PTApIHsKKwkJaWYgKG1kZGV2LT5zeW5jX3RocmVhZCkgeworCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7CisJCQltZGRldi0+c3luY190aHJlYWQgPSBOVUxMOworCQkJbWRkZXYtPnJlY292ZXJ5ID0gMDsKKwkJfQorCQlyZXR1cm4gbGVuOworCX0KKworCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmbWRkZXYtPnJlY292ZXJ5KSB8fAorCSAgICB0ZXN0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpKQorCQlyZXR1cm4gLUVCVVNZOworCWlmIChzdHJjbXAocGFnZSwgInJlc3luYyIpPT0wIHx8IHN0cmNtcChwYWdlLCAicmVzeW5jXG4iKT09MCB8fAorCSAgICBzdHJjbXAocGFnZSwgInJlY292ZXIiKT09MCB8fCBzdHJjbXAocGFnZSwgInJlY292ZXJcbiIpPT0wKQorCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJZWxzZSB7CisJCWlmIChzdHJjbXAocGFnZSwgImNoZWNrIik9PTAgfHwgc3RyY21wKHBhZ2UsICJjaGVja1xuIik9PTApCisJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJZWxzZSBpZiAoc3RyY21wKHBhZ2UsICJyZXBhaXIiKSE9MCAmJiBzdHJjbXAocGFnZSwgInJlcGFpclxuIikhPTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpOworCQlzZXRfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOworCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJfQorCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QKK21pc21hdGNoX2NudF9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWRkZXYtPnJlc3luY19taXNtYXRjaGVzKTsKK30KKworc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeQorbWRfc2Nhbl9tb2RlID0gX19BVFRSKHN5bmNfYWN0aW9uLCBTX0lSVUdPfFNfSVdVU1IsIGFjdGlvbl9zaG93LCBhY3Rpb25fc3RvcmUpOworCisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkKK21kX21pc21hdGNoZXMgPSBfX0FUVFJfUk8obWlzbWF0Y2hfY250KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kX2RlZmF1bHRfYXR0cnNbXSA9IHsKKwkmbWRfbGV2ZWwuYXR0ciwKKwkmbWRfcmFpZF9kaXNrcy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWRfcmVkdW5kYW5jeV9hdHRyc1tdID0geworCSZtZF9zY2FuX21vZGUuYXR0ciwKKwkmbWRfbWlzbWF0Y2hlcy5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRfcmVkdW5kYW5jeV9ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gbWRfcmVkdW5kYW5jeV9hdHRycywKK307CisKKworc3RhdGljIHNzaXplX3QKK21kX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBtZF9zeXNmc19lbnRyeSwgYXR0cik7CisJbWRkZXZfdCAqbWRkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IG1kZGV2X3MsIGtvYmopOworCXNzaXplX3QgcnY7CisKKwlpZiAoIWVudHJ5LT5zaG93KQorCQlyZXR1cm4gLUVJTzsKKwltZGRldl9sb2NrKG1kZGV2KTsKKwlydiA9IGVudHJ5LT5zaG93KG1kZGV2LCBwYWdlKTsKKwltZGRldl91bmxvY2sobWRkZXYpOworCXJldHVybiBydjsKK30KKworc3RhdGljIHNzaXplX3QKK21kX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBtZF9zeXNmc19lbnRyeSwgYXR0cik7CisJbWRkZXZfdCAqbWRkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IG1kZGV2X3MsIGtvYmopOworCXNzaXplX3QgcnY7CisKKwlpZiAoIWVudHJ5LT5zdG9yZSkKKwkJcmV0dXJuIC1FSU87CisJbWRkZXZfbG9jayhtZGRldik7CisJcnYgPSBlbnRyeS0+c3RvcmUobWRkZXYsIHBhZ2UsIGxlbmd0aCk7CisJbWRkZXZfdW5sb2NrKG1kZGV2KTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyB2b2lkIG1kX2ZyZWUoc3RydWN0IGtvYmplY3QgKmtvKQoreworCW1kZGV2X3QgKm1kZGV2ID0gY29udGFpbmVyX29mKGtvLCBtZGRldl90LCBrb2JqKTsKKwlrZnJlZShtZGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIG1kX3N5c2ZzX29wcyA9IHsKKwkuc2hvdwk9IG1kX2F0dHJfc2hvdywKKwkuc3RvcmUJPSBtZF9hdHRyX3N0b3JlLAorfTsKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIG1kX2t0eXBlID0geworCS5yZWxlYXNlCT0gbWRfZnJlZSwKKwkuc3lzZnNfb3BzCT0gJm1kX3N5c2ZzX29wcywKKwkuZGVmYXVsdF9hdHRycwk9IG1kX2RlZmF1bHRfYXR0cnMsCit9OworCiBpbnQgbWRwX21ham9yID0gMDsKIAogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICptZF9wcm9iZShkZXZfdCBkZXYsIGludCAqcGFydCwgdm9pZCAqZGF0YSkKQEAgLTE1OTIsNiArMTkyMCwxMSBAQAogCWFkZF9kaXNrKGRpc2spOwogCW1kZGV2LT5nZW5kaXNrID0gZGlzazsKIAl1cCgmZGlza3Nfc2VtKTsKKwltZGRldi0+a29iai5wYXJlbnQgPSAmZGlzay0+a29iajsKKwltZGRldi0+a29iai5rX25hbWUgPSBOVUxMOworCXNucHJpbnRmKG1kZGV2LT5rb2JqLm5hbWUsIEtPQkpfTkFNRV9MRU4sICIlcyIsICJtZCIpOworCW1kZGV2LT5rb2JqLmt0eXBlID0gJm1kX2t0eXBlOworCWtvYmplY3RfcmVnaXN0ZXIoJm1kZGV2LT5rb2JqKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTY2Myw3ICsxOTk2LDcgQEAKIAogCQkvKiBkZXZpY2VzIG11c3QgaGF2ZSBtaW5pbXVtIHNpemUgb2Ygb25lIGNodW5rICovCiAJCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkgewotCQkJaWYgKHJkZXYtPmZhdWx0eSkKKwkJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQkJY29udGludWU7CiAJCQlpZiAocmRldi0+c2l6ZSA8IGNodW5rX3NpemUgLyAxMDI0KSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTY5MSw3ICsyMDI0LDcgQEAKIAkgKiBBbHNvIGZpbmQgbGFyZ2VzdCBoYXJkc2VjdG9yIHNpemUKIAkgKi8KIAlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsKLQkJaWYgKHJkZXYtPmZhdWx0eSkKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCQlzeW5jX2Jsb2NrZGV2KHJkZXYtPmJkZXYpOwogCQlpbnZhbGlkYXRlX2JkZXYocmRldi0+YmRldiwgMCk7CkBAIC0xNzE1LDYgKzIwNDgsMTAgQEAKIAogCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5zaXplIDw8IDE7IC8qIG1heSBiZSBvdmVyLXJpZGRlbiBieSBwZXJzb25hbGl0eSAqLworCW1kZGV2LT5iYXJyaWVyc193b3JrID0gMTsKKworCWlmIChzdGFydF9yZWFkb25seSkKKwkJbWRkZXYtPnJvID0gMjsgLyogcmVhZC1vbmx5LCBidXQgc3dpdGNoIG9uIGZpcnN0IHdyaXRlICovCiAKIAkvKiBiZWZvcmUgd2Ugc3RhcnQgdGhlIGFycmF5IHJ1bm5pbmcsIGluaXRpYWxpc2UgdGhlIGJpdG1hcCAqLwogCWVyciA9IGJpdG1hcF9jcmVhdGUobWRkZXYpOwpAQCAtMTczMCwxMiArMjA2NywyNCBAQAogCQliaXRtYXBfZGVzdHJveShtZGRldik7CiAJCXJldHVybiBlcnI7CiAJfQorCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KQorCQlzeXNmc19jcmVhdGVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfcmVkdW5kYW5jeV9ncm91cCk7CisJZWxzZSBpZiAobWRkZXYtPnJvID09IDIpIC8qIGF1dG8tcmVhZG9ubHkgbm90IG1lYW5pbmdmdWwgKi8KKwkJbWRkZXYtPnJvID0gMDsKKwogIAlhdG9taWNfc2V0KCZtZGRldi0+d3JpdGVzX3BlbmRpbmcsMCk7CiAJbWRkZXYtPnNhZmVtb2RlID0gMDsKIAltZGRldi0+c2FmZW1vZGVfdGltZXIuZnVuY3Rpb24gPSBtZF9zYWZlbW9kZV90aW1lb3V0OwogCW1kZGV2LT5zYWZlbW9kZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIG1kZGV2OwogCW1kZGV2LT5zYWZlbW9kZV9kZWxheSA9ICgyMCAqIEhaKS8xMDAwICsxOyAvKiAyMCBtc2VjIGRlbGF5ICovCiAJbWRkZXYtPmluX3N5bmMgPSAxOworCisJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKQorCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDApIHsKKwkJCWNoYXIgbm1bMjBdOworCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLCAmcmRldi0+a29iaiwgbm0pOworCQl9CiAJCiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CkBAIC0xODIxLDE2ICsyMTcwLDE5IEBACiAKIAkJaWYgKHJvKSB7CiAJCQllcnIgID0gLUVOWElPOwotCQkJaWYgKG1kZGV2LT5ybykKKwkJCWlmIChtZGRldi0+cm89PTEpCiAJCQkJZ290byBvdXQ7CiAJCQltZGRldi0+cm8gPSAxOwogCQl9IGVsc2UgewogCQkJYml0bWFwX2ZsdXNoKG1kZGV2KTsKLQkJCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsIGF0b21pY19yZWFkKCZtZGRldi0+cGVuZGluZ193cml0ZXMpPT0wKTsKKwkJCW1kX3N1cGVyX3dhaXQobWRkZXYpOwogCQkJaWYgKG1kZGV2LT5ybykKIAkJCQlzZXRfZGlza19ybyhkaXNrLCAwKTsKIAkJCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QobWRkZXYtPnF1ZXVlLCBtZF9mYWlsX3JlcXVlc3QpOwogCQkJbWRkZXYtPnBlcnMtPnN0b3AobWRkZXYpOworCQkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpCisJCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtZGRldi0+a29iaiwgJm1kX3JlZHVuZGFuY3lfZ3JvdXApOworCiAJCQltb2R1bGVfcHV0KG1kZGV2LT5wZXJzLT5vd25lcik7CiAJCQltZGRldi0+cGVycyA9IE5VTEw7CiAJCQlpZiAobWRkZXYtPnJvKQpAQCAtMTg1Nyw5ICsyMjA5LDE4IEBACiAJICogRnJlZSByZXNvdXJjZXMgaWYgZmluYWwgc3RvcAogCSAqLwogCWlmICghcm8pIHsKKwkJbWRrX3JkZXZfdCAqcmRldjsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6ICVzIHN0b3BwZWQuXG4iLCBtZG5hbWUobWRkZXYpKTsKIAorCQlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApCisJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDApIHsKKwkJCQljaGFyIG5tWzIwXTsKKwkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CisJCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJm1kZGV2LT5rb2JqLCBubSk7CisJCQl9CisKIAkJZXhwb3J0X2FycmF5KG1kZGV2KTsKIAogCQltZGRldi0+YXJyYXlfc2l6ZSA9IDA7CkBAIC0yMDEyLDcgKzIzNzMsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChzdGFydF9yZGV2LT5mYXVsdHkpIHsKKwlpZiAodGVzdF9iaXQoRmF1bHR5LCAmc3RhcnRfcmRldi0+ZmxhZ3MpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkibWQ6IGNhbiBub3QgYXV0b3N0YXJ0IGJhc2VkIG9uIGZhdWx0eSAlcyFcbiIsCiAJCQliZGV2bmFtZShzdGFydF9yZGV2LT5iZGV2LGIpKTsKQEAgLTIwNzEsMTEgKzI0MzIsMTEgQEAKIAlucj13b3JraW5nPWFjdGl2ZT1mYWlsZWQ9c3BhcmU9MDsKIAlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsKIAkJbnIrKzsKLQkJaWYgKHJkZXYtPmZhdWx0eSkKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWZhaWxlZCsrOwogCQllbHNlIHsKIAkJCXdvcmtpbmcrKzsKLQkJCWlmIChyZGV2LT5pbl9zeW5jKQorCQkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQkJYWN0aXZlKys7CQogCQkJZWxzZQogCQkJCXNwYXJlKys7CkBAIC0yMTY2LDkgKzI1MjcsOSBAQAogCQlpbmZvLm1pbm9yID0gTUlOT1IocmRldi0+YmRldi0+YmRfZGV2KTsKIAkJaW5mby5yYWlkX2Rpc2sgPSByZGV2LT5yYWlkX2Rpc2s7CiAJCWluZm8uc3RhdGUgPSAwOwotCQlpZiAocmRldi0+ZmF1bHR5KQorCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJaW5mby5zdGF0ZSB8PSAoMTw8TURfRElTS19GQVVMVFkpOwotCQllbHNlIGlmIChyZGV2LT5pbl9zeW5jKSB7CisJCWVsc2UgaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCWluZm8uc3RhdGUgfD0gKDE8PE1EX0RJU0tfQUNUSVZFKTsKIAkJCWluZm8uc3RhdGUgfD0gKDE8PE1EX0RJU0tfU1lOQyk7CiAJCX0KQEAgLTIyNjEsNyArMjYyMiw3IEBACiAJCQkJdmFsaWRhdGVfc3VwZXIobWRkZXYsIHJkZXYpOwogCQlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSByZGV2LT5yYWlkX2Rpc2s7CiAKLQkJcmRldi0+aW5fc3luYyA9IDA7IC8qIGp1c3QgdG8gYmUgc3VyZSAqLworCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsgLyoganVzdCB0byBiZSBzdXJlICovCiAJCWlmIChpbmZvLT5zdGF0ZSAmICgxPDxNRF9ESVNLX1dSSVRFTU9TVExZKSkKIAkJCXNldF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7CiAKQEAgLTIyOTksMTEgKzI2NjAsMTEgQEAKIAkJZWxzZQogCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CiAKLQkJcmRldi0+ZmF1bHR5ID0gMDsKKwkJcmRldi0+ZmxhZ3MgPSAwOworCiAJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCBtZGRldi0+cmFpZF9kaXNrcykKLQkJCXJkZXYtPmluX3N5bmMgPSAoaW5mby0+c3RhdGUgJiAoMTw8TURfRElTS19TWU5DKSk7Ci0JCWVsc2UKLQkJCXJkZXYtPmluX3N5bmMgPSAwOworCQkJaWYgKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfU1lOQykpCisJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCiAJCWlmIChpbmZvLT5zdGF0ZSAmICgxPDxNRF9ESVNLX1dSSVRFTU9TVExZKSkKIAkJCXNldF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7CkBAIC0yNDAyLDE0ICsyNzYzLDE0IEBACiAJCWdvdG8gYWJvcnRfZXhwb3J0OwogCX0KIAotCWlmIChyZGV2LT5mYXVsdHkpIHsKKwlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkibWQ6IGNhbiBub3QgaG90LWFkZCBmYXVsdHkgJXMgZGlzayB0byAlcyFcbiIsCiAJCQliZGV2bmFtZShyZGV2LT5iZGV2LGIpLCBtZG5hbWUobWRkZXYpKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBhYm9ydF9leHBvcnQ7CiAJfQotCXJkZXYtPmluX3N5bmMgPSAwOworCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCXJkZXYtPmRlc2NfbnIgPSAtMTsKIAliaW5kX3JkZXZfdG9fYXJyYXkocmRldiwgbWRkZXYpOwogCkBAIC0yOTI5LDEyICszMjkwLDIyIEBACiAKIAkvKgogCSAqIFRoZSByZW1haW5pbmcgaW9jdGxzIGFyZSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlCi0JICogc3VwZXJibG9jaywgc28gd2UgZG8gbm90IGFsbG93IHJlYWQtb25seSBhcnJheXMKLQkgKiBoZXJlOgorCSAqIHN1cGVyYmxvY2ssIHNvIHdlIGRvIG5vdCBhbGxvdyB0aGVtIG9uIHJlYWQtb25seSBhcnJheXMuCisJICogSG93ZXZlciBub24tTUQgaW9jdGxzIChlLmcuIGdldC1zaXplKSB3aWxsIHN0aWxsIGNvbWUgdGhyb3VnaAorCSAqIGhlcmUgYW5kIGhpdCB0aGUgJ2RlZmF1bHQnIGJlbG93LCBzbyBvbmx5IGRpc2FsbG93CisJICogJ21kJyBpb2N0bHMsIGFuZCBzd2l0Y2ggdG8gcncgbW9kZSBpZiBzdGFydGVkIGF1dG8tcmVhZG9ubHkuCiAJICovCi0JaWYgKG1kZGV2LT5ybykgewotCQllcnIgPSAtRVJPRlM7Ci0JCWdvdG8gYWJvcnRfdW5sb2NrOworCWlmIChfSU9DX1RZUEUoY21kKSA9PSBNRF9NQUpPUiAmJgorCSAgICBtZGRldi0+cm8gJiYgbWRkZXYtPnBlcnMpIHsKKwkJaWYgKG1kZGV2LT5ybyA9PSAyKSB7CisJCQltZGRldi0+cm8gPSAwOworCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisKKwkJfSBlbHNlIHsKKwkJCWVyciA9IC1FUk9GUzsKKwkJCWdvdG8gYWJvcnRfdW5sb2NrOworCQl9CiAJfQogCiAJc3dpdGNoIChjbWQpCkBAIC0zMDY0LDIxICszNDM1LDE3IEBACiAJICovCiAKIAlhbGxvd19zaWduYWwoU0lHS0lMTCk7Ci0JY29tcGxldGUodGhyZWFkLT5ldmVudCk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJdm9pZCAoKnJ1bikobWRkZXZfdCAqKTsKIAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh0aHJlYWQtPndxdWV1ZSwKLQkJCQkJCSB0ZXN0X2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncykKLQkJCQkJCSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksCi0JCQkJCQkgdGhyZWFkLT50aW1lb3V0KTsKKwkJd2FpdF9ldmVudF90aW1lb3V0KHRocmVhZC0+d3F1ZXVlLAorCQkJCSAgIHRlc3RfYml0KFRIUkVBRF9XQUtFVVAsICZ0aHJlYWQtPmZsYWdzKQorCQkJCSAgIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSwKKwkJCQkgICB0aHJlYWQtPnRpbWVvdXQpOwogCQl0cnlfdG9fZnJlZXplKCk7CiAKIAkJY2xlYXJfYml0KFRIUkVBRF9XQUtFVVAsICZ0aHJlYWQtPmZsYWdzKTsKIAotCQlydW4gPSB0aHJlYWQtPnJ1bjsKLQkJaWYgKHJ1bikKLQkJCXJ1bih0aHJlYWQtPm1kZGV2KTsKKwkJdGhyZWFkLT5ydW4odGhyZWFkLT5tZGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMDk3LDcgKzM0NjQsNiBAQAogCQkJCSBjb25zdCBjaGFyICpuYW1lKQogewogCW1ka190aHJlYWRfdCAqdGhyZWFkOwotCXN0cnVjdCBjb21wbGV0aW9uIGV2ZW50OwogCiAJdGhyZWFkID0ga21hbGxvYyhzaXplb2YobWRrX3RocmVhZF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0aHJlYWQpCkBAIC0zMTA2LDE4ICszNDcyLDE0IEBACiAJbWVtc2V0KHRocmVhZCwgMCwgc2l6ZW9mKG1ka190aHJlYWRfdCkpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRocmVhZC0+d3F1ZXVlKTsKIAotCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCXRocmVhZC0+ZXZlbnQgPSAmZXZlbnQ7CiAJdGhyZWFkLT5ydW4gPSBydW47CiAJdGhyZWFkLT5tZGRldiA9IG1kZGV2OwotCXRocmVhZC0+bmFtZSA9IG5hbWU7CiAJdGhyZWFkLT50aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CiAJdGhyZWFkLT50c2sgPSBrdGhyZWFkX3J1bihtZF90aHJlYWQsIHRocmVhZCwgbmFtZSwgbWRuYW1lKHRocmVhZC0+bWRkZXYpKTsKIAlpZiAoSVNfRVJSKHRocmVhZC0+dHNrKSkgewogCQlrZnJlZSh0aHJlYWQpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmZXZlbnQpOwogCXJldHVybiB0aHJlYWQ7CiB9CiAKQEAgLTMxMzYsNyArMzQ5OCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIXJkZXYgfHwgcmRldi0+ZmF1bHR5KQorCWlmICghcmRldiB8fCB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCXJldHVybjsKIC8qCiAJZHByaW50aygibWRfZXJyb3IgZGV2OiVzLCByZGV2OiglZDolZCksIChjYWxsZXI6ICVwLCVwLCVwLCVwKS5cbiIsCkBAIC0zMzIyLDggKzM2ODQsMTAgQEAKIAkJc2VxX3ByaW50ZihzZXEsICIlcyA6ICVzYWN0aXZlIiwgbWRuYW1lKG1kZGV2KSwKIAkJCQkJCW1kZGV2LT5wZXJzID8gIiIgOiAiaW4iKTsKIAkJaWYgKG1kZGV2LT5wZXJzKSB7Ci0JCQlpZiAobWRkZXYtPnJvKQorCQkJaWYgKG1kZGV2LT5ybz09MSkKIAkJCQlzZXFfcHJpbnRmKHNlcSwgIiAocmVhZC1vbmx5KSIpOworCQkJaWYgKG1kZGV2LT5ybz09MikKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIihhdXRvLXJlYWQtb25seSkiKTsKIAkJCXNlcV9wcmludGYoc2VxLCAiICVzIiwgbWRkZXYtPnBlcnMtPm5hbWUpOwogCQl9CiAKQEAgLTMzMzQsNyArMzY5OCw3IEBACiAJCQkJYmRldm5hbWUocmRldi0+YmRldixiKSwgcmRldi0+ZGVzY19ucik7CiAJCQlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncykpCiAJCQkJc2VxX3ByaW50ZihzZXEsICIoVykiKTsKLQkJCWlmIChyZGV2LT5mYXVsdHkpIHsKKwkJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCQlzZXFfcHJpbnRmKHNlcSwgIihGKSIpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwKQpAQCAtMzM2MywxMSArMzcyNywxNSBAQAogCQlpZiAobWRkZXYtPnBlcnMpIHsKIAkJCW1kZGV2LT5wZXJzLT5zdGF0dXMgKHNlcSwgbWRkZXYpOwogCSAJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAiKTsKLQkJCWlmIChtZGRldi0+Y3Vycl9yZXN5bmMgPiAyKSB7Ci0JCQkJc3RhdHVzX3Jlc3luYyAoc2VxLCBtZGRldik7Ci0JCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICIpOwotCQkJfSBlbHNlIGlmIChtZGRldi0+Y3Vycl9yZXN5bmMgPT0gMSB8fCBtZGRldi0+Y3Vycl9yZXN5bmMgPT0gMikKLQkJCQlzZXFfcHJpbnRmKHNlcSwgIglyZXN5bmM9REVMQVlFRFxuICAgICAgIik7CisJCQlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkgeworCQkJCWlmIChtZGRldi0+Y3Vycl9yZXN5bmMgPiAyKSB7CisJCQkJCXN0YXR1c19yZXN5bmMgKHNlcSwgbWRkZXYpOworCQkJCQlzZXFfcHJpbnRmKHNlcSwgIlxuICAgICAgIik7CisJCQkJfSBlbHNlIGlmIChtZGRldi0+Y3Vycl9yZXN5bmMgPT0gMSB8fCBtZGRldi0+Y3Vycl9yZXN5bmMgPT0gMikKKwkJCQkJc2VxX3ByaW50ZihzZXEsICJcdHJlc3luYz1ERUxBWUVEXG4gICAgICAiKTsKKwkJCQllbHNlIGlmIChtZGRldi0+cmVjb3ZlcnlfY3AgPCBNYXhTZWN0b3IpCisJCQkJCXNlcV9wcmludGYoc2VxLCAiXHRyZXN5bmM9UEVORElOR1xuICAgICAgIik7CisJCQl9CiAJCX0gZWxzZQogCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICAiKTsKIApAQCAtMzUwNCwxNSArMzg3MiwyMiBAQAogCWlmIChiaW9fZGF0YV9kaXIoYmkpICE9IFdSSVRFKQogCQlyZXR1cm47CiAKKwlCVUdfT04obWRkZXYtPnJvID09IDEpOworCWlmIChtZGRldi0+cm8gPT0gMikgeworCQkvKiBuZWVkIHRvIHN3aXRjaCB0byByZWFkL3dyaXRlICovCisJCW1kZGV2LT5ybyA9IDA7CisJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwl9CiAJYXRvbWljX2luYygmbWRkZXYtPndyaXRlc19wZW5kaW5nKTsKIAlpZiAobWRkZXYtPmluX3N5bmMpIHsKLQkJc3Bpbl9sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJaWYgKG1kZGV2LT5pbl9zeW5jKSB7CiAJCQltZGRldi0+aW5fc3luYyA9IDA7CiAJCQltZGRldi0+c2JfZGlydHkgPSAxOwogCQkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJfQotCQlzcGluX3VubG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAl9CiAJd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgbWRkZXYtPnNiX2RpcnR5PT0wKTsKIH0KQEAgLTM1NjgsOSArMzk0Myw3IEBACiAJCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDI7CiAKIAl0cnlfYWdhaW46Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fAotCQkgICAga3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJZ290byBza2lwOwogCQl9CkBAIC0zNTkwLDkgKzM5NjMsOCBAQAogCQkJCQkgKiB0aW1lICdyb3VuZCB3aGVuIGN1cnJfcmVzeW5jID09IDIKIAkJCQkJICovCiAJCQkJCWNvbnRpbnVlOwotCQkJCXByZXBhcmVfdG9fd2FpdCgmcmVzeW5jX3dhaXQsICZ3cSwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmCi0JCQkJICAgICFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJnJlc3luY193YWl0LCAmd3EsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCQlpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgogCQkJCSAgICBtZGRldjItPmN1cnJfcmVzeW5jID49IG1kZGV2LT5jdXJyX3Jlc3luYykgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJtZDogZGVsYXlpbmcgcmVzeW5jIG9mICVzIgogCQkJCQkgICAgICAgIiB1bnRpbCAlcyBoYXMgZmluaXNoZWQgcmVzeW5jICh0aGV5IgpAQCAtMzYwOCwxMiArMzk4MCwxMyBAQAogCQl9CiAJfSB3aGlsZSAobWRkZXYtPmN1cnJfcmVzeW5jIDwgMik7CiAKLQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpCisJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKSB7CiAJCS8qIHJlc3luYyBmb2xsb3dzIHRoZSBzaXplIHJlcXVlc3RlZCBieSB0aGUgcGVyc29uYWxpdHksCiAJCSAqIHdoaWNoIGRlZmF1bHRzIHRvIHBoeXNpY2FsIHNpemUsIGJ1dCBjYW4gYmUgdmlydHVhbCBzaXplCiAJCSAqLwogCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7Ci0JZWxzZQorCQltZGRldi0+cmVzeW5jX21pc21hdGNoZXMgPSAwOworCX0gZWxzZQogCQkvKiByZWNvdmVyeSBmb2xsb3dzIHRoZSBwaHlzaWNhbCBzaXplIG9mIGRldmljZXMgKi8KIAkJbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOwogCkBAIC0zNjI2LDcgKzM5OTksOCBAQAogCiAJaXNfbWRkZXZfaWRsZShtZGRldik7IC8qIHRoaXMgYWxzbyBpbml0aWFsaXplcyBJTyBldmVudCBjb3VudGVycyAqLwogCS8qIHdlIGRvbid0IHVzZSB0aGUgY2hlY2twb2ludCBpZiB0aGVyZSdzIGEgYml0bWFwICovCi0JaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpICYmICFtZGRldi0+Yml0bWFwKQorCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSAmJiAhbWRkZXYtPmJpdG1hcAorCSAgICAmJiAhIHRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCWogPSBtZGRldi0+cmVjb3ZlcnlfY3A7CiAJZWxzZQogCQlqID0gMDsKQEAgLTM2OTksMTMgKzQwNzMsMTIgQEAKIAkJfQogCiAKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCQkvKgogCQkJICogZ290IGEgc2lnbmFsLCBleGl0LgogCQkJICovCiAJCQlwcmludGsoS0VSTl9JTkZPIAogCQkJCSJtZDogbWRfZG9fc3luYygpIGdvdCBzaWduYWwgLi4uIGV4aXRpbmdcbiIpOwotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzcyNyw3ICs0MTAwLDcgQEAKIAkJaWYgKGN1cnJzcGVlZCA+IHN5c2N0bF9zcGVlZF9saW1pdF9taW4pIHsKIAkJCWlmICgoY3VycnNwZWVkID4gc3lzY3RsX3NwZWVkX2xpbWl0X21heCkgfHwKIAkJCQkJIWlzX21kZGV2X2lkbGUobWRkZXYpKSB7Ci0JCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjUwKTsKKwkJCQltc2xlZXAoMjUwKTsKIAkJCQlnb3RvIHJlcGVhdDsKIAkJCX0KIAkJfQpAQCAtMzgyMCw3ICs0MTkzLDcgQEAKIAlpZiAobWRkZXZfdHJ5bG9jayhtZGRldik9PTApIHsKIAkJaW50IHNwYXJlcyA9MDsKIAotCQlzcGluX2xvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOwogCQlpZiAobWRkZXYtPnNhZmVtb2RlICYmICFhdG9taWNfcmVhZCgmbWRkZXYtPndyaXRlc19wZW5kaW5nKSAmJgogCQkgICAgIW1kZGV2LT5pbl9zeW5jICYmIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpIHsKIAkJCW1kZGV2LT5pbl9zeW5jID0gMTsKQEAgLTM4MjgsNyArNDIwMSw3IEBACiAJCX0KIAkJaWYgKG1kZGV2LT5zYWZlbW9kZSA9PSAxKQogCQkJbWRkZXYtPnNhZmVtb2RlID0gMDsKLQkJc3Bpbl91bmxvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAKIAkJaWYgKG1kZGV2LT5zYl9kaXJ0eSkKIAkJCW1kX3VwZGF0ZV9zYihtZGRldik7CkBAIC0zODY0LDkgKzQyMzcsMTMgQEAKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9Ci0JCWlmIChtZGRldi0+cmVjb3ZlcnkpCi0JCQkvKiBwcm9iYWJseSBqdXN0IHRoZSBSRUNPVkVSWV9ORUVERUQgZmxhZyAqLwotCQkJbWRkZXYtPnJlY292ZXJ5ID0gMDsKKwkJLyogQ2xlYXIgc29tZSBiaXRzIHRoYXQgZG9uJ3QgbWVhbiBhbnl0aGluZywgYnV0CisJCSAqIG1pZ2h0IGJlIGxlZnQgc2V0CisJCSAqLworCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX0VSUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpOwogCiAJCS8qIG5vIHJlY292ZXJ5IGlzIHJ1bm5pbmcuCiAJCSAqIHJlbW92ZSBhbnkgZmFpbGVkIGRyaXZlcywgdGhlbgpAQCAtMzg3NiwzMSArNDI1Myw0MSBAQAogCQkgKi8KIAkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgotCQkJICAgIChyZGV2LT5mYXVsdHkgfHwgISByZGV2LT5pbl9zeW5jKSAmJgorCQkJICAgICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgfHwgISB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSAmJgogCQkJICAgIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKT09MCkgewotCQkJCWlmIChtZGRldi0+cGVycy0+aG90X3JlbW92ZV9kaXNrKG1kZGV2LCByZGV2LT5yYWlkX2Rpc2spPT0wKQorCQkJCWlmIChtZGRldi0+cGVycy0+aG90X3JlbW92ZV9kaXNrKG1kZGV2LCByZGV2LT5yYWlkX2Rpc2spPT0wKSB7CisJCQkJCWNoYXIgbm1bMjBdOworCQkJCQlzcHJpbnRmKG5tLCJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJm1kZGV2LT5rb2JqLCBubSk7CiAJCQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOworCQkJCX0KIAkJCX0KIAogCQlpZiAobWRkZXYtPmRlZ3JhZGVkKSB7CiAJCQlJVEVSQVRFX1JERVYobWRkZXYscmRldixydG1wKQogCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwCi0JCQkJICAgICYmICFyZGV2LT5mYXVsdHkpIHsKLQkJCQkJaWYgKG1kZGV2LT5wZXJzLT5ob3RfYWRkX2Rpc2sobWRkZXYscmRldikpCisJCQkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCQkJaWYgKG1kZGV2LT5wZXJzLT5ob3RfYWRkX2Rpc2sobWRkZXYscmRldikpIHsKKwkJCQkJCWNoYXIgbm1bMjBdOworCQkJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJCQkJc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLCAmcmRldi0+a29iaiwgbm0pOwogCQkJCQkJc3BhcmVzKys7Ci0JCQkJCWVsc2UKKwkJCQkJfSBlbHNlCiAJCQkJCQlicmVhazsKIAkJCQl9CiAJCX0KIAotCQlpZiAoIXNwYXJlcyAmJiAobWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvciApKSB7Ci0JCQkvKiBub3RoaW5nIHdlIGNhbiBkbyAuLi4gKi8KKwkJaWYgKHNwYXJlcykgeworCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOworCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJfSBlbHNlIGlmIChtZGRldi0+cmVjb3ZlcnlfY3AgPCBNYXhTZWN0b3IpIHsKKwkJCXNldF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSk7CisJCX0gZWxzZSBpZiAoIXRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKQorCQkJLyogbm90aGluZyB0byBiZSBkb25lIC4uLiAqLwogCQkJZ290byB1bmxvY2s7Ci0JCX0KKwogCQlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkgewogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmbWRkZXYtPnJlY292ZXJ5KTsKLQkJCWlmICghc3BhcmVzKQotCQkJCXNldF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCQlpZiAoc3BhcmVzICYmIG1kZGV2LT5iaXRtYXAgJiYgISBtZGRldi0+Yml0bWFwLT5maWxlKSB7CiAJCQkJLyogV2UgYXJlIGFkZGluZyBhIGRldmljZSBvciBkZXZpY2VzIHRvIGFuIGFycmF5CiAJCQkJICogd2hpY2ggaGFzIHRoZSBiaXRtYXAgc3RvcmVkIG9uIGFsbCBkZXZpY2VzLgpAQCAtMzk3NSw3ICs0MzYyLDcgQEAKIAkJCSIgTURfU0JfRElTS1M9JWRcbiIsCiAJCQlNRF9NQUpPUl9WRVJTSU9OLCBNRF9NSU5PUl9WRVJTSU9OLAogCQkJTURfUEFUQ0hMRVZFTF9WRVJTSU9OLCBNQVhfTURfREVWUywgTURfU0JfRElTS1MpOwotCXByaW50ayhLRVJOX0lORk8gIm1kOiBiaXRtYXAgdmVyc2lvbiAlZC4lZFxuIiwgQklUTUFQX01BSk9SLAorCXByaW50ayhLRVJOX0lORk8gIm1kOiBiaXRtYXAgdmVyc2lvbiAlZC4lZFxuIiwgQklUTUFQX01BSk9SX0hJLAogCQkJQklUTUFQX01JTk9SKTsKIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIsICJtZCIpKQpAQCAtNDAzOSw3ICs0NDI2LDcgQEAKIAkJaWYgKElTX0VSUihyZGV2KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChyZGV2LT5mYXVsdHkpIHsKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJTURfQlVHKCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDA4Niw2ICs0NDczLDIzIEBACiBtb2R1bGVfaW5pdChtZF9pbml0KQogbW9kdWxlX2V4aXQobWRfZXhpdCkKIAorc3RhdGljIGludCBnZXRfcm8oY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIlZCIsIHN0YXJ0X3JlYWRvbmx5KTsKK30KK3N0YXRpYyBpbnQgc2V0X3JvKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJY2hhciAqZTsKKwlpbnQgbnVtID0gc2ltcGxlX3N0cnRvdWwodmFsLCAmZSwgMTApOworCWlmICgqdmFsICYmICgqZSA9PSAnXDAnIHx8ICplID09ICdcbicpKSB7CisJCXN0YXJ0X3JlYWRvbmx5ID0gbnVtOworCQlyZXR1cm4gMDs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCittb2R1bGVfcGFyYW1fY2FsbChzdGFydF9ybywgc2V0X3JvLCBnZXRfcm8sIE5VTEwsIDA2MDApOworCiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSk7CiBFWFBPUlRfU1lNQk9MKG1kX2Vycm9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IGMwNmY0NDcuLjE0NWNkYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtNjMsOCArNjMsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmIHJkZXYtPmluX3N5bmMpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIGk7CkBAIC0xMzksOCArMTM5LDkgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrczsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmICFyZGV2LT5mYXVsdHkgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bXVsdGlwYXRoc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKQorCQkgICAgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQlyZXF1ZXN0X3F1ZXVlX3QgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShyZGV2LT5iZGV2KTsKIAogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CkBAIC0yMTEsNyArMjEyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQogCQlzZXFfcHJpbnRmIChzZXEsICIlcyIsCiAJCQkgICAgICAgY29uZi0+bXVsdGlwYXRoc1tpXS5yZGV2ICYmIAotCQkJICAgICAgIGNvbmYtPm11bHRpcGF0aHNbaV0ucmRldi0+aW5fc3luYyA/ICJVIiA6ICJfIik7CisJCQkgICAgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm11bHRpcGF0aHNbaV0ucmRldi0+ZmxhZ3MpID8gIlUiIDogIl8iKTsKIAlzZXFfcHJpbnRmIChzZXEsICJdIik7CiB9CiAKQEAgLTIyNCw4ICsyMjUsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzICYmIHJldCA9PSAwOyBpKyspIHsKLQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPm11bHRpcGF0aHNbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm11bHRpcGF0aHNbaV0ucmRldik7CisJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSByZGV2LT5iZGV2OwogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAKQEAgLTI2NSwxMCArMjY2LDEwIEBACiAJCS8qCiAJCSAqIE1hcmsgZGlzayBhcyB1bnVzYWJsZQogCQkgKi8KLQkJaWYgKCFyZGV2LT5mYXVsdHkpIHsKKwkJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQkJCXJkZXYtPmluX3N5bmMgPSAwOwotCQkJcmRldi0+ZmF1bHR5ID0gMTsKKwkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CiAJCQltZGRldi0+c2JfZGlydHkgPSAxOwogCQkJY29uZi0+d29ya2luZ19kaXNrcy0tOwogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIm11bHRpcGF0aDogSU8gZmFpbHVyZSBvbiAlcywiCkBAIC0yOTgsNyArMjk5LDcgQEAKIAkJdG1wID0gY29uZi0+bXVsdGlwYXRocyArIGk7CiAJCWlmICh0bXAtPnJkZXYpCiAJCQlwcmludGsoIiBkaXNrJWQsIG86JWQsIGRldjolc1xuIiwKLQkJCQlpLCF0bXAtPnJkZXYtPmZhdWx0eSwKKwkJCQlpLCF0ZXN0X2JpdChGYXVsdHksICZ0bXAtPnJkZXYtPmZsYWdzKSwKIAkJCSAgICAgICBiZGV2bmFtZSh0bXAtPnJkZXYtPmJkZXYsYikpOwogCX0KIH0KQEAgLTMzMCw4ICszMzEsOCBAQAogCiAJCQljb25mLT53b3JraW5nX2Rpc2tzKys7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBwYXRoOwotCQkJcmRldi0+aW5fc3luYyA9IDE7Ci0JCQlwLT5yZGV2ID0gcmRldjsKKwkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5yZGV2LCByZGV2KTsKIAkJCWZvdW5kID0gMTsKIAkJfQogCkBAIC0zNTAsNyArMzUxLDcgQEAKIAogCXJkZXYgPSBwLT5yZGV2OwogCWlmIChyZGV2KSB7Ci0JCWlmIChyZGV2LT5pbl9zeW5jIHx8CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaG90LXJlbW92ZS1kaXNrLCBzbG90ICVkIGlzIGlkZW50aWZpZWQiCQkJCSIgYnV0IGlzIHN0aWxsIG9wZXJhdGlvbmFsIVxuIiwgbnVtYmVyKTsKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTQ4Miw3ICs0ODMsNyBAQAogCQkgICAgbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA+IChQQUdFX1NJWkU+PjkpKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAotCQlpZiAoIXJkZXYtPmZhdWx0eSkgCisJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGUxNmY0NzMuLjJkYTlkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogewogCWludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwogCXIxYmlvX3QgKiByMV9iaW8gPSAocjFiaW9fdCAqKShiaW8tPmJpX3ByaXZhdGUpOwotCWludCBtaXJyb3IsIGJlaGluZDsKKwlpbnQgbWlycm9yLCBiZWhpbmQgPSB0ZXN0X2JpdChSMUJJT19CZWhpbmRJTywgJnIxX2Jpby0+c3RhdGUpOwogCWNvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYocjFfYmlvLT5tZGRldik7CiAKIAlpZiAoYmlvLT5iaV9zaXplKQpAQCAtMzExLDQ3ICszMTEsNTQgQEAKIAkJaWYgKHIxX2Jpby0+Ymlvc1ttaXJyb3JdID09IGJpbykKIAkJCWJyZWFrOwogCi0JLyoKLQkgKiB0aGlzIGJyYW5jaCBpcyBvdXIgJ29uZSBtaXJyb3IgSU8gaGFzIGZpbmlzaGVkJyBldmVudCBoYW5kbGVyOgotCSAqLwotCWlmICghdXB0b2RhdGUpIHsKLQkJbWRfZXJyb3IocjFfYmlvLT5tZGRldiwgY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYpOwotCQkvKiBhbiBJL08gZmFpbGVkLCB3ZSBjYW4ndCBjbGVhciB0aGUgYml0bWFwICovCi0JCXNldF9iaXQoUjFCSU9fRGVncmFkZWQsICZyMV9iaW8tPnN0YXRlKTsKLQl9IGVsc2UKKwlpZiAoZXJyb3IgPT0gLUVOT1RTVVBQICYmIHRlc3RfYml0KFIxQklPX0JhcnJpZXIsICZyMV9iaW8tPnN0YXRlKSkgeworCQlzZXRfYml0KEJhcnJpZXJzTm90c3VwcCwgJmNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2LT5mbGFncyk7CisJCXNldF9iaXQoUjFCSU9fQmFycmllclJldHJ5LCAmcjFfYmlvLT5zdGF0ZSk7CisJCXIxX2Jpby0+bWRkZXYtPmJhcnJpZXJzX3dvcmsgPSAwOworCX0gZWxzZSB7CiAJCS8qCi0JCSAqIFNldCBSMUJJT19VcHRvZGF0ZSBpbiBvdXIgbWFzdGVyIGJpbywgc28gdGhhdAotCQkgKiB3ZSB3aWxsIHJldHVybiBhIGdvb2QgZXJyb3IgY29kZSBmb3IgdG8gdGhlIGhpZ2hlcgotCQkgKiBsZXZlbHMgZXZlbiBpZiBJTyBvbiBzb21lIG90aGVyIG1pcnJvcmVkIGJ1ZmZlciBmYWlscy4KLQkJICoKLQkJICogVGhlICdtYXN0ZXInIHJlcHJlc2VudHMgdGhlIGNvbXBvc2l0ZSBJTyBvcGVyYXRpb24gdG8KLQkJICogdXNlci1zaWRlLiBTbyBpZiBzb21ldGhpbmcgd2FpdHMgZm9yIElPLCB0aGVuIGl0IHdpbGwKLQkJICogd2FpdCBmb3IgdGhlICdtYXN0ZXInIGJpby4KKwkJICogdGhpcyBicmFuY2ggaXMgb3VyICdvbmUgbWlycm9yIElPIGhhcyBmaW5pc2hlZCcgZXZlbnQgaGFuZGxlcjoKIAkJICovCi0JCXNldF9iaXQoUjFCSU9fVXB0b2RhdGUsICZyMV9iaW8tPnN0YXRlKTsKKwkJcjFfYmlvLT5iaW9zW21pcnJvcl0gPSBOVUxMOworCQliaW9fcHV0KGJpbyk7CisJCWlmICghdXB0b2RhdGUpIHsKKwkJCW1kX2Vycm9yKHIxX2Jpby0+bWRkZXYsIGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2KTsKKwkJCS8qIGFuIEkvTyBmYWlsZWQsIHdlIGNhbid0IGNsZWFyIHRoZSBiaXRtYXAgKi8KKwkJCXNldF9iaXQoUjFCSU9fRGVncmFkZWQsICZyMV9iaW8tPnN0YXRlKTsKKwkJfSBlbHNlCisJCQkvKgorCQkJICogU2V0IFIxQklPX1VwdG9kYXRlIGluIG91ciBtYXN0ZXIgYmlvLCBzbyB0aGF0CisJCQkgKiB3ZSB3aWxsIHJldHVybiBhIGdvb2QgZXJyb3IgY29kZSBmb3IgdG8gdGhlIGhpZ2hlcgorCQkJICogbGV2ZWxzIGV2ZW4gaWYgSU8gb24gc29tZSBvdGhlciBtaXJyb3JlZCBidWZmZXIgZmFpbHMuCisJCQkgKgorCQkJICogVGhlICdtYXN0ZXInIHJlcHJlc2VudHMgdGhlIGNvbXBvc2l0ZSBJTyBvcGVyYXRpb24gdG8KKwkJCSAqIHVzZXItc2lkZS4gU28gaWYgc29tZXRoaW5nIHdhaXRzIGZvciBJTywgdGhlbiBpdCB3aWxsCisJCQkgKiB3YWl0IGZvciB0aGUgJ21hc3RlcicgYmlvLgorCQkJICovCisJCQlzZXRfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSk7CiAKLQl1cGRhdGVfaGVhZF9wb3MobWlycm9yLCByMV9iaW8pOworCQl1cGRhdGVfaGVhZF9wb3MobWlycm9yLCByMV9iaW8pOwogCi0JYmVoaW5kID0gdGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKTsKLQlpZiAoYmVoaW5kKSB7Ci0JCWlmICh0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2LT5mbGFncykpCi0JCQlhdG9taWNfZGVjKCZyMV9iaW8tPmJlaGluZF9yZW1haW5pbmcpOworCQlpZiAoYmVoaW5kKSB7CisJCQlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldi0+ZmxhZ3MpKQorCQkJCWF0b21pY19kZWMoJnIxX2Jpby0+YmVoaW5kX3JlbWFpbmluZyk7CiAKLQkJLyogSW4gYmVoaW5kIG1vZGUsIHdlIEFDSyB0aGUgbWFzdGVyIGJpbyBvbmNlIHRoZSBJL08gaGFzIHNhZmVseQotCQkgKiByZWFjaGVkIGFsbCBub24td3JpdGVtb3N0bHkgZGlza3MuIFNldHRpbmcgdGhlIFJldHVybmVkIGJpdAotCQkgKiBlbnN1cmVzIHRoYXQgdGhpcyBnZXRzIGRvbmUgb25seSBvbmNlIC0tIHdlIGRvbid0IGV2ZXIgd2FudCB0bwotCQkgKiByZXR1cm4gLUVJTyBoZXJlLCBpbnN0ZWFkIHdlJ2xsIHdhaXQgKi8KKwkJCS8qIEluIGJlaGluZCBtb2RlLCB3ZSBBQ0sgdGhlIG1hc3RlciBiaW8gb25jZSB0aGUgSS9PIGhhcyBzYWZlbHkKKwkJCSAqIHJlYWNoZWQgYWxsIG5vbi13cml0ZW1vc3RseSBkaXNrcy4gU2V0dGluZyB0aGUgUmV0dXJuZWQgYml0CisJCQkgKiBlbnN1cmVzIHRoYXQgdGhpcyBnZXRzIGRvbmUgb25seSBvbmNlIC0tIHdlIGRvbid0IGV2ZXIgd2FudCB0bworCQkJICogcmV0dXJuIC1FSU8gaGVyZSwgaW5zdGVhZCB3ZSdsbCB3YWl0ICovCiAKLQkJaWYgKGF0b21pY19yZWFkKCZyMV9iaW8tPmJlaGluZF9yZW1haW5pbmcpID49IChhdG9taWNfcmVhZCgmcjFfYmlvLT5yZW1haW5pbmcpLTEpICYmCi0JCSAgICB0ZXN0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpKSB7Ci0JCQkvKiBNYXliZSB3ZSBjYW4gcmV0dXJuIG5vdyAqLwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFIxQklPX1JldHVybmVkLCAmcjFfYmlvLT5zdGF0ZSkpIHsKLQkJCQlzdHJ1Y3QgYmlvICptYmlvID0gcjFfYmlvLT5tYXN0ZXJfYmlvOwotCQkJCVBSSU5USyhLRVJOX0RFQlVHICJyYWlkMTogYmVoaW5kIGVuZCB3cml0ZSBzZWN0b3JzICVsbHUtJWxsdVxuIiwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWJpby0+Ymlfc2VjdG9yLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBtYmlvLT5iaV9zZWN0b3IgKwotCQkJCSAgICAgICAobWJpby0+Ymlfc2l6ZSA+PiA5KSAtIDEpOwotCQkJCWJpb19lbmRpbyhtYmlvLCBtYmlvLT5iaV9zaXplLCAwKTsKKwkJCWlmIChhdG9taWNfcmVhZCgmcjFfYmlvLT5iZWhpbmRfcmVtYWluaW5nKSA+PSAoYXRvbWljX3JlYWQoJnIxX2Jpby0+cmVtYWluaW5nKS0xKSAmJgorCQkJICAgIHRlc3RfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSkpIHsKKwkJCQkvKiBNYXliZSB3ZSBjYW4gcmV0dXJuIG5vdyAqLworCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChSMUJJT19SZXR1cm5lZCwgJnIxX2Jpby0+c3RhdGUpKSB7CisJCQkJCXN0cnVjdCBiaW8gKm1iaW8gPSByMV9iaW8tPm1hc3Rlcl9iaW87CisJCQkJCVBSSU5USyhLRVJOX0RFQlVHICJyYWlkMTogYmVoaW5kIGVuZCB3cml0ZSBzZWN0b3JzICVsbHUtJWxsdVxuIiwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1iaW8tPmJpX3NlY3RvciwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1iaW8tPmJpX3NlY3RvciArCisJCQkJCSAgICAgICAobWJpby0+Ymlfc2l6ZSA+PiA5KSAtIDEpOworCQkJCQliaW9fZW5kaW8obWJpbywgbWJpby0+Ymlfc2l6ZSwgMCk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMzYxLDggKzM2OCwxNiBAQAogCSAqIGFscmVhZHkuCiAJICovCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnIxX2Jpby0+cmVtYWluaW5nKSkgeworCQlpZiAodGVzdF9iaXQoUjFCSU9fQmFycmllclJldHJ5LCAmcjFfYmlvLT5zdGF0ZSkpIHsKKwkJCXJlc2NoZWR1bGVfcmV0cnkocjFfYmlvKTsKKwkJCS8qIERvbid0IGRlY19wZW5kaW5nIHlldCwgd2Ugd2FudCB0byBob2xkCisJCQkgKiB0aGUgcmVmZXJlbmNlIG92ZXIgdGhlIHJldHJ5CisJCQkgKi8KKwkJCXJldHVybiAwOworCQl9CiAJCWlmICh0ZXN0X2JpdChSMUJJT19CZWhpbmRJTywgJnIxX2Jpby0+c3RhdGUpKSB7CiAJCQkvKiBmcmVlIGV4dHJhIGNvcHkgb2YgdGhlIGRhdGEgcGFnZXMgKi8KKy8qIEZJWE1FIGJpbyBoYXMgYmVlbiBmcmVlZCEhISAqLwogCQkJaW50IGkgPSBiaW8tPmJpX3ZjbnQ7CiAJCQl3aGlsZSAoaS0tKQogCQkJCV9fZnJlZV9wYWdlKGJpby0+YmlfaW9fdmVjW2ldLmJ2X3BhZ2UpOwpAQCAtNDE2LDEyICs0MzEsMTIgQEAKIAkJLyogQ2hvb3NlIHRoZSBmaXJzdCBvcGVyYXRpb24gZGV2aWNlLCBmb3IgY29uc2lzdGFuY3kgKi8KIAkJbmV3X2Rpc2sgPSAwOwogCi0JCWZvciAocmRldiA9IGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLnJkZXY7Ci0JCSAgICAgIXJkZXYgfHwgIXJkZXYtPmluX3N5bmMKKwkJZm9yIChyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLnJkZXYpOworCQkgICAgICFyZGV2IHx8ICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCiAJCQkgICAgIHx8IHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwotCQkgICAgIHJkZXYgPSBjb25mLT5taXJyb3JzWysrbmV3X2Rpc2tdLnJkZXYpIHsKKwkJICAgICByZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbKytuZXdfZGlza10ucmRldikpIHsKIAotCQkJaWYgKHJkZXYgJiYgcmRldi0+aW5fc3luYykKKwkJCWlmIChyZGV2ICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQkJd29ubHlfZGlzayA9IG5ld19kaXNrOwogCiAJCQlpZiAobmV3X2Rpc2sgPT0gY29uZi0+cmFpZF9kaXNrcyAtIDEpIHsKQEAgLTQzNCwxMiArNDQ5LDEyIEBACiAKIAogCS8qIG1ha2Ugc3VyZSB0aGUgZGlzayBpcyBvcGVyYXRpb25hbCAqLwotCWZvciAocmRldiA9IGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLnJkZXY7Ci0JICAgICAhcmRldiB8fCAhcmRldi0+aW5fc3luYyB8fAorCWZvciAocmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2KTsKKwkgICAgICFyZGV2IHx8ICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7Ci0JICAgICByZGV2ID0gY29uZi0+bWlycm9yc1tuZXdfZGlza10ucmRldikgeworCSAgICAgcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2KSkgewogCi0JCWlmIChyZGV2ICYmIHJkZXYtPmluX3N5bmMpCisJCWlmIChyZGV2ICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQl3b25seV9kaXNrID0gbmV3X2Rpc2s7CiAKIAkJaWYgKG5ld19kaXNrIDw9IDApCkBAIC00NzQsMTAgKzQ4OSwxMCBAQAogCQkJZGlzayA9IGNvbmYtPnJhaWRfZGlza3M7CiAJCWRpc2stLTsKIAotCQlyZGV2ID0gY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2OworCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldik7CiAKIAkJaWYgKCFyZGV2IHx8Ci0JCSAgICAhcmRldi0+aW5fc3luYyB8fAorCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgfHwKIAkJICAgIHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKQEAgLTQ5NiwxMSArNTExLDExIEBACiAKIAogCWlmIChuZXdfZGlzayA+PSAwKSB7Ci0JCXJkZXYgPSBjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2OworCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLnJkZXYpOwogCQlpZiAoIXJkZXYpCiAJCQlnb3RvIHJldHJ5OwogCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKLQkJaWYgKCFyZGV2LT5pbl9zeW5jKSB7CisJCWlmICghdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJLyogY2Fubm90IHJpc2sgcmV0dXJuaW5nIGEgZGV2aWNlIHRoYXQgZmFpbGVkCiAJCQkgKiBiZWZvcmUgd2UgaW5jJ2VkIG5yX3BlbmRpbmcKIAkJCSAqLwpAQCAtNTIyLDggKzUzNyw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3M7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiAhcmRldi0+ZmF1bHR5ICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbaV0ucmRldik7CisJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQlyZXF1ZXN0X3F1ZXVlX3QgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShyZGV2LT5iZGV2KTsKIAogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CkBAIC01NTYsOCArNTcxLDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrcyAmJiByZXQgPT0gMDsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmICFyZGV2LT5mYXVsdHkpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gcmRldi0+YmRldjsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCkBAIC02NDgsOCArNjYzLDkgQEAKIAlzdHJ1Y3QgYmlvX2xpc3QgYmw7CiAJc3RydWN0IHBhZ2UgKipiZWhpbmRfcGFnZXMgPSBOVUxMOwogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOworCWludCBkb19iYXJyaWVyczsKIAotCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkgeworCWlmICh1bmxpa2VseSghbWRkZXYtPmJhcnJpZXJzX3dvcmsgJiYgYmlvX2JhcnJpZXIoYmlvKSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXplLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTcyOCwxMCArNzQ0LDEwIEBACiAjZW5kaWYKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgIGkgPCBkaXNrczsgaSsrKSB7Ci0JCWlmICgocmRldj1jb25mLT5taXJyb3JzW2ldLnJkZXYpICE9IE5VTEwgJiYKLQkJICAgICFyZGV2LT5mYXVsdHkpIHsKKwkJaWYgKChyZGV2PXJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpKSAhPSBOVUxMICYmCisJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKLQkJCWlmIChyZGV2LT5mYXVsdHkpIHsKKwkJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCQlhdG9taWNfZGVjKCZyZGV2LT5ucl9wZW5kaW5nKTsKIAkJCQlyMV9iaW8tPmJpb3NbaV0gPSBOVUxMOwogCQkJfSBlbHNlCkBAIC03NTksNiArNzc1LDEwIEBACiAJYXRvbWljX3NldCgmcjFfYmlvLT5yZW1haW5pbmcsIDApOwogCWF0b21pY19zZXQoJnIxX2Jpby0+YmVoaW5kX3JlbWFpbmluZywgMCk7CiAKKwlkb19iYXJyaWVycyA9IGJpby0+YmlfcncgJiBCSU9fUldfQkFSUklFUjsKKwlpZiAoZG9fYmFycmllcnMpCisJCXNldF9iaXQoUjFCSU9fQmFycmllciwgJnIxX2Jpby0+c3RhdGUpOworCiAJYmlvX2xpc3RfaW5pdCgmYmwpOwogCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKSB7CiAJCXN0cnVjdCBiaW8gKm1iaW87CkBAIC03NzEsNyArNzkxLDcgQEAKIAkJbWJpby0+Ymlfc2VjdG9yCT0gcjFfYmlvLT5zZWN0b3IgKyBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQltYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OwogCQltYmlvLT5iaV9lbmRfaW8JPSByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdDsKLQkJbWJpby0+YmlfcncgPSBXUklURTsKKwkJbWJpby0+YmlfcncgPSBXUklURSB8IGRvX2JhcnJpZXJzOwogCQltYmlvLT5iaV9wcml2YXRlID0gcjFfYmlvOwogCiAJCWlmIChiZWhpbmRfcGFnZXMpIHsKQEAgLTgyNCw3ICs4NDQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiJXMiLAogCQkJICAgICAgY29uZi0+bWlycm9yc1tpXS5yZGV2ICYmCi0JCQkgICAgICBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmluX3N5bmMgPyAiVSIgOiAiXyIpOworCQkJICAgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpID8gIlUiIDogIl8iKTsKIAlzZXFfcHJpbnRmKHNlcSwgIl0iKTsKIH0KIApAQCAtODQwLDE0ICs4NjAsMTQgQEAKIAkgKiBuZXh0IGxldmVsIHVwIGtub3cuCiAJICogZWxzZSBtYXJrIHRoZSBkcml2ZSBhcyBmYWlsZWQKIAkgKi8KLQlpZiAocmRldi0+aW5fc3luYworCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCiAJICAgICYmIGNvbmYtPndvcmtpbmdfZGlza3MgPT0gMSkKIAkJLyoKIAkJICogRG9uJ3QgZmFpbCB0aGUgZHJpdmUsIGFjdCBhcyB0aG91Z2ggd2Ugd2VyZSBqdXN0IGEKIAkJICogbm9ybWFsIHNpbmdsZSBkcml2ZQogCQkgKi8KIAkJcmV0dXJuOwotCWlmIChyZGV2LT5pbl9zeW5jKSB7CisJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJbWRkZXYtPmRlZ3JhZGVkKys7CiAJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsKIAkJLyoKQEAgLTg1NSw4ICs4NzUsOCBAQAogCQkgKi8KIAkJc2V0X2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3ZlcnkpOwogCX0KLQlyZGV2LT5pbl9zeW5jID0gMDsKLQlyZGV2LT5mYXVsdHkgPSAxOworCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCW1kZGV2LT5zYl9kaXJ0eSA9IDE7CiAJcHJpbnRrKEtFUk5fQUxFUlQgInJhaWQxOiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuIFxuIgogCQkiCU9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXNcbiIsCkBAIC04ODEsNyArOTAxLDcgQEAKIAkJdG1wID0gY29uZi0+bWlycm9ycyArIGk7CiAJCWlmICh0bXAtPnJkZXYpCiAJCQlwcmludGsoIiBkaXNrICVkLCB3bzolZCwgbzolZCwgZGV2OiVzXG4iLAotCQkJCWksICF0bXAtPnJkZXYtPmluX3N5bmMsICF0bXAtPnJkZXYtPmZhdWx0eSwKKwkJCQlpLCAhdGVzdF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpLCAhdGVzdF9iaXQoRmF1bHR5LCAmdG1wLT5yZGV2LT5mbGFncyksCiAJCQkJYmRldm5hbWUodG1wLT5yZGV2LT5iZGV2LGIpKTsKIAl9CiB9CkBAIC05MTMsMTEgKzkzMywxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKIAkJdG1wID0gY29uZi0+bWlycm9ycyArIGk7CiAJCWlmICh0bXAtPnJkZXYgCi0JCSAgICAmJiAhdG1wLT5yZGV2LT5mYXVsdHkKLQkJICAgICYmICF0bXAtPnJkZXYtPmluX3N5bmMpIHsKKwkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZ0bXAtPnJkZXYtPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKSkgewogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCQkJbWRkZXYtPmRlZ3JhZGVkLS07Ci0JCQl0bXAtPnJkZXYtPmluX3N5bmMgPSAxOworCQkJc2V0X2JpdChJbl9zeW5jLCAmdG1wLT5yZGV2LT5mbGFncyk7CiAJCX0KIAl9CiAKQEAgLTk1NCw3ICs5NzQsNyBAQAogCQkJZm91bmQgPSAxOwogCQkJaWYgKHJkZXYtPnNhdmVkX3JhaWRfZGlzayAhPSBtaXJyb3IpCiAJCQkJY29uZi0+ZnVsbHN5bmMgPSAxOwotCQkJcC0+cmRldiA9IHJkZXY7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIocC0+cmRldiwgcmRldik7CiAJCQlicmVhazsKIAkJfQogCkBAIC05NzIsNyArOTkyLDcgQEAKIAlwcmludF9jb25mKGNvbmYpOwogCXJkZXYgPSBwLT5yZGV2OwogCWlmIChyZGV2KSB7Ci0JCWlmIChyZGV2LT5pbl9zeW5jIHx8CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gYWJvcnQ7CkBAIC0xMTUzLDYgKzExNzMsMzYgQEAKIAkJaWYgKHRlc3RfYml0KFIxQklPX0lzU3luYywgJnIxX2Jpby0+c3RhdGUpKSB7CiAJCQlzeW5jX3JlcXVlc3Rfd3JpdGUobWRkZXYsIHIxX2Jpbyk7CiAJCQl1bnBsdWcgPSAxOworCQl9IGVsc2UgaWYgKHRlc3RfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpKSB7CisJCQkvKiBzb21lIHJlcXVlc3RzIGluIHRoZSByMWJpbyB3ZXJlIEJJT19SV19CQVJSSUVSCisJCQkgKiByZXF1ZXN0cyB3aGljaCBmYWlsZWQgd2l0aCAtRU5PVFNVUFAuICBIb2h1bW0uLgorCQkJICogQmV0dGVyIHJlc3VibWl0IHdpdGhvdXQgdGhlIGJhcnJpZXIuCisJCQkgKiBXZSBrbm93IHdoaWNoIGRldmljZXMgdG8gcmVzdWJtaXQgZm9yLCBiZWNhdXNlCisJCQkgKiBhbGwgb3RoZXJzIGhhdmUgaGFkIHRoZWlyIGJpb3NbXSBlbnRyeSBjbGVhcmVkLgorCQkJICovCisJCQlpbnQgaTsKKwkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKTsKKwkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSk7CisJCQlmb3IgKGk9MDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKKwkJCQlpZiAocjFfYmlvLT5iaW9zW2ldKSB7CisJCQkJCXN0cnVjdCBiaW9fdmVjICpidmVjOworCQkJCQlpbnQgajsKKworCQkJCQliaW8gPSBiaW9fY2xvbmUocjFfYmlvLT5tYXN0ZXJfYmlvLCBHRlBfTk9JTyk7CisJCQkJCS8qIGNvcHkgcGFnZXMgZnJvbSB0aGUgZmFpbGVkIGJpbywgYXMKKwkJCQkJICogdGhpcyBtaWdodCBiZSBhIHdyaXRlLWJlaGluZCBkZXZpY2UgKi8KKwkJCQkJX19iaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBiaW8sIGosIDApCisJCQkJCQlidmVjLT5idl9wYWdlID0gYmlvX2lvdmVjX2lkeChyMV9iaW8tPmJpb3NbaV0sIGopLT5idl9wYWdlOworCQkJCQliaW9fcHV0KHIxX2Jpby0+Ymlvc1tpXSk7CisJCQkJCWJpby0+Ymlfc2VjdG9yID0gcjFfYmlvLT5zZWN0b3IgKworCQkJCQkJY29uZi0+bWlycm9yc1tpXS5yZGV2LT5kYXRhX29mZnNldDsKKwkJCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OworCQkJCQliaW8tPmJpX2VuZF9pbyA9IHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0OworCQkJCQliaW8tPmJpX3J3ID0gV1JJVEU7CisJCQkJCWJpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKKwkJCQkJcjFfYmlvLT5iaW9zW2ldID0gYmlvOworCQkJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOworCQkJCX0KIAkJfSBlbHNlIHsKIAkJCWludCBkaXNrOwogCQkJYmlvID0gcjFfYmlvLT5iaW9zW3IxX2Jpby0+cmVhZF9kaXNrXTsKQEAgLTEyNjAsNyArMTMxMCw3IEBACiAJICogVGhpcyBjYWxsIHRoZSBiaXRtYXBfc3RhcnRfc3luYyBkb2Vzbid0IGFjdHVhbGx5IHJlY29yZCBhbnl0aGluZwogCSAqLwogCWlmICghYml0bWFwX3N0YXJ0X3N5bmMobWRkZXYtPmJpdG1hcCwgc2VjdG9yX25yLCAmc3luY19ibG9ja3MsIDEpICYmCi0JICAgICFjb25mLT5mdWxsc3luYykgeworCSAgICAhY29uZi0+ZnVsbHN5bmMgJiYgIXRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKIAkJLyogV2UgY2FuIHNraXAgdGhpcyBibG9jaywgYW5kIHByb2JhYmx5IHNldmVyYWwgbW9yZSAqLwogCQkqc2tpcHBlZCA9IDE7CiAJCXJldHVybiBzeW5jX2Jsb2NrczsKQEAgLTEyODIsMTEgKzEzMzIsMTEgQEAKIAkvKiBtYWtlIHN1cmUgZGlzayBpcyBvcGVyYXRpb25hbCAqLwogCXdvbmx5ID0gZGlzazsKIAl3aGlsZSAoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2ID09IE5VTEwgfHwKLQkgICAgICAgIWNvbmYtPm1pcnJvcnNbZGlza10ucmRldi0+aW5fc3luYyB8fAorCSAgICAgICAhdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbZGlza10ucmRldi0+ZmxhZ3MpIHx8CiAJICAgICAgIHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2LT5mbGFncykKIAkJKSB7CiAJCWlmIChjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYgICYmCi0JCSAgICBjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPmluX3N5bmMpCisJCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2LT5mbGFncykpCiAJCQl3b25seSA9IGRpc2s7CiAJCWlmIChkaXNrIDw9IDApCiAJCQlkaXNrID0gY29uZi0+cmFpZF9kaXNrczsKQEAgLTEzMzMsMTEgKzEzODMsMTIgQEAKIAkJCWJpby0+YmlfcncgPSBSRUFEOwogCQkJYmlvLT5iaV9lbmRfaW8gPSBlbmRfc3luY19yZWFkOwogCQl9IGVsc2UgaWYgKGNvbmYtPm1pcnJvcnNbaV0ucmRldiA9PSBOVUxMIHx8Ci0JCQkgICBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZhdWx0eSkgeworCQkJICAgdGVzdF9iaXQoRmF1bHR5LCAmY29uZi0+bWlycm9yc1tpXS5yZGV2LT5mbGFncykpIHsKIAkJCXN0aWxsX2RlZ3JhZGVkID0gMTsKIAkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKCFjb25mLT5taXJyb3JzW2ldLnJkZXYtPmluX3N5bmMgfHwKLQkJCSAgIHNlY3Rvcl9uciArIFJFU1lOQ19TRUNUT1JTID4gbWRkZXYtPnJlY292ZXJ5X2NwKSB7CisJCX0gZWxzZSBpZiAoIXRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSB8fAorCQkJICAgc2VjdG9yX25yICsgUkVTWU5DX1NFQ1RPUlMgPiBtZGRldi0+cmVjb3ZlcnlfY3AgICB8fAorCQkJICAgdGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkgewogCQkJYmlvLT5iaV9ydyA9IFdSSVRFOwogCQkJYmlvLT5iaV9lbmRfaW8gPSBlbmRfc3luY193cml0ZTsKIAkJCXdyaXRlX3RhcmdldHMgKys7CkBAIC0xMzcxLDggKzE0MjIsOSBAQAogCQkJYnJlYWs7CiAJCWlmIChzeW5jX2Jsb2NrcyA9PSAwKSB7CiAJCQlpZiAoIWJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3Rvcl9uciwKLQkJCQkJJnN5bmNfYmxvY2tzLCBzdGlsbF9kZWdyYWRlZCkgJiYKLQkJCQkJIWNvbmYtPmZ1bGxzeW5jKQorCQkJCQkgICAgICAgJnN5bmNfYmxvY2tzLCBzdGlsbF9kZWdyYWRlZCkgJiYKKwkJCSAgICAhY29uZi0+ZnVsbHN5bmMgJiYKKwkJCSAgICAhdGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJCQlicmVhazsKIAkJCWlmIChzeW5jX2Jsb2NrcyA8IChQQUdFX1NJWkU+PjkpKQogCQkJCUJVRygpOwpAQCAtMTQ3OCw3ICsxNTMwLDcgQEAKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJZGlzay0+aGVhZF9wb3NpdGlvbiA9IDA7Ci0JCWlmICghcmRldi0+ZmF1bHR5ICYmIHJkZXYtPmluX3N5bmMpCisJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQljb25mLT53b3JraW5nX2Rpc2tzKys7CiAJfQogCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKQEAgLTE1MTgsNyArMTU3MCw3IEBACiAJICovCiAJZm9yIChqID0gMDsgaiA8IGNvbmYtPnJhaWRfZGlza3MgJiYKIAkJICAgICAoIWNvbmYtPm1pcnJvcnNbal0ucmRldiB8fAotCQkgICAgICAhY29uZi0+bWlycm9yc1tqXS5yZGV2LT5pbl9zeW5jKSA7IGorKykKKwkJICAgICAgIXRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2pdLnJkZXYtPmZsYWdzKSkgOyBqKyspCiAJCS8qIG5vdGhpbmcgKi87CiAJY29uZi0+bGFzdF91c2VkID0gajsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggYmJlNDBlOS4uODY3ZjA2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC00OTYsNiArNDk2LDcgQEAKIAlpbnQgZGlzaywgc2xvdCwgbnNsb3Q7CiAJY29uc3QgaW50IHNlY3RvcnMgPSByMTBfYmlvLT5zZWN0b3JzOwogCXNlY3Rvcl90IG5ld19kaXN0YW5jZSwgY3VycmVudF9kaXN0YW5jZTsKKwltZGtfcmRldl90ICpyZGV2OwogCiAJcmFpZDEwX2ZpbmRfcGh5cyhjb25mLCByMTBfYmlvKTsKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC01MTAsOCArNTExLDggQEAKIAkJc2xvdCA9IDA7CiAJCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKIAotCQl3aGlsZSAoIWNvbmYtPm1pcnJvcnNbZGlza10ucmRldiB8fAotCQkgICAgICAgIWNvbmYtPm1pcnJvcnNbZGlza10ucmRldi0+aW5fc3luYykgeworCQl3aGlsZSAoKHJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KSkgPT0gTlVMTCB8fAorCQkgICAgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCXNsb3QrKzsKIAkJCWlmIChzbG90ID09IGNvbmYtPmNvcGllcykgewogCQkJCXNsb3QgPSAwOwpAQCAtNTI3LDggKzUyOCw4IEBACiAJLyogbWFrZSBzdXJlIHRoZSBkaXNrIGlzIG9wZXJhdGlvbmFsICovCiAJc2xvdCA9IDA7CiAJZGlzayA9IHIxMF9iaW8tPmRldnNbc2xvdF0uZGV2bnVtOwotCXdoaWxlICghY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2IHx8Ci0JICAgICAgICFjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPmluX3N5bmMpIHsKKwl3aGlsZSAoKHJkZXY9cmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldikpID09IE5VTEwgfHwKKwkgICAgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJc2xvdCArKzsKIAkJaWYgKHNsb3QgPT0gY29uZi0+Y29waWVzKSB7CiAJCQlkaXNrID0gLTE7CkBAIC01NDcsMTEgKzU0OCwxMSBAQAogCQlpbnQgbmRpc2sgPSByMTBfYmlvLT5kZXZzW25zbG90XS5kZXZudW07CiAKIAotCQlpZiAoIWNvbmYtPm1pcnJvcnNbbmRpc2tdLnJkZXYgfHwKLQkJICAgICFjb25mLT5taXJyb3JzW25kaXNrXS5yZGV2LT5pbl9zeW5jKQorCQlpZiAoKHJkZXY9cmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbbmRpc2tdLnJkZXYpKSA9PSBOVUxMIHx8CisJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghYXRvbWljX3JlYWQoJmNvbmYtPm1pcnJvcnNbbmRpc2tdLnJkZXYtPm5yX3BlbmRpbmcpKSB7CisJCWlmICghYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQlkaXNrID0gbmRpc2s7CiAJCQlzbG90ID0gbnNsb3Q7CiAJCQlicmVhazsKQEAgLTU2OSw3ICs1NzAsNyBAQAogCXIxMF9iaW8tPnJlYWRfc2xvdCA9IHNsb3Q7CiAvKgljb25mLT5uZXh0X3NlcV9zZWN0ID0gdGhpc19zZWN0b3IgKyBzZWN0b3JzOyovCiAKLQlpZiAoZGlzayA+PSAwICYmIGNvbmYtPm1pcnJvcnNbZGlza10ucmRldikKKwlpZiAoZGlzayA+PSAwICYmIChyZGV2PXJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpKSE9IE5VTEwpCiAJCWF0b21pY19pbmMoJmNvbmYtPm1pcnJvcnNbZGlza10ucmRldi0+bnJfcGVuZGluZyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTU4Myw4ICs1ODQsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspIHsKLQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CiAKIAkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwpAQCAtNjE0LDggKzYxNSw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3MgJiYgcmV0ID09IDA7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiAhcmRldi0+ZmF1bHR5KSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHJkZXYtPmJkZXY7CiAJCQlyZXF1ZXN0X3F1ZXVlX3QgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKIApAQCAtNzY4LDkgKzc2OSwxMCBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyAgaSA8IGNvbmYtPmNvcGllczsgaSsrKSB7CiAJCWludCBkID0gcjEwX2Jpby0+ZGV2c1tpXS5kZXZudW07Ci0JCWlmIChjb25mLT5taXJyb3JzW2RdLnJkZXYgJiYKLQkJICAgICFjb25mLT5taXJyb3JzW2RdLnJkZXYtPmZhdWx0eSkgewotCQkJYXRvbWljX2luYygmY29uZi0+bWlycm9yc1tkXS5yZGV2LT5ucl9wZW5kaW5nKTsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2RdLnJkZXYpOworCQlpZiAocmRldiAmJgorCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CiAJCQlyMTBfYmlvLT5kZXZzW2ldLmJpbyA9IGJpbzsKIAkJfSBlbHNlCiAJCQlyMTBfYmlvLT5kZXZzW2ldLmJpbyA9IE5VTEw7CkBAIC04MjQsNyArODI2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwKIAkJCSAgICAgIGNvbmYtPm1pcnJvcnNbaV0ucmRldiAmJgotCQkJICAgICAgY29uZi0+bWlycm9yc1tpXS5yZGV2LT5pbl9zeW5jID8gIlUiIDogIl8iKTsKKwkJCSAgICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSA/ICJVIiA6ICJfIik7CiAJc2VxX3ByaW50ZihzZXEsICJdIik7CiB9CiAKQEAgLTgzOSw3ICs4NDEsNyBAQAogCSAqIG5leHQgbGV2ZWwgdXAga25vdy4KIAkgKiBlbHNlIG1hcmsgdGhlIGRyaXZlIGFzIGZhaWxlZAogCSAqLwotCWlmIChyZGV2LT5pbl9zeW5jCisJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykKIAkgICAgJiYgY29uZi0+d29ya2luZ19kaXNrcyA9PSAxKQogCQkvKgogCQkgKiBEb24ndCBmYWlsIHRoZSBkcml2ZSwganVzdCByZXR1cm4gYW4gSU8gZXJyb3IuCkBAIC04NDksNyArODUxLDcgQEAKIAkJICogcmVhbGx5IGRlYWQiIHRlc3RzLi4uCiAJCSAqLwogCQlyZXR1cm47Ci0JaWYgKHJkZXYtPmluX3N5bmMpIHsKKwlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQltZGRldi0+ZGVncmFkZWQrKzsKIAkJY29uZi0+d29ya2luZ19kaXNrcy0tOwogCQkvKgpAQCAtODU3LDggKzg1OSw4IEBACiAJCSAqLwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX0VSUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQotCXJkZXYtPmluX3N5bmMgPSAwOwotCXJkZXYtPmZhdWx0eSA9IDE7CisJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CiAJbWRkZXYtPnNiX2RpcnR5ID0gMTsKIAlwcmludGsoS0VSTl9BTEVSVCAicmFpZDEwOiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuIFxuIgogCQkiCU9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXNcbiIsCkBAIC04ODMsNyArODg1LDggQEAKIAkJdG1wID0gY29uZi0+bWlycm9ycyArIGk7CiAJCWlmICh0bXAtPnJkZXYpCiAJCQlwcmludGsoIiBkaXNrICVkLCB3bzolZCwgbzolZCwgZGV2OiVzXG4iLAotCQkJCWksICF0bXAtPnJkZXYtPmluX3N5bmMsICF0bXAtPnJkZXYtPmZhdWx0eSwKKwkJCQlpLCAhdGVzdF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpLAorCQkJICAgICAgICAhdGVzdF9iaXQoRmF1bHR5LCAmdG1wLT5yZGV2LT5mbGFncyksCiAJCQkJYmRldm5hbWUodG1wLT5yZGV2LT5iZGV2LGIpKTsKIAl9CiB9CkBAIC05MzYsMTEgKzkzOSwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKIAkJdG1wID0gY29uZi0+bWlycm9ycyArIGk7CiAJCWlmICh0bXAtPnJkZXYKLQkJICAgICYmICF0bXAtPnJkZXYtPmZhdWx0eQotCQkgICAgJiYgIXRtcC0+cmRldi0+aW5fc3luYykgeworCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpKSB7CiAJCQljb25mLT53b3JraW5nX2Rpc2tzKys7CiAJCQltZGRldi0+ZGVncmFkZWQtLTsKLQkJCXRtcC0+cmRldi0+aW5fc3luYyA9IDE7CisJCQlzZXRfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKTsKIAkJfQogCX0KIApAQCAtOTgwLDcgKzk4Myw3IEBACiAJCQlwLT5oZWFkX3Bvc2l0aW9uID0gMDsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IG1pcnJvcjsKIAkJCWZvdW5kID0gMTsKLQkJCXAtPnJkZXYgPSByZGV2OworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtOTk4LDcgKzEwMDEsNyBAQAogCXByaW50X2NvbmYoY29uZik7CiAJcmRldiA9IHAtPnJkZXY7CiAJaWYgKHJkZXYpIHsKLQkJaWYgKHJkZXYtPmluX3N5bmMgfHwKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgfHwKIAkJICAgIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBhYm9ydDsKQEAgLTE0MTQsNyArMTQxNyw3IEBACiAKIAkJZm9yIChpPTAgOyBpPGNvbmYtPnJhaWRfZGlza3M7IGkrKykKIAkJCWlmIChjb25mLT5taXJyb3JzW2ldLnJkZXYgJiYKLQkJCSAgICAhY29uZi0+bWlycm9yc1tpXS5yZGV2LT5pbl9zeW5jKSB7CisJCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSkgewogCQkJCS8qIHdhbnQgdG8gcmVjb25zdHJ1Y3QgdGhpcyBkZXZpY2UgKi8KIAkJCQlyMTBiaW9fdCAqcmIyID0gcjEwX2JpbzsKIApAQCAtMTQzNSw3ICsxNDM4LDcgQEAKIAkJCQlmb3IgKGo9MDsgajxjb25mLT5jb3BpZXM7aisrKSB7CiAJCQkJCWludCBkID0gcjEwX2Jpby0+ZGV2c1tqXS5kZXZudW07CiAJCQkJCWlmIChjb25mLT5taXJyb3JzW2RdLnJkZXYgJiYKLQkJCQkJICAgIGNvbmYtPm1pcnJvcnNbZF0ucmRldi0+aW5fc3luYykgeworCQkJCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZmxhZ3MpKSB7CiAJCQkJCQkvKiBUaGlzIGlzIHdoZXJlIHdlIHJlYWQgZnJvbSAqLwogCQkJCQkJYmlvID0gcjEwX2Jpby0+ZGV2c1swXS5iaW87CiAJCQkJCQliaW8tPmJpX25leHQgPSBiaW9saXN0OwpAQCAtMTUxMSw3ICsxNTE0LDcgQEAKIAkJCWJpbyA9IHIxMF9iaW8tPmRldnNbaV0uYmlvOwogCQkJYmlvLT5iaV9lbmRfaW8gPSBOVUxMOwogCQkJaWYgKGNvbmYtPm1pcnJvcnNbZF0ucmRldiA9PSBOVUxMIHx8Ci0JCQkgICAgY29uZi0+bWlycm9yc1tkXS5yZGV2LT5mYXVsdHkpCisJCQkgICAgdGVzdF9iaXQoRmF1bHR5LCAmY29uZi0+bWlycm9yc1tkXS5yZGV2LT5mbGFncykpCiAJCQkJY29udGludWU7CiAJCQlhdG9taWNfaW5jKCZjb25mLT5taXJyb3JzW2RdLnJkZXYtPm5yX3BlbmRpbmcpOwogCQkJYXRvbWljX2luYygmcjEwX2Jpby0+cmVtYWluaW5nKTsKQEAgLTE2OTcsNyArMTcwMCw3IEBACiAJCQltZGRldi0+cXVldWUtPm1heF9zZWN0b3JzID0gKFBBR0VfU0laRT4+OSk7CiAKIAkJZGlzay0+aGVhZF9wb3NpdGlvbiA9IDA7Ci0JCWlmICghcmRldi0+ZmF1bHR5ICYmIHJkZXYtPmluX3N5bmMpCisJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQljb25mLT53b3JraW5nX2Rpc2tzKys7CiAJfQogCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCAxMjIzZTk4Li5lMmE0MDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0yOTMsOSArMjkzLDMxIEBACiAJcmV0dXJuIHNoOwogfQogCi1zdGF0aWMgaW50IGdyb3dfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYsIGludCBudW0pCitzdGF0aWMgaW50IGdyb3dfb25lX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYpCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKKwlzaCA9IGttZW1fY2FjaGVfYWxsb2MoY29uZi0+c2xhYl9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaCkKKwkJcmV0dXJuIDA7CisJbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChjb25mLT5yYWlkX2Rpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKKwlzaC0+cmFpZF9jb25mID0gY29uZjsKKwlzcGluX2xvY2tfaW5pdCgmc2gtPmxvY2spOworCisJaWYgKGdyb3dfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcykpIHsKKwkJc2hyaW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOworCQlrbWVtX2NhY2hlX2ZyZWUoY29uZi0+c2xhYl9jYWNoZSwgc2gpOworCQlyZXR1cm4gMDsKKwl9CisJLyogd2UganVzdCBjcmVhdGVkIGFuIGFjdGl2ZSBzdHJpcGUgc28uLi4gKi8KKwlhdG9taWNfc2V0KCZzaC0+Y291bnQsIDEpOworCWF0b21pY19pbmMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKKwlJTklUX0xJU1RfSEVBRCgmc2gtPmxydSk7CisJcmVsZWFzZV9zdHJpcGUoc2gpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdyb3dfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYsIGludCBudW0pCit7CiAJa21lbV9jYWNoZV90ICpzYzsKIAlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CiAKQEAgLTMwOCw0OCArMzMwLDM5IEBACiAJCXJldHVybiAxOwogCWNvbmYtPnNsYWJfY2FjaGUgPSBzYzsKIAl3aGlsZSAobnVtLS0pIHsKLQkJc2ggPSBrbWVtX2NhY2hlX2FsbG9jKHNjLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzaCkKKwkJaWYgKCFncm93X29uZV9zdHJpcGUoY29uZikpCiAJCQlyZXR1cm4gMTsKLQkJbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKLQkJc2gtPnJhaWRfY29uZiA9IGNvbmY7Ci0JCXNwaW5fbG9ja19pbml0KCZzaC0+bG9jayk7Ci0KLQkJaWYgKGdyb3dfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcykpIHsKLQkJCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKTsKLQkJCWttZW1fY2FjaGVfZnJlZShzYywgc2gpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJLyogd2UganVzdCBjcmVhdGVkIGFuIGFjdGl2ZSBzdHJpcGUgc28uLi4gKi8KLQkJYXRvbWljX3NldCgmc2gtPmNvdW50LCAxKTsKLQkJYXRvbWljX2luYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwotCQlJTklUX0xJU1RfSEVBRCgmc2gtPmxydSk7Ci0JCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNocmlua19zdHJpcGVzKHJhaWQ1X2NvbmZfdCAqY29uZikKK3N0YXRpYyBpbnQgZHJvcF9vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwogCi0Jd2hpbGUgKDEpIHsKLQkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQlzaCA9IGdldF9mcmVlX3N0cmlwZShjb25mKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCWlmICghc2gpCi0JCQlicmVhazsKLQkJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKQotCQkJQlVHKCk7Ci0JCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKTsKLQkJa21lbV9jYWNoZV9mcmVlKGNvbmYtPnNsYWJfY2FjaGUsIHNoKTsKLQkJYXRvbWljX2RlYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwotCX0KKwlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CisJc2ggPSBnZXRfZnJlZV9zdHJpcGUoY29uZik7CisJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CisJaWYgKCFzaCkKKwkJcmV0dXJuIDA7CisJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKQorCQlCVUcoKTsKKwlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7CisJa21lbV9jYWNoZV9mcmVlKGNvbmYtPnNsYWJfY2FjaGUsIHNoKTsKKwlhdG9taWNfZGVjKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNocmlua19zdHJpcGVzKHJhaWQ1X2NvbmZfdCAqY29uZikKK3sKKwl3aGlsZSAoZHJvcF9vbmVfc3RyaXBlKGNvbmYpKQorCQk7CisKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZi0+c2xhYl9jYWNoZSk7CiAJY29uZi0+c2xhYl9jYWNoZSA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdCAoc3RydWN0IGJpbyAqIGJpLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwKK3N0YXRpYyBpbnQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICogYmksIHVuc2lnbmVkIGludCBieXRlc19kb25lLAogCQkJCSAgIGludCBlcnJvcikKIHsKICAJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IGJpLT5iaV9wcml2YXRlOwpAQCAtNDAxLDEwICs0MTQsMzUgQEAKIAkJfQogI2Vsc2UKIAkJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpOwotI2VuZGlmCQkKKyNlbmRpZgorCQlpZiAodGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncykpIHsKKwkJCXByaW50aygiUjU6IHJlYWQgZXJyb3IgY29ycmVjdGVkISFcbiIpOworCQkJY2xlYXJfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpOworCQkJY2xlYXJfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKTsKKwkJfQorCQlpZiAoYXRvbWljX3JlYWQoJmNvbmYtPmRpc2tzW2ldLnJkZXYtPnJlYWRfZXJyb3JzKSkKKwkJCWF0b21pY19zZXQoJmNvbmYtPmRpc2tzW2ldLnJkZXYtPnJlYWRfZXJyb3JzLCAwKTsKIAl9IGVsc2UgewotCQltZF9lcnJvcihjb25mLT5tZGRldiwgY29uZi0+ZGlza3NbaV0ucmRldik7CisJCWludCByZXRyeSA9IDA7CiAJCWNsZWFyX2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpOworCQlhdG9taWNfaW5jKCZjb25mLT5kaXNrc1tpXS5yZGV2LT5yZWFkX2Vycm9ycyk7CisJCWlmIChjb25mLT5tZGRldi0+ZGVncmFkZWQpCisJCQlwcmludGsoIlI1OiByZWFkIGVycm9yIG5vdCBjb3JyZWN0YWJsZS5cbiIpOworCQllbHNlIGlmICh0ZXN0X2JpdChSNV9SZVdyaXRlLCAmc2gtPmRldltpXS5mbGFncykpCisJCQkvKiBPaCwgbm8hISEgKi8KKwkJCXByaW50aygiUjU6IHJlYWQgZXJyb3IgTk9UIGNvcnJlY3RlZCEhXG4iKTsKKwkJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmNvbmYtPmRpc2tzW2ldLnJkZXYtPnJlYWRfZXJyb3JzKQorCQkJID4gY29uZi0+bWF4X25yX3N0cmlwZXMpCisJCQlwcmludGsoInJhaWQ1OiBUb28gbWFueSByZWFkIGVycm9ycywgZmFpbGluZyBkZXZpY2UuXG4iKTsKKwkJZWxzZQorCQkJcmV0cnkgPSAxOworCQlpZiAocmV0cnkpCisJCQlzZXRfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpOworCQllbHNlIHsKKwkJCWNsZWFyX2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsKKwkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmc2gtPmRldltpXS5mbGFncyk7CisJCQltZF9lcnJvcihjb25mLT5tZGRldiwgY29uZi0+ZGlza3NbaV0ucmRldik7CisJCX0KIAl9CiAJcmRldl9kZWNfcGVuZGluZyhjb25mLT5kaXNrc1tpXS5yZGV2LCBjb25mLT5tZGRldik7CiAjaWYgMApAQCAtNDg3LDE5ICs1MjUsMTkgQEAKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCVBSSU5USygicmFpZDU6IGVycm9yIGNhbGxlZFxuIik7CiAKLQlpZiAoIXJkZXYtPmZhdWx0eSkgeworCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCW1kZGV2LT5zYl9kaXJ0eSA9IDE7Ci0JCWlmIChyZGV2LT5pbl9zeW5jKSB7CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQljb25mLT53b3JraW5nX2Rpc2tzLS07CiAJCQltZGRldi0+ZGVncmFkZWQrKzsKIAkJCWNvbmYtPmZhaWxlZF9kaXNrcysrOwotCQkJcmRldi0+aW5fc3luYyA9IDA7CisJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJCS8qCiAJCQkgKiBpZiByZWNvdmVyeSB3YXMgcnVubmluZywgbWFrZSBzdXJlIGl0IGFib3J0cy4KIAkJCSAqLwogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQl9Ci0JCXJkZXYtPmZhdWx0eSA9IDE7CisJCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCQlwcmludGsgKEtFUk5fQUxFUlQKIAkJCSJyYWlkNTogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiIKIAkJCSIgT3BlcmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlc1xuIiwKQEAgLTk2NSw3ICsxMDAzLDEzIEBACiAJCX0KIAkJaWYgKGRldi0+d3JpdHRlbikgd3JpdHRlbisrOwogCQlyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsgLyogRklYTUUsIHNob3VsZCBJIGJlIGxvb2tpbmcgcmRldiAqLwotCQlpZiAoIXJkZXYgfHwgIXJkZXYtPmluX3N5bmMpIHsKKwkJaWYgKCFyZGV2IHx8ICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCQkvKiBUaGUgUmVhZEVycm9yIGZsYWcgd2lsIGp1c3QgYmUgY29uZnVzaW5nIG5vdyAqLworCQkJY2xlYXJfYml0KFI1X1JlYWRFcnJvciwgJmRldi0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KFI1X1JlV3JpdGUsICZkZXYtPmZsYWdzKTsKKwkJfQorCQlpZiAoIXJkZXYgfHwgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykKKwkJICAgIHx8IHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJmRldi0+ZmxhZ3MpKSB7CiAJCQlmYWlsZWQrKzsKIAkJCWZhaWxlZF9udW0gPSBpOwogCQl9IGVsc2UKQEAgLTk4MCw2ICsxMDI0LDE0IEBACiAJaWYgKGZhaWxlZCA+IDEgJiYgdG9fcmVhZCt0b193cml0ZSt3cml0dGVuKSB7CiAJCWZvciAoaT1kaXNrczsgaS0tOyApIHsKIAkJCWludCBiaXRtYXBfZW5kID0gMDsKKworCQkJaWYgKHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpKSB7CisJCQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7CisJCQkJaWYgKHJkZXYgJiYgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwkJCQkJLyogbXVsdGlwbGUgcmVhZCBmYWlsdXJlcyBpbiBvbmUgc3RyaXBlICovCisJCQkJCW1kX2Vycm9yKGNvbmYtPm1kZGV2LCByZGV2KTsKKwkJCX0KKwogCQkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkJLyogZmFpbCBhbGwgd3JpdGVzIGZpcnN0ICovCiAJCQliaSA9IHNoLT5kZXZbaV0udG93cml0ZTsKQEAgLTEwMTUsNyArMTA2Nyw4IEBACiAJCQl9CiAKIAkJCS8qIGZhaWwgYW55IHJlYWRzIGlmIHRoaXMgZGV2aWNlIGlzIG5vbi1vcGVyYXRpb25hbCAqLwotCQkJaWYgKCF0ZXN0X2JpdChSNV9JbnN5bmMsICZzaC0+ZGV2W2ldLmZsYWdzKSkgeworCQkJaWYgKCF0ZXN0X2JpdChSNV9JbnN5bmMsICZzaC0+ZGV2W2ldLmZsYWdzKSB8fAorCQkJICAgIHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpKSB7CiAJCQkJYmkgPSBzaC0+ZGV2W2ldLnRvcmVhZDsKIAkJCQlzaC0+ZGV2W2ldLnRvcmVhZCA9IE5VTEw7CiAJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9PdmVybGFwLCAmc2gtPmRldltpXS5mbGFncykpCkBAIC0xMjQ3LDYgKzEzMDAsMTEgQEAKIAkJCSAgICAhbWVtY21wKHBhZ2VhLCBwYWdlYSs0LCBTVFJJUEVfU0laRS00KSkgewogCQkJCS8qIHBhcml0eSBpcyBjb3JyZWN0IChvbiBkaXNjLCBub3QgaW4gYnVmZmVyIGFueSBtb3JlKSAqLwogCQkJCXNldF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CisJCQl9IGVsc2UgeworCQkJCWNvbmYtPm1kZGV2LT5yZXN5bmNfbWlzbWF0Y2hlcyArPSBTVFJJUEVfU0VDVE9SUzsKKwkJCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssICZjb25mLT5tZGRldi0+cmVjb3ZlcnkpKQorCQkJCQkvKiBkb24ndCB0cnkgdG8gcmVwYWlyISEgKi8KKwkJCQkJc2V0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsKIAkJCX0KIAkJfQogCQlpZiAoIXRlc3RfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpKSB7CkBAIC0xMjc0LDcgKzEzMzIsMjcgQEAKIAkJbWRfZG9uZV9zeW5jKGNvbmYtPm1kZGV2LCBTVFJJUEVfU0VDVE9SUywxKTsKIAkJY2xlYXJfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRlKTsKIAl9Ci0JCisKKwkvKiBJZiB0aGUgZmFpbGVkIGRyaXZlIGlzIGp1c3QgYSBSZWFkRXJyb3IsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byBwcm9ncmVzcworCSAqIHRoZSByZXBhaXIvY2hlY2sgcHJvY2VzcworCSAqLworCWlmIChmYWlsZWQgPT0gMSAmJiAhIGNvbmYtPm1kZGV2LT5ybyAmJgorCSAgICB0ZXN0X2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ZhaWxlZF9udW1dLmZsYWdzKQorCSAgICAmJiAhdGVzdF9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltmYWlsZWRfbnVtXS5mbGFncykKKwkgICAgJiYgdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ZhaWxlZF9udW1dLmZsYWdzKQorCQkpIHsKKwkJZGV2ID0gJnNoLT5kZXZbZmFpbGVkX251bV07CisJCWlmICghdGVzdF9iaXQoUjVfUmVXcml0ZSwgJmRldi0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJmRldi0+ZmxhZ3MpOworCQkJc2V0X2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFncyk7CisJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOworCQl9IGVsc2UgeworCQkJLyogbGV0J3MgcmVhZCBpdCBiYWNrICovCisJCQlzZXRfYml0KFI1X1dhbnRyZWFkLCAmZGV2LT5mbGFncyk7CisJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOworCQl9CisJfQorCiAJc3Bpbl91bmxvY2soJnNoLT5sb2NrKTsKIAogCXdoaWxlICgoYmk9cmV0dXJuX2JpKSkgewpAQCAtMTMwNSw4ICsxMzgzLDggQEAKIAkJCWJpLT5iaV9lbmRfaW8gPSByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0OwogIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiByZGV2LT5mYXVsdHkpCisJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+ZGlza3NbaV0ucmRldik7CisJCWlmIChyZGV2ICYmIHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCXJkZXYgPSBOVUxMOwogCQlpZiAocmRldikKIAkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwpAQCAtMTM3OSw4ICsxNDU3LDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrczsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiAhcmRldi0+ZmF1bHR5ICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CiAKIAkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwpAQCAtMTQyNCw4ICsxNTAyLDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrcyAmJiByZXQgPT0gMDsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiAhcmRldi0+ZmF1bHR5KSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+ZGlza3NbaV0ucmRldik7CisJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSByZGV2LT5iZGV2OwogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAKQEAgLTE1NjcsNiArMTY0NSw3IEBACiAJCXJldHVybiBydjsKIAl9CiAJaWYgKCFiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIsICZzeW5jX2Jsb2NrcywgMSkgJiYKKwkgICAgIXRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkgJiYKIAkgICAgIWNvbmYtPmZ1bGxzeW5jICYmIHN5bmNfYmxvY2tzID49IFNUUklQRV9TRUNUT1JTKSB7CiAJCS8qIHdlIGNhbiBza2lwIHRoaXMgYmxvY2ssIGFuZCBwcm9iYWJseSBtb3JlICovCiAJCXN5bmNfYmxvY2tzIC89IFNUUklQRV9TRUNUT1JTOwpAQCAtMTY2Myw2ICsxNzQyLDc0IEBACiAJUFJJTlRLKCItLS0gcmFpZDVkIGluYWN0aXZlXG4iKTsKIH0KIAorc3RhdGljIHNzaXplX3QKK3JhaWQ1X3Nob3dfc3RyaXBlX2NhY2hlX3NpemUobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCit7CisJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisJaWYgKGNvbmYpCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgY29uZi0+bWF4X25yX3N0cmlwZXMpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityYWlkNV9zdG9yZV9zdHJpcGVfY2FjaGVfc2l6ZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbikKK3sKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKwljaGFyICplbmQ7CisJaW50IG5ldzsKKwlpZiAobGVuID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjb25mKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5ldyA9IHNpbXBsZV9zdHJ0b3VsKHBhZ2UsICZlbmQsIDEwKTsKKwlpZiAoISpwYWdlIHx8ICgqZW5kICYmICplbmQgIT0gJ1xuJykgKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobmV3IDw9IDE2IHx8IG5ldyA+IDMyNzY4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3aGlsZSAobmV3IDwgY29uZi0+bWF4X25yX3N0cmlwZXMpIHsKKwkJaWYgKGRyb3Bfb25lX3N0cmlwZShjb25mKSkKKwkJCWNvbmYtPm1heF9ucl9zdHJpcGVzLS07CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwl3aGlsZSAobmV3ID4gY29uZi0+bWF4X25yX3N0cmlwZXMpIHsKKwkJaWYgKGdyb3dfb25lX3N0cmlwZShjb25mKSkKKwkJCWNvbmYtPm1heF9ucl9zdHJpcGVzKys7CisJCWVsc2UgYnJlYWs7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkKK3JhaWQ1X3N0cmlwZWNhY2hlX3NpemUgPSBfX0FUVFIoc3RyaXBlX2NhY2hlX3NpemUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCXJhaWQ1X3Nob3dfc3RyaXBlX2NhY2hlX3NpemUsCisJCQkJcmFpZDVfc3RvcmVfc3RyaXBlX2NhY2hlX3NpemUpOworCitzdGF0aWMgc3NpemVfdAorc3RyaXBlX2NhY2hlX2FjdGl2ZV9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCWlmIChjb25mKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGF0b21pY19yZWFkKCZjb25mLT5hY3RpdmVfc3RyaXBlcykpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkKK3JhaWQ1X3N0cmlwZWNhY2hlX2FjdGl2ZSA9IF9fQVRUUl9STyhzdHJpcGVfY2FjaGVfYWN0aXZlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJhaWQ1X2F0dHJzW10gPSAgeworCSZyYWlkNV9zdHJpcGVjYWNoZV9zaXplLmF0dHIsCisJJnJhaWQ1X3N0cmlwZWNhY2hlX2FjdGl2ZS5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcmFpZDVfYXR0cnNfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAorCS5hdHRycyA9IHJhaWQ1X2F0dHJzLAorfTsKKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwpAQCAtMTcwOSw3ICsxODU2LDcgQEAKIAogCQlkaXNrLT5yZGV2ID0gcmRldjsKIAotCQlpZiAocmRldi0+aW5fc3luYykgeworCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDU6IGRldmljZSAlcyBvcGVyYXRpb25hbCBhcyByYWlkIgogCQkJCSIgZGlzayAlZFxuIiwgYmRldm5hbWUocmRldi0+YmRldixiKSwKQEAgLTE4MDQsNiArMTk1MSw3IEBACiAJfQogCiAJLyogT2ssIGV2ZXJ5dGhpbmcgaXMganVzdCBmaW5lIG5vdyAqLworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmbWRkZXYtPmtvYmosICZyYWlkNV9hdHRyc19ncm91cCk7CiAKIAlpZiAobWRkZXYtPmJpdG1hcCkKIAkJbWRkZXYtPnRocmVhZC0+dGltZW91dCA9IG1kZGV2LT5iaXRtYXAtPmRhZW1vbl9zbGVlcCAqIEhaOwpAQCAtMTgyOCw3ICsxOTc2LDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgc3RvcCAobWRkZXZfdCAqbWRkZXYpCitzdGF0aWMgaW50IHN0b3AobWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsKIApAQCAtMTgzNyw2ICsxOTg1LDcgQEAKIAlzaHJpbmtfc3RyaXBlcyhjb25mKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBjb25mLT5zdHJpcGVfaGFzaHRibCwgSEFTSF9QQUdFU19PUkRFUik7CiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtZGRldi0+a29iaiwgJnJhaWQ1X2F0dHJzX2dyb3VwKTsKIAlrZnJlZShjb25mKTsKIAltZGRldi0+cHJpdmF0ZSA9IE5VTEw7CiAJcmV0dXJuIDA7CkBAIC0xODg3LDcgKzIwMzYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspCiAJCXNlcV9wcmludGYgKHNlcSwgIiVzIiwKIAkJCSAgICAgICBjb25mLT5kaXNrc1tpXS5yZGV2ICYmCi0JCQkgICAgICAgY29uZi0+ZGlza3NbaV0ucmRldi0+aW5fc3luYyA/ICJVIiA6ICJfIik7CisJCQkgICAgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPmRpc2tzW2ldLnJkZXYtPmZsYWdzKSA/ICJVIiA6ICJfIik7CiAJc2VxX3ByaW50ZiAoc2VxLCAiXSIpOwogI2lmIFJBSUQ1X0RFQlVHCiAjZGVmaW5lIEQoeCkgXApAQCAtMTkxNCw3ICsyMDYzLDcgQEAKIAkJdG1wID0gY29uZi0+ZGlza3MgKyBpOwogCQlpZiAodG1wLT5yZGV2KQogCQlwcmludGsoIiBkaXNrICVkLCBvOiVkLCBkZXY6JXNcbiIsCi0JCQlpLCAhdG1wLT5yZGV2LT5mYXVsdHksCisJCQlpLCAhdGVzdF9iaXQoRmF1bHR5LCAmdG1wLT5yZGV2LT5mbGFncyksCiAJCQliZGV2bmFtZSh0bXAtPnJkZXYtPmJkZXYsYikpOwogCX0KIH0KQEAgLTE5MjgsMTIgKzIwNzcsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CiAJCXRtcCA9IGNvbmYtPmRpc2tzICsgaTsKIAkJaWYgKHRtcC0+cmRldgotCQkgICAgJiYgIXRtcC0+cmRldi0+ZmF1bHR5Ci0JCSAgICAmJiAhdG1wLT5yZGV2LT5pbl9zeW5jKSB7CisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmdG1wLT5yZGV2LT5mbGFncykKKwkJICAgICYmICF0ZXN0X2JpdChJbl9zeW5jLCAmdG1wLT5yZGV2LT5mbGFncykpIHsKIAkJCW1kZGV2LT5kZWdyYWRlZC0tOwogCQkJY29uZi0+ZmFpbGVkX2Rpc2tzLS07CiAJCQljb25mLT53b3JraW5nX2Rpc2tzKys7Ci0JCQl0bXAtPnJkZXYtPmluX3N5bmMgPSAxOworCQkJc2V0X2JpdChJbl9zeW5jLCAmdG1wLT5yZGV2LT5mbGFncyk7CiAJCX0KIAl9CiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsKQEAgLTE5NTAsNyArMjA5OSw3IEBACiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsKIAlyZGV2ID0gcC0+cmRldjsKIAlpZiAocmRldikgewotCQlpZiAocmRldi0+aW5fc3luYyB8fAorCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAogCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIGFib3J0OwpAQCAtMTk4NSwxMiArMjEzNCwxMiBAQAogCSAqLwogCWZvciAoZGlzaz0wOyBkaXNrIDwgbWRkZXYtPnJhaWRfZGlza3M7IGRpc2srKykKIAkJaWYgKChwPWNvbmYtPmRpc2tzICsgZGlzayktPnJkZXYgPT0gTlVMTCkgewotCQkJcmRldi0+aW5fc3luYyA9IDA7CisJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IGRpc2s7CiAJCQlmb3VuZCA9IDE7CiAJCQlpZiAocmRldi0+c2F2ZWRfcmFpZF9kaXNrICE9IGRpc2spCiAJCQkJY29uZi0+ZnVsbHN5bmMgPSAxOwotCQkJcC0+cmRldiA9IHJkZXY7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIocC0+cmRldiwgcmRldik7CiAJCQlicmVhazsKIAkJfQogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jIGIvZHJpdmVycy9tZC9yYWlkNm1haW4uYwppbmRleCA3NzU3ODY5Li5lYWU1YTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKQEAgLTUwNywxOSArNTA3LDE5IEBACiAJcmFpZDZfY29uZl90ICpjb25mID0gKHJhaWQ2X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsKIAlQUklOVEsoInJhaWQ2OiBlcnJvciBjYWxsZWRcbiIpOwogCi0JaWYgKCFyZGV2LT5mYXVsdHkpIHsKKwlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQltZGRldi0+c2JfZGlydHkgPSAxOwotCQlpZiAocmRldi0+aW5fc3luYykgeworCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJY29uZi0+d29ya2luZ19kaXNrcy0tOwogCQkJbWRkZXYtPmRlZ3JhZGVkKys7CiAJCQljb25mLT5mYWlsZWRfZGlza3MrKzsKLQkJCXJkZXYtPmluX3N5bmMgPSAwOworCQkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCQkvKgogCQkJICogaWYgcmVjb3Zlcnkgd2FzIHJ1bm5pbmcsIG1ha2Ugc3VyZSBpdCBhYm9ydHMuCiAJCQkgKi8KIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJfQotCQlyZGV2LT5mYXVsdHkgPSAxOworCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAkJcHJpbnRrIChLRVJOX0FMRVJUCiAJCQkicmFpZDY6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS4iCiAJCQkiIE9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXNcbiIsCkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCQl9CiAJCWlmIChkZXYtPndyaXR0ZW4pIHdyaXR0ZW4rKzsKIAkJcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7IC8qIEZJWE1FLCBzaG91bGQgSSBiZSBsb29raW5nIHJkZXYgKi8KLQkJaWYgKCFyZGV2IHx8ICFyZGV2LT5pbl9zeW5jKSB7CisJCWlmICghcmRldiB8fCAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJaWYgKCBmYWlsZWQgPCAyICkKIAkJCQlmYWlsZWRfbnVtW2ZhaWxlZF0gPSBpOwogCQkJZmFpbGVkKys7CkBAIC0xNDY0LDggKzE0NjQsOCBAQAogCQkJYmktPmJpX2VuZF9pbyA9IHJhaWQ2X2VuZF9yZWFkX3JlcXVlc3Q7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgcmRldi0+ZmF1bHR5KQorCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQlyZGV2ID0gTlVMTDsKIAkJaWYgKHJkZXYpCiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKQEAgLTE1MzgsOCArMTUzOCw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3M7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKHJkZXYtPmJkZXYpOwogCiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKQEAgLTE1ODMsOCArMTU4Myw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3MgJiYgcmV0ID09IDA7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gcmRldi0+YmRldjsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCkBAIC0xODY4LDcgKzE4NjgsNyBAQAogCiAJCWRpc2stPnJkZXYgPSByZGV2OwogCi0JCWlmIChyZGV2LT5pbl9zeW5jKSB7CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAJCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNjogZGV2aWNlICVzIG9wZXJhdGlvbmFsIGFzIHJhaWQiCiAJCQkgICAgICAgIiBkaXNrICVkXG4iLCBiZGV2bmFtZShyZGV2LT5iZGV2LGIpLApAQCAtMjA1Miw3ICsyMDUyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQogIAkJc2VxX3ByaW50ZiAoc2VxLCAiJXMiLAogCQkJICAgIGNvbmYtPmRpc2tzW2ldLnJkZXYgJiYKLQkJCSAgICBjb25mLT5kaXNrc1tpXS5yZGV2LT5pbl9zeW5jID8gIlUiIDogIl8iKTsKKwkJCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+ZGlza3NbaV0ucmRldi0+ZmxhZ3MpID8gIlUiIDogIl8iKTsKIAlzZXFfcHJpbnRmIChzZXEsICJdIik7CiAjaWYgUkFJRDZfRFVNUFNUQVRFCiAJc2VxX3ByaW50ZiAoc2VxLCAiXG4iKTsKQEAgLTIwNzgsNyArMjA3OCw3IEBACiAJCXRtcCA9IGNvbmYtPmRpc2tzICsgaTsKIAkJaWYgKHRtcC0+cmRldikKIAkJcHJpbnRrKCIgZGlzayAlZCwgbzolZCwgZGV2OiVzXG4iLAotCQkJaSwgIXRtcC0+cmRldi0+ZmF1bHR5LAorCQkJaSwgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpLAogCQkJYmRldm5hbWUodG1wLT5yZGV2LT5iZGV2LGIpKTsKIAl9CiB9CkBAIC0yMDkyLDEyICsyMDkyLDEyIEBACiAJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgewogCQl0bXAgPSBjb25mLT5kaXNrcyArIGk7CiAJCWlmICh0bXAtPnJkZXYKLQkJICAgICYmICF0bXAtPnJkZXYtPmZhdWx0eQotCQkgICAgJiYgIXRtcC0+cmRldi0+aW5fc3luYykgeworCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpKSB7CiAJCQltZGRldi0+ZGVncmFkZWQtLTsKIAkJCWNvbmYtPmZhaWxlZF9kaXNrcy0tOwogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwotCQkJdG1wLT5yZGV2LT5pbl9zeW5jID0gMTsKKwkJCXNldF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpOwogCQl9CiAJfQogCXByaW50X3JhaWQ2X2NvbmYoY29uZik7CkBAIC0yMTE0LDcgKzIxMTQsNyBAQAogCXByaW50X3JhaWQ2X2NvbmYoY29uZik7CiAJcmRldiA9IHAtPnJkZXY7CiAJaWYgKHJkZXYpIHsKLQkJaWYgKHJkZXYtPmluX3N5bmMgfHwKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgfHwKIAkJICAgIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBhYm9ydDsKQEAgLTIxNDksMTIgKzIxNDksMTIgQEAKIAkgKi8KIAlmb3IgKGRpc2s9MDsgZGlzayA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBkaXNrKyspCiAJCWlmICgocD1jb25mLT5kaXNrcyArIGRpc2spLT5yZGV2ID09IE5VTEwpIHsKLQkJCXJkZXYtPmluX3N5bmMgPSAwOworCQkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBkaXNrOwogCQkJZm91bmQgPSAxOwogCQkJaWYgKHJkZXYtPnNhdmVkX3JhaWRfZGlzayAhPSBkaXNrKQogCQkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKLQkJCXAtPnJkZXYgPSByZGV2OworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwogCQkJYnJlYWs7CiAJCX0KIAlwcmludF9yYWlkNl9jb25mKGNvbmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1jb21tb24uYwppbmRleCAzMWZjY2I0Li40YjcxZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1jb21tb24uYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJWyA0NiBdID0gS0VZX0JMVUUsCiAJWyAyNCBdID0gS0VZX0tQUExVUywJCS8qIGZpbmUgdHVuZSArICovCiAJWyAyNSBdID0gS0VZX0tQTUlOVVMsCQkvKiBmaW5lIHR1bmUgLSAqLwotICAgICAgICBbIDMzIF0gPSBLRVlfS1BET1QsCisJWyAzMyBdID0gS0VZX0tQRE9ULAogCVsgMTkgXSA9IEtFWV9LUEVOVEVSLAogCVsgMzQgXSA9IEtFWV9CQUNLLAogCVsgMzUgXSA9IEtFWV9QTEFZUEFVU0UsCkBAIC0yMzksNyArMjM5LDcgQEAKIAlkcHJpbnRrKDEsIiVzOiBrZXkgZXZlbnQgY29kZT0lZCBkb3duPSVkXG4iLAogCQlkZXYtPm5hbWUsaXItPmtleWNvZGUsaXItPmtleXByZXNzZWQpOwogCWlucHV0X3JlcG9ydF9rZXkoZGV2LGlyLT5rZXljb2RlLGlyLT5rZXlwcmVzc2VkKTsKLSAgICAgICAgaW5wdXRfc3luYyhkZXYpOworCWlucHV0X3N5bmMoZGV2KTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKaW5kZXggNDdlMjhiMC4uYTM1MzMwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKQEAgLTEzLDYgKzEzLDggQEAKICNpbmNsdWRlICJiY20zNTEwLmgiCiAjaW5jbHVkZSAic3R2MDI5Ny5oIgogI2luY2x1ZGUgIm10MzEyLmgiCisjaW5jbHVkZSAibGdkdDMzMHguaCIKKyNpbmNsdWRlICJkdmItcGxsLmgiCiAKIC8qIGxuYiBjb250cm9sICovCiAKQEAgLTIzNCw3ICsyMzYsNiBAQAogCS5pbml0dGFiID0gc2Ftc3VuZ190Ym11MjQxMTJfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDAsCi0JLmVuaGFuY2VkX3R1bmluZyA9IDAsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfTEssCiAJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLApAQCAtMjk2LDYgKzI5Nyw1MiBAQAogCXJldHVybiByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBuYW1lLCBmYy0+ZGV2KTsKIH0KIAorc3RhdGljIGludCBsZ2R0MzMwM19wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQoreworCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmZS0+ZHZiLT5wcml2OworCXU4IGJ1Zls0XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPQorCQl7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDQgfTsKKwlpbnQgZXJyOworCisJZHZiX3BsbF9jb25maWd1cmUoJmR2Yl9wbGxfdGR2c190dWE2MDM0LGJ1ZiwgcGFyYW1zLT5mcmVxdWVuY3ksIDApOworCWRwcmludGsoMSwgIiVzOiB0dW5lciBhdCAweCUwMnggYnl0ZXM6IDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgbXNnLmFkZHIsIGJ1ZlswXSxidWZbMV0sYnVmWzJdLGJ1ZlszXSk7CisJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoJmZjLT5pMmNfYWRhcCwgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibGdkdDMzMDM6ICVzIGVycm9yICIKKwkJCSAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXywgYnVmWzBdLCBidWZbMV0sIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJYnVmWzBdID0gMHg4NiB8IDB4MTg7CisJYnVmWzFdID0gMHg1MDsKKwltc2cubGVuID0gMjsKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlcigmZmMtPmkyY19hZGFwLCAmbXNnLCAxKSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJsZ2R0MzMwMzogJXMgZXJyb3IgIgorCQkJICAgIihhZGRyICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAorCQkJICAgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgZXJyKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnIGFpcjJwY19hdHNjX2hkNTAwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgICAgICAgPSAweDU5LAorCS5kZW1vZF9jaGlwICAgICAgICAgID0gTEdEVDMzMDMsCisJLnNlcmlhbF9tcGVnICAgICAgICAgPSAweDA0LAorCS5wbGxfc2V0ICAgICAgICAgICAgID0gbGdkdDMzMDNfcGxsX3NldCwKKwkuY2xvY2tfcG9sYXJpdHlfZmxpcCA9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IG54dDIwMDJfY29uZmlnIHNhbXN1bmdfdGJtdl9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBhLAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gZmxleGNvcF9mZV9yZXF1ZXN0X2Zpcm13YXJlLApAQCAtNDU4LDYgKzUwNSwxMSBAQAogCQlmYy0+ZGV2X3R5cGUgICAgICAgICAgPSBGQ19BSVJfQVRTQzI7CiAJCWluZm8oImZvdW5kIHRoZSBueHQyMDAyIGF0IGkyYyBhZGRyZXNzOiAweCUwMngiLHNhbXN1bmdfdGJtdl9jb25maWcuZGVtb2RfYWRkcmVzcyk7CiAJfSBlbHNlCisJLyogdHJ5IHRoZSBhaXIgYXRzYyAzbmQgZ2VuZXJhdGlvbiAobGdkdDMzMDMpICovCisJaWYgKChmYy0+ZmUgPSBsZ2R0MzMweF9hdHRhY2goJmFpcjJwY19hdHNjX2hkNTAwMF9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJCWZjLT5kZXZfdHlwZSAgICAgICAgICA9IEZDX0FJUl9BVFNDMzsKKwkJaW5mbygiZm91bmQgdGhlIGxnZHQzMzAzIGF0IGkyYyBhZGRyZXNzOiAweCUwMngiLGFpcjJwY19hdHNjX2hkNTAwMF9jb25maWcuZGVtb2RfYWRkcmVzcyk7CisJfSBlbHNlCiAJLyogdHJ5IHRoZSBhaXIgYXRzYyAxbmQgZ2VuZXJhdGlvbiAoYmNtMzUxMCkvcGFuYXNvbmljIGN0MTBzICovCiAJaWYgKChmYy0+ZmUgPSBiY20zNTEwX2F0dGFjaCgmYWlyMnBjX2F0c2NfZmlyc3RfZ2VuX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJZmMtPmRldl90eXBlICAgICAgICAgID0gRkNfQUlSX0FUU0MxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKaW5kZXggM2EwOGQzOC4uNjIyODJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCkBAIC01MSw2ICs1MSw3IEBACiAJIlNreTJQQy9Ta3lTdGFyIDIgRFZCLVMiLAogCSJTa3kyUEMvU2t5U3RhciAyIERWQi1TIChvbGQgdmVyc2lvbikiLAogCSJDYWJsZTJQQy9DYWJsZVN0YXIgMiBEVkItQyIsCisJIkFpcjJQQy9BaXJTdGFyIDIgQVRTQyAzcmQgZ2VuZXJhdGlvbiAoSEQ1MDAwKSIsCiB9OwogCiBjb25zdCBjaGFyICpmbGV4Y29wX2J1c19uYW1lc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCmluZGV4IDRhZTFlYjUuLjIzY2M2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAlGQ19TS1ksCiAJRkNfU0tZX09MRCwKIAlGQ19DQUJMRSwKKwlGQ19BSVJfQVRTQzMsCiB9IGZsZXhjb3BfZGV2aWNlX3R5cGVfdDsKIAogdHlwZWRlZiBlbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKaW5kZXggMTI4NzNkNC4uMTIzZWQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKQEAgLTE5Myw2ICsxOTMsNyBAQAogCXYyMDQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLG1pc2NfMjA0KTsKIAl2MjA0Lm1pc2NfMjA0LlBlcl9yZXNldF9zaWcgPSAwOwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLG1pc2NfMjA0LHYyMDQpOworCW1zbGVlcCgxKTsKIAl2MjA0Lm1pc2NfMjA0LlBlcl9yZXNldF9zaWcgPSAxOwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLG1pc2NfMjA0LHYyMDQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKaW5kZXggMWU4NWQxNi4uMjMzN2I0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCkBAIC02LDEwICs2LDEyIEBACiAJc2VsZWN0IERWQl9OWFQ2MDAwCiAJc2VsZWN0IERWQl9DWDI0MTEwCiAJc2VsZWN0IERWQl9PUjUxMjExCisJc2VsZWN0IERWQl9MR0RUMzMwWAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFBDSSBjYXJkcyBiYXNlZCBvbiB0aGUgQnQ4eHggUENJIGJyaWRnZS4gRXhhbXBsZXMgYXJlCiAJICB0aGUgTmVidWxhIGNhcmRzLCB0aGUgUGlubmFjbGUgUENUViBjYXJkcywgdGhlIFR3aW5oYW4gRFNUIGNhcmRzLAotCSAgdGhlIHBjSERUViBIRDIwMDAgY2FyZHMsIGFuZCBjZXJ0YWluIEFWZXJNZWRpYSBjYXJkcy4KKwkgIHRoZSBwY0hEVFYgSEQyMDAwIGNhcmRzLCB0aGUgRFZpQ08gRnVzaW9uSERUViBMaXRlIGNhcmRzLCBhbmQKKwkgIHNvbWUgQVZlck1lZGlhIGNhcmRzLgogCiAJICBTaW5jZSB0aGVzZSBjYXJkcyBoYXZlIG5vIE1QRUcgZGVjb2RlciBvbmJvYXJkLCB0aGV5IHRyYW5zbWl0CiAJICBvbmx5IGNvbXByZXNzZWQgTVBFRyBkYXRhIG92ZXIgdGhlIFBDSSBidXMsIHNvIHlvdSBuZWVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IGIzYzlkNzMuLjg5NzdjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC02OTAsOCArNjkwLDggQEAKIAkJLmRldmljZV9pZCA9ICJEVFQtQ0kiLAogCQkub2Zmc2V0ID0gMSwKIAkJLmRzdF90eXBlID0gRFNUX1RZUEVfSVNfVEVSUiwKLQkJLnR5cGVfZmxhZ3MgPSBEU1RfVFlQRV9IQVNfVFMyMDQgfCBEU1RfVFlQRV9IQVNfRldfMiwKLQkJLmRzdF9mZWF0dXJlID0gMAorCQkudHlwZV9mbGFncyA9IERTVF9UWVBFX0hBU19UUzIwNCB8IERTVF9UWVBFX0hBU19ORVdUVU5FIHwgRFNUX1RZUEVfSEFTX0ZXXzIgfCBEU1RfVFlQRV9IQVNfTVVMVElfRkUsCisJCS5kc3RfZmVhdHVyZSA9IERTVF9UWVBFX0hBU19DQQogCX0sCiAKIAl7CkBAIC03OTYsNiArNzk2LDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZHN0X2dldF90dW5lcl9pbmZvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlKQoreworCXU4IGdldF90dW5lcl8xW10gPSB7IDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwl1OCBnZXRfdHVuZXJfMltdID0geyAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKwlnZXRfdHVuZXJfMVs3XSA9IGRzdF9jaGVja19zdW0oZ2V0X3R1bmVyXzEsIDcpOworCWdldF90dW5lcl8yWzddID0gZHN0X2NoZWNrX3N1bShnZXRfdHVuZXJfMiwgNyk7CisJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX01VTFRJX0ZFKSB7CisJCWlmIChkc3RfY29tbWFuZChzdGF0ZSwgZ2V0X3R1bmVyXzIsIDgpIDwgMCkgeworCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIlVuc3VwcG9ydGVkIENvbW1hbmQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChkc3RfY29tbWFuZChzdGF0ZSwgZ2V0X3R1bmVyXzEsIDgpIDwgMCkgeworCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIlVuc3VwcG9ydGVkIENvbW1hbmQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwltZW1zZXQoJnN0YXRlLT5ib2FyZF9pbmZvLCAnXDAnLCA4KTsKKwltZW1jcHkoJnN0YXRlLT5ib2FyZF9pbmZvLCAmc3RhdGUtPnJ4YnVmZmVyLCA4KTsKKwlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfTVVMVElfRkUpIHsKKwkJaWYgKHN0YXRlLT5ib2FyZF9pbmZvWzFdID09IDB4MGIpIHsKKwkJCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19UUzIwNCkKKwkJCQlzdGF0ZS0+dHlwZV9mbGFncyAmPSB+RFNUX1RZUEVfSEFTX1RTMjA0OworCQkJc3RhdGUtPnR5cGVfZmxhZ3MgfD0gRFNUX1RZUEVfSEFTX05FV1RVTkU7CisJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiRFNUIHR5cGUgaGFzIFRTPTE4OCIpOworCQl9IGVsc2UgeworCQkJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX05FV1RVTkUpCisJCQkJc3RhdGUtPnR5cGVfZmxhZ3MgJj0gfkRTVF9UWVBFX0hBU19ORVdUVU5FOworCQkJc3RhdGUtPnR5cGVfZmxhZ3MgfD0gRFNUX1RZUEVfSEFTX1RTMjA0OworCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIkRTVCB0eXBlIGhhcyBUUz0yMDQiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChzdGF0ZS0+Ym9hcmRfaW5mb1swXSA9PSAweGJjKSB7CisJCQlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfVFMyMDQpCisJCQkJc3RhdGUtPnR5cGVfZmxhZ3MgJj0gfkRTVF9UWVBFX0hBU19UUzIwNDsKKwkJCXN0YXRlLT50eXBlX2ZsYWdzIHw9IERTVF9UWVBFX0hBU19ORVdUVU5FOworCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIkRTVCB0eXBlIGhhcyBUUz0xODgsIERhdWdodGVyYm9hcmQ9WyVkXSIsIHN0YXRlLT5ib2FyZF9pbmZvWzFdKTsKKworCQl9IGVsc2UgaWYgKHN0YXRlLT5ib2FyZF9pbmZvWzBdID09IDB4Y2MpIHsKKwkJCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19ORVdUVU5FKQorCQkJCXN0YXRlLT50eXBlX2ZsYWdzICY9IH5EU1RfVFlQRV9IQVNfTkVXVFVORTsKKwkJCXN0YXRlLT50eXBlX2ZsYWdzIHw9IERTVF9UWVBFX0hBU19UUzIwNDsKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJEU1QgdHlwZSBoYXMgVFM9MjA0IERhdWdodGVyYm9hcmQ9WyVkXSIsIHN0YXRlLT5ib2FyZF9pbmZvWzFdKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRzdF9nZXRfZGV2aWNlX2lkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlKQogewogCXU4IHJlcGx5OwpAQCAtODU1LDE1ICs5MDUsMTIgQEAKIAlzdGF0ZS0+ZHN0X3R5cGUgPSB1c2VfZHN0X3R5cGU7CiAJZHN0X3R5cGVfZmxhZ3NfcHJpbnQoc3RhdGUtPnR5cGVfZmxhZ3MpOwogCi0JaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX1RTMjA0KSB7Ci0JCWRzdF9wYWNrc2l6ZShzdGF0ZSwgMjA0KTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkc3RfcHJvYmUoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUpCiB7CisJc2VtYV9pbml0KCZzdGF0ZS0+ZHN0X211dGV4LCAxKTsKIAlpZiAoKHJkY184ODIwX3Jlc2V0KHN0YXRlKSkgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0VSUk9SLCAxLCAiUkRDIDg4MjAgUkVTRVQgRmFpbGVkLiIpOwogCQlyZXR1cm4gLTE7CkBAIC04ODYsNiArOTMzLDEzIEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJNQUM6IFVuc3VwcG9ydGVkIGNvbW1hbmQiKTsKIAkJcmV0dXJuIDA7CiAJfQorCWlmICgoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfTVVMVElfRkUpIHx8IChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19GV19CVUlMRCkpIHsKKwkJaWYgKGRzdF9nZXRfdHVuZXJfaW5mbyhzdGF0ZSkgPCAwKQorCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIlR1bmVyOiBVbnN1cHBvcnRlZCBjb21tYW5kIik7CisJfQorCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19UUzIwNCkgeworCQlkc3RfcGFja3NpemUoc3RhdGUsIDIwNCk7CisJfQogCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19GV19CVUlMRCkgewogCQlpZiAoZHN0X2Z3X3ZlcihzdGF0ZSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiRlc6IFVuc3VwcG9ydGVkIGNvbW1hbmQiKTsKQEAgLTkwNywyMSArOTYxLDIzIEBACiBpbnQgZHN0X2NvbW1hbmQoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHU4ICpkYXRhLCB1OCBsZW4pCiB7CiAJdTggcmVwbHk7CisKKwlkb3duKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlpZiAoKGRzdF9jb21tX2luaXQoc3RhdGUpKSA8IDApIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfTk9USUNFLCAxLCAiRFNUIENvbW11bmljYXRpb24gSW5pdGlhbGl6YXRpb24gRmFpbGVkLiIpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmICh3cml0ZV9kc3Qoc3RhdGUsIGRhdGEsIGxlbikpIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIlRyaW5nIHRvIHJlY292ZXIuLiAiKTsKIAkJaWYgKChkc3RfZXJyb3JfcmVjb3Zlcnkoc3RhdGUpKSA8IDApIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0VSUk9SLCAxLCAiUmVjb3ZlcnkgRmFpbGVkLiIpOwotCQkJcmV0dXJuIC0xOworCQkJZ290byBlcnJvcjsKIAkJfQotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmICgoZHN0X3Bpb19kaXNhYmxlKHN0YXRlKSkgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0VSUk9SLCAxLCAiUElPIERpc2FibGUgRmFpbGVkLiIpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19GV18xKQogCQl1ZGVsYXkoMzAwMCk7CkBAIC05MjksMzYgKzk4NSw0MSBAQAogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIlRyeWluZyB0byByZWNvdmVyLi4gIik7CiAJCWlmICgoZHN0X2Vycm9yX3JlY292ZXJ5KHN0YXRlKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiUmVjb3ZlcnkgRmFpbGVkLiIpOwotCQkJcmV0dXJuIC0xOworCQkJZ290byBlcnJvcjsKIAkJfQotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChyZXBseSAhPSBBQ0spIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIndyaXRlIG5vdCBhY2tub3dsZWRnZWQgMHglMDJ4ICIsIHJlcGx5KTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAobGVuID49IDIgJiYgZGF0YVswXSA9PSAwICYmIChkYXRhWzFdID09IDEgfHwgZGF0YVsxXSA9PSAzKSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZXJyb3I7CiAJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX0ZXXzEpCiAJCXVkZWxheSgzMDAwKTsKIAllbHNlCiAJCXVkZWxheSgyMDAwKTsKIAlpZiAoIWRzdF93YWl0X2RzdF9yZWFkeShzdGF0ZSwgTk9fREVMQVkpKQotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJaWYgKHJlYWRfZHN0KHN0YXRlLCBzdGF0ZS0+cnhidWZmZXIsIEZJWEVEX0NPTU0pKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0RFQlVHLCAxLCAiVHJ5aW5nIHRvIHJlY292ZXIuLiAiKTsKIAkJaWYgKChkc3RfZXJyb3JfcmVjb3Zlcnkoc3RhdGUpKSA8IDApIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJSZWNvdmVyeSBmYWlsZWQuIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlnb3RvIGVycm9yOwogCQl9Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKHN0YXRlLT5yeGJ1ZmZlcls3XSAhPSBkc3RfY2hlY2tfc3VtKHN0YXRlLT5yeGJ1ZmZlciwgNykpIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgImNoZWNrc3VtIGZhaWx1cmUiKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KLQorCXVwKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlyZXR1cm4gMDsKKworZXJyb3I6CisJdXAoJnN0YXRlLT5kc3RfbXV0ZXgpOworCXJldHVybiAtRUlPOworCiB9CiBFWFBPUlRfU1lNQk9MKGRzdF9jb21tYW5kKTsKIApAQCAtMTAxNiw3ICsxMDc3LDcgQEAKIAkJcmV0dXJuIDA7CiAJc3RhdGUtPmRpc2VxX2ZsYWdzICY9IH4oSEFTX0xPQ0spOwogCWlmICghZHN0X3dhaXRfZHN0X3JlYWR5KHN0YXRlLCBOT19ERUxBWSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVJTzsKIAlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfTkVXVFVORSkKIAkJLyogaG93IHRvIGdldCB2YXJpYWJsZSBsZW5ndGggcmVwbHkgPz8/PyAqLwogCQlyZXR2YWwgPSByZWFkX2RzdChzdGF0ZSwgc3RhdGUtPnJ4X3R1bmEsIDEwKTsKQEAgLTEwMjQsMjIgKzEwODUsMjcgQEAKIAkJcmV0dmFsID0gcmVhZF9kc3Qoc3RhdGUsICZzdGF0ZS0+cnhfdHVuYVsyXSwgRklYRURfQ09NTSk7CiAJaWYgKHJldHZhbCA8IDApIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJyZWFkIG5vdCBzdWNjZXNzZnVsIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfTkVXVFVORSkgewogCQlpZiAoc3RhdGUtPnJ4X3R1bmFbOV0gIT0gZHN0X2NoZWNrX3N1bSgmc3RhdGUtPnJ4X3R1bmFbMF0sIDkpKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiY2hlY2tzdW0gZmFpbHVyZSA/ICIpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChzdGF0ZS0+cnhfdHVuYVs5XSAhPSBkc3RfY2hlY2tfc3VtKCZzdGF0ZS0+cnhfdHVuYVsyXSwgNykpIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJjaGVja3N1bSBmYWlsdXJlPyAiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAJaWYgKHN0YXRlLT5yeF90dW5hWzJdID09IDAgJiYgc3RhdGUtPnJ4X3R1bmFbM10gPT0gMCkKIAkJcmV0dXJuIDA7Ci0Jc3RhdGUtPmRlY29kZV9mcmVxID0gKChzdGF0ZS0+cnhfdHVuYVsyXSAmIDB4N2YpIDw8IDgpICsgc3RhdGUtPnJ4X3R1bmFbM107CisJaWYgKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19TQVQpIHsKKwkJc3RhdGUtPmRlY29kZV9mcmVxID0gKChzdGF0ZS0+cnhfdHVuYVsyXSAmIDB4N2YpIDw8IDgpICsgc3RhdGUtPnJ4X3R1bmFbM107CisJfSBlbHNlIHsKKwkJc3RhdGUtPmRlY29kZV9mcmVxID0gKChzdGF0ZS0+cnhfdHVuYVsyXSAmIDB4N2YpIDw8IDE2KSArIChzdGF0ZS0+cnhfdHVuYVszXSA8PCA4KSArIHN0YXRlLT5yeF90dW5hWzRdOworCX0KKwlzdGF0ZS0+ZGVjb2RlX2ZyZXEgPSBzdGF0ZS0+ZGVjb2RlX2ZyZXEgKiAxMDAwOwogCXN0YXRlLT5kZWNvZGVfbG9jayA9IDE7CiAJc3RhdGUtPmRpc2VxX2ZsYWdzIHw9IEhBU19MT0NLOwogCkBAIC0xMDYyLDEwICsxMTI4LDEwIEBACiAJCQlkc3Rfc2V0X3ZvbHRhZ2UoZmUsIFNFQ19WT0xUQUdFXzEzKTsKIAl9CiAJc3RhdGUtPmRpc2VxX2ZsYWdzICY9IH4oSEFTX0xPQ0sgfCBBVFRFTVBUX1RVTkUpOwotCisJZG93bigmc3RhdGUtPmRzdF9tdXRleCk7CiAJaWYgKChkc3RfY29tbV9pbml0KHN0YXRlKSkgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0RFQlVHLCAxLCAiRFNUIENvbW11bmljYXRpb24gaW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19ORVdUVU5FKSB7CiAJCXN0YXRlLT50eF90dW5hWzldID0gZHN0X2NoZWNrX3N1bSgmc3RhdGUtPnR4X3R1bmFbMF0sIDkpOwpAQCAtMTA3NywyMyArMTE0MywyOSBAQAogCWlmIChyZXR2YWwgPCAwKSB7CiAJCWRzdF9waW9fZGlzYWJsZShzdGF0ZSk7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0RFQlVHLCAxLCAid3JpdGUgbm90IHN1Y2Nlc3NmdWwiKTsKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byB3ZXJyOwogCX0KIAlpZiAoKGRzdF9waW9fZGlzYWJsZShzdGF0ZSkpIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIkRTVCBQSU8gZGlzYWJsZSBmYWlsZWQgISIpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmICgocmVhZF9kc3Qoc3RhdGUsICZyZXBseSwgR0VUX0FDSykgPCAwKSkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgInJlYWQgdmVyaWZ5IG5vdCBzdWNjZXNzZnVsLiIpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChyZXBseSAhPSBBQ0spIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJ3cml0ZSBub3QgYWNrbm93bGVkZ2VkIDB4JTAyeCAiLCByZXBseSk7Ci0JCXJldHVybiAwOworCQlnb3RvIGVycm9yOwogCX0KIAlzdGF0ZS0+ZGlzZXFfZmxhZ3MgfD0gQVRURU1QVF9UVU5FOworCXJldHZhbCA9IGRzdF9nZXRfdHVuYShzdGF0ZSk7Cit3ZXJyOgorCXVwKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIGRzdF9nZXRfdHVuYShzdGF0ZSk7CitlcnJvcjoKKwl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCmluZGV4IDY3NzZhNTkuLmU2NTQxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCkBAIC02OSw2MiArNjksNTMgQEAKIH0KIAogCi1zdGF0aWMgaW50IHB1dF9jaGVja3N1bSh1OCAqY2hlY2tfc3RyaW5nLCBpbnQgbGVuZ3RoKQorc3RhdGljIHZvaWQgcHV0X2NoZWNrc3VtKHU4ICpjaGVja19zdHJpbmcsIGludCBsZW5ndGgpCiB7Ci0JdTggaSA9IDAsIGNoZWNrc3VtID0gMDsKLQotCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiID09PT09PT09PT09PT09PT09PT09PT09PT0gQ2hlY2tzdW0gY2FsY3VsYXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Ci0JZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgU3RyaW5nIExlbmd0aD1bMHglMDJ4XSIsIGxlbmd0aCk7Ci0JZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgU3RyaW5nPVsiKTsKLQotCXdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0JCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAwLCAiICUwMngiLCBjaGVja19zdHJpbmdbaV0pOwotCQljaGVja3N1bSArPSBjaGVja19zdHJpbmdbaV07Ci0JCWkrKzsKLQl9Ci0JZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDAsICIgXVxuIik7Ci0JZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICJTdW09WyUwMnhdXG4iLCBjaGVja3N1bSk7Ci0JY2hlY2tfc3RyaW5nW2xlbmd0aF0gPSB+Y2hlY2tzdW0gKyAxOwotCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiIENoZWNrc3VtPVslMDJ4XSIsIGNoZWNrX3N0cmluZ1tsZW5ndGhdKTsKLQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMSwgIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwotCi0JcmV0dXJuIDA7CisJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgQ29tcHV0aW5nIHN0cmluZyBjaGVja3N1bS4iKTsKKwlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMSwgIiAgLT4gc3RyaW5nIGxlbmd0aCA6IDB4JTAyeCIsIGxlbmd0aCk7CisJY2hlY2tfc3RyaW5nW2xlbmd0aF0gPSBkc3RfY2hlY2tfc3VtIChjaGVja19zdHJpbmcsIGxlbmd0aCk7CisJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgIC0+IGNoZWNrc3VtICAgICAgOiAweCUwMngiLCBjaGVja19zdHJpbmdbbGVuZ3RoXSk7CiB9CiAKIHN0YXRpYyBpbnQgZHN0X2NpX2NvbW1hbmQoc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUsIHU4ICogZGF0YSwgdTggKmNhX3N0cmluZywgdTggbGVuLCBpbnQgcmVhZCkKIHsKIAl1OCByZXBseTsKIAorCWRvd24oJnN0YXRlLT5kc3RfbXV0ZXgpOwogCWRzdF9jb21tX2luaXQoc3RhdGUpOwogCW1zbGVlcCg2NSk7CiAKIAlpZiAod3JpdGVfZHN0KHN0YXRlLCBkYXRhLCBsZW4pKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgV3JpdGUgbm90IHN1Y2Nlc3NmdWwsIHRyeWluZyB0byByZWNvdmVyIik7CiAJCWRzdF9lcnJvcl9yZWNvdmVyeShzdGF0ZSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKChkc3RfcGlvX2Rpc2FibGUoc3RhdGUpKSA8IDApIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgRFNUIFBJTyBkaXNhYmxlIGZhaWxlZC4iKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAocmVhZF9kc3Qoc3RhdGUsICZyZXBseSwgR0VUX0FDSykgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgUmVhZCBub3Qgc3VjY2Vzc2Z1bCwgdHJ5aW5nIHRvIHJlY292ZXIiKTsKIAkJZHN0X2Vycm9yX3JlY292ZXJ5KHN0YXRlKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAocmVhZCkgewogCQlpZiAoISBkc3Rfd2FpdF9kc3RfcmVhZHkoc3RhdGUsIExPTkdfREVMQVkpKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9OT1RJQ0UsIDEsICIgODgyMCBub3QgcmVhZHkiKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKHJlYWRfZHN0KHN0YXRlLCBjYV9zdHJpbmcsIDEyOCkgPCAwKSB7CS8qCVRyeSB0byBtYWtlIHRoaXMgZHluYW1pYwkqLwogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiBSZWFkIG5vdCBzdWNjZXNzZnVsLCB0cnlpbmcgdG8gcmVjb3ZlciIpOwogCQkJZHN0X2Vycm9yX3JlY292ZXJ5KHN0YXRlKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9Ci0KKwl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CiAJcmV0dXJuIDA7CisKK2Vycm9yOgorCXVwKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogCkBAIC0xNjYsNyArMTU3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYV9nZXRfc2xvdF9jYXBzKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfY2FwcyAqcF9jYV9jYXBzLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGNhX2dldF9zbG90X2NhcHMoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9jYXBzICpwX2NhX2NhcHMsIHZvaWQgX191c2VyICphcmcpCiB7CiAJaW50IGk7CiAJdTggc2xvdF9jYXBbMjU2XTsKQEAgLTE5MiwyNSArMTgzLDI1IEBACiAJcF9jYV9jYXBzLT5kZXNjcl9udW0gPSBzbG90X2NhcFs3XTsKIAlwX2NhX2NhcHMtPmRlc2NyX3R5cGUgPSAxOwogCi0JaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGNhX2NhcHMgKilhcmcsIHBfY2FfY2Fwcywgc2l6ZW9mIChzdHJ1Y3QgY2FfY2FwcykpKQorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwX2NhX2NhcHMsIHNpemVvZiAoc3RydWN0IGNhX2NhcHMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoJTmVlZCBzb21lIG1vcmUgd29yawkqLwotc3RhdGljIGludCBjYV9nZXRfc2xvdF9kZXNjcihzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGNhX2dldF9zbG90X2Rlc2NyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfbXNnICpwX2NhX21lc3NhZ2UsIHZvaWQgX191c2VyICphcmcpCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiAKLXN0YXRpYyBpbnQgY2FfZ2V0X3Nsb3RfaW5mbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX3Nsb3RfaW5mbyAqcF9jYV9zbG90X2luZm8sIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgY2FfZ2V0X3Nsb3RfaW5mbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX3Nsb3RfaW5mbyAqcF9jYV9zbG90X2luZm8sIHZvaWQgX191c2VyICphcmcpCiB7CiAJaW50IGk7CiAJc3RhdGljIHU4IHNsb3RfY29tbWFuZFs4XSA9IHsweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmfTsKIAotCXU4ICpzbG90X2luZm8gPSBzdGF0ZS0+cnhidWZmZXI7CisJdTggKnNsb3RfaW5mbyA9IHN0YXRlLT5tZXNzYWdlczsKIAogCXB1dF9jaGVja3N1bSgmc2xvdF9jb21tYW5kWzBdLCA3KTsKIAlpZiAoKGRzdF9wdXRfY2koc3RhdGUsIHNsb3RfY29tbWFuZCwgc2l6ZW9mIChzbG90X2NvbW1hbmQpLCBzbG90X2luZm8sIEdFVF9SRVBMWSkpIDwgMCkgewpAQCAtMjM4LDE5ICsyMjksMTkgQEAKIAl9IGVsc2UKIAkJcF9jYV9zbG90X2luZm8tPmZsYWdzID0gMDsKIAotCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBjYV9zbG90X2luZm8gKilhcmcsIHBfY2Ffc2xvdF9pbmZvLCBzaXplb2YgKHN0cnVjdCBjYV9zbG90X2luZm8pKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgcF9jYV9zbG90X2luZm8sIHNpemVvZiAoc3RydWN0IGNhX3Nsb3RfaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbnQgY2FfZ2V0X21lc3NhZ2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgdm9pZCAqYXJnKQorc3RhdGljIGludCBjYV9nZXRfbWVzc2FnZShzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXU4IGkgPSAwOwogCXUzMiBjb21tYW5kID0gMDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihwX2NhX21lc3NhZ2UsICh2b2lkICopYXJnLCBzaXplb2YgKHN0cnVjdCBjYV9tc2cpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIocF9jYV9tZXNzYWdlLCBhcmcsIHNpemVvZiAoc3RydWN0IGNhX21zZykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChwX2NhX21lc3NhZ2UtPm1zZykgewpAQCAtMjY2LDcgKzI1Nyw3IEBACiAJCXN3aXRjaCAoY29tbWFuZCkgewogCQljYXNlIENBX0FQUF9JTkZPOgogCQkJbWVtY3B5KHBfY2FfbWVzc2FnZS0+bXNnLCBzdGF0ZS0+bWVzc2FnZXMsIDEyOCk7Ci0JCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCBwX2NhX21lc3NhZ2UsIHNpemVvZiAoc3RydWN0IGNhX21zZykpICkKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwX2NhX21lc3NhZ2UsIHNpemVvZiAoc3RydWN0IGNhX21zZykpICkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMTUsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdTMyIGFzbl8xX2RlY29kZSh1OCAqYXNuXzFfYXJyYXkpCitzdGF0aWMgdTMyIGFzbl8xX2RlY29kZSh1OCAqYXNuXzFfYXJyYXkpCiB7CiAJdTggbGVuZ3RoX2ZpZWxkID0gMCwgd29yZF9jb3VudCA9IDAsIGNvdW50ID0gMDsKIAl1MzIgbGVuZ3RoID0gMDsKQEAgLTMyOCw3ICszMTksOCBAQAogCX0gZWxzZSB7CiAJCXdvcmRfY291bnQgPSBsZW5ndGhfZmllbGQgJiAweDdmOwogCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCB3b3JkX2NvdW50OyBjb3VudCsrKSB7Ci0JCQlsZW5ndGggPSAobGVuZ3RoIHwgYXNuXzFfYXJyYXlbY291bnQgKyAxXSkgPDwgODsKKwkJCWxlbmd0aCA9IGxlbmd0aCAgPDwgODsKKwkJCWxlbmd0aCArPSBhc25fMV9hcnJheVtjb3VudCArIDFdOwogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgTGVuZ3RoPVslMDR4XSIsIGxlbmd0aCk7CiAJCX0KIAl9CkBAIC0zOTksMTMgKzM5MSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhX3NlbmRfbWVzc2FnZShzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGNhX3NlbmRfbWVzc2FnZShzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlLCB2b2lkIF9fdXNlciAqYXJnKQogewogCWludCBpID0gMDsKIAl1bnNpZ25lZCBpbnQgY2FfbWVzc2FnZV9oZWFkZXJfbGVuOwogCiAJdTMyIGNvbW1hbmQgPSAwOwogCXN0cnVjdCBjYV9tc2cgKmh3X2J1ZmZlcjsKKwlpbnQgcmVzdWx0ID0gMDsKIAogCWlmICgoaHdfYnVmZmVyID0gKHN0cnVjdCBjYV9tc2cgKikga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9tc2cpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CkBAIC00MTMsOCArNDA2LDExIEBACiAJfQogCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiICIpOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKHBfY2FfbWVzc2FnZSwgKHZvaWQgKilhcmcsIHNpemVvZiAoc3RydWN0IGNhX21zZykpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIocF9jYV9tZXNzYWdlLCAodm9pZCAqKWFyZywgc2l6ZW9mIChzdHJ1Y3QgY2FfbXNnKSkpIHsKKwkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKKwl9CisKIAogCWlmIChwX2NhX21lc3NhZ2UtPm1zZykgewogCQljYV9tZXNzYWdlX2hlYWRlcl9sZW4gPSBwX2NhX21lc3NhZ2UtPmxlbmd0aDsJLyoJUmVzdG9yZSBpdCBiYWNrIHdoZW4geW91IGFyZSBkb25lCSovCkBAIC00MzMsNyArNDI5LDggQEAKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiQ29tbWFuZCA9IFNFTkRfQ0FfUE1UIik7CiAJCQlpZiAoKGNhX3NldF9wbXQoc3RhdGUsIHBfY2FfbWVzc2FnZSwgaHdfYnVmZmVyLCAwLCAwKSkgPCAwKSB7CS8vIGNvZGUgc2ltcGxpZmljYXRpb24gc3RhcnRlZAogCQkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIC0tPkNBX1BNVCBGYWlsZWQgISIpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXN1bHQgPSAtMTsKKwkJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQkJfQogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9QTVQgU3VjY2VzcyAhIik7CiAJCQlicmVhazsKQEAgLTQ0Miw3ICs0MzksOCBAQAogCQkJLyogICAgICBIYXZlIHRvIGhhbmRsZSB0aGUgMiBiYXNpYyB0eXBlcyBvZiBjYXJkcyBoZXJlICAqLwogCQkJaWYgKChkc3RfY2hlY2tfY2FfcG10KHN0YXRlLCBwX2NhX21lc3NhZ2UsIGh3X2J1ZmZlcikpIDwgMCkgewogCQkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIC0tPkNBX1BNVF9SRVBMWSBGYWlsZWQgISIpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXN1bHQgPSAtMTsKKwkJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQkJfQogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9QTVRfUkVQTFkgU3VjY2VzcyAhIik7CiAJCQlicmVhazsKQEAgLTQ1MSwyMiArNDQ5LDI4IEBACiAKIAkJCWlmICgoY2FfZ2V0X2FwcF9pbmZvKHN0YXRlKSkgPCAwKSB7CiAJCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfQVBQX0lORk9fRU5RVUlSWSBGYWlsZWQgISIpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXN1bHQgPSAtMTsKKwkJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQkJfQogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9BUFBfSU5GT19FTlFVSVJZIFN1Y2Nlc3MgISIpOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CitmcmVlX21lbV9hbmRfZXhpdDoKKwlrZnJlZSAoaHdfYnVmZmVyKTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgZHN0X2NhX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGRzdF9jYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBpb2N0bF9hcmcpCiB7CiAJc3RydWN0IGR2Yl9kZXZpY2UqIGR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSopIGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHN0X3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgZHN0X3N0YXRlKikgZHZiZGV2LT5wcml2OwogCXN0cnVjdCBjYV9zbG90X2luZm8gKnBfY2Ffc2xvdF9pbmZvOwogCXN0cnVjdCBjYV9jYXBzICpwX2NhX2NhcHM7CiAJc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlOworCXZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilpb2N0bF9hcmc7CisJaW50IHJlc3VsdCA9IDA7CiAKIAlpZiAoKHBfY2FfbWVzc2FnZSA9IChzdHJ1Y3QgY2FfbXNnICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2FfbXNnKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOwpAQCAtNDg2LDE0ICs0OTAsMTYgQEAKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiBTZW5kaW5nIG1lc3NhZ2UiKTsKIAkJaWYgKChjYV9zZW5kX21lc3NhZ2Uoc3RhdGUsIHBfY2FfbWVzc2FnZSwgYXJnKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9TRU5EX01TRyBGYWlsZWQgISIpOwotCQkJcmV0dXJuIC0xOworCQkJcmVzdWx0ID0gLTE7CisJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ0FfR0VUX01TRzoKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiBHZXR0aW5nIG1lc3NhZ2UiKTsKIAkJaWYgKChjYV9nZXRfbWVzc2FnZShzdGF0ZSwgcF9jYV9tZXNzYWdlLCBhcmcpKSA8IDApIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIC0tPkNBX0dFVF9NU0cgRmFpbGVkICEiKTsKLQkJCXJldHVybiAtMTsKKwkJCXJlc3VsdCA9IC0xOworCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJfQogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIC0tPkNBX0dFVF9NU0cgU3VjY2VzcyAhIik7CiAJCWJyZWFrOwpAQCAtNTA2LDcgKzUxMiw4IEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgR2V0dGluZyBTbG90IGluZm8iKTsKIAkJaWYgKChjYV9nZXRfc2xvdF9pbmZvKHN0YXRlLCBwX2NhX3Nsb3RfaW5mbywgYXJnKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9HRVRfU0xPVF9JTkZPIEZhaWxlZCAhIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXN1bHQgPSAtMTsKKwkJCWdvdG8gZnJlZV9tZW1fYW5kX2V4aXQ7CiAJCX0KIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9HRVRfU0xPVF9JTkZPIFN1Y2Nlc3MgISIpOwogCQlicmVhazsKQEAgLTUxNCw3ICs1MjEsOCBAQAogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIEdldHRpbmcgU2xvdCBjYXBhYmlsaXRpZXMiKTsKIAkJaWYgKChjYV9nZXRfc2xvdF9jYXBzKHN0YXRlLCBwX2NhX2NhcHMsIGFyZykpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfR0VUX0NBUCBGYWlsZWQgISIpOwotCQkJcmV0dXJuIC0xOworCQkJcmVzdWx0ID0gLTE7CisJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQl9CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfR0VUX0NBUCBTdWNjZXNzICEiKTsKIAkJYnJlYWs7CkBAIC01MjIsNyArNTMwLDggQEAKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiBHZXR0aW5nIGRlc2NyYW1ibGVyIGRlc2NyaXB0aW9uIik7CiAJCWlmICgoY2FfZ2V0X3Nsb3RfZGVzY3Ioc3RhdGUsIHBfY2FfbWVzc2FnZSwgYXJnKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9HRVRfREVTQ1JfSU5GTyBGYWlsZWQgISIpOwotCQkJcmV0dXJuIC0xOworCQkJcmVzdWx0ID0gLTE7CisJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQl9CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfR0VUX0RFU0NSX0lORk8gU3VjY2VzcyAhIik7CiAJCWJyZWFrOwpAQCAtNTMwLDcgKzUzOSw4IEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgU2V0dGluZyBkZXNjcmFtYmxlciIpOwogCQlpZiAoKGNhX3NldF9zbG90X2Rlc2NyKCkpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfU0VUX0RFU0NSIEZhaWxlZCAhIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXN1bHQgPSAtMTsKKwkJCWdvdG8gZnJlZV9tZW1fYW5kX2V4aXQ7CiAJCX0KIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9TRVRfREVTQ1IgU3VjY2VzcyAhIik7CiAJCWJyZWFrOwpAQCAtNTM4LDE0ICs1NDgsMTkgQEAKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiBTZXR0aW5nIFBJRCIpOwogCQlpZiAoKGNhX3NldF9waWQoKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9TRVRfUElEIEZhaWxlZCAhIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXN1bHQgPSAtMTsKKwkJCWdvdG8gZnJlZV9tZW1fYW5kX2V4aXQ7CiAJCX0KIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9TRVRfUElEIFN1Y2Nlc3MgISIpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmVzdWx0ID0gLUVPUE5PVFNVUFA7CiAJfTsKKyBmcmVlX21lbV9hbmRfZXhpdDoKKwlrZnJlZSAocF9jYV9tZXNzYWdlKTsKKwlrZnJlZSAocF9jYV9zbG90X2luZm8pOworCWtmcmVlIChwX2NhX2NhcHMpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBkc3RfY2Ffb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTU4Miw3ICs1OTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkc3RfY2FfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuaW9jdGwgPSAodm9pZCAqKWRzdF9jYV9pb2N0bCwKKwkuaW9jdGwgPSBkc3RfY2FfaW9jdGwsCiAJLm9wZW4gPSBkc3RfY2Ffb3BlbiwKIAkucmVsZWFzZSA9IGRzdF9jYV9yZWxlYXNlLAogCS5yZWFkID0gZHN0X2NhX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmgKaW5kZXggMzI4MWE2Yy4uODE1NTdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaApAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBEU1RfQ09NTU9OX0gKICNkZWZpbmUgRFNUX0NPTU1PTl9ICiAKKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgImJ0ODc4LmgiCkBAIC00OSw2ICs1MCw3IEBACiAjZGVmaW5lIERTVF9UWVBFX0hBU19GV19CVUlMRAk2NAogI2RlZmluZSBEU1RfVFlQRV9IQVNfT0JTX1JFR1MJMTI4CiAjZGVmaW5lIERTVF9UWVBFX0hBU19JTkNfQ09VTlQJMjU2CisjZGVmaW5lIERTVF9UWVBFX0hBU19NVUxUSV9GRQk1MTIKIAogLyoJQ2FyZCBjYXBhYmlsaXR5IGxpc3QJKi8KIApAQCAtMTE3LDYgKzExOSw5IEBACiAJdTggZndfdmVyc2lvbls4XTsKIAl1OCBjYXJkX2luZm9bOF07CiAJdTggdmVuZG9yWzhdOworCXU4IGJvYXJkX2luZm9bOF07CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGRzdF9tdXRleDsKIH07CiAKIHN0cnVjdCBkc3RfdHlwZXMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwppbmRleCBjNWM3NjcyLi4yZTM5ODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImR2Yi1idDh4eC5oIgogI2luY2x1ZGUgImJ0ODc4LmgiCisjaW5jbHVkZSAiZHZiLXBsbC5oIgogCiBzdGF0aWMgaW50IGRlYnVnOwogCkBAIC0yNzksNyArMjgwLDcgQEAKIAlkYXRhWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CiAJZGF0YVsxXSA9IGRpdiAmIDB4ZmY7CiAJZGF0YVsyXSA9ICgoZGl2ID4+IDEwKSAmIDB4NjApIHwgY2ZnOwotCWRhdGFbM10gPSBjcHVtcCB8IGJhbmRfc2VsZWN0OworCWRhdGFbM10gPSAoY3B1bXAgPDwgNikgfCBiYW5kX3NlbGVjdDsKIAogCWkyY190cmFuc2ZlcihjYXJkLT5pMmNfYWRhcHRlciwgJm1zZywgMSk7CiAJcmV0dXJuIChkaXYgKiAxNjY2NjYgLSAzNjAwMDAwMCk7CkBAIC01MjIsOSArNTIzLDcgQEAKIAkvKgogCSAqIFJlc2V0IHRoZSBmcm9udGVuZCwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRyeWluZwogCSAqIHRvIGluaXRpYWxpc2UgdGhlIE1UMzUyIG9yIG10MzUyX2F0dGFjaAotCSAqIHdpbGwgZmFpbC4KLQkgKgotCSAqIFByZXN1bWFibHkgbm90IHJlcXVpcmVkIGZvciB0aGUgTlhUNjAwMCBmcm9udGVuZC4KKwkgKiB3aWxsIGZhaWwuIFNhbWUgZ29lcyBmb3IgdGhlIG54dDYwMDAgZnJvbnRlbmQuCiAJICoKIAkgKi8KIApAQCAtNTQ2LDE0ICs1NDUsNjMgQEAKIAkucGxsX3NldCA9IGRpZ2l0dl9hbHBzX3RkZWQ0X3BsbF9zZXQsCiB9OwogCitzdGF0aWMgaW50IHRkdnNfdHVhNjAzNF9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKK3sKKwlzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmNhcmQgPSAoc3RydWN0IGR2Yl9idDh4eF9jYXJkICopIGZlLT5kdmItPnByaXY7CisJdTggYnVmWzRdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKKwlpbnQgZXJyOworCisJZHZiX3BsbF9jb25maWd1cmUoJmR2Yl9wbGxfdGR2c190dWE2MDM0LCBidWYsIHBhcmFtcy0+ZnJlcXVlbmN5LCAwKTsKKwlkcHJpbnRrKCIlczogdHVuZXIgYXQgMHglMDJ4IGJ5dGVzOiAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCisJCV9fRlVOQ1RJT05fXywgbXNnLmFkZHIsIGJ1ZlswXSxidWZbMV0sYnVmWzJdLGJ1ZlszXSk7CisJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoY2FyZC0+aTJjX2FkYXB0ZXIsICZtc2csIDEpKSAhPSAxKSB7CisJICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJkdmItYnQ4eHg6ICVzIGVycm9yICIKKwkJICAgICAgICAiKGFkZHIgJTAyeCA8LSAlMDJ4LCBlcnIgPSAlaSlcbiIsCisJCSAgICAgICAgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgZXJyKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwkvKiBTZXQgdGhlIEF1eGlsaWFyeSBCeXRlLiAqLworCWJ1ZlsyXSAmPSB+MHgyMDsKKwlidWZbMl0gfD0gMHgxODsKKwlidWZbM10gPSAweDUwOworCWkyY190cmFuc2ZlcihjYXJkLT5pMmNfYWRhcHRlciwgJm1zZywgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsZ2R0MzMweF9jb25maWcgdGR2c190dWE2MDM0X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MGUsCisJLmRlbW9kX2NoaXAgICAgICAgPSBMR0RUMzMwMywKKwkuc2VyaWFsX21wZWcgICAgICA9IDB4NDAsIC8qIFRQU0VSSUFMIGZvciAzMzAzIGluIFRPUF9DT05UUk9MICovCisJLnBsbF9zZXQgICAgICAgICAgPSB0ZHZzX3R1YTYwMzRfcGxsX3NldCwKK307CisKK3N0YXRpYyB2b2lkIGxnZHQzMzB4X3Jlc2V0KHN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqYnQpCit7CisJLyogU2V0IHBpbiAyNyBvZiB0aGUgbGdkdDMzMDMgY2hpcCBoaWdoIHRvIHJlc2V0IHRoZSBmcm9udGVuZCAqLworCisJLyogUHVsc2UgdGhlIHJlc2V0IGxpbmUgKi8KKwlidHR2X3dyaXRlX2dwaW8oYnQtPmJ0dHZfbnIsIDB4MDBlMDAwMDcsIDB4MDAwMDAwMDEpOyAvKiBIaWdoICovCisJYnR0dl93cml0ZV9ncGlvKGJ0LT5idHR2X25yLCAweDAwZTAwMDA3LCAweDAwMDAwMDAwKTsgLyogTG93ICAqLworCW1zbGVlcCgxMDApOworCisJYnR0dl93cml0ZV9ncGlvKGJ0LT5idHR2X25yLCAweDAwZTAwMDA3LCAweDAwMDAwMDAxKTsgLyogSGlnaCAqLworCW1zbGVlcCgxMDApOworfQorCiBzdGF0aWMgdm9pZCBmcm9udGVuZF9pbml0KHN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZCwgdTMyIHR5cGUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZHN0X3N0YXRlKiBzdGF0ZSA9IE5VTEw7CiAKIAlzd2l0Y2godHlwZSkgewotI2lmZGVmIEJUVFZfRFZJQ09fRFZCVF9MSVRFCi0JY2FzZSBCVFRWX0RWSUNPX0RWQlRfTElURToKKyNpZmRlZiBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURQorCWNhc2UgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEU6CiAJCWNhcmQtPmZlID0gbXQzNTJfYXR0YWNoKCZ0aG9tc29uX2R0dDc1NzlfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7CiAJCQljYXJkLT5mZS0+b3BzLT5pbmZvLmZyZXF1ZW5jeV9taW4gPSAxNzQwMDAwMDA7CkBAIC01NjIsMTAgKzYxMCwxOSBAQAogCQlicmVhazsKICNlbmRpZgogCi0jaWZkZWYgQlRUVl9UV0lOSEFOX1ZQMzAyMQotCWNhc2UgQlRUVl9UV0lOSEFOX1ZQMzAyMToKKyNpZmRlZiBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFCisJY2FzZSBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFOgorCQlsZ2R0MzMweF9yZXNldChjYXJkKTsKKwkJY2FyZC0+ZmUgPSBsZ2R0MzMweF9hdHRhY2goJnRkdnNfdHVhNjAzNF9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKKwkJaWYgKGNhcmQtPmZlICE9IE5VTEwpCisJCQlkcHJpbnRrICgiZHZiX2J0OHh4OiBsZ2R0MzMweCBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBCVFRWX0JPQVJEX1RXSU5IQU5fVlAzMDIxCisJY2FzZSBCVFRWX0JPQVJEX1RXSU5IQU5fVlAzMDIxOgogI2Vsc2UKLQljYXNlIEJUVFZfTkVCVUxBX0RJR0lUVjoKKwljYXNlIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVjoKICNlbmRpZgogCQkvKgogCQkgKiBJdCBpcyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgZnJvbnRlbmQgdXNpbmcgdGhlIEkyQyBidXMgKHNlZSB0aGUgTmVidWxhIFNESyk7CkBAIC01NzMsNiArNjMwLDcgQEAKIAkJICovCiAKIAkJLyogT2xkIE5lYnVsYSAobWFya2VkIChjKTIwMDMgb24gaGlnaCBwcm9maWxlIHBjaSBjYXJkKSBoYXMgbnh0NjAwMCBkZW1vZCAqLworCQlkaWdpdHZfYWxwc190ZGVkNF9yZXNldChjYXJkKTsKIAkJY2FyZC0+ZmUgPSBueHQ2MDAwX2F0dGFjaCgmdnAzMDIxX2FscHNfdGRlZDRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7CiAJCQlkcHJpbnRrICgiZHZiX2J0OHh4OiBhbiBueHQ2MDAwIHdhcyBkZXRlY3RlZCBvbiB5b3VyIGRpZ2l0diBjYXJkXG4iKTsKQEAgLTU4NywxMSArNjQ1LDExIEBACiAJCQlkcHJpbnRrICgiZHZiX2J0OHh4OiBhbiBtdDM1MiB3YXMgZGV0ZWN0ZWQgb24geW91ciBkaWdpdHYgY2FyZFxuIik7CiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX0FWRFZCVF83NjE6CisJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6CiAJCWNhcmQtPmZlID0gc3A4ODd4X2F0dGFjaCgmbWljcm90dW5lX210NzIwMmR0Zl9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKIAkJYnJlYWs7CiAKLQljYXNlIEJUVFZfQVZEVkJUXzc3MToKKwljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc3MToKIAkJY2FyZC0+ZmUgPSBtdDM1Ml9hdHRhY2goJmFkdmJ0NzcxX3NhbXN1bmdfdGR0YzkyNTFkaDBfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7CiAJCQljYXJkLT5mZS0+b3BzLT5pbmZvLmZyZXF1ZW5jeV9taW4gPSAxNzQwMDAwMDA7CkBAIC01OTksNyArNjU3LDcgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgQlRUVl9UV0lOSEFOX0RTVDoKKwljYXNlIEJUVFZfQk9BUkRfVFdJTkhBTl9EU1Q6CiAJCS8qCURTVCBpcyBub3QgYSBmcm9udGVuZCBkcml2ZXIgISEhCQkqLwogCQlzdGF0ZSA9IChzdHJ1Y3QgZHN0X3N0YXRlICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZHN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCS8qCVNldHVwIHRoZSBDYXJkCQkJCQkqLwpAQCAtNjIwLDExICs2NzgsMTEgQEAKIAkJCXJldCA9IGRzdF9jYV9hdHRhY2goc3RhdGUsICZjYXJkLT5kdmJfYWRhcHRlcik7CiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX1BJTk5BQ0xFU0FUOgorCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVDoKIAkJY2FyZC0+ZmUgPSBjeDI0MTEwX2F0dGFjaCgmcGN0dnNhdF9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKIAkJYnJlYWs7CiAKLQljYXNlIEJUVFZfUENfSERUVjoKKwljYXNlIEJUVFZfQk9BUkRfUENfSERUVjoKIAkJY2FyZC0+ZmUgPSBvcjUxMjExX2F0dGFjaCgmb3I1MTIxMV9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzQ2LDcgKzgwNCw3IEBACiAJY2FyZC0+aTJjX2FkYXB0ZXIgPSAmc3ViLT5jb3JlLT5pMmNfYWRhcDsKIAogCXN3aXRjaChzdWItPmNvcmUtPnR5cGUpIHsKLQljYXNlIEJUVFZfUElOTkFDTEVTQVQ6CisJY2FzZSBCVFRWX0JPQVJEX1BJTk5BQ0xFU0FUOgogCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDBjMDYwOwogCQkvKiBzaG91bGQgYmU6IEJUODc4X0FfR0FJTj0wLEJUODc4X0FfUFdSRE4sQlQ4NzhfREFfRFBNLEJUODc4X0RBX1NCUiwKIAkJCSAgICAgIEJUODc4X0RBX0lPTT0xLEJUODc4X0RBX0FQUCB0byBlbmFibGUgc2VyaWFsIGhpZ2hzcGVlZCBtb2RlLiAqLwpAQCAtNzU0LDggKzgxMiw4IEBACiAJCWNhcmQtPmlycV9lcnJfaWdub3JlID0gMDsKIAkJYnJlYWs7CiAKLSNpZmRlZiBCVFRWX0RWSUNPX0RWQlRfTElURQotCWNhc2UgQlRUVl9EVklDT19EVkJUX0xJVEU6CisjaWZkZWYgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEUKKwljYXNlIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFOgogI2VuZGlmCiAJCWNhcmQtPmdwaW9fbW9kZSA9IDB4MDQwMEMwNjA7CiAJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IDA7CkBAIC03NjUsMjYgKzgyMywzNCBAQAogCQkgKiBEQV9BUFAocGFyYWxsZWwpICovCiAJCWJyZWFrOwogCi0jaWZkZWYgQlRUVl9UV0lOSEFOX1ZQMzAyMQotCWNhc2UgQlRUVl9UV0lOSEFOX1ZQMzAyMToKLSNlbHNlCi0JY2FzZSBCVFRWX05FQlVMQV9ESUdJVFY6CisjaWZkZWYgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURQorCWNhc2UgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURToKICNlbmRpZgotCWNhc2UgQlRUVl9BVkRWQlRfNzYxOgorCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDBjMDYwOworCQljYXJkLT5vcF9zeW5jX29yaW4gPSBCVDg3OF9SSVNDX1NZTkNfTUFTSzsKKwkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSBCVDg3OF9BRkJVUyB8IEJUODc4X0FGRFNSOworCQlicmVhazsKKworI2lmZGVmIEJUVFZfQk9BUkRfVFdJTkhBTl9WUDMwMjEKKwljYXNlIEJUVFZfQk9BUkRfVFdJTkhBTl9WUDMwMjE6CisjZWxzZQorCWNhc2UgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWOgorI2VuZGlmCisJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6CiAJCWNhcmQtPmdwaW9fbW9kZSA9ICgxIDw8IDI2KSB8ICgxIDw8IDE0KSB8ICgxIDw8IDUpOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwogCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CiAJCS8qIEFfUFdSRE4gREFfU0JSIERBX0FQUCAoaGlnaCBzcGVlZCBzZXJpYWwpICovCiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX0FWRFZCVF83NzE6IC8vY2FzZSAweDA3NzExNDYxOgorCWNhc2UgQlRUVl9CT0FSRF9BVkRWQlRfNzcxOiAvL2Nhc2UgMHgwNzcxMTQ2MToKIAkJY2FyZC0+Z3Bpb19tb2RlID0gMHgwNDAwNDAyQjsKIAkJY2FyZC0+b3Bfc3luY19vcmluID0gQlQ4NzhfUklTQ19TWU5DX01BU0s7CiAJCWNhcmQtPmlycV9lcnJfaWdub3JlID0gMDsKIAkJLyogQV9QV1JETiBEQV9TQlIgIERBX0FQUFswXSBQS1RQPTEwIFJJU0NfRU5BQkxFIEZJRk9fRU5BQkxFKi8KIAkJYnJlYWs7CiAKLQljYXNlIEJUVFZfVFdJTkhBTl9EU1Q6CisJY2FzZSBCVFRWX0JPQVJEX1RXSU5IQU5fRFNUOgogCQljYXJkLT5ncGlvX21vZGUgPSAweDIyMDRmMmM7CiAJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IEJUODc4X1JJU0NfU1lOQ19NQVNLOwogCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IEJUODc4X0FQQUJPUlQgfCBCVDg3OF9BUklQRVJSIHwKQEAgLTgwMiw3ICs4NjgsNyBAQAogCQkgKiBSSVNDK0ZJRk8gRU5BQkxFICovCiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX1BDX0hEVFY6CisJY2FzZSBCVFRWX0JPQVJEX1BDX0hEVFY6CiAJCWNhcmQtPmdwaW9fbW9kZSA9IDB4MDEwMEVDN0I7CiAJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IDA7CiAJCWNhcmQtPmlycV9lcnJfaWdub3JlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmgKaW5kZXggOWVjOGU1Yi4uY2YwMzVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJueHQ2MDAwLmgiCiAjaW5jbHVkZSAiY3gyNDExMC5oIgogI2luY2x1ZGUgIm9yNTEyMTEuaCIKKyNpbmNsdWRlICJsZ2R0MzMweC5oIgogCiBzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgewogCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RlbXV4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oCmluZGV4IDk3MTlhM2IuLjdkN2IwMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RlbXV4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZGVtdXguaApAQCAtNDgsOCArNDgsMTEgQEAKICAqIERNWF9NQVhfU0VDRkVFRF9TSVpFOiBNYXhpbXVtIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIGEgcHJpdmF0ZSBzZWN0aW9uIGZlZWQgZmlsdGVyLgogICovCiAKKyNpZm5kZWYgRE1YX01BWF9TRUNUSU9OX1NJWkUKKyNkZWZpbmUgRE1YX01BWF9TRUNUSU9OX1NJWkUgNDA5NgorI2VuZGlmCiAjaWZuZGVmIERNWF9NQVhfU0VDRkVFRF9TSVpFCi0jZGVmaW5lIERNWF9NQVhfU0VDRkVFRF9TSVpFIDQwOTYKKyNkZWZpbmUgRE1YX01BWF9TRUNGRUVEX1NJWkUgKERNWF9NQVhfU0VDVElPTl9TSVpFICsgMTg4KQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwppbmRleCBkYzQ3NmRkLi5iNGM4OTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAlmb3IgKG4gPSAwOyBzZWMtPnNlY2J1ZnAgKyAyIDwgbGltaXQ7IG4rKykgewogCQlzZWNsZW4gPSBzZWN0aW9uX2xlbmd0aChzZWMtPnNlY2J1Zik7Ci0JCWlmIChzZWNsZW4gPD0gMCB8fCBzZWNsZW4gPiBETVhfTUFYX1NFQ0ZFRURfU0laRQorCQlpZiAoc2VjbGVuIDw9IDAgfHwgc2VjbGVuID4gRE1YX01BWF9TRUNUSU9OX1NJWkUKIAkJICAgIHx8IHNlY2xlbiArIHNlYy0+c2VjYnVmcCA+IGxpbWl0KQogCQkJcmV0dXJuIDA7CiAJCXNlYy0+c2VjbGVuID0gc2VjbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCBhOGJjODQyLi42ZmZhNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtNDIsOCArNDIsNiBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImR2YmRldi5oIgogCi0vLyAjZGVmaW5lIERFQlVHX0xPQ0tMT1NTIDEKLQogc3RhdGljIGludCBkdmJfZnJvbnRlbmRfZGVidWc7CiBzdGF0aWMgaW50IGR2Yl9zaHV0ZG93bl90aW1lb3V0ID0gNTsKIHN0YXRpYyBpbnQgZHZiX2ZvcmNlX2F1dG9faW52ZXJzaW9uOwpAQCAtNDM4LDI1ICs0MzYsNiBAQAogCQkJaWYgKHMgJiBGRV9IQVNfTE9DSykKIAkJCQljb250aW51ZTsKIAkJCWVsc2UgeyAvKiBpZiB3ZSBfV0VSRV8gdHVuZWQsIGJ1dCBub3cgZG9uJ3QgaGF2ZSBhIGxvY2sgKi8KLSNpZmRlZiBERUJVR19MT0NLTE9TUwotCQkJCS8qIGZpcnN0IG9mIGFsbCB0cnkgc2V0dGluZyB0aGUgdG9uZSBhZ2FpbiBpZiBpdCB3YXMgb24gLSB0aGlzCi0JCQkJICogc29tZXRpbWVzIHdvcmtzIGFyb3VuZCBwcm9ibGVtcyB3aXRoIG5vaXN5IHBvd2VyIHN1cHBsaWVzICovCi0JCQkJaWYgKGZlLT5vcHMtPnNldF90b25lICYmIChmZXByaXYtPnRvbmUgPT0gU0VDX1RPTkVfT04pKSB7Ci0JCQkJCWZlLT5vcHMtPnNldF90b25lKGZlLCBmZXByaXYtPnRvbmUpOwotCQkJCQltZGVsYXkoMTAwKTsKLQkJCQkJcyA9IDA7Ci0JCQkJCWZlLT5vcHMtPnJlYWRfc3RhdHVzKGZlLCAmcyk7Ci0JCQkJCWlmIChzICYgRkVfSEFTX0xPQ0spIHsKLQkJCQkJCXByaW50aygiRFZCJWk6IExvY2sgd2FzIGxvc3QsIGJ1dCByZWdhaW5lZCBieSBzZXR0aW5nICIKLQkJCQkJCSAgICAgICAidGhlIHRvbmUuIFRoaXMgbWF5IGluZGljYXRlIHlvdXIgcG93ZXIgc3VwcGx5ICIKLQkJCQkJCSAgICAgICAiaXMgbm9pc3kvc2xpZ2h0bHkgaW5jb21wYXRhYmxlIHdpdGggdGhpcyBEVkItUyAiCi0JCQkJCQkgICAgICAgImFkYXB0ZXJcbiIsIGZlLT5kdmItPm51bSk7Ci0JCQkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9UVU5FRDsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0JCQkJLyogc29tZSBvdGhlciByZWFzb24gZm9yIGxvc2luZyB0aGUgbG9jayAtIHN0YXJ0IHppZ3phZ2dpbmcgKi8KIAkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9aSUdaQUdfRkFTVDsKIAkJCQlmZXByaXYtPnN0YXJ0ZWRfYXV0b19zdGVwID0gZmVwcml2LT5hdXRvX3N0ZXA7CiAJCQkJY2hlY2tfd3JhcHBlZCA9IDA7CkBAIC01NzcsNiArNTU2LDQ5IEBACiAJCQkJZmVwcml2LT50aHJlYWRfcGlkKTsKIH0KIAorczMyIHRpbWV2YWxfdXNlY19kaWZmKHN0cnVjdCB0aW1ldmFsIGxhc3R0aW1lLCBzdHJ1Y3QgdGltZXZhbCBjdXJ0aW1lKQoreworCXJldHVybiAoKGN1cnRpbWUudHZfdXNlYyA8IGxhc3R0aW1lLnR2X3VzZWMpID8KKwkJMTAwMDAwMCAtIGxhc3R0aW1lLnR2X3VzZWMgKyBjdXJ0aW1lLnR2X3VzZWMgOgorCQljdXJ0aW1lLnR2X3VzZWMgLSBsYXN0dGltZS50dl91c2VjKTsKK30KK0VYUE9SVF9TWU1CT0wodGltZXZhbF91c2VjX2RpZmYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXZhbF91c2VjX2FkZChzdHJ1Y3QgdGltZXZhbCAqY3VydGltZSwgdTMyIGFkZF91c2VjKQoreworCWN1cnRpbWUtPnR2X3VzZWMgKz0gYWRkX3VzZWM7CisJaWYgKGN1cnRpbWUtPnR2X3VzZWMgPj0gMTAwMDAwMCkgeworCQljdXJ0aW1lLT50dl91c2VjIC09IDEwMDAwMDA7CisJCWN1cnRpbWUtPnR2X3NlYysrOworCX0KK30KKworLyoKKyAqIFNsZWVwIHVudGlsIGdldHRpbWVvZmRheSgpID4gd2FrZXRpbWUgKyBhZGRfdXNlYworICogVGhpcyBuZWVkcyB0byBiZSBhcyBwcmVjaXNlIGFzIHBvc3NpYmxlLCBidXQgYXMgdGhlIGRlbGF5IGlzCisgKiB1c3VhbGx5IGJldHdlZW4gMm1zIGFuZCAzMm1zLCBpdCBpcyBkb25lIHVzaW5nIGEgc2NoZWR1bGVkIG1zbGVlcAorICogZm9sbG93ZWQgYnkgdXNsZWVwIChub3JtYWxseSBhIGJ1c3ktd2FpdCBsb29wKSBmb3IgdGhlIHJlbWFpbmRlcgorICovCit2b2lkIGR2Yl9mcm9udGVuZF9zbGVlcF91bnRpbChzdHJ1Y3QgdGltZXZhbCAqd2FrZXRpbWUsIHUzMiBhZGRfdXNlYykKK3sKKwlzdHJ1Y3QgdGltZXZhbCBsYXN0dGltZTsKKwlzMzIgZGVsdGEsIG5ld2RlbHRhOworCisJdGltZXZhbF91c2VjX2FkZCh3YWtldGltZSwgYWRkX3VzZWMpOworCisJZG9fZ2V0dGltZW9mZGF5KCZsYXN0dGltZSk7CisJZGVsdGEgPSB0aW1ldmFsX3VzZWNfZGlmZihsYXN0dGltZSwgKndha2V0aW1lKTsKKwlpZiAoZGVsdGEgPiAyNTAwKSB7CisJCW1zbGVlcCgoZGVsdGEgLSAxNTAwKSAvIDEwMDApOworCQlkb19nZXR0aW1lb2ZkYXkoJmxhc3R0aW1lKTsKKwkJbmV3ZGVsdGEgPSB0aW1ldmFsX3VzZWNfZGlmZihsYXN0dGltZSwgKndha2V0aW1lKTsKKwkJZGVsdGEgPSAobmV3ZGVsdGEgPiBkZWx0YSkgPyAwIDogbmV3ZGVsdGE7CisJfQorCWlmIChkZWx0YSA+IDApCisJCXVkZWxheShkZWx0YSk7Cit9CitFWFBPUlRfU1lNQk9MKGR2Yl9mcm9udGVuZF9zbGVlcF91bnRpbCk7CisKIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX3N0YXJ0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCWludCByZXQ7CkBAIC03MjgsNiArNzUwLDYwIEBACiAJCQllcnIgPSBmZS0+b3BzLT5kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKGZlLCAodW5zaWduZWQgaW50KSBwYXJnKTsKIAkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX0RJU0VRQzsKIAkJCWZlcHJpdi0+c3RhdHVzID0gMDsKKwkJfSBlbHNlIGlmIChmZS0+b3BzLT5zZXRfdm9sdGFnZSkgeworCQkJLyoKKwkJCSAqIE5PVEU6IFRoaXMgaXMgYSBmYWxsYmFjayBjb25kaXRpb24uICBTb21lIGZyb250ZW5kcworCQkJICogKHN0djAyOTkgZm9yIGluc3RhbmNlKSB0YWtlIGxvbmdlciB0aGFuIDhtc2VjIHRvCisJCQkgKiByZXNwb25kIHRvIGEgc2V0X3ZvbHRhZ2UgY29tbWFuZC4gIFRob3NlIHN3aXRjaGVzCisJCQkgKiBuZWVkIGN1c3RvbSByb3V0aW5lcyB0byBzd2l0Y2ggcHJvcGVybHkuICBGb3IgYWxsCisJCQkgKiBvdGhlciBmcm9udGVuZHMsIHRoZSBmb2xsb3dpbmcgc2hvdWxlIHdvcmsgb2suCisJCQkgKiBEaXNoIG5ldHdvcmsgbGVnYWN5IHN3aXRjaGVzIChhcyB1c2VkIGJ5IERpc2g1MDApCisJCQkgKiBhcmUgY29udHJvbGxlZCBieSBzZW5kaW5nIDktYml0IGNvbW1hbmQgd29yZHMKKwkJCSAqIHNwYWNlZCA4bXNlYyBhcGFydC4KKwkJCSAqIHRoZSBhY3R1YWwgY29tbWFuZCB3b3JkIGlzIHN3aXRjaC9wb3J0IGRlcGVuZGFudAorCQkJICogc28gaXQgaXMgdXAgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB0byBzZW5kCisJCQkgKiB0aGUgcmlnaHQgY29tbWFuZC4KKwkJCSAqIFRoZSBjb21tYW5kIG11c3QgYWx3YXlzIHN0YXJ0IHdpdGggYSAnMCcgYWZ0ZXIKKwkJCSAqIGluaXRpYWxpemF0aW9uLCBzbyBwYXJnIGlzIDggYml0cyBhbmQgZG9lcyBub3QKKwkJCSAqIGluY2x1ZGUgdGhlIGluaXRpYWxpemF0aW9uIG9yIHN0YXJ0IGJpdAorCQkJICovCisJCQl1bnNpZ25lZCBpbnQgY21kID0gKCh1bnNpZ25lZCBpbnQpIHBhcmcpIDw8IDE7CisJCQlzdHJ1Y3QgdGltZXZhbCBuZXh0dGltZTsKKwkJCXN0cnVjdCB0aW1ldmFsIHR2WzEwXTsKKwkJCWludCBpOworCQkJdTggbGFzdCA9IDE7CisJCQlpZiAoZHZiX2Zyb250ZW5kX2RlYnVnKQorCQkJCXByaW50aygiJXMgc3dpdGNoIGNvbW1hbmQ6IDB4JTA0eFxuIiwgX19GVU5DVElPTl9fLCBjbWQpOworCQkJZG9fZ2V0dGltZW9mZGF5KCZuZXh0dGltZSk7CisJCQlpZiAoZHZiX2Zyb250ZW5kX2RlYnVnKQorCQkJCW1lbWNweSgmdHZbMF0sICZuZXh0dGltZSwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CisJCQkvKiBiZWZvcmUgc2VuZGluZyBhIGNvbW1hbmQsIGluaXRpYWxpemUgYnkgc2VuZGluZworCQkJICogYSAzMm1zIDE4ViB0byB0aGUgc3dpdGNoCisJCQkgKi8KKwkJCWZlLT5vcHMtPnNldF92b2x0YWdlKGZlLCBTRUNfVk9MVEFHRV8xOCk7CisJCQlkdmJfZnJvbnRlbmRfc2xlZXBfdW50aWwoJm5leHR0aW1lLCAzMjAwMCk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJCQlpZiAoZHZiX2Zyb250ZW5kX2RlYnVnKQorCQkJCQlkb19nZXR0aW1lb2ZkYXkoJnR2W2kgKyAxXSk7CisJCQkJaWYgKChjbWQgJiAweDAxKSAhPSBsYXN0KSB7CisJCQkJCS8qIHNldCB2b2x0YWdlIHRvIChsYXN0ID8gMTNWIDogMThWKSAqLworCQkJCQlmZS0+b3BzLT5zZXRfdm9sdGFnZShmZSwgKGxhc3QpID8gU0VDX1ZPTFRBR0VfMTMgOiBTRUNfVk9MVEFHRV8xOCk7CisJCQkJCWxhc3QgPSAobGFzdCkgPyAwIDogMTsKKwkJCQl9CisJCQkJY21kID0gY21kID4+IDE7CisJCQkJaWYgKGkgIT0gOCkKKwkJCQkJZHZiX2Zyb250ZW5kX3NsZWVwX3VudGlsKCZuZXh0dGltZSwgODAwMCk7CisJCQl9CisJCQlpZiAoZHZiX2Zyb250ZW5kX2RlYnVnKSB7CisJCQkJcHJpbnRrKCIlcyglZCk6IHN3aXRjaCBkZWxheSAoc2hvdWxkIGJlIDMyayBmb2xsb3dlZCBieSBhbGwgOGtcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgZmUtPmR2Yi0+bnVtKTsKKwkJCQlmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykKKwkJCQkJcHJpbnRrKCIlZDogJWRcbiIsIGksIHRpbWV2YWxfdXNlY19kaWZmKHR2W2ktMV0gLCB0dltpXSkpOworCQkJfQorCQkJZXJyID0gMDsKKwkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX0RJU0VRQzsKKwkJCWZlcHJpdi0+c3RhdHVzID0gMDsKIAkJfQogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAppbmRleCA5YzJjMWQxLi4zNDhjOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaApAQCAtMTAxLDQgKzEwMSw3IEBACiAKIGV4dGVybiBpbnQgZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOwogCitleHRlcm4gdm9pZCBkdmJfZnJvbnRlbmRfc2xlZXBfdW50aWwoc3RydWN0IHRpbWV2YWwgKndha2V0aW1lLCB1MzIgYWRkX3VzZWMpOworZXh0ZXJuIHMzMiB0aW1ldmFsX3VzZWNfZGlmZihzdHJ1Y3QgdGltZXZhbCBsYXN0dGltZSwgc3RydWN0IHRpbWV2YWwgY3VydGltZSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYwppbmRleCBlNTUzMjJlLi40OWY1NDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYwpAQCAtNDMsMTEgKzQzLDkgQEAKIAl7IDB4MDIsIDB4MTMsIEtFWV9SSUdIVCB9LCAgICAgICAvKiBSIC8gQ0ggUlROICovCiAJeyAweDAyLCAweDE3LCBLRVlfUFJPRzIgfSwgICAgICAgLyogU05BUCBTSE9UICovCiAJeyAweDAyLCAweDEwLCBLRVlfUFJPRzMgfSwgICAgICAgLyogMTYtQ0ggUFJFViAqLwotCXsgMHgwMiwgMHgwMywgS0VZX0NIQU5ORUxVUCB9LCAgIC8qIENIIFVQICovCiAJeyAweDAyLCAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LCAgLyogVk9MIERPV04gKi8KIAl7IDB4MDIsIDB4MGMsIEtFWV9aT09NIH0sICAgICAgICAvKiBGVUxMIFNDUkVFTiAqLwogCXsgMHgwMiwgMHgxZiwgS0VZX1ZPTFVNRVVQIH0sICAgIC8qIFZPTCBVUCAqLwotCXsgMHgwMiwgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sIC8qIENIIERPV04gKi8KIAl7IDB4MDIsIDB4MTQsIEtFWV9NVVRFIH0sICAgICAgICAvKiBNVVRFICovCiAJeyAweDAyLCAweDA4LCBLRVlfQVVESU8gfSwgICAgICAgLyogQVVESU8gKi8KIAl7IDB4MDIsIDB4MTksIEtFWV9SRUNPUkQgfSwgICAgICAvKiBSRUNPUkQgKi8KQEAgLTU3LDggKzU1LDYgQEAKIAl7IDB4MDIsIDB4MWQsIEtFWV9CQUNLIH0sICAgICAgICAvKiA8PCAvIFJFRCAqLwogCXsgMHgwMiwgMHgxYywgS0VZX0ZPUldBUkQgfSwgICAgIC8qID4+IC8gWUVMTE9XICovCiAJeyAweDAyLCAweDAzLCBLRVlfVEVYVCB9LCAgICAgICAgLyogVEVMRVRFWFQgKi8KLQl7IDB4MDIsIDB4MDEsIEtFWV9GSVJTVCB9LCAgICAgICAvKiB8PDwgLyBHUkVFTiAqLwotCXsgMHgwMiwgMHgwMCwgS0VZX0xBU1QgfSwgICAgICAgIC8qID4+fCAvIEJMVUUgKi8KIAl7IDB4MDIsIDB4MDQsIEtFWV9FUEcgfSwgICAgICAgICAvKiBFUEcgKi8KIAl7IDB4MDIsIDB4MTUsIEtFWV9NRU5VIH0sICAgICAgICAvKiBNRU5VICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCmluZGV4IDAwNTg1MDUuLmFhMjcxYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwpAQCAtODIsMTMgKzgyLDE1IEBACiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IxXzFfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGRpYnVzYjFfMV9hbjIyMzVfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGRpYnVzYjJfMGJfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGFydGVjX3QxX3VzYjJfcHJvcGVydGllczsKIAogc3RhdGljIGludCBkaWJ1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlpZiAoZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZkaWJ1c2IxXzFfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwIHx8CiAJCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwmZGlidXNiMV8xX2FuMjIzNV9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDAgfHwKLQkJZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZkaWJ1c2IyXzBiX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCkKKwkJZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZkaWJ1c2IyXzBiX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAorCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmFydGVjX3QxX3VzYjJfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRUlOVkFMOwpAQCAtMTI4LDEwICsxMzAsMTMgQEAKIAogLyogMjcgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxELAkJVVNCX1BJRF9LV09STERfVlNUUkVBTV9DT0xEKSB9LAogCisvKiAyOCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywJCVVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfQ09MRCkgfSwKKy8qIDI5ICovCXsgVVNCX0RFVklDRShVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDLAkJVVNCX1BJRF9VTFRJTUFfVFZCT1hfVVNCMl9XQVJNKSB9LAorCiAvLyAjZGVmaW5lIERWQl9VU0JfRElCVVNCX01CX0ZBVUxUWV9VU0JfSURzCiAKICNpZmRlZiBEVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFlfVVNCX0lEcwotLyogMjggKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQU5DSE9SLAkJVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU5DSE9SX0NPTEQpIH0sCisvKiAzMCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BTkNIT1IsCQlVU0JfUElEX1VMVElNQV9UVkJPWF9BTkNIT1JfQ09MRCkgfSwKICNlbmRpZgogCQkJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTI2NCw3ICsyNjksNyBAQAogCQl9LAogI2lmZGVmIERWQl9VU0JfRElCVVNCX01CX0ZBVUxUWV9VU0JfSURzCiAJCXsJIkFydGVjIFQxIFVTQjEuMSBUVkJPWCB3aXRoIEFOMjIzNSAoZmF1bHR5IFVTQiBJRHMpIiwKLQkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjhdLCBOVUxMIH0sCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzMwXSwgTlVMTCB9LAogCQkJeyBOVUxMIH0sCiAJCX0sCiAjZW5kaWYKQEAgLTI3Myw3ICsyNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IyXzBiX3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIHwgRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKLQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAorCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCiAKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKIApAQCAtMzIxLDYgKzMyNiw1MiBAQAogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGFydGVjX3QxX3VzYjJfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCisKKwkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKKworCS5maXJtd2FyZSA9ICJkdmItdXNiLWRpYnVzYi02LjAuMC44LmZ3IiwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAorCisJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2IyXzBfc3RyZWFtaW5nX2N0cmwsCisJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKKwkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCisJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2IyXzBfcG93ZXJfY3RybCwKKwkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAorCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCisKKwkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJLnJjX2tleV9tYXAgICAgICAgPSBkaWJ1c2JfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IDYzLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLworCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAorCisJLmkyY19hbGdvICAgICAgICAgPSAmZGlidXNiX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJLnVyYiA9IHsKKwkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCisJCS5jb3VudCA9IDcsCisJCS5lbmRwb2ludCA9IDB4MDYsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJfQorCQl9CisJfSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJewkiQXJ0ZWMgVDEgVVNCMi4wIiwKKwkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjhdLCBOVUxMIH0sCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzI5XSwgTlVMTCB9LAorCQl9LAorCX0KK307CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWJ1c2JfZHJpdmVyID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZHZiX3VzYl9kaWJ1c2JfbWIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmgKaW5kZXggNjYxMWY2Mi4uMmQ5OWQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oCkBAIC0xMSw3ICsxMSw5IEBACiAjaWZuZGVmIF9EVkJfVVNCX0RJQlVTQl9IXwogI2RlZmluZSBfRFZCX1VTQl9ESUJVU0JfSF8KIAotI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImRpYnVzYiIKKyNpZm5kZWYgRFZCX1VTQl9MT0dfUFJFRklYCisgI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImRpYnVzYiIKKyNlbmRpZgogI2luY2x1ZGUgImR2Yi11c2IuaCIKIAogI2luY2x1ZGUgImRpYjMwMDAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCAwODE4OTk2Li42YmU5OWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC00MywxMCArNDMsMTQgQEAKICNkZWZpbmUgVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfV0FSTQkJMHhkMDAxCiAjZGVmaW5lIFVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1VOS19DT0xECTB4MDEwYwogI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9VTktfV0FSTQkweDAxMGQKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fSE9PS19ERUZBVUxUCQkJMHgwMDY0CisjZGVmaW5lIFVTQl9QSURfRElCQ09NX0hPT0tfREVGQVVMVF9SRUVOVU0JMHgwMDY1CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDBfQ09MRAkJCTB4MGJiOAogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9NT0QzMDAwX1dBUk0JCQkweDBiYjkKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMV9DT0xECQkJMHgwYmM2CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDFfV0FSTQkJCTB4MGJjNworI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs3NzAwCQkJCTB4MWUxNAorI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs3NzAwX1JFRU5VTQkJMHgxZTE1CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0FOQ0hPUl8yMTM1X0NPTEQJCTB4MjEzMQogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX0NPTEQJCTB4MGZhMAogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX1dBUk0JCTB4MGZhMQpAQCAtNjgsNiArNzIsNyBAQAogI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9BTjIyMzVfV0FSTQkweDgxMDgKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU5DSE9SX0NPTEQJMHgyMjM1CiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfQ09MRAkJMHg4MTA5CisjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfV0FSTQkJMHg4MTBhCiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfRlhfQ09MRAkweDg2MTMKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfVVNCMl9GWF9XQVJNCTB4MTAwMgogI2RlZmluZSBVU0JfUElEX1VOS19IWVBFUl9QQUxURUtfQ09MRAkJMHgwMDVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKaW5kZXggZjU3OTlhNC4uMzZiNzA0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYwpAQCAtMTk2LDcgKzE5Niw5IEBACiAJCQlkdmJfdXNiX2ZyZWVfc3RyZWFtX2J1ZmZlcnMoZCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQlkZWJfbWVtKCJidWZmZXIgJWQ6ICVwIChkbWE6ICVkKVxuIixkLT5idWZfbnVtLGQtPmJ1Zl9saXN0W2QtPmJ1Zl9udW1dLGQtPmRtYV9hZGRyW2QtPmJ1Zl9udW1dKTsKKwkJZGViX21lbSgiYnVmZmVyICVkOiAlcCAoZG1hOiAlbGx1KVxuIiwKKwkJCWQtPmJ1Zl9udW0sIGQtPmJ1Zl9saXN0W2QtPmJ1Zl9udW1dLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkLT5kbWFfYWRkcltkLT5idWZfbnVtXSk7CiAJCW1lbXNldChkLT5idWZfbGlzdFtkLT5idWZfbnVtXSwwLHNpemUpOwogCX0KIAlkZWJfbWVtKCJhbGxvY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCBhNTBhNDFmLi44ZTI2OWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtMTY0LDYgKzE2NCwxNCBAQAogCWhlbHAKIAkgIEFuIEFUU0MgOFZTQiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX05YVDIwMFgKKwl0cmlzdGF0ZSAiTmV4dHdhdmUgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgorCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlzZWxlY3QgRldfTE9BREVSCisJaGVscAorCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CisJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbmZpZyBEVkJfT1I1MTIxMQogCXRyaXN0YXRlICJvcjUxMjExIGJhc2VkIChwY0hEVFYgSEQyMDAwIGNhcmQpIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQppbmRleCBhZDg2NThmLi5hOTg3NjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiBvYmotJChDT05GSUdfRFZCX1REQTEwMDIxKSArPSB0ZGExMDAyMS5vCiBvYmotJChDT05GSUdfRFZCX1NUVjAyOTcpICs9IHN0djAyOTcubwogb2JqLSQoQ09ORklHX0RWQl9OWFQyMDAyKSArPSBueHQyMDAyLm8KK29iai0kKENPTkZJR19EVkJfTlhUMjAwWCkgKz0gbnh0MjAweC5vCiBvYmotJChDT05GSUdfRFZCX09SNTEyMTEpICs9IG9yNTEyMTEubwogb2JqLSQoQ09ORklHX0RWQl9PUjUxMTMyKSArPSBvcjUxMTMyLm8KIG9iai0kKENPTkZJR19EVkJfQkNNMzUxMCkgKz0gYmNtMzUxMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwppbmRleCA1MzZjMzVkLi5mODU3Yjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogRVhQT1JUX1NZTUJPTChkdmJfcGxsX3R1YTYwMzQpOwogCiAvKiBJbmZpbmVvbiBUVUE2MDM0Ci0gKiB1c2VkIGluIExHIElubm90ZWsgVERWUy1IMDYyRgorICogdXNlZCBpbiBMRyBURFZTIEgwNjFGIGFuZCBMRyBURFZTIEgwNjJGCiAgKi8KIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90ZHZzX3R1YTYwMzQgPSB7CiAJLm5hbWUgID0gIkxHL0luZmluZW9uIFRVQTYwMzQiLApAQCAtMjkyLDYgKzI5Miw1OCBAQAogfTsKIEVYUE9SVF9TWU1CT0woZHZiX3BsbF90ZGVkNCk7CiAKKy8qIEFMUFMgVERIVTIKKyAqIHVzZWQgaW4gQXZlclRWSEQgTUNFIEExODAKKyAqLworc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3RkaHUyID0geworCS5uYW1lID0gIkFMUFMgVERIVTIiLAorCS5taW4gPSA1NDAwMDAwMCwKKwkubWF4ID0gODY0MDAwMDAwLAorCS5jb3VudCA9IDQsCisJLmVudHJpZXMgPSB7CisJCXsgMTYyMDAwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4ODUsIDB4MDEgfSwKKwkJeyA0MjYwMDAwMDAsIDQ0MDAwMDAwLCA2MjUwMCwgMHg4NSwgMHgwMiB9LAorCQl7IDc4MjAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweDg1LCAweDA4IH0sCisJCXsgOTk5OTk5OTk5LCA0NDAwMDAwMCwgNjI1MDAsIDB4ODUsIDB4ODggfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTChkdmJfcGxsX3RkaHUyKTsKKworLyogUGhpbGlwcyBUVVYxMjM2RAorICogdXNlZCBpbiBBVEkgSERUViBXb25kZXIKKyAqLworc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3R1djEyMzZkID0geworCS5uYW1lICA9ICJQaGlsaXBzIFRVVjEyMzZEIiwKKwkubWluICAgPSAgNTQwMDAwMDAsCisJLm1heCAgID0gODY0MDAwMDAwLAorCS5jb3VudCA9IDMsCisJLmVudHJpZXMgPSB7CisJCXsgMTU3MjUwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4YzYsIDB4NDEgfSwKKwkJeyA0NTQwMDAwMDAsIDQ0MDAwMDAwLCA2MjUwMCwgMHhjNiwgMHg0MiB9LAorCQl7IDk5OTk5OTk5OSwgNDQwMDAwMDAsIDYyNTAwLCAweGM2LCAweDQ0IH0sCisJfSwKK307CitFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfdHV2MTIzNmQpOworCisvKiBTYW1zdW5nIFRCTVYzMDExMUlOCisgKiB1c2VkIGluIEFpcjJQQyBBVFNDIC0gMm5kIGdlbmVyYXRpb24gKG54dDIwMDIpCisgKi8KK3N0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90Ym12MzAxMTFpbiA9IHsKKwkubmFtZSA9ICJTYW1zdW5nIFRCTVYzMDExMUlOIiwKKwkubWluID0gNTQwMDAwMDAsCisJLm1heCA9IDg2MDAwMDAwMCwKKwkuY291bnQgPSA0LAorCS5lbnRyaWVzID0geworCQl7IDE3MjAwMDAwMCwgNDQwMDAwMDAsIDE2NjY2NiwgMHhiNCwgMHgwMSB9LAorCQl7IDIxNDAwMDAwMCwgNDQwMDAwMDAsIDE2NjY2NiwgMHhiNCwgMHgwMiB9LAorCQl7IDQ2NzAwMDAwMCwgNDQwMDAwMDAsIDE2NjY2NiwgMHhiYywgMHgwMiB9LAorCQl7IDcyMTAwMDAwMCwgNDQwMDAwMDAsIDE2NjY2NiwgMHhiYywgMHgwOCB9LAorCQl7IDg0MTAwMDAwMCwgNDQwMDAwMDAsIDE2NjY2NiwgMHhmNCwgMHgwOCB9LAorCQl7IDk5OTk5OTk5OSwgNDQwMDAwMDAsIDE2NjY2NiwgMHhmYywgMHgwMiB9LAorCX0KK307CitFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfdGJtdjMwMTExaW4pOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKaW5kZXggMjA1YjJkMS4uNDk3ZDMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCkBAIC0zNiw2ICszNiwxMCBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF9mbWQxMjE2bWU7CiBleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3RkZWQ0OwogCitleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3R1djEyMzZkOworZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90ZGh1MjsKK2V4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGJtdjMwMTExaW47CisKIGludCBkdmJfcGxsX2NvbmZpZ3VyZShzdHJ1Y3QgZHZiX3BsbF9kZXNjICpkZXNjLCB1OCAqYnVmLAogCQkgICAgICB1MzIgZnJlcSwgaW50IGJhbmR3aWR0aCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmMKaW5kZXggNzg1MmI4My4uNmEzM2Y1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmMKQEAgLTI2LDYgKzI2LDggQEAKICAqICAgRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUQogICogICBEVmlDTyBGdXNpb25IRFRWIDMgR29sZC1UCiAgKiAgIERWaUNPIEZ1c2lvbkhEVFYgNSBHb2xkCisgKiAgIERWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlCisgKiAgIEFpcjJQQy9BaXJTdGFyIDIgQVRTQyAzcmQgZ2VuZXJhdGlvbiAoSEQ1MDAwKQogICoKICAqIFRPRE86CiAgKiBzaWduYWwgc3RyZW5ndGggYWx3YXlzIHJldHVybnMgMC4KQEAgLTIyMiw2ICsyMjQsMTEgQEAKIAkJMHg0YywgMHgxNAogCX07CiAKKwlzdGF0aWMgdTggZmxpcF9sZ2R0MzMwM19pbml0X2RhdGFbXSA9IHsKKwkJMHg0YywgMHgxNCwKKwkJMHg4NywgMHhmMworCX07CisKIAlzdHJ1Y3QgbGdkdDMzMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJY2hhciAgKmNoaXBfbmFtZTsKIAlpbnQgICAgZXJyOwpAQCAtMjM0LDggKzI0MSwxMyBAQAogCQlicmVhazsKIAljYXNlIExHRFQzMzAzOgogCQljaGlwX25hbWUgPSAiTEdEVDMzMDMiOwotCQllcnIgPSBpMmNfd3JpdGVfZGVtb2RfYnl0ZXMoc3RhdGUsIGxnZHQzMzAzX2luaXRfZGF0YSwKLQkJCQkJICAgIHNpemVvZihsZ2R0MzMwM19pbml0X2RhdGEpKTsKKwkJaWYgKHN0YXRlLT5jb25maWctPmNsb2NrX3BvbGFyaXR5X2ZsaXApIHsKKwkJCWVyciA9IGkyY193cml0ZV9kZW1vZF9ieXRlcyhzdGF0ZSwgZmxpcF9sZ2R0MzMwM19pbml0X2RhdGEsCisJCQkJCQkgICAgc2l6ZW9mKGZsaXBfbGdkdDMzMDNfaW5pdF9kYXRhKSk7CisJCX0gZWxzZSB7CisJCQllcnIgPSBpMmNfd3JpdGVfZGVtb2RfYnl0ZXMoc3RhdGUsIGxnZHQzMzAzX2luaXRfZGF0YSwKKwkJCQkJCSAgICBzaXplb2YobGdkdDMzMDNfaW5pdF9kYXRhKSk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY2hpcF9uYW1lID0gInVuZGVmaW5lZCI7CkBAIC03NDMsOSArNzU1LDggQEAKIAkJLmZyZXF1ZW5jeV9taW49IDU0MDAwMDAwLAogCQkuZnJlcXVlbmN5X21heD0gODU4MDAwMDAwLAogCQkuZnJlcXVlbmN5X3N0ZXBzaXplPSA2MjUwMCwKLQkJLyogU3ltYm9sIHJhdGUgaXMgZm9yIGFsbCBWU0IgbW9kZXMgbmVlZCB0byBjaGVjayBRQU0gKi8KLQkJLnN5bWJvbF9yYXRlX21pbiAgICA9IDEwNzYyMDAwLAotCQkuc3ltYm9sX3JhdGVfbWF4ICAgID0gMTA3NjIwMDAsCisJCS5zeW1ib2xfcmF0ZV9taW4gICAgPSA1MDU2OTQxLAkvKiBRQU0gNjQgKi8KKwkJLnN5bWJvbF9yYXRlX21heCAgICA9IDEwNzYyMDAwLAkvKiBWU0IgOCAgKi8KIAkJLmNhcHMgPSBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV8yNTYgfCBGRV9DQU5fOFZTQgogCX0sCiAJLmluaXQgICAgICAgICAgICAgICAgID0gbGdkdDMzMHhfaW5pdCwKQEAgLTc2Nyw5ICs3NzgsOCBAQAogCQkuZnJlcXVlbmN5X21pbj0gNTQwMDAwMDAsCiAJCS5mcmVxdWVuY3lfbWF4PSA4NTgwMDAwMDAsCiAJCS5mcmVxdWVuY3lfc3RlcHNpemU9IDYyNTAwLAotCQkvKiBTeW1ib2wgcmF0ZSBpcyBmb3IgYWxsIFZTQiBtb2RlcyBuZWVkIHRvIGNoZWNrIFFBTSAqLwotCQkuc3ltYm9sX3JhdGVfbWluICAgID0gMTA3NjIwMDAsCi0JCS5zeW1ib2xfcmF0ZV9tYXggICAgPSAxMDc2MjAwMCwKKwkJLnN5bWJvbF9yYXRlX21pbiAgICA9IDUwNTY5NDEsCS8qIFFBTSA2NCAqLworCQkuc3ltYm9sX3JhdGVfbWF4ICAgID0gMTA3NjIwMDAsCS8qIFZTQiA4ICAqLwogCQkuY2FwcyA9IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNXzI1NiB8IEZFX0NBTl84VlNCCiAJfSwKIAkuaW5pdCAgICAgICAgICAgICAgICAgPSBsZ2R0MzMweF9pbml0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguaAppbmRleCBlMjA5YmExLi4yYTY1MjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguaApAQCAtNDcsNiArNDcsMTAgQEAKIAogCS8qIE5lZWQgdG8gc2V0IGRldmljZSBwYXJhbSBmb3Igc3RhcnRfZG1hICovCiAJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOworCisJLyogRmxpcCB0aGUgcG9sYXJpdHkgb2YgdGhlIG1wZWcgZGF0YSB0cmFuc2ZlciBjbG9jayB1c2luZyBhbHRlcm5hdGUgaW5pdCBkYXRhCisJICogVGhpcyBvcHRpb24gYXBwbGllcyBPTkxZIHRvIExHRFQzMzAzIC0gMDpkaXNhYmxlZCAoZGVmYXVsdCkgMTplbmFibGVkICovCisJaW50IGNsb2NrX3BvbGFyaXR5X2ZsaXA7CiB9OwogCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbGdkdDMzMHhfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMweF9jb25maWcqIGNvbmZpZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDA5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5jCkBAIC0wLDAgKzEsMTIwNSBAQAorLyoKKyAqICAgIFN1cHBvcnQgZm9yIE5YVDIwMDIgYW5kIE5YVDIwMDQgLSBWU0IvUUFNCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA1IEtpcmsgTGFwcmF5IChraXJrLmxhcHJheUBnbWFpbC5jb20pCisgKiAgICBiYXNlZCBvbiBueHQyMDAyIGJ5IFRheWxvciBKYWNvYiA8cnRqYWNvYkBlYXJ0aGxpbmsubmV0PgorICogICAgYW5kIG54dDIwMDQgYnkgSmVhbi1GcmFuY29pcyBUaGliZXJ0IChqZWFuZnJhbmNvaXNAc2FnZXR2LmNvbSkKKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisqLworCisvKgorICogICAgICAgICAgICAgICAgICAgICAgTk9URVMgQUJPVVQgVEhJUyBEUklWRVIKKyAqCisgKiBUaGlzIExpbnV4IGRyaXZlciBzdXBwb3J0czoKKyAqICAgQjJDMi9CQlRJIFRlY2huaXNhdCBBaXIyUEMgLSBBVFNDIChOWFQyMDAyKQorICogICBBdmVyVFZIRCBNQ0UgQTE4MCAoTlhUMjAwNCkKKyAqICAgQVRJIEhEVFYgV29uZGVyIChOWFQyMDA0KQorICoKKyAqIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCisgKiAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBueHQyMDAyIiBvcgorICogIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgbnh0MjAwNCIgdG8KKyAqIGRvd25sb2FkL2V4dHJhY3QgdGhlIGFwcHJvcHJpYXRlIGZpcm13YXJlLCBhbmQgdGhlbiBjb3B5IGl0IHRvCisgKiAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlLyBvciAvbGliL2Zpcm13YXJlLworICogKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgorICovCisjZGVmaW5lIE5YVDIwMDJfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLW54dDIwMDIuZnciCisjZGVmaW5lIE5YVDIwMDRfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLW54dDIwMDQuZnciCisjZGVmaW5lIENSQ19DQ0lUX01BU0sgMHgxMDIxCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2Yi1wbGwuaCIKKyNpbmNsdWRlICJueHQyMDB4LmgiCisKK3N0cnVjdCBueHQyMDB4X3N0YXRlIHsKKworCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIG9wczsKKwljb25zdCBzdHJ1Y3Qgbnh0MjAweF9jb25maWcqIGNvbmZpZzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJLyogZGVtb2R1bGF0b3IgcHJpdmF0ZSBkYXRhICovCisJbnh0X2NoaXBfdHlwZSBkZW1vZF9jaGlwOworCXU4IGluaXRpYWxpc2VkOjE7Cit9OworCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAibnh0MjAweDogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgaTJjX3dyaXRlYnl0ZXMgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTggYWRkciwgdTggKmJ1ZiwgdTggbGVuKQoreworCWludCBlcnI7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfTsKKworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyIChzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAibnh0MjAweDogJXM6IGkyYyB3cml0ZSBlcnJvciAoYWRkciAweCUwMngsIGVyciA9PSAlaSlcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGFkZHIsIGVycik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IGkyY19yZWFkYnl0ZXMgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTggYWRkciwgdTgqIGJ1ZiwgdTggbGVuKQoreworCWludCBlcnI7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYnVmLCAubGVuID0gbGVuIH07CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm54dDIwMHg6ICVzOiBpMmMgcmVhZCBlcnJvciAoYWRkciAweCUwMngsIGVyciA9PSAlaSlcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGFkZHIsIGVycik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3dyaXRlYnl0ZXMgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1OCAqYnVmLCB1OCBsZW4pCit7CisJdTggYnVmMiBbbGVuKzFdOworCWludCBlcnI7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYyLCAubGVuID0gbGVuICsgMSB9OworCisJYnVmMlswXSA9IHJlZzsKKwltZW1jcHkoJmJ1ZjJbMV0sIGJ1ZiwgbGVuKTsKKworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyIChzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAibnh0MjAweDogJXM6IGkyYyB3cml0ZSBlcnJvciAoYWRkciAweCUwMngsIGVyciA9PSAlaSlcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIGVycik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IG54dDIwMHhfcmVhZGJ5dGVzIChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTgqIGJ1ZiwgdTggbGVuKQoreworCXU4IHJlZzIgW10gPSB7IHJlZyB9OworCisJc3RydWN0IGkyY19tc2cgbXNnIFtdID0geyB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IHJlZzIsIC5sZW4gPSAxIH0sCisJCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfSB9OworCisJaW50IGVycjsKKworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyIChzdGF0ZS0+aTJjLCBtc2csIDIpKSAhPSAyKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJueHQyMDB4OiAlczogaTJjIHJlYWQgZXJyb3IgKGFkZHIgMHglMDJ4LCBlcnIgPT0gJWkpXG4iLAorCQkJX19GVU5DVElPTl9fLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCBlcnIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MTYgbnh0MjAweF9jcmModTE2IGNyYywgdTggYykKK3sKKwl1OCBpOworCXUxNiBpbnB1dCA9ICh1MTYpIGMgJiAweEZGOworCisJaW5wdXQ8PD04OworCWZvcihpPTA7IGk8ODsgaSsrKSB7CisJCWlmKChjcmNeaW5wdXQpICYgMHg4MDAwKQorCQkJY3JjPShjcmM8PDEpXkNSQ19DQ0lUX01BU0s7CisJCWVsc2UKKwkJCWNyYzw8PTE7CisJCWlucHV0PDw9MTsKKwl9CisJcmV0dXJuIGNyYzsKK30KKworc3RhdGljIGludCBueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZSAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4KiBkYXRhLCB1OCBsZW4pCit7CisJdTggYXR0ciwgbGVuMiwgYnVmOworCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogc2V0IG11dGxpIHJlZ2lzdGVyIHJlZ2lzdGVyICovCisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM1LCAmcmVnLCAxKTsKKworCS8qIHNlbmQgdGhlIGFjdHVhbCBkYXRhICovCisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM2LCBkYXRhLCBsZW4pOworCisJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfY2hpcCkgeworCQljYXNlIE5YVDIwMDI6CisJCQlsZW4yID0gbGVuOworCQkJYnVmID0gMHgwMjsKKwkJCWJyZWFrOworCQljYXNlIE5YVDIwMDQ6CisJCQkvKiBwcm9iYWJseSBub3QgcmlnaHQsIGJ1dCBnaXZlcyBjb3JyZWN0IHZhbHVlcyAqLworCQkJYXR0ciA9IDB4MDI7CisJCQlpZiAocmVnICYgMHg4MCkgeworCQkJCWF0dHIgPSBhdHRyIDw8IDE7CisJCQkJaWYgKHJlZyAmIDB4MDQpCisJCQkJCWF0dHIgPSBhdHRyID4+IDE7CisJCQl9CisJCQkvKiBzZXQgd3JpdGUgYml0ICovCisJCQlsZW4yID0gKChhdHRyIDw8IDQpIHwgMHgxMCkgfCBsZW47CisJCQlidWYgPSAweDgwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCX0KKworCS8qIHNldCBtdWx0aSByZWdpc3RlciBsZW5ndGggKi8KKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzQsICZsZW4yLCAxKTsKKworCS8qIHRvZ2dsZSB0aGUgbXVsdGlyZWcgd3JpdGUgYml0ICovCisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIxLCAmYnVmLCAxKTsKKworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDIxLCAmYnVmLCAxKTsKKworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJaWYgKChidWYgJiAweDAyKSA9PSAwKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCWNhc2UgTlhUMjAwNDoKKwkJCWlmIChidWYgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJueHQyMDB4OiBFcnJvciB3cml0aW5nIG11bHRpcmVnIHJlZ2lzdGVyIDB4JTAyWFxuIixyZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZSAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4KiBkYXRhLCB1OCBsZW4pCit7CisJaW50IGk7CisJdTggYnVmLCBsZW4yLCBhdHRyOworCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogc2V0IG11dGxpIHJlZ2lzdGVyIHJlZ2lzdGVyICovCisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM1LCAmcmVnLCAxKTsKKworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJLyogc2V0IG11bHRpIHJlZ2lzdGVyIGxlbmd0aCAqLworCQkJbGVuMiA9IGxlbiAmIDB4ODA7CisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzQsICZsZW4yLCAxKTsKKworCQkJLyogcmVhZCB0aGUgYWN0dWFsIGRhdGEgKi8KKwkJCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCByZWcsIGRhdGEsIGxlbik7CisJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQljYXNlIE5YVDIwMDQ6CisJCQkvKiBwcm9iYWJseSBub3QgcmlnaHQsIGJ1dCBnaXZlcyBjb3JyZWN0IHZhbHVlcyAqLworCQkJYXR0ciA9IDB4MDI7CisJCQlpZiAocmVnICYgMHg4MCkgeworCQkJCWF0dHIgPSBhdHRyIDw8IDE7CisJCQkJaWYgKHJlZyAmIDB4MDQpCisJCQkJCWF0dHIgPSBhdHRyID4+IDE7CisJCQl9CisKKwkJCS8qIHNldCBtdWx0aSByZWdpc3RlciBsZW5ndGggKi8KKwkJCWxlbjIgPSAoYXR0ciA8PCA0KSB8IGxlbjsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNCwgJmxlbjIsIDEpOworCisJCQkvKiB0b2dnbGUgdGhlIG11bHRpcmVnIGJpdCovCisJCQlidWYgPSAweDgwOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIxLCAmYnVmLCAxKTsKKworCQkJLyogcmVhZCB0aGUgYWN0dWFsIGRhdGEgKi8KKwkJCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MzYgKyBpLCAmZGF0YVtpXSwgMSk7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG54dDIwMHhfbWljcm9jb250cm9sbGVyX3N0b3AgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSkKK3sKKwl1OCBidWYsIHN0b3B2YWwsIGNvdW50ZXIgPSAwOworCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogc2V0IGNvcnJlY3Qgc3RvcCB2YWx1ZSAqLworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJc3RvcHZhbCA9IDB4NDA7CisJCQlicmVhazsKKwkJY2FzZSBOWFQyMDA0OgorCQkJc3RvcHZhbCA9IDB4MTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0b3B2YWwgPSAwOworCQkJYnJlYWs7CisJfQorCisJYnVmID0gMHg4MDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MjIsICZidWYsIDEpOworCisJd2hpbGUgKGNvdW50ZXIgPCAyMCkgeworCQlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgzMSwgJmJ1ZiwgMSk7CisJCWlmIChidWYgJiBzdG9wdmFsKQorCQkJcmV0dXJuOworCQltc2xlZXAoMTApOworCQljb3VudGVyKys7CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyAibnh0MjAweDogVGltZW91dCB3YWl0aW5nIGZvciBueHQyMDB4IHRvIHN0b3AuIFRoaXMgaXMgb2sgYWZ0ZXIgZmlybXdhcmUgdXBsb2FkLlxuIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdGFydCAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlKQoreworCXU4IGJ1ZjsKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWJ1ZiA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIyLCAmYnVmLCAxKTsKK30KKworc3RhdGljIHZvaWQgbnh0MjAwNF9taWNyb2NvbnRyb2xsZXJfaW5pdCAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlKQoreworCXU4IGJ1Zls5XTsKKwl1OCBjb3VudGVyID0gMDsKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDJiLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4NzA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM0LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDQ7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM1LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDE7IGJ1ZlsxXSA9IDB4MjM7IGJ1ZlsyXSA9IDB4NDU7IGJ1ZlszXSA9IDB4Njc7IGJ1Zls0XSA9IDB4ODk7CisJYnVmWzVdID0gMHhBQjsgYnVmWzZdID0gMHhDRDsgYnVmWzddID0gMHhFRjsgYnVmWzhdID0gMHhDMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzYsIGJ1ZiwgOSk7CisJYnVmWzBdID0gMHg4MDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MjEsIGJ1ZiwgMSk7CisKKwl3aGlsZSAoY291bnRlciA8IDIwKSB7CisJCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDIxLCBidWYsIDEpOworCQlpZiAoYnVmWzBdID09IDApCisJCQlyZXR1cm47CisJCW1zbGVlcCgxMCk7CisJCWNvdW50ZXIrKzsKKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJueHQyMDB4OiBUaW1lb3V0IHdhaXRpbmcgZm9yIG54dDIwMDQgdG8gaW5pdC5cbiIpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG54dDIwMHhfd3JpdGV0dW5lciAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlLCB1OCogZGF0YSkKK3sKKwl1OCBidWYsIGNvdW50ID0gMDsKKworCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJZHByaW50aygiVHVuZXIgQnl0ZXM6ICUwMlggJTAyWCAlMDJYICUwMlhcbiIsIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCisJLyogaWYgTlhUMjAwNCwgd3JpdGUgZGlyZWN0bHkgdG8gdHVuZXIuIGlmIE5YVDIwMDIsIHdyaXRlIHRocm91Z2ggTlhUIGNoaXAuCisJICogZGlyZWN0IHdyaXRlIGlzIHJlcXVpcmVkIGZvciBQaGlsaXBzIFRVVjEyMzZEIGFuZCBBTFBTIFRESFUyICovCisJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfY2hpcCkgeworCQljYXNlIE5YVDIwMDQ6CisJCQlpZiAoaTJjX3dyaXRlYnl0ZXMoc3RhdGUsIHN0YXRlLT5jb25maWctPnBsbF9hZGRyZXNzLCBkYXRhLCA0KSkKKwkgICAgICAgIAkgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIm54dDIwMHg6IGVycm9yIHdyaXRpbmcgdG8gdHVuZXJcbiIpOworCQkJLyogd2FpdCB1bnRpbCB3ZSBoYXZlIGEgbG9jayAqLworCQkJd2hpbGUgKGNvdW50IDwgMjApIHsKKwkJCQlpMmNfcmVhZGJ5dGVzKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5wbGxfYWRkcmVzcywgJmJ1ZiwgMSk7CisJCQkJaWYgKGJ1ZiAmIDB4NDApCisJCQkJCXJldHVybiAwOworCQkJCW1zbGVlcCgxMDApOworCQkJCWNvdW50Kys7CisJCQl9CisJCQlwcmludGsoIm54dDIwMDQ6IHRpbWVvdXQgd2FpdGluZyBmb3IgdHVuZXIgbG9ja1xuIik7CisJCQlicmVhazsKKwkJY2FzZSBOWFQyMDAyOgorCQkJLyogc2V0IHRoZSBpMmMgdHJhbnNmZXIgc3BlZWQgdG8gdGhlIHR1bmVyICovCisJCQlidWYgPSAweDAzOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIwLCAmYnVmLCAxKTsKKworCQkJLyogc2V0dXAgdG8gdHJhbnNmZXIgNCBieXRlcyB2aWEgaTJjICovCisJCQlidWYgPSAweDA0OworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM0LCAmYnVmLCAxKTsKKworCQkJLyogd3JpdGUgYWN0dWFsIHR1bmVyIGJ5dGVzICovCisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzYsIGRhdGEsIDQpOworCisJCQkvKiBzZXQgdHVuZXIgaTJjIGFkZHJlc3MgKi8KKwkJCWJ1ZiA9IHN0YXRlLT5jb25maWctPnBsbF9hZGRyZXNzOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM1LCAmYnVmLCAxKTsKKworCQkJLyogd3JpdGUgVUMgT3Btb2RlIHRvIGJlZ2luIHRyYW5zZmVyICovCisJCQlidWYgPSAweDgwOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIxLCAmYnVmLCAxKTsKKworCQkJd2hpbGUgKGNvdW50IDwgMjApIHsKKwkJCQlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgyMSwgJmJ1ZiwgMSk7CisJCQkJaWYgKChidWYgJiAweDgwKT09IDB4MDApCisJCQkJCXJldHVybiAwOworCQkJCW1zbGVlcCgxMDApOworCQkJCWNvdW50Kys7CisJCQl9CisJCQlwcmludGsoIm54dDIwMDI6IHRpbWVvdXQgZXJyb3Igd3JpdGluZyB0dW5lclxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBueHQyMDB4X2FnY19yZXNldChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUpCit7CisJdTggYnVmOworCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfY2hpcCkgeworCQljYXNlIE5YVDIwMDI6CisJCQlidWYgPSAweDA4OworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDA4LCAmYnVmLCAxKTsKKwkJCWJ1ZiA9IDB4MDA7CisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MDgsICZidWYsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgTlhUMjAwNDoKKwkJCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsICZidWYsIDEpOworCQkJYnVmID0gMHgwODsKKwkJCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCAmYnVmLCAxKTsKKwkJCWJ1ZiA9IDB4MDA7CisJCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgJmJ1ZiwgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAwMl9sb2FkX2Zpcm13YXJlIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJ1ZlszXSwgd3JpdHRlbiA9IDAsIGNodW5rcG9zID0gMDsKKwl1MTYgcmFtYmFzZSwgcG9zaXRpb24sIGNyYyA9IDA7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCJGaXJtd2FyZSBpcyAlenUgYnl0ZXNcbiIsIGZ3LT5zaXplKTsKKworCS8qIEdldCB0aGUgUkFNIGJhc2UgZm9yIHRoaXMgbnh0MjAwMiAqLworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDEwLCBidWYsIDEpOworCisJaWYgKGJ1ZlswXSAmIDB4MTApCisJCXJhbWJhc2UgPSAweDEwMDA7CisJZWxzZQorCQlyYW1iYXNlID0gMHgwMDAwOworCisJZHByaW50aygicmFtYmFzZSBvbiB0aGlzIG54dDIwMDIgaXMgJTA0WFxuIiwgcmFtYmFzZSk7CisKKwkvKiBIb2xkIHRoZSBtaWNybyBpbiByZXNldCB3aGlsZSBsb2FkaW5nIGZpcm13YXJlICovCisJYnVmWzBdID0gMHg4MDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MkIsIGJ1ZiwgMSk7CisKKwlmb3IgKHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBmdy0+c2l6ZTsgcG9zaXRpb24rKykgeworCQlpZiAod3JpdHRlbiA9PSAwKSB7CisJCQljcmMgPSAwOworCQkJY2h1bmtwb3MgPSAweDI4OworCQkJYnVmWzBdID0gKChyYW1iYXNlICsgcG9zaXRpb24pID4+IDgpOworCQkJYnVmWzFdID0gKHJhbWJhc2UgKyBwb3NpdGlvbikgJiAweEZGOworCQkJYnVmWzJdID0gMHg4MTsKKwkJCS8qIHdyaXRlIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyOSwgYnVmLCAzKTsKKwkJfQorCQl3cml0dGVuKys7CisJCWNodW5rcG9zKys7CisKKwkJaWYgKCh3cml0dGVuICUgNCkgPT0gMCkKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgY2h1bmtwb3MsICZmdy0+ZGF0YVtwb3NpdGlvbi0zXSwgNCk7CisKKwkJY3JjID0gbnh0MjAweF9jcmMoY3JjLCBmdy0+ZGF0YVtwb3NpdGlvbl0pOworCisJCWlmICgod3JpdHRlbiA9PSAyNTUpIHx8IChwb3NpdGlvbisxID09IGZ3LT5zaXplKSkgeworCQkJLyogd3JpdGUgcmVtYWluaW5nIGJ5dGVzIG9mIGZpcm13YXJlICovCisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIGNodW5rcG9zKzQtKHdyaXR0ZW4gJTQpLAorCQkJCSZmdy0+ZGF0YVtwb3NpdGlvbi0od3JpdHRlbiAlNCkgKyAxXSwKKwkJCQl3cml0dGVuICU0KTsKKwkJCWJ1ZlswXSA9IGNyYyA8PCA4OworCQkJYnVmWzFdID0gY3JjICYgMHhGRjsKKworCQkJLyogd3JpdGUgY3JjICovCisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MkMsIGJ1ZiwgMik7CisKKwkJCS8qIGRvIGEgcmVhZCB0byBzdG9wIHRoaW5ncyAqLworCQkJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MkEsIGJ1ZiwgMSk7CisKKwkJCS8qIHNldCB0cmFuc2ZlciBtb2RlIHRvIGNvbXBsZXRlICovCisJCQlidWZbMF0gPSAweDgwOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDJCLCBidWYsIDEpOworCisJCQl3cml0dGVuID0gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBueHQyMDA0X2xvYWRfZmlybXdhcmUgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggYnVmWzNdOworCXUxNiByYW1iYXNlLCBwb3NpdGlvbiwgY3JjPTA7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCJGaXJtd2FyZSBpcyAlenUgYnl0ZXNcbiIsIGZ3LT5zaXplKTsKKworCS8qIHNldCByYW1iYXNlICovCisJcmFtYmFzZSA9IDB4MTAwMDsKKworCS8qIGhvbGQgdGhlIG1pY3JvIGluIHJlc2V0IHdoaWxlIGxvYWRpbmcgZmlybXdhcmUgKi8KKwlidWZbMF0gPSAweDgwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyQiwgYnVmLDEpOworCisJLyogY2FsY3VsYXRlIGZpcm13YXJlIENSQyAqLworCWZvciAocG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGZ3LT5zaXplOyBwb3NpdGlvbisrKSB7CisJICAgICAgICBjcmMgPSBueHQyMDB4X2NyYyhjcmMsIGZ3LT5kYXRhW3Bvc2l0aW9uXSk7CisJfQorCisJYnVmWzBdID0gcmFtYmFzZSA+PiA4OworCWJ1ZlsxXSA9IHJhbWJhc2UgJiAweEZGOworCWJ1ZlsyXSA9IDB4ODE7CisJLyogd3JpdGUgc3RhcnRpbmcgYWRkcmVzcyAqLworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwweDI5LGJ1ZiwzKTsKKworCWZvciAocG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGZ3LT5zaXplOykgeworCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MkMsICZmdy0+ZGF0YVtwb3NpdGlvbl0sCisJCQlmdy0+c2l6ZS1wb3NpdGlvbiA+IDI1NSA/IDI1NSA6IGZ3LT5zaXplLXBvc2l0aW9uKTsKKwkJcG9zaXRpb24gKz0gKGZ3LT5zaXplLXBvc2l0aW9uID4gMjU1ID8gMjU1IDogZnctPnNpemUtcG9zaXRpb24pOworCX0KKwlidWZbMF0gPSBjcmMgPj4gODsKKwlidWZbMV0gPSBjcmMgJiAweEZGOworCisJZHByaW50aygiZmlybXdhcmUgY3JjIGlzIDB4JTAyWCAweCUwMlhcbiIsIGJ1ZlswXSwgYnVmWzFdKTsKKworCS8qIHdyaXRlIGNyYyAqLworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyQywgYnVmLDIpOworCisJLyogZG8gYSByZWFkIHRvIHN0b3AgdGhpbmdzICovCisJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MkMsIGJ1ZiwgMSk7CisKKwkvKiBzZXQgdHJhbnNmZXIgbW9kZSB0byBjb21wbGV0ZSAqLworCWJ1ZlswXSA9IDB4ODA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDJCLCBidWYsMSk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgbnh0MjAweF9zZXR1cF9mcm9udGVuZF9wYXJhbWV0ZXJzIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggYnVmWzRdOworCisJLyogc3RvcCB0aGUgbWljcm8gZmlyc3QgKi8KKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wKHN0YXRlKTsKKworCWlmIChzdGF0ZS0+ZGVtb2RfY2hpcCA9PSBOWFQyMDA0KSB7CisJCS8qIG1ha2Ugc3VyZSBkZW1vZCBpcyBzZXQgdG8gZGlnaXRhbCAqLworCQlidWZbMF0gPSAweDA0OworCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MTQsIGJ1ZiwgMSk7CisJCWJ1ZlswXSA9IDB4MDA7CisJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxNywgYnVmLCAxKTsKKwl9CisKKwkvKiBnZXQgdHVuaW5nIGluZm9ybWF0aW9uICovCisJZHZiX3BsbF9jb25maWd1cmUoc3RhdGUtPmNvbmZpZy0+cGxsX2Rlc2MsIGJ1ZiwgcC0+ZnJlcXVlbmN5LCAwKTsKKworCS8qIHNldCBhZGRpdGlvbmFsIHBhcmFtcyAqLworCXN3aXRjaCAocC0+dS52c2IubW9kdWxhdGlvbikgeworCQljYXNlIFFBTV82NDoKKwkJY2FzZSBRQU1fMjU2OgorCQkJLyogU2V0IHB1bmN0dXJlZCBjbG9jayBmb3IgUUFNICovCisJCQkvKiBUaGlzIGlzIGp1c3QgYSBndWVzcyBzaW5jZSBJIGFtIHVuYWJsZSB0byB0ZXN0IGl0ICovCisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+c2V0X3RzX3BhcmFtcykKKwkJCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAxKTsKKworCQkJLyogc2V0IGlucHV0ICovCisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+c2V0X3BsbF9pbnB1dCkKKwkJCQlzdGF0ZS0+Y29uZmlnLT5zZXRfcGxsX2lucHV0KGJ1ZiwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBWU0JfODoKKwkJCS8qIFNldCBub24tcHVuY3R1cmVkIGNsb2NrIGZvciBWU0IgKi8KKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQorCQkJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOworCisJCQkvKiBzZXQgaW5wdXQgKi8KKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfcGxsX2lucHV0KQorCQkJCXN0YXRlLT5jb25maWctPnNldF9wbGxfaW5wdXQoYnVmLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisKKwkvKiB3cml0ZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi8KKwlueHQyMDB4X3dyaXRldHVuZXIoc3RhdGUsIGJ1Zik7CisKKwkvKiByZXNldCB0aGUgYWdjIG5vdyB0aGF0IHR1bmluZyBoYXMgYmVlbiBjb21wbGV0ZWQgKi8KKwlueHQyMDB4X2FnY19yZXNldChzdGF0ZSk7CisKKwkvKiBzZXQgdGFyZ2V0IHBvd2VyIGxldmVsICovCisJc3dpdGNoIChwLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJCWNhc2UgUUFNXzY0OgorCQljYXNlIFFBTV8yNTY6CisJCQlidWZbMF0gPSAweDc0OworCQkJYnJlYWs7CisJCWNhc2UgVlNCXzg6CisJCQlidWZbMF0gPSAweDcwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCX0KKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NDIsIGJ1ZiwgMSk7CisKKwkvKiBjb25maWd1cmUgc2RtICovCisJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfY2hpcCkgeworCQljYXNlIE5YVDIwMDI6CisJCQlidWZbMF0gPSAweDg3OworCQkJYnJlYWs7CisJCWNhc2UgTlhUMjAwNDoKKwkJCWJ1ZlswXSA9IDB4MDc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg1NywgYnVmLCAxKTsKKworCS8qIHdyaXRlIHNkbTEgaW5wdXQgKi8KKwlidWZbMF0gPSAweDEwOworCWJ1ZlsxXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDU4LCBidWYsIDIpOworCisJLyogd3JpdGUgc2RteCBpbnB1dCAqLworCXN3aXRjaCAocC0+dS52c2IubW9kdWxhdGlvbikgeworCQljYXNlIFFBTV82NDoKKwkJCQlidWZbMF0gPSAweDY4OworCQkJCWJyZWFrOworCQljYXNlIFFBTV8yNTY6CisJCQkJYnVmWzBdID0gMHg2NDsKKwkJCQlicmVhazsKKwkJY2FzZSBWU0JfODoKKwkJCQlidWZbMF0gPSAweDYwOworCQkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWJyZWFrOworCX0KKwlidWZbMV0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg1QywgYnVmLCAyKTsKKworCS8qIHdyaXRlIGFkYyBwb3dlciBscGYgZmMgKi8KKwlidWZbMF0gPSAweDA1OworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0MywgYnVmLCAxKTsKKworCWlmIChzdGF0ZS0+ZGVtb2RfY2hpcCA9PSBOWFQyMDA0KSB7CisJCS8qIHdyaXRlID8/PyAqLworCQlidWZbMF0gPSAweDAwOworCQlidWZbMV0gPSAweDAwOworCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NDYsIGJ1ZiwgMik7CisJfQorCisJLyogd3JpdGUgYWNjdW11bGF0b3IyIGlucHV0ICovCisJYnVmWzBdID0gMHg4MDsKKwlidWZbMV0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0QiwgYnVmLCAyKTsKKworCS8qIHdyaXRlIGtnMSAqLworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDRELCBidWYsIDEpOworCisJLyogd3JpdGUgc2RtMTIgbHBmIGZjICovCisJYnVmWzBdID0gMHg0NDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NTUsIGJ1ZiwgMSk7CisKKwkvKiB3cml0ZSBhZ2MgY29udHJvbCByZWcgKi8KKwlidWZbMF0gPSAweDA0OworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0MSwgYnVmLCAxKTsKKworCWlmIChzdGF0ZS0+ZGVtb2RfY2hpcCA9PSBOWFQyMDA0KSB7CisJCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJCWJ1ZlswXSA9IDB4MjQ7CisJCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCisJCS8qIHNvZnQgcmVzZXQ/ICovCisJCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisJCWJ1ZlswXSA9IDB4MTA7CisJCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCQlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCQlidWZbMF0gPSAweDAwOworCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKworCQlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCQlidWZbMF0gPSAweDA0OworCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwkJYnVmWzBdID0gMHgwMDsKKwkJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODEsIGJ1ZiwgMSk7CisJCWJ1ZlswXSA9IDB4ODA7IGJ1ZlsxXSA9IDB4MDA7IGJ1ZlsyXSA9IDB4MDA7CisJCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgyLCBidWYsIDMpOworCQlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDg4LCBidWYsIDEpOworCQlidWZbMF0gPSAweDExOworCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4OCwgYnVmLCAxKTsKKwkJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwkJYnVmWzBdID0gMHg0NDsKKwkJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJfQorCisJLyogd3JpdGUgYWdjIHVjZ3AwICovCisJc3dpdGNoIChwLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJCWNhc2UgUUFNXzY0OgorCQkJCWJ1ZlswXSA9IDB4MDI7CisJCQkJYnJlYWs7CisJCWNhc2UgUUFNXzI1NjoKKwkJCQlidWZbMF0gPSAweDAzOworCQkJCWJyZWFrOworCQljYXNlIFZTQl84OgorCQkJCWJ1ZlswXSA9IDB4MDA7CisJCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJYnJlYWs7CisJfQorCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzMCwgYnVmLCAxKTsKKworCS8qIHdyaXRlIGFnYyBjb250cm9sIHJlZyAqLworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDQxLCBidWYsIDEpOworCisJLyogd3JpdGUgYWNjdW11bGF0b3IyIGlucHV0ICovCisJYnVmWzBdID0gMHg4MDsKKwlidWZbMV0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0OSwgYnVmLDIpOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0QiwgYnVmLDIpOworCisJLyogd3JpdGUgYWdjIGNvbnRyb2wgcmVnICovCisJYnVmWzBdID0gMHgwNDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NDEsIGJ1ZiwgMSk7CisKKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdGFydChzdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmRlbW9kX2NoaXAgPT0gTlhUMjAwNCkgeworCQlueHQyMDA0X21pY3JvY29udHJvbGxlcl9pbml0KHN0YXRlKTsKKworCQkvKiA/Pz8/ICovCisJCWJ1ZlswXSA9IDB4RjA7CisJCWJ1ZlsxXSA9IDB4MDA7CisJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg1QywgYnVmLCAyKTsKKwl9CisKKwkvKiBhZGphY2VudCBjaGFubmVsIGRldGVjdGlvbiBzaG91bGQgYmUgZG9uZSBoZXJlLCBidXQgSSBkb24ndAorCWhhdmUgYW55IHN0YXRpb25zIHdpdGggdGhpcyBuZWVkIHNvIEkgY2Fubm90IHRlc3QgaXQgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMHhfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggbG9jazsKKwlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgzMSwgJmxvY2ssIDEpOworCisJKnN0YXR1cyA9IDA7CisJaWYgKGxvY2sgJiAweDIwKSB7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiBiZXIpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggYlszXTsKKworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4RTYsIGIsIDMpOworCisJKmJlciA9ICgoYlswXSA8PCA4KSArIGJbMV0pICogODsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMHhfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc3RyZW5ndGgpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggYlsyXTsKKwl1MTYgdGVtcCA9IDA7CisKKwkvKiBzZXR1cCB0byByZWFkIGNsdXN0ZXIgdmFyaWFuY2UgKi8KKwliWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4QTEsIGIsIDEpOworCisJLyogZ2V0IG11bHRyZWcgdmFsICovCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHhBNiwgYiwgMik7CisKKwl0ZW1wID0gKGJbMF0gPDwgOCkgfCBiWzFdOworCSpzdHJlbmd0aCA9ICgoMHg3RkZGIC0gdGVtcCkgJiAweDBGRkYpICogMTY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3sKKworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJbMl07CisJdTE2IHRlbXAgPSAwLCB0ZW1wMjsKKwl1MzIgc25yZGIgPSAwOworCisJLyogc2V0dXAgdG8gcmVhZCBjbHVzdGVyIHZhcmlhbmNlICovCisJYlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweEExLCBiLCAxKTsKKworCS8qIGdldCBtdWx0cmVnIHZhbCBmcm9tIDB4QTYgKi8KKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweEE2LCBiLCAyKTsKKworCXRlbXAgPSAoYlswXSA8PCA4KSB8IGJbMV07CisJdGVtcDIgPSAweDdGRkYgLSB0ZW1wOworCisJLyogc25yIHdpbGwgYmUgaW4gZGIgKi8KKwlpZiAodGVtcDIgPiAweDdGMDApCisJCXNucmRiID0gMTAwMCoyNCArICggMTAwMCooMzAtMjQpICogKCB0ZW1wMiAtIDB4N0YwMCApIC8gKCAweDdGRkYgLSAweDdGMDAgKSApOworCWVsc2UgaWYgKHRlbXAyID4gMHg3RUMwKQorCQlzbnJkYiA9IDEwMDAqMTggKyAoIDEwMDAqKDI0LTE4KSAqICggdGVtcDIgLSAweDdFQzAgKSAvICggMHg3RjAwIC0gMHg3RUMwICkgKTsKKwllbHNlIGlmICh0ZW1wMiA+IDB4N0MwMCkKKwkJc25yZGIgPSAxMDAwKjEyICsgKCAxMDAwKigxOC0xMikgKiAoIHRlbXAyIC0gMHg3QzAwICkgLyAoIDB4N0VDMCAtIDB4N0MwMCApICk7CisJZWxzZQorCQlzbnJkYiA9IDEwMDAqMCArICggMTAwMCooMTItMCkgKiAoIHRlbXAyIC0gMCApIC8gKCAweDdDMDAgLSAwICkgKTsKKworCS8qIHRoZSB2YWx1ZSByZXBvcnRlZCBiYWNrIGZyb20gdGhlIGZyb250ZW5kIHdpbGwgYmUgRkZGRj0zMmRiIDAwMDA9MGRiICovCisJKnNuciA9IHNucmRiICogKDB4RkZGRi8zMjAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggYlszXTsKKworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4RTYsIGIsIDMpOworCSp1Y2Jsb2NrcyA9IGJbMl07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisJdTggYnVmWzJdOworCisJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KKwlwcmludGsoIm54dDIwMDI6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCAoJXMpLi4uXG4iLCBOWFQyMDAyX0RFRkFVTFRfRklSTVdBUkUpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBOWFQyMDAyX0RFRkFVTFRfRklSTVdBUkUsICZzdGF0ZS0+aTJjLT5kZXYpOworCXByaW50aygibnh0MjAwMjogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkKDIpLi4uXG4iKTsKKwlpZiAocmV0KSB7CisJCXByaW50aygibnh0MjAwMjogTm8gZmlybXdhcmUgdXBsb2FkZWQgKHRpbWVvdXQgb3IgZmlsZSBub3QgZm91bmQ/KVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbnh0MjAwMl9sb2FkX2Zpcm13YXJlKGZlLCBmdyk7CisJaWYgKHJldCkgeworCQlwcmludGsoIm54dDIwMDI6IFdyaXRpbmcgZmlybXdhcmUgdG8gZGV2aWNlIGZhaWxlZFxuIik7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQlyZXR1cm4gcmV0OworCX0KKwlwcmludGsoIm54dDIwMDI6IEZpcm13YXJlIHVwbG9hZCBjb21wbGV0ZVxuIik7CisKKwkvKiBQdXQgdGhlIG1pY3JvIGludG8gcmVzZXQgKi8KKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wKHN0YXRlKTsKKworCS8qIGVuc3VyZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLworCWJ1ZlswXT0weDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyQiwgYnVmLCAxKTsKKworCS8qIFB1dCB0aGUgbWljcm8gaW50byByZXNldCBmb3IgcmVhbCB0aGlzIHRpbWUgKi8KKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wKHN0YXRlKTsKKworCS8qIHNvZnQgcmVzZXQgZXZlcnl0aGluZyAoYWdjLGZyb250ZW5kLGVxLGZlYykqLworCWJ1ZlswXSA9IDB4MEY7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDA4LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDA4LCBidWYsIDEpOworCisJLyogd3JpdGUgYWdjIHNkbSBjb25maWd1cmUgKi8KKwlidWZbMF0gPSAweEYxOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg1NywgYnVmLCAxKTsKKworCS8qIHdyaXRlIG1vZCBvdXRwdXQgZm9ybWF0ICovCisJYnVmWzBdID0gMHgyMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MDksIGJ1ZiwgMSk7CisKKwkvKiB3cml0ZSBmZWMgbXBlZyBtb2RlICovCisJYnVmWzBdID0gMHg3RTsKKwlidWZbMV0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhFOSwgYnVmLCAyKTsKKworCS8qIHdyaXRlIG11eCBzZWxlY3Rpb24gKi8KKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhDQywgYnVmLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMDRfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisJdTggYnVmWzNdOworCisJLyogPz8/ICovCisJYnVmWzBdPTB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDFFLCBidWYsIDEpOworCisJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KKwlwcmludGsoIm54dDIwMDQ6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCAoJXMpLi4uXG4iLCBOWFQyMDA0X0RFRkFVTFRfRklSTVdBUkUpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBOWFQyMDA0X0RFRkFVTFRfRklSTVdBUkUsICZzdGF0ZS0+aTJjLT5kZXYpOworCXByaW50aygibnh0MjAwNDogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkKDIpLi4uXG4iKTsKKwlpZiAocmV0KSB7CisJCXByaW50aygibnh0MjAwNDogTm8gZmlybXdhcmUgdXBsb2FkZWQgKHRpbWVvdXQgb3IgZmlsZSBub3QgZm91bmQ/KVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbnh0MjAwNF9sb2FkX2Zpcm13YXJlKGZlLCBmdyk7CisJaWYgKHJldCkgeworCQlwcmludGsoIm54dDIwMDQ6IFdyaXRpbmcgZmlybXdhcmUgdG8gZGV2aWNlIGZhaWxlZFxuIik7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQlyZXR1cm4gcmV0OworCX0KKwlwcmludGsoIm54dDIwMDQ6IEZpcm13YXJlIHVwbG9hZCBjb21wbGV0ZVxuIik7CisKKwkvKiBlbnN1cmUgdHJhbnNmZXIgaXMgY29tcGxldGUgKi8KKwlidWZbMF0gPSAweDAxOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxOSwgYnVmLCAxKTsKKworCW54dDIwMDRfbWljcm9jb250cm9sbGVyX2luaXQoc3RhdGUpOworCW54dDIwMHhfbWljcm9jb250cm9sbGVyX3N0b3Aoc3RhdGUpOworCW54dDIwMHhfbWljcm9jb250cm9sbGVyX3N0b3Aoc3RhdGUpOworCW54dDIwMDRfbWljcm9jb250cm9sbGVyX2luaXQoc3RhdGUpOworCW54dDIwMHhfbWljcm9jb250cm9sbGVyX3N0b3Aoc3RhdGUpOworCisJLyogc29mdCByZXNldCBldmVyeXRoaW5nIChhZ2MsZnJvbnRlbmQsZXEsZmVjKSovCisJYnVmWzBdID0gMHhGRjsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCisJLyogd3JpdGUgYWdjIHNkbSBjb25maWd1cmUgKi8KKwlidWZbMF0gPSAweEQ3OworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg1NywgYnVmLCAxKTsKKworCS8qID8/PyovCisJYnVmWzBdID0gMHgwNzsKKwlidWZbMV0gPSAweGZlOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNSwgYnVmLCAyKTsKKwlidWZbMF0gPSAweDEyOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDgwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyMSwgYnVmLCAxKTsKKworCS8qID8/PyovCisJYnVmWzBdID0gMHgyMTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MEEsIGJ1ZiwgMSk7CisKKwkvKiA/Pz8qLworCWJ1ZlswXSA9IDB4MDE7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisKKwkvKiB3cml0ZSBmZWMgbXBlZyBtb2RlICovCisJYnVmWzBdID0gMHg3RTsKKwlidWZbMV0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhFOSwgYnVmLCAyKTsKKworCS8qIHdyaXRlIG11eCBzZWxlY3Rpb24gKi8KKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhDQywgYnVmLCAxKTsKKworCS8qID8/PyovCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCisJLyogc29mdCByZXNldD8gKi8KKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MTA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCisJLyogPz8/Ki8KKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDE7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHg3MDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MSwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDMxOyBidWZbMV0gPSAweDVFOyBidWZbMl0gPSAweDY2OworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgyLCBidWYsIDMpOworCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4OCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDExOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDg4LCBidWYsIDEpOworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHg0MDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDEwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MTA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDEwLCBidWYsIDEpOworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDBBLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MjE7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDBBLCBidWYsIDEpOworCisJbnh0MjAwNF9taWNyb2NvbnRyb2xsZXJfaW5pdChzdGF0ZSk7CisKKwlidWZbMF0gPSAweDIxOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgwQSwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDdFOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhFOSwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhFQSwgYnVmLCAxKTsKKworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisKKwkvKiBzb2Z0IHJlc2V0PyAqLworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgxMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDQ7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MSwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDgwOyBidWZbMV0gPSAweDAwOyBidWZbMl0gPSAweDAwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgyLCBidWYsIDMpOworCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4OCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDExOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDg4LCBidWYsIDEpOworCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDQ0OworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCisJLyogaW5pdGlhbGl6ZSB0dW5lciAqLworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDEwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MTI7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDEwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDQ7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDEzLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDE2LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDQ7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDE0LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDE0LCBidWYsIDEpOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxNywgYnVmLCAxKTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MTQsIGJ1ZiwgMSk7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDE3LCBidWYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQgPSAwOworCisJaWYgKCFzdGF0ZS0+aW5pdGlhbGlzZWQpIHsKKwkJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfY2hpcCkgeworCQkJY2FzZSBOWFQyMDAyOgorCQkJCXJldCA9IG54dDIwMDJfaW5pdChmZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5YVDIwMDQ6CisJCQkJcmV0ID0gbnh0MjAwNF9pbml0KGZlKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCX0KKwkJc3RhdGUtPmluaXRpYWxpc2VkID0gMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBueHQyMDB4X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MqIGZlc2V0dGluZ3MpCit7CisJZmVzZXR0aW5ncy0+bWluX2RlbGF5X21zID0gNTAwOworCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IDA7CisJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbnh0MjAweF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIG54dDIwMHhfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBueHQyMDB4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgbnh0MjAweF9jb25maWcqIGNvbmZpZywKKwkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBOVUxMOworCXU4IGJ1ZiBbXSA9IHswLDAsMCwwLDB9OworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBueHQyMDB4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisJbWVtc2V0KHN0YXRlLDAsc2l6ZW9mKCpzdGF0ZSkpOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCW1lbWNweSgmc3RhdGUtPm9wcywgJm54dDIwMHhfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAwOworCisJLyogcmVhZCBjYXJkIGlkICovCisJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MDAsIGJ1ZiwgNSk7CisJZHByaW50aygiTlhUIGluZm86ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKwkJYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwJYnVmWzNdLCBidWZbNF0pOworCisJLyogc2V0IGRlbW9kIGNoaXAgKi8KKwlzd2l0Y2ggKGJ1ZlswXSkgeworCQljYXNlIDB4MDQ6CisJCQlzdGF0ZS0+ZGVtb2RfY2hpcCA9IE5YVDIwMDI7CisJCQlwcmludGsoIm54dDIwMHg6IE5YVDIwMDIgRGV0ZWN0ZWRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwNToKKwkJCXN0YXRlLT5kZW1vZF9jaGlwID0gTlhUMjAwNDsKKwkJCXByaW50aygibnh0MjAweDogTlhUMjAwNCBEZXRlY3RlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogbWFrZSBzdXJlIGRlbW9kIGNoaXAgaXMgc3VwcG9ydGVkICovCisJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfY2hpcCkgeworCQljYXNlIE5YVDIwMDI6CisJCQlpZiAoYnVmWzBdICE9IDB4MDQpIGdvdG8gZXJyb3I7CQkvKiBkZXZpY2UgaWQgKi8KKwkJCWlmIChidWZbMV0gIT0gMHgwMikgZ290byBlcnJvcjsJCS8qIGZhYiBpZCAqLworCQkJaWYgKGJ1ZlsyXSAhPSAweDExKSBnb3RvIGVycm9yOwkJLyogbW9udGggKi8KKwkJCWlmIChidWZbM10gIT0gMHgyMCkgZ290byBlcnJvcjsJCS8qIHllYXIgbXNiICovCisJCQlpZiAoYnVmWzRdICE9IDB4MDApIGdvdG8gZXJyb3I7CQkvKiB5ZWFyIGxzYiAqLworCQkJYnJlYWs7CisJCWNhc2UgTlhUMjAwNDoKKwkJCWlmIChidWZbMF0gIT0gMHgwNSkgZ290byBlcnJvcjsJCS8qIGRldmljZSBpZCAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwlzdGF0ZS0+ZnJvbnRlbmQub3BzID0gJnN0YXRlLT5vcHM7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXByaW50aygiVW5rbm93bi9VbnN1cHBvcnRlZCBOWFQgY2hpcDogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAorCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBueHQyMDB4X29wcyA9IHsKKworCS5pbmZvID0geworCQkubmFtZSA9ICJOZXh0d2F2ZSBOWFQyMDBYIFZTQi9RQU0gZnJvbnRlbmQiLAorCQkudHlwZSA9IEZFX0FUU0MsCisJCS5mcmVxdWVuY3lfbWluID0gIDU0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDg2MDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDE2NjY2NiwJLyogc3RlcHNpemUgaXMganVzdCBhIGd1ZXNzICovCisJCS5jYXBzID0gRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOXzhWU0IgfCBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV8yNTYKKwl9LAorCisJLnJlbGVhc2UgPSBueHQyMDB4X3JlbGVhc2UsCisKKwkuaW5pdCA9IG54dDIwMHhfaW5pdCwKKwkuc2xlZXAgPSBueHQyMDB4X3NsZWVwLAorCisJLnNldF9mcm9udGVuZCA9IG54dDIwMHhfc2V0dXBfZnJvbnRlbmRfcGFyYW1ldGVycywKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgPSBueHQyMDB4X2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzID0gbnh0MjAweF9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBueHQyMDB4X3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IG54dDIwMHhfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gbnh0MjAweF9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IG54dDIwMHhfcmVhZF91Y2Jsb2NrcywKK307CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJOWFQyMDBYIChBVFNDIDhWU0IgJiBJVFUtVCBKLjgzIEFubmV4QiA2NC8yNTYgUUFNKSBEZW1vZHVsYXRvciBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIktpcmsgTGFwcmF5LCBKZWFuLUZyYW5jb2lzIFRoaWJlcnQsIGFuZCBUYXlsb3IgSmFjb2IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworRVhQT1JUX1NZTUJPTChueHQyMDB4X2F0dGFjaCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOWQ3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgICBTdXBwb3J0IGZvciBOWFQyMDAyIGFuZCBOWFQyMDA0IC0gVlNCL1FBTQorICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwNSBLaXJrIExhcHJheSAoa2lyay5sYXByYXlAZ21haWwuY29tKQorICogICAgYmFzZWQgb24gbnh0MjAwMiBieSBUYXlsb3IgSmFjb2IgPHJ0amFjb2JAZWFydGhsaW5rLm5ldD4KKyAqICAgIGFuZCBueHQyMDA0IGJ5IEplYW4tRnJhbmNvaXMgVGhpYmVydCAoamVhbmZyYW5jb2lzQHNhZ2V0di5jb20pCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorKi8KKworI2lmbmRlZiBOWFQyMDBYX0gKKyNkZWZpbmUgTlhUMjAwWF9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCit0eXBlZGVmIGVudW0gbnh0X2NoaXBfdCB7CisJCU5YVFVOREVGSU5FRCwKKwkJTlhUMjAwMiwKKwkJTlhUMjAwNAorfW54dF9jaGlwX3R5cGU7CisKK3N0cnVjdCBueHQyMDB4X2NvbmZpZworeworCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCisJdTggZGVtb2RfYWRkcmVzczsKKworCS8qIHR1bmVyIGluZm9ybWF0aW9uICovCisJdTggcGxsX2FkZHJlc3M7CisJc3RydWN0IGR2Yl9wbGxfZGVzYyAqcGxsX2Rlc2M7CisKKwkvKiB1c2VkIHRvIHNldCBwbGwgaW5wdXQgKi8KKwlpbnQgKCpzZXRfcGxsX2lucHV0KSh1OCogYnVmLCBpbnQgaW5wdXQpOworCisJLyogbmVlZCB0byBzZXQgZGV2aWNlIHBhcmFtIGZvciBzdGFydF9kbWEgKi8KKwlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGlzX3B1bmN0dXJlZCk7Cit9OworCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbnh0MjAweF9hdHRhY2goY29uc3Qgc3RydWN0IG54dDIwMHhfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKworI2VuZGlmIC8qIE5YVDIwMFhfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmMKaW5kZXggZmM3NGM0MC4uNzhiZGVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5jCkBAIC00NjgsNiArNDY4LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNuZF9idWZbMl07CiAJdTggcmN2cl9zdGF0OwogCXUxNiBzbnJfZXF1OworCXUzMiBzaWduYWxfc3RyZW5ndGg7CiAJaW50IHVzSzsKIAogCXNuZF9idWZbMF09MHgwNDsKQEAgLTUwMyw3ICs1MDQsMTEgQEAKIAl1c0sgPSAocmN2cl9zdGF0ICYgMHgxMCkgPyAzIDogMDsKIAogICAgICAgICAvKiBUaGUgdmFsdWUgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBmcm9udGVuZCB3aWxsIGJlIEZGRkY9MTAwJSAwMDAwPTAlICovCi0JKnN0cmVuZ3RoID0gKCgoODk1MiAtIGkyMExvZzEwKHNucl9lcXUpIC0gdXNLKjEwMCkvMys1KSo2NTUzNSkvMTAwMDsKKwlzaWduYWxfc3RyZW5ndGggPSAoKCg4OTUyIC0gaTIwTG9nMTAoc25yX2VxdSkgLSB1c0sqMTAwKS8zKzUpKjY1NTM1KS8xMDAwOworCWlmIChzaWduYWxfc3RyZW5ndGggPiAweGZmZmYpCisJCSpzdHJlbmd0aCA9IDB4ZmZmZjsKKwllbHNlCisJCSpzdHJlbmd0aCA9IHNpZ25hbF9zdHJlbmd0aDsKIAlkcHJpbnRrKCJyZWFkX3NpZ25hbF9zdHJlbmd0aCAlaVxuIiwqc3RyZW5ndGgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYwppbmRleCA4YTlkYjIzLi41MzFmNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKQEAgLTMzOSw2ICszMzksNyBAQAogCXU4IHJlY19idWZbMl07CiAJdTggc25kX2J1Zls0XTsKIAl1OCBzbnJfZXF1OworCXUzMiBzaWduYWxfc3RyZW5ndGg7CiAKIAkvKiBTTlIgYWZ0ZXIgRXF1YWxpemVyICovCiAJc25kX2J1ZlswXSA9IDB4MDQ7CkBAIC0zNTgsOCArMzU5LDExIEBACiAJc25yX2VxdSA9IHJlY19idWZbMF0gJiAweGZmOwogCiAJLyogVGhlIHZhbHVlIHJlcG9ydGVkIGJhY2sgZnJvbSB0aGUgZnJvbnRlbmQgd2lsbCBiZSBGRkZGPTEwMCUgMDAwMD0wJSAqLwotCSpzdHJlbmd0aCA9ICgoKDUzMzQgLSBpMjBMb2cxMChzbnJfZXF1KSkvMys1KSo2NTUzNSkvMTAwMDsKLQorCXNpZ25hbF9zdHJlbmd0aCA9ICgoKDUzMzQgLSBpMjBMb2cxMChzbnJfZXF1KSkvMys1KSo2NTUzNSkvMTAwMDsKKwlpZiAoc2lnbmFsX3N0cmVuZ3RoID4gMHhmZmZmKQorCQkqc3RyZW5ndGggPSAweGZmZmY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzaWduYWxfc3RyZW5ndGg7CiAJZHByaW50aygicmVhZF9zaWduYWxfc3RyZW5ndGggJWlcbiIsKnN0cmVuZ3RoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKaW5kZXggODg5ZDkyNS4uMjljNDg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCkBAIC02NCw4ICs2NCwxMiBAQAogCXUzMiB0dW5lcl9mcmVxdWVuY3k7CiAJdTMyIHN5bWJvbF9yYXRlOwogCWZlX2NvZGVfcmF0ZV90IGZlY19pbm5lcjsKKwlpbnQgZXJybW9kZTsKIH07CiAKKyNkZWZpbmUgU1RBVFVTX0JFUiAwCisjZGVmaW5lIFNUQVRVU19VQ0JMT0NLUyAxCisKIHN0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgaW50IGRlYnVnX2xlZ2FjeV9kaXNoX3N3aXRjaDsKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCkBAIC0zODMsMzYgKzM4Nyw2IEBACiAJfTsKIH0KIAotc3RhdGljIGlubGluZSBzMzIgc3R2MDI5OV9jYWxjX3VzZWNfZGVsYXkgKHN0cnVjdCB0aW1ldmFsIGxhc3R0aW1lLCBzdHJ1Y3QgdGltZXZhbCBjdXJ0aW1lKQotewotCXJldHVybiAoKGN1cnRpbWUudHZfdXNlYyA8IGxhc3R0aW1lLnR2X3VzZWMpID8KLQkJMTAwMDAwMCAtIGxhc3R0aW1lLnR2X3VzZWMgKyBjdXJ0aW1lLnR2X3VzZWMgOgotCQljdXJ0aW1lLnR2X3VzZWMgLSBsYXN0dGltZS50dl91c2VjKTsKLX0KLQotc3RhdGljIHZvaWQgc3R2MDI5OV9zbGVlcF91bnRpbCAoc3RydWN0IHRpbWV2YWwgKndha2V0aW1lLCB1MzIgYWRkX3VzZWMpCi17Ci0Jc3RydWN0IHRpbWV2YWwgbGFzdHRpbWU7Ci0JczMyIGRlbHRhLCBuZXdkZWx0YTsKLQotCXdha2V0aW1lLT50dl91c2VjICs9IGFkZF91c2VjOwotCWlmICh3YWtldGltZS0+dHZfdXNlYyA+PSAxMDAwMDAwKSB7Ci0JCXdha2V0aW1lLT50dl91c2VjIC09IDEwMDAwMDA7Ci0JCXdha2V0aW1lLT50dl9zZWMrKzsKLQl9Ci0KLQlkb19nZXR0aW1lb2ZkYXkgKCZsYXN0dGltZSk7Ci0JZGVsdGEgPSBzdHYwMjk5X2NhbGNfdXNlY19kZWxheSAobGFzdHRpbWUsICp3YWtldGltZSk7Ci0JaWYgKGRlbHRhID4gMjUwMCkgewotCQltc2xlZXAgKChkZWx0YSAtIDE1MDApIC8gMTAwMCk7Ci0JCWRvX2dldHRpbWVvZmRheSAoJmxhc3R0aW1lKTsKLQkJbmV3ZGVsdGEgPSBzdHYwMjk5X2NhbGNfdXNlY19kZWxheSAobGFzdHRpbWUsICp3YWtldGltZSk7Ci0JCWRlbHRhID0gKG5ld2RlbHRhID4gZGVsdGEpID8gMCA6IG5ld2RlbHRhOwotCX0KLQlpZiAoZGVsdGEgPiAwKQotCQl1ZGVsYXkgKGRlbHRhKTsKLX0KLQogc3RhdGljIGludCBzdHYwMjk5X3NlbmRfbGVnYWN5X2Rpc2hfY21kIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyIGNtZCkKIHsKIAlzdHJ1Y3Qgc3R2MDI5OV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTQ0MCw3ICs0MTQsNyBAQAogCQltZW1jcHkgKCZ0dlswXSwgJm5leHR0aW1lLCBzaXplb2YgKHN0cnVjdCB0aW1ldmFsKSk7CiAJc3R2MDI5OV93cml0ZXJlZ0kgKHN0YXRlLCAweDBjLCByZWcweDBjIHwgMHg1MCk7IC8qIHNldCBMTkIgdG8gMThWICovCiAKLQlzdHYwMjk5X3NsZWVwX3VudGlsICgmbmV4dHRpbWUsIDMyMDAwKTsKKwlkdmJfZnJvbnRlbmRfc2xlZXBfdW50aWwoJm5leHR0aW1lLCAzMjAwMCk7CiAKIAlmb3IgKGk9MDsgaTw5OyBpKyspIHsKIAkJaWYgKGRlYnVnX2xlZ2FjeV9kaXNoX3N3aXRjaCkKQEAgLTQ1NCwxMyArNDI4LDEzIEBACiAJCWNtZCA9IGNtZCA+PiAxOwogCiAJCWlmIChpICE9IDgpCi0JCQlzdHYwMjk5X3NsZWVwX3VudGlsICgmbmV4dHRpbWUsIDgwMDApOworCQkJZHZiX2Zyb250ZW5kX3NsZWVwX3VudGlsKCZuZXh0dGltZSwgODAwMCk7CiAJfQogCWlmIChkZWJ1Z19sZWdhY3lfZGlzaF9zd2l0Y2gpIHsKIAkJcHJpbnRrICgiJXMoJWQpOiBzd2l0Y2ggZGVsYXkgKHNob3VsZCBiZSAzMmsgZm9sbG93ZWQgYnkgYWxsIDhrXG4iLAogCQkJX19GVU5DVElPTl9fLCBmZS0+ZHZiLT5udW0pOwotCQlmb3IgKGk9MTsgaSA8IDEwOyBpKyspCi0JCQlwcmludGsgKCIlZDogJWRcbiIsIGksIHN0djAyOTlfY2FsY191c2VjX2RlbGF5ICh0dltpLTFdICwgdHZbaV0pKTsKKwkJZm9yIChpID0gMTsgaSA8IDEwOyBpKyspCisJCQlwcmludGsgKCIlZDogJWRcbiIsIGksIHRpbWV2YWxfdXNlY19kaWZmKHR2W2ktMV0gLCB0dltpXSkpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTE3LDggKzQ5MSw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBzdHYwMjk5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0Jc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MzQsIChzdHYwMjk5X3JlYWRyZWcoc3RhdGUsIDB4MzQpICYgMHhjZikgfCAweDEwKTsKLQltc2xlZXAoMTAwKTsKKwlpZiAoc3RhdGUtPmVycm1vZGUgIT0gU1RBVFVTX0JFUikgcmV0dXJuIDA7CiAJKmJlciA9IChzdHYwMjk5X3JlYWRyZWcgKHN0YXRlLCAweDFkKSA8PCA4KSB8IHN0djAyOTlfcmVhZHJlZyAoc3RhdGUsIDB4MWUpOwogCiAJcmV0dXJuIDA7CkBAIC01NTcsOSArNTMwLDggQEAKIHsKICAgICAgICAgc3RydWN0IHN0djAyOTlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgzNCwgKHN0djAyOTlfcmVhZHJlZyhzdGF0ZSwgMHgzNCkgJiAweGNmKSB8IDB4MzApOwotCW1zbGVlcCgxMDApOwotCSp1Y2Jsb2NrcyA9IChzdHYwMjk5X3JlYWRyZWcgKHN0YXRlLCAweDFkKSA8PCA4KSB8IHN0djAyOTlfcmVhZHJlZyAoc3RhdGUsIDB4MWUpOworCWlmIChzdGF0ZS0+ZXJybW9kZSAhPSBTVEFUVVNfVUNCTE9DS1MpICp1Y2Jsb2NrcyA9IDA7CisJZWxzZSAqdWNibG9ja3MgPSAoc3R2MDI5OV9yZWFkcmVnIChzdGF0ZSwgMHgxZCkgPDwgOCkgfCBzdHYwMjk5X3JlYWRyZWcgKHN0YXRlLCAweDFlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTgxLDQ5ICs1NTMsMTQgQEAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+aW52ZXJ0KSBpbnZ2YWwgPSAofmludnZhbCkgJiAxOwogCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDBjLCAoc3R2MDI5OV9yZWFkcmVnKHN0YXRlLCAweDBjKSAmIDB4ZmUpIHwgaW52dmFsKTsKIAotCWlmIChzdGF0ZS0+Y29uZmlnLT5lbmhhbmNlZF90dW5pbmcpIHsKLQkJLyogY2hlY2sgaWYgd2Ugc2hvdWxkIGRvIGEgZmluZXR1bmUgKi8KLQkJaW50IGZyZXF1ZW5jeV9kZWx0YSA9IHAtPmZyZXF1ZW5jeSAtIHN0YXRlLT50dW5lcl9mcmVxdWVuY3k7Ci0JCWludCBtaW5tYXggPSBwLT51LnFwc2suc3ltYm9sX3JhdGUgLyAyMDAwOwotCQlpZiAobWlubWF4IDwgNTAwMCkgbWlubWF4ID0gNTAwMDsKKwlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgwNSwgMHhiNSk7CS8qICBlbmFibGUgaTJjIHJlcGVhdGVyIG9uIHN0djAyOTkgICovCisJc3RhdGUtPmNvbmZpZy0+cGxsX3NldChmZSwgc3RhdGUtPmkyYywgcCk7CisJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4MzUpOwkvKiAgZGlzYWJsZSBpMmMgcmVwZWF0ZXIgb24gc3R2MDI5OSAgKi8KIAotCQlpZiAoKGZyZXF1ZW5jeV9kZWx0YSA+IC1taW5tYXgpICYmIChmcmVxdWVuY3lfZGVsdGEgPCBtaW5tYXgpICYmIChmcmVxdWVuY3lfZGVsdGEgIT0gMCkgJiYKLQkJICAgIChzdGF0ZS0+ZmVjX2lubmVyID09IHAtPnUucXBzay5mZWNfaW5uZXIpICYmCi0JCSAgICAoc3RhdGUtPnN5bWJvbF9yYXRlID09IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkpIHsKLQkJCWludCBEcm90X2ZyZXEgPSAoZnJlcXVlbmN5X2RlbHRhIDw8IDE2KSAvIChzdGF0ZS0+Y29uZmlnLT5tY2xrIC8gMTAwMCk7Ci0KLQkJCS8vIHphcCB0aGUgZGVyb3RhdG9yIHJlZ2lzdGVycyBmaXJzdAotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjIsIDB4MDApOwotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjMsIDB4MDApOwotCi0JCQkvLyBub3cgc2V0IHRoZW0gYXMgd2Ugd2FudAotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjIsIERyb3RfZnJlcSA+PiA4KTsKLQkJCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIzLCBEcm90X2ZyZXEpOwotCQl9IGVsc2UgewotCQkJLyogQSAibm9ybWFsIiB0dW5lIGlzIHJlcXVlc3RlZCAqLwotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4YjUpOwkvKiAgZW5hYmxlIGkyYyByZXBlYXRlciBvbiBzdHYwMjk5ICAqLwotCQkJc3RhdGUtPmNvbmZpZy0+cGxsX3NldChmZSwgc3RhdGUtPmkyYywgcCk7Ci0JCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgwNSwgMHgzNSk7CS8qICBkaXNhYmxlIGkyYyByZXBlYXRlciBvbiBzdHYwMjk5ICAqLwotCi0JCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgzMiwgMHg4MCk7Ci0JCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgyMiwgMHgwMCk7Ci0JCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgyMywgMHgwMCk7Ci0JCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgzMiwgMHgxOSk7Ci0JCQlzdHYwMjk5X3NldF9zeW1ib2xyYXRlIChmZSwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKLQkJCXN0djAyOTlfc2V0X0ZFQyAoc3RhdGUsIHAtPnUucXBzay5mZWNfaW5uZXIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4YjUpOwkvKiAgZW5hYmxlIGkyYyByZXBlYXRlciBvbiBzdHYwMjk5ICAqLwotCQlzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KGZlLCBzdGF0ZS0+aTJjLCBwKTsKLQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4MzUpOwkvKiAgZGlzYWJsZSBpMmMgcmVwZWF0ZXIgb24gc3R2MDI5OSAgKi8KLQotCQlzdHYwMjk5X3NldF9GRUMgKHN0YXRlLCBwLT51LnFwc2suZmVjX2lubmVyKTsKLQkJc3R2MDI5OV9zZXRfc3ltYm9scmF0ZSAoZmUsIHAtPnUucXBzay5zeW1ib2xfcmF0ZSk7Ci0JCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIyLCAweDAwKTsKLQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjMsIDB4MDApOwotCQlzdHYwMjk5X3JlYWRyZWcgKHN0YXRlLCAweDIzKTsKLQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MTIsIDB4YjkpOwotCX0KKwlzdHYwMjk5X3NldF9GRUMgKHN0YXRlLCBwLT51LnFwc2suZmVjX2lubmVyKTsKKwlzdHYwMjk5X3NldF9zeW1ib2xyYXRlIChmZSwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKKwlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgyMiwgMHgwMCk7CisJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjMsIDB4MDApOwogCiAJc3RhdGUtPnR1bmVyX2ZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+ZmVjX2lubmVyID0gcC0+dS5xcHNrLmZlY19pbm5lcjsKQEAgLTcwOCw2ICs2NDUsNyBAQAogCXN0YXRlLT50dW5lcl9mcmVxdWVuY3kgPSAwOwogCXN0YXRlLT5zeW1ib2xfcmF0ZSA9IDA7CiAJc3RhdGUtPmZlY19pbm5lciA9IDA7CisJc3RhdGUtPmVycm1vZGUgPSBTVEFUVVNfQkVSOwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCiAJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDIsIDB4MzQpOyAvKiBzdGFuZGJ5IG9mZiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKaW5kZXggZDBjNDQ4NC4uOWFmM2Q3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCkBAIC03Myw5ICs3Myw2IEBACiAJLyogZG9lcyB0aGUgaW52ZXJzaW9uIHJlcXVpcmUgaW52ZXJzaW9uPyAqLwogCXU4IGludmVydDoxOwogCi0JLyogU2hvdWxkIHRoZSBlbmhhbmNlZCB0dW5pbmcgY29kZSBiZSB1c2VkPyAqLwotCXU4IGVuaGFuY2VkX3R1bmluZzoxOwotCiAJLyogU2tpcCByZWluaXRpYWxpc2F0aW9uPyAqLwogCXU4IHNraXBfcmVpbml0OjE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKaW5kZXggMzUyOWM2MS4uNzk2ODc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXN0cnVjdCB0ZGExMDA0eF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORlBMTDEsIDB4ZjApOwotCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORlBMTDIsIDEwKTsgLy8gUExMIE0gPSAxMAorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORlBMTDIsIDB4MGEpOyAvLyBQTEwgTSA9IDEwCiAJaWYgKHN0YXRlLT5jb25maWctPnh0YWxfZnJlcSA9PSBUREExMDA0Nl9YVEFMXzRNICkgewogCQlkcHJpbnRrKCIlczogc2V0dGluZyB1cCBQTExzIGZvciBhIDQgTUh6IFh0YWxcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORlBMTDMsIDApOyAvLyBQTEwgUCA9IE4gPSAwCkBAIC01OTcsNyArNTk3LDEwIEBACiAJLy8gSW5pdCB0aGUgdHVuZXIgUExMCiAJaWYgKHN0YXRlLT5jb25maWctPnBsbF9pbml0KSB7CiAJCXRkYTEwMDR4X2VuYWJsZV90dW5lcl9pMmMoc3RhdGUpOwotCQlzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdChmZSk7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdChmZSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidGRhMTAwNHg6IHBsbCBpbml0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gCS1FSU87CisJCX0KIAkJdGRhMTAwNHhfZGlzYWJsZV90dW5lcl9pMmMoc3RhdGUpOwogCX0KIApAQCAtNjY3LDcgKzY3MCwxMCBAQAogCiAJLy8gc2V0IGZyZXF1ZW5jeQogCXRkYTEwMDR4X2VuYWJsZV90dW5lcl9pMmMoc3RhdGUpOwotCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIGZlX3BhcmFtcyk7CisJaWYgKHN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIGZlX3BhcmFtcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZGExMDA0eDogcGxsIHNldCBmYWlsZWRcbiIpOworCQlyZXR1cm4gCS1FSU87CisJfQogCXRkYTEwMDR4X2Rpc2FibGVfdHVuZXJfaTJjKHN0YXRlKTsKIAogCS8vIEhhcmRjb2RlZCB0byB1c2UgYXV0byBhcyBtdWNoIGFzIHBvc3NpYmxlIG9uIHRoZSBUREExMDA0NSBhcyBpdApAQCAtODMyLDYgKzgzOCw4IEBACiAKIAljYXNlIFREQTEwMDRYX0RFTU9EX1REQTEwMDQ2OgogCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9BVVRPLCAweDQwLCAweDQwKTsKKwkJbXNsZWVwKDEpOworCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDQsIDEpOwogCQlicmVhazsKIAl9CiAKQEAgLTExMjksNyArMTEzNywxMiBAQAogCQlpZiAoc3RhdGUtPmNvbmZpZy0+cGxsX3NsZWVwICE9IE5VTEwpIHsKIAkJCXRkYTEwMDR4X2VuYWJsZV90dW5lcl9pMmMoc3RhdGUpOwogCQkJc3RhdGUtPmNvbmZpZy0+cGxsX3NsZWVwKGZlKTsKLQkJCXRkYTEwMDR4X2Rpc2FibGVfdHVuZXJfaTJjKHN0YXRlKTsKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxICE9IFREQTEwMDQ2X0ZSRVFfMDUyKSB7CisJCQkJLyogc3BlY2lhbCBoYWNrIGZvciBQaGlsaXBzIEVVUk9QQSBCYXNlZCBib2FyZHM6CisJCQkJICoga2VlcCB0aGUgSTJjIGJyaWRnZSBvcGVuIGZvciB0dW5lciBhY2Nlc3MgaW4gYW5hbG9nIG1vZGUKKwkJCQkgKi8KKwkJCQl0ZGExMDA0eF9kaXNhYmxlX3R1bmVyX2kyYyhzdGF0ZSk7CisJCQl9CiAJCX0KIAkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAxLCAxKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKaW5kZXggODViNDM3Yi4uYmJlYmQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwpAQCAtMjg2LDE1ICsyODYsMTAgQEAKIAkgKiAgICAgYWx0aG91Z2ggb25lIHBhY2tldCBoYXMgYmVlbiB0cmFuc2ZlcmVkLgogCSAqLwogCWlmICgobmJwYWNrZXRzID09IDApIHx8IChuYnBhY2tldHMgPiBUU19ETUFfUEFDS0VUUykpIHsKLQkJdW5zaWduZWQgaW50IGkgPSAwLCB2YWxpZDsKKwkJdW5zaWduZWQgaW50IGkgPSAwOwogCQl3aGlsZSAocGx1dG8tPmRtYV9idWZbaV0gPT0gMHg0NykKIAkJCWkgKz0gMTg4OwotCQl2YWxpZCA9IGkgLyAxODg7Ci0JCWlmIChuYnBhY2tldHMgIT0gdmFsaWQpIHsKLQkJCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJuYnBhY2tldHM9JXUgdmFsaWQ9JXVcbiIsCi0JCQkJCW5icGFja2V0cywgdmFsaWQpOwotCQkJbmJwYWNrZXRzID0gdmFsaWQ7Ci0JCX0KKwkJbmJwYWNrZXRzID0gaSAvIDE4ODsKIAl9CiAKIAlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJnBsdXRvLT5kZW11eCwgcGx1dG8tPmRtYV9idWYsIG5icGFja2V0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IDIyYjIwM2YuLjg3ZWE1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC0xNTY2LDcgKzE1NjYsNyBAQAogCTB4MGUsIDB4MjMsICAgLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCiAJMHgxMCwgMHgzZiwgICAvLyBBR0MyICAweDNkCiAJMHgxMSwgMHg4NCwKLQkweDEyLCAweGI1LCAgIC8vIExvY2sgZGV0ZWN0OiAtNjQgIENhcnJpZXIgZnJlcSBkZXRlY3Q6b24KKwkweDEyLCAweGI5LAogCTB4MTUsIDB4YzksICAgLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKIAkweDE2LCAweDAwLAogCTB4MTcsIDB4MDAsCkBAIC0xNjQ0LDcgKzE2NDQsNiBAQAogCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKQEAgLTE2NjksNyArMTY2OCw3IEBACiAJMHgwZSwgMHgyMywgICAvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KIAkweDEwLCAweDNmLCAgIC8vIEFHQzIgIDB4M2QKIAkweDExLCAweDg0LAotCTB4MTIsIDB4YjUsICAgLy8gTG9jayBkZXRlY3Q6IC02NCAgQ2FycmllciBmcmVxIGRldGVjdDpvbgorCTB4MTIsIDB4YjksCiAJMHgxNSwgMHhjOSwgICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAogCTB4MTYsIDB4MDAsCiAJMHgxNywgMHgwMCwKQEAgLTE3MjEsNyArMTcyMCw2IEBACiAJLmluaXR0YWIgPSBhbHBzX2JzYmUxX2luaXR0YWIsCiAJLm1jbGsgPSA4ODAwMDAwMFVMLAogCS5pbnZlcnQgPSAxLAotCS5lbmhhbmNlZF90dW5pbmcgPSAwLAogCS5za2lwX3JlaW5pdCA9IDAsCiAJLm1pbl9kZWxheV9tcyA9IDEwMCwKIAkuc2V0X3N5bWJvbF9yYXRlID0gYWxwc19ic3J1Nl9zZXRfc3ltYm9sX3JhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCmluZGV4IDc2OTJjZDIuLmFhNzVkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCkBAIC00OTksNyArNDk5LDcgQEAKIAkweDBlLCAweDIzLAkJLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCiAJMHgxMCwgMHgzZiwJCS8vIEFHQzIgIDB4M2QKIAkweDExLCAweDg0LAotCTB4MTIsIDB4YjUsCQkvLyBMb2NrIGRldGVjdDogLTY0ICBDYXJyaWVyIGZyZXEgZGV0ZWN0Om9uCisJMHgxMiwgMHhiOSwKIAkweDE1LCAweGM5LAkJLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKIAkweDE2LCAweDAwLAogCTB4MTcsIDB4MDAsCkBAIC01MzEsNyArNTMxLDYgQEAKIAkuaW5pdHRhYiA9IHR5cGhvb25fY2luZXJneTEyMDBzX2luaXR0YWIsCiAJLm1jbGsgPSA4ODAwMDAwMFVMLAogCS5pbnZlcnQgPSAwLAotCS5lbmhhbmNlZF90dW5pbmcgPSAwLAogCS5za2lwX3JlaW5pdCA9IDAsCiAJLmxvY2tfb3V0cHV0ID0gU1RWMDIyOV9MT0NLT1VUUFVUXzEsCiAJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AwLApAQCAtNTQ2LDcgKzU0NSw2IEBACiAJLmluaXR0YWIgPSB0eXBob29uX2NpbmVyZ3kxMjAwc19pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMCwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8wLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggNTFjMzBiYS4uNzVmYjkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCTB4MGUsIDB4MjMsCQkvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KIAkweDEwLCAweDNmLAkJLy8gQUdDMiAgMHgzZAogCTB4MTEsIDB4ODQsCi0JMHgxMiwgMHhiNSwJCS8vIExvY2sgZGV0ZWN0OiAtNjQgIENhcnJpZXIgZnJlcSBkZXRlY3Q6b24KKwkweDEyLCAweGI5LAogCTB4MTUsIDB4YzksCQkvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAogCTB4MTYsIDB4MDAsCiAJMHgxNywgMHgwMCwKQEAgLTU4MCw3ICs1ODAsNiBAQAogCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKQEAgLTcxMCw3ICs3MDksNiBAQAogCS5pbml0dGFiID0gcGhpbGlwc19zdTEyNzhfdHRfaW5pdHRhYiwKIAkubWNsayA9IDY0MDAwMDAwVUwsCiAJLmludmVydCA9IDAsCi0JLmVuaGFuY2VkX3R1bmluZyA9IDEsCiAJLnNraXBfcmVpbml0ID0gMSwKIAkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKIAkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCmluZGV4IGIxZjIxZWYuLjc1NWRmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkweDBlLCAweDIzLCAgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwogCTB4MTAsIDB4M2YsICAgLy8gQUdDMiAgMHgzZAogCTB4MTEsIDB4ODQsCi0JMHgxMiwgMHhiNSwgICAvLyBMb2NrIGRldGVjdDogLTY0ICBDYXJyaWVyIGZyZXEgZGV0ZWN0Om9uCisJMHgxMiwgMHhiOSwKIAkweDE1LCAweGM5LCAgIC8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCiAJMHgxNiwgMHgwMCwKIAkweDE3LCAweDAwLApAQCAtMzc5LDcgKzM3OSw2IEBACiAJLmluaXR0YWIgPSBhbHBzX2JzcnU2X2luaXR0YWIsCiAJLm1jbGsgPSA4ODAwMDAwMFVMLAogCS5pbnZlcnQgPSAxLAotCS5lbmhhbmNlZF90dW5pbmcgPSAwLAogCS5za2lwX3JlaW5pdCA9IDAsCiAJLmxvY2tfb3V0cHV0ID0gU1RWMDIyOV9MT0NLT1VUUFVUXzEsCiAJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwppbmRleCA0M2Q2YzgyLi40ZmQ4YmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwpAQCAtMjI2LDEyICsyMjYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbG5icDIxX2luaXQoc3RydWN0IGJ1ZGdldCogYnVkZ2V0KQorc3RhdGljIGludCBsbmJwMjFfaW5pdChzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQpCiB7CiAJdTggYnVmID0gMHgwMDsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwgLmJ1ZiA9ICZidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCi0JaTJjX3RyYW5zZmVyICgmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFscHNfYnNydjJfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCkBAIC0yNzMsNyArMjc1LDcgQEAKIAkweDAxLCAweDE1LAogCTB4MDIsIDB4MDAsCiAJMHgwMywgMHgwMCwKLSAgICAgICAgMHgwNCwgMHg3ZCwgICAvKiBGMjJGUiA9IDB4N2QsIEYyMiA9IGZfVkNPIC8gMTI4IC8gMHg3ZCA9IDIyIGtIeiAqLworCTB4MDQsIDB4N2QsICAgLyogRjIyRlIgPSAweDdkLCBGMjIgPSBmX1ZDTyAvIDEyOCAvIDB4N2QgPSAyMiBrSHogKi8KIAkweDA1LCAweDM1LCAgIC8qIEkyQ1QgPSAwLCBTQ0xUID0gMSwgU0RBVCA9IDEgKi8KIAkweDA2LCAweDQwLCAgIC8qIERBQyBub3QgdXNlZCwgc2V0IHRvIGhpZ2ggaW1wZW5kYW5jZSBtb2RlICovCiAJMHgwNywgMHgwMCwgICAvKiBEQUMgTFNCICovCkBAIC0yODQsNyArMjg2LDcgQEAKIAkweDBlLCAweDIzLCAgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwogCTB4MTAsIDB4M2YsICAgLy8gQUdDMiAgMHgzZAogCTB4MTEsIDB4ODQsCi0JMHgxMiwgMHhiNSwgICAvLyBMb2NrIGRldGVjdDogLTY0ICBDYXJyaWVyIGZyZXEgZGV0ZWN0Om9uCisJMHgxMiwgMHhiOSwKIAkweDE1LCAweGM5LCAgIC8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCiAJMHgxNiwgMHgwMCwKIAkweDE3LCAweDAwLApAQCAtMzU4LDcgKzM2MCw2IEBACiAJLmluaXR0YWIgPSBhbHBzX2JzcnU2X2luaXR0YWIsCiAJLm1jbGsgPSA4ODAwMDAwMFVMLAogCS5pbnZlcnQgPSAxLAotCS5lbmhhbmNlZF90dW5pbmcgPSAwLAogCS5za2lwX3JlaW5pdCA9IDAsCiAJLmxvY2tfb3V0cHV0ID0gU1RWMDIyOV9MT0NLT1VUUFVUXzEsCiAJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLApAQCAtMzY3LDYgKzM2OCw3OSBAQAogCS5wbGxfc2V0ID0gYWxwc19ic3J1Nl9wbGxfc2V0LAogfTsKIAorc3RhdGljIHU4IGFscHNfYnNiZTFfaW5pdHRhYltdID0geworCTB4MDEsIDB4MTUsCisJMHgwMiwgMHgzMCwKKwkweDAzLCAweDAwLAorCTB4MDQsIDB4N2QsICAvKiBGMjJGUiA9IDB4N2QsIEYyMiA9IGZfVkNPIC8gMTI4IC8gMHg3ZCA9IDIyIGtIeiAqLworCTB4MDUsIDB4MzUsICAvKiBJMkNUID0gMCwgU0NMVCA9IDEsIFNEQVQgPSAxICovCisJMHgwNiwgMHg0MCwgIC8qIERBQyBub3QgdXNlZCwgc2V0IHRvIGhpZ2ggaW1wZW5kYW5jZSBtb2RlICovCisJMHgwNywgMHgwMCwgIC8qIERBQyBMU0IgKi8KKwkweDA4LCAweDQwLCAgLyogRGlTRXFDIG9mZiwgTE5CIHBvd2VyIG9uIE9QMi9MT0NLIHBpbiBvbiAqLworCTB4MDksIDB4MDAsICAvKiBGSUZPICovCisJMHgwYywgMHg1MSwgIC8qIE9QMSBjdGwgPSBOb3JtYWwsIE9QMSB2YWwgPSAxIChMTkIgUG93ZXIgT04pICovCisJMHgwZCwgMHg4MiwgIC8qIERDIG9mZnNldCBjb21wZW5zYXRpb24gPSBPTiwgYmV0YV9hZ2MxID0gMiAqLworCTB4MGUsIDB4MjMsICAvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KKwkweDEwLCAweDNmLCAgLy8gQUdDMiAweDNkCisJMHgxMSwgMHg4NCwKKwkweDEyLCAweGI5LAorCTB4MTUsIDB4YzksICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAorCTB4MTYsIDB4MDAsCisJMHgxNywgMHgwMCwKKwkweDE4LCAweDAwLAorCTB4MTksIDB4MDAsCisJMHgxYSwgMHgwMCwKKwkweDFmLCAweDUwLAorCTB4MjAsIDB4MDAsCisJMHgyMSwgMHgwMCwKKwkweDIyLCAweDAwLAorCTB4MjMsIDB4MDAsCisJMHgyOCwgMHgwMCwgLy8gb3V0IGltcDogbm9ybWFsIG91dCB0eXBlOiBwYXJhbGxlbCBGRUMgbW9kZTowCisJMHgyOSwgMHgxZSwgLy8gMS8yIHRocmVzaG9sZAorCTB4MmEsIDB4MTQsIC8vIDIvMyB0aHJlc2hvbGQKKwkweDJiLCAweDBmLCAvLyAzLzQgdGhyZXNob2xkCisJMHgyYywgMHgwOSwgLy8gNS82IHRocmVzaG9sZAorCTB4MmQsIDB4MDUsIC8vIDcvOCB0aHJlc2hvbGQKKwkweDJlLCAweDAxLAorCTB4MzEsIDB4MWYsIC8vIHRlc3QgYWxsIEZFQ3MKKwkweDMyLCAweDE5LCAvLyB2aXRlcmJpIGFuZCBzeW5jaHJvIHNlYXJjaAorCTB4MzMsIDB4ZmMsIC8vIHJzIGNvbnRyb2wKKwkweDM0LCAweDkzLCAvLyBlcnJvciBjb250cm9sCisJMHgwZiwgMHg5MiwgLy8gMHg4MCA9IGludmVyc2UgQUdDCisJMHhmZiwgMHhmZgorfTsKKworc3RhdGljIGludCBhbHBzX2JzYmUxX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKK3sKKwlpbnQgcmV0OworCXU4IGRhdGFbNF07CisJdTMyIGRpdjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSkgfTsKKworCWlmICgocGFyYW1zLT5mcmVxdWVuY3kgPCA5NTAwMDApIHx8IChwYXJhbXMtPmZyZXF1ZW5jeSA+IDIxNTAwMDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArICgxMjUgLSAxKSkgLyAxMjU7IC8vIHJvdW5kIGNvcnJlY3RseQorCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlkYXRhWzFdID0gZGl2ICYgMHhmZjsKKwlkYXRhWzJdID0gMHg4MCB8ICgoZGl2ICYgMHgxODAwMCkgPj4gMTApIHwgNDsKKwlkYXRhWzNdID0gKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMTUzMDAwMCkgPyAweEUwIDogMHhFNDsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpOworCXJldHVybiAocmV0ICE9IDEpID8gLUVJTyA6IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgYWxwc19ic2JlMV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gYWxwc19ic2JlMV9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMSwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IGFscHNfYnNydTZfc2V0X3N5bWJvbF9yYXRlLAorCS5wbGxfc2V0ID0gYWxwc19ic2JlMV9wbGxfc2V0LAorfTsKKwogc3RhdGljIGludCBhbHBzX3RkYmUyX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQogewogCXN0cnVjdCBidWRnZXQqIGJ1ZGdldCA9IChzdHJ1Y3QgYnVkZ2V0KikgZmUtPmR2Yi0+cHJpdjsKQEAgLTUwMCw2ICs1NzQsMTkgQEAKIHN0YXRpYyB2b2lkIGZyb250ZW5kX2luaXQoc3RydWN0IGJ1ZGdldCAqYnVkZ2V0KQogewogCXN3aXRjaChidWRnZXQtPmRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7CisJY2FzZSAweDEwMTc6CisJCS8vIHRyeSB0aGUgQUxQUyBCU0JFMSBub3cKKwkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic2JlMV9jb25maWcsICZidWRnZXQtPmkyY19hZGFwKTsKKwkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CisJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKKwkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOworCQkJaWYgKGxuYnAyMV9pbml0KGJ1ZGdldCkpIHsKKwkJCQlwcmludGsoIiVzOiBObyBMTkJQMjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfQorCQl9CisKKwkJYnJlYWs7CiAJY2FzZSAweDEwMDM6IC8vIEhhdXBwYXVnZS9UVCBOb3ZhIGJ1ZGdldCAoc3R2MDI5OS9BTFBTIEJTUlU2KHRzYTUwNTkpIE9SIHZlczE4OTMvQUxQUyBCU1JWMihzcDU2NTkpKQogCWNhc2UgMHgxMDEzOgogCQkvLyB0cnkgdGhlIEFMUFMgQlNSVjIgZmlyc3Qgb2YgYWxsCkBAIC01NTQsNyArNjQxLDEwIEBACiAJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgewogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+c2V0X3ZvbHRhZ2UgPSBsbmJwMjFfc2V0X3ZvbHRhZ2U7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSA9IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZTsKLQkJCWxuYnAyMV9pbml0KGJ1ZGdldCk7CisJCQlpZiAobG5icDIxX2luaXQoYnVkZ2V0KSkgeworCQkJCXByaW50aygiJXM6IE5vIExOQlAyMSBmb3VuZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQl9CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTU2NiwxMyArNjU2LDE3IEBACiAJCSAgICAgICBidWRnZXQtPmRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CiAJfSBlbHNlIHsKLQkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmYnVkZ2V0LT5kdmJfYWRhcHRlciwgYnVkZ2V0LT5kdmJfZnJvbnRlbmQpKSB7Ci0JCQlwcmludGsoImJ1ZGdldDogRnJvbnRlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZCFcbiIpOwotCQkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnJlbGVhc2UpCi0JCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+cmVsZWFzZShidWRnZXQtPmR2Yl9mcm9udGVuZCk7Ci0JCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IE5VTEw7Ci0JCX0KKwkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmYnVkZ2V0LT5kdmJfYWRhcHRlciwgYnVkZ2V0LT5kdmJfZnJvbnRlbmQpKQorCQkJZ290byBlcnJvcl9vdXQ7CiAJfQorCXJldHVybjsKKworZXJyb3Jfb3V0OgorCXByaW50aygiYnVkZ2V0OiBGcm9udGVuZCByZWdpc3RyYXRpb24gZmFpbGVkIVxuIik7CisJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnJlbGVhc2UpCisJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnJlbGVhc2UoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpOworCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gTlVMTDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgYnVkZ2V0X2F0dGFjaCAoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKQEAgLTYxOCw2ICs3MTIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CiAKK01BS0VfQlVER0VUX0lORk8odHRiczIsICJUVC1CdWRnZXQvV2luVFYtTk9WQS1TIFBDSSAocmV2IEFML2FscHMgYnNiZTEgbG5icDIxIGZyb250ZW5kKSIsIEJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YnMsCSJUVC1CdWRnZXQvV2luVFYtTk9WQS1TICBQQ0kiLAlCVURHRVRfVFQpOwogTUFLRV9CVURHRVRfSU5GTyh0dGJjLAkiVFQtQnVkZ2V0L1dpblRWLU5PVkEtQyAgUENJIiwJQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRidCwJIlRULUJ1ZGdldC9XaW5UVi1OT1ZBLVQgIFBDSSIsCUJVREdFVF9UVCk7CkBAIC02MzAsNiArNzI1LDcgQEAKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiYywgIDB4MTNjMiwgMHgxMDA0KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRidCwgIDB4MTNjMiwgMHgxMDA1KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZWwsIDB4MTNjMiwgMHgxMDEzKSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiczIsIDB4MTNjMiwgMHgxMDE3KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRicywgIDB4MTNjMiwgMHgxMDE2KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koZnNhY3MxLDB4MTEzMSwgMHg0ZjYwKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koZnNhY3MwLDB4MTEzMSwgMHg0ZjYxKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCmluZGV4IGQyMDBhYjAuLmZkNTNkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKICAgICAgICAgMHgwZSwgMHgyMywgICAgICAgICAgICAgLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCiAgICAgICAgIDB4MTAsIDB4M2YsICAgICAgICAgICAgIC8vIEFHQzIgIDB4M2QKICAgICAgICAgMHgxMSwgMHg4NCwKLSAgICAgICAgMHgxMiwgMHhiNSwgICAgICAgICAgICAgLy8gTG9jayBkZXRlY3Q6IC02NCAgQ2FycmllciBmcmVxIGRldGVjdDpvbgorICAgICAgICAweDEyLCAweGI5LAogICAgICAgICAweDE1LCAweGM5LCAgICAgICAgICAgICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAogICAgICAgICAweDE2LCAweDAwLAogICAgICAgICAweDE3LCAweDAwLApAQCAtMTI0MCw3ICsxMjQwLDcgQEAKIAkweDBlLCAweDIzLAkJLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCiAJMHgxMCwgMHgzZiwJCS8vIEFHQzIgIDB4M2QKIAkweDExLCAweDg0LAotCTB4MTIsIDB4YjUsCQkvLyBMb2NrIGRldGVjdDogLTY0ICBDYXJyaWVyIGZyZXEgZGV0ZWN0Om9uCisJMHgxMiwgMHhiOSwKIAkweDE1LCAweGM5LAkJLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKIAkweDE2LCAweDAwLAogCTB4MTcsIDB4MDAsCkBAIC0xMzM1LDcgKzEzMzUsNiBAQAogCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCBiYmI5ODlkLi4xOTliMDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0yNSw2ICsyNSwxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYnR0di4KIAorY29uZmlnIFZJREVPX0JUODQ4X0RWQgorCXRyaXN0YXRlICJEVkIvQVRTQyBTdXBwb3J0IGZvciBidDg3OCBiYXNlZCBUViBjYXJkcyIKKwlkZXBlbmRzIG9uIFZJREVPX0JUODQ4ICYmIERWQl9DT1JFCisJc2VsZWN0IERWQl9CVDhYWAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIvQVRTQyBjYXJkcyBiYXNlZCBvbiB0aGUgQlQ4NzggY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHZiLWJ0OHh4LgorCiBjb25maWcgVklERU9fU0FBNjU4OAogCXRyaXN0YXRlICJTQUE2NTg4IFJhZGlvIENoaXAgUkRTIGRlY29kZXIgc3VwcG9ydCBvbiBCVDg0OCBjYXJkcyIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgVklERU9fQlQ4NDgKQEAgLTI0MywyOSArMjUzLDcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1leWUuCiAKLWNvbmZpZyBWSURFT19TQUE3MTM0Ci0JdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzEzNCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgU09VTkQKLQlzZWxlY3QgVklERU9fQlVGCi0Jc2VsZWN0IFZJREVPX0lSCi0Jc2VsZWN0IFZJREVPX1RVTkVSCi0Jc2VsZWN0IENSQzMyCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyBTQUE3MTMwLzcxMzQgYmFzZWQKLQkgIFRWIGNhcmRzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTM0LgotCi1jb25maWcgVklERU9fU0FBNzEzNF9EVkIKLQl0cmlzdGF0ZSAiRFZCIFN1cHBvcnQgZm9yIHNhYTcxMzQgYmFzZWQgVFYgY2FyZHMiCi0JZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0ICYmIERWQl9DT1JFCi0Jc2VsZWN0IFZJREVPX0JVRl9EVkIKLQlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IERWQl9UREExMDA0WAotCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBQaGlsaXBzIHNhYTcxMzQgY2hpcC4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWciCiAKIGNvbmZpZyBWSURFT19NWEIKIAl0cmlzdGF0ZSAiU2llbWVucy1OaXhkb3JmICdNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCciCkBAIC0zMTYsMzQgKzMwNCw5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoZXhpdW1fZ2VtaW5pLgogCi1jb25maWcgVklERU9fQ1g4OAotCXRyaXN0YXRlICJDb25leGFudCAyMzg4eCAoYnQ4Nzggc3VjY2Vzc29yKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEkyQ19BTEdPQklUCi0Jc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBWSURFT19CVENYCi0Jc2VsZWN0IFZJREVPX0JVRgotCXNlbGVjdCBWSURFT19UVU5FUgotCXNlbGVjdCBWSURFT19UVkVFUFJPTQotCXNlbGVjdCBWSURFT19JUgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDIzODh4IGJhc2VkCi0JICBUViBjYXJkcy4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWciCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4ODgwMAotCi1jb25maWcgVklERU9fQ1g4OF9EVkIKLQl0cmlzdGF0ZSAiRFZCIFN1cHBvcnQgZm9yIGN4MjM4OHggYmFzZWQgVFYgY2FyZHMiCi0JZGVwZW5kcyBvbiBWSURFT19DWDg4ICYmIERWQl9DT1JFCi0Jc2VsZWN0IFZJREVPX0JVRl9EVkIKLQlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IERWQl9PUjUxMTMyCi0Jc2VsZWN0IERWQl9DWDIyNzAyCi0Jc2VsZWN0IERWQl9MR0RUMzMwWAotCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIvQVRTQyBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIENvbm5leGFudCAyMzg4eCBjaGlwLgorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fT1ZDQU1DSElQCiAJdHJpc3RhdGUgIk9tbmlWaXNpb24gQ2FtZXJhIENoaXAgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDA0NmI4MmQuLjNhYzQ2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtNSw3ICs1LDYgQEAKIGJ0dHYtb2Jqcwk6PQlidHR2LWRyaXZlci5vIGJ0dHYtY2FyZHMubyBidHR2LWlmLm8gXAogCQkJYnR0di1yaXNjLm8gYnR0di12YmkubyBidHR2LWkyYy5vIGJ0dHYtZ3Bpby5vCiB6b3Jhbi1vYmpzICAgICAgOj0JenIzNjEyMC5vIHpyMzYxMjBfaTJjLm8genIzNjEyMF9tZW0ubwotcmRzLW9ianMgICAgICAgIDo9CXNhYTY1ODgubwogenIzNjA2Ny1vYmpzCTo9CXpvcmFuX3Byb2Nmcy5vIHpvcmFuX2RldmljZS5vIFwKIAkJCXpvcmFuX2RyaXZlci5vIHpvcmFuX2NhcmQubwogdHVuZXItb2Jqcwk6PQl0dW5lci1jb3JlLm8gdHVuZXItc2ltcGxlLm8gbXQyMHh4Lm8gdGRhODI5MC5vIHRlYTU3NjcubwpAQCAtMTYsNyArMTUsNyBAQAogb2JqLSQoQ09ORklHX1NPVU5EX1RWTUlYRVIpICs9IHR2bWl4ZXIubwogCiBvYmotJChDT05GSUdfVklERU9fWlIzNjEyMCkgKz0gem9yYW4ubwotb2JqLSQoQ09ORklHX1ZJREVPX1NBQTY1ODgpICs9IHJkcy5vCitvYmotJChDT05GSUdfVklERU9fU0FBNjU4OCkgKz0gc2FhNjU4OC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNTI0NkEpICs9IHNhYTUyNDZhLm8KIG9iai0kKENPTkZJR19WSURFT19TQUE1MjQ5KSArPSBzYWE1MjQ5Lm8KIG9iai0kKENPTkZJR19WSURFT19DUUNBTSkgKz0gYy1xY2FtLm8KQEAgLTM5LDYgKzM4LDggQEAKIG9iai0kKENPTkZJR19WSURFT19NRVlFKSArPSBtZXllLm8KIG9iai0kKENPTkZJR19WSURFT19TQUE3MTM0KSArPSBzYWE3MTM0Lwogb2JqLSQoQ09ORklHX1ZJREVPX0NYODgpICs9IGN4ODgvCitvYmotJChDT05GSUdfVklERU9fRU0yOFhYKSArPSBlbTI4eHgvCitvYmotJChDT05GSUdfVklERU9fRU0yOFhYKSArPSBzYWE3MTF4Lm8gdHZwNTE1MC5vCiBvYmotJChDT05GSUdfVklERU9fT1ZDQU1DSElQKSArPSBvdmNhbWNoaXAvCiBvYmotJChDT05GSUdfVklERU9fTVhCKSArPSBzYWE3MTExLm8gdHVuZXIubyB0ZGE5ODQwLm8gdGVhNjQxNWMubyB0ZWE2NDIwLm8gbXhiLm8KIG9iai0kKENPTkZJR19WSURFT19IRVhJVU1fT1JJT04pICs9IGhleGl1bV9vcmlvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwppbmRleCAwODIzZGRhLi44ODFjZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jCmluZGV4IDc2YzFiNjMuLmU0MDYzOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogI2luY2x1ZGUgImJ0dHYuaCIKICNpbmNsdWRlICJidDgzMi5oIgogCkBAIC01NCwzNiArNTMsMzYgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7CiAKIHN0cnVjdCBidDgzMiB7Ci0gICAgICAgIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiB9OwogCiBpbnQgYnQ4MzJfaGV4ZHVtcChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudF9zLCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAJaW50IGkscmM7CiAJYnVmWzBdPTB4ODA7IC8vIHN0YXJ0IGF0IHJlZ2lzdGVyIDAgd2l0aCBhdXRvLWluY3JlbWVudAotICAgICAgICBpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwxKSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIixyYyk7CisJaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMSkpKQorCQlwcmludGsoImJ0ODMyOiBpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLHJjKTsKIAotICAgICAgICBmb3IoaT0wO2k8NjU7aSsrKQotICAgICAgICAgICAgICAgIGJ1ZltpXT0wOwotICAgICAgICBpZiAoNjUgIT0gKHJjPWkyY19tYXN0ZXJfcmVjdihpMmNfY2xpZW50X3MsYnVmLDY1KSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA2NSlcbiIscmMpOworCWZvcihpPTA7aTw2NTtpKyspCisJCWJ1ZltpXT0wOworCWlmICg2NSAhPSAocmM9aTJjX21hc3Rlcl9yZWN2KGkyY19jbGllbnRfcyxidWYsNjUpKSkKKwkJcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA2NSlcbiIscmMpOwogCi0gICAgICAgIC8vIE5vdGU6IE9uIFJFQUQgdGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGN1cnJlbnQgaW5kZXgKLSAgICAgICAgLy8gIChlLmcuIDB4ODAsIHdoYXQgd2UganVzdCB3cm90ZSkKKwkvLyBOb3RlOiBPbiBSRUFEIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBjdXJyZW50IGluZGV4CisJLy8gIChlLmcuIDB4ODAsIHdoYXQgd2UganVzdCB3cm90ZSkKIAotICAgICAgICBpZigxKSB7Ci0gICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJCVDgzMiBoZXhkdW1wOlxuIik7Ci0gICAgICAgICAgICAgICAgZm9yKGk9MTtpPDY1O2krKykgeworCWlmKDEpIHsKKwkJaW50IGk7CisJCXByaW50aygiQlQ4MzIgaGV4ZHVtcDpcbiIpOworCQlmb3IoaT0xO2k8NjU7aSsrKSB7CiAJCQlpZihpIT0xKSB7CiAJCQkgIGlmKCgoaS0xKSU4KT09MCkgcHJpbnRrKCIgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgoaS0xKSUxNik9PTApIHByaW50aygiXG4iKTsKKwkJCSAgaWYoKChpLTEpJTE2KT09MCkgcHJpbnRrKCJcbiIpOwogCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIgJTAyeCIsYnVmW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICB9CisJCQlwcmludGsoIiAlMDJ4IixidWZbaV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMiwxMyArMTAxLDEzIEBACiAJCXJldHVybiAwOwogCX0KIAotICAgICAgICBwcmludGsoIldyaXRlIDAgdHAgVlBTVEFUVVNcbiIpOwotICAgICAgICBidWZbMF09QlQ4MzJfVlBfU1RBVFVTOyAvLyBSZWcuNTIKLSAgICAgICAgYnVmWzFdPSAweDAwOwotICAgICAgICBpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBWUFM6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCXByaW50aygiV3JpdGUgMCB0cCBWUFNUQVRVU1xuIik7CisJYnVmWzBdPUJUODMyX1ZQX1NUQVRVUzsgLy8gUmVnLjUyCisJYnVmWzFdPSAweDAwOworCWlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDIpKSkKKwkJcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBWUFM6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOwogCi0gICAgICAgIGJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CisJYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKIAogCiAJLy8gTGVhdmUgbG93IHBvd2VyIG1vZGU6CkBAIC0xMTYsMTcgKzExNSwxNyBAQAogCWJ1ZlswXT1CVDgzMl9DQU1fU0VUVVAwOyAvLzB4MzkgNTcKIAlidWZbMV09MHgwODsKIAlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBMTFBNOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBMTFBNOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAotICAgICAgICBidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOworCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAKIAlwcmludGsoIldyaXRlIDAgdHAgVlBTVEFUVVNcbiIpOwotICAgICAgICBidWZbMF09QlQ4MzJfVlBfU1RBVFVTOyAvLyBSZWcuNTIKLSAgICAgICAgYnVmWzFdPSAweDAwOwotICAgICAgICBpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBWUFM6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCWJ1ZlswXT1CVDgzMl9WUF9TVEFUVVM7IC8vIFJlZy41MgorCWJ1ZlsxXT0gMHgwMDsKKwlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCisJCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAotICAgICAgICBidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOworCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAKIAogCS8vIEVuYWJsZSBPdXRwdXQKQEAgLTEzNCwyMiArMTMzLDIyIEBACiAJYnVmWzBdPUJUODMyX1ZQX0NPTlRST0wxOyAvLyBSZWcuNDAKIAlidWZbMV09IDB4MjcgJiAofjB4MDEpOyAvLyBEZWZhdWx0IHwgIXNraXAKIAlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBFTzogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CisJCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgRU86IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOwogCi0gICAgICAgIGJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CisJYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKIAogCiAJLy8gZm9yIHRlc3RpbmcgKGV2ZW4gd29ya3Mgd2hlbiBubyBjYW1lcmEgYXR0YWNoZWQpCiAJcHJpbnRrKCJidDgzMjogKioqIEdlbmVyYXRlIE5UU0MgTSBCYXJzICoqKioqXG4iKTsKIAlidWZbMF09QlQ4MzJfVlBfVEVTVENPTlRST0wwOyAvLyBSZWcuIDQyCiAJYnVmWzFdPTM7IC8vIEdlbmVyYXRlIE5UU0MgU3lzdGVtIE0gYmFycywgR2VuZXJhdGUgRnJhbWUgdGltaW5nIGludGVybmFsbHkKLSAgICAgICAgaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgTUJBUjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CisJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQorCQlwcmludGsoImJ0ODMyOiBpMmMgaS9vIGVycm9yIE1CQVI6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOwogCiAJcHJpbnRrKCJCdDgzMjogQ2FtZXJhIFByZXNlbnQ6ICVzXG4iLAogCQkoYnVmWzErQlQ4MzJfQ0FNX1NUQVRVU10gJiBCVDgzMl81Nl9DQU1FUkFfUFJFU0VOVCkgPyAieWVzIjoibm8iKTsKIAotICAgICAgICBidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOworCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTE2MiwxNyArMTYxLDE3IEBACiAKIAlwcmludGsoImJ0ODMyX2F0dGFjaFxuIik7CiAKLSAgICAgICAgY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotICAgICAgICBjbGllbnRfdGVtcGxhdGUuYWRkciAgICA9IGFkZHI7CisJY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOworCWNsaWVudF90ZW1wbGF0ZS5hZGRyICAgID0gYWRkcjsKIAotICAgICAgICBwcmludGsoImJ0ODMyOiBjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkcjw8MSk7CisJcHJpbnRrKCJidDgzMjogY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOwogCi0gICAgICAgIGlmIChOVUxMID09ICh0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJaWYgKE5VTEwgPT0gKHQgPSBrbWFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KHQsMCxzaXplb2YoKnQpKTsKIAl0LT5jbGllbnQgPSBjbGllbnRfdGVtcGxhdGU7Ci0gICAgICAgIGkyY19zZXRfY2xpZW50ZGF0YSgmdC0+Y2xpZW50LCB0KTsKLSAgICAgICAgaTJjX2F0dGFjaF9jbGllbnQoJnQtPmNsaWVudCk7CisJaTJjX3NldF9jbGllbnRkYXRhKCZ0LT5jbGllbnQsIHQpOworCWkyY19hdHRhY2hfY2xpZW50KCZ0LT5jbGllbnQpOwogCiAJaWYoISBidDgzMl9pbml0KCZ0LT5jbGllbnQpKSB7CiAJCWJ0ODMyX2RldGFjaCgmdC0+Y2xpZW50KTsKQEAgLTIxMSw3ICsyMTAsNyBAQAogCiAJcHJpbnRrKCJidDgzMjogY29tbWFuZCAleFxuIixjbWQpOwogCi0gICAgICAgIHN3aXRjaCAoY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBCVDgzMl9IRVhEVU1QOiB7CiAJCQl1bnNpZ25lZCBjaGFyICpidWY7CiAJCQlidWY9a21hbGxvYyg2NSxHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuaAppbmRleCA5YjZhOGQyLi4xY2U4ZmE3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmgKQEAgLTIzMyw4ICsyMzMsOCBAQAogLyogZnJvbSB3ZWI6CiAgVmlkZW8gU2FtcGxpbmcKIERpZ2l0YWwgdmlkZW8gaXMgYSBzYW1wbGVkIGZvcm0gb2YgYW5hbG9nIHZpZGVvLiBUaGUgbW9zdCBjb21tb24gc2FtcGxpbmcgc2NoZW1lcyBpbiB1c2UgdG9kYXkgYXJlOgotICAgICAgICAgICAgICAgICAgUGl4ZWwgQ2xvY2sgICBIb3JpeiAgICBIb3JpeiAgICBWZXJ0Ci0gICAgICAgICAgICAgICAgICAgUmF0ZSAgICAgICAgIFRvdGFsICAgIEFjdGl2ZQorCQkgIFBpeGVsIENsb2NrICAgSG9yaXogICAgSG9yaXogICAgVmVydAorCQkgICBSYXRlICAgICAgICAgVG90YWwgICAgQWN0aXZlCiBOVFNDIHNxdWFyZSBwaXhlbCAgMTIuMjcgTUh6ICAgIDc4MCAgICAgIDY0MCAgICAgIDUyNQogTlRTQyBDQ0lSLTYwMSAgICAgIDEzLjUgIE1IeiAgICA4NTggICAgICA3MjAgICAgICA1MjUKIE5UU0MgNEZTYyAgICAgICAgICAxNC4zMiBNSHogICAgOTEwICAgICAgNzY4ICAgICAgNTI1CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCmluZGV4IDA4ODFhMTcuLjM0MTNiYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCkBAIC02LDcgKzYsNyBAQAogICAgIGxpa2UgdGhlIGJpZyB0dmNhcmRzIGFycmF5IGZvciB0aGUgbW9zdCBwYXJ0CiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKKwkJCSAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKICAgICAoYykgMTk5OS0yMDAxIEdlcmQgS25vcnIgPGtyYXhlbEBnb2xkYmFjaC5pbi1iZXJsaW4uZGU+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTQ1LDE2MiArMTQ1LDE2MyBAQAogCWludCBjYXJkbnI7CiAJY2hhciAqbmFtZTsKIH0gY2FyZHNbXSBfX2RldmluaXRkYXRhID0gewotCXsgMHgxM2ViMDA3MCwgQlRUVl9IQVVQUEFVR0U4NzgsICAiSGF1cHBhdWdlIFdpblRWIiB9LAotCXsgMHgzOTAwMDA3MCwgQlRUVl9IQVVQUEFVR0U4NzgsICAiSGF1cHBhdWdlIFdpblRWLUQiIH0sCi0JeyAweDQ1MDAwMDcwLCBCVFRWX0hBVVBQQVVHRVBWUiwgICJIYXVwcGF1Z2UgV2luVFYvUFZSIiB9LAotCXsgMHhmZjAwMDA3MCwgQlRUVl9PU1BSRVkxeDAsICAgICAiT3NwcmV5LTEwMCIgfSwKLQl7IDB4ZmYwMTAwNzAsIEJUVFZfT1NQUkVZMngwX1NWSUQsIk9zcHJleS0yMDAiIH0sCi0JeyAweGZmMDIwMDcwLCBCVFRWX09TUFJFWTUwMCwgICAgICJPc3ByZXktNTAwIiB9LAotCXsgMHhmZjAzMDA3MCwgQlRUVl9PU1BSRVkyMDAwLCAgICAiT3NwcmV5LTIwMDAiIH0sCi0JeyAweGZmMDQwMDcwLCBCVFRWX09TUFJFWTU0MCwgICAgICJPc3ByZXktNTQwIiB9LAorCXsgMHgxM2ViMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzgsICAiSGF1cHBhdWdlIFdpblRWIiB9LAorCXsgMHgzOTAwMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzgsICAiSGF1cHBhdWdlIFdpblRWLUQiIH0sCisJeyAweDQ1MDAwMDcwLCBCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUiwgICJIYXVwcGF1Z2UgV2luVFYvUFZSIiB9LAorCXsgMHhmZjAwMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVkxeDAsICAgICAiT3NwcmV5LTEwMCIgfSwKKwl7IDB4ZmYwMTAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZMngwX1NWSUQsIk9zcHJleS0yMDAiIH0sCisJeyAweGZmMDIwMDcwLCBCVFRWX0JPQVJEX09TUFJFWTUwMCwgICAgICJPc3ByZXktNTAwIiB9LAorCXsgMHhmZjAzMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVkyMDAwLCAgICAiT3NwcmV5LTIwMDAiIH0sCisJeyAweGZmMDQwMDcwLCBCVFRWX0JPQVJEX09TUFJFWTU0MCwgICAgICJPc3ByZXktNTQwIiB9LAorCXsgMHhmZjA3MDA3MCwgQlRUVl9CT0FSRF9PU1BSRVk0NDAsICAgICAiT3NwcmV5LTQ0MCIgfSwKIAotCXsgMHgwMDAxMTAwMiwgQlRUVl9BVElfVFZXT05ERVIsICAiQVRJIFRWIFdvbmRlciIgfSwKLQl7IDB4MDAwMzEwMDIsIEJUVFZfQVRJX1RWV09OREVSVkUsIkFUSSBUViBXb25kZXIvVkUiIH0sCisJeyAweDAwMDExMDAyLCBCVFRWX0JPQVJEX0FUSV9UVldPTkRFUiwgICJBVEkgVFYgV29uZGVyIiB9LAorCXsgMHgwMDAzMTAwMiwgQlRUVl9CT0FSRF9BVElfVFZXT05ERVJWRSwiQVRJIFRWIFdvbmRlci9WRSIgfSwKIAotCXsgMHg2NjA2MTA3ZCwgQlRUVl9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBXaW5GYXN0IFRWIDIwMDAiIH0sCi0JeyAweDY2MDcxMDdkLCBCVFRWX1dJTkZBU1RWQzEwMCwgICJMZWFkdGVrIFdpbkZhc3QgVkMgMTAwIiB9LAotCXsgMHg2NjA5MTA3ZCwgQlRUVl9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBUViAyMDAwIFhQIiB9LAotCXsgMHgyNjM2MTBiNCwgQlRUVl9TVEIyLCAgICAgICAgICAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCIgfSwKLQl7IDB4MjY0NTEwYjQsIEJUVFZfU1RCMiwgICAgICAgICAgIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQiIH0sCi0gCXsgMHg0MDIwMTBmYywgQlRUVl9HVkJDVFYzUENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFYzL1BDSSIgfSwKLQl7IDB4NDA1MDEwZmMsIEJUVFZfR1ZCQ1RWNFBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNC9QQ0kiIH0sCi0JeyAweDQwNzAxMGZjLCBCVFRWX0dWQkNUVjVQQ0ksICAgICJJLU8gRGF0YSBDby4gR1YtQkNUVjUvUENJIiB9LAotIAl7IDB4ZDAxODEwZmMsIEJUVFZfR1ZCQ1RWNVBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNS9QQ0kiIH0sCisJeyAweDY2MDYxMDdkLCBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFdpbkZhc3QgVFYgMjAwMCIgfSwKKwl7IDB4NjYwNzEwN2QsIEJUVFZfQk9BUkRfV0lORkFTVFZDMTAwLCAgIkxlYWR0ZWsgV2luRmFzdCBWQyAxMDAiIH0sCisJeyAweDY2MDkxMDdkLCBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFRWIDIwMDAgWFAiIH0sCisJeyAweDI2MzYxMGI0LCBCVFRWX0JPQVJEX1NUQjIsICAgICAgICAgICJTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IiB9LAorCXsgMHgyNjQ1MTBiNCwgQlRUVl9CT0FSRF9TVEIyLCAgICAgICAgICAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCIgfSwKKwl7IDB4NDAyMDEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWM1BDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWMy9QQ0kiIH0sCisJeyAweDQwNTAxMGZjLCBCVFRWX0JPQVJEX0dWQkNUVjRQQ0ksICAgICJJLU8gRGF0YSBDby4gR1YtQkNUVjQvUENJIiB9LAorCXsgMHg0MDcwMTBmYywgQlRUVl9CT0FSRF9HVkJDVFY1UENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFY1L1BDSSIgfSwKKwl7IDB4ZDAxODEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWNVBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNS9QQ0kiIH0sCiAKLQl7IDB4MDAxMjExYmQsIEJUVFZfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYiIH0sCisJeyAweDAwMTIxMWJkLCBCVFRWX0JPQVJEX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIiB9LAogCS8qIHNvbWUgY2FyZHMgc2hpcCB3aXRoIGJ5dGVzd2FwcGVkIElEcyAuLi4gKi8KLQl7IDB4MTIwMGJkMTEsIEJUVFZfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYgW2Jzd2FwXSIgfSwKLQl7IDB4ZmYwMGJkMTEsIEJUVFZfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYgW2Jzd2FwXSIgfSwKKwl7IDB4MTIwMGJkMTEsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYgW2Jzd2FwXSIgfSwKKwl7IDB4ZmYwMGJkMTEsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYgW2Jzd2FwXSIgfSwKIAkvKiB0aGlzIHNlZW1zIHRvIGhhcHBlbiBhcyB3ZWxsIC4uLiAqLwotCXsgMHhmZjEyMTFiZCwgQlRUVl9QSU5OQUNMRSwgICAgICAiUGlubmFjbGUgUENUViIgfSwKKwl7IDB4ZmYxMjExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYiIH0sCiAKLQl7IDB4MzAwMDEyMWEsIEJUVFZfVk9PRE9PVFZfRk0sICAgIjNEZnggVm9vZG9vVFYgRk0vIFZvb2Rvb1RWIDIwMCIgfSwKLQl7IDB4MjYzNzEwYjQsIEJUVFZfVk9PRE9PVFZfRk0sICAgIjNEZnggVm9vZG9vVFYgRk0vIFZvb2Rvb1RWIDIwMCIgfSwKLQl7IDB4MzA2MDEyMWEsIEJUVFZfU1RCMiwJICAiM0RmeCBWb29kb29UViAxMDAvIFNUQiBPRU0iIH0sCisJeyAweDMwMDAxMjFhLCBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNLCAgICIzRGZ4IFZvb2Rvb1RWIEZNLyBWb29kb29UViAyMDAiIH0sCisJeyAweDI2MzcxMGI0LCBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNLCAgICIzRGZ4IFZvb2Rvb1RWIEZNLyBWb29kb29UViAyMDAiIH0sCisJeyAweDMwNjAxMjFhLCBCVFRWX0JPQVJEX1NUQjIsCSAgIjNEZnggVm9vZG9vVFYgMTAwLyBTVEIgT0VNIiB9LAogCi0JeyAweDMwMDAxNDRmLCBCVFRWX01BR0lDVFZJRVcwNjMsICIoQXNrZXkgTWFnaWMvb3RoZXJzKSBUVmlldzk5IENQSDA2eCIgfSwKLQl7IDB4YTAwNTE0NGYsIEJUVFZfTUFHSUNUVklFVzA2MywgIkNQSDA2WCBUVmlldzk5LUNhcmQiIH0sCi0JeyAweDMwMDIxNDRmLCBCVFRWX01BR0lDVFZJRVcwNjEsICIoQXNrZXkgTWFnaWMvb3RoZXJzKSBUVmlldzk5IENQSDA1eCIgfSwKLQl7IDB4MzAwNTE0NGYsIEJUVFZfTUFHSUNUVklFVzA2MSwgIihBc2tleSBNYWdpYy9vdGhlcnMpIFRWaWV3OTkgQ1BIMDYxLzA2TCAoVDEvTEMpIiB9LAotCXsgMHg1MDAwMTQ0ZiwgQlRUVl9NQUdJQ1RWSUVXMDYxLCAiQXNrZXkgQ1BIMDUwIiB9LAotCXsgMHgzMDAwMTRmZiwgQlRUVl9NQUdJQ1RWSUVXMDYxLCAiVFZpZXcgOTkgKENQSDA2MSkiIH0sCi0JeyAweDMwMDIxNGZmLCBCVFRWX1BIT0VCRV9UVk1BUywgICJQaG9lYmUgVFYgTWFzdGVyIChDUEgwNjApIiB9LAorCXsgMHgzMDAwMTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNngiIH0sCisJeyAweGEwMDUxNDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjMsICJDUEgwNlggVFZpZXc5OS1DYXJkIiB9LAorCXsgMHgzMDAyMTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNXgiIH0sCisJeyAweDMwMDUxNDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjEsICIoQXNrZXkgTWFnaWMvb3RoZXJzKSBUVmlldzk5IENQSDA2MS8wNkwgKFQxL0xDKSIgfSwKKwl7IDB4NTAwMDE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MSwgIkFza2V5IENQSDA1MCIgfSwKKwl7IDB4MzAwMDE0ZmYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MSwgIlRWaWV3IDk5IChDUEgwNjEpIiB9LAorCXsgMHgzMDAyMTRmZiwgQlRUVl9CT0FSRF9QSE9FQkVfVFZNQVMsICAiUGhvZWJlIFRWIE1hc3RlciAoQ1BIMDYwKSIgfSwKIAotCXsgMHgwMDAxMTQ2MSwgQlRUVl9BVlBIT05FOTgsICAgICAiQVZlck1lZGlhIFRWUGhvbmU5OCIgfSwKLQl7IDB4MDAwMjE0NjEsIEJUVFZfQVZFUk1FRElBOTgsICAgIkFWZXJtZWRpYSBUVkNhcHR1cmUgOTgiIH0sCi0JeyAweDAwMDMxNDYxLCBCVFRWX0FWUEhPTkU5OCwgICAgICJBVmVyTWVkaWEgVFZQaG9uZTk4IiB9LAotCXsgMHgwMDA0MTQ2MSwgQlRUVl9BVkVSTUVESUE5OCwgICAiQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCIgfSwKLQl7IDB4MDMwMDE0NjEsIEJUVFZfQVZFUk1FRElBOTgsICAgIlZET01BVEUgVFYgVFVORVIgQ0FSRCIgfSwKKwl7IDB4MDAwMTE0NjEsIEJUVFZfQk9BUkRfQVZQSE9ORTk4LCAgICAgIkFWZXJNZWRpYSBUVlBob25lOTgiIH0sCisJeyAweDAwMDIxNDYxLCBCVFRWX0JPQVJEX0FWRVJNRURJQTk4LCAgICJBVmVybWVkaWEgVFZDYXB0dXJlIDk4IiB9LAorCXsgMHgwMDAzMTQ2MSwgQlRUVl9CT0FSRF9BVlBIT05FOTgsICAgICAiQVZlck1lZGlhIFRWUGhvbmU5OCIgfSwKKwl7IDB4MDAwNDE0NjEsIEJUVFZfQk9BUkRfQVZFUk1FRElBOTgsICAgIkFWZXJNZWRpYSBUVkNhcHR1cmUgOTgiIH0sCisJeyAweDAzMDAxNDYxLCBCVFRWX0JPQVJEX0FWRVJNRURJQTk4LCAgICJWRE9NQVRFIFRWIFRVTkVSIENBUkQiIH0sCiAKLQl7IDB4MTExNzE1M2IsIEJUVFZfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoUGhpbGlwcyBQQUwgQi9HKSIgfSwKLQl7IDB4MTExODE1M2IsIEJUVFZfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoVGVtaWMgUEFMIEIvRykiIH0sCi0JeyAweDExMTkxNTNiLCBCVFRWX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFBoaWxpcHMgUEFMIEkpIiB9LAotCXsgMHgxMTFhMTUzYiwgQlRUVl9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChUZW1pYyBQQUwgSSkiIH0sCisJeyAweDExMTcxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFBoaWxpcHMgUEFMIEIvRykiIH0sCisJeyAweDExMTgxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFRlbWljIFBBTCBCL0cpIiB9LAorCXsgMHgxMTE5MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChQaGlsaXBzIFBBTCBJKSIgfSwKKwl7IDB4MTExYTE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoVGVtaWMgUEFMIEkpIiB9LAogCi0JeyAweDExMjMxNTNiLCBCVFRWX1RFUlJBVFZSQURJTywgICJUZXJyYXRlYyBUViBSYWRpbysiIH0sCi0JeyAweDExMjcxNTNiLCBCVFRWX1RFUlJBVFYsICAgICAgICJUZXJyYXRlYyBUVisgKFYxLjA1KSIgICAgfSwKKwl7IDB4MTEyMzE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVlJBRElPLCAgIlRlcnJhdGVjIFRWIFJhZGlvKyIgfSwKKwl7IDB4MTEyNzE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUViwgICAgICAgIlRlcnJhdGVjIFRWKyAoVjEuMDUpIiAgICB9LAogCS8qIGNsYXNoZXMgd2l0aCBGbHlWaWRlbwotCSAqeyAweDE4NTIxODUyLCBCVFRWX1RFUlJBVFYsICAgICAiVGVycmF0ZWMgVFYrIChWMS4xMCkiICAgIH0sICovCi0JeyAweDExMzQxNTNiLCBCVFRWX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKExSMTAyKSIgfSwKLQl7IDB4MTEzNTE1M2IsIEJUVFZfVEVSUkFUVkFMVUVSLCAgIlRlcnJhdGVjIFRWYWx1ZSBSYWRpbyIgfSwgLyogTFIxMDIgKi8KLQl7IDB4NTAxODE1M2IsIEJUVFZfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSIgfSwgICAgICAgLyogPz8gKi8KLQl7IDB4ZmYzYjE1M2IsIEJUVFZfVEVSUkFUVkFMVUVSLCAgIlRlcnJhdGVjIFRWYWx1ZSBSYWRpbyIgfSwgLyogPz8gKi8KKwkgKnsgMHgxODUyMTg1MiwgQlRUVl9CT0FSRF9URVJSQVRWLCAgICAgIlRlcnJhdGVjIFRWKyAoVjEuMTApIiAgICB9LCAqLworCXsgMHgxMTM0MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChMUjEwMikiIH0sCisJeyAweDExMzUxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFUiwgICJUZXJyYXRlYyBUVmFsdWUgUmFkaW8iIH0sIC8qIExSMTAyICovCisJeyAweDUwMTgxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUiIH0sICAgICAgIC8qID8/ICovCisJeyAweGZmM2IxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFUiwgICJUZXJyYXRlYyBUVmFsdWUgUmFkaW8iIH0sIC8qID8/ICovCiAKLQl7IDB4NDAwMDE1YjAsIEJUVFZfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYiIH0sCi0JeyAweDQwMGExNWIwLCBCVFRWX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIiB9LAotCXsgMHg0MDBkMTViMCwgQlRUVl9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAotCXsgMHg0MDEwMTViMCwgQlRUVl9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAotCXsgMHg0MDE2MTViMCwgQlRUVl9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAorCXsgMHg0MDAwMTViMCwgQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViIgfSwKKwl7IDB4NDAwYTE1YjAsIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYiIH0sCisJeyAweDQwMGQxNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIC8gUmFkaW8iIH0sCisJeyAweDQwMTAxNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIC8gUmFkaW8iIH0sCisJeyAweDQwMTYxNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIC8gUmFkaW8iIH0sCiAKLQl7IDB4MTQzMGFhMDAsIEJUVFZfUFYxNDMsICAgICAgICAgIlByb3ZpZGVvIFBWMTQzQSIgfSwKLQl7IDB4MTQzMWFhMDAsIEJUVFZfUFYxNDMsICAgICAgICAgIlByb3ZpZGVvIFBWMTQzQiIgfSwKLQl7IDB4MTQzMmFhMDAsIEJUVFZfUFYxNDMsICAgICAgICAgIlByb3ZpZGVvIFBWMTQzQyIgfSwKLQl7IDB4MTQzM2FhMDAsIEJUVFZfUFYxNDMsICAgICAgICAgIlByb3ZpZGVvIFBWMTQzRCIgfSwKLQl7IDB4MTQzM2FhMDMsIEJUVFZfUFYxNDMsICAgICAgICAgIlNlY3VyaXR5IEV5ZXMiIH0sCisJeyAweDE0MzBhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0EiIH0sCisJeyAweDE0MzFhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0IiIH0sCisJeyAweDE0MzJhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0MiIH0sCisJeyAweDE0MzNhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0QiIH0sCisJeyAweDE0MzNhYTAzLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJTZWN1cml0eSBFeWVzIiB9LAogCi0JeyAweDE0NjBhYTAwLCBCVFRWX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtMSIgfSwKLQl7IDB4MTQ2MWFhMDEsIEJUVFZfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS0yIiB9LAotCXsgMHgxNDYyYWEwMiwgQlRUVl9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTMiIH0sCi0JeyAweDE0NjNhYTAzLCBCVFRWX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtNCIgfSwKKwl7IDB4MTQ2MGFhMDAsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS0xIiB9LAorCXsgMHgxNDYxYWEwMSwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTIiIH0sCisJeyAweDE0NjJhYTAyLCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtMyIgfSwKKwl7IDB4MTQ2M2FhMDMsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS00IiB9LAogCi0JeyAweDE0NjRhYTA0LCBCVFRWX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItMSIgfSwKLQl7IDB4MTQ2NWFhMDUsIEJUVFZfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi0yIiB9LAotCXsgMHgxNDY2YWEwNiwgQlRUVl9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTMiIH0sCi0JeyAweDE0NjdhYTA3LCBCVFRWX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItNCIgfSwKKwl7IDB4MTQ2NGFhMDQsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi0xIiB9LAorCXsgMHgxNDY1YWEwNSwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTIiIH0sCisJeyAweDE0NjZhYTA2LCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItMyIgfSwKKwl7IDB4MTQ2N2FhMDcsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi00IiB9LAogCi0JeyAweGExMzJmZjAwLCBCVFRWX0lWQzEwMCwgICAgICAgICJJVkMtMTAwIiAgfSwKLQl7IDB4YTE1NTAwMDAsIEJUVFZfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAotCXsgMHhhMTU1MDAwMSwgQlRUVl9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCi0JeyAweGExNTUwMDAyLCBCVFRWX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKLQl7IDB4YTE1NTAwMDMsIEJUVFZfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAotCXsgMHhhMTU1MDEwMCwgQlRUVl9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCi0JeyAweGExNTUwMTAxLCBCVFRWX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKLQl7IDB4YTE1NTAxMDIsIEJUVFZfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAotCXsgMHhhMTU1MDEwMywgQlRUVl9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCi0JeyAweGExODJmZjAwLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMDEsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwMiwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjAzLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMDQsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwNSwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjA2LCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMDcsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwOCwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjA5LCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMGEsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwYiwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjBjLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMGQsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwZSwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjBmLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTEzMmZmMDAsIEJUVFZfQk9BUkRfSVZDMTAwLCAgICAgICAgIklWQy0xMDAiICB9LAorCXsgMHhhMTU1MDAwMCwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCisJeyAweGExNTUwMDAxLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKKwl7IDB4YTE1NTAwMDIsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAorCXsgMHhhMTU1MDAwMywgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCisJeyAweGExNTUwMTAwLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKKwl7IDB4YTE1NTAxMDEsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAorCXsgMHhhMTU1MDEwMiwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCisJeyAweGExNTUwMTAzLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKKwl7IDB4YTE4MmZmMDAsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwMSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjAyLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMDMsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwNCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjA1LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMDYsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwNywgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjA4LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMDksIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwYSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjBiLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMGMsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwZCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjBlLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMGYsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAogCi0JeyAweDQxNDI0MzQ0LCBCVFRWX0dSQU5EVEVDLCAgICAgICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIiB9LAotCXsgMHgwMTAyMDMwNCwgQlRUVl9YR1VBUkQsICAgICAgICAiR3JhbmR0ZWMgR3JhbmQgWC1HdWFyZCIgfSwKKwl7IDB4NDE0MjQzNDQsIEJUVFZfQk9BUkRfR1JBTkRURUMsICAgICAgIkdyYW5kVGVjIE11bHRpIENhcHR1cmUiIH0sCisJeyAweDAxMDIwMzA0LCBCVFRWX0JPQVJEX1hHVUFSRCwgICAgICAgICJHcmFuZHRlYyBHcmFuZCBYLUd1YXJkIiB9LAogCi0JeyAweDE4NTAxODUxLCBCVFRWX0NIUk9OT1NfVlMyLCAgICJGbHlWaWRlbyA5OCAoTFI1MCkvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIgfSwKLQl7IDB4YTA1MDE4NTEsIEJUVFZfQ0hST05PU19WUzIsICAgIkZseVZpZGVvIDk4IChMUjUwKS8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiB9LAotCXsgMHgxODUxMTg1MSwgQlRUVl9GTFlWSURFTzk4RVosICAiRmx5VmlkZW8gOThFWiAoTFI1MSkvIEN5YmVyTWFpbCBBViIgfSwKLQl7IDB4MTg1MjE4NTIsIEJUVFZfVFlQSE9PTl9UVklFVywgIkZseVZpZGVvIDk4Rk0gKExSNTApLyBUeXBob29uIFRWaWV3IFRWL0ZNIFR1bmVyIiB9LAotCXsgMHg0MWEwYTA1MSwgQlRUVl9GTFlWSURFT185OEZNLCAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCBSZXYgUSIgfSwKLQl7IDB4MTg1MDFmN2YsIEJUVFZfRkxZVklERU9fOTgsICAgIkxpZmV2aWV3IEZseXZpZGVvIDk4IiB9LAorCXsgMHgxODUwMTg1MSwgQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMiwgICAiRmx5VmlkZW8gOTggKExSNTApLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkiIH0sCisJeyAweGEwNTAxODUxLCBCVFRWX0JPQVJEX0NIUk9OT1NfVlMyLCAgICJGbHlWaWRlbyA5OCAoTFI1MCkvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIgfSwKKwl7IDB4MTg1MTE4NTEsIEJUVFZfQk9BUkRfRkxZVklERU85OEVaLCAgIkZseVZpZGVvIDk4RVogKExSNTEpLyBDeWJlck1haWwgQVYiIH0sCisJeyAweDE4NTIxODUyLCBCVFRWX0JPQVJEX1RZUEhPT05fVFZJRVcsICJGbHlWaWRlbyA5OEZNIChMUjUwKS8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIgfSwKKwl7IDB4NDFhMGEwNTEsIEJUVFZfQk9BUkRfRkxZVklERU9fOThGTSwgIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgUmV2IFEiIH0sCisJeyAweDE4NTAxZjdmLCBCVFRWX0JPQVJEX0ZMWVZJREVPXzk4LCAgICJMaWZldmlldyBGbHl2aWRlbyA5OCIgfSwKIAotICAgIAl7IDB4MDEwMTE1Y2IsIEJUVFZfR01WMSwgICAgICAgICAgIkFHIEdNVjEiIH0sCi0JeyAweDAxMDExNGM3LCBCVFRWX01PRFRFQ18yMDUsICAgICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViIgfSwKKyAgICAJeyAweDAxMDExNWNiLCBCVFRWX0JPQVJEX0dNVjEsICAgICAgICAgICJBRyBHTVYxIiB9LAorCXsgMHgwMTAxMTRjNywgQlRUVl9CT0FSRF9NT0RURUNfMjA1LCAgICAiTW9kdWxhciBUZWNobm9sb2d5IE1NMjAxL01NMjAyL01NMjA1L01NMjEwL01NMjE1IFBDVFYiIH0sCiAKLQl7IDB4MTBiNDI2MzYsIEJUVFZfSEFVUFBBVUdFODc4LCAgIlNUQiA/Pz8iIH0sCi0JeyAweDIxN2Q2NjA2LCBCVFRWX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFdpbkZhc3QgVFYgMjAwMCIgfSwKLQl7IDB4ZmZmNmY2ZmYsIEJUVFZfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgV2luRmFzdCBUViAyMDAwIiB9LAotCXsgMHgwMzExNjAwMCwgQlRUVl9TRU5TT1JBWTMxMSwgICAiU2Vuc29yYXkgMzExIiB9LAotCXsgMHgwMDc5MGUxMSwgQlRUVl9XSU5EVlIsICAgICAgICAiQ2Fub3B1cyBXaW5EVlIgUENJIiB9LAotCXsgMHhhMGZjYTFhMCwgQlRUVl9aT0xUUklYLCAgICAgICAiRmFjZSB0byBGYWNlIFR2bWF4IiB9LAotCXsgMHgyMDAwNzA2MywgQlRUVl9QQ19IRFRWLCAgICAgICAicGNIRFRWIEhELTIwMDAgVFYifSwKLQl7IDB4ODJiMmFhNmEsIEJUVFZfU0lNVVNfR1ZDMTEwMCwgIlNJTVVTIEdWQzExMDAiIH0sCi0JeyAweDE0NmNhYTBjLCBCVFRWX1BWOTUxLCAgICAgICAgICJpdHVuZXIgc3BlY3RyYTgiIH0sCi0gCXsgMHgyMDBhMTI5NSwgQlRUVl9QWEMyMDAsICAgICAgICAiSW1hZ2VOYXRpb24gUFhDMjAwQSIgfSwKKwl7IDB4MTBiNDI2MzYsIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4LCAgIlNUQiA/Pz8iIH0sCisJeyAweDIxN2Q2NjA2LCBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFdpbkZhc3QgVFYgMjAwMCIgfSwKKwl7IDB4ZmZmNmY2ZmYsIEJUVFZfQk9BUkRfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgV2luRmFzdCBUViAyMDAwIiB9LAorCXsgMHgwMzExNjAwMCwgQlRUVl9CT0FSRF9TRU5TT1JBWTMxMSwgICAiU2Vuc29yYXkgMzExIiB9LAorCXsgMHgwMDc5MGUxMSwgQlRUVl9CT0FSRF9XSU5EVlIsICAgICAgICAiQ2Fub3B1cyBXaW5EVlIgUENJIiB9LAorCXsgMHhhMGZjYTFhMCwgQlRUVl9CT0FSRF9aT0xUUklYLCAgICAgICAiRmFjZSB0byBGYWNlIFR2bWF4IiB9LAorCXsgMHgyMDAwNzA2MywgQlRUVl9CT0FSRF9QQ19IRFRWLCAgICAgICAicGNIRFRWIEhELTIwMDAgVFYifSwKKwl7IDB4ODJiMmFhNmEsIEJUVFZfQk9BUkRfU0lNVVNfR1ZDMTEwMCwgIlNJTVVTIEdWQzExMDAiIH0sCisJeyAweDE0NmNhYTBjLCBCVFRWX0JPQVJEX1BWOTUxLCAgICAgICAgICJpdHVuZXIgc3BlY3RyYTgiIH0sCisJeyAweDIwMGExMjk1LCBCVFRWX0JPQVJEX1BYQzIwMCwgICAgICAgICJJbWFnZU5hdGlvbiBQWEMyMDBBIiB9LAogCi0JeyAweDQwMTExNTU0LCBCVFRWX1BWX0JUODc4UF85QiwgICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVCIgfSwKLQl7IDB4MTdkZTBhMDEsIEJUVFZfS1dPUkxELCAgICAgICAgIk1lY2VyIFRWL0ZNL1ZpZGVvIFR1bmVyIiB9LAorCXsgMHg0MDExMTU1NCwgQlRUVl9CT0FSRF9QVl9CVDg3OFBfOUIsICAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQiIH0sCisJeyAweDE3ZGUwYTAxLCBCVFRWX0JPQVJEX0tXT1JMRCwgICAgICAgICJNZWNlciBUVi9GTS9WaWRlbyBUdW5lciIgfSwKIAotCXsgMHgwMTA1MTgwNSwgQlRUVl9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMxIiB9LAotCXsgMHgwMTA2MTgwNSwgQlRUVl9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMyIiB9LAotCXsgMHgwMTA3MTgwNSwgQlRUVl9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMzIiB9LAotCXsgMHgwMTA4MTgwNSwgQlRUVl9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICM0IiB9LAorCXsgMHgwMTA1MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMxIiB9LAorCXsgMHgwMTA2MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMyIiB9LAorCXsgMHgwMTA3MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMzIiB9LAorCXsgMHgwMTA4MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICM0IiB9LAogCi0JeyAweDE1NDA5NTExLCBCVFRWX0FDT1JQX1k4NzhGLCAiQWNvcnAgWTg3OEYiIH0sCisJeyAweDE1NDA5NTExLCBCVFRWX0JPQVJEX0FDT1JQX1k4NzhGLCAiQWNvcnAgWTg3OEYiIH0sCiAKIAkvKiBsaWtlbHkgYnJva2VuLCB2ZW5kb3IgaWQgZG9lc24ndCBtYXRjaCB0aGUgb3RoZXIgbWFnaWMgdmlld3MgLi4uCi0JICogeyAweGEwZmNhMDRmLCBCVFRWX01BR0lDVFZJRVcwNjMsICJHdWlsbGVtb3QgTWF4aSBUViBWaWRlbyAzIiB9LCAqLworCSAqIHsgMHhhMGZjYTA0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzLCAiR3VpbGxlbW90IE1heGkgVFYgVmlkZW8gMyIgfSwgKi8KIAogCS8qIERWQiBjYXJkcyAodXNpbmcgcGNpIGZ1bmN0aW9uIC4xIGZvciBtcGVnIGRhdGEgeGZlcikgKi8KLQl7IDB4MDEwMTAwNzEsIEJUVFZfTkVCVUxBX0RJR0lUViwgIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiIH0sCi0JeyAweDA3NjExNDYxLCBCVFRWX0FWRFZCVF83NjEsICAgICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIgfSwKLQl7IDB4MDAxYzExYmQsIEJUVFZfUElOTkFDTEVTQVQsICAgIlBpbm5hY2xlIFBDVFYgU2F0IiB9LAotCXsgMHgwMDI2MTFiZCwgQlRUVl9UV0lOSEFOX0RTVCwgICAiUGlubmFjbGUgUENUViBTQVQgQ0kiIH0sCi0JeyAweDAwMDExODIyLCBCVFRWX1RXSU5IQU5fRFNULCAgICJUd2luaGFuIFZpc2lvblBsdXMgRFZCIiB9LAotCXsgMHhmYzAwMjcwZiwgQlRUVl9UV0lOSEFOX0RTVCwgICAiQ2hhaW5UZWNoIGRpZ2l0b3AgRFNULTEwMDAgRFZCLVMiIH0sCi0JeyAweDA3NzExNDYxLCBCVFRWX0FWRFZCVF83NzEsICAgICJBVmVybWVkaWEgQXZlclRWIERWQi1UIDc3MSIgfSwKLQl7IDB4ZGIxMDE4YWMsIEJUVFZfRFZJQ09fRFZCVF9MSVRFLCAgICAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlIiB9LAotCXsgMHhkNTAwMThhYywgQlRUVl9EVklDT19GVVNJT05IRFRWXzVfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiB9LAorCXsgMHgwMTAxMDA3MSwgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWLCAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIgfSwKKwl7IDB4MDc2MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSwgICAgIkF2ZXJNZWRpYSBBdmVyVFYgRFZCLVQgNzYxIiB9LAorCXsgMHgwMDFjMTFiZCwgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVCwgICAiUGlubmFjbGUgUENUViBTYXQiIH0sCisJeyAweDAwMjYxMWJkLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJQaW5uYWNsZSBQQ1RWIFNBVCBDSSIgfSwKKwl7IDB4MDAwMTE4MjIsIEJUVFZfQk9BUkRfVFdJTkhBTl9EU1QsICAgIlR3aW5oYW4gVmlzaW9uUGx1cyBEVkIiIH0sCisJeyAweGZjMDAyNzBmLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJDaGFpblRlY2ggZGlnaXRvcCBEU1QtMTAwMCBEVkItUyIgfSwKKwl7IDB4MDc3MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSwgICAgIkFWZXJtZWRpYSBBdmVyVFYgRFZCLVQgNzcxIiB9LAorCXsgMHhkYjEwMThhYywgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEUsICAgICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUiIH0sCisJeyAweGQ1MDAxOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFLCAgICAiRFZpQ08gRnVzaW9uSERUViA1IExpdGUiIH0sCiAKIAl7IDAsIC0xLCBOVUxMIH0KIH07CkBAIC0zMDksMjExNiArMzEwLDI0OTQgQEAKIC8qIGFycmF5IHdpdGggZGVzY3JpcHRpb24gZm9yIGJ0ODQ4IC8gYnQ4NzggdHYvZ3JhYmJlciBjYXJkcyAgICAgICAgICAgICAgICovCiAKIHN0cnVjdCB0dmNhcmQgYnR0dl90dmNhcmRzW10gPSB7Ci17Ci0vKiAtLS0tIGNhcmQgMHgwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIiAqKiogVU5LTk9XTi9HRU5FUklDICoqKiAiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDB9LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIk1JUk8gUENUViIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAxNSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAyLCAwLCAwLCAwLCAxMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkhhdXBwYXVnZSAoYnQ4NDgpIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDcsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIlNUQiwgR2F0ZXdheSBQL04gNjAwMDY5OSAoYnQ4NDgpIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDcsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgNCwgMCwgMiwgMywgMX0sCi0JLm5vX21zcDM0eHgJPSAxLAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkuaGFzX3JhZGlvICAgICAgPSAxLAotfSx7CisJLyogLS0tLSBjYXJkIDB4MDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1VOS05PV05dID0geworCQkubmFtZQkJPSAiICoqKiBVTktOT1dOL0dFTkVSSUMgKioqICIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfTUlST10gPSB7CisJCS5uYW1lCQk9ICJNSVJPIFBDVFYiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAxNSwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDIsIDAsIDAsIDAsIDEwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9IQVVQUEFVR0VdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg0OCkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSA3LAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfU1RCXSA9IHsKKwkJLm5hbWUJCT0gIlNUQiwgR2F0ZXdheSBQL04gNjAwMDY5OSAoYnQ4NDgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gNywKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDQsIDAsIDIsIDMsIDF9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAwLAotCS50dW5lcgkJPSAtMSwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkudHVuZXJfdHlwZQk9IDQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkRpYW1vbmQgRFRWMjAwMCIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAzLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDEsIDAsIDEsIDN9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZQaG9uZSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMywKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmdwaW9tYXNrCT0gMHgwZiwKLQkuYXVkaW9tdXgJPSB7IDB4MGMsIDB4MDQsIDB4MDgsIDB4MDQsIDB9LAotCS8qICAgICAgICAgICAgICAgIDB4MDQgZm9yIHNvbWUgY2FyZHMgPz8gKi8KLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sJPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotfSx7Ci0JLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEiLAotCS52aWRlb19pbnB1dHMJPSA1LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAtMSwKLQkuc3ZocwkJPSAzLAotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAotCS5hdWRpb211eAk9IHswIH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJLyogLS0tLSBjYXJkIDB4MDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0lOVEVMXSA9IHsKKwkJLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDAsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAwLAorCQkudHVuZXJfdHlwZQk9IDQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0RJQU1PTkRdID0geworCQkubmFtZQkJPSAiRGlhbW9uZCBEVFYyMDAwIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMywKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDEsIDAsIDEsIDN9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0FWRVJNRURJQV0gPSB7CisJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZQaG9uZSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDMsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmdwaW9tYXNrCT0gMHgwZiwKKwkJLmF1ZGlvbXV4CT0geyAweDBjLCAweDA0LCAweDA4LCAweDA0LCAwfSwKKwkJLyogICAgICAgICAgICAgICAgMHgwNCBmb3Igc29tZSBjYXJkcyA/PyAqLworCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sJPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05dID0geworCQkubmFtZQkJPSAiTUFUUklYLVZpc2lvbiBNVi1EZWx0YSIsCisJCS52aWRlb19pbnB1dHMJPSA1LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IC0xLAorCQkuc3ZocwkJPSAzLAorCQkuZ3Bpb21hc2sJPSAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCisJCS5hdWRpb211eAk9IHswIH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDA4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gSUkgKEJ0ODQ4KSBMUjI2IC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSMjYiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhjMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMHhjMDAsIDB4ODAwLCAweDQwMCwgMHhjMDAsIDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJJTVMvSVhtaWNybyBUdXJib1RWIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDMsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMSwgMSwgMiwgMywgMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAwLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KLQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAxLCAyLCAzLCA0fSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiTUlSTyBQQ1RWIHBybyIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDMwMTRmLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDB4MjAwMDEsMHgxMDAwMSwgMCwgMCwxMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJLyogLS0tLSBjYXJkIDB4MDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0ZMWVZJREVPXSA9IHsKKwkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2IiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHhjMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAweGMwMCwgMHg4MDAsIDB4NDAwLCAweGMwMCwgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1RVUkJPVFZdID0geworCQkubmFtZQkJPSAiSU1TL0lYbWljcm8gVHVyYm9UViIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDMsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAxLCAxLCAyLCAzLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAwLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0hBVVBQQVVHRTg3OF0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MGYsIC8qIG9sZDogNyAqLworCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX01JUk9QUk9dID0geworCQkubmFtZQkJPSAiTUlSTyBQQ1RWIHBybyIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MzAxNGYsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAsMTB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgwYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkFEUyBUZWNobm9sb2dpZXMgQ2hhbm5lbCBTdXJmZXIgVFYgKGJ0ODQ4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAxNSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAxMywgMTQsIDExLCA3LCAwLCAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDQsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAxNSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAxMywgMTQsIDExLCA3LCAwLCAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLm1zcDM0eHhfYWx0ICAgID0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vayAgICAgPSBhdmVybWVkaWFfdHZfc3RlcmVvX2F1ZGlvLAotfSx7Ci0JLm5hbWUJCT0gIkFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gNywKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAyLCAxLCAzLCA0fSwgLyogb2xkOiB7IDAsIDEsIDIsIDMsIDR9ICovCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIlpvbHRyaXggVFYtTWF4IiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDE1LAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7MCAsIDAsIDEgLCAwLCAxMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJLyogLS0tLSBjYXJkIDB4MGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0FEU1RFQ0hfVFZdID0geworCQkubmFtZQkJPSAiQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAxMywgMTQsIDExLCA3LCAwLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9BVkVSTUVESUE5OF0gPSB7CisJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZDYXB0dXJlIDk4IiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSA0LAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAxMywgMTQsIDExLCA3LCAwLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkubXNwMzR4eF9hbHQgICAgPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vayAgICAgPSBhdmVybWVkaWFfdHZfc3RlcmVvX2F1ZGlvLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfVkhYXSA9IHsKKwkJLm5hbWUJCT0gIkFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSA3LAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMiwgMSwgMywgNH0sIC8qIG9sZDogeyAwLCAxLCAyLCAzLCA0fSAqLworCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9aT0xUUklYXSA9IHsKKwkJLm5hbWUJCT0gIlpvbHRyaXggVFYtTWF4IiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0gezAgLCAwLCAxICwgMCwgMTB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgxMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MDFmZTAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkvKiAyMDAzLTEwLTIwIGJ5ICJBbnRvbiBBLiBBcmFwb3YiIDxhcmFwb3ZAbWFpbC5ydT4gKi8KLQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDAxZTAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAsIDB4MDAyMDAwLCAwIH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi19LHsKLQkubmFtZQkJPSAiTGVhZHRlayBXaW5WaWV3IDYwMSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDgzMDBmOCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSwwfSwKLQkuYXVkaW9tdXgJPSB7IDB4NGZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3fSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sJPSB3aW52aWV3X2F1ZGlvLAotCS5oYXNfcmFkaW8JPSAxLAotfSx7Ci0JLm5hbWUJCT0gIkFWRUMgSW50ZXJjYXB0dXJlIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMiwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezEsIDAsIDAsIDAsIDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAtMSwKLQkuc3ZocwkJPSAtMSwKLQkuZ3Bpb21hc2sJPSAweDhkZmYwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwIH0sCi0JLm5vX21zcDM0eHgJPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJLyogLS0tLSBjYXJkIDB4MTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1BJWFZJRVdQTEFZVFZdID0geworCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbHZpZXcgUGxheVRWIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCSNpZiAwCisJCS8qIG9sZCAqLworCQkuYXVkaW9tdXgJPSB7IDB4MDFjMDAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAsIDB4MDAyMDAwLCAwIH0sCisJI2Vsc2UKKwkJLyogMjAwMy0xMC0yMCBieSAiQW50b24gQS4gQXJhcG92IiA8YXJhcG92QG1haWwucnU+ICovCisJCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKKwkjZW5kaWYKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwl9LAorCVtCVFRWX0JPQVJEX1dJTlZJRVdfNjAxXSA9IHsKKwkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luVmlldyA2MDEiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDgzMDBmOCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsMH0sCisJCS5hdWRpb211eAk9IHsgMHg0ZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDd9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sJPSB3aW52aWV3X2F1ZGlvLAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX0FWRUNfSU5URVJDQVBdID0geworCQkubmFtZQkJPSAiQVZFQyBJbnRlcmNhcHR1cmUiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDIsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAwLAorCQkubXV4c2VsCQk9IHsyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0gezEsIDAsIDAsIDAsIDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0xJRkVfRkxZS0lUXSA9IHsKKwkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIEVaIC9GbHlLaXQgTFIzOCBCdDg0OCAoY2FwdHVyZSBvbmx5KSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IC0xLAorCQkuc3ZocwkJPSAtMSwKKwkJLmdwaW9tYXNrCT0gMHg4ZGZmMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDE0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZQkJPSAiQ0VJIFJhZmZsZXMgQ2FyZCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDMsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkubXV4c2VsCQk9IHsyLCAzLCAxLCAxfSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OC8gTHVja3kgU3RhciBJbWFnZSBXb3JsZCBDb25mZXJlbmNlVFYgTFI1MCIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDIsICAvKiB0dW5lciwgbGluZSBpbiAqLwotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgxODAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwfSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkFza2V5IENQSDA1MC8gUGhvZWJlIFR2IE1hc3RlciArIEZNIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4YzAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7MCwgMSwgMHg4MDAsIDB4NDAwLCAweGMwMCwgMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWLCBidDg3OCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gLTEsCi0JLmdwaW9tYXNrCT0gNywKLQkubXV4c2VsCQk9IHsgMiwgMywgLTEgfSwKLQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAotCS5hdWRpb211eAk9IHsgMCwgMCwgMCwgMCwgMCB9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUxQU19UU0JCNV9QQUxfSSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKKwkvKiAtLS0tIGNhcmQgMHgxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfQ0VJX1JBRkZMRVNdID0geworCQkubmFtZQkJPSAiQ0VJIFJhZmZsZXMgQ2FyZCIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMywKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5tdXhzZWwJCT0gezIsIDMsIDEsIDF9LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9DT05GRVJFTkNFVFZdID0geworCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIEx1Y2t5IFN0YXIgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZVRWIExSNTAiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDIsICAvKiB0dW5lciwgbGluZSBpbiAqLworCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgxODAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDB9LAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9QSE9FQkVfVFZNQVNdID0geworCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDUwLyBQaG9lYmUgVHYgTWFzdGVyICsgRk0iLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweGMwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7MCwgMSwgMHg4MDAsIDB4NDAwLCAweGMwMCwgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX01PRFRFQ18yMDVdID0geworCQkubmFtZQkJPSAiTW9kdWxhciBUZWNobm9sb2d5IE1NMjAxL01NMjAyL01NMjA1L01NMjEwL01NMjE1IFBDVFYsIGJ0ODc4IiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gLTEsCisJCS5ncGlvbWFzawk9IDcsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAtMSB9LAorCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAorCQkuYXVkaW9tdXgJPSB7IDAsIDAsIDAsIDAsIDAgfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FMUFNfVFNCQjVfUEFMX0ksCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgxOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkFza2V5IENQSDA1WC8wNlggKGJ0ODc4KSBbbWFueSB2ZW5kb3JzXSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweGUwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwLCAweGMwMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmVtb3RlICAgICA9IDEsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVisgVmVyc2lvbiAxLjAgKEJ0ODQ4KS8gVGVycmEgVFZhbHVlIFZlcnNpb24gMS4wLyBWb2JpcyBUVi1Cb29zdGFyIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MWYwZmZmLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vayAgICAgPSB0ZXJyYXR2X2F1ZGlvLAotfSx7Ci0JLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5DYW0gbmV3ZXIgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMywKLQkuZ3Bpb21hc2sJPSA3LAotCS5tdXhzZWwJCT0geyAyLCAwLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDR9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAyLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgxODAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCS8qIC0tLS0gY2FyZCAweDE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxXSA9IHsKKwkJLm5hbWUJCT0gIkFza2V5IENQSDA1WC8wNlggKGJ0ODc4KSBbbWFueSB2ZW5kb3JzXSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4ZTAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHhjMDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9WT0JJU19CT09TVEFSXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4wIChCdDg0OCkvIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMC8gVm9iaXMgVFYtQm9vc3RhciIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MWYwZmZmLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMCwgMHg0MDAwMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vayAgICAgPSB0ZXJyYXR2X2F1ZGlvLAorCX0sCisJW0JUVFZfQk9BUkRfSEFVUFBBVUdfV0NBTV0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAzLAorCQkuZ3Bpb21hc2sJPSA3LAorCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfTUFYSV0gPSB7CisJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDIsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDE4MDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4MWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MWYwZmZmLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDB4MDAwMDAsIDB4NDAwMDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vawk9IHRlcnJhdHZfYXVkaW8sCi0JLyogR1BJTyB3aXJpbmc6Ci0JRXh0ZXJuYWwgMjAgcGluIGNvbm5lY3RvciAoZm9yIEFjdGl2ZSBSYWRpbyBVcGdyYWRlIGJvYXJkKQotCWdwaW8wMDogaTJjLXNkYQotCWdwaW8wMTogaTJjLXNjbAotCWdwaW8wMjogb201NjEwLWRhdGEKLQlncGlvMDM6IG9tNTYxMC1jbGsKLQlncGlvMDQ6IG9tNTYxMC13cmUKLQlncGlvMDU6IG9tNTYxMC1zdGVyZW8KLQlncGlvMDY6IHJkczY1ODgtZGF2bgotCWdwaW8wNzogUGluIDcgbi5jLgotCWdwaW8wODogbklPVwotCWdwaW8wOSsxMDogbklPUiwgblNFTCA/PyAoYnQ4NzgpCi0JCWdwaW8wOTogbklPUiAoYnQ4NDgpCi0JCWdwaW8xMDogblNFTCAoYnQ4NDgpCi0JU291bmQgUm91dGluZzoKLQlncGlvMTY6IHUyLUEwICgxc3QgNDA1MmJ0KQotCWdwaW8xNzogdTItQTEKLQlncGlvMTg6IHUyLW5FTgotCWdwaW8xOTogdTQtQTAgKDJuZCA0MDUyKQotCWdwaW8yMDogdTQtQTEKLQkJdTQtbkVOIC0gR05ECi0JQnRzcHk6Ci0JCTAwMDAwIDogQ2Ryb20gKGludGVybmFsIGF1ZGlvIGlucHV0KQotCQkxMDAwMCA6IGV4dC4gVmlkZW8gYXVkaW8gaW5wdXQKLQkJMjAwMDAgOiBUViBNb25vCi0JCWEwMDAwIDogVFYgTW9uby8yCi0JMWEwMDAwIDogVFYgU3RlcmVvCi0JCTMwMDAwIDogUmFkaW8KLQkJNDAwMDAgOiBNdXRlCi0qLwotCi19LHsKLQkvKiBKYW5uaWsgRnJpdHNjaCA8amFubmlrQHRlY2hmYWsudW5pLWJpZWxlZmVsZC5kZT4gKi8KLQkubmFtZQkJPSAiSW1hZ2VuYXRpb24gUFhDMjAwIiwKLQkudmlkZW9faW5wdXRzCT0gNSwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gLTEsCi0JLnN2aHMJCT0gMSwgLyogd2FzOiA0ICovCi0JLmdwaW9tYXNrCT0gMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCi0JLmF1ZGlvbXV4CT0geyAwIH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5tdXhzZWxfaG9vayAgICA9IFBYQzIwMF9tdXhzZWwsCi0KLX0sewotCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MTgwMCwgIC8qIDB4OGRmZTAwICovCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMHgwODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwLCAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDMsCi0JLmdwaW9tYXNrCT0gMSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAxLCAwLCAwLCAwLCAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0KLS8qIC0tLS0gY2FyZCAweDIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDAsCi0JLnR1bmVyCQk9IC0xLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwIH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAwLAotCS50dW5lcl90eXBlCT0gNCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVmFsdWUgVmVyc2lvbiBCdDg3OCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweGZmZmYwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAweDUwMCwgMCwgMHgzMDAsIDB4OTAwLCAweDkwMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkxlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsIDB9LCAvKiBUViwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCi0JLyogQWxleGFuZGVyIFZhcmFraW4gPGF2YXJha2luQGhvdG1haWwuY29tPiBbc3RlcmVvIHZlcnNpb25dICovCi0JLmdwaW9tYXNrCT0gMHhiMzMwMDAsCi0JLmF1ZGlvbXV4CT0geyAweDEyMjAwMCwweDEwMDAsMHgwMDAwLDB4NjIwMDAwLDB4ODAwMDAwIH0sCi0JLyogQXVkaW8gUm91dGluZyBmb3IgIldpbkZhc3QgMjAwMCBYUCIgKG5vIHR2IHN0ZXJlbyAhKQotCQlncGlvMjMgLS0gaGVmNDA1MjpuRW5hYmxlICgweDgwMDAwMCkKLQkJZ3BpbzEyIC0tIGhlZjQwNTI6QTEKLQkJZ3BpbzEzIC0tIGhlZjQwNTI6QTAKLQkweDAwMDA6IGV4dGVybmFsIGF1ZGlvCi0JMHgxMDAwOiBGTQotCTB4MjAwMDogVFYKLQkweDMwMDA6IG4uYy4KLQlOb3RlOiBUaGVyZSBleGlzdHMgYW5vdGhlciB2YXJpYW50ICJXaW5mYXN0IDIwMDAiIHdpdGggdHYgc3RlcmVvICE/Ci0JTm90ZTogZWVwcm9tIG9ubHkgY29udGFpbnMgRkYgYW5kIHBjaSBzdWJzeXN0ZW0gaWQgMTA3ZDo2NjA2CisJLyogLS0tLSBjYXJkIDB4MWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1RFUlJBVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVisgVmVyc2lvbiAxLjEgKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MWYwZmZmLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMHgwMDAwMCwgMHg0MDAwMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vawk9IHRlcnJhdHZfYXVkaW8sCisJCS8qIEdQSU8gd2lyaW5nOgorCQlFeHRlcm5hbCAyMCBwaW4gY29ubmVjdG9yIChmb3IgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgYm9hcmQpCisJCWdwaW8wMDogaTJjLXNkYQorCQlncGlvMDE6IGkyYy1zY2wKKwkJZ3BpbzAyOiBvbTU2MTAtZGF0YQorCQlncGlvMDM6IG9tNTYxMC1jbGsKKwkJZ3BpbzA0OiBvbTU2MTAtd3JlCisJCWdwaW8wNTogb201NjEwLXN0ZXJlbworCQlncGlvMDY6IHJkczY1ODgtZGF2bgorCQlncGlvMDc6IFBpbiA3IG4uYy4KKwkJZ3BpbzA4OiBuSU9XCisJCWdwaW8wOSsxMDogbklPUiwgblNFTCA/PyAoYnQ4NzgpCisJCQlncGlvMDk6IG5JT1IgKGJ0ODQ4KQorCQkJZ3BpbzEwOiBuU0VMIChidDg0OCkKKwkJU291bmQgUm91dGluZzoKKwkJZ3BpbzE2OiB1Mi1BMCAoMXN0IDQwNTJidCkKKwkJZ3BpbzE3OiB1Mi1BMQorCQlncGlvMTg6IHUyLW5FTgorCQlncGlvMTk6IHU0LUEwICgybmQgNDA1MikKKwkJZ3BpbzIwOiB1NC1BMQorCQkJdTQtbkVOIC0gR05ECisJCUJ0c3B5OgorCQkJMDAwMDAgOiBDZHJvbSAoaW50ZXJuYWwgYXVkaW8gaW5wdXQpCisJCQkxMDAwMCA6IGV4dC4gVmlkZW8gYXVkaW8gaW5wdXQKKwkJCTIwMDAwIDogVFYgTW9ubworCQkJYTAwMDAgOiBUViBNb25vLzIKKwkJMWEwMDAwIDogVFYgU3RlcmVvCisJCQkzMDAwMCA6IFJhZGlvCisJCQk0MDAwMCA6IE11dGUKIAkqLwotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkucGxsCQk9IFBMTF8yOCwKLQkuaGFzX3JhZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IDUsIC8qIGRlZmF1bHQgZm9yIG5vdywgZ3BpbyByZWFkcyBCRkZGMDYgZm9yIFBhbCBiZytkayAqLwotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vawk9IHdpbmZhc3QyMDAwX2F1ZGlvLAotCS5oYXNfcmVtb3RlICAgICA9IDEsCi19LHsKLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDMsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDB9LAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CiAKLS8qIC0tLS0gY2FyZCAweDI0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDMsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDAsIDAgfSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JhZGlvCT0gMSwKLX0sewotCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgcHJvIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4ZmYsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkuYXVkaW9tdXgJPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMsIDB4MjksIDB4MjkgfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiQXNrZXkgQ1BIMDZYIFRWaWV3OTkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHg1NTFlMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDB9LAotCS5hdWRpb211eAk9IHsgMHg1NTE0MDAsIDB4NTUxMjAwLCAwLCAwLCAweDU1MWMwMCwgMHg1NTEyMDAgfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAxLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotfSx7Ci0JLm5hbWUJCT0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgwMzAwMEYsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMiwgMHhkMDAwMSwgMCwgMCwgMX0sCi0JLm5lZWRzX3R2YXVkaW8JPSAwLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJfSwKKwlbQlRUVl9CT0FSRF9QWEMyMDBdID0geworCQkvKiBKYW5uaWsgRnJpdHNjaCA8amFubmlrQHRlY2hmYWsudW5pLWJpZWxlZmVsZC5kZT4gKi8KKwkJLm5hbWUJCT0gIkltYWdlbmF0aW9uIFBYQzIwMCIsCisJCS52aWRlb19pbnB1dHMJPSA1LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IC0xLAorCQkuc3ZocwkJPSAxLCAvKiB3YXM6IDQgKi8KKwkJLmdwaW9tYXNrCT0gMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAorCQkuYXVkaW9tdXgJPSB7IDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5tdXhzZWxfaG9vayAgICA9IFBYQzIwMF9tdXhzZWwsCiAKLS8qIC0tLS0gY2FyZCAweDI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZQkJPSAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCAoYnQ4NzgpLCAzRGZ4IFZvb2Rvb1RWIDEwMCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSA3LAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDQsIDAsIDIsIDMsIDF9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLmhhc19yYWRpbyAgICAgID0gMSwKLX0sewotCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZQaG9uZSA5OCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDQsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAxNSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAxMywgNCwgMTEsIDcsIDAsIDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JhZGlvCT0gMSwKLQkuYXVkaW9faG9vawk9IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAotfSx7Ci0JLm5hbWUJCT0gIlByb1ZpZGVvIFBWOTUxIiwgLyogcGljMTZjNTQgKi8KLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMCwgMCwgMCwgMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IDEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkxpdHRsZSBPbkFpciBUViIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweGUwMGIsCi0JLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezB4ZmY5ZmY2LCAweGZmOWZmNiwgMHhmZjFmZjcsIDAsIDB4ZmYzZmZjfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKKwl9LAorCVtCVFRWX0JPQVJEX0ZMWVZJREVPXzk4XSA9IHsKKwkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDE4MDAsICAvKiAweDhkZmUwMCAqLworCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMHgwODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwLCAwIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfSVBST1RWXSA9IHsKKwkJLm5hbWUJCT0gIkZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAzLAorCQkuZ3Bpb21hc2sJPSAxLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMSwgMCwgMCwgMCwgMCB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgyYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIlNpZ21hIFRWSUktRk0iLAotCS52aWRlb19pbnB1dHMJPSAyLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IC0xLAotCS5ncGlvbWFzawk9IDMsCi0JLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezEsIDEsIDAsIDIsIDN9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsCQk9IFBMTF9OT05FLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEgMiIsCi0JLnZpZGVvX2lucHV0cwk9IDUsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IC0xLAotCS5zdmhzCQk9IDMsCi0JLmdwaW9tYXNrCT0gMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCi0JLmF1ZGlvbXV4CT0gezAgfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiWm9sdHJpeCBHZW5pZSBUVi9GTSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweGJjZjAzZiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAweGJjODAzZiwgMHhiYzkwM2YsIDB4YmNiMDNmLCAwLCAweGJjYjAzZn0sCi0JLm5vX21zcDM0eHgJPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gMjEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIlRlcnJhdGVjIFRWL1JhZGlvKyIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDcwMDAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDAsIDB4MjAwMDAgfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLm5vX21zcDM0eHgJPSAxLAotCS5wbGwJCT0gUExMXzM1LAotCS50dW5lcl90eXBlCT0gMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yYWRpbwk9IDEsCi19LHsKKwkvKiAtLS0tIGNhcmQgMHgyMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfSU5URUxfQ19TX1BDSV0gPSB7CisJCS5uYW1lCQk9ICJJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAwLAorCQkudHVuZXIJCT0gLTEsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnR1bmVyX3R5cGUJPSA0LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9URVJSQVRWQUxVRV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4IiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAweDUwMCwgMCwgMHgzMDAsIDB4OTAwLCAweDkwMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1dJTkZBU1QyMDAwXSA9IHsKKwkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSwgMH0sIC8qIFRWLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KKwkjaWYgMAorCQkuZ3Bpb21hc2sJPSAweGMzMzAwMCwKKwkJLmF1ZGlvbXV4CT0geyAweDQyMjAwMCwweDEwMDAsMHgwMDAwLDB4NjIwMDAwLDB4ODAwMDAwIH0sCisJI2Vsc2UKKwkJLyogQWxleGFuZGVyIFZhcmFraW4gPGF2YXJha2luQGhvdG1haWwuY29tPiBbc3RlcmVvIHZlcnNpb25dICovCisJCS5ncGlvbWFzawk9IDB4YjMzMDAwLAorCQkuYXVkaW9tdXgJPSB7IDB4MTIyMDAwLDB4MTAwMCwweDAwMDAsMHg2MjAwMDAsMHg4MDAwMDAgfSwKKwkjZW5kaWYKKwkJLyogQXVkaW8gUm91dGluZyBmb3IgIldpbkZhc3QgMjAwMCBYUCIgKG5vIHR2IHN0ZXJlbyAhKQorCQkJZ3BpbzIzIC0tIGhlZjQwNTI6bkVuYWJsZSAoMHg4MDAwMDApCisJCQlncGlvMTIgLS0gaGVmNDA1MjpBMQorCQkJZ3BpbzEzIC0tIGhlZjQwNTI6QTAKKwkJMHgwMDAwOiBleHRlcm5hbCBhdWRpbworCQkweDEwMDA6IEZNCisJCTB4MjAwMDogVFYKKwkJMHgzMDAwOiBuLmMuCisJCU5vdGU6IFRoZXJlIGV4aXN0cyBhbm90aGVyIHZhcmlhbnQgIldpbmZhc3QgMjAwMCIgd2l0aCB0diBzdGVyZW8gIT8KKwkJTm90ZTogZWVwcm9tIG9ubHkgY29udGFpbnMgRkYgYW5kIHBjaSBzdWJzeXN0ZW0gaWQgMTA3ZDo2NjA2CisJCSovCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5oYXNfcmFkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IDUsIC8qIGRlZmF1bHQgZm9yIG5vdywgZ3BpbyByZWFkcyBCRkZGMDYgZm9yIFBhbCBiZytkayAqLworCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rCT0gd2luZmFzdDIwMDBfYXVkaW8sCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMl0gPSB7CisJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIC8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAzLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgxODAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDB9LAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDMwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZQkJPSAiQXNrZXkgQ1BIMDN4LyBEeW5hbGluayBNYWdpYyBUVmlldyIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAxNSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezIsMCwwLDAsMX0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIklPREFUQSBHVi1CQ1RWMy9QQ0kiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgwMTBmMDAsCi0JLm11eHNlbAkJPSB7MiwgMywgMCwgMH0sCi0JLmF1ZGlvbXV4CT0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAsIDAsIDB9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX0FMUFNfVFNIQzZfTlRTQywKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sJPSBndmJjdHYzcGNpX2F1ZGlvLAotfSx7Ci0JLm5hbWUJCT0gIlByb2xpbmsgUFYtQlQ4NzhQKzRFIC8gUGl4ZWxWaWV3IFBsYXlUViBQQUsgLyBMZW5jbyBNWFRWLTk1NzggQ1AiLAotCS52aWRlb19pbnB1dHMJPSA1LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDMsCi0JLmdwaW9tYXNrCT0gMHhBQTAwMDAsCi0JLm11eHNlbAkJPSB7IDIsMywxLDEsLTEgfSwKLQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAotCS5hdWRpb211eAk9IHsgMHgyMDAwMCwgMCwgMHg4MDAwMCwgMHg4MDAwMCwgMHhhODAwMCwgMHg0NjAwMCAgfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZQk9IDEsCi0JLyogR1BJTyB3aXJpbmc6IChkaWZmZXJlbnQgZnJvbSBSZXYuNEMgISkKLQkJR1BJTzE3OiBVNC5BMCAoZmlyc3QgaGVmNDA1MmJ0KQotCQlHUElPMTk6IFU0LkExCi0JCUdQSU8yMDogVTUuQTEgKHNlY29uZCBoZWY0MDUyYnQpCi0JCUdQSU8yMTogVTQubkVOCi0JCUdQSU8yMjogQlQ4MzIgUmVzZXQgTGluZQotCQlHUElPMjM6IEE1LEEwLCBVNSxuRU4KLQlOb3RlOiBBdCBpMmM9MHg4YSBpcyBhIEJ0ODMyIGNoaXAsIHdoaWNoIGNoYW5nZXMgdG8gMHg4OCBhZnRlciBiZWluZyByZXNldCB2aWEgR1BJTzIyCisJLyogLS0tLSBjYXJkIDB4MjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1RZUEhPT05fVFZJRVddID0geworCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMywKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MTgwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwLCAwIH0sCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmFkaW8JPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBST10gPSB7CisJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgcHJvIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHhmZiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLmF1ZGlvbXV4CT0geyAweDIxLCAweDIwLCAweDI0LCAweDJjLCAweDI5LCAweDI5IH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjNdID0geworCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDZYIFRWaWV3OTkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDU1MWUwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXgJPSB7IDB4NTUxNDAwLCAweDU1MTIwMCwgMCwgMCwgMHg1NTFjMDAsIDB4NTUxMjAwIH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfUElOTkFDTEVdID0geworCQkubmFtZQkJPSAiUGlubmFjbGUgUENUViBTdHVkaW8vUmF2ZSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MDMwMDBGLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMiwgMHhkMDAwMSwgMCwgMCwgMX0sCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4MjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1NUQjJdID0geworCQkubmFtZQkJPSAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCAoYnQ4NzgpLCAzRGZ4IFZvb2Rvb1RWIDEwMCIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDcsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyA0LCAwLCAyLCAzLCAxfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9BVlBIT05FOThdID0geworCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUgOTgiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDQsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAxNSwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDEzLCA0LCAxMSwgNywgMCwgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yYWRpbwk9IDEsCisJCS5hdWRpb19ob29rCT0gYXZlcm1lZGlhX3R2cGhvbmVfYXVkaW8sCisJfSwKKwlbQlRUVl9CT0FSRF9QVjk1MV0gPSB7CisJCS5uYW1lCQk9ICJQcm9WaWRlbyBQVjk1MSIsIC8qIHBpYzE2YzU0ICovCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAwLCAwLCAwLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IDEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX09OQUlSX1RWXSA9IHsKKwkJLm5hbWUJCT0gIkxpdHRsZSBPbkFpciBUViIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4ZTAwYiwKKwkJLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsweGZmOWZmNiwgMHhmZjlmZjYsIDB4ZmYxZmY3LCAwLCAweGZmM2ZmY30sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisKKwkvKiAtLS0tIGNhcmQgMHgyYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfU0lHTUFfVFZJSV9GTV0gPSB7CisJCS5uYW1lCQk9ICJTaWdtYSBUVklJLUZNIiwKKwkJLnZpZGVvX2lucHV0cwk9IDIsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gLTEsCisJCS5ncGlvbWFzawk9IDMsCisJCS5tdXhzZWwJCT0gezIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7MSwgMSwgMCwgMiwgM30sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfTk9ORSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTjJdID0geworCQkubmFtZQkJPSAiTUFUUklYLVZpc2lvbiBNVi1EZWx0YSAyIiwKKwkJLnZpZGVvX2lucHV0cwk9IDUsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gLTEsCisJCS5zdmhzCQk9IDMsCisJCS5ncGlvbWFzawk9IDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwfSwKKwkJLmF1ZGlvbXV4CT0gezAgfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRV0gPSB7CisJCS5uYW1lCQk9ICJab2x0cml4IEdlbmllIFRWL0ZNIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHhiY2YwM2YsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAweGJjODAzZiwgMHhiYzkwM2YsIDB4YmNiMDNmLCAwLCAweGJjYjAzZn0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gMjEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1RFUlJBVFZSQURJT10gPSB7CisJCS5uYW1lCQk9ICJUZXJyYXRlYyBUVi9SYWRpbysiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDcwMDAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMCwgMHg0MDAwMCwgMHgyMDAwMCB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMzUsCisJCS50dW5lcl90eXBlCT0gMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4MzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0RZTkFMSU5LXSA9IHsKKwkJLm5hbWUJCT0gIkFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXciLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAxNSwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7MiwwLDAsMCwxfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfR1ZCQ1RWM1BDSV0gPSB7CisJCS5uYW1lCQk9ICJJT0RBVEEgR1YtQkNUVjMvUENJIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgwMTBmMDAsCisJCS5tdXhzZWwJCT0gezIsIDMsIDAsIDB9LAorCQkuYXVkaW9tdXgJPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCwgMCwgMH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUxQU19UU0hDNl9OVFNDLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rCT0gZ3ZiY3R2M3BjaV9hdWRpbywKKwl9LAorCVtCVFRWX0JPQVJEX1BYRUxWV1BMVFZQQUtdID0geworCQkubmFtZQkJPSAiUHJvbGluayBQVi1CVDg3OFArNEUgLyBQaXhlbFZpZXcgUGxheVRWIFBBSyAvIExlbmNvIE1YVFYtOTU3OCBDUCIsCisJCS52aWRlb19pbnB1dHMJPSA1LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDMsCisJCS5ncGlvbWFzawk9IDB4QUEwMDAwLAorCQkubXV4c2VsCQk9IHsgMiwzLDEsMSwtMSB9LAorCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAorCQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDAsIDB4ODAwMDAsIDB4ODAwMDAsIDB4YTgwMDAsIDB4NDYwMDAgIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZQk9IDEsCisJCS8qIEdQSU8gd2lyaW5nOiAoZGlmZmVyZW50IGZyb20gUmV2LjRDICEpCisJCQlHUElPMTc6IFU0LkEwIChmaXJzdCBoZWY0MDUyYnQpCisJCQlHUElPMTk6IFU0LkExCisJCQlHUElPMjA6IFU1LkExIChzZWNvbmQgaGVmNDA1MmJ0KQorCQkJR1BJTzIxOiBVNC5uRU4KKwkJCUdQSU8yMjogQlQ4MzIgUmVzZXQgTGluZQorCQkJR1BJTzIzOiBBNSxBMCwgVTUsbkVOCisJCU5vdGU6IEF0IGkyYz0weDhhIGlzIGEgQnQ4MzIgY2hpcCwgd2hpY2ggY2hhbmdlcyB0byAweDg4IGFmdGVyIGJlaW5nIHJlc2V0IHZpYSBHUElPMjIKKwkJKi8KKwl9LAorCVtCVFRWX0JPQVJEX0VBR0xFXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkVhZ2xlIFdpcmVsZXNzIENhcHJpY29ybjIgKGJ0ODc4QSkiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSA3LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDR9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xIC8qIFRVTkVSX0FMUFNfVE1ESDJfTlRTQyAqLywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisKKwkvKiAtLS0tIGNhcmQgMHgzNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfUElOTkFDTEVQUk9dID0geworCQkvKiBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQDJnZW4uY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTdHVkaW8gUHJvIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMywKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMzAwMEYsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAxLCAweGQwMDAxLCAwLCAwLCAxMH0sCisJCQkJLyogc291bmQgcGF0aCAoNSBzb3VyY2VzKToKKwkJCQlNVVgxIChtYXNrIDB4MDMpLCBFbmFibGUgUGluIDB4MDggKDA9ZW5hYmxlLCAxPWRpc2FibGUpCisJCQkJCTA9IGV4dC4gQXVkaW8gSU4KKwkJCQkJMT0gZnJvbSBNVVgyCisJCQkJCTI9IE1vbm8gVFYgc291bmQgZnJvbSBUdW5lcgorCQkJCQkzPSBub3QgY29ubmVjdGVkCisJCQkJTVVYMiAobWFzayAweDMwMDAwKToKKwkJCQkJMCwyLDM9IGZyb20gTVNQMzR4eAorCQkJCQkxPSBGTSBzdGVyZW8gUmFkaW8gZnJvbSBUdW5lciAqLworCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9UVklFV19SRFNfRk1dID0geworCQkvKiBDbGFhcyBMYW5nYmVobiA8Y2xhYXNAYmlnZm9vdC5jb20+LAorCQlTdmVuIEdyb3Roa2xhZ3MgPHN2ZW5AdXBiLmRlPiAqLworCQkubmFtZQkJPSAiVHlwaG9vbiBUVmlldyBSRFMgKyBGTSBTdGVyZW8gLyBLTkMxIFRWIFN0YXRpb24gUkRTIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAzLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgxYywKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDAsIDB4MTAsIDgsIDQgfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX0xJRkVURUNfOTQxNV0gPSB7CisJCS8qIFRpbSBS9nN0ZXJtdW5kdCA8cm9zdGVybUB1bmktbXVlbnN0ZXIuZGU+CisJCWluIGRlLmNvbXAub3MudW5peC5saW51eC5oYXJkd2FyZToKKwkJCW9wdGlvbnMgYnR0diBjYXJkPTAgcGxsPTEgcmFkaW89MSBncGlvbWFzaz0weDE4ZTAKKwkJCWF1ZGlvbXV4PTB4NDRjNzFmLDB4NDRkNzFmLDAsMHg0NGQ3MWYsMHg0NGRmZmYKKwkJCW9wdGlvbnMgdHVuZXIgdHlwZT01ICovCisJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwIC9GbHlWaWRlbyBBMi8gTGlmZXRlYyBMVCA5NDE1IFRWIFtMUjkwXSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MThlMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDB4MDAwMCwweDA4MDAsMHgxMDAwLDB4MTAwMCwweDE4ZTAgfSwKKwkJCS8qIEZvciBjYXJkcyB3aXRoIHRkYTk4MjAvdGRhOTgyMToKKwkJCQkweDAwMDA6IFR1bmVyIG5vcm1hbCBzdGVyZW8KKwkJCQkweDAwODA6IFR1bmVyIEEyIFNBUCAoc2Vjb25kIGF1ZGlvIHByb2dyYW0gPSBad2Vpa2FuYWx0b24pCisJCQkJMHgwODgwOiBUdW5lciBBMiBzdGVyZW8gKi8KKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0JFU1RCVVlfRUFTWVRWXSA9IHsKKwkJLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KKwkJb2xkIEVhc3kgVFYgQlQ4NDggdmVyc2lvbiAobW9kZWwgQ1BIMDMxKSAqLworCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHhGLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDIsIDAsIDAsIDAsIDEwfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDM4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9GTFlWSURFT185OEZNXSA9IHsKKwkJLyogR29yZG9uIEhleWRvbiA8Z2poZXlkb25AYmlnZm9vdC5jb20gKCc5OCkgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkxpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MCIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDMsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MTgwMCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IDUsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCQkvKiBUaGlzIGlzIHRoZSB1bHRpbWF0ZSBjaGVhcG8gY2FwdHVyZSBjYXJkCisJCSoganVzdCBhIEJUODQ4QSBvbiBhIHNtYWxsIFBDQiEKKwkJKiBTdGV2ZSBIb3Nnb29kIDxzdGV2ZUBlcXVpaW5ldC5jb20+ICovCisJW0JUVFZfQk9BUkRfR1JBTkRURUNdID0geworCQkubmFtZSAgICAgICAgICAgPSAiR3JhbmRUZWMgJ0dyYW5kIFZpZGVvIENhcHR1cmUnIChCdDg0OCkiLAorCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMCwKKwkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9BU0tFWV9DUEgwNjBdID0geworCQkvKiBEYW5pZWwgSGVycmluZ3RvbiA8ZGFuaWVsLmhlcnJpbmd0b25AaG9tZS5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHhlMDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4ODAwLCAweDQwMCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfQVNLRVlfQ1BIMDNYXSA9IHsKKwkJLyogTWF0dGkgTW90dHVzIDxtb3R0dXNAcGh5c2ljLnV0LmVlPiAqLworCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDN4IFRWIENhcHR1cmVyIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMzAwMEYsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAyLDAsMCwwLDEgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IDAsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4M2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX01NMTAwUENUVl0gPSB7CisJCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTEwMFBDVFYiLAorCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAyLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDExLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDIsIDAsIDAsIDEsIDh9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfR01WMV0gPSB7CisJCS8qIEFkcmlhbiBDb3ggPGFkcmlhbkBodW1ib2xkdC5jby51ayAqLworCQkubmFtZQkJPSAiQUcgRWxlY3Ryb25pY3MgR01WMSIsCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHhGLAorCQkubXV4c2VsCQk9IHsgMiwgMn0sCisJCS5hdWRpb211eCAgICAgICA9IHsgfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVjJdID0geworCQkvKiBNaWd1ZWwgQW5nZWwgQWx2YXJleiA8bWFhY3J1ekBuYXZlZ2FsaWEuY29tPgorCQluZXcgRWFzeSBUViBCVDg3OCB2ZXJzaW9uIChtb2RlbCBDUEgwNjEpCisJCXNwZWNpYWwgdGhhbmtzIHRvIEluZm9ybWF0aWNhIE1pZXJlcyBmb3IgcHJvdmlkaW5nIHRoZSBjYXJkICovCisJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjEvIEJFU1RCVVkgRWFzeSBUViAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDIsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMSwgMCwgNCwgNCwgOX0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9BVElfVFZXT05ERVJdID0geworCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLworCQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4ZjAzZiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLmF1ZGlvbXV4CT0geyAweGJmZmUsIDAsIDB4YmZmZiwgMCwgMHhiZmZlfSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4NDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0FUSV9UVldPTkRFUlZFXSA9IHsKKwkJLyogTHVrYXMgR2ViYXVlciA8Z2VieUB2b2xueS5jej4gKi8KKwkJLm5hbWUJCT0gIkFUSSBUVi1Xb25kZXIgVkUiLAorCQkudmlkZW9faW5wdXRzCT0gMiwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAtMSwKKwkJLmdwaW9tYXNrCT0gMSwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDAsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDAsIDEsIDAsIDB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9GTFlWSURFTzIwMDBdID0geworCQkvKiBEZWVKYXkgPGRlZWpheUB3ZXN0ZWw5MDAubmV0ICgyMDAwUykgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkxpZmV2aWV3IEZseVZpZGVvIDIwMDBTIExSOTAiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAzLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAwLCAxfSwKKwkJCQkvKiBSYWRpbyBjaGFuZ2VkIGZyb20gMWU4MCB0byAweDgwMCB0byBtYWtlCisJCQkJRmx5VmlkZW8yMDAwUyBpbiAuaHUgaGFwcHkgKGdtKSovCisJCQkJLyogLWRrLT8/Pzogc2V0IG11dGU9MHgxODAwIGZvciB0ZGE5ODc0aCBkYXVnaHRlcmJvYXJkICovCisJCS5hdWRpb211eAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwLDB4MTgwMCwgMHgxMDgwIH0sCisJCS5hdWRpb19ob29rCT0gZnYyMDAwc19hdWRpbywKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubm9fdGRhOTg3NQk9IDEsCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gNSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfVEVSUkFUVkFMVUVSXSA9IHsKKwkJLm5hbWUJCT0gIlRlcnJhdGVjIFRWYWx1ZVJhZGlvIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAweDUwMCwgMHg1MDAsIDB4MzAwLCAweDkwMCwgMHg5MDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmFkaW8JPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfR1ZCQ1RWNFBDSV0gPSB7CisJCS8qIFRBTkFLQSBLZWkgPHBlZzAwNjI1QG5pZnR5LmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNC9QQ0kiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAxMGYwMCwKKwkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCwgMCwgMH0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0MsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sgICAgID0gZ3ZiY3R2M3BjaV9hdWRpbywKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4NDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIjNEZnggVm9vZG9vVFYgRk0gKEV1cm8pLCBWb29kb29UViAyMDAgKFVTQSkiLAorCQkvKiB0cnkgImluc21vZCBtc3AzNDAwIHNpbXBsZT0wIiBpZiB5b3UgaGF2ZQorCQkqIHNvdW5kIHByb2JsZW1zIHdpdGggdGhpcyBjYXJkLiAqLworCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCisJCS8qIDB4MTAwMDAwOiAxPU1TUCBlbmFibGVkICgwPWRpc2FibGUgYWdhaW4pCisJCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCisJCS5hdWRpb211eCAgICAgICA9IHsweDk0N2ZmZiwgMHg5ODdmZmYsMHg5NDdmZmYsMHg5NDdmZmYsIDB4OTQ3ZmZmfSwKKwkJLyogdHZ0dW5lciwgcmFkaW8sICAgZXh0ZXJuYWwsaW50ZXJuYWwsIG11dGUsICBzdGVyZW8KKwkJKiB0dW5lciwgQ29tcG9zaXQsIFNWaWQsIENvbXBvc2l0LW9uLVN2aWQtYWRhcHRlciAqLworCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgLDAgLDF9LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NVDIwMzIsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5oYXNfcmFkaW8JPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfQUlNTVNdID0geworCQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQWN0aXZlIEltYWdpbmcgQUlNTVMiLAorCQkudmlkZW9faW5wdXRzICAgPSAxLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKKwkJLmdwaW9tYXNrICAgICAgID0gMAorCX0sCisJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQX1BMVVNdID0geworCQkvKiBUb21hc3ogUHlyYSA8aGVsbGZpcmVAc2VkZXouaXEucGw+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gNCwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMTUsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMTEsIDcsIDEzLCAwfSwgLyogVFYgYW5kIFJhZGlvIHdpdGggc2FtZSBHUElPICEgKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAyNSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCQkvKiBHUElPIHdpcmluZzoKKwkJCUdQSU8wOiBVNC5BMCAoaGVmNDA1MmJ0KQorCQkJR1BJTzE6IFU0LkExCisJCQlHUElPMjogVTQuQTEgKHNlY29uZCBoZWY0MDUyYnQpCisJCQlHUElPMzogVTQubkVOLCBVNS5BMCwgQTUubkVOCisJCQlHUElPOC0xNTogdnJkODY2YiA/CisJCSovCisJfSwKKwlbQlRUVl9CT0FSRF9GTFlWSURFTzk4RVpdID0geworCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThFWiAoY2FwdHVyZSBvbmx5KSBMUjUxIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gMiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LCAvKiBBVjEsIEFWMiwgU1ZIUywgQ1ZpZCBhZGFwdGVyIG9uIFNWSFMgKi8KKwkJLnBsbAkJPSBQTExfMjgsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisKKwkvKiAtLS0tIGNhcmQgMHg0OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQXzlCXSA9IHsKKwkJLyogRGFyaXVzeiBLb3dhbGV3c2tpIDxkYXJla2tAYXV0b21leC5wbD4gKi8KKwkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCs5QiAoUGxheVRWIFBybyByZXYuOUIgRk0rTklDQU0pIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgzZiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLmF1ZGlvbXV4CT0geyAweDAxLCAweDAwLCAweDAzLCAweDAzLCAweDA5LCAweDAyIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5vX3RkYTk4NzUJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSA1LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rCT0gcHZidDg3OHA5Yl9hdWRpbywgLyogTm90ZTogbm90IGFsbCBjYXJkcyBoYXZlIHN0ZXJlbyAqLworCQkuaGFzX3JhZGlvCT0gMSwgIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSByYWRpbyAqLworCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCQkvKiBHUElPIHdpcmluZzoKKwkJCUdQSU8wOiBBMCBoZWY0MDUyCisJCQlHUElPMTogQTEgaGVmNDA1MgorCQkJR1BJTzM6IG5FTiBoZWY0MDUyCisJCQlHUElPOC0xNTogdnJkODY2YgorCQkJR1BJTzIwLDIyLDIzOiBSMzAsUjI5LFIyOAorCQkqLworCX0sCisJW0JUVFZfQk9BUkRfU0VOU09SQVkzMTFdID0geworCQkvKiBDbGF5IEt1bnogPGNrdW56QG1haWwuYXJjLm5hc2EuZ292PiAqLworCQkvKiB5b3UgbXVzdCBqdW1wZXIgSlA1IGZvciB0aGUgY2FyZCB0byB3b3JrICovCisJCS5uYW1lICAgICAgICAgICA9ICJTZW5zb3JheSAzMTEiLAorCQkudmlkZW9faW5wdXRzICAgPSA1LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gNCwKKwkJLmdwaW9tYXNrICAgICAgID0gMCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwLCAwfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9SVjYwNV0gPSB7CisJCS8qIE1pZ3VlbCBGcmVpdGFzIDxtaWd1ZWxAY2V0dWMucHVjLXJpby5icj4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlJlbW90ZVZpc2lvbiBNWCAoUlY2MDUpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMTYsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKKwkJLmdwaW9tYXNrMiAgICAgID0gMHgwN2ZmLAorCQkubXV4c2VsICAgICAgICAgPSB7IDB4MzMsIDB4MTMsIDB4MjMsIDB4NDMsIDB4ZjMsIDB4NzMsIDB4ZTMsIDB4MDMsCisJCQkJMHhkMywgMHhiMywgMHhjMywgMHg2MywgMHg5MywgMHg1MywgMHg4MywgMHhhMyB9LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubXV4c2VsX2hvb2sgICAgPSBydjYwNV9tdXhzZWwsCisJfSwKKwlbQlRUVl9CT0FSRF9QT1dFUkNMUl9NVFY4NzhdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUG93ZXJjb2xvciBNVFY4NzgvIE1UVjg3OFIvIE1UVjg3OEYiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAyLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSwgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCA0IH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwJCT0gUExMXzI4LAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4NGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1dJTkRWUl0gPSB7CisJCS8qIE1hc2FraSBTdXp1a2kgPG1hc2FraUBidHJlZS5vcmc+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJDYW5vcHVzIFdpbkRWUiBQQ0kgKENPTVBBUSBQcmVzYXJpbyAzNTI0SlAsIDUxMTJKUCkiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDE0MDAwNywKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMywgNCwgMCB9LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sgICAgID0gd2luZHZyX2F1ZGlvLAorCX0sCisJW0JUVFZfQk9BUkRfR1JBTkRURUNfTVVMVEldID0geworCQkubmFtZSAgICAgICAgICAgPSAiR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSBDYXJkIChCdDg3OCkiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfS1dPUkxEXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkpldHdheSBUVi9DYXB0dXJlIEpXLVRWODc4LUZCSywgS3dvcmxkIEtXLVRWODc4UkYiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAzLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSA3LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwgICAvKiBUdW5lciwgU1ZpZCwgU1ZIUywgU1ZpZCB0byBTVkhTIGNvbm5lY3RvciAqLworCQkuYXVkaW9tdXggICAgICAgPSB7IDAgLDAgLDQsIDQsNCw0fSwvKiBZZXMsIHRoaXMgdHVuZXIgdXNlcyB0aGUgc2FtZSBhdWRpbyBvdXRwdXQgZm9yIFRWIGFuZCBGTSByYWRpbyEKKwkJCQkJCSogVGhpcyBjYXJkIGxhY2tzIGV4dGVybmFsIEF1ZGlvIEluLCBzbyB3ZSBtdXRlIGl0IG9uIEV4dC4gJiBJbnQuCisJCQkJCQkqIFRoZSBQQ0IgY2FuIHRha2UgYSBzYngxNjM3L3NieDE2NzMsIHdpcmluZyB1bmtub3duLgorCQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgUENJIHN1YnN5c3RlbSBJRCwgc2lnaC4KKwkJCQkJCSogYXVkaW9tdXg9MTogbG93ZXIgdm9sdW1lLCAyKzM6IG11dGUKKwkJCQkJCSogYnR3aW5jYXAgdXNlcyAweDgwMDAwLzB4ODAwMDMKKwkJCQkJCSovCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gNSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkvKiBTYW1zdW5nIFRDUEE5MDk1UEMyN0EgKEJHK0RLKSwgcGhpbGlwcyBjb21wYXRpYmxlLCB3L0ZNLCBzdGVyZW8gYW5kCisJCXJhZGlvIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0b3JzIHdvcmsgZmluZS4gKi8KKwkJLmhhc19yYWRpbwk9IDEsCisJCS8qIEdQSU8gSW5mbzoKKwkJCUdQSU8wLDE6ICAgSEVGNDA1MiBBMCxBMQorCQkJR1BJTzI6ICAgICBIRUY0MDUyIG5FTkFCTEUKKwkJCUdQSU8zLTc6ICAgbi5jLgorCQkJR1BJTzgtMTM6ICBJUkRDMzU3IGRhdGEwLTUgKGRhdGE2IG4uYy4gPykgW2NoaXAgbm90IHByZXNlbnQgb24gbXkgY2FyZF0KKwkJCUdQSU8xNCwxNTogPz8KKwkJCUdQSU8xNi0yMTogbi5jLgorCQkJR1BJTzIyLDIzOiA/PworCQkJPz8gICAgICAgOiBtdHU4YjU2ZXAgbWljcm9jb250cm9sbGVyIGZvciBJUiAoR1BJTyB3aXJpbmcgdW5rbm93bikqLworCX0sCisJW0JUVFZfQk9BUkRfRFNQX1RDVklERU9dID0geworCQkvKiBBcnRodXIgVGV0emxhZmYtRGVhcywgRFNQIERlc2lnbiBMdGQgPHNvZnR3YXJlQGRzcGRlc2lnbi5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJEU1AgRGVzaWduIFRDVklERU8iLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisKKwkJLyogLS0tLSBjYXJkIDB4NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgUFZSIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCisJCS5ncGlvbWFzayAgICAgICA9IDcsCisJCS5hdWRpb211eCAgICAgICA9IHs3fSwKKwl9LAorCVtCVFRWX0JPQVJEX0dWQkNUVjVQQ0ldID0geworCQkubmFtZSAgICAgICAgICAgPSAiSU9EQVRBIEdWLUJDVFY1L1BDSSIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MGYwZjgwLAorCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMSwgMH0sCisJCS5hdWRpb211eCAgICAgICA9IHsweDAzMDAwMCwgMHgwMTAwMDAsIDAsIDAsIDB4MDIwMDAwLCAwfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vayAgICAgPSBndmJjdHY1cGNpX2F1ZGlvLAorCQkuaGFzX3JhZGlvICAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NzgpIiwgLyogMHgxKDJ8MyktNDVDNi1DMSAqLworCQkudmlkZW9faW5wdXRzICAgPSA0LCAgICAgICAgICAgICAgICAgIC8qIGlkLWlucHV0cy1jbG9jayAqLworCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMywKKwkJLm11eHNlbCAgICAgICAgID0geyAzLCAyLCAwLCAxIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTF4MF84NDhdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMC8xNTAgKDg0OCkiLCAvKiAweDA0LTU0QzAtQzEgJiBvbGRlciBib2FyZHMgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKworCQkvKiAtLS0tIGNhcmQgMHg1NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfT1NQUkVZMTAxXzg0OF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxICg4NDgpIiwgLyogMHgwNS00MEMwLUMxICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfT1NQUkVZMXgxXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIiwgICAgICAgLyogMHgxKDR8NSktMDAwNC1DNCAqLworCQkudmlkZW9faW5wdXRzICAgPSAxLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMCB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSB3LyBzdmlkIiwgIC8qIDB4KDE2fDE3fDIwKS0wMEM0LUMxICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfT1NQUkVZMnh4XSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjAxLzI1MC8yNTEiLCAgLyogMHgxKDh8OXxFfEYpLTAwMDQtQzQgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKworCQkvKiAtLS0tIGNhcmQgMHg1OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfT1NQUkVZMngwX1NWSURdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMC8yNTAiLCAgIC8qIDB4MShBfEIpLTAwQzQtQzEgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTJ4MF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjEwLzIyMCIsICAgLyogMHgxKEF8QiktMDRDMC1DMSAqLworCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfT1NQUkVZNTAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1MDAiLCAgIC8qIDUwMCAqLworCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTU0MF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTQwIiwgICAvKiA1NDAgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJI2lmIDAgLyogVE9ETyAuLi4gKi8KKwkJLnN2aHMgICAgICAgICAgID0gT1NQUkVZNTQwX1NWSURfQU5BTE9HLAorCQkubXV4c2VsICAgICAgICAgPSB7ICAgICAgIFtPU1BSRVk1NDBfQ09NUF9BTkFMT0ddID0gMiwKKwkJCQkJW09TUFJFWTU0MF9TVklEX0FOQUxPR10gPSAzLCB9LAorCSNlbmRpZgorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJI2lmIDAgLyogVE9ETyAuLi4gKi8KKwkJLm11eHNlbF9ob29rICAgID0gb3NwcmV5XzU0MF9tdXhzZWwsCisJCS5waWN0dXJlX2hvb2sgICA9IG9zcHJleV81NDBfc2V0X3BpY3R1cmUsCisJI2VuZGlmCisJfSwKKworCQkvKiAtLS0tIGNhcmQgMHg1QyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfT1NQUkVZMjAwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwMCIsICAvKiAyMDAwICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsICAgICAgLyogbXVzdCBhdm9pZCwgY29uZmxpY3RzIHdpdGggdGhlIGJ0ODYwICovCisJfSwKKwlbQlRUVl9CT0FSRF9JRFNfRUFHTEVdID0geworCQkvKiBNIEcgQmVyYmVyaWNoIDxiZXJiZXJpY0Bmb3J3aXNzLnVuaS1wYXNzYXUuZGU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJJRFMgRWFnbGUiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAorCQkubXV4c2VsX2hvb2sgICAgPSBlYWdsZV9tdXhzZWwsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCVtCVFRWX0JPQVJEX1BJTk5BQ0xFU0FUXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU2F0IiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMCwgMSwgMn0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwkJLmhhc19kdmIgICAgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX0ZPUk1BQ19QUk9UVl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDMsCisJCS5ncGlvbWFzayAgICAgICA9IDIsCisJCS8qIFRWLCBDb21wMSwgQ29tcG9zaXRlIG92ZXIgU1ZJRCBjb24sIFNWSUQgKi8KKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAyLCAwLCAwLCAwIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkvKiBzb3VuZCByb3V0aW5nOgorCQlHUElPPTB4MDAsMHgwMSwweDAzOiBtdXRlICg/KQorCQkweDAyOiBib3RoIFRWIGFuZCByYWRpbyAodHVuZXI6IEZNMTIxNi9JKQorCQlUaGUgY2FyZCBoYXMgb25ib2FyZCBhdWRpbyBjb25uZWN0b3JzIGxhYmVsZWQgImNkcm9tIiBhbmQgImJvYXJkIiwKKwkJbm90IHNvbGRlcmVkIGhlcmUsIHRob3VnaCB1bmtub3duIHdpcmluZy4KKwkJQ2FyZCBsYWNrczogZXh0ZXJuYWwgYXVkaW8gaW4sIHBjaSBzdWJzeXN0ZW0gaWQuCiAJKi8KLX0sewotCS5uYW1lICAgICAgICAgICA9ICJFYWdsZSBXaXJlbGVzcyBDYXByaWNvcm4yIChidDg3OEEpIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDcsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDR9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSAvKiBUVU5FUl9BTFBTX1RNREgyX05UU0MgKi8sCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJfSwKIAotLyogLS0tLSBjYXJkIDB4MzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIERhdmlkIEjkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTdHVkaW8gUHJvIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAzLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDEsIDB4ZDAwMDEsIDAsIDAsIDEwfSwKLQkJCS8qIHNvdW5kIHBhdGggKDUgc291cmNlcyk6Ci0JCQlNVVgxIChtYXNrIDB4MDMpLCBFbmFibGUgUGluIDB4MDggKDA9ZW5hYmxlLCAxPWRpc2FibGUpCi0JCQkJMD0gZXh0LiBBdWRpbyBJTgotCQkJCTE9IGZyb20gTVVYMgotCQkJCTI9IE1vbm8gVFYgc291bmQgZnJvbSBUdW5lcgotCQkJCTM9IG5vdCBjb25uZWN0ZWQKLQkJCU1VWDIgKG1hc2sgMHgzMDAwMCk6Ci0JCQkJMCwyLDM9IGZyb20gTVNQMzR4eAotCQkJCTE9IEZNIHN0ZXJlbyBSYWRpbyBmcm9tIFR1bmVyICovCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogQ2xhYXMgTGFuZ2JlaG4gPGNsYWFzQGJpZ2Zvb3QuY29tPiwKLQlTdmVuIEdyb3Roa2xhZ3MgPHN2ZW5AdXBiLmRlPiAqLwotCS5uYW1lCQk9ICJUeXBob29uIFRWaWV3IFJEUyArIEZNIFN0ZXJlbyAvIEtOQzEgVFYgU3RhdGlvbiBSRFMiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAzLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgxYywKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAwLCAweDEwLCA4LCA0IH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmFkaW8JPSAxLAotfSx7Ci0JLyogVGltIFL2c3Rlcm11bmR0IDxyb3N0ZXJtQHVuaS1tdWVuc3Rlci5kZT4KLQlpbiBkZS5jb21wLm9zLnVuaXgubGludXguaGFyZHdhcmU6Ci0JCW9wdGlvbnMgYnR0diBjYXJkPTAgcGxsPTEgcmFkaW89MSBncGlvbWFzaz0weDE4ZTAKLQkJYXVkaW9tdXg9MHg0NGM3MWYsMHg0NGQ3MWYsMCwweDQ0ZDcxZiwweDQ0ZGZmZgotCQlvcHRpb25zIHR1bmVyIHR5cGU9NSAqLwotCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwIC9GbHlWaWRlbyBBMi8gTGlmZXRlYyBMVCA5NDE1IFRWIFtMUjkwXSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDE4ZTAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwLDB4MThlMCB9LAotCQkvKiBGb3IgY2FyZHMgd2l0aCB0ZGE5ODIwL3RkYTk4MjE6Ci0JCQkweDAwMDA6IFR1bmVyIG5vcm1hbCBzdGVyZW8KLQkJCTB4MDA4MDogVHVuZXIgQTIgU0FQIChzZWNvbmQgYXVkaW8gcHJvZ3JhbSA9IFp3ZWlrYW5hbHRvbikKLQkJCTB4MDg4MDogVHVuZXIgQTIgc3RlcmVvICovCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBNaWd1ZWwgQW5nZWwgQWx2YXJleiA8bWFhY3J1ekBuYXZlZ2FsaWEuY29tPgotCW9sZCBFYXN5IFRWIEJUODQ4IHZlcnNpb24gKG1vZGVsIENQSDAzMSkgKi8KLQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4RiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMCwgMTB9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJCS8qIC0tLS0gY2FyZCAweDYwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9NQUNIVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTWFjaFRWIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDcsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMywgNH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IDUsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCisJW0JUVFZfQk9BUkRfRVVSRVNZU19QSUNPTE9dID0geworCQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8iLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfUFYxNTBdID0geworCQkvKiBMdWMgVmFuIEhvZXlsYW5kdCA8bHVjQGUtbWFnaWMuYmU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE1MCIsIC8qIDB4NGYgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0FEX1RWSzUwM10gPSB7CisJCS8qIEhpcm9zaGkgVGFrZWthd2EgPHNpYW5AYmlnLm9yLmpwPiAqLworCQkvKiBUaGlzIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElEICovCisJCS5uYW1lICAgICAgICAgICA9ICJBRC1UVks1MDMiLCAvKiAweDYzICovCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxZTgwMDcsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkvKiAgICAgICAgICAgICAgICAgIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBvZmYsICBvbiAqLworCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDgsICAweDBmLCAgMHgwYSwgICAgIDB4MDgsICAgICAweDBmLCAweDA4IH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMiwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vawk9IGFkdHZrNTAzX2F1ZGlvLAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDM4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBHb3Jkb24gSGV5ZG9uIDxnamhleWRvbkBiaWdmb290LmNvbSAoJzk4KSAqLwotCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMywKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgxODAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSA1LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIFRoaXMgaXMgdGhlIHVsdGltYXRlIGNoZWFwbyBjYXB0dXJlIGNhcmQKLQkqIGp1c3QgYSBCVDg0OEEgb24gYSBzbWFsbCBQQ0IhCi0JKiBTdGV2ZSBIb3Nnb29kIDxzdGV2ZUBlcXVpaW5ldC5jb20+ICovCi0JLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjICdHcmFuZCBWaWRlbyBDYXB0dXJlJyAoQnQ4NDgpIiwKLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogRGFuaWVsIEhlcnJpbmd0b24gPGRhbmllbC5oZXJyaW5ndG9uQGhvbWUuY29tPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4ZTAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHg4MDAsIDB4NDAwIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAzNkZZNV9OVFNDLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIE1hdHRpIE1vdHR1cyA8bW90dHVzQHBoeXNpYy51dC5lZT4gKi8KLQkubmFtZQkJPSAiQXNrZXkgQ1BIMDN4IFRWIENhcHR1cmVyIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDIsMCwwLDAsMSB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IDAsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJCS8qIC0tLS0gY2FyZCAweDY0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9IRVJDVUxFU19TTV9UVl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJIZXJjdWxlcyBTbWFydCBUViBTdGVyZW8iLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSA1LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS8qIE5vdGVzOgorCQktIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElECisJCS0gc3RlcmVvIHZhcmlhbnQgdy8gZGF1Z2h0ZXIgYm9hcmQgd2l0aCB0ZGE5ODc0YSBAMHhiMAorCQktIEF1ZGlvIFJvdXRpbmc6CisJCQlhbHdheXMgZnJvbSB0ZGE5ODc0IGluZGVwZW5kZW50IG9mIEdQSU8gKD8pCisJCQlleHRlcm5hbCBsaW5lIGluOiB1bmtub3duCisJCS0gT3RoZXIgY2hpcHM6IGVtNzhwMTU2ZWxwIEAgMHg5NiAocHJvYmFibHkgSVIgcmVtb3RlIGNvbnRyb2wpCisJCQloZWY0MDUzIChpbnN0ZWFkIDQwNTIpIGZvciB1bmtub3duIGZ1bmN0aW9uCisJCSovCisJfSwKKwlbQlRUVl9CT0FSRF9QQUNFVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUGFjZSBUViAmIFJhZGlvIENhcmQiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LCAvKiBUdW5lciwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IDEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkvKiBCdDg3OCwgQnQ4MzIsIEZJMTI0NiB0dW5lcjsgbm8gcGNpIHN1YnN5c3RlbSBpZAorCQlvbmx5IGludGVybmFsIGxpbmUgb3V0OiAoNHBpbiBoZWFkZXIpIFJHR0wKKwkJUmFkaW8gbXVzdCBiZSBkZWNvZGVkIGJ5IG1zcDM0MTBkIChub3Qgcm91dGVkIHRocm91Z2gpKi8KKwkJLyoKKwkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwgIHRvZG8hCisJCSovCisJfSwKKwlbQlRUVl9CT0FSRF9JVkMyMDBdID0geworCQkvKiBDaHJpcyBXaWxsaW5nIDxjaHJpc0B2aXNsYWIudXN5ZC5lZHUuYXU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMjAwIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCisJW0JUVFZfQk9BUkRfWEdVQVJEXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kiLAorCQkudmlkZW9faW5wdXRzICAgPSAxNiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkudHVuZXJfdHlwZSAgICAgPSA0LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ncGlvbWFzazIgICAgICA9IDB4ZmYsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCB9LAorCQkubXV4c2VsX2hvb2sgICAgPSB4Z3VhcmRfbXV4c2VsLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4M2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiTW9kdWxhciBUZWNobm9sb2d5IE1NMTAwUENUViIsCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAyLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDExLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAxLCA4fSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIEFkcmlhbiBDb3ggPGFkcmlhbkBodW1ib2xkdC5jby51ayAqLwotCS5uYW1lCSAgICAgICAgPSAiQUcgRWxlY3Ryb25pY3MgR01WMSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lcgkgICAgICAgID0gLTEsCi0JLnN2aHMJICAgICAgICA9IDEsCi0JLmdwaW9tYXNrICAgICAgID0gMHhGLAotCS5tdXhzZWwJICAgICAgICA9IHsgMiwgMn0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyB9LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkucGxsCSAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KLQluZXcgRWFzeSBUViBCVDg3OCB2ZXJzaW9uIChtb2RlbCBDUEgwNjEpCi0Jc3BlY2lhbCB0aGFua3MgdG8gSW5mb3JtYXRpY2EgTWllcmVzIGZvciBwcm92aWRpbmcgdGhlIGNhcmQgKi8KLQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYxLyBCRVNUQlVZIEVhc3kgVFYgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMiwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHhGRiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMSwgMCwgNCwgNCwgOX0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIEx1a2FzIEdlYmF1ZXIgPGdlYnlAdm9sbnkuY3o+ICovCi0JLm5hbWUJCT0gIkFUSSBUVi1Xb25kZXIiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhmMDNmLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCi0JLmF1ZGlvbXV4CT0geyAweGJmZmUsIDAsIDB4YmZmZiwgMCwgMHhiZmZlfSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCQkvKiAtLS0tIGNhcmQgMHg2OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9QVjE0M10gPSB7CisJCS8qIEpvcmdlIEJvbmNvbXB0ZSAtIERUSTIgPGpvcmdlQGR0aTIubmV0PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNDMiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfVkQwMDlYMV9NSU5JRElOXSA9IHsKKwkJLyogTS5LbGFockBwaHl0ZWMuZGUgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgTWluaURJTiAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS5zdmhzICAgICAgICAgICA9IDMsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLworCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9WRDAwOVgxX0NPTUJJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgQ29tYmkgKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkuc3ZocyAgICAgICAgICAgPSAzLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDQwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwotCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIFZFIiwKLQkudmlkZW9faW5wdXRzCT0gMiwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAtMSwKLQkuZ3Bpb21hc2sJPSAxLAotCS5tdXhzZWwJCT0geyAyLCAzLCAwLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDAsIDEsIDAsIDB9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIERlZUpheSA8ZGVlamF5QHdlc3RlbDkwMC5uZXQgKDIwMDBTKSAqLwotCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwUyBMUjkwIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzawk9IDB4MThlMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMX0sCi0JCQkvKiBSYWRpbyBjaGFuZ2VkIGZyb20gMWU4MCB0byAweDgwMCB0byBtYWtlCi0JCQlGbHlWaWRlbzIwMDBTIGluIC5odSBoYXBweSAoZ20pKi8KLQkJCS8qIC1kay0/Pz86IHNldCBtdXRlPTB4MTgwMCBmb3IgdGRhOTg3NGggZGF1Z2h0ZXJib2FyZCAqLwotCS5hdWRpb211eAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwLDB4MTgwMCwgMHgxMDgwIH0sCi0JLmF1ZGlvX2hvb2sJPSBmdjIwMDBzX2F1ZGlvLAotCS5ub19tc3AzNHh4CT0gMSwKLQkubm9fdGRhOTg3NQk9IDEsCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gNSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiVGVycmF0ZWMgVFZhbHVlUmFkaW8iLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhmZmZmMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMHg1MDAsIDB4NTAwLCAweDMwMCwgMHg5MDAsIDB4OTAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yYWRpbwk9IDEsCi19LHsKLQkvKiBUQU5BS0EgS2VpIDxwZWcwMDYyNUBuaWZ0eS5jb20+ICovCi0JLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNC9QQ0kiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMTBmMDAsCi0JLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHsweDEwMDAwLCAwLCAweDEwMDAwLCAwLCAwLCAwfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9TSEFSUF8yVTVKRjU1NDBfTlRTQywKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sgICAgID0gZ3ZiY3R2M3BjaV9hdWRpbywKLX0seworCQkvKiAtLS0tIGNhcmQgMHg2YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfVkQwMDlfTUlOSURJTl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IE1pbmlESU4gKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMgICA9IDEwLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLnN2aHMgICAgICAgICAgID0gOSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKKwkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KKwkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgorCQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLworCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDAgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1ZEMDA5X0NPTUJJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDkgQ29tYmkgKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMgICA9IDEwLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLnN2aHMgICAgICAgICAgID0gOSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKKwkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KKwkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgorCQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLworCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDEgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0lWQzEwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTAwIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCisJW0JUVFZfQk9BUkRfSVZDMTIwXSA9IHsKKwkJLyogSVZDLTEyMEcgLSBBbGFuIEdhcmZpZWxkIDxhbGFuQGZyb21vcmJpdC5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTIwRyIsCisJCS52aWRlb19pbnB1dHMgICA9IDE2LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLCAgICAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLworCQkudHVuZXIgICAgICAgICAgPSAtMSwgICAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKKwkJCQkweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwIH0sCisJCS5tdXhzZWxfaG9vayAgICA9IGl2YzEyMF9tdXhzZWwsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHg0NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIjNEZnggVm9vZG9vVFYgRk0gKEV1cm8pLCBWb29kb29UViAyMDAgKFVTQSkiLAotCS8qIHRyeSAiaW5zbW9kIG1zcDM0MDAgc2ltcGxlPTAiIGlmIHlvdSBoYXZlCi0JKiBzb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY2FyZC4gKi8KLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDRmOGEwMCwKLQkvKiAweDEwMDAwMDogMT1NU1AgZW5hYmxlZCAoMD1kaXNhYmxlIGFnYWluKQotCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCi0JLmF1ZGlvbXV4ICAgICAgID0gezB4OTQ3ZmZmLCAweDk4N2ZmZiwweDk0N2ZmZiwweDk0N2ZmZiwgMHg5NDdmZmZ9LAotCS8qIHR2dHVuZXIsIHJhZGlvLCAgIGV4dGVybmFsLGludGVybmFsLCBtdXRlLCAgc3RlcmVvCi0JKiB0dW5lciwgQ29tcG9zaXQsIFNWaWQsIENvbXBvc2l0LW9uLVN2aWQtYWRhcHRlciAqLwotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyAsMCAsMX0sCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTVQyMDMyLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsCQk9IFBMTF8yOCwKLQkuaGFzX3JhZGlvCT0gMSwKLX0sewotCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGJAbmV4dXMuY28udWs+ICovCi0JLm5hbWUgICAgICAgICAgID0gIkFjdGl2ZSBJbWFnaW5nIEFJTU1TIiwKLQkudmlkZW9faW5wdXRzICAgPSAxLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKLQkuZ3Bpb21hc2sgICAgICAgPSAwCi19LHsKLQkvKiBUb21hc3ogUHlyYSA8aGVsbGZpcmVAc2VkZXouaXEucGw+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi40Qyw4RSkiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gNCwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMTUsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDExLCA3LCAxMywgMH0sIC8qIFRWIGFuZCBSYWRpbyB3aXRoIHNhbWUgR1BJTyAhICovCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gMjUsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmVtb3RlICAgICA9IDEsCi0JLyogR1BJTyB3aXJpbmc6Ci0JCUdQSU8wOiBVNC5BMCAoaGVmNDA1MmJ0KQotCQlHUElPMTogVTQuQTEKLQkJR1BJTzI6IFU0LkExIChzZWNvbmQgaGVmNDA1MmJ0KQotCQlHUElPMzogVTQubkVOLCBVNS5BMCwgQTUubkVOCi0JCUdQSU84LTE1OiB2cmQ4NjZiID8KLQkqLwotfSx7Ci0JLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4RVogKGNhcHR1cmUgb25seSkgTFI1MSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIJCT0gLTEsCi0JLnN2aHMJCT0gMiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sIC8qIEFWMSwgQVYyLCBTVkhTLCBDVmlkIGFkYXB0ZXIgb24gU1ZIUyAqLwotCS5wbGwJCT0gUExMXzI4LAotCS5ub19tc3AzNHh4CT0gMSwKLQkudHVuZXJfdHlwZQk9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCQkvKiAtLS0tIGNhcmQgMHg3MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfUENfSERUVl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJwY0hEVFYgSEQtMjAwMCBUViIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfQVRTQywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX2R2YiAgICAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfVFdJTkhBTl9EU1RdID0geworCQkubmFtZSAgICAgICAgICAgPSAiVHdpbmhhbiBEU1QgKyBjbG9uZXMiLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX3ZpZGVvICAgICAgID0gMSwKKwkJLmhhc19kdmIgICAgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1dJTkZBU1RWQzEwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJXaW5mYXN0IFZDMTAwIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSwgMSwgM30sIC8qIFZpZCBJbiwgU1ZpZCBJbiwgVmlkIG92ZXIgU1ZpZCBpbiBjb25uZWN0b3IgKi8KKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCVtCVFRWX0JPQVJEX1RFVjU2MF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAzLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDEsIDEsIDEsIDB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4NDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIERhcml1c3ogS293YWxld3NraSA8ZGFyZWtrQGF1dG9tZXgucGw+ICovCi0JLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCs5QiAoUGxheVRWIFBybyByZXYuOUIgRk0rTklDQU0pIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4M2YsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkuYXVkaW9tdXgJPSB7IDB4MDEsIDB4MDAsIDB4MDMsIDB4MDMsIDB4MDksIDB4MDIgfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS5ub19tc3AzNHh4CT0gMSwKLQkubm9fdGRhOTg3NQk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSA1LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vawk9IHB2YnQ4NzhwOWJfYXVkaW8sIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSBzdGVyZW8gKi8KLQkuaGFzX3JhZGlvCT0gMSwgIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSByYWRpbyAqLwotCS5oYXNfcmVtb3RlICAgICA9IDEsCi0JLyogR1BJTyB3aXJpbmc6Ci0JCUdQSU8wOiBBMCBoZWY0MDUyCi0JCUdQSU8xOiBBMSBoZWY0MDUyCi0JCUdQSU8zOiBuRU4gaGVmNDA1MgotCQlHUElPOC0xNTogdnJkODY2YgotCQlHUElPMjAsMjIsMjM6IFIzMCxSMjksUjI4Ci0JKi8KLX0sewotCS8qIENsYXkgS3VueiA8Y2t1bnpAbWFpbC5hcmMubmFzYS5nb3Y+ICovCi0JLyogeW91IG11c3QganVtcGVyIEpQNSBmb3IgdGhlIGNhcmQgdG8gd29yayAqLwotCS5uYW1lICAgICAgICAgICA9ICJTZW5zb3JheSAzMTEiLAotCS52aWRlb19pbnB1dHMgICA9IDUsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSA0LAotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIE1pZ3VlbCBGcmVpdGFzIDxtaWd1ZWxAY2V0dWMucHVjLXJpby5icj4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiUmVtb3RlVmlzaW9uIE1YIChSVjYwNSkiLAotCS52aWRlb19pbnB1dHMgICA9IDE2LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkuZ3Bpb21hc2syICAgICAgPSAweDA3ZmYsCi0JLm11eHNlbCAgICAgICAgID0geyAweDMzLCAweDEzLCAweDIzLCAweDQzLCAweGYzLCAweDczLCAweGUzLCAweDAzLAotCQkJMHhkMywgMHhiMywgMHhjMywgMHg2MywgMHg5MywgMHg1MywgMHg4MywgMHhhMyB9LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm11eHNlbF9ob29rICAgID0gcnY2MDVfbXV4c2VsLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlBvd2VyY29sb3IgTVRWODc4LyBNVFY4NzhSLyBNVFY4NzhGIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDIsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDFDODAwRiwgIC8qIEJpdDAtMjogQXVkaW8gc2VsZWN0LCA4LTEyOnJlbW90ZSBjb250cm9sIDE0OnJlbW90ZSB2YWxpZCAxNTpyZW1vdGUgcmVzZXQgKi8KLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEsIH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCA0IH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnBsbAkJPSBQTExfMjgsCi0JLmhhc19yYWRpbwk9IDEsCi19LHsKKwkJLyogLS0tLSBjYXJkIDB4NzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1NJTVVTX0dWQzExMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiU0lNVVMgR1ZDMTEwMCIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDJ9LAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDNGLAorCQkubXV4c2VsX2hvb2sgICAgPSBndmMxMTAwX211eHNlbCwKKwl9LAorCVtCVFRWX0JPQVJEX05HU1RWX1BMVVNdID0geworCQkvKiBDYXJsb3MgU2lsdmEgcjNwZWtAcjNwZWsuaG9tZWxpbnV4Lm9yZyB8fCBjYXJkIDB4NzUgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIk5HUyBOR1NUVisiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKKwkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7MCwgMCwgMCwgMCwgMHgwMDAwMDMsIDB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9MTUxCVDRdID0geworCQkvKiBodHRwOi8vbGludXhtZWRpYWxhYnMuY29tICovCisJCS5uYW1lICAgICAgICAgICA9ICJMTUxCVDQiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LCAvKiBJTjEsSU4yLElOMyxJTjQgKi8KKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1RFS1JBTV9NMjA1XSA9IHsKKwkJLyogSGVsbXJvb3MgSGFycmkgPGhhcnJpLmhlbG1yb29zQHBwLmluZXQuZmk+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJUZWtyYW0gTTIwNSBQUk8iLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDY4LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDB4NjgsIDB4NjgsIDB4NjEsIDB4NjEsIDB4MDAgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBNYXNha2kgU3V6dWtpIDxtYXNha2lAYnRyZWUub3JnPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJDYW5vcHVzIFdpbkRWUiBQQ0kgKENPTVBBUSBQcmVzYXJpbyAzNTI0SlAsIDUxMTJKUCkiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgxNDAwMDcsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0LCAwIH0sCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vayAgICAgPSB3aW5kdnJfYXVkaW8sCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSBDYXJkIChCdDg3OCkiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIkpldHdheSBUVi9DYXB0dXJlIEpXLVRWODc4LUZCSywgS3dvcmxkIEtXLVRWODc4UkYiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMywKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gNywKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwgICAvKiBUdW5lciwgU1ZpZCwgU1ZIUywgU1ZpZCB0byBTVkhTIGNvbm5lY3RvciAqLwotCS5hdWRpb211eCAgICAgICA9IHsgMCAsMCAsNCwgNCw0LDR9LC8qIFllcywgdGhpcyB0dW5lciB1c2VzIHRoZSBzYW1lIGF1ZGlvIG91dHB1dCBmb3IgVFYgYW5kIEZNIHJhZGlvIQotCQkJCQkqIFRoaXMgY2FyZCBsYWNrcyBleHRlcm5hbCBBdWRpbyBJbiwgc28gd2UgbXV0ZSBpdCBvbiBFeHQuICYgSW50LgotCQkJCQkqIFRoZSBQQ0IgY2FuIHRha2UgYSBzYngxNjM3L3NieDE2NzMsIHdpcmluZyB1bmtub3duLgotCQkJCQkqIFRoaXMgY2FyZCBsYWNrcyBQQ0kgc3Vic3lzdGVtIElELCBzaWdoLgotCQkJCQkqIGF1ZGlvbXV4PTE6IGxvd2VyIHZvbHVtZSwgMiszOiBtdXRlCi0JCQkJCSogYnR3aW5jYXAgdXNlcyAweDgwMDAwLzB4ODAwMDMKLQkJCQkJKi8KLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IDUsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS8qIFNhbXN1bmcgVENQQTkwOTVQQzI3QSAoQkcrREspLCBwaGlsaXBzIGNvbXBhdGlibGUsIHcvRk0sIHN0ZXJlbyBhbmQKLQlyYWRpbyBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9ycyB3b3JrIGZpbmUuICovCi0JLmhhc19yYWRpbwk9IDEsCi0JLyogR1BJTyBJbmZvOgotCQlHUElPMCwxOiAgIEhFRjQwNTIgQTAsQTEKLQkJR1BJTzI6ICAgICBIRUY0MDUyIG5FTkFCTEUKLQkJR1BJTzMtNzogICBuLmMuCi0JCUdQSU84LTEzOiAgSVJEQzM1NyBkYXRhMC01IChkYXRhNiBuLmMuID8pIFtjaGlwIG5vdCBwcmVzZW50IG9uIG15IGNhcmRdCi0JCUdQSU8xNCwxNTogPz8KLQkJR1BJTzE2LTIxOiBuLmMuCi0JCUdQSU8yMiwyMzogPz8KLQkJPz8gICAgICAgOiBtdHU4YjU2ZXAgbWljcm9jb250cm9sbGVyIGZvciBJUiAoR1BJTyB3aXJpbmcgdW5rbm93bikqLwotfSx7Ci0JLyogQXJ0aHVyIFRldHpsYWZmLURlYXMsIERTUCBEZXNpZ24gTHRkIDxzb2Z0d2FyZUBkc3BkZXNpZ24uY29tPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJEU1AgRGVzaWduIFRDVklERU8iLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJCS8qIC0tLS0gY2FyZCAweDc4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9DT05UVkZNSV0gPSB7CisJCS8qIEphdmllciBDZW5kYW4gQXJlcyA8amNlbmRhbkBseWNvcy5lcz4gKi8KKwkJLyogYnQ4NzggVFYgKyBGTSB3aXRob3V0IHN1YnN5c3RlbSBJRCAqLworCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENPTlRWRk1pIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDIsIDMgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCQkuaGFzX3JhZGlvICAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVBdID0geworCQkvKkVyaWMgREVCSUVGIDxkZWJpZWZAdGVsZW1zYS5jb20+Ki8KKwkJLypFVVJFU1lTIFBpY29sbyBUZXRyYSA6IDQgQ29uZXhhbnQgRnVzaW9uIDg3OEEsIG5vIGF1ZGlvLCB2aWRlbyBpbnB1dCBzZXQgd2l0aCBhbmFsb2cgbXVsdGlwbGV4ZXJzIEdQSU8gY29udHJvbGVkKi8KKwkJLyogYWRkcyBwaWNvbG9fdGV0cmFfbXV4c2VsKCksIHBpY29sb190ZXRyYV9pbml0KCksIHRoZSBmb2xvd2luZyBkZWNsYXJhdGlvbiBzdHJ1Y3VyZSwgYW5kICNkZWZpbmUgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCovCisJCS8qMHg3OSBpbiBidHR2LmgqLworCQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8gVGV0cmEiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5ncGlvbWFzazIgICAgICA9IDB4M0M8PDE2LC8qU2V0IHRoZSBHUElPWzE4XS0+R1BJT1syMV0gYXMgb3V0cHV0IHBpbi49PT4gZHJpdmUgdGhlIHZpZGVvIGlucHV0cyB0aHJvdWdoIGFuYWxvZyBtdWx0aXBsZXhlcnMqLworCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7MiwyLDIsMn0sLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLm11eHNlbF9ob29rICAgID0gcGljb2xvX3RldHJhX211eHNlbCwvKlJlcXVpcmVkIGFzIGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBjbGFzc2ljIGlucHV0IHNlbGVjdGlvbiBwb2xpY3kqLworCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfU1BJUklUX1RWXSA9IHsKKwkJLyogU3Bpcml0IFRWIFR1bmVyIGZyb20gaHR0cDovL3NwaXJpdG1vZGVtcy5jb20uYXUgKi8KKwkJLyogU3RhZmZvcmQgR29vZHNlbGwgPHN1cmdlQGdvbGlhdGguaG9tZXVuaXgub3JnPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiU3Bpcml0IFRWIFR1bmVyIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDAwMDAwZiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfQVZEVkJUXzc3MV0gPSB7CisJCS8qIFdvbGZyYW0gSm9vc3QgPHdvam9AZnJva2FzY2h3ZWkuZGU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIDc3MSIsCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm11eHNlbCAgICAgICAgID0geyAzICwgMyB9LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4N2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0FWRFZCVF83NjFdID0geworCQkvKiBNYXR0IEplc3NvbiA8ZHZiQGplc3Nvbi5lY2xpcHNlLmNvLnVrPiAqLworCQkvKiBCYXNlZCBvbiB0aGUgTmVidWxhIGNhcmQgZGF0YSAtIGFkZGVkIHJlbW90ZSBhbmQgbmV3IGNhcmQgbnVtYmVyIC0gQlRUVl9CT0FSRF9BVkRWQlRfNzYxLCBzZWUgYWxzbyBpci1rYmQtZ3Bpby5jICovCisJCS5uYW1lICAgICAgICAgICA9ICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIsCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDIsIDB9LCAvKiBDb21wMCwgUy1WaWRlbywgPywgPyAqLworCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU1FdID0geworCQkvKiBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUgKi8KKwkJLm5hbWUgICAgICAgICAgICAgPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TUSIsCisJCS52aWRlb19pbnB1dHMgICAgID0gMTYsCisJCS5hdWRpb19pbnB1dHMgICAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgICAgPSAweDAsCisJCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorCQkJCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKKwkJLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNRX211eHNlbCwKKwkJLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKKwkJLm5vX21zcDM0eHggICAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU0xDXSA9IHsKKwkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCisJCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU0xDIiwKKwkJLnZpZGVvX2lucHV0cyAgICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCisJCS50dW5lciAgICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAorCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAorCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU0xDX211eHNlbCwKKwkJLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKKwkJLm5vX21zcDM0eHggICAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwkJLyogQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QICovCisJW0JUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUF0gPSB7CisJCS8qIEF0dGlsYSBLb25kb3JvcyA8YXR0aWxhLmtvbmRvcm9zQGNoZWxsby5odT4gKi8KKwkJLyogYnQ4NzggVFYgKyBGTSAweDAwMDAwMDAwIHN1YnN5c3RlbSBJRCAqLworCQkubmFtZSAgICAgICAgICAgPSAiQVBBQyBWaWV3Y29tcCA4NzgoQU1BWCkiLAorCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHhGRiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAwLCAxMH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUgICAgID0gMSwgICAvKiBtaW5pcmVtb3RlIHdvcmtzLCBzZWUgaXIta2JkLWdwaW8uYyAqLworCQkuaGFzX3JhZGlvICAgICAgPSAxLCAgIC8qIG5vdCBldmVyeSBjYXJkIGhhcyByYWRpbyAqLworCX0sCiAKLQkvKiAtLS0tIGNhcmQgMHg1MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBQVlIiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS8qIC0tLS0gY2FyZCAweDgwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEVdID0geworCQkvKiBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlIiwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLm5vX3ZpZGVvICAgICAgID0gMSwKKwkJLmhhc19kdmIgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1ZHRUFSX01ZVkNEXSA9IHsKKwkJLyogU3RldmVuIDxwaG90b24zOEBwY2hvbWUuY29tLnR3PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiVi1HZWFyIE15VkNEIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKKwkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7MHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMX0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yYWRpbyAgICAgID0gMCwKKwkjaWYgMAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCSNlbmRpZgorCX0sCisJW0JUVFZfQk9BUkRfU1VQRVJfVFZdID0geworCQkvKiBSaWNrIEMgPGNyeXB0ZHJhZ29vbkBnbWFpbC5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJTdXBlciBUViBUdW5lciIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAweDAwMDAwMSwwLDAsIDB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkuaGFzX3JhZGlvICAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfVElCRVRfQ1MxNl0gPSB7CisJCS8qIENocmlzIEZhbm5pbmcgPHZpZGVvNGxpbnV4QGhheWRvbi5uZXQ+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJUaWJldCBTeXN0ZW1zICdQcm9ncmVzcyBEVlInIENTMTYiLAorCQkudmlkZW9faW5wdXRzICAgPSAxNiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIgfSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyCT0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm11eHNlbF9ob29rICAgID0gdGliZXRDUzE2X211eHNlbCwKKwl9LAorCVtCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJdID0geworCQkvKiBCaWxsIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4gKi8KKwkJLyoKKwkJKiBOb3RlIHRoYXQsIGJlY2F1c2Ugb2YgdGhlIGNhcmQncyB3aXJpbmcsIHRoZSAibWFzdGVyIgorCQkqIEJUODc4QSBjaGlwIChpLmUuIHRoZSBvbmUgd2hpY2ggY29udHJvbHMgdGhlIGFuYWxvZyBzd2l0Y2gKKwkJKiBhbmQgbXVzdCB1c2UgdGhpcyBjYXJkIHR5cGUpIGlzIHRoZSAybmQgb25lIGRldGVjdGVkLiAgVGhlCisJCSogb3RoZXIgMyBjaGlwcyBzaG91bGQgdXNlIGNhcmQgdHlwZSAweDg1LCB3aG9zZSBkZXNjcmlwdGlvbgorCQkqIGZvbGxvd3MgdGhpcyBvbmUuICBUaGVyZSBpcyBhIEVFUFJPTSBvbiB0aGUgY2FyZCAod2hpY2ggaXMKKwkJKiBjb25uZWN0ZWQgdG8gdGhlIEkyQyBvZiBvbmUgb2YgdGhvc2Ugb3RoZXIgY2hpcHMpLCBidXQgaXMKKwkJKiBub3QgY3VycmVudGx5IGhhbmRsZWQuICBUaGVyZSBpcyBhbHNvIGEgZmFjaWxpdHkgZm9yIGEKKwkJKiAibW9uaXRvciIsIHdoaWNoIGlzIGFsc28gbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKwkJKi8KKwkJLm5hbWUgICAgICAgICAgID0gIktvZGljb20gNDQwMFIgKG1hc3RlcikiLAorCQkudmlkZW9faW5wdXRzCT0gMTYsCisJCS5hdWRpb19pbnB1dHMJPSAwLAorCQkudHVuZXIJCT0gLTEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnN2aHMJCT0gLTEsCisJCS8qIEdQSU8gYml0cyAwLTkgdXNlZCBmb3IgYW5hbG9nIHN3aXRjaDoKKwkJKiAgIDAwIC0gMDM6CWNhbWVyYSBzZWxlY3RvcgorCQkqICAgMDQgLSAwNjoJY2hhbm5lbCAoY29udHJvbGxlcikgc2VsZWN0b3IKKwkJKiAgIDA3OglkYXRhICgxLT5vbiwgMC0+b2ZmKQorCQkqICAgMDg6CXN0cm9iZQorCQkqICAgMDk6CXJlc2V0CisJCSogYml0IDE2IGlzIGlucHV0IGZyb20gc3luYyBzZXBhcmF0b3IgZm9yIHRoZSBjaGFubmVsCisJCSovCisJCS5ncGlvbWFzawk9IDB4MDAwM2ZmLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubm9fdGRhNzQzMgk9IDEsCisJCS5ub190ZGE5ODc1CT0gMSwKKwkJLm11eHNlbF9ob29rCT0ga29kaWNvbTQ0MDByX211eHNlbCwKKwl9LAorCVtCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJfU0xdID0geworCQkvKiBCaWxsIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4gKi8KKwkJLyogTm90ZSB0aGF0LCBmb3IgcmVhc29ucyB1bmtub3duLCB0aGUgIm1hc3RlciIgQlQ4NzhBIGNoaXAgKGkuZS4gdGhlCisJCSogb25lIHdoaWNoIGNvbnRyb2xzIHRoZSBhbmFsb2cgc3dpdGNoLCBhbmQgbXVzdCB1c2UgdGhlIGNhcmQgdHlwZSkKKwkJKiBpcyB0aGUgMm5kIG9uZSBkZXRlY3RlZC4gIFRoZSBvdGhlciAzIGNoaXBzIHNob3VsZCB1c2UgdGhpcyBjYXJkCisJCSogdHlwZQorCQkqLworCQkubmFtZQkJPSAiS29kaWNvbSA0NDAwUiAoc2xhdmUpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDE2LAorCQkuYXVkaW9faW5wdXRzCT0gMCwKKwkJLnR1bmVyCQk9IC0xLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5zdmhzCQk9IC0xLAorCQkuZ3Bpb21hc2sJPSAweDAxMDAwMCwKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwkJLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5vX3RkYTc0MzIJPSAxLAorCQkubm9fdGRhOTg3NQk9IDEsCisJCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4ODYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfQURMSU5LX1JUVjI0XSA9IHsKKwkJLyogTWljaGFlbCBIZW5zb24gPG1oZW5zb25AY2xhcml0eXZpLmNvbT4gKi8KKwkJLyogQWRsaW5rIFJUVjI0IHdpdGggc3BlY2lhbCB1bmxvY2sgY29kZXMgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkFkbGluayBSVFYyNCIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCQkvKiAtLS0tIGNhcmQgMHg4Ny0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURV0gPSB7CisJCS8qIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QG0xay5uZXQ+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSIsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1REVlNfSDA2MkYsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMGUwMDAwNywKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAweDAwNDAwMDA1LCAwLCAweDAwMDAwMDAxLCAwLCAweDAwYzAwMDA3LCAwIH0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4ODgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfQUNPUlBfWTg3OEZdID0geworCQkvKiBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+ICovCisJCS5uYW1lCQk9ICJBY29ycCBZODc4RiIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYsCisJCS50dW5lcl9hZGRyCT0gMHhjMSA+PjEsCisJCS5yYWRpb19hZGRyICAgICA9IDB4YzEgPj4xLAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCQkvKiAtLS0tIGNhcmQgMHg4OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTJdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENUVkZNaSB2MiIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxYzAwMDcsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDIsIDMgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU5BXzk1MzNfREksCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwl9LAorCQkvKiAtLS0tIGNhcmQgMHg4YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQXzJFXSA9IHsKKwkJLm5hbWUgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKSIsCisJCS52aWRlb19pbnB1dHMgID0gNSwKKwkJLmF1ZGlvX2lucHV0cyAgPSAxLAorCQkudHVuZXIgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgID0gMywKKwkJLmdwaW9tYXNrICAgICAgPSAweDAxZmUwMCwKKwkJLm11eHNlbCAgICAgICAgPSB7IDIsMywxLDEsLTEgfSwKKwkJLmRpZ2l0YWxfbW9kZSAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAorCQkuYXVkaW9tdXggICAgICA9IHsgMHgwMDQwMCwgMHgxMDQwMCwgMHgwNDQwMCwgMHg4MDAwMCwgMHgxMjQwMCwgMHg0NjAwMCAgfSwKKwkJLm5vX21zcDM0eHggICAgPSAxLAorCQkucGxsICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9MR19QQUxfRk0sCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUgICAgPSAxLAorCX0sCisJCS8qIC0tLS0gY2FyZCAweDhiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9QVl9NNDkwMF0gPSB7CisJCS8qIFPpcmdpbyBGb3J0aWVyIDxzZXJnaW9mb3J0aWVyQHlhaG9vLmNvbS5icj4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMCIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMsIDB4MjksIDB4MjkgfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9ZTUVDX1RWRl81NTMzTUYsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4OGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX09TUFJFWTQ0MF0gID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDQ0MCIsCisJCS52aWRlb19pbnB1dHMgICA9IDEsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCQkvKiAtLS0tIGNhcmQgMHg4ZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfQVNPVU5EX1NLWUVZRV0gPSB7CisJCS5uYW1lCQk9ICJBc291bmQgU2t5ZXllIFBDVFYiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAxNSwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7MiwwLDAsMCwxfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAyLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIAotCS5ncGlvbWFzayAgICAgICA9IDcsCi0JLmF1ZGlvbXV4ICAgICAgID0gezd9LAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNS9QQ0kiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwZjBmODAsCi0JLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHsweDAzMDAwMCwgMHgwMTAwMDAsIDAsIDAsIDB4MDIwMDAwLCAwfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sgICAgID0gZ3ZiY3R2NXBjaV9hdWRpbywKLQkuaGFzX3JhZGlvICAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NzgpIiwgLyogMHgxKDJ8MyktNDVDNi1DMSAqLwotCS52aWRlb19pbnB1dHMgICA9IDQsICAgICAgICAgICAgICAgICAgLyogaWQtaW5wdXRzLWNsb2NrICovCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAzLAotCS5tdXhzZWwgICAgICAgICA9IHsgMywgMiwgMCwgMSB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMC8xNTAgKDg0OCkiLCAvKiAweDA0LTU0QzAtQzEgJiBvbGRlciBib2FyZHMgKi8KLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg1NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEgKDg0OCkiLCAvKiAweDA1LTQwQzAtQzEgKi8KLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIiwgICAgICAgLyogMHgxKDR8NSktMDAwNC1DNCAqLwotCS52aWRlb19pbnB1dHMgICA9IDEsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIHcvIHN2aWQiLCAgLyogMHgoMTZ8MTd8MjApLTAwQzQtQzEgKi8KLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjAxLzI1MC8yNTEiLCAgLyogMHgxKDh8OXxFfEYpLTAwMDQtQzQgKi8KLQkudmlkZW9faW5wdXRzICAgPSAxLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVU5TRVQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg1OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjUwIiwgICAvKiAweDEoQXxCKS0wMEM0LUMxICovCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVU5TRVQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMTAvMjIwIiwgICAvKiAweDEoQXxCKS0wNEMwLUMxICovCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVU5TRVQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1MDAiLCAgIC8qIDUwMCAqLwotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAxLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDU0MCIsICAgLyogNTQwICovCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDVDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMDAiLCAgLyogMjAwMCAqLwotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAxLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwgICAgICAvKiBtdXN0IGF2b2lkLCBjb25mbGljdHMgd2l0aCB0aGUgYnQ4NjAgKi8KLX0sewotCS8qIE0gRyBCZXJiZXJpY2ggPGJlcmJlcmljQGZvcndpc3MudW5pLXBhc3NhdS5kZT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiSURTIEVhZ2xlIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLm11eHNlbCAgICAgICAgID0geyAwLCAxLCAyLCAzIH0sCi0JLm11eHNlbF9ob29rICAgID0gZWFnbGVfbXV4c2VsLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTYXQiLAotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAxLAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMSB9LAotCS5tdXhzZWwgICAgICAgICA9IHsgMywgMCwgMSwgMn0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLm5vX2dwaW9pcnEgICAgID0gMSwKLQkuaGFzX2R2YiAgICAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIkZvcm1hYyBQcm9UViBJSSAoYnQ4NzgpIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAzLAotCS5ncGlvbWFzayAgICAgICA9IDIsCi0JLyogVFYsIENvbXAxLCBDb21wb3NpdGUgb3ZlciBTVklEIGNvbiwgU1ZJRCAqLwotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAyLCAyLCAwLCAwLCAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS5oYXNfcmFkaW8gICAgICA9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotLyogc291bmQgcm91dGluZzoKLQlHUElPPTB4MDAsMHgwMSwweDAzOiBtdXRlICg/KQotCTB4MDI6IGJvdGggVFYgYW5kIHJhZGlvICh0dW5lcjogRk0xMjE2L0kpCi0JVGhlIGNhcmQgaGFzIG9uYm9hcmQgYXVkaW8gY29ubmVjdG9ycyBsYWJlbGVkICJjZHJvbSIgYW5kICJib2FyZCIsCi0Jbm90IHNvbGRlcmVkIGhlcmUsIHRob3VnaCB1bmtub3duIHdpcmluZy4KLQlDYXJkIGxhY2tzOiBleHRlcm5hbCBhdWRpbyBpbiwgcGNpIHN1YnN5c3RlbSBpZC4KLSovCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDYwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiTWFjaFRWIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0fSwKLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS50dW5lcl90eXBlICAgICA9IDUsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwgICAgICAgICAgICA9IDEsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8iLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogTHVjIFZhbiBIb2V5bGFuZHQgPGx1Y0BlLW1hZ2ljLmJlPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE1MCIsIC8qIDB4NGYgKi8KLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIEhpcm9zaGkgVGFrZWthd2EgPHNpYW5AYmlnLm9yLmpwPiAqLwotCS8qIFRoaXMgY2FyZCBsYWNrcyBzdWJzeXN0ZW0gSUQgKi8KLQkubmFtZSAgICAgICAgICAgPSAiQUQtVFZLNTAzIiwgLyogMHg2MyAqLwotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMDFlODAwNywKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKLQkvKiAgICAgICAgICAgICAgICAgIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBvZmYsICBvbiAqLwotCS5hdWRpb211eCAgICAgICA9IHsgMHgwOCwgIDB4MGYsICAweDBhLCAgICAgMHgwOCwgICAgIDB4MGYsIDB4MDggfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IDIsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5hdWRpb19ob29rCT0gYWR0dms1MDNfYXVkaW8sCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDY0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiSGVyY3VsZXMgU21hcnQgVFYgU3RlcmVvIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSA1LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkvKiBOb3RlczoKLQktIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElECi0JLSBzdGVyZW8gdmFyaWFudCB3LyBkYXVnaHRlciBib2FyZCB3aXRoIHRkYTk4NzRhIEAweGIwCi0JLSBBdWRpbyBSb3V0aW5nOgotCQlhbHdheXMgZnJvbSB0ZGE5ODc0IGluZGVwZW5kZW50IG9mIEdQSU8gKD8pCi0JCWV4dGVybmFsIGxpbmUgaW46IHVua25vd24KLQktIE90aGVyIGNoaXBzOiBlbTc4cDE1NmVscCBAIDB4OTYgKHByb2JhYmx5IElSIHJlbW90ZSBjb250cm9sKQotCQloZWY0MDUzIChpbnN0ZWFkIDQwNTIpIGZvciB1bmtub3duIGZ1bmN0aW9uCi0JKi8KLX0sewotCS5uYW1lICAgICAgICAgICA9ICJQYWNlIFRWICYgUmFkaW8gQ2FyZCIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LCAvKiBUdW5lciwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCi0JLmdwaW9tYXNrICAgICAgID0gMCwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yYWRpbyAgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLyogQnQ4NzgsIEJ0ODMyLCBGSTEyNDYgdHVuZXI7IG5vIHBjaSBzdWJzeXN0ZW0gaWQKLQlvbmx5IGludGVybmFsIGxpbmUgb3V0OiAoNHBpbiBoZWFkZXIpIFJHR0wKLQlSYWRpbyBtdXN0IGJlIGRlY29kZWQgYnkgbXNwMzQxMGQgKG5vdCByb3V0ZWQgdGhyb3VnaCkqLwotCS8qCi0JLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwgIHRvZG8hCi0JKi8KLX0sewotCS8qIENocmlzIFdpbGxpbmcgPGNocmlzQHZpc2xhYi51c3lkLmVkdS5hdT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiSVZDLTIwMCIsCi0JLnZpZGVvX2lucHV0cyAgID0gMSwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJHcmFuZCBYLUd1YXJkIC8gVHJ1c3QgODE0UENJIiwKLQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IDQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ncGlvbWFzazIgICAgICA9IDB4ZmYsCi0JLm11eHNlbCAgICAgICAgID0geyAyLDIsMiwyLCAzLDMsMywzLCAxLDEsMSwxLCAwLDAsMCwwIH0sCi0JLm11eHNlbF9ob29rICAgID0geGd1YXJkX211eHNlbCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIsCi0JLnZpZGVvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLQkubm9fZ3Bpb2lycSAgICAgPSAxLAotfSx7Ci0JLyogSm9yZ2UgQm9uY29tcHRlIC0gRFRJMiA8am9yZ2VAZHRpMi5uZXQ+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlByb1ZpZGVvIFBWMTQzIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIE0uS2xhaHJAcGh5dGVjLmRlICovCi0JLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgTWluaURJTiAoYnQ4NzgpIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCi0JLnN2aHMgICAgICAgICAgID0gMywKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgQ29tYmkgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwotCS5zdmhzICAgICAgICAgICA9IDMsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCi0JLyogLS0tLSBjYXJkIDB4NmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IE1pbmlESU4gKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMTAsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KLQkuc3ZocyAgICAgICAgICAgPSA5LAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KLQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCi0JCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KLQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDAgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpIiwKLQkudmlkZW9faW5wdXRzICAgPSAxMCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwotCS5zdmhzICAgICAgICAgICA9IDksCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiBncGlvbWFzazIgZGVmaW5lcyB0aGUgYml0cyB1c2VkIHRvIHN3aXRjaCBhdWRpbwotCQkJCXZpYSB0aGUgdXBwZXIgbmliYmxlIG9mIG11eHNlbC4gaGVyZTogdXNlZCBmb3IKLQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLwotCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMiwgMHgxMiwgMHgyMiwgMHgzMiwgMHgwMywgMHgxMywgMHgyMywgMHgzMywgMHgwMSwgMHgwMSB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTAwIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotfSx7Ci0JLyogSVZDLTEyMEcgLSBBbGFuIEdhcmZpZWxkIDxhbGFuQGZyb21vcmJpdC5jb20+ICovCi0JLm5hbWUgICAgICAgICAgID0gIklWQy0xMjBHIiwKLQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLCAgICAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwotCS50dW5lciAgICAgICAgICA9IC0xLCAgIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5zdmhzICAgICAgICAgICA9IC0xLCAgIC8qIGNhcmQgaGFzIG5vIHN2aHMgKi8KLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JLm11eHNlbCAgICAgICAgID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAotCQkJMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCB9LAotCS5tdXhzZWxfaG9vayAgICA9IGl2YzEyMF9tdXhzZWwsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg3MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gInBjSERUViBIRC0yMDAwIFRWIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19BVFNDLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX2R2YiAgICAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlR3aW5oYW4gRFNUICsgY2xvbmVzIiwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub192aWRlbyAgICAgICA9IDEsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJXaW5mYXN0IFZDMTAwIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDEsIDN9LCAvKiBWaWQgSW4sIFNWaWQgSW4sIFZpZCBvdmVyIFNWaWQgaW4gY29ubmVjdG9yICovCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiVGVwcHJvIFRFVi01NjAvSW50ZXJWaXNpb24gSVYtNTYwIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDMsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDEsIDEsIDEsIDB9LAotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKLX0sewotCi0JLyogLS0tLSBjYXJkIDB4NzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJTSU1VUyBHVkMxMTAwIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDJ9LAotCS5ncGlvbWFzayAgICAgICA9IDB4M0YsCi0JLm11eHNlbF9ob29rICAgID0gZ3ZjMTEwMF9tdXhzZWwsCi19LHsKLQkvKiBDYXJsb3MgU2lsdmEgcjNwZWtAcjNwZWsuaG9tZWxpbnV4Lm9yZyB8fCBjYXJkIDB4NzUgKi8KLQkubmFtZSAgICAgICAgICAgPSAiTkdTIE5HU1RWKyIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHswLCAwLCAwLCAwLCAweDAwMDAwMywgMH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotfSx7Ci0JLyogaHR0cDovL2xpbnV4bWVkaWFsYWJzLmNvbSAqLwotCS5uYW1lICAgICAgICAgICA9ICJMTUxCVDQiLAotCS52aWRlb19pbnB1dHMgICA9IDQsIC8qIElOMSxJTjIsSU4zLElONCAqLwotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBIZWxtcm9vcyBIYXJyaSA8aGFycmkuaGVsbXJvb3NAcHAuaW5ldC5maT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiVGVrcmFtIE0yMDUgUFJPIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ncGlvbWFzayAgICAgICA9IDB4NjgsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDB4NjgsIDB4NjgsIDB4NjEsIDB4NjEsIDB4MDAgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDc4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBKYXZpZXIgQ2VuZGFuIEFyZXMgPGpjZW5kYW5AbHljb3MuZXM+ICovCi0JLyogYnQ4NzggVFYgKyBGTSB3aXRob3V0IHN1YnN5c3RlbSBJRCAqLwotCS5uYW1lICAgICAgICAgICA9ICJDb25jZXB0cm9uaWMgQ09OVFZGTWkiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCAzIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmVtb3RlICAgICA9IDEsCi0JLmhhc19yYWRpbyAgICAgID0gMSwKLX0sewotCS8qRXJpYyBERUJJRUYgPGRlYmllZkB0ZWxlbXNhLmNvbT4qLwotCS8qRVVSRVNZUyBQaWNvbG8gVGV0cmEgOiA0IENvbmV4YW50IEZ1c2lvbiA4NzhBLCBubyBhdWRpbywgdmlkZW8gaW5wdXQgc2V0IHdpdGggYW5hbG9nIG11bHRpcGxleGVycyBHUElPIGNvbnRyb2xlZCovCi0JLyogYWRkcyBwaWNvbG9fdGV0cmFfbXV4c2VsKCksIHBpY29sb190ZXRyYV9pbml0KCksIHRoZSBmb2xvd2luZyBkZWNsYXJhdGlvbiBzdHJ1Y3VyZSwgYW5kICNkZWZpbmUgQlRUVl9QSUNPTE9fVEVUUkFfQ0hJUCovCi0JLyoweDc5IGluIGJ0dHYuaCovCi0JLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIFRldHJhIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMCwKLQkuZ3Bpb21hc2syICAgICAgPSAweDNDPDwxNiwvKlNldCB0aGUgR1BJT1sxOF0tPkdQSU9bMjFdIGFzIG91dHB1dCBwaW4uPT0+IGRyaXZlIHRoZSB2aWRlbyBpbnB1dHMgdGhyb3VnaCBhbmFsb2cgbXVsdGlwbGV4ZXJzKi8KLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkubXV4c2VsICAgICAgICAgPSB7MiwyLDIsMn0sLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkubXV4c2VsX2hvb2sgICAgPSBwaWNvbG9fdGV0cmFfbXV4c2VsLC8qUmVxdWlyZWQgYXMgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGNsYXNzaWMgaW5wdXQgc2VsZWN0aW9uIHBvbGljeSovCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogU3Bpcml0IFRWIFR1bmVyIGZyb20gaHR0cDovL3NwaXJpdG1vZGVtcy5jb20uYXUgKi8KLQkvKiBTdGFmZm9yZCBHb29kc2VsbCA8c3VyZ2VAZ29saWF0aC5ob21ldW5peC5vcmc+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlNwaXJpdCBUViBUdW5lciIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMDAwMDBmLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi19LHsKLQkvKiBXb2xmcmFtIEpvb3N0IDx3b2pvQGZyb2thc2Nod2VpLmRlPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIDc3MSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuc3ZocyAgICAgICAgICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm11eHNlbCAgICAgICAgID0geyAzICwgMyB9LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkuaGFzX2R2YiAgICAgICAgPSAxLAotCS5ub19ncGlvaXJxICAgICA9IDEsCi0JLmhhc19yZW1vdGUgICAgID0gMSwKLX0sewotCS8qIC0tLS0gY2FyZCAweDdjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBNYXR0IEplc3NvbiA8ZHZiQGplc3Nvbi5lY2xpcHNlLmNvLnVrPiAqLwotCS8qIEJhc2VkIG9uIHRoZSBOZWJ1bGEgY2FyZCBkYXRhIC0gYWRkZWQgcmVtb3RlIGFuZCBuZXcgY2FyZCBudW1iZXIgLSBCVFRWX0FWRFZCVF83NjEsIHNlZSBhbHNvIGlyLWtiZC1ncGlvLmMgKi8KLQkubmFtZSAgICAgICAgICAgPSAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiLAotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDIsIDB9LCAvKiBDb21wMCwgUy1WaWRlbywgPywgPyAqLwotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLQkubm9fZ3Bpb2lycSAgICAgPSAxLAotCS5oYXNfcmVtb3RlICAgICA9IDEsCi19LHsKLQkvKiBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUgKi8KLQkubmFtZSAgICAgICAgICAgICA9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNRIiwKLQkudmlkZW9faW5wdXRzICAgICA9IDE2LAotCS5hdWRpb19pbnB1dHMgICAgID0gMCwKLQkudHVuZXIgICAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgICAgPSAweDAsCi0JLm11eHNlbCAgICAgICAgICAgPSB7IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCi0JCQkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCi0JLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNRX211eHNlbCwKLQkuYXVkaW9tdXggICAgICAgICA9IHsgMCB9LAotCS5ub19tc3AzNHh4ICAgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgICA9IC0xLAotCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAotfSx7Ci0JLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCi0JLm5hbWUgICAgICAgICAgICAgPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TTEMiLAotCS52aWRlb19pbnB1dHMgICAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JLnR1bmVyICAgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyIH0sCi0JLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNMQ19tdXhzZWwsCi0JLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKLQkubm9fbXNwMzR4eCAgICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKLX0sewotCS8qIEJUVFZfQVBBQ19WSUVXQ09NUCAqLwotCS8qIEF0dGlsYSBLb25kb3JvcyA8YXR0aWxhLmtvbmRvcm9zQGNoZWxsby5odT4gKi8KLQkvKiBidDg3OCBUViArIEZNIDB4MDAwMDAwMDAgc3Vic3lzdGVtIElEICovCi0JLm5hbWUgICAgICAgICAgID0gIkFQQUMgVmlld2NvbXAgODc4KEFNQVgpIiwKLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweEZGLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAwLCAxMH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmVtb3RlICAgICA9IDEsICAgLyogbWluaXJlbW90ZSB3b3Jrcywgc2VlIGlyLWtiZC1ncGlvLmMgKi8KLQkuaGFzX3JhZGlvICAgICAgPSAxLCAgIC8qIG5vdCBldmVyeSBjYXJkIGhhcyByYWRpbyAqLwotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg4MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlIiwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLm5vX3ZpZGVvICAgICAgID0gMSwKLQkuaGFzX2R2YiAgICAgICAgPSAxLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIFN0ZXZlbiA8cGhvdG9uMzhAcGNob21lLmNvbS50dz4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiVi1HZWFyIE15VkNEIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCi0JLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHsweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yYWRpbyAgICAgID0gMCwKLX0sewotCS8qIFJpY2sgQyA8Y3J5cHRkcmFnb29uQGdtYWlsLmNvbT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiU3VwZXIgVFYgVHVuZXIiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMHgwMDAwMDEsMCwwLCAwfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS5oYXNfcmFkaW8gICAgICA9IDEsCi19LHsKLQkvKiBDaHJpcyBGYW5uaW5nIDx2aWRlbzRsaW51eEBoYXlkb24ubmV0PiAqLwotCS5uYW1lICAgICAgICAgICA9ICJUaWJldCBTeXN0ZW1zICdQcm9ncmVzcyBEVlInIENTMTYiLAotCS52aWRlb19pbnB1dHMgICA9IDE2LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyIH0sCi0JLnBsbAkJPSBQTExfMjgsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyCT0gMSwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm11eHNlbF9ob29rICAgID0gdGliZXRDUzE2X211eHNlbCwKLX0sCi17Ci0JLyogQmlsbCBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+ICovCi0JLyoKLQkqIE5vdGUgdGhhdCwgYmVjYXVzZSBvZiB0aGUgY2FyZCdzIHdpcmluZywgdGhlICJtYXN0ZXIiCi0JKiBCVDg3OEEgY2hpcCAoaS5lLiB0aGUgb25lIHdoaWNoIGNvbnRyb2xzIHRoZSBhbmFsb2cgc3dpdGNoCi0JKiBhbmQgbXVzdCB1c2UgdGhpcyBjYXJkIHR5cGUpIGlzIHRoZSAybmQgb25lIGRldGVjdGVkLiAgVGhlCi0JKiBvdGhlciAzIGNoaXBzIHNob3VsZCB1c2UgY2FyZCB0eXBlIDB4ODUsIHdob3NlIGRlc2NyaXB0aW9uCi0JKiBmb2xsb3dzIHRoaXMgb25lLiAgVGhlcmUgaXMgYSBFRVBST00gb24gdGhlIGNhcmQgKHdoaWNoIGlzCi0JKiBjb25uZWN0ZWQgdG8gdGhlIEkyQyBvZiBvbmUgb2YgdGhvc2Ugb3RoZXIgY2hpcHMpLCBidXQgaXMKLQkqIG5vdCBjdXJyZW50bHkgaGFuZGxlZC4gIFRoZXJlIGlzIGFsc28gYSBmYWNpbGl0eSBmb3IgYQotCSogIm1vbml0b3IiLCB3aGljaCBpcyBhbHNvIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCi0JKi8KLQkubmFtZSAgICAgICAgICAgPSAiS29kaWNvbSA0NDAwUiAobWFzdGVyKSIsCi0JLnZpZGVvX2lucHV0cwk9IDE2LAotCS5hdWRpb19pbnB1dHMJPSAwLAotCS50dW5lcgkJPSAtMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuc3ZocwkJPSAtMSwKLQkvKiBHUElPIGJpdHMgMC05IHVzZWQgZm9yIGFuYWxvZyBzd2l0Y2g6Ci0JKiAgIDAwIC0gMDM6CWNhbWVyYSBzZWxlY3RvcgotCSogICAwNCAtIDA2OgljaGFubmVsIChjb250cm9sbGVyKSBzZWxlY3RvcgotCSogICAwNzoJZGF0YSAoMS0+b24sIDAtPm9mZikKLQkqICAgMDg6CXN0cm9iZQotCSogICAwOToJcmVzZXQKLQkqIGJpdCAxNiBpcyBpbnB1dCBmcm9tIHN5bmMgc2VwYXJhdG9yIGZvciB0aGUgY2hhbm5lbAotCSovCi0JLmdwaW9tYXNrCT0gMHgwMDAzZmYsCi0JLm5vX2dwaW9pcnEgICAgID0gMSwKLQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAotCS5wbGwJCT0gUExMXzI4LAotCS5ub19tc3AzNHh4CT0gMSwKLQkubm9fdGRhNzQzMgk9IDEsCi0JLm5vX3RkYTk4NzUJPSAxLAotCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCi19LAotewotCS8qIEJpbGwgQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPiAqLwotCS8qIE5vdGUgdGhhdCwgZm9yIHJlYXNvbnMgdW5rbm93biwgdGhlICJtYXN0ZXIiIEJUODc4QSBjaGlwIChpLmUuIHRoZQotCSogb25lIHdoaWNoIGNvbnRyb2xzIHRoZSBhbmFsb2cgc3dpdGNoLCBhbmQgbXVzdCB1c2UgdGhlIGNhcmQgdHlwZSkKLQkqIGlzIHRoZSAybmQgb25lIGRldGVjdGVkLiAgVGhlIG90aGVyIDMgY2hpcHMgc2hvdWxkIHVzZSB0aGlzIGNhcmQKLQkqIHR5cGUKLQkqLwotCS5uYW1lCQk9ICJLb2RpY29tIDQ0MDBSIChzbGF2ZSkiLAotCS52aWRlb19pbnB1dHMJPSAxNiwKLQkuYXVkaW9faW5wdXRzCT0gMCwKLQkudHVuZXIJCT0gLTEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnN2aHMJCT0gLTEsCi0JLmdwaW9tYXNrCT0gMHgwMTAwMDAsCi0JLm5vX2dwaW9pcnEgICAgID0gMSwKLQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAotCS5wbGwJCT0gUExMXzI4LAotCS5ub19tc3AzNHh4CT0gMSwKLQkubm9fdGRhNzQzMgk9IDEsCi0JLm5vX3RkYTk4NzUJPSAxLAotCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCi19LAotewotCS8qIC0tLS0gY2FyZCAweDg2LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIE1pY2hhZWwgSGVuc29uIDxtaGVuc29uQGNsYXJpdHl2aS5jb20+ICovCi0JLyogQWRsaW5rIFJUVjI0IHdpdGggc3BlY2lhbCB1bmxvY2sgY29kZXMgKi8KLQkubmFtZSAgICAgICAgICAgPSAiQWRsaW5rIFJUVjI0IiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLX0sCi17Ci0JLyogLS0tLSBjYXJkIDB4ODctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbTFrLm5ldD4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViA1IExpdGUiLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfVERWU19IMDYyRiwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAotCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCwgMHgwMGMwMDAwNywgMCB9LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLyogLS0tLSBjYXJkIDB4ODgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPiAqLwotCS5uYW1lCQk9ICJBY29ycCBZODc4RiIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwLCAweDAwMjAwMCwgMCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRiwKLQkudHVuZXJfYWRkcgk9IDB4YzEgPj4xLAotCS5oYXNfcmFkaW8JPSAxLAotfX07Cit9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJ0dHZfbnVtX3R2Y2FyZHMgPSBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcyk7CiAKQEAgLTI0NjEsNyArMjg0MCw3IEBACiAJCQkgICAgICAgYnR2LT5jLm5yLCBidHYtPmNhcmRpZCAmIDB4ZmZmZiwKIAkJCSAgICAgICAoYnR2LT5jYXJkaWQgPj4gMTYpICYgMHhmZmZmKTsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJwbGVhc2UgbWFpbCBpZCwgYm9hcmQgbmFtZSBhbmQgIgotCQkJICAgICAgICJ0aGUgY29ycmVjdCBjYXJkPSBpbnNtb2Qgb3B0aW9uIHRvIGtyYXhlbEBieXRlc2V4Lm9yZ1xuIik7CisJCQkgICAgICAgInRoZSBjb3JyZWN0IGNhcmQ9IGluc21vZCBvcHRpb24gdG8gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tXG4iKTsKIAkJfQogCX0KIApAQCAtMjUxMCwxMSArMjg4OSwxMSBAQAogCWludCB0eXBlID0gLTE7CiAKIAlpZiAoMCA9PSBzdHJuY21wKGVlcHJvbV9kYXRhLCJHRVQgTU0yMHhQQ1RWIiwxMykpCi0JCXR5cGUgPSBCVFRWX01PRFRFQ18yMDU7CisJCXR5cGUgPSBCVFRWX0JPQVJEX01PRFRFQ18yMDU7CiAJZWxzZSBpZiAoMCA9PSBzdHJuY21wKGVlcHJvbV9kYXRhKzIwLCJQaWNvbG8iLDcpKQotCQl0eXBlID0gQlRUVl9FVVJFU1lTX1BJQ09MTzsKKwkJdHlwZSA9IEJUVFZfQk9BUkRfRVVSRVNZU19QSUNPTE87CiAJZWxzZSBpZiAoZWVwcm9tX2RhdGFbMF0gPT0gMHg4NCAmJiBlZXByb21fZGF0YVsyXT09IDApCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJUVFZfSEFVUFBBVUdFOyAvKiBvbGQgYnQ4NDggKi8KKwkJdHlwZSA9IEJUVFZfQk9BUkRfSEFVUFBBVUdFOyAvKiBvbGQgYnQ4NDggKi8KIAogCWlmICgtMSAhPSB0eXBlKSB7CiAJCWJ0di0+Yy50eXBlID0gdHlwZTsKQEAgLTI1NDgsNyArMjkyNyw3IEBACiAJc3dpdGNoKHR0eXBlKSB7CiAJY2FzZSAweDA6IHR1bmVyPTI7IC8qIE5UU0MsIGUuZy4gVFBJOE5TUjExUCAqLwogCQlicmVhazsKLSAgICAgICAgY2FzZSAweDI6IHR1bmVyPTM5Oy8qIExHIE5UU0MgKG5ld2VyIFRBUEMgc2VyaWVzKSBUQVBDLUg3MDFQICovCisJY2FzZSAweDI6IHR1bmVyPTM5Oy8qIExHIE5UU0MgKG5ld2VyIFRBUEMgc2VyaWVzKSBUQVBDLUg3MDFQICovCiAJCWJyZWFrOwogCWNhc2UgMHg0OiB0dW5lcj01OyAvKiBQaGlsaXBzIFBBTCBUUEk4UFNCMDJQLCBUUEk4UFNCMTJQLCBUUEk4UFNCMTJEIG9yIEZJMTIxNiwgRk0xMjE2ICovCiAJCWJyZWFrOwpAQCAtMjU2NCw3ICsyOTQzLDcgQEAKIAloYXNfcmFkaW8JICAgID0gICBncGlvICYgMHg0MDAwMDA7CiAJLyogICB1bmtub3duICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwOwogCSAqICAgdW5rbm93bjIgICAgICAgICAgICAgICAgICAweDEwMDAwMDsgKi8KLSAgICAgICAgaXNfY2FwdHVyZV9vbmx5ICAgICA9ICEoZ3BpbyAmIDB4MDA4MDAwKTsgLyogR1BJTzE1ICovCisJaXNfY2FwdHVyZV9vbmx5ICAgICA9ICEoZ3BpbyAmIDB4MDA4MDAwKTsgLyogR1BJTzE1ICovCiAJaGFzX3RkYTk4MjBfdGRhOTgyMSA9ICEoZ3BpbyAmIDB4MDA0MDAwKTsKIAlpc19scjkwICAgICAgICAgICAgID0gIShncGlvICYgMHgwMDIwMDApOyAvKiBlbHNlIExSMjYvTFI1MCAoTFIzOC9MUjUxIGYuIGNhcHR1cmUgb25seSkgKi8KIAkvKgpAQCAtMjYwMSw3ICsyOTgwLDcgQEAKIAljaGFyICppbmZvOwogCiAJZ3Bpb19pbm91dCgweGZmZmZmZiwgMCk7Ci0gICAgICAgIGdwaW8gPSBncGlvX3JlYWQoKTsKKwlncGlvID0gZ3Bpb19yZWFkKCk7CiAJaWQgICA9ICgoZ3Bpbz4+MTApICYgNjMpIC0xOwogCW1zcCAgPSBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfTVNQMzQwMCwgIk1TUDM0eHgiKTsKIAlpZiAoaWQgPCAzMikgewpAQCAtMjYyMCwxMCArMjk5OSwxMCBAQAogCQkJYnR2LT5oYXNfcmFkaW8gPSAwOwogCQl9CiAJCWlmICgtMSAhPSBtc3ApIHsKLQkJCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX01JUk8pCi0JCQkJYnR2LT5jLnR5cGUgPSBCVFRWX01JUk9QUk87Ci0JCQlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9QSU5OQUNMRSkKLQkJCQlidHYtPmMudHlwZSA9IEJUVFZfUElOTkFDTEVQUk87CisJCQlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9CT0FSRF9NSVJPKQorCQkJCWJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9NSVJPUFJPOworCQkJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfUElOTkFDTEUpCisJCQkJYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPOwogCQl9CiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICJidHR2JWQ6IG1pcm86IGlkPSVkIHR1bmVyPSVkIHJhZGlvPSVzIHN0ZXJlbz0lc1xuIiwKQEAgLTI2NjQsNyArMzA0Myw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoLTEgIT0gbXNwKQotCQkJYnR2LT5jLnR5cGUgPSBCVFRWX1BJTk5BQ0xFUFJPOworCQkJYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPOwogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiYnR0diVkOiBwaW5uYWNsZS9tdDogaWQ9JWQgaW5mbz1cIiVzXCIgcmFkaW89JXNcbiIsCiAJCSAgICAgICBidHYtPmMubnIsIGlkLCBpbmZvLCBidHYtPmhhc19yYWRpbyA/ICJ5ZXMiIDogIm5vIik7CkBAIC0yNzEyLDcgKzMwOTEsNyBAQAogCiBzdGF0aWMgdm9pZCBndmMxMTAwX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWFza3NbXSA9IHsweDMwLCAweDAxLCAweDEyLCAweDIzfTsKKwlzdGF0aWMgY29uc3QgaW50IG1hc2tzW10gPSB7MHgzMCwgMHgwMSwgMHgxMiwgMHgyM307CiAJZ3Bpb193cml0ZShtYXNrc1tpbnB1dCU0XSk7CiB9CiAKQEAgLTI3NzgsMjYgKzMxNTcsMjcgQEAKIHZvaWQgX19kZXZpbml0IGJ0dHZfaW5pdF9jYXJkMShzdHJ1Y3QgYnR0diAqYnR2KQogewogCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKLQljYXNlIEJUVFZfSEFVUFBBVUdFOgotCWNhc2UgQlRUVl9IQVVQUEFVR0U4Nzg6Ci0gICAgICAgICAgICAgICAgYm9vdF9tc3AzNHh4KGJ0diw1KTsKKwljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFOgorCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0U4Nzg6CisJCWJvb3RfbXNwMzR4eChidHYsNSk7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9WT09ET09UVl9GTToKLSAgICAgICAgICAgICAgICBib290X21zcDM0eHgoYnR2LDIwKTsKKwljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk06CisJCWJvb3RfbXNwMzR4eChidHYsMjApOwogCQlicmVhazsKLQljYXNlIEJUVFZfQVZFUk1FRElBOTg6CisJY2FzZSBCVFRWX0JPQVJEX0FWRVJNRURJQTk4OgogCQlib290X21zcDM0eHgoYnR2LDExKTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX0hBVVBQQVVHRVBWUjoKKwljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFUFZSOgogCQlwdnJfYm9vdChidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfVFdJTkhBTl9EU1Q6Ci0JY2FzZSBCVFRWX0FWRFZCVF83NzE6CisJY2FzZSBCVFRWX0JPQVJEX1RXSU5IQU5fRFNUOgorCWNhc2UgQlRUVl9CT0FSRF9BVkRWQlRfNzcxOgorCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVDoKIAkJYnR2LT51c2VfaTJjX2h3ID0gMTsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgQlRUVl9BRExJTktfUlRWMjQ6Ci0gICAgICAgICAgICAgICAgaW5pdF9SVFYyNCggYnR2ICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBCVFRWX0JPQVJEX0FETElOS19SVFYyNDoKKwkJaW5pdF9SVFYyNCggYnR2ICk7CisJCWJyZWFrOwogCiAJfQogCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfZHZiKQpAQCAtMjgxMCw1MyArMzE5MCw1MyBAQAogCWludCB0ZGE5ODg3OwogCWludCBhZGRyPUFERFJfVU5TRVQ7CiAKLSAgICAgICAgYnR2LT50dW5lcl90eXBlID0gLTE7CisJYnR2LT50dW5lcl90eXBlID0gLTE7CiAKLQlpZiAoQlRUVl9VTktOT1dOID09IGJ0di0+Yy50eXBlKSB7CisJaWYgKEJUVFZfQk9BUkRfVU5LTk9XTiA9PSBidHYtPmMudHlwZSkgewogCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CiAJCWlkZW50aWZ5X2J5X2VlcHJvbShidHYsZWVwcm9tX2RhdGEpOwogCX0KIAogCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKLQljYXNlIEJUVFZfTUlSTzoKLQljYXNlIEJUVFZfTUlST1BSTzoKLQljYXNlIEJUVFZfUElOTkFDTEU6Ci0JY2FzZSBCVFRWX1BJTk5BQ0xFUFJPOgorCWNhc2UgQlRUVl9CT0FSRF9NSVJPOgorCWNhc2UgQlRUVl9CT0FSRF9NSVJPUFJPOgorCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRToKKwljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEVQUk86CiAJCS8qIG1pcm8vcGlubmFjbGUgKi8KIAkJbWlyb19waW5uYWNsZV9ncGlvKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9GTFlWSURFT185ODoKLQljYXNlIEJUVFZfTUFYSToKLQljYXNlIEJUVFZfTElGRV9GTFlLSVQ6Ci0JY2FzZSBCVFRWX0ZMWVZJREVPOgotCWNhc2UgQlRUVl9UWVBIT09OX1RWSUVXOgotCWNhc2UgQlRUVl9DSFJPTk9TX1ZTMjoKLQljYXNlIEJUVFZfRkxZVklERU9fOThGTToKLQljYXNlIEJUVFZfRkxZVklERU8yMDAwOgotCWNhc2UgQlRUVl9GTFlWSURFTzk4RVo6Ci0JY2FzZSBCVFRWX0NPTkZFUkVOQ0VUVjoKLQljYXNlIEJUVFZfTElGRVRFQ185NDE1OgorCWNhc2UgQlRUVl9CT0FSRF9GTFlWSURFT185ODoKKwljYXNlIEJUVFZfQk9BUkRfTUFYSToKKwljYXNlIEJUVFZfQk9BUkRfTElGRV9GTFlLSVQ6CisJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPOgorCWNhc2UgQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXOgorCWNhc2UgQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMjoKKwljYXNlIEJUVFZfQk9BUkRfRkxZVklERU9fOThGTToKKwljYXNlIEJUVFZfQk9BUkRfRkxZVklERU8yMDAwOgorCWNhc2UgQlRUVl9CT0FSRF9GTFlWSURFTzk4RVo6CisJY2FzZSBCVFRWX0JPQVJEX0NPTkZFUkVOQ0VUVjoKKwljYXNlIEJUVFZfQk9BUkRfTElGRVRFQ185NDE1OgogCQlmbHl2aWRlb19ncGlvKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9IQVVQUEFVR0U6Ci0JY2FzZSBCVFRWX0hBVVBQQVVHRTg3ODoKLQljYXNlIEJUVFZfSEFVUFBBVUdFUFZSOgorCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0U6CisJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRTg3ODoKKwljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFUFZSOgogCQkvKiBwaWNrIHVwIHNvbWUgY29uZmlnIGluZm9zIGZyb20gdGhlIGVlcHJvbSAqLwogCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7Ci0gICAgICAgICAgICAgICAgaGF1cHBhdWdlX2VlcHJvbShidHYpOworCQloYXVwcGF1Z2VfZWVwcm9tKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9BVkVSTUVESUE5ODoKLQljYXNlIEJUVFZfQVZQSE9ORTk4OgorCWNhc2UgQlRUVl9CT0FSRF9BVkVSTUVESUE5ODoKKwljYXNlIEJUVFZfQk9BUkRfQVZQSE9ORTk4OgogCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CiAJCWF2ZXJtZWRpYV9lZXByb20oYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX1BYQzIwMDoKKwljYXNlIEJUVFZfQk9BUkRfUFhDMjAwOgogCQlpbml0X1BYQzIwMChidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfUElDT0xPX1RFVFJBX0NISVA6CisJY2FzZSBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQOgogCQlwaWNvbG9fdGV0cmFfaW5pdChidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfVkhYOgorCWNhc2UgQlRUVl9CT0FSRF9WSFg6CiAJCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKIAkJYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwogCQlidHYtPm1ib3hfd2UgICAgICA9IDB4MjA7CkBAIC0yODY1LDU4ICszMjQ1LDU4IEBACiAJCWJ0di0+bWJveF9kYXRhICAgID0gMHgxMDsKIAkJYnR2LT5tYm94X21hc2sgICAgPSAweDM4OwogCQlicmVhazsKLQljYXNlIEJUVFZfVk9CSVNfQk9PU1RBUjoKLQljYXNlIEJUVFZfVEVSUkFUVjoKKwljYXNlIEJUVFZfQk9BUkRfVk9CSVNfQk9PU1RBUjoKKwljYXNlIEJUVFZfQk9BUkRfVEVSUkFUVjoKIAkJdGVycmF0ZWNfYWN0aXZlX3JhZGlvX3VwZ3JhZGUoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX01BR0lDVFZJRVcwNjE6CisJY2FzZSBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjE6CiAJCWlmIChidHYtPmNhcmRpZCA9PSAweDMwMDIxNDRmKSB7CiAJCQlidHYtPmhhc19yYWRpbz0xOwogCQkJcHJpbnRrKCJidHR2JWQ6IHJhZGlvIGRldGVjdGVkIGJ5IHN1YnN5c3RlbSBpZCAoQ1BIMDV4KVxuIixidHYtPmMubnIpOwogCQl9CiAJCWJyZWFrOwotICAgICAgIGNhc2UgQlRUVl9TVEIyOgotICAgICAgICAgICAgICAgIGlmIChidHYtPmNhcmRpZCA9PSAweDMwNjAxMjFhKSB7CisgICAgICAgY2FzZSBCVFRWX0JPQVJEX1NUQjI6CisJCWlmIChidHYtPmNhcmRpZCA9PSAweDMwNjAxMjFhKSB7CiAJCQkvKiBGaXggdXAgZW50cnkgZm9yIDNERlggVm9vZG9vVFYgMTAwLAogCQkJICAgd2hpY2ggaXMgYW4gT0VNIFNUQiBjYXJkIHZhcmlhbnQuICovCiAJCQlidHYtPmhhc19yYWRpbz0wOwogCQkJYnR2LT50dW5lcl90eXBlPVRVTkVSX1RFTUlDX05UU0M7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX09TUFJFWTF4MDoKLQljYXNlIEJUVFZfT1NQUkVZMXgwXzg0ODoKLQljYXNlIEJUVFZfT1NQUkVZMTAxXzg0ODoKLQljYXNlIEJUVFZfT1NQUkVZMXgxOgotCWNhc2UgQlRUVl9PU1BSRVkxeDFfU1ZJRDoKLQljYXNlIEJUVFZfT1NQUkVZMnh4OgotCWNhc2UgQlRUVl9PU1BSRVkyeDBfU1ZJRDoKLQljYXNlIEJUVFZfT1NQUkVZMngwOgotCWNhc2UgQlRUVl9PU1BSRVk1MDA6Ci0JY2FzZSBCVFRWX09TUFJFWTU0MDoKLQljYXNlIEJUVFZfT1NQUkVZMjAwMDoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMXgwOgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4OgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkxMDFfODQ4OgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkxeDE6CisJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTF4MV9TVklEOgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyeHg6CisJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEOgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyeDA6CisJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTUwMDoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZNTQwOgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyMDAwOgogCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7Ci0gICAgICAgICAgICAgICAgb3NwcmV5X2VlcHJvbShidHYpOworCQlvc3ByZXlfZWVwcm9tKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9JRFNfRUFHTEU6CisJY2FzZSBCVFRWX0JPQVJEX0lEU19FQUdMRToKIAkJaW5pdF9pZHNfZWFnbGUoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX01PRFRFQ18yMDU6CisJY2FzZSBCVFRWX0JPQVJEX01PRFRFQ18yMDU6CiAJCWJ0dHZfcmVhZGVlKGJ0dixlZXByb21fZGF0YSwweGEwKTsKIAkJbW9kdGVjX2VlcHJvbShidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfTE1MQlQ0OgorCWNhc2UgQlRUVl9CT0FSRF9MTUxCVDQ6CiAJCWluaXRfbG1sYnQ0eChidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfVElCRVRfQ1MxNjoKKwljYXNlIEJUVFZfQk9BUkRfVElCRVRfQ1MxNjoKIAkJdGliZXRDUzE2X2luaXQoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX0tPRElDT01fNDQwMFI6CisJY2FzZSBCVFRWX0JPQVJEX0tPRElDT01fNDQwMFI6CiAJCWtvZGljb200NDAwcl9pbml0KGJ0dik7CiAJCWJyZWFrOwogCX0KIAogCS8qIHBsbCBjb25maWd1cmF0aW9uICovCi0gICAgICAgIGlmICghKGJ0di0+aWQ9PTg0OCAmJiBidHYtPnJldmlzaW9uPT0weDExKSkgeworCWlmICghKGJ0di0+aWQ9PTg0OCAmJiBidHYtPnJldmlzaW9uPT0weDExKSkgewogCQkvKiBkZWZhdWx0cyBmcm9tIGNhcmQgbGlzdCAqLwogCQlpZiAoUExMXzI4ID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ucGxsKSB7CiAJCQlidHYtPnBsbC5wbGxfaWZyZXE9Mjg2MzYzNjM7CkBAIC0yOTI3LDI2ICszMzA3LDI2IEBACiAJCQlidHYtPnBsbC5wbGxfY3J5c3RhbD1CVDg0OF9JRk9STV9YVDE7CiAJCX0KIAkJLyogaW5zbW9kIG9wdGlvbnMgY2FuIG92ZXJyaWRlICovCi0gICAgICAgICAgICAgICAgc3dpdGNoIChwbGxbYnR2LT5jLm5yXSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDogLyogbm9uZSAqLworCQlzd2l0Y2ggKHBsbFtidHYtPmMubnJdKSB7CisJCWNhc2UgMDogLyogbm9uZSAqLwogCQkJYnR2LT5wbGwucGxsX2NyeXN0YWwgPSAwOwogCQkJYnR2LT5wbGwucGxsX2lmcmVxICAgPSAwOwogCQkJYnR2LT5wbGwucGxsX29mcmVxICAgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiAvKiAyOCBNSHogKi8KKwkJCWJyZWFrOworCQljYXNlIDE6IC8qIDI4IE1IeiAqLwogCQljYXNlIDI4OgotICAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5wbGwucGxsX2lmcmVxICAgPSAyODYzNjM2MzsKKwkJCWJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMjg2MzYzNjM7CiAJCQlidHYtPnBsbC5wbGxfb2ZyZXEgICA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBidHYtPnBsbC5wbGxfY3J5c3RhbCA9IEJUODQ4X0lGT1JNX1hUMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogLyogMzUgTUh6ICovCisJCQlidHYtPnBsbC5wbGxfY3J5c3RhbCA9IEJUODQ4X0lGT1JNX1hUMDsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIDM1IE1IeiAqLwogCQljYXNlIDM1OgotICAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5wbGwucGxsX2lmcmVxICAgPSAzNTQ2ODk1MDsKKwkJCWJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMzU0Njg5NTA7CiAJCQlidHYtPnBsbC5wbGxfb2ZyZXEgICA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBidHYtPnBsbC5wbGxfY3J5c3RhbCA9IEJUODQ4X0lGT1JNX1hUMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQkJYnR2LT5wbGwucGxsX2NyeXN0YWwgPSBCVDg0OF9JRk9STV9YVDE7CisJCQlicmVhazsKKwkJfQorCX0KIAlidHYtPnBsbC5wbGxfY3VycmVudCA9IC0xOwogCiAJLyogdHVuZXIgY29uZmlndXJhdGlvbiAoZnJvbSBjYXJkIGxpc3QgLyBhdXRvZGV0ZWN0IC8gaW5zbW9kIG9wdGlvbikgKi8KQEAgLTI5NTUsMjMgKzMzMzUsMjYgQEAKIAogCWlmIChVTlNFVCAhPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX3R5cGUpCiAJCWlmKFVOU0VUID09IGJ0di0+dHVuZXJfdHlwZSkKLSAgICAgICAgCSAgICAgICAJYnR2LT50dW5lcl90eXBlID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl90eXBlOworCQkJYnR2LT50dW5lcl90eXBlID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl90eXBlOwogCWlmIChVTlNFVCAhPSB0dW5lcltidHYtPmMubnJdKQogCQlidHYtPnR1bmVyX3R5cGUgPSB0dW5lcltidHYtPmMubnJdOwogCXByaW50aygiYnR0diVkOiB1c2luZyB0dW5lcj0lZFxuIixidHYtPmMubnIsYnR2LT50dW5lcl90eXBlKTsKLQlpZiAoYnR2LT5waW5uYWNsZV9pZCAhPSBVTlNFVCkKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgQVVEQ19DT05GSUdfUElOTkFDTEUsCi0JCQkJICAgICAgJmJ0di0+cGlubmFjbGVfaWQpOwotCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKLQkgICAgICAgIHN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKLQkgICAgICAgIHR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX1JBRElPIHwgVF9BTkFMT0dfVFYgfCBUX0RJR0lUQUxfVFY7CisJaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgeworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCisJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UVjsKIAkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7CiAJCXR1bl9zZXR1cC5hZGRyID0gYWRkcjsKIAogCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKIAl9CiAKKwlpZiAoYnR2LT5waW5uYWNsZV9pZCAhPSBVTlNFVCkgeworCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBBVURDX0NPTkZJR19QSU5OQUNMRSwKKwkJCQkJCQkmYnR2LT5waW5uYWNsZV9pZCk7CisJfQorCiAJYnR2LT5zdmhzID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5zdmhzOwogCWlmIChzdmhzW2J0di0+Yy5ucl0gIT0gVU5TRVQpCiAJCWJ0di0+c3ZocyA9IHN2aHNbYnR2LT5jLm5yXTsKQEAgLTI5ODIsOCArMzM2NSw4IEBACiAJCWJ0di0+aGFzX3JhZGlvPTE7CiAJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JlbW90ZSkKIAkJYnR2LT5oYXNfcmVtb3RlPTE7Ci0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fZ3Bpb2lycSkKLQkJYnR2LT5ncGlvaXJxPTA7CisJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX2dwaW9pcnEpCisJCWJ0di0+Z3Bpb2lycT0xOwogCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX2hvb2spCiAJCWJ0di0+YXVkaW9faG9vaz1idHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX2hvb2s7CiAKQEAgLTMwMjQsNiArMzQwNyw5IEBACiAJaWYgKDAgPT0gdGRhOTg4NyAmJiAwID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YiAmJgogCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfVERBOTg4NywgIlREQTk4ODciKSA+PTApCiAJCXRkYTk4ODcgPSAxOworCS8qIEh5YnJpZCBEVkIgY2FyZCwgRE9FUyBoYXZlIGEgdGRhOTg4NyAqLworCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFKQorCQl0ZGE5ODg3ID0gMTsKIAlpZigoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszKSB8fAogCSAgIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszKSB8fAogCSAgIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfUEhJTElQU19GTTEyNTZfSUgzKSB8fApAQCAtMzA0NSwxMSArMzQzMSwxMSBAQAogCX0gZWxzZSBpZiAoc3RybmNtcCgmKGVlcHJvbV9kYXRhWzB4MWVdKSwiQWxwcyBUU0JCNSIsMTApID09MCkgewogCQlidHYtPnR1bmVyX3R5cGU9VFVORVJfQUxQU19UU0JCNV9QQUxfSTsKIAkJcHJpbnRrKCJidHR2JWQ6IE1vZHRlYzogVHVuZXIgYXV0b2RldGVjdGVkIGJ5IGVlcHJvbTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGJ0di0+Yy5uciwmZWVwcm9tX2RhdGFbMHgxZV0pOwotICAgICAgICB9IGVsc2UgaWYgKHN0cm5jbXAoJihlZXByb21fZGF0YVsweDFlXSksIlBoaWxpcHMgRk0xMjQ2IiwxNCkgPT0wKSB7Ci0gICAgICAgICAgICAgICAgYnR2LT50dW5lcl90eXBlPVRVTkVSX1BISUxJUFNfTlRTQzsKLSAgICAgICAgICAgICAgICBwcmludGsoImJ0dHYlZDogTW9kdGVjOiBUdW5lciBhdXRvZGV0ZWN0ZWQgYnkgZWVwcm9tOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7CisJCSAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoJihlZXByb21fZGF0YVsweDFlXSksIlBoaWxpcHMgRk0xMjQ2IiwxNCkgPT0wKSB7CisJCWJ0di0+dHVuZXJfdHlwZT1UVU5FUl9QSElMSVBTX05UU0M7CisJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFR1bmVyIGF1dG9kZXRlY3RlZCBieSBlZXByb206ICVzXG4iLAorCQkgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJidHR2JWQ6IE1vZHRlYzogVW5rbm93biBUdW5lclN0cmluZzogJXNcbiIsCiAJCSAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKQEAgLTMxMTQsNyArMzUwMCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwdnJfYWx0ZXJhX2xvYWQoc3RydWN0IGJ0dHYgKmJ0diwgdTggKm1pY3JvLCB1MzIgbWljcm9sZW4pCiB7CiAJdTMyIG47Ci0gIAl1OCBiaXRzOworCXU4IGJpdHM7CiAJaW50IGk7CiAKIAlncGlvX2lub3V0KDB4ZmZmZmZmLEJUVFZfQUxUX0RBVEF8QlRUVl9BTFRfRENMS3xCVFRWX0FMVF9OQ09ORklHKTsKQEAgLTMxNTAsMTkgKzM1MzYsMTkgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgcHZyX2Jvb3Qoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLSAgICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwogCWludCByYzsKIAogCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJoY3dhbWMucmJmIiwgJmJ0di0+Yy5wY2ktPmRldik7CiAJaWYgKHJjICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBubyBhbHRlcmEgZmlybXdhcmUgW3ZpYSBob3RwbHVnXVxuIiwKIAkJICAgICAgIGJ0di0+Yy5ucik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICB9CisJCXJldHVybiByYzsKKwl9CiAJcmMgPSBwdnJfYWx0ZXJhX2xvYWQoYnR2LCBmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogYWx0ZXJhIGZpcm13YXJlIHVwbG9hZCAlc1xuIiwKIAkgICAgICAgYnR2LT5jLm5yLCAocmMgPCAwKSA/ICJmYWlsZWQiIDogIm9rIik7Ci0gICAgICAgIHJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCXJldHVybiByYzsKIH0KIApAQCAtMzE3NiwzMyArMzU2MiwzMyBAQAogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsID0gMDsKIAogICAgICAgIGlmIChidHYtPmMudHlwZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAvKiB0aGlzIG1pZ2h0IGJlIGFuIGFudGlxdWUuLi4gY2hlY2sgZm9yIE1NQUMgbGFiZWwgaW4gZWVwcm9tICovCi0gICAgICAgICAgICAgICBpZiAoKGVlWzBdPT0nTScpICYmIChlZVsxXT09J00nKSAmJiAoZWVbMl09PSdBJykgJiYgKGVlWzNdPT0nQycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tzdW0gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPTA7IGk8MjE7IGkrKykKKwkgICAgICAgLyogdGhpcyBtaWdodCBiZSBhbiBhbnRpcXVlLi4uIGNoZWNrIGZvciBNTUFDIGxhYmVsIGluIGVlcHJvbSAqLworCSAgICAgICBpZiAoKGVlWzBdPT0nTScpICYmIChlZVsxXT09J00nKSAmJiAoZWVbMl09PSdBJykgJiYgKGVlWzNdPT0nQycpKSB7CisJCSAgICAgICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtID0gMDsKKwkJICAgICAgIGZvciAoaSA9MDsgaTwyMTsgaSsrKQogCQkJICAgICAgIGNoZWNrc3VtICs9IGVlW2ldOwotICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tzdW0gIT0gZWVbMjFdKQorCQkgICAgICAgaWYgKGNoZWNrc3VtICE9IGVlWzIxXSkKIAkJCSAgICAgICByZXR1cm47Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMXgwXzg0ODsKKwkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4OwogCQkgICAgICAgZm9yIChpID0gMTI7IGkgPCAyMTsgaSsrKQogCQkJICAgICAgIHNlcmlhbCAqPSAxMCwgc2VyaWFsICs9IGVlW2ldIC0gJzAnOwotICAgICAgICAgICAgICAgfQorCSAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKIAkgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZTsKLSAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSA0KjE2OworCSAgICAgICBpbnQgb2Zmc2V0ID0gNCoxNjsKIAotICAgICAgICAgICAgICAgZm9yKDsgb2Zmc2V0IDwgOCoxNjsgb2Zmc2V0ICs9IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGNoZWNrc3VtID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IHRoZSBjaGVja3N1bSAqLwotICAgICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGk8MTQ7IGkrKykgY2hlY2tzdW0gKz0gZWVbaStvZmZzZXRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtID0gfmNoZWNrc3VtOyAgLyogbm8gaWRlYSB3aHkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoY2hlY2tzdW0+PjgpJjB4MEZGKSA9PSBlZVtvZmZzZXQrMTRdKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoZWNrc3VtICYgMHgwRkYpID09IGVlW29mZnNldCsxNV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KKwkgICAgICAgZm9yKDsgb2Zmc2V0IDwgOCoxNjsgb2Zmc2V0ICs9IDE2KSB7CisJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBjaGVja3N1bSA9IDA7CisJCSAgICAgICAvKiB2ZXJpZnkgdGhlIGNoZWNrc3VtICovCisJCSAgICAgICBmb3IoaSA9IDA7IGk8MTQ7IGkrKykgY2hlY2tzdW0gKz0gZWVbaStvZmZzZXRdOworCQkJICAgICAgIGNoZWNrc3VtID0gfmNoZWNrc3VtOyAgLyogbm8gaWRlYSB3aHkgKi8KKwkJCSAgICAgICBpZiAoKCgoY2hlY2tzdW0+PjgpJjB4MEZGKSA9PSBlZVtvZmZzZXQrMTRdKSAmJgorCQkJCSAgICgoY2hlY2tzdW0gJiAweDBGRikgPT0gZWVbb2Zmc2V0KzE1XSkpIHsKKwkJCSAgICAgICBicmVhazsKKwkJICAgICAgIH0KKwkgICAgICAgfQogCi0gICAgICAgICAgICAgICBpZiAob2Zmc2V0ID49IDgqMTYpCisJICAgICAgIGlmIChvZmZzZXQgPj0gOCoxNikKIAkJICAgICAgIHJldHVybjsKIAogCSAgICAgICAvKiBmb3VuZCBhIHZhbGlkIGRlc2NyaXB0b3IgKi8KQEAgLTMyMTIsNDcgKzM1OTgsNDcgQEAKIAogCSAgICAgICAvKiA4NDggYmFzZWQgKi8KIAkgICAgICAgY2FzZSAweDAwMDQ6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMXgwXzg0ODsKKwkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4OwogCQkgICAgICAgYnJlYWs7CiAJICAgICAgIGNhc2UgMHgwMDA1OgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTEwMV84NDg7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMTAxXzg0ODsKIAkJICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAvKiA4NzggYmFzZWQgKi8KKwkgICAgICAgLyogODc4IGJhc2VkICovCiAJICAgICAgIGNhc2UgMHgwMDEyOgogCSAgICAgICBjYXNlIDB4MDAxMzoKLQkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9PU1BSRVkxeDA7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgwOwogCQkgICAgICAgYnJlYWs7CiAJICAgICAgIGNhc2UgMHgwMDE0OgogCSAgICAgICBjYXNlIDB4MDAxNToKLQkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9PU1BSRVkxeDE7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgxOwogCQkgICAgICAgYnJlYWs7CiAJICAgICAgIGNhc2UgMHgwMDE2OgogCSAgICAgICBjYXNlIDB4MDAxNzoKIAkgICAgICAgY2FzZSAweDAwMjA6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMXgxX1NWSUQ7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgxX1NWSUQ7CiAJCSAgICAgICBicmVhazsKIAkgICAgICAgY2FzZSAweDAwMTg6CiAJICAgICAgIGNhc2UgMHgwMDE5OgogCSAgICAgICBjYXNlIDB4MDAxRToKIAkgICAgICAgY2FzZSAweDAwMUY6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMnh4OworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTJ4eDsKIAkJICAgICAgIGJyZWFrOwogCSAgICAgICBjYXNlIDB4MDAxQToKIAkgICAgICAgY2FzZSAweDAwMUI6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMngwX1NWSUQ7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMngwX1NWSUQ7CiAJCSAgICAgICBicmVhazsKIAkgICAgICAgY2FzZSAweDAwNDA6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZNTAwOworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTUwMDsKIAkJICAgICAgIGJyZWFrOwogCSAgICAgICBjYXNlIDB4MDA1MDoKIAkgICAgICAgY2FzZSAweDAwNTY6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZNTQwOworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTU0MDsKIAkJICAgICAgIC8qIGJ0dHZfb3NwcmV5XzU0MF9pbml0KGJ0dik7ICovCiAJCSAgICAgICBicmVhazsKIAkgICAgICAgY2FzZSAweDAwNjA6CiAJICAgICAgIGNhc2UgMHgwMDcwOgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTJ4MDsKKwkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkyeDA7CiAJCSAgICAgICAvKiBlbmFibGUgb3V0cHV0IG9uIHNlbGVjdCBjb250cm9sIGxpbmVzICovCiAJCSAgICAgICBncGlvX2lub3V0KDB4ZmZmZmZmLDB4MDAwMzAzKTsKIAkJICAgICAgIGJyZWFrOwpAQCAtMzI3NCwyNyArMzY2MCwyNyBAQAogLyogQVZlcm1lZGlhIHNwZWNpZmljIHN0dWZmLCBmcm9tICBia3RyX2NhcmQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogc3RhdGljIGludCB0dW5lcl8wX3RhYmxlW10gPSB7Ci0gICAgICAgIFRVTkVSX1BISUxJUFNfTlRTQywgIFRVTkVSX1BISUxJUFNfUEFMIC8qIFBBTC1CRyovLAotICAgICAgICBUVU5FUl9QSElMSVBTX1BBTCwgICBUVU5FUl9QSElMSVBTX1BBTCAvKiBQQUwtSSovLAotICAgICAgICBUVU5FUl9QSElMSVBTX1BBTCwgICBUVU5FUl9QSElMSVBTX1BBTCwKLSAgICAgICAgVFVORVJfUEhJTElQU19TRUNBTSwgVFVORVJfUEhJTElQU19TRUNBTSwKLSAgICAgICAgVFVORVJfUEhJTElQU19TRUNBTSwgVFVORVJfUEhJTElQU19QQUwsCisJVFVORVJfUEhJTElQU19OVFNDLCAgVFVORVJfUEhJTElQU19QQUwgLyogUEFMLUJHKi8sCisJVFVORVJfUEhJTElQU19QQUwsICAgVFVORVJfUEhJTElQU19QQUwgLyogUEFMLUkqLywKKwlUVU5FUl9QSElMSVBTX1BBTCwgICBUVU5FUl9QSElMSVBTX1BBTCwKKwlUVU5FUl9QSElMSVBTX1NFQ0FNLCBUVU5FUl9QSElMSVBTX1NFQ0FNLAorCVRVTkVSX1BISUxJUFNfU0VDQU0sIFRVTkVSX1BISUxJUFNfUEFMLAogCVRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszIH07CiAKIHN0YXRpYyBpbnQgdHVuZXJfMV90YWJsZVtdID0gewotICAgICAgICBUVU5FUl9URU1JQ19OVFNDLCAgVFVORVJfVEVNSUNfUEFMLAorCVRVTkVSX1RFTUlDX05UU0MsICBUVU5FUl9URU1JQ19QQUwsCiAJVFVORVJfVEVNSUNfUEFMLCAgIFRVTkVSX1RFTUlDX1BBTCwKIAlUVU5FUl9URU1JQ19QQUwsICAgVFVORVJfVEVNSUNfUEFMLAotICAgICAgICBUVU5FUl9URU1JQ180MDEyRlk1LCBUVU5FUl9URU1JQ180MDEyRlk1LCAvKiBUVU5FUl9URU1JQ19TRUNBTSAqLwotICAgICAgICBUVU5FUl9URU1JQ180MDEyRlk1LCBUVU5FUl9URU1JQ19QQUx9OworCVRVTkVSX1RFTUlDXzQwMTJGWTUsIFRVTkVSX1RFTUlDXzQwMTJGWTUsIC8qIFRVTkVSX1RFTUlDX1NFQ0FNICovCisJVFVORVJfVEVNSUNfNDAxMkZZNSwgVFVORVJfVEVNSUNfUEFMfTsKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGF2ZXJtZWRpYV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0dikKIHsKLSAgICAgICAgaW50IHR1bmVyX21ha2UsdHVuZXJfdHZfZm0sdHVuZXJfZm9ybWF0LHR1bmVyPTA7CisJaW50IHR1bmVyX21ha2UsdHVuZXJfdHZfZm0sdHVuZXJfZm9ybWF0LHR1bmVyPTA7CiAKIAl0dW5lcl9tYWtlICAgICAgPSAoZWVwcm9tX2RhdGFbMHg0MV0gJiAweDcpOwotICAgICAgICB0dW5lcl90dl9mbSAgICAgPSAoZWVwcm9tX2RhdGFbMHg0MV0gJiAweDE4KSA+PiAzOwotICAgICAgICB0dW5lcl9mb3JtYXQgICAgPSAoZWVwcm9tX2RhdGFbMHg0Ml0gJiAweGYwKSA+PiA0OworCXR1bmVyX3R2X2ZtICAgICA9IChlZXByb21fZGF0YVsweDQxXSAmIDB4MTgpID4+IDM7CisJdHVuZXJfZm9ybWF0ICAgID0gKGVlcHJvbV9kYXRhWzB4NDJdICYgMHhmMCkgPj4gNDsKIAlidHYtPmhhc19yZW1vdGUgPSAoZWVwcm9tX2RhdGFbMHg0Ml0gJiAweDAxKTsKIAogCWlmICh0dW5lcl9tYWtlID09IDAgfHwgdHVuZXJfbWFrZSA9PSAyKQpAQCAtMzMyNSwxMyArMzcxMSwxMyBAQAogewogCS8qIGZpeCB1cCBvdXIgY2FyZCBlbnRyeSAqLwogCWlmKG5vcm09PVZJREVPX01PREVfTlRTQykgewotCQlidHR2X3R2Y2FyZHNbQlRUVl9WT09ET09UVl9GTV0uYXVkaW9tdXhbMF09MHg5NTdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFs0XT0weDk1N2ZmZjsKKwkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzBdPTB4OTU3ZmZmOworCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uYXVkaW9tdXhbNF09MHg5NTdmZmY7CiAJCWRwcmludGsoImJ0dHZfdGRhOTg4MF9zZXRub3JtIHRvIE5UU0NcbiIpOwogCX0KIAllbHNlIHsKLQkgICAgICAgIGJ0dHZfdHZjYXJkc1tCVFRWX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFswXT0weDk0N2ZmZjsKLSAgICAgICAgICAgICAgICBidHR2X3R2Y2FyZHNbQlRUVl9WT09ET09UVl9GTV0uYXVkaW9tdXhbNF09MHg5NDdmZmY7CisJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFswXT0weDk0N2ZmZjsKKwkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzRdPTB4OTQ3ZmZmOwogCQlkcHJpbnRrKCJidHR2X3RkYTk4ODBfc2V0bm9ybSB0byBQQUxcbiIpOwogCX0KIAkvKiBzZXQgR1BJTyBhY2NvcmRpbmcgKi8KQEAgLTMzNDIsNyArMzcyOCw3IEBACiAKIC8qCiAgKiByZXNldC9lbmFibGUgdGhlIE1TUCBvbiBzb21lIEhhdXBwYXVnZSBjYXJkcwotICogVGhhbmtzIHRvIEt59nN0aSBN5Gxra2kgKGttYWxra2lAY2MuaHV0LmZpKSEKKyAqIFRoYW5rcyB0byBLecO2c3RpIE3DpGxra2kgKGttYWxra2lAY2MuaHV0LmZpKSEKICAqCiAgKiBIYXVwcGF1Z2U6ICBwaW4gIDUKICAqIFZvb2RvbzogICAgIHBpbiAyMApAQCAtMzM1Myw3ICszNzM5LDcgQEAKIAogCWdwaW9faW5vdXQobWFzayxtYXNrKTsKIAlncGlvX2JpdHMobWFzaywwKTsKLSAgICAgICAgdWRlbGF5KDI1MDApOworCXVkZWxheSgyNTAwKTsKIAlncGlvX2JpdHMobWFzayxtYXNrKTsKIAogCWlmIChidHR2X2dwaW8pCkBAIC0zNDI5LDcgKzM4MTUsNyBAQAogCXVkZWxheSgxMCk7CiAJZ3Bpb193cml0ZSgxPDwyKTsKIAotICAgICAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YWxzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmFscyk7IGkrKykgewogCQl0bXA9YnR0dl9JMkNXcml0ZShidHYsMHgxRSwwLHZhbHNbaV0sMSk7CiAJCWlmICh0bXAgIT0gLTEpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KQEAgLTM4NzIsMzAgKzQyNTgsMzAgQEAKIHN0YXRpYyB2b2lkCiBsdDk0MTVfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQogewotICAgICAgICBpbnQgdmFsID0gMDsKKwlpbnQgdmFsID0gMDsKIAotICAgICAgICBpZiAoZ3Bpb19yZWFkKCkgJiAweDQwMDApIHsKKwlpZiAoZ3Bpb19yZWFkKCkgJiAweDQwMDApIHsKIAkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk87CiAJCXJldHVybjsKIAl9CiAKLSAgICAgICAgaWYgKHNldCkgewotICAgICAgICAgICAgICAgIGlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpICAvKiBBMiBTQVAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDB4MDA4MDsKKwlpZiAoc2V0KSB7CisJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpICAvKiBBMiBTQVAgKi8KKwkJCXZhbCA9IDB4MDA4MDsKIAkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIC8qIEEyIHN0ZXJlbyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMHgwODgwOwotICAgICAgICAgICAgICAgIGlmICgodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKSB8fAorCQkJdmFsID0gMHgwODgwOworCQlpZiAoKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkgfHwKIAkJICAgICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykpCiAJCQl2YWwgPSAwOwogCQlncGlvX2JpdHMoMHgwODgwLCB2YWwpOwotICAgICAgICAgICAgICAgIGlmIChidHR2X2dwaW8pCi0gICAgICAgICAgICAgICAgICAgICAgICBidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJsdDk0MTUiKTsKLSAgICAgICAgfSBlbHNlIHsKKwkJaWYgKGJ0dHZfZ3BpbykKKwkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImx0OTQxNSIpOworCX0gZWxzZSB7CiAJCS8qIGF1dG9kZXRlY3QgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBjYXJkIDotKCAqLwotICAgICAgICAgICAgICAgIHYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKKwkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAogCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwkJcmV0dXJuOworCX0KIH0KIAogLyogVERBOTgyMSBvbiBUZXJyYVRWKyBCdDg0OCwgQnQ4NzggKi8KQEAgLTQwMTgsMjYgKzQ0MDQsMjYgQEAKIHN0YXRpYyB2b2lkCiB3aW5kdnJfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQogewotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAwOwogCi0gICAgICAgIGlmIChzZXQpIHsKLSAgICAgICAgICAgICAgICBpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAweDA0MDAwMDsKLSAgICAgICAgICAgICAgICBpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMDsKLSAgICAgICAgICAgICAgICBpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMHgxMDAwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAwOwotICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKKwlpZiAoc2V0KSB7CisJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykKKwkJCXZhbCA9IDB4MDQwMDAwOworCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKQorCQkJdmFsID0gMDsKKwkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMikKKwkJCXZhbCA9IDB4MTAwMDAwOworCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykKKwkJCXZhbCA9IDA7CisJCWlmICh2YWwpIHsKIAkJCWdwaW9fYml0cygweDE0MDAwMCwgdmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidHR2X2dwaW8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0dHZfZ3Bpb190cmFja2luZyhidHYsIndpbmR2ciIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7Ci0gICAgICAgIH0KKwkJCWlmIChidHR2X2dwaW8pCisJCQkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwid2luZHZyIik7CisJCX0KKwl9IGVsc2UgeworCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CisJCQkgIFZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7CisJfQogfQogCiAvKgpAQCAtNDI4MCwxMCArNDY2NiwxMCBAQAogc3RhdGljIHZvaWQgeGd1YXJkX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7CiAJc3RhdGljIGNvbnN0IGludCBtYXNrc1tdID0gewotICAgICAgICAgICAgICAgIEVOQjAsIEVOQjB8SU4wMCwgRU5CMHxJTjEwLCBFTkIwfElOMDB8SU4xMCwKLSAgICAgICAgICAgICAgICBFTkEwLCBFTkEwfElOMDAsIEVOQTB8SU4xMCwgRU5BMHxJTjAwfElOMTAsCi0gICAgICAgICAgICAgICAgRU5CMSwgRU5CMXxJTjAxLCBFTkIxfElOMTEsIEVOQjF8SU4wMXxJTjExLAotICAgICAgICAgICAgICAgIEVOQTEsIEVOQTF8SU4wMSwgRU5BMXxJTjExLCBFTkExfElOMDF8SU4xMSwKKwkJRU5CMCwgRU5CMHxJTjAwLCBFTkIwfElOMTAsIEVOQjB8SU4wMHxJTjEwLAorCQlFTkEwLCBFTkEwfElOMDAsIEVOQTB8SU4xMCwgRU5BMHxJTjAwfElOMTAsCisJCUVOQjEsIEVOQjF8SU4wMSwgRU5CMXxJTjExLCBFTkIxfElOMDF8SU4xMSwKKwkJRU5BMSwgRU5BMXxJTjAxLCBFTkExfElOMTEsIEVOQTF8SU4wMXxJTjExLAogCX07CiAJZ3Bpb193cml0ZShtYXNrc1tpbnB1dCUxNl0pOwogfQpAQCAtNDM4OCwxMCArNDc3NCwxMCBAQAogCiBzdGF0aWMgdm9pZCBQWEMyMDBfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKLSAgICAgICAgaW50IHJjOworCWludCByYzsKIAlsb25nIG11eDsKIAlpbnQgYml0bWFzazsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZbMl07CisJdW5zaWduZWQgY2hhciBidWZbMl07CiAKIAkvKiBSZWFkIFBJQyBjb25maWcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBQWEMyMDBGICovCiAJLyogUFhfSTJDX0NNRF9DRkcqLwpAQCAtNDQyMSwxNCArNDgwNywxNCBAQAogCS8qIGJpdG1hc2s9MHgzMGY7ICovCiAJYml0bWFzaz0weDMwMjsKIAkvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBQWEMyMDBBICovCi0gCWlmIChidHYtPmNhcmRpZCA9PSBQWF9QWEMyMDBBX0NBUkRJRCkgIHsKKwlpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpICB7CiAJICAgYml0bWFzayBePSAweDE4MDsgLyogdXNlIDcgYW5kIDksIG5vdCA4IGFuZCA5ICovCiAJICAgYml0bWFzayB8PSA3PDw0OyAvKiB0aGUgREFDICovCiAJfQogCWJ0d3JpdGUoYml0bWFzaywgQlQ4NDhfR1BJT19PVVRfRU4pOwogCiAJYml0bWFzayA9IGJ0cmVhZChCVDg0OF9HUElPX0RBVEEpOwotIAlpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpCisJaWYgKGJ0di0+Y2FyZGlkID09IFBYX1BYQzIwMEFfQ0FSRElEKQogCSAgYml0bWFzayA9IChiaXRtYXNrICYgfjB4MjgwKSB8ICgobXV4ICYgMikgPDwgOCkgfCAoKG11eCAmIDEpIDw8IDcpOwogCWVsc2UgLyogb2xkZXIgZGV2aWNlICovCiAJICBiaXRtYXNrID0gKGJpdG1hc2sgJiB+MHgzMDApIHwgKChtdXggJiAzKSA8PCA4KTsKQEAgLTQ0NDEsNyArNDgyNyw3IEBACiAJICoKIAkgKiBuZWVkZWQgYmVjYXVzZSBidHR2LWRyaXZlciBzZXRzIG11eCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCiAJICovCi0gCWlmIChidHYtPmNhcmRpZCA9PSBQWF9QWEMyMDBBX0NBUkRJRCkKKwlpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpCiAJICBidGFvcigyPDw1LCB+QlQ4NDhfSUZPUk1fTVVYU0VMLCBCVDg0OF9JRk9STSk7CiAJZWxzZSAvKiBvbGRlciBkZXZpY2UgKi8KIAkgIGJ0YW5kKH5CVDg0OF9JRk9STV9NVVhTRUwsQlQ4NDhfSUZPUk0pOwpAQCAtNDQ4NSwxMCArNDg3MSw5IEBACiAJfQogCWlmIChVTlNFVCAhPSBsYXRlbmN5KQogCQlwcmludGsoS0VSTl9JTkZPICJidHR2OiBwY2kgbGF0ZW5jeSBmaXh1cCBbJWRdXG4iLGxhdGVuY3kpOwotCi0Jd2hpbGUgKChkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0MSwgZGV2KSkpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGI7CisJCXVuc2lnbmVkIGNoYXIgYjsKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUzLCAmYik7CiAJCWlmIChidHR2X2RlYnVnKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogSG9zdCBicmlkZ2U6IDgyNDQxRlggTmF0b21hLCAiCkBAIC00NDk4LDcgKzQ4ODMsNyBAQAogCiBpbnQgX19kZXZpbml0IGJ0dHZfaGFuZGxlX2NoaXBzZXQoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLSAJdW5zaWduZWQgY2hhciBjb21tYW5kOworCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKIAogCWlmICghdHJpdG9uMSAmJiAhdnNmeCAmJiBVTlNFVCA9PSBsYXRlbmN5KQogCQlyZXR1cm4gMDsKQEAgLTQ1MTksMTMgKzQ5MDQsMTMgQEAKIAkJCWJ0di0+dHJpdG9uMSA9IEJUODQ4X0lOVF9FVEJGOwogCX0gZWxzZSB7CiAJCS8qIGJ0ODc4IGhhcyBhIGJpdCBpbiB0aGUgcGNpIGNvbmZpZyBzcGFjZSBmb3IgaXQgKi8KLSAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfYnl0ZShidHYtPmMucGNpLCBCVDg3OF9ERVZDVFJMLCAmY29tbWFuZCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJ0di0+Yy5wY2ksIEJUODc4X0RFVkNUUkwsICZjb21tYW5kKTsKIAkJaWYgKHRyaXRvbjEpCiAJCQljb21tYW5kIHw9IEJUODc4X0VOX1RCRlg7CiAJCWlmICh2c2Z4KQogCQkJY29tbWFuZCB8PSBCVDg3OF9FTl9WU0ZYOwotICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZShidHYtPmMucGNpLCBCVDg3OF9ERVZDVFJMLCBjb21tYW5kKTsKLSAgICAgICAgfQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgQlQ4NzhfREVWQ1RSTCwgY29tbWFuZCk7CisJfQogCWlmIChVTlNFVCAhPSBsYXRlbmN5KQogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdGVuY3kpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCmluZGV4IGQ1MzhhOTk0Li4wMDA1NzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCkBAIC0zLDcgKzMsNyBAQAogICAgIGJ0dHYgLSBCdDg0OCBmcmFtZSBncmFiYmVyIGRyaXZlcgogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoICBNZXR6bGVyIDxyamttQHRocC51bmkta29lbG4uZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIDxtb2NtQHRocC51bmkta29lbG4uZGU+CisJCQkgICAmIE1hcmN1cyBNZXR6bGVyIDxtb2NtQHRocC51bmkta29lbG4uZGU+CiAgICAgKGMpIDE5OTktMjAwMiBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CiAKICAgICBzb21lIHY0bDIgY29kZSBsaW5lcyBhcmUgdGFrZW4gZnJvbSBKdXN0aW4ncyBidHR2MiBkcml2ZXIgd2hpY2ggaXMKQEAgLTE5Miw4ICsxOTIsOCBAQAogCiBjb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gYnR0dl90dm5vcm1zW10gPSB7CiAJLyogUEFMLUJER0hJICovCi0gICAgICAgIC8qIG1heC4gYWN0aXZlIHZpZGVvIGlzIGFjdHVhbGx5IDkyMiwgYnV0IDkyNCBpcyBkaXZpc2libGUgYnkgNCBhbmQgMyEgKi8KLSAJLyogYWN0dWFsbHksIG1heCBhY3RpdmUgUEFMIHdpdGggSFNDQUxFPTAgaXMgOTQ4LCBOVFNDIGlzIDc2OCAtIG5pbCAqLworCS8qIG1heC4gYWN0aXZlIHZpZGVvIGlzIGFjdHVhbGx5IDkyMiwgYnV0IDkyNCBpcyBkaXZpc2libGUgYnkgNCBhbmQgMyEgKi8KKwkvKiBhY3R1YWxseSwgbWF4IGFjdGl2ZSBQQUwgd2l0aCBIU0NBTEU9MCBpcyA5NDgsIE5UU0MgaXMgNzY4IC0gbmlsICovCiAJewogCQkudjRsMl9pZCAgICAgICAgPSBWNEwyX1NURF9QQUwsCiAJCS5uYW1lICAgICAgICAgICA9ICJQQUwiLApAQCAtODA2LDkgKzgwNiw5IEBACiAJCQlidHYtPmMubnIsdGFibGVfaWR4KTsKIAogCQkvKiB0aW1pbmcgY2hhbmdlLi4ucmVzZXQgdGltaW5nIGdlbmVyYXRvciBhZGRyZXNzICovCi0gICAgICAgCQlidHdyaXRlKDB4MDAsIEJUODQ4X1RHQ1RSTCk7Ci0gICAgICAgCQlidHdyaXRlKDB4MDIsIEJUODQ4X1RHQ1RSTCk7Ci0gICAgICAgCQlidHdyaXRlKDB4MDAsIEJUODQ4X1RHQ1RSTCk7CisJCWJ0d3JpdGUoMHgwMCwgQlQ4NDhfVEdDVFJMKTsKKwkJYnR3cml0ZSgweDAyLCBCVDg0OF9UR0NUUkwpOworCQlidHdyaXRlKDB4MDAsIEJUODQ4X1RHQ1RSTCk7CiAKIAkJbGVuPVNSQU1fVGFibGVbdGFibGVfaWR4XVswXTsKIAkJZm9yKGkgPSAxOyBpIDw9IGxlbjsgaSsrKQpAQCAtODQ3LDcgKzg0Nyw3IEBACiAKIAkvKiAtMTI4IHRvIDEyNyAqLwogCXZhbHVlID0gKGh1ZSA+PiA4KSAtIDEyODsKLSAgICAgICAgYnR3cml0ZSh2YWx1ZSAmIDB4ZmYsIEJUODQ4X0hVRSk7CisJYnR3cml0ZSh2YWx1ZSAmIDB4ZmYsIEJUODQ4X0hVRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJ0ODQ4X2NvbnRyYXN0KHN0cnVjdCBidHR2ICpidHYsIGludCBjb250KQpAQCAtODU5LDkgKzg1OSw5IEBACiAJLyogMC01MTEgKi8KIAl2YWx1ZSA9IChjb250ICA+PiA3KTsKIAloaWJpdCA9ICh2YWx1ZSA+PiA2KSAmIDQ7Ci0gICAgICAgIGJ0d3JpdGUodmFsdWUgJiAweGZmLCBCVDg0OF9DT05UUkFTVF9MTyk7Ci0gICAgICAgIGJ0YW9yKGhpYml0LCB+NCwgQlQ4NDhfRV9DT05UUk9MKTsKLSAgICAgICAgYnRhb3IoaGliaXQsIH40LCBCVDg0OF9PX0NPTlRST0wpOworCWJ0d3JpdGUodmFsdWUgJiAweGZmLCBCVDg0OF9DT05UUkFTVF9MTyk7CisJYnRhb3IoaGliaXQsIH40LCBCVDg0OF9FX0NPTlRST0wpOworCWJ0YW9yKGhpYml0LCB+NCwgQlQ4NDhfT19DT05UUk9MKTsKIH0KIAogc3RhdGljIHZvaWQgYnQ4NDhfc2F0KHN0cnVjdCBidHR2ICpidHYsIGludCBjb2xvcikKQEAgLTg3MywxMiArODczLDEyIEBACiAJLyogMC01MTEgZm9yIHRoZSBjb2xvciAqLwogCXZhbF91ICAgPSAoKGNvbG9yICogYnR2LT5vcHRfdXZfcmF0aW8pIC8gNTApID4+IDc7CiAJdmFsX3YgICA9ICgoKGNvbG9yICogKDEwMCAtIGJ0di0+b3B0X3V2X3JhdGlvKSAvIDUwKSA+PjcpKjE4MEwpLzI1NDsKLSAgICAgICAgaGliaXRzICA9ICh2YWxfdSA+PiA3KSAmIDI7CisJaGliaXRzICA9ICh2YWxfdSA+PiA3KSAmIDI7CiAJaGliaXRzIHw9ICh2YWxfdiA+PiA4KSAmIDE7Ci0gICAgICAgIGJ0d3JpdGUodmFsX3UgJiAweGZmLCBCVDg0OF9TQVRfVV9MTyk7Ci0gICAgICAgIGJ0d3JpdGUodmFsX3YgJiAweGZmLCBCVDg0OF9TQVRfVl9MTyk7Ci0gICAgICAgIGJ0YW9yKGhpYml0cywgfjMsIEJUODQ4X0VfQ09OVFJPTCk7Ci0gICAgICAgIGJ0YW9yKGhpYml0cywgfjMsIEJUODQ4X09fQ09OVFJPTCk7CisJYnR3cml0ZSh2YWxfdSAmIDB4ZmYsIEJUODQ4X1NBVF9VX0xPKTsKKwlidHdyaXRlKHZhbF92ICYgMHhmZiwgQlQ4NDhfU0FUX1ZfTE8pOworCWJ0YW9yKGhpYml0cywgfjMsIEJUODQ4X0VfQ09OVFJPTCk7CisJYnRhb3IoaGliaXRzLCB+MywgQlQ4NDhfT19DT05UUk9MKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTg5MSw3ICs4OTEsNyBAQAogCWlmIChpbnB1dCA+PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICAgLyogbmVlZGVkIGJ5IFJlbW90ZVZpZGVvIE1YICovCisJLyogbmVlZGVkIGJ5IFJlbW90ZVZpZGVvIE1YICovCiAJbWFzazIgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrMjsKIAlpZiAobWFzazIpCiAJCWdwaW9faW5vdXQobWFzazIsbWFzazIpOwpAQCAtOTY0LDcgKzk2NCw3IEBACiAJYy5ub3JtICAgID0gYnR2LT50dm5vcm07CiAJYy5jaGFubmVsID0gYnR2LT5pbnB1dDsKIAlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LFZJRElPQ1NDSEFOLCZjKTsKLQlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9WT09ET09UVl9GTSkKKwlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9CT0FSRF9WT09ET09UVl9GTSkKIAkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LGMubm9ybSk7CiB9CiAKQEAgLTk4OCw3ICs5ODgsNyBAQAogCWJ0ODQ4QV9zZXRfdGltaW5nKGJ0dik7CiAKIAlzd2l0Y2ggKGJ0di0+Yy50eXBlKSB7Ci0JY2FzZSBCVFRWX1ZPT0RPT1RWX0ZNOgorCWNhc2UgQlRUVl9CT0FSRF9WT09ET09UVl9GTToKIAkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LG5vcm0pOwogCQlicmVhazsKIAl9CkBAIC0xMDU1LDIyICsxMDU1LDIyIEBACiAJYnR3cml0ZShCVDg0OF9DT0xPUl9DVExfR0FNTUEsIEJUODQ4X0NPTE9SX0NUTCk7CiAJYnR3cml0ZShCVDg0OF9JRk9STV9YVEFVVE8gfCBCVDg0OF9JRk9STV9BVVRPLCBCVDg0OF9JRk9STSk7CiAKLSAgICAgICAgLyogc2V0IHBsYW5hciBhbmQgcGFja2VkIG1vZGUgdHJpZ2dlciBwb2ludHMgYW5kICAgICAgICAgKi8KLSAgICAgICAgLyogc2V0IHJpc2luZyBlZGdlIG9mIGludmVydGVkIEdQSU5UUiBwaW4gYXMgaXJxIHRyaWdnZXIgKi8KLSAgICAgICAgYnR3cml0ZShCVDg0OF9HUElPX0RNQV9DVExfUEtUUF8zMnwKLSAgICAgICAgICAgICAgICBCVDg0OF9HUElPX0RNQV9DVExfUExUUDFfMTZ8Ci0gICAgICAgICAgICAgICAgQlQ4NDhfR1BJT19ETUFfQ1RMX1BMVFAyM18xNnwKLSAgICAgICAgICAgICAgICBCVDg0OF9HUElPX0RNQV9DVExfR1BJTlRDfAotICAgICAgICAgICAgICAgIEJUODQ4X0dQSU9fRE1BX0NUTF9HUElOVEksCi0gICAgICAgICAgICAgICAgQlQ4NDhfR1BJT19ETUFfQ1RMKTsKKwkvKiBzZXQgcGxhbmFyIGFuZCBwYWNrZWQgbW9kZSB0cmlnZ2VyIHBvaW50cyBhbmQgICAgICAgICAqLworCS8qIHNldCByaXNpbmcgZWRnZSBvZiBpbnZlcnRlZCBHUElOVFIgcGluIGFzIGlycSB0cmlnZ2VyICovCisJYnR3cml0ZShCVDg0OF9HUElPX0RNQV9DVExfUEtUUF8zMnwKKwkJQlQ4NDhfR1BJT19ETUFfQ1RMX1BMVFAxXzE2fAorCQlCVDg0OF9HUElPX0RNQV9DVExfUExUUDIzXzE2fAorCQlCVDg0OF9HUElPX0RNQV9DVExfR1BJTlRDfAorCQlCVDg0OF9HUElPX0RNQV9DVExfR1BJTlRJLAorCQlCVDg0OF9HUElPX0RNQV9DVEwpOwogCiAJdmFsID0gYnR2LT5vcHRfY2hyb21hX2FnYyA/IEJUODQ4X1NDTE9PUF9DQUdDIDogMDsKLSAgICAgICAgYnR3cml0ZSh2YWwsIEJUODQ4X0VfU0NMT09QKTsKLSAgICAgICAgYnR3cml0ZSh2YWwsIEJUODQ4X09fU0NMT09QKTsKKwlidHdyaXRlKHZhbCwgQlQ4NDhfRV9TQ0xPT1ApOworCWJ0d3JpdGUodmFsLCBCVDg0OF9PX1NDTE9PUCk7CiAKLSAgICAgICAgYnR3cml0ZSgweDIwLCBCVDg0OF9FX1ZTQ0FMRV9ISSk7Ci0gICAgICAgIGJ0d3JpdGUoMHgyMCwgQlQ4NDhfT19WU0NBTEVfSEkpOwotICAgICAgICBidHdyaXRlKEJUODQ4X0FEQ19SRVNFUlZFRCB8IChidHYtPm9wdF9hZGNfY3J1c2ggPyBCVDg0OF9BRENfQ1JVU0ggOiAwKSwKKwlidHdyaXRlKDB4MjAsIEJUODQ4X0VfVlNDQUxFX0hJKTsKKwlidHdyaXRlKDB4MjAsIEJUODQ4X09fVlNDQUxFX0hJKTsKKwlidHdyaXRlKEJUODQ4X0FEQ19SRVNFUlZFRCB8IChidHYtPm9wdF9hZGNfY3J1c2ggPyBCVDg0OF9BRENfQ1JVU0ggOiAwKSwKIAkJQlQ4NDhfQURDKTsKIAogCWJ0d3JpdGUod2hpdGVjcnVzaF91cHBlciwgQlQ4NDhfV0NfVVApOwpAQCAtMTA4OSw3ICsxMDg5LDcgQEAKIAlidDg0OF9jb250cmFzdChidHYsIGJ0di0+Y29udHJhc3QpOwogCWJ0ODQ4X3NhdChidHYsICAgICAgYnR2LT5zYXR1cmF0aW9uKTsKIAotICAgICAgICAvKiBpbnRlcnJ1cHQgKi8KKwkvKiBpbnRlcnJ1cHQgKi8KIAlpbml0X2lycXJlZyhidHYpOwogfQogCkBAIC0xMTA1LDcgKzExMDUsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ0di0+c19sb2NrLGZsYWdzKTsKIAogCWluaXRfYnQ4NDgoYnR2KTsKLSAgICAgICAgYnR2LT5wbGwucGxsX2N1cnJlbnQgPSAtMTsKKwlidHYtPnBsbC5wbGxfY3VycmVudCA9IC0xOwogCXNldF9pbnB1dChidHYsYnR2LT5pbnB1dCk7CiB9CiAKQEAgLTEzOTgsNyArMTM5OCw3IEBACiAvKiB2aWRlbzRsaW51eCAoMSkgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBzdGF0aWMgaW50IGJ0dHZfcHJlcGFyZV9idWZmZXIoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IGJ0dHZfYnVmZmVyICpidWYsCi0gCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidHR2X2Zvcm1hdCAqZm10LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidHR2X2Zvcm1hdCAqZm10LAogCQkJICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKIAkJCSAgICAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CkBAIC0xNTIxLDggKzE1MjEsOCBAQAogc3RhdGljIGludCBidHR2X2NvbW1vbl9pb2N0bHMoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN3aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgQlRUVl9WRVJTSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiBCVFRWX1ZFUlNJT05fQ09ERTsKKwljYXNlIEJUVFZfVkVSU0lPTjoKKwkJcmV0dXJuIEJUVFZfVkVSU0lPTl9DT0RFOwogCiAJLyogKioqICB2NGwxICAqKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAJY2FzZSBWSURJT0NHRlJFUToKQEAgLTE1NzYsMzIgKzE1NzYsMzIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0gICAgICAgIGNhc2UgVklESU9DR0NIQU46Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKwljYXNlIFZJRElPQ0dDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CiAJCXVuc2lnbmVkIGludCBjaGFubmVsID0gdi0+Y2hhbm5lbDsKIAotICAgICAgICAgICAgICAgIGlmIChjaGFubmVsID49IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgdi0+dHVuZXJzPTA7Ci0gICAgICAgICAgICAgICAgdi0+ZmxhZ3MgPSBWSURFT19WQ19BVURJTzsKLSAgICAgICAgICAgICAgICB2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0gICAgICAgICAgICAgICAgdi0+bm9ybSA9IGJ0di0+dHZub3JtOworCQlpZiAoY2hhbm5lbCA+PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cykKKwkJCXJldHVybiAtRUlOVkFMOworCQl2LT50dW5lcnM9MDsKKwkJdi0+ZmxhZ3MgPSBWSURFT19WQ19BVURJTzsKKwkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQl2LT5ub3JtID0gYnR2LT50dm5vcm07CiAJCWlmIChjaGFubmVsID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIpICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi0+bmFtZSwiVGVsZXZpc2lvbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi0+ZmxhZ3N8PVZJREVPX1ZDX1RVTkVSOwotICAgICAgICAgICAgICAgICAgICAgICAgdi0+dHlwZT1WSURFT19UWVBFX1RWOwotICAgICAgICAgICAgICAgICAgICAgICAgdi0+dHVuZXJzPTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFubmVsID09IGJ0di0+c3ZocykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHYtPm5hbWUsIlMtVmlkZW8iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih2LT5uYW1lLCJDb21wb3NpdGUlZCIsY2hhbm5lbCk7CisJCQlzdHJjcHkodi0+bmFtZSwiVGVsZXZpc2lvbiIpOworCQkJdi0+ZmxhZ3N8PVZJREVPX1ZDX1RVTkVSOworCQkJdi0+dHlwZT1WSURFT19UWVBFX1RWOworCQkJdi0+dHVuZXJzPTE7CisJCX0gZWxzZSBpZiAoY2hhbm5lbCA9PSBidHYtPnN2aHMpIHsKKwkJCXN0cmNweSh2LT5uYW1lLCJTLVZpZGVvIik7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKHYtPm5hbWUsIkNvbXBvc2l0ZSVkIixjaGFubmVsKTsKIAkJfQogCQlyZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZJRElPQ1NDSEFOOgotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJfQorCWNhc2UgVklESU9DU0NIQU46CisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKIAkJdW5zaWduZWQgaW50IGNoYW5uZWwgPSB2LT5jaGFubmVsOwogCiAJCWlmIChjaGFubmVsID49IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzKQpAQCAtMTYyMyw3ICsxNjIzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0gICAgICAgIGNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DR0FVRElPOgogCXsKIAkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwogCkBAIC0xNzI4LDcgKzE3MjgsNyBAQAogCQl9IGVsc2UgaWYgKGktPmluZGV4ID09IGJ0di0+c3ZocykgewogCQkJc3ByaW50ZihpLT5uYW1lLCAiUy1WaWRlbyIpOwogCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpLT5uYW1lLCJDb21wb3NpdGUlZCIsaS0+aW5kZXgpOworCQkJc3ByaW50ZihpLT5uYW1lLCJDb21wb3NpdGUlZCIsaS0+aW5kZXgpOwogCQl9CiAJCWlmIChpLT5pbmRleCA9PSBidHYtPmlucHV0KSB7CiAJCQlfX3UzMiBkc3RhdHVzID0gYnRyZWFkKEJUODQ4X0RTVEFUVVMpOwpAQCAtMTg1MSw2ICsxODUxLDExIEBACiAJCXVwKCZidHYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwl7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19MT0dfU1RBVFVTLCAwKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKQEAgLTIxNjMsNyArMjE2OCw3IEBACiAJCWlmICgwICE9IHJldHZhbCkKIAkJCXJldHVybiByZXR2YWw7CiAJCWlmIChsb2NrZWRfYnRyZXMoZmgtPmJ0diwgUkVTT1VSQ0VfVkJJKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisJCQlyZXR1cm4gLUVCVVNZOwogCQlidHR2X3ZiaV90cnlfZm10KGZoLGYpOwogCQlidHR2X3ZiaV9zZXRsaW5lcyhmaCxidHYsZi0+Zm10LnZiaS5jb3VudFswXSk7CiAJCWJ0dHZfdmJpX2dldF9mbXQoZmgsZik7CkBAIC0yMjAxLDkgKzIyMDYsOSBAQAogCQlidHR2X3JlaW5pdF9idDg0OChidHYpOwogCiAJc3dpdGNoIChjbWQpIHsKLSAgICAgICAgY2FzZSBWSURJT0NTRlJFUToKLSAgICAgICAgY2FzZSBWSURJT0NTVFVORVI6Ci0gICAgICAgIGNhc2UgVklESU9DU0NIQU46CisJY2FzZSBWSURJT0NTRlJFUToKKwljYXNlIFZJRElPQ1NUVU5FUjoKKwljYXNlIFZJRElPQ1NDSEFOOgogCWNhc2UgVklESU9DX1NfQ1RSTDoKIAljYXNlIFZJRElPQ19TX1NURDoKIAljYXNlIFZJRElPQ19TX0lOUFVUOgpAQCAtMjIxOSwxMCArMjIyNCwxMCBAQAogCS8qICoqKiAgdjRsMSAgKioqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCWNhc2UgVklESU9DR0NBUDoKIAl7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKwkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAogCQltZW1zZXQoY2FwLDAsc2l6ZW9mKCpjYXApKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoY2FwLT5uYW1lLGJ0di0+dmlkZW9fZGV2LT5uYW1lKTsKKwkJc3RyY3B5KGNhcC0+bmFtZSxidHYtPnZpZGVvX2Rldi0+bmFtZSk7CiAJCWlmIChWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFID09IGZoLT50eXBlKSB7CiAJCQkvKiB2YmkgKi8KIAkJCWNhcC0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSfFZJRF9UWVBFX1RFTEVURVhUOwpAQCAtMjI0Miw3ICsyMjQ3LDcgQEAKIAkJfQogCQljYXAtPmNoYW5uZWxzICA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzOwogCQljYXAtPmF1ZGlvcyAgICA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9faW5wdXRzOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9CiAKIAljYXNlIFZJRElPQ0dQSUNUOgpAQCAtMjI5MSw3ICsyMjk2LDcgQEAKIAkJYnQ4NDhfaHVlKGJ0dixwaWMtPmh1ZSk7CiAJCWJ0ODQ4X3NhdChidHYscGljLT5jb2xvdXIpOwogCQl1cCgmZmgtPmNhcC5sb2NrKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJY2FzZSBWSURJT0NHV0lOOgpAQCAtMjM1Miw4ICsyMzU3LDggQEAKIAkJdW5zaWduZWQgbG9uZyBlbmQ7CiAKIAkJaWYoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYKLSAgICAgICAgICAgICAgICAgICAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07CisJCSAgICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQkJcmV0dXJuIC1FUEVSTTsKIAkJZW5kID0gKHVuc2lnbmVkIGxvbmcpZmJ1Zi0+YmFzZSArCiAJCQlmYnVmLT5oZWlnaHQgKiBmYnVmLT5ieXRlc3BlcmxpbmU7CiAJCWRvd24oJmZoLT5jYXAubG9jayk7CkBAIC0yNDI3LDcgKzI0MzIsNyBAQAogCQl9CiAKIAkJLyogc3dpdGNoIG92ZXIgKi8KLQkgICAgICAgIHJldHZhbCA9IGJ0dHZfc3dpdGNoX292ZXJsYXkoYnR2LGZoLG5ldyk7CisJCXJldHZhbCA9IGJ0dHZfc3dpdGNoX292ZXJsYXkoYnR2LGZoLG5ldyk7CiAJCXVwKCZmaC0+Y2FwLmxvY2spOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KQEAgLTI1NjYsMTMgKzI1NzEsMTMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0gICAgICAgIGNhc2UgQlRUVl9WRVJTSU9OOgotICAgICAgICBjYXNlIFZJRElPQ0dGUkVROgotICAgICAgICBjYXNlIFZJRElPQ1NGUkVROgotICAgICAgICBjYXNlIFZJRElPQ0dUVU5FUjoKLSAgICAgICAgY2FzZSBWSURJT0NTVFVORVI6Ci0gICAgICAgIGNhc2UgVklESU9DR0NIQU46Ci0gICAgICAgIGNhc2UgVklESU9DU0NIQU46CisJY2FzZSBCVFRWX1ZFUlNJT046CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCWNhc2UgVklESU9DR1RVTkVSOgorCWNhc2UgVklESU9DU1RVTkVSOgorCWNhc2UgVklESU9DR0NIQU46CisJY2FzZSBWSURJT0NTQ0hBTjoKIAljYXNlIFZJRElPQ0dBVURJTzoKIAljYXNlIFZJRElPQ1NBVURJTzoKIAkJcmV0dXJuIGJ0dHZfY29tbW9uX2lvY3RscyhidHYsY21kLGFyZyk7CkBAIC0yNTg0LDggKzI1ODksOCBAQAogCiAJCWlmICgwID09IHY0bDIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBzdHJjcHkoY2FwLT5kcml2ZXIsImJ0dHYiKTsKLSAgICAgICAgICAgICAgICBzdHJsY3B5KGNhcC0+Y2FyZCxidHYtPnZpZGVvX2Rldi0+bmFtZSxzaXplb2YoY2FwLT5jYXJkKSk7CisJCXN0cmNweShjYXAtPmRyaXZlciwiYnR0diIpOworCQlzdHJsY3B5KGNhcC0+Y2FyZCxidHYtPnZpZGVvX2Rldi0+bmFtZSxzaXplb2YoY2FwLT5jYXJkKSk7CiAJCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIixwY2lfbmFtZShidHYtPmMucGNpKSk7CiAJCWNhcC0+dmVyc2lvbiA9IEJUVFZfVkVSU0lPTl9DT0RFOwogCQljYXAtPmNhcGFiaWxpdGllcyA9CkBAIC0yODU2LDYgKzI4NjEsNyBAQAogCWNhc2UgVklESU9DX1NfVFVORVI6CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CiAJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKIAkJcmV0dXJuIGJ0dHZfY29tbW9uX2lvY3RscyhidHYsY21kLGFyZyk7CiAKIAlkZWZhdWx0OgpAQCAtMzA5MSw3ICszMDk3LDcgQEAKIHsKIAkubmFtZSAgICAgPSAiVU5TRVQiLAogCS50eXBlICAgICA9IFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfVFVORVJ8Ci0JICAgICAgICAgICAgVklEX1RZUEVfQ0xJUFBJTkd8VklEX1RZUEVfU0NBTEVTLAorCQkgICAgVklEX1RZUEVfQ0xJUFBJTkd8VklEX1RZUEVfU0NBTEVTLAogCS5oYXJkd2FyZSA9IFZJRF9IQVJEV0FSRV9CVDg0OCwKIAkuZm9wcyAgICAgPSAmYnR0dl9mb3BzLAogCS5taW5vciAgICA9IC0xLApAQCAtMzEzNyw3ICszMTQzLDcgQEAKIAlhdWRpb19tdXgoYnR2LEFVRElPX1JBRElPKTsKIAogCXVwKCZidHYtPmxvY2spOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYWRpb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMzE2MCwzNCArMzE2NiwzNCBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NHQ0FQOgogCXsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCiAJCW1lbXNldChjYXAsMCxzaXplb2YoKmNhcCkpOwotICAgICAgICAgICAgICAgIHN0cmNweShjYXAtPm5hbWUsYnR2LT5yYWRpb19kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIGNhcC0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSOworCQlzdHJjcHkoY2FwLT5uYW1lLGJ0di0+cmFkaW9fZGV2LT5uYW1lKTsKKwkJY2FwLT50eXBlID0gVklEX1RZUEVfVFVORVI7CiAJCWNhcC0+Y2hhbm5lbHMgPSAxOwogCQljYXAtPmF1ZGlvcyA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCXJldHVybiAwOwogCX0KIAotICAgICAgICBjYXNlIFZJRElPQ0dUVU5FUjoKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKKwljYXNlIFZJRElPQ0dUVU5FUjoKKwl7CisJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKIAotICAgICAgICAgICAgICAgIGlmKHYtPnR1bmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCWlmKHYtPnR1bmVyKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KHYtPm5hbWUsICJSYWRpbyIpOwotICAgICAgICAgICAgICAgIGJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsY21kLHYpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVklESU9DU1RVTkVSOgorCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsY21kLHYpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTVFVORVI6CiAJCS8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0dXJuIDA7CiAKIAljYXNlIEJUVFZfVkVSU0lPTjoKLSAgICAgICAgY2FzZSBWSURJT0NHRlJFUToKLSAgICAgICAgY2FzZSBWSURJT0NTRlJFUToKKwljYXNlIFZJRElPQ0dGUkVROgorCWNhc2UgVklESU9DU0ZSRVE6CiAJY2FzZSBWSURJT0NHQVVESU86CiAJY2FzZSBWSURJT0NTQVVESU86CiAJCXJldHVybiBidHR2X2NvbW1vbl9pb2N0bHMoYnR2LGNtZCxhcmcpOwpAQCAtMzY5Myw3ICszNjk5LDcgQEAKIAkJfQogCiAJCWlmIChhc3RhdCZCVDg0OF9JTlRfVlNZTkMpCi0gICAgICAgICAgICAgICAgICAgICAgICBidHYtPmZpZWxkX2NvdW50Kys7CisJCQlidHYtPmZpZWxkX2NvdW50Kys7CiAKIAkJaWYgKGFzdGF0ICYgQlQ4NDhfSU5UX0dQSU5UKSB7CiAJCQl3YWtlX3VwKCZidHYtPmdwaW9xKTsKQEAgLTM3MDUsMTMgKzM3MTEsMTMgQEAKIAkJCXdha2VfdXAoJmJ0di0+aTJjX3F1ZXVlKTsKIAkJfQogCi0gICAgICAgICAgICAgICAgaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9SSVNDSSkgICYmICAoc3RhdCAmICg0PDwyOCkpKQorCQlpZiAoKGFzdGF0ICYgQlQ4NDhfSU5UX1JJU0NJKSAgJiYgIChzdGF0ICYgKDQ8PDI4KSkpCiAJCQlidHR2X2lycV9zd2l0Y2hfdmJpKGJ0dik7CiAKLSAgICAgICAgICAgICAgICBpZiAoKGFzdGF0ICYgQlQ4NDhfSU5UX1JJU0NJKSAgJiYgIChzdGF0ICYgKDI8PDI4KSkpCisJCWlmICgoYXN0YXQgJiBCVDg0OF9JTlRfUklTQ0kpICAmJiAgKHN0YXQgJiAoMjw8MjgpKSkKIAkJCWJ0dHZfaXJxX3dha2V1cF90b3AoYnR2KTsKIAotICAgICAgICAgICAgICAgIGlmICgoYXN0YXQgJiBCVDg0OF9JTlRfUklTQ0kpICAmJiAgKHN0YXQgJiAoMTw8MjgpKSkKKwkJaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9SSVNDSSkgICYmICAoc3RhdCAmICgxPDwyOCkpKQogCQkJYnR0dl9pcnFfc3dpdGNoX3ZpZGVvKGJ0dik7CiAKIAkJaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9ITE9DSykgICYmICBidHYtPm9wdF9hdXRvbXV0ZSkKQEAgLTM3MzYsMTAgKzM3NDIsMjIgQEAKIAogCQljb3VudCsrOwogCQlpZiAoY291bnQgPiA0KSB7Ci0JCQlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJidHR2JWQ6IElSUSBsb2NrdXAsIGNsZWFyZWQgaW50IG1hc2sgWyIsIGJ0di0+Yy5ucik7CisKKwkJCWlmIChjb3VudCA+IDggfHwgIShhc3RhdCAmIEJUODQ4X0lOVF9HUElOVCkpIHsKKwkJCQlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKKworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAiYnR0diVkOiBJUlEgbG9ja3VwLCBjbGVhcmVkIGludCBtYXNrIFsiLCBidHYtPmMubnIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgImJ0dHYlZDogSVJRIGxvY2t1cCwgY2xlYXJpbmcgR1BJTlQgZnJvbSBpbnQgbWFzayBbIiwgYnR2LT5jLm5yKTsKKworCQkJCWJ0d3JpdGUoYnRyZWFkKEJUODQ4X0lOVF9NQVNLKSAmICgtMSBeIEJUODQ4X0lOVF9HUElOVCksCisJCQkJCQlCVDg0OF9JTlRfTUFTSyk7CisJCQl9OworCiAJCQlidHR2X3ByaW50X2lycWJpdHMoc3RhdCxhc3RhdCk7CisKIAkJCXByaW50aygiXVxuIik7CiAJCX0KIAl9CkBAIC0zODA4LDcgKzM4MjYsNyBAQAogCiAJLyogdmlkZW8gKi8KIAlidHYtPnZpZGVvX2RldiA9IHZkZXZfaW5pdChidHYsICZidHR2X3ZpZGVvX3RlbXBsYXRlLCAidmlkZW8iKTsKLSAgICAgICAgaWYgKE5VTEwgPT0gYnR2LT52aWRlb19kZXYpCisJaWYgKE5VTEwgPT0gYnR2LT52aWRlb19kZXYpCiAJCWdvdG8gZXJyOwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT52aWRlb19kZXYsVkZMX1RZUEVfR1JBQkJFUix2aWRlb19ucik8MCkKIAkJZ290byBlcnI7CkBAIC0zODE4LDE4ICszODM2LDE4IEBACiAKIAkvKiB2YmkgKi8KIAlidHYtPnZiaV9kZXYgPSB2ZGV2X2luaXQoYnR2LCAmYnR0dl92YmlfdGVtcGxhdGUsICJ2YmkiKTsKLSAgICAgICAgaWYgKE5VTEwgPT0gYnR2LT52YmlfZGV2KQorCWlmIChOVUxMID09IGJ0di0+dmJpX2RldikKIAkJZ290byBlcnI7Ci0gICAgICAgIGlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT52YmlfZGV2LFZGTF9UWVBFX1ZCSSx2YmlfbnIpPDApCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnZiaV9kZXYsVkZMX1RZUEVfVkJJLHZiaV9ucik8MCkKIAkJZ290byBlcnI7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSB2YmklZFxuIiwKIAkgICAgICAgYnR2LT5jLm5yLGJ0di0+dmJpX2Rldi0+bWlub3IgJiAweDFmKTsKIAotICAgICAgICBpZiAoIWJ0di0+aGFzX3JhZGlvKQorCWlmICghYnR2LT5oYXNfcmFkaW8pCiAJCXJldHVybiAwOwogCS8qIHJhZGlvICovCiAJYnR2LT5yYWRpb19kZXYgPSB2ZGV2X2luaXQoYnR2LCAmcmFkaW9fdGVtcGxhdGUsICJyYWRpbyIpOwotICAgICAgICBpZiAoTlVMTCA9PSBidHYtPnJhZGlvX2RldikKKwlpZiAoTlVMTCA9PSBidHYtPnJhZGlvX2RldikKIAkJZ290byBlcnI7CiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnJhZGlvX2RldiwgVkZMX1RZUEVfUkFESU8scmFkaW9fbnIpPDApCiAJCWdvdG8gZXJyOwpAQCAtMzg1MCwxMSArMzg2OCwxMSBAQAogc3RhdGljIHZvaWQgcGNpX3NldF9jb21tYW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKLSAgICAgICAgdW5zaWduZWQgaW50IGNtZDsKKwl1bnNpZ25lZCBpbnQgY21kOwogCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLSAgICAgICAgY21kID0gKGNtZCB8IFBDSV9DT01NQU5EX01FTU9SWSApOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCWNtZCA9IChjbWQgfCBQQ0lfQ09NTUFORF9NRU1PUlkgKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7CiAjZW5kaWYKIH0KIApAQCAtMzg2OCw2MyArMzg4Niw2MiBAQAogCWlmIChidHR2X251bSA9PSBCVFRWX01BWCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogQnQ4eHggY2FyZCBmb3VuZCAoJWQpLlxuIiwgYnR0dl9udW0pOwotICAgICAgICBidHY9JmJ0dHZzW2J0dHZfbnVtXTsKKwlidHY9JmJ0dHZzW2J0dHZfbnVtXTsKIAltZW1zZXQoYnR2LDAsc2l6ZW9mKCpidHYpKTsKIAlidHYtPmMubnIgID0gYnR0dl9udW07CiAJc3ByaW50ZihidHYtPmMubmFtZSwiYnR0diVkIixidHYtPmMubnIpOwogCiAJLyogaW5pdGlhbGl6ZSBzdHJ1Y3RzIC8gZmlsbCBpbiBkZWZhdWx0cyAqLwotICAgICAgICBpbml0X01VVEVYKCZidHYtPmxvY2spOwotICAgICAgICBpbml0X01VVEVYKCZidHYtPnJlc2xvY2spOwotICAgICAgICBzcGluX2xvY2tfaW5pdCgmYnR2LT5zX2xvY2spOwotICAgICAgICBzcGluX2xvY2tfaW5pdCgmYnR2LT5ncGlvX2xvY2spOwotICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZidHYtPmdwaW9xKTsKLSAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmYnR2LT5pMmNfcXVldWUpOwotICAgICAgICBJTklUX0xJU1RfSEVBRCgmYnR2LT5jLnN1YnMpOwotICAgICAgICBJTklUX0xJU1RfSEVBRCgmYnR2LT5jYXB0dXJlKTsKLSAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmJ0di0+dmNhcHR1cmUpOworCWluaXRfTVVURVgoJmJ0di0+bG9jayk7CisJaW5pdF9NVVRFWCgmYnR2LT5yZXNsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYnR2LT5zX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZidHYtPmdwaW9fbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYnR2LT5ncGlvcSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYnR2LT5pMmNfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZidHYtPmMuc3Vicyk7CisJSU5JVF9MSVNUX0hFQUQoJmJ0di0+Y2FwdHVyZSk7CisJSU5JVF9MSVNUX0hFQUQoJmJ0di0+dmNhcHR1cmUpOwogCXY0bDJfcHJpb19pbml0KCZidHYtPnByaW8pOwogCiAJaW5pdF90aW1lcigmYnR2LT50aW1lb3V0KTsKIAlidHYtPnRpbWVvdXQuZnVuY3Rpb24gPSBidHR2X2lycV90aW1lb3V0OwogCWJ0di0+dGltZW91dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWJ0djsKIAotICAgICAgICBidHYtPmkyY19yYyA9IC0xOwotICAgICAgICBidHYtPnR1bmVyX3R5cGUgID0gVU5TRVQ7Ci0gICAgICAgIGJ0di0+cGlubmFjbGVfaWQgPSBVTlNFVDsKKwlidHYtPmkyY19yYyA9IC0xOworCWJ0di0+dHVuZXJfdHlwZSAgPSBVTlNFVDsKKwlidHYtPnBpbm5hY2xlX2lkID0gVU5TRVQ7CiAJYnR2LT5uZXdfaW5wdXQgICA9IFVOU0VUOwotCWJ0di0+Z3Bpb2lycSAgICAgPSAxOwogCWJ0di0+aGFzX3JhZGlvPXJhZGlvW2J0di0+Yy5ucl07CiAKIAkvKiBwY2kgc3R1ZmYgKGluaXQsIGdldCBpcnEvbW1pbywgLi4uICovCiAJYnR2LT5jLnBjaSA9IGRldjsKLSAgICAgICAgYnR2LT5pZCAgPSBkZXYtPmRldmljZTsKKwlidHYtPmlkICA9IGRldi0+ZGV2aWNlOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBDYW4ndCBlbmFibGUgZGV2aWNlLlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBDYW4ndCBlbmFibGUgZGV2aWNlLlxuIiwKIAkJICAgICAgIGJ0di0+Yy5ucik7CiAJCXJldHVybiAtRUlPOwogCX0KLSAgICAgICAgaWYgKHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAorCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIsCiAJCSAgICAgICBidHYtPmMubnIpOwogCQlyZXR1cm4gLUVJTzsKLSAgICAgICAgfQorCX0KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApLAogCQkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LDApLAogCQkJCWJ0di0+Yy5uYW1lKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogY2FuJ3QgcmVxdWVzdCBpb21lbSAoMHglbHgpLlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBjYW4ndCByZXF1ZXN0IGlvbWVtICgweCVseCkuXG4iLAogCQkgICAgICAgYnR2LT5jLm5yLCBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0gICAgICAgIHBjaV9zZXRfbWFzdGVyKGRldik7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKIAlwY2lfc2V0X2NvbW1hbmQoZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEoZGV2LGJ0dik7CiAKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZidHYtPnJldmlzaW9uKTsKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJmxhdCk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogQnQlZCAocmV2ICVkKSBhdCAlcywgIiwKLSAgICAgICAgICAgICAgIGJ0dHZfbnVtLGJ0di0+aWQsIGJ0di0+cmV2aXNpb24sIHBjaV9uYW1lKGRldikpOwotICAgICAgICBwcmludGsoImlycTogJWQsIGxhdGVuY3k6ICVkLCBtbWlvOiAweCVseFxuIiwKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmJ0di0+cmV2aXNpb24pOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZsYXQpOworCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogQnQlZCAocmV2ICVkKSBhdCAlcywgIiwKKwkgICAgICAgYnR0dl9udW0sYnR2LT5pZCwgYnR2LT5yZXZpc2lvbiwgcGNpX25hbWUoZGV2KSk7CisJcHJpbnRrKCJpcnE6ICVkLCBsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsCiAJICAgICAgIGJ0di0+Yy5wY2ktPmlycSwgbGF0LCBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApKTsKIAlzY2hlZHVsZSgpOwogCkBAIC0zOTM1LDIzICszOTUyLDIzIEBACiAJCWdvdG8gZmFpbDE7CiAJfQogCi0gICAgICAgIC8qIGlkZW50aWZ5IGNhcmQgKi8KKwkvKiBpZGVudGlmeSBjYXJkICovCiAJYnR0dl9pZGNhcmQoYnR2KTsKIAotICAgICAgICAvKiBkaXNhYmxlIGlycXMsIHJlZ2lzdGVyIGlycSBoYW5kbGVyICovCisJLyogZGlzYWJsZSBpcnFzLCByZWdpc3RlciBpcnEgaGFuZGxlciAqLwogCWJ0d3JpdGUoMCwgQlQ4NDhfSU5UX01BU0spOwotICAgICAgICByZXN1bHQgPSByZXF1ZXN0X2lycShidHYtPmMucGNpLT5pcnEsIGJ0dHZfaXJxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCxidHYtPmMubmFtZSwodm9pZCAqKWJ0dik7Ci0gICAgICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidHR2JWQ6IGNhbid0IGdldCBJUlEgJWRcbiIsCisJcmVzdWx0ID0gcmVxdWVzdF9pcnEoYnR2LT5jLnBjaS0+aXJxLCBidHR2X2lycSwKKwkJCSAgICAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsYnR2LT5jLm5hbWUsKHZvaWQgKilidHYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYnR0diVkOiBjYW4ndCBnZXQgSVJRICVkXG4iLAogCQkgICAgICAgYnR0dl9udW0sYnR2LT5jLnBjaS0+aXJxKTsKIAkJZ290byBmYWlsMTsKLSAgICAgICAgfQorCX0KIAogCWlmICgwICE9IGJ0dHZfaGFuZGxlX2NoaXBzZXQoYnR2KSkgewogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWwyOwotICAgICAgICB9CisJfQogCiAJLyogaW5pdCBvcHRpb25zIGZyb20gaW5zbW9kIGFyZ3MgKi8KIAlidHYtPm9wdF9jb21iZmlsdGVyID0gY29tYmZpbHRlcjsKQEAgLTM5NzcsMjkgKzM5OTQsMjkgQEAKIAlidHYtPmlucHV0ID0gMDsKIAogCS8qIGluaXRpYWxpemUgaGFyZHdhcmUgKi8KLSAgICAgICAgaWYgKGJ0dHZfZ3BpbykKLSAgICAgICAgICAgICAgICBidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJwcmUtaW5pdCIpOworCWlmIChidHR2X2dwaW8pCisJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsInByZS1pbml0Iik7CiAKIAlidHR2X3Jpc2NfaW5pdF9tYWluKGJ0dik7CiAJaW5pdF9idDg0OChidHYpOwogCiAJLyogZ3BpbyAqLwotICAgICAgICBidHdyaXRlKDB4MDAsIEJUODQ4X0dQSU9fUkVHX0lOUCk7Ci0gICAgICAgIGJ0d3JpdGUoMHgwMCwgQlQ4NDhfR1BJT19PVVRfRU4pOwotICAgICAgICBpZiAoYnR0dl92ZXJib3NlKQotICAgICAgICAgICAgICAgIGJ0dHZfZ3Bpb190cmFja2luZyhidHYsImluaXQiKTsKKwlidHdyaXRlKDB4MDAsIEJUODQ4X0dQSU9fUkVHX0lOUCk7CisJYnR3cml0ZSgweDAwLCBCVDg0OF9HUElPX09VVF9FTik7CisJaWYgKGJ0dHZfdmVyYm9zZSkKKwkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwiaW5pdCIpOwogCi0gICAgICAgIC8qIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGkyYyBpcyByZWdpc3RlcmVkICovCi0gICAgICAgIGJ0dHZfaW5pdF9jYXJkMShidHYpOworCS8qIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGkyYyBpcyByZWdpc3RlcmVkICovCisJYnR0dl9pbml0X2NhcmQxKGJ0dik7CiAKLSAgICAgICAgLyogcmVnaXN0ZXIgaTJjICsgZ3BpbyAqLwotICAgICAgICBpbml0X2J0dHZfaTJjKGJ0dik7CisJLyogcmVnaXN0ZXIgaTJjICsgZ3BpbyAqLworCWluaXRfYnR0dl9pMmMoYnR2KTsKIAotICAgICAgICAvKiBzb21lIGNhcmQtc3BlY2lmaWMgc3R1ZmYgKG5lZWRzIHdvcmtpbmcgaTJjKSAqLwotICAgICAgICBidHR2X2luaXRfY2FyZDIoYnR2KTsKKwkvKiBzb21lIGNhcmQtc3BlY2lmaWMgc3R1ZmYgKG5lZWRzIHdvcmtpbmcgaTJjKSAqLworCWJ0dHZfaW5pdF9jYXJkMihidHYpOwogCWluaXRfaXJxcmVnKGJ0dik7CiAKLSAgICAgICAgLyogcmVnaXN0ZXIgdmlkZW80bGludXggKyBpbnB1dCAqLworCS8qIHJlZ2lzdGVyIHZpZGVvNGxpbnV4ICsgaW5wdXQgKi8KIAlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdmlkZW8pIHsKIAkJYnR0dl9yZWdpc3Rlcl92aWRlbyhidHYpOwogCQlidDg0OF9icmlnaHQoYnR2LDMyNzY4KTsKQEAgLTQwMTgsMTAgKzQwMzUsMTAgQEAKIAogCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSAqLwogCWJ0dHZfbnVtKys7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiAgZmFpbDI6Ci0gICAgICAgIGZyZWVfaXJxKGJ0di0+Yy5wY2ktPmlycSxidHYpOworCWZyZWVfaXJxKGJ0di0+Yy5wY2ktPmlycSxidHYpOwogCiAgZmFpbDE6CiAJaWYgKGJ0di0+YnQ4NDhfbW1pbykKQEAgLTQwMzQsMTIgKzQwNTEsMTIgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGJ0dHZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotICAgICAgICBzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKIAlpZiAoYnR0dl92ZXJib3NlKQogCQlwcmludGsoImJ0dHYlZDogdW5sb2FkaW5nXG4iLGJ0di0+Yy5ucik7CiAKLSAgICAgICAgLyogc2h1dGRvd24gZXZlcnl0aGluZyAoRE1BK0lSUXMpICovCisJLyogc2h1dGRvd24gZXZlcnl0aGluZyAoRE1BK0lSUXMpICovCiAJYnRhbmQofjE1LCBCVDg0OF9HUElPX0RNQV9DVEwpOwogCWJ0d3JpdGUoMCwgQlQ4NDhfSU5UX01BU0spOwogCWJ0d3JpdGUofjB4MCwgQlQ4NDhfSU5UX1NUQVQpOwpAQCAtNDA1Miw3ICs0MDY5LDcgQEAKIAl3YWtlX3VwKCZidHYtPmdwaW9xKTsKIAlidHR2X3N1Yl9kZWxfZGV2aWNlcygmYnR2LT5jKTsKIAotICAgICAgICAvKiB1bnJlZ2lzdGVyIGkyY19idXMgKyBpbnB1dCAqLworCS8qIHVucmVnaXN0ZXIgaTJjX2J1cyArIGlucHV0ICovCiAJZmluaV9idHR2X2kyYyhidHYpOwogCiAJLyogdW5yZWdpc3RlciB2aWRlbzRsaW51eCAqLwpAQCAtNDA2MiwxOCArNDA3OSwxOCBAQAogCWJ0Y3hfcmlzY21lbV9mcmVlKGJ0di0+Yy5wY2ksJmJ0di0+bWFpbik7CiAKIAkvKiBmcmVlIHJlc3NvdXJjZXMgKi8KLSAgICAgICAgZnJlZV9pcnEoYnR2LT5jLnBjaS0+aXJxLGJ0dik7CisJZnJlZV9pcnEoYnR2LT5jLnBjaS0+aXJxLGJ0dik7CiAJaW91bm1hcChidHYtPmJ0ODQ4X21taW8pOwotICAgICAgICByZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGJ0di0+Yy5wY2ksMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVzb3VyY2VfbGVuKGJ0di0+Yy5wY2ksMCkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoYnR2LT5jLnBjaSwwKSwKKwkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oYnR2LT5jLnBjaSwwKSk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7Ci0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgYnR0dl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0gICAgICAgIHN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAlzdHJ1Y3QgYnR0dl9idWZmZXJfc2V0IGlkbGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNDEwOCw3ICs0MTI1LDcgQEAKIAogc3RhdGljIGludCBidHR2X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLSAgICAgICAgc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtNDE1MywyNCArNDE3MCwyNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYnR0dl9wY2lfdGJsW10gPSB7Ci0gICAgICAgIHtQQ0lfVkVORE9SX0lEX0JST09LVFJFRSwgUENJX0RFVklDRV9JRF9CVDg0OCwKLSAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0JST09LVFJFRSwgUENJX0RFVklDRV9JRF9CVDg0OCwKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfQlJPT0tUUkVFLCBQQ0lfREVWSUNFX0lEX0JUODQ5LAotICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0JST09LVFJFRSwgUENJX0RFVklDRV9JRF9CVDg3OCwKLSAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NzksCi0gICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLSAgICAgICAgezAsfQorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MCx9CiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYnR0dl9wY2lfdGJsKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJ0dHZfcGNpX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgID0gImJ0dHYiLAotICAgICAgICAuaWRfdGFibGUgPSBidHR2X3BjaV90YmwsCi0gICAgICAgIC5wcm9iZSAgICA9IGJ0dHZfcHJvYmUsCi0gICAgICAgIC5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGJ0dHZfcmVtb3ZlKSwKKwkubmFtZSAgICAgPSAiYnR0diIsCisJLmlkX3RhYmxlID0gYnR0dl9wY2lfdGJsLAorCS5wcm9iZSAgICA9IGJ0dHZfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYnR0dl9yZW1vdmUpLAogCS5zdXNwZW5kICA9IGJ0dHZfc3VzcGVuZCwKIAkucmVzdW1lICAgPSBidHR2X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWdwaW8uYwppbmRleCA2YjI4MGMwLi41NzVjZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1ncGlvLmMKQEAgLTcsNyArNyw3IEBACiAKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYwppbmRleCBlNjg0ZGYzLi43NzYxOWViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYwpAQCAtNSw3ICs1LDcgQEAKICAgICBidHR2IC0gQnQ4NDggZnJhbWUgZ3JhYmJlciBkcml2ZXIKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzNyw3ICsyMzcsNyBAQAogIGVycjoKIAlpZiAoaTJjX2RlYnVnKQogCQlwcmludGsoIiBFUlI6ICVkXG4iLHJldHZhbCk7Ci0gICAgICAgCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBidHR2X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQpAQCAtMjkwLDcgKzI5MCwxMyBAQAogCiBzdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLSAgICAgICAgc3RydWN0IGJ0dHYgKmJ0diA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCWludCBhZGRyPUFERFJfVU5TRVQ7CisKKworCWlmIChBRERSX1VOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcikKKwkJYWRkciA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcjsKKwogCiAJaWYgKGJ0dHZfZGVidWcpCiAJCXByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6ICVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLApAQCAtMzAwLDE5ICszMDYsMjAgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUKSB7Ci0JICAgICAgICBzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCi0JICAgICAgICB0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTyB8IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWOwotCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKLQkJdHVuX3NldHVwLmFkZHIgPSBBRERSX1VOU0VUOworCQlpZiAoKGFkZHI9PUFERFJfVU5TRVQpIHx8CisJCQkJKGFkZHI9PWNsaWVudC0+YWRkcikpIHsKIAotCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCAoY2xpZW50LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UViB8IFRfUkFESU87CisJCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKKwkJCXR1bl9zZXR1cC5hZGRyID0gYWRkcjsKKwkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQl9CisKIAl9CiAKLQlpZiAoYnR2LT5waW5uYWNsZV9pZCAhPSBVTlNFVCkKLQkJY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LEFVRENfQ09ORklHX1BJTk5BQ0xFLAotCQkJCSAgICAgICZidHYtPnBpbm5hY2xlX2lkKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgYnR0dl9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKQEAgLTMzMCw0MyArMzM3LDQzIEBACiAvKiByZWFkIEkyQyAqLwogaW50IGJ0dHZfSTJDUmVhZChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKnByb2JlX2ZvcikKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXIgPSAwOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyID0gMDsKIAogCWlmICgwICE9IGJ0di0+aTJjX3JjKQogCQlyZXR1cm4gLTE7CiAJaWYgKGJ0dHZfdmVyYm9zZSAmJiBOVUxMICE9IHByb2JlX2ZvcikKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBpMmM6IGNoZWNraW5nIGZvciAlcyBAIDB4JTAyeC4uLiAiLAogCQkgICAgICAgYnR2LT5jLm5yLHByb2JlX2ZvcixhZGRyKTsKLSAgICAgICAgYnR2LT5pMmNfY2xpZW50LmFkZHIgPSBhZGRyID4+IDE7Ci0gICAgICAgIGlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmYnR2LT5pMmNfY2xpZW50LCAmYnVmZmVyLCAxKSkgeworCWJ0di0+aTJjX2NsaWVudC5hZGRyID0gYWRkciA+PiAxOworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmYnR2LT5pMmNfY2xpZW50LCAmYnVmZmVyLCAxKSkgewogCQlpZiAoTlVMTCAhPSBwcm9iZV9mb3IpIHsKIAkJCWlmIChidHR2X3ZlcmJvc2UpCiAJCQkJcHJpbnRrKCJub3QgZm91bmRcbiIpOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogaTJjIHJlYWQgMHgleDogZXJyb3JcbiIsCiAJCQkgICAgICAgYnR2LT5jLm5yLGFkZHIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKwkJcmV0dXJuIC0xOwogCX0KIAlpZiAoYnR0dl92ZXJib3NlICYmIE5VTEwgIT0gcHJvYmVfZm9yKQogCQlwcmludGsoImZvdW5kXG4iKTsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAvKiB3cml0ZSBJMkMgKi8KIGludCBidHR2X0kyQ1dyaXRlKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciBiMSwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiMiwgaW50IGJvdGgpCisJCSAgICB1bnNpZ25lZCBjaGFyIGIyLCBpbnQgYm90aCkKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07Ci0gICAgICAgIGludCBieXRlcyA9IGJvdGggPyAyIDogMTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKwlpbnQgYnl0ZXMgPSBib3RoID8gMiA6IDE7CiAKIAlpZiAoMCAhPSBidHYtPmkyY19yYykKIAkJcmV0dXJuIC0xOwotICAgICAgICBidHYtPmkyY19jbGllbnQuYWRkciA9IGFkZHIgPj4gMTsKLSAgICAgICAgYnVmZmVyWzBdID0gYjE7Ci0gICAgICAgIGJ1ZmZlclsxXSA9IGIyOwotICAgICAgICBpZiAoYnl0ZXMgIT0gaTJjX21hc3Rlcl9zZW5kKCZidHYtPmkyY19jbGllbnQsIGJ1ZmZlciwgYnl0ZXMpKQorCWJ0di0+aTJjX2NsaWVudC5hZGRyID0gYWRkciA+PiAxOworCWJ1ZmZlclswXSA9IGIxOworCWJ1ZmZlclsxXSA9IGIyOworCWlmIChieXRlcyAhPSBpMmNfbWFzdGVyX3NlbmQoJmJ0di0+aTJjX2NsaWVudCwgYnVmZmVyLCBieXRlcykpCiAJCXJldHVybiAtMTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qIHJlYWQgRUVQUk9NIGNvbnRlbnQgKi8KQEAgLTQzMSw4ICs0MzgsOCBAQAogCQkgImJ0JWQgIyVkIFslc10iLCBidHYtPmlkLCBidHYtPmMubnIsCiAJCSBidHYtPnVzZV9pMmNfaHcgPyAiaHciIDogInN3Iik7CiAKLSAgICAgICAgaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOwotICAgICAgICBidHYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidHYtPmMuaTJjX2FkYXA7CisJaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOworCWJ0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmJ0di0+Yy5pMmNfYWRhcDsKIAogI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub192aWRlbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlmLmMKaW5kZXggZThhYWRhNy4uMTliNTY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlmLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAKICAgICBidHR2LWlmLmMgIC0tICBvbGQgZ3BpbyBpbnRlcmZhY2UgdG8gb3RoZXIga2VybmVsIG1vZHVsZXMKLSAgICAgICAgICAgICAgICAgICBkb24ndCB1c2UgaW4gbmV3IGNvZGUsIHdpbGwgZ28gYXdheSBpbiAyLjcKKwkJICAgZG9uJ3QgdXNlIGluIG5ldyBjb2RlLCB3aWxsIGdvIGF3YXkgaW4gMi43CiAJCSAgIGhhdmUgYSBsb29rIGF0IGJ0dHYtZ3Bpby5jIGluc3RlYWQuCiAKICAgICBidHR2IC0gQnQ4NDggZnJhbWUgZ3JhYmJlciBkcml2ZXIKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtcmlzYy5jCmluZGV4IGE1ZWQ5OWIuLmI0MGU5NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LXJpc2MuYwpAQCAtNzQsMjcgKzc0LDI3IEBACiAJCX0KIAkJaWYgKGJwbCA8PSBzZ19kbWFfbGVuKHNnKS1vZmZzZXQpIHsKIAkJCS8qIGZpdHMgaW50byBjdXJyZW50IGNodW5rICovCi0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKEJUODQ4X1JJU0NfV1JJVEV8QlQ4NDhfUklTQ19TT0x8CisJCQkqKHJwKyspPWNwdV90b19sZTMyKEJUODQ4X1JJU0NfV1JJVEV8QlQ4NDhfUklTQ19TT0x8CiAJCQkJCSAgICBCVDg0OF9SSVNDX0VPTHxicGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9YnBsOworCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCW9mZnNldCs9YnBsOwogCQl9IGVsc2UgewogCQkJLyogc2NhbmxpbmUgbmVlZHMgdG8gYmUgc3BsaXR0ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8gPSBicGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKEJUODQ4X1JJU0NfV1JJVEV8QlQ4NDhfUklTQ19TT0x8CisJCQl0b2RvID0gYnBsOworCQkJKihycCsrKT1jcHVfdG9fbGUzMihCVDg0OF9SSVNDX1dSSVRFfEJUODQ4X1JJU0NfU09MfAogCQkJCQkgICAgKHNnX2RtYV9sZW4oc2cpLW9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8gLT0gKHNnX2RtYV9sZW4oc2cpLW9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgc2crKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2RvID4gc2dfZG1hX2xlbihzZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihCVDg0OF9SSVNDX1dSSVRFfAorCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCXRvZG8gLT0gKHNnX2RtYV9sZW4oc2cpLW9mZnNldCk7CisJCQlvZmZzZXQgPSAwOworCQkJc2crKzsKKwkJCXdoaWxlICh0b2RvID4gc2dfZG1hX2xlbihzZykpIHsKKwkJCQkqKHJwKyspPWNwdV90b19sZTMyKEJUODQ4X1JJU0NfV1JJVEV8CiAJCQkJCQkgICAgc2dfZG1hX2xlbihzZykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwogCQkJCXRvZG8gLT0gc2dfZG1hX2xlbihzZyk7CiAJCQkJc2crKzsKIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19XUklURXxCVDg0OF9SSVNDX0VPTHwKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19XUklURXxCVDg0OF9SSVNDX0VPTHwKIAkJCQkJICAgIHRvZG8pOwogCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwogCQkJb2Zmc2V0ICs9IHRvZG87CkBAIC0yMDEsOCArMjAxLDggQEAKIAkJCQlyaSB8PSBCVDg0OF9SSVNDX0VPTDsKIAogCQkJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihyaSB8IHlsZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMigoKHlsZW4gPj4gaHNoaWZ0KSA8PCAxNikgfAorCQkJKihycCsrKT1jcHVfdG9fbGUzMihyaSB8IHlsZW4pOworCQkJKihycCsrKT1jcHVfdG9fbGUzMigoKHlsZW4gPj4gaHNoaWZ0KSA8PCAxNikgfAogCQkJCQkgICAgKHlsZW4gPj4gaHNoaWZ0KSk7CiAJCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHlzZykreW9mZnNldCk7CiAJCQl5b2Zmc2V0ICs9IHlsZW47CkBAIC0zMTksNyArMzE5LDcgQEAKIAkgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpbnRlcmxlYXZlZCwgaW50IG5vcm0pCiB7CiAJY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICp0dm5vcm0gPSAmYnR0dl90dm5vcm1zW25vcm1dOwotICAgICAgICB1MzIgeHNmLCBzcjsKKwl1MzIgeHNmLCBzcjsKIAlpbnQgdmRlbGF5OwogCiAJaW50IHN3aWR0aCAgICAgICA9IHR2bm9ybS0+c3dpZHRoOwpAQCAtMzM0LDUyICszMzQsNTIgQEAKIAogCXZkZWxheSA9IHR2bm9ybS0+dmRlbGF5OwogCi0gICAgICAgIHhzZiA9ICh3aWR0aCpzY2FsZWR0d2lkdGgpL3N3aWR0aDsKLSAgICAgICAgZ2VvLT5oc2NhbGUgPSAgKCh0b3RhbHdpZHRoKjQwOTZVTCkveHNmLTQwOTYpOwotICAgICAgICBnZW8tPmhkZWxheSA9ICB0dm5vcm0tPmhkZWxheXgxOwotICAgICAgICBnZW8tPmhkZWxheSA9ICAoZ2VvLT5oZGVsYXkqd2lkdGgpL3N3aWR0aDsKLSAgICAgICAgZ2VvLT5oZGVsYXkgJj0gMHgzZmU7Ci0gICAgICAgIHNyID0gKCh0dm5vcm0tPnNoZWlnaHQgPj4gKGludGVybGVhdmVkPzA6MSkpKjUxMikvaGVpZ2h0IC0gNTEyOwotICAgICAgICBnZW8tPnZzY2FsZSA9ICAoMHgxMDAwMFVMLXNyKSAmIDB4MWZmZjsKLSAgICAgICAgZ2VvLT5jcm9wICAgPSAgKCh3aWR0aD4+OCkmMHgwMykgfCAoKGdlby0+aGRlbGF5Pj42KSYweDBjKSB8Ci0gICAgICAgICAgICAgICAgKCh0dm5vcm0tPnNoZWlnaHQ+PjQpJjB4MzApIHwgKCh2ZGVsYXk+PjIpJjB4YzApOwotICAgICAgICBnZW8tPnZzY2FsZSB8PSBpbnRlcmxlYXZlZCA/IChCVDg0OF9WU0NBTEVfSU5UPDw4KSA6IDA7Ci0gICAgICAgIGdlby0+dmRlbGF5ICA9ICB2ZGVsYXk7Ci0gICAgICAgIGdlby0+d2lkdGggICA9ICB3aWR0aDsKLSAgICAgICAgZ2VvLT5zaGVpZ2h0ID0gIHR2bm9ybS0+c2hlaWdodDsKKwl4c2YgPSAod2lkdGgqc2NhbGVkdHdpZHRoKS9zd2lkdGg7CisJZ2VvLT5oc2NhbGUgPSAgKCh0b3RhbHdpZHRoKjQwOTZVTCkveHNmLTQwOTYpOworCWdlby0+aGRlbGF5ID0gIHR2bm9ybS0+aGRlbGF5eDE7CisJZ2VvLT5oZGVsYXkgPSAgKGdlby0+aGRlbGF5KndpZHRoKS9zd2lkdGg7CisJZ2VvLT5oZGVsYXkgJj0gMHgzZmU7CisJc3IgPSAoKHR2bm9ybS0+c2hlaWdodCA+PiAoaW50ZXJsZWF2ZWQ/MDoxKSkqNTEyKS9oZWlnaHQgLSA1MTI7CisJZ2VvLT52c2NhbGUgPSAgKDB4MTAwMDBVTC1zcikgJiAweDFmZmY7CisJZ2VvLT5jcm9wICAgPSAgKCh3aWR0aD4+OCkmMHgwMykgfCAoKGdlby0+aGRlbGF5Pj42KSYweDBjKSB8CisJCSgodHZub3JtLT5zaGVpZ2h0Pj40KSYweDMwKSB8ICgodmRlbGF5Pj4yKSYweGMwKTsKKwlnZW8tPnZzY2FsZSB8PSBpbnRlcmxlYXZlZCA/IChCVDg0OF9WU0NBTEVfSU5UPDw4KSA6IDA7CisJZ2VvLT52ZGVsYXkgID0gIHZkZWxheTsKKwlnZW8tPndpZHRoICAgPSAgd2lkdGg7CisJZ2VvLT5zaGVpZ2h0ID0gIHR2bm9ybS0+c2hlaWdodDsKIAlnZW8tPnZ0b3RhbCAgPSAgdHZub3JtLT52dG90YWw7CiAKLSAgICAgICAgaWYgKGJ0di0+b3B0X2NvbWJmaWx0ZXIpIHsKLSAgICAgICAgICAgICAgICBnZW8tPnZ0YyAgPSAod2lkdGggPCAxOTMpID8gMiA6ICgod2lkdGggPCAzODUpID8gMSA6IDApOwotICAgICAgICAgICAgICAgIGdlby0+Y29tYiA9ICh3aWR0aCA8IDc2OSkgPyAxIDogMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBnZW8tPnZ0YyAgPSAwOwotICAgICAgICAgICAgICAgIGdlby0+Y29tYiA9IDA7Ci0gICAgICAgIH0KKwlpZiAoYnR2LT5vcHRfY29tYmZpbHRlcikgeworCQlnZW8tPnZ0YyAgPSAod2lkdGggPCAxOTMpID8gMiA6ICgod2lkdGggPCAzODUpID8gMSA6IDApOworCQlnZW8tPmNvbWIgPSAod2lkdGggPCA3NjkpID8gMSA6IDA7CisJfSBlbHNlIHsKKwkJZ2VvLT52dGMgID0gMDsKKwkJZ2VvLT5jb21iID0gMDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCiBidHR2X2FwcGx5X2dlbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9nZW9tZXRyeSAqZ2VvLCBpbnQgb2RkKQogewotICAgICAgICBpbnQgb2ZmID0gb2RkID8gMHg4MCA6IDB4MDA7CisJaW50IG9mZiA9IG9kZCA/IDB4ODAgOiAweDAwOwogCiAJaWYgKGdlby0+Y29tYikKIAkJYnRvcihCVDg0OF9WU0NBTEVfQ09NQiwgQlQ4NDhfRV9WU0NBTEVfSEkrb2ZmKTsKIAllbHNlCiAJCWJ0YW5kKH5CVDg0OF9WU0NBTEVfQ09NQiwgQlQ4NDhfRV9WU0NBTEVfSEkrb2ZmKTsKIAotICAgICAgICBidHdyaXRlKGdlby0+dnRjLCAgICAgICAgICAgICBCVDg0OF9FX1ZUQytvZmYpOwotICAgICAgICBidHdyaXRlKGdlby0+aHNjYWxlID4+IDgsICAgICBCVDg0OF9FX0hTQ0FMRV9ISStvZmYpOwotICAgICAgICBidHdyaXRlKGdlby0+aHNjYWxlICYgMHhmZiwgICBCVDg0OF9FX0hTQ0FMRV9MTytvZmYpOwotICAgICAgICBidGFvcigoZ2VvLT52c2NhbGU+PjgpLCAweGUwLCBCVDg0OF9FX1ZTQ0FMRV9ISStvZmYpOwotICAgICAgICBidHdyaXRlKGdlby0+dnNjYWxlICYgMHhmZiwgICBCVDg0OF9FX1ZTQ0FMRV9MTytvZmYpOwotICAgICAgICBidHdyaXRlKGdlby0+d2lkdGggJiAweGZmLCAgICBCVDg0OF9FX0hBQ1RJVkVfTE8rb2ZmKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPmhkZWxheSAmIDB4ZmYsICAgQlQ4NDhfRV9IREVMQVlfTE8rb2ZmKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPnNoZWlnaHQgJiAweGZmLCAgQlQ4NDhfRV9WQUNUSVZFX0xPK29mZik7Ci0gICAgICAgIGJ0d3JpdGUoZ2VvLT52ZGVsYXkgJiAweGZmLCAgIEJUODQ4X0VfVkRFTEFZX0xPK29mZik7Ci0gICAgICAgIGJ0d3JpdGUoZ2VvLT5jcm9wLCAgICAgICAgICAgIEJUODQ4X0VfQ1JPUCtvZmYpOworCWJ0d3JpdGUoZ2VvLT52dGMsICAgICAgICAgICAgIEJUODQ4X0VfVlRDK29mZik7CisJYnR3cml0ZShnZW8tPmhzY2FsZSA+PiA4LCAgICAgQlQ4NDhfRV9IU0NBTEVfSEkrb2ZmKTsKKwlidHdyaXRlKGdlby0+aHNjYWxlICYgMHhmZiwgICBCVDg0OF9FX0hTQ0FMRV9MTytvZmYpOworCWJ0YW9yKChnZW8tPnZzY2FsZT4+OCksIDB4ZTAsIEJUODQ4X0VfVlNDQUxFX0hJK29mZik7CisJYnR3cml0ZShnZW8tPnZzY2FsZSAmIDB4ZmYsICAgQlQ4NDhfRV9WU0NBTEVfTE8rb2ZmKTsKKwlidHdyaXRlKGdlby0+d2lkdGggJiAweGZmLCAgICBCVDg0OF9FX0hBQ1RJVkVfTE8rb2ZmKTsKKwlidHdyaXRlKGdlby0+aGRlbGF5ICYgMHhmZiwgICBCVDg0OF9FX0hERUxBWV9MTytvZmYpOworCWJ0d3JpdGUoZ2VvLT5zaGVpZ2h0ICYgMHhmZiwgIEJUODQ4X0VfVkFDVElWRV9MTytvZmYpOworCWJ0d3JpdGUoZ2VvLT52ZGVsYXkgJiAweGZmLCAgIEJUODQ4X0VfVkRFTEFZX0xPK29mZik7CisJYnR3cml0ZShnZW8tPmNyb3AsICAgICAgICAgICAgQlQ4NDhfRV9DUk9QK29mZik7CiAJYnR3cml0ZShnZW8tPnZ0b3RhbD4+OCwgICAgICAgQlQ4NDhfVlRPVEFMX0hJKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPnZ0b3RhbCAmIDB4ZmYsICAgQlQ4NDhfVlRPVEFMX0xPKTsKKwlidHdyaXRlKGdlby0+dnRvdGFsICYgMHhmZiwgICBCVDg0OF9WVE9UQUxfTE8pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MjAsNyArNDIwLDcgQEAKIAl9IGVsc2UgewogCQlkZWxfdGltZXIoJmJ0di0+dGltZW91dCk7CiAJfQotICAgICAgICBidHYtPm1haW4uY3B1W1JJU0NfU0xPVF9MT09QXSA9IGNwdV90b19sZTMyKGNtZCk7CisJYnR2LT5tYWluLmNwdVtSSVNDX1NMT1RfTE9PUF0gPSBjcHVfdG9fbGUzMihjbWQpOwogCiAJYnRhb3IoY2FwY3RsLCB+MHgwZiwgQlQ4NDhfQ0FQX0NUTCk7CiAJaWYgKGNhcGN0bCkgewpAQCAtNDMyLDcgKzQzMiw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKCFidHYtPmRtYV9vbikKIAkJCXJldHVybjsKLSAgICAgICAgICAgICAgICBidGFuZCh+MywgQlQ4NDhfR1BJT19ETUFfQ1RMKTsKKwkJYnRhbmQofjMsIEJUODQ4X0dQSU9fRE1BX0NUTCk7CiAJCWJ0di0+ZG1hX29uID0gMDsKIAl9CiAJcmV0dXJuOwpAQCAtNDYwLDE5ICs0NjAsMTkgQEAKIAlidHYtPm1haW4uY3B1WzZdID0gY3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19KVU1QKTsKIAlidHYtPm1haW4uY3B1WzddID0gY3B1X3RvX2xlMzIoYnR2LT5tYWluLmRtYSArICg4PDwyKSk7CiAKLSAgICAgICAgYnR2LT5tYWluLmNwdVs4XSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfU1lOQyB8IEJUODQ4X1JJU0NfUkVTWU5DIHwKKwlidHYtPm1haW4uY3B1WzhdID0gY3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19TWU5DIHwgQlQ4NDhfUklTQ19SRVNZTkMgfAogCQkJCSAgICAgICBCVDg0OF9GSUZPX1NUQVRVU19WUk8pOwotICAgICAgICBidHYtPm1haW4uY3B1WzldID0gY3B1X3RvX2xlMzIoMCk7CisJYnR2LT5tYWluLmNwdVs5XSA9IGNwdV90b19sZTMyKDApOwogCiAJLyogYm90dG9tIGZpZWxkICovCi0gICAgICAgIGJ0di0+bWFpbi5jcHVbMTBdID0gY3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19KVU1QKTsKKwlidHYtPm1haW4uY3B1WzEwXSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfSlVNUCk7CiAJYnR2LT5tYWluLmNwdVsxMV0gPSBjcHVfdG9fbGUzMihidHYtPm1haW4uZG1hICsgKDEyPDwyKSk7Ci0gICAgICAgIGJ0di0+bWFpbi5jcHVbMTJdID0gY3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19KVU1QKTsKKwlidHYtPm1haW4uY3B1WzEyXSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfSlVNUCk7CiAJYnR2LT5tYWluLmNwdVsxM10gPSBjcHVfdG9fbGUzMihidHYtPm1haW4uZG1hICsgKDE0PDwyKSk7CiAKIAkvKiBqdW1wIGJhY2sgdG8gdG9wIGZpZWxkICovCiAJYnR2LT5tYWluLmNwdVsxNF0gPSBjcHVfdG9fbGUzMihCVDg0OF9SSVNDX0pVTVApOwotICAgICAgICBidHYtPm1haW4uY3B1WzE1XSA9IGNwdV90b19sZTMyKGJ0di0+bWFpbi5kbWEgKyAoMDw8MikpOworCWJ0di0+bWFpbi5jcHVbMTVdID0gY3B1X3RvX2xlMzIoYnR2LT5tYWluLmRtYSArICgwPDwyKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LmgKaW5kZXggZDI1NGU5MC4uMTI0ZWE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LmgKQEAgLTIwLDEyMyArMjAsMTQ4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBleHBvcnRlZCBieSBidHR2LWNhcmRzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSNkZWZpbmUgQlRUVl9VTktOT1dOICAgICAgIDB4MDAKLSNkZWZpbmUgQlRUVl9NSVJPICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQlRUVl9IQVVQUEFVR0UgICAgIDB4MDIKLSNkZWZpbmUgQlRUVl9TVEIgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgQlRUVl9JTlRFTCAgICAgICAgIDB4MDQKLSNkZWZpbmUgQlRUVl9ESUFNT05EICAgICAgIDB4MDUKLSNkZWZpbmUgQlRUVl9BVkVSTUVESUEgICAgIDB4MDYKLSNkZWZpbmUgQlRUVl9NQVRSSVhfVklTSU9OIDB4MDcKLSNkZWZpbmUgQlRUVl9GTFlWSURFTyAgICAgIDB4MDgKLSNkZWZpbmUgQlRUVl9UVVJCT1RWICAgICAgIDB4MDkKLSNkZWZpbmUgQlRUVl9IQVVQUEFVR0U4NzggIDB4MGEKLSNkZWZpbmUgQlRUVl9NSVJPUFJPICAgICAgIDB4MGIKLSNkZWZpbmUgQlRUVl9BRFNURUNIX1RWICAgIDB4MGMKLSNkZWZpbmUgQlRUVl9BVkVSTUVESUE5OCAgIDB4MGQKLSNkZWZpbmUgQlRUVl9WSFggICAgICAgICAgIDB4MGUKLSNkZWZpbmUgQlRUVl9aT0xUUklYICAgICAgIDB4MGYKLSNkZWZpbmUgQlRUVl9QSVhWSUVXUExBWVRWIDB4MTAKLSNkZWZpbmUgQlRUVl9XSU5WSUVXXzYwMSAgIDB4MTEKLSNkZWZpbmUgQlRUVl9BVkVDX0lOVEVSQ0FQIDB4MTIKLSNkZWZpbmUgQlRUVl9MSUZFX0ZMWUtJVCAgIDB4MTMKLSNkZWZpbmUgQlRUVl9DRUlfUkFGRkxFUyAgIDB4MTQKLSNkZWZpbmUgQlRUVl9DT05GRVJFTkNFVFYgIDB4MTUKLSNkZWZpbmUgQlRUVl9QSE9FQkVfVFZNQVMgIDB4MTYKLSNkZWZpbmUgQlRUVl9NT0RURUNfMjA1ICAgIDB4MTcKLSNkZWZpbmUgQlRUVl9NQUdJQ1RWSUVXMDYxIDB4MTgKLSNkZWZpbmUgQlRUVl9WT0JJU19CT09TVEFSIDB4MTkKLSNkZWZpbmUgQlRUVl9IQVVQUEFVR19XQ0FNIDB4MWEKLSNkZWZpbmUgQlRUVl9NQVhJICAgICAgICAgIDB4MWIKLSNkZWZpbmUgQlRUVl9URVJSQVRWICAgICAgIDB4MWMKLSNkZWZpbmUgQlRUVl9QWEMyMDAgICAgICAgIDB4MWQKLSNkZWZpbmUgQlRUVl9GTFlWSURFT185OCAgIDB4MWUKLSNkZWZpbmUgQlRUVl9JUFJPVFYgICAgICAgIDB4MWYKLSNkZWZpbmUgQlRUVl9JTlRFTF9DX1NfUENJIDB4MjAKLSNkZWZpbmUgQlRUVl9URVJSQVRWQUxVRSAgIDB4MjEKLSNkZWZpbmUgQlRUVl9XSU5GQVNUMjAwMCAgIDB4MjIKLSNkZWZpbmUgQlRUVl9DSFJPTk9TX1ZTMiAgIDB4MjMKLSNkZWZpbmUgQlRUVl9UWVBIT09OX1RWSUVXIDB4MjQKLSNkZWZpbmUgQlRUVl9QWEVMVldQTFRWUFJPIDB4MjUKLSNkZWZpbmUgQlRUVl9NQUdJQ1RWSUVXMDYzIDB4MjYKLSNkZWZpbmUgQlRUVl9QSU5OQUNMRSAgICAgIDB4MjcKLSNkZWZpbmUgQlRUVl9TVEIyICAgICAgICAgIDB4MjgKLSNkZWZpbmUgQlRUVl9BVlBIT05FOTggICAgIDB4MjkKLSNkZWZpbmUgQlRUVl9QVjk1MSAgICAgICAgIDB4MmEKLSNkZWZpbmUgQlRUVl9PTkFJUl9UViAgICAgIDB4MmIKLSNkZWZpbmUgQlRUVl9TSUdNQV9UVklJX0ZNIDB4MmMKLSNkZWZpbmUgQlRUVl9NQVRSSVhfVklTSU9OMiAweDJkCi0jZGVmaW5lIEJUVFZfWk9MVFJJWF9HRU5JRSAweDJlCi0jZGVmaW5lIEJUVFZfVEVSUkFUVlJBRElPICAweDJmCi0jZGVmaW5lIEJUVFZfRFlOQUxJTksgICAgICAweDMwCi0jZGVmaW5lIEJUVFZfR1ZCQ1RWM1BDSSAgICAweDMxCi0jZGVmaW5lIEJUVFZfUFhFTFZXUExUVlBBSyAweDMyCi0jZGVmaW5lIEJUVFZfRUFHTEUgICAgICAgICAweDMzCi0jZGVmaW5lIEJUVFZfUElOTkFDTEVQUk8gICAweDM0Ci0jZGVmaW5lIEJUVFZfVFZJRVdfUkRTX0ZNICAweDM1Ci0jZGVmaW5lIEJUVFZfTElGRVRFQ185NDE1ICAweDM2Ci0jZGVmaW5lIEJUVFZfQkVTVEJVWV9FQVNZVFYgMHgzNwotI2RlZmluZSBCVFRWX0ZMWVZJREVPXzk4Rk0gMHgzOAotI2RlZmluZSBCVFRWX0dNVjEgICAgICAgICAgMHgzZAotI2RlZmluZSBCVFRWX0JFU1RCVVlfRUFTWVRWMiAweDNlCi0jZGVmaW5lIEJUVFZfQVRJX1RWV09OREVSICAweDNmCi0jZGVmaW5lIEJUVFZfQVRJX1RWV09OREVSVkUgMHg0MAotI2RlZmluZSBCVFRWX0ZMWVZJREVPMjAwMCAgIDB4NDEKLSNkZWZpbmUgQlRUVl9URVJSQVRWQUxVRVIgICAweDQyCi0jZGVmaW5lIEJUVFZfR1ZCQ1RWNFBDSSAgICAgMHg0MwotI2RlZmluZSBCVFRWX1ZPT0RPT1RWX0ZNICAgIDB4NDQKLSNkZWZpbmUgQlRUVl9BSU1NUyAgICAgICAgICAweDQ1Ci0jZGVmaW5lIEJUVFZfUFZfQlQ4NzhQX1BMVVMgMHg0NgotI2RlZmluZSBCVFRWX0ZMWVZJREVPOThFWiAgIDB4NDcKLSNkZWZpbmUgQlRUVl9QVl9CVDg3OFBfOUIgICAweDQ4Ci0jZGVmaW5lIEJUVFZfU0VOU09SQVkzMTEgICAgMHg0OQotI2RlZmluZSBCVFRWX1JWNjA1ICAgICAgICAgIDB4NGEKLSNkZWZpbmUgQlRUVl9XSU5EVlIgICAgICAgICAweDRjCi0jZGVmaW5lIEJUVFZfR1JBTkRURUMgICAgICAgMHg0ZAotI2RlZmluZSBCVFRWX0tXT1JMRCAgICAgICAgIDB4NGUKLSNkZWZpbmUgQlRUVl9IQVVQUEFVR0VQVlIgICAweDUwCi0jZGVmaW5lIEJUVFZfR1ZCQ1RWNVBDSSAgICAgMHg1MQotI2RlZmluZSBCVFRWX09TUFJFWTF4MCAgICAgIDB4NTIKLSNkZWZpbmUgQlRUVl9PU1BSRVkxeDBfODQ4ICAweDUzCi0jZGVmaW5lIEJUVFZfT1NQUkVZMTAxXzg0OCAgMHg1NAotI2RlZmluZSBCVFRWX09TUFJFWTF4MSAgICAgIDB4NTUKLSNkZWZpbmUgQlRUVl9PU1BSRVkxeDFfU1ZJRCAweDU2Ci0jZGVmaW5lIEJUVFZfT1NQUkVZMnh4ICAgICAgMHg1NwotI2RlZmluZSBCVFRWX09TUFJFWTJ4MF9TVklEIDB4NTgKLSNkZWZpbmUgQlRUVl9PU1BSRVkyeDAgICAgICAweDU5Ci0jZGVmaW5lIEJUVFZfT1NQUkVZNTAwICAgICAgMHg1YQotI2RlZmluZSBCVFRWX09TUFJFWTU0MCAgICAgIDB4NWIKLSNkZWZpbmUgQlRUVl9PU1BSRVkyMDAwICAgICAweDVjCi0jZGVmaW5lIEJUVFZfSURTX0VBR0xFICAgICAgMHg1ZAotI2RlZmluZSBCVFRWX1BJTk5BQ0xFU0FUICAgIDB4NWUKLSNkZWZpbmUgQlRUVl9GT1JNQUNfUFJPVFYgICAweDVmCi0jZGVmaW5lIEJUVFZfRVVSRVNZU19QSUNPTE8gMHg2MQotI2RlZmluZSBCVFRWX1BWMTUwICAgICAgICAgIDB4NjIKLSNkZWZpbmUgQlRUVl9BRF9UVks1MDMgICAgICAweDYzCi0jZGVmaW5lIEJUVFZfSVZDMjAwICAgICAgICAgMHg2NgotI2RlZmluZSBCVFRWX1hHVUFSRCAgICAgICAgIDB4NjcKLSNkZWZpbmUgQlRUVl9ORUJVTEFfRElHSVRWICAweDY4Ci0jZGVmaW5lIEJUVFZfUFYxNDMgICAgICAgICAgMHg2OQotI2RlZmluZSBCVFRWX0lWQzEwMCAgICAgICAgIDB4NmUKLSNkZWZpbmUgQlRUVl9JVkMxMjAgICAgICAgICAweDZmCi0jZGVmaW5lIEJUVFZfUENfSERUViAgICAgICAgMHg3MAotI2RlZmluZSBCVFRWX1RXSU5IQU5fRFNUICAgIDB4NzEKLSNkZWZpbmUgQlRUVl9XSU5GQVNUVkMxMDAgICAweDcyCi0jZGVmaW5lIEJUVFZfU0lNVVNfR1ZDMTEwMCAgMHg3NAotI2RlZmluZSBCVFRWX05HU1RWX1BMVVMgICAgIDB4NzUKLSNkZWZpbmUgQlRUVl9MTUxCVDQgICAgICAgICAweDc2Ci0jZGVmaW5lIEJUVFZfUElDT0xPX1RFVFJBX0NISVAgMHg3OQotI2RlZmluZSBCVFRWX0FWRFZCVF83NzEgICAgIDB4N2IKLSNkZWZpbmUgQlRUVl9BVkRWQlRfNzYxICAgICAweDdjCi0jZGVmaW5lIEJUVFZfTUFUUklYX1ZJU0lPTlNRICAweDdkCi0jZGVmaW5lIEJUVFZfTUFUUklYX1ZJU0lPTlNMQyAweDdlCi0jZGVmaW5lIEJUVFZfQVBBQ19WSUVXQ09NUCAgMHg3ZgotI2RlZmluZSBCVFRWX0RWSUNPX0RWQlRfTElURSAgMHg4MAotI2RlZmluZSBCVFRWX1RJQkVUX0NTMTYgIDB4ODMKLSNkZWZpbmUgQlRUVl9LT0RJQ09NXzQ0MDBSICAweDg0Ci0jZGVmaW5lIEJUVFZfQURMSU5LX1JUVjI0ICAgMHg4NgotI2RlZmluZSBCVFRWX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFIDB4ODcKLSNkZWZpbmUgQlRUVl9BQ09SUF9ZODc4RiAgIDB4ODgKKyNkZWZpbmUgQlRUVl9CT0FSRF9VTktOT1dOICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEJUVFZfQk9BUkRfTUlSTyAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBCVFRWX0JPQVJEX0hBVVBQQVVHRSAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQlRUVl9CT0FSRF9TVEIgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEJUVFZfQk9BUkRfSU5URUwgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBCVFRWX0JPQVJEX0RJQU1PTkQgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQlRUVl9CT0FSRF9BVkVSTUVESUEgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIEJUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTiAgICAgICAgICAgMHgwNworI2RlZmluZSBCVFRWX0JPQVJEX0ZMWVZJREVPICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQlRUVl9CT0FSRF9UVVJCT1RWICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4ICAgICAgICAgICAgMHgwYQorI2RlZmluZSBCVFRWX0JPQVJEX01JUk9QUk8gICAgICAgICAgICAgICAgIDB4MGIKKyNkZWZpbmUgQlRUVl9CT0FSRF9BRFNURUNIX1RWICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIEJUVFZfQk9BUkRfQVZFUk1FRElBOTggICAgICAgICAgICAgMHgwZAorI2RlZmluZSBCVFRWX0JPQVJEX1ZIWCAgICAgICAgICAgICAgICAgICAgIDB4MGUKKyNkZWZpbmUgQlRUVl9CT0FSRF9aT0xUUklYICAgICAgICAgICAgICAgICAweDBmCisjZGVmaW5lIEJUVFZfQk9BUkRfUElYVklFV1BMQVlUViAgICAgICAgICAgMHgxMAorI2RlZmluZSBCVFRWX0JPQVJEX1dJTlZJRVdfNjAxICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQlRUVl9CT0FSRF9BVkVDX0lOVEVSQ0FQICAgICAgICAgICAweDEyCisjZGVmaW5lIEJUVFZfQk9BUkRfTElGRV9GTFlLSVQgICAgICAgICAgICAgMHgxMworI2RlZmluZSBCVFRWX0JPQVJEX0NFSV9SQUZGTEVTICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgQlRUVl9CT0FSRF9DT05GRVJFTkNFVFYgICAgICAgICAgICAweDE1CisjZGVmaW5lIEJUVFZfQk9BUkRfUEhPRUJFX1RWTUFTICAgICAgICAgICAgMHgxNgorI2RlZmluZSBCVFRWX0JPQVJEX01PRFRFQ18yMDUgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxICAgICAgICAgICAweDE4CisjZGVmaW5lIEJUVFZfQk9BUkRfVk9CSVNfQk9PU1RBUiAgICAgICAgICAgMHgxOQorI2RlZmluZSBCVFRWX0JPQVJEX0hBVVBQQVVHX1dDQU0gICAgICAgICAgIDB4MWEKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQVhJICAgICAgICAgICAgICAgICAgICAweDFiCisjZGVmaW5lIEJUVFZfQk9BUkRfVEVSUkFUViAgICAgICAgICAgICAgICAgMHgxYworI2RlZmluZSBCVFRWX0JPQVJEX1BYQzIwMCAgICAgICAgICAgICAgICAgIDB4MWQKKyNkZWZpbmUgQlRUVl9CT0FSRF9GTFlWSURFT185OCAgICAgICAgICAgICAweDFlCisjZGVmaW5lIEJUVFZfQk9BUkRfSVBST1RWICAgICAgICAgICAgICAgICAgMHgxZgorI2RlZmluZSBCVFRWX0JPQVJEX0lOVEVMX0NfU19QQ0kgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSAgICAgICAgICAgICAweDIxCisjZGVmaW5lIEJUVFZfQk9BUkRfV0lORkFTVDIwMDAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBCVFRWX0JPQVJEX0NIUk9OT1NfVlMyICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXICAgICAgICAgICAweDI0CisjZGVmaW5lIEJUVFZfQk9BUkRfUFhFTFZXUExUVlBSTyAgICAgICAgICAgMHgyNQorI2RlZmluZSBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjMgICAgICAgICAgIDB4MjYKKyNkZWZpbmUgQlRUVl9CT0FSRF9QSU5OQUNMRSAgICAgICAgICAgICAgICAweDI3CisjZGVmaW5lIEJUVFZfQk9BUkRfU1RCMiAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBCVFRWX0JPQVJEX0FWUEhPTkU5OCAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVjk1MSAgICAgICAgICAgICAgICAgICAweDJhCisjZGVmaW5lIEJUVFZfQk9BUkRfT05BSVJfVFYgICAgICAgICAgICAgICAgMHgyYgorI2RlZmluZSBCVFRWX0JPQVJEX1NJR01BX1RWSUlfRk0gICAgICAgICAgIDB4MmMKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OMiAgICAgICAgICAweDJkCisjZGVmaW5lIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSAgICAgICAgICAgMHgyZQorI2RlZmluZSBCVFRWX0JPQVJEX1RFUlJBVFZSQURJTyAgICAgICAgICAgIDB4MmYKKyNkZWZpbmUgQlRUVl9CT0FSRF9EWU5BTElOSyAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIEJUVFZfQk9BUkRfR1ZCQ1RWM1BDSSAgICAgICAgICAgICAgMHgzMQorI2RlZmluZSBCVFRWX0JPQVJEX1BYRUxWV1BMVFZQQUsgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgQlRUVl9CT0FSRF9FQUdMRSAgICAgICAgICAgICAgICAgICAweDMzCisjZGVmaW5lIEJUVFZfQk9BUkRfUElOTkFDTEVQUk8gICAgICAgICAgICAgMHgzNAorI2RlZmluZSBCVFRWX0JPQVJEX1RWSUVXX1JEU19GTSAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgQlRUVl9CT0FSRF9MSUZFVEVDXzk0MTUgICAgICAgICAgICAweDM2CisjZGVmaW5lIEJUVFZfQk9BUkRfQkVTVEJVWV9FQVNZVFYgICAgICAgICAgMHgzNworI2RlZmluZSBCVFRWX0JPQVJEX0ZMWVZJREVPXzk4Rk0gICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQlRUVl9CT0FSRF9HUkFORFRFQyAgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIEJUVFZfQk9BUkRfQVNLRVlfQ1BIMDYwICAgICAgICAgICAgMHgzYQorI2RlZmluZSBCVFRWX0JPQVJEX0FTS0VZX0NQSDAzWCAgICAgICAgICAgIDB4M2IKKyNkZWZpbmUgQlRUVl9CT0FSRF9NTTEwMFBDVFYgICAgICAgICAgICAgICAweDNjCisjZGVmaW5lIEJUVFZfQk9BUkRfR01WMSAgICAgICAgICAgICAgICAgICAgMHgzZAorI2RlZmluZSBCVFRWX0JPQVJEX0JFU1RCVVlfRUFTWVRWMiAgICAgICAgIDB4M2UKKyNkZWZpbmUgQlRUVl9CT0FSRF9BVElfVFZXT05ERVIgICAgICAgICAgICAweDNmCisjZGVmaW5lIEJUVFZfQk9BUkRfQVRJX1RWV09OREVSVkUgICAgICAgICAgMHg0MAorI2RlZmluZSBCVFRWX0JPQVJEX0ZMWVZJREVPMjAwMCAgICAgICAgICAgIDB4NDEKKyNkZWZpbmUgQlRUVl9CT0FSRF9URVJSQVRWQUxVRVIgICAgICAgICAgICAweDQyCisjZGVmaW5lIEJUVFZfQk9BUkRfR1ZCQ1RWNFBDSSAgICAgICAgICAgICAgMHg0MworI2RlZmluZSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgQlRUVl9CT0FSRF9BSU1NUyAgICAgICAgICAgICAgICAgICAweDQ1CisjZGVmaW5lIEJUVFZfQk9BUkRfUFZfQlQ4NzhQX1BMVVMgICAgICAgICAgMHg0NgorI2RlZmluZSBCVFRWX0JPQVJEX0ZMWVZJREVPOThFWiAgICAgICAgICAgIDB4NDcKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVl9CVDg3OFBfOUIgICAgICAgICAgICAweDQ4CisjZGVmaW5lIEJUVFZfQk9BUkRfU0VOU09SQVkzMTEgICAgICAgICAgICAgMHg0OQorI2RlZmluZSBCVFRWX0JPQVJEX1JWNjA1ICAgICAgICAgICAgICAgICAgIDB4NGEKKyNkZWZpbmUgQlRUVl9CT0FSRF9QT1dFUkNMUl9NVFY4NzggICAgICAgICAweDRiCisjZGVmaW5lIEJUVFZfQk9BUkRfV0lORFZSICAgICAgICAgICAgICAgICAgMHg0YworI2RlZmluZSBCVFRWX0JPQVJEX0dSQU5EVEVDX01VTFRJICAgICAgICAgIDB4NGQKKyNkZWZpbmUgQlRUVl9CT0FSRF9LV09STEQgICAgICAgICAgICAgICAgICAweDRlCisjZGVmaW5lIEJUVFZfQk9BUkRfRFNQX1RDVklERU8gICAgICAgICAgICAgMHg0ZgorI2RlZmluZSBCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQlRUVl9CT0FSRF9HVkJDVFY1UENJICAgICAgICAgICAgICAweDUxCisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZMXgwICAgICAgICAgICAgICAgMHg1MgorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTF4MF84NDggICAgICAgICAgIDB4NTMKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVkxMDFfODQ4ICAgICAgICAgICAweDU0CisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZMXgxICAgICAgICAgICAgICAgMHg1NQorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTF4MV9TVklEICAgICAgICAgIDB4NTYKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVkyeHggICAgICAgICAgICAgICAweDU3CisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZMngwX1NWSUQgICAgICAgICAgMHg1OAorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTJ4MCAgICAgICAgICAgICAgIDB4NTkKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVk1MDAgICAgICAgICAgICAgICAweDVhCisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZNTQwICAgICAgICAgICAgICAgMHg1YgorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTIwMDAgICAgICAgICAgICAgIDB4NWMKKyNkZWZpbmUgQlRUVl9CT0FSRF9JRFNfRUFHTEUgICAgICAgICAgICAgICAweDVkCisjZGVmaW5lIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQgICAgICAgICAgICAgMHg1ZQorI2RlZmluZSBCVFRWX0JPQVJEX0ZPUk1BQ19QUk9UViAgICAgICAgICAgIDB4NWYKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQUNIVFYgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIEJUVFZfQk9BUkRfRVVSRVNZU19QSUNPTE8gICAgICAgICAgMHg2MQorI2RlZmluZSBCVFRWX0JPQVJEX1BWMTUwICAgICAgICAgICAgICAgICAgIDB4NjIKKyNkZWZpbmUgQlRUVl9CT0FSRF9BRF9UVks1MDMgICAgICAgICAgICAgICAweDYzCisjZGVmaW5lIEJUVFZfQk9BUkRfSEVSQ1VMRVNfU01fVFYgICAgICAgICAgMHg2NAorI2RlZmluZSBCVFRWX0JPQVJEX1BBQ0VUViAgICAgICAgICAgICAgICAgIDB4NjUKKyNkZWZpbmUgQlRUVl9CT0FSRF9JVkMyMDAgICAgICAgICAgICAgICAgICAweDY2CisjZGVmaW5lIEJUVFZfQk9BUkRfWEdVQVJEICAgICAgICAgICAgICAgICAgMHg2NworI2RlZmluZSBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFYgICAgICAgICAgIDB4NjgKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVjE0MyAgICAgICAgICAgICAgICAgICAweDY5CisjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMDlYMV9NSU5JRElOICAgICAgICAgMHg2YQorI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDA5WDFfQ09NQkkgICAgICAgICAgIDB4NmIKKyNkZWZpbmUgQlRUVl9CT0FSRF9WRDAwOV9NSU5JRElOICAgICAgICAgICAweDZjCisjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMDlfQ09NQkkgICAgICAgICAgICAgMHg2ZAorI2RlZmluZSBCVFRWX0JPQVJEX0lWQzEwMCAgICAgICAgICAgICAgICAgIDB4NmUKKyNkZWZpbmUgQlRUVl9CT0FSRF9JVkMxMjAgICAgICAgICAgICAgICAgICAweDZmCisjZGVmaW5lIEJUVFZfQk9BUkRfUENfSERUViAgICAgICAgICAgICAgICAgMHg3MAorI2RlZmluZSBCVFRWX0JPQVJEX1RXSU5IQU5fRFNUICAgICAgICAgICAgIDB4NzEKKyNkZWZpbmUgQlRUVl9CT0FSRF9XSU5GQVNUVkMxMDAgICAgICAgICAgICAweDcyCisjZGVmaW5lIEJUVFZfQk9BUkRfVEVWNTYwICAgICAgICAgICAgICAgICAgMHg3MworI2RlZmluZSBCVFRWX0JPQVJEX1NJTVVTX0dWQzExMDAgICAgICAgICAgIDB4NzQKKyNkZWZpbmUgQlRUVl9CT0FSRF9OR1NUVl9QTFVTICAgICAgICAgICAgICAweDc1CisjZGVmaW5lIEJUVFZfQk9BUkRfTE1MQlQ0ICAgICAgICAgICAgICAgICAgMHg3NgorI2RlZmluZSBCVFRWX0JPQVJEX1RFS1JBTV9NMjA1ICAgICAgICAgICAgIDB4NzcKKyNkZWZpbmUgQlRUVl9CT0FSRF9DT05UVkZNSSAgICAgICAgICAgICAgICAweDc4CisjZGVmaW5lIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAgICAgICAgMHg3OQorI2RlZmluZSBCVFRWX0JPQVJEX1NQSVJJVF9UViAgICAgICAgICAgICAgIDB4N2EKKyNkZWZpbmUgQlRUVl9CT0FSRF9BVkRWQlRfNzcxICAgICAgICAgICAgICAweDdiCisjZGVmaW5lIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSAgICAgICAgICAgICAgMHg3YworI2RlZmluZSBCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05TUSAgICAgICAgIDB4N2QKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU0xDICAgICAgICAweDdlCisjZGVmaW5lIEJUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUCAgICAgICAgICAgMHg3ZgorI2RlZmluZSBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURSAgICAgICAgIDB4ODAKKyNkZWZpbmUgQlRUVl9CT0FSRF9WR0VBUl9NWVZDRCAgICAgICAgICAgICAweDgxCisjZGVmaW5lIEJUVFZfQk9BUkRfU1VQRVJfVFYgICAgICAgICAgICAgICAgMHg4MgorI2RlZmluZSBCVFRWX0JPQVJEX1RJQkVUX0NTMTYgICAgICAgICAgICAgIDB4ODMKKyNkZWZpbmUgQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSICAgICAgICAgICAweDg0CisjZGVmaW5lIEJUVFZfQk9BUkRfS09ESUNPTV80NDAwUl9TTCAgICAgICAgMHg4NQorI2RlZmluZSBCVFRWX0JPQVJEX0FETElOS19SVFYyNCAgICAgICAgICAgIDB4ODYKKyNkZWZpbmUgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURSAweDg3CisjZGVmaW5lIEJUVFZfQk9BUkRfQUNPUlBfWTg3OEYgICAgICAgICAgICAgMHg4OAorI2RlZmluZSBCVFRWX0JPQVJEX0NPTkNFUFRST05JQ19DVFZGTUkyICAgIDB4ODkKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVl9CVDg3OFBfMkUgICAgICAgICAgICAweDhhCisjZGVmaW5lIEJUVFZfQk9BUkRfUFZfTTQ5MDAgICAgICAgICAgICAgICAgMHg4YgorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTQ0MCAgICAgICAgICAgICAgIDB4OGMKKyNkZWZpbmUgQlRUVl9CT0FSRF9BU09VTkRfU0tZRVlFCSAgIDB4OGQKIAogLyogaTJjIGFkZHJlc3MgbGlzdCAqLwogI2RlZmluZSBJMkNfVFNBNTUyMiAgICAgICAgMHhjMgpAQCAtMTc3LDcgKzIwMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAgICAgc3ViczsgICAgIC8qIHN0cnVjdCBidHR2X3N1Yl9kZXZpY2UgKi8KIAogCS8qIGRldmljZSBjb25maWcgKi8KLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgbnI7ICAgICAgIC8qIGRldiBuciAoZm9yIHByaW50aygiYnR0diVkOiAuLi4iKTsgICovCisJdW5zaWduZWQgaW50ICAgICAgICAgbnI7ICAgICAgIC8qIGRldiBuciAoZm9yIHByaW50aygiYnR0diVkOiAuLi4iKTsgICovCiAJdW5zaWduZWQgaW50ICAgICAgICAgdHlwZTsgICAgIC8qIGNhcmQgdHlwZSAocG9pbnRlciBpbnRvIHR2Y2FyZHNbXSkgICovCiAJY2hhciAgICAgICAgICAgICAgICAgbmFtZVs4XTsgIC8qIGRldiBuYW1lICovCiB9OwpAQCAtMTg2LDE2ICsyMTEsMTYgQEAKIAogc3RydWN0IHR2Y2FyZAogewotICAgICAgICBjaGFyICpuYW1lOwotICAgICAgICB1bnNpZ25lZCBpbnQgdmlkZW9faW5wdXRzOwotICAgICAgICB1bnNpZ25lZCBpbnQgYXVkaW9faW5wdXRzOwotICAgICAgICB1bnNpZ25lZCBpbnQgdHVuZXI7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdmhzOworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IHZpZGVvX2lucHV0czsKKwl1bnNpZ25lZCBpbnQgYXVkaW9faW5wdXRzOworCXVuc2lnbmVkIGludCB0dW5lcjsKKwl1bnNpZ25lZCBpbnQgc3ZoczsKIAl1bnNpZ25lZCBpbnQgZGlnaXRhbF9tb2RlOyAvLyBESUdJVEFMX01PREVfQ0FNRVJBIG9yIERJR0lUQUxfTU9ERV9WSURFTwotICAgICAgICB1MzIgZ3Bpb21hc2s7Ci0gICAgICAgIHUzMiBtdXhzZWxbMTZdOwotICAgICAgICB1MzIgYXVkaW9tdXhbNl07IC8qIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBtdXRlLCBzdGVyZW8gKi8KLSAgICAgICAgdTMyIGdwaW9tYXNrMjsgICAvKiBHUElPIE1VWCBtYXNrICovCisJdTMyIGdwaW9tYXNrOworCXUzMiBtdXhzZWxbMTZdOworCXUzMiBhdWRpb211eFs2XTsgLyogVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwsIG11dGUsIHN0ZXJlbyAqLworCXUzMiBncGlvbWFzazI7ICAgLyogR1BJTyBNVVggbWFzayAqLwogCiAJLyogaTJjIGF1ZGlvIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG5vX21zcDM0eHg6MTsKQEAgLTIxOCw2ICsyNDMsNyBAQAogCiAJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7CiAJdW5zaWduZWQgaW50IHR1bmVyX2FkZHI7CisJdW5zaWduZWQgaW50IHJhZGlvX2FkZHI7CiAKIAl1bnNpZ25lZCBpbnQgaGFzX3JhZGlvOwogCXZvaWQgKCphdWRpb19ob29rKShzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpAQCAtMjQ2LDcgKzI3Miw3IEBACiAgICBpbnRlcmZhY2UgYmVsb3cgZm9yIG5ldyBjb2RlICovCiAKIC8qIHJldHVybnMgY2FyZCB0eXBlICsgY2FyZCBJRCAoZm9yIGJ0ODc4LWJhc2VkIG9uZXMpCi0gICBmb3IgcG9zc2libGUgdmFsdWVzIHNlZSBsaW5lcyBiZWxvdyBiZWdpbm5pbmcgd2l0aCAjZGVmaW5lIEJUVFZfVU5LTk9XTgorICAgZm9yIHBvc3NpYmxlIHZhbHVlcyBzZWUgbGluZXMgYmVsb3cgYmVnaW5uaW5nIHdpdGggI2RlZmluZSBCVFRWX0JPQVJEX1VOS05PV04KICAgIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgaWYgZXJyb3Igb2NjdXJyZWQKICovCiBleHRlcm4gaW50IGJ0dHZfZ2V0X2NhcmRpbmZvKHVuc2lnbmVkIGludCBjYXJkLCBpbnQgKnR5cGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmgKaW5kZXggZTBlN2M3YS4uMzg2ZjU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaApAQCAtNzcsMTQgKzc3LDE0IEBACiBzdHJ1Y3QgYnR0dl90dm5vcm0gewogCWludCAgIHY0bDJfaWQ7CiAJY2hhciAgKm5hbWU7Ci0gICAgICAgIHUzMiAgIEZzYzsKLSAgICAgICAgdTE2ICAgc3dpZHRoLCBzaGVpZ2h0OyAvKiBzY2FsZWQgc3RhbmRhcmQgd2lkdGgsIGhlaWdodCAqLworCXUzMiAgIEZzYzsKKwl1MTYgICBzd2lkdGgsIHNoZWlnaHQ7IC8qIHNjYWxlZCBzdGFuZGFyZCB3aWR0aCwgaGVpZ2h0ICovCiAJdTE2ICAgdG90YWx3aWR0aDsKIAl1OCAgICBhZGVsYXksIGJkZWxheSwgaWZvcm07CiAJdTMyICAgc2NhbGVkdHdpZHRoOwogCXUxNiAgIGhkZWxheXgxLCBoYWN0aXZleDE7CiAJdTE2ICAgdmRlbGF5OwotICAgICAgICB1OCAgICB2YmlwYWNrOworCXU4ICAgIHZiaXBhY2s7CiAJdTE2ICAgdnRvdGFsOwogCWludCAgIHNyYW07CiB9OwpAQCAtMjY3LDggKzI2Nyw4IEBACiAKIAkvKiBjYXJkIGNvbmZpZ3VyYXRpb24gaW5mbyAqLwogCXVuc2lnbmVkIGludCBjYXJkaWQ7ICAgLyogcGNpIHN1YnN5c3RlbSBpZCAoYnQ4NzggYmFzZWQgb25lcykgKi8KLSAgICAgICAgdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7ICAvKiB0dW5lciBjaGlwIHR5cGUgKi8KLSAgICAgICAgdW5zaWduZWQgaW50IHBpbm5hY2xlX2lkOworCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOyAgLyogdHVuZXIgY2hpcCB0eXBlICovCisJdW5zaWduZWQgaW50IHBpbm5hY2xlX2lkOwogCXVuc2lnbmVkIGludCBzdmhzOwogCXN0cnVjdCBidHR2X3BsbF9pbmZvIHBsbDsKIAlpbnQgdHJpdG9uMTsKQEAgLTMwMSw5ICszMDEsOSBAQAogCiAJLyogbG9ja2luZyAqLwogCXNwaW5sb2NrX3Qgc19sb2NrOwotICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwogCWludCByZXNvdXJjZXM7Ci0gICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgcmVzbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHJlc2xvY2s7CiAjaWZkZWYgVklESU9DX0dfUFJJT1JJVFkKIAlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODBiMzUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogY3M1M2wzMmEgKEFkYXB0ZWMgQVZDLTIwMTAgYW5kIEFWQy0yNDEwKSBpMmMgaXZ0diBkcml2ZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgIE1hcnRpbiBWYXVnaGFuCisgKgorICogQXVkaW8gc291cmNlIHN3aXRjaGluZyBmb3IgQWRhcHRlYyBBVkMtMjQxMCBhZGRlZCBieSBUcmV2IEphY2tzb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBkZXZpY2UgZHJpdmVyIGZvciBjczUzbDMyYSBBdWRpbyBBREMiKTsKK01PRFVMRV9BVVRIT1IoIk1hcnRpbiBWYXVnaGFuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1lc3NhZ2VzXG5cdFx0XHQwPU9mZiAoZGVmYXVsdCksIDE9T24iKTsKKworI2RlZmluZSBjczUzbDMyYV9kYmcoZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZWJ1ZyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBjczUzbDMyYV9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGNzNTNsMzJhX2luZm8oZm10LCBhcmcuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0lORk8gIiVzICVkLSUwNHg6ICIgZm10LCBjbGllbnQtPmRyaXZlci0+bmFtZSwgXAorCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKKworSTJDX0NMSUVOVF9JTlNNT0Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgY3M1M2wzMmFfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IGNzNTNsMzJhX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQoreworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworfQorCitzdGF0aWMgaW50IGNzNTNsMzJhX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICB2b2lkICphcmcpCit7CisJaW50ICppbnB1dCA9IGFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBBVURDX1NFVF9JTlBVVDoKKwkJc3dpdGNoICgqaW5wdXQpIHsKKwkJY2FzZSBBVURJT19UVU5FUjoKKwkJCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMSk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk46CisJCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDEsIDB4MjEpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fTVVURToKKwkJCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMywgMHhGMCk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19VTk1VVEU6CisJCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDMsIDB4MzApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljczUzbDMyYV9lcnIoIkludmFsaWQgaW5wdXQgJWQuXG4iLCAqaW5wdXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMiB8fCBjdHJsLT52YWx1ZSA8IC05MCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwNCwgKHU4KSBjdHJsLT52YWx1ZSk7CisJCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDUsICh1OCkgY3RybC0+dmFsdWUpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CisJCXsKKwkJCXU4IHYgPSBjczUzbDMyYV9yZWFkKGNsaWVudCwgMHgwMSk7CisJCQl1OCBtID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDMpOworCisJCQljczUzbDMyYV9pbmZvKCJJbnB1dDogJXMlc1xuIiwKKwkJCQkgICAgICB2ID09IDB4MjEgPyAiZXh0ZXJuYWwgbGluZSBpbiIgOiAidHVuZXIiLAorCQkJCSAgICAgIChtICYgMHhDMCkgPyAiIChtdXRlZCkiIDogIiIpOworCQkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCisKKy8qCisgKiBHZW5lcmljIGkyYyBwcm9iZQorICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJworICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyOworCitzdGF0aWMgaW50IGNzNTNsMzJhX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCWludCBpOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoY2xpZW50LCAwLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKwljbGllbnQtPmFkZHIgPSBhZGRyZXNzOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcjsKKwljbGllbnQtPmZsYWdzID0gSTJDX0NMSUVOVF9BTExPV19VU0U7CisJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJjczUzbDMyYSIpOworCisJY3M1M2wzMmFfaW5mbygiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKKworCWZvciAoaSA9IDE7IGkgPD0gNzsgaSsrKSB7CisJCXU4IHYgPSBjczUzbDMyYV9yZWFkKGNsaWVudCwgaSk7CisKKwkJY3M1M2wzMmFfZGJnKCJSZWFkIFJlZyAlZCAlMDJ4XG4iLCBpLCB2KTsKKwl9CisKKwkvKiBTZXQgY3M1M2wzMmEgaW50ZXJuYWwgcmVnaXN0ZXIgZm9yIEFkYXB0ZWMgMjAxMC8yNDEwIHNldHVwICovCisKKwljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDEsICh1OCkgMHgyMSk7CisJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAyLCAodTgpIDB4MjkpOworCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMywgKHU4KSAweDMwKTsKKwljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDQsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA1LCAodTgpIDB4MDApOworCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwNiwgKHU4KSAweDAwKTsKKwljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDcsICh1OCkgMHgwMCk7CisKKwkvKiBEaXNwbGF5IHJlc3VsdHMsIHNob3VsZCBiZSAweDIxLDB4MjksMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwICovCisKKwlmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykgeworCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIGkpOworCisJCWNzNTNsMzJhX2RiZygiUmVhZCBSZWcgJWQgJTAyeFxuIiwgaSwgdik7CisJfQorCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNTNsMzJhX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKyNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCisJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKKyNlbHNlCisJaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX0JUODQ4KQorI2VuZGlmCisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgY3M1M2wzMmFfYXR0YWNoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczUzbDMyYV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKSB7CisJCXJldHVybiBlcnI7CisJfQorCWtmcmVlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjczUzbDMyYSIsCisJLmlkID0gSTJDX0RSSVZFUklEX0NTNTNMMzJBLAorCS5mbGFncyA9IEkyQ19ERl9OT1RJRlksCisJLmF0dGFjaF9hZGFwdGVyID0gY3M1M2wzMmFfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgPSBjczUzbDMyYV9kZXRhY2gsCisJLmNvbW1hbmQgPSBjczUzbDMyYV9jb21tYW5kLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBjczUzbDMyYV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjczUzbDMyYV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3M1M2wzMmFfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoY3M1M2wzMmFfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTgxOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTAsMCArMSw5MSBAQAorY29uZmlnIFZJREVPX0NYODgKKwl0cmlzdGF0ZSAiQ29uZXhhbnQgMjM4OHggKGJ0ODc4IHN1Y2Nlc3Nvcikgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDCisJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBWSURFT19CVENYCisJc2VsZWN0IFZJREVPX0JVRgorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19UVkVFUFJPTQorCXNlbGVjdCBWSURFT19JUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDIzODh4IGJhc2VkCisJICBUViBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3g4ODAwCisKK2NvbmZpZyBWSURFT19DWDg4X0RWQgorCXRyaXN0YXRlICJEVkIvQVRTQyBTdXBwb3J0IGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIgorCWRlcGVuZHMgb24gVklERU9fQ1g4OCAmJiBEVkJfQ09SRQorCXNlbGVjdCBWSURFT19CVUZfRFZCCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgQ29ubmV4YW50IDIzODh4IGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4ODgtZHZiLgorCisJICBZb3UgbXVzdCBhbHNvIHNlbGVjdCBvbmUgb3IgbW9yZSBEVkIvQVRTQyBkZW1vZHVsYXRvcnMuCisJICBJZiB5b3UgYXJlIHVuc3VyZSB3aGljaCB5b3UgbmVlZCwgY2hvb3NlIGFsbCBvZiB0aGVtLgorCitjb25maWcgVklERU9fQ1g4OF9EVkJfQUxMX0ZST05URU5EUworCWJvb2wgIkJ1aWxkIGFsbCBzdXBwb3J0ZWQgZnJvbnRlbmRzIGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIKKwlzZWxlY3QgRFZCX01UMzUyCisJc2VsZWN0IERWQl9PUjUxMTMyCisJc2VsZWN0IERWQl9DWDIyNzAyCisJc2VsZWN0IERWQl9MR0RUMzMwWAorCXNlbGVjdCBEVkJfTlhUMjAwWAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYnVpbGRzIGN4ODgtZHZiIHdpdGggYWxsIGN1cnJlbnRseSBzdXBwb3J0ZWQgZnJvbnRlbmQKKwkgIGRlbW9kdWxhdG9ycy4gIElmIHlvdSB3aXNoIHRvIHR3ZWFrIHlvdXIgY29uZmlndXJhdGlvbiwgYW5kCisJICBvbmx5IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHRoYXQgeW91IG5lZWQsIGNob29zZSBOIGhlcmUuCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlLCBjaG9vc2UgWS4KKworY29uZmlnIFZJREVPX0NYODhfRFZCX01UMzUyCisJdHJpc3RhdGUgIlphcmxpbmsgTVQzNTIgRFZCLVQgU3VwcG9ydCIKKwlkZWZhdWx0IG0KKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9NVDM1MgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTVQzNTIgZGVtb2R1bGF0b3IuCisKK2NvbmZpZyBWSURFT19DWDg4X0RWQl9PUjUxMTMyCisJdHJpc3RhdGUgIk9SNTExMzIgQVRTQyBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgIVZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX09SNTExMzIKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBDb25uZXhhbnQgMjM4OHggY2hpcCBhbmQgdGhlIE9SNTExMzIgZGVtb2R1bGF0b3IuCisKK2NvbmZpZyBWSURFT19DWDg4X0RWQl9DWDIyNzAyCisJdHJpc3RhdGUgIkNvbmV4YW50IENYMjI3MDIgRFZCLVQgU3VwcG9ydCIKKwlkZWZhdWx0IG0KKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9DWDIyNzAyCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIERWQi1UIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBDWDIyNzAyIGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fQ1g4OF9EVkJfTEdEVDMzMFgKKwl0cmlzdGF0ZSAiTEcgRWxlY3Ryb25pY3MgRFQzMzAyL0RUMzMwMyBBVFNDIFN1cHBvcnQiCisJZGVmYXVsdCBtCisJZGVwZW5kcyBvbiBWSURFT19DWDg4X0RWQiAmJiAhVklERU9fQ1g4OF9EVkJfQUxMX0ZST05URU5EUworCXNlbGVjdCBEVkJfTEdEVDMzMFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBDb25uZXhhbnQgMjM4OHggY2hpcCBhbmQgdGhlIExHRFQzMzAyL0xHRFQzMzAzIGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fQ1g4OF9EVkJfTlhUMjAwWAorCXRyaXN0YXRlICJOWFQyMDAyL05YVDIwMDQgQVRTQyBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgIVZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX05YVDIwMFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBDb25uZXhhbnQgMjM4OHggY2hpcCBhbmQgdGhlIE5YVDIwMDIvTlhUMjAwNCBkZW1vZHVsYXRvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQppbmRleCAxMDdlNDg2Li4wZGY0MGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCkBAIC05LDYgKzksOSBAQAogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCiBFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCiBFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcworaWZuZXEgKCQoQ09ORklHX1ZJREVPX0JVRl9EVkIpLG4pCisgRVhUUkFfQ0ZMQUdTICs9IC1ESEFWRV9WSURFT19CVUZfRFZCPTEKK2VuZGlmCiBpZm5lcSAoJChDT05GSUdfRFZCX0NYMjI3MDIpLG4pCiAgRVhUUkFfQ0ZMQUdTICs9IC1ESEFWRV9DWDIyNzAyPTEKIGVuZGlmCkBAIC0yMSwzICsyNCw2IEBACiBpZm5lcSAoJChDT05GSUdfRFZCX01UMzUyKSxuKQogIEVYVFJBX0NGTEFHUyArPSAtREhBVkVfTVQzNTI9MQogZW5kaWYKK2lmbmVxICgkKENPTkZJR19EVkJfTlhUMjAwWCksbikKKyBFWFRSQV9DRkxBR1MgKz0gLURIQVZFX05YVDIwMFg9MQorZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggMGMwYzU5ZS4uNGFlM2Y3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTM4LDcgKzM4LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBtcGVnYnVmcyA9IDg7CitzdGF0aWMgdW5zaWduZWQgaW50IG1wZWdidWZzID0gMzI7CiBtb2R1bGVfcGFyYW0obXBlZ2J1ZnMsaW50LDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtcGVnYnVmcywibnVtYmVyIG9mIG1wZWcgYnVmZmVycywgcmFuZ2UgMi0zMiIpOwogCkBAIC00MzYsNyArNDM2LDcgQEAKIAogc3RhdGljIGludCBtZW1vcnlfcmVhZChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1MzIgYWRkcmVzcywgdTMyICp2YWx1ZSkKIHsKLSAgICAgICAgaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsOwogCXUzMiB2YWw7CiAKIAkvKiBXYXJuaW5nOiBhZGRyZXNzIGlzIGR3b3JkIGFkZHJlc3MgKDQgYnl0ZXMpICovCkBAIC02MDUsMTEgKzYwNSwxMSBAQAogCXUzMiAqZGF0YXB0cjsKIAogCXJldHZhbCAgPSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX1ZQVSwgMHhGRkZGRkZFRCk7Ci0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0hXX0JMT0NLUywgSVZUVl9DTURfSFdfQkxPQ0tTX1JTVCk7Ci0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0VOQ19TRFJBTV9SRUZSRVNILCAweDgwMDAwNjQwKTsKLSAgICAgICAgcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfRU5DX1NEUkFNX1BSRUNIQVJHRSwgMHgxQSk7CisJcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfSFdfQkxPQ0tTLCBJVlRWX0NNRF9IV19CTE9DS1NfUlNUKTsKKwlyZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19FTkNfU0RSQU1fUkVGUkVTSCwgMHg4MDAwMDY0MCk7CisJcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfRU5DX1NEUkFNX1BSRUNIQVJHRSwgMHgxQSk7CiAJbXNsZWVwKDEpOwotICAgICAgICByZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19BUFUsIDApOworCXJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0FQVSwgMCk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZHByaW50aygwLCAiRXJyb3Igd2l0aCByZWdpc3Rlcl93cml0ZVxuIik7CkBAIC02NTcsMTMgKzY1NywxMyBAQAogCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCWRwcmludGsoMCwgIkZpcm13YXJlIHVwbG9hZCBzdWNjZXNzZnVsLlxuIik7CiAKLSAgICAgICAgcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfSFdfQkxPQ0tTLCBJVlRWX0NNRF9IV19CTE9DS1NfUlNUKTsKLSAgICAgICAgcmV0dmFsIHw9IHJlZ2lzdGVyX3JlYWQoZGV2LT5jb3JlLCBJVlRWX1JFR19TUFUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX1NQVSwgdmFsdWUgJiAweEZGRkZGRkZFKTsKKwlyZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19IV19CTE9DS1MsIElWVFZfQ01EX0hXX0JMT0NLU19SU1QpOworCXJldHZhbCB8PSByZWdpc3Rlcl9yZWFkKGRldi0+Y29yZSwgSVZUVl9SRUdfU1BVLCAmdmFsdWUpOworCXJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX1NQVSwgdmFsdWUgJiAweEZGRkZGRkZFKTsKIAltc2xlZXAoMSk7CiAKIAlyZXR2YWwgfD0gcmVnaXN0ZXJfcmVhZChkZXYtPmNvcmUsIElWVFZfUkVHX1ZQVSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfVlBVLCB2YWx1ZSAmIDB4RkZGRkZGRTgpOworCXJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX1ZQVSwgdmFsdWUgJiAweEZGRkZGRkU4KTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlkcHJpbnRrKDAsICJFcnJvciB3aXRoIHJlZ2lzdGVyX3dyaXRlXG4iKTsKQEAgLTY4Myw4NCArNjgzLDU2MCBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICpEQjogIkRpcmVjdEJ1cm4iCiAqLwotc3RhdGljIHZvaWQgYmxhY2tiaXJkX2NvZGVjX3NldHRpbmdzKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCisKK3N0YXRpYyBzdHJ1Y3QgYmxhY2tiaXJkX2RuciBkZWZhdWx0X2Rucl9wYXJhbXMgPSB7CisJLm1vZGUgICAgID0gQkxBQ0tCSVJEX0ROUl9CSVRTX01BTlVBTCwKKwkudHlwZSAgICAgPSBCTEFDS0JJUkRfTUVESUFOX0ZJTFRFUl9ESVNBQkxFRCwKKwkuc3BhdGlhbCAgPSAwLAorCS50ZW1wb3JhbCA9IDAKK307CitzdGF0aWMgc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiBkZWZhdWx0X21wZWdfcGFyYW1zID0geworCS5zdF90eXBlICAgICAgICAgID0gVjRMMl9NUEVHX1BTXzIsCisJLnN0X2JpdHJhdGUgICAgICAgPSB7CisJCS5tb2RlICAgICA9IFY0TDJfQklUUkFURV9DQlIsCisJCS5taW4gICAgICA9IDAsCisJCS50YXJnZXQgICA9IDAsCisJCS5tYXggICAgICA9IDAKKwl9LAorCS50c19waWRfcG10ICAgICAgID0gMTYsCisJLnRzX3BpZF9hdWRpbyAgICAgPSAyNjAsCisJLnRzX3BpZF92aWRlbyAgICAgPSAyNTYsCisJLnRzX3BpZF9wY3IgICAgICAgPSAyNTksCisJLnBzX3NpemUgICAgICAgICAgPSAwLAorCS5hdV90eXBlICAgICAgICAgID0gVjRMMl9NUEVHX0FVXzJfSUksCisJLmF1X2JpdHJhdGUgICAgICAgPSB7CisJCS5tb2RlICAgICA9IFY0TDJfQklUUkFURV9DQlIsCisJCS5taW4gICAgICA9IDIyNCwKKwkJLnRhcmdldCAgID0gMjI0LAorCQkubWF4ICAgICAgPSAyMjQKKwl9LAorCS5hdV9zYW1wbGVfcmF0ZSAgICA9IDQ0MTAwLAorCS5hdV9wZXNpZCAgICAgICAgICA9IDAsCisJLnZpX3R5cGUgICAgICAgICAgID0gVjRMMl9NUEVHX1ZJXzIsCisJLnZpX2FzcGVjdF9yYXRpbyAgID0gVjRMMl9NUEVHX0FTUEVDVF80XzMsCisJLnZpX2JpdHJhdGUgICAgICAgID0geworCQkubW9kZSAgICAgID0gVjRMMl9CSVRSQVRFX0NCUiwKKwkJLm1pbiAgICAgICA9IDQwMDAsCisJCS50YXJnZXQgICAgPSA0NTAwLAorCQkubWF4ICAgICAgID0gNjAwMAorCX0sCisJLnZpX2ZyYW1lX3JhdGUgICAgID0gMjUsCisJLnZpX2ZyYW1lc19wZXJfZ29wID0gMTUsCisJLnZpX2JmcmFtZXNfY291bnQgID0gMiwKKwkudmlfcGVzaWQgICAgICAgICAgPSAwLAorCS5jbG9zZWRfZ29wcyAgICAgICA9IDAsCisJLnB1bGxkb3duICAgICAgICAgID0gMAorfTsKKworc3RhdGljIGVudW0gYmxhY2tiaXJkX3N0cmVhbV90eXBlIG1wZWdfc3RyZWFtX3R5cGVzW10gPSB7CisJW1Y0TDJfTVBFR19TU18xXSAgID0gQkxBQ0tCSVJEX1NUUkVBTV9NUEVHMSwKKwlbVjRMMl9NUEVHX1BTXzJdICAgPSBCTEFDS0JJUkRfU1RSRUFNX1BST0dSQU0sCisJW1Y0TDJfTVBFR19UU18yXSAgID0gQkxBQ0tCSVJEX1NUUkVBTV9UUkFOU1BPUlQsCisJW1Y0TDJfTVBFR19QU19EVkRdID0gQkxBQ0tCSVJEX1NUUkVBTV9EVkQsCit9Oworc3RhdGljIGVudW0gYmxhY2tiaXJkX2FzcGVjdF9yYXRpbyBtcGVnX3N0cmVhbV9yYXRpb3NbXSA9IHsKKwlbVjRMMl9NUEVHX0FTUEVDVF9TUVVBUkVdID0gQkxBQ0tCSVJEX0FTUEVDVF9SQVRJT18xXzFfU1FVQVJFLAorCVtWNEwyX01QRUdfQVNQRUNUXzRfM10gICAgPSBCTEFDS0JJUkRfQVNQRUNUX1JBVElPXzRfMywKKwlbVjRMMl9NUEVHX0FTUEVDVF8xNl85XSAgID0gQkxBQ0tCSVJEX0FTUEVDVF9SQVRJT18xNl85LAorCVtWNEwyX01QRUdfQVNQRUNUXzFfMjIxXSAgPSBCTEFDS0JJUkRfQVNQRUNUX1JBVElPXzIyMV8xMDAsCit9Oworc3RhdGljIGVudW0gYmxhY2tiaXJkX3ZpZGVvX2JpdHJhdGVfdHlwZSBtcGVnX3ZpZGVvX2JpdHJhdGVzW10gPSB7CisJW1Y0TDJfQklUUkFURV9OT05FXSA9IEJMQUNLQklSRF9WSURFT19DQlIsCisJW1Y0TDJfQklUUkFURV9DQlJdICA9IEJMQUNLQklSRF9WSURFT19DQlIsCisJW1Y0TDJfQklUUkFURV9WQlJdICA9IEJMQUNLQklSRF9WSURFT19WQlIsCit9OworLyogZmluZCB0aGUgYmVzdCBsYXllciBJL0lJIGJpdHJhdGUgdG8gZml0IGEgZ2l2ZW4gbnVtZXJpYyB2YWx1ZSAqLworc3RydWN0IGJpdHJhdGVfYml0cyB7CisJdTMyIGJpdHM7IC8qIGxheWVyIGJpdHMgZm9yIHRoZSBiZXN0IGZpdCAqLworCXUzMiByYXRlOyAvKiBhY3R1YWwgbnVtZXJpYyB2YWx1ZSBmb3IgdGhlIGxheWVyIGJlc3QgZml0ICovCit9Oworc3RydWN0IGJpdHJhdGVfYXBwcm94aW1hdGlvbiB7CisJdTMyICAgICAgICAgICAgICAgICB0YXJnZXQ7ICAgLyogbnVtZXJpYyB2YWx1ZSBvZiB0aGUgcmF0ZSB3ZSB3YW50ICovCisJc3RydWN0IGJpdHJhdGVfYml0cyBsYXllclsyXTsKK307CitzdGF0aWMgc3RydWN0IGJpdHJhdGVfYXBwcm94aW1hdGlvbiBtcGVnX2F1ZGlvX2JpdHJhdGVzW10gPSB7CisJLyogdGFyZ2V0ICBsYXllclswXS5iaXRzICAgICAgICAgICBsYXllclswXS5yYXRlICAgICAgIGxheWVyWzFdLmJpdHMgICAgICAgICAgIGxheWVyWzFdLnJhdGUgKi8KKwl7ICAgMCwgeyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgIDAsIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgfSwgfSwgfSwKKwl7ICAzMiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMzIgLCAgMzIsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zMiAsICAzMiwgfSwgfSwgfSwKKwl7ICA0OCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfNjQgLCAgNjQsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl80OCAsICA0OCwgfSwgfSwgfSwKKwl7ICA1NiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfNjQgLCAgNjQsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl81NiAsICA1NiwgfSwgfSwgfSwKKwl7ICA2NCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfNjQgLCAgNjQsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl82NCAsICA2NCwgfSwgfSwgfSwKKwl7ICA4MCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfOTYgLCAgOTYsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl84MCAsICA4MCwgfSwgfSwgfSwKKwl7ICA5NiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfOTYgLCAgOTYsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl85NiAsICA5NiwgfSwgfSwgfSwKKwl7IDExMiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMTI4LCAxMjgsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8xMTIsIDExMiwgfSwgfSwgfSwKKwl7IDEyOCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMTI4LCAxMjgsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8xMjgsIDEyOCwgfSwgfSwgfSwKKwl7IDE2MCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMTYwLCAxNjAsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8xNjAsIDE2MCwgfSwgfSwgfSwKKwl7IDE5MiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMTkyLCAxOTIsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8xOTIsIDE5MiwgfSwgfSwgfSwKKwl7IDIyNCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMjI0LCAyMjQsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8yMjQsIDIyNCwgfSwgfSwgfSwKKwl7IDI1NiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMjU2LCAyNTYsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8yNTYsIDI1NiwgfSwgfSwgfSwKKwl7IDI4OCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMjg4LCAyODgsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zMjAsIDMyMCwgfSwgfSwgfSwKKwl7IDMyMCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMzIwLCAzMjAsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zMjAsIDMyMCwgfSwgfSwgfSwKKwl7IDM1MiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMzUyLCAzNTIsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zODQsIDM4NCwgfSwgfSwgfSwKKwl7IDM4NCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfMzg0LCAzODQsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zODQsIDM4NCwgfSwgfSwgfSwKKwl7IDQxNiwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfNDE2LCA0MTYsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zODQsIDM4NCwgfSwgfSwgfSwKKwl7IDQ0OCwgeyB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzFfNDQ4LCA0NDgsIH0sIHsgQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8zODQsIDM4NCwgfSwgfSwgfSwKK307CitzdGF0aWMgY29uc3QgaW50IEJJVFJBVEVTX1NJWkUgPSBBUlJBWV9TSVpFKG1wZWdfYXVkaW9fYml0cmF0ZXMpOworCitzdGF0aWMgdm9pZCBibGFja2JpcmRfc2V0X2RlZmF1bHRfcGFyYW1zKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7Ci0JaW50IGJpdHJhdGVfbW9kZSA9IDE7Ci0JaW50IGJpdHJhdGUgPSA3NTAwMDAwOwotCWludCBiaXRyYXRlX3BlYWsgPSA3NTAwMDAwOwotCWJpdHJhdGVfbW9kZSA9IEJMQUNLQklSRF9WSURFT19DQlI7Ci0JYml0cmF0ZSA9IDQwMDAqMTAyNDsKLQliaXRyYXRlX3BlYWsgPSA0MDAwKjEwMjQ7CisJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqcGFyYW1zID0gJmRldi0+cGFyYW1zOworCXUzMiBhdV9wYXJhbXM7CiAKIAkvKiBhc3NpZ24gc3RyZWFtIHR5cGUgKi8KLQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX1NUUkVBTV9UWVBFLCAxLCAwLCBCTEFDS0JJUkRfU1RSRUFNX1BST0dSQU0pOwotCi0JLyogYXNzaWduIG91dHB1dCBwb3J0ICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9PVVRQVVRfUE9SVCwgMSwgMCwgQkxBQ0tCSVJEX09VVFBVVF9QT1JUX1NUUkVBTUlORyk7IC8qIEhvc3QgKi8KKwlpZiggcGFyYW1zLT5zdF90eXBlID49IEFSUkFZX1NJWkUobXBlZ19zdHJlYW1fdHlwZXMpICkKKwkJcGFyYW1zLT5zdF90eXBlID0gVjRMMl9NUEVHX1BTXzI7CisJaWYoIHBhcmFtcy0+c3RfdHlwZSA9PSBWNEwyX01QRUdfU1NfMSApCisJCXBhcmFtcy0+dmlfdHlwZSA9IFY0TDJfTVBFR19WSV8xOworCWVsc2UKKwkJcGFyYW1zLT52aV90eXBlID0gVjRMMl9NUEVHX1ZJXzI7CisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9TVFJFQU1fVFlQRSwgMSwgMCwgbXBlZ19zdHJlYW1fdHlwZXNbcGFyYW1zLT5zdF90eXBlXSk7CiAKIAkvKiBhc3NpZ24gZnJhbWVyYXRlICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9GUkFNRVJBVEUsIDEsIDAsIEJMQUNLQklSRF9GUkFNRVJBVEVfUEFMXzI1KTsKLQotCS8qIGFzc2lnbiBmcmFtZSBzaXplICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9SRVNPTFVUSU9OLCAyLCAwLAotCQkJICBkZXYtPmhlaWdodCwgZGV2LT53aWR0aCk7CisJaWYoIHBhcmFtcy0+dmlfZnJhbWVfcmF0ZSA8PSAyNSApCisJeworCQlwYXJhbXMtPnZpX2ZyYW1lX3JhdGUgPSAyNTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9GUkFNRVJBVEUsIDEsIDAsIEJMQUNLQklSRF9GUkFNRVJBVEVfUEFMXzI1KTsKKwl9CisJZWxzZQorCXsKKwkJcGFyYW1zLT52aV9mcmFtZV9yYXRlID0gMzA7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRlJBTUVSQVRFLCAxLCAwLCBCTEFDS0JJUkRfRlJBTUVSQVRFX05UU0NfMzApOworCX0KIAogCS8qIGFzc2lnbiBhc3BlY3QgcmF0aW8gKi8KLQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0FTUEVDVF9SQVRJTywgMSwgMCwgQkxBQ0tCSVJEX0FTUEVDVF9SQVRJT180XzMpOwotCi0JLyogYXNzaWduIGJpdHJhdGVzICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9WSURFT19CSVRSQVRFLCA1LCAwLAotCQkJIGJpdHJhdGVfbW9kZSwgICAgICAgICAvKiBtb2RlICovCi0JCQkgYml0cmF0ZSwgICAgICAgICAgICAgIC8qIGJwcyAqLwotCQkJIGJpdHJhdGVfcGVhayAvIEJMQUNLQklSRF9QRUFLX1JBVEVfRElWSVNPUiwgICAvKiBwZWFrLzQwMCAqLwotCQkJIEJMQUNLQklSRF9NVVhfUkFURV9ERUZBVUxUIC8qLCAweDcwKi8pOyAgICAgICAgICAgICAvKiBlbmNvZGluZyBidWZmZXIsIGNrZW5uZWR5ICovCisJaWYoIHBhcmFtcy0+dmlfYXNwZWN0X3JhdGlvID49IEFSUkFZX1NJWkUobXBlZ19zdHJlYW1fcmF0aW9zKSApCisJCXBhcmFtcy0+dmlfYXNwZWN0X3JhdGlvID0gVjRMMl9NUEVHX0FTUEVDVF80XzM7CisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9BU1BFQ1RfUkFUSU8sIDEsIDAsIG1wZWdfc3RyZWFtX3JhdGlvc1twYXJhbXMtPnZpX2FzcGVjdF9yYXRpb10pOwogCiAJLyogYXNzaWduIGdvcCBwcm9wZXJ0aWVzICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9HT1BfU1RSVUNUVVJFLCAyLCAwLCAxNSwgMyk7CisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9HT1BfU1RSVUNUVVJFLCAyLCAwLCBwYXJhbXMtPnZpX2ZyYW1lc19wZXJfZ29wLCBwYXJhbXMtPnZpX2JmcmFtZXNfY291bnQrMSk7CisKKwkvKiBhc3NpZ24gZ29wIGNsb3N1cmUgKi8KKwlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0dPUF9DTE9TVVJFLCAxLCAwLCBwYXJhbXMtPmNsb3NlZF9nb3BzKTsKIAogCS8qIGFzc2lnbiAzIDIgcHVsbGRvd24gKi8KLQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUXzNfMl9QVUxMRE9XTiwgMSwgMCwgQkxBQ0tCSVJEXzNfMl9QVUxMRE9XTl9ESVNBQkxFRCk7CisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF8zXzJfUFVMTERPV04sIDEsIDAsIHBhcmFtcy0+cHVsbGRvd24pOworCisJLyogbWFrZSBzdXJlIHRoZSBwYXJhbXMgYXJlIHdpdGhpbiBib3VuZHMgKi8KKwlpZiggcGFyYW1zLT5zdF9iaXRyYXRlLm1vZGUgPj0gQVJSQVlfU0laRShtcGVnX3ZpZGVvX2JpdHJhdGVzKSApCisJCXBhcmFtcy0+dmlfYml0cmF0ZS5tb2RlID0gVjRMMl9CSVRSQVRFX05PTkU7CisJaWYoIHBhcmFtcy0+dmlfYml0cmF0ZS5tb2RlID49IEFSUkFZX1NJWkUobXBlZ192aWRlb19iaXRyYXRlcykgKQorCQlwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9IFY0TDJfQklUUkFURV9OT05FOworCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUubW9kZSA+PSBBUlJBWV9TSVpFKG1wZWdfdmlkZW9fYml0cmF0ZXMpICkKKwkJcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgPSBWNEwyX0JJVFJBVEVfTk9ORTsKIAogCS8qIGFzc2lnbiBhdWRpbyBwcm9wZXJ0aWVzICovCiAJLyogbm90ZTogaXQncyBub3QgbmVjZXNzYXJ5IHRvIHNldCB0aGUgc2FtcGxlcmF0ZSwgdGhlIG1wZWcgZW5jb2RlciBzZWVtcyB0byBhdXRvZGV0ZWN0L2FkanVzdCAqLwotCS8qIGJsYWNrYmlyZF9hcGlfY21kKGRldiwgSVZUVl9BUElfQVNTSUdOX0FVRElPX1BST1BFUlRJRVMsIDEsIDAsICgyPDwyKSB8ICg4PDw0KSk7Ci0JICAgYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBJVlRWX0FQSV9BU1NJR05fQVVESU9fUFJPUEVSVElFUywgMSwgMCwgMCB8ICgyIDw8IDIpIHwgKDE0IDw8IDQpKTsgKi8KLQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0FVRElPX1BBUkFNUywgMSwgMCwKLQkJCUJMQUNLQklSRF9BVURJT19CSVRTXzQ0MTAwSFogfAotCQkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMiB8Ci0JCQlCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8yXzIyNCB8Ci0JCQlCTEFDS0JJUkRfQVVESU9fQklUU19TVEVSRU8gfAorCWF1X3BhcmFtcyA9IEJMQUNLQklSRF9BVURJT19CSVRTX1NURVJFTyB8CiAJCQkvKiBCTEFDS0JJUkRfQVVESU9fQklUU19CT1VORF80IHwgKi8KIAkJCUJMQUNLQklSRF9BVURJT19CSVRTX0VNUEhBU0lTX05PTkUgfAogCQkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfQ1JDX09GRiB8CiAJCQlCTEFDS0JJUkRfQVVESU9fQklUU19DT1BZUklHSFRfT0ZGIHwKLQkJCUJMQUNLQklSRF9BVURJT19CSVRTX0NPUFkKLQkJKTsKKwkJCUJMQUNLQklSRF9BVURJT19CSVRTX0NPUFkgfAorCQkJMDsKKwlpZiggcGFyYW1zLT5hdV9zYW1wbGVfcmF0ZSA8PSAzMjAwMCApCisJeworCQlwYXJhbXMtPmF1X3NhbXBsZV9yYXRlID0gMzIwMDA7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU18zMjAwMEhaOworCX0KKwllbHNlIGlmKCBwYXJhbXMtPmF1X3NhbXBsZV9yYXRlIDw9IDQ0MTAwICkKKwl7CisJCXBhcmFtcy0+YXVfc2FtcGxlX3JhdGUgPSA0NDEwMDsKKwkJYXVfcGFyYW1zIHw9IEJMQUNLQklSRF9BVURJT19CSVRTXzQ0MTAwSFo7CisJfQorCWVsc2UKKwl7CisJCXBhcmFtcy0+YXVfc2FtcGxlX3JhdGUgPSA0ODAwMDsKKwkJYXVfcGFyYW1zIHw9IEJMQUNLQklSRF9BVURJT19CSVRTXzQ4MDAwSFo7CisJfQorCWlmKCBwYXJhbXMtPmF1X3R5cGUgPT0gVjRMMl9NUEVHX0FVXzJfSSApCisJeworCQlhdV9wYXJhbXMgfD0gQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMTsKKwl9CisJZWxzZQorCXsKKwkJLyogVE9ETzogdHJ5IHRvIGhhbmRsZSB0aGUgb3RoZXIgZm9ybWF0cyBtb3JlIGdyYWNlZnVsbHkgKi8KKwkJcGFyYW1zLT5hdV90eXBlID0gVjRMMl9NUEVHX0FVXzJfSUk7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8yOworCX0KKwlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgKQorCXsKKwkJaW50IGxheWVyOworCisJCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUubW9kZSA9PSBWNEwyX0JJVFJBVEVfQ0JSICkKKwkJCXBhcmFtcy0+YXVfYml0cmF0ZS5tYXggPSBwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0OworCQllbHNlCisJCQlwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT52aV9iaXRyYXRlLm1heDsKKworCQlsYXllciA9IHBhcmFtcy0+YXVfdHlwZTsKKwkJaWYoIHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPT0gMCApCisJCXsKKwkJCS8qIFRPRE86IHVzZSB0aGUgbWluaW11bSBwb3NzaWJsZSBiaXRyYXRlIGluc3RlYWQgb2YgMCA/ICovCisJCQlhdV9wYXJhbXMgfD0gMDsKKwkJfQorCQllbHNlIGlmKCBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID49CisJCQkgbXBlZ19hdWRpb19iaXRyYXRlc1tCSVRSQVRFU19TSVpFLTFdLmxheWVyW2xheWVyXS5yYXRlICkKKwkJeworCQkJLyogY2xhbXAgdGhlIGJpdHJhdGUgdG8gdGhlIG1heCBzdXBwb3J0ZWQgYnkgdGhlIHN0YW5kYXJkICovCisJCQlwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID0gbXBlZ19hdWRpb19iaXRyYXRlc1tCSVRSQVRFU19TSVpFLTFdLmxheWVyW2xheWVyXS5yYXRlOworCQkJcGFyYW1zLT5hdV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQ7CisJCQlhdV9wYXJhbXMgfD0gbXBlZ19hdWRpb19iaXRyYXRlc1tCSVRSQVRFU19TSVpFLTFdLmxheWVyW2xheWVyXS5iaXRzOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogcm91bmQgdXAgdG8gdGhlIG5lYXJlc3Qgc3VwcG9ydGVkIGJpdHJhdGUgKi8KKwkJCWludCBpOworCQkJZm9yKGkgPSAxOyBpIDwgQklUUkFURVNfU0laRTsgaSsrKQorCQkJeworCQkJCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID4gbXBlZ19hdWRpb19iaXRyYXRlc1tpLTFdLmxheWVyW2xheWVyXS5yYXRlICYmCisJCQkJICAgIHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPD0gbXBlZ19hdWRpb19iaXRyYXRlc1tpXS5sYXllcltsYXllcl0ucmF0ZSApCisJCQkJeworCQkJCQlwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID0gbXBlZ19hdWRpb19iaXRyYXRlc1tpXS5sYXllcltsYXllcl0ucmF0ZTsKKwkJCQkJcGFyYW1zLT5hdV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQ7CisJCQkJCWF1X3BhcmFtcyB8PSBtcGVnX2F1ZGlvX2JpdHJhdGVzW2ldLmxheWVyW2xheWVyXS5iaXRzOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogVE9ETzogPz8/ICovCisJCXBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPSBwYXJhbXMtPmF1X2JpdHJhdGUubWF4ID0gMDsKKwkJYXVfcGFyYW1zIHw9IDA7CisJfQorCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfQVVESU9fUEFSQU1TLCAxLCAwLCBhdV9wYXJhbXMgKTsKKworCS8qIGFzc2lnbiBiaXRyYXRlcyAqLworCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSApCisJeworCQkvKiBiaXRyYXRlIGlzIHNldCwgbGV0J3MgZmlndXJlIG91dCB0aGUgY2JyL3ZiciBtZXNzICovCisJCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubWF4IDwgcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCApCisJCXsKKwkJCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9PSBWNEwyX0JJVFJBVEVfQ0JSICkKKwkJCQlwYXJhbXMtPnZpX2JpdHJhdGUubWF4ID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldDsKKwkJCWVsc2UKKwkJCQlwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT52aV9iaXRyYXRlLm1heDsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiggcGFyYW1zLT5zdF9iaXRyYXRlLm1heCA8IHBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQgKQorCQl7CisJCQlpZiggcGFyYW1zLT5zdF9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX1ZCUiApCisJCQkJcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+c3RfYml0cmF0ZS5tYXg7CisJCQllbHNlCisJCQkJcGFyYW1zLT5zdF9iaXRyYXRlLm1heCA9IHBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQ7CisJCX0KKwkJLyogY2FsY3VsYXRlIHZpX2JpdHJhdGUgPSBzdF9iaXRyYXRlIC0gYXVfYml0cmF0ZSAqLworCQlwYXJhbXMtPnZpX2JpdHJhdGUubWF4ID0gcGFyYW1zLT5zdF9iaXRyYXRlLm1heCAtIHBhcmFtcy0+YXVfYml0cmF0ZS5tYXg7CisJCXBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0IC0gcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldDsKKwl9CisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9WSURFT19CSVRSQVRFLCA0LCAwLAorCQkJCW1wZWdfdmlkZW9fYml0cmF0ZXNbcGFyYW1zLT52aV9iaXRyYXRlLm1vZGVdLAorCQkJCXBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgKiAxMDAwLCAvKiBrYnBzIC0+IGJwcyAqLworCQkJCXBhcmFtcy0+dmlfYml0cmF0ZS5tYXggKiAxMDAwIC8gQkxBQ0tCSVJEX1BFQUtfUkFURV9ESVZJU09SLCAvKiBwZWFrLzQwMCAqLworCQkJCUJMQUNLQklSRF9NVVhfUkFURV9ERUZBVUxUIC8qLCAweDcwKi8pOyAvKiBlbmNvZGluZyBidWZmZXIsIGNrZW5uZWR5ICovCisKKwkvKiBUT0RPOiBpbXBsZW1lbnQgdGhlIHN0cmVhbSBJRCBzdHVmZjoKKwkJdHNfcGlkX3BtdCwgdHNfcGlkX2F1ZGlvLCB0c19waWRfdmlkZW8sIHRzX3BpZF9wY3IsCisJCXBzX3NpemUsIGF1X3Blc2lkLCB2aV9wZXNpZAorCSovCit9CisjZGVmaW5lIENIRUNLX1BBUkFNKCBuYW1lICkgKCBkZXYtPnBhcmFtcy5uYW1lICE9IHBhcmFtcy0+bmFtZSApCisjZGVmaW5lIElGX1BBUkFNKCBuYW1lICkgaWYoIENIRUNLX1BBUkFNKCBuYW1lICkgKQorI2RlZmluZSBVUERBVEVfUEFSQU0oIG5hbWUgKSBkZXYtPnBhcmFtcy5uYW1lID0gcGFyYW1zLT5uYW1lCit2b2lkIGJsYWNrYmlyZF9zZXRfcGFyYW1zKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gKnBhcmFtcykKK3sKKwl1MzIgYXVfcGFyYW1zOworCisJLyogYXNzaWduIHN0cmVhbSB0eXBlICovCisJaWYoIHBhcmFtcy0+c3RfdHlwZSA+PSBBUlJBWV9TSVpFKG1wZWdfc3RyZWFtX3R5cGVzKSApCisJCXBhcmFtcy0+c3RfdHlwZSA9IFY0TDJfTVBFR19QU18yOworCWlmKCBwYXJhbXMtPnN0X3R5cGUgPT0gVjRMMl9NUEVHX1NTXzEgKQorCQlwYXJhbXMtPnZpX3R5cGUgPSBWNEwyX01QRUdfVklfMTsKKwllbHNlCisJCXBhcmFtcy0+dmlfdHlwZSA9IFY0TDJfTVBFR19WSV8yOworCWlmKCBDSEVDS19QQVJBTSggc3RfdHlwZSApIHx8IENIRUNLX1BBUkFNKCB2aV90eXBlICkgKQorCXsKKwkJVVBEQVRFX1BBUkFNKCBzdF90eXBlICk7CisJCVVQREFURV9QQVJBTSggdmlfdHlwZSApOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX1NUUkVBTV9UWVBFLCAxLCAwLCBtcGVnX3N0cmVhbV90eXBlc1twYXJhbXMtPnN0X3R5cGVdKTsKKwl9CisKKwkvKiBhc3NpZ24gZnJhbWVyYXRlICovCisJaWYoIHBhcmFtcy0+dmlfZnJhbWVfcmF0ZSA8PSAyNSApCisJCXBhcmFtcy0+dmlfZnJhbWVfcmF0ZSA9IDI1OworCWVsc2UKKwkJcGFyYW1zLT52aV9mcmFtZV9yYXRlID0gMzA7CisJSUZfUEFSQU0oIHZpX2ZyYW1lX3JhdGUgKQorCXsKKwkJVVBEQVRFX1BBUkFNKCB2aV9mcmFtZV9yYXRlICk7CisJCWlmKCBwYXJhbXMtPnZpX2ZyYW1lX3JhdGUgPT0gMjUgKQorCQkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9GUkFNRVJBVEUsIDEsIDAsIEJMQUNLQklSRF9GUkFNRVJBVEVfUEFMXzI1KTsKKwkJZWxzZQorCQkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9GUkFNRVJBVEUsIDEsIDAsIEJMQUNLQklSRF9GUkFNRVJBVEVfTlRTQ18zMCk7CisJfQorCisJLyogYXNzaWduIGFzcGVjdCByYXRpbyAqLworCWlmKCBwYXJhbXMtPnZpX2FzcGVjdF9yYXRpbyA+PSBBUlJBWV9TSVpFKG1wZWdfc3RyZWFtX3JhdGlvcykgKQorCQlwYXJhbXMtPnZpX2FzcGVjdF9yYXRpbyA9IFY0TDJfTVBFR19BU1BFQ1RfNF8zOworCUlGX1BBUkFNKCB2aV9hc3BlY3RfcmF0aW8gKQorCXsKKwkJVVBEQVRFX1BBUkFNKCB2aV9hc3BlY3RfcmF0aW8gKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9BU1BFQ1RfUkFUSU8sIDEsIDAsIG1wZWdfc3RyZWFtX3JhdGlvc1twYXJhbXMtPnZpX2FzcGVjdF9yYXRpb10pOworCX0KKworCS8qIGFzc2lnbiBnb3AgcHJvcGVydGllcyAqLworCWlmKCBDSEVDS19QQVJBTSggdmlfZnJhbWVzX3Blcl9nb3AgKSB8fCBDSEVDS19QQVJBTSggdmlfYmZyYW1lc19jb3VudCApICkKKwl7CisJCVVQREFURV9QQVJBTSggdmlfZnJhbWVzX3Blcl9nb3AgKTsKKwkJVVBEQVRFX1BBUkFNKCB2aV9iZnJhbWVzX2NvdW50ICk7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfR09QX1NUUlVDVFVSRSwgMiwgMCwgcGFyYW1zLT52aV9mcmFtZXNfcGVyX2dvcCwgcGFyYW1zLT52aV9iZnJhbWVzX2NvdW50KzEpOworCX0KIAogCS8qIGFzc2lnbiBnb3AgY2xvc3VyZSAqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfR09QX0NMT1NVUkUsIDEsIDAsIEJMQUNLQklSRF9HT1BfQ0xPU1VSRV9PRkYpOworCUlGX1BBUkFNKCBjbG9zZWRfZ29wcyApCisJeworCQlVUERBVEVfUEFSQU0oIGNsb3NlZF9nb3BzICk7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfR09QX0NMT1NVUkUsIDEsIDAsIHBhcmFtcy0+Y2xvc2VkX2dvcHMpOworCX0KIAorCS8qIGFzc2lnbiAzIDIgcHVsbGRvd24gKi8KKwlJRl9QQVJBTSggcHVsbGRvd24gKQorCXsKKwkJVVBEQVRFX1BBUkFNKCBwdWxsZG93biApOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUXzNfMl9QVUxMRE9XTiwgMSwgMCwgcGFyYW1zLT5wdWxsZG93bik7CisJfQogCisJLyogbWFrZSBzdXJlIHRoZSBwYXJhbXMgYXJlIHdpdGhpbiBib3VuZHMgKi8KKwlpZiggcGFyYW1zLT5zdF9iaXRyYXRlLm1vZGUgPj0gQVJSQVlfU0laRShtcGVnX3ZpZGVvX2JpdHJhdGVzKSApCisJCXBhcmFtcy0+dmlfYml0cmF0ZS5tb2RlID0gVjRMMl9CSVRSQVRFX05PTkU7CisJaWYoIHBhcmFtcy0+dmlfYml0cmF0ZS5tb2RlID49IEFSUkFZX1NJWkUobXBlZ192aWRlb19iaXRyYXRlcykgKQorCQlwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9IFY0TDJfQklUUkFURV9OT05FOworCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUubW9kZSA+PSBBUlJBWV9TSVpFKG1wZWdfdmlkZW9fYml0cmF0ZXMpICkKKwkJcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgPSBWNEwyX0JJVFJBVEVfTk9ORTsKKworCS8qIGFzc2lnbiBhdWRpbyBwcm9wZXJ0aWVzICovCisJLyogbm90ZTogaXQncyBub3QgbmVjZXNzYXJ5IHRvIHNldCB0aGUgc2FtcGxlcmF0ZSwgdGhlIG1wZWcgZW5jb2RlciBzZWVtcyB0byBhdXRvZGV0ZWN0L2FkanVzdCAqLworCWF1X3BhcmFtcyA9IEJMQUNLQklSRF9BVURJT19CSVRTX1NURVJFTyB8CisJCQkvKiBCTEFDS0JJUkRfQVVESU9fQklUU19CT1VORF80IHwgKi8KKwlCTEFDS0JJUkRfQVVESU9fQklUU19FTVBIQVNJU19OT05FIHwKKwkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfQ1JDX09GRiB8CisJCUJMQUNLQklSRF9BVURJT19CSVRTX0NPUFlSSUdIVF9PRkYgfAorCQlCTEFDS0JJUkRfQVVESU9fQklUU19DT1BZIHwKKwkJMDsKKwlpZiggcGFyYW1zLT5hdV9zYW1wbGVfcmF0ZSA8IDMyMDAwICkKKwl7CisJCXBhcmFtcy0+YXVfc2FtcGxlX3JhdGUgPSAzMjAwMDsKKwkJYXVfcGFyYW1zIHw9IEJMQUNLQklSRF9BVURJT19CSVRTXzMyMDAwSFo7CisJfQorCWVsc2UgaWYoIHBhcmFtcy0+YXVfc2FtcGxlX3JhdGUgPCA0NDEwMCApCisJeworCQlwYXJhbXMtPmF1X3NhbXBsZV9yYXRlID0gNDQxMDA7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU180NDEwMEhaOworCX0KKwllbHNlCisJeworCQlwYXJhbXMtPmF1X3NhbXBsZV9yYXRlID0gNDgwMDA7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU180ODAwMEhaOworCX0KKwlpZiggcGFyYW1zLT5hdV90eXBlID09IFY0TDJfTVBFR19BVV8yX0kgKQorCXsKKwkJYXVfcGFyYW1zIHw9IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzE7CisJfQorCWVsc2UKKwl7CisJCS8qIFRPRE86IHRyeSB0byBoYW5kbGUgdGhlIG90aGVyIGZvcm1hdHMgbW9yZSBncmFjZWZ1bGx5ICovCisJCXBhcmFtcy0+YXVfdHlwZSA9IFY0TDJfTVBFR19BVV8yX0lJOworCQlhdV9wYXJhbXMgfD0gQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMjsKKwl9CisJaWYoIHBhcmFtcy0+YXVfYml0cmF0ZS5tb2RlICkKKwl7CisJCWludCBsYXllcjsKKworCQlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX0NCUiApCisJCQlwYXJhbXMtPmF1X2JpdHJhdGUubWF4ID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldDsKKwkJZWxzZQorCQkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+dmlfYml0cmF0ZS5tYXg7CisKKwkJbGF5ZXIgPSBwYXJhbXMtPmF1X3R5cGU7CisJCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID09IDAgKQorCQl7CisJCQkvKiBUT0RPOiB1c2UgdGhlIG1pbmltdW0gcG9zc2libGUgYml0cmF0ZSBpbnN0ZWFkIG9mIDAgPyAqLworCQkJYXVfcGFyYW1zIHw9IDA7CisJCX0KKwkJZWxzZSBpZiggcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA+PQorCQkJIG1wZWdfYXVkaW9fYml0cmF0ZXNbQklUUkFURVNfU0laRS0xXS5sYXllcltsYXllcl0ucmF0ZSApCisJCXsKKwkJCS8qIGNsYW1wIHRoZSBiaXRyYXRlIHRvIHRoZSBtYXggc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZCAqLworCQkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IG1wZWdfYXVkaW9fYml0cmF0ZXNbQklUUkFURVNfU0laRS0xXS5sYXllcltsYXllcl0ucmF0ZTsKKwkJCXBhcmFtcy0+YXVfYml0cmF0ZS5tYXggPSBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0OworCQkJYXVfcGFyYW1zIHw9IG1wZWdfYXVkaW9fYml0cmF0ZXNbQklUUkFURVNfU0laRS0xXS5sYXllcltsYXllcl0uYml0czsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCBiaXRyYXRlICovCisJCQlpbnQgaTsKKwkJCWZvcihpID0gMTsgaSA8IEJJVFJBVEVTX1NJWkU7IGkrKykKKwkJCXsKKwkJCQlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA+IG1wZWdfYXVkaW9fYml0cmF0ZXNbaS0xXS5sYXllcltsYXllcl0ucmF0ZSAmJgorCQkJCSAgICBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0IDw9IG1wZWdfYXVkaW9fYml0cmF0ZXNbaV0ubGF5ZXJbbGF5ZXJdLnJhdGUgKQorCQkJCXsKKwkJCQkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IG1wZWdfYXVkaW9fYml0cmF0ZXNbaV0ubGF5ZXJbbGF5ZXJdLnJhdGU7CisJCQkJCXBhcmFtcy0+YXVfYml0cmF0ZS5tYXggPSBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0OworCQkJCQlhdV9wYXJhbXMgfD0gbXBlZ19hdWRpb19iaXRyYXRlc1tpXS5sYXllcltsYXllcl0uYml0czsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIFRPRE86ID8/PyAqLworCQlwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT5hdV9iaXRyYXRlLm1heCA9IDA7CisJCWF1X3BhcmFtcyB8PSAwOworCX0KKwlpZiggQ0hFQ0tfUEFSQU0oIGF1X3R5cGUgKSB8fCBDSEVDS19QQVJBTSggYXVfc2FtcGxlX3JhdGUgKQorCQl8fCBDSEVDS19QQVJBTSggYXVfYml0cmF0ZS5tb2RlICkgfHwgQ0hFQ0tfUEFSQU0oIGF1X2JpdHJhdGUubWF4ICkKKwkJfHwgQ0hFQ0tfUEFSQU0oIGF1X2JpdHJhdGUudGFyZ2V0ICkKKwkpCisJeworCQlVUERBVEVfUEFSQU0oIGF1X3R5cGUgKTsKKwkJVVBEQVRFX1BBUkFNKCBhdV9zYW1wbGVfcmF0ZSApOworCQlVUERBVEVfUEFSQU0oIGF1X2JpdHJhdGUgKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9BVURJT19QQVJBTVMsIDEsIDAsIGF1X3BhcmFtcyApOworCX0KKworCS8qIGFzc2lnbiBiaXRyYXRlcyAqLworCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSApCisJeworCQkvKiBiaXRyYXRlIGlzIHNldCwgbGV0J3MgZmlndXJlIG91dCB0aGUgY2JyL3ZiciBtZXNzICovCisJCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubWF4IDwgcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCApCisJCXsKKwkJCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9PSBWNEwyX0JJVFJBVEVfQ0JSICkKKwkJCQlwYXJhbXMtPnZpX2JpdHJhdGUubWF4ID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldDsKKwkJCWVsc2UKKwkJCQlwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT52aV9iaXRyYXRlLm1heDsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiggcGFyYW1zLT5zdF9iaXRyYXRlLm1heCA8IHBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQgKQorCQl7CisJCQlpZiggcGFyYW1zLT5zdF9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX1ZCUiApCisJCQkJcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+c3RfYml0cmF0ZS5tYXg7CisJCQllbHNlCisJCQkJcGFyYW1zLT5zdF9iaXRyYXRlLm1heCA9IHBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQ7CisJCX0KKwkJLyogY2FsY3VsYXRlIHZpX2JpdHJhdGUgPSBzdF9iaXRyYXRlIC0gYXVfYml0cmF0ZSAqLworCQlwYXJhbXMtPnZpX2JpdHJhdGUubWF4ID0gcGFyYW1zLT5zdF9iaXRyYXRlLm1heCAtIHBhcmFtcy0+YXVfYml0cmF0ZS5tYXg7CisJCXBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0IC0gcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldDsKKwl9CisJVVBEQVRFX1BBUkFNKCBzdF9iaXRyYXRlICk7CisJaWYoIENIRUNLX1BBUkFNKCB2aV9iaXRyYXRlLm1vZGUgKSB8fCBDSEVDS19QQVJBTSggdmlfYml0cmF0ZS5tYXggKQorCQl8fCBDSEVDS19QQVJBTSggdmlfYml0cmF0ZS50YXJnZXQgKQorCSkKKwl7CisJCVVQREFURV9QQVJBTSggdmlfYml0cmF0ZSApOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX1ZJREVPX0JJVFJBVEUsIDQsIDAsCisJCQkJbXBlZ192aWRlb19iaXRyYXRlc1twYXJhbXMtPnZpX2JpdHJhdGUubW9kZV0sCisJCQkJcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCAqIDEwMDAsIC8qIGticHMgLT4gYnBzICovCisJCQkJcGFyYW1zLT52aV9iaXRyYXRlLm1heCAqIDEwMDAgLyBCTEFDS0JJUkRfUEVBS19SQVRFX0RJVklTT1IsIC8qIHBlYWsvNDAwICovCisJCQkJQkxBQ0tCSVJEX01VWF9SQVRFX0RFRkFVTFQgLyosIDB4NzAqLyk7IC8qIGVuY29kaW5nIGJ1ZmZlciwgY2tlbm5lZHkgKi8KKwl9CisKKwkvKiBUT0RPOiBpbXBsZW1lbnQgdGhlIHN0cmVhbSBJRCBzdHVmZjoKKwkJdHNfcGlkX3BtdCwgdHNfcGlkX2F1ZGlvLCB0c19waWRfdmlkZW8sIHRzX3BpZF9wY3IsCisJCXBzX3NpemUsIGF1X3Blc2lkLCB2aV9wZXNpZAorCSovCisJVVBEQVRFX1BBUkFNKCB0c19waWRfcG10ICk7CisJVVBEQVRFX1BBUkFNKCB0c19waWRfYXVkaW8gKTsKKwlVUERBVEVfUEFSQU0oIHRzX3BpZF92aWRlbyApOworCVVQREFURV9QQVJBTSggdHNfcGlkX3BjciApOworCVVQREFURV9QQVJBTSggcHNfc2l6ZSApOworCVVQREFURV9QQVJBTSggYXVfcGVzaWQgKTsKKwlVUERBVEVfUEFSQU0oIHZpX3Blc2lkICk7Cit9CisKK3N0YXRpYyB2b2lkIGJsYWNrYmlyZF9zZXRfZGVmYXVsdF9kbnJfcGFyYW1zKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCit7CiAJLyogYXNzaWduIGRuciBmaWx0ZXIgbW9kZSAqLworCWlmKCBkZXYtPmRucl9wYXJhbXMubW9kZSA+IEJMQUNLQklSRF9ETlJfQklUU19BVVRPICkKKwkJZGV2LT5kbnJfcGFyYW1zLm1vZGUgPSBCTEFDS0JJUkRfRE5SX0JJVFNfTUFOVUFMOworCWlmKCBkZXYtPmRucl9wYXJhbXMudHlwZSA+IEJMQUNLQklSRF9NRURJQU5fRklMVEVSX0RJQUdPTkFMICkKKwkJZGV2LT5kbnJfcGFyYW1zLnR5cGUgPSBCTEFDS0JJUkRfTUVESUFOX0ZJTFRFUl9ESVNBQkxFRDsKIAlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0ROUl9NT0RFLCAyLCAwLAotCQkJQkxBQ0tCSVJEX0ROUl9CSVRTX01BTlVBTCwKLQkJCUJMQUNLQklSRF9NRURJQU5fRklMVEVSX0RJU0FCTEVECi0JCSk7CisJCQkJZGV2LT5kbnJfcGFyYW1zLm1vZGUsCisJCQkJZGV2LT5kbnJfcGFyYW1zLnR5cGUKKwkJCSk7CiAKIAkvKiBhc3NpZ24gZG5yIGZpbHRlciBwcm9wcyovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9NQU5VQUxfRE5SLCAyLCAwLCAwLCAwKTsKKwlpZiggZGV2LT5kbnJfcGFyYW1zLnNwYXRpYWwgPiAxNSApCisJCWRldi0+ZG5yX3BhcmFtcy5zcGF0aWFsID0gMTU7CisJaWYoIGRldi0+ZG5yX3BhcmFtcy50ZW1wb3JhbCA+IDMxICkKKwkJZGV2LT5kbnJfcGFyYW1zLnRlbXBvcmFsID0gMzE7CisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9NQU5VQUxfRE5SLCAyLCAwLAorCQkJCWRldi0+ZG5yX3BhcmFtcy5zcGF0aWFsLAorCQkJCWRldi0+ZG5yX3BhcmFtcy50ZW1wb3JhbAorCQkJKTsKK30KKyNkZWZpbmUgQ0hFQ0tfRE5SX1BBUkFNKCBuYW1lICkgKCBkZXYtPmRucl9wYXJhbXMubmFtZSAhPSBkbnJfcGFyYW1zLT5uYW1lICkKKyNkZWZpbmUgVVBEQVRFX0ROUl9QQVJBTSggbmFtZSApIGRldi0+ZG5yX3BhcmFtcy5uYW1lID0gZG5yX3BhcmFtcy0+bmFtZQordm9pZCBibGFja2JpcmRfc2V0X2Rucl9wYXJhbXMoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IGJsYWNrYmlyZF9kbnIqIGRucl9wYXJhbXMpCit7CisJLyogYXNzaWduIGRuciBmaWx0ZXIgbW9kZSAqLworCS8qIGNsYW1wIHZhbHVlcyAqLworCWlmKCBkbnJfcGFyYW1zLT5tb2RlID4gQkxBQ0tCSVJEX0ROUl9CSVRTX0FVVE8gKQorCQlkbnJfcGFyYW1zLT5tb2RlID0gQkxBQ0tCSVJEX0ROUl9CSVRTX01BTlVBTDsKKwlpZiggZG5yX3BhcmFtcy0+dHlwZSA+IEJMQUNLQklSRF9NRURJQU5fRklMVEVSX0RJQUdPTkFMICkKKwkJZG5yX3BhcmFtcy0+dHlwZSA9IEJMQUNLQklSRF9NRURJQU5fRklMVEVSX0RJU0FCTEVEOworCS8qIGNoZWNrIGlmIHRoZSBwYXJhbXMgYWN0dWFsbHkgY2hhbmdlZCAqLworCWlmKCBDSEVDS19ETlJfUEFSQU0oIG1vZGUgKSB8fCBDSEVDS19ETlJfUEFSQU0oIHR5cGUgKSApCisJeworCQlVUERBVEVfRE5SX1BBUkFNKCBtb2RlICk7CisJCVVQREFURV9ETlJfUEFSQU0oIHR5cGUgKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9ETlJfTU9ERSwgMiwgMCwgZG5yX3BhcmFtcy0+bW9kZSwgZG5yX3BhcmFtcy0+dHlwZSk7CisJfQorCisJLyogYXNzaWduIGRuciBmaWx0ZXIgcHJvcHMqLworCWlmKCBkbnJfcGFyYW1zLT5zcGF0aWFsID4gMTUgKQorCQlkbnJfcGFyYW1zLT5zcGF0aWFsID0gMTU7CisJaWYoIGRucl9wYXJhbXMtPnRlbXBvcmFsID4gMzEgKQorCQlkbnJfcGFyYW1zLT50ZW1wb3JhbCA9IDMxOworCWlmKCBDSEVDS19ETlJfUEFSQU0oIHNwYXRpYWwgKSB8fCBDSEVDS19ETlJfUEFSQU0oIHRlbXBvcmFsICkgKQorCXsKKwkJVVBEQVRFX0ROUl9QQVJBTSggc3BhdGlhbCApOworCQlVUERBVEVfRE5SX1BBUkFNKCB0ZW1wb3JhbCApOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX01BTlVBTF9ETlIsIDIsIDAsIGRucl9wYXJhbXMtPnNwYXRpYWwsIGRucl9wYXJhbXMtPnRlbXBvcmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsYWNrYmlyZF9jb2RlY19zZXR0aW5ncyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQoreworCisJLyogYXNzaWduIG91dHB1dCBwb3J0ICovCisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9PVVRQVVRfUE9SVCwgMSwgMCwgQkxBQ0tCSVJEX09VVFBVVF9QT1JUX1NUUkVBTUlORyk7IC8qIEhvc3QgKi8KKworCS8qIGFzc2lnbiBmcmFtZSBzaXplICovCisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9SRVNPTFVUSU9OLCAyLCAwLAorCQkJCWRldi0+aGVpZ2h0LCBkZXYtPndpZHRoKTsKIAogCS8qIGFzc2lnbiBjb3JpbmcgbGV2ZWxzIChsdW1hX2gsIGx1bWFfbCwgY2hyb21hX2gsIGNocm9tYV9sKSAqLwogCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRE5SX01FRElBTiwgNCwgMCwgMCwgMjU1LCAwLCAyNTUpOwogCiAJLyogYXNzaWduIHNwYXRpYWwgZmlsdGVyIHR5cGU6IGx1bWFfdDogaG9yaXpfb25seSwgY2hyb21hX3Q6IGhvcml6X29ubHkgKi8KIAlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX1NQQVRJQUxfRklMVEVSLCAyLCAwLAotCQkJQkxBQ0tCSVJEX1NQQVRJQUxfRklMVEVSX0xVTUFfMURfSE9SSVosCi0JCQlCTEFDS0JJUkRfU1BBVElBTF9GSUxURVJfQ0hST01BXzFEX0hPUklaCi0JCSk7CisJCQkJQkxBQ0tCSVJEX1NQQVRJQUxfRklMVEVSX0xVTUFfMURfSE9SSVosCisJCQkJQkxBQ0tCSVJEX1NQQVRJQUxfRklMVEVSX0NIUk9NQV8xRF9IT1JJWgorCQkJKTsKIAogCS8qIGFzc2lnbiBmcmFtZSBkcm9wIHJhdGUgKi8KIAkvKiBibGFja2JpcmRfYXBpX2NtZChkZXYsIElWVFZfQVBJX0FTU0lHTl9GUkFNRV9EUk9QX1JBVEUsIDEsIDAsIDApOyAqLworCisJYmxhY2tiaXJkX3NldF9kZWZhdWx0X3BhcmFtcyhkZXYpOworCWJsYWNrYmlyZF9zZXRfZGVmYXVsdF9kbnJfcGFyYW1zKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYmxhY2tiaXJkX2luaXRpYWxpemVfY29kZWMoc3RydWN0IGN4ODgwMl9kZXYgKmRldikKQEAgLTg1MSwxNSArMTMyNywxMCBAQAogCXN0cnVjdCBjeDg4MDJfZmggKmZoID0gcS0+cHJpdl9kYXRhOwogCiAJZmgtPmRldi0+dHNfcGFja2V0X3NpemUgID0gMTg4ICogNDsgLyogd2FzOiA1MTIgKi8KLQlmaC0+ZGV2LT50c19wYWNrZXRfY291bnQgPSAzMjsgLyogd2FzOiAxMDAgKi8KKwlmaC0+ZGV2LT50c19wYWNrZXRfY291bnQgPSBtcGVnYnVmczsgLyogd2FzOiAxMDAgKi8KIAogCSpzaXplID0gZmgtPmRldi0+dHNfcGFja2V0X3NpemUgKiBmaC0+ZGV2LT50c19wYWNrZXRfY291bnQ7Ci0JaWYgKDAgPT0gKmNvdW50KQotCQkqY291bnQgPSBtcGVnYnVmczsKLQlpZiAoKmNvdW50IDwgMikKLQkJKmNvdW50ID0gMjsKLQlpZiAoKmNvdW50ID4gMzIpCi0JCSpjb3VudCA9IDMyOworCSpjb3VudCA9IGZoLT5kZXYtPnRzX3BhY2tldF9jb3VudDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODY4LDcgKzEzMzksNyBAQAogCSAgICAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IGN4ODgwMl9maCAqZmggPSBxLT5wcml2X2RhdGE7Ci0JcmV0dXJuIGN4ODgwMl9idWZfcHJlcGFyZShmaC0+ZGV2LCAoc3RydWN0IGN4ODhfYnVmZmVyKil2Yik7CisJcmV0dXJuIGN4ODgwMl9idWZfcHJlcGFyZShmaC0+ZGV2LCAoc3RydWN0IGN4ODhfYnVmZmVyKil2YiwgZmllbGQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTIwLDggKzEzOTEsNiBAQAogCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQlWNEwyX0NBUF9SRUFEV1JJVEUgICAgIHwKIAkJCVY0TDJfQ0FQX1NUUkVBTUlORyAgICAgfAotCQkJVjRMMl9DQVBfVkJJX0NBUFRVUkUgICB8Ci0JCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIHwKIAkJCTA7CiAJCWlmIChVTlNFVCAhPSBjb3JlLT50dW5lcl90eXBlKQogCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7CkBAIC05NDEsMjcgKzE0MTAsNTIgQEAKIAogCQltZW1zZXQoZiwwLHNpemVvZigqZikpOwogCQlmLT5pbmRleCA9IGluZGV4OwotCQlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCAiTVBFRyBUUyIsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOworCQlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCAiTVBFRyIsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOwogCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfR19GTVQ6Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKIAl7Ci0JCS8qIEZJWE1FIC0tIHF1aWNrJ24nZGlydHkgZm9yIGV4YWN0bHkgb25lIHNpemUgLi4uICovCiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKIAogCQltZW1zZXQoZiwwLHNpemVvZigqZikpOwogCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOworCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi8KKwkJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOwogCQlmLT5mbXQucGl4LndpZHRoICAgICAgICA9IGRldi0+d2lkdGg7CiAJCWYtPmZtdC5waXguaGVpZ2h0ICAgICAgID0gZGV2LT5oZWlnaHQ7CisJCWYtPmZtdC5waXguZmllbGQgICAgICAgID0gZmgtPm1wZWdxLmZpZWxkOworCQlkcHJpbnRrKDAsIlZJRElPQ19HX0ZNVDogdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwKKwkJCWRldi0+d2lkdGgsIGRldi0+aGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQgKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CisKKwkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKLQkJZi0+Zm10LnBpeC5maWVsZCAgICAgICAgPSBWNEwyX0ZJRUxEX05PTkU7CiAJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKLQkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSAxODggKiA0ICogMTAyNDsgLyogMTAyNCAqIDUxMiAqLyAvKiBGSVhNRTogQlVGRkVSX1NJWkUgKi87CisJCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi87CiAJCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKKwkJZHByaW50aygwLCJWSURJT0NfVFJZX0ZNVDogdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwKKwkJCWRldi0+d2lkdGgsIGRldi0+aGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQgKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOworCisJCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CisJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKKwkJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOworCQlkcHJpbnRrKDAsIlZJRElPQ19TX0ZNVDogdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwKKwkJCWYtPmZtdC5waXgud2lkdGgsIGYtPmZtdC5waXguaGVpZ2h0LCBmLT5mbXQucGl4LmZpZWxkICk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTg1LDYgKzE0NzksMjIgQEAKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6CiAJCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT5tcGVncSk7CiAKKwkvKiAtLS0gbXBlZyBjb21wcmVzc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX0dfTVBFR0NPTVA6CisJeworCQlzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uICpmID0gYXJnOworCisJCW1lbWNweShmLCZkZXYtPnBhcmFtcyxzaXplb2YoKmYpKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfTVBFR0NPTVA6CisJeworCQlzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uICpmID0gYXJnOworCisJCWJsYWNrYmlyZF9zZXRfcGFyYW1zKGRldiwgZik7CisJCXJldHVybiAwOworCX0KKwogCWRlZmF1bHQ6CiAJCXJldHVybiBjeDg4X2RvX2lvY3RsKCBpbm9kZSwgZmlsZSwgMCwgZGV2LT5jb3JlLCBjbWQsIGFyZywgY3g4OF9pb2N0bF9ob29rICk7CiAJfQpAQCAtMTAzNCwxNiArMTU0NCwxNyBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgICAgICA9IGRldjsKIAotCS8qIEZJWE1FOiBsb2NraW5nIGFnYWluc3Qgb3RoZXIgdmlkZW8gZGV2aWNlICovCi0JY3g4OF9zZXRfc2NhbGUoZGV2LT5jb3JlLCBkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwKLQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCk7Ci0KIAl2aWRlb2J1Zl9xdWV1ZV9pbml0KCZmaC0+bXBlZ3EsICZibGFja2JpcmRfcW9wcywKIAkJCSAgICBkZXYtPnBjaSwgJmRldi0+c2xvY2ssCiAJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCQkJICAgIFY0TDJfRklFTERfVE9QLAorCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IGN4ODhfYnVmZmVyKSwKIAkJCSAgICBmaCk7CisKKwkvKiBGSVhNRTogbG9ja2luZyBhZ2FpbnN0IG90aGVyIHZpZGVvIGRldmljZSAqLworCWN4ODhfc2V0X3NjYWxlKGRldi0+Y29yZSwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQsCisJCQlmaC0+bXBlZ3EuZmllbGQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNzMsNiArMTY4NCw4IEBACiAJZGV2LT5jb3JlID0gY29yZTsKIAlkZXYtPndpZHRoID0gNzIwOwogCWRldi0+aGVpZ2h0ID0gNTc2OworCW1lbWNweSgmZGV2LT5wYXJhbXMsJmRlZmF1bHRfbXBlZ19wYXJhbXMsc2l6ZW9mKGRlZmF1bHRfbXBlZ19wYXJhbXMpKTsKKwltZW1jcHkoJmRldi0+ZG5yX3BhcmFtcywmZGVmYXVsdF9kbnJfcGFyYW1zLHNpemVvZihkZWZhdWx0X2Rucl9wYXJhbXMpKTsKIAogCWVyciA9IGN4ODgwMl9pbml0X2NvbW1vbihkZXYpOwogCWlmICgwICE9IGVycikKQEAgLTExOTksNyArMTcxMiw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBibGFja2JpcmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotICAgICAgICBzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKIAkvKiBibGFja2JpcmQgKi8KIAlibGFja2JpcmRfdW5yZWdpc3Rlcl92aWRlbyhkZXYpOwpAQCAtMTIxNSw4ICsxNzI4LDggQEAKIAl7CiAJCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCiAJCS5kZXZpY2UgICAgICAgPSAweDg4MDIsCi0gICAgICAgICAgICAgICAgLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCi0gICAgICAgICAgICAgICAgLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCisJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKIAl9LHsKIAkJLyogLS0tIGVuZCBvZiBsaXN0IC0tLSAqLwogCX0KQEAgLTEyMjQsMTAgKzE3MzcsMTAgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjeDg4MDJfcGNpX3RibCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibGFja2JpcmRfcGNpX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgID0gImN4ODgtYmxhY2tiaXJkIiwKLSAgICAgICAgLmlkX3RhYmxlID0gY3g4ODAyX3BjaV90YmwsCi0gICAgICAgIC5wcm9iZSAgICA9IGJsYWNrYmlyZF9wcm9iZSwKLSAgICAgICAgLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYmxhY2tiaXJkX3JlbW92ZSksCisJLm5hbWUgICAgID0gImN4ODgtYmxhY2tiaXJkIiwKKwkuaWRfdGFibGUgPSBjeDg4MDJfcGNpX3RibCwKKwkucHJvYmUgICAgPSBibGFja2JpcmRfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYmxhY2tiaXJkX3JlbW92ZSksCiAJLnN1c3BlbmQgID0gY3g4ODAyX3N1c3BlbmRfY29tbW9uLAogCS5yZXN1bWUgICA9IGN4ODgwMl9yZXN1bWVfY29tbW9uLAogfTsKQEAgLTEyNTcsNiArMTc3MCw4IEBACiAKIEVYUE9SVF9TWU1CT0woY3g4OF9pb2N0bF9ob29rKTsKIEVYUE9SVF9TWU1CT0woY3g4OF9pb2N0bF90cmFuc2xhdG9yKTsKK0VYUE9SVF9TWU1CT0woYmxhY2tiaXJkX3NldF9wYXJhbXMpOworRVhQT1JUX1NZTUJPTChibGFja2JpcmRfc2V0X2Rucl9wYXJhbXMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IDRkYTkxZDUuLmYyMjY4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTI2LDI3ICsxMjYsMjcgQEAKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDNmZiwKKwkJCS5ncGlvMCAgPSAweDAzZmYsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ3BpbzAgID0gMHgwM2ZlLAorCQkJLmdwaW8wICA9IDB4MDNmZSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDNmZSwKKwkJCS5ncGlvMCAgPSAweDAzZmUsCiAJCX19LAogCX0sCi0gICAgICAgIFtDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJUXSA9IHsKLSAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IDIwMDBYUCBFeHBlcnQiLAotICAgICAgICAgICAgICAgIC50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfNElOMSwKKwlbQ1g4OF9CT0FSRF9XSU5GQVNUMjAwMFhQX0VYUEVSVF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJMZWFkdGVrIFdpbmZhc3QgMjAwMFhQIEV4cGVydCIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfNElOMSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCi0gICAgICAgICAgICAgICAgLmlucHV0ICAgICAgICAgID0ge3sKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAJPSAweDAwRjVlNzAwLAogCQkJLmdwaW8xICA9IDB4MDAwMDMwMDQsCiAJCQkuZ3BpbzIgID0gMHgwMEY1ZTcwMCwKQEAgLTE2NSwxNiArMTY1LDE2IEBACiAJCQkuZ3BpbzEgID0gMHgwMDAwMzAwNCwKIAkJCS5ncGlvMiAgPSAweDAwRjVjNzAwLAogCQkJLmdwaW8zICA9IDB4MDIwMDAwMDAsCi0gICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICAgICAgLnJhZGlvID0gewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfUkFESU8sCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKIAkJCS5ncGlvMAk9IDB4MDBGNWQ3MDAsCiAJCQkuZ3BpbzEgID0gMHgwMDAwMzAwNCwKIAkJCS5ncGlvMiAgPSAweDAwRjVkNzAwLAogCQkJLmdwaW8zICA9IDB4MDIwMDAwMDAsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgfSwKLQlbQ1g4OF9CT0FSRF9BVkVSVFZfMzAzXSA9IHsKKwkJfSwKKwl9LAorCVtDWDg4X0JPQVJEX0FWRVJUVl9TVFVESU9fMzAzXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJUViBTdHVkaW8gMzAzIChNMTI2KSIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCi0JCS50ZGE5ODg3X2NvbmYJPSBUREE5ODg3X1BSRVNFTlQsCisJCS50ZGE5ODg3X2NvbmYJPSBUREE5ODg3X1BSRVNFTlQgfCBUREE5ODg3X0lOVEVSQ0FSUklFUl9OVFNDLAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCkBAIC0yMTQsMzIgKzIxNCwzMiBAQAogCQkJLmdwaW8xICA9IDB4MDAwMDgwYzAsCiAJCQkuZ3BpbzIgID0gMHgwMDAwZmY0MCwKIAkJfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4MDAwMDQwYmYsCiAJCQkuZ3BpbzEgID0gMHgwMDAwODBjMCwKIAkJCS5ncGlvMiAgPSAweDAwMDBmZjQwLAogCQl9LHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDIsCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDAwMDQwYmYsCiAJCQkuZ3BpbzEgID0gMHgwMDAwODBjMCwKIAkJCS5ncGlvMiAgPSAweDAwMDBmZjQwLAotICAgICAgICAgICAgICAgIH19LAotICAgICAgICAgICAgICAgIC5yYWRpbyA9IHsKKwkJfX0sCisJCS5yYWRpbyA9IHsKIAkJCSAudHlwZSAgID0gQ1g4OF9SQURJTywKLSAgICAgICAgICAgICAgICB9LAorCQl9LAogCX0sCiAJW0NYODhfQk9BUkRfV0lORkFTVF9EVjIwMDBdID0gewotICAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJMZWFkdGVrIFdpbmZhc3QgRFYyMDAwIiwKLSAgICAgICAgICAgICAgICAudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLm5hbWUgICAgICAgICAgID0gIkxlYWR0ZWsgV2luZmFzdCBEVjIwMDAiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCi0gICAgICAgICAgICAgICAgLmlucHV0ICAgICAgICAgID0ge3sKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHgwMDM1ZTcwMCwKIAkJCS5ncGlvMSAgPSAweDAwMDAzMDA0LAogCQkJLmdwaW8yICA9IDB4MDAzNWU3MDAsCkBAIC0yNjAsMTQgKzI2MCwxNCBAQAogCQkJLmdwaW8yICA9IDB4MDIwMDAwMDAsCiAJCQkuZ3BpbzMgID0gMHgwMjAwMDAwMCwKIAkJfX0sCi0gICAgICAgICAgICAgICAgLnJhZGlvID0geworCQkucmFkaW8gPSB7CiAJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKIAkJCS5ncGlvMCAgPSAweDAwMzVkNzAwLAogCQkJLmdwaW8xICA9IDB4MDAwMDcwMDQsCiAJCQkuZ3BpbzIgID0gMHgwMDM1ZDcwMCwKIAkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAogCQkgfSwKLSAgICAgICAgfSwKKwl9LAogCVtDWDg4X0JPQVJEX0xFQURURUtfUFZSMjAwMF0gPSB7CiAJCS8vIGdwaW8gdmFsdWVzIGZvciBQQUwgdmVyc2lvbiBmcm9tIHJlZ3NweSBieSBEU2NhbGVyCiAJCS5uYW1lICAgICAgICAgICA9ICJMZWFkdGVrIFBWUiAyMDAwIiwKQEAgLTI5NiwyNSArMjk2LDI1IEBACiAJCS5ibGFja2JpcmQgPSAxLAogCX0sCiAJW0NYODhfQk9BUkRfSU9EQVRBX0dWVkNQM1BDSV0gPSB7Ci0gCQkubmFtZQkJPSAiSU9EQVRBIEdWLVZDUDMvUENJIiwKKwkJLm5hbWUJCT0gIklPREFUQSBHVi1WQ1AzL1BDSSIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKLSAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHt7Ci0gCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAotIAkJCS52bXV4ICAgPSAwLAotIAkJfSx7Ci0gCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUyLAotIAkJCS52bXV4ICAgPSAxLAotIAkJfSx7Ci0gCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCi0gCQkJLnZtdXggICA9IDIsCi0gCQl9fSwKLSAJfSwKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAwLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMiwKKwkJCS52bXV4ICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCX19LAorCX0sCiAJW0NYODhfQk9BUkRfUFJPTElOS19QTEFZVFZQVlJdID0gewotICAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBsYXlUViBQVlIiLAotICAgICAgICAgICAgICAgIC50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywKKwkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGxheVRWIFBWUiIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMzQ4LDE1ICszNDgsMTUgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4MDAwMGZkZTYsCi0gCQl9LHsKKwkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDAwMGZkZTYsIC8vIDB4MDAwMGZkYTYgTCxSIFJDQSBhdWRpbyBpbj8KIAkJfX0sCi0gICAgICAgICAgICAgICAgLnJhZGlvID0gewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfUkFESU8sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAogCQkJLmdwaW8wICA9IDB4MDAwMGZkZTIsCi0gICAgICAgICAgICAgICAgfSwKKwkJfSwKIAkJLmJsYWNrYmlyZCA9IDEsCiAJfSwKIAlbQ1g4OF9CT0FSRF9NU0lfVFZBTllXSEVSRV0gPSB7CkBAIC0zNzIsMzQgKzM3MiwzNCBAQAogCQkJLmdwaW8wICA9IDB4MDAwMDBmYmYsCiAJCQkuZ3BpbzIgID0gMHgwMDAwZmMwOCwKIAkJfSx7Ci0gIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKLSAgCQkJLnZtdXggICA9IDEsCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDAwMDAwZmJmLAogCQkJLmdwaW8yICA9IDB4MDAwMGZjNjgsCiAJCX0sewotICAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgCQkJLnZtdXggICA9IDIsCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDAwMDBmYmYsCiAJCQkuZ3BpbzIgID0gMHgwMDAwZmM2OCwKLSAgCQl9fSwKKwkJfX0sCiAJfSwKLSAgICAgICAgW0NYODhfQk9BUkRfS1dPUkxEX0RWQl9UXSA9IHsKLSAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiS1dvcmxkL1ZTdHJlYW0gWFBlcnQgRFZCLVQiLAorCVtDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVCIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotICAgICAgICAgICAgICAgIC5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4MDcwMCwKIAkJCS5ncGlvMiAgPSAweDAxMDEsCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHgwNzAwLAogCQkJLmdwaW8yICA9IDB4MDEwMSwKLSAgICAgICAgICAgICAgICB9fSwKKwkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKIAlbQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMV0gPSB7CkBAIC00MjUsMjcgKzQyNSwyNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCi0gICAgICAgICAgICAgICAgLmlucHV0ICAgICAgICAgID0ge3sKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDdmOCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4MDdmOCwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RFQlVHLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHgwN2Y5LCAgLy8gbW9ubyBmcm9tIHR1bmVyIGNoaXAKLSAgICAgICAgICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDAwMDA3ZmEsCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDAwMDA3ZmEsCi0gICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICAgICAgLnJhZGlvID0gewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfUkFESU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ3BpbzAgID0gMHgwMDAwMDdmOCwKLSAgICAgICAgICAgICAgICB9LAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDAwMDA3ZmEsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwMDAwN2ZhLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAgID0gMHgwMDAwMDdmOCwKKwkJfSwKIAl9LAogCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1FdID0gewogCQkubmFtZQkJPSAiRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUSIsCkBAIC00ODksMjggKzQ4OSwyOCBAQAogCQl9fSwKIAkJLmR2YiAgICAgICAgICAgID0gMSwKIAl9LAotICAgICAgICBbQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxXSA9IHsKKwlbQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKIAkJLmlucHV0ICAgICAgICAgID0ge3sKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDAsCi0gICAgICAgICAgICAgICAgfX0sCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAwLAorCQl9fSwKIAkJLmR2YiAgICAgICAgICAgID0gMSwKIAl9LAotICAgICAgICBbQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDFdID0geworCVtDWDg4X0JPQVJEX0NPTkVYQU5UX0RWQl9UMV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJDb25leGFudCBEVkItVCByZWZlcmVuY2UgZGVzaWduIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCi0gICAgICAgICAgICAgICAgLmlucHV0ICAgICAgICAgID0ge3sKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDAsCi0gICAgICAgICAgICAgICAgfX0sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAwLAorCQl9fSwKIAkJLmR2YiAgICAgICAgICAgID0gMSwKIAl9LAogCVtDWDg4X0JPQVJEX1BST1ZJREVPX1BWMjU5XSA9IHsKQEAgLTU0MywxMiArNTQzLDEyIEBACiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKIAlbQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1RdID0gewotCQkubmFtZQkgICAgICAgID0gImRpZ2l0YWxub3cgRE5UViBMaXZlISBEVkItVCIsCisJCS5uYW1lCQk9ICJkaWdpdGFsbm93IEROVFYgTGl2ZSEgRFZCLVQiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKLQkJLmlucHV0CSAgICAgICAgPSB7eworCQkuaW5wdXQJCT0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4MDAwMDA3MDAsCkBAIC03MDUsNDQgKzcwNSw0NCBAQAogCQkJIC5ncGlvMCA9IDB4YmY2MCwKIAkJIH0sCiAJfSwKLSAgICAgICAgW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfVF0gPSB7CisJW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfVF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDMgR29sZC1UIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEhPTVNPTl9EVFQ3NjExLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDk3ZWQsCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDk3ZTksCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4OTdlOSwKLSAgICAgICAgICAgICAgICB9fSwKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4OTdlZCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCAgPSAweDk3ZTksCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDk3ZTksCisJCX19LAogCQkuZHZiICAgICAgICAgICAgPSAxLAotICAgICAgICB9LAotICAgICAgICBbQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSV0gPSB7Ci0gICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIkFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJIiwKKwl9LAorCVtDWDg4X0JPQVJEX0FEU1RFQ0hfRFZCX1RfUENJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4MDcwMCwKIAkJCS5ncGlvMiAgPSAweDAxMDEsCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHgwNzAwLAogCQkJLmdwaW8yICA9IDB4MDEwMSwKLSAgICAgICAgICAgICAgICB9fSwKKwkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKIAlbQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzE0MDBfRFZCX1QxXSA9IHsKQEAgLTc2MiwyMCArNzYyLDEzOSBAQAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0ICAgICAgICAgID0ge3sKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4ODdmZCwKLSAgICAgICAgICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4ODdmOSwKLSAgICAgICAgICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ3BpbzAgID0gMHg4N2Y5LAotICAgICAgICAgICAgICAgIH19LAorCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHg4N2ZkLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4ODdmOSwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4ODdmOSwKKwkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKKwlbQ1g4OF9CT0FSRF9BVkVSTUVESUFfVUxUUkFUVl9NQ181NTBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXZlck1lZGlhIFVsdHJhVFYgTWVkaWEgQ2VudGVyIFBDSSA1NTAiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ibGFja2JpcmQgICAgICA9IDEsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwMDBjZDczLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDAwY2Q3MywKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMywKKwkJCS5ncGlvMCAgPSAweDAwMDBjZGIzLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwMDBjZGYzLAorCQl9LAorCX0sCisJW0NYODhfQk9BUkRfS1dPUkxEX1ZTVFJFQU1fRVhQRVJUX0RWRF0gPSB7CisJCSAvKiBBbGV4YW5kZXIgV29sZCA8YXdvbGRAYmlnZm9vdC5jb20+ICovCisJCSAubmFtZSAgICAgICAgICAgPSAiS3dvcmxkIFYtU3RyZWFtIFhwZXJ0IERWRCIsCisJCSAudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJIC5pbnB1dCAgICAgICAgICA9IHt7CisJCQkgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJIC52bXV4ICAgPSAxLAorCQkJIC5ncGlvMCAgPSAweDAzMDAwMDAwLAorCQkJIC5ncGlvMSAgPSAweDAxMDAwMDAwLAorCQkJIC5ncGlvMiAgPSAweDAyMDAwMDAwLAorCQkJIC5ncGlvMyAgPSAweDAwMTAwMDAwLAorCQkgfSx7CisJCQkgLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkgLnZtdXggICA9IDIsCisJCQkgLmdwaW8wICA9IDB4MDMwMDAwMDAsCisJCQkgLmdwaW8xICA9IDB4MDEwMDAwMDAsCisJCQkgLmdwaW8yICA9IDB4MDIwMDAwMDAsCisJCQkgLmdwaW8zICA9IDB4MDAxMDAwMDAsCisJCSB9fSwKKwl9LAorCVtDWDg4X0JPQVJEX0FUSV9IRFRWV09OREVSXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkFUSSBIRFRWIFdvbmRlciIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVFVWMTIzNkQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4MDAwMDBmZjcsCisJCQkuZ3BpbzEgID0gMHgwMDAwMDBmZiwKKwkJCS5ncGlvMiAgPSAweDAwMDAwMDAxLAorCQkJLmdwaW8zICA9IDB4MDAwMDAwMDAsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDAwMGZmZSwKKwkJCS5ncGlvMSAgPSAweDAwMDAwMGZmLAorCQkJLmdwaW8yICA9IDB4MDAwMDAwMDEsCisJCQkuZ3BpbzMgID0gMHgwMDAwMDAwMCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDAwMDBmZmUsCisJCQkuZ3BpbzEgID0gMHgwMDAwMDBmZiwKKwkJCS5ncGlvMiAgPSAweDAwMDAwMDAxLAorCQkJLmdwaW8zICA9IDB4MDAwMDAwMDAsCisJCX19LAorCQkuZHZiICAgICAgICAgICAgPSAxLAorCX0sCisJW0NYODhfQk9BUkRfV0lORkFTVF9EVFYxMDAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIldpbkZhc3QgRFRWMTAwMC1UIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAwLAorCQl9fSwKKwkJLmR2YiAgICAgICAgICAgID0gMSwKKwl9LAorCVtDWDg4X0JPQVJEX0FWRVJUVl8zMDNdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQVZlclRWIDMwMyAoTTEyNikiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwZmYsCisJCQkuZ3BpbzEgID0gMHhlMDlmLAorCQkJLmdwaW8yICA9IDB4MDAxMCwKKwkJCS5ncGlvMyAgPSAweDAwMDAsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMGZmLAorCQkJLmdwaW8xICA9IDB4ZTA1ZiwKKwkJCS5ncGlvMiAgPSAweDAwMTAsCisJCQkuZ3BpbzMgID0gMHgwMDAwLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgID0gMHgwMGZmLAorCQkJLmdwaW8xICA9IDB4ZTA1ZiwKKwkJCS5ncGlvMiAgPSAweDAwMTAsCisJCQkuZ3BpbzMgID0gMHgwMDAwLAorCQl9fSwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDg4X2Jjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9ib2FyZHMpOwogCkBAIC04MDQsNDEgKzkyMyw0MSBAQAogCQkuc3ViZGV2aWNlID0gMHgwMGY4LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVElfV09OREVSX1BSTywKIAl9LHsKLSAgICAgICAgICAgICAgICAuc3VidmVuZG9yID0gMHgxMDdkLAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgPSAweDY2MTEsCi0gICAgICAgICAgICAgICAgLmNhcmQgICAgICA9IENYODhfQk9BUkRfV0lORkFTVDIwMDBYUF9FWFBFUlQsCi0JfSx7Ci0gICAgICAgICAgICAgICAgLnN1YnZlbmRvciA9IDB4MTA3ZCwKLSAgICAgICAgICAgICAgICAuc3ViZGV2aWNlID0gMHg2NjEzLAkvKiBOVFNDICovCi0gICAgICAgICAgICAgICAgLmNhcmQgICAgICA9IENYODhfQk9BUkRfV0lORkFTVDIwMDBYUF9FWFBFUlQsCisJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCisJCS5zdWJkZXZpY2UgPSAweDY2MTEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJULAogCX0sewogCQkuc3VidmVuZG9yID0gMHgxMDdkLAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgPSAweDY2MjAsCi0gICAgICAgICAgICAgICAgLmNhcmQgICAgICA9IENYODhfQk9BUkRfV0lORkFTVF9EVjIwMDAsCi0gICAgICAgIH0sewotICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgPSAweDEwN2QsCi0gICAgICAgICAgICAgICAgLnN1YmRldmljZSA9IDB4NjYzYiwKLSAgICAgICAgICAgICAgICAuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDAsCi0gICAgICAgIH0sewotICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgPSAweDEwN2QsCi0gICAgICAgICAgICAgICAgLnN1YmRldmljZSA9IDB4NjYzQywKLSAgICAgICAgICAgICAgICAuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDAsCi0gICAgICAgIH0seworCQkuc3ViZGV2aWNlID0gMHg2NjEzLAkvKiBOVFNDICovCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJULAorCX0seworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2NjIwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUX0RWMjAwMCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NjYzYiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwLAorCX0seworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2NjNDLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDAsCisJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCiAJCS5zdWJkZXZpY2UgPSAweDAwMGIsCi0JCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0FWRVJUVl8zMDMsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0FWRVJUVl9TVFVESU9fMzAzLAogCX0sewogCQkuc3VidmVuZG9yID0gMHgxNDYyLAogCQkuc3ViZGV2aWNlID0gMHg4NjA2LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9NU0lfVFZBTllXSEVSRV9NQVNURVIsCiAJfSx7Ci0gCQkuc3VidmVuZG9yID0gMHgxMGZjLAotIAkJLnN1YmRldmljZSA9IDB4ZDAwMywKLSAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0lPREFUQV9HVlZDUDNQQ0ksCisJCS5zdWJ2ZW5kb3IgPSAweDEwZmMsCisJCS5zdWJkZXZpY2UgPSAweGQwMDMsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0lPREFUQV9HVlZDUDNQQ0ksCiAJfSx7Ci0gCQkuc3VidmVuZG9yID0gMHgxMDQzLAotIAkJLnN1YmRldmljZSA9IDB4NDgyMywgIC8qIHdpdGggbXBlZyBlbmNvZGVyICovCi0gCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BU1VTX1BWUl80MTYsCisJCS5zdWJ2ZW5kb3IgPSAweDEwNDMsCisJCS5zdWJkZXZpY2UgPSAweDQ4MjMsICAvKiB3aXRoIG1wZWcgZW5jb2RlciAqLworCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BU1VTX1BWUl80MTYsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCiAJCS5zdWJkZXZpY2UgPSAweDA4YTYsCkBAIC04NTIsNDMgKzk3MSw0MyBAQAogCQkuc3ViZGV2aWNlID0gMHhkODIwLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRF9ULAogCX0sewotCQkuc3VidmVuZG9yID0gMHgxOEFDLAotCQkuc3ViZGV2aWNlID0gMHhEQjAwLAorCQkuc3VidmVuZG9yID0gMHgxOGFjLAorCQkuc3ViZGV2aWNlID0gMHhkYjAwLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMSwKLSAJfSx7CisJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDkwMDIsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9EVkJfVDEsCi0gCX0seworCX0sewogCQkuc3VidmVuZG9yID0gMHgxNGYxLAogCQkuc3ViZGV2aWNlID0gMHgwMTg3LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDEsCi0gCX0seworCX0sewogCQkuc3VidmVuZG9yID0gMHgxNTQwLAogCQkuc3ViZGV2aWNlID0gMHgyNTgwLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9QUk9WSURFT19QVjI1OSwKIAl9LHsKLQkJLnN1YnZlbmRvciA9IDB4MThBQywKLQkJLnN1YmRldmljZSA9IDB4REIxMCwKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGIxMCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QTFVTLAogCX0sewotICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgPSAweDE1NTQsCi0gICAgICAgICAgICAgICAgLnN1YmRldmljZSA9IDB4NDgxMSwKLSAgICAgICAgICAgICAgICAuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9QSVhFTFZJRVcsCisJCS5zdWJ2ZW5kb3IgPSAweDE1NTQsCisJCS5zdWJkZXZpY2UgPSAweDQ4MTEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1BJWEVMVklFVywKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4NzA2MywKIAkJLnN1YmRldmljZSA9IDB4MzAwMCwgLyogSEQtMzAwMCBjYXJkICovCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1BDSERUVl9IRDMwMDAsCiAJfSx7Ci0JCS5zdWJ2ZW5kb3IgPSAweDE3REUsCi0JCS5zdWJkZXZpY2UgPSAweEE4QTYsCisJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCisJCS5zdWJkZXZpY2UgPSAweGE4YTYsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVCwKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4MjgwMSwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX1JPU0xZTiwKIAl9LHsKLQkJLnN1YnZlbmRvciA9IDB4MTRGMSwKKwkJLnN1YnZlbmRvciA9IDB4MTRmMSwKIAkJLnN1YmRldmljZSA9IDB4MDM0MiwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRElHSVRBTExPR0lDX01FQywKIAl9LHsKQEAgLTg5OSwxNCArMTAxOCwzMCBAQAogCQkuc3VidmVuZG9yID0gMHgxNDIxLAogCQkuc3ViZGV2aWNlID0gMHgwMzM0LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSSwKLSAJfSx7CisJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE1M2IsCiAJCS5zdWJkZXZpY2UgPSAweDExNjYsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMTQwMF9EVkJfVDEsCi0gCX0seworCX0sewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkNTAwLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfR09MRCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTQ2MSwKKwkJLnN1YmRldmljZSA9IDB4ODAxMSwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQVZFUk1FRElBX1VMVFJBVFZfTUNfNTUwLAorCX0seworCQkuc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9BVEksCisJCS5zdWJkZXZpY2UgPSAweGExMDEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0FUSV9IRFRWV09OREVSLAorCX0seworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2NjVmLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjEwMDAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCisJCS5zdWJkZXZpY2UgPSAweDAwMGEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0FWRVJUVl8zMDMsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9pZGNvdW50ID0gQVJSQVlfU0laRShjeDg4X3N1Ymlkcyk7CkBAIC0xMTA4LDYgKzEyNDMsMTkgQEAKIAkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDA3KTsKIAkJY3hfc2V0KE1PX0dQMl9JTywgMHgwMDAwMDEwMSk7CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9BVElfSERUVldPTkRFUjoKKwkJaWYgKDAgPT0gY29yZS0+aTJjX3JjKSB7CisJCQkvKiBlbmFibGUgdHVuZXIgKi8KKwkJCWludCBpOworCQkJdTggYnVmZmVyIFtdID0geyAweDEwLDB4MTIsMHgxMywweDA0LDB4MTYsMHgwMCwweDE0LDB4MDQsMHgwMTcsMHgwMCB9OworCQkJY29yZS0+aTJjX2NsaWVudC5hZGRyID0gMHgwYTsKKworCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCQlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoJmNvcmUtPmkyY19jbGllbnQsJmJ1ZmZlcltpKjJdLDIpKQorCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSB0dW5lciglaSkuXG4iLAorCQkJCQkJY29yZS0+bmFtZSwgaSk7CisJCX0KKwkJYnJlYWs7CiAJfQogCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ucmFkaW8udHlwZSA9PSBDWDg4X1JBRElPKQogCQljb3JlLT5oYXNfcmFkaW8gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IGRjNWM1YzEuLmViODA2YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKICNpbmNsdWRlICJjeDg4LmgiCiAKQEAgLTE1MywyNiArMTUzLDI2IEBACiAJCX0KIAkJaWYgKGJwbCA8PSBzZ19kbWFfbGVuKHNnKS1vZmZzZXQpIHsKIAkJCS8qIGZpdHMgaW50byBjdXJyZW50IGNodW5rICovCi0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8UklTQ19FT0x8YnBsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPWJwbDsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHxSSVNDX0VPTHxicGwpOworCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCW9mZnNldCs9YnBsOwogCQl9IGVsc2UgewogCQkJLyogc2NhbmxpbmUgbmVlZHMgdG8gYmUgc3BsaXR0ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8gPSBicGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8CisJCQl0b2RvID0gYnBsOworCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAogCQkJCQkgICAgKHNnX2RtYV9sZW4oc2cpLW9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8gLT0gKHNnX2RtYV9sZW4oc2cpLW9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgc2crKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2RvID4gc2dfZG1hX2xlbihzZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfAorCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCXRvZG8gLT0gKHNnX2RtYV9sZW4oc2cpLW9mZnNldCk7CisJCQlvZmZzZXQgPSAwOworCQkJc2crKzsKKwkJCXdoaWxlICh0b2RvID4gc2dfZG1hX2xlbihzZykpIHsKKwkJCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8CiAJCQkJCQkgICAgc2dfZG1hX2xlbihzZykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwogCQkJCXRvZG8gLT0gc2dfZG1hX2xlbihzZyk7CiAJCQkJc2crKzsKIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX0VPTHx0b2RvKTsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX0VPTHx0b2RvKTsKIAkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCW9mZnNldCArPSB0b2RvOwogCQl9CkBAIC0zMDksNyArMzA5LDcgQEAKIAkJLm5hbWUgICAgICAgPSAidmlkZW8geSAvIHBhY2tlZCIsCiAJCS5jbWRzX3N0YXJ0ID0gMHgxODAwNDAsCiAJCS5jdHJsX3N0YXJ0ID0gMHgxODA0MDAsCi0JICAgICAgICAuY2R0ICAgICAgICA9IDB4MTgwNDAwICsgNjQsCisJCS5jZHQgICAgICAgID0gMHgxODA0MDAgKyA2NCwKIAkJLmZpZm9fc3RhcnQgPSAweDE4MGMwMCwKIAkJLmZpZm9fc2l6ZSAgPSAweDAwMjgwMCwKIAkJLnB0cjFfcmVnICAgPSBNT19ETUEyMV9QVFIxLApAQCAtMzIxLDcgKzMyMSw3IEBACiAJCS5uYW1lICAgICAgID0gInZpZGVvIHUiLAogCQkuY21kc19zdGFydCA9IDB4MTgwMDgwLAogCQkuY3RybF9zdGFydCA9IDB4MTgwNGEwLAotCSAgICAgICAgLmNkdCAgICAgICAgPSAweDE4MDRhMCArIDY0LAorCQkuY2R0ICAgICAgICA9IDB4MTgwNGEwICsgNjQsCiAJCS5maWZvX3N0YXJ0ID0gMHgxODM0MDAsCiAJCS5maWZvX3NpemUgID0gMHgwMDA4MDAsCiAJCS5wdHIxX3JlZyAgID0gTU9fRE1BMjJfUFRSMSwKQEAgLTMzMyw3ICszMzMsNyBAQAogCQkubmFtZSAgICAgICA9ICJ2aWRlbyB2IiwKIAkJLmNtZHNfc3RhcnQgPSAweDE4MDBjMCwKIAkJLmN0cmxfc3RhcnQgPSAweDE4MDU0MCwKLQkgICAgICAgIC5jZHQgICAgICAgID0gMHgxODA1NDAgKyA2NCwKKwkJLmNkdCAgICAgICAgPSAweDE4MDU0MCArIDY0LAogCQkuZmlmb19zdGFydCA9IDB4MTgzYzAwLAogCQkuZmlmb19zaXplICA9IDB4MDAwODAwLAogCQkucHRyMV9yZWcgICA9IE1PX0RNQTIzX1BUUjEsCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJLm5hbWUgICAgICAgPSAidmJpIiwKIAkJLmNtZHNfc3RhcnQgPSAweDE4MDEwMCwKIAkJLmN0cmxfc3RhcnQgPSAweDE4MDVlMCwKLQkgICAgICAgIC5jZHQgICAgICAgID0gMHgxODA1ZTAgKyA2NCwKKwkJLmNkdCAgICAgICAgPSAweDE4MDVlMCArIDY0LAogCQkuZmlmb19zdGFydCA9IDB4MTg0NDAwLAogCQkuZmlmb19zaXplICA9IDB4MDAxMDAwLAogCQkucHRyMV9yZWcgICA9IE1PX0RNQTI0X1BUUjEsCkBAIC0zNTcsNyArMzU3LDcgQEAKIAkJLm5hbWUgICAgICAgPSAiYXVkaW8gZnJvbSIsCiAJCS5jbWRzX3N0YXJ0ID0gMHgxODAxNDAsCiAJCS5jdHJsX3N0YXJ0ID0gMHgxODA2ODAsCi0JICAgICAgICAuY2R0ICAgICAgICA9IDB4MTgwNjgwICsgNjQsCisJCS5jZHQgICAgICAgID0gMHgxODA2ODAgKyA2NCwKIAkJLmZpZm9fc3RhcnQgPSAweDE4NTQwMCwKIAkJLmZpZm9fc2l6ZSAgPSAweDAwMDIwMCwKIAkJLnB0cjFfcmVnICAgPSBNT19ETUEyNV9QVFIxLApAQCAtMzY5LDcgKzM2OSw3IEBACiAJCS5uYW1lICAgICAgID0gImF1ZGlvIHRvIiwKIAkJLmNtZHNfc3RhcnQgPSAweDE4MDE4MCwKIAkJLmN0cmxfc3RhcnQgPSAweDE4MDcyMCwKLQkgICAgICAgIC5jZHQgICAgICAgID0gMHgxODA2ODAgKyA2NCwgIC8qIHNhbWUgYXMgYXVkaW8gSU4gKi8KKwkJLmNkdCAgICAgICAgPSAweDE4MDY4MCArIDY0LCAgLyogc2FtZSBhcyBhdWRpbyBJTiAqLwogCQkuZmlmb19zdGFydCA9IDB4MTg1NDAwLCAgICAgICAvKiBzYW1lIGFzIGF1ZGlvIElOICovCiAJCS5maWZvX3NpemUgID0gMHgwMDAyMDAsICAgICAgIC8qIHNhbWUgYXMgYXVkaW8gSU4gKi8KIAkJLnB0cjFfcmVnICAgPSBNT19ETUEyNl9QVFIxLApAQCAtNDMxLDcgKzQzMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlYnVnIGhlbHBlciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1pbnQgY3g4OF9yaXNjX2RlY29kZSh1MzIgcmlzYykKK3N0YXRpYyBpbnQgY3g4OF9yaXNjX2RlY29kZSh1MzIgcmlzYykKIHsKIAlzdGF0aWMgY2hhciAqaW5zdHJbMTZdID0gewogCQlbIFJJU0NfU1lOQyAgICA+PiAyOCBdID0gInN5bmMiLApAQCAtODQ1LDE5ICs4NDUsMTkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoVjRMMl9TVERfUEFMX0JHICYgbm9ybS0+aWQpIHsKLQkJY29yZS0+dHZhdWRpbyA9IG5pY2FtID8gV1dfTklDQU1fQkdES0wgOiBXV19BMl9CRzsKKwkJY29yZS0+dHZhdWRpbyA9IFdXX0JHOwogCiAJfSBlbHNlIGlmIChWNEwyX1NURF9QQUxfREsgJiBub3JtLT5pZCkgewotCQljb3JlLT50dmF1ZGlvID0gbmljYW0gPyBXV19OSUNBTV9CR0RLTCA6IFdXX0EyX0RLOworCQljb3JlLT50dmF1ZGlvID0gV1dfREs7CiAKIAl9IGVsc2UgaWYgKFY0TDJfU1REX1BBTF9JICYgbm9ybS0+aWQpIHsKLQkJY29yZS0+dHZhdWRpbyA9IFdXX05JQ0FNX0k7CisJCWNvcmUtPnR2YXVkaW8gPSBXV19JOwogCiAJfSBlbHNlIGlmIChWNEwyX1NURF9TRUNBTV9MICYgbm9ybS0+aWQpIHsKLQkJY29yZS0+dHZhdWRpbyA9IFdXX1NZU1RFTV9MX0FNOworCQljb3JlLT50dmF1ZGlvID0gV1dfTDsKIAogCX0gZWxzZSBpZiAoVjRMMl9TVERfU0VDQU1fREsgJiBub3JtLT5pZCkgewotCQljb3JlLT50dmF1ZGlvID0gV1dfQTJfREs7CisJCWNvcmUtPnR2YXVkaW8gPSBXV19ESzsKIAogCX0gZWxzZSBpZiAoKFY0TDJfU1REX05UU0NfTSAmIG5vcm0tPmlkKSB8fAogCQkgICAoVjRMMl9TVERfUEFMX00gICYgbm9ybS0+aWQpKSB7CkBAIC0xMTM3LDcgKzExMzcsNyBAQAogCWlmICghY29yZS0+cmFkaW9fYWRkcikKIAkJY29yZS0+cmFkaW9fYWRkciA9IGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5yYWRpb19hZGRyOwogCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIlRWIHR1bmVyICVkIGF0IDB4JTAyeCwgUmFkaW8gdHVuZXIgJWQgYXQgMHglMDJ4XG4iLAorCXByaW50ayhLRVJOX0lORk8gIlRWIHR1bmVyICVkIGF0IDB4JTAyeCwgUmFkaW8gdHVuZXIgJWQgYXQgMHglMDJ4XG4iLAogCQljb3JlLT50dW5lcl90eXBlLCBjb3JlLT50dW5lcl9hZGRyPDwxLAogCQljb3JlLT5yYWRpb190eXBlLCBjb3JlLT5yYWRpb19hZGRyPDwxKTsKIApAQCAtMTE0Niw2ICsxMTQ2LDcgQEAKIAkvKiBpbml0IGhhcmR3YXJlICovCiAJY3g4OF9yZXNldChjb3JlKTsKIAljeDg4X2kyY19pbml0KGNvcmUscGNpKTsKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAljeDg4X2NhcmRfc2V0dXAoY29yZSk7CiAJY3g4OF9pcl9pbml0KGNvcmUscGNpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCA0MzM0NzQ0Li45Y2NlOTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKLQogI2luY2x1ZGUgImN4ODguaCIKICNpbmNsdWRlICJkdmItcGxsLmgiCiAKQEAgLTQ2LDYgKzQ1LDkgQEAKICNpZmRlZiBIQVZFX0xHRFQzMzBYCiAjIGluY2x1ZGUgImxnZHQzMzB4LmgiCiAjZW5kaWYKKyNpZmRlZiBIQVZFX05YVDIwMFgKKyMgaW5jbHVkZSAibnh0MjAweC5oIgorI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBjeDIzODh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4iKTsKQEAgLTc4LDcgKzgwLDcgQEAKIAkJCSAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcS0+cHJpdl9kYXRhOwotCXJldHVybiBjeDg4MDJfYnVmX3ByZXBhcmUoZGV2LCAoc3RydWN0IGN4ODhfYnVmZmVyKil2Yik7CisJcmV0dXJuIGN4ODgwMl9idWZfcHJlcGFyZShkZXYsIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiLGZpZWxkKTsKIH0KIAogc3RhdGljIHZvaWQgZHZiX2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQpAQCAtMTI5LDcgKzEzMSw3IEBACiAJc3RhdGljIHU4IHJlc2V0IFtdICAgICAgICAgPSB7IDB4NTAsIDB4ODAgfTsKIAlzdGF0aWMgdTggYWRjX2N0bF8xX2NmZyBbXSA9IHsgMHg4RSwgMHg0MCB9OwogCXN0YXRpYyB1OCBhZ2NfY2ZnIFtdICAgICAgID0geyAweDY3LCAweDEwLCAweDIzLCAweDAwLCAweEZGLCAweEZGLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweEZGLCAweDAwLCAweDQwLCAweDQwIH07CisJCQkJICAgICAgIDB4MDAsIDB4RkYsIDB4MDAsIDB4NDAsIDB4NDAgfTsKIAlzdGF0aWMgdTggZG50dl9leHRyYVtdICAgICA9IHsgMHhCNSwgMHg3QSB9OwogCXN0YXRpYyB1OCBjYXB0X3JhbmdlX2NmZ1tdID0geyAweDc1LCAweDMyIH07CiAKQEAgLTI4NSw2ICsyODcsMzMgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfTlhUMjAwWAorc3RhdGljIGludCBueHQyMDB4X3NldF90c19wYXJhbShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCQlpbnQgaXNfcHVuY3R1cmVkKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7CisJZGV2LT50c19nZW5fY250cmwgPSBpc19wdW5jdHVyZWQgPyAweDA0IDogMHgwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3NldF9wbGxfaW5wdXQodTgqIGJ1ZiwgaW50IGlucHV0KQoreworCWlmIChpbnB1dCkKKwkJYnVmWzNdIHw9IDB4MDg7CisJZWxzZQorCQlidWZbM10gJj0gfjB4MDg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbnh0MjAweF9jb25maWcgYXRpX2hkdHZ3b25kZXIgPSB7CisJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBhLAorCS5wbGxfYWRkcmVzcyAgICAgID0gMHg2MSwKKwkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX3R1djEyMzZkLAorCS5zZXRfcGxsX2lucHV0ICAgID0gbnh0MjAweF9zZXRfcGxsX2lucHV0LAorCS5zZXRfdHNfcGFyYW1zICAgID0gbnh0MjAweF9zZXRfdHNfcGFyYW0sCit9OworI2VuZGlmCisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCkBAIC0zMDAsNiArMzI5LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMTQwMF9EVkJfVDE6CiAJY2FzZSBDWDg4X0JPQVJEX0NPTkVYQU5UX0RWQl9UMToKKwljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxMDAwOgogCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGN4MjI3MDJfYXR0YWNoKCZjb25uZXhhbnRfcmVmYm9hcmRfY29uZmlnLAogCQkJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlicmVhazsKQEAgLTM4NSw2ICs0MTUsMTIgQEAKIAkJfQogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIEhBVkVfTlhUMjAwWAorCWNhc2UgQ1g4OF9CT0FSRF9BVElfSERUVldPTkRFUjoKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgmYXRpX2hkdHZ3b25kZXIsCisJCQkJCQkgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50aygiJXM6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSk7CkBAIC00MDMsNiArNDM5LDkgQEAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwogCWN4ODhfY2FsbF9pMmNfY2xpZW50cyAoZGV2LT5jb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKKwkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLworCWN4ODhfY2FsbF9pMmNfY2xpZW50cyAoZGV2LT5jb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCiAJcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3RlcigmZGV2LT5kdmIsIFRISVNfTU9EVUxFLCBkZXYpOwogfQpAQCAtNDYxLDcgKzUwMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkdmJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotICAgICAgICBzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKIAkvKiBkdmIgKi8KIAl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmZGV2LT5kdmIpOwpAQCAtNDc2LDggKzUxNSw4IEBACiAJewogCQkudmVuZG9yICAgICAgID0gMHgxNGYxLAogCQkuZGV2aWNlICAgICAgID0gMHg4ODAyLAotICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCiAJfSx7CiAJCS8qIC0tLSBlbmQgb2YgbGlzdCAtLS0gKi8KIAl9CkBAIC00ODUsMTAgKzUyNCwxMCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN4ODgwMl9wY2lfdGJsKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGR2Yl9wY2lfZHJpdmVyID0gewotICAgICAgICAubmFtZSAgICAgPSAiY3g4OC1kdmIiLAotICAgICAgICAuaWRfdGFibGUgPSBjeDg4MDJfcGNpX3RibCwKLSAgICAgICAgLnByb2JlICAgID0gZHZiX3Byb2JlLAotICAgICAgICAucmVtb3ZlICAgPSBfX2RldmV4aXRfcChkdmJfcmVtb3ZlKSwKKwkubmFtZSAgICAgPSAiY3g4OC1kdmIiLAorCS5pZF90YWJsZSA9IGN4ODgwMl9wY2lfdGJsLAorCS5wcm9iZSAgICA9IGR2Yl9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChkdmJfcmVtb3ZlKSwKIAkuc3VzcGVuZCAgPSBjeDg4MDJfc3VzcGVuZF9jb21tb24sCiAJLnJlc3VtZSAgID0gY3g4ODAyX3Jlc3VtZV9jb21tb24sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwppbmRleCA3NjFjZWJkLi45NzkwZDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwpAQCAtMyw3ICszLDcgQEAKICAgICBjeDg4LWkyYy5jICAtLSAgYWxsIHRoZSBpMmMgY29kZSBpcyBoZXJlCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKKwkJCSAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKICAgICAoYykgMjAwMiBZdXJpaiBTeXNvZXYgPHl1cmlqQG5hdHVyZXNvZnQubmV0PgogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCkBAIC05MCw3ICs5MCw3IEBACiAKIHN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotICAgICAgICBzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKIAogCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLApAQCAtOTgsNyArOTgsNyBAQAogCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCiAJCXJldHVybiAwOwogCi0gICAgICAgIGlmIChjb3JlLT5yYWRpb190eXBlICE9IFVOU0VUKSB7CisJaWYgKGNvcmUtPnJhZGlvX3R5cGUgIT0gVU5TRVQpIHsKIAkJaWYgKChjb3JlLT5yYWRpb19hZGRyPT1BRERSX1VOU0VUKXx8KGNvcmUtPnJhZGlvX2FkZHI9PWNsaWVudC0+YWRkcikpIHsKIAkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX1JBRElPOwogCQkJdHVuX3NldHVwLnR5cGUgPSBjb3JlLT5yYWRpb190eXBlOwpAQCAtMTA2LDggKzEwNiw4IEBACiAKIAkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kIChjbGllbnQsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwogCQl9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvcmUtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKKwl9CisJaWYgKGNvcmUtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKIAkJaWYgKChjb3JlLT50dW5lcl9hZGRyPT1BRERSX1VOU0VUKXx8KGNvcmUtPnR1bmVyX2FkZHI9PWNsaWVudC0+YWRkcikpIHsKIAogCQkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOwpAQCAtMTE2LDcgKzExNiw3IEBACiAKIAkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kIChjbGllbnQsVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CiAJCX0KLSAgICAgICAgfQorCX0KIAogCWlmIChjb3JlLT50ZGE5ODg3X2NvbmYpCiAJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgVERBOTg4N19TRVRfQ09ORklHLCAmY29yZS0+dGRhOTg4N19jb25mKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGN4ODgwMF9pMmNfY2xpZW50X3RlbXBsYXRlID0gewotICAgICAgICAubmFtZQk9ICJjeDg4eHggaW50ZXJuYWwiLAorCS5uYW1lCT0gImN4ODh4eCBpbnRlcm5hbCIsCiB9OwogCiBzdGF0aWMgY2hhciAqaTJjX2RldnNbMTI4XSA9IHsKQEAgLTIwMiwxMCArMjAyLDEwIEBACiAKIAljb3JlLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBjaS0+ZGV2OwogCXN0cmxjcHkoY29yZS0+aTJjX2FkYXAubmFtZSxjb3JlLT5uYW1lLHNpemVvZihjb3JlLT5pMmNfYWRhcC5uYW1lKSk7Ci0gICAgICAgIGNvcmUtPmkyY19hbGdvLmRhdGEgPSBjb3JlOwotICAgICAgICBpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCxjb3JlKTsKLSAgICAgICAgY29yZS0+aTJjX2FkYXAuYWxnb19kYXRhID0gJmNvcmUtPmkyY19hbGdvOwotICAgICAgICBjb3JlLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmY29yZS0+aTJjX2FkYXA7CisJY29yZS0+aTJjX2FsZ28uZGF0YSA9IGNvcmU7CisJaTJjX3NldF9hZGFwZGF0YSgmY29yZS0+aTJjX2FkYXAsY29yZSk7CisJY29yZS0+aTJjX2FkYXAuYWxnb19kYXRhID0gJmNvcmUtPmkyY19hbGdvOworCWNvcmUtPmkyY19jbGllbnQuYWRhcHRlciA9ICZjb3JlLT5pMmNfYWRhcDsKIAogCWN4ODgwMF9iaXRfc2V0c2NsKGNvcmUsMSk7CiAJY3g4ODAwX2JpdF9zZXRzZGEoY29yZSwxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IGMyN2ZlNGMzLi4zOGIxMmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCiAJCWlmICgoaXJjb2RlICYgMHhmZmZmKSAhPSAweGViMDQpIHsgLyogd3JvbmcgYWRkcmVzcyAqLwogCQkJaXJfZHByaW50aygicHVsc2UgZGlzdGFuY2UgZGVjb2RlZCB3cm9uZyBhZGRyZXNzXG4iKTsKLSAJCQlicmVhazsKKwkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKCgofmlyY29kZSA+PiAyNCkgJiAweGZmKSAhPSAoKGlyY29kZSA+PiAxNikgJiAweGZmKSkgeyAvKiB3cm9uZyBjaGVja3N1bSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCmluZGV4IGVlMjMwMGUuLjM1ZTZkMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKQEAgLTU0LDcgKzU0LDcgQEAKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwogCi0JZHByaW50aygwLCAiY3g4ODAyX3N0YXJ0X2RtYSAlZFxuIiwgYnVmLT52Yi53aWR0aCk7CisJZHByaW50aygwLCAiY3g4ODAyX3N0YXJ0X2RtYSB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLCBkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgYnVmLT52Yi5maWVsZCk7CiAKIAkvKiBzZXR1cCBmaWZvICsgZm9ybWF0ICovCiAJY3g4OF9zcmFtX2NoYW5uZWxfc2V0dXAoY29yZSwgJmN4ODhfc3JhbV9jaGFubmVsc1tTUkFNX0NIMjhdLApAQCAtMTU4LDcgKzE1OCw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1pbnQgY3g4ODAyX2J1Zl9wcmVwYXJlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKQoraW50IGN4ODgwMl9idWZfcHJlcGFyZShzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LCBzdHJ1Y3QgY3g4OF9idWZmZXIgKmJ1ZiwKKwkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKIAlpbnQgc2l6ZSA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsKIAlpbnQgcmM7CkBAIC0xNzEsNyArMTcyLDcgQEAKIAkJYnVmLT52Yi53aWR0aCAgPSBkZXYtPnRzX3BhY2tldF9zaXplOwogCQlidWYtPnZiLmhlaWdodCA9IGRldi0+dHNfcGFja2V0X2NvdW50OwogCQlidWYtPnZiLnNpemUgICA9IHNpemU7Ci0JCWJ1Zi0+dmIuZmllbGQgID0gVjRMMl9GSUVMRF9UT1A7CisJCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQgLypWNEwyX0ZJRUxEX1RPUCovOwogCiAJCWlmICgwICE9IChyYyA9IHZpZGVvYnVmX2lvbG9jayhkZXYtPnBjaSwmYnVmLT52YixOVUxMKSkpCiAJCQlnb3RvIGZhaWw7CkBAIC0zMTUsMTQgKzMxNiwxNCBAQAogCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CiAJfQogCi0gICAgICAgIC8qIG90aGVyIGdlbmVyYWwgZXJyb3JzICovCi0gICAgICAgIGlmIChzdGF0dXMgJiAweDFmMDEwMCkgeworCS8qIG90aGVyIGdlbmVyYWwgZXJyb3JzICovCisJaWYgKHN0YXR1cyAmIDB4MWYwMTAwKSB7CiAJCWRwcmludGsoIDAsICJnZW5lcmFsIGVycm9yczogMHglMDh4XG4iLCBzdGF0dXMgJiAweDFmMDEwMCApOwotICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CiAJCWN4ODgwMl9zdG9wX2RtYShkZXYpOwotICAgICAgICAgICAgICAgIGN4ODgwMl9yZXN0YXJ0X3F1ZXVlKGRldiwmZGV2LT5tcGVncSk7Ci0gICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOwotICAgICAgICB9CisJCWN4ODgwMl9yZXN0YXJ0X3F1ZXVlKGRldiwmZGV2LT5tcGVncSk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKwl9CiB9CiAKICNkZWZpbmUgTUFYX0lSUV9MT09QIDEwCkBAIC0zNzgsOCArMzc5LDggQEAKIAl9CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBjaSwgUENJX0NMQVNTX1JFVklTSU9OLCAmZGV2LT5wY2lfcmV2KTsKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wY2ksIFBDSV9MQVRFTkNZX1RJTUVSLCAgJmRldi0+cGNpX2xhdCk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzLzI6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wY2ksIFBDSV9MQVRFTkNZX1RJTUVSLCAgJmRldi0+cGNpX2xhdCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsICIKIAkgICAgICAgImxhdGVuY3k6ICVkLCBtbWlvOiAweCVseFxuIiwgZGV2LT5jb3JlLT5uYW1lLAogCSAgICAgICBwY2lfbmFtZShkZXYtPnBjaSksIGRldi0+cGNpX3JldiwgZGV2LT5wY2ktPmlycSwKIAkgICAgICAgZGV2LT5wY2lfbGF0LHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSk7CkBAIC00MjksNyArNDMwLDcgQEAKIAogaW50IGN4ODgwMl9zdXNwZW5kX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotICAgICAgICBzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKIAogCS8qIHN0b3AgbXBlZyBkbWEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtcmVnLmgKaW5kZXggMGEzYTYyZi4uZDNiZjViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtcmVnLmgKQEAgLTMsOSArMyw5IEBACiAgICAgY3g4OHgtaHcuaCAtIENYMjM4OHggcmVnaXN0ZXIgb2Zmc2V0cwogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKLSAgICAgICAgICAgICAgICAgIDIwMDEgTWljaGFlbCBFc2tpbgotICAgICAgICAgICAgICAgICAgMjAwMiBZdXJpaiBTeXNvZXYgPHl1cmlqQG5hdHVyZXNvZnQubmV0PgotICAgICAgICAgICAgICAgICAgMjAwMyBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CisJCSAgMjAwMSBNaWNoYWVsIEVza2luCisJCSAgMjAwMiBZdXJpaiBTeXNvZXYgPHl1cmlqQG5hdHVyZXNvZnQubmV0PgorCQkgIDIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzI4LDEzICs3MjgsMTMgQEAKICNkZWZpbmUgQ29sb3JGb3JtYXRHYW1tYSAgICAgICAgIDB4MTAwMAogCiAjZGVmaW5lIEludGVybGFjZWQJCSAweDEKLSNkZWZpbmUgTm9uSW50ZXJsYWNlZAkgCSAweDAKKyNkZWZpbmUgTm9uSW50ZXJsYWNlZAkJIDB4MAogCiAjZGVmaW5lIEZpZWxkRXZlbgkJIDB4MQogI2RlZmluZSBGaWVsZE9kZAkJIDB4MAogCi0jZGVmaW5lIFRHUmVhZFdyaXRlTW9kZQkgCSAweDAKLSNkZWZpbmUgVEdFbmFibGVNb2RlCSAJIDB4MQorI2RlZmluZSBUR1JlYWRXcml0ZU1vZGUJCSAweDAKKyNkZWZpbmUgVEdFbmFibGVNb2RlCQkgMHgxCiAKICNkZWZpbmUgRFZfQ2JBbGlnbgkJIDB4MAogI2RlZmluZSBEVl9ZMEFsaWduCQkgMHgxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggMjc2NWFjZS4uNmQ5YmVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtNTcsMzkgKzU3LDM4IEBACiAjaW5jbHVkZSAiY3g4OC5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvX2RlYnVnID0gMDsKLW1vZHVsZV9wYXJhbShhdWRpb19kZWJ1ZyxpbnQsMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1ZGlvX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2F1ZGlvXSIpOworbW9kdWxlX3BhcmFtKGF1ZGlvX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhdWRpb19kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbYXVkaW9dIik7CiAKICNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKGF1ZGlvX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBjb3JlLT5uYW1lICwgIyMgYXJnKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgY2hhciAqYXVkX2N0bF9uYW1lc1s2NF0gPQotewotCVsgRU5fQlRTQ19GT1JDRV9NT05PICAgICAgIF0gPSAiQlRTQ19GT1JDRV9NT05PIiwKLQlbIEVOX0JUU0NfRk9SQ0VfU1RFUkVPICAgICBdID0gIkJUU0NfRk9SQ0VfU1RFUkVPIiwKLQlbIEVOX0JUU0NfRk9SQ0VfU0FQICAgICAgICBdID0gIkJUU0NfRk9SQ0VfU0FQIiwKLQlbIEVOX0JUU0NfQVVUT19TVEVSRU8gICAgICBdID0gIkJUU0NfQVVUT19TVEVSRU8iLAotCVsgRU5fQlRTQ19BVVRPX1NBUCAgICAgICAgIF0gPSAiQlRTQ19BVVRPX1NBUCIsCi0JWyBFTl9BMl9GT1JDRV9NT05PMSAgICAgICAgXSA9ICJBMl9GT1JDRV9NT05PMSIsCi0JWyBFTl9BMl9GT1JDRV9NT05PMiAgICAgICAgXSA9ICJBMl9GT1JDRV9NT05PMiIsCi0JWyBFTl9BMl9GT1JDRV9TVEVSRU8gICAgICAgXSA9ICJBMl9GT1JDRV9TVEVSRU8iLAotCVsgRU5fQTJfQVVUT19NT05PMiAgICAgICAgIF0gPSAiQTJfQVVUT19NT05PMiIsCi0JWyBFTl9BMl9BVVRPX1NURVJFTyAgICAgICAgXSA9ICJBMl9BVVRPX1NURVJFTyIsCi0JWyBFTl9FSUFKX0ZPUkNFX01PTk8xICAgICAgXSA9ICJFSUFKX0ZPUkNFX01PTk8xIiwKLQlbIEVOX0VJQUpfRk9SQ0VfTU9OTzIgICAgICBdID0gIkVJQUpfRk9SQ0VfTU9OTzIiLAotCVsgRU5fRUlBSl9GT1JDRV9TVEVSRU8gICAgIF0gPSAiRUlBSl9GT1JDRV9TVEVSRU8iLAotCVsgRU5fRUlBSl9BVVRPX01PTk8yICAgICAgIF0gPSAiRUlBSl9BVVRPX01PTk8yIiwKLQlbIEVOX0VJQUpfQVVUT19TVEVSRU8gICAgICBdID0gIkVJQUpfQVVUT19TVEVSRU8iLAotCVsgRU5fTklDQU1fRk9SQ0VfTU9OTzEgICAgIF0gPSAiTklDQU1fRk9SQ0VfTU9OTzEiLAotCVsgRU5fTklDQU1fRk9SQ0VfTU9OTzIgICAgIF0gPSAiTklDQU1fRk9SQ0VfTU9OTzIiLAotCVsgRU5fTklDQU1fRk9SQ0VfU1RFUkVPICAgIF0gPSAiTklDQU1fRk9SQ0VfU1RFUkVPIiwKLQlbIEVOX05JQ0FNX0FVVE9fTU9OTzIgICAgICBdID0gIk5JQ0FNX0FVVE9fTU9OTzIiLAotCVsgRU5fTklDQU1fQVVUT19TVEVSRU8gICAgIF0gPSAiTklDQU1fQVVUT19TVEVSRU8iLAotCVsgRU5fRk1SQURJT19GT1JDRV9NT05PICAgIF0gPSAiRk1SQURJT19GT1JDRV9NT05PIiwKLQlbIEVOX0ZNUkFESU9fRk9SQ0VfU1RFUkVPICBdID0gIkZNUkFESU9fRk9SQ0VfU1RFUkVPIiwKLQlbIEVOX0ZNUkFESU9fQVVUT19TVEVSRU8gICBdID0gIkZNUkFESU9fQVVUT19TVEVSRU8iLAorc3RhdGljIGNoYXIgKmF1ZF9jdGxfbmFtZXNbNjRdID0geworCVtFTl9CVFNDX0ZPUkNFX01PTk9dID0gIkJUU0NfRk9SQ0VfTU9OTyIsCisJW0VOX0JUU0NfRk9SQ0VfU1RFUkVPXSA9ICJCVFNDX0ZPUkNFX1NURVJFTyIsCisJW0VOX0JUU0NfRk9SQ0VfU0FQXSA9ICJCVFNDX0ZPUkNFX1NBUCIsCisJW0VOX0JUU0NfQVVUT19TVEVSRU9dID0gIkJUU0NfQVVUT19TVEVSRU8iLAorCVtFTl9CVFNDX0FVVE9fU0FQXSA9ICJCVFNDX0FVVE9fU0FQIiwKKwlbRU5fQTJfRk9SQ0VfTU9OTzFdID0gIkEyX0ZPUkNFX01PTk8xIiwKKwlbRU5fQTJfRk9SQ0VfTU9OTzJdID0gIkEyX0ZPUkNFX01PTk8yIiwKKwlbRU5fQTJfRk9SQ0VfU1RFUkVPXSA9ICJBMl9GT1JDRV9TVEVSRU8iLAorCVtFTl9BMl9BVVRPX01PTk8yXSA9ICJBMl9BVVRPX01PTk8yIiwKKwlbRU5fQTJfQVVUT19TVEVSRU9dID0gIkEyX0FVVE9fU1RFUkVPIiwKKwlbRU5fRUlBSl9GT1JDRV9NT05PMV0gPSAiRUlBSl9GT1JDRV9NT05PMSIsCisJW0VOX0VJQUpfRk9SQ0VfTU9OTzJdID0gIkVJQUpfRk9SQ0VfTU9OTzIiLAorCVtFTl9FSUFKX0ZPUkNFX1NURVJFT10gPSAiRUlBSl9GT1JDRV9TVEVSRU8iLAorCVtFTl9FSUFKX0FVVE9fTU9OTzJdID0gIkVJQUpfQVVUT19NT05PMiIsCisJW0VOX0VJQUpfQVVUT19TVEVSRU9dID0gIkVJQUpfQVVUT19TVEVSRU8iLAorCVtFTl9OSUNBTV9GT1JDRV9NT05PMV0gPSAiTklDQU1fRk9SQ0VfTU9OTzEiLAorCVtFTl9OSUNBTV9GT1JDRV9NT05PMl0gPSAiTklDQU1fRk9SQ0VfTU9OTzIiLAorCVtFTl9OSUNBTV9GT1JDRV9TVEVSRU9dID0gIk5JQ0FNX0ZPUkNFX1NURVJFTyIsCisJW0VOX05JQ0FNX0FVVE9fTU9OTzJdID0gIk5JQ0FNX0FVVE9fTU9OTzIiLAorCVtFTl9OSUNBTV9BVVRPX1NURVJFT10gPSAiTklDQU1fQVVUT19TVEVSRU8iLAorCVtFTl9GTVJBRElPX0ZPUkNFX01PTk9dID0gIkZNUkFESU9fRk9SQ0VfTU9OTyIsCisJW0VOX0ZNUkFESU9fRk9SQ0VfU1RFUkVPXSA9ICJGTVJBRElPX0ZPUkNFX1NURVJFTyIsCisJW0VOX0ZNUkFESU9fQVVUT19TVEVSRU9dID0gIkZNUkFESU9fQVVUT19TVEVSRU8iLAogfTsKIAogc3RydWN0IHJsaXN0IHsKQEAgLTk3LDggKzk2LDcgQEAKIAl1MzIgdmFsOwogfTsKIAotc3RhdGljIHZvaWQgc2V0X2F1ZGlvX3JlZ2lzdGVycyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAotCQkJCWNvbnN0IHN0cnVjdCBybGlzdCAqbCkKK3N0YXRpYyB2b2lkIHNldF9hdWRpb19yZWdpc3RlcnMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgY29uc3Qgc3RydWN0IHJsaXN0ICpsKQogewogCWludCBpOwogCkBAIC0xMTksMTcgKzExNywxOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2V0X2F1ZGlvX3N0YXJ0KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsCi0JCQl1MzIgbW9kZSkKK3N0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFydChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1MzIgbW9kZSkKIHsKIAkvLyBtdXRlCi0JY3hfd3JpdGUoQVVEX1ZPTF9DVEwsICAgICAgICgxIDw8IDYpKTsKKwljeF93cml0ZShBVURfVk9MX0NUTCwgKDEgPDwgNikpOwogCiAJLy8gc3RhcnQgcHJvZ3JhbW1pbmcKLQljeF93cml0ZShBVURfQ1RMLCAgICAgICAgICAgMHgwMDAwKTsKLQljeF93cml0ZShBVURfSU5JVCwgICAgICAgICAgbW9kZSk7Ci0JY3hfd3JpdGUoQVVEX0lOSVRfTEQsICAgICAgIDB4MDAwMSk7Ci0JY3hfd3JpdGUoQVVEX1NPRlRfUkVTRVQsICAgIDB4MDAwMSk7CisJY3hfd3JpdGUoTU9fQVVEX0RNQUNOVFJMLCAweDAwMDApOworCW1zbGVlcCgxMDApOworCS8vY3hfd3JpdGUoQVVEX0NUTCwgMHgwMDAwKTsKKwljeF93cml0ZShBVURfSU5JVCwgbW9kZSk7CisJY3hfd3JpdGUoQVVEX0lOSVRfTEQsIDB4MDAwMSk7CisJY3hfd3JpdGUoQVVEX1NPRlRfUkVTRVQsIDB4MDAwMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9hdWRpb19maW5pc2goc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIGN0bCkKQEAgLTE0OCwxMiArMTQ3LDEzIEBACiAJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAwKTsKIAkJLy9jeF93cml0ZShBVURfQVBCX0lOX1JBVEVfQURKLCAwKTsKIAl9IGVsc2UgewotCWN0bCB8PSBFTl9EQUNfRU5BQkxFOwotCWN4X3dyaXRlKEFVRF9DVEwsIGN0bCk7CisJCWN0bCB8PSBFTl9EQUNfRU5BQkxFOworCQljeF93cml0ZShBVURfQ1RMLCBjdGwpOwogCX0KIAogCS8qIGZpbmlzaCBwcm9ncmFtbWluZyAqLwogCWN4X3dyaXRlKEFVRF9TT0ZUX1JFU0VULCAweDAwMDApOworCWN4X3dyaXRlKE1PX0FVRF9ETUFDTlRSTCwgMHgwMDAzKTsKIAogCS8qIHVubXV0ZSAqLwogCXZvbHVtZSA9IGN4X3NyZWFkKFNIQURPV19BVURfVk9MX0NUTCk7CkBAIC0xNjIsNDg2ICsxNjIsNDYzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9CVFNDKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBzYXAsIHUzMiBtb2RlKQorc3RhdGljIHZvaWQgc2V0X2F1ZGlvX3N0YW5kYXJkX0JUU0Moc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IHNhcCwKKwkJCQkgICAgdTMyIG1vZGUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBidHNjW10gPSB7Ci0JeyBBVURfQUZFXzEyREJfRU4sICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwKLQkJeyBBVURfT1VUMV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMgfSwKLQkJeyBBVURfT1VUMV9TSElGVCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUE9MWTBfRERTX0NPTlNUQU5ULCAgICAgIDB4MDAxMjAxMGMgfSwKLQkJeyBBVURfRE1EX1JBX0REUywgICAgICAgICAgICAgIDB4MDBjM2U3YWEgfSwKLQkJeyBBVURfREJYX0lOX0dBSU4sICAgICAgICAgICAgIDB4MDAwMDQ3MzQgfSwKLQkJeyBBVURfREJYX1dCRV9HQUlOLCAgICAgICAgICAgIDB4MDAwMDQ2NDAgfSwKLQkJeyBBVURfREJYX1NFX0dBSU4sICAgICAgICAgICAgIDB4MDAwMDhkMzEgfSwKLQkJeyBBVURfRENPQ18wX1NSQywgICAgICAgICAgICAgIDB4MDAwMDAwMWEgfSwKLQkJeyBBVURfSUlSMV80X1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMjEgfSwKLQkJeyBBVURfRENPQ19QQVNTX0lOLCAgICAgICAgICAgIDB4MDAwMDAwMDMgfSwKLQkJeyBBVURfRENPQ18wX1NISUZUX0lOMCwgICAgICAgIDB4MDAwMDAwMGEgfSwKLQkJeyBBVURfRENPQ18wX1NISUZUX0lOMSwgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfRENPQ18xX1NISUZUX0lOMCwgICAgICAgIDB4MDAwMDAwMGEgfSwKLQkJeyBBVURfRENPQ18xX1NISUZUX0lOMSwgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfRE4wX0ZSRVEsICAgICAgICAgICAgICAgIDB4MDAwMDI4M2IgfSwKLQkJeyBBVURfRE4yX1NSQ19TRUwsICAgICAgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfRE4yX0ZSRVEsICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAgfSwKLQkJeyBBVURfRE4yX0FGQywgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgfSwKLQkJeyBBVURfRE4yX1NIRlQsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSMl8yX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMjAgfSwKLQkJeyBBVURfSUlSMl8yX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSMl8zX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMWYgfSwKLQkJeyBBVURfSUlSMl8zX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfQ1JEQzFfU1JDX1NFTCwgICAgICAgICAgIDB4MDAwMDAzY2UgfSwKLQkJeyBBVURfQ1JEQzFfU0hJRlQsICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfQ09SRElDX1NISUZUXzEsICAgICAgICAgIDB4MDAwMDAwMDcgfSwKLQkJeyBBVURfRENPQ18xX1NSQywgICAgICAgICAgICAgIDB4MDAwMDAwMWIgfSwKLQkJeyBBVURfRENPQzFfU0hJRlQsICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUkRTSV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfUkRTUV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfUkRTSV9TSElGVCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUkRTUV9TSElGVCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUE9MWVBIODBTQ0FMRUZBQywgICAgICAgIDB4MDAwMDAwMDMgfSwKKwkJe0FVRF9BRkVfMTJEQl9FTiwgMHgwMDAwMDAwMX0sCisJCXtBVURfT1VUMV9TRUwsIDB4MDAwMDAwMTN9LAorCQl7QVVEX09VVDFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BPTFkwX0REU19DT05TVEFOVCwgMHgwMDEyMDEwY30sCisJCXtBVURfRE1EX1JBX0REUywgMHgwMGMzZTdhYX0sCisJCXtBVURfREJYX0lOX0dBSU4sIDB4MDAwMDQ3MzR9LAorCQl7QVVEX0RCWF9XQkVfR0FJTiwgMHgwMDAwNDY0MH0sCisJCXtBVURfREJYX1NFX0dBSU4sIDB4MDAwMDhkMzF9LAorCQl7QVVEX0RDT0NfMF9TUkMsIDB4MDAwMDAwMWF9LAorCQl7QVVEX0lJUjFfNF9TRUwsIDB4MDAwMDAwMjF9LAorCQl7QVVEX0RDT0NfUEFTU19JTiwgMHgwMDAwMDAwM30sCisJCXtBVURfRENPQ18wX1NISUZUX0lOMCwgMHgwMDAwMDAwYX0sCisJCXtBVURfRENPQ18wX1NISUZUX0lOMSwgMHgwMDAwMDAwOH0sCisJCXtBVURfRENPQ18xX1NISUZUX0lOMCwgMHgwMDAwMDAwYX0sCisJCXtBVURfRENPQ18xX1NISUZUX0lOMSwgMHgwMDAwMDAwOH0sCisJCXtBVURfRE4wX0ZSRVEsIDB4MDAwMDI4M2J9LAorCQl7QVVEX0ROMl9TUkNfU0VMLCAweDAwMDAwMDA4fSwKKwkJe0FVRF9ETjJfRlJFUSwgMHgwMDAwMzAwMH0sCisJCXtBVURfRE4yX0FGQywgMHgwMDAwMDAwMn0sCisJCXtBVURfRE4yX1NIRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjJfMl9TRUwsIDB4MDAwMDAwMjB9LAorCQl7QVVEX0lJUjJfMl9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSMl8zX1NFTCwgMHgwMDAwMDAxZn0sCisJCXtBVURfSUlSMl8zX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9DUkRDMV9TUkNfU0VMLCAweDAwMDAwM2NlfSwKKwkJe0FVRF9DUkRDMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfQ09SRElDX1NISUZUXzEsIDB4MDAwMDAwMDd9LAorCQl7QVVEX0RDT0NfMV9TUkMsIDB4MDAwMDAwMWJ9LAorCQl7QVVEX0RDT0MxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9SRFNJX1NFTCwgMHgwMDAwMDAwOH0sCisJCXtBVURfUkRTUV9TRUwsIDB4MDAwMDAwMDh9LAorCQl7QVVEX1JEU0lfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1JEU1FfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDN9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGJ0c2Nfc2FwW10gPSB7Ci0JeyBBVURfQUZFXzEyREJfRU4sICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwKLQkJeyBBVURfREJYX0lOX0dBSU4sICAgICAgICAgICAgIDB4MDAwMDcyMDAgfSwKLQkJeyBBVURfREJYX1dCRV9HQUlOLCAgICAgICAgICAgIDB4MDAwMDYyMDAgfSwKLQkJeyBBVURfREJYX1NFX0dBSU4sICAgICAgICAgICAgIDB4MDAwMDYyMDAgfSwKLQkJeyBBVURfSUlSMV8xX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSMV8zX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwKLQkJeyBBVURfRE4xX1NSQ19TRUwsICAgICAgICAgICAgIDB4MDAwMDAwMDcgfSwKLQkJeyBBVURfSUlSMV80X1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDYgfSwKLQkJeyBBVURfSUlSMl8xX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSMl8yX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSM18wX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSM18xX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfSUlSM18wX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMGQgfSwKLQkJeyBBVURfSUlSM18xX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMGUgfSwKLQkJeyBBVURfREVFTVBIMV9TUkNfU0VMLCAgICAgICAgIDB4MDAwMDAwMTQgfSwKLQkJeyBBVURfREVFTVBIMV9TSElGVCwgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfREVFTVBIMV9HMCwgICAgICAgICAgICAgIDB4MDAwMDQwMDAgfSwKLQkJeyBBVURfREVFTVBIMV9BMCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfREVFTVBIMV9CMCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfREVFTVBIMV9BMSwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfREVFTVBIMV9CMSwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfT1VUMF9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YgfSwKLQkJeyBBVURfT1VUMV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YgfSwKLQkJeyBBVURfRE4xX0FGQywgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgfSwKLQkJeyBBVURfRENPQ18wX1NISUZUX0lOMCwgICAgICAgIDB4MDAwMDAwMGEgfSwKLQkJeyBBVURfRENPQ18wX1NISUZUX0lOMSwgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfRENPQ18xX1NISUZUX0lOMCwgICAgICAgIDB4MDAwMDAwMGEgfSwKLQkJeyBBVURfRENPQ18xX1NISUZUX0lOMSwgICAgICAgIDB4MDAwMDAwMDggfSwKLQkJeyBBVURfSUlSMV8wX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMWQgfSwKLQkJeyBBVURfSUlSMV8yX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMWUgfSwKLQkJeyBBVURfSUlSMl8xX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMDIgfSwKLQkJeyBBVURfSUlSMl8yX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMDQgfSwKLQkJeyBBVURfSUlSM18yX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMGYgfSwKLQkJeyBBVURfRENPQzJfU0hJRlQsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwKLQkJeyBBVURfSUlSM18yX1NISUZULCAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwKLQkJeyBBVURfREVFTVBIMF9TUkNfU0VMLCAgICAgICAgIDB4MDAwMDAwMTQgfSwKLQkJeyBBVURfQ09SRElDX1NISUZUXzEsICAgICAgICAgIDB4MDAwMDAwMDYgfSwKLQkJeyBBVURfUE9MWTBfRERTX0NPTlNUQU5ULCAgICAgIDB4MDAwZTRkYjIgfSwKLQkJeyBBVURfRE1EX1JBX0REUywgICAgICAgICAgICAgIDB4MDBmNjk2ZTYgfSwKLQkJeyBBVURfSUlSMl8zX1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMjUgfSwKLQkJeyBBVURfSUlSMV80X1NFTCwgICAgICAgICAgICAgIDB4MDAwMDAwMjEgfSwKLQkJeyBBVURfRE4xX0ZSRVEsICAgICAgICAgICAgICAgIDB4MDAwMGM5NjUgfSwKLQkJeyBBVURfRENPQ19QQVNTX0lOLCAgICAgICAgICAgIDB4MDAwMDAwMDMgfSwKLQkJeyBBVURfRENPQ18wX1NSQywgICAgICAgICAgICAgIDB4MDAwMDAwMWEgfSwKLQkJeyBBVURfRENPQ18xX1NSQywgICAgICAgICAgICAgIDB4MDAwMDAwMWIgfSwKLQkJeyBBVURfRENPQzFfU0hJRlQsICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUkRTSV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkgfSwKLQkJeyBBVURfUkRTUV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkgfSwKLQkJeyBBVURfUkRTSV9TSElGVCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUkRTUV9TSElGVCwgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfUE9MWVBIODBTQ0FMRUZBQywgICAgICAgIDB4MDAwMDAwMDMgfSwKKwkJe0FVRF9BRkVfMTJEQl9FTiwgMHgwMDAwMDAwMX0sCisJCXtBVURfREJYX0lOX0dBSU4sIDB4MDAwMDcyMDB9LAorCQl7QVVEX0RCWF9XQkVfR0FJTiwgMHgwMDAwNjIwMH0sCisJCXtBVURfREJYX1NFX0dBSU4sIDB4MDAwMDYyMDB9LAorCQl7QVVEX0lJUjFfMV9TRUwsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjFfM19TRUwsIDB4MDAwMDAwMDF9LAorCQl7QVVEX0ROMV9TUkNfU0VMLCAweDAwMDAwMDA3fSwKKwkJe0FVRF9JSVIxXzRfU0hJRlQsIDB4MDAwMDAwMDZ9LAorCQl7QVVEX0lJUjJfMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSMl8yX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIzXzBfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjNfMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSM18wX1NFTCwgMHgwMDAwMDAwZH0sCisJCXtBVURfSUlSM18xX1NFTCwgMHgwMDAwMDAwZX0sCisJCXtBVURfREVFTVBIMV9TUkNfU0VMLCAweDAwMDAwMDE0fSwKKwkJe0FVRF9ERUVNUEgxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0cwLCAweDAwMDA0MDAwfSwKKwkJe0FVRF9ERUVNUEgxX0EwLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0IwLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0ExLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0IxLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9PVVQwX1NFTCwgMHgwMDAwMDAzZn0sCisJCXtBVURfT1VUMV9TRUwsIDB4MDAwMDAwM2Z9LAorCQl7QVVEX0ROMV9BRkMsIDB4MDAwMDAwMDJ9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0lJUjFfMF9TRUwsIDB4MDAwMDAwMWR9LAorCQl7QVVEX0lJUjFfMl9TRUwsIDB4MDAwMDAwMWV9LAorCQl7QVVEX0lJUjJfMV9TRUwsIDB4MDAwMDAwMDJ9LAorCQl7QVVEX0lJUjJfMl9TRUwsIDB4MDAwMDAwMDR9LAorCQl7QVVEX0lJUjNfMl9TRUwsIDB4MDAwMDAwMGZ9LAorCQl7QVVEX0RDT0MyX1NISUZULCAweDAwMDAwMDAxfSwKKwkJe0FVRF9JSVIzXzJfU0hJRlQsIDB4MDAwMDAwMDF9LAorCQl7QVVEX0RFRU1QSDBfU1JDX1NFTCwgMHgwMDAwMDAxNH0sCisJCXtBVURfQ09SRElDX1NISUZUXzEsIDB4MDAwMDAwMDZ9LAorCQl7QVVEX1BPTFkwX0REU19DT05TVEFOVCwgMHgwMDBlNGRiMn0sCisJCXtBVURfRE1EX1JBX0REUywgMHgwMGY2OTZlNn0sCisJCXtBVURfSUlSMl8zX1NFTCwgMHgwMDAwMDAyNX0sCisJCXtBVURfSUlSMV80X1NFTCwgMHgwMDAwMDAyMX0sCisJCXtBVURfRE4xX0ZSRVEsIDB4MDAwMGM5NjV9LAorCQl7QVVEX0RDT0NfUEFTU19JTiwgMHgwMDAwMDAwM30sCisJCXtBVURfRENPQ18wX1NSQywgMHgwMDAwMDAxYX0sCisJCXtBVURfRENPQ18xX1NSQywgMHgwMDAwMDAxYn0sCisJCXtBVURfRENPQzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1JEU0lfU0VMLCAweDAwMDAwMDA5fSwKKwkJe0FVRF9SRFNRX1NFTCwgMHgwMDAwMDAwOX0sCisJCXtBVURfUkRTSV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfUkRTUV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAwMDAwM30sCiAJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCiAJbW9kZSB8PSBFTl9GTVJBRElPX0VOX1JEUzsKIAogCWlmIChzYXApIHsKLQkJZHByaW50aygiJXMgU0FQIChzdGF0dXM6IHVua25vd24pXG4iLF9fRlVOQ1RJT05fXyk7Ci0Jc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9TQVApOworCQlkcHJpbnRrKCIlcyBTQVAgKHN0YXR1czogdW5rbm93bilcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfU0FQKTsKIAkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBidHNjX3NhcCk7CiAJCXNldF9hdWRpb19maW5pc2goY29yZSwgbW9kZSk7CiAJfSBlbHNlIHsKLQkJZHByaW50aygiJXMgKHN0YXR1czoga25vd24tZ29vZClcbiIsX19GVU5DVElPTl9fKTsKLQlzZXRfYXVkaW9fc3RhcnQoY29yZSwgU0VMX0JUU0MpOworCQlkcHJpbnRrKCIlcyAoc3RhdHVzOiBrbm93bi1nb29kKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9CVFNDKTsKIAkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBidHNjKTsKIAkJc2V0X2F1ZGlvX2ZpbmlzaChjb3JlLCBtb2RlKTsKIAl9CiB9CiAKLQotc3RhdGljIHZvaWQgc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNX0woc3RydWN0IGN4ODhfY29yZSAqY29yZSwgaW50IHN0ZXJlbykKK3N0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9OSUNBTShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1MzIgbW9kZSkKIHsKLQkvKiBUaGlzIGlzIHByb2JhYmx5IHdlaXJkLi4KLQkqIExldCdzIG9wZXJhdGUgYW5kIGZpbmQgb3V0LiAqLwotCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBuaWNhbV9sX21vbm9bXSA9IHsKLQkJeyBBVURfRVJSTE9HUEVSSU9EX1IsICAgICAweDAwMDAwMDY0IH0sCi0JCXsgQVVEX0VSUklOVFJQVFRIU0hMRDFfUiwgMHgwMDAwMEZGRiB9LAotCQl7IEFVRF9FUlJJTlRSUFRUSFNITEQyX1IsIDB4MDAwMDAwMUYgfSwKLQkJeyBBVURfRVJSSU5UUlBUVEhTSExEM19SLCAweDAwMDAwMDBGIH0sCi0KLQkJeyBBVURfUERGX0REU19DTlNUX0JZVEUyLCAweDQ4IH0sCi0JCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMSwgMHgzRCB9LAotCQl7IEFVRF9RQU1fTU9ERSwgICAgICAgICAgIDB4MDAgfSwKLQkJeyBBVURfUERGX0REU19DTlNUX0JZVEUwLCAweGY1IH0sCi0JCXsgQVVEX1BIQUNDX0ZSRVFfOE1TQiwgICAgMHgzYSB9LAotCQl7IEFVRF9QSEFDQ19GUkVRXzhMU0IsICAgIDB4NGEgfSwKLQotCQl7IEFVRF9ERUVNUEhHQUlOX1IsIDB4NjY4MCB9LAotCQl7IEFVRF9ERUVNUEhOVU1FUjFfUiwgMHgzNTNERSB9LAotCQl7IEFVRF9ERUVNUEhOVU1FUjJfUiwgMHgxQjEgfSwKLQkJeyBBVURfREVFTVBIREVOT00xX1IsIDB4MEYzRDAgfSwKLQkJeyBBVURfREVFTVBIREVOT00yX1IsIDB4MCB9LAotCQl7IEFVRF9GTV9NT0RFX0VOQUJMRSwgMHg3IH0sCi0JCXsgQVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MyB9LAotCQl7IEFVRF9BRkVfMTJEQl9FTiwgMHgxIH0sCi0JCXsgQUFHQ19HQUlOLCAweDAgfSwKLQkJeyBBQUdDX0hZU1QsIDB4MTggfSwKLQkJeyBBQUdDX0RFRiwgMHgyMCB9LAotCQl7IEFVRF9ETjBfRlJFUSwgMHgwIH0sCi0JCXsgQVVEX1BPTFkwX0REU19DT05TVEFOVCwgMHgwRTREQjIgfSwKLQkJeyBBVURfRENPQ18wX1NSQywgMHgyMSB9LAotCQl7IEFVRF9JSVIxXzBfU0VMLCAweDAgfSwKLQkJeyBBVURfSUlSMV8wX1NISUZULCAweDcgfSwKLQkJeyBBVURfSUlSMV8xX1NFTCwgMHgyIH0sCi0JCXsgQVVEX0lJUjFfMV9TSElGVCwgMHgwIH0sCi0JCXsgQVVEX0RDT0NfMV9TUkMsIDB4MyB9LAotCQl7IEFVRF9EQ09DMV9TSElGVCwgMHgwIH0sCi0JCXsgQVVEX0RDT0NfUEFTU19JTiwgMHgwIH0sCi0JCXsgQVVEX0lJUjFfMl9TRUwsIDB4MjMgfSwKLQkJeyBBVURfSUlSMV8yX1NISUZULCAweDAgfSwKLQkJeyBBVURfSUlSMV8zX1NFTCwgMHg0IH0sCi0JCXsgQVVEX0lJUjFfM19TSElGVCwgMHg3IH0sCi0JCXsgQVVEX0lJUjFfNF9TRUwsIDB4NSB9LAotCQl7IEFVRF9JSVIxXzRfU0hJRlQsIDB4NyB9LAotCQl7IEFVRF9JSVIzXzBfU0VMLCAweDcgfSwKLQkJeyBBVURfSUlSM18wX1NISUZULCAweDAgfSwKLQkJeyBBVURfREVFTVBIMF9TUkNfU0VMLCAweDExIH0sCi0JCXsgQVVEX0RFRU1QSDBfU0hJRlQsIDB4MCB9LAotCQl7IEFVRF9ERUVNUEgwX0cwLCAweDcwMDAgfSwKLQkJeyBBVURfREVFTVBIMF9BMCwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDBfQjAsIDB4MCB9LAotCQl7IEFVRF9ERUVNUEgwX0ExLCAweDAgfSwKLQkJeyBBVURfREVFTVBIMF9CMSwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDFfU1JDX1NFTCwgMHgxMSB9LAotCQl7IEFVRF9ERUVNUEgxX1NISUZULCAweDAgfSwKLQkJeyBBVURfREVFTVBIMV9HMCwgMHg3MDAwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQTAsIDB4MCB9LAotCQl7IEFVRF9ERUVNUEgxX0IwLCAweDAgfSwKLQkJeyBBVURfREVFTVBIMV9BMSwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQjEsIDB4MCB9LAotCQl7IEFVRF9PVVQwX1NFTCwgMHgzRiB9LAotCQl7IEFVRF9PVVQxX1NFTCwgMHgzRiB9LAotCQl7IEFVRF9ETURfUkFfRERTLCAweDBGNUMyODUgfSwKLQkJeyBBVURfUExMX0lOVCwgMHgxRSB9LAotCQl7IEFVRF9QTExfRERTLCAweDAgfSwKLQkJeyBBVURfUExMX0ZSQUMsIDB4MEU1NDIgfSwKLQotCQkvLyBzZXR1cCBRQU0gcmVnaXN0ZXJzCi0JCXsgQVVEX1JBVEVfQURKMSwgICAgICAweDAwMDAwMTAwIH0sCi0JCXsgQVVEX1JBVEVfQURKMiwgICAgICAweDAwMDAwMjAwIH0sCi0JCXsgQVVEX1JBVEVfQURKMywgICAgICAweDAwMDAwMzAwIH0sCi0JCXsgQVVEX1JBVEVfQURKNCwgICAgICAweDAwMDAwNDAwIH0sCi0JCXsgQVVEX1JBVEVfQURKNSwgICAgICAweDAwMDAwNTAwIH0sCi0JCXsgQVVEX1JBVEVfVEhSRVNfRE1ELCAweDAwMDAwMEMwIH0sCi0JCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKLQl9OwotCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBuaWNhbV9sW10gPSB7Ci0JCS8vIHNldHVwIFFBTSByZWdpc3RlcnMKLQkJeyBBVURfUkFURV9BREoxLCAweDAwMDAwMDYwIH0sCi0JCXsgQVVEX1JBVEVfQURKMiwgMHgwMDAwMDBGOSB9LAotCQl7IEFVRF9SQVRFX0FESjMsIDB4MDAwMDAxQ0MgfSwKLQkJeyBBVURfUkFURV9BREo0LCAweDAwMDAwMkIzIH0sCi0JCXsgQVVEX1JBVEVfQURKNSwgMHgwMDAwMDcyNiB9LAotCQl7IEFVRF9ERUVNUEhERU5PTTFfUiwgMHgwMDAwRjNEMCB9LAotCQl7IEFVRF9ERUVNUEhERU5PTTJfUiwgMHgwMDAwMDAwMCB9LAotCQl7IEFVRF9FUlJMT0dQRVJJT0RfUiwgMHgwMDAwMDA2NCB9LAotCQl7IEFVRF9FUlJJTlRSUFRUSFNITEQxX1IsIDB4MDAwMDBGRkYgfSwKLQkJeyBBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMDFGIH0sCi0JCXsgQVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgMHgwMDAwMDAwRiB9LAotCQl7IEFVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDAwMDAwMDAzIH0sCi0JCXsgQVVEX0RNRF9SQV9ERFMsIDB4MDBDMDAwMDAgfSwKLQkJeyBBVURfUExMX0lOVCwgMHgwMDAwMDAxRSB9LAotCQl7IEFVRF9QTExfRERTLCAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1BMTF9GUkFDLCAweDAwMDBFNTQyIH0sCi0JCXsgQVVEX1NUQVJUX1RJTUVSLCAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0RFRU1QSE5VTUVSMV9SLCAweDAwMDM1M0RFIH0sCi0JCXsgQVVEX0RFRU1QSE5VTUVSMl9SLCAweDAwMDAwMUIxIH0sCi0JCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHgwNiB9LAotCQl7IEFVRF9QREZfRERTX0NOU1RfQllURTEsIDB4ODIgfSwKLQkJeyBBVURfUUFNX01PREUsIDB4MDUgfSwKLQkJeyBBVURfUERGX0REU19DTlNUX0JZVEUwLCAweDEyIH0sCi0JCXsgQVVEX1BIQUNDX0ZSRVFfOE1TQiwgMHgzNCB9LAotCQl7IEFVRF9QSEFDQ19GUkVRXzhMU0IsIDB4NEMgfSwKLQkJeyBBVURfREVFTVBIR0FJTl9SLCAweDAwMDA2NjgwIH0sCi0JCXsgQVVEX1JBVEVfVEhSRVNfRE1ELCAweDAwMDAwMEMwICB9LAorCQl7QVVEX0FGRV8xMkRCX0VOLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9SQVRFX0FESjEsIDB4MDAwMDAwNjB9LAorCQl7QVVEX1JBVEVfQURKMiwgMHgwMDAwMDBGOX0sCisJCXtBVURfUkFURV9BREozLCAweDAwMDAwMUNDfSwKKwkJe0FVRF9SQVRFX0FESjQsIDB4MDAwMDAyQjN9LAorCQl7QVVEX1JBVEVfQURKNSwgMHgwMDAwMDcyNn0sCisJCXtBVURfREVFTVBIREVOT00xX1IsIDB4MDAwMEYzRDB9LAorCQl7QVVEX0RFRU1QSERFTk9NMl9SLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9FUlJMT0dQRVJJT0RfUiwgMHgwMDAwMDA2NH0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAweDAwMDAwRkZGfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQyX1IsIDB4MDAwMDAwMUZ9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgMHgwMDAwMDAwRn0sCisJCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAwMDAwM30sCisJCXtBVURfRE1EX1JBX0REUywgMHgwMEMwMDAwMH0sCisJCXtBVURfUExMX0lOVCwgMHgwMDAwMDAxRX0sCisJCXtBVURfUExMX0REUywgMHgwMDAwMDAwMH0sCisJCXtBVURfUExMX0ZSQUMsIDB4MDAwMEU1NDJ9LAorCQl7QVVEX1NUQVJUX1RJTUVSLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEhOVU1FUjFfUiwgMHgwMDAzNTNERX0sCisJCXtBVURfREVFTVBITlVNRVIyX1IsIDB4MDAwMDAxQjF9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHgwNn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUxLCAweDgyfSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTAsIDB4MTJ9LAorCQl7QVVEX1FBTV9NT0RFLCAweDA1fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhNU0IsIDB4MzR9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgMHg0Q30sCisJCXtBVURfREVFTVBIR0FJTl9SLCAweDAwMDA2NjgwfSwKKwkJe0FVRF9SQVRFX1RIUkVTX0RNRCwgMHgwMDAwMDBDMH0sCiAJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKLQl9IDsKLQlkcHJpbnRrKCIlcyAoc3RhdHVzOiBkZXZlbCksIHN0ZXJlbyA6ICVkXG4iLF9fRlVOQ1RJT05fXyxzdGVyZW8pOwotCi0JaWYgKCFzdGVyZW8pIHsKLQkvKiBBTSBNb25vICovCi0JCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfQTIpOwotCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2xfbW9ubyk7Ci0Jc2V0X2F1ZGlvX2ZpbmlzaChjb3JlLCBFTl9BMl9GT1JDRV9NT05PMSk7Ci0JfSBlbHNlIHsKLQkvKiBOaWNhbSBTdGVyZW8gKi8KLQkJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9OSUNBTSk7Ci0JCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgbmljYW1fbCk7Ci0Jc2V0X2F1ZGlvX2ZpbmlzaChjb3JlLCAweDE5MjQpOyAvKiBGSVhNRSAqLwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2V0X2F1ZGlvX3N0YW5kYXJkX1BBTF9JKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIGludCBzdGVyZW8pCi17Ci0gICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBwYWxfaV9mbV9tb25vW10gPSB7Ci0Je0FVRF9FUlJMT0dQRVJJT0RfUiwgICAgICAgMHgwMDAwMDA2NH0sCi0Je0FVRF9FUlJJTlRSUFRUSFNITEQxX1IsICAgMHgwMDAwMGZmZn0sCi0Je0FVRF9FUlJJTlRSUFRUSFNITEQyX1IsICAgMHgwMDAwMDAxZn0sCi0Je0FVRF9FUlJJTlRSUFRUSFNITEQzX1IsICAgMHgwMDAwMDAwZn0sCi0Je0FVRF9QREZfRERTX0NOU1RfQllURTIsICAgMHgwNn0sCi0Je0FVRF9QREZfRERTX0NOU1RfQllURTEsICAgMHg4Mn0sCi0Je0FVRF9QREZfRERTX0NOU1RfQllURTAsICAgMHgxMn0sCi0Je0FVRF9RQU1fTU9ERSwgICAgICAgICAgICAgMHgwNX0sCi0Je0FVRF9QSEFDQ19GUkVRXzhNU0IsICAgICAgMHgzYX0sCi0Je0FVRF9QSEFDQ19GUkVRXzhMU0IsICAgICAgMHg5M30sCi0Je0FVRF9ETURfUkFfRERTLCAgICAgICAgICAgMHgwMDJhNGYyZn0sCi0Je0FVRF9QTExfSU5ULCAgICAgICAgICAgICAgMHgwMDAwMDAxZX0sCi0Je0FVRF9QTExfRERTLCAgICAgICAgICAgICAgMHgwMDAwMDAwNH0sCi0Je0FVRF9QTExfRlJBQywgICAgICAgICAgICAgMHgwMDAwZTU0Mn0sCi0Je0FVRF9SQVRFX0FESjEsICAgICAgICAgICAgMHgwMDAwMDEwMH0sCi0Je0FVRF9SQVRFX0FESjIsICAgICAgICAgICAgMHgwMDAwMDIwMH0sCi0Je0FVRF9SQVRFX0FESjMsICAgICAgICAgICAgMHgwMDAwMDMwMH0sCi0Je0FVRF9SQVRFX0FESjQsICAgICAgICAgICAgMHgwMDAwMDQwMH0sCi0Je0FVRF9SQVRFX0FESjUsICAgICAgICAgICAgMHgwMDAwMDUwMH0sCi0Je0FVRF9USFJfRlIsICAgICAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMCwgICAgICAgMHgwMDAwNzU1Yn0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMSwgICAgICAgMHgwMDU1MTM0MH0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMiwgICAgICAgMHgwMDZkMzBiZX0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMywgICAgICAgMHhmZmQzOTRhZn0sCi0Je0FVRF9QSUxPVF9CUURfMV9LNCwgICAgICAgMHgwMDQwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMCwgICAgICAgMHgwMDA0MDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMSwgICAgICAgMHgwMDJhNDg0MX0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMiwgICAgICAgMHgwMDQwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMywgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LNCwgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9NT0RFX0NIR19USU1FUiwgICAgICAgMHgwMDAwMDA2MH0sCi0Je0FVRF9BRkVfMTJEQl9FTiwgICAgICAgICAgMHgwMDAwMDAwMX0sCi0Je0FBR0NfSFlTVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwYX0sCi0Je0FVRF9DT1JESUNfU0hJRlRfMCwgICAgICAgMHgwMDAwMDAwN30sCi0Je0FVRF9DT1JESUNfU0hJRlRfMSwgICAgICAgMHgwMDAwMDAwN30sCi0Je0FVRF9DMV9VUF9USFIsICAgICAgICAgICAgMHgwMDAwNzAwMH0sCi0Je0FVRF9DMV9MT19USFIsICAgICAgICAgICAgMHgwMDAwNTQwMH0sCi0Je0FVRF9DMl9VUF9USFIsICAgICAgICAgICAgMHgwMDAwNTQwMH0sCi0Je0FVRF9DMl9MT19USFIsICAgICAgICAgICAgMHgwMDAwMzAwMH0sCi0Je0FVRF9EQ09DXzBfU1JDLCAgICAgICAgICAgMHgwMDAwMDAxYX0sCi0Je0FVRF9EQ09DMF9TSElGVCwgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9EQ09DXzBfU0hJRlRfSU4wLCAgICAgMHgwMDAwMDAwYX0sCi0Je0FVRF9EQ09DXzBfU0hJRlRfSU4xLCAgICAgMHgwMDAwMDAwOH0sCi0Je0FVRF9EQ09DX1BBU1NfSU4sICAgICAgICAgMHgwMDAwMDAwM30sCi0Je0FVRF9JSVIzXzBfU0VMLCAgICAgICAgICAgMHgwMDAwMDAyMX0sCi0Je0FVRF9ETjJfQUZDLCAgICAgICAgICAgICAgMHgwMDAwMDAwMn0sCi0Je0FVRF9EQ09DXzFfU1JDLCAgICAgICAgICAgMHgwMDAwMDAxYn0sCi0Je0FVRF9EQ09DMV9TSElGVCwgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9EQ09DXzFfU0hJRlRfSU4wLCAgICAgMHgwMDAwMDAwYX0sCi0Je0FVRF9EQ09DXzFfU0hJRlRfSU4xLCAgICAgMHgwMDAwMDAwOH0sCi0Je0FVRF9JSVIzXzFfU0VMLCAgICAgICAgICAgMHgwMDAwMDAyM30sCi0Je0FVRF9ETjBfRlJFUSwgICAgICAgICAgICAgMHgwMDAwMzVhM30sCi0Je0FVRF9ETjJfRlJFUSwgICAgICAgICAgICAgMHgwMDAwMjljN30sCi0Je0FVRF9DUkRDMF9TUkNfU0VMLCAgICAgICAgMHgwMDAwMDUxMX0sCi0Je0FVRF9JSVIxXzBfU0VMLCAgICAgICAgICAgMHgwMDAwMDAwMX0sCi0Je0FVRF9JSVIxXzFfU0VMLCAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9JSVIzXzJfU0VMLCAgICAgICAgICAgMHgwMDAwMDAwM30sCi0Je0FVRF9JSVIzXzJfU0hJRlQsICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9JSVIzXzBfU0VMLCAgICAgICAgICAgMHgwMDAwMDAwMn0sCi0Je0FVRF9JSVIyXzBfU0VMLCAgICAgICAgICAgMHgwMDAwMDAyMX0sCi0Je0FVRF9JSVIyXzBfU0hJRlQsICAgICAgICAgMHgwMDAwMDAwMn0sCi0Je0FVRF9ERUVNUEgwX1NSQ19TRUwsICAgICAgMHgwMDAwMDAwYn0sCi0Je0FVRF9ERUVNUEgxX1NSQ19TRUwsICAgICAgMHgwMDAwMDAwYn0sCi0Je0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAgICAgMHgwMDAwMDAwMX0sCi0Je0FVRF9TVEFSVF9USU1FUiwgICAgICAgICAgMHgwMDAwMDAwMH0sCi0JeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAotICAgICAgIH07Ci0KLSAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IHBhbF9pX25pY2FtW10gPSB7Ci0JeyBBVURfUkFURV9BREoxLCAgICAgICAgICAgMHgwMDAwMDAxMCB9LAotCXsgQVVEX1JBVEVfQURKMiwgICAgICAgICAgIDB4MDAwMDAwNDAgfSwKLQl7IEFVRF9SQVRFX0FESjMsICAgICAgICAgICAweDAwMDAwMTAwIH0sCi0JeyBBVURfUkFURV9BREo0LCAgICAgICAgICAgMHgwMDAwMDQwMCB9LAotCXsgQVVEX1JBVEVfQURKNSwgICAgICAgICAgIDB4MDAwMDEwMDAgfSwKLQkvLyAgICAgeyBBVURfRE1EX1JBX0REUywgICAgICAgICAgMHgwMGMwZDVjZSB9LAotCXsgQVVEX0RFRU1QSEdBSU5fUiwgICAgICAgIDB4MDAwMDIzYzIgfSwKLQl7IEFVRF9ERUVNUEhOVU1FUjFfUiwgICAgICAweDAwMDJhN2JjIH0sCi0JeyBBVURfREVFTVBITlVNRVIyX1IsICAgICAgMHgwMDAzMDIzZSB9LAotCXsgQVVEX0RFRU1QSERFTk9NMV9SLCAgICAgIDB4MDAwMGYzZDAgfSwKLQl7IEFVRF9ERUVNUEhERU5PTTJfUiwgICAgICAweDAwMDAwMDAwIH0sCi0JeyBBVURfREVFTVBIREVOT00yX1IsICAgICAgMHgwMDAwMDAwMCB9LAotCXsgQVVEX0VSUkxPR1BFUklPRF9SLCAgICAgIDB4MDAwMDBmZmYgfSwKLQl7IEFVRF9FUlJJTlRSUFRUSFNITEQxX1IsICAweDAwMDAwM2ZmIH0sCi0JeyBBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAgMHgwMDAwMDBmZiB9LAotCXsgQVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgIDB4MDAwMDAwM2YgfSwKLQl7IEFVRF9QT0xZUEg4MFNDQUxFRkFDLCAgICAweDAwMDAwMDAzIH0sCi0JeyBBVURfUERGX0REU19DTlNUX0JZVEUyLCAgMHgwNiB9LAotCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMSwgIDB4ODIgfSwKLQl7IEFVRF9QREZfRERTX0NOU1RfQllURTAsICAweDE2IH0sCi0JeyBBVURfUUFNX01PREUsICAgICAgICAgICAgMHgwNSB9LAotCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMCwgIDB4MTIgfSwKLQl7IEFVRF9QSEFDQ19GUkVRXzhNU0IsICAgICAweDNhIH0sCi0JeyBBVURfUEhBQ0NfRlJFUV84TFNCLCAgICAgMHg5MyB9LAotCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCi0JZHByaW50aygiJXMgKHN0YXR1czogZGV2ZWwpLCBzdGVyZW8gOiAlZFxuIixfX0ZVTkNUSU9OX18sc3RlcmVvKTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IG5pY2FtX2JnZGtpX2NvbW1vbltdID0geworCQl7QVVEX0FGRV8xMkRCX0VOLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9SQVRFX0FESjEsIDB4MDAwMDAwMTB9LAorCQl7QVVEX1JBVEVfQURKMiwgMHgwMDAwMDA0MH0sCisJCXtBVURfUkFURV9BREozLCAweDAwMDAwMTAwfSwKKwkJe0FVRF9SQVRFX0FESjQsIDB4MDAwMDA0MDB9LAorCQl7QVVEX1JBVEVfQURKNSwgMHgwMDAwMTAwMH0sCisJCS8veyBBVURfRE1EX1JBX0REUywgICAgICAgIDB4MDBjMGQ1Y2UgfSwKKwkJe0FVRF9FUlJMT0dQRVJJT0RfUiwgMHgwMDAwMGZmZn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAweDAwMDAwM2ZmfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQyX1IsIDB4MDAwMDAwZmZ9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgMHgwMDAwMDAzZn0sCisJCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAwMDAwM30sCisJCXtBVURfREVFTVBIR0FJTl9SLCAweDAwMDAyM2MyfSwKKwkJe0FVRF9ERUVNUEhOVU1FUjFfUiwgMHgwMDAyYTdiY30sCisJCXtBVURfREVFTVBITlVNRVIyX1IsIDB4MDAwMzAyM2V9LAorCQl7QVVEX0RFRU1QSERFTk9NMV9SLCAweDAwMDBmM2QwfSwKKwkJe0FVRF9ERUVNUEhERU5PTTJfUiwgMHgwMDAwMDAwMH0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUyLCAweDA2fSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTEsIDB4ODJ9LAorCQl7QVVEX1FBTV9NT0RFLCAweDA1fSwKKwkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorCX07CiAKLQlpZiAoIXN0ZXJlbykgewotCS8qIEZNIE1vbm8gKi8KLQlzZXRfYXVkaW9fc3RhcnQoY29yZSwgU0VMX0EyKTsKLQkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBwYWxfaV9mbV9tb25vKTsKLQkJc2V0X2F1ZGlvX2ZpbmlzaChjb3JlLCBFTl9ETVRSWF9TVU1ESUZGIHwgRU5fQTJfRk9SQ0VfTU9OTzEpOwotCX0gZWxzZSB7Ci0JLyogTmljYW0gU3RlcmVvICovCi0Jc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9OSUNBTSk7Ci0JCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgcGFsX2lfbmljYW0pOwotCQlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIEVOX0RNVFJYX0xSIHwgRU5fRE1UUlhfQllQQVNTIHwgRU5fTklDQU1fQVVUT19TVEVSRU8pOwotCX0KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IG5pY2FtX2lbXSA9IHsKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTAsIDB4MTJ9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOE1TQiwgMHgzYX0sCisJCXtBVURfUEhBQ0NfRlJFUV84TFNCLCAweDkzfSwKKwkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorCX07CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IG5pY2FtX2RlZmF1bHRbXSA9IHsKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTAsIDB4MTZ9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOE1TQiwgMHgzNH0sCisJCXtBVURfUEhBQ0NfRlJFUV84TFNCLCAweDRjfSwKKwkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorCX07CisKKwlzZXRfYXVkaW9fc3RhcnQoY29yZSxTRUxfTklDQU0pOworCXN3aXRjaCAoY29yZS0+dHZhdWRpbykgeworCWNhc2UgV1dfTDoKKwkJZHByaW50aygiJXMgU0VDQU0tTCBOSUNBTSAoc3RhdHVzOiBkZXZlbClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgbmljYW1fbCk7CisJCWJyZWFrOworCWNhc2UgV1dfSToKKwkJZHByaW50aygiJXMgUEFMLUkgTklDQU0gKHN0YXR1czogZGV2ZWwpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2JnZGtpX2NvbW1vbik7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgbmljYW1faSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzIFBBTC1CR0RLIE5JQ0FNIChzdGF0dXM6IHVua25vd24pXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2JnZGtpX2NvbW1vbik7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgbmljYW1fZGVmYXVsdCk7CisJCWJyZWFrOworCX07CisKKwltb2RlIHw9IEVOX0RNVFJYX0xSIHwgRU5fRE1UUlhfQllQQVNTOworCXNldF9hdWRpb19maW5pc2goY29yZSwgbW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9BMihzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1MzIgbW9kZSkKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGEyX2NvbW1vbltdID0gewotCXtBVURfRVJSTE9HUEVSSU9EX1IsICAgICAgICAgICAgMHgwMDAwMDA2NH0sCi0Je0FVRF9FUlJJTlRSUFRUSFNITEQxX1IsICAgICAgICAweDAwMDAwZmZmfSwKLQl7QVVEX0VSUklOVFJQVFRIU0hMRDJfUiwgICAgICAgIDB4MDAwMDAwMWZ9LAotCXtBVURfRVJSSU5UUlBUVEhTSExEM19SLCAgICAgICAgMHgwMDAwMDAwZn0sCi0Je0FVRF9QREZfRERTX0NOU1RfQllURTIsICAgICAgICAweDA2fSwKLQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMSwgICAgICAgIDB4ODJ9LAotCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAgICAgICAgMHgxMn0sCi0Je0FVRF9RQU1fTU9ERSwgICAgICAgICAgICAgICAgICAweDA1fSwKLQl7QVVEX1BIQUNDX0ZSRVFfOE1TQiwgICAgICAgICAgIDB4MzR9LAotCXtBVURfUEhBQ0NfRlJFUV84TFNCLCAgICAgICAgICAgMHg0Y30sCi0Je0FVRF9SQVRFX0FESjEsICAgICAgICAgICAgICAgICAweDAwMDAwMTAwfSwKLQl7QVVEX1JBVEVfQURKMiwgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDB9LAotCXtBVURfUkFURV9BREozLCAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMH0sCi0Je0FVRF9SQVRFX0FESjQsICAgICAgICAgICAgICAgICAweDAwMDAwNDAwfSwKLQl7QVVEX1JBVEVfQURKNSwgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDB9LAotCXtBVURfVEhSX0ZSLCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FBR0NfSFlTVCwgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFhfSwKLQl7QVVEX1BJTE9UX0JRRF8xX0swLCAgICAgICAgICAgIDB4MDAwMDc1NWJ9LAotCXtBVURfUElMT1RfQlFEXzFfSzEsICAgICAgICAgICAgMHgwMDU1MTM0MH0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMiwgICAgICAgICAgICAweDAwNmQzMGJlfSwKLQl7QVVEX1BJTE9UX0JRRF8xX0szLCAgICAgICAgICAgIDB4ZmZkMzk0YWZ9LAotCXtBVURfUElMT1RfQlFEXzFfSzQsICAgICAgICAgICAgMHgwMDQwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMCwgICAgICAgICAgICAweDAwMDQwMDAwfSwKLQl7QVVEX1BJTE9UX0JRRF8yX0sxLCAgICAgICAgICAgIDB4MDAyYTQ4NDF9LAotCXtBVURfUElMT1RfQlFEXzJfSzIsICAgICAgICAgICAgMHgwMDQwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMywgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7QVVEX1BJTE9UX0JRRF8yX0s0LCAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfTU9ERV9DSEdfVElNRVIsICAgICAgICAgICAgMHgwMDAwMDA0MH0sCi0Je0FVRF9BRkVfMTJEQl9FTiwgICAgICAgICAgICAgICAweDAwMDAwMDAxfSwKLQl7QVVEX0NPUkRJQ19TSElGVF8wLCAgICAgICAgICAgIDB4MDAwMDAwMDd9LAotCXtBVURfQ09SRElDX1NISUZUXzEsICAgICAgICAgICAgMHgwMDAwMDAwN30sCi0Je0FVRF9ERUVNUEgwX0cwLCAgICAgICAgICAgICAgICAweDAwMDAwMzgwfSwKLQl7QVVEX0RFRU1QSDFfRzAsICAgICAgICAgICAgICAgIDB4MDAwMDAzODB9LAotCXtBVURfRENPQ18wX1NSQywgICAgICAgICAgICAgICAgMHgwMDAwMDAxYX0sCi0Je0FVRF9EQ09DMF9TSElGVCwgICAgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7QVVEX0RDT0NfMF9TSElGVF9JTjAsICAgICAgICAgIDB4MDAwMDAwMGF9LAotCXtBVURfRENPQ18wX1NISUZUX0lOMSwgICAgICAgICAgMHgwMDAwMDAwOH0sCi0Je0FVRF9EQ09DX1BBU1NfSU4sICAgICAgICAgICAgICAweDAwMDAwMDAzfSwKLQl7QVVEX0lJUjNfMF9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMjF9LAotCXtBVURfRE4yX0FGQywgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMn0sCi0Je0FVRF9EQ09DXzFfU1JDLCAgICAgICAgICAgICAgICAweDAwMDAwMDFifSwKLQl7QVVEX0RDT0MxX1NISUZULCAgICAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfRENPQ18xX1NISUZUX0lOMCwgICAgICAgICAgMHgwMDAwMDAwYX0sCi0Je0FVRF9EQ09DXzFfU0hJRlRfSU4xLCAgICAgICAgICAweDAwMDAwMDA4fSwKLQl7QVVEX0lJUjNfMV9TRUwsICAgICAgICAgICAgICAgIDB4MDAwMDAwMjN9LAotCXtBVURfUkRTSV9TRUwsICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxN30sCi0Je0FVRF9SRFNJX1NISUZULCAgICAgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7QVVEX1JEU1FfU0VMLCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTd9LAotCXtBVURfUkRTUV9TSElGVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9QTExfSU5ULCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFlfSwKLQl7QVVEX1BMTF9ERFMsICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfUExMX0ZSQUMsICAgICAgICAgICAgICAgICAgMHgwMDAwZTU0Mn0sCi0Je0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAgICAgICAgICAweDAwMDAwMDAxfSwKLQl7QVVEX1NUQVJUX1RJTUVSLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGEyX2JnZGtfY29tbW9uW10gPSB7CisJCXtBVURfRVJSTE9HUEVSSU9EX1IsIDB4MDAwMDAwNjR9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDFfUiwgMHgwMDAwMGZmZn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMDFmfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQzX1IsIDB4MDAwMDAwMGZ9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHgwNn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUxLCAweDgyfSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTAsIDB4MTJ9LAorCQl7QVVEX1FBTV9NT0RFLCAweDA1fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhNU0IsIDB4MzR9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgMHg0Y30sCisJCXtBVURfUkFURV9BREoxLCAweDAwMDAwMTAwfSwKKwkJe0FVRF9SQVRFX0FESjIsIDB4MDAwMDAyMDB9LAorCQl7QVVEX1JBVEVfQURKMywgMHgwMDAwMDMwMH0sCisJCXtBVURfUkFURV9BREo0LCAweDAwMDAwNDAwfSwKKwkJe0FVRF9SQVRFX0FESjUsIDB4MDAwMDA1MDB9LAorCQl7QVVEX1RIUl9GUiwgMHgwMDAwMDAwMH0sCisJCXtBQUdDX0hZU1QsIDB4MDAwMDAwMWF9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0swLCAweDAwMDA3NTVifSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LMSwgMHgwMDU1MTM0MH0sCisJCXtBVURfUElMT1RfQlFEXzFfSzIsIDB4MDA2ZDMwYmV9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0szLCAweGZmZDM5NGFmfSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LNCwgMHgwMDQwMDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzJfSzAsIDB4MDAwNDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0sxLCAweDAwMmE0ODQxfSwKKwkJe0FVRF9QSUxPVF9CUURfMl9LMiwgMHgwMDQwMDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzJfSzMsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0s0LCAweDAwMDAwMDAwfSwKKwkJe0FVRF9NT0RFX0NIR19USU1FUiwgMHgwMDAwMDA0MH0sCisJCXtBVURfQUZFXzEyREJfRU4sIDB4MDAwMDAwMDF9LAorCQl7QVVEX0NPUkRJQ19TSElGVF8wLCAweDAwMDAwMDA3fSwKKwkJe0FVRF9DT1JESUNfU0hJRlRfMSwgMHgwMDAwMDAwN30sCisJCXtBVURfREVFTVBIMF9HMCwgMHgwMDAwMDM4MH0sCisJCXtBVURfREVFTVBIMV9HMCwgMHgwMDAwMDM4MH0sCisJCXtBVURfRENPQ18wX1NSQywgMHgwMDAwMDAxYX0sCisJCXtBVURfRENPQzBfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0RDT0NfUEFTU19JTiwgMHgwMDAwMDAwM30sCisJCXtBVURfSUlSM18wX1NFTCwgMHgwMDAwMDAyMX0sCisJCXtBVURfRE4yX0FGQywgMHgwMDAwMDAwMn0sCisJCXtBVURfRENPQ18xX1NSQywgMHgwMDAwMDAxYn0sCisJCXtBVURfRENPQzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0lJUjNfMV9TRUwsIDB4MDAwMDAwMjN9LAorCQl7QVVEX1JEU0lfU0VMLCAweDAwMDAwMDE3fSwKKwkJe0FVRF9SRFNJX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9SRFNRX1NFTCwgMHgwMDAwMDAxN30sCisJCXtBVURfUkRTUV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfUExMX0lOVCwgMHgwMDAwMDAxZX0sCisJCXtBVURfUExMX0REUywgMHgwMDAwMDAwMH0sCisJCXtBVURfUExMX0ZSQUMsIDB4MDAwMGU1NDJ9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDF9LAorCQl7QVVEX1NUQVJUX1RJTUVSLCAweDAwMDAwMDAwfSwKKwkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGEyX2JnW10gPSB7Ci0Je0FVRF9ETURfUkFfRERTLCAgICAgICAgICAgICAgICAweDAwMmE0ZjJmfSwKLQl7QVVEX0MxX1VQX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDB9LAotCXtBVURfQzFfTE9fVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwNTQwMH0sCi0Je0FVRF9DMl9VUF9USFIsICAgICAgICAgICAgICAgICAweDAwMDA1NDAwfSwKLQl7QVVEX0MyX0xPX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDB9LAorCQl7QVVEX0RNRF9SQV9ERFMsIDB4MDAyYTRmMmZ9LAorCQl7QVVEX0MxX1VQX1RIUiwgMHgwMDAwNzAwMH0sCisJCXtBVURfQzFfTE9fVEhSLCAweDAwMDA1NDAwfSwKKwkJe0FVRF9DMl9VUF9USFIsIDB4MDAwMDU0MDB9LAorCQl7QVVEX0MyX0xPX1RIUiwgMHgwMDAwMzAwMH0sCiAJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhMl9ka1tdID0gewotCXtBVURfRE1EX1JBX0REUywgICAgICAgICAgICAgICAgMHgwMDJhNGYyZn0sCi0Je0FVRF9DMV9VUF9USFIsICAgICAgICAgICAgICAgICAweDAwMDA3MDAwfSwKLQl7QVVEX0MxX0xPX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDU0MDB9LAotCXtBVURfQzJfVVBfVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwNTQwMH0sCi0Je0FVRF9DMl9MT19USFIsICAgICAgICAgICAgICAgICAweDAwMDAzMDAwfSwKLQl7QVVEX0ROMF9GUkVRLCAgICAgICAgICAgICAgICAgIDB4MDAwMDNhMWN9LAotCXtBVURfRE4yX0ZSRVEsICAgICAgICAgICAgICAgICAgMHgwMDAwZDJlMH0sCisJCXtBVURfRE1EX1JBX0REUywgMHgwMDJhNGYyZn0sCisJCXtBVURfQzFfVVBfVEhSLCAweDAwMDA3MDAwfSwKKwkJe0FVRF9DMV9MT19USFIsIDB4MDAwMDU0MDB9LAorCQl7QVVEX0MyX1VQX1RIUiwgMHgwMDAwNTQwMH0sCisJCXtBVURfQzJfTE9fVEhSLCAweDAwMDAzMDAwfSwKKwkJe0FVRF9ETjBfRlJFUSwgMHgwMDAwM2ExY30sCisJCXtBVURfRE4yX0ZSRVEsIDB4MDAwMGQyZTB9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKLS8qIHVua25vd24sIHByb2JhYmx5IE5UU0MtTSAqLwotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgYTJfbVtdID0gewotCXtBVURfRE1EX1JBX0REUywgICAgICAgICAgICAgICAgMHgwMDJhMDQyNX0sCi0Je0FVRF9DMV9VUF9USFIsICAgICAgICAgICAgICAgICAweDAwMDAzYzAwfSwKLQl7QVVEX0MxX0xPX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDB9LAotCXtBVURfQzJfVVBfVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMH0sCi0Je0FVRF9DMl9MT19USFIsICAgICAgICAgICAgICAgICAweDAwMDAzYzAwfSwKLQl7QVVEX0RFRU1QSDBfQTAsICAgICAgICAgICAgICAgIDB4MDAwMDdhODB9LAotCXtBVURfREVFTVBIMV9BMCwgICAgICAgICAgICAgICAgMHgwMDAwN2E4MH0sCi0Je0FVRF9ERUVNUEgwX0cwLCAgICAgICAgICAgICAgICAweDAwMDAxMjAwfSwKLQl7QVVEX0RFRU1QSDFfRzAsICAgICAgICAgICAgICAgIDB4MDAwMDEyMDB9LAotCXtBVURfRE4wX0ZSRVEsICAgICAgICAgICAgICAgICAgMHgwMDAwMjgzYn0sCi0Je0FVRF9ETjFfRlJFUSwgICAgICAgICAgICAgICAgICAweDAwMDAzNDE4fSwKLQl7QVVEX0ROMl9GUkVRLCAgICAgICAgICAgICAgICAgIDB4MDAwMDI5Yzd9LAotCXtBVURfUE9MWTBfRERTX0NPTlNUQU5ULCAgICAgICAgMHgwMDBhNzU0MH0sCisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGExX2lbXSA9IHsKKwkJe0FVRF9FUlJMT0dQRVJJT0RfUiwgMHgwMDAwMDA2NH0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAweDAwMDAwZmZmfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQyX1IsIDB4MDAwMDAwMWZ9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgMHgwMDAwMDAwZn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUyLCAweDA2fSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTEsIDB4ODJ9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMCwgMHgxMn0sCisJCXtBVURfUUFNX01PREUsIDB4MDV9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOE1TQiwgMHgzYX0sCisJCXtBVURfUEhBQ0NfRlJFUV84TFNCLCAweDkzfSwKKwkJe0FVRF9ETURfUkFfRERTLCAweDAwMmE0ZjJmfSwKKwkJe0FVRF9QTExfSU5ULCAweDAwMDAwMDFlfSwKKwkJe0FVRF9QTExfRERTLCAweDAwMDAwMDA0fSwKKwkJe0FVRF9QTExfRlJBQywgMHgwMDAwZTU0Mn0sCisJCXtBVURfUkFURV9BREoxLCAweDAwMDAwMTAwfSwKKwkJe0FVRF9SQVRFX0FESjIsIDB4MDAwMDAyMDB9LAorCQl7QVVEX1JBVEVfQURKMywgMHgwMDAwMDMwMH0sCisJCXtBVURfUkFURV9BREo0LCAweDAwMDAwNDAwfSwKKwkJe0FVRF9SQVRFX0FESjUsIDB4MDAwMDA1MDB9LAorCQl7QVVEX1RIUl9GUiwgMHgwMDAwMDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzFfSzAsIDB4MDAwMDc1NWJ9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0sxLCAweDAwNTUxMzQwfSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LMiwgMHgwMDZkMzBiZX0sCisJCXtBVURfUElMT1RfQlFEXzFfSzMsIDB4ZmZkMzk0YWZ9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0s0LCAweDAwNDAwMDAwfSwKKwkJe0FVRF9QSUxPVF9CUURfMl9LMCwgMHgwMDA0MDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzJfSzEsIDB4MDAyYTQ4NDF9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0syLCAweDAwNDAwMDAwfSwKKwkJe0FVRF9QSUxPVF9CUURfMl9LMywgMHgwMDAwMDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzJfSzQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX01PREVfQ0hHX1RJTUVSLCAweDAwMDAwMDYwfSwKKwkJe0FVRF9BRkVfMTJEQl9FTiwgMHgwMDAwMDAwMX0sCisJCXtBQUdDX0hZU1QsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0NPUkRJQ19TSElGVF8wLCAweDAwMDAwMDA3fSwKKwkJe0FVRF9DT1JESUNfU0hJRlRfMSwgMHgwMDAwMDAwN30sCisJCXtBVURfQzFfVVBfVEhSLCAweDAwMDA3MDAwfSwKKwkJe0FVRF9DMV9MT19USFIsIDB4MDAwMDU0MDB9LAorCQl7QVVEX0MyX1VQX1RIUiwgMHgwMDAwNTQwMH0sCisJCXtBVURfQzJfTE9fVEhSLCAweDAwMDAzMDAwfSwKKwkJe0FVRF9EQ09DXzBfU1JDLCAweDAwMDAwMDFhfSwKKwkJe0FVRF9EQ09DMF9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfRENPQ18wX1NISUZUX0lOMCwgMHgwMDAwMDAwYX0sCisJCXtBVURfRENPQ18wX1NISUZUX0lOMSwgMHgwMDAwMDAwOH0sCisJCXtBVURfRENPQ19QQVNTX0lOLCAweDAwMDAwMDAzfSwKKwkJe0FVRF9JSVIzXzBfU0VMLCAweDAwMDAwMDIxfSwKKwkJe0FVRF9ETjJfQUZDLCAweDAwMDAwMDAyfSwKKwkJe0FVRF9EQ09DXzFfU1JDLCAweDAwMDAwMDFifSwKKwkJe0FVRF9EQ09DMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfRENPQ18xX1NISUZUX0lOMCwgMHgwMDAwMDAwYX0sCisJCXtBVURfRENPQ18xX1NISUZUX0lOMSwgMHgwMDAwMDAwOH0sCisJCXtBVURfSUlSM18xX1NFTCwgMHgwMDAwMDAyM30sCisJCXtBVURfRE4wX0ZSRVEsIDB4MDAwMDM1YTN9LAorCQl7QVVEX0ROMl9GUkVRLCAweDAwMDAyOWM3fSwKKwkJe0FVRF9DUkRDMF9TUkNfU0VMLCAweDAwMDAwNTExfSwKKwkJe0FVRF9JSVIxXzBfU0VMLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9JSVIxXzFfU0VMLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIzXzJfU0VMLCAweDAwMDAwMDAzfSwKKwkJe0FVRF9JSVIzXzJfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjNfMF9TRUwsIDB4MDAwMDAwMDJ9LAorCQl7QVVEX0lJUjJfMF9TRUwsIDB4MDAwMDAwMjF9LAorCQl7QVVEX0lJUjJfMF9TSElGVCwgMHgwMDAwMDAwMn0sCisJCXtBVURfREVFTVBIMF9TUkNfU0VMLCAweDAwMDAwMDBifSwKKwkJe0FVRF9ERUVNUEgxX1NSQ19TRUwsIDB4MDAwMDAwMGJ9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDF9LAorCQl7QVVEX1NUQVJUX1RJTUVSLCAweDAwMDAwMDAwfSwKKwkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorCX07CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGFtX2xbXSA9IHsKKwkJe0FVRF9FUlJMT0dQRVJJT0RfUiwgMHgwMDAwMDA2NH0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAweDAwMDAwRkZGfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQyX1IsIDB4MDAwMDAwMUZ9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgMHgwMDAwMDAwRn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUyLCAweDQ4fSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTEsIDB4M0R9LAorCQl7QVVEX1FBTV9NT0RFLCAweDAwfSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTAsIDB4ZjV9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOE1TQiwgMHgzYX0sCisJCXtBVURfUEhBQ0NfRlJFUV84TFNCLCAweDRhfSwKKwkJe0FVRF9ERUVNUEhHQUlOX1IsIDB4MDAwMDY2ODB9LAorCQl7QVVEX0RFRU1QSE5VTUVSMV9SLCAweDAwMDM1M0RFfSwKKwkJe0FVRF9ERUVNUEhOVU1FUjJfUiwgMHgwMDAwMDFCMX0sCisJCXtBVURfREVFTVBIREVOT00xX1IsIDB4MDAwMEYzRDB9LAorCQl7QVVEX0RFRU1QSERFTk9NMl9SLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9GTV9NT0RFX0VOQUJMRSwgMHgwMDAwMDAwN30sCisJCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAwMDAwM30sCisJCXtBVURfQUZFXzEyREJfRU4sIDB4MDAwMDAwMDF9LAorCQl7QUFHQ19HQUlOLCAweDAwMDAwMDAwfSwKKwkJe0FBR0NfSFlTVCwgMHgwMDAwMDAxOH0sCisJCXtBQUdDX0RFRiwgMHgwMDAwMDAyMH0sCisJCXtBVURfRE4wX0ZSRVEsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BPTFkwX0REU19DT05TVEFOVCwgMHgwMDBFNERCMn0sCisJCXtBVURfRENPQ18wX1NSQywgMHgwMDAwMDAyMX0sCisJCXtBVURfSUlSMV8wX1NFTCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSMV8wX1NISUZULCAweDAwMDAwMDA3fSwKKwkJe0FVRF9JSVIxXzFfU0VMLCAweDAwMDAwMDAyfSwKKwkJe0FVRF9JSVIxXzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RDT0NfMV9TUkMsIDB4MDAwMDAwMDN9LAorCQl7QVVEX0RDT0MxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9EQ09DX1BBU1NfSU4sIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjFfMl9TRUwsIDB4MDAwMDAwMjN9LAorCQl7QVVEX0lJUjFfMl9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSMV8zX1NFTCwgMHgwMDAwMDAwNH0sCisJCXtBVURfSUlSMV8zX1NISUZULCAweDAwMDAwMDA3fSwKKwkJe0FVRF9JSVIxXzRfU0VMLCAweDAwMDAwMDA1fSwKKwkJe0FVRF9JSVIxXzRfU0hJRlQsIDB4MDAwMDAwMDd9LAorCQl7QVVEX0lJUjNfMF9TRUwsIDB4MDAwMDAwMDd9LAorCQl7QVVEX0lJUjNfMF9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMF9TUkNfU0VMLCAweDAwMDAwMDExfSwKKwkJe0FVRF9ERUVNUEgwX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgwX0cwLCAweDAwMDA3MDAwfSwKKwkJe0FVRF9ERUVNUEgwX0EwLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgwX0IwLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgwX0ExLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgwX0IxLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX1NSQ19TRUwsIDB4MDAwMDAwMTF9LAorCQl7QVVEX0RFRU1QSDFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RFRU1QSDFfRzAsIDB4MDAwMDcwMDB9LAorCQl7QVVEX0RFRU1QSDFfQTAsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RFRU1QSDFfQjAsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RFRU1QSDFfQTEsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RFRU1QSDFfQjEsIDB4MDAwMDAwMDB9LAorCQl7QVVEX09VVDBfU0VMLCAweDAwMDAwMDNGfSwKKwkJe0FVRF9PVVQxX1NFTCwgMHgwMDAwMDAzRn0sCisJCXtBVURfRE1EX1JBX0REUywgMHgwMEY1QzI4NX0sCisJCXtBVURfUExMX0lOVCwgMHgwMDAwMDAxRX0sCisJCXtBVURfUExMX0REUywgMHgwMDAwMDAwMH0sCisJCXtBVURfUExMX0ZSQUMsIDB4MDAwMEU1NDJ9LAorCQl7QVVEX1JBVEVfQURKMSwgMHgwMDAwMDEwMH0sCisJCXtBVURfUkFURV9BREoyLCAweDAwMDAwMjAwfSwKKwkJe0FVRF9SQVRFX0FESjMsIDB4MDAwMDAzMDB9LAorCQl7QVVEX1JBVEVfQURKNCwgMHgwMDAwMDQwMH0sCisJCXtBVURfUkFURV9BREo1LCAweDAwMDAwNTAwfSwKKwkJe0FVRF9SQVRFX1RIUkVTX0RNRCwgMHgwMDAwMDBDMH0sCiAJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhMl9kZWVtcGg1MFtdID0gewotCXtBVURfREVFTVBIMF9HMCwgICAgICAgICAgICAgICAgMHgwMDAwMDM4MH0sCi0Je0FVRF9ERUVNUEgxX0cwLCAgICAgICAgICAgICAgICAweDAwMDAwMzgwfSwKLQl7QVVEX0RFRU1QSEdBSU5fUiwgICAgICAgICAgICAgIDB4MDAwMDExZTF9LAotCXtBVURfREVFTVBITlVNRVIxX1IsICAgICAgICAgICAgMHgwMDAyYTdiY30sCi0Je0FVRF9ERUVNUEhOVU1FUjJfUiwgICAgICAgICAgICAweDAwMDMwMjNjfSwKLQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCi0JfTsKLQotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgYTJfZGVlbXBoNzVbXSA9IHsKLQl7QVVEX0RFRU1QSDBfRzAsICAgICAgICAgICAgICAgIDB4MDAwMDA0ODB9LAotCXtBVURfREVFTVBIMV9HMCwgICAgICAgICAgICAgICAgMHgwMDAwMDQ4MH0sCi0Je0FVRF9ERUVNUEhHQUlOX1IsICAgICAgICAgICAgICAweDAwMDA5MDAwfSwKLQl7QVVEX0RFRU1QSE5VTUVSMV9SLCAgICAgICAgICAgIDB4MDAwMzUzZGV9LAotCXtBVURfREVFTVBITlVNRVIyX1IsICAgICAgICAgICAgMHgwMDAwMDFiMX0sCisJCXtBVURfREVFTVBIMF9HMCwgMHgwMDAwMDM4MH0sCisJCXtBVURfREVFTVBIMV9HMCwgMHgwMDAwMDM4MH0sCisJCXtBVURfREVFTVBIR0FJTl9SLCAweDAwMDAxMWUxfSwKKwkJe0FVRF9ERUVNUEhOVU1FUjFfUiwgMHgwMDAyYTdiY30sCisJCXtBVURfREVFTVBITlVNRVIyX1IsIDB4MDAwMzAyM2N9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAogCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfQTIpOwotCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfY29tbW9uKTsKIAlzd2l0Y2ggKGNvcmUtPnR2YXVkaW8pIHsKLQljYXNlIFdXX0EyX0JHOgotCQlkcHJpbnRrKCIlcyBQQUwtQkcgQTIgKHN0YXR1czoga25vd24tZ29vZClcbiIsX19GVU5DVElPTl9fKTsKLQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2JnKTsKLQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2RlZW1waDUwKTsKKwljYXNlIFdXX0JHOgorCQlkcHJpbnRrKCIlcyBQQUwtQkcgQTEvMiAoc3RhdHVzOiBrbm93bi1nb29kKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9iZ2RrX2NvbW1vbik7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfYmcpOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2RlZW1waDUwKTsKIAkJYnJlYWs7Ci0JY2FzZSBXV19BMl9ESzoKLQkJZHByaW50aygiJXMgUEFMLURLIEEyIChzdGF0dXM6IGtub3duLWdvb2QpXG4iLF9fRlVOQ1RJT05fXyk7Ci0Jc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kayk7Ci0Jc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kZWVtcGg1MCk7CisJY2FzZSBXV19ESzoKKwkJZHByaW50aygiJXMgUEFMLURLIEExLzIgKHN0YXR1czoga25vd24tZ29vZClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfYmdka19jb21tb24pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2RrKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kZWVtcGg1MCk7CiAJCWJyZWFrOwotCWNhc2UgV1dfQTJfTToKLQkJZHByaW50aygiJXMgTlRTQy1NIEEyIChzdGF0dXM6IHVua25vd24pXG4iLF9fRlVOQ1RJT05fXyk7Ci0Jc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9tKTsKLQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2RlZW1waDc1KTsKKwljYXNlIFdXX0k6CisJCWRwcmludGsoIiVzIFBBTC1JIEExIChzdGF0dXM6IGtub3duLWdvb2QpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGExX2kpOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2RlZW1waDUwKTsKKwkJYnJlYWs7CisJY2FzZSBXV19MOgorCQlkcHJpbnRrKCIlcyBBTS1MIChzdGF0dXM6IGRldmVsKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhbV9sKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXMgV2FybmluZzogd3JvbmcgdmFsdWVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKIAkJYnJlYWs7CiAJfTsKIApAQCAtNjU2LDcxICs2MzMsNzEgQEAKIAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKLQlkcHJpbnRrKCIlcyAoc3RhdHVzOiB1bmtub3duKVxuIixfX0ZVTkNUSU9OX18pOworCWRwcmludGsoIiVzIChzdGF0dXM6IHVua25vd24pXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9FSUFKKTsKIAlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGVpYWopOwogCXNldF9hdWRpb19maW5pc2goY29yZSwgRU5fRUlBSl9BVVRPX1NURVJFTyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9GTShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBlbnVtIGN4ODhfZGVlbXBoX3R5cGUgZGVlbXBoKQorc3RhdGljIHZvaWQgc2V0X2F1ZGlvX3N0YW5kYXJkX0ZNKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsCisJCQkJICBlbnVtIGN4ODhfZGVlbXBoX3R5cGUgZGVlbXBoKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgZm1fZGVlbXBoXzUwW10gPSB7Ci0JCXsgQVVEX0RFRU1QSDBfRzAsCTB4MEM0NSB9LAotCQl7IEFVRF9ERUVNUEgwX0EwLAkweDYyNjIgfSwKLQkJeyBBVURfREVFTVBIMF9CMCwJMHgxQzI5IH0sCi0JCXsgQVVEX0RFRU1QSDBfQTEsCTB4M0ZDNjZ9LAotCQl7IEFVRF9ERUVNUEgwX0IxLAkweDM5OUEgfSwKKwkJe0FVRF9ERUVNUEgwX0cwLCAweDBDNDV9LAorCQl7QVVEX0RFRU1QSDBfQTAsIDB4NjI2Mn0sCisJCXtBVURfREVFTVBIMF9CMCwgMHgxQzI5fSwKKwkJe0FVRF9ERUVNUEgwX0ExLCAweDNGQzY2fSwKKwkJe0FVRF9ERUVNUEgwX0IxLCAweDM5OUF9LAogCi0JCXsgQVVEX0RFRU1QSDFfRzAsCTB4MEQ4MCB9LAotCQl7IEFVRF9ERUVNUEgxX0EwLAkweDYyNjIgfSwKLQkJeyBBVURfREVFTVBIMV9CMCwJMHgxQzI5IH0sCi0JCXsgQVVEX0RFRU1QSDFfQTEsCTB4M0ZDNjZ9LAotCQl7IEFVRF9ERUVNUEgxX0IxLAkweDM5OUF9LAorCQl7QVVEX0RFRU1QSDFfRzAsIDB4MEQ4MH0sCisJCXtBVURfREVFTVBIMV9BMCwgMHg2MjYyfSwKKwkJe0FVRF9ERUVNUEgxX0IwLCAweDFDMjl9LAorCQl7QVVEX0RFRU1QSDFfQTEsIDB4M0ZDNjZ9LAorCQl7QVVEX0RFRU1QSDFfQjEsIDB4Mzk5QX0sCiAKLQkJeyBBVURfUE9MWVBIODBTQ0FMRUZBQywJMHgwMDAzfSwKKwkJe0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDAwMDN9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGZtX2RlZW1waF83NVtdID0gewotCQl7IEFVRF9ERUVNUEgwX0cwLAkweDA5MUIgfSwKLQkJeyBBVURfREVFTVBIMF9BMCwJMHg2QjY4IH0sCi0JCXsgQVVEX0RFRU1QSDBfQjAsCTB4MTFFQyB9LAotCQl7IEFVRF9ERUVNUEgwX0ExLAkweDNGQzY2fSwKLQkJeyBBVURfREVFTVBIMF9CMSwJMHgzOTlBIH0sCisJCXtBVURfREVFTVBIMF9HMCwgMHgwOTFCfSwKKwkJe0FVRF9ERUVNUEgwX0EwLCAweDZCNjh9LAorCQl7QVVEX0RFRU1QSDBfQjAsIDB4MTFFQ30sCisJCXtBVURfREVFTVBIMF9BMSwgMHgzRkM2Nn0sCisJCXtBVURfREVFTVBIMF9CMSwgMHgzOTlBfSwKIAotCQl7IEFVRF9ERUVNUEgxX0cwLAkweDBBQTAgfSwKLQkJeyBBVURfREVFTVBIMV9BMCwJMHg2QjY4IH0sCi0JCXsgQVVEX0RFRU1QSDFfQjAsCTB4MTFFQyB9LAotCQl7IEFVRF9ERUVNUEgxX0ExLAkweDNGQzY2fSwKLQkJeyBBVURfREVFTVBIMV9CMSwJMHgzOTlBfSwKKwkJe0FVRF9ERUVNUEgxX0cwLCAweDBBQTB9LAorCQl7QVVEX0RFRU1QSDFfQTAsIDB4NkI2OH0sCisJCXtBVURfREVFTVBIMV9CMCwgMHgxMUVDfSwKKwkJe0FVRF9ERUVNUEgxX0ExLCAweDNGQzY2fSwKKwkJe0FVRF9ERUVNUEgxX0IxLCAweDM5OUF9LAogCi0JCXsgQVVEX1BPTFlQSDgwU0NBTEVGQUMsCTB4MDAwM30sCisJCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAzfSwKIAkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07CiAKIAkvKiBJdCBpcyBlbm91Z2ggdG8gbGVhdmUgZGVmYXVsdCB2YWx1ZXM/ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBmbV9ub19kZWVtcGhbXSA9IHsKIAotCQl7IEFVRF9QT0xZUEg4MFNDQUxFRkFDLAkweDAwMDN9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwM30sCiAJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCi0JZHByaW50aygiJXMgKHN0YXR1czogdW5rbm93bilcbiIsX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCIlcyAoc3RhdHVzOiB1bmtub3duKVxuIiwgX19GVU5DVElPTl9fKTsKIAlzZXRfYXVkaW9fc3RhcnQoY29yZSwgU0VMX0ZNUkFESU8pOwogCi0Jc3dpdGNoIChkZWVtcGgpCi0JewotCQljYXNlIEZNX05PX0RFRU1QSDoKLQkJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgZm1fbm9fZGVlbXBoKTsKLQkJCWJyZWFrOworCXN3aXRjaCAoZGVlbXBoKSB7CisJY2FzZSBGTV9OT19ERUVNUEg6CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgZm1fbm9fZGVlbXBoKTsKKwkJYnJlYWs7CiAKLQkJY2FzZSBGTV9ERUVNUEhfNTA6Ci0JCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGZtX2RlZW1waF81MCk7Ci0JCQlicmVhazsKKwljYXNlIEZNX0RFRU1QSF81MDoKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBmbV9kZWVtcGhfNTApOworCQlicmVhazsKIAotCQljYXNlIEZNX0RFRU1QSF83NToKLQkJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgZm1fZGVlbXBoXzc1KTsKLQkJCWJyZWFrOworCWNhc2UgRk1fREVFTVBIXzc1OgorCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGZtX2RlZW1waF83NSk7CisJCWJyZWFrOwogCX0KIAogCXNldF9hdWRpb19maW5pc2goY29yZSwgRU5fRk1SQURJT19BVVRPX1NURVJFTyk7CkBAIC03MjgsMzYgKzcwNSw2NCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitpbnQgY3g4OF9kZXRlY3RfbmljYW0oc3RydWN0IGN4ODhfY29yZSAqY29yZSkKK3sKKwlpbnQgaSwgaiA9IDA7CisKKwlkcHJpbnRrKCJzdGFydCBuaWNhbSBhdXRvZGV0ZWN0LlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCS8qIGlmIGJpdDE9MSB0aGVuIG5pY2FtIGlzIGRldGVjdGVkICovCisJCWogKz0gKChjeF9yZWFkKEFVRF9OSUNBTV9TVEFUVVMyKSAmIDB4MDIpID4+IDEpOworCisJCS8qIDN4IGRldGVjdGVkOiBhYnNvbHV0bHkgc3VyZSBub3cgKi8KKwkJaWYgKGogPT0gMykgeworCQkJZHByaW50aygibmljYW0gaXMgZGV0ZWN0ZWQuXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogd2FpdCBhIGxpdHRsZSBiaXQgZm9yIG5leHQgcmVhZGluZyBzdGF0dXMgKi8KKwkJbXNsZWVwKDEwKTsKKwl9CisKKwlkcHJpbnRrKCJuaWNhbSBpcyBub3QgZGV0ZWN0ZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBjeDg4X3NldF90dmF1ZGlvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpCiB7CiAJc3dpdGNoIChjb3JlLT50dmF1ZGlvKSB7CiAJY2FzZSBXV19CVFNDOgogCQlzZXRfYXVkaW9fc3RhbmRhcmRfQlRTQyhjb3JlLCAwLCBFTl9CVFNDX0FVVE9fU1RFUkVPKTsKIAkJYnJlYWs7Ci0JY2FzZSBXV19OSUNBTV9CR0RLTDoKLQkJc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNX0woY29yZSwwKTsKLQkJYnJlYWs7Ci0JY2FzZSBXV19OSUNBTV9JOgotCQlzZXRfYXVkaW9fc3RhbmRhcmRfUEFMX0koY29yZSwwKTsKLQkJYnJlYWs7Ci0JY2FzZSBXV19BMl9CRzoKLQljYXNlIFdXX0EyX0RLOgotCWNhc2UgV1dfQTJfTToKLQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzEpOworCWNhc2UgV1dfQkc6CisJY2FzZSBXV19ESzoKKwljYXNlIFdXX0k6CisJY2FzZSBXV19MOgorCQkvKiBwcmVwYXJlIGFsbCBkc3AgcmVnaXN0ZXJzICovCisJCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLCBFTl9BMl9GT1JDRV9NT05PMSk7CisKKwkJLyogc2V0IG5pY2FtIG1vZGUgLSBvdGhlcndpc2UKKwkJICAgQVVEX05JQ0FNX1NUQVRVUzIgY29udGFpbnMgd3JvbmcgdmFsdWVzICovCisJCXNldF9hdWRpb19zdGFuZGFyZF9OSUNBTShjb3JlLCBFTl9OSUNBTV9BVVRPX1NURVJFTyk7CisJCWlmICgwID09IGN4ODhfZGV0ZWN0X25pY2FtKGNvcmUpKSB7CisJCQkvKiBmYWxsIGJhY2sgdG8gZm0gLyBhbSBtb25vICovCisJCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzEpOworCQkJY29yZS0+dXNlX25pY2FtID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNvcmUtPnVzZV9uaWNhbSA9IDE7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBXV19FSUFKOgogCQlzZXRfYXVkaW9fc3RhbmRhcmRfRUlBSihjb3JlKTsKIAkJYnJlYWs7CiAJY2FzZSBXV19GTToKLQkJc2V0X2F1ZGlvX3N0YW5kYXJkX0ZNKGNvcmUsRk1fTk9fREVFTVBIKTsKLQkJYnJlYWs7Ci0JY2FzZSBXV19TWVNURU1fTF9BTToKLQkJc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNX0woY29yZSwgMSk7CisJCXNldF9hdWRpb19zdGFuZGFyZF9GTShjb3JlLCBGTV9OT19ERUVNUEgpOwogCQlicmVhazsKIAljYXNlIFdXX05PTkU6CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlcy8wOiB1bmtub3duIHR2IGF1ZGlvIG1vZGUgWyVkXVxuIiwKLQkJY29yZS0+bmFtZSwgY29yZS0+dHZhdWRpbyk7CisJCSAgICAgICBjb3JlLT5uYW1lLCBjb3JlLT50dmF1ZGlvKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybjsKQEAgLTc2NiwyNCArNzcxLDE2IEBACiB2b2lkIGN4ODhfbmV3c3RhdGlvbihzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKQogewogCWNvcmUtPmF1ZGlvbW9kZV9tYW51YWwgPSBVTlNFVDsKLQotCXN3aXRjaCAoY29yZS0+dHZhdWRpbykgewotCWNhc2UgV1dfU1lTVEVNX0xfQU06Ci0JCS8qIHRyeSBuaWNhbSAuLi4gKi8KLQkJY29yZS0+YXVkaW9tb2RlX2N1cnJlbnQgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU1fTChjb3JlLCAxKTsKLQkJYnJlYWs7Ci0JfQogfQogCiB2b2lkIGN4ODhfZ2V0X3N0ZXJlbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKIHsKLQlzdGF0aWMgY2hhciAqbVtdID0geyJzdGVyZW8iLCAiZHVhbCBtb25vIiwgIm1vbm8iLCAic2FwIn07Ci0Jc3RhdGljIGNoYXIgKnBbXSA9IHsibm8gcGlsb3QiLCAicGlsb3QgYzEiLCAicGlsb3QgYzIiLCAiPyJ9OwotCXUzMiByZWcsbW9kZSxwaWxvdDsKKwlzdGF0aWMgY2hhciAqbVtdID0geyAic3RlcmVvIiwgImR1YWwgbW9ubyIsICJtb25vIiwgInNhcCIgfTsKKwlzdGF0aWMgY2hhciAqcFtdID0geyAibm8gcGlsb3QiLCAicGlsb3QgYzEiLCAicGlsb3QgYzIiLCAiPyIgfTsKKwl1MzIgcmVnLCBtb2RlLCBwaWxvdDsKIAotCXJlZyAgID0gY3hfcmVhZChBVURfU1RBVFVTKTsKLQltb2RlICA9IHJlZyAmIDB4MDM7CisJcmVnID0gY3hfcmVhZChBVURfU1RBVFVTKTsKKwltb2RlID0gcmVnICYgMHgwMzsKIAlwaWxvdCA9IChyZWcgPj4gMikgJiAweDAzOwogCiAJaWYgKGNvcmUtPmFzdGF0ICE9IHJlZykKQEAgLTgwMCwxNCArNzk3LDEzIEBACiAKICMgaWYgMAogCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9TQVAgfAotCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOworCSAgICBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwogCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCXQtPmF1ZG1vZGUgICAgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKIAlzd2l0Y2ggKGNvcmUtPnR2YXVkaW8pIHsKIAljYXNlIFdXX0JUU0M6Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAotCQkJVjRMMl9UVU5FUl9DQVBfU0FQOworCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwogCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCQlpZiAoMSA9PSBwaWxvdCkgewogCQkJLyogU0FQICovCkBAIC04MTksMTMgKzgxNSwxNSBAQAogCWNhc2UgV1dfQTJfTToKIAkJaWYgKDEgPT0gcGlsb3QpIHsKIAkJCS8qIHN0ZXJlbyAqLwotCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQl0LT5yeHN1YmNoYW5zID0KKwkJCSAgICBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCQkJaWYgKDAgPT0gbW9kZSkKIAkJCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAkJfQogCQlpZiAoMiA9PSBwaWxvdCkgewogCQkJLyogZHVhbCBsYW5ndWFnZSAtLSBGSVhNRSAqLwotCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7CisJCQl0LT5yeHN1YmNoYW5zID0KKwkJCSAgICBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwogCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKIAkJfQogCQlicmVhazsKQEAgLTg0MCw3ICs4MzgsNyBAQAogCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJCQl0LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJfQotCQlicmVhayA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIG5vdGhpbmcgKi8KIAkJYnJlYWs7CkBAIC04NTEsNyArODQ5LDcgQEAKIAogdm9pZCBjeDg4X3NldF9zdGVyZW8oc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIG1vZGUsIGludCBtYW51YWwpCiB7Ci0JdTMyIGN0bCAgPSBVTlNFVDsKKwl1MzIgY3RsID0gVU5TRVQ7CiAJdTMyIG1hc2sgPSBVTlNFVDsKIAogCWlmIChtYW51YWwpIHsKQEAgLTg3OSw2OCArODc3LDU4IEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKLQljYXNlIFdXX0EyX0JHOgotCWNhc2UgV1dfQTJfREs6Ci0JY2FzZSBXV19BMl9NOgotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLCBFTl9BMl9GT1JDRV9NT05PMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6Ci0JCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLCBFTl9BMl9GT1JDRV9NT05PMik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfU1RFUkVPKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1dfTklDQU1fQkdES0w6Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQkJY3RsICA9IEVOX05JQ0FNX0ZPUkNFX01PTk8xOwotCQkJbWFzayA9IDB4M2Y7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCQljdGwgID0gRU5fTklDQU1fQVVUT19NT05PMjsKLQkJCW1hc2sgPSAweDNmOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJCWN0bCAgPSBFTl9OSUNBTV9GT1JDRV9TVEVSRU8gfCBFTl9ETVRSWF9MUjsKLQkJCW1hc2sgPSAweDkzZjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1dfU1lTVEVNX0xfQU06Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMTogIC8qIEZJWE1FICovCi0JCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU1fTChjb3JlLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU1fTChjb3JlLCAxKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1dfTklDQU1fSToKLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX1BBTF9JKGNvcmUsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJCXNldF9hdWRpb19zdGFuZGFyZF9QQUxfSShjb3JlLCAxKTsKLQkJCWJyZWFrOworCWNhc2UgV1dfQkc6CisJY2FzZSBXV19ESzoKKwljYXNlIFdXX0k6CisJY2FzZSBXV19MOgorCQlpZiAoMSA9PSBjb3JlLT51c2VfbmljYW0pIHsKKwkJCXN3aXRjaCAobW9kZSkgeworCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQkJCXNldF9hdWRpb19zdGFuZGFyZF9OSUNBTShjb3JlLAorCQkJCQkJCSBFTl9OSUNBTV9GT1JDRV9NT05PMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU0oY29yZSwKKwkJCQkJCQkgRU5fTklDQU1fRk9SQ0VfTU9OTzIpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQkJCXNldF9hdWRpb19zdGFuZGFyZF9OSUNBTShjb3JlLAorCQkJCQkJCSBFTl9OSUNBTV9GT1JDRV9TVEVSRU8pOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChjb3JlLT50dmF1ZGlvID09IFdXX0kpIHx8IChjb3JlLT50dmF1ZGlvID09IFdXX0wpKSB7CisJCQkJLyogZmFsbCBiYWNrIHRvIGZtIC8gYW0gbW9ubyAqLworCQkJCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLCBFTl9BMl9GT1JDRV9NT05PMSk7CisJCQl9IGVsc2UgeworCQkJCS8qIFRPRE86IEFkZCBBMiBhdXRvZGVjdGlvbiAqLworCQkJCXN3aXRjaCAobW9kZSkgeworCQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCQkJCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLAorCQkJCQkJCSAgICAgIEVOX0EyX0ZPUkNFX01PTk8xKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCQkJCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLAorCQkJCQkJCSAgICAgIEVOX0EyX0ZPUkNFX01PTk8yKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwKKwkJCQkJCQkgICAgICBFTl9BMl9GT1JDRV9TVEVSRU8pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXV19GTToKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCQljdGwgID0gRU5fRk1SQURJT19GT1JDRV9NT05POworCQkJY3RsID0gRU5fRk1SQURJT19GT1JDRV9NT05POwogCQkJbWFzayA9IDB4M2Y7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQkJY3RsICA9IEVOX0ZNUkFESU9fQVVUT19TVEVSRU87CisJCQljdGwgPSBFTl9GTVJBRElPX0FVVE9fU1RFUkVPOwogCQkJbWFzayA9IDB4M2Y7CiAJCQlicmVhazsKIAkJfQpAQCAtOTcwLDggKzk1OCw4IEBACiAJCQlicmVhazsKIAogCQkvKiBqdXN0IG1vbml0b3IgdGhlIGF1ZGlvIHN0YXR1cyBmb3Igbm93IC4uLiAqLwotCQltZW1zZXQoJnQsMCxzaXplb2YodCkpOwotCQljeDg4X2dldF9zdGVyZW8oY29yZSwmdCk7CisJCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKwkJY3g4OF9nZXRfc3RlcmVvKGNvcmUsICZ0KTsKIAogCQlpZiAoVU5TRVQgIT0gY29yZS0+YXVkaW9tb2RlX21hbnVhbCkKIAkJCS8qIG1hbnVhbGx5IHNldCwgZG9uJ3QgZG8gYW55dGhpbmcuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCAzZGJjMDc0Li4yNGE0OGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTM0LDYgKzM0LDkgQEAKIAogI2luY2x1ZGUgImN4ODguaCIKIAorLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xMDAsNyArMTAzLDcgQEAKIAkJLmlkICAgICAgICA9IFY0TDJfU1REX1BBTF9JLAogCQkuY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXRQQUwsCiAJCS5jeG9mb3JtYXQgPSAweDE4MWYwMDA4LAotICAgICAgICB9LHsKKwl9LHsKIAkJLm5hbWUgICAgICA9ICJQQUwtTSIsCiAJCS5pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfTSwKIAkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMTSwKQEAgLTQ3MCw3ICs0NzMsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CiAKIAlpZiAoIWxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkgICAgICAgIGJ1ZiA9IGxpc3RfZW50cnkocS0+YWN0aXZlLm5leHQsIHN0cnVjdCBjeDg4X2J1ZmZlciwgdmIucXVldWUpOworCQlidWYgPSBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3g4OF9idWZmZXIsIHZiLnF1ZXVlKTsKIAkJZHByaW50aygyLCJyZXN0YXJ0X3F1ZXVlIFslcC8lZF06IHJlc3RhcnQgZG1hXG4iLAogCQkJYnVmLCBidWYtPnZiLmkpOwogCQlzdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYpOwpAQCAtNDg2LDcgKzQ4OSw3IEBACiAJZm9yICg7OykgewogCQlpZiAobGlzdF9lbXB0eSgmcS0+cXVldWVkKSkKIAkJCXJldHVybiAwOwotCSAgICAgICAgYnVmID0gbGlzdF9lbnRyeShxLT5xdWV1ZWQubmV4dCwgc3RydWN0IGN4ODhfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWJ1ZiA9IGxpc3RfZW50cnkocS0+cXVldWVkLm5leHQsIHN0cnVjdCBjeDg4X2J1ZmZlciwgdmIucXVldWUpOwogCQlpZiAoTlVMTCA9PSBwcmV2KSB7CiAJCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCZxLT5hY3RpdmUpOwpAQCAtNzgzLDExICs3ODYsMTEgQEAKIAkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsQVVEQ19TRVRfUkFESU8sTlVMTCk7CiAJfQogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdAotdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGN4ODgwMF9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTkyMiw3ICs5MjUsNyBAQAogewogCS8qIHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7ICovCiAJc3RydWN0IGN4ODhfY3RybCAqYyA9IE5VTEw7Ci0gICAgICAgIHUzMiB2X3NhdF92YWx1ZTsKKwl1MzIgdl9zYXRfdmFsdWU7CiAJdTMyIHZhbHVlOwogCWludCBpOwogCkBAIC0xMTg3LDcgKzExOTAsNyBAQAogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CiAJCXJldHVybiBjeDg4MDBfdHJ5X2ZtdChkZXYsZmgsZik7CiAJfQotCisjaWZkZWYgSEFWRV9WNEwxCiAJLyogLS0tIHN0cmVhbWluZyBjYXB0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ0dNQlVGOgogCXsKQEAgLTEyMTMsNiArMTIxNiw3IEBACiAJCX0KIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAJY2FzZSBWSURJT0NfUkVRQlVGUzoKIAkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgYXJnKTsKIApAQCAtMTI0NCw3ICsxMjQ4LDYgQEAKIAkJcmVzX2ZyZWUoZGV2LGZoLHJlcyk7CiAJCXJldHVybiAwOwogCX0KLQogCWRlZmF1bHQ6CiAJCXJldHVybiBjeDg4X2RvX2lvY3RsKCBpbm9kZSwgZmlsZSwgZmgtPnJhZGlvLCBjb3JlLCBjbWQsIGFyZywgdmlkZW9fZG9faW9jdGwgKTsKIAl9CkBAIC0xMjUyLDE1ICsxMjU1LDEzIEBACiB9CiAKIGludCBjeDg4X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgcmFkaW8sCi0gICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCkKKwkJICBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCkKIHsKIAlpbnQgZXJyOwogCisJZHByaW50ayggMSwgIkNPUkUgSU9DVEw6IDB4JXhcbiIsIGNtZCApOwogCWlmICh2aWRlb19kZWJ1ZyA+IDEpCiAJCWN4ODhfcHJpbnRfaW9jdGwoY29yZS0+bmFtZSxjbWQpOwotCXByaW50ayggS0VSTl9JTkZPICJDT1JFIElPQ1RMOiAweCV4XG4iLCBjbWQgKTsKLQljeDg4X3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKLQlkcHJpbnRrKCAxLCAiQ09SRSBJT0NUTDogMHgleFxuIiwgY21kICk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCS8qIC0tLS0tLS0tLS0gdHYgbm9ybXMgLS0tLS0tLS0tLSAqLwpAQCAtMTQwMSw3ICsxNDAyLDcgQEAKIAogCQljeDg4X2dldF9zdGVyZW8oY29yZSAsdCk7CiAJCXJlZyA9IGN4X3JlYWQoTU9fREVWSUNFX1NUQVRVUyk7Ci0gICAgICAgICAgICAgICAgdC0+c2lnbmFsID0gKHJlZyAmICgxPDw1KSkgPyAweGZmZmYgOiAweDAwMDA7CisJCXQtPnNpZ25hbCA9IChyZWcgJiAoMTw8NSkpID8gMHhmZmZmIDogMHgwMDAwOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfU19UVU5FUjoKQEAgLTE0ODgsNyArMTQ4OSw3IEBACiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAogCQltZW1zZXQoY2FwLDAsc2l6ZW9mKCpjYXApKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoY2FwLT5kcml2ZXIsICJjeDg4MDAiKTsKKwkJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3g4ODAwIik7CiAJCXN0cmxjcHkoY2FwLT5jYXJkLCBjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubmFtZSwKIAkJCXNpemVvZihjYXAtPmNhcmQpKTsKIAkJc3ByaW50ZihjYXAtPmJ1c19pbmZvLCJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBjaSkpOwpAQCAtMTUwNSw2ICsxNTA2LDcgQEAKIAogCQltZW1zZXQodCwwLHNpemVvZigqdCkpOwogCQlzdHJjcHkodC0+bmFtZSwgIlJhZGlvIik7CisJCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCiAJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19HX1RVTkVSLHQpOwogCQlyZXR1cm4gMDsKQEAgLTE1MzksNiArMTU0MSw3IEBACiAJCSppZCA9IDA7CiAJCXJldHVybiAwOwogCX0KKyNpZmRlZiBIQVZFX1Y0TDEKIAljYXNlIFZJRElPQ1NUVU5FUjoKIAl7CiAJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKQEAgLTE1NDksNiArMTU1Miw3IEBACiAJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ1NUVU5FUix2KTsKIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAJY2FzZSBWSURJT0NfU19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwpAQCAtMTgyOSw4ICsxODMzLDggQEAKIAogCS8qIHByaW50IHBjaSBpbmZvICovCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmZGV2LT5wY2lfcmV2KTsKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICAmZGV2LT5wY2lfbGF0KTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXMvMDogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsICIKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgICZkZXYtPnBjaV9sYXQpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzA6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCiAJICAgICAgICJsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsIGNvcmUtPm5hbWUsCiAJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpLCBkZXYtPnBjaV9yZXYsIHBjaV9kZXYtPmlycSwKIAkgICAgICAgZGV2LT5wY2lfbGF0LHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApKTsKQEAgLTE5NDYsNyArMTk1MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjeDg4MDBfZmluaWRldihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLSAgICAgICAgc3RydWN0IGN4ODgwMF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKIAkvKiBzdG9wIHRocmVhZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggZjQ4ZGQ0My4uYjE5ZDNhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAKICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgpAQCAtMTQ4LDcgKzE0OCw3IEBACiAjZGVmaW5lIENYODhfQk9BUkRfUElYRUxWSUVXICAgICAgICAgICAgICAgIDMKICNkZWZpbmUgQ1g4OF9CT0FSRF9BVElfV09OREVSX1BSTyAgICAgICAgICAgNAogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJUICAgICA1Ci0jZGVmaW5lIENYODhfQk9BUkRfQVZFUlRWXzMwMyAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1g4OF9CT0FSRF9BVkVSVFZfU1RVRElPXzMwMyAgICAgICAgNgogI2RlZmluZSBDWDg4X0JPQVJEX01TSV9UVkFOWVdIRVJFX01BU1RFUiAgICA3CiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVjIwMDAgICAgICAgICAgIDgKICNkZWZpbmUgQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDAgICAgICAgICAgOQpAQCAtMTc0LDYgKzE3NCwxMSBAQAogI2RlZmluZSBDWDg4X0JPQVJEX0FEU1RFQ0hfRFZCX1RfUENJICAgICAgICAgIDI5CiAjZGVmaW5lIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMSAgMzAKICNkZWZpbmUgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfR09MRCAzMQorI2RlZmluZSBDWDg4X0JPQVJEX0FWRVJNRURJQV9VTFRSQVRWX01DXzU1MCAzMgorI2RlZmluZSBDWDg4X0JPQVJEX0tXT1JMRF9WU1RSRUFNX0VYUEVSVF9EVkQgMzMKKyNkZWZpbmUgQ1g4OF9CT0FSRF9BVElfSERUVldPTkRFUiAgICAgICAgICAzNAorI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMCAgICAgICAgIDM1CisjZGVmaW5lIENYODhfQk9BUkRfQVZFUlRWXzMwMyAgICAgICAgICAgICAgMzYKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCkBAIC0yMDMsOCArMjA4LDggQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICB0ZGE5ODg3X2NvbmY7CiAJc3RydWN0IGN4ODhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0NYODhfSU5QVVRdOwogCXN0cnVjdCBjeDg4X2lucHV0ICAgICAgIHJhZGlvOwotCWludCAgICAgICAgICAgICAgICAgICAgIGJsYWNrYmlyZDoxOwotCWludCAgICAgICAgICAgICAgICAgICAgIGR2YjoxOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGJsYWNrYmlyZDoxOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGR2YjoxOwogfTsKIAogc3RydWN0IGN4ODhfc3ViaWQgewpAQCAtMjU1LDggKzI2MCw4IEBACiAJLyogcGNpIHN0dWZmICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2J1czsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBwY2lfc2xvdDsKLSAgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbG1taW87Ci0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmJtbWlvOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmxtbWlvOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmJtbWlvOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1tTSEFET1dfTUFYXTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBwY2lfaXJxbWFzazsKIApAQCAtMjg3LDYgKzI5Miw3IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9tb2RlX2N1cnJlbnQ7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgYXN0YXQ7CisJdTMyCQkJICAgdXNlX25pY2FtOwogCiAJLyogSVIgcmVtb3RlIGNvbnRyb2wgc3RhdGUgKi8KIAlzdHJ1Y3QgY3g4OF9JUiAgICAgICAgICAgICAqaXI7CkBAIC0zNzAsNiArMzc2LDE0IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ7CiB9OwogCisvKiBUT0RPOiBtb3ZlIHRoaXMgdG8gc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiA/ICovCitzdHJ1Y3QgYmxhY2tiaXJkX2RuciB7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICBtb2RlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgIHNwYXRpYWw7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhbDsKK307CisKIHN0cnVjdCBjeDg4MDJfZGV2IHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAgICAgICAgICAqY29yZTsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKQEAgLTQwMCw2ICs0MTQsMTAgQEAKIAogCS8qIGZvciBzd2l0Y2hpbmcgbW9kdWxhdGlvbiB0eXBlcyAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIHRzX2dlbl9jbnRybDsKKworCS8qIG1wZWcgcGFyYW1zICovCisJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiBwYXJhbXM7CisJc3RydWN0IGJsYWNrYmlyZF9kbnIgICAgICAgZG5yX3BhcmFtczsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC01MTQsMjIgKzUzMiwyMCBAQAogCiAjZGVmaW5lIFdXX05PTkUJCSAxCiAjZGVmaW5lIFdXX0JUU0MJCSAyCi0jZGVmaW5lIFdXX05JQ0FNX0kJIDMKLSNkZWZpbmUgV1dfTklDQU1fQkdES0wJIDQKLSNkZWZpbmUgV1dfQTEJCSA1Ci0jZGVmaW5lIFdXX0EyX0JHCSA2Ci0jZGVmaW5lIFdXX0EyX0RLCSA3Ci0jZGVmaW5lIFdXX0EyX00JCSA4Ci0jZGVmaW5lIFdXX0VJQUoJCSA5Ci0jZGVmaW5lIFdXX1NZU1RFTV9MX0FNCTEwCi0jZGVmaW5lIFdXX0kyU1BUCTExCi0jZGVmaW5lIFdXX0ZNCQkxMgorI2RlZmluZSBXV19CRwkJIDMKKyNkZWZpbmUgV1dfREsJCSA0CisjZGVmaW5lIFdXX0kJCSA1CisjZGVmaW5lIFdXX0wJCSA2CisjZGVmaW5lIFdXX0VJQUoJCSA3CisjZGVmaW5lIFdXX0kyU1BUCSA4CisjZGVmaW5lIFdXX0ZNCQkgOQogCiB2b2lkIGN4ODhfc2V0X3R2YXVkaW8oc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CiB2b2lkIGN4ODhfbmV3c3RhdGlvbihzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKTsKIHZvaWQgY3g4OF9nZXRfc3RlcmVvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCB2NGwyX3R1bmVyICp0KTsKIHZvaWQgY3g4OF9zZXRfc3RlcmVvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHUzMiBtb2RlLCBpbnQgbWFudWFsKTsKIGludCBjeDg4X2F1ZGlvX3RocmVhZCh2b2lkICpkYXRhKTsKK2ludCBjeDg4X2RldGVjdF9uaWNhbShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4ODgtaW5wdXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01NDEsNyArNTU3LDggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDg4LW1wZWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1pbnQgY3g4ODAyX2J1Zl9wcmVwYXJlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKTsKK2ludCBjeDg4MDJfYnVmX3ByZXBhcmUoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IGN4ODhfYnVmZmVyICpidWYsCisJCQllbnVtIHY0bDJfZmllbGQgZmllbGQpOwogdm9pZCBjeDg4MDJfYnVmX3F1ZXVlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKTsKIHZvaWQgY3g4ODAyX2NhbmNlbF9idWZmZXJzKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpOwogCkBAIC01NjIsNiArNTc5LDEwIEBACiBleHRlcm4gaW50ICgqY3g4OF9pb2N0bF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAoKmN4ODhfaW9jdGxfdHJhbnNsYXRvcikodW5zaWduZWQgaW50IGNtZCk7Cit2b2lkIGJsYWNrYmlyZF9zZXRfcGFyYW1zKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsCisJCQkJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqcGFyYW1zKTsKK3ZvaWQgYmxhY2tiaXJkX3NldF9kbnJfcGFyYW1zKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsCisJCQkJc3RydWN0IGJsYWNrYmlyZF9kbnIqIGRucl9wYXJhbXMpOwogCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1ZmQwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY29uZmlnIFZJREVPX0VNMjhYWAorCXRyaXN0YXRlICJFbXBpYSBFTTI4MDAvMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVVNCICYmIEkyQworCXNlbGVjdCBWSURFT19CVUYKKwlzZWxlY3QgVklERU9fVFVORVIKKwlzZWxlY3QgVklERU9fVFZFRVBST00KKwlzZWxlY3QgVklERU9fSVIKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBFbXBpYSAyOHh4IGJhc2VkIFRWIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbTI4eHgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0NTdhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorZW0yOHh4LW9ianMgICAgIDo9IGVtMjh4eC12aWRlby5vIGVtMjh4eC1pMmMubyBlbTI4eHgtY2FyZHMubyBlbTI4eHgtY29yZS5vIFwKKwkJICAgZW0yOHh4LWlucHV0Lm8KKworb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Nzc5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAgIGVtMjh4eC1jYXJkcy5jIC0gZHJpdmVyIGZvciBFbXBpYSBFTTI4MDAvRU0yODIwLzI4NDAgVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTHVkb3ZpY28gQ2F2ZWRvbiA8Y2F2ZWRvbkBzc3N1cC5pdD4KKwkJICAgICAgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKwkJICAgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPgorCQkgICAgICBTYXNjaGEgU29tbWVyIDxzYXNjaGFzb21tZXJAZnJlZW5ldC5kZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgorI2luY2x1ZGUgIm1zcDM0MDAuaCIKKworI2luY2x1ZGUgImVtMjh4eC5oIgorCitzdHJ1Y3QgZW0yOHh4X2JvYXJkIGVtMjh4eF9ib2FyZHNbXSA9IHsKKwlbRU0yODAwX0JPQVJEX1VOS05PV05dID0geworCQkubmFtZSAgICAgICAgID0gIlVua25vd24gRU0yODAwIHZpZGVvIGdyYWJiZXIiLAorCQkuaXNfZW0yODAwICAgID0gMSwKKwkJLnZjaGFubmVscyAgICA9IDIsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCisJW0VNMjgyMF9CT0FSRF9VTktOT1dOXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJVbmtub3duIEVNMjgyMC8yODQwIHZpZGVvIGdyYWJiZXIiLAorCQkuaXNfZW0yODAwICAgID0gMCwKKwkJLnZjaGFubmVscyAgICA9IDIsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCisJW0VNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCIiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSAyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCisJW0VNMjgyMF9CT0FSRF9QSU5OQUNMRV9VU0JfMl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUgUENUViBVU0IgMiIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVklERU9fTU9ERV9QQUwsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gMiwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDksCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorCVtFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIDIiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFZJREVPX01PREVfTlRTQywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVHxUREE5ODg3X1BPUlQxX0FDVElWRXxUREE5ODg3X1BPUlQyX0FDVElWRSwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmhhc19tc3AzNHh4ICA9IDEsCisJCS8qRklYTUU6IFMtVmlkZW8gbm90IHRlc3RlZCAqLworCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSA2LAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDIsCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorCVtFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMl0gPSB7CisJCS5uYW1lCQk9ICJNU0kgVk9YIFVTQiAyLjAiLAorCQkudmNoYW5uZWxzCT0gMywKKwkJLm5vcm0JCT0gVklERU9fTU9ERV9QQUwsCisJCS50dW5lcl90eXBlCT0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mCT0gVERBOTg4N19QUkVTRU5UfFREQTk4ODdfUE9SVDFfQUNUSVZFfFREQTk4ODdfUE9SVDJfQUNUSVZFLAorCQkuaGFzX3R1bmVyCT0gMSwKKwkJLmRlY29kZXIgICAgICAgID0gRU0yOFhYX1NBQTcxMTQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gNCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDksCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorCVtFTTI4MDBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yMDBdID0geworCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjAwIFVTQiIsCisJCS5pc19lbTI4MDAgICAgPSAxLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFZJREVPX01PREVfUEFMLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDIsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSA5LAorCQkJLmFtdXggICAgID0gMSwKKwkJfX0sCisJfSwKKwlbRU0yODAwX0JPQVJEX0xFQURURUtfV0lORkFTVF9VU0JJSV0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IFVTQiBJSSIsCisJCS5pc19lbTI4MDAgICAgPSAxLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFZJREVPX01PREVfUEFMLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDIsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSA5LAorCQkJLmFtdXggICAgID0gMSwKKwkJfX0sCisJfSwKKwlbRU0yODAwX0JPQVJEX0tXT1JMRF9VU0IyODAwXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgVVNCMjgwMCIsCisJCS5pc19lbTI4MDAgICAgPSAxLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFZJREVPX01PREVfUEFMLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19BVFNDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDIsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSA5LAorCQkJLmFtdXggICAgID0gMSwKKwkJfX0sCisJfSwKKwlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUgRGF6emxlIERWQyA5MCIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVklERU9fTU9ERV9QQUwsCisJCS5oYXNfdHVuZXIgICAgPSAwLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCit9OworY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODAwKSwgLmRyaXZlcl9pbmZvID0gRU0yODAwX0JPQVJEX1VOS05PV04gfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4MjApLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMiB9LAorCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNiksIC5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MCB9LAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDIwOCksIC5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9VU0JfMiB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NDIwMCksIC5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMDcpLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwIH0sCisJeyB9LAorfTsKKwordm9pZCBlbTI4eHhfY2FyZF9zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJLyogcmVxdWVzdCBzb21lIG1vZHVsZXMgKi8KKwlpZiAoZGV2LT5tb2RlbCA9PSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yKSB7CisJCXN0cnVjdCB0dmVlcHJvbSB0djsKKwkJc3RydWN0IHY0bDJfYXVkaW9vdXQgYW87CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJcmVxdWVzdF9tb2R1bGUoInR2ZWVwcm9tIik7CisJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CisJCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CisjZW5kaWYKKwkJLyogQ2FsbCBmaXJzdCBUVmVlcHJvbSAqLworCisJCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOworCQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19jbGllbnQsICZ0diwgZGV2LT5lZWRhdGEpOworCisJCWRldi0+dHVuZXJfdHlwZT0gdHYudHVuZXJfdHlwZTsKKwkJaWYgKHR2LmF1ZGlvX3Byb2Nlc3NvciA9PSBBVURJT19DSElQX01TUDM0WFgpIHsKKwkJCWRldi0+aGFzX21zcDM0eHg9MTsKKwkJCW1lbXNldCAoJmFvLDAsc2l6ZW9mKGFvKSk7CisKKwkJCWFvLmluZGV4PTI7CisJCQlhby5tb2RlPVY0TDJfQVVETU9ERV8zMkJJVFM7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0FVRE9VVCwgJmFvKTsKKwkJfSBlbHNlCisJCQlkZXYtPmhhc19tc3AzNHh4PTA7CisJfQorfQorCitFWFBPUlRfU1lNQk9MKGVtMjh4eF9ib2FyZHMpOworRVhQT1JUX1NZTUJPTChlbTI4eHhfYmNvdW50KTsKK0VYUE9SVF9TWU1CT0woZW0yOHh4X2lkX3RhYmxlKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBlbTI4eHhfaWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0YmMwMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtMCwwICsxLDgxNyBAQAorLyoKKyAgIGVtMjh4eC1jb3JlLmMgLSBkcml2ZXIgZm9yIEVtcGlhIEVNMjgwMC9FTTI4MjAvMjg0MCBVU0IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PgorCQkgICAgICBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPgorCQkgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+CisJCSAgICAgIFNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAiZW0yOHh4LmgiCisKKy8qICNkZWZpbmUgRU5BQkxFX0RFQlVHX0lTT0NfRlJBTUVTICovCisKK3Vuc2lnbmVkIGludCBjb3JlX2RlYnVnOworbW9kdWxlX3BhcmFtKGNvcmVfZGVidWcsaW50LDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjb3JlX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7CisKKyNkZWZpbmUgZW0yOHh4X2NvcmVkYmcoZm10LCBhcmcuLi4pIGRvIHtcCisJaWYgKGNvcmVfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgOiJmbXQsIFwKKwkJCSBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwordW5zaWduZWQgaW50IHJlZ19kZWJ1ZzsKK21vZHVsZV9wYXJhbShyZWdfZGVidWcsaW50LDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZWdfZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbVVJCIHJlZ10iKTsKKworI2RlZmluZSBlbTI4eHhfcmVnZGJnKGZtdCwgYXJnLi4uKSBkbyB7XAorCWlmIChyZWdfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgOiJmbXQsIFwKKwkJCSBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwordW5zaWduZWQgaW50IGlzb2NfZGVidWc7Cittb2R1bGVfcGFyYW0oaXNvY19kZWJ1ZyxpbnQsMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzb2NfZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbaXNvYyB0cmFuc2ZlcnNdIik7CisKKyNkZWZpbmUgZW0yOHh4X2lzb2NkYmcoZm10LCBhcmcuLi4pIGRvIHtcCisJaWYgKGlzb2NfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgOiJmbXQsIFwKKwkJCSBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBhbHQgPSBFTTI4WFhfUElOT1VUOworbW9kdWxlX3BhcmFtKGFsdCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYWx0LCAiYWx0ZXJuYXRlIHNldHRpbmcgdG8gdXNlIGZvciB2aWRlbyBlbmRwb2ludCIpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKKwkiMCIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJTVFVORVIiLCAiR1BJQ1QiLCAiU1BJQ1QiLAorCSJDQ0FQVFVSRSIsICJHV0lOIiwgIlNXSU4iLCAiR0ZCVUYiLCAiU0ZCVUYiLCAiS0VZIiwgIkdGUkVRIiwKKwkiU0ZSRVEiLCAiR0FVRElPIiwgIlNBVURJTyIsICJTWU5DIiwgIk1DQVBUVVJFIiwgIkdNQlVGIiwgIkdVTklUIiwKKwkiR0NBUFRVUkUiLCAiU0NBUFRVUkUiLCAiU1BMQVlNT0RFIiwgIlNXUklURU1PREUiLCAiR1BMQVlJTkZPIiwKKwkiU01JQ1JPQ09ERSIsICJHVkJJRk1UIiwgIlNWQklGTVQiIH07CisjZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCisKK3N0YXRpYyBjb25zdCBjaGFyICp2NGwyX2lvY3Rsc1tdID0geworCSJRVUVSWUNBUCIsICIxIiwgIkVOVU1fUElYRk1UIiwgIkVOVU1fRkJVRkZNVCIsICJHX0ZNVCIsICJTX0ZNVCIsCisJIkdfQ09NUCIsICJTX0NPTVAiLCAiUkVRQlVGUyIsICJRVUVSWUJVRiIsICJHX0ZCVUYiLCAiU19GQlVGIiwKKwkiR19XSU4iLCAiU19XSU4iLCAiUFJFVklFVyIsICJRQlVGIiwgIjE2IiwgIkRRQlVGIiwgIlNUUkVBTU9OIiwKKwkiU1RSRUFNT0ZGIiwgIkdfUEVSRiIsICJHX1BBUk0iLCAiU19QQVJNIiwgIkdfU1REIiwgIlNfU1REIiwKKwkiRU5VTVNURCIsICJFTlVNSU5QVVQiLCAiR19DVFJMIiwgIlNfQ1RSTCIsICJHX1RVTkVSIiwgIlNfVFVORVIiLAorCSJHX0ZSRVEiLCAiU19GUkVRIiwgIkdfQVVESU8iLCAiU19BVURJTyIsICIzNSIsICJRVUVSWUNUUkwiLAorCSJRVUVSWU1FTlUiLCAiR19JTlBVVCIsICJTX0lOUFVUIiwgIkVOVU1DVlQiLCAiNDEiLCAiNDIiLCAiNDMiLAorCSI0NCIsICI0NSIsICAiR19PVVRQVVQiLCAiU19PVVRQVVQiLCAiRU5VTU9VVFBVVCIsICJHX0FVRE9VVCIsCisJIlNfQVVET1VUIiwgIkVOVU1GWCIsICJHX0VGRkVDVCIsICJTX0VGRkVDVCIsICJHX01PRFVMQVRPUiIsCisJIlNfTU9EVUxBVE9SIgorfTsKKyNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKKwordm9pZCBlbTI4eHhfcHJpbnRfaW9jdGwoY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNtZCkKK3sKKwljaGFyICpkaXI7CisKKwlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKKwljYXNlIF9JT0NfTk9ORTogICAgICAgICAgICAgIGRpciA9ICItLSI7IGJyZWFrOworCWNhc2UgX0lPQ19SRUFEOiAgICAgICAgICAgICAgZGlyID0gInItIjsgYnJlYWs7CisJY2FzZSBfSU9DX1dSSVRFOiAgICAgICAgICAgICBkaXIgPSAiLXciOyBicmVhazsKKwljYXNlIF9JT0NfUkVBRCB8IF9JT0NfV1JJVEU6IGRpciA9ICJydyI7IGJyZWFrOworCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgZGlyID0gIj8/IjsgYnJlYWs7CisJfQorCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKKwljYXNlICd2JzoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDEsICVzLCBWSURJT0MlcylcbiIsCisJCSAgICAgICBuYW1lLCBjbWQsIGRpciwgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/CisJCSAgICAgICB2NGwxX2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIj8/PyIpOworCQlicmVhazsKKwljYXNlICdWJzoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKHY0bDIsICVzLCBWSURJT0NfJXMpXG4iLAorCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIChfSU9DX05SKGNtZCkgPCBWNEwyX0lPQ1RMUykgPworCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpb2N0bCAweCUwOHggKD8/PywgJXMsICMlZClcbiIsCisJCSAgICAgICBuYW1lLCBjbWQsIGRpciwgX0lPQ19OUihjbWQpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICpydm1hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCW1lbSA9IHZtYWxsb2NfMzIoKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2ZnJlZShtZW0pOworfQorCisvKgorICogZW0yOHh4X3JlcXVlc3RfYnVmZmVycygpCisgKiBhbGxvY2F0ZSBhIG51bWJlciBvZiBidWZmZXJzCisgKi8KK3UzMiBlbTI4eHhfcmVxdWVzdF9idWZmZXJzKHN0cnVjdCBlbTI4eHggKmRldiwgdTMyIGNvdW50KQoreworCWNvbnN0IHNpemVfdCBpbWFnZXNpemUgPSBQQUdFX0FMSUdOKGRldi0+ZnJhbWVfc2l6ZSk7CS8qbmVlZHMgdG8gYmUgcGFnZSBhbGlnbmVkIGNhdXNlIHRoZSBidWZmZXJzIGNhbiBiZSBtYXBwZWQgaW5kaXZpZHVhbGx5ISAqLworCXZvaWQgKmJ1ZmYgPSBOVUxMOworCXUzMiBpOworCWVtMjh4eF9jb3JlZGJnKCJyZXF1ZXN0ZWQgJWkgYnVmZmVycyB3aXRoIHNpemUgJWkiLCBjb3VudCwgaW1hZ2VzaXplKTsKKwlpZiAoY291bnQgPiBFTTI4WFhfTlVNX0ZSQU1FUykKKwkJY291bnQgPSBFTTI4WFhfTlVNX0ZSQU1FUzsKKworCWRldi0+bnVtX2ZyYW1lcyA9IGNvdW50OworCXdoaWxlIChkZXYtPm51bV9mcmFtZXMgPiAwKSB7CisJCWlmICgoYnVmZiA9IHJ2bWFsbG9jKGRldi0+bnVtX2ZyYW1lcyAqIGltYWdlc2l6ZSkpKQorCQkJYnJlYWs7CisJCWRldi0+bnVtX2ZyYW1lcy0tOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mcmFtZXM7IGkrKykgeworCQlkZXYtPmZyYW1lW2ldLmJ1Zm1lbSA9IGJ1ZmYgKyBpICogaW1hZ2VzaXplOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi5pbmRleCA9IGk7CisJCWRldi0+ZnJhbWVbaV0uYnVmLm0ub2Zmc2V0ID0gaSAqIGltYWdlc2l6ZTsKKwkJZGV2LT5mcmFtZVtpXS5idWYubGVuZ3RoID0gZGV2LT5mcmFtZV9zaXplOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi5zZXF1ZW5jZSA9IDA7CisJCWRldi0+ZnJhbWVbaV0uYnVmLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi5mbGFncyA9IDA7CisJfQorCXJldHVybiBkZXYtPm51bV9mcmFtZXM7Cit9CisKKy8qCisgKiBlbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKCkKKyAqIGFkZCBhbGwgZnJhbWVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgaW4gdXNlIHRvIHRoZSBpbmJ1ZmZlciBxdWV1ZQorICovCit2b2lkIGVtMjh4eF9xdWV1ZV91bnVzZWRmcmFtZXMoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mcmFtZXM7IGkrKykKKwkJaWYgKGRldi0+ZnJhbWVbaV0uc3RhdGUgPT0gRl9VTlVTRUQpIHsKKwkJCWRldi0+ZnJhbWVbaV0uc3RhdGUgPSBGX1FVRVVFRDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJbGlzdF9hZGRfdGFpbCgmZGV2LT5mcmFtZVtpXS5mcmFtZSwgJmRldi0+aW5xdWV1ZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQl9Cit9CisKKy8qCisgKiBlbTI4eHhfcmVsZWFzZV9idWZmZXJzKCkKKyAqIGZyZWUgZnJhbWUgYnVmZmVycworICovCit2b2lkIGVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWlmIChkZXYtPm51bV9mcmFtZXMpIHsKKwkJcnZmcmVlKGRldi0+ZnJhbWVbMF0uYnVmbWVtLAorCQkgICAgICAgZGV2LT5udW1fZnJhbWVzICogUEFHRV9BTElHTihkZXYtPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpKTsKKwkJZGV2LT5udW1fZnJhbWVzID0gMDsKKwl9Cit9CisKKy8qCisgKiBlbTI4eHhfcmVhZF9yZWdfcmVxKCkKKyAqIHJlYWRzIGRhdGEgZnJvbSB0aGUgdXNiIGRldmljZSBzcGVjaWZ5aW5nIGJSZXF1ZXN0CisgKi8KK2ludCBlbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywKKwkJCQkgICBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IHJldCwgYnl0ZTsKKworCWVtMjh4eF9yZWdkYmcoInJlcT0lMDJ4LCByZWc9JTAyeCAiLCByZXEsIHJlZyk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgcmVxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwMDAsIHJlZywgYnVmLCBsZW4sIEhaKTsKKworCWlmIChyZWdfZGVidWcpeworCQlwcmludGsocmV0IDwgMCA/ICIgZmFpbGVkIVxuIiA6ICIlMDJ4IHZhbHVlczogIiwgcmV0KTsKKwkJZm9yIChieXRlID0gMDsgYnl0ZSA8IGxlbjsgYnl0ZSsrKSB7CisJCQlwcmludGsoIiAlMDJ4IiwgYnVmW2J5dGVdKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGVtMjh4eF9yZWFkX3JlZ19yZXEoKQorICogcmVhZHMgZGF0YSBmcm9tIHRoZSB1c2IgZGV2aWNlIHNwZWNpZnlpbmcgYlJlcXVlc3QKKyAqLworaW50IGVtMjh4eF9yZWFkX3JlZ19yZXEoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcpCit7CisJdTggdmFsOworCWludCByZXQ7CisKKwllbTI4eHhfcmVnZGJnKCJyZXE9JTAyeCwgcmVnPSUwMng6IiwgcmVxLCByZWcpOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksIHJlcSwKKwkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMDAwLCByZWcsICZ2YWwsIDEsIEhaKTsKKworCWlmIChyZWdfZGVidWcpCisJCXByaW50ayhyZXQgPCAwID8gIiBmYWlsZWQhXG4iIDogIiUwMnhcbiIsIHZhbCk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2YWw7Cit9CisKK2ludCBlbTI4eHhfcmVhZF9yZWcoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnKQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWdfcmVxKGRldiwgVVNCX1JFUV9HRVRfU1RBVFVTLCByZWcpOworfQorCisvKgorICogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKCkKKyAqIHNlbmRzIGRhdGEgdG8gdGhlIHVzYiBkZXZpY2UsIHNwZWNpZnlpbmcgYlJlcXVlc3QKKyAqLworaW50IGVtMjh4eF93cml0ZV9yZWdzX3JlcShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywgY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCWludCByZXQ7CisKKwkvKnVzYl9jb250cm9sX21zZyBzZWVtcyB0byBleHBlY3QgYSBrbWFsbG9jZWQgYnVmZmVyICovCisJdW5zaWduZWQgY2hhciAqYnVmcyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKworCWVtMjh4eF9yZWdkYmcoInJlcT0lMDJ4IHJlZz0lMDJ4OiIsIHJlcSwgcmVnKTsKKworCWlmIChyZWdfZGVidWcpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJCXByaW50ayAoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2ldKTsKKwkJcHJpbnRrICgiXG4iKTsKKwl9CisKKwlpZiAoIWJ1ZnMpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShidWZzLCBidWYsIGxlbik7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksIHJlcSwKKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDB4MDAwMCwgcmVnLCBidWZzLCBsZW4sIEhaKTsKKwltZGVsYXkoNSk7CQkvKiBGSVhNRTogbWFnaWMgbnVtYmVyICovCisJa2ZyZWUoYnVmcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGVtMjh4eF93cml0ZV9yZWdzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCBVU0JfUkVRX0dFVF9TVEFUVVMsIHJlZywgYnVmLCBsZW4pOworfQorCisvKgorICogZW0yOHh4X3dyaXRlX3JlZ19iaXRzKCkKKyAqIHNldHMgb25seSBzb21lIGJpdHMgKHNwZWNpZmllZCBieSBiaXRtYXNrKSBvZiBhIHJlZ2lzdGVyLCBieSBmaXJzdCByZWFkaW5nCisgKiB0aGUgYWN0dWFsIHZhbHVlCisgKi8KK2ludCBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnLCB1OCB2YWwsCisJCQkJIHU4IGJpdG1hc2spCit7CisJaW50IG9sZHZhbDsKKwl1OCBuZXd2YWw7CisJaWYgKChvbGR2YWwgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCByZWcpKSA8IDApCisJCXJldHVybiBvbGR2YWw7CisJbmV3dmFsID0gKCgodTgpIG9sZHZhbCkgJiB+Yml0bWFzaykgfCAodmFsICYgYml0bWFzayk7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgcmVnLCAmbmV3dmFsLCAxKTsKK30KKworLyoKKyAqIGVtMjh4eF93cml0ZV9hYzk3KCkKKyAqIHdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgQUM5NyBhZGRyZXNzIChMU0IgZmlyc3QhKQorICovCitpbnQgZW0yOHh4X3dyaXRlX2FjOTcoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZWcsIHU4ICogdmFsKQoreworCWludCByZXQ7CisJdTggYWRkciA9IHJlZyAmIDB4N2Y7CisJaWYgKChyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEFDOTdMU0JfUkVHLCB2YWwsIDIpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEFDOTdBRERSX1JFRywgJmFkZHIsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBBQzk3QlVTWV9SRUcpKSA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZSBpZiAoKCh1OCkgcmV0KSAmIDB4MDEpIHsKKwkJZW0yOHh4X3dhcm4gKCJBQzk3IGNvbW1hbmQgc3RpbGwgYmVpbmcgZXhlY3R1dGVkOiBub3QgaGFuZGxlZCBwcm9wZXJseSFcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwljaGFyIHNbMl0gPSB7IDB4MDAsIDB4MDAgfTsKKwlzWzBdIHw9IDB4MWYgLSBkZXYtPnZvbHVtZTsKKwlzWzFdIHw9IDB4MWYgLSBkZXYtPnZvbHVtZTsKKwlpZiAoZGV2LT5tdXRlKQorCQlzWzFdIHw9IDB4ODA7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9hYzk3KGRldiwgTUFTVEVSX0FDOTcsIHMpOworfQorCisKK2ludCBlbTI4eHhfY29sb3JsZXZlbHNfc2V0X2RlZmF1bHQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgWUdBSU5fUkVHLCAiXHgxMCIsIDEpOwkvKiBjb250cmFzdCAqLworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgWU9GRlNFVF9SRUcsICJceDAwIiwgMSk7CS8qIGJyaWdodG5lc3MgKi8KKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFVWR0FJTl9SRUcsICJceDEwIiwgMSk7CS8qIHNhdHVyYXRpb24gKi8KKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFVPRkZTRVRfUkVHLCAiXHgwMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgVk9GRlNFVF9SRUcsICJceDAwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBTSEFSUE5FU1NfUkVHLCAiXHgwMCIsIDEpOworCisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBHQU1NQV9SRUcsICJceDIwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSR0FJTl9SRUcsICJceDIwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBHR0FJTl9SRUcsICJceDIwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBCR0FJTl9SRUcsICJceDIwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBST0ZGU0VUX1JFRywgIlx4MDAiLCAxKTsKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEdPRkZTRVRfUkVHLCAiXHgwMCIsIDEpOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEJPRkZTRVRfUkVHLCAiXHgwMCIsIDEpOworfQorCitpbnQgZW0yOHh4X2NhcHR1cmVfc3RhcnQoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgc3RhcnQpCit7CisJaW50IHJldDsKKwkvKiBGSVhNRTogd2hpY2ggaXMgdGhlIGJlc3Qgb3JkZXI/ICovCisJLyogdmlkZW8gcmVnaXN0ZXJzIGFyZSBzYW1wbGVkIGJ5IFZSRUYgKi8KKwlpZiAoKHJldCA9IGVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIFVTQlNVU1BfUkVHLCBzdGFydCA/IDB4MTAgOiAweDAwLAorCQkJCQkgIDB4MTApKSA8IDApCisJCXJldHVybiByZXQ7CisJLyogZW5hYmxlIHZpZGVvIGNhcHR1cmUgKi8KKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBWSU5FTkFCTEVfUkVHLCBzdGFydCA/ICJceDY3IiA6ICJceDI3IiwgMSk7Cit9CisKK2ludCBlbTI4eHhfb3V0Zm10X3NldF95dXY0MjIoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgT1VURk1UX1JFRywgIlx4MzQiLCAxKTsKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFZJTk1PREVfUkVHLCAiXHgxMCIsIDEpOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFZJTkNUUkxfUkVHLCAiXHgxMSIsIDEpOworfQorCitpbnQgZW0yOHh4X2FjY3VtdWxhdG9yX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHhtaW4sIHU4IHhtYXgsIHU4IHltaW4sCisJCQkJICB1OCB5bWF4KQoreworCWVtMjh4eF9jb3JlZGJnKCJlbTI4eHggU2NhbGU6ICglZCwlZCktKCVkLCVkKVxuIiwgeG1pbiwgeW1pbiwgeG1heCwgeW1heCk7CisKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFhNSU5fUkVHLCAmeG1pbiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBYTUFYX1JFRywgJnhtYXgsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgWU1JTl9SRUcsICZ5bWluLCAxKTsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBZTUFYX1JFRywgJnltYXgsIDEpOworfQorCitpbnQgZW0yOHh4X2NhcHR1cmVfYXJlYV9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCBoc3RhcnQsIHU4IHZzdGFydCwKKwkJCQkgICB1MTYgd2lkdGgsIHUxNiBoZWlnaHQpCit7CisJdTggY3dpZHRoID0gd2lkdGg7CisJdTggY2hlaWdodCA9IGhlaWdodDsKKwl1OCBvdmVyZmxvdyA9IChoZWlnaHQgPj4gNyAmIDB4MDIpIHwgKHdpZHRoID4+IDggJiAweDAxKTsKKworCWVtMjh4eF9jb3JlZGJnKCJlbTI4eHggQXJlYSBTZXQ6ICglZCwlZClcbiIsICh3aWR0aCB8IChvdmVyZmxvdyAmIDIpIDw8IDcpLAorCQkJKGhlaWdodCB8IChvdmVyZmxvdyAmIDEpIDw8IDgpKTsKKworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgSFNUQVJUX1JFRywgJmhzdGFydCwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBWU1RBUlRfUkVHLCAmdnN0YXJ0LCAxKTsKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIENXSURUSF9SRUcsICZjd2lkdGgsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgQ0hFSUdIVF9SRUcsICZjaGVpZ2h0LCAxKTsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBPRkxPV19SRUcsICZvdmVyZmxvdywgMSk7Cit9CisKK2ludCBlbTI4eHhfc2NhbGVyX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiBoLCB1MTYgdikKK3sKKwl1OCBtb2RlOworCS8qIHRoZSBlbTI4MDAgc2NhbGVyIG9ubHkgc3VwcG9ydHMgc2NhbGluZyBkb3duIHRvIDUwJSAqLworCWlmKGRldi0+aXNfZW0yODAwKQorCQltb2RlID0gKHYgPyAweDIwIDogMHgwMCkgfCAoaCA/IDB4MTAgOiAweDAwKTsKKwllbHNlIHsKKwkJdTggYnVmWzJdOworCQlidWZbMF0gPSBoOworCQlidWZbMV0gPSBoID4+IDg7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgSFNDQUxFTE9XX1JFRywgKGNoYXIgKilidWYsIDIpOworCQlidWZbMF0gPSB2OworCQlidWZbMV0gPSB2ID4+IDg7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgVlNDQUxFTE9XX1JFRywgKGNoYXIgKilidWYsIDIpOworCQkvKiBpdCBzZWVtcyB0aGF0IGJvdGggSCBhbmQgViBzY2FsZXJzIG11c3QgYmUgYWN0aXZlIHRvIHdvcmsgY29ycmVjdGx5ICovCisJCW1vZGUgPSAoaCB8fCB2KT8gMHgzMDogMHgwMDsKKwl9CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIENPTVBSX1JFRywgbW9kZSwgMHgzMCk7Cit9CisKKy8qIEZJWE1FOiB0aGlzIG9ubHkgZnVuY3Rpb24gcmVhZCB2YWx1ZXMgZnJvbSBkZXYgKi8KK2ludCBlbTI4eHhfcmVzb2x1dGlvbl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWludCB3aWR0aCwgaGVpZ2h0OworCXdpZHRoID0gbm9ybV9tYXh3KGRldik7CisJaGVpZ2h0ID0gbm9ybV9tYXhoKGRldikgPj4gMTsKKworCWVtMjh4eF9vdXRmbXRfc2V0X3l1djQyMihkZXYpOworCWVtMjh4eF9hY2N1bXVsYXRvcl9zZXQoZGV2LCAxLCAod2lkdGggLSA0KSA+PiAyLCAxLCAoaGVpZ2h0IC0gNCkgPj4gMik7CisJZW0yOHh4X2NhcHR1cmVfYXJlYV9zZXQoZGV2LCAwLCAwLCB3aWR0aCA+PiAyLCBoZWlnaHQgPj4gMik7CisJcmV0dXJuIGVtMjh4eF9zY2FsZXJfc2V0KGRldiwgZGV2LT5oc2NhbGUsIGRldi0+dnNjYWxlKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKiBpc29jIHRyYW5zZmVyIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBFTkFCTEVfREVCVUdfSVNPQ19GUkFNRVMKK3N0YXRpYyB2b2lkIGVtMjh4eF9pc29jX2R1bXAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgbGVuID0gMDsKKwlpbnQgbnRyYW5zID0gMDsKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0RFQlVHICJpc29jSXJxOiBzZj0lZCBucD0lZCBlYz0leFxuIiwKKwkgICAgICAgdXJiLT5zdGFydF9mcmFtZSwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cywKKwkgICAgICAgdXJiLT5lcnJvcl9jb3VudCk7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyICpidWYgPQorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJaW50IGFsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCWlmIChhbGVuID4gMCkgeworCQkJaWYgKGJ1ZlswXSA9PSAweDg4KSB7CisJCQkJbnRyYW5zKys7CisJCQkJbGVuICs9IGFsZW47CisJCQl9IGVsc2UgaWYgKGJ1ZlswXSA9PSAweDIyKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJCSI9IGw9JWQgbnQ9JWQgYnBwPSVkXG4iLAorCQkJCWxlbiAtIDQgKiBudHJhbnMsIG50cmFucywKKwkJCQludHJhbnMgPT0gMCA/IDAgOiBsZW4gLyBudHJhbnMpOworCQkJCW50cmFucyA9IDE7CisJCQkJbGVuID0gYWxlbjsKKwkJCX0gZWxzZQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIhXG4iKTsKKwkJfQorCQlwcmludGsoS0VSTl9ERUJVRyAiICAgbj0lZCBzPSVkIGFsPSVkICV4XG4iLCBpLAorCQkgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMsCisJCSAgICAgICB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgsCisJCSAgICAgICAodW5zaWduZWQgaW50KQorCQkJCSAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCQkgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS4KKwkJCQkgICAgICAgb2Zmc2V0KSkpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBlbTI4eHhfaXNvY192aWRlbyhzdHJ1Y3QgZW0yOHh4ICpkZXYsc3RydWN0IGVtMjh4eF9mcmFtZV90ICoqZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqbG9ja19mbGFncywgdW5zaWduZWQgY2hhciBidWYpCit7CisJaWYgKCEoYnVmICYgMHgwMSkpIHsKKwkJaWYgKCgqZiktPnN0YXRlID09IEZfR1JBQkJJTkcpIHsKKwkJCS8qcHJldmlvdXMgZnJhbWUgaXMgaW5jb21wbGV0ZSAqLworCQkJaWYgKCgqZiktPmZpZWxkYnl0ZXN1c2VkIDwgZGV2LT5maWVsZF9zaXplKSB7CisJCQkJKCpmKS0+c3RhdGUgPSBGX0VSUk9SOworCQkJCWVtMjh4eF9pc29jZGJnICgiZHJvcHBpbmcgaW5jb21wbGV0ZSBib3R0b20gZmllbGQgKCVpIG1pc3NpbmcgYnl0ZXMpIiwKKwkJCQkJIGRldi0+ZmllbGRfc2l6ZS0oKmYpLT5maWVsZGJ5dGVzdXNlZCk7CisJCQl9IGVsc2UgeworCQkJCSgqZiktPnN0YXRlID0gRl9ET05FOworCQkJCSgqZiktPmJ1Zi5ieXRlc3VzZWQgPSBkZXYtPmZyYW1lX3NpemU7CisJCQl9CisJCX0KKwkJaWYgKCgqZiktPnN0YXRlID09IEZfRE9ORSB8fCAoKmYpLT5zdGF0ZSA9PSBGX0VSUk9SKSB7CisJCQkvKiBtb3ZlIGN1cnJlbnQgZnJhbWUgdG8gb3V0cXVldWUgYW5kIGdldCBuZXh0IGZyZWUgYnVmZmVyIGZyb20gaW5xdWV1ZSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+IHF1ZXVlX2xvY2ssICpsb2NrX2ZsYWdzKTsKKwkJCWxpc3RfbW92ZV90YWlsKCYoKmYpLT5mcmFtZSwgJmRldi0+b3V0cXVldWUpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPmlucXVldWUpKQorCQkJCSgqZikgPSBsaXN0X2VudHJ5KGRldi0+IGlucXVldWUubmV4dCwKKwkJCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCxmcmFtZSk7CisJCQllbHNlCisJCQkJKCpmKSA9IE5VTEw7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssKmxvY2tfZmxhZ3MpOworCQl9CisJCWlmICghKCpmKSkgeworCQkJZW0yOHh4X2lzb2NkYmcgKCJuZXcgZnJhbWUgYnV0IG5vIGJ1ZmZlciBpcyBmcmVlIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZG9fZ2V0dGltZW9mZGF5KCYoKmYpLT5idWYudGltZXN0YW1wKTsKKwkJKCpmKS0+YnVmLnNlcXVlbmNlID0gKytkZXYtPmZyYW1lX2NvdW50OworCQkoKmYpLT5idWYuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCSgqZiktPnN0YXRlID0gRl9HUkFCQklORzsKKwkJKCpmKS0+YnVmLmJ5dGVzdXNlZCA9IDA7CisJCSgqZiktPnRvcF9maWVsZCA9IDE7CisJCSgqZiktPmZpZWxkYnl0ZXN1c2VkID0gMDsKKwl9IGVsc2UgeworCQkJCQkvKiBhY3F1aXJpbmcgYm90dG9tIGZpZWxkICovCisJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CisJCQlpZiAoISgqZiktPnRvcF9maWVsZCkgeworCQkJCSgqZiktPnN0YXRlID0gRl9FUlJPUjsKKwkJCQllbTI4eHhfaXNvY2RiZyAoInVuZXhwZWN0ZWQgYmVnaW4gb2YgYm90dG9tIGZpZWxkOyBkaXNjYXJkaW5nIGl0Iik7CisJCQl9IGVsc2UgaWYgKCgqZiktPiBmaWVsZGJ5dGVzdXNlZCA8IGRldi0+ZmllbGRfc2l6ZSAtIDE3MikgeworCQkJCSgqZiktPnN0YXRlID0gRl9FUlJPUjsKKwkJCQllbTI4eHhfaXNvY2RiZyAoImRyb3BwaW5nIGluY29tcGxldGUgdG9wIGZpZWxkICglaSBtaXNzaW5nIGJ5dGVzKSIsCisJCQkJCSBkZXYtPmZpZWxkX3NpemUtKCpmKS0+ZmllbGRieXRlc3VzZWQpOworCQkJfSBlbHNlIHsKKwkJCQkoKmYpLT50b3BfZmllbGQgPSAwOworCQkJCSgqZiktPmZpZWxkYnl0ZXN1c2VkID0gMDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW0yOHh4X2lzb2NfdmlkZW9fY29weShzdHJ1Y3QgZW0yOHh4ICpkZXYsCisJCQkJCSAgc3RydWN0IGVtMjh4eF9mcmFtZV90ICoqZiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXZvaWQgKmZpZWxkc3RhcnQsICpzdGFydHdyaXRlLCAqc3RhcnRyZWFkOworCWludCBsaW5lc2RvbmUsIGN1cnJsaW5lZG9uZSwgb2Zmc2V0LCBsZW5jb3B5LHJlbWFpbjsKKworCWlmKGRldi0+ZnJhbWVfc2l6ZSAhPSAoKmYpLT5idWYubGVuZ3RoKXsKKwkJZW0yOHh4X2VycigiZnJhbWVfc2l6ZSAlaSBhbmQgYnVmLmxlbmd0aCAlaSBhcmUgZGlmZmVyZW50ISEhXG4iLGRldi0+ZnJhbWVfc2l6ZSwoKmYpLT5idWYubGVuZ3RoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoKmYpLT5maWVsZGJ5dGVzdXNlZCArIGxlbiA+IGRldi0+ZmllbGRfc2l6ZSkKKwkJbGVuID1kZXYtPmZpZWxkX3NpemUgLSAoKmYpLT5maWVsZGJ5dGVzdXNlZDsKKworCWlmIChidWZbMF0gIT0gMHg4OCAmJiBidWZbMF0gIT0gMHgyMikgeworCQllbTI4eHhfaXNvY2RiZygiZnJhbWUgaXMgbm90IGNvbXBsZXRlXG4iKTsKKwkJc3RhcnRyZWFkID0gYnVmOworCQlsZW4rPTQ7CisJfSBlbHNlCisJCXN0YXJ0cmVhZCA9IGJ1ZiArIDQ7CisKKwlyZW1haW4gPSBsZW47CisKKwlpZiAoKCpmKS0+dG9wX2ZpZWxkKQorCQlmaWVsZHN0YXJ0ID0gKCpmKS0+YnVmbWVtOworCWVsc2UKKwkJZmllbGRzdGFydCA9ICgqZiktPmJ1Zm1lbSArIGRldi0+Ynl0ZXNwZXJsaW5lOworCisJbGluZXNkb25lID0gKCpmKS0+ZmllbGRieXRlc3VzZWQgLyBkZXYtPmJ5dGVzcGVybGluZTsKKwljdXJybGluZWRvbmUgPSAoKmYpLT5maWVsZGJ5dGVzdXNlZCAlIGRldi0+Ynl0ZXNwZXJsaW5lOworCW9mZnNldCA9IGxpbmVzZG9uZSAqIGRldi0+Ynl0ZXNwZXJsaW5lICogMiArIGN1cnJsaW5lZG9uZTsKKwlzdGFydHdyaXRlID0gZmllbGRzdGFydCArIG9mZnNldDsKKwlsZW5jb3B5ID0gZGV2LT5ieXRlc3BlcmxpbmUgLSBjdXJybGluZWRvbmU7CisJbGVuY29weSA9IGxlbmNvcHkgPiByZW1haW4gPyByZW1haW4gOiBsZW5jb3B5OworCisJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuY29weSk7CisJcmVtYWluIC09IGxlbmNvcHk7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQlzdGFydHdyaXRlICs9IGxlbmNvcHkgKyBkZXYtPmJ5dGVzcGVybGluZTsKKwkJc3RhcnRyZWFkICs9IGxlbmNvcHk7CisJCWlmIChkZXYtPmJ5dGVzcGVybGluZSA+IHJlbWFpbikKKwkJCWxlbmNvcHkgPSByZW1haW47CisJCWVsc2UKKwkJCWxlbmNvcHkgPSBkZXYtPmJ5dGVzcGVybGluZTsKKworCQltZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW5jb3B5KTsKKwkJcmVtYWluIC09IGxlbmNvcHk7CisJfQorCisJKCpmKS0+ZmllbGRieXRlc3VzZWQgKz0gbGVuOworfQorCisvKgorICogZW0yOHh4X2lzb0lycSgpCisgKiBoYW5kbGVzIHRoZSBpbmNvbWluZyBpc29jIHVyYnMgYW5kIGZpbGxzIHRoZSBmcmFtZXMgZnJvbSBvdXIgaW5xdWV1ZQorICovCit2b2lkIGVtMjh4eF9pc29jSXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gdXJiLT5jb250ZXh0OworCWludCBpLCBzdGF0dXM7CisJc3RydWN0IGVtMjh4eF9mcmFtZV90ICoqZjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworI2lmZGVmIEVOQUJMRV9ERUJVR19JU09DX0ZSQU1FUworCWlmIChpc29jX2RlYnVnPjEpCisJCWVtMjh4eF9pc29jX2R1bXAodXJiLCByZWdzKTsKKyNlbmRpZgorCisJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCisJCXJldHVybjsKKworCWYgPSAmZGV2LT5mcmFtZV9jdXJyZW50OworCisJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9JTlRFUlJVUFQpIHsKKwkJZGV2LT5zdHJlYW0gPSBTVFJFQU1fT0ZGOworCQlpZiAoKCpmKSkKKwkJCSgqZiktPnN0YXRlID0gRl9RVUVVRUQ7CisJCWVtMjh4eF9pc29jZGJnKCJzdHJlYW0gaW50ZXJydXB0ZWQiKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfc3RyZWFtKTsKKwl9CisKKwlpZiAoKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fCAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSkKKwkJcmV0dXJuOworCisJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTiAmJiAhbGlzdF9lbXB0eSgmZGV2LT5pbnF1ZXVlKSkgeworCQlpZiAoISgqZikpCisJCQkoKmYpID0gbGlzdF9lbnRyeShkZXYtPmlucXVldWUubmV4dCwKKwkJc3RydWN0IGVtMjh4eF9mcmFtZV90LCBmcmFtZSk7CisKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQkJdW5zaWduZWQgY2hhciAqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKworCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJCWludCBsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLSA0OworCisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJCQllbTI4eHhfaXNvY2RiZygiZGF0YSBlcnJvcjogWyVkXSBsZW49JWQsIHN0YXR1cz0lZCIsIGksCisJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAtRVBST1RPKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPD0gMCkgeworCQkJCWVtMjh4eF9pc29jZGJnKCJwYWNrZXQgJWQgaXMgZW1wdHkiLGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+CisJCQkJCQkgZGV2LT5tYXhfcGt0X3NpemUpIHsKKwkJCQllbTI4eHhfaXNvY2RiZygicGFja2V0IGJpZ2dlciB0aGFuIHBhY2tldCBzaXplIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKm5ldyBmcmFtZSAqLworCQkJaWYgKGJ1ZlswXSA9PSAweDIyICYmIGJ1ZlsxXSA9PSAweDVhKSB7CisJCQkJZW0yOHh4X2lzb2NkYmcoIlZpZGVvIGZyYW1lLCBsZW5ndGg9JWkhIixsZW4pOworCisJCQkJaWYgKGVtMjh4eF9pc29jX3ZpZGVvKGRldixmLCZsb2NrX2ZsYWdzLGJ1ZlsyXSkpCisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGJ1ZlswXT09MHgzMyAmJiBidWZbMV09PTB4OTUgJiYgYnVmWzJdPT0weDAwKSB7CisJCQkJZW0yOHh4X2lzb2NkYmcoIlZCSSBIRUFERVIhISEiKTsKKwkJCX0KKworCQkJLyogYWN0dWFsIGNvcHlpbmcgKi8KKwkJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CisJCQkJZW0yOHh4X2lzb2NfdmlkZW9fY29weShkZXYsZixidWYsIGxlbik7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwl9CisKKwl1cmItPnN0YXR1cyA9IDA7CisJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSkgeworCQllbTI4eHhfZXJyZGV2KCJyZXN1Ym1pdCBvZiB1cmIgZmFpbGVkIChlcnJvcj0laSlcbiIsIHN0YXR1cyk7CisJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJfQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBlbTI4eHhfdW5pbml0X2lzb2MoKQorICogZGVhbGxvY2F0ZXMgdGhlIGJ1ZmZlcnMgYW5kIHVyYnMgYWxsb2NhdGVkIGR1cmluZyBlbTI4eHhfaW5pdF9pb3NjKCkKKyAqLwordm9pZCBlbTI4eHhfdW5pbml0X2lzb2Moc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fQlVGUzsgaSsrKSB7CisJCWlmIChkZXYtPnVyYltpXSkgeworCQkJdXNiX2tpbGxfdXJiKGRldi0+dXJiW2ldKTsKKwkJCWlmIChkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSl7CisJCQkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwoRU0yOFhYX05VTV9QQUNLRVRTKmRldi0+bWF4X3BrdF9zaXplKSxkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSxkZXYtPnVyYltpXS0+dHJhbnNmZXJfZG1hKTsKKwkJCX0KKwkJCXVzYl9mcmVlX3VyYihkZXYtPnVyYltpXSk7CisJCX0KKwkJZGV2LT51cmJbaV0gPSBOVUxMOworCQlkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSA9IE5VTEw7CisJfQorCWVtMjh4eF9jYXB0dXJlX3N0YXJ0KGRldiwgMCk7Cit9CisKKy8qCisgKiBlbTI4eHhfaW5pdF9pc29jKCkKKyAqIGFsbG9jYXRlcyB0cmFuc2ZlciBidWZmZXJzIGFuZCBzdWJtaXRzIHRoZSB1cmJzIGZvciBpc29jIHRyYW5zZmVyCisgKi8KK2ludCBlbTI4eHhfaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwkvKiBjaGFuZ2UgaW50ZXJmYWNlIHRvIDMgd2hpY2ggYWxsb3dlcyB0aGUgYmlnZ2VzdCBwYWNrZXQgc2l6ZXMgKi8KKwlpbnQgaSwgZXJyQ29kZTsKKwljb25zdCBpbnQgc2Jfc2l6ZSA9IEVNMjhYWF9OVU1fUEFDS0VUUyAqIGRldi0+bWF4X3BrdF9zaXplOworCisJLyogcmVzZXQgc3RyZWFtaW5nIHZhcnMgKi8KKwlkZXYtPmZyYW1lX2N1cnJlbnQgPSBOVUxMOworCWRldi0+ZnJhbWVfY291bnQgPSAwOworCisJLyogYWxsb2NhdGUgdXJicyAqLworCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfTlVNX0JVRlM7IGkrKykgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCWludCBqLCBrOworCQkvKiBhbGxvY2F0ZSB0cmFuc2ZlciBidWZmZXIgKi8KKwkJdXJiID0gdXNiX2FsbG9jX3VyYihFTTI4WFhfTlVNX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYil7CisJCQllbTI4eHhfZXJyZGV2KCJjYW5ub3QgYWxsb2MgdXJiICVpXG4iLCBpKTsKKwkJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZGV2LT50cmFuc2Zlcl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dWRldiwgc2Jfc2l6ZSwgR0ZQX0tFUk5FTCwmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIWRldi0+dHJhbnNmZXJfYnVmZmVyW2ldKSB7CisJCQllbTI4eHhfZXJyZGV2CisJCQkJCSgidW5hYmxlIHRvIGFsbG9jYXRlICVpIGJ5dGVzIGZvciB0cmFuc2ZlciBidWZmZXIgJWlcbiIsCisJCQkJCSBzYl9zaXplLCBpKTsKKwkJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGRldi0+dHJhbnNmZXJfYnVmZmVyW2ldLCAwLCBzYl9zaXplKTsKKwkJdXJiLT5kZXYgPSBkZXYtPnVkZXY7CisJCXVyYi0+Y29udGV4dCA9IGRldjsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldi0+dWRldiwgMHg4Mik7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGRldi0+dHJhbnNmZXJfYnVmZmVyW2ldOworCQl1cmItPmNvbXBsZXRlID0gZW0yOHh4X2lzb2NJcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBFTTI4WFhfTlVNX1BBQ0tFVFM7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNiX3NpemU7CisJCWZvciAoaiA9IGsgPSAwOyBqIDwgRU0yOFhYX05VTV9QQUNLRVRTOworCQkJCWorKywgayArPSBkZXYtPm1heF9wa3Rfc2l6ZSkgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBrOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPQorCQkJCWRldi0+bWF4X3BrdF9zaXplOworCQl9CisJCWRldi0+dXJiW2ldID0gdXJiOworCX0KKworCS8qIHN1Ym1pdCB1cmJzICovCisJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fQlVGUzsgaSsrKSB7CisJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnJDb2RlKSB7CisJCQllbTI4eHhfZXJyZGV2KCJzdWJtaXQgb2YgdXJiICVpIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCBpLAorCQkJCSAgICAgIGVyckNvZGUpOworCQkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgZW0yOHh4X3NldF9hbHRlcm5hdGUoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWludCBlcnJDb2RlLCBwcmV2X2FsdCA9IGRldi0+YWx0OworCWRldi0+YWx0ID0gYWx0OworCWlmIChkZXYtPmFsdCA9PSAwKSB7CisJCWludCBpOworCQlmb3IoaT0wO2k8IGRldi0+bnVtX2FsdDsgaSsrKQorCQkJaWYoZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldPmRldi0+YWx0X21heF9wa3Rfc2l6ZVtkZXYtPmFsdF0pCisJCQkJZGV2LT5hbHQ9aTsKKwl9CisKKwlpZiAoZGV2LT5hbHQgIT0gcHJldl9hbHQpIHsKKwkJZGV2LT5tYXhfcGt0X3NpemUgPSBkZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5hbHRdOworCQllbTI4eHhfY29yZWRiZygic2V0dGluZyBhbHRlcm5hdGUgJWQgd2l0aCB3TWF4UGFja2V0U2l6ZT0ldVxuIiwgZGV2LT5hbHQsCisJCSAgICAgICBkZXYtPm1heF9wa3Rfc2l6ZSk7CisJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVkZXYsIDAsIGRldi0+YWx0KTsKKwkJaWYgKGVyckNvZGUgPCAwKSB7CisJCQllbTI4eHhfZXJyZGV2ICgiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvICVkIChlcnJvcj0laSlcbiIsCisJCQkJCQkJZGV2LT5hbHQsIGVyckNvZGUpOworCQkJcmV0dXJuIGVyckNvZGU7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyZDk4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwpAQCAtMCwwICsxLDU4NiBAQAorLyoKKyAgIGVtMjh4eC1pMmMuYyAtIGRyaXZlciBmb3IgRW1waWEgRU0yODAwL0VNMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIGRldmljZXMKKworICAgQ29weXJpZ2h0IChDKSAyMDA1IEx1ZG92aWNvIENhdmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+CisJCSAgICAgIE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CisJCSAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4KKwkJICAgICAgU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKworI2luY2x1ZGUgImVtMjh4eC5oIgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX3NjYW4gPSAwOworbW9kdWxlX3BhcmFtKGkyY19zY2FuLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpMmNfc2NhbiwgInNjYW4gaTJjIGJ1cyBhdCBpbnNtb2QgdGltZSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGkyY19kZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oaTJjX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpMmNfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2kyY10iKTsKKworI2RlZmluZSBkcHJpbnRrMShsdmwsZm10LCBhcmdzLi4uKSBpZiAoaTJjX2RlYnVnPj1sdmwpIGRvIHtcCisJCQlwcmludGsoZm10ICwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHByaW50azIobHZsLGZtdCwgYXJncy4uLikgaWYgKGkyY19kZWJ1Zz49bHZsKSBkb3sgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGF0ICVzOiAiIGZtdCwgXAorCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpOyB9IHdoaWxlICgwKQorCisvKgorICogZW0yODAwX2kyY19zZW5kX21heDQoKQorICogc2VuZCB1cCB0byA0IGJ5dGVzIHRvIHRoZSBpMmMgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgZW0yODAwX2kyY19zZW5kX21heDQoc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkJY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJaW50IHdyaXRlX3RpbWVvdXQ7CisJdW5zaWduZWQgY2hhciBiMls2XTsKKwlCVUdfT04obGVuIDwgMSB8fCBsZW4gPiA0KTsKKwliMls1XSA9IDB4ODAgKyBsZW4gLSAxOworCWIyWzRdID0gYWRkcjsKKwliMlszXSA9IGJ1ZlswXTsKKwlpZiAobGVuID4gMSkKKwkJYjJbMl0gPSBidWZbMV07CisJaWYgKGxlbiA+IDIpCisJCWIyWzFdID0gYnVmWzJdOworCWlmIChsZW4gPiAzKQorCQliMlswXSA9IGJ1ZlszXTsKKworCXJldCA9IGRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCA0IC0gbGVuLCAmYjJbNCAtIGxlbl0sIDIgKyBsZW4pOworCWlmIChyZXQgIT0gMiArIGxlbikgeworCQllbTI4eHhfd2Fybigid3JpdHRpbmcgdG8gaTJjIGRldmljZSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWZvciAod3JpdGVfdGltZW91dCA9IEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVDsgd3JpdGVfdGltZW91dCA+IDA7CisJICAgICB3cml0ZV90aW1lb3V0IC09IDUpIHsKKwkJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDA1KTsKKwkJaWYgKHJldCA9PSAweDgwICsgbGVuIC0gMSkKKwkJCXJldHVybiBsZW47CisJCW1kZWxheSg1KTsKKwl9CisJZW0yOHh4X3dhcm4oImkyYyB3cml0ZSB0aW1lZCBvdXRcbiIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogZW0yODAwX2kyY19zZW5kX2J5dGVzKCkKKyAqLworc3RhdGljIGludCBlbTI4MDBfaTJjX3NlbmRfYnl0ZXModm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyLCBjaGFyICpidWYsCisJCQkJIHNob3J0IGxlbikKK3sKKwljaGFyICpidWZQdHIgPSBidWY7CisJaW50IHJldDsKKwlpbnQgd3Jjb3VudCA9IDA7CisJaW50IGNvdW50OworCWludCBtYXhMZW4gPSA0OworCXN0cnVjdCBlbTI4eHggKmRldiA9IChzdHJ1Y3QgZW0yOHh4ICopZGF0YTsKKwl3aGlsZSAobGVuID4gMCkgeworCQljb3VudCA9IChsZW4gPiBtYXhMZW4pID8gbWF4TGVuIDogbGVuOworCQlyZXQgPSBlbTI4MDBfaTJjX3NlbmRfbWF4NChkZXYsIGFkZHIsIGJ1ZlB0ciwgY291bnQpOworCQlpZiAocmV0ID4gMCkgeworCQkJbGVuIC09IGNvdW50OworCQkJYnVmUHRyICs9IGNvdW50OworCQkJd3Jjb3VudCArPSBjb3VudDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVGQVVMVDsKKwl9CisJcmV0dXJuIHdyY291bnQ7Cit9CisKKy8qCisgKiBlbTI4MDBfaTJjX2NoZWNrX2Zvcl9kZXZpY2UoKQorICogY2hlY2sgaWYgdGhlcmUgaXMgYSBpMmNfZGV2aWNlIGF0IHRoZSBzdXBwbGllZCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgZW0yODAwX2kyY19jaGVja19mb3JfZGV2aWNlKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBhZGRyKQoreworCWNoYXIgbXNnOworCWludCByZXQ7CisJaW50IHdyaXRlX3RpbWVvdXQ7CisJbXNnID0gYWRkcjsKKwlyZXQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwNCwgJm1zZywgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZW0yOHh4X3dhcm4oInNldHRpbmcgaTJjIGRldmljZSBhZGRyZXNzIGZhaWxlZCAoZXJyb3I9JWkpXG4iLAorCQkJICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCW1zZyA9IDB4ODQ7CisJcmV0ID0gZGV2LT5lbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDUsICZtc2csIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWVtMjh4eF93YXJuKCJwcmVwYXJpbmcgaTJjIHJlYWQgZmFpbGVkIChlcnJvcj0laSlcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWZvciAod3JpdGVfdGltZW91dCA9IEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVDsgd3JpdGVfdGltZW91dCA+IDA7CisJICAgICB3cml0ZV90aW1lb3V0IC09IDUpIHsKKwkJdW5zaWduZWQgbXNnID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDUpOworCQlpZiAobXNnID09IDB4OTQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZWxzZSBpZiAobXNnID09IDB4ODQpCisJCQlyZXR1cm4gMDsKKwkJbWRlbGF5KDUpOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKKyAqIGVtMjgwMF9pMmNfcmVjdl9ieXRlcygpCisgKiByZWFkIGZyb20gdGhlIGkyYyBkZXZpY2UKKyAqLworc3RhdGljIGludCBlbTI4MDBfaTJjX3JlY3ZfYnl0ZXMoc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkJIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCS8qIGNoZWNrIGZvciB0aGUgZGV2aWNlIGFuZCBzZXQgaTJjIHJlYWQgYWRkcmVzcyAqLworCXJldCA9IGVtMjgwMF9pMmNfY2hlY2tfZm9yX2RldmljZShkZXYsIGFkZHIpOworCWlmIChyZXQpIHsKKwkJZW0yOHh4X3dhcm4KKwkJICAgICgicHJlcGFyaW5nIHJlYWQgYXQgaTJjIGFkZHJlc3MgMHgleCBmYWlsZWQgKGVycm9yPSVpKVxuIiwKKwkJICAgICBhZGRyLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuKGRldiwgMHgwLCAweDMsIGJ1ZiwgbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQllbTI4eHhfd2FybigicmVhZGluZyBmcm9tIGkyYyBkZXZpY2UgYXQgMHgleCBmYWlsZWQgKGVycm9yPSVpKSIsCisJCQkgICAgYWRkciwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGVtMjh4eF9pMmNfc2VuZF9ieXRlcygpCisgKiB1bnRlc3RlZCBmb3IgbW9yZSB0aGFuIDQgYnl0ZXMKKyAqLworc3RhdGljIGludCBlbTI4eHhfaTJjX3NlbmRfYnl0ZXModm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyLCBjaGFyICpidWYsCisJCQkJIHNob3J0IGxlbiwgaW50IHN0b3ApCit7CisJaW50IHdyY291bnQgPSAwOworCXN0cnVjdCBlbTI4eHggKmRldiA9IChzdHJ1Y3QgZW0yOHh4ICopZGF0YTsKKworCXdyY291bnQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIHN0b3AgPyAyIDogMywgYWRkciwgYnVmLCBsZW4pOworCisJcmV0dXJuIHdyY291bnQ7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX3JlY3ZfYnl0ZXMoKQorICogcmVhZCBhIGJ5dGUgZnJvbSB0aGUgaTJjIGRldmljZQorICovCitzdGF0aWMgaW50IGVtMjh4eF9pMmNfcmVjdl9ieXRlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkciwKKwkJCQkgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihkZXYsIDIsIGFkZHIsIGJ1ZiwgbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQllbTI4eHhfd2FybigicmVhZGluZyBpMmMgZGV2aWNlIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDUpICE9IDApCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX2NoZWNrX2Zvcl9kZXZpY2UoKQorICogY2hlY2sgaWYgdGhlcmUgaXMgYSBpMmNfZGV2aWNlIGF0IHRoZSBzdXBwbGllZCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X2kyY19jaGVja19mb3JfZGV2aWNlKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBhZGRyKQoreworCWNoYXIgbXNnOworCWludCByZXQ7CisJbXNnID0gYWRkcjsKKworCXJldCA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcShkZXYsIDIsIGFkZHIpOworCWlmIChyZXQgPCAwKSB7CisJCWVtMjh4eF93YXJuKCJyZWFkaW5nIGZyb20gaTJjIGRldmljZSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHg1KSAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF9pMmNfeGZlcigpCisgKiB0aGUgbWFpbiBpMmMgdHJhbnNmZXIgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBlbTI4eHhfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCSAgIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCWludCBhZGRyLCByYywgaSwgYnl0ZTsKKworCWlmIChudW0gPD0gMCkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWFkZHIgPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJZHByaW50azIoMiwiJXMgJXMgYWRkcj0leCBsZW49JWQ6IiwKKwkJCSAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkgaSA9PSBudW0gLSAxID8gInN0b3AiIDogIm5vbnN0b3AiLCBhZGRyLCBtc2dzW2ldLmxlbik7CisJCWlmICghbXNnc1tpXS5sZW4pIHsJLyogbm8gbGVuOiBjaGVjayBvbmx5IGZvciBkZXZpY2UgcHJlc2VuY2UgKi8KKwkJCWlmIChkZXYtPmlzX2VtMjgwMCkKKwkJCQlyYyA9IGVtMjgwMF9pMmNfY2hlY2tfZm9yX2RldmljZShkZXYsIGFkZHIpOworCQkJZWxzZQorCQkJCXJjID0gZW0yOHh4X2kyY19jaGVja19mb3JfZGV2aWNlKGRldiwgYWRkcik7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJZHByaW50azIoMiwiIG5vIGRldmljZVxuIik7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCisJCX0gZWxzZSBpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiByZWFkIGJ5dGVzICovCisJCQlpZiAoZGV2LT5pc19lbTI4MDApCisJCQkJcmMgPSBlbTI4MDBfaTJjX3JlY3ZfYnl0ZXMoZGV2LCBhZGRyLAorCQkJCQkJCSAgIG1zZ3NbaV0uYnVmLAorCQkJCQkJCSAgIG1zZ3NbaV0ubGVuKTsKKwkJCWVsc2UKKwkJCQlyYyA9IGVtMjh4eF9pMmNfcmVjdl9ieXRlcyhkZXYsIGFkZHIsCisJCQkJCQkJICAgbXNnc1tpXS5idWYsCisJCQkJCQkJICAgbXNnc1tpXS5sZW4pOworCQkJaWYgKGkyY19kZWJ1Zz49MikgeworCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7CisJCQkJCXByaW50aygiICUwMngiLCBtc2dzW2ldLmJ1ZltieXRlXSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogd3JpdGUgYnl0ZXMgKi8KKwkJCWlmIChpMmNfZGVidWc+PTIpIHsKKwkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykKKwkJCQkJcHJpbnRrKCIgJTAyeCIsIG1zZ3NbaV0uYnVmW2J5dGVdKTsKKwkJCX0KKwkJCWlmIChkZXYtPmlzX2VtMjgwMCkKKwkJCQlyYyA9IGVtMjgwMF9pMmNfc2VuZF9ieXRlcyhkZXYsIGFkZHIsCisJCQkJCQkJICAgbXNnc1tpXS5idWYsCisJCQkJCQkJICAgbXNnc1tpXS5sZW4pOworCQkJZWxzZQorCQkJCXJjID0gZW0yOHh4X2kyY19zZW5kX2J5dGVzKGRldiwgYWRkciwKKwkJCQkJCQkgICBtc2dzW2ldLmJ1ZiwKKwkJCQkJCQkgICBtc2dzW2ldLmxlbiwKKwkJCQkJCQkgICBpID09IG51bSAtIDEpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIGVycjsKKwkJfQorCQlpZiAoaTJjX2RlYnVnPj0yKQorCQkJcHJpbnRrKCJcbiIpOworCX0KKworCXJldHVybiBudW07CisgICAgICBlcnI6CisJZHByaW50azIoMiwiIEVSUk9SOiAlaVxuIiwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBlbTI4eHhfaTJjX2VlcHJvbShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmVlZGF0YSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZiwgKnAgPSBlZWRhdGE7CisJc3RydWN0IGVtMjh4eF9lZXByb20gKmVtX2VlcHJvbSA9ICh2b2lkICopZWVkYXRhOworCWludCBpLCBlcnIsIHNpemUgPSBsZW4sIGJsb2NrOworCisJZGV2LT5pMmNfY2xpZW50LmFkZHIgPSAweGEwID4+IDE7CisKKwkvKiBDaGVjayBpZiBib2FyZCBoYXMgZWVwcm9tICovCisJZXJyID0gaTJjX21hc3Rlcl9yZWN2KCZkZXYtPmkyY19jbGllbnQsICZidWYsIDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlidWYgPSAwOworCWlmICgxICE9IChlcnIgPSBpMmNfbWFzdGVyX3NlbmQoJmRldi0+aTJjX2NsaWVudCwgJmJ1ZiwgMSkpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBIdWgsIG5vIGVlcHJvbSBwcmVzZW50IChlcnI9JWQpP1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJaWYgKHNpemUgPiAxNikKKwkJCWJsb2NrID0gMTY7CisJCWVsc2UKKwkJCWJsb2NrID0gc2l6ZTsKKworCQlpZiAoYmxvY2sgIT0KKwkJICAgIChlcnIgPSBpMmNfbWFzdGVyX3JlY3YoJmRldi0+aTJjX2NsaWVudCwgcCwgYmxvY2spKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogaTJjIGVlcHJvbSByZWFkIGVycm9yIChlcnI9JWQpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzaXplIC09IGJsb2NrOworCQlwICs9IGJsb2NrOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKDAgPT0gKGkgJSAxNikpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogaTJjIGVlcHJvbSAlMDJ4OiIsIGRldi0+bmFtZSwgaSk7CisJCXByaW50aygiICUwMngiLCBlZWRhdGFbaV0pOworCQlpZiAoMTUgPT0gKGkgJSAxNikpCisJCQlwcmludGsoIlxuIik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiRUVQUk9NIElEPSAweCUwOHhcbiIsIGVtX2VlcHJvbS0+aWQpOworCXByaW50ayhLRVJOX0lORk8gIlZlbmRvci9Qcm9kdWN0IElEPSAlMDR4OiUwNHhcbiIsIGVtX2VlcHJvbS0+dmVuZG9yX0lELAorCSAgICAgICBlbV9lZXByb20tPnByb2R1Y3RfSUQpOworCisJc3dpdGNoIChlbV9lZXByb20tPmNoaXBfY29uZiA+PiA0ICYgMHgzKSB7CisJY2FzZSAwOgorCQlwcmludGsoS0VSTl9JTkZPICJObyBhdWRpbyBvbiBib2FyZC5cbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByaW50ayhLRVJOX0lORk8gIkFDOTcgYXVkaW8gKDUgc2FtcGxlIHJhdGVzKVxuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSTJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByaW50ayhLRVJOX0lORk8gIkkyUyBhdWRpbywgMyBzYW1wbGUgcmF0ZXNcbiIpOworCQlicmVhazsKKwl9CisKKwlpZiAoZW1fZWVwcm9tLT5jaGlwX2NvbmYgJiAxIDw8IDMpCisJCXByaW50ayhLRVJOX0lORk8gIlVTQiBSZW1vdGUgd2FrZXVwIGNhcGFibGVcbiIpOworCisJaWYgKGVtX2VlcHJvbS0+Y2hpcF9jb25mICYgMSA8PCAyKQorCQlwcmludGsoS0VSTl9JTkZPICJVU0IgU2VsZiBwb3dlciBjYXBhYmxlXG4iKTsKKworCXN3aXRjaCAoZW1fZWVwcm9tLT5jaGlwX2NvbmYgJiAweDMpIHsKKwljYXNlIDA6CisJCXByaW50ayhLRVJOX0lORk8gIjUwMG1BIG1heCBwb3dlclxuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJpbnRrKEtFUk5fSU5GTyAiNDAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcmludGsoS0VSTl9JTkZPICIzMDBtQSBtYXggcG93ZXJcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByaW50ayhLRVJOX0lORk8gIjIwMG1BIG1heCBwb3dlclxuIik7CisJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJUYWJsZSBhdCAweCUwMngsIHN0cmluZ3M9MHglMDR4LCAweCUwNHgsIDB4JTA0eFxuIiwKKwkJCQllbV9lZXByb20tPnN0cmluZ19pZHhfdGFibGUsZW1fZWVwcm9tLT5zdHJpbmcxLAorCQkJCWVtX2VlcHJvbS0+c3RyaW5nMixlbV9lZXByb20tPnN0cmluZzMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBhbGdvX2NvbnRyb2woKQorICovCitzdGF0aWMgaW50IGFsZ29fY29udHJvbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGZ1bmN0aW9uYWxpdHkoKQorICovCitzdGF0aWMgdTMyIGZ1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCisjaWZuZGVmIEkyQ19QRUMKK3N0YXRpYyB2b2lkIGluY191c2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCU1PRF9JTkNfVVNFX0NPVU5UOworfQorCitzdGF0aWMgdm9pZCBkZWNfdXNlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlNT0RfREVDX1VTRV9DT1VOVDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGVtMjh4eF9zZXRfdHVuZXIoaW50IGNoZWNrX2VlcHJvbSwgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCisJaWYgKGRldi0+aGFzX3R1bmVyKSB7CisJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87CisJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOworCQl0dW5fc2V0dXAuYWRkciA9IGRldi0+dHVuZXJfYWRkcjsKKworCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCX0KKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBhdHRhY2hfaW5mb3JtKCkKKyAqIGdldHMgY2FsbGVkIHdoZW4gYSBkZXZpY2UgYXR0YWNoZXMgdG8gdGhlIGkyYyBidXMKKyAqIGRvZXMgc29tZSBiYXNpYyBjb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IGNsaWVudC0+YWRhcHRlci0+YWxnb19kYXRhOworCisJc3dpdGNoIChjbGllbnQtPmFkZHIgPDwgMSkgeworCQljYXNlIDB4ODY6CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFREQTk4ODdfU0VUX0NPTkZJRywgJmRldi0+dGRhOTg4N19jb25mKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NDI6CisJCQlkcHJpbnRrMSgxLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTE0IGRldGVjdGVkLlxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDRhOgorCQkJZHByaW50azEoMSwiYXR0YWNoX2luZm9ybTogc2FhNzExMyBkZXRlY3RlZC5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHhhMDoKKwkJCWRwcmludGsxKDEsImF0dGFjaF9pbmZvcm06IGVlcHJvbSBkZXRlY3RlZC5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHg2MDoKKwkJY2FzZSAweDhlOgorCQl7CisJCQlzdHJ1Y3QgSVJfaTJjICppciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCQkJZHByaW50azEoMSwiYXR0YWNoX2luZm9ybTogSVIgZGV0ZWN0ZWQgKCVzKS5cbiIsaXItPnBoeXMpOworCQkJZW0yOHh4X3NldF9pcihkZXYsaXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAweDgwOgorCQljYXNlIDB4ODg6CisJCQlkcHJpbnRrMSgxLCJhdHRhY2hfaW5mb3JtOiBtc3AzNHh4IGRldGVjdGVkLlxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweGI4OgorCQljYXNlIDB4YmE6CisJCQlkcHJpbnRrMSgxLCJhdHRhY2hfaW5mb3JtOiB0dnA1MTUwIGRldGVjdGVkLlxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsxKDEsImF0dGFjaCBpbmZvcm06IGRldGVjdGVkIEkyQyBhZGRyZXNzICV4XG4iLCBjbGllbnQtPmFkZHIgPDwgMSk7CisJCQlkZXYtPnR1bmVyX2FkZHIgPSBjbGllbnQtPmFkZHI7CisJCQllbTI4eHhfc2V0X3R1bmVyKC0xLCBjbGllbnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZW0yOHh4X2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBlbTI4eHhfaTJjX3hmZXIsCisJLmFsZ29fY29udHJvbCAgPSBhbGdvX2NvbnRyb2wsCisJLmZ1bmN0aW9uYWxpdHkgPSBmdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBlbTI4eHhfYWRhcF90ZW1wbGF0ZSA9IHsKKyNpZmRlZiBJMkNfUEVDCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjZWxzZQorCS5pbmNfdXNlID0gaW5jX3VzZSwKKwkuZGVjX3VzZSA9IGRlY191c2UsCisjZW5kaWYKKyNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCisJLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKyNlbmRpZgorCS5uYW1lID0gImVtMjh4eCIsCisJLmlkID0gSTJDX0hXX0JfRU0yOFhYLAorCS5hbGdvID0gJmVtMjh4eF9hbGdvLAorCS5jbGllbnRfcmVnaXN0ZXIgPSBhdHRhY2hfaW5mb3JtLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGVtMjh4eF9jbGllbnRfdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiZW0yOHh4IGludGVybmFsIiwKKwkuZmxhZ3MgPSBJMkNfQ0xJRU5UX0FMTE9XX1VTRSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBpMmNfZGV2cworICogaW5jb21wbGV0ZSBsaXN0IG9mIGtub3duIGRldmljZXMKKyAqLworc3RhdGljIGNoYXIgKmkyY19kZXZzWzEyOF0gPSB7CisJWzB4NGEgPj4gMV0gPSAic2FhNzExM2giLAorCVsweDYwID4+IDFdID0gInJlbW90ZSBJUiBzZW5zb3IiLAorCVsweDhlID4+IDFdID0gInJlbW90ZSBJUiBzZW5zb3IiLAorCVsweDg2ID4+IDFdID0gInRkYTk4ODciLAorCVsweDgwID4+IDFdID0gIm1zcDM0eHgiLAorCVsweDg4ID4+IDFdID0gIm1zcDM0eHgiLAorCVsweGEwID4+IDFdID0gImVlcHJvbSIsCisJWzB4YjggPj4gMV0gPSAidHZwNTE1MGEiLAorCVsweGJhID4+IDFdID0gInR2cDUxNTBhIiwKKwlbMHhjMCA+PiAxXSA9ICJ0dW5lciAoYW5hbG9nKSIsCisJWzB4YzIgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLAorCVsweGM0ID4+IDFdID0gInR1bmVyIChhbmFsb2cpIiwKKwlbMHhjNiA+PiAxXSA9ICJ0dW5lciAoYW5hbG9nKSIsCit9OworCisvKgorICogZG9faTJjX3NjYW4oKQorICogY2hlY2sgaTJjIGFkZHJlc3MgcmFuZ2UgZm9yIGRldmljZXMKKyAqLworc3RhdGljIHZvaWQgZG9faTJjX3NjYW4oY2hhciAqbmFtZSwgc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IGksIHJjOworCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCWMtPmFkZHIgPSBpOworCQlyYyA9IGkyY19tYXN0ZXJfcmVjdihjLCAmYnVmLCAwKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgaTJjIGRldmljZSBAIDB4JXggWyVzXVxuIiwgbmFtZSwKKwkJICAgICAgIGkgPDwgMSwgaTJjX2RldnNbaV0gPyBpMmNfZGV2c1tpXSA6ICI/Pz8iKTsKKwl9Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX2NhbGxfY2xpZW50cygpCisgKiBzZW5kIGNvbW1hbmRzIHRvIGFsbCBhdHRhY2hlZCBpMmMgZGV2aWNlcworICovCit2b2lkIGVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCUJVR19PTihOVUxMID09IGRldi0+aTJjX2FkYXAuYWxnb19kYXRhKTsKKwlpMmNfY2xpZW50c19jb21tYW5kKCZkZXYtPmkyY19hZGFwLCBjbWQsIGFyZyk7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX3JlZ2lzdGVyKCkKKyAqIHJlZ2lzdGVyIGkyYyBidXMKKyAqLworaW50IGVtMjh4eF9pMmNfcmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCUJVR19PTighZGV2LT5lbTI4eHhfd3JpdGVfcmVncyB8fCAhZGV2LT5lbTI4eHhfcmVhZF9yZWcpOworCUJVR19PTighZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEgfHwgIWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcSk7CisJZGV2LT5pMmNfYWRhcCA9IGVtMjh4eF9hZGFwX3RlbXBsYXRlOworCWRldi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKKwlzdHJjcHkoZGV2LT5pMmNfYWRhcC5uYW1lLCBkZXYtPm5hbWUpOworCWRldi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZGV2OworCWkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CisKKwlkZXYtPmkyY19jbGllbnQgPSBlbTI4eHhfY2xpZW50X3RlbXBsYXRlOworCWRldi0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmRldi0+aTJjX2FkYXA7CisKKwllbTI4eHhfaTJjX2VlcHJvbShkZXYsIGRldi0+ZWVkYXRhLCBzaXplb2YoZGV2LT5lZWRhdGEpKTsKKworCWlmIChpMmNfc2NhbikKKwkJZG9faTJjX3NjYW4oZGV2LT5uYW1lLCAmZGV2LT5pMmNfY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF9pMmNfdW5yZWdpc3RlcigpCisgKiB1bnJlZ2lzdGVyIGkyY19idXMKKyAqLworaW50IGVtMjh4eF9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjNDlkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICBoYW5kbGUgZW0yOHh4IElSIHJlbW90ZXMgdmlhIGxpbnV4IGtlcm5lbCBpbnB1dCBsYXllci4KKworICAgQ29weXJpZ2h0IChDKSAyMDA1IEx1ZG92aWNvIENhdmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+CisJCSAgICAgIE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CisJCSAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4KKwkJICAgICAgU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiZW0yOHh4LmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlzYWJsZV9pciA9IDA7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9pciwiZGlzYWJsZSBpbmZyYXJlZCByZW1vdGUgc3VwcG9ydCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGlyX2RlYnVnID0gMDsKK21vZHVsZV9wYXJhbShpcl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJfZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbSVJdIik7CisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKGlyX2RlYnVnKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZykKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1fdGVycmF0ZWNbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgwMSBdID0gS0VZX0NIQU5ORUwsCisJWyAweDAyIF0gPSBLRVlfU0VMRUNULAorCVsgMHgwMyBdID0gS0VZX01VVEUsCisJWyAweDA0IF0gPSBLRVlfUE9XRVIsCisJWyAweDA1IF0gPSBLRVlfS1AxLAorCVsgMHgwNiBdID0gS0VZX0tQMiwKKwlbIDB4MDcgXSA9IEtFWV9LUDMsCisJWyAweDA4IF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgwOSBdID0gS0VZX0tQNCwKKwlbIDB4MGEgXSA9IEtFWV9LUDUsCisJWyAweDBiIF0gPSBLRVlfS1A2LAorCVsgMHgwYyBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMHgwZCBdID0gS0VZX0tQNywKKwlbIDB4MGUgXSA9IEtFWV9LUDgsCisJWyAweDBmIF0gPSBLRVlfS1A5LAorCVsgMHgxMCBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxMSBdID0gS0VZX0tQMCwKKwlbIDB4MTIgXSA9IEtFWV9NRU5VLAorCVsgMHgxMyBdID0gS0VZX1BSSU5ULAorCVsgMHgxNCBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDE2IF0gPSBLRVlfUEFVU0UsCisJWyAweDE4IF0gPSBLRVlfUkVDT1JELAorCVsgMHgxOSBdID0gS0VZX1JFV0lORCwKKwlbIDB4MWEgXSA9IEtFWV9QTEFZLAorCVsgMHgxYiBdID0gS0VZX0ZPUldBUkQsCisJWyAweDFjIF0gPSBLRVlfQkFDS1NQQUNFLAorCVsgMHgxZSBdID0gS0VZX1NUT1AsCisJWyAweDQwIF0gPSBLRVlfWk9PTSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZ2V0X2tleV90ZXJyYXRlYyhzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgYjsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsJmIsMSkpIHsKKwkJZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGl0IHNlZW1zIHRoYXQgMHhGRSBpbmRpY2F0ZXMgdGhhdCBhIGJ1dHRvbiBpcyBzdGlsbCBob2xkCisJICAgZG93biwgd2hpbGUgMHhmZiBpbmRpY2F0ZXMgdGhhdCBubyBidXR0b24gaXMgaG9sZAorCSAgIGRvd24uIDB4ZmUgc2VxdWVuY2VzIGFyZSBzb21ldGltZXMgaW50ZXJydXB0ZWQgYnkgMHhGRiAqLworCisJZHByaW50aygia2V5ICUwMnhcbiIsIGIpOworCisJaWYgKGIgPT0gMHhmZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoYiA9PSAweGZlKQorCQkvKiBrZWVwIG9sZCBkYXRhICovCisJCXJldHVybiAxOworCisJKmlyX2tleSA9IGI7CisJKmlyX3JhdyA9IGI7CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCBnZXRfa2V5X2VtX2hhdXAoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwl1bnNpZ25lZCBjaGFyIGNvZGU7CisKKwkvKiBwb2xsIElSIGNoaXAgKi8KKwlpZiAoMiAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLGJ1ZiwyKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBEb2VzIGVsaW1pbmF0ZSByZXBlYXRlZCBwYXJpdHkgY29kZSAqLworCWlmIChidWZbMV09PTB4ZmYpCisJCXJldHVybiAwOworCisJLyogYXZvaWQgZmFzdCByZWFwZWF0aW5nICovCisJaWYgKGJ1ZlsxXT09aXItPm9sZCkKKwkJcmV0dXJuIDA7CisJaXItPm9sZD1idWZbMV07CisKKwkvKiBSZWFycmFuZ2VzIGJpdHMgdG8gdGhlIHJpZ2h0IG9yZGVyICovCisJY29kZT0gICAgKChidWZbMF0mMHgwMSk8PDUpIHwgLyogMDAxMCAwMDAwICovCisJCSAoKGJ1ZlswXSYweDAyKTw8MykgfCAvKiAwMDAxIDAwMDAgKi8KKwkJICgoYnVmWzBdJjB4MDQpPDwxKSB8IC8qIDAwMDAgMTAwMCAqLworCQkgKChidWZbMF0mMHgwOCk+PjEpIHwgLyogMDAwMCAwMTAwICovCisJCSAoKGJ1ZlswXSYweDEwKT4+MykgfCAvKiAwMDAwIDAwMTAgKi8KKwkJICgoYnVmWzBdJjB4MjApPj41KTsgIC8qIDAwMDAgMDAwMSAqLworCisJZHByaW50aygiaXIgaGF1cHBhdWdlIChlbTI4NDApOiBjb2RlPTB4JTAyeCAocmN2PTB4JTAyeClcbiIsY29kZSxidWZbMF0pOworCisJLyogcmV0dXJuIGtleSAqLworCSppcl9rZXkgPSBjb2RlOworCSppcl9yYXcgPSBjb2RlOworCXJldHVybiAxOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordm9pZCBlbTI4eHhfc2V0X2lyKHN0cnVjdCBlbTI4eHggKiBkZXYsc3RydWN0IElSX2kyYyAqaXIpCit7CisJaWYgKGRpc2FibGVfaXIpIHsKKwkJaXItPmdldF9rZXk9TlVMTDsKKwkJcmV0dXJuIDsKKwl9CisKKwkvKiBkZXRlY3QgJiBjb25maWd1cmUgKi8KKwlzd2l0Y2ggKGRldi0+bW9kZWwpIHsKKwljYXNlIChFTTI4MDBfQk9BUkRfVU5LTk9XTik6CisJCWJyZWFrOworCWNhc2UgKEVNMjgyMF9CT0FSRF9VTktOT1dOKToKKwkJYnJlYWs7CisJY2FzZSAoRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwKToKKwljYXNlIChFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTApOgorCQlpci0+aXJfY29kZXMgPSBpcl9jb2Rlc19lbV90ZXJyYXRlYzsKKwkJaXItPmdldF9rZXkgPSBnZXRfa2V5X3RlcnJhdGVjOworCQlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJpMmMgSVIgKEVNMjhYWCBUZXJyYXRlYykiKTsKKwkJYnJlYWs7CisJY2FzZSAoRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yKToKKwkJYnJlYWs7CisJY2FzZSAoRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMik6CisJCWlyLT5pcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CisJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9lbV9oYXVwOworCQlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJpMmMgSVIgKEVNMjg0MCBIYXVwcGF1Z2UpIik7CisJCWJyZWFrOworCWNhc2UgKEVNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yKToKKwkJYnJlYWs7CisJY2FzZSAoRU0yODAwX0JPQVJEX0xFQURURUtfV0lORkFTVF9VU0JJSSk6CisJCWJyZWFrOworCWNhc2UgKEVNMjgwMF9CT0FSRF9LV09STERfVVNCMjgwMCk6CisJCWJyZWFrOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2MxODI2YjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTAsMCArMSwxOTMzIEBACisvKgorICAgZW0yOHh4LXZpZGVvLmMgLSBkcml2ZXIgZm9yIEVtcGlhIEVNMjgwMC9FTTI4MjAvMjg0MCBVU0IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PgorCQkgICAgICBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPgorCQkgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+CisJCSAgICAgIFNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisKKyNpbmNsdWRlICJlbTI4eHguaCIKKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkx1ZG92aWNvIENhdmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+LCAiIFwKKwkJICAgICAgIk1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+LCAiIFwKKwkJICAgICAgIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4sICIgXAorCQkgICAgICAiU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+IgorCisjZGVmaW5lIERSSVZFUl9OQU1FICAgICAgICAgImVtMjh4eCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAiRW1waWEgZW0yOHh4IGJhc2VkIFVTQiB2aWRlbyBkZXZpY2UgZHJpdmVyIgorI2RlZmluZSBFTTI4WFhfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQorCisjZGVmaW5lIGVtMjh4eF92aWRlb2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKKwlpZiAodmlkZW9fZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgOiJmbXQsIFwKKwkJCSBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBMSVNUX0hFQUQoZW0yOHh4X2Rldmxpc3QpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGNhcmRbXSAgICAgPSB7WzAgLi4uIChFTTI4WFhfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKK21vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2FyZCwiY2FyZCB0eXBlIik7CisKK3N0YXRpYyBpbnQgdHVuZXIgPSAtMTsKK21vZHVsZV9wYXJhbSh0dW5lciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHVuZXIsICJ0dW5lciB0eXBlIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKHZpZGVvX2RlYnVnLGludCwwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbdmlkZW9dIik7CisKKy8qIHN1cHBvcnRlZCB0diBub3JtcyAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfdHZub3JtIHR2bm9ybXNbXSA9IHsKKwl7CisJCS5uYW1lID0gIlBBTCIsCisJCS5pZCA9IFY0TDJfU1REX1BBTCwKKwkJLm1vZGUgPSBWSURFT19NT0RFX1BBTCwKKwkgfSwgeworCQkubmFtZSA9ICJOVFNDIiwKKwkJLmlkID0gVjRMMl9TVERfTlRTQywKKwkJLm1vZGUgPSBWSURFT19NT0RFX05UU0MsCisJfSwgeworCQkgLm5hbWUgPSAiU0VDQU0iLAorCQkgLmlkID0gVjRMMl9TVERfU0VDQU0sCisJCSAubW9kZSA9IFZJREVPX01PREVfU0VDQU0sCisJfSwgeworCQkubmFtZSA9ICJQQUwtTSIsCisJCS5pZCA9IFY0TDJfU1REX1BBTF9NLAorCQkubW9kZSA9IFZJREVPX01PREVfUEFMLAorCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTRfaTJjX2luaXRbXSA9IHsKKwkweDAwLDB4MDAsMHgwMSwweDA4LDB4MDIsMHhjNCwweDAzLDB4MzAsMHgwNCwweDkwLDB4MDUsMHg5MCwweDA2LDB4ZWIsMHgwNywweGUwLAorCTB4MDgsMHg4OCwweDA5LDB4NDAsMHgwYSwweDgwLDB4MGIsMHg0NCwweDBjLDB4NDAsMHgwZCwweDAwLDB4MGUsMHg4MSwweDBmLDB4MmEsCisJMHgxMCwweDA2LDB4MTEsMHgwMCwweDEyLDB4YzgsMHgxMywweDgwLDB4MTQsMHgwMCwweDE1LDB4MTEsMHgxNiwweDAxLDB4MTcsMHg0MiwKKwkweDE4LDB4NDAsMHgxOSwweDgwLDB4NDAsMHgwMCwweDQxLDB4ZmYsMHg0MiwweGZmLDB4NDMsMHhmZiwweDQ0LDB4ZmYsMHg0NSwweGZmLAorCTB4NDYsMHhmZiwweDQ3LDB4ZmYsMHg0OCwweGZmLDB4NDksMHhmZiwweDRhLDB4ZmYsMHg0YiwweGZmLDB4NGMsMHhmZiwweDRkLDB4ZmYsCisJMHg0ZSwweGZmLDB4NGYsMHhmZiwweDUwLDB4ZmYsMHg1MSwweGZmLDB4NTIsMHhmZiwweDUzLDB4ZmYsMHg1NCwweDVmLDB4NTUsMHhmZiwKKwkweDU2LDB4ZmYsMHg1NywweGZmLDB4NTgsMHgwMCwweDU5LDB4NDcsMHg1YSwweDAzLDB4NWIsMHgwMywweDVkLDB4M2UsMHg1ZSwweDAwLAorCTB4ODAsMHgxYywweDgzLDB4MDEsMHg4NCwweGE1LDB4ODUsMHgxMCwweDg2LDB4NDUsMHg4NywweDQxLDB4ODgsMHhmMCwweDg4LDB4MDAsCisJMHg4OCwweGYwLDB4OTAsMHgwMCwweDkxLDB4MDgsMHg5MiwweDAwLDB4OTMsMHg4MCwweDk0LDB4MDgsMHg5NSwweDAwLDB4OTYsMHhjMCwKKwkweDk3LDB4MDIsMHg5OCwweDEzLDB4OTksMHgwMCwweDlhLDB4MzgsMHg5YiwweDAxLDB4OWMsMHg4MCwweDlkLDB4MDIsMHg5ZSwweDA2LAorCTB4OWYsMHgwMSwweGEwLDB4MDEsMHhhMSwweDAwLDB4YTIsMHgwMCwweGE0LDB4ODAsMHhhNSwweDM2LDB4YTYsMHgzNiwweGE4LDB4NjcsCisJMHhhOSwweDA0LDB4YWEsMHgwMCwweGFjLDB4MzMsMHhhZCwweDAyLDB4YWUsMHgwMCwweGIwLDB4Y2QsMHhiMSwweDA0LDB4YjIsMHhjZCwKKwkweGIzLDB4MDQsMHhiNCwweDAxLDB4YjgsMHgwMCwweGI5LDB4MDAsMHhiYSwweDAwLDB4YmIsMHgwMCwweGJjLDB4MDAsMHhiZCwweDAwLAorCTB4YmUsMHgwMCwweGJmLDB4MDAKK307CisKKyNkZWZpbmUgVFZOT1JNUyBBUlJBWV9TSVpFKHR2bm9ybXMpCisKKy8qIHN1cHBvcnRlZCBjb250cm9scyAqLworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBlbTI4eHhfcWN0cmxbXSA9IHsKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gLTEyOCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4MWYsCisJCS5zdGVwID0gMHgxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCisJCS5mbGFncyA9IDAsCisJfSx7CisJCS5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4MWYsCisJCS5zdGVwID0gMHgxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCisJCS5mbGFncyA9IDAsCisJfSx7CisJCS5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJWb2x1bWUiLAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1heGltdW0gPSAweDFmLAorCQkuc3RlcCA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDFmLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lID0gIk11dGUiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS5mbGFncyA9IDAsCisJfSx7CisJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIlJlZCBjaHJvbWEgYmFsYW5jZSIsCisJCS5taW5pbXVtID0gLTEyOCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiQmx1ZSBjaHJvbWEgYmFsYW5jZSIsCisJCS5taW5pbXVtID0gLTEyOCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9HQU1NQSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJHYW1tYSIsCisJCS5taW5pbXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4M2YsCisJCS5zdGVwID0gMHgxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4MjAsCisJCS5mbGFncyA9IDAsCisJIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbTI4eHhfdXNiX2RyaXZlcjsKKworc3RhdGljIERFQ0xBUkVfTVVURVgoZW0yOHh4X3N5c2ZzX2xvY2spOworc3RhdGljIERFQ0xBUkVfUldTRU0oZW0yOHh4X2Rpc2Nvbm5lY3QpOworCisvKioqKioqKioqKioqKioqKioqKioqICB2NGwyIGludGVyZmFjZSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga3ZpcnRfdG9fcGEodW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgbG9uZyBrdmEsIHJldDsKKworCWt2YSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwlrdmEgfD0gYWRyICYgKFBBR0VfU0laRSAtIDEpOworCXJldCA9IF9fcGEoa3ZhKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZW0yOHh4X2NvbmZpZygpCisgKiBpbml0cyByZWdpc3RlcnMgd2l0aCBzYW5lIGRlZmF1bHRzCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X2NvbmZpZyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisKKwkvKiBTZXRzIEkyQyBzcGVlZCB0byAxMDAgS0h6ICovCisJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwNiwgIlx4NDAiLCAxKTsKKworCS8qIGVuYWJsZSB2YmkgY2FwdHVyaW5nICovCisJZW0yOHh4X2F1ZGlvX3VzYl9tdXRlKGRldiwgMSk7CisJZGV2LT5tdXRlID0gMTsJCS8qIG1heWJlIG5vdCB0aGUgcmlnaHQgcGxhY2UuLi4gKi8KKwlkZXYtPnZvbHVtZSA9IDB4MWY7CisJZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKKwllbTI4eHhfYXVkaW9fYW5hbG9nX3NldHVwKGRldik7CisJZW0yOHh4X291dGZtdF9zZXRfeXV2NDIyKGRldik7CisJZW0yOHh4X2NvbG9ybGV2ZWxzX3NldF9kZWZhdWx0KGRldik7CisJZW0yOHh4X2NvbXByZXNzaW9uX2Rpc2FibGUoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogZW0yOHh4X2NvbmZpZ19pMmMoKQorICogY29uZmlndXJlIGkyYyBhdHRhY2hlZCBkZXZpY2VzCisgKi8KK3ZvaWQgZW0yOHh4X2NvbmZpZ19pMmMoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmOworCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgZW0yOHh4X3ZkaSA9IHsuZGF0YSA9IE5VTEwgfTsKKworCisJLyogY29uZmlndXJlIGRlY29kZXIgKi8KKwlpZihkZXYtPm1vZGVsID09IEVNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yKXsKKwkJZW0yOHh4X3ZkaS5kYXRhPXNhYTcxMTRfaTJjX2luaXQ7CisJCWVtMjh4eF92ZGkubGVuPXNpemVvZihzYWE3MTE0X2kyY19pbml0KTsKKwl9CisKKworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9JTklULCAmZW0yOHh4X3ZkaSk7CisJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBERUNPREVSX1NFVF9JTlBVVCwgJmRldi0+Y3RsX2lucHV0KTsKKy8qCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixERUNPREVSX1NFVF9QSUNUVVJFLCAmZGV2LT52cGljKTsgKi8KKy8qCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixERUNPREVSX1NFVF9OT1JNLCZkZXYtPnR2bm9ybS0+aWQpOyAqLworLyoJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LERFQ09ERVJfRU5BQkxFX09VVFBVVCwmb3V0cHV0KTsgKi8KKy8qCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixERUNPREVSX0RVTVAsIE5VTEwpOyAqLworCisJLyogY29uZmlndXJlIHR1bmVyICovCisJZi50dW5lciA9IDA7CisJZi50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZi5mcmVxdWVuY3kgPSA5MDc2OwkvKiBGSVhNRTpyZW1vdmUgbWFnaWMgbnVtYmVyICovCisJZGV2LT5jdGxfZnJlcSA9IGYuZnJlcXVlbmN5OworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRlJFUVVFTkNZLCAmZik7CisKKwkvKiBjb25maWd1cmUgdGRhOTg4NyAqLworCisKKy8qCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixWSURJT0NfU19TVEQsJmRldi0+dHZub3JtLT5pZCk7ICovCit9CisKKy8qCisgKiBlbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoKQorICogcHJlcGFyZSBxdWV1ZXMgZm9yIGluY29taW5nIGFuZCBvdXRnb2luZyBmcmFtZXMKKyAqLworc3RhdGljIHZvaWQgZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwl1MzIgaTsKKworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmlucXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm91dHF1ZXVlKTsKKworCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfTlVNX0ZSQU1FUzsgaSsrKSB7CisJCWRldi0+ZnJhbWVbaV0uc3RhdGUgPSBGX1VOVVNFRDsKKwkJZGV2LT5mcmFtZVtpXS5idWYuYnl0ZXN1c2VkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpZGVvX211eChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBpbmRleCkKK3sKKwlpbnQgaW5wdXQsIGFpbnB1dDsKKworCWlucHV0ID0gSU5QVVQoaW5kZXgpLT52bXV4OworCWRldi0+Y3RsX2lucHV0ID0gaW5kZXg7CisJZGV2LT5jdGxfYWlucHV0ID0gSU5QVVQoaW5kZXgpLT5hbXV4OworCisJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKKworCisJZW0yOHh4X3ZpZGVvZGJnKCJTZXR0aW5nIGlucHV0IGluZGV4PSVkLCB2bXV4PSVkLCBhbXV4PSVkXG4iLGluZGV4LGlucHV0LGRldi0+Y3RsX2FpbnB1dCk7CisKKwlpZiAoZGV2LT5oYXNfbXNwMzR4eCkgeworCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0FVRElPLCAmZGV2LT5jdGxfYWlucHV0KTsKKwkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKKwkJZW0yOHh4X2F1ZGlvX3NvdXJjZShkZXYsIGFpbnB1dCk7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChkZXYtPmN0bF9haW5wdXQpIHsKKwkJY2FzZSAwOgorCQkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19MSU5FOworCQl9CisJCWVtMjh4eF9hdWRpb19zb3VyY2UoZGV2LCBhaW5wdXQpOworCX0KK30KKworLyoKKyAqIGVtMjh4eF92NGwyX29wZW4oKQorICogaW5pdHMgdGhlIGRldmljZSBhbmQgc3RhcnRzIGlzb2MgdHJhbnNmZXIKKyAqLworc3RhdGljIGludCBlbTI4eHhfdjRsMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJaW50IGVyckNvZGUgPSAwOworCXN0cnVjdCBlbTI4eHggKmgsKmRldiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwmZW0yOHh4X2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGVtMjh4eCwgZGV2bGlzdCk7CisJCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ICA9IGg7CisJCX0KKwl9CisKKwlmaWxwLT5wcml2YXRlX2RhdGE9ZGV2OworCisKKwllbTI4eHhfdmlkZW9kYmcoInVzZXJzPSVkXG4iLCBkZXYtPnVzZXJzKTsKKworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJmVtMjh4eF9kaXNjb25uZWN0KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChkZXYtPnVzZXJzKSB7CisJCWVtMjh4eF93YXJuKCJ0aGlzIGRyaXZlciBjYW4gYmUgb3BlbmVkIG9ubHkgb25jZVxuIik7CisJCXVwX3JlYWQoJmVtMjh4eF9kaXNjb25uZWN0KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKy8qCWlmKGRldi0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpeworCQlkZXYtPnR5cGU9VjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwl9Ki8KKwlpZiAoZGV2LT52ZGV2LT5taW5vciA9PSBtaW5vcikgeworCQlkZXYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJfQorCisJaW5pdF9NVVRFWCgmZGV2LT5maWxlb3BfbG9jayk7CS8qIHRvIDEgPT0gYXZhaWxhYmxlICovCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+cXVldWVfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X2ZyYW1lKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfc3RyZWFtKTsKKworCWRvd24oJmRldi0+bG9jayk7CisKKwllbTI4eHhfc2V0X2FsdGVybmF0ZShkZXYpOworCisJZGV2LT53aWR0aCA9IG5vcm1fbWF4dyhkZXYpOworCWRldi0+aGVpZ2h0ID0gbm9ybV9tYXhoKGRldik7CisJZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKKwlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPmZyYW1lX3NpemUgPj4gMTsJLypib3RoX2ZpbGVkcyA/IGRldi0+ZnJhbWVfc2l6ZT4+MSA6IGRldi0+ZnJhbWVfc2l6ZTsgKi8KKwlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCWRldi0+aHNjYWxlID0gMDsKKwlkZXYtPnZzY2FsZSA9IDA7CisKKwllbTI4eHhfY2FwdHVyZV9zdGFydChkZXYsIDEpOworCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworCisJLyogc3RhcnQgdGhlIHRyYW5zZmVyICovCisJZXJyQ29kZSA9IGVtMjh4eF9pbml0X2lzb2MoZGV2KTsKKwlpZiAoZXJyQ29kZSkKKwkJZ290byBlcnI7CisKKwlkZXYtPnVzZXJzKys7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZGV2OworCWRldi0+aW8gPSBJT19OT05FOworCWRldi0+c3RyZWFtID0gU1RSRUFNX09GRjsKKwlkZXYtPm51bV9mcmFtZXMgPSAwOworCisJLyogcHJlcGFyZSBxdWV1ZXMgKi8KKwllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2KTsKKworCWRldi0+c3RhdGUgfD0gREVWX0lOSVRJQUxJWkVEOworCisJdmlkZW9fbXV4KGRldiwgMCk7CisKKyAgICAgIGVycjoKKwl1cCgmZGV2LT5sb2NrKTsKKwl1cF9yZWFkKCZlbTI4eHhfZGlzY29ubmVjdCk7CisJcmV0dXJuIGVyckNvZGU7Cit9CisKKy8qCisgKiBlbTI4eHhfcmVhbGVhc2VfcmVzb3VyY2VzKCkKKyAqIHVucmVnaXN0ZXJzIHRoZSB2NGwyLGkyYyBhbmQgdXNiIGRldmljZXMKKyAqIGNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgZ2V0cyBkaXNjb25lY3RlZCBvciBhdCBtb2R1bGUgdW5sb2FkCisqLworc3RhdGljIHZvaWQgZW0yOHh4X3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlkb3duKCZlbTI4eHhfc3lzZnNfbG9jayk7CisKKwllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZFxuIiwKKwkJICAgIGRldi0+dmRldi0+bWlub3IpOworCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldik7CisvKgl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYpOyAqLworCWVtMjh4eF9pMmNfdW5yZWdpc3RlcihkZXYpOworCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CisJdXAoJmVtMjh4eF9zeXNmc19sb2NrKTsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX2Nsb3NlKCkKKyAqIHN0b3BzIHN0cmVhbWluZyBhbmQgZGVhbGxvY2F0ZXMgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHY0bDIgY2FsbHMgYW5kIGlvY3RscworICovCitzdGF0aWMgaW50IGVtMjh4eF92NGwyX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBlcnJDb2RlOworCXN0cnVjdCBlbTI4eHggKmRldj1maWxwLT5wcml2YXRlX2RhdGE7CisKKwllbTI4eHhfdmlkZW9kYmcoInVzZXJzPSVkXG4iLCBkZXYtPnVzZXJzKTsKKworCWRvd24oJmRldi0+bG9jayk7CisKKwllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKworCWVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoZGV2KTsKKworCS8qIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBkaXNjb25uZWN0LCBmcmVlIHRoZSByZW1haW5pbmcgcmVzb3VyY2VzICovCisJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOworCQl1cCgmZGV2LT5sb2NrKTsKKwkJa2ZyZWUoZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogc2V0IGFsdGVybmF0ZSAwICovCisJZGV2LT5hbHQgPSAwOworCWVtMjh4eF92aWRlb2RiZygic2V0dGluZyBhbHRlcm5hdGUgMFxuIik7CisJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dWRldiwgMCwgMCk7CisJaWYgKGVyckNvZGUgPCAwKSB7CisJCWVtMjh4eF9lcnJkZXYgKCJjYW5ub3QgY2hhbmdlIGFsdGVybmF0ZSBudW1iZXIgdG8gMCAoZXJyb3I9JWkpXG4iLAorCQkgICAgIGVyckNvZGUpOworCX0KKworCWRldi0+dXNlcnMtLTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmRldi0+b3BlbiwgMSk7CisJdXAoJmRldi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9yZWFkKCkKKyAqIHdpbGwgYWxsb2NhdGUgYnVmZmVycyB3aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUKKyAqLworc3RhdGljIHNzaXplX3QKK2VtMjh4eF92NGwyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsCisJCSBsb2ZmX3QgKiBmX3BvcykKK3sKKwlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmYsICppOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPmZpbGVvcF9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQllbTI4eHhfdmlkZW9kYmcoImRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRldi0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQllbTI4eHhfdmlkZW9kYmcoImRldmljZSBtaXNjb25maWd1cmVkOyBjbG9zZSBhbmQgb3BlbiBpdCBhZ2FpblxuIik7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGRldi0+aW8gPT0gSU9fTU1BUCkgeworCQllbTI4eHhfdmlkZW9kYmcgKCJJTyBtZXRob2QgaXMgc2V0IHRvIG1tYXA7IGNsb3NlIGFuZCBvcGVuIgorCQkJCSIgdGhlIGRldmljZSBhZ2FpbiB0byBjaG9vc2UgdGhlIHJlYWQgbWV0aG9kXG4iKTsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2LT5pbyA9PSBJT19OT05FKSB7CisJCWlmICghZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhkZXYsIEVNMjhYWF9OVU1fUkVBRF9GUkFNRVMpKSB7CisJCQllbTI4eHhfZXJyZGV2KCJyZWFkIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZGV2LT5pbyA9IElPX1JFQUQ7CisJCWRldi0+c3RyZWFtID0gU1RSRUFNX09OOworCQllbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKGRldik7CisJfQorCisJaWYgKCFjb3VudCkgeworCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZkZXYtPm91dHF1ZXVlKSkgeworCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQorCQkgICAgKGRldi0+d2FpdF9mcmFtZSwKKwkJICAgICAoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB8fAorCQkgICAgIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkpOworCQlpZiAocmV0KSB7CisJCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwlmID0gbGlzdF9lbnRyeShkZXYtPm91dHF1ZXVlLnByZXYsIHN0cnVjdCBlbTI4eHhfZnJhbWVfdCwgZnJhbWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmZGV2LT5vdXRxdWV1ZSwgZnJhbWUpCisJICAgIGktPnN0YXRlID0gRl9VTlVTRUQ7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+b3V0cXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwllbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKGRldik7CisKKwlpZiAoY291bnQgPiBmLT5idWYubGVuZ3RoKQorCQljb3VudCA9IGYtPmJ1Zi5sZW5ndGg7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZi0+YnVmbWVtLCBjb3VudCkpIHsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJKmZfcG9zICs9IGNvdW50OworCisJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogZW0yOHh4X3Y0bDJfcG9sbCgpCisgKiB3aWxsIGFsbG9jYXRlIGJ1ZmZlcnMgd2hlbiBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW0yOHh4X3Y0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXN0cnVjdCBlbTI4eHggKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQllbTI4eHhfdmlkZW9kYmcoImRldmljZSBub3QgcHJlc2VudFxuIik7CisJfSBlbHNlIGlmIChkZXYtPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kIG9wZW4gaXQgYWdhaW5cbiIpOworCX0gZWxzZSB7CisJCWlmIChkZXYtPmlvID09IElPX05PTkUpIHsKKwkJCWlmICghZW0yOHh4X3JlcXVlc3RfYnVmZmVycworCQkJICAgIChkZXYsIEVNMjhYWF9OVU1fUkVBRF9GUkFNRVMpKSB7CisJCQkJZW0yOHh4X3dhcm4KKwkJCQkgICAgKCJwb2xsKCkgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeVxuIik7CisJCQl9IGVsc2UgeworCQkJCWRldi0+aW8gPSBJT19SRUFEOworCQkJCWRldi0+c3RyZWFtID0gU1RSRUFNX09OOworCQkJfQorCQl9CisKKwkJaWYgKGRldi0+aW8gPT0gSU9fUkVBRCkgeworCQkJZW0yOHh4X3F1ZXVlX3VudXNlZGZyYW1lcyhkZXYpOworCQkJcG9sbF93YWl0KGZpbHAsICZkZXYtPndhaXRfZnJhbWUsIHdhaXQpOworCisJCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKQorCQkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCisJCQlyZXR1cm4gbWFzazsKKwkJfQorCX0KKworCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwlyZXR1cm4gUE9MTEVSUjsKK30KKworLyoKKyAqIGVtMjh4eF92bV9vcGVuKCkKKyAqLworc3RhdGljIHZvaWQgZW0yOHh4X3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGVtMjh4eF9mcmFtZV90ICpmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudCsrOworfQorCisvKgorICogZW0yOHh4X3ZtX2Nsb3NlKCkKKyAqLworc3RhdGljIHZvaWQgZW0yOHh4X3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCS8qIE5PVEU6IGJ1ZmZlcnMgYXJlIG5vdCBmcmVlZCBoZXJlICovCisJc3RydWN0IGVtMjh4eF9mcmFtZV90ICpmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudC0tOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGVtMjh4eF92bV9vcHMgPSB7CisJLm9wZW4gPSBlbTI4eHhfdm1fb3BlbiwKKwkuY2xvc2UgPSBlbTI4eHhfdm1fY2xvc2UsCit9OworCisvKgorICogZW0yOHh4X3Y0bDJfbW1hcCgpCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCSAgICBzdGFydCA9IHZtYS0+dm1fc3RhcnQsIHBvcywgcGFnZTsKKwl1MzIgaTsKKworCXN0cnVjdCBlbTI4eHggKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCWVtMjh4eF92aWRlb2RiZygibW1hcDogZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCWVtMjh4eF92aWRlb2RiZyAoIm1tYXA6IERldmljZSBpcyBtaXNjb25maWd1cmVkOyBjbG9zZSBhbmQgIgorCQkJCQkJIm9wZW4gaXQgYWdhaW5cbiIpOworCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkZXYtPmlvICE9IElPX01NQVAgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8CisJICAgIHNpemUgIT0gUEFHRV9BTElHTihkZXYtPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpKSB7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2ZyYW1lczsgaSsrKSB7CisJCWlmICgoZGV2LT5mcmFtZVtpXS5idWYubS5vZmZzZXQgPj4gUEFHRV9TSElGVCkgPT0gdm1hLT52bV9wZ29mZikKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBkZXYtPm51bV9mcmFtZXMpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJtbWFwOiB1c2VyIHN1cHBsaWVkIG1hcHBpbmcgYWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2VcbiIpOworCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFZNX0lPIGlzIGV2ZW50dWFsbHkgZ29pbmcgdG8gcmVwbGFjZSBQYWdlUmVzZXJ2ZWQgYWx0b2dldGhlciAqLworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU87CisJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsJLyogYXZvaWQgdG8gc3dhcCBvdXQgdGhpcyBWTUEgKi8KKworCXBvcyA9ICh1bnNpZ25lZCBsb25nKWRldi0+ZnJhbWVbaV0uYnVmbWVtOworCXdoaWxlIChzaXplID4gMCkgewkvKiBzaXplIGlzIHBhZ2UtYWxpZ25lZCAqLworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwKKwkJCQkgICAgdm1hLT52bV9wYWdlX3Byb3QpKSB7CisJCQllbTI4eHhfdmlkZW9kYmcoIm1tYXA6IHJlbmFtZSBwYWdlIG1hcCBmYWlsZWRcbiIpOworCQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2bWEtPnZtX29wcyA9ICZlbTI4eHhfdm1fb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmRldi0+ZnJhbWVbaV07CisKKwllbTI4eHhfdm1fb3Blbih2bWEpOworCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF9nZXRfY3RybCgpCisgKiByZXR1cm4gdGhlIGN1cnJlbnQgc2F0dXJhdGlvbiwgYnJpZ2h0bmVzcyBvciBjb250cmFzdCwgbXV0ZSBzdGF0ZQorICovCitzdGF0aWMgaW50IGVtMjh4eF9nZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJczMyIHRtcDsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQljdHJsLT52YWx1ZSA9IGRldi0+bXV0ZTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWN0cmwtPnZhbHVlID0gZGV2LT52b2x1bWU7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJaWYgKCh0bXAgPSBlbTI4eHhfYnJpZ2h0bmVzc19nZXQoZGV2KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gKHMzMikgKChzOCkgdG1wKTsJLyogRklYTUU6IGNsZW5hZXIgd2F5IHRvIGV4dGVuZCBzaWduPyAqLworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gZW0yOHh4X2NvbnRyYXN0X2dldChkZXYpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gZW0yOHh4X3NhdHVyYXRpb25fZ2V0KGRldikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlpZiAoKHRtcCA9IGVtMjh4eF92X2JhbGFuY2VfZ2V0KGRldikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IChzMzIpICgoczgpIHRtcCk7CS8qIEZJWE1FOiBjbGVuYWVyIHdheSB0byBleHRlbmQgc2lnbj8gKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCWlmICgodG1wID0gZW0yOHh4X3VfYmFsYW5jZV9nZXQoZGV2KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gKHMzMikgKChzOCkgdG1wKTsJLyogRklYTUU6IGNsZW5hZXIgd2F5IHRvIGV4dGVuZCBzaWduPyAqLworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0dBTU1BOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gZW0yOHh4X2dhbW1hX2dldChkZXYpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogZW0yOHh4X3NldF9jdHJsKCkKKyAqIG11dGUgb3Igc2V0IG5ldyBzYXR1cmF0aW9uLCBicmlnaHRuZXNzIG9yIGNvbnRyYXN0CisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3NldF9jdHJsKHN0cnVjdCBlbTI4eHggKmRldiwgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUgIT0gZGV2LT5tdXRlKSB7CisJCQlkZXYtPm11dGUgPSBjdHJsLT52YWx1ZTsKKwkJCWVtMjh4eF9hdWRpb191c2JfbXV0ZShkZXYsIGN0cmwtPnZhbHVlKTsKKwkJCXJldHVybiBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlkZXYtPnZvbHVtZSA9IGN0cmwtPnZhbHVlOworCQlyZXR1cm4gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiBlbTI4eHhfYnJpZ2h0bmVzc19zZXQoZGV2LCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIGVtMjh4eF9jb250cmFzdF9zZXQoZGV2LCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gZW0yOHh4X3NhdHVyYXRpb25fc2V0KGRldiwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJldHVybiBlbTI4eHhfdl9iYWxhbmNlX3NldChkZXYsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0dXJuIGVtMjh4eF91X2JhbGFuY2Vfc2V0KGRldiwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfR0FNTUE6CisJCXJldHVybiBlbTI4eHhfZ2FtbWFfc2V0KGRldiwgY3RybC0+dmFsdWUpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KCkKKyAqIHN0b3BzIHN0cmVhbWluZworICovCitzdGF0aWMgaW50IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIHN0b3AgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKworCWRldi0+c3RyZWFtID0gU1RSRUFNX0lOVEVSUlVQVDsKKwlyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3N0cmVhbSwKKwkJCQkgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PRkYpIHx8CisJCQkJIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCksCisJCQkJIEVNMjhYWF9VUkJfVElNRU9VVCk7CisJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlIGlmIChyZXQpIHsKKwkJZGV2LT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kICIKKwkJCSJvcGVuIC9kZXYvdmlkZW8lZCBhZ2FpblxuIiwgZGV2LT52ZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X3NldF9ub3JtKHN0cnVjdCBlbTI4eHggKmRldiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXVuc2lnbmVkIGludCBoc2NhbGUsIHZzY2FsZTsKKwl1bnNpZ25lZCBpbnQgbWF4aCwgbWF4dzsKKworCW1heHcgPSBub3JtX21heHcoZGV2KTsKKwltYXhoID0gbm9ybV9tYXhoKGRldik7CisKKwkvKiB3aWR0aCBtdXN0IGV2ZW4gYmVjYXVzZSBvZiB0aGUgWVVZViBmb3JtYXQgKi8KKwkvKiBoZWlnaHQgbXVzdCBiZSBldmVuIGJlY2F1c2Ugb2YgaW50ZXJsYWNpbmcgKi8KKwloZWlnaHQgJj0gMHhmZmZlOworCXdpZHRoICY9IDB4ZmZmZTsKKworCWlmIChoZWlnaHQgPCAzMikKKwkJaGVpZ2h0ID0gMzI7CisJaWYgKGhlaWdodCA+IG1heGgpCisJCWhlaWdodCA9IG1heGg7CisJaWYgKHdpZHRoIDwgNDgpCisJCXdpZHRoID0gNDg7CisJaWYgKHdpZHRoID4gbWF4dykKKwkJd2lkdGggPSBtYXh3OworCisJaWYgKChoc2NhbGUgPSAoKCh1bnNpZ25lZCBsb25nKW1heHcpIDw8IDEyKSAvIHdpZHRoIC0gNDA5NkwpID49IDB4NDAwMCkKKwkJaHNjYWxlID0gMHgzZmZmOworCXdpZHRoID0gKCgodW5zaWduZWQgbG9uZyltYXh3KSA8PCAxMikgLyAoaHNjYWxlICsgNDA5NkwpOworCisJaWYgKCh2c2NhbGUgPSAoKCh1bnNpZ25lZCBsb25nKW1heGgpIDw8IDEyKSAvIGhlaWdodCAtIDQwOTZMKSA+PSAweDQwMDApCisJCXZzY2FsZSA9IDB4M2ZmZjsKKwloZWlnaHQgPSAoKCh1bnNpZ25lZCBsb25nKW1heGgpIDw8IDEyKSAvICh2c2NhbGUgKyA0MDk2TCk7CisKKwkvKiBzZXQgbmV3IGltYWdlIHNpemUgKi8KKwlkZXYtPndpZHRoID0gd2lkdGg7CisJZGV2LT5oZWlnaHQgPSBoZWlnaHQ7CisJZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKKwlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPmZyYW1lX3NpemUgPj4gMTsJLypib3RoX2ZpbGVkcyA/IGRldi0+ZnJhbWVfc2l6ZT4+MSA6IGRldi0+ZnJhbWVfc2l6ZTsgKi8KKwlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCWRldi0+aHNjYWxlID0gaHNjYWxlOworCWRldi0+dnNjYWxlID0gdnNjYWxlOworCisJZW0yOHh4X3Jlc29sdXRpb25fc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX2RvX2lvY3RsKCkKKyAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gY2FsbGVkIGRpcmVjdGx5LCBidXQgZnJvbQorICogZW0yOHh4X3Y0bDJfaW9jdGwuIFVzZXJzcGFjZQorICogY29weWluZyBpcyBkb25lIGFscmVhZHksIGFyZyBpcyBhIGtlcm5lbCBwb2ludGVyLgorICovCitzdGF0aWMgaW50IGVtMjh4eF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgIHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnLAorCQkJICAgdjRsMl9raW9jdGwgZHJpdmVyX2lvY3RsKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCQkvKiAtLS0tLS0tLS0tIHR2IG5vcm1zIC0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19FTlVNU1REOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqZSA9IGFyZzsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQlpID0gZS0+aW5kZXg7CisJCQlpZiAoaSA+PSBUVk5PUk1TKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gdjRsMl92aWRlb19zdGRfY29uc3RydWN0KGUsIHR2bm9ybXNbZS0+aW5kZXhdLmlkLAorCQkJCQkJICAgICAgIHR2bm9ybXNbZS0+aW5kZXhdLm5hbWUpOworCQkJZS0+aW5kZXggPSBpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NfR19TVEQ6CisJCXsKKwkJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKKworCQkJKmlkID0gZGV2LT50dm5vcm0tPmlkOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwkJeworCQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOworCQkJdW5zaWduZWQgaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBUVk5PUk1TOyBpKyspCisJCQkJaWYgKCppZCA9PSB0dm5vcm1zW2ldLmlkKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IFRWTk9STVMpCisJCQkJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKKwkJCQkJaWYgKCppZCAmIHR2bm9ybXNbaV0uaWQpCisJCQkJCQlicmVhazsKKwkJCWlmIChpID09IFRWTk9STVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWRvd24oJmRldi0+bG9jayk7CisJCQlkZXYtPnR2bm9ybSA9ICZ0dm5vcm1zW2ldOworCisJCQllbTI4eHhfc2V0X25vcm0oZGV2LCBkZXYtPndpZHRoLCBkZXYtPmhlaWdodCk7CisKKy8qCisJCWRldi0+d2lkdGg9bm9ybV9tYXh3KGRldik7CisJCWRldi0+aGVpZ2h0PW5vcm1fbWF4aChkZXYpOworCQlkZXYtPmZyYW1lX3NpemU9ZGV2LT53aWR0aCpkZXYtPmhlaWdodCoyOworCQlkZXYtPmZpZWxkX3NpemU9ZGV2LT5mcmFtZV9zaXplPj4xOworCQlkZXYtPmJ5dGVzcGVybGluZT1kZXYtPndpZHRoKjI7CisJCWRldi0+aHNjYWxlPTA7CisJCWRldi0+dnNjYWxlPTA7CisKKwkJZW0yOHh4X3Jlc29sdXRpb25fc2V0KGRldik7CisqLworLyoKKwkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisJCWVtMjh4eF9zZXRfYWx0ZXJuYXRlKGRldik7CisJCWVtMjh4eF9jYXB0dXJlX3N0YXJ0KGRldiwgMSk7CisJCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworCQllbTI4eHhfaW5pdF9pc29jKGRldik7CisqLworCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBERUNPREVSX1NFVF9OT1JNLAorCQkJCQkJJnR2bm9ybXNbaV0ubW9kZSk7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX1NURCwKKwkJCQkJCSZkZXYtPnR2bm9ybS0+aWQpOworCisJCQl1cCgmZGV2LT5sb2NrKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiAtLS0tLS0gaW5wdXQgc3dpdGNoaW5nIC0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19FTlVNSU5QVVQ6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOworCQkJdW5zaWduZWQgaW50IG47CisJCQlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVbXSA9IHsKKwkJCQlbRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMV0gPSAiQ29tcG9zaXRlMSIsCisJCQkJW0VNMjhYWF9WTVVYX0NPTVBPU0lURTJdID0gIkNvbXBvc2l0ZTIiLAorCQkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUzXSA9ICJDb21wb3NpdGUzIiwKKwkJCQlbRU0yOFhYX1ZNVVhfQ09NUE9TSVRFNF0gPSAiQ29tcG9zaXRlNCIsCisJCQkJW0VNMjhYWF9WTVVYX1NWSURFT10gPSAiUy1WaWRlbyIsCisJCQkJW0VNMjhYWF9WTVVYX1RFTEVWSVNJT05dID0gIlRlbGV2aXNpb24iLAorCQkJCVtFTTI4WFhfVk1VWF9DQUJMRV0gPSAiQ2FibGUgVFYiLAorCQkJCVtFTTI4WFhfVk1VWF9EVkJdID0gIkRWQiIsCisJCQkJW0VNMjhYWF9WTVVYX0RFQlVHXSA9ICJmb3IgZGVidWcgb25seSIsCisJCQl9OworCisJCQluID0gaS0+aW5kZXg7CisJCQlpZiAobiA+PSBNQVhfRU0yOFhYX0lOUFVUKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKDAgPT0gSU5QVVQobiktPnR5cGUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7CisJCQlpLT5pbmRleCA9IG47CisJCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJCXN0cmNweShpLT5uYW1lLCBpbmFtZVtJTlBVVChuKS0+dHlwZV0pOworCQkJaWYgKChFTTI4WFhfVk1VWF9URUxFVklTSU9OID09IElOUFVUKG4pLT50eXBlKSB8fAorCQkJICAgIChFTTI4WFhfVk1VWF9DQUJMRSA9PSBJTlBVVChuKS0+dHlwZSkpCisJCQkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKwkJCWZvciAobiA9IDA7IG4gPCBBUlJBWV9TSVpFKHR2bm9ybXMpOyBuKyspCisJCQkJaS0+c3RkIHw9IHR2bm9ybXNbbl0uaWQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBWSURJT0NfR19JTlBVVDoKKwkJeworCQkJaW50ICppID0gYXJnOworCQkJKmkgPSBkZXYtPmN0bF9pbnB1dDsKKworCQkJcmV0dXJuIDA7CisJCX0KKworCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJCXsKKwkJCWludCAqaW5kZXggPSBhcmc7CisKKwkJCWlmICgqaW5kZXggPj0gTUFYX0VNMjhYWF9JTlBVVCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICgwID09IElOUFVUKCppbmRleCktPnR5cGUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWRvd24oJmRldi0+bG9jayk7CisJCQl2aWRlb19tdXgoZGV2LCAqaW5kZXgpOworCQkJdXAoJmRldi0+bG9jayk7CisKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIFZJRElPQ19HX0FVRElPOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKKwkJCXVuc2lnbmVkIGludCBpbmRleCA9IGEtPmluZGV4OworCisJCQlpZiAoYS0+aW5kZXggPiAxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOworCQkJaW5kZXggPSBkZXYtPmN0bF9haW5wdXQ7CisKKwkJCWlmIChpbmRleCA9PSAwKSB7CisJCQkJc3RyY3B5KGEtPm5hbWUsICJUZWxldmlzaW9uIik7CisJCQl9IGVsc2UgeworCQkJCXN0cmNweShhLT5uYW1lLCAiTGluZSBJbiIpOworCQkJfQorCQkJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwkJCWEtPmluZGV4ID0gaW5kZXg7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBWSURJT0NfU19BVURJTzoKKwkJeworCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7CisJCQlpZiAoYS0+aW5kZXggIT0gZGV2LT5jdGxfYWlucHV0KQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIC0tLSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQkJdTggaSwgbjsKKwkJCW4gPSBzaXplb2YoZW0yOHh4X3FjdHJsKSAvIHNpemVvZihlbTI4eHhfcWN0cmxbMF0pOworCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKGVtMjh4eF9xY3RybFtpXSksCisJCQkJCSAgICAgICBzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCisJCQlyZXR1cm4gZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCX0KKworCWNhc2UgVklESU9DX1NfQ1RSTF9PTEQ6CS8qID8/PyAqLworCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJCXU4IGksIG47CisKKworCQkJbiA9IHNpemVvZihlbTI4eHhfcWN0cmwpIC8gc2l6ZW9mKGVtMjh4eF9xY3RybFswXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKKwkJCQkJaWYgKGN0cmwtPnZhbHVlIDwKKwkJCQkJICAgIGVtMjh4eF9xY3RybFtpXS5taW5pbXVtCisJCQkJCSAgICB8fCBjdHJsLT52YWx1ZSA+CisJCQkJCSAgICBlbTI4eHhfcWN0cmxbaV0ubWF4aW11bSkKKwkJCQkJCXJldHVybiAtRVJBTkdFOworCisJCQkJCXJldHVybiBlbTI4eHhfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIC0tLSB0dW5lciBpb2N0bHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfR19UVU5FUjoKKwkJeworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisJCQlpbnQgc3RhdHVzID0gMDsKKworCQkJaWYgKDAgIT0gdC0+aW5kZXgpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKKwkJCXN0cmNweSh0LT5uYW1lLCAiVHVuZXIiKTsKKwkJCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOworCQkJdC0+cmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwkvKiBGSVhNRTogc2V0IGNvcnJlY3QgcmFuZ2UgKi8KKy8qCQl0LT5zaWduYWwgPSAweGZmZmY7Ki8KKy8qCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsVklESU9DX0dfVFVORVIsdCk7Ki8KKwkJCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLworCQkJZG93bigmZGV2LT5sb2NrKTsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9HRVRfU1RBVFVTLAorCQkJCQkJJnN0YXR1cyk7CisJCQl1cCgmZGV2LT5sb2NrKTsKKwkJCXQtPnNpZ25hbCA9CisJCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpICE9IDAgPyAweGZmZmYgOiAwOworCisJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPX0dfVFVORVI6IHNpZ25hbD0leCwgYWZjPSV4XG4iLCB0LT5zaWduYWwsCisJCQkJIHQtPmFmYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX1NfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCQkJaW50IHN0YXR1cyA9IDA7CisKKwkJCWlmICgwICE9IHQtPmluZGV4KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOworCQkJc3RyY3B5KHQtPm5hbWUsICJUdW5lciIpOworCQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CisJCQl0LT5yYW5nZWhpZ2ggPSAweGZmZmZmZmZmVUw7CS8qIEZJWE1FOiBzZXQgY29ycmVjdCByYW5nZSAqLworLyoJCXQtPnNpZ25hbCA9IDB4ZmZmZjsgKi8KKwkJCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLworCQkJZG93bigmZGV2LT5sb2NrKTsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9HRVRfU1RBVFVTLAorCQkJCQkJJnN0YXR1cyk7CisJCQl1cCgmZGV2LT5sb2NrKTsKKwkJCXQtPnNpZ25hbCA9CisJCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpICE9IDAgPyAweGZmZmYgOiAwOworCisJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPX1NfVFVORVI6IHNpZ25hbD0leCwgYWZjPSV4XG4iLAorCQkJCSB0LT5zaWduYWwsIHQtPmFmYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJCWYtPmZyZXF1ZW5jeSA9IGRldi0+Y3RsX2ZyZXE7CisKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQkJaWYgKDAgIT0gZi0+dHVuZXIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChWNEwyX1RVTkVSX0FOQUxPR19UViAhPSBmLT50eXBlKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlkb3duKCZkZXYtPmxvY2spOworCQkJZGV2LT5jdGxfZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwkJCXVwKCZkZXYtPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKworCWNhc2UgVklESU9DX0NST1BDQVA6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNjID0gYXJnOworCisJCQlpZiAoY2MtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJY2MtPmJvdW5kcy5sZWZ0ID0gMDsKKwkJCWNjLT5ib3VuZHMudG9wID0gMDsKKwkJCWNjLT5ib3VuZHMud2lkdGggPSBkZXYtPndpZHRoOworCQkJY2MtPmJvdW5kcy5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwkJCWNjLT5kZWZyZWN0ID0gY2MtPmJvdW5kczsKKwkJCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSA1NDsJLyogNDozIEZJWE1FOiByZW1vdmUgbWFnaWMgbnVtYmVycyAqLworCQkJY2MtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yID0gNTk7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX1NUUkVBTU9OOgorCQl7CisJCQlpbnQgKnR5cGUgPSBhcmc7CisKKwkJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKKwkJCSAgICB8fCBkZXYtPmlvICE9IElPX01NQVApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChsaXN0X2VtcHR5KCZkZXYtPmlucXVldWUpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlkZXYtPnN0cmVhbSA9IFNUUkVBTV9PTjsJLyogRklYTUU6IFN0YXJ0IHZpZGVvIGNhcHR1cmUgaGVyZT8gKi8KKworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU1RSRUFNT046IHN0YXJ0aW5nIHN0cmVhbVxuIik7CisKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgorCQl7CisJCQlpbnQgKnR5cGUgPSBhcmc7CisJCQlpbnQgcmV0OworCisJCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCisJCQkgICAgfHwgZGV2LT5pbyAhPSBJT19NTUFQKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoZGV2LT5zdHJlYW0gPT0gU1RSRUFNX09OKSB7CisJCQkJZW0yOHh4X3ZpZGVvZGJnICgiVklESU9DX1NUUkVBTU9GRjogaW50ZXJydXB0aW5nIHN0cmVhbVxuIik7CisJCQkJaWYgKChyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYpKSkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhkZXYpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcsCisJCQkJCQkgIGRyaXZlcl9pb2N0bCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogZW0yOHh4X3Y0bDJfZG9faW9jdGwoKQorICogVGhpcyBmdW5jdGlvbiBpcyBfbm90XyBjYWxsZWQgZGlyZWN0bHksIGJ1dCBmcm9tCisgKiBlbTI4eHhfdjRsMl9pb2N0bC4gVXNlcnNwYWNlCisgKiBjb3B5aW5nIGlzIGRvbmUgYWxyZWFkeSwgYXJnIGlzIGEga2VybmVsIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHZpZGVvX2RlYnVnID4gMSkKKwkJZW0yOHh4X3ByaW50X2lvY3RsKGRldi0+bmFtZSxjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKworCQkvKiAtLS0gY2FwYWJpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CisKKwkJCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisJCQlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLAorCQkJCXNpemVvZihjYXAtPmNhcmQpKTsKKwkJCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT51ZGV2LT5kZXYuYnVzX2lkLAorCQkJCXNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJCQljYXAtPnZlcnNpb24gPSBFTTI4WFhfVkVSU0lPTl9DT0RFOworCQkJY2FwLT5jYXBhYmlsaXRpZXMgPQorCQkJICAgIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQkJICAgIFY0TDJfQ0FQX0FVRElPIHwKKwkJCSAgICBWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJCQlpZiAoZGV2LT5oYXNfdHVuZXIpCisJCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIC0tLSBjYXB0dXJlIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGQgPSBhcmc7CisKKwkJCWlmIChmbXRkLT5pbmRleCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtc2V0KGZtdGQsIDAsIHNpemVvZigqZm10ZCkpOworCQkJZm10ZC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJCXN0cmNweShmbXRkLT5kZXNjcmlwdGlvbiwgIlBhY2tlZCBZVVkyIik7CisJCQlmbXRkLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQkJbWVtc2V0KGZtdGQtPnJlc2VydmVkLCAwLCBzaXplb2YoZm10ZC0+cmVzZXJ2ZWQpKTsKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIFZJRElPQ19HX0ZNVDoKKwkJeworCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQgPSBhcmc7CisKKwkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX0dfRk1UOiB0eXBlPSVzXG4iLAorCQkJCSBmb3JtYXQtPnR5cGUgPT0KKwkJCQkgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFID8KKwkJCQkgIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSIgOiBmb3JtYXQtPnR5cGUgPT0KKwkJCQkgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSA/CisJCQkJICJWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFICIgOgorCQkJCSAibm90IHN1cHBvcnRlZCIpOworCisJCQlpZiAoZm9ybWF0LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZm9ybWF0LT5mbXQucGl4LndpZHRoID0gZGV2LT53aWR0aDsKKwkJCWZvcm1hdC0+Zm10LnBpeC5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwkJCWZvcm1hdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQkJZm9ybWF0LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGRldi0+Ynl0ZXNwZXJsaW5lOworCQkJZm9ybWF0LT5mbXQucGl4LnNpemVpbWFnZSA9IGRldi0+ZnJhbWVfc2l6ZTsKKwkJCWZvcm1hdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKwkJCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IGRldi0+aW50ZXJsYWNlZCA/IFY0TDJfRklFTERfSU5URVJMQUNFRCA6IFY0TDJfRklFTERfVE9QOwkvKiBGSVhNRTogVE9QPyBOT05FPyBCT1RUT00/IEFMVEVOQVRFPyAqLworCisJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19HX0ZNVDogJWR4JWRcbiIsIGRldi0+d2lkdGgsCisJCQkJIGRldi0+aGVpZ2h0KTsKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCWNhc2UgVklESU9DX1NfRk1UOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCA9IGFyZzsKKwkJCXUzMiBpOworCQkJaW50IHJldCA9IDA7CisJCQlpbnQgd2lkdGggPSBmb3JtYXQtPmZtdC5waXgud2lkdGg7CisJCQlpbnQgaGVpZ2h0ID0gZm9ybWF0LT5mbXQucGl4LmhlaWdodDsKKwkJCXVuc2lnbmVkIGludCBoc2NhbGUsIHZzY2FsZTsKKwkJCXVuc2lnbmVkIGludCBtYXhoLCBtYXh3OworCisJCQltYXh3ID0gbm9ybV9tYXh3KGRldik7CisJCQltYXhoID0gbm9ybV9tYXhoKGRldik7CisKKy8qCQlpbnQgYm90aF9maWVsZHM7ICovCisKKwkJCWVtMjh4eF92aWRlb2RiZygiJXM6IHR5cGU9JXNcbiIsCisJCQkJIGNtZCA9PQorCQkJCSBWSURJT0NfVFJZX0ZNVCA/ICJWSURJT0NfVFJZX0ZNVCIgOgorCQkJCSAiVklESU9DX1NfRk1UIiwKKwkJCQkgZm9ybWF0LT50eXBlID09CisJCQkJIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSA/CisJCQkJICJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUiIDogZm9ybWF0LT50eXBlID09CisJCQkJIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgPworCQkJCSAiVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAiIDoKKwkJCQkgIm5vdCBzdXBwb3J0ZWQiKTsKKworCQkJaWYgKGZvcm1hdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWVtMjh4eF92aWRlb2RiZygiJXM6IHJlcXVlc3RlZCAlZHglZFxuIiwKKwkJCQkgY21kID09CisJCQkJIFZJRElPQ19UUllfRk1UID8gIlZJRElPQ19UUllfRk1UIiA6CisJCQkJICJWSURJT0NfU19GTVQiLCBmb3JtYXQtPmZtdC5waXgud2lkdGgsCisJCQkJIGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQpOworCisJCQkvKiBGSVhNRTogTW92ZSBzb21lIGNvZGUgYXdheSBmcm9tIGhlcmUgKi8KKwkJCS8qIHdpZHRoIG11c3QgZXZlbiBiZWNhdXNlIG9mIHRoZSBZVVlWIGZvcm1hdCAqLworCQkJLyogaGVpZ2h0IG11c3QgYmUgZXZlbiBiZWNhdXNlIG9mIGludGVybGFjaW5nICovCisJCQloZWlnaHQgJj0gMHhmZmZlOworCQkJd2lkdGggJj0gMHhmZmZlOworCisJCQlpZiAoaGVpZ2h0IDwgMzIpCisJCQkJaGVpZ2h0ID0gMzI7CisJCQlpZiAoaGVpZ2h0ID4gbWF4aCkKKwkJCQloZWlnaHQgPSBtYXhoOworCQkJaWYgKHdpZHRoIDwgNDgpCisJCQkJd2lkdGggPSA0ODsKKwkJCWlmICh3aWR0aCA+IG1heHcpCisJCQkJd2lkdGggPSBtYXh3OworCisJCQlpZihkZXYtPmlzX2VtMjgwMCl7CisJCQkJLyogdGhlIGVtMjgwMCBjYW4gb25seSBzY2FsZSBkb3duIHRvIDUwJSAqLworCQkJCWlmKGhlaWdodCAlIChtYXhoIC8gMikpCisJCQkJCWhlaWdodD1tYXhoOworCQkJCWlmKHdpZHRoICUgKG1heHcgLyAyKSkKKwkJCQkJd2lkdGg9bWF4dzsKKwkJCQkvKiBhY2NvcmRpbmcgdG8gZW1waWF0ZWNoIHN1cHBvcnQgKi8KKwkJCQkvKiB0aGUgTWF4UGFja2V0U2l6ZSBpcyB0byBzbWFsbCB0byBzdXBwb3J0ICovCisJCQkJLyogZnJhbWVzaXplcyBsYXJnZXIgdGhhbiA2NDB4NDgwIEAgMzAgZnBzICovCisJCQkJLyogb3IgNjQweDU3NiBAIDI1IGZwcy4gQXMgdGhpcyB3b3VsZCBjdXQgKi8KKwkJCQkvKiBvZiBhIHBhcnQgb2YgdGhlIGltYWdlIHdlIHByZWZlciAqLworCQkJCS8qIDM2MHg1NzYgb3IgMzYweDQ4MCBmb3Igbm93ICovCisJCQkJaWYod2lkdGggPT0gbWF4dyAmJiBoZWlnaHQgPT0gbWF4aCkKKwkJCQkJd2lkdGggLz0gMjsKKwkJCX0KKworCQkJaWYgKChoc2NhbGUgPQorCQkJICAgICAoKCh1bnNpZ25lZCBsb25nKW1heHcpIDw8IDEyKSAvIHdpZHRoIC0gNDA5NkwpID49CisJCQkgICAgMHg0MDAwKQorCQkJCWhzY2FsZSA9IDB4M2ZmZjsKKwkJCXdpZHRoID0KKwkJCSAgICAoKCh1bnNpZ25lZCBsb25nKW1heHcpIDw8IDEyKSAvIChoc2NhbGUgKyA0MDk2TCk7CisKKwkJCWlmICgodnNjYWxlID0KKwkJCSAgICAgKCgodW5zaWduZWQgbG9uZyltYXhoKSA8PCAxMikgLyBoZWlnaHQgLSA0MDk2TCkgPj0KKwkJCSAgICAweDQwMDApCisJCQkJdnNjYWxlID0gMHgzZmZmOworCQkJaGVpZ2h0ID0KKwkJCSAgICAoKCh1bnNpZ25lZCBsb25nKW1heGgpIDw8IDEyKSAvICh2c2NhbGUgKyA0MDk2TCk7CisKKwkJCWZvcm1hdC0+Zm10LnBpeC53aWR0aCA9IHdpZHRoOworCQkJZm9ybWF0LT5mbXQucGl4LmhlaWdodCA9IGhlaWdodDsKKwkJCWZvcm1hdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQkJZm9ybWF0LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IHdpZHRoICogMjsKKwkJCWZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSB3aWR0aCAqIDIgKiBoZWlnaHQ7CisJCQlmb3JtYXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJCQlmb3JtYXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisKKwkJCWVtMjh4eF92aWRlb2RiZygiJXM6IHJldHVybmVkICVkeCVkICglZCwgJWQpXG4iLAorCQkJCSBjbWQgPT0KKwkJCQkgVklESU9DX1RSWV9GTVQgPyAiVklESU9DX1RSWV9GTVQiIDoKKwkJCQkgIlZJRElPQ19TX0ZNVCIsIGZvcm1hdC0+Zm10LnBpeC53aWR0aCwKKwkJCQkgZm9ybWF0LT5mbXQucGl4LmhlaWdodCwgaHNjYWxlLCB2c2NhbGUpOworCisJCQlpZiAoY21kID09IFZJRElPQ19UUllfRk1UKQorCQkJCXJldHVybiAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspCisJCQkJaWYgKGRldi0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgeworCQkJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19TX0ZNVCBmYWlsZWQuICIKKwkJCQkJCSJVbm1hcCB0aGUgYnVmZmVycyBmaXJzdC5cbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJCS8qIHN0b3AgaW8gaW4gY2FzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzICovCisJCQlpZiAoZGV2LT5zdHJlYW0gPT0gU1RSRUFNX09OKSB7CisJCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU0VUX0ZNVDogaW50ZXJ1cHRpbmcgc3RyZWFtXG4iKTsKKwkJCQlpZiAoKHJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldikpKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQllbTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldik7CisJCQlkZXYtPmlvID0gSU9fTk9ORTsKKworCQkJLyogc2V0IG5ldyBpbWFnZSBzaXplICovCisJCQlkZXYtPndpZHRoID0gd2lkdGg7CisJCQlkZXYtPmhlaWdodCA9IGhlaWdodDsKKwkJCWRldi0+ZnJhbWVfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodCAqIDI7CisJCQlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPmZyYW1lX3NpemUgPj4gMTsJLypib3RoX2ZpbGVkcyA/IGRldi0+ZnJhbWVfc2l6ZT4+MSA6IGRldi0+ZnJhbWVfc2l6ZTsgKi8KKwkJCWRldi0+Ynl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCAqIDI7CisJCQlkZXYtPmhzY2FsZSA9IGhzY2FsZTsKKwkJCWRldi0+dnNjYWxlID0gdnNjYWxlOworLyoJCQlkZXYtPmJvdGhfZmlsZWRzID0gYm90aF9maWxlZHM7ICovCisJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCWVtMjh4eF9zZXRfYWx0ZXJuYXRlKGRldik7CisJCQllbTI4eHhfY2FwdHVyZV9zdGFydChkZXYsIDEpOworCQkJZW0yOHh4X3Jlc29sdXRpb25fc2V0KGRldik7CisJCQllbTI4eHhfaW5pdF9pc29jKGRldik7CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogLS0tIHN0cmVhbWluZyBjYXB0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19SRVFCVUZTOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIgPSBhcmc7CisJCQl1MzIgaTsKKwkJCWludCByZXQ7CisKKwkJCWlmIChyYi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJCSAgICByYi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChkZXYtPmlvID09IElPX1JFQUQpIHsKKwkJCQllbTI4eHhfdmlkZW9kYmcgKCJtZXRob2QgaXMgc2V0IHRvIHJlYWQ7IgorCQkJCQkiIGNsb3NlIGFuZCBvcGVuIHRoZSBkZXZpY2UgYWdhaW4gdG8iCisJCQkJCSIgY2hvb3NlIHRoZSBtbWFwIEkvTyBtZXRob2RcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspCisJCQkJaWYgKGRldi0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgeworCQkJCQllbTI4eHhfdmlkZW9kYmcgKCJWSURJT0NfUkVRQlVGUyBmYWlsZWQ7IHByZXZpb3VzIGJ1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1JFUUJVRlM6IGludGVycnVwdGluZyBzdHJlYW1cbiIpOworCQkJCWlmICgocmV0ID0gZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KSkpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhkZXYpOworCisJCQllbTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldik7CisJCQlpZiAocmItPmNvdW50KQorCQkJCXJiLT5jb3VudCA9CisJCQkJICAgIGVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCByYi0+Y291bnQpOworCisJCQlkZXYtPmZyYW1lX2N1cnJlbnQgPSBOVUxMOworCisJCQllbTI4eHhfdmlkZW9kYmcgKCJWSURJT0NfUkVRQlVGUzogc2V0dGluZyBpbyBtZXRob2QgdG8gbW1hcDogbnVtIGJ1ZnMgJWlcbiIsCisJCQkJCQkgICAgIHJiLT5jb3VudCk7CisJCQlkZXYtPmlvID0gcmItPmNvdW50ID8gSU9fTU1BUCA6IElPX05PTkU7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBWSURJT0NfUVVFUllCVUY6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKKworCQkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkgICAgYi0+aW5kZXggPj0gZGV2LT5udW1fZnJhbWVzIHx8IGRldi0+aW8gIT0gSU9fTU1BUCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJbWVtY3B5KGIsICZkZXYtPmZyYW1lW2ItPmluZGV4XS5idWYsIHNpemVvZigqYikpOworCisJCQlpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0udm1hX3VzZV9jb3VudCkgeworCQkJCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOworCQkJfQorCQkJaWYgKGRldi0+ZnJhbWVbYi0+aW5kZXhdLnN0YXRlID09IEZfRE9ORSkKKwkJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCQllbHNlIGlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKKwkJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NfUUJVRjoKKwkJeworCQkJc3RydWN0IHY0bDJfYnVmZmVyICpiID0gYXJnOworCQkJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJCQlpZiAoYi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJCSAgICBiLT5pbmRleCA+PSBkZXYtPm51bV9mcmFtZXMgfHwgZGV2LT5pbyAhPSBJT19NTUFQKSB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkgeworCQkJCXJldHVybiAtRUFHQUlOOworCQkJfQorCQkJZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKKworCQkJLyogYWRkIGZyYW1lIHRvIGZpZm8gKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJbGlzdF9hZGRfdGFpbCgmZGV2LT5mcmFtZVtiLT5pbmRleF0uZnJhbWUsCisJCQkJICAgICAgJmRldi0+aW5xdWV1ZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX0RRQlVGOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmIgPSBhcmc7CisJCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmY7CisJCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJCQlpbnQgcmV0ID0gMDsKKworCQkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCisJCQkgICAgfHwgZGV2LT5pbyAhPSBJT19NTUFQKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpIHsKKwkJCQlpZiAoZGV2LT5zdHJlYW0gPT0gU1RSRUFNX09GRikKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkgICAgKGRldi0+d2FpdF9mcmFtZSwKKwkJCQkgICAgICghbGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpIHx8CisJCQkJICAgICAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpKTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCQkJCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJZiA9IGxpc3RfZW50cnkoZGV2LT5vdXRxdWV1ZS5uZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QsIGZyYW1lKTsKKwkJCWxpc3RfZGVsKGRldi0+b3V0cXVldWUubmV4dCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJCQlmLT5zdGF0ZSA9IEZfVU5VU0VEOworCQkJbWVtY3B5KGIsICZmLT5idWYsIHNpemVvZigqYikpOworCisJCQlpZiAoZi0+dm1hX3VzZV9jb3VudCkKKwkJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gZW0yOHh4X2RvX2lvY3RsKGlub2RlLCBmaWxwLCBkZXYsIGNtZCwgYXJnLAorCQkJCSAgICAgICBlbTI4eHhfdmlkZW9fZG9faW9jdGwpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX2lvY3RsKCkKKyAqIGhhbmRsZSB2NGwyIGlvY3RsIHRoZSBtYWluIGFjdGlvbiBoYXBwZW5zIGluIGVtMjh4eF92NGwyX2RvX2lvY3RsKCkKKyAqLworc3RhdGljIGludCBlbTI4eHhfdjRsMl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5maWxlb3BfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJZW0yOHh4X2VycmRldigidjRsMiBpb2N0bDogZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCWVtMjh4eF9lcnJkZXYKKwkJICAgICgidjRsMiBpb2N0bDogZGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCBvcGVuIGl0IGFnYWluXG4iKTsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXQgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlscCwgY21kLCBhcmcsIGVtMjh4eF92aWRlb19kb19pb2N0bCk7CisKKwl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlbTI4eHhfdjRsX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBlbTI4eHhfdjRsMl9vcGVuLAorCS5yZWxlYXNlID0gZW0yOHh4X3Y0bDJfY2xvc2UsCisJLmlvY3RsID0gZW0yOHh4X3Y0bDJfaW9jdGwsCisJLnJlYWQgPSBlbTI4eHhfdjRsMl9yZWFkLAorCS5wb2xsID0gZW0yOHh4X3Y0bDJfcG9sbCwKKwkubW1hcCA9IGVtMjh4eF92NGwyX21tYXAsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB1c2IgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogZW0yOHh4X2luaXRfZGV2KCkKKyAqIGFsbG9jYXRlcyBhbmQgaW5pdHMgdGhlIGRldmljZSBzdHJ1Y3RzLCByZWdpc3RlcnMgaTJjIGJ1cyBhbmQgdjRsIGRldmljZQorICovCitzdGF0aWMgaW50IGVtMjh4eF9pbml0X2RldihzdHJ1Y3QgZW0yOHh4ICoqZGV2aGFuZGxlLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCSAgIGludCBtaW5vciwgaW50IG1vZGVsKQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9ICpkZXZoYW5kbGU7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IGVyckNvZGUsIGk7CisJdW5zaWduZWQgaW50IG1heGgsIG1heHc7CisKKwlkZXYtPnVkZXYgPSB1ZGV2OworCWRldi0+bW9kZWwgPSBtb2RlbDsKKwlpbml0X01VVEVYKCZkZXYtPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+b3Blbik7CisKKwlkZXYtPmVtMjh4eF93cml0ZV9yZWdzID0gZW0yOHh4X3dyaXRlX3JlZ3M7CisJZGV2LT5lbTI4eHhfcmVhZF9yZWcgPSBlbTI4eHhfcmVhZF9yZWc7CisJZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVxX2xlbiA9IGVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuOworCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxOworCWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcSA9IGVtMjh4eF9yZWFkX3JlZ19yZXE7CisJZGV2LT5pc19lbTI4MDAgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS5pc19lbTI4MDA7CisJZGV2LT5oYXNfdHVuZXIgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS5oYXNfdHVuZXI7CisJZGV2LT5oYXNfbXNwMzR4eCA9IGVtMjh4eF9ib2FyZHNbbW9kZWxdLmhhc19tc3AzNHh4OworCWRldi0+dGRhOTg4N19jb25mID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0udGRhOTg4N19jb25mOworCWRldi0+ZGVjb2RlciA9IGVtMjh4eF9ib2FyZHNbbW9kZWxdLmRlY29kZXI7CisKKwlpZiAodHVuZXIgPj0gMCkKKwkJZGV2LT50dW5lcl90eXBlID0gdHVuZXI7CisJZWxzZQorCQlkZXYtPnR1bmVyX3R5cGUgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS50dW5lcl90eXBlOworCisJZGV2LT52aWRlb19pbnB1dHMgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS52Y2hhbm5lbHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFZOT1JNUzsgaSsrKQorCQlpZiAoZW0yOHh4X2JvYXJkc1ttb2RlbF0ubm9ybSA9PSB0dm5vcm1zW2ldLm1vZGUpCisJCQlicmVhazsKKwlpZiAoaSA9PSBUVk5PUk1TKQorCQlpID0gMDsKKworCWRldi0+dHZub3JtID0gJnR2bm9ybXNbaV07CS8qIHNldCBkZWZhdWx0IG5vcm0gKi8KKworCWVtMjh4eF92aWRlb2RiZygidHZub3JtPSVzXG4iLCBkZXYtPnR2bm9ybS0+bmFtZSk7CisKKwltYXh3ID0gbm9ybV9tYXh3KGRldik7CisJbWF4aCA9IG5vcm1fbWF4aChkZXYpOworCisJLyogc2V0IGRlZmF1bHQgaW1hZ2Ugc2l6ZSAqLworCWRldi0+d2lkdGggPSBtYXh3OworCWRldi0+aGVpZ2h0ID0gbWF4aDsKKwlkZXYtPmludGVybGFjZWQgPSBFTTI4WFhfSU5URVJMQUNFRF9ERUZBVUxUOworCWRldi0+ZmllbGRfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodDsKKwlkZXYtPmZyYW1lX3NpemUgPQorCSAgICBkZXYtPmludGVybGFjZWQgPyBkZXYtPmZpZWxkX3NpemUgPDwgMSA6IGRldi0+ZmllbGRfc2l6ZTsKKwlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCWRldi0+aHNjYWxlID0gMDsKKwlkZXYtPnZzY2FsZSA9IDA7CisJZGV2LT5jdGxfaW5wdXQgPSAyOworCisJLyogc2V0dXAgdmlkZW8gcGljdHVyZSBzZXR0aW5ncyBmb3Igc2FhNzExM2ggKi8KKwltZW1zZXQoJmRldi0+dnBpYywgMCwgc2l6ZW9mKGRldi0+dnBpYykpOworCWRldi0+dnBpYy5jb2xvdXIgPSAxMjggPDwgODsKKwlkZXYtPnZwaWMuaHVlID0gMTI4IDw8IDg7CisJZGV2LT52cGljLmJyaWdodG5lc3MgPSAxMjggPDwgODsKKwlkZXYtPnZwaWMuY29udHJhc3QgPSAxOTIgPDwgODsKKwlkZXYtPnZwaWMud2hpdGVuZXNzID0gMTI4IDw8IDg7CS8qIFRoaXMgb25lIGlzbid0IHVzZWQgKi8KKwlkZXYtPnZwaWMuZGVwdGggPSAxNjsKKwlkZXYtPnZwaWMucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIyOworCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkvKiByZXF1ZXN0IHNvbWUgbW9kdWxlcyAqLworCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1NBQTcxMTMgfHwgZGV2LT5kZWNvZGVyID09IEVNMjhYWF9TQUE3MTE0KQorCQlyZXF1ZXN0X21vZHVsZSgic2FhNzExeCIpOworCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApCisJCXJlcXVlc3RfbW9kdWxlKCJ0dnA1MTUwIik7CisJaWYgKGRldi0+aGFzX3R1bmVyKQorCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKKwlpZiAoZGV2LT50ZGE5ODg3X2NvbmYpCisJCXJlcXVlc3RfbW9kdWxlKCJ0ZGE5ODg3Iik7CisjZW5kaWYKKwllcnJDb2RlID0gZW0yOHh4X2NvbmZpZyhkZXYpOworCWlmIChlcnJDb2RlKSB7CisJCWVtMjh4eF9lcnJkZXYoImVycm9yIGNvbmZpZ3VyaW5nIGRldmljZVxuIik7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRvd24oJmRldi0+bG9jayk7CisJLyogcmVnaXN0ZXIgaTJjIGJ1cyAqLworCWVtMjh4eF9pMmNfcmVnaXN0ZXIoZGV2KTsKKworCS8qIERvIGJvYXJkIHNwZWNpZmljIGluaXQgYW5kIGVlcHJvbSByZWFkaW5nICovCisJZW0yOHh4X2NhcmRfc2V0dXAoZGV2KTsKKworCS8qIGNvbmZpZ3VyZSB0aGUgZGV2aWNlICovCisJZW0yOHh4X2NvbmZpZ19pMmMoZGV2KTsKKworCXVwKCZkZXYtPmxvY2spOworCisJZXJyQ29kZSA9IGVtMjh4eF9jb25maWcoZGV2KTsKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJaWYgKGRldi0+aGFzX21zcDM0eHgpCisJCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CisjZW5kaWYKKwkvKiBhbGxvY2F0ZSBhbmQgZmlsbCB2NGwyIGRldmljZSBzdHJ1Y3QgKi8KKwlkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSBkZXYtPnZkZXYpIHsKKwkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPnZkZXYtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOworCWlmIChkZXYtPmhhc190dW5lcikKKwkJZGV2LT52ZGV2LT50eXBlIHw9IFZJRF9UWVBFX1RVTkVSOworCWRldi0+dmRldi0+aGFyZHdhcmUgPSAwOworCWRldi0+dmRldi0+Zm9wcyA9ICZlbTI4eHhfdjRsX2ZvcHM7CisJZGV2LT52ZGV2LT5taW5vciA9IC0xOworCWRldi0+dmRldi0+ZGV2ID0gJmRldi0+dWRldi0+ZGV2OworCWRldi0+dmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXNucHJpbnRmKGRldi0+dmRldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi0+bmFtZSksICIlcyIsCisJCSAiZW0yOHh4IHZpZGVvIik7CisJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCZlbTI4eHhfZGV2bGlzdCk7CisKKwkvKiByZWdpc3RlciB2NGwyIGRldmljZSAqLworCWRvd24oJmRldi0+bG9jayk7CisJaWYgKChyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSkpKSB7CisJCWVtMjh4eF9lcnJkZXYoInVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UgKGVycm9yPSVpKS5cbiIsCisJCQkgICAgICByZXR2YWwpOworCQl1cCgmZGV2LT5sb2NrKTsKKwkJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZGV2LT5oYXNfbXNwMzR4eCkgeworCQkvKiBTZW5kIGEgcmVzZXQgdG8gb3RoZXIgY2hpcHMgdmlhIGdwaW8gKi8KKwkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZjciLCAxKTsKKwkJdWRlbGF5KDI1MDApOworCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmZiIsIDEpOworCQl1ZGVsYXkoMjUwMCk7CisKKwl9CisJdmlkZW9fbXV4KGRldiwgMCk7CisKKwl1cCgmZGV2LT5sb2NrKTsKKworCWVtMjh4eF9pbmZvKCJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZFxuIiwKKwkJICAgIGRldi0+dmRldi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfdXNiX3Byb2JlKCkKKyAqIGNoZWNrcyBmb3Igc3VwcG9ydGVkIGRldmljZXMKKyAqLworc3RhdGljIGludCBlbTI4eHhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpZjsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBOVUxMOworCWludCByZXR2YWwgPSAtRU5PREVWOworCWludCBtb2RlbCxpLG5yLGlmbnVtOworCisJdWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJaWZudW0gPSBpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisKKwkvKiBEb24ndCByZWdpc3RlciBhdWRpbyBpbnRlcmZhY2VzICovCisJaWYgKGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8pIHsKKwkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIGF1ZGlvIGRldmljZSAoJTA0eDolMDR4KTogaW50ZXJmYWNlICVpLCBjbGFzcyAlaVxuIiwKKwkJCQl1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0LAorCQkJCWlmbnVtLAorCQkJCWludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBuZXcgdmlkZW8gZGV2aWNlICglMDR4OiUwNHgpOiBpbnRlcmZhY2UgJWksIGNsYXNzICVpXG4iLAorCQkJdWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcix1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwKKwkJCWlmbnVtLAorCQkJaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNsYXNzKTsKKworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzFdLmRlc2M7CisKKwkvKiBjaGVjayBpZiB0aGUgdGhlIGRldmljZSBoYXMgdGhlIGlzbyBpbiBlbmRwb2ludCBhdCB0aGUgY29ycmVjdCBwbGFjZSAqLworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPQorCSAgICBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBwcm9iaW5nIGVycm9yOiBlbmRwb2ludCBpcyBub24tSVNPIGVuZHBvaW50IVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCkgeworCQllbTI4eHhfZXJyKERSSVZFUl9OQU1FICIgcHJvYmluZyBlcnJvcjogZW5kcG9pbnQgaXMgSVNPIE9VVCBlbmRwb2ludCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltb2RlbD1pZC0+ZHJpdmVyX2luZm87CisJbnI9aW50ZXJmYWNlLT5taW5vcjsKKworCWlmIChucj5FTTI4WFhfTUFYQk9BUkRTKSB7CisJCXByaW50ayAoRFJJVkVSX05BTUUgIjogU3VwcG9ydHMgb25seSAlaSBlbTI4eHggYm9hcmRzLlxuIixFTTI4WFhfTUFYQk9BUkRTKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQllbTI4eHhfZXJyKERSSVZFUl9OQU1FICI6IG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7CisKKwkvKiBjb21wdXRlIGFsdGVybmF0ZSBtYXggcGFja2V0IHNpemVzICovCisJdWlmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF07CisKKwlkZXYtPm51bV9hbHQ9dWlmLT5udW1fYWx0c2V0dGluZzsKKwlwcmludGsoRFJJVkVSX05BTUUgIjogQWx0ZXJuYXRlIHNldHRpbmdzOiAlaVxuIixkZXYtPm51bV9hbHQpOworLy8JZGV2LT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYyhzaXplb2YoKmRldi0+YWx0X21heF9wa3Rfc2l6ZSkqCisJZGV2LT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYygzMioKKwkJCQkJCWRldi0+bnVtX2FsdCxHRlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5hbHRfbWF4X3BrdF9zaXplID09IE5VTEwpIHsKKwkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiOiBvdXQgb2YgbWVtb3J5IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9hbHQgOyBpKyspIHsKKwkJdTE2IHRtcCA9IGxlMTZfdG9fY3B1KHVpZi0+YWx0c2V0dGluZ1tpXS5lbmRwb2ludFsxXS5kZXNjLgorCQkJCQkJCXdNYXhQYWNrZXRTaXplKTsKKwkJZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldID0KKwkJICAgICh0bXAgJiAweDA3ZmYpICogKCgodG1wICYgMHgxODAwKSA+PiAxMSkgKyAxKTsKKwkJcHJpbnRrKERSSVZFUl9OQU1FICI6IEFsdGVybmF0ZSBzZXR0aW5nICVpLCBtYXggc2l6ZT0gJWlcbiIsaSwKKwkJCQkJCQlkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0pOworCX0KKworCXNucHJpbnRmKGRldi0+bmFtZSwgMjksICJlbTI4eHggIyVkIiwgbnIpOworCisJaWYgKChjYXJkW25yXT49MCkmJihjYXJkW25yXTxlbTI4eHhfYmNvdW50KSkKKwkJbW9kZWw9Y2FyZFtucl07CisKKwlpZiAoKG1vZGVsPT1FTTI4MDBfQk9BUkRfVU5LTk9XTil8fChtb2RlbD09RU0yODIwX0JPQVJEX1VOS05PV04pKSB7CisJCXByaW50ayggIiVzOiBZb3VyIGJvYXJkIGhhcyBubyBlZXByb20gaW5zaWRlIGl0IGFuZCB0aHVzIGNhbid0XG4iCisJCQkiJXM6IGJlIGF1dG9kZXRlY3RlZC4gIFBsZWFzZSBwYXNzIGNhcmQ9PG4+IGluc21vZCBvcHRpb24gdG9cbiIKKwkJCSIlczogd29ya2Fyb3VuZCB0aGF0LiAgUmVkaXJlY3QgY29tcGxhaW50cyB0byB0aGUgdmVuZG9yIG9mXG4iCisJCQkiJXM6IHRoZSBUViBjYXJkLiAgQmVzdCByZWdhcmRzLFxuIgorCQkJIiVzOiAgICAgICAgIC0tIHR1eFxuIiwKKwkJCWRldi0+bmFtZSxkZXYtPm5hbWUsZGV2LT5uYW1lLGRldi0+bmFtZSxkZXYtPm5hbWUpOworCQlwcmludGsoIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCisJCQlkZXYtPm5hbWUpOworCQlmb3IgKGkgPSAwOyBpIDwgZW0yOHh4X2Jjb3VudDsgaSsrKSB7CisJCQlwcmludGsoIiVzOiAgICBjYXJkPSVkIC0+ICVzXG4iLAorCQkJCWRldi0+bmFtZSwgaSwgZW0yOHh4X2JvYXJkc1tpXS5uYW1lKTsKKwkJfQorCX0KKworCS8qIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3QgKi8KKwlyZXR2YWwgPSBlbTI4eHhfaW5pdF9kZXYoJmRldiwgdWRldiwgbnIsIG1vZGVsKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZW0yOHh4X2luZm8oIkZvdW5kICVzXG4iLCBlbTI4eHhfYm9hcmRzW21vZGVsXS5uYW1lKTsKKworCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGludGVyZmFjZSBkZXZpY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF91c2JfZGlzY29ubmVjdCgpCisgKiBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGljb25lbmN0ZWQKKyAqIHZpZGVvIGRldmljZSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBvbiB2NGwyX2Nsb3NlIGluIGNhc2UgaXQgaXMgc3RpbGwgb3BlbgorICovCitzdGF0aWMgdm9pZCBlbTI4eHhfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWRvd25fd3JpdGUoJmVtMjh4eF9kaXNjb25uZWN0KTsKKworCWRvd24oJmRldi0+bG9jayk7CisKKwllbTI4eHhfaW5mbygiZGlzY29ubmVjdGluZyAlc1xuIiwgZGV2LT52ZGV2LT5uYW1lKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJmRldi0+b3Blbik7CisKKwlpZiAoZGV2LT51c2VycykgeworCQllbTI4eHhfd2FybgorCQkgICAgKCJkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgorCQkgICAgICJkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLlxuIiwgZGV2LT52ZGV2LT5taW5vcik7CisJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOworCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfc3RyZWFtKTsKKwl9IGVsc2UgeworCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOworCX0KKworCXVwKCZkZXYtPmxvY2spOworCisJaWYgKCFkZXYtPnVzZXJzKSB7CisJCWtmcmVlKGRldi0+YWx0X21heF9wa3Rfc2l6ZSk7CisJCWtmcmVlKGRldik7CisJfQorCisJdXBfd3JpdGUoJmVtMjh4eF9kaXNjb25uZWN0KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4eF91c2JfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImVtMjh4eCIsCisJLnByb2JlID0gZW0yOHh4X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGVtMjh4eF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBlbTI4eHhfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlbTI4eHhfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiIHY0bDIgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAorCSAgICAgICAoRU0yOFhYX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAorCSAgICAgICAoRU0yOFhYX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsIEVNMjhYWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKKyNpZmRlZiBTTkFQU0hPVAorCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAorCSAgICAgICBTTkFQU0hPVCAvIDEwMDAwLCAoU05BUFNIT1QgLyAxMDApICUgMTAwLCBTTkFQU0hPVCAlIDEwMCk7CisjZW5kaWYKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmVtMjh4eF91c2JfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllbTI4eHhfZXJyKERSSVZFUl9OQU1FCisJCQkgICAiIHVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZC5cbiIsIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZW0yOHh4X21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmVtMjh4eF91c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZW0yOHh4X21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGVtMjh4eF9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2E0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMCwwICsxLDUxMyBAQAorLyoKKyAgIGVtMjh4eC1jYXJkcy5jIC0gZHJpdmVyIGZvciBFbXBpYSBFTTI4MDAvRU0yODIwLzI4NDAgVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKwkJICAgICAgTHVkb3ZpY28gQ2F2ZWRvbiA8Y2F2ZWRvbkBzc3N1cC5pdD4KKwkJICAgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPgorCisgICBCYXNlZCBvbiB0aGUgZW0yODAwIGRyaXZlciBmcm9tIFNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0VNMjhYWF9ICisjZGVmaW5lIF9FTTI4WFhfSAorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CisKKy8qIEJvYXJkcyBzdXBwb3J0ZWQgYnkgZHJpdmVyICovCisKKyNkZWZpbmUgRU0yODAwX0JPQVJEX1VOS05PV04JCQkwCisjZGVmaW5lIEVNMjgyMF9CT0FSRF9VTktOT1dOCQkJMQorI2RlZmluZSBFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTAJMgorI2RlZmluZSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfVVNCXzIJCTMKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMiAgICAgIDQKKyNkZWZpbmUgRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzIgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwICAgICAgIDYKKyNkZWZpbmUgRU0yODAwX0JPQVJEX0xFQURURUtfV0lORkFTVF9VU0JJSSAgICAgIDcKKyNkZWZpbmUgRU0yODAwX0JPQVJEX0tXT1JMRF9VU0IyODAwICAgICAgICAgICAgIDgKKyNkZWZpbmUgRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MAkJOQorCisjZGVmaW5lIFVOU0VUIC0xCisKKy8qIG1heGltdW0gbnVtYmVyIG9mIGVtMjh4eCBib2FyZHMgKi8KKyNkZWZpbmUgRU0yOFhYX01BWEJPQVJEUyAxIC8qRklYTUU6IHNob3VsZCBiZSBiaWdnZXIgKi8KKworLyogbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgY2FuIGJlIHF1ZXVlZCAqLworI2RlZmluZSBFTTI4WFhfTlVNX0ZSQU1FUyA1CisvKiBudW1iZXIgb2YgZnJhbWVzIHRoYXQgZ2V0IHVzZWQgZm9yIHY0bDJfcmVhZCgpICovCisjZGVmaW5lIEVNMjhYWF9OVU1fUkVBRF9GUkFNRVMgMgorCisvKiBudW1iZXIgb2YgYnVmZmVycyBmb3IgaXNvYyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgRU0yOFhYX05VTV9CVUZTIDUKKworLyogbnVtYmVyIG9mIHBhY2tldHMgZm9yIGVhY2ggYnVmZmVyCisgICB3aW5kb3dzIHJlcXVlc3RzIG9ubHkgNDAgcGFja2V0cyAuLiBzbyB3ZSBiZXR0ZXIgZG8gdGhlIHNhbWUKKyAgIHRoaXMgaXMgd2hhdCBJIGZvdW5kIG91dCBmb3IgYWxsIGFsdGVybmF0ZSBudW1iZXJzIHRoZXJlIQorICovCisjZGVmaW5lIEVNMjhYWF9OVU1fUEFDS0VUUyA0MAorCisvKiBkZWZhdWx0IGFsdGVybmF0ZTsgMCBtZWFucyBjaG9vc2UgdGhlIGJlc3QgKi8KKyNkZWZpbmUgRU0yOFhYX1BJTk9VVCAwCisKKyNkZWZpbmUgRU0yOFhYX0lOVEVSTEFDRURfREVGQVVMVCAxCisKKy8qCisjZGVmaW5lICh1c2UgdXNidmlldyBpZiB5b3Ugd2FudCB0byBnZXQgdGhlIG90aGVyIGFsdGVybmF0ZSBudW1iZXIgaW5mb3MpCisjZGVmaW5lCisjZGVmaW5lIGFsdGVybmF0ZSBudW1iZXIgMgorI2RlZmluZSAJCQlFbmRwb2ludCBBZGRyZXNzOiA4MgorCQkJRGlyZWN0aW9uOiBpbgorCQkJQXR0cmlidXRlOiAxCisJCQlUeXBlOiBJc29jCisJCQlNYXggUGFja2V0IFNpemU6IDE0NDgKKwkJCUludGVydmFsOiAxMjV1cworCisgIGFsdGVybmF0ZSBudW1iZXIgNworCisJCQlFbmRwb2ludCBBZGRyZXNzOiA4MgorCQkJRGlyZWN0aW9uOiBpbgorCQkJQXR0cmlidXRlOiAxCisJCQlUeXBlOiBJc29jCisJCQlNYXggUGFja2V0IFNpemU6IDMwNzIKKwkJCUludGVydmFsOiAxMjV1cworKi8KKworLyogdGltZSB0byB3YWl0IHdoZW4gc3RvcHBpbmcgdGhlIGlzb2MgdHJhbnNmZXIgKi8KKyNkZWZpbmUgRU0yOFhYX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoRU0yOFhYX05VTV9CVUZTICogRU0yOFhYX05VTV9QQUNLRVRTKQorCisvKiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIGkyYyB3cml0ZXMgdG8gZmluaXNoICovCisjZGVmaW5lIEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVCAyMAorCisvKiB0aGUgdmFyaW91cyBmcmFtZSBzdGF0ZXMgKi8KK2VudW0gZW0yOHh4X2ZyYW1lX3N0YXRlIHsKKwlGX1VOVVNFRCA9IDAsCisJRl9RVUVVRUQsCisJRl9HUkFCQklORywKKwlGX0RPTkUsCisJRl9FUlJPUiwKK307CisKKy8qIHN0cmVhbSBzdGF0ZXMgKi8KK2VudW0gZW0yOHh4X3N0cmVhbV9zdGF0ZSB7CisJU1RSRUFNX09GRiwKKwlTVFJFQU1fSU5URVJSVVBULAorCVNUUkVBTV9PTiwKK307CisKKy8qIGZyYW1lcyAqLworc3RydWN0IGVtMjh4eF9mcmFtZV90IHsKKwl2b2lkICpidWZtZW07CisJc3RydWN0IHY0bDJfYnVmZmVyIGJ1ZjsKKwllbnVtIGVtMjh4eF9mcmFtZV9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyYW1lOworCXVuc2lnbmVkIGxvbmcgdm1hX3VzZV9jb3VudDsKKwlpbnQgdG9wX2ZpZWxkOworCWludCBmaWVsZGJ5dGVzdXNlZDsKK307CisKKy8qIGlvIG1ldGhvZHMgKi8KK2VudW0gZW0yOHh4X2lvX21ldGhvZCB7CisJSU9fTk9ORSwKKwlJT19SRUFELAorCUlPX01NQVAsCit9OworCisvKiBpbnB1dHMgKi8KKworI2RlZmluZSBNQVhfRU0yOFhYX0lOUFVUIDQKK2VudW0gZW51bTI4eHhfaXR5cGUgeworCUVNMjhYWF9WTVVYX0NPTVBPU0lURTEgPSAxLAorCUVNMjhYWF9WTVVYX0NPTVBPU0lURTIsCisJRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMywKKwlFTTI4WFhfVk1VWF9DT01QT1NJVEU0LAorCUVNMjhYWF9WTVVYX1NWSURFTywKKwlFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCUVNMjhYWF9WTVVYX0NBQkxFLAorCUVNMjhYWF9WTVVYX0RWQiwKKwlFTTI4WFhfVk1VWF9ERUJVRywKKwlFTTI4WFhfUkFESU8sCit9OworCitzdHJ1Y3QgZW0yOHh4X2lucHV0IHsKKwllbnVtIGVudW0yOHh4X2l0eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHZtdXg7CisJdW5zaWduZWQgaW50IGFtdXg7Cit9OworCisjZGVmaW5lIElOUFVUKG5yKSAoJmVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0uaW5wdXRbbnJdKQorCitlbnVtIGVtMjh4eF9kZWNvZGVyIHsKKwlFTTI4WFhfVFZQNTE1MCwKKwlFTTI4WFhfU0FBNzExMywKKwlFTTI4WFhfU0FBNzExNAorfTsKKworc3RydWN0IGVtMjh4eF9ib2FyZCB7CisJY2hhciAqbmFtZTsKKwlpbnQgdmNoYW5uZWxzOworCWludCBub3JtOworCWludCB0dW5lcl90eXBlOworCisJLyogaTJjIGZsYWdzICovCisJdW5zaWduZWQgaW50IGlzX2VtMjgwMDsKKwl1bnNpZ25lZCBpbnQgdGRhOTg4N19jb25mOworCisJdW5zaWduZWQgaW50IGhhc190dW5lcjoxOworCXVuc2lnbmVkIGludCBoYXNfbXNwMzR4eDoxOworCisJZW51bSBlbTI4eHhfZGVjb2RlciBkZWNvZGVyOworCisJc3RydWN0IGVtMjh4eF9pbnB1dCAgICAgICBpbnB1dFtNQVhfRU0yOFhYX0lOUFVUXTsKK307CisKK3N0cnVjdCBlbTI4eHhfZWVwcm9tIHsKKwl1MzIgaWQ7CQkJLyogMHg5NTY3ZWIxYSAqLworCXUxNiB2ZW5kb3JfSUQ7CisJdTE2IHByb2R1Y3RfSUQ7CisKKwl1MTYgY2hpcF9jb25mOworCisJdTE2IGJvYXJkX2NvbmY7CisKKwl1MTYgc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMzsKKworCXU4IHN0cmluZ19pZHhfdGFibGU7Cit9OworCisvKiBkZXZpY2Ugc3RhdGVzICovCitlbnVtIGVtMjh4eF9kZXZfc3RhdGUgeworCURFVl9JTklUSUFMSVpFRCA9IDB4MDEsCisJREVWX0RJU0NPTk5FQ1RFRCA9IDB4MDIsCisJREVWX01JU0NPTkZJR1VSRUQgPSAweDA0LAorfTsKKworLyogdHZub3JtcyAqLworc3RydWN0IGVtMjh4eF90dm5vcm0geworCWNoYXIgKm5hbWU7CisJdjRsMl9zdGRfaWQgaWQ7CisJLyogbW9kZSBmb3Igc2FhNzExM2ggKi8KKwlpbnQgbW9kZTsKK307CisKKy8qIG1haW4gZGV2aWNlIHN0cnVjdCAqLworc3RydWN0IGVtMjh4eCB7CisJLyogZ2VuZXJpYyBkZXZpY2UgcHJvcGVydGllcyAqLworCWNoYXIgbmFtZVszMF07CQkvKiBuYW1lIChpbmNsdWRpbmcgbWlub3IpIG9mIHRoZSBkZXZpY2UgKi8KKwlpbnQgbW9kZWw7CQkvKiBpbmRleCBpbiB0aGUgZGV2aWNlX2RhdGEgc3RydWN0ICovCisJdW5zaWduZWQgaW50IGlzX2VtMjgwMDsKKwlpbnQgdmlkZW9faW5wdXRzOwkvKiBudW1iZXIgb2YgdmlkZW8gaW5wdXRzICovCisJc3RydWN0IGxpc3RfaGVhZAlkZXZsaXN0OworCXVuc2lnbmVkIGludCBoYXNfdHVuZXI6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX21zcDM0eHg6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX3RkYTk4ODc6MTsKKworCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKworCWludCB0dW5lcl90eXBlOwkJLyogdHlwZSBvZiB0aGUgdHVuZXIgKi8KKwlpbnQgdHVuZXJfYWRkcjsJCS8qIHR1bmVyIGFkZHJlc3MgKi8KKwlpbnQgdGRhOTg4N19jb25mOworCS8qIGkyYyBpL28gKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CisJc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKKwkvKiB2aWRlbyBmb3IgbGludXggKi8KKwlpbnQgdXNlcnM7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsJLyogdmlkZW8gZm9yIGxpbnV4IGRldmljZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2cGljOwkvKiBwaWN0dXJlIHNldHRpbmdzIG9ubHkgdXNlZCB0byBpbml0IHNhYTcxMTNoICovCisJc3RydWN0IGVtMjh4eF90dm5vcm0gKnR2bm9ybTsJLyogc2VsZWN0ZWQgdHYgbm9ybSAqLworCWludCBjdGxfZnJlcTsJCS8qIHNlbGVjdGVkIGZyZXF1ZW5jeSAqLworCXVuc2lnbmVkIGludCBjdGxfaW5wdXQ7CS8qIHNlbGVjdGVkIGlucHV0ICovCisJdW5zaWduZWQgaW50IGN0bF9haW5wdXQ7CS8qIHNsZWN0ZWQgYXVkaW8gaW5wdXQgKi8KKwlpbnQgbXV0ZTsKKwlpbnQgdm9sdW1lOworCS8qIGZyYW1lIHByb3BlcnRpZXMgKi8KKwlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgZnJhbWVbRU0yOFhYX05VTV9GUkFNRVNdOwkvKiBsaXN0IG9mIGZyYW1lcyAqLworCWludCBudW1fZnJhbWVzOwkJLyogbnVtYmVyIG9mIGZyYW1lcyBjdXJyZW50bHkgaW4gdXNlICovCisJdW5zaWduZWQgaW50IGZyYW1lX2NvdW50OwkvKiB0b3RhbCBudW1iZXIgb2YgdHJhbnNmZXJlZCBmcmFtZXMgKi8KKwlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmZyYW1lX2N1cnJlbnQ7CS8qIHRoZSBmcmFtZSB0aGF0IGlzIGJlaW5nIGZpbGxlZCAqLworCWludCB3aWR0aDsJCS8qIGN1cnJlbnQgZnJhbWUgd2lkdGggKi8KKwlpbnQgaGVpZ2h0OwkJLyogY3VycmVudCBmcmFtZSBoZWlnaHQgKi8KKwlpbnQgZnJhbWVfc2l6ZTsJCS8qIGN1cnJlbnQgZnJhbWUgc2l6ZSAqLworCWludCBmaWVsZF9zaXplOwkJLyogY3VycmVudCBmaWVsZCBzaXplICovCisJaW50IGJ5dGVzcGVybGluZTsKKwlpbnQgaHNjYWxlOwkJLyogaG9yaXpvbnRhbCBzY2FsZSBmYWN0b3IgKHNlZSBkYXRhc2hlZXQpICovCisJaW50IHZzY2FsZTsJCS8qIHZlcnRpY2FsIHNjYWxlIGZhY3RvciAoc2VlIGRhdGFzaGVldCkgKi8KKwlpbnQgaW50ZXJsYWNlZDsJCS8qIDE9aW50ZXJsYWNlIGZpbGVkcywgMD1qdXN0IHRvcCBmaWxlZHMgKi8KKwlpbnQgdHlwZTsKKworCS8qIHN0YXRlcyAqLworCWVudW0gZW0yOHh4X2Rldl9zdGF0ZSBzdGF0ZTsKKwllbnVtIGVtMjh4eF9zdHJlYW1fc3RhdGUgc3RyZWFtOworCWVudW0gZW0yOHh4X2lvX21ldGhvZCBpbzsKKwkvKiBsb2NrcyAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jaywgZmlsZW9wX2xvY2s7CisJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgaW5xdWV1ZSwgb3V0cXVldWU7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbiwgd2FpdF9mcmFtZSwgd2FpdF9zdHJlYW07CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpX2RldjsKKworCXVuc2lnbmVkIGNoYXIgZWVkYXRhWzI1Nl07CisKKwkvKiB1c2IgdHJhbnNmZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogdGhlIHVzYiBkZXZpY2UgKi8KKwlpbnQgYWx0OwkJLyogYWx0ZXJuYXRlICovCisJaW50IG1heF9wa3Rfc2l6ZTsJLyogbWF4IHBhY2tldCBzaXplIG9mIGlzb2MgdHJhbnNhY3Rpb24gKi8KKwlpbnQgbnVtX2FsdDsJCS8qIE51bWJlciBvZiBhbHRlcm5hdGl2ZSBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGludCAqYWx0X21heF9wa3Rfc2l6ZTsJLyogYXJyYXkgb2Ygd01heFBhY2tldFNpemUgKi8KKwlzdHJ1Y3QgdXJiICp1cmJbRU0yOFhYX05VTV9CVUZTXTsJLyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLworCWNoYXIgKnRyYW5zZmVyX2J1ZmZlcltFTTI4WFhfTlVNX0JVRlNdOwkvKiB0cmFuc2ZlciBidWZmZXJzIGZvciBpc29jIHRyYW5zZmVyICovCisJLyogaGVscGVyIGZ1bmNzIHRoYXQgY2FsbCB1c2JfY29udHJvbF9tc2cgKi8KKwlpbnQgKCplbTI4eHhfd3JpdGVfcmVncykgKHN0cnVjdCBlbTI4eHggKiBkZXYsIHUxNiByZWcsIGNoYXIgKmJ1ZiwKKwkJCQkgIGludCBsZW4pOworCWludCAoKmVtMjh4eF9yZWFkX3JlZykgKHN0cnVjdCBlbTI4eHggKiBkZXYsIHUxNiByZWcpOworCWludCAoKmVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuKSAoc3RydWN0IGVtMjh4eCAqIGRldiwgdTggcmVxLCB1MTYgcmVnLAorCQkJCQljaGFyICpidWYsIGludCBsZW4pOworCWludCAoKmVtMjh4eF93cml0ZV9yZWdzX3JlcSkgKHN0cnVjdCBlbTI4eHggKiBkZXYsIHU4IHJlcSwgdTE2IHJlZywKKwkJCQkgICAgICBjaGFyICpidWYsIGludCBsZW4pOworCWludCAoKmVtMjh4eF9yZWFkX3JlZ19yZXEpIChzdHJ1Y3QgZW0yOHh4ICogZGV2LCB1OCByZXEsIHUxNiByZWcpOworfTsKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWkyYy5jICovCisKK3ZvaWQgZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IGVtMjh4eF9pMmNfcmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2ludCBlbTI4eHhfaTJjX3VucmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KTsKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWlucHV0LmMgKi8KKwordm9pZCBlbTI4eHhfc2V0X2lyKHN0cnVjdCBlbTI4eHggKiBkZXYsc3RydWN0IElSX2kyYyAqaXIpOworCisvKiBQcm92aWRlZCBieSBlbTI4eHgtY29yZS5jICovCisKK3ZvaWQgZW0yOHh4X3ByaW50X2lvY3RsKGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjbWQpOworCit1MzIgZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUzMiBjb3VudCk7Cit2b2lkIGVtMjh4eF9xdWV1ZV91bnVzZWRmcmFtZXMoc3RydWN0IGVtMjh4eCAqZGV2KTsKK3ZvaWQgZW0yOHh4X3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3QgZW0yOHh4ICpkZXYpOworCitpbnQgZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4oc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcsCisJCQkgICAgY2hhciAqYnVmLCBpbnQgbGVuKTsKK2ludCBlbTI4eHhfcmVhZF9yZWdfcmVxKHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVxLCB1MTYgcmVnKTsKK2ludCBlbTI4eHhfcmVhZF9yZWcoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnKTsKK2ludCBlbTI4eHhfd3JpdGVfcmVnc19yZXEoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcsIGNoYXIgKmJ1ZiwKKwkJCSAgaW50IGxlbik7CitpbnQgZW0yOHh4X3dyaXRlX3JlZ3Moc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnLCBjaGFyICpidWYsIGludCBsZW4pOworaW50IGVtMjh4eF93cml0ZV9yZWdfYml0cyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIHU4IHZhbCwKKwkJCSAgdTggYml0bWFzayk7CitpbnQgZW0yOHh4X3dyaXRlX2FjOTcoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZWcsIHU4ICogdmFsKTsKK2ludCBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjh4eF9jb2xvcmxldmVsc19zZXRfZGVmYXVsdChzdHJ1Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjh4eF9jYXB0dXJlX3N0YXJ0KHN0cnVjdCBlbTI4eHggKmRldiwgaW50IHN0YXJ0KTsKK2ludCBlbTI4eHhfb3V0Zm10X3NldF95dXY0MjIoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2ludCBlbTI4eHhfYWNjdW11bGF0b3Jfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgdTggeG1pbiwgdTggeG1heCwgdTggeW1pbiwKKwkJCSAgIHU4IHltYXgpOworaW50IGVtMjh4eF9jYXB0dXJlX2FyZWFfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgdTggaHN0YXJ0LCB1OCB2c3RhcnQsCisJCQkgICAgdTE2IHdpZHRoLCB1MTYgaGVpZ2h0KTsKK2ludCBlbTI4eHhfc2NhbGVyX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiBoLCB1MTYgdik7CitpbnQgZW0yOHh4X3Jlc29sdXRpb25fc2V0KHN0cnVjdCBlbTI4eHggKmRldik7Cit2b2lkIGVtMjh4eF9pc29jSXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IGVtMjh4eF9pbml0X2lzb2Moc3RydWN0IGVtMjh4eCAqZGV2KTsKK3ZvaWQgZW0yOHh4X3VuaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldik7CitpbnQgZW0yOHh4X3NldF9hbHRlcm5hdGUoc3RydWN0IGVtMjh4eCAqZGV2KTsKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWNhcmRzLmMgKi8KK2V4dGVybiBpbnQgZW0yODAwX3ZhcmlhbnRfZGV0ZWN0KHN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2LGludCBtb2RlbCk7CitleHRlcm4gdm9pZCBlbTI4eHhfY2FyZF9zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpOworZXh0ZXJuIHN0cnVjdCBlbTI4eHhfYm9hcmQgZW0yOHh4X2JvYXJkc1tdOworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVtMjh4eF9pZF90YWJsZVtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBlbTI4eHhfYmNvdW50OworCisvKiBlbTI4eHggcmVnaXN0ZXJzICovCisjZGVmaW5lIENISVBJRF9SRUcJMHgwYQorI2RlZmluZSBVU0JTVVNQX1JFRwkweDBjCS8qICovCisKKyNkZWZpbmUgQVVESU9TUkNfUkVHCTB4MGUKKyNkZWZpbmUgWENMS19SRUcJMHgwZgorCisjZGVmaW5lIFZJTk1PREVfUkVHCTB4MTAKKyNkZWZpbmUgVklOQ1RSTF9SRUcJMHgxMQorI2RlZmluZSBWSU5FTkFCTEVfUkVHCTB4MTIJLyogKi8KKworI2RlZmluZSBHQU1NQV9SRUcJMHgxNAorI2RlZmluZSBSR0FJTl9SRUcJMHgxNQorI2RlZmluZSBHR0FJTl9SRUcJMHgxNgorI2RlZmluZSBCR0FJTl9SRUcJMHgxNworI2RlZmluZSBST0ZGU0VUX1JFRwkweDE4CisjZGVmaW5lIEdPRkZTRVRfUkVHCTB4MTkKKyNkZWZpbmUgQk9GRlNFVF9SRUcJMHgxYQorCisjZGVmaW5lIE9GTE9XX1JFRwkweDFiCisjZGVmaW5lIEhTVEFSVF9SRUcJMHgxYworI2RlZmluZSBWU1RBUlRfUkVHCTB4MWQKKyNkZWZpbmUgQ1dJRFRIX1JFRwkweDFlCisjZGVmaW5lIENIRUlHSFRfUkVHCTB4MWYKKworI2RlZmluZSBZR0FJTl9SRUcJMHgyMAorI2RlZmluZSBZT0ZGU0VUX1JFRwkweDIxCisjZGVmaW5lIFVWR0FJTl9SRUcJMHgyMgorI2RlZmluZSBVT0ZGU0VUX1JFRwkweDIzCisjZGVmaW5lIFZPRkZTRVRfUkVHCTB4MjQKKyNkZWZpbmUgU0hBUlBORVNTX1JFRwkweDI1CisKKyNkZWZpbmUgQ09NUFJfUkVHCTB4MjYKKyNkZWZpbmUgT1VURk1UX1JFRwkweDI3CisKKyNkZWZpbmUgWE1JTl9SRUcJMHgyOAorI2RlZmluZSBYTUFYX1JFRwkweDI5CisjZGVmaW5lIFlNSU5fUkVHCTB4MmEKKyNkZWZpbmUgWU1BWF9SRUcJMHgyYgorCisjZGVmaW5lIEhTQ0FMRUxPV19SRUcJMHgzMAorI2RlZmluZSBIU0NBTEVISUdIX1JFRwkweDMxCisjZGVmaW5lIFZTQ0FMRUxPV19SRUcJMHgzMgorI2RlZmluZSBWU0NBTEVISUdIX1JFRwkweDMzCisKKyNkZWZpbmUgQUM5N0xTQl9SRUcJMHg0MAorI2RlZmluZSBBQzk3TVNCX1JFRwkweDQxCisjZGVmaW5lIEFDOTdBRERSX1JFRwkweDQyCisjZGVmaW5lIEFDOTdCVVNZX1JFRwkweDQzCisKKy8qIGVtMjAyIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVNURVJfQUM5NwkweDAyCisjZGVmaW5lIFZJREVPX0FDOTcJMHgxNAorCisvKiByZWdpc3RlciBzZXR0aW5ncyAqLworI2RlZmluZSBFTTI4WFhfQVVESU9fU1JDX1RVTkVSCTB4YzAKKyNkZWZpbmUgRU0yOFhYX0FVRElPX1NSQ19MSU5FCTB4ODAKKworLyogcHJpbnRrIG1hY3JvcyAqLworCisjZGVmaW5lIGVtMjh4eF9lcnIoZm10LCBhcmcuLi4pIGRvIHtcCisJcHJpbnRrKEtFUk5fRVJSIGZtdCAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBlbTI4eHhfZXJyZGV2KGZtdCwgYXJnLi4uKSBkbyB7XAorCXByaW50ayhLRVJOX0VSUiAiJXM6ICJmbXQsXAorCQkJZGV2LT5uYW1lICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGVtMjh4eF9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7XAorCXByaW50ayhLRVJOX0lORk8gIiVzOiAiZm10LFwKKwkJCWRldi0+bmFtZSAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZW0yOHh4X3dhcm4oZm10LCBhcmcuLi4pIGRvIHtcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICJmbXQsXAorCQkJZGV2LT5uYW1lICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfYXVkaW9fc291cmNlKHN0cnVjdCBlbTI4eHggKmRldiwgaW50IGlucHV0KQoreworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBBVURJT1NSQ19SRUcsIGlucHV0LCAweGMwKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2F1ZGlvX3VzYl9tdXRlKHN0cnVjdCBlbTI4eHggKmRldiwgaW50IG11dGUpCit7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIFhDTEtfUkVHLCBtdXRlID8gMHgwMCA6IDB4ODAsIDB4ODApOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldHVwKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwkvKiB1bm11dGUgdmlkZW8gbWl4ZXIgd2l0aCBkZWZhdWx0IHZvbHVtZSBsZXZlbCAqLworCXJldHVybiBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIFZJREVPX0FDOTcsICJceDA4XHgwOCIpOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfY29tcHJlc3Npb25fZGlzYWJsZShzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJLyogc2lkZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIHNjYWxlciBhbmQgbWl4ZXIgKi8KKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBDT01QUl9SRUcsICJceDAwIiwgMSk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF9jb250cmFzdF9nZXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWcoZGV2LCBZR0FJTl9SRUcpICYgMHgxZjsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnKGRldiwgWU9GRlNFVF9SRUcpOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfc2F0dXJhdGlvbl9nZXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWcoZGV2LCBVVkdBSU5fUkVHKSAmIDB4MWY7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF91X2JhbGFuY2VfZ2V0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnKGRldiwgVU9GRlNFVF9SRUcpOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfdl9iYWxhbmNlX2dldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJcmV0dXJuIGVtMjh4eF9yZWFkX3JlZyhkZXYsIFZPRkZTRVRfUkVHKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2dhbW1hX2dldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJcmV0dXJuIGVtMjh4eF9yZWFkX3JlZyhkZXYsIEdBTU1BX1JFRykgJiAweDNmOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfY29udHJhc3Rfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBZR0FJTl9SRUcsICZ0bXAsIDEpOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCBzMzIgdmFsKQoreworCXU4IHRtcCA9ICh1OCkgdmFsOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFlPRkZTRVRfUkVHLCAmdG1wLCAxKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X3NhdHVyYXRpb25fc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBVVkdBSU5fUkVHLCAmdG1wLCAxKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X3VfYmFsYW5jZV9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCBzMzIgdmFsKQoreworCXU4IHRtcCA9ICh1OCkgdmFsOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFVPRkZTRVRfUkVHLCAmdG1wLCAxKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X3ZfYmFsYW5jZV9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCBzMzIgdmFsKQoreworCXU4IHRtcCA9ICh1OCkgdmFsOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFZPRkZTRVRfUkVHLCAmdG1wLCAxKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2dhbW1hX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHMzMiB2YWwpCit7CisJdTggdG1wID0gKHU4KSB2YWw7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgR0FNTUFfUkVHLCAmdG1wLCAxKTsKK30KKworLypGSVhNRTogbWF4dyBzaG91bGQgYmUgZGVwZW5kZW50IG9mIGFsdCBtb2RlICovCitpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGludCBub3JtX21heHcoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXN3aXRjaChkZXYtPm1vZGVsKXsKKwkJY2FzZSAoRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzIpOiByZXR1cm4oNjQwKTsKKwkJZGVmYXVsdDogcmV0dXJuKDcyMCk7CisJfQorfQorCitpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGludCBub3JtX21heGgoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXN3aXRjaChkZXYtPm1vZGVsKXsKKwkJY2FzZSAoRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzIpOiByZXR1cm4oNDgwKTsKKwkJZGVmYXVsdDogcmV0dXJuIChkZXYtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApID8gNTc2IDogNDgwOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1ncGlvLmMKaW5kZXggMjM0MTUxZS4uZWQ4MTkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWdwaW8uYwpAQCAtMTU2LDYgKzE1Niw3MSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qIFJpY2FyZG8gQ2VycXVlaXJhIDx2NGxAY2VycXVlaXJhLm9yZz4gKi8KKy8qIFdlaXJkIG1hdGNoaW5nLCBzaW5jZSB0aGUgcmVtb3RlIGhhcyAidW5jb21tb24iIGtleXMgKi8KKworc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2NvbmNlcHRyb25pY1tJUl9LRVlUQUJfU0laRV0gPSB7CisKKwlbIDMwIF0gPSBLRVlfUE9XRVIsICAgICAgIC8vIHBvd2VyCisJWyA3ICBdID0gS0VZX01FRElBLCAgICAgICAvLyBzb3VyY2UKKwlbIDI4IF0gPSBLRVlfU0VBUkNILCAgICAgIC8vIHNjYW4KKworLyogRklYTUU6IGR1cGxpY2F0ZSBrZXljb2Rlcz8KKyAqCisgKiBUaGVzZSBmb3VyIGtleXMgc2VlbSB0byBzaGFyZSB0aGUgc2FtZSBHUElPIGFzIENIKywgQ0gtLCA8PDwgYW5kID4+PgorICogVGhlIEdQSU8gdmFsdWVzIGFyZQorICogNjM5N2ZiIGZvciBib3RoICJTY2FuIDwiIGFuZCAiQ0ggLSIsCisgKiA2MzlmZmIgZm9yICJTY2FuID4iIGFuZCAiQ0grIiwKKyAqIDYzODRmYiBmb3IgIlR1bmUgPCIgYW5kICI8PDwiLAorICogNjM4Y2ZiIGZvciAiVHVuZSA+IiBhbmQgIj4+PiIsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1hc2suCisgKgorICoJWyAyMyBdID0gS0VZX0JBQ0ssICAgICAgICAvLyBmbSBzY2FuIDw8CisgKglbIDMxIF0gPSBLRVlfRk9SV0FSRCwgICAgIC8vIGZtIHNjYW4gPj4KKyAqCisgKglbIDQgIF0gPSBLRVlfTEVGVCwgICAgICAgIC8vIGZtIHR1bmluZyA8CisgKglbIDEyIF0gPSBLRVlfUklHSFQsICAgICAgIC8vIGZtIHR1bmluZyA+CisgKgorICogRm9yIG5vdywgdGhlc2UgZm91ciBrZXlzIGFyZSBkaXNhYmxlZC4gUHJlc3NpbmcgdGhlbSB3aWxsIGdlbmVyYXRlCisgKiB0aGUgQ0grL0NILS88PDwvPj4+IGV2ZW50cworICovCisKKwlbIDMgIF0gPSBLRVlfVFVORVIsICAgICAgIC8vIFRWL0ZNCisKKwlbIDAgIF0gPSBLRVlfUkVDT1JELAorCVsgOCAgXSA9IEtFWV9TVE9QLAorCVsgMTcgXSA9IEtFWV9QTEFZLAorCisJWyAyNiBdID0gS0VZX1BMQVlQQVVTRSwgICAvLyBmcmVlemUKKwlbIDI1IF0gPSBLRVlfWk9PTSwgICAgICAgIC8vIHpvb20KKwlbIDE1IF0gPSBLRVlfVEVYVCwgICAgICAgIC8vIG1pbgorCisJWyAxICBdID0gS0VZX0tQMSwKKwlbIDExIF0gPSBLRVlfS1AyLAorCVsgMjcgXSA9IEtFWV9LUDMsCisJWyA1ICBdID0gS0VZX0tQNCwKKwlbIDkgIF0gPSBLRVlfS1A1LAorCVsgMjEgXSA9IEtFWV9LUDYsCisJWyA2ICBdID0gS0VZX0tQNywKKwlbIDEwIF0gPSBLRVlfS1A4LAorCVsgMTggXSA9IEtFWV9LUDksCisJWyAyICBdID0gS0VZX0tQMCwKKwlbIDE2IF0gPSBLRVlfTEFTVCwgICAgICAgIC8vICsxMDAKKwlbIDE5IF0gPSBLRVlfTElTVCwgICAgICAgIC8vIHJlY2FsbAorCisJWyAzMSBdID0gS0VZX0NIQU5ORUxVUCwgICAvLyBjaG4gZG93bgorCVsgMjMgXSA9IEtFWV9DSEFOTkVMRE9XTiwgLy8gY2huIHVwCisJWyAyMiBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyB2b2wgZG93bgorCVsgMjAgXSA9IEtFWV9WT0xVTUVET1dOLCAgLy8gdm9sIHVwCisKKwlbIDQgIF0gPSBLRVlfS1BNSU5VUywgICAgIC8vIDw8PAorCVsgMTQgXSA9IEtFWV9TRVRVUCwgICAgICAgLy8gZnVuY3Rpb24KKwlbIDEyIF0gPSBLRVlfS1BQTFVTLCAgICAgIC8vID4+PgorCisJWyAxMyBdID0gS0VZX0dPVE8sICAgICAgICAvLyBtdHMKKwlbIDI5IF0gPSBLRVlfUkVGUkVTSCwgICAgIC8vIHJlc2V0CisJWyAyNCBdID0gS0VZX01VVEUgICAgICAgICAvLyBtdXRlL3VubXV0ZQorfTsKKwogc3RydWN0IElSIHsKIAlzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICAqc3ViOwogCXN0cnVjdCBpbnB1dF9kZXYgICAgICAgICppbnB1dDsKQEAgLTI4Miw1MyArMzQ3LDU5IEBACiAKIAkvKiBkZXRlY3QgJiBjb25maWd1cmUgKi8KIAlzd2l0Y2ggKHN1Yi0+Y29yZS0+dHlwZSkgewotCWNhc2UgQlRUVl9BVkVSTUVESUE6Ci0JY2FzZSBCVFRWX0FWUEhPTkU5ODoKLQljYXNlIEJUVFZfQVZFUk1FRElBOTg6CisJY2FzZSBCVFRWX0JPQVJEX0FWRVJNRURJQToKKwljYXNlIEJUVFZfQk9BUkRfQVZQSE9ORTk4OgorCWNhc2UgQlRUVl9CT0FSRF9BVkVSTUVESUE5ODoKIAkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYTsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4Zjg4MDAwOwogCQlpci0+bWFza19rZXlkb3duID0gMHgwMTAwMDA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CiAKLQljYXNlIEJUVFZfQVZEVkJUXzc2MToKLQljYXNlIEJUVFZfQVZEVkJUXzc3MToKKwljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc2MToKKwljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc3MToKIAkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0OwogCQlpci0+bWFza19rZXljb2RlID0gMHgwZjAwYzA7CiAJCWlyLT5tYXNrX2tleWRvd24gPSAweDAwMDAyMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKIAotCWNhc2UgQlRUVl9QWEVMVldQTFRWUEFLOgorCWNhc2UgQlRUVl9CT0FSRF9QWEVMVldQTFRWUEFLOgogCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfcGl4ZWx2aWV3OwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDNlMDA7CiAJCWlyLT5tYXNrX2tleXVwICAgPSAweDAxMDAwMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwotICAgICAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgQlRUVl9QVl9CVDg3OFBfOUI6Ci0JY2FzZSBCVFRWX1BWX0JUODc4UF9QTFVTOgorCQlicmVhazsKKwljYXNlIEJUVFZfQk9BUkRfUFZfQlQ4NzhQXzlCOgorCWNhc2UgQlRUVl9CT0FSRF9QVl9CVDg3OFBfUExVUzoKIAkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3BpeGVsdmlldzsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MDAxZjAwOwogCQlpci0+bWFza19rZXl1cCAgID0gMHgwMDgwMDA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAKLQljYXNlIEJUVFZfV0lORkFTVDIwMDA6CisJY2FzZSBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwOgogCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfd2luZmFzdDsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MWY4OwogCQlicmVhazsKLQljYXNlIEJUVFZfTUFHSUNUVklFVzA2MToKLQljYXNlIEJUVFZfTUFHSUNUVklFVzA2MzoKKwljYXNlIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MToKKwljYXNlIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MzoKIAkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3dpbmZhc3Q7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwMDhlMDAwOwogCQlpci0+bWFza19rZXlkb3duID0gMHgwMDIwMDAwMDsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX0FQQUNfVklFV0NPTVA6CisJY2FzZSBCVFRWX0JPQVJEX0FQQUNfVklFV0NPTVA6CiAJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wOwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDFmMDA7CiAJCWlyLT5tYXNrX2tleXVwICAgPSAweDAwODAwMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKKwljYXNlIEJUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTI6CisJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19jb25jZXB0cm9uaWM7CisJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwMUYwMDsKKwkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDA2MDAwOworCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCisJCWJyZWFrOwogCX0KIAlpZiAoTlVMTCA9PSBpcl9jb2RlcykgewogCQlrZnJlZShpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IDk3MDNkM2QuLjAwODU1NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC04LDYgKzgsOCBAQAogICogICAgICBDaHJpc3RvcGggQmFydGVsbXVzIDxsaXJjQGJhcnRlbG11cy5kZT4KICAqIG1vZGlmaWVkIGZvciBLTkMgT05FIFRWIFN0YXRpb24vQW51YmlzIFR5cGhvb24gVFZpZXcgVHVuZXIgYnkKICAqICAgICAgVWxyaWNoIE11ZWxsZXIgPHVscmljaC5tdWVsbGVyNDJAd2ViLmRlPgorICogbW9kaWZpZWQgZm9yIGVtMjgyMCBiYXNlZCBVU0IgVFYgdHVuZXJzIGJ5CisgKiAgICAgIE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM3LDEwICszOSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogCiAvKiBNYXJrIFBoYWxhbiA8cGhhbGFubUBvMi5pZT4gKi8KIHN0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wdjk1MVtJUl9LRVlUQUJfU0laRV0gPSB7CkBAIC04MSw1NyArODIsNiBAQAogCVsgMjggXSA9IEtFWV9NRURJQSwgICAgICAgICAgICAgLyogUEMvVFYgKi8KIH07CiAKLXN0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wdXJwbGV0dltJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDMgIF0gPSBLRVlfUE9XRVIsCi0JWyAweDZmIF0gPSBLRVlfTVVURSwKLQlbIDB4MTAgXSA9IEtFWV9CQUNLU1BBQ0UsCS8qIFJlY2FsbCAqLwotCi0JWyAweDExIF0gPSBLRVlfS1AwLAotCVsgMHg0ICBdID0gS0VZX0tQMSwKLQlbIDB4NSAgXSA9IEtFWV9LUDIsCi0JWyAweDYgIF0gPSBLRVlfS1AzLAotCVsgMHg4ICBdID0gS0VZX0tQNCwKLQlbIDB4OSAgXSA9IEtFWV9LUDUsCi0JWyAweGEgIF0gPSBLRVlfS1A2LAotCVsgMHhjICBdID0gS0VZX0tQNywKLQlbIDB4ZCAgXSA9IEtFWV9LUDgsCi0JWyAweGUgIF0gPSBLRVlfS1A5LAotCVsgMHgxMiBdID0gS0VZX0tQRE9ULAkJLyogMTAwKyAqLwotCi0JWyAweDcgIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweGIgIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MWEgXSA9IEtFWV9LUFBMVVMsCi0JWyAweDE4IF0gPSBLRVlfS1BNSU5VUywKLQlbIDB4MTUgXSA9IEtFWV9VUCwKLQlbIDB4MWQgXSA9IEtFWV9ET1dOLAotCVsgMHhmICBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4MTMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDB4NDggXSA9IEtFWV9aT09NLAotCi0JWyAweDFiIF0gPSBLRVlfVklERU8sCQkvKiBWaWRlbyBzb3VyY2UgKi8KLQlbIDB4NDkgXSA9IEtFWV9MQU5HVUFHRSwJLyogTVRTIFNlbGVjdCAqLwotCVsgMHgxOSBdID0gS0VZX1NFQVJDSCwJCS8qIEF1dG8gU2NhbiAqLwotCi0JWyAweDRiIF0gPSBLRVlfUkVDT1JELAotCVsgMHg0NiBdID0gS0VZX1BMQVksCi0JWyAweDQ1IF0gPSBLRVlfUEFVU0UsICAgCS8qIFBhdXNlICovCi0JWyAweDQ0IF0gPSBLRVlfU1RPUCwKLQlbIDB4NDAgXSA9IEtFWV9GT1JXQVJELCAgIAkvKiBGb3J3YXJkID8gKi8KLQlbIDB4NDIgXSA9IEtFWV9SRVdJTkQsICAgCS8qIEJhY2t3YXJkID8gKi8KLQotfTsKLQotc3RydWN0IElSIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgIGM7Ci0Jc3RydWN0IGlucHV0X2RldiAgICAgICAqaW5wdXQ7Ci0Jc3RydWN0IGlyX2lucHV0X3N0YXRlICBpcjsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHRpbWVyOwotCWNoYXIgICAgICAgICAgICAgICAgICAgcGh5c1szMl07Ci0JaW50ICAgICAgICAgICAgICAgICAgICAoKmdldF9rZXkpKHN0cnVjdCBJUiosIHUzMiosIHUzMiopOwotfTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGluc21vZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTE0NCw3ICs5NCw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgZ2V0X2tleV9oYXVwKHN0cnVjdCBJUiAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3N0YXRpYyBpbnQgZ2V0X2tleV9oYXVwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbM107CiAJaW50IHN0YXJ0LCB0b2dnbGUsIGRldiwgY29kZTsKQEAgLTE3MSw5ICsxMjEsOSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGdldF9rZXlfcGl4ZWx2aWV3KHN0cnVjdCBJUiAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3N0YXRpYyBpbnQgZ2V0X2tleV9waXhlbHZpZXcoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBiOworCXVuc2lnbmVkIGNoYXIgYjsKIAogCS8qIHBvbGwgSVIgY2hpcCAqLwogCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsJmIsMSkpIHsKQEAgLTE4NSw5ICsxMzUsOSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGdldF9rZXlfcHY5NTEoc3RydWN0IElSICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQorc3RhdGljIGludCBnZXRfa2V5X3B2OTUxKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYjsKKwl1bnNpZ25lZCBjaGFyIGI7CiAKIAkvKiBwb2xsIElSIGNoaXAgKi8KIAlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCZiLDEpKSB7CkBAIC0yMDUsNyArMTU1LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBnZXRfa2V5X2tuYzEoc3RydWN0IElSICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQorc3RhdGljIGludCBnZXRfa2V5X2tuYzEoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKIAl1bnNpZ25lZCBjaGFyIGI7CiAKQEAgLTIxNiwxNSArMTY2LDE1IEBACiAJfQogCiAJLyogaXQgc2VlbXMgdGhhdCAweEZFIGluZGljYXRlcyB0aGF0IGEgYnV0dG9uIGlzIHN0aWxsIGhvbGQKLQkgICBkb3duLCB3aGlsZSAweEZGIGluZGljYXRlcyB0aGF0IG5vIGJ1dHRvbiBpcyBob2xkCi0JICAgZG93bi4gMHhGRSBzZXF1ZW5jZXMgYXJlIHNvbWV0aW1lcyBpbnRlcnJ1cHRlZCBieSAweEZGICovCisJICAgZG93biwgd2hpbGUgMHhmZiBpbmRpY2F0ZXMgdGhhdCBubyBidXR0b24gaXMgaG9sZAorCSAgIGRvd24uIDB4ZmUgc2VxdWVuY2VzIGFyZSBzb21ldGltZXMgaW50ZXJydXB0ZWQgYnkgMHhGRiAqLwogCiAJZHByaW50aygyLCJrZXkgJTAyeFxuIiwgYik7CiAKLQlpZiAoYiA9PSAweEZGKQorCWlmIChiID09IDB4ZmYpCiAJCXJldHVybiAwOwogCi0JaWYgKGIgPT0gMHhGRSkKKwlpZiAoYiA9PSAweGZlKQogCQkvKiBrZWVwIG9sZCBkYXRhICovCiAJCXJldHVybiAxOwogCkBAIC0yMzMsMzEgKzE4Myw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2tleV9wdXJwbGV0dihzdHJ1Y3QgSVIgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCi17Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYjsKLQotCS8qIHBvbGwgSVIgY2hpcCAqLwotCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsJmIsMSkpIHsKLQkJZHByaW50aygxLCJyZWFkIGVycm9yXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogbm8gYnV0dG9uIHByZXNzICovCi0JaWYgKGI9PTApCi0JCXJldHVybiAwOwotCi0JLyogcmVwZWF0aW5nICovCi0JaWYgKGIgJiAweDgwKQotCQlyZXR1cm4gMTsKLQotCSppcl9rZXkgPSBiOwotCSppcl9yYXcgPSBiOwotCXJldHVybiAxOwotfQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHZvaWQgaXJfa2V5X3BvbGwoc3RydWN0IElSICppcikKK3N0YXRpYyB2b2lkIGlyX2tleV9wb2xsKHN0cnVjdCBJUl9pMmMgKmlyKQogewogCXN0YXRpYyB1MzIgaXJfa2V5LCBpcl9yYXc7CiAJaW50IHJjOwpAQCAtMjc4LDEzICsyMDYsMTMgQEAKIAogc3RhdGljIHZvaWQgaXJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBJUiAqaXIgPSAoc3RydWN0IElSKilkYXRhOworCXN0cnVjdCBJUl9pMmMgKmlyID0gKHN0cnVjdCBJUl9pMmMqKWRhdGE7CiAJc2NoZWR1bGVfd29yaygmaXItPndvcmspOwogfQogCiBzdGF0aWMgdm9pZCBpcl93b3JrKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IElSICppciA9IGRhdGE7CisJc3RydWN0IElSX2kyYyAqaXIgPSBkYXRhOwogCWlyX2tleV9wb2xsKGlyKTsKIAltb2RfdGltZXIoJmlyLT50aW1lciwgamlmZmllcytIWi8xMCk7CiB9CkBAIC0yOTcsMTcgKzIyNSwxNyBAQAogc3RhdGljIGludCBpcl9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaXIgcmVtb3RlIGtiZCBkcml2ZXIiLAotICAgICAgICAuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfRVhQMywgLyogRklYTUUgKi8KLSAgICAgICAgLmZsYWdzICAgICAgICAgID0gSTJDX0RGX05PVElGWSwKLSAgICAgICAgLmF0dGFjaF9hZGFwdGVyID0gaXJfcHJvYmUsCi0gICAgICAgIC5kZXRhY2hfY2xpZW50ICA9IGlyX2RldGFjaCwKKwkubmFtZSAgICAgICAgICAgPSAiaXIgcmVtb3RlIGtiZCBkcml2ZXIiLAorCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9FWFAzLCAvKiBGSVhNRSAqLworCS5mbGFncyAgICAgICAgICA9IEkyQ19ERl9OT1RJRlksCisJLmF0dGFjaF9hZGFwdGVyID0gaXJfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgID0gaXJfZGV0YWNoLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CiB7Ci0gICAgICAgIC5uYW1lID0gInVuc2V0IiwKLSAgICAgICAgLmRyaXZlciA9ICZkcml2ZXIKKwkubmFtZSA9ICJ1bnNldCIsCisJLmRyaXZlciA9ICZkcml2ZXIKIH07CiAKIHN0YXRpYyBpbnQgaXJfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsCkBAIC0zMTYsMTAgKzI0NCwxMCBAQAogCUlSX0tFWVRBQl9UWVBFICppcl9jb2RlcyA9IE5VTEw7CiAJY2hhciAqbmFtZTsKIAlpbnQgaXJfdHlwZTsKLSAgICAgICAgc3RydWN0IElSICppcjsKKyAgICAgICAgc3RydWN0IElSX2kyYyAqaXI7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCi0JaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVIpLCBHRlBfS0VSTkVMKTsKKwlpciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJUl9pMmMpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpIHsKIAkJa2ZyZWUoaXIpOwpAQCAtMzYxLDEwICsyODksMTAgQEAKIAkJaXJfY29kZXMgICAgPSBpcl9jb2Rlc19lbXB0eTsKIAkJYnJlYWs7CiAJY2FzZSAweDdhOgotCQluYW1lICAgICAgICA9ICJQdXJwbGUgVFYiOwotCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfcHVycGxldHY7CisJY2FzZSAweDQ3OgorCQkvKiBIYW5kbGVkIGJ5IHNhYTcxMzQtaW5wdXQgKi8KKwkJbmFtZSAgICAgICAgPSAiU0FBNzEzeCByZW1vdGUiOwogCQlpcl90eXBlICAgICA9IElSX1RZUEVfT1RIRVI7Ci0JCWlyX2NvZGVzICAgID0gaXJfY29kZXNfcHVycGxldHY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KQEAgLTM3Myw5ICszMDEsMjQgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCS8qIHJlZ2lzdGVyIGkyYyBkZXZpY2UgKi8KLQlpMmNfYXR0YWNoX2NsaWVudCgmaXItPmMpOworCS8qIFNldHMgbmFtZSAqLwogCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgImkyYyBJUiAoJXMpIiwgbmFtZSk7CisJaXItPmlyX2NvZGVzPWlyX2NvZGVzOworCisJLyogcmVnaXN0ZXIgaTJjIGRldmljZQorCSAqIEF0IGRldmljZSByZWdpc3RlciwgSVIgY29kZXMgbWF5IGJlIGNoYW5nZWQgdG8gYmUKKwkgKiBib2FyZCBkZXBlbmRlbnQuCisJKi8KKwlpMmNfYXR0YWNoX2NsaWVudCgmaXItPmMpOworCisJLyogSWYgSVIgbm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZCwgdW5yZWdpc3RlcnMgZHJpdmVyICovCisJaWYgKGlyLT5nZXRfa2V5ID09IE5VTEwpIHsKKwkJaTJjX2RldGFjaF9jbGllbnQoJmlyLT5jKTsKKwkJa2ZyZWUoaXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogUGh5cyBhZGRyIGNhbiBvbmx5IGJlIHNldCBhZnRlciBhdHRhY2hpbmcgKGZvciBpci0+Yy5kZXYuYnVzX2lkKSAqLwogCXNucHJpbnRmKGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpLCAiJXMvJXMvaXIwIiwKIAkJIGlyLT5jLmFkYXB0ZXItPmRldi5idXNfaWQsCiAJCSBpci0+Yy5kZXYuYnVzX2lkKTsKQEAgLTM4Niw2ICszMjksNyBAQAogCWlucHV0X2Rldi0+bmFtZQkJPSBpci0+Yy5uYW1lOwogCWlucHV0X2Rldi0+cGh5cwkJPSBpci0+cGh5czsKIAorCS8qIHJlZ2lzdGVyIGV2ZW50IGRldmljZSAqLwogCWlucHV0X3JlZ2lzdGVyX2RldmljZShpci0+aW5wdXQpOwogCiAJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCkBAIC00MDAsNyArMzQ0LDcgQEAKIAogc3RhdGljIGludCBpcl9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLSAgICAgICAgc3RydWN0IElSICppciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBraWxsIG91dHN0YW5kaW5nIHBvbGxzICovCiAJZGVsX3RpbWVyKCZpci0+dGltZXIpOwpAQCAtNDI4LDkgKzM3MiwxMiBAQAogCSovCiAKIAlzdGF0aWMgY29uc3QgaW50IHByb2JlX2J0dHZbXSA9IHsgMHgxYSwgMHgxOCwgMHg0YiwgMHg2NCwgMHgzMCwgLTF9OwotCXN0YXRpYyBjb25zdCBpbnQgcHJvYmVfc2FhNzEzNFtdID0geyAweDdhLCAtMSB9OworCXN0YXRpYyBjb25zdCBpbnQgcHJvYmVfc2FhNzEzNFtdID0geyAweDdhLCAweDQ3LCAtMSB9OworCXN0YXRpYyBjb25zdCBpbnQgcHJvYmVfZW0yOFhYW10gPSB7IDB4MzAsIDB4NDcsIC0xIH07CiAJY29uc3QgaW50ICpwcm9iZSA9IE5VTEw7Ci0Jc3RydWN0IGkyY19jbGllbnQgYzsgY2hhciBidWY7IGludCBpLHJjOworCXN0cnVjdCBpMmNfY2xpZW50IGM7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IGkscmM7CiAKIAlzd2l0Y2ggKGFkYXAtPmlkKSB7CiAJY2FzZSBJMkNfSFdfQl9CVDg0ODoKQEAgLTQzOSw2ICszODYsOSBAQAogCWNhc2UgSTJDX0hXX1NBQTcxMzQ6CiAJCXByb2JlID0gcHJvYmVfc2FhNzEzNDsKIAkJYnJlYWs7CisJY2FzZSBJMkNfSFdfQl9FTTI4WFg6CisJCXByb2JlID0gcHJvYmVfZW0yOFhYOworCQlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gcHJvYmUpCiAJCXJldHVybiAwOwpAQCAtNDQ3LDExICszOTcsMTEgQEAKIAljLmFkYXB0ZXIgPSBhZGFwOwogCWZvciAoaSA9IDA7IC0xICE9IHByb2JlW2ldOyBpKyspIHsKIAkJYy5hZGRyID0gcHJvYmVbaV07Ci0JCXJjID0gaTJjX21hc3Rlcl9yZWN2KCZjLCZidWYsMSk7CisJCXJjID0gaTJjX21hc3Rlcl9yZWN2KCZjLCZidWYsMCk7CiAJCWRwcmludGsoMSwicHJvYmUgMHglMDJ4IEAgJXM6ICVzXG4iLAogCQkJcHJvYmVbaV0sIGFkYXAtPm5hbWUsCi0JCQkoMSA9PSByYykgPyAieWVzIiA6ICJubyIpOwotCQlpZiAoMSA9PSByYykgeworCQkJKDAgPT0gcmMpID8gInllcyIgOiAibm8iKTsKKwkJaWYgKDAgPT0gcmMpIHsKIAkJCWlyX2F0dGFjaChhZGFwLHByb2JlW2ldLDAsMCk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuYwppbmRleCBlNzVlNzk0Li5hMjNmYjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuYwpAQCAtNTQsOSArNTQsNDEgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+Ci0jaW5jbHVkZSA8bWVkaWEvaWQuaD4KICNpbmNsdWRlICJtc3AzNDAwLmgiCiAKKyNkZWZpbmUgbXNwMzQwMF9kYmcoZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZWJ1ZyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworLyogTWVkaXVtIHZvbHVtZSBkZWJ1Zy4gKi8KKyNkZWZpbmUgbXNwMzQwMF9kYmdfbWVkaXVtdm9sKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZyA+PSAyKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZWJ1ZyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworLyogSGlnaCB2b2x1bWUgZGVidWcuIFVzZSB3aXRoIGNhcmUuICovCisjZGVmaW5lIG1zcDM0MDBfZGJnX2hpZ2h2b2woZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnID49IDE2KSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZWJ1ZyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBtc3AzNDAwX2VycihmbXQsIGFyZy4uLikgZG8geyBcCisJcHJpbnRrKEtFUk5fRVJSICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbXNwMzQwMF93YXJuKGZtdCwgYXJnLi4uKSBkbyB7IFwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbXNwMzQwMF9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7IFwKKwlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKwogI2RlZmluZSBPUE1PREVfQVVUTyAgICAtMQogI2RlZmluZSBPUE1PREVfTUFOVUFMICAgMAogI2RlZmluZSBPUE1PREVfU0lNUExFICAgMSAgIC8qIHVzZSBzaG9ydCBwcm9ncmFtbWluZyAoPj0gbXNwMzQxMCBvbmx5KSAqLwpAQCAtNzMsMTUgKzEwNSwyNiBAQAogCiBzdGF0aWMgaW50IHN0ZXJlb190aHJlc2hvbGQgPSAweDE5MDsgLyogYTIgdGhyZXNob2xkIGZvciBzdGVyZW8vYmlsaW5ndWFsCiAJCQkJCShtc3AzNHh4ZyBvbmx5KSAweDAwYTAtMHgwM2MwICovCisjZGVmaW5lIERGUF9DT1VOVCAweDQxCitzdGF0aWMgY29uc3QgaW50IGJsX2RmcFtdID0geworCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDgsIDB4MDksIDB4MGEsCisJMHgwYiwgMHgwZCwgMHgwZSwgMHgxMAorfTsKKworI2RlZmluZSBJU19NU1AzNFhYX0cobXNwKSAoKG1zcCktPm9wbW9kZT09MikKIAogc3RydWN0IG1zcDM0MDBjIHsKIAlpbnQgcmV2MSxyZXYyOwogCiAJaW50IG9wbW9kZTsKKwlpbnQgbmljYW07CiAJaW50IG1vZGU7CiAJaW50IG5vcm07CisJaW50IHN0ZXJlbzsKIAlpbnQgbmljYW1fb247CiAJaW50IGFjYjsKKwlpbnQgaW5fc2NhcnQ7CisJaW50IGkyc19tb2RlOwogCWludCBtYWluLCBzZWNvbmQ7CS8qIHNvdW5kIGNhcnJpZXIgKi8KIAlpbnQgaW5wdXQ7CiAJaW50IHNvdXJjZTsgICAgICAgICAgICAgLyogc2VlIG1zcDM0eHhnX3NldF9zb3VyY2UgKi8KQEAgLTkxLDkgKzEzNCwxMiBAQAogCWludCByeHN1YmNoYW5zOwogCiAJaW50IG11dGVkOwotCWludCB2b2x1bWUsIGJhbGFuY2U7CisJaW50IGxlZnQsIHJpZ2h0OyAgICAgICAgLyogdm9sdW1lICovCiAJaW50IGJhc3MsIHRyZWJsZTsKIAorCS8qIHNoYWRvdyByZWdpc3RlciBzZXQgKi8KKwlpbnQgZGZwX3JlZ3NbREZQX0NPVU5UXTsKKwogCS8qIHRocmVhZCAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAgICprdGhyZWFkOwogCXdhaXRfcXVldWVfaGVhZF90ICAgIHdxOwpAQCAtMTAxLDYgKzE0Nyw4IEBACiAJaW50ICAgICAgICAgICAgICAgICAgd2F0Y2hfc3RlcmVvOjE7CiB9OwogCisjZGVmaW5lIE1JTihhLGIpICgoKGEpPihiKSk/KGIpOihhKSkKKyNkZWZpbmUgTUFYKGEsYikgKCgoYSk+KGIpKT8oYSk6KGIpKQogI2RlZmluZSBIQVZFX05JQ0FNKG1zcCkgICAoKChtc3AtPnJldjI+PjgpICYgMHhmZikgIT0gMDApCiAjZGVmaW5lIEhBVkVfU0lNUExFKG1zcCkgICgobXNwLT5yZXYxICAgICAgJiAweGZmKSA+PSAnRCctJ0AnKQogI2RlZmluZSBIQVZFX1NJTVBMRVIobXNwKSAoKG1zcC0+cmV2MSAgICAgICYgMHhmZikgPj0gJ0cnLSdAJykKQEAgLTExMCw5ICsxNTgsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUgZHByaW50ayAgICAgIGlmIChkZWJ1ZyA+PSAxKSBwcmludGsKLSNkZWZpbmUgZDJwcmludGsgICAgIGlmIChkZWJ1ZyA+PSAyKSBwcmludGsKLQogLyogcmVhZC1vbmx5ICovCiBtb2R1bGVfcGFyYW0ob3Btb2RlLCAgICAgICAgICAgaW50LCAwNDQ0KTsKIApAQCAtMTMyLDExICsxNzcsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhhbXNvdW5kLCAiSGFyZHdpcmUgQU0gc291bmQgYXQgNi41SHogKEZyYW5jZSksIEZNIGNhbiBhdXRvc2NhbiIpOwogTU9EVUxFX1BBUk1fREVTQyhkb2xieSwgIkFjdGl2YXRlcyBEb2xieSBwcm9jZXNzc2luZyIpOwogCi0KLU1PRFVMRV9ERVNDUklQVElPTigiZGV2aWNlIGRyaXZlciBmb3IgbXNwMzR4eCBUViBzb3VuZCBwcm9jZXNzb3IiKTsKLU1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIiKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsgLyogRnJlZUJTRCB1c2VzIHRoaXMgdG9vICovCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBJMkNfTVNQMzQwMEMgICAgICAgMHg4MApAQCAtMTUzLDYgKzE5MywxMCBAQAogfTsKIEkyQ19DTElFTlRfSU5TTU9EOwogCitNT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIG1zcDM0eHggVFYgc291bmQgcHJvY2Vzc29yIik7CitNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBmdW5jdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIE1TUDM0MDBDIFNvdW5kIHByb2Nlc3NvciAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0xNzIsNjggKzIxNiw3MyBAQAogCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDIsIHJlYWQgIH0sCiAJfTsKIAorCW1zcDM0MDBfZGJnX2hpZ2h2b2woIm1zcDM0MDBjX3Jlc2V0XG4iKTsKIAlpZiAoICgxICE9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsJnJlc2V0WzBdLDEpKSB8fAogCSAgICAgKDEgIT0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwmcmVzZXRbMV0sMSkpIHx8CiAJICAgICAoMiAhPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLHRlc3QsMikpICkgewotCQlwcmludGsoS0VSTl9FUlIgIm1zcDM0MDA6IGNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKKwkJbXNwMzQwMF9lcnIoImNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwotICAgICAgICB9CisJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1tc3AzNDAwY19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBkZXYsIGludCBhZGRyKQorc3RhdGljIGludCBtc3AzNDAwY19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBkZXYsIGludCBhZGRyKQogewotCWludCBlcnI7CisJaW50IGVycixyZXR2YWw7CiAKLSAgICAgICAgdW5zaWduZWQgY2hhciB3cml0ZVszXTsKLSAgICAgICAgdW5zaWduZWQgY2hhciByZWFkWzJdOwotICAgICAgICBzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0gewotICAgICAgICAgICAgICAgIHsgY2xpZW50LT5hZGRyLCAwLCAgICAgICAgMywgd3JpdGUgfSwKLSAgICAgICAgICAgICAgICB7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDIsIHJlYWQgIH0KLSAgICAgICAgfTsKLSAgICAgICAgd3JpdGVbMF0gPSBkZXYrMTsKLSAgICAgICAgd3JpdGVbMV0gPSBhZGRyID4+IDg7Ci0gICAgICAgIHdyaXRlWzJdID0gYWRkciAmIDB4ZmY7CisJdW5zaWduZWQgY2hhciB3cml0ZVszXTsKKwl1bnNpZ25lZCBjaGFyIHJlYWRbMl07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsKKwkJeyBjbGllbnQtPmFkZHIsIDAsICAgICAgICAzLCB3cml0ZSB9LAorCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDIsIHJlYWQgIH0KKwl9OworCisJd3JpdGVbMF0gPSBkZXYrMTsKKwl3cml0ZVsxXSA9IGFkZHIgPj4gODsKKwl3cml0ZVsyXSA9IGFkZHIgJiAweGZmOwogCiAJZm9yIChlcnIgPSAwOyBlcnIgPCAzOykgewogCQlpZiAoMiA9PSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLG1zZ3MsMikpCiAJCQlicmVhazsKIAkJZXJyKys7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zcDM0eHg6IEkvTyBlcnJvciAjJWQgKHJlYWQgMHglMDJ4LzB4JTAyeClcbiIsCi0JCSAgICAgICBlcnIsIGRldiwgYWRkcik7Ci0JCW1zbGVlcCgxMCk7CisJCW1zcDM0MDBfd2FybigiSS9PIGVycm9yICMlZCAocmVhZCAweCUwMngvMHglMDJ4KVxuIiwgZXJyLAorCQkgICAgICAgZGV2LCBhZGRyKTsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMCkpOwogCX0KIAlpZiAoMyA9PSBlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNwMzR4eDogZ2l2aW5nIHVwLCByZXNldGluZyBjaGlwLiBTb3VuZCB3aWxsIGdvIG9mZiwgc29ycnkgZm9sa3MgOi18XG4iKTsKKwkJbXNwMzQwMF93YXJuKCJnaXZpbmcgdXAsIHJlc2V0dGluZyBjaGlwLiBTb3VuZCB3aWxsIGdvIG9mZiwgc29ycnkgZm9sa3MgOi18XG4iKTsKIAkJbXNwMzQwMGNfcmVzZXQoY2xpZW50KTsKIAkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gcmVhZFswXSA8PCA4IHwgcmVhZFsxXTsKKwlyZXR2YWwgPSByZWFkWzBdIDw8IDggfCByZWFkWzFdOworCW1zcDM0MDBfZGJnX2hpZ2h2b2woIm1zcDM0MDBjX3JlYWQoMHgleCwgMHgleCk6IDB4JXhcbiIsIGRldiwgYWRkciwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50Ci1tc3AzNDAwY193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZGV2LCBpbnQgYWRkciwgaW50IHZhbCkKK3N0YXRpYyBpbnQgbXNwMzQwMGNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRldiwgaW50IGFkZHIsIGludCB2YWwpCiB7CiAJaW50IGVycjsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNV07CisJdW5zaWduZWQgY2hhciBidWZmZXJbNV07CiAKLSAgICAgICAgYnVmZmVyWzBdID0gZGV2OwotICAgICAgICBidWZmZXJbMV0gPSBhZGRyID4+IDg7Ci0gICAgICAgIGJ1ZmZlclsyXSA9IGFkZHIgJiAgMHhmZjsKLSAgICAgICAgYnVmZmVyWzNdID0gdmFsICA+PiA4OwotICAgICAgICBidWZmZXJbNF0gPSB2YWwgICYgIDB4ZmY7CisJYnVmZmVyWzBdID0gZGV2OworCWJ1ZmZlclsxXSA9IGFkZHIgPj4gODsKKwlidWZmZXJbMl0gPSBhZGRyICYgIDB4ZmY7CisJYnVmZmVyWzNdID0gdmFsICA+PiA4OworCWJ1ZmZlcls0XSA9IHZhbCAgJiAgMHhmZjsKIAorCW1zcDM0MDBfZGJnX2hpZ2h2b2woIm1zcDM0MDBjX3dyaXRlKDB4JXgsIDB4JXgsIDB4JXgpXG4iLCBkZXYsIGFkZHIsIHZhbCk7CiAJZm9yIChlcnIgPSAwOyBlcnIgPCAzOykgewogCQlpZiAoNSA9PSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDUpKQogCQkJYnJlYWs7CiAJCWVycisrOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtc3AzNHh4OiBJL08gZXJyb3IgIyVkICh3cml0ZSAweCUwMngvMHglMDJ4KVxuIiwKLQkJICAgICAgIGVyciwgZGV2LCBhZGRyKTsKLQkJbXNsZWVwKDEwKTsKKwkJbXNwMzQwMF93YXJuKCJJL08gZXJyb3IgIyVkICh3cml0ZSAweCUwMngvMHglMDJ4KVxuIiwgZXJyLAorCQkgICAgICAgZGV2LCBhZGRyKTsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMCkpOwogCX0KIAlpZiAoMyA9PSBlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNwMzR4eDogZ2l2aW5nIHVwLCByZXNldGluZyBjaGlwLiBTb3VuZCB3aWxsIGdvIG9mZiwgc29ycnkgZm9sa3MgOi18XG4iKTsKKwkJbXNwMzQwMF93YXJuKCJnaXZpbmcgdXAsIHJlc2V0aW5nIGNoaXAuIFNvdW5kIHdpbGwgZ28gb2ZmLCBzb3JyeSBmb2xrcyA6LXxcbiIpOwogCQltc3AzNDAwY19yZXNldChjbGllbnQpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjY2LDQ1ICszMTUsNDcgQEAKIAlpbnQgZGZwX3NyYzsKIAlpbnQgZGZwX21hdHJpeDsKIH0gbXNwX2luaXRfZGF0YVtdID0gewotCS8qIEFNIChmb3IgY2FycmllciBkZXRlY3QgLyBtc3AzNDAwKSAqLwotCXsgeyA3NSwgMTksIDM2LCAzNSwgMzksIDQwIH0sIHsgNzUsIDE5LCAzNiwgMzUsIDM5LCA0MCB9LAotCSAgTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS41KSwKLQkgIDB4MDBkMCwgMHgwNTAwLCAgIDB4MDAyMCwgMHgzMDAwfSwKLQotCS8qIEFNIChmb3IgY2FycmllciBkZXRlY3QgLyBtc3AzNDEwKSAqLwotCXsgeyAtMSwgLTEsIC04LCAyLCA1OSwgMTI2IH0sIHsgLTEsIC0xLCAtOCwgMiwgNTksIDEyNiB9LAotCSAgTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS41KSwKLQkgIDB4MDBkMCwgMHgwMTAwLCAgIDB4MDAyMCwgMHgzMDAwfSwKLQotCS8qIEZNIFJhZGlvICovCi0JeyB7IC04LCAtOCwgNCwgNiwgNzgsIDEwNyB9LCB7IC04LCAtOCwgNCwgNiwgNzgsIDEwNyB9LAotCSAgTVNQX0NBUlJJRVIoMTAuNyksIE1TUF9DQVJSSUVSKDEwLjcpLAotCSAgMHgwMGQwLCAweDA0ODAsIDB4MDAyMCwgMHgzMDAwIH0sCi0KLQkvKiBUZXJyZXN0aWFsIEZNLW1vbm8gKyBGTS1zdGVyZW8gKi8KLQl7IHsgIDMsIDE4LCAyNywgNDgsIDY2LCA3MiB9LCB7ICAzLCAxOCwgMjcsIDQ4LCA2NiwgNzIgfSwKLQkgIE1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCi0JICAweDAwZDAsIDB4MDQ4MCwgICAweDAwMzAsIDB4MzAwMH0sCi0KLQkvKiBTYXQgRk0tbW9ubyAqLwotCXsgeyAgMSwgIDksIDE0LCAyNCwgMzMsIDM3IH0sIHsgIDMsIDE4LCAyNywgNDgsIDY2LCA3MiB9LAotCSAgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwKLQkgIDB4MDBjNiwgMHgwNDgwLCAgIDB4MDAwMCwgMHgzMDAwfSwKLQotCS8qIE5JQ0FNL0ZNIC0tICBCL0cgKDUuNS81Ljg1KSwgRC9LICg2LjUvNS44NSkgKi8KLQl7IHsgLTIsIC04LCAtMTAsIDEwLCA1MCwgODYgfSwgeyAgMywgMTgsIDI3LCA0OCwgNjYsIDcyIH0sCi0JICBNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAotCSAgMHgwMGQwLCAweDAwNDAsICAgMHgwMTIwLCAweDMwMDB9LAotCi0JLyogTklDQU0vRk0gLS0gSSAoNi4wLzYuNTUyKSAqLwotCXsgeyAgMiwgNCwgLTYsIC00LCA0MCwgOTQgfSwgeyAgMywgMTgsIDI3LCA0OCwgNjYsIDcyIH0sCi0JICBNU1BfQ0FSUklFUig2LjApLCBNU1BfQ0FSUklFUig2LjApLAotCSAgMHgwMGQwLCAweDAwNDAsICAgMHgwMTIwLCAweDMwMDB9LAotCi0JLyogTklDQU0vQU0gLS0gTCAoNi41LzUuODUpICovCi0JeyB7ICAtMiwgLTgsIC0xMCwgMTAsIDUwLCA4NiB9LCB7ICAtNCwgLTEyLCAtOSwgMjMsIDc5LCAxMjYgfSwKLQkgIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSksCi0JICAweDAwYzYsIDB4MDE0MCwgICAweDAxMjAsIDB4N2MwM30sCisJewkvKiBBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0IC8gbXNwMzQwMCkgKi8KKwkJezc1LCAxOSwgMzYsIDM1LCAzOSwgNDB9LAorCQl7NzUsIDE5LCAzNiwgMzUsIDM5LCA0MH0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwNTAwLCAweDAwMjAsIDB4MzAwMAorCX0sewkvKiBBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0IC8gbXNwMzQxMCkgKi8KKwkJey0xLCAtMSwgLTgsIDIsIDU5LCAxMjZ9LAorCQl7LTEsIC0xLCAtOCwgMiwgNTksIDEyNn0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwMTAwLCAweDAwMjAsIDB4MzAwMAorCX0sewkvKiBGTSBSYWRpbyAqLworCQl7LTgsIC04LCA0LCA2LCA3OCwgMTA3fSwKKwkJey04LCAtOCwgNCwgNiwgNzgsIDEwN30sCisJCU1TUF9DQVJSSUVSKDEwLjcpLCBNU1BfQ0FSUklFUigxMC43KSwKKwkJMHgwMGQwLCAweDA0ODAsIDB4MDAyMCwgMHgzMDAwCisJfSx7CS8qIFRlcnJlc3RpYWwgRk0tbW9ubyArIEZNLXN0ZXJlbyAqLworCQl7MywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKKwkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwNDgwLCAweDAwMzAsIDB4MzAwMAorCX0sewkvKiBTYXQgRk0tbW9ubyAqLworCQl7IDEsIDksIDE0LCAyNCwgMzMsIDM3fSwKKwkJeyAzLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAorCQlNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpLAorCQkweDAwYzYsIDB4MDQ4MCwgMHgwMDAwLCAweDMwMDAKKwl9LHsJLyogTklDQU0vRk0gLS0gIEIvRyAoNS41LzUuODUpLCBEL0sgKDYuNS81Ljg1KSAqLworCQl7LTIsIC04LCAtMTAsIDEwLCA1MCwgODZ9LAorCQl7MywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKKwkJTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS41KSwKKwkJMHgwMGQwLCAweDAwNDAsIDB4MDEyMCwgMHgzMDAwCisJfSx7CS8qIE5JQ0FNL0ZNIC0tIEkgKDYuMC82LjU1MikgKi8KKwkJezIsIDQsIC02LCAtNCwgNDAsIDk0fSwKKwkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCisJCU1TUF9DQVJSSUVSKDYuMCksIE1TUF9DQVJSSUVSKDYuMCksCisJCTB4MDBkMCwgMHgwMDQwLCAweDAxMjAsIDB4MzAwMAorCX0sewkvKiBOSUNBTS9BTSAtLSBMICg2LjUvNS44NSkgKi8KKwkJey0yLCAtOCwgLTEwLCAxMCwgNTAsIDg2fSwKKwkJey00LCAtMTIsIC05LCAyMywgNzksIDEyNn0sCisJCU1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSksCisJCTB4MDBjNiwgMHgwMTQwLCAweDAxMjAsIDB4N2MwMworCX0sCiB9OwogCiBzdHJ1Y3QgQ0FSUklFUl9ERVRFQ1QgewpAQCAtMzM4LDMyICszODksNjggQEAKIAogI2RlZmluZSBDQVJSSUVSX0NPVU5UKHgpIChzaXplb2YoeCkvc2l6ZW9mKHN0cnVjdCBDQVJSSUVSX0RFVEVDVCkpCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCisgKiBiaXRzICA5ICA4ICA1IC0gU0NBUlQgRFNQIGlucHV0IFNlbGVjdDoKKyAqICAgICAgIDAgIDAgIDAgLSBTQ0FSVCAxIHRvIERTUCBpbnB1dCAocmVzZXQgcG9zaXRpb24pCisgKiAgICAgICAwICAxICAwIC0gTU9OTyB0byBEU1AgaW5wdXQKKyAqICAgICAgIDEgIDAgIDAgLSBTQ0FSVCAyIHRvIERTUCBpbnB1dAorICogICAgICAgMSAgMSAgMSAtIE11dGUgRFNQIGlucHV0CisgKgorICogYml0cyAxMSAxMCAgNiAtIFNDQVJUIDEgT3V0cHV0IFNlbGVjdDoKKyAqICAgICAgIDAgIDAgIDAgLSB1bmRlZmluZWQgKHJlc2V0IHBvc2l0aW9uKQorICogICAgICAgMCAgMSAgMCAtIFNDQVJUIDIgSW5wdXQgdG8gU0NBUlQgMSBPdXRwdXQgKGZvciBkZXZpY2VzIHdpdGggMiBTQ0FSVFMpCisgKiAgICAgICAxICAwICAwIC0gTU9OTyBpbnB1dCB0byBTQ0FSVCAxIE91dHB1dAorICogICAgICAgMSAgMSAgMCAtIFNDQVJUIDEgREEgdG8gU0NBUlQgMSBPdXRwdXQKKyAqICAgICAgIDAgIDAgIDEgLSBTQ0FSVCAyIERBIHRvIFNDQVJUIDEgT3V0cHV0CisgKiAgICAgICAwICAxICAxIC0gU0NBUlQgMSBJbnB1dCB0byBTQ0FSVCAxIE91dHB1dAorICogICAgICAgMSAgMSAgMSAtIE11dGUgU0NBUlQgMSBPdXRwdXQKKyAqCisgKiBiaXRzIDEzIDEyICA3IC0gU0NBUlQgMiBPdXRwdXQgU2VsZWN0IChmb3IgZGV2aWNlcyB3aXRoIDIgT3V0cHV0IFNDQVJUKToKKyAqICAgICAgIDAgIDAgIDAgLSBTQ0FSVCAxIERBIHRvIFNDQVJUIDIgT3V0cHV0IChyZXNldCBwb3NpdGlvbikKKyAqICAgICAgIDAgIDEgIDAgLSBTQ0FSVCAxIElucHV0IHRvIFNDQVJUIDIgT3V0cHV0CisgKiAgICAgICAxICAwICAwIC0gTU9OTyBpbnB1dCB0byBTQ0FSVCAyIE91dHB1dAorICogICAgICAgMCAgMCAgMSAtIFNDQVJUIDIgREEgdG8gU0NBUlQgMiBPdXRwdXQKKyAqICAgICAgIDAgIDEgIDEgLSBTQ0FSVCAyIElucHV0IHRvIFNDQVJUIDIgT3V0cHV0CisgKiAgICAgICAxICAxICAwIC0gTXV0ZSBTQ0FSVCAyIE91dHB1dAorICoKKyAqIEJpdHMgNCB0byAwIHNob3VsZCBiZSB6ZXJvLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzY2FydHNbM11bOV0gPSB7Ci0gIC8qIE1BU0sgICAgSU4xICAgICBJTjIgICAgIElOMV9EQSAgSU4yX0RBICBJTjMgICAgIElONCAgICAgTU9OTyAgICBNVVRFICAgKi8KLSAgeyAgMHgwMzIwLCAweDAwMDAsIDB4MDIwMCwgLTEsICAgICAtMSwgICAgIDB4MDMwMCwgMHgwMDIwLCAweDAxMDAsIDB4MDMyMCB9LAotICB7ICAweDBjNDAsIDB4MDQ0MCwgMHgwNDAwLCAweDBjMDAsIDB4MDA0MCwgMHgwMDAwLCAweDA4NDAsIDB4MDgwMCwgMHgwYzQwIH0sCi0gIHsgIDB4MzA4MCwgMHgxMDAwLCAweDEwODAsIDB4MDAwMCwgMHgwMDgwLCAweDIwODAsIDB4MzA4MCwgMHgyMDAwLCAweDMwMDAgfSwKKwkvKiBNQVNLICAgIElOMSAgICAgSU4yICAgICBJTjFfREEgIElOMl9EQSAgSU4zICAgICBJTjQgICAgIE1PTk8gICAgTVVURSAgICovCisJLyogU0NBUlQgRFNQIElucHV0IHNlbGVjdCAqLworCXsgMHgwMzIwLCAweDAwMDAsIDB4MDIwMCwgLTEsICAgICAtMSwgICAgIDB4MDMwMCwgMHgwMDIwLCAweDAxMDAsIDB4MDMyMCB9LAorCS8qIFNDQVJUMSBPdXRwdXQgc2VsZWN0ICovCisJeyAweDBjNDAsIDB4MDQ0MCwgMHgwNDAwLCAweDBjMDAsIDB4MDA0MCwgMHgwMDAwLCAweDA4NDAsIDB4MDgwMCwgMHgwYzQwIH0sCisJLyogU0NBUlQyIE91dHB1dCBzZWxlY3QgKi8KKwl7IDB4MzA4MCwgMHgxMDAwLCAweDEwODAsIDB4MDAwMCwgMHgwMDgwLCAweDIwODAsIDB4MzA4MCwgMHgyMDAwLCAweDMwMDAgfSwKIH07CiAKIHN0YXRpYyBjaGFyICpzY2FydF9uYW1lc1tdID0gewotICAibWFzayIsICJpbjEiLCAiaW4yIiwgImluMSBkYSIsICJpbjIgZGEiLCAiaW4zIiwgImluNCIsICJtb25vIiwgIm11dGUiCisJIm1hc2siLCAiaW4xIiwgImluMiIsICJpbjEgZGEiLCAiaW4yIGRhIiwgImluMyIsICJpbjQiLCAibW9ubyIsICJtdXRlIgogfTsKIAotc3RhdGljIHZvaWQKLW1zcDM0MDBjX3NldF9zY2FydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW4sIGludCBvdXQpCitzdGF0aWMgdm9pZCBtc3AzNDAwY19zZXRfc2NhcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGluLCBpbnQgb3V0KQogewogCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoLTEgPT0gc2NhcnRzW291dF1baW5dKQotCQlyZXR1cm47CisJbXNwLT5pbl9zY2FydD1pbjsKIAotCWRwcmludGsoS0VSTl9ERUJVRwotCQkibXNwMzR4eDogc2NhcnQgc3dpdGNoOiAlcyA9PiAlZFxuIixzY2FydF9uYW1lc1tpbl0sb3V0KTsKLQltc3AtPmFjYiAmPSB+c2NhcnRzW291dF1bU0NBUlRfTUFTS107Ci0JbXNwLT5hY2IgfD0gIHNjYXJ0c1tvdXRdW2luXTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDEzLCBtc3AtPmFjYik7CisJaWYgKGluID49IDEgJiYgaW4gPD0gOCAmJiBvdXQgPj0gMCAmJiBvdXQgPD0gMikgeworCQlpZiAoLTEgPT0gc2NhcnRzW291dF1baW5dKQorCQkJcmV0dXJuOworCisJCW1zcC0+YWNiICY9IH5zY2FydHNbb3V0XVtTQ0FSVF9NQVNLXTsKKwkJbXNwLT5hY2IgfD0gIHNjYXJ0c1tvdXRdW2luXTsKKwl9IGVsc2UKKwkJbXNwLT5hY2IgPSAweGY2MDsgLyogTXV0ZSBJbnB1dCBhbmQgU0NBUlQgMSBPdXRwdXQgKi8KKworCW1zcDM0MDBfZGJnKCJzY2FydCBzd2l0Y2g6ICVzID0+ICVkIChBQ0I9MHglMDR4KVxuIiwKKwkJCQkJCXNjYXJ0X25hbWVzW2luXSwgb3V0LCBtc3AtPmFjYik7CisJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MTMsIG1zcC0+YWNiKTsKKworCS8qIFNldHMgSTJTIHNwZWVkIDAgPSAxLjAyNCBNYnBzLCAxID0gMi4wNDggTWJwcyAqLworCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDQwLCBtc3AtPmkyc19tb2RlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zNzgsMzMgKzQ2NSwzNCBAQAogfQogCiBzdGF0aWMgdm9pZCBtc3AzNDAwY19zZXR2b2x1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICBpbnQgbXV0ZWQsIGludCB2b2x1bWUsIGludCBiYWxhbmNlKQotewotCWludCB2YWwgPSAwLCBiYWwgPSAwOworCQkJICAgICAgIGludCBtdXRlZCwgaW50IGxlZnQsIGludCByaWdodCkKKyB7CisJaW50IHZvbCA9IDAsIHZhbCA9IDAsIGJhbGFuY2UgPSAwOwogCiAJaWYgKCFtdXRlZCkgewogCQkvKiAweDdmIGluc3RlYWQgaWYgMHg3MyBoZXJlIGhhcyBzb3VuZCBxdWFsaXR5IGlzc3VlcywKIAkJICogcHJvYmFibHkgZHVlIHRvIG92ZXJtb2R1bGF0aW9uICsgY2xpcHBpbmcgLi4uICovCi0JCXZhbCA9ICh2b2x1bWUgKiAweDczIC8gNjU1MzUpIDw8IDg7CisJCXZvbCA9IChsZWZ0ID4gcmlnaHQpID8gbGVmdCA6IHJpZ2h0OworCQl2YWwgPSAodm9sICogMHg3MyAvIDY1NTM1KSA8PCA4OwogCX0KLQlpZiAodmFsKSB7Ci0JCWJhbCA9IChiYWxhbmNlIC8gMjU2KSAtIDEyODsKKwlpZiAodm9sID4gMCkgeworCQliYWxhbmNlID0gKChyaWdodCAtIGxlZnQpICogMTI3KSAvIHZvbDsKIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHCi0JCSJtc3AzNHh4OiBzZXR2b2x1bWU6IG11dGU9JXMgJWQ6JWQgIHY9MHglMDJ4IGI9MHglMDJ4XG4iLAotCQltdXRlZCA/ICJvbiIgOiAib2ZmIiwgdm9sdW1lLCBiYWxhbmNlLCB2YWw+PjgsIGJhbCk7CisKKwltc3AzNDAwX2RiZygic2V0dm9sdW1lOiBtdXRlPSVzICVkOiVkICB2PTB4JTAyeCBiPTB4JTAyeFxuIiwKKwkJbXV0ZWQgPyAib24iIDogIm9mZiIsIGxlZnQsIHJpZ2h0LCB2YWwgPj4gOCwgYmFsYW5jZSk7CiAJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwMCwgdmFsKTsgLyogbG91ZHNwZWFrZXIgKi8KIAltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA2LCB2YWwpOyAvKiBoZWFkcGhvbmVzICAqLwogCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDcsCi0JCSAgICAgICBtdXRlZCA/IDB4MDEgOiAodmFsIHwgMHgwMSkpOwotCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDEsIGJhbCA8PCA4KTsKKwkJCQkJbXV0ZWQgPyAweDEgOiAodmFsIHwgMHgxKSk7CisJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDAwMDEsIGJhbGFuY2UgPDwgOCk7CiB9CiAKIHN0YXRpYyB2b2lkIG1zcDM0MDBjX3NldGJhc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGJhc3MpCiB7CiAJaW50IHZhbCA9ICgoYmFzcy0zMjc2OCkgKiAweDYwIC8gNjU1MzUpIDw8IDg7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IHNldGJhc3M6ICVkIDB4JTAyeFxuIixiYXNzLCB2YWw+PjgpOworCW1zcDM0MDBfZGJnKCJzZXRiYXNzOiAlZCAweCUwMnhcbiIsIGJhc3MsIHZhbCA+PiA4KTsKIAltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDAyLCB2YWwpOyAvKiBsb3Vkc3BlYWtlciAqLwogfQogCkBAIC00MTIsNyArNTAwLDcgQEAKIHsKIAlpbnQgdmFsID0gKCh0cmVibGUtMzI3NjgpICogMHg2MCAvIDY1NTM1KSA8PCA4OwogCi0JZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiBzZXR0cmVibGU6ICVkIDB4JTAyeFxuIix0cmVibGUsIHZhbD4+OCk7CisJbXNwMzQwMF9kYmcoInNldHRyZWJsZTogJWQgMHglMDJ4XG4iLHRyZWJsZSwgdmFsPj44KTsKIAltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDAzLCB2YWwpOyAvKiBsb3Vkc3BlYWtlciAqLwogfQogCkBAIC00MjEsNyArNTA5LDcgQEAKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDAwOiBzZXRtb2RlOiAlZFxuIix0eXBlKTsKKwltc3AzNDAwX2RiZygic2V0bW9kZTogJWRcbiIsdHlwZSk7CiAJbXNwLT5tb2RlICAgICAgID0gdHlwZTsKIAltc3AtPmF1ZG1vZGUgICAgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKIAltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwpAQCAtNDc0LDcgKzU2Miw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGJlc3RfYXVkaW9fbW9kZShpbnQgcnhzdWJjaGFucykKKy8qIGdpdmVuIGEgYml0bWFzayBvZiBWSURFT19TT1VORF9YWFggcmV0dXJucyB0aGUgImJlc3QiIGluIHRoZSBiaXRtYXNrICovCitzdGF0aWMgaW50IGJlc3RfdmlkZW9fc291bmQoaW50IHJ4c3ViY2hhbnMpCiB7CiAJaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCiAJCXJldHVybiBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwpAQCAtNDg2LDMxICs1NzUsMzEgQEAKIH0KIAogLyogdHVybiBvbi9vZmYgbmljYW0gKyBzdGVyZW8gKi8KLXN0YXRpYyB2b2lkIG1zcDM0MDBjX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhdWRtb2RlKQorc3RhdGljIHZvaWQgbXNwMzQwMGNfc2V0c3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBtb2RlKQogewotCXN0YXRpYyBjaGFyICpzdHJtb2RlWzE2XSA9IHsKLSNpZiBfX0dOVUNfXyA+PSAzCi0JCVsgMCAuLi4gMTUgXSAgICAgICAgICAgICAgID0gImludmFsaWQiLAotI2VuZGlmCi0JCVsgVjRMMl9UVU5FUl9NT0RFX01PTk8gICBdID0gIm1vbm8iLAotCQlbIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gXSA9ICJzdGVyZW8iLAotCQlbIFY0TDJfVFVORVJfTU9ERV9MQU5HMSAgXSA9ICJsYW5nMSIsCi0JCVsgVjRMMl9UVU5FUl9NT0RFX0xBTkcyICBdID0gImxhbmcyIiwKKwlzdGF0aWMgY2hhciAqc3RybW9kZVtdID0geyAiMCIsICJtb25vIiwgInN0ZXJlbyIsICIzIiwKKwkJImxhbmcxIiwgIjUiLCAiNiIsICI3IiwgImxhbmcyIgogCX07CiAJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgbmljYW09MDsgLyogY2hhbm5lbCBzb3VyY2U6IEZNL0FNIG9yIG5pY2FtICovCi0JaW50IHNyYz0wOworCWludCBuaWNhbSA9IDA7CQkvKiBjaGFubmVsIHNvdXJjZTogRk0vQU0gb3IgbmljYW0gKi8KKwlpbnQgc3JjID0gMDsKIAotCUJVR19PTihtc3AtPm9wbW9kZSA9PSBPUE1PREVfU0lNUExFUik7Ci0JbXNwLT5hdWRtb2RlID0gYXVkbW9kZTsKKwlpZiAoSVNfTVNQMzRYWF9HKG1zcCkpIHsKKwkJLyogdGhpcyBtZXRob2Qgd291bGQgYnJlYWsgZXZlcnl0aGluZywgbGV0J3MgbWFrZSBzdXJlCisJCSAqIGl0J3MgbmV2ZXIgY2FsbGVkCisJCSAqLworCQltc3AzNDAwX2RiZworCQkgICAgKCJERUJVRyBXQVJOSU5HIHNldHN0ZXJlbyBjYWxsZWQgd2l0aCBtb2RlPSVkIGluc3RlYWQgb2Ygc2V0X3NvdXJjZSAoaWdub3JlZClcbiIsCisJCSAgICAgbW9kZSk7CisJCXJldHVybjsKKwl9CiAKIAkvKiBzd2l0Y2ggZGVtb2R1bGF0b3IgKi8KIAlzd2l0Y2ggKG1zcC0+bW9kZSkgewogCWNhc2UgTVNQX01PREVfRk1fVEVSUkE6Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogRk0gc2V0c3RlcmVvOiAlc1xuIiwKLQkJCXN0cm1vZGVbYXVkbW9kZV0pOworCQltc3AzNDAwX2RiZygiRk0gc2V0c3RlcmVvOiAlc1xuIiwgc3RybW9kZVttb2RlXSk7CiAJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LG1zcC0+c2Vjb25kLG1zcC0+bWFpbik7Ci0JCXN3aXRjaCAoYXVkbW9kZSkgeworCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwZSwgMHgzMDAxKTsKIAkJCWJyZWFrOwpAQCAtNTIyLDkgKzYxMSw4IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBNU1BfTU9ERV9GTV9TQVQ6Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogU0FUIHNldHN0ZXJlbzogJXNcbiIsCi0JCQlzdHJtb2RlW2F1ZG1vZGVdKTsKLQkJc3dpdGNoIChhdWRtb2RlKSB7CisJCW1zcDM0MDBfZGJnKCJTQVQgc2V0c3RlcmVvOiAlc1xuIiwgc3RybW9kZVttb2RlXSk7CisJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgogCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSkpOwogCQkJYnJlYWs7CkBAIC01NDIsMzkgKzYzMCwzNSBAQAogCWNhc2UgTVNQX01PREVfRk1fTklDQU0xOgogCWNhc2UgTVNQX01PREVfRk1fTklDQU0yOgogCWNhc2UgTVNQX01PREVfQU1fTklDQU06Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogTklDQU0gc2V0c3RlcmVvOiAlc1xuIiwKLQkJCXN0cm1vZGVbYXVkbW9kZV0pOworCQltc3AzNDAwX2RiZygiTklDQU0gc2V0c3RlcmVvOiAlc1xuIixzdHJtb2RlW21vZGVdKTsKIAkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsbXNwLT5zZWNvbmQsbXNwLT5tYWluKTsKIAkJaWYgKG1zcC0+bmljYW1fb24pCiAJCQluaWNhbT0weDAxMDA7CiAJCWJyZWFrOwogCWNhc2UgTVNQX01PREVfQlRTQzoKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDAwOiBCVFNDIHNldHN0ZXJlbzogJXNcbiIsCi0JCQlzdHJtb2RlW2F1ZG1vZGVdKTsKKwkJbXNwMzQwMF9kYmcoIkJUU0Mgc2V0c3RlcmVvOiAlc1xuIixzdHJtb2RlW21vZGVdKTsKIAkJbmljYW09MHgwMzAwOwogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0VYVEVSTjoKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDAwOiBleHRlcm4gc2V0c3RlcmVvOiAlc1xuIiwKLQkJCXN0cm1vZGVbYXVkbW9kZV0pOworCQltc3AzNDAwX2RiZygiZXh0ZXJuIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7CiAJCW5pY2FtID0gMHgwMjAwOwogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0ZNX1JBRElPOgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IEZNLVJhZGlvIHNldHN0ZXJlbzogJXNcbiIsCi0JCQlzdHJtb2RlW2F1ZG1vZGVdKTsKKwkJbXNwMzQwMF9kYmcoIkZNLVJhZGlvIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogbW9ubyBzZXRzdGVyZW9cbiIpOworCQltc3AzNDAwX2RiZygibW9ubyBzZXRzdGVyZW9cbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogc3dpdGNoIGF1ZGlvICovCi0Jc3dpdGNoIChhdWRtb2RlKSB7CisJc3dpdGNoIChiZXN0X3ZpZGVvX3NvdW5kKG1vZGUpKSB7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCQlzcmMgPSAweDAwMjAgfCBuaWNhbTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAkJaWYgKG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9BTV9OSUNBTSkgewotCQkJZHByaW50aygibXNwMzQwMDogc3dpdGNoaW5nIHRvIEFNIG1vbm9cbiIpOworCQkJbXNwMzQwMF9kYmcoInN3aXRjaGluZyB0byBBTSBtb25vXG4iKTsKIAkJCS8qIEFNIG1vbm8gZGVjb2RpbmcgaXMgaGFuZGxlZCBieSB0dW5lciwgbm90IE1TUCBjaGlwICovCiAJCQkvKiBTQ0FSVCBzd2l0Y2hpbmcgY29udHJvbCByZWdpc3RlciAqLwogCQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCxTQ0FSVF9NT05PLDApOwpAQCAtNTg4LDggKzY3Miw3IEBACiAJCXNyYyA9IDB4MDAxMCB8IG5pY2FtOwogCQlicmVhazsKIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHCi0JCSJtc3AzNDAwOiBzZXRzdGVyZW8gZmluYWwgc291cmNlL21hdHJpeCA9IDB4JXhcbiIsIHNyYyk7CisJbXNwMzQwMF9kYmcoInNldHN0ZXJlbyBmaW5hbCBzb3VyY2UvbWF0cml4ID0gMHgleFxuIiwgc3JjKTsKIAogCWlmIChkb2xieSkgewogCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA4LDB4MDUyMCk7CkBAIC02MDUsMjkgKzY4OCw1NSBAQAogfQogCiBzdGF0aWMgdm9pZAotbXNwMzQwMGNfcHJpbnRfbW9kZShzdHJ1Y3QgbXNwMzQwMGMgKm1zcCkKK21zcDM0MDBjX3ByaW50X21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKKwlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCiAJaWYgKG1zcC0+bWFpbiA9PSBtc3AtPnNlY29uZCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogbW9ubyBzb3VuZCBjYXJyaWVyOiAlZC4lMDNkIE1IelxuIiwKKwkJbXNwMzQwMF9kYmcoIm1vbm8gc291bmQgY2FycmllcjogJWQuJTAzZCBNSHpcbiIsCiAJCSAgICAgICBtc3AtPm1haW4vOTEwMDAwLChtc3AtPm1haW4vOTEwKSUxMDAwKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogbWFpbiBzb3VuZCBjYXJyaWVyOiAlZC4lMDNkIE1IelxuIiwKKwkJbXNwMzQwMF9kYmcoIm1haW4gc291bmQgY2FycmllcjogJWQuJTAzZCBNSHpcbiIsCiAJCSAgICAgICBtc3AtPm1haW4vOTEwMDAwLChtc3AtPm1haW4vOTEwKSUxMDAwKTsKIAl9Ci0JaWYgKG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9GTV9OSUNBTTEgfHwKLQkgICAgbXNwLT5tb2RlID09IE1TUF9NT0RFX0ZNX05JQ0FNMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IE5JQ0FNL0ZNIGNhcnJpZXIgICA6ICVkLiUwM2QgTUh6XG4iLAorCWlmIChtc3AtPm1vZGUgPT0gTVNQX01PREVfRk1fTklDQU0xIHx8IG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9GTV9OSUNBTTIpCisJCW1zcDM0MDBfZGJnKCJOSUNBTS9GTSBjYXJyaWVyICAgOiAlZC4lMDNkIE1IelxuIiwKIAkJICAgICAgIG1zcC0+c2Vjb25kLzkxMDAwMCwobXNwLT5zZWNvbmQvOTEwKSUxMDAwKTsKIAlpZiAobXNwLT5tb2RlID09IE1TUF9NT0RFX0FNX05JQ0FNKQotCQlwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogTklDQU0vQU0gY2FycmllciAgIDogJWQuJTAzZCBNSHpcbiIsCisJCW1zcDM0MDBfZGJnKCJOSUNBTS9BTSBjYXJyaWVyICAgOiAlZC4lMDNkIE1IelxuIiwKIAkJICAgICAgIG1zcC0+c2Vjb25kLzkxMDAwMCwobXNwLT5zZWNvbmQvOTEwKSUxMDAwKTsKIAlpZiAobXNwLT5tb2RlID09IE1TUF9NT0RFX0ZNX1RFUlJBICYmCiAJICAgIG1zcC0+bWFpbiAhPSBtc3AtPnNlY29uZCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogRk0tc3RlcmVvIGNhcnJpZXIgOiAlZC4lMDNkIE1IelxuIiwKKwkJbXNwMzQwMF9kYmcoIkZNLXN0ZXJlbyBjYXJyaWVyIDogJWQuJTAzZCBNSHpcbiIsCiAJCSAgICAgICBtc3AtPnNlY29uZC85MTAwMDAsKG1zcC0+c2Vjb25kLzkxMCklMTAwMCk7CiAJfQogfQogCisjZGVmaW5lIE1TUDM0MDBfTUFYIDQKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqbXNwc1tNU1AzNDAwX01BWF07CitzdGF0aWMgdm9pZCBtc3AzNDAwY19yZXN0b3JlX2RmcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgREZQX0NPVU5UOyBpKyspIHsKKwkJaWYgKC0xID09IG1zcC0+ZGZwX3JlZ3NbaV0pCisJCQljb250aW51ZTsKKwkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCBpLCBtc3AtPmRmcF9yZWdzW2ldKTsKKwl9Cit9CisKKy8qIGlmIHRoZSBkZnBfcmVncyBpcyBzZXQsIHNldCB3aGF0J3MgaW4gdGhlcmUuIE90aGVyd2lzZSwgc2V0IHRoZSBkZWZhdWx0IHZhbHVlICovCitzdGF0aWMgaW50IG1zcDM0MDBjX3dyaXRlX2RmcF93aXRoX2RlZmF1bHQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJaW50IGFkZHIsIGludCBkZWZhdWx0X3ZhbHVlKQoreworCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHZhbHVlID0gZGVmYXVsdF92YWx1ZTsKKwlpZiAoYWRkciA8IERGUF9DT1VOVCAmJiAtMSAhPSBtc3AtPmRmcF9yZWdzW2FkZHJdKQorCQl2YWx1ZSA9IG1zcC0+ZGZwX3JlZ3NbYWRkcl07CisJcmV0dXJuIG1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgYWRkciwgdmFsdWUpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgUkVHSVNURVJfRFVNUCB7CkBAIC02MzUsOCArNzQ0LDE1IEBACiAJY2hhciAqbmFtZTsKIH07CiAKLXN0YXRpYyBpbnQKLWF1dG9kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdHJ1Y3QgUkVHSVNURVJfRFVNUCBkMVtdID0geworCXsweDAwN2UsICJhdXRvZGV0ZWN0In0sCisJezB4MDAyMywgIkNfQURfQklUUyAifSwKKwl7MHgwMDM4LCAiQUREX0JJVFMgICJ9LAorCXsweDAwM2UsICJDSUJfQklUUyAgIn0sCisJezB4MDA1NywgIkVSUk9SX1JBVEUifSwKK307CisKK3N0YXRpYyBpbnQgYXV0b2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWw7CkBAIC02NDksOCArNzY1LDcgQEAKIAkJdmFsID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MTgpOwogCQlpZiAodmFsID4gMzI3NjcpCiAJCQl2YWwgLT0gNjU1MzY7Ci0JCWRwcmludGsoS0VSTl9ERUJVRwotCQkJIm1zcDM0eHg6IHN0ZXJlbyBkZXRlY3QgcmVnaXN0ZXI6ICVkXG4iLHZhbCk7CisJCW1zcDM0MDBfZGJnKCJzdGVyZW8gZGV0ZWN0IHJlZ2lzdGVyOiAlZFxuIix2YWwpOwogCQlpZiAodmFsID4gNDA5NikgewogCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCX0gZWxzZSBpZiAodmFsIDwgLTQwOTYpIHsKQEAgLTY2NCw4ICs3NzksNyBAQAogCWNhc2UgTVNQX01PREVfRk1fTklDQU0yOgogCWNhc2UgTVNQX01PREVfQU1fTklDQU06CiAJCXZhbCA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDIzKTsKLQkJZHByaW50ayhLRVJOX0RFQlVHCi0JCQkibXNwMzR4eDogbmljYW0gc3luYz0lZCwgbW9kZT0lZFxuIiwKKwkJbXNwMzQwMF9kYmcoIm5pY2FtIHN5bmM9JWQsIG1vZGU9JWRcbiIsCiAJCQl2YWwgJiAxLCAodmFsICYgMHgxZSkgPj4gMSk7CiAKIAkJaWYgKHZhbCAmIDEpIHsKQEAgLTY5OCw4ICs4MTIsNyBAQAogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0JUU0M6CiAJCXZhbCA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDIwMCk7Ci0JCWRwcmludGsoS0VSTl9ERUJVRwotCQkJIm1zcDM0MTA6IHN0YXR1cz0weCV4IChwcmk9JXMsIHNlYz0lcywgJXMlcyVzKVxuIiwKKwkJbXNwMzQwMF9kYmcoInN0YXR1cz0weCV4IChwcmk9JXMsIHNlYz0lcywgJXMlcyVzKVxuIiwKIAkJCXZhbCwKIAkJCSh2YWwgJiAweDAwMDIpID8gIm5vIiAgICAgOiAieWVzIiwKIAkJCSh2YWwgJiAweDAwMDQpID8gIm5vIiAgICAgOiAieWVzIiwKQEAgLTcxMywxMyArODI2LDEzIEBACiAJfQogCWlmIChyeHN1YmNoYW5zICE9IG1zcC0+cnhzdWJjaGFucykgewogCQl1cGRhdGUgPSAxOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IHdhdGNoOiByeHN1YmNoYW5zICVkID0+ICVkXG4iLAorCQltc3AzNDAwX2RiZygid2F0Y2g6IHJ4c3ViY2hhbnMgJWQgPT4gJWRcbiIsCiAJCQltc3AtPnJ4c3ViY2hhbnMscnhzdWJjaGFucyk7CiAJCW1zcC0+cnhzdWJjaGFucyA9IHJ4c3ViY2hhbnM7CiAJfQogCWlmIChuZXduaWNhbSAhPSBtc3AtPm5pY2FtX29uKSB7CiAJCXVwZGF0ZSA9IDE7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogd2F0Y2g6IG5pY2FtICVkID0+ICVkXG4iLAorCQltc3AzNDAwX2RiZygid2F0Y2g6IG5pY2FtICVkID0+ICVkXG4iLAogCQkJbXNwLT5uaWNhbV9vbixuZXduaWNhbSk7CiAJCW1zcC0+bmljYW1fb24gPSBuZXduaWNhbTsKIAl9CkBAIC03NTYsOCArODY5LDE1IEBACiB7CiAJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWlmIChhdXRvZGV0ZWN0X3N0ZXJlbyhjbGllbnQpKQotCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsYmVzdF9hdWRpb19tb2RlKG1zcC0+cnhzdWJjaGFucykpOworCWlmIChhdXRvZGV0ZWN0X3N0ZXJlbyhjbGllbnQpKSB7CisJCWlmIChtc3AtPnN0ZXJlbyAmIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pCisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKKwkJZWxzZSBpZiAobXNwLT5zdGVyZW8gJiBWSURFT19TT1VORF9MQU5HMSkKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9MQU5HMSk7CisJCWVsc2UKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwl9CisKIAlpZiAob25jZSkKIAkJbXNwLT53YXRjaF9zdGVyZW8gPSAwOwogfQpAQCAtNzY5LDE0ICs4ODksMTQgQEAKIAlzdHJ1Y3QgQ0FSUklFUl9ERVRFQ1QgKmNkOwogCWludCBjb3VudCwgbWF4MSxtYXgyLHZhbDEsdmFsMiwgdmFsLHRoaXM7CiAKLQlwcmludGsoIm1zcDM0MDA6IGt0aHJlYWQgc3RhcnRlZFxuIik7CisJbXNwMzQwMF9pbmZvKCJtc3AzNDAwIGRhZW1vbiBzdGFydGVkXG4iKTsKIAlmb3IgKDs7KSB7Ci0JCWQycHJpbnRrKCJtc3AzNDAwOiB0aHJlYWQ6IHNsZWVwXG4iKTsKKwkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNDAwIHRocmVhZDogc2xlZXBcbiIpOwogCQltc3AzNHh4X3NsZWVwKG1zcCwtMSk7Ci0JCWQycHJpbnRrKCJtc3AzNDAwOiB0aHJlYWQ6IHdha2V1cFxuIik7CisJCW1zcDM0MDBfZGJnX21lZGl1bXZvbCgibXNwMzQwMCB0aHJlYWQ6IHdha2V1cFxuIik7CiAKIAlyZXN0YXJ0OgotCQlkcHJpbnRrKCJtc3AzNDEwOiB0aHJlYWQ6IHJlc3RhcnQgc2NhblxuIik7CisJCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IHJlc3RhcnQgc2NhblxuIik7CiAJCW1zcC0+cmVzdGFydCA9IDA7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKQEAgLTc4NCw5ICs5MDQsOCBAQAogCQlpZiAoVklERU9fTU9ERV9SQURJTyA9PSBtc3AtPm5vcm0gfHwKIAkJICAgIE1TUF9NT0RFX0VYVEVSTiAgPT0gbXNwLT5tb2RlKSB7CiAJCQkvKiBubyBjYXJyaWVyIHNjYW4sIGp1c3QgdW5tdXRlICovCi0JCQlwcmludGsoIm1zcDM0MDA6IHRocmVhZDogbm8gY2FycmllciBzY2FuXG4iKTsKLQkJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsCi0JCQkJCSAgIG1zcC0+dm9sdW1lLCBtc3AtPmJhbGFuY2UpOworCQkJbXNwMzQwMF9pbmZvKCJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7CisJCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtODAyLDEzICs5MjEsMTQgQEAKIAkJCWdvdG8gcmVzdGFydDsKIAogCQkvKiBjYXJyaWVyIGRldGVjdCBwYXNzICMxIC0tIG1haW4gY2FycmllciAqLwotCQljZCA9IGNhcnJpZXJfZGV0ZWN0X21haW47IGNvdW50ID0gQ0FSUklFUl9DT1VOVChjYXJyaWVyX2RldGVjdF9tYWluKTsKKwkJY2QgPSBjYXJyaWVyX2RldGVjdF9tYWluOworCQljb3VudCA9IENBUlJJRVJfQ09VTlQoY2Fycmllcl9kZXRlY3RfbWFpbik7CiAKIAkJaWYgKGFtc291bmQgJiYgKG1zcC0+bm9ybSA9PSBWSURFT19NT0RFX1NFQ0FNKSkgewogCQkJLyogYXV0b2RldGVjdCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIEFNIC4uLiAqLwogCQkJbWF4MSA9IDM7CiAJCQljb3VudCA9IDA7Ci0JCQlkcHJpbnRrKCJtc3AzNDAwOiBBTSBzb3VuZCBvdmVycmlkZVxuIik7CisJCQltc3AzNDAwX2RiZygiQU0gc291bmQgb3ZlcnJpZGVcbiIpOwogCQl9CiAKIAkJZm9yICh0aGlzID0gMDsgdGhpcyA8IGNvdW50OyB0aGlzKyspIHsKQEAgLTgyMCw3ICs5NDAsNyBAQAogCQkJCXZhbCAtPSA2NTUzNjsKIAkJCWlmICh2YWwxIDwgdmFsKQogCQkJCXZhbDEgPSB2YWwsIG1heDEgPSB0aGlzOwotCQkJZHByaW50aygibXNwMzQwMDogY2FycmllcjEgdmFsOiAlNWQgLyAlc1xuIiwgdmFsLGNkW3RoaXNdLm5hbWUpOworCQkJbXNwMzQwMF9kYmcoImNhcnJpZXIxIHZhbDogJTVkIC8gJXNcbiIsIHZhbCxjZFt0aGlzXS5uYW1lKTsKIAkJfQogCiAJCS8qIGNhcnJpZXIgZGV0ZWN0IHBhc3MgIzIgLS0gc2Vjb25kIChzdGVyZW8pIGNhcnJpZXIgKi8KQEAgLTgzNiwxMyArOTU2LDE2IEBACiAJCWNhc2UgMDogLyogNC41ICovCiAJCWNhc2UgMjogLyogNi4wICovCiAJCWRlZmF1bHQ6Ci0JCQljZCA9IE5VTEw7IGNvdW50ID0gMDsKKwkJCWNkID0gTlVMTDsKKwkJCWNvdW50ID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKGFtc291bmQgJiYgKG1zcC0+bm9ybSA9PSBWSURFT19NT0RFX1NFQ0FNKSkgewogCQkJLyogYXV0b2RldGVjdCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIEFNIC4uLiAqLwotCQkJY2QgPSBOVUxMOyBjb3VudCA9IDA7IG1heDIgPSAwOworCQkJY2QgPSBOVUxMOworCQkJY291bnQgPSAwOworCQkJbWF4MiA9IDA7CiAJCX0KIAkJZm9yICh0aGlzID0gMDsgdGhpcyA8IGNvdW50OyB0aGlzKyspIHsKIAkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBjZFt0aGlzXS5jZG8sY2RbdGhpc10uY2RvKTsKQEAgLTg1Myw3ICs5NzYsNyBAQAogCQkJCXZhbCAtPSA2NTUzNjsKIAkJCWlmICh2YWwyIDwgdmFsKQogCQkJCXZhbDIgPSB2YWwsIG1heDIgPSB0aGlzOwotCQkJZHByaW50aygibXNwMzQwMDogY2FycmllcjIgdmFsOiAlNWQgLyAlc1xuIiwgdmFsLGNkW3RoaXNdLm5hbWUpOworCQkJbXNwMzQwMF9kYmcoImNhcnJpZXIyIHZhbDogJTVkIC8gJXNcbiIsIHZhbCxjZFt0aGlzXS5uYW1lKTsKIAkJfQogCiAJCS8qIHByb2dyYW1tIHRoZSBtc3AzNDAwIGFjY29yZGluZyB0byB0aGUgcmVzdWx0cyAqLwpAQCAtODY1LDcgKzk4OCw3IEBACiAJCQkJbXNwLT5zZWNvbmQgPSBjYXJyaWVyX2RldGVjdF81NVttYXgyXS5jZG87CiAJCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKIAkJCQltc3AtPm5pY2FtX29uID0gMDsKLQkJCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CiAJCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJfSBlbHNlIGlmIChtYXgyID09IDEgJiYgSEFWRV9OSUNBTShtc3ApKSB7CiAJCQkJLyogQi9HIE5JQ0FNICovCkBAIC04OTIsNyArMTAxNSw3IEBACiAJCQkJbXNwLT5zZWNvbmQgPSBjYXJyaWVyX2RldGVjdF82NVttYXgyXS5jZG87CiAJCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKIAkJCQltc3AtPm5pY2FtX29uID0gMDsKLQkJCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CiAJCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJfSBlbHNlIGlmIChtYXgyID09IDAgJiYKIAkJCQkgICBtc3AtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkgewpAQCAtOTAwLDcgKzEwMjMsNyBAQAogCQkJCW1zcC0+c2Vjb25kID0gY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOwogCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9OSUNBTSk7CiAJCQkJbXNwLT5uaWNhbV9vbiA9IDA7Ci0JCQkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOwogCQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBtc3AtPnNlY29uZCwgbXNwLT5tYWluKTsKIAkJCQkvKiB2b2x1bWUgcHJlc2NhbGUgZm9yIFNDQVJUIChBTSBtb25vIGlucHV0KSAqLwogCQkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMGQsIDB4MTkwMCk7CkBAIC05MjQsMTUgKzEwNDcsMTYgQEAKIAkJCW1zcC0+bmljYW1fb24gPSAwOwogCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIG1zcC0+c2Vjb25kLCBtc3AtPm1haW4pOwogCQkJbXNwLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOworCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiB1bm11dGUgKi8KLQkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwKLQkJCQkgICBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKKwkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKKwkJbXNwMzQwMGNfcmVzdG9yZV9kZnAoY2xpZW50KTsKKwogCQlpZiAoZGVidWcpCi0JCQltc3AzNDAwY19wcmludF9tb2RlKG1zcCk7CisJCQltc3AzNDAwY19wcmludF9tb2RlKGNsaWVudCk7CiAKIAkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlICovCiAJCXdoaWxlIChtc3AtPndhdGNoX3N0ZXJlbykgewpAQCAtOTQxLDcgKzEwNjUsNyBAQAogCQkJd2F0Y2hfc3RlcmVvKGNsaWVudCk7CiAJCX0KIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDAwOiB0aHJlYWQ6IGV4aXRcbiIpOworCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IGV4aXRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC05ODUsMTAgKzExMDksMTIgQEAKIAlyZXR1cm4gInVua25vd24iOwogfQogCi1zdGF0aWMgaW50IG1zcDM0eHhfbW9kdXMoaW50IG5vcm0pCitzdGF0aWMgaW50IG1zcDM0eHhfbW9kdXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG5vcm0pCiB7CiAJc3dpdGNoIChub3JtKSB7CiAJY2FzZSBWSURFT19NT0RFX1BBTDoKKwkJbXNwMzQwMF9kYmcoInZpZGVvIG1vZGUgc2VsZWN0ZWQgdG8gUEFMXG4iKTsKKwogI2lmIDEKIAkJLyogZXhwZXJpbWVudGFsOiBub3Qgc3VyZSB0aGlzIHdvcmtzIHdpdGggYWxsIGNoaXAgdmVyc2lvbnMgKi8KIAkJcmV0dXJuIDB4NzAwMzsKQEAgLTk5NywxMiArMTEyMywxNiBAQAogCQlyZXR1cm4gMHgxMDAzOwogI2VuZGlmCiAJY2FzZSBWSURFT19NT0RFX05UU0M6ICAvKiBCVFNDICovCisJCW1zcDM0MDBfZGJnKCJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIE5UU0NcbiIpOwogCQlyZXR1cm4gMHgyMDAzOwogCWNhc2UgVklERU9fTU9ERV9TRUNBTToKKwkJbXNwMzQwMF9kYmcoInZpZGVvIG1vZGUgc2VsZWN0ZWQgdG8gU0VDQU1cbiIpOwogCQlyZXR1cm4gMHgwMDAzOwogCWNhc2UgVklERU9fTU9ERV9SQURJTzoKKwkJbXNwMzQwMF9kYmcoInZpZGVvIG1vZGUgc2VsZWN0ZWQgdG8gUmFkaW9cbiIpOwogCQlyZXR1cm4gMHgwMDAzOwogCWNhc2UgVklERU9fTU9ERV9BVVRPOgorCQltc3AzNDAwX2RiZygidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBBdXRvXG4iKTsKIAkJcmV0dXJuIDB4MjAwMzsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMHgwMDAzOwpAQCAtMTAzMSwyMyArMTE2MSwyMiBAQAogCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IG1vZGUsdmFsLGksc3RkOwogCi0JcHJpbnRrKCJtc3AzNDEwOiBkYWVtb24gc3RhcnRlZFxuIik7CisJbXNwMzQwMF9pbmZvKCJtc3AzNDEwIGRhZW1vbiBzdGFydGVkXG4iKTsKIAlmb3IgKDs7KSB7Ci0JCWQycHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IHRocmVhZDogc2xlZXBcbiIpOworCQltc3AzNDAwX2RiZ19tZWRpdW12b2woIm1zcDM0MTAgdGhyZWFkOiBzbGVlcFxuIik7CiAJCW1zcDM0eHhfc2xlZXAobXNwLC0xKTsKLQkJZDJwcmludGsoS0VSTl9ERUJVRyAibXNwMzQxMDogdGhyZWFkOiB3YWtldXBcbiIpOworCQltc3AzNDAwX2RiZ19tZWRpdW12b2woIm1zcDM0MTAgdGhyZWFkOiB3YWtldXBcbiIpOwogCiAJcmVzdGFydDoKLQkJZHByaW50aygibXNwMzQxMDogdGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOworCQltc3AzNDAwX2RiZygidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOwogCQltc3AtPnJlc3RhcnQgPSAwOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKIAkJaWYgKG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9FWFRFUk4pIHsKIAkJCS8qIG5vIGNhcnJpZXIgc2NhbiBuZWVkZWQsIGp1c3QgdW5tdXRlICovCi0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IHRocmVhZDogbm8gY2FycmllciBzY2FuXG4iKTsKLQkJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsCi0JCQkJCSAgIG1zcC0+dm9sdW1lLCBtc3AtPmJhbGFuY2UpOworCQkJbXNwMzQwMF9kYmcoInRocmVhZDogbm8gY2FycmllciBzY2FuXG4iKTsKKwkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEwNTksMTQgKzExODgsMTQgQEAKIAkJCWdvdG8gcmVzdGFydDsKIAogCQkvKiBzdGFydCBhdXRvZGV0ZWN0ICovCi0JCW1vZGUgPSBtc3AzNHh4X21vZHVzKG1zcC0+bm9ybSk7CisJCW1vZGUgPSBtc3AzNHh4X21vZHVzKGNsaWVudCwgbXNwLT5ub3JtKTsKIAkJc3RkICA9IG1zcDM0eHhfc3RhbmRhcmQobXNwLT5ub3JtKTsKIAkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDMwLCBtb2RlKTsKIAkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDIwLCBzdGQpOwogCQltc3AtPndhdGNoX3N0ZXJlbyA9IDA7CiAKIAkJaWYgKGRlYnVnKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IHNldHRpbmcgbW9kZTogJXMgKDB4JTA0eClcbiIsCisJCQltc3AzNDAwX2RiZygic2V0dGluZyBtb2RlOiAlcyAoMHglMDR4KVxuIiwKIAkJCSAgICAgICBtc3AzNHh4X3N0YW5kYXJkX21vZGVfbmFtZShzdGQpICxzdGQpOwogCiAJCWlmIChzdGQgIT0gMSkgewpAQCAtMTA4MiwxMyArMTIxMSwxMyBAQAogCQkJCXZhbCA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREVNLCAweDdlKTsKIAkJCQlpZiAodmFsIDwgMHgwN2ZmKQogCQkJCQlicmVhazsKLQkJCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IGRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzc1xuIik7CisJCQkJbXNwMzQwMF9kYmcoImRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzc1xuIik7CiAJCQl9CiAJCX0KIAkJZm9yIChpID0gMDsgbW9kZWxpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCQlpZiAobW9kZWxpc3RbaV0ucmV0dmFsID09IHZhbCkKIAkJCQlicmVhazsKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiBjdXJyZW50IG1vZGU6ICVzICgweCUwNHgpXG4iLAorCQltc3AzNDAwX2RiZygiY3VycmVudCBtb2RlOiAlcyAoMHglMDR4KVxuIiwKIAkJCW1vZGVsaXN0W2ldLm5hbWUgPyBtb2RlbGlzdFtpXS5uYW1lIDogInVua25vd24iLAogCQkJdmFsKTsKIAkJbXNwLT5tYWluICAgPSBtb2RlbGlzdFtpXS5tYWluOwpAQCAtMTA5Niw3ICsxMjI1LDcgQEAKIAogCQlpZiAoYW1zb3VuZCAmJiAobXNwLT5ub3JtID09IFZJREVPX01PREVfU0VDQU0pICYmICh2YWwgIT0gMHgwMDA5KSkgewogCQkJLyogYXV0b2RldGVjdGlvbiBoYXMgZmFpbGVkLCBsZXQgYmFja3VwICovCi0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IGF1dG9kZXRlY3Rpb24gZmFpbGVkLCIKKwkJCW1zcDM0MDBfZGJnKCJhdXRvZGV0ZWN0aW9uIGZhaWxlZCwiCiAJCQkJIiBzd2l0Y2hpbmcgdG8gYmFja3VwIG1vZGU6ICVzICgweCUwNHgpXG4iLAogCQkJCW1vZGVsaXN0WzhdLm5hbWUgPyBtb2RlbGlzdFs4XS5uYW1lIDogInVua25vd24iLHZhbCk7CiAJCQl2YWwgPSAweDAwMDk7CkBAIC0xMTIwLDEzICsxMjQ5LDEzIEBACiAJCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCQltc3AtPm5pY2FtX29uID0gMTsKIAkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKLQkJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCxWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CiAJCQlicmVhazsKIAkJY2FzZSAweDAwMDk6CiAJCQltc3AtPm1vZGUgPSBNU1BfTU9ERV9BTV9OSUNBTTsKIAkJCW1zcC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCQltc3AtPm5pY2FtX29uID0gMTsKLQkJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCxWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9NT05PKTsKIAkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDAyMDogLyogQlRTQyAqLwpAQCAtMTEzNSw3ICsxMjY0LDcgQEAKIAkJCW1zcC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJCW1zcC0+bmljYW1fb24gPSAwOwogCQkJbXNwLT53YXRjaF9zdGVyZW8gPSAxOwotCQkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50LFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOworCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCxWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDA0MDogLyogRk0gcmFkaW8gKi8KIAkJCW1zcC0+bW9kZSAgID0gTVNQX01PREVfRk1fUkFESU87CkBAIC0xMTY5LDkgKzEyOTgsMTAgQEAKIAkJLyogdW5tdXRlLCByZXN0b3JlIG1pc2MgcmVnaXN0ZXJzICovCiAJCW1zcDM0MDBjX3NldGJhc3MoY2xpZW50LCBtc3AtPmJhc3MpOwogCQltc3AzNDAwY19zZXR0cmVibGUoY2xpZW50LCBtc3AtPnRyZWJsZSk7Ci0JCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsCi0JCQkJICAgIG1zcC0+dm9sdW1lLCBtc3AtPmJhbGFuY2UpOwotCQltc3AzNDAwY193cml0ZShjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAxMywgbXNwLT5hY2IpOworCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOworCQltc3AzNDAwY193cml0ZShjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MTMsIG1zcC0+YWNiKTsKKwkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4NDAsIG1zcC0+aTJzX21vZGUpOworCQltc3AzNDAwY19yZXN0b3JlX2RmcChjbGllbnQpOwogCiAJCS8qIG1vbml0b3IgdHYgYXVkaW8gbW9kZSAqLwogCQl3aGlsZSAobXNwLT53YXRjaF9zdGVyZW8pIHsKQEAgLTExODAsNyArMTMxMCw3IEBACiAJCQl3YXRjaF9zdGVyZW8oY2xpZW50KTsKIAkJfQogCX0KLQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IHRocmVhZDogZXhpdFxuIik7CisJbXNwMzQwMF9kYmcoInRocmVhZDogZXhpdFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExOTUsNyArMTMyNSw3IEBACiAvKiAocmUtKWluaXRpYWxpemUgdGhlIG1zcDM0eHhnLCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbm9ybSBpbiBtc3AtPm5vcm0KICAqIHJldHVybiAwIGlmIGl0IHdvcmtlZCwgLTEgaWYgaXQgZmFpbGVkCiAgKi8KLXN0YXRpYyBpbnQgbXNwMzR4eGdfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBtc3AzNHh4Z19yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IG1vZHVzLHN0ZDsKQEAgLTEyMTAsOCArMTM0MCwxMCBAQAogCQkJICAgMHgwZjIwIC8qIG11dGUgRFNQIGlucHV0LCBtdXRlIFNDQVJUIDEgKi8pKQogCQlyZXR1cm4gLTE7CiAKKwltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHg0MCwgbXNwLT5pMnNfbW9kZSk7CisKIAkvKiBzdGVwLWJ5LXN0ZXAgaW5pdGlhbGlzYXRpb24sIGFzIGRlc2NyaWJlZCBpbiB0aGUgbWFudWFsICovCi0JbW9kdXMgPSBtc3AzNHh4X21vZHVzKG1zcC0+bm9ybSk7CisJbW9kdXMgPSBtc3AzNHh4X21vZHVzKGNsaWVudCwgbXNwLT5ub3JtKTsKIAlzdGQgICA9IG1zcDM0eHhfc3RhbmRhcmQobXNwLT5ub3JtKTsKIAltb2R1cyAmPSB+MHgwMzsgLyogU1RBVFVTX0NIQU5HRT0wICovCiAJbW9kdXMgfD0gMHgwMTsgIC8qIEFVVE9NQVRJQ19TT1VORF9ERVRFQ1RJT049MSAqLwpAQCAtMTIyMiw3ICsxMzU0LDcgQEAKIAkJcmV0dXJuIC0xOwogCWlmIChtc3AzNDAwY193cml0ZShjbGllbnQsCiAJCQkgICBJMkNfTVNQMzQwMENfREVNLAotCQkJICAgMHgyMC8qc3RhbmFyZCovLAorCQkJICAgMHgyMC8qc3RhbmRhcmQqLywKIAkJCSAgIHN0ZCkpCiAJCXJldHVybiAtMTsKIApAQCAtMTIzMCwyMSArMTM2MiwxOCBAQAogCSAgIHN0YW5kYXJkL2F1ZGlvIGF1dG9kZXRlY3Rpb24gcmlnaHQgbm93ICovCiAJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIG1zcC0+c291cmNlKTsKIAotCWlmIChtc3AzNDAwY193cml0ZShjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsCi0JCQkgICAweDBlLCAvKiBBTS9GTSBQcmVzY2FsZSAqLwotCQkJICAgMHgzMDAwIC8qIGRlZmF1bHQ6IFsxNTo4XSA3NWtoeiBkZXZpYXRpb24gKi8pKQorCWlmIChtc3AzNDAwY193cml0ZV9kZnBfd2l0aF9kZWZhdWx0KGNsaWVudCwgMHgwZSwJLyogQU0vRk0gUHJlc2NhbGUgKi8KKwkJCQkJICAgIDB4MzAwMAorCQkJCQkgICAgLyogZGVmYXVsdDogWzE1OjhdIDc1a2h6IGRldmlhdGlvbiAqLworCSAgICApKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAobXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLAotCQkJICAgMHgxMCwgLyogTklDQU0gUHJlc2NhbGUgKi8KLQkJCSAgIDB4NWEwMCAvKiBkZWZhdWx0OiA5ZGIgZ2FpbiAoYXMgcmVjb21tZW5kZWQpICovKSkKKwlpZiAobXNwMzQwMGNfd3JpdGVfZGZwX3dpdGhfZGVmYXVsdChjbGllbnQsIDB4MTAsCS8qIE5JQ0FNIFByZXNjYWxlICovCisJCQkJCSAgICAweDVhMDAKKwkJCQkJICAgIC8qIGRlZmF1bHQ6IDlkYiBnYWluIChhcyByZWNvbW1lbmRlZCkgKi8KKwkgICAgKSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKG1zcDM0MDBjX3dyaXRlKGNsaWVudCwKLQkJCSAgIEkyQ19NU1AzNDAwQ19ERU0sCi0JCQkgICAweDIwLCAvKiBTVEFOREFSRCBTRUxFQ1QgICovCi0JCQkgICBzdGFuZGFyZCAvKiBkZWZhdWx0OiAweDAxIGZvciBhdXRvbWF0aWMgc3RhbmRhcmQgc2VsZWN0Ki8pKQotCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNTQsMjcgKzEzODMsMjcgQEAKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwsIHN0ZCwgaTsKIAotCXByaW50aygibXNwMzR4eGc6IGRhZW1vbiBzdGFydGVkXG4iKTsKKwltc3AzNDAwX2luZm8oIm1zcDM0eHhnIGRhZW1vbiBzdGFydGVkXG4iKTsKIAltc3AtPnNvdXJjZSA9IDE7IC8qIGRlZmF1bHQgKi8KIAlmb3IgKDs7KSB7Ci0JCWQycHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHhnOiB0aHJlYWQ6IHNsZWVwXG4iKTsKKwkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNHh4ZyB0aHJlYWQ6IHNsZWVwXG4iKTsKIAkJbXNwMzR4eF9zbGVlcChtc3AsLTEpOwotCQlkMnByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4ZzogdGhyZWFkOiB3YWtldXBcbiIpOworCQltc3AzNDAwX2RiZ19tZWRpdW12b2woIm1zcDM0eHhnIHRocmVhZDogd2FrZXVwXG4iKTsKIAogCXJlc3RhcnQ6Ci0JCWRwcmludGsoIm1zcDM0eHhnOiB0aHJlYWQ6IHJlc3RhcnQgc2NhblxuIik7CisJCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IHJlc3RhcnQgc2NhblxuIik7CiAJCW1zcC0+cmVzdGFydCA9IDA7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKIAogCQkvKiBzZXR1cCB0aGUgY2hpcCovCi0JCW1zcDM0eHhnX2luaXQoY2xpZW50KTsKKwkJbXNwMzR4eGdfcmVzZXQoY2xpZW50KTsKIAkJc3RkID0gc3RhbmRhcmQ7CiAJCWlmIChzdGQgIT0gMHgwMSkKIAkJCWdvdG8gdW5tdXRlOwogCiAJCS8qIHdhdGNoIGF1dG9kZXRlY3QgKi8KLQkJZHByaW50aygibXNwMzR4eGc6IHRyaWdnZXJlZCBhdXRvZGV0ZWN0LCB3YWl0aW5nIGZvciByZXN1bHRcbiIpOworCQltc3AzNDAwX2RiZygidHJpZ2dlcmVkIGF1dG9kZXRlY3QsIHdhaXRpbmcgZm9yIHJlc3VsdFxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQlpZiAobXNwMzR4eF9zbGVlcChtc3AsMTAwKSkKIAkJCQlnb3RvIHJlc3RhcnQ7CkBAIC0xMjg1LDIzICsxNDE0LDIzIEBACiAJCQkJc3RkID0gdmFsOwogCQkJCWJyZWFrOwogCQkJfQotCQkJZHByaW50aygibXNwMzR4eGc6IGRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzc1xuIik7CisJCQltc3AzNDAwX2RiZygiZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzXG4iKTsKIAkJfQogCQlpZiAoMHgwMSA9PSBzdGQpIHsKLQkJCWRwcmludGsoIm1zcDM0eHhnOiBkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAgdHJpZXMuIGdpdmluZyB1cC5cbiIpOworCQkJbXNwMzQwMF9kYmcoImRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMCB0cmllcy4gZ2l2aW5nIHVwLlxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCiAJdW5tdXRlOgotCQlkcHJpbnRrKCJtc3AzNHh4ZzogY3VycmVudCBtb2RlOiAlcyAoMHglMDR4KVxuIiwKKwkJbXNwMzQwMF9kYmcoImN1cnJlbnQgbW9kZTogJXMgKDB4JTA0eClcbiIsCiAJCQltc3AzNHh4X3N0YW5kYXJkX21vZGVfbmFtZShzdGQpLCBzdGQpOwogCiAJCS8qIHVubXV0ZTogZGlzcGF0Y2ggc291bmQgdG8gc2NhcnQgb3V0cHV0LCBzZXQgc2NhcnQgdm9sdW1lICovCi0JCWRwcmludGsoIm1zcDM0eHhnOiB1bm11dGVcbiIpOworCQltc3AzNDAwX2RiZygidW5tdXRlXG4iKTsKIAogCQltc3AzNDAwY19zZXRiYXNzKGNsaWVudCwgbXNwLT5iYXNzKTsKIAkJbXNwMzQwMGNfc2V0dHJlYmxlKGNsaWVudCwgbXNwLT50cmVibGUpOwotCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKKwkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKIAogCQkvKiByZXN0b3JlIEFDQiAqLwogCQlpZiAobXNwMzQwMGNfd3JpdGUoY2xpZW50LApAQCAtMTMwOSw4ICsxNDM4LDEwIEBACiAJCQkJICAgMHgxMywgLyogQUNCICovCiAJCQkJICAgbXNwLT5hY2IpKQogCQkJcmV0dXJuIC0xOworCisJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDQwLCBtc3AtPmkyc19tb2RlKTsKIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4ZzogdGhyZWFkOiBleGl0XG4iKTsKKwltc3AzNDAwX2RiZygidGhyZWFkOiBleGl0XG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMyOSw3ICsxNDYwLDcgQEAKIAkgKiBmb3IgTU9OTyAoc291cmNlPT0wKSBkb3dubWl4aW5nIHNldCBiaXRbNzowXSB0byAweDMwCiAJICovCiAJaW50IHZhbHVlID0gKHNvdXJjZSYweDA3KTw8OHwoc291cmNlPT0wID8gMHgzMDoweDIwKTsKLQlkcHJpbnRrKCJtc3AzNHh4Zzogc2V0IHNvdXJjZSB0byAlZCAoMHgleClcbiIsIHNvdXJjZSwgdmFsdWUpOworCW1zcDM0MDBfZGJnKCJzZXQgc291cmNlIHRvICVkICgweCV4KVxuIiwgc291cmNlLCB2YWx1ZSk7CiAJbXNwMzQwMGNfd3JpdGUoY2xpZW50LAogCQkgICAgICAgSTJDX01TUDM0MDBDX0RGUCwKIAkJICAgICAgIDB4MDgsIC8qIExvdWRzcGVha2VyIE91dHB1dCAqLwpAQCAtMTM4MCw3ICsxNTExLDcgQEAKIAkJICogdGhpcyBpcyBhIHByb2JsZW0sIEknbGwgaGFuZGxlIFNBUCBqdXN0IGxpa2UgbGFuZzEvbGFuZzIuCiAJCSAqLwogCX0KLQlkcHJpbnRrKCJtc3AzNHh4Zzogc3RhdHVzPTB4JXgsIHN0ZXJlbz0lZCwgYmlsaW5ndWFsPSVkIC0+IHJ4c3ViY2hhbnM9JWRcbiIsCisJbXNwMzQwMF9kYmcoInN0YXR1cz0weCV4LCBzdGVyZW89JWQsIGJpbGluZ3VhbD0lZCAtPiByeHN1YmNoYW5zPSVkXG4iLAogCQlzdGF0dXMsIGlzX3N0ZXJlbywgaXNfYmlsaW5ndWFsLCBtc3AtPnJ4c3ViY2hhbnMpOwogfQogCkBAIC0xNDI3LDcgKzE1NTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5uYW1lICAgICAgICAgICA9ICJpMmMgbXNwMzQwMCBkcml2ZXIiLAorCS5uYW1lICAgICAgICAgICA9ICJtc3AzNDAwIiwKICAgICAgICAgLmlkICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX01TUDM0MDAsCiAgICAgICAgIC5mbGFncyAgICAgICAgICA9IEkyQ19ERl9OT1RJRlksCiAgICAgICAgIC5hdHRhY2hfYWRhcHRlciA9IG1zcF9wcm9iZSwKQEAgLTE0NDksNTcgKzE1ODAsNjQgQEAKIHN0YXRpYyBpbnQgbXNwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKIHsKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcDsKLSAgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmM7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZjbGllbnRfdGVtcGxhdGU7CiAJaW50ICgqdGhyZWFkX2Z1bmMpKHZvaWQgKmRhdGEpID0gTlVMTDsKKwlpbnQgaTsKIAotICAgICAgICBjbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7Ci0gICAgICAgIGNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKKwljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7CisJY2xpZW50X3RlbXBsYXRlLmFkZHIgPSBhZGRyOwogCi0gICAgICAgIGlmICgtMSA9PSBtc3AzNDAwY19yZXNldCgmY2xpZW50X3RlbXBsYXRlKSkgewotICAgICAgICAgICAgICAgIGRwcmludGsoIm1zcDM0eHg6IG5vIGNoaXAgZm91bmRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorCWlmICgtMSA9PSBtc3AzNDAwY19yZXNldCgmY2xpZW50X3RlbXBsYXRlKSkgeworCQltc3AzNDAwX2RiZygibm8gY2hpcCBmb3VuZFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICAgICAgaWYgKE5VTEwgPT0gKGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksR0ZQX0tFUk5FTCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICBtZW1jcHkoYywmY2xpZW50X3RlbXBsYXRlLHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCWlmIChOVUxMID09IChjbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CiAJaWYgKE5VTEwgPT0gKG1zcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc3AzNDAwYyksR0ZQX0tFUk5FTCkpKSB7Ci0JCWtmcmVlKGMpOworCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAltZW1zZXQobXNwLDAsc2l6ZW9mKHN0cnVjdCBtc3AzNDAwYykpOwotCW1zcC0+dm9sdW1lICA9IDU4ODgwOyAgLyogMGRiIGdhaW4gKi8KLQltc3AtPmJhbGFuY2UgPSAzMjc2ODsKLQltc3AtPmJhc3MgICAgPSAzMjc2ODsKLQltc3AtPnRyZWJsZSAgPSAzMjc2ODsKLQltc3AtPmlucHV0ICAgPSAtMTsKLQltc3AtPm11dGVkICAgPSAxOworCW1zcC0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKKwltc3AtPmxlZnQgPSA1ODg4MDsJLyogMGRiIGdhaW4gKi8KKwltc3AtPnJpZ2h0ID0gNTg4ODA7CS8qIDBkYiBnYWluICovCisJbXNwLT5iYXNzID0gMzI3Njg7CisJbXNwLT50cmVibGUgPSAzMjc2ODsKKwltc3AtPmlucHV0ID0gLTE7CisJbXNwLT5tdXRlZCA9IDA7CisJbXNwLT5pMnNfbW9kZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IERGUF9DT1VOVDsgaSsrKQorCQltc3AtPmRmcF9yZWdzW2ldID0gLTE7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoYywgbXNwKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtc3ApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1zcC0+d3EpOwogCi0JaWYgKC0xID09IG1zcDM0MDBjX3Jlc2V0KGMpKSB7CisJaWYgKC0xID09IG1zcDM0MDBjX3Jlc2V0KGNsaWVudCkpIHsKIAkJa2ZyZWUobXNwKTsKLQkJa2ZyZWUoYyk7Ci0JCWRwcmludGsoIm1zcDM0eHg6IG5vIGNoaXAgZm91bmRcbiIpOworCQlrZnJlZShjbGllbnQpOworCQltc3AzNDAwX2RiZygibm8gY2hpcCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQltc3AtPnJldjEgPSBtc3AzNDAwY19yZWFkKGMsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MWUpOworCW1zcC0+cmV2MSA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDFlKTsKIAlpZiAoLTEgIT0gbXNwLT5yZXYxKQotCQltc3AtPnJldjIgPSBtc3AzNDAwY19yZWFkKGMsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MWYpOworCQltc3AtPnJldjIgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgxZik7CiAJaWYgKCgtMSA9PSBtc3AtPnJldjEpIHx8ICgwID09IG1zcC0+cmV2MSAmJiAwID09IG1zcC0+cmV2MikpIHsKIAkJa2ZyZWUobXNwKTsKLQkJa2ZyZWUoYyk7Ci0JCWRwcmludGsoIm1zcDM0eHg6IGVycm9yIHdoaWxlIHJlYWRpbmcgY2hpcCB2ZXJzaW9uXG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJbXNwMzQwMF9kYmcoImVycm9yIHdoaWxlIHJlYWRpbmcgY2hpcCB2ZXJzaW9uXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KKwltc3AzNDAwX2RiZygicmV2MT0weCUwNHgsIHJldjI9MHglMDR4XG4iLCBtc3AtPnJldjEsIG1zcC0+cmV2Mik7CiAKLQltc3AzNDAwY19zZXR2b2x1bWUoYywgbXNwLT5tdXRlZCwgbXNwLT52b2x1bWUsIG1zcC0+YmFsYW5jZSk7CisJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKIAotCXNucHJpbnRmKGMtPm5hbWUsIHNpemVvZihjLT5uYW1lKSwgIk1TUDM0JTAyZCVjLSVjJWQiLAotCQkgKG1zcC0+cmV2Mj4+OCkmMHhmZiwgKG1zcC0+cmV2MSYweGZmKSsnQCcsCisJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSwgIk1TUCVjNCUwMmQlYy0lYyVkIiwKKwkJICgobXNwLT5yZXYxPj40KSYweDBmKSArICczJywKKwkJIChtc3AtPnJldjI+PjgpJjB4ZmYsIChtc3AtPnJldjEmMHgwZikrJ0AnLAogCQkgKChtc3AtPnJldjE+PjgpJjB4ZmYpKydAJywgbXNwLT5yZXYyJjB4MWYpOwogCiAJbXNwLT5vcG1vZGUgPSBvcG1vZGU7CkBAIC0xNTEzLDcgKzE2NTEsNyBAQAogCX0KIAogCS8qIGhlbGxvIHdvcmxkIDotKSAqLwotCXByaW50ayhLRVJOX0lORk8gIm1zcDM0eHg6IGluaXQ6IGNoaXA9JXMiLCBjLT5uYW1lKTsKKwltc3AzNDAwX2luZm8oImNoaXA9JXMiLCBjbGllbnQtPm5hbWUpOwogCWlmIChIQVZFX05JQ0FNKG1zcCkpCiAJCXByaW50aygiICtuaWNhbSIpOwogCWlmIChIQVZFX1NJTVBMRShtc3ApKQpAQCAtMTU0MiwyOSArMTY4MCw0OSBAQAogCiAJLyogc3RhcnR1cCBjb250cm9sIHRocmVhZCBpZiBuZWVkZWQgKi8KIAlpZiAodGhyZWFkX2Z1bmMpIHsKLQkJbXNwLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkX2Z1bmMsIGMsICJtc3AzNHh4Iik7CisJCW1zcC0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHRocmVhZF9mdW5jLCBjbGllbnQsICJtc3AzNHh4Iik7CisKIAkJaWYgKE5VTEwgPT0gbXNwLT5rdGhyZWFkKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNwMzR4eDoga2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7Ci0JCW1zcF93YWtlX3RocmVhZChjKTsKKwkJCW1zcDM0MDBfd2Fybigia2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7CisJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwogCX0KIAogCS8qIGRvbmUgKi8KLSAgICAgICAgaTJjX2F0dGFjaF9jbGllbnQoYyk7CisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCS8qIHVwZGF0ZSBvdXIgb3duIGFycmF5ICovCisJZm9yIChpID0gMDsgaSA8IE1TUDM0MDBfTUFYOyBpKyspIHsKKwkJaWYgKE5VTEwgPT0gbXNwc1tpXSkgeworCQkJbXNwc1tpXSA9IGNsaWVudDsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXNwX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBtc3AzNDAwYyAqbXNwICA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpOwogCiAJLyogc2h1dGRvd24gY29udHJvbCB0aHJlYWQgKi8KLQlpZiAobXNwLT5rdGhyZWFkID49IDApIHsKKwlpZiAobXNwLT5rdGhyZWFkKSB7CiAJCW1zcC0+cmVzdGFydCA9IDE7CiAJCWt0aHJlYWRfc3RvcChtc3AtPmt0aHJlYWQpOwogCX0KLSAgICAJbXNwMzQwMGNfcmVzZXQoY2xpZW50KTsKKwltc3AzNDAwY19yZXNldChjbGllbnQpOworCisJLyogdXBkYXRlIG91ciBvd24gYXJyYXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVNQMzQwMF9NQVg7IGkrKykgeworCQlpZiAoY2xpZW50ID09IG1zcHNbaV0pIHsKKwkJCW1zcHNbaV0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCiAJa2ZyZWUobXNwKTsKIAlrZnJlZShjbGllbnQpOwogCXJldHVybiAwOwpAQCAtMTY0MCw3ICsxNzk4LDcgQEAKIAljYXNlIE9QTU9ERV9NQU5VQUw6CiAJY2FzZSBPUE1PREVfU0lNUExFOgogCQltc3AtPndhdGNoX3N0ZXJlbyA9IDA7Ci0JCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCwgYXVkbW9kZSk7CisJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIGF1ZG1vZGUpOwogCQlicmVhazsKIAljYXNlIE9QTU9ERV9TSU1QTEVSOgogCQltc3AzNHh4Z19zZXRfYXVkbW9kZShjbGllbnQsIGF1ZG1vZGUpOwpAQCAtMTY0OCwxNiArMTgwNiwxOCBAQAogCX0KIH0KIAorCiBzdGF0aWMgaW50IG1zcF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLSAgICAgICAgX191MTYgICAgICAgICAgICpzYXJnID0gYXJnOworCV9fdTE2ICAgICAgICAgICAqc2FyZyA9IGFyZzsKIAlpbnQgc2NhcnQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKIAogCWNhc2UgQVVEQ19TRVRfSU5QVVQ6Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogQVVEQ19TRVRfSU5QVVQoJWQpXG4iLCpzYXJnKTsKKwkJbXNwMzQwMF9kYmcoIkFVRENfU0VUX0lOUFVUKCVkKVxuIiwqc2FyZyk7CisKIAkJaWYgKCpzYXJnID09IG1zcC0+aW5wdXQpCiAJCQlicmVhazsKIAkJbXNwLT5pbnB1dCA9ICpzYXJnOwpAQCAtMTY5MSwxNSArMTg1MSwxNSBAQAogCQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCxzY2FydCwwKTsKIAkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLDB4MDAwZCwweDE5MDApOwogCQkJaWYgKG1zcC0+b3Btb2RlICE9IE9QTU9ERV9TSU1QTEVSKQotCQkJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCwgbXNwLT5hdWRtb2RlKTsKKwkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBtc3AtPmF1ZG1vZGUpOwogCQl9CiAJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwogCQlicmVhazsKIAogCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogQVVEQ19TRVRfUkFESU9cbiIpOworCQltc3AzNDAwX2RiZygiQVVEQ19TRVRfUkFESU9cbiIpOwogCQltc3AtPm5vcm0gPSBWSURFT19NT0RFX1JBRElPOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IHN3aXRjaGluZyB0byByYWRpbyBtb2RlXG4iKTsKKwkJbXNwMzQwMF9kYmcoInN3aXRjaGluZyB0byByYWRpbyBtb2RlXG4iKTsKIAkJbXNwLT53YXRjaF9zdGVyZW8gPSAwOwogCQlzd2l0Y2ggKG1zcC0+b3Btb2RlKSB7CiAJCWNhc2UgT1BNT0RFX01BTlVBTDoKQEAgLTE3MDcsOCArMTg2Nyw3IEBACiAJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCxNU1BfTU9ERV9GTV9SQURJTyk7CiAJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoMTAuNyksCiAJCQkJCSAgICBNU1BfQ0FSUklFUigxMC43KSk7Ci0JCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLAotCQkJCQkgICBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKKwkJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7CiAJCQlicmVhazsKIAkJY2FzZSBPUE1PREVfU0lNUExFOgogCQljYXNlIE9QTU9ERV9TSU1QTEVSOgpAQCAtMTcxNyw2ICsxODc2LDMwIEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKwkJLyogd29yay1pbi1wcm9ncmVzczogIGhvb2sgdG8gY29udHJvbCB0aGUgREZQIHJlZ2lzdGVycyAqLworCWNhc2UgTVNQX1NFVF9ERlBSRUc6CisJeworCQlzdHJ1Y3QgbXNwX2RmcHJlZyAqciA9IGFyZzsKKwkJaW50IGk7CisKKwkJaWYgKHItPnJlZyA8IDAgfHwgci0+cmVnID49IERGUF9DT1VOVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJsX2RmcCkgLyBzaXplb2YoaW50KTsgaSsrKQorCQkJaWYgKHItPnJlZyA9PSBibF9kZnBbaV0pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1zcC0+ZGZwX3JlZ3Nbci0+cmVnXSA9IHItPnZhbHVlOworCQltc3AzNDAwY193cml0ZShjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIHItPnJlZywgci0+dmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBNU1BfR0VUX0RGUFJFRzoKKwl7CisJCXN0cnVjdCBtc3BfZGZwcmVnICpyID0gYXJnOworCisJCWlmIChyLT5yZWcgPCAwIHx8IHItPnJlZyA+PSBERlBfQ09VTlQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJci0+dmFsdWUgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgci0+cmVnKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCiAJLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCkBAIC0xNzI1LDcgKzE5MDgsNyBAQAogCXsKIAkJc3RydWN0IHZpZGVvX2F1ZGlvICp2YSA9IGFyZzsKIAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IFZJRElPQ0dBVURJT1xuIik7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NHQVVESU9cbiIpOwogCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fVk9MVU1FIHwKIAkJCVZJREVPX0FVRElPX0JBU1MgfAogCQkJVklERU9fQVVESU9fVFJFQkxFIHwKQEAgLTE3MzMsOCArMTkxNiwxNSBAQAogCQlpZiAobXNwLT5tdXRlZCkKIAkJCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwogCi0JCXZhLT52b2x1bWUgPSBtc3AtPnZvbHVtZTsKLQkJdmEtPmJhbGFuY2UgPSAodmEtPnZvbHVtZSkgPyBtc3AtPmJhbGFuY2UgOiAzMjc2ODsKKwkJaWYgKG1zcC0+bXV0ZWQpCisJCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fTVVURTsKKwkJdmEtPnZvbHVtZSA9IE1BWChtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOworCQl2YS0+YmFsYW5jZSA9ICgzMjc2OCAqIE1JTihtc3AtPmxlZnQsIG1zcC0+cmlnaHQpKSAvCisJCSAgICAodmEtPnZvbHVtZSA/IHZhLT52b2x1bWUgOiAxKTsKKwkJdmEtPmJhbGFuY2UgPSAobXNwLT5sZWZ0IDwgbXNwLT5yaWdodCkgPworCQkgICAgKDY1NTM1IC0gdmEtPmJhbGFuY2UpIDogdmEtPmJhbGFuY2U7CisJCWlmICgwID09IHZhLT52b2x1bWUpCisJCQl2YS0+YmFsYW5jZSA9IDMyNzY4OwogCQl2YS0+YmFzcyA9IG1zcC0+YmFzczsKIAkJdmEtPnRyZWJsZSA9IG1zcC0+dHJlYmxlOwogCkBAIC0xNzQ2LDI3ICsxOTM2LDQzIEBACiAJewogCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwogCi0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogVklESU9DU0FVRElPXG4iKTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJT1xuIik7CiAJCW1zcC0+bXV0ZWQgPSAodmEtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSk7Ci0JCW1zcC0+dm9sdW1lID0gdmEtPnZvbHVtZTsKLQkJbXNwLT5iYWxhbmNlID0gdmEtPmJhbGFuY2U7CisJCW1zcC0+bGVmdCA9IChNSU4oNjU1MzYgLSB2YS0+YmFsYW5jZSwgMzI3NjgpICoKKwkJCSAgICAgdmEtPnZvbHVtZSkgLyAzMjc2ODsKKwkJbXNwLT5yaWdodCA9IChNSU4odmEtPmJhbGFuY2UsIDMyNzY4KSAqIHZhLT52b2x1bWUpIC8gMzI3Njg7CiAJCW1zcC0+YmFzcyA9IHZhLT5iYXNzOwogCQltc3AtPnRyZWJsZSA9IHZhLT50cmVibGU7Ci0KLQkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwKLQkJCQkgICBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKLQkJbXNwMzQwMGNfc2V0YmFzcyhjbGllbnQsbXNwLT5iYXNzKTsKLQkJbXNwMzQwMGNfc2V0dHJlYmxlKGNsaWVudCxtc3AtPnRyZWJsZSk7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyB2YS0+dm9sdW1lIHRvICVkXG4iLAorCQkJdmEtPnZvbHVtZSk7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyB2YS0+YmFsYW5jZSB0byAlZFxuIiwKKwkJCXZhLT5iYWxhbmNlKTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIHZhLT5mbGFncyB0byAlZFxuIiwKKwkJCXZhLT5mbGFncyk7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyBtc3AtPmxlZnQgdG8gJWRcbiIsCisJCQltc3AtPmxlZnQpOworCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgbXNwLT5yaWdodCB0byAlZFxuIiwKKwkJCW1zcC0+cmlnaHQpOworCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgbXNwLT5iYXNzIHRvICVkXG4iLAorCQkJbXNwLT5iYXNzKTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIG1zcC0+dHJlYmxlIHRvICVkXG4iLAorCQkJbXNwLT50cmVibGUpOworCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgbXNwLT5tb2RlIHRvICVkXG4iLAorCQkJbXNwLT5tb2RlKTsKKwkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKKwkJbXNwMzQwMGNfc2V0YmFzcyhjbGllbnQsIG1zcC0+YmFzcyk7CisJCW1zcDM0MDBjX3NldHRyZWJsZShjbGllbnQsIG1zcC0+dHJlYmxlKTsKIAogCQlpZiAodmEtPm1vZGUgIT0gMCAmJiBtc3AtPm5vcm0gIT0gVklERU9fTU9ERV9SQURJTykKIAkJCW1zcF9hbnlfc2V0X2F1ZG1vZGUoY2xpZW50LG1vZGVfdjRsMV90b192NGwyKHZhLT5tb2RlKSk7CiAJCWJyZWFrOwogCX0KKwogCWNhc2UgVklESU9DU0NIQU46CiAJewogCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmMgPSBhcmc7CiAKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiBWSURJT0NTQ0hBTiAobm9ybT0lZClcbiIsdmMtPm5vcm0pOworCQltc3AzNDAwX2RiZygiVklESU9DU0NIQU4gKG5vcm09JWQpXG4iLHZjLT5ub3JtKTsKIAkJbXNwLT5ub3JtID0gdmMtPm5vcm07CiAJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwogCQlicmVhazsKQEAgLTE3NzYsMTIgKzE5ODIsMTM1IEBACiAJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJewogCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IFZJRElPQ1NGUkVRXG4iKTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NGUkVRXG4iKTsKIAkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CiAJCWJyZWFrOwogCX0KIAorCS8qIG1zcDM0eHggc3BlY2lmaWMgKi8KKwljYXNlIE1TUF9TRVRfTUFUUklYOgorCXsKKwkJc3RydWN0IG1zcF9tYXRyaXggKm1zcG0gPSBhcmc7CisKKwkJbXNwMzQwMF9kYmcoIk1TUF9TRVRfTUFUUklYXG4iKTsKKwkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCwgbXNwbS0+aW5wdXQsIG1zcG0tPm91dHB1dCk7CisJCWJyZWFrOworCX0KKwogCS8qIC0tLSB2NGwyIGlvY3RscyAtLS0gKi8KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKKworCQkvKkZJWE1FOiB1c2UgVjRMMiBtb2RlIGZsYWdzIG9uIG1zcDM0MDAgaW5zdGVhZCBvZiBWNEwxKi8KKwkJaWYgKCppZCAmIFY0TDJfU1REX1BBTCkgeworCQkJbXNwLT5ub3JtPVZJREVPX01PREVfUEFMOworCQl9IGVsc2UgaWYgKCppZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCQltc3AtPm5vcm09VklERU9fTU9ERV9TRUNBTTsKKwkJfSBlbHNlIHsKKwkJCW1zcC0+bm9ybT1WSURFT19NT0RFX05UU0M7CisJCX0KKworCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCXsKKwkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CisKKwkJaWYgKGktPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCQlzd2l0Y2ggKGktPmluZGV4KSB7CisJCWNhc2UgQVVESU9fUkFESU86CisJCQlzdHJjcHkoaS0+bmFtZSwiUmFkaW8iKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8xOgorCQkJc3RyY3B5KGktPm5hbWUsIkV4dGVybiAxIik7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk5fMjoKKwkJCXN0cmNweShpLT5uYW1lLCJFeHRlcm4gMiIpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQlzdHJjcHkoaS0+bmFtZSwiVGVsZXZpc2lvbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19HX0FVRElPOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7CisKKwkJbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKKworCQlzd2l0Y2ggKGEtPmluZGV4KSB7CisJCWNhc2UgQVVESU9fUkFESU86CisJCQlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8xOgorCQkJc3RyY3B5KGEtPm5hbWUsIkV4dGVybiAxIik7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk5fMjoKKwkJCXN0cmNweShhLT5uYW1lLCJFeHRlcm4gMiIpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQlzdHJjcHkoYS0+bmFtZSwiVGVsZXZpc2lvbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW1zcF9hbnlfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCQlpZiAobXNwLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pIHsKKwkJCWEtPmNhcGFiaWxpdHk9VjRMMl9BVURDQVBfU1RFUkVPOworCQl9CisKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQVVESU86CisJeworCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqc2FyZyA9IGFyZzsKKworCQlzd2l0Y2ggKHNhcmctPmluZGV4KSB7CisJCWNhc2UgQVVESU9fUkFESU86CisJCQkvKiBIYXVwcGF1Z2UgdXNlcyBJTjIgZm9yIHRoZSByYWRpbyAqLworCQkJbXNwLT5tb2RlICAgPSBNU1BfTU9ERV9GTV9SQURJTzsKKwkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOXzE6CisJCQkvKiBJTjEgaXMgb2Z0ZW4gdXNlZCBmb3IgZXh0ZXJuYWwgaW5wdXQgLi4uICovCisJCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0VYVEVSTjsKKwkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4xOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOXzI6CisJCQkvKiAuLi4gc29tZXRpbWVzIGl0IGlzIElOMiB0aHJvdWdoIDspICovCisJCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0VYVEVSTjsKKwkJCXNjYXJ0ICAgICAgID0gU0NBUlRfSU4yOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQltc3AtPm1vZGUgICA9IC0xOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNjYXJ0KSB7CisJCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQltc3AtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCxzY2FydCwwKTsKKwkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLDB4MDAwZCwweDE5MDApOworCQl9CisJCWlmIChzYXJnLT5jYXBhYmlsaXR5PT1WNEwyX0FVRENBUF9TVEVSRU8pIHsKKwkJCW1zcC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCX0gZWxzZSB7CisJCQltc3AtPmF1ZG1vZGUgJj0gflY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCX0KKwkJbXNwX2FueV9zZXRfYXVkbW9kZShjbGllbnQsIG1zcC0+YXVkbW9kZSk7CisJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCQlicmVhazsKKwl9CiAJY2FzZSBWSURJT0NfR19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKQEAgLTE4MDQsMTMgKzIxMzMsNDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogbXNwMzR4eCBzcGVjaWZpYyAqLwotCWNhc2UgTVNQX1NFVF9NQVRSSVg6CisJY2FzZSBWSURJT0NfR19BVURPVVQ6CiAJewotCQlzdHJ1Y3QgbXNwX21hdHJpeCAqbXNwbSA9IGFyZzsKKwkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKmE9KHN0cnVjdCB2NGwyX2F1ZGlvb3V0ICopYXJnOworCQlpbnQgaWR4PWEtPmluZGV4OwogCi0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogTVNQX1NFVF9NQVRSSVhcbiIpOwotCQltc3AzNDAwY19zZXRfc2NhcnQoY2xpZW50LCBtc3BtLT5pbnB1dCwgbXNwbS0+b3V0cHV0KTsKKwkJbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKKworCQlzd2l0Y2ggKGlkeCkgeworCQljYXNlIDA6CisJCQlzdHJjcHkoYS0+bmFtZSwiU2NhcnQxIE91dCIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXN0cmNweShhLT5uYW1lLCJTY2FydDIgT3V0Iik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RyY3B5KGEtPm5hbWUsIkkyUyBPdXQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwl9CisJY2FzZSBWSURJT0NfU19BVURPVVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9hdWRpb291dCAqYT0oc3RydWN0IHY0bDJfYXVkaW9vdXQgKilhcmc7CisKKwkJaWYgKGEtPmluZGV4PDB8fGEtPmluZGV4PjIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoYS0+aW5kZXg9PTIpIHsKKwkJCWlmIChhLT5tb2RlID09IFY0TDJfQVVETU9ERV8zMkJJVFMpCisJCQkJbXNwLT5pMnNfbW9kZT0xOworCQkJZWxzZQorCQkJCW1zcC0+aTJzX21vZGU9MDsKKwkJfQorCQltc3AzNDAwX2RiZygiU2V0dGluZyBhdWRpbyBvdXQgb24gbXNwMzR4eCB0byBpbnB1dCAlaSwgbW9kZSAlaVxuIiwKKwkJCQkJCWEtPmluZGV4LG1zcC0+aTJzX21vZGUpOworCQltc3AzNDAwY19zZXRfc2NhcnQoY2xpZW50LG1zcC0+aW5fc2NhcnQsYS0+aW5kZXgrMSk7CisKIAkJYnJlYWs7CiAJfQogCkBAIC0xODIzLDE5ICsyMTg1LDE5IEBACiAKIHN0YXRpYyBpbnQgbXNwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyY19jbGllbnQsIGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOwogCi0JZHByaW50aygibXNwMzR4eDogc3VzcGVuZFxuIik7Ci0JbXNwMzQwMGNfcmVzZXQoYyk7CisJbXNwMzQwMF9kYmcoIm1zcDM0eHg6IHN1c3BlbmRcbiIpOworCW1zcDM0MDBjX3Jlc2V0KGNsaWVudCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXNwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyY19jbGllbnQsIGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOwogCi0JZHByaW50aygibXNwMzR4eDogcmVzdW1lXG4iKTsKLQltc3Bfd2FrZV90aHJlYWQoYyk7CisJbXNwMzQwMF9kYmcoIm1zcDM0eHg6IHJlc3VtZVxuIik7CisJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210MjB4eC5jCmluZGV4IDk3MmFhNWUuLjIxODAwMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYwpAQCAtNzYsMTcgKzc2LDE3IEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IHhvZ2MpIC8vYWxsIGluIEh6CiB7CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotICAgICAgICB1bnNpZ25lZCBpbnQgZnJlZixsbzEsbG8xbixsbzFhLHMsc2VsLGxvMWZyZXEsIGRlc2lyZWRfbG8xLAorCXVuc2lnbmVkIGludCBmcmVmLGxvMSxsbzFuLGxvMWEscyxzZWwsbG8xZnJlcSwgZGVzaXJlZF9sbzEsCiAJCWRlc2lyZWRfbG8yLGxvMixsbzJuLGxvMmEsbG8ybnVtLGxvMmZyZXE7CiAKLSAgICAgICAgZnJlZj0gNTI1MCAqMTAwMDsgLy81LjI1TUh6CisJZnJlZj0gNTI1MCAqMTAwMDsgLy81LjI1TUh6CiAJZGVzaXJlZF9sbzE9cmZpbitpZjE7CiAKIAlsbzE9KDIqKGRlc2lyZWRfbG8xLzEwMDApKyhmcmVmLzEwMDApKSAvICgyKmZyZWYvMTAwMCk7Ci0gICAgICAgIGxvMW49bG8xLzg7Ci0gICAgICAgIGxvMWE9bG8xLShsbzFuKjgpOworCWxvMW49bG8xLzg7CisJbG8xYT1sbzEtKGxvMW4qOCk7CiAKLSAgICAgICAgcz1yZmluLzEwMDAvMTAwMCsxMDkwOworCXM9cmZpbi8xMDAwLzEwMDArMTA5MDsKIAogCWlmKG9wdGltaXplX3ZjbykgewogCQlpZihzPjE4OTApIHNlbD0wOwpAQCAtOTYsMzQgKzk2LDM0IEBACiAJCWVsc2Ugc2VsPTQ7IC8vID4xMDkwCiAJfQogCWVsc2UgewotICAgICAgICAJaWYocz4xNzkwKSBzZWw9MDsgLy8gPDE5NTgKLSAgICAgICAgCWVsc2UgaWYocz4xNjE3KSBzZWw9MTsKLSAgICAgICAgCWVsc2UgaWYocz4xNDQ5KSBzZWw9MjsKLSAgICAgICAgCWVsc2UgaWYocz4xMjkxKSBzZWw9MzsKLSAgICAgICAgCWVsc2Ugc2VsPTQ7IC8vID4xMDkwCisJCWlmKHM+MTc5MCkgc2VsPTA7IC8vIDwxOTU4CisJCWVsc2UgaWYocz4xNjE3KSBzZWw9MTsKKwkJZWxzZSBpZihzPjE0NDkpIHNlbD0yOworCQllbHNlIGlmKHM+MTI5MSkgc2VsPTM7CisJCWVsc2Ugc2VsPTQ7IC8vID4xMDkwCiAJfQogCSpyZXRfc2VsPXNlbDsKIAotICAgICAgICBsbzFmcmVxPShsbzFhKzgqbG8xbikqZnJlZjsKKwlsbzFmcmVxPShsbzFhKzgqbG8xbikqZnJlZjsKIAogCXR1bmVyX2RiZygibXQyMDMyOiByZmluPSVkIGxvMT0lZCBsbzFuPSVkIGxvMWE9JWQgc2VsPSVkLCBsbzFmcmVxPSVkXG4iLAogCQkgIHJmaW4sbG8xLGxvMW4sbG8xYSxzZWwsbG8xZnJlcSk7CiAKLSAgICAgICAgZGVzaXJlZF9sbzI9bG8xZnJlcS1yZmluLWlmMjsKLSAgICAgICAgbG8yPShkZXNpcmVkX2xvMikvZnJlZjsKLSAgICAgICAgbG8ybj1sbzIvODsKLSAgICAgICAgbG8yYT1sbzItKGxvMm4qOCk7Ci0gICAgICAgIGxvMm51bT0oKGRlc2lyZWRfbG8yLzEwMDApJShmcmVmLzEwMDApKSogMzc4MC8oZnJlZi8xMDAwKTsgLy9zY2FsZSB0byBmaXQgaW4gMzJiaXQgYXJpdGgKLSAgICAgICAgbG8yZnJlcT0obG8yYSs4KmxvMm4pKmZyZWYgKyBsbzJudW0qKGZyZWYvMTAwMCkvMzc4MCoxMDAwOworCWRlc2lyZWRfbG8yPWxvMWZyZXEtcmZpbi1pZjI7CisJbG8yPShkZXNpcmVkX2xvMikvZnJlZjsKKwlsbzJuPWxvMi84OworCWxvMmE9bG8yLShsbzJuKjgpOworCWxvMm51bT0oKGRlc2lyZWRfbG8yLzEwMDApJShmcmVmLzEwMDApKSogMzc4MC8oZnJlZi8xMDAwKTsgLy9zY2FsZSB0byBmaXQgaW4gMzJiaXQgYXJpdGgKKwlsbzJmcmVxPShsbzJhKzgqbG8ybikqZnJlZiArIGxvMm51bSooZnJlZi8xMDAwKS8zNzgwKjEwMDA7CiAKIAl0dW5lcl9kYmcoIm10MjAzMjogcmZpbj0lZCBsbzI9JWQgbG8ybj0lZCBsbzJhPSVkIG51bT0lZCBsbzJmcmVxPSVkXG4iLAogCQkgIHJmaW4sbG8yLGxvMm4sbG8yYSxsbzJudW0sbG8yZnJlcSk7CiAKLSAgICAgICAgaWYobG8xYTwwIHx8IGxvMWE+NyB8fCBsbzFuPDE3IHx8bG8xbj40OCB8fCBsbzJhPDAgfHxsbzJhID43IHx8bG8ybjwxNyB8fCBsbzJuPjMwKSB7CisJaWYobG8xYTwwIHx8IGxvMWE+NyB8fCBsbzFuPDE3IHx8bG8xbj40OCB8fCBsbzJhPDAgfHxsbzJhID43IHx8bG8ybjwxNyB8fCBsbzJuPjMwKSB7CiAJCXR1bmVyX2luZm8oIm10MjAzMjogZnJlcXVlbmN5IHBhcmFtZXRlcnMgb3V0IG9mIHJhbmdlOiAlZCAlZCAlZCAlZFxuIiwKIAkJCSAgIGxvMWEsIGxvMW4sIGxvMmEsbG8ybik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQorCQlyZXR1cm4oLTEpOworCX0KIAogCW10MjAzMl9zcHVyY2hlY2soYywgbG8xZnJlcSwgZGVzaXJlZF9sbzIsICBzcGVjdHJ1bV9mcm9tLCBzcGVjdHJ1bV90byk7CiAJLy8gc2hvdWxkIHJlY2FsY3VsYXRlIGxvMSAob25lIHN0ZXAgdXAvZG93bikKQEAgLTEzNSwxMCArMTM1LDEwIEBACiAJYnVmWzNdPTB4MGY7IC8vcmVzZXJ2ZWQKIAlidWZbNF09MHgxZjsKIAlidWZbNV09KGxvMm4tMSkgfCAobG8yYTw8NSk7Ci0gCWlmKHJmaW4gPjQwMCoxMDAwKjEwMDApCi0gICAgICAgICAgICAgICAgYnVmWzZdPTB4ZTQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZbNl09MHhmNDsgLy8gc2V0IFBLRU4gcGVyIHJldiAxLjIKKwlpZihyZmluID40MDAqMTAwMCoxMDAwKQorCQlidWZbNl09MHhlNDsKKwllbHNlCisJCWJ1Zls2XT0weGY0OyAvLyBzZXQgUEtFTiBwZXIgcmV2IDEuMgogCWJ1Zls3XT04K3hvZ2M7CiAJYnVmWzhdPTB4YzM7IC8vcmVzZXJ2ZWQKIAlidWZbOV09MHg0ZTsgLy9yZXNlcnZlZApAQCAtMTY4LDcgKzE2OCw3IEBACiAJCXR1bmVyX2RiZygibXQyMDMyOiBwbGwgd2FpdCAxbXMgZm9yIGxvY2sgKDB4JTJ4KVxuIixidWZbMF0pOwogCQl1ZGVsYXkoMTAwMCk7CiAJfQotICAgICAgICByZXR1cm4gbG9jazsKKwlyZXR1cm4gbG9jazsKIH0KIAogc3RhdGljIGludCBtdDIwMzJfb3B0aW1pemVfdmNvKHN0cnVjdCBpMmNfY2xpZW50ICpjLGludCBzZWwsaW50IGxvY2spCkBAIC0yMDIsNyArMjAyLDcgQEAKIAogCWJ1ZlswXT0weDBmOwogCWJ1ZlsxXT1zZWw7Ci0gICAgICAgIGkyY19tYXN0ZXJfc2VuZChjLGJ1ZiwyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYyxidWYsMik7CiAJbG9jaz1tdDIwMzJfY2hlY2tfbG9fbG9jayhjKTsKIAlyZXR1cm4gbG9jazsKIH0KQEAgLTIxOSwyMyArMjE5LDIzIEBACiAJdHVuZXJfZGJnKCJtdDIwMzJfc2V0X2lmX2ZyZXEgcmZpbj0lZCBpZjE9JWQgaWYyPSVkIGZyb209JWQgdG89JWRcbiIsCiAJCSAgcmZpbixpZjEsaWYyLGZyb20sdG8pOwogCi0gICAgICAgIGJ1ZlswXT0wOwotICAgICAgICByZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmLDEpOwotICAgICAgICBpMmNfbWFzdGVyX3JlY3YoYyxidWYsMjEpOworCWJ1ZlswXT0wOworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYsMSk7CisJaTJjX21hc3Rlcl9yZWN2KGMsYnVmLDIxKTsKIAogCWJ1ZlswXT0wOwogCXJldD1tdDIwMzJfY29tcHV0ZV9mcmVxKGMscmZpbixpZjEsaWYyLGZyb20sdG8sJmJ1ZlsxXSwmc2VsLHQtPnhvZ2MpOwogCWlmIChyZXQ8MCkKIAkJcmV0dXJuOwogCi0gICAgICAgIC8vIHNlbmQgb25seSB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzIHBlciBSZXYuIDEuMgotICAgICAgICBidWZbMF09MDsKLSAgICAgICAgcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1Ziw0KTsKLSAgICAgICAgYnVmWzVdPTU7Ci0gICAgICAgIHJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrNSw0KTsKLSAgICAgICAgYnVmWzExXT0xMTsKLSAgICAgICAgcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1ZisxMSwzKTsKLSAgICAgICAgaWYocmV0IT0zKQorCS8vIHNlbmQgb25seSB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzIHBlciBSZXYuIDEuMgorCWJ1ZlswXT0wOworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYsNCk7CisJYnVmWzVdPTU7CisJcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1Zis1LDQpOworCWJ1ZlsxMV09MTE7CisJcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1ZisxMSwzKTsKKwlpZihyZXQhPTMpCiAJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMylcbiIscmV0KTsKIAogCS8vIHdhaXQgZm9yIFBMTHMgdG8gbG9jayAocGVyIG1hbnVhbCksIHJldHJ5IExJTlQgaWYgbm90LgpAQCAtMjUzLDcgKzI1Myw3IEBACiAJCW1kZWxheSgxMCk7CiAJCWJ1ZlsxXT04K3QtPnhvZ2M7CiAJCWkyY19tYXN0ZXJfc2VuZChjLGJ1ZiwyKTsKLSAgICAgICAgfQorCX0KIAogCWlmIChsb2NrIT02KQogCQl0dW5lcl93YXJuKCJNVDIwMzIgRmF0YWwgRXJyb3I6IFBMTHMgZGlkbid0IGxvY2suXG4iKTsKQEAgLTI4NCw3ICsyODQsNyBAQAogCQlpZjIgID0gMzg5MDAqMTAwMDsKIAl9CiAKLSAgICAgICAgbXQyMDMyX3NldF9pZl9mcmVxKGMsIGZyZXEqNjI1MDAgLyogZnJlcSoxMDAwKjEwMDAvMTYgKi8sCisJbXQyMDMyX3NldF9pZl9mcmVxKGMsIGZyZXEqNjI1MDAgLyogZnJlcSoxMDAwKjEwMDAvMTYgKi8sCiAJCQkgICAxMDkwKjEwMDAqMTAwMCwgaWYyLCBmcm9tLCB0byk7CiB9CiAKQEAgLTI5NCw3ICsyOTQsNyBAQAogCWludCBpZjIgPSB0LT5yYWRpb19pZjI7CiAKIAkvLyBwZXIgTWFudWFsIGZvciBGTSB0dW5pbmc6IGZpcnN0IGlmIGNlbnRlciBmcmVxLiAxMDg1IE1IegotICAgICAgICBtdDIwMzJfc2V0X2lmX2ZyZXEoYywgZnJlcSAqIDEwMDAgLyAxNiwKKwltdDIwMzJfc2V0X2lmX2ZyZXEoYywgZnJlcSAqIDEwMDAgLyAxNiwKIAkJCSAgICAgIDEwODUqMTAwMCoxMDAwLGlmMixpZjIsaWYyKTsKIH0KIApAQCAtMzAyLDU3ICszMDIsNTcgQEAKIHN0YXRpYyBpbnQgbXQyMDMyX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMV07Ci0gICAgICAgIGludCByZXQseG9nYyx4b2s9MDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyMV07CisJaW50IHJldCx4b2djLHhvaz0wOwogCiAJLy8gSW5pdGlhbGl6ZSBSZWdpc3RlcnMgcGVyIHNwZWMuCi0gICAgICAgIGJ1ZlsxXT0yOyAvLyBJbmRleCB0byByZWdpc3RlciAyCi0gICAgICAgIGJ1ZlsyXT0weGZmOwotICAgICAgICBidWZbM109MHgwZjsKLSAgICAgICAgYnVmWzRdPTB4MWY7Ci0gICAgICAgIHJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrMSw0KTsKKwlidWZbMV09MjsgLy8gSW5kZXggdG8gcmVnaXN0ZXIgMgorCWJ1ZlsyXT0weGZmOworCWJ1ZlszXT0weDBmOworCWJ1Zls0XT0weDFmOworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrMSw0KTsKIAotICAgICAgICBidWZbNV09NjsgLy8gSW5kZXggcmVnaXN0ZXIgNgotICAgICAgICBidWZbNl09MHhlNDsKLSAgICAgICAgYnVmWzddPTB4OGY7Ci0gICAgICAgIGJ1Zls4XT0weGMzOwotICAgICAgICBidWZbOV09MHg0ZTsKLSAgICAgICAgYnVmWzEwXT0weGVjOwotICAgICAgICByZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmKzUsNik7CisJYnVmWzVdPTY7IC8vIEluZGV4IHJlZ2lzdGVyIDYKKwlidWZbNl09MHhlNDsKKwlidWZbN109MHg4ZjsKKwlidWZbOF09MHhjMzsKKwlidWZbOV09MHg0ZTsKKwlidWZbMTBdPTB4ZWM7CisJcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1Zis1LDYpOwogCi0gICAgICAgIGJ1ZlsxMl09MTM7ICAvLyBJbmRleCByZWdpc3RlciAxMwotICAgICAgICBidWZbMTNdPTB4MzI7Ci0gICAgICAgIHJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrMTIsMik7CisJYnVmWzEyXT0xMzsgIC8vIEluZGV4IHJlZ2lzdGVyIDEzCisJYnVmWzEzXT0weDMyOworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrMTIsMik7CiAKLSAgICAgICAgLy8gQWRqdXN0IFhPR0MgKHJlZ2lzdGVyIDcpLCB3YWl0IGZvciBYT0sKLSAgICAgICAgeG9nYz03OwotICAgICAgICBkbyB7CisJLy8gQWRqdXN0IFhPR0MgKHJlZ2lzdGVyIDcpLCB3YWl0IGZvciBYT0sKKwl4b2djPTc7CisJZG8gewogCQl0dW5lcl9kYmcoIm10MjAzMjogeG9nYyA9IDB4JTAyeFxuIix4b2djJjB4MDcpOwotICAgICAgICAgICAgICAgIG1kZWxheSgxMCk7Ci0gICAgICAgICAgICAgICAgYnVmWzBdPTB4MGU7Ci0gICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9zZW5kKGMsYnVmLDEpOwotICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfcmVjdihjLGJ1ZiwxKTsKLSAgICAgICAgICAgICAgICB4b2s9YnVmWzBdJjB4MDE7Ci0gICAgICAgICAgICAgICAgdHVuZXJfZGJnKCJtdDIwMzI6IHhvayA9IDB4JTAyeFxuIix4b2spOwotICAgICAgICAgICAgICAgIGlmICh4b2sgPT0gMSkgYnJlYWs7CisJCW1kZWxheSgxMCk7CisJCWJ1ZlswXT0weDBlOworCQlpMmNfbWFzdGVyX3NlbmQoYyxidWYsMSk7CisJCWkyY19tYXN0ZXJfcmVjdihjLGJ1ZiwxKTsKKwkJeG9rPWJ1ZlswXSYweDAxOworCQl0dW5lcl9kYmcoIm10MjAzMjogeG9rID0gMHglMDJ4XG4iLHhvayk7CisJCWlmICh4b2sgPT0gMSkgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICB4b2djLS07Ci0gICAgICAgICAgICAgICAgdHVuZXJfZGJnKCJtdDIwMzI6IHhvZ2MgPSAweCUwMnhcbiIseG9nYyYweDA3KTsKLSAgICAgICAgICAgICAgICBpZiAoeG9nYyA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4b2djPTQ7IC8vIG1pbi4gNCBwZXIgc3BlYwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ1ZlswXT0weDA3OwotICAgICAgICAgICAgICAgIGJ1ZlsxXT0weDg4ICsgeG9nYzsKLSAgICAgICAgICAgICAgICByZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmLDIpOwotICAgICAgICAgICAgICAgIGlmIChyZXQhPTIpCisJCXhvZ2MtLTsKKwkJdHVuZXJfZGJnKCJtdDIwMzI6IHhvZ2MgPSAweCUwMnhcbiIseG9nYyYweDA3KTsKKwkJaWYgKHhvZ2MgPT0gMykgeworCQkJeG9nYz00OyAvLyBtaW4uIDQgcGVyIHNwZWMKKwkJCWJyZWFrOworCQl9CisJCWJ1ZlswXT0weDA3OworCQlidWZbMV09MHg4OCArIHhvZ2M7CisJCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYsMik7CisJCWlmIChyZXQhPTIpCiAJCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJldCk7Ci0gICAgICAgIH0gd2hpbGUgKHhvayAhPSAxICk7CisJfSB3aGlsZSAoeG9rICE9IDEgKTsKIAl0LT54b2djPXhvZ2M7CiAKIAl0LT50dl9mcmVxICAgID0gbXQyMDMyX3NldF90dl9mcmVxOwogCXQtPnJhZGlvX2ZyZXEgPSBtdDIwMzJfc2V0X3JhZGlvX2ZyZXE7Ci0gICAgICAgIHJldHVybigxKTsKKwlyZXR1cm4oMSk7CiB9CiAKIHN0YXRpYyB2b2lkIG10MjA1MF9zZXRfYW50ZW5uYShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciBhbnRlbm5hKQpAQCAtNDI2LDcgKzQyNiw3IEBACiAJfQogCiAJcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1Ziw2KTsKLSAgICAgICAgaWYgKHJldCE9NikKKwlpZiAocmV0IT02KQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDYpXG4iLHJldCk7CiB9CiAKQEAgLTQzNywxMSArNDM3LDExIEBACiAKIAlpZiAodC0+c3RkICYgVjRMMl9TVERfNTI1XzYwKSB7CiAJCS8vIE5UU0MKLSAgICAgICAgICAgICAgICBpZjIgPSA0NTc1MCoxMDAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFBBTAotICAgICAgICAgICAgICAgIGlmMiA9IDM4OTAwKjEwMDA7Ci0gICAgICAgIH0KKwkJaWYyID0gNDU3NTAqMTAwMDsKKwl9IGVsc2UgeworCQkvLyBQQUwKKwkJaWYyID0gMzg5MDAqMTAwMDsKKwl9CiAJaWYgKFY0TDJfVFVORVJfRElHSVRBTF9UViA9PSB0LT5tb2RlKSB7CiAJCS8vIERWQiAocGlubmFjbGUgMzAwaSkKIAkJaWYyID0gMzYxNTAqMTAwMDsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAlpbnQgaWYyID0gdC0+cmFkaW9faWYyOwogCi0JbXQyMDUwX3NldF9pZl9mcmVxKGMsIGZyZXEqNjI1MDAsIGlmMik7CisJbXQyMDUwX3NldF9pZl9mcmVxKGMsIGZyZXEgKiAxMDAwIC8gMTYsIGlmMik7CiAJbXQyMDUwX3NldF9hbnRlbm5hKGMsIHJhZGlvX2FudGVubmEpOwogfQogCkBAIC00ODcsNyArNDg3LDcgQEAKIHsKIAlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAJY2hhciAqbmFtZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZbMjFdOworCXVuc2lnbmVkIGNoYXIgYnVmWzIxXTsKIAlpbnQgY29tcGFueV9jb2RlOwogCiAJbWVtc2V0KGJ1ZiwwLHNpemVvZihidWYpKTsKQEAgLTQ5NiwxNyArNDk2LDE3IEBACiAJdC0+c3RhbmRieSAgICA9IE5VTEw7CiAJbmFtZSA9ICJ1bmtub3duIjsKIAotICAgICAgICBpMmNfbWFzdGVyX3NlbmQoYyxidWYsMSk7Ci0gICAgICAgIGkyY19tYXN0ZXJfcmVjdihjLGJ1ZiwyMSk7Ci0gICAgICAgIGlmICh0dW5lcl9kZWJ1ZykgewotICAgICAgICAgICAgICAgIGludCBpOworCWkyY19tYXN0ZXJfc2VuZChjLGJ1ZiwxKTsKKwlpMmNfbWFzdGVyX3JlY3YoYyxidWYsMjEpOworCWlmICh0dW5lcl9kZWJ1ZykgeworCQlpbnQgaTsKIAkJdHVuZXJfZGJnKCJNVDIweHggaGV4ZHVtcDoiKTsKLSAgICAgICAgICAgICAgICBmb3IoaT0wO2k8MjE7aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIiAlMDJ4IixidWZbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChpKzEpJTgpPT0wKSBwcmludGsoIiAiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICB9CisJCWZvcihpPTA7aTwyMTtpKyspIHsKKwkJCXByaW50aygiICUwMngiLGJ1ZltpXSk7CisJCQlpZigoKGkrMSklOCk9PTApIHByaW50aygiICIpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CiAJY29tcGFueV9jb2RlID0gYnVmWzB4MTFdIDw8IDggfCBidWZbMHgxMl07CiAJdHVuZXJfaW5mbygibWljcm90dW5lOiBjb21wYW55Y29kZT0lMDR4IHBhcnQ9JTAyeCByZXY9JTAyeFxuIiwKIAkJICAgY29tcGFueV9jb2RlLGJ1ZlsweDEzXSxidWZbMHgxNF0pOwpAQCAtNTI1LDggKzUyNSw4IEBACiAJZGVmYXVsdDoKIAkJdHVuZXJfaW5mbygibWljcm90dW5lICVzIGZvdW5kLCBub3QgKHlldD8pIHN1cHBvcnRlZCwgc29ycnkgOi0vXG4iLAogCQkJICAgbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKwkJcmV0dXJuIDA7CisJfQogCiAJc3RybGNweShjLT5uYW1lLCBuYW1lLCBzaXplb2YoYy0+bmFtZSkpOwogCXR1bmVyX2luZm8oIm1pY3JvdHVuZSAlcyBmb3VuZCwgT0tcbiIsbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCmluZGV4IDcyYjcwZWIuLmRjYTNkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogCiAjaW5jbHVkZSAicmRzLmgiCiAKQEAgLTI0Niw3ICsyNDUsNyBAQAogCQlzLT53cl9pbmRleCA9IDA7CiAKIAlpZiAocy0+d3JfaW5kZXggPT0gcy0+cmRfaW5kZXgpIHsKLQkJcy0+cmRfaW5kZXgrKzsKKwkJcy0+cmRfaW5kZXggKz0gMzsKIAkJaWYgKHMtPnJkX2luZGV4ID49IHMtPmJ1Zl9zaXplKQogCQkJcy0+cmRfaW5kZXggPSAwOwogCX0gZWxzZQpAQCAtMzI4LDcgKzMyNyw3IEBACiAJc3RydWN0IHNhYTY1ODggKnMgPSAoc3RydWN0IHNhYTY1ODggKilkYXRhOwogCiAJc2FhNjU4OF9pMmNfcG9sbChzKTsKLQltb2RfdGltZXIoJnMtPnRpbWVyLCBqaWZmaWVzICsgSFogLyA1MCk7CS8qIDIwIG1zZWMgKi8KKwltb2RfdGltZXIoJnMtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCkpOwogfQogCiBzdGF0aWMgaW50IHNhYTY1ODhfY29uZmlndXJlKHN0cnVjdCBzYWE2NTg4ICpzKQpAQCAtNDM0LDkgKzQzMyw5IEBACiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgc2FhNjU4OF9hdHRhY2gpOwogI2Vsc2UKIAlzd2l0Y2ggKGFkYXAtPmlkKSB7Ci0JY2FzZSBJMkNfQUxHT19CSVQgfCBJMkNfSFdfQl9CVDg0ODoKLQljYXNlIEkyQ19BTEdPX0JJVCB8IEkyQ19IV19CX1JJVkE6Ci0JY2FzZSBJMkNfQUxHT19TQUE3MTM0OgorCWNhc2UgSTJDX0hXX0JfQlQ4NDg6CisJY2FzZSBJMkNfSFdfQl9SSVZBOgorCWNhc2UgSTJDX0hXX1NBQTcxMzQ6CiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgc2FhNjU4OF9hdHRhY2gpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYTg4MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYwpAQCAtMCwwICsxLDU5MyBAQAorLyoKKyAqIHNhYTcxMXggLSBQaGlsaXBzIFNBQTcxMXggdmlkZW8gZGVjb2RlciBkcml2ZXIgdmVyc2lvbiAwLjAuMQorICoKKyAqIFRvIGRvOiBOb3csIGl0IGhhbmRsZXMgb25seSBzYWE3MTEzLzcxMTQuIFNob3VsZCBiZSBpbXByb3ZlZCB0bworICogaGFuZGxlIGFsbCBQaGlsaXBzIHNhYTcxMXggZGV2aWNlcy4KKyAqCisgKiBCYXNlZCBvbiBzYWE3MTEzIGRyaXZlciBmcm9tIERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExeCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcywgSm9zZSBJZ25hY2lvIEdpam9uLCBKb2VyZyBIZWNrZW5iYWNoLCBNYXJrIE1jQ2xlbGxhbmQsIER3YWluZSBHYXJkZW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KKworI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKworc3RhdGljIGludCBkZWJ1ZyA9IDA7CitNT0RVTEVfUEFSTShkZWJ1ZywgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICIgU2V0IHRoZSBkZWZhdWx0IERlYnVnIGxldmVsLiAgRGVmYXVsdDogMCAoT2ZmKSAtICgwLTEpIik7CisKKworI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZyA+PSBudW0pIFwKKwkJCXByaW50ayhmb3JtYXQgLCAjI2FyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHNhYTcxMXggeworCXVuc2lnbmVkIGNoYXIgcmVnWzMyXTsKKworCWludCBub3JtOworCWludCBpbnB1dDsKKwlpbnQgZW5hYmxlOworCWludCBicmlnaHQ7CisJaW50IGNvbnRyYXN0OworCWludCBodWU7CisJaW50IHNhdDsKK307CisKKyNkZWZpbmUgICBJMkNfU0FBNzExMyAgICAgICAgMHg0QQorI2RlZmluZSAgIEkyQ19TQUE3MTE0ICAgICAgICAweDQyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitzYWE3MTF4X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAorCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCit7CisJc3RydWN0IHNhYTcxMXggKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludAorc2FhNzExeF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKKwkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQoreworCWludCByZXQgPSAtMTsKKwl1OCByZWc7CisKKwkvKiB0aGUgc2FhNzExeCBoYXMgYW4gYXV0b2luY3JlbWVudCBmdW5jdGlvbiwgdXNlIGl0IGlmCisJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLworCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KKwkJc3RydWN0IHNhYTcxMXggKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkJc3RydWN0IGkyY19tc2cgbXNnOworCQl1OCBibG9ja19kYXRhWzMyXTsKKworCQltc2cuYWRkciA9IGNsaWVudC0+YWRkcjsKKwkJbXNnLmZsYWdzID0gMDsKKwkJd2hpbGUgKGxlbiA+PSAyKSB7CisJCQltc2cuYnVmID0gKGNoYXIgKikgYmxvY2tfZGF0YTsKKwkJCW1zZy5sZW4gPSAwOworCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0gcmVnID0gZGF0YVswXTsKKwkJCWRvIHsKKwkJCQlibG9ja19kYXRhW21zZy5sZW4rK10gPQorCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKKwkJCQlsZW4gLT0gMjsKKwkJCQlkYXRhICs9IDI7CisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgorCQkJCSBtc2cubGVuIDwgMzIpOworCQkJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLAorCQkJCQkJJm1zZywgMSkpIDwgMCkKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KKwkJd2hpbGUgKGxlbiA+PSAyKSB7CisJCQlyZWcgPSAqZGF0YSsrOworCQkJaWYgKChyZXQgPSBzYWE3MTF4X3dyaXRlKGNsaWVudCwgcmVnLAorCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQkJYnJlYWs7CisJCQlsZW4gLT0gMjsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3NhYTcxMXhfaW5pdF9kZWNvZGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCSAgICAgIHN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQpCit7CisJcmV0dXJuIHNhYTcxMXhfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LT5kYXRhLCBpbml0LT5sZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludAorc2FhNzExeF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCit7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMXhfaTJjX2luaXRbXSA9IHsKKwkweDAwLCAweDAwLAkvKiBQSDcxMXhfQ0hJUF9WRVJTSU9OIDAwIC0gSUQgYnl0ZSAqLworCTB4MDEsIDB4MDgsCS8qIFBINzExeF9JTkNSRU1FTlRfREVMQVkgLSAoMSkgKDEpICgxKSAoMSkgSURFTDMgSURFTDIgSURFTEwxIElERUwwICovCisJMHgwMiwgMHhjMCwJLyogUEg3MTF4X0FOQUxPR19JTlBVVF9DT05UUl8xIC0gRlVTRTEgRlVTRTAgR1VETDEgR1VETDAgTU9ERTMgTU9ERTIgTU9ERTEgTU9ERTAgKi8KKwkweDAzLCAweDIzLAkvKiBQSDcxMXhfQU5BTE9HX0lOUFVUX0NPTlRSXzIgLSAoMSkgSExOUlMgVkJTTCBXUE9GRiBIT0xERyBHQUZJWCBHQUkyOCBHQUkxOCAqLworCTB4MDQsIDB4MDAsCS8qIFBINzExeF9BTkFMT0dfSU5QVVRfQ09OVFJfMyAtIEdBSTE3IEdBSTE2IEdBSTE1IEdBSTE0IEdBSTEzIEdBSTEyIEdBSTExIEdBSTEwICovCisJMHgwNSwgMHgwMCwJLyogUEg3MTF4X0FOQUxPR19JTlBVVF9DT05UUl80IC0gR0FJMjcgR0FJMjYgR0FJMjUgR0FJMjQgR0FJMjMgR0FJMjIgR0FJMjEgR0FJMjAgKi8KKwkweDA2LCAweGViLAkvKiBQSDcxMXhfSE9SSVpPTlRBTF9TWU5DX1NUQVJUIC0gSFNCNyBIU0I2IEhTQjUgSFNCNCBIU0IzIEhTQjIgSFNCMSBIU0IwICovCisJMHgwNywgMHhlMCwJLyogUEg3MTF4X0hPUklaT05UQUxfU1lOQ19TVE9QIC0gSFNTNyBIU1M2IEhTUzUgSFNTNCBIU1MzIEhTUzIgSFNTMSBIU1MwICovCisJMHgwOCwgMHg4OCwJLyogUEg3MTF4X1NZTkNfQ09OVFJPTCAtIEFVRkQgRlNFTCBGT0VUIEhUQzEgSFRDMCBIUExMIFZOT0kxIFZOT0kwICovCisJMHgwOSwgMHgwMCwJLyogUEg3MTF4X0xVTUlOQU5DRV9DT05UUk9MIC0gQllQUyBQUkVGIEJQU1MxIEJQU1MwIFZCTEIgVVBUQ1YgQVBFUjEgQVBFUjAgKi8KKwkweDBhLCAweDgwLAkvKiBQSDcxMXhfTFVNSU5BTkNFX0JSSUdIVE5FU1MgLSBCUklHNyBCUklHNiBCUklHNSBCUklHNCBCUklHMyBCUklHMiBCUklHMSBCUklHMCAqLworCTB4MGIsIDB4NDcsCS8qIFBINzExeF9MVU1JTkFOQ0VfQ09OVFJBU1QgLSBDT05UNyBDT05UNiBDT05UNSBDT05UNCBDT05UMyBDT05UMiBDT05UMSBDT05UMCAqLworCTB4MGMsIDB4NDAsCS8qIFBINzExeF9DSFJPTUFfU0FUVVJBVElPTiAtIFNBVE43IFNBVE42IFNBVE41IFNBVE40IFNBVE4zIFNBVE4yIFNBVE4xIFNBVE4wICovCisJMHgwZCwgMHgwMCwJLyogUEg3MTF4X0NIUk9NQV9IVUVfQ09OVFJPTCAtIEhVRUM3IEhVRUM2IEhVRUM1IEhVRUM0IEhVRUMzIEhVRUMyIEhVRUMxIEhVRUMwICovCisJMHgwZSwgMHgwMSwJLyogUEg3MTF4X0NIUk9NQV9DT05UUk9MIC0gQ0RUTyBDU1REMiBDU1REMSBDU1REMCBEQ0NGIEZDVEMgQ0hCVzEgQ0hCVzAgKi8KKwkweDBmLCAweGFhLAkvKiBQSDcxMXhfQ0hST01BX0dBSU5fQ09OVFJPTCAtIEFDR0MgQ0dBSU42IENHQUlONSBDR0FJTjQgQ0dBSU4zIENHQUlOMiBDR0FJTjEgQ0dBSU4wICovCisJMHgxMCwgMHgwMCwJLyogUEg3MTF4X0ZPUk1BVF9ERUxBWV9DT05UUk9MIC0gT0ZUUzEgT0ZUUzAgSERFTDEgSERFTDAgVlJMTiBZREVMMiBZREVMMSBZREVMMCAqLworCTB4MTEsIDB4MUMsCS8qIFBINzExeF9PVVRQVVRfQ09OVFJPTF8xIC0gR1BTVzEgQ005OSBHUFNXMCBITFNFTCBPRVlDIE9FUlQgVklQQiBDT0xPICovCisJMHgxMiwgMHgwMSwJLyogUEg3MTF4X09VVFBVVF9DT05UUk9MXzIgLSBSVFNFMTMgUlRTRTEyIFJUU0UxMSBSVFNFMTAgUlRTRTAzIFJUU0UwMiBSVFNFMDEgUlRTRTAwICovCisJMHgxMywgMHgwMCwJLyogUEg3MTF4X09VVFBVVF9DT05UUk9MXzMgLSBBRExTQiAoMSkgKDEpIE9MRFNCIEZJRFAgKDEpIEFPU0wxIEFPU0wwICovCisJMHgxNCwgMHgwMCwJLyogUkVTRVJWRUQgMTQgLSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgKDEpICovCisJMHgxNSwgMHgwMCwJLyogUEg3MTF4X1ZfR0FURTFfU1RBUlQgLSBWU1RBNyBWU1RBNiBWU1RBNSBWU1RBNCBWU1RBMyBWU1RBMiBWU1RBMSBWU1RBMCAqLworCTB4MTYsIDB4MDAsCS8qIFBINzExeF9WX0dBVEUxX1NUT1AgLSBWU1RPNyBWU1RPNiBWU1RPNSBWU1RPNCBWU1RPMyBWU1RPMiBWU1RPMSBWU1RPMCAqLworCTB4MTcsIDB4MDAsCS8qIFBINzExeF9WX0dBVEUxX01TQiAtICgxKSAoMSkgKDEpICgxKSAoMSkgKDEpIFZTVE84IFZTVEE4ICovCit9OworCitzdGF0aWMgaW50CitzYWE3MTF4X2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAorCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3sKKwlzdHJ1Y3Qgc2FhNzExeCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgMDoKKwljYXNlIERFQ09ERVJfSU5JVDoKKwl7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQgPSBhcmc7CisJCWlmIChOVUxMICE9IGluaXQpCisJCQlyZXR1cm4gc2FhNzExeF9pbml0X2RlY29kZXIoY2xpZW50LCBpbml0KTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKKwkJCXZkaS5kYXRhID0gc2FhNzExeF9pMmNfaW5pdDsKKwkJCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExeF9pMmNfaW5pdCk7CisJCQlyZXR1cm4gc2FhNzExeF9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKKwkJfQorCX0KKworCWNhc2UgREVDT0RFUl9EVU1QOgorCXsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDE2KSB7CisJCQlpbnQgajsKKworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDN4IiwgSTJDX05BTUUoY2xpZW50KSwgaSk7CisJCQlmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgeworCQkJCXByaW50aygiICUwMngiLAorCQkJCSAgICAgICBzYWE3MTF4X3JlYWQoY2xpZW50LCBpICsgaikpOworCQkJfQorCQkJcHJpbnRrKCJcbiIpOworCQl9CisJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgorCXsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCisJCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8CisJCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8CisJCQkgICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfAorCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAorCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CisJCWNhcC0+aW5wdXRzID0gODsKKwkJY2FwLT5vdXRwdXRzID0gMTsKKwl9CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisJCWludCBzdGF0dXM7CisJCWludCByZXM7CisKKwkJc3RhdHVzID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMHgxZik7CisJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXMgc3RhdHVzOiAweCUwMnhcbiIsIEkyQ19OQU1FKGNsaWVudCksCisJCQlzdGF0dXMpOworCQlyZXMgPSAwOworCQlpZiAoKHN0YXR1cyAmICgxIDw8IDYpKSA9PSAwKSB7CisJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKKwkJfQorCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKKwkJY2FzZSBWSURFT19NT0RFX05UU0M6CisJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX01PREVfUEFMOgorCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX01PREVfU0VDQU06CisJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfU0VDQU07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBWSURFT19NT0RFX0FVVE86CisJCQlpZiAoKHN0YXR1cyAmICgxIDw8IDUpKSAhPSAwKSB7CisJCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7CisJCQl9IGVsc2UgeworCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHN0YXR1cyAmICgxIDw8IDApKSAhPSAwKSB7CisJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7CisJCX0KKwkJKmlhcmcgPSByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9TRVRfR1BJTzoKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKwkJaWYgKDAgIT0gKmlhcmcpIHsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDExLAorCQkJCShkZWNvZGVyLT5yZWdbMHgxMV0gfCAweDgwKSk7CisJCX0gZWxzZSB7CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMSwKKwkJCQkoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHg3ZikpOworCQl9CisJCWJyZWFrOworCX0KKworCWNhc2UgREVDT0RFUl9TRVRfVkJJX0JZUEFTUzoKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKwkJaWYgKDAgIT0gKmlhcmcpIHsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDEzLAorCQkJCShkZWNvZGVyLT5yZWdbMHgxM10gJiAweGYwKSB8IDB4MGEpOworCQl9IGVsc2UgeworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTMsCisJCQkJKGRlY29kZXItPnJlZ1sweDEzXSAmIDB4ZjApKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIERFQ09ERVJfU0VUX05PUk06CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisKKwkJc3dpdGNoICgqaWFyZykgeworCisJCWNhc2UgVklERU9fTU9ERV9OVFNDOgorCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDgsCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHg0MCk7CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwZSwKKwkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBWSURFT19NT0RFX1BBTDoKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweDNmKSB8IDB4MDApOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGUsCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVklERU9fTU9ERV9TRUNBTToKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDNmKSB8IDB4MDApOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGUsCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpIHwgMHg1MCk7CisJCQlicmVhazsKKworCQljYXNlIFZJREVPX01PREVfQVVUTzoKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweDNmKSB8IDB4ODApOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGUsCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl9CisJCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKKwl9CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKwkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDkpIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgeworCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKKwkJCS8qIHNlbGVjdCBtb2RlICovCisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwMiwKKwkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDJdICYgMHhmMCkgfCBkZWNvZGVyLT5pbnB1dCk7CisJCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNC4uNyAqLworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDksCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA5XSAmIDB4N2YpIHwgKChkZWNvZGVyLT5pbnB1dCA+IDMpID8gMHg4MCA6IDApKTsKKwkJfQorCX0KKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKworCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLworCQlpZiAoKmlhcmcgIT0gMCkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisJCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7CisKKwkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKKwkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKKworCQkJLyogUko6IElmIG91dHB1dCBzaG91bGQgYmUgZGlzYWJsZWQgKGZvcgorCQkJICogcGxheWluZyB2aWRlb3MpLCB3ZSBhbHNvIG5lZWQgYSBvcGVuIFBMTC4KKwkJCSAqIFRoZSBpbnB1dCBpcyBzZXQgdG8gMCAod2hlcmUgbm8gaW5wdXQKKwkJCSAqIHNvdXJjZSBpcyBjb25uZWN0ZWQpLCBhbHRob3VnaCB0aGlzCisJCQkgKiBpcyBub3QgbmVjZXNzYXJ5LgorCQkJICoKKwkJCSAqIElmIG91dHB1dCBzaG91bGQgYmUgZW5hYmxlZCwgd2UgaGF2ZSB0bworCQkJICogcmV2ZXJzZSB0aGUgYWJvdmUuCisJCQkgKi8KKworCQkJaWYgKGRlY29kZXItPmVuYWJsZSkgeworCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDAyLAorCQkJCQkgICAgICAoZGVjb2Rlci0+CisJCQkJCSAgICAgICByZWdbMHgwMl0gJiAweGY4KSB8CisJCQkJCSAgICAgIGRlY29kZXItPmlucHV0KTsKKwkJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKKwkJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4ZmIpKTsKKwkJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMSwKKwkJCQkJICAgICAgKGRlY29kZXItPgorCQkJCQkgICAgICAgcmVnWzB4MTFdICYgMHhmMykgfCAweDBjKTsKKwkJCX0gZWxzZSB7CisJCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDIsCisJCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwMl0gJiAweGY4KSk7CisJCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDgsCisJCQkJCSAgICAgIChkZWNvZGVyLT4KKwkJCQkJICAgICAgIHJlZ1sweDA4XSAmIDB4ZmIpIHwgMHgwNCk7CisJCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTEsCisJCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgxMV0gJiAweGYzKSk7CisJCQl9CisJCX0KKwl9CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgorCXsKKwkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKKworCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgeworCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLworCQkJZGVjb2Rlci0+YnJpZ2h0ID0gcGljLT5icmlnaHRuZXNzOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGEsIGRlY29kZXItPmJyaWdodCA+PiA4KTsKKwkJfQorCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gcGljLT5jb250cmFzdCkgeworCQkJLyogV2Ugd2FudCAwIHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLworCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBwaWMtPmNvbnRyYXN0OworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGIsCisJCQkJICAgICAgZGVjb2Rlci0+Y29udHJhc3QgPj4gOSk7CisJCX0KKwkJaWYgKGRlY29kZXItPnNhdCAhPSBwaWMtPmNvbG91cikgeworCQkJLyogV2Ugd2FudCAwIHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLworCQkJZGVjb2Rlci0+c2F0ID0gcGljLT5jb2xvdXI7CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwYywgZGVjb2Rlci0+c2F0ID4+IDkpOworCQl9CisJCWlmIChkZWNvZGVyLT5odWUgIT0gcGljLT5odWUpIHsKKwkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCWRlY29kZXItPmh1ZSA9IHBpYy0+aHVlOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGQsCisJCQkJICAgICAgKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA4KTsKKwkJfQorCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEdlbmVyaWMgaTJjIHByb2JlCisgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCisgKi8KKworLyogc3RhbmRhcmQgaTJjIGluc21vZCBvcHRpb25zICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCUkyQ19TQUE3MTEzPj4xLCAgICAgICAgIC8qIHNhYTcxMTMgKi8KKwlJMkNfU0FBNzExND4+MSwgICAgICAgICAvKiBzYWE3MTE0ICovCisJSTJDX0NMSUVOVF9FTkQKK307CisKK0kyQ19DTElFTlRfSU5TTU9EOworCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMXg7CisKK3N0YXRpYyBpbnQKK3NhYTcxMXhfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAorCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQoreworCWludCBpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHNhYTcxMXggKmRlY29kZXI7CisJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7CisKKwlkcHJpbnRrKDEsCisJCUtFUk5fSU5GTworCQkic2FhNzExeC5jOiBkZXRlY3Rpbmcgc2FhNzExeCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAorCQlhZGRyZXNzIDw8IDEpOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExeDsKKwljbGllbnQtPmZsYWdzID0gSTJDX0NMSUVOVF9BTExPV19VU0U7CisJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAic2FhNzExeCIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJZGVjb2RlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTF4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGRlY29kZXIsIDAsIHNpemVvZihzdHJ1Y3Qgc2FhNzExeCkpOworCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJZGVjb2Rlci0+aW5wdXQgPSAwOworCWRlY29kZXItPmVuYWJsZSA9IDE7CisJZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7CisJZGVjb2Rlci0+Y29udHJhc3QgPSAzMjc2ODsKKwlkZWNvZGVyLT5odWUgPSAzMjc2ODsKKwlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKKworCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChpKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGRlY29kZXIpOworCQlyZXR1cm4gaTsKKwl9CisKKwl2ZGkuZGF0YSA9IHNhYTcxMXhfaTJjX2luaXQ7CisJdmRpLmxlbiA9IHNpemVvZihzYWE3MTF4X2kyY19pbml0KTsKKwlpID0gc2FhNzExeF9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKKwlpZiAoaSA8IDApIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoIGVycm9yOiBpbml0IHN0YXR1cyAlZFxuIiwKKwkJCUkyQ19OQU1FKGNsaWVudCksIGkpOworCX0gZWxzZSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fSU5GTworCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4IGF0IGFkZHJlc3MgMHgleFxuIiwKKwkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMXhfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCisJCQljbGllbnQtPmFkZHIgPDwgMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhYTcxMXhfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlkcHJpbnRrKDEsCisJCUtFUk5fSU5GTworCQkic2FhNzExeC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCisJCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7CisJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExeF9kZXRlY3RfY2xpZW50KTsKK30KKworc3RhdGljIGludAorc2FhNzExeF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGVycjsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikgeworCQlyZXR1cm4gZXJyOworCX0KKworCWtmcmVlKGRlY29kZXIpOworCWtmcmVlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExeCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJzYWE3MTF4IiwKKworCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTFYLAorCS5mbGFncyA9IEkyQ19ERl9OT1RJRlksCisKKwkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTF4X2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExeF9kZXRhY2hfY2xpZW50LAorCS5jb21tYW5kID0gc2FhNzExeF9jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQKK3NhYTcxMXhfaW5pdCAodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExeCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAorc2FhNzExeF9leGl0ICh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMXgpOworfQorCittb2R1bGVfaW5pdChzYWE3MTF4X2luaXQpOworbW9kdWxlX2V4aXQoc2FhNzExeF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0ZTg4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnCkBAIC0wLDAgKzEsNjggQEAKK2NvbmZpZyBWSURFT19TQUE3MTM0CisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzEzNCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgU09VTkQKKwlzZWxlY3QgVklERU9fQlVGCisJc2VsZWN0IFZJREVPX0lSCisJc2VsZWN0IFZJREVPX1RVTkVSCisJc2VsZWN0IENSQzMyCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyBTQUE3MTN4IGJhc2VkCisJICBUViBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzEzNC4KKworY29uZmlnIFZJREVPX1NBQTcxMzRfRFZCCisJdHJpc3RhdGUgIkRWQi9BVFNDIFN1cHBvcnQgZm9yIHNhYTcxMzQgYmFzZWQgVFYgY2FyZHMiCisJZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0ICYmIERWQl9DT1JFCisJc2VsZWN0IFZJREVPX0JVRl9EVkIKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMzQtZHZiLgorCisJICBZb3UgbXVzdCBhbHNvIHNlbGVjdCBvbmUgb3IgbW9yZSBEVkIgZGVtb2R1bGF0b3JzLgorCSAgSWYgeW91IGFyZSB1bnN1cmUgd2hpY2ggeW91IG5lZWQsIGNob29zZSBhbGwgb2YgdGhlbS4KKworY29uZmlnIFZJREVPX1NBQTcxMzRfRFZCX0FMTF9GUk9OVEVORFMKKwlib29sICJCdWlsZCBhbGwgc3VwcG9ydGVkIGZyb250ZW5kcyBmb3Igc2FhNzEzNCBiYXNlZCBUViBjYXJkcyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFZJREVPX1NBQTcxMzRfRFZCCisJc2VsZWN0IERWQl9NVDM1MgorCXNlbGVjdCBEVkJfVERBMTAwNFgKKwlzZWxlY3QgRFZCX05YVDIwMFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGJ1aWxkcyBzYWE3MTM0LWR2YiB3aXRoIGFsbCBjdXJyZW50bHkgc3VwcG9ydGVkIGZyb250ZW5kCisJICBkZW1vZHVsYXRvcnMuICBJZiB5b3Ugd2lzaCB0byB0d2VhayB5b3VyIGNvbmZpZ3VyYXRpb24sIGFuZAorCSAgb25seSBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSB0aGF0IHlvdSBuZWVkLCBjaG9vc2UgTiBoZXJlLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSwgY2hvb3NlIFkuCisKK2NvbmZpZyBWSURFT19TQUE3MTM0X0RWQl9NVDM1MgorCXRyaXN0YXRlICJaYXJsaW5rIE1UMzUyIERWQi1UIFN1cHBvcnQiCisJZGVmYXVsdCBtCisJZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0X0RWQiAmJiAhVklERU9fU0FBNzEzNF9EVkJfQUxMX0ZST05URU5EUworCXNlbGVjdCBEVkJfTVQzNTIKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgRFZCLVQgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBQaGlsaXBzIHNhYTcxMzQgY2hpcCBhbmQgdGhlIE1UMzUyIGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fU0FBNzEzNF9EVkJfVERBMTAwNFgKKwl0cmlzdGF0ZSAiUGhpbGxpcHMgVERBMTAwNDVIL1REQTEwMDQ2SCBEVkItVCBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNF9EVkIgJiYgIVZJREVPX1NBQTcxMzRfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX1REQTEwMDRYCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIERWQi1UIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAgYW5kIHRoZSBUREExMDA0NUgvVERBMTAwNDZIIGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fU0FBNzEzNF9EVkJfTlhUMjAwWAorCXRyaXN0YXRlICJOWFQyMDAyL05YVDIwMDQgQVRTQyBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNF9EVkIgJiYgIVZJREVPX1NBQTcxMzRfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX05YVDIwMFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBQaGlsaXBzIHNhYTcxMzQgY2hpcCBhbmQgdGhlIE5YVDIwMDIvTlhUMjAwNCBkZW1vZHVsYXRvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQppbmRleCBiNzc4ZmZkLi5lMGIyOGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCkBAIC0zLDE1ICszLDIyIEBACiAJCXNhYTcxMzQtb3NzLm8gc2FhNzEzNC10cy5vIHNhYTcxMzQtdHZhdWRpby5vCVwKIAkJc2FhNzEzNC12YmkubyBzYWE3MTM0LXZpZGVvLm8gc2FhNzEzNC1pbnB1dC5vCiAKLW9iai0kKENPTkZJR19WSURFT19TQUE3MTM0KSArPSBzYWE3MTM0Lm8gc2FhNzEzNC1lbXByZXNzLm8gc2FhNjc1MmhzLm8KK29iai0kKENPTkZJR19WSURFT19TQUE3MTM0KSArPSAgc2FhNzEzNC5vIHNhYTcxMzQtZW1wcmVzcy5vIFwKKwkJCQlzYWE2NzUyaHMubyBzYWE3MTM0LWFsc2Eubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCKSArPSBzYWE3MTM0LWR2Yi5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKK2lmbmVxICgkKENPTkZJR19WSURFT19CVUZfRFZCKSxuKQorIEVYVFJBX0NGTEFHUyArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCitlbmRpZgogaWZuZXEgKCQoQ09ORklHX0RWQl9NVDM1MiksbikKICBFWFRSQV9DRkxBR1MgKz0gLURIQVZFX01UMzUyPTEKIGVuZGlmCiBpZm5lcSAoJChDT05GSUdfRFZCX1REQTEwMDRYKSxuKQogIEVYVFJBX0NGTEFHUyArPSAtREhBVkVfVERBMTAwNFg9MQogZW5kaWYKK2lmbmVxICgkKENPTkZJR19EVkJfTlhUMjAwWCksbikKKyBFWFRSQV9DRkxBR1MgKz0gLURIQVZFX05YVDIwMFg9MQorZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYwppbmRleCAzODI5MTFjLi5jZGQxZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogCiAjZGVmaW5lIE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICAyNzAwMAogI2RlZmluZSBNUEVHX1ZJREVPX01BWF9CSVRSQVRFX01BWCAgICAgMjcwMDAKQEAgLTU3LDYgKzU2LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAgICAgICBjbGllbnQ7CiAJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAgcGFyYW1zOwogCWVudW0gc2FhNjc1MmhzX3ZpZGVvZm9ybWF0ICAgIHZpZGVvX2Zvcm1hdDsKKwl2NGwyX3N0ZF9pZCAgICAgICAgICAgICAgICAgICBzdGFuZGFyZDsKIH07CiAKIGVudW0gc2FhNjc1MmhzX2NvbW1hbmQgewpAQCAtNzQsNTggKzc0LDU4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB1OCBQQVRbXSA9IHsKLQkweGMyLCAvLyBpMmMgcmVnaXN0ZXIKLQkweDAwLCAvLyB0YWJsZSBudW1iZXIgZm9yIGVuY29kZXIKKwkweGMyLCAvKiBpMmMgcmVnaXN0ZXIgKi8KKwkweDAwLCAvKiB0YWJsZSBudW1iZXIgZm9yIGVuY29kZXIgKi8KIAotCTB4NDcsIC8vIHN5bmMKLQkweDQwLCAweDAwLCAvLyB0cmFuc3BvcnRfZXJyb3JfaW5kaWNhdG9yKDApLCBwYXlsb2FkX3VuaXRfc3RhcnQoMSksIHRyYW5zcG9ydF9wcmlvcml0eSgwKSwgcGlkKDApCi0JMHgxMCwgLy8gdHJhbnNwb3J0X3NjcmFtYmxpbmdfY29udHJvbCgwMCksIGFkYXB0YXRpb25fZmllbGRfY29udHJvbCgwMSksIGNvbnRpbnVpdHlfY291bnRlcigwKQorCTB4NDcsIC8qIHN5bmMgKi8KKwkweDQwLCAweDAwLCAvKiB0cmFuc3BvcnRfZXJyb3JfaW5kaWNhdG9yKDApLCBwYXlsb2FkX3VuaXRfc3RhcnQoMSksIHRyYW5zcG9ydF9wcmlvcml0eSgwKSwgcGlkKDApICovCisJMHgxMCwgLyogdHJhbnNwb3J0X3NjcmFtYmxpbmdfY29udHJvbCgwMCksIGFkYXB0YXRpb25fZmllbGRfY29udHJvbCgwMSksIGNvbnRpbnVpdHlfY291bnRlcigwKSAqLwogCi0JMHgwMCwgLy8gUFNJIHBvaW50ZXIgdG8gc3RhcnQgb2YgdGFibGUKKwkweDAwLCAvKiBQU0kgcG9pbnRlciB0byBzdGFydCBvZiB0YWJsZSAqLwogCi0JMHgwMCwgLy8gdGlkKDApCi0JMHhiMCwgMHgwZCwgLy8gc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yKDEpLCBzZWN0aW9uX2xlbmd0aCgxMykKKwkweDAwLCAvKiB0aWQoMCkgKi8KKwkweGIwLCAweDBkLCAvKiBzZWN0aW9uX3N5bnRheF9pbmRpY2F0b3IoMSksIHNlY3Rpb25fbGVuZ3RoKDEzKSAqLwogCi0JMHgwMCwgMHgwMSwgLy8gdHJhbnNwb3J0X3N0cmVhbV9pZCgxKQorCTB4MDAsIDB4MDEsIC8qIHRyYW5zcG9ydF9zdHJlYW1faWQoMSkgKi8KIAotCTB4YzEsIC8vIHZlcnNpb25fbnVtYmVyKDApLCBjdXJyZW50X25leHRfaW5kaWNhdG9yKDEpCisJMHhjMSwgLyogdmVyc2lvbl9udW1iZXIoMCksIGN1cnJlbnRfbmV4dF9pbmRpY2F0b3IoMSkgKi8KIAotCTB4MDAsIDB4MDAsIC8vIHNlY3Rpb25fbnVtYmVyKDApLCBsYXN0X3NlY3Rpb25fbnVtYmVyKDApCisJMHgwMCwgMHgwMCwgLyogc2VjdGlvbl9udW1iZXIoMCksIGxhc3Rfc2VjdGlvbl9udW1iZXIoMCkgKi8KIAotCTB4MDAsIDB4MDEsIC8vIHByb2dyYW1fbnVtYmVyKDEpCisJMHgwMCwgMHgwMSwgLyogcHJvZ3JhbV9udW1iZXIoMSkgKi8KIAotCTB4ZTAsIDB4MDAsIC8vIFBNVCBQSUQKKwkweGUwLCAweDAwLCAvKiBQTVQgUElEICovCiAKLQkweDAwLCAweDAwLCAweDAwLCAweDAwIC8vIENSQzMyCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiBDUkMzMiAqLwogfTsKIAogc3RhdGljIHU4IFBNVFtdID0gewotCTB4YzIsIC8vIGkyYyByZWdpc3RlcgotCTB4MDEsIC8vIHRhYmxlIG51bWJlciBmb3IgZW5jb2RlcgorCTB4YzIsIC8qIGkyYyByZWdpc3RlciAqLworCTB4MDEsIC8qIHRhYmxlIG51bWJlciBmb3IgZW5jb2RlciAqLwogCi0JMHg0NywgLy8gc3luYwotCTB4NDAsIDB4MDAsIC8vIHRyYW5zcG9ydF9lcnJvcl9pbmRpY2F0b3IoMCksIHBheWxvYWRfdW5pdF9zdGFydCgxKSwgdHJhbnNwb3J0X3ByaW9yaXR5KDApLCBwaWQKLQkweDEwLCAvLyB0cmFuc3BvcnRfc2NyYW1ibGluZ19jb250cm9sKDAwKSwgYWRhcHRhdGlvbl9maWVsZF9jb250cm9sKDAxKSwgY29udGludWl0eV9jb3VudGVyKDApCisJMHg0NywgLyogc3luYyAqLworCTB4NDAsIDB4MDAsIC8qIHRyYW5zcG9ydF9lcnJvcl9pbmRpY2F0b3IoMCksIHBheWxvYWRfdW5pdF9zdGFydCgxKSwgdHJhbnNwb3J0X3ByaW9yaXR5KDApLCBwaWQgKi8KKwkweDEwLCAvKiB0cmFuc3BvcnRfc2NyYW1ibGluZ19jb250cm9sKDAwKSwgYWRhcHRhdGlvbl9maWVsZF9jb250cm9sKDAxKSwgY29udGludWl0eV9jb3VudGVyKDApICovCiAKLQkweDAwLCAvLyBQU0kgcG9pbnRlciB0byBzdGFydCBvZiB0YWJsZQorCTB4MDAsIC8qIFBTSSBwb2ludGVyIHRvIHN0YXJ0IG9mIHRhYmxlICovCiAKLQkweDAyLCAvLyB0aWQoMikKLQkweGIwLCAweDE3LCAvLyBzZWN0aW9uX3N5bnRheF9pbmRpY2F0b3IoMSksIHNlY3Rpb25fbGVuZ3RoKDIzKQorCTB4MDIsIC8qIHRpZCgyKSAqLworCTB4YjAsIDB4MTcsIC8qIHNlY3Rpb25fc3ludGF4X2luZGljYXRvcigxKSwgc2VjdGlvbl9sZW5ndGgoMjMpICovCiAKLQkweDAwLCAweDAxLCAvLyBwcm9ncmFtX251bWJlcigxKQorCTB4MDAsIDB4MDEsIC8qIHByb2dyYW1fbnVtYmVyKDEpICovCiAKLQkweGMxLCAvLyB2ZXJzaW9uX251bWJlcigwKSwgY3VycmVudF9uZXh0X2luZGljYXRvcigxKQorCTB4YzEsIC8qIHZlcnNpb25fbnVtYmVyKDApLCBjdXJyZW50X25leHRfaW5kaWNhdG9yKDEpICovCiAKLQkweDAwLCAweDAwLCAvLyBzZWN0aW9uX251bWJlcigwKSwgbGFzdF9zZWN0aW9uX251bWJlcigwKQorCTB4MDAsIDB4MDAsIC8qIHNlY3Rpb25fbnVtYmVyKDApLCBsYXN0X3NlY3Rpb25fbnVtYmVyKDApICovCiAKLQkweGUwLCAweDAwLCAvLyBQQ1JfUElECisJMHhlMCwgMHgwMCwgLyogUENSX1BJRCAqLwogCi0JMHhmMCwgMHgwMCwgLy8gcHJvZ3JhbV9pbmZvX2xlbmd0aCgwKQorCTB4ZjAsIDB4MDAsIC8qIHByb2dyYW1faW5mb19sZW5ndGgoMCkgKi8KIAotCTB4MDIsIDB4ZTAsIDB4MDAsIDB4ZjAsIDB4MDAsIC8vIHZpZGVvIHN0cmVhbSB0eXBlKDIpLCBwaWQKLQkweDA0LCAweGUwLCAweDAwLCAweGYwLCAweDAwLCAvLyBhdWRpbyBzdHJlYW0gdHlwZSg0KSwgcGlkCisJMHgwMiwgMHhlMCwgMHgwMCwgMHhmMCwgMHgwMCwgLyogdmlkZW8gc3RyZWFtIHR5cGUoMiksIHBpZCAqLworCTB4MDQsIDB4ZTAsIDB4MDAsIDB4ZjAsIDB4MDAsIC8qIGF1ZGlvIHN0cmVhbSB0eXBlKDQpLCBwaWQgKi8KIAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgLy8gQ1JDMzIKKwkweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIENSQzMyICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiBwYXJhbV9kZWZhdWx0cyA9CkBAIC0xNjYsMzMgKzE2NiwzMyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlpbnQgc3RhdHVzID0gMDsKIAotCS8vIGV4ZWN1dGUgdGhlIGNvbW1hbmQKKwkvKiBleGVjdXRlIHRoZSBjb21tYW5kICovCiAJc3dpdGNoKGNvbW1hbmQpIHsKLSAgCWNhc2UgU0FBNjc1MkhTX0NPTU1BTkRfUkVTRVQ6Ci0gIAkJYnVmWzBdID0gMHgwMDsKKwljYXNlIFNBQTY3NTJIU19DT01NQU5EX1JFU0VUOgorCQlidWZbMF0gPSAweDAwOwogCQlicmVhazsKIAogCWNhc2UgU0FBNjc1MkhTX0NPTU1BTkRfU1RPUDoKLQkgIAlidWZbMF0gPSAweDAzOworCQlidWZbMF0gPSAweDAzOwogCQlicmVhazsKIAogCWNhc2UgU0FBNjc1MkhTX0NPTU1BTkRfU1RBUlQ6Ci0gIAkJYnVmWzBdID0gMHgwMjsKKwkJYnVmWzBdID0gMHgwMjsKIAkJYnJlYWs7CiAKIAljYXNlIFNBQTY3NTJIU19DT01NQU5EX1BBVVNFOgotICAJCWJ1ZlswXSA9IDB4MDQ7CisJCWJ1ZlswXSA9IDB4MDQ7CiAJCWJyZWFrOwogCiAJY2FzZSBTQUE2NzUySFNfQ09NTUFORF9SRUNPTkZJR1VSRToKIAkJYnVmWzBdID0gMHgwNTsKIAkJYnJlYWs7CiAKLSAgCWNhc2UgU0FBNjc1MkhTX0NPTU1BTkRfU0xFRVA6Ci0gIAkJYnVmWzBdID0gMHgwNjsKKwljYXNlIFNBQTY3NTJIU19DT01NQU5EX1NMRUVQOgorCQlidWZbMF0gPSAweDA2OwogCQlicmVhazsKIAotICAJY2FzZSBTQUE2NzUySFNfQ09NTUFORF9SRUNPTkZJR1VSRV9GT1JDRToKKwljYXNlIFNBQTY3NTJIU19DT01NQU5EX1JFQ09ORklHVVJFX0ZPUkNFOgogCQlidWZbMF0gPSAweDA3OwogCQlicmVhazsKIApAQCAtMjAwLDEzICsyMDAsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0gIAkvLyBzZXQgaXQgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIHNvCisJLyogc2V0IGl0IGFuZCB3YWl0IGZvciBpdCB0byBiZSBzbyAqLwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMSk7CiAJdGltZW91dCA9IGppZmZpZXMgKyBIWiAqIDM7CiAJZm9yICg7OykgewotCQkvLyBnZXQgdGhlIGN1cnJlbnQgc3RhdHVzCisJCS8qIGdldCB0aGUgY3VycmVudCBzdGF0dXMgKi8KIAkJYnVmWzBdID0gMHgxMDsKLQkgIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDEpOworCQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDEpOwogCQlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIDEpOwogCiAJCWlmICghKGJ1ZlswXSAmIDB4MjApKQpAQCAtMjE2LDYxICsyMTYsNTggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLy8gd2FpdCBhIGJpdAogCQltc2xlZXAoMTApOwogCX0KIAotCS8vIGRlbGF5IGEgYml0IHRvIGxldCBlbmNvZGVyIHNldHRsZQorCS8qIGRlbGF5IGEgYml0IHRvIGxldCBlbmNvZGVyIHNldHRsZSAqLwogCW1zbGVlcCg1MCk7CiAKLQkvLyBkb25lCi0gIAlyZXR1cm4gc3RhdHVzOworCXJldHVybiBzdGF0dXM7CiB9CiAKIAogc3RhdGljIGludCBzYWE2NzUyaHNfc2V0X2JpdHJhdGUoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwKIAkJCQkgc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiogcGFyYW1zKQogewotICAJdTggYnVmWzNdOworCXU4IGJ1ZlszXTsKIAotCS8vIHNldCB0aGUgYml0cmF0ZSBtb2RlCisJLyogc2V0IHRoZSBiaXRyYXRlIG1vZGUgKi8KIAlidWZbMF0gPSAweDcxOwogCWJ1ZlsxXSA9IChwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9PSBWNEwyX0JJVFJBVEVfVkJSKSA/IDAgOiAxOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CiAKLQkvLyBzZXQgdGhlIHZpZGVvIGJpdHJhdGUKKwkvKiBzZXQgdGhlIHZpZGVvIGJpdHJhdGUgKi8KIAlpZiAocGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX1ZCUikgewotCQkvLyBzZXQgdGhlIHRhcmdldCBiaXRyYXRlCisJCS8qIHNldCB0aGUgdGFyZ2V0IGJpdHJhdGUgKi8KIAkJYnVmWzBdID0gMHg4MDsKIAkgICAgCWJ1ZlsxXSA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgPj4gODsKLQkgIAlidWZbMl0gPSBwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ICYgMHhmZjsKKwkJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCAmIDB4ZmY7CiAJCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7CiAKLQkJLy8gc2V0IHRoZSBtYXggYml0cmF0ZQorCQkvKiBzZXQgdGhlIG1heCBiaXRyYXRlICovCiAJCWJ1ZlswXSA9IDB4ODE7CiAJICAgIAlidWZbMV0gPSBwYXJhbXMtPnZpX2JpdHJhdGUubWF4ID4+IDg7Ci0JICAJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlLm1heCAmIDB4ZmY7CisJCWJ1ZlsyXSA9IHBhcmFtcy0+dmlfYml0cmF0ZS5tYXggJiAweGZmOwogCQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOwogCX0gZWxzZSB7Ci0JCS8vIHNldCB0aGUgdGFyZ2V0IGJpdHJhdGUgKG5vIG1heCBiaXRyYXRlIGZvciBDQlIpCi0gIAkJYnVmWzBdID0gMHg4MTsKKwkJLyogc2V0IHRoZSB0YXJnZXQgYml0cmF0ZSAobm8gbWF4IGJpdHJhdGUgZm9yIENCUikgKi8KKwkJYnVmWzBdID0gMHg4MTsKIAkgICAgCWJ1ZlsxXSA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgPj4gODsKLQkgIAlidWZbMl0gPSBwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ICYgMHhmZjsKKwkJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCAmIDB4ZmY7CiAJCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7CiAJfQogCi0JLy8gc2V0IHRoZSBhdWRpbyBiaXRyYXRlCi0gCWJ1ZlswXSA9IDB4OTQ7CisJLyogc2V0IHRoZSBhdWRpbyBiaXRyYXRlICovCisJYnVmWzBdID0gMHg5NDsKIAlidWZbMV0gPSAoMjU2ID09IHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQpID8gMCA6IDE7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKIAotCS8vIHNldCB0aGUgdG90YWwgYml0cmF0ZQorCS8qIHNldCB0aGUgdG90YWwgYml0cmF0ZSAqLwogCWJ1ZlswXSA9IDB4YjE7Ci0gIAlidWZbMV0gPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0ID4+IDg7Ci0gIAlidWZbMl0gPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0ICYgMHhmZjsKKwlidWZbMV0gPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0ID4+IDg7CisJYnVmWzJdID0gcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCAmIDB4ZmY7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKTsKIAotCS8vIHJldHVybiBzdWNjZXNzCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3NiwzNiArMzczLDQzIEBACiAKIAloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQkvLyBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncworCS8qIFNldCB2aWRlbyBmb3JtYXQgLSBtdXN0IGJlIGRvbmUgZmlyc3QgYXMgaXQgcmVzZXRzIG90aGVyIHNldHRpbmdzICovCiAJYnVmWzBdID0gMHg0MTsKIAlidWZbMV0gPSBoLT52aWRlb19mb3JtYXQ7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKIAotICAgICAgICAvLyBzZXQgYml0cmF0ZQotICAgICAgICBzYWE2NzUyaHNfc2V0X2JpdHJhdGUoY2xpZW50LCAmaC0+cGFyYW1zKTsKKwkvKiBTZXQgbnVtYmVyIG9mIGxpbmVzIGluIGlucHV0IHNpZ25hbCAqLworCWJ1ZlswXSA9IDB4NDA7CisJYnVmWzFdID0gMHgwMDsKKwlpZiAoaC0+c3RhbmRhcmQgJiBWNEwyX1NURF81MjVfNjApCisJCWJ1ZlsxXSA9IDB4MDE7CisJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKIAotCS8vIFNldCBHT1Agc3RydWN0dXJlIHszLCAxM30KKwkvKiBzZXQgYml0cmF0ZSAqLworCXNhYTY3NTJoc19zZXRfYml0cmF0ZShjbGllbnQsICZoLT5wYXJhbXMpOworCisJLyogU2V0IEdPUCBzdHJ1Y3R1cmUgezMsIDEzfSAqLwogCWJ1ZlswXSA9IDB4NzI7CiAJYnVmWzFdID0gMHgwMzsKIAlidWZbMl0gPSAweDBEOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDMpOwogCi0gICAgCS8vIFNldCBtaW5pbXVtIFEtc2NhbGUgezR9CisgICAgCS8qIFNldCBtaW5pbXVtIFEtc2NhbGUgezR9ICovCiAJYnVmWzBdID0gMHg4MjsKIAlidWZbMV0gPSAweDA0OwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDIpOwogCi0gICAgCS8vIFNldCBtYXhpbXVtIFEtc2NhbGUgezEyfQorICAgIAkvKiBTZXQgbWF4aW11bSBRLXNjYWxlIHsxMn0gKi8KIAlidWZbMF0gPSAweDgzOwogCWJ1ZlsxXSA9IDB4MEM7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMik7CiAKLSAgICAJLy8gU2V0IE91dHB1dCBQcm90b2NvbAorICAgIAkvKiBTZXQgT3V0cHV0IFByb3RvY29sICovCiAJYnVmWzBdID0gMHhEMDsKIAlidWZbMV0gPSAweDgxOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDIpOwogCi0gICAgCS8vIFNldCB2aWRlbyBvdXRwdXQgc3RyZWFtIGZvcm1hdCB7VFN9CisgICAgCS8qIFNldCB2aWRlbyBvdXRwdXQgc3RyZWFtIGZvcm1hdCB7VFN9ICovCiAJYnVmWzBdID0gMHhCMDsKIAlidWZbMV0gPSAweDA1OwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDIpOwpAQCAtNDIxLDkgKzQyNSw5IEBACiAJbG9jYWxQQVRbc2l6ZW9mKFBBVCkgLSAxXSA9IGNyYyAmIDB4RkY7CiAKIAkvKiBjb21wdXRlIFBNVCAqLwotICAgICAgCW1lbWNweShsb2NhbFBNVCwgUE1ULCBzaXplb2YoUE1UKSk7Ci0gICAJbG9jYWxQTVRbM10gPSAweDQwIHwgKChoLT5wYXJhbXMudHNfcGlkX3BtdCA+PiA4KSAmIDB4MGYpOwotICAgCWxvY2FsUE1UWzRdID0gaC0+cGFyYW1zLnRzX3BpZF9wbXQgJiAweGZmOworCW1lbWNweShsb2NhbFBNVCwgUE1ULCBzaXplb2YoUE1UKSk7CisJbG9jYWxQTVRbM10gPSAweDQwIHwgKChoLT5wYXJhbXMudHNfcGlkX3BtdCA+PiA4KSAmIDB4MGYpOworCWxvY2FsUE1UWzRdID0gaC0+cGFyYW1zLnRzX3BpZF9wbXQgJiAweGZmOwogCWxvY2FsUE1UWzE1XSA9IDB4RTAgfCAoKGgtPnBhcmFtcy50c19waWRfcGNyID4+IDgpICYgMHgwRik7CiAJbG9jYWxQTVRbMTZdID0gaC0+cGFyYW1zLnRzX3BpZF9wY3IgJiAweEZGOwogCWxvY2FsUE1UWzIwXSA9IDB4RTAgfCAoKGgtPnBhcmFtcy50c19waWRfdmlkZW8gPj4gOCkgJiAweDBGKTsKQEAgLTQzNiwzOSArNDQwLDM5IEBACiAJbG9jYWxQTVRbc2l6ZW9mKFBNVCkgLSAyXSA9IChjcmMgPj4gOCkgJiAweEZGOwogCWxvY2FsUE1UW3NpemVvZihQTVQpIC0gMV0gPSBjcmMgJiAweEZGOwogCi0gICAgCS8vIFNldCBBdWRpbyBQSUQKKyAgICAJLyogU2V0IEF1ZGlvIFBJRCAqLwogCWJ1ZlswXSA9IDB4QzE7CiAJYnVmWzFdID0gKGgtPnBhcmFtcy50c19waWRfYXVkaW8gPj4gOCkgJiAweEZGOwogCWJ1ZlsyXSA9IGgtPnBhcmFtcy50c19waWRfYXVkaW8gJiAweEZGOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDMpOwogCi0JLy8gU2V0IFZpZGVvIFBJRAorCS8qIFNldCBWaWRlbyBQSUQgKi8KIAlidWZbMF0gPSAweEMwOwogCWJ1ZlsxXSA9IChoLT5wYXJhbXMudHNfcGlkX3ZpZGVvID4+IDgpICYgMHhGRjsKIAlidWZbMl0gPSBoLT5wYXJhbXMudHNfcGlkX3ZpZGVvICYgMHhGRjsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwzKTsKIAotIAkvLyBTZXQgUENSIFBJRAorCS8qIFNldCBQQ1IgUElEICovCiAJYnVmWzBdID0gMHhDNDsKIAlidWZbMV0gPSAoaC0+cGFyYW1zLnRzX3BpZF9wY3IgPj4gOCkgJiAweEZGOwogCWJ1ZlsyXSA9IGgtPnBhcmFtcy50c19waWRfcGNyICYgMHhGRjsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwzKTsKIAotCS8vIFNlbmQgU0kgdGFibGVzCisJLyogU2VuZCBTSSB0YWJsZXMgKi8KIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGxvY2FsUEFULHNpemVvZihQQVQpKTsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGxvY2FsUE1ULHNpemVvZihQTVQpKTsKIAotCS8vIG11dGUgdGhlbiB1bm11dGUgYXVkaW8uIFRoaXMgcmVtb3ZlcyBidXp6aW5nIGFydGVmYWN0cworCS8qIG11dGUgdGhlbiB1bm11dGUgYXVkaW8uIFRoaXMgcmVtb3ZlcyBidXp6aW5nIGFydGVmYWN0cyAqLwogCWJ1ZlswXSA9IDB4YTQ7CiAJYnVmWzFdID0gMTsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpOwotICAJYnVmWzFdID0gMDsKKwlidWZbMV0gPSAwOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CiAKLQkvLyBzdGFydCBpdCBnb2luZworCS8qIHN0YXJ0IGl0IGdvaW5nICovCiAJc2FhNjc1MmhzX2NoaXBfY29tbWFuZChjbGllbnQsIFNBQTY3NTJIU19DT01NQU5EX1NUQVJUKTsKIAotCS8vIHJlYWRvdXQgY3VycmVudCBzdGF0ZQorCS8qIHJlYWRvdXQgY3VycmVudCBzdGF0ZSAqLwogCWJ1ZlswXSA9IDB4RTE7CiAJYnVmWzFdID0gMHhBNzsKIAlidWZbMl0gPSAweEZFOwpAQCAtNDc3LDcgKzQ4MSw3IEBACiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA1KTsKIAlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYyLCA0KTsKIAotCS8vIGNoYW5nZSBhc3BlY3QgcmF0aW8KKwkvKiBjaGFuZ2UgYXNwZWN0IHJhdGlvICovCiAJYnVmWzBdID0gMHhFMDsKIAlidWZbMV0gPSAweEE3OwogCWJ1ZlsyXSA9IDB4RkU7CkBAIC00OTgsNyArNTAyLDYgQEAKIAlidWZbOF0gPSBidWYyWzNdOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgOSk7CiAKLSAgIAkvLyByZXR1cm4gc3VjY2VzcwogCXJldHVybiAwOwogfQogCkBAIC01MDYsMTYgKzUwOSwxOSBAQAogewogCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmg7CiAKLSAgICAgICAgcHJpbnRrKCJzYWE2NzUyaHM6IGNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKKwlwcmludGsoInNhYTY3NTJoczogY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOwogCi0gICAgICAgIGlmIChOVUxMID09IChoID0ga21hbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJaWYgKE5VTEwgPT0gKGggPSBrbWFsbG9jKHNpemVvZigqaCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGgsMCxzaXplb2YoKmgpKTsKIAloLT5jbGllbnQgPSBjbGllbnRfdGVtcGxhdGU7CiAJaC0+cGFyYW1zID0gcGFyYW1fZGVmYXVsdHM7CiAJaC0+Y2xpZW50LmFkYXB0ZXIgPSBhZGFwOwogCWgtPmNsaWVudC5hZGRyID0gYWRkcjsKIAorCS8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KKwloLT5zdGFuZGFyZCA9IDA7CisKIAlpMmNfc2V0X2NsaWVudGRhdGEoJmgtPmNsaWVudCwgaCk7CiAgICAgICAgIGkyY19hdHRhY2hfY2xpZW50KCZoLT5jbGllbnQpOwogCXJldHVybiAwOwpAQCAtNTQ1LDcgKzU1MSw3IEBACiAJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwogCWludCBlcnIgPSAwOwogCi0gICAgICAgIHN3aXRjaCAoY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZJRElPQ19TX01QRUdDT01QOgogCQlpZiAoTlVMTCA9PSBwYXJhbXMpIHsKIAkJCS8qIGFwcGx5IHNldHRpbmdzIGFuZCBzdGFydCBlbmNvZGVyICovCkBAIC01NTksNyArNTY1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBWSURJT0NfR19GTVQ6CiAJewotICAgICAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CisJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwogCiAJICAgaWYgKGgtPnZpZGVvX2Zvcm1hdCA9PSBTQUE2NzUySFNfVkZfVU5LTk9XTikKIAkJICAgaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOwpAQCAtNTc2LDYgKzU4Miw5IEBACiAJCXNhYTY3NTJoc19zZXRfc3Vic2FtcGxpbmcoY2xpZW50LCBmKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgVklESU9DX1NfU1REOgorCQloLT5zdGFuZGFyZCA9ICooKHY0bDJfc3RkX2lkICopIGFyZyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIG5vdGhpbmcgKi8KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzYzQyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwpAQCAtMCwwICsxLDEwNDcgQEAKKy8qCisgKiAgIFNBQTcxM3ggQUxTQSBzdXBwb3J0IGZvciBWNEwKKyAqCisgKgorICogICBDYXZlYXRzOgorICogICAgICAgIC0gVm9sdW1lIGRvZXNuJ3Qgd29yayAoaXQncyBhbHdheXMgYXQgbWF4KQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworI2luY2x1ZGUgInNhYTcxMzQuaCIKKyNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnICA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2Fsc2FdIik7CisKKy8qCisgKiBDb25maWd1cmF0aW9uIG1hY3JvcworICovCisKKy8qIGRlZmF1bHRzICovCisjZGVmaW5lIE1JWEVSX0FERFJfVFZUVU5FUgkwCisjZGVmaW5lIE1JWEVSX0FERFJfTElORTEJMQorI2RlZmluZSBNSVhFUl9BRERSX0xJTkUyCTIKKyNkZWZpbmUgTUlYRVJfQUREUl9MQVNUCQkyCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IHsxLCBbMSAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMH07CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgU0FBNzEzNCBjYXB0dXJlIGludGVyZmFjZShzKS4iKTsKKworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKSAgICBpZiAoZGVidWcpIFwKKyAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzL2Fsc2E6ICIgZm10LCBkZXYtPm5hbWUgLCAjIyBhcmcpCisKKy8qCisgKiBNYWluIGNoaXAgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IHNuZF9jYXJkX3NhYTcxMzQgeworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworCWludCBtaXhlcl92b2x1bWVbTUlYRVJfQUREUl9MQVNUKzFdWzJdOworCWludCBjYXB0dXJlX3NvdXJjZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKnNhYWRldjsKKworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCBpcnE7CisKKwlzcGlubG9ja190IGxvY2s7Cit9IHNuZF9jYXJkX3NhYTcxMzRfdDsKKworCisKKy8qCisgKiBQQ00gc3RydWN0dXJlCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc25kX2NhcmRfc2FhNzEzNF9wY20geworCXN0cnVjdCBzYWE3MTM0X2RldiAqc2FhZGV2OworCisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludCBwY21fc2l6ZTsJCS8qIGJ1ZmZlciBzaXplICovCisJdW5zaWduZWQgaW50IHBjbV9jb3VudDsJCS8qIGJ5dGVzIHBlciBwZXJpb2QgKi8KKwl1bnNpZ25lZCBpbnQgcGNtX2JwczsJCS8qIGJ5dGVzIHBlciBzZWNvbmQgKi8KKwlzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07Cit9IHNuZF9jYXJkX3NhYTcxMzRfcGNtX3Q7CisKK3N0YXRpYyBzbmRfY2FyZF90ICpzbmRfc2FhNzEzNF9jYXJkc1tTTkRSVl9DQVJEU107CisKKworLyoKKyAqIHNhYTcxMzQgRE1BIGF1ZGlvIHN0b3AKKyAqCisgKiAgIENhbGxlZCB3aGVuIHRoZSBjYXB0dXJlIGRldmljZSBpcyByZWxlYXNlZCBvciB0aGUgYnVmZmVyIG92ZXJmbG93cworICoKKyAqICAgLSBDb3BpZWQgdmVyYmF0aW0gZnJvbSBzYWE3MTM0LW9zcydzIGRzcF9kbWFfc3RvcC4gQ2FuIGJlIGRyb3BwZWQKKyAqICAgICBpZiB3ZSBqdXN0IHNoYXJlIGRzcF9kbWFfc3RvcCBhbmQgdXNlIGl0IGhlcmUKKyAqCisgKi8KKworc3RhdGljIHZvaWQgc2FhNzEzNF9kbWFfc3RvcChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKKworeworCWRldi0+ZG1hc291bmQuZG1hX2JsayAgICAgPSAtMTsKKwlkZXYtPmRtYXNvdW5kLmRtYV9ydW5uaW5nID0gMDsKKwlzYWE3MTM0X3NldF9kbWFiaXRzKGRldik7Cit9CisKKy8qCisgKiBzYWE3MTM0IERNQSBhdWRpbyBzdGFydAorICoKKyAqICAgQ2FsbGVkIHdoZW4gcHJlcGFyaW5nIHRoZSBjYXB0dXJlIGRldmljZSBmb3IgdXNlCisgKgorICogICAtIENvcGllZCB2ZXJiYXRpbSBmcm9tIHNhYTcxMzQtb3NzJ3MgZHNwX2RtYV9zdGFydC4gQ2FuIGJlIGRyb3BwZWQKKyAqICAgICBpZiB3ZSBqdXN0IHNoYXJlIGRzcF9kbWFfc3RhcnQgYW5kIHVzZSBpdCBoZXJlCisgKgorICovCisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfZG1hX3N0YXJ0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCWRldi0+ZG1hc291bmQuZG1hX2JsayAgICAgPSAwOworCWRldi0+ZG1hc291bmQuZG1hX3J1bm5pbmcgPSAxOworCXNhYTcxMzRfc2V0X2RtYWJpdHMoZGV2KTsKK30KKworLyoKKyAqIHNhYTcxMzQgYXVkaW8gRE1BIElSUSBoYW5kbGVyCisgKgorICogICBDYWxsZWQgd2hlbmV2ZXIgd2UgZ2V0IGFuIFNBQTcxMzRfSVJRX1JFUE9SVF9ET05FX1JBMyBpbnRlcnJ1cHQKKyAqICAgSGFuZGxlcyBzaGlmdGluZyBiZXR3ZWVuIHRoZSAyIGJ1ZmZlcnMsIG1hbmFnZXMgdGhlIHJlYWQgY291bnRlcnMsCisgKiAgYW5kIG5vdGlmaWVzIEFMU0Egd2hlbiBwZXJpb2RzIGVsYXBzZQorICoKKyAqICAgLSBNb3N0bHkgY29waWVkIGZyb20gc2FhNzEzNC1vc3MncyBzYWE3MTM0X2lycV9vc3NfZG9uZS4KKyAqCisgKi8KKwordm9pZCBzYWE3MTM0X2lycV9hbHNhX2RvbmUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgc3RhdHVzKQoreworCWludCBuZXh0X2JsaywgcmVnID0gMDsKKworCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJaWYgKFVOU0VUID09IGRldi0+ZG1hc291bmQuZG1hX2JsaykgeworCQlkcHJpbnRrKCJpcnE6IHJlY29yZGluZyBzdG9wcGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwlpZiAoMCAhPSAoc3RhdHVzICYgMHgwZjAwMDAwMCkpCisJCWRwcmludGsoImlycTogbG9zdCAlbGRcbiIsIChzdGF0dXMgPj4gMjQpICYgMHgwZik7CisJaWYgKDAgPT0gKHN0YXR1cyAmIDB4MTAwMDAwMDApKSB7CisJCS8qIG9kZCAqLworCQlpZiAoMCA9PSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICYgMHgwMSkpCisJCQlyZWcgPSBTQUE3MTM0X1JTX0JBMSg2KTsKKwl9IGVsc2UgeworCQkvKiBldmVuICovCisJCWlmICgxID09IChkZXYtPmRtYXNvdW5kLmRtYV9ibGsgJiAweDAxKSkKKwkJCXJlZyA9IFNBQTcxMzRfUlNfQkEyKDYpOworCX0KKwlpZiAoMCA9PSByZWcpIHsKKwkJZHByaW50aygiaXJxOiBmaWVsZCBvb3BzIFslc11cbiIsCisJCQkoc3RhdHVzICYgMHgxMDAwMDAwMCkgPyAiZXZlbiIgOiAib2RkIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ID49IGRldi0+ZG1hc291bmQuYmxrc2l6ZSAqIChkZXYtPmRtYXNvdW5kLmJsb2Nrcy0yKSkgeworCQlkcHJpbnRrKCJpcnE6IG92ZXJydW4gW2Z1bGw9JWQvJWRdIC0gQmxvY2tzIGluICVkXG4iLGRldi0+ZG1hc291bmQucmVhZF9jb3VudCwKKwkJCWRldi0+ZG1hc291bmQuYnVmc2l6ZSwgZGV2LT5kbWFzb3VuZC5ibG9ja3MpOworCQlzbmRfcGNtX3N0b3AoZGV2LT5kbWFzb3VuZC5zdWJzdHJlYW0sU05EUlZfUENNX1NUQVRFX1hSVU4pOworCQlzYWE3MTM0X2RtYV9zdG9wKGRldik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBuZXh0IGJsb2NrIGFkZHIgKi8KKwluZXh0X2JsayA9IChkZXYtPmRtYXNvdW5kLmRtYV9ibGsgKyAyKSAlIGRldi0+ZG1hc291bmQuYmxvY2tzOworCXNhYV93cml0ZWwocmVnLG5leHRfYmxrICogZGV2LT5kbWFzb3VuZC5ibGtzaXplKTsKKwlpZiAoZGVidWcgPiAyKQorCQlkcHJpbnRrKCJpcnE6IG9rLCAlcywgbmV4dF9ibGs9JWQsIGFkZHI9JXgsIGJsb2Nrcz0ldSwgc2l6ZT0ldSwgcmVhZD0ldVxuIiwKKwkJCShzdGF0dXMgJiAweDEwMDAwMDAwKSA/ICJldmVuIiA6ICJvZGQgIiwgbmV4dF9ibGssCisJCQluZXh0X2JsayAqIGRldi0+ZG1hc291bmQuYmxrc2l6ZSwgZGV2LT5kbWFzb3VuZC5ibG9ja3MsIGRldi0+ZG1hc291bmQuYmxrc2l6ZSwgZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50KTsKKworCS8qIHVwZGF0ZSBzdGF0dXMgJiB3YWtlIHdhaXRpbmcgcmVhZGVycyAqLworCWRldi0+ZG1hc291bmQuZG1hX2JsayA9IChkZXYtPmRtYXNvdW5kLmRtYV9ibGsgKyAxKSAlIGRldi0+ZG1hc291bmQuYmxvY2tzOworCWRldi0+ZG1hc291bmQucmVhZF9jb3VudCArPSBkZXYtPmRtYXNvdW5kLmJsa3NpemU7CisKKwlkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbiA9IHJlZzsKKworCWlmIChkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQgPj0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKGRldi0+ZG1hc291bmQuc3Vic3RyZWFtKSkgeworCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoZGV2LT5kbWFzb3VuZC5zdWJzdHJlYW0pOworCQlzcGluX2xvY2soJmRldi0+c2xvY2spOworCX0KKyBkb25lOgorCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKworfQorCisvKgorICogSVJRIHJlcXVlc3QgaGFuZGxlcgorICoKKyAqICAgUnVucyBhbG9uZyB3aXRoIHNhYTcxMzQncyBJUlEgaGFuZGxlciwgZGlzY2FyZHMgYW55dGhpbmcgdGhhdCBpc24ndAorICogICBETUEgc291bmQKKyAqCisgKi8KKworc3RhdGljIGlycXJldHVybl90IHNhYTcxMzRfYWxzYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IChzdHJ1Y3Qgc2FhNzEzNF9kZXYqKSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyByZXBvcnQsIHN0YXR1czsKKwlpbnQgbG9vcCwgaGFuZGxlZCA9IDA7CisKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykgeworCQlyZXBvcnQgPSBzYWFfcmVhZGwoU0FBNzEzNF9JUlFfUkVQT1JUKTsKKwkJc3RhdHVzID0gc2FhX3JlYWRsKFNBQTcxMzRfSVJRX1NUQVRVUyk7CisKKwkJaWYgKHJlcG9ydCAmIFNBQTcxMzRfSVJRX1JFUE9SVF9ET05FX1JBMykgeworCQkJaGFuZGxlZCA9IDE7CisJCQlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRX1JFUE9SVCxyZXBvcnQpOworCQkJc2FhNzEzNF9pcnFfYWxzYV9kb25lKGRldiwgc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGxvb3AgPT0gMTApIHsKKwkJZHByaW50aygiZXJyb3IhIGxvb3BpbmcgSVJRISIpOworCX0KKworb3V0OgorCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisvKgorICogQUxTQSBjYXB0dXJlIHRyaWdnZXIKKyAqCisgKiAgIC0gT25lIG9mIHRoZSBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzLgorICoKKyAqICAgQ2FsbGVkIHdoZW5ldmVyIGEgY2FwdHVyZSBpcyBzdGFydGVkIG9yIHN0b3BwZWQuIE11c3QgYmUgZGVmaW5lZCwKKyAqICAgYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSB3YW50IHRvIGRvIGhlcmUKKyAqCisgKi8KKworc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfdHJpZ2dlcihzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLAorCQkJCQkgIGludCBjbWQpCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqc2FhcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2PXNhYXBjbS0+c2FhZGV2OworCWludCBlcnIgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5zbG9jayk7CisgICAgICAgIGlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpIHsKKwkJLyogc3RhcnQgZG1hICovCisJCXNhYTcxMzRfZG1hX3N0YXJ0KGRldik7CisgICAgICAgIH0gZWxzZSBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApIHsKKwkJLyogc3RvcCBkbWEgKi8KKwkJc2FhNzEzNF9kbWFfc3RvcChkZXYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVyciA9IC1FSU5WQUw7CisgICAgICAgIH0KKwlzcGluX3VubG9ja19pcnEoJmRldi0+c2xvY2spOworCisgICAgICAgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBETUEgYnVmZmVyIGNvbmZpZworICoKKyAqICAgU2V0cyB0aGUgdmFsdWVzIHRoYXQgd2lsbCBsYXRlciBiZSB1c2VkIGFzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsCisgKiAgc2l6ZSBvZiB0aGUgZnJhZ21lbnRzLCBhbmQgdG90YWwgbnVtYmVyIG9mIGZyYWdtZW50cy4KKyAqICAgTXVzdCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBzdGFnZSwgYmVmb3JlIG1lbW9yeSBpcworICogIGFsbG9jYXRlZAorICoKKyAqICAgLSBDb3BpZWQgdmVyYmF0aW0gZnJvbSBzYWE3MTM0LW9zcy4gQ2FuIGJlIGRyb3BwZWQKKyAqICAgICBpZiB3ZSBqdXN0IHNoYXJlIGRzcF9idWZmZXJfY29uZiBmcm9tIE9TUy4KKyAqLworCitzdGF0aWMgaW50IGRzcF9idWZmZXJfY29uZihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IGJsa3NpemUsIGludCBibG9ja3MpCit7CisJaWYgKGJsa3NpemUgPCAweDEwMCkKKwkJYmxrc2l6ZSA9IDB4MTAwOworCWlmIChibGtzaXplID4gMHgxMDAwMCkKKwkJYmxrc2l6ZSA9IDB4MTAwMDA7CisKKwlpZiAoYmxvY2tzIDwgMikKKwkJYmxvY2tzID0gMjsKKwlpZiAoKGJsa3NpemUgKiBibG9ja3MpID4gMTAyNCoxMDI0KQorCQlibG9ja3MgPSAxMDI0KjEwMjQgLyBibGtzaXplOworCisJZGV2LT5kbWFzb3VuZC5ibG9ja3MgID0gYmxvY2tzOworCWRldi0+ZG1hc291bmQuYmxrc2l6ZSA9IGJsa3NpemU7CisJZGV2LT5kbWFzb3VuZC5idWZzaXplID0gYmxrc2l6ZSAqIGJsb2NrczsKKworCWRwcmludGsoImJ1ZmZlciBjb25maWc6ICVkIGJsb2NrcyAvICVkIGJ5dGVzLCAlZCBrQiB0b3RhbFxuIiwKKwkJYmxvY2tzLGJsa3NpemUsYmxrc2l6ZSAqIGJsb2NrcyAvIDEwMjQpOworCXJldHVybiAwOworfQorCisvKgorICogRE1BIGJ1ZmZlciBpbml0aWFsaXphdGlvbgorICoKKyAqICAgVXNlcyBWNEwgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgdGhlIERNQS4gU2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBpbgorICogIEFMU0EsIGJ1dCBJIHdhcyB1bmFibGUgdG8gdXNlIEFMU0EncyBvd24gRE1BLCBhbmQgaGFkIHRvIGZvcmNlIHRoZQorICogIHVzYWdlIG9mIFY0TCdzCisgKgorICogICAtIENvcGllZCB2ZXJiYXRpbSBmcm9tIHNhYTcxMzQtb3NzLiBDYW4gYmUgZHJvcHBlZAorICogICAgIGlmIHdlIGp1c3Qgc2hhcmUgZHNwX2J1ZmZlcl9pbml0IGZyb20gT1NTLgorICovCisKK3N0YXRpYyBpbnQgZHNwX2J1ZmZlcl9pbml0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCWludCBlcnI7CisKKwlpZiAoIWRldi0+ZG1hc291bmQuYnVmc2l6ZSkKKwkJQlVHKCk7CisJdmlkZW9idWZfZG1hX2luaXQoJmRldi0+ZG1hc291bmQuZG1hKTsKKwllcnIgPSB2aWRlb2J1Zl9kbWFfaW5pdF9rZXJuZWwoJmRldi0+ZG1hc291bmQuZG1hLCBQQ0lfRE1BX0ZST01ERVZJQ0UsCisJCQkJICAgICAgIChkZXYtPmRtYXNvdW5kLmJ1ZnNpemUgKyBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQpOworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFMU0EgUENNIHByZXBhcmF0aW9uCisgKgorICogICAtIE9uZSBvZiB0aGUgQUxTQSBjYXB0dXJlIGNhbGxiYWNrcy4KKyAqCisgKiAgIENhbGxlZCByaWdodCBhZnRlciB0aGUgY2FwdHVyZSBkZXZpY2UgaXMgb3BlbmVkLCB0aGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMKKyAqICB0aGUgYnVmZmVyIHVzaW5nIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZnVuY3Rpb25zLCBhbGxvY2F0ZXMgdGhlIG1lbW9yeSwKKyAqICBzZXRzIHVwIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCB0aGVuIHN0YXJ0cyB0aGUgRE1BLiBXaGVuIHRoaXMgZnVuY3Rpb24KKyAqICByZXR1cm5zLCB0aGUgYXVkaW8gc2hvdWxkIGJlIGZsb3dpbmcuCisgKgorICovCisKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgZXJyLCBic3dhcCwgc2lnbjsKKwl1MzIgZm10LCBjb250cm9sOworCXNuZF9jYXJkX3NhYTcxMzRfdCAqc2FhNzEzNCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldjsKKwlzbmRfY2FyZF9zYWE3MTM0X3BjbV90ICpzYWFwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGJwczsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgY291bnQ7CisKKwlzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKworCXNhYXBjbS0+c2FhZGV2LT5kbWFzb3VuZC5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJYnBzID0gcnVudGltZS0+cmF0ZSAqIHJ1bnRpbWUtPmNoYW5uZWxzOworCWJwcyAqPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpOworCWJwcyAvPSA4OworCWlmIChicHMgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2FhcGNtLT5wY21fYnBzID0gYnBzOworCXNhYXBjbS0+cGNtX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwlzYWFwY20tPnBjbV9jb3VudCA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCisKKwlkZXY9c2FhNzEzNC0+c2FhZGV2OworCisJZHNwX2J1ZmZlcl9jb25mKGRldixzYWFwY20tPnBjbV9jb3VudCwoc2FhcGNtLT5wY21fc2l6ZS9zYWFwY20tPnBjbV9jb3VudCkpOworCisJZXJyID0gZHNwX2J1ZmZlcl9pbml0KGRldik7CisJaWYgKDAgIT0gZXJyKQorCQlnb3RvIGZhaWwyOworCisJLyogcHJlcGFyZSBidWZmZXIgKi8KKwlpZiAoMCAhPSAoZXJyID0gdmlkZW9idWZfZG1hX3BjaV9tYXAoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQuZG1hKSkpCisJCXJldHVybiBlcnI7CisJaWYgKDAgIT0gKGVyciA9IHNhYTcxMzRfcGd0YWJsZV9hbGxvYyhkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCkpKQorCQlnb3RvIGZhaWwxOworCWlmICgwICE9IChlcnIgPSBzYWE3MTM0X3BndGFibGVfYnVpbGQoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQucHQsCisJCQkJCSAgICAgIGRldi0+ZG1hc291bmQuZG1hLnNnbGlzdCwKKwkJCQkJICAgICAgZGV2LT5kbWFzb3VuZC5kbWEuc2dsZW4sCisJCQkJCSAgICAgIDApKSkKKwkJZ290byBmYWlsMjsKKworCisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmZvcm1hdCkgeworCSAgY2FzZSBTTkRSVl9QQ01fRk9STUFUX1U4OgorCSAgY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgorCQlmbXQgPSAweDAwOworCQlicmVhazsKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9VMTZfTEU6CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfVTE2X0JFOgorCSAgY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkU6CisJCWZtdCA9IDB4MDE7CisJCWJyZWFrOworCSAgZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJcmV0dXJuIDE7CisJfQorCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOgorCQlzaWduID0gMTsKKwkJYnJlYWs7CisJICBkZWZhdWx0OgorCQlzaWduID0gMDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkU6CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOgorCQlic3dhcCA9IDE7IGJyZWFrOworCSAgZGVmYXVsdDoKKwkJYnN3YXAgPSAwOyBicmVhazsKKwl9CisKKwlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKKwkgIGNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQ6CisJCWlmICgxID09IHJ1bnRpbWUtPmNoYW5uZWxzKQorCQkJZm10IHw9ICgxIDw8IDMpOworCQlpZiAoMiA9PSBydW50aW1lLT5jaGFubmVscykKKwkJCWZtdCB8PSAoMyA8PCAzKTsKKwkJaWYgKHNpZ24pCisJCQlmbXQgfD0gMHgwNDsKKworCQlmbXQgfD0gKE1JWEVSX0FERFJfVFZUVU5FUiA9PSBkZXYtPmRtYXNvdW5kLmlucHV0KSA/IDB4YzAgOiAweDgwOworCQlzYWFfd3JpdGViKFNBQTcxMzRfTlVNX1NBTVBMRVMwLCAoKGRldi0+ZG1hc291bmQuYmxrc2l6ZSAtIDEpICYgMHgwMDAwZmYpKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X05VTV9TQU1QTEVTMSwgKChkZXYtPmRtYXNvdW5kLmJsa3NpemUgLSAxKSAmIDB4MDBmZjAwKSA+PiAgOCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9OVU1fU0FNUExFUzIsICgoZGV2LT5kbWFzb3VuZC5ibGtzaXplIC0gMSkgJiAweGZmMDAwMCkgPj4gMTYpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fRk9STUFUX0NUUkwsIGZtdCk7CisKKwkJYnJlYWs7CisJICBjYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgorCSAgY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKKwkJaWYgKDEgPT0gcnVudGltZS0+Y2hhbm5lbHMpCisJCQlmbXQgfD0gKDEgPDwgNCk7CisJCWlmICgyID09IHJ1bnRpbWUtPmNoYW5uZWxzKQorCQkJZm10IHw9ICgyIDw8IDQpOworCQlpZiAoIXNpZ24pCisJCQlmbXQgfD0gMHgwNDsKKwkJc2FhX3dyaXRlbChTQUE3MTMzX05VTV9TQU1QTEVTLCBkZXYtPmRtYXNvdW5kLmJsa3NpemUgLTEpOworCQlzYWFfd3JpdGVsKFNBQTcxMzNfQVVESU9fQ0hBTk5FTCwgMHg1NDMyMTAgfCAoZm10IDw8IDI0KSk7CisJCS8vc2FhX3dyaXRlbChTQUE3MTMzX0FVRElPX0NIQU5ORUwsIDB4NTQzMjEwKTsKKwkJYnJlYWs7CisJfQorCisJZHByaW50aygicmVjX3N0YXJ0OiBhZm10PSVkIGNoPSVkICA9PiAgZm10PTB4JXggc3dhcD0lY1xuIiwKKwkJcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgZm10LAorCQlic3dhcCA/ICdiJyA6ICctJyk7CisJLyogZG1hOiBzZXR1cCBjaGFubmVsIDYgKD0gQVVESU8pICovCisJY29udHJvbCA9IFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF8xNiB8CisJCVNBQTcxMzRfUlNfQ09OVFJPTF9NRSB8CisJCShkZXYtPmRtYXNvdW5kLnB0LmRtYSA+PiAxMik7CisJaWYgKGJzd2FwKQorCQljb250cm9sIHw9IFNBQTcxMzRfUlNfQ09OVFJPTF9CU1dBUDsKKworCS8qIEkgc2hvdWxkIGJlIGFibGUgdG8gdXNlIHJ1bnRpbWUtPmRtYV9hZGRyIGluIHRoZSBjb250cm9sCisJICAgYnl0ZSwgYnV0IGl0IGRvZXNuJ3Qgd29yay4gU28gSSBhbGxvY2F0ZSB0aGUgRE1BIHVzaW5nIHRoZQorCSAgIFY0TCBmdW5jdGlvbnMsIGFuZCBmb3JjZSBBTFNBIHRvIHVzZSB0aGF0IGFzIHRoZSBETUEgYXJlYSAqLworCisJcnVudGltZS0+ZG1hX2FyZWEgPSBkZXYtPmRtYXNvdW5kLmRtYS52bWFsbG9jOworCisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMSg2KSwwKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkEyKDYpLGRldi0+ZG1hc291bmQuYmxrc2l6ZSk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX1BJVENIKDYpLDApOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19DT05UUk9MKDYpLGNvbnRyb2wpOworCisJZGV2LT5kbWFzb3VuZC5yYXRlID0gcnVudGltZS0+cmF0ZTsKKworCXJldHVybiAwOworIGZhaWwyOgorCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLnB0KTsKKyBmYWlsMToKKwl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLmRtYSk7CisJcmV0dXJuIGVycjsKKworCit9CisKKy8qCisgKiBBTFNBIHBvaW50ZXIgZmV0Y2hpbmcKKyAqCisgKiAgIC0gT25lIG9mIHRoZSBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzLgorICoKKyAqICAgQ2FsbGVkIHdoZW5ldmVyIGEgcGVyaW9kIGVsYXBzZXMsIGl0IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IGhhcmR3YXJlCisgKiAgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4KKyAqICAgQWxzbyByZXNldHMgdGhlIHJlYWQgY291bnRlciB1c2VkIHRvIHByZXZlbnQgb3ZlcnJ1bnMKKyAqCisgKi8KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqc2FhcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2PXNhYXBjbS0+c2FhZGV2OworCisKKworCWlmIChkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQpIHsKKwkJZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ICAtPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwkJZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCArPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwkJaWYgKGRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgPT0gZGV2LT5kbWFzb3VuZC5idWZzaXplKQorCQkJZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCA9IDA7CisJfQorCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0KTsKK30KKworLyoKKyAqIEFMU0EgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGRlZmluaXRpb24KKyAqLworCitzdGF0aWMgc25kX3BjbV9oYXJkd2FyZV90IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZSA9Cit7CisJLmluZm8gPSAgICAgICAgICAgICAgICAgKFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBcCisJCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUgfCBcCisJCQkJU05EUlZfUENNX0ZNVEJJVF9TOCB8IFwKKwkJCQlTTkRSVl9QQ01fRk1UQklUX1U4IHwgXAorCQkJCVNORFJWX1BDTV9GTVRCSVRfVTE2X0xFIHwgXAorCQkJCVNORFJWX1BDTV9GTVRCSVRfVTE2X0JFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbiA9CQkzMjAwMCwKKwkucmF0ZV9tYXggPQkJNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9CQkxLAorCS5jaGFubmVsc19tYXggPQkJMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9CSgyNTYqMTAyNCksCisJLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKKwkucGVyaW9kX2J5dGVzX21heCA9CSgyNTYqMTAyNCksCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTEwMjQsCit9OworCitzdGF0aWMgdm9pZCBzbmRfY2FyZF9zYWE3MTM0X3J1bnRpbWVfZnJlZShzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSkKK3sKKwlzbmRfY2FyZF9zYWE3MTM0X3BjbV90ICpzYWFwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlrZnJlZShzYWFwY20pOworfQorCisKKy8qCisgKiBBTFNBIGhhcmR3YXJlIHBhcmFtcworICoKKyAqICAgLSBPbmUgb2YgdGhlIEFMU0EgY2FwdHVyZSBjYWxsYmFja3MuCisgKgorICogICBDYWxsZWQgb24gaW5pdGlhbGl6YXRpb24sIHJpZ2h0IGJlZm9yZSB0aGUgUENNIHByZXBhcmF0aW9uCisgKiAgIFVzdWFsbHkgdXNlZCBpbiBBTFNBIHRvIGFsbG9jYXRlIHRoZSBETUEsIGJ1dCBzaW5jZSB3ZSBkb24ndCB1c2UgdGhlCisgKiAgQUxTQSBETUEgaXQgZG9lcyBub3RoaW5nCisgKgorICovCisKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9od19wYXJhbXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKwkJCQkgICAgc25kX3BjbV9od19wYXJhbXNfdCAqIGh3X3BhcmFtcykKK3sKKworCXJldHVybiAwOworCisKK30KKworLyoKKyAqIEFMU0EgaGFyZHdhcmUgcmVsZWFzZQorICoKKyAqICAgLSBPbmUgb2YgdGhlIEFMU0EgY2FwdHVyZSBjYWxsYmFja3MuCisgKgorICogICBDYWxsZWQgYWZ0ZXIgY2xvc2luZyB0aGUgZGV2aWNlLCBidXQgYmVmb3JlIHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9jbG9zZQorICogICBVc3VhbGx5IHVzZWQgaW4gQUxTQSB0byBmcmVlIHRoZSBETUEsIGJ1dCBzaW5jZSB3ZSBkb24ndCB1c2UgdGhlCisgKiAgQUxTQSBETUEgSSdtIGFsbW9zdCBzdXJlIHRoaXMgaXNuJ3QgbmVjZXNzYXJ5LgorICoKKyAqLworCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfaHdfZnJlZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisvKgorICogRE1BIGJ1ZmZlciByZWxlYXNlCisgKgorICogICBDYWxsZWQgYWZ0ZXIgY2xvc2luZyB0aGUgZGV2aWNlLCBkdXJpbmcgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX2Nsb3NlCisgKgorICovCisKK3N0YXRpYyBpbnQgZHNwX2J1ZmZlcl9mcmVlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCWlmICghZGV2LT5kbWFzb3VuZC5ibGtzaXplKQorCQlCVUcoKTsKKworCXZpZGVvYnVmX2RtYV9mcmVlKCZkZXYtPmRtYXNvdW5kLmRtYSk7CisKKwlkZXYtPmRtYXNvdW5kLmJsb2NrcyAgPSAwOworCWRldi0+ZG1hc291bmQuYmxrc2l6ZSA9IDA7CisJZGV2LT5kbWFzb3VuZC5idWZzaXplID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogQUxTQSBjYXB0dXJlIGZpbmlzaAorICoKKyAqICAgLSBPbmUgb2YgdGhlIEFMU0EgY2FwdHVyZSBjYWxsYmFja3MuCisgKgorICogICBDYWxsZWQgYWZ0ZXIgY2xvc2luZyB0aGUgZGV2aWNlLiBJdCBzdG9wcyB0aGUgRE1BIGF1ZGlvIGFuZCByZWxlYXNlcworICogIHRoZSBidWZmZXJzCisgKgorICovCisKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX2Nsb3NlKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCit7CisJc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gY2hpcC0+c2FhZGV2OworCisJLyogdW5sb2NrIGJ1ZmZlciAqLworCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLnB0KTsKKwl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLmRtYSk7CisKKwlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFMU0EgY2FwdHVyZSBzdGFydAorICoKKyAqICAgLSBPbmUgb2YgdGhlIEFMU0EgY2FwdHVyZSBjYWxsYmFja3MuCisgKgorICogICBDYWxsZWQgd2hlbiBvcGVuaW5nIHRoZSBkZXZpY2UuIEl0IGNyZWF0ZXMgYW5kIHBvcHVsYXRlcyB0aGUgUENNCisgKiAgc3RydWN0dXJlCisgKgorICovCisKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfY2FyZF9zYWE3MTM0X3BjbV90ICpzYWFwY207CisJc25kX2NhcmRfc2FhNzEzNF90ICpzYWE3MTM0ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhNzEzNC0+c2FhZGV2OworCWludCBlcnI7CisKKwlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCisJZGV2LT5kbWFzb3VuZC5hZm10ICAgICAgICA9IFNORFJWX1BDTV9GT1JNQVRfVTg7CisJZGV2LT5kbWFzb3VuZC5jaGFubmVscyAgICA9IDI7CisJZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ICA9IDA7CisJZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCA9IDA7CisKKwl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKworCXNhYXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCpzYWFwY20pLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2FhcGNtID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNhYXBjbS0+c2FhZGV2PXNhYTcxMzQtPnNhYWRldjsKKworCXNwaW5fbG9ja19pbml0KCZzYWFwY20tPmxvY2spOworCisJc2FhcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gc2FhcGNtOworCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX3NhYTcxMzRfcnVudGltZV9mcmVlOworCXJ1bnRpbWUtPmh3ID0gc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlOworCisJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisvKgorICogQUxTQSBjYXB0dXJlIGNhbGxiYWNrcyBkZWZpbml0aW9uCisgKi8KKworc3RhdGljIHNuZF9wY21fb3BzX3Qgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX29wcyA9IHsKKwkub3BlbiA9CQkJc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0JCXNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPQkJc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CQlzbmRfY2FyZF9zYWE3MTM0X2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9CQlzbmRfY2FyZF9zYWE3MTM0X2h3X2ZyZWUsCisJLnByZXBhcmUgPQkJc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX3ByZXBhcmUsCisJLnRyaWdnZXIgPQkJc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIgPQkJc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX3BvaW50ZXIsCit9OworCisvKgorICogQUxTQSBQQ00gc2V0dXAKKyAqCisgKiAgIENhbGxlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgYm9hcmQuIFNldHMgdXAgdGhlIG5hbWUgYW5kIGhvb2tzIHVwCisgKiAgdGhlIGNhbGxiYWNrcworICoKKyAqLworCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfcGNtKHNuZF9jYXJkX3NhYTcxMzRfdCAqc2FhNzEzNCwgaW50IGRldmljZSkKK3sKKwlzbmRfcGNtX3QgKnBjbTsKKwlpbnQgZXJyOworCisJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhzYWE3MTM0LT5jYXJkLCAiU0FBNzEzNCBQQ00iLCBkZXZpY2UsIDAsIDEsICZwY20pKSA8IDApCisJCXJldHVybiBlcnI7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX29wcyk7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBzYWE3MTM0OworCXBjbS0+aW5mb19mbGFncyA9IDA7CisJc3RyY3B5KHBjbS0+bmFtZSwgIlNBQTcxMzQgUENNIik7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU0FBNzEzeF9WT0xVTUUoeG5hbWUsIHhpbmRleCwgYWRkcikgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGluZGV4LCBcCisgIC5pbmZvID0gc25kX3NhYTcxMzRfdm9sdW1lX2luZm8sIFwKKyAgLmdldCA9IHNuZF9zYWE3MTM0X3ZvbHVtZV9nZXQsIC5wdXQgPSBzbmRfc2FhNzEzNF92b2x1bWVfcHV0LCBcCisgIC5wcml2YXRlX3ZhbHVlID0gYWRkciB9CisKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfdm9sdW1lX2luZm8oc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX2luZm9fdCAqIHVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAyMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc2FhNzEzNF92b2x1bWVfZ2V0KHNuZF9rY29udHJvbF90ICoga2NvbnRyb2wsIHNuZF9jdGxfZWxlbV92YWx1ZV90ICogdWNvbnRyb2wpCit7CisJc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVswXTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVsxXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc2FhNzEzNF92b2x1bWVfcHV0KHNuZF9rY29udHJvbF90ICoga2NvbnRyb2wsIHNuZF9jdGxfZWxlbV92YWx1ZV90ICogdWNvbnRyb2wpCit7CisJc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoYW5nZSwgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCBsZWZ0LCByaWdodDsKKworCWxlZnQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpZiAobGVmdCA8IDApCisJCWxlZnQgPSAwOworCWlmIChsZWZ0ID4gMjApCisJCWxlZnQgPSAyMDsKKwlyaWdodCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCWlmIChyaWdodCA8IDApCisJCXJpZ2h0ID0gMDsKKwlpZiAocmlnaHQgPiAyMCkKKwkJcmlnaHQgPSAyMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCWNoYW5nZSA9IGNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVswXSAhPSBsZWZ0IHx8CisJCSBjaGlwLT5taXhlcl92b2x1bWVbYWRkcl1bMV0gIT0gcmlnaHQ7CisJY2hpcC0+bWl4ZXJfdm9sdW1lW2FkZHJdWzBdID0gbGVmdDsKKwljaGlwLT5taXhlcl92b2x1bWVbYWRkcl1bMV0gPSByaWdodDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworI2RlZmluZSBTQUE3MTN4X0NBUFNSQyh4bmFtZSwgeGluZGV4LCBhZGRyKSBcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4aW5kZXgsIFwKKyAgLmluZm8gPSBzbmRfc2FhNzEzNF9jYXBzcmNfaW5mbywgXAorICAuZ2V0ID0gc25kX3NhYTcxMzRfY2Fwc3JjX2dldCwgLnB1dCA9IHNuZF9zYWE3MTM0X2NhcHNyY19wdXQsIFwKKyAgLnByaXZhdGVfdmFsdWUgPSBhZGRyIH0KKworc3RhdGljIGludCBzbmRfc2FhNzEzNF9jYXBzcmNfaW5mbyhzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1faW5mb190ICogdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfY2Fwc3JjX2dldChzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKQoreworCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMF07CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5jYXB0dXJlX3NvdXJjZVthZGRyXVsxXTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfY2Fwc3JjX3B1dChzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKQoreworCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisJdTMyIGFuYWJhciwgeGJhcmluOworCWludCBhbmFsb2dfaW8sIHJhdGU7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CisKKwlkZXYgPSBjaGlwLT5zYWFkZXY7CisKKwlsZWZ0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOworCXJpZ2h0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJiAxOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5taXhlcl9sb2NrLCBmbGFncyk7CisKKwljaGFuZ2UgPSBjaGlwLT5jYXB0dXJlX3NvdXJjZVthZGRyXVswXSAhPSBsZWZ0IHx8CisJCSBjaGlwLT5jYXB0dXJlX3NvdXJjZVthZGRyXVsxXSAhPSByaWdodDsKKwljaGlwLT5jYXB0dXJlX3NvdXJjZVthZGRyXVswXSA9IGxlZnQ7CisJY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMV0gPSByaWdodDsKKwlkZXYtPmRtYXNvdW5kLmlucHV0PWFkZHI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCisKKwlpZiAoY2hhbmdlKSB7CisJICBzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKKworCSAgIGNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQ6CisJCXN3aXRjaCAoYWRkcikgeworCQkJY2FzZSBNSVhFUl9BRERSX1RWVFVORVI6CisJCQkJc2FhX2FuZG9yYihTQUE3MTM0X0FVRElPX0ZPUk1BVF9DVFJMLCAweGMwLCAweGMwKTsKKwkJCQlzYWFfYW5kb3JiKFNBQTcxMzRfU0lGX1NBTVBMRV9GUkVRLCAgIDB4MDMsIDB4MDApOworCQkJCWJyZWFrOworCQkJY2FzZSBNSVhFUl9BRERSX0xJTkUxOgorCQkJY2FzZSBNSVhFUl9BRERSX0xJTkUyOgorCQkJCWFuYWxvZ19pbyA9IChNSVhFUl9BRERSX0xJTkUxID09IGFkZHIpID8gMHgwMCA6IDB4MDg7CisJCQkJcmF0ZSA9ICgzMjAwMCA9PSBkZXYtPmRtYXNvdW5kLnJhdGUpID8gMHgwMSA6IDB4MDM7CisJCQkJc2FhX2FuZG9yYihTQUE3MTM0X0FOQUxPR19JT19TRUxFQ1QsICAweDA4LCBhbmFsb2dfaW8pOworCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9BVURJT19GT1JNQVRfQ1RSTCwgMHhjMCwgMHg4MCk7CisJCQkJc2FhX2FuZG9yYihTQUE3MTM0X1NJRl9TQU1QTEVfRlJFUSwgICAweDAzLCByYXRlKTsKKwkJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCSAgIGNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6CisJICAgY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKKwkJeGJhcmluID0gMHgwMzsgLy8gYWRjCisJCWFuYWJhciA9IDA7CisJCXN3aXRjaCAoYWRkcikgeworCQkJY2FzZSBNSVhFUl9BRERSX1RWVFVORVI6CisJCQkJeGJhcmluID0gMDsgLy8gRGVtb2R1bGF0b3IKKwkJCQlhbmFiYXIgPSAyOyAvLyBEQUNzCisJCQkJYnJlYWs7CisJCQljYXNlIE1JWEVSX0FERFJfTElORTE6CisJCQkJYW5hYmFyID0gMDsgIC8vIGF1eDEsIGF1eDEKKwkJCQlicmVhazsKKwkJCWNhc2UgTUlYRVJfQUREUl9MSU5FMjoKKwkJCQlhbmFiYXIgPSA5OyAgLy8gYXV4MiwgYXV4MgorCQkJCWJyZWFrOworCQl9CisKKwkgICAgCS8qIG91dHB1dCB4YmFyIGFsd2F5cyBtYWluIGNoYW5uZWwgKi8KKwkJc2FhX2RzcF93cml0ZWwoZGV2LCBTQUE3MTMzX0RJR0lUQUxfT1VUUFVUX1NFTDEsIDB4YmJiYjEwKTsKKworCQlpZiAobGVmdCB8fCByaWdodCkgeyAvLyBXZSd2ZSBnb3QgZGF0YSwgdHVybiB0aGUgaW5wdXQgb24KKwkJICBzYWFfZHNwX3dyaXRlbChkZXYsIFNBQTcxMzNfRElHSVRBTF9JTlBVVF9YQkFSMSwgeGJhcmluKTsKKwkJICBzYWFfd3JpdGVsKFNBQTcxMzNfQU5BTE9HX0lPX1NFTEVDVCwgYW5hYmFyKTsKKwkJfSBlbHNlIHsKKwkJICBzYWFfZHNwX3dyaXRlbChkZXYsIFNBQTcxMzNfRElHSVRBTF9JTlBVVF9YQkFSMSwgMCk7CisJCSAgc2FhX3dyaXRlbChTQUE3MTMzX0FOQUxPR19JT19TRUxFQ1QsIDApOworCQl9CisJCWJyZWFrOworCSAgfQorCX0KKworCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX3NhYTcxMzRfY29udHJvbHNbXSA9IHsKK1NBQTcxM3hfVk9MVU1FKCJWaWRlbyBWb2x1bWUiLCAwLCBNSVhFUl9BRERSX1RWVFVORVIpLAorU0FBNzEzeF9DQVBTUkMoIlZpZGVvIENhcHR1cmUgU3dpdGNoIiwgMCwgTUlYRVJfQUREUl9UVlRVTkVSKSwKK1NBQTcxM3hfVk9MVU1FKCJMaW5lIFZvbHVtZSIsIDEsIE1JWEVSX0FERFJfTElORTEpLAorU0FBNzEzeF9DQVBTUkMoIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCAxLCBNSVhFUl9BRERSX0xJTkUxKSwKK1NBQTcxM3hfVk9MVU1FKCJMaW5lIFZvbHVtZSIsIDIsIE1JWEVSX0FERFJfTElORTIpLAorU0FBNzEzeF9DQVBTUkMoIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCAyLCBNSVhFUl9BRERSX0xJTkUyKSwKK307CisKKy8qCisgKiBBTFNBIG1peGVyIHNldHVwCisgKgorICogICBDYWxsZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIGJvYXJkLiBTZXRzIHVwIHRoZSBuYW1lIGFuZCBob29rcyB1cAorICogIHRoZSBjYWxsYmFja3MKKyAqCisgKi8KKworc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X25ld19taXhlcihzbmRfY2FyZF9zYWE3MTM0X3QgKiBjaGlwKQoreworCXNuZF9jYXJkX3QgKmNhcmQgPSBjaGlwLT5jYXJkOworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGVycjsKKworCXNuZF9hc3NlcnQoY2hpcCAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlNBQTcxMzQgTWl4ZXIiKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfc2FhNzEzNF9jb250cm9scyk7IGlkeCsrKSB7CisJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfc2FhNzEzNF9jb250cm9sc1tpZHhdLCBjaGlwKSkpIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X2ZyZWUoc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X2Rldl9mcmVlKHNuZF9kZXZpY2VfdCAqZGV2aWNlKQoreworCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJcmV0dXJuIHNuZF9zYWE3MTM0X2ZyZWUoY2hpcCk7Cit9CisKKy8qCisgKiBBTFNBIGluaXRpYWxpemF0aW9uCisgKgorICogICBDYWxsZWQgYnkgc2FhNzEzNC1jb3JlLCBpdCBjcmVhdGVzIHRoZSBiYXNpYyBzdHJ1Y3R1cmVzIGFuZCByZWdpc3RlcnMKKyAqICB0aGUgQUxTQSBkZXZpY2VzCisgKgorICovCisKK2ludCBhbHNhX2NhcmRfc2FhNzEzNF9jcmVhdGUgKHN0cnVjdCBzYWE3MTM0X2RldiAqc2FhZGV2KQoreworCXN0YXRpYyBpbnQgZGV2OworCisJc25kX2NhcmRfdCAqY2FyZDsKKwlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXA7CisJaW50IGVycjsKKwlzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisJCS5kZXZfZnJlZSA9ICAgICBzbmRfc2FhNzEzNF9kZXZfZnJlZSwKKwl9OworCisKKwlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWVuYWJsZVtkZXZdKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU0FBNzEzNCIpOworCisJLyogQ2FyZCAiY3JlYXRpb24iICovCisKKwljaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hpcCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bWl4ZXJfbG9jayk7CisKKwljaGlwLT5zYWFkZXYgPSBzYWFkZXY7CisKKwljaGlwLT5jYXJkID0gY2FyZDsKKworCWNoaXAtPnBjaSA9IHNhYWRldi0+cGNpOworCWNoaXAtPmlycSA9IHNhYWRldi0+cGNpLT5pcnE7CisJY2hpcC0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHNhYWRldi0+cGNpLCAwKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHNhYWRldi0+cGNpLT5pcnEsIHNhYTcxMzRfYWxzYV9pcnEsCisJCQkJU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsIHNhYWRldi0+bmFtZSwgc2FhZGV2KTsKKworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBJUlEgJWQgZm9yIEFMU0FcbiIsCisJCQlzYWFkZXYtPm5hbWUsIHNhYWRldi0+cGNpLT5pcnEpOworCQlnb3RvIF9fbm9kZXY7CisJfQorCisJaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpKSA8IDApIHsKKwkJZ290byBfX25vZGV2OworCX0KKworCWlmICgoZXJyID0gc25kX2NhcmRfc2FhNzEzNF9uZXdfbWl4ZXIoY2hpcCkpIDwgMCkKKwkJZ290byBfX25vZGV2OworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9zYWE3MTM0X3BjbShjaGlwLCAwKSkgPCAwKQorCQlnb3RvIF9fbm9kZXY7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZjaGlwLT5wY2ktPmRldik7CisKKwkvKiBFbmQgb2YgImNyZWF0aW9uIiAqLworCisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlNBQTcxMzQiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHggaXJxICVkIiwKKwkJY2hpcC0+c2FhZGV2LT5uYW1lLCBjaGlwLT5pb2Jhc2UsIGNoaXAtPmlycSk7CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA9PSAwKSB7CisJCXNuZF9zYWE3MTM0X2NhcmRzW2Rldl0gPSBjYXJkOworCQlyZXR1cm4gMDsKKwl9CisKK19fbm9kZXY6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlrZnJlZShjaGlwKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogTW9kdWxlIGluaXRpYWxpemVyCisgKgorICogTG9vcHMgdGhyb3VnaCBwcmVzZW50IHNhYTcxMzQgY2FyZHMsIGFuZCBhc3NpZ25zIGFuIEFMU0EgZGV2aWNlCisgKiB0byBlYWNoIG9uZQorICoKKyAqLworCitzdGF0aWMgaW50IHNhYTcxMzRfYWxzYV9pbml0KHZvaWQpCit7CisgICAgICAgIHN0cnVjdCBzYWE3MTM0X2RldiAqc2FhZGV2ID0gTlVMTDsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCXByaW50ayhLRVJOX0lORk8gInNhYTcxMzQgQUxTQSBkcml2ZXIgZm9yIERNQSBzb3VuZCBsb2FkZWRcbiIpOworCisgICAgICAgIGxpc3RfZm9yX2VhY2gobGlzdCwmc2FhNzEzNF9kZXZsaXN0KSB7CisgICAgICAgICAgICAgICAgc2FhZGV2ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIGRldmxpc3QpOworCQlhbHNhX2NhcmRfc2FhNzEzNF9jcmVhdGUoc2FhZGV2KTsKKyAgICAgICAgfQorCisJaWYgKHNhYWRldiA9PSBOVUxMKQorCQlwcmludGsoS0VSTl9JTkZPICJzYWE3MTM0IEFMU0E6IG5vIHNhYTcxMzQgY2FyZHMgZm91bmRcbiIpOworCisJcmV0dXJuIDA7CisKK30KKworLyoKKyAqIE1vZHVsZSBkZXN0cnVjdG9yCisgKi8KKwordm9pZCBzYWE3MTM0X2Fsc2FfZXhpdCh2b2lkKQoreworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFNORFJWX0NBUkRTOyBpZHgrKykgeworCQlzbmRfY2FyZF9mcmVlKHNuZF9zYWE3MTM0X2NhcmRzW2lkeF0pOworCX0KKworCXByaW50ayhLRVJOX0lORk8gInNhYTcxMzQgQUxTQSBkcml2ZXIgZm9yIERNQSBzb3VuZCB1bmxvYWRlZFxuIik7CisKKwlyZXR1cm47Cit9CisKK21vZHVsZV9pbml0KHNhYTcxMzRfYWxzYV9pbml0KTsKK21vZHVsZV9leGl0KHNhYTcxMzRfYWxzYV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlJpY2FyZG8gQ2VycXVlaXJhIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCBhY2M3YTQzLi42NjNkMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTE5MSwxMCArMTkxLDE0IEBACiAJCQkuYW11eCA9IFRWLAogCQkJLnR2ICAgPSAxLAogCQl9LHsKLQkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwgICAgIC8qIENvbXBvc2l0ZSBzaWduYWwgb24gUy1WaWRlbyBpbnB1dCAqLwogCQkJLnZtdXggPSAwLAogCQkJLmFtdXggPSBMSU5FMiwKIAkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCS8qIENvbXBvc2l0ZSBpbnB1dCAqLworCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CiAJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAogCQkJLnZtdXggPSA4LAogCQkJLmFtdXggPSBMSU5FMiwKQEAgLTIxMDksOCArMjExMyw0MjMgQEAKIAkJCS5ncGlvID0gMHgwMSwKIAkJfSwKIAl9LAotfTsKKwlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA5Rk1dID0geworCQkvKiA8aHR0cDovL3R1bmVyLmJlaG9sZGVyLnJ1PiwgU2VyZ2V5IDxza2l2QG9yZWwucnU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA0MDkgRk0iLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCSAgLm5hbWUgPSBuYW1lX3R2LAorCQkJICAudm11eCA9IDMsCisJCQkgIC5hbXV4ID0gVFYsCisJCQkgIC50diAgID0gMSwKKwkJfSx7CisJCQkgIC5uYW1lID0gbmFtZV9jb21wMSwKKwkJCSAgLnZtdXggPSAxLAorCQkJICAuYW11eCA9IExJTkUxLAorCQl9LHsKKwkJCSAgLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCSAgLnZtdXggPSA4LAorCQkJICAuYW11eCA9IExJTkUxLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJICAubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkgIC5hbXV4ID0gTElORTIsCisgICAgCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfR09UVklFV183MTM1XSA9IHsKKwkJLyogTWlrZSBCYWlrb3YgPG1pa2VAYmFpa292LmNvbT4gKi8KKwkJLyogQW5kcmV5IEN2ZXRjb3YgPGF5czE0QHlhbmRleC5ydT4gKi8KKwkJLm5hbWUgICAgICAgICAgICA9ICJHb1RWaWV3IDcxMzUgUENJIiwKKwkJLmF1ZGlvX2Nsb2NrICAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgICA9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzayAgICAgICAgPSAweDAwMjAwMDAzLAorCQkuaW5wdXRzICAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDAyMDAwMDMsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3R2X21vbm8sCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDAwMjAwMDAzLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTEsCisJCQkuZ3BpbyA9IDB4MDAyMDAwMDMsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCQkuZ3BpbyA9IDB4MDAyMDAwMDMsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDAwMjAwMDAzLAorCQl9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMDIwMDAwMywKKwkJfSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX1BISUxJUFNfRVVST1BBXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBoaWxpcHMgRVVST1BBIFYzIHJlZmVyZW5jZSBkZXNpZ24iLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REMTMxNiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gMHg2MSwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgPSB7eworCQkJLm5hbWUgICA9IG5hbWVfdHYsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBUViwKKwkJCS50diAgICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggICA9IDAsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkNvbXBybyBWaWRlb21hdGUgRFZCLVQzMDAiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REMTMxNiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gMHg2MSwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgPSB7eworCQkJLm5hbWUgICA9IG5hbWVfdHYsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBUViwKKwkJCS50diAgICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkNvbXBybyBWaWRlb21hdGUgRFZCLVQyMDAiLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggICA9IDAsCisJCQkuYW11eCAgID0gTElORTEsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTEsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUlREX1ZGRzczNTBdID0geworCQkubmFtZQkJPSAiUlREIEVtYmVkZGVkIFRlY2hub2xvZ2llcyBWRkc3MzUwIiwKKwkJLmF1ZGlvX2Nsb2NrCT0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXRzCQk9IHt7CisJCQkubmFtZSAgID0gIkNvbXBvc2l0ZSAwIiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDEiLAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0seworCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMiIsCisJCQkudm11eCAgID0gMiwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gIkNvbXBvc2l0ZSAzIiwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiUy1WaWRlbyAwIiwKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiUy1WaWRlbyAxIiwKKwkJCS52bXV4ICAgPSA5LAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9fSwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0VNUFJFU1MsCisJCS52aWRlb19vdXQgICAgICA9IENDSVI2NTYsCisJCS52aWRfcG9ydF9vcHRzICA9ICggU0VUX1RfQ09ERV9QT0xBUklUWV9OT05fSU5WRVJURUQgfAorCQkJCSAgICBTRVRfQ0xPQ0tfTk9UX0RFTEFZRUQgfAorCQkJCSAgICBTRVRfQ0xPQ0tfSU5WRVJURUQgfAorCQkJCSAgICBTRVRfVlNZTkNfT0ZGICksCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9SVERfVkZHNzMzMF0gPSB7CisJCS5uYW1lCQk9ICJSVEQgRW1iZWRkZWQgVGVjaG5vbG9naWVzIFZGRzczMzAiLAorCQkuYXVkaW9fY2xvY2sJPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dHMJCT0ge3sKKwkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDAiLAorCQkJLnZtdXggICA9IDAsCisJCQkuYW11eCAgID0gTElORTEsCisJCX0seworCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMSIsCisJCQkudm11eCAgID0gMSwKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSAgID0gIkNvbXBvc2l0ZSAyIiwKKwkJCS52bXV4ICAgPSAyLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDMiLAorCQkJLnZtdXggICA9IDMsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0seworCQkJLm5hbWUgICA9ICJTLVZpZGVvIDAiLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTEsCisJCX0seworCQkJLm5hbWUgICA9ICJTLVZpZGVvIDEiLAorCQkJLnZtdXggICA9IDksCisJCQkuYW11eCAgID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JMl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlUViBQbGF0aW51bSBNaW5pMiIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwgICAgIC8qIENvbXBvc2l0ZSBzaWduYWwgb24gUy1WaWRlbyBpbnB1dCAqLworCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCS8qIENvbXBvc2l0ZSBpbnB1dCAqLworCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQVZFUlRWSERfQTE4MF0gPSB7CisJCS8qIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QG0xay5uZXQ+CisJCSAqIFVzZXMgQWxwcyBFbGVjdHJpYyBUREhVMiwgY29udGFpbmluZyBOWFQyMDA0IEFUU0MgRGVjb2RlcgorCQkgKiBBRkFJSywgdGhlcmUgaXMgbm8gYW5hbG9nIGRlbW9kLCB0aHVzLAorCQkgKiBubyBzdXBwb3J0IGZvciBhbmFsb2cgdGVsZXZpc2lvbi4KKwkJICovCisJCS5uYW1lICAgICAgICAgICA9ICJBVmVyTWVkaWEgQVZlclRWSEQgTUNFIEExODAiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9NT05TVEVSVFZfTU9CSUxFXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlNLTmV0IE1vbnN0ZXJUViBNb2JpbGUiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKworCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJICAubmFtZSA9IG5hbWVfdHYsCisJCQkgIC52bXV4ID0gMSwKKwkJCSAgLmFtdXggPSBUViwKKwkJCSAgLnR2ICAgPSAxLAorCQl9LHsKKwkJCSAgLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJICAudm11eCA9IDMsCisJCQkgIC5hbXV4ID0gTElORTEsCisJCX0seworCQkJICAubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJICAudm11eCA9IDYsCisJCQkgIC5hbXV4ID0gTElORTEsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgMTEwaSAoc2FhNzEzMykiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDA4MDIwMDAwMCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCSAgLm5hbWUgPSBuYW1lX3R2LAorCQkJICAudm11eCA9IDQsCisJCQkgIC5hbXV4ID0gVFYsCisJCQkgIC50diAgID0gMSwKKwkJfSx7CisJCQkgIC5uYW1lID0gbmFtZV9jb21wMSwKKwkJCSAgLnZtdXggPSAxLAorCQkJICAuYW11eCA9IExJTkUyLAorCQl9LHsKKwkJCSAgLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCSAgLnZtdXggPSA4LAorCQkJICAuYW11eCA9IExJTkUyLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJICAubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkgIC5hbXV4ID0gTElORTEsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUxdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQVNVU1RlSyBQNzEzMSBEdWFsIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5ncGlvbWFzawk9IDEgPDwgMjEsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAyMDAwMDAsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9TRUROQV9QQ19UVl9DQVJEQlVTXSA9IHsKKwkJLyogUGF1bCBUb20gWmFsYWMgPHB6YWxhY0BnbWFpbC5jb20+ICovCisJCS8qIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiU2VkbmEvTXVjaFRWIFBDIFRWIENhcmRidXMgVFYvUmFkaW8gKElUTzI1IFJldjoyQikiLAorCQkJCS8qIFNlZG5hL011Y2hUViAoT0VNKSBDYXJkYnVzIFRWIFR1bmVyICovCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4ZTg4MGMwLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDYsCisJCQkuYW11eCA9IExJTkUxLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0FTVVNURUtfRElHSU1BVFJJWF9UVl0gPSB7CisJCS8qICJDeXJpbCBMYWNvdXggKFlhY2spIiA8Y2xhY291eEBpZmVlbGdvb2Qub3JnPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQVNVUyBEaWdpbWF0cml4IFRWIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GUTEyMTZNRSwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBoaWxpcHMgVGlnZXIgcmVmZXJlbmNlIGRlc2lnbiIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwl9LAorfTsKIAogY29uc3QgdW5zaWduZWQgaW50IHNhYTcxMzRfYmNvdW50ID0gQVJSQVlfU0laRShzYWE3MTM0X2JvYXJkcyk7CiAKQEAgLTIxNDUsMTkgKzI1NjQsMTkgQEAKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAotCQkuc3VidmVuZG9yICAgID0gMHgxNTNCLAorCQkuc3VidmVuZG9yICAgID0gMHgxNTNiLAogCQkuc3ViZGV2aWNlICAgID0gMHgxMTQyLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9DSU5FUkdZNDAwLAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCi0JCS5zdWJ2ZW5kb3IgICAgPSAweDE1M0IsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE1M2IsCiAJCS5zdWJkZXZpY2UgICAgPSAweDExNDMsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDAsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKLQkJLnN1YnZlbmRvciAgICA9IDB4MTUzQiwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTUzYiwKIAkJLnN1YmRldmljZSAgICA9IDB4MTE1OCwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQ0lORVJHWTYwMF9NSzMsCiAJfSx7CkBAIC0yMTkzLDYgKzI2MTIsMTggQEAKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxNGMwLAorCQkuc3ViZGV2aWNlICAgID0gMHgxMjEyLCAvKiBtaW5pcGNpLCBMUjEyMTIgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JMiwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHg0ZTQyLAorCQkuc3ViZGV2aWNlICAgID0gMHgwMjEyLCAvKiBPRU0gbWluaXBjaSwgTFIyMTIgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDUxNjgsCS8qIEFuaW1hdGlvbiBUZWNobm9sb2dpZXMgKExpZmVWaWV3KSAqLwogCQkuc3ViZGV2aWNlICAgID0gMHgwMjE0LCAvKiBTdGFuZGFyZCBQQ0ksIExSMjE0V0YgKi8KIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTSwKQEAgLTIzNjksNyArMjgwMCw3IEBACiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKLQkJLnN1YnZlbmRvciAgICA9IDB4MTUzQiwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTUzYiwKIAkJLnN1YmRldmljZSAgICA9IDB4MTE1MiwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQ0lORVJHWTIwMCwKIAl9LHsKQEAgLTI0MzQsMTMgKzI4NjUsMTggQEAKIAkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKIAkJLnN1YmRldmljZSAgICA9IDB4MDM1MCwJCS8qIFBDSSB2ZXJzaW9uICovCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX1RWLAotCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKIAkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKIAkJLnN1YmRldmljZSAgICA9IDB4MDM3MCwJCS8qIGNhcmRidXMgdmVyc2lvbiAqLwogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9UViwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxNDIxLAorCQkuc3ViZGV2aWNlICAgID0gMHgxMzcwLCAgICAgICAgLyogY2FyZGJ1cyB2ZXJzaW9uICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX1RWLAogCiAJfSx7ICAgICAvKiBUeXBob29uIERWQi1UIER1byBEaWdpdGFsL0FuYWxvZyBDYXJkYnVzICovCiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCkBAIC0yNDU5LDkgKzI4OTUsODEgQEAKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAogCQkuc3VidmVuZG9yICAgID0gMHgxMDQzLAogCQkuc3ViZGV2aWNlICAgID0gMHgwMjEwLAkJLyogbWluaSBwY2kgUEFML1NFQ0FNIHZlcnNpb24gKi8KLQkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZfRElHSU1BVFJJWCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVNVU1RFS19ESUdJTUFUUklYX1RWLAogCiAJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDAwMCwgLyogSXQgc2hvdWxkbid0IGJyZWFrIGFueXRoaW5nLCBzaW5jZSBzdWJkZXZpY2UgaWQgc2VlbXMgdW5pcXVlICovCisJCS5zdWJkZXZpY2UgICAgPSAweDQwOTEsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDlGTSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHg1NDU2LCAvKiBHb1RWaWV3ICovCisJCS5zdWJkZXZpY2UgICAgPSAweDcxMzUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0dPVFZJRVdfNzEzNSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuc3ViZGV2aWNlICAgID0gMHgyMDA0LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yICAgID0gMHgxODViLAorCQkuc3ViZGV2aWNlICAgID0gMHhjOTAwLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDAsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTg1YiwKKwkJLnN1YmRldmljZSAgICA9IDB4YzkwMSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0MzUsCisJCS5zdWJkZXZpY2UgICAgPSAweDczNTAsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1JURF9WRkc3MzUwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0MzUsCisJCS5zdWJkZXZpY2UgICAgPSAweDczMzAsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1JURF9WRkc3MzMwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsCisJCS5zdWJkZXZpY2UgICAgPSAweDEwNDQsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BVkVSVFZIRF9BMTgwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDExMzEsCisJCS5zdWJkZXZpY2UgICAgPSAweDRlZTksCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX01PTlNURVJUVl9NT0JJTEUsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTFiZCwKKwkJLnN1YmRldmljZSAgICA9IDB4MDAyZSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDEwNDMsCisJCS5zdWJkZXZpY2UgICAgPSAweDQ4NjIsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuc3ViZGV2aWNlICAgID0gMHgyMDE4LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSLAorCX0sewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC0yNTMwLDkgKzMwMzgsMTAgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVklERU8yMDAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlWSURFTzMwMDA6Ci0JCWRldi0+aGFzX3JlbW90ZSA9IDE7CisJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87CiAJCWJvYXJkX2ZseXZpZGVvKGRldik7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX01JTkkyOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9DSU5FUkdZNDAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9DSU5FUkdZNjAwOgpAQCAtMjU1MCwxMCArMzA1OSwxNiBAQAogLyogICAgICBjYXNlIFNBQTcxMzRfQk9BUkRfU0FCUkVOVF9TQlRUVkZNOiAgKi8gLyogbm90IGZpbmlzaGVkIHlldCAqLwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfUFZSOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfR09MRF9QTFVTSUk6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01BTkxJX01UVjAwMjoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkFDU1NNQVJUVFY6Ci0JCWRldi0+aGFzX3JlbW90ZSA9IDE7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0dPVFZJRVdfNzEzNToKKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1RFUk1JTkFUT1I6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1NFRE5BX1BDX1RWX0NBUkRCVVM6CisJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDUwNDQ6CiAJCXByaW50aygiJXM6IHNlZW1zIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBNRDUwNDRcbiIKQEAgLTI1NjUsMTEgKzMwODAsMTQgQEAKIAkJLyogcG93ZXItdXAgdHVuZXIgY2hpcCAqLwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDA0MDAwMCwgMHgwMDA0MDAwMCk7CiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDQwMDAwLCAweDAwMDAwMDAwKTsKLQkJbXNsZWVwKDEpOworCWNhc2UgU0FBNzEzNF9CT0FSRF9NT05TVEVSVFZfTU9CSUxFOgorCQkvKiBwb3dlci11cCB0dW5lciBjaGlwICovCisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDQwMDAwLCAweDAwMDQwMDAwKTsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwNDAwMDAsIDB4MDAwMDAwMDQpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVEhZUEhPT05fRFZCVF9EVU9fQ0FSREJVUzoKLQkvKiB0dXJuIHRoZSBmYW4gb24gSGFjOiBzdGF0aWMgZm9yIHRoZSB0aW1lIGJlaW5nICovCisJCS8qIHR1cm4gdGhlIGZhbiBvbiAqLwogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUzLCAweDA4KTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMzLCAweDA2KTsKIAkJYnJlYWs7CkBAIC0yNTc5LDYgKzMwOTcsMjIgQEAKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOwogCQltc2xlZXAoMSk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9SVERfVkZHNzM1MDoKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgUHJvZHVjdGlvbiBUZXN0IFJlZ2lzdGVyIGF0IG9mZnNldCAweDFEMSBpcyBjbGVhcmVkCisJCSAqIHRvIHRha2UgY2hpcCBvdXQgb2YgdGVzdCBtb2RlLiAgQ2xlYXJpbmcgYml0IDQgKFRTVF9FTl9BT1VUKQorCQkgKiBwcmV2ZW50cyBwaW4gMTA1IGZyb20gcmVtYWluaW5nIGxvdzsga2VlcGluZyBwaW4gMTA1IGxvdworCQkgKiBjb250aW51YWxseSByZXNldHMgdGhlIFNBQTY3NTIgY2hpcC4KKwkJICovCisKKwkJc2FhX3dyaXRlYiAoU0FBNzEzNF9QUk9EVUNUSU9OX1RFU1RfTU9ERSwgMHgwMCk7CisJCWJyZWFrOworCS8qIGkyYyByZW1vdGVzICovCisJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaToKKwljYXNlIFNBQTcxMzRfQk9BUkRfVVBNT1NUX1BVUlBMRV9UVjoKKwkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfSTJDOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjEzLDcgKzMxNDcsNyBAQAogCQkJCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyAoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKIAkJfQogCQlicmVhazsKLWNhc2UgU0FBNzEzNF9CT0FSRF9NRDcxMzQ6CisJY2FzZSBTQUE3MTM0X0JPQVJEX01ENzEzNDoKIAkJewogCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCQl1OCBzdWJhZGRyOwpAQCAtMjY4MCw2ICszMjE0LDMzIEBACiAJCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyAoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCZ0dW5fc2V0dXApOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQToKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwOgorCQkvKiBUaGUgUGhpbGlwcyBFVVJPUEEgYmFzZWQgaHlicmlkIGJvYXJkcyBoYXZlIHRoZSB0dW5lciBjb25uZWN0ZWQgdGhyb3VnaAorCQkgKiB0aGUgY2hhbm5lbCBkZWNvZGVyLiBXZSBoYXZlIHRvIG1ha2UgaXQgdHJhbnNwYXJlbnQgdG8gZmluZCBpdAorCQkgKi8KKwkJeworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCQl1OCBkYXRhW10gPSB7IDB4MDcsIDB4MDJ9OworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOCwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CisJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWOworCQl0dW5fc2V0dXAudHlwZSA9IGRldi0+dHVuZXJfdHlwZTsKKwkJdHVuX3NldHVwLmFkZHIgPSBkZXYtPnR1bmVyX2FkZHI7CisKKwkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzIChkZXYsIFRVTkVSX1NFVF9UWVBFX0FERFIsJnR1bl9zZXR1cCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfVElHRVI6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKKwkJLyogdGhpcyBpcyBhIGh5YnJpZCBib2FyZCwgaW5pdGlhbGl6ZSB0byBhbmFsb2cgbW9kZSAqLworCQl7CisJCXU4IGRhdGFbXSA9IHsgMHgzYywgMHgzMywgMHg2OH07CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKKwkJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwkJfQorCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggZTVlMzZmMy4uMTliODg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtNTcsNiArNTcsMTAgQEAKIG1vZHVsZV9wYXJhbShvc3MsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG9zcywicmVnaXN0ZXIgb3NzIGRldmljZXMgKGRlZmF1bHQ6IG5vKSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGFsc2EgPSAwOworbW9kdWxlX3BhcmFtKGFsc2EsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFsc2EsInJlZ2lzdGVyIGFsc2EgZGV2aWNlcyAoZGVmYXVsdDogbm8pIik7CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeSA9IFVOU0VUOwogbW9kdWxlX3BhcmFtKGxhdGVuY3ksIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxhdGVuY3ksInBjaSBsYXRlbmN5IHRpbWVyIik7CkBAIC0xOTAsNiArMTk0LDcgQEAKIAogc3RhdGljIGludCBuZWVkX2VtcHJlc3M7CiBzdGF0aWMgaW50IG5lZWRfZHZiOworc3RhdGljIGludCBuZWVkX2Fsc2E7CiAKIHN0YXRpYyBpbnQgcGVuZGluZ19jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBzdGF0ZSwKIAkJCXZvaWQgKm1vZHVsZSkKQEAgLTE5NywxMCArMjAyLDEyIEBACiAJaWYgKG1vZHVsZSAhPSBUSElTX01PRFVMRSB8fCBzdGF0ZSAhPSBNT0RVTEVfU1RBVEVfTElWRSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0gICAgICAgIGlmIChuZWVkX2VtcHJlc3MpCi0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZW1wcmVzcyIpOwotICAgICAgICBpZiAobmVlZF9kdmIpCi0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZHZiIik7CisJaWYgKG5lZWRfZW1wcmVzcykKKwkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZW1wcmVzcyIpOworCWlmIChuZWVkX2R2YikKKwkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZHZiIik7CisJaWYgKG5lZWRfYWxzYSkKKwkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtYWxzYSIpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIApAQCAtMjc1LDggKzI4Miw4IEBACiAKIGludCBzYWE3MTM0X3BndGFibGVfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IHNhYTcxMzRfcGd0YWJsZSAqcHQpCiB7Ci0gICAgICAgIF9fbGUzMiAgICAgICAqY3B1OwotICAgICAgICBkbWFfYWRkcl90ICAgZG1hX2FkZHI7CisJX19sZTMyICAgICAgICpjcHU7CisJZG1hX2FkZHJfdCAgIGRtYV9hZGRyOwogCiAJY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpLCBTQUE3MTM0X1BHVEFCTEVfU0laRSwgJmRtYV9hZGRyKTsKIAlpZiAoTlVMTCA9PSBjcHUpCkBAIC00MzYsNyArNDQzLDcgQEAKIAkJY3RybCB8PSBTQUE3MTM0X01BSU5fQ1RSTF9URTA7CiAJCWlycSAgfD0gU0FBNzEzNF9JUlExX0lOVEVfUkEwXzEgfAogCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEwXzA7Ci0JICAgICAgICBjYXAgPSBkZXYtPnZpZGVvX3EuY3Vyci0+dmIuZmllbGQ7CisJCWNhcCA9IGRldi0+dmlkZW9fcS5jdXJyLT52Yi5maWVsZDsKIAl9CiAKIAkvKiB2aWRlbyBjYXB0dXJlIC0tIGRtYSAxKzIgKHBsYW5hciBtb2RlcykgKi8KQEAgLTQ2NSw3ICs0NzIsNyBAQAogCX0KIAogCS8qIGF1ZGlvIGNhcHR1cmUgLS0gZG1hIDMgKi8KLQlpZiAoZGV2LT5vc3MuZG1hX3J1bm5pbmcpIHsKKwlpZiAoZGV2LT5kbWFzb3VuZC5kbWFfcnVubmluZykgewogCQljdHJsIHw9IFNBQTcxMzRfTUFJTl9DVFJMX1RFNjsKIAkJaXJxICB8PSBTQUE3MTM0X0lSUTFfSU5URV9SQTNfMSB8CiAJCQlTQUE3MTM0X0lSUTFfSU5URV9SQTNfMDsKQEAgLTU3MCw2ICs1NzcsMTcgQEAKIAkJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJCWdvdG8gb3V0OwogCQl9CisKKwkJLyogSWYgYWxzYSBzdXBwb3J0IGlzIGFjdGl2ZSBhbmQgd2UgZ2V0IGEgc291bmQgcmVwb3J0LCBleGl0CisJCSAgIGFuZCBsZXQgdGhlIHNhYTcxMzQtYWxzYSBtb2R1bGUgZGVhbCB3aXRoIGl0ICovCisKKwkJaWYgKChyZXBvcnQgJiBTQUE3MTM0X0lSUV9SRVBPUlRfRE9ORV9SQTMpICYmIGFsc2EpICB7CisJCQlpZiAoaXJxX2RlYnVnID4gMSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXMvaXJxOiBpZ25vcmluZyBpbnRlcnJ1cHQgZm9yIEFMU0FcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCWhhbmRsZWQgPSAxOwogCQlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRX1JFUE9SVCxyZXBvcnQpOwogCQlpZiAoaXJxX2RlYnVnKQpAQCAtNTkxLDEzICs2MDksMTcgQEAKIAkJICAgIGNhcmRfaGFzX21wZWcoZGV2KSkKIAkJCXNhYTcxMzRfaXJxX3RzX2RvbmUoZGV2LHN0YXR1cyk7CiAKLQkJaWYgKChyZXBvcnQgJiBTQUE3MTM0X0lSUV9SRVBPUlRfRE9ORV9SQTMpKQotCQkJc2FhNzEzNF9pcnFfb3NzX2RvbmUoZGV2LHN0YXR1cyk7CisJCWlmICgocmVwb3J0ICYgU0FBNzEzNF9JUlFfUkVQT1JUX0RPTkVfUkEzKSkgIHsKKwkJCWlmIChvc3MpIHsKKwkJCQlzYWE3MTM0X2lycV9vc3NfZG9uZShkZXYsc3RhdHVzKTsKKwkJCX0KKwkJfQogCiAJCWlmICgocmVwb3J0ICYgKFNBQTcxMzRfSVJRX1JFUE9SVF9HUElPMTYgfAogCQkJICAgICAgIFNBQTcxMzRfSVJRX1JFUE9SVF9HUElPMTgpKSAmJgogCQkgICAgZGV2LT5yZW1vdGUpCiAJCQlzYWE3MTM0X2lucHV0X2lycShkZXYpOworCiAJfQogCiAJaWYgKDEwID09IGxvb3ApIHsKQEAgLTYzNiw3ICs2NTgsNyBAQAogCiAJc2FhX3dyaXRlbChTQUE3MTM0X0lSUTEsIDApOwogCXNhYV93cml0ZWwoU0FBNzEzNF9JUlEyLCAwKTsKLSAgICAgICAgaW5pdF9NVVRFWCgmZGV2LT5sb2NrKTsKKwlpbml0X01VVEVYKCZkZXYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKIAogCXNhYTcxMzRfdHJhY2tfZ3BpbyhkZXYsInByZS1pbml0Iik7CkBAIC02NDYsMTQgKzY2OCw2IEBACiAJCXNhYTcxMzRfdHNfaW5pdDEoZGV2KTsKIAlzYWE3MTM0X2lucHV0X2luaXQxKGRldik7CiAKLQlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgotCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKLQkJc2FhNzEzNF9vc3NfaW5pdDEoZGV2KTsKLQkJYnJlYWs7Ci0JfQotCiAJLyogUkFNIEZJRk8gY29uZmlnICovCiAJc2FhX3dyaXRlbChTQUE3MTM0X0ZJRk9fU0laRSwgMHgwODA3MDUwMyk7CiAJc2FhX3dyaXRlbChTQUE3MTM0X1RIUkVTSE9VTEQsMHgwMjAyMDIwMik7CkBAIC02NjgsNiArNjgyLDIxIEBACiAJCSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VTRkUgIHwKIAkJICAgU0FBNzEzNF9NQUlOX0NUUkxfRUJEQUMpOwogCisJLyoKKwkgKiBJbml0aWFsaXplIE9TUyBfYWZ0ZXJfIGVuYWJsaW5nIGF1ZGlvIGNsb2NrIFBMTCBhbmQgYXVkaW8gcHJvY2Vzc2luZy4KKwkgKiBPU1MgaW5pdGlhbGl6YXRpb24gd3JpdGVzIHRvIHJlZ2lzdGVycyB2aWEgdGhlIGF1ZGlvIERTUDsgdGhlc2UKKwkgKiB3cml0ZXMgd2lsbCBmYWlsIHVubGVzcyB0aGUgYXVkaW8gY2xvY2sgaGFzIGJlZW4gc3RhcnRlZC4gIEF0IHdvcnN0LAorCSAqIGF1ZGlvIHdpbGwgbm90IHdvcmsuCisJICovCisKKwlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgorCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKKwkJc2FhNzEzNF9vc3NfaW5pdDEoZGV2KTsKKwkJYnJlYWs7CisJfQorCiAJLyogZW5hYmxlIHBlcmlwaGVyYWwgZGV2aWNlcyAqLwogCXNhYV93cml0ZWIoU0FBNzEzNF9TUEVDSUFMX01PREUsIDB4MDEpOwogCkBAIC02ODcsNyArNzE2LDcgQEAKIAlzYWE3MTM0X3R2YXVkaW9faW5pdDIoZGV2KTsKIAogCS8qIGVuYWJsZSBJUlEncyAqLwotICAgCWlycTJfbWFzayA9CisJaXJxMl9tYXNrID0KIAkJU0FBNzEzNF9JUlEyX0lOVEVfREVDMyAgICB8CiAJCVNBQTcxMzRfSVJRMl9JTlRFX0RFQzIgICAgfAogCQlTQUE3MTM0X0lSUTJfSU5URV9ERUMxICAgIHwKQEAgLTY5NSwxMCArNzI0LDEyIEBACiAJCVNBQTcxMzRfSVJRMl9JTlRFX1BFICAgICAgfAogCQlTQUE3MTM0X0lSUTJfSU5URV9BUjsKIAotCWlmIChkZXYtPmhhc19yZW1vdGUpCisJaWYgKGRldi0+aGFzX3JlbW90ZSA9PSBTQUE3MTM0X1JFTU9URV9HUElPKQogCQlpcnEyX21hc2sgfD0gKFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOCAgfAogCQkJICAgICAgU0FBNzEzNF9JUlEyX0lOVEVfR1BJTzE4QSB8CiAJCQkgICAgICBTQUE3MTM0X0lSUTJfSU5URV9HUElPMTYgICk7CisJZWxzZSBpZiAoZGV2LT5oYXNfcmVtb3RlID09IFNBQTcxMzRfUkVNT1RFX0kyQykKKwkJcmVxdWVzdF9tb2R1bGUoImlyLWtiZC1pMmMiKTsKIAogCXNhYV93cml0ZWwoU0FBNzEzNF9JUlExLCAwKTsKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMiwgaXJxMl9tYXNrKTsKQEAgLTg3Miw4ICs5MDMsOCBAQAogCiAJLyogcHJpbnQgcGNpIGluZm8gKi8KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZkZXYtPnBjaV9yZXYpOwotICAgICAgICBwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgICZkZXYtPnBjaV9sYXQpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsICIKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgICZkZXYtPnBjaV9sYXQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgogCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWx4XG4iLCBkZXYtPm5hbWUsCiAJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpLCBkZXYtPnBjaV9yZXYsIHBjaV9kZXYtPmlycSwKIAkgICAgICAgZGV2LT5wY2lfbGF0LHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApKTsKQEAgLTg5Nyw3ICs5MjgsNyBAQAogCWRldi0+dGRhOTg4N19jb25mID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udGRhOTg4N19jb25mOwogCWlmIChVTlNFVCAhPSB0dW5lcltkZXYtPm5yXSkKIAkJZGV2LT50dW5lcl90eXBlID0gdHVuZXJbZGV2LT5ucl07Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkLCVzXVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogc3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCiAJICAgICAgIGRldi0+bmFtZSxwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAogCSAgICAgICBwY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlLHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCiAJICAgICAgIGRldi0+Ym9hcmQsIGNhcmRbZGV2LT5ucl0gPT0gZGV2LT5ib2FyZCA/CkBAIC05NDcsMTQgKzk3OCwyMCBAQAogCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAlpZiAoZGV2LT50ZGE5ODg3X2NvbmYpCiAJCXJlcXVlc3RfbW9kdWxlKCJ0ZGE5ODg3Iik7Ci0gIAlpZiAoY2FyZF9pc19lbXByZXNzKGRldikpIHsKKwlpZiAoY2FyZF9pc19lbXByZXNzKGRldikpIHsKIAkJcmVxdWVzdF9tb2R1bGUoInNhYTY3NTJocyIpOwogCQlyZXF1ZXN0X21vZHVsZV9kZXBlbmQoInNhYTcxMzQtZW1wcmVzcyIsJm5lZWRfZW1wcmVzcyk7CiAJfQogCi0gIAlpZiAoY2FyZF9pc19kdmIoZGV2KSkKKwlpZiAoY2FyZF9pc19kdmIoZGV2KSkKIAkJcmVxdWVzdF9tb2R1bGVfZGVwZW5kKCJzYWE3MTM0LWR2YiIsJm5lZWRfZHZiKTsKIAorCWlmICghb3NzICYmIGFsc2EpIHsKKwkJZHByaW50aygiUmVxdWVzdGluZyBBTFNBIG1vZHVsZVxuIik7CisJCXJlcXVlc3RfbW9kdWxlX2RlcGVuZCgic2FhNzEzNC1hbHNhIiwmbmVlZF9hbHNhKTsKKwl9CisKKwogCXY0bDJfcHJpb19pbml0KCZkZXYtPnByaW8pOwogCiAJLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KQEAgLTk5MywyMiArMTAzMCwyMiBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKIAkJaWYgKG9zcykgewotCQkJZXJyID0gZGV2LT5vc3MubWlub3JfZHNwID0KKwkJCWVyciA9IGRldi0+ZG1hc291bmQubWlub3JfZHNwID0KIAkJCQlyZWdpc3Rlcl9zb3VuZF9kc3AoJnNhYTcxMzRfZHNwX2ZvcHMsCiAJCQkJCQkgICBkc3BfbnJbZGV2LT5ucl0pOwogCQkJaWYgKGVyciA8IDApIHsKIAkJCQlnb3RvIGZhaWw0OwogCQkJfQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIGRzcCVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSxkZXYtPm9zcy5taW5vcl9kc3AgPj4gNCk7CisJCQkgICAgICAgZGV2LT5uYW1lLGRldi0+ZG1hc291bmQubWlub3JfZHNwID4+IDQpOwogCi0JCQllcnIgPSBkZXYtPm9zcy5taW5vcl9taXhlciA9CisJCQllcnIgPSBkZXYtPmRtYXNvdW5kLm1pbm9yX21peGVyID0KIAkJCQlyZWdpc3Rlcl9zb3VuZF9taXhlcigmc2FhNzEzNF9taXhlcl9mb3BzLAogCQkJCQkJICAgICBtaXhlcl9ucltkZXYtPm5yXSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlnb3RvIGZhaWw1OwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIG1peGVyJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLGRldi0+b3NzLm1pbm9yX21peGVyID4+IDQpOworCQkJICAgICAgIGRldi0+bmFtZSxkZXYtPmRtYXNvdW5kLm1pbm9yX21peGVyID4+IDQpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEwMzUsNyArMTA3Miw3IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM1OgogCQlpZiAob3NzKQotCQkJdW5yZWdpc3Rlcl9zb3VuZF9kc3AoZGV2LT5vc3MubWlub3JfZHNwKTsKKwkJCXVucmVnaXN0ZXJfc291bmRfZHNwKGRldi0+ZG1hc291bmQubWlub3JfZHNwKTsKIAkJYnJlYWs7CiAJfQogIGZhaWw0OgpAQCAtMTA1NSw3ICsxMDkyLDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHNhYTcxMzRfZmluaWRldihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLSAgICAgICAgc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKIAlzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyAqbW9wczsKIApAQCAtMTA5Myw4ICsxMTMwLDggQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CiAJCWlmIChvc3MpIHsKLQkJCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIoZGV2LT5vc3MubWlub3JfbWl4ZXIpOwotCQkJdW5yZWdpc3Rlcl9zb3VuZF9kc3AoZGV2LT5vc3MubWlub3JfZHNwKTsKKwkJCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIoZGV2LT5kbWFzb3VuZC5taW5vcl9taXhlcik7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChkZXYtPmRtYXNvdW5kLm1pbm9yX2RzcCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTE0OSwxMCArMTE4NiwxMCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNhYTcxMzRfcGNpX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgID0gInNhYTcxMzQiLAotICAgICAgICAuaWRfdGFibGUgPSBzYWE3MTM0X3BjaV90YmwsCi0gICAgICAgIC5wcm9iZSAgICA9IHNhYTcxMzRfaW5pdGRldiwKLSAgICAgICAgLnJlbW92ZSAgID0gX19kZXZleGl0X3Aoc2FhNzEzNF9maW5pZGV2KSwKKwkubmFtZSAgICAgPSAic2FhNzEzNCIsCisJLmlkX3RhYmxlID0gc2FhNzEzNF9wY2lfdGJsLAorCS5wcm9iZSAgICA9IHNhYTcxMzRfaW5pdGRldiwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChzYWE3MTM0X2ZpbmlkZXYpLAogfTsKIAogc3RhdGljIGludCBzYWE3MTM0X2luaXQodm9pZCkKQEAgLTExODgsNiArMTIyNSwxMyBAQAogRVhQT1JUX1NZTUJPTChzYWE3MTM0X2Rldmxpc3QpOwogRVhQT1JUX1NZTUJPTChzYWE3MTM0X2JvYXJkcyk7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEZvciBBTFNBIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9wZ3RhYmxlX2ZyZWUpOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X3BndGFibGVfYnVpbGQpOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X3BndGFibGVfYWxsb2MpOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X3NldF9kbWFiaXRzKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDYzOWFlNTEuLmUwMTY0ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAotCiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCiAKQEAgLTQwLDYgKzM5LDEwIEBACiAjaWZkZWYgSEFWRV9UREExMDA0WAogIyBpbmNsdWRlICJ0ZGExMDA0eC5oIgogI2VuZGlmCisjaWZkZWYgSEFWRV9OWFQyMDBYCisjIGluY2x1ZGUgIm54dDIwMHguaCIKKyMgaW5jbHVkZSAiZHZiLXBsbC5oIgorI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTE1MSwyNSArMTU0LDEyIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2lmZGVmIEhBVkVfVERBMTAwNFgKLXN0YXRpYyBpbnQgcGhpbGlwc190dTEyMTZfcGxsX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OwotCXN0YXRpYyB1OCB0dTEyMTZfaW5pdFtdID0geyAweDBiLCAweGY1LCAweDg1LCAweGFiIH07Ci0Jc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0gey5hZGRyID0gMHg2MCwuZmxhZ3MgPSAwLC5idWYgPSB0dTEyMTZfaW5pdCwubGVuID0gc2l6ZW9mKHR1MTIxNl9pbml0KSB9OwogCi0JLyogc2V0dXAgUExMIGNvbmZpZ3VyYXRpb24gKi8KLQlpZiAoaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmdHVuZXJfbXNnLCAxKSAhPSAxKQotCQlyZXR1cm4gLUVJTzsKLQltc2xlZXAoMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwaGlsaXBzX3R1MTIxNl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3N0YXRpYyBpbnQgcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQodTggYWRkciwgc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKIAl1OCB0dW5lcl9idWZbNF07Ci0Jc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0gey5hZGRyID0gMHg2MCwuZmxhZ3MgPSAwLC5idWYgPSB0dW5lcl9idWYsLmxlbiA9CisJc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0gey5hZGRyID0gYWRkciwuZmxhZ3MgPSAwLC5idWYgPSB0dW5lcl9idWYsLmxlbiA9CiAJCQlzaXplb2YodHVuZXJfYnVmKSB9OwogCWludCB0dW5lcl9mcmVxdWVuY3kgPSAwOwogCXU4IGJhbmQsIGNwLCBmaWx0ZXI7CkBAIC0yNDIsMTEgKzIzMiwzNiBAQAogCiAJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnR1bmVyX21zZywgMSkgIT0gMSkKIAkJcmV0dXJuIC1FSU87Ci0KIAltc2xlZXAoMSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcGhpbGlwc190ZGE2NjUxX3BsbF9pbml0KHU4IGFkZHIsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdGF0aWMgdTggdHUxMjE2X2luaXRbXSA9IHsgMHgwYiwgMHhmNSwgMHg4NSwgMHhhYiB9OworCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IGFkZHIsLmZsYWdzID0gMCwuYnVmID0gdHUxMjE2X2luaXQsLmxlbiA9IHNpemVvZih0dTEyMTZfaW5pdCkgfTsKKworCS8qIHNldHVwIFBMTCBjb25maWd1cmF0aW9uICovCisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnR1bmVyX21zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisJbXNsZWVwKDEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHBoaWxpcHNfdHUxMjE2X3BsbF82MF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiBwaGlsaXBzX3RkYTY2NTFfcGxsX2luaXQoMHg2MCwgZmUpOworfQorCitzdGF0aWMgaW50IHBoaWxpcHNfdHUxMjE2X3BsbF82MF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXJldHVybiBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldCgweDYwLCBmZSwgcGFyYW1zKTsKK30KKwogc3RhdGljIGludCBwaGlsaXBzX3R1MTIxNl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY2hhciAqbmFtZSkKIHsKQEAgLTI1NCwyMiArMjY5LDEwOCBAQAogCXJldHVybiByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBuYW1lLCAmZGV2LT5wY2ktPmRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHBoaWxpcHNfdHUxMjE2X2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHBoaWxpcHNfdHUxMjE2XzYwX2NvbmZpZyA9IHsKIAogCS5kZW1vZF9hZGRyZXNzID0gMHg4LAogCS5pbnZlcnQgICAgICAgID0gMSwKLQkuaW52ZXJ0X29jbGsgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAogCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF80TSwKIAkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19ERUZBVUxULAogCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8zNjE3LAotCS5wbGxfaW5pdCAgICAgID0gcGhpbGlwc190dTEyMTZfcGxsX2luaXQsCi0JLnBsbF9zZXQgICAgICAgPSBwaGlsaXBzX3R1MTIxNl9wbGxfc2V0LAorCS5wbGxfaW5pdCAgICAgID0gcGhpbGlwc190dTEyMTZfcGxsXzYwX2luaXQsCisJLnBsbF9zZXQgICAgICAgPSBwaGlsaXBzX3R1MTIxNl9wbGxfNjBfc2V0LAogCS5wbGxfc2xlZXAgICAgID0gTlVMTCwKIAkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdHUxMjE2X3JlcXVlc3RfZmlybXdhcmUsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGludCBwaGlsaXBzX3R1MTIxNl9wbGxfNjFfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gcGhpbGlwc190ZGE2NjUxX3BsbF9pbml0KDB4NjEsIGZlKTsKK30KKworc3RhdGljIGludCBwaGlsaXBzX3R1MTIxNl9wbGxfNjFfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlyZXR1cm4gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQoMHg2MSwgZmUsIHBhcmFtcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHBoaWxpcHNfdHUxMjE2XzYxX2NvbmZpZyA9IHsKKworCS5kZW1vZF9hZGRyZXNzID0gMHg4LAorCS5pbnZlcnQgICAgICAgID0gMSwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgICAgICAgPSBUREExMDA0Nl9GUkVRXzM2MTcsCisJLnBsbF9pbml0ICAgICAgPSBwaGlsaXBzX3R1MTIxNl9wbGxfNjFfaW5pdCwKKwkucGxsX3NldCAgICAgICA9IHBoaWxpcHNfdHUxMjE2X3BsbF82MV9zZXQsCisJLnBsbF9zbGVlcCAgICAgPSBOVUxMLAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190dTEyMTZfcmVxdWVzdF9maXJtd2FyZSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHBoaWxpcHNfZXVyb3BhX3BsbF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdGF0aWMgdTggbXNnW10gPSB7IDB4MGIsIDB4ZjUsIDB4ODYsIDB4YWIgfTsKKwlzdHJ1Y3QgaTJjX21zZyBpbml0X21zZyA9IHsuYWRkciA9IDB4NjEsLmZsYWdzID0gMCwuYnVmID0gbXNnLC5sZW4gPSBzaXplb2YobXNnKSB9OworCisJLyogc2V0dXAgUExMIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAoaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmaW5pdF9tc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCW1zbGVlcCgxKTsKKworCS8qIHN3aXRjaCB0aGUgYm9hcmQgdG8gZHZiIG1vZGUgKi8KKwlpbml0X21zZy5hZGRyID0gMHg0MzsKKwlpbml0X21zZy5sZW4gID0gMHgwMjsKKwltc2dbMF0gPSAweDAwOworCW1zZ1sxXSA9IDB4NDA7CisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJmluaXRfbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBoaWxpcHNfdGQxMzE2X3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXJldHVybiBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldCgweDYxLCBmZSwgcGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgcGhpbGlwc19ldXJvcGFfYW5hbG9nKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwkvKiB0aGlzIG1lc3NhZ2UgYWN0dWFsbHkgdHVybnMgdGhlIHR1bmVyIGJhY2sgdG8gYW5hbG9nIG1vZGUgKi8KKwlzdGF0aWMgdTggbXNnW10gPSB7IDB4MGIsIDB4ZGMsIDB4ODYsIDB4YTQgfTsKKwlzdHJ1Y3QgaTJjX21zZyBhbmFsb2dfbXNnID0gey5hZGRyID0gMHg2MSwuZmxhZ3MgPSAwLC5idWYgPSBtc2csLmxlbiA9IHNpemVvZihtc2cpIH07CisKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZhbmFsb2dfbXNnLCAxKTsKKwltc2xlZXAoMSk7CisKKwkvKiBzd2l0Y2ggdGhlIGJvYXJkIHRvIGFuYWxvZyBtb2RlICovCisJYW5hbG9nX21zZy5hZGRyID0gMHg0MzsKKwlhbmFsb2dfbXNnLmxlbiAgPSAweDAyOworCW1zZ1swXSA9IDB4MDA7CisJbXNnWzFdID0gMHgxNDsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZhbmFsb2dfbXNnLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgcGhpbGlwc19ldXJvcGFfY29uZmlnID0geworCisJLmRlbW9kX2FkZHJlc3MgPSAweDgsCisJLmludmVydCAgICAgICAgPSAwLAorCS5pbnZlcnRfb2NsayAgID0gMCwKKwkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfNE0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfSUZPX0FVVE9fUE9TLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNTIsCisJLnBsbF9pbml0ICAgICAgPSBwaGlsaXBzX2V1cm9wYV9wbGxfaW5pdCwKKwkucGxsX3NldCAgICAgICA9IHBoaWxpcHNfdGQxMzE2X3BsbF9zZXQsCisJLnBsbF9zbGVlcCAgICAgPSBwaGlsaXBzX2V1cm9wYV9hbmFsb2csCisJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgcGhpbGlwc19mbWQxMjE2X3BsbF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewpAQCAtMzgyLDcgKzQ4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBIQVZFX1REQTEwMDRYCiBzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBtZWRpb25fY2FyZGJ1cyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MDgsCiAJLmludmVydCAgICAgICAgPSAxLApAQCAtMzk1LDcgKzQ5NSw2IEBACiAJLnBsbF9zbGVlcAkgICA9IHBoaWxpcHNfZm1kMTIxNl9hbmFsb2csCiAJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLAogfTsKLSNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNDUyLDcgKzU1MSw3IEBACiAJdTggdHVuZXJfYnVmWzE0XTsKIAogCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IDB4NjAsLmZsYWdzID0gMCwuYnVmID0gdHVuZXJfYnVmLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAubGVuID0gc2l6ZW9mKHR1bmVyX2J1ZikgfTsKKwkJCQkJLmxlbiA9IHNpemVvZih0dW5lcl9idWYpIH07CiAJaW50IGksIHR1bmVyX2ZyZXEsIGlmX2ZyZXE7CiAJdTMyIE47CiAJc3dpdGNoIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpIHsKQEAgLTUxMSw3ICs2MTAsNyBAQAogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKIAlzdGF0aWMgdTggdGRhODI3eF9zbGVlcFtdID0geyAweDMwLCAweGQwfTsKIAlzdHJ1Y3QgaTJjX21zZyB0dW5lcl9tc2cgPSB7LmFkZHIgPSAweDYwLC5mbGFncyA9IDAsLmJ1ZiA9IHRkYTgyN3hfc2xlZXAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sZW4gPSBzaXplb2YodGRhODI3eF9zbGVlcCkgfTsKKwkJCQkgICAgLmxlbiA9IHNpemVvZih0ZGE4Mjd4X3NsZWVwKSB9OwogCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnR1bmVyX21zZywgMSk7CiB9CiAKQEAgLTUyNyw2ICs2MjYsMjAyIEBACiAJLnBsbF9zbGVlcAkgICA9IHBoaWxpcHNfdGRhODI3eF9wbGxfc2xlZXAsCiAJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLAogfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCB0ZGE4Mjd4YV9kYXRhIHsKKwl1MzIgbG9tYXg7CisJdTggIHN2Y287CisJdTggIHNwZDsKKwl1OCAgc2NyOworCXU4ICBzYnM7CisJdTggIGdjMzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9kdmJ0W10gPSB7CisJeyAubG9tYXggPSAgNTY4NzUwMDAsIC5zdmNvID0gMywgLnNwZCA9IDQsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gIDY3MjUwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9ICA4MTI1MDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAgOTc1MDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTEzNzUwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDEzNDUwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxNTQwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTYyNTAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDE4MzAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxOTUwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMiwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMjI3NTAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDIsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDI2OTAwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMSwgLnNjciA9IDAsIC5zYnMgPSAyLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAyOTAwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMiwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMzI1MDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAxLCAuc2NyID0gMCwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDM5MDAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMSwgLnNjciA9IDAsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA0NTUwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNTIwMDAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDUzODAwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA1NTAwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNjIwMDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDQsIC5nYzMgPSAwfSwKKwl7IC5sb21heCA9IDY1MDAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMH0sCisJeyAubG9tYXggPSA3MDAwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gNCwgLmdjMyA9IDB9LAorCXsgLmxvbWF4ID0gNzgwMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAwfSwKKwl7IC5sb21heCA9IDgyMDAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSA0LCAuZ2MzID0gMH0sCisJeyAubG9tYXggPSA4NzAwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDB9LAorCXsgLmxvbWF4ID0gOTExMDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDQsIC5nYzMgPSAwfSwKKwl7IC5sb21heCA9ICAgICAgICAgMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMH19OworCisKK3N0YXRpYyBpbnQgcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2V0KHU4IGFkZHIsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJdTggdHVuZXJfYnVmWzE0XTsKKwl1bnNpZ25lZCBjaGFyIHJlZzJbMl07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSBhZGRyLC5mbGFncyA9IDAsLmJ1ZiA9IHR1bmVyX2J1Zn07CisJaW50IGksIHR1bmVyX2ZyZXEsIGlmX2ZyZXE7CisJdTMyIE47CisKKwlzd2l0Y2ggKHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCkgeworCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQlpZl9mcmVxID0gNDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCWlmX2ZyZXEgPSA0NTAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgkJICAgLyogOCBNSHogb3IgQXV0byAqLworCQlpZl9mcmVxID0gNTAwMDAwMDsKKwkJYnJlYWs7CisJfQorCXR1bmVyX2ZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSArIGlmX2ZyZXE7CisKKwlpID0gMDsKKwl3aGlsZSAodGRhODI3eGFfZHZidFtpXS5sb21heCA8IHR1bmVyX2ZyZXEpIHsKKwkJaWYodGRhODI3eGFfZHZidFtpICsgMV0ubG9tYXggPT0gMCkKKwkJCWJyZWFrOworCQlpKys7CisJfQorCisJTiA9ICgodHVuZXJfZnJlcSArIDMxMjUwKSAvIDYyNTAwKSA8PCB0ZGE4Mjd4YV9kdmJ0W2ldLnNwZDsKKwl0dW5lcl9idWZbMF0gPSAwOyAgICAgICAgICAgIC8vIHN1YmFkZHJlc3MKKwl0dW5lcl9idWZbMV0gPSBOID4+IDg7CisJdHVuZXJfYnVmWzJdID0gTiAmIDB4ZmY7CisJdHVuZXJfYnVmWzNdID0gMDsKKwl0dW5lcl9idWZbNF0gPSAweDE2OworCXR1bmVyX2J1Zls1XSA9ICh0ZGE4Mjd4YV9kdmJ0W2ldLnNwZCA8PCA1KSArICh0ZGE4Mjd4YV9kdmJ0W2ldLnN2Y28gPDwgMykgKworCQkJdGRhODI3eGFfZHZidFtpXS5zYnM7CisJdHVuZXJfYnVmWzZdID0gMHg0YiArICh0ZGE4Mjd4YV9kdmJ0W2ldLmdjMyA8PCA0KTsKKwl0dW5lcl9idWZbN10gPSAweDBjOworCXR1bmVyX2J1Zls4XSA9IDB4MDY7CisJdHVuZXJfYnVmWzldID0gMHgyNDsKKwl0dW5lcl9idWZbMTBdID0gMHhmZjsKKwl0dW5lcl9idWZbMTFdID0gMHg2MDsKKwl0dW5lcl9idWZbMTJdID0gMHgwMDsKKwl0dW5lcl9idWZbMTNdID0gMHgzOTsgIC8vIGxwc2VsCisJbXNnLmxlbiA9IDE0OworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJbXNnLmJ1Zj0gcmVnMjsKKwltc2cubGVuID0gMjsKKwlyZWcyWzBdID0gMHg2MDsKKwlyZWcyWzFdID0gMHgzYzsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCisJcmVnMlswXSA9IDB4YTA7CisJcmVnMlsxXSA9IDB4NDA7CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCW1zbGVlcCgyKTsKKwkvKiBjb3JyZWN0IENQIHZhbHVlICovCisJcmVnMlswXSA9IDB4MzA7CisJcmVnMlsxXSA9IDB4MTAgKyB0ZGE4Mjd4YV9kdmJ0W2ldLnNjcjsKKwltc2cubGVuID0gMjsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCisJbXNsZWVwKDU1MCk7CisJcmVnMlswXSA9IDB4NTA7CisJcmVnMlsxXSA9IDB4NGYgKyAodGRhODI3eGFfZHZidFtpXS5nYzMgPDwgNCk7CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIHBoaWxpcHNfdGRhODI3eGFfcGxsX3NsZWVwKHU4IGFkZHIsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdGF0aWMgdTggdGRhODI3eGFfc2xlZXBbXSA9IHsgMHgzMCwgMHg5MH07CisJc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0gey5hZGRyID0gYWRkciwuZmxhZ3MgPSAwLC5idWYgPSB0ZGE4Mjd4YV9zbGVlcCwKKwkJCQkgICAgLmxlbiA9IHNpemVvZih0ZGE4Mjd4YV9zbGVlcCkgfTsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0dW5lcl9tc2csIDEpOworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHBoaWxpcHNfdGlnZXJfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IHRkYTgyOTBfY2xvc2VbXSA9IHsgMHgyMSwgMHhjMH07CisJc3RhdGljIHU4IHRkYTgyOTBfb3BlbltdICA9IHsgMHgyMSwgMHg4MH07CisJc3RydWN0IGkyY19tc2cgdGRhODI5MF9tc2cgPSB7LmFkZHIgPSAweDRiLC5mbGFncyA9IDAsIC5sZW4gPSAyfTsKKwkvKiBjbG9zZSB0ZGE4MjkwIGkyYyBicmlkZ2UgKi8KKwl0ZGE4MjkwX21zZy5idWYgPSB0ZGE4MjkwX2Nsb3NlOworCXJldCA9IGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnRkYTgyOTBfbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCXJldHVybiAtRUlPOworCW1zbGVlcCgyMCk7CisJcmV0ID0gcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2V0KDB4NjEsIGZlLCBwYXJhbXMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwkvKiBvcGVuIHRkYTgyOTAgaTJjIGJyaWRnZSAqLworCXRkYTgyOTBfbXNnLmJ1ZiA9IHRkYTgyOTBfb3BlbjsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0ZGE4MjkwX21zZywgMSk7CisJcmV0dXJuIHJldDsKK307CisKK3N0YXRpYyBpbnQgcGhpbGlwc190aWdlcl9kdmJfbW9kZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IGRhdGFbXSA9IHsgMHgzYywgMHgzMywgMHg2YX07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyPTB4MDgsIC5mbGFncz0wLCAuYnVmPWRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSl9OworCisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBoaWxpcHNfdGlnZXJfYW5hbG9nX21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0YXRpYyB1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4Njh9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKKworCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2xlZXAoIDB4NjEsIGZlKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgcGhpbGlwc190aWdlcl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA4LAorCS5pbnZlcnQgICAgICAgID0gMSwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLnBsbF9pbml0ICAgICAgPSBwaGlsaXBzX3RpZ2VyX2R2Yl9tb2RlLAorCS5wbGxfc2V0ICAgICAgID0gcGhpbGlwc190aWdlcl9wbGxfc2V0LAorCS5wbGxfc2xlZXAgICAgID0gcGhpbGlwc190aWdlcl9hbmFsb2dfbW9kZSwKKwkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCit9OworCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBIQVZFX05YVDIwMFgKK3N0YXRpYyBzdHJ1Y3Qgbnh0MjAweF9jb25maWcgYXZlcnR2aGRhMTgwID0geworCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwYSwKKwkucGxsX2FkZHJlc3MgICAgICA9IDB4NjEsCisJLnBsbF9kZXNjICAgICAgICAgPSAmZHZiX3BsbF90ZGh1MiwKK307CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC01NTgsNyArODUzLDcgQEAKIAkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RPVUdIOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190dTEyMTZfY29uZmlnLAorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190dTEyMTZfNjBfY29uZmlnLAogCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlREVU86CkBAIC01NjksNiArODY0LDMxIEBACiAJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZ0ZGE4Mjd4X2xpZmV2aWV3X2NvbmZpZywKIAkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQToKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnBoaWxpcHNfZXVyb3BhX2NvbmZpZywKKwkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX2V1cm9wYV9jb25maWcsCisJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190dTEyMTZfNjFfY29uZmlnLAorCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfVElHRVI6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX3RpZ2VyX2NvbmZpZywKKwkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX3RpZ2VyX2NvbmZpZywKKwkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSEFWRV9OWFQyMDBYCisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BVkVSVFZIRF9BMTgwOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IG54dDIwMHhfYXR0YWNoKCZhdmVydHZoZGExODAsICZkZXYtPmkyY19hZGFwKTsKKwkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzOiBIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iLGRldi0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggNzdiNjI3ZS4uZTllYzY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAJc2FhX3dyaXRlYihTQUE3MTM0X1NQRUNJQUxfTU9ERSwgMHgwMCk7CiAJbXNsZWVwKDEwKTsKLSAgIAlzYWFfd3JpdGViKFNBQTcxMzRfU1BFQ0lBTF9NT0RFLCAweDAxKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfU1BFQ0lBTF9NT0RFLCAweDAxKTsKIAltc2xlZXAoMTAwKTsKIAlkZXYtPmVtcHJlc3Nfc3RhcnRlZCA9IDA7CiB9CkBAIC02NSw3ICs2NSw3IEBACiAJdHNfcmVzZXRfZW5jb2RlcihkZXYpOwogCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX01QRUdDT01QLCBOVUxMKTsKIAlkZXYtPmVtcHJlc3Nfc3RhcnRlZCA9IDE7Ci0gCXJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE2OSw3ICsxNjksNyBAQAogCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKIAkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGNhcC0+ZHJpdmVyLCAic2FhNzEzNCIpOworCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJzYWE3MTM0Iik7CiAJCXN0cmxjcHkoY2FwLT5jYXJkLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLAogCQkJc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKaW5kZXggNzExYWE4ZS4uNzU3NTA0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YTsKIAlpbnQgYWRkcixyYyxpLGJ5dGU7CiAKLSAgCXN0YXR1cyA9IGkyY19nZXRfc3RhdHVzKGRldik7CisJc3RhdHVzID0gaTJjX2dldF9zdGF0dXMoZGV2KTsKIAlpZiAoIWkyY19pc19pZGxlKHN0YXR1cykpCiAJCWlmICghaTJjX3Jlc2V0KGRldikpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCXJjID0gLUVJTzsKIAlpZiAoIWkyY19pc19idXN5X3dhaXQoZGV2KSkKIAkJZ290byBlcnI7Ci0gIAlzdGF0dXMgPSBpMmNfZ2V0X3N0YXR1cyhkZXYpOworCXN0YXR1cyA9IGkyY19nZXRfc3RhdHVzKGRldik7CiAJaWYgKGkyY19pc19lcnJvcihzdGF0dXMpKQogCQlnb3RvIGVycjsKIAkvKiBlbnN1cmUgdGhhdCB0aGUgYnVzIGlzIGlkbGUgZm9yIGF0IGxlYXN0IG9uZSBiaXQgc2xvdCAqLwpAQCAtMzM1LDYgKzMzNSwyMCBAQAogCWQxcHJpbnRrKCAiJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCiAJCSBjbGllbnQtPmRyaXZlci0+bmFtZSwgY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOwogCisJLyogQW0gSSBhbiBpMmMgcmVtb3RlIGNvbnRyb2w/ICovCisKKwlzd2l0Y2ggKGNsaWVudC0+YWRkcikgeworCQljYXNlIDB4N2E6CisJCWNhc2UgMHg0NzoKKwkJeworCQkJc3RydWN0IElSX2kyYyAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkJCWQxcHJpbnRrKCIlcyBpMmMgSVIgZGV0ZWN0ZWQgKCVzKS5cbiIsCisJCQkJIGNsaWVudC0+ZHJpdmVyLT5uYW1lLGlyLT5waHlzKTsKKwkJCXNhYTcxMzRfc2V0X2kyY19pcihkZXYsaXIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAlpZiAoIWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKQogCQlyZXR1cm4gMDsKIApAQCAtMzQ4LDEyICszNjIsMTIgQEAKIAogCQkJY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKIAkJfQotICAgICAgICB9CisJfQogCiAJaWYgKHR1bmVyICE9IFVOU0VUKSB7CiAKLQkgICAgICAgIHR1bl9zZXR1cC50eXBlID0gdHVuZXI7Ci0JICAgICAgICB0dW5fc2V0dXAuYWRkciA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX2FkZHI7CisJCXR1bl9zZXR1cC50eXBlID0gdHVuZXI7CisJCXR1bl9zZXR1cC5hZGRyID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHVuZXJfYWRkcjsKIAogCQlpZiAoKHR1bl9zZXR1cC5hZGRyID09IEFERFJfVU5TRVQpfHwodHVuX3NldHVwLmFkZHIgPT0gY2xpZW50LT5hZGRyKSkgewogCkBAIC0zNjEsMTEgKzM3NSwxMSBAQAogCiAJCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZChjbGllbnQsVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CiAJCX0KLSAgICAgICAgfQorCX0KIAogCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgVERBOTg4N19TRVRfQ09ORklHLCAmY29uZik7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzYWE3MTM0X2FsZ28gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwppbmRleCAyNDJjYjIzLi4zMjlhY2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKQEAgLTM5LDYgKzM5LDggQEAKIAogI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKQlpZiAoaXJfZGVidWcpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMvaXI6ICIgZm10LCBkZXYtPm5hbWUgLCAjIyBhcmcpCisjZGVmaW5lIGkyY2RwcmludGsoZm10LCBhcmcuLi4pICAgIGlmIChpcl9kZWJ1ZykgXAorCXByaW50ayhLRVJOX0RFQlVHICIlcy9pcjogIiBmbXQsIGlyLT5jLm5hbWUgLCAjIyBhcmcpCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTE0LDI0ICsxMTYsMjQgQEAKIC8qIEFsZm9ucyBHZXNlciA8YS5nZXNlckBjb3gubmV0PgogICogdXBkYXRlcyBmcm9tIEpvYiBELiBSLiBCb3JnZXMgPGpvYmRyYkBpZy5jb20uYnI+ICovCiBzdGF0aWMgSVJfS0VZVEFCX1RZUEUgZXp0dl9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0gICAgICAgIFsgMTggXSA9IEtFWV9QT1dFUiwKLSAgICAgICAgWyAgMSBdID0gS0VZX1RWLCAgICAgICAgICAgICAvLyBEVlIKLSAgICAgICAgWyAyMSBdID0gS0VZX0RWRCwgICAgICAgICAgICAvLyBEVkQKLSAgICAgICAgWyAyMyBdID0gS0VZX0FVRElPLCAgICAgICAgICAvLyBtdXNpYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERWUiBtb2RlIC8gRFZEIG1vZGUgLyBtdXNpYyBtb2RlCisJWyAxOCBdID0gS0VZX1BPV0VSLAorCVsgIDEgXSA9IEtFWV9UViwgICAgICAgICAgICAgLy8gRFZSCisJWyAyMSBdID0gS0VZX0RWRCwgICAgICAgICAgICAvLyBEVkQKKwlbIDIzIF0gPSBLRVlfQVVESU8sICAgICAgICAgIC8vIG11c2ljCisJCQkJICAgICAvLyBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZQogCi0gICAgICAgIFsgMjcgXSA9IEtFWV9NVVRFLCAgICAgICAgICAgLy8gbXV0ZQotICAgICAgICBbICAyIF0gPSBLRVlfTEFOR1VBR0UsICAgICAgIC8vIE1UUy9TQVAgLyBhdWRpbyAvIGF1dG9zZWVrCi0gICAgICAgIFsgMzAgXSA9IEtFWV9TVUJUSVRMRSwgICAgICAgLy8gY2xvc2VkIGNhcHRpb25pbmcgLyBzdWJ0aXRsZSAvIHNlZWsKLSAgICAgICAgWyAyMiBdID0gS0VZX1pPT00sICAgICAgICAgICAvLyBmdWxsIHNjcmVlbgotICAgICAgICBbIDI4IF0gPSBLRVlfVklERU8sICAgICAgICAgIC8vIHZpZGVvIHNvdXJjZSAvIGVqZWN0IC8gZGVsYWxsCi0gICAgICAgIFsgMjkgXSA9IEtFWV9SRVNUQVJULCAgICAgICAgLy8gcGxheWJhY2sgLyBhbmdsZSAvIGRlbAotICAgICAgICBbIDQ3IF0gPSBLRVlfU0VBUkNILCAgICAgICAgIC8vIHNjYW4gLyBtZW51IC8gcGxheWxpc3QKLSAgICAgICAgWyA0OCBdID0gS0VZX0NIQU5ORUwsICAgICAgICAvLyBDSCBzdXJmaW5nIC8gYm9va21hcmsgLyBtZW1vCisJWyAyNyBdID0gS0VZX01VVEUsICAgICAgICAgICAvLyBtdXRlCisJWyAgMiBdID0gS0VZX0xBTkdVQUdFLCAgICAgICAvLyBNVFMvU0FQIC8gYXVkaW8gLyBhdXRvc2VlaworCVsgMzAgXSA9IEtFWV9TVUJUSVRMRSwgICAgICAgLy8gY2xvc2VkIGNhcHRpb25pbmcgLyBzdWJ0aXRsZSAvIHNlZWsKKwlbIDIyIF0gPSBLRVlfWk9PTSwgICAgICAgICAgIC8vIGZ1bGwgc2NyZWVuCisJWyAyOCBdID0gS0VZX1ZJREVPLCAgICAgICAgICAvLyB2aWRlbyBzb3VyY2UgLyBlamVjdCAvIGRlbGFsbAorCVsgMjkgXSA9IEtFWV9SRVNUQVJULCAgICAgICAgLy8gcGxheWJhY2sgLyBhbmdsZSAvIGRlbAorCVsgNDcgXSA9IEtFWV9TRUFSQ0gsICAgICAgICAgLy8gc2NhbiAvIG1lbnUgLyBwbGF5bGlzdAorCVsgNDggXSA9IEtFWV9DSEFOTkVMLCAgICAgICAgLy8gQ0ggc3VyZmluZyAvIGJvb2ttYXJrIC8gbWVtbwogCi0gICAgICAgIFsgNDkgXSA9IEtFWV9IRUxQLCAgICAgICAgICAgLy8gaGVscAotICAgICAgICBbIDUwIF0gPSBLRVlfTU9ERSwgICAgICAgICAgIC8vIG51bS9tZW1vCi0gICAgICAgIFsgNTEgXSA9IEtFWV9FU0MsICAgICAgICAgICAgLy8gY2FuY2VsCisJWyA0OSBdID0gS0VZX0hFTFAsICAgICAgICAgICAvLyBoZWxwCisJWyA1MCBdID0gS0VZX01PREUsICAgICAgICAgICAvLyBudW0vbWVtbworCVsgNTEgXSA9IEtFWV9FU0MsICAgICAgICAgICAgLy8gY2FuY2VsCiAKIAlbIDEyIF0gPSBLRVlfVVAsICAgICAgICAgICAgIC8vIHVwCiAJWyAxNiBdID0gS0VZX0RPV04sICAgICAgICAgICAvLyBkb3duCkBAIC0xNDgsMjQgKzE1MCwyNCBAQAogCVsgNDUgXSA9IEtFWV9QTEFZLCAgICAgICAgICAgLy8gcGxheQogCVsgNDYgXSA9IEtFWV9TSFVGRkxFLCAgICAgICAgLy8gc25hcHNob3QgLyBzaHVmZmxlCiAKLSAgICAgICAgWyAgMCBdID0gS0VZX0tQMCwKLSAgICAgICAgWyAgNSBdID0gS0VZX0tQMSwKLSAgICAgICAgWyAgNiBdID0gS0VZX0tQMiwKLSAgICAgICAgWyAgNyBdID0gS0VZX0tQMywKLSAgICAgICAgWyAgOSBdID0gS0VZX0tQNCwKLSAgICAgICAgWyAxMCBdID0gS0VZX0tQNSwKLSAgICAgICAgWyAxMSBdID0gS0VZX0tQNiwKLSAgICAgICAgWyAxMyBdID0gS0VZX0tQNywKLSAgICAgICAgWyAxNCBdID0gS0VZX0tQOCwKLSAgICAgICAgWyAxNSBdID0gS0VZX0tQOSwKKwlbICAwIF0gPSBLRVlfS1AwLAorCVsgIDUgXSA9IEtFWV9LUDEsCisJWyAgNiBdID0gS0VZX0tQMiwKKwlbICA3IF0gPSBLRVlfS1AzLAorCVsgIDkgXSA9IEtFWV9LUDQsCisJWyAxMCBdID0gS0VZX0tQNSwKKwlbIDExIF0gPSBLRVlfS1A2LAorCVsgMTMgXSA9IEtFWV9LUDcsCisJWyAxNCBdID0gS0VZX0tQOCwKKwlbIDE1IF0gPSBLRVlfS1A5LAogCi0gICAgICAgIFsgNDIgXSA9IEtFWV9WT0xVTUVVUCwKLSAgICAgICAgWyAxNyBdID0gS0VZX1ZPTFVNRURPV04sCi0gICAgICAgIFsgMjQgXSA9IEtFWV9DSEFOTkVMVVAsICAgICAgLy8gQ0gudHJhY2tpbmcgdXAKLSAgICAgICAgWyAyNSBdID0gS0VZX0NIQU5ORUxET1dOLCAgICAvLyBDSC50cmFja2luZyBkb3duCisJWyA0MiBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMTcgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMjQgXSA9IEtFWV9DSEFOTkVMVVAsICAgICAgLy8gQ0gudHJhY2tpbmcgdXAKKwlbIDI1IF0gPSBLRVlfQ0hBTk5FTERPV04sICAgIC8vIENILnRyYWNraW5nIGRvd24KIAotICAgICAgICBbIDE5IF0gPSBLRVlfS1BFTlRFUiwgICAgICAgIC8vIGVudGVyCi0gICAgICAgIFsgMzMgXSA9IEtFWV9LUERPVCwgICAgICAgICAgLy8gLiAoZGVjaW1hbCBkb3QpCisJWyAxOSBdID0gS0VZX0tQRU5URVIsICAgICAgICAvLyBlbnRlcgorCVsgMzMgXSA9IEtFWV9LUERPVCwgICAgICAgICAgLy8gLiAoZGVjaW1hbCBkb3QpCiB9OwogCiBzdGF0aWMgSVJfS0VZVEFCX1RZUEUgYXZhY3NzbWFydF9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7CkBAIC00MDEsNyArNDAzLDE4MyBAQAogCiAJLy8gMHgxZCB1bnVzZWQgPwogfTsKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBNaWtlIEJhaWtvdiA8bWlrZUBiYWlrb3YuY29tPiAqLworc3RhdGljIElSX0tFWVRBQl9UWVBFIGdvdHZpZXc3MTM1X2NvZGVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKKworCVsgMzMgXSA9IEtFWV9QT1dFUiwKKwlbIDEwNV0gPSBLRVlfVFYsCisJWyA1MSBdID0gS0VZX0tQMCwKKwlbIDgxIF0gPSBLRVlfS1AxLAorCVsgNDkgXSA9IEtFWV9LUDIsCisJWyAxMTNdID0gS0VZX0tQMywKKwlbIDU5IF0gPSBLRVlfS1A0LAorCVsgODggXSA9IEtFWV9LUDUsCisJWyA2NSBdID0gS0VZX0tQNiwKKwlbIDcyIF0gPSBLRVlfS1A3LAorCVsgNDggXSA9IEtFWV9LUDgsCisJWyA4MyBdID0gS0VZX0tQOSwKKwlbIDExNV0gPSBLRVlfQUdBSU4sIC8qIExPT1AgKi8KKwlbIDEwIF0gPSBLRVlfQVVESU8sCisJWyA5NyBdID0gS0VZX1BSSU5ULCAvKiBQUkVWSUVXICovCisJWyAxMjJdID0gS0VZX1ZJREVPLAorCVsgMzIgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyA2NCBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMjQgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgODAgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDE2IF0gPSBLRVlfTVVURSwKKwlbIDc0IF0gPSBLRVlfU0VBUkNILAorCVsgMTIzXSA9IEtFWV9TSFVGRkxFLCAvKiBTTkFQU0hPVCAqLworCVsgMzQgXSA9IEtFWV9SRUNPUkQsCisJWyA5OCBdID0gS0VZX1NUT1AsCisJWyAxMjBdID0gS0VZX1BMQVksCisJWyA1NyBdID0gS0VZX1JFV0lORCwKKwlbIDg5IF0gPSBLRVlfUEFVU0UsCisJWyAyNSBdID0gS0VZX0ZPUldBUkQsCisJWyAgOSBdID0gS0VZX1pPT00sCisKKwlbIDgyIF0gPSBLRVlfRjIxLCAvKiBMSVZFIFRJTUVTSElGVCAqLworCVsgMjYgXSA9IEtFWV9GMjIsIC8qIE1JTiBUSU1FU0hJRlQgKi8KKwlbIDU4IF0gPSBLRVlfRjIzLCAvKiBUSU1FU0hJRlQgKi8KKwlbIDExMl0gPSBLRVlfRjI0LCAvKiBOT1JNQUwgVElNRVNISUZUICovCit9OworCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHVycGxldHZbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgzICBdID0gS0VZX1BPV0VSLAorCVsgMHg2ZiBdID0gS0VZX01VVEUsCisJWyAweDEwIF0gPSBLRVlfQkFDS1NQQUNFLCAgICAgICAvKiBSZWNhbGwgKi8KKworCVsgMHgxMSBdID0gS0VZX0tQMCwKKwlbIDB4NCAgXSA9IEtFWV9LUDEsCisJWyAweDUgIF0gPSBLRVlfS1AyLAorCVsgMHg2ICBdID0gS0VZX0tQMywKKwlbIDB4OCAgXSA9IEtFWV9LUDQsCisJWyAweDkgIF0gPSBLRVlfS1A1LAorCVsgMHhhICBdID0gS0VZX0tQNiwKKwlbIDB4YyAgXSA9IEtFWV9LUDcsCisJWyAweGQgIF0gPSBLRVlfS1A4LAorCVsgMHhlICBdID0gS0VZX0tQOSwKKwlbIDB4MTIgXSA9IEtFWV9LUERPVCwgICAgICAgICAgIC8qIDEwMCsgKi8KKworCVsgMHg3ICBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHhiICBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDFhIF0gPSBLRVlfS1BQTFVTLAorCVsgMHgxOCBdID0gS0VZX0tQTUlOVVMsCisJWyAweDE1IF0gPSBLRVlfVVAsCisJWyAweDFkIF0gPSBLRVlfRE9XTiwKKwlbIDB4ZiAgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDEzIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDQ4IF0gPSBLRVlfWk9PTSwKKworCVsgMHgxYiBdID0gS0VZX1ZJREVPLCAgICAgICAgICAgLyogVmlkZW8gc291cmNlICovCisJWyAweDQ5IF0gPSBLRVlfTEFOR1VBR0UsICAgICAgICAvKiBNVFMgU2VsZWN0ICovCisJWyAweDE5IF0gPSBLRVlfU0VBUkNILCAgICAgICAgICAvKiBBdXRvIFNjYW4gKi8KKworCVsgMHg0YiBdID0gS0VZX1JFQ09SRCwKKwlbIDB4NDYgXSA9IEtFWV9QTEFZLAorCVsgMHg0NSBdID0gS0VZX1BBVVNFLCAgICAgICAgICAgLyogUGF1c2UgKi8KKwlbIDB4NDQgXSA9IEtFWV9TVE9QLAorCVsgMHg0MCBdID0gS0VZX0ZPUldBUkQsICAgICAgICAgLyogRm9yd2FyZCA/ICovCisJWyAweDQyIF0gPSBLRVlfUkVXSU5ELCAgICAgICAgICAvKiBCYWNrd2FyZCA/ICovCisKK307CisKK3N0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waW5uYWNsZVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDU5IF0gPSBLRVlfTVVURSwKKwlbIDB4NGEgXSA9IEtFWV9QT1dFUiwKKworCVsgMHgxOCBdID0gS0VZX1RFWFQsCisJWyAweDI2IF0gPSBLRVlfVFYsCisJWyAweDNkIF0gPSBLRVlfUFJJTlQsCisKKwlbIDB4NDggXSA9IEtFWV9SRUQsCisJWyAweDA0IF0gPSBLRVlfR1JFRU4sCisJWyAweDExIF0gPSBLRVlfWUVMTE9XLAorCVsgMHgwMCBdID0gS0VZX0JMVUUsCisKKwlbIDB4MmQgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MWUgXSA9IEtFWV9WT0xVTUVET1dOLAorCisJWyAweDQ5IF0gPSBLRVlfTUVOVSwKKworCVsgMHgxNiBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MTcgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKworCVsgMHgyMCBdID0gS0VZX1VQLAorCVsgMHgyMSBdID0gS0VZX0RPV04sCisJWyAweDIyIF0gPSBLRVlfTEVGVCwKKwlbIDB4MjMgXSA9IEtFWV9SSUdIVCwKKwlbIDB4MGQgXSA9IEtFWV9TRUxFQ1QsCisKKworCisJWyAweDA4IF0gPSBLRVlfQkFDSywKKwlbIDB4MDcgXSA9IEtFWV9SRUZSRVNILAorCisJWyAweDJmIF0gPSBLRVlfWk9PTSwKKwlbIDB4MjkgXSA9IEtFWV9SRUNPUkQsCisKKwlbIDB4NGIgXSA9IEtFWV9QQVVTRSwKKwlbIDB4NGQgXSA9IEtFWV9SRVdJTkQsCisJWyAweDJlIF0gPSBLRVlfUExBWSwKKwlbIDB4NGUgXSA9IEtFWV9GT1JXQVJELAorCVsgMHg1MyBdID0gS0VZX1BSRVZJT1VTLAorCVsgMHg0YyBdID0gS0VZX1NUT1AsCisJWyAweDU0IF0gPSBLRVlfTkVYVCwKKworCVsgMHg2OSBdID0gS0VZX0tQMCwKKwlbIDB4NmEgXSA9IEtFWV9LUDEsCisJWyAweDZiIF0gPSBLRVlfS1AyLAorCVsgMHg2YyBdID0gS0VZX0tQMywKKwlbIDB4NmQgXSA9IEtFWV9LUDQsCisJWyAweDZlIF0gPSBLRVlfS1A1LAorCVsgMHg2ZiBdID0gS0VZX0tQNiwKKwlbIDB4NzAgXSA9IEtFWV9LUDcsCisJWyAweDcxIF0gPSBLRVlfS1A4LAorCVsgMHg3MiBdID0gS0VZX0tQOSwKKworCVsgMHg3NCBdID0gS0VZX0NIQU5ORUwsCisJWyAweDBhIF0gPSBLRVlfQkFDS1NQQUNFLAorfTsKKworLyogTWFwcGluZyBmb3IgdGhlIDI4IGtleSByZW1vdGUgY29udHJvbCBhcyBzZWVuIGF0CisgICBodHRwOi8vd3d3LnNlZG5hY29tcHV0ZXIuY29tL3Bob3RvL2NhcmRidXMtdHYuanBnCisgICBQYXZlbCBNaWhheWxvdiA8YmluQGJhc2guaW5mbz4gKi8KK3N0YXRpYyBJUl9LRVlUQUJfVFlQRSBwY3R2X3NlZG5hX2NvZGVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbICAgIDAgXSA9IEtFWV9LUDAsCisJWyAgICAxIF0gPSBLRVlfS1AxLAorCVsgICAgMiBdID0gS0VZX0tQMiwKKwlbICAgIDMgXSA9IEtFWV9LUDMsCisJWyAgICA0IF0gPSBLRVlfS1A0LAorCVsgICAgNSBdID0gS0VZX0tQNSwKKwlbICAgIDYgXSA9IEtFWV9LUDYsCisJWyAgICA3IF0gPSBLRVlfS1A3LAorCVsgICAgOCBdID0gS0VZX0tQOCwKKwlbICAgIDkgXSA9IEtFWV9LUDksCisKKwlbIDB4MGEgXSA9IEtFWV9BR0FJTiwgICAgICAgICAgLyogUmVjYWxsICovCisJWyAweDBiIF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgwYyBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgwZCBdID0gS0VZX01PREUsICAgICAgICAgICAvKiBTdGVyZW8gKi8KKwlbIDB4MGUgXSA9IEtFWV9TVE9QLAorCVsgMHgwZiBdID0gS0VZX1BSRVZJT1VTU09ORywKKwlbIDB4MTAgXSA9IEtFWV9aT09NLAorCVsgMHgxMSBdID0gS0VZX1RVTkVSLCAgICAgICAgICAvKiBTb3VyY2UgKi8KKwlbIDB4MTIgXSA9IEtFWV9QT1dFUiwKKwlbIDB4MTMgXSA9IEtFWV9NVVRFLAorCVsgMHgxNSBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMHgxOCBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDE5IF0gPSBLRVlfU0hVRkZMRSwgICAgICAgIC8qIFNuYXBzaG90ICovCisJWyAweDFhIF0gPSBLRVlfTkVYVFNPTkcsCisJWyAweDFiIF0gPSBLRVlfVEVYVCwgICAgICAgICAgIC8qIFRpbWUgU2hpZnQgKi8KKwlbIDB4MWMgXSA9IEtFWV9SQURJTywgICAgICAgICAgLyogRk0gUmFkaW8gKi8KKwlbIDB4MWQgXSA9IEtFWV9SRUNPUkQsCisJWyAweDFlIF0gPSBLRVlfUEFVU0UsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEdQSU8gZ2VuZXJpYyBrZXljb2RlIGJ1aWxkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBidWlsZF9rZXkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CkBAIC00MTMsMTMgKzU5MSwxMyBAQAogCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CiAKIAlncGlvID0gc2FhX3JlYWRsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMik7Ci0gICAgICAgIGlmIChpci0+cG9sbGluZykgewotICAgICAgICAgICAgICAgIGlmIChpci0+bGFzdF9ncGlvID09IGdwaW8pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpci0+bGFzdF9ncGlvID0gZ3BpbzsKLSAgICAgICAgfQorCWlmIChpci0+cG9sbGluZykgeworCQlpZiAoaXItPmxhc3RfZ3BpbyA9PSBncGlvKQorCQkJcmV0dXJuIDA7CisJCWlyLT5sYXN0X2dwaW8gPSBncGlvOworCX0KIAotIAlkYXRhID0gaXJfZXh0cmFjdF9iaXRzKGdwaW8sIGlyLT5tYXNrX2tleWNvZGUpOworCWRhdGEgPSBpcl9leHRyYWN0X2JpdHMoZ3BpbywgaXItPm1hc2tfa2V5Y29kZSk7CiAJZHByaW50aygiYnVpbGRfa2V5IGdwaW89MHgleCBtYXNrPTB4JXggZGF0YT0lZFxuIiwKIAkJZ3BpbywgaXItPm1hc2tfa2V5Y29kZSwgZGF0YSk7CiAKQEAgLTQzMiwxMyArNjEwLDg3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDaGlwIHNwZWNpZmljIEkyQyBrZXkgYnVpbGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBnZXRfa2V5X3B1cnBsZXR2KHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBiOworCisJLyogcG9sbCBJUiBjaGlwICovCisJaWYgKDEgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YywmYiwxKSkgeworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogbm8gYnV0dG9uIHByZXNzICovCisJaWYgKGI9PTApCisJCXJldHVybiAwOworCisJLyogcmVwZWF0aW5nICovCisJaWYgKGIgJiAweDgwKQorCQlyZXR1cm4gMTsKKworCSppcl9rZXkgPSBiOworCSppcl9yYXcgPSBiOworCXJldHVybiAxOworfQorCisvKiBUaGUgbmV3IHBpbm5hY2xlIFBDVFYgcmVtb3RlICh3aXRoIHRoZSBjb2xvcmVkIGJ1dHRvbnMpCisgKgorICogUmljYXJkbyBDZXJxdWVpcmEgPHY0bEBjZXJxdWVpcmEub3JnPgorICovCisKK3N0YXRpYyBpbnQgZ2V0X2tleV9waW5uYWNsZShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgYls0XTsKKwl1bnNpZ25lZCBpbnQgc3RhcnQgPSAwLHBhcml0eSA9IDAsY29kZSA9IDA7CisKKwkvKiBwb2xsIElSIGNoaXAgKi8KKwlpZiAoNCAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLGIsNCkpIHsKKwkJaTJjZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAoc3RhcnQgPSAwOyBzdGFydDw0OyBzdGFydCsrKSB7CisJCWlmIChiW3N0YXJ0XSA9PSAweDgwKSB7CisJCQljb2RlPWJbKHN0YXJ0KzMpJTRdOworCQkJcGFyaXR5PWJbKHN0YXJ0KzIpJTRdOworCQl9CisJfQorCisJLyogRW1wdHkgUmVxdWVzdCAqLworCWlmIChwYXJpdHk9PTApCisJCXJldHVybiAwOworCisJLyogUmVwZWF0aW5nLi4uICovCisJaWYgKGlyLT5vbGQgPT0gcGFyaXR5KQorCQlyZXR1cm4gMDsKKworCisJaXItPm9sZCA9IHBhcml0eTsKKworCS8qIFJlZHVjZSBjb2RlIHZhbHVlIHRvIGZpdCBpbnNpZGUgSVJfS0VZVEFCX1NJWkUKKwkgKgorCSAqIHRoaXMgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCByZXN1bHRzIGluIDQyIHVuaXF1ZQorCSAqIGNvZGVzIDwgMTI4CisJICovCisKKwljb2RlICU9IDB4ODg7CisKKwkqaXJfcmF3ID0gY29kZTsKKwkqaXJfa2V5ID0gY29kZTsKKworCWkyY2RwcmludGsoIlBpbm5hY2xlIFBDVFYga2V5ICUwMnhcbiIsIGNvZGUpOworCisJcmV0dXJuIDE7Cit9CisKIAogdm9pZCBzYWE3MTM0X2lucHV0X2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLSAgICAgICAgc3RydWN0IHNhYTcxMzRfaXIgKmlyID0gZGV2LT5yZW1vdGU7CisJc3RydWN0IHNhYTcxMzRfaXIgKmlyID0gZGV2LT5yZW1vdGU7CiAKLSAgICAgICAgaWYgKCFpci0+cG9sbGluZykKKwlpZiAoIWlyLT5wb2xsaW5nKQogCQlidWlsZF9rZXkoZGV2KTsKIH0KIApAQCAtNDY0LDcgKzcxNiw3IEBACiAJaW50IHBvbGxpbmcgICAgICA9IDA7CiAJaW50IGlyX3R5cGUgICAgICA9IElSX1RZUEVfT1RIRVI7CiAKLQlpZiAoIWRldi0+aGFzX3JlbW90ZSkKKwlpZiAoZGV2LT5oYXNfcmVtb3RlICE9IFNBQTcxMzRfUkVNT1RFX0dQSU8pCiAJCXJldHVybiAtRU5PREVWOwogCWlmIChkaXNhYmxlX2lyKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ3Myw3ICs3MjUsOCBAQAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlWSURFTzIwMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVZJREVPMzAwMDoKLSAgICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk06CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk06CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fTUlOSTI6CiAJCWlyX2NvZGVzICAgICA9IGZseXZpZGVvX2NvZGVzOwogCQltYXNrX2tleWNvZGUgPSAweEVDMDAwMDA7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKQEAgLTUxNCwxNCArNzY3LDMzIEBACiAJCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweDQpOwogCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCAweDQpOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1RFUk1JTkFUT1I6CisJCWlyX2NvZGVzICAgICA9IGF2YWNzc21hcnRfY29kZXM7CisJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDFmOworCQltYXNrX2tleXVwICAgPSAweDAwMDA2MDsKKwkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01BTkxJX01UVjAwMjoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwOUZNOgogCQlpcl9jb2RlcyAgICAgPSBtYW5saV9jb2RlczsKIAkJbWFza19rZXljb2RlID0gMHgwMDFmMDA7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDA0MDAwOwotCQltYXNrX2tleWRvd24gPSAweDAwMjAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9TRUROQV9QQ19UVl9DQVJEQlVTOgorCQlpcl9jb2RlcyAgICAgPSBwY3R2X3NlZG5hX2NvZGVzOworCQltYXNrX2tleWNvZGUgPSAweDAwMWYwMDsKKwkJbWFza19rZXl1cCAgID0gMHgwMDQwMDA7CisJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcworCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfR09UVklFV183MTM1OgorCQlpcl9jb2RlcyAgICAgPSBnb3R2aWV3NzEzNV9jb2RlczsKKwkJbWFza19rZXljb2RlID0gMHgwMDAzRUM7CisJCW1hc2tfa2V5dXAgICA9IDB4MDA4MDAwOworCQltYXNrX2tleWRvd24gPSAweDAwMDAxMDsKKwkJcG9sbGluZwkgICAgID0gNTA7IC8vIG1zCisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfUFZSOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfR09MRF9QTFVTSUk6CiAJCWlyX2NvZGVzICAgICA9IHZpZGVvbWF0ZV90dl9wdnJfY29kZXM7CkBAIC01MjksNiArODAxLDEyIEBACiAJCW1hc2tfa2V5dXAgICA9IDB4NDAwMDAwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgorCQlpcl9jb2RlcyAgICAgPSB2aWRlb21hdGVfdHZfcHZyX2NvZGVzOworCQltYXNrX2tleWNvZGUgPSAweDAwM0YwMDsKKwkJbWFza19rZXl1cCAgID0gMHgwNDAwMDA7CisJCWJyZWFrOwogCX0KIAlpZiAoTlVMTCA9PSBpcl9jb2RlcykgewogCQlwcmludGsoIiVzOiBPb3BzOiBJUiBjb25maWcgZXJyb3IgW2NhcmQ9JWRdXG4iLApAQCAtNTQ4LDcgKzgyNiw3IEBACiAJaXItPm1hc2tfa2V5Y29kZSA9IG1hc2tfa2V5Y29kZTsKIAlpci0+bWFza19rZXlkb3duID0gbWFza19rZXlkb3duOwogCWlyLT5tYXNrX2tleXVwICAgPSBtYXNrX2tleXVwOwotICAgICAgICBpci0+cG9sbGluZyAgICAgID0gcG9sbGluZzsKKwlpci0+cG9sbGluZyAgICAgID0gcG9sbGluZzsKIAogCS8qIGluaXQgaW5wdXQgZGV2aWNlICovCiAJc25wcmludGYoaXItPm5hbWUsIHNpemVvZihpci0+bmFtZSksICJzYWE3MTM0IElSICglcykiLApAQCAtNTk2LDYgKzg3NCwzMSBAQAogCWRldi0+cmVtb3RlID0gTlVMTDsKIH0KIAordm9pZCBzYWE3MTM0X3NldF9pMmNfaXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBJUl9pMmMgKmlyKQoreworCWlmIChkaXNhYmxlX2lyKSB7CisJCWRwcmludGsoIkZvdW5kIHN1cHBvcnRlZCBpMmMgcmVtb3RlLCBidXQgSVIgaGFzIGJlZW4gZGlzYWJsZWRcbiIpOworCQlpci0+Z2V0X2tleT1OVUxMOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaToKKwkJc25wcmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUpLCAiUGlubmFjbGUgUENUViIpOworCQlpci0+Z2V0X2tleSAgID0gZ2V0X2tleV9waW5uYWNsZTsKKwkJaXItPmlyX2NvZGVzICA9IGlyX2NvZGVzX3Bpbm5hY2xlOworCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfVVBNT1NUX1BVUlBMRV9UVjoKKwkJc25wcmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUpLCAiUHVycGxlIFRWIik7CisJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X3B1cnBsZXR2OworCQlpci0+aXJfY29kZXMgID0gaXJfY29kZXNfcHVycGxldHY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIlNob3VsZG4ndCBnZXQgaGVyZTogVW5rbm93biBib2FyZCAleCBmb3IgSTJDIElSP1xuIixkZXYtPmJvYXJkKTsKKwkJYnJlYWs7CisJfQorCit9CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBjLWJhc2ljLW9mZnNldDogOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtb3NzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYwppbmRleCBjMjA2MzBjLi5mZDUzZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYwpAQCAtNDQsNiArNDQsNyBAQAogI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKQlpZiAob3NzX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL29zczogIiBmbXQsIGRldi0+bmFtZSAsICMjIGFyZykKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBkc3BfYnVmZmVyX2NvbmYoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIGludCBibGtzaXplLCBpbnQgYmxvY2tzKQpAQCAtNTgsMTIgKzU5LDEyIEBACiAJaWYgKChibGtzaXplICogYmxvY2tzKSA+IDEwMjQqMTAyNCkKIAkJYmxvY2tzID0gMTAyNCoxMDI0IC8gYmxrc2l6ZTsKIAotCWRldi0+b3NzLmJsb2NrcyAgPSBibG9ja3M7Ci0JZGV2LT5vc3MuYmxrc2l6ZSA9IGJsa3NpemU7Ci0JZGV2LT5vc3MuYnVmc2l6ZSA9IGJsa3NpemUgKiBibG9ja3M7CisJZGV2LT5kbWFzb3VuZC5ibG9ja3MgID0gYmxvY2tzOworCWRldi0+ZG1hc291bmQuYmxrc2l6ZSA9IGJsa3NpemU7CisJZGV2LT5kbWFzb3VuZC5idWZzaXplID0gYmxrc2l6ZSAqIGJsb2NrczsKIAogCWRwcmludGsoImJ1ZmZlciBjb25maWc6ICVkIGJsb2NrcyAvICVkIGJ5dGVzLCAlZCBrQiB0b3RhbFxuIiwKLSAJCWJsb2NrcyxibGtzaXplLGJsa3NpemUgKiBibG9ja3MgLyAxMDI0KTsKKwkJYmxvY2tzLGJsa3NpemUsYmxrc2l6ZSAqIGJsb2NrcyAvIDEwMjQpOwogCXJldHVybiAwOwogfQogCkBAIC03MSwxMSArNzIsMTEgQEAKIHsKIAlpbnQgZXJyOwogCi0JaWYgKCFkZXYtPm9zcy5idWZzaXplKQorCWlmICghZGV2LT5kbWFzb3VuZC5idWZzaXplKQogCQlCVUcoKTsKLQl2aWRlb2J1Zl9kbWFfaW5pdCgmZGV2LT5vc3MuZG1hKTsKLQllcnIgPSB2aWRlb2J1Zl9kbWFfaW5pdF9rZXJuZWwoJmRldi0+b3NzLmRtYSwgUENJX0RNQV9GUk9NREVWSUNFLAotCQkJCSAgICAgICAoZGV2LT5vc3MuYnVmc2l6ZSArIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVCk7CisJdmlkZW9idWZfZG1hX2luaXQoJmRldi0+ZG1hc291bmQuZG1hKTsKKwllcnIgPSB2aWRlb2J1Zl9kbWFfaW5pdF9rZXJuZWwoJmRldi0+ZG1hc291bmQuZG1hLCBQQ0lfRE1BX0ZST01ERVZJQ0UsCisJCQkJICAgICAgIChkZXYtPmRtYXNvdW5kLmJ1ZnNpemUgKyBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQpOwogCWlmICgwICE9IGVycikKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTgzLDI2ICs4NCwyNiBAQAogCiBzdGF0aWMgaW50IGRzcF9idWZmZXJfZnJlZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlpZiAoIWRldi0+b3NzLmJsa3NpemUpCisJaWYgKCFkZXYtPmRtYXNvdW5kLmJsa3NpemUpCiAJCUJVRygpOwotCXZpZGVvYnVmX2RtYV9mcmVlKCZkZXYtPm9zcy5kbWEpOwotCWRldi0+b3NzLmJsb2NrcyAgPSAwOwotCWRldi0+b3NzLmJsa3NpemUgPSAwOwotCWRldi0+b3NzLmJ1ZnNpemUgPSAwOworCXZpZGVvYnVmX2RtYV9mcmVlKCZkZXYtPmRtYXNvdW5kLmRtYSk7CisJZGV2LT5kbWFzb3VuZC5ibG9ja3MgID0gMDsKKwlkZXYtPmRtYXNvdW5kLmJsa3NpemUgPSAwOworCWRldi0+ZG1hc291bmQuYnVmc2l6ZSA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRzcF9kbWFfc3RhcnQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7Ci0JZGV2LT5vc3MuZG1hX2JsayAgICAgPSAwOwotCWRldi0+b3NzLmRtYV9ydW5uaW5nID0gMTsKKwlkZXYtPmRtYXNvdW5kLmRtYV9ibGsgICAgID0gMDsKKwlkZXYtPmRtYXNvdW5kLmRtYV9ydW5uaW5nID0gMTsKIAlzYWE3MTM0X3NldF9kbWFiaXRzKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGRzcF9kbWFfc3RvcChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlkZXYtPm9zcy5kbWFfYmxrICAgICA9IC0xOwotCWRldi0+b3NzLmRtYV9ydW5uaW5nID0gMDsKKwlkZXYtPmRtYXNvdW5kLmRtYV9ibGsgICAgID0gLTE7CisJZGV2LT5kbWFzb3VuZC5kbWFfcnVubmluZyA9IDA7CiAJc2FhNzEzNF9zZXRfZG1hYml0cyhkZXYpOwogfQogCkBAIC0xMTMsMTggKzExNCwxOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBwcmVwYXJlIGJ1ZmZlciAqLwotCWlmICgwICE9IChlcnIgPSB2aWRlb2J1Zl9kbWFfcGNpX21hcChkZXYtPnBjaSwmZGV2LT5vc3MuZG1hKSkpCisJaWYgKDAgIT0gKGVyciA9IHZpZGVvYnVmX2RtYV9wY2lfbWFwKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLmRtYSkpKQogCQlyZXR1cm4gZXJyOwotCWlmICgwICE9IChlcnIgPSBzYWE3MTM0X3BndGFibGVfYWxsb2MoZGV2LT5wY2ksJmRldi0+b3NzLnB0KSkpCisJaWYgKDAgIT0gKGVyciA9IHNhYTcxMzRfcGd0YWJsZV9hbGxvYyhkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCkpKQogCQlnb3RvIGZhaWwxOwotCWlmICgwICE9IChlcnIgPSBzYWE3MTM0X3BndGFibGVfYnVpbGQoZGV2LT5wY2ksJmRldi0+b3NzLnB0LAotCQkJCQkgICAgICBkZXYtPm9zcy5kbWEuc2dsaXN0LAotCQkJCQkgICAgICBkZXYtPm9zcy5kbWEuc2dsZW4sCisJaWYgKDAgIT0gKGVyciA9IHNhYTcxMzRfcGd0YWJsZV9idWlsZChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCwKKwkJCQkJICAgICAgZGV2LT5kbWFzb3VuZC5kbWEuc2dsaXN0LAorCQkJCQkgICAgICBkZXYtPmRtYXNvdW5kLmRtYS5zZ2xlbiwKIAkJCQkJICAgICAgMCkpKQogCQlnb3RvIGZhaWwyOwogCiAJLyogc2FtcGxlIGZvcm1hdCAqLwotCXN3aXRjaCAoZGV2LT5vc3MuYWZtdCkgeworCXN3aXRjaCAoZGV2LT5kbWFzb3VuZC5hZm10KSB7CiAJY2FzZSBBRk1UX1U4OgogCWNhc2UgQUZNVF9TODogICAgIGZtdCA9IDB4MDA7ICBicmVhazsKIAljYXNlIEFGTVRfVTE2X0xFOgpAQCAtMTM2LDE0ICsxMzcsMTQgQEAKIAkJZ290byBmYWlsMjsKIAl9CiAKLQlzd2l0Y2ggKGRldi0+b3NzLmFmbXQpIHsKKwlzd2l0Y2ggKGRldi0+ZG1hc291bmQuYWZtdCkgewogCWNhc2UgQUZNVF9TODoKIAljYXNlIEFGTVRfUzE2X0xFOgogCWNhc2UgQUZNVF9TMTZfQkU6IHNpZ24gPSAxOyBicmVhazsKIAlkZWZhdWx0OiAgICAgICAgICBzaWduID0gMDsgYnJlYWs7CiAJfQogCi0Jc3dpdGNoIChkZXYtPm9zcy5hZm10KSB7CisJc3dpdGNoIChkZXYtPmRtYXNvdW5kLmFmbXQpIHsKIAljYXNlIEFGTVRfVTE2X0JFOgogCWNhc2UgQUZNVF9TMTZfQkU6IGJzd2FwID0gMTsgYnJlYWs7CiAJZGVmYXVsdDogICAgICAgICAgYnN3YXAgPSAwOyBicmVhazsKQEAgLTE1MSw1OCArMTUyLDU4IEBACiAKIAlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgotCQlpZiAoMSA9PSBkZXYtPm9zcy5jaGFubmVscykKKwkJaWYgKDEgPT0gZGV2LT5kbWFzb3VuZC5jaGFubmVscykKIAkJCWZtdCB8PSAoMSA8PCAzKTsKLQkJaWYgKDIgPT0gZGV2LT5vc3MuY2hhbm5lbHMpCisJCWlmICgyID09IGRldi0+ZG1hc291bmQuY2hhbm5lbHMpCiAJCQlmbXQgfD0gKDMgPDwgMyk7CiAJCWlmIChzaWduKQogCQkJZm10IHw9IDB4MDQ7Ci0JCWZtdCB8PSAoVFYgPT0gZGV2LT5vc3MuaW5wdXQpID8gMHhjMCA6IDB4ODA7CisJCWZtdCB8PSAoVFYgPT0gZGV2LT5kbWFzb3VuZC5pbnB1dCkgPyAweGMwIDogMHg4MDsKIAotCQlzYWFfd3JpdGViKFNBQTcxMzRfTlVNX1NBTVBMRVMwLCAoKGRldi0+b3NzLmJsa3NpemUgLSAxKSAmIDB4MDAwMGZmKSk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9OVU1fU0FNUExFUzEsICgoZGV2LT5vc3MuYmxrc2l6ZSAtIDEpICYgMHgwMGZmMDApID4+ICA4KTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X05VTV9TQU1QTEVTMiwgKChkZXYtPm9zcy5ibGtzaXplIC0gMSkgJiAweGZmMDAwMCkgPj4gMTYpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfTlVNX1NBTVBMRVMwLCAoKGRldi0+ZG1hc291bmQuYmxrc2l6ZSAtIDEpICYgMHgwMDAwZmYpKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X05VTV9TQU1QTEVTMSwgKChkZXYtPmRtYXNvdW5kLmJsa3NpemUgLSAxKSAmIDB4MDBmZjAwKSA+PiAgOCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9OVU1fU0FNUExFUzIsICgoZGV2LT5kbWFzb3VuZC5ibGtzaXplIC0gMSkgJiAweGZmMDAwMCkgPj4gMTYpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fRk9STUFUX0NUUkwsIGZtdCk7CiAKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM1OgotCQlpZiAoMSA9PSBkZXYtPm9zcy5jaGFubmVscykKKwkJaWYgKDEgPT0gZGV2LT5kbWFzb3VuZC5jaGFubmVscykKIAkJCWZtdCB8PSAoMSA8PCA0KTsKLQkJaWYgKDIgPT0gZGV2LT5vc3MuY2hhbm5lbHMpCisJCWlmICgyID09IGRldi0+ZG1hc291bmQuY2hhbm5lbHMpCiAJCQlmbXQgfD0gKDIgPDwgNCk7CiAJCWlmICghc2lnbikKIAkJCWZtdCB8PSAweDA0OwotCQlzYWFfd3JpdGVsKDB4NTg4ID4+IDIsIGRldi0+b3NzLmJsa3NpemUgLTQpOwotCQlzYWFfd3JpdGVsKDB4NThjID4+IDIsIDB4NTQzMjEwIHwgKGZtdCA8PCAyNCkpOworCQlzYWFfd3JpdGVsKFNBQTcxMzNfTlVNX1NBTVBMRVMsIGRldi0+ZG1hc291bmQuYmxrc2l6ZSAtNCk7CisJCXNhYV93cml0ZWwoU0FBNzEzM19BVURJT19DSEFOTkVMLCAweDU0MzIxMCB8IChmbXQgPDwgMjQpKTsKIAkJYnJlYWs7CiAJfQogCWRwcmludGsoInJlY19zdGFydDogYWZtdD0lZCBjaD0lZCAgPT4gIGZtdD0weCV4IHN3YXA9JWNcbiIsCi0JCWRldi0+b3NzLmFmbXQsIGRldi0+b3NzLmNoYW5uZWxzLCBmbXQsCisJCWRldi0+ZG1hc291bmQuYWZtdCwgZGV2LT5kbWFzb3VuZC5jaGFubmVscywgZm10LAogCQlic3dhcCA/ICdiJyA6ICctJyk7CiAKIAkvKiBkbWE6IHNldHVwIGNoYW5uZWwgNiAoPSBBVURJTykgKi8KIAljb250cm9sID0gU0FBNzEzNF9SU19DT05UUk9MX0JVUlNUXzE2IHwKIAkJU0FBNzEzNF9SU19DT05UUk9MX01FIHwKLQkJKGRldi0+b3NzLnB0LmRtYSA+PiAxMik7CisJCShkZXYtPmRtYXNvdW5kLnB0LmRtYSA+PiAxMik7CiAJaWYgKGJzd2FwKQogCQljb250cm9sIHw9IFNBQTcxMzRfUlNfQ09OVFJPTF9CU1dBUDsKIAlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkExKDYpLDApOwotCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTIoNiksZGV2LT5vc3MuYmxrc2l6ZSk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMig2KSxkZXYtPmRtYXNvdW5kLmJsa3NpemUpOwogCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg2KSwwKTsKIAlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQ09OVFJPTCg2KSxjb250cm9sKTsKIAogCS8qIHN0YXJ0IGRtYSAqLwotCWRldi0+b3NzLnJlY29yZGluZ19vbiA9IDE7CisJZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24gPSAxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLGZsYWdzKTsKIAlkc3BfZG1hX3N0YXJ0KGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jayxmbGFncyk7CiAJcmV0dXJuIDA7CiAKICBmYWlsMjoKLQlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5vc3MucHQpOworCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLnB0KTsKICBmYWlsMToKLQl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKGRldi0+cGNpLCZkZXYtPm9zcy5kbWEpOworCXZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQuZG1hKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMTAsMTcgKzIxMSwxNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkcHJpbnRrKCJyZWNfc3RvcCBkbWFfYmxrPSVkXG4iLGRldi0+b3NzLmRtYV9ibGspOworCWRwcmludGsoInJlY19zdG9wIGRtYV9ibGs9JWRcbiIsZGV2LT5kbWFzb3VuZC5kbWFfYmxrKTsKIAogCS8qIHN0b3AgZG1hICovCi0JZGV2LT5vc3MucmVjb3JkaW5nX29uID0gMDsKKwlkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbiA9IDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssZmxhZ3MpOwogCWRzcF9kbWFfc3RvcChkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssZmxhZ3MpOwogCiAJLyogdW5sb2NrIGJ1ZmZlciAqLwotCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCZkZXYtPm9zcy5wdCk7Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5vc3MuZG1hKTsKKwlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCk7CisJdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzUsMzUgKzIzNiwzNSBAQAogCiAJbGlzdF9mb3JfZWFjaChsaXN0LCZzYWE3MTM0X2Rldmxpc3QpIHsKIAkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNhYTcxMzRfZGV2LCBkZXZsaXN0KTsKLQkJaWYgKGgtPm9zcy5taW5vcl9kc3AgPT0gbWlub3IpCisJCWlmIChoLT5kbWFzb3VuZC5taW5vcl9kc3AgPT0gbWlub3IpCiAJCQlkZXYgPSBoOwogCX0KIAlpZiAoTlVMTCA9PSBkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZG93bigmZGV2LT5vc3MubG9jayk7CisJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAllcnIgPSAtRUJVU1k7Ci0JaWYgKGRldi0+b3NzLnVzZXJzX2RzcCkKKwlpZiAoZGV2LT5kbWFzb3VuZC51c2Vyc19kc3ApCiAJCWdvdG8gZmFpbDE7Ci0JZGV2LT5vc3MudXNlcnNfZHNwKys7CisJZGV2LT5kbWFzb3VuZC51c2Vyc19kc3ArKzsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAKLQlkZXYtPm9zcy5hZm10ICAgICAgICA9IEFGTVRfVTg7Ci0JZGV2LT5vc3MuY2hhbm5lbHMgICAgPSAxOwotCWRldi0+b3NzLnJlYWRfY291bnQgID0gMDsKLQlkZXYtPm9zcy5yZWFkX29mZnNldCA9IDA7CisJZGV2LT5kbWFzb3VuZC5hZm10ICAgICAgICA9IEFGTVRfVTg7CisJZGV2LT5kbWFzb3VuZC5jaGFubmVscyAgICA9IDE7CisJZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ICA9IDA7CisJZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCA9IDA7CiAJZHNwX2J1ZmZlcl9jb25mKGRldixQQUdFX1NJWkUsNjQpOwogCWVyciA9IGRzcF9idWZmZXJfaW5pdChkZXYpOwogCWlmICgwICE9IGVycikKIAkJZ290byBmYWlsMjsKIAotCXVwKCZkZXYtPm9zcy5sb2NrKTsKKwl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAlyZXR1cm4gMDsKIAogIGZhaWwyOgotCWRldi0+b3NzLnVzZXJzX2RzcC0tOworCWRldi0+ZG1hc291bmQudXNlcnNfZHNwLS07CiAgZmFpbDE6Ci0JdXAoJmRldi0+b3NzLmxvY2spOworCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI3MSwxMyArMjcyLDEzIEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlkb3duKCZkZXYtPm9zcy5sb2NrKTsKLQlpZiAoZGV2LT5vc3MucmVjb3JkaW5nX29uKQorCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CisJaWYgKGRldi0+ZG1hc291bmQucmVjb3JkaW5nX29uKQogCQlkc3BfcmVjX3N0b3AoZGV2KTsKIAlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKLQlkZXYtPm9zcy51c2Vyc19kc3AtLTsKKwlkZXYtPmRtYXNvdW5kLnVzZXJzX2RzcC0tOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JdXAoJmRldi0+b3NzLmxvY2spOworCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0yOTAsMTIgKzI5MSwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycixyZXQgPSAwOwogCi0JYWRkX3dhaXRfcXVldWUoJmRldi0+b3NzLndxLCAmd2FpdCk7Ci0JZG93bigmZGV2LT5vc3MubG9jayk7CisJYWRkX3dhaXRfcXVldWUoJmRldi0+ZG1hc291bmQud3EsICZ3YWl0KTsKKwlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCXdoaWxlIChjb3VudCA+IDApIHsKIAkJLyogd2FpdCBmb3IgZGF0YSBpZiBuZWVkZWQgKi8KLQkJaWYgKDAgPT0gZGV2LT5vc3MucmVhZF9jb3VudCkgewotCQkJaWYgKCFkZXYtPm9zcy5yZWNvcmRpbmdfb24pIHsKKwkJaWYgKDAgPT0gZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50KSB7CisJCQlpZiAoIWRldi0+ZG1hc291bmQucmVjb3JkaW5nX29uKSB7CiAJCQkJZXJyID0gZHNwX3JlY19zdGFydChkZXYpOwogCQkJCWlmIChlcnIgPCAwKSB7CiAJCQkJCWlmICgwID09IHJldCkKQEAgLTMwMyw4ICszMDQsOCBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoZGV2LT5vc3MucmVjb3JkaW5nX29uICYmCi0JCQkgICAgIWRldi0+b3NzLmRtYV9ydW5uaW5nKSB7CisJCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24gJiYKKwkJCSAgICAhZGV2LT5kbWFzb3VuZC5kbWFfcnVubmluZykgewogCQkJCS8qIHJlY292ZXIgZnJvbSBvdmVycnVucyAqLwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLGZsYWdzKTsKIAkJCQlkc3BfZG1hX3N0YXJ0KGRldik7CkBAIC0zMTUsMTIgKzMxNiwxMiBAQAogCQkJCQlyZXQgPSAtRUFHQUlOOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdXAoJmRldi0+b3NzLmxvY2spOworCQkJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJaWYgKDAgPT0gZGV2LT5vc3MucmVhZF9jb3VudCkKKwkJCWlmICgwID09IGRldi0+ZG1hc291bmQucmVhZF9jb3VudCkKIAkJCQlzY2hlZHVsZSgpOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCWRvd24oJmRldi0+b3NzLmxvY2spOworCQkJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCWlmICgwID09IHJldCkKIAkJCQkJcmV0ID0gLUVJTlRSOwpAQCAtMzMwLDEyICszMzEsMTIgQEAKIAogCQkvKiBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlICovCiAJCWJ5dGVzID0gY291bnQ7Ci0JCWlmIChieXRlcyA+IGRldi0+b3NzLnJlYWRfY291bnQpCi0JCQlieXRlcyA9IGRldi0+b3NzLnJlYWRfY291bnQ7Ci0JCWlmIChieXRlcyA+IGRldi0+b3NzLmJ1ZnNpemUgLSBkZXYtPm9zcy5yZWFkX29mZnNldCkKLQkJCWJ5dGVzID0gZGV2LT5vc3MuYnVmc2l6ZSAtIGRldi0+b3NzLnJlYWRfb2Zmc2V0OworCQlpZiAoYnl0ZXMgPiBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQpCisJCQlieXRlcyA9IGRldi0+ZG1hc291bmQucmVhZF9jb3VudDsKKwkJaWYgKGJ5dGVzID4gZGV2LT5kbWFzb3VuZC5idWZzaXplIC0gZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCkKKwkJCWJ5dGVzID0gZGV2LT5kbWFzb3VuZC5idWZzaXplIC0gZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldDsKIAkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIgKyByZXQsCi0JCQkJIGRldi0+b3NzLmRtYS52bWFsbG9jICsgZGV2LT5vc3MucmVhZF9vZmZzZXQsCisJCQkJIGRldi0+ZG1hc291bmQuZG1hLnZtYWxsb2MgKyBkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0LAogCQkJCSBieXRlcykpIHsKIAkJCWlmICgwID09IHJldCkKIAkJCQlyZXQgPSAtRUZBVUxUOwpAQCAtMzQ0LDEzICszNDUsMTMgQEAKIAogCQlyZXQgICArPSBieXRlczsKIAkJY291bnQgLT0gYnl0ZXM7Ci0JCWRldi0+b3NzLnJlYWRfY291bnQgIC09IGJ5dGVzOwotCQlkZXYtPm9zcy5yZWFkX29mZnNldCArPSBieXRlczsKLQkJaWYgKGRldi0+b3NzLnJlYWRfb2Zmc2V0ID09IGRldi0+b3NzLmJ1ZnNpemUpCi0JCQlkZXYtPm9zcy5yZWFkX29mZnNldCA9IDA7CisJCWRldi0+ZG1hc291bmQucmVhZF9jb3VudCAgLT0gYnl0ZXM7CisJCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgKz0gYnl0ZXM7CisJCWlmIChkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0ID09IGRldi0+ZG1hc291bmQuYnVmc2l6ZSkKKwkJCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgPSAwOwogCX0KLQl1cCgmZGV2LT5vc3MubG9jayk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+b3NzLndxLCAmd2FpdCk7CisJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+ZG1hc291bmQud3EsICZ3YWl0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzAsNTMgKzM3MSw1MyBAQAogCiAJaWYgKG9zc19kZWJ1ZyA+IDEpCiAJCXNhYTcxMzRfcHJpbnRfaW9jdGwoZGV2LT5uYW1lLGNtZCk7Ci0gICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgT1NTX0dFVFZFUlNJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHApOwotICAgICAgICBjYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgT1NTX0dFVFZFUlNJT046CisJCXJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCBwKTsKKwljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKIAkJcmV0dXJuIDA7CiAKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NQRUVEOgorCWNhc2UgU05EQ1RMX0RTUF9TUEVFRDoKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgIGNhc2UgU09VTkRfUENNX1JFQURfUkFURToKLQkJcmV0dXJuIHB1dF91c2VyKGRldi0+b3NzLnJhdGUsIHApOworCWNhc2UgU09VTkRfUENNX1JFQURfUkFURToKKwkJcmV0dXJuIHB1dF91c2VyKGRldi0+ZG1hc291bmQucmF0ZSwgcCk7CiAKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NURVJFTzoKKwljYXNlIFNORENUTF9EU1BfU1RFUkVPOgogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlkb3duKCZkZXYtPm9zcy5sb2NrKTsKLQkJZGV2LT5vc3MuY2hhbm5lbHMgPSB2YWwgPyAyIDogMTsKLQkJaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbikgeworCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQlkZXYtPmRtYXNvdW5kLmNoYW5uZWxzID0gdmFsID8gMiA6IDE7CisJCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikgewogCQkJZHNwX3JlY19zdG9wKGRldik7CiAJCQlkc3BfcmVjX3N0YXJ0KGRldik7CiAJCX0KLQkJdXAoJmRldi0+b3NzLmxvY2spOwotCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5vc3MuY2hhbm5lbHMtMSwgcCk7CisJCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5kbWFzb3VuZC5jaGFubmVscy0xLCBwKTsKIAotICAgICAgICBjYXNlIFNORENUTF9EU1BfQ0hBTk5FTFM6CisJY2FzZSBTTkRDVExfRFNQX0NIQU5ORUxTOgogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAodmFsICE9IDEgJiYgdmFsICE9IDIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJZG93bigmZGV2LT5vc3MubG9jayk7Ci0JCWRldi0+b3NzLmNoYW5uZWxzID0gdmFsOwotCQlpZiAoZGV2LT5vc3MucmVjb3JkaW5nX29uKSB7CisJCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CisJCWRldi0+ZG1hc291bmQuY2hhbm5lbHMgPSB2YWw7CisJCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikgewogCQkJZHNwX3JlY19zdG9wKGRldik7CiAJCQlkc3BfcmVjX3N0YXJ0KGRldik7CiAJCX0KLQkJdXAoJmRldi0+b3NzLmxvY2spOworCQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgIGNhc2UgU09VTkRfUENNX1JFQURfQ0hBTk5FTFM6Ci0JCXJldHVybiBwdXRfdXNlcihkZXYtPm9zcy5jaGFubmVscywgcCk7CisJY2FzZSBTT1VORF9QQ01fUkVBRF9DSEFOTkVMUzoKKwkJcmV0dXJuIHB1dF91c2VyKGRldi0+ZG1hc291bmQuY2hhbm5lbHMsIHApOwogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9HRVRGTVRTOiAvKiBSZXR1cm5zIGEgbWFzayAqLworCWNhc2UgU05EQ1RMX0RTUF9HRVRGTVRTOiAvKiBSZXR1cm5zIGEgbWFzayAqLwogCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9VOCAgICAgfCBBRk1UX1M4ICAgICB8CiAJCQkJQUZNVF9VMTZfTEUgfCBBRk1UX1UxNl9CRSB8CiAJCQkJQUZNVF9TMTZfTEUgfCBBRk1UX1MxNl9CRSwgcCk7CiAKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogLyogU2VsZWN0cyBPTkUgZm10ICovCisJY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogLyogU2VsZWN0cyBPTkUgZm10ICovCiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXN3aXRjaCAodmFsKSB7CkBAIC00MjksMjAgKzQzMCwyMCBAQAogCQljYXNlIEFGTVRfVTE2X0JFOgogCQljYXNlIEFGTVRfUzE2X0xFOgogCQljYXNlIEFGTVRfUzE2X0JFOgotCQkJZG93bigmZGV2LT5vc3MubG9jayk7Ci0JCQlkZXYtPm9zcy5hZm10ID0gdmFsOwotCQkJaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbikgeworCQkJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJCWRldi0+ZG1hc291bmQuYWZtdCA9IHZhbDsKKwkJCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikgewogCQkJCWRzcF9yZWNfc3RvcChkZXYpOwogCQkJCWRzcF9yZWNfc3RhcnQoZGV2KTsKIAkJCX0KLQkJCXVwKCZkZXYtPm9zcy5sb2NrKTsKLQkJCXJldHVybiBwdXRfdXNlcihkZXYtPm9zcy5hZm10LCBwKTsKKwkJCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQkJcmV0dXJuIHB1dF91c2VyKGRldi0+ZG1hc291bmQuYWZtdCwgcCk7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0gICAgICAgIGNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKLQkJc3dpdGNoIChkZXYtPm9zcy5hZm10KSB7CisJY2FzZSBTT1VORF9QQ01fUkVBRF9CSVRTOgorCQlzd2l0Y2ggKGRldi0+ZG1hc291bmQuYWZtdCkgewogCQljYXNlIEFGTVRfVTg6CiAJCWNhc2UgQUZNVF9TODoKIAkJCXJldHVybiBwdXRfdXNlcig4LCBwKTsKQEAgLTQ1NSwyMyArNDU2LDIzIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKLSAgICAgICAgICAgICAgICBmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1JFU0VUOgotCQlkb3duKCZkZXYtPm9zcy5sb2NrKTsKLQkJaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbikKLQkJCWRzcF9yZWNfc3RvcChkZXYpOwotCQl1cCgmZGV2LT5vc3MubG9jayk7CisJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAJCXJldHVybiAwOwotICAgICAgICBjYXNlIFNORENUTF9EU1BfR0VUQkxLU0laRToKLQkJcmV0dXJuIHB1dF91c2VyKGRldi0+b3NzLmJsa3NpemUsIHApOwogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDoKKwljYXNlIFNORENUTF9EU1BfUkVTRVQ6CisJCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CisJCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikKKwkJCWRzcF9yZWNfc3RvcChkZXYpOworCQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6CisJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmJsa3NpemUsIHApOworCisJY2FzZSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOgogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoZGV2LT5vc3MucmVjb3JkaW5nX29uKQorCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKIAkJLyogdXNlZCB0byBiZSBhcmcgPj4gMTYgaW5zdGVhZCBvZiB2YWwgPj4gMTY7IGZpeGVkICovCkBAIC00NzksMTYgKzQ4MCwxNiBAQAogCQlkc3BfYnVmZmVyX2luaXQoZGV2KTsKIAkJcmV0dXJuIDA7CiAKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NZTkM6CisJY2FzZSBTTkRDVExfRFNQX1NZTkM6CiAJCS8qIE5PUCAqLwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9HRVRJU1BBQ0U6CiAJewogCQlhdWRpb19idWZfaW5mbyBpbmZvOwotCQlpbmZvLmZyYWdzaXplICAgPSBkZXYtPm9zcy5ibGtzaXplOwotCQlpbmZvLmZyYWdzdG90YWwgPSBkZXYtPm9zcy5ibG9ja3M7Ci0JCWluZm8uYnl0ZXMgICAgICA9IGRldi0+b3NzLnJlYWRfY291bnQ7CisJCWluZm8uZnJhZ3NpemUgICA9IGRldi0+ZG1hc291bmQuYmxrc2l6ZTsKKwkJaW5mby5mcmFnc3RvdGFsID0gZGV2LT5kbWFzb3VuZC5ibG9ja3M7CisJCWluZm8uYnl0ZXMgICAgICA9IGRldi0+ZG1hc291bmQucmVhZF9jb3VudDsKIAkJaW5mby5mcmFnbWVudHMgID0gaW5mby5ieXRlcyAvIGluZm8uZnJhZ3NpemU7CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTUwNCwxMyArNTA1LDEzIEBACiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0JcG9sbF93YWl0KGZpbGUsICZkZXYtPm9zcy53cSwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGUsICZkZXYtPmRtYXNvdW5kLndxLCB3YWl0KTsKIAotCWlmICgwID09IGRldi0+b3NzLnJlYWRfY291bnQpIHsKLQkJZG93bigmZGV2LT5vc3MubG9jayk7Ci0JCWlmICghZGV2LT5vc3MucmVjb3JkaW5nX29uKQorCWlmICgwID09IGRldi0+ZG1hc291bmQucmVhZF9jb3VudCkgeworCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQlpZiAoIWRldi0+ZG1hc291bmQucmVjb3JkaW5nX29uKQogCQkJZHNwX3JlY19zdGFydChkZXYpOwotCQl1cCgmZGV2LT5vc3MubG9jayk7CisJCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCX0gZWxzZQogCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKIAlyZXR1cm4gbWFzazsKQEAgLTUzNCw3ICs1MzUsNyBAQAogewogCWludCBhbmFsb2dfaW8scmF0ZTsKIAotCXN3aXRjaCAoZGV2LT5vc3MuaW5wdXQpIHsKKwlzd2l0Y2ggKGRldi0+ZG1hc291bmQuaW5wdXQpIHsKIAljYXNlIFRWOgogCQlzYWFfYW5kb3JiKFNBQTcxMzRfQVVESU9fRk9STUFUX0NUUkwsIDB4YzAsIDB4YzApOwogCQlzYWFfYW5kb3JiKFNBQTcxMzRfU0lGX1NBTVBMRV9GUkVRLCAgIDB4MDMsIDB4MDApOwpAQCAtNTQyLDggKzU0Myw4IEBACiAJY2FzZSBMSU5FMToKIAljYXNlIExJTkUyOgogCWNhc2UgTElORTJfTEVGVDoKLQkJYW5hbG9nX2lvID0gKExJTkUxID09IGRldi0+b3NzLmlucHV0KSA/IDB4MDAgOiAweDA4OwotCQlyYXRlID0gKDMyMDAwID09IGRldi0+b3NzLnJhdGUpID8gMHgwMSA6IDB4MDM7CisJCWFuYWxvZ19pbyA9IChMSU5FMSA9PSBkZXYtPmRtYXNvdW5kLmlucHV0KSA/IDB4MDAgOiAweDA4OworCQlyYXRlID0gKDMyMDAwID09IGRldi0+ZG1hc291bmQucmF0ZSkgPyAweDAxIDogMHgwMzsKIAkJc2FhX2FuZG9yYihTQUE3MTM0X0FOQUxPR19JT19TRUxFQ1QsICAweDA4LCBhbmFsb2dfaW8pOwogCQlzYWFfYW5kb3JiKFNBQTcxMzRfQVVESU9fRk9STUFUX0NUUkwsIDB4YzAsIDB4ODApOwogCQlzYWFfYW5kb3JiKFNBQTcxMzRfU0lGX1NBTVBMRV9GUkVRLCAgIDB4MDMsIHJhdGUpOwpAQCAtNTU5LDEwICs1NjAsMTAgQEAKIAogCXhiYXJpbiA9IDB4MDM7IC8vIGFkYwogICAgIGFuYWJhciA9IDA7Ci0Jc3dpdGNoIChkZXYtPm9zcy5pbnB1dCkgeworCXN3aXRjaCAoZGV2LT5kbWFzb3VuZC5pbnB1dCkgewogCWNhc2UgVFY6CiAJCXhiYXJpbiA9IDA7IC8vIERlbW9kdWxhdG9yCi0gICAgICAgIGFuYWJhciA9IDI7IC8vIERBQ3MKKwlhbmFiYXIgPSAyOyAvLyBEQUNzCiAJCWJyZWFrOwogCWNhc2UgTElORTE6CiAJCWFuYWJhciA9IDA7ICAvLyBhdXgxLCBhdXgxCkBAIC01ODUsOSArNTg2LDkgQEAKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVbXSA9IHsgIk9vcHMiLCAiVFYiLCAiTElORTEiLCAiTElORTIiIH07CiAKLQlkZXYtPm9zcy5jb3VudCsrOwotCWRldi0+b3NzLmlucHV0ID0gc3JjOwotCWRwcmludGsoIm1peGVyIGlucHV0ID0gJXNcbiIsaW5hbWVbZGV2LT5vc3MuaW5wdXRdKTsKKwlkZXYtPmRtYXNvdW5kLmNvdW50Kys7CisJZGV2LT5kbWFzb3VuZC5pbnB1dCA9IHNyYzsKKwlkcHJpbnRrKCJtaXhlciBpbnB1dCA9ICVzXG4iLGluYW1lW2Rldi0+ZG1hc291bmQuaW5wdXRdKTsKIAogCXN3aXRjaCAoZGV2LT5wY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQ6CkBAIC02MzksNyArNjQwLDcgQEAKIAogCWxpc3RfZm9yX2VhY2gobGlzdCwmc2FhNzEzNF9kZXZsaXN0KSB7CiAJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzYWE3MTM0X2RldiwgZGV2bGlzdCk7Ci0JCWlmIChoLT5vc3MubWlub3JfbWl4ZXIgPT0gbWlub3IpCisJCWlmIChoLT5kbWFzb3VuZC5taW5vcl9taXhlciA9PSBtaW5vcikKIAkJCWRldiA9IGg7CiAJfQogCWlmIChOVUxMID09IGRldikKQEAgLTY2NiwyOCArNjY3LDI4IEBACiAKIAlpZiAob3NzX2RlYnVnID4gMSkKIAkJc2FhNzEzNF9wcmludF9pb2N0bChkZXYtPm5hbWUsY21kKTsKLSAgICAgICAgc3dpdGNoIChjbWQpIHsKLSAgICAgICAgY2FzZSBPU1NfR0VUVkVSU0lPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgcCk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE9TU19HRVRWRVJTSU9OOgorCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgcCk7CiAJY2FzZSBTT1VORF9NSVhFUl9JTkZPOgogCXsKIAkJbWl4ZXJfaW5mbyBpbmZvOwogCQltZW1zZXQoJmluZm8sMCxzaXplb2YoaW5mbykpOwotICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5pZCwgICAiVFYgYXVkaW8iLCBzaXplb2YoaW5mby5pZCkpOwotICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5uYW1lLCBkZXYtPm5hbWUsICBzaXplb2YoaW5mby5uYW1lKSk7Ci0gICAgICAgICAgICAgICAgaW5mby5tb2RpZnlfY291bnRlciA9IGRldi0+b3NzLmNvdW50OwotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJc3RybGNweShpbmZvLmlkLCAgICJUViBhdWRpbyIsIHNpemVvZihpbmZvLmlkKSk7CisJCXN0cmxjcHkoaW5mby5uYW1lLCBkZXYtPm5hbWUsICBzaXplb2YoaW5mby5uYW1lKSk7CisJCWluZm8ubW9kaWZ5X2NvdW50ZXIgPSBkZXYtPmRtYXNvdW5kLmNvdW50OworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFNPVU5EX09MRF9NSVhFUl9JTkZPOgogCXsKIAkJX29sZF9taXhlcl9pbmZvIGluZm87CiAJCW1lbXNldCgmaW5mbywwLHNpemVvZihpbmZvKSk7Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLmlkLCAgICJUViBhdWRpbyIsIHNpemVvZihpbmZvLmlkKSk7Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLm5hbWUsIGRldi0+bmFtZSwgIHNpemVvZihpbmZvLm5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCXN0cmxjcHkoaW5mby5pZCwgICAiVFYgYXVkaW8iLCBzaXplb2YoaW5mby5pZCkpOworCQlzdHJsY3B5KGluZm8ubmFtZSwgZGV2LT5uYW1lLCAgc2l6ZW9mKGluZm8ubmFtZSkpOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQ0FQUyk6CkBAIC02OTcsMjYgKzY5OCwyNiBAQAogCWNhc2UgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9SRUNNQVNLKToKIAljYXNlIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfREVWTUFTSyk6CiAJCXZhbCA9IFNPVU5EX01BU0tfTElORTEgfCBTT1VORF9NQVNLX0xJTkUyOwotCQlpZiAoMzIwMDAgPT0gZGV2LT5vc3MucmF0ZSkKKwkJaWYgKDMyMDAwID09IGRldi0+ZG1hc291bmQucmF0ZSkKIAkJCXZhbCB8PSBTT1VORF9NQVNLX1ZJREVPOwogCQlyZXR1cm4gcHV0X3VzZXIodmFsLCBwKTsKIAogCWNhc2UgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfUkVDU1JDKToKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaW5wdXQgPSBkZXYtPm9zcy5pbnB1dDsKLQkJaWYgKDMyMDAwID09IGRldi0+b3NzLnJhdGUgICYmCi0JCSAgICB2YWwgJiBTT1VORF9NQVNLX1ZJREVPICAmJiAgZGV2LT5vc3MuaW5wdXQgIT0gVFYpCisJCWlucHV0ID0gZGV2LT5kbWFzb3VuZC5pbnB1dDsKKwkJaWYgKDMyMDAwID09IGRldi0+ZG1hc291bmQucmF0ZSAgJiYKKwkJICAgIHZhbCAmIFNPVU5EX01BU0tfVklERU8gICYmICBkZXYtPmRtYXNvdW5kLmlucHV0ICE9IFRWKQogCQkJaW5wdXQgPSBUVjsKLQkJaWYgKHZhbCAmIFNPVU5EX01BU0tfTElORTEgICYmICBkZXYtPm9zcy5pbnB1dCAhPSBMSU5FMSkKKwkJaWYgKHZhbCAmIFNPVU5EX01BU0tfTElORTEgICYmICBkZXYtPmRtYXNvdW5kLmlucHV0ICE9IExJTkUxKQogCQkJaW5wdXQgPSBMSU5FMTsKLQkJaWYgKHZhbCAmIFNPVU5EX01BU0tfTElORTIgICYmICBkZXYtPm9zcy5pbnB1dCAhPSBMSU5FMikKKwkJaWYgKHZhbCAmIFNPVU5EX01BU0tfTElORTIgICYmICBkZXYtPmRtYXNvdW5kLmlucHV0ICE9IExJTkUyKQogCQkJaW5wdXQgPSBMSU5FMjsKLQkJaWYgKGlucHV0ICE9IGRldi0+b3NzLmlucHV0KQorCQlpZiAoaW5wdXQgIT0gZGV2LT5kbWFzb3VuZC5pbnB1dCkKIAkJCW1peGVyX3JlY3NyYyhkZXYsaW5wdXQpOwogCQkvKiBmYWxsIHRocm91dGggKi8KIAljYXNlIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDU1JDKToKLQkJc3dpdGNoIChkZXYtPm9zcy5pbnB1dCkgeworCQlzd2l0Y2ggKGRldi0+ZG1hc291bmQuaW5wdXQpIHsKIAkJY2FzZSBUVjogICAgcmV0ID0gU09VTkRfTUFTS19WSURFTzsgYnJlYWs7CiAJCWNhc2UgTElORTE6IHJldCA9IFNPVU5EX01BU0tfTElORTE7IGJyZWFrOwogCQljYXNlIExJTkUyOiByZXQgPSBTT1VORF9NQVNLX0xJTkUyOyBicmVhazsKQEAgLTcyNiw3ICs3MjcsNyBAQAogCiAJY2FzZSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9WSURFTyk6CiAJY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1ZJREVPKToKLQkJaWYgKDMyMDAwICE9IGRldi0+b3NzLnJhdGUpCisJCWlmICgzMjAwMCAhPSBkZXYtPmRtYXNvdW5kLnJhdGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIHB1dF91c2VyKDEwMCB8IDEwMCA8PCA4LCBwKTsKIApAQCAtNzM1LDIyICs3MzYsMjIgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQl2YWwgJj0gMHhmZjsKIAkJdmFsID0gKHZhbCA8PSA1MCkgPyA1MCA6IDEwMDsKLQkJZGV2LT5vc3MubGluZTEgPSB2YWw7Ci0JCW1peGVyX2xldmVsKGRldixMSU5FMSxkZXYtPm9zcy5saW5lMSk7CisJCWRldi0+ZG1hc291bmQubGluZTEgPSB2YWw7CisJCW1peGVyX2xldmVsKGRldixMSU5FMSxkZXYtPmRtYXNvdW5kLmxpbmUxKTsKIAkJLyogZmFsbCB0aHJvdXRoICovCiAJY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUxKToKLQkJcmV0dXJuIHB1dF91c2VyKGRldi0+b3NzLmxpbmUxIHwgZGV2LT5vc3MubGluZTEgPDwgOCwgcCk7CisJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmxpbmUxIHwgZGV2LT5kbWFzb3VuZC5saW5lMSA8PCA4LCBwKTsKIAogCWNhc2UgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTIpOgogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQl2YWwgJj0gMHhmZjsKIAkJdmFsID0gKHZhbCA8PSA1MCkgPyA1MCA6IDEwMDsKLQkJZGV2LT5vc3MubGluZTIgPSB2YWw7Ci0JCW1peGVyX2xldmVsKGRldixMSU5FMixkZXYtPm9zcy5saW5lMik7CisJCWRldi0+ZG1hc291bmQubGluZTIgPSB2YWw7CisJCW1peGVyX2xldmVsKGRldixMSU5FMixkZXYtPmRtYXNvdW5kLmxpbmUyKTsKIAkJLyogZmFsbCB0aHJvdXRoICovCiAJY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUyKToKLQkJcmV0dXJuIHB1dF91c2VyKGRldi0+b3NzLmxpbmUyIHwgZGV2LT5vc3MubGluZTIgPDwgOCwgcCk7CisJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmxpbmUyIHwgZGV2LT5kbWFzb3VuZC5saW5lMiA8PCA4LCBwKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzcwLDggKzc3MSw4IEBACiBpbnQgc2FhNzEzNF9vc3NfaW5pdDEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CiAJLyogZ2VuZXJhbCAqLwotICAgICAgICBpbml0X01VVEVYKCZkZXYtPm9zcy5sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPm9zcy53cSk7CisJaW5pdF9NVVRFWCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPmRtYXNvdW5kLndxKTsKIAogCXN3aXRjaCAoZGV2LT5wY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6CkBAIC03ODMsMTcgKzc4NCwxNyBAQAogCX0KIAogCS8qIGRzcCAqLwotCWRldi0+b3NzLnJhdGUgPSAzMjAwMDsKKwlkZXYtPmRtYXNvdW5kLnJhdGUgPSAzMjAwMDsKIAlpZiAob3NzX3JhdGUpCi0JCWRldi0+b3NzLnJhdGUgPSBvc3NfcmF0ZTsKLQlkZXYtPm9zcy5yYXRlID0gKGRldi0+b3NzLnJhdGUgPiA0MDAwMCkgPyA0ODAwMCA6IDMyMDAwOworCQlkZXYtPmRtYXNvdW5kLnJhdGUgPSBvc3NfcmF0ZTsKKwlkZXYtPmRtYXNvdW5kLnJhdGUgPSAoZGV2LT5kbWFzb3VuZC5yYXRlID4gNDAwMDApID8gNDgwMDAgOiAzMjAwMDsKIAogCS8qIG1peGVyICovCi0JZGV2LT5vc3MubGluZTEgPSA1MDsKLQlkZXYtPm9zcy5saW5lMiA9IDUwOwotCW1peGVyX2xldmVsKGRldixMSU5FMSxkZXYtPm9zcy5saW5lMSk7Ci0JbWl4ZXJfbGV2ZWwoZGV2LExJTkUyLGRldi0+b3NzLmxpbmUyKTsKLQltaXhlcl9yZWNzcmMoZGV2LCAoZGV2LT5vc3MucmF0ZSA9PSAzMjAwMCkgPyBUViA6IExJTkUyKTsKKwlkZXYtPmRtYXNvdW5kLmxpbmUxID0gNTA7CisJZGV2LT5kbWFzb3VuZC5saW5lMiA9IDUwOworCW1peGVyX2xldmVsKGRldixMSU5FMSxkZXYtPmRtYXNvdW5kLmxpbmUxKTsKKwltaXhlcl9sZXZlbChkZXYsTElORTIsZGV2LT5kbWFzb3VuZC5saW5lMik7CisJbWl4ZXJfcmVjc3JjKGRldiwgKGRldi0+ZG1hc291bmQucmF0ZSA9PSAzMjAwMCkgPyBUViA6IExJTkUyKTsKIAogCXJldHVybiAwOwogfQpAQCAtODA5LDcgKzgxMCw3IEBACiAJaW50IG5leHRfYmxrLCByZWcgPSAwOwogCiAJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKLQlpZiAoVU5TRVQgPT0gZGV2LT5vc3MuZG1hX2JsaykgeworCWlmIChVTlNFVCA9PSBkZXYtPmRtYXNvdW5kLmRtYV9ibGspIHsKIAkJZHByaW50aygiaXJxOiByZWNvcmRpbmcgc3RvcHBlZFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC04MTcsMTEgKzgxOCwxMSBAQAogCQlkcHJpbnRrKCJpcnE6IGxvc3QgJWxkXG4iLCAoc3RhdHVzID4+IDI0KSAmIDB4MGYpOwogCWlmICgwID09IChzdGF0dXMgJiAweDEwMDAwMDAwKSkgewogCQkvKiBvZGQgKi8KLQkJaWYgKDAgPT0gKGRldi0+b3NzLmRtYV9ibGsgJiAweDAxKSkKKwkJaWYgKDAgPT0gKGRldi0+ZG1hc291bmQuZG1hX2JsayAmIDB4MDEpKQogCQkJcmVnID0gU0FBNzEzNF9SU19CQTEoNik7CiAJfSBlbHNlIHsKIAkJLyogZXZlbiAqLwotCQlpZiAoMSA9PSAoZGV2LT5vc3MuZG1hX2JsayAmIDB4MDEpKQorCQlpZiAoMSA9PSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICYgMHgwMSkpCiAJCQlyZWcgPSBTQUE3MTM0X1JTX0JBMig2KTsKIAl9CiAJaWYgKDAgPT0gcmVnKSB7CkBAIC04MjksMjUgKzgzMCwyNSBAQAogCQkJKHN0YXR1cyAmIDB4MTAwMDAwMDApID8gImV2ZW4iIDogIm9kZCIpOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmIChkZXYtPm9zcy5yZWFkX2NvdW50ID49IGRldi0+b3NzLmJsa3NpemUgKiAoZGV2LT5vc3MuYmxvY2tzLTIpKSB7Ci0JCWRwcmludGsoImlycTogb3ZlcnJ1biBbZnVsbD0lZC8lZF1cbiIsZGV2LT5vc3MucmVhZF9jb3VudCwKLQkJCWRldi0+b3NzLmJ1ZnNpemUpOworCWlmIChkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQgPj0gZGV2LT5kbWFzb3VuZC5ibGtzaXplICogKGRldi0+ZG1hc291bmQuYmxvY2tzLTIpKSB7CisJCWRwcmludGsoImlycTogb3ZlcnJ1biBbZnVsbD0lZC8lZF1cbiIsZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50LAorCQkJZGV2LT5kbWFzb3VuZC5idWZzaXplKTsKIAkJZHNwX2RtYV9zdG9wKGRldik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBuZXh0IGJsb2NrIGFkZHIgKi8KLQluZXh0X2JsayA9IChkZXYtPm9zcy5kbWFfYmxrICsgMikgJSBkZXYtPm9zcy5ibG9ja3M7Ci0Jc2FhX3dyaXRlbChyZWcsbmV4dF9ibGsgKiBkZXYtPm9zcy5ibGtzaXplKTsKKwluZXh0X2JsayA9IChkZXYtPmRtYXNvdW5kLmRtYV9ibGsgKyAyKSAlIGRldi0+ZG1hc291bmQuYmxvY2tzOworCXNhYV93cml0ZWwocmVnLG5leHRfYmxrICogZGV2LT5kbWFzb3VuZC5ibGtzaXplKTsKIAlpZiAob3NzX2RlYnVnID4gMikKIAkJZHByaW50aygiaXJxOiBvaywgJXMsIG5leHRfYmxrPSVkLCBhZGRyPSV4XG4iLAogCQkJKHN0YXR1cyAmIDB4MTAwMDAwMDApID8gImV2ZW4iIDogIm9kZCAiLCBuZXh0X2JsaywKLQkJCW5leHRfYmxrICogZGV2LT5vc3MuYmxrc2l6ZSk7CisJCQluZXh0X2JsayAqIGRldi0+ZG1hc291bmQuYmxrc2l6ZSk7CiAKIAkvKiB1cGRhdGUgc3RhdHVzICYgd2FrZSB3YWl0aW5nIHJlYWRlcnMgKi8KLQlkZXYtPm9zcy5kbWFfYmxrID0gKGRldi0+b3NzLmRtYV9ibGsgKyAxKSAlIGRldi0+b3NzLmJsb2NrczsKLQlkZXYtPm9zcy5yZWFkX2NvdW50ICs9IGRldi0+b3NzLmJsa3NpemU7Ci0Jd2FrZV91cCgmZGV2LT5vc3Mud3EpOworCWRldi0+ZG1hc291bmQuZG1hX2JsayA9IChkZXYtPmRtYXNvdW5kLmRtYV9ibGsgKyAxKSAlIGRldi0+ZG1hc291bmQuYmxvY2tzOworCWRldi0+ZG1hc291bmQucmVhZF9jb3VudCArPSBkZXYtPmRtYXNvdW5kLmJsa3NpemU7CisJd2FrZV91cCgmZGV2LT5kbWFzb3VuZC53cSk7CiAKICBkb25lOgogCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtcmVnLmgKaW5kZXggYWUwYzdhMS4uYWM2NDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtcmVnLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyogRE1BIGNoYW5uZWxzLCBuID0gMCAuLi4gNiAqLwogI2RlZmluZSBTQUE3MTM0X1JTX0JBMShuKQkJCSgoMHgyMDAgPj4gMikgKyA0Km4pCi0jZGVmaW5lIFNBQTcxMzRfUlNfQkEyKG4pCSAgICAgICAJCSgoMHgyMDQgPj4gMikgKyA0Km4pCisjZGVmaW5lIFNBQTcxMzRfUlNfQkEyKG4pCQkJKCgweDIwNCA+PiAyKSArIDQqbikKICNkZWZpbmUgU0FBNzEzNF9SU19QSVRDSChuKQkJCSgoMHgyMDggPj4gMikgKyA0Km4pCiAjZGVmaW5lIFNBQTcxMzRfUlNfQ09OVFJPTChuKQkJCSgoMHgyMGMgPj4gMikgKyA0Km4pCiAjZGVmaW5lICAgU0FBNzEzNF9SU19DT05UUk9MX1dTV0FQCQkoMHgwMSA8PCAyNSkKQEAgLTQzLDE2ICs0MywyNCBAQAogI2RlZmluZSBTQUE3MTM0X0ZJRk9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgKDB4MmEwID4+IDIpCiAjZGVmaW5lIFNBQTcxMzRfVEhSRVNIT1VMRCAgICAgICAgICAgICAgICAgICAgICAoMHgyYTQgPj4gMikKIAorI2RlZmluZSBTQUE3MTMzX05VTV9TQU1QTEVTCQkJKDB4NTg4ID4+IDIpCisjZGVmaW5lIFNBQTcxMzNfQVVESU9fQ0hBTk5FTAkJCSgweDU4YyA+PiAyKQorI2RlZmluZSBTQUE3MTMzX0FVRElPX0ZPUk1BVAkJCSgweDU4ZiA+PiAyKQorI2RlZmluZSBTQUE3MTMzX0RJR0lUQUxfT1VUUFVUX1NFTDEJCSgweDQ2YyA+PiAyKQorI2RlZmluZSBTQUE3MTMzX0RJR0lUQUxfT1VUUFVUX1NFTDIJCSgweDQ3MCA+PiAyKQorI2RlZmluZSBTQUE3MTMzX0RJR0lUQUxfSU5QVVRfWEJBUjEJCSgweDQ2NCA+PiAyKQorI2RlZmluZSBTQUE3MTMzX0FOQUxPR19JT19TRUxFQ1QgICAgICAgICAgICAgICAgKDB4NTk0ID4+IDIpCisKIC8qIG1haW4gY29udHJvbCAqLwogI2RlZmluZSBTQUE3MTM0X01BSU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgKDB4MmE4ID4+IDIpCi0jZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfVlBMTEUJICAgICAgIAkoMSA8PCAxNSkKLSNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9BUExMRQkgICAgICAgCSgxIDw8IDE0KQotI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VYT1NDCSAgICAgICAJKDEgPDwgMTMpCi0jZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRVZGRTEJICAgICAgIAkoMSA8PCAxMikKLSNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9FVkZFMgkgICAgICAgCSgxIDw8IDExKQotI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VTRkUJICAgICAgIAkoMSA8PCAxMCkKLSNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9FQkFEQwkgICAgICAgCSgxIDw8IDkpCi0jZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRUJEQUMJICAgICAgIAkoMSA8PCA4KQorI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX1ZQTExFCQkoMSA8PCAxNSkKKyNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9BUExMRQkJKDEgPDwgMTQpCisjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRVhPU0MJCSgxIDw8IDEzKQorI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VWRkUxCQkoMSA8PCAxMikKKyNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9FVkZFMgkJKDEgPDwgMTEpCisjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRVNGRQkJKDEgPDwgMTApCisjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRUJBREMJCSgxIDw8IDkpCisjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRUJEQUMJCSgxIDw8IDgpCiAjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfVEU2CQkJKDEgPDwgNikKICNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9URTUJCQkoMSA8PCA1KQogI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX1RFNAkJCSgxIDw8IDQpCkBAIC0zNDgsNiArMzU2LDcgQEAKIAogLyogdGVzdCBtb2RlcyAqLwogI2RlZmluZSBTQUE3MTM0X1NQRUNJQUxfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgxZDAKKyNkZWZpbmUgU0FBNzEzNF9QUk9EVUNUSU9OX1RFU1RfTU9ERSAgICAgICAgICAgIDB4MWQxCiAKIC8qIGF1ZGlvIC0tIHNhYTcxMzMgKyBzYWE3MTM1IG9ubHkgKi8KICNkZWZpbmUgU0FBNzEzNV9EU1BfUldTVEFURSAgICAgICAgICAgICAgICAgICAgIDB4NTgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwppbmRleCA0NjM4ODU2Li40NzA5MDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKQEAgLTQ2LDE3ICs0NiwxMSBAQAogCQkJICAgc3RydWN0IHNhYTcxMzRfYnVmICpidWYsCiAJCQkgICBzdHJ1Y3Qgc2FhNzEzNF9idWYgKm5leHQpCiB7Ci0JdTMyIGNvbnRyb2w7CiAKIAlkcHJpbnRrKCJidWZmZXJfYWN0aXZhdGUgWyVwXSIsYnVmKTsKIAlidWYtPnZiLnN0YXRlID0gU1RBVEVfQUNUSVZFOwogCWJ1Zi0+dG9wX3NlZW4gPSAwOwogCi0gICAgICAgIC8qIGRtYTogc2V0dXAgY2hhbm5lbCA1ICg9IFRTKSAqLwotICAgICAgICBjb250cm9sID0gU0FBNzEzNF9SU19DT05UUk9MX0JVUlNUXzE2IHwKLSAgICAgICAgICAgICAgICBTQUE3MTM0X1JTX0NPTlRST0xfTUUgfAotICAgICAgICAgICAgICAgIChidWYtPnB0LT5kbWEgPj4gMTIpOwotCiAJaWYgKE5VTEwgPT0gbmV4dCkKIAkJbmV4dCA9IGJ1ZjsKIAlpZiAoVjRMMl9GSUVMRF9UT1AgPT0gYnVmLT52Yi5maWVsZCkgewpAQCAtNjgsOCArNjIsNiBAQAogCQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkExKDUpLHNhYTcxMzRfYnVmZmVyX2Jhc2UobmV4dCkpOwogCQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkEyKDUpLHNhYTcxMzRfYnVmZmVyX2Jhc2UoYnVmKSk7CiAJfQotCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg1KSxUU19QQUNLRVRfU0laRSk7Ci0Jc2FhX3dyaXRlbChTQUE3MTM0X1JTX0NPTlRST0woNSksY29udHJvbCk7CiAKIAkvKiBzdGFydCBETUEgKi8KIAlzYWE3MTM0X3NldF9kbWFiaXRzKGRldik7CkBAIC04NCw2ICs3Niw3IEBACiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBxLT5wcml2X2RhdGE7CiAJc3RydWN0IHNhYTcxMzRfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IHNhYTcxMzRfYnVmLHZiKTsKIAl1bnNpZ25lZCBpbnQgbGluZXMsIGxsZW5ndGgsIHNpemU7CisJdTMyIGNvbnRyb2w7CiAJaW50IGVycjsKIAogCWRwcmludGsoImJ1ZmZlcl9wcmVwYXJlIFslcCwlc11cbiIsYnVmLHY0bDJfZmllbGRfbmFtZXNbZmllbGRdKTsKQEAgLTExNSw2ICsxMDgsMTggQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb29wczsKIAl9CisKKwkvKiBkbWE6IHNldHVwIGNoYW5uZWwgNSAoPSBUUykgKi8KKwljb250cm9sID0gU0FBNzEzNF9SU19DT05UUk9MX0JVUlNUXzE2IHwKKwkJICBTQUE3MTM0X1JTX0NPTlRST0xfTUUgfAorCQkgIChidWYtPnB0LT5kbWEgPj4gMTIpOworCisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTAsICgobGluZXMtMSkmMHhmZikpOworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUExLCAoKChsaW5lcy0xKT4+OCkmMHhmZikpOworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEyLCAoKCgobGluZXMtMSk+PjE2KSYweDNmKSB8IDB4MDApKTsgLyogVFNOT1BJVD0wLCBUU0NPTEFQPTAgKi8KKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfUElUQ0goNSksVFNfUEFDS0VUX1NJWkUpOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19DT05UUk9MKDUpLGNvbnRyb2wpOworCiAJYnVmLT52Yi5zdGF0ZSA9IFNUQVRFX1BSRVBBUkVEOwogCWJ1Zi0+YWN0aXZhdGUgPSBidWZmZXJfYWN0aXZhdGU7CiAJYnVmLT52Yi5maWVsZCA9IGZpZWxkOwpAQCAtMTY0LDExICsxNjksMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBleHBvcnRlZCBzdHVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzYnVmcyA9IDQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHRzYnVmcyA9IDg7CiBtb2R1bGVfcGFyYW0odHNidWZzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0c2J1ZnMsIm51bWJlciBvZiB0cyBidWZmZXJzLCByYW5nZSAyLTMyIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfbnJfcGFja2V0cyA9IDMwOworc3RhdGljIHVuc2lnbmVkIGludCB0c19ucl9wYWNrZXRzID0gNjQ7CiBtb2R1bGVfcGFyYW0odHNfbnJfcGFja2V0cywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModHNfbnJfcGFja2V0cywic2l6ZSBvZiBhIHRzIGJ1ZmZlcnMgKGluIHRzIHBhY2tldHMpIik7CiAKQEAgLTIyMCwxMCArMjI1LDEwIEBACiAJaWYgKGRldi0+dHNfcS5jdXJyKSB7CiAJCWZpZWxkID0gZGV2LT50c19xLmN1cnItPnZiLmZpZWxkOwogCQlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9UT1ApIHsKLQkJCWlmICgoc3RhdHVzICYgMHgxMDAwMDApICE9IDB4MTAwMDAwKQorCQkJaWYgKChzdGF0dXMgJiAweDEwMDAwMCkgIT0gMHgwMDAwMDApCiAJCQkJZ290byBkb25lOwogCQl9IGVsc2UgewotCQkJaWYgKChzdGF0dXMgJiAweDEwMDAwMCkgIT0gMHgwMDAwMDApCisJCQlpZiAoKHN0YXR1cyAmIDB4MTAwMDAwKSAhPSAweDEwMDAwMCkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KIAkJc2FhNzEzNF9idWZmZXJfZmluaXNoKGRldiwmZGV2LT50c19xLFNUQVRFX0RPTkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCmluZGV4IDYxYTJkNmIuLjkzMjY4NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKQEAgLTIwNyw2ICsyMDcsMTAgQEAKIAlzYWFfd3JpdGVsKFNBQTcxMzRfQ0FSUklFUjJfRlJFUTAgPj4gMiwgdHZhdWRpb19jYXJyMnJlZyhzZWNvbmRhcnkpKTsKIH0KIAorI2RlZmluZSBTQUE3MTM0X01VVEVfTUFTSyAweGJiCisjZGVmaW5lIFNBQTcxMzRfTVVURV9BTkFMT0cgMHgwNAorI2RlZmluZSBTQUE3MTM0X01VVEVfSTJTIDB4NDAKKwogc3RhdGljIHZvaWQgbXV0ZV9pbnB1dF83MTM0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewogCXVuc2lnbmVkIGludCBtdXRlOwpAQCAtMjQxLDcgKzI0NSwxMSBAQAogCiAJaWYgKFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0ID09IGRldi0+cGNpLT5kZXZpY2UpCiAJCS8qIDcxMzQgbXV0ZSAqLwotCQlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fTVVURV9DVFJMLCBtdXRlID8gMHhiZiA6IDB4YmIpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fTVVURV9DVFJMLCBtdXRlID8KKwkJCQkJCSAgICBTQUE3MTM0X01VVEVfTUFTSyB8CisJCQkJCQkgICAgU0FBNzEzNF9NVVRFX0FOQUxPRyB8CisJCQkJCQkgICAgU0FBNzEzNF9NVVRFX0kyUyA6CisJCQkJCQkgICAgU0FBNzEzNF9NVVRFX01BU0spOwogCiAJLyogc3dpdGNoIGludGVybmFsIGF1ZGlvIG11eCAqLwogCXN3aXRjaCAoaW4tPmFtdXgpIHsKQEAgLTc1MywxNyArNzYxLDE3IEBACiAKIAogCS8qIHN3aXRjaCBncGlvLWNvbm5lY3RlZCBleHRlcm5hbCBhdWRpbyBtdXggKi8KLSAgICAgICAgaWYgKDAgIT0gY2FyZChkZXYpLmdwaW9tYXNrKSB7Ci0gICAgICAgIAltYXNrID0gY2FyZChkZXYpLmdwaW9tYXNrOworCWlmICgwICE9IGNhcmQoZGV2KS5ncGlvbWFzaykgeworCQltYXNrID0gY2FyZChkZXYpLmdwaW9tYXNrOwogCiAJCWlmIChjYXJkKGRldikubXV0ZS5uYW1lICYmIGRldi0+Y3RsX211dGUpCiAJCQlpbiA9ICZjYXJkKGRldikubXV0ZTsKIAkJZWxzZQogCQkJaW4gPSBkZXYtPmlucHV0OwogCi0gICAgICAgIAlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgbWFzaywgbWFzayk7Ci0gICAgICAgIAlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgbWFzaywgaW4tPmdwaW8pOwotICAgICAgICAJc2FhNzEzNF90cmFja19ncGlvKGRldixpbi0+bmFtZSk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICBtYXNrLCBtYXNrKTsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIG1hc2ssIGluLT5ncGlvKTsKKwkJc2FhNzEzNF90cmFja19ncGlvKGRldixpbi0+bmFtZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMDE2LDkgKzEwMjQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorRVhQT1JUX1NZTUJPTChzYWFfZHNwX3dyaXRlbCk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKICAqIEVuZDoKICAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwppbmRleCAzNWU1ZTg1Li40NWM4NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKQEAgLTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgogI2luY2x1ZGUgInNhYTcxMzQuaCIKIAorLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX2RlYnVnICAgPSAwOwpAQCAtNDgsNiArNTEsNDMgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMvdmlkZW86ICIgZm10LCBkZXYtPm5hbWUgLCAjIyBhcmcpCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRGVmaW5lcyBmb3IgVmlkZW8gT3V0cHV0IFBvcnQgUmVnaXN0ZXIgYXQgYWRkcmVzcyAweDE5MSAgICAgICAgICAgICovCisKKy8qIEJpdCAwOiBWSVAgY29kZSBUIGJpdCBwb2xhcml0eSAqLworCisjZGVmaW5lIFZQX1RfQ09ERV9QX05PTl9JTlZFUlRFRAkweDAwCisjZGVmaW5lIFZQX1RfQ09ERV9QX0lOVkVSVEVECQkweDAxCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRGVmaW5lcyBmb3IgVmlkZW8gT3V0cHV0IFBvcnQgUmVnaXN0ZXIgYXQgYWRkcmVzcyAweDE5NSAgICAgICAgICAgICovCisKKy8qIEJpdCAyOiBWaWRlbyBvdXRwdXQgY2xvY2sgZGVsYXkgY29udHJvbCAqLworCisjZGVmaW5lIFZQX0NMS19DVFJMMl9OT1RfREVMQVlFRAkweDAwCisjZGVmaW5lIFZQX0NMS19DVFJMMl9ERUxBWUVECQkweDA0CisKKy8qIEJpdCAxOiBWaWRlbyBvdXRwdXQgY2xvY2sgaW52ZXJ0IGNvbnRyb2wgKi8KKworI2RlZmluZSBWUF9DTEtfQ1RSTDFfTk9OX0lOVkVSVEVECTB4MDAKKyNkZWZpbmUgVlBfQ0xLX0NUUkwxX0lOVkVSVEVECQkweDAyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRGVmaW5lcyBmb3IgVmlkZW8gT3V0cHV0IFBvcnQgUmVnaXN0ZXIgYXQgYWRkcmVzcyAweDE5NiAgICAgICAgICAgICovCisKKy8qIEJpdHMgMiB0byAwOiBWU1lOQyBwaW4gdmlkZW8gdmVydGljYWwgc3luYyB0eXBlICovCisKKyNkZWZpbmUgVlBfVlNfVFlQRV9NQVNLCQkJMHgwNworCisjZGVmaW5lIFZQX1ZTX1RZUEVfT0ZGCQkJMHgwMAorI2RlZmluZSBWUF9WU19UWVBFX1YxMjMJCQkweDAxCisjZGVmaW5lIFZQX1ZTX1RZUEVfVl9JVFUJCTB4MDIKKyNkZWZpbmUgVlBfVlNfVFlQRV9WR0FURV9MCQkweDAzCisjZGVmaW5lIFZQX1ZTX1RZUEVfUkVTRVJWRUQxCQkweDA0CisjZGVmaW5lIFZQX1ZTX1RZUEVfUkVTRVJWRUQyCQkweDA1CisjZGVmaW5lIFZQX1ZTX1RZUEVfRl9JVFUJCTB4MDYKKyNkZWZpbmUgVlBfVlNfVFlQRV9TQ19GSUQJCTB4MDcKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBkYXRhIHN0cnVjdHMgZm9yIHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogc3RhdGljIGludCB2aWRlb19vdXRbXVs5XSA9IHsKQEAgLTI3MywxMiArMzEzLDEyIEBACiAKIAkJLmhfc3RhcnQgICAgICAgPSAwLAogCQkuaF9zdG9wICAgICAgICA9IDcxOSwKLSAgCQkudmlkZW9fdl9zdGFydCA9IDIzLAotICAJCS52aWRlb192X3N0b3AgID0gMjYyLAotICAJCS52Ymlfdl9zdGFydF8wID0gMTAsCi0gIAkJLnZiaV92X3N0b3BfMCAgPSAyMSwKLSAgCQkudmJpX3Zfc3RhcnRfMSA9IDI3MywKLSAgCQkuc3JjX3RpbWluZyAgICA9IDcsCisJCS52aWRlb192X3N0YXJ0ID0gMjMsCisJCS52aWRlb192X3N0b3AgID0gMjYyLAorCQkudmJpX3Zfc3RhcnRfMCA9IDEwLAorCQkudmJpX3Zfc3RvcF8wICA9IDIxLAorCQkudmJpX3Zfc3RhcnRfMSA9IDI3MywKKwkJLnNyY190aW1pbmcgICAgPSA3LAogCiAJCS5zeW5jX2NvbnRyb2wgID0gMHgxOCwKIAkJLmx1bWFfY29udHJvbCAgPSAweDQwLApAQCAtNjIyLDcgKzY2Miw3IEBACiAJCXByZXNjYWxlID0gMTsKIAl4c2NhbGUgPSAxMDI0ICogZGV2LT5jcm9wX2N1cnJlbnQud2lkdGggLyBwcmVzY2FsZSAvIHdpZHRoOwogCXlzY2FsZSA9IDUxMiAqIGRpdiAqIGRldi0+Y3JvcF9jdXJyZW50LmhlaWdodCAvIGhlaWdodDsKLSAgICAgICAJZHByaW50aygicHJlc2NhbGU9JWQgeHNjYWxlPSVkIHlzY2FsZT0lZFxuIixwcmVzY2FsZSx4c2NhbGUseXNjYWxlKTsKKwlkcHJpbnRrKCJwcmVzY2FsZT0lZCB4c2NhbGU9JWQgeXNjYWxlPSVkXG4iLHByZXNjYWxlLHhzY2FsZSx5c2NhbGUpOwogCXNldF9oX3ByZXNjYWxlKGRldix0YXNrLHByZXNjYWxlKTsKIAlzYWFfd3JpdGViKFNBQTcxMzRfSF9TQ0FMRV9JTkMxKHRhc2spLCAgICAgIHhzY2FsZSAmICAweGZmKTsKIAlzYWFfd3JpdGViKFNBQTcxMzRfSF9TQ0FMRV9JTkMyKHRhc2spLCAgICAgIHhzY2FsZSA+PiA4KTsKQEAgLTc1MiwyMCArNzkyLDIwIEBACiAJbWF4aCAgPSBkZXYtPmNyb3BfY3VycmVudC5oZWlnaHQ7CiAKIAlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKLSAgICAgICAgICAgICAgICBmaWVsZCA9ICh3aW4tPncuaGVpZ2h0ID4gbWF4aC8yKQotICAgICAgICAgICAgICAgICAgICAgICAgPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKLSAgICAgICAgICAgICAgICAgICAgICAgIDogVjRMMl9GSUVMRF9UT1A7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChmaWVsZCkgewotICAgICAgICBjYXNlIFY0TDJfRklFTERfVE9QOgotICAgICAgICBjYXNlIFY0TDJfRklFTERfQk9UVE9NOgotICAgICAgICAgICAgICAgIG1heGggPSBtYXhoIC8gMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KKwkJZmllbGQgPSAod2luLT53LmhlaWdodCA+IG1heGgvMikKKwkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECisJCQk6IFY0TDJfRklFTERfVE9QOworCX0KKwlzd2l0Y2ggKGZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKKwljYXNlIFY0TDJfRklFTERfQk9UVE9NOgorCQltYXhoID0gbWF4aCAvIDI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAl3aW4tPmZpZWxkID0gZmllbGQ7CiAJaWYgKHdpbi0+dy53aWR0aCA+IG1heHcpCkBAIC0xMzA2LDEzICsxMzQ2LDEzIEBACiAJCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LFJFU09VUkNFX1ZJREVPKSkgewogCQkJCXVwKCZmaC0+Y2FwLmxvY2spOwogCQkJCXJldHVybiBQT0xMRVJSOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gZmgtPmNhcC5vcHMtPmJ1Zl9wcmVwYXJlKCZmaC0+Y2FwLGZoLT5jYXAucmVhZF9idWYsZmgtPmNhcC5maWVsZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZoLT5jYXAubG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQT0xMRVJSOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZmgtPmNhcC5vcHMtPmJ1Zl9xdWV1ZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZoLT5jYXAucmVhZF9vZmYgPSAwOworCQkJfQorCQkJaWYgKDAgIT0gZmgtPmNhcC5vcHMtPmJ1Zl9wcmVwYXJlKCZmaC0+Y2FwLGZoLT5jYXAucmVhZF9idWYsZmgtPmNhcC5maWVsZCkpIHsKKwkJCQl1cCgmZmgtPmNhcC5sb2NrKTsKKwkJCQlyZXR1cm4gUE9MTEVSUjsKKwkJCX0KKwkJCWZoLT5jYXAub3BzLT5idWZfcXVldWUoJmZoLT5jYXAsZmgtPmNhcC5yZWFkX2J1Zik7CisJCQlmaC0+Y2FwLnJlYWRfb2ZmID0gMDsKIAkJfQogCQl1cCgmZmgtPmNhcC5sb2NrKTsKIAkJYnVmID0gZmgtPmNhcC5yZWFkX2J1ZjsKQEAgLTE2NjYsOSArMTcwNiwxMCBAQAogCWNhc2UgVklESU9DX1FVRVJZQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCQl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZSA9IGRldi0+dHVuZXJfdHlwZTsKIAogCQltZW1zZXQoY2FwLDAsc2l6ZW9mKCpjYXApKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoY2FwLT5kcml2ZXIsICJzYWE3MTM0Iik7CisJCXN0cmNweShjYXAtPmRyaXZlciwgInNhYTcxMzQiKTsKIAkJc3RybGNweShjYXAtPmNhcmQsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCiAJCQlzaXplb2YoY2FwLT5jYXJkKSk7CiAJCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIixwY2lfbmFtZShkZXYtPnBjaSkpOwpAQCAtMTY3Nyw5ICsxNzE4LDEzIEBACiAJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgfAogCQkJVjRMMl9DQVBfVkJJX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfVFVORVIgfAogCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKLQkJCVY0TDJfQ0FQX1NUUkVBTUlORzsKKwkJCVY0TDJfQ0FQX1NUUkVBTUlORyB8CisJCQlWNEwyX0NBUF9UVU5FUjsKKworCQlpZiAoKHR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKSB8fCAodHVuZXJfdHlwZSA9PSBVTlNFVCkpCisJCQljYXAtPmNhcGFiaWxpdGllcyAmPSB+VjRMMl9DQVBfVFVORVI7CisKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzkzLDkgKzE4MzgsOSBAQAogCQkJY3JvcC0+Yy5oZWlnaHQgPSBiLT50b3AgLSBjcm9wLT5jLnRvcCArIGItPmhlaWdodDsKIAogCQlpZiAoY3JvcC0+Yy5sZWZ0IDwgYi0+bGVmdCkKLQkJCWNyb3AtPmMudG9wID0gYi0+bGVmdDsKKwkJCWNyb3AtPmMubGVmdCA9IGItPmxlZnQ7CiAJCWlmIChjcm9wLT5jLmxlZnQgPiBiLT5sZWZ0ICsgYi0+d2lkdGgpCi0JCQljcm9wLT5jLnRvcCA9IGItPmxlZnQgKyBiLT53aWR0aDsKKwkJCWNyb3AtPmMubGVmdCA9IGItPmxlZnQgKyBiLT53aWR0aDsKIAkJaWYgKGNyb3AtPmMud2lkdGggPiBiLT5sZWZ0IC0gY3JvcC0+Yy5sZWZ0ICsgYi0+d2lkdGgpCiAJCQljcm9wLT5jLndpZHRoID0gYi0+bGVmdCAtIGNyb3AtPmMubGVmdCArIGItPndpZHRoOwogCkBAIC0xODE3LDYgKzE4NjIsNyBAQAogCQkJCWJyZWFrOwogCQlpZiAoTlVMTCAhPSBjYXJkX2luKGRldixuKS5uYW1lKSB7CiAJCQlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAkJCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwKIAkJCQlWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAogCQkJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKQEAgLTE4OTIsMjYgKzE5MzgsMjYgQEAKIAl9CiAJY2FzZSBWSURJT0NfU19BVURJTzoKIAkJcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgVklESU9DX0dfUEFSTToKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpwYXJtID0gYXJnOwotICAgICAgICAgICAgICAgIG1lbXNldChwYXJtLDAsc2l6ZW9mKCpwYXJtKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKwljYXNlIFZJRElPQ19HX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqcGFybSA9IGFyZzsKKwkJbWVtc2V0KHBhcm0sMCxzaXplb2YoKnBhcm0pKTsKKwkJcmV0dXJuIDA7CisJfQogCi0gICAgICAgIGNhc2UgVklESU9DX0dfUFJJT1JJVFk6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbnVtIHY0bDJfcHJpb3JpdHkgKnAgPSBhcmc7CisJY2FzZSBWSURJT0NfR19QUklPUklUWToKKwl7CisJCWVudW0gdjRsMl9wcmlvcml0eSAqcCA9IGFyZzsKIAotICAgICAgICAgICAgICAgICpwID0gdjRsMl9wcmlvX21heCgmZGV2LT5wcmlvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZJRElPQ19TX1BSSU9SSVRZOgotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW51bSB2NGwyX3ByaW9yaXR5ICpwcmlvID0gYXJnOworCQkqcCA9IHY0bDJfcHJpb19tYXgoJmRldi0+cHJpbyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX1BSSU9SSVRZOgorCXsKKwkJZW51bSB2NGwyX3ByaW9yaXR5ICpwcmlvID0gYXJnOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmRldi0+cHJpbywgJmZoLT5wcmlvLCAqcHJpbyk7Ci0gICAgICAgIH0KKwkJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmRldi0+cHJpbywgJmZoLT5wcmlvLCAqcHJpbyk7CisJfQogCiAJLyogLS0tIHByZXZpZXcgaW9jdGxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ19FTlVNX0ZNVDoKQEAgLTIwMTgsNyArMjA2NCw3IEBACiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKIAkJcmV0dXJuIHNhYTcxMzRfdHJ5X2ZtdChkZXYsZmgsZik7CiAJfQotCisjaWZkZWYgSEFWRV9WNEwxCiAJY2FzZSBWSURJT0NHTUJVRjoKIAl7CiAJCXN0cnVjdCB2aWRlb19tYnVmICptYnVmID0gYXJnOwpAQCAtMjA0Myw2ICsyMDg5LDcgQEAKIAkJfQogCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYKIAljYXNlIFZJRElPQ19SRVFCVUZTOgogCQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcyhzYWE3MTM0X3F1ZXVlKGZoKSxhcmcpOwogCkBAIC0yMDYwLDcgKzIxMDcsNyBAQAogCXsKIAkJaW50IHJlcyA9IHNhYTcxMzRfcmVzb3VyY2UoZmgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFyZXNfZ2V0KGRldixmaCxyZXMpKQorCQlpZiAoIXJlc19nZXQoZGV2LGZoLHJlcykpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oc2FhNzEzNF9xdWV1ZShmaCkpOwogCX0KQEAgLTIxMDIsNyArMjE0OSw3IEBACiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAogCQltZW1zZXQoY2FwLDAsc2l6ZW9mKCpjYXApKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoY2FwLT5kcml2ZXIsICJzYWE3MTM0Iik7CisJCXN0cmNweShjYXAtPmRyaXZlciwgInNhYTcxMzQiKTsKIAkJc3RybGNweShjYXAtPmNhcmQsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCiAJCQlzaXplb2YoY2FwLT5jYXJkKSk7CiAJCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIixwY2lfbmFtZShkZXYtPnBjaSkpOwpAQCAtMjExOSw2ICsyMTY2LDcgQEAKIAogCQltZW1zZXQodCwwLHNpemVvZigqdCkpOwogCQlzdHJjcHkodC0+bmFtZSwgIlJhZGlvIik7CisJCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCiAJCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX1RVTkVSLCB0KTsKIApAQCAtMjIzMyw3ICsyMjgxLDcgQEAKIHsKIAkubmFtZSAgICAgICAgICA9ICJzYWE3MTM0LXZpZGVvIiwKIAkudHlwZSAgICAgICAgICA9IFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfVFVORVJ8VklEX1RZUEVfT1ZFUkxBWXwKLQkgICAgICAgICAgICAgICAgIFZJRF9UWVBFX0NMSVBQSU5HfFZJRF9UWVBFX1NDQUxFUywKKwkJCSBWSURfVFlQRV9DTElQUElOR3xWSURfVFlQRV9TQ0FMRVMsCiAJLmhhcmR3YXJlICAgICAgPSAwLAogCS5mb3BzICAgICAgICAgID0gJnZpZGVvX2ZvcHMsCiAJLm1pbm9yICAgICAgICAgPSAtMSwKQEAgLTIyODAsNyArMjMyOCw3IEBACiAJCWRldi0+dGRhOTg4N19jb25mIHw9IFREQTk4ODdfQVVUT01VVEU7CiAJZGV2LT5hdXRvbXV0ZSAgICAgICA9IDA7CiAKLSAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkZW9fcS5xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkZW9fcS5xdWV1ZSk7CiAJaW5pdF90aW1lcigmZGV2LT52aWRlb19xLnRpbWVvdXQpOwogCWRldi0+dmlkZW9fcS50aW1lb3V0LmZ1bmN0aW9uID0gc2FhNzEzNF9idWZmZXJfdGltZW91dDsKIAlkZXYtPnZpZGVvX3EudGltZW91dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKSgmZGV2LT52aWRlb19xKTsKQEAgLTIyODksMTMgKzIzMzcsMjggQEAKIAlpZiAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udmlkZW9fb3V0KSB7CiAJCS8qIGVuYWJsZSB2aWRlbyBvdXRwdXQgKi8KIAkJaW50IHZvID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udmlkZW9fb3V0OworCQlpbnQgdmlkZW9fcmVnOworCQl1bnNpZ25lZCBpbnQgdmlkX3BvcnRfb3B0cyA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnZpZF9wb3J0X29wdHM7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwwLCB2aWRlb19vdXRbdm9dWzBdKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDEsIHZpZGVvX291dFt2b11bMV0pOworCQl2aWRlb19yZWcgPSB2aWRlb19vdXRbdm9dWzFdOworCQlpZiAodmlkX3BvcnRfb3B0cyAmIFNFVF9UX0NPREVfUE9MQVJJVFlfTk9OX0lOVkVSVEVEKQorCQkJdmlkZW9fcmVnICY9IH5WUF9UX0NPREVfUF9JTlZFUlRFRDsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDEsIHZpZGVvX3JlZyk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwyLCB2aWRlb19vdXRbdm9dWzJdKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDMsIHZpZGVvX291dFt2b11bM10pOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMNCwgdmlkZW9fb3V0W3ZvXVs0XSk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw1LCB2aWRlb19vdXRbdm9dWzVdKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDYsIHZpZGVvX291dFt2b11bNl0pOworCQl2aWRlb19yZWcgPSB2aWRlb19vdXRbdm9dWzVdOworCQlpZiAodmlkX3BvcnRfb3B0cyAmIFNFVF9DTE9DS19OT1RfREVMQVlFRCkKKwkJCXZpZGVvX3JlZyAmPSB+VlBfQ0xLX0NUUkwyX0RFTEFZRUQ7CisJCWlmICh2aWRfcG9ydF9vcHRzICYgU0VUX0NMT0NLX0lOVkVSVEVEKQorCQkJdmlkZW9fcmVnIHw9IFZQX0NMS19DVFJMMV9JTlZFUlRFRDsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDUsIHZpZGVvX3JlZyk7CisJCXZpZGVvX3JlZyA9IHZpZGVvX291dFt2b11bNl07CisJCWlmICh2aWRfcG9ydF9vcHRzICYgU0VUX1ZTWU5DX09GRikgeworCQkJdmlkZW9fcmVnICY9IH5WUF9WU19UWVBFX01BU0s7CisJCQl2aWRlb19yZWcgfD0gVlBfVlNfVFlQRV9PRkY7CisJCX0KKwkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDYsIHZpZGVvX3JlZyk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw3LCB2aWRlb19vdXRbdm9dWzddKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDgsIHZpZGVvX291dFt2b11bOF0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDg2MGI4OTUuLmZiOTcyNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMjQsMTYgKzI0LDE4IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgotI2luY2x1ZGUgPG1lZGlhL2lkLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi1kdmIuaD4KIApAQCAtNDUsNiArNDcsMTAgQEAKICNlbmRpZgogI2RlZmluZSBVTlNFVCAoLTFVKQogCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZW51bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMTg3LDEwICsxOTMsMzkgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlUVl9ESUdJTUFUUklYIDY0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1RFUk1JTkFUT1IgNjUKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9ZVUFOX1RVTjkwMCA2NgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDlGTSA2NworI2RlZmluZSBTQUE3MTM0X0JPQVJEX0dPVFZJRVdfNzEzNSA2OAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfRVVST1BBICA2OQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMCA3MAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMCA3MQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1JURF9WRkc3MzUwIDcyCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfUlREX1ZGRzczMzAgNzMKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX01JTkkyIDc0CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0FWRVJUVkhEX0ExODAgNzUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9NT05TVEVSVFZfTU9CSUxFIDc2CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpIDc3CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMIDc4CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfU0VETkFfUENfVFZfQ0FSREJVUyAgICAgNzkKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BU1VTVEVLX0RJR0lNQVRSSVhfVFYgODAKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSICA4MQogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOAogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogU2luY2Ugd2Ugc3VwcG9ydCAyIHJlbW90ZSB0eXBlcywgbGV0cyB0ZWxsIHRoZW0gYXBhcnQgICAgICAgKi8KKworI2RlZmluZSBTQUE3MTM0X1JFTU9URV9HUElPICAxCisjZGVmaW5lIFNBQTcxMzRfUkVNT1RFX0kyQyAgIDIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFZpZGVvIE91dHB1dCBQb3J0IFJlZ2lzdGVyIEluaXRpYWxpemF0aW9uIE9wdGlvbnMgICAgICAgICAgICovCisKKyNkZWZpbmUgU0VUX1RfQ09ERV9QT0xBUklUWV9OT05fSU5WRVJURUQJKDEgPDwgMCkKKyNkZWZpbmUgU0VUX0NMT0NLX05PVF9ERUxBWUVECQkJKDEgPDwgMSkKKyNkZWZpbmUgU0VUX0NMT0NLX0lOVkVSVEVECQkJKDEgPDwgMikKKyNkZWZpbmUgU0VUX1ZTWU5DX09GRgkJCQkoMSA8PCAzKQorCiBzdHJ1Y3Qgc2FhNzEzNF9pbnB1dCB7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgKm5hbWU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgdm11eDsKQEAgLTIyNiw2ICsyNjEsNyBAQAogCS8qIHBlcmlwaGVyYWwgSS9PICovCiAJZW51bSBzYWE3MTM0X3ZpZGVvX291dCAgdmlkZW9fb3V0OwogCWVudW0gc2FhNzEzNF9tcGVnX3R5cGUgIG1wZWc7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgdmlkX3BvcnRfb3B0czsKIH07CiAKICNkZWZpbmUgY2FyZF9oYXNfcmFkaW8oZGV2KSAgIChOVUxMICE9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJhZGlvLm5hbWUpCkBAIC0zMTksOSArMzU1LDkgQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9wZ3RhYmxlICAgICBwdF92Ymk7CiB9OwogCi0vKiBvc3MgZHNwIHN0YXR1cyAqLwotc3RydWN0IHNhYTcxMzRfb3NzIHsKLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKKy8qIGRtYXNvdW5kIGRzcCBzdGF0dXMgKi8KK3N0cnVjdCBzYWE3MTM0X2RtYXNvdW5kIHsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICAgICBsb2NrOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yX21peGVyOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yX2RzcDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICB1c2Vyc19kc3A7CkBAIC0zNDcsNiArMzgzLDcgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBkbWFfYmxrOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfb2Zmc2V0OwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfY291bnQ7CisJc25kX3BjbV9zdWJzdHJlYW1fdCAJICAgKnN1YnN0cmVhbTsKIH07CiAKIC8qIElSIGlucHV0ICovCkBAIC0zNTgsOSArMzk1LDkgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleWNvZGU7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgbWFza19rZXlkb3duOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5dXA7Ci0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxpbmc7Ci0gICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfZ3BpbzsKLSAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgdGltZXI7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcG9sbGluZzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2dwaW87CisJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgdGltZXI7CiB9OwogCiAvKiB0cy9tcGVnIHN0YXR1cyAqLwpAQCAtMzgzLDggKzQyMCw4IEBACiAvKiBnbG9iYWwgZGV2aWNlIHN0YXR1cyAqLwogc3RydWN0IHNhYTcxMzRfZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICBkZXZsaXN0OwotICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICAgICBsb2NrOwotICAgICAgIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICAgICBsb2NrOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgIHNsb2NrOwogI2lmZGVmIFZJRElPQ19HX1BSSU9SSVRZCiAJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAgICAgcHJpbzsKICNlbmRpZgpAQCAtMzk0LDcgKzQzMSw3IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAgICAgICAgKnZpZGVvX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAgICAgICAqcmFkaW9fZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgICAgICAgICp2YmlfZGV2OwotCXN0cnVjdCBzYWE3MTM0X29zcyAgICAgICAgIG9zczsKKwlzdHJ1Y3Qgc2FhNzEzNF9kbWFzb3VuZCAgICBkbWFzb3VuZDsKIAogCS8qIGluZnJhcmVkIHJlbW90ZSAqLwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGhhc19yZW1vdGU7CkBAIC00MjEsNyArNDU4LDcgQEAKIAkvKiBpMmMgaS9vICovCiAJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAgaTJjX2FkYXA7CiAJc3RydWN0IGkyY19jbGllbnQgICAgICAgICAgaTJjX2NsaWVudDsKLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICBlZWRhdGFbNjRdOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGVlZGF0YVsxMjhdOwogCiAJLyogdmlkZW8gb3ZlcmxheSAqLwogCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICAgIG92YnVmOwpAQCAtNjI2LDYgKzY2Myw3IEBACiBpbnQgIHNhYTcxMzRfaW5wdXRfaW5pdDEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogdm9pZCBzYWE3MTM0X2lucHV0X2Zpbmkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogdm9pZCBzYWE3MTM0X2lucHV0X2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Cit2b2lkIHNhYTcxMzRfc2V0X2kyY19pcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgc3RydWN0IElSX2kyYyAqaXIpOwogCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwppbmRleCAyNTViNjA4Li5kMzI3MzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwpAQCAtNTAsNyArNTAsNiBAQAogCiAjaW5jbHVkZSAiYnR0di5oIgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgotI2luY2x1ZGUgPG1lZGlhL2lkLmg+CiAKICNpZm5kZWYgVklERU9fQVVESU9fQkFMQU5DRQogIyBkZWZpbmUgVklERU9fQVVESU9fQkFMQU5DRSAzMgpAQCAtMzEwLDkgKzMwOSw5IEBACiAJbWVtc2V0KHQsMCxzaXplb2YgKnQpOwogCiAJY2xpZW50ID0gJnQtPmM7Ci0gICAgICAgIG1lbWNweShjbGllbnQsJmNsaWVudF90ZW1wbGF0ZSxzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLSAgICAgICAgY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKLSAgICAgICAgY2xpZW50LT5hZGRyID0gYWRkcjsKKwltZW1jcHkoY2xpZW50LCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKKwljbGllbnQtPmFkZHIgPSBhZGRyOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHQpOwogCiAJZG9fdGRhNzQzMl9pbml0KGNsaWVudCk7CkBAIC00NzIsNyArNDcxLDcgQEAKIAkJfQogCQl9CiAKLQkgCXQtPm11dGVkPSh2YS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKTsKKwkJdC0+bXV0ZWQ9KHZhLT5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpOwogCQlpZiAodC0+bXV0ZWQpCiAJCXsKIAkJCS8qIE11dGUgJiB1cGRhdGUgYmFsYW5jZSovCkBAIC01MDMsMTIgKzUwMiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewogCS5vd25lciAgICAgICAgICAgPSBUSElTX01PRFVMRSwKLSAgICAgICAgLm5hbWUgICAgICAgICAgICA9ICJpMmMgdGRhNzQzMiBkcml2ZXIiLAorCS5uYW1lICAgICAgICAgICAgPSAiaTJjIHRkYTc0MzIgZHJpdmVyIiwKIAkuaWQgICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX1REQTc0MzIsCi0gICAgICAgIC5mbGFncyAgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAorCS5mbGFncyAgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAogCS5hdHRhY2hfYWRhcHRlciAgPSB0ZGE3NDMyX3Byb2JlLAotICAgICAgICAuZGV0YWNoX2NsaWVudCAgID0gdGRhNzQzMl9kZXRhY2gsCi0gICAgICAgIC5jb21tYW5kICAgICAgICAgPSB0ZGE3NDMyX2NvbW1hbmQsCisJLmRldGFjaF9jbGllbnQgICA9IHRkYTc0MzJfZGV0YWNoLAorCS5jb21tYW5kICAgICAgICAgPSB0ZGE3NDMyX2NvbW1hbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhODI5MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMKaW5kZXggYzY1ZjBjNy4uYjJkZmUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMKQEAgLTEsMTcyICsxLDQwNiBAQAogLyoKLSAqCi0gKiBpMmMgdHYgdHVuZXIgY2hpcCBkZXZpY2UgZHJpdmVyCi0gKiBjb250cm9scyB0aGUgcGhpbGlwcyB0ZGE4MjkwKzc1IHR1bmVyIGNoaXAgY29tYm8uCi0gKi8KKworICAgaTJjIHR2IHR1bmVyIGNoaXAgZGV2aWNlIGRyaXZlcgorICAgY29udHJvbHMgdGhlIHBoaWxpcHMgdGRhODI5MCs3NSB0dW5lciBjaGlwIGNvbWJvLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKwogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogCi0jZGVmaW5lIEkyQ19BRERSX1REQTgyOTAgICAgICAgIDB4NGIKLSNkZWZpbmUgSTJDX0FERFJfVERBODI3NSAgICAgICAgMHg2MQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0cnVjdCBmcmVxX2VudHJ5IHsKLQl1MTYJZnJlcTsKLQl1OAl2YWx1ZTsKK3N0cnVjdCB0ZGE4Mjd4X2RhdGEgeworCXUzMiBsb21heDsKKwl1OCAgc3BkOworCXU4ICBiczsKKwl1OCAgYnA7CisJdTggIGNwOworCXU4ICBnYzM7CisJdTggZGl2MXA1OwogfTsKIAotc3RhdGljIHN0cnVjdCBmcmVxX2VudHJ5IGJhbmRfdGFibGVbXSA9IHsKLQl7IDB4MkRGNCwgMHgxQyB9LAotCXsgMHgyNTc0LCAweDE0IH0sCi0JeyAweDIyQjQsIDB4MEMgfSwKLQl7IDB4MjBENCwgMHgwQiB9LAotCXsgMHgxRTc0LCAweDNCIH0sCi0JeyAweDFDMzQsIDB4MzMgfSwKLQl7IDB4MTZGNCwgMHg1QiB9LAotCXsgMHgxNDU0LCAweDUzIH0sCi0JeyAweDEyRDQsIDB4NTIgfSwKLQl7IDB4MTAzNCwgMHg0QSB9LAotCXsgMHgwRUU0LCAweDdBIH0sCi0JeyAweDBEMzQsIDB4NzIgfSwKLQl7IDB4MEI1NCwgMHg5QSB9LAotCXsgMHgwOTE0LCAweDkxIH0sCi0JeyAweDA3RjQsIDB4ODkgfSwKLQl7IDB4MDc3NCwgMHhCOSB9LAotCXsgMHgwNjdCLCAweEIxIH0sCi0JeyAweDA2MzQsIDB4RDkgfSwKLQl7IDB4MDVBNCwgMHhEOCB9LAkvLyBGTSByYWRpbwotCXsgMHgwNDk0LCAweEQwIH0sCi0JeyAweDAzQkMsIDB4QzggfSwKLQl7IDB4MDM5NCwgMHhGOCB9LAkvLyA1NzI1MDAwMCBIegotCXsgMHgwMDAwLCAweEYwIH0sCS8vIDAKKyAgICAgLyogTm90ZSBsb21heCBlbnRyeSBpcyBsbyAvIDYyNTAwICovCisKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eF9kYXRhIHRkYTgyN3hfYW5hbG9nW10gPSB7CisJeyAubG9tYXggPSAgIDk5MiwgLnNwZCA9IDMsIC5icyA9IDIsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAzLCAuZGl2MXA1ID0gMX0sIC8qICA2MiBNSHogKi8KKwl7IC5sb21heCA9ICAxMDU2LCAuc3BkID0gMywgLmJzID0gMywgLmJwID0gMCwgLmNwID0gMCwgLmdjMyA9IDMsIC5kaXYxcDUgPSAxfSwgLyogIDY2IE1IeiAqLworCXsgLmxvbWF4ID0gIDEyMTYsIC5zcGQgPSAzLCAuYnMgPSAxLCAuYnAgPSAwLCAuY3AgPSAwLCAuZ2MzID0gMywgLmRpdjFwNSA9IDB9LCAvKiAgNzYgTUh6ICovCisJeyAubG9tYXggPSAgMTM0NCwgLnNwZCA9IDMsIC5icyA9IDIsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAzLCAuZGl2MXA1ID0gMH0sIC8qICA4NCBNSHogKi8KKwl7IC5sb21heCA9ICAxNDg4LCAuc3BkID0gMywgLmJzID0gMiwgLmJwID0gMCwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogIDkzIE1IeiAqLworCXsgLmxvbWF4ID0gIDE1NjgsIC5zcGQgPSAzLCAuYnMgPSAzLCAuYnAgPSAwLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDB9LCAvKiAgOTggTUh6ICovCisJeyAubG9tYXggPSAgMTc0NCwgLnNwZCA9IDMsIC5icyA9IDMsIC5icCA9IDEsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDEwOSBNSHogKi8KKwl7IC5sb21heCA9ICAxOTY4LCAuc3BkID0gMiwgLmJzID0gMiwgLmJwID0gMSwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAxfSwgLyogMTIzIE1IeiAqLworCXsgLmxvbWF4ID0gIDIxMjgsIC5zcGQgPSAyLCAuYnMgPSAzLCAuYnAgPSAxLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDF9LCAvKiAxMzMgTUh6ICovCisJeyAubG9tYXggPSAgMjQxNiwgLnNwZCA9IDIsIC5icyA9IDEsIC5icCA9IDEsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDE1MSBNSHogKi8KKwl7IC5sb21heCA9ICAyNDY0LCAuc3BkID0gMiwgLmJzID0gMiwgLmJwID0gMSwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogMTU0IE1IeiAqLworCXsgLmxvbWF4ID0gIDI4OTYsIC5zcGQgPSAyLCAuYnMgPSAyLCAuYnAgPSAxLCAuY3AgPSAwLCAuZ2MzID0gMCwgLmRpdjFwNSA9IDB9LCAvKiAxODEgTUh6ICovCisJeyAubG9tYXggPSAgMjk2MCwgLnNwZCA9IDIsIC5icyA9IDIsIC5icCA9IDIsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDE4NSBNSHogKi8KKwl7IC5sb21heCA9ICAzNDcyLCAuc3BkID0gMiwgLmJzID0gMywgLmJwID0gMiwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogMjE3IE1IeiAqLworCXsgLmxvbWF4ID0gIDM5MDQsIC5zcGQgPSAxLCAuYnMgPSAyLCAuYnAgPSAyLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDF9LCAvKiAyNDQgTUh6ICovCisJeyAubG9tYXggPSAgNDI0MCwgLnNwZCA9IDEsIC5icyA9IDMsIC5icCA9IDIsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMX0sIC8qIDI2NSBNSHogKi8KKwl7IC5sb21heCA9ICA0ODMyLCAuc3BkID0gMSwgLmJzID0gMSwgLmJwID0gMiwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogMzAyIE1IeiAqLworCXsgLmxvbWF4ID0gIDUxODQsIC5zcGQgPSAxLCAuYnMgPSAyLCAuYnAgPSAyLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDB9LCAvKiAzMjQgTUh6ICovCisJeyAubG9tYXggPSAgNTkyMCwgLnNwZCA9IDEsIC5icyA9IDIsIC5icCA9IDMsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDM3MCBNSHogKi8KKwl7IC5sb21heCA9ICA3MjY0LCAuc3BkID0gMSwgLmJzID0gMywgLmJwID0gMywgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogNDU0IE1IeiAqLworCXsgLmxvbWF4ID0gIDc4ODgsIC5zcGQgPSAwLCAuYnMgPSAyLCAuYnAgPSAzLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDF9LCAvKiA0OTMgTUh6ICovCisJeyAubG9tYXggPSAgODQ4MCwgLnNwZCA9IDAsIC5icyA9IDMsIC5icCA9IDMsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMX0sIC8qIDUzMCBNSHogKi8KKwl7IC5sb21heCA9ICA4ODY0LCAuc3BkID0gMCwgLmJzID0gMSwgLmJwID0gMywgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogNTU0IE1IeiAqLworCXsgLmxvbWF4ID0gIDk2NjQsIC5zcGQgPSAwLCAuYnMgPSAxLCAuYnAgPSA0LCAuY3AgPSAwLCAuZ2MzID0gMCwgLmRpdjFwNSA9IDB9LCAvKiA2MDQgTUh6ICovCisJeyAubG9tYXggPSAxMTA4OCwgLnNwZCA9IDAsIC5icyA9IDIsIC5icCA9IDQsIC5jcCA9IDAsIC5nYzMgPSAwLCAuZGl2MXA1ID0gMH0sIC8qIDY5NiBNSHogKi8KKwl7IC5sb21heCA9IDExODQwLCAuc3BkID0gMCwgLmJzID0gMiwgLmJwID0gNCwgLmNwID0gMSwgLmdjMyA9IDAsIC5kaXYxcDUgPSAwfSwgLyogNzQwIE1IeiAqLworCXsgLmxvbWF4ID0gMTMxMjAsIC5zcGQgPSAwLCAuYnMgPSAzLCAuYnAgPSA0LCAuY3AgPSAwLCAuZ2MzID0gMCwgLmRpdjFwNSA9IDB9LCAvKiA4MjAgTUh6ICovCisJeyAubG9tYXggPSAxMzg0MCwgLnNwZCA9IDAsIC5icyA9IDMsIC5icCA9IDQsIC5jcCA9IDEsIC5nYzMgPSAwLCAuZGl2MXA1ID0gMH0sIC8qIDg2NSBNSHogKi8KKwl7IC5sb21heCA9ICAgICAwLCAuc3BkID0gMCwgLmJzID0gMCwgLmJwID0gMCwgLmNwID0gMCwgLmdjMyA9IDAsIC5kaXYxcDUgPSAwfSAgLyogRW5kICAgICAgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9lbnRyeSBkaXZfdGFibGVbXSA9IHsKLQl7IDB4MUMzNCwgMyB9LAotCXsgMHgwRDM0LCAyIH0sCi0JeyAweDA2N0IsIDEgfSwKLSAgICAgICAgeyAweDAwMDAsIDAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZnJlcV9lbnRyeSBhZ2NfdGFibGVbXSA9IHsKLQl7IDB4MjJCNCwgMHg4RiB9LAotCXsgMHgwQjU0LCAweDlGIH0sCi0JeyAweDA5QTQsIDB4OEYgfSwKLQl7IDB4MDU1NCwgMHg5RiB9LAotCXsgMHgwMDAwLCAweEJGIH0sCi19OwotCi1zdGF0aWMgX191OCBnZXRfZnJlcV9lbnRyeSggc3RydWN0IGZyZXFfZW50cnkqIHRhYmxlLCBfX3UxNiBmcmVxKQorc3RhdGljIHZvaWQgdGRhODI3eF90dW5lKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1MTYgaWZjLCB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKLQl3aGlsZSh0YWJsZS0+ZnJlcSAmJiB0YWJsZS0+ZnJlcSA+IGZyZXEpCi0JCXRhYmxlKys7Ci0JcmV0dXJuIHRhYmxlLT52YWx1ZTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfZW5hYmxlX2JyaWRnZVsyXSA9IAl7IDB4MjEsIDB4QzAgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19kaXNhYmxlX2JyaWRnZVsyXSA9IAl7IDB4MjEsIDB4ODAgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19pbml0X3RkYTgyNzVbMTRdID0gCXsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCQkJCSAgMHhmQywgMHgwNCwgMHhBMywgMHgzRiwKLQkJCQkJCSAgMHgyQSwgMHgwNCwgMHhGRiwgMHgwMCwKLQkJCQkJCSAgMHgwMCwgMHg0MCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX3NldF9WU1syXSA9IAkJeyAweDMwLCAweDZGIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfc2V0X0dQMDFfQ0ZbMl0gPSAJeyAweDIwLCAweDBCIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfdGRhODI5MF9yZXNldFsyXSA9CXsgMHgwMCwgMHgwMCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX3RkYTgyOTBfc3RhbmRieVsyXSA9CXsgMHgwMCwgMHgwMiB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2dhaW5zZXRfb2ZmWzJdID0JeyAweDI4LCAweDE0IH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfZ2FpbnNldF9vblsyXSA9CXsgMHgyOCwgMHg1NCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2FnYzNfMDBbMl0gPQkJeyAweDgwLCAweDAwIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfYWdjMl9CRlsyXSA9CQl7IDB4NjAsIDB4QkYgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19jYjFfRDBbMl0gPQkJeyAweDMwLCAweEQwIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfY2IxX0QyWzJdID0JCXsgMHgzMCwgMHhEMiB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2NiMV81NlsyXSA9CQl7IDB4MzAsIDB4NTYgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19jYjFfNTJbMl0gPQkJeyAweDMwLCAweDUyIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfY2IxXzUwWzJdID0JCXsgMHgzMCwgMHg1MCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2FnYzJfN0ZbMl0gPQkJeyAweDYwLCAweDdGIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfYWdjM18wOFsyXSA9CQl7IDB4ODAsIDB4MDggfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfbXNnIGkyY19tc2dfaW5pdFtdID0gewotCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfaW5pdF90ZGE4Mjc1KSwgaTJjX2luaXRfdGRhODI3NSB9LAotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZGlzYWJsZV9icmlkZ2UpLCBpMmNfZGlzYWJsZV9icmlkZ2UgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX3NldF9WUyksIGkyY19zZXRfVlMgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX3NldF9HUDAxX0NGKSwgaTJjX3NldF9HUDAxX0NGIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19tc2cgaTJjX21zZ19wcm9sb2dbXSA9IHsKLS8vCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZWFzeV9tb2RlKSwgaTJjX2Vhc3lfbW9kZSB9LAotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZ2FpbnNldF9vZmYpLCBpMmNfZ2FpbnNldF9vZmYgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX3RkYTgyOTBfcmVzZXQpLCBpMmNfdGRhODI5MF9yZXNldCB9LAotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZW5hYmxlX2JyaWRnZSksIGkyY19lbmFibGVfYnJpZGdlIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19tc2cgaTJjX21zZ19jb25maWdbXSA9IHsKLS8vCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfc2V0X2ZyZXEpLCBpMmNfc2V0X2ZyZXEgfSwKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2FnYzNfMDApLCBpMmNfYWdjM18wMCB9LAotCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfYWdjMl9CRiksIGkyY19hZ2MyX0JGIH0sCi0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19jYjFfRDIpLCBpMmNfY2IxX0QyIH0sCi0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19jYjFfNTYpLCBpMmNfY2IxXzU2IH0sCi0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19jYjFfNTIpLCBpMmNfY2IxXzUyIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19tc2cgaTJjX21zZ19lcGlsb2dbXSA9IHsKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2NiMV81MCksIGkyY19jYjFfNTAgfSwKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2FnYzJfN0YpLCBpMmNfYWdjMl83RiB9LAotCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfYWdjM18wOCksIGkyY19hZ2MzXzA4IH0sCi0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY19kaXNhYmxlX2JyaWRnZSksIGkyY19kaXNhYmxlX2JyaWRnZSB9LAotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZ2FpbnNldF9vbiksIGkyY19nYWluc2V0X29uIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19tc2cgaTJjX21zZ19zdGFuZGJ5W10gPSB7Ci0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY19lbmFibGVfYnJpZGdlKSwgaTJjX2VuYWJsZV9icmlkZ2UgfSwKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2NiMV9EMCksIGkyY19jYjFfRDAgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX2Rpc2FibGVfYnJpZGdlKSwgaTJjX2Rpc2FibGVfYnJpZGdlIH0sCi0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY190ZGE4MjkwX3N0YW5kYnkpLCBpMmNfdGRhODI5MF9zdGFuZGJ5IH0sCi19OwotCi1zdGF0aWMgaW50IHRkYTgyOTBfdHVuZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IGkyY19tc2cgZWFzeV9tb2RlID0KLQkJeyBJMkNfQUREUl9UREE4MjkwLCAwLCAyLCB0LT5pMmNfZWFzeV9tb2RlIH07Ci0Jc3RydWN0IGkyY19tc2cgc2V0X2ZyZXEgPQotCQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIDgsIHQtPmkyY19zZXRfZnJlcSAgfTsKLQotCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmZWFzeV9tb2RlLCAgICAgIDEpOwotCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBpMmNfbXNnX3Byb2xvZywgQVJSQVlfU0laRShpMmNfbXNnX3Byb2xvZykpOwotCi0JaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZzZXRfZnJlcSwgICAgICAgMSk7Ci0JaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsIGkyY19tc2dfY29uZmlnLCBBUlJBWV9TSVpFKGkyY19tc2dfY29uZmlnKSk7Ci0KLQltc2xlZXAoNTUwKTsKLQlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgaTJjX21zZ19lcGlsb2csIEFSUkFZX1NJWkUoaTJjX21zZ19lcGlsb2cpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgdHVuZXIgKnQsIHUxNiBpZmMsIHVuc2lnbmVkIGludCBmcmVxKQoteworCXVuc2lnbmVkIGNoYXIgdHVuZXJfcmVnWzhdOworCXVuc2lnbmVkIGNoYXIgcmVnMlsyXTsKIAl1MzIgTjsKKwlpbnQgaTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gdC0+dGRhODI3eF9hZGRyLCAuZmxhZ3MgPSAwfTsKIAogCWlmICh0LT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pCiAJCWZyZXEgPSBmcmVxIC8gMTAwMDsKIAotCU4gPSAoKChmcmVxPDwzKStpZmMpJjB4M2ZmZmMpOworCU4gPSBmcmVxICsgaWZjOworCWkgPSAwOworCXdoaWxlICh0ZGE4Mjd4X2FuYWxvZ1tpXS5sb21heCA8IE4pIHsKKwkJaWYodGRhODI3eF9hbmFsb2dbaSArIDFdLmxvbWF4ID09IDApCisJCQlicmVhazsKKwkJaSsrOworCX0KIAotCU4gPSBOID4+IGdldF9mcmVxX2VudHJ5KGRpdl90YWJsZSwgZnJlcSk7Ci0JdC0+aTJjX3NldF9mcmVxWzBdID0gMDsKLQl0LT5pMmNfc2V0X2ZyZXFbMV0gPSAodW5zaWduZWQgY2hhcikoTj4+OCk7Ci0JdC0+aTJjX3NldF9mcmVxWzJdID0gKHVuc2lnbmVkIGNoYXIpIE47Ci0JdC0+aTJjX3NldF9mcmVxWzNdID0gMHg0MDsKLQl0LT5pMmNfc2V0X2ZyZXFbNF0gPSAweDUyOwotCXQtPmkyY19zZXRfZnJlcVs1XSA9IGdldF9mcmVxX2VudHJ5KGJhbmRfdGFibGUsIGZyZXEpOwotCXQtPmkyY19zZXRfZnJlcVs2XSA9IGdldF9mcmVxX2VudHJ5KGFnY190YWJsZSwgIGZyZXEpOwotCXQtPmkyY19zZXRfZnJlcVs3XSA9IDB4OGY7CisJTiA9IE4gPDwgdGRhODI3eF9hbmFsb2dbaV0uc3BkOworCisJdHVuZXJfcmVnWzBdID0gMDsKKwl0dW5lcl9yZWdbMV0gPSAodW5zaWduZWQgY2hhcikoTj4+OCk7CisJdHVuZXJfcmVnWzJdID0gKHVuc2lnbmVkIGNoYXIpIE47CisJdHVuZXJfcmVnWzNdID0gMHg0MDsKKwl0dW5lcl9yZWdbNF0gPSAweDUyICsgKHQtPnRkYTgyN3hfbHBzZWwgPDwgNSk7CisJdHVuZXJfcmVnWzVdID0gKHRkYTgyN3hfYW5hbG9nW2ldLnNwZCAgIDw8IDYpICsgKHRkYTgyN3hfYW5hbG9nW2ldLmRpdjFwNSA8PDUpICsKKwkJICAgICAgICh0ZGE4Mjd4X2FuYWxvZ1tpXS5icyAgICAgPDwzKSArICB0ZGE4Mjd4X2FuYWxvZ1tpXS5icDsKKwl0dW5lcl9yZWdbNl0gPSAweDhmICsgKHRkYTgyN3hfYW5hbG9nW2ldLmdjMyA8PCA0KTsKKwl0dW5lcl9yZWdbN10gPSAweDhmOworCisJbXNnLmJ1ZiA9IHR1bmVyX3JlZzsKKwltc2cubGVuID0gODsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwltc2cuYnVmPSByZWcyOworCW1zZy5sZW4gPSAyOworCXJlZzJbMF0gPSAweDgwOworCXJlZzJbMV0gPSAwOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCXJlZzJbMF0gPSAweDYwOworCXJlZzJbMV0gPSAweGJmOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCXJlZzJbMF0gPSAweDMwOworCXJlZzJbMV0gPSB0dW5lcl9yZWdbNF0gKyAweDgwOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCW1zbGVlcCgxKTsKKwlyZWcyWzBdID0gMHgzMDsKKwlyZWcyWzFdID0gdHVuZXJfcmVnWzRdICsgNDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwltc2xlZXAoMSk7CisJcmVnMlswXSA9IDB4MzA7CisJcmVnMlsxXSA9IHR1bmVyX3JlZ1s0XTsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwltc2xlZXAoNTUwKTsKKwlyZWcyWzBdID0gMHgzMDsKKwlyZWcyWzFdID0gKHR1bmVyX3JlZ1s0XSAmIDB4ZmMpICsgdGRhODI3eF9hbmFsb2dbaV0uY3AgOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCXJlZzJbMF0gPSAweDYwOworCXJlZzJbMV0gPSAweDNmOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCXJlZzJbMF0gPSAweDgwOworCXJlZzJbMV0gPSAweDA4OyAgIC8vIFZzeW5jIGVuCisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOwogfQogCitzdGF0aWMgdm9pZCB0ZGE4Mjd4X2FnY2Yoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXVuc2lnbmVkIGNoYXIgZGF0YVtdID0gezB4ODAsIDB4MGN9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHQtPnRkYTgyN3hfYWRkciwgLmJ1ZiA9IGRhdGEsCisJCQkgICAgICAuZmxhZ3MgPSAwLCAubGVuID0gMn07CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCB0ZGE4Mjd4YV9kYXRhIHsKKwl1MzIgbG9tYXg7CisJdTggIHN2Y287CisJdTggIHNwZDsKKwl1OCAgc2NyOworCXU4ICBzYnM7CisJdTggIGdjMzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9hbmFsb2dbXSA9IHsKKwl7IC5sb21heCA9ICAgOTEwLCAuc3ZjbyA9IDMsIC5zcGQgPSA0LCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAzfSwgIC8qICA1Ni44NzUgTUh6ICovCisJeyAubG9tYXggPSAgMTA3NiwgLnN2Y28gPSAwLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gM30sICAvKiAgNjcuMjUgTUh6ICovCisJeyAubG9tYXggPSAgMTMwMCwgLnN2Y28gPSAxLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gM30sICAvKiAgODEuMjUgTUh6ICovCisJeyAubG9tYXggPSAgMTU2MCwgLnN2Y28gPSAyLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gM30sICAvKiAgOTcuNSAgTUh6ICovCisJeyAubG9tYXggPSAgMTgyMCwgLnN2Y28gPSAzLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sICAvKiAxMTMuNzUgTUh6ICovCisJeyAubG9tYXggPSAgMjE1MiwgLnN2Y28gPSAwLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sICAvKiAxMzQuNSBNSHogKi8KKwl7IC5sb21heCA9ICAyNDY0LCAuc3ZjbyA9IDEsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDEsIC5nYzMgPSAxfSwgIC8qIDE1NCAgIE1IeiAqLworCXsgLmxvbWF4ID0gIDI2MDAsIC5zdmNvID0gMSwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LCAgLyogMTYyLjUgTUh6ICovCisJeyAubG9tYXggPSAgMjkyOCwgLnN2Y28gPSAyLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sICAvKiAxODMgICBNSHogKi8KKwl7IC5sb21heCA9ICAzMTIwLCAuc3ZjbyA9IDIsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDIsIC5nYzMgPSAxfSwgIC8qIDE5NSAgIE1IeiAqLworCXsgLmxvbWF4ID0gIDM2NDAsIC5zdmNvID0gMywgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMiwgLmdjMyA9IDN9LCAgLyogMjI3LjUgTUh6ICovCisJeyAubG9tYXggPSAgNDMwNCwgLnN2Y28gPSAwLCAuc3BkID0gMSwgLnNjciA9IDAsIC5zYnMgPSAyLCAuZ2MzID0gM30sICAvKiAyNjkgICBNSHogKi8KKwl7IC5sb21heCA9ICA1MjAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAxLCAuc2NyID0gMCwgLnNicyA9IDIsIC5nYzMgPSAxfSwgIC8qIDMyNSAgIE1IeiAqLworCXsgLmxvbWF4ID0gIDYyNDAsIC5zdmNvID0gMiwgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMywgLmdjMyA9IDN9LCAgLyogMzkwICAgTUh6ICovCisJeyAubG9tYXggPSAgNzI4MCwgLnN2Y28gPSAzLCAuc3BkID0gMSwgLnNjciA9IDAsIC5zYnMgPSAzLCAuZ2MzID0gM30sICAvKiA0NTUgICBNSHogKi8KKwl7IC5sb21heCA9ICA4MzIwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDMsIC5nYzMgPSAxfSwgIC8qIDUyMCAgIE1IeiAqLworCXsgLmxvbWF4ID0gIDg2MDgsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gMywgLmdjMyA9IDF9LCAgLyogNTM4ICAgTUh6ICovCisJeyAubG9tYXggPSAgODg2NCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSAzLCAuZ2MzID0gMX0sICAvKiA1NTQgICBNSHogKi8KKwl7IC5sb21heCA9ICA5OTIwLCAuc3ZjbyA9IDEsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDQsIC5nYzMgPSAwfSwgIC8qIDYyMCAgIE1IeiAqLworCXsgLmxvbWF4ID0gMTA0MDAsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDB9LCAgLyogNjUwICAgTUh6ICovCisJeyAubG9tYXggPSAxMTIwMCwgLnN2Y28gPSAyLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSA0LCAuZ2MzID0gMH0sICAvKiA3MDAgICBNSHogKi8KKwl7IC5sb21heCA9IDEyNDgwLCAuc3ZjbyA9IDIsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAwfSwgIC8qIDc4MCAgIE1IeiAqLworCXsgLmxvbWF4ID0gMTMxMjAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gNCwgLmdjMyA9IDB9LCAgLyogODIwICAgTUh6ICovCisJeyAubG9tYXggPSAxMzkyMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMH0sICAvKiA4NzAgICBNSHogKi8KKwl7IC5sb21heCA9IDE0NTc2LCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDQsIC5nYzMgPSAwfSwgIC8qIDkxMSAgIE1IeiAqLworCXsgLmxvbWF4ID0gICAgIDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDB9ICAgLyogRW5kICovCit9OworCitzdGF0aWMgdm9pZCB0ZGE4Mjd4YV90dW5lKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1MTYgaWZjLCB1bnNpZ25lZCBpbnQgZnJlcSkKK3sKKwl1bnNpZ25lZCBjaGFyIHR1bmVyX3JlZ1sxNF07CisJdW5zaWduZWQgY2hhciByZWcyWzJdOworCXUzMiBOOworCWludCBpOworCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSB0LT50ZGE4Mjd4X2FkZHIsIC5mbGFncyA9IDB9OworCisJaWYgKHQtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykKKwkJZnJlcSA9IGZyZXEgLyAxMDAwOworCisJTiA9IGZyZXEgKyBpZmM7CisJaSA9IDA7CisJd2hpbGUgKHRkYTgyN3hhX2FuYWxvZ1tpXS5sb21heCA8IE4pIHsKKwkJaWYodGRhODI3eGFfYW5hbG9nW2kgKyAxXS5sb21heCA9PSAwKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisKKwlOID0gTiA8PCB0ZGE4Mjd4YV9hbmFsb2dbaV0uc3BkOworCisJdHVuZXJfcmVnWzBdID0gMDsKKwl0dW5lcl9yZWdbMV0gPSAodW5zaWduZWQgY2hhcikoTj4+OCk7CisJdHVuZXJfcmVnWzJdID0gKHVuc2lnbmVkIGNoYXIpIE47CisJdHVuZXJfcmVnWzNdID0gMDsKKwl0dW5lcl9yZWdbNF0gPSAweDE2OworCXR1bmVyX3JlZ1s1XSA9ICh0ZGE4Mjd4YV9hbmFsb2dbaV0uc3BkIDw8IDUpICsgKHRkYTgyN3hhX2FuYWxvZ1tpXS5zdmNvIDw8IDMpICsKKwkJCXRkYTgyN3hhX2FuYWxvZ1tpXS5zYnM7CisJdHVuZXJfcmVnWzZdID0gMHg4YiArICh0ZGE4Mjd4YV9hbmFsb2dbaV0uZ2MzIDw8IDQpOworCXR1bmVyX3JlZ1s3XSA9IDB4MGM7CisJdHVuZXJfcmVnWzhdID0gNDsKKwl0dW5lcl9yZWdbOV0gPSAweDIwOworCXR1bmVyX3JlZ1sxMF0gPSAweGZmOworCXR1bmVyX3JlZ1sxMV0gPSAweGUwOworCXR1bmVyX3JlZ1sxMl0gPSAwOworCXR1bmVyX3JlZ1sxM10gPSAweDM5ICsgKHQtPnRkYTgyN3hfbHBzZWwgPDwgMSk7CisKKwltc2cuYnVmID0gdHVuZXJfcmVnOworCW1zZy5sZW4gPSAxNDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwltc2cuYnVmPSByZWcyOworCW1zZy5sZW4gPSAyOworCXJlZzJbMF0gPSAweDYwOworCXJlZzJbMV0gPSAweDNjOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCXJlZzJbMF0gPSAweGEwOworCXJlZzJbMV0gPSAweGMwOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCW1zbGVlcCgyKTsKKwlyZWcyWzBdID0gMHgzMDsKKwlyZWcyWzFdID0gMHgxMCArIHRkYTgyN3hhX2FuYWxvZ1tpXS5zY3I7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJbXNsZWVwKDU1MCk7CisJcmVnMlswXSA9IDB4NTA7CisJcmVnMlsxXSA9IDB4OGYgKyAodGRhODI3eGFfYW5hbG9nW2ldLmdjMyA8PCA0KTsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHg4MDsKKwlyZWcyWzFdID0gMHgyODsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHhiMDsKKwlyZWcyWzFdID0gMHgwMTsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHhjMDsKKwlyZWcyWzFdID0gMHgxOSArICh0LT50ZGE4Mjd4X2xwc2VsIDw8IDEpOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKK30KKworc3RhdGljIHZvaWQgdGRhODI3eGFfYWdjZihzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJdW5zaWduZWQgY2hhciBkYXRhW10gPSB7MHg4MCwgMHgyY307CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gdC0+dGRhODI3eF9hZGRyLCAuYnVmID0gZGF0YSwKKwkJCSAgICAgIC5mbGFncyA9IDAsIC5sZW4gPSAyfTsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdGRhODI5MF9pMmNfYnJpZGdlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBpbnQgY2xvc2UpCit7CisJdW5zaWduZWQgY2hhciAgZW5hYmxlWzJdID0geyAweDIxLCAweEMwIH07CisJdW5zaWduZWQgY2hhciBkaXNhYmxlWzJdID0geyAweDIxLCAweDgwIH07CisJdW5zaWduZWQgY2hhciAqbXNnOworCWlmKGNsb3NlKSB7CisJCW1zZyA9IGVuYWJsZTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsIG1zZywgMik7CisJCS8qIGxldCB0aGUgYnJpZGdlIHN0YWJpbGl6ZSAqLworCQltc2xlZXAoMjApOworCX0gZWxzZSB7CisJCW1zZyA9IGRpc2FibGU7CisJCWkyY19tYXN0ZXJfc2VuZChjLCBtc2csIDIpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHRkYTgyOTBfdHVuZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTE2IGlmYywgdW5zaWduZWQgaW50IGZyZXEpCit7CisJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXVuc2lnbmVkIGNoYXIgc29mdF9yZXNldFtdICA9IHsgMHgwMCwgMHgwMCB9OworCXVuc2lnbmVkIGNoYXIgZWFzeV9tb2RlW10gICA9IHsgMHgwMSwgdC0+dGRhODI5MF9lYXN5X21vZGUgfTsKKwl1bnNpZ25lZCBjaGFyIGV4cGVydF9tb2RlW10gPSB7IDB4MDEsIDB4ODAgfTsKKwl1bnNpZ25lZCBjaGFyIGdhaW5zZXRfb2ZmW10gPSB7IDB4MjgsIDB4MTQgfTsKKwl1bnNpZ25lZCBjaGFyIGlmX2FnY19zcGRbXSAgPSB7IDB4MGYsIDB4ODggfTsKKwl1bnNpZ25lZCBjaGFyIGFkY19oZWFkXzZbXSAgPSB7IDB4MDUsIDB4MDQgfTsKKwl1bnNpZ25lZCBjaGFyIGFkY19oZWFkXzlbXSAgPSB7IDB4MDUsIDB4MDIgfTsKKwl1bnNpZ25lZCBjaGFyIGFkY19oZWFkXzEyW10gPSB7IDB4MDUsIDB4MDEgfTsKKwl1bnNpZ25lZCBjaGFyIHBsbF9id19ub21bXSAgPSB7IDB4MGQsIDB4NDcgfTsKKwl1bnNpZ25lZCBjaGFyIHBsbF9id19sb3dbXSAgPSB7IDB4MGQsIDB4MjcgfTsKKwl1bnNpZ25lZCBjaGFyIGdhaW5zZXRfMltdICAgPSB7IDB4MjgsIDB4NjQgfTsKKwl1bnNpZ25lZCBjaGFyIGFnY19yc3Rfb25bXSAgPSB7IDB4MGUsIDB4MGIgfTsKKwl1bnNpZ25lZCBjaGFyIGFnY19yc3Rfb2ZmW10gPSB7IDB4MGUsIDB4MDkgfTsKKwl1bnNpZ25lZCBjaGFyIGlmX2FnY19zZXRbXSAgPSB7IDB4MGYsIDB4ODEgfTsKKwl1bnNpZ25lZCBjaGFyIGFkZHJfYWRjX3NhdCAgPSAweDFhOworCXVuc2lnbmVkIGNoYXIgYWRkcl9hZ2Nfc3RhdCA9IDB4MWQ7CisJdW5zaWduZWQgY2hhciBhZGRyX3BsbF9zdGF0ID0gMHgxYjsKKwl1bnNpZ25lZCBjaGFyIGFkY19zYXQsIGFnY19zdGF0LAorCQkgICAgICBwbGxfc3RhdDsKKworCWkyY19tYXN0ZXJfc2VuZChjLCBlYXN5X21vZGUsIDIpOworCWkyY19tYXN0ZXJfc2VuZChjLCBzb2Z0X3Jlc2V0LCAyKTsKKwltc2xlZXAoMSk7CisKKwlleHBlcnRfbW9kZVsxXSA9IHQtPnRkYTgyOTBfZWFzeV9tb2RlICsgMHg4MDsKKwlpMmNfbWFzdGVyX3NlbmQoYywgZXhwZXJ0X21vZGUsIDIpOworCWkyY19tYXN0ZXJfc2VuZChjLCBnYWluc2V0X29mZiwgMik7CisJaTJjX21hc3Rlcl9zZW5kKGMsIGlmX2FnY19zcGQsIDIpOworCWlmICh0LT50ZGE4MjkwX2Vhc3lfbW9kZSAmIDB4NjApCisJCWkyY19tYXN0ZXJfc2VuZChjLCBhZGNfaGVhZF85LCAyKTsKKwllbHNlCisJCWkyY19tYXN0ZXJfc2VuZChjLCBhZGNfaGVhZF82LCAyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgcGxsX2J3X25vbSwgMik7CisKKwl0ZGE4MjkwX2kyY19icmlkZ2UoYywgMSk7CisJaWYgKHQtPnRkYTgyN3hfdmVyICE9IDApCisJCXRkYTgyN3hhX3R1bmUoYywgaWZjLCBmcmVxKTsKKwllbHNlCisJCXRkYTgyN3hfdHVuZShjLCBpZmMsIGZyZXEpOworCS8qIGFkanVzdCBoZWFkcm9vbSByZXNwLiBnYWluICovCisJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX2FkY19zYXQsIDEpOworCWkyY19tYXN0ZXJfcmVjdihjLCAmYWRjX3NhdCwgMSk7CisJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX2FnY19zdGF0LCAxKTsKKwlpMmNfbWFzdGVyX3JlY3YoYywgJmFnY19zdGF0LCAxKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgJmFkZHJfcGxsX3N0YXQsIDEpOworCWkyY19tYXN0ZXJfcmVjdihjLCAmcGxsX3N0YXQsIDEpOworCWlmIChwbGxfc3RhdCAmIDB4ODApCisJCXR1bmVyX2RiZygidGRhODI5MCBpcyBsb2NrZWQsIEFHQzogJWRcbiIsIGFnY19zdGF0KTsKKwllbHNlCisJCXR1bmVyX2RiZygidGRhODI5MCBub3QgbG9ja2VkLCBubyBzaWduYWw/XG4iKTsKKwlpZiAoKGFnY19zdGF0ID4gMTE1KSB8fCAoIShwbGxfc3RhdCAmIDB4ODApICYmIChhZGNfc2F0IDwgMjApKSkgeworCQl0dW5lcl9kYmcoImFkanVzdCBnYWluLCBzdGVwIDEuIEFnYzogJWQsIEFEQyBzdGF0OiAlZCwgbG9jazogJWRcbiIsCisJCQkgICBhZ2Nfc3RhdCwgYWRjX3NhdCwgcGxsX3N0YXQgJiAweDgwKTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsIGdhaW5zZXRfMiwgMik7CisJCW1zbGVlcCgxMDApOworCQlpMmNfbWFzdGVyX3NlbmQoYywgJmFkZHJfYWdjX3N0YXQsIDEpOworCQlpMmNfbWFzdGVyX3JlY3YoYywgJmFnY19zdGF0LCAxKTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX3BsbF9zdGF0LCAxKTsKKwkJaTJjX21hc3Rlcl9yZWN2KGMsICZwbGxfc3RhdCwgMSk7CisJCWlmICgoYWdjX3N0YXQgPiAxMTUpIHx8ICEocGxsX3N0YXQgJiAweDgwKSkgeworCQkJdHVuZXJfZGJnKCJhZGp1c3QgZ2Fpbiwgc3RlcCAyLiBBZ2M6ICVkLCBsb2NrOiAlZFxuIiwKKwkJCQkgICBhZ2Nfc3RhdCwgcGxsX3N0YXQgJiAweDgwKTsKKwkJCWlmICh0LT50ZGE4Mjd4X3ZlciAhPSAwKQorCQkJCXRkYTgyN3hhX2FnY2YoYyk7CisJCQllbHNlCisJCQkJdGRhODI3eF9hZ2NmKGMpOworCQkJbXNsZWVwKDEwMCk7CisJCQlpMmNfbWFzdGVyX3NlbmQoYywgJmFkZHJfYWdjX3N0YXQsIDEpOworCQkJaTJjX21hc3Rlcl9yZWN2KGMsICZhZ2Nfc3RhdCwgMSk7CisJCQlpMmNfbWFzdGVyX3NlbmQoYywgJmFkZHJfcGxsX3N0YXQsIDEpOworCQkJaTJjX21hc3Rlcl9yZWN2KGMsICZwbGxfc3RhdCwgMSk7CisJCQlpZigoYWdjX3N0YXQgPiAxMTUpIHx8ICEocGxsX3N0YXQgJiAweDgwKSkgeworCQkJCXR1bmVyX2RiZygiYWRqdXN0IGdhaW4sIHN0ZXAgMy4gQWdjOiAlZFxuIiwgYWdjX3N0YXQpOworCQkJCWkyY19tYXN0ZXJfc2VuZChjLCBhZGNfaGVhZF8xMiwgMik7CisJCQkJaTJjX21hc3Rlcl9zZW5kKGMsIHBsbF9id19sb3csIDIpOworCQkJCW1zbGVlcCgxMDApOworCQkJfQorCQl9CisJfQorCisJLyogbC8gbCcgZGVhZGxvY2s/ICovCisJaWYodC0+dGRhODI5MF9lYXN5X21vZGUgJiAweDYwKSB7CisJCWkyY19tYXN0ZXJfc2VuZChjLCAmYWRkcl9hZGNfc2F0LCAxKTsKKwkJaTJjX21hc3Rlcl9yZWN2KGMsICZhZGNfc2F0LCAxKTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX3BsbF9zdGF0LCAxKTsKKwkJaTJjX21hc3Rlcl9yZWN2KGMsICZwbGxfc3RhdCwgMSk7CisJCWlmICgoYWRjX3NhdCA+IDIwKSB8fCAhKHBsbF9zdGF0ICYgMHg4MCkpIHsKKwkJCXR1bmVyX2RiZygidHJ5aW5nIHRvIHJlc29sdmUgU0VDQU0gTCBkZWFkbG9ja1xuIik7CisJCQlpMmNfbWFzdGVyX3NlbmQoYywgYWdjX3JzdF9vbiwgMik7CisJCQltc2xlZXAoNDApOworCQkJaTJjX21hc3Rlcl9zZW5kKGMsIGFnY19yc3Rfb2ZmLCAyKTsKKwkJfQorCX0KKworCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAwKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgaWZfYWdjX3NldCwgMik7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjZGVmaW5lIFY0TDJfU1REX01OCShWNEwyX1NURF9QQUxfTXxWNEwyX1NURF9QQUxfTnxWNEwyX1NURF9QQUxfTmN8VjRMMl9TVERfTlRTQykKICNkZWZpbmUgVjRMMl9TVERfQgkoVjRMMl9TVERfUEFMX0J8VjRMMl9TVERfUEFMX0IxfFY0TDJfU1REX1NFQ0FNX0IpCiAjZGVmaW5lIFY0TDJfU1REX0dICShWNEwyX1NURF9QQUxfR3xWNEwyX1NURF9QQUxfSHxWNEwyX1NURF9TRUNBTV9HfFY0TDJfU1REX1NFQ0FNX0gpCkBAIC0xNzQsMjAgKzQwOCwzNyBAQAogCiBzdGF0aWMgdm9pZCBzZXRfYXVkaW8oc3RydWN0IHR1bmVyICp0KQogewotCXQtPmkyY19lYXN5X21vZGVbMF0gPSAweDAxOworCWNoYXIqIG1vZGU7CiAKLQlpZiAodC0+c3RkICYgVjRMMl9TVERfTU4pCi0JCXQtPmkyY19lYXN5X21vZGVbMV0gPSAweDAxOwotCWVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0IpCi0JCXQtPmkyY19lYXN5X21vZGVbMV0gPSAweDAyOwotCWVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0dIKQotCQl0LT5pMmNfZWFzeV9tb2RlWzFdID0gMHgwNDsKLQllbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9QQUxfSSkKLQkJdC0+aTJjX2Vhc3lfbW9kZVsxXSA9IDB4MDg7Ci0JZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfREspCi0JCXQtPmkyY19lYXN5X21vZGVbMV0gPSAweDEwOwotCWVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpCi0JCXQtPmkyY19lYXN5X21vZGVbMV0gPSAweDIwOworCXQtPnRkYTgyN3hfbHBzZWwgPSAwOworCW1vZGUgPSAieHgiOworCWlmICh0LT5zdGQgJiBWNEwyX1NURF9NTikgeworCQl0LT5zZ0lGID0gOTI7CisJCXQtPnRkYTgyOTBfZWFzeV9tb2RlID0gMHgwMTsKKwkJdC0+dGRhODI3eF9scHNlbCA9IDE7CisJCW1vZGUgPSAiTU4iOworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfQikgeworCQl0LT5zZ0lGID0gMTA4OworCQl0LT50ZGE4MjkwX2Vhc3lfbW9kZSA9IDB4MDI7CisJCW1vZGUgPSAiQiI7CisJfSBlbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9HSCkgeworCQl0LT5zZ0lGID0gMTI0OworCQl0LT50ZGE4MjkwX2Vhc3lfbW9kZSA9IDB4MDQ7CisJCW1vZGUgPSAiR0giOworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKKwkJdC0+c2dJRiA9IDEyNDsKKwkJdC0+dGRhODI5MF9lYXN5X21vZGUgPSAweDA4OworCQltb2RlID0gIkkiOworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfREspIHsKKwkJdC0+c2dJRiA9IDEyNDsKKwkJdC0+dGRhODI5MF9lYXN5X21vZGUgPSAweDEwOworCQltb2RlID0gIkRLIjsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwkJdC0+c2dJRiA9IDEyNDsKKwkJdC0+dGRhODI5MF9lYXN5X21vZGUgPSAweDIwOworCQltb2RlID0gIkwiOworCX0KKyAgICB0dW5lcl9kYmcoInNldHRpbmcgdGRhODI5MCB0byBzeXN0ZW0gJXNcbiIsIG1vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdHZfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGZyZXEpCkBAIC0xOTUsMTUgKzQ0NiwxMyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAogCXNldF9hdWRpbyh0KTsKLQlzZXRfZnJlcXVlbmN5KHQsIDg2NCwgZnJlcSk7Ci0JdGRhODI5MF90dW5lKGMpOworCXRkYTgyOTBfdHVuZShjLCB0LT5zZ0lGLCBmcmVxKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3JhZGlvX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQlzZXRfZnJlcXVlbmN5KHQsIDcwNCwgZnJlcSk7Ci0JdGRhODI5MF90dW5lKGMpOworCS8qIGlmIGZyZXF1ZW5jeSBpcyA1LjUgTUh6ICovCisJdGRhODI5MF90dW5lKGMsIDg4LCBmcmVxKTsKIH0KIAogc3RhdGljIGludCBoYXNfc2lnbmFsKHN0cnVjdCBpMmNfY2xpZW50ICpjKQpAQCAtMjE2LDI3ICs0NjUsMTQ1IEBACiAJcmV0dXJuIChhZmMgJiAweDgwKT8gNjU1MzU6MDsKIH0KIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgdm9pZCBzdGFuZGJ5KHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBpMmNfbXNnX3N0YW5kYnksIEFSUkFZX1NJWkUoaTJjX21zZ19zdGFuZGJ5KSk7CisJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXVuc2lnbmVkIGNoYXIgY2IxW10gPSB7IDB4MzAsIDB4RDAgfTsKKwl1bnNpZ25lZCBjaGFyIHRkYTgyOTBfc3RhbmRieVtdID0geyAweDAwLCAweDAyIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gdC0+dGRhODI3eF9hZGRyLCAuZmxhZ3M9MCwgLmJ1Zj1jYjEsIC5sZW4gPSAyfTsKKworCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAxKTsKKwlpZiAodC0+dGRhODI3eF92ZXIgIT0gMCkKKwkJY2IxWzFdID0gMHg5MDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDApOworCWkyY19tYXN0ZXJfc2VuZChjLCB0ZGE4MjkwX3N0YW5kYnksIDIpOwogfQogCisKK3N0YXRpYyB2b2lkIHRkYTgyOTBfaW5pdF9pZihzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3sKKwl1bnNpZ25lZCBjaGFyIHNldF9WU1tdID0geyAweDMwLCAweDZGIH07CisJdW5zaWduZWQgY2hhciBzZXRfR1AwMV9DRltdID0geyAweDIwLCAweDBCIH07CisKKwlpMmNfbWFzdGVyX3NlbmQoYywgc2V0X1ZTLCAyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgc2V0X0dQMDFfQ0YsIDIpOworfQorCitzdGF0aWMgdm9pZCB0ZGE4MjkwX2luaXRfdHVuZXIoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXVuc2lnbmVkIGNoYXIgdGRhODI3NV9pbml0W10gID0geyAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGRDLCAweDA0LCAweEFmLAorCQkJCQkgIDB4M0YsIDB4MkEsIDB4MDQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4NDAgfTsKKwl1bnNpZ25lZCBjaGFyIHRkYTgyNzVhX2luaXRbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkQywgMHgwNSwgMHg4YiwKKwkJCQkJICAweDBjLCAweDA0LCAweDIwLCAweEZGLCAweDAwLCAweDAwLCAweDRiIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gdC0+dGRhODI3eF9hZGRyLCAuZmxhZ3M9MCwKKwkJCSAgICAgIC5idWY9dGRhODI3NV9pbml0LCAubGVuID0gMTR9OworCWlmICh0LT50ZGE4Mjd4X3ZlciAhPSAwKQorCQltc2cuYnVmID0gdGRhODI3NWFfaW5pdDsKKworCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAxKTsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIGludCB0ZGE4MjkwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXU4IGRhdGE7CisJaW50IGksIHJldCwgdHVuZXJzX2ZvdW5kOworCXUzMiB0dW5lcl9hZGRyczsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmZsYWdzPUkyQ19NX1JELCAuYnVmPSZkYXRhLCAubGVuID0gMX07CiAKLQlzdHJsY3B5KGMtPm5hbWUsICJ0ZGE4MjkwKzc1Iiwgc2l6ZW9mKGMtPm5hbWUpKTsKKwl0ZGE4MjkwX2kyY19icmlkZ2UoYywgMSk7CisJLyogcHJvYmUgZm9yIHR1bmVyIGNoaXAgKi8KKwl0dW5lcnNfZm91bmQgPSAwOworCXR1bmVyX2FkZHJzID0gMDsKKwlmb3IgKGk9MHg2MDsgaTw9IDB4NjM7IGkrKykgeworCQltc2cuYWRkciA9IGk7CisJCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKwkJaWYgKHJldCA9PSAxKSB7CisJCQl0dW5lcnNfZm91bmQrKzsKKwkJCXR1bmVyX2FkZHJzID0gKHR1bmVyX2FkZHJzIDw8IDgpICsgaTsKKwkJfQorCX0KKwkvKiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHR1bmVyLCB3ZSBleHBlY3QgdGhlIHJpZ2h0IG9uZSBpcworCSAgIGJlaGluZCB0aGUgYnJpZGdlIGFuZCB3ZSBjaG9vc2UgdGhlIGhpZ2hlc3QgYWRkcmVzcyB0aGF0IGRvZXNuJ3QKKwkgICBnaXZlIGEgcmVzcG9uc2Ugbm93CisJICovCisJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDApOworCWlmKHR1bmVyc19mb3VuZCA+IDEpCisJCWZvciAoaSA9IDA7IGkgPCB0dW5lcnNfZm91bmQ7IGkrKykgeworCQkJbXNnLmFkZHIgPSB0dW5lcl9hZGRycyAgJiAweGZmOworCQkJcmV0ID0gaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCQkJaWYocmV0ID09IDEpCisJCQkJdHVuZXJfYWRkcnMgPSB0dW5lcl9hZGRycyA+PiA4OworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJaWYgKHR1bmVyX2FkZHJzID09IDApIHsKKwkJdHVuZXJfYWRkcnMgPSAweDYxOworCQl0dW5lcl9pbmZvICgiY291bGQgbm90IGNsZWFybHkgaWRlbnRpZnkgdHVuZXIgYWRkcmVzcywgZGVmYXVsdGluZyB0byAleFxuIiwKKwkJCSAgICAgdHVuZXJfYWRkcnMpOworCX0gZWxzZSB7CisJCXR1bmVyX2FkZHJzID0gdHVuZXJfYWRkcnMgJiAweGZmOworCQl0dW5lcl9pbmZvICgic2V0dGluZyB0dW5lciBhZGRyZXNzIHRvICV4XG4iLCB0dW5lcl9hZGRycyk7CisJfQorCXQtPnRkYTgyN3hfYWRkciA9IHR1bmVyX2FkZHJzOworCW1zZy5hZGRyID0gdHVuZXJfYWRkcnM7CisKKwl0ZGE4MjkwX2kyY19icmlkZ2UoYywgMSk7CisJcmV0ID0gaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCWlmKCByZXQgIT0gMSkKKwkJdHVuZXJfd2FybiAoIlREQTgyN3ggYWNjZXNzIGZhaWxlZCFcbiIpOworCWlmICgoZGF0YSAmIDB4M2MpID09IDApIHsKKwkJc3RybGNweShjLT5uYW1lLCAidGRhODI5MCs3NSIsIHNpemVvZihjLT5uYW1lKSk7CisJCXQtPnRkYTgyN3hfdmVyID0gMDsKKwl9IGVsc2UgeworCQlzdHJsY3B5KGMtPm5hbWUsICJ0ZGE4MjkwKzc1YSIsIHNpemVvZihjLT5uYW1lKSk7CisJCXQtPnRkYTgyN3hfdmVyID0gMjsKKwl9CiAJdHVuZXJfaW5mbygidHVuZXI6IHR5cGUgc2V0IHRvICVzXG4iLCBjLT5uYW1lKTsKKwogCXQtPnR2X2ZyZXEgICAgPSBzZXRfdHZfZnJlcTsKIAl0LT5yYWRpb19mcmVxID0gc2V0X3JhZGlvX2ZyZXE7CiAJdC0+aGFzX3NpZ25hbCA9IGhhc19zaWduYWw7CiAJdC0+c3RhbmRieSA9IHN0YW5kYnk7CisJdC0+dGRhODI3eF9scHNlbCA9IDA7CiAKLQlpMmNfbWFzdGVyX3NlbmQoYywgaTJjX2VuYWJsZV9icmlkZ2UsIEFSUkFZX1NJWkUoaTJjX2VuYWJsZV9icmlkZ2UpKTsKLQlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgaTJjX21zZ19pbml0LCBBUlJBWV9TSVpFKGkyY19tc2dfaW5pdCkpOworCXRkYTgyOTBfaW5pdF90dW5lcihjKTsKKwl0ZGE4MjkwX2luaXRfaWYoYyk7CiAJcmV0dXJuIDA7CiB9CiAKK2ludCB0ZGE4MjkwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXVuc2lnbmVkIGNoYXIgc29mdF9yZXNldFtdICA9IHsgMHgwMCwgMHgwMCB9OworCXVuc2lnbmVkIGNoYXIgZWFzeV9tb2RlX2JbXSA9IHsgMHgwMSwgMHgwMiB9OworCXVuc2lnbmVkIGNoYXIgZWFzeV9tb2RlX2dbXSA9IHsgMHgwMSwgMHgwNCB9OworCXVuc2lnbmVkIGNoYXIgYWRkcl9kdG9fbHNiID0gMHgwNzsKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisKKwlpMmNfbWFzdGVyX3NlbmQoYywgZWFzeV9tb2RlX2IsIDIpOworCWkyY19tYXN0ZXJfc2VuZChjLCBzb2Z0X3Jlc2V0LCAyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgJmFkZHJfZHRvX2xzYiwgMSk7CisJaTJjX21hc3Rlcl9yZWN2KGMsICZkYXRhLCAxKTsKKwlpZiAoZGF0YSA9PSAwKSB7CisJCWkyY19tYXN0ZXJfc2VuZChjLCBlYXN5X21vZGVfZywgMik7CisJCWkyY19tYXN0ZXJfc2VuZChjLCBzb2Z0X3Jlc2V0LCAyKTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX2R0b19sc2IsIDEpOworCQlpMmNfbWFzdGVyX3JlY3YoYywgJmRhdGEsIDEpOworCQlpZiAoZGF0YSA9PSAweDdiKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKIC8qCiAgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwppbmRleCA3ZTNkY2RiLi5hNWUzN2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwpAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSAiYnR0di5oIgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgotI2luY2x1ZGUgPG1lZGlhL2lkLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CkBAIC0xMjYsMjAgKzEyNSwyMCBAQAogCiBzdGF0aWMgaW50IGkyY19yZWFkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCByZWcpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgd3JpdGVbMV07Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgcmVhZFsxXTsKLSAgICAgICAgc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsKLSAgICAgICAgICAgICAgICB7IGFkZHIsIDAsICAgICAgICAxLCB3cml0ZSB9LAotICAgICAgICAgICAgICAgIHsgYWRkciwgSTJDX01fUkQsIDEsIHJlYWQgIH0KLSAgICAgICAgfTsKLSAgICAgICAgd3JpdGVbMF0gPSByZWc7CisJdW5zaWduZWQgY2hhciB3cml0ZVsxXTsKKwl1bnNpZ25lZCBjaGFyIHJlYWRbMV07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsKKwkJeyBhZGRyLCAwLCAgICAgICAgMSwgd3JpdGUgfSwKKwkJeyBhZGRyLCBJMkNfTV9SRCwgMSwgcmVhZCAgfQorCX07CisJd3JpdGVbMF0gPSByZWc7CiAKLSAgICAgICAgaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGFkYXAsbXNncywyKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgInRkYTk4NzU6IEkvTyBlcnJvciAocmVhZDIpXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZHByaW50aygidGRhOTg3NTogY2hpcF9yZWFkMjogcmVnJWQ9MHgleFxuIixyZWcscmVhZFswXSk7Ci0gICAgICAgIHJldHVybiByZWFkWzBdOworCWlmICgyICE9IGkyY190cmFuc2ZlcihhZGFwLG1zZ3MsMikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidGRhOTg3NTogSS9PIGVycm9yIChyZWFkMilcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWRwcmludGsoInRkYTk4NzU6IGNoaXBfcmVhZDI6IHJlZyVkPTB4JXhcbiIscmVnLHJlYWRbMF0pOworCXJldHVybiByZWFkWzBdOwogfQogCiBzdGF0aWMgdm9pZCB0ZGE5ODc1X3NldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtMTg0LDcgKzE4Myw3IEBACiAJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfREFDT1MsIDB4MDIgKTsgLyogc2lnIERBQyBpL28oaW46bmljYW0pKi8KIAl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9BRENJUywgMHg2ZiApOyAvKiBzaWcgQURDIGlucHV0KGluOm1vbm8pKi8KIAl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9MT1NSLCAweDAwICk7ICAvKiBsaW5lIG91dCAoaW46bW9ubykqLwotIAl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9BRVIsIDB4MDAgKTsgICAvKjA2IEVmZmVjdCAoQVZMK1BTRVVETykgKi8KKwl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9BRVIsIDB4MDAgKTsgICAvKjA2IEVmZmVjdCAoQVZMK1BTRVVETykgKi8KIAl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9NQ1MsIDB4NDQgKTsgICAvKiBNYWluIGNoIHNlbGVjdCAoREFDKSAqLwogCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X01WTCwgMHgwMyApOyAgIC8qIFZvbCBNYWluIGxlZnQgMTBkQiAqLwogCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X01WUiwgMHgwMyApOyAgIC8qIFZvbCBNYWluIHJpZ2h0IDEwZEIqLwpAQCAtMjAwLDcgKzE5OSw3IEBACiAKIAl0LT5tb2RlPUFVRElPX1VOTVVURTsKIAl0LT5sdm9sPXQtPnJ2b2wgPTA7ICAJLyogMGRCICovCi0JdC0+YmFzcz0wOyAJCSAgICAgICAgLyogMGRCICovCisJdC0+YmFzcz0wOyAJCQkvKiAwZEIgKi8KIAl0LT50cmVibGU9MDsgIAkJLyogMGRCICovCiAJdGRhOTg3NV9zZXQoY2xpZW50KTsKIApAQCAtMjM5LDkgKzIzOCw5IEBACiAJbWVtc2V0KHQsMCxzaXplb2YgKnQpOwogCiAJY2xpZW50ID0gJnQtPmM7Ci0gICAgICAgIG1lbWNweShjbGllbnQsJmNsaWVudF90ZW1wbGF0ZSxzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLSAgICAgICAgY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKLSAgICAgICAgY2xpZW50LT5hZGRyID0gYWRkcjsKKwltZW1jcHkoY2xpZW50LCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKKwljbGllbnQtPmFkZHIgPSBhZGRyOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHQpOwogCiAJaWYoIXRkYTk4NzVfY2hlY2tpdChhZGFwLGFkZHIpKSB7CkBAIC0yODcsNyArMjg2LDcgQEAKIAlkcHJpbnRrKCJJbiB0ZGE5ODc1X2NvbW1hbmQuLi5cbiIpOwogCiAJc3dpdGNoIChjbWQpIHsKLSAgICAgICAgLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCisJLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCiAJLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCiAJICAga2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLwogCWNhc2UgVklESU9DR0FVRElPOgpAQCAtMzU1LDcgKzM1NCw3IEBACiAvL3ByaW50aygidGRhOTg3NSBiYWw6JTA0eCB2b2w6JTA0eCBiYXNzOiUwNHggdHJlYmxlOiUwNHhcbiIsdmEtPmJhbGFuY2UsdmEtPnZvbHVtZSx2YS0+YmFzcyx2YS0+dHJlYmxlKTsKIAogCi0gICAgICAgICAgICAgICAgdGRhOTg3NV9zZXQoY2xpZW50KTsKKwkJdGRhOTg3NV9zZXQoY2xpZW50KTsKIAogCQlicmVhazsKIApAQCAtMzc0LDE4ICszNzMsMTggQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyYyB0ZGE5ODc1IGRyaXZlciIsCi0gICAgICAgIC5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAotICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAorCS5uYW1lICAgICAgICAgICA9ICJpMmMgdGRhOTg3NSBkcml2ZXIiLAorCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAorCS5mbGFncyAgICAgICAgICA9IEkyQ19ERl9OT1RJRlksCiAJLmF0dGFjaF9hZGFwdGVyID0gdGRhOTg3NV9wcm9iZSwKLSAgICAgICAgLmRldGFjaF9jbGllbnQgID0gdGRhOTg3NV9kZXRhY2gsCi0gICAgICAgIC5jb21tYW5kICAgICAgICA9IHRkYTk4NzVfY29tbWFuZCwKKwkuZGV0YWNoX2NsaWVudCAgPSB0ZGE5ODc1X2RldGFjaCwKKwkuY29tbWFuZCAgICAgICAgPSB0ZGE5ODc1X2NvbW1hbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0KIHsKLSAgICAgICAgLm5hbWUgICAgICA9ICJ0ZGE5ODc1IiwKLSAgICAgICAgLmRyaXZlciAgICA9ICZkcml2ZXIsCisJLm5hbWUgICAgICA9ICJ0ZGE5ODc1IiwKKwkuZHJpdmVyICAgID0gJmRyaXZlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHRkYTk4NzVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4ODcuYwppbmRleCA5NDA1M2YxLi40MjQ5MTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4ODcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4ODcuYwpAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogCiAvKiBDaGlwczoKICAgIFREQTk4ODUgKFBBTCwgTlRTQykKQEAgLTQ0LDggKzQzLDEzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgVU5TRVQgICAgICAgKC0xVSkKLSNkZWZpbmUgUFJFRklYICAgICAgInRkYTk4ODUvNi83OiAiCi0jZGVmaW5lIGRwcmludGsgICAgIGlmIChkZWJ1ZykgcHJpbnRrCisjZGVmaW5lIHRkYTk4ODdfaW5mbyhmbXQsIGFyZy4uLikgZG8ge1wKKwlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+Y2xpZW50Lm5hbWUsIFwKKwkJCWkyY19hZGFwdGVyX2lkKHQtPmNsaWVudC5hZGFwdGVyKSwgdC0+Y2xpZW50LmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRkYTk4ODdfZGJnKGZtdCwgYXJnLi4uKSBkbyB7XAorCWlmIChkZWJ1ZykgXAorCQlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+Y2xpZW50Lm5hbWUsIFwKKwkJCWkyY19hZGFwdGVyX2lkKHQtPmNsaWVudC5hZGFwdGVyKSwgdC0+Y2xpZW50LmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKIHN0cnVjdCB0ZGE5ODg3IHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAgY2xpZW50OwpAQCAtNTUsNiArNTksNyBAQAogCXVuc2lnbmVkIGludCAgICAgICBwaW5uYWNsZV9pZDsKIAl1bnNpZ25lZCBpbnQgICAgICAgdXNpbmdfdjRsMjsKIAl1bnNpZ25lZCBpbnQgCSAgIHJhZGlvX21vZGU7CisJdW5zaWduZWQgY2hhciAJICAgZGF0YVs0XTsKIH07CiAKIHN0cnVjdCB0dm5vcm0gewpAQCAtMTgwLDcgKzE4NSw4IEBACiAJCS5uYW1lICA9ICJTRUNBTS1MIiwKIAkJLmIgICAgID0gKCBjUG9zaXRpdmVBbVRWICB8CiAJCQkgICBjUVNTICAgICAgICAgICApLAotCQkuZSAgICAgPSAoIGNBdWRpb0lGXzZfNSAgIHwKKwkJLmUgICAgID0gKCBjR2F0aW5nXzM2CSAgfAorCQkJICAgY0F1ZGlvSUZfNl81ICAgfAogCQkJICAgY1ZpZGVvSUZfMzhfOTAgKSwKIAl9LHsKIAkJLnN0ZCAgID0gVjRMMl9TVERfU0VDQU1fREssCkBAIC0yMzYsNyArMjQyLDcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBkdW1wX3JlYWRfbWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYpCitzdGF0aWMgdm9pZCBkdW1wX3JlYWRfbWVzc2FnZShzdHJ1Y3QgdGRhOTg4NyAqdCwgdW5zaWduZWQgY2hhciAqYnVmKQogewogCXN0YXRpYyBjaGFyICphZmNbMTZdID0gewogCQkiLSAxMi41IGtIeiIsCkBAIC0yNTYsMTUgKzI2MiwxNSBAQAogCQkiKyAzNy41IGtIeiIsCiAJCSIrIDEyLjUga0h6IiwKIAl9OwotCXByaW50ayhQUkVGSVggInJlYWQ6IDB4JTJ4XG4iLCBidWZbMF0pOwotCXByaW50aygiICBhZnRlciBwb3dlciBvbiA6ICVzXG4iLCAoYnVmWzBdICYgMHgwMSkgPyAieWVzIiA6ICJubyIpOwotCXByaW50aygiICBhZmMgICAgICAgICAgICA6ICVzXG4iLCBhZmNbKGJ1ZlswXSA+PiAxKSAmIDB4MGZdKTsKLQlwcmludGsoIiAgZm1pZiBsZXZlbCAgICAgOiAlc1xuIiwgKGJ1ZlswXSAmIDB4MjApID8gImhpZ2giIDogImxvdyIpOwotCXByaW50aygiICBhZmMgd2luZG93ICAgICA6ICVzXG4iLCAoYnVmWzBdICYgMHg0MCkgPyAiaW4iIDogIm91dCIpOwotCXByaW50aygiICB2ZmkgbGV2ZWwgICAgICA6ICVzXG4iLCAoYnVmWzBdICYgMHg4MCkgPyAiaGlnaCIgOiAibG93Iik7CisJdGRhOTg4N19pbmZvKCJyZWFkOiAweCUyeFxuIiwgYnVmWzBdKTsKKwl0ZGE5ODg3X2luZm8oIiAgYWZ0ZXIgcG93ZXIgb24gOiAlc1xuIiwgKGJ1ZlswXSAmIDB4MDEpID8gInllcyIgOiAibm8iKTsKKwl0ZGE5ODg3X2luZm8oIiAgYWZjICAgICAgICAgICAgOiAlc1xuIiwgYWZjWyhidWZbMF0gPj4gMSkgJiAweDBmXSk7CisJdGRhOTg4N19pbmZvKCIgIGZtaWYgbGV2ZWwgICAgIDogJXNcbiIsIChidWZbMF0gJiAweDIwKSA/ICJoaWdoIiA6ICJsb3ciKTsKKwl0ZGE5ODg3X2luZm8oIiAgYWZjIHdpbmRvdyAgICAgOiAlc1xuIiwgKGJ1ZlswXSAmIDB4NDApID8gImluIiA6ICJvdXQiKTsKKwl0ZGE5ODg3X2luZm8oIiAgdmZpIGxldmVsICAgICAgOiAlc1xuIiwgKGJ1ZlswXSAmIDB4ODApID8gImhpZ2giIDogImxvdyIpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3dyaXRlX21lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIHZvaWQgZHVtcF93cml0ZV9tZXNzYWdlKHN0cnVjdCB0ZGE5ODg3ICp0LCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAJc3RhdGljIGNoYXIgKnNvdW5kWzRdID0gewogCQkiQU0vVFYiLApAQCAtMzA0LDU4ICszMTAsNTggQEAKIAkJIjQ0IE1IeiIsCiAJfTsKIAotCXByaW50ayhQUkVGSVggIndyaXRlOiBieXRlIEIgMHglMDJ4XG4iLGJ1ZlsxXSk7Ci0JcHJpbnRrKCIgIEIwICAgdmlkZW8gbW9kZSAgICAgIDogJXNcbiIsCisJdGRhOTg4N19pbmZvKCJ3cml0ZTogYnl0ZSBCIDB4JTAyeFxuIixidWZbMV0pOworCXRkYTk4ODdfaW5mbygiICBCMCAgIHZpZGVvIG1vZGUgICAgICA6ICVzXG4iLAogCSAgICAgICAoYnVmWzFdICYgMHgwMSkgPyAidmlkZW8gdHJhcCIgOiAic291bmQgdHJhcCIpOwotCXByaW50aygiICBCMSAgIGF1dG8gbXV0ZSBmbSAgICA6ICVzXG4iLAorCXRkYTk4ODdfaW5mbygiICBCMSAgIGF1dG8gbXV0ZSBmbSAgICA6ICVzXG4iLAogCSAgICAgICAoYnVmWzFdICYgMHgwMikgPyAieWVzIiA6ICJubyIpOwotCXByaW50aygiICBCMiAgIGNhcnJpZXIgbW9kZSAgICA6ICVzXG4iLAorCXRkYTk4ODdfaW5mbygiICBCMiAgIGNhcnJpZXIgbW9kZSAgICA6ICVzXG4iLAogCSAgICAgICAoYnVmWzFdICYgMHgwNCkgPyAiUVNTIiA6ICJJbnRlcmNhcnJpZXIiKTsKLQlwcmludGsoIiAgQjMtNCB0diBzb3VuZC9yYWRpbyAgOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIiAgQjMtNCB0diBzb3VuZC9yYWRpbyAgOiAlc1xuIiwKIAkgICAgICAgc291bmRbKGJ1ZlsxXSAmIDB4MTgpID4+IDNdKTsKLQlwcmludGsoIiAgQjUgICBmb3JjZSBtdXRlIGF1ZGlvOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIiAgQjUgICBmb3JjZSBtdXRlIGF1ZGlvOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlsxXSAmIDB4MjApID8gInllcyIgOiAibm8iKTsKLQlwcmludGsoIiAgQjYgICBvdXRwdXQgcG9ydCAxICAgOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIiAgQjYgICBvdXRwdXQgcG9ydCAxICAgOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlsxXSAmIDB4NDApID8gImhpZ2ggKGluYWN0aXZlKSIgOiAibG93IChhY3RpdmUpIik7Ci0JcHJpbnRrKCIgIEI3ICAgb3V0cHV0IHBvcnQgMiAgIDogJXNcbiIsCisJdGRhOTg4N19pbmZvKCIgIEI3ICAgb3V0cHV0IHBvcnQgMiAgIDogJXNcbiIsCiAJICAgICAgIChidWZbMV0gJiAweDgwKSA/ICJoaWdoIChpbmFjdGl2ZSkiIDogImxvdyAoYWN0aXZlKSIpOwogCi0JcHJpbnRrKFBSRUZJWCAid3JpdGU6IGJ5dGUgQyAweCUwMnhcbiIsYnVmWzJdKTsKLQlwcmludGsoIiAgQzAtNCB0b3AgYWRqdXN0bWVudCAgOiAlcyBkQlxuIiwgYWRqdXN0W2J1ZlsyXSAmIDB4MWZdKTsKLQlwcmludGsoIiAgQzUtNiBkZS1lbXBoYXNpcyAgICAgOiAlc1xuIiwgZGVlbXBoWyhidWZbMl0gJiAweDYwKSA+PiA1XSk7Ci0JcHJpbnRrKCIgIEM3ICAgYXVkaW8gZ2FpbiAgICAgIDogJXNcbiIsCisJdGRhOTg4N19pbmZvKCJ3cml0ZTogYnl0ZSBDIDB4JTAyeFxuIixidWZbMl0pOworCXRkYTk4ODdfaW5mbygiICBDMC00IHRvcCBhZGp1c3RtZW50ICA6ICVzIGRCXG4iLCBhZGp1c3RbYnVmWzJdICYgMHgxZl0pOworCXRkYTk4ODdfaW5mbygiICBDNS02IGRlLWVtcGhhc2lzICAgICA6ICVzXG4iLCBkZWVtcGhbKGJ1ZlsyXSAmIDB4NjApID4+IDVdKTsKKwl0ZGE5ODg3X2luZm8oIiAgQzcgICBhdWRpbyBnYWluICAgICAgOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlsyXSAmIDB4ODApID8gIi02IiA6ICIwIik7CiAKLQlwcmludGsoUFJFRklYICJ3cml0ZTogYnl0ZSBFIDB4JTAyeFxuIixidWZbM10pOwotCXByaW50aygiICBFMC0xIHNvdW5kIGNhcnJpZXIgICA6ICVzXG4iLAorCXRkYTk4ODdfaW5mbygid3JpdGU6IGJ5dGUgRSAweCUwMnhcbiIsYnVmWzNdKTsKKwl0ZGE5ODg3X2luZm8oIiAgRTAtMSBzb3VuZCBjYXJyaWVyICAgOiAlc1xuIiwKIAkgICAgICAgY2FycmllclsoYnVmWzNdICYgMHgwMyldKTsKLQlwcmludGsoIiAgRTYgICBsIHBsbCBnYW50aW5nICAgOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIiAgRTYgICBsIHBsbCBnYXRpbmcgICA6ICVzXG4iLAogCSAgICAgICAoYnVmWzNdICYgMHg0MCkgPyAiMzYiIDogIjEzIik7CiAKIAlpZiAoYnVmWzFdICYgMHgwOCkgewogCQkvKiByYWRpbyAqLwotCQlwcmludGsoIiAgRTItNCB2aWRlbyBpZiAgICAgICAgOiAlc1xuIiwKKwkJdGRhOTg4N19pbmZvKCIgIEUyLTQgdmlkZW8gaWYgICAgICAgIDogJXNcbiIsCiAJCSAgICAgICByaWZbKGJ1ZlszXSAmIDB4MGMpID4+IDJdKTsKLQkJcHJpbnRrKCIgIEU3ICAgdmlmIGFnYyBvdXRwdXQgIDogJXNcbiIsCisJCXRkYTk4ODdfaW5mbygiICBFNyAgIHZpZiBhZ2Mgb3V0cHV0ICA6ICVzXG4iLAogCQkgICAgICAgKGJ1ZlszXSAmIDB4ODApCiAJCSAgICAgICA/ICgoYnVmWzNdICYgMHgxMCkgPyAiZm0tYWdjIHJhZGlvIiA6ICJzaWYtYWdjIHJhZGlvIikKIAkJICAgICAgIDogImZtIHJhZGlvIGNhcnJpZXIgYWZjIik7CiAJfSBlbHNlIHsKIAkJLyogdmlkZW8gKi8KLQkJcHJpbnRrKCIgIEUyLTQgdmlkZW8gaWYgICAgICAgIDogJXNcbiIsCisJCXRkYTk4ODdfaW5mbygiICBFMi00IHZpZGVvIGlmICAgICAgICA6ICVzXG4iLAogCQkgICAgICAgdmlmWyhidWZbM10gJiAweDFjKSA+PiAyXSk7Ci0JCXByaW50aygiICBFNSAgIHR1bmVyIGdhaW4gICAgICA6ICVzXG4iLAorCQl0ZGE5ODg3X2luZm8oIiAgRTUgICB0dW5lciBnYWluICAgICAgOiAlc1xuIiwKIAkJICAgICAgIChidWZbM10gJiAweDgwKQogCQkgICAgICAgPyAoKGJ1ZlszXSAmIDB4MjApID8gImV4dGVybmFsIiA6ICJub3JtYWwiKQogCQkgICAgICAgOiAoKGJ1ZlszXSAmIDB4MjApID8gIm1pbmltdW0iICA6ICJub3JtYWwiKSk7Ci0JCXByaW50aygiICBFNyAgIHZpZiBhZ2Mgb3V0cHV0ICA6ICVzXG4iLAorCQl0ZGE5ODg3X2luZm8oIiAgRTcgICB2aWYgYWdjIG91dHB1dCAgOiAlc1xuIiwKIAkJICAgICAgIChidWZbM10gJiAweDgwKQogCQkgICAgICAgPyAoKGJ1ZlszXSAmIDB4MjApCiAJCQkgID8gInBpbjMgcG9ydCwgcGluMjIgdmlmIGFnYyBvdXQiCiAJCQkgIDogInBpbjIyIHBvcnQsIHBpbjMgdmlmIGFjZyBleHQgaW4iKQogCQkgICAgICAgOiAicGluMytwaW4yMiBwb3J0Iik7CiAJfQotCXByaW50aygiLS1cbiIpOworCXRkYTk4ODdfaW5mbygiLS1cbiIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zNzksMTEgKzM4NSwxMSBAQAogCQl9CiAJfQogCWlmIChOVUxMID09IG5vcm0pIHsKLQkJZHByaW50ayhQUkVGSVggIlVuc3VwcG9ydGVkIHR2bm9ybSBlbnRyeSAtIGF1ZGlvIG11dGVkXG4iKTsKKwkJdGRhOTg4N19kYmcoIlVuc3VwcG9ydGVkIHR2bm9ybSBlbnRyeSAtIGF1ZGlvIG11dGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWRwcmludGsoUFJFRklYICJjb25maWd1cmUgZm9yOiAlc1xuIixub3JtLT5uYW1lKTsKKwl0ZGE5ODg3X2RiZygiY29uZmlndXJlIGZvcjogJXNcbiIsbm9ybS0+bmFtZSk7CiAJYnVmWzFdID0gbm9ybS0+YjsKIAlidWZbMl0gPSBub3JtLT5jOwogCWJ1ZlszXSA9IG5vcm0tPmU7CkBAIC00NTgsNiArNDY0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmICgodC0+Y29uZmlnICYgVERBOTg4N19JTlRFUkNBUlJJRVJfTlRTQykgJiYgKHQtPnN0ZCAmIFY0TDJfU1REX05UU0MpKQorCQlidWZbMV0gJj0gfmNRU1M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NSwxMSArNDgzLDExIEBACiAJCX0KIAl9CiAJaWYgKHQtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewotICAgICAgICAgICAgICAgIGlmICgoNSA9PSB0LT5waW5uYWNsZV9pZCkgfHwgKDYgPT0gdC0+cGlubmFjbGVfaWQpKSB7CisJCWlmICgoNSA9PSB0LT5waW5uYWNsZV9pZCkgfHwgKDYgPT0gdC0+cGlubmFjbGVfaWQpKSB7CiAJCQliQ2Fycmllck1vZGUgPSBjSW50ZXJjYXJyaWVyOwogCQl9IGVsc2UgewogCQkJYkNhcnJpZXJNb2RlID0gY1FTUzsKLSAgICAgICAgICAgICAgICB9CisJCX0KIAl9CiAKIAlpZiAoYkNhcnJpZXJNb2RlICE9IFVOU0VUKSB7CkBAIC01MDUsMjYgKzUxMywyNiBAQAogCQljYXNlICdCJzoKIAkJY2FzZSAnZyc6CiAJCWNhc2UgJ0cnOgotCQkJZHByaW50ayhQUkVGSVggImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1CR1xuIik7CisJCQl0ZGE5ODg3X2RiZygiaW5zbW9kIGZpeHVwOiBQQUwgPT4gUEFMLUJHXG4iKTsKIAkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKIAkJCWJyZWFrOwogCQljYXNlICdpJzoKIAkJY2FzZSAnSSc6Ci0JCQlkcHJpbnRrKFBSRUZJWCAiaW5zbW9kIGZpeHVwOiBQQUwgPT4gUEFMLUlcbiIpOworCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1JXG4iKTsKIAkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9JOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2QnOgogCQljYXNlICdEJzoKIAkJY2FzZSAnayc6CiAJCWNhc2UgJ0snOgotCQkJZHByaW50ayhQUkVGSVggImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1ES1xuIik7CisJCQl0ZGE5ODg3X2RiZygiaW5zbW9kIGZpeHVwOiBQQUwgPT4gUEFMLURLXG4iKTsKIAkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9ESzsKIAkJCWJyZWFrOwogCQljYXNlICctJzoKIAkJCS8qIGRlZmF1bHQgcGFyYW1ldGVyLCBkbyBub3RoaW5nICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhQUkVGSVggInBhbD0gYXJndW1lbnQgbm90IHJlY29nbmlzZWRcbiIpOworCQkJdGRhOTg4N19pbmZvKCJwYWw9IGFyZ3VtZW50IG5vdCByZWNvZ25pc2VkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNTM0LDE5ICs1NDIsMTkgQEAKIAkJY2FzZSAnRCc6CiAJCWNhc2UgJ2snOgogCQljYXNlICdLJzoKLQkJCWRwcmludGsoUFJFRklYICJpbnNtb2QgZml4dXA6IFNFQ0FNID0+IFNFQ0FNLURLXG4iKTsKKwkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFNFQ0FNID0+IFNFQ0FNLURLXG4iKTsKIAkJCXQtPnN0ZCA9IFY0TDJfU1REX1NFQ0FNX0RLOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQljYXNlICdMJzoKLQkJCWRwcmludGsoUFJFRklYICJpbnNtb2QgZml4dXA6IFNFQ0FNID0+IFNFQ0FNLUxcbiIpOworCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogU0VDQU0gPT4gU0VDQU0tTFxuIik7CiAJCQl0LT5zdGQgPSBWNEwyX1NURF9TRUNBTV9MOwogCQkJYnJlYWs7CiAJCWNhc2UgJy0nOgogCQkJLyogZGVmYXVsdCBwYXJhbWV0ZXIsIGRvIG5vdGhpbmcgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKFBSRUZJWCAic2VjYW09IGFyZ3VtZW50IG5vdCByZWNvZ25pc2VkXG4iKTsKKwkJCXRkYTk4ODdfaW5mbygic2VjYW09IGFyZ3VtZW50IG5vdCByZWNvZ25pc2VkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNTU5LDQxICs1NjcsNDAgQEAKIAlpbnQgcmM7CiAKIAltZW1zZXQoYnVmLDAsc2l6ZW9mKGJ1ZikpOwotICAgICAgICBpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3JlY3YoJnQtPmNsaWVudCxidWYsMSkpKQotICAgICAgICAgICAgICAgIHByaW50ayhQUkVGSVggImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIscmMpOwotCWR1bXBfcmVhZF9tZXNzYWdlKGJ1Zik7CisJaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9yZWN2KCZ0LT5jbGllbnQsYnVmLDEpKSkKKwkJdGRhOTg4N19pbmZvKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLHJjKTsKKwlkdW1wX3JlYWRfbWVzc2FnZSh0LCBidWYpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRkYTk4ODdfY29uZmlndXJlKHN0cnVjdCB0ZGE5ODg3ICp0KQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCWludCByYzsKIAotCW1lbXNldChidWYsMCxzaXplb2YoYnVmKSk7Ci0JdGRhOTg4N19zZXRfdHZub3JtKHQsYnVmKTsKKwltZW1zZXQodC0+ZGF0YSwwLHNpemVvZih0LT5kYXRhKSk7CisJdGRhOTg4N19zZXRfdHZub3JtKHQsdC0+ZGF0YSk7CiAKLQlidWZbMV0gfD0gY091dHB1dFBvcnQxSW5hY3RpdmU7Ci0JYnVmWzFdIHw9IGNPdXRwdXRQb3J0MkluYWN0aXZlOworCXQtPmRhdGFbMV0gfD0gY091dHB1dFBvcnQxSW5hY3RpdmU7CisJdC0+ZGF0YVsxXSB8PSBjT3V0cHV0UG9ydDJJbmFjdGl2ZTsKIAogCWlmIChVTlNFVCAhPSB0LT5waW5uYWNsZV9pZCkgewotCQl0ZGE5ODg3X3NldF9waW5uYWNsZSh0LGJ1Zik7CisJCXRkYTk4ODdfc2V0X3Bpbm5hY2xlKHQsdC0+ZGF0YSk7CiAJfQotCXRkYTk4ODdfc2V0X2NvbmZpZyh0LGJ1Zik7Ci0JdGRhOTg4N19zZXRfaW5zbW9kKHQsYnVmKTsKKwl0ZGE5ODg3X3NldF9jb25maWcodCx0LT5kYXRhKTsKKwl0ZGE5ODg3X3NldF9pbnNtb2QodCx0LT5kYXRhKTsKIAogCWlmICh0LT5tb2RlID09IFRfU1RBTkRCWSkgewotCQlidWZbMV0gfD0gY0ZvcmNlZE11dGVBdWRpb09OOworCQl0LT5kYXRhWzFdIHw9IGNGb3JjZWRNdXRlQXVkaW9PTjsKIAl9CiAKIAotCWRwcmludGsoUFJFRklYICJ3cml0aW5nOiBiPTB4JTAyeCBjPTB4JTAyeCBlPTB4JTAyeFxuIiwKLQkJYnVmWzFdLGJ1ZlsyXSxidWZbM10pOworCXRkYTk4ODdfZGJnKCJ3cml0aW5nOiBiPTB4JTAyeCBjPTB4JTAyeCBlPTB4JTAyeFxuIiwKKwkJdC0+ZGF0YVsxXSx0LT5kYXRhWzJdLHQtPmRhdGFbM10pOwogCWlmIChkZWJ1ZyA+IDEpCi0JCWR1bXBfd3JpdGVfbWVzc2FnZShidWYpOworCQlkdW1wX3dyaXRlX21lc3NhZ2UodCwgdC0+ZGF0YSk7CiAKLSAgICAgICAgaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKCZ0LT5jbGllbnQsYnVmLDQpKSkKLSAgICAgICAgICAgICAgICBwcmludGsoUFJFRklYICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKKwlpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoJnQtPmNsaWVudCx0LT5kYXRhLDQpKSkKKwkJdGRhOTg4N19pbmZvKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKIAogCWlmIChkZWJ1ZyA+IDIpIHsKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7CkBAIC02MDgsMTMgKzYxNSwxMSBAQAogewogCXN0cnVjdCB0ZGE5ODg3ICp0OwogCi0gICAgICAgIGNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKLSAgICAgICAgY2xpZW50X3RlbXBsYXRlLmFkZHIgICAgPSBhZGRyOworCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKKwljbGllbnRfdGVtcGxhdGUuYWRkciAgICA9IGFkZHI7CiAKLSAgICAgICAgcHJpbnRrKFBSRUZJWCAiY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOwotCi0gICAgICAgIGlmIChOVUxMID09ICh0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJaWYgKE5VTEwgPT0gKHQgPSBrbWFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KHQsMCxzaXplb2YoKnQpKTsKIAogCXQtPmNsaWVudCAgICAgID0gY2xpZW50X3RlbXBsYXRlOwpAQCAtNjIyLDYgKzYyNyw4IEBACiAJdC0+cGlubmFjbGVfaWQgPSBVTlNFVDsKIAl0LT5yYWRpb19tb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAorCXRkYTk4ODdfaW5mbygiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkcjw8MSwgYWRhcC0+bmFtZSk7CisKIAlpMmNfc2V0X2NsaWVudGRhdGEoJnQtPmNsaWVudCwgdCk7CiAJaTJjX2F0dGFjaF9jbGllbnQoJnQtPmNsaWVudCk7CiAKQEAgLTY1NSwxOCArNjYyLDE4IEBACiB9CiAKICNkZWZpbmUgU1dJVENIX1Y0TDIJaWYgKCF0LT51c2luZ192NGwyICYmIGRlYnVnKSBcCi0JCSAgICAgICAgICBwcmludGsoUFJFRklYICJzd2l0Y2hpbmcgdG8gdjRsMlxuIik7IFwKLQkgICAgICAgICAgICAgICAgICB0LT51c2luZ192NGwyID0gMTsKKwkJCSAgdGRhOTg4N19pbmZvKCJzd2l0Y2hpbmcgdG8gdjRsMlxuIik7IFwKKwkJCSAgdC0+dXNpbmdfdjRsMiA9IDE7CiAjZGVmaW5lIENIRUNLX1Y0TDIJaWYgKHQtPnVzaW5nX3Y0bDIpIHsgaWYgKGRlYnVnKSBcCi0JCQkgIHByaW50ayhQUkVGSVggImlnbm9yZSB2NGwxIGNhbGxcbiIpOyBcCi0JCSAgICAgICAgICByZXR1cm4gMDsgfQorCQkJICB0ZGE5ODg3X2luZm8oImlnbm9yZSB2NGwxIGNhbGxcbiIpOyBcCisJCQkgIHJldHVybiAwOyB9CiAKIHN0YXRpYyBpbnQKIHRkYTk4ODdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHRkYTk4ODcgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotICAgICAgICBzd2l0Y2ggKGNtZCkgeworCXN3aXRjaCAoY21kKSB7CiAKIAkvKiAtLS0gY29uZmlndXJhdGlvbiAtLS0gKi8KIAljYXNlIEFVRENfU0VUX1JBRElPOgpAQCAtNzc3LDYgKzc4NCwxMSBAQAogCQl9CiAJCWJyZWFrOwogCX0KKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCXsKKwkJdGRhOTg4N19pbmZvKCJEYXRhIGJ5dGVzOiBiPSUwMnggYz0lMDJ4IGU9JTAyeFxuIiwgdC0+ZGF0YVsxXSwgdC0+ZGF0YVsyXSwgdC0+ZGF0YVszXSk7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQkvKiBub3RoaW5nICovCiAJCWJyZWFrOwpAQCAtNzg2LDcgKzc5OCwxMCBAQAogCiBzdGF0aWMgaW50IHRkYTk4ODdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JZHByaW50aygidGRhOTg4Nzogc3VzcGVuZFxuIik7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKKwlzdHJ1Y3QgdGRhOTg4NyAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKworCXRkYTk4ODdfZGJnKCJzdXNwZW5kXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzk1LDcgKzgxMCw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKIAlzdHJ1Y3QgdGRhOTg4NyAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAotCWRwcmludGsoInRkYTk4ODc6IHJlc3VtZVxuIik7CisJdGRhOTg4N19kYmcoInJlc3VtZVxuIik7CiAJdGRhOTg4N19jb25maWd1cmUodCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTU3NjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCmluZGV4IDM4YmY1MDkuLmE5Mzc1ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCkBAIC0xMTcsMTAgKzExNywxMCBAQAogI2RlZmluZSBURUE1NzY3X1JFU0VSVkVEX01BU0sJMHhmZgogCiBlbnVtIHRlYTU3NjdfeHRhbF9mcmVxIHsKLSAgICAgICAgVEVBNTc2N19MT1dfTE9fMzI3NjggICAgPSAwLAotICAgICAgICBURUE1NzY3X0hJR0hfTE9fMzI3NjggICA9IDEsCi0gICAgICAgIFRFQTU3NjdfTE9XX0xPXzEzTUh6ICAgID0gMiwKLSAgICAgICAgVEVBNTc2N19ISUdIX0xPXzEzTUh6ICAgPSAzLAorCVRFQTU3NjdfTE9XX0xPXzMyNzY4ICAgID0gMCwKKwlURUE1NzY3X0hJR0hfTE9fMzI3NjggICA9IDEsCisJVEVBNTc2N19MT1dfTE9fMTNNSHogICAgPSAyLAorCVRFQTU3NjdfSElHSF9MT18xM01IeiAgID0gMywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCBhZDg1YmVmLi43M2M0MDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtMjgsNyArMjgsNyBAQAogCiAvKiBzdGFuZGFyZCBpMmMgaW5zbW9kIG9wdGlvbnMgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JMHg0YiwJCQkvKiB0ZGE4MjkwICovCisJMHg0MiwgMHg0MywgMHg0YSwgMHg0YiwJCQkvKiB0ZGE4MjkwICovCiAJMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKIAkweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAogCUkyQ19DTElFTlRfRU5ECkBAIC0xODksNiArMTg5LDEzIEBACiAJCWkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDQpOwogCQlkZWZhdWx0X3R1bmVyX2luaXQoYyk7CiAJCWJyZWFrOworCWNhc2UgVFVORVJfUEhJTElQU19URDEzMTY6CisJCWJ1ZmZlclswXSA9IDB4MGI7CisJCWJ1ZmZlclsxXSA9IDB4ZGM7CisJCWJ1ZmZlclsyXSA9IDB4ODY7CisJCWJ1ZmZlclszXSA9IDB4YTQ7CisJCWkyY19tYXN0ZXJfc2VuZChjLGJ1ZmZlciw0KTsKKwkJZGVmYXVsdF90dW5lcl9pbml0KGMpOwogCWRlZmF1bHQ6CiAJCWRlZmF1bHRfdHVuZXJfaW5pdChjKTsKIAkJYnJlYWs7CkBAIC0yMTUsOSArMjIyLDkgQEAKIHsKIAlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAKLQlpZiAoKHR1bl9zZXR1cC0+YWRkciA9PSBBRERSX1VOU0VUICYmCisJaWYgKCB0LT50eXBlID09IFVOU0VUICYmICgodHVuX3NldHVwLT5hZGRyID09IEFERFJfVU5TRVQgJiYKIAkJKHQtPm1vZGVfbWFzayAmIHR1bl9zZXR1cC0+bW9kZV9tYXNrKSkgfHwKLQkJdHVuX3NldHVwLT5hZGRyID09IGMtPmFkZHIpIHsKKwkJdHVuX3NldHVwLT5hZGRyID09IGMtPmFkZHIpKSB7CiAJCQlzZXRfdHlwZShjLCB0dW5fc2V0dXAtPnR5cGUsIHR1bl9zZXR1cC0+bW9kZV9tYXNrKTsKIAl9CiB9CkBAIC0zNDEsMjMgKzM0OCwzMyBAQAogCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCXQtPm1vZGVfbWFzayA9IFRfVU5JTklUSUFMSVpFRDsKIAotCi0JdHVuZXJfaW5mbygiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkciA8PCAxLCBhZGFwLT5uYW1lKTsKLQogCWlmIChzaG93X2kyYykgewogCQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxNl07CiAJCWludCBpLHJjOwogCiAJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKIAkJcmMgPSBpMmNfbWFzdGVyX3JlY3YoJnQtPmkyYywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0JCXByaW50aygidHVuZXItJTA0eCBJMkMgUkVDViA9ICIsYWRkcik7CisJCXR1bmVyX2luZm8oIkkyQyBSRUNWID0gIik7CiAJCWZvciAoaT0wO2k8cmM7aSsrKQogCQkJcHJpbnRrKCIlMDJ4ICIsYnVmZmVyW2ldKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAkvKiBURUE1NzY3IGF1dG9kZXRlY3Rpb24gY29kZSAtIG9ubHkgZm9yIGFkZHIgPSAweGMwICovCiAJaWYgKCFub19hdXRvZGV0ZWN0KSB7Ci0JCWlmIChhZGRyID09IDB4NjApIHsKKwkJc3dpdGNoIChhZGRyKSB7CisJCWNhc2UgMHg0MjoKKwkJY2FzZSAweDQzOgorCQljYXNlIDB4NGE6CisJCWNhc2UgMHg0YjoKKwkJCS8qIElmIGNoaXAgaXMgbm90IHRkYTgyOTAsIGRvbid0IHJlZ2lzdGVyLgorCQkJICAgc2luY2UgaXQgY2FuIGJlIHRkYTk4ODcqLworCQkJaWYgKHRkYTgyOTBfcHJvYmUoJnQtPmkyYykgIT0gMCkgeworCQkJCXR1bmVyX2RiZygiY2hpcCBhdCBhZGRyICV4IGlzIG5vdCBhIHRkYTgyOTBcbiIsIGFkZHIpOworCQkJCWtmcmVlKHQpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMHg2MDoKIAkJCWlmICh0ZWE1NzY3X2F1dG9kZXRlY3Rpb24oJnQtPmkyYykgIT0gRUlOVkFMKSB7CiAJCQkJdC0+dHlwZSA9IFRVTkVSX1RFQTU3Njc7CiAJCQkJdC0+bW9kZV9tYXNrID0gVF9SQURJTzsKQEAgLTM2NSwxMCArMzgyLDkgQEAKIAkJCQl0LT5mcmVxID0gODcuNSAqIDE2OyAvKiBTZXRzIGZyZXEgdG8gRk0gcmFuZ2UgKi8KIAkJCQlkZWZhdWx0X21vZGVfbWFzayAmPSB+VF9SQURJTzsKIAotCQkJCWkyY19hdHRhY2hfY2xpZW50ICgmdC0+aTJjKTsKLQkJCQlzZXRfdHlwZSgmdC0+aTJjLHQtPnR5cGUsIHQtPm1vZGVfbWFzayk7Ci0JCQkJcmV0dXJuIDA7CisJCQkJZ290byByZWdpc3Rlcl9jbGllbnQ7CiAJCQl9CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMzgxLDYgKzM5Nyw4IEBACiAJfQogCiAJLyogU2hvdWxkIGJlIGp1c3QgYmVmb3JlIHJldHVybiAqLworcmVnaXN0ZXJfY2xpZW50OgorCXR1bmVyX2luZm8oImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHIgPDwgMSwgYWRhcC0+bmFtZSk7CiAJaTJjX2F0dGFjaF9jbGllbnQgKCZ0LT5pMmMpOwogCXNldF90eXBlICgmdC0+aTJjLHQtPnR5cGUsIHQtPm1vZGVfbWFzayk7CiAJcmV0dXJuIDA7CkBAIC00MjUsMjMgKzQ0MywyMyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzZXRfbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdHVuZXIgKnQsIGludCBtb2RlLCBjaGFyICpjbWQpCiB7Ci0gCWlmIChtb2RlID09IHQtPm1vZGUpCi0gCQlyZXR1cm4gMDsKKwlpZiAobW9kZSA9PSB0LT5tb2RlKQorCQlyZXR1cm4gMDsKIAotIAl0LT5tb2RlID0gbW9kZTsKKwl0LT5tb2RlID0gbW9kZTsKIAotIAlpZiAoY2hlY2tfbW9kZSh0LCBjbWQpID09IEVJTlZBTCkgewotIAkJdC0+bW9kZSA9IFRfU1RBTkRCWTsKLSAJCWlmICh0LT5zdGFuZGJ5KQotIAkJCXQtPnN0YW5kYnkgKGNsaWVudCk7Ci0gCQlyZXR1cm4gRUlOVkFMOwotICAJfQotICAJcmV0dXJuIDA7CisJaWYgKGNoZWNrX21vZGUodCwgY21kKSA9PSBFSU5WQUwpIHsKKwkJdC0+bW9kZSA9IFRfU1RBTkRCWTsKKwkJaWYgKHQtPnN0YW5kYnkpCisJCQl0LT5zdGFuZGJ5IChjbGllbnQpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKIH0KIAogI2RlZmluZSBzd2l0Y2hfdjRsMigpCWlmICghdC0+dXNpbmdfdjRsMikgXAotCQkgICAgICAgICAgICB0dW5lcl9kYmcoInN3aXRjaGluZyB0byB2NGwyXG4iKTsgXAotCSAgICAgICAgICAgICAgICB0LT51c2luZ192NGwyID0gMTsKKwkJCSAgICB0dW5lcl9kYmcoInN3aXRjaGluZyB0byB2NGwyXG4iKTsgXAorCQkJdC0+dXNpbmdfdjRsMiA9IDE7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Y0bDIoc3RydWN0IHR1bmVyICp0KQogewpAQCAtNDc5LDggKzQ5Nyw2IEBACiAJCQlicmVhazsKIAkJfQogCWNhc2UgQVVEQ19DT05GSUdfUElOTkFDTEU6Ci0JCWlmIChjaGVja19tb2RlKHQsICJBVURDX0NPTkZJR19QSU5OQUNMRSIpID09IEVJTlZBTCkKLQkJCXJldHVybiAwOwogCQlzd2l0Y2ggKCppYXJnKSB7CiAJCWNhc2UgMjoKIAkJCXR1bmVyX2RiZygicGlubmFjbGUgcGFsXG4iKTsKQEAgLTYxNiw3ICs2MzIsNyBAQAogCQkJc3dpdGNoX3Y0bDIoKTsKIAkJCWlmIChWNEwyX1RVTkVSX1JBRElPID09IGYtPnR5cGUgJiYKIAkJCSAgICBWNEwyX1RVTkVSX1JBRElPICE9IHQtPm1vZGUpIHsKLQkJCSAgICAgICAgaWYgKHNldF9tb2RlIChjbGllbnQsIHQsIGYtPnR5cGUsICJWSURJT0NfU19GUkVRVUVOQ1kiKQorCQkJCWlmIChzZXRfbW9kZSAoY2xpZW50LCB0LCBmLT50eXBlLCAiVklESU9DX1NfRlJFUVVFTkNZIikKIAkJCQkJICAgID09IEVJTlZBTCkKIAkJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC02ODgsNyArNzA0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJZGVmYXVsdDoKLQkJdHVuZXJfZGJnKCJVbmltcGxlbWVudGVkIElPQ1RMIDB4JTA4eChkaXI9JWQsdHA9MHglMDJ4LG5yPSVkLHN6PSVkKVxuIiwKKwkJdHVuZXJfZGJnKCJVbmltcGxlbWVudGVkIElPQ1RMIDB4JTA4eChkaXI9JWQsdHA9JyVjJyxucj0lZCxzej0lZClcbiIsCiAJCQkJCSBjbWQsIF9JT0NfRElSKGNtZCksIF9JT0NfVFlQRShjbWQpLAogCQkJCQlfSU9DX05SKGNtZCksIF9JT0NfU0laRShjbWQpKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwppbmRleCA4ZWRkNzNhYmUuLmQ4MzIyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdHVuZXJ0eXBlIHR1bmVyc1tdID0gewogCS8qIDAtOSAqLwotICAgICAgICB7ICJUZW1pYyBQQUwgKDQwMDIgRkg1KSIsIFRFTUlDLCBQQUwsCisJeyAiVGVtaWMgUEFMICg0MDAyIEZINSkiLCBURU1JQywgUEFMLAogCSAgMTYqMTQwLjI1LDE2KjQ2My4yNSwweDAyLDB4MDQsMHgwMSwweDhlLDYyM30sCiAJeyAiUGhpbGlwcyBQQUxfSSAoRkkxMjQ2IGFuZCBjb21wYXRpYmxlcykiLCBQaGlsaXBzLCBQQUxfSSwKIAkgIDE2KjE0MC4yNSwxNio0NjMuMjUsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LApAQCAtMTE4LDQxICsxMTgsNDEgQEAKIAkgIDE2KjE1Ny4yNSwxNio0NjMuMjUsMHgwMiwweDA0LDB4MDEsMHg4ZSw3MzJ9LAogCXsgIlRlbWljIFBBTF9JICg0MDYyIEZZNSkiLCBURU1JQywgUEFMX0ksCiAJICAxNioxNzAuMDAsMTYqNDUwLjAwLDB4MDIsMHgwNCwweDAxLDB4OGUsNjIzfSwKLSAJeyAiVGVtaWMgTlRTQyAoNDAzNiBGWTUpIiwgVEVNSUMsIE5UU0MsCisJeyAiVGVtaWMgTlRTQyAoNDAzNiBGWTUpIiwgVEVNSUMsIE5UU0MsCiAJICAxNioxNTcuMjUsMTYqNDYzLjI1LDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLSAgICAgICAgeyAiQWxwcyBIU0JIMSIsIFRFTUlDLCBOVFNDLAorCXsgIkFscHMgSFNCSDEiLCBURU1JQywgTlRTQywKIAkgIDE2KjEzNy4yNSwxNiozODUuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzJ9LAogCiAJLyogMTAtMTkgKi8KLSAgICAgICAgeyAiQWxwcyBUU0JFMSIsIFRFTUlDLCBQQUwsCisJeyAiQWxwcyBUU0JFMSIsIFRFTUlDLCBQQUwsCiAJICAxNioxMzcuMjUsMTYqMzg1LjI1LDB4MDEsMHgwMiwweDA4LDB4OGUsNzMyfSwKLSAgICAgICAgeyAiQWxwcyBUU0JCNSIsIEFscHMsIFBBTF9JLCAvKiB0ZXN0ZWQgKFVLIFVIRikgd2l0aCBNb2R1bGFydGVjaCBNTTIwNSAqLworCXsgIkFscHMgVFNCQjUiLCBBbHBzLCBQQUxfSSwgLyogdGVzdGVkIChVSyBVSEYpIHdpdGggTW9kdWxhcnRlY2ggTU0yMDUgKi8KIAkgIDE2KjEzMy4yNSwxNiozNTEuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MzJ9LAotICAgICAgICB7ICJBbHBzIFRTQkU1IiwgQWxwcywgUEFMLCAvKiB1bnRlc3RlZCAtIGRhdGEgc2hlZXQgZ3Vlc3MuIE9ubHkgSUYgZGlmZmVycy4gKi8KKwl7ICJBbHBzIFRTQkU1IiwgQWxwcywgUEFMLCAvKiB1bnRlc3RlZCAtIGRhdGEgc2hlZXQgZ3Vlc3MuIE9ubHkgSUYgZGlmZmVycy4gKi8KIAkgIDE2KjEzMy4yNSwxNiozNTEuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MjJ9LAotICAgICAgICB7ICJBbHBzIFRTQkM1IiwgQWxwcywgUEFMLCAvKiB1bnRlc3RlZCAtIGRhdGEgc2hlZXQgZ3Vlc3MuIE9ubHkgSUYgZGlmZmVycy4gKi8KKwl7ICJBbHBzIFRTQkM1IiwgQWxwcywgUEFMLCAvKiB1bnRlc3RlZCAtIGRhdGEgc2hlZXQgZ3Vlc3MuIE9ubHkgSUYgZGlmZmVycy4gKi8KIAkgIDE2KjEzMy4yNSwxNiozNTEuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MDh9LAogCXsgIlRlbWljIFBBTF9CRyAoNDAwNkZINSkiLCBURU1JQywgUEFMLAogCSAgMTYqMTcwLjAwLDE2KjQ1MC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0gIAl7ICJBbHBzIFRTQ0g2IiwgQWxwcywgTlRTQywKLSAgCSAgMTYqMTM3LjI1LDE2KjM4NS4yNSwweDE0LDB4MTIsMHgxMSwweDhlLDczMn0sCi0gIAl7ICJUZW1pYyBQQUxfREsgKDQwMTYgRlk1KSIsIFRFTUlDLCBQQUwsCi0gIAkgIDE2KjE2OC4yNSwxNio0NTYuMjUsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotICAJeyAiUGhpbGlwcyBOVFNDX00gKE1LMikiLCBQaGlsaXBzLCBOVFNDLAotICAJICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLSAgICAgICAgeyAiVGVtaWMgUEFMX0kgKDQwNjYgRlk1KSIsIFRFTUlDLCBQQUxfSSwKLSAgICAgICAgICAxNioxNjkuMDAsIDE2KjQ1NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotICAgICAgICB7ICJUZW1pYyBQQUwqIGF1dG8gKDQwMDYgRk41KSIsIFRFTUlDLCBQQUwsCi0gICAgICAgICAgMTYqMTY5LjAwLCAxNio0NTQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKKwl7ICJBbHBzIFRTQ0g2IiwgQWxwcywgTlRTQywKKwkgIDE2KjEzNy4yNSwxNiozODUuMjUsMHgxNCwweDEyLDB4MTEsMHg4ZSw3MzJ9LAorCXsgIlRlbWljIFBBTF9ESyAoNDAxNiBGWTUpIiwgVEVNSUMsIFBBTCwKKwkgIDE2KjE2OC4yNSwxNio0NTYuMjUsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCXsgIlBoaWxpcHMgTlRTQ19NIChNSzIpIiwgUGhpbGlwcywgTlRTQywKKwkgIDE2KjE2MC4wMCwxNio0NTQuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAorCXsgIlRlbWljIFBBTF9JICg0MDY2IEZZNSkiLCBURU1JQywgUEFMX0ksCisJICAxNioxNjkuMDAsIDE2KjQ1NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCXsgIlRlbWljIFBBTCogYXV0byAoNDAwNiBGTjUpIiwgVEVNSUMsIFBBTCwKKwkgIDE2KjE2OS4wMCwgMTYqNDU0LjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCiAKIAkvKiAyMC0yOSAqLwotICAgICAgICB7ICJUZW1pYyBQQUxfQkcgKDQwMDkgRlI1KSBvciBQQUxfSSAoNDA2OSBGUjUpIiwgVEVNSUMsIFBBTCwKLSAgICAgICAgICAxNioxNDEuMDAsIDE2KjQ2NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotICAgICAgICB7ICJUZW1pYyBOVFNDICg0MDM5IEZSNSkiLCBURU1JQywgTlRTQywKLSAgICAgICAgICAxNioxNTguMDAsIDE2KjQ1My4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJUZW1pYyBQQUwvU0VDQU0gbXVsdGkgKDQwNDYgRk01KSIsIFRFTUlDLCBQQUwsCi0gICAgICAgICAgMTYqMTY5LjAwLCAxNio0NTQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLSAgICAgICAgeyAiUGhpbGlwcyBQQUxfREsgKEZJMTI1NiBhbmQgY29tcGF0aWJsZXMpIiwgUGhpbGlwcywgUEFMLAorCXsgIlRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkiLCBURU1JQywgUEFMLAorCSAgMTYqMTQxLjAwLCAxNio0NjQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKKwl7ICJUZW1pYyBOVFNDICg0MDM5IEZSNSkiLCBURU1JQywgTlRTQywKKwkgIDE2KjE1OC4wMCwgMTYqNDUzLjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDczMn0sCisJeyAiVGVtaWMgUEFML1NFQ0FNIG11bHRpICg0MDQ2IEZNNSkiLCBURU1JQywgUEFMLAorCSAgMTYqMTY5LjAwLCAxNio0NTQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKKwl7ICJQaGlsaXBzIFBBTF9ESyAoRkkxMjU2IGFuZCBjb21wYXRpYmxlcykiLCBQaGlsaXBzLCBQQUwsCiAJICAxNioxNzAuMDAsMTYqNDUwLjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKIAl7ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2TUUpIiwgUGhpbGlwcywgUEFMLAogCSAgMTYqMTcwLjAwLDE2KjQ1MC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCkBAIC0xNzMsMjEgKzE3MywyMSBAQAogCXsgIlNIQVJQIE5UU0NfSlAgKDJVNUpGNTU0MCkiLCBTSEFSUCwgTlRTQywgLyogOTQwPTE2KjU4Ljc1IE5UU0NASmFwYW4gKi8KIAkgIDE2KjEzNy4yNSwxNiozMTcuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw5NDAgfSwKIAl7ICJTYW1zdW5nIFBBTCBUQ1BNOTA5MVBEMjciLCBTYW1zdW5nLCBQQUwsIC8qIGZyb20gc291cmNlZm9yZ2UgdjN0diAqLwotICAgICAgICAgIDE2KjE2OSwxNio0NjQsMHhBMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCSAgMTYqMTY5LDE2KjQ2NCwweEEwLDB4OTAsMHgzMCwweDhlLDYyM30sCiAJeyAiTVQyMHh4IHVuaXZlcnNhbCIsIE1pY3JvdHVuZSwgUEFMfE5UU0MsCiAJICAvKiBzZWUgbXQyMHh4LmMgZm9yIGRldGFpbHMgKi8gfSwKIAl7ICJUZW1pYyBQQUxfQkcgKDQxMDYgRkg1KSIsIFRFTUlDLCBQQUwsCi0gICAgICAgICAgMTYqMTQxLjAwLCAxNio0NjQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKKwkgIDE2KjE0MS4wMCwgMTYqNDY0LjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCiAJeyAiVGVtaWMgUEFMX0RLL1NFQ0FNX0wgKDQwMTIgRlk1KSIsIFRFTUlDLCBQQUwsCi0gICAgICAgICAgMTYqMTQwLjI1LCAxNio0NjMuMjUsIDB4MDIsMHgwNCwweDAxLDB4OGUsNjIzfSwKKwkgIDE2KjE0MC4yNSwgMTYqNDYzLjI1LCAweDAyLDB4MDQsMHgwMSwweDhlLDYyM30sCiAJeyAiVGVtaWMgTlRTQyAoNDEzNiBGWTUpIiwgVEVNSUMsIE5UU0MsCi0gICAgICAgICAgMTYqMTU4LjAwLCAxNio0NTMuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKLSAgICAgICAgeyAiTEcgUEFMIChuZXdlciBUQVBDIHNlcmllcykiLCBMR0lOTk9URUssIFBBTCwKLSAgICAgICAgICAxNioxNzAuMDAsIDE2KjQ1MC4wMCwgMHgwMSwweDAyLDB4MDgsMHg4ZSw2MjN9LAorCSAgMTYqMTU4LjAwLCAxNio0NTMuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKKwl7ICJMRyBQQUwgKG5ld2VyIFRBUEMgc2VyaWVzKSIsIExHSU5OT1RFSywgUEFMLAorCSAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4OGUsNjIzfSwKIAl7ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKSIsIFBoaWxpcHMsIFBBTCwKLQkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw2MjMgfSwKKwkgIDE2KjE1OC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw2MjMgfSwKIAl7ICJMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykiLCBMR0lOTk9URUssIE5UU0MsCi0gICAgICAgICAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4OGUsNzMyfSwKKwkgIDE2KjE3MC4wMCwgMTYqNDUwLjAwLCAweDAxLDB4MDIsMHgwOCwweDhlLDczMn0sCiAKIAkvKiA0MC00OSAqLwogCXsgIkhJVEFDSEkgVjctSjE4MEFUIiwgSElUQUNISSwgTlRTQywKQEAgLTE5NiwyNCArMTk2LDI0IEBACiAJICAxNioxNDAuMjUsMTYqNDYzLjI1LDB4MDEsMHhjMiwweGNmLDB4OGUsNjIzfSwKIAl7ICJQaGlsaXBzIDEyMzZEIEFUU0MvTlRTQyBkYXVsIGluIiwgUGhpbGlwcywgQVRTQywKIAkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJQaGlsaXBzIE5UU0MgTUszIChGTTEyMzZNSzMgb3IgRk0xMjM2L0YpIiwgUGhpbGlwcywgTlRTQywKLSAgICAgICAgICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyfSwKLSAgICAgICAgeyAiUGhpbGlwcyA0IGluIDEgKEFUSSBUViBXb25kZXIgUHJvL0NvbmV4YW50KSIsIFBoaWxpcHMsIE5UU0MsCi0gICAgICAgICAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDczMn0sCisJeyAiUGhpbGlwcyBOVFNDIE1LMyAoRk0xMjM2TUszIG9yIEZNMTIzNi9GKSIsIFBoaWxpcHMsIE5UU0MsCisJICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyfSwKKwl7ICJQaGlsaXBzIDQgaW4gMSAoQVRJIFRWIFdvbmRlciBQcm8vQ29uZXhhbnQpIiwgUGhpbGlwcywgTlRTQywKKwkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzJ9LAogCXsgIk1pY3JvdHVuZSA0MDQ5IEZNNSIsIE1pY3JvdHVuZSwgUEFMLAogCSAgMTYqMTQxLjAwLDE2KjQ2NC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCiAJeyAiUGFuYXNvbmljIFZQMjdzL0VOR0U0MzI0RCIsIFBhbmFzb25pYywgTlRTQywKIAkgIDE2KjE2MC4wMCwxNio0NTQuMDAsMHgwMSwweDAyLDB4MDgsMHhjZSw5NDB9LAotICAgICAgICB7ICJMRyBOVFNDIChUQVBFIHNlcmllcykiLCBMR0lOTk9URUssIE5UU0MsCi0gICAgICAgICAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDczMiB9LAotICAgICAgICB7ICJUZW5uYSBUTkYgODgzMSBCR0ZGKSIsIFBoaWxpcHMsIFBBTCwKLSAgICAgICAgICAxNioxNjEuMjUsMTYqNDYzLjI1LDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKKwl7ICJMRyBOVFNDIChUQVBFIHNlcmllcykiLCBMR0lOTk9URUssIE5UU0MsCisJICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyIH0sCisJeyAiVGVubmEgVE5GIDg4MzEgQkdGRikiLCBQaGlsaXBzLCBQQUwsCisJICAxNioxNjEuMjUsMTYqNDYzLjI1LDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKIAl7ICJNaWNyb3R1bmUgNDA0MiBGSTUgQVRTQy9OVFNDIGR1YWwgaW4iLCBNaWNyb3R1bmUsIE5UU0MsCiAJICAxNioxNjIuMDAsMTYqNDU3LjAwLDB4YTIsMHg5NCwweDMxLDB4OGUsNzMyfSwKIAogCS8qIDUwLTU5ICovCi0gICAgICAgIHsgIlRDTCAyMDAyTiIsIFRDTCwgTlRTQywKLSAgICAgICAgICAxNioxNzIuMDAsMTYqNDQ4LjAwLDB4MDEsMHgwMiwweDA4LDB4OGUsNzMyfSwKKwl7ICJUQ0wgMjAwMk4iLCBUQ0wsIE5UU0MsCisJICAxNioxNzIuMDAsMTYqNDQ4LjAwLDB4MDEsMHgwMiwweDA4LDB4OGUsNzMyfSwKIAl7ICJQaGlsaXBzIFBBTC9TRUNBTV9EIChGTSAxMjU2IEktSDMpIiwgUGhpbGlwcywgUEFMLAogCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDYyMyB9LAogCXsgIlRob21zb24gRERUIDc2MTAgKEFUU0MvTlRTQykiLCBUSE9NU09OLCBBVFNDLApAQCAtMjIyLDggKzIyMiw4IEBACiAJICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4NDEsMHg0MiwweDA0LDB4OGUsOTQwfSwgLyogVUhGIGJhbmQgdW50ZXN0ZWQgKi8KIAl7ICJ0ZGE4MjkwKzc1IiwgUGhpbGlwcywgUEFMfE5UU0MsCiAJICAvKiBzZWUgdGRhODI5MC5jIGZvciBkZXRhaWxzICovIH0sCi0JeyAiTEcgUEFMIChUQVBFIHNlcmllcykiLCBMR0lOTk9URUssIFBBTCwKLSAgICAgICAgICAxNioxNzAuMDAsIDE2KjQ1MC4wMCwgMHgwMSwweDAyLDB4MDgsMHhjZSw2MjN9LAorCXsgIlRDTCAyMDAyTUIiLCBUQ0wsIFBBTCwKKwkgIDE2KjE3MC4wMCwgMTYqNDUwLjAwLCAweDAxLDB4MDIsMHgwOCwweGNlLDYyM30sCiAJeyAiUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZRMTIxNkFNRSBNSzQpIiwgUGhpbGlwcywgUEFMLAogCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweGNlLDYyMyB9LAogCXsgIlBoaWxpcHMgRlExMjM2QSBNSzQiLCBQaGlsaXBzLCBOVFNDLApAQCAtMjMzLDIxICsyMzMsMjUgQEAKIAl7ICJZbWVjIFRWaXNpb24gVFZGLTU1MzNNRiIsIFBoaWxpcHMsIE5UU0MsCiAJICAxNioxNjAuMDAsMTYqNDU0LjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyfSwKIAotCS8qIDYwLTY2ICovCisJLyogNjAtNjggKi8KIAl7ICJUaG9tc29uIEREVCA3NjExIChBVFNDL05UU0MpIiwgVEhPTVNPTiwgQVRTQywKIAkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHgzOSwweDNhLDB4M2MsMHg4ZSw3MzJ9LAogCXsgIlRlbmEgVE5GOTUzMy1EL0lGL1RORjk1MzMtQi9ERiIsIFBoaWxpcHMsIFBBTCwKLSAgICAgICAgICAxNioxNjAuMjUsMTYqNDY0LjI1LDB4MDEsMHgwMiwweDA0LDB4OGUsNjIzfSwKKwkgIDE2KjE2MC4yNSwxNio0NjQuMjUsMHgwMSwweDAyLDB4MDQsMHg4ZSw2MjN9LAogCXsgIlBoaWxpcHMgVEVBNTc2N0hOIEZNIFJhZGlvIiwgUGhpbGlwcywgUkFESU8sCi0gICAgICAgICAgLyogc2VlIHRlYTU3NjcuYyBmb3IgZGV0YWlscyAqL30sCisJICAvKiBzZWUgdGVhNTc2Ny5jIGZvciBkZXRhaWxzICovfSwKIAl7ICJQaGlsaXBzIEZNRDEyMTZNRSBNSzMgSHlicmlkIFR1bmVyIiwgUGhpbGlwcywgUEFMLAogCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDUxLDB4NTIsMHg1NCwweDg2LDYyMyB9LAogCXsgIkxHIFREVlMtSDA2MkYvVFVBNjAzNCIsIExHSU5OT1RFSywgQVRTQywKIAkgIDE2KjE2MC4wMCwxNio0NTUuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzJ9LAogCXsgIlltZWMgVFZGNjZUNS1CL0RGRiIsIFBoaWxpcHMsIFBBTCwKLSAgICAgICAgICAxNioxNjAuMjUsMTYqNDY0LjI1LDB4MDEsMHgwMiwweDA4LDB4OGUsNjIzfSwKLSAJeyAiTEcgTlRTQyAoVEFMTiBtaW5pIHNlcmllcykiLCBMR0lOTk9URUssIE5UU0MsCisJICAxNioxNjAuMjUsMTYqNDY0LjI1LDB4MDEsMHgwMiwweDA4LDB4OGUsNjIzfSwKKwl7ICJMRyBOVFNDIChUQUxOIG1pbmkgc2VyaWVzKSIsIExHSU5OT1RFSywgTlRTQywKIAkgIDE2KjEzNy4yNSwxNiozNzMuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzIgfSwKKwl7ICJQaGlsaXBzIFREMTMxNiBIeWJyaWQgVHVuZXIiLCBQaGlsaXBzLCBQQUwsCisJICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4YTEsMHhhMiwweGE0LDB4YzgsNjIzIH0sCisJeyAiUGhpbGlwcyBUVVYxMjM2RCBBVFNDL05UU0MgZHVhbCBpbiIsIFBoaWxpcHMsIEFUU0MsCisJICAxNioxNTcuMjUsMTYqNDU0LjAwLDB4MDEsMHgwMiwweDA0LDB4Y2UsNzMyIH0sCiB9OwogCiB1bnNpZ25lZCBjb25zdCBpbnQgdHVuZXJfY291bnQgPSBBUlJBWV9TSVpFKHR1bmVycyk7CkBAIC0yNzcsNyArMjgxLDcgQEAKIAlzdGF0dXMgPSB0dW5lcl9nZXRzdGF0dXMgKGMpOwogCiAJc3dpdGNoICh0LT50eXBlKSB7Ci0gICAgICAgIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOgorCQljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOgogICAgIAkJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzM6CiAJCWNhc2UgVFVORVJfUEhJTElQU19GTTEyNTZfSUgzOgogCQkJc3RlcmVvID0gKChzdGF0dXMgJiBUVU5FUl9TSUdOQUwpID09IFRVTkVSX1NURVJFT19NSzMpOwpAQCAtMjk1LDEwICsyOTksMTAgQEAKIHN0YXRpYyB2b2lkIGRlZmF1bHRfc2V0X3R2X2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKQogewogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl1OCBjb25maWc7CisJdTggY29uZmlnLCB0dW5lcmFkZHI7CiAJdTE2IGRpdjsKIAlzdHJ1Y3QgdHVuZXJ0eXBlICp0dW47Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdOwogCWludCByYzsKIAogCXR1biA9ICZ0dW5lcnNbdC0+dHlwZV07CkBAIC0zNzMsNiArMzc3LDMxIEBACiAJCS8qIFNldCB0aGUgY2hhcmdlIHB1bXAgZm9yIGZhc3QgdHVuaW5nICovCiAJCXR1bi0+Y29uZmlnIHw9IFRVTkVSX0NIQVJHRV9QVU1QOwogCQlicmVhazsKKworCWNhc2UgVFVORVJfUEhJTElQU19UVVYxMjM2RDoKKwkJLyogMHg0MCAtPiBBVFNDIGFudGVubmEgaW5wdXQgMSAqLworCQkvKiAweDQ4IC0+IEFUU0MgYW50ZW5uYSBpbnB1dCAyICovCisJCS8qIDB4MDAgLT4gTlRTQyBhbnRlbm5hIGlucHV0IDEgKi8KKwkJLyogMHgwOCAtPiBOVFNDIGFudGVubmEgaW5wdXQgMiAqLworCQlidWZmZXJbMF0gPSAweDE0OworCQlidWZmZXJbMV0gPSAweDAwOworCQlidWZmZXJbMl0gPSAweDE3OworCQlidWZmZXJbM10gPSAweDAwOworCQljb25maWcgJj0gfjB4NDA7CisJCWlmICh0LT5zdGQgJiBWNEwyX1NURF9BVFNDKSB7CisJCQljb25maWcgfD0gMHg0MDsKKwkJCWJ1ZmZlclsxXSA9IDB4MDQ7CisJCX0KKwkJLyogc2V0IHRvIHRoZSBjb3JyZWN0IG1vZGUgKGFuYWxvZyBvciBkaWdpdGFsKSAqLworCQl0dW5lcmFkZHIgPSBjLT5hZGRyOworCQljLT5hZGRyID0gMHgwYTsKKwkJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsJmJ1ZmZlclswXSwyKSkpCisJCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsJmJ1ZmZlclsyXSwyKSkpCisJCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJYy0+YWRkciA9IHR1bmVyYWRkcjsKKwkJLyogRklYTUU6IGlucHV0ICovCisJCWJyZWFrOwogCX0KIAogCS8qCkBAIC00MDQsNyArNDMzLDcgQEAKIAl0dW5lcl9kYmcoInR2IDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkJICBidWZmZXJbMF0sYnVmZmVyWzFdLGJ1ZmZlclsyXSxidWZmZXJbM10pOwogCi0gICAgICAgIGlmICg0ICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChjLGJ1ZmZlciw0KSkpCisJaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsYnVmZmVyLDQpKSkKIAkJdHVuZXJfd2FybigiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA0KVxuIixyYyk7CiAKIAlpZiAodC0+dHlwZSA9PSBUVU5FUl9NSUNST1RVTkVfNDA0MkZJNSkgewpAQCAtNDQzLDcgKzQ3Miw3IEBACiB7CiAJc3RydWN0IHR1bmVydHlwZSAqdHVuOwogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisJdW5zaWduZWQgY2hhciBidWZmZXJbNF07CiAJdW5zaWduZWQgZGl2OwogCWludCByYzsKIApAQCAtNDc2LDEzICs1MDUsMTMgQEAKIAkJYnVmZmVyWzNdID0gMHhhNDsKIAkJYnJlYWs7CiAJfQotICAgICAgICBidWZmZXJbMF0gPSAoZGl2Pj44KSAmIDB4N2Y7Ci0gICAgICAgIGJ1ZmZlclsxXSA9IGRpdiAgICAgICYgMHhmZjsKKwlidWZmZXJbMF0gPSAoZGl2Pj44KSAmIDB4N2Y7CisJYnVmZmVyWzFdID0gZGl2ICAgICAgJiAweGZmOwogCiAJdHVuZXJfZGJnKCJyYWRpbyAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCiAJICAgICAgIGJ1ZmZlclswXSxidWZmZXJbMV0sYnVmZmVyWzJdLGJ1ZmZlclszXSk7CiAKLSAgICAgICAgaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsYnVmZmVyLDQpKSkKKwlpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCkpKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCAxYzMxZWY1Li5jMzFiZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogCiAjaW5jbHVkZSAidHZhdWRpby5oIgogCkBAIC00NTgsOCArNDU3LDggQEAKICNkZWZpbmUgVERBOTg1NV9MT1VECTE8PDUgLyogTG91ZG5lc3MsIDE9PW9mZiAqLwogI2RlZmluZSBUREE5ODU1X1NVUgkxPDwzIC8qIFN1cnJvdW5kIC8gU3Vid29vZmVyIDE9PS41KEwtUikgMD09LjUoTCtSKSAqLwogCQkJICAgICAvKiBCaXRzIDAgdG8gMyBzZWxlY3QgdmFyaW91cyBjb21iaW5hdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgbGluZSBpbiBhbmQgbGluZSBvdXQsIG9ubHkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGludGVyZXN0aW5nIG9uZXMgYXJlIGRlZmluZWQgKi8KKwkJCSAgICAgICogb2YgbGluZSBpbiBhbmQgbGluZSBvdXQsIG9ubHkgdGhlCisJCQkgICAgICAqIGludGVyZXN0aW5nIG9uZXMgYXJlIGRlZmluZWQgKi8KICNkZWZpbmUgVERBOTg1NV9FWFQJMTw8MiAvKiBTZWxlY3RzIGlucHV0cyBMSVIgYW5kIExJTC4gIFBpbnMgNDEgJiAxMiAqLwogI2RlZmluZSBUREE5ODU1X0lOVAkwICAgIC8qIFNlbGVjdHMgaW5wdXRzIExPUiBhbmQgTE9MLiAgKGludGVybmFsKSAqLwogCkBAIC0xMDI4LDcgKzEwMjcsNyBAQAogI2RlZmluZSBURUE2MzAwX1RSICAgICAgICAgMHgwMyAgLyogdHJlYmxlICovCiAjZGVmaW5lIFRFQTYzMDBfRkEgICAgICAgICAweDA0ICAvKiBmYWRlciBjb250cm9sICovCiAjZGVmaW5lIFRFQTYzMDBfUyAgICAgICAgICAweDA1ICAvKiBzd2l0Y2ggcmVnaXN0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlcyBmb3IgdGhvc2UgcmVnaXN0ZXJzOiAqLworCQkJCSAvKiB2YWx1ZXMgZm9yIHRob3NlIHJlZ2lzdGVyczogKi8KICNkZWZpbmUgVEVBNjMwMF9TX1NBICAgICAgIDB4MDEgIC8qIHN0ZXJlbyBBIGlucHV0ICovCiAjZGVmaW5lIFRFQTYzMDBfU19TQiAgICAgICAweDAyICAvKiBzdGVyZW8gQiAqLwogI2RlZmluZSBURUE2MzAwX1NfU0MgICAgICAgMHgwNCAgLyogc3RlcmVvIEMgKi8KQEAgLTEwNDIsNyArMTA0MSw3IEBACiAjZGVmaW5lIFRFQTYzMjBfQkEgICAgICAgICAweDA1ICAvKiBiYXNzICgwLTQpICovCiAjZGVmaW5lIFRFQTYzMjBfVFIgICAgICAgICAweDA2ICAvKiB0cmVibGUgKDAtNCkgKi8KICNkZWZpbmUgVEVBNjMyMF9TICAgICAgICAgIDB4MDcgIC8qIHN3aXRjaCByZWdpc3RlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWVzIGZvciB0aG9zZSByZWdpc3RlcnM6ICovCisJCQkJIC8qIHZhbHVlcyBmb3IgdGhvc2UgcmVnaXN0ZXJzOiAqLwogI2RlZmluZSBURUE2MzIwX1NfU0EgICAgICAgMHgwNyAgLyogc3RlcmVvIEEgaW5wdXQgKi8KICNkZWZpbmUgVEVBNjMyMF9TX1NCICAgICAgIDB4MDYgIC8qIHN0ZXJlbyBCICovCiAjZGVmaW5lIFRFQTYzMjBfU19TQyAgICAgICAweDA1ICAvKiBzdGVyZW8gQyAqLwpAQCAtMTA4Miw3ICsxMDgxLDcgQEAKICNkZWZpbmUgVERBODQyNV9CQSAgICAgICAgIDB4MDIgIC8qIGJhc3MgKi8KICNkZWZpbmUgVERBODQyNV9UUiAgICAgICAgIDB4MDMgIC8qIHRyZWJsZSAqLwogI2RlZmluZSBUREE4NDI1X1MxICAgICAgICAgMHgwOCAgLyogc3dpdGNoIGZ1bmN0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWVzIGZvciB0aG9zZSByZWdpc3RlcnM6ICovCisJCQkJIC8qIHZhbHVlcyBmb3IgdGhvc2UgcmVnaXN0ZXJzOiAqLwogI2RlZmluZSBUREE4NDI1X1MxX09GRiAgICAgMHhFRSAgLyogYXVkaW8gb2ZmIChtdXRlIG9uKSAqLwogI2RlZmluZSBUREE4NDI1X1MxX0NIMSAgICAgMHhDRSAgLyogYXVkaW8gY2hhbm5lbCAxIChtdXRlIG9mZikgLSAibGluZWFyIHN0ZXJlbyIgbW9kZSAqLwogI2RlZmluZSBUREE4NDI1X1MxX0NIMiAgICAgMHhDRiAgLyogYXVkaW8gY2hhbm5lbCAyIChtdXRlIG9mZikgLSAibGluZWFyIHN0ZXJlbyIgbW9kZSAqLwpAQCAtMTE0OCw3ICsxMTQ3LDcgQEAKIAogLyogYml0IGRlZmluaXRpb24gb2YgdGhlIFJFU0VUIHJlZ2lzdGVyLCBJMkMgZGF0YS4gKi8KICNkZWZpbmUgUElDMTZDNTRfTUlTQ19SRVNFVF9SRU1PVEVfQ1RMIDB4MDEgLyogYml0IDAsIFJlc2V0IHRvIHJlY2VpdmUgdGhlIGtleSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgY29kZSBvZiByZW1vdGUgY29udHJvbGxlciAqLworCQkJCQkgICAgLyogICAgICAgIGNvZGUgb2YgcmVtb3RlIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUElDMTZDNTRfTUlTQ19NVFNfTUFJTiAgICAgICAgIDB4MDIgLyogYml0IDEgKi8KICNkZWZpbmUgUElDMTZDNTRfTUlTQ19NVFNfU0FQICAgICAgICAgIDB4MDQgLyogYml0IDIgKi8KICNkZWZpbmUgUElDMTZDNTRfTUlTQ19NVFNfQk9USCAgICAgICAgIDB4MDggLyogYml0IDMgKi8KQEAgLTEyODEsNyArMTI4MCw3IEBACiAJCS5zZXRtb2RlICAgID0gdGRhOTg0MF9zZXRtb2RlLAogCQkuY2hlY2ttb2RlICA9IGdlbmVyaWNfY2hlY2ttb2RlLAogCi0JICAgICAgICAuaW5pdCAgICAgICA9IHsgMiwgeyBUREE5ODQwX1RFU1QsIFREQTk4NDBfVEVTVF9JTlQxU04KKwkJLmluaXQgICAgICAgPSB7IDIsIHsgVERBOTg0MF9URVNULCBUREE5ODQwX1RFU1RfSU5UMVNOCiAJCQkJLyogLFREQTk4NDBfU1csIFREQTk4NDBfTU9OTyAqL30gfQogCX0sCiAJewpAQCAtMTQzOCw3ICsxNDM3LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgPSAicGljMTZjNTQgKFBWOTUxKSIsCi0JCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOTUxLAorCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9QSUMxNkM1NF9QVjksCiAJCS5pbnNtb2RvcHQgID0gJnBpYzE2YzU0LAogCQkuYWRkcl9sbyAgICA9IEkyQ19QSUMxNkM1NCA+PiAxLAogCQkuYWRkcl9oaSAgICA9IEkyQ19QSUMxNkM1ND4+IDEsCkBAIC0xNDY3LDcgKzE0NjYsNyBAQAogCQkuc2V0bW9kZSAgICA9IHRhODg3NHpfc2V0bW9kZSwKIAkJLmNoZWNrbW9kZSAgPSBnZW5lcmljX2NoZWNrbW9kZSwKIAotCSAgICAgICAgLmluaXQgICAgICAgPSB7MiwgeyBUQTg4NzRaX01PTk9fU0VULCBUQTg4NzRaX1NFUEFSQVRJT05fREVGQVVMVH19LAorCQkuaW5pdCAgICAgICA9IHsyLCB7IFRBODg3NFpfTU9OT19TRVQsIFRBODg3NFpfU0VQQVJBVElPTl9ERUZBVUxUfX0sCiAJfSwKIAl7IC5uYW1lID0gTlVMTCB9IC8qIEVPRiAqLwogfTsKQEAgLTE0ODYsOCArMTQ4NSw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChjaGlwLDAsc2l6ZW9mKCpjaGlwKSk7CiAJbWVtY3B5KCZjaGlwLT5jLCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0gICAgICAgIGNoaXAtPmMuYWRhcHRlciA9IGFkYXA7Ci0gICAgICAgIGNoaXAtPmMuYWRkciA9IGFkZHI7CisJY2hpcC0+Yy5hZGFwdGVyID0gYWRhcDsKKwljaGlwLT5jLmFkZHIgPSBhZGRyOwogCWkyY19zZXRfY2xpZW50ZGF0YSgmY2hpcC0+YywgY2hpcCk7CiAKIAkvKiBmaW5kIGRlc2NyaXB0aW9uIGZvciB0aGUgY2hpcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IDUzNDRkNTUuLjcyZTg3NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTYsMTIgKzYsMTIgQEAKICAqIHdoaWNoIGFyZToKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDEgR2VyZCBLbm9yciA8a3JheGVsQGdvbGRiYWNoLmluLWJlcmxpbi5kZT4KIAogICogQWRqdXN0bWVudHMgdG8gZml0IGEgbW9yZSBnZW5lcmFsIG1vZGVsIGFuZCBhbGwgYnVnczoKIAotIAlDb3B5cmlnaHQgKEMpIDIwMDMgSm9obiBLbGFyIDxsaW5wdnIgYXQgcHJvamVjdHBsYXNtYS5jb20+CisJQ29weXJpZ2h0IChDKSAyMDAzIEpvaG4gS2xhciA8bGlucHZyIGF0IHByb2plY3RwbGFzbWEuY29tPgogCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJpMmMgSGF1cHBhdWdlIGVlcHJvbSBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiSm9obiBLbGFyIik7CkBAIC01MywxNCArNTQsMTQgQEAKIAogI2RlZmluZSB0dmVlcHJvbV9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7XAogCXByaW50ayhLRVJOX0lORk8gInR2ZWVwcm9tICVkLSUwNHg6ICIgZm10LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBjLT5hZGFwdGVyLT5uciwgYy0+YWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwkJCWMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQogI2RlZmluZSB0dmVlcHJvbV93YXJuKGZtdCwgYXJnLi4uKSBkbyB7XAogCXByaW50ayhLRVJOX1dBUk5JTkcgInR2ZWVwcm9tICVkLSUwNHg6ICIgZm10LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBjLT5hZGFwdGVyLT5uciwgYy0+YWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwkJCWMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQogI2RlZmluZSB0dmVlcHJvbV9kYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKGRlYnVnKSBcCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAidHZlZXByb20gJWQtJTA0eDogIiBmbXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCQlwcmludGsoS0VSTl9JTkZPICJ0dmVlcHJvbSAlZC0lMDR4OiAiIGZtdCwgXAorCQkJYy0+YWRhcHRlci0+bnIsIGMtPmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEzNCw4ICsxMzUsOCBAQAogCXsgVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDLCAiVGVtaWMgNDAzOUZSNSIgfSwKIAl7IFRVTkVSX1BISUxJUFNfRlExMjE2TUUsICAgIlBoaWxpcHMgRlExMjE2IE1FIiB9LAogCXsgVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSSwgIlRlbWljIDQwNjZGWTUiIH0sCi0gICAgICAgIHsgVFVORVJfUEhJTElQU19OVFNDLCAgICAgICAgIlBoaWxpcHMgVEQxNTM2IiB9LAotICAgICAgICB7IFRVTkVSX1BISUxJUFNfTlRTQywgICAgICAgICJQaGlsaXBzIFREMTUzNkQiIH0sCisJeyBUVU5FUl9QSElMSVBTX05UU0MsICAgICAgICAiUGhpbGlwcyBURDE1MzYiIH0sCisJeyBUVU5FUl9QSElMSVBTX05UU0MsICAgICAgICAiUGhpbGlwcyBURDE1MzZEIiB9LAogCXsgVFVORVJfUEhJTElQU19OVFNDLCAgIlBoaWxpcHMgRk1SMTIzNiIgfSwgLyogbW9ubyByYWRpbyAqLwogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgRkkxMjU2TVAiIH0sCiAJLyogNDAtNDkgKi8KQEAgLTE4OSw3ICsxOTAsNyBAQAogCXsgVFVORVJfTEdfUEFMX05FV19UQVBDLCAiVENMIDIwMDJNQiAzIn0sCiAJeyBUVU5FUl9MR19QQUxfTkVXX1RBUEMsICJUQ0wgMjAwMk1JIDMifSwKIAl7IFRVTkVSX1RDTF8yMDAyTiwgICAgICJUQ0wgMjAwMk4gNkEifSwKLQl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJQaGlsaXBzIEZRMTIzNiBNSzMifSwKKwl7IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywgIlBoaWxpcHMgRlExMjM2IE1LMyJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlNhbXN1bmcgVENQTiAyMTIxUDMwQSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlNhbXN1bmcgVENQRSA0MTIxUDMwQSJ9LAogCXsgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsICJUQ0wgTUZQRTA1IDIifSwKQEAgLTIwMCw5NSArMjAxLDEzNyBAQAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgRlExMjg2QSBNSzQifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJQaGlsaXBzIEZRMTIxNk1FIE1LNSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgRlExMjM2IE1LNSJ9LAotCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlVuc3BlY2lmaWVkIn0sCi0JeyBUVU5FUl9MR19QQUxfVEFQRSwgICAiTEcgUEFMIChUQVBFIFNlcmllcykifSwKLSAgICAgICAgeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVW5zcGVjaWZpZWQifSwKLSAgICAgICAgeyBUVU5FUl9UQ0xfMjAwMk4sICAgICAiVENMIDIwMDJOIDVIIn0sCi0JLyogMTAwLTEwMyAqLwotCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlVuc3BlY2lmaWVkIn0sCi0gICAgICAgIHsgVFVORVJfVEVBNTc2NywgICAgICAgIlBoaWxpcHMgVEVBNTc2N0hOIEZNIFJhZGlvIn0sCi0gICAgICAgIHsgVFVORVJfQUJTRU5ULCAgICAgICAgIlVuc3BlY2lmaWVkIn0sCi0gICAgICAgIHsgVFVORVJfUEhJTElQU19GTTEyMzZfTUszLCAiVENMIE1GTk0wNSA0In0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiU2Ftc3VuZyBUQ1BHXzYxMjFQMzBBIn0sCisJeyBUVU5FUl9UQ0xfMjAwMk1CLCAgICAiVENMIDIwMDJNQl8zSCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlRDTCAyMDAyTUlfM0gifSwKKwl7IFRVTkVSX1RDTF8yMDAyTiwgICAgICJUQ0wgMjAwMk4gNUgifSwKKwkvKiAxMDAtMTA5ICovCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiUGhpbGlwcyBGTUQxMjE2TUUifSwKKwl7IFRVTkVSX1RFQTU3NjcsICAgICAgICJQaGlsaXBzIFRFQTU3NjhITCBGTSBSYWRpbyJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBhbmFzb25pYyBFTlY1N0gxMkQ1In0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIE1GTk0wNS00In0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIE1OTTA1LTQifSwKKwl7IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAiVENMIE1QRTA1LTIifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgTVFOTTA1LTQifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJMRyBUQVBDLVc3MDFEIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIDk4ODZQLVdNIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIDE2NzZOTS1XTSJ9LAogfTsKIAotLyogVGhpcyBsaXN0IGlzIHN1cHBsaWVkIGJ5IEhhdXBwYXVnZS4gVGhhbmtzISAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGlvSUNbXSA9IHsKLSAgICAgICAgLyogMC00ICovCi0gICAgICAgICJOb25lIiwgIlRFQTYzMDAiLCAiVEVBNjMyMCIsICJUREE5ODUwIiwgIk1TUDM0MDBDIiwKLSAgICAgICAgLyogNS05ICovCi0gICAgICAgICJNU1AzNDEwRCIsICJNU1AzNDE1IiwgIk1TUDM0MzAiLCAiTVNQMzQzOCIsICJDUzUzMzEiLAotICAgICAgICAvKiAxMC0xNCAqLwotICAgICAgICAiTVNQMzQzNSIsICJNU1AzNDQwIiwgIk1TUDM0NDUiLCAiTVNQMzQxMSIsICJNU1AzNDE2IiwKLSAgICAgICAgLyogMTUtMTkgKi8KLSAgICAgICAgIk1TUDM0MjUiLCAiTVNQMzQ1MSIsICJNU1AzNDE4IiwgIlR5cGUgMHgxMiIsICJPS0k3NzE2IiwKLSAgICAgICAgLyogMjAtMjQgKi8KLSAgICAgICAgIk1TUDQ0MTAiLCAiTVNQNDQyMCIsICJNU1A0NDQwIiwgIk1TUDQ0NTAiLCAiTVNQNDQwOCIsCi0gICAgICAgIC8qIDI1LTI5ICovCi0gICAgICAgICJNU1A0NDE4IiwgIk1TUDQ0MjgiLCAiTVNQNDQ0OCIsICJNU1A0NDU4IiwgIlR5cGUgMHgxZCIsCi0gICAgICAgIC8qIDMwLTM0ICovCi0gICAgICAgICJDWDg4MCIsICJDWDg4MSIsICJDWDg4MyIsICJDWDg4MiIsICJDWDI1ODQwIiwKLSAgICAgICAgLyogMzUtMzggKi8KLSAgICAgICAgIkNYMjU4NDEiLCAiQ1gyNTg0MiIsICJDWDI1ODQzIiwgIkNYMjM0MTgiLAorc3RhdGljIHN0cnVjdCBIQVVQUEFVR0VfQVVESU9JQworeworCWVudW0gYXVkaW9jaGlwICBpZDsKKwljaGFyICpuYW1lOworfQorYXVkaW9JQ1tdID0KK3sKKwkvKiAwLTQgKi8KKwl7QVVESU9fQ0hJUF9OT05FLCAgICAgIk5vbmUifSwKKwl7QVVESU9fQ0hJUF9URUE2MzAwLCAgIlRFQTYzMDAifSwKKwl7QVVESU9fQ0hJUF9URUE2MzAwLCAgIlRFQTYzMjAifSwKKwl7QVVESU9fQ0hJUF9UREE5ODVYLCAgIlREQTk4NTAifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0MDBDIn0sCisJLyogNS05ICovCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1AzNDEwRCJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQxNSJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQzMCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQzOCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiQ1M1MzMxIn0sCisJLyogMTAtMTQgKi8KKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0MzUifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0NDAifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0NDUifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDM0MTEifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDM0MTYifSwKKwkvKiAxNS0xOSAqLworCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQyNSJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQ1MSJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQxOCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiVHlwZSAweDEyIn0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJPS0k3NzE2In0sCisJLyogMjAtMjQgKi8KKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0MTAifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0MjAifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0NDAifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0NTAifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0MDgifSwKKwkvKiAyNS0yOSAqLworCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQxOCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQyOCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQ0OCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQ1OCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiVHlwZSAweDFkIn0sCisJLyogMzAtMzQgKi8KKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYODgwIn0sCisJe0FVRElPX0NISVBfSU5URVJOQUwsICJDWDg4MSJ9LAorCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1g4ODMifSwKKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYODgyIn0sCisJe0FVRElPX0NISVBfSU5URVJOQUwsICJDWDI1ODQwIn0sCisJLyogMzUtMzggKi8KKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYMjU4NDEifSwKKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYMjU4NDIifSwKKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYMjU4NDMifSwKKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYMjM0MTgifSwKIH07CiAKIC8qIFRoaXMgbGlzdCBpcyBzdXBwbGllZCBieSBIYXVwcGF1Z2UuIFRoYW5rcyEgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpkZWNvZGVySUNbXSA9IHsKLSAgICAgICAgLyogMC00ICovCi0gICAgICAgICJOb25lIiwgIkJUODE1IiwgIkJUODE3IiwgIkJUODE5IiwgIkJUODE1QSIsCi0gICAgICAgIC8qIDUtOSAqLwotICAgICAgICAiQlQ4MTdBIiwgIkJUODE5QSIsICJCVDgyNyIsICJCVDgyOSIsICJCVDg0OCIsCi0gICAgICAgIC8qIDEwLTE0ICovCi0gICAgICAgICJCVDg0OEEiLCAiQlQ4NDlBIiwgIkJUODI5QSIsICJCVDgyN0EiLCAiQlQ4NzgiLAotICAgICAgICAvKiAxNS0xOSAqLwotICAgICAgICAiQlQ4NzkiLCAiQlQ4ODAiLCAiVlBYMzIyNkUiLCAiU0FBNzExNCIsICJTQUE3MTE1IiwKLSAgICAgICAgLyogMjAtMjQgKi8KLSAgICAgICAgIkNYODgwIiwgIkNYODgxIiwgIkNYODgzIiwgIlNBQTcxMTEiLCAiU0FBNzExMyIsCi0gICAgICAgIC8qIDI1LTI5ICovCi0gICAgICAgICJDWDg4MiIsICJUVlA1MTUwQSIsICJDWDI1ODQwIiwgIkNYMjU4NDEiLCAiQ1gyNTg0MiIsCi0gICAgICAgIC8qIDMwLTMxICovCi0gICAgICAgICJDWDI1ODQzIiwgIkNYMjM0MTgiLAorCS8qIDAtNCAqLworCSJOb25lIiwgIkJUODE1IiwgIkJUODE3IiwgIkJUODE5IiwgIkJUODE1QSIsCisJLyogNS05ICovCisJIkJUODE3QSIsICJCVDgxOUEiLCAiQlQ4MjciLCAiQlQ4MjkiLCAiQlQ4NDgiLAorCS8qIDEwLTE0ICovCisJIkJUODQ4QSIsICJCVDg0OUEiLCAiQlQ4MjlBIiwgIkJUODI3QSIsICJCVDg3OCIsCisJLyogMTUtMTkgKi8KKwkiQlQ4NzkiLCAiQlQ4ODAiLCAiVlBYMzIyNkUiLCAiU0FBNzExNCIsICJTQUE3MTE1IiwKKwkvKiAyMC0yNCAqLworCSJDWDg4MCIsICJDWDg4MSIsICJDWDg4MyIsICJTQUE3MTExIiwgIlNBQTcxMTMiLAorCS8qIDI1LTI5ICovCisJIkNYODgyIiwgIlRWUDUxNTBBIiwgIkNYMjU4NDAiLCAiQ1gyNTg0MSIsICJDWDI1ODQyIiwKKwkvKiAzMC0zMSAqLworCSJDWDI1ODQzIiwgIkNYMjM0MTgiLAogfTsKIAogc3RhdGljIGludCBoYXNSYWRpb1R1bmVyKGludCB0dW5lclR5cGUpCiB7Ci0gICAgICAgIHN3aXRjaCAodHVuZXJUeXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxODogLy9QTlBFbnZfVFVORVJfRlIxMjM2X01LMjoKLSAgICAgICAgICAgICAgICBjYXNlIDIzOiAvL1BOUEVudl9UVU5FUl9GTTEyMzY6Ci0gICAgICAgICAgICAgICAgY2FzZSAzODogLy9QTlBFbnZfVFVORVJfRk1SMTIzNjoKLSAgICAgICAgICAgICAgICBjYXNlIDE2OiAvL1BOUEVudl9UVU5FUl9GUjEyMTZfTUsyOgotICAgICAgICAgICAgICAgIGNhc2UgMTk6IC8vUE5QRW52X1RVTkVSX0ZSMTI0Nl9NSzI6Ci0gICAgICAgICAgICAgICAgY2FzZSAyMTogLy9QTlBFbnZfVFVORVJfRk0xMjE2OgotICAgICAgICAgICAgICAgIGNhc2UgMjQ6IC8vUE5QRW52X1RVTkVSX0ZNMTI0NjoKLSAgICAgICAgICAgICAgICBjYXNlIDE3OiAvL1BOUEVudl9UVU5FUl9GUjEyMTZNRl9NSzI6Ci0gICAgICAgICAgICAgICAgY2FzZSAyMjogLy9QTlBFbnZfVFVORVJfRk0xMjE2TUY6Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDogLy9QTlBFbnZfVFVORVJfRlIxMjU2X01LMjoKLSAgICAgICAgICAgICAgICBjYXNlIDI1OiAvL1BOUEVudl9UVU5FUl9GTTEyNTY6Ci0gICAgICAgICAgICAgICAgY2FzZSAzMzogLy9QTlBFbnZfVFVORVJfNDAzOUZSNToKLSAgICAgICAgICAgICAgICBjYXNlIDQyOiAvL1BOUEVudl9UVU5FUl80MDA5RlI1OgotICAgICAgICAgICAgICAgIGNhc2UgNTI6IC8vUE5QRW52X1RVTkVSXzQwNDlGTTU6Ci0gICAgICAgICAgICAgICAgY2FzZSA1NDogLy9QTlBFbnZfVFVORVJfNDA0OUZNNV9BbHRJMkM6Ci0gICAgICAgICAgICAgICAgY2FzZSA0NDogLy9QTlBFbnZfVFVORVJfNDAwOUZONToKLSAgICAgICAgICAgICAgICBjYXNlIDMxOiAvL1BOUEVudl9UVU5FUl9UQ1BCOTA4NVA6Ci0gICAgICAgICAgICAgICAgY2FzZSAzMDogLy9QTlBFbnZfVFVORVJfVENQTjkwODVEOgotICAgICAgICAgICAgICAgIGNhc2UgNDY6IC8vUE5QRW52X1RVTkVSX1RQMThOU1IwMUY6Ci0gICAgICAgICAgICAgICAgY2FzZSA0NzogLy9QTlBFbnZfVFVORVJfVFAxOFBTQjAxRDoKLSAgICAgICAgICAgICAgICBjYXNlIDQ5OiAvL1BOUEVudl9UVU5FUl9UQVBDX0kwMDFEOgotICAgICAgICAgICAgICAgIGNhc2UgNjA6IC8vUE5QRW52X1RVTkVSX1RBUEVfUzAwMURfTUszOgotICAgICAgICAgICAgICAgIGNhc2UgNTc6IC8vUE5QRW52X1RVTkVSX0ZNMTIxNk1FX01LMzoKLSAgICAgICAgICAgICAgICBjYXNlIDU5OiAvL1BOUEVudl9UVU5FUl9GTTEyMTZNUF9NSzM6Ci0gICAgICAgICAgICAgICAgY2FzZSA1ODogLy9QTlBFbnZfVFVORVJfRk0xMjM2X01LMzoKLSAgICAgICAgICAgICAgICBjYXNlIDY4OiAvL1BOUEVudl9UVU5FUl9UQVBFX0gwMDFGX01LMzoKLSAgICAgICAgICAgICAgICBjYXNlIDYxOiAvL1BOUEVudl9UVU5FUl9UQVBFX00wMDFEX01LMzoKLSAgICAgICAgICAgICAgICBjYXNlIDc4OiAvL1BOUEVudl9UVU5FUl9UREE4Mjc1QzFfODI5MF9GTToKLSAgICAgICAgICAgICAgICBjYXNlIDg5OiAvL1BOUEVudl9UVU5FUl9UQ0xfTUZQRTA1XzI6Ci0gICAgICAgICAgICAgICAgY2FzZSA5MjogLy9QTlBFbnZfVFVORVJfUEhJTElQU19GUTEyMzZBX01LNDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisJc3dpdGNoICh0dW5lclR5cGUpIHsKKwkJY2FzZSAxODogLy9QTlBFbnZfVFVORVJfRlIxMjM2X01LMjoKKwkJY2FzZSAyMzogLy9QTlBFbnZfVFVORVJfRk0xMjM2OgorCQljYXNlIDM4OiAvL1BOUEVudl9UVU5FUl9GTVIxMjM2OgorCQljYXNlIDE2OiAvL1BOUEVudl9UVU5FUl9GUjEyMTZfTUsyOgorCQljYXNlIDE5OiAvL1BOUEVudl9UVU5FUl9GUjEyNDZfTUsyOgorCQljYXNlIDIxOiAvL1BOUEVudl9UVU5FUl9GTTEyMTY6CisJCWNhc2UgMjQ6IC8vUE5QRW52X1RVTkVSX0ZNMTI0NjoKKwkJY2FzZSAxNzogLy9QTlBFbnZfVFVORVJfRlIxMjE2TUZfTUsyOgorCQljYXNlIDIyOiAvL1BOUEVudl9UVU5FUl9GTTEyMTZNRjoKKwkJY2FzZSAyMDogLy9QTlBFbnZfVFVORVJfRlIxMjU2X01LMjoKKwkJY2FzZSAyNTogLy9QTlBFbnZfVFVORVJfRk0xMjU2OgorCQljYXNlIDMzOiAvL1BOUEVudl9UVU5FUl80MDM5RlI1OgorCQljYXNlIDQyOiAvL1BOUEVudl9UVU5FUl80MDA5RlI1OgorCQljYXNlIDUyOiAvL1BOUEVudl9UVU5FUl80MDQ5Rk01OgorCQljYXNlIDU0OiAvL1BOUEVudl9UVU5FUl80MDQ5Rk01X0FsdEkyQzoKKwkJY2FzZSA0NDogLy9QTlBFbnZfVFVORVJfNDAwOUZONToKKwkJY2FzZSAzMTogLy9QTlBFbnZfVFVORVJfVENQQjkwODVQOgorCQljYXNlIDMwOiAvL1BOUEVudl9UVU5FUl9UQ1BOOTA4NUQ6CisJCWNhc2UgNDY6IC8vUE5QRW52X1RVTkVSX1RQMThOU1IwMUY6CisJCWNhc2UgNDc6IC8vUE5QRW52X1RVTkVSX1RQMThQU0IwMUQ6CisJCWNhc2UgNDk6IC8vUE5QRW52X1RVTkVSX1RBUENfSTAwMUQ6CisJCWNhc2UgNjA6IC8vUE5QRW52X1RVTkVSX1RBUEVfUzAwMURfTUszOgorCQljYXNlIDU3OiAvL1BOUEVudl9UVU5FUl9GTTEyMTZNRV9NSzM6CisJCWNhc2UgNTk6IC8vUE5QRW52X1RVTkVSX0ZNMTIxNk1QX01LMzoKKwkJY2FzZSA1ODogLy9QTlBFbnZfVFVORVJfRk0xMjM2X01LMzoKKwkJY2FzZSA2ODogLy9QTlBFbnZfVFVORVJfVEFQRV9IMDAxRl9NSzM6CisJCWNhc2UgNjE6IC8vUE5QRW52X1RVTkVSX1RBUEVfTTAwMURfTUszOgorCQljYXNlIDc4OiAvL1BOUEVudl9UVU5FUl9UREE4Mjc1QzFfODI5MF9GTToKKwkJY2FzZSA4OTogLy9QTlBFbnZfVFVORVJfVENMX01GUEUwNV8yOgorCQljYXNlIDkyOiAvL1BOUEVudl9UVU5FUl9QSElMSVBTX0ZRMTIzNkFfTUs0OgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZyhzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHR2ZWVwcm9tICp0dmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplZXByb21fZGF0YSkKKwkJCQl1bnNpZ25lZCBjaGFyICplZXByb21fZGF0YSkKIHsKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJKiogVGhlIGhhdXBwYXVnZSBlZXByb20gZm9ybWF0IGlzIHRhZ2dlZApAQCAtMzEyLDE5ICszNTUsMjcgQEAKIAkqKiAjIG9mIGlucHV0cy9vdXRwdXRzID8/PwogCSovCiAKLQlpbnQgaSwgaiwgbGVuLCBkb25lLCBiZWVuaGVyZSwgdGFnOworCWludCBpLCBqLCBsZW4sIGRvbmUsIGJlZW5oZXJlLCB0YWcsc3RhcnQ7CiAKLSAgICAgICAgaW50IHR1bmVyMSA9IDAsIHRfZm9ybWF0MSA9IDA7CisJaW50IHR1bmVyMSA9IDAsIHRfZm9ybWF0MSA9IDAsIGF1ZGlvaWM9LTE7CiAJY2hhciAqdF9uYW1lMSA9IE5VTEw7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnRfZm10X25hbWUxWzhdID0geyAiIG5vbmUiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiB9OworCWNvbnN0IGNoYXIgKnRfZm10X25hbWUxWzhdID0geyAiIG5vbmUiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiB9OwogCi0gICAgICAgIGludCB0dW5lcjIgPSAwLCB0X2Zvcm1hdDIgPSAwOworCWludCB0dW5lcjIgPSAwLCB0X2Zvcm1hdDIgPSAwOwogCWNoYXIgKnRfbmFtZTIgPSBOVUxMOwotICAgICAgICBjb25zdCBjaGFyICp0X2ZtdF9uYW1lMls4XSA9IHsgIiBub25lIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIgfTsKKwljb25zdCBjaGFyICp0X2ZtdF9uYW1lMls4XSA9IHsgIiBub25lIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIgfTsKIAotICAgICAgICBtZW1zZXQodHZlZSwgMCwgc2l6ZW9mKCp0dmVlKSk7CisJbWVtc2V0KHR2ZWUsIDAsIHNpemVvZigqdHZlZSkpOwogCWRvbmUgPSBsZW4gPSBiZWVuaGVyZSA9IDA7Ci0JZm9yIChpID0gMDsgIWRvbmUgJiYgaSA8IDI1NjsgaSArPSBsZW4pIHsKKworCS8qIEhhY2sgZm9yIHByb2Nlc3NpbmcgZWVwcm9tIGZvciBlbTI4eHggKi8KKwlpZiAoKGVlcHJvbV9kYXRhWzBdPT0weDFhKSYmKGVlcHJvbV9kYXRhWzFdPT0weGViKSYmCisJCQkJKGVlcHJvbV9kYXRhWzJdPT0weDY3KSYmKGVlcHJvbV9kYXRhWzNdPT0weDk1KSkKKwkJc3RhcnQ9MHhhMDsKKwllbHNlCisJCXN0YXJ0PTA7CisKKwlmb3IgKGkgPSBzdGFydDsgIWRvbmUgJiYgaSA8IDI1NjsgaSArPSBsZW4pIHsKIAkJaWYgKGVlcHJvbV9kYXRhW2ldID09IDB4ODQpIHsKIAkJCWxlbiA9IGVlcHJvbV9kYXRhW2kgKyAxXSArIChlZXByb21fZGF0YVtpICsgMl0gPDwgOCk7CiAJCQlpICs9IDM7CkBAIC0zMzgsMjggKzM4OSwyOCBAQAogCQkJKytpOwogCQl9IGVsc2UgewogCQkJdHZlZXByb21fd2FybigiRW5jb3VudGVyZWQgYmFkIHBhY2tldCBoZWFkZXIgWyUwMnhdLiAiCi0JCQkJICAgIkNvcnJ1cHQgb3Igbm90IGEgSGF1cHBhdWdlIGVlcHJvbS5cbiIsIGVlcHJvbV9kYXRhW2ldKTsKKwkJCQkiQ29ycnVwdCBvciBub3QgYSBIYXVwcGF1Z2UgZWVwcm9tLlxuIiwgZWVwcm9tX2RhdGFbaV0pOwogCQkJcmV0dXJuOwogCQl9CiAKLSAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWVwcm9tX2luZm8oIlRhZyBbJTAyeF0gKyAlZCBieXRlczoiLCBlZXByb21fZGF0YVtpXSwgbGVuIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDE7IGogPCBsZW47IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIiAlMDJ4IiwgZWVwcm9tX2RhdGFbaSArIGpdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgICAgICB9CisJCWlmIChkZWJ1ZykgeworCQkJdHZlZXByb21faW5mbygiVGFnIFslMDJ4XSArICVkIGJ5dGVzOiIsIGVlcHJvbV9kYXRhW2ldLCBsZW4gLSAxKTsKKwkJCWZvcihqID0gMTsgaiA8IGxlbjsgaisrKSB7CisJCQkJcHJpbnRrKCIgJTAyeCIsIGVlcHJvbV9kYXRhW2kgKyBqXSk7CisJCQl9CisJCQlwcmludGsoIlxuIik7CisJCX0KIAogCQkvKiBwcm9jZXNzIGJ5IHRhZyAqLwogCQl0YWcgPSBlZXByb21fZGF0YVtpXTsKIAkJc3dpdGNoICh0YWcpIHsKIAkJY2FzZSAweDAwOgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnOiAnQ29tcHJlaGVuc2l2ZScgKi8KKwkJCS8qIHRhZzogJ0NvbXByZWhlbnNpdmUnICovCiAJCQl0dW5lcjEgPSBlZXByb21fZGF0YVtpKzZdOwogCQkJdF9mb3JtYXQxID0gZWVwcm9tX2RhdGFbaSs1XTsKIAkJCXR2ZWUtPmhhc19yYWRpbyA9IGVlcHJvbV9kYXRhW2krbGVuLTFdOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogb2xkIHN0eWxlIHRhZywgZG9uJ3Qga25vdyBob3cgdG8gZGV0ZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBJUiBwcmVzZW5jZSwgbWFyayBhcyB1bmtub3duLiAqLworCQkJLyogb2xkIHN0eWxlIHRhZywgZG9uJ3Qga25vdyBob3cgdG8gZGV0ZWN0CisJCQlJUiBwcmVzZW5jZSwgbWFyayBhcyB1bmtub3duLiAqLwogCQkJdHZlZS0+aGFzX2lyID0gMjsKIAkJCXR2ZWUtPm1vZGVsID0KIAkJCQllZXByb21fZGF0YVtpKzhdICsKQEAgLTM3MCw3ICs0MjEsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDAxOgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnOiAnU2VyaWFsSUQnICovCisJCQkvKiB0YWc6ICdTZXJpYWxJRCcgKi8KIAkJCXR2ZWUtPnNlcmlhbF9udW1iZXIgPQogCQkJCWVlcHJvbV9kYXRhW2krNl0gKwogCQkJCShlZXByb21fZGF0YVtpKzddIDw8IDgpICsKQEAgLTM3OCwxNyArNDI5LDIxIEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ0F1ZGlvSW5mbycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgbWFzayB3aXRoIDB4N0YsIGhpZ2ggYml0IHVzZWQgb24gc29tZSBvbGRlciBtb2RlbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGluZGljYXRlIDQwNTIgbXV4IHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIHVzaW5nIE1TUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzIGRpcmVjdGx5LiAqLwotCQkJdHZlZS0+YXVkaW9fcHJvY2Vzc29yID0gZWVwcm9tX2RhdGFbaSsyXSAmIDB4N2Y7CisJCQkvKiB0YWcgJ0F1ZGlvSW5mbycKKwkJCU5vdGUgbWFzayB3aXRoIDB4N0YsIGhpZ2ggYml0IHVzZWQgb24gc29tZSBvbGRlciBtb2RlbHMKKwkJCXRvIGluZGljYXRlIDQwNTIgbXV4IHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIHVzaW5nIE1TUAorCQkJaW5wdXRzIGRpcmVjdGx5LiAqLworCQkJYXVkaW9pYyA9IGVlcHJvbV9kYXRhW2krMl0gJiAweDdmOworCQkJaWYgKGF1ZGlvaWMgPCBzaXplb2YoYXVkaW9JQykvc2l6ZW9mKCphdWRpb0lDKSkKKwkJCQl0dmVlLT5hdWRpb19wcm9jZXNzb3IgPSBhdWRpb0lDW2F1ZGlvaWNdLmlkOworCQkJZWxzZQorCQkJCXR2ZWUtPmF1ZGlvX3Byb2Nlc3NvciA9IEFVRElPX0NISVBfVU5LTk9XTjsKIAkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgLyogY2FzZSAweDAzOiB0YWcgJ0VFSW5mbycgKi8KKwkJLyogY2FzZSAweDAzOiB0YWcgJ0VFSW5mbycgKi8KIAogCQljYXNlIDB4MDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ1NlcmlhbElEMicgKi8KKwkJCS8qIHRhZyAnU2VyaWFsSUQyJyAqLwogCQkJdHZlZS0+c2VyaWFsX251bWJlciA9CiAJCQkJZWVwcm9tX2RhdGFbaSs1XSArCiAJCQkJKGVlcHJvbV9kYXRhW2krNl0gPDwgOCkgKwpAQCAtMzk2LDE1ICs0NTEsMjAgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwNToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnQXVkaW8yJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSBtYXNrIHdpdGggMHg3RiwgaGlnaCBiaXQgdXNlZCBvbiBzb21lIG9sZGVyIG1vZGVscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaW5kaWNhdGUgNDA1MiBtdXggd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgTVNQCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgZGlyZWN0bHkuICovCi0JCQl0dmVlLT5hdWRpb19wcm9jZXNzb3IgPSBlZXByb21fZGF0YVtpKzFdICYgMHg3ZjsKKwkJCS8qIHRhZyAnQXVkaW8yJworCQkJTm90ZSBtYXNrIHdpdGggMHg3RiwgaGlnaCBiaXQgdXNlZCBvbiBzb21lIG9sZGVyIG1vZGVscworCQkJdG8gaW5kaWNhdGUgNDA1MiBtdXggd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgTVNQCisJCQlpbnB1dHMgZGlyZWN0bHkuICovCisJCQlhdWRpb2ljID0gZWVwcm9tX2RhdGFbaSsxXSAmIDB4N2Y7CisJCQlpZiAoYXVkaW9pYyA8IHNpemVvZihhdWRpb0lDKS9zaXplb2YoKmF1ZGlvSUMpKQorCQkJCXR2ZWUtPmF1ZGlvX3Byb2Nlc3NvciA9IGF1ZGlvSUNbYXVkaW9pY10uaWQ7CisJCQllbHNlCisJCQkJdHZlZS0+YXVkaW9fcHJvY2Vzc29yID0gQVVESU9fQ0hJUF9VTktOT1dOOworCiAJCQlicmVhazsKIAogCQljYXNlIDB4MDY6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ01vZGVsUmV2JyAqLworCQkJLyogdGFnICdNb2RlbFJldicgKi8KIAkJCXR2ZWUtPm1vZGVsID0KIAkJCQllZXByb21fZGF0YVtpKzFdICsKIAkJCQkoZWVwcm9tX2RhdGFbaSsyXSA8PCA4KTsKQEAgLTQxNCw1NSArNDc0LDU1IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MDc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ0RldGFpbHMnOiBhY2NvcmRpbmcgdG8gSGF1cHBhdWdlIG5vdCBpbnRlcmVzdGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYW55IFBDSS1lcmEgb3IgbGF0ZXIgYm9hcmRzLiAqLworCQkJLyogdGFnICdEZXRhaWxzJzogYWNjb3JkaW5nIHRvIEhhdXBwYXVnZSBub3QgaW50ZXJlc3RpbmcKKwkJCW9uIGFueSBQQ0ktZXJhIG9yIGxhdGVyIGJvYXJkcy4gKi8KIAkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgbm8gdGFnIDB4MDggZGVmaW5lZCAqLworCQkvKiB0aGVyZSBpcyBubyB0YWcgMHgwOCBkZWZpbmVkICovCiAKIAkJY2FzZSAweDA5OgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnICdWaWRlbycgKi8KKwkJCS8qIHRhZyAnVmlkZW8nICovCiAJCQl0dmVlLT5kZWNvZGVyX3Byb2Nlc3NvciA9IGVlcHJvbV9kYXRhW2kgKyAxXTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwYToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnVHVuZXInICovCisJCQkvKiB0YWcgJ1R1bmVyJyAqLwogCQkJaWYgKGJlZW5oZXJlID09IDApIHsKIAkJCQl0dW5lcjEgPSBlZXByb21fZGF0YVtpKzJdOwogCQkJCXRfZm9ybWF0MSA9IGVlcHJvbV9kYXRhW2krMV07CiAJCQkJYmVlbmhlcmUgPSAxOwogCQkJfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYSBzZWNvbmQgKHJhZGlvKSB0dW5lciBtYXkgYmUgcHJlc2VudCAqLworCQkJCS8qIGEgc2Vjb25kIChyYWRpbykgdHVuZXIgbWF5IGJlIHByZXNlbnQgKi8KIAkJCQl0dW5lcjIgPSBlZXByb21fZGF0YVtpKzJdOwogCQkJCXRfZm9ybWF0MiA9IGVlcHJvbV9kYXRhW2krMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0X2Zvcm1hdDIgPT0gMCkgeyAgLyogbm90IGEgVFYgdHVuZXI/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZlZS0+aGFzX3JhZGlvID0gMTsgLyogbXVzdCBiZSByYWRpbyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJaWYgKHRfZm9ybWF0MiA9PSAwKSB7ICAvKiBub3QgYSBUViB0dW5lcj8gKi8KKwkJCQkJdHZlZS0+aGFzX3JhZGlvID0gMTsgLyogbXVzdCBiZSByYWRpbyAqLworCQkJCX0KKwkJCX0KIAkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSAweDBiOgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnICdJbnB1dHMnOiBhY2NvcmRpbmcgdG8gSGF1cHBhdWdlIHRoaXMgaXMgc3BlY2lmaWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGVhY2ggZHJpdmVyIGZhbWlseSwgc28gbm8gZ29vZCBhc3N1bXB0aW9ucyBjYW4gYmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZGUuICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDBiOgorCQkJLyogdGFnICdJbnB1dHMnOiBhY2NvcmRpbmcgdG8gSGF1cHBhdWdlIHRoaXMgaXMgc3BlY2lmaWMKKwkJCXRvIGVhY2ggZHJpdmVyIGZhbWlseSwgc28gbm8gZ29vZCBhc3N1bXB0aW9ucyBjYW4gYmUKKwkJCW1hZGUuICovCisJCQlicmVhazsKIAotICAgICAgICAgICAgICAgIC8qIGNhc2UgMHgwYzogdGFnICdCYWx1bicgKi8KLSAgICAgICAgICAgICAgICAvKiBjYXNlIDB4MGQ6IHRhZyAnVGVsZXRleHQnICovCisJCS8qIGNhc2UgMHgwYzogdGFnICdCYWx1bicgKi8KKwkJLyogY2FzZSAweDBkOiB0YWcgJ1RlbGV0ZXh0JyAqLwogCiAJCWNhc2UgMHgwZToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZzogJ1JhZGlvJyAqLworCQkJLyogdGFnOiAnUmFkaW8nICovCiAJCQl0dmVlLT5oYXNfcmFkaW8gPSBlZXByb21fZGF0YVtpKzFdOwogCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDB4MGY6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ0lSSW5mbycgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWUtPmhhc19pciA9IGVlcHJvbV9kYXRhW2krMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDBmOgorCQkJLyogdGFnICdJUkluZm8nICovCisJCQl0dmVlLT5oYXNfaXIgPSBlZXByb21fZGF0YVtpKzFdOworCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvKiBjYXNlIDB4MTA6IHRhZyAnVkJJSW5mbycgKi8KLSAgICAgICAgICAgICAgICAvKiBjYXNlIDB4MTE6IHRhZyAnUUNJbmZvJyAqLwotICAgICAgICAgICAgICAgIC8qIGNhc2UgMHgxMjogdGFnICdJbmZvQml0cycgKi8KKwkJLyogY2FzZSAweDEwOiB0YWcgJ1ZCSUluZm8nICovCisJCS8qIGNhc2UgMHgxMTogdGFnICdRQ0luZm8nICovCisJCS8qIGNhc2UgMHgxMjogdGFnICdJbmZvQml0cycgKi8KIAogCQlkZWZhdWx0OgogCQkJdHZlZXByb21fZGJnKCJOb3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGFnIFslMDJ4XVxuIiwgdGFnKTsKQEAgLTQ4MywxMSArNTQzLDExIEBACiAJCXR2ZWUtPnJldl9zdHJbNF0gPSAwOwogCX0KIAotICAgICAgICBpZiAoaGFzUmFkaW9UdW5lcih0dW5lcjEpICYmICF0dmVlLT5oYXNfcmFkaW8pIHsKLQkgICAgdHZlZXByb21faW5mbygiVGhlIGVlcHJvbSBzYXlzIG5vIHJhZGlvIGlzIHByZXNlbnQsIGJ1dCB0aGUgdHVuZXIgdHlwZVxuIik7Ci0JICAgIHR2ZWVwcm9tX2luZm8oImluZGljYXRlcyBvdGhlcndpc2UuIEkgd2lsbCBhc3N1bWUgdGhhdCByYWRpbyBpcyBwcmVzZW50LlxuIik7Ci0gICAgICAgICAgICB0dmVlLT5oYXNfcmFkaW8gPSAxOwotICAgICAgICB9CisJaWYgKGhhc1JhZGlvVHVuZXIodHVuZXIxKSAmJiAhdHZlZS0+aGFzX3JhZGlvKSB7CisJCXR2ZWVwcm9tX2luZm8oIlRoZSBlZXByb20gc2F5cyBubyByYWRpbyBpcyBwcmVzZW50LCBidXQgdGhlIHR1bmVyIHR5cGVcbiIpOworCQl0dmVlcHJvbV9pbmZvKCJpbmRpY2F0ZXMgb3RoZXJ3aXNlLiBJIHdpbGwgYXNzdW1lIHRoYXQgcmFkaW8gaXMgcHJlc2VudC5cbiIpOworCQl0dmVlLT5oYXNfcmFkaW8gPSAxOworCX0KIAogCWlmICh0dW5lcjEgPCBzaXplb2YoaGF1cHBhdWdlX3R1bmVyKS9zaXplb2Yoc3RydWN0IEhBVVBQQVVHRV9UVU5FUikpIHsKIAkJdHZlZS0+dHVuZXJfdHlwZSA9IGhhdXBwYXVnZV90dW5lclt0dW5lcjFdLmlkOwpAQCAtNTEwLDQ1ICs1NzAsNTMgQEAKIAkJCXR2ZWUtPnR1bmVyX2Zvcm1hdHMgfD0gaGF1cHBhdWdlX3R1bmVyX2ZtdFtpXS5pZDsKIAkJCXRfZm10X25hbWUxW2orK10gPSBoYXVwcGF1Z2VfdHVuZXJfZm10W2ldLm5hbWU7CiAJCX0KLSAgICAgICAgICAgICAgICBpZiAodF9mb3JtYXQyICYgKDEgPDwgaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWUtPnR1bmVyMl9mb3JtYXRzIHw9IGhhdXBwYXVnZV90dW5lcl9mbXRbaV0uaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0X2ZtdF9uYW1lMltqKytdID0gaGF1cHBhdWdlX3R1bmVyX2ZtdFtpXS5uYW1lOwotICAgICAgICAgICAgICAgIH0KKwkJaWYgKHRfZm9ybWF0MiAmICgxIDw8IGkpKSB7CisJCQl0dmVlLT50dW5lcjJfZm9ybWF0cyB8PSBoYXVwcGF1Z2VfdHVuZXJfZm10W2ldLmlkOworCQkJdF9mbXRfbmFtZTJbaisrXSA9IGhhdXBwYXVnZV90dW5lcl9mbXRbaV0ubmFtZTsKKwkJfQogCX0KIAogCXR2ZWVwcm9tX2luZm8oIkhhdXBwYXVnZSBtb2RlbCAlZCwgcmV2ICVzLCBzZXJpYWwjICVkXG4iLAotCQkgICB0dmVlLT5tb2RlbCwgdHZlZS0+cmV2X3N0ciwgdHZlZS0+c2VyaWFsX251bWJlcik7CisJCXR2ZWUtPm1vZGVsLCB0dmVlLT5yZXZfc3RyLCB0dmVlLT5zZXJpYWxfbnVtYmVyKTsKIAl0dmVlcHJvbV9pbmZvKCJ0dW5lciBtb2RlbCBpcyAlcyAoaWR4ICVkLCB0eXBlICVkKVxuIiwKLQkJICAgdF9uYW1lMSwgdHVuZXIxLCB0dmVlLT50dW5lcl90eXBlKTsKKwkJdF9uYW1lMSwgdHVuZXIxLCB0dmVlLT50dW5lcl90eXBlKTsKIAl0dmVlcHJvbV9pbmZvKCJUViBzdGFuZGFyZHMlcyVzJXMlcyVzJXMlcyVzIChlZXByb20gMHglMDJ4KVxuIiwKLQkJICAgdF9mbXRfbmFtZTFbMF0sIHRfZm10X25hbWUxWzFdLCB0X2ZtdF9uYW1lMVsyXSwgdF9mbXRfbmFtZTFbM10sCi0JCSAgIHRfZm10X25hbWUxWzRdLCB0X2ZtdF9uYW1lMVs1XSwgdF9mbXRfbmFtZTFbNl0sIHRfZm10X25hbWUxWzddLAotICAgICAgICAgICAgICAgICAgIHRfZm9ybWF0MSk7Ci0gICAgICAgIGlmICh0dW5lcjIpIHsKLSAgICAgICAgICAgICAgICB0dmVlcHJvbV9pbmZvKCJzZWNvbmQgdHVuZXIgbW9kZWwgaXMgJXMgKGlkeCAlZCwgdHlwZSAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0X25hbWUyLCB0dW5lcjIsIHR2ZWUtPnR1bmVyMl90eXBlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodF9mb3JtYXQyKSB7Ci0gICAgICAgICAgICAgICAgdHZlZXByb21faW5mbygiVFYgc3RhbmRhcmRzJXMlcyVzJXMlcyVzJXMlcyAoZWVwcm9tIDB4JTAyeClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0X2ZtdF9uYW1lMlswXSwgdF9mbXRfbmFtZTJbMV0sIHRfZm10X25hbWUyWzJdLCB0X2ZtdF9uYW1lMlszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfZm10X25hbWUyWzRdLCB0X2ZtdF9uYW1lMls1XSwgdF9mbXRfbmFtZTJbNl0sIHRfZm10X25hbWUyWzddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdF9mb3JtYXQyKTsKLSAgICAgICAgfQotCXR2ZWVwcm9tX2luZm8oImF1ZGlvIHByb2Nlc3NvciBpcyAlcyAoaWR4ICVkKVxuIiwKLQkJICAgU1RSTShhdWRpb0lDLCB0dmVlLT5hdWRpb19wcm9jZXNzb3IpLAotCQkgICB0dmVlLT5hdWRpb19wcm9jZXNzb3IpOwotICAgICAgICBpZiAodHZlZS0+ZGVjb2Rlcl9wcm9jZXNzb3IpIHsKLSAgICAgICAgICAgICAgICB0dmVlcHJvbV9pbmZvKCJkZWNvZGVyIHByb2Nlc3NvciBpcyAlcyAoaWR4ICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUk0oZGVjb2RlcklDLCB0dmVlLT5kZWNvZGVyX3Byb2Nlc3NvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0dmVlLT5kZWNvZGVyX3Byb2Nlc3Nvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR2ZWUtPmhhc19pciA9PSAyKQotICAgICAgICAgICAgICAgIHR2ZWVwcm9tX2luZm8oImhhcyAlc3JhZGlvXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dmVlLT5oYXNfcmFkaW8gPyAiIiA6ICJubyAiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR2ZWVwcm9tX2luZm8oImhhcyAlc3JhZGlvLCBoYXMgJXNJUiByZW1vdGVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWUtPmhhc19yYWRpbyA/ICIiIDogIm5vICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWUtPmhhc19pciA/ICIiIDogIm5vICIpOworCQl0X2ZtdF9uYW1lMVswXSwgdF9mbXRfbmFtZTFbMV0sIHRfZm10X25hbWUxWzJdLCB0X2ZtdF9uYW1lMVszXSwKKwkJdF9mbXRfbmFtZTFbNF0sIHRfZm10X25hbWUxWzVdLCB0X2ZtdF9uYW1lMVs2XSwgdF9mbXRfbmFtZTFbN10sCisJCXRfZm9ybWF0MSk7CisJaWYgKHR1bmVyMikgeworCQl0dmVlcHJvbV9pbmZvKCJzZWNvbmQgdHVuZXIgbW9kZWwgaXMgJXMgKGlkeCAlZCwgdHlwZSAlZClcbiIsCisJCQkJCXRfbmFtZTIsIHR1bmVyMiwgdHZlZS0+dHVuZXIyX3R5cGUpOworCX0KKwlpZiAodF9mb3JtYXQyKSB7CisJCXR2ZWVwcm9tX2luZm8oIlRWIHN0YW5kYXJkcyVzJXMlcyVzJXMlcyVzJXMgKGVlcHJvbSAweCUwMngpXG4iLAorCQkJdF9mbXRfbmFtZTJbMF0sIHRfZm10X25hbWUyWzFdLCB0X2ZtdF9uYW1lMlsyXSwgdF9mbXRfbmFtZTJbM10sCisJCQl0X2ZtdF9uYW1lMls0XSwgdF9mbXRfbmFtZTJbNV0sIHRfZm10X25hbWUyWzZdLCB0X2ZtdF9uYW1lMls3XSwKKwkJCXRfZm9ybWF0Mik7CisJfQorCWlmIChhdWRpb2ljPDApIHsKKwkJdHZlZXByb21faW5mbygiYXVkaW8gcHJvY2Vzc29yIGlzIHVua25vd24gKG5vIGlkeClcbiIpOworCQl0dmVlLT5hdWRpb19wcm9jZXNzb3I9QVVESU9fQ0hJUF9VTktOT1dOOworCX0gZWxzZSB7CisJCWlmIChhdWRpb2ljIDwgc2l6ZW9mKGF1ZGlvSUMpL3NpemVvZigqYXVkaW9JQykpCisJCQl0dmVlcHJvbV9pbmZvKCJhdWRpbyBwcm9jZXNzb3IgaXMgJXMgKGlkeCAlZClcbiIsCisJCQkJCWF1ZGlvSUNbYXVkaW9pY10ubmFtZSxhdWRpb2ljKTsKKwkJZWxzZQorCQkJdHZlZXByb21faW5mbygiYXVkaW8gcHJvY2Vzc29yIGlzIHVua25vd24gKGlkeCAlZClcbiIsCisJCQkJCQkJCWF1ZGlvaWMpOworCX0KKwlpZiAodHZlZS0+ZGVjb2Rlcl9wcm9jZXNzb3IpIHsKKwkJdHZlZXByb21faW5mbygiZGVjb2RlciBwcm9jZXNzb3IgaXMgJXMgKGlkeCAlZClcbiIsCisJCQlTVFJNKGRlY29kZXJJQywgdHZlZS0+ZGVjb2Rlcl9wcm9jZXNzb3IpLAorCQkJdHZlZS0+ZGVjb2Rlcl9wcm9jZXNzb3IpOworCX0KKwlpZiAodHZlZS0+aGFzX2lyID09IDIpCisJCXR2ZWVwcm9tX2luZm8oImhhcyAlc3JhZGlvXG4iLAorCQkJCXR2ZWUtPmhhc19yYWRpbyA/ICIiIDogIm5vICIpOworCWVsc2UKKwkJdHZlZXByb21faW5mbygiaGFzICVzcmFkaW8sIGhhcyAlc0lSIHJlbW90ZVxuIiwKKwkJCQl0dmVlLT5oYXNfcmFkaW8gPyAiIiA6ICJubyAiLAorCQkJCXR2ZWUtPmhhc19pciA/ICIiIDogIm5vICIpOwogfQogRVhQT1JUX1NZTUJPTCh0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKTsKIApAQCAtNTY5LDE4ICs2MzcsMTggQEAKIAkJdHZlZXByb21fd2FybigiaTJjIGVlcHJvbSByZWFkIGVycm9yIChlcnI9JWQpXG4iLCBlcnIpOwogCQlyZXR1cm4gLTE7CiAJfQotICAgICAgICBpZiAoZGVidWcpIHsKLSAgICAgICAgICAgICAgICBpbnQgaTsKKwlpZiAoZGVidWcpIHsKKwkJaW50IGk7CiAKLSAgICAgICAgICAgICAgICB0dmVlcHJvbV9pbmZvKCJmdWxsIDI1Ni1ieXRlIGVlcHJvbSBkdW1wOlxuIik7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSAoaSAlIDE2KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZlZXByb21faW5mbygiJTAyeDoiLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiICUwMngiLCBlZWRhdGFbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDE1ID09IChpICUgMTYpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJCXR2ZWVwcm9tX2luZm8oImZ1bGwgMjU2LWJ5dGUgZWVwcm9tIGR1bXA6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQlpZiAoMCA9PSAoaSAlIDE2KSkKKwkJCQl0dmVlcHJvbV9pbmZvKCIlMDJ4OiIsIGkpOworCQkJcHJpbnRrKCIgJTAyeCIsIGVlZGF0YVtpXSk7CisJCQlpZiAoMTUgPT0gKGkgJSAxNikpCisJCQkJcHJpbnRrKCJcbiIpOworCQl9CisJfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh0dmVlcHJvbV9yZWFkKTsKQEAgLTU5MCwxMCArNjU4LDYgQEAKIC8qIHJ1biwganVzdCBjYWxsIHRoZSBleHBvcnRlZCB0dmVlcHJvbV8qIGRpcmVjdGx5LCB0aGVyZSBpcyBubyBwb2ludCBpbiAgICovCiAvKiB1c2luZyB0aGUgaW5kaXJlY3Qgd2F5IHZpYSBpMmNfZHJpdmVyLT5jb21tYW5kKCkgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0jaWZuZGVmIEkyQ19EUklWRVJJRF9UVkVFUFJPTQotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1RWRUVQUk9NIEkyQ19EUklWRVJJRF9FWFAyCi0jZW5kaWYKLQogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKIAkweGEwID4+IDEsCiAJSTJDX0NMSUVOVF9FTkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2bWl4ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jCmluZGV4IGQ4NmUwOGUuLjgzMThiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jCkBAIC03OSw3ICs3OSw3IEBACiB7CiAJc3RydWN0IHZpZGVvX2F1ZGlvIHZhOwogCWludCBsZWZ0LHJpZ2h0LHJldCx2YWwgPSAwOwotICAgICAgICBzdHJ1Y3QgVFZNSVhFUiAqbWl4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBUVk1JWEVSICptaXggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IG1peC0+ZGV2OwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwpAQCAtODcsMjUgKzg3LDI1IEBACiAJaWYgKE5VTEwgPT0gY2xpZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotICAgICAgICBpZiAoY21kID09IFNPVU5EX01JWEVSX0lORk8pIHsKLSAgICAgICAgICAgICAgICBtaXhlcl9pbmZvIGluZm87Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLmlkLCAidHYgY2FyZCIsIHNpemVvZihpbmZvLmlkKSk7Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLm5hbWUsIGNsaWVudC0+bmFtZSwgc2l6ZW9mKGluZm8ubmFtZSkpOwotICAgICAgICAgICAgICAgIGluZm8ubW9kaWZ5X2NvdW50ZXIgPSA0MiAvKiBGSVhNRSAqLzsKLSAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNtZCA9PSBTT1VORF9PTERfTUlYRVJfSU5GTykgewotICAgICAgICAgICAgICAgIF9vbGRfbWl4ZXJfaW5mbyBpbmZvOwotICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5pZCwgInR2IGNhcmQiLCBzaXplb2YoaW5mby5pZCkpOwotICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5uYW1lLCBjbGllbnQtPm5hbWUsIHNpemVvZihpbmZvLm5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNtZCA9PSBPU1NfR0VUVkVSU0lPTikKLSAgICAgICAgICAgICAgICByZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgcCk7CisJaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9JTkZPKSB7CisJCW1peGVyX2luZm8gaW5mbzsKKwkJc3RybGNweShpbmZvLmlkLCAidHYgY2FyZCIsIHNpemVvZihpbmZvLmlkKSk7CisJCXN0cmxjcHkoaW5mby5uYW1lLCBjbGllbnQtPm5hbWUsIHNpemVvZihpbmZvLm5hbWUpKTsKKwkJaW5mby5tb2RpZnlfY291bnRlciA9IDQyIC8qIEZJWE1FICovOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoY21kID09IFNPVU5EX09MRF9NSVhFUl9JTkZPKSB7CisJCV9vbGRfbWl4ZXJfaW5mbyBpbmZvOworCQlzdHJsY3B5KGluZm8uaWQsICJ0diBjYXJkIiwgc2l6ZW9mKGluZm8uaWQpKTsKKwkJc3RybGNweShpbmZvLm5hbWUsIGNsaWVudC0+bmFtZSwgc2l6ZW9mKGluZm8ubmFtZSkpOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKQorCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgcCk7CiAKIAlpZiAoX1NJT0NfRElSKGNtZCkgJiBfU0lPQ19XUklURSkKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCkBAIC0xODEsOCArMTgxLDggQEAKIAogc3RhdGljIGludCB0dm1peGVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gICAgICAgIGludCBpLCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIHN0cnVjdCBUVk1JWEVSICptaXggPSBOVUxMOworCWludCBpLCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IFRWTUlYRVIgKm1peCA9IE5VTEw7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgREVWX01BWDsgaSsrKSB7CkBAIC0yMDQsNyArMjA0LDcgQEAKICNlbmRpZgogCWlmIChjbGllbnQtPmFkYXB0ZXItPm93bmVyKQogCQl0cnlfbW9kdWxlX2dldChjbGllbnQtPmFkYXB0ZXItPm93bmVyKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHZtaXhlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMjMxLDE1ICsyMzEsMTUgQEAKIAkub3duZXIgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAjZW5kaWYKIAkubmFtZSAgICAgICAgICAgID0gInR2IGNhcmQgbWl4ZXIgZHJpdmVyIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UVk1JWEVSLAorCS5pZCAgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfVFZNSVhFUiwKICNpZmRlZiBJMkNfREZfRFVNTVkKIAkuZmxhZ3MgICAgICAgICAgID0gSTJDX0RGX0RVTU1ZLAogI2Vsc2UKIAkuZmxhZ3MgICAgICAgICAgID0gSTJDX0RGX05PVElGWSwKLSAgICAgICAgLmRldGFjaF9hZGFwdGVyICA9IHR2bWl4ZXJfYWRhcHRlcnMsCisJLmRldGFjaF9hZGFwdGVyICA9IHR2bWl4ZXJfYWRhcHRlcnMsCiAjZW5kaWYKLSAgICAgICAgLmF0dGFjaF9hZGFwdGVyICA9IHR2bWl4ZXJfYWRhcHRlcnMsCi0gICAgICAgIC5kZXRhY2hfY2xpZW50ICAgPSB0dm1peGVyX2NsaWVudHMsCisJLmF0dGFjaF9hZGFwdGVyICA9IHR2bWl4ZXJfYWRhcHRlcnMsCisJLmRldGFjaF9jbGllbnQgICA9IHR2bWl4ZXJfY2xpZW50cywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR2bWl4ZXJfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlNmQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCkBAIC0wLDAgKzEsODI5IEBACisvKgorICogdHZwNTE1MCAtIFRleGFzIEluc3RydW1lbnRzIFRWUDUxNTBBKE0pIHZpZGVvIGRlY29kZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBicnR1cmJvLmNvbS5icikKKyAqIFRoaXMgY29kZSBpcyBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorCisjaW5jbHVkZSAidHZwNTE1MF9yZWcuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTUwQSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwkvKiBzdGFuZGFyZCBpMmMgaW5zbW9kIG9wdGlvbnMgKi8KK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCTB4YjggPj4gMSwKKwkweGJhID4+IDEsCisJSTJDX0NMSUVOVF9FTkQKK307CisKK0kyQ19DTElFTlRfSU5TTU9EOworCitzdGF0aWMgaW50IGRlYnVnID0gMDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOworCisjZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnID49IG51bSkgXAorCQkJcHJpbnRrKGZvcm1hdCAsICMjYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBzdXBwb3J0ZWQgY29udHJvbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdHZwNTE1MF9xY3RybFtdID0geworCXsKKwkgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSAubmFtZSA9ICJCcmlnaHRuZXNzIiwKKwkgLm1pbmltdW0gPSAwLAorCSAubWF4aW11bSA9IDI1NSwKKwkgLnN0ZXAgPSAxLAorCSAuZGVmYXVsdF92YWx1ZSA9IDAsCisJIC5mbGFncyA9IDAsCisJIH0sIHsKKwkgICAgIC5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCSAgICAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSAgICAgLm5hbWUgPSAiQ29udHJhc3QiLAorCSAgICAgLm1pbmltdW0gPSAwLAorCSAgICAgLm1heGltdW0gPSAyNTUsCisJICAgICAuc3RlcCA9IDB4MSwKKwkgICAgIC5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKKwkgICAgIC5mbGFncyA9IDAsCisJICAgICB9LCB7CisJCSAuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkgLm5hbWUgPSAiU2F0dXJhdGlvbiIsCisJCSAubWluaW11bSA9IDAsCisJCSAubWF4aW11bSA9IDI1NSwKKwkJIC5zdGVwID0gMHgxLAorCQkgLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkgLmZsYWdzID0gMCwKKwkJIH0sIHsKKwkJICAgICAuaWQgPSBWNEwyX0NJRF9IVUUsCisJCSAgICAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkgICAgIC5uYW1lID0gIkh1ZSIsCisJCSAgICAgLm1pbmltdW0gPSAtMTI4LAorCQkgICAgIC5tYXhpbXVtID0gMTI3LAorCQkgICAgIC5zdGVwID0gMHgxLAorCQkgICAgIC5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKKwkJICAgICAuZmxhZ3MgPSAwLAorCQkgICAgIH0KK307CisKK3N0cnVjdCB0dnA1MTUwIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJaW50IG5vcm07CisJaW50IGlucHV0OworCWludCBlbmFibGU7CisJaW50IGJyaWdodDsKKwlpbnQgY29udHJhc3Q7CisJaW50IGh1ZTsKKwlpbnQgc2F0OworfTsKKworc3RhdGljIGlubGluZSBpbnQgdHZwNTE1MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMV07CisJaW50IHJjOworCisJYnVmZmVyWzBdID0gYWRkcjsKKwlpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAxKSkpCisJCWRwcmludGsoMCwgImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIsIHJjKTsKKworCW1zbGVlcCgxMCk7CisKKwlpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3JlY3YoYywgYnVmZmVyLCAxKSkpCisJCWRwcmludGsoMCwgImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIsIHJjKTsKKworCXJldHVybiAoYnVmZmVyWzBdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgYWRkciwKKwkJCQkgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKwlpbnQgcmM7CisvKglzdHJ1Y3QgdHZwNTE1MCAqY29yZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsgKi8KKworCWJ1ZmZlclswXSA9IGFkZHI7CisJYnVmZmVyWzFdID0gdmFsdWU7CisJZHByaW50aygxLCAidHZwNTE1MDogd3JpdGluZyAweCUwMnggMHglMDJ4XG4iLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgMikpKQorCQlkcHJpbnRrKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLCByYyk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXByaW50aygidHZwNTE1MDogVmlkZW8gaW5wdXQgc291cmNlIHNlbGVjdGlvbiAjMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkRfSU5fU1JDX1NFTF8xKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBbmFsb2cgY2hhbm5lbCBjb250cm9scyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQU5BTF9DSExfQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBPcGVyYXRpb24gbW9kZSBjb250cm9scyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfT1BfTU9ERV9DVEwpKTsKKwlwcmludGsoInR2cDUxNTA6IE1pc2NlbGxhbmVvdXMgY29udHJvbHMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01JU0NfQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBdXRvc3dpdGNoIG1hc2s6IFRWUDUxNTBBIC8gVFZQNTE1MEFNID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BVVRPU1dfTVNLKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDb2xvciBraWxsZXIgdGhyZXNob2xkIGNvbnRyb2wgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTE9SX0tJTF9USFNIX0NUTCkpOworCXByaW50aygidHZwNTE1MDogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8xKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MVU1BX1BST0NfQ1RMXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IEJyaWdodG5lc3MgY29udHJvbCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQlJJR0hUX0NUTCkpOworCXByaW50aygidHZwNTE1MDogQ29sb3Igc2F0dXJhdGlvbiBjb250cm9sID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCkpOworCXByaW50aygidHZwNTE1MDogSHVlIGNvbnRyb2wgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0hVRV9DVEwpKTsKKwlwcmludGsoInR2cDUxNTA6IENvbnRyYXN0IGNvbnRyb2wgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCkpOworCXByaW50aygidHZwNTE1MDogT3V0cHV0cyBhbmQgZGF0YSByYXRlcyBzZWxlY3QgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0RBVEFfUkFURV9TRUwpKTsKKwlwcmludGsoInR2cDUxNTA6IEx1bWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMykpOworCXByaW50aygidHZwNTE1MDogQ29uZmlndXJhdGlvbiBzaGFyZWQgcGlucyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09ORl9TSEFSRURfUElOKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RhcnQgTVNCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVF9NU0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdGFydCBMU0IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX0xTQikpOworCXByaW50aygidHZwNTE1MDogQWN0aXZlIHZpZGVvIGNyb3BwaW5nIHN0b3AgTVNCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVFBfTVNCKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RvcCBMU0IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9MU0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEdlbmxvY2svUlRDID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9HRU5MT0NLKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBIb3Jpem9udGFsIHN5bmMgc3RhcnQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0hPUklaX1NZTkNfU1RBUlQpKTsKKwlwcmludGsoInR2cDUxNTA6IFZlcnRpY2FsIGJsYW5raW5nIHN0YXJ0ID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUQVJUKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWZXJ0aWNhbCBibGFua2luZyBzdG9wID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUT1ApKTsKKwlwcmludGsoInR2cDUxNTA6IENocm9taW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzEpKTsKKwlwcmludGsoInR2cDUxNTA6IENocm9taW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCByZXNldCByZWdpc3RlciBCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfUkVTRVRfUkVHX0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQikpOworCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UVF9DT05GSUdfUkVHX0IpKTsKKwlwcmludGsoInR2cDUxNTA6IFZpZGVvIHN0YW5kYXJkID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSURFT19TVEQpKTsKKwlwcmludGsoInR2cDUxNTA6IENiIGdhaW4gZmFjdG9yID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQl9HQUlOX0ZBQ1QpKTsKKwlwcmludGsoInR2cDUxNTA6IENyIGdhaW4gZmFjdG9yID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DUl9HQUlOX0ZBQ1RPUikpOworCXByaW50aygidHZwNTE1MDogTWFjcm92aXNpb24gb24gY291bnRlciA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTUFDUk9WSVNJT05fT05fQ1RSKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBNYWNyb3Zpc2lvbiBvZmYgY291bnRlciA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTUFDUk9WSVNJT05fT0ZGX0NUUikpOworCXByaW50aygidHZwNTE1MDogcmV2aXNpb24gc2VsZWN0IChUVlA1MTUwQU0xIG9ubHkpID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9SRVZfU0VMRUNUKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBNU0Igb2YgZGV2aWNlIElEID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NU0JfREVWX0lEKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMU0Igb2YgZGV2aWNlIElEID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MU0JfREVWX0lEKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBST00gbWFqb3IgdmVyc2lvbiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUk9NX01BSk9SX1ZFUikpOworCXByaW50aygidHZwNTE1MDogUk9NIG1pbm9yIHZlcnNpb24gPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1JPTV9NSU5PUl9WRVIpKTsKKwlwcmludGsoInR2cDUxNTA6IFZlcnRpY2FsIGxpbmUgY291bnQgTVNCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0xOX0NPVU5UX01TQikpOworCXByaW50aygidHZwNTE1MDogVmVydGljYWwgbGluZSBjb3VudCBMU0IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTFNCKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9TVEFUVVNfUkVHX0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBhY3RpdmUgcmVnaXN0ZXIgQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0FDVElWRV9SRUdfQikpOworCXByaW50aygidHZwNTE1MDogU3RhdHVzIHJlZ2lzdGVyICMxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TVEFUVVNfUkVHXzEpKTsKKwlwcmludGsoInR2cDUxNTA6IFN0YXR1cyByZWdpc3RlciAjMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18yKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVnaXN0ZXIgIzMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NUQVRVU19SRUdfMykpOworCXByaW50aygidHZwNTE1MDogU3RhdHVzIHJlZ2lzdGVyICM0ID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TVEFUVVNfUkVHXzQpKTsKKwlwcmludGsoInR2cDUxNTA6IFN0YXR1cyByZWdpc3RlciAjNSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR181KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0NfREFUQV9SRUcxKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0NfREFUQV9SRUcyKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0NfREFUQV9SRUczKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0NfREFUQV9SRUc0KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBXU1MgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1dTU19EQVRBX1JFRzEpKTsKKwlwcmludGsoInR2cDUxNTA6IFdTUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfV1NTX0RBVEFfUkVHMikpOworCXByaW50aygidHZwNTE1MDogV1NTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9XU1NfREFUQV9SRUczKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBXU1MgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1dTU19EQVRBX1JFRzQpKTsKKwlwcmludGsoInR2cDUxNTA6IFdTUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfV1NTX0RBVEFfUkVHNSkpOworCXByaW50aygidHZwNTE1MDogV1NTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9XU1NfREFUQV9SRUc2KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzEpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMikpOworCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUczKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzQpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHNSkpOworCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUc2KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzcpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHOCkpOworCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUc5KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzEwKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzExKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzEyKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzEzKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHMSkpOworCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzIpKTsKKwlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUczKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNCkpOworCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzUpKTsKKwlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUc2KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNykpOworCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzgpKTsKKwlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUc5KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWQkkgRklGTyByZWFkIGRhdGEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZCSV9GSUZPX1JFQURfREFUQSkpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzEpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMV8yKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMykpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzQpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMV81KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMSkpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMl8zKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNCkpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzUpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciBlbmFibGUgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF9FTkEpKTsKKwlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQSkpOworCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBBID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfRU5BQkxFX1JFR19BKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0NPTkYpKTsKKwlwcmludGsoInR2cDUxNTA6IFZEUCBjb25maWd1cmF0aW9uIFJBTSBkYXRhID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRFBfQ09ORl9SQU1fREFUQSkpOworCXByaW50aygidHZwNTE1MDogQ29uZmlndXJhdGlvbiBSQU0gYWRkcmVzcyBsb3cgYnl0ZSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09ORl9SQU1fQUREUl9MT1cpKTsKKwlwcmludGsoInR2cDUxNTA6IENvbmZpZ3VyYXRpb24gUkFNIGFkZHJlc3MgaGlnaCBieXRlID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT05GX1JBTV9BRERSX0hJR0gpKTsKKwlwcmludGsoInR2cDUxNTA6IFZEUCBzdGF0dXMgcmVnaXN0ZXIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZEUF9TVEFUVVNfUkVHKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBGSUZPIHdvcmQgY291bnQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fV09SRF9DT1VOVCkpOworCXByaW50aygidHZwNTE1MDogRklGTyBpbnRlcnJ1cHQgdGhyZXNob2xkID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GSUZPX0lOVF9USFJFU0hPTEQpKTsKKwlwcmludGsoInR2cDUxNTA6IEZJRk8gcmVzZXQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fUkVTRVQpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbnVtYmVyIGludGVycnVwdCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9OVU1CRVJfSU5UKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBQaXhlbCBhbGlnbm1lbnQgcmVnaXN0ZXIgbG93IGJ5dGUgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1BJWF9BTElHTl9SRUdfTE9XKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBQaXhlbCBhbGlnbm1lbnQgcmVnaXN0ZXIgaGlnaCBieXRlID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9QSVhfQUxJR05fUkVHX0hJR0gpKTsKKwlwcmludGsoInR2cDUxNTA6IEZJRk8gb3V0cHV0IGNvbnRyb2wgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwpKTsKKwlwcmludGsoInR2cDUxNTA6IEZ1bGwgZmllbGQgZW5hYmxlIDEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZVTExfRklFTERfRU5BXzEpKTsKKwlwcmludGsoInR2cDUxNTA6IEZ1bGwgZmllbGQgZW5hYmxlIDIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZVTExfRklFTERfRU5BXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR181KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzYpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR184KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzkpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTApKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTEpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTIpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTMpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTQpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTUpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTYpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTcpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTgpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTkpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjApKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjEpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjIpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjMpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjQpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjUpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjcpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjgpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjkpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzApKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzEpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzIpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzMpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzQpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzUpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzYpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzcpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzgpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzkpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDApKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDEpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDIpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDMpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDQpKTsKKwlwcmludGsoInR2cDUxNTA6IEZ1bGwgZmllbGQgbW9kZSByZWdpc3RlciA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRlVMTF9GSUVMRF9NT0RFX1JFRykpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJQmFzaWMgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0gdHZwNTE1MF9pbnB1dCB7CisJVFZQNTE1MF9BTkFMT0dfQ0gwID0gMCwKKwlUVlA1MTUwX1NWSURFTyA9IDEsCisJVFZQNTE1MF9BTkFMT0dfQ0gxID0gMiwKKwlUVlA1MTUwX0JMQUNLX1NDUkVFTiA9IDgKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA1MTUwX3NlbG11eChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkgIGVudW0gdHZwNTE1MF9pbnB1dCBpbnB1dCkKK3sKKwlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKworCWlmICghZGVjb2Rlci0+ZW5hYmxlKQorCQlpbnB1dCB8PSBUVlA1MTUwX0JMQUNLX1NDUkVFTjsKKworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEsIGlucHV0KTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA1MTUwX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTkZfU0hBUkVEX1BJTiwgMik7CisKKwkvKiBBdXRvbWF0aWMgb2Zmc2V0IGFuZCBBR0MgZW5hYmxlZCAqLworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9BTkFMX0NITF9DVEwsIDB4MTUpOworCisJLyogTm9ybWFsIE9wZXJhdGlvbiAqLworLy8gICAgICB0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfT1BfTU9ERV9DVEwsIDB4MDApOworCisJLyogQWN0aXZhdGUgWUNyQ2Igb3V0cHV0IDB4OSBvciAweGQgPyAqLworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9NSVNDX0NUTCwgMHg2Zik7CisKKwkvKiBBY3RpdmF0ZXMgdmlkZW8gc3RkIGF1dG9kZXRlY3Rpb24gZm9yIGFsbCBzdGFuZGFyZHMgKi8KKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQVVUT1NXX01TSywgMHgwKTsKKworCS8qIERlZmF1bHQgZm9ybWF0OiAweDQ3LCA0OjI6MjogMHg0MCAqLworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9EQVRBX1JBVEVfU0VMLCAweDQ3KTsKKworCXR2cDUxNTBfc2VsbXV4KGMsIGRlY29kZXItPmlucHV0KTsKKworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMSwgMHgwYyk7CisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8yLCAweDU0KTsKKworCXR2cDUxNTBfd3JpdGUoYywgMHgyNywgMHgyMCk7CS8qID8/Pz8/Pz8/Pz8gKi8KKworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9WSURFT19TVEQsIDB4MCk7CS8qIEF1dG8gc3dpdGNoICovCisKKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQlJJR0hUX0NUTCwgZGVjb2Rlci0+YnJpZ2h0ID4+IDgpOworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9DT05UUkFTVF9DVEwsIGRlY29kZXItPmNvbnRyYXN0ID4+IDgpOworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCwgZGVjb2Rlci0+Y29udHJhc3QgPj4gOCk7CisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0hVRV9DVEwsIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7Cit9OworCitzdGF0aWMgaW50IHR2cDUxNTBfZ2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisvKglzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsgKi8KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQlJJR0hUX0NUTCk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09OVFJBU1RfQ1RMKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSFVFX0NUTCk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCB0dnA1MTUwX3NldF9jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworLyoJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7ICovCisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQlJJR0hUX0NUTCwgY3RybC0+dmFsdWUpOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ09OVFJBU1RfQ1RMLCBjdHJsLT52YWx1ZSk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMLCBjdHJsLT52YWx1ZSk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfSFVFX0NUTCwgY3RybC0+dmFsdWUpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlJMkMgQ29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHR2cDUxNTBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSAwOgorCWNhc2UgREVDT0RFUl9JTklUOgorCQl0dnA1MTUwX3Jlc2V0KGNsaWVudCk7CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX0RVTVA6CisJCWR1bXBfcmVnKGNsaWVudCk7CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKworCQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKKwkJCSAgICBWSURFT19ERUNPREVSX05UU0MgfAorCQkJICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfAorCQkJICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8IFZJREVPX0RFQ09ERVJfQ0NJUjsKKwkJCWNhcC0+aW5wdXRzID0gMzsKKwkJCWNhcC0+b3V0cHV0cyA9IDE7CisJCQlicmVhazsKKwkJfQorCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgorCQl7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBERUNPREVSX1NFVF9HUElPOgorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9TRVRfVkJJX0JZUEFTUzoKKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfU0VUX05PUk06CisJCXsKKwkJCWludCAqaWFyZyA9IGFyZzsKKworCQkJc3dpdGNoICgqaWFyZykgeworCisJCQljYXNlIFZJREVPX01PREVfTlRTQzoKKwkJCQlicmVhazsKKworCQkJY2FzZSBWSURFT19NT0RFX1BBTDoKKwkJCQlicmVhazsKKworCQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgorCQkJCWJyZWFrOworCisJCQljYXNlIFZJREVPX01PREVfQVVUTzoKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJfQorCQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOworCQkJYnJlYWs7CisJCX0KKwljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgorCQl7CisJCQlpbnQgKmlhcmcgPSBhcmc7CisJCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gMykgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOworCQkJdHZwNTE1MF9zZWxtdXgoY2xpZW50LCBkZWNvZGVyLT5pbnB1dCk7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CisJCXsKKwkJCWludCAqaWFyZyA9IGFyZzsKKworCQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KKwkJCWlmICgqaWFyZyAhPSAwKSB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgorCQl7CisJCQlpbnQgKmlhcmcgPSBhcmc7CisKKwkJCWRlY29kZXItPmVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKKworCQkJdHZwNTE1MF9zZWxtdXgoY2xpZW50LCBkZWNvZGVyLT5pbnB1dCk7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQkJdTggaSwgbjsKKworCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICJWSURJT0NfUVVFUllDVFJMIik7CisKKwkJCW4gPSBzaXplb2YodHZwNTE1MF9xY3RybCkgLyBzaXplb2YodHZwNTE1MF9xY3RybFswXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHR2cDUxNTBfcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKHR2cDUxNTBfcWN0cmxbaV0pLAorCQkJCQkgICAgICAgc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICJWSURJT0NfR19DVFJMIik7CisKKwkJCXJldHVybiB0dnA1MTUwX2dldF9jdHJsKGNsaWVudCwgY3RybCk7CisJCX0KKwljYXNlIFZJRElPQ19TX0NUUkxfT0xEOgkvKiA/Pz8gKi8KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCQl1OCBpLCBuOworCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICJWSURJT0NfU19DVFJMIik7CisJCQluID0gc2l6ZW9mKHR2cDUxNTBfcWN0cmwpIC8gc2l6ZW9mKHR2cDUxNTBfcWN0cmxbMF0pOworCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCQlpZiAoY3RybC0+aWQgPT0gdHZwNTE1MF9xY3RybFtpXS5pZCkgeworCQkJCQlpZiAoY3RybC0+dmFsdWUgPAorCQkJCQkgICAgdHZwNTE1MF9xY3RybFtpXS5taW5pbXVtCisJCQkJCSAgICB8fCBjdHJsLT52YWx1ZSA+CisJCQkJCSAgICB0dnA1MTUwX3FjdHJsW2ldLm1heGltdW0pCisJCQkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9ERUJVRworCQkJCQkJIlZJRElPQ19TX0NUUkw6IGlkPSVkLCB2YWx1ZT0lZCIsCisJCQkJCQljdHJsLT5pZCwgY3RybC0+dmFsdWUpOworCQkJCQlyZXR1cm4gdHZwNTE1MF9zZXRfY3RybChjbGllbnQsIGN0cmwpOworCQkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7CisJCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgeworCQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7CisJCQkJdHZwNTE1MF93cml0ZShjbGllbnQsIFRWUDUxNTBfQlJJR0hUX0NUTCwKKwkJCQkJICAgICAgZGVjb2Rlci0+YnJpZ2h0ID4+IDgpOworCQkJfQorCQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKKwkJCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCisJCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBwaWMtPmNvbnRyYXN0OworCQkJCXR2cDUxNTBfd3JpdGUoY2xpZW50LCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwKKwkJCQkJICAgICAgZGVjb2Rlci0+Y29udHJhc3QgPj4gOCk7CisJCQl9CisJCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7CisJCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLworCQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOworCQkJCXR2cDUxNTBfd3JpdGUoY2xpZW50LCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMLAorCQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA4KTsKKwkJCX0KKwkJCWlmIChkZWNvZGVyLT5odWUgIT0gcGljLT5odWUpIHsKKwkJCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCisJCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7CisJCQkJdHZwNTE1MF93cml0ZShjbGllbnQsIFRWUDUxNTBfSFVFX0NUTCwKKwkJCQkJICAgICAgKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA4KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlJMkMgQ2xpZW50ICYgRHJpdmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiKHVuc2V0KSIsCisJLmZsYWdzID0gSTJDX0NMSUVOVF9BTExPV19VU0UsCisJLmRyaXZlciA9ICZkcml2ZXIsCit9OworCitzdGF0aWMgaW50IHR2cDUxNTBfZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB0dnA1MTUwICpjb3JlOworCWludCBydjsKKworCWRwcmludGsoMSwKKwkJS0VSTl9JTkZPCisJCSJ0dnA1MTUwLmM6IGRldGVjdGluZyB0dnA1MTUwIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCisJCWFkZHJlc3MgPDwgMSk7CisKKwljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50X3RlbXBsYXRlLmFkZHIgPSBhZGRyZXNzOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkKKwkgICAgKGFkYXB0ZXIsCisJICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKworCWNvcmUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHZwNTE1MCksIEdGUF9LRVJORUwpOworCWlmIChjb3JlID09IDApIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChjb3JlLCAwLCBzaXplb2Yoc3RydWN0IHR2cDUxNTApKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjb3JlKTsKKworCXJ2ID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCWNvcmUtPm5vcm0gPSBWSURFT19NT0RFX0FVVE87CisJY29yZS0+aW5wdXQgPSAyOworCWNvcmUtPmVuYWJsZSA9IDE7CisJY29yZS0+YnJpZ2h0ID0gMzI3Njg7CisJY29yZS0+Y29udHJhc3QgPSAzMjc2ODsKKwljb3JlLT5odWUgPSAzMjc2ODsKKwljb3JlLT5zYXQgPSAzMjc2ODsKKworCWlmIChydikgeworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShjb3JlKTsKKwkJcmV0dXJuIHJ2OworCX0KKworCWlmIChkZWJ1ZyA+IDEpCisJCWR1bXBfcmVnKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dnA1MTUwX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlkcHJpbnRrKDEsCisJCUtFUk5fSU5GTworCQkidHZwNTE1MC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCisJCWFkYXB0ZXItPm5hbWUsIGFkYXB0ZXItPmlkKTsKKwlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZ0dnA1MTUwX2RldGVjdF9jbGllbnQpOworfQorCitzdGF0aWMgaW50IHR2cDUxNTBfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGVycjsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikgeworCQlyZXR1cm4gZXJyOworCX0KKworCWtmcmVlKGRlY29kZXIpOworCWtmcmVlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJ0dnA1MTUwIiwKKworCS8qIEZJWE1FICovCisJLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCisJLmZsYWdzID0gSTJDX0RGX05PVElGWSwKKworCS5hdHRhY2hfYWRhcHRlciA9IHR2cDUxNTBfYXR0YWNoX2FkYXB0ZXIsCisJLmRldGFjaF9jbGllbnQgPSB0dnA1MTUwX2RldGFjaF9jbGllbnQsCisKKwkuY29tbWFuZCA9IHR2cDUxNTBfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR2cDUxNTBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHR2cDUxNTBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0dnA1MTUwX2luaXQpOworbW9kdWxlX2V4aXQodHZwNTE1MF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MF9yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ1YzFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwX3JlZy5oCkBAIC0wLDAgKzEsMTczIEBACisjZGVmaW5lIFRWUDUxNTBfVkRfSU5fU1JDX1NFTF8xICAgICAgMHgwMCAvKiBWaWRlbyBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICMxICovCisjZGVmaW5lIFRWUDUxNTBfQU5BTF9DSExfQ1RMICAgICAgICAgMHgwMSAvKiBBbmFsb2cgY2hhbm5lbCBjb250cm9scyAqLworI2RlZmluZSBUVlA1MTUwX09QX01PREVfQ1RMICAgICAgICAgIDB4MDIgLyogT3BlcmF0aW9uIG1vZGUgY29udHJvbHMgKi8KKyNkZWZpbmUgVFZQNTE1MF9NSVNDX0NUTCAgICAgICAgICAgICAweDAzIC8qIE1pc2NlbGxhbmVvdXMgY29udHJvbHMgKi8KKyNkZWZpbmUgVFZQNTE1MF9BVVRPU1dfTVNLICAgICAgICAgICAweDA0IC8qIEF1dG9zd2l0Y2ggbWFzazogVFZQNTE1MEEgLyBUVlA1MTUwQU0gKi8KKworLyogUmVzZXJ2ZWQgMDVoICovCisKKyNkZWZpbmUgVFZQNTE1MF9DT0xPUl9LSUxfVEhTSF9DVEwgICAweDA2IC8qIENvbG9yIGtpbGxlciB0aHJlc2hvbGQgY29udHJvbCAqLworI2RlZmluZSBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMSAgICAgIDB4MDcgLyogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMSAqLworI2RlZmluZSBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMiAgICAgIDB4MDggLyogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMiAqLworI2RlZmluZSBUVlA1MTUwX0JSSUdIVF9DVEwgICAgICAgICAgIDB4MDkgLyogQnJpZ2h0bmVzcyBjb250cm9sICovCisjZGVmaW5lIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwgICAgICAgMHgwYSAvKiBDb2xvciBzYXR1cmF0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZQNTE1MF9IVUVfQ1RMICAgICAgICAgICAgICAweDBiIC8qIEh1ZSBjb250cm9sICovCisjZGVmaW5lIFRWUDUxNTBfQ09OVFJBU1RfQ1RMICAgICAgICAgMHgwYyAvKiBDb250cmFzdCBjb250cm9sICovCisjZGVmaW5lIFRWUDUxNTBfREFUQV9SQVRFX1NFTCAgICAgICAgMHgwZCAvKiBPdXRwdXRzIGFuZCBkYXRhIHJhdGVzIHNlbGVjdCAqLworI2RlZmluZSBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMyAgICAgIDB4MGUgLyogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMyAqLworI2RlZmluZSBUVlA1MTUwX0NPTkZfU0hBUkVEX1BJTiAgICAgIDB4MGYgLyogQ29uZmlndXJhdGlvbiBzaGFyZWQgcGlucyAqLworCisvKiBSZXNlcnZlZCAxMGggKi8KKworI2RlZmluZSBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX01TQiAgIDB4MTEgLyogQWN0aXZlIHZpZGVvIGNyb3BwaW5nIHN0YXJ0IE1TQiAqLworI2RlZmluZSBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX0xTQiAgIDB4MTIgLyogQWN0aXZlIHZpZGVvIGNyb3BwaW5nIHN0YXJ0IExTQiAqLworI2RlZmluZSBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9NU0IgIDB4MTMgLyogQWN0aXZlIHZpZGVvIGNyb3BwaW5nIHN0b3AgTVNCICovCisjZGVmaW5lIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RQX0xTQiAgMHgxNCAvKiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RvcCBMU0IgKi8KKyNkZWZpbmUgVFZQNTE1MF9HRU5MT0NLICAgICAgICAgICAgICAweDE1IC8qIEdlbmxvY2svUlRDICovCisjZGVmaW5lIFRWUDUxNTBfSE9SSVpfU1lOQ19TVEFSVCAgICAgMHgxNiAvKiBIb3Jpem9udGFsIHN5bmMgc3RhcnQgKi8KKworLyogUmVzZXJ2ZWQgMTdoICovCisKKyNkZWZpbmUgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUQVJUIDB4MTggLyogVmVydGljYWwgYmxhbmtpbmcgc3RhcnQgKi8KKyNkZWZpbmUgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUT1AgIDB4MTkgLyogVmVydGljYWwgYmxhbmtpbmcgc3RvcCAqLworI2RlZmluZSBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8xICAgMHgxYSAvKiBDaHJvbWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzEgKi8KKyNkZWZpbmUgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMiAgIDB4MWIgLyogQ2hyb21pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMyICovCisjZGVmaW5lIFRWUDUxNTBfSU5UX1JFU0VUX1JFR19CICAgICAweDFjIC8qIEludGVycnVwdCByZXNldCByZWdpc3RlciBCICovCisjZGVmaW5lIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQiAgICAweDFkIC8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgQiAqLworI2RlZmluZSBUVlA1MTUwX0lOVFRfQ09ORklHX1JFR19CICAgMHgxZSAvKiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiByZWdpc3RlciBCICovCisKKy8qIFJlc2VydmVkIDFGaC0yN2ggKi8KKworI2RlZmluZSBUVlA1MTUwX1ZJREVPX1NURCAgICAgICAgICAgMHgyOCAvKiBWaWRlbyBzdGFuZGFyZCAqLworCisvKiBSZXNlcnZlZCAyOWgtMmJoICovCisKKyNkZWZpbmUgVFZQNTE1MF9DQl9HQUlOX0ZBQ1QgICAgICAgIDB4MmMgLyogQ2IgZ2FpbiBmYWN0b3IgKi8KKyNkZWZpbmUgVFZQNTE1MF9DUl9HQUlOX0ZBQ1RPUiAgICAgIDB4MmQgLyogQ3IgZ2FpbiBmYWN0b3IgKi8KKyNkZWZpbmUgVFZQNTE1MF9NQUNST1ZJU0lPTl9PTl9DVFIgIDB4MmUgLyogTWFjcm92aXNpb24gb24gY291bnRlciAqLworI2RlZmluZSBUVlA1MTUwX01BQ1JPVklTSU9OX09GRl9DVFIgMHgyZiAvKiBNYWNyb3Zpc2lvbiBvZmYgY291bnRlciAqLworI2RlZmluZSBUVlA1MTUwX1JFVl9TRUxFQ1QgICAgICAgICAgMHgzMCAvKiByZXZpc2lvbiBzZWxlY3QgKFRWUDUxNTBBTTEgb25seSkgKi8KKworLyogUmVzZXJ2ZWQJMzFoLTdGaCAqLworCisjZGVmaW5lIFRWUDUxNTBfTVNCX0RFVl9JRCAgICAgICAgICAweDgwIC8qIE1TQiBvZiBkZXZpY2UgSUQgKi8KKyNkZWZpbmUgVFZQNTE1MF9MU0JfREVWX0lEICAgICAgICAgIDB4ODEgLyogTFNCIG9mIGRldmljZSBJRCAqLworI2RlZmluZSBUVlA1MTUwX1JPTV9NQUpPUl9WRVIgICAgICAgMHg4MiAvKiBST00gbWFqb3IgdmVyc2lvbiAqLworI2RlZmluZSBUVlA1MTUwX1JPTV9NSU5PUl9WRVIgICAgICAgMHg4MyAvKiBST00gbWlub3IgdmVyc2lvbiAqLworI2RlZmluZSBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTVNCICAgMHg4NCAvKiBWZXJ0aWNhbCBsaW5lIGNvdW50IE1TQiAqLworI2RlZmluZSBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTFNCICAgMHg4NSAvKiBWZXJ0aWNhbCBsaW5lIGNvdW50IExTQiAqLworI2RlZmluZSBUVlA1MTUwX0lOVF9TVEFUVVNfUkVHX0IgICAgMHg4NiAvKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgVFZQNTE1MF9JTlRfQUNUSVZFX1JFR19CICAgIDB4ODcgLyogSW50ZXJydXB0IGFjdGl2ZSByZWdpc3RlciBCICovCisjZGVmaW5lIFRWUDUxNTBfU1RBVFVTX1JFR18xICAgICAgICAweDg4IC8qIFN0YXR1cyByZWdpc3RlciAjMSAqLworI2RlZmluZSBUVlA1MTUwX1NUQVRVU19SRUdfMiAgICAgICAgMHg4OSAvKiBTdGF0dXMgcmVnaXN0ZXIgIzIgKi8KKyNkZWZpbmUgVFZQNTE1MF9TVEFUVVNfUkVHXzMgICAgICAgIDB4OGEgLyogU3RhdHVzIHJlZ2lzdGVyICMzICovCisjZGVmaW5lIFRWUDUxNTBfU1RBVFVTX1JFR180ICAgICAgICAweDhiIC8qIFN0YXR1cyByZWdpc3RlciAjNCAqLworI2RlZmluZSBUVlA1MTUwX1NUQVRVU19SRUdfNSAgICAgICAgMHg4YyAvKiBTdGF0dXMgcmVnaXN0ZXIgIzUgKi8KKy8qIFJlc2VydmVkCThEaC04RmggKi8KKyNkZWZpbmUgVFZQNTE1MF9DQ19EQVRBX1JFRzEgICAgICAgIDB4OTAgLyogQ2xvc2VkIGNhcHRpb24gZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9DQ19EQVRBX1JFRzIgICAgICAgIDB4OTEgLyogQ2xvc2VkIGNhcHRpb24gZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9DQ19EQVRBX1JFRzMgICAgICAgIDB4OTIgLyogQ2xvc2VkIGNhcHRpb24gZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9DQ19EQVRBX1JFRzQgICAgICAgIDB4OTMgLyogQ2xvc2VkIGNhcHRpb24gZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9XU1NfREFUQV9SRUcxICAgICAgIDBYOTQgLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfUkVHMiAgICAgICAwWDk1IC8qIFdTUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1dTU19EQVRBX1JFRzMgICAgICAgMFg5NiAvKiBXU1MgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9XU1NfREFUQV9SRUc0ICAgICAgIDBYOTcgLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfUkVHNSAgICAgICAwWDk4IC8qIFdTUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1dTU19EQVRBX1JFRzYgICAgICAgMFg5OSAvKiBXU1MgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcxICAgICAgIDB4OWEgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHMiAgICAgICAweDliIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzMgICAgICAgMHg5YyAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUc0ICAgICAgIDB4OWQgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHNSAgICAgICAweDllIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzYgICAgICAgMHg5ZiAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUc3ICAgICAgIDB4YTAgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHOCAgICAgICAweGExIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzkgICAgICAgMHhhMiAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcxMCAgICAgIDB4YTMgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTEgICAgICAweGE0IC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEyICAgICAgMHhhNSAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcxMyAgICAgIDB4YTYgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzEgICAgICAweGE3IC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHMiAgICAgIDB4YTggLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUczICAgICAgMHhhOSAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzQgICAgICAweGFhIC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNSAgICAgIDB4YWIgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUc2ICAgICAgMHhhYyAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzcgICAgICAweGFkIC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHOCAgICAgIDB4YWUgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUc5ICAgICAgMHhhZiAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVkJJX0ZJRk9fUkVBRF9EQVRBICAweGIwIC8qIFZCSSBGSUZPIHJlYWQgZGF0YSAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzEgICAgMHhiMSAvKiBUZWxldGV4dCBmaWx0ZXIgMSAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzIgICAgMHhiMiAvKiBUZWxldGV4dCBmaWx0ZXIgMSAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzMgICAgMHhiMyAvKiBUZWxldGV4dCBmaWx0ZXIgMSAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzQgICAgMHhiNCAvKiBUZWxldGV4dCBmaWx0ZXIgMSAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzUgICAgMHhiNSAvKiBUZWxldGV4dCBmaWx0ZXIgMSAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzEgICAgMHhiNiAvKiBUZWxldGV4dCBmaWx0ZXIgMiAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzIgICAgMHhiNyAvKiBUZWxldGV4dCBmaWx0ZXIgMiAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzMgICAgMHhiOCAvKiBUZWxldGV4dCBmaWx0ZXIgMiAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzQgICAgMHhiOSAvKiBUZWxldGV4dCBmaWx0ZXIgMiAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzUgICAgMHhiYSAvKiBUZWxldGV4dCBmaWx0ZXIgMiAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF9FTkEgICAgMHhiYiAvKiBUZWxldGV4dCBmaWx0ZXIgZW5hYmxlICovCisvKiBSZXNlcnZlZAlCQ2gtQkZoICovCisjZGVmaW5lIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQSAgICAweGMwIC8qIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQSAqLworI2RlZmluZSBUVlA1MTUwX0lOVF9FTkFCTEVfUkVHX0EgICAgMHhjMSAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgVFZQNTE1MF9JTlRfQ09ORiAgICAgICAgICAgIDB4YzIgLyogSW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVFZQNTE1MF9WRFBfQ09ORl9SQU1fREFUQSAgIDB4YzMgLyogVkRQIGNvbmZpZ3VyYXRpb24gUkFNIGRhdGEgKi8KKyNkZWZpbmUgVFZQNTE1MF9DT05GX1JBTV9BRERSX0xPVyAgIDB4YzQgLyogQ29uZmlndXJhdGlvbiBSQU0gYWRkcmVzcyBsb3cgYnl0ZSAqLworI2RlZmluZSBUVlA1MTUwX0NPTkZfUkFNX0FERFJfSElHSCAgMHhjNSAvKiBDb25maWd1cmF0aW9uIFJBTSBhZGRyZXNzIGhpZ2ggYnl0ZSAqLworI2RlZmluZSBUVlA1MTUwX1ZEUF9TVEFUVVNfUkVHICAgICAgMHhjNiAvKiBWRFAgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFRWUDUxNTBfRklGT19XT1JEX0NPVU5UICAgICAweGM3IC8qIEZJRk8gd29yZCBjb3VudCAqLworI2RlZmluZSBUVlA1MTUwX0ZJRk9fSU5UX1RIUkVTSE9MRCAgMHhjOCAvKiBGSUZPIGludGVycnVwdCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgVFZQNTE1MF9GSUZPX1JFU0VUICAgICAgICAgIDB4YzkgLyogRklGTyByZXNldCAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTlVNQkVSX0lOVCAgICAgMHhjYSAvKiBMaW5lIG51bWJlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVFZQNTE1MF9QSVhfQUxJR05fUkVHX0xPVyAgIDB4Y2IgLyogUGl4ZWwgYWxpZ25tZW50IHJlZ2lzdGVyIGxvdyBieXRlICovCisjZGVmaW5lIFRWUDUxNTBfUElYX0FMSUdOX1JFR19ISUdIICAweGNjIC8qIFBpeGVsIGFsaWdubWVudCByZWdpc3RlciBoaWdoIGJ5dGUgKi8KKyNkZWZpbmUgVFZQNTE1MF9GSUZPX09VVF9DVFJMICAgICAgIDB4Y2QgLyogRklGTyBvdXRwdXQgY29udHJvbCAqLworLyogUmVzZXJ2ZWQJQ0VoICovCisjZGVmaW5lIFRWUDUxNTBfRlVMTF9GSUVMRF9FTkFfMSAgICAweGNmIC8qIEZ1bGwgZmllbGQgZW5hYmxlIDEgKi8KKyNkZWZpbmUgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8yICAgIDB4ZDAgLyogRnVsbCBmaWVsZCBlbmFibGUgMiAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMSAgICAgMHhkMSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yICAgICAweGQyIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMgICAgIDB4ZDMgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNCAgICAgMHhkNCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR181ICAgICAweGQ1IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzYgICAgIDB4ZDYgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNyAgICAgMHhkNyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR184ICAgICAweGQ4IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzkgICAgIDB4ZDkgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTAgICAgMHhkYSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMSAgICAweGRiIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzEyICAgIDB4ZGMgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTMgICAgMHhkZCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNCAgICAweGRlIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE1ICAgIDB4ZGYgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTYgICAgMHhlMCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNyAgICAweGUxIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE4ICAgIDB4ZTIgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTkgICAgMHhlMyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMCAgICAweGU0IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIxICAgIDB4ZTUgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjIgICAgMHhlNiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMyAgICAweGU3IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI0ICAgIDB4ZTggLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjUgICAgMHhlOSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yNyAgICAweGVhIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI4ICAgIDB4ZWIgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjkgICAgMHhlYyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMCAgICAweGVkIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMxICAgIDB4ZWUgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzIgICAgMHhlZiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMyAgICAweGYwIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM0ICAgIDB4ZjEgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzUgICAgMHhmMiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNiAgICAweGYzIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM3ICAgIDB4ZjQgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzggICAgMHhmNSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zOSAgICAweGY2IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQwICAgIDB4ZjcgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDEgICAgMHhmOCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180MiAgICAweGY5IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQzICAgIDB4ZmEgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDQgICAgMHhmYiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfRlVMTF9GSUVMRF9NT0RFX1JFRyAweGZjIC8qIEZ1bGwgZmllbGQgbW9kZSByZWdpc3RlciAqLworLyogUmVzZXJ2ZWQJRkRoLUZGaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IGQ2NzljYTIuLjQxMzQ1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCX0KIAljYXNlIFZJRElPQ0dGUkVROiAvKiAgZ2V0IGZyZXF1ZW5jeSAgKi8KIAl7Ci0JCWludCAqZnJlcSA9IGFyZzsKKwkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKIAogCQlmcmVxMi50dW5lciA9IDA7CiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRlJFUVVFTkNZLCAmZnJlcTIpOwpAQCAtNzIwLDcgKzcyMCw3IEBACiAJfQogCWNhc2UgVklESU9DU0ZSRVE6IC8qICBzZXQgZnJlcXVlbmN5ICAqLwogCXsKLQkJaW50ICpmcmVxID0gYXJnOworCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwogCiAJCWZyZXEyLnR1bmVyID0gMDsKIAkJZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GUkVRVUVOQ1ksICZmcmVxMik7CkBAIC05NjAsNyArOTYwLDcgQEAKIAkJZm10LT5zdGFydFsxXSAgICAgICAgID0gZm10Mi0+Zm10LnZiaS5zdGFydFsxXTsKIAkJZm10LT5jb3VudFsxXSAgICAgICAgID0gZm10Mi0+Zm10LnZiaS5jb3VudFsxXTsKIAkJZm10LT5mbGFncyAgICAgICAgICAgID0gZm10Mi0+Zm10LnZiaS5mbGFncyAmIDB4MDM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ1NWQklGTVQ6CiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKaW5kZXggNTc0YjhlMy4uYWNmZDNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkJZGF0YSxzaXplLGRtYS0+bnJfcGFnZXMpOwogCiAJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotICAgICAgICBlcnIgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LGN1cnJlbnQtPm1tLAorCWVyciA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsY3VycmVudC0+bW0sCiAJCQkgICAgIGRhdGEgJiBQQUdFX01BU0ssIGRtYS0+bnJfcGFnZXMsCiAJCQkgICAgIHJ3ID09IFJFQUQsIDEsIC8qIGZvcmNlICovCiAJCQkgICAgIGRtYS0+cGFnZXMsIE5VTEwpOwpAQCAtNzUwLDkgKzc1MCw5IEBACiB7CiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAgIGludCByZXR2YWw7CisJaW50IHJldHZhbDsKIAotICAgICAgICAvKiBzZXR1cCBzdHVmZiAqLworCS8qIHNldHVwIHN0dWZmICovCiAJcmV0dmFsID0gLUVOT01FTTsKIAlxLT5yZWFkX2J1ZiA9IHZpZGVvYnVmX2FsbG9jKHEtPm1zaXplKTsKIAlpZiAoTlVMTCA9PSBxLT5yZWFkX2J1ZikKQEAgLTc2MCwxOCArNzYwLDE4IEBACiAKIAlxLT5yZWFkX2J1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfVVNFUlBUUjsKIAlxLT5yZWFkX2J1Zi0+YmFkZHIgID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKLSAgICAgICAgcS0+cmVhZF9idWYtPmJzaXplICA9IGNvdW50OworCXEtPnJlYWRfYnVmLT5ic2l6ZSAgPSBjb3VudDsKIAlmaWVsZCA9IHZpZGVvYnVmX25leHRfZmllbGQocSk7CiAJcmV0dmFsID0gcS0+b3BzLT5idWZfcHJlcGFyZShxLHEtPnJlYWRfYnVmLGZpZWxkKTsKIAlpZiAoMCAhPSByZXR2YWwpCiAJCWdvdG8gZG9uZTsKIAotICAgICAgICAvKiBzdGFydCBjYXB0dXJlICYgd2FpdCAqLworCS8qIHN0YXJ0IGNhcHR1cmUgJiB3YWl0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+aXJxbG9jayxmbGFncyk7CiAJcS0+b3BzLT5idWZfcXVldWUocSxxLT5yZWFkX2J1Zik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKLSAgICAgICAgcmV0dmFsID0gdmlkZW9idWZfd2FpdG9uKHEtPnJlYWRfYnVmLDAsMCk7Ci0gICAgICAgIGlmICgwID09IHJldHZhbCkgeworCXJldHZhbCA9IHZpZGVvYnVmX3dhaXRvbihxLT5yZWFkX2J1ZiwwLDApOworCWlmICgwID09IHJldHZhbCkgewogCQl2aWRlb2J1Zl9kbWFfcGNpX3N5bmMocS0+cGNpLCZxLT5yZWFkX2J1Zi0+ZG1hKTsKIAkJaWYgKFNUQVRFX0VSUk9SID09IHEtPnJlYWRfYnVmLT5zdGF0ZSkKIAkJCXJldHZhbCA9IC1FSU87CkBAIC04MjgsNyArODI4LDcgQEAKIAl9CiAKIAkvKiB3YWl0IHVudGlsIGNhcHR1cmUgaXMgZG9uZSAqLwotICAgICAgICByZXR2YWwgPSB2aWRlb2J1Zl93YWl0b24ocS0+cmVhZF9idWYsIG5vbmJsb2NraW5nLCAxKTsKKwlyZXR2YWwgPSB2aWRlb2J1Zl93YWl0b24ocS0+cmVhZF9idWYsIG5vbmJsb2NraW5nLCAxKTsKIAlpZiAoMCAhPSByZXR2YWwpCiAJCWdvdG8gZG9uZTsKIAl2aWRlb2J1Zl9kbWFfcGNpX3N5bmMocS0+cGNpLCZxLT5yZWFkX2J1Zi0+ZG1hKTsKQEAgLTEwOTYsNyArMTA5Niw3IEBACiAKIAlkcHJpbnRrKDMsIm5vcGFnZTogZmF1bHQgQCAlMDhseCBbdm1hICUwOGx4LSUwOGx4XVxuIiwKIAkJdmFkZHIsdm1hLT52bV9zdGFydCx2bWEtPnZtX2VuZCk7Ci0gICAgICAgIGlmICh2YWRkciA+IHZtYS0+dm1fZW5kKQorCWlmICh2YWRkciA+IHZtYS0+dm1fZW5kKQogCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfVVNFUik7CiAJaWYgKCFwYWdlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmMjg2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiB3bTg3NzUgLSBkcml2ZXIgdmVyc2lvbiAwLjAuMQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBVbGYgRWtsdW5kIDxpdnR2IGF0IGVrbHVuZC50bz4KKyAqCisgKiBCYXNlZCBvbiBzYWE3MTE1IGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigid204Nzc1IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVWxmIEVrbHVuZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIHdtODc3NV9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJICAgICAgIGkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHdtODc3NV9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7IFwKKwlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkgICAgICAgaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM2ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKKworSTJDX0NMSUVOVF9JTlNNT0Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2VudW0geworCVI3ID0gNywgUjExID0gMTEsCisJUjEyLCBSMTMsIFIxNCwgUjE1LCBSMTYsIFIxNywgUjE4LCBSMTksIFIyMCwgUjIxLCBSMjMgPSAyMywKKwlUT1RfUkVHUworfTsKKworc3RydWN0IHdtODc3NV9zdGF0ZSB7CisJdTggaW5wdXQ7CQkvKiBMYXN0IHNlbGVjdGVkIGlucHV0ICgwLTB4ZikgKi8KKwl1OCBtdXRlZDsKK307CisKK3N0YXRpYyBpbnQgd204Nzc1X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsIHUxNiB2YWwpCit7CisJaW50IGk7CisKKwlpZiAocmVnIDwgMCB8fCByZWcgPj0gVE9UX1JFR1MpIHsKKwkJd204Nzc1X2VycigiSW52YWxpZCByZWdpc3RlciBSJWRcbiIsIHJlZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgKHJlZyA8PCAxKSB8CisJCQkJCSh2YWwgPj4gOCksIHZhbCAmIDB4ZmYpID09IDApIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXdtODc3NV9lcnIoIkkyQzogY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCB2YWwsIHJlZyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHdtODc3NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd204Nzc1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCAqaW5wdXQgPSBhcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQVVEQ19TRVRfSU5QVVQ6CisJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgwYzApOworCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTQsIDB4MWQ0KTsKKwkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE1LCAweDFkNCk7CisKKwkJaWYgKCppbnB1dCA9PSBBVURJT19SQURJTykgeworCQkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDEwOCk7CisJCQlzdGF0ZS0+aW5wdXQgPSA4OworCQkJc3RhdGUtPm11dGVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgqaW5wdXQgPT0gQVVESU9fTVVURSkgeworCQkJc3RhdGUtPm11dGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgqaW5wdXQgPT0gQVVESU9fVU5NVVRFKSB7CisJCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTAwICsgc3RhdGUtPmlucHV0KTsKKwkJCXN0YXRlLT5tdXRlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCQkvKiBBbGwgb3RoZXIgaW5wdXRzLi4uICovCisJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDIpOworCQlzdGF0ZS0+aW5wdXQgPSAyOworCQlzdGF0ZS0+bXV0ZWQgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CisJCXdtODc3NV9pbmZvKCJJbnB1dDogJXMlc1xuIiwKKwkJCSAgICBzdGF0ZS0+aW5wdXQgPT0gOCA/ICJyYWRpbyIgOiAiZGVmYXVsdCIsCisJCQkgICAgc3RhdGUtPm11dGVkID8gIiAobXV0ZWQpIiA6ICIiKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJLyogSWYgSSByZW1vdmUgdGhpcywgdGhlbiBpdCBjYW4gaGFwcGVuIHRoYXQgSSBoYXZlIG5vCisJCSAgIHNvdW5kIHRoZSBmaXJzdCB0aW1lIEkgdHVuZSBmcm9tIHN0YXRpYyB0byBhIHZhbGlkIGNoYW5uZWwuCisJCSAgIEl0J3MgZGlmZmljdWx0IHRvIHJlcHJvZHVjZSBhbmQgaXMgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkCisJCSAgIHRvIHRoZSB6ZXJvIGNyb3NzIGRldGVjdCBjaXJjdWl0LiAqLworCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MGMwKTsKKwkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE0LCAweDFkNCk7CisJCXdtODc3NV93cml0ZShjbGllbnQsIFIxNSwgMHgxZDQpOworCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTAwICsgc3RhdGUtPmlucHV0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworCisvKgorICogR2VuZXJpYyBpMmMgcHJvYmUKKyAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKKyAqLworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcjsKKworc3RhdGljIGludCB3bTg3NzVfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdtODc3NV9zdGF0ZSAqc3RhdGU7CisKKwkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChjbGllbnQsIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyOworCWNsaWVudC0+ZmxhZ3MgPSBJMkNfQ0xJRU5UX0FMTE9XX1VTRTsKKwlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgIndtODc3NSIpOworCisJd204Nzc1X2luZm8oImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NzVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RhdGUtPmlucHV0ID0gMjsKKwlzdGF0ZS0+bXV0ZWQgPSAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKKworCS8qIGluaXRpYWxpemUgd204Nzc1ICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIzLCAweDAwMCk7CS8qIFJFU0VUICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjcsIDB4MDAwKTsJLyogRGlzYWJsZSB6ZXJvIGNyb3NzIGRldGVjdCB0aW1lb3V0ICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjExLCAweDAyMSk7CS8qIExlZnQganVzdGlmaWVkLCAyNC1iaXQgbW9kZSAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIxMiwgMHgxMDIpOwkvKiBNYXN0ZXIgbW9kZSwgY2xvY2sgcmF0aW8gMjU2ZnMgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTMsIDB4MDAwKTsJLyogUG93ZXJlZCB1cCAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIxNCwgMHgxZDQpOwkvKiBBREMgZ2FpbiArMi41ZEIsIGVuYWJsZSB6ZXJvIGNyb3NzICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE1LCAweDFkNCk7CS8qIEFEQyBnYWluICsyLjVkQiwgZW5hYmxlIHplcm8gY3Jvc3MgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTYsIDB4MWJmKTsJLyogQUxDIFN0ZXJlbywgQUxDIHRhcmdldCBsZXZlbCAtMWRCIEZTICovCisJLyogbWF4IGdhaW4gKzhkQiAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIxNywgMHgxODUpOwkvKiBFbmFibGUgZ2FpbiBjb250cm9sLCB1c2UgemVybyBjcm9zcyAqLworCS8qIGRldGVjdGlvbiwgQUxDIGhvbGQgdGltZSA0Mi42IG1zICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE4LCAweDBhMik7CS8qIEFMQyBnYWluIHJhbXAgdXAgZGVsYXkgMzQgcywgKi8KKwkvKiBBTEMgZ2FpbiByYW1wIGRvd24gZGVsYXkgMzMgbXMgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTksIDB4MDA1KTsJLyogRW5hYmxlIG5vaXNlIGdhdGUsIHRocmVzaG9sZCAtNzJkQmZzICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIwLCAweDA3YSk7CS8qIFRyYW5zaWVudCB3aW5kb3cgNG1zLCBsb3dlciBQR0EgZ2FpbiAqLworCS8qIGxpbWl0IC0xZEIgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTAyKTsJLyogTFJCT1RIID0gMSwgdXNlIGlucHV0IDIuICovCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3NV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisjaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRworCWlmIChhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCisjZWxzZQorCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9CVDg0OCkKKyNlbmRpZgorCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHdtODc3NV9hdHRhY2gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3NV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKSB7CisJCXJldHVybiBlcnI7CisJfQorCWtmcmVlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ3bTg3NzUiLAorCisJLmlkID0gSTJDX0RSSVZFUklEX1dNODc3NSwKKwkuZmxhZ3MgPSBJMkNfREZfTk9USUZZLAorCisJLmF0dGFjaF9hZGFwdGVyID0gd204Nzc1X3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ID0gd204Nzc1X2RldGFjaCwKKwkuY29tbWFuZCA9IHdtODc3NV9jb21tYW5kLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCB3bTg3NzVfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd204Nzc1X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3bTg3NzVfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQod204Nzc1X2NsZWFudXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjAxNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDE2LmMKaW5kZXggZDQ3NDBhOC4uNGVkODk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDE2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDE2LmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2RlZmluZSBaUjAxNl9WRVJTSU9OICJ2MC43IgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCmluZGV4IDEzYjFlN2IuLjAxNDQ1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCkBAIC0yNiw3ICsyNiw2IEBACiAKICNkZWZpbmUgWlIwNTBfVkVSU0lPTiAidjAuNy4xIgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA2MC5jCmluZGV4IGI1MGRjNDAuLjEyOTc0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA2MC5jCkBAIC0yNiw3ICsyNiw2IEBACiAKICNkZWZpbmUgWlIwNjBfVkVSU0lPTiAidjAuNyIKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA3OTBhMjkzLi43NDAyMjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtNDcsNyArNDcsNiBAQAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC05Miw5ICs5MSw5IEBACiAgKiAgUHVibGljIGRhdGEuLi4KICAqLwogaW50IG1wdF9sYW5faW5kZXggPSAtMTsKLWludCBtcHRfc3RtX2luZGV4ID0gLTE7CitzdGF0aWMgaW50IG1wdF9zdG1faW5kZXggPSAtMTsKIAotc3RydWN0IHByb2NfZGlyX2VudHJ5ICptcHRfcHJvY19yb290X2RpcjsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm1wdF9wcm9jX3Jvb3RfZGlyOwogCiAjZGVmaW5lIFdIT0lOSVRfVU5LTk9XTgkJMHhBQQogCkBAIC02MjcyLDcgKzYyNzEsNiBAQAogRVhQT1JUX1NZTUJPTChtcHRfc3VzcGVuZCk7CiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woaW9jX2xpc3QpOwotRVhQT1JUX1NZTUJPTChtcHRfcHJvY19yb290X2Rpcik7CiBFWFBPUlRfU1lNQk9MKG1wdF9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKG1wdF9kZXJlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0wobXB0X2V2ZW50X3JlZ2lzdGVyKTsKQEAgLTYyOTAsNyArNjI4OCw2IEBACiBFWFBPUlRfU1lNQk9MKG1wdF9HZXRJb2NTdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKG1wdF9wcmludF9pb2Nfc3VtbWFyeSk7CiBFWFBPUlRfU1lNQk9MKG1wdF9sYW5faW5kZXgpOwotRVhQT1JUX1NZTUJPTChtcHRfc3RtX2luZGV4KTsKIEVYUE9SVF9TWU1CT0wobXB0X0hhcmRSZXNldEhhbmRsZXIpOwogRVhQT1JUX1NZTUJPTChtcHRfY29uZmlnKTsKIEVYUE9SVF9TWU1CT0wobXB0X3Rvb2xib3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCBlN2VmZWI3Li44YWQyNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNDksNyArNDksNiBAQAogI2RlZmluZSBNUFRCQVNFX0hfSU5DTFVERUQKIC8qey09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEwMDcsMTAgKzEwMDYsOCBAQAogICogIFB1YmxpYyBkYXRhIGRlY2wncy4uLgogICovCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZAkgIGlvY19saXN0OwotZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqbXB0X3Byb2Nfcm9vdF9kaXI7CiAKIGV4dGVybiBpbnQJCSAgbXB0X2xhbl9pbmRleDsJLyogbmVlZGVkIGJ5IG1wdGxhbi5jICovCi1leHRlcm4gaW50CQkgIG1wdF9zdG1faW5kZXg7CS8qIG5lZWRlZCBieSBtcHRzdG0uYyAqLwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAjZW5kaWYJCS8qIH0gX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKaW5kZXggY2IyZDU5ZC4uNjAyMTM4ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtNDUsNyArNDUsNiBAQAogKi8KIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmgKaW5kZXggMjg3NTRhOS4uNTE4OTk2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIE1QVENUTF9IX0lOQ0xVREVECiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKLSNpbmNsdWRlICJsaW51eC92ZXJzaW9uLmgiCiAKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmgKaW5kZXggNzUwZTM0My4uMzcyNmVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5oCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogLy8gI2luY2x1ZGUgPGxpbnV4L3RyZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jIGIvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYwppbmRleCA5YzRkZDY4Li5iYzJiNzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X25leHVzLmMKaW5kZXggMTY1ZjM0MC4uNGJiNDYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYworKysgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaCBiL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmgKaW5kZXggZWNjZTRmZi4uZDdlMjBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaAorKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbS5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwppbmRleCBjNGExOWQyLi4wODA3YzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwpAQCAtMjAsNyArMjAsNiBAQAogICogCS0gUGx1Z2dlZCBtZW1vcnkgbGVhayBpbiBjZmlfc3RhYV93cml0ZXYoKS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwppbmRleCBkZTQ4YjM1Li42NjZjY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKQEAgLTgyLDcgKzgyLDYgQEAKICAqICAgICAgICogQ29tYiB0aGUgaW5pdCByb3V0aW5lLiAgSXQncyBzdGlsbCBhIGJpdCBjbHVkZ3kgb24gYSBmZXcgdGhpbmdzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMgYi9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKaW5kZXggYzBkYWY1OC4uNjBhNmU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9lYm9ueS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYyBiL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKaW5kZXggNmU1NTliYy4uYzIyMzUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L29jb3RlYS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYyBiL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKaW5kZXggNWMxN2JjYS4uZjQ2YmVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3dhbG51dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDNjYWZjZGYuLjljNTk0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogZml4bWU6IHRoaXMgaXMgdWdseSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCmluZGV4IDA1NmRmYzEuLmEzYzdmZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqCTEwLTA2LTIwMDIgVEcJMTI4SyBjYXJkIHN1cHBvcnQgYWRkZWQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCBjYzM4ZmEwLi5mNjdkNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTEyLDYgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3JmZF9mdGwuYyBiL2RyaXZlcnMvbXRkL3JmZF9mdGwuYwppbmRleCAwNDFlZTU5Li4wYWI4ZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9yZmRfZnRsLmMKKysrIGIvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL2Jsa3RyYW5zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggMjRmMTY5MS4uNWM2OWQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC00NDcsNyArNDQ3LDcgQEAKIAogY29uZmlnIFNHSV9JT0MzX0VUSAogCWJvb2wgIlNHSSBJT0MzIEV0aGVybmV0IgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIFBDSSAmJiBTR0lfSVAyNyAmJiBCUk9LRU4KKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBQQ0kgJiYgU0dJX0lQMjcKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgTUlJCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCAwZWUzZTI3Li5jNTM4NDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTI5LDggKzI4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJiNDQiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjAuOTUiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiQXVnIDMsIDIwMDQiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC45NiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJOb3YgOCwgMjAwNSIKIAogI2RlZmluZSBCNDRfREVGX01TR19FTkFCTEUJICBcCiAJKE5FVElGX01TR19EUlYJCXwgXApAQCAtMTAyLDE0ICsxMDEsMTYgQEAKIHN0YXRpYyB2b2lkIGI0NF9oYWx0KHN0cnVjdCBiNDQgKik7CiBzdGF0aWMgdm9pZCBiNDRfaW5pdF9yaW5ncyhzdHJ1Y3QgYjQ0ICopOwogc3RhdGljIHZvaWQgYjQ0X2luaXRfaHcoc3RydWN0IGI0NCAqKTsKLXN0YXRpYyBpbnQgYjQ0X3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi1zdGF0aWMgdm9pZCBiNDRfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgZG1hX2Rlc2NfYWxpZ25fbWFzazsKIHN0YXRpYyBpbnQgZG1hX2Rlc2Nfc3luY19zaXplOwogCitzdGF0aWMgY29uc3QgY2hhciBiNDRfZ3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0geworI2RlZmluZSBfQjQ0KHguLi4pCSMgeCwKK0I0NF9TVEFUX1JFR19ERUNMQVJFCisjdW5kZWYgX0I0NAorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGI0NF9zeW5jX2RtYV9kZXNjX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90IGRtYV9iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCkBAIC01MDIsNyArNTAzLDEwIEBACiAJZm9yIChyZWcgPSBCNDRfVFhfR09PRF9POyByZWcgPD0gQjQ0X1RYX1BBVVNFOyByZWcgKz0gNFVMKSB7CiAJCSp2YWwrKyArPSBicjMyKGJwLCByZWcpOwogCX0KLQl2YWwgPSAmYnAtPmh3X3N0YXRzLnJ4X2dvb2Rfb2N0ZXRzOworCisJLyogUGFkICovCisJcmVnICs9IDgqNFVMOworCiAJZm9yIChyZWcgPSBCNDRfUlhfR09PRF9POyByZWcgPD0gQjQ0X1JYX05QQVVTRTsgcmVnICs9IDRVTCkgewogCQkqdmFsKysgKz0gYnIzMihicCwgcmVnKTsKIAl9CkBAIC02NTMsNyArNjU3LDcgQEAKIAogCS8qIEhhcmR3YXJlIGJ1ZyB3b3JrLWFyb3VuZCwgdGhlIGNoaXAgaXMgdW5hYmxlIHRvIGRvIFBDSSBETUEKIAkgICB0by9mcm9tIGFueXRoaW5nIGFib3ZlIDFHQiA6LSggKi8KLQlpZihtYXBwaW5nK1JYX1BLVF9CVUZfU1ogPiBCNDRfRE1BX01BU0spIHsKKwlpZiAobWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBCNDRfRE1BX01BU0spIHsKIAkJLyogU2lnaC4uLiAqLwogCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC02NjMsNyArNjY3LDcgQEAKIAkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsCiAJCQkJCSBSWF9QS1RfQlVGX1NaLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYobWFwcGluZytSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChtYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IEI0NF9ETUFfTUFTSykgewogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtODkwLDExICs4OTQsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBpc3RhdCwgaW1hc2s7CiAJaW50IGhhbmRsZWQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZicC0+bG9jayk7CiAKIAlpc3RhdCA9IGJyMzIoYnAsIEI0NF9JU1RBVCk7CiAJaW1hc2sgPSBicjMyKGJwLCBCNDRfSU1BU0spOwpAQCAtOTA1LDYgKzkwOCwxMiBAQAogCWlzdGF0ICY9IGltYXNrOwogCWlmIChpc3RhdCkgewogCQloYW5kbGVkID0gMTsKKworCQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsYXRlIGludGVycnVwdC5cbiIsIGRldi0+bmFtZSk7CisJCQlnb3RvIGlycV9hY2s7CisJCX0KKwogCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CiAJCQkvKiBOT1RFOiBUaGVzZSB3cml0ZXMgYXJlIHBvc3RlZCBieSB0aGUgcmVhZGJhY2sgb2YKIAkJCSAqICAgICAgIHRoZSBJU1RBVCByZWdpc3RlciBiZWxvdy4KQEAgLTkxNywxMCArOTI2LDExIEBACiAJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJfQogCitpcnFfYWNrOgogCQlidzMyKGJwLCBCNDRfSVNUQVQsIGlzdGF0KTsKIAkJYnIzMihicCwgQjQ0X0lTVEFUKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmYnAtPmxvY2spOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC05NDgsNiArOTU4LDcgQEAKIHsKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKmJvdW5jZV9za2I7CisJaW50IHJjID0gTkVUREVWX1RYX09LOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAl1MzIgbGVuLCBlbnRyeSwgY3RybDsKIApAQCAtOTU3LDI5ICs5NjgsMjggQEAKIAkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwogCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTChicCkgPCAxKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmKG1hcHBpbmcrbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJaWYgKG1hcHBpbmcgKyBsZW4gPiBCNDRfRE1BX01BU0spIHsKIAkJLyogQ2hpcCBjYW4ndCBoYW5kbGUgRE1BIHRvL2Zyb20gPjFHQiwgdXNlIGJvdW5jZSBidWZmZXIgKi8KIAkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQlib3VuY2Vfc2tiID0gX19kZXZfYWxsb2Nfc2tiKFRYX1BLVF9CVUZfU1osCiAJCQkJCSAgICAgR0ZQX0FUT01JQ3xHRlBfRE1BKTsKIAkJaWYgKCFib3VuY2Vfc2tiKQotCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQkJZ290byBlcnJfb3V0OwogCiAJCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgYm91bmNlX3NrYi0+ZGF0YSwKIAkJCQkJIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmKG1hcHBpbmcrbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLAogCQkJCQkgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KGJvdW5jZV9za2IpOwotCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAKIAkJbWVtY3B5KHNrYl9wdXQoYm91bmNlX3NrYiwgbGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CkBAIC0xMDE5LDExICsxMDI5LDE2IEBACiAJaWYgKFRYX0JVRkZTX0FWQUlMKGJwKSA8IDEpCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwotCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKCZicC0+bG9jayk7CisKKwlyZXR1cm4gcmM7CisKK2Vycl9vdXQ6CisJcmMgPSBORVRERVZfVFhfQlVTWTsKKwlnb3RvIG91dF91bmxvY2s7CiB9CiAKIHN0YXRpYyBpbnQgYjQ0X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCkBAIC0xMDk3LDggKzExMTIsNyBAQAogICoKICAqIFRoZSBjaGlwIGhhcyBiZWVuIHNodXQgZG93biBhbmQgdGhlIGRyaXZlciBkZXRhY2hlZCBmcm9tCiAgKiB0aGUgbmV0d29ya2luZywgc28gbm8gaW50ZXJydXB0cyBvciBuZXcgdHggcGFja2V0cyB3aWxsCi0gKiBlbmQgdXAgaW4gdGhlIGRyaXZlci4gIGJwLT5sb2NrIGlzIG5vdCBoZWxkIGFuZCB3ZSBhcmUgbm90Ci0gKiBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgdGh1cyBtYXkgc2xlZXAuCisgKiBlbmQgdXAgaW4gdGhlIGRyaXZlci4KICAqLwogc3RhdGljIHZvaWQgYjQ0X2luaXRfcmluZ3Moc3RydWN0IGI0NCAqYnApCiB7CkBAIC0xMTcwLDE2ICsxMTg0LDE0IEBACiAJaW50IHNpemU7CiAKIAlzaXplICA9IEI0NF9SWF9SSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJpbmdfaW5mbyk7Ci0JYnAtPnJ4X2J1ZmZlcnMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWJwLT5yeF9idWZmZXJzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJwLT5yeF9idWZmZXJzKQogCQlnb3RvIG91dF9lcnI7Ci0JbWVtc2V0KGJwLT5yeF9idWZmZXJzLCAwLCBzaXplKTsKIAogCXNpemUgPSBCNDRfVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pOwotCWJwLT50eF9idWZmZXJzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlicC0+dHhfYnVmZmVycyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFicC0+dHhfYnVmZmVycykKIAkJZ290byBvdXRfZXJyOwotCW1lbXNldChicC0+dHhfYnVmZmVycywgMCwgc2l6ZSk7CiAKIAlzaXplID0gRE1BX1RBQkxFX0JZVEVTOwogCWJwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsIHNpemUsICZicC0+cnhfcmluZ19kbWEpOwpAQCAtMTE5MCwxMCArMTIwMiwxMCBAQAogCQlzdHJ1Y3QgZG1hX2Rlc2MgKnJ4X3Jpbmc7CiAJCWRtYV9hZGRyX3QgcnhfcmluZ19kbWE7CiAKLQkJaWYgKCEocnhfcmluZyA9IChzdHJ1Y3QgZG1hX2Rlc2MgKilrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpKSkKKwkJcnhfcmluZyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcnhfcmluZykKIAkJCWdvdG8gb3V0X2VycjsKIAotCQltZW1zZXQocnhfcmluZywgMCwgc2l6ZSk7CiAJCXJ4X3JpbmdfZG1hID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHJ4X3JpbmcsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1RBQkxFX0JZVEVTLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKQEAgLTEyMTYsMTAgKzEyMjgsMTAgQEAKIAkJc3RydWN0IGRtYV9kZXNjICp0eF9yaW5nOwogCQlkbWFfYWRkcl90IHR4X3JpbmdfZG1hOwogCi0JCWlmICghKHR4X3JpbmcgPSAoc3RydWN0IGRtYV9kZXNjICopa21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpCisJCXR4X3JpbmcgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXR4X3JpbmcpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJbWVtc2V0KHR4X3JpbmcsIDAsIHNpemUpOwogCQl0eF9yaW5nX2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCB0eF9yaW5nLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKQEAgLTEzODIsMjIgKzEzOTQsMjEgQEAKIAogCWVyciA9IGI0NF9hbGxvY19jb25zaXN0ZW50KGJwKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGI0NF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CisJCWdvdG8gb3V0OwogCiAJYjQ0X2luaXRfcmluZ3MoYnApOwogCWI0NF9pbml0X2h3KGJwKTsKLQlicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfSU5JVF9DT01QTEVURTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJYjQ0X2NoZWNrX3BoeShicCk7CiAKLQlzcGluX3VubG9ja19pcnEoJmJwLT5sb2NrKTsKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYjQ0X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJYjQ0X2NoaXBfcmVzZXQoYnApOworCQliNDRfZnJlZV9yaW5ncyhicCk7CisJCWI0NF9mcmVlX2NvbnNpc3RlbnQoYnApOworCQlnb3RvIG91dDsKKwl9CiAKIAlpbml0X3RpbWVyKCZicC0+dGltZXIpOwogCWJwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwpAQCAtMTQwNiwxMSArMTQxNyw3IEBACiAJYWRkX3RpbWVyKCZicC0+dGltZXIpOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JYjQ0X2ZyZWVfY29uc2lzdGVudChicCk7CitvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQ0NSw2ICsxNDUyLDggQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAorCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOworCiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CiAKIAlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CkBAIC0xNDU0LDEzICsxNDYzLDE0IEBACiAjZW5kaWYKIAliNDRfaGFsdChicCk7CiAJYjQ0X2ZyZWVfcmluZ3MoYnApOwotCWJwLT5mbGFncyAmPSB+QjQ0X0ZMQUdfSU5JVF9DT01QTEVURTsKIAluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAKKwluZXRpZl9wb2xsX2VuYWJsZShkZXYpOworCiAJYjQ0X2ZyZWVfY29uc2lzdGVudChicCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MjUsOCArMTUzNSw2IEBACiB7CiAJc3RydWN0IGI0NCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiB2YWw7Ci0JaW50IGk9MDsKLQl1bnNpZ25lZCBjaGFyIHplcm9bNl0gPSB7MCwwLDAsMCwwLDB9OwogCiAJdmFsID0gYnIzMihicCwgQjQ0X1JYQ09ORklHKTsKIAl2YWwgJj0gfihSWENPTkZJR19QUk9NSVNDIHwgUlhDT05GSUdfQUxMTVVMVEkpOwpAQCAtMTUzNCwxNCArMTU0MiwxNyBAQAogCQl2YWwgfD0gUlhDT05GSUdfUFJPTUlTQzsKIAkJYnczMihicCwgQjQ0X1JYQ09ORklHLCB2YWwpOwogCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgemVyb1s2XSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKKwkJaW50IGkgPSAwOworCiAJCV9fYjQ0X3NldF9tYWNfYWRkcihicCk7CiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCQl2YWwgfD0gUlhDT05GSUdfQUxMTVVMVEk7CiAJCWVsc2UKLQkJCWk9X19iNDRfbG9hZF9tY2FzdChicCwgZGV2KTsKKwkJCWkgPSBfX2I0NF9sb2FkX21jYXN0KGJwLCBkZXYpOwogCQkKLQkJZm9yKDtpPDY0O2krKykgeworCQlmb3IgKDsgaSA8IDY0OyBpKyspIHsKIAkJCV9fYjQ0X2NhbV93cml0ZShicCwgemVybywgaSk7CQkJCiAJCX0KIAkJYnczMihicCwgQjQ0X1JYQ09ORklHLCB2YWwpOwpAQCAtMTYwNSw3ICsxNjE2LDcgQEAKIHsKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoIShicC0+ZmxhZ3MgJiBCNDRfRkxBR19JTklUX0NPTVBMRVRFKSkKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAJY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEX0F1dG9uZWcpOwogCWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CkBAIC0xNjQzLDcgKzE2NTQsNyBAQAogewogCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghKGJwLT5mbGFncyAmIEI0NF9GTEFHX0lOSVRfQ09NUExFVEUpKQorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGdpZ2FiaXQuICovCkBAIC0xNzczLDYgKzE3ODQsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYjQ0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQoreworCXN3aXRjaChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJbWVtY3B5KGRhdGEsICpiNDRfZ3N0cmluZ3MsIHNpemVvZihiNDRfZ3N0cmluZ3MpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGI0NF9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gQVJSQVlfU0laRShiNDRfZ3N0cmluZ3MpOworfQorCitzdGF0aWMgdm9pZCBiNDRfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgKnZhbCA9ICZicC0+aHdfc3RhdHMudHhfZ29vZF9vY3RldHM7CisJdTMyIGk7CisKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CisKKwliNDRfc3RhdHNfdXBkYXRlKGJwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGI0NF9nc3RyaW5ncyk7IGkrKykKKwkJKmRhdGErKyA9ICp2YWwrKzsKKworCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGI0NF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gYjQ0X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gYjQ0X2dldF9zZXR0aW5ncywKQEAgLTE3ODUsNiArMTgyNyw5IEBACiAJLnNldF9wYXVzZXBhcmFtCQk9IGI0NF9zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X21zZ2xldmVsCQk9IGI0NF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBiNDRfc2V0X21zZ2xldmVsLAorCS5nZXRfc3RyaW5ncwkJPSBiNDRfZ2V0X3N0cmluZ3MsCisJLmdldF9zdGF0c19jb3VudAk9IGI0NF9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gYjQ0X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfcGVybV9hZGRyCQk9IGV0aHRvb2xfb3BfZ2V0X3Blcm1fYWRkciwKIH07CiAKQEAgLTE4OTMsOSArMTkzOCw5IEBACiAJCiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIEI0NF9ETUFfTUFTSyk7CiAJaWYgKGVycikgewotCSAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCi0JCSAiYWJvcnRpbmcuXG4iKTsKLQkgIGdvdG8gZXJyX291dF9mcmVlX3JlczsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCisJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIAogCWI0NHJlZ19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwpAQCAtMTkxNywxMCArMTk2Miw4IEBACiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWJwLT5wZGV2ID0gcGRldjsKIAlicC0+ZGV2ID0gZGV2OwotCWlmIChiNDRfZGVidWcgPj0gMCkKLQkJYnAtPm1zZ19lbmFibGUgPSAoMSA8PCBiNDRfZGVidWcpIC0gMTsKLQllbHNlCi0JCWJwLT5tc2dfZW5hYmxlID0gQjQ0X0RFRl9NU0dfRU5BQkxFOworCisJYnAtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChiNDRfZGVidWcsIEI0NF9ERUZfTVNHX0VOQUJMRSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmYnAtPmxvY2spOwogCkBAIC0yMDEwLDE3ICsyMDUzLDE0IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYjQ0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoZGV2KSB7Ci0JCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlpb3VubWFwKGJwLT5yZWdzKTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JfQorCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaW91bm1hcChicC0+cmVncyk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgYjQ0X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5oIGIvZHJpdmVycy9uZXQvYjQ0LmgKaW5kZXggNTkzY2IwYS4uYjE3ODY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmgKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmgKQEAgLTM0NiwyOSArMzQ2LDYzIEBACiAKICNkZWZpbmUgQjQ0X01DQVNUX1RBQkxFX1NJWkUJMzIKIAorI2RlZmluZQlCNDRfU1RBVF9SRUdfREVDTEFSRQkJXAorCV9CNDQodHhfZ29vZF9vY3RldHMpCQlcCisJX0I0NCh0eF9nb29kX3BrdHMpCQlcCisJX0I0NCh0eF9vY3RldHMpCQkJXAorCV9CNDQodHhfcGt0cykJCQlcCisJX0I0NCh0eF9icm9hZGNhc3RfcGt0cykJCVwKKwlfQjQ0KHR4X211bHRpY2FzdF9wa3RzKQkJXAorCV9CNDQodHhfbGVuXzY0KQkJCVwKKwlfQjQ0KHR4X2xlbl82NV90b18xMjcpCQlcCisJX0I0NCh0eF9sZW5fMTI4X3RvXzI1NSkJCVwKKwlfQjQ0KHR4X2xlbl8yNTZfdG9fNTExKQkJXAorCV9CNDQodHhfbGVuXzUxMl90b18xMDIzKQlcCisJX0I0NCh0eF9sZW5fMTAyNF90b19tYXgpCVwKKwlfQjQ0KHR4X2phYmJlcl9wa3RzKQkJXAorCV9CNDQodHhfb3ZlcnNpemVfcGt0cykJCVwKKwlfQjQ0KHR4X2ZyYWdtZW50X3BrdHMpCQlcCisJX0I0NCh0eF91bmRlcnJ1bnMpCQlcCisJX0I0NCh0eF90b3RhbF9jb2xzKQkJXAorCV9CNDQodHhfc2luZ2xlX2NvbHMpCQlcCisJX0I0NCh0eF9tdWx0aXBsZV9jb2xzKQkJXAorCV9CNDQodHhfZXhjZXNzaXZlX2NvbHMpCQlcCisJX0I0NCh0eF9sYXRlX2NvbHMpCQlcCisJX0I0NCh0eF9kZWZlcmVkKQkJXAorCV9CNDQodHhfY2Fycmllcl9sb3N0KQkJXAorCV9CNDQodHhfcGF1c2VfcGt0cykJCVwKKwlfQjQ0KHJ4X2dvb2Rfb2N0ZXRzKQkJXAorCV9CNDQocnhfZ29vZF9wa3RzKQkJXAorCV9CNDQocnhfb2N0ZXRzKQkJCVwKKwlfQjQ0KHJ4X3BrdHMpCQkJXAorCV9CNDQocnhfYnJvYWRjYXN0X3BrdHMpCQlcCisJX0I0NChyeF9tdWx0aWNhc3RfcGt0cykJCVwKKwlfQjQ0KHJ4X2xlbl82NCkJCQlcCisJX0I0NChyeF9sZW5fNjVfdG9fMTI3KQkJXAorCV9CNDQocnhfbGVuXzEyOF90b18yNTUpCQlcCisJX0I0NChyeF9sZW5fMjU2X3RvXzUxMSkJCVwKKwlfQjQ0KHJ4X2xlbl81MTJfdG9fMTAyMykJXAorCV9CNDQocnhfbGVuXzEwMjRfdG9fbWF4KQlcCisJX0I0NChyeF9qYWJiZXJfcGt0cykJCVwKKwlfQjQ0KHJ4X292ZXJzaXplX3BrdHMpCQlcCisJX0I0NChyeF9mcmFnbWVudF9wa3RzKQkJXAorCV9CNDQocnhfbWlzc2VkX3BrdHMpCQlcCisJX0I0NChyeF9jcmNfYWxpZ25fZXJycykJCVwKKwlfQjQ0KHJ4X3VuZGVyc2l6ZSkJCVwKKwlfQjQ0KHJ4X2NyY19lcnJzKQkJXAorCV9CNDQocnhfYWxpZ25fZXJycykJCVwKKwlfQjQ0KHJ4X3N5bWJvbF9lcnJzKQkJXAorCV9CNDQocnhfcGF1c2VfcGt0cykJCVwKKwlfQjQ0KHJ4X25vbnBhdXNlX3BrdHMpCisKIC8qIFNXIGNvcHkgb2YgZGV2aWNlIHN0YXRpc3RpY3MsIGtlcHQgdXAgdG8gZGF0ZSBieSBwZXJpb2RpYyB0aW1lcgotICogd2hpY2ggcHJvYmVzIEhXIHZhbHVlcy4gIE11c3QgaGF2ZSBzYW1lIHJlbGF0aXZlIGxheW91dCBhcyBIVwotICogcmVnaXN0ZXIgYWJvdmUsIGJlY2F1c2UgYjQ0X3N0YXRzX3VwZGF0ZSBkZXBlbmRzIHVwb24gdGhpcy4KKyAqIHdoaWNoIHByb2JlcyBIVyB2YWx1ZXMuIENoZWNrIGI0NF9zdGF0c191cGRhdGUgaWYgeW91IG1lc3Mgd2l0aAorICogdGhlIGxheW91dAogICovCiBzdHJ1Y3QgYjQ0X2h3X3N0YXRzIHsKLQl1MzIgdHhfZ29vZF9vY3RldHMsIHR4X2dvb2RfcGt0cywgdHhfb2N0ZXRzOwotCXUzMiB0eF9wa3RzLCB0eF9icm9hZGNhc3RfcGt0cywgdHhfbXVsdGljYXN0X3BrdHM7Ci0JdTMyIHR4X2xlbl82NCwgdHhfbGVuXzY1X3RvXzEyNywgdHhfbGVuXzEyOF90b18yNTU7Ci0JdTMyIHR4X2xlbl8yNTZfdG9fNTExLCB0eF9sZW5fNTEyX3RvXzEwMjMsIHR4X2xlbl8xMDI0X3RvX21heDsKLQl1MzIgdHhfamFiYmVyX3BrdHMsIHR4X292ZXJzaXplX3BrdHMsIHR4X2ZyYWdtZW50X3BrdHM7Ci0JdTMyIHR4X3VuZGVycnVucywgdHhfdG90YWxfY29scywgdHhfc2luZ2xlX2NvbHM7Ci0JdTMyIHR4X211bHRpcGxlX2NvbHMsIHR4X2V4Y2Vzc2l2ZV9jb2xzLCB0eF9sYXRlX2NvbHM7Ci0JdTMyIHR4X2RlZmVyZWQsIHR4X2NhcnJpZXJfbG9zdCwgdHhfcGF1c2VfcGt0czsKLQl1MzIgX19wYWQxWzhdOwotCi0JdTMyIHJ4X2dvb2Rfb2N0ZXRzLCByeF9nb29kX3BrdHMsIHJ4X29jdGV0czsKLQl1MzIgcnhfcGt0cywgcnhfYnJvYWRjYXN0X3BrdHMsIHJ4X211bHRpY2FzdF9wa3RzOwotCXUzMiByeF9sZW5fNjQsIHJ4X2xlbl82NV90b18xMjcsIHJ4X2xlbl8xMjhfdG9fMjU1OwotCXUzMiByeF9sZW5fMjU2X3RvXzUxMSwgcnhfbGVuXzUxMl90b18xMDIzLCByeF9sZW5fMTAyNF90b19tYXg7Ci0JdTMyIHJ4X2phYmJlcl9wa3RzLCByeF9vdmVyc2l6ZV9wa3RzLCByeF9mcmFnbWVudF9wa3RzOwotCXUzMiByeF9taXNzZWRfcGt0cywgcnhfY3JjX2FsaWduX2VycnMsIHJ4X3VuZGVyc2l6ZTsKLQl1MzIgcnhfY3JjX2VycnMsIHJ4X2FsaWduX2VycnMsIHJ4X3N5bWJvbF9lcnJzOwotCXUzMiByeF9wYXVzZV9wa3RzLCByeF9ub25wYXVzZV9wa3RzOworI2RlZmluZSBfQjQ0KHgpCXUzMiB4OworQjQ0X1NUQVRfUkVHX0RFQ0xBUkUKKyN1bmRlZiBfQjQ0CiB9OwogCiBzdHJ1Y3QgYjQ0IHsKQEAgLTM4Niw3ICs0MjAsNiBAQAogCiAJdTMyCQkJZG1hX29mZnNldDsKIAl1MzIJCQlmbGFnczsKLSNkZWZpbmUgQjQ0X0ZMQUdfSU5JVF9DT01QTEVURQkweDAwMDAwMDAxCiAjZGVmaW5lIEI0NF9GTEFHX0JVR0dZX1RYUFRSCTB4MDAwMDAwMDIKICNkZWZpbmUgQjQ0X0ZMQUdfUkVPUkRFUl9CVUcJMHgwMDAwMDAwNAogI2RlZmluZSBCNDRfRkxBR19QQVVTRV9BVVRPCTB4MDAwMDgwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDgwMzIxMjYuLjk0Y2VjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTYwNCwzNSArMTYwNCwyNyBAQAogCShORVRJRl9GX1NHfE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX05PX0NTVU18TkVUSUZfRl9IV19DU1VNKQogCiAvKiAKLSAqIENvbXB1dGUgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSB0byB0aGUgYm9uZGluZyBkZXZpY2UgYnkgCi0gKiBpbnRlcnNlY3Rpb24gb2YgYWxsIG9mIHRoZSBzbGF2ZSBkZXZpY2VzJyBCT05EX0lOVEVSU0VDVF9GRUFUVVJFUy4KLSAqIENhbGwgdGhpcyBhZnRlciBhdHRhY2hpbmcgb3IgZGV0YWNoaW5nIGEgc2xhdmUgdG8gdXBkYXRlIHRoZSAKLSAqIGJvbmQncyBmZWF0dXJlcy4KKyAqIENvbXB1dGUgdGhlIGNvbW1vbiBkZXYtPmZlYXR1cmUgc2V0IGF2YWlsYWJsZSB0byBhbGwgc2xhdmVzLiAgU29tZQorICogZmVhdHVyZSBiaXRzIGFyZSBtYW5hZ2VkIGVsc2V3aGVyZSwgc28gcHJlc2VydmUgZmVhdHVyZSBiaXRzIHNldCBvbgorICogbWFzdGVyIGRldmljZSB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgZXhhbWluZWQgc2V0LgogICovCiBzdGF0aWMgaW50IGJvbmRfY29tcHV0ZV9mZWF0dXJlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVM7CiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYgPSBib25kLT5kZXY7Ci0JaW50IGZlYXR1cmVzID0gYm9uZC0+Ym9uZF9mZWF0dXJlczsKKwlpbnQgaTsKIAotCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKiBzbGF2ZV9kZXYgPSBzbGF2ZS0+ZGV2OwotCQlpZiAoaSA9PSAwKSB7Ci0JCQlmZWF0dXJlcyB8PSBCT05EX0lOVEVSU0VDVF9GRUFUVVJFUzsKLQkJfQotCQlmZWF0dXJlcyAmPQotCQkJfih+c2xhdmVfZGV2LT5mZWF0dXJlcyAmIEJPTkRfSU5URVJTRUNUX0ZFQVRVUkVTKTsKLQl9CisJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKKwkJZmVhdHVyZXMgJj0gKHNsYXZlLT5kZXYtPmZlYXR1cmVzICYgQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVMpOwogCi0JLyogdHVybiBvZmYgTkVUSUZfRl9TRyBpZiB3ZSBuZWVkIGEgY3N1bSBhbmQgaC93IGNhbid0IGRvIGl0ICovCiAJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfU0cpICYmIAotCQkhKGZlYXR1cmVzICYgKE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCQkgICAgICBORVRJRl9GX05PX0NTVU0gfAotCQkJICAgICAgTkVUSUZfRl9IV19DU1VNKSkpIHsKKwkgICAgIShmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfAorCQkJICBORVRJRl9GX05PX0NTVU0gfAorCQkJICBORVRJRl9GX0hXX0NTVU0pKSkKIAkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7Ci0JfQogCisJZmVhdHVyZXMgfD0gKGJvbmRfZGV2LT5mZWF0dXJlcyAmIH5CT05EX0lOVEVSU0VDVF9GRUFUVVJFUyk7CiAJYm9uZF9kZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CiAKIAlyZXR1cm4gMDsKQEAgLTQ1NjEsOCArNDU1Myw2IEBACiAJCQkgICAgICAgTkVUSUZfRl9IV19WTEFOX1JYIHwKIAkJCSAgICAgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKTsKIAotCWJvbmQtPmJvbmRfZmVhdHVyZXMgPSBib25kX2Rldi0+ZmVhdHVyZXM7Ci0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWJvbmRfY3JlYXRlX3Byb2NfZW50cnkoYm9uZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggYmJmOWRhOC4uMTQzM2U5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTQwLDggKzQwLDggQEAKICNpbmNsdWRlICJib25kXzNhZC5oIgogI2luY2x1ZGUgImJvbmRfYWxiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNi40IgotI2RlZmluZSBEUlZfUkVMREFURQkiU2VwdGVtYmVyIDI2LCAyMDA1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi42LjUiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJOb3ZlbWJlciA0LCAyMDA1IgogI2RlZmluZSBEUlZfTkFNRQkiYm9uZGluZyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJFdGhlcm5ldCBDaGFubmVsIEJvbmRpbmcgRHJpdmVyIgogCkBAIC0yMTEsOSArMjExLDYgQEAKIAlzdHJ1Y3QgICBib25kX3BhcmFtcyBwYXJhbXM7CiAJc3RydWN0ICAgbGlzdF9oZWFkIHZsYW5fbGlzdDsKIAlzdHJ1Y3QgICB2bGFuX2dyb3VwICp2bGdycDsKLQkvKiB0aGUgZmVhdHVyZXMgdGhlIGJvbmRpbmcgZGV2aWNlIHN1cHBvcnRzLCBpbmRlcGVuZGVudGx5IAotCSAqIG9mIGFueSBzbGF2ZXMgKi8KLQlpbnQJIGJvbmRfZmVhdHVyZXM7IAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKaW5kZXggNTBmNDNkYi4uMWY3Y2E0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtNjcsNyArNjcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKaW5kZXggYjY4YjljYS4uNjQxMDVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKKysrIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKQEAgLTQwOSw3ICs0MDksNiBAQAogc3RhdGljIHZvaWQgZTEwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZTEwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZTEwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7Ci1zdGF0aWMgaW50IGUxMDBfZXRodG9vbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CiBzdGF0aWMgaW50IGUxMDBfc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBzdHJ1Y3QgaWZtYXAqIG1hcCk7CiBzdGF0aWMgdm9pZCBlMTAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmUxMDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNDM2LDYgKzQzNSw4IEBACiBzdGF0aWMgdm9pZCBlMTAwX2NsZWFyX25ldHdvcmtfbGVkcyh1bnNpZ25lZCBsb25nIGR1bW15KTsKIHN0YXRpYyB2b2lkIGUxMDBfc2V0X25ldHdvcmtfbGVkcyhpbnQgYWN0aXZlKTsKIAorc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzOworCiBzdGF0aWMgdm9pZCBicm9hZGNvbV9jaGVja19zcGVlZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIHN0YXRpYyB2b2lkIGJyb2FkY29tX2NoZWNrX2R1cGxleChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIHN0YXRpYyB2b2lkIHRka19jaGVja19zcGVlZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKQEAgLTQ5NSw2ICs0OTYsNyBAQAogCWRldi0+Z2V0X3N0YXRzICAgICAgICAgID0gZTEwMF9nZXRfc3RhdHM7CiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBlMTAwX3NldF9tYWNfYWRkcmVzczsKKwlkZXYtPmV0aHRvb2xfb3BzCT0gJmUxMDBfZXRodG9vbF9vcHM7CiAJZGV2LT5kb19pb2N0bCAgICAgICAgICAgPSBlMTAwX2lvY3RsOwogCWRldi0+c2V0X2NvbmZpZwkJPSBlMTAwX3NldF9jb25maWc7CiAJZGV2LT50eF90aW1lb3V0ICAgICAgICAgPSBlMTAwX3R4X3RpbWVvdXQ7CkBAIC0xNDQ4LDggKzE0NTAsNiBAQAogCiAJc3Bpbl9sb2NrKCZucC0+bG9jayk7IC8qIFByZWVtcHQgcHJvdGVjdGlvbiAqLwogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ0VUSFRPT0w6Ci0JCQlyZXR1cm4gZTEwMF9ldGh0b29sX2lvY3RsKGRldixpZnIpOwogCQljYXNlIFNJT0NHTUlJUEhZOiAvKiBHZXQgUEhZIGFkZHJlc3MgKi8KIAkJCWRhdGEtPnBoeV9pZCA9IG1kaW9fcGh5X2FkZHI7CiAJCQlicmVhazsKQEAgLTE0ODYsODggKzE0ODYsODEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZTEwMF9ldGh0b29sX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQorc3RhdGljIGludCBlMTAwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIGlmci0+aWZyX2RhdGEsIHNpemVvZiAoZWNtZCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXN3aXRjaCAoZWNtZC5jbWQpIHsKLQkJY2FzZSBFVEhUT09MX0dTRVQ6Ci0JCXsKLQkJCW1lbXNldCgodm9pZCAqKSAmZWNtZCwgMCwgc2l6ZW9mIChlY21kKSk7Ci0JCQllY21kLnN1cHBvcnRlZCA9Ci0JCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX01JSSB8CisJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfTUlJIHwKIAkJCSAgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAogCQkJICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOwotCQkJZWNtZC5wb3J0ID0gUE9SVF9UUDsKLQkJCWVjbWQudHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwotCQkJZWNtZC5waHlfYWRkcmVzcyA9IG1kaW9fcGh5X2FkZHI7Ci0JCQllY21kLnNwZWVkID0gY3VycmVudF9zcGVlZDsKLQkJCWVjbWQuZHVwbGV4ID0gZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwotCQkJZWNtZC5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfVFA7Ci0JCQlpZiAoY3VycmVudF9kdXBsZXggPT0gYXV0b25lZyAmJiBjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAwKQotCQkJCWVjbWQuYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwotCQkJZWxzZSB7Ci0JCQkJZWNtZC5hZHZlcnRpc2luZyB8PQotCQkJCSAgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7Ci0JCQkJaWYgKGN1cnJlbnRfc3BlZWRfc2VsZWN0aW9uID09IDEwKQotCQkJCQllY21kLmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKLQkJCQllbHNlIGlmIChjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAxMDApCi0JCQkJCWVjbWQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKLQkJCQlpZiAoY3VycmVudF9kdXBsZXggPT0gaGFsZikKLQkJCQkJZWNtZC5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKLQkJCQllbHNlIGlmIChjdXJyZW50X2R1cGxleCA9PSBmdWxsKQotCQkJCQllY21kLmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpOwotCQkJfQotCQkJZWNtZC5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZlY21kLCBzaXplb2YgKGVjbWQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBFVEhUT09MX1NTRVQ6Ci0JCXsKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCQlpZiAoZWNtZC5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7Ci0JCQkJZTEwMF9zZXRfZHVwbGV4KGRldiwgYXV0b25lZyk7Ci0JCQkJZTEwMF9zZXRfc3BlZWQoZGV2LCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZTEwMF9zZXRfZHVwbGV4KGRldiwgZWNtZC5kdXBsZXggPT0gRFVQTEVYX0hBTEYgPyBoYWxmIDogZnVsbCk7Ci0JCQkJZTEwMF9zZXRfc3BlZWQoZGV2LCBlY21kLnNwZWVkID09IFNQRUVEXzEwID8gMTA6IDEwMCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JCWNhc2UgRVRIVE9PTF9HRFJWSU5GTzoKLQkJewotCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvOwotCQkJbWVtc2V0KCh2b2lkICopICZpbmZvLCAwLCBzaXplb2YgKGluZm8pKTsKLQkJCXN0cm5jcHkoaW5mby5kcml2ZXIsICJFVFJBWCAxMDBMWCIsIHNpemVvZihpbmZvLmRyaXZlcikgLSAxKTsKLQkJCXN0cm5jcHkoaW5mby52ZXJzaW9uLCAiJFJldmlzaW9uOiAxLjMxICQiLCBzaXplb2YoaW5mby52ZXJzaW9uKSAtIDEpOwotCQkJc3RybmNweShpbmZvLmZ3X3ZlcnNpb24sICJOL0EiLCBzaXplb2YoaW5mby5md192ZXJzaW9uKSAtIDEpOwotCQkJc3RybmNweShpbmZvLmJ1c19pbmZvLCAiTi9BIiwgc2l6ZW9mKGluZm8uYnVzX2luZm8pIC0gMSk7Ci0JCQlpbmZvLnJlZ2R1bXBfbGVuID0gMDsKLQkJCWluZm8uZWVkdW1wX2xlbiA9IDA7Ci0JCQlpbmZvLnRlc3RpbmZvX2xlbiA9IDA7Ci0JCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZpbmZvLCBzaXplb2YgKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBFVEhUT09MX05XQVlfUlNUOgotCQkJaWYgKGN1cnJlbnRfZHVwbGV4ID09IGF1dG9uZWcgJiYgY3VycmVudF9zcGVlZF9zZWxlY3Rpb24gPT0gMCkKLQkJCQllMTAwX25lZ290aWF0ZShkZXYpOwotCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7CisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCWVjbWQtPnBoeV9hZGRyZXNzID0gbWRpb19waHlfYWRkcjsKKwllY21kLT5zcGVlZCA9IGN1cnJlbnRfc3BlZWQ7CisJZWNtZC0+ZHVwbGV4ID0gZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKKworCWlmIChjdXJyZW50X2R1cGxleCA9PSBhdXRvbmVnICYmIGN1cnJlbnRfc3BlZWRfc2VsZWN0aW9uID09IDApCisJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKKwllbHNlIHsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KKwkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCQlpZiAoY3VycmVudF9zcGVlZF9zZWxlY3Rpb24gPT0gMTApCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpOworCQllbHNlIGlmIChjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAxMDApCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKKwkJaWYgKGN1cnJlbnRfZHVwbGV4ID09IGhhbGYpCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCk7CisJCWVsc2UgaWYgKGN1cnJlbnRfZHVwbGV4ID09IGZ1bGwpCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZik7CiAJfQorCisJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGUxMDBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQllMTAwX3NldF9kdXBsZXgoZGV2LCBhdXRvbmVnKTsKKwkJZTEwMF9zZXRfc3BlZWQoZGV2LCAwKTsKKwl9IGVsc2UgeworCQllMTAwX3NldF9kdXBsZXgoZGV2LCBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYgPyBoYWxmIDogZnVsbCk7CisJCWUxMDBfc2V0X3NwZWVkKGRldiwgZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAgPyAxMDogMTAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZTEwMF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCAiRVRSQVggMTAwTFgiLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgIiRSZXZpc2lvbjogMS4zMSAkIiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7CisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pIC0gMSk7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgIk4vQSIsIHNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxKTsKK30KKworc3RhdGljIGludCBlMTAwX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoY3VycmVudF9kdXBsZXggPT0gYXV0b25lZyAmJiBjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAwKQorCQllMTAwX25lZ290aWF0ZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwk9IGUxMDBfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJPSBlMTAwX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8JPSBlMTAwX2dldF9kcnZpbmZvLAorCS5ud2F5X3Jlc2V0CT0gZTEwMF9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCiBzdGF0aWMgaW50CiBlMTAwX3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZ3JzLmMgYi9kcml2ZXJzL25ldC9kZ3JzLmMKaW5kZXggNzgwOTgzOC4uMmEyOTBjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGdycy5jCisrKyBiL2RyaXZlcnMvbmV0L2RncnMuYwpAQCAtMTU0OSw3ICsxNTQ5LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRncnNfaW5pdF9tb2R1bGUgKHZvaWQpCiB7CiAJaW50CWk7Ci0JaW50IGVpc2Fjb3VudCA9IDAsIHBjaWNvdW50ID0gMDsKKwlpbnQJY2FyZGNvdW50ID0gMDsKIAogCS8qCiAJICoJQ29tbWFuZCBsaW5lIHZhcmlhYmxlIG92ZXJyaWRlcwpAQCAtMTU5MSwxNSArMTU5MSwxMyBAQAogCSAqCUZpbmQgYW5kIGNvbmZpZ3VyZSBhbGwgdGhlIGNhcmRzCiAJICovCiAjaWZkZWYgQ09ORklHX0VJU0EKLQllaXNhY291bnQgPSBlaXNhX2RyaXZlcl9yZWdpc3RlcigmZGdyc19laXNhX2RyaXZlcik7Ci0JaWYgKGVpc2Fjb3VudCA8IDApCi0JCXJldHVybiBlaXNhY291bnQ7CisJY2FyZGNvdW50ID0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIoJmRncnNfZWlzYV9kcml2ZXIpOworCWlmIChjYXJkY291bnQgPCAwKQorCQlyZXR1cm4gY2FyZGNvdW50OwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BDSQotCXBjaWNvdW50ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGdyc19wY2lfZHJpdmVyKTsKLQlpZiAocGNpY291bnQpCi0JCXJldHVybiBwY2ljb3VudDsKLSNlbmRpZgorCWNhcmRjb3VudCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRncnNfcGNpX2RyaXZlcik7CisJaWYgKGNhcmRjb3VudCkKKwkJcmV0dXJuIGNhcmRjb3VudDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBjMGFmNmZiLi5mOGM5YmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZWIxNjlhOGUuLjdhNmFlYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTE0NzgsNyArMTQ3OCw3IEBACiAKIAlpZihwY2lfZG1hX21hcHBpbmdfZXJyb3IocngtPmRtYV9hZGRyKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShyeC0+c2tiKTsKLQkJcngtPnNrYiA9IDA7CisJCXJ4LT5za2IgPSBOVUxMOwogCQlyeC0+ZG1hX2FkZHIgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNzY0LDcgKzE3NjQsNyBAQAogCWlmKChlcnIgPSBlMTAwX2h3X2luaXQobmljKSkpCiAJCWdvdG8gZXJyX2NsZWFuX2NiczsKIAllMTAwX3NldF9tdWx0aWNhc3RfbGlzdChuaWMtPm5ldGRldik7Ci0JZTEwMF9zdGFydF9yZWNlaXZlcihuaWMsIDApOworCWUxMDBfc3RhcnRfcmVjZWl2ZXIobmljLCBOVUxMKTsKIAltb2RfdGltZXIoJm5pYy0+d2F0Y2hkb2csIGppZmZpZXMpOwogCWlmKChlcnIgPSByZXF1ZXN0X2lycShuaWMtPnBkZXYtPmlycSwgZTEwMF9pbnRyLCBTQV9TSElSUSwKIAkJbmljLT5uZXRkZXYtPm5hbWUsIG5pYy0+bmV0ZGV2KSkpCkBAIC0xODQ0LDcgKzE4NDQsNyBAQAogCQltZGlvX3dyaXRlKG5pYy0+bmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9CTUNSLAogCQkJQk1DUl9MT09QQkFDSyk7CiAKLQllMTAwX3N0YXJ0X3JlY2VpdmVyKG5pYywgMCk7CisJZTEwMF9zdGFydF9yZWNlaXZlcihuaWMsIE5VTEwpOwogCiAJaWYoIShza2IgPSBkZXZfYWxsb2Nfc2tiKEVUSF9EQVRBX0xFTikpKSB7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oCmluZGV4IDExMDU1NDMuLmU3ZWM5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzX2VuZXRfcGQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCA5NjI1ODBmLi41NGQyOTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC05MCw3ICs5MCw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBjNzdjYTZjLi4yMjAwODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCA2OGUzNTc4Li41YTJkODEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwppbmRleCA1YTc0ZDNkLi43MjYzMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9vY3AuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYjcxZmFiNi4uZTkyYzE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC05Niw3ICs5Niw2IEBACiAKICN1bmRlZiBIUDEwMF9NVUxUSUNBU1RfRklMVEVSCS8qIE5lZWQgdG8gYmUgZGVidWdnZWQuLi4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCA5NDIzOWY2Li5iZTE5MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0zNSw3ICszNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKaW5kZXggNDllNTQ2Ny4uNmEzMTI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYworKysgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCkBAIC00NiwxMCArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgotI2RlZmluZSBJT0MzX0JBVUQgKDIyMDAwMDAwIC8gKDMqMTYpKQotI2RlZmluZSBJT0MzX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMTE0NiwxMiArMTE0NCwxMSBAQAogICogYXJvdW5kIGlvYzMgb2RkaXRpZXMgaW4gdGhpcyByZXNwZWN0LgogICoKICAqIFRoZSBJT0MzIHNlcmlhbHMgdXNlIGEgMjJNSHogY2xvY2sgcmF0ZSB3aXRoIGFuIGFkZGl0aW9uYWwgZGl2aWRlciBieSAzLgotICogKElPQzNfQkFVRCA9ICgyMjAwMDAwMCAvICgzKjE2KSkpCiAgKi8KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGlvYzNfc2VyaWFsX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaW9jMyAqaW9jMykKIHsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCByZXE7CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHJlY29nbmljZSBhbmQgdHJlYXQgdGhlIGZvdXJ0aCBNRU5FVCBzZXJpYWwgYXMgaXQKQEAgLTExNjUsMjAgKzExNjIsMjUgQEAKIAlpZiAoaW9jM19pc19tZW5ldChwZGV2KSAmJiBQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gMykKIAkJcmV0dXJuOwogCi0JLyogUmVnaXN0ZXIgdG8gaW50ZXJydXB0IHplcm8gYmVjYXVzZSB3ZSBzaGFyZSB0aGUgaW50ZXJydXB0IHdpdGgKLQkgICB0aGUgc2VyaWFsIGRyaXZlciB3aGljaCB3ZSBkb24ndCBwcm9wZXJseSBzdXBwb3J0IHlldC4gICovCi0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKLQlyZXEuaXJxICAgICAgICAgICAgID0gMDsKLQlyZXEuZmxhZ3MgICAgICAgICAgID0gSU9DM19DT01fRkxBR1M7Ci0JcmVxLmlvX3R5cGUgICAgICAgICA9IFNFUklBTF9JT19NRU07Ci0JcmVxLmlvbWVtX3JlZ19zaGlmdCA9IDA7Ci0JcmVxLmJhdWRfYmFzZSAgICAgICA9IElPQzNfQkFVRDsKKwkvKgorCSAqIFJlZ2lzdGVyIHRvIGludGVycnVwdCB6ZXJvIGJlY2F1c2Ugd2Ugc2hhcmUgdGhlIGludGVycnVwdCB3aXRoCisJICogdGhlIHNlcmlhbCBkcml2ZXIgd2hpY2ggd2UgZG9uJ3QgcHJvcGVybHkgc3VwcG9ydCB5ZXQuCisJICoKKwkgKiBDYW4ndCB1c2UgVVBGX0lPUkVNQVAgYXMgdGhlIHdob2xlIG9mIElPQzMgcmVzb3VyY2VzIGhhdmUgYWxyZWFkeQorCSAqIGJlZW4gcmVnaXN0ZXJlZC4KKwkgKi8KKwltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7CisJcG9ydC5pcnEgICAgICA9IDA7CisJcG9ydC5mbGFncyAgICA9IFVQRl9TS0lQX1RFU1QgfCBVUEZfQk9PVF9BVVRPQ09ORjsKKwlwb3J0LmlvdHlwZSAgID0gVVBJT19NRU07CisJcG9ydC5yZWdzaGlmdCA9IDA7CisJcG9ydC51YXJ0Y2xrICA9IDIyMDAwMDAwIC8gMzsKIAotCXJlcS5pb21lbV9iYXNlICAgICAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGE7Ci0JcmVnaXN0ZXJfc2VyaWFsKCZyZXEpOworCXBvcnQubWVtYmFzZSAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGE7CisJc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIAotCXJlcS5pb21lbV9iYXNlICAgICAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGI7Ci0JcmVnaXN0ZXJfc2VyaWFsKCZyZXEpOworCXBvcnQubWVtYmFzZSAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGI7CisJc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCmluZGV4IGQ4NmQ4ZjAuLjc3ZWFkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCkBAIC01OCw3ICs1OCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODM5MC5jIGIvZHJpdmVycy9uZXQvbWFjODM5MC5jCmluZGV4IGNlNTc2MTguLmQ4Yzk5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hYzgzOTAuYworKysgYi9kcml2ZXJzL25ldC9tYWM4MzkwLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFuZCBmaXhlZCBhY2Nlc3MgdG8gU29uaWMgU3lzIGNhcmQgd2hpY2ggbWFzcXVlcmFkZXMgYXMgYSBGYXJhbGxvbiAKICAqIGJ5IHJheWtAa25pZ2h0c21hbm9yLm9yZyAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5oIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguaAppbmRleCBiY2ZkYTUxLi5mNzY5ZjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTVY2NDNYWF9FVEhfSF9fCiAjZGVmaW5lIF9fTVY2NDNYWF9FVEhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBhM2MzZmM5Li5mODU3YWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xMTAsNyArMTEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4JLyogZm9yIGlwaCAqLwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CS8qIGZvciBJUFBST1RPXy4uLiAqLwotI2luY2x1ZGUgPGxpbnV4L2VlcHJvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CkBAIC00NDUsNyArNDQ0LDYgQEAKIAogCXUzMgkJCU1FQVJfY2FjaGU7CiAJdTMyCQkJSU1SX2NhY2hlOwotCXN0cnVjdCBlZXByb20JCWVlOwogCiAJdW5zaWduZWQJCWxpbmtzdGF0ZTsKIApAQCAtMTU1OCwxNSArMTU1NiwxMyBAQAogCXVuc2lnbmVkIGk7CiAJZm9yIChpPTA7IGk8MzsgaSsrKSB7CiAJCXUzMiBkYXRhOwotI2lmIDAJLyogSSd2ZSBsZWZ0IHRoaXMgaW4gYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIGVlcHJvbS5oICovCi0JCWRhdGEgPSBlZXByb21fcmVhZHcoJmRldi0+ZWUsIDB4YSArIDIgLSBpKTsKLSNlbHNlCisKIAkJLyogUmVhZCBmcm9tIHRoZSBwZXJmZWN0IG1hdGNoIG1lbW9yeTogdGhpcyBpcyBsb2FkZWQgYnkKIAkJICogdGhlIGNoaXAgZnJvbSB0aGUgRUVQUk9NIHZpYSB0aGUgRUVMT0FEIHNlbGYgdGVzdC4KIAkJICovCiAJCXdyaXRlbChpKjIsIGRldi0+YmFzZSArIFJGQ1IpOwogCQlkYXRhID0gcmVhZGwoZGV2LT5iYXNlICsgUkZEUik7Ci0jZW5kaWYKKwogCQkqbWFjKysgPSBkYXRhOwogCQkqbWFjKysgPSBkYXRhID4+IDg7CiAJfQpAQCAtMTg1MSw4ICsxODQ3LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5taXNjX2xvY2spOwogCWRldi0+cGNpX2RldiA9IHBjaV9kZXY7CiAKLQlkZXYtPmVlLmNhY2hlID0gJmRldi0+TUVBUl9jYWNoZTsKLQlkZXYtPmVlLmxvY2sgPSAmZGV2LT5taXNjX2xvY2s7CiAJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGNpX2Rldi0+ZGV2KTsKIApAQCAtMTg4Nyw5ICsxODgxLDYgQEAKIAogCWRldi0+SU1SX2NhY2hlID0gMDsKIAotCXNldHVwX2VlX21lbV9iaXRiYW5nZXIoJmRldi0+ZWUsIGRldi0+YmFzZSArIE1FQVIsIDMsIDIsIDEsIDAsCi0JCTApOwotCiAJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBuczgzODIwX2lycSwgU0FfU0hJUlEsCiAJCQkgIERSVl9OQU1FLCBuZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggMDc0NWRkOS4uZTU3ZGY4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAKQEAgLTE1MzIsNyArMTUzMSw3IEBACiAjZGVmaW5lIExJTktfVVBfRE9XTl9JTlRFUlJVUFQJCTEKICNkZWZpbmUgTUFDX1JNQUNfRVJSX1RJTUVSCQkyCiAKLWludCBzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWNfdCAqbmljKQorc3RhdGljIGludCBzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWNfdCAqbmljKQogewogCWlmIChuaWMtPmludHJfdHlwZSAhPSBJTlRBKQogCQlyZXR1cm4gTUFDX1JNQUNfRVJSX1RJTUVSOwpAQCAtMTg2NCw3ICsxODYzLDcgQEAKICAqCiAgKi8KIAotdm9pZCBmaXhfbWFjX2FkZHJlc3MobmljX3QgKiBzcCkKK3N0YXRpYyB2b2lkIGZpeF9tYWNfYWRkcmVzcyhuaWNfdCAqIHNwKQogewogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1NjQgdmFsNjQ7CkBAIC0yMTYwLDcgKzIxNTksNyBAQAogICogIFNVQ0NFU1Mgb24gc3VjY2VzcyBvciBhbiBhcHByb3ByaWF0ZSAtdmUgdmFsdWUgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgZmlsbF9yeF9idWZmZXJzKHN0cnVjdCBzMmlvX25pYyAqbmljLCBpbnQgcmluZ19ubykKK3N0YXRpYyBpbnQgZmlsbF9yeF9idWZmZXJzKHN0cnVjdCBzMmlvX25pYyAqbmljLCBpbnQgcmluZ19ubykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmljLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTI4MzEsNyArMjgzMCw3IEBACiAgKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcyBhbmQgRkFJTFVSRSBvbiBmYWlsdXJlLgogICovCiAKLWludCB3YWl0X2Zvcl9jbWRfY29tcGxldGUobmljX3QgKiBzcCkKK3N0YXRpYyBpbnQgd2FpdF9mb3JfY21kX2NvbXBsZXRlKG5pY190ICogc3ApCiB7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCWludCByZXQgPSBGQUlMVVJFLCBjbnQgPSAwOwpAQCAtMzA3Nyw3ICszMDc2LDcgQEAKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIAotaW50IHdhaXRfZm9yX21zaXhfdHJhbnMobmljX3QgKm5pYywgaW50IGkpCitzdGF0aWMgaW50IHdhaXRfZm9yX21zaXhfdHJhbnMobmljX3QgKm5pYywgaW50IGkpCiB7CiAJWEVOQV9kZXZfY29uZmlnX3QgKmJhcjAgPSAoWEVOQV9kZXZfY29uZmlnX3QgKikgbmljLT5iYXIwOwogCXU2NCB2YWw2NDsKQEAgLTMxMTYsNyArMzExNSw3IEBACiAJfQogfQogCi12b2lkIHN0b3JlX3htc2lfZGF0YShuaWNfdCAqbmljKQorc3RhdGljIHZvaWQgc3RvcmVfeG1zaV9kYXRhKG5pY190ICpuaWMpCiB7CiAJWEVOQV9kZXZfY29uZmlnX3QgKmJhcjAgPSAoWEVOQV9kZXZfY29uZmlnX3QgKikgbmljLT5iYXIwOwogCXU2NCB2YWw2NCwgYWRkciwgZGF0YTsKQEAgLTMyODgsNyArMzI4Nyw3IEBACiAgKiAgIGZpbGUgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgczJpb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMyaW9fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKIAlpbnQgZXJyID0gMDsKQEAgLTM0MTgsNyArMzQxNyw3IEBACiAgKiAgZmlsZSBvbiBmYWlsdXJlLgogICovCiAKLWludCBzMmlvX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMyaW9fY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJaW50IGk7CkBAIC0zNDY3LDcgKzM0NjYsNyBAQAogICogIDAgb24gc3VjY2VzcyAmIDEgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgczJpb194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMyaW9feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKIAl1MTYgZnJnX2NudCwgZnJnX2xlbiwgaSwgcXVldWUsIHF1ZXVlX2xlbiwgcHV0X29mZiwgZ2V0X29mZjsKQEAgLTM5MTMsNyArMzkxMiw3IEBACiAgKiAgcG9pbnRlciB0byB0aGUgdXBkYXRlZCBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdHVyZS4KICAqLwogCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqczJpb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqczJpb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJbWFjX2luZm9fdCAqbWFjX2NvbnRyb2w7CkBAIC01MTA2LDE5ICs1MTA1LDIwIEBACiAJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZG91YmxlX2VjY19lcnJzOwogfQogCi1pbnQgczJpb19ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBzMmlvX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIChYRU5BX1JFR19TUEFDRSk7CiB9CiAKIAotdTMyIHMyaW9fZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyB1MzIgczJpb19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKIAogCXJldHVybiAoc3AtPnJ4X2NzdW0pOwogfQotaW50IHMyaW9fZXRodG9vbF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKKworc3RhdGljIGludCBzMmlvX2V0aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCkBAIC01MTI5LDE3ICs1MTI5LDE5IEBACiAKIAlyZXR1cm4gMDsKIH0KLWludCBzMmlvX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisKK3N0YXRpYyBpbnQgczJpb19nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAoWEVOQV9FRVBST01fU1BBQ0UpOwogfQogCi1pbnQgczJpb19ldGh0b29sX3NlbGZfdGVzdF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBzMmlvX2V0aHRvb2xfc2VsZl90ZXN0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIChTMklPX1RFU1RfTEVOKTsKIH0KLXZvaWQgczJpb19ldGh0b29sX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCisKK3N0YXRpYyB2b2lkIHMyaW9fZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQogewogCXN3aXRjaCAoc3RyaW5nc2V0KSB7CiAJY2FzZSBFVEhfU1NfVEVTVDoKQEAgLTUxNTUsNyArNTE1Nyw3IEBACiAJcmV0dXJuIChTMklPX1NUQVRfTEVOKTsKIH0KIAotaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgczJpb19ldGh0b29sX29wX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCWlmIChkYXRhKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKQEAgLTUyMDgsNyArNTIxMCw3IEBACiAgKiAgZnVuY3Rpb24gYWx3YXlzIHJldHVybiBFT1BOT1RTVVBQT1JURUQKICAqLwogCi1pbnQgczJpb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQorc3RhdGljIGludCBzMmlvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpAQCAtNTIyNCw3ICs1MjI2LDcgQEAKICAqICAgZmlsZSBvbiBmYWlsdXJlLgogICovCiAKLWludCBzMmlvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitzdGF0aWMgaW50IHMyaW9fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RydjFzdC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2MXN0LmgKaW5kZXggMzA4NDQwYi4uOTFiOGQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2MXN0LmgKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2MXN0LmgKQEAgLTM5LDkgKzM5LDYgQEAKICNpZm5kZWYgX19JTkNfU0tEUlYxU1RfSAogI2RlZmluZSBfX0lOQ19TS0RSVjFTVF9ICiAKLS8qIENoZWNrIGtlcm5lbCB2ZXJzaW9uICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiB0eXBlZGVmIHN0cnVjdCBzX0FDCVNLX0FDOwogCiAvKiBTZXQgY2FyZCB2ZXJzaW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tfbWNhLmMgYi9kcml2ZXJzL25ldC9za19tY2EuYwppbmRleCA0YzU2YjhkLi5lNWQ2ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za19tY2EuYworKysgYi9kcml2ZXJzL25ldC9za19tY2EuYwpAQCAtOTMsNyArOTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21jYS1sZWdhY3kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za19tY2EuaCBiL2RyaXZlcnMvbmV0L3NrX21jYS5oCmluZGV4IDdlN2M5OTUuLmQ2ZmExODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrX21jYS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrX21jYS5oCkBAIC0xLDUgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogI2lmbmRlZiBfU0tfTUNBX0lOQ0xVREVfCiAjZGVmaW5lIF9TS19NQ0FfSU5DTFVERV8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDU3MmYxMjEuLjU5NmM5M2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0zNywxMiArMzcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlICJza2dlLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza2dlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjIiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAjZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFCTEyOApAQCAtODgsOCArODksOCBAQAogc3RhdGljIGludCBza2dlX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBza2dlX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBza2dlX3R4X2NsZWFuKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpOwotc3RhdGljIHZvaWQgeG1fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpOwotc3RhdGljIHZvaWQgZ21fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpOworc3RhdGljIGludCB4bV9waHlfd3JpdGUoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCk7CitzdGF0aWMgaW50IGdtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKTsKIHN0YXRpYyB2b2lkIGdlbmVzaXNfZ2V0X3N0YXRzKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsIHU2NCAqZGF0YSk7CiBzdGF0aWMgdm9pZCB5dWtvbl9nZXRfc3RhdHMoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSwgdTY0ICpkYXRhKTsKIHN0YXRpYyB2b2lkIHl1a29uX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCk7CkBAIC0xMjksNyArMTMwLDcgQEAKIAkJICAgICAgcmVncy0+bGVuIC0gQjNfUklfV1RPX1IxKTsKIH0KIAotLyogV2FrZSBvbiBMYW4gb25seSBzdXBwb3J0ZWQgb24gWXVrb24gY2hwcyB3aXRoIHJldiAxIG9yIGFib3ZlICovCisvKiBXYWtlIG9uIExhbiBvbmx5IHN1cHBvcnRlZCBvbiBZdWtvbiBjaGlwcyB3aXRoIHJldiAxIG9yIGFib3ZlICovCiBzdGF0aWMgaW50IHdvbF9zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHNrZ2VfaHcgKmh3KQogewogCXJldHVybiAhKChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMgfHwKQEAgLTE2OSw4ICsxNzAsOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBEZXRlcm1pbmUgc3VwcG9ydGVkL2FkdmVyaXNlZCBtb2RlcyBiYXNlZCBvbiBoYXJkd2FyZS4KLSAqIE5vdGU6IGV0aHRvb29sIEFEVkVSVElTRURfeHh4ID09IFNVUFBPUlRFRF94eHgKKy8qIERldGVybWluZSBzdXBwb3J0ZWQvYWR2ZXJ0aXNlZCBtb2RlcyBiYXNlZCBvbiBoYXJkd2FyZS4KKyAqIE5vdGU6IGV0aHRvb2wgQURWRVJUSVNFRF94eHggPT0gU1VQUE9SVEVEX3h4eAogICovCiBzdGF0aWMgdTMyIHNrZ2Vfc3VwcG9ydGVkX21vZGVzKGNvbnN0IHN0cnVjdCBza2dlX2h3ICpodykKIHsKQEAgLTUzMSwxMyArNTMyLDEzIEBACiAJCXJldHVybiA3ODIxNTsgLyogb3I6ICA3OC4xMjUgTUh6ICovCiB9CiAKLS8qIENoaXAgaHogdG8gbWljcm9zZWNvbmRzICovCisvKiBDaGlwIEhaIHRvIG1pY3Jvc2Vjb25kcyAqLwogc3RhdGljIGlubGluZSB1MzIgc2tnZV9jbGsydXNlYyhjb25zdCBzdHJ1Y3Qgc2tnZV9odyAqaHcsIHUzMiB0aWNrcykKIHsKIAlyZXR1cm4gKHRpY2tzICogMTAwMCkgLyBod2toeihodyk7CiB9CiAKLS8qIE1pY3Jvc2Vjb25kcyB0byBjaGlwIGh6ICovCisvKiBNaWNyb3NlY29uZHMgdG8gY2hpcCBIWiAqLwogc3RhdGljIGlubGluZSB1MzIgc2tnZV91c2VjczJjbGsoY29uc3Qgc3RydWN0IHNrZ2VfaHcgKmh3LCB1MzIgdXNlYykKIHsKIAlyZXR1cm4gaHdraHooaHcpICogdXNlYyAvIDEwMDA7CkBAIC04ODMsMzIgKzg4NCwzNyBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgZG93bi5cbiIsIHNrZ2UtPm5ldGRldi0+bmFtZSk7CiB9CiAKLXN0YXRpYyB1MTYgeG1fcGh5X3JlYWQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZykKK3N0YXRpYyBpbnQgX194bV9waHlfcmVhZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgKnZhbCkKIHsKIAlpbnQgaTsKLQl1MTYgdjsKIAogCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX1BIWV9BRERSLCByZWcgfCBody0+cGh5X2FkZHIpOwotCXYgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX1BIWV9EQVRBKTsKKwl4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX1BIWV9EQVRBKTsKIAogCS8qIE5lZWQgdG8gd2FpdCBmb3IgZXh0ZXJuYWwgUEhZICovCiAJZm9yIChpID0gMDsgaSA8IFBIWV9SRVRSSUVTOyBpKyspIHsKIAkJdWRlbGF5KDEpOwotCQlpZiAoeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKQotCQkgICAgJiBYTV9NTVVfUEhZX1JEWSkKKwkJaWYgKHhtX3JlYWQxNihodywgcG9ydCwgWE1fTU1VX0NNRCkgJiBYTV9NTVVfUEhZX1JEWSkKIAkJCWdvdG8gcmVhZHk7CiAJfQogCi0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgcmVhZCB0aW1lZCBvdXRcbiIsCi0JICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOwotCXJldHVybiAwOworCXJldHVybiAtRVRJTUVET1VUOwogIHJlYWR5OgotCXYgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX1BIWV9EQVRBKTsKKwkqdmFsID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9QSFlfREFUQSk7CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiB4bV9waHlfcmVhZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnKQoreworCXUxNiB2ID0gMDsKKwlpZiAoX194bV9waHlfcmVhZChodywgcG9ydCwgcmVnLCAmdikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHJlYWQgdGltZWQgb3V0XG4iLAorCQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7CiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyB2b2lkIHhtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKQorc3RhdGljIGludCB4bV9waHlfd3JpdGUoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCkKIHsKIAlpbnQgaTsKIApAQCAtOTE4LDE5ICs5MjQsMTEgQEAKIAkJCWdvdG8gcmVhZHk7CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgd3JpdGUgZmFpbGVkIHRvIGNvbWUgcmVhZHlcbiIsCi0JICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOwotCisJcmV0dXJuIC1FSU87CiAKICByZWFkeToKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9QSFlfREFUQSwgdmFsKTsKLQlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgewotCQl1ZGVsYXkoMSk7Ci0JCWlmICghKHhtX3JlYWQxNihodywgcG9ydCwgWE1fTU1VX0NNRCkgJiBYTV9NTVVfUEhZX0JVU1kpKQotCQkJcmV0dXJuOwotCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSB3cml0ZSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBody0+ZGV2W3BvcnRdLT5uYW1lKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXNpc19pbml0KHN0cnVjdCBza2dlX2h3ICpodykKQEAgLTExNjUsNyArMTE2Myw3IEBACiAJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9QX0VYVF9DVFJMLCBleHQpOwogCXhtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX0JDT01fQ1RSTCwgY3RsKTsKIAotCS8qIFVzZSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJycnVwdCAqLworCS8qIFVzZSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0ICovCiAJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9JTlRfTUFTSywgUEhZX0JfREVGX01TSyk7CiAKIAliY29tX2NoZWNrX2xpbmsoaHcsIHBvcnQpOwpAQCAtMTIwNSw3ICsxMjAzLDcgQEAKIAlza2dlX3dyaXRlMzIoaHcsIEIyX0dQX0lPLCByKTsKIAlza2dlX3JlYWQzMihodywgQjJfR1BfSU8pOwogCi0JLyogRW5hYmxlIEdNSUkgaW50ZXJmYWMgKi8KKwkvKiBFbmFibGUgR01JSSBpbnRlcmZhY2UgKi8KIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9IV19DRkcsIFhNX0hXX0dNSUlfTUQpOwogCiAJYmNvbV9waHlfaW5pdChza2dlLCBqdW1ibyk7CkBAIC0xMjU2LDcgKzEyNTQsNyBAQAogCSAqIHRoYXQganVtYm8gZnJhbWVzIGxhcmdlciB0aGFuIDgxOTIgYnl0ZXMgd2lsbCBiZQogCSAqIHRydW5jYXRlZC4gRGlzYWJsaW5nIGFsbCBiYWQgZnJhbWUgZmlsdGVyaW5nIGNhdXNlcwogCSAqIHRoZSBSWCBGSUZPIHRvIG9wZXJhdGUgaW4gc3RyZWFtaW5nIG1vZGUsIGluIHdoaWNoCi0JICogY2FzZSB0aGUgWE1BQyB3aWxsIHN0YXJ0IHRyYW5zZmVyaW5nIGZyYW1lcyBvdXQgb2YgdGhlCisJICogY2FzZSB0aGUgWE1BQyB3aWxsIHN0YXJ0IHRyYW5zZmVycmluZyBmcmFtZXMgb3V0IG9mIHRoZQogCSAqIFJYIEZJRk8gYXMgc29vbiBhcyB0aGUgRklGTyB0aHJlc2hvbGQgaXMgcmVhY2hlZC4KIAkgKi8KIAl4bV93cml0ZTMyKGh3LCBwb3J0LCBYTV9NT0RFLCBYTV9ERUZfTU9ERSk7CkBAIC0xMzIzLDcgKzEzMjEsNyBAQAogCQkgICAgIHBvcnQgPT0gMCA/IFBBX0NMUl9UT19UWDEgOiBQQV9DTFJfVE9fVFgyKTsKIAogCS8qCi0JICogSWYgdGhlIHRyYW5zZmVyIHN0dWNrcyBhdCB0aGUgTUFDIHRoZSBTVE9QIGNvbW1hbmQgd2lsbCBub3QKKwkgKiBJZiB0aGUgdHJhbnNmZXIgc3RpY2tzIGF0IHRoZSBNQUMgdGhlIFNUT1AgY29tbWFuZCB3aWxsIG5vdAogCSAqIHRlcm1pbmF0ZSBpZiB3ZSBkb24ndCBmbHVzaCB0aGUgWE1BQydzIHRyYW5zbWl0IEZJRk8gIQogCSAqLwogCXhtX3dyaXRlMzIoaHcsIHBvcnQsIFhNX01PREUsCkBAIC0xNDAwLDQyICsxMzk4LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKQotewotCWludCBpOwotCi0JZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1NNSV9EQVRBLCB2YWwpOwotCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9TTUlfQ1RSTCwKLQkJCSBHTV9TTUlfQ1RfUEhZX0FEKGh3LT5waHlfYWRkcikgfCBHTV9TTUlfQ1RfUkVHX0FEKHJlZykpOwotCWZvciAoaSA9IDA7IGkgPCBQSFlfUkVUUklFUzsgaSsrKSB7Ci0JCXVkZWxheSgxKTsKLQotCQlpZiAoIShnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9TTUlfQ1RSTCkgJiBHTV9TTUlfQ1RfQlVTWSkpCi0JCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB1MTYgZ21fcGh5X3JlYWQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZykKLXsKLQlpbnQgaTsKLQotCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9TTUlfQ1RSTCwKLQkJCSBHTV9TTUlfQ1RfUEhZX0FEKGh3LT5waHlfYWRkcikKLQkJCSB8IEdNX1NNSV9DVF9SRUdfQUQocmVnKSB8IEdNX1NNSV9DVF9PUF9SRCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgewotCQl1ZGVsYXkoMSk7Ci0JCWlmIChnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9TTUlfQ1RSTCkgJiBHTV9TTUlfQ1RfUkRfVkFMKQotCQkJZ290byByZWFkeTsKLQl9Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSByZWFkIHRpbWVvdXRcbiIsCi0JICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOwotCXJldHVybiAwOwotIHJlYWR5OgotCXJldHVybiBnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9TTUlfREFUQSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdlbmVzaXNfbGlua191cChzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlKQogewogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwpAQCAtMTU0OSw3ICsxNTExLDU1IEBACiAKIH0KIAotLyogTWFydmVsbCBQaHkgSW5pdGFpbGl6YXRpb24gKi8KK3N0YXRpYyBpbnQgZ21fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJaW50IGk7CisKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fU01JX0RBVEEsIHZhbCk7CisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMLAorCQkJIEdNX1NNSV9DVF9QSFlfQUQoaHctPnBoeV9hZGRyKSB8IEdNX1NNSV9DVF9SRUdfQUQocmVnKSk7CisJZm9yIChpID0gMDsgaSA8IFBIWV9SRVRSSUVTOyBpKyspIHsKKwkJdWRlbGF5KDEpOworCisJCWlmICghKGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMKSAmIEdNX1NNSV9DVF9CVVNZKSkKKwkJCXJldHVybiAwOworCX0KKworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHdyaXRlIHRpbWVvdXRcbiIsCisJICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZ21fcGh5X3JlYWQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2ICp2YWwpCit7CisJaW50IGk7CisKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fU01JX0NUUkwsCisJCQkgR01fU01JX0NUX1BIWV9BRChody0+cGh5X2FkZHIpCisJCQkgfCBHTV9TTUlfQ1RfUkVHX0FEKHJlZykgfCBHTV9TTUlfQ1RfT1BfUkQpOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9SRVRSSUVTOyBpKyspIHsKKwkJdWRlbGF5KDEpOworCQlpZiAoZ21hX3JlYWQxNihodywgcG9ydCwgR01fU01JX0NUUkwpICYgR01fU01JX0NUX1JEX1ZBTCkKKwkJCWdvdG8gcmVhZHk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7CisgcmVhZHk6CisJKnZhbCA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9EQVRBKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiBnbV9waHlfcmVhZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnKQoreworCXUxNiB2ID0gMDsKKwlpZiAoX19nbV9waHlfcmVhZChodywgcG9ydCwgcmVnLCAmdikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHJlYWQgdGltZW91dFxuIiwKKwkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7CisJcmV0dXJuIHY7Cit9CisKKy8qIE1hcnZlbGwgUGh5IEluaXRpYWxpemF0aW9uICovCiBzdGF0aWMgdm9pZCB5dWtvbl9pbml0KHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQpCiB7CiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGh3LT5kZXZbcG9ydF0pOwpAQCAtMTc5NCw2ICsxODA0LDI1IEBACiAJc2tnZV93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIEdNRl9PUEVSX09OKTsKIH0KIAorLyogR28gaW50byBwb3dlciBkb3duIG1vZGUgKi8KK3N0YXRpYyB2b2lkIHl1a29uX3N1c3BlbmQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCkKK3sKKwl1MTYgY3RybDsKKworCWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwpOworCWN0cmwgfD0gUEhZX01fUENfUE9MX1JfRElTOworCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGN0cmwpOworCisJY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9DVFJMKTsKKwljdHJsIHw9IFBIWV9DVF9SRVNFVDsKKwlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0NUUkwsIGN0cmwpOworCisJLyogc3dpdGNoIElFRUUgY29tcGF0aWJsZSBwb3dlciBkb3duIG1vZGUgb24gKi8KKwljdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0NUUkwpOworCWN0cmwgfD0gUEhZX0NUX1BET1dOOworCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQ1RSTCwgY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIHl1a29uX3N0b3Aoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKIHsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKQEAgLTE4MDcsMTQgKzE4MzYsNyBAQAogCQkJICYgfihHTV9HUENSX1RYX0VOQXxHTV9HUENSX1JYX0VOQSkpOwogCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwogCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fTElURSAmJgotCSAgICBody0+Y2hpcF9yZXYgPj0gQ0hJUF9SRVZfWVVfTElURV9BMykgewotCQl1MzIgaW8gPSBza2dlX3JlYWQzMihodywgQjJfR1BfSU8pOwotCi0JCWlvIHw9IEdQX0RJUl85IHwgR1BfSU9fOTsKLQkJc2tnZV93cml0ZTMyKGh3LCBCMl9HUF9JTywgaW8pOwotCQlza2dlX3JlYWQzMihodywgQjJfR1BfSU8pOwotCX0KKwl5dWtvbl9zdXNwZW5kKGh3LCBwb3J0KTsKIAogCS8qIHNldCBHUEhZIENvbnRyb2wgcmVzZXQgKi8KIAlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdQSFlfQ1RSTCksIEdQQ19SU1RfU0VUKTsKQEAgLTE5OTcsNiArMjAxOSw1MSBAQAogCS8qIFhYWCByZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbj8gKi8KIH0KIAorLyogQmFzaWMgTUlJIHN1cHBvcnQgKi8KK3N0YXRpYyBpbnQgc2tnZV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKKwlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKKwlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CS8qIFBoeSBzdGlsbCBpbiByZXNldCAqLworCisJc3dpdGNoKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCWRhdGEtPnBoeV9pZCA9IGh3LT5waHlfYWRkcjsKKworCQkvKiBmYWxsdGhydSAqLworCWNhc2UgU0lPQ0dNSUlSRUc6IHsKKwkJdTE2IHZhbCA9IDA7CisJCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKKwkJCWVyciA9IF9feG1fcGh5X3JlYWQoaHcsIHNrZ2UtPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLCAmdmFsKTsKKwkJZWxzZQorCQkJZXJyID0gX19nbV9waHlfcmVhZChodywgc2tnZS0+cG9ydCwgZGF0YS0+cmVnX251bSAmIDB4MWYsICZ2YWwpOworCQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwkJZGF0YS0+dmFsX291dCA9IHZhbDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBTSU9DU01JSVJFRzoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCisJCQllcnIgPSB4bV9waHlfd3JpdGUoaHcsIHNrZ2UtPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLAorCQkJCSAgIGRhdGEtPnZhbF9pbik7CisJCWVsc2UKKwkJCWVyciA9IGdtX3BoeV93cml0ZShodywgc2tnZS0+cG9ydCwgZGF0YS0+cmVnX251bSAmIDB4MWYsCisJCQkJICAgZGF0YS0+dmFsX2luKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBza2dlX3JhbXNldChzdHJ1Y3Qgc2tnZV9odyAqaHcsIHUxNiBxLCB1MzIgc3RhcnQsIHNpemVfdCBsZW4pCiB7CiAJdTMyIGVuZDsKQEAgLTIwODksNyArMjE1Niw3IEBACiAJaHctPmludHJfbWFzayB8PSBwb3J0aXJxbWFza1twb3J0XTsKIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwogCi0JLyogSW5pdGlhbHplIE1BQyAqLworCS8qIEluaXRpYWxpemUgTUFDICovCiAJc3Bpbl9sb2NrX2JoKCZody0+cGh5X2xvY2spOwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCiAJCWdlbmVzaXNfbWFjX2luaXQoaHcsIHBvcnQpOwpAQCAtMjQwOSw3ICsyNDc2LDcgQEAKIAlyZWcgPSBnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9SWF9DVFJMKTsKIAlyZWcgfD0gR01fUlhDUl9VQ0ZfRU5BOwogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgCQkvKiBwcm9taXNjaW91cyAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIAkJLyogcHJvbWlzY3VvdXMgKi8KIAkJcmVnICY9IH4oR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BKTsKIAllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQkvKiBhbGwgbXVsdGljYXN0ICovCiAJCW1lbXNldChmaWx0ZXIsIDB4ZmYsIHNpemVvZihmaWx0ZXIpKTsKQEAgLTI1NjAsNyArMjYyNyw3IEBACiAJdW5zaWduZWQgaW50IHRvX2RvID0gbWluKGRldi0+cXVvdGEsICpidWRnZXQpOwogCXVuc2lnbmVkIGludCB3b3JrX2RvbmUgPSAwOwogCi0JZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHdvcmtfZG9uZSA8IHRvX2RvOyBlID0gZS0+bmV4dCkgeworCWZvciAoZSA9IHJpbmctPnRvX2NsZWFuOyBwcmVmZXRjaChlLT5uZXh0KSwgd29ya19kb25lIDwgdG9fZG87IGUgPSBlLT5uZXh0KSB7CiAJCXN0cnVjdCBza2dlX3J4X2Rlc2MgKnJkID0gZS0+ZGVzYzsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJdTMyIGNvbnRyb2w7CkBAIC0yNTkzLDExICsyNjYwLDExIEBACiAJaWYgKHdvcmtfZG9uZSA+PSAgdG9fZG8pCiAJCXJldHVybiAxOyAvKiBub3QgZG9uZSAqLwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlfX25ldGlmX3J4X2NvbXBsZXRlKGRldik7CisJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKIAlody0+aW50cl9tYXNrIHw9IHBvcnRpcnFtYXNrW3NrZ2UtPnBvcnRdOwogCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCXNrZ2VfcmVhZDMyKGh3LCBCMF9JTVNLKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjA5LDcgKzI2NzYsNyBAQAogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7CiAKIAlzcGluX2xvY2soJnNrZ2UtPnR4X2xvY2spOwotCWZvciAoZSA9IHJpbmctPnRvX2NsZWFuOyBlICE9IHJpbmctPnRvX3VzZTsgZSA9IGUtPm5leHQpIHsKKwlmb3IgKGUgPSByaW5nLT50b19jbGVhbjsgcHJlZmV0Y2goZS0+bmV4dCksIGUgIT0gcmluZy0+dG9fdXNlOyBlID0gZS0+bmV4dCkgewogCQlzdHJ1Y3Qgc2tnZV90eF9kZXNjICp0ZCA9IGUtPmRlc2M7CiAJCXUzMiBjb250cm9sOwogCkBAIC0yNzMyLDcgKzI3OTksNyBAQAogfQogCiAvKgotICogSW50ZXJycnVwdCBmcm9tIFBIWSBhcmUgaGFuZGxlZCBpbiB0YXNrbGV0IChzb2Z0IGlycSkKKyAqIEludGVycnVwdCBmcm9tIFBIWSBhcmUgaGFuZGxlZCBpbiB0YXNrbGV0IChzb2Z0IGlycSkKICAqIGJlY2F1c2UgYWNjZXNzaW5nIHBoeSByZWdpc3RlcnMgcmVxdWlyZXMgc3BpbiB3YWl0IHdoaWNoIG1pZ2h0CiAgKiBjYXVzZSBleGNlc3MgaW50ZXJydXB0IGxhdGVuY3kuCiAgKi8KQEAgLTI3NjIsNiArMjgyOSwxNCBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNrZ2Vfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcmVmZXRjaChza2dlLT5yeF9yaW5nLnRvX2NsZWFuKTsKKwluZXRpZl9yeF9zY2hlZHVsZShkZXYpOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2tnZV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gZGV2X2lkOwpAQCAtMjc3MywxMiArMjg0OCwxMiBAQAogCXN0YXR1cyAmPSBody0+aW50cl9tYXNrOwogCWlmIChzdGF0dXMgJiBJU19SMV9GKSB7CiAJCWh3LT5pbnRyX21hc2sgJj0gfklTX1IxX0Y7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKGh3LT5kZXZbMF0pOworCQlza2dlX3dha2V1cChody0+ZGV2WzBdKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgSVNfUjJfRikgewogCQlody0+aW50cl9tYXNrICY9IH5JU19SMl9GOwotCQluZXRpZl9yeF9zY2hlZHVsZShody0+ZGV2WzFdKTsKKwkJc2tnZV93YWtldXAoaHctPmRldlsxXSk7CiAJfQogCiAJaWYgKHN0YXR1cyAmIElTX1hBMV9GKQpAQCAtMjg5Myw2ICsyOTY4LDcgQEAKICAqLwogc3RhdGljIGludCBza2dlX3Jlc2V0KHN0cnVjdCBza2dlX2h3ICpodykKIHsKKwl1MzIgcmVnOwogCXUxNiBjdHN0OwogCXU4IHQ4LCBtYWNfY2ZnLCBwbWRfdHlwZSwgcGh5X3R5cGU7CiAJaW50IGk7CkBAIC0yOTcxLDYgKzMwNDcsNyBAQAogCQkvKiBzd2l0Y2ggcG93ZXIgdG8gVkNDIChXQSBmb3IgVkFVWCBwcm9ibGVtKSAqLwogCQlza2dlX3dyaXRlOChodywgQjBfUE9XRVJfQ1RSTCwKIAkJCSAgICBQQ19WQVVYX0VOQSB8IFBDX1ZDQ19FTkEgfCBQQ19WQVVYX09GRiB8IFBDX1ZDQ19PTik7CisKIAkJLyogYXZvaWQgYm9hcmRzIHdpdGggc3R1Y2sgSGFyZHdhcmUgZXJyb3IgYml0cyAqLwogCQlpZiAoKHNrZ2VfcmVhZDMyKGh3LCBCMF9JU1JDKSAmIElTX0hXX0VSUikgJiYKIAkJICAgIChza2dlX3JlYWQzMihodywgQjBfSFdFX0lTUkMpICYgSVNfSVJRX1NFTlNPUikpIHsKQEAgLTI5NzgsNiArMzA1NSwxNCBAQAogCQkJaHctPmludHJfbWFzayAmPSB+SVNfSFdfRVJSOwogCQl9CiAKKwkJLyogQ2xlYXIgUEhZIENPTUEgKi8KKwkJc2tnZV93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChody0+cGRldiwgUENJX0RFVl9SRUcxLCAmcmVnKTsKKwkJcmVnICY9IH5QQ0lfUEhZX0NPTUE7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBkZXYsIFBDSV9ERVZfUkVHMSwgcmVnKTsKKwkJc2tnZV93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOworCisKIAkJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CiAJCQlza2dlX3dyaXRlMTYoaHcsIFNLX1JFRyhpLCBHTUFDX0xJTktfQ1RSTCksIEdNTENfUlNUX1NFVCk7CiAJCQlza2dlX3dyaXRlMTYoaHcsIFNLX1JFRyhpLCBHTUFDX0xJTktfQ1RSTCksIEdNTENfUlNUX0NMUik7CkBAIC0zMDQ4LDYgKzMxMzMsNyBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJmh3LT5wZGV2LT5kZXYpOwogCWRldi0+b3BlbiA9IHNrZ2VfdXA7CiAJZGV2LT5zdG9wID0gc2tnZV9kb3duOworCWRldi0+ZG9faW9jdGwgPSBza2dlX2lvY3RsOwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc2tnZV94bWl0X2ZyYW1lOwogCWRldi0+Z2V0X3N0YXRzID0gc2tnZV9nZXRfc3RhdHM7CiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKQEAgLTMxNDcsNyArMzIzMyw3IEBACiAJfQogCiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JLyogYnl0ZSBzd2FwIGRlY3JpcHRvcnMgaW4gaGFyZHdhcmUgKi8KKwkvKiBieXRlIHN3YXAgZGVzY3JpcHRvcnMgaW4gaGFyZHdhcmUgKi8KIAl7CiAJCXUzMiByZWc7CiAKQEAgLTMxNTgsMTQgKzMyNDQsMTMgQEAKICNlbmRpZgogCiAJZXJyID0gLUVOT01FTTsKLQlodyA9IGttYWxsb2Moc2l6ZW9mKCpodyksIEdGUF9LRVJORUwpOworCWh3ID0ga3phbGxvYyhzaXplb2YoKmh3KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFodykgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2Fubm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0cnVjdFxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVnaW9uczsKIAl9CiAKLQltZW1zZXQoaHcsIDAsIHNpemVvZigqaHcpKTsKIAlody0+cGRldiA9IHBkZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmh3LT5waHlfbG9jayk7CiAJdGFza2xldF9pbml0KCZody0+ZXh0X3Rhc2tsZXQsIHNrZ2VfZXh0aXJxLCAodW5zaWduZWQgbG9uZykgaHcpOwpAQCAtMzE4OCw3ICszMjczLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiYWRkciAweCVseCBpcnEgJWQgY2hpcCAlcyByZXYgJWRcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJWX1ZFUlNJT04gIiBhZGRyIDB4JWx4IGlycSAlZCBjaGlwICVzIHJldiAlZFxuIiwKIAkgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsCiAJICAgICAgIHNrZ2VfYm9hcmRfbmFtZShodyksIGh3LT5jaGlwX3Jldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCA3MmMxNzViLi5lZTEyM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC02LDYgKzYsOCBAQAogCiAvKiBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwogI2RlZmluZSBQQ0lfREVWX1JFRzEJMHg0MAorI2RlZmluZSAgUENJX1BIWV9DT01BCTB4ODAwMDAwMAorI2RlZmluZSAgUENJX1ZJTwkweDIwMDAwMDAKICNkZWZpbmUgUENJX0RFVl9SRUcyCTB4NDQKICNkZWZpbmUgIFBDSV9SRVZfREVTQwkgMHg0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IDM4YjJiMGEuLmQxNjdkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMTQ3LDcgKzE0Nyw2IEBACiAjZGVmaW5lIERSVl9SRUxEQVRFCSJPY3RvYmVyIDMsIDIwMDUiCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGEzNjhkMDhlLi44MmM2Yjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggNmFmYzZlNS4uMzQwYWI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNDUzNSw5ICs0NTM1LDggQEAKIAlTdGF0dXNSaWQgc3RhdHVzX3JpZDsKIAlpbnQgaTsKIAotCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChmaWxlLT5wcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhKSk7CiAJZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICgoZGF0YS0+cmJ1ZmZlciA9IGttYWxsb2MoIDIwNDgsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTQ2MTUsOSArNDYxNCw4IEBACiAJaW50IGksIGo7CiAJdTMyICp2YWxzID0gc3RhdHMudmFsczsKIAotCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChmaWxlLT5wcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhKSk7CiAJZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICgoZGF0YS0+cmJ1ZmZlciA9IGttYWxsb2MoIDQwOTYsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTQ4ODEsMjAgKzQ4NzksMTggQEAKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+cHJpdjsKIAlpbnQgaTsKIAotCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChmaWxlLT5wcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhKSk7CiAJZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICgoZGF0YS0+cmJ1ZmZlciA9IGttYWxsb2MoIDIwNDgsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWlmICgoZGF0YS0+d2J1ZmZlciA9IGttYWxsb2MoIDIwNDgsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgeworCWlmICgoZGF0YS0+d2J1ZmZlciA9IGt6YWxsb2MoIDIwNDgsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZGF0YS0+cmJ1ZmZlcik7CiAJCWtmcmVlIChmaWxlLT5wcml2YXRlX2RhdGEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KCBkYXRhLT53YnVmZmVyLCAwLCAyMDQ4ICk7CiAJZGF0YS0+bWF4d3JpdGVsZW4gPSAyMDQ4OwogCWRhdGEtPm9uX2Nsb3NlID0gcHJvY19jb25maWdfb25fY2xvc2U7CiAKQEAgLTUxNTUsMjQgKzUxNTEsMjEgQEAKIAlpbnQgaj0wOwogCWludCByYzsKIAotCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChmaWxlLT5wcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhKSk7CiAJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKIAlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaWYgKChkYXRhLT5yYnVmZmVyID0ga21hbGxvYyggMTgwLCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKKwlpZiAoKGRhdGEtPnJidWZmZXIgPSBremFsbG9jKCAxODAsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChkYXRhLT5yYnVmZmVyLCAwLCAxODApOwogCWRhdGEtPndyaXRlbGVuID0gMDsKIAlkYXRhLT5tYXh3cml0ZWxlbiA9IDgwOwotCWlmICgoZGF0YS0+d2J1ZmZlciA9IGttYWxsb2MoIDgwLCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKKwlpZiAoKGRhdGEtPndidWZmZXIgPSBremFsbG9jKCA4MCwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CiAJCWtmcmVlIChkYXRhLT5yYnVmZmVyKTsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoIGRhdGEtPndidWZmZXIsIDAsIDgwICk7CiAJZGF0YS0+b25fY2xvc2UgPSBwcm9jX3dlcGtleV9vbl9jbG9zZTsKIAogCXB0ciA9IGRhdGEtPnJidWZmZXI7CkBAIC01MjAzLDkgKzUxOTYsOCBAQAogCWNoYXIgKnB0cjsKIAlTc2lkUmlkIFNTSURfcmlkOwogCi0JaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGZpbGUtPnByaXZhdGVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEpKTsKIAlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKChkYXRhLT5yYnVmZmVyID0ga21hbGxvYyggMTA0LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CkBAIC01MjEzLDEyICs1MjA1LDExIEBACiAJfQogCWRhdGEtPndyaXRlbGVuID0gMDsKIAlkYXRhLT5tYXh3cml0ZWxlbiA9IDMzKjM7Ci0JaWYgKChkYXRhLT53YnVmZmVyID0ga21hbGxvYyggMzMqMywgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CisJaWYgKChkYXRhLT53YnVmZmVyID0ga3phbGxvYyggMzMqMywgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CiAJCWtmcmVlIChkYXRhLT5yYnVmZmVyKTsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoIGRhdGEtPndidWZmZXIsIDAsIDMzKjMgKTsKIAlkYXRhLT5vbl9jbG9zZSA9IHByb2NfU1NJRF9vbl9jbG9zZTsKIAogCXJlYWRTc2lkUmlkKGFpLCAmU1NJRF9yaWQpOwpAQCAtNTI0Nyw5ICs1MjM4LDggQEAKIAljaGFyICpwdHI7CiAJQVBMaXN0UmlkIEFQTGlzdF9yaWQ7CiAKLQlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmlsZS0+cHJpdmF0ZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHByb2NfZGF0YSkpOwogCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAxMDQsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTUyNTcsMTIgKzUyNDcsMTEgQEAKIAl9CiAJZGF0YS0+d3JpdGVsZW4gPSAwOwogCWRhdGEtPm1heHdyaXRlbGVuID0gNCo2KjM7Ci0JaWYgKChkYXRhLT53YnVmZmVyID0ga21hbGxvYyggZGF0YS0+bWF4d3JpdGVsZW4sIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgeworCWlmICgoZGF0YS0+d2J1ZmZlciA9IGt6YWxsb2MoIGRhdGEtPm1heHdyaXRlbGVuLCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGRhdGEtPnJidWZmZXIpOwogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCggZGF0YS0+d2J1ZmZlciwgMCwgZGF0YS0+bWF4d3JpdGVsZW4gKTsKIAlkYXRhLT5vbl9jbG9zZSA9IHByb2NfQVBMaXN0X29uX2Nsb3NlOwogCiAJcmVhZEFQTGlzdFJpZChhaSwgJkFQTGlzdF9yaWQpOwpAQCAtNTI5Nyw5ICs1Mjg2LDggQEAKIAkvKiBJZiBkb0xvc2VTeW5jIGlzIG5vdCAxLCB3ZSB3b24ndCBkbyBhIExvc2UgU3luYyAqLwogCWludCBkb0xvc2VTeW5jID0gLTE7CiAKLQlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmlsZS0+cHJpdmF0ZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHByb2NfZGF0YSkpOwogCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAxMDI0LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggOTZlZDhkYS4uZTMyODU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtMTcwLDEyICsxNzAsMTEgQEAKIAlERUJVRygwLCAiYWlyb19hdHRhY2goKVxuIik7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSAqLwotCWxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOworCWxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwogCWlmICghbGluaykgewogCQlwcmludGsoS0VSTl9FUlIgImFpcm9fY3M6IG5vIG1lbW9yeSBmb3IgbmV3IGRldmljZVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7CiAJCiAJLyogSW50ZXJydXB0IHNldHVwICovCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CkBAIC0xOTQsMTMgKzE5MywxMiBAQAogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCQogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCi0JbG9jYWwgPSBrbWFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhaXJvX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwogCQlrZnJlZSAobGluayk7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQobG9jYWwsIDAsIHNpemVvZihsb2NhbF9pbmZvX3QpKTsKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAJCiAJLyogUmVnaXN0ZXIgd2l0aCBDYXJkIFNlcnZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCAxZmJlMDI3Li5hM2UyMzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTIyMTcsNyArMjIxNyw3IEBACiAJaW50IGssaSxqOwogCiAJZHdycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKIAlyYW5nZS0+bWluX253aWQgPSAweDAwMDA7CiAJcmFuZ2UtPm1heF9ud2lkID0gMHgwMDAwOwogCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKaW5kZXggMTk1Y2IzNi4uMWJkMTMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCkBAIC0xODAsMTIgKzE4MCwxMSBAQAogCURFQlVHKDAsICJhdG1lbF9hdHRhY2goKVxuIik7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSAqLwotCWxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOworCWxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwogCWlmICghbGluaykgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwogCQogCS8qIEludGVycnVwdCBzZXR1cCAqLwogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwpAQCAtMjA0LDEzICsyMDMsMTIgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAkKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwotCWxvY2FsID0ga21hbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRtZWxfY3M6IG5vIG1lbW9yeSBmb3IgbmV3IGRldmljZVxuIik7CiAJCWtmcmVlIChsaW5rKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwogCWxpbmstPnByaXYgPSBsb2NhbDsKIAkKIAkvKiBSZWdpc3RlciB3aXRoIENhcmQgU2VydmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuYwppbmRleCA2YTk2Y2Q5Li4zZDJlYTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCmluZGV4IDU5ZmMxNTUuLmFiZmFlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKQEAgLTMxLDcgKzMxLDYgQEAKIAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCmluZGV4IGRhMGM4MGYuLjJlODViZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwpAQCAtNSw3ICs1LDYgQEAKICAqIEFuZHkgV2FybmVyIDxhbmR5d0Bwb2JveC5jb20+ICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwppbmRleCA3OGQ2N2I0MDguLjk0ZmUyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwpAQCAtOCw3ICs4LDYgQEAKIAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCmluZGV4IGFkN2Y4Y2QuLmEyZTYyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKQEAgLTE2NywxNyArMTY3LDE2IEBACiAKICNpbmNsdWRlICJpcHcyMTAwLmgiCiAKLSNkZWZpbmUgSVBXMjEwMF9WRVJTSU9OICIxLjEuMCIKKyNkZWZpbmUgSVBXMjEwMF9WRVJTSU9OICIxLjEuMyIKIAogI2RlZmluZSBEUlZfTkFNRQkiaXB3MjEwMCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JSVBXMjEwMF9WRVJTSU9OCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIxMDAgTmV0d29yayBEcml2ZXIiCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24iCi0KKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbiIKIAogLyogRGVidWdnaW5nIHN0dWZmICovCiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwotI2RlZmluZSBDT05GSUdfSVBXMjEwMF9SWF9ERUJVRyAgIC8qIFJlY2VwdGlvbiBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgQ09ORklHX0lQVzIxMDBfUlhfREVCVUcJLyogUmVjZXB0aW9uIGRlYnVnZ2luZyAqLwogI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMjIwLDE4ICsyMTksMTggQEAKIH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBJUFdfREVCVUcobGV2ZWwsIG1lc3NhZ2UuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmIC8qIENPTkZJR19JUFdfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX0RFQlVHICovCiAKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiBzdGF0aWMgY29uc3QgY2hhciAqY29tbWFuZF90eXBlc1tdID0gewogCSJ1bmRlZmluZWQiLAotCSJ1bnVzZWQiLCAvKiBIT1NUX0FUVEVOVElPTiAqLworCSJ1bnVzZWQiLAkJLyogSE9TVF9BVFRFTlRJT04gKi8KIAkiSE9TVF9DT01QTEVURSIsCi0JInVudXNlZCIsIC8qIFNMRUVQICovCi0JInVudXNlZCIsIC8qIEhPU1RfUE9XRVJfRE9XTiAqLworCSJ1bnVzZWQiLAkJLyogU0xFRVAgKi8KKwkidW51c2VkIiwJCS8qIEhPU1RfUE9XRVJfRE9XTiAqLwogCSJ1bnVzZWQiLAogCSJTWVNURU1fQ09ORklHIiwKLQkidW51c2VkIiwgLyogU0VUX0lNUiAqLworCSJ1bnVzZWQiLAkJLyogU0VUX0lNUiAqLwogCSJTU0lEIiwKIAkiTUFOREFUT1JZX0JTU0lEIiwKIAkiQVVUSEVOVElDQVRJT05fVFlQRSIsCkBAIC0yNzcsMTcgKzI3NiwxNiBAQAogCSJHUk9VUF9PUkRJTkFMUyIsCiAJIlNIT1JUX1JFVFJZX0xJTUlUIiwKIAkiTE9OR19SRVRSWV9MSU1JVCIsCi0JInVudXNlZCIsIC8qIFNBVkVfQ0FMSUJSQVRJT04gKi8KLQkidW51c2VkIiwgLyogUkVTVE9SRV9DQUxJQlJBVElPTiAqLworCSJ1bnVzZWQiLAkJLyogU0FWRV9DQUxJQlJBVElPTiAqLworCSJ1bnVzZWQiLAkJLyogUkVTVE9SRV9DQUxJQlJBVElPTiAqLwogCSJ1bmRlZmluZWQiLAogCSJ1bmRlZmluZWQiLAogCSJ1bmRlZmluZWQiLAogCSJIT1NUX1BSRV9QT1dFUl9ET1dOIiwKLQkidW51c2VkIiwgLyogSE9TVF9JTlRFUlJVUFRfQ09BTEVTQ0lORyAqLworCSJ1bnVzZWQiLAkJLyogSE9TVF9JTlRFUlJVUFRfQ09BTEVTQ0lORyAqLwogCSJ1bmRlZmluZWQiLAogCSJDQVJEX0RJU0FCTEVfUEhZX09GRiIsCi0JIk1TRFVfVFhfUkFURVMiCi0JInVuZGVmaW5lZCIsCisJIk1TRFVfVFhfUkFURVMiICJ1bmRlZmluZWQiLAogCSJ1bmRlZmluZWQiLAogCSJTRVRfU1RBVElPTl9TVEFUX0JJVFMiLAogCSJDTEVBUl9TVEFUSU9OU19TVEFUX0JJVFMiLApAQCAtMjk4LDcgKzI5Niw2IEBACiB9OwogI2VuZGlmCiAKLQogLyogUHJlLWRlY2wgdW50aWwgd2UgZ2V0IHRoZSBjb2RlIHNvbGlkIGFuZCB0aGVuIHdlIGNhbiBjbGVhbiBpdCB1cCAqLwogc3RhdGljIHZvaWQgaXB3MjEwMF90eF9zZW5kX2NvbW1hbmRzKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpOwogc3RhdGljIHZvaWQgaXB3MjEwMF90eF9zZW5kX2RhdGEoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7CkBAIC0zMjEsMTEgKzMxOCwxMCBAQAogc3RhdGljIGludCBpcHcyMTAwX3Vjb2RlX2Rvd25sb2FkKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCiAJCQkJICBzdHJ1Y3QgaXB3MjEwMF9mdyAqZncpOwogc3RhdGljIHZvaWQgaXB3MjEwMF93eF9ldmVudF93b3JrKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpOwotc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICppcHcyMTAwX3d4X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXB3MjEwMF93eF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXB3MjEwMF93eF9oYW5kbGVyX2RlZjsKIAotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcmVnLCB1MzIgKnZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZWcsIHUzMiAqIHZhbCkKIHsKIAkqdmFsID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKShkZXYtPmJhc2VfYWRkciArIHJlZykpOwogCUlQV19ERUJVR19JTygicjogMHglMDhYID0+IDB4JTA4WFxuIiwgcmVnLCAqdmFsKTsKQEAgLTMzNywxMyArMzMzLDE0IEBACiAJSVBXX0RFQlVHX0lPKCJ3OiAweCUwOFggPD0gMHglMDhYXG4iLCByZWcsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkX3JlZ2lzdGVyX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlZywgdTE2ICp2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9yZWdpc3Rlcl93b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZWcsCisJCQkJICAgICAgdTE2ICogdmFsKQogewogCSp2YWwgPSByZWFkdygodm9pZCBfX2lvbWVtICopKGRldi0+YmFzZV9hZGRyICsgcmVnKSk7CiAJSVBXX0RFQlVHX0lPKCJyOiAweCUwOFggPT4gJTA0WFxuIiwgcmVnLCAqdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRfcmVnaXN0ZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcmVnLCB1OCAqdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRfcmVnaXN0ZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcmVnLCB1OCAqIHZhbCkKIHsKIAkqdmFsID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKShkZXYtPmJhc2VfYWRkciArIHJlZykpOwogCUlQV19ERUJVR19JTygicjogMHglMDhYID0+ICUwMlhcbiIsIHJlZywgKnZhbCk7CkBAIC0zNTUsMTQgKzM1MiwxMyBAQAogCUlQV19ERUJVR19JTygidzogMHglMDhYIDw9ICUwNFhcbiIsIHJlZywgdmFsKTsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfcmVnaXN0ZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcmVnLCB1OCB2YWwpCiB7CiAJd3JpdGViKHZhbCwgKHZvaWQgX19pb21lbSAqKShkZXYtPmJhc2VfYWRkciArIHJlZykpOwogCUlQV19ERUJVR19JTygidzogMHglMDhYID08ICUwMlhcbiIsIHJlZywgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRfbmljX2R3b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX25pY19kd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTMyICogdmFsKQogewogCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfQUREUkVTUywKIAkJICAgICAgIGFkZHIgJiBJUFdfUkVHX0lORElSRUNUX0FERFJfTUFTSyk7CkBAIC0zNzYsNyArMzcyLDcgQEAKIAl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkX25pY193b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1MTYgKnZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX25pY193b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1MTYgKiB2YWwpCiB7CiAJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19BRERSRVNTLAogCQkgICAgICAgYWRkciAmIElQV19SRUdfSU5ESVJFQ1RfQUREUl9NQVNLKTsKQEAgLTM5MCw3ICszODYsNyBAQAogCXdyaXRlX3JlZ2lzdGVyX3dvcmQoZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19EQVRBLCB2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9uaWNfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTggKnZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX25pY19ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1OCAqIHZhbCkKIHsKIAl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0FERFJFU1MsCiAJCSAgICAgICBhZGRyICYgSVBXX1JFR19JTkRJUkVDVF9BRERSX01BU0spOwpAQCAtNDE2LDcgKzQxMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9uaWNfbWVtb3J5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1MzIgbGVuLAotCQkJCSAgICBjb25zdCB1OCAqYnVmKQorCQkJCSAgICBjb25zdCB1OCAqIGJ1ZikKIHsKIAl1MzIgYWxpZ25lZF9hZGRyOwogCXUzMiBhbGlnbmVkX2xlbjsKQEAgLTQzMSwzMiArNDI3LDMwIEBACiAJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfQUREUkVTUywKIAkJCSAgICAgICBhbGlnbmVkX2FkZHIpOwogCQlmb3IgKGkgPSBkaWZfbGVuOyBpIDwgNDsgaSsrLCBidWYrKykKLQkJCXdyaXRlX3JlZ2lzdGVyX2J5dGUoCi0JCQkJZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19EQVRBICsgaSwKLQkJCQkqYnVmKTsKKwkJCXdyaXRlX3JlZ2lzdGVyX2J5dGUoZGV2LAorCQkJCQkgICAgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSArIGksCisJCQkJCSAgICAqYnVmKTsKIAogCQlsZW4gLT0gZGlmX2xlbjsKIAkJYWxpZ25lZF9hZGRyICs9IDQ7CiAJfQogCiAJLyogcmVhZCBEV3MgdGhyb3VnaCBhdXRvaW5jcmVtZW50IHJlZ2lzdGVycyAqLwotCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0FERFJFU1MsCi0JCSAgICAgICBhbGlnbmVkX2FkZHIpOworCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0FERFJFU1MsIGFsaWduZWRfYWRkcik7CiAJYWxpZ25lZF9sZW4gPSBsZW4gJiAofjB4Myk7CiAJZm9yIChpID0gMDsgaSA8IGFsaWduZWRfbGVuOyBpICs9IDQsIGJ1ZiArPSA0LCBhbGlnbmVkX2FkZHIgKz0gNCkKLQkJd3JpdGVfcmVnaXN0ZXIoCi0JCQlkZXYsIElQV19SRUdfQVVUT0lOQ1JFTUVOVF9EQVRBLCAqKHUzMiAqKWJ1Zik7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0RBVEEsICoodTMyICopIGJ1Zik7CiAKIAkvKiBjb3B5IHRoZSBsYXN0IG5pYmJsZSAqLwogCWRpZl9sZW4gPSBsZW4gLSBhbGlnbmVkX2xlbjsKIAl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0FERFJFU1MsIGFsaWduZWRfYWRkcik7CiAJZm9yIChpID0gMDsgaSA8IGRpZl9sZW47IGkrKywgYnVmKyspCi0JCXdyaXRlX3JlZ2lzdGVyX2J5dGUoCi0JCQlkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEgKyBpLCAqYnVmKTsKKwkJd3JpdGVfcmVnaXN0ZXJfYnl0ZShkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEgKyBpLAorCQkJCSAgICAqYnVmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlYWRfbmljX21lbW9yeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTMyIGxlbiwKLQkJCQkgICB1OCAqYnVmKQorCQkJCSAgIHU4ICogYnVmKQogewogCXUzMiBhbGlnbmVkX2FkZHI7CiAJdTMyIGFsaWduZWRfbGVuOwpAQCAtNDcxLDM5ICs0NjUsMzggQEAKIAkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19BRERSRVNTLAogCQkJICAgICAgIGFsaWduZWRfYWRkcik7CiAJCWZvciAoaSA9IGRpZl9sZW47IGkgPCA0OyBpKyssIGJ1ZisrKQotCQkJcmVhZF9yZWdpc3Rlcl9ieXRlKAotCQkJCWRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSArIGksIGJ1Zik7CisJCQlyZWFkX3JlZ2lzdGVyX2J5dGUoZGV2LAorCQkJCQkgICBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19EQVRBICsgaSwKKwkJCQkJICAgYnVmKTsKIAogCQlsZW4gLT0gZGlmX2xlbjsKIAkJYWxpZ25lZF9hZGRyICs9IDQ7CiAJfQogCiAJLyogcmVhZCBEV3MgdGhyb3VnaCBhdXRvaW5jcmVtZW50IHJlZ2lzdGVycyAqLwotCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0FERFJFU1MsCi0JCSAgICAgICBhbGlnbmVkX2FkZHIpOworCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0FERFJFU1MsIGFsaWduZWRfYWRkcik7CiAJYWxpZ25lZF9sZW4gPSBsZW4gJiAofjB4Myk7CiAJZm9yIChpID0gMDsgaSA8IGFsaWduZWRfbGVuOyBpICs9IDQsIGJ1ZiArPSA0LCBhbGlnbmVkX2FkZHIgKz0gNCkKLQkJcmVhZF9yZWdpc3RlcihkZXYsIElQV19SRUdfQVVUT0lOQ1JFTUVOVF9EQVRBLAotCQkJICAgICAgKHUzMiAqKWJ1Zik7CisJCXJlYWRfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0FVVE9JTkNSRU1FTlRfREFUQSwgKHUzMiAqKSBidWYpOwogCiAJLyogY29weSB0aGUgbGFzdCBuaWJibGUgKi8KIAlkaWZfbGVuID0gbGVuIC0gYWxpZ25lZF9sZW47Ci0Jd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19BRERSRVNTLAotCQkgICAgICAgYWxpZ25lZF9hZGRyKTsKKwl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0FERFJFU1MsIGFsaWduZWRfYWRkcik7CiAJZm9yIChpID0gMDsgaSA8IGRpZl9sZW47IGkrKywgYnVmKyspCi0JCXJlYWRfcmVnaXN0ZXJfYnl0ZShkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEgKwotCQkJCSAgIGksIGJ1Zik7CisJCXJlYWRfcmVnaXN0ZXJfYnl0ZShkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEgKyBpLCBidWYpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpcHcyMTAwX2h3X2lzX2FkYXB0ZXJfaW5fc3lzdGVtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIChkZXYtPmJhc2VfYWRkciAmJgotCQkocmVhZGwoKHZvaWQgX19pb21lbSAqKShkZXYtPmJhc2VfYWRkciArIElQV19SRUdfRE9BX0RFQlVHX0FSRUFfU1RBUlQpKQorCQkocmVhZGwKKwkJICgodm9pZCBfX2lvbWVtICopKGRldi0+YmFzZV9hZGRyICsKKwkJCQkgICBJUFdfUkVHX0RPQV9ERUJVR19BUkVBX1NUQVJUKSkKIAkJID09IElQV19EQVRBX0RPQV9ERUJVR19WQUxVRSkpOwogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfZ2V0X29yZGluYWwoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIG9yZCwKLQkJCSAgICAgICB2b2lkICp2YWwsIHUzMiAqbGVuKQorCQkJICAgICAgIHZvaWQgKnZhbCwgdTMyICogbGVuKQogewogCXN0cnVjdCBpcHcyMTAwX29yZGluYWxzICpvcmRpbmFscyA9ICZwcml2LT5vcmRpbmFsczsKIAl1MzIgYWRkcjsKQEAgLTUyOSw4ICs1MjIsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyZWFkX25pY19kd29yZChwcml2LT5uZXRfZGV2LCBvcmRpbmFscy0+dGFibGUxX2FkZHIgKyAob3JkIDw8IDIpLAotCQkJICAgICAgICZhZGRyKTsKKwkJcmVhZF9uaWNfZHdvcmQocHJpdi0+bmV0X2RldiwKKwkJCSAgICAgICBvcmRpbmFscy0+dGFibGUxX2FkZHIgKyAob3JkIDw8IDIpLCAmYWRkcik7CiAJCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsIGFkZHIsIHZhbCk7CiAKIAkJKmxlbiA9IElQV19PUkRfVEFCXzFfRU5UUllfU0laRTsKQEAgLTU0Myw4ICs1MzYsOCBAQAogCQlvcmQgLT0gSVBXX1NUQVJUX09SRF9UQUJfMjsKIAogCQkvKiBnZXQgdGhlIGFkZHJlc3Mgb2Ygc3RhdGlzdGljICovCi0JCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsIG9yZGluYWxzLT50YWJsZTJfYWRkciArIChvcmQgPDwgMyksCi0JCQkgICAgICAgJmFkZHIpOworCQlyZWFkX25pY19kd29yZChwcml2LT5uZXRfZGV2LAorCQkJICAgICAgIG9yZGluYWxzLT50YWJsZTJfYWRkciArIChvcmQgPDwgMyksICZhZGRyKTsKIAogCQkvKiBnZXQgdGhlIHNlY29uZCBEVyBvZiBzdGF0aXN0aWNzIDsKIAkJICogdHdvIDE2LWJpdCB3b3JkcyAtIGZpcnN0IGlzIGxlbmd0aCwgc2Vjb25kIGlzIGNvdW50ICovCkBAIC01NTMsMTAgKzU0NiwxMCBAQAogCQkJICAgICAgICZmaWVsZF9pbmZvKTsKIAogCQkvKiBnZXQgZWFjaCBlbnRyeSBsZW5ndGggKi8KLQkJZmllbGRfbGVuID0gKigodTE2ICopJmZpZWxkX2luZm8pOworCQlmaWVsZF9sZW4gPSAqKCh1MTYgKikgJiBmaWVsZF9pbmZvKTsKIAogCQkvKiBnZXQgbnVtYmVyIG9mIGVudHJpZXMgKi8KLQkJZmllbGRfY291bnQgPSAqKCgodTE2ICopJmZpZWxkX2luZm8pICsgMSk7CisJCWZpZWxkX2NvdW50ID0gKigoKHUxNiAqKSAmIGZpZWxkX2luZm8pICsgMSk7CiAKIAkJLyogYWJvcnQgaWYgbm8gZW5vdWdodCBtZW1vcnkgKi8KIAkJdG90YWxfbGVuZ3RoID0gZmllbGRfbGVuICogZmllbGRfY291bnQ7CkBAIC01ODEsOCArNTc0LDggQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpcHcyMTAwX3NldF9vcmRpbmFsKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiBvcmQsIHUzMiAqdmFsLAotCQkJICAgICAgIHUzMiAqbGVuKQorc3RhdGljIGludCBpcHcyMTAwX3NldF9vcmRpbmFsKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiBvcmQsIHUzMiAqIHZhbCwKKwkJCSAgICAgICB1MzIgKiBsZW4pCiB7CiAJc3RydWN0IGlwdzIxMDBfb3JkaW5hbHMgKm9yZGluYWxzID0gJnByaXYtPm9yZGluYWxzOwogCXUzMiBhZGRyOwpAQCAtNTk0LDggKzU4Nyw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsIG9yZGluYWxzLT50YWJsZTFfYWRkciArIChvcmQgPDwgMiksCi0JCQkgICAgICAgJmFkZHIpOworCQlyZWFkX25pY19kd29yZChwcml2LT5uZXRfZGV2LAorCQkJICAgICAgIG9yZGluYWxzLT50YWJsZTFfYWRkciArIChvcmQgPDwgMiksICZhZGRyKTsKIAogCQl3cml0ZV9uaWNfZHdvcmQocHJpdi0+bmV0X2RldiwgYWRkciwgKnZhbCk7CiAKQEAgLTYxMiw3ICs2MDUsNyBAQAogfQogCiBzdGF0aWMgY2hhciAqc25wcmludF9saW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJICBjb25zdCB1OCAqZGF0YSwgdTMyIGxlbiwgdTMyIG9mcykKKwkJCSAgY29uc3QgdTggKiBkYXRhLCB1MzIgbGVuLCB1MzIgb2ZzKQogewogCWludCBvdXQsIGksIGosIGw7CiAJY2hhciBjOwpAQCAtNjQ2LDcgKzYzOSw3IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRrX2J1ZihpbnQgbGV2ZWwsIGNvbnN0IHU4ICpkYXRhLCB1MzIgbGVuKQorc3RhdGljIHZvaWQgcHJpbnRrX2J1ZihpbnQgbGV2ZWwsIGNvbnN0IHU4ICogZGF0YSwgdTMyIGxlbikKIHsKIAljaGFyIGxpbmVbODFdOwogCXUzMiBvZnMgPSAwOwpAQCAtNjYyLDggKzY1NSw2IEBACiAJfQogfQogCi0KLQogI2RlZmluZSBNQVhfUkVTRVRfQkFDS09GRiAxMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWR1bGVfcmVzZXQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKQEAgLTcwMyw3ICs2OTQsNyBAQAogCiAjZGVmaW5lIEhPU1RfQ09NUExFVEVfVElNRU9VVCAoMiAqIEhaKQogc3RhdGljIGludCBpcHcyMTAwX2h3X3NlbmRfY29tbWFuZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBob3N0X2NvbW1hbmQgKiBjbWQpCisJCQkJICAgc3RydWN0IGhvc3RfY29tbWFuZCAqY21kKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0ICpwYWNrZXQ7CkBAIC03MTMsMjUgKzcwNCwyOCBAQAogCUlQV19ERUJVR19IQygiU2VuZGluZyAlcyBjb21tYW5kICgjJWQpLCAlZCBieXRlc1xuIiwKIAkJICAgICBjb21tYW5kX3R5cGVzW2NtZC0+aG9zdF9jb21tYW5kXSwgY21kLT5ob3N0X2NvbW1hbmQsCiAJCSAgICAgY21kLT5ob3N0X2NvbW1hbmRfbGVuZ3RoKTsKLQlwcmludGtfYnVmKElQV19ETF9IQywgKHU4KiljbWQtPmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzLAorCXByaW50a19idWYoSVBXX0RMX0hDLCAodTggKikgY21kLT5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycywKIAkJICAgY21kLT5ob3N0X2NvbW1hbmRfbGVuZ3RoKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHByaXYtPmZhdGFsX2Vycm9yKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJBdHRlbXB0IHRvIHNlbmQgY29tbWFuZCB3aGlsZSBoYXJkd2FyZSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24uXG4iKTsKKwkJSVBXX0RFQlVHX0lORk8KKwkJICAgICgiQXR0ZW1wdCB0byBzZW5kIGNvbW1hbmQgd2hpbGUgaGFyZHdhcmUgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLlxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JVTk5JTkcpKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJBdHRlbXB0IHRvIHNlbmQgY29tbWFuZCB3aGlsZSBoYXJkd2FyZSBpcyBub3QgcnVubmluZy5cbiIpOworCQlJUFdfREVCVUdfSU5GTworCQkgICAgKCJBdHRlbXB0IHRvIHNlbmQgY29tbWFuZCB3aGlsZSBoYXJkd2FyZSBpcyBub3QgcnVubmluZy5cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQ01EX0FDVElWRSkgewotCQlJUFdfREVCVUdfSU5GTygiQXR0ZW1wdCB0byBzZW5kIGNvbW1hbmQgd2hpbGUgYW5vdGhlciBjb21tYW5kIGlzIHBlbmRpbmcuXG4iKTsKKwkJSVBXX0RFQlVHX0lORk8KKwkJICAgICgiQXR0ZW1wdCB0byBzZW5kIGNvbW1hbmQgd2hpbGUgYW5vdGhlciBjb21tYW5kIGlzIHBlbmRpbmcuXG4iKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KQEAgLTc1Miw3ICs3NDYsOCBAQAogCS8qIGluaXRpYWxpemUgdGhlIGZpcm13YXJlIGNvbW1hbmQgcGFja2V0ICovCiAJcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX3JlZyA9IGNtZC0+aG9zdF9jb21tYW5kOwogCXBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmhvc3RfY29tbWFuZF9yZWcxID0gY21kLT5ob3N0X2NvbW1hbmQxOwotCXBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmhvc3RfY29tbWFuZF9sZW5fcmVnID0gY21kLT5ob3N0X2NvbW1hbmRfbGVuZ3RoOworCXBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmhvc3RfY29tbWFuZF9sZW5fcmVnID0KKwkgICAgY21kLT5ob3N0X2NvbW1hbmRfbGVuZ3RoOwogCXBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPnNlcXVlbmNlID0gY21kLT5ob3N0X2NvbW1hbmRfc2VxdWVuY2U7CiAKIAltZW1jcHkocGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX3BhcmFtc19yZWcsCkBAIC03NzYsMTMgKzc3MSwxNSBAQAogCSAqIHRoZW4gdGhlcmUgaXMgYSBwcm9ibGVtLgogCSAqLwogCi0JZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCi0JCXByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwgIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQ01EX0FDVElWRSksCi0JCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CisJZXJyID0KKwkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAorCQkJCQkgICAgICEocHJpdi0+CisJCQkJCSAgICAgICBzdGF0dXMgJiBTVEFUVVNfQ01EX0FDVElWRSksCisJCQkJCSAgICAgSE9TVF9DT01QTEVURV9USU1FT1VUKTsKIAogCWlmIChlcnIgPT0gMCkgewogCQlJUFdfREVCVUdfSU5GTygiQ29tbWFuZCBjb21wbGV0aW9uIGZhaWxlZCBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkgICAgICAgSE9TVF9DT01QTEVURV9USU1FT1VUIC8gKEhaIC8gMTAwKSk7CisJCQkgICAgICAgMTAwMCAqIChIT1NUX0NPTVBMRVRFX1RJTUVPVVQgLyBIWikpOwogCQlwcml2LT5mYXRhbF9lcnJvciA9IElQVzIxMDBfRVJSX01TR19USU1FT1VUOwogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19DTURfQUNUSVZFOwogCQlzY2hlZHVsZV9yZXNldChwcml2KTsKQEAgLTgwNCwxMyArODAxLDEyIEBACiAKIAlyZXR1cm4gMDsKIAotIGZhaWxfdW5sb2NrOgorICAgICAgZmFpbF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLQogLyoKICAqIFZlcmlmeSB0aGUgdmFsdWVzIGFuZCBkYXRhIGFjY2VzcyBvZiB0aGUgaGFyZHdhcmUKICAqIE5vIGxvY2tzIG5lZWRlZCBvciB1c2VkLiAgTm8gZnVuY3Rpb25zIGNhbGxlZC4KQEAgLTgyNSw4ICs4MjEsNyBAQAogCiAJLyogRG9tYWluIDAgY2hlY2sgLSBhbGwgdmFsdWVzIHNob3VsZCBiZSBET0FfREVCVUcgKi8KIAlmb3IgKGFkZHJlc3MgPSBJUFdfUkVHX0RPQV9ERUJVR19BUkVBX1NUQVJUOwotCSAgICAgYWRkcmVzcyA8IElQV19SRUdfRE9BX0RFQlVHX0FSRUFfRU5EOwotCSAgICAgYWRkcmVzcyArPSBzaXplb2YodTMyKSkgeworCSAgICAgYWRkcmVzcyA8IElQV19SRUdfRE9BX0RFQlVHX0FSRUFfRU5EOyBhZGRyZXNzICs9IHNpemVvZih1MzIpKSB7CiAJCXJlYWRfcmVnaXN0ZXIocHJpdi0+bmV0X2RldiwgYWRkcmVzcywgJmRhdGExKTsKIAkJaWYgKGRhdGExICE9IElQV19EQVRBX0RPQV9ERUJVR19WQUxVRSkKIAkJCXJldHVybiAtRUlPOwpAQCAtODk4LDcgKzg5Myw2IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIFByb2NlZHVyZSAgIDogICBzd19yZXNldF9hbmRfY2xvY2sKICAgICBQdXJwb3NlICAgICA6ICAgQXNzZXJ0cyBzL3cgcmVzZXQsIGFzc2VydHMgY2xvY2sgaW5pdGlhbGl6YXRpb24KQEAgLTk3NSwxNyArOTY5LDE2IEBACiAKIAlpZiAocHJpdi0+ZmF0YWxfZXJyb3IpIHsKIAkJSVBXX0RFQlVHX0VSUk9SKCIlczogaXB3MjEwMF9kb3dubG9hZF9maXJtd2FyZSBjYWxsZWQgYWZ0ZXIgIgotCQkgICAgICAgImZhdGFsIGVycm9yICVkLiAgSW50ZXJmYWNlIG11c3QgYmUgYnJvdWdodCBkb3duLlxuIiwKLQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHByaXYtPmZhdGFsX2Vycm9yKTsKKwkJCQkiZmF0YWwgZXJyb3IgJWQuICBJbnRlcmZhY2UgbXVzdCBiZSBicm91Z2h0IGRvd24uXG4iLAorCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIHByaXYtPmZhdGFsX2Vycm9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAjaWZkZWYgQ09ORklHX1BNCiAJaWYgKCFpcHcyMTAwX2Zpcm13YXJlLnZlcnNpb24pIHsKIAkJZXJyID0gaXB3MjEwMF9nZXRfZmlybXdhcmUocHJpdiwgJmlwdzIxMDBfZmlybXdhcmUpOwogCQlpZiAoZXJyKSB7CiAJCQlJUFdfREVCVUdfRVJST1IoIiVzOiBpcHcyMTAwX2dldF9maXJtd2FyZSBmYWlsZWQ6ICVkXG4iLAotCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CisJCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCQlwcml2LT5mYXRhbF9lcnJvciA9IElQVzIxMDBfRVJSX0ZXX0xPQUQ7CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTk5NCw3ICs5ODcsNyBAQAogCWVyciA9IGlwdzIxMDBfZ2V0X2Zpcm13YXJlKHByaXYsICZpcHcyMTAwX2Zpcm13YXJlKTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19FUlJPUigiJXM6IGlwdzIxMDBfZ2V0X2Zpcm13YXJlIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOworCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCXByaXYtPmZhdGFsX2Vycm9yID0gSVBXMjEwMF9FUlJfRldfTE9BRDsKIAkJZ290byBmYWlsOwogCX0KQEAgLTEwMDUsMjEgKzk5OCwyMCBAQAogCWVyciA9IHN3X3Jlc2V0X2FuZF9jbG9jayhwcml2KTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19FUlJPUigiJXM6IHN3X3Jlc2V0X2FuZF9jbG9jayBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKKwkJCQlwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJZXJyID0gaXB3MjEwMF92ZXJpZnkocHJpdik7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfRVJST1IoIiVzOiBpcHcyMTAwX3ZlcmlmeSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKKwkJCQlwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJLyogSG9sZCBBUkMgKi8KIAl3cml0ZV9uaWNfZHdvcmQocHJpdi0+bmV0X2RldiwKLQkJCUlQV19JTlRFUk5BTF9SRUdJU1RFUl9IQUxUX0FORF9SRVNFVCwKLQkJCTB4ODAwMDAwMDApOworCQkJSVBXX0lOVEVSTkFMX1JFR0lTVEVSX0hBTFRfQU5EX1JFU0VULCAweDgwMDAwMDAwKTsKIAogCS8qIGFsbG93IEFSQyB0byBydW4gKi8KIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX1JFU0VUX1JFRywgMCk7CkBAIC0xMDM0LDEzICsxMDI2LDEzIEBACiAKIAkvKiByZWxlYXNlIEFSQyAqLwogCXdyaXRlX25pY19kd29yZChwcml2LT5uZXRfZGV2LAotCQkJSVBXX0lOVEVSTkFMX1JFR0lTVEVSX0hBTFRfQU5EX1JFU0VULAotCQkJMHgwMDAwMDAwMCk7CisJCQlJUFdfSU5URVJOQUxfUkVHSVNURVJfSEFMVF9BTkRfUkVTRVQsIDB4MDAwMDAwMDApOwogCiAJLyogcy93IHJlc2V0IGFuZCBjbG9jayBzdGFiaWxpemF0aW9uIChhZ2FpbiEhISkgKi8KIAllcnIgPSBzd19yZXNldF9hbmRfY2xvY2socHJpdik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IHN3X3Jlc2V0X2FuZF9jbG9jayBmYWlsZWQ6ICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBzd19yZXNldF9hbmRfY2xvY2sgZmFpbGVkOiAlZFxuIiwKIAkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xMDQ5LDEwICsxMDQxLDkgQEAKIAllcnIgPSBpcHcyMTAwX2Z3X2Rvd25sb2FkKHByaXYsICZpcHcyMTAwX2Zpcm13YXJlKTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19FUlJPUigiJXM6IEVycm9yIGxvYWRpbmcgZmlybXdhcmU6ICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKKwkJCQlwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOwogCQlnb3RvIGZhaWw7CiAJfQotCiAjaWZuZGVmIENPTkZJR19QTQogCS8qCiAJICogV2hlbiB0aGUgLnJlc3VtZSBtZXRob2Qgb2YgdGhlIGRyaXZlciBpcyBjYWxsZWQsIHRoZSBvdGhlcgpAQCAtMTA4NCw3ICsxMDc1LDcgQEAKIAogCXJldHVybiAwOwogCi0gZmFpbDoKKyAgICAgIGZhaWw6CiAJaXB3MjEwMF9yZWxlYXNlX2Zpcm13YXJlKHByaXYsICZpcHcyMTAwX2Zpcm13YXJlKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTEwNSw3ICsxMDk2LDYgQEAKIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX0lOVEFfTUFTSywgMHgwKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBpcHcyMTAwX2luaXRpYWxpemVfb3JkaW5hbHMoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9vcmRpbmFscyAqb3JkID0gJnByaXYtPm9yZGluYWxzOwpAQCAtMTE3NywxMSArMTE2NywxMCBAQAogCSAqIEVFUFJPTV9TUkFNX0RCX1NUQVJUX0FERFJFU1MgdXNpbmcgb3JkaW5hbCBpbiBvcmRpbmFsIHRhYmxlIDEKIAkgKi8KIAlsZW4gPSBzaXplb2YoYWRkcik7Ci0JaWYgKGlwdzIxMDBfZ2V0X29yZGluYWwoCi0JCSAgICBwcml2LCBJUFdfT1JEX0VFUFJPTV9TUkFNX0RCX0JMT0NLX1NUQVJUX0FERFJFU1MsCi0JCSAgICAmYWRkciwgJmxlbikpIHsKKwlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbAorCSAgICAocHJpdiwgSVBXX09SRF9FRVBST01fU1JBTV9EQl9CTE9DS19TVEFSVF9BRERSRVNTLCAmYWRkciwgJmxlbikpIHsKIAkJSVBXX0RFQlVHX0lORk8oImZhaWxlZCBxdWVyeWluZyBvcmRpbmFscyBhdCBsaW5lICVkXG4iLAotCQkgICAgICAgX19MSU5FX18pOworCQkJICAgICAgIF9fTElORV9fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMTk0LDcgKzExODMsNyBAQAogCXByaXYtPmVlcHJvbV92ZXJzaW9uID0gKHZhbCA+PiAyNCkgJiAweEZGOwogCUlQV19ERUJVR19JTkZPKCJFRVBST00gdmVyc2lvbjogJWRcbiIsIHByaXYtPmVlcHJvbV92ZXJzaW9uKTsKIAotICAgICAgICAvKgorCS8qCiAJICogIEhXIFJGIEtpbGwgZW5hYmxlIGlzIGJpdCAwIGluIGJ5dGUgYXQgb2Zmc2V0IDB4MjEgaW4gZmlybXdhcmUKIAkgKgogCSAqICBub3RpY2UgdGhhdCB0aGUgRUVQUk9NIGJpdCBpcyByZXZlcnNlIHBvbGFyaXR5LCBpLmUuCkBAIC0xMjA2LDggKzExOTUsNyBAQAogCQlwcml2LT5od19mZWF0dXJlcyB8PSBIV19GRUFUVVJFX1JGS0lMTDsKIAogCUlQV19ERUJVR19JTkZPKCJIVyBSRiBLaWxsOiAlc3N1cHBvcnRlZC5cbiIsCi0JCQkgICAocHJpdi0+aHdfZmVhdHVyZXMgJiBIV19GRUFUVVJFX1JGS0lMTCkgPwotCQkJICAgIiIgOiAibm90ICIpOworCQkgICAgICAgKHByaXYtPmh3X2ZlYXR1cmVzICYgSFdfRkVBVFVSRV9SRktJTEwpID8gIiIgOiAibm90ICIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjM0LDcgKzEyMjIsOCBAQAogCSAqIGZ3ICYgZGlubyB1Y29kZQogCSAqLwogCWlmIChpcHcyMTAwX2Rvd25sb2FkX2Zpcm13YXJlKHByaXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogRmFpbGVkIHRvIHBvd2VyIG9uIHRoZSBhZGFwdGVyLlxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogRmFpbGVkIHRvIHBvd2VyIG9uIHRoZSBhZGFwdGVyLlxuIiwKIAkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMjkzLDcgKzEyODIsOCBAQAogCQkgICAgIGkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIik7CiAKIAlpZiAoIWkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplLlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IEZpcm13YXJlIGRpZCBub3QgaW5pdGlhbGl6ZS5cbiIsCiAJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTMyNiw3ICsxMzE2LDYgQEAKIAlwcml2LT5mYXRhbF9lcnJvciA9IDA7CiB9CiAKLQogLyogTk9URTogT3VyIGludGVycnVwdCBpcyBkaXNhYmxlZCB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCAqLwogc3RhdGljIGludCBpcHcyMTAwX3Bvd2VyX2N5Y2xlX2FkYXB0ZXIoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKIHsKQEAgLTEzNTAsMTkgKzEzMzksMTkgQEAKIAogCQlpZiAocmVnICYgSVBXX0FVWF9IT1NUX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQpCiAJCQlicmVhazsKLQl9ICB3aGlsZShpLS0pOworCX0gd2hpbGUgKGktLSk7CiAKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19SRVNFVF9QRU5ESU5HOwogCiAJaWYgKCFpKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJleGl0IC0gd2FpdGVkIHRvbyBsb25nIGZvciBtYXN0ZXIgYXNzZXJ0IHN0b3BcbiIpOworCQlJUFdfREVCVUdfSU5GTworCQkgICAgKCJleGl0IC0gd2FpdGVkIHRvbyBsb25nIGZvciBtYXN0ZXIgYXNzZXJ0IHN0b3BcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX1JFU0VUX1JFRywKIAkJICAgICAgIElQV19BVVhfSE9TVF9SRVNFVF9SRUdfU1dfUkVTRVQpOwogCi0KIAkvKiBSZXNldCBhbnkgZmF0YWxfZXJyb3IgY29uZGl0aW9ucyAqLwogCWlwdzIxMDBfcmVzZXRfZmF0YWxlcnJvcihwcml2KTsKIApAQCAtMTQxNSw3ICsxNDA0LDYgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfZW5hYmxlX2FkYXB0ZXIoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaG9zdF9jb21tYW5kIGNtZCA9IHsKQEAgLTE0NDUsOSArMTQzMyw4IEBACiAKIAllcnIgPSBpcHcyMTAwX3dhaXRfZm9yX2NhcmRfc3RhdGUocHJpdiwgSVBXX0hXX1NUQVRFX0VOQUJMRUQpOwogCWlmIChlcnIpIHsKLQkJSVBXX0RFQlVHX0lORk8oCi0JCSAgICAgICAiJXM6IGNhcmQgbm90IHJlc3BvbmRpbmcgdG8gaW5pdCBjb21tYW5kLlxuIiwKLQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQlJUFdfREVCVUdfSU5GTygiJXM6IGNhcmQgbm90IHJlc3BvbmRpbmcgdG8gaW5pdCBjb21tYW5kLlxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJZ290byBmYWlsX3VwOwogCX0KIApAQCAtMTQ1Niw3ICsxNDQzLDcgQEAKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmhhbmdfY2hlY2ssIEhaIC8gMik7CiAJfQogCi1mYWlsX3VwOgorICAgICAgZmFpbF91cDoKIAl1cCgmcHJpdi0+YWRhcHRlcl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNDg4LDcgKzE0NzUsOCBAQAogCiAJCWVyciA9IGlwdzIxMDBfaHdfcGh5X29mZihwcml2KTsKIAkJaWYgKGVycikKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogRXJyb3IgZGlzYWJsaW5nIHJhZGlvICVkXG4iLCBlcnIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkJICAgICAgICI6IEVycm9yIGRpc2FibGluZyByYWRpbyAlZFxuIiwgZXJyKTsKIAogCQkvKgogCQkgKiBJZiBpbiBEMC1zdGFuZGJ5IG1vZGUgZ29pbmcgZGlyZWN0bHkgdG8gRDMgbWF5IGNhdXNlIGEKQEAgLTE1NjYsNyArMTU1NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX2Rpc2FibGVfYWRhcHRlcihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBob3N0X2NvbW1hbmQgY21kID0gewpAQCAtMTU5MywxOSArMTU4MCwyMSBAQAogCiAJZXJyID0gaXB3MjEwMF9od19zZW5kX2NvbW1hbmQocHJpdiwgJmNtZCk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IGV4aXQgLSBmYWlsZWQgdG8gc2VuZCBDQVJEX0RJU0FCTEUgY29tbWFuZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJICAgICAgICI6IGV4aXQgLSBmYWlsZWQgdG8gc2VuZCBDQVJEX0RJU0FCTEUgY29tbWFuZFxuIik7CiAJCWdvdG8gZmFpbF91cDsKIAl9CiAKIAllcnIgPSBpcHcyMTAwX3dhaXRfZm9yX2NhcmRfc3RhdGUocHJpdiwgSVBXX0hXX1NUQVRFX0RJU0FCTEVEKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogZXhpdCAtIGNhcmQgZmFpbGVkIHRvIGNoYW5nZSB0byBESVNBQkxFRFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJICAgICAgICI6IGV4aXQgLSBjYXJkIGZhaWxlZCB0byBjaGFuZ2UgdG8gRElTQUJMRURcbiIpOwogCQlnb3RvIGZhaWxfdXA7CiAJfQogCiAJSVBXX0RFQlVHX0lORk8oIlRPRE86IGltcGxlbWVudCBzY2FuIHN0YXRlIG1hY2hpbmVcbiIpOwogCi1mYWlsX3VwOgorICAgICAgZmFpbF91cDoKIAl1cCgmcHJpdi0+YWRhcHRlcl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNjI3LDcgKzE2MTYsNyBAQAogCiAJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX0FTU09DSUFURSkpCiAJCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSB8PSBJUFdfU0NBTl9OT0FTU09DSUFURTsKLQlpZiAoKHByaXYtPnNlYy5mbGFncyAmIFNFQ19FTkFCTEVEKSAmJiBwcml2LT5zZWMuZW5hYmxlZCkKKwlpZiAoKHByaXYtPmllZWUtPnNlYy5mbGFncyAmIFNFQ19FTkFCTEVEKSAmJiBwcml2LT5pZWVlLT5zZWMuZW5hYmxlZCkKIAkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IElQV19TQ0FOX01JWEVEX0NFTEw7CiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19QQVNTSVZFX1NDQU4pCiAJCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSB8PSBJUFdfU0NBTl9QQVNTSVZFOwpAQCAtMTcwOSw4ICsxNjk4LDkgQEAKIAkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRVNFVF9QRU5ESU5HKSkgewogCQkvKiBQb3dlciBjeWNsZSB0aGUgY2FyZCAuLi4gKi8KIAkJaWYgKGlwdzIxMDBfcG93ZXJfY3ljbGVfYWRhcHRlcihwcml2KSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogQ291bGQgbm90IGN5Y2xlIGFkYXB0ZXIuXG4iLAotCQkJCQkgIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBDb3VsZCBub3QgY3ljbGUgYWRhcHRlci5cbiIsCisJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCQlyYyA9IDE7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KQEAgLTE3MTksOCArMTcwOSw5IEBACiAKIAkvKiBMb2FkIHRoZSBmaXJtd2FyZSwgc3RhcnQgdGhlIGNsb2NrcywgZXRjLiAqLwogCWlmIChpcHcyMTAwX3N0YXJ0X2FkYXB0ZXIocHJpdikpIHsKLQkgICAgICAgCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogRmFpbGVkIHRvIHN0YXJ0IHRoZSBmaXJtd2FyZS5cbiIsCi0JCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IEZhaWxlZCB0byBzdGFydCB0aGUgZmlybXdhcmUuXG4iLAorCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCXJjID0gMTsKIAkJZ290byBleGl0OwogCX0KQEAgLTE3MjksMTYgKzE3MjAsMTggQEAKIAogCS8qIERldGVybWluZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwYXJ0aWN1bGFyIEhXIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoaXB3MjEwMF9nZXRfaHdfZmVhdHVyZXMocHJpdikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEhXIGZlYXR1cmVzLlxuIiwKLQkJCQlwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogRmFpbGVkIHRvIGRldGVybWluZSBIVyBmZWF0dXJlcy5cbiIsCisJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJcmMgPSAxOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJbG9jayA9IExPQ0tfTk9ORTsKIAlpZiAoaXB3MjEwMF9zZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1BFUlNfREJfTE9DSywgJmxvY2ssICZvcmRfbGVuKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IEZhaWxlZCB0byBjbGVhciBvcmRpbmFsIGxvY2suXG4iLAotCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBGYWlsZWQgdG8gY2xlYXIgb3JkaW5hbCBsb2NrLlxuIiwKKwkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyYyA9IDE7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0xNzY0LDcgKzE3NTcsNyBAQAogCSAqIEhPU1RfQ09NUExFVEUgKi8KIAlpZiAoaXB3MjEwMF9hZGFwdGVyX3NldHVwKHByaXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogRmFpbGVkIHRvIHN0YXJ0IHRoZSBjYXJkLlxuIiwKLQkJCQlwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyYyA9IDE7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0xNzczLDIwICsxNzY2LDE5IEBACiAJCS8qIEVuYWJsZSB0aGUgYWRhcHRlciAtIHNlbmRzIEhPU1RfQ09NUExFVEUgKi8KIAkJaWYgKGlwdzIxMDBfZW5hYmxlX2FkYXB0ZXIocHJpdikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAiCi0JCQkJIiVzOiBmYWlsZWQgaW4gY2FsbCB0byBlbmFibGUgYWRhcHRlci5cbiIsCi0JCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCQkgICAgICAgIiVzOiBmYWlsZWQgaW4gY2FsbCB0byBlbmFibGUgYWRhcHRlci5cbiIsCisJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCQlpcHcyMTAwX2h3X3N0b3BfYWRhcHRlcihwcml2KTsKIAkJCXJjID0gMTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCi0KIAkJLyogU3RhcnQgYSBzY2FuIC4gLiAuICovCiAJCWlwdzIxMDBfc2V0X3NjYW5fb3B0aW9ucyhwcml2KTsKIAkJaXB3MjEwMF9zdGFydF9zY2FuKHByaXYpOwogCX0KIAotIGV4aXQ6CisgICAgICBleGl0OgogCXJldHVybiByYzsKIH0KIApAQCAtMTgwMiw4ICsxNzk0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdSA9IHsKIAkJLmFwX2FkZHIgPSB7Ci0JCQkuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSCi0JCX0KKwkJCSAgICAuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSfQogCX07CiAJaW50IGFzc29jaWF0ZWQgPSBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRDsKIApAQCAtMTg0Miw3ICsxODMzLDcgQEAKIAogI2lmZGVmIEFDUElfQ1NUQVRFX0xJTUlUX0RFRklORUQKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0MzX0RJU0FCTEVEKSB7Ci0JCUlQV19ERUJVR19JTkZPKERSVl9OQU1FICI6IFJlc2V0dGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOworCQlJUFdfREVCVUdfSU5GTygiOiBSZXNldHRpbmcgQzMgdHJhbnNpdGlvbnMuXG4iKTsKIAkJYWNwaV9zZXRfY3N0YXRlX2xpbWl0KHByaXYtPmNzdGF0ZV9saW1pdCk7CiAJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX0MzX0RJU0FCTEVEOwogCX0KQEAgLTE4NjIsMTQgKzE4NTMsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdSA9IHsKIAkJLmFwX2FkZHIgPSB7Ci0JCQkuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSCi0JCX0KKwkJCSAgICAuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSfQogCX07CiAJaW50IGFzc29jaWF0ZWQgPSBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwotCUlQV19ERUJVR19JTkZPKERSVl9OQU1FICI6ICVzOiBSZXN0YXJ0aW5nIGFkYXB0ZXIuXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJSVBXX0RFQlVHX0lORk8oIjogJXM6IFJlc3RhcnRpbmcgYWRhcHRlci5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCXByaXYtPnJlc2V0cysrOwogCXByaXYtPnN0YXR1cyAmPSB+KFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKTsKIAlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CkBAIC0xODk0LDcgKzE4ODMsNiBAQAogCiB9CiAKLQogc3RhdGljIHZvaWQgaXNyX2luZGljYXRlX2Fzc29jaWF0ZWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHN0YXR1cykKIHsKIApAQCAtMTkwNCw3ICsxODkyLDcgQEAKIAl1MzIgdHhyYXRlOwogCXUzMiBjaGFuOwogCWNoYXIgKnR4cmF0ZW5hbWU7Ci0gCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBic3NpZFtFVEhfQUxFTl07CiAKIAkvKgogCSAqIFRCRDogQlNTSUQgaXMgdXN1YWxseSAwMDowMDowMDowMDowMDowMCBoZXJlIGFuZCBub3QKQEAgLTE5MTgsMTYgKzE5MDYsMTUgQEAKIAkJCQkgIGVzc2lkLCAmZXNzaWRfbGVuKTsKIAlpZiAocmV0KSB7CiAJCUlQV19ERUJVR19JTkZPKCJmYWlsZWQgcXVlcnlpbmcgb3JkaW5hbHMgYXQgbGluZSAlZFxuIiwKLQkJCQkgICBfX0xJTkVfXyk7CisJCQkgICAgICAgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQogCiAJbGVuID0gc2l6ZW9mKHUzMik7Ci0JcmV0ID0gaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX0NVUlJFTlRfVFhfUkFURSwKLQkJCQkgICZ0eHJhdGUsICZsZW4pOworCXJldCA9IGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9DVVJSRU5UX1RYX1JBVEUsICZ0eHJhdGUsICZsZW4pOwogCWlmIChyZXQpIHsKIAkJSVBXX0RFQlVHX0lORk8oImZhaWxlZCBxdWVyeWluZyBvcmRpbmFscyBhdCBsaW5lICVkXG4iLAotCQkJCSAgIF9fTElORV9fKTsKKwkJCSAgICAgICBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE5MzUsMTkgKzE5MjIsMTggQEAKIAlyZXQgPSBpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfT1VSX0ZSRVEsICZjaGFuLCAmbGVuKTsKIAlpZiAocmV0KSB7CiAJCUlQV19ERUJVR19JTkZPKCJmYWlsZWQgcXVlcnlpbmcgb3JkaW5hbHMgYXQgbGluZSAlZFxuIiwKLQkJCQkgICBfX0xJTkVfXyk7CisJCQkgICAgICAgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQogCWxlbiA9IEVUSF9BTEVOOwotICAgICAgICBpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfU1RBVF9BU1NOX0FQX0JTU0lELCAmYnNzaWQsICAmbGVuKTsKKwlpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfU1RBVF9BU1NOX0FQX0JTU0lELCAmYnNzaWQsICZsZW4pOwogCWlmIChyZXQpIHsKIAkJSVBXX0RFQlVHX0lORk8oImZhaWxlZCBxdWVyeWluZyBvcmRpbmFscyBhdCBsaW5lICVkXG4iLAotCQkJCSAgIF9fTElORV9fKTsKKwkJCSAgICAgICBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CiAJbWVtY3B5KHByaXYtPmllZWUtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwogCi0KIAlzd2l0Y2ggKHR4cmF0ZSkgewogCWNhc2UgVFhfUkFURV8xX01CSVQ6CiAJCXR4cmF0ZW5hbWUgPSAiMU1icHMiOwpAQCAtMTk3NCw3ICsxOTYwLDcgQEAKIAogCS8qIG5vdyB3ZSBjb3B5IHJlYWQgc3NpZCBpbnRvIGRldiAqLwogCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpKSB7Ci0JCXByaXYtPmVzc2lkX2xlbiA9IG1pbigodTgpZXNzaWRfbGVuLCAodTgpSVdfRVNTSURfTUFYX1NJWkUpOworCQlwcml2LT5lc3NpZF9sZW4gPSBtaW4oKHU4KSBlc3NpZF9sZW4sICh1OCkgSVdfRVNTSURfTUFYX1NJWkUpOwogCQltZW1jcHkocHJpdi0+ZXNzaWQsIGVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOwogCX0KIAlwcml2LT5jaGFubmVsID0gY2hhbjsKQEAgLTE5ODYsNyArMTk3Miw2IEBACiAJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnd4X2V2ZW50X3dvcmssIEhaIC8gMTApOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9zZXRfZXNzaWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgY2hhciAqZXNzaWQsCiAJCQkgICAgIGludCBsZW5ndGgsIGludCBiYXRjaF9tb2RlKQogewpAQCAtMjAwMSw4ICsxOTg2LDcgQEAKIAlJUFdfREVCVUdfSEMoIlNTSUQ6ICclcydcbiIsIGVzY2FwZV9lc3NpZChlc3NpZCwgc3NpZF9sZW4pKTsKIAogCWlmIChzc2lkX2xlbikKLQkJbWVtY3B5KChjaGFyKiljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsCi0JCSAgICAgICBlc3NpZCwgc3NpZF9sZW4pOworCQltZW1jcHkoY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzLCBlc3NpZCwgc3NpZF9sZW4pOwogCiAJaWYgKCFiYXRjaF9tb2RlKSB7CiAJCWVyciA9IGlwdzIxMDBfZGlzYWJsZV9hZGFwdGVyKHByaXYpOwpAQCAtMjAxNCw3ICsxOTk4LDcgQEAKIAkgKiBkaXNhYmxlIGF1dG8gYXNzb2NpYXRpb24gLS0gc28gd2UgY2hlYXQgYnkgc2V0dGluZyBhIGJvZ3VzIFNTSUQgKi8KIAlpZiAoIXNzaWRfbGVuICYmICEocHJpdi0+Y29uZmlnICYgQ0ZHX0FTU09DSUFURSkpIHsKIAkJaW50IGk7Ci0JCXU4ICpib2d1cyA9ICh1OCopY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzOworCQl1OCAqYm9ndXMgPSAodTggKikgY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzOwogCQlmb3IgKGkgPSAwOyBpIDwgSVdfRVNTSURfTUFYX1NJWkU7IGkrKykKIAkJCWJvZ3VzW2ldID0gMHgxOCArIGk7CiAJCWNtZC5ob3N0X2NvbW1hbmRfbGVuZ3RoID0gSVdfRVNTSURfTUFYX1NJWkU7CkBAIC0yMDI1LDggKzIwMDksNyBAQAogCiAJZXJyID0gaXB3MjEwMF9od19zZW5kX2NvbW1hbmQocHJpdiwgJmNtZCk7CiAJaWYgKCFlcnIpIHsKLQkJbWVtc2V0KHByaXYtPmVzc2lkICsgc3NpZF9sZW4sIDAsCi0JCSAgICAgICBJV19FU1NJRF9NQVhfU0laRSAtIHNzaWRfbGVuKTsKKwkJbWVtc2V0KHByaXYtPmVzc2lkICsgc3NpZF9sZW4sIDAsIElXX0VTU0lEX01BWF9TSVpFIC0gc3NpZF9sZW4pOwogCQltZW1jcHkocHJpdi0+ZXNzaWQsIGVzc2lkLCBzc2lkX2xlbik7CiAJCXByaXYtPmVzc2lkX2xlbiA9IHNzaWRfbGVuOwogCX0KQEAgLTIwNzEsMTQgKzIwNTQsMTQgQEAKIHN0YXRpYyB2b2lkIGlzcl9pbmRpY2F0ZV9yZl9raWxsKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiBzdGF0dXMpCiB7CiAJSVBXX0RFQlVHX0lORk8oIiVzOiBSRiBLaWxsIHN0YXRlIGNoYW5nZWQgdG8gcmFkaW8gT0ZGLlxuIiwKLQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAogCS8qIFJGX0tJTEwgaXMgbm93IGVuYWJsZWQgKGVsc2Ugd2Ugd291bGRuJ3QgYmUgaGVyZSkgKi8KIAlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JGX0tJTExfSFc7CiAKICNpZmRlZiBBQ1BJX0NTVEFURV9MSU1JVF9ERUZJTkVECiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19DM19ESVNBQkxFRCkgewotCQlJUFdfREVCVUdfSU5GTyhEUlZfTkFNRSAiOiBSZXNldHRpbmcgQzMgdHJhbnNpdGlvbnMuXG4iKTsKKwkJSVBXX0RFQlVHX0lORk8oIjogUmVzZXR0aW5nIEMzIHRyYW5zaXRpb25zLlxuIik7CiAJCWFjcGlfc2V0X2NzdGF0ZV9saW1pdChwcml2LT5jc3RhdGVfbGltaXQpOwogCQlwcml2LT5jb25maWcgJj0gfkNGR19DM19ESVNBQkxFRDsKIAl9CkBAIC0yMTAyLDE2ICsyMDg1LDE2IEBACiAjZGVmaW5lIElQVzIxMDBfSEFORExFUih2LCBmKSB7IHYsIGYsICMgdiB9CiBzdHJ1Y3QgaXB3MjEwMF9zdGF0dXNfaW5kaWNhdG9yIHsKIAlpbnQgc3RhdHVzOwotCXZvaWQgKCpjYikoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHN0YXR1cyk7CisJdm9pZCAoKmNiKSAoc3RydWN0IGlwdzIxMDBfcHJpdiAqIHByaXYsIHUzMiBzdGF0dXMpOwogCWNoYXIgKm5hbWU7CiB9OwogI2Vsc2UKICNkZWZpbmUgSVBXMjEwMF9IQU5ETEVSKHYsIGYpIHsgdiwgZiB9CiBzdHJ1Y3QgaXB3MjEwMF9zdGF0dXNfaW5kaWNhdG9yIHsKIAlpbnQgc3RhdHVzOwotCXZvaWQgKCpjYikoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHN0YXR1cyk7CisJdm9pZCAoKmNiKSAoc3RydWN0IGlwdzIxMDBfcHJpdiAqIHByaXYsIHUzMiBzdGF0dXMpOwogfTsKLSNlbmRpZiAvKiBDT05GSUdfSVBXX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19ERUJVRyAqLwogCiBzdGF0aWMgdm9pZCBpc3JfaW5kaWNhdGVfc2Nhbm5pbmcoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHN0YXR1cykKIHsKQEAgLTIxMzUsNyArMjExOCw2IEBACiAJSVBXMjEwMF9IQU5ETEVSKC0xLCBOVUxMKQogfTsKIAotCiBzdGF0aWMgdm9pZCBpc3Jfc3RhdHVzX2NoYW5nZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgc3RhdHVzKQogewogCWludCBpOwpAQCAtMjE1Myw3ICsyMTM1LDcgQEAKIAlmb3IgKGkgPSAwOyBzdGF0dXNfaGFuZGxlcnNbaV0uc3RhdHVzICE9IC0xOyBpKyspIHsKIAkJaWYgKHN0YXR1cyA9PSBzdGF0dXNfaGFuZGxlcnNbaV0uc3RhdHVzKSB7CiAJCQlJUFdfREVCVUdfTk9USUYoIlN0YXR1cyBjaGFuZ2U6ICVzXG4iLAotCQkJCQkgc3RhdHVzX2hhbmRsZXJzW2ldLm5hbWUpOworCQkJCQlzdGF0dXNfaGFuZGxlcnNbaV0ubmFtZSk7CiAJCQlpZiAoc3RhdHVzX2hhbmRsZXJzW2ldLmNiKQogCQkJCXN0YXR1c19oYW5kbGVyc1tpXS5jYihwcml2LCBzdGF0dXMpOwogCQkJcHJpdi0+d3N0YXRzLnN0YXR1cyA9IHN0YXR1czsKQEAgLTIxNjQsOSArMjE0Niw4IEBACiAJSVBXX0RFQlVHX05PVElGKCJ1bmtub3duIHN0YXR1cyByZWNlaXZlZDogJTA0eFxuIiwgc3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgaXNyX3J4X2NvbXBsZXRlX2NvbW1hbmQoCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKLQlzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyICpjbWQpCitzdGF0aWMgdm9pZCBpc3JfcnhfY29tcGxldGVfY29tbWFuZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyICpjbWQpCiB7CiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogCWlmIChjbWQtPmhvc3RfY29tbWFuZF9yZWcgPCBBUlJBWV9TSVpFKGNvbW1hbmRfdHlwZXMpKSB7CkBAIC0yMTk2LDEwICsyMTc3LDggQEAKIH07CiAjZW5kaWYKIAotCi1zdGF0aWMgaW5saW5lIGludCBpcHcyMTAwX2FsbG9jX3NrYigKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0KQorc3RhdGljIGlubGluZSBpbnQgaXB3MjEwMF9hbGxvY19za2Ioc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0ICpwYWNrZXQpCiB7CiAJcGFja2V0LT5za2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9yeCkpOwogCWlmICghcGFja2V0LT5za2IpCkBAIC0yMjE1LDcgKzIxOTQsNiBAQAogCXJldHVybiAwOwogfQogCi0KICNkZWZpbmUgU0VBUkNIX0VSUk9SICAgMHhmZmZmZmZmZgogI2RlZmluZSBTRUFSQ0hfRkFJTCAgICAweGZmZmZmZmZlCiAjZGVmaW5lIFNFQVJDSF9TVUNDRVNTIDB4ZmZmZmZmZjAKQEAgLTIyMjksMTAgKzIyMDcsMTAgQEAKIAlpZiAocHJpdi0+c25hcHNob3RbMF0pCiAJCXJldHVybiAxOwogCWZvciAoaSA9IDA7IGkgPCAweDMwOyBpKyspIHsKLQkJcHJpdi0+c25hcHNob3RbaV0gPSAodTgqKWttYWxsb2MoMHgxMDAwLCBHRlBfQVRPTUlDKTsKKwkJcHJpdi0+c25hcHNob3RbaV0gPSAodTggKikga21hbGxvYygweDEwMDAsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXByaXYtPnNuYXBzaG90W2ldKSB7CiAJCQlJUFdfREVCVUdfSU5GTygiJXM6IEVycm9yIGFsbG9jYXRpbmcgc25hcHNob3QgIgotCQkJICAgICAgICJidWZmZXIgJWRcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUsIGkpOworCQkJCSAgICAgICAiYnVmZmVyICVkXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lLCBpKTsKIAkJCXdoaWxlIChpID4gMCkKIAkJCQlrZnJlZShwcml2LT5zbmFwc2hvdFstLWldKTsKIAkJCXByaXYtPnNuYXBzaG90WzBdID0gTlVMTDsKQEAgLTIyNTMsNyArMjIzMSw3IEBACiAJcHJpdi0+c25hcHNob3RbMF0gPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBpcHcyMTAwX21hdGNoX2J1ZihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1OCAqaW5fYnVmLAorc3RhdGljIGlubGluZSB1MzIgaXB3MjEwMF9tYXRjaF9idWYoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTggKiBpbl9idWYsCiAJCQkJICAgIHNpemVfdCBsZW4sIGludCBtb2RlKQogewogCXUzMiBpLCBqOwpAQCAtMjI3MCw5ICsyMjQ4LDkgQEAKIAlmb3IgKHJldCA9IFNFQVJDSF9GQUlMLCBpID0gMDsgaSA8IDB4MzAwMDA7IGkgKz0gNCkgewogCQlyZWFkX25pY19kd29yZChwcml2LT5uZXRfZGV2LCBpLCAmdG1wKTsKIAkJaWYgKG1vZGUgPT0gU0VBUkNIX1NOQVBTSE9UKQotCQkJKih1MzIgKilTTkFQU0hPVF9BRERSKGkpID0gdG1wOworCQkJKih1MzIgKikgU05BUFNIT1RfQUREUihpKSA9IHRtcDsKIAkJaWYgKHJldCA9PSBTRUFSQ0hfRkFJTCkgewotCQkJZCA9ICh1OCopJnRtcDsKKwkJCWQgPSAodTggKikgJiB0bXA7CiAJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CiAJCQkJaWYgKCpzICE9ICpkKSB7CiAJCQkJCXMgPSBpbl9idWY7CkBAIC0yMzEwLDggKzIyODgsNyBAQAogc3RhdGljIHU4IHBhY2tldF9kYXRhW0lQV19SWF9OSUNfQlVGRkVSX0xFTkdUSF07CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGlwdzIxMDBfY29ycnVwdGlvbl9kZXRlY3RlZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJCQkgICAgICAgaW50IGkpCitzdGF0aWMgaW5saW5lIHZvaWQgaXB3MjEwMF9jb3JydXB0aW9uX2RldGVjdGVkKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpKQogewogI2lmZGVmIENPTkZJR19JUFdfREVCVUdfQzMKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwpAQCAtMjMyMiwxMSArMjI5OSwxMSBAQAogCWludCBsaW1pdDsKICNlbmRpZgogCi0JSVBXX0RFQlVHX0lORk8oRFJWX05BTUUgIjogUENJIGxhdGVuY3kgZXJyb3IgZGV0ZWN0ZWQgYXQgIgotCQkgICAgICAgIjB4JTA0elguXG4iLCBpICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cykpOworCUlQV19ERUJVR19JTkZPKCI6IFBDSSBsYXRlbmN5IGVycm9yIGRldGVjdGVkIGF0IDB4JTA0elguXG4iLAorCQkgICAgICAgaSAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMpKTsKIAogI2lmZGVmIEFDUElfQ1NUQVRFX0xJTUlUX0RFRklORUQKLQlJUFdfREVCVUdfSU5GTyhEUlZfTkFNRSAiOiBEaXNhYmxpbmcgQzMgdHJhbnNpdGlvbnMuXG4iKTsKKwlJUFdfREVCVUdfSU5GTygiOiBEaXNhYmxpbmcgQzMgdHJhbnNpdGlvbnMuXG4iKTsKIAlsaW1pdCA9IGFjcGlfZ2V0X2NzdGF0ZV9saW1pdCgpOwogCWlmIChsaW1pdCA+IDIpIHsKIAkJcHJpdi0+Y3N0YXRlX2xpbWl0ID0gbGltaXQ7CkBAIC0yMzQ2LDkgKzIzMjMsOSBAQAogCiAJCWlmIChyZWcgJiBJUFdfQVVYX0hPU1RfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCkKIAkJCWJyZWFrOwotCX0gIHdoaWxlIChqLS0pOworCX0gd2hpbGUgKGotLSk7CiAKLQltYXRjaCA9IGlwdzIxMDBfbWF0Y2hfYnVmKHByaXYsICh1OCopc3RhdHVzLAorCW1hdGNoID0gaXB3MjEwMF9tYXRjaF9idWYocHJpdiwgKHU4ICopIHN0YXR1cywKIAkJCQkgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMpLAogCQkJCSAgU0VBUkNIX1NOQVBTSE9UKTsKIAlpZiAobWF0Y2ggPCBTRUFSQ0hfU1VDQ0VTUykKQEAgLTIzNjAsNyArMjMzNyw3IEBACiAJCUlQV19ERUJVR19JTkZPKCIlczogTm8gRE1BIHN0YXR1cyBtYXRjaCBpbiAiCiAJCQkgICAgICAgIkZpcm13YXJlLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAKLQlwcmludGtfYnVmKCh1OCopcHJpdi0+c3RhdHVzX3F1ZXVlLmRydiwKKwlwcmludGtfYnVmKCh1OCAqKSBwcml2LT5zdGF0dXNfcXVldWUuZHJ2LAogCQkgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSAqIFJYX1FVRVVFX0xFTkdUSCk7CiAjZW5kaWYKIApAQCAtMjM5MiwyNiArMjM2OSwyNiBAQAogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKIAkJcmV0dXJuOwogCX0KLQorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKIAlpZiAodW5saWtlbHkocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IgJiYKKwkJICAgICBwcml2LT5jb25maWcgJiBDRkdfQ1JDX0NIRUNLICYmCiAJCSAgICAgc3RhdHVzLT5mbGFncyAmIElQV19TVEFUVVNfRkxBR19DUkNfRVJST1IpKSB7CiAJCUlQV19ERUJVR19SWCgiQ1JDIGVycm9yIGluIHBhY2tldC4gIERyb3BwaW5nLlxuIik7CiAJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXR1cm47CiAJfQorI2VuZGlmCiAKIAlpZiAodW5saWtlbHkocHJpdi0+aWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX01PTklUT1IgJiYKLQkJIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpKSB7CisJCSAgICAgIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpKSB7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgbm90IGFzc29jaWF0ZWQuXG4iKTsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlyZXR1cm47CiAJfQogCi0KIAlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkgcGFja2V0LT5kbWFfYWRkciwKLQkJCSBzaXplb2Yoc3RydWN0IGlwdzIxMDBfcngpLAotCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3J4KSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCXNrYl9wdXQocGFja2V0LT5za2IsIHN0YXR1cy0+ZnJhbWVfc2l6ZSk7CiAKQEAgLTI0MzgsOCArMjQxNSw4IEBACiAJLyogV2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBTS0IgYW5kIGF0dGFjaCBpdCB0byB0aGUgUkRCLiAqLwogCWlmICh1bmxpa2VseShpcHcyMTAwX2FsbG9jX3NrYihwcml2LCBwYWNrZXQpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIKLQkJCSIlczogVW5hYmxlIHRvIGFsbG9jYXRlIFNLQiBvbnRvIFJCRCByaW5nIC0gZGlzYWJsaW5nICIKLQkJCSJhZGFwdGVyLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCSAgICAgICAiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBTS0Igb250byBSQkQgcmluZyAtIGRpc2FibGluZyAiCisJCSAgICAgICAiYWRhcHRlci5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQkvKiBUT0RPOiBzY2hlZHVsZSBhZGFwdGVyIHNodXRkb3duICovCiAJCUlQV19ERUJVR19JTkZPKCJUT0RPOiBTaHV0ZG93biBhZGFwdGVyLi4uXG4iKTsKIAl9CkBAIC0yNTM0LDExICsyNTExLDExIEBACiAKIAkJLyogU3luYyB0aGUgRE1BIGZvciB0aGUgU1RBVFVTIGJ1ZmZlciBzbyBDUFUgaXMgc3VyZSB0byBnZXQKIAkJICogdGhlIGNvcnJlY3QgdmFsdWVzICovCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSgKLQkJCXByaXYtPnBjaV9kZXYsCi0JCQlzcS0+bmljICsgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cykgKiBpLAotCQkJc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cyksCi0JCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocHJpdi0+cGNpX2RldiwKKwkJCQkJICAgIHNxLT5uaWMgKworCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cykgKiBpLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cyksCisJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCS8qIFN5bmMgdGhlIERNQSBmb3IgdGhlIFJYIGJ1ZmZlciBzbyBDUFUgaXMgc3VyZSB0byBnZXQKIAkJICogdGhlIGNvcnJlY3QgdmFsdWVzICovCkBAIC0yNTUyLDggKzI1MjksNyBAQAogCQl9CiAKIAkJdSA9IHBhY2tldC0+cnhwOwotCQlmcmFtZV90eXBlID0gc3EtPmRydltpXS5zdGF0dXNfZmllbGRzICYKLQkJCVNUQVRVU19UWVBFX01BU0s7CisJCWZyYW1lX3R5cGUgPSBzcS0+ZHJ2W2ldLnN0YXR1c19maWVsZHMgJiBTVEFUVVNfVFlQRV9NQVNLOwogCQlzdGF0cy5yc3NpID0gc3EtPmRydltpXS5yc3NpICsgSVBXMjEwMF9SU1NJX1RPX0RCTTsKIAkJc3RhdHMubGVuID0gc3EtPmRydltpXS5mcmFtZV9zaXplOwogCkBAIC0yNTYyLDE2ICsyNTM4LDE0IEBACiAJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19SU1NJOwogCQlzdGF0cy5mcmVxID0gSUVFRTgwMjExXzI0R0haX0JBTkQ7CiAKLQkJSVBXX0RFQlVHX1JYKAotCQkJIiVzOiAnJXMnIGZyYW1lIHR5cGUgcmVjZWl2ZWQgKCVkKS5cbiIsCi0JCQlwcml2LT5uZXRfZGV2LT5uYW1lLCBmcmFtZV90eXBlc1tmcmFtZV90eXBlXSwKLQkJCXN0YXRzLmxlbik7CisJCUlQV19ERUJVR19SWCgiJXM6ICclcycgZnJhbWUgdHlwZSByZWNlaXZlZCAoJWQpLlxuIiwKKwkJCSAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZnJhbWVfdHlwZXNbZnJhbWVfdHlwZV0sCisJCQkgICAgIHN0YXRzLmxlbik7CiAKIAkJc3dpdGNoIChmcmFtZV90eXBlKSB7CiAJCWNhc2UgQ09NTUFORF9TVEFUVVNfVkFMOgogCQkJLyogUmVzZXQgUnggd2F0Y2hkb2cgKi8KLQkJCWlzcl9yeF9jb21wbGV0ZV9jb21tYW5kKAotCQkJCXByaXYsICZ1LT5yeF9kYXRhLmNvbW1hbmQpOworCQkJaXNyX3J4X2NvbXBsZXRlX2NvbW1hbmQocHJpdiwgJnUtPnJ4X2RhdGEuY29tbWFuZCk7CiAJCQlicmVhazsKIAogCQljYXNlIFNUQVRVU19DSEFOR0VfVkFMOgpAQCAtMjU4OCwxMiArMjU2MiwxMCBAQAogI2VuZGlmCiAJCQlpZiAoc3RhdHMubGVuIDwgc2l6ZW9mKHUtPnJ4X2RhdGEuaGVhZGVyKSkKIAkJCQlicmVhazsKLQkJCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRSh1LT5yeF9kYXRhLmhlYWRlci4KLQkJCQkJCSBmcmFtZV9jdGwpKSB7CisJCQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1RZUEUodS0+cnhfZGF0YS5oZWFkZXIuZnJhbWVfY3RsKSkgewogCQkJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKIAkJCQlpZWVlODAyMTFfcnhfbWd0KHByaXYtPmllZWUsCi0JCQkJCQkgJnUtPnJ4X2RhdGEuaGVhZGVyLAotCQkJCQkJICZzdGF0cyk7CisJCQkJCQkgJnUtPnJ4X2RhdGEuaGVhZGVyLCAmc3RhdHMpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6CkBAIC0yNjA3LDcgKzI1NzksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCWluY3JlbWVudDoKKwkgICAgICBpbmNyZW1lbnQ6CiAJCS8qIGNsZWFyIHN0YXR1cyBmaWVsZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBSQkQgKi8KIAkJcnhxLT5kcnZbaV0uc3RhdHVzLmluZm8uZmllbGQgPSAwOwogCkBAIC0yNjE5LDEyICsyNTkxLDEwIEBACiAJCXJ4cS0+bmV4dCA9IChpID8gaSA6IHJ4cS0+ZW50cmllcykgLSAxOwogCiAJCXdyaXRlX3JlZ2lzdGVyKHByaXYtPm5ldF9kZXYsCi0JCQkgICAgICAgSVBXX01FTV9IT1NUX1NIQVJFRF9SWF9XUklURV9JTkRFWCwKLQkJCSAgICAgICByeHEtPm5leHQpOworCQkJICAgICAgIElQV19NRU1fSE9TVF9TSEFSRURfUlhfV1JJVEVfSU5ERVgsIHJ4cS0+bmV4dCk7CiAJfQogfQogCi0KIC8qCiAgKiBfX2lwdzIxMDBfdHhfcHJvY2VzcwogICoKQEAgLTI2NjcsNyArMjYzNyw3IEBACiBzdGF0aWMgaW5saW5lIGludCBfX2lwdzIxMDBfdHhfcHJvY2VzcyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpcHcyMTAwX2JkX3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhfcXVldWU7Ci0gICAgICAgIHN0cnVjdCBpcHcyMTAwX2JkICp0YmQ7CisJc3RydWN0IGlwdzIxMDBfYmQgKnRiZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCXN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCAqcGFja2V0OwogCWludCBkZXNjcmlwdG9yc191c2VkOwpAQCAtMjY4MCw3ICsyNjUwLDcgQEAKIAllbGVtZW50ID0gcHJpdi0+ZndfcGVuZF9saXN0Lm5leHQ7CiAKIAlwYWNrZXQgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCwgbGlzdCk7Ci0gICAgICAgIHRiZCA9ICZ0eHEtPmRydltwYWNrZXQtPmluZGV4XTsKKwl0YmQgPSAmdHhxLT5kcnZbcGFja2V0LT5pbmRleF07CiAKIAkvKiBEZXRlcm1pbmUgaG93IG1hbnkgVEJEIGVudHJpZXMgbXVzdCBiZSBmaW5pc2hlZC4uLiAqLwogCXN3aXRjaCAocGFja2V0LT50eXBlKSB7CkBAIC0yNjkzLDE0ICsyNjYzLDE0IEBACiAJY2FzZSBEQVRBOgogCQkvKiBEQVRBIHVzZXMgdHdvIHNsb3RzOyBhZHZhbmNlIGFuZCBsb29wIHBvc2l0aW9uLiAqLwogCQlkZXNjcmlwdG9yc191c2VkID0gdGJkLT5udW1fZnJhZ21lbnRzOwotICAgICAgICAgICAgICAgIGZyYWdfbnVtID0gdGJkLT5udW1fZnJhZ21lbnRzIC0gMTsKKwkJZnJhZ19udW0gPSB0YmQtPm51bV9mcmFnbWVudHMgLSAxOwogCQllID0gdHhxLT5vbGRlc3QgKyBmcmFnX251bTsKIAkJZSAlPSB0eHEtPmVudHJpZXM7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogQmFkIGZ3X3BlbmRfbGlzdCBlbnRyeSFcbiIsCi0JCQkJICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNzE2LDEzICsyNjg2LDEyIEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IHdyaXRlIGluZGV4IG1pc21hdGNoXG4iLAogCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAKLSAgICAgICAgLyoKKwkvKgogCSAqIHR4cS0+bmV4dCBpcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgcGFja2V0IHdyaXR0ZW4gdHhxLT5vbGRlc3QgaXMKIAkgKiB0aGUgaW5kZXggb2YgdGhlIHIgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IHBhY2tldCB0byBiZSByZWFkIGJ5CiAJICogZmlybXdhcmUKIAkgKi8KIAotCiAJLyoKIAkgKiBRdWljayBncmFwaGljIHRvIGhlbHAgeW91IHZpc3VhbGl6ZSB0aGUgZm9sbG93aW5nCiAJICogaWYgLyBlbHNlIHN0YXRlbWVudApAQCAtMjc1MCwyMyArMjcxOSwyMCBAQAogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKIAl7CiAJCWludCBpID0gdHhxLT5vbGRlc3Q7Ci0JCUlQV19ERUJVR19UWCgKLQkJCSJUWCVkIFY9JXAgUD0lMDRYIFQ9JTA0WCBMPSVkXG4iLCBpLAotCQkJJnR4cS0+ZHJ2W2ldLAotCQkJKHUzMikodHhxLT5uaWMgKyBpICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2JkKSksCi0JCQl0eHEtPmRydltpXS5ob3N0X2FkZHIsCi0JCQl0eHEtPmRydltpXS5idWZfbGVuZ3RoKTsKKwkJSVBXX0RFQlVHX1RYKCJUWCVkIFY9JXAgUD0lMDRYIFQ9JTA0WCBMPSVkXG4iLCBpLAorCQkJICAgICAmdHhxLT5kcnZbaV0sCisJCQkgICAgICh1MzIpICh0eHEtPm5pYyArIGkgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfYmQpKSwKKwkJCSAgICAgdHhxLT5kcnZbaV0uaG9zdF9hZGRyLCB0eHEtPmRydltpXS5idWZfbGVuZ3RoKTsKIAogCQlpZiAocGFja2V0LT50eXBlID09IERBVEEpIHsKIAkJCWkgPSAoaSArIDEpICUgdHhxLT5lbnRyaWVzOwogCi0JCQlJUFdfREVCVUdfVFgoCi0JCQkJIlRYJWQgVj0lcCBQPSUwNFggVD0lMDRYIEw9JWRcbiIsIGksCi0JCQkJJnR4cS0+ZHJ2W2ldLAotCQkJCSh1MzIpKHR4cS0+bmljICsgaSAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2JkKSksCi0JCQkJKHUzMil0eHEtPmRydltpXS5ob3N0X2FkZHIsCi0JCQkJdHhxLT5kcnZbaV0uYnVmX2xlbmd0aCk7CisJCQlJUFdfREVCVUdfVFgoIlRYJWQgVj0lcCBQPSUwNFggVD0lMDRYIEw9JWRcbiIsIGksCisJCQkJICAgICAmdHhxLT5kcnZbaV0sCisJCQkJICAgICAodTMyKSAodHhxLT5uaWMgKyBpICoKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9iZCkpLAorCQkJCSAgICAgKHUzMikgdHhxLT5kcnZbaV0uaG9zdF9hZGRyLAorCQkJCSAgICAgdHhxLT5kcnZbaV0uYnVmX2xlbmd0aCk7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTI3ODAsMjMgKzI3NDYsMTggQEAKIAkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCB0eHEtPm9sZGVzdCwgcGFja2V0LT5pbmRleCk7CiAKIAkJLyogREFUQSBwYWNrZXQ7IHdlIGhhdmUgdG8gdW5tYXAgYW5kIGZyZWUgdGhlIFNLQiAqLwotCQlwcml2LT5pZWVlLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWZvciAoaSA9IDA7IGkgPCBmcmFnX251bTsgaSsrKSB7Ci0JCQl0YmQgPSAmdHhxLT5kcnZbKHBhY2tldC0+aW5kZXggKyAxICsgaSkgJQotCQkJCQl0eHEtPmVudHJpZXNdOworCQkJdGJkID0gJnR4cS0+ZHJ2WyhwYWNrZXQtPmluZGV4ICsgMSArIGkpICUgdHhxLT5lbnRyaWVzXTsKIAotCQkJSVBXX0RFQlVHX1RYKAotCQkJCSJUWCVkIFA9JTA4eCBMPSVkXG4iLAotCQkJCShwYWNrZXQtPmluZGV4ICsgMSArIGkpICUgdHhxLT5lbnRyaWVzLAotCQkJCXRiZC0+aG9zdF9hZGRyLCB0YmQtPmJ1Zl9sZW5ndGgpOworCQkJSVBXX0RFQlVHX1RYKCJUWCVkIFA9JTA4eCBMPSVkXG4iLAorCQkJCSAgICAgKHBhY2tldC0+aW5kZXggKyAxICsgaSkgJSB0eHEtPmVudHJpZXMsCisJCQkJICAgICB0YmQtPmhvc3RfYWRkciwgdGJkLT5idWZfbGVuZ3RoKTsKIAogCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCQkgdGJkLT5ob3N0X2FkZHIsCi0JCQkJCSB0YmQtPmJ1Zl9sZW5ndGgsCi0JCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJIHRiZC0+YnVmX2xlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CiAJCX0KIAotCQlwcml2LT5pZWVlLT5zdGF0cy50eF9ieXRlcyArPSBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5wYXlsb2FkX3NpemU7CiAJCWllZWU4MDIxMV90eGJfZnJlZShwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiKTsKIAkJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAKQEAgLTI4MDUsMTMgKzI3NjYsOCBAQAogCiAJCS8qIFdlIGhhdmUgYSBmcmVlIHNsb3QgaW4gdGhlIFR4IHF1ZXVlLCBzbyB3YWtlIHVwIHRoZQogCQkgKiB0cmFuc21pdCBsYXllciBpZiBpdCBpcyBzdG9wcGVkLiAqLwotCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQgJiYKLQkJICAgIG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0X2RldikpIHsKLQkJCUlQV19ERUJVR19JTkZPKEtFUk5fSU5GTwotCQkJCQkgICAiJXM6IFdha2luZyBuZXQgcXVldWUuXG4iLAotCQkJCQkgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQogCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQkJfQogCiAJCS8qIEEgcGFja2V0IHdhcyBwcm9jZXNzZWQgYnkgdGhlIGhhcmR3YXJlLCBzbyB1cGRhdGUgdGhlCiAJCSAqIHdhdGNoZG9nICovCkBAIC0yODI5LDExICsyNzg1LDEyIEBACiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogCQlpZiAocGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX3JlZyA8CiAJCSAgICBzaXplb2YoY29tbWFuZF90eXBlcykgLyBzaXplb2YoKmNvbW1hbmRfdHlwZXMpKQotCQkJSVBXX0RFQlVHX1RYKAotCQkJCSJDb21tYW5kICclcyAoJWQpJyBwcm9jZXNzZWQ6ICVkLlxuIiwKLQkJCQljb21tYW5kX3R5cGVzW3BhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmhvc3RfY29tbWFuZF9yZWddLAotCQkJCXBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmhvc3RfY29tbWFuZF9yZWcsCi0JCQkJcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+Y21kX3N0YXR1c19yZWcpOworCQkJSVBXX0RFQlVHX1RYKCJDb21tYW5kICclcyAoJWQpJyBwcm9jZXNzZWQ6ICVkLlxuIiwKKwkJCQkgICAgIGNvbW1hbmRfdHlwZXNbcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+CisJCQkJCQkgICBob3N0X2NvbW1hbmRfcmVnXSwKKwkJCQkgICAgIHBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPgorCQkJCSAgICAgaG9zdF9jb21tYW5kX3JlZywKKwkJCQkgICAgIHBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmNtZF9zdGF0dXNfcmVnKTsKICNlbmRpZgogCiAJCWxpc3RfYWRkX3RhaWwoZWxlbWVudCwgJnByaXYtPm1zZ19mcmVlX2xpc3QpOwpAQCAtMjg0OCwxNyArMjgwNSwxNyBAQAogCVNFVF9TVEFUKCZwcml2LT50eHFfc3RhdCwgdHhxLT5hdmFpbGFibGUpOwogCiAJSVBXX0RFQlVHX1RYKCJwYWNrZXQgbGF0ZW5jeSAoc2VuZCB0byBwcm9jZXNzKSAgJWxkIGppZmZpZXNcbiIsCi0JCQkgamlmZmllcyAtIHBhY2tldC0+amlmZnlfc3RhcnQpOworCQkgICAgIGppZmZpZXMgLSBwYWNrZXQtPmppZmZ5X3N0YXJ0KTsKIAogCXJldHVybiAoIWxpc3RfZW1wdHkoJnByaXYtPmZ3X3BlbmRfbGlzdCkpOwogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lwdzIxMDBfdHhfY29tcGxldGUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKIHsKIAlpbnQgaSA9IDA7CiAKLQl3aGlsZSAoX19pcHcyMTAwX3R4X3Byb2Nlc3MocHJpdikgJiYgaSA8IDIwMCkgaSsrOworCXdoaWxlIChfX2lwdzIxMDBfdHhfcHJvY2Vzcyhwcml2KSAmJiBpIDwgMjAwKQorCQlpKys7CiAKIAlpZiAoaSA9PSAyMDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAiCkBAIC0yODY3LDcgKzI4MjQsNiBAQAogCX0KIH0KIAotCiBzdGF0aWMgdm9pZCBpcHcyMTAwX3R4X3NlbmRfY29tbWFuZHMoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwpAQCAtMjg5MiwxMyArMjg0OCwxMiBAQAogCQlsaXN0X2RlbChlbGVtZW50KTsKIAkJREVDX1NUQVQoJnByaXYtPm1zZ19wZW5kX3N0YXQpOwogCi0JCXBhY2tldCA9IGxpc3RfZW50cnkoZWxlbWVudCwKLQkJCQkgICAgc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0LCBsaXN0KTsKKwkJcGFja2V0ID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQsIGxpc3QpOwogCiAJCUlQV19ERUJVR19UWCgidXNpbmcgVEJEIGF0IHZpcnQ9JXAsIHBoeXM9JXBcbiIsCi0JCQkJICZ0eHEtPmRydlt0eHEtPm5leHRdLAotCQkJCSAodm9pZCopKHR4cS0+bmljICsgdHhxLT5uZXh0ICoKLQkJCQkJIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9iZCkpKTsKKwkJCSAgICAgJnR4cS0+ZHJ2W3R4cS0+bmV4dF0sCisJCQkgICAgICh2b2lkICopKHR4cS0+bmljICsgdHhxLT5uZXh0ICoKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfYmQpKSk7CiAKIAkJcGFja2V0LT5pbmRleCA9IHR4cS0+bmV4dDsKIApAQCAtMjkxMSw4ICsyODY2LDggQEAKIAkJICogd2l0aCBmL3cgZGVidWcgdmVyc2lvbiAqLwogCQl0YmQtPm51bV9mcmFnbWVudHMgPSAxOwogCQl0YmQtPnN0YXR1cy5pbmZvLmZpZWxkID0KLQkJCUlQV19CRF9TVEFUVVNfVFhfRlJBTUVfQ09NTUFORCB8Ci0JCQlJUFdfQkRfU1RBVFVTX1RYX0lOVEVSUlVQVF9FTkFCTEU7CisJCSAgICBJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FX0NPTU1BTkQgfAorCQkgICAgSVBXX0JEX1NUQVRVU19UWF9JTlRFUlJVUFRfRU5BQkxFOwogCiAJCS8qIHVwZGF0ZSBUQkQgcXVldWUgY291bnRlcnMgKi8KIAkJdHhxLT5uZXh0Kys7CkBAIC0yOTM0LDcgKzI4ODksNiBAQAogCX0KIH0KIAotCiAvKgogICogaXB3MjEwMF90eF9zZW5kX2RhdGEKICAqCkBAIC0yOTQ2LDcgKzI5MDAsNyBAQAogCXN0cnVjdCBpcHcyMTAwX2JkX3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhfcXVldWU7CiAJc3RydWN0IGlwdzIxMDBfYmQgKnRiZDsKIAlpbnQgbmV4dCA9IHR4cS0+bmV4dDsKLSAgICAgICAgaW50IGkgPSAwOworCWludCBpID0gMDsKIAlzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciAqaXB3X2hkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyOwogCkBAIC0yOTU4LDIwICsyOTEyLDE4IEBACiAJCSAqICAgICAgIG1haW50YWluZWQgYmV0d2VlbiB0aGUgciBhbmQgdyBpbmRleGVzCiAJCSAqLwogCQllbGVtZW50ID0gcHJpdi0+dHhfcGVuZF9saXN0Lm5leHQ7Ci0gICAgICAgICAgICAgICAgcGFja2V0ID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQsIGxpc3QpOworCQlwYWNrZXQgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCwgbGlzdCk7CiAKIAkJaWYgKHVubGlrZWx5KDEgKyBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyA+CiAJCQkgICAgIElQV19NQVhfQkRTKSkgewogCQkJLyogVE9ETzogU3VwcG9ydCBtZXJnaW5nIGJ1ZmZlcnMgaWYgbW9yZSB0aGFuCiAJCQkgKiBJUFdfTUFYX0JEUyBhcmUgdXNlZCAqLwotCQkJSVBXX0RFQlVHX0lORk8oCi0JCQkgICAgICAgIiVzOiBNYXhpbXVtIEJEIHRoZXNob2xkIGV4Y2VlZGVkLiAgIgotCQkJICAgICAgICJJbmNyZWFzZSBmcmFnbWVudGF0aW9uIGxldmVsLlxuIiwKLQkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCUlQV19ERUJVR19JTkZPKCIlczogTWF4aW11bSBCRCB0aGVzaG9sZCBleGNlZWRlZC4gICIKKwkJCQkgICAgICAgIkluY3JlYXNlIGZyYWdtZW50YXRpb24gbGV2ZWwuXG4iLAorCQkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJfQogCi0JCWlmICh0eHEtPmF2YWlsYWJsZSA8PSAzICsKLQkJICAgIHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzKSB7CisJCWlmICh0eHEtPmF2YWlsYWJsZSA8PSAzICsgcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3MpIHsKIAkJCUlQV19ERUJVR19UWCgibm8gcm9vbSBpbiB0eF9xdWV1ZVxuIik7CiAJCQlicmVhazsKIAkJfQpAQCAtMjk4NSw3ICsyOTM3LDcgQEAKIAogCQlpcHdfaGRyID0gcGFja2V0LT5pbmZvLmRfc3RydWN0LmRhdGE7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPgotCQkJZnJhZ21lbnRzWzBdLT5kYXRhOworCQkgICAgZnJhZ21lbnRzWzBdLT5kYXRhOwogCiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpIHsKIAkJCS8qIFRvIERTOiBBZGRyMSA9IEJTU0lELCBBZGRyMiA9IFNBLApAQCAtMzAwNyw3ICsyOTU5LDggQEAKIAkJaXB3X2hkci0+ZW5jcnlwdGVkID0gcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+ZW5jcnlwdGVkOwogCQlpZiAocGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3MgPiAxKQogCQkJaXB3X2hkci0+ZnJhZ21lbnRfc2l6ZSA9Ci0JCQkJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+ZnJhZ19zaXplIC0gSUVFRTgwMjExXzNBRERSX0xFTjsKKwkJCSAgICBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5mcmFnX3NpemUgLQorCQkJICAgIElFRUU4MDIxMV8zQUREUl9MRU47CiAJCWVsc2UKIAkJCWlwd19oZHItPmZyYWdtZW50X3NpemUgPSAwOwogCkBAIC0zMDE1LDU0ICsyOTY4LDUzIEBACiAJCXRiZC0+YnVmX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlcik7CiAJCXRiZC0+bnVtX2ZyYWdtZW50cyA9IDEgKyBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFnczsKIAkJdGJkLT5zdGF0dXMuaW5mby5maWVsZCA9Ci0JCQlJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FXzgwMl8zIHwKLQkJCUlQV19CRF9TVEFUVVNfVFhfRlJBTUVfTk9UX0xBU1RfRlJBR01FTlQ7CisJCSAgICBJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FXzgwMl8zIHwKKwkJICAgIElQV19CRF9TVEFUVVNfVFhfRlJBTUVfTk9UX0xBU1RfRlJBR01FTlQ7CiAJCXR4cS0+bmV4dCsrOwogCQl0eHEtPm5leHQgJT0gdHhxLT5lbnRyaWVzOwogCi0JCUlQV19ERUJVR19UWCgKLQkJCSJkYXRhIGhlYWRlciB0YmQgVFglZCBQPSUwOHggTD0lZFxuIiwKLQkJCXBhY2tldC0+aW5kZXgsIHRiZC0+aG9zdF9hZGRyLAotCQkJdGJkLT5idWZfbGVuZ3RoKTsKKwkJSVBXX0RFQlVHX1RYKCJkYXRhIGhlYWRlciB0YmQgVFglZCBQPSUwOHggTD0lZFxuIiwKKwkJCSAgICAgcGFja2V0LT5pbmRleCwgdGJkLT5ob3N0X2FkZHIsIHRiZC0+YnVmX2xlbmd0aCk7CiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogCQlpZiAocGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3MgPiAxKQogCQkJSVBXX0RFQlVHX0ZSQUcoImZyYWdtZW50IFR4OiAlZCBmcmFtZXNcbiIsCiAJCQkJICAgICAgIHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzKTsKICNlbmRpZgogCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzOyBpKyspIHsKLQkJICAgICAgICB0YmQgPSAmdHhxLT5kcnZbdHhxLT5uZXh0XTsKKwkJZm9yIChpID0gMDsgaSA8IHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzOyBpKyspIHsKKwkJCXRiZCA9ICZ0eHEtPmRydlt0eHEtPm5leHRdOwogCQkJaWYgKGkgPT0gcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3MgLSAxKQogCQkJCXRiZC0+c3RhdHVzLmluZm8uZmllbGQgPQotCQkJCQlJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FXzgwMl8zIHwKLQkJCQkJSVBXX0JEX1NUQVRVU19UWF9JTlRFUlJVUFRfRU5BQkxFOworCQkJCSAgICBJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FXzgwMl8zIHwKKwkJCQkgICAgSVBXX0JEX1NUQVRVU19UWF9JTlRFUlJVUFRfRU5BQkxFOwogCQkJZWxzZQogCQkJCXRiZC0+c3RhdHVzLmluZm8uZmllbGQgPQotCQkJCQlJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FXzgwMl8zIHwKLQkJCQkJSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9OT1RfTEFTVF9GUkFHTUVOVDsKKwkJCQkgICAgSVBXX0JEX1NUQVRVU19UWF9GUkFNRV84MDJfMyB8CisJCQkJICAgIElQV19CRF9TVEFUVVNfVFhfRlJBTUVfTk9UX0xBU1RfRlJBR01FTlQ7CiAKIAkJCXRiZC0+YnVmX2xlbmd0aCA9IHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPgotCQkJCWZyYWdtZW50c1tpXS0+bGVuIC0gSUVFRTgwMjExXzNBRERSX0xFTjsKKwkJCSAgICBmcmFnbWVudHNbaV0tPmxlbiAtIElFRUU4MDIxMV8zQUREUl9MRU47CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRiZC0+aG9zdF9hZGRyID0gcGNpX21hcF9zaW5nbGUoCi0JCQkJcHJpdi0+cGNpX2RldiwKLQkJCQlwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5mcmFnbWVudHNbaV0tPmRhdGEgKwotCQkJCUlFRUU4MDIxMV8zQUREUl9MRU4sCi0JCQkJdGJkLT5idWZfbGVuZ3RoLAotCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdGJkLT5ob3N0X2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAorCQkJCQkJCXBhY2tldC0+aW5mby5kX3N0cnVjdC4KKwkJCQkJCQl0eGItPmZyYWdtZW50c1tpXS0+CisJCQkJCQkJZGF0YSArCisJCQkJCQkJSUVFRTgwMjExXzNBRERSX0xFTiwKKwkJCQkJCQl0YmQtPmJ1Zl9sZW5ndGgsCisJCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAKLQkJCUlQV19ERUJVR19UWCgKLQkJCQkiZGF0YSBmcmFnIHRiZCBUWCVkIFA9JTA4eCBMPSVkXG4iLAotCQkJCXR4cS0+bmV4dCwgdGJkLT5ob3N0X2FkZHIsIHRiZC0+YnVmX2xlbmd0aCk7CisJCQlJUFdfREVCVUdfVFgoImRhdGEgZnJhZyB0YmQgVFglZCBQPSUwOHggTD0lZFxuIiwKKwkJCQkgICAgIHR4cS0+bmV4dCwgdGJkLT5ob3N0X2FkZHIsCisJCQkJICAgICB0YmQtPmJ1Zl9sZW5ndGgpOwogCi0JCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoCi0JCQkJcHJpdi0+cGNpX2RldiwgdGJkLT5ob3N0X2FkZHIsCi0JCQkJdGJkLT5idWZfbGVuZ3RoLAotCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHByaXYtPnBjaV9kZXYsCisJCQkJCQkgICAgICAgdGJkLT5ob3N0X2FkZHIsCisJCQkJCQkgICAgICAgdGJkLT5idWZfbGVuZ3RoLAorCQkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJCQl0eHEtPm5leHQrKzsKIAkJCXR4cS0+bmV4dCAlPSB0eHEtPmVudHJpZXM7Ci0gICAgICAgICAgICAgICAgfQorCQl9CiAKIAkJdHhxLT5hdmFpbGFibGUgLT0gMSArIHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzOwogCQlTRVRfU1RBVCgmcHJpdi0+dHhxX3N0YXQsIHR4cS0+YXZhaWxhYmxlKTsKQEAgLTMwNzgsNyArMzAzMCw3IEBACiAJCQkgICAgICAgSVBXX01FTV9IT1NUX1NIQVJFRF9UWF9RVUVVRV9XUklURV9JTkRFWCwKIAkJCSAgICAgICB0eHEtPm5leHQpOwogCX0KLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgaXB3MjEwMF9pcnFfdGFza2xldChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQpAQCAtMzEwNiwxMSArMzA1OCw5IEBACiAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9GQVRBTF9FUlJPUikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkJICAiOiBGYXRhbCBpbnRlcnJ1cHQuIFNjaGVkdWxpbmcgZmlybXdhcmUgcmVzdGFydC5cbiIpOworCQkgICAgICAgIjogRmF0YWwgaW50ZXJydXB0LiBTY2hlZHVsaW5nIGZpcm13YXJlIHJlc3RhcnQuXG4iKTsKIAkJcHJpdi0+aW50YV9vdGhlcisrOwotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJSVBXMjEwMF9JTlRBX0ZBVEFMX0VSUk9SKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsIElQVzIxMDBfSU5UQV9GQVRBTF9FUlJPUik7CiAKIAkJcmVhZF9uaWNfZHdvcmQoZGV2LCBJUFdfTklDX0ZBVEFMX0VSUk9SLCAmcHJpdi0+ZmF0YWxfZXJyb3IpOwogCQlJUFdfREVCVUdfSU5GTygiJXM6IEZhdGFsIGVycm9yIHZhbHVlOiAweCUwOFhcbiIsCkBAIC0zMTI1LDExICszMDc1LDEwIEBACiAJfQogCiAJaWYgKGludGEgJiBJUFcyMTAwX0lOVEFfUEFSSVRZX0VSUk9SKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAqKioqKiBQQVJJVFkgRVJST1IgSU5URVJSVVBUICEhISEgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAqKioqKiBQQVJJVFkgRVJST1IgSU5URVJSVVBUICEhISEgXG4iKTsKIAkJcHJpdi0+aW50YV9vdGhlcisrOwotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJSVBXMjEwMF9JTlRBX1BBUklUWV9FUlJPUik7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfUEFSSVRZX0VSUk9SKTsKIAl9CiAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9SWF9UUkFOU0ZFUikgewpAQCAtMzEzNyw5ICszMDg2LDcgQEAKIAogCQlwcml2LT5yeF9pbnRlcnJ1cHRzKys7CiAKLQkJd3JpdGVfcmVnaXN0ZXIoCi0JCQlkZXYsIElQV19SRUdfSU5UQSwKLQkJCUlQVzIxMDBfSU5UQV9SWF9UUkFOU0ZFUik7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfUlhfVFJBTlNGRVIpOwogCiAJCV9faXB3MjEwMF9yeF9wcm9jZXNzKHByaXYpOwogCQlfX2lwdzIxMDBfdHhfY29tcGxldGUocHJpdik7CkBAIC0zMTUwLDggKzMwOTcsNyBAQAogCiAJCXByaXYtPnR4X2ludGVycnVwdHMrKzsKIAotCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwKLQkJCSAgICAgICBJUFcyMTAwX0lOVEFfVFhfVFJBTlNGRVIpOworCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwgSVBXMjEwMF9JTlRBX1RYX1RSQU5TRkVSKTsKIAogCQlfX2lwdzIxMDBfdHhfY29tcGxldGUocHJpdik7CiAJCWlwdzIxMDBfdHhfc2VuZF9jb21tYW5kcyhwcml2KTsKQEAgLTMxNjEsOSArMzEwNyw3IEBACiAJaWYgKGludGEgJiBJUFcyMTAwX0lOVEFfVFhfQ09NUExFVEUpIHsKIAkJSVBXX0RFQlVHX0lTUigiVFggY29tcGxldGVcbiIpOwogCQlwcml2LT5pbnRhX290aGVyKys7Ci0JCXdyaXRlX3JlZ2lzdGVyKAotCQkJZGV2LCBJUFdfUkVHX0lOVEEsCi0JCQlJUFcyMTAwX0lOVEFfVFhfQ09NUExFVEUpOworCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwgSVBXMjEwMF9JTlRBX1RYX0NPTVBMRVRFKTsKIAogCQlfX2lwdzIxMDBfdHhfY29tcGxldGUocHJpdik7CiAJfQpAQCAtMzE3MSw5ICszMTE1LDcgQEAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9FVkVOVF9JTlRFUlJVUFQpIHsKIAkJLyogaXB3MjEwMF9oYW5kbGVfZXZlbnQoZGV2KTsgKi8KIAkJcHJpdi0+aW50YV9vdGhlcisrOwotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJSVBXMjEwMF9JTlRBX0VWRU5UX0lOVEVSUlVQVCk7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfRVZFTlRfSU5URVJSVVBUKTsKIAl9CiAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9GV19JTklUX0RPTkUpIHsKQEAgLTMxODMsMzAgKzMxMjUsMjUgQEAKIAkJcmVhZF9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwgJnRtcCk7CiAJCWlmICh0bXAgJiAoSVBXMjEwMF9JTlRBX0ZBVEFMX0VSUk9SIHwKIAkJCSAgIElQVzIxMDBfSU5UQV9QQVJJVFlfRVJST1IpKSB7Ci0JCQl3cml0ZV9yZWdpc3RlcigKLQkJCQlkZXYsIElQV19SRUdfSU5UQSwKLQkJCQlJUFcyMTAwX0lOVEFfRkFUQUxfRVJST1IgfAotCQkJCUlQVzIxMDBfSU5UQV9QQVJJVFlfRVJST1IpOworCQkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsCisJCQkJICAgICAgIElQVzIxMDBfSU5UQV9GQVRBTF9FUlJPUiB8CisJCQkJICAgICAgIElQVzIxMDBfSU5UQV9QQVJJVFlfRVJST1IpOwogCQl9CiAKLQkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsCi0JCQkgICAgICAgSVBXMjEwMF9JTlRBX0ZXX0lOSVRfRE9ORSk7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfRldfSU5JVF9ET05FKTsKIAl9CiAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9TVEFUVVNfQ0hBTkdFKSB7CiAJCUlQV19ERUJVR19JU1IoIlN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0XG4iKTsKIAkJcHJpdi0+aW50YV9vdGhlcisrOwotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJSVBXMjEwMF9JTlRBX1NUQVRVU19DSEFOR0UpOworCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwgSVBXMjEwMF9JTlRBX1NUQVRVU19DSEFOR0UpOwogCX0KIAogCWlmIChpbnRhICYgSVBXMjEwMF9JTlRBX1NMQVZFX01PREVfSE9TVF9DT01NQU5EX0RPTkUpIHsKIAkJSVBXX0RFQlVHX0lTUigic2xhdmUgaG9zdCBtb2RlIGludGVycnVwdFxuIik7CiAJCXByaXYtPmludGFfb3RoZXIrKzsKLQkJd3JpdGVfcmVnaXN0ZXIoCi0JCQlkZXYsIElQV19SRUdfSU5UQSwKLQkJCUlQVzIxMDBfSU5UQV9TTEFWRV9NT0RFX0hPU1RfQ09NTUFORF9ET05FKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsCisJCQkgICAgICAgSVBXMjEwMF9JTlRBX1NMQVZFX01PREVfSE9TVF9DT01NQU5EX0RPTkUpOwogCX0KIAogCXByaXYtPmluX2lzci0tOwpAQCAtMzIxNyw5ICszMTU0LDcgQEAKIAlJUFdfREVCVUdfSVNSKCJleGl0XG4iKTsKIH0KIAotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXB3MjEwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlycXJldHVybl90IGlwdzIxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkYXRhOwogCXUzMiBpbnRhLCBpbnRhX21hc2s7CkBAIC0zMjI3LDcgKzMxNjIsNyBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0gCXNwaW5fbG9jaygmcHJpdi0+bG93X2xvY2spOworCXNwaW5fbG9jaygmcHJpdi0+bG93X2xvY2spOwogCiAJLyogV2UgY2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBiZSBpZ25vcmluZyBpbnRlcnJ1cHRzIGJlZm9yZQogCSAqIHdlIHRvdWNoIHRoZSBoYXJkd2FyZS4gIER1cmluZyB1Y29kZSBsb2FkIGlmIHdlIHRyeSBhbmQgaGFuZGxlCkBAIC0zMjYxLDEwICszMTk2LDEwIEBACiAJaXB3MjEwMF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci0gCXNwaW5fdW5sb2NrKCZwcml2LT5sb3dfbG9jayk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvd19sb2NrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKLSBub25lOgorICAgICAgbm9uZToKIAlzcGluX3VubG9jaygmcHJpdi0+bG93X2xvY2spOwogCXJldHVybiBJUlFfTk9ORTsKIH0KQEAgLTMyOTQsMTAgKzMyMjksOCBAQAogCiAJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4YiA9IHR4YjsKIAotCUlQV19ERUJVR19UWCgiU2VuZGluZyBmcmFnbWVudCAoJWQgYnl0ZXMpOlxuIiwKLQkJCSB0eGItPmZyYWdtZW50c1swXS0+bGVuKTsKLQlwcmludGtfYnVmKElQV19ETF9UWCwgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGEsCi0JCSAgIHR4Yi0+ZnJhZ21lbnRzWzBdLT5sZW4pOworCUlQV19ERUJVR19UWCgiU2VuZGluZyBmcmFnbWVudCAoJWQgYnl0ZXMpOlxuIiwgdHhiLT5mcmFnbWVudHNbMF0tPmxlbik7CisJcHJpbnRrX2J1ZihJUFdfRExfVFgsIHR4Yi0+ZnJhZ21lbnRzWzBdLT5kYXRhLCB0eGItPmZyYWdtZW50c1swXS0+bGVuKTsKIAogCXBhY2tldC0+amlmZnlfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0zMzEyLDIyICszMjQ1LDIzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIAotIGZhaWxfdW5sb2NrOgorICAgICAgZmFpbF91bmxvY2s6CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvd19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX21zZ19hbGxvY2F0ZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCWludCBpLCBqLCBlcnIgPSAtRUlOVkFMOwogCXZvaWQgKnY7CiAJZG1hX2FkZHJfdCBwOwogCi0JcHJpdi0+bXNnX2J1ZmZlcnMgPSAoc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0ICopa21hbGxvYygKLQkJSVBXX0NPTU1BTkRfUE9PTF9TSVpFICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCksCi0JCUdGUF9LRVJORUwpOworCXByaXYtPm1zZ19idWZmZXJzID0KKwkgICAgKHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCAqKWttYWxsb2MoSVBXX0NPTU1BTkRfUE9PTF9TSVpFICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QKKwkJCQkJCSAgICAgICBpcHcyMTAwX3R4X3BhY2tldCksCisJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPm1zZ19idWZmZXJzKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogUENJIGFsbG9jIGZhaWxlZCBmb3IgbXNnICIKIAkJICAgICAgICJidWZmZXJzLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CkBAIC0zMzM1LDE1ICszMjY5LDEyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IElQV19DT01NQU5EX1BPT0xfU0laRTsgaSsrKSB7Ci0JCXYgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKLQkJCXByaXYtPnBjaV9kZXYsCi0JCQlzaXplb2Yoc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciksCi0JCQkmcCk7CisJCXYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIpLCAmcCk7CiAJCWlmICghdikgewogCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICIKIAkJCSAgICAgICAiJXM6IFBDSSBhbGxvYyBmYWlsZWQgZm9yIG1zZyAiCi0JCQkgICAgICAgImJ1ZmZlcnMuXG4iLAotCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJICAgICAgICJidWZmZXJzLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KQEAgLTMzNTIsNyArMzI4Myw3IEBACiAKIAkJcHJpdi0+bXNnX2J1ZmZlcnNbaV0udHlwZSA9IENPTU1BTkQ7CiAJCXByaXYtPm1zZ19idWZmZXJzW2ldLmluZm8uY19zdHJ1Y3QuY21kID0KLQkJCShzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyKil2OworCQkgICAgKHN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgKil2OwogCQlwcml2LT5tc2dfYnVmZmVyc1tpXS5pbmZvLmNfc3RydWN0LmNtZF9waHlzID0gcDsKIAl9CiAKQEAgLTMzNjAsMTEgKzMyOTEsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoCi0JCQlwcml2LT5wY2lfZGV2LAotCQkJc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIpLAotCQkJcHJpdi0+bXNnX2J1ZmZlcnNbal0uaW5mby5jX3N0cnVjdC5jbWQsCi0JCQlwcml2LT5tc2dfYnVmZmVyc1tqXS5pbmZvLmNfc3RydWN0LmNtZF9waHlzKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciksCisJCQkJICAgIHByaXYtPm1zZ19idWZmZXJzW2pdLmluZm8uY19zdHJ1Y3QuY21kLAorCQkJCSAgICBwcml2LT5tc2dfYnVmZmVyc1tqXS5pbmZvLmNfc3RydWN0LgorCQkJCSAgICBjbWRfcGh5cyk7CiAJfQogCiAJa2ZyZWUocHJpdi0+bXNnX2J1ZmZlcnMpOwpAQCAtMzM5OCw3ICszMzI5LDggQEAKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciksCiAJCQkJICAgIHByaXYtPm1zZ19idWZmZXJzW2ldLmluZm8uY19zdHJ1Y3QuY21kLAotCQkJCSAgICBwcml2LT5tc2dfYnVmZmVyc1tpXS5pbmZvLmNfc3RydWN0LmNtZF9waHlzKTsKKwkJCQkgICAgcHJpdi0+bXNnX2J1ZmZlcnNbaV0uaW5mby5jX3N0cnVjdC4KKwkJCQkgICAgY21kX3BoeXMpOwogCX0KIAogCWtmcmVlKHByaXYtPm1zZ19idWZmZXJzKTsKQEAgLTM0MjQsNiArMzM1Niw3IEBACiAKIAlyZXR1cm4gb3V0IC0gYnVmOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIocGNpLCBTX0lSVUdPLCBzaG93X3BjaSwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfY2ZnKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMzQzMiwyMDkgKzMzNjUsMjY5IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcCA9IGQtPmRyaXZlcl9kYXRhOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgKGludClwLT5jb25maWcpOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIoY2ZnLCBTX0lSVUdPLCBzaG93X2NmZywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJY2hhciAqYnVmKQorCQkJICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnAgPSBkLT5kcml2ZXJfZGF0YTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIChpbnQpcC0+c3RhdHVzKTsKIH0KKwogc3RhdGljIERFVklDRV9BVFRSKHN0YXR1cywgU19JUlVHTywgc2hvd19zdGF0dXMsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2NhcGFiaWxpdHkoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwID0gZC0+ZHJpdmVyX2RhdGE7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXAtPmNhcGFiaWxpdHkpOwogfQotc3RhdGljIERFVklDRV9BVFRSKGNhcGFiaWxpdHksIFNfSVJVR08sIHNob3dfY2FwYWJpbGl0eSwgTlVMTCk7CiAKK3N0YXRpYyBERVZJQ0VfQVRUUihjYXBhYmlsaXR5LCBTX0lSVUdPLCBzaG93X2NhcGFiaWxpdHksIE5VTEwpOwogCiAjZGVmaW5lIElQVzIxMDBfUkVHKHgpIHsgSVBXXyAjI3gsICN4IH0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXUzMiBhZGRyOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9IGh3X2RhdGFbXSA9IHsKLQlJUFcyMTAwX1JFRyhSRUdfR1BfQ05UUkwpLAotCUlQVzIxMDBfUkVHKFJFR19HUElPKSwKLQlJUFcyMTAwX1JFRyhSRUdfSU5UQSksCi0JSVBXMjEwMF9SRUcoUkVHX0lOVEFfTUFTSyksCi0JSVBXMjEwMF9SRUcoUkVHX1JFU0VUX1JFRyksCi19OworSVBXMjEwMF9SRUcoUkVHX0dQX0NOVFJMKSwKKwkgICAgSVBXMjEwMF9SRUcoUkVHX0dQSU8pLAorCSAgICBJUFcyMTAwX1JFRyhSRUdfSU5UQSksCisJICAgIElQVzIxMDBfUkVHKFJFR19JTlRBX01BU0spLCBJUFcyMTAwX1JFRyhSRUdfUkVTRVRfUkVHKSx9OwogI2RlZmluZSBJUFcyMTAwX05JQyh4LCBzKSB7IHgsICN4LCBzIH0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXUzMiBhZGRyOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc2l6ZV90IHNpemU7CiB9IG5pY19kYXRhW10gPSB7Ci0JSVBXMjEwMF9OSUMoSVBXMjEwMF9DT05UUk9MX1JFRywgMiksCi0JSVBXMjEwMF9OSUMoMHgyMTAwMTQsIDEpLAotCUlQVzIxMDBfTklDKDB4MjEwMDAwLCAxKSwKLX07CitJUFcyMTAwX05JQyhJUFcyMTAwX0NPTlRST0xfUkVHLCAyKSwKKwkgICAgSVBXMjEwMF9OSUMoMHgyMTAwMTQsIDEpLCBJUFcyMTAwX05JQygweDIxMDAwMCwgMSksfTsKICNkZWZpbmUgSVBXMjEwMF9PUkQoeCwgZCkgeyBJUFdfT1JEXyAjI3gsICN4LCBkIH0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXU4IGluZGV4OwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqZGVzYzsKIH0gb3JkX2RhdGFbXSA9IHsKLQlJUFcyMTAwX09SRChTVEFUX1RYX0hPU1RfUkVRVUVTVFMsICJyZXF1ZXN0ZWQgSG9zdCBUeCdzIChNU0RVKSIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfSE9TVF9DT01QTEVURSwgInN1Y2Nlc3NmdWwgSG9zdCBUeCdzIChNU0RVKSIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfRElSX0RBVEEsCSAgICJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTEsCSAgICJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTIsCSAgICJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMk1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTVfNSwgICAic3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKSBAIDVfNU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTExLAkgICAic3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKSBAIDExTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX05PRElSX0RBVEExLCAgICJzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTIsICAgInN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMk1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9OT0RJUl9EQVRBNV81LCAic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCA1LjVNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTExLCAgInN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMTFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfTlVMTF9EQVRBLAkgICAic3VjY2Vzc2Z1bCBOVUxMIGRhdGEgVHgncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUlRTLAkgICAic3VjY2Vzc2Z1bCBUeCBSVFMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0NUUywJICAgInN1Y2Nlc3NmdWwgVHggQ1RTIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9BQ0ssCSAgICJzdWNjZXNzZnVsIFR4IEFDSyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfQVNTTiwJICAgInN1Y2Nlc3NmdWwgQXNzb2NpYXRpb24gVHgncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfQVNTTl9SRVNQLAkgICAic3VjY2Vzc2Z1bCBBc3NvY2lhdGlvbiByZXNwb25zZSBUeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9SRUFTU04sCSAgICJzdWNjZXNzZnVsIFJlYXNzb2NpYXRpb24gVHgncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUkVBU1NOX1JFU1AsICAgInN1Y2Nlc3NmdWwgUmVhc3NvY2lhdGlvbiByZXNwb25zZSBUeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9QUk9CRSwJICAgInByb2JlcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX1BST0JFX1JFU1AsCSAgICJwcm9iZSByZXNwb25zZXMgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9CRUFDT04sCSAgICJ0eCBiZWFjb24iKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0FUSU0sCSAgICJUeCBBVElNIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVNBU1NOLAkgICAic3VjY2Vzc2Z1bCBEaXNhc3NvY2lhdGlvbiBUWCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfQVVUSCwJICAgInN1Y2Nlc3NmdWwgQXV0aGVudGljYXRpb24gVHgiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0RFQVVUSCwJICAgInN1Y2Nlc3NmdWwgRGVhdXRoZW50aWNhdGlvbiBUWCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfVE9UQUxfQllURVMsICAgIlRvdGFsIHN1Y2Nlc3NmdWwgVHggZGF0YSBieXRlcyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUklFUywgICAgICAgIlR4IHJldHJpZXMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJZMSwgICAgICAgICJUeCByZXRyaWVzIGF0IDFNQlBTIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9SRVRSWTIsICAgICAgICAiVHggcmV0cmllcyBhdCAyTUJQUyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUlk1XzUsCSAgICJUeCByZXRyaWVzIGF0IDUuNU1CUFMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJZMTEsCSAgICJUeCByZXRyaWVzIGF0IDExTUJQUyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfRkFJTFVSRVMsCSAgICJUeCBGYWlsdXJlcyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfTUFYX1RSSUVTX0lOX0hPUCwidGltZXMgbWF4IHRyaWVzIGluIGEgaG9wIGZhaWxlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfRElTQVNTTl9GQUlMLAkidGltZXMgZGlzYXNzb2NpYXRpb24gZmFpbGVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9FUlJfQ1RTLCAgICAgICAgICJtaXNzZWQvYmFkIENUUyBmcmFtZXMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0VSUl9BQ0ssCSJ0eCBlcnIgZHVlIHRvIGFja3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0hPU1QsCSJwYWNrZXRzIHBhc3NlZCB0byBob3N0IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQSwJImRpcmVjdGVkIHBhY2tldHMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RJUl9EQVRBMSwJImRpcmVjdGVkIHBhY2tldHMgYXQgMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQTIsCSJkaXJlY3RlZCBwYWNrZXRzIGF0IDJNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRElSX0RBVEE1XzUsCSJkaXJlY3RlZCBwYWNrZXRzIGF0IDUuNU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQTExLAkiZGlyZWN0ZWQgcGFja2V0cyBhdCAxMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBLCJub25kaXJlY3RlZCBwYWNrZXRzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBMSwJIm5vbmRpcmVjdGVkIHBhY2tldHMgYXQgMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBMiwJIm5vbmRpcmVjdGVkIHBhY2tldHMgYXQgMk1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBNV81LAkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCA1LjVNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfTk9ESVJfREFUQTExLAkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAxMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OVUxMX0RBVEEsCSJudWxsIGRhdGEgcngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfUlRTLAkiUnggUlRTIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9DVFMsCSJSeCBDVFMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0FDSywJIlJ4IEFDSyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQ0ZFTkQsCSJSeCBDRiBFbmQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0NGRU5EX0FDSywJIlJ4IENGIEVuZCArIENGIEFjayIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQVNTTiwJIkFzc29jaWF0aW9uIFJ4J3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0FTU05fUkVTUCwJIkFzc29jaWF0aW9uIHJlc3BvbnNlIFJ4J3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX1JFQVNTTiwJIlJlYXNzb2NpYXRpb24gUngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfUkVBU1NOX1JFU1AsCSJSZWFzc29jaWF0aW9uIHJlc3BvbnNlIFJ4J3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX1BST0JFLAkicHJvYmUgUngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfUFJPQkVfUkVTUCwJInByb2JlIHJlc3BvbnNlIFJ4J3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0JFQUNPTiwJIlJ4IGJlYWNvbiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQVRJTSwJIlJ4IEFUSU0iKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RJU0FTU04sCSJkaXNhc3NvY2lhdGlvbiBSeCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQVVUSCwJImF1dGhlbnRpY2F0aW9uIFJ4IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9ERUFVVEgsCSJkZWF1dGhlbnRpY2F0aW9uIFJ4IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9UT1RBTF9CWVRFUywiVG90YWwgcnggZGF0YSBieXRlcyByZWNlaXZlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQywJICJwYWNrZXRzIHdpdGggUnggQ1JDIGVycm9yIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9FUlJfQ1JDMSwJICJSeCBDUkMgZXJyb3JzIGF0IDFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQzIsCSAiUnggQ1JDIGVycm9ycyBhdCAyTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0VSUl9DUkM1XzUsCSAiUnggQ1JDIGVycm9ycyBhdCA1LjVNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQzExLAkgIlJ4IENSQyBlcnJvcnMgYXQgMTFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFMSwgImR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFMiwJICJkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAyTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RVUExJQ0FURTVfNSwJICJkdXBsaWNhdGUgcnggcGFja2V0cyBhdCA1LjVNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFMTEsCSAiZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMTFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFLCAiZHVwbGljYXRlIHJ4IHBhY2tldHMiKSwKLQlJUFcyMTAwX09SRChQRVJTX0RCX0xPQ0ssCSJsb2NraW5nIGZ3IHBlcm1hbmVudCAgZGIiKSwKLQlJUFcyMTAwX09SRChQRVJTX0RCX1NJWkUsCSJzaXplIG9mIGZ3IHBlcm1hbmVudCAgZGIiKSwKLQlJUFcyMTAwX09SRChQRVJTX0RCX0FERFIsCSJhZGRyZXNzIG9mIGZ3IHBlcm1hbmVudCAgZGIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0lOVkFMSURfUFJPVE9DT0wsCSJyeCBmcmFtZXMgd2l0aCBpbnZhbGlkIHByb3RvY29sIiksCi0JSVBXMjEwMF9PUkQoU1lTX0JPT1RfVElNRSwJIkJvb3QgdGltZSIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfTk9fQlVGRkVSLAkicnggZnJhbWVzIHJlamVjdGVkIGR1ZSB0byBubyBidWZmZXIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX01JU1NJTkdfRlJBRywJInJ4IGZyYW1lcyBkcm9wcGVkIGR1ZSB0byBtaXNzaW5nIGZyYWdtZW50IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9PUlBIQU5fRlJBRywJInJ4IGZyYW1lcyBkcm9wcGVkIGR1ZSB0byBub24tc2VxdWVudGlhbCBmcmFnbWVudCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfT1JQSEFOX0ZSQU1FLAkicnggZnJhbWVzIGRyb3BwZWQgZHVlIHRvIHVubWF0Y2hlZCAxc3QgZnJhbWUiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0ZSQUdfQUdFT1VULAkicnggZnJhbWVzIGRyb3BwZWQgZHVlIHRvIHVuY29tcGxldGVkIGZyYW1lIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9JQ1ZfRVJST1JTLAkiSUNWIGVycm9ycyBkdXJpbmcgZGVjcnlwdGlvbiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUFNQX1NVU1BFTlNJT04sInRpbWVzIGFkYXB0ZXIgc3VzcGVuZGVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9QU1BfQkNOX1RJTUVPVVQsCSJiZWFjb24gdGltZW91dCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUFNQX1BPTExfVElNRU9VVCwJInBvbGwgcmVzcG9uc2UgdGltZW91dHMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1BTUF9OT05ESVJfVElNRU9VVCwgInRpbWVvdXRzIHdhaXRpbmcgZm9yIGxhc3Qge2Jyb2FkLG11bHRpfWNhc3QgcGt0IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9QU1BfUlhfRFRJTVMsCSJQU1AgRFRJTXMgcmVjZWl2ZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1BTUF9SWF9USU1TLAkiUFNQIFRJTXMgcmVjZWl2ZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1BTUF9TVEFUSU9OX0lELCJQU1AgU3RhdGlvbiBJRCIpLAotCUlQVzIxMDBfT1JEKExBU1RfQVNTTl9USU1FLAkiUlRDIHRpbWUgb2YgbGFzdCBhc3NvY2lhdGlvbiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUEVSQ0VOVF9NSVNTRURfQkNOUywiY3VycmVudCBjYWxjdWxhdGlvbiBvZiAlIG1pc3NlZCBiZWFjb25zIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9QRVJDRU5UX1JFVFJJRVMsImN1cnJlbnQgY2FsY3VsYXRpb24gb2YgJSBtaXNzZWQgdHggcmV0cmllcyIpLAotCUlQVzIxMDBfT1JEKEFTU09DSUFURURfQVBfUFRSLAkiMCBpZiBub3QgYXNzb2NpYXRlZCwgZWxzZSBwb2ludGVyIHRvIEFQIHRhYmxlIGVudHJ5IiksCi0JSVBXMjEwMF9PUkQoQVZBSUxBQkxFX0FQX0NOVCwJIkFQJ3MgZGVjc3JpYmVkIGluIHRoZSBBUCB0YWJsZSIpLAotCUlQVzIxMDBfT1JEKEFQX0xJU1RfUFRSLAkiUHRyIHRvIGxpc3Qgb2YgYXZhaWxhYmxlIEFQcyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVBfQVNTTlMsCSJhc3NvY2lhdGlvbnMiKSwKLQlJUFcyMTAwX09SRChTVEFUX0FTU05fRkFJTCwJImFzc29jaWF0aW9uIGZhaWx1cmVzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9BU1NOX1JFU1BfRkFJTCwiZmFpbHVyZXMgZHVlIHRvIHJlc3BvbnNlIGZhaWwiKSwKLQlJUFcyMTAwX09SRChTVEFUX0ZVTExfU0NBTlMsCSJmdWxsIHNjYW5zIiksCi0JSVBXMjEwMF9PUkQoQ0FSRF9ESVNBQkxFRCwJIkNhcmQgRGlzYWJsZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JPQU1fSU5ISUJJVCwJInRpbWVzIHJvYW1pbmcgd2FzIGluaGliaXRlZCBkdWUgdG8gYWN0aXZpdHkiKSwKLQlJUFcyMTAwX09SRChSU1NJX0FUX0FTU04sCSJSU1NJIG9mIGFzc29jaWF0ZWQgQVAgYXQgdGltZSBvZiBhc3NvY2lhdGlvbiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVNTTl9DQVVTRTEsCSJyZWFzc29jaWF0aW9uOiBubyBwcm9iZSByZXNwb25zZSBvciBUWCBvbiBob3AiKSwKLQlJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0UyLAkicmVhc3NvY2lhdGlvbjogcG9vciB0eC9yeCBxdWFsaXR5IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFMywJInJlYXNzb2NpYXRpb246IHR4L3J4IHF1YWxpdHkgKGV4Y2Vzc2l2ZSBBUCBsb2FkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFNCwJInJlYXNzb2NpYXRpb246IEFQIFJTU0kgbGV2ZWwiKSwKLQlJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0U1LAkicmVhc3NvY2lhdGlvbnMgZHVlIHRvIGxvYWQgbGV2ZWxpbmciKSwKLQlJUFcyMTAwX09SRChTVEFUX0FVVEhfRkFJTCwJInRpbWVzIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVVUSF9SRVNQX0ZBSUwsInRpbWVzIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIGZhaWxlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRJT05fVEFCTEVfQ05ULAkiZW50cmllcyBpbiBhc3NvY2lhdGlvbiB0YWJsZSIpLAotCUlQVzIxMDBfT1JEKFJTU0lfQVZHX0NVUlIsCSJDdXJyZW50IGF2ZyBSU1NJIiksCi0JSVBXMjEwMF9PUkQoUE9XRVJfTUdNVF9NT0RFLAkiUG93ZXIgbW9kZSAtIDA9Q0FNLCAxPVBTUCIpLAotCUlQVzIxMDBfT1JEKENPVU5UUllfQ09ERSwJIklFRUUgY291bnRyeSBjb2RlIGFzIHJlY3YnZCBmcm9tIGJlYWNvbiIpLAotCUlQVzIxMDBfT1JEKENPVU5UUllfQ0hBTk5FTFMsCSJjaGFubmVscyBzdXBvcnRlZCBieSBjb3VudHJ5IiksCi0JSVBXMjEwMF9PUkQoUkVTRVRfQ05ULAkiYWRhcHRlciByZXNldHMgKHdhcm0pIiksCi0JSVBXMjEwMF9PUkQoQkVBQ09OX0lOVEVSVkFMLAkiQmVhY29uIGludGVydmFsIiksCi0JSVBXMjEwMF9PUkQoQU5URU5OQV9ESVZFUlNJVFksCSJUUlVFIGlmIGFudGVubmEgZGl2ZXJzaXR5IGlzIGRpc2FibGVkIiksCi0JSVBXMjEwMF9PUkQoRFRJTV9QRVJJT0QsCSJiZWFjb24gaW50ZXJ2YWxzIGJldHdlZW4gRFRJTXMiKSwKLQlJUFcyMTAwX09SRChPVVJfRlJFUSwJImN1cnJlbnQgcmFkaW8gZnJlcSBsb3dlciBkaWdpdHMgLSBjaGFubmVsIElEIiksCi0JSVBXMjEwMF9PUkQoUlRDX1RJTUUsCSJjdXJyZW50IFJUQyB0aW1lIiksCi0JSVBXMjEwMF9PUkQoUE9SVF9UWVBFLAkib3BlcmF0aW5nIG1vZGUiKSwKLQlJUFcyMTAwX09SRChDVVJSRU5UX1RYX1JBVEUsCSJjdXJyZW50IHR4IHJhdGUiKSwKLQlJUFcyMTAwX09SRChTVVBQT1JURURfUkFURVMsCSJzdXBwb3J0ZWQgdHggcmF0ZXMiKSwKLQlJUFcyMTAwX09SRChBVElNX1dJTkRPVywJImN1cnJlbnQgQVRJTSBXaW5kb3ciKSwKLQlJUFcyMTAwX09SRChCQVNJQ19SQVRFUywJImJhc2ljIHR4IHJhdGVzIiksCi0JSVBXMjEwMF9PUkQoTklDX0hJR0hFU1RfUkFURSwJIk5JQyBoaWdoZXN0IHR4IHJhdGUiKSwKLQlJUFcyMTAwX09SRChBUF9ISUdIRVNUX1JBVEUsCSJBUCBoaWdoZXN0IHR4IHJhdGUiKSwKLQlJUFcyMTAwX09SRChDQVBBQklMSVRJRVMsCSJNYW5hZ2VtZW50IGZyYW1lIGNhcGFiaWxpdHkgZmllbGQiKSwKLQlJUFcyMTAwX09SRChBVVRIX1RZUEUsCSJUeXBlIG9mIGF1dGhlbnRpY2F0aW9uIiksCi0JSVBXMjEwMF9PUkQoUkFESU9fVFlQRSwJIkFkYXB0ZXIgY2FyZCBwbGF0Zm9ybSB0eXBlIiksCi0JSVBXMjEwMF9PUkQoUlRTX1RIUkVTSE9MRCwJIk1pbiBwYWNrZXQgbGVuZ3RoIGZvciBSVFMgaGFuZHNoYWtpbmciKSwKLQlJUFcyMTAwX09SRChJTlRfTU9ERSwJIkludGVybmF0aW9uYWwgbW9kZSIpLAotCUlQVzIxMDBfT1JEKEZSQUdNRU5UQVRJT05fVEhSRVNIT0xELAkicHJvdG9jb2wgZnJhZyB0aHJlc2hvbGQiKSwKLQlJUFcyMTAwX09SRChFRVBST01fU1JBTV9EQl9CTE9DS19TVEFSVF9BRERSRVNTLAkiRUVQUk9NIG9mZnNldCBpbiBTUkFNIiksCi0JSVBXMjEwMF9PUkQoRUVQUk9NX1NSQU1fREJfQkxPQ0tfU0laRSwJIkVFUFJPTSBzaXplIGluIFNSQU0iKSwKLQlJUFcyMTAwX09SRChFRVBST01fU0tVX0NBUEFCSUxJVFksCSJFRVBST00gU0tVIENhcGFiaWxpdHkiKSwKLQlJUFcyMTAwX09SRChFRVBST01fSUJTU18xMUJfQ0hBTk5FTFMsCSJFRVBST00gSUJTUyAxMWIgY2hhbm5lbCBzZXQiKSwKLQlJUFcyMTAwX09SRChNQUNfVkVSU0lPTiwJIk1BQyBWZXJzaW9uIiksCi0JSVBXMjEwMF9PUkQoTUFDX1JFVklTSU9OLAkiTUFDIFJldmlzaW9uIiksCi0JSVBXMjEwMF9PUkQoUkFESU9fVkVSU0lPTiwJIlJhZGlvIFZlcnNpb24iKSwKLQlJUFcyMTAwX09SRChOSUNfTUFORl9EQVRFX1RJTUUsCSJNQU5GIERhdGUvVGltZSBTVEFNUCIpLAotCUlQVzIxMDBfT1JEKFVDT0RFX1ZFUlNJT04sCSJVY29kZSBWZXJzaW9uIiksCi19OwotCitJUFcyMTAwX09SRChTVEFUX1RYX0hPU1RfUkVRVUVTVFMsICJyZXF1ZXN0ZWQgSG9zdCBUeCdzIChNU0RVKSIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0hPU1RfQ09NUExFVEUsCisJCQkJInN1Y2Nlc3NmdWwgSG9zdCBUeCdzIChNU0RVKSIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0RJUl9EQVRBLAorCQkJCSJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElSX0RBVEExLAorCQkJCSJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElSX0RBVEEyLAorCQkJCSJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMk1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElSX0RBVEE1XzUsCisJCQkJInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCA1XzVNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0RJUl9EQVRBMTEsCisJCQkJInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTEsCisJCQkJInN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTIsCisJCQkJInN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMk1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTVfNSwKKwkJCQkic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCA1LjVNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX05PRElSX0RBVEExMSwKKwkJCQkic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfTlVMTF9EQVRBLCAic3VjY2Vzc2Z1bCBOVUxMIGRhdGEgVHgncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JUUywgInN1Y2Nlc3NmdWwgVHggUlRTIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfQ1RTLCAic3VjY2Vzc2Z1bCBUeCBDVFMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9BQ0ssICJzdWNjZXNzZnVsIFR4IEFDSyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0FTU04sICJzdWNjZXNzZnVsIEFzc29jaWF0aW9uIFR4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9BU1NOX1JFU1AsCisJCQkJInN1Y2Nlc3NmdWwgQXNzb2NpYXRpb24gcmVzcG9uc2UgVHgncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JFQVNTTiwKKwkJCQkic3VjY2Vzc2Z1bCBSZWFzc29jaWF0aW9uIFR4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9SRUFTU05fUkVTUCwKKwkJCQkic3VjY2Vzc2Z1bCBSZWFzc29jaWF0aW9uIHJlc3BvbnNlIFR4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9QUk9CRSwKKwkJCQkicHJvYmVzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1BST0JFX1JFU1AsCisJCQkJInByb2JlIHJlc3BvbnNlcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9CRUFDT04sICJ0eCBiZWFjb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9BVElNLCAiVHggQVRJTSIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0RJU0FTU04sCisJCQkJInN1Y2Nlc3NmdWwgRGlzYXNzb2NpYXRpb24gVFgiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9BVVRILCAic3VjY2Vzc2Z1bCBBdXRoZW50aWNhdGlvbiBUeCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0RFQVVUSCwKKwkJCQkic3VjY2Vzc2Z1bCBEZWF1dGhlbnRpY2F0aW9uIFRYIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfVE9UQUxfQllURVMsCisJCQkJIlRvdGFsIHN1Y2Nlc3NmdWwgVHggZGF0YSBieXRlcyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJJRVMsICJUeCByZXRyaWVzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUlkxLCAiVHggcmV0cmllcyBhdCAxTUJQUyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJZMiwgIlR4IHJldHJpZXMgYXQgMk1CUFMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9SRVRSWTVfNSwgIlR4IHJldHJpZXMgYXQgNS41TUJQUyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJZMTEsICJUeCByZXRyaWVzIGF0IDExTUJQUyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0ZBSUxVUkVTLCAiVHggRmFpbHVyZXMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9NQVhfVFJJRVNfSU5fSE9QLAorCQkJCSJ0aW1lcyBtYXggdHJpZXMgaW4gYSBob3AgZmFpbGVkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElTQVNTTl9GQUlMLAorCQkJCSJ0aW1lcyBkaXNhc3NvY2lhdGlvbiBmYWlsZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9FUlJfQ1RTLCAibWlzc2VkL2JhZCBDVFMgZnJhbWVzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRVJSX0FDSywgInR4IGVyciBkdWUgdG8gYWNrcyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0hPU1QsICJwYWNrZXRzIHBhc3NlZCB0byBob3N0IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRElSX0RBVEEsICJkaXJlY3RlZCBwYWNrZXRzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRElSX0RBVEExLCAiZGlyZWN0ZWQgcGFja2V0cyBhdCAxTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQTIsICJkaXJlY3RlZCBwYWNrZXRzIGF0IDJNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RJUl9EQVRBNV81LAorCQkJCSJkaXJlY3RlZCBwYWNrZXRzIGF0IDUuNU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRElSX0RBVEExMSwgImRpcmVjdGVkIHBhY2tldHMgYXQgMTFNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX05PRElSX0RBVEEsICJub25kaXJlY3RlZCBwYWNrZXRzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTk9ESVJfREFUQTEsCisJCQkJIm5vbmRpcmVjdGVkIHBhY2tldHMgYXQgMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTk9ESVJfREFUQTIsCisJCQkJIm5vbmRpcmVjdGVkIHBhY2tldHMgYXQgMk1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTk9ESVJfREFUQTVfNSwKKwkJCQkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCA1LjVNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX05PRElSX0RBVEExMSwKKwkJCQkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAxMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTlVMTF9EQVRBLCAibnVsbCBkYXRhIHJ4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9SVFMsICJSeCBSVFMiKSwgSVBXMjEwMF9PUkQoU1RBVF9SWF9DVFMsCisJCQkJCQkJCSAgICAiUnggQ1RTIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfQUNLLCAiUnggQUNLIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfQ0ZFTkQsICJSeCBDRiBFbmQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9DRkVORF9BQ0ssICJSeCBDRiBFbmQgKyBDRiBBY2siKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9BU1NOLCAiQXNzb2NpYXRpb24gUngncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0FTU05fUkVTUCwgIkFzc29jaWF0aW9uIHJlc3BvbnNlIFJ4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9SRUFTU04sICJSZWFzc29jaWF0aW9uIFJ4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9SRUFTU05fUkVTUCwKKwkJCQkiUmVhc3NvY2lhdGlvbiByZXNwb25zZSBSeCdzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfUFJPQkUsICJwcm9iZSBSeCdzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfUFJPQkVfUkVTUCwgInByb2JlIHJlc3BvbnNlIFJ4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9CRUFDT04sICJSeCBiZWFjb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9BVElNLCAiUnggQVRJTSIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RJU0FTU04sICJkaXNhc3NvY2lhdGlvbiBSeCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0FVVEgsICJhdXRoZW50aWNhdGlvbiBSeCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RFQVVUSCwgImRlYXV0aGVudGljYXRpb24gUngiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9UT1RBTF9CWVRFUywKKwkJCQkiVG90YWwgcnggZGF0YSBieXRlcyByZWNlaXZlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0VSUl9DUkMsICJwYWNrZXRzIHdpdGggUnggQ1JDIGVycm9yIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQzEsICJSeCBDUkMgZXJyb3JzIGF0IDFNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0VSUl9DUkMyLCAiUnggQ1JDIGVycm9ycyBhdCAyTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9FUlJfQ1JDNV81LCAiUnggQ1JDIGVycm9ycyBhdCA1LjVNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0VSUl9DUkMxMSwgIlJ4IENSQyBlcnJvcnMgYXQgMTFNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RVUExJQ0FURTEsCisJCQkJImR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDFNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RVUExJQ0FURTIsCisJCQkJImR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDJNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RVUExJQ0FURTVfNSwKKwkJCQkiZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgNS41TUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9EVVBMSUNBVEUxMSwKKwkJCQkiZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMTFNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RVUExJQ0FURSwgImR1cGxpY2F0ZSByeCBwYWNrZXRzIiksCisJICAgIElQVzIxMDBfT1JEKFBFUlNfREJfTE9DSywgImxvY2tpbmcgZncgcGVybWFuZW50ICBkYiIpLAorCSAgICBJUFcyMTAwX09SRChQRVJTX0RCX1NJWkUsICJzaXplIG9mIGZ3IHBlcm1hbmVudCAgZGIiKSwKKwkgICAgSVBXMjEwMF9PUkQoUEVSU19EQl9BRERSLCAiYWRkcmVzcyBvZiBmdyBwZXJtYW5lbnQgIGRiIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfSU5WQUxJRF9QUk9UT0NPTCwKKwkJCQkicnggZnJhbWVzIHdpdGggaW52YWxpZCBwcm90b2NvbCIpLAorCSAgICBJUFcyMTAwX09SRChTWVNfQk9PVF9USU1FLCAiQm9vdCB0aW1lIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTk9fQlVGRkVSLAorCQkJCSJyeCBmcmFtZXMgcmVqZWN0ZWQgZHVlIHRvIG5vIGJ1ZmZlciIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX01JU1NJTkdfRlJBRywKKwkJCQkicnggZnJhbWVzIGRyb3BwZWQgZHVlIHRvIG1pc3NpbmcgZnJhZ21lbnQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9PUlBIQU5fRlJBRywKKwkJCQkicnggZnJhbWVzIGRyb3BwZWQgZHVlIHRvIG5vbi1zZXF1ZW50aWFsIGZyYWdtZW50IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfT1JQSEFOX0ZSQU1FLAorCQkJCSJyeCBmcmFtZXMgZHJvcHBlZCBkdWUgdG8gdW5tYXRjaGVkIDFzdCBmcmFtZSIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0ZSQUdfQUdFT1VULAorCQkJCSJyeCBmcmFtZXMgZHJvcHBlZCBkdWUgdG8gdW5jb21wbGV0ZWQgZnJhbWUiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9JQ1ZfRVJST1JTLAorCQkJCSJJQ1YgZXJyb3JzIGR1cmluZyBkZWNyeXB0aW9uIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUFNQX1NVU1BFTlNJT04sICJ0aW1lcyBhZGFwdGVyIHN1c3BlbmRlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1BTUF9CQ05fVElNRU9VVCwgImJlYWNvbiB0aW1lb3V0IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUFNQX1BPTExfVElNRU9VVCwKKwkJCQkicG9sbCByZXNwb25zZSB0aW1lb3V0cyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1BTUF9OT05ESVJfVElNRU9VVCwKKwkJCQkidGltZW91dHMgd2FpdGluZyBmb3IgbGFzdCB7YnJvYWQsbXVsdGl9Y2FzdCBwa3QiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QU1BfUlhfRFRJTVMsICJQU1AgRFRJTXMgcmVjZWl2ZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QU1BfUlhfVElNUywgIlBTUCBUSU1zIHJlY2VpdmVkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUFNQX1NUQVRJT05fSUQsICJQU1AgU3RhdGlvbiBJRCIpLAorCSAgICBJUFcyMTAwX09SRChMQVNUX0FTU05fVElNRSwgIlJUQyB0aW1lIG9mIGxhc3QgYXNzb2NpYXRpb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QRVJDRU5UX01JU1NFRF9CQ05TLAorCQkJCSJjdXJyZW50IGNhbGN1bGF0aW9uIG9mICUgbWlzc2VkIGJlYWNvbnMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QRVJDRU5UX1JFVFJJRVMsCisJCQkJImN1cnJlbnQgY2FsY3VsYXRpb24gb2YgJSBtaXNzZWQgdHggcmV0cmllcyIpLAorCSAgICBJUFcyMTAwX09SRChBU1NPQ0lBVEVEX0FQX1BUUiwKKwkJCQkiMCBpZiBub3QgYXNzb2NpYXRlZCwgZWxzZSBwb2ludGVyIHRvIEFQIHRhYmxlIGVudHJ5IiksCisJICAgIElQVzIxMDBfT1JEKEFWQUlMQUJMRV9BUF9DTlQsCisJCQkJIkFQJ3MgZGVjc3JpYmVkIGluIHRoZSBBUCB0YWJsZSIpLAorCSAgICBJUFcyMTAwX09SRChBUF9MSVNUX1BUUiwgIlB0ciB0byBsaXN0IG9mIGF2YWlsYWJsZSBBUHMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BUF9BU1NOUywgImFzc29jaWF0aW9ucyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FTU05fRkFJTCwgImFzc29jaWF0aW9uIGZhaWx1cmVzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfQVNTTl9SRVNQX0ZBSUwsCisJCQkJImZhaWx1cmVzIGR1ZSB0byByZXNwb25zZSBmYWlsIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfRlVMTF9TQ0FOUywgImZ1bGwgc2NhbnMiKSwKKwkgICAgSVBXMjEwMF9PUkQoQ0FSRF9ESVNBQkxFRCwgIkNhcmQgRGlzYWJsZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9ST0FNX0lOSElCSVQsCisJCQkJInRpbWVzIHJvYW1pbmcgd2FzIGluaGliaXRlZCBkdWUgdG8gYWN0aXZpdHkiKSwKKwkgICAgSVBXMjEwMF9PUkQoUlNTSV9BVF9BU1NOLAorCQkJCSJSU1NJIG9mIGFzc29jaWF0ZWQgQVAgYXQgdGltZSBvZiBhc3NvY2lhdGlvbiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0UxLAorCQkJCSJyZWFzc29jaWF0aW9uOiBubyBwcm9iZSByZXNwb25zZSBvciBUWCBvbiBob3AiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFMiwKKwkJCQkicmVhc3NvY2lhdGlvbjogcG9vciB0eC9yeCBxdWFsaXR5IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfQVNTTl9DQVVTRTMsCisJCQkJInJlYXNzb2NpYXRpb246IHR4L3J4IHF1YWxpdHkgKGV4Y2Vzc2l2ZSBBUCBsb2FkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfQVNTTl9DQVVTRTQsCisJCQkJInJlYXNzb2NpYXRpb246IEFQIFJTU0kgbGV2ZWwiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFNSwKKwkJCQkicmVhc3NvY2lhdGlvbnMgZHVlIHRvIGxvYWQgbGV2ZWxpbmciKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BVVRIX0ZBSUwsICJ0aW1lcyBhdXRoZW50aWNhdGlvbiBmYWlsZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BVVRIX1JFU1BfRkFJTCwKKwkJCQkidGltZXMgYXV0aGVudGljYXRpb24gcmVzcG9uc2UgZmFpbGVkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRJT05fVEFCTEVfQ05ULAorCQkJCSJlbnRyaWVzIGluIGFzc29jaWF0aW9uIHRhYmxlIiksCisJICAgIElQVzIxMDBfT1JEKFJTU0lfQVZHX0NVUlIsICJDdXJyZW50IGF2ZyBSU1NJIiksCisJICAgIElQVzIxMDBfT1JEKFBPV0VSX01HTVRfTU9ERSwgIlBvd2VyIG1vZGUgLSAwPUNBTSwgMT1QU1AiKSwKKwkgICAgSVBXMjEwMF9PUkQoQ09VTlRSWV9DT0RFLAorCQkJCSJJRUVFIGNvdW50cnkgY29kZSBhcyByZWN2J2QgZnJvbSBiZWFjb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoQ09VTlRSWV9DSEFOTkVMUywKKwkJCQkiY2hhbm5lbHMgc3Vwb3J0ZWQgYnkgY291bnRyeSIpLAorCSAgICBJUFcyMTAwX09SRChSRVNFVF9DTlQsICJhZGFwdGVyIHJlc2V0cyAod2FybSkiKSwKKwkgICAgSVBXMjEwMF9PUkQoQkVBQ09OX0lOVEVSVkFMLCAiQmVhY29uIGludGVydmFsIiksCisJICAgIElQVzIxMDBfT1JEKEFOVEVOTkFfRElWRVJTSVRZLAorCQkJCSJUUlVFIGlmIGFudGVubmEgZGl2ZXJzaXR5IGlzIGRpc2FibGVkIiksCisJICAgIElQVzIxMDBfT1JEKERUSU1fUEVSSU9ELCAiYmVhY29uIGludGVydmFscyBiZXR3ZWVuIERUSU1zIiksCisJICAgIElQVzIxMDBfT1JEKE9VUl9GUkVRLAorCQkJCSJjdXJyZW50IHJhZGlvIGZyZXEgbG93ZXIgZGlnaXRzIC0gY2hhbm5lbCBJRCIpLAorCSAgICBJUFcyMTAwX09SRChSVENfVElNRSwgImN1cnJlbnQgUlRDIHRpbWUiKSwKKwkgICAgSVBXMjEwMF9PUkQoUE9SVF9UWVBFLCAib3BlcmF0aW5nIG1vZGUiKSwKKwkgICAgSVBXMjEwMF9PUkQoQ1VSUkVOVF9UWF9SQVRFLCAiY3VycmVudCB0eCByYXRlIiksCisJICAgIElQVzIxMDBfT1JEKFNVUFBPUlRFRF9SQVRFUywgInN1cHBvcnRlZCB0eCByYXRlcyIpLAorCSAgICBJUFcyMTAwX09SRChBVElNX1dJTkRPVywgImN1cnJlbnQgQVRJTSBXaW5kb3ciKSwKKwkgICAgSVBXMjEwMF9PUkQoQkFTSUNfUkFURVMsICJiYXNpYyB0eCByYXRlcyIpLAorCSAgICBJUFcyMTAwX09SRChOSUNfSElHSEVTVF9SQVRFLCAiTklDIGhpZ2hlc3QgdHggcmF0ZSIpLAorCSAgICBJUFcyMTAwX09SRChBUF9ISUdIRVNUX1JBVEUsICJBUCBoaWdoZXN0IHR4IHJhdGUiKSwKKwkgICAgSVBXMjEwMF9PUkQoQ0FQQUJJTElUSUVTLAorCQkJCSJNYW5hZ2VtZW50IGZyYW1lIGNhcGFiaWxpdHkgZmllbGQiKSwKKwkgICAgSVBXMjEwMF9PUkQoQVVUSF9UWVBFLCAiVHlwZSBvZiBhdXRoZW50aWNhdGlvbiIpLAorCSAgICBJUFcyMTAwX09SRChSQURJT19UWVBFLCAiQWRhcHRlciBjYXJkIHBsYXRmb3JtIHR5cGUiKSwKKwkgICAgSVBXMjEwMF9PUkQoUlRTX1RIUkVTSE9MRCwKKwkJCQkiTWluIHBhY2tldCBsZW5ndGggZm9yIFJUUyBoYW5kc2hha2luZyIpLAorCSAgICBJUFcyMTAwX09SRChJTlRfTU9ERSwgIkludGVybmF0aW9uYWwgbW9kZSIpLAorCSAgICBJUFcyMTAwX09SRChGUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCwKKwkJCQkicHJvdG9jb2wgZnJhZyB0aHJlc2hvbGQiKSwKKwkgICAgSVBXMjEwMF9PUkQoRUVQUk9NX1NSQU1fREJfQkxPQ0tfU1RBUlRfQUREUkVTUywKKwkJCQkiRUVQUk9NIG9mZnNldCBpbiBTUkFNIiksCisJICAgIElQVzIxMDBfT1JEKEVFUFJPTV9TUkFNX0RCX0JMT0NLX1NJWkUsCisJCQkJIkVFUFJPTSBzaXplIGluIFNSQU0iKSwKKwkgICAgSVBXMjEwMF9PUkQoRUVQUk9NX1NLVV9DQVBBQklMSVRZLCAiRUVQUk9NIFNLVSBDYXBhYmlsaXR5IiksCisJICAgIElQVzIxMDBfT1JEKEVFUFJPTV9JQlNTXzExQl9DSEFOTkVMUywKKwkJCQkiRUVQUk9NIElCU1MgMTFiIGNoYW5uZWwgc2V0IiksCisJICAgIElQVzIxMDBfT1JEKE1BQ19WRVJTSU9OLCAiTUFDIFZlcnNpb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoTUFDX1JFVklTSU9OLCAiTUFDIFJldmlzaW9uIiksCisJICAgIElQVzIxMDBfT1JEKFJBRElPX1ZFUlNJT04sICJSYWRpbyBWZXJzaW9uIiksCisJICAgIElQVzIxMDBfT1JEKE5JQ19NQU5GX0RBVEVfVElNRSwgIk1BTkYgRGF0ZS9UaW1lIFNUQU1QIiksCisJICAgIElQVzIxMDBfT1JEKFVDT0RFX1ZFUlNJT04sICJVY29kZSBWZXJzaW9uIiksfTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19yZWdpc3RlcnMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgICAgY2hhciAqYnVmKQogewogCWludCBpOwogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7Ci0JY2hhciAqIG91dCA9IGJ1ZjsKKwljaGFyICpvdXQgPSBidWY7CiAJdTMyIHZhbCA9IDA7CiAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICIlMzBzIFtBZGRyZXNzIF0gOiBIZXhcbiIsICJSZWdpc3RlciIpOwpAQCAtMzY0NywxNSArMzY0MCwxNSBAQAogCiAJcmV0dXJuIG91dCAtIGJ1ZjsKIH0KKwogc3RhdGljIERFVklDRV9BVFRSKHJlZ2lzdGVycywgU19JUlVHTywgc2hvd19yZWdpc3RlcnMsIE5VTEwpOwogCi0KIHN0YXRpYyBzc2l6ZV90IHNob3dfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKLQljaGFyICogb3V0ID0gYnVmOworCWNoYXIgKm91dCA9IGJ1ZjsKIAlpbnQgaTsKIAogCW91dCArPSBzcHJpbnRmKG91dCwgIiUzMHMgW0FkZHJlc3MgXSA6IEhleFxuIiwgIk5JQyBlbnRyeSIpOwpAQCAtMzY4OCwxMSArMzY4MSwxMSBAQAogCX0KIAlyZXR1cm4gb3V0IC0gYnVmOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIoaGFyZHdhcmUsIFNfSVJVR08sIHNob3dfaGFyZHdhcmUsIE5VTEwpOwogCi0KIHN0YXRpYyBzc2l6ZV90IHNob3dfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwpAQCAtMzcwOCwxMCArMzcwMSwxMyBAQAogCS8qIHN5c2ZzIHByb3ZpZGVzIHVzIFBBR0VfU0laRSBidWZmZXIgKi8KIAl3aGlsZSAobGVuIDwgUEFHRV9TSVpFIC0gMTI4ICYmIGxvb3AgPCAweDMwMDAwKSB7CiAKLQkJaWYgKHByaXYtPnNuYXBzaG90WzBdKSBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQkJYnVmZmVyW2ldID0gKih1MzIgKilTTkFQU0hPVF9BRERSKGxvb3AgKyBpICogNCk7Ci0JCWVsc2UgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJCXJlYWRfbmljX2R3b3JkKGRldiwgbG9vcCArIGkgKiA0LCAmYnVmZmVyW2ldKTsKKwkJaWYgKHByaXYtPnNuYXBzaG90WzBdKQorCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlidWZmZXJbaV0gPQorCQkJCSAgICAqKHUzMiAqKSBTTkFQU0hPVF9BRERSKGxvb3AgKyBpICogNCk7CisJCWVsc2UKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJcmVhZF9uaWNfZHdvcmQoZGV2LCBsb29wICsgaSAqIDQsICZidWZmZXJbaV0pOwogCiAJCWlmIChwcml2LT5kdW1wX3JhdykKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwKQEAgLTM3MTksMjYgKzM3MTUsMjYgQEAKIAkJCQkgICAgICAgIiVjJWMlYyVjIgogCQkJCSAgICAgICAiJWMlYyVjJWMiCiAJCQkJICAgICAgICIlYyVjJWMlYyIsCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHgwXSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDFdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4Ml0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHgzXSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDRdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4NV0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHg2XSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDddLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4OF0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHg5XSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweGFdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4Yl0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHhjXSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweGRdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4ZV0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHhmXSk7CisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDBdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHgxXSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4Ml0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDNdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHg0XSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4NV0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDZdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHg3XSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4OF0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDldLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHhhXSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4Yl0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweGNdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHhkXSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4ZV0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweGZdKTsKIAkJZWxzZQogCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXNcbiIsCiAJCQkJICAgICAgIHNucHJpbnRfbGluZShsaW5lLCBzaXplb2YobGluZSksCi0JCQkJCQkgICAgKHU4KilidWZmZXIsIDE2LCBsb29wKSk7CisJCQkJCQkgICAgKHU4ICopIGJ1ZmZlciwgMTYsIGxvb3ApKTsKIAkJbG9vcCArPSAxNjsKIAl9CiAKQEAgLTM3NDYsNDQgKzM3NDIsNDQgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJY29uc3QgY2hhciAqcCA9IGJ1ZjsKIAorCSh2b2lkKSBkZXY7IC8qIGtpbGwgdW51c2VkLXZhciB3YXJuaW5nIGZvciBkZWJ1Zy1vbmx5IGNvZGUgKi8KKwogCWlmIChjb3VudCA8IDEpCiAJCXJldHVybiBjb3VudDsKIAogCWlmIChwWzBdID09ICcxJyB8fAogCSAgICAoY291bnQgPj0gMiAmJiB0b2xvd2VyKHBbMF0pID09ICdvJyAmJiB0b2xvd2VyKHBbMV0pID09ICduJykpIHsKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiBTZXR0aW5nIG1lbW9yeSBkdW1wIHRvIFJBVyBtb2RlLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJcHJpdi0+ZHVtcF9yYXcgPSAxOwogCiAJfSBlbHNlIGlmIChwWzBdID09ICcwJyB8fCAoY291bnQgPj0gMiAmJiB0b2xvd2VyKHBbMF0pID09ICdvJyAmJgotCQkJCSAgdG9sb3dlcihwWzFdKSA9PSAnZicpKSB7CisJCQkJICAgdG9sb3dlcihwWzFdKSA9PSAnZicpKSB7CiAJCUlQV19ERUJVR19JTkZPKCIlczogU2V0dGluZyBtZW1vcnkgZHVtcCB0byBIRVggbW9kZS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCXByaXYtPmR1bXBfcmF3ID0gMDsKIAogCX0gZWxzZSBpZiAodG9sb3dlcihwWzBdKSA9PSAncicpIHsKLQkJSVBXX0RFQlVHX0lORk8oIiVzOiBSZXNldHRpbmcgZmlybXdhcmUgc25hcHNob3QuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJSVBXX0RFQlVHX0lORk8oIiVzOiBSZXNldHRpbmcgZmlybXdhcmUgc25hcHNob3QuXG4iLCBkZXYtPm5hbWUpOwogCQlpcHcyMTAwX3NuYXBzaG90X2ZyZWUocHJpdik7CiAKIAl9IGVsc2UKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiBVc2FnZTogMHxvbiA9IEhFWCwgMXxvZmYgPSBSQVcsICIKLQkJICAgICAgICJyZXNldCA9IGNsZWFyIG1lbW9yeSBzbmFwc2hvdFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkgICAgICAgInJlc2V0ID0gY2xlYXIgbWVtb3J5IHNuYXBzaG90XG4iLCBkZXYtPm5hbWUpOwogCiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKG1lbW9yeSwgU19JV1VTUnxTX0lSVUdPLCBzaG93X21lbW9yeSwgc3RvcmVfbWVtb3J5KTsKIAorc3RhdGljIERFVklDRV9BVFRSKG1lbW9yeSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbWVtb3J5LCBzdG9yZV9tZW1vcnkpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X29yZGluYWxzKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKKwkJCSAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJdTMyIHZhbCA9IDA7CkBAIC0zNzkxLDYgKzM3ODcsOSBAQAogCXUzMiB2YWxfbGVuOwogCXN0YXRpYyBpbnQgbG9vcCA9IDA7CiAKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKKwkJcmV0dXJuIDA7CisKIAlpZiAobG9vcCA+PSBzaXplb2Yob3JkX2RhdGEpIC8gc2l6ZW9mKCpvcmRfZGF0YSkpCiAJCWxvb3AgPSAwOwogCkBAIC0zODE0LDE0ICszODEzLDE0IEBACiAKIAlyZXR1cm4gbGVuOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIob3JkaW5hbHMsIFNfSVJVR08sIHNob3dfb3JkaW5hbHMsIE5VTEwpOwogCi0KIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQljaGFyICogb3V0ID0gYnVmOworCWNoYXIgKm91dCA9IGJ1ZjsKIAogCW91dCArPSBzcHJpbnRmKG91dCwgImludGVycnVwdHM6ICVkIHt0eDogJWQsIHJ4OiAlZCwgb3RoZXI6ICVkfVxuIiwKIAkJICAgICAgIHByaXYtPmludGVycnVwdHMsIHByaXYtPnR4X2ludGVycnVwdHMsCkBAIC0zODM1LDggKzM4MzQsOCBAQAogCiAJcmV0dXJuIG91dCAtIGJ1ZjsKIH0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGF0cywgU19JUlVHTywgc2hvd19zdGF0cywgTlVMTCk7CiAKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0cywgU19JUlVHTywgc2hvd19zdGF0cywgTlVMTCk7CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9zd2l0Y2hfbW9kZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgbW9kZSkKIHsKQEAgLTM4NjQsMTkgKzM4NjMsMTggQEAKIAkJcHJpdi0+bGFzdF9tb2RlID0gcHJpdi0+aWVlZS0+aXdfbW9kZTsKIAkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CiAJCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiAJfQogCiAJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IG1vZGU7CiAKICNpZmRlZiBDT05GSUdfUE0KLSAgICAgICAgLyogSW5kaWNhdGUgaXB3MjEwMF9kb3dubG9hZF9maXJtd2FyZSBkb3dubG9hZCBmaXJtd2FyZQorCS8qIEluZGljYXRlIGlwdzIxMDBfZG93bmxvYWRfZmlybXdhcmUgZG93bmxvYWQgZmlybXdhcmUKIAkgKiBmcm9tIGRpc2sgaW5zdGVhZCBvZiBtZW1vcnkuICovCiAJaXB3MjEwMF9maXJtd2FyZS52ZXJzaW9uID0gMDsKICNlbmRpZgogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc2V0aW5nIG9uIG1vZGUgY2hhbmdlLlxuIiwKLQkJcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc2V0aW5nIG9uIG1vZGUgY2hhbmdlLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJcHJpdi0+cmVzZXRfYmFja29mZiA9IDA7CiAJc2NoZWR1bGVfcmVzZXQocHJpdik7CiAKQEAgLTM4ODQsMTIgKzM4ODIsMTIgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcm5hbHMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJaW50IGxlbiA9IDA7CiAKLSNkZWZpbmUgRFVNUF9WQVIoeCx5KSBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICMgeCAiOiAlIiAjIHkgIlxuIiwgcHJpdi0+IHgpCisjZGVmaW5lIERVTVBfVkFSKHgseSkgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAjIHggIjogJSIgeSAiXG4iLCBwcml2LT4geCkKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiY29ubmVjdGVkOiAlbHVcbiIsCkBAIC0zODk3LDU1ICszODk1LDYwIEBACiAJZWxzZQogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJub3QgY29ubmVjdGVkXG4iKTsKIAotCURVTVBfVkFSKGllZWUtPmNyeXB0W3ByaXYtPmllZWUtPnR4X2tleWlkeF0sIHApOwotCURVTVBfVkFSKHN0YXR1cywgMDhseCk7Ci0JRFVNUF9WQVIoY29uZmlnLCAwOGx4KTsKLQlEVU1QX1ZBUihjYXBhYmlsaXR5LCAwOGx4KTsKKwlEVU1QX1ZBUihpZWVlLT5jcnlwdFtwcml2LT5pZWVlLT50eF9rZXlpZHhdLCAicCIpOworCURVTVBfVkFSKHN0YXR1cywgIjA4bHgiKTsKKwlEVU1QX1ZBUihjb25maWcsICIwOGx4Iik7CisJRFVNUF9WQVIoY2FwYWJpbGl0eSwgIjA4bHgiKTsKIAotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgImxhc3RfcnRjOiAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXByaXYtPmxhc3RfcnRjKTsKKwlsZW4gKz0KKwkgICAgc3ByaW50ZihidWYgKyBsZW4sICJsYXN0X3J0YzogJWx1XG4iLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcHJpdi0+bGFzdF9ydGMpOwogCi0JRFVNUF9WQVIoZmF0YWxfZXJyb3IsIGQpOwotCURVTVBfVkFSKHN0b3BfaGFuZ19jaGVjaywgZCk7Ci0JRFVNUF9WQVIoc3RvcF9yZl9raWxsLCBkKTsKLQlEVU1QX1ZBUihtZXNzYWdlc19zZW50LCBkKTsKKwlEVU1QX1ZBUihmYXRhbF9lcnJvciwgImQiKTsKKwlEVU1QX1ZBUihzdG9wX2hhbmdfY2hlY2ssICJkIik7CisJRFVNUF9WQVIoc3RvcF9yZl9raWxsLCAiZCIpOworCURVTVBfVkFSKG1lc3NhZ2VzX3NlbnQsICJkIik7CiAKLQlEVU1QX1ZBUih0eF9wZW5kX3N0YXQudmFsdWUsIGQpOwotCURVTVBfVkFSKHR4X3BlbmRfc3RhdC5oaSwgZCk7CisJRFVNUF9WQVIodHhfcGVuZF9zdGF0LnZhbHVlLCAiZCIpOworCURVTVBfVkFSKHR4X3BlbmRfc3RhdC5oaSwgImQiKTsKIAotCURVTVBfVkFSKHR4X2ZyZWVfc3RhdC52YWx1ZSwgZCk7Ci0JRFVNUF9WQVIodHhfZnJlZV9zdGF0LmxvLCBkKTsKKwlEVU1QX1ZBUih0eF9mcmVlX3N0YXQudmFsdWUsICJkIik7CisJRFVNUF9WQVIodHhfZnJlZV9zdGF0LmxvLCAiZCIpOwogCi0JRFVNUF9WQVIobXNnX2ZyZWVfc3RhdC52YWx1ZSwgZCk7Ci0JRFVNUF9WQVIobXNnX2ZyZWVfc3RhdC5sbywgZCk7CisJRFVNUF9WQVIobXNnX2ZyZWVfc3RhdC52YWx1ZSwgImQiKTsKKwlEVU1QX1ZBUihtc2dfZnJlZV9zdGF0LmxvLCAiZCIpOwogCi0JRFVNUF9WQVIobXNnX3BlbmRfc3RhdC52YWx1ZSwgZCk7Ci0JRFVNUF9WQVIobXNnX3BlbmRfc3RhdC5oaSwgZCk7CisJRFVNUF9WQVIobXNnX3BlbmRfc3RhdC52YWx1ZSwgImQiKTsKKwlEVU1QX1ZBUihtc2dfcGVuZF9zdGF0LmhpLCAiZCIpOwogCi0JRFVNUF9WQVIoZndfcGVuZF9zdGF0LnZhbHVlLCBkKTsKLQlEVU1QX1ZBUihmd19wZW5kX3N0YXQuaGksIGQpOworCURVTVBfVkFSKGZ3X3BlbmRfc3RhdC52YWx1ZSwgImQiKTsKKwlEVU1QX1ZBUihmd19wZW5kX3N0YXQuaGksICJkIik7CiAKLQlEVU1QX1ZBUih0eHFfc3RhdC52YWx1ZSwgZCk7Ci0JRFVNUF9WQVIodHhxX3N0YXQubG8sIGQpOworCURVTVBfVkFSKHR4cV9zdGF0LnZhbHVlLCAiZCIpOworCURVTVBfVkFSKHR4cV9zdGF0LmxvLCAiZCIpOwogCi0JRFVNUF9WQVIoaWVlZS0+c2NhbnMsIGQpOwotCURVTVBfVkFSKHJlc2V0X2JhY2tvZmYsIGQpOworCURVTVBfVkFSKGllZWUtPnNjYW5zLCAiZCIpOworCURVTVBfVkFSKHJlc2V0X2JhY2tvZmYsICJkIik7CiAKIAlyZXR1cm4gbGVuOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJuYWxzLCBTX0lSVUdPLCBzaG93X2ludGVybmFscywgTlVMTCk7CiAKLQogc3RhdGljIHNzaXplX3Qgc2hvd19ic3NpbmZvKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKKwkJCSAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAljaGFyIGVzc2lkW0lXX0VTU0lEX01BWF9TSVpFICsgMV07CiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXUzMiBjaGFuID0gMDsKLQljaGFyICogb3V0ID0gYnVmOworCWNoYXIgKm91dCA9IGJ1ZjsKIAlpbnQgbGVuZ3RoOwogCWludCByZXQ7CiAKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKKwkJcmV0dXJuIDA7CisKIAltZW1zZXQoZXNzaWQsIDAsIHNpemVvZihlc3NpZCkpOwogCW1lbXNldChic3NpZCwgMCwgc2l6ZW9mKGJzc2lkKSk7CiAKQEAgLTM5NzYsOCArMzk3OSw4IEBACiAKIAlyZXR1cm4gb3V0IC0gYnVmOwogfQotc3RhdGljIERFVklDRV9BVFRSKGJzc2luZm8sIFNfSVJVR08sIHNob3dfYnNzaW5mbywgTlVMTCk7CiAKK3N0YXRpYyBERVZJQ0VfQVRUUihic3NpbmZvLCBTX0lSVUdPLCBzaG93X2Jzc2luZm8sIE5VTEwpOwogCiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwgY2hhciAqYnVmKQpAQCAtMzk4NSw4ICszOTg4LDggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOFhcbiIsIGlwdzIxMDBfZGVidWdfbGV2ZWwpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwgY29uc3QgY2hhciAqYnVmLAotCQkJCSBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCXUzMiB2YWw7CkBAIC0zOTk5LDI4ICs0MDAyLDI2IEBACiAJfSBlbHNlCiAJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxMCk7CiAJaWYgKHAgPT0gYnVmKQotCQlJUFdfREVCVUdfSU5GTyhEUlZfTkFNRQotCQkgICAgICAgIjogJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOworCQlJUFdfREVCVUdfSU5GTygiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQogCQlpcHcyMTAwX2RlYnVnX2xldmVsID0gdmFsOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CisKIHN0YXRpYyBEUklWRVJfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZGVidWdfbGV2ZWwsCiAJCSAgIHN0b3JlX2RlYnVnX2xldmVsKTsKLSNlbmRpZiAvKiBDT05GSUdfSVBXX0RFQlVHICovCi0KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX0RFQlVHICovCiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmF0YWxfZXJyb3Ioc3RydWN0IGRldmljZSAqZCwKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWNoYXIgKm91dCA9IGJ1ZjsKIAlpbnQgaTsKIAogCWlmIChwcml2LT5mYXRhbF9lcnJvcikKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiMHglMDhYXG4iLAotCQkJICAgICAgIHByaXYtPmZhdGFsX2Vycm9yKTsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiMHglMDhYXG4iLCBwcml2LT5mYXRhbF9lcnJvcik7CiAJZWxzZQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIwXG4iKTsKIApAQCAtNDAzOCwyNCArNDAzOSwyNiBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9mYXRhbF9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkLAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkJIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBERVZJQ0VfQVRUUihmYXRhbF9lcnJvciwgU19JV1VTUnxTX0lSVUdPLCBzaG93X2ZhdGFsX2Vycm9yLCBzdG9yZV9mYXRhbF9lcnJvcik7CiAKK3N0YXRpYyBERVZJQ0VfQVRUUihmYXRhbF9lcnJvciwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmF0YWxfZXJyb3IsCisJCSAgIHN0b3JlX2ZhdGFsX2Vycm9yKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19zY2FuX2FnZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5pZWVlLT5zY2FuX2FnZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NjYW5fYWdlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKQEAgLTQwNjUsNiArNDA2OCw4IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJY2hhciAqcCA9IGJ1ZmZlcjsKIAorCSh2b2lkKSBkZXY7IC8qIGtpbGwgdW51c2VkLXZhciB3YXJuaW5nIGZvciBkZWJ1Zy1vbmx5IGNvZGUgKi8KKwogCUlQV19ERUJVR19JTkZPKCJlbnRlclxuIik7CiAKIAlzdHJuY3B5KGJ1ZmZlciwgYnVmLCBsZW4pOwpAQCAtNDA3OCw4ICs0MDgzLDcgQEAKIAl9IGVsc2UKIAkJdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDEwKTsKIAlpZiAocCA9PSBidWZmZXIpIHsKLQkJSVBXX0RFQlVHX0lORk8oIiVzOiB1c2VyIHN1cHBsaWVkIGludmFsaWQgdmFsdWUuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJSVBXX0RFQlVHX0lORk8oIiVzOiB1c2VyIHN1cHBsaWVkIGludmFsaWQgdmFsdWUuXG4iLCBkZXYtPm5hbWUpOwogCX0gZWxzZSB7CiAJCXByaXYtPmllZWUtPnNjYW5fYWdlID0gdmFsOwogCQlJUFdfREVCVUdfSU5GTygic2V0IHNjYW5fYWdlID0gJXVcbiIsIHByaXYtPmllZWUtPnNjYW5fYWdlKTsKQEAgLTQwODgsMTEgKzQwOTIsMTEgQEAKIAlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CiAJcmV0dXJuIGxlbjsKIH0KKwogc3RhdGljIERFVklDRV9BVFRSKHNjYW5fYWdlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19zY2FuX2FnZSwgc3RvcmVfc2Nhbl9hZ2UpOwogCi0KIHN0YXRpYyBzc2l6ZV90IHNob3dfcmZfa2lsbChzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgICAgY2hhciAqYnVmKQogewogCS8qIDAgLSBSRiBraWxsIG5vdCBlbmFibGVkCiAJICAgMSAtIFNXIGJhc2VkIFJGIGtpbGwgYWN0aXZlIChzeXNmcykKQEAgLTQxMDAsNyArNDEwNCw3IEBACiAJICAgMyAtIEJvdGggSFcgYW5kIFNXIGJhZWQgUkYga2lsbCBhY3RpdmUgKi8KIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gKHN0cnVjdCBpcHcyMTAwX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAlpbnQgdmFsID0gKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVykgPyAweDEgOiAweDApIHwKLQkJKHJmX2tpbGxfYWN0aXZlKHByaXYpID8gMHgyIDogMHgwKTsKKwkgICAgKHJmX2tpbGxfYWN0aXZlKHByaXYpID8gMHgyIDogMHgwKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgdmFsKTsKIH0KIApAQCAtNDEwOCw3ICs0MTEyLDcgQEAKIHsKIAlpZiAoKGRpc2FibGVfcmFkaW8gPyAxIDogMCkgPT0KIAkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXID8gMSA6IDApKQotCQlyZXR1cm4gMCA7CisJCXJldHVybiAwOwogCiAJSVBXX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLaWxsIHNldCB0bzogUkFESU8gICVzXG4iLAogCQkJICBkaXNhYmxlX3JhZGlvID8gIk9GRiIgOiAiT04iKTsKQEAgLTQxMjYsOCArNDEzMCw3IEBACiAJCQkvKiBNYWtlIHN1cmUgdGhlIFJGX0tJTEwgY2hlY2sgdGltZXIgaXMgcnVubmluZyAqLwogCQkJcHJpdi0+c3RvcF9yZl9raWxsID0gMDsKIAkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJmX2tpbGwpOwotCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwsCi0JCQkJCSAgIEhaKTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZl9raWxsLCBIWik7CiAJCX0gZWxzZQogCQkJc2NoZWR1bGVfcmVzZXQocHJpdik7CiAJfQpAQCAtNDEzNywxNCArNDE0MCwxNCBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9yZl9raWxsKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWlwd19yYWRpb19raWxsX3N3KHByaXYsIGJ1ZlswXSA9PSAnMScpOwogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZl9raWxsLCBTX0lXVVNSfFNfSVJVR08sIHNob3dfcmZfa2lsbCwgc3RvcmVfcmZfa2lsbCk7CiAKK3N0YXRpYyBERVZJQ0VfQVRUUihyZl9raWxsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19yZl9raWxsLCBzdG9yZV9yZl9raWxsKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlwdzIxMDBfc3lzZnNfZW50cmllc1tdID0gewogCSZkZXZfYXR0cl9oYXJkd2FyZS5hdHRyLApAQCAtNDE2OCw3ICs0MTcxLDYgQEAKIAkuYXR0cnMgPSBpcHcyMTAwX3N5c2ZzX2VudHJpZXMsCiB9OwogCi0KIHN0YXRpYyBpbnQgc3RhdHVzX3F1ZXVlX2FsbG9jYXRlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBlbnRyaWVzKQogewogCXN0cnVjdCBpcHcyMTAwX3N0YXR1c19xdWV1ZSAqcSA9ICZwcml2LT5zdGF0dXNfcXVldWU7CkBAIC00MTc2LDExICs0MTc4LDExIEBACiAJSVBXX0RFQlVHX0lORk8oImVudGVyXG4iKTsKIAogCXEtPnNpemUgPSBlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cyk7Ci0JcS0+ZHJ2ID0gKHN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqKXBjaV9hbGxvY19jb25zaXN0ZW50KAotCQlwcml2LT5wY2lfZGV2LCBxLT5zaXplLCAmcS0+bmljKTsKKwlxLT5kcnYgPQorCSAgICAoc3RydWN0IGlwdzIxMDBfc3RhdHVzICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKKwkJCQkJCQkgIHEtPnNpemUsICZxLT5uaWMpOwogCWlmICghcS0+ZHJ2KSB7Ci0JCUlQV19ERUJVR19XQVJOSU5HKAotCQkgICAgICAgIkNhbiBub3QgYWxsb2NhdGUgc3RhdHVzIHF1ZXVlLlxuIik7CisJCUlQV19ERUJVR19XQVJOSU5HKCJDYW4gbm90IGFsbG9jYXRlIHN0YXR1cyBxdWV1ZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQxOTYsOSArNDE5OCw5IEBACiAJSVBXX0RFQlVHX0lORk8oImVudGVyXG4iKTsKIAogCWlmIChwcml2LT5zdGF0dXNfcXVldWUuZHJ2KSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoCi0JCQlwcml2LT5wY2lfZGV2LCBwcml2LT5zdGF0dXNfcXVldWUuc2l6ZSwKLQkJCXByaXYtPnN0YXR1c19xdWV1ZS5kcnYsIHByaXYtPnN0YXR1c19xdWV1ZS5uaWMpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHByaXYtPnN0YXR1c19xdWV1ZS5zaXplLAorCQkJCSAgICBwcml2LT5zdGF0dXNfcXVldWUuZHJ2LAorCQkJCSAgICBwcml2LT5zdGF0dXNfcXVldWUubmljKTsKIAkJcHJpdi0+c3RhdHVzX3F1ZXVlLmRydiA9IE5VTEw7CiAJfQogCkBAIC00MjE2LDcgKzQyMTgsOCBAQAogCXEtPnNpemUgPSBlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2JkKTsKIAlxLT5kcnYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCBxLT5zaXplLCAmcS0+bmljKTsKIAlpZiAoIXEtPmRydikgewotCQlJUFdfREVCVUdfSU5GTygiY2FuJ3QgYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSBmb3IgYnVmZmVyIGRlc2NyaXB0b3JzXG4iKTsKKwkJSVBXX0RFQlVHX0lORk8KKwkJICAgICgiY2FuJ3QgYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSBmb3IgYnVmZmVyIGRlc2NyaXB0b3JzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldChxLT5kcnYsIDAsIHEtPnNpemUpOwpAQCAtNDIyNiw4ICs0MjI5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmRfcXVldWVfZnJlZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJICBzdHJ1Y3QgaXB3MjEwMF9iZF9xdWV1ZSAqcSkKK3N0YXRpYyB2b2lkIGJkX3F1ZXVlX2ZyZWUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgc3RydWN0IGlwdzIxMDBfYmRfcXVldWUgKnEpCiB7CiAJSVBXX0RFQlVHX0lORk8oImVudGVyXG4iKTsKIApAQCAtNDIzNSwyMSArNDIzNywyMSBAQAogCQlyZXR1cm47CiAKIAlpZiAocS0+ZHJ2KSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKLQkJCQkgICAgcS0+c2l6ZSwgcS0+ZHJ2LCBxLT5uaWMpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHEtPnNpemUsIHEtPmRydiwgcS0+bmljKTsKIAkJcS0+ZHJ2ID0gTlVMTDsKIAl9CiAKIAlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGJkX3F1ZXVlX2luaXRpYWxpemUoCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgc3RydWN0IGlwdzIxMDBfYmRfcXVldWUgKiBxLAotCXUzMiBiYXNlLCB1MzIgc2l6ZSwgdTMyIHIsIHUzMiB3KQorc3RhdGljIHZvaWQgYmRfcXVldWVfaW5pdGlhbGl6ZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpcHcyMTAwX2JkX3F1ZXVlICpxLCB1MzIgYmFzZSwgdTMyIHNpemUsCisJCQkJdTMyIHIsIHUzMiB3KQogewogCUlQV19ERUJVR19JTkZPKCJlbnRlclxuIik7CiAKLQlJUFdfREVCVUdfSU5GTygiaW5pdGlhbGl6aW5nIGJkIHF1ZXVlIGF0IHZpcnQ9JXAsIHBoeXM9JTA4eFxuIiwgcS0+ZHJ2LCAodTMyKXEtPm5pYyk7CisJSVBXX0RFQlVHX0lORk8oImluaXRpYWxpemluZyBiZCBxdWV1ZSBhdCB2aXJ0PSVwLCBwaHlzPSUwOHhcbiIsIHEtPmRydiwKKwkJICAgICAgICh1MzIpIHEtPm5pYyk7CiAKIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBiYXNlLCBxLT5uaWMpOwogCXdyaXRlX3JlZ2lzdGVyKHByaXYtPm5ldF9kZXYsIHNpemUsIHEtPmVudHJpZXMpOwpAQCAtNDI4NSwzMiArNDI4NywzOCBAQAogCWVyciA9IGJkX3F1ZXVlX2FsbG9jYXRlKHByaXYsICZwcml2LT50eF9xdWV1ZSwgVFhfUVVFVUVfTEVOR1RIKTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19FUlJPUigiJXM6IGZhaWxlZCBiZF9xdWV1ZV9hbGxvY2F0ZVxuIiwKLQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXByaXYtPnR4X2J1ZmZlcnMgPSAoc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0ICopa21hbGxvYygKLQkJVFhfUEVOREVEX1FVRVVFX0xFTkdUSCAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQpLAotCQlHRlBfQVRPTUlDKTsKKwlwcml2LT50eF9idWZmZXJzID0KKwkgICAgKHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCAqKWttYWxsb2MoVFhfUEVOREVEX1FVRVVFX0xFTkdUSCAqCisJCQkJCQlzaXplb2Yoc3RydWN0CisJCQkJCQkgICAgICAgaXB3MjEwMF90eF9wYWNrZXQpLAorCQkJCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFwcml2LT50eF9idWZmZXJzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogYWxsb2MgZmFpbGVkIGZvcm0gdHggYnVmZmVycy5cbiIsCisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IGFsbG9jIGZhaWxlZCBmb3JtIHR4IGJ1ZmZlcnMuXG4iLAogCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCWJkX3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnR4X3F1ZXVlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IFRYX1BFTkRFRF9RVUVVRV9MRU5HVEg7IGkrKykgewotCQl2ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCi0JCQlwcml2LT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIpLCAmcCk7CisJCXYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyKSwKKwkJCQkJICZwKTsKIAkJaWYgKCF2KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IFBDSSBhbGxvYyBmYWlsZWQgZm9yIHR4ICIKLQkJCSAgICAgICAiYnVmZmVycy5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IFBDSSBhbGxvYyBmYWlsZWQgZm9yIHR4ICIgImJ1ZmZlcnMuXG4iLAorCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJcHJpdi0+dHhfYnVmZmVyc1tpXS50eXBlID0gREFUQTsKLQkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LmRhdGEgPSAoc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIqKXY7CisJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC5kYXRhID0KKwkJICAgIChzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciAqKXY7CiAJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC5kYXRhX3BoeXMgPSBwOwogCQlwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiID0gTlVMTDsKIAl9CkBAIC00MzE5LDExICs0MzI3LDExIEBACiAJCXJldHVybiAwOwogCiAJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KAotCQkJcHJpdi0+cGNpX2RldiwKLQkJCXNpemVvZihzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciksCi0JCQlwcml2LT50eF9idWZmZXJzW2pdLmluZm8uZF9zdHJ1Y3QuZGF0YSwKLQkJCXByaXYtPnR4X2J1ZmZlcnNbal0uaW5mby5kX3N0cnVjdC5kYXRhX3BoeXMpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciksCisJCQkJICAgIHByaXYtPnR4X2J1ZmZlcnNbal0uaW5mby5kX3N0cnVjdC5kYXRhLAorCQkJCSAgICBwcml2LT50eF9idWZmZXJzW2pdLmluZm8uZF9zdHJ1Y3QuCisJCQkJICAgIGRhdGFfcGh5cyk7CiAJfQogCiAJa2ZyZWUocHJpdi0+dHhfYnVmZmVycyk7CkBAIC00MzU2LDcgKzQzNjQsOCBAQAogCQkvKiBXZSBzaW1wbHkgZHJvcCBhbnkgU0tCcyB0aGF0IGhhdmUgYmVlbiBxdWV1ZWQgZm9yCiAJCSAqIHRyYW5zbWl0ICovCiAJCWlmIChwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiKSB7Ci0JCQlpZWVlODAyMTFfdHhiX2ZyZWUocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4Yik7CisJCQlpZWVlODAyMTFfdHhiX2ZyZWUocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LgorCQkJCQkgICB0eGIpOwogCQkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAJCX0KIApAQCAtNDM5NCwxNSArNDQwMywxNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IFRYX1BFTkRFRF9RVUVVRV9MRU5HVEg7IGkrKykgewogCQlpZiAocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4YikgewotCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC50eGIpOworCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KKwkJCQkJICAgdHhiKTsKIAkJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC50eGIgPSBOVUxMOwogCQl9CiAJCWlmIChwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QuZGF0YSkKLQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoCi0JCQkJcHJpdi0+cGNpX2RldiwKLQkJCQlzaXplb2Yoc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIpLAotCQkJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC5kYXRhLAotCQkJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC5kYXRhX3BoeXMpOworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyKSwKKwkJCQkJICAgIHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KKwkJCQkJICAgIGRhdGEsCisJCQkJCSAgICBwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QuCisJCQkJCSAgICBkYXRhX3BoeXMpOwogCX0KIAogCWtmcmVlKHByaXYtPnR4X2J1ZmZlcnMpOwpAQCAtNDQxMSw4ICs0NDIyLDYgQEAKIAlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CiB9CiAKLQotCiBzdGF0aWMgaW50IGlwdzIxMDBfcnhfYWxsb2NhdGUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdikKIHsKIAlpbnQgaSwgaiwgZXJyID0gLUVJTlZBTDsKQEAgLTQ1NDIsMTQgKzQ1NTEsMTMgQEAKIAogCWludCBlcnI7CiAKLQllcnIgPSBpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfU1RBVF9BREFQVEVSX01BQywKLQkJCQkgIG1hYywgJmxlbmd0aCk7CisJZXJyID0gaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1NUQVRfQURBUFRFUl9NQUMsIG1hYywgJmxlbmd0aCk7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfSU5GTygiTUFDIGFkZHJlc3MgcmVhZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJSVBXX0RFQlVHX0lORk8oImNhcmQgTUFDIGlzICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCSAgICAgICBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwkJICAgICAgIG1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0pOwogCiAJbWVtY3B5KHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLCBtYWMsIEVUSF9BTEVOKTsKIApAQCAtNDU3Niw4ICs0NTg0LDcgQEAKIAlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOwogCiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19DVVNUT01fTUFDKSB7Ci0JCW1lbWNweShjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsIHByaXYtPm1hY19hZGRyLAotCQkgICAgICAgRVRIX0FMRU4pOworCQltZW1jcHkoY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCQltZW1jcHkocHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfSBlbHNlCiAJCW1lbWNweShjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsIHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLApAQCAtNDYxNCw3ICs0NjIxLDggQEAKIAlpZiAoIWJhdGNoX21vZGUpIHsKIAkJZXJyID0gaXB3MjEwMF9kaXNhYmxlX2FkYXB0ZXIocHJpdik7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogQ291bGQgbm90IGRpc2FibGUgYWRhcHRlciAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBDb3VsZCBub3QgZGlzYWJsZSBhZGFwdGVyICVkXG4iLAogCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC00NjI5LDcgKzQ2MzcsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX3NldF9jaGFubmVsKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiBjaGFubmVsLAogCQkJICAgICAgIGludCBiYXRjaF9tb2RlKQogewpAQCAtNDY2MCw4ICs0NjY3LDcgQEAKIAogCWVyciA9IGlwdzIxMDBfaHdfc2VuZF9jb21tYW5kKHByaXYsICZjbWQpOwogCWlmIChlcnIpIHsKLQkJSVBXX0RFQlVHX0lORk8oIkZhaWxlZCB0byBzZXQgY2hhbm5lbCB0byAlZCIsCi0JCQkgICAgICAgY2hhbm5lbCk7CisJCUlQV19ERUJVR19JTkZPKCJGYWlsZWQgdG8gc2V0IGNoYW5uZWwgdG8gJWQiLCBjaGFubmVsKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTQ3MDMsMTUgKzQ3MDksMTQgQEAKIAkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IElQV19DRkdfSUJTU19BVVRPX1NUQVJUOwogCiAJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IElQV19DRkdfSUJTU19NQVNLIHwKLQkJSVBXX0NGR19CU1NfTUFTSyB8Ci0JCUlQV19DRkdfODAyXzF4X0VOQUJMRTsKKwkgICAgSVBXX0NGR19CU1NfTUFTSyB8IElQV19DRkdfODAyXzF4X0VOQUJMRTsKIAogCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19MT05HX1BSRUFNQkxFKSkKIAkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IElQV19DRkdfUFJFQU1CTEVfQVVUTzsKIAogCWVyciA9IGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwKIAkJCQkgIElQV19PUkRfRUVQUk9NX0lCU1NfMTFCX0NIQU5ORUxTLAotCQkJCSAgJmlic3NfbWFzaywgICZsZW4pOworCQkJCSAgJmlic3NfbWFzaywgJmxlbik7CiAJaWYgKGVycikKIAkJaWJzc19tYXNrID0gSVBXX0lCU1NfMTFCX0RFRkFVTFRfTUFTSzsKIApAQCAtNDcxOSw3ICs0NzI0LDcgQEAKIAljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMl0gPSBSRUdfQ0hBTk5FTF9NQVNLICYgaWJzc19tYXNrOwogCiAJLyogMTFiIG9ubHkgKi8KLQkvKmNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSB8PSBESVZFUlNJVFlfQU5URU5OQV9BOyovCisJLypjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMF0gfD0gRElWRVJTSVRZX0FOVEVOTkFfQTsgKi8KIAogCWVyciA9IGlwdzIxMDBfaHdfc2VuZF9jb21tYW5kKHByaXYsICZjbWQpOwogCWlmIChlcnIpCkBAIC00NzgzLDggKzQ3ODgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwdzIxMDBfc2V0X3Bvd2VyX21vZGUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKLQkJCQkgIGludCBwb3dlcl9sZXZlbCkKK3N0YXRpYyBpbnQgaXB3MjEwMF9zZXRfcG93ZXJfbW9kZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgcG93ZXJfbGV2ZWwpCiB7CiAJc3RydWN0IGhvc3RfY29tbWFuZCBjbWQgPSB7CiAJCS5ob3N0X2NvbW1hbmQgPSBQT1dFUl9NT0RFLApAQCAtNDgwNSwxMSArNDgwOSwxMCBAQAogCQlwcml2LT5wb3dlcl9tb2RlID0gSVBXX1BPV0VSX0VOQUJMRUQgfCBwb3dlcl9sZXZlbDsKIAogI2lmZGVmIENPTkZJR19JUFcyMTAwX1RYX1BPV0VSCi0JaWYgKHByaXYtPnBvcnRfdHlwZSA9PSBJQlNTICYmCi0JICAgIHByaXYtPmFkaG9jX3Bvd2VyICE9IERGVExfSUJTU19UWF9QT1dFUikgeworCWlmIChwcml2LT5wb3J0X3R5cGUgPT0gSUJTUyAmJiBwcml2LT5hZGhvY19wb3dlciAhPSBERlRMX0lCU1NfVFhfUE9XRVIpIHsKIAkJLyogU2V0IGJlYWNvbiBpbnRlcnZhbCAqLwogCQljbWQuaG9zdF9jb21tYW5kID0gVFhfUE9XRVJfSU5ERVg7Ci0JCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSA9ICh1MzIpcHJpdi0+YWRob2NfcG93ZXI7CisJCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSA9ICh1MzIpIHByaXYtPmFkaG9jX3Bvd2VyOwogCiAJCWVyciA9IGlwdzIxMDBfaHdfc2VuZF9jb21tYW5kKHByaXYsICZjbWQpOwogCQlpZiAoZXJyKQpAQCAtNDgyMCw3ICs0ODIzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHRocmVzaG9sZCkKIHsKIAlzdHJ1Y3QgaG9zdF9jb21tYW5kIGNtZCA9IHsKQEAgLTQ5MjUsOCArNDkyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBpcHcyMTAwX3NldF9tYW5kYXRvcnlfYnNzaWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTggKmJzc2lkLAorc3RhdGljIGludCBpcHcyMTAwX3NldF9tYW5kYXRvcnlfYnNzaWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTggKiBic3NpZCwKIAkJCQkgICAgICAgaW50IGJhdGNoX21vZGUpCiB7CiAJc3RydWN0IGhvc3RfY29tbWFuZCBjbWQgPSB7CkBAIC00OTM4LDE2ICs0OTM5LDE1IEBACiAKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiAJaWYgKGJzc2lkICE9IE5VTEwpCi0JCUlQV19ERUJVR19IQygKLQkJCSJNQU5EQVRPUllfQlNTSUQ6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCQkJYnNzaWRbMF0sIGJzc2lkWzFdLCBic3NpZFsyXSwgYnNzaWRbM10sIGJzc2lkWzRdLAotCQkJYnNzaWRbNV0pOworCQlJUFdfREVCVUdfSEMoIk1BTkRBVE9SWV9CU1NJRDogJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJCQkgICAgIGJzc2lkWzBdLCBic3NpZFsxXSwgYnNzaWRbMl0sIGJzc2lkWzNdLCBic3NpZFs0XSwKKwkJCSAgICAgYnNzaWRbNV0pOwogCWVsc2UKIAkJSVBXX0RFQlVHX0hDKCJNQU5EQVRPUllfQlNTSUQ6IDxjbGVhcj5cbiIpOwogI2VuZGlmCiAJLyogaWYgQlNTSUQgaXMgZW1wdHkgdGhlbiB3ZSBkaXNhYmxlIG1hbmRhdG9yeSBic3NpZCBtb2RlICovCiAJaWYgKGJzc2lkICE9IE5VTEwpCi0JCW1lbWNweSgodTggKiljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsIGJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsIGJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZiAoIWJhdGNoX21vZGUpIHsKIAkJZXJyID0gaXB3MjEwMF9kaXNhYmxlX2FkYXB0ZXIocHJpdik7CkBAIC00OTYzLDcgKzQ5NjMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1dQQQogc3RhdGljIGludCBpcHcyMTAwX2Rpc2Fzc29jaWF0ZV9ic3NpZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBob3N0X2NvbW1hbmQgY21kID0gewpAQCAtNDk4Nyw0MiArNDk4NiwxMCBAQAogCiAJcmV0dXJuIGVycjsKIH0KLSNlbmRpZgotCi0vKgotICogUHNldWRvIGNvZGUgZm9yIHNldHRpbmcgdXAgd3BhX2ZyYW1lOgotICovCi0jaWYgMAotdm9pZCB4KHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfZnJhbWUgKndwYV9hc3NvYykKLXsKLQlzdHJ1Y3QgaXB3MjEwMF93cGFfYXNzb2NfZnJhbWUgZnJhbWU7Ci0JZnJhbWUtPmZpeGVkX2llX21hc2sgPSBJUFdfV1BBX0NBUEFCSUxUSUVTIHwKLQkJSVBXX1dQQV9MSVNURU5JTlRFUlZBTCB8Ci0JCUlQV19XUEFfQVBfQUREUkVTUzsKLQlmcmFtZS0+Y2FwYWJfaW5mbyA9IHdwYV9hc3NvYy0+Y2FwYWJfaW5mbzsKLQlmcmFtZS0+bGlzZW5faW50ZXJ2YWwgPSB3cGFfYXNzb2MtPmxpc3RlbnRfaW50ZXJ2YWw7Ci0JbWVtY3B5KGZyYW1lLT5jdXJyZW50X2FwLCB3cGFfYXNzb2MtPmN1cnJlbnRfYXAsIEVUSF9BTEVOKTsKLQotCS8qIFVOS05PV04gLS0gSSdtIG5vdCBwb3N0aXZpdmUgYWJvdXQgdGhpcyBwYXJ0OyBkb24ndCBoYXZlIGFueSBXUEEKLQkgKiBzZXR1cCBoZXJlIHRvIHRlc3QgaXQgd2l0aC4KLQkgKgotCSAqIFdhbGsgdGhlIElFcyBpbiB0aGUgd3BhX2Fzc29jIGFuZCBmaWd1cmUgb3V0IHRoZSB0b3RhbCBzaXplIG9mIGFsbAotCSAqIHRoYXQgZGF0YS4gIFN0aWNrIHRoYXQgaW50byBmcmFtZS0+dmFyX2llX2xlbi4gIFRoZW4gbWVtY3B5KCkgYWxsIG9mCi0JICogdGhlIElFcyBmcm9tIHdwYV9mcmFtZSBpbnRvIGZyYW1lLgotCSAqLwotCWZyYW1lLT52YXJfaWVfbGVuID0gY2FsY3VsYXRlX2llX2xlbih3cGFfYXNzb2MpOwotCW1lbWNweShmcmFtZS0+dmFyX2llLCAgd3BhX2Fzc29jLT52YXJpYWJsZSwgZnJhbWUtPnZhcl9pZV9sZW4pOwotCi0JaXB3MjEwMF9zZXRfd3BhX2llKHByaXYsICZmcmFtZSwgMCk7Ci19Ci0jZW5kaWYKLQotCi0KIAogc3RhdGljIGludCBpcHcyMTAwX3NldF93cGFfaWUoc3RydWN0IGlwdzIxMDBfcHJpdiAqLAogCQkJICAgICAgc3RydWN0IGlwdzIxMDBfd3BhX2Fzc29jX2ZyYW1lICosIGludCkKLV9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKyAgICBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9zZXRfd3BhX2llKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXB3MjEwMF93cGFfYXNzb2NfZnJhbWUgKndwYV9mcmFtZSwKQEAgLTUwNzYsNyArNTA0Myw3IEBACiAJCS5ob3N0X2NvbW1hbmRfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzZWN1cml0eV9pbmZvX3BhcmFtcykKIAl9OwogCXN0cnVjdCBzZWN1cml0eV9pbmZvX3BhcmFtcyAqc2VjdXJpdHkgPQotCQkoc3RydWN0IHNlY3VyaXR5X2luZm9fcGFyYW1zICopJmNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyczsKKwkgICAgKHN0cnVjdCBzZWN1cml0eV9pbmZvX3BhcmFtcyAqKSZjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnM7CiAJaW50IGVycjsKIAltZW1zZXQoc2VjdXJpdHksIDAsIHNpemVvZigqc2VjdXJpdHkpKTsKIApAQCAtNTA5NCwyNSArNTA2MSwyNSBAQAogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8xOgogCQlzZWN1cml0eS0+YWxsb3dlZF9jaXBoZXJzID0gSVBXX1dFUDQwX0NJUEhFUiB8Ci0JCQlJUFdfV0VQMTA0X0NJUEhFUjsKKwkJICAgIElQV19XRVAxMDRfQ0lQSEVSOwogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8yOgogCQlzZWN1cml0eS0+YWxsb3dlZF9jaXBoZXJzID0gSVBXX1dFUDQwX0NJUEhFUiB8Ci0JCQlJUFdfV0VQMTA0X0NJUEhFUiB8IElQV19US0lQX0NJUEhFUjsKKwkJICAgIElQV19XRVAxMDRfQ0lQSEVSIHwgSVBXX1RLSVBfQ0lQSEVSOwogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8yX0NLSVA6CiAJCXNlY3VyaXR5LT5hbGxvd2VkX2NpcGhlcnMgPSBJUFdfV0VQNDBfQ0lQSEVSIHwKLQkJCUlQV19XRVAxMDRfQ0lQSEVSIHwgSVBXX0NLSVBfQ0lQSEVSOworCQkgICAgSVBXX1dFUDEwNF9DSVBIRVIgfCBJUFdfQ0tJUF9DSVBIRVI7CiAJCWJyZWFrOwogCWNhc2UgU0VDX0xFVkVMXzM6CiAJCXNlY3VyaXR5LT5hbGxvd2VkX2NpcGhlcnMgPSBJUFdfV0VQNDBfQ0lQSEVSIHwKLQkJCUlQV19XRVAxMDRfQ0lQSEVSIHwgSVBXX1RLSVBfQ0lQSEVSIHwgSVBXX0NDTVBfQ0lQSEVSOworCQkgICAgSVBXX1dFUDEwNF9DSVBIRVIgfCBJUFdfVEtJUF9DSVBIRVIgfCBJUFdfQ0NNUF9DSVBIRVI7CiAJCWJyZWFrOwogCX0KIAotCUlQV19ERUJVR19IQygKLQkJIlNFVF9TRUNVUklUWV9JTkZPUk1BVElPTjogYXV0aDolZCBjaXBoZXI6MHglMDJYIChsZXZlbCAlZClcbiIsCi0JCXNlY3VyaXR5LT5hdXRoX21vZGUsIHNlY3VyaXR5LT5hbGxvd2VkX2NpcGhlcnMsIHNlY3VyaXR5X2xldmVsKTsKKwlJUFdfREVCVUdfSEMKKwkgICAgKCJTRVRfU0VDVVJJVFlfSU5GT1JNQVRJT046IGF1dGg6JWQgY2lwaGVyOjB4JTAyWCAobGV2ZWwgJWQpXG4iLAorCSAgICAgc2VjdXJpdHktPmF1dGhfbW9kZSwgc2VjdXJpdHktPmFsbG93ZWRfY2lwaGVycywgc2VjdXJpdHlfbGV2ZWwpOwogCiAJc2VjdXJpdHktPnJlcGxheV9jb3VudGVyc19udW1iZXIgPSAwOwogCkBAIC01MTMwLDggKzUwOTcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaXB3MjEwMF9zZXRfdHhfcG93ZXIoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKLQkJCQl1MzIgdHhfcG93ZXIpCitzdGF0aWMgaW50IGlwdzIxMDBfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiB0eF9wb3dlcikKIHsKIAlzdHJ1Y3QgaG9zdF9jb21tYW5kIGNtZCA9IHsKIAkJLmhvc3RfY29tbWFuZCA9IFRYX1BPV0VSX0lOREVYLApAQCAtNTE0MCw2ICs1MTA2LDEwIEBACiAJfTsKIAlpbnQgZXJyID0gMDsKIAorCWlmICh0eF9wb3dlciAhPSBJUFdfVFhfUE9XRVJfREVGQVVMVCkKKwkJdHhfcG93ZXIgPSAodHhfcG93ZXIgLSBJUFdfVFhfUE9XRVJfTUlOX0RCTSkgKiAxNiAvCisJCSAgICAoSVBXX1RYX1BPV0VSX01BWF9EQk0gLSBJUFdfVFhfUE9XRVJfTUlOX0RCTSk7CisKIAljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMF0gPSB0eF9wb3dlcjsKIAogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCkBAIC01MTg1LDcgKzUxNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHZvaWQgaXB3MjEwMF9xdWV1ZXNfaW5pdGlhbGl6ZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCWlwdzIxMDBfdHhfaW5pdGlhbGl6ZShwcml2KTsKQEAgLTUyMDMsMTMgKzUxNzIsMTIgQEAKIGludCBpcHcyMTAwX3F1ZXVlc19hbGxvY2F0ZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCWlmIChpcHcyMTAwX3R4X2FsbG9jYXRlKHByaXYpIHx8Ci0JICAgIGlwdzIxMDBfcnhfYWxsb2NhdGUocHJpdikgfHwKLQkgICAgaXB3MjEwMF9tc2dfYWxsb2NhdGUocHJpdikpCisJICAgIGlwdzIxMDBfcnhfYWxsb2NhdGUocHJpdikgfHwgaXB3MjEwMF9tc2dfYWxsb2NhdGUocHJpdikpCiAJCWdvdG8gZmFpbDsKIAogCXJldHVybiAwOwogCi0gZmFpbDoKKyAgICAgIGZhaWw6CiAJaXB3MjEwMF90eF9mcmVlKHByaXYpOwogCWlwdzIxMDBfcnhfZnJlZShwcml2KTsKIAlpcHcyMTAwX21zZ19mcmVlKHByaXYpOwpAQCAtNTIzNSw3ICs1MjAzLDggQEAKIAlpZiAoIWJhdGNoX21vZGUpIHsKIAkJZXJyID0gaXB3MjEwMF9kaXNhYmxlX2FkYXB0ZXIocHJpdik7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogQ291bGQgbm90IGRpc2FibGUgYWRhcHRlciAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBDb3VsZCBub3QgZGlzYWJsZSBhZGFwdGVyICVkXG4iLAogCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC01MjYyLDcgKzUyMzEsNiBAQAogI2RlZmluZSBXRVBfU1RSXzY0KHgpIHhbMF0seFsxXSx4WzJdLHhbM10seFs0XQogI2RlZmluZSBXRVBfU1RSXzEyOCh4KSB4WzBdLHhbMV0seFsyXSx4WzNdLHhbNF0seFs1XSx4WzZdLHhbN10seFs4XSx4WzldLHhbMTBdCiAKLQogLyoqCiAgKiBTZXQgYSB0aGUgd2VwIGtleQogICoKQEAgLTUyODcsMTEgKzUyNTUsMTEgQEAKIAkJLmhvc3RfY29tbWFuZF9zZXF1ZW5jZSA9IDAsCiAJCS5ob3N0X2NvbW1hbmRfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3dlcF9rZXkpLAogCX07Ci0Jc3RydWN0IGlwdzIxMDBfd2VwX2tleSAqd2VwX2tleSA9ICh2b2lkKiljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnM7CisJc3RydWN0IGlwdzIxMDBfd2VwX2tleSAqd2VwX2tleSA9ICh2b2lkICopY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzOwogCWludCBlcnI7CiAKIAlJUFdfREVCVUdfSEMoIldFUF9LRVlfSU5GTzogaW5kZXggPSAlZCwgbGVuID0gJWQvJWRcbiIsCi0JCQkJIGlkeCwga2V5bGVuLCBsZW4pOworCQkgICAgIGlkeCwga2V5bGVuLCBsZW4pOwogCiAJLyogTk9URTogV2UgZG9uJ3QgY2hlY2sgY2FjaGVkIHZhbHVlcyBpbiBjYXNlIHRoZSBmaXJtd2FyZSB3YXMgcmVzZXQKIAkgKiBvciBzb21lIG90aGVyIHByb2JsZW0gaXMgb2NjdXJpbmcuICBJZiB0aGUgdXNlciBpcyBzZXR0aW5nIHRoZSBrZXksCkBAIC01MzA4LDIyICs1Mjc2LDIzIEBACiAJLyogV2lsbCBiZSBvcHRpbWl6ZWQgb3V0IG9uIGRlYnVnIG5vdCBiZWluZyBjb25maWd1cmVkIGluICovCiAJaWYgKGtleWxlbiA9PSAwKQogCQlJUFdfREVCVUdfV0VQKCIlczogQ2xlYXJpbmcga2V5ICVkXG4iLAotCQkJCSAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgd2VwX2tleS0+aWR4KTsKKwkJCSAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHdlcF9rZXktPmlkeCk7CiAJZWxzZSBpZiAoa2V5bGVuID09IDUpCiAJCUlQV19ERUJVR19XRVAoIiVzOiBpZHg6ICVkLCBsZW46ICVkIGtleTogIiBXRVBfRk1UXzY0ICJcbiIsCi0JCQkJICBwcml2LT5uZXRfZGV2LT5uYW1lLCB3ZXBfa2V5LT5pZHgsIHdlcF9rZXktPmxlbiwKLQkJCQkgIFdFUF9TVFJfNjQod2VwX2tleS0+a2V5KSk7CisJCQkgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCB3ZXBfa2V5LT5pZHgsIHdlcF9rZXktPmxlbiwKKwkJCSAgICAgIFdFUF9TVFJfNjQod2VwX2tleS0+a2V5KSk7CiAJZWxzZQogCQlJUFdfREVCVUdfV0VQKCIlczogaWR4OiAlZCwgbGVuOiAlZCBrZXk6ICIgV0VQX0ZNVF8xMjgKLQkJCQkgICJcbiIsCi0JCQkJICBwcml2LT5uZXRfZGV2LT5uYW1lLCB3ZXBfa2V5LT5pZHgsIHdlcF9rZXktPmxlbiwKLQkJCQkgIFdFUF9TVFJfMTI4KHdlcF9rZXktPmtleSkpOworCQkJICAgICAgIlxuIiwKKwkJCSAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHdlcF9rZXktPmlkeCwgd2VwX2tleS0+bGVuLAorCQkJICAgICAgV0VQX1NUUl8xMjgod2VwX2tleS0+a2V5KSk7CiAKIAlpZiAoIWJhdGNoX21vZGUpIHsKIAkJZXJyID0gaXB3MjEwMF9kaXNhYmxlX2FkYXB0ZXIocHJpdik7CiAJCS8qIEZJWE1FOiBJUEc6IHNob3VsZG4ndCB0aGlzIHByaW5rIGJlIGluIF9kaXNhYmxlX2FkYXB0ZXIoKT8gKi8KIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBDb3VsZCBub3QgZGlzYWJsZSBhZGFwdGVyICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IENvdWxkIG5vdCBkaXNhYmxlIGFkYXB0ZXIgJWRcbiIsCiAJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTUzNDcsNyArNTMxNiw3IEBACiAJCS5ob3N0X2NvbW1hbmQgPSBXRVBfS0VZX0lOREVYLAogCQkuaG9zdF9jb21tYW5kX3NlcXVlbmNlID0gMCwKIAkJLmhvc3RfY29tbWFuZF9sZW5ndGggPSA0LAotCQkuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMgPSB7IGlkeCB9LAorCQkuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMgPSB7aWR4fSwKIAl9OwogCWludCBlcnI7CiAKQEAgLTUzNTksNyArNTMyOCw4IEBACiAJaWYgKCFiYXRjaF9tb2RlKSB7CiAJCWVyciA9IGlwdzIxMDBfZGlzYWJsZV9hZGFwdGVyKHByaXYpOwogCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IENvdWxkIG5vdCBkaXNhYmxlIGFkYXB0ZXIgJWRcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogQ291bGQgbm90IGRpc2FibGUgYWRhcHRlciAlZFxuIiwKIAkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtNTM3NCw5ICs1MzQ0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KLXN0YXRpYyBpbnQgaXB3MjEwMF9jb25maWd1cmVfc2VjdXJpdHkoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBpbnQgYmF0Y2hfbW9kZSkKK3N0YXRpYyBpbnQgaXB3MjEwMF9jb25maWd1cmVfc2VjdXJpdHkoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGJhdGNoX21vZGUpCiB7CiAJaW50IGksIGVyciwgYXV0aF9tb2RlLCBzZWNfbGV2ZWwsIHVzZV9ncm91cDsKIApAQCAtNTM4OSw0MCArNTM1Nyw0MiBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoIXByaXYtPnNlYy5lbmFibGVkKSB7Ci0JCWVyciA9IGlwdzIxMDBfc2V0X3NlY3VyaXR5X2luZm9ybWF0aW9uKAotCQkJcHJpdiwgSVBXX0FVVEhfT1BFTiwgU0VDX0xFVkVMXzAsIDAsIDEpOworCWlmICghcHJpdi0+aWVlZS0+c2VjLmVuYWJsZWQpIHsKKwkJZXJyID0KKwkJICAgIGlwdzIxMDBfc2V0X3NlY3VyaXR5X2luZm9ybWF0aW9uKHByaXYsIElQV19BVVRIX09QRU4sCisJCQkJCQkgICAgIFNFQ19MRVZFTF8wLCAwLCAxKTsKIAl9IGVsc2UgewogCQlhdXRoX21vZGUgPSBJUFdfQVVUSF9PUEVOOwotCQlpZiAoKHByaXYtPnNlYy5mbGFncyAmIFNFQ19BVVRIX01PREUpICYmCi0JCSAgICAocHJpdi0+c2VjLmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkpCisJCWlmICgocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgU0VDX0FVVEhfTU9ERSkgJiYKKwkJICAgIChwcml2LT5pZWVlLT5zZWMuYXV0aF9tb2RlID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKSkKIAkJCWF1dGhfbW9kZSA9IElQV19BVVRIX1NIQVJFRDsKIAogCQlzZWNfbGV2ZWwgPSBTRUNfTEVWRUxfMDsKLQkJaWYgKHByaXYtPnNlYy5mbGFncyAmIFNFQ19MRVZFTCkKLQkJCXNlY19sZXZlbCA9IHByaXYtPnNlYy5sZXZlbDsKKwkJaWYgKHByaXYtPmllZWUtPnNlYy5mbGFncyAmIFNFQ19MRVZFTCkKKwkJCXNlY19sZXZlbCA9IHByaXYtPmllZWUtPnNlYy5sZXZlbDsKIAogCQl1c2VfZ3JvdXAgPSAwOwotCQlpZiAocHJpdi0+c2VjLmZsYWdzICYgU0VDX1VOSUNBU1RfR1JPVVApCi0JCQl1c2VfZ3JvdXAgPSBwcml2LT5zZWMudW5pY2FzdF91c2VzX2dyb3VwOworCQlpZiAocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgU0VDX1VOSUNBU1RfR1JPVVApCisJCQl1c2VfZ3JvdXAgPSBwcml2LT5pZWVlLT5zZWMudW5pY2FzdF91c2VzX2dyb3VwOwogCi0JCWVyciA9IGlwdzIxMDBfc2V0X3NlY3VyaXR5X2luZm9ybWF0aW9uKAotCQkJICAgIHByaXYsIGF1dGhfbW9kZSwgc2VjX2xldmVsLCB1c2VfZ3JvdXAsIDEpOworCQllcnIgPQorCQkgICAgaXB3MjEwMF9zZXRfc2VjdXJpdHlfaW5mb3JtYXRpb24ocHJpdiwgYXV0aF9tb2RlLCBzZWNfbGV2ZWwsCisJCQkJCQkgICAgIHVzZV9ncm91cCwgMSk7CiAJfQogCiAJaWYgKGVycikKIAkJZ290byBleGl0OwogCi0JaWYgKHByaXYtPnNlYy5lbmFibGVkKSB7CisJaWYgKHByaXYtPmllZWUtPnNlYy5lbmFibGVkKSB7CiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCWlmICghKHByaXYtPnNlYy5mbGFncyAmICgxIDw8IGkpKSkgewotCQkJCW1lbXNldChwcml2LT5zZWMua2V5c1tpXSwgMCwgV0VQX0tFWV9MRU4pOwotCQkJCXByaXYtPnNlYy5rZXlfc2l6ZXNbaV0gPSAwOworCQkJaWYgKCEocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgaSkpKSB7CisJCQkJbWVtc2V0KHByaXYtPmllZWUtPnNlYy5rZXlzW2ldLCAwLCBXRVBfS0VZX0xFTik7CisJCQkJcHJpdi0+aWVlZS0+c2VjLmtleV9zaXplc1tpXSA9IDA7CiAJCQl9IGVsc2UgewogCQkJCWVyciA9IGlwdzIxMDBfc2V0X2tleShwcml2LCBpLAotCQkJCQkJICAgICAgcHJpdi0+c2VjLmtleXNbaV0sCi0JCQkJCQkgICAgICBwcml2LT5zZWMua2V5X3NpemVzW2ldLAotCQkJCQkJICAgICAgMSk7CisJCQkJCQkgICAgICBwcml2LT5pZWVlLT5zZWMua2V5c1tpXSwKKwkJCQkJCSAgICAgIHByaXYtPmllZWUtPnNlYy4KKwkJCQkJCSAgICAgIGtleV9zaXplc1tpXSwgMSk7CiAJCQkJaWYgKGVycikKIAkJCQkJZ290byBleGl0OwogCQkJfQpAQCAtNTQzMywxNCArNTQwMywxNiBAQAogCiAJLyogQWx3YXlzIGVuYWJsZSBwcml2YWN5IHNvIHRoZSBIb3N0IGNhbiBmaWx0ZXIgV0VQIHBhY2tldHMgaWYKIAkgKiBlbmNyeXB0ZWQgZGF0YSBpcyBzZW50IHVwICovCi0JZXJyID0gaXB3MjEwMF9zZXRfd2VwX2ZsYWdzKAotCQlwcml2LCBwcml2LT5zZWMuZW5hYmxlZCA/IElQV19QUklWQUNZX0NBUEFCTEUgOiAwLCAxKTsKKwllcnIgPQorCSAgICBpcHcyMTAwX3NldF93ZXBfZmxhZ3MocHJpdiwKKwkJCQkgIHByaXYtPmllZWUtPnNlYy4KKwkJCQkgIGVuYWJsZWQgPyBJUFdfUFJJVkFDWV9DQVBBQkxFIDogMCwgMSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0OwogCiAJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKIAotIGV4aXQ6CisgICAgICBleGl0OgogCWlmICghYmF0Y2hfbW9kZSkKIAkJaXB3MjEwMF9lbmFibGVfYWRhcHRlcihwcml2KTsKIApAQCAtNTQ2OSw2MCArNTQ0MSw2NCBAQAogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlpZiAoc2VjLT5mbGFncyAmICgxIDw8IGkpKSB7Ci0JCQlwcml2LT5zZWMua2V5X3NpemVzW2ldID0gc2VjLT5rZXlfc2l6ZXNbaV07CisJCQlwcml2LT5pZWVlLT5zZWMua2V5X3NpemVzW2ldID0gc2VjLT5rZXlfc2l6ZXNbaV07CiAJCQlpZiAoc2VjLT5rZXlfc2l6ZXNbaV0gPT0gMCkKLQkJCQlwcml2LT5zZWMuZmxhZ3MgJj0gfigxIDw8IGkpOworCQkJCXByaXYtPmllZWUtPnNlYy5mbGFncyAmPSB+KDEgPDwgaSk7CiAJCQllbHNlCi0JCQkJbWVtY3B5KHByaXYtPnNlYy5rZXlzW2ldLCBzZWMtPmtleXNbaV0sCisJCQkJbWVtY3B5KHByaXYtPmllZWUtPnNlYy5rZXlzW2ldLCBzZWMtPmtleXNbaV0sCiAJCQkJICAgICAgIHNlYy0+a2V5X3NpemVzW2ldKTsKLQkJCXByaXYtPnNlYy5mbGFncyB8PSAoMSA8PCBpKTsKLQkJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKKwkJCWlmIChzZWMtPmxldmVsID09IFNFQ19MRVZFTF8xKSB7CisJCQkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzIHw9ICgxIDw8IGkpOworCQkJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKKwkJCX0gZWxzZQorCQkJCXByaXYtPmllZWUtPnNlYy5mbGFncyAmPSB+KDEgPDwgaSk7CiAJCX0KIAl9CiAKIAlpZiAoKHNlYy0+ZmxhZ3MgJiBTRUNfQUNUSVZFX0tFWSkgJiYKLQkgICAgcHJpdi0+c2VjLmFjdGl2ZV9rZXkgIT0gc2VjLT5hY3RpdmVfa2V5KSB7CisJICAgIHByaXYtPmllZWUtPnNlYy5hY3RpdmVfa2V5ICE9IHNlYy0+YWN0aXZlX2tleSkgewogCQlpZiAoc2VjLT5hY3RpdmVfa2V5IDw9IDMpIHsKLQkJCXByaXYtPnNlYy5hY3RpdmVfa2V5ID0gc2VjLT5hY3RpdmVfa2V5OwotCQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19BQ1RJVkVfS0VZOworCQkJcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7CisJCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0FDVElWRV9LRVk7CiAJCX0gZWxzZQotCQkJcHJpdi0+c2VjLmZsYWdzICY9IH5TRUNfQUNUSVZFX0tFWTsKKwkJCXByaXYtPmllZWUtPnNlYy5mbGFncyAmPSB+U0VDX0FDVElWRV9LRVk7CiAKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TRUNVUklUWV9VUERBVEVEOwogCX0KIAogCWlmICgoc2VjLT5mbGFncyAmIFNFQ19BVVRIX01PREUpICYmCi0JICAgIChwcml2LT5zZWMuYXV0aF9tb2RlICE9IHNlYy0+YXV0aF9tb2RlKSkgewotCQlwcml2LT5zZWMuYXV0aF9tb2RlID0gc2VjLT5hdXRoX21vZGU7Ci0JCXByaXYtPnNlYy5mbGFncyB8PSBTRUNfQVVUSF9NT0RFOworCSAgICAocHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZSAhPSBzZWMtPmF1dGhfbW9kZSkpIHsKKwkJcHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZSA9IHNlYy0+YXV0aF9tb2RlOworCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0FVVEhfTU9ERTsKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TRUNVUklUWV9VUERBVEVEOwogCX0KIAotCWlmIChzZWMtPmZsYWdzICYgU0VDX0VOQUJMRUQgJiYKLQkgICAgcHJpdi0+c2VjLmVuYWJsZWQgIT0gc2VjLT5lbmFibGVkKSB7Ci0JCXByaXYtPnNlYy5mbGFncyB8PSBTRUNfRU5BQkxFRDsKLQkJcHJpdi0+c2VjLmVuYWJsZWQgPSBzZWMtPmVuYWJsZWQ7CisJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5BQkxFRCAmJiBwcml2LT5pZWVlLT5zZWMuZW5hYmxlZCAhPSBzZWMtPmVuYWJsZWQpIHsKKwkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzIHw9IFNFQ19FTkFCTEVEOworCQlwcml2LT5pZWVlLT5zZWMuZW5hYmxlZCA9IHNlYy0+ZW5hYmxlZDsKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TRUNVUklUWV9VUERBVEVEOwogCQlmb3JjZV91cGRhdGUgPSAxOwogCX0KIAotCWlmIChzZWMtPmZsYWdzICYgU0VDX0xFVkVMICYmCi0JICAgIHByaXYtPnNlYy5sZXZlbCAhPSBzZWMtPmxldmVsKSB7Ci0JCXByaXYtPnNlYy5sZXZlbCA9IHNlYy0+bGV2ZWw7Ci0JCXByaXYtPnNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CisJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5DUllQVCkKKwkJcHJpdi0+aWVlZS0+c2VjLmVuY3J5cHQgPSBzZWMtPmVuY3J5cHQ7CisKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19MRVZFTCAmJiBwcml2LT5pZWVlLT5zZWMubGV2ZWwgIT0gc2VjLT5sZXZlbCkgeworCQlwcml2LT5pZWVlLT5zZWMubGV2ZWwgPSBzZWMtPmxldmVsOworCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOwogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJfQogCiAJSVBXX0RFQlVHX1dFUCgiU2VjdXJpdHkgZmxhZ3M6ICVjICVjJWMlYyVjICVjJWMlYyVjXG4iLAotCQkJICBwcml2LT5zZWMuZmxhZ3MgJiAoMTw8OCkgPyAnMScgOiAnMCcsCi0JCQkgIHByaXYtPnNlYy5mbGFncyAmICgxPDw3KSA/ICcxJyA6ICcwJywKLQkJCSAgcHJpdi0+c2VjLmZsYWdzICYgKDE8PDYpID8gJzEnIDogJzAnLAotCQkJICBwcml2LT5zZWMuZmxhZ3MgJiAoMTw8NSkgPyAnMScgOiAnMCcsCi0JCQkgIHByaXYtPnNlYy5mbGFncyAmICgxPDw0KSA/ICcxJyA6ICcwJywKLQkJCSAgcHJpdi0+c2VjLmZsYWdzICYgKDE8PDMpID8gJzEnIDogJzAnLAotCQkJICBwcml2LT5zZWMuZmxhZ3MgJiAoMTw8MikgPyAnMScgOiAnMCcsCi0JCQkgIHByaXYtPnNlYy5mbGFncyAmICgxPDwxKSA/ICcxJyA6ICcwJywKLQkJCSAgcHJpdi0+c2VjLmZsYWdzICYgKDE8PDApID8gJzEnIDogJzAnKTsKKwkJICAgICAgcHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgOCkgPyAnMScgOiAnMCcsCisJCSAgICAgIHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IDcpID8gJzEnIDogJzAnLAorCQkgICAgICBwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCA2KSA/ICcxJyA6ICcwJywKKwkJICAgICAgcHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgNSkgPyAnMScgOiAnMCcsCisJCSAgICAgIHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IDQpID8gJzEnIDogJzAnLAorCQkgICAgICBwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCAzKSA/ICcxJyA6ICcwJywKKwkJICAgICAgcHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgMikgPyAnMScgOiAnMCcsCisJCSAgICAgIHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IDEpID8gJzEnIDogJzAnLAorCQkgICAgICBwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCAwKSA/ICcxJyA6ICcwJyk7CiAKIC8qIEFzIGEgdGVtcG9yYXJ5IHdvcmsgYXJvdW5kIHRvIGVuYWJsZSBXUEEgdW50aWwgd2UgZmlndXJlIG91dCB3aHkKICAqIHdwYV9zdXBwbGljYW50IHRvZ2dsZXMgdGhlIHNlY3VyaXR5IGNhcGFiaWxpdHkgb2YgdGhlIGRyaXZlciwgd2hpY2gKQEAgLTU1MzEsNyArNTUwNyw3IEBACiAgKglpZiAoZm9yY2VfdXBkYXRlIHx8ICEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSovCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkpCiAJCWlwdzIxMDBfY29uZmlndXJlX3NlY3VyaXR5KHByaXYsIDApOwotZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogfQogCkBAIC01NTU2LDcgKzU1MzIsNyBAQAogCiAJCXJldHVybiAwOwogCX0KLSNlbmRpZiAvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLwogCiAJZXJyID0gaXB3MjEwMF9yZWFkX21hY19hZGRyZXNzKHByaXYpOwogCWlmIChlcnIpCkBAIC01NTc2LDcgKzU1NTIsNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQllcnIgID0gaXB3MjEwMF9zeXN0ZW1fY29uZmlnKHByaXYsIGJhdGNoX21vZGUpOworCWVyciA9IGlwdzIxMDBfc3lzdGVtX2NvbmZpZyhwcml2LCBiYXRjaF9tb2RlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NjE0LDggKzU1OTAsMTAgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKLQkJZXJyID0gaXB3MjEwMF9zZXRfaWJzc19iZWFjb25faW50ZXJ2YWwoCi0JCQlwcml2LCBwcml2LT5iZWFjb25faW50ZXJ2YWwsIGJhdGNoX21vZGUpOworCQllcnIgPQorCQkgICAgaXB3MjEwMF9zZXRfaWJzc19iZWFjb25faW50ZXJ2YWwocHJpdiwKKwkJCQkJCSAgICAgcHJpdi0+YmVhY29uX2ludGVydmFsLAorCQkJCQkJICAgICBiYXRjaF9tb2RlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKQEAgLTU2MjUsMTggKzU2MDMsMTcgQEAKIAl9CiAKIAkvKgotCSAgZXJyID0gaXB3MjEwMF9zZXRfZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQoCi0JICBwcml2LCBwcml2LT5mcmFnX3RocmVzaG9sZCwgYmF0Y2hfbW9kZSk7Ci0JICBpZiAoZXJyKQotCSAgcmV0dXJuIGVycjsKLQkqLworCSAgIGVyciA9IGlwdzIxMDBfc2V0X2ZyYWdtZW50YXRpb25fdGhyZXNob2xkKAorCSAgIHByaXYsIHByaXYtPmZyYWdfdGhyZXNob2xkLCBiYXRjaF9tb2RlKTsKKwkgICBpZiAoZXJyKQorCSAgIHJldHVybiBlcnI7CisJICovCiAKIAlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEVYVEVSTkFMTFkgQ0FMTEVEIE1FVEhPRFMKQEAgLTU2NjksNyArNTY0Niw3IEBACiAJaXB3MjEwMF9yZXNldF9hZGFwdGVyKHByaXYpOwogCXJldHVybiAwOwogCi0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC01NzA4LDcgKzU2ODUsNyBAQAogCS8qIEZsdXNoIHRoZSBUWCBxdWV1ZSAuLi4gKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPnR4X3BlbmRfbGlzdCkpIHsKIAkJZWxlbWVudCA9IHByaXYtPnR4X3BlbmRfbGlzdC5uZXh0OwotICAgICAgICAgICAgICAgIHBhY2tldCA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0LCBsaXN0KTsKKwkJcGFja2V0ID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQsIGxpc3QpOwogCiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCQlERUNfU1RBVCgmcHJpdi0+dHhfcGVuZF9zdGF0KTsKQEAgLTU3MjYsOCArNTcwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCiAvKgogICogVE9ETzogIEZpeCB0aGlzIGZ1bmN0aW9uLi4uIGl0cyBqdXN0IHdyb25nCiAgKi8KQEAgLTU3NDcsNyArNTcyMiw2IEBACiAJc2NoZWR1bGVfcmVzZXQocHJpdik7CiB9CiAKLQogLyoKICAqIFRPRE86IHJlaW1wbGVtZW50IGl0IHNvIHRoYXQgaXQgcmVhZHMgc3RhdGlzdGljcwogICogICAgICAgZnJvbSB0aGUgYWRhcHRlciB1c2luZyBvcmRpbmFsIHRhYmxlcwpAQCAtNTc2MSwxMSArNTczNSwxMCBAQAogCXJldHVybiAmcHJpdi0+aWVlZS0+c3RhdHM7CiB9CiAKLS8qIFN1cHBvcnQgZm9yIHdwYV9zdXBwbGljYW50LiBXaWxsIGJlIHJlcGxhY2VkIHdpdGggV0VYVCBvbmNlCi0gKiB0aGV5IGdldCBXUEEgc3VwcG9ydC4gKi8KLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1dQQQorI2lmIFdJUkVMRVNTX0VYVCA8IDE4CisvKiBTdXBwb3J0IGZvciB3cGFfc3VwcGxpY2FudCBiZWZvcmUgV0UtMTgsIGRlcHJlY2F0ZWQuICovCiAKLS8qIGZvbGxvd2luZyBkZWZpbml0aW9ucyBtdXN0IG1hdGNoIGRlZmluaXRpb25zIGluIGRyaXZlcl9pcHcyMTAwLmMgKi8KKy8qIGZvbGxvd2luZyBkZWZpbml0aW9ucyBtdXN0IG1hdGNoIGRlZmluaXRpb25zIGluIGRyaXZlcl9pcHcuYyAqLwogCiAjZGVmaW5lIElQVzIxMDBfSU9DVExfV1BBX1NVUFBMSUNBTlQJCVNJT0NJV0ZJUlNUUFJJViszMAogCkBAIC01Nzk2LDI1ICs1NzY5LDI2IEBACiBzdHJ1Y3QgaXB3MjEwMF9wYXJhbSB7CiAJdTMyIGNtZDsKIAl1OCBzdGFfYWRkcltFVEhfQUxFTl07Ci0gICAgICAgIHVuaW9uIHsKKwl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQl1OCBuYW1lOwogCQkJdTMyIHZhbHVlOwogCQl9IHdwYV9wYXJhbTsKIAkJc3RydWN0IHsKIAkJCXUzMiBsZW47Ci0JCQl1OCAqZGF0YTsKKwkJCXU4IHJlc2VydmVkWzMyXTsKKwkJCXU4IGRhdGFbMF07CiAJCX0gd3BhX2llOwotCSAgICAgICAgc3RydWN0ewotCQkJaW50IGNvbW1hbmQ7Ci0gICAgCQkJaW50IHJlYXNvbl9jb2RlOworCQlzdHJ1Y3QgeworCQkJdTMyIGNvbW1hbmQ7CisJCQl1MzIgcmVhc29uX2NvZGU7CiAJCX0gbWxtZTsKIAkJc3RydWN0IHsKIAkJCXU4IGFsZ1tJUFcyMTAwX0NSWVBUX0FMR19OQU1FX0xFTl07CiAJCQl1OCBzZXRfdHg7CiAJCQl1MzIgZXJyOwogCQkJdTggaWR4OwotCQkJdTggc2VxWzhdOyAvKiBzZXF1ZW5jZSBjb3VudGVyIChzZXQ6IFJYLCBnZXQ6IFRYKSAqLworCQkJdTggc2VxWzhdOwkvKiBzZXF1ZW5jZSBjb3VudGVyIChzZXQ6IFJYLCBnZXQ6IFRYKSAqLwogCQkJdTE2IGtleV9sZW47CiAJCQl1OCBrZXlbMF07CiAJCX0gY3J5cHQ7CkBAIC01ODIyLDM4ICs1Nzk2LDI0IEBACiAJfSB1OwogfTsKIAotLyogZW5kIG9mIGRyaXZlcl9pcHcyMTAwLmMgY29kZSAqLworLyogZW5kIG9mIGRyaXZlcl9pcHcuYyBjb2RlICovCisjZW5kaWYJCQkJLyogV0lSRUxFU1NfRVhUIDwgMTggKi8KIAotc3RhdGljIGludCBpcHcyMTAwX3dwYV9lbmFibGUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IHZhbHVlKXsKLQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKLQkJLmZsYWdzID0gU0VDX0xFVkVMIHwgU0VDX0VOQUJMRUQsCi0JfTsKLQlpbnQgcmV0ID0gMDsKLQotCWllZWUtPndwYV9lbmFibGVkID0gdmFsdWU7Ci0KLQlpZiAodmFsdWUpewotCQlzZWMubGV2ZWwgPSBTRUNfTEVWRUxfMzsKLQkJc2VjLmVuYWJsZWQgPSAxOwotCX0gZWxzZSB7Ci0JCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8wOwotCQlzZWMuZW5hYmxlZCA9IDA7Ci0JfQotCi0JaWYgKGllZWUtPnNldF9zZWN1cml0eSkKLQkJaWVlZS0+c2V0X3NlY3VyaXR5KGllZWUtPmRldiwgJnNlYyk7Ci0JZWxzZQotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQotCXJldHVybiByZXQ7CitzdGF0aWMgaW50IGlwdzIxMDBfd3BhX2VuYWJsZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgdmFsdWUpCit7CisJLyogVGhpcyBpcyBjYWxsZWQgd2hlbiB3cGFfc3VwcGxpY2FudCBsb2FkcyBhbmQgY2xvc2VzIHRoZSBkcml2ZXIKKwkgKiBpbnRlcmZhY2UuICovCisJcHJpdi0+aWVlZS0+d3BhX2VuYWJsZWQgPSB2YWx1ZTsKKwlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBBVVRIX0FMR19PUEVOX1NZU1RFTQkJCTB4MQotI2RlZmluZSBBVVRIX0FMR19TSEFSRURfS0VZCQkJMHgyCisjaWYgV0lSRUxFU1NfRVhUIDwgMTgKKyNkZWZpbmUgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0JCQkweDEKKyNkZWZpbmUgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWQkJCTB4MgorI2VuZGlmCiAKLXN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X2F1dGhfYWxncyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgdmFsdWUpeworc3RhdGljIGludCBpcHcyMTAwX3dwYV9zZXRfYXV0aF9hbGdzKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCB2YWx1ZSkKK3sKIAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKQEAgLTU4NjEsMTMgKzU4MjEsMTQgQEAKIAl9OwogCWludCByZXQgPSAwOwogCi0JaWYgKHZhbHVlICYgQVVUSF9BTEdfU0hBUkVEX0tFWSl7CisJaWYgKHZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgewogCQlzZWMuYXV0aF9tb2RlID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7CiAJCWllZWUtPm9wZW5fd2VwID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAodmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgewogCQlzZWMuYXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CiAJCWllZWUtPm9wZW5fd2VwID0gMTsKLQl9CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGllZWUtPnNldF9zZWN1cml0eSkKIAkJaWVlZS0+c2V0X3NlY3VyaXR5KGllZWUtPmRldiwgJnNlYyk7CkBAIC01ODc3LDcyICs1ODM4LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IG5hbWUsIHUzMiB2YWx1ZSl7Ci0KLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlpbnQgcmV0PTA7Ci0KLQlzd2l0Y2gobmFtZSl7Ci0JCWNhc2UgSVBXMjEwMF9QQVJBTV9XUEFfRU5BQkxFRDoKLQkJCXJldCA9IGlwdzIxMDBfd3BhX2VuYWJsZShwcml2LCB2YWx1ZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIElQVzIxMDBfUEFSQU1fVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0JCQlwcml2LT5pZWVlLT50a2lwX2NvdW50ZXJtZWFzdXJlcz12YWx1ZTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVBXMjEwMF9QQVJBTV9EUk9QX1VORU5DUllQVEVEOgotCQkJcHJpdi0+aWVlZS0+ZHJvcF91bmVuY3J5cHRlZD12YWx1ZTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVBXMjEwMF9QQVJBTV9QUklWQUNZX0lOVk9LRUQ6Ci0JCQlwcml2LT5pZWVlLT5wcml2YWN5X2ludm9rZWQ9dmFsdWU7Ci0JCQlicmVhazsKLQotCQljYXNlIElQVzIxMDBfUEFSQU1fQVVUSF9BTEdTOgotCQkJcmV0ID0gaXB3MjEwMF93cGFfc2V0X2F1dGhfYWxncyhwcml2LCB2YWx1ZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIElQVzIxMDBfUEFSQU1fSUVFRV84MDJfMVg6Ci0JCQlwcml2LT5pZWVlLT5pZWVlODAyXzF4PXZhbHVlOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogVW5rbm93biBXUEEgcGFyYW06ICVkXG4iLAotCQkJCQkgICAgZGV2LT5uYW1lLCBuYW1lKTsKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaXB3MjEwMF93cGFfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY29tbWFuZCwgaW50IHJlYXNvbil7Ci0KLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlpbnQgcmV0PTA7Ci0KLQlzd2l0Y2goY29tbWFuZCl7Ci0JCWNhc2UgSVBXMjEwMF9NTE1FX1NUQV9ERUFVVEg6Ci0JCQkvLyBzaWxlbnRseSBpZ25vcmUKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVBXMjEwMF9NTE1FX1NUQV9ESVNBU1NPQzoKLQkJCWlwdzIxMDBfZGlzYXNzb2NpYXRlX2Jzc2lkKHByaXYpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogVW5rbm93biBNTE1FIHJlcXVlc3Q6ICVkXG4iLAotCQkJCQkgICAgZGV2LT5uYW1lLCBjb21tYW5kKTsKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLQogdm9pZCBpcHcyMTAwX3dwYV9hc3NvY19mcmFtZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJICAgICBjaGFyICp3cGFfaWUsIGludCB3cGFfaWVfbGVuKXsKKwkJCSAgICAgY2hhciAqd3BhX2llLCBpbnQgd3BhX2llX2xlbikKK3sKIAogCXN0cnVjdCBpcHcyMTAwX3dwYV9hc3NvY19mcmFtZSBmcmFtZTsKIApAQCAtNTk1NywyMyArNTg1NSwxMTggQEAKIAlpcHcyMTAwX3NldF93cGFfaWUocHJpdiwgJmZyYW1lLCAwKTsKIH0KIAorI2lmIFdJUkVMRVNTX0VYVCA8IDE4CitzdGF0aWMgaW50IGlwdzIxMDBfd3BhX3NldF9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBuYW1lLCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChuYW1lKSB7CisJY2FzZSBJUFcyMTAwX1BBUkFNX1dQQV9FTkFCTEVEOgorCQlyZXQgPSBpcHcyMTAwX3dwYV9lbmFibGUocHJpdiwgdmFsdWUpOworCQlicmVhazsKKworCWNhc2UgSVBXMjEwMF9QQVJBTV9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJY3J5cHQgPSBwcml2LT5pZWVlLT5jcnlwdFtwcml2LT5pZWVlLT50eF9rZXlpZHhdOworCQlpZiAoIWNyeXB0IHx8ICFjcnlwdC0+b3BzLT5zZXRfZmxhZ3MgfHwgIWNyeXB0LT5vcHMtPmdldF9mbGFncykKKwkJCWJyZWFrOworCisJCWZsYWdzID0gY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKGNyeXB0LT5wcml2KTsKKworCQlpZiAodmFsdWUpCisJCQlmbGFncyB8PSBJRUVFODAyMTFfQ1JZUFRPX1RLSVBfQ09VTlRFUk1FQVNVUkVTOworCQllbHNlCisJCQlmbGFncyAmPSB+SUVFRTgwMjExX0NSWVBUT19US0lQX0NPVU5URVJNRUFTVVJFUzsKKworCQljcnlwdC0+b3BzLT5zZXRfZmxhZ3MoZmxhZ3MsIGNyeXB0LT5wcml2KTsKKworCQlicmVhazsKKworCWNhc2UgSVBXMjEwMF9QQVJBTV9EUk9QX1VORU5DUllQVEVEOnsKKwkJCS8qIFNlZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQgaGFuZGxpbmcgZm9yIGRldGFpbHMgKi8KKwkJCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjID0geworCQkJCS5mbGFncyA9IFNFQ19FTkFCTEVELAorCQkJCS5lbmFibGVkID0gdmFsdWUsCisJCQl9OworCQkJcHJpdi0+aWVlZS0+ZHJvcF91bmVuY3J5cHRlZCA9IHZhbHVlOworCQkJLyogV2Ugb25seSBjaGFuZ2UgU0VDX0xFVkVMIGZvciBvcGVuIG1vZGUuIE90aGVycworCQkJICogYXJlIHNldCBieSBpcHdfd3BhX3NldF9lbmNyeXB0aW9uLgorCQkJICovCisJCQlpZiAoIXZhbHVlKSB7CisJCQkJc2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKKwkJCQlzZWMubGV2ZWwgPSBTRUNfTEVWRUxfMDsKKwkJCX0gZWxzZSB7CisJCQkJc2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKKwkJCQlzZWMubGV2ZWwgPSBTRUNfTEVWRUxfMTsKKwkJCX0KKwkJCWlmIChwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkpCisJCQkJcHJpdi0+aWVlZS0+c2V0X3NlY3VyaXR5KHByaXYtPmllZWUtPmRldiwgJnNlYyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJUFcyMTAwX1BBUkFNX1BSSVZBQ1lfSU5WT0tFRDoKKwkJcHJpdi0+aWVlZS0+cHJpdmFjeV9pbnZva2VkID0gdmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBJUFcyMTAwX1BBUkFNX0FVVEhfQUxHUzoKKwkJcmV0ID0gaXB3MjEwMF93cGFfc2V0X2F1dGhfYWxncyhwcml2LCB2YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBJUFcyMTAwX1BBUkFNX0lFRUVfODAyXzFYOgorCQlwcml2LT5pZWVlLT5pZWVlODAyXzF4ID0gdmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBVbmtub3duIFdQQSBwYXJhbTogJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG5hbWUpOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwdzIxMDBfd3BhX21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvbW1hbmQsIGludCByZWFzb24pCit7CisKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgSVBXMjEwMF9NTE1FX1NUQV9ERUFVVEg6CisJCS8vIHNpbGVudGx5IGlnbm9yZQorCQlicmVhazsKKworCWNhc2UgSVBXMjEwMF9NTE1FX1NUQV9ESVNBU1NPQzoKKwkJaXB3MjEwMF9kaXNhc3NvY2lhdGVfYnNzaWQocHJpdik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBVbmtub3duIE1MTUUgcmVxdWVzdDogJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGNvbW1hbmQpOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfd3BhX3NldF93cGFfaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXB3MjEwMF9wYXJhbSAqcGFyYW0sIGludCBwbGVuKXsKKwkJCQkgIHN0cnVjdCBpcHcyMTAwX3BhcmFtICpwYXJhbSwgaW50IHBsZW4pCit7CiAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CiAJdTggKmJ1ZjsKIAotCWlmICghIGllZWUtPndwYV9lbmFibGVkKQotCSAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKCFpZWVlLT53cGFfZW5hYmxlZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKHBhcmFtLT51LndwYV9pZS5sZW4gPiBNQVhfV1BBX0lFX0xFTiB8fAotCSAgIChwYXJhbS0+dS53cGFfaWUubGVuICYmCi0JCXBhcmFtLT51LndwYV9pZS5kYXRhPT1OVUxMKSkKKwkgICAgKHBhcmFtLT51LndwYV9pZS5sZW4gJiYgcGFyYW0tPnUud3BhX2llLmRhdGEgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHBhcmFtLT51LndwYV9pZS5sZW4peworCWlmIChwYXJhbS0+dS53cGFfaWUubGVuKSB7CiAJCWJ1ZiA9IGttYWxsb2MocGFyYW0tPnUud3BhX2llLmxlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChidWYgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNTk5OCw4ICs1OTkxLDkgQEAKIC8qIGltcGxlbWVudGF0aW9uIGJvcnJvd2VkIGZyb20gaG9zdGFwIGRyaXZlciAqLwogCiBzdGF0aWMgaW50IGlwdzIxMDBfd3BhX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGlwdzIxMDBfcGFyYW0gKnBhcmFtLCBpbnQgcGFyYW1fbGVuKXsKLQorCQkJCSAgICAgIHN0cnVjdCBpcHcyMTAwX3BhcmFtICpwYXJhbSwKKwkJCQkgICAgICBpbnQgcGFyYW1fbGVuKQorewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKQEAgLTYwMTQsOSArNjAwOCwxMCBAQAogCXBhcmFtLT51LmNyeXB0LmFsZ1tJUFcyMTAwX0NSWVBUX0FMR19OQU1FX0xFTiAtIDFdID0gJ1wwJzsKIAogCWlmIChwYXJhbV9sZW4gIT0KLQkgICAgKGludCkgKChjaGFyICopIHBhcmFtLT51LmNyeXB0LmtleSAtIChjaGFyICopIHBhcmFtKSArCi0JICAgIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pewotCQlJUFdfREVCVUdfSU5GTygiTGVuIG1pc21hdGNoICVkLCAlZFxuIiwgcGFyYW1fbGVuLCBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuKTsKKwkgICAgKGludCkoKGNoYXIgKilwYXJhbS0+dS5jcnlwdC5rZXkgLSAoY2hhciAqKXBhcmFtKSArCisJICAgIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pIHsKKwkJSVBXX0RFQlVHX0lORk8oIkxlbiBtaXNtYXRjaCAlZCwgJWRcbiIsIHBhcmFtX2xlbiwKKwkJCSAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChwYXJhbS0+c3RhX2FkZHJbMF0gPT0gMHhmZiAmJiBwYXJhbS0+c3RhX2FkZHJbMV0gPT0gMHhmZiAmJgpAQCAtNjAyOSwxNyArNjAyNCwxOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzZWMuZmxhZ3MgfD0gU0VDX0VOQUJMRUQgfCBTRUNfRU5DUllQVDsKIAlpZiAoc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIm5vbmUiKSA9PSAwKSB7Ci0JCWlmIChjcnlwdCl7CisJCWlmIChjcnlwdCkgewogCQkJc2VjLmVuYWJsZWQgPSAwOworCQkJc2VjLmVuY3J5cHQgPSAwOwogCQkJc2VjLmxldmVsID0gU0VDX0xFVkVMXzA7Ci0JCQlzZWMuZmxhZ3MgfD0gU0VDX0VOQUJMRUQgfCBTRUNfTEVWRUw7CisJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOwogCQkJaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KGllZWUsIGNyeXB0KTsKIAkJfQogCQlnb3RvIGRvbmU7CiAJfQogCXNlYy5lbmFibGVkID0gMTsKLQlzZWMuZmxhZ3MgfD0gU0VDX0VOQUJMRUQ7CisJc2VjLmVuY3J5cHQgPSAxOwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7CkBAIC02MDU0LDcgKzYwNTEsNyBAQAogCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKKwkJCSAgICAgICBkZXYtPm5hbWUsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElQVzIxMDBfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CkBAIC02MDY1LDIxICs2MDYyLDIwIEBACiAKIAkJaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KGllZWUsIGNyeXB0KTsKIAotCQluZXdfY3J5cHQgPSAoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICopCi0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwkJbmV3X2NyeXB0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChuZXdfY3J5cHQgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwogCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLQkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CisJCQluZXdfY3J5cHQtPnByaXYgPQorCQkJICAgIG5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKIAkJaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAJCQlrZnJlZShuZXdfY3J5cHQpOwogCQkJcGFyYW0tPnUuY3J5cHQuZXJyID0KLQkJCQlJUFcyMTAwX0NSWVBUX0VSUl9DUllQVF9JTklUX0ZBSUxFRDsKKwkJCSAgICBJUFcyMTAwX0NSWVBUX0VSUl9DUllQVF9JTklUX0ZBSUxFRDsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7CiAJCX0KQEAgLTYwOTEsMjQgKzYwODcsMjUgQEAKIAkgICAgKCpjcnlwdCktPm9wcy0+c2V0X2tleShwYXJhbS0+dS5jcnlwdC5rZXksCiAJCQkJICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbiwgcGFyYW0tPnUuY3J5cHQuc2VxLAogCQkJCSAgICgqY3J5cHQpLT5wcml2KSA8IDApIHsKLQkJSVBXX0RFQlVHX0lORk8oIiVzOiBrZXkgc2V0dGluZyBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlJUFdfREVCVUdfSU5GTygiJXM6IGtleSBzZXR0aW5nIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSVBXMjEwMF9DUllQVF9FUlJfS0VZX1NFVF9GQUlMRUQ7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAocGFyYW0tPnUuY3J5cHQuc2V0X3R4KXsKKwlpZiAocGFyYW0tPnUuY3J5cHQuc2V0X3R4KSB7CiAJCWllZWUtPnR4X2tleWlkeCA9IHBhcmFtLT51LmNyeXB0LmlkeDsKIAkJc2VjLmFjdGl2ZV9rZXkgPSBwYXJhbS0+dS5jcnlwdC5pZHg7CiAJCXNlYy5mbGFncyB8PSBTRUNfQUNUSVZFX0tFWTsKIAl9CiAKLQlpZiAob3BzLT5uYW1lICE9IE5VTEwpeworCWlmIChvcHMtPm5hbWUgIT0gTlVMTCkgewogCiAJCWlmIChzdHJjbXAob3BzLT5uYW1lLCAiV0VQIikgPT0gMCkgewotCQkJbWVtY3B5KHNlYy5rZXlzW3BhcmFtLT51LmNyeXB0LmlkeF0sIHBhcmFtLT51LmNyeXB0LmtleSwgcGFyYW0tPnUuY3J5cHQua2V5X2xlbik7Ci0JCQlzZWMua2V5X3NpemVzW3BhcmFtLT51LmNyeXB0LmlkeF0gPSBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuOworCQkJbWVtY3B5KHNlYy5rZXlzW3BhcmFtLT51LmNyeXB0LmlkeF0sCisJCQkgICAgICAgcGFyYW0tPnUuY3J5cHQua2V5LCBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuKTsKKwkJCXNlYy5rZXlfc2l6ZXNbcGFyYW0tPnUuY3J5cHQuaWR4XSA9CisJCQkgICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbjsKIAkJCXNlYy5mbGFncyB8PSAoMSA8PCBwYXJhbS0+dS5jcnlwdC5pZHgpOwogCQkJc2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKIAkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8xOwpAQCAtNjEyMCw3ICs2MTE3LDcgQEAKIAkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8zOwogCQl9CiAJfQotIGRvbmU6CisgICAgICBkb25lOgogCWlmIChpZWVlLT5zZXRfc2VjdXJpdHkpCiAJCWllZWUtPnNldF9zZWN1cml0eShpZWVlLT5kZXYsICZzZWMpOwogCkBAIC02MTMxLDggKzYxMjgsNyBAQAogCSAqIHRoZSBjYWxsYmFja3Mgc3RydWN0dXJlcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDgwMi4xMSBzdGFjay4gKi8KIAlpZiAoaWVlZS0+cmVzZXRfb25fa2V5Y2hhbmdlICYmCiAJICAgIGllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSAmJgotCSAgICBpZWVlLT5yZXNldF9wb3J0ICYmCi0JICAgIGllZWUtPnJlc2V0X3BvcnQoZGV2KSkgeworCSAgICBpZWVlLT5yZXNldF9wb3J0ICYmIGllZWUtPnJlc2V0X3BvcnQoZGV2KSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IHJlc2V0X3BvcnQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJUFcyMTAwX0NSWVBUX0VSUl9DQVJEX0NPTkZfRkFJTEVEOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYxNDEsMTEgKzYxMzcsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc3VwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcG9pbnQgKnApeworc3RhdGljIGludCBpcHcyMTAwX3dwYV9zdXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19wb2ludCAqcCkKK3sKIAogCXN0cnVjdCBpcHcyMTAwX3BhcmFtICpwYXJhbTsKLQlpbnQgcmV0PTA7CisJaW50IHJldCA9IDA7CiAKIAlJUFdfREVCVUdfSU9DVEwoIndwYV9zdXBwbGljYW50OiBsZW49JWRcbiIsIHAtPmxlbmd0aCk7CiAKQEAgLTYxNTYsMTIgKzYxNTIsMTIgQEAKIAlpZiAocGFyYW0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIocGFyYW0sIHAtPnBvaW50ZXIsIHAtPmxlbmd0aCkpeworCWlmIChjb3B5X2Zyb21fdXNlcihwYXJhbSwgcC0+cG9pbnRlciwgcC0+bGVuZ3RoKSkgewogCQlrZnJlZShwYXJhbSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXN3aXRjaCAocGFyYW0tPmNtZCl7CisJc3dpdGNoIChwYXJhbS0+Y21kKSB7CiAKIAljYXNlIElQVzIxMDBfQ01EX1NFVF9XUEFfUEFSQU06CiAJCXJldCA9IGlwdzIxMDBfd3BhX3NldF9wYXJhbShkZXYsIHBhcmFtLT51LndwYV9wYXJhbS5uYW1lLApAQCAtNjE4Miw4ICs2MTc4LDkgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IFVua25vd24gV1BBIHN1cHBsaWNhbnQgcmVxdWVzdDogJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCBwYXJhbS0+Y21kKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogVW5rbm93biBXUEEgc3VwcGxpY2FudCByZXF1ZXN0OiAlZFxuIiwgZGV2LT5uYW1lLAorCQkgICAgICAgcGFyYW0tPmNtZCk7CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCiAJfQpAQCAtNjE5NCwyNyArNjE5MSwyMyBAQAogCWtmcmVlKHBhcmFtKTsKIAlyZXR1cm4gcmV0OwogfQotI2VuZGlmIC8qIENPTkZJR19JRUVFODAyMTFfV1BBICovCiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfV1BBCi0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopIHJxOwotCWludCByZXQ9LTE7Ci0Jc3dpdGNoIChjbWQpewotCSAgICBjYXNlIElQVzIxMDBfSU9DVExfV1BBX1NVUFBMSUNBTlQ6CisJc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcnE7CisJaW50IHJldCA9IC0xOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJUFcyMTAwX0lPQ1RMX1dQQV9TVVBQTElDQU5UOgogCQlyZXQgPSBpcHcyMTAwX3dwYV9zdXBwbGljYW50KGRldiwgJndycS0+dS5kYXRhKTsKIAkJcmV0dXJuIHJldDsKIAotCSAgICBkZWZhdWx0OgorCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLSNlbmRpZiAvKiBDT05GSUdfSUVFRTgwMjExX1dQQSAqLwotCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQotCisjZW5kaWYJCQkJLyogV0lSRUxFU1NfRVhUIDwgMTggKi8KIAogc3RhdGljIHZvaWQgaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKQEAgLTYyMzYsMTQgKzYyMjksMTMgQEAKIAogc3RhdGljIHUzMiBpcHcyMTAwX2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICByZXR1cm4gKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSA/IDEgOiAwOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXJldHVybiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpID8gMSA6IDA7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpcHcyMTAwX2V0aHRvb2xfb3BzID0gewotICAgIC5nZXRfbGluayAgICAgICAgPSBpcHcyMTAwX2V0aHRvb2xfZ2V0X2xpbmssCi0gICAgLmdldF9kcnZpbmZvICAgICA9IGlwd19ldGh0b29sX2dldF9kcnZpbmZvLAorCS5nZXRfbGluayA9IGlwdzIxMDBfZXRodG9vbF9nZXRfbGluaywKKwkuZ2V0X2RydmluZm8gPSBpcHdfZXRodG9vbF9nZXRfZHJ2aW5mbywKIH07CiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfaGFuZ19jaGVjayh2b2lkICphZGFwdGVyKQpAQCAtNjI4OCw3ICs2MjgwLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwogfQogCi0KIHN0YXRpYyB2b2lkIGlwdzIxMDBfcmZfa2lsbCh2b2lkICphZGFwdGVyKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBhZGFwdGVyOwpAQCAtNjMxMyw3ICs2MzA0LDcgQEAKIAkJSVBXX0RFQlVHX1JGX0tJTEwoIkhXIFJGIEtpbGwgZGVhY3RpdmF0ZWQuICBTVyBSRiBLaWxsIHN0aWxsICIKIAkJCQkgICJlbmFibGVkXG4iKTsKIAotIGV4aXRfdW5sb2NrOgorICAgICAgZXhpdF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNjMyMSwxMSArNjMxMiwxMCBAQAogCiAvKiBMb29rIGludG8gdXNpbmcgbmV0ZGV2IGRlc3RydWN0b3IgdG8gc2h1dGRvd24gaWVlZTgwMjExPyAqLwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwdzIxMDBfYWxsb2NfZGV2aWNlKAotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyLAotCXVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0LAotCXVuc2lnbmVkIGxvbmcgbWVtX2xlbikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXB3MjEwMF9hbGxvY19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkJCSAgICAgICB2b2lkIF9faW9tZW0gKiBiYXNlX2FkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1lbV9zdGFydCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtX2xlbikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02MzQxLDE3ICs2MzMxLDIyIEBACiAJcHJpdi0+aWVlZS0+aGFyZF9zdGFydF94bWl0ID0gaXB3MjEwMF90eDsKIAlwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkgPSBzaGltX19zZXRfc2VjdXJpdHk7CiAKKwlwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgPSAtMjA7CisJcHJpdi0+aWVlZS0+d29yc3RfcnNzaSA9IC04NTsKKwogCWRldi0+b3BlbiA9IGlwdzIxMDBfb3BlbjsKIAlkZXYtPnN0b3AgPSBpcHcyMTAwX2Nsb3NlOwogCWRldi0+aW5pdCA9IGlwdzIxMDBfbmV0X2luaXQ7CisjaWYgV0lSRUxFU1NfRVhUIDwgMTgKIAlkZXYtPmRvX2lvY3RsID0gaXB3MjEwMF9pb2N0bDsKKyNlbmRpZgogCWRldi0+Z2V0X3N0YXRzID0gaXB3MjEwMF9zdGF0czsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmlwdzIxMDBfZXRodG9vbF9vcHM7CiAJZGV2LT50eF90aW1lb3V0ID0gaXB3MjEwMF90eF90aW1lb3V0OwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaXB3MjEwMF93eF9oYW5kbGVyX2RlZjsKIAlkZXYtPmdldF93aXJlbGVzc19zdGF0cyA9IGlwdzIxMDBfd3hfd2lyZWxlc3Nfc3RhdHM7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpcHcyMTAwX3NldF9hZGRyZXNzOwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAzKkhaOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAzICogSFo7CiAJZGV2LT5pcnEgPSAwOwogCiAJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHI7CkBAIC02MzY0LDIyICs2MzU5LDE5IEBACiAJICogZW5kcyB1cCBjYXVzaW5nIHByb2JsZW1zLiAgU28sIHdlIGp1c3QgaGFuZGxlCiAJICogdGhlIFdYIGV4dGVuc2lvbnMgdGhyb3VnaCB0aGUgaXB3MjEwMF9pb2N0bCBpbnRlcmZhY2UgKi8KIAotCiAJLyogbWVtc2V0KCkgcHV0cyBldmVyeXRoaW5nIHRvIDAsIHNvIHdlIG9ubHkgaGF2ZSBleHBsaWNpdGVseSBzZXQKIAkgKiB0aG9zZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHNvbWV0aGluZyBlbHNlICovCiAKIAkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBVVRPIG1vZGUgKi8KIAlwcml2LT5wb3dlcl9tb2RlID0gSVBXX1BPV0VSX0FVVE87CiAKLQotCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9XUEEKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCisJcHJpdi0+Y29uZmlnIHw9IENGR19DUkNfQ0hFQ0s7CisjZW5kaWYKIAlwcml2LT5pZWVlLT53cGFfZW5hYmxlZCA9IDA7Ci0JcHJpdi0+aWVlZS0+dGtpcF9jb3VudGVybWVhc3VyZXMgPSAwOwogCXByaXYtPmllZWUtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOwogCXByaXYtPmllZWUtPnByaXZhY3lfaW52b2tlZCA9IDA7CiAJcHJpdi0+aWVlZS0+aWVlZTgwMl8xeCA9IDE7Ci0jZW5kaWYgLyogQ09ORklHX0lFRUU4MDIxMV9XUEEgKi8KIAogCS8qIFNldCBtb2R1bGUgcGFyYW1ldGVycyAqLwogCXN3aXRjaCAobW9kZSkgewpAQCAtNjQwMSw4ICs2MzkzLDcgQEAKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19SRl9LSUxMX1NXOwogCiAJaWYgKGNoYW5uZWwgIT0gMCAmJgotCSAgICAoKGNoYW5uZWwgPj0gUkVHX01JTl9DSEFOTkVMKSAmJgotCSAgICAgKGNoYW5uZWwgPD0gUkVHX01BWF9DSEFOTkVMKSkpIHsKKwkgICAgKChjaGFubmVsID49IFJFR19NSU5fQ0hBTk5FTCkgJiYgKGNoYW5uZWwgPD0gUkVHX01BWF9DSEFOTkVMKSkpIHsKIAkJcHJpdi0+Y29uZmlnIHw9IENGR19TVEFUSUNfQ0hBTk5FTDsKIAkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7CiAJfQpAQCAtNjQ0MSwxMiArNjQzMiw4IEBACiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZ3X3BlbmRfbGlzdCk7CiAJSU5JVF9TVEFUKCZwcml2LT5md19wZW5kX3N0YXQpOwogCi0KLSNpZmRlZiBDT05GSUdfU09GVFdBUkVfU1VTUEVORDIKLQlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FLCAwKTsKLSNlbHNlCiAJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSk7Ci0jZW5kaWYKKwogCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd29yaywKIAkJICAodm9pZCAoKikodm9pZCAqKSlpcHcyMTAwX3Jlc2V0X2FkYXB0ZXIsIHByaXYpOwogCUlOSVRfV09SSygmcHJpdi0+c2VjdXJpdHlfd29yaywKQEAgLTY1MzUsNyArNjUyMiw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0gICAgICAgIC8qIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKKwkvKiBXZSBkaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCiAJICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZSAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LCAweDQwLCAmdmFsKTsKIAlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCkBAIC02NTY2LDEyICs2NTUzLDEwIEBACiAJaXB3MjEwMF9xdWV1ZXNfaW5pdGlhbGl6ZShwcml2KTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBjaV9kZXYtPmlycSwKLQkJCSAgaXB3MjEwMF9pbnRlcnJ1cHQsIFNBX1NISVJRLAotCQkJICBkZXYtPm5hbWUsIHByaXYpOworCQkJICBpcHcyMTAwX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgcHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCSAgICAgICAiRXJyb3IgY2FsbGluZyByZXF1ZXN0X2lycTogJWQuXG4iLAotCQkgICAgICAgcGNpX2Rldi0+aXJxKTsKKwkJICAgICAgICJFcnJvciBjYWxsaW5nIHJlcXVlc3RfaXJxOiAlZC5cbiIsIHBjaV9kZXYtPmlycSk7CiAJCWdvdG8gZmFpbDsKIAl9CiAJZGV2LT5pcnEgPSBwY2lfZGV2LT5pcnE7CkBAIC02NjA2LDcgKzY1OTEsNiBAQAogCiAJLyogcGVyZm9ybSB0aGlzIGFmdGVyIHJlZ2lzdGVyX25ldGRldiBzbyB0aGF0IGRldi0+bmFtZSBpcyBzZXQgKi8KIAlzeXNmc19jcmVhdGVfZ3JvdXAoJnBjaV9kZXYtPmRldi5rb2JqLCAmaXB3MjEwMF9hdHRyaWJ1dGVfZ3JvdXApOwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKIAkvKiBJZiB0aGUgUkYgS2lsbCBzd2l0Y2ggaXMgZGlzYWJsZWQsIGdvIGFoZWFkIGFuZCBjb21wbGV0ZSB0aGUKIAkgKiBzdGFydHVwIHNlcXVlbmNlICovCkBAIC02NjM0LDEwICs2NjE4LDEwIEBACiAKIAlyZXR1cm4gMDsKIAotIGZhaWxfdW5sb2NrOgorICAgICAgZmFpbF91bmxvY2s6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCi0gZmFpbDoKKyAgICAgIGZhaWw6CiAJaWYgKGRldikgewogCQlpZiAocmVnaXN0ZXJlZCkKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC02NjUzLDcgKzY2MzcsOCBAQAogCiAJCS8qIFRoZXNlIGFyZSBzYWZlIHRvIGNhbGwgZXZlbiBpZiB0aGV5IHdlcmVuJ3QgYWxsb2NhdGVkICovCiAJCWlwdzIxMDBfcXVldWVzX2ZyZWUocHJpdik7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGNpX2Rldi0+ZGV2LmtvYmosICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGNpX2Rldi0+ZGV2LmtvYmosCisJCQkJICAgJmlwdzIxMDBfYXR0cmlidXRlX2dyb3VwKTsKIAogCQlmcmVlX2llZWU4MDIxMShkZXYpOwogCQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CkBAIC02Njc5LDcgKzY2NjQsOCBAQAogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19JTklUSUFMSVpFRDsKIAogCQlkZXYgPSBwcml2LT5uZXRfZGV2OwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBjaV9kZXYtPmRldi5rb2JqLCAmaXB3MjEwMF9hdHRyaWJ1dGVfZ3JvdXApOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBjaV9kZXYtPmRldi5rb2JqLAorCQkJCSAgICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7CiAKICNpZmRlZiBDT05GSUdfUE0KIAkJaWYgKGlwdzIxMDBfZmlybXdhcmUudmVyc2lvbikKQEAgLTY3MjEsMTkgKzY3MDcsMTMgQEAKIAlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CiB9CiAKLQogI2lmZGVmIENPTkZJR19QTQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkKLXN0YXRpYyBpbnQgaXB3MjEwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB1MzIgc3RhdGUpCi0jZWxzZQogc3RhdGljIGludCBpcHcyMTAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLSNlbmRpZgogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAKLQlJUFdfREVCVUdfSU5GTygiJXM6IEdvaW5nIGludG8gc3VzcGVuZC4uLlxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKKwlJUFdfREVCVUdfSU5GTygiJXM6IEdvaW5nIGludG8gc3VzcGVuZC4uLlxuIiwgZGV2LT5uYW1lKTsKIAogCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVElBTElaRUQpIHsKQEAgLTY3NDUsNyArNjcyNSw3IEBACiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlIChwY2lfZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOwogCiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwpAQCAtNjc2NCw4ICs2NzQ0LDcgQEAKIAogCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOwogCi0JSVBXX0RFQlVHX0lORk8oIiVzOiBDb21pbmcgb3V0IG9mIHN1c3BlbmQuLi5cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7CisJSVBXX0RFQlVHX0lORk8oIiVzOiBDb21pbmcgb3V0IG9mIHN1c3BlbmQuLi5cbiIsIGRldi0+bmFtZSk7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CiAJcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7CkBAIC02Nzg1LDkgKzY3NjQsOSBAQAogCSAqIHRoZSBxdWV1ZSBvZiBuZWVkZWQgKi8KIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAKLSAgICAgICAgLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCi0gICAgICAgIGlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSkKLSAgICAgICAgICAgICAgICBpcHcyMTAwX3VwKHByaXYsIDApOworCS8qIEJyaW5nIHRoZSBkZXZpY2UgYmFjayB1cCAqLworCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSkKKwkJaXB3MjEwMF91cChwcml2LCAwKTsKIAogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIApAQCAtNjc5NSw1NiArNjc3NCw1NSBAQAogfQogI2VuZGlmCiAKLQogI2RlZmluZSBJUFcyMTAwX0RFVl9JRCh4KSB7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCB4IH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlwdzIxMDBfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKLQlJUFcyMTAwX0RFVl9JRCgweDI1MjApLCAvKiBJTiAyMTAwQSBtUENJIDNBICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTIxKSwgLyogSU4gMjEwMEEgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyNCksIC8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjUpLCAvKiBJTiAyMTAwQSBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTI2KSwgLyogSU4gMjEwMEEgbVBDSSBHZW4gQTMgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjIpLCAvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjMpLCAvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjcpLCAvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjgpLCAvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjkpLCAvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MkIpLCAvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MkMpLCAvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MkQpLCAvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjApLAkvKiBJTiAyMTAwQSBtUENJIDNBICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTIxKSwJLyogSU4gMjEwMEEgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyNCksCS8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjUpLAkvKiBJTiAyMTAwQSBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTI2KSwJLyogSU4gMjEwMEEgbVBDSSBHZW4gQTMgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjIpLAkvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjMpLAkvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjcpLAkvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjgpLAkvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjkpLAkvKiBJTiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MkIpLAkvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MkMpLAkvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MkQpLAkvKiBJTiAyMTAwIG1QQ0kgM0EgKi8KIAotCUlQVzIxMDBfREVWX0lEKDB4MjU1MCksIC8qIElCIDIxMDBBIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NTEpLCAvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NTMpLCAvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NTQpLCAvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NTUpLCAvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NTApLAkvKiBJQiAyMTAwQSBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTUxKSwJLyogSUIgMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTUzKSwJLyogSUIgMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTU0KSwJLyogSUIgMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTU1KSwJLyogSUIgMjEwMCBtUENJIDNCICovCiAKLQlJUFcyMTAwX0RFVl9JRCgweDI1NjApLCAvKiBERSAyMTAwQSBtUENJIDNBICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTYyKSwgLyogREUgMjEwMEEgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU2MyksIC8qIERFIDIxMDBBIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NjEpLCAvKiBERSAyMTAwIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NjUpLCAvKiBERSAyMTAwIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NjYpLCAvKiBERSAyMTAwIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NjcpLCAvKiBERSAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NjApLAkvKiBERSAyMTAwQSBtUENJIDNBICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTYyKSwJLyogREUgMjEwMEEgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU2MyksCS8qIERFIDIxMDBBIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NjEpLAkvKiBERSAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NjUpLAkvKiBERSAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NjYpLAkvKiBERSAyMTAwIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NjcpLAkvKiBERSAyMTAwIG1QQ0kgM0EgKi8KIAotCUlQVzIxMDBfREVWX0lEKDB4MjU3MCksIC8qIEdBIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU3MCksCS8qIEdBIDIxMDAgbVBDSSAzQiAqLwogCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTgwKSwgLyogVE8gMjEwMEEgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU4MiksIC8qIFRPIDIxMDBBIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1ODMpLCAvKiBUTyAyMTAwQSBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTgxKSwgLyogVE8gMjEwMCBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTg1KSwgLyogVE8gMjEwMCBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTg2KSwgLyogVE8gMjEwMCBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTg3KSwgLyogVE8gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTgwKSwJLyogVE8gMjEwMEEgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU4MiksCS8qIFRPIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1ODMpLAkvKiBUTyAyMTAwQSBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTgxKSwJLyogVE8gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTg1KSwJLyogVE8gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTg2KSwJLyogVE8gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTg3KSwJLyogVE8gMjEwMCBtUENJIDNCICovCiAKLQlJUFcyMTAwX0RFVl9JRCgweDI1OTApLCAvKiBTTyAyMTAwQSBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTkyKSwgLyogU08gMjEwMEEgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU5MSksIC8qIFNPIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU5MyksIC8qIFNPIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU5NiksIC8qIFNPIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU5OCksIC8qIFNPIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU5MCksCS8qIFNPIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1OTIpLAkvKiBTTyAyMTAwQSBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTkxKSwJLyogU08gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTkzKSwJLyogU08gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTk2KSwJLyogU08gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTk4KSwJLyogU08gMjEwMCBtUENJIDNCICovCiAKLQlJUFcyMTAwX0RFVl9JRCgweDI1QTApLCAvKiBIUCAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1QTApLAkvKiBIUCAyMTAwIG1QQ0kgM0IgKi8KIAl7MCx9LAogfTsKIApAQCAtNjg2MSw3ICs2ODM5LDYgQEAKICNlbmRpZgogfTsKIAotCiAvKioKICAqIEluaXRpYWxpemUgdGhlIGlwdzIxMDAgZHJpdmVyL21vZHVsZQogICoKQEAgLTY4NzgsMTAgKzY4NTUsNiBAQAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXMsICVzXG4iLCBEUlZfREVTQ1JJUFRJT04sIERSVl9WRVJTSU9OKTsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzXG4iLCBEUlZfQ09QWVJJR0hUKTsKIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfTk9XRVAKLQlJUFdfREVCVUdfSU5GTyhEUlZfTkFNRSAiOiBDb21waWxlZCB3aXRoIFdFUCBkaXNhYmxlZC5cbiIpOwotI2VuZGlmCi0KIAlyZXQgPSBwY2lfbW9kdWxlX2luaXQoJmlwdzIxMDBfcGNpX2RyaXZlcik7CiAKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCkBAIC02ODkzLDcgKzY4NjYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogLyoqCiAgKiBDbGVhbnVwIGlwdzIxMDAgZHJpdmVyIHJlZ2lzdHJhdGlvbgogICovCkBAIC02OTQ5LDcgKzY5MjEsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCkBAIC02OTY5LDggKzY5NDAsNyBAQAogCiAJLyogaWYgc2V0dGluZyBieSBmcmVxIGNvbnZlcnQgdG8gY2hhbm5lbCAqLwogCWlmIChmd3JxLT5lID09IDEpIHsKLQkJaWYgKChmd3JxLT5tID49IChpbnQpIDIuNDEyZTggJiYKLQkJICAgICBmd3JxLT5tIDw9IChpbnQpIDIuNDg3ZTgpKSB7CisJCWlmICgoZndycS0+bSA+PSAoaW50KTIuNDEyZTggJiYgZndycS0+bSA8PSAoaW50KTIuNDg3ZTgpKSB7CiAJCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7CiAJCQlpbnQgYyA9IDA7CiAKQEAgLTY5ODQsMTkgKzY5NTQsMTkgQEAKIAkJfQogCX0KIAotCWlmIChmd3JxLT5lID4gMCB8fCBmd3JxLT5tID4gMTAwMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWVsc2UgeyAvKiBTZXQgdGhlIGNoYW5uZWwgKi8KKwlpZiAoZndycS0+ZSA+IDAgfHwgZndycS0+bSA+IDEwMDApIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgewkJLyogU2V0IHRoZSBjaGFubmVsICovCiAJCUlQV19ERUJVR19XWCgiU0VUIEZyZXEvQ2hhbm5lbCAtPiAlZCBcbiIsIGZ3cnEtPm0pOwogCQllcnIgPSBpcHcyMTAwX3NldF9jaGFubmVsKHByaXYsIGZ3cnEtPm0sIDApOwogCX0KIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCkBAIC03MDQ1LDcgKzcwMTUsNyBAQAogCWNhc2UgSVdfTU9ERV9NT05JVE9SOgogCQllcnIgPSBpcHcyMTAwX3N3aXRjaF9tb2RlKHByaXYsIElXX01PREVfTU9OSVRPUik7CiAJCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiAJY2FzZSBJV19NT0RFX0FESE9DOgogCQllcnIgPSBpcHcyMTAwX3N3aXRjaF9tb2RlKHByaXYsIElXX01PREVfQURIT0MpOwogCQlicmVhazsKQEAgLTcwNTYsOSArNzAyNiw5IEBACiAJCWJyZWFrOwogCX0KIAotZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwotIAlyZXR1cm4gZXJyOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzA3Nyw3ICs3MDQ3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiAjZGVmaW5lIFBPV0VSX01PREVTIDUKIAogLyogVmFsdWVzIGFyZSBpbiBtaWNyb3NlY29uZCAqLwpAQCAtNzEyNCwxOSArNzA5MywxOSBAQAogCS8qIH41IE1iL3MgcmVhbCAoODAyLjExYikgKi8KIAlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsKIAotLy8JcmFuZ2UtPnNlbnNpdGl2aXR5OwkvKiBzaWduYWwgbGV2ZWwgdGhyZXNob2xkIHJhbmdlICovCisvLyAgICAgIHJhbmdlLT5zZW5zaXRpdml0eTsgICAgIC8qIHNpZ25hbCBsZXZlbCB0aHJlc2hvbGQgcmFuZ2UgKi8KIAogCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwogCS8qIFRPRE86IEZpbmQgcmVhbCBtYXggUlNTSSBhbmQgc3RpY2sgaGVyZSAqLwogCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7CiAJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKLQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IDc7IC8qIFVwZGF0ZWQgYWxsIHRocmVlICovCisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSA3OwkvKiBVcGRhdGVkIGFsbCB0aHJlZSAqLwogCi0JcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA3MDsgLyogPiA4JSBtaXNzZWQgYmVhY29ucyBpcyAnYmFkJyAqLworCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNzA7CS8qID4gOCUgbWlzc2VkIGJlYWNvbnMgaXMgJ2JhZCcgKi8KIAkvKiBUT0RPOiBGaW5kIHJlYWwgJ2dvb2QnIHRvICdiYWQnIHRocmVzaG9sIHZhbHVlIGZvciBSU1NJICovCiAJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMjAgKyBJUFcyMTAwX1JTU0lfVE9fREJNOwogCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7Ci0JcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSA3OyAvKiBVcGRhdGVkIGFsbCB0aHJlZSAqLworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gNzsJLyogVXBkYXRlZCBhbGwgdGhyZWUgKi8KIAogCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBSQVRFX0NPVU5UOwogCkBAIC03MTUwLDYxICs3MTE5LDYyIEBACiAJcmFuZ2UtPm1heF9mcmFnID0gTUFYX0ZSQUdfVEhSRVNIT0xEOwogCiAJcmFuZ2UtPm1pbl9wbXAgPSBwZXJpb2RfZHVyYXRpb25bMF07CS8qIE1pbmltYWwgUE0gcGVyaW9kICovCi0JcmFuZ2UtPm1heF9wbXAgPSBwZXJpb2RfZHVyYXRpb25bUE9XRVJfTU9ERVMtMV07LyogTWF4aW1hbCBQTSBwZXJpb2QgKi8KLQlyYW5nZS0+bWluX3BtdCA9IHRpbWVvdXRfZHVyYXRpb25bUE9XRVJfTU9ERVMtMV07CS8qIE1pbmltYWwgUE0gdGltZW91dCAqLwotCXJhbmdlLT5tYXhfcG10ID0gdGltZW91dF9kdXJhdGlvblswXTsvKiBNYXhpbWFsIFBNIHRpbWVvdXQgKi8KKwlyYW5nZS0+bWF4X3BtcCA9IHBlcmlvZF9kdXJhdGlvbltQT1dFUl9NT0RFUyAtIDFdOwkvKiBNYXhpbWFsIFBNIHBlcmlvZCAqLworCXJhbmdlLT5taW5fcG10ID0gdGltZW91dF9kdXJhdGlvbltQT1dFUl9NT0RFUyAtIDFdOwkvKiBNaW5pbWFsIFBNIHRpbWVvdXQgKi8KKwlyYW5nZS0+bWF4X3BtdCA9IHRpbWVvdXRfZHVyYXRpb25bMF07CS8qIE1heGltYWwgUE0gdGltZW91dCAqLwogCi0gICAgICAgIC8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiBQTSBwZXJpb2QgKi8KKwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gUE0gcGVyaW9kICovCiAJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKLSAgICAgICAgLyogSG93IHRvIGRlY29kZSBtYXgvbWluIFBNIHBlcmlvZCAqLworCS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiBQTSBwZXJpb2QgKi8KIAlyYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKIAkvKiBXaGF0IFBNIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCAqLwogCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfVElNRU9VVCB8IElXX1BPV0VSX1BFUklPRDsKIAogCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOyAgICAgICAgICAgLyogRGlmZmVyZW50IHRva2VuIHNpemVzICovCi0JcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CQkvKiBOdW1iZXIgb2YgZW50cnkgaW4gdGhlIGxpc3QgKi8KLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IFdFUF9LRVlTOyAgLyogTWF4IG51bWJlciBvZiB0b2tlbnMgKi8KLS8vCXJhbmdlLT5lbmNvZGluZ19sb2dpbl9pbmRleDsJCS8qIHRva2VuIGluZGV4IGZvciBsb2dpbiB0b2tlbiAqLworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CS8qIERpZmZlcmVudCB0b2tlbiBzaXplcyAqLworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwkvKiBOdW1iZXIgb2YgZW50cnkgaW4gdGhlIGxpc3QgKi8KKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IFdFUF9LRVlTOwkvKiBNYXggbnVtYmVyIG9mIHRva2VucyAqLworLy8gICAgICByYW5nZS0+ZW5jb2RpbmdfbG9naW5faW5kZXg7ICAgICAgICAgICAgLyogdG9rZW4gaW5kZXggZm9yIGxvZ2luIHRva2VuICovCiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CiAJCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CiAJCXJhbmdlLT5udW1fdHhwb3dlciA9IElXX01BWF9UWFBPV0VSOwotCQlmb3IgKGkgPSAwLCBsZXZlbCA9IChJUFdfVFhfUE9XRVJfTUFYX0RCTSAqIDE2KTsgaSA8IElXX01BWF9UWFBPV0VSOwotCQkgICAgIGkrKywgbGV2ZWwgLT0gKChJUFdfVFhfUE9XRVJfTUFYX0RCTSAtIElQV19UWF9QT1dFUl9NSU5fREJNKSAqIDE2KSAvCi0JCQkgICAgIChJV19NQVhfVFhQT1dFUiAtIDEpKQorCQlmb3IgKGkgPSAwLCBsZXZlbCA9IChJUFdfVFhfUE9XRVJfTUFYX0RCTSAqIDE2KTsKKwkJICAgICBpIDwgSVdfTUFYX1RYUE9XRVI7CisJCSAgICAgaSsrLCBsZXZlbCAtPQorCQkgICAgICgoSVBXX1RYX1BPV0VSX01BWF9EQk0gLQorCQkgICAgICAgSVBXX1RYX1BPV0VSX01JTl9EQk0pICogMTYpIC8gKElXX01BWF9UWFBPV0VSIC0gMSkpCiAJCQlyYW5nZS0+dHhwb3dlcltpXSA9IGxldmVsIC8gMTY7CiAJfSBlbHNlIHsKIAkJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IDA7CiAJCXJhbmdlLT5udW1fdHhwb3dlciA9IDA7CiAJfQogCi0KIAkvKiBTZXQgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbiB2ZXJzaW9ucyAqLwogCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwogCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDE2OwogCi0vLwlyYW5nZS0+cmV0cnlfY2FwYTsJLyogV2hhdCByZXRyeSBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgKi8KLS8vCXJhbmdlLT5yZXRyeV9mbGFnczsJLyogSG93IHRvIGRlY29kZSBtYXgvbWluIHJldHJ5IGxpbWl0ICovCi0vLwlyYW5nZS0+cl90aW1lX2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGlmZSAqLwotLy8JcmFuZ2UtPm1pbl9yZXRyeTsJLyogTWluaW1hbCBudW1iZXIgb2YgcmV0cmllcyAqLwotLy8JcmFuZ2UtPm1heF9yZXRyeTsJLyogTWF4aW1hbCBudW1iZXIgb2YgcmV0cmllcyAqLwotLy8JcmFuZ2UtPm1pbl9yX3RpbWU7CS8qIE1pbmltYWwgcmV0cnkgbGlmZXRpbWUgKi8KLS8vCXJhbmdlLT5tYXhfcl90aW1lOwkvKiBNYXhpbWFsIHJldHJ5IGxpZmV0aW1lICovCisvLyAgICAgIHJhbmdlLT5yZXRyeV9jYXBhOyAgICAgIC8qIFdoYXQgcmV0cnkgb3B0aW9ucyBhcmUgc3VwcG9ydGVkICovCisvLyAgICAgIHJhbmdlLT5yZXRyeV9mbGFnczsgICAgIC8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiByZXRyeSBsaW1pdCAqLworLy8gICAgICByYW5nZS0+cl90aW1lX2ZsYWdzOyAgICAvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGlmZSAqLworLy8gICAgICByYW5nZS0+bWluX3JldHJ5OyAgICAgICAvKiBNaW5pbWFsIG51bWJlciBvZiByZXRyaWVzICovCisvLyAgICAgIHJhbmdlLT5tYXhfcmV0cnk7ICAgICAgIC8qIE1heGltYWwgbnVtYmVyIG9mIHJldHJpZXMgKi8KKy8vICAgICAgcmFuZ2UtPm1pbl9yX3RpbWU7ICAgICAgLyogTWluaW1hbCByZXRyeSBsaWZldGltZSAqLworLy8gICAgICByYW5nZS0+bWF4X3JfdGltZTsgICAgICAvKiBNYXhpbWFsIHJldHJ5IGxpZmV0aW1lICovCiAKLSAgICAgICAgcmFuZ2UtPm51bV9jaGFubmVscyA9IEZSRVFfQ09VTlQ7CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IEZSRVFfQ09VTlQ7CiAKIAl2YWwgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBGUkVRX0NPVU5UOyBpKyspIHsKIAkJLy8gVE9ETzogSW5jbHVkZSBvbmx5IGxlZ2FsIGZyZXF1ZW5jaWVzIGZvciBzb21lIGNvdW50cmllcwotLy8JCWlmIChsb2NhbC0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgaSkpIHsKLQkJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGkgKyAxOwotCQkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gaXB3MjEwMF9mcmVxdWVuY2llc1tpXSAqIDEwMDAwMDsKLQkJCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDE7Ci0JCQl2YWwrKzsKLS8vCQl9CisvLyAgICAgICAgICAgICAgaWYgKGxvY2FsLT5jaGFubmVsX21hc2sgJiAoMSA8PCBpKSkgeworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBpICsgMTsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gaXB3MjEwMF9mcmVxdWVuY2llc1tpXSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKKwkJdmFsKys7CisvLyAgICAgICAgICAgICAgfQogCQlpZiAodmFsID09IElXX01BWF9GUkVRVUVOQ0lFUykKLQkJYnJlYWs7CisJCQlicmVhazsKIAl9CiAJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSB2YWw7CiAKQEAgLTcyNTksNyArNzIyOSw3IEBACiAJCSAgICAgd3JxdS0+YXBfYWRkci5zYV9kYXRhWzRdICYgMHhmZiwKIAkJICAgICB3cnF1LT5hcF9hZGRyLnNhX2RhdGFbNV0gJiAweGZmKTsKIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzI3NiwxMCArNzI0Niw5IEBACiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIEJTU0lEIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCi0JaWYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQlNTSUQgfHwKLQkgICAgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpIHsKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19CU1NJRCB8fCBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgewogCQl3cnF1LT5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgJnByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweSh3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CiAJfSBlbHNlCiAJCW1lbXNldCh3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKIApAQCAtNzI5Myw3ICs3MjYyLDcgQEAKIAkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQljaGFyICplc3NpZCA9ICIiOyAvKiBBTlkgKi8KKwljaGFyICplc3NpZCA9ICIiOwkvKiBBTlkgKi8KIAlpbnQgbGVuZ3RoID0gMDsKIAlpbnQgZXJyID0gMDsKIApAQCAtNzMzMyw3ICs3MzAyLDcgQEAKIAogCWVyciA9IGlwdzIxMDBfc2V0X2Vzc2lkKHByaXYsIGVzc2lkLCBsZW5ndGgsIDApOwogCi0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC03MzUwLDE3ICs3MzE5LDE2IEBACiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIEVTU0lEIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCi0JaWYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQgfHwKLQkgICAgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpIHsKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19FU1NJRCB8fCBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgewogCQlJUFdfREVCVUdfV1goIkdldHRpbmcgZXNzaWQ6ICclcydcbiIsCiAJCQkgICAgIGVzY2FwZV9lc3NpZChwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKSk7CiAJCW1lbWNweShleHRyYSwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7CiAJCXdycXUtPmVzc2lkLmxlbmd0aCA9IHByaXYtPmVzc2lkX2xlbjsKLQkJd3JxdS0+ZXNzaWQuZmxhZ3MgPSAxOyAvKiBhY3RpdmUgKi8KKwkJd3JxdS0+ZXNzaWQuZmxhZ3MgPSAxOwkvKiBhY3RpdmUgKi8KIAl9IGVsc2UgewogCQlJUFdfREVCVUdfV1goIkdldHRpbmcgZXNzaWQ6IEFOWVxuIik7CiAJCXdycXUtPmVzc2lkLmxlbmd0aCA9IDA7Ci0JCXdycXUtPmVzc2lkLmZsYWdzID0gMDsgLyogYWN0aXZlICovCisJCXdycXUtPmVzc2lkLmZsYWdzID0gMDsJLyogYWN0aXZlICovCiAJfQogCiAJcmV0dXJuIDA7CkBAIC03Mzc5LDkgKzczNDcsOSBAQAogCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQogCQlyZXR1cm4gLUUyQklHOwogCi0Jd3JxdS0+ZGF0YS5sZW5ndGggPSBtaW4oKHNpemVfdCl3cnF1LT5kYXRhLmxlbmd0aCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IG1pbigoc2l6ZV90KSB3cnF1LT5kYXRhLmxlbmd0aCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKIAltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKLQltZW1jcHkocHJpdi0+bmljaywgZXh0cmEsICB3cnF1LT5kYXRhLmxlbmd0aCk7CisJbWVtY3B5KHByaXYtPm5pY2ssIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CiAKIAlJUFdfREVCVUdfV1goIlNFVCBOaWNrbmFtZSAtPiAlcyBcbiIsIHByaXYtPm5pY2spOwogCkBAIC03NDAwLDcgKzczNjgsNyBAQAogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljaykgKyAxOwogCW1lbWNweShleHRyYSwgcHJpdi0+bmljaywgd3JxdS0+ZGF0YS5sZW5ndGgpOwotCXdycXUtPmRhdGEuZmxhZ3MgPSAxOyAvKiBhY3RpdmUgKi8KKwl3cnF1LT5kYXRhLmZsYWdzID0gMTsJLyogYWN0aXZlICovCiAKIAlJUFdfREVCVUdfV1goIkdFVCBOaWNrbmFtZSAtPiAlcyBcbiIsIGV4dHJhKTsKIApAQCAtNzQ0MiwxMiArNzQxMCwxMSBAQAogCWVyciA9IGlwdzIxMDBfc2V0X3R4X3JhdGVzKHByaXYsIHJhdGUsIDApOwogCiAJSVBXX0RFQlVHX1dYKCJTRVQgUmF0ZSAtPiAlMDRYIFxuIiwgcmF0ZSk7Ci0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKQEAgLTc0OTUsNyArNzQ2Miw3IEBACiAKIAlJUFdfREVCVUdfV1goIkdFVCBSYXRlIC0+ICVkIFxuIiwgd3JxdS0+Yml0cmF0ZS52YWx1ZSk7CiAKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc1MjAsOCArNzQ4Nyw3IEBACiAJaWYgKHdycXUtPnJ0cy5kaXNhYmxlZCkKIAkJdmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkIHwgUlRTX0RJU0FCTEVEOwogCWVsc2UgewotCQlpZiAod3JxdS0+cnRzLnZhbHVlIDwgMSB8fAotCQkgICAgd3JxdS0+cnRzLnZhbHVlID4gMjMwNCkgeworCQlpZiAod3JxdS0+cnRzLnZhbHVlIDwgMSB8fCB3cnF1LT5ydHMudmFsdWUgPiAyMzA0KSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBkb25lOwogCQl9CkBAIC03NTMxLDcgKzc0OTcsNyBAQAogCWVyciA9IGlwdzIxMDBfc2V0X3J0c190aHJlc2hvbGQocHJpdiwgdmFsdWUpOwogCiAJSVBXX0RFQlVHX1dYKCJTRVQgUlRTIFRocmVzaG9sZCAtPiAweCUwOFggXG4iLCB2YWx1ZSk7Ci0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC03NTQ3LDcgKzc1MTMsNyBAQAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCiAJd3JxdS0+cnRzLnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaG9sZCAmIH5SVFNfRElTQUJMRUQ7Ci0Jd3JxdS0+cnRzLmZpeGVkID0gMTsgLyogbm8gYXV0byBzZWxlY3QgKi8KKwl3cnF1LT5ydHMuZml4ZWQgPSAxOwkvKiBubyBhdXRvIHNlbGVjdCAqLwogCiAJLyogSWYgUlRTIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlbiBpdCBpcyBkaXNhYmxlZCAqLwogCXdycXUtPnJ0cy5kaXNhYmxlZCA9IChwcml2LT5ydHNfdGhyZXNob2xkICYgUlRTX0RJU0FCTEVEKSA/IDEgOiAwOwpAQCAtNzU3NCw4ICs3NTQwLDcgQEAKIAkJICAgIHdycXUtPnR4cG93ZXIudmFsdWUgPiBJUFdfVFhfUE9XRVJfTUFYX0RCTSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXZhbHVlID0gKHdycXUtPnR4cG93ZXIudmFsdWUgLSBJUFdfVFhfUE9XRVJfTUlOX0RCTSkgKiAxNiAvCi0JCQkoSVBXX1RYX1BPV0VSX01BWF9EQk0gLSBJUFdfVFhfUE9XRVJfTUlOX0RCTSk7CisJCXZhbHVlID0gd3JxdS0+dHhwb3dlci52YWx1ZTsKIAl9CiAKIAlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKQEAgLTc1ODgsNyArNzU1Myw3IEBACiAKIAlJUFdfREVCVUdfV1goIlNFVCBUWCBQb3dlciAtPiAlZCBcbiIsIHZhbHVlKTsKIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzYxNSwxMSArNzU4MCw3IEBACiAJfSBlbHNlIHsKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAwOwogCQl3cnF1LT5wb3dlci5maXhlZCA9IDE7Ci0JCXdycXUtPnBvd2VyLnZhbHVlID0KLQkJCShwcml2LT50eF9wb3dlciAqCi0JCQkgKElQV19UWF9QT1dFUl9NQVhfREJNIC0gSVBXX1RYX1BPV0VSX01JTl9EQk0pKSAvCi0JCQkoSVBXX1RYX1BPV0VSX01BWCAtIElQV19UWF9QT1dFUl9NSU4pICsKLQkJCUlQV19UWF9QT1dFUl9NSU5fREJNOworCQl3cnF1LT5wb3dlci52YWx1ZSA9IHByaXYtPnR4X3Bvd2VyOwogCX0KIAogCXdycXUtPnBvd2VyLmZsYWdzID0gSVdfVFhQT1dfREJNOwpAQCAtNzY4NCw4ICs3NjQ1LDcgQEAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX0xJRkVUSU1FIHx8Ci0JICAgIHdycXUtPnJldHJ5LmRpc2FibGVkKQorCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX0xJRkVUSU1FIHx8IHdycXUtPnJldHJ5LmRpc2FibGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElNSVQpKQpAQCAtNzcwMCwxNCArNzY2MCwxNCBAQAogCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01JTikgewogCQllcnIgPSBpcHcyMTAwX3NldF9zaG9ydF9yZXRyeShwcml2LCB3cnF1LT5yZXRyeS52YWx1ZSk7CiAJCUlQV19ERUJVR19XWCgiU0VUIFNob3J0IFJldHJ5IExpbWl0IC0+ICVkIFxuIiwKLQkJICAgICAgIHdycXUtPnJldHJ5LnZhbHVlKTsKKwkJCSAgICAgd3JxdS0+cmV0cnkudmFsdWUpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTUFYKSB7CiAJCWVyciA9IGlwdzIxMDBfc2V0X2xvbmdfcmV0cnkocHJpdiwgd3JxdS0+cmV0cnkudmFsdWUpOwogCQlJUFdfREVCVUdfV1goIlNFVCBMb25nIFJldHJ5IExpbWl0IC0+ICVkIFxuIiwKLQkJICAgICAgIHdycXUtPnJldHJ5LnZhbHVlKTsKKwkJCSAgICAgd3JxdS0+cmV0cnkudmFsdWUpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC03NzE3LDcgKzc2NzcsNyBAQAogCiAJSVBXX0RFQlVHX1dYKCJTRVQgQm90aCBSZXRyeSBMaW1pdHMgLT4gJWQgXG4iLCB3cnF1LT5yZXRyeS52YWx1ZSk7CiAKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc3MzIsMjAgKzc2OTIsMTkgQEAKIAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0Jd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOyAvKiBjYW4ndCBiZSBkaXNhYmxlZCAqLworCXdycXUtPnJldHJ5LmRpc2FibGVkID0gMDsJLyogY2FuJ3QgYmUgZGlzYWJsZWQgKi8KIAotCWlmICgod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PQotCSAgICBJV19SRVRSWV9MSUZFVElNRSkKKwlpZiAoKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTUFYKSB7Ci0JCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgJiBJV19SRVRSWV9NQVg7CisJCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9NQVg7CiAJCXdycXUtPnJldHJ5LnZhbHVlID0gcHJpdi0+bG9uZ19yZXRyeV9saW1pdDsKIAl9IGVsc2UgewogCQl3cnF1LT5yZXRyeS5mbGFncyA9CiAJCSAgICAocHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgIT0KIAkJICAgICBwcml2LT5sb25nX3JldHJ5X2xpbWl0KSA/Ci0JCSAgICBJV19SRVRSWV9MSU1JVCAmIElXX1JFVFJZX01JTiA6IElXX1JFVFJZX0xJTUlUOworCQkgICAgSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9NSU4gOiBJV19SRVRSWV9MSU1JVDsKIAogCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OwogCX0KQEAgLTc3NjksMTUgKzc3MjgsMTQgQEAKIAl9CiAKIAlJUFdfREVCVUdfV1goIkluaXRpYXRpbmcgc2Nhbi4uLlxuIik7Ci0JaWYgKGlwdzIxMDBfc2V0X3NjYW5fb3B0aW9ucyhwcml2KSB8fAotCSAgICBpcHcyMTAwX3N0YXJ0X3NjYW4ocHJpdikpIHsKKwlpZiAoaXB3MjEwMF9zZXRfc2Nhbl9vcHRpb25zKHByaXYpIHx8IGlwdzIxMDBfc3RhcnRfc2Nhbihwcml2KSkgewogCQlJUFdfREVCVUdfV1goIlN0YXJ0IHNjYW4gZmFpbGVkLlxuIik7CiAKIAkJLyogVE9ETzogTWFyayBhIHNjYW4gYXMgcGVuZGluZyBzbyB3aGVuIGhhcmR3YXJlIGluaXRpYWxpemVkCiAJCSAqICAgICAgIGEgc2NhbiBzdGFydHMgKi8KIAl9CiAKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc3OTQsNyArNzc1Miw2IEBACiAJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKLQogLyoKICAqIEltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGNvZGUgaW4gaG9zdGFwLWRyaXZlciB2MC4xLjMgaG9zdGFwX2lvY3RsLmMKICAqLwpAQCAtNzgyMyw4ICs3NzgwLDggQEAKIH0KIAogc3RhdGljIGludCBpcHcyMTAwX3d4X3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwpAQCAtNzg0MywxMSArNzgwMCwxMSBAQAogCX0KIAogCXN3aXRjaCAod3JxdS0+cG93ZXIuZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7Ci0JY2FzZSBJV19QT1dFUl9PTjogICAgLyogSWYgbm90IHNwZWNpZmllZCAqLwotCWNhc2UgSVdfUE9XRVJfTU9ERTogIC8qIElmIHNldCBhbGwgbWFzayAqLwotCWNhc2UgSVdfUE9XRVJfQUxMX1I6IC8qIElmIGV4cGxpY2l0ZWx5IHN0YXRlIGFsbCAqLworCWNhc2UgSVdfUE9XRVJfT046CS8qIElmIG5vdCBzcGVjaWZpZWQgKi8KKwljYXNlIElXX1BPV0VSX01PREU6CS8qIElmIHNldCBhbGwgbWFzayAqLworCWNhc2UgSVdfUE9XRVJfQUxMX1I6CS8qIElmIGV4cGxpY2l0ZWx5IHN0YXRlIGFsbCAqLwogCQlicmVhazsKLQlkZWZhdWx0OiAvKiBPdGhlcndpc2Ugd2UgZG9uJ3Qgc3VwcG9ydCBpdCAqLworCWRlZmF1bHQ6CQkvKiBPdGhlcndpc2Ugd2UgZG9uJ3Qgc3VwcG9ydCBpdCAqLwogCQlJUFdfREVCVUdfV1goIlNFVCBQTSBNb2RlOiAlWCBub3Qgc3VwcG9ydGVkLlxuIiwKIAkJCSAgICAgd3JxdS0+cG93ZXIuZmxhZ3MpOwogCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTc4NTksMTggKzc4MTYsMTcgQEAKIAlwcml2LT5wb3dlcl9tb2RlID0gSVBXX1BPV0VSX0VOQUJMRUQgfCBwcml2LT5wb3dlcl9tb2RlOwogCWVyciA9IGlwdzIxMDBfc2V0X3Bvd2VyX21vZGUocHJpdiwgSVBXX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpKTsKIAotCUlQV19ERUJVR19XWCgiU0VUIFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAtPiAweCUwMlhcbiIsCi0JCSAgICAgcHJpdi0+cG93ZXJfbW9kZSk7CisJSVBXX0RFQlVHX1dYKCJTRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+IDB4JTAyWFxuIiwgcHJpdi0+cG93ZXJfbW9kZSk7CiAKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIAogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfd3hfZ2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJLyoKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZApAQCAtNzg3OCw5ICs3ODM0LDkgQEAKIAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0JaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkgeworCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJUFdfUE9XRVJfRU5BQkxFRCkpCiAJCXdycXUtPnBvd2VyLmRpc2FibGVkID0gMTsKLQl9IGVsc2UgeworCWVsc2UgewogCQl3cnF1LT5wb3dlci5kaXNhYmxlZCA9IDA7CiAJCXdycXUtPnBvd2VyLmZsYWdzID0gMDsKIAl9CkBAIC03ODkwLDYgKzc4NDYsMjY5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBXSVJFTEVTU19FWFQgPiAxNworLyoKKyAqIFdFLTE4IFdQQSBzdXBwb3J0CisgKi8KKworLyogU0lPQ1NJV0dFTklFICovCitzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwl1OCAqYnVmOworCisJaWYgKCFpZWVlLT53cGFfZW5hYmxlZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gTUFYX1dQQV9JRV9MRU4gfHwKKwkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIGV4dHJhID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkgeworCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtY3B5KGJ1ZiwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKKwkJa2ZyZWUoaWVlZS0+d3BhX2llKTsKKwkJaWVlZS0+d3BhX2llID0gYnVmOworCQlpZWVlLT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7CisJfSBlbHNlIHsKKwkJa2ZyZWUoaWVlZS0+d3BhX2llKTsKKwkJaWVlZS0+d3BhX2llID0gTlVMTDsKKwkJaWVlZS0+d3BhX2llX2xlbiA9IDA7CisJfQorCisJaXB3MjEwMF93cGFfYXNzb2NfZnJhbWUocHJpdiwgaWVlZS0+d3BhX2llLCBpZWVlLT53cGFfaWVfbGVuKTsKKworCXJldHVybiAwOworfQorCisvKiBTSU9DR0lXR0VOSUUgKi8KK3N0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKworCWlmIChpZWVlLT53cGFfaWVfbGVuID09IDAgfHwgaWVlZS0+d3BhX2llID09IE5VTEwpIHsKKwkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBpZWVlLT53cGFfaWVfbGVuKQorCQlyZXR1cm4gLUUyQklHOworCisJd3JxdS0+ZGF0YS5sZW5ndGggPSBpZWVlLT53cGFfaWVfbGVuOworCW1lbWNweShleHRyYSwgaWVlZS0+d3BhX2llLCBpZWVlLT53cGFfaWVfbGVuKTsKKworCXJldHVybiAwOworfQorCisvKiBTSU9DU0lXQVVUSCAqLworc3RhdGljIGludCBpcHcyMTAwX3d4X3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJLyoKKwkJICogaXB3MjIwMCBkb2VzIG5vdCB1c2UgdGhlc2UgcGFyYW1ldGVycworCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCWNyeXB0ID0gcHJpdi0+aWVlZS0+Y3J5cHRbcHJpdi0+aWVlZS0+dHhfa2V5aWR4XTsKKwkJaWYgKCFjcnlwdCB8fCAhY3J5cHQtPm9wcy0+c2V0X2ZsYWdzIHx8ICFjcnlwdC0+b3BzLT5nZXRfZmxhZ3MpCisJCQlicmVhazsKKworCQlmbGFncyA9IGNyeXB0LT5vcHMtPmdldF9mbGFncyhjcnlwdC0+cHJpdik7CisKKwkJaWYgKHBhcmFtLT52YWx1ZSkKKwkJCWZsYWdzIHw9IElFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVM7CisJCWVsc2UKKwkJCWZsYWdzICY9IH5JRUVFODAyMTFfQ1JZUFRPX1RLSVBfQ09VTlRFUk1FQVNVUkVTOworCisJCWNyeXB0LT5vcHMtPnNldF9mbGFncyhmbGFncywgY3J5cHQtPnByaXYpOworCisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6eworCQkJLyogSEFDSzoKKwkJCSAqCisJCQkgKiB3cGFfc3VwcGxpY2FudCBjYWxscyBzZXRfd3BhX2VuYWJsZWQgd2hlbiB0aGUgZHJpdmVyCisJCQkgKiBpcyBsb2FkZWQgYW5kIHVubG9hZGVkLCByZWdhcmRsZXNzIG9mIGlmIFdQQSBpcyBiZWluZworCQkJICogdXNlZC4gIE5vIG90aGVyIGNhbGxzIGFyZSBtYWRlIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisJCQkgKiBkZXRlcm1pbmUgaWYgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWQgb3Igbm90IHByaW9yIHRvCisJCQkgKiBhc3NvY2lhdGlvbiBiZWluZyBleHBlY3RlZC4gIElmIGVuY3J5cHRpb24gaXMgbm90IGJlaW5nCisJCQkgKiB1c2VkLCBkcm9wX3VuZW5jcnlwdGVkIGlzIHNldCB0byBmYWxzZSwgZWxzZSB0cnVlIC0tIHdlCisJCQkgKiBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBDQVBfUFJJVkFDWV9PTiBiaXQgc2hvdWxkCisJCQkgKiBiZSBzZXQuCisJCQkgKi8KKwkJCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjID0geworCQkJCS5mbGFncyA9IFNFQ19FTkFCTEVELAorCQkJCS5lbmFibGVkID0gcGFyYW0tPnZhbHVlLAorCQkJfTsKKwkJCXByaXYtPmllZWUtPmRyb3BfdW5lbmNyeXB0ZWQgPSBwYXJhbS0+dmFsdWU7CisJCQkvKiBXZSBvbmx5IGNoYW5nZSBTRUNfTEVWRUwgZm9yIG9wZW4gbW9kZS4gT3RoZXJzCisJCQkgKiBhcmUgc2V0IGJ5IGlwd193cGFfc2V0X2VuY3J5cHRpb24uCisJCQkgKi8KKwkJCWlmICghcGFyYW0tPnZhbHVlKSB7CisJCQkJc2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKKwkJCQlzZWMubGV2ZWwgPSBTRUNfTEVWRUxfMDsKKwkJCX0gZWxzZSB7CisJCQkJc2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKKwkJCQlzZWMubGV2ZWwgPSBTRUNfTEVWRUxfMTsKKwkJCX0KKwkJCWlmIChwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkpCisJCQkJcHJpdi0+aWVlZS0+c2V0X3NlY3VyaXR5KHByaXYtPmllZWUtPmRldiwgJnNlYyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlyZXQgPSBpcHcyMTAwX3dwYV9zZXRfYXV0aF9hbGdzKHByaXYsIHBhcmFtLT52YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlyZXQgPSBpcHcyMTAwX3dwYV9lbmFibGUocHJpdiwgcGFyYW0tPnZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJCWllZWUtPmllZWU4MDJfMXggPSBwYXJhbS0+dmFsdWU7CisJCWJyZWFrOworCisJCS8vY2FzZSBJV19BVVRIX1JPQU1JTkdfQ09OVFJPTDoKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlpZWVlLT5wcml2YWN5X2ludm9rZWQgPSBwYXJhbS0+dmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBTSU9DR0lXQVVUSCAqLworc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCS8qCisJCSAqIHdwYV9zdXBwbGljYW50IHdpbGwgY29udHJvbCB0aGVzZSBpbnRlcm5hbGx5CisJCSAqLworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCWNyeXB0ID0gcHJpdi0+aWVlZS0+Y3J5cHRbcHJpdi0+aWVlZS0+dHhfa2V5aWR4XTsKKwkJaWYgKCFjcnlwdCB8fCAhY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKSB7CisJCQlJUFdfREVCVUdfV0FSTklORygiQ2FuJ3QgZ2V0IFRLSVAgY291bnRlcm1lYXN1cmVzOiAiCisJCQkJCSAgImNyeXB0IG5vdCBzZXQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcGFyYW0tPnZhbHVlID0gKGNyeXB0LT5vcHMtPmdldF9mbGFncyhjcnlwdC0+cHJpdikgJgorCQkJCUlFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVMpID8gMSA6IDA7CisKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJcGFyYW0tPnZhbHVlID0gaWVlZS0+ZHJvcF91bmVuY3J5cHRlZDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXBhcmFtLT52YWx1ZSA9IHByaXYtPmllZWUtPnNlYy5hdXRoX21vZGU7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlwYXJhbS0+dmFsdWUgPSBpZWVlLT53cGFfZW5hYmxlZDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJCXBhcmFtLT52YWx1ZSA9IGllZWUtPmllZWU4MDJfMXg7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1JPQU1JTkdfQ09OVFJPTDoKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlwYXJhbS0+dmFsdWUgPSBpZWVlLT5wcml2YWN5X2ludm9rZWQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogU0lPQ1NJV0VOQ09ERUVYVCAqLworc3RhdGljIGludCBpcHcyMTAwX3d4X3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlZXh0KHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKK30KKworLyogU0lPQ0dJV0VOQ09ERUVYVCAqLworc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKK30KKworLyogU0lPQ1NJV01MTUUgKi8KK3N0YXRpYyBpbnQgaXB3MjEwMF93eF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKKwl1MTYgcmVhc29uOworCisJcmVhc29uID0gY3B1X3RvX2xlMTYobWxtZS0+cmVhc29uX2NvZGUpOworCisJc3dpdGNoIChtbG1lLT5jbWQpIHsKKwljYXNlIElXX01MTUVfREVBVVRIOgorCQkvLyBzaWxlbnRseSBpZ25vcmUKKwkJYnJlYWs7CisKKwljYXNlIElXX01MTUVfRElTQVNTT0M6CisJCWlwdzIxMDBfZGlzYXNzb2NpYXRlX2Jzc2lkKHByaXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJLyogV0lSRUxFU1NfRVhUID4gMTcgKi8KIAogLyoKICAqCkBAIC03OTIzLDcgKzgxNDIsNyBAQAogCQlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCiAJCQllcnIgPSBpcHcyMTAwX3N3aXRjaF9tb2RlKHByaXYsIHByaXYtPmxhc3RfbW9kZSk7CiAJfQotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzk1OCw3ICs4MTc3LDcgQEAKIAogCWlmIChwcml2LT5wb3dlcl9tb2RlICE9IG1vZGUpCiAJCWVyciA9IGlwdzIxMDBfc2V0X3Bvd2VyX21vZGUocHJpdiwgbW9kZSk7Ci0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC03OTg2LDggKzgyMDUsOCBAQAogCQkJCSAiUG93ZXIgc2F2ZSBsZXZlbDogJWQgKE5vbmUpIiwgbGV2ZWwpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBXX1BPV0VSX0FVVE86Ci0JCXNucHJpbnRmKGV4dHJhLCBNQVhfUE9XRVJfU1RSSU5HLAotCQkJICJQb3dlciBzYXZlIGxldmVsOiAlZCAoQXV0bykiLCAwKTsKKwkJCXNucHJpbnRmKGV4dHJhLCBNQVhfUE9XRVJfU1RSSU5HLAorCQkJCSAiUG93ZXIgc2F2ZSBsZXZlbDogJWQgKEF1dG8pIiwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXRpbWVvdXQgPSB0aW1lb3V0X2R1cmF0aW9uW2xldmVsIC0gMV0gLyAxMDAwOwpAQCAtODAwNCw3ICs4MjIzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X3ByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKQEAgLTgwMjksMTQgKzgyNDcsMTQgQEAKIAogCWVyciA9IGlwdzIxMDBfc3lzdGVtX2NvbmZpZyhwcml2LCAwKTsKIAotZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfcHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkvKgogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCkBAIC04MDUyLDU0ICs4MjcwLDExNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaXdfaGFuZGxlciBpcHcyMTAwX3d4X2hhbmRsZXJzW10gPQorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKK3N0YXRpYyBpbnQgaXB3MjEwMF93eF9zZXRfY3JjX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdDT01NSVQgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfbmFtZSwgICAgICAvKiBTSU9DR0lXTkFNRSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdOV0lEICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV05XSUQgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfZnJlcSwgICAgICAvKiBTSU9DU0lXRlJFUSAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9mcmVxLCAgICAgIC8qIFNJT0NHSVdGUkVRICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X21vZGUsICAgICAgLyogU0lPQ1NJV01PREUgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfbW9kZSwgICAgICAvKiBTSU9DR0lXTU9ERSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdTRU5TICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1NFTlMgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXUkFOR0UgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfcmFuZ2UsICAgICAvKiBTSU9DR0lXUkFOR0UgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXUFJJViAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdQUklWICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NUQVRTICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1NUQVRTICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NQWSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdTUFkgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXVEhSU1BZICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1dJV1RIUlNQWSAqLwotICAgICAgICBpcHcyMTAwX3d4X3NldF93YXAsICAgICAgIC8qIFNJT0NTSVdBUCAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF93YXAsICAgICAgIC8qIFNJT0NHSVdBUCAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIC0tIGhvbGUgLS0gKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXQVBMSVNUIC0tIGRlcHJlY2F0ZWQgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfc2NhbiwgICAgICAvKiBTSU9DU0lXU0NBTiAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9zY2FuLCAgICAgIC8qIFNJT0NHSVdTQ0FOICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X2Vzc2lkLCAgICAgLyogU0lPQ1NJV0VTU0lEICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X2Vzc2lkLCAgICAgLyogU0lPQ0dJV0VTU0lEICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X25pY2ssICAgICAgLyogU0lPQ1NJV05JQ0tOICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X25pY2ssICAgICAgLyogU0lPQ0dJV05JQ0tOICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogLS0gaG9sZSAtLSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIC0tIGhvbGUgLS0gKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfcmF0ZSwgICAgICAvKiBTSU9DU0lXUkFURSAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9yYXRlLCAgICAgIC8qIFNJT0NHSVdSQVRFICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X3J0cywgICAgICAgLyogU0lPQ1NJV1JUUyAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9ydHMsICAgICAgIC8qIFNJT0NHSVdSVFMgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfZnJhZywgICAgICAvKiBTSU9DU0lXRlJBRyAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9mcmFnLCAgICAgIC8qIFNJT0NHSVdGUkFHICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X3R4cG93LCAgICAgLyogU0lPQ1NJV1RYUE9XICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X3R4cG93LCAgICAgLyogU0lPQ0dJV1RYUE9XICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X3JldHJ5LCAgICAgLyogU0lPQ1NJV1JFVFJZICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X3JldHJ5LCAgICAgLyogU0lPQ0dJV1JFVFJZICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X2VuY29kZSwgICAgLyogU0lPQ1NJV0VOQ09ERSAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9lbmNvZGUsICAgIC8qIFNJT0NHSVdFTkNPREUgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfcG93ZXIsICAgICAvKiBTSU9DU0lXUE9XRVIgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfcG93ZXIsICAgICAvKiBTSU9DR0lXUE9XRVIgKi8KKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpbnQgZXJyLCBtb2RlID0gKihpbnQgKilleHRyYTsKKworCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworCWlmIChtb2RlID09IDEpCisJCXByaXYtPmNvbmZpZyB8PSBDRkdfQ1JDX0NIRUNLOworCWVsc2UgaWYgKG1vZGUgPT0gMCkKKwkJcHJpdi0+Y29uZmlnICY9IH5DRkdfQ1JDX0NIRUNLOworCWVsc2UgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCWVyciA9IDA7CisKKyAgICAgIGRvbmU6CisJdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfY3JjX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCS8qCisJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKKwkgKi8KKworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYgKHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0spCisJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiQ1JDIGNoZWNrZWQgKDEpIik7CisJZWxzZQorCQlzbnByaW50Zih3cnF1LT5uYW1lLCBJRk5BTVNJWiwgIkNSQyBpZ25vcmVkICgwKSIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLworCitzdGF0aWMgaXdfaGFuZGxlciBpcHcyMTAwX3d4X2hhbmRsZXJzW10gPSB7CisJTlVMTCwJCQkvKiBTSU9DU0lXQ09NTUlUICovCisJaXB3MjEwMF93eF9nZXRfbmFtZSwJLyogU0lPQ0dJV05BTUUgKi8KKwlOVUxMLAkJCS8qIFNJT0NTSVdOV0lEICovCisJTlVMTCwJCQkvKiBTSU9DR0lXTldJRCAqLworCWlwdzIxMDBfd3hfc2V0X2ZyZXEsCS8qIFNJT0NTSVdGUkVRICovCisJaXB3MjEwMF93eF9nZXRfZnJlcSwJLyogU0lPQ0dJV0ZSRVEgKi8KKwlpcHcyMTAwX3d4X3NldF9tb2RlLAkvKiBTSU9DU0lXTU9ERSAqLworCWlwdzIxMDBfd3hfZ2V0X21vZGUsCS8qIFNJT0NHSVdNT0RFICovCisJTlVMTCwJCQkvKiBTSU9DU0lXU0VOUyAqLworCU5VTEwsCQkJLyogU0lPQ0dJV1NFTlMgKi8KKwlOVUxMLAkJCS8qIFNJT0NTSVdSQU5HRSAqLworCWlwdzIxMDBfd3hfZ2V0X3JhbmdlLAkvKiBTSU9DR0lXUkFOR0UgKi8KKwlOVUxMLAkJCS8qIFNJT0NTSVdQUklWICovCisJTlVMTCwJCQkvKiBTSU9DR0lXUFJJViAqLworCU5VTEwsCQkJLyogU0lPQ1NJV1NUQVRTICovCisJTlVMTCwJCQkvKiBTSU9DR0lXU1RBVFMgKi8KKwlOVUxMLAkJCS8qIFNJT0NTSVdTUFkgKi8KKwlOVUxMLAkJCS8qIFNJT0NHSVdTUFkgKi8KKwlOVUxMLAkJCS8qIFNJT0NHSVdUSFJTUFkgKi8KKwlOVUxMLAkJCS8qIFNJT0NXSVdUSFJTUFkgKi8KKwlpcHcyMTAwX3d4X3NldF93YXAsCS8qIFNJT0NTSVdBUCAqLworCWlwdzIxMDBfd3hfZ2V0X3dhcCwJLyogU0lPQ0dJV0FQICovCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKKwlpcHcyMTAwX3d4X3NldF9tbG1lLAkvKiBTSU9DU0lXTUxNRSAqLworI2Vsc2UKKwlOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKyNlbmRpZgorCU5VTEwsCQkJLyogU0lPQ0dJV0FQTElTVCAtLSBkZXByZWNhdGVkICovCisJaXB3MjEwMF93eF9zZXRfc2NhbiwJLyogU0lPQ1NJV1NDQU4gKi8KKwlpcHcyMTAwX3d4X2dldF9zY2FuLAkvKiBTSU9DR0lXU0NBTiAqLworCWlwdzIxMDBfd3hfc2V0X2Vzc2lkLAkvKiBTSU9DU0lXRVNTSUQgKi8KKwlpcHcyMTAwX3d4X2dldF9lc3NpZCwJLyogU0lPQ0dJV0VTU0lEICovCisJaXB3MjEwMF93eF9zZXRfbmljaywJLyogU0lPQ1NJV05JQ0tOICovCisJaXB3MjEwMF93eF9nZXRfbmljaywJLyogU0lPQ0dJV05JQ0tOICovCisJTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJaXB3MjEwMF93eF9zZXRfcmF0ZSwJLyogU0lPQ1NJV1JBVEUgKi8KKwlpcHcyMTAwX3d4X2dldF9yYXRlLAkvKiBTSU9DR0lXUkFURSAqLworCWlwdzIxMDBfd3hfc2V0X3J0cywJLyogU0lPQ1NJV1JUUyAqLworCWlwdzIxMDBfd3hfZ2V0X3J0cywJLyogU0lPQ0dJV1JUUyAqLworCWlwdzIxMDBfd3hfc2V0X2ZyYWcsCS8qIFNJT0NTSVdGUkFHICovCisJaXB3MjEwMF93eF9nZXRfZnJhZywJLyogU0lPQ0dJV0ZSQUcgKi8KKwlpcHcyMTAwX3d4X3NldF90eHBvdywJLyogU0lPQ1NJV1RYUE9XICovCisJaXB3MjEwMF93eF9nZXRfdHhwb3csCS8qIFNJT0NHSVdUWFBPVyAqLworCWlwdzIxMDBfd3hfc2V0X3JldHJ5LAkvKiBTSU9DU0lXUkVUUlkgKi8KKwlpcHcyMTAwX3d4X2dldF9yZXRyeSwJLyogU0lPQ0dJV1JFVFJZICovCisJaXB3MjEwMF93eF9zZXRfZW5jb2RlLAkvKiBTSU9DU0lXRU5DT0RFICovCisJaXB3MjEwMF93eF9nZXRfZW5jb2RlLAkvKiBTSU9DR0lXRU5DT0RFICovCisJaXB3MjEwMF93eF9zZXRfcG93ZXIsCS8qIFNJT0NTSVdQT1dFUiAqLworCWlwdzIxMDBfd3hfZ2V0X3Bvd2VyLAkvKiBTSU9DR0lXUE9XRVIgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxNworCU5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCU5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCWlwdzIxMDBfd3hfc2V0X2dlbmllLAkvKiBTSU9DU0lXR0VOSUUgKi8KKwlpcHcyMTAwX3d4X2dldF9nZW5pZSwJLyogU0lPQ0dJV0dFTklFICovCisJaXB3MjEwMF93eF9zZXRfYXV0aCwJLyogU0lPQ1NJV0FVVEggKi8KKwlpcHcyMTAwX3d4X2dldF9hdXRoLAkvKiBTSU9DR0lXQVVUSCAqLworCWlwdzIxMDBfd3hfc2V0X2VuY29kZWV4dCwJLyogU0lPQ1NJV0VOQ09ERUVYVCAqLworCWlwdzIxMDBfd3hfZ2V0X2VuY29kZWV4dCwJLyogU0lPQ0dJV0VOQ09ERUVYVCAqLworCU5VTEwsCQkJLyogU0lPQ1NJV1BNS1NBICovCisjZW5kaWYKIH07CiAKICNkZWZpbmUgSVBXMjEwMF9QUklWX1NFVF9NT05JVE9SCVNJT0NJV0ZJUlNUUFJJVgpAQCAtODEwOCw2MCArODM4OCw3MSBAQAogI2RlZmluZSBJUFcyMTAwX1BSSVZfR0VUX1BPV0VSCQlTSU9DSVdGSVJTVFBSSVYrMwogI2RlZmluZSBJUFcyMTAwX1BSSVZfU0VUX0xPTkdQUkVBTUJMRQlTSU9DSVdGSVJTVFBSSVYrNAogI2RlZmluZSBJUFcyMTAwX1BSSVZfR0VUX0xPTkdQUkVBTUJMRQlTSU9DSVdGSVJTVFBSSVYrNQorI2RlZmluZSBJUFcyMTAwX1BSSVZfU0VUX0NSQ19DSEVDSwlTSU9DSVdGSVJTVFBSSVYrNgorI2RlZmluZSBJUFcyMTAwX1BSSVZfR0VUX0NSQ19DSEVDSwlTSU9DSVdGSVJTVFBSSVYrNwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBpcHcyMTAwX3ByaXZhdGVfYXJnc1tdID0gewogCiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgogCXsKLQkJSVBXMjEwMF9QUklWX1NFVF9NT05JVE9SLAotCQlJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMiwgMCwgIm1vbml0b3IiCi0JfSwKKwkgSVBXMjEwMF9QUklWX1NFVF9NT05JVE9SLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMiwgMCwgIm1vbml0b3IifSwKIAl7Ci0JCUlQVzIxMDBfUFJJVl9SRVNFVCwKLQkJSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDAsIDAsICJyZXNldCIKLQl9LAotI2VuZGlmIC8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKwkgSVBXMjEwMF9QUklWX1JFU0VULAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMCwgMCwgInJlc2V0In0sCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLwogCiAJewotCQlJUFcyMTAwX1BSSVZfU0VUX1BPV0VSLAotCQlJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9wb3dlciIKLQl9LAorCSBJUFcyMTAwX1BSSVZfU0VUX1BPV0VSLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9wb3dlciJ9LAogCXsKLQkJSVBXMjEwMF9QUklWX0dFVF9QT1dFUiwKLQkJMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBNQVhfUE9XRVJfU1RSSU5HLCAiZ2V0X3Bvd2VyIgotCX0sCisJIElQVzIxMDBfUFJJVl9HRVRfUE9XRVIsCisJIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1BPV0VSX1NUUklORywKKwkgImdldF9wb3dlciJ9LAogCXsKLQkJSVBXMjEwMF9QUklWX1NFVF9MT05HUFJFQU1CTEUsCi0JCUlXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3ByZWFtYmxlIgotCX0sCisJIElQVzIxMDBfUFJJVl9TRVRfTE9OR1BSRUFNQkxFLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9wcmVhbWJsZSJ9LAogCXsKLQkJSVBXMjEwMF9QUklWX0dFVF9MT05HUFJFQU1CTEUsCi0JCTAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgSUZOQU1TSVosICJnZXRfcHJlYW1ibGUiCi0JfSwKKwkgSVBXMjEwMF9QUklWX0dFVF9MT05HUFJFQU1CTEUsCisJIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgSUZOQU1TSVosICJnZXRfcHJlYW1ibGUifSwKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCisJeworCSBJUFcyMTAwX1BSSVZfU0VUX0NSQ19DSEVDSywKKwkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfY3JjX2NoZWNrIn0sCisJeworCSBJUFcyMTAwX1BSSVZfR0VUX0NSQ19DSEVDSywKKwkgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBJRk5BTVNJWiwgImdldF9jcmNfY2hlY2sifSwKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiB9OwogCiBzdGF0aWMgaXdfaGFuZGxlciBpcHcyMTAwX3ByaXZhdGVfaGFuZGxlcltdID0gewogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKIAlpcHcyMTAwX3d4X3NldF9wcm9taXNjLAogCWlwdzIxMDBfd3hfcmVzZXQsCi0jZWxzZSAvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCisjZWxzZQkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiAJTlVMTCwKIAlOVUxMLAotI2VuZGlmIC8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiAJaXB3MjEwMF93eF9zZXRfcG93ZXJtb2RlLAogCWlwdzIxMDBfd3hfZ2V0X3Bvd2VybW9kZSwKIAlpcHcyMTAwX3d4X3NldF9wcmVhbWJsZSwKIAlpcHcyMTAwX3d4X2dldF9wcmVhbWJsZSwKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCisJaXB3MjEwMF93eF9zZXRfY3JjX2NoZWNrLAorCWlwdzIxMDBfd3hfZ2V0X2NyY19jaGVjaywKKyNlbHNlCQkJCS8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKwlOVUxMLAorCU5VTEwsCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpcHcyMTAwX3d4X2hhbmRsZXJfZGVmID0KLXsKK3N0YXRpYyBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXB3MjEwMF93eF9oYW5kbGVyX2RlZiA9IHsKIAkuc3RhbmRhcmQgPSBpcHcyMTAwX3d4X2hhbmRsZXJzLAogCS5udW1fc3RhbmRhcmQgPSBzaXplb2YoaXB3MjEwMF93eF9oYW5kbGVycykgLyBzaXplb2YoaXdfaGFuZGxlciksCiAJLm51bV9wcml2YXRlID0gc2l6ZW9mKGlwdzIxMDBfcHJpdmF0ZV9oYW5kbGVyKSAvIHNpemVvZihpd19oYW5kbGVyKSwKLSAJLm51bV9wcml2YXRlX2FyZ3MgPSBzaXplb2YoaXB3MjEwMF9wcml2YXRlX2FyZ3MpIC8KLQlzaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncyksCi0JLnByaXZhdGUgPSAoaXdfaGFuZGxlciAqKWlwdzIxMDBfcHJpdmF0ZV9oYW5kbGVyLAorCS5udW1fcHJpdmF0ZV9hcmdzID0gc2l6ZW9mKGlwdzIxMDBfcHJpdmF0ZV9hcmdzKSAvCisJICAgIHNpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKKwkucHJpdmF0ZSA9IChpd19oYW5kbGVyICopIGlwdzIxMDBfcHJpdmF0ZV9oYW5kbGVyLAogCS5wcml2YXRlX2FyZ3MgPSAoc3RydWN0IGl3X3ByaXZfYXJncyAqKWlwdzIxMDBfcHJpdmF0ZV9hcmdzLAogfTsKIApAQCAtODE3MCw3ICs4NDYxLDcgQEAKICAqIENhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MKICAqIEFsc28gY2FsbGVkIGJ5IFNJT0NHSVdTVEFUUwogICovCi1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmlwdzIxMDBfd3hfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCitzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmlwdzIxMDBfd3hfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAllbnVtIHsKIAkJUE9PUiA9IDMwLApAQCAtODE5MCw3ICs4NDgxLDcgQEAKIAl1MzIgb3JkX2xlbiA9IHNpemVvZih1MzIpOwogCiAJaWYgKCFwcml2KQotCQlyZXR1cm4gKHN0cnVjdCBpd19zdGF0aXN0aWNzICopIE5VTEw7CisJCXJldHVybiAoc3RydWN0IGl3X3N0YXRpc3RpY3MgKilOVUxMOwogCiAJd3N0YXRzID0gJnByaXYtPndzdGF0czsKIApAQCAtODIwNyw3ICs4NDk4LDcgQEAKIAkJd3N0YXRzLT5xdWFsLm5vaXNlID0gMDsKIAkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSA3OwogCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQgfAotCQkJSVdfUVVBTF9RVUFMX0lOVkFMSUQgfCBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJCSAgICBJV19RVUFMX1FVQUxfSU5WQUxJRCB8IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKIAkJcmV0dXJuIHdzdGF0czsKIAl9CiAKQEAgLTgyMTUsNyArODUwNiw3IEBACiAJCQkJJm1pc3NlZF9iZWFjb25zLCAmb3JkX2xlbikpCiAJCWdvdG8gZmFpbF9nZXRfb3JkaW5hbDsKIAotICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB0aGUgcXVhbGl0eSBhbmQgbGV2ZWwgaXMgMCovCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24gdGhlIHF1YWxpdHkgYW5kIGxldmVsIGlzIDAgKi8KIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpIHsKIAkJd3N0YXRzLT5xdWFsLnF1YWwgPSAwOwogCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAwOwpAQCAtODIzMiwxMCArODUyMywxMCBAQAogCQkJcnNzaV9xdWFsID0gKHJzc2kgLSAxNSkgKiAoR09PRCAtIEZBSVIpIC8gNSArIEZBSVI7CiAJCWVsc2UgaWYgKHJzc2kgPCAzMCkKIAkJCXJzc2lfcXVhbCA9IChyc3NpIC0gMjApICogKFZFUllfR09PRCAtIEdPT0QpIC8KLQkJCQkxMCArIEdPT0Q7CisJCQkgICAgMTAgKyBHT09EOwogCQllbHNlCiAJCQlyc3NpX3F1YWwgPSAocnNzaSAtIDMwKSAqIChQRVJGRUNUIC0gVkVSWV9HT09EKSAvCi0JCQkJMTAgKyBWRVJZX0dPT0Q7CisJCQkgICAgMTAgKyBWRVJZX0dPT0Q7CiAKIAkJaWYgKGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9TVEFUX1BFUkNFTlRfUkVUUklFUywKIAkJCQkJJnR4X3JldHJpZXMsICZvcmRfbGVuKSkKQEAgLTgyNDksMjUgKzg1NDAsMjUgQEAKIAkJCXR4X3F1YWwgPSAoNzAgLSB0eF9yZXRyaWVzKSAqIChHT09EIC0gRkFJUikgLyA1ICsgRkFJUjsKIAkJZWxzZSBpZiAodHhfcmV0cmllcyA+IDUwKQogCQkJdHhfcXVhbCA9ICg2NSAtIHR4X3JldHJpZXMpICogKFZFUllfR09PRCAtIEdPT0QpIC8KLQkJCQkxNSArIEdPT0Q7CisJCQkgICAgMTUgKyBHT09EOwogCQllbHNlCiAJCQl0eF9xdWFsID0gKDUwIC0gdHhfcmV0cmllcykgKgotCQkJCShQRVJGRUNUIC0gVkVSWV9HT09EKSAvIDUwICsgVkVSWV9HT09EOworCQkJICAgIChQRVJGRUNUIC0gVkVSWV9HT09EKSAvIDUwICsgVkVSWV9HT09EOwogCiAJCWlmIChtaXNzZWRfYmVhY29ucyA+IDUwKQogCQkJYmVhY29uX3F1YWwgPSAoNjAgLSBtaXNzZWRfYmVhY29ucykgKiBQT09SIC8gMTA7CiAJCWVsc2UgaWYgKG1pc3NlZF9iZWFjb25zID4gNDApCiAJCQliZWFjb25fcXVhbCA9ICg1MCAtIG1pc3NlZF9iZWFjb25zKSAqIChGQUlSIC0gUE9PUikgLwotCQkJCTEwICsgUE9PUjsKKwkJCSAgICAxMCArIFBPT1I7CiAJCWVsc2UgaWYgKG1pc3NlZF9iZWFjb25zID4gMzIpCiAJCQliZWFjb25fcXVhbCA9ICg0MCAtIG1pc3NlZF9iZWFjb25zKSAqIChHT09EIC0gRkFJUikgLwotCQkJCTE4ICsgRkFJUjsKKwkJCSAgICAxOCArIEZBSVI7CiAJCWVsc2UgaWYgKG1pc3NlZF9iZWFjb25zID4gMjApCiAJCQliZWFjb25fcXVhbCA9ICgzMiAtIG1pc3NlZF9iZWFjb25zKSAqCi0JCQkJKFZFUllfR09PRCAtIEdPT0QpIC8gMjAgKyBHT09EOworCQkJICAgIChWRVJZX0dPT0QgLSBHT09EKSAvIDIwICsgR09PRDsKIAkJZWxzZQogCQkJYmVhY29uX3F1YWwgPSAoMjAgLSBtaXNzZWRfYmVhY29ucykgKgotCQkJCShQRVJGRUNUIC0gVkVSWV9HT09EKSAvIDIwICsgVkVSWV9HT09EOworCQkJICAgIChQRVJGRUNUIC0gVkVSWV9HT09EKSAvIDIwICsgVkVSWV9HT09EOwogCiAJCXF1YWxpdHkgPSBtaW4oYmVhY29uX3F1YWwsIG1pbih0eF9xdWFsLCByc3NpX3F1YWwpKTsKIApAQCAtODI5MCw3ICs4NTgxLDcgQEAKIAl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IDc7CiAJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOwogCi0gICAgICAgIC8qIEZJWE1FOiB0aGlzIGlzIHBlcmNlbnQgYW5kIG5vdCBhICMgKi8KKwkvKiBGSVhNRTogdGhpcyBpcyBwZXJjZW50IGFuZCBub3QgYSAjICovCiAJd3N0YXRzLT5taXNzLmJlYWNvbiA9IG1pc3NlZF9iZWFjb25zOwogCiAJaWYgKGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9TVEFUX1RYX0ZBSUxVUkVTLApAQCAtODMwMCwxMCArODU5MSwxMCBAQAogCiAJcmV0dXJuIHdzdGF0czsKIAotIGZhaWxfZ2V0X29yZGluYWw6CisgICAgICBmYWlsX2dldF9vcmRpbmFsOgogCUlQV19ERUJVR19XWCgiZmFpbGVkIHF1ZXJ5aW5nIG9yZGluYWxzLlxuIik7CiAKLQlyZXR1cm4gKHN0cnVjdCBpd19zdGF0aXN0aWNzICopIE5VTEw7CisJcmV0dXJuIChzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqKU5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfd3hfZXZlbnRfd29yayhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQpAQCAtODMyNiwyMyArODYxNywxNyBAQAogCWlmICghKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRJTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCkpIHx8CiAJICAgIHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0sgfHwKIAkgICAgaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1NUQVRfQVNTTl9BUF9CU1NJRCwKLQkJCQkmcHJpdi0+YnNzaWQsICAmbGVuKSkgeworCQkJCSZwcml2LT5ic3NpZCwgJmxlbikpIHsKIAkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJLyogV2Ugbm93IGhhdmUgdGhlIEJTU0lELCBzbyBjYW4gZmluaXNoIHNldHRpbmcgdG8gdGhlIGZ1bGwKIAkJICogYXNzb2NpYXRlZCBzdGF0ZSAqLwogCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCW1lbWNweSgmcHJpdi0+aWVlZS0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShwcml2LT5pZWVlLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfQVNTT0NJQVRJTkc7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfQVNTT0NJQVRFRDsKIAkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRfZGV2KTsKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0X2RldikpIHsKLQkJCUlQV19ERUJVR19JTkZPKCJXYWtpbmcgbmV0IHF1ZXVlLlxuIik7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwotCQl9IGVsc2UgewotCQkJSVBXX0RFQlVHX0lORk8oIlN0YXJ0aW5nIG5ldCBxdWV1ZS5cbiIpOwotCQkJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0JCX0KKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRfZGV2KTsKIAl9CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpIHsKQEAgLTgzNTEsNyArODYzNiw4IEBACiAJCS8qIFRoaXMgaXMgYSBkaXNhc3NvY2lhdGlvbiBldmVudCwgc28ga2ljayB0aGUgZmlybXdhcmUgdG8KIAkJICogbG9vayBmb3IgYW5vdGhlciBBUCAqLwogCQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19FU1NJRCkKLQkJCWlwdzIxMDBfc2V0X2Vzc2lkKHByaXYsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4sIDApOworCQkJaXB3MjEwMF9zZXRfZXNzaWQocHJpdiwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbiwKKwkJCQkJICAwKTsKIAkJZWxzZQogCQkJaXB3MjEwMF9zZXRfZXNzaWQocHJpdiwgTlVMTCwgMCwgMCk7CiAJCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKQEAgLTgzNzQsNyArODY2MCw2IEBACiAKICNkZWZpbmUgSVBXMjEwMF9GV19OQU1FKHgpIElQVzIxMDBfRldfUFJFRklYICIiIHggIi5mdyIKIAotCiAvKgogCiBCSU5BUlkgRklSTVdBUkUgSEVBREVSIEZPUk1BVApAQCAtODM5NiwxMiArODY4MSwxMCBAQAogCXVuc2lnbmVkIGludCB1Y19zaXplOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLQotCiBzdGF0aWMgaW50IGlwdzIxMDBfbW9kX2Zpcm13YXJlX2xvYWQoc3RydWN0IGlwdzIxMDBfZncgKmZ3KQogewogCXN0cnVjdCBpcHcyMTAwX2Z3X2hlYWRlciAqaCA9Ci0JCShzdHJ1Y3QgaXB3MjEwMF9md19oZWFkZXIgKilmdy0+ZndfZW50cnktPmRhdGE7CisJICAgIChzdHJ1Y3QgaXB3MjEwMF9md19oZWFkZXIgKilmdy0+ZndfZW50cnktPmRhdGE7CiAKIAlpZiAoSVBXMjEwMF9GV19NQUpPUihoLT52ZXJzaW9uKSAhPSBJUFcyMTAwX0ZXX01BSk9SX1ZFUlNJT04pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBGaXJtd2FyZSBpbWFnZSBub3QgY29tcGF0aWJsZSAiCkBAIC04NDIwLDcgKzg3MDMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9nZXRfZmlybXdhcmUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXB3MjEwMF9mdyAqZncpCiB7CkBAIC04NDI4LDcgKzg3MTAsNyBAQAogCWludCByYzsKIAogCUlQV19ERUJVR19JTkZPKCIlczogVXNpbmcgaG90cGx1ZyBmaXJtd2FyZSBsb2FkLlxuIiwKLQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAogCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKQEAgLTg0NTQsNyArODczNiw3IEBACiAJCXJldHVybiByYzsKIAl9CiAJSVBXX0RFQlVHX0lORk8oImZpcm13YXJlIGRhdGEgJXAgc2l6ZSAlemRcbiIsIGZ3LT5md19lbnRyeS0+ZGF0YSwKLQkJCSAgIGZ3LT5md19lbnRyeS0+c2l6ZSk7CisJCSAgICAgICBmdy0+ZndfZW50cnktPnNpemUpOwogCiAJaXB3MjEwMF9tb2RfZmlybXdhcmVfbG9hZChmdyk7CiAKQEAgLTg0NzAsNyArODc1Miw2IEBACiAJZnctPmZ3X2VudHJ5ID0gTlVMTDsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfZ2V0X2Z3dmVyc2lvbihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBjaGFyICpidWYsCiAJCQkJIHNpemVfdCBtYXgpCiB7CkBAIC04NDc5LDggKzg3NjAsNyBAQAogCXUzMiB0bXA7CiAJaW50IGk7CiAJLyogZmlybXdhcmUgdmVyc2lvbiBpcyBhbiBhc2NpaSBzdHJpbmcgKG1heCBsZW4gb2YgMTQpICovCi0JaWYgKGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9TVEFUX0ZXX1ZFUl9OVU0sCi0JCQkJdmVyLCAmbGVuKSkKKwlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1NUQVRfRldfVkVSX05VTSwgdmVyLCAmbGVuKSkKIAkJcmV0dXJuIC1FSU87CiAJdG1wID0gbWF4OwogCWlmIChsZW4gPj0gbWF4KQpAQCAtODQ5Nyw4ICs4Nzc3LDcgQEAKIAl1MzIgdmVyOwogCXUzMiBsZW4gPSBzaXplb2YodmVyKTsKIAkvKiBtaWNyb2NvZGUgdmVyc2lvbiBpcyBhIDMyIGJpdCBpbnRlZ2VyICovCi0JaWYgKGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9VQ09ERV9WRVJTSU9OLAotCQkJCSZ2ZXIsICZsZW4pKQorCWlmIChpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfVUNPREVfVkVSU0lPTiwgJnZlciwgJmxlbikpCiAJCXJldHVybiAtRUlPOwogCXJldHVybiBzbnByaW50ZihidWYsIG1heCwgIiUwOFgiLCB2ZXIpOwogfQpAQCAtODUwNiw4ICs4Nzg1LDcgQEAKIC8qCiAgKiBPbiBleGl0LCB0aGUgZmlybXdhcmUgd2lsbCBoYXZlIGJlZW4gZnJlZWQgZnJvbSB0aGUgZncgbGlzdAogICovCi1zdGF0aWMgaW50IGlwdzIxMDBfZndfZG93bmxvYWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXB3MjEwMF9mdyAqZncpCitzdGF0aWMgaW50IGlwdzIxMDBfZndfZG93bmxvYWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgc3RydWN0IGlwdzIxMDBfZncgKmZ3KQogewogCS8qIGZpcm13YXJlIGlzIGNvbnN0cnVjdGVkIG9mIE4gY29udGlndW91cyBlbnRyaWVzLCBlYWNoIGVudHJ5IGlzCiAJICogc3RydWN0dXJlZCBhczoKQEAgLTg1MTUsNyArODc5Myw3IEBACiAJICogb2Zmc2V0ICAgIHNpZSAgICAgICAgIGRlc2MKIAkgKiAwICAgICAgICAgNCAgICAgICAgICAgYWRkcmVzcyB0byB3cml0ZSB0bwogCSAqIDQgICAgICAgICAyICAgICAgICAgICBsZW5ndGggb2YgZGF0YSBydW4KLSAgICAgICAgICogNiAgICAgICAgIGxlbmd0aCAgICAgIGRhdGEKKwkgKiA2ICAgICAgICAgbGVuZ3RoICAgICAgZGF0YQogCSAqLwogCXVuc2lnbmVkIGludCBhZGRyOwogCXVuc2lnbmVkIHNob3J0IGxlbjsKQEAgLTg1MjQsMTIgKzg4MDIsMTIgQEAKIAl1bnNpZ25lZCBpbnQgZmlybXdhcmVfZGF0YV9sZWZ0ID0gZnctPmZ3LnNpemU7CiAKIAl3aGlsZSAoZmlybXdhcmVfZGF0YV9sZWZ0ID4gMCkgewotCSAgIAlhZGRyID0gKih1MzIgKikoZmlybXdhcmVfZGF0YSk7Ci0JCWZpcm13YXJlX2RhdGEgICAgICArPSA0OworCQlhZGRyID0gKih1MzIgKikgKGZpcm13YXJlX2RhdGEpOworCQlmaXJtd2FyZV9kYXRhICs9IDQ7CiAJCWZpcm13YXJlX2RhdGFfbGVmdCAtPSA0OwogCi0JICAgCWxlbiA9ICoodTE2ICopKGZpcm13YXJlX2RhdGEpOwotCQlmaXJtd2FyZV9kYXRhICAgICAgKz0gMjsKKwkJbGVuID0gKih1MTYgKikgKGZpcm13YXJlX2RhdGEpOworCQlmaXJtd2FyZV9kYXRhICs9IDI7CiAJCWZpcm13YXJlX2RhdGFfbGVmdCAtPSAyOwogCiAJCWlmIChsZW4gPiAzMikgewpAQCAtODU0MCw3ICs4ODE4LDcgQEAKIAkJfQogCiAJCXdyaXRlX25pY19tZW1vcnkocHJpdi0+bmV0X2RldiwgYWRkciwgbGVuLCBmaXJtd2FyZV9kYXRhKTsKLQkJZmlybXdhcmVfZGF0YSAgICAgICs9IGxlbjsKKwkJZmlybXdhcmVfZGF0YSArPSBsZW47CiAJCWZpcm13YXJlX2RhdGFfbGVmdCAtPSBsZW47CiAJfQogCkBAIC04NjU0LDIxICs4OTMyLDE5IEBACiAJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAkJLyogUmVhZCBhbGl2ZSByZXNwb25zZSBzdHJ1Y3R1cmUgKi8KIAkJZm9yIChqID0gMDsKLQkJICAgICBqIDwgKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX2FsaXZlX3Jlc3BvbnNlKSA+PiAxKTsKLQkJICAgICBqKyspCi0JCQlyZWFkX25pY193b3JkKGRldiwgMHgyMTAwMDQsCi0JCQkJICAgICAgKCh1MTYgKikmcmVzcG9uc2UpICsgaik7CisJCSAgICAgaiA8IChzaXplb2Yoc3RydWN0IHN5bWJvbF9hbGl2ZV9yZXNwb25zZSkgPj4gMSk7IGorKykKKwkJCXJlYWRfbmljX3dvcmQoZGV2LCAweDIxMDAwNCwgKCh1MTYgKikgJiByZXNwb25zZSkgKyBqKTsKIAotCQlpZiAoKHJlc3BvbnNlLmNtZF9pZCA9PSAxKSAmJgotCQkgICAgKHJlc3BvbnNlLnVjb2RlX3ZhbGlkID09IDB4MSkpCisJCWlmICgocmVzcG9uc2UuY21kX2lkID09IDEpICYmIChyZXNwb25zZS51Y29kZV92YWxpZCA9PSAweDEpKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxMCk7CiAJfQogCiAJaWYgKGkgPT0gMzApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBObyByZXNwb25zZSBmcm9tIFN5bWJvbCAtIGh3IG5vdCBhbGl2ZVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogTm8gcmVzcG9uc2UgZnJvbSBTeW1ib2wgLSBodyBub3QgYWxpdmVcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwotCQlwcmludGtfYnVmKElQV19ETF9FUlJPUiwgKHU4KikmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOworCQlwcmludGtfYnVmKElQV19ETF9FUlJPUiwgKHU4ICopICYgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuaAppbmRleCBjOWU5OWNlLi4xNDBmZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA0IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLy8gbmV3IGRyaXZlciBBUEkKIAogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KQEAgLTkzLDcgKzkyLDYgQEAKICNkZWZpbmUgSVBXX0RMX0lPQ1RMICAgICAgICAgKDE8PDE0KQogI2RlZmluZSBJUFdfRExfUkZfS0lMTCAgICAgICAoMTw8MTcpCiAKLQogI2RlZmluZSBJUFdfRExfTUFOQUdFICAgICAgICAoMTw8MTUpCiAjZGVmaW5lIElQV19ETF9GVyAgICAgICAgICAgICgxPDwxNikKIApAQCAtMTU2LDcgKzE1NCw5IEBACiAKIHN0cnVjdCBiZF9zdGF0dXMgewogCXVuaW9uIHsKLQkJc3RydWN0IHsgdTggbmxmOjEsIHR4VHlwZToyLCBpbnRFbmFibGVkOjEsIHJlc2VydmVkOjQ7fSBmaWVsZHM7CisJCXN0cnVjdCB7CisJCQl1OCBubGY6MSwgdHhUeXBlOjIsIGludEVuYWJsZWQ6MSwgcmVzZXJ2ZWQ6NDsKKwkJfSBmaWVsZHM7CiAJCXU4IGZpZWxkOwogCX0gaW5mbzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJdTMyIGhvc3RfYWRkcjsKIAl1MzIgYnVmX2xlbmd0aDsKIAlzdHJ1Y3QgYmRfc3RhdHVzIHN0YXR1czsKLSAgICAgICAgLyogbnVtYmVyIG9mIGZyYWdtZW50cyBmb3IgZnJhbWUgKHNob3VsZCBiZSBzZXQgb25seSBmb3IKKwkvKiBudW1iZXIgb2YgZnJhZ21lbnRzIGZvciBmcmFtZSAoc2hvdWxkIGJlIHNldCBvbmx5IGZvcgogCSAqIDFzdCBUQkQpICovCiAJdTggbnVtX2ZyYWdtZW50czsKIAl1OCByZXNlcnZlZFs2XTsKQEAgLTI5MywxMCArMjkzLDEwIEBACiBzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciB7CiAJdTMyIGhvc3RfY29tbWFuZF9yZWc7CiAJdTMyIGhvc3RfY29tbWFuZF9yZWcxOwotCXU4IGVuY3J5cHRlZDsJLy8gQk9PTEVBTiBpbiB3aW4hIFRSVUUgaWYgZnJhbWUgaXMgZW5jIGJ5IGRyaXZlcgorCXU4IGVuY3J5cHRlZDsJCS8vIEJPT0xFQU4gaW4gd2luISBUUlVFIGlmIGZyYW1lIGlzIGVuYyBieSBkcml2ZXIKIAl1OCBuZWVkc19lbmNyeXB0aW9uOwkvLyBCT09MRUFOIGluIHdpbiEgVFJVRSBpZiBmcm1hIG5lZWQgdG8gYmUgZW5jIGluIE5JQwogCXU4IHdlcF9pbmRleDsJCS8vIDAgbm8ga2V5LCAxLTQga2V5IGluZGV4LCAweGZmIGltbWVkaWF0ZSBrZXkKLQl1OCBrZXlfc2l6ZTsJLy8gMCBubyBpbW0ga2V5LCAweDUgNjRiaXQgZW5jciwgMHhkIDEyOGJpdCBlbmNyLCAweDEwIDEyOGJpdCBlbmNyIGFuZCAxMjhiaXQgSVYKKwl1OCBrZXlfc2l6ZTsJCS8vIDAgbm8gaW1tIGtleSwgMHg1IDY0Yml0IGVuY3IsIDB4ZCAxMjhiaXQgZW5jciwgMHgxMCAxMjhiaXQgZW5jciBhbmQgMTI4Yml0IElWCiAJdTgga2V5WzE2XTsKIAl1OCByZXNlcnZlZFsxMF07CS8vIGYvdyByZXNlcnZlZAogCXU4IHNyY19hZGRyW0VUSF9BTEVOXTsKQEAgLTMwNiwxNCArMzA2LDEzIEBACiAKIC8qIEhvc3QgY29tbWFuZCBkYXRhIHN0cnVjdHVyZSAqLwogc3RydWN0IGhvc3RfY29tbWFuZCB7Ci0JdTMyIGhvc3RfY29tbWFuZDsJCS8vIENPTU1BTkQgSUQKLQl1MzIgaG9zdF9jb21tYW5kMTsJCS8vIENPTU1BTkQgSUQKKwl1MzIgaG9zdF9jb21tYW5kOwkvLyBDT01NQU5EIElECisJdTMyIGhvc3RfY29tbWFuZDE7CS8vIENPTU1BTkQgSUQKIAl1MzIgaG9zdF9jb21tYW5kX3NlcXVlbmNlOwkvLyBVTklRVUUgQ09NTUFORCBOVU1CRVIgKElEKQogCXUzMiBob3N0X2NvbW1hbmRfbGVuZ3RoOwkvLyBMRU5HVEgKIAl1MzIgaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbSE9TVF9DT01NQU5EX1BBUkFNU19SRUdfTEVOXTsJLy8gQ09NTUFORCBQQVJBTUVURVJTCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCiB0eXBlZGVmIGVudW0gewogCVBPV0VSX09OX1JFU0VULAogCUVYSVRfUE9XRVJfRE9XTl9SRVNFVCwKQEAgLTMyOCwxNyArMzI3LDE2IEBACiAJUlgKIH07CiAKLQogc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0IHsKIAlpbnQgdHlwZTsKIAlpbnQgaW5kZXg7CiAJdW5pb24gewotCQlzdHJ1Y3QgeyAvKiBDT01NQU5EICovCi0JCQlzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyKiBjbWQ7CisJCXN0cnVjdCB7CS8qIENPTU1BTkQgKi8KKwkJCXN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgKmNtZDsKIAkJCWRtYV9hZGRyX3QgY21kX3BoeXM7CiAJCX0gY19zdHJ1Y3Q7Ci0JCXN0cnVjdCB7IC8qIERBVEEgKi8KLQkJCXN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyKiBkYXRhOworCQlzdHJ1Y3QgewkvKiBEQVRBICovCisJCQlzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciAqZGF0YTsKIAkJCWRtYV9hZGRyX3QgZGF0YV9waHlzOwogCQkJc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YjsKIAkJfSBkX3N0cnVjdDsKQEAgLTM0OCw3ICszNDYsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLQogc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0IHsKIAlzdHJ1Y3QgaXB3MjEwMF9yeCAqcnhwOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CkBAIC00MzIsMTMgKzQyOSwxMyBAQAogfTsKIAogI2RlZmluZSBTVEFUVVNfUE9XRVJFRCAgICAgICAgICAoMTw8MCkKLSNkZWZpbmUgU1RBVFVTX0NNRF9BQ1RJVkUgICAgICAgKDE8PDEpICAvKio8IGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBTVEFUVVNfUlVOTklORyAgICAgICAgICAoMTw8MikgIC8qIENhcmQgaW5pdGlhbGl6ZWQsIGJ1dCBub3QgZW5hYmxlZCAqLwotI2RlZmluZSBTVEFUVVNfRU5BQkxFRCAgICAgICAgICAoMTw8MykgIC8qIENhcmQgZW5hYmxlZCAtLSBjYW4gc2NhbixUeCxSeCAqLwotI2RlZmluZSBTVEFUVVNfU1RPUFBJTkcgICAgICAgICAoMTw8NCkgIC8qIENhcmQgaXMgaW4gc2h1dGRvd24gcGhhc2UgKi8KLSNkZWZpbmUgU1RBVFVTX0lOSVRJQUxJWkVEICAgICAgKDE8PDUpICAvKiBDYXJkIGlzIHJlYWR5IGZvciBleHRlcm5hbCBjYWxscyAqLwotI2RlZmluZSBTVEFUVVNfQVNTT0NJQVRJTkcgICAgICAoMTw8OSkgIC8qIEFzc29jaWF0ZWQsIGJ1dCBubyBCU1NJRCB5ZXQgKi8KLSNkZWZpbmUgU1RBVFVTX0FTU09DSUFURUQgICAgICAgKDE8PDEwKSAvKiBBc3NvY2lhdGVkIGFuZCBCU1NJRCB2YWxpZCAqLworI2RlZmluZSBTVEFUVVNfQ01EX0FDVElWRSAgICAgICAoMTw8MSkJLyoqPCBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgU1RBVFVTX1JVTk5JTkcgICAgICAgICAgKDE8PDIpCS8qIENhcmQgaW5pdGlhbGl6ZWQsIGJ1dCBub3QgZW5hYmxlZCAqLworI2RlZmluZSBTVEFUVVNfRU5BQkxFRCAgICAgICAgICAoMTw8MykJLyogQ2FyZCBlbmFibGVkIC0tIGNhbiBzY2FuLFR4LFJ4ICovCisjZGVmaW5lIFNUQVRVU19TVE9QUElORyAgICAgICAgICgxPDw0KQkvKiBDYXJkIGlzIGluIHNodXRkb3duIHBoYXNlICovCisjZGVmaW5lIFNUQVRVU19JTklUSUFMSVpFRCAgICAgICgxPDw1KQkvKiBDYXJkIGlzIHJlYWR5IGZvciBleHRlcm5hbCBjYWxscyAqLworI2RlZmluZSBTVEFUVVNfQVNTT0NJQVRJTkcgICAgICAoMTw8OSkJLyogQXNzb2NpYXRlZCwgYnV0IG5vIEJTU0lEIHlldCAqLworI2RlZmluZSBTVEFUVVNfQVNTT0NJQVRFRCAgICAgICAoMTw8MTApCS8qIEFzc29jaWF0ZWQgYW5kIEJTU0lEIHZhbGlkICovCiAjZGVmaW5lIFNUQVRVU19JTlRfRU5BQkxFRCAgICAgICgxPDwxMSkKICNkZWZpbmUgU1RBVFVTX1JGX0tJTExfSFcgICAgICAgKDE8PDEyKQogI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9TVyAgICAgICAoMTw8MTMpCkBAIC00NTEsOSArNDQ4LDcgQEAKICNkZWZpbmUgU1RBVFVTX1NDQU5fQ09NUExFVEUgICAgKDE8PDI2KQogI2RlZmluZSBTVEFUVVNfV1hfRVZFTlRfUEVORElORyAoMTw8MjcpCiAjZGVmaW5lIFNUQVRVU19SRVNFVF9QRU5ESU5HICAgICgxPDwyOSkKLSNkZWZpbmUgU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQgKDE8PDMwKSAvKiBTZWN1cml0eSBzeW5jIG5lZWRlZCAqLwotCi0KKyNkZWZpbmUgU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQgKDE8PDMwKQkvKiBTZWN1cml0eSBzeW5jIG5lZWRlZCAqLwogCiAvKiBJbnRlcm5hbCBOSUMgc3RhdGVzICovCiAjZGVmaW5lIElQV19TVEFURV9JTklUSUFMSVpFRAkoMTw8MCkKQEAgLTQ2OSwxMSArNDY0LDkgQEAKICNkZWZpbmUgSVBXX1NUQVRFX1BPV0VSX0RPV04JKDE8PDEwKQogI2RlZmluZSBJUFdfU1RBVEVfU0NBTk5JTkcgICAgICAoMTw8MTEpCiAKLQotCi0jZGVmaW5lIENGR19TVEFUSUNfQ0hBTk5FTCAgICAgICgxPDwwKSAvKiBSZXN0cmljdCBhc3NvYy4gdG8gc2luZ2xlIGNoYW5uZWwgKi8KLSNkZWZpbmUgQ0ZHX1NUQVRJQ19FU1NJRCAgICAgICAgKDE8PDEpIC8qIFJlc3RyaWN0IGFzc29jLiB0byBzaW5nbGUgU1NJRCAqLwotI2RlZmluZSBDRkdfU1RBVElDX0JTU0lEICAgICAgICAoMTw8MikgLyogUmVzdHJpY3QgYXNzb2MuIHRvIHNpbmdsZSBCU1NJRCAqLworI2RlZmluZSBDRkdfU1RBVElDX0NIQU5ORUwgICAgICAoMTw8MCkJLyogUmVzdHJpY3QgYXNzb2MuIHRvIHNpbmdsZSBjaGFubmVsICovCisjZGVmaW5lIENGR19TVEFUSUNfRVNTSUQgICAgICAgICgxPDwxKQkvKiBSZXN0cmljdCBhc3NvYy4gdG8gc2luZ2xlIFNTSUQgKi8KKyNkZWZpbmUgQ0ZHX1NUQVRJQ19CU1NJRCAgICAgICAgKDE8PDIpCS8qIFJlc3RyaWN0IGFzc29jLiB0byBzaW5nbGUgQlNTSUQgKi8KICNkZWZpbmUgQ0ZHX0NVU1RPTV9NQUMgICAgICAgICAgKDE8PDMpCiAjZGVmaW5lIENGR19MT05HX1BSRUFNQkxFICAgICAgICgxPDw0KQogI2RlZmluZSBDRkdfQVNTT0NJQVRFICAgICAgICAgICAoMTw8NikKQEAgLTQ4MSwxNCArNDc0LDE3IEBACiAjZGVmaW5lIENGR19BREhPQ19DUkVBVEUgICAgICAgICgxPDw4KQogI2RlZmluZSBDRkdfQzNfRElTQUJMRUQgICAgICAgICAoMTw8OSkKICNkZWZpbmUgQ0ZHX1BBU1NJVkVfU0NBTiAgICAgICAgKDE8PDEwKQorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKKyNkZWZpbmUgQ0ZHX0NSQ19DSEVDSyAgICAgICAgICAgKDE8PDExKQorI2VuZGlmCiAKLSNkZWZpbmUgQ0FQX1NIQVJFRF9LRVkgICAgICAgICAgKDE8PDApIC8qIE9mZiA9IE9QRU4gKi8KLSNkZWZpbmUgQ0FQX1BSSVZBQ1lfT04gICAgICAgICAgKDE8PDEpIC8qIE9mZiA9IE5vIHByaXZhY3kgKi8KKyNkZWZpbmUgQ0FQX1NIQVJFRF9LRVkgICAgICAgICAgKDE8PDApCS8qIE9mZiA9IE9QRU4gKi8KKyNkZWZpbmUgQ0FQX1BSSVZBQ1lfT04gICAgICAgICAgKDE8PDEpCS8qIE9mZiA9IE5vIHByaXZhY3kgKi8KIAogc3RydWN0IGlwdzIxMDBfcHJpdiB7CiAKLQlpbnQgc3RvcF9oYW5nX2NoZWNrOyAvKiBTZXQgMSB3aGVuIHNodXR0aW5nIGRvd24gdG8ga2lsbCBoYW5nX2NoZWNrICovCi0JaW50IHN0b3BfcmZfa2lsbDsgLyogU2V0IDEgd2hlbiBzaHV0dGluZyBkb3duIHRvIGtpbGwgcmZfa2lsbCAqLworCWludCBzdG9wX2hhbmdfY2hlY2s7CS8qIFNldCAxIHdoZW4gc2h1dHRpbmcgZG93biB0byBraWxsIGhhbmdfY2hlY2sgKi8KKwlpbnQgc3RvcF9yZl9raWxsOwkvKiBTZXQgMSB3aGVuIHNodXR0aW5nIGRvd24gdG8ga2lsbCByZl9raWxsICovCiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKQEAgLTUxOSwxOSArNTE1LDE2IEBACiAJdW5zaWduZWQgbG9uZyBod19mZWF0dXJlczsKIAlpbnQgaGFuZ3M7CiAJdTMyIGxhc3RfcnRjOwotCWludCBkdW1wX3JhdzsgLyogMSB0byBkdW1wIHJhdyBieXRlcyBpbiAvc3lzLy4uLi9tZW1vcnkgKi8KLQl1OCogc25hcHNob3RbMHgzMF07CisJaW50IGR1bXBfcmF3OwkJLyogMSB0byBkdW1wIHJhdyBieXRlcyBpbiAvc3lzLy4uLi9tZW1vcnkgKi8KKwl1OCAqc25hcHNob3RbMHgzMF07CiAKIAl1OCBtYW5kYXRvcnlfYnNzaWRfbWFjW0VUSF9BTEVOXTsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAKIAlpbnQgcG93ZXJfbW9kZTsKIAotCS8qIFdFUCBkYXRhICovCi0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7CiAJaW50IG1lc3NhZ2VzX3NlbnQ7CiAKLQogCWludCBzaG9ydF9yZXRyeV9saW1pdDsKIAlpbnQgbG9uZ19yZXRyeV9saW1pdDsKIApAQCAtNTk5LDcgKzU5Miw2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9jb21tYW5kX3F1ZXVlOwogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIb3N0IENvbW1hbmQgLT4gRnJvbSBEcml2ZXIgdG8gRlcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02NDYsNyArNjM4LDYgQEAKICNkZWZpbmUgQ0FSRF9ESVNBQkxFX1BIWV9PRkYgICA2MQogI2RlZmluZSBNU0RVX1RYX1JBVEVTICAgICAgICAgIDYyCiAKLQogLyogUm9ndWUgQVAgRGV0ZWN0aW9uICovCiAjZGVmaW5lIFNFVF9TVEFUSU9OX1NUQVRfQklUUyAgICAgIDY0CiAjZGVmaW5lIENMRUFSX1NUQVRJT05TX1NUQVRfQklUUyAgIDY1CkBAIC02NTUsOCArNjQ2LDYgQEAKICNkZWZpbmUgRElTQVNTT0NJQVRJT05fQlNTSUQJICAgNjgKICNkZWZpbmUgU0VUX1dQQV9JRSAgICAgICAgICAgICAgICAgNjkKIAotCi0KIC8qIHN5c3RlbSBjb25maWd1cmF0aW9uIGJpdCBtYXNrOiAqLwogI2RlZmluZSBJUFdfQ0ZHX01PTklUT1IgICAgICAgICAgICAgICAweDAwMDA0CiAjZGVmaW5lIElQV19DRkdfUFJFQU1CTEVfQVVUTyAgICAgICAgMHgwMDAxMApAQCAtNzA0LDcgKzY5Myw3IEBACiAjZGVmaW5lIElQVzIxMDBfSU5UQV9UWF9UUkFOU0ZFUiAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQkvLyBCaXQgMCAoTFNCKQogI2RlZmluZSBJUFcyMTAwX0lOVEFfUlhfVFJBTlNGRVIgICAgICAgICAgICAgICAoMHgwMDAwMDAwMikJLy8gQml0IDEKICNkZWZpbmUgSVBXMjEwMF9JTlRBX1RYX0NPTVBMRVRFCSAgICAgICAoMHgwMDAwMDAwNCkJLy8gQml0IDIKLSNkZWZpbmUgSVBXMjEwMF9JTlRBX0VWRU5UX0lOVEVSUlVQVCAgICAgICAgICAgKDB4MDAwMDAwMDgpICAgICAvLyBCaXQgMworI2RlZmluZSBJUFcyMTAwX0lOVEFfRVZFTlRfSU5URVJSVVBUICAgICAgICAgICAoMHgwMDAwMDAwOCkJLy8gQml0IDMKICNkZWZpbmUgSVBXMjEwMF9JTlRBX1NUQVRVU19DSEFOR0UgICAgICAgICAgICAgKDB4MDAwMDAwMTApCS8vIEJpdCA0CiAjZGVmaW5lIElQVzIxMDBfSU5UQV9CRUFDT05fUEVSSU9EX0VYUElSRUQgICAgICgweDAwMDAwMDIwKQkvLyBCaXQgNQogI2RlZmluZSBJUFcyMTAwX0lOVEFfU0xBVkVfTU9ERV9IT1NUX0NPTU1BTkRfRE9ORSAgKDB4MDAwMTAwMDApCS8vIEJpdCAxNgpAQCAtNzg0LDkgKzc3Myw2IEBACiAjZGVmaW5lIElQV19DQVJEX0RJU0FCTEVfUEhZX09GRl9DT01QTEVURV9XQUlUCSAgICAxMDAJLy8gMTAwIG1pbGxpCiAjZGVmaW5lIElQV19QUkVQQVJFX1BPV0VSX0RPV05fQ09NUExFVEVfV0FJVAkgICAgMTAwCS8vIDEwMCBtaWxsaQogCi0KLQotCiAjZGVmaW5lIElQV19IRUFERVJfODAyXzExX1NJWkUJCSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpCiAjZGVmaW5lIElQV19NQVhfODAyMTFfUEFZTE9BRF9TSVpFICAgICAgICAgICAgICAyMzA0VQogI2RlZmluZSBJUFdfTUFYXzgwMl8xMV9QQVlMT0FEX0xFTkdUSAkJMjMxMgpAQCAtODQzLDggKzgyOSw4IEBACiAjZGVmaW5lIElQV19UWF9QT1dFUl9NSU5fREJNICAgICAgICAgKC0xMikKICNkZWZpbmUgSVBXX1RYX1BPV0VSX01BWF9EQk0gICAgICAgICAxNgogCi0jZGVmaW5lIEZXX1NDQU5fRE9OT1RfQVNTT0NJQVRFICAgICAweDAwMDEgLy8gRG9udCBBdHRlbXB0IHRvIEFzc29jaWF0ZSBhZnRlciBTY2FuCi0jZGVmaW5lIEZXX1NDQU5fUEFTU0lWRSAgICAgICAgICAgICAweDAwMDggLy8gRm9yY2UgUEFTU1NJVkUgU2NhbgorI2RlZmluZSBGV19TQ0FOX0RPTk9UX0FTU09DSUFURSAgICAgMHgwMDAxCS8vIERvbnQgQXR0ZW1wdCB0byBBc3NvY2lhdGUgYWZ0ZXIgU2NhbgorI2RlZmluZSBGV19TQ0FOX1BBU1NJVkUgICAgICAgICAgICAgMHgwMDA4CS8vIEZvcmNlIFBBU1NTSVZFIFNjYW4KIAogI2RlZmluZSBSRUdfTUlOX0NIQU5ORUwgICAgICAgICAgICAgMAogI2RlZmluZSBSRUdfTUFYX0NIQU5ORUwgICAgICAgICAgICAgMTQKQEAgLTg1Niw3ICs4NDIsNiBAQAogI2RlZmluZSBESVZFUlNJVFlfQU5URU5OQV9BICAgICAgICAgMQkvLyBVc2UgYW50ZW5uYSBBCiAjZGVmaW5lIERJVkVSU0lUWV9BTlRFTk5BX0IgICAgICAgICAyCS8vIFVzZSBhbnRlbm5hIEIKIAotCiAjZGVmaW5lIEhPU1RfQ09NTUFORF9XQUlUIDAKICNkZWZpbmUgSE9TVF9DT01NQU5EX05PX1dBSVQgMQogCkBAIC04NzMsMTAgKzg1OCw5IEBACiAjZGVmaW5lIFRZUEVfQVNTT0NJQVRJT05fUkVRVUVTVAkweDAwMTMKICNkZWZpbmUgVFlQRV9SRUFTU09DSUFUSU9OX1JFUVVFU1QJMHgwMDE0CiAKLQotI2RlZmluZSBIV19GRUFUVVJFX1JGS0lMTCAoMHgwMDAxKQotI2RlZmluZSBSRl9LSUxMU1dJVENIX09GRiAoMSkKLSNkZWZpbmUgUkZfS0lMTFNXSVRDSF9PTiAgKDApCisjZGVmaW5lIEhXX0ZFQVRVUkVfUkZLSUxMIDB4MDAwMQorI2RlZmluZSBSRl9LSUxMU1dJVENIX09GRiAxCisjZGVmaW5lIFJGX0tJTExTV0lUQ0hfT04gIDAKIAogI2RlZmluZSBJUFdfQ09NTUFORF9QT09MX1NJWkUgICAgICAgIDQwCiAKQEAgLTg5NSw3ICs4NzksNyBAQAogLy8gRml4ZWQgc2l6ZSBkYXRhOiBPcmRpbmFsIFRhYmxlIDEKIHR5cGVkZWYgZW51bSBfT1JESU5BTF9UQUJMRV8xIHsJLy8gTlMgLSBtZWFucyBOb3QgU3VwcG9ydGVkIGJ5IEZXCiAvLyBUcmFuc21pdCBzdGF0aXN0aWNzCi0JSVBXX09SRF9TVEFUX1RYX0hPU1RfUkVRVUVTVFMgPSAxLC8vICMgb2YgcmVxdWVzdGVkIEhvc3QgVHgncyAoTVNEVSkKKwlJUFdfT1JEX1NUQVRfVFhfSE9TVF9SRVFVRVNUUyA9IDEsCS8vICMgb2YgcmVxdWVzdGVkIEhvc3QgVHgncyAoTVNEVSkKIAlJUFdfT1JEX1NUQVRfVFhfSE9TVF9DT01QTEVURSwJLy8gIyBvZiBzdWNjZXNzZnVsIEhvc3QgVHgncyAoTVNEVSkKIAlJUFdfT1JEX1NUQVRfVFhfRElSX0RBVEEsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKQogCkBAIC05MDUsNDIgKzg4OSw0MiBAQAogCUlQV19PUkRfU1RBVF9UWF9ESVJfREFUQTExLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxMU1CCiAJSVBXX09SRF9TVEFUX1RYX0RJUl9EQVRBMjIsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKSBAIDIyTUIKIAotCUlQV19PUkRfU1RBVF9UWF9OT0RJUl9EQVRBMSA9IDEzLC8vICMgb2Ygc3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxTUIKKwlJUFdfT1JEX1NUQVRfVFhfTk9ESVJfREFUQTEgPSAxMywJLy8gIyBvZiBzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDFNQgogCUlQV19PUkRfU1RBVF9UWF9OT0RJUl9EQVRBMiwJLy8gIyBvZiBzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDJNQgogCUlQV19PUkRfU1RBVF9UWF9OT0RJUl9EQVRBNV81LAkvLyAjIG9mIHN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgNS41TUIKIAlJUFdfT1JEX1NUQVRfVFhfTk9ESVJfREFUQTExLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMTFNQgogCiAJSVBXX09SRF9TVEFUX05VTExfREFUQSA9IDIxLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgTlVMTCBkYXRhIFR4J3MKLQlJUFdfT1JEX1NUQVRfVFhfUlRTLAkgICAgICAgIC8vICMgb2Ygc3VjY2Vzc2Z1bCBUeCBSVFMKLQlJUFdfT1JEX1NUQVRfVFhfQ1RTLAkgICAgICAgIC8vICMgb2Ygc3VjY2Vzc2Z1bCBUeCBDVFMKLQlJUFdfT1JEX1NUQVRfVFhfQUNLLAkgICAgICAgIC8vICMgb2Ygc3VjY2Vzc2Z1bCBUeCBBQ0sKLQlJUFdfT1JEX1NUQVRfVFhfQVNTTiwJICAgICAgICAvLyAjIG9mIHN1Y2Nlc3NmdWwgQXNzb2NpYXRpb24gVHgncworCUlQV19PUkRfU1RBVF9UWF9SVFMsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBUeCBSVFMKKwlJUFdfT1JEX1NUQVRfVFhfQ1RTLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgVHggQ1RTCisJSVBXX09SRF9TVEFUX1RYX0FDSywJLy8gIyBvZiBzdWNjZXNzZnVsIFR4IEFDSworCUlQV19PUkRfU1RBVF9UWF9BU1NOLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgQXNzb2NpYXRpb24gVHgncwogCUlQV19PUkRfU1RBVF9UWF9BU1NOX1JFU1AsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBBc3NvY2lhdGlvbiByZXNwb25zZSBUeCdzCi0JSVBXX09SRF9TVEFUX1RYX1JFQVNTTiwJICAgICAgICAvLyAjIG9mIHN1Y2Nlc3NmdWwgUmVhc3NvY2lhdGlvbiBUeCdzCisJSVBXX09SRF9TVEFUX1RYX1JFQVNTTiwJLy8gIyBvZiBzdWNjZXNzZnVsIFJlYXNzb2NpYXRpb24gVHgncwogCUlQV19PUkRfU1RBVF9UWF9SRUFTU05fUkVTUCwJLy8gIyBvZiBzdWNjZXNzZnVsIFJlYXNzb2NpYXRpb24gcmVzcG9uc2UgVHgncwotCUlQV19PUkRfU1RBVF9UWF9QUk9CRSwJICAgICAgICAvLyAjIG9mIHByb2JlcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQKKwlJUFdfT1JEX1NUQVRfVFhfUFJPQkUsCS8vICMgb2YgcHJvYmVzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZAogCUlQV19PUkRfU1RBVF9UWF9QUk9CRV9SRVNQLAkvLyAjIG9mIHByb2JlIHJlc3BvbnNlcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQKLQlJUFdfT1JEX1NUQVRfVFhfQkVBQ09OLAkgICAgICAgIC8vICMgb2YgdHggYmVhY29uCi0JSVBXX09SRF9TVEFUX1RYX0FUSU0sCSAgICAgICAgLy8gIyBvZiBUeCBBVElNCisJSVBXX09SRF9TVEFUX1RYX0JFQUNPTiwJLy8gIyBvZiB0eCBiZWFjb24KKwlJUFdfT1JEX1NUQVRfVFhfQVRJTSwJLy8gIyBvZiBUeCBBVElNCiAJSVBXX09SRF9TVEFUX1RYX0RJU0FTU04sCS8vICMgb2Ygc3VjY2Vzc2Z1bCBEaXNhc3NvY2lhdGlvbiBUWAotCUlQV19PUkRfU1RBVF9UWF9BVVRILAkgICAgICAgIC8vICMgb2Ygc3VjY2Vzc2Z1bCBBdXRoZW50aWNhdGlvbiBUeAotCUlQV19PUkRfU1RBVF9UWF9ERUFVVEgsCSAgICAgICAgLy8gIyBvZiBzdWNjZXNzZnVsIERlYXV0aGVudGljYXRpb24gVFgKKwlJUFdfT1JEX1NUQVRfVFhfQVVUSCwJLy8gIyBvZiBzdWNjZXNzZnVsIEF1dGhlbnRpY2F0aW9uIFR4CisJSVBXX09SRF9TVEFUX1RYX0RFQVVUSCwJLy8gIyBvZiBzdWNjZXNzZnVsIERlYXV0aGVudGljYXRpb24gVFgKIAotCUlQV19PUkRfU1RBVF9UWF9UT1RBTF9CWVRFUyA9IDQxLC8vIFRvdGFsIHN1Y2Nlc3NmdWwgVHggZGF0YSBieXRlcwotCUlQV19PUkRfU1RBVF9UWF9SRVRSSUVTLCAgICAgICAgIC8vICMgb2YgVHggcmV0cmllcwotCUlQV19PUkRfU1RBVF9UWF9SRVRSWTEsICAgICAgICAgIC8vICMgb2YgVHggcmV0cmllcyBhdCAxTUJQUwotCUlQV19PUkRfU1RBVF9UWF9SRVRSWTIsICAgICAgICAgIC8vICMgb2YgVHggcmV0cmllcyBhdCAyTUJQUwotCUlQV19PUkRfU1RBVF9UWF9SRVRSWTVfNSwJIC8vICMgb2YgVHggcmV0cmllcyBhdCA1LjVNQlBTCi0JSVBXX09SRF9TVEFUX1RYX1JFVFJZMTEsCSAvLyAjIG9mIFR4IHJldHJpZXMgYXQgMTFNQlBTCisJSVBXX09SRF9TVEFUX1RYX1RPVEFMX0JZVEVTID0gNDEsCS8vIFRvdGFsIHN1Y2Nlc3NmdWwgVHggZGF0YSBieXRlcworCUlQV19PUkRfU1RBVF9UWF9SRVRSSUVTLAkvLyAjIG9mIFR4IHJldHJpZXMKKwlJUFdfT1JEX1NUQVRfVFhfUkVUUlkxLAkvLyAjIG9mIFR4IHJldHJpZXMgYXQgMU1CUFMKKwlJUFdfT1JEX1NUQVRfVFhfUkVUUlkyLAkvLyAjIG9mIFR4IHJldHJpZXMgYXQgMk1CUFMKKwlJUFdfT1JEX1NUQVRfVFhfUkVUUlk1XzUsCS8vICMgb2YgVHggcmV0cmllcyBhdCA1LjVNQlBTCisJSVBXX09SRF9TVEFUX1RYX1JFVFJZMTEsCS8vICMgb2YgVHggcmV0cmllcyBhdCAxMU1CUFMKIAogCUlQV19PUkRfU1RBVF9UWF9GQUlMVVJFUyA9IDUxLAkvLyAjIG9mIFR4IEZhaWx1cmVzCiAJSVBXX09SRF9TVEFUX1RYX0FCT1JUX0FUX0hPUCwJLy9OUyAvLyAjIG9mIFR4J3MgYWJvcnRlZCBhdCBob3AgdGltZQotCUlQV19PUkRfU1RBVF9UWF9NQVhfVFJJRVNfSU5fSE9QLC8vICMgb2YgdGltZXMgbWF4IHRyaWVzIGluIGEgaG9wIGZhaWxlZAorCUlQV19PUkRfU1RBVF9UWF9NQVhfVFJJRVNfSU5fSE9QLAkvLyAjIG9mIHRpbWVzIG1heCB0cmllcyBpbiBhIGhvcCBmYWlsZWQKIAlJUFdfT1JEX1NUQVRfVFhfQUJPUlRfTEFURV9ETUEsCS8vTlMgLy8gIyBvZiB0aW1lcyB0eCBhYm9ydGVkIGR1ZSB0byBsYXRlIGRtYSBzZXR1cAogCUlQV19PUkRfU1RBVF9UWF9BQk9SVF9TVFgsCS8vTlMgLy8gIyBvZiB0aW1lcyBiYWNrb2ZmIGFib3J0ZWQKIAlJUFdfT1JEX1NUQVRfVFhfRElTQVNTTl9GQUlMLAkvLyAjIG9mIHRpbWVzIGRpc2Fzc29jaWF0aW9uIGZhaWxlZAotCUlQV19PUkRfU1RBVF9UWF9FUlJfQ1RTLCAgICAgICAgIC8vICMgb2YgbWlzc2VkL2JhZCBDVFMgZnJhbWVzCi0JSVBXX09SRF9TVEFUX1RYX0JQRFUsCSAgICAgICAgLy9OUyAvLyAjIG9mIHNwYW5uaW5nIHRyZWUgQlBEVXMgc2VudAorCUlQV19PUkRfU1RBVF9UWF9FUlJfQ1RTLAkvLyAjIG9mIG1pc3NlZC9iYWQgQ1RTIGZyYW1lcworCUlQV19PUkRfU1RBVF9UWF9CUERVLAkvL05TIC8vICMgb2Ygc3Bhbm5pbmcgdHJlZSBCUERVcyBzZW50CiAJSVBXX09SRF9TVEFUX1RYX0VSUl9BQ0ssCS8vICMgb2YgdHggZXJyIGR1ZSB0byBhY2tzCiAKIAkvLyBSZWNlaXZlIHN0YXRpc3RpY3MKQEAgLTk1Miw3ICs5MzYsNyBAQAogCUlQV19PUkRfU1RBVF9SWF9ESVJfREFUQTExLAkvLyAjIG9mIGRpcmVjdGVkIHBhY2tldHMgYXQgMTFNQgogCUlQV19PUkRfU1RBVF9SWF9ESVJfREFUQTIyLAkvLyAjIG9mIGRpcmVjdGVkIHBhY2tldHMgYXQgMjJNQgogCi0JSVBXX09SRF9TVEFUX1JYX05PRElSX0RBVEEgPSA3MSwvLyAjIG9mIG5vbmRpcmVjdGVkIHBhY2tldHMKKwlJUFdfT1JEX1NUQVRfUlhfTk9ESVJfREFUQSA9IDcxLAkvLyAjIG9mIG5vbmRpcmVjdGVkIHBhY2tldHMKIAlJUFdfT1JEX1NUQVRfUlhfTk9ESVJfREFUQTEsCS8vICMgb2Ygbm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAxTUIKIAlJUFdfT1JEX1NUQVRfUlhfTk9ESVJfREFUQTIsCS8vICMgb2Ygbm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAyTUIKIAlJUFdfT1JEX1NUQVRfUlhfTk9ESVJfREFUQTVfNSwJLy8gIyBvZiBub25kaXJlY3RlZCBwYWNrZXRzIGF0IDUuNU1CCkBAIC05NzcsMTggKzk2MSwxOCBAQAogCUlQV19PUkRfU1RBVF9SWF9BVVRILAkvLyAjIG9mIGF1dGhlbnRpY2F0aW9uIFJ4CiAJSVBXX09SRF9TVEFUX1JYX0RFQVVUSCwJLy8gIyBvZiBkZWF1dGhlbnRpY2F0aW9uIFJ4CiAKLQlJUFdfT1JEX1NUQVRfUlhfVE9UQUxfQllURVMgPSAxMDEsLy8gVG90YWwgcnggZGF0YSBieXRlcyByZWNlaXZlZAotCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDLAkgLy8gIyBvZiBwYWNrZXRzIHdpdGggUnggQ1JDIGVycm9yCi0JSVBXX09SRF9TVEFUX1JYX0VSUl9DUkMxLAkgLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDFNQgotCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDMiwJIC8vICMgb2YgUnggQ1JDIGVycm9ycyBhdCAyTUIKLQlJUFdfT1JEX1NUQVRfUlhfRVJSX0NSQzVfNSwJIC8vICMgb2YgUnggQ1JDIGVycm9ycyBhdCA1LjVNQgotCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDMTEsCSAvLyAjIG9mIFJ4IENSQyBlcnJvcnMgYXQgMTFNQgorCUlQV19PUkRfU1RBVF9SWF9UT1RBTF9CWVRFUyA9IDEwMSwJLy8gVG90YWwgcnggZGF0YSBieXRlcyByZWNlaXZlZAorCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDLAkvLyAjIG9mIHBhY2tldHMgd2l0aCBSeCBDUkMgZXJyb3IKKwlJUFdfT1JEX1NUQVRfUlhfRVJSX0NSQzEsCS8vICMgb2YgUnggQ1JDIGVycm9ycyBhdCAxTUIKKwlJUFdfT1JEX1NUQVRfUlhfRVJSX0NSQzIsCS8vICMgb2YgUnggQ1JDIGVycm9ycyBhdCAyTUIKKwlJUFdfT1JEX1NUQVRfUlhfRVJSX0NSQzVfNSwJLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDUuNU1CCisJSVBXX09SRF9TVEFUX1JYX0VSUl9DUkMxMSwJLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDExTUIKIAotCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUxID0gMTEyLCAvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDFNQgotCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUyLAkgLy8gIyBvZiBkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAyTUIKLQlJUFdfT1JEX1NUQVRfUlhfRFVQTElDQVRFNV81LAkgLy8gIyBvZiBkdXBsaWNhdGUgcnggcGFja2V0cyBhdCA1LjVNQgotCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUxMSwJIC8vICMgb2YgZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMTFNQgotCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUgPSAxMTksIC8vICMgb2YgZHVwbGljYXRlIHJ4IHBhY2tldHMKKwlJUFdfT1JEX1NUQVRfUlhfRFVQTElDQVRFMSA9IDExMiwJLy8gIyBvZiBkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAxTUIKKwlJUFdfT1JEX1NUQVRfUlhfRFVQTElDQVRFMiwJLy8gIyBvZiBkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAyTUIKKwlJUFdfT1JEX1NUQVRfUlhfRFVQTElDQVRFNV81LAkvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDUuNU1CCisJSVBXX09SRF9TVEFUX1JYX0RVUExJQ0FURTExLAkvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDExTUIKKwlJUFdfT1JEX1NUQVRfUlhfRFVQTElDQVRFID0gMTE5LAkvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzCiAKIAlJUFdfT1JEX1BFUlNfREJfTE9DSyA9IDEyMCwJLy8gIyBsb2NraW5nIGZ3IHBlcm1hbmVudCAgZGIKIAlJUFdfT1JEX1BFUlNfREJfU0laRSwJLy8gIyBzaXplIG9mIGZ3IHBlcm1hbmVudCAgZGIKQEAgLTEwMDYsMTcgKzk5MCwxNyBAQAogCUlQV19PUkRfU1RBVF9SWF9JQ1ZfRVJST1JTLAkvLyAjIG9mIElDViBlcnJvcnMgZHVyaW5nIGRlY3J5cHRpb24KIAogLy8gUFNQIFN0YXRpc3RpY3MKLQlJUFdfT1JEX1NUQVRfUFNQX1NVU1BFTlNJT04gPSAxMzcsLy8gIyBvZiB0aW1lcyBhZGFwdGVyIHN1c3BlbmRlZAorCUlQV19PUkRfU1RBVF9QU1BfU1VTUEVOU0lPTiA9IDEzNywJLy8gIyBvZiB0aW1lcyBhZGFwdGVyIHN1c3BlbmRlZAogCUlQV19PUkRfU1RBVF9QU1BfQkNOX1RJTUVPVVQsCS8vICMgb2YgYmVhY29uIHRpbWVvdXQKIAlJUFdfT1JEX1NUQVRfUFNQX1BPTExfVElNRU9VVCwJLy8gIyBvZiBwb2xsIHJlc3BvbnNlIHRpbWVvdXRzCi0JSVBXX09SRF9TVEFUX1BTUF9OT05ESVJfVElNRU9VVCwvLyAjIG9mIHRpbWVvdXRzIHdhaXRpbmcgZm9yIGxhc3QgYnJvYWRjYXN0L211dGljYXN0IHBrdAorCUlQV19PUkRfU1RBVF9QU1BfTk9ORElSX1RJTUVPVVQsCS8vICMgb2YgdGltZW91dHMgd2FpdGluZyBmb3IgbGFzdCBicm9hZGNhc3QvbXV0aWNhc3QgcGt0CiAJSVBXX09SRF9TVEFUX1BTUF9SWF9EVElNUywJLy8gIyBvZiBQU1AgRFRJTXMgcmVjZWl2ZWQKIAlJUFdfT1JEX1NUQVRfUFNQX1JYX1RJTVMsCS8vICMgb2YgUFNQIFRJTXMgcmVjZWl2ZWQKIAlJUFdfT1JEX1NUQVRfUFNQX1NUQVRJT05fSUQsCS8vIFBTUCBTdGF0aW9uIElECiAKIC8vIEFzc29jaWF0aW9uIGFuZCByb2FtaW5nCiAJSVBXX09SRF9MQVNUX0FTU05fVElNRSA9IDE0NywJLy8gUlRDIHRpbWUgb2YgbGFzdCBhc3NvY2lhdGlvbgotCUlQV19PUkRfU1RBVF9QRVJDRU5UX01JU1NFRF9CQ05TLC8vIGN1cnJlbnQgY2FsY3VsYXRpb24gb2YgJSBtaXNzZWQgYmVhY29ucworCUlQV19PUkRfU1RBVF9QRVJDRU5UX01JU1NFRF9CQ05TLAkvLyBjdXJyZW50IGNhbGN1bGF0aW9uIG9mICUgbWlzc2VkIGJlYWNvbnMKIAlJUFdfT1JEX1NUQVRfUEVSQ0VOVF9SRVRSSUVTLAkvLyBjdXJyZW50IGNhbGN1bGF0aW9uIG9mICUgbWlzc2VkIHR4IHJldHJpZXMKIAlJUFdfT1JEX0FTU09DSUFURURfQVBfUFRSLAkvLyBJZiBhc3NvY2lhdGVkLCB0aGlzIGlzIHB0ciB0byB0aGUgYXNzb2NpYXRlZAogCS8vIEFQIHRhYmxlIGVudHJ5LiBzZXQgdG8gMCBpZiBub3QgYXNzb2NpYXRlZApAQCAtMTE1MSw3ICsxMTM1LDcgQEAKIH07CiAKIHN0cnVjdCBpcHcyMTAwX2Z3X2NodW5rX3NldCB7Ci0gICAJY29uc3Qgdm9pZCAqZGF0YTsKKwljb25zdCB2b2lkICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIH07CiAKQEAgLTExNjQsNCArMTE0OCw0IEBACiAKICNkZWZpbmUgTUFYX0ZXX1ZFUlNJT05fTEVOIDE0CiAKLSNlbmRpZiAvKiBfSVBXMjEwMF9IICovCisjZW5kaWYJCQkJLyogX0lQVzIxMDBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCmluZGV4IDNkYjBjMzIuLmIwZDE5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLSAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA0IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgODAyLjExIHN0YXR1cyBjb2RlIHBvcnRpb24gb2YgdGhpcyBmaWxlIGZyb20gZXRoZXJlYWwtMC4xMC42OgogICAgIENvcHlyaWdodCAyMDAwLCBBeGlzIENvbW11bmljYXRpb25zIEFCCkBAIC0zMSwzMCArMzEsMTAzIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJpcHcyMjAwLmgiCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiMS4wLjAiCisjZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiZ2l0LTEuMC44IgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkludGVsKFIpIFBSTy9XaXJlbGVzcyAyMjAwLzI5MTUgTmV0d29yayBEcml2ZXIiCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDUgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIERSVl9WRVJTSU9OICAgICBJUFcyMjAwX1ZFUlNJT04KIAorI2RlZmluZSBFVEhfUF84MDIxMV9TVEFUUyAoRVRIX1BfODAyMTFfUkFXICsgMSkKKwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiBNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IGNtZGxvZyA9IDA7CiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIHN0YXRpYyBpbnQgY2hhbm5lbCA9IDA7Ci1zdGF0aWMgY2hhciAqaWZuYW1lOwogc3RhdGljIGludCBtb2RlID0gMDsKIAogc3RhdGljIHUzMiBpcHdfZGVidWdfbGV2ZWw7CiBzdGF0aWMgaW50IGFzc29jaWF0ZSA9IDE7CiBzdGF0aWMgaW50IGF1dG9fY3JlYXRlID0gMTsKK3N0YXRpYyBpbnQgbGVkID0gMDsKIHN0YXRpYyBpbnQgZGlzYWJsZSA9IDA7CitzdGF0aWMgaW50IGh3Y3J5cHRvID0gMTsKIHN0YXRpYyBjb25zdCBjaGFyIGlwd19tb2Rlc1tdID0gewogCSdhJywgJ2InLCAnZycsICc/JwogfTsKIAorI2lmZGVmIENPTkZJR19JUFdfUU9TCitzdGF0aWMgaW50IHFvc19lbmFibGUgPSAwOworc3RhdGljIGludCBxb3NfYnVyc3RfZW5hYmxlID0gMDsKK3N0YXRpYyBpbnQgcW9zX25vX2Fja19tYXNrID0gMDsKK3N0YXRpYyBpbnQgYnVyc3RfZHVyYXRpb25fQ0NLID0gMDsKK3N0YXRpYyBpbnQgYnVyc3RfZHVyYXRpb25fT0ZETSA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIGRlZl9xb3NfcGFyYW1ldGVyc19PRkRNID0geworCXtRT1NfVFgwX0NXX01JTl9PRkRNLCBRT1NfVFgxX0NXX01JTl9PRkRNLCBRT1NfVFgyX0NXX01JTl9PRkRNLAorCSBRT1NfVFgzX0NXX01JTl9PRkRNfSwKKwl7UU9TX1RYMF9DV19NQVhfT0ZETSwgUU9TX1RYMV9DV19NQVhfT0ZETSwgUU9TX1RYMl9DV19NQVhfT0ZETSwKKwkgUU9TX1RYM19DV19NQVhfT0ZETX0sCisJe1FPU19UWDBfQUlGUywgUU9TX1RYMV9BSUZTLCBRT1NfVFgyX0FJRlMsIFFPU19UWDNfQUlGU30sCisJe1FPU19UWDBfQUNNLCBRT1NfVFgxX0FDTSwgUU9TX1RYMl9BQ00sIFFPU19UWDNfQUNNfSwKKwl7UU9TX1RYMF9UWE9QX0xJTUlUX09GRE0sIFFPU19UWDFfVFhPUF9MSU1JVF9PRkRNLAorCSBRT1NfVFgyX1RYT1BfTElNSVRfT0ZETSwgUU9TX1RYM19UWE9QX0xJTUlUX09GRE19Cit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBkZWZfcW9zX3BhcmFtZXRlcnNfQ0NLID0geworCXtRT1NfVFgwX0NXX01JTl9DQ0ssIFFPU19UWDFfQ1dfTUlOX0NDSywgUU9TX1RYMl9DV19NSU5fQ0NLLAorCSBRT1NfVFgzX0NXX01JTl9DQ0t9LAorCXtRT1NfVFgwX0NXX01BWF9DQ0ssIFFPU19UWDFfQ1dfTUFYX0NDSywgUU9TX1RYMl9DV19NQVhfQ0NLLAorCSBRT1NfVFgzX0NXX01BWF9DQ0t9LAorCXtRT1NfVFgwX0FJRlMsIFFPU19UWDFfQUlGUywgUU9TX1RYMl9BSUZTLCBRT1NfVFgzX0FJRlN9LAorCXtRT1NfVFgwX0FDTSwgUU9TX1RYMV9BQ00sIFFPU19UWDJfQUNNLCBRT1NfVFgzX0FDTX0sCisJe1FPU19UWDBfVFhPUF9MSU1JVF9DQ0ssIFFPU19UWDFfVFhPUF9MSU1JVF9DQ0ssIFFPU19UWDJfVFhPUF9MSU1JVF9DQ0ssCisJIFFPU19UWDNfVFhPUF9MSU1JVF9DQ0t9Cit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19PRkRNID0geworCXtERUZfVFgwX0NXX01JTl9PRkRNLCBERUZfVFgxX0NXX01JTl9PRkRNLCBERUZfVFgyX0NXX01JTl9PRkRNLAorCSBERUZfVFgzX0NXX01JTl9PRkRNfSwKKwl7REVGX1RYMF9DV19NQVhfT0ZETSwgREVGX1RYMV9DV19NQVhfT0ZETSwgREVGX1RYMl9DV19NQVhfT0ZETSwKKwkgREVGX1RYM19DV19NQVhfT0ZETX0sCisJe0RFRl9UWDBfQUlGUywgREVGX1RYMV9BSUZTLCBERUZfVFgyX0FJRlMsIERFRl9UWDNfQUlGU30sCisJe0RFRl9UWDBfQUNNLCBERUZfVFgxX0FDTSwgREVGX1RYMl9BQ00sIERFRl9UWDNfQUNNfSwKKwl7REVGX1RYMF9UWE9QX0xJTUlUX09GRE0sIERFRl9UWDFfVFhPUF9MSU1JVF9PRkRNLAorCSBERUZfVFgyX1RYT1BfTElNSVRfT0ZETSwgREVGX1RYM19UWE9QX0xJTUlUX09GRE19Cit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19DQ0sgPSB7CisJe0RFRl9UWDBfQ1dfTUlOX0NDSywgREVGX1RYMV9DV19NSU5fQ0NLLCBERUZfVFgyX0NXX01JTl9DQ0ssCisJIERFRl9UWDNfQ1dfTUlOX0NDS30sCisJe0RFRl9UWDBfQ1dfTUFYX0NDSywgREVGX1RYMV9DV19NQVhfQ0NLLCBERUZfVFgyX0NXX01BWF9DQ0ssCisJIERFRl9UWDNfQ1dfTUFYX0NDS30sCisJe0RFRl9UWDBfQUlGUywgREVGX1RYMV9BSUZTLCBERUZfVFgyX0FJRlMsIERFRl9UWDNfQUlGU30sCisJe0RFRl9UWDBfQUNNLCBERUZfVFgxX0FDTSwgREVGX1RYMl9BQ00sIERFRl9UWDNfQUNNfSwKKwl7REVGX1RYMF9UWE9QX0xJTUlUX0NDSywgREVGX1RYMV9UWE9QX0xJTUlUX0NDSywgREVGX1RYMl9UWE9QX0xJTUlUX0NDSywKKwkgREVGX1RYM19UWE9QX0xJTUlUX0NDS30KK307CisKK3N0YXRpYyB1OCBxb3Nfb3VpW1FPU19PVUlfTEVOXSA9IHsgMHgwMCwgMHg1MCwgMHhGMiB9OworCitzdGF0aWMgaW50IGZyb21fcHJpb3JpdHlfdG9fdHhfcXVldWVbXSA9IHsKKwlJUFdfVFhfUVVFVUVfMSwgSVBXX1RYX1FVRVVFXzIsIElQV19UWF9RVUVVRV8yLCBJUFdfVFhfUVVFVUVfMSwKKwlJUFdfVFhfUVVFVUVfMywgSVBXX1RYX1FVRVVFXzMsIElQV19UWF9RVUVVRV80LCBJUFdfVFhfUVVFVUVfNAorfTsKKworc3RhdGljIHUzMiBpcHdfcW9zX2dldF9idXJzdF9kdXJhdGlvbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpOworCitzdGF0aWMgaW50IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKKwkJCQkgICAgICAgKnFvc19wYXJhbSk7CitzdGF0aWMgaW50IGlwd19zZW5kX3Fvc19pbmZvX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CisJCQkJICAgICAqcW9zX3BhcmFtKTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworCitzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmlwd19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpOwogc3RhdGljIHZvaWQgaXB3X3J4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CiBzdGF0aWMgaW50IGlwd19xdWV1ZV90eF9yZWNsYWltKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxLCBpbnQgcWluZGV4KTsKQEAgLTY4LDQyICsxNDEsMjQgQEAKIHN0YXRpYyBzdHJ1Y3QgaXB3X3J4X3F1ZXVlICppcHdfcnhfcXVldWVfYWxsb2Moc3RydWN0IGlwd19wcml2ICopOwogc3RhdGljIHZvaWQgaXB3X3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGlwd19wcml2ICosIHN0cnVjdCBpcHdfcnhfcXVldWUgKik7CiBzdGF0aWMgdm9pZCBpcHdfcnhfcXVldWVfcmVwbGVuaXNoKHZvaWQgKik7Ci0KIHN0YXRpYyBpbnQgaXB3X3VwKHN0cnVjdCBpcHdfcHJpdiAqKTsKK3N0YXRpYyB2b2lkIGlwd19iZ191cCh2b2lkICopOwogc3RhdGljIHZvaWQgaXB3X2Rvd24oc3RydWN0IGlwd19wcml2ICopOworc3RhdGljIHZvaWQgaXB3X2JnX2Rvd24odm9pZCAqKTsKIHN0YXRpYyBpbnQgaXB3X2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKik7CiBzdGF0aWMgaW50IGluaXRfc3VwcG9ydGVkX3JhdGVzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyAqcHJhdGVzKTsKK3N0YXRpYyB2b2lkIGlwd19zZXRfaHdjcnlwdG9fa2V5cyhzdHJ1Y3QgaXB3X3ByaXYgKik7CitzdGF0aWMgdm9pZCBpcHdfc2VuZF93ZXBfa2V5cyhzdHJ1Y3QgaXB3X3ByaXYgKiwgaW50KTsKIAotc3RhdGljIHU4IGJhbmRfYl9hY3RpdmVfY2hhbm5lbFtNQVhfQl9DSEFOTkVMU10gPSB7Ci0JMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAwCi19Owotc3RhdGljIHU4IGJhbmRfYV9hY3RpdmVfY2hhbm5lbFtNQVhfQV9DSEFOTkVMU10gPSB7Ci0JMzYsIDQwLCA0NCwgNDgsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1LCA1MiwgNTYsIDYwLCA2NCwgMAotfTsKK3N0YXRpYyBpbnQgaXB3X2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiwgdTgpOworc3RhdGljIGludCBpcHdfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCB1OCk7CitzdGF0aWMgdTggaXB3X2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCB1MzIpOworc3RhdGljIGludCBpcHdfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqaXB3X2dldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKik7CiAKLXN0YXRpYyBpbnQgaXNfdmFsaWRfY2hhbm5lbChpbnQgbW9kZV9tYXNrLCBpbnQgY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCWlmICghY2hhbm5lbCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobW9kZV9tYXNrICYgSUVFRV9BKQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FfQ0hBTk5FTFM7IGkrKykKLQkJCWlmIChiYW5kX2FfYWN0aXZlX2NoYW5uZWxbaV0gPT0gY2hhbm5lbCkKLQkJCQlyZXR1cm4gSUVFRV9BOwotCi0JaWYgKG1vZGVfbWFzayAmIChJRUVFX0IgfCBJRUVFX0cpKQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JfQ0hBTk5FTFM7IGkrKykKLQkJCWlmIChiYW5kX2JfYWN0aXZlX2NoYW5uZWxbaV0gPT0gY2hhbm5lbCkKLQkJCQlyZXR1cm4gbW9kZV9tYXNrICYgKElFRUVfQiB8IElFRUVfRyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNoYXIgKnNucHJpbnRfbGluZShjaGFyICpidWYsIHNpemVfdCBjb3VudCwKLQkJCSAgY29uc3QgdTggKiBkYXRhLCB1MzIgbGVuLCB1MzIgb2ZzKQorc3RhdGljIGludCBzbnByaW50X2xpbmUoY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQljb25zdCB1OCAqIGRhdGEsIHUzMiBsZW4sIHUzMiBvZnMpCiB7CiAJaW50IG91dCwgaSwgaiwgbDsKIAljaGFyIGM7CkBAIC0xMzQsNyArMTg5LDcgQEAKIAkJCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGNvdW50IC0gb3V0LCAiICIpOwogCX0KIAotCXJldHVybiBidWY7CisJcmV0dXJuIG91dDsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRrX2J1ZihpbnQgbGV2ZWwsIGNvbnN0IHU4ICogZGF0YSwgdTMyIGxlbikKQEAgLTE0NSwxNCArMjAwLDMzIEBACiAJCXJldHVybjsKIAogCXdoaWxlIChsZW4pIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLAotCQkgICAgICAgc25wcmludF9saW5lKGxpbmUsIHNpemVvZihsaW5lKSwgJmRhdGFbb2ZzXSwKLQkJCQkgICAgbWluKGxlbiwgMTZVKSwgb2ZzKSk7CisJCXNucHJpbnRfbGluZShsaW5lLCBzaXplb2YobGluZSksICZkYXRhW29mc10sCisJCQkgICAgIG1pbihsZW4sIDE2VSksIG9mcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgbGluZSk7CiAJCW9mcyArPSAxNjsKIAkJbGVuIC09IG1pbihsZW4sIDE2VSk7CiAJfQogfQogCitzdGF0aWMgaW50IHNucHJpbnRrX2J1Zih1OCAqIG91dHB1dCwgc2l6ZV90IHNpemUsIGNvbnN0IHU4ICogZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3Qgb3V0ID0gc2l6ZTsKKwl1MzIgb2ZzID0gMDsKKwlpbnQgdG90YWwgPSAwOworCisJd2hpbGUgKHNpemUgJiYgbGVuKSB7CisJCW91dCA9IHNucHJpbnRfbGluZShvdXRwdXQsIHNpemUsICZkYXRhW29mc10sCisJCQkJICAgbWluX3Qoc2l6ZV90LCBsZW4sIDE2VSksIG9mcyk7CisKKwkJb2ZzICs9IDE2OworCQlvdXRwdXQgKz0gb3V0OworCQlzaXplIC09IG91dDsKKwkJbGVuIC09IG1pbl90KHNpemVfdCwgbGVuLCAxNlUpOworCQl0b3RhbCArPSBvdXQ7CisJfQorCXJldHVybiB0b3RhbDsKK30KKwogc3RhdGljIHUzMiBfaXB3X3JlYWRfcmVnMzIoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnKTsKICNkZWZpbmUgaXB3X3JlYWRfcmVnMzIoYSwgYikgX2lwd19yZWFkX3JlZzMyKGEsIGIpCiAKQEAgLTIyNiwzOCArMzAwLDQyIEBACiAjZGVmaW5lIGlwd19yZWFkMzIoaXB3LCBvZnMpIF9faXB3X3JlYWQzMihfX0ZJTEVfXywgX19MSU5FX18sIGlwdywgb2ZzKQogCiBzdGF0aWMgdm9pZCBfaXB3X3JlYWRfaW5kaXJlY3Qoc3RydWN0IGlwd19wcml2ICosIHUzMiwgdTggKiwgaW50KTsKLSNkZWZpbmUgaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCkgXAotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfaW5kZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikoYiksIGQpOyBcCi0JX2lwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pcHdfcmVhZF9pbmRpcmVjdChjb25zdCBjaGFyICpmLCBpbnQgbCwKKwkJCQkgICAgICAgc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTggKiBjLCBpbnQgZCkKK3sKKwlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2luZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIGYsIGwsICh1MzIpIChiKSwKKwkJICAgICBkKTsKKwlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7Cit9CisKKyNkZWZpbmUgaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCkgX19pcHdfcmVhZF9pbmRpcmVjdChfX0ZJTEVfXywgX19MSU5FX18sIGEsIGIsIGMsIGQpCiAKIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgYWRkciwgdTggKiBkYXRhLAogCQkJCWludCBudW0pOwogI2RlZmluZSBpcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkgXAogCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2luZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikoYiksIGQpOyBcCi0gICAgICAgIF9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkKKwlfaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpCiAKIC8qIGluZGlyZWN0IHdyaXRlIHMgKi8KIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfcmVnMzIoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsdWUpCiB7CiAJSVBXX0RFQlVHX0lPKCIgJXAgOiByZWcgPSAweCU4WCA6IHZhbHVlID0gMHglOFhcbiIsIHByaXYsIHJlZywgdmFsdWUpOwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgcmVnKTsKLQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0RBVEEsIHZhbHVlKTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIHJlZyk7CisJX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9EQVRBLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfcmVnOChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcsIHU4IHZhbHVlKQogewogCUlQV19ERUJVR19JTygiIHJlZyA9IDB4JThYIDogdmFsdWUgPSAweCU4WFxuIiwgcmVnLCB2YWx1ZSk7Ci0JX2lwd193cml0ZTMyKHByaXYsIENYMl9JTkRJUkVDVF9BRERSLCByZWcgJiBDWDJfSU5ESVJFQ1RfQUREUl9NQVNLKTsKLQlfaXB3X3dyaXRlOChwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSwgdmFsdWUpOwotCUlQV19ERUJVR19JTygiIHJlZyA9IDB4JThsWCA6IHZhbHVlID0gMHglOFhcbiIsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpKHByaXYtPmh3X2Jhc2UgKyBDWDJfSU5ESVJFQ1RfREFUQSksIHZhbHVlKTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIHJlZyAmIElQV19JTkRJUkVDVF9BRERSX01BU0spOworCV9pcHdfd3JpdGU4KHByaXYsIElQV19JTkRJUkVDVF9EQVRBLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfcmVnMTYoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1MTYgdmFsdWUpCiB7CiAJSVBXX0RFQlVHX0lPKCIgcmVnID0gMHglOFggOiB2YWx1ZSA9IDB4JThYXG4iLCByZWcsIHZhbHVlKTsKLQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0FERFIsIHJlZyAmIENYMl9JTkRJUkVDVF9BRERSX01BU0spOwotCV9pcHdfd3JpdGUxNihwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSwgdmFsdWUpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgcmVnICYgSVBXX0lORElSRUNUX0FERFJfTUFTSyk7CisJX2lwd193cml0ZTE2KHByaXYsIElQV19JTkRJUkVDVF9EQVRBLCB2YWx1ZSk7CiB9CiAKIC8qIGluZGlyZWN0IHJlYWQgcyAqLwpAQCAtMjY1LDkgKzM0Myw5IEBACiBzdGF0aWMgdTggX2lwd19yZWFkX3JlZzgoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnKQogewogCXUzMiB3b3JkOwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgcmVnICYgQ1gyX0lORElSRUNUX0FERFJfTUFTSyk7CisJX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9BRERSLCByZWcgJiBJUFdfSU5ESVJFQ1RfQUREUl9NQVNLKTsKIAlJUFdfREVCVUdfSU8oIiByZWcgPSAweCU4WCA6IFxuIiwgcmVnKTsKLQl3b3JkID0gX2lwd19yZWFkMzIocHJpdiwgQ1gyX0lORElSRUNUX0RBVEEpOworCXdvcmQgPSBfaXB3X3JlYWQzMihwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSk7CiAJcmV0dXJuICh3b3JkID4+ICgocmVnICYgMHgzKSAqIDgpKSAmIDB4ZmY7CiB9CiAKQEAgLTI3Nyw4ICszNTUsOCBAQAogCiAJSVBXX0RFQlVHX0lPKCIlcCA6IHJlZyA9IDB4JTA4eFxuIiwgcHJpdiwgcmVnKTsKIAotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgcmVnKTsKLQl2YWx1ZSA9IF9pcHdfcmVhZDMyKHByaXYsIENYMl9JTkRJUkVDVF9EQVRBKTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIHJlZyk7CisJdmFsdWUgPSBfaXB3X3JlYWQzMihwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSk7CiAJSVBXX0RFQlVHX0lPKCIgcmVnID0gMHglNFggOiB2YWx1ZSA9IDB4JTR4IFxuIiwgcmVnLCB2YWx1ZSk7CiAJcmV0dXJuIHZhbHVlOwogfQpAQCAtMjg3LDY3ICszNjUsNjkgQEAKIHN0YXRpYyB2b2lkIF9pcHdfcmVhZF9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1OCAqIGJ1ZiwKIAkJCSAgICAgICBpbnQgbnVtKQogewotCXUzMiBhbGlnbmVkX2FkZHIgPSBhZGRyICYgQ1gyX0lORElSRUNUX0FERFJfTUFTSzsKKwl1MzIgYWxpZ25lZF9hZGRyID0gYWRkciAmIElQV19JTkRJUkVDVF9BRERSX01BU0s7CiAJdTMyIGRpZl9sZW4gPSBhZGRyIC0gYWxpZ25lZF9hZGRyOwotCXUzMiBhbGlnbmVkX2xlbjsKIAl1MzIgaTsKIAogCUlQV19ERUJVR19JTygiYWRkciA9ICVpLCBidWYgPSAlcCwgbnVtID0gJWlcbiIsIGFkZHIsIGJ1ZiwgbnVtKTsKIAorCWlmIChudW0gPD0gMCkgeworCQlyZXR1cm47CisJfQorCiAJLyogUmVhZCB0aGUgZmlyc3QgbmliYmxlIGJ5dGUgYnkgYnl0ZSAqLwogCWlmICh1bmxpa2VseShkaWZfbGVuKSkgeworCQlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7CiAJCS8qIFN0YXJ0IHJlYWRpbmcgYXQgYWxpZ25lZF9hZGRyICsgZGlmX2xlbiAqLwotCQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7Ci0JCWZvciAoaSA9IGRpZl9sZW47IGkgPCA0OyBpKyssIGJ1ZisrKQotCQkJKmJ1ZiA9IF9pcHdfcmVhZDgocHJpdiwgQ1gyX0lORElSRUNUX0RBVEEgKyBpKTsKLQkJbnVtIC09IGRpZl9sZW47CisJCWZvciAoaSA9IGRpZl9sZW47ICgoaSA8IDQpICYmIChudW0gPiAwKSk7IGkrKywgbnVtLS0pCisJCQkqYnVmKysgPSBfaXB3X3JlYWQ4KHByaXYsIElQV19JTkRJUkVDVF9EQVRBICsgaSk7CiAJCWFsaWduZWRfYWRkciArPSA0OwogCX0KIAotCS8qIFJlYWQgRFdzIHRocm91Z2ggYXV0b2luYyByZWdpc3RlciAqLwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfQVVUT0lOQ19BRERSLCBhbGlnbmVkX2FkZHIpOwotCWFsaWduZWRfbGVuID0gbnVtICYgQ1gyX0lORElSRUNUX0FERFJfTUFTSzsKLQlmb3IgKGkgPSAwOyBpIDwgYWxpZ25lZF9sZW47IGkgKz0gNCwgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0KQotCQkqKHUzMiAqKSBidWYgPSBpcHdfcmVhZDMyKHByaXYsIENYMl9BVVRPSU5DX0RBVEEpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfQVVUT0lOQ19BRERSLCBhbGlnbmVkX2FkZHIpOworCWZvciAoOyBudW0gPj0gNDsgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0LCBudW0gLT0gNCkKKwkJKih1MzIgKikgYnVmID0gX2lwd19yZWFkMzIocHJpdiwgSVBXX0FVVE9JTkNfREFUQSk7CiAKIAkvKiBDb3B5IHRoZSBsYXN0IG5pYmJsZSAqLwotCWRpZl9sZW4gPSBudW0gLSBhbGlnbmVkX2xlbjsKLQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IGRpZl9sZW47IGkrKywgYnVmKyspCi0JCSpidWYgPSBpcHdfcmVhZDgocHJpdiwgQ1gyX0lORElSRUNUX0RBVEEgKyBpKTsKKwlpZiAodW5saWtlbHkobnVtKSkgeworCQlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7CisJCWZvciAoaSA9IDA7IG51bSA+IDA7IGkrKywgbnVtLS0pCisJCQkqYnVmKysgPSBpcHdfcmVhZDgocHJpdiwgSVBXX0lORElSRUNUX0RBVEEgKyBpKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgYWRkciwgdTggKiBidWYsCiAJCQkJaW50IG51bSkKIHsKLQl1MzIgYWxpZ25lZF9hZGRyID0gYWRkciAmIENYMl9JTkRJUkVDVF9BRERSX01BU0s7CisJdTMyIGFsaWduZWRfYWRkciA9IGFkZHIgJiBJUFdfSU5ESVJFQ1RfQUREUl9NQVNLOwogCXUzMiBkaWZfbGVuID0gYWRkciAtIGFsaWduZWRfYWRkcjsKLQl1MzIgYWxpZ25lZF9sZW47CiAJdTMyIGk7CiAKIAlJUFdfREVCVUdfSU8oImFkZHIgPSAlaSwgYnVmID0gJXAsIG51bSA9ICVpXG4iLCBhZGRyLCBidWYsIG51bSk7CiAKKwlpZiAobnVtIDw9IDApIHsKKwkJcmV0dXJuOworCX0KKwogCS8qIFdyaXRlIHRoZSBmaXJzdCBuaWJibGUgYnl0ZSBieSBieXRlICovCiAJaWYgKHVubGlrZWx5KGRpZl9sZW4pKSB7Ci0JCS8qIFN0YXJ0IHdyaXRpbmcgYXQgYWxpZ25lZF9hZGRyICsgZGlmX2xlbiAqLwotCQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7Ci0JCWZvciAoaSA9IGRpZl9sZW47IGkgPCA0OyBpKyssIGJ1ZisrKQotCQkJX2lwd193cml0ZTgocHJpdiwgQ1gyX0lORElSRUNUX0RBVEEgKyBpLCAqYnVmKTsKLQkJbnVtIC09IGRpZl9sZW47CisJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKKwkJLyogU3RhcnQgcmVhZGluZyBhdCBhbGlnbmVkX2FkZHIgKyBkaWZfbGVuICovCisJCWZvciAoaSA9IGRpZl9sZW47ICgoaSA8IDQpICYmIChudW0gPiAwKSk7IGkrKywgbnVtLS0sIGJ1ZisrKQorCQkJX2lwd193cml0ZTgocHJpdiwgSVBXX0lORElSRUNUX0RBVEEgKyBpLCAqYnVmKTsKIAkJYWxpZ25lZF9hZGRyICs9IDQ7CiAJfQogCi0JLyogV3JpdGUgRFdzIHRocm91Z2ggYXV0b2luYyByZWdpc3RlciAqLwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfQVVUT0lOQ19BRERSLCBhbGlnbmVkX2FkZHIpOwotCWFsaWduZWRfbGVuID0gbnVtICYgQ1gyX0lORElSRUNUX0FERFJfTUFTSzsKLQlmb3IgKGkgPSAwOyBpIDwgYWxpZ25lZF9sZW47IGkgKz0gNCwgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0KQotCQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0FVVE9JTkNfREFUQSwgKih1MzIgKikgYnVmKTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0FVVE9JTkNfQUREUiwgYWxpZ25lZF9hZGRyKTsKKwlmb3IgKDsgbnVtID49IDQ7IGJ1ZiArPSA0LCBhbGlnbmVkX2FkZHIgKz0gNCwgbnVtIC09IDQpCisJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfQVVUT0lOQ19EQVRBLCAqKHUzMiAqKSBidWYpOwogCiAJLyogQ29weSB0aGUgbGFzdCBuaWJibGUgKi8KLQlkaWZfbGVuID0gbnVtIC0gYWxpZ25lZF9sZW47Ci0JX2lwd193cml0ZTMyKHByaXYsIENYMl9JTkRJUkVDVF9BRERSLCBhbGlnbmVkX2FkZHIpOwotCWZvciAoaSA9IDA7IGkgPCBkaWZfbGVuOyBpKyssIGJ1ZisrKQotCQlfaXB3X3dyaXRlOChwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSArIGksICpidWYpOworCWlmICh1bmxpa2VseShudW0pKSB7CisJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKKwkJZm9yIChpID0gMDsgbnVtID4gMDsgaSsrLCBudW0tLSwgYnVmKyspCisJCQlfaXB3X3dyaXRlOChwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSArIGksICpidWYpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaXB3X3dyaXRlX2RpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB2b2lkICpidWYsCkBAIC0zNzEsNyArNDUxLDcgQEAKIAlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOVF9FTkFCTEVEKQogCQlyZXR1cm47CiAJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19JTlRfRU5BQkxFRDsKLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfSU5UQV9NQVNLX1IsIENYMl9JTlRBX01BU0tfQUxMKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9NQVNLX1IsIElQV19JTlRBX01BU0tfQUxMKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGlwd19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGlwd19wcml2ICpwcml2KQpAQCAtMzc5LDkgKzQ1OSwxMCBAQAogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTlRfRU5BQkxFRCkpCiAJCXJldHVybjsKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19JTlRfRU5BQkxFRDsKLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfSU5UQV9NQVNLX1IsIH5DWDJfSU5UQV9NQVNLX0FMTCk7CisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfTUFTS19SLCB+SVBXX0lOVEFfTUFTS19BTEwpOwogfQogCisjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogc3RhdGljIGNoYXIgKmlwd19lcnJvcl9kZXNjKHUzMiB2YWwpCiB7CiAJc3dpdGNoICh2YWwpIHsKQEAgLTM5NCw4MSArNDc1LDY1IEBACiAJY2FzZSBJUFdfRldfRVJST1JfTUVNT1JZX09WRVJGTE9XOgogCQlyZXR1cm4gIk1FTU9SWV9PVkVSRkxPVyI7CiAJY2FzZSBJUFdfRldfRVJST1JfQkFEX1BBUkFNOgotCQlyZXR1cm4gIkVSUk9SX0JBRF9QQVJBTSI7CisJCXJldHVybiAiQkFEX1BBUkFNIjsKIAljYXNlIElQV19GV19FUlJPUl9CQURfQ0hFQ0tTVU06Ci0JCXJldHVybiAiRVJST1JfQkFEX0NIRUNLU1VNIjsKKwkJcmV0dXJuICJCQURfQ0hFQ0tTVU0iOwogCWNhc2UgSVBXX0ZXX0VSUk9SX05NSV9JTlRFUlJVUFQ6Ci0JCXJldHVybiAiRVJST1JfTk1JX0lOVEVSUlVQVCI7CisJCXJldHVybiAiTk1JX0lOVEVSUlVQVCI7CiAJY2FzZSBJUFdfRldfRVJST1JfQkFEX0RBVEFCQVNFOgotCQlyZXR1cm4gIkVSUk9SX0JBRF9EQVRBQkFTRSI7CisJCXJldHVybiAiQkFEX0RBVEFCQVNFIjsKIAljYXNlIElQV19GV19FUlJPUl9BTExPQ19GQUlMOgotCQlyZXR1cm4gIkVSUk9SX0FMTE9DX0ZBSUwiOworCQlyZXR1cm4gIkFMTE9DX0ZBSUwiOwogCWNhc2UgSVBXX0ZXX0VSUk9SX0RNQV9VTkRFUlJVTjoKLQkJcmV0dXJuICJFUlJPUl9ETUFfVU5ERVJSVU4iOworCQlyZXR1cm4gIkRNQV9VTkRFUlJVTiI7CiAJY2FzZSBJUFdfRldfRVJST1JfRE1BX1NUQVRVUzoKLQkJcmV0dXJuICJFUlJPUl9ETUFfU1RBVFVTIjsKLQljYXNlIElQV19GV19FUlJPUl9ESU5PU1RBVFVTX0VSUk9SOgotCQlyZXR1cm4gIkVSUk9SX0RJTk9TVEFUVVNfRVJST1IiOwotCWNhc2UgSVBXX0ZXX0VSUk9SX0VFUFJPTVNUQVRVU19FUlJPUjoKLQkJcmV0dXJuICJFUlJPUl9FRVBST01TVEFUVVNfRVJST1IiOworCQlyZXR1cm4gIkRNQV9TVEFUVVMiOworCWNhc2UgSVBXX0ZXX0VSUk9SX0RJTk9fRVJST1I6CisJCXJldHVybiAiRElOT19FUlJPUiI7CisJY2FzZSBJUFdfRldfRVJST1JfRUVQUk9NX0VSUk9SOgorCQlyZXR1cm4gIkVFUFJPTV9FUlJPUiI7CiAJY2FzZSBJUFdfRldfRVJST1JfU1lTQVNTRVJUOgotCQlyZXR1cm4gIkVSUk9SX1NZU0FTU0VSVCI7CisJCXJldHVybiAiU1lTQVNTRVJUIjsKIAljYXNlIElQV19GV19FUlJPUl9GQVRBTF9FUlJPUjoKLQkJcmV0dXJuICJFUlJPUl9GQVRBTFNUQVRVU19FUlJPUiI7CisJCXJldHVybiAiRkFUQUxfRVJST1IiOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAiVU5LTk9XTlNUQVRVU19FUlJPUiI7CisJCXJldHVybiAiVU5LTk9XTl9FUlJPUiI7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpcHdfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGlwd19kdW1wX2Vycm9yX2xvZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGlwd19md19lcnJvciAqZXJyb3IpCiB7Ci0JdTMyIGRlc2MsIHRpbWUsIGJsaW5rMSwgYmxpbmsyLCBpbGluazEsIGlsaW5rMiwgaWRhdGEsIGksIGNvdW50LCBiYXNlOworCXUzMiBpOwogCi0JYmFzZSA9IGlwd19yZWFkMzIocHJpdiwgSVBXU1RBVFVTX0VSUk9SX0xPRyk7Ci0JY291bnQgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlKTsKLQotCWlmIChFUlJPUl9TVEFSVF9PRkZTRVQgPD0gY291bnQgKiBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJSVBXX0VSUk9SKCJTdGFydCBJUFcgRXJyb3IgTG9nIER1bXA6XG4iKTsKLQkJSVBXX0VSUk9SKCJTdGF0dXM6IDB4JTA4WCwgQ29uZmlnOiAlMDhYXG4iLAotCQkJICBwcml2LT5zdGF0dXMsIHByaXYtPmNvbmZpZyk7CisJaWYgKCFlcnJvcikgeworCQlJUFdfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgYW5kIGNhcHR1cmluZyBlcnJvciBsb2cuICAiCisJCQkgICJOb3RoaW5nIHRvIGR1bXAuXG4iKTsKKwkJcmV0dXJuOwogCX0KIAotCWZvciAoaSA9IEVSUk9SX1NUQVJUX09GRlNFVDsKLQkgICAgIGkgPD0gY291bnQgKiBFUlJPUl9FTEVNX1NJWkU7IGkgKz0gRVJST1JfRUxFTV9TSVpFKSB7Ci0JCWRlc2MgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlICsgaSk7Ci0JCXRpbWUgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlICsgaSArIDEgKiBzaXplb2YodTMyKSk7Ci0JCWJsaW5rMSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgMiAqIHNpemVvZih1MzIpKTsKLQkJYmxpbmsyID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOwotCQlpbGluazEgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlICsgaSArIDQgKiBzaXplb2YodTMyKSk7Ci0JCWlsaW5rMiA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgNSAqIHNpemVvZih1MzIpKTsKLQkJaWRhdGEgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CisJSVBXX0VSUk9SKCJTdGFydCBJUFcgRXJyb3IgTG9nIER1bXA6XG4iKTsKKwlJUFdfRVJST1IoIlN0YXR1czogMHglMDhYLCBDb25maWc6ICUwOFhcbiIsCisJCSAgZXJyb3ItPnN0YXR1cywgZXJyb3ItPmNvbmZpZyk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgZXJyb3ItPmVsZW1fbGVuOyBpKyspCiAJCUlQV19FUlJPUigiJXMgJWkgMHglMDh4ICAweCUwOHggIDB4JTA4eCAgMHglMDh4ICAweCUwOHhcbiIsCi0JCQkgIGlwd19lcnJvcl9kZXNjKGRlc2MpLCB0aW1lLCBibGluazEsIGJsaW5rMiwKLQkJCSAgaWxpbmsxLCBpbGluazIsIGlkYXRhKTsKLQl9CisJCQkgIGlwd19lcnJvcl9kZXNjKGVycm9yLT5lbGVtW2ldLmRlc2MpLAorCQkJICBlcnJvci0+ZWxlbVtpXS50aW1lLAorCQkJICBlcnJvci0+ZWxlbVtpXS5ibGluazEsCisJCQkgIGVycm9yLT5lbGVtW2ldLmJsaW5rMiwKKwkJCSAgZXJyb3ItPmVsZW1baV0ubGluazEsCisJCQkgIGVycm9yLT5lbGVtW2ldLmxpbmsyLCBlcnJvci0+ZWxlbVtpXS5kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXJyb3ItPmxvZ19sZW47IGkrKykKKwkJSVBXX0VSUk9SKCIlaVx0MHglMDh4XHQlaVxuIiwKKwkJCSAgZXJyb3ItPmxvZ1tpXS50aW1lLAorCQkJICBlcnJvci0+bG9nW2ldLmRhdGEsIGVycm9yLT5sb2dbaV0uZXZlbnQpOwogfQotCi1zdGF0aWMgdm9pZCBpcHdfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKLXsKLQl1MzIgZXYsIHRpbWUsIGRhdGEsIGksIGNvdW50LCBiYXNlOwotCi0JYmFzZSA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0VWRU5UX0xPRyk7Ci0JY291bnQgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlKTsKLQotCWlmIChFVkVOVF9TVEFSVF9PRkZTRVQgPD0gY291bnQgKiBFVkVOVF9FTEVNX1NJWkUpCi0JCUlQV19FUlJPUigiU3RhcnQgSVBXIEV2ZW50IExvZyBEdW1wOlxuIik7Ci0KLQlmb3IgKGkgPSBFVkVOVF9TVEFSVF9PRkZTRVQ7Ci0JICAgICBpIDw9IGNvdW50ICogRVZFTlRfRUxFTV9TSVpFOyBpICs9IEVWRU5UX0VMRU1fU0laRSkgewotCQlldiA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpKTsKLQkJdGltZSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKLQkJZGF0YSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgMiAqIHNpemVvZih1MzIpKTsKLQotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKLQkJSVBXX0VSUk9SKCIlaVx0MHglMDh4XHQlaVxuIiwgdGltZSwgZGF0YSwgZXYpOwogI2VuZGlmCi0JfQorCitzdGF0aWMgaW5saW5lIGludCBpcHdfaXNfaW5pdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJcmV0dXJuIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVCkgPyAxIDogMDsKIH0KIAogc3RhdGljIGludCBpcHdfZ2V0X29yZGluYWwoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgb3JkLCB2b2lkICp2YWwsIHUzMiAqIGxlbikKQEAgLTYzNiw2ICs3MDEsMzQwIEBACiAKIH0KIAordTMyIGlwd19yZWdpc3Rlcl90b2dnbGUodTMyIHJlZykKK3sKKwlyZWcgJj0gfklQV19TVEFSVF9TVEFOREJZOworCWlmIChyZWcgJiBJUFdfR0FURV9PRE1BKQorCQlyZWcgJj0gfklQV19HQVRFX09ETUE7CisJaWYgKHJlZyAmIElQV19HQVRFX0lETUEpCisJCXJlZyAmPSB+SVBXX0dBVEVfSURNQTsKKwlpZiAocmVnICYgSVBXX0dBVEVfQURNQSkKKwkJcmVnICY9IH5JUFdfR0FURV9BRE1BOworCXJldHVybiByZWc7Cit9CisKKy8qCisgKiBMRUQgYmVoYXZpb3I6CisgKiAtIE9uIHJhZGlvIE9OLCB0dXJuIG9uIGFueSBMRURzIHRoYXQgcmVxdWlyZSB0byBiZSBvbiBkdXJpbmcgc3RhcnQKKyAqIC0gT24gaW5pdGlhbGl6YXRpb24sIHN0YXJ0IHVuYXNzb2NpYXRlZCBibGluaworICogLSBPbiBhc3NvY2lhdGlvbiwgZGlzYWJsZSB1bmFzc29jaWF0ZWQgYmxpbmsKKyAqIC0gT24gZGlzYXNzb2NpYXRpb24sIHN0YXJ0IHVuYXNzb2NpYXRlZCBibGluaworICogLSBPbiByYWRpbyBPRkYsIHR1cm4gb2ZmIGFueSBMRURzIHN0YXJ0ZWQgZHVyaW5nIHJhZGlvIG9uCisgKgorICovCisjZGVmaW5lIExEX1RJTUVfTElOS19PTiAzMDAKKyNkZWZpbmUgTERfVElNRV9MSU5LX09GRiAyNzAwCisjZGVmaW5lIExEX1RJTUVfQUNUX09OIDI1MAorCit2b2lkIGlwd19sZWRfbGlua19vbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGVkOworCisJLyogSWYgY29uZmlndXJlZCB0byBub3QgdXNlIExFRHMsIG9yIG5pY190eXBlIGlzIDEsCisJICogdGhlbiB3ZSBkb24ndCB0b2dnbGUgYSBMSU5LIGxlZCAqLworCWlmIChwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEIHx8IHByaXYtPm5pY190eXBlID09IEVFUFJPTV9OSUNfVFlQRV8xKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgJiYKKwkgICAgIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfTEVEX0xJTktfT04pKSB7CisJCUlQV19ERUJVR19MRUQoIkxpbmsgTEVEIE9uXG4iKTsKKwkJbGVkID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRyk7CisJCWxlZCB8PSBwcml2LT5sZWRfYXNzb2NpYXRpb25fb247CisKKwkJbGVkID0gaXB3X3JlZ2lzdGVyX3RvZ2dsZShsZWQpOworCisJCUlQV19ERUJVR19MRUQoIlJlZzogMHglMDhYXG4iLCBsZWQpOworCQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRywgbGVkKTsKKworCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0xFRF9MSU5LX09OOworCisJCS8qIElmIHdlIGFyZW4ndCBhc3NvY2lhdGVkLCBzY2hlZHVsZSB0dXJuaW5nIHRoZSBMRUQgb2ZmICovCisJCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCSAgICZwcml2LT5sZWRfbGlua19vZmYsCisJCQkJCSAgIExEX1RJTUVfTElOS19PTik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpcHdfYmdfbGVkX2xpbmtfb24odm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2xlZF9saW5rX29uKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCit2b2lkIGlwd19sZWRfbGlua19vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxlZDsKKworCS8qIElmIGNvbmZpZ3VyZWQgbm90IHRvIHVzZSBMRURzLCBvciBuaWMgdHlwZSBpcyAxLAorCSAqIHRoZW4gd2UgZG9uJ3QgZ29nZ2xlIHRoZSBMSU5LIGxlZC4gKi8KKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX05PX0xFRCB8fCBwcml2LT5uaWNfdHlwZSA9PSBFRVBST01fTklDX1RZUEVfMSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfTEVEX0xJTktfT04pIHsKKwkJbGVkID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRyk7CisJCWxlZCAmPSBwcml2LT5sZWRfYXNzb2NpYXRpb25fb2ZmOworCQlsZWQgPSBpcHdfcmVnaXN0ZXJfdG9nZ2xlKGxlZCk7CisKKwkJSVBXX0RFQlVHX0xFRCgiUmVnOiAweCUwOFhcbiIsIGxlZCk7CisJCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHLCBsZWQpOworCisJCUlQV19ERUJVR19MRUQoIkxpbmsgTEVEIE9mZlxuIik7CisKKwkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfTEVEX0xJTktfT047CisKKwkJLyogSWYgd2UgYXJlbid0IGFzc29jaWF0ZWQgYW5kIHRoZSByYWRpbyBpcyBvbiwgc2NoZWR1bGUKKwkJICogdHVybmluZyB0aGUgTEVEIG9uIChibGluayB3aGlsZSB1bmFzc29jaWF0ZWQpICovCisJCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spICYmCisJCSAgICAhKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5sZWRfbGlua19vbiwKKwkJCQkJICAgTERfVElNRV9MSU5LX09GRik7CisKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19iZ19sZWRfbGlua19vZmYodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2xlZF9saW5rX29mZihkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faXB3X2xlZF9hY3Rpdml0eV9vbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdTMyIGxlZDsKKworCWlmIChwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEKQorCQlyZXR1cm47CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKKwkJcmV0dXJuOworCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0xFRF9BQ1RfT04pKSB7CisJCWxlZCA9IGlwd19yZWFkX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcpOworCQlsZWQgfD0gcHJpdi0+bGVkX2FjdGl2aXR5X29uOworCisJCWxlZCA9IGlwd19yZWdpc3Rlcl90b2dnbGUobGVkKTsKKworCQlJUFdfREVCVUdfTEVEKCJSZWc6IDB4JTA4WFxuIiwgbGVkKTsKKwkJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcsIGxlZCk7CisKKwkJSVBXX0RFQlVHX0xFRCgiQWN0aXZpdHkgTEVEIE9uXG4iKTsKKworCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0xFRF9BQ1RfT047CisKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+bGVkX2FjdF9vZmYpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+bGVkX2FjdF9vZmYsCisJCQkJICAgTERfVElNRV9BQ1RfT04pOworCX0gZWxzZSB7CisJCS8qIFJlc2NoZWR1bGUgTEVEIG9mZiBmb3IgZnVsbCB0aW1lIHBlcmlvZCAqLworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5sZWRfYWN0X29mZik7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5sZWRfYWN0X29mZiwKKwkJCQkgICBMRF9USU1FX0FDVF9PTik7CisJfQorfQorCit2b2lkIGlwd19sZWRfYWN0aXZpdHlfb24oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlfX2lwd19sZWRfYWN0aXZpdHlfb24ocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIGlwd19sZWRfYWN0aXZpdHlfb2ZmKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsZWQ7CisKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX05PX0xFRCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfTEVEX0FDVF9PTikgeworCQlsZWQgPSBpcHdfcmVhZF9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHKTsKKwkJbGVkICY9IHByaXYtPmxlZF9hY3Rpdml0eV9vZmY7CisKKwkJbGVkID0gaXB3X3JlZ2lzdGVyX3RvZ2dsZShsZWQpOworCisJCUlQV19ERUJVR19MRUQoIlJlZzogMHglMDhYXG4iLCBsZWQpOworCQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRywgbGVkKTsKKworCQlJUFdfREVCVUdfTEVEKCJBY3Rpdml0eSBMRUQgT2ZmXG4iKTsKKworCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19MRURfQUNUX09OOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaXB3X2JnX2xlZF9hY3Rpdml0eV9vZmYodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2xlZF9hY3Rpdml0eV9vZmYoZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKK3ZvaWQgaXB3X2xlZF9iYW5kX29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsZWQ7CisKKwkvKiBPbmx5IG5pYyB0eXBlIDEgc3VwcG9ydHMgbW9kZSBMRURzICovCisJaWYgKHByaXYtPmNvbmZpZyAmIENGR19OT19MRUQgfHwKKwkgICAgcHJpdi0+bmljX3R5cGUgIT0gRUVQUk9NX05JQ19UWVBFXzEgfHwgIXByaXYtPmFzc29jX25ldHdvcmspCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlsZWQgPSBpcHdfcmVhZF9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHKTsKKwlpZiAocHJpdi0+YXNzb2NfbmV0d29yay0+bW9kZSA9PSBJRUVFX0EpIHsKKwkJbGVkIHw9IHByaXYtPmxlZF9vZmRtX29uOworCQlsZWQgJj0gcHJpdi0+bGVkX2Fzc29jaWF0aW9uX29mZjsKKwkJSVBXX0RFQlVHX0xFRCgiTW9kZSBMRUQgT246IDgwMi4xMWFcbiIpOworCX0gZWxzZSBpZiAocHJpdi0+YXNzb2NfbmV0d29yay0+bW9kZSA9PSBJRUVFX0cpIHsKKwkJbGVkIHw9IHByaXYtPmxlZF9vZmRtX29uOworCQlsZWQgfD0gcHJpdi0+bGVkX2Fzc29jaWF0aW9uX29uOworCQlJUFdfREVCVUdfTEVEKCJNb2RlIExFRCBPbjogODAyLjExZ1xuIik7CisJfSBlbHNlIHsKKwkJbGVkICY9IHByaXYtPmxlZF9vZmRtX29mZjsKKwkJbGVkIHw9IHByaXYtPmxlZF9hc3NvY2lhdGlvbl9vbjsKKwkJSVBXX0RFQlVHX0xFRCgiTW9kZSBMRUQgT246IDgwMi4xMWJcbiIpOworCX0KKworCWxlZCA9IGlwd19yZWdpc3Rlcl90b2dnbGUobGVkKTsKKworCUlQV19ERUJVR19MRUQoIlJlZzogMHglMDhYXG4iLCBsZWQpOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHLCBsZWQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIGlwd19sZWRfYmFuZF9vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxlZDsKKworCS8qIE9ubHkgbmljIHR5cGUgMSBzdXBwb3J0cyBtb2RlIExFRHMgKi8KKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX05PX0xFRCB8fCBwcml2LT5uaWNfdHlwZSAhPSBFRVBST01fTklDX1RZUEVfMSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWxlZCA9IGlwd19yZWFkX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcpOworCWxlZCAmPSBwcml2LT5sZWRfb2ZkbV9vZmY7CisJbGVkICY9IHByaXYtPmxlZF9hc3NvY2lhdGlvbl9vZmY7CisKKwlsZWQgPSBpcHdfcmVnaXN0ZXJfdG9nZ2xlKGxlZCk7CisKKwlJUFdfREVCVUdfTEVEKCJSZWc6IDB4JTA4WFxuIiwgbGVkKTsKKwlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRywgbGVkKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpcHdfbGVkX3JhZGlvX29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpcHdfbGVkX2xpbmtfb24ocHJpdik7Cit9CisKK3ZvaWQgaXB3X2xlZF9yYWRpb19vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWlwd19sZWRfYWN0aXZpdHlfb2ZmKHByaXYpOworCWlwd19sZWRfbGlua19vZmYocHJpdik7Cit9CisKK3ZvaWQgaXB3X2xlZF9saW5rX3VwKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwkvKiBTZXQgdGhlIExpbmsgTGVkIG9uIGZvciBhbGwgbmljIHR5cGVzICovCisJaXB3X2xlZF9saW5rX29uKHByaXYpOworfQorCit2b2lkIGlwd19sZWRfbGlua19kb3duKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpcHdfbGVkX2FjdGl2aXR5X29mZihwcml2KTsKKwlpcHdfbGVkX2xpbmtfb2ZmKHByaXYpOworCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spCisJCWlwd19sZWRfcmFkaW9fb2ZmKHByaXYpOworfQorCit2b2lkIGlwd19sZWRfaW5pdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJcHJpdi0+bmljX3R5cGUgPSBwcml2LT5lZXByb21bRUVQUk9NX05JQ19UWVBFXTsKKworCS8qIFNldCB0aGUgZGVmYXVsdCBQSU5zIGZvciB0aGUgbGluayBhbmQgYWN0aXZpdHkgbGVkcyAqLworCXByaXYtPmxlZF9hY3Rpdml0eV9vbiA9IElQV19BQ1RJVklUWV9MRUQ7CisJcHJpdi0+bGVkX2FjdGl2aXR5X29mZiA9IH4oSVBXX0FDVElWSVRZX0xFRCk7CisKKwlwcml2LT5sZWRfYXNzb2NpYXRpb25fb24gPSBJUFdfQVNTT0NJQVRFRF9MRUQ7CisJcHJpdi0+bGVkX2Fzc29jaWF0aW9uX29mZiA9IH4oSVBXX0FTU09DSUFURURfTEVEKTsKKworCS8qIFNldCB0aGUgZGVmYXVsdCBQSU5zIGZvciB0aGUgT0ZETSBsZWRzICovCisJcHJpdi0+bGVkX29mZG1fb24gPSBJUFdfT0ZETV9MRUQ7CisJcHJpdi0+bGVkX29mZG1fb2ZmID0gfihJUFdfT0ZETV9MRUQpOworCisJc3dpdGNoIChwcml2LT5uaWNfdHlwZSkgeworCWNhc2UgRUVQUk9NX05JQ19UWVBFXzE6CisJCS8qIEluIHRoaXMgTklDIHR5cGUsIHRoZSBMRURzIGFyZSByZXZlcnNlZC4uLi4gKi8KKwkJcHJpdi0+bGVkX2FjdGl2aXR5X29uID0gSVBXX0FTU09DSUFURURfTEVEOworCQlwcml2LT5sZWRfYWN0aXZpdHlfb2ZmID0gfihJUFdfQVNTT0NJQVRFRF9MRUQpOworCQlwcml2LT5sZWRfYXNzb2NpYXRpb25fb24gPSBJUFdfQUNUSVZJVFlfTEVEOworCQlwcml2LT5sZWRfYXNzb2NpYXRpb25fb2ZmID0gfihJUFdfQUNUSVZJVFlfTEVEKTsKKworCQlpZiAoIShwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEKSkKKwkJCWlwd19sZWRfYmFuZF9vbihwcml2KTsKKworCQkvKiBBbmQgd2UgZG9uJ3QgYmxpbmsgbGluayBMRURzIGZvciB0aGlzIG5pYywgc28KKwkJICoganVzdCByZXR1cm4gaGVyZSAqLworCQlyZXR1cm47CisKKwljYXNlIEVFUFJPTV9OSUNfVFlQRV8zOgorCWNhc2UgRUVQUk9NX05JQ19UWVBFXzI6CisJY2FzZSBFRVBST01fTklDX1RZUEVfNDoKKwljYXNlIEVFUFJPTV9OSUNfVFlQRV8wOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUlQV19ERUJVR19JTkZPKCJVbmtub3duIE5JQyB0eXBlIGZyb20gRUVQUk9NOiAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5uaWNfdHlwZSk7CisJCXByaXYtPm5pY190eXBlID0gRUVQUk9NX05JQ19UWVBFXzA7CisJCWJyZWFrOworCX0KKworCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19OT19MRUQpKSB7CisJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKKwkJCWlwd19sZWRfbGlua19vbihwcml2KTsKKwkJZWxzZQorCQkJaXB3X2xlZF9saW5rX29mZihwcml2KTsKKwl9Cit9CisKK3ZvaWQgaXB3X2xlZF9zaHV0ZG93bihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJaXB3X2xlZF9hY3Rpdml0eV9vZmYocHJpdik7CisJaXB3X2xlZF9saW5rX29mZihwcml2KTsKKwlpcHdfbGVkX2JhbmRfb2ZmKHByaXYpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmxlZF9saW5rX29uKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5sZWRfbGlua19vZmYpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmxlZF9hY3Rfb2ZmKTsKK30KKwogLyoKICAqIFRoZSBmb2xsb3dpbmcgYWRkcyBhIG5ldyBhdHRyaWJ1dGUgdG8gdGhlIHN5c2ZzIHJlcHJlc2VudGF0aW9uCiAgKiBvZiB0aGlzIGRldmljZSBkcml2ZXIgKGkuZS4gYSBuZXcgZmlsZSBpbiAvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcvKQpAQCAtNjQ3LDggKzEwNDYsOSBAQAogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXB3X2RlYnVnX2xldmVsKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLAotCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50KQogewogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAl1MzIgdmFsOwpAQCAtNjcyLDYgKzEwNzIsMjM3IEBACiBzdGF0aWMgRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBzaG93X2RlYnVnX2xldmVsLCBzdG9yZV9kZWJ1Z19sZXZlbCk7CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGlwd19nZXRfZXZlbnRfbG9nX2xlbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGlwd19yZWFkX3JlZzMyKHByaXYsIGlwd19yZWFkMzIocHJpdiwgSVBXX0VWRU5UX0xPRykpOworfQorCitzdGF0aWMgdm9pZCBpcHdfY2FwdHVyZV9ldmVudF9sb2coc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCSAgdTMyIGxvZ19sZW4sIHN0cnVjdCBpcHdfZXZlbnQgKmxvZykKK3sKKwl1MzIgYmFzZTsKKworCWlmIChsb2dfbGVuKSB7CisJCWJhc2UgPSBpcHdfcmVhZDMyKHByaXYsIElQV19FVkVOVF9MT0cpOworCQlpcHdfcmVhZF9pbmRpcmVjdChwcml2LCBiYXNlICsgc2l6ZW9mKGJhc2UpICsgc2l6ZW9mKHUzMiksCisJCQkJICAodTggKikgbG9nLCBzaXplb2YoKmxvZykgKiBsb2dfbGVuKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXB3X2Z3X2Vycm9yICppcHdfYWxsb2NfZXJyb3JfbG9nKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXB3X2Z3X2Vycm9yICplcnJvcjsKKwl1MzIgbG9nX2xlbiA9IGlwd19nZXRfZXZlbnRfbG9nX2xlbihwcml2KTsKKwl1MzIgYmFzZSA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0VSUk9SX0xPRyk7CisJdTMyIGVsZW1fbGVuID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSk7CisKKwllcnJvciA9IGttYWxsb2Moc2l6ZW9mKCplcnJvcikgKworCQkJc2l6ZW9mKCplcnJvci0+ZWxlbSkgKiBlbGVtX2xlbiArCisJCQlzaXplb2YoKmVycm9yLT5sb2cpICogbG9nX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFlcnJvcikgeworCQlJUFdfRVJST1IoIk1lbW9yeSBhbGxvY2F0aW9uIGZvciBmaXJtd2FyZSBlcnJvciBsb2cgIgorCQkJICAiZmFpbGVkLlxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwllcnJvci0+amlmZmllcyA9IGppZmZpZXM7CisJZXJyb3ItPnN0YXR1cyA9IHByaXYtPnN0YXR1czsKKwllcnJvci0+Y29uZmlnID0gcHJpdi0+Y29uZmlnOworCWVycm9yLT5lbGVtX2xlbiA9IGVsZW1fbGVuOworCWVycm9yLT5sb2dfbGVuID0gbG9nX2xlbjsKKwllcnJvci0+ZWxlbSA9IChzdHJ1Y3QgaXB3X2Vycm9yX2VsZW0gKillcnJvci0+cGF5bG9hZDsKKwllcnJvci0+bG9nID0gKHN0cnVjdCBpcHdfZXZlbnQgKikoZXJyb3ItPmVsZW0gKworCQkJCQkgIChzaXplb2YoKmVycm9yLT5lbGVtKSAqIGVsZW1fbGVuKSk7CisKKwlpcHdfY2FwdHVyZV9ldmVudF9sb2cocHJpdiwgbG9nX2xlbiwgZXJyb3ItPmxvZyk7CisKKwlpZiAoZWxlbV9sZW4pCisJCWlwd19yZWFkX2luZGlyZWN0KHByaXYsIGJhc2UgKyBzaXplb2YoYmFzZSksICh1OCAqKSBlcnJvci0+ZWxlbSwKKwkJCQkgIHNpemVvZigqZXJyb3ItPmVsZW0pICogZWxlbV9sZW4pOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBpcHdfZnJlZV9lcnJvcl9sb2coc3RydWN0IGlwd19md19lcnJvciAqZXJyb3IpCit7CisJaWYgKGVycm9yKQorCQlrZnJlZShlcnJvcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZXZlbnRfbG9nKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwl1MzIgbG9nX2xlbiA9IGlwd19nZXRfZXZlbnRfbG9nX2xlbihwcml2KTsKKwlzdHJ1Y3QgaXB3X2V2ZW50IGxvZ1tsb2dfbGVuXTsKKwl1MzIgbGVuID0gMCwgaTsKKworCWlwd19jYXB0dXJlX2V2ZW50X2xvZyhwcml2LCBsb2dfbGVuLCBsb2cpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiJTA4WCIsIGxvZ19sZW4pOworCWZvciAoaSA9IDA7IGkgPCBsb2dfbGVuOyBpKyspCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiXG4lMDhYJTA4WCUwOFgiLAorCQkJCWxvZ1tpXS50aW1lLCBsb2dbaV0uZXZlbnQsIGxvZ1tpXS5kYXRhKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihldmVudF9sb2csIFNfSVJVR08sIHNob3dfZXZlbnRfbG9nLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwl1MzIgbGVuID0gMCwgaTsKKwlpZiAoIXByaXYtPmVycm9yKQorCQlyZXR1cm4gMDsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkiJTA4bFglMDhYJTA4WCUwOFgiLAorCQkJcHJpdi0+ZXJyb3ItPmppZmZpZXMsCisJCQlwcml2LT5lcnJvci0+c3RhdHVzLAorCQkJcHJpdi0+ZXJyb3ItPmNvbmZpZywgcHJpdi0+ZXJyb3ItPmVsZW1fbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZXJyb3ItPmVsZW1fbGVuOyBpKyspCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiXG4lMDhYJTA4WCUwOFglMDhYJTA4WCUwOFglMDhYIiwKKwkJCQlwcml2LT5lcnJvci0+ZWxlbVtpXS50aW1lLAorCQkJCXByaXYtPmVycm9yLT5lbGVtW2ldLmRlc2MsCisJCQkJcHJpdi0+ZXJyb3ItPmVsZW1baV0uYmxpbmsxLAorCQkJCXByaXYtPmVycm9yLT5lbGVtW2ldLmJsaW5rMiwKKwkJCQlwcml2LT5lcnJvci0+ZWxlbVtpXS5saW5rMSwKKwkJCQlwcml2LT5lcnJvci0+ZWxlbVtpXS5saW5rMiwKKwkJCQlwcml2LT5lcnJvci0+ZWxlbVtpXS5kYXRhKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCSJcbiUwOFgiLCBwcml2LT5lcnJvci0+bG9nX2xlbik7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmVycm9yLT5sb2dfbGVuOyBpKyspCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiXG4lMDhYJTA4WCUwOFgiLAorCQkJCXByaXYtPmVycm9yLT5sb2dbaV0udGltZSwKKwkJCQlwcml2LT5lcnJvci0+bG9nW2ldLmV2ZW50LAorCQkJCXByaXYtPmVycm9yLT5sb2dbaV0uZGF0YSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiXG4iKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBjbGVhcl9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJaWYgKHByaXYtPmVycm9yKSB7CisJCWlwd19mcmVlX2Vycm9yX2xvZyhwcml2LT5lcnJvcik7CisJCXByaXYtPmVycm9yID0gTlVMTDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZXJyb3IsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Vycm9yLCBjbGVhcl9lcnJvcik7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY21kX2xvZyhzdHJ1Y3QgZGV2aWNlICpkLAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXUzMiBsZW4gPSAwLCBpOworCWlmICghcHJpdi0+Y21kbG9nKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAocHJpdi0+Y21kbG9nX3BvcyArIDEpICUgcHJpdi0+Y21kbG9nX2xlbjsKKwkgICAgIChpICE9IHByaXYtPmNtZGxvZ19wb3MpICYmIChQQUdFX1NJWkUgLSBsZW4pOworCSAgICAgaSA9IChpICsgMSkgJSBwcml2LT5jbWRsb2dfbGVuKSB7CisJCWxlbiArPQorCQkgICAgc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkgICAgICJcbiUwOGxYJTA4WCUwOFglMDhYXG4iLCBwcml2LT5jbWRsb2dbaV0uamlmZmllcywKKwkJCSAgICAgcHJpdi0+Y21kbG9nW2ldLnJldGNvZGUsIHByaXYtPmNtZGxvZ1tpXS5jbWQuY21kLAorCQkJICAgICBwcml2LT5jbWRsb2dbaV0uY21kLmxlbik7CisJCWxlbiArPQorCQkgICAgc25wcmludGtfYnVmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSAodTggKikgcHJpdi0+Y21kbG9nW2ldLmNtZC5wYXJhbSwKKwkJCQkgcHJpdi0+Y21kbG9nW2ldLmNtZC5sZW4pOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCX0KKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjbWRfbG9nLCBTX0lSVUdPLCBzaG93X2NtZF9sb2csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3NjYW5fYWdlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5pZWVlLT5zY2FuX2FnZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3NjYW5fYWdlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKKyNlbmRpZgorCWNoYXIgYnVmZmVyW10gPSAiMDAwMDAwMDAiOworCXVuc2lnbmVkIGxvbmcgbGVuID0KKwkgICAgKHNpemVvZihidWZmZXIpIC0gMSkgPiBjb3VudCA/IGNvdW50IDogc2l6ZW9mKGJ1ZmZlcikgLSAxOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWNoYXIgKnAgPSBidWZmZXI7CisKKwlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOworCisJc3RybmNweShidWZmZXIsIGJ1ZiwgbGVuKTsKKwlidWZmZXJbbGVuXSA9IDA7CisKKwlpZiAocFsxXSA9PSAneCcgfHwgcFsxXSA9PSAnWCcgfHwgcFswXSA9PSAneCcgfHwgcFswXSA9PSAnWCcpIHsKKwkJcCsrOworCQlpZiAocFswXSA9PSAneCcgfHwgcFswXSA9PSAnWCcpCisJCQlwKys7CisJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxNik7CisJfSBlbHNlCisJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxMCk7CisJaWYgKHAgPT0gYnVmZmVyKSB7CisJCUlQV19ERUJVR19JTkZPKCIlczogdXNlciBzdXBwbGllZCBpbnZhbGlkIHZhbHVlLlxuIiwgZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlwcml2LT5pZWVlLT5zY2FuX2FnZSA9IHZhbDsKKwkJSVBXX0RFQlVHX0lORk8oInNldCBzY2FuX2FnZSA9ICV1XG4iLCBwcml2LT5pZWVlLT5zY2FuX2FnZSk7CisJfQorCisJSVBXX0RFQlVHX0lORk8oImV4aXRcbiIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzY2FuX2FnZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfc2Nhbl9hZ2UsIHN0b3JlX3NjYW5fYWdlKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19sZWQoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAocHJpdi0+Y29uZmlnICYgQ0ZHX05PX0xFRCkgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2xlZChzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisKKwlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJaWYgKCpidWYgPT0gMCkgeworCQlJUFdfREVCVUdfTEVEKCJEaXNhYmxpbmcgTEVEIGNvbnRyb2wuXG4iKTsKKwkJcHJpdi0+Y29uZmlnIHw9IENGR19OT19MRUQ7CisJCWlwd19sZWRfc2h1dGRvd24ocHJpdik7CisJfSBlbHNlIHsKKwkJSVBXX0RFQlVHX0xFRCgiRW5hYmxpbmcgTEVEIGNvbnRyb2wuXG4iKTsKKwkJcHJpdi0+Y29uZmlnICY9IH5DRkdfTk9fTEVEOworCQlpcHdfbGVkX2luaXQocHJpdik7CisJfQorCisJSVBXX0RFQlVHX0lORk8oImV4aXRcbiIpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGxlZCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbGVkLCBzdG9yZV9sZWQpOworCiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTY5Myw1NSArMTMyNCwxMiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19uaWNfdHlwZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGQtPmRyaXZlcl9kYXRhOwotCXU4IHR5cGUgPSBwLT5lZXByb21bRUVQUk9NX05JQ19UWVBFXTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgRUVQUk9NX05JQ19UWVBFX1NUQU5EQVJEOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJTVEFOREFSRFxuIik7Ci0JY2FzZSBFRVBST01fTklDX1RZUEVfREVMTDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiREVMTFxuIik7Ci0JY2FzZSBFRVBST01fTklDX1RZUEVfRlVKSVRTVToKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiRlVKSVRTVVxuIik7Ci0JY2FzZSBFRVBST01fTklDX1RZUEVfSUJNOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJJQk1cbiIpOwotCWNhc2UgRUVQUk9NX05JQ19UWVBFX0hQOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJIUFxuIik7Ci0JfQotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiVU5LTk9XTlxuIik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZC0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiVFlQRTogJWRcbiIsIHByaXYtPm5pY190eXBlKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKG5pY190eXBlLCBTX0lSVUdPLCBzaG93X25pY190eXBlLCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3QgZHVtcF9lcnJvcl9sb2coc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgICBzaXplX3QgY291bnQpCi17Ci0JY2hhciAqcCA9IChjaGFyICopYnVmOwotCi0JaWYgKHBbMF0gPT0gJzEnKQotCQlpcHdfZHVtcF9uaWNfZXJyb3JfbG9nKChzdHJ1Y3QgaXB3X3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7Ci0KLQlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGR1bXBfZXJyb3JzLCBTX0lXVVNSLCBOVUxMLCBkdW1wX2Vycm9yX2xvZyk7Ci0KLXN0YXRpYyBzc2l6ZV90IGR1bXBfZXZlbnRfbG9nKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50KQotewotCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKLQotCWlmIChwWzBdID09ICcxJykKLQkJaXB3X2R1bXBfbmljX2V2ZW50X2xvZygoc3RydWN0IGlwd19wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwotCi0JcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihkdW1wX2V2ZW50cywgU19JV1VTUiwgTlVMTCwgZHVtcF9ldmVudF9sb2cpOwotCiBzdGF0aWMgc3NpemVfdCBzaG93X3Vjb2RlX3ZlcnNpb24oc3RydWN0IGRldmljZSAqZCwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC03OTgsNyArMTM4Niw3IEBACiAJdTMyIHJlZyA9IDA7CiAJc3RydWN0IGlwd19wcml2ICpwID0gZC0+ZHJpdmVyX2RhdGE7CiAKLQlyZWcgPSBpcHdfcmVhZF9yZWczMihwLCBDWDJfSU5URVJOQUxfQ01EX0VWRU5UKTsKKwlyZWcgPSBpcHdfcmVhZF9yZWczMihwLCBJUFdfSU5URVJOQUxfQ01EX0VWRU5UKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHJlZyk7CiB9CiBzdGF0aWMgc3NpemVfdCBzdG9yZV9jb21tYW5kX2V2ZW50X3JlZyhzdHJ1Y3QgZGV2aWNlICpkLApAQCAtODA5LDcgKzEzOTcsNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGQtPmRyaXZlcl9kYXRhOwogCiAJc3NjYW5mKGJ1ZiwgIiV4IiwgJnJlZyk7Ci0JaXB3X3dyaXRlX3JlZzMyKHAsIENYMl9JTlRFUk5BTF9DTURfRVZFTlQsIHJlZyk7CisJaXB3X3dyaXRlX3JlZzMyKHAsIElQV19JTlRFUk5BTF9DTURfRVZFTlQsIHJlZyk7CiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKQEAgLTg0NSw2ICsxNDMzLDcgQEAKIHsKIAl1MzIgcmVnID0gMDsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5ESVJFQ1RfRFdPUkQpCiAJCXJlZyA9IGlwd19yZWFkX3JlZzMyKHByaXYsIHByaXYtPmluZGlyZWN0X2R3b3JkKTsKIAllbHNlCkBAIC04NzEsNiArMTQ2MCw3IEBACiB7CiAJdTggcmVnID0gMDsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5ESVJFQ1RfQllURSkKIAkJcmVnID0gaXB3X3JlYWRfcmVnOChwcml2LCBwcml2LT5pbmRpcmVjdF9ieXRlKTsKIAllbHNlCkBAIC05NDUsNyArMTUzNSw3IEBACiBzdGF0aWMgaW50IGlwd19yYWRpb19raWxsX3N3KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IGRpc2FibGVfcmFkaW8pCiB7CiAJaWYgKChkaXNhYmxlX3JhZGlvID8gMSA6IDApID09Ci0JICAgIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVyA/IDEgOiAwKSkKKwkgICAgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVykgPyAxIDogMCkpCiAJCXJldHVybiAwOwogCiAJSVBXX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLaWxsIHNldCB0bzogUkFESU8gICVzXG4iLApAQCAtOTU0LDEwICsxNTQ0LDggQEAKIAlpZiAoZGlzYWJsZV9yYWRpbykgewogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JGX0tJTExfU1c7CiAKLQkJaWYgKHByaXYtPndvcmtxdWV1ZSkgeworCQlpZiAocHJpdi0+d29ya3F1ZXVlKQogCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQkJfQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+ZG93bik7CiAJfSBlbHNlIHsKIAkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfUkZfS0lMTF9TVzsKQEAgLTk4Nyw2ICsxNTc1LDkzIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihyZl9raWxsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19yZl9raWxsLCBzdG9yZV9yZl9raWxsKTsKIAorc3RhdGljIHNzaXplX3Qgc2hvd19zcGVlZF9zY2FuKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSAoc3RydWN0IGlwd19wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJaW50IHBvcyA9IDAsIGxlbiA9IDA7CisJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TUEVFRF9TQ0FOKSB7CisJCXdoaWxlIChwcml2LT5zcGVlZF9zY2FuW3Bvc10gIT0gMCkKKwkJCWxlbiArPSBzcHJpbnRmKCZidWZbbGVuXSwgIiVkICIsCisJCQkJICAgICAgIHByaXYtPnNwZWVkX3NjYW5bcG9zKytdKTsKKwkJcmV0dXJuIGxlbiArIHNwcmludGYoJmJ1ZltsZW5dLCAiXG4iKTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfc3BlZWRfc2NhbihzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSAoc3RydWN0IGlwd19wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJaW50IGNoYW5uZWwsIHBvcyA9IDA7CisJY29uc3QgY2hhciAqcCA9IGJ1ZjsKKworCS8qIGxpc3Qgb2Ygc3BhY2Ugc2VwYXJhdGVkIGNoYW5uZWxzIHRvIHNjYW4sIG9wdGlvbmFsbHkgZW5kaW5nIHdpdGggMCAqLworCXdoaWxlICgoY2hhbm5lbCA9IHNpbXBsZV9zdHJ0b2wocCwgTlVMTCwgMCkpKSB7CisJCWlmIChwb3MgPT0gTUFYX1NQRUVEX1NDQU4gLSAxKSB7CisJCQlwcml2LT5zcGVlZF9zY2FuW3Bvc10gPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgY2hhbm5lbCkpCisJCQlwcml2LT5zcGVlZF9zY2FuW3BvcysrXSA9IGNoYW5uZWw7CisJCWVsc2UKKwkJCUlQV19XQVJOSU5HKCJTa2lwcGluZyBpbnZhbGlkIGNoYW5uZWwgcmVxdWVzdDogJWRcbiIsCisJCQkJICAgIGNoYW5uZWwpOworCQlwID0gc3RyY2hyKHAsICcgJyk7CisJCWlmICghcCkKKwkJCWJyZWFrOworCQl3aGlsZSAoKnAgPT0gJyAnIHx8ICpwID09ICdcdCcpCisJCQlwKys7CisJfQorCisJaWYgKHBvcyA9PSAwKQorCQlwcml2LT5jb25maWcgJj0gfkNGR19TUEVFRF9TQ0FOOworCWVsc2UgeworCQlwcml2LT5zcGVlZF9zY2FuX3BvcyA9IDA7CisJCXByaXYtPmNvbmZpZyB8PSBDRkdfU1BFRURfU0NBTjsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzcGVlZF9zY2FuLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19zcGVlZF9zY2FuLAorCQkgICBzdG9yZV9zcGVlZF9zY2FuKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19uZXRfc3RhdHMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gKHN0cnVjdCBpcHdfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjXG4iLCAocHJpdi0+Y29uZmlnICYgQ0ZHX05FVF9TVEFUUykgPyAnMScgOiAnMCcpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9uZXRfc3RhdHMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gKHN0cnVjdCBpcHdfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCWlmIChidWZbMF0gPT0gJzEnKQorCQlwcml2LT5jb25maWcgfD0gQ0ZHX05FVF9TVEFUUzsKKwllbHNlCisJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX05FVF9TVEFUUzsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5ldF9zdGF0cywgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIHNob3dfbmV0X3N0YXRzLCBzdG9yZV9uZXRfc3RhdHMpOworCitzdGF0aWMgdm9pZCBub3RpZnlfd3hfYXNzb2NfZXZlbnQoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgaXB3X2lycV90YXNrbGV0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKIAl1MzIgaW50YSwgaW50YV9tYXNrLCBoYW5kbGVkID0gMDsKQEAgLTk5NSwxMDIgKzE2NzAsMTM1IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaW50YSA9IGlwd19yZWFkMzIocHJpdiwgQ1gyX0lOVEFfUlcpOwotCWludGFfbWFzayA9IGlwd19yZWFkMzIocHJpdiwgQ1gyX0lOVEFfTUFTS19SKTsKLQlpbnRhICY9IChDWDJfSU5UQV9NQVNLX0FMTCAmIGludGFfbWFzayk7CisJaW50YSA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0lOVEFfUlcpOworCWludGFfbWFzayA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0lOVEFfTUFTS19SKTsKKwlpbnRhICY9IChJUFdfSU5UQV9NQVNLX0FMTCAmIGludGFfbWFzayk7CiAKIAkvKiBBZGQgYW55IGNhY2hlZCBJTlRBIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgaGFuZGxlZCAqLwogCWludGEgfD0gcHJpdi0+aXNyX2ludGE7CiAKIAkvKiBoYW5kbGUgYWxsIHRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGludGVycnVwdCAqLwotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1JYX1RSQU5TRkVSKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfUlhfVFJBTlNGRVIpIHsKIAkJaXB3X3J4KHByaXYpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9SWF9UUkFOU0ZFUjsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfUlhfVFJBTlNGRVI7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfVFhfQ01EX1FVRVVFKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfVFhfQ01EX1FVRVVFKSB7CiAJCUlQV19ERUJVR19IQygiQ29tbWFuZCBjb21wbGV0ZWQuXG4iKTsKIAkJcmMgPSBpcHdfcXVldWVfdHhfcmVjbGFpbShwcml2LCAmcHJpdi0+dHhxX2NtZCwgLTEpOwogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9UWF9DTURfUVVFVUU7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX1RYX0NNRF9RVUVVRTsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8xKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMSkgewogCQlJUFdfREVCVUdfVFgoIlRYX1FVRVVFXzFcbiIpOwogCQlyYyA9IGlwd19xdWV1ZV90eF9yZWNsYWltKHByaXYsICZwcml2LT50eHFbMF0sIDApOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9UWF9RVUVVRV8xOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9UWF9RVUVVRV8xOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzIpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9UWF9RVUVVRV8yKSB7CiAJCUlQV19ERUJVR19UWCgiVFhfUVVFVUVfMlxuIik7CiAJCXJjID0gaXB3X3F1ZXVlX3R4X3JlY2xhaW0ocHJpdiwgJnByaXYtPnR4cVsxXSwgMSk7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzI7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX1RYX1FVRVVFXzI7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMykgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX1RYX1FVRVVFXzMpIHsKIAkJSVBXX0RFQlVHX1RYKCJUWF9RVUVVRV8zXG4iKTsKIAkJcmMgPSBpcHdfcXVldWVfdHhfcmVjbGFpbShwcml2LCAmcHJpdi0+dHhxWzJdLCAyKTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMzsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMzsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9UWF9RVUVVRV80KSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfNCkgewogCQlJUFdfREVCVUdfVFgoIlRYX1FVRVVFXzRcbiIpOwogCQlyYyA9IGlwd19xdWV1ZV90eF9yZWNsYWltKHByaXYsICZwcml2LT50eHFbM10sIDMpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9UWF9RVUVVRV80OworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9UWF9RVUVVRV80OwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1NUQVRVU19DSEFOR0UpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFKSB7CiAJCUlQV19XQVJOSU5HKCJTVEFUVVNfQ0hBTkdFXG4iKTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfU1RBVFVTX0NIQU5HRTsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfU1RBVFVTX0NIQU5HRTsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQpIHsKIAkJSVBXX1dBUk5JTkcoIlRYX1BFUklPRF9FWFBJUkVEXG4iKTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfQkVBQ09OX1BFUklPRF9FWFBJUkVEOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQ7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfU0xBVkVfTU9ERV9IT1NUX0NNRF9ET05FKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfU0xBVkVfTU9ERV9IT1NUX0NNRF9ET05FKSB7CiAJCUlQV19XQVJOSU5HKCJIT1NUX0NNRF9ET05FXG4iKTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfU0xBVkVfTU9ERV9IT1NUX0NNRF9ET05FOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkU7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSkgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUpIHsKIAkJSVBXX1dBUk5JTkcoIkZXX0lOSVRJQUxJWkFUSU9OX0RPTkVcbiIpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX0ZXX0NBUkRfRElTQUJMRV9QSFlfT0ZGX0RPTkUpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9GV19DQVJEX0RJU0FCTEVfUEhZX09GRl9ET05FKSB7CiAJCUlQV19XQVJOSU5HKCJQSFlfT0ZGX0RPTkVcbiIpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9GV19DQVJEX0RJU0FCTEVfUEhZX09GRl9ET05FOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9GV19DQVJEX0RJU0FCTEVfUEhZX09GRl9ET05FOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1JGX0tJTExfRE9ORSkgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX1JGX0tJTExfRE9ORSkgewogCQlJUFdfREVCVUdfUkZfS0lMTCgiUkZfS0lMTF9ET05FXG4iKTsKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19SRl9LSUxMX0hXOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldF9kZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOworCQlwcml2LT5zdGF0dXMgJj0gfihTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19BU1NPQ0lBVElORyk7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJlcXVlc3Rfc2Nhbik7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmxpbmtfZG93bik7CiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZl9raWxsLCAyICogSFopOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9SRl9LSUxMX0RPTkU7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX1JGX0tJTExfRE9ORTsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9GQVRBTF9FUlJPUikgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX0ZBVEFMX0VSUk9SKSB7CiAJCUlQV19FUlJPUigiRmlybXdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CisJCWlmIChwcml2LT5lcnJvcikgeworCQkJSVBXX0VSUk9SKCJTeXNmcyAnZXJyb3InIGxvZyBhbHJlYWR5IGV4aXN0cy5cbiIpOwogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKLQkJaWYgKGlwd19kZWJ1Z19sZXZlbCAmIElQV19ETF9GV19FUlJPUlMpIHsKLQkJCWlwd19kdW1wX25pY19lcnJvcl9sb2cocHJpdik7Ci0JCQlpcHdfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYpOwotCQl9CisJCQlpZiAoaXB3X2RlYnVnX2xldmVsICYgSVBXX0RMX0ZXX0VSUk9SUykgeworCQkJCXN0cnVjdCBpcHdfZndfZXJyb3IgKmVycm9yID0KKwkJCQkgICAgaXB3X2FsbG9jX2Vycm9yX2xvZyhwcml2KTsKKwkJCQlpcHdfZHVtcF9lcnJvcl9sb2cocHJpdiwgZXJyb3IpOworCQkJCWlmIChlcnJvcikKKwkJCQkJaXB3X2ZyZWVfZXJyb3JfbG9nKGVycm9yKTsKKwkJCX0KICNlbmRpZgorCQl9IGVsc2UgeworCQkJcHJpdi0+ZXJyb3IgPSBpcHdfYWxsb2NfZXJyb3JfbG9nKHByaXYpOworCQkJaWYgKHByaXYtPmVycm9yKQorCQkJCUlQV19FUlJPUigiU3lzZnMgJ2Vycm9yJyBsb2cgY2FwdHVyZWQuXG4iKTsKKwkJCWVsc2UKKwkJCQlJUFdfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgc3lzZnMgJ2Vycm9yJyAiCisJCQkJCSAgImxvZy5cbiIpOworI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKwkJCWlmIChpcHdfZGVidWdfbGV2ZWwgJiBJUFdfRExfRldfRVJST1JTKQorCQkJCWlwd19kdW1wX2Vycm9yX2xvZyhwcml2LCBwcml2LT5lcnJvcik7CisjZW5kaWYKKwkJfQorCisJCS8qIFhYWDogSWYgaGFyZHdhcmUgZW5jcnlwdGlvbiBpcyBmb3IgV1BBL1dQQTIsCisJCSAqIHdlIGhhdmUgdG8gbm90aWZ5IHRoZSBzdXBwbGljYW50LiAqLworCQlpZiAocHJpdi0+aWVlZS0+c2VjLmVuY3J5cHQpIHsKKwkJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0FTU09DSUFURUQ7CisJCQlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdik7CisJCX0KKworCQkvKiBLZWVwIHRoZSByZXN0YXJ0IHByb2Nlc3MgZnJvbSB0cnlpbmcgdG8gc2VuZCBob3N0CisJCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KKwkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfSU5JVDsKKworCQkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLworCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCiAJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfRkFUQUxfRVJST1I7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX0ZBVEFMX0VSUk9SOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1BBUklUWV9FUlJPUikgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX1BBUklUWV9FUlJPUikgewogCQlJUFdfRVJST1IoIlBhcml0eSBlcnJvclxuIik7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1BBUklUWV9FUlJPUjsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfUEFSSVRZX0VSUk9SOwogCX0KIAogCWlmIChoYW5kbGVkICE9IGludGEpIHsKQEAgLTExMDMsNyArMTgxMSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRwogI2RlZmluZSBJUFdfQ01EKHgpIGNhc2UgSVBXX0NNRF8gIyMgeCA6IHJldHVybiAjeAogc3RhdGljIGNoYXIgKmdldF9jbWRfc3RyaW5nKHU4IGNtZCkKIHsKQEAgLTExNjIsNDQgKzE4NjksNzggQEAKIAkJcmV0dXJuICJVTktOT1dOIjsKIAl9CiB9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lQV19ERUJVRyAqLwogCiAjZGVmaW5lIEhPU1RfQ09NUExFVEVfVElNRU9VVCBIWgogc3RhdGljIGludCBpcHdfc2VuZF9jbWQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaG9zdF9jbWQgKmNtZCkKIHsKIAlpbnQgcmMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSENNRF9BQ1RJVkUpIHsKLQkJSVBXX0VSUk9SKCJBbHJlYWR5IHNlbmRpbmcgYSBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOworCQlJUFdfRVJST1IoIkZhaWxlZCB0byBzZW5kICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBjb21tYW5kLlxuIiwKKwkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5jbWQpKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0hDTURfQUNUSVZFOwogCi0JSVBXX0RFQlVHX0hDKCJTZW5kaW5nICVzIGNvbW1hbmQgKCMlZCksICVkIGJ5dGVzXG4iLAotCQkgICAgIGdldF9jbWRfc3RyaW5nKGNtZC0+Y21kKSwgY21kLT5jbWQsIGNtZC0+bGVuKTsKKwlpZiAocHJpdi0+Y21kbG9nKSB7CisJCXByaXYtPmNtZGxvZ1twcml2LT5jbWRsb2dfcG9zXS5qaWZmaWVzID0gamlmZmllczsKKwkJcHJpdi0+Y21kbG9nW3ByaXYtPmNtZGxvZ19wb3NdLmNtZC5jbWQgPSBjbWQtPmNtZDsKKwkJcHJpdi0+Y21kbG9nW3ByaXYtPmNtZGxvZ19wb3NdLmNtZC5sZW4gPSBjbWQtPmxlbjsKKwkJbWVtY3B5KHByaXYtPmNtZGxvZ1twcml2LT5jbWRsb2dfcG9zXS5jbWQucGFyYW0sIGNtZC0+cGFyYW0sCisJCSAgICAgICBjbWQtPmxlbik7CisJCXByaXYtPmNtZGxvZ1twcml2LT5jbWRsb2dfcG9zXS5yZXRjb2RlID0gLTE7CisJfQorCisJSVBXX0RFQlVHX0hDKCIlcyBjb21tYW5kICgjJWQpICVkIGJ5dGVzOiAweCUwOFhcbiIsCisJCSAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5jbWQpLCBjbWQtPmNtZCwgY21kLT5sZW4sCisJCSAgICAgcHJpdi0+c3RhdHVzKTsKIAlwcmludGtfYnVmKElQV19ETF9IT1NUX0NPTU1BTkQsICh1OCAqKSBjbWQtPnBhcmFtLCBjbWQtPmxlbik7CiAKIAlyYyA9IGlwd19xdWV1ZV90eF9oY21kKHByaXYsIGNtZC0+Y21kLCAmY21kLT5wYXJhbSwgY21kLT5sZW4sIDApOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOworCWlmIChyYykgeworCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKKwkJSVBXX0VSUk9SKCJGYWlsZWQgdG8gc2VuZCAlczogUmVhc29uICVkXG4iLAorCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmNtZCksIHJjKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlnb3RvIGV4aXQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAogCQkJCQkgICAgICAhKHByaXYtPgogCQkJCQkJc3RhdHVzICYgU1RBVFVTX0hDTURfQUNUSVZFKSwKIAkJCQkJICAgICAgSE9TVF9DT01QTEVURV9USU1FT1VUKTsKIAlpZiAocmMgPT0gMCkgewotCQlJUFdfREVCVUdfSU5GTygiQ29tbWFuZCBjb21wbGV0aW9uIGZhaWxlZCBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkgICAgICAgamlmZmllc190b19tc2VjcyhIT1NUX0NPTVBMRVRFX1RJTUVPVVQpKTsKLQkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfSENNRF9BQ1RJVkU7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgewotCQlJUFdfREVCVUdfSU5GTygiQ29tbWFuZCBhYm9ydGVkIGR1ZSB0byBSRiBLaWxsIFN3aXRjaFxuIik7Ci0JCXJldHVybiAtRUlPOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0hDTURfQUNUSVZFKSB7CisJCQlJUFdfRVJST1IoIkZhaWxlZCB0byBzZW5kICVzOiBDb21tYW5kIHRpbWVkIG91dC5cbiIsCisJCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmNtZCkpOworCQkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfSENNRF9BQ1RJVkU7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlyYyA9IDA7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfSFcpIHsKKwkJSVBXX0VSUk9SKCJGYWlsZWQgdG8gc2VuZCAlczogQWJvcnRlZCBkdWUgdG8gUkYga2lsbCBzd2l0Y2guXG4iLAorCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmNtZCkpOworCQlyYyA9IC1FSU87CisJCWdvdG8gZXhpdDsKIAl9CiAKLQlyZXR1cm4gMDsKKyAgICAgIGV4aXQ6CisJaWYgKHByaXYtPmNtZGxvZykgeworCQlwcml2LT5jbWRsb2dbcHJpdi0+Y21kbG9nX3BvcysrXS5yZXRjb2RlID0gcmM7CisJCXByaXYtPmNtZGxvZ19wb3MgJT0gcHJpdi0+Y21kbG9nX2xlbjsKKwl9CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX2hvc3RfY29tcGxldGUoc3RydWN0IGlwd19wcml2ICpwcml2KQpAQCAtMTIxNCwxMiArMTk1NSw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgSE9TVF9DT01QTEVURSBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCkBAIC0xMjM1LDEzICsxOTcxLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCBjb25maWcsIHNpemVvZigqY29uZmlnKSk7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFNZU1RFTV9DT05GSUcgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwltZW1jcHkoY21kLnBhcmFtLCBjb25maWcsIHNpemVvZigqY29uZmlnKSk7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9zc2lkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggKiBzc2lkLCBpbnQgbGVuKQpAQCAtMTI1NiwxMyArMTk4Nyw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQltZW1jcHkoJmNtZC5wYXJhbSwgc3NpZCwgY21kLmxlbik7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFNTSUQgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwltZW1jcHkoY21kLnBhcmFtLCBzc2lkLCBjbWQubGVuKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX2FkYXB0ZXJfYWRkcmVzcyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHU4ICogbWFjKQpAQCAtMTI4MCwxNiArMjAwNiwxNSBAQAogCUlQV19ERUJVR19JTkZPKCIlczogU2V0dGluZyBNQUMgdG8gIiBNQUNfRk1UICJcbiIsCiAJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBNQUNfQVJHKG1hYykpOwogCi0JbWVtY3B5KCZjbWQucGFyYW0sIG1hYywgRVRIX0FMRU4pOwotCi0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIEFEQVBURVJfQUREUkVTUyBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sIG1hYywgRVRIX0FMRU4pOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKKy8qCisgKiBOT1RFOiBUaGlzIG11c3QgYmUgZXhlY3V0ZWQgZnJvbSBvdXIgd29ya3F1ZXVlIGFzIGl0IHJlc3VsdHMgaW4gdWRlbGF5CisgKiBiZWluZyBjYWxsZWQgd2hpY2ggbWF5IGNvcnJ1cHQgdGhlIGtleWJvYXJkIGlmIGV4ZWN1dGVkIG9uIGRlZmF1bHQKKyAqIHdvcmtxdWV1ZQorICovCiBzdGF0aWMgdm9pZCBpcHdfYWRhcHRlcl9yZXN0YXJ0KHZvaWQgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gYWRhcHRlcjsKQEAgLTEyOTgsMTIgKzIwMjMsMjUgQEAKIAkJcmV0dXJuOwogCiAJaXB3X2Rvd24ocHJpdik7CisKKwlpZiAocHJpdi0+YXNzb2NfbmV0d29yayAmJgorCSAgICAocHJpdi0+YXNzb2NfbmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKKwkJaXB3X3JlbW92ZV9jdXJyZW50X25ldHdvcmsocHJpdik7CisKIAlpZiAoaXB3X3VwKHByaXYpKSB7CiAJCUlQV19FUlJPUigiRmFpbGVkIHRvIHVwIGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19iZ19hZGFwdGVyX3Jlc3RhcnQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2FkYXB0ZXJfcmVzdGFydChkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKwogI2RlZmluZSBJUFdfU0NBTl9DSEVDS19XQVRDSERPRyAoNSAqIEhaKQogCiBzdGF0aWMgdm9pZCBpcHdfc2Nhbl9jaGVjayh2b2lkICpkYXRhKQpAQCAtMTMxMywxMCArMjA1MSwxOCBAQAogCQlJUFdfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCiAJCQkgICAgICAgImFkYXB0ZXIgKCVkbXMpLlxuIiwKIAkJCSAgICAgICBJUFdfU0NBTl9DSEVDS19XQVRDSERPRyAvIDEwMCk7Ci0JCWlwd19hZGFwdGVyX3Jlc3RhcnQocHJpdik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19iZ19zY2FuX2NoZWNrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19zY2FuX2NoZWNrKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCiBzdGF0aWMgaW50IGlwd19zZW5kX3NjYW5fcmVxdWVzdF9leHQoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSAgICAgc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0ICpyZXF1ZXN0KQogewpAQCAtMTMyNSwyMCArMjA3MSw4IEBACiAJCS5sZW4gPSBzaXplb2YoKnJlcXVlc3QpCiAJfTsKIAotCWlmICghcHJpdiB8fCAhcmVxdWVzdCkgewotCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQltZW1jcHkoJmNtZC5wYXJhbSwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSk7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFNDQU5fUkVRVUVTVF9FWFQgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jaGVjaywKLQkJCSAgIElQV19TQ0FOX0NIRUNLX1dBVENIRE9HKTsKLQlyZXR1cm4gMDsKKwltZW1jcHkoY21kLnBhcmFtLCByZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGlwd19wcml2ICpwcml2KQpAQCAtMTM1MywxMiArMjA4Nyw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgU0NBTl9BQk9SVCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NldF9zZW5zaXRpdml0eShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUxNiBzZW5zKQpAQCAtMTM3MCwxMiArMjA5OSw3IEBACiAJc3RydWN0IGlwd19zZW5zaXRpdml0eV9jYWxpYiAqY2FsaWIgPSAoc3RydWN0IGlwd19zZW5zaXRpdml0eV9jYWxpYiAqKQogCSAgICAmY21kLnBhcmFtOwogCWNhbGliLT5iZWFjb25fcnNzaV9yYXcgPSBzZW5zOwotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBTRU5TSVRJVklUWSBDQUxJQiBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfYXNzb2NpYXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKQEAgLTEzODYsMTggKzIxMTAsMjYgQEAKIAkJLmxlbiA9IHNpemVvZigqYXNzb2NpYXRlKQogCX07CiAKKwlzdHJ1Y3QgaXB3X2Fzc29jaWF0ZSB0bXBfYXNzb2NpYXRlOworCW1lbWNweSgmdG1wX2Fzc29jaWF0ZSwgYXNzb2NpYXRlLCBzaXplb2YoKmFzc29jaWF0ZSkpOworCXRtcF9hc3NvY2lhdGUucG9saWN5X3N1cHBvcnQgPQorCSAgICBjcHVfdG9fbGUxNih0bXBfYXNzb2NpYXRlLnBvbGljeV9zdXBwb3J0KTsKKwl0bXBfYXNzb2NpYXRlLmFzc29jX3RzZl9tc3cgPSBjcHVfdG9fbGUzMih0bXBfYXNzb2NpYXRlLmFzc29jX3RzZl9tc3cpOworCXRtcF9hc3NvY2lhdGUuYXNzb2NfdHNmX2xzdyA9IGNwdV90b19sZTMyKHRtcF9hc3NvY2lhdGUuYXNzb2NfdHNmX2xzdyk7CisJdG1wX2Fzc29jaWF0ZS5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYodG1wX2Fzc29jaWF0ZS5jYXBhYmlsaXR5KTsKKwl0bXBfYXNzb2NpYXRlLmxpc3Rlbl9pbnRlcnZhbCA9CisJICAgIGNwdV90b19sZTE2KHRtcF9hc3NvY2lhdGUubGlzdGVuX2ludGVydmFsKTsKKwl0bXBfYXNzb2NpYXRlLmJlYWNvbl9pbnRlcnZhbCA9CisJICAgIGNwdV90b19sZTE2KHRtcF9hc3NvY2lhdGUuYmVhY29uX2ludGVydmFsKTsKKwl0bXBfYXNzb2NpYXRlLmF0aW1fd2luZG93ID0gY3B1X3RvX2xlMTYodG1wX2Fzc29jaWF0ZS5hdGltX3dpbmRvdyk7CisKIAlpZiAoIXByaXYgfHwgIWFzc29jaWF0ZSkgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQltZW1jcHkoJmNtZC5wYXJhbSwgYXNzb2NpYXRlLCBzaXplb2YoKmFzc29jaWF0ZSkpOwotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBBU1NPQ0lBVEUgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwltZW1jcHkoY21kLnBhcmFtLCAmdG1wX2Fzc29jaWF0ZSwgc2l6ZW9mKCphc3NvY2lhdGUpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3N1cHBvcnRlZF9yYXRlcyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCkBAIC0xNDEzLDEzICsyMTQ1LDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCByYXRlcywgc2l6ZW9mKCpyYXRlcykpOwotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBTVVBQT1JURURfUkFURVMgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwltZW1jcHkoY21kLnBhcmFtLCByYXRlcywgc2l6ZW9mKCpyYXRlcykpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NldF9yYW5kb21fc2VlZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCkBAIC0xNDM2LDE1ICsyMTYzLDkgQEAKIAogCWdldF9yYW5kb21fYnl0ZXMoJmNtZC5wYXJhbSwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFNFRURfTlVNQkVSIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAotI2lmIDAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfY2FyZF9kaXNhYmxlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIHBoeV9vZmYpCiB7CiAJc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKQEAgLTE0NTksMTQgKzIxODAsOCBAQAogCiAJKigodTMyICopICYgY21kLnBhcmFtKSA9IHBoeV9vZmY7CiAKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgQ0FSRF9ESVNBQkxFIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IGlwd19zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGlwd190eF9wb3dlciAqcG93ZXIpCiB7CkBAIC0xNDgwLDEyICsyMTk1LDUxIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQltZW1jcHkoJmNtZC5wYXJhbSwgcG93ZXIsIHNpemVvZigqcG93ZXIpKTsKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgVFhfUE9XRVIgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9CisJbWVtY3B5KGNtZC5wYXJhbSwgcG93ZXIsIHNpemVvZigqcG93ZXIpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworfQogCitzdGF0aWMgaW50IGlwd19zZXRfdHhfcG93ZXIoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwlzdHJ1Y3QgaXB3X3R4X3Bvd2VyIHR4X3Bvd2VyOworCXM4IG1heF9wb3dlcjsKKwlpbnQgaTsKKworCW1lbXNldCgmdHhfcG93ZXIsIDAsIHNpemVvZih0eF9wb3dlcikpOworCisJLyogY29uZmlndXJlIGRldmljZSBmb3IgJ0cnIGJhbmQgKi8KKwl0eF9wb3dlci5pZWVlX21vZGUgPSBJUFdfR19NT0RFOworCXR4X3Bvd2VyLm51bV9jaGFubmVscyA9IGdlby0+YmdfY2hhbm5lbHM7CisJZm9yIChpID0gMDsgaSA8IGdlby0+YmdfY2hhbm5lbHM7IGkrKykgeworCQltYXhfcG93ZXIgPSBnZW8tPmJnW2ldLm1heF9wb3dlcjsKKwkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0uY2hhbm5lbF9udW1iZXIgPQorCQkgICAgZ2VvLT5iZ1tpXS5jaGFubmVsOworCQl0eF9wb3dlci5jaGFubmVsc190eF9wb3dlcltpXS50eF9wb3dlciA9IG1heF9wb3dlciA/CisJCSAgICBtaW4obWF4X3Bvd2VyLCBwcml2LT50eF9wb3dlcikgOiBwcml2LT50eF9wb3dlcjsKKwl9CisJaWYgKGlwd19zZW5kX3R4X3Bvd2VyKHByaXYsICZ0eF9wb3dlcikpCisJCXJldHVybiAtRUlPOworCisJLyogY29uZmlndXJlIGRldmljZSB0byBhbHNvIGhhbmRsZSAnQicgYmFuZCAqLworCXR4X3Bvd2VyLmllZWVfbW9kZSA9IElQV19CX01PREU7CisJaWYgKGlwd19zZW5kX3R4X3Bvd2VyKHByaXYsICZ0eF9wb3dlcikpCisJCXJldHVybiAtRUlPOworCisJLyogY29uZmlndXJlIGRldmljZSB0byBhbHNvIGhhbmRsZSAnQScgYmFuZCAqLworCWlmIChwcml2LT5pZWVlLT5hYmdfdHJ1ZSkgeworCQl0eF9wb3dlci5pZWVlX21vZGUgPSBJUFdfQV9NT0RFOworCQl0eF9wb3dlci5udW1fY2hhbm5lbHMgPSBnZW8tPmFfY2hhbm5lbHM7CisJCWZvciAoaSA9IDA7IGkgPCB0eF9wb3dlci5udW1fY2hhbm5lbHM7IGkrKykgeworCQkJbWF4X3Bvd2VyID0gZ2VvLT5hW2ldLm1heF9wb3dlcjsKKwkJCXR4X3Bvd2VyLmNoYW5uZWxzX3R4X3Bvd2VyW2ldLmNoYW5uZWxfbnVtYmVyID0KKwkJCSAgICBnZW8tPmFbaV0uY2hhbm5lbDsKKwkJCXR4X3Bvd2VyLmNoYW5uZWxzX3R4X3Bvd2VyW2ldLnR4X3Bvd2VyID0gbWF4X3Bvd2VyID8KKwkJCSAgICBtaW4obWF4X3Bvd2VyLCBwcml2LT50eF9wb3dlcikgOiBwcml2LT50eF9wb3dlcjsKKwkJfQorCQlpZiAoaXB3X3NlbmRfdHhfcG93ZXIocHJpdiwgJnR4X3Bvd2VyKSkKKwkJCXJldHVybiAtRUlPOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUwNCwxMyArMjI1OCw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQltZW1jcHkoJmNtZC5wYXJhbSwgJnJ0c190aHJlc2hvbGQsIHNpemVvZihydHNfdGhyZXNob2xkKSk7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFJUU19USFJFU0hPTEQgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwltZW1jcHkoY21kLnBhcmFtLCAmcnRzX3RocmVzaG9sZCwgc2l6ZW9mKHJ0c190aHJlc2hvbGQpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTE2IGZyYWcpCkBAIC0xNTI4LDEzICsyMjc3LDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCAmZnJhZ190aHJlc2hvbGQsIHNpemVvZihmcmFnX3RocmVzaG9sZCkpOwotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBGUkFHX1RIUkVTSE9MRCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sICZmcmFnX3RocmVzaG9sZCwgc2l6ZW9mKGZyYWdfdGhyZXNob2xkKSk7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9wb3dlcl9tb2RlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIG1vZGUpCkBAIC0xNTY0LDEyICsyMzA4LDI3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBQT1dFUl9NT0RFIGNvbW1hbmRcbiIpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcmV0cnlfbGltaXQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1OCBzbGltaXQsIHU4IGxsaW1pdCkKK3sKKwlzdHJ1Y3QgaXB3X3JldHJ5X2xpbWl0IHJldHJ5X2xpbWl0ID0geworCQkuc2hvcnRfcmV0cnlfbGltaXQgPSBzbGltaXQsCisJCS5sb25nX3JldHJ5X2xpbWl0ID0gbGxpbWl0CisJfTsKKwlzdHJ1Y3QgaG9zdF9jbWQgY21kID0geworCQkuY21kID0gSVBXX0NNRF9SRVRSWV9MSU1JVCwKKwkJLmxlbiA9IHNpemVvZihyZXRyeV9saW1pdCkKKwl9OworCisJaWYgKCFwcml2KSB7CisJCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sICZyZXRyeV9saW1pdCwgc2l6ZW9mKHJldHJ5X2xpbWl0KSk7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogLyoKQEAgLTE2NzEsOCArMjQzMCw3IEBACiAvKiBkYXRhJ3MgY29weSBvZiB0aGUgZWVwcm9tIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIHZvaWQgZWVwcm9tX3BhcnNlX21hYyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHU4ICogbWFjKQogewotCXU4ICplZSA9ICh1OCAqKSBwcml2LT5lZXByb207Ci0JbWVtY3B5KG1hYywgJmVlW0VFUFJPTV9NQUNfQUREUkVTU10sIDYpOworCW1lbWNweShtYWMsICZwcml2LT5lZXByb21bRUVQUk9NX01BQ19BRERSRVNTXSwgNik7CiB9CiAKIC8qCkBAIC0xNjkyLDcgKzI0NTAsNyBAQAogCiAJLyogcmVhZCBlbnRpcmUgY29udGVudHMgb2YgZWVwcm9tIGludG8gcHJpdmF0ZSBidWZmZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0JCWVlcHJvbVtpXSA9IGVlcHJvbV9yZWFkX3UxNihwcml2LCAodTgpIGkpOworCQllZXByb21baV0gPSBsZTE2X3RvX2NwdShlZXByb21fcmVhZF91MTYocHJpdiwgKHU4KSBpKSk7CiAKIAkvKgogCSAgIElmIHRoZSBkYXRhIGxvb2tzIGNvcnJlY3QsIHRoZW4gY29weSBpdCB0byBvdXIgcHJpdmF0ZQpAQCAtMTcwMyw3ICsyNDYxLDcgQEAKIAkJSVBXX0RFQlVHX0lORk8oIldyaXRpbmcgRUVQUk9NIGRhdGEgaW50byBTUkFNXG4iKTsKIAogCQkvKiB3cml0ZSB0aGUgZWVwcm9tIGRhdGEgdG8gc3JhbSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgQ1gyX0VFUFJPTV9JTUFHRV9TSVpFOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBJUFdfRUVQUk9NX0lNQUdFX1NJWkU7IGkrKykKIAkJCWlwd193cml0ZTgocHJpdiwgSVBXX0VFUFJPTV9EQVRBICsgaSwgcHJpdi0+ZWVwcm9tW2ldKTsKIAogCQkvKiBEbyBub3QgbG9hZCBlZXByb20gZGF0YSBvbiBmYXRhbCBlcnJvciBvciBzdXNwZW5kICovCkBAIC0xNzIzLDE0ICsyNDgxLDE0IEBACiAJY291bnQgPj49IDI7CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfQVVUT0lOQ19BRERSLCBzdGFydCk7CisJX2lwd193cml0ZTMyKHByaXYsIElQV19BVVRPSU5DX0FERFIsIHN0YXJ0KTsKIAl3aGlsZSAoY291bnQtLSkKLQkJX2lwd193cml0ZTMyKHByaXYsIENYMl9BVVRPSU5DX0RBVEEsIDApOworCQlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0FVVE9JTkNfREFUQSwgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfZndfZG1hX3Jlc2V0X2NvbW1hbmRfYmxvY2tzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKLQlpcHdfemVyb19tZW1vcnkocHJpdiwgQ1gyX1NIQVJFRF9TUkFNX0RNQV9DT05UUk9MLAorCWlwd196ZXJvX21lbW9yeShwcml2LCBJUFdfU0hBUkVEX1NSQU1fRE1BX0NPTlRST0wsCiAJCQlDQl9OVU1CRVJfT0ZfRUxFTUVOVFNfU01BTEwgKgogCQkJc2l6ZW9mKHN0cnVjdCBjb21tYW5kX2Jsb2NrKSk7CiB9CkBAIC0xNzQ0LDcgKzI1MDIsNyBAQAogCWlwd19md19kbWFfcmVzZXRfY29tbWFuZF9ibG9ja3MocHJpdik7CiAKIAkvKiBXcml0ZSBDQiBiYXNlIGFkZHJlc3MgKi8KLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX0RNQV9JX0NCX0JBU0UsIENYMl9TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCk7CisJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19ETUFfSV9DQl9CQVNFLCBJUFdfU0hBUkVEX1NSQU1fRE1BX0NPTlRST0wpOwogCiAJSVBXX0RFQlVHX0ZXKCI8PCA6IFxuIik7CiAJcmV0dXJuIDA7CkBAIC0xNzU4LDcgKzI1MTYsNyBAQAogCiAJLy9zZXQgdGhlIFN0b3AgYW5kIEFib3J0IGJpdAogCWNvbnRyb2wgPSBETUFfQ09OVFJPTF9TTUFMTF9DQl9DT05TVF9WQUxVRSB8IERNQV9DQl9TVE9QX0FORF9BQk9SVDsKLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX0RNQV9JX0RNQV9DT05UUk9MLCBjb250cm9sKTsKKwlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0RNQV9JX0RNQV9DT05UUk9MLCBjb250cm9sKTsKIAlwcml2LT5zcmFtX2Rlc2MubGFzdF9jYl9pbmRleCA9IDA7CiAKIAlJUFdfREVCVUdfRlcoIjw8IFxuIik7CkBAIC0xNzY4LDcgKzI1MjYsNyBAQAogCQkJCQkgIHN0cnVjdCBjb21tYW5kX2Jsb2NrICpjYikKIHsKIAl1MzIgYWRkcmVzcyA9Ci0JICAgIENYMl9TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCArCisJICAgIElQV19TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCArCiAJICAgIChzaXplb2Yoc3RydWN0IGNvbW1hbmRfYmxvY2spICogaW5kZXgpOwogCUlQV19ERUJVR19GVygiPj4gOlxuIik7CiAKQEAgLTE3OTIsMTMgKzI1NTAsMTMgQEAKIAkJCQkJICAgICAgICZwcml2LT5zcmFtX2Rlc2MuY2JfbGlzdFtpbmRleF0pOwogCiAJLyogRW5hYmxlIHRoZSBETUEgaW4gdGhlIENTUiByZWdpc3RlciAqLwotCWlwd19jbGVhcl9iaXQocHJpdiwgQ1gyX1JFU0VUX1JFRywKLQkJICAgICAgQ1gyX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQgfAotCQkgICAgICBDWDJfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKKwlpcHdfY2xlYXJfYml0KHByaXYsIElQV19SRVNFVF9SRUcsCisJCSAgICAgIElQV19SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEIHwKKwkJICAgICAgSVBXX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CiAKIAkvKiBTZXQgdGhlIFN0YXJ0IGJpdC4gKi8KIAljb250cm9sID0gRE1BX0NPTlRST0xfU01BTExfQ0JfQ09OU1RfVkFMVUUgfCBETUFfQ0JfU1RBUlQ7Ci0JaXB3X3dyaXRlX3JlZzMyKHByaXYsIENYMl9ETUFfSV9ETUFfQ09OVFJPTCwgY29udHJvbCk7CisJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19ETUFfSV9ETUFfQ09OVFJPTCwgY29udHJvbCk7CiAKIAlJUFdfREVCVUdfRlcoIjw8IDpcbiIpOwogCXJldHVybiAwOwpAQCAtMTgxMSwxMiArMjU2OSwxMiBAQAogCXUzMiBjYl9maWVsZHNfYWRkcmVzcyA9IDA7CiAKIAlJUFdfREVCVUdfRlcoIj4+IDpcbiIpOwotCWFkZHJlc3MgPSBpcHdfcmVhZF9yZWczMihwcml2LCBDWDJfRE1BX0lfQ1VSUkVOVF9DQik7CisJYWRkcmVzcyA9IGlwd19yZWFkX3JlZzMyKHByaXYsIElQV19ETUFfSV9DVVJSRU5UX0NCKTsKIAlJUFdfREVCVUdfRldfSU5GTygiQ3VycmVudCBDQiBpcyAweCV4IFxuIiwgYWRkcmVzcyk7CiAKIAkvKiBSZWFkIHRoZSBETUEgQ29udHJvbG9yIHJlZ2lzdGVyICovCi0JcmVnaXN0ZXJfdmFsdWUgPSBpcHdfcmVhZF9yZWczMihwcml2LCBDWDJfRE1BX0lfRE1BX0NPTlRST0wpOwotCUlQV19ERUJVR19GV19JTkZPKCJDWDJfRE1BX0lfRE1BX0NPTlRST0wgaXMgMHgleCBcbiIsIHJlZ2lzdGVyX3ZhbHVlKTsKKwlyZWdpc3Rlcl92YWx1ZSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIElQV19ETUFfSV9ETUFfQ09OVFJPTCk7CisJSVBXX0RFQlVHX0ZXX0lORk8oIklQV19ETUFfSV9ETUFfQ09OVFJPTCBpcyAweCV4IFxuIiwgcmVnaXN0ZXJfdmFsdWUpOwogCiAJLyogUHJpbnQgdGhlIENCIHZhbHVlcyAqLwogCWNiX2ZpZWxkc19hZGRyZXNzID0gYWRkcmVzczsKQEAgLTE4NDUsOSArMjYwMyw5IEBACiAJdTMyIGN1cnJlbnRfY2JfaW5kZXggPSAwOwogCiAJSVBXX0RFQlVHX0ZXKCI8PCA6XG4iKTsKLQljdXJyZW50X2NiX2FkZHJlc3MgPSBpcHdfcmVhZF9yZWczMihwcml2LCBDWDJfRE1BX0lfQ1VSUkVOVF9DQik7CisJY3VycmVudF9jYl9hZGRyZXNzID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0RNQV9JX0NVUlJFTlRfQ0IpOwogCi0JY3VycmVudF9jYl9pbmRleCA9IChjdXJyZW50X2NiX2FkZHJlc3MgLSBDWDJfU0hBUkVEX1NSQU1fRE1BX0NPTlRST0wpIC8KKwljdXJyZW50X2NiX2luZGV4ID0gKGN1cnJlbnRfY2JfYWRkcmVzcyAtIElQV19TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCkgLwogCSAgICBzaXplb2Yoc3RydWN0IGNvbW1hbmRfYmxvY2spOwogCiAJSVBXX0RFQlVHX0ZXX0lORk8oIkN1cnJlbnQgQ0IgaW5kZXggMHgleCBhZGRyZXNzID0gMHglWCBcbiIsCkBAIC0xOTc2LDggKzI3MzQsOCBAQAogCWlwd19md19kbWFfYWJvcnQocHJpdik7CiAKIAkvKkRpc2FibGUgdGhlIERNQSBpbiB0aGUgQ1NSIHJlZ2lzdGVyICovCi0JaXB3X3NldF9iaXQocHJpdiwgQ1gyX1JFU0VUX1JFRywKLQkJICAgIENYMl9SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEIHwgQ1gyX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywKKwkJICAgIElQV19SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEIHwgSVBXX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CiAKIAlJUFdfREVCVUdfRlcoIjw8IGRtYVdhaXRTeW5jIFxuIik7CiAJcmV0dXJuIDA7CkBAIC0xOTg3LDYgKzI3NDUsOSBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQsICpzYWZlOwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVsZW1lbnQsIHNhZmUsICZwcml2LT5pZWVlLT5uZXR3b3JrX2xpc3QpIHsKIAkJbmV0d29yayA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrLCBsaXN0KTsKIAkJaWYgKCFtZW1jbXAobmV0d29yay0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTikpIHsKQEAgLTE5OTUsNiArMjc1Niw3IEBACiAJCQkJICAgICAgJnByaXYtPmllZWUtPm5ldHdvcmtfZnJlZV9saXN0KTsKIAkJfQogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMjAzNywxMCArMjc5OSwxMCBAQAogCiAJSVBXX0RFQlVHX1RSQUNFKCI+PiBcbiIpOwogCS8qIHN0b3AgbWFzdGVyLiB0eXBpY2FsIGRlbGF5IC0gMCAqLwotCWlwd19zZXRfYml0KHByaXYsIENYMl9SRVNFVF9SRUcsIENYMl9SRVNFVF9SRUdfU1RPUF9NQVNURVIpOworCWlwd19zZXRfYml0KHByaXYsIElQV19SRVNFVF9SRUcsIElQV19SRVNFVF9SRUdfU1RPUF9NQVNURVIpOwogCi0JcmMgPSBpcHdfcG9sbF9iaXQocHJpdiwgQ1gyX1JFU0VUX1JFRywKLQkJCSAgQ1gyX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CisJcmMgPSBpcHdfcG9sbF9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywKKwkJCSAgSVBXX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CiAJaWYgKHJjIDwgMCkgewogCQlJUFdfRVJST1IoInN0b3AgbWFzdGVyIGZhaWxlZCBpbiAxMG1zXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjA1Niw3ICsyODE4LDcgQEAKIAlJUFdfREVCVUdfVFJBQ0UoIj4+IFxuIik7CiAJbWRlbGF5KDUpOwogCi0JaXB3X2NsZWFyX2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLCBDQkRfUkVTRVRfUkVHX1BSSU5DRVRPTl9SRVNFVCk7CisJaXB3X2NsZWFyX2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLCBDQkRfUkVTRVRfUkVHX1BSSU5DRVRPTl9SRVNFVCk7CiAKIAkvKiBubyBvbmUga25vd3MgdGltaW5nLCBmb3Igc2FmZXR5IGFkZCBzb21lIGRlbGF5ICovCiAJbWRlbGF5KDUpOwpAQCAtMjA3MywxMyArMjgzNSwxMiBAQAogfTsKIAogI2RlZmluZSBJUFdfRldfTUFKT1JfVkVSU0lPTiAyCi0jZGVmaW5lIElQV19GV19NSU5PUl9WRVJTSU9OIDIKKyNkZWZpbmUgSVBXX0ZXX01JTk9SX1ZFUlNJT04gNAogCiAjZGVmaW5lIElQV19GV19NSU5PUih4KSAoKHggJiAweGZmKSA+PiA4KQogI2RlZmluZSBJUFdfRldfTUFKT1IoeCkgKHggJiAweGZmKQogCi0jZGVmaW5lIElQV19GV19WRVJTSU9OICgoSVBXX0ZXX01JTk9SX1ZFUlNJT04gPDwgOCkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgSVBXX0ZXX01BSk9SX1ZFUlNJT04pCisjZGVmaW5lIElQV19GV19WRVJTSU9OICgoSVBXX0ZXX01JTk9SX1ZFUlNJT04gPDwgOCkgfCBJUFdfRldfTUFKT1JfVkVSU0lPTikKIAogI2RlZmluZSBJUFdfRldfUFJFRklYICJpcHctIiBfX3N0cmluZ2lmeShJUFdfRldfTUFKT1JfVkVSU0lPTikgXAogIi4iIF9fc3RyaW5naWZ5KElQV19GV19NSU5PUl9WRVJTSU9OKSAiLSIKQEAgLTIxMDcsOCArMjg2OCw4IEBACiAKIC8vICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWZvciAoYWRkciA9IENYMl9TSEFSRURfTE9XRVJfQk9VTkQ7Ci0JICAgICBhZGRyIDwgQ1gyX1JFR0lTVEVSX0RPTUFJTjFfRU5EOyBhZGRyICs9IDQpIHsKKwlmb3IgKGFkZHIgPSBJUFdfU0hBUkVEX0xPV0VSX0JPVU5EOworCSAgICAgYWRkciA8IElQV19SRUdJU1RFUl9ET01BSU4xX0VORDsgYWRkciArPSA0KSB7CiAJCWlwd193cml0ZTMyKHByaXYsIGFkZHIsIDApOwogCX0KIApAQCAtMjExNywxNiArMjg3OCwxNiBAQAogCS8qIGRlc3Ryb3kgRE1BIHF1ZXVlcyAqLwogCS8qIHJlc2V0IHNlcXVlbmNlICovCiAKLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX01FTV9IQUxUX0FORF9SRVNFVCwgQ1gyX0JJVF9IQUxUX1JFU0VUX09OKTsKKwlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX01FTV9IQUxUX0FORF9SRVNFVCwgSVBXX0JJVF9IQUxUX1JFU0VUX09OKTsKIAlpcHdfYXJjX3JlbGVhc2UocHJpdik7Ci0JaXB3X3dyaXRlX3JlZzMyKHByaXYsIENYMl9NRU1fSEFMVF9BTkRfUkVTRVQsIENYMl9CSVRfSEFMVF9SRVNFVF9PRkYpOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfTUVNX0hBTFRfQU5EX1JFU0VULCBJUFdfQklUX0hBTFRfUkVTRVRfT0ZGKTsKIAltZGVsYXkoMSk7CiAKIAkvKiByZXNldCBQSFkgKi8KLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX0lOVEVSTkFMX0NNRF9FVkVOVCwgQ1gyX0JBU0VCQU5EX1BPV0VSX0RPV04pOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfSU5URVJOQUxfQ01EX0VWRU5ULCBJUFdfQkFTRUJBTkRfUE9XRVJfRE9XTik7CiAJbWRlbGF5KDEpOwogCi0JaXB3X3dyaXRlX3JlZzMyKHByaXYsIENYMl9JTlRFUk5BTF9DTURfRVZFTlQsIDApOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfSU5URVJOQUxfQ01EX0VWRU5ULCAwKTsKIAltZGVsYXkoMSk7CiAKIAkvKiBlbmFibGUgdWNvZGUgc3RvcmUgKi8KQEAgLTIxNDQsMTggKzI5MDUsMTkgQEAKIAkgKi8KIAkvKiBsb2FkIG5ldyBpcHcgdUNvZGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gMjsgaSsrKQotCQlpcHdfd3JpdGVfcmVnMTYocHJpdiwgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RPUkUsIGltYWdlW2ldKTsKKwkJaXB3X3dyaXRlX3JlZzE2KHByaXYsIElQV19CQVNFQkFORF9DT05UUk9MX1NUT1JFLAorCQkJCWNwdV90b19sZTE2KGltYWdlW2ldKSk7CiAKIAkvKiBlbmFibGUgRElOTyAqLwotCWlwd193cml0ZV9yZWc4KHByaXYsIENYMl9CQVNFQkFORF9DT05UUk9MX1NUQVRVUywgMCk7Ci0JaXB3X3dyaXRlX3JlZzgocHJpdiwgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCBESU5PX0VOQUJMRV9TWVNURU0pOworCWlwd193cml0ZV9yZWc4KHByaXYsIElQV19CQVNFQkFORF9DT05UUk9MX1NUQVRVUywgMCk7CisJaXB3X3dyaXRlX3JlZzgocHJpdiwgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCBESU5PX0VOQUJMRV9TWVNURU0pOwogCiAJLyogdGhpcyBpcyB3aGVyZSB0aGUgaWd4IC8gd2luIGRyaXZlciBkZXZlYXRlcyBmcm9tIHRoZSBWQVAgZHJpdmVyLiAqLwogCiAJLyogd2FpdCBmb3IgYWxpdmUgcmVzcG9uc2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJLyogcG9sbCBmb3IgaW5jb21pbmcgZGF0YSAqLwotCQljciA9IGlwd19yZWFkX3JlZzgocHJpdiwgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTKTsKKwkJY3IgPSBpcHdfcmVhZF9yZWc4KHByaXYsIElQV19CQVNFQkFORF9DT05UUk9MX1NUQVRVUyk7CiAJCWlmIChjciAmIERJTk9fUlhGSUZPX0RBVEEpCiAJCQlicmVhazsKIAkJbWRlbGF5KDEpOwpAQCAtMjE2Nyw3ICsyOTI5LDggQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZXNwb25zZV9idWZmZXIpOyBpKyspCiAJCQlyZXNwb25zZV9idWZmZXJbaV0gPQotCQkJICAgIGlwd19yZWFkX3JlZzMyKHByaXYsIENYMl9CQVNFQkFORF9SWF9GSUZPX1JFQUQpOworCQkJICAgIGxlMzJfdG9fY3B1KGlwd19yZWFkX3JlZzMyKHByaXYsCisJCQkJCQkgICAgICAgSVBXX0JBU0VCQU5EX1JYX0ZJRk9fUkVBRCkpOwogCQltZW1jcHkoJnByaXYtPmRpbm9fYWxpdmUsIHJlc3BvbnNlX2J1ZmZlciwKIAkJICAgICAgIHNpemVvZihwcml2LT5kaW5vX2FsaXZlKSk7CiAJCWlmIChwcml2LT5kaW5vX2FsaXZlLmFsaXZlX2NvbW1hbmQgPT0gMQpAQCAtMjE5Niw3ICsyOTU5LDcgQEAKIAogCS8qIGRpc2FibGUgRElOTywgb3RoZXJ3aXNlIGZvciBzb21lIHJlYXNvbgogCSAgIGZpcm13YXJlIGhhdmUgcHJvYmxlbSBnZXR0aW5nIGFsaXZlIHJlc3AuICovCi0JaXB3X3dyaXRlX3JlZzgocHJpdiwgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCAwKTsKKwlpcHdfd3JpdGVfcmVnOChwcml2LCBJUFdfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMsIDApOwogCiAvLyAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjIzNiwxMyArMjk5OSwxNCBAQAogCQkgKiBvZmZlc2V0Ki8KIAkJLyogRG1hIGxvYWRpbmcgKi8KIAkJcmMgPSBpcHdfZndfZG1hX2FkZF9idWZmZXIocHJpdiwgc2hhcmVkX3BoeXMgKyBvZmZzZXQsCi0JCQkJCSAgIGNodW5rLT5hZGRyZXNzLCBjaHVuay0+bGVuZ3RoKTsKKwkJCQkJICAgbGUzMl90b19jcHUoY2h1bmstPmFkZHJlc3MpLAorCQkJCQkgICBsZTMyX3RvX2NwdShjaHVuay0+bGVuZ3RoKSk7CiAJCWlmIChyYykgewogCQkJSVBXX0RFQlVHX0lORk8oImRtYUFkZEJ1ZmZlciBGYWlsZWRcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlvZmZzZXQgKz0gY2h1bmstPmxlbmd0aDsKKwkJb2Zmc2V0ICs9IGxlMzJfdG9fY3B1KGNodW5rLT5sZW5ndGgpOwogCX0gd2hpbGUgKG9mZnNldCA8IGxlbik7CiAKIAkvKiBSdW4gdGhlIERNQSBhbmQgd2FpdCBmb3IgdGhlIGFuc3dlciAqLwpAQCAtMjI2OCwxNiArMzAzMiwxNiBAQAogCWludCByYyA9IDA7CiAKIAkvKiBzdG9wICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX1JFU0VUX1JFRywgQ1gyX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX1JFU0VUX1JFRywgSVBXX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CiAKLQlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLAotCQkJICBDWDJfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCwgNTAwKTsKKwlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLAorCQkJICBJUFdfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCwgNTAwKTsKIAlpZiAocmMgPCAwKSB7CiAJCUlQV19FUlJPUigid2FpdCBmb3IgcmVnIG1hc3RlciBkaXNhYmxlZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXB3X3NldF9iaXQocHJpdiwgQ1gyX1JFU0VUX1JFRywgQ0JEX1JFU0VUX1JFR19QUklOQ0VUT05fUkVTRVQpOworCWlwd19zZXRfYml0KHByaXYsIElQV19SRVNFVF9SRUcsIENCRF9SRVNFVF9SRUdfUFJJTkNFVE9OX1JFU0VUKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTIyODcsMTQgKzMwNTEsMTQgQEAKIAlJUFdfREVCVUdfVFJBQ0UoIj4+XG4iKTsKIAogCS8qIHBydkh3U3RhcnROaWMgIHJlbGVhc2UgQVJDICovCi0JaXB3X2NsZWFyX2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLAotCQkgICAgICBDWDJfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCB8Ci0JCSAgICAgIENYMl9SRVNFVF9SRUdfU1RPUF9NQVNURVIgfAorCWlwd19jbGVhcl9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywKKwkJICAgICAgSVBXX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQgfAorCQkgICAgICBJUFdfUkVTRVRfUkVHX1NUT1BfTUFTVEVSIHwKIAkJICAgICAgQ0JEX1JFU0VUX1JFR19QUklOQ0VUT05fUkVTRVQpOwogCiAJLyogZW5hYmxlIHBvd2VyIG1hbmFnZW1lbnQgKi8KLQlpcHdfc2V0X2JpdChwcml2LCBDWDJfR1BfQ05UUkxfUlcsCi0JCSAgICBDWDJfR1BfQ05UUkxfQklUX0hPU1RfQUxMT1dTX1NUQU5EQlkpOworCWlwd19zZXRfYml0KHByaXYsIElQV19HUF9DTlRSTF9SVywKKwkJICAgIElQV19HUF9DTlRSTF9CSVRfSE9TVF9BTExPV1NfU1RBTkRCWSk7CiAKIAlJUFdfREVCVUdfVFJBQ0UoIjw8XG4iKTsKIH0KQEAgLTIzMDcsMjUgKzMwNzEsMjUgQEAKIAkvKiByZXNldCAqLwogCS8qcHJ2SHdJbml0TmljICovCiAJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlciB0byBEMCBzdGF0ZSAqLwotCWlwd19zZXRfYml0KHByaXYsIENYMl9HUF9DTlRSTF9SVywgQ1gyX0dQX0NOVFJMX0JJVF9JTklUX0RPTkUpOworCWlwd19zZXRfYml0KHByaXYsIElQV19HUF9DTlRSTF9SVywgSVBXX0dQX0NOVFJMX0JJVF9JTklUX0RPTkUpOwogCiAJLyogbG93LWxldmVsIFBMTCBhY3RpdmF0aW9uICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX1JFQURfSU5UX1JFR0lTVEVSLAotCQkgICAgQ1gyX0JJVF9JTlRfSE9TVF9TUkFNX1JFQURfSU5UX1JFR0lTVEVSKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfUkVBRF9JTlRfUkVHSVNURVIsCisJCSAgICBJUFdfQklUX0lOVF9IT1NUX1NSQU1fUkVBRF9JTlRfUkVHSVNURVIpOwogCiAJLyogd2FpdCBmb3IgY2xvY2sgc3RhYmlsaXphdGlvbiAqLwotCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIENYMl9HUF9DTlRSTF9SVywKLQkJCSAgQ1gyX0dQX0NOVFJMX0JJVF9DTE9DS19SRUFEWSwgMjUwKTsKKwlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBJUFdfR1BfQ05UUkxfUlcsCisJCQkgIElQV19HUF9DTlRSTF9CSVRfQ0xPQ0tfUkVBRFksIDI1MCk7CiAJaWYgKHJjIDwgMCkKIAkJSVBXX0RFQlVHX0lORk8oIkZBSUxFRCB3YWl0IGZvciBjbG9jayBzdGFibGl6YXRpb25cbiIpOwogCiAJLyogYXNzZXJ0IFNXIHJlc2V0ICovCi0JaXB3X3NldF9iaXQocHJpdiwgQ1gyX1JFU0VUX1JFRywgQ1gyX1JFU0VUX1JFR19TV19SRVNFVCk7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywgSVBXX1JFU0VUX1JFR19TV19SRVNFVCk7CiAKIAl1ZGVsYXkoMTApOwogCiAJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlciB0byBEMCBzdGF0ZSAqLwotCWlwd19zZXRfYml0KHByaXYsIENYMl9HUF9DTlRSTF9SVywgQ1gyX0dQX0NOVFJMX0JJVF9JTklUX0RPTkUpOworCWlwd19zZXRfYml0KHByaXYsIElQV19HUF9DTlRSTF9SVywgSVBXX0dQX0NOVFJMX0JJVF9JTklUX0RPTkUpOwogCiAJSVBXX0RFQlVHX1RSQUNFKCI+PlxuIik7CiAJcmV0dXJuIDA7CkBAIC0yMzM3LDE0ICszMTAxLDE5IEBACiBzdGF0aWMgaW50IGlwd19yZXNldF9uaWMoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUlQV19ERUJVR19UUkFDRSgiPj5cbiIpOwogCiAJcmMgPSBpcHdfaW5pdF9uaWMocHJpdik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCS8qIENsZWFyIHRoZSAnaG9zdCBjb21tYW5kIGFjdGl2ZScgYml0Li4uICovCiAJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfSENNRF9BQ1RJVkU7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCXByaXYtPnN0YXR1cyAmPSB+KFNUQVRVU19TQ0FOTklORyB8IFNUQVRVU19TQ0FOX0FCT1JUSU5HKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfc3RhdGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCUlQV19ERUJVR19UUkFDRSgiPDxcbiIpOwogCXJldHVybiByYzsKQEAgLTIzNjQsMjIgKzMxMzMsMjMgQEAKIAl9CiAKIAloZWFkZXIgPSAoc3RydWN0IGZ3X2hlYWRlciAqKSgqZncpLT5kYXRhOwotCWlmIChJUFdfRldfTUFKT1IoaGVhZGVyLT52ZXJzaW9uKSAhPSBJUFdfRldfTUFKT1JfVkVSU0lPTikgeworCWlmIChJUFdfRldfTUFKT1IobGUzMl90b19jcHUoaGVhZGVyLT52ZXJzaW9uKSkgIT0gSVBXX0ZXX01BSk9SX1ZFUlNJT04pIHsKIAkJSVBXX0VSUk9SKCInJXMnIGZpcm13YXJlIHZlcnNpb24gbm90IGNvbXBhdGlibGUgKCVkICE9ICVkKVxuIiwKIAkJCSAgbmFtZSwKLQkJCSAgSVBXX0ZXX01BSk9SKGhlYWRlci0+dmVyc2lvbiksIElQV19GV19NQUpPUl9WRVJTSU9OKTsKKwkJCSAgSVBXX0ZXX01BSk9SKGxlMzJfdG9fY3B1KGhlYWRlci0+dmVyc2lvbikpLAorCQkJICBJUFdfRldfTUFKT1JfVkVSU0lPTik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCUlQV19ERUJVR19JTkZPKCJMb2FkaW5nIGZpcm13YXJlICclcycgZmlsZSB2JWQuJWQgKCV6ZCBieXRlcylcbiIsCiAJCSAgICAgICBuYW1lLAotCQkgICAgICAgSVBXX0ZXX01BSk9SKGhlYWRlci0+dmVyc2lvbiksCi0JCSAgICAgICBJUFdfRldfTUlOT1IoaGVhZGVyLT52ZXJzaW9uKSwKKwkJICAgICAgIElQV19GV19NQUpPUihsZTMyX3RvX2NwdShoZWFkZXItPnZlcnNpb24pKSwKKwkJICAgICAgIElQV19GV19NSU5PUihsZTMyX3RvX2NwdShoZWFkZXItPnZlcnNpb24pKSwKIAkJICAgICAgICgqZncpLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpKTsKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBDWDJfUlhfQlVGX1NJWkUgKDMwMDApCisjZGVmaW5lIElQV19SWF9CVUZfU0laRSAoMzAwMCkKIAogc3RhdGljIGlubGluZSB2b2lkIGlwd19yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGlwd19yeF9xdWV1ZSAqcnhxKQpAQCAtMjM5OCw4ICszMTY4LDkgQEAKIAkJICogdG8gYW4gU0tCLCBzbyB3ZSBuZWVkIHRvIHVubWFwIGFuZCBmcmVlIHBvdGVudGlhbCBzdG9yYWdlICovCiAJCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhxLT5wb29sW2ldLmRtYV9hZGRyLAotCQkJCQkgQ1gyX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgSVBXX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihyeHEtPnBvb2xbaV0uc2tiKTsKKwkJCXJ4cS0+cG9vbFtpXS5za2IgPSBOVUxMOwogCQl9CiAJCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKIAl9CkBAIC0yNDE3LDYgKzMxODgsMTkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJvb3RmdyA9IE5VTEw7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUodm9pZCkKK3sKKwlpZiAoZndfbG9hZGVkKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoYm9vdGZ3KTsKKwkJcmVsZWFzZV9maXJtd2FyZSh1Y29kZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCQlib290ZncgPSB1Y29kZSA9IGZpcm13YXJlID0gTlVMTDsKKwkJZndfbG9hZGVkID0gMDsKKwl9Cit9CisjZWxzZQorI2RlZmluZSBmcmVlX2Zpcm13YXJlKCkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogc3RhdGljIGludCBpcHdfbG9hZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCkBAIC0yNDQ1LDEwICszMjI5LDEwIEBACiAJCQlyYyA9IGlwd19nZXRfZncocHJpdiwgJmZpcm13YXJlLCBJUFdfRldfTkFNRSgiaWJzcyIpKTsKIAkJCWJyZWFrOwogCi0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogCQljYXNlIElXX01PREVfTU9OSVRPUjoKIAkJCXJjID0gaXB3X2dldF9mdyhwcml2LCAmdWNvZGUsCi0JCQkJCUlQV19GV19OQU1FKCJpYnNzX3Vjb2RlIikpOworCQkJCQlJUFdfRldfTkFNRSgic25pZmZlcl91Y29kZSIpKTsKIAkJCWlmIChyYykKIAkJCQlnb3RvIGVycm9yOwogCkBAIC0yNDg3LDExICszMjcxLDExIEBACiAKICAgICAgIHJldHJ5OgogCS8qIEVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLwotCWlwd193cml0ZTMyKHByaXYsIENYMl9JTlRBX01BU0tfUiwgfkNYMl9JTlRBX01BU0tfQUxMKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9NQVNLX1IsIH5JUFdfSU5UQV9NQVNLX0FMTCk7CiAJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfSU5UX0VOQUJMRUQ7CiAKIAkvKiBhY2sgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lOVEFfUlcsIENYMl9JTlRBX01BU0tfQUxMKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgSVBXX0lOVEFfTUFTS19BTEwpOwogCiAJaXB3X3N0b3BfbmljKHByaXYpOwogCkBAIC0yNTAxLDE0ICszMjg1LDE0IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaXB3X3plcm9fbWVtb3J5KHByaXYsIENYMl9OSUNfU1JBTV9MT1dFUl9CT1VORCwKLQkJCUNYMl9OSUNfU1JBTV9VUFBFUl9CT1VORCAtIENYMl9OSUNfU1JBTV9MT1dFUl9CT1VORCk7CisJaXB3X3plcm9fbWVtb3J5KHByaXYsIElQV19OSUNfU1JBTV9MT1dFUl9CT1VORCwKKwkJCUlQV19OSUNfU1JBTV9VUFBFUl9CT1VORCAtIElQV19OSUNfU1JBTV9MT1dFUl9CT1VORCk7CiAKIAkvKiBETUEgdGhlIGluaXRpYWwgYm9vdCBmaXJtd2FyZSBpbnRvIHRoZSBkZXZpY2UgKi8KIAlyYyA9IGlwd19sb2FkX2Zpcm13YXJlKHByaXYsIGJvb3Rmdy0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSwKIAkJCSAgICAgICBib290ZnctPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOwogCWlmIChyYyA8IDApIHsKLQkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBib290IGZpcm13YXJlXG4iKTsKKwkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBib290IGZpcm13YXJlOiAlZFxuIiwgcmMpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjUxNiw4ICszMzAwLDggQEAKIAlpcHdfc3RhcnRfbmljKHByaXYpOwogCiAJLyogd2FpdCBmb3IgdGhlIGRldmljZSB0byBmaW5pc2ggaXQncyBpbml0aWFsIHN0YXJ0dXAgc2VxdWVuY2UgKi8KLQlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBDWDJfSU5UQV9SVywKLQkJCSAgQ1gyX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUsIDUwMCk7CisJcmMgPSBpcHdfcG9sbF9iaXQocHJpdiwgSVBXX0lOVEFfUlcsCisJCQkgIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FLCA1MDApOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJkZXZpY2UgZmFpbGVkIHRvIGJvb3QgaW5pdGlhbCBmdyBpbWFnZVxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC0yNTI1LDEzICszMzA5LDEzIEBACiAJSVBXX0RFQlVHX0lORk8oImluaXRpYWwgZGV2aWNlIHJlc3BvbnNlIGFmdGVyICVkbXNcbiIsIHJjKTsKIAogCS8qIGFjayBmdyBpbml0IGRvbmUgaW50ZXJydXB0ICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lOVEFfUlcsIENYMl9JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUpOwogCiAJLyogRE1BIHRoZSB1Y29kZSBpbnRvIHRoZSBkZXZpY2UgKi8KIAlyYyA9IGlwd19sb2FkX3Vjb2RlKHByaXYsIHVjb2RlLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpLAogCQkJICAgIHVjb2RlLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpKTsKIAlpZiAocmMgPCAwKSB7Ci0JCUlQV19FUlJPUigiVW5hYmxlIHRvIGxvYWQgdWNvZGVcbiIpOworCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIHVjb2RlOiAlZFxuIiwgcmMpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjU0Myw3ICszMzI3LDcgQEAKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlciksCiAJCQkgICAgICAgZmlybXdhcmUtPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOwogCWlmIChyYyA8IDApIHsKLQkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZVxuIik7CisJCUlQV19FUlJPUigiVW5hYmxlIHRvIGxvYWQgZmlybXdhcmU6ICVkXG4iLCByYyk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTU2LDEyICszMzQwLDE0IEBACiAJfQogCiAJLyogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lOVEFfTUFTS19SLCB+Q1gyX0lOVEFfTUFTS19BTEwpOworCWlwd193cml0ZTMyKHByaXYsIElQV19JTlRBX01BU0tfUiwgfklQV19JTlRBX01BU0tfQUxMKTsKKwkvKiBhY2sgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfUlcsIElQV19JTlRBX01BU0tfQUxMKTsKIAogCS8qIGtpY2sgc3RhcnQgdGhlIGRldmljZSAqLwogCWlwd19zdGFydF9uaWMocHJpdik7CiAKLQlpZiAoaXB3X3JlYWQzMihwcml2LCBDWDJfSU5UQV9SVykgJiBDWDJfSU5UQV9CSVRfUEFSSVRZX0VSUk9SKSB7CisJaWYgKGlwd19yZWFkMzIocHJpdiwgSVBXX0lOVEFfUlcpICYgSVBXX0lOVEFfQklUX1BBUklUWV9FUlJPUikgewogCQlpZiAocmV0cmllcyA+IDApIHsKIAkJCUlQV19XQVJOSU5HKCJQYXJpdHkgZXJyb3IuICBSZXRyeWluZyBpbml0LlxuIik7CiAJCQlyZXRyaWVzLS07CkBAIC0yNTc0LDggKzMzNjAsOCBAQAogCX0KIAogCS8qIHdhaXQgZm9yIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBDWDJfSU5UQV9SVywKLQkJCSAgQ1gyX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUsIDUwMCk7CisJcmMgPSBpcHdfcG9sbF9iaXQocHJpdiwgSVBXX0lOVEFfUlcsCisJCQkgIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FLCA1MDApOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJkZXZpY2UgZmFpbGVkIHRvIHN0YXJ0IGFmdGVyIDUwMG1zXG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTI1ODMsNyArMzM2OSw3IEBACiAJSVBXX0RFQlVHX0lORk8oImRldmljZSByZXNwb25zZSBhZnRlciAlZG1zXG4iLCByYyk7CiAKIAkvKiBhY2sgZncgaW5pdCBkb25lIGludGVycnVwdCAqLwotCWlwd193cml0ZTMyKHByaXYsIENYMl9JTlRBX1JXLCBDWDJfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSk7CisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfUlcsIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FKTsKIAogCS8qIHJlYWQgZWVwcm9tIGRhdGEgYW5kIGluaXRpYWxpemUgdGhlIGVlcHJvbSByZWdpb24gb2Ygc3JhbSAqLwogCXByaXYtPmVlcHJvbV9kZWxheSA9IDE7CkBAIC0yNTk1LDEwICszMzgxLDEwIEBACiAJLyogRW5zdXJlIG91ciBxdWV1ZSBoYXMgdmFsaWQgcGFja2V0cyAqLwogCWlwd19yeF9xdWV1ZV9yZXBsZW5pc2gocHJpdik7CiAKLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfUlhfUkVBRF9JTkRFWCwgcHJpdi0+cnhxLT5yZWFkKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfUlhfUkVBRF9JTkRFWCwgcHJpdi0+cnhxLT5yZWFkKTsKIAogCS8qIGFjayBwZW5kaW5nIGludGVycnVwdHMgKi8KLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfSU5UQV9SVywgQ1gyX0lOVEFfTUFTS19BTEwpOworCWlwd193cml0ZTMyKHByaXYsIElQV19JTlRBX1JXLCBJUFdfSU5UQV9NQVNLX0FMTCk7CiAKICNpZm5kZWYgQ09ORklHX1BNCiAJcmVsZWFzZV9maXJtd2FyZShib290ZncpOwpAQCAtMjc1NSwxNiArMzU0MSwxOCBAQAogCQlyZXR1cm47CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAoYmQtPnUuZGF0YS5udW1fY2h1bmtzID4gTlVNX1RGRF9DSFVOS1MpIHsKLQkJSVBXX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBiZC0+dS5kYXRhLm51bV9jaHVua3MpOworCWlmIChsZTMyX3RvX2NwdShiZC0+dS5kYXRhLm51bV9jaHVua3MpID4gTlVNX1RGRF9DSFVOS1MpIHsKKwkJSVBXX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLAorCQkJICBsZTMyX3RvX2NwdShiZC0+dS5kYXRhLm51bV9jaHVua3MpKTsKIAkJLyoqIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwogCQlyZXR1cm47CiAJfQogCiAJLyogdW5tYXAgY2h1bmtzIGlmIGFueSAqLwotCWZvciAoaSA9IDA7IGkgPCBiZC0+dS5kYXRhLm51bV9jaHVua3M7IGkrKykgewotCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwgYmQtPnUuZGF0YS5jaHVua19wdHJbaV0sCi0JCQkJIGJkLT51LmRhdGEuY2h1bmtfbGVuW2ldLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUzMl90b19jcHUoYmQtPnUuZGF0YS5udW1fY2h1bmtzKTsgaSsrKSB7CisJCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdShiZC0+dS5kYXRhLmNodW5rX3B0cltpXSksCisJCQkJIGxlMTZfdG9fY3B1KGJkLT51LmRhdGEuY2h1bmtfbGVuW2ldKSwKKwkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJCWlmICh0eHEtPnR4Ylt0eHEtPnEubGFzdF91c2VkXSkgewogCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHR4cS0+dHhiW3R4cS0+cS5sYXN0X3VzZWRdKTsKIAkJCXR4cS0+dHhiW3R4cS0+cS5sYXN0X3VzZWRdID0gTlVMTDsKQEAgLTI4MjEsMjEgKzM2MDksNiBAQAogCWlwd19xdWV1ZV90eF9mcmVlKHByaXYsICZwcml2LT50eHFbM10pOwogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgX19tYXliZV93YWtlX3R4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKLXsKLQlpZiAobmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkgewotCQlzd2l0Y2ggKHByaXYtPnBvcnRfdHlwZSkgewotCQljYXNlIERDUl9UWVBFX01VX0JTUzoKLQkJY2FzZSBEQ1JfVFlQRV9NVV9JQlNTOgotCQkJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0JfQotCi19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfY3JlYXRlX2Jzc2lkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggKiBic3NpZCkKIHsKIAkvKiBGaXJzdCAzIGJ5dGVzIGFyZSBtYW51ZmFjdHVyZXIgKi8KQEAgLTI4OTgsNyArMzY3MSwxMyBAQAogewogCWludCBlcnI7CiAKLQlpZiAoIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFUSU5HIHwgU1RBVFVTX0FTU09DSUFURUQpKSkgeworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRJTkcpIHsKKwkJSVBXX0RFQlVHX0FTU09DKCJEaXNhc3NvY2lhdGluZyB3aGlsZSBhc3NvY2lhdGluZy5cbiIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmRpc2Fzc29jaWF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJEaXNhc3NvY2lhdGluZyB3aGlsZSBub3QgYXNzb2NpYXRlZC5cbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjkxNSw2ICszNjk0LDcgQEAKIAkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hc3NvY190eXBlID0gSENfRElTQVNTT0NfUVVJRVQ7CiAJZWxzZQogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmFzc29jX3R5cGUgPSBIQ19ESVNBU1NPQ0lBVEU7CisKIAllcnIgPSBpcHdfc2VuZF9hc3NvY2lhdGUocHJpdiwgJnByaXYtPmFzc29jX3JlcXVlc3QpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0hDKCJBdHRlbXB0IHRvIHNlbmQgW2Rpc11hc3NvY2lhdGUgY29tbWFuZCAiCkBAIC0yOTI0LDIwICszNzA0LDI3IEBACiAKIH0KIAotc3RhdGljIHZvaWQgaXB3X2Rpc2Fzc29jaWF0ZSh2b2lkICpkYXRhKQorc3RhdGljIGludCBpcHdfZGlzYXNzb2NpYXRlKHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlpZiAoIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSkKKwkJcmV0dXJuIDA7CiAJaXB3X3NlbmRfZGlzYXNzb2NpYXRlKGRhdGEsIDApOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBub3RpZnlfd3hfYXNzb2NfZXZlbnQoc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2JnX2Rpc2Fzc29jaWF0ZSh2b2lkICpkYXRhKQogewotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKLQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2Rpc2Fzc29jaWF0ZShkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKworc3RhdGljIHZvaWQgaXB3X3N5c3RlbV9jb25maWcodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdiwgJnByaXYtPnN5c19jb25maWcpOwogfQogCiBzdHJ1Y3QgaXB3X3N0YXR1c19jb2RlIHsKQEAgLTI5OTcsNyArMzc4NCw3IEBACiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXB3X3N0YXR1c19jb2Rlcyk7IGkrKykKLQkJaWYgKGlwd19zdGF0dXNfY29kZXNbaV0uc3RhdHVzID09IHN0YXR1cykKKwkJaWYgKGlwd19zdGF0dXNfY29kZXNbaV0uc3RhdHVzID09IChzdGF0dXMgJiAweGZmKSkKIAkJCXJldHVybiBpcHdfc3RhdHVzX2NvZGVzW2ldLnJlYXNvbjsKIAlyZXR1cm4gIlVua25vd24gc3RhdHVzIHZhbHVlLiI7CiB9CkBAIC0zMDc2LDE4ICszODYzLDMwIEBACiAJd2hpbGUgKGkgJiYgIShtYXNrICYgaSkpCiAJCWkgPj49IDE7CiAJc3dpdGNoIChpKSB7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0s6CXJldHVybiAxMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLOglyZXR1cm4gMjAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzoJcmV0dXJuIDU1MDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLOglyZXR1cm4gNjAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0s6CXJldHVybiA5MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSzoJcmV0dXJuIDExMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0s6CXJldHVybiAxMjAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLOglyZXR1cm4gMTgwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSzoJcmV0dXJuIDI0MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0s6CXJldHVybiAzNjAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLOglyZXR1cm4gNDgwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSzoJcmV0dXJuIDU0MDAwMDAwOworCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLOgorCQlyZXR1cm4gMTAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSzoKKwkJcmV0dXJuIDIwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0s6CisJCXJldHVybiA1NTAwMDAwOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSzoKKwkJcmV0dXJuIDYwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLOgorCQlyZXR1cm4gOTAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CX01BU0s6CisJCXJldHVybiAxMTAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLOgorCQlyZXR1cm4gMTIwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSzoKKwkJcmV0dXJuIDE4MDAwMDAwOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0s6CisJCXJldHVybiAyNDAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLOgorCQlyZXR1cm4gMzYwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSzoKKwkJcmV0dXJuIDQ4MDAwMDAwOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0s6CisJCXJldHVybiA1NDAwMDAwMDsKIAl9CiAKIAlpZiAocHJpdi0+aWVlZS0+bW9kZSA9PSBJRUVFX0IpCkBAIC0zMTE1LDI1ICszOTE0LDM1IEBACiAJCXJldHVybiBpcHdfZ2V0X21heF9yYXRlKHByaXYpOwogCiAJc3dpdGNoIChyYXRlKSB7Ci0JY2FzZSBJUFdfVFhfUkFURV8xTUI6CXJldHVybiAxMDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfMk1COglyZXR1cm4gMjAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzVNQjoJcmV0dXJuIDU1MDAwMDA7Ci0JY2FzZSBJUFdfVFhfUkFURV82TUI6CXJldHVybiA2MDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfOU1COglyZXR1cm4gOTAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzExTUI6CXJldHVybiAxMTAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzEyTUI6CXJldHVybiAxMjAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzE4TUI6CXJldHVybiAxODAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzI0TUI6CXJldHVybiAyNDAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzM2TUI6CXJldHVybiAzNjAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzQ4TUI6CXJldHVybiA0ODAwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzU0TUI6CXJldHVybiA1NDAwMDAwMDsKKwljYXNlIElQV19UWF9SQVRFXzFNQjoKKwkJcmV0dXJuIDEwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV8yTUI6CisJCXJldHVybiAyMDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfNU1COgorCQlyZXR1cm4gNTUwMDAwMDsKKwljYXNlIElQV19UWF9SQVRFXzZNQjoKKwkJcmV0dXJuIDYwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV85TUI6CisJCXJldHVybiA5MDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfMTFNQjoKKwkJcmV0dXJuIDExMDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfMTJNQjoKKwkJcmV0dXJuIDEyMDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfMThNQjoKKwkJcmV0dXJuIDE4MDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfMjRNQjoKKwkJcmV0dXJuIDI0MDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfMzZNQjoKKwkJcmV0dXJuIDM2MDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfNDhNQjoKKwkJcmV0dXJuIDQ4MDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfNTRNQjoKKwkJcmV0dXJuIDU0MDAwMDAwOwogCX0KIAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFBFUkZFQ1RfUlNTSSAoLTUwKQotI2RlZmluZSBXT1JTVF9SU1NJICAgKC04NSkKICNkZWZpbmUgSVBXX1NUQVRTX0lOVEVSVkFMICgyICogSFopCiBzdGF0aWMgdm9pZCBpcHdfZ2F0aGVyX3N0YXRzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKQEAgLTMxNDUsNiArMzk1NCw3IEBACiAJczE2IHJzc2k7CiAJdTMyIGJlYWNvbl9xdWFsaXR5LCBzaWduYWxfcXVhbGl0eSwgdHhfcXVhbGl0eSwgcnhfcXVhbGl0eSwKIAkgICAgcmF0ZV9xdWFsaXR5OworCXUzMiBtYXhfcmF0ZTsKIAogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkgewogCQlwcml2LT5xdWFsaXR5ID0gMDsKQEAgLTMyMDEsNyArNDAxMSw4IEBACiAJCQliZWFjb25fcXVhbGl0eSwgbWlzc2VkX2JlYWNvbnNfcGVyY2VudCk7CiAKIAlwcml2LT5sYXN0X3JhdGUgPSBpcHdfZ2V0X2N1cnJlbnRfcmF0ZShwcml2KTsKLQlyYXRlX3F1YWxpdHkgPSBwcml2LT5sYXN0X3JhdGUgKiA0MCAvIHByaXYtPmxhc3RfcmF0ZSArIDYwOworCW1heF9yYXRlID0gaXB3X2dldF9tYXhfcmF0ZShwcml2KTsKKwlyYXRlX3F1YWxpdHkgPSBwcml2LT5sYXN0X3JhdGUgKiA0MCAvIG1heF9yYXRlICsgNjA7CiAJSVBXX0RFQlVHX1NUQVRTKCJSYXRlIHF1YWxpdHkgOiAlM2QlJSAoJWRNYnMpXG4iLAogCQkJcmF0ZV9xdWFsaXR5LCBwcml2LT5sYXN0X3JhdGUgLyAxMDAwMDAwKTsKIApAQCAtMzIyMiwxMyArNDAzMywyMCBAQAogCQkJdHhfcXVhbGl0eSwgdHhfZmFpbHVyZXNfZGVsdGEsIHR4X3BhY2tldHNfZGVsdGEpOwogCiAJcnNzaSA9IGF2ZXJhZ2VfdmFsdWUoJnByaXYtPmF2ZXJhZ2VfcnNzaSk7Ci0JaWYgKHJzc2kgPiBQRVJGRUNUX1JTU0kpCisJc2lnbmFsX3F1YWxpdHkgPQorCSAgICAoMTAwICoKKwkgICAgIChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSBwcml2LT5pZWVlLT53b3JzdF9yc3NpKSAqCisJICAgICAocHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpIC0gcHJpdi0+aWVlZS0+d29yc3RfcnNzaSkgLQorCSAgICAgKHByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSAtIHJzc2kpICoKKwkgICAgICgxNSAqIChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSBwcml2LT5pZWVlLT53b3JzdF9yc3NpKSArCisJICAgICAgNjIgKiAocHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpIC0gcnNzaSkpKSAvCisJICAgICgocHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpIC0gcHJpdi0+aWVlZS0+d29yc3RfcnNzaSkgKgorCSAgICAgKHByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSAtIHByaXYtPmllZWUtPndvcnN0X3Jzc2kpKTsKKwlpZiAoc2lnbmFsX3F1YWxpdHkgPiAxMDApCiAJCXNpZ25hbF9xdWFsaXR5ID0gMTAwOwotCWVsc2UgaWYgKHJzc2kgPCBXT1JTVF9SU1NJKQorCWVsc2UgaWYgKHNpZ25hbF9xdWFsaXR5IDwgMSkKIAkJc2lnbmFsX3F1YWxpdHkgPSAwOwotCWVsc2UKLQkJc2lnbmFsX3F1YWxpdHkgPSAocnNzaSAtIFdPUlNUX1JTU0kpICogMTAwIC8KLQkJICAgIChQRVJGRUNUX1JTU0kgLSBXT1JTVF9SU1NJKTsKKwogCUlQV19ERUJVR19TVEFUUygiU2lnbmFsIGxldmVsIDogJTNkJSUgKCVkIGRCbSlcbiIsCiAJCQlzaWduYWxfcXVhbGl0eSwgcnNzaSk7CiAKQEAgLTMyNTcsNiArNDA3NSw4NSBAQAogCQkJICAgSVBXX1NUQVRTX0lOVEVSVkFMKTsKIH0KIAorc3RhdGljIHZvaWQgaXB3X2JnX2dhdGhlcl9zdGF0cyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfZ2F0aGVyX3N0YXRzKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCisvKiBNaXNzZWQgYmVhY29uIGJlaGF2aW9yOgorICogMXN0IG1pc3NlZCAtPiByb2FtaW5nX3RocmVzaG9sZCwganVzdCB3YWl0LCBkb24ndCBkbyBhbnkgc2Nhbi9yb2FtLgorICogcm9hbWluZ190aHJlc2hvbGQgLT4gZGlzYXNzb2NpYXRlX3RocmVzaG9sZCwgc2NhbiBhbmQgcm9hbSBmb3IgYmV0dGVyIHNpZ25hbC4KKyAqIEFib3ZlIGRpc2Fzc29jaWF0ZSB0aHJlc2hvbGQsIGdpdmUgdXAgYW5kIHN0b3Agc2Nhbm5pbmcuCisgKiBSb2FtaW5nIGlzIGRpc2FibGVkIGlmIGRpc2Fzc29jaWF0ZV90aHJlc2hvbGQgPD0gcm9hbWluZ190aHJlc2hvbGQgICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXB3X2hhbmRsZV9taXNzZWRfYmVhY29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkJICAgIGludCBtaXNzZWRfY291bnQpCit7CisJcHJpdi0+bm90aWZfbWlzc2VkX2JlYWNvbnMgPSBtaXNzZWRfY291bnQ7CisKKwlpZiAobWlzc2VkX2NvdW50ID4gcHJpdi0+ZGlzYXNzb2NpYXRlX3RocmVzaG9sZCAmJgorCSAgICBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgeworCQkvKiBJZiBhc3NvY2lhdGVkIGFuZCB3ZSd2ZSBoaXQgdGhlIG1pc3NlZAorCQkgKiBiZWFjb24gdGhyZXNob2xkLCBkaXNhc3NvY2lhdGUsIHR1cm4KKwkJICogb2ZmIHJvYW1pbmcsIGFuZCBhYm9ydCBhbnkgYWN0aXZlIHNjYW5zICovCisJCUlQV19ERUJVRyhJUFdfRExfSU5GTyB8IElQV19ETF9OT1RJRiB8CisJCQkgIElQV19ETF9TVEFURSB8IElQV19ETF9BU1NPQywKKwkJCSAgIk1pc3NlZCBiZWFjb246ICVkIC0gZGlzYXNzb2NpYXRlXG4iLCBtaXNzZWRfY291bnQpOworCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19ST0FNSU5HOworCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKSB7CisJCQlJUFdfREVCVUcoSVBXX0RMX0lORk8gfCBJUFdfRExfTk9USUYgfAorCQkJCSAgSVBXX0RMX1NUQVRFLAorCQkJCSAgIkFib3J0aW5nIHNjYW4gd2l0aCBtaXNzZWQgYmVhY29uLlxuIik7CisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFib3J0X3NjYW4pOworCQl9CisKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5kaXNhc3NvY2lhdGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19ST0FNSU5HKSB7CisJCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgcm9hbWluZywgdGhlbiBqdXN0CisJCSAqIHByaW50IGEgZGVidWcgc3RhdGVtZW50Li4uICovCisJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUsCisJCQkgICJNaXNzZWQgYmVhY29uOiAlZCAtIHJvYW0gaW4gcHJvZ3Jlc3NcbiIsCisJCQkgIG1pc3NlZF9jb3VudCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobWlzc2VkX2NvdW50ID4gcHJpdi0+cm9hbWluZ190aHJlc2hvbGQgJiYKKwkgICAgbWlzc2VkX2NvdW50IDw9IHByaXYtPmRpc2Fzc29jaWF0ZV90aHJlc2hvbGQpIHsKKwkJLyogSWYgd2UgYXJlIG5vdCBhbHJlYWR5IHJvYW1pbmcsIHNldCB0aGUgUk9BTQorCQkgKiBiaXQgaW4gdGhlIHN0YXR1cyBhbmQga2ljayBvZmYgYSBzY2FuLgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gc2V2ZXJhbCB0aW1lcyBiZWZvcmUgd2UgcmVhY2gKKwkJICogZGlzYXNzb2NpYXRlX3RocmVzaG9sZC4gKi8KKwkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8IElQV19ETF9TVEFURSwKKwkJCSAgIk1pc3NlZCBiZWFjb246ICVkIC0gaW5pdGlhdGUgIgorCQkJICAicm9hbWluZ1xuIiwgbWlzc2VkX2NvdW50KTsKKwkJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JPQU1JTkcpKSB7CisJCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JPQU1JTkc7CisJCQlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpKQorCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykgeworCQkvKiBTdG9wIHNjYW4gdG8ga2VlcCBmdyBmcm9tIGdldHRpbmcKKwkJICogc3R1Y2sgKG9ubHkgaWYgd2UgYXJlbid0IHJvYW1pbmcgLS0KKwkJICogb3RoZXJ3aXNlIHdlJ2xsIG5ldmVyIHNjYW4gbW9yZSB0aGFuIDIgb3IgMworCQkgKiBjaGFubmVscy4uKSAqLworCQlJUFdfREVCVUcoSVBXX0RMX0lORk8gfCBJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUsCisJCQkgICJBYm9ydGluZyBzY2FuIHdpdGggbWlzc2VkIGJlYWNvbi5cbiIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFib3J0X3NjYW4pOworCX0KKworCUlQV19ERUJVR19OT1RJRigiTWlzc2VkIGJlYWNvbjogJWRcbiIsIG1pc3NlZF9jb3VudCk7CisKK30KKwogLyoqCiAgKiBIYW5kbGUgaG9zdCBub3RpZmljYXRpb24gcGFja2V0LgogICogQ2FsbGVkIGZyb20gaW50ZXJydXB0IHJvdXRpbmUKQEAgLTMyNjQsNiArNDE2MSw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3X3J4X25vdGlmaWNhdGlvbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpcHdfcnhfbm90aWZpY2F0aW9uICpub3RpZikKIHsKKwlub3RpZi0+c2l6ZSA9IGxlMTZfdG9fY3B1KG5vdGlmLT5zaXplKTsKKwogCUlQV19ERUJVR19OT1RJRigidHlwZSA9ICVpICglZCBieXRlcylcbiIsIG5vdGlmLT5zdWJ0eXBlLCBub3RpZi0+c2l6ZSk7CiAKIAlzd2l0Y2ggKG5vdGlmLT5zdWJ0eXBlKSB7CkBAIC0zMzA3LDMwICs0MjA2LDQ0IEBACiAKIAkJCQkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfQVNTT0NJQVRJTkc7CiAJCQkJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfQVNTT0NJQVRFRDsKKwkJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCQkgICAmcHJpdi0+c3lzdGVtX2NvbmZpZyk7CiAKLQkJCQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRfZGV2KTsKLQkJCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0X2RldikpIHsKLQkJCQkJCUlQV19ERUJVR19OT1RJRgotCQkJCQkJICAgICgid2FraW5nIHF1ZXVlXG4iKTsKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlJUFdfREVCVUdfTk9USUYKLQkJCQkJCSAgICAoInN0YXJ0aW5nIHF1ZXVlXG4iKTsKLQkJCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHByaXYtPgotCQkJCQkJCQkgIG5ldF9kZXYpOworI2lmZGVmIENPTkZJR19JUFdfUU9TCisjZGVmaW5lIElQV19HRVRfUEFDS0VUX1NUWVBFKHgpIFdMQU5fRkNfR0VUX1NUWVBFKCBcCisJCQkgbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSh4KSktPmZyYW1lX2N0bCkpCisJCQkJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FVVEgpICYmCisJCQkJCSAgICAoSVBXX0dFVF9QQUNLRVRfU1RZUEUoJm5vdGlmLT51LnJhdykKKwkJCQkJICAgICA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCkpIHsKKwkJCQkJCWlmICgoc2l6ZW9mCisJCQkJCQkgICAgIChzdHJ1Y3QKKwkJCQkJCSAgICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSkKKwkJCQkJCSAgICAgPD0gbm90aWYtPnNpemUpCisJCQkJCQkgICAgJiYgKG5vdGlmLT5zaXplIDw9IDIzMTQpKSB7CisJCQkJCQkJc3RydWN0CisJCQkJCQkJaWVlZTgwMjExX3J4X3N0YXRzCisJCQkJCQkJICAgIHN0YXRzID0geworCQkJCQkJCQkubGVuID0KKwkJCQkJCQkJICAgIG5vdGlmLT4KKwkJCQkJCQkJICAgIHNpemUgLSAxLAorCQkJCQkJCX07CisKKwkJCQkJCQlJUFdfREVCVUdfUU9TCisJCQkJCQkJICAgICgiUW9TIEFzc29jaWF0ZSAiCisJCQkJCQkJICAgICAic2l6ZSAlZFxuIiwKKwkJCQkJCQkgICAgIG5vdGlmLT5zaXplKTsKKwkJCQkJCQlpZWVlODAyMTFfcnhfbWd0KHByaXYtPgorCQkJCQkJCQkJIGllZWUsCisJCQkJCQkJCQkgKHN0cnVjdAorCQkJCQkJCQkJICBpZWVlODAyMTFfaGRyXzRhZGRyCisJCQkJCQkJCQkgICopCisJCQkJCQkJCQkgJm5vdGlmLT51LnJhdywgJnN0YXRzKTsKKwkJCQkJCX0KIAkJCQkJfQorI2VuZGlmCiAKLQkJCQkJaXB3X3Jlc2V0X3N0YXRzKHByaXYpOwotCQkJCQkvKiBFbnN1cmUgdGhlIHJhdGUgaXMgdXBkYXRlZCBpbW1lZGlhdGVseSAqLwotCQkJCQlwcml2LT5sYXN0X3JhdGUgPQotCQkJCQkgICAgaXB3X2dldF9jdXJyZW50X3JhdGUocHJpdik7Ci0JCQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmdhdGhlcl9zdGF0cyk7Ci0JCQkJCW5vdGlmeV93eF9hc3NvY19ldmVudChwcml2KTsKKwkJCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+bGlua191cCk7CiAKLS8qCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwKLQkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2NhbiwKLQkJCQkJICAgU0NBTl9BU1NPQ0lBVEVEX0lOVEVSVkFMKTsKLSovCiAJCQkJCWJyZWFrOwogCQkJCX0KIApAQCAtMzM2MywxMiArNDI3Niw3IEBACiAJCQkJCQkgICAgICBTVEFUVVNfQVVUSCB8CiAJCQkJCQkgICAgICBTVEFUVVNfQVNTT0NJQVRFRCk7CiAKLQkJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPgotCQkJCQkJCQkgIG5ldF9kZXYpOwotCQkJCQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQkJCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotCQkJCQkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYpOworCQkJCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+bGlua19kb3duKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAKQEAgLTMzODMsNiArNDI5MSwyNCBAQAogCQkJCX0KIAogCQkJY2FzZSBDTUFTX0lOSVQ6eworCQkJCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FVVEgpIHsKKwkJCQkJCXN0cnVjdAorCQkJCQkJICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQorCQkJCQkJKnJlc3A7CisJCQkJCQlyZXNwID0KKwkJCQkJCSAgICAoc3RydWN0CisJCQkJCQkgICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQorCQkJCQkJICAgICAqKSZub3RpZi0+dS5yYXc7CisJCQkJCQlJUFdfREVCVUcoSVBXX0RMX05PVElGIHwKKwkJCQkJCQkgIElQV19ETF9TVEFURSB8CisJCQkJCQkJICBJUFdfRExfQVNTT0MsCisJCQkJCQkJICAiYXNzb2NpYXRpb24gZmFpbGVkICgweCUwNFgpOiAlc1xuIiwKKwkJCQkJCQkgIG50b2hzKHJlc3AtPnN0YXR1cyksCisJCQkJCQkJICBpcHdfZ2V0X3N0YXR1c19jb2RlCisJCQkJCQkJICAobnRvaHMKKwkJCQkJCQkgICAocmVzcC0+c3RhdHVzKSkpOworCQkJCQl9CisKIAkJCQkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8IElQV19ETF9TVEFURSB8CiAJCQkJCQkgIElQV19ETF9BU1NPQywKIAkJCQkJCSAgImRpc2Fzc29jaWF0ZWQ6ICclcycgIiBNQUNfRk1UCkBAIC0zMzk1LDM1ICs0MzIxLDIxIEBACiAJCQkJCSAgICB+KFNUQVRVU19ESVNBU1NPQ0lBVElORyB8CiAJCQkJCSAgICAgIFNUQVRVU19BU1NPQ0lBVElORyB8CiAJCQkJCSAgICAgIFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FVVEgpOworCQkJCQlpZiAocHJpdi0+YXNzb2NfbmV0d29yaworCQkJCQkgICAgJiYgKHByaXYtPmFzc29jX25ldHdvcmstPgorCQkJCQkJY2FwYWJpbGl0eSAmCisJCQkJCQlXTEFOX0NBUEFCSUxJVFlfSUJTUykpCisJCQkJCQlpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yaworCQkJCQkJICAgIChwcml2KTsKIAotCQkJCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwotCQkJCQlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUk9BTUlORykpIHsKLQkJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPgotCQkJCQkJCQkgIG5ldF9kZXYpOwotCQkJCQkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYpOworCQkJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5saW5rX2Rvd24pOwogCi0JCQkJCQkvKiBDYW5jZWwgYW55IHF1ZXVlZCB3b3JrIC4uLiAqLwotCQkJCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+Ci0JCQkJCQkJCSAgICByZXF1ZXN0X3NjYW4pOwotCQkJCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+Ci0JCQkJCQkJCSAgICBhZGhvY19jaGVjayk7Ci0KLQkJCQkJCS8qIFF1ZXVlIHVwIGFub3RoZXIgc2Nhbi4uLiAqLwotCQkJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCi0JCQkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0KLQkJCQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPgotCQkJCQkJCQkgICAgZ2F0aGVyX3N0YXRzKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUk9BTUlORzsKLQkJCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotCQkJCQl9Ci0KLQkJCQkJaXB3X3Jlc2V0X3N0YXRzKHByaXYpOwogCQkJCQlicmVhazsKIAkJCQl9CiAKKwkJCWNhc2UgQ01BU19SWF9BU1NPQ19SRVNQOgorCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCUlQV19FUlJPUigiYXNzb2M6IHVua25vd24gKCVkKVxuIiwKIAkJCQkJICBhc3NvYy0+c3RhdGUpOwpAQCAtMzQ2NiwxMSArNDM3OCw3IEBACiAJCQkJCQkgIFNUQVRVU19BVVRIIHwKIAkJCQkJCSAgU1RBVFVTX0FTU09DSUFURUQpOwogCi0JCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0X2Rldik7Ci0JCQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKLQkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0JCQkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYpOworCQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmxpbmtfZG93bik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgQ01BU19UWF9BVVRIX1NFUV8xOgpAQCAtMzUxMiw2ICs0NDIwLDcgQEAKIAkJCWNhc2UgQ01BU19SWF9BU1NPQ19SRVNQOgogCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUgfAogCQkJCQkgIElQV19ETF9BU1NPQywgIlJYX0FTU09DX1JFU1BcbiIpOworCiAJCQkJYnJlYWs7CiAJCQljYXNlIENNQVNfQVNTT0NJQVRFRDoKIAkJCQlJUFdfREVCVUcoSVBXX0RMX05PVElGIHwgSVBXX0RMX1NUQVRFIHwKQEAgLTM1NTYsNDMgKzQ0NjUsNjcgQEAKIAkJCXByaXYtPnN0YXR1cyAmPQogCQkJICAgIH4oU1RBVFVTX1NDQU5OSU5HIHwgU1RBVFVTX1NDQU5fQUJPUlRJTkcpOwogCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfc3RhdGUpOwogCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CiAKKwkJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HKQorCQkJCWJyZWFrOworCisJCQlwcml2LT5pZWVlLT5zY2FucysrOworCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCQkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOX0ZPUkNFRDsKKwkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKKwkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2Nhbik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19TQ0FOX0ZPUkNFRDsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9NT05JVE9SICovCisKIAkJCWlmICghKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8CiAJCQkJCSAgICAgIFNUQVRVU19BU1NPQ0lBVElORyB8CiAJCQkJCSAgICAgIFNUQVRVU19ST0FNSU5HIHwKIAkJCQkJICAgICAgU1RBVFVTX0RJU0FTU09DSUFUSU5HKSkpCiAJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hc3NvY2lhdGUpOwogCQkJZWxzZSBpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JPQU1JTkcpIHsKLQkJCQkvKiBJZiBhIHNjYW4gY29tcGxldGVkIGFuZCB3ZSBhcmUgaW4gcm9hbSBtb2RlLCB0aGVuCi0JCQkJICogdGhlIHNjYW4gdGhhdCBjb21wbGV0ZWQgd2FzIHRoZSBvbmUgcmVxdWVzdGVkIGFzIGEKLQkJCQkgKiByZXN1bHQgb2YgZW50ZXJpbmcgcm9hbS4uLiBzbywgc2NoZWR1bGUgdGhlCi0JCQkJICogcm9hbSB3b3JrICovCi0JCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yb2FtKTsKKwkJCQlpZiAoeC0+c3RhdHVzID09IFNDQU5fQ09NUExFVEVEX1NUQVRVU19DT01QTEVURSkKKwkJCQkJLyogSWYgYSBzY2FuIGNvbXBsZXRlZCBhbmQgd2UgYXJlIGluIHJvYW0gbW9kZSwgdGhlbgorCQkJCQkgKiB0aGUgc2NhbiB0aGF0IGNvbXBsZXRlZCB3YXMgdGhlIG9uZSByZXF1ZXN0ZWQgYXMgYQorCQkJCQkgKiByZXN1bHQgb2YgZW50ZXJpbmcgcm9hbS4uLiBzbywgc2NoZWR1bGUgdGhlCisJCQkJCSAqIHJvYW0gd29yayAqLworCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5yb2FtKTsKKwkJCQllbHNlCisJCQkJCS8qIERvbid0IHNjaGVkdWxlIGlmIHdlIGFib3J0ZWQgdGhlIHNjYW4gKi8KKwkJCQkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfUk9BTUlORzsKIAkJCX0gZWxzZSBpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5fUEVORElORykKIAkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKIAkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0KLQkJCXByaXYtPmllZWUtPnNjYW5zKys7CisJCQllbHNlIGlmIChwcml2LT5jb25maWcgJiBDRkdfQkFDS0dST1VORF9TQ0FOCisJCQkJICYmIHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQorCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuLCBIWik7CiAJCQlicmVhazsKIAkJfQogCiAJY2FzZSBIT1NUX05PVElGSUNBVElPTl9TVEFUVVNfRlJBR19MRU5HVEg6ewogCQkJc3RydWN0IG5vdGlmX2ZyYWdfbGVuZ3RoICp4ID0gJm5vdGlmLT51LmZyYWdfbGVuOwogCi0JCQlpZiAobm90aWYtPnNpemUgPT0gc2l6ZW9mKCp4KSkgewotCQkJCUlQV19FUlJPUigiRnJhZyBsZW5ndGg6ICVkXG4iLCB4LT5mcmFnX2xlbmd0aCk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKG5vdGlmLT5zaXplID09IHNpemVvZigqeCkpCisJCQkJSVBXX0VSUk9SKCJGcmFnIGxlbmd0aDogJWRcbiIsCisJCQkJCSAgbGUxNl90b19jcHUoeC0+ZnJhZ19sZW5ndGgpKTsKKwkJCWVsc2UKIAkJCQlJUFdfRVJST1IoIkZyYWcgbGVuZ3RoIG9mIHdyb25nIHNpemUgJWQgIgogCQkJCQkgICIoc2hvdWxkIGJlICV6ZClcbiIsCiAJCQkJCSAgbm90aWYtPnNpemUsIHNpemVvZigqeCkpOwotCQkJfQogCQkJYnJlYWs7CiAJCX0KIAogCWNhc2UgSE9TVF9OT1RJRklDQVRJT05fU1RBVFVTX0xJTktfREVURVJJT1JBVElPTjp7CiAJCQlzdHJ1Y3Qgbm90aWZfbGlua19kZXRlcmlvcmF0aW9uICp4ID0KIAkJCSAgICAmbm90aWYtPnUubGlua19kZXRlcmlvcmF0aW9uOworCiAJCQlpZiAobm90aWYtPnNpemUgPT0gc2l6ZW9mKCp4KSkgewogCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUsCiAJCQkJCSAgImxpbmsgZGV0ZXJpb3JhdGlvbjogJyVzJyAiIE1BQ19GTVQKQEAgLTM2MTIsMTEgKzQ1NDUsOSBAQAogCWNhc2UgSE9TVF9OT1RJRklDQVRJT05fRElOT19DT05GSUdfUkVTUE9OU0U6ewogCQkJSVBXX0VSUk9SKCJEaW5vIGNvbmZpZ1xuIik7CiAJCQlpZiAocHJpdi0+aGNtZAotCQkJICAgICYmIHByaXYtPmhjbWQtPmNtZCA9PSBIT1NUX0NNRF9ESU5PX0NPTkZJRykgewotCQkJCS8qIFRPRE86IERvIGFueXRoaW5nIHNwZWNpYWw/ICovCi0JCQl9IGVsc2UgeworCQkJICAgICYmIHByaXYtPmhjbWQtPmNtZCAhPSBIT1NUX0NNRF9ESU5PX0NPTkZJRykKIAkJCQlJUFdfRVJST1IoIlVuZXhwZWN0ZWQgRElOT19DT05GSUdfUkVTUE9OU0VcbiIpOwotCQkJfQorCiAJCQlicmVhazsKIAkJfQogCkBAIC0zNjI5LDM2ICs0NTYwLDExIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmICh4LT5zdGF0ZSA9PSBIT1NUX05PVElGSUNBVElPTl9TVEFUVVNfQkVBQ09OX01JU1NJTkcpIHsKLQkJCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKSB7Ci0JCQkJCS8qIFN0b3Agc2NhbiB0byBrZWVwIGZ3IGZyb20gZ2V0dGluZwotCQkJCQkgKiBzdHVjay4uLiAqLwotCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKLQkJCQkJCSAgICZwcml2LT5hYm9ydF9zY2FuKTsKLQkJCQl9Ci0KLQkJCQlpZiAoeC0+bnVtYmVyID4gcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgJiYKLQkJCQkgICAgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpIHsKLQkJCQkJSVBXX0RFQlVHKElQV19ETF9JTkZPIHwgSVBXX0RMX05PVElGIHwKLQkJCQkJCSAgSVBXX0RMX1NUQVRFLAotCQkJCQkJICAiTWlzc2VkIGJlYWNvbjogJWQgLSBkaXNhc3NvY2lhdGVcbiIsCi0JCQkJCQkgIHgtPm51bWJlcik7Ci0JCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkJICAgJnByaXYtPmRpc2Fzc29jaWF0ZSk7Ci0JCQkJfSBlbHNlIGlmICh4LT5udW1iZXIgPiBwcml2LT5yb2FtaW5nX3RocmVzaG9sZCkgewotCQkJCQlJUFdfREVCVUcoSVBXX0RMX05PVElGIHwgSVBXX0RMX1NUQVRFLAotCQkJCQkJICAiTWlzc2VkIGJlYWNvbjogJWQgLSBpbml0aWF0ZSAiCi0JCQkJCQkgICJyb2FtaW5nXG4iLCB4LT5udW1iZXIpOwotCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKLQkJCQkJCSAgICZwcml2LT5yb2FtKTsKLQkJCQl9IGVsc2UgewotCQkJCQlJUFdfREVCVUdfTk9USUYoIk1pc3NlZCBiZWFjb246ICVkXG4iLAotCQkJCQkJCXgtPm51bWJlcik7Ci0JCQkJfQotCi0JCQkJcHJpdi0+bm90aWZfbWlzc2VkX2JlYWNvbnMgPSB4LT5udW1iZXI7Ci0KLQkJCX0KKwkJCWlmIChsZTMyX3RvX2NwdSh4LT5zdGF0ZSkgPT0KKwkJCSAgICBIT1NUX05PVElGSUNBVElPTl9TVEFUVVNfQkVBQ09OX01JU1NJTkcpCisJCQkJaXB3X2hhbmRsZV9taXNzZWRfYmVhY29uKHByaXYsCisJCQkJCQkJIGxlMzJfdG9fY3B1KHgtPgorCQkJCQkJCQkgICAgIG51bWJlcikpOwogCiAJCQlicmVhazsKIAkJfQpAQCAtMzY5Nyw3ICs0NjAzLDggQEAKIAljYXNlIEhPU1RfTk9USUZJQ0FUSU9OX05PSVNFX1NUQVRTOnsKIAkJCWlmIChub3RpZi0+c2l6ZSA9PSBzaXplb2YodTMyKSkgewogCQkJCXByaXYtPmxhc3Rfbm9pc2UgPQotCQkJCSAgICAodTgpIChub3RpZi0+dS5ub2lzZS52YWx1ZSAmIDB4ZmYpOworCQkJCSAgICAodTgpIChsZTMyX3RvX2NwdShub3RpZi0+dS5ub2lzZS52YWx1ZSkgJgorCQkJCQkgIDB4ZmYpOwogCQkJCWF2ZXJhZ2VfYWRkKCZwcml2LT5hdmVyYWdlX25vaXNlLAogCQkJCQkgICAgcHJpdi0+bGFzdF9ub2lzZSk7CiAJCQkJYnJlYWs7CkBAIC0zNzMwLDQzICs0NjM3LDQzIEBACiAJaXB3X3R4X3F1ZXVlX2ZyZWUocHJpdik7CiAJLyogVHggQ01EIHF1ZXVlICovCiAJcmMgPSBpcHdfcXVldWVfdHhfaW5pdChwcml2LCAmcHJpdi0+dHhxX2NtZCwgblR4Q21kLAotCQkJICAgICAgIENYMl9UWF9DTURfUVVFVUVfUkVBRF9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfQ01EX1FVRVVFX1dSSVRFX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9DTURfUVVFVUVfQkRfQkFTRSwKLQkJCSAgICAgICBDWDJfVFhfQ01EX1FVRVVFX0JEX1NJWkUpOworCQkJICAgICAgIElQV19UWF9DTURfUVVFVUVfUkVBRF9JTkRFWCwKKwkJCSAgICAgICBJUFdfVFhfQ01EX1FVRVVFX1dSSVRFX0lOREVYLAorCQkJICAgICAgIElQV19UWF9DTURfUVVFVUVfQkRfQkFTRSwKKwkJCSAgICAgICBJUFdfVFhfQ01EX1FVRVVFX0JEX1NJWkUpOwogCWlmIChyYykgewogCQlJUFdfRVJST1IoIlR4IENtZCBxdWV1ZSBpbml0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCS8qIFR4IHF1ZXVlKHMpICovCiAJcmMgPSBpcHdfcXVldWVfdHhfaW5pdChwcml2LCAmcHJpdi0+dHhxWzBdLCBuVHgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzBfUkVBRF9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfMF9XUklURV9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfMF9CRF9CQVNFLCBDWDJfVFhfUVVFVUVfMF9CRF9TSVpFKTsKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfMF9SRUFEX0lOREVYLAorCQkJICAgICAgIElQV19UWF9RVUVVRV8wX1dSSVRFX0lOREVYLAorCQkJICAgICAgIElQV19UWF9RVUVVRV8wX0JEX0JBU0UsIElQV19UWF9RVUVVRV8wX0JEX1NJWkUpOwogCWlmIChyYykgewogCQlJUFdfRVJST1IoIlR4IDAgcXVldWUgaW5pdCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAlyYyA9IGlwd19xdWV1ZV90eF9pbml0KHByaXYsICZwcml2LT50eHFbMV0sIG5UeCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfMV9SRUFEX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8xX1dSSVRFX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8xX0JEX0JBU0UsIENYMl9UWF9RVUVVRV8xX0JEX1NJWkUpOworCQkJICAgICAgIElQV19UWF9RVUVVRV8xX1JFQURfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzFfV1JJVEVfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzFfQkRfQkFTRSwgSVBXX1RYX1FVRVVFXzFfQkRfU0laRSk7CiAJaWYgKHJjKSB7CiAJCUlQV19FUlJPUigiVHggMSBxdWV1ZSBpbml0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXJjID0gaXB3X3F1ZXVlX3R4X2luaXQocHJpdiwgJnByaXYtPnR4cVsyXSwgblR4LAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8yX1JFQURfSU5ERVgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzJfV1JJVEVfSU5ERVgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzJfQkRfQkFTRSwgQ1gyX1RYX1FVRVVFXzJfQkRfU0laRSk7CisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzJfUkVBRF9JTkRFWCwKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfMl9XUklURV9JTkRFWCwKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfMl9CRF9CQVNFLCBJUFdfVFhfUVVFVUVfMl9CRF9TSVpFKTsKIAlpZiAocmMpIHsKIAkJSVBXX0VSUk9SKCJUeCAyIHF1ZXVlIGluaXQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJcmMgPSBpcHdfcXVldWVfdHhfaW5pdChwcml2LCAmcHJpdi0+dHhxWzNdLCBuVHgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzNfUkVBRF9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfM19XUklURV9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfM19CRF9CQVNFLCBDWDJfVFhfUVVFVUVfM19CRF9TSVpFKTsKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfM19SRUFEX0lOREVYLAorCQkJICAgICAgIElQV19UWF9RVUVVRV8zX1dSSVRFX0lOREVYLAorCQkJICAgICAgIElQV19UWF9RVUVVRV8zX0JEX0JBU0UsIElQV19UWF9RVUVVRV8zX0JEX1NJWkUpOwogCWlmIChyYykgewogCQlJUFdfRVJST1IoIlR4IDMgcXVldWUgaW5pdCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtMzgxNCw5ICs0NzIxLDEwIEBACiAJCXByaXYtPnR4X3BhY2tldHMrKzsKIAl9CiAgICAgICBkb25lOgotCWlmIChpcHdfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiBxaW5kZXggPj0gMCkgewotCQlfX21heWJlX3dha2VfdHgocHJpdik7Ci0JfQorCWlmICgoaXB3X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmspICYmCisJICAgIChxaW5kZXggPj0gMCkgJiYKKwkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJiBuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwogCXVzZWQgPSBxLT5maXJzdF9lbXB0eSAtIHEtPmxhc3RfdXNlZDsKIAlpZiAodXNlZCA8IDApCiAJCXVzZWQgKz0gcS0+bl9iZDsKQEAgLTM4NTcsNyArNDc2NSw3IEBACiAgKiBSeCB0aGVvcnkgb2Ygb3BlcmF0aW9uCiAgKgogICogVGhlIGhvc3QgYWxsb2NhdGVzIDMyIERNQSB0YXJnZXQgYWRkcmVzc2VzIGFuZCBwYXNzZXMgdGhlIGhvc3QgYWRkcmVzcwotICogdG8gdGhlIGZpcm13YXJlIGF0IHJlZ2lzdGVyIENYMl9SRkRTX1RBQkxFX0xPV0VSICsgTiAqIFJGRF9TSVpFIHdoZXJlIE4gaXMKKyAqIHRvIHRoZSBmaXJtd2FyZSBhdCByZWdpc3RlciBJUFdfUkZEU19UQUJMRV9MT1dFUiArIE4gKiBSRkRfU0laRSB3aGVyZSBOIGlzCiAgKiAwIHRvIDMxCiAgKgogICogUnggUXVldWUgSW5kZXhlcwpAQCAtMzk0MSw3ICs0ODQ5LDcgQEAKIAkJcnhiID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbChlbGVtZW50KTsKIAotCQlpcHdfd3JpdGUzMihwcml2LCBDWDJfUkZEU19UQUJMRV9MT1dFUiArIHJ4cS0+d3JpdGUgKiBSRkRfU0laRSwKKwkJaXB3X3dyaXRlMzIocHJpdiwgSVBXX1JGRFNfVEFCTEVfTE9XRVIgKyByeHEtPndyaXRlICogUkZEX1NJWkUsCiAJCQkgICAgcnhiLT5kbWFfYWRkcik7CiAJCXJ4cS0+cXVldWVbcnhxLT53cml0ZV0gPSByeGI7CiAJCXJ4cS0+d3JpdGUgPSAocnhxLT53cml0ZSArIDEpICUgUlhfUVVFVUVfU0laRTsKQEAgLTM5NTYsNyArNDg2NCw3IEBACiAKIAkvKiBJZiB3ZSd2ZSBhZGRlZCBtb3JlIHNwYWNlIGZvciB0aGUgZmlybXdhcmUgdG8gcGxhY2UgZGF0YSwgdGVsbCBpdCAqLwogCWlmICh3cml0ZSAhPSByeHEtPndyaXRlKQotCQlpcHdfd3JpdGUzMihwcml2LCBDWDJfUlhfV1JJVEVfSU5ERVgsIHJ4cS0+d3JpdGUpOworCQlpcHdfd3JpdGUzMihwcml2LCBJUFdfUlhfV1JJVEVfSU5ERVgsIHJ4cS0+d3JpdGUpOwogfQogCiAvKgpAQCAtMzk3Nyw3ICs0ODg1LDcgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4cS0+cnhfdXNlZCkpIHsKIAkJZWxlbWVudCA9IHJ4cS0+cnhfdXNlZC5uZXh0OwogCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciwgbGlzdCk7Ci0JCXJ4Yi0+c2tiID0gYWxsb2Nfc2tiKENYMl9SWF9CVUZfU0laRSwgR0ZQX0FUT01JQyk7CisJCXJ4Yi0+c2tiID0gYWxsb2Nfc2tiKElQV19SWF9CVUZfU0laRSwgR0ZQX0FUT01JQyk7CiAJCWlmICghcnhiLT5za2IpIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzLlxuIiwKIAkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKQEAgLTM5OTEsNyArNDg5OSw3IEBACiAJCXJ4Yi0+cnhiID0gKHN0cnVjdCBpcHdfcnhfYnVmZmVyICopcnhiLT5za2ItPmRhdGE7CiAJCXJ4Yi0+ZG1hX2FkZHIgPQogCQkgICAgcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5za2ItPmRhdGEsCi0JCQkJICAgQ1gyX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCSAgIElQV19SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQlsaXN0X2FkZF90YWlsKCZyeGItPmxpc3QsICZyeHEtPnJ4X2ZyZWUpOwogCQlyeHEtPmZyZWVfY291bnQrKzsKQEAgLTQwMDEsNiArNDkwOSwxNCBAQAogCWlwd19yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwogfQogCitzdGF0aWMgdm9pZCBpcHdfYmdfcnhfcXVldWVfcmVwbGVuaXNoKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19yeF9xdWV1ZV9yZXBsZW5pc2goZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKIC8qIEFzc3VtZXMgdGhhdCB0aGUgc2tiIGZpZWxkIG9mIHRoZSBidWZmZXJzIGluICdwb29sJyBpcyBrZXB0IGFjY3VyYXRlLgogICogSWYgYW4gU0tCIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgUE9PTCBuZWVkcyB0byBoYXZlIGl0J3MgU0tCIHNldCB0byBOVUxMCiAgKiBUaGlzIGZyZWUgcm91dGluZSB3YWxrcyB0aGUgbGlzdCBvZiBQT09MIGVudHJpZXMgYW5kIGlmIFNLQiBpcyBzZXQgdG8KQEAgLTQwMTYsNyArNDkzMiw3IEBACiAJZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlM7IGkrKykgewogCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIENYMl9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJIElQV19SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2IocnhxLT5wb29sW2ldLnNrYik7CiAJCX0KIAl9CkBAIC00MTM1LDggKzUwNTEsMTggQEAKIAludW1fcmF0ZXMgPSBtaW4obmV0d29yay0+cmF0ZXNfbGVuLCAodTgpIElQV19NQVhfUkFURVMpOwogCXJhdGVzLT5udW1fcmF0ZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcmF0ZXM7IGkrKykgewotCQlpZiAoIWlwd19pc19yYXRlX2luX21hc2sKLQkJICAgIChwcml2LCBuZXR3b3JrLT5tb2RlLCBuZXR3b3JrLT5yYXRlc1tpXSkpIHsKKwkJaWYgKCFpcHdfaXNfcmF0ZV9pbl9tYXNrKHByaXYsIG5ldHdvcmstPm1vZGUsCisJCQkJCSBuZXR3b3JrLT5yYXRlc1tpXSkpIHsKKworCQkJaWYgKG5ldHdvcmstPnJhdGVzW2ldICYgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgeworCQkJCUlQV19ERUJVR19TQ0FOKCJBZGRpbmcgbWFza2VkIG1hbmRhdG9yeSAiCisJCQkJCSAgICAgICAicmF0ZSAlMDJYXG4iLAorCQkJCQkgICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOworCQkJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9CisJCQkJICAgIG5ldHdvcmstPnJhdGVzW2ldOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQlJUFdfREVCVUdfU0NBTigiUmF0ZSAlMDJYIG1hc2tlZCA6IDB4JTA4WFxuIiwKIAkJCQkgICAgICAgbmV0d29yay0+cmF0ZXNbaV0sIHByaXYtPnJhdGVzX21hc2spOwogCQkJY29udGludWU7CkBAIC00MTQ1LDExICs1MDcxLDIwIEBACiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9IG5ldHdvcmstPnJhdGVzW2ldOwogCX0KIAotCW51bV9yYXRlcyA9Ci0JICAgIG1pbihuZXR3b3JrLT5yYXRlc19leF9sZW4sICh1OCkgKElQV19NQVhfUkFURVMgLSBudW1fcmF0ZXMpKTsKKwludW1fcmF0ZXMgPSBtaW4obmV0d29yay0+cmF0ZXNfZXhfbGVuLAorCQkJKHU4KSAoSVBXX01BWF9SQVRFUyAtIG51bV9yYXRlcykpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcmF0ZXM7IGkrKykgewotCQlpZiAoIWlwd19pc19yYXRlX2luX21hc2sKLQkJICAgIChwcml2LCBuZXR3b3JrLT5tb2RlLCBuZXR3b3JrLT5yYXRlc19leFtpXSkpIHsKKwkJaWYgKCFpcHdfaXNfcmF0ZV9pbl9tYXNrKHByaXYsIG5ldHdvcmstPm1vZGUsCisJCQkJCSBuZXR3b3JrLT5yYXRlc19leFtpXSkpIHsKKwkJCWlmIChuZXR3b3JrLT5yYXRlc19leFtpXSAmIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spIHsKKwkJCQlJUFdfREVCVUdfU0NBTigiQWRkaW5nIG1hc2tlZCBtYW5kYXRvcnkgIgorCQkJCQkgICAgICAgInJhdGUgJTAyWFxuIiwKKwkJCQkJICAgICAgIG5ldHdvcmstPnJhdGVzX2V4W2ldKTsKKwkJCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPQorCQkJCSAgICBuZXR3b3JrLT5yYXRlc1tpXTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJSVBXX0RFQlVHX1NDQU4oIlJhdGUgJTAyWCBtYXNrZWQgOiAweCUwOFhcbiIsCiAJCQkJICAgICAgIG5ldHdvcmstPnJhdGVzX2V4W2ldLCBwcml2LT5yYXRlc19tYXNrKTsKIAkJCWNvbnRpbnVlOwpAQCAtNDE1OSw3ICs1MDk0LDcgQEAKIAkJICAgIG5ldHdvcmstPnJhdGVzX2V4W2ldOwogCX0KIAotCXJldHVybiByYXRlcy0+bnVtX3JhdGVzOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3X2NvcHlfcmF0ZXMoc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgKmRlc3QsCkBAIC00MjQxLDYgKzUxNzYsMjE2IEBACiAJc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgcmF0ZXM7CiB9OwogCitzdGF0aWMgaW50IGlwd19maW5kX2FkaG9jX25ldHdvcmsoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGlwd19uZXR3b3JrX21hdGNoICptYXRjaCwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywKKwkJCQkgIGludCByb2FtaW5nKQoreworCXN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzIHJhdGVzOworCisJLyogVmVyaWZ5IHRoYXQgdGhpcyBuZXR3b3JrJ3MgY2FwYWJpbGl0eSBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisJICogY3VycmVudCBtb2RlIChBZEhvYyBvciBJbmZyYXN0cnVjdHVyZSkgKi8KKwlpZiAoKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQyAmJgorCSAgICAgIShuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkIGR1ZSB0byAiCisJCQkJImNhcGFiaWxpdHkgbWlzbWF0Y2guXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBFU1NJRCBmb3IgdGhpcyBBUCwgd2UgY2FuIG5vdCBhc3NvY2lhdGUgd2l0aAorCSAqIGl0ICovCisJaWYgKG5ldHdvcmstPmZsYWdzICYgTkVUV09SS19FTVBUWV9FU1NJRCkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiBoaWRkZW4gRVNTSUQuXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodW5saWtlbHkocm9hbWluZykpIHsKKwkJLyogSWYgd2UgYXJlIHJvYW1pbmcsIHRoZW4gZW5zdXJlIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZAorCQkgKiBuZXR3b3JrIHRvIHRyeSBhbmQgcm9hbSB0byAqLworCQlpZiAoKG5ldHdvcmstPnNzaWRfbGVuICE9IG1hdGNoLT5uZXR3b3JrLT5zc2lkX2xlbikgfHwKKwkJICAgIG1lbWNtcChuZXR3b3JrLT5zc2lkLCBtYXRjaC0+bmV0d29yay0+c3NpZCwKKwkJCSAgIG5ldHdvcmstPnNzaWRfbGVuKSkgeworCQkJSVBXX0RFQlVHX01FUkdFKCJOZXRvd3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJCSJiZWNhdXNlIG9mIG5vbi1uZXR3b3JrIEVTU0lELlxuIiwKKwkJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsCisJCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBJZiBhbiBFU1NJRCBoYXMgYmVlbiBjb25maWd1cmVkIHRoZW4gY29tcGFyZSB0aGUgYnJvYWRjYXN0CisJCSAqIEVTU0lEIHRvIG91cnMgKi8KKwkJaWYgKChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEKSAmJgorCQkgICAgKChuZXR3b3JrLT5zc2lkX2xlbiAhPSBwcml2LT5lc3NpZF9sZW4pIHx8CisJCSAgICAgbWVtY21wKG5ldHdvcmstPnNzaWQsIHByaXYtPmVzc2lkLAorCQkJICAgIG1pbihuZXR3b3JrLT5zc2lkX2xlbiwgcHJpdi0+ZXNzaWRfbGVuKSkpKSB7CisJCQljaGFyIGVzY2FwZWRbSVdfRVNTSURfTUFYX1NJWkUgKiAyICsgMV07CisKKwkJCXN0cm5jcHkoZXNjYXBlZCwKKwkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCXNpemVvZihlc2NhcGVkKSk7CisJCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkJImJlY2F1c2Ugb2YgRVNTSUQgbWlzbWF0Y2g6ICclcycuXG4iLAorCQkJCQllc2NhcGVkLCBNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQkJZXNjYXBlX2Vzc2lkKHByaXYtPmVzc2lkLAorCQkJCQkJICAgICBwcml2LT5lc3NpZF9sZW4pKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogSWYgdGhlIG9sZCBuZXR3b3JrIHJhdGUgaXMgYmV0dGVyIHRoYW4gdGhpcyBvbmUsIGRvbid0IGJvdGhlcgorCSAqIHRlc3RpbmcgZXZlcnl0aGluZyBlbHNlLiAqLworCisJaWYgKG5ldHdvcmstPnRpbWVfc3RhbXBbMF0gPCBtYXRjaC0+bmV0d29yay0+dGltZV9zdGFtcFswXSkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzIGV4Y2x1ZGVkIGJlY2F1c2UgbmV3ZXIgdGhhbiAiCisJCQkJImN1cnJlbnQgbmV0d29yay5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG1hdGNoLT5uZXR3b3JrLT5zc2lkLAorCQkJCQkgICAgIG1hdGNoLT5uZXR3b3JrLT5zc2lkX2xlbikpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKG5ldHdvcmstPnRpbWVfc3RhbXBbMV0gPCBtYXRjaC0+bmV0d29yay0+dGltZV9zdGFtcFsxXSkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzIGV4Y2x1ZGVkIGJlY2F1c2UgbmV3ZXIgdGhhbiAiCisJCQkJImN1cnJlbnQgbmV0d29yay5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG1hdGNoLT5uZXR3b3JrLT5zc2lkLAorCQkJCQkgICAgIG1hdGNoLT5uZXR3b3JrLT5zc2lkX2xlbikpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBOb3cgZ28gdGhyb3VnaCBhbmQgc2VlIGlmIHRoZSByZXF1ZXN0ZWQgbmV0d29yayBpcyB2YWxpZC4uLiAqLworCWlmIChwcml2LT5pZWVlLT5zY2FuX2FnZSAhPSAwICYmCisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgbmV0d29yay0+bGFzdF9zY2FubmVkICsgcHJpdi0+aWVlZS0+c2Nhbl9hZ2UpKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCSJiZWNhdXNlIG9mIGFnZTogJWx1bXMuXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCisJCQkJMTAwMCAqIChqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIEhaKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0NIQU5ORUwpICYmCisJICAgIChuZXR3b3JrLT5jaGFubmVsICE9IHByaXYtPmNoYW5uZWwpKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCSJiZWNhdXNlIG9mIGNoYW5uZWwgbWlzbWF0Y2g6ICVkICE9ICVkLlxuIiwKKwkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpLAorCQkJCW5ldHdvcmstPmNoYW5uZWwsIHByaXYtPmNoYW5uZWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBWZXJpZnkgcHJpdmFjeSBjb21wYXRhYmlsaXR5ICovCisJaWYgKCgocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKSA/IDEgOiAwKSAhPQorCSAgICAoKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgPyAxIDogMCkpIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2YgcHJpdmFjeSBtaXNtYXRjaDogJXMgIT0gJXMuXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCisJCQkJcHJpdi0+CisJCQkJY2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OID8gIm9uIiA6ICJvZmYiLAorCQkJCW5ldHdvcmstPgorCQkJCWNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/ICJvbiIgOgorCQkJCSJvZmYiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFtZW1jbXAobmV0d29yay0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTikpIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2YgdGhlIHNhbWUgQlNTSUQgbWF0Y2g6ICIgTUFDX0ZNVAorCQkJCSIuXG4iLCBlc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKKwkJCQkJCSAgICBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksIE1BQ19BUkcocHJpdi0+YnNzaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRmlsdGVyIG91dCBhbnkgaW5jb21wYXRpYmxlIGZyZXEgLyBtb2RlIGNvbWJpbmF0aW9ucyAqLworCWlmICghaWVlZTgwMjExX2lzX3ZhbGlkX21vZGUocHJpdi0+aWVlZSwgbmV0d29yay0+bW9kZSkpIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2YgaW52YWxpZCBmcmVxdWVuY3kvbW9kZSAiCisJCQkJImNvbWJpbmF0aW9uLlxuIiwKKwkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW5zdXJlIHRoYXQgdGhlIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGFyZSBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGlzIEFQLCBpbmNsdWRpbmcgdmVyaWZpY2F0aW9uIG9mIGJhc2ljIHJhdGVzIChtYW5kYXRvcnkpICovCisJaWYgKCFpcHdfY29tcGF0aWJsZV9yYXRlcyhwcml2LCBuZXR3b3JrLCAmcmF0ZXMpKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCSJiZWNhdXNlIGNvbmZpZ3VyZWQgcmF0ZSBtYXNrIGV4Y2x1ZGVzICIKKwkJCQkiQVAgbWFuZGF0b3J5IHJhdGUuXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmF0ZXMubnVtX3JhdGVzID09IDApIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2Ygbm8gY29tcGF0aWJsZSByYXRlcy5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFRPRE86IFBlcmZvcm0gYW55IGZ1cnRoZXIgbWluaW1hbCBjb21wYXJpdGl0aXZlIHRlc3RzLiAgV2UgZG8gbm90CisJICogd2FudCB0byBwdXQgdG9vIG11Y2ggcG9saWN5IGxvZ2ljIGhlcmU7IGludGVsbGlnZW50IHNjYW4gc2VsZWN0aW9uCisJICogc2hvdWxkIG9jY3VyIHdpdGhpbiBhIGdlbmVyaWMgSUVFRSA4MDIuMTEgdXNlciBzcGFjZSB0b29sLiAgKi8KKworCS8qIFNldCB1cCAnbmV3JyBBUCB0byB0aGlzIG5ldHdvcmsgKi8KKwlpcHdfY29weV9yYXRlcygmbWF0Y2gtPnJhdGVzLCAmcmF0ZXMpOworCW1hdGNoLT5uZXR3b3JrID0gbmV0d29yazsKKwlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGlzIGEgdmlhYmxlIG1hdGNoLlxuIiwKKwkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaXB3X21lcmdlX2FkaG9jX25ldHdvcmsodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CisJc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIG1hdGNoID0geworCQkubmV0d29yayA9IHByaXYtPmFzc29jX25ldHdvcmsKKwl9OworCisJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKKwkgICAgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykpIHsKKwkJLyogRmlyc3QgcGFzcyB0aHJvdWdoIFJPQU0gcHJvY2VzcyAtLSBsb29rIGZvciBhIGJldHRlcgorCQkgKiBuZXR3b3JrICovCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXR3b3JrLCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCQlpZiAobmV0d29yayAhPSBwcml2LT5hc3NvY19uZXR3b3JrKQorCQkJCWlwd19maW5kX2FkaG9jX25ldHdvcmsocHJpdiwgJm1hdGNoLCBuZXR3b3JrLAorCQkJCQkJICAgICAgIDEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAobWF0Y2gubmV0d29yayA9PSBwcml2LT5hc3NvY19uZXR3b3JrKSB7CisJCQlJUFdfREVCVUdfTUVSR0UoIk5vIGJldHRlciBBREhPQyBpbiB0aGlzIG5ldHdvcmsgdG8gIgorCQkJCQkibWVyZ2UgdG8uXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWRvd24oJnByaXYtPnNlbSk7CisJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSkgeworCQkJSVBXX0RFQlVHX01FUkdFKCJyZW1vdmUgbmV0d29yayAlc1xuIiwKKwkJCQkJZXNjYXBlX2Vzc2lkKHByaXYtPmVzc2lkLAorCQkJCQkJICAgICBwcml2LT5lc3NpZF9sZW4pKTsKKwkJCWlwd19yZW1vdmVfY3VycmVudF9uZXR3b3JrKHByaXYpOworCQl9CisKKwkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKKwkJcHJpdi0+YXNzb2NfbmV0d29yayA9IG1hdGNoLm5ldHdvcms7CisJCXVwKCZwcml2LT5zZW0pOworCQlyZXR1cm47CisJfQorfQorCiBzdGF0aWMgaW50IGlwd19iZXN0X25ldHdvcmsoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJICAgIHN0cnVjdCBpcHdfbmV0d29ya19tYXRjaCAqbWF0Y2gsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLCBpbnQgcm9hbWluZykKQEAgLTQzMjIsOSArNTQ2Nyw5IEBACiAJLyogSWYgdGhpcyBuZXR3b3JrIGhhcyBhbHJlYWR5IGhhZCBhbiBhc3NvY2lhdGlvbiBhdHRlbXB0IHdpdGhpbiB0aGUKIAkgKiBsYXN0IDMgc2Vjb25kcywgZG8gbm90IHRyeSBhbmQgYXNzb2NpYXRlIGFnYWluLi4uICovCiAJaWYgKG5ldHdvcmstPmxhc3RfYXNzb2NpYXRlICYmCi0JICAgIHRpbWVfYWZ0ZXIobmV0d29yay0+bGFzdF9hc3NvY2lhdGUgKyAoSFogKiA1VUwpLCBqaWZmaWVzKSkgeworCSAgICB0aW1lX2FmdGVyKG5ldHdvcmstPmxhc3RfYXNzb2NpYXRlICsgKEhaICogM1VMKSwgamlmZmllcykpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCi0JCQkJImJlY2F1c2Ugb2Ygc3Rvcm1pbmcgKCVsdSBzaW5jZSBsYXN0ICIKKwkJCQkiYmVjYXVzZSBvZiBzdG9ybWluZyAoJWx1cyBzaW5jZSBsYXN0ICIKIAkJCQkiYXNzb2MgYXR0ZW1wdCkuXG4iLAogCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCiAJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCkBAIC00MzM0LDEyICs1NDc5LDEyIEBACiAKIAkvKiBOb3cgZ28gdGhyb3VnaCBhbmQgc2VlIGlmIHRoZSByZXF1ZXN0ZWQgbmV0d29yayBpcyB2YWxpZC4uLiAqLwogCWlmIChwcml2LT5pZWVlLT5zY2FuX2FnZSAhPSAwICYmCi0JICAgIGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQgPiBwcml2LT5pZWVlLT5zY2FuX2FnZSkgeworCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCArIHByaXYtPmllZWUtPnNjYW5fYWdlKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKIAkJCQkiYmVjYXVzZSBvZiBhZ2U6ICVsdW1zLlxuIiwKIAkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpLAotCQkJCShqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIChIWiAvIDEwMCkpOworCQkJCTEwMDAgKiAoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkgLyBIWik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDM2Nyw2ICs1NTEyLDE1IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmICghcHJpdi0+aWVlZS0+d3BhX2VuYWJsZWQgJiYgKG5ldHdvcmstPndwYV9pZV9sZW4gPiAwIHx8CisJCQkJCSBuZXR3b3JrLT5yc25faWVfbGVuID4gMCkpIHsKKwkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2YgV1BBIGNhcGFiaWxpdHkgbWlzbWF0Y2guXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQlNTSUQpICYmCiAJICAgIG1lbWNtcChuZXR3b3JrLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKQEAgLTQzODYsNyArNTU0MCwyNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpcHdfY29tcGF0aWJsZV9yYXRlcyhwcml2LCBuZXR3b3JrLCAmcmF0ZXMpOworCS8qIEZpbHRlciBvdXQgaW52YWxpZCBjaGFubmVsIGluIGN1cnJlbnQgR0VPICovCisJaWYgKCFpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBuZXR3b3JrLT5jaGFubmVsKSkgeworCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiBpbnZhbGlkIGNoYW5uZWwgaW4gY3VycmVudCBHRU9cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCXJldHVybiAwOworCX0KKworCS8qIEVuc3VyZSB0aGF0IHRoZSByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBhcmUgY29tcGF0aWJsZSB3aXRoCisJICogdGhpcyBBUCwgaW5jbHVkaW5nIHZlcmlmaWNhdGlvbiBvZiBiYXNpYyByYXRlcyAobWFuZGF0b3J5KSAqLworCWlmICghaXB3X2NvbXBhdGlibGVfcmF0ZXMocHJpdiwgbmV0d29yaywgJnJhdGVzKSkgeworCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBjb25maWd1cmVkIHJhdGUgbWFzayBleGNsdWRlcyAiCisJCQkJIkFQIG1hbmRhdG9yeSByYXRlLlxuIiwKKwkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHJhdGVzLm51bV9yYXRlcyA9PSAwKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgogCQkJCSJiZWNhdXNlIG9mIG5vIGNvbXBhdGlibGUgcmF0ZXMuXG4iLApAQCAtNDQxMyw2ICs1NTg2LDkgQEAKIHN0YXRpYyB2b2lkIGlwd19hZGhvY19jcmVhdGUoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCiB7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCWludCBpOworCiAJLyoKIAkgKiBGb3IgdGhlIHB1cnBvc2VzIG9mIHNjYW5uaW5nLCB3ZSBjYW4gc2V0IG91ciB3aXJlbGVzcyBtb2RlCiAJICogdG8gdHJpZ2dlciBzY2FucyBhY3Jvc3MgY29tYmluYXRpb25zIG9mIGJhbmRzLCBidXQgd2hlbiBpdApAQCAtNDQyMywyMiArNTU5OSw0NyBAQAogCSAqIGNob3NzZW4gYmFuZC4gIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgbmV3IGFkLWhvYyBuZXR3b3JrCiAJICogd2l0aCBhbiBpbnZhbGlkIGNoYW5uZWwgZm9yIHdpcmVsZXNzIG1vZGUgd2lsbCB0cmlnZ2VyIGEKIAkgKiBGVyBmYXRhbCBlcnJvci4KKwkgKgogCSAqLwotCW5ldHdvcmstPm1vZGUgPSBpc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUtPm1vZGUsIHByaXYtPmNoYW5uZWwpOwotCWlmIChuZXR3b3JrLT5tb2RlKSB7Ci0JCW5ldHdvcmstPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwotCX0gZWxzZSB7CisJc3dpdGNoIChpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKSkgeworCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CisJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0E7CisJCWkgPSBpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKKwkJaWYgKGkgPT0gLTEpCisJCQlCVUcoKTsKKwkJaWYgKGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkpIHsKKwkJCUlQV19XQVJOSU5HKCJPdmVycmlkaW5nIGludmFsaWQgY2hhbm5lbFxuIik7CisJCQlwcml2LT5jaGFubmVsID0gZ2VvLT5hWzBdLmNoYW5uZWw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV8yNEdIWl9CQU5EOgorCQlpZiAocHJpdi0+aWVlZS0+bW9kZSAmIElFRUVfRykKKwkJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0c7CisJCWVsc2UKKwkJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0I7CisJCWkgPSBpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKKwkJaWYgKGkgPT0gLTEpCisJCQlCVUcoKTsKKwkJaWYgKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CisJCQlJUFdfV0FSTklORygiT3ZlcnJpZGluZyBpbnZhbGlkIGNoYW5uZWxcbiIpOworCQkJcHJpdi0+Y2hhbm5lbCA9IGdlby0+YmdbMF0uY2hhbm5lbDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CiAJCUlQV19XQVJOSU5HKCJPdmVycmlkaW5nIGludmFsaWQgY2hhbm5lbFxuIik7CiAJCWlmIChwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9BKSB7CiAJCQluZXR3b3JrLT5tb2RlID0gSUVFRV9BOwotCQkJcHJpdi0+Y2hhbm5lbCA9IGJhbmRfYV9hY3RpdmVfY2hhbm5lbFswXTsKKwkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmFbMF0uY2hhbm5lbDsKIAkJfSBlbHNlIGlmIChwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9HKSB7CiAJCQluZXR3b3JrLT5tb2RlID0gSUVFRV9HOwotCQkJcHJpdi0+Y2hhbm5lbCA9IGJhbmRfYl9hY3RpdmVfY2hhbm5lbFswXTsKKwkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmJnWzBdLmNoYW5uZWw7CiAJCX0gZWxzZSB7CiAJCQluZXR3b3JrLT5tb2RlID0gSUVFRV9COwotCQkJcHJpdi0+Y2hhbm5lbCA9IGJhbmRfYl9hY3RpdmVfY2hhbm5lbFswXTsKKwkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmJnWzBdLmNoYW5uZWw7CiAJCX0KKwkJYnJlYWs7CiAJfQogCiAJbmV0d29yay0+Y2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CkBAIC00NDQ4LDYgKzU2NDksOCBAQAogCW1lbWNweShuZXR3b3JrLT5zc2lkLCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKTsKIAltZW1zZXQoJm5ldHdvcmstPnN0YXRzLCAwLCBzaXplb2YobmV0d29yay0+c3RhdHMpKTsKIAluZXR3b3JrLT5jYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CisJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX1BSRUFNQkxFX0xPTkcpKQorCQluZXR3b3JrLT5jYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKIAlpZiAocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKQogCQluZXR3b3JrLT5jYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCW5ldHdvcmstPnJhdGVzX2xlbiA9IG1pbihwcml2LT5yYXRlcy5udW1fcmF0ZXMsIE1BWF9SQVRFU19MRU5HVEgpOwpAQCAtNDQ2NCwxMyArNTY2NywzNSBAQAogCW5ldHdvcmstPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsJLyogRGVmYXVsdCAqLwogCW5ldHdvcmstPmxpc3Rlbl9pbnRlcnZhbCA9IDEwOwkvKiBEZWZhdWx0ICovCiAJbmV0d29yay0+YXRpbV93aW5kb3cgPSAwOwkvKiBEZWZhdWx0ICovCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9XUEEKIAluZXR3b3JrLT53cGFfaWVfbGVuID0gMDsKIAluZXR3b3JrLT5yc25faWVfbGVuID0gMDsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX1dQQSAqLwogfQogCi1zdGF0aWMgdm9pZCBpcHdfc2VuZF93ZXBfa2V5cyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpcHdfc2VuZF90Z2lfdHhfa2V5KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IHR5cGUsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaXB3X3RnaV90eF9rZXkgKmtleTsKKwlzdHJ1Y3QgaG9zdF9jbWQgY21kID0geworCQkuY21kID0gSVBXX0NNRF9UR0lfVFhfS0VZLAorCQkubGVuID0gc2l6ZW9mKCprZXkpCisJfTsKKworCWlmICghKHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IGluZGV4KSkpCisJCXJldHVybjsKKworCWtleSA9IChzdHJ1Y3QgaXB3X3RnaV90eF9rZXkgKikmY21kLnBhcmFtOworCWtleS0+a2V5X2lkID0gaW5kZXg7CisJbWVtY3B5KGtleS0+a2V5LCBwcml2LT5pZWVlLT5zZWMua2V5c1tpbmRleF0sIFNDTV9URU1QT1JBTF9LRVlfTEVOR1RIKTsKKwlrZXktPnNlY3VyaXR5X3R5cGUgPSB0eXBlOworCWtleS0+c3RhdGlvbl9pbmRleCA9IDA7CS8qIGFsd2F5cyAwIGZvciBCU1MgKi8KKwlrZXktPmZsYWdzID0gMDsKKwkvKiAwIGZvciBuZXcga2V5OyBwcmV2aW91cyB2YWx1ZSBvZiBjb3VudGVyIChhZnRlciBmYXRhbCBlcnJvcikgKi8KKwlrZXktPnR4X2NvdW50ZXJbMF0gPSAwOworCWtleS0+dHhfY291bnRlclsxXSA9IDA7CisKKwlpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19zZW5kX3dlcF9rZXlzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGlwd193ZXBfa2V5ICprZXk7CiAJaW50IGk7CkBAIC00NDgzLDE5ICs1NzA4LDk3IEBACiAJa2V5LT5jbWRfaWQgPSBESU5PX0NNRF9XRVBfS0VZOwogCWtleS0+c2VxX251bSA9IDA7CiAKKwkvKiBOb3RlOiBBRVMga2V5cyBjYW5ub3QgYmUgc2V0IGZvciBtdWx0aXBsZSB0aW1lcy4KKwkgKiBPbmx5IHNldCBpdCBhdCB0aGUgZmlyc3QgdGltZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWtleS0+a2V5X2luZGV4ID0gaTsKLQkJaWYgKCEocHJpdi0+c2VjLmZsYWdzICYgKDEgPDwgaSkpKSB7CisJCWtleS0+a2V5X2luZGV4ID0gaSB8IHR5cGU7CisJCWlmICghKHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IGkpKSkgewogCQkJa2V5LT5rZXlfc2l6ZSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlrZXktPmtleV9zaXplID0gcHJpdi0+c2VjLmtleV9zaXplc1tpXTsKLQkJCW1lbWNweShrZXktPmtleSwgcHJpdi0+c2VjLmtleXNbaV0sIGtleS0+a2V5X3NpemUpOworCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFdFUF9LRVkgY29tbWFuZFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJa2V5LT5rZXlfc2l6ZSA9IHByaXYtPmllZWUtPnNlYy5rZXlfc2l6ZXNbaV07CisJCW1lbWNweShrZXktPmtleSwgcHJpdi0+aWVlZS0+c2VjLmtleXNbaV0sIGtleS0+a2V5X3NpemUpOworCisJCWlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlwd19zZXRfaHdfZGVjcnlwdF91bmljYXN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IGxldmVsKQoreworCWlmIChwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQpCisJCXJldHVybjsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNFQ19MRVZFTF8zOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfdW5pY2FzdF9kZWNyeXB0aW9uID0gMDsKKwkJcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTRUNfTEVWRUxfMjoKKwkJcHJpdi0+c3lzX2NvbmZpZy5kaXNhYmxlX3VuaWNhc3RfZGVjcnlwdGlvbiA9IDE7CisJCXByaXYtPmllZWUtPmhvc3RfZGVjcnlwdCA9IDE7CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzE6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV91bmljYXN0X2RlY3J5cHRpb24gPSAwOworCQlwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQgPSAwOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8wOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfdW5pY2FzdF9kZWNyeXB0aW9uID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpcHdfc2V0X2h3X2RlY3J5cHRfbXVsdGljYXN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IGxldmVsKQoreworCWlmIChwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQpCisJCXJldHVybjsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNFQ19MRVZFTF8zOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAwOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8yOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAxOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8xOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAwOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8wOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlwd19zZXRfaHdjcnlwdG9fa2V5cyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJc3dpdGNoIChwcml2LT5pZWVlLT5zZWMubGV2ZWwpIHsKKwljYXNlIFNFQ19MRVZFTF8zOgorCQlpZiAocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgU0VDX0FDVElWRV9LRVkpCisJCQlpcHdfc2VuZF90Z2lfdHhfa2V5KHByaXYsCisJCQkJCSAgICBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfQ0NNLAorCQkJCQkgICAgcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXkpOworCisJCWlmICghcHJpdi0+aWVlZS0+aG9zdF9tY19kZWNyeXB0KQorCQkJaXB3X3NlbmRfd2VwX2tleXMocHJpdiwgRENXX1dFUF9LRVlfU0VDX1RZUEVfQ0NNKTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfTEVWRUxfMjoKKwkJaWYgKHByaXYtPmllZWUtPnNlYy5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKQorCQkJaXB3X3NlbmRfdGdpX3R4X2tleShwcml2LAorCQkJCQkgICAgRENUX0ZMQUdfRVhUX1NFQ1VSSVRZX1RLSVAsCisJCQkJCSAgICBwcml2LT5pZWVlLT5zZWMuYWN0aXZlX2tleSk7CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzE6CisJCWlwd19zZW5kX3dlcF9rZXlzKHByaXYsIERDV19XRVBfS0VZX1NFQ19UWVBFX1dFUCk7CisJCWlwd19zZXRfaHdfZGVjcnlwdF91bmljYXN0KHByaXYsIHByaXYtPmllZWUtPnNlYy5sZXZlbCk7CisJCWlwd19zZXRfaHdfZGVjcnlwdF9tdWx0aWNhc3QocHJpdiwgcHJpdi0+aWVlZS0+c2VjLmxldmVsKTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfTEVWRUxfMDoKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiB9CiAKQEAgLTQ1MDMsOSArNTgwNiwxMiBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CiAKLQlpZiAocHJpdi0+bWlzc2VkX2FkaG9jX2JlYWNvbnMrKyA+IHByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkICYmCisJaWYgKHByaXYtPm1pc3NlZF9hZGhvY19iZWFjb25zKysgPiBwcml2LT5kaXNhc3NvY2lhdGVfdGhyZXNob2xkICYmCiAJICAgICEocHJpdi0+Y29uZmlnICYgQ0ZHX0FESE9DX1BFUlNJU1QpKSB7Ci0JCUlQV19ERUJVR19TQ0FOKCJEaXNhc3NvY2lhdGluZyBkdWUgdG8gbWlzc2VkIGJlYWNvbnNcbiIpOworCQlJUFdfREVCVUcoSVBXX0RMX0lORk8gfCBJUFdfRExfTk9USUYgfAorCQkJICBJUFdfRExfU1RBVEUgfCBJUFdfRExfQVNTT0MsCisJCQkgICJNaXNzZWQgYmVhY29uOiAlZCAtIGRpc2Fzc29jaWF0ZVxuIiwKKwkJCSAgcHJpdi0+bWlzc2VkX2FkaG9jX2JlYWNvbnMpOwogCQlpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhwcml2KTsKIAkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKIAkJcmV0dXJuOwpAQCAtNDUxNSw2ICs1ODIxLDE0IEBACiAJCQkgICBwcml2LT5hc3NvY19yZXF1ZXN0LmJlYWNvbl9pbnRlcnZhbCk7CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19iZ19hZGhvY19jaGVjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfYWRob2NfY2hlY2soZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiBzdGF0aWMgdm9pZCBpcHdfZGVidWdfY29uZmlnKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKQEAgLTQ1MzAsNyArNTg0NCw4IEBACiAJZWxzZQogCQlJUFdfREVCVUdfSU5GTygiRVNTSUQgdW5sb2NrZWQuXG4iKTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19CU1NJRCkKLQkJSVBXX0RFQlVHX0lORk8oIkJTU0lEIGxvY2tlZCB0byAlZFxuIiwgcHJpdi0+Y2hhbm5lbCk7CisJCUlQV19ERUJVR19JTkZPKCJCU1NJRCBsb2NrZWQgdG8gIiBNQUNfRk1UICJcbiIsCisJCQkgICAgICAgTUFDX0FSRyhwcml2LT5ic3NpZCkpOwogCWVsc2UKIAkJSVBXX0RFQlVHX0lORk8oIkJTU0lEIHVubG9ja2VkLlxuIik7CiAJaWYgKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTikKQEAgLTQ1NDMsOCArNTg1OCw3IEBACiAjZGVmaW5lIGlwd19kZWJ1Z19jb25maWcoeCkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGlwd19zZXRfZml4ZWRfcmF0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorc3RhdGljIGlubGluZSB2b2lkIGlwd19zZXRfZml4ZWRfcmF0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCBtb2RlKQogewogCS8qIFRPRE86IFZlcmlmeSB0aGF0IHRoaXMgd29ya3MuLi4gKi8KIAlzdHJ1Y3QgaXB3X2ZpeGVkX3JhdGUgZnIgPSB7CkBAIC00NTYxLDYgKzU4NzUsOCBAQAogCQkvKiBJRUVFX0EgKi8KIAkJaWYgKHByaXYtPnJhdGVzX21hc2sgJiB+SUVFRTgwMjExX09GRE1fUkFURVNfTUFTSykgewogCQkJLyogSW52YWxpZCBmaXhlZCByYXRlIG1hc2sgKi8KKwkJCUlQV19ERUJVR19XWAorCQkJICAgICgiaW52YWxpZCBmaXhlZCByYXRlIG1hc2sgaW4gaXB3X3NldF9maXhlZF9yYXRlXG4iKTsKIAkJCWZyLnR4X3JhdGVzID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NTcwLDkgKzU4ODYsMTEgQEAKIAogCWRlZmF1bHQ6CQkvKiAyLjRHaHogb3IgTWl4ZWQgKi8KIAkJLyogSUVFRV9CICovCi0JCWlmIChuZXR3b3JrLT5tb2RlID09IElFRUVfQikgeworCQlpZiAobW9kZSA9PSBJRUVFX0IpIHsKIAkJCWlmIChmci50eF9yYXRlcyAmIH5JRUVFODAyMTFfQ0NLX1JBVEVTX01BU0spIHsKIAkJCQkvKiBJbnZhbGlkIGZpeGVkIHJhdGUgbWFzayAqLworCQkJCUlQV19ERUJVR19XWAorCQkJCSAgICAoImludmFsaWQgZml4ZWQgcmF0ZSBtYXNrIGluIGlwd19zZXRfZml4ZWRfcmF0ZVxuIik7CiAJCQkJZnIudHhfcmF0ZXMgPSAwOwogCQkJfQogCQkJYnJlYWs7CkBAIC00NTgyLDYgKzU5MDAsOCBAQAogCQlpZiAoZnIudHhfcmF0ZXMgJiB+KElFRUU4MDIxMV9DQ0tfUkFURVNfTUFTSyB8CiAJCQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVTX01BU0spKSB7CiAJCQkvKiBJbnZhbGlkIGZpeGVkIHJhdGUgbWFzayAqLworCQkJSVBXX0RFQlVHX1dYCisJCQkgICAgKCJpbnZhbGlkIGZpeGVkIHJhdGUgbWFzayBpbiBpcHdfc2V0X2ZpeGVkX3JhdGVcbiIpOwogCQkJZnIudHhfcmF0ZXMgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ2MDksNiArNTkyOSwxMTEyIEBACiAJaXB3X3dyaXRlX3JlZzMyKHByaXYsIHJlZywgKih1MzIgKikgJiBmcik7CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19hYm9ydF9zY2FuKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpbnQgZXJyOworCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOX0FCT1JUSU5HKSB7CisJCUlQV19ERUJVR19IQygiSWdub3JpbmcgY29uY3VycmVudCBzY2FuIGFib3J0IHJlcXVlc3QuXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fQUJPUlRJTkc7CisKKwllcnIgPSBpcHdfc2VuZF9zY2FuX2Fib3J0KHByaXYpOworCWlmIChlcnIpCisJCUlQV19ERUJVR19IQygiUmVxdWVzdCB0byBhYm9ydCBzY2FuIGZhaWxlZC5cbiIpOworfQorCitzdGF0aWMgdm9pZCBpcHdfYWRkX3NjYW5fY2hhbm5lbHMoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0ICpzY2FuLAorCQkJCSAgaW50IHNjYW5fdHlwZSkKK3sKKwlpbnQgY2hhbm5lbF9pbmRleCA9IDA7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbzsKKwlpbnQgaTsKKworCWdlbyA9IGlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCisJaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKSB7CisJCWludCBzdGFydCA9IGNoYW5uZWxfaW5kZXg7CisJCWZvciAoaSA9IDA7IGkgPCBnZW8tPmFfY2hhbm5lbHM7IGkrKykgeworCQkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKKwkJCSAgICBnZW8tPmFbaV0uY2hhbm5lbCA9PSBwcml2LT5jaGFubmVsKQorCQkJCWNvbnRpbnVlOworCQkJY2hhbm5lbF9pbmRleCsrOworCQkJc2Nhbi0+Y2hhbm5lbHNfbGlzdFtjaGFubmVsX2luZGV4XSA9IGdlby0+YVtpXS5jaGFubmVsOworCQkJaXB3X3NldF9zY2FuX3R5cGUoc2NhbiwgY2hhbm5lbF9pbmRleCwKKwkJCQkJICBnZW8tPmFbaV0uCisJCQkJCSAgZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID8KKwkJCQkJICBJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTiA6CisJCQkJCSAgc2Nhbl90eXBlKTsKKwkJfQorCisJCWlmIChzdGFydCAhPSBjaGFubmVsX2luZGV4KSB7CisJCQlzY2FuLT5jaGFubmVsc19saXN0W3N0YXJ0XSA9ICh1OCkgKElQV19BX01PREUgPDwgNikgfAorCQkJICAgIChjaGFubmVsX2luZGV4IC0gc3RhcnQpOworCQkJY2hhbm5lbF9pbmRleCsrOworCQl9CisJfQorCisJaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSB7CisJCWludCBzdGFydCA9IGNoYW5uZWxfaW5kZXg7CisJCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1BFRURfU0NBTikgeworCQkJaW50IGluZGV4OworCQkJdTggY2hhbm5lbHNbSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTXSA9IHsKKwkJCQkvKiBub3Agb3V0IHRoZSBsaXN0ICovCisJCQkJWzBdID0gMAorCQkJfTsKKworCQkJdTggY2hhbm5lbDsKKwkJCXdoaWxlIChjaGFubmVsX2luZGV4IDwgSVBXX1NDQU5fQ0hBTk5FTFMpIHsKKwkJCQljaGFubmVsID0KKwkJCQkgICAgcHJpdi0+c3BlZWRfc2Nhbltwcml2LT5zcGVlZF9zY2FuX3Bvc107CisJCQkJaWYgKGNoYW5uZWwgPT0gMCkgeworCQkJCQlwcml2LT5zcGVlZF9zY2FuX3BvcyA9IDA7CisJCQkJCWNoYW5uZWwgPSBwcml2LT5zcGVlZF9zY2FuWzBdOworCQkJCX0KKwkJCQlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgorCQkJCSAgICBjaGFubmVsID09IHByaXYtPmNoYW5uZWwpIHsKKwkJCQkJcHJpdi0+c3BlZWRfc2Nhbl9wb3MrKzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLyogSWYgdGhpcyBjaGFubmVsIGhhcyBhbHJlYWR5IGJlZW4KKwkJCQkgKiBhZGRlZCBpbiBzY2FuLCBicmVhayBmcm9tIGxvb3AKKwkJCQkgKiBhbmQgdGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBjaGFubmVsCisJCQkJICogaW4gdGhlIG5leHQgc2Nhbi4KKwkJCQkgKi8KKwkJCQlpZiAoY2hhbm5lbHNbY2hhbm5lbCAtIDFdICE9IDApCisJCQkJCWJyZWFrOworCisJCQkJY2hhbm5lbHNbY2hhbm5lbCAtIDFdID0gMTsKKwkJCQlwcml2LT5zcGVlZF9zY2FuX3BvcysrOworCQkJCWNoYW5uZWxfaW5kZXgrKzsKKwkJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0gY2hhbm5lbDsKKwkJCQlpbmRleCA9CisJCQkJICAgIGlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIGNoYW5uZWwpOworCQkJCWlwd19zZXRfc2Nhbl90eXBlKHNjYW4sIGNoYW5uZWxfaW5kZXgsCisJCQkJCQkgIGdlby0+YmdbaW5kZXhdLgorCQkJCQkJICBmbGFncyAmCisJCQkJCQkgIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPworCQkJCQkJICBJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTgorCQkJCQkJICA6IHNjYW5fdHlwZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5iZ19jaGFubmVsczsgaSsrKSB7CisJCQkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKKwkJCQkgICAgZ2VvLT5iZ1tpXS5jaGFubmVsID09IHByaXYtPmNoYW5uZWwpCisJCQkJCWNvbnRpbnVlOworCQkJCWNoYW5uZWxfaW5kZXgrKzsKKwkJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0KKwkJCQkgICAgZ2VvLT5iZ1tpXS5jaGFubmVsOworCQkJCWlwd19zZXRfc2Nhbl90eXBlKHNjYW4sIGNoYW5uZWxfaW5kZXgsCisJCQkJCQkgIGdlby0+YmdbaV0uCisJCQkJCQkgIGZsYWdzICYKKwkJCQkJCSAgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSA/CisJCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOCisJCQkJCQkgIDogc2Nhbl90eXBlKTsKKwkJCX0KKwkJfQorCisJCWlmIChzdGFydCAhPSBjaGFubmVsX2luZGV4KSB7CisJCQlzY2FuLT5jaGFubmVsc19saXN0W3N0YXJ0XSA9ICh1OCkgKElQV19CX01PREUgPDwgNikgfAorCQkJICAgIChjaGFubmVsX2luZGV4IC0gc3RhcnQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGlwd19yZXF1ZXN0X3NjYW4oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXN0cnVjdCBpcHdfc2Nhbl9yZXF1ZXN0X2V4dCBzY2FuOworCWludCBlcnIgPSAwLCBzY2FuX3R5cGU7CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVCkgfHwKKwkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpKQorCQlyZXR1cm4gMDsKKworCWRvd24oJnByaXYtPnNlbSk7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKSB7CisJCUlQV19ERUJVR19IQygiQ29uY3VycmVudCBzY2FuIHJlcXVlc3RlZC4gIElnbm9yaW5nLlxuIik7CisJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9QRU5ESU5HOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5fRk9SQ0VEKSAmJgorCSAgICBwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTl9BQk9SVElORykgeworCQlJUFdfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fUEVORElORzsKKwkJZ290byBkb25lOworCX0KKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSB7CisJCUlQV19ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKKwkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOX1BFTkRJTkc7CisJCWdvdG8gZG9uZTsKKwl9CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzY2FuKSk7CisKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pCisJCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX1NDQU5dID0KKwkJICAgIGNwdV90b19sZTE2KDMwKTsKKwllbHNlCisJCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX1NDQU5dID0KKwkJICAgIGNwdV90b19sZTE2KDIwKTsKKworCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX0FORF9ESVJFQ1RfU0NBTl0gPQorCSAgICBjcHVfdG9fbGUxNigyMCk7CisJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOXSA9IGNwdV90b19sZTE2KDEyMCk7CisKKwlzY2FuLmZ1bGxfc2Nhbl9pbmRleCA9IGNwdV90b19sZTMyKGllZWU4MDIxMV9nZXRfc2NhbnMocHJpdi0+aWVlZSkpOworCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQl1OCBjaGFubmVsOworCQl1OCBiYW5kID0gMDsKKworCQlzd2l0Y2ggKGlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7CisJCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CisJCQliYW5kID0gKHU4KSAoSVBXX0FfTU9ERSA8PCA2KSB8IDE7CisJCQljaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwkJCWJyZWFrOworCisJCWNhc2UgSUVFRTgwMjExXzI0R0haX0JBTkQ6CisJCQliYW5kID0gKHU4KSAoSVBXX0JfTU9ERSA8PCA2KSB8IDE7CisJCQljaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQliYW5kID0gKHU4KSAoSVBXX0JfTU9ERSA8PCA2KSB8IDE7CisJCQljaGFubmVsID0gOTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2Nhbi5jaGFubmVsc19saXN0WzBdID0gYmFuZDsKKwkJc2Nhbi5jaGFubmVsc19saXN0WzFdID0gY2hhbm5lbDsKKwkJaXB3X3NldF9zY2FuX3R5cGUoJnNjYW4sIDEsIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOKTsKKworCQkvKiBOT1RFOiAgVGhlIGNhcmQgd2lsbCBzaXQgb24gdGhpcyBjaGFubmVsIGZvciB0aGlzIHRpbWUKKwkJICogcGVyaW9kLiAgU2NhbiBhYm9ydHMgYXJlIHRpbWluZyBzZW5zaXRpdmUgYW5kIGZyZXF1ZW50bHkKKwkJICogcmVzdWx0IGluIGZpcm13YXJlIHJlc3RhcnRzLiAgQXMgc3VjaCwgaXQgaXMgYmVzdCB0bworCQkgKiBzZXQgYSBzbWFsbCBkd2VsbF90aW1lIGhlcmUgYW5kIGp1c3Qga2VlcCByZS1pc3N1aW5nCisJCSAqIHNjYW5zLiAgT3RoZXJ3aXNlIGZhc3QgY2hhbm5lbCBob3BwaW5nIHdpbGwgbm90IGFjdHVhbGx5CisJCSAqIGhvcCBjaGFubmVscy4KKwkJICoKKwkJICogVE9ETzogTW92ZSBTUEVFRCBTQ0FOIHN1cHBvcnQgdG8gYWxsIG1vZGVzIGFuZCBiYW5kcyAqLworCQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU5dID0KKwkJICAgIGNwdV90b19sZTE2KDIwMDApOworCX0gZWxzZSB7CisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfTU9OSVRPUiAqLworCQkvKiBJZiB3ZSBhcmUgcm9hbWluZywgdGhlbiBtYWtlIHRoaXMgYSBkaXJlY3RlZCBzY2FuIGZvciB0aGUKKwkJICogY3VycmVudCBuZXR3b3JrLiAgT3RoZXJ3aXNlLCBlbnN1cmUgdGhhdCBldmVyeSBvdGhlciBzY2FuCisJCSAqIGlzIGEgZmFzdCBjaGFubmVsIGhvcCBzY2FuICovCisJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JPQU1JTkcpCisJCSAgICB8fCAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKKwkJCSYmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEKQorCQkJJiYgKGxlMzJfdG9fY3B1KHNjYW4uZnVsbF9zY2FuX2luZGV4KSAlIDIpKSkgeworCQkJZXJyID0gaXB3X3NlbmRfc3NpZChwcml2LCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBTU0lEIGNvbW1hbmQgIgorCQkJCQkgICAgICJmYWlsZWQuXG4iKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCXNjYW5fdHlwZSA9IElQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfQU5EX0RJUkVDVF9TQ0FOOworCQl9IGVsc2UKKwkJCXNjYW5fdHlwZSA9IElQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfU0NBTjsKKworCQlpcHdfYWRkX3NjYW5fY2hhbm5lbHMocHJpdiwgJnNjYW4sIHNjYW5fdHlwZSk7CisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCX0KKyNlbmRpZgorCisJZXJyID0gaXB3X3NlbmRfc2Nhbl9yZXF1ZXN0X2V4dChwcml2LCAmc2Nhbik7CisJaWYgKGVycikgeworCQlJUFdfREVCVUdfSEMoIlNlbmRpbmcgc2NhbiBjb21tYW5kIGZhaWxlZDogJTA4WFxuIiwgZXJyKTsKKwkJZ290byBkb25lOworCX0KKworCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTk5JTkc7CisJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfU0NBTl9QRU5ESU5HOworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NoZWNrLAorCQkJICAgSVBXX1NDQU5fQ0hFQ0tfV0FUQ0hET0cpOworICAgICAgZG9uZToKKwl1cCgmcHJpdi0+c2VtKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpcHdfYmdfYWJvcnRfc2Nhbih2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfYWJvcnRfc2NhbihkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKworc3RhdGljIGludCBpcHdfd3BhX2VuYWJsZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB2YWx1ZSkKK3sKKwkvKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdwYV9zdXBwbGljYW50IGxvYWRzIGFuZCBjbG9zZXMgdGhlIGRyaXZlcgorCSAqIGludGVyZmFjZS4gKi8KKwlwcml2LT5pZWVlLT53cGFfZW5hYmxlZCA9IHZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwd193cGFfc2V0X2F1dGhfYWxncyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJCS5mbGFncyA9IFNFQ19BVVRIX01PREUsCisJfTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh2YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKKwkJc2VjLmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCQlpZWVlLT5vcGVuX3dlcCA9IDA7CisJfSBlbHNlIGlmICh2YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKSB7CisJCXNlYy5hdXRoX21vZGUgPSBXTEFOX0FVVEhfT1BFTjsKKwkJaWVlZS0+b3Blbl93ZXAgPSAxOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpZWVlLT5zZXRfc2VjdXJpdHkpCisJCWllZWUtPnNldF9zZWN1cml0eShpZWVlLT5kZXYsICZzZWMpOworCWVsc2UKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGlwd193cGFfYXNzb2NfZnJhbWUoc3RydWN0IGlwd19wcml2ICpwcml2LCBjaGFyICp3cGFfaWUsIGludCB3cGFfaWVfbGVuKQoreworCS8qIG1ha2Ugc3VyZSBXUEEgaXMgZW5hYmxlZCAqLworCWlwd193cGFfZW5hYmxlKHByaXYsIDEpOworCisJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKK30KKworc3RhdGljIGludCBpcHdfc2V0X3Jzbl9jYXBhKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCSAgICBjaGFyICpjYXBhYmlsaXRpZXMsIGludCBsZW5ndGgpCit7CisJc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKKwkJLmNtZCA9IElQV19DTURfUlNOX0NBUEFCSUxJVElFUywKKwkJLmxlbiA9IGxlbmd0aCwKKwl9OworCisJSVBXX0RFQlVHX0hDKCJIT1NUX0NNRF9SU05fQ0FQQUJJTElUSUVTXG4iKTsKKworCW1lbWNweShjbWQucGFyYW0sIGNhcGFiaWxpdGllcywgbGVuZ3RoKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworfQorCisvKgorICogV0UtMTggc3VwcG9ydAorICovCisKKy8qIFNJT0NTSVdHRU5JRSAqLworc3RhdGljIGludCBpcHdfd3hfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwl1OCAqYnVmOworCWludCBlcnIgPSAwOworCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gTUFYX1dQQV9JRV9MRU4gfHwKKwkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIGV4dHJhID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vZG93bigmcHJpdi0+c2VtKTsKKworCS8vaWYgKCFpZWVlLT53cGFfZW5hYmxlZCkgeworCS8vICAgICAgZXJyID0gLUVPUE5PVFNVUFA7CisJLy8gICAgICBnb3RvIG91dDsKKwkvL30KKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkgeworCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQltZW1jcHkoYnVmLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOworCQlrZnJlZShpZWVlLT53cGFfaWUpOworCQlpZWVlLT53cGFfaWUgPSBidWY7CisJCWllZWUtPndwYV9pZV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKKwl9IGVsc2UgeworCQlrZnJlZShpZWVlLT53cGFfaWUpOworCQlpZWVlLT53cGFfaWUgPSBOVUxMOworCQlpZWVlLT53cGFfaWVfbGVuID0gMDsKKwl9CisKKwlpcHdfd3BhX2Fzc29jX2ZyYW1lKHByaXYsIGllZWUtPndwYV9pZSwgaWVlZS0+d3BhX2llX2xlbik7CisgICAgICBvdXQ6CisJLy91cCgmcHJpdi0+c2VtKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBTSU9DR0lXR0VOSUUgKi8KK3N0YXRpYyBpbnQgaXB3X3d4X2dldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJaW50IGVyciA9IDA7CisKKwkvL2Rvd24oJnByaXYtPnNlbSk7CisKKwkvL2lmICghaWVlZS0+d3BhX2VuYWJsZWQpIHsKKwkvLyAgICAgIGVyciA9IC1FT1BOT1RTVVBQOworCS8vICAgICAgZ290byBvdXQ7CisJLy99CisKKwlpZiAoaWVlZS0+d3BhX2llX2xlbiA9PSAwIHx8IGllZWUtPndwYV9pZSA9PSBOVUxMKSB7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgaWVlZS0+d3BhX2llX2xlbikgeworCQllcnIgPSAtRTJCSUc7CisJCWdvdG8gb3V0OworCX0KKworCXdycXUtPmRhdGEubGVuZ3RoID0gaWVlZS0+d3BhX2llX2xlbjsKKwltZW1jcHkoZXh0cmEsIGllZWUtPndwYV9pZSwgaWVlZS0+d3BhX2llX2xlbik7CisKKyAgICAgIG91dDoKKwkvL3VwKCZwcml2LT5zZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd2V4dF9jaXBoZXIybGV2ZWwoaW50IGNpcGhlcikKK3sKKwlzd2l0Y2ggKGNpcGhlcikgeworCWNhc2UgSVdfQVVUSF9DSVBIRVJfTk9ORToKKwkJcmV0dXJuIFNFQ19MRVZFTF8wOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfV0VQNDA6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9XRVAxMDQ6CisJCXJldHVybiBTRUNfTEVWRUxfMTsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1RLSVA6CisJCXJldHVybiBTRUNfTEVWRUxfMjsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0NDTVA6CisJCXJldHVybiBTRUNfTEVWRUxfMzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorCisvKiBTSU9DU0lXQVVUSCAqLworc3RhdGljIGludCBpcHdfd3hfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwkJaXB3X3NldF9od19kZWNyeXB0X3VuaWNhc3QocHJpdiwKKwkJCQkJICAgd2V4dF9jaXBoZXIybGV2ZWwocGFyYW0tPnZhbHVlKSk7CisJCWJyZWFrOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJCWlwd19zZXRfaHdfZGVjcnlwdF9tdWx0aWNhc3QocHJpdiwKKwkJCQkJICAgICB3ZXh0X2NpcGhlcjJsZXZlbChwYXJhbS0+dmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQkvKgorCQkgKiBpcHcyMjAwIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCisJCSAqLworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJY3J5cHQgPSBwcml2LT5pZWVlLT5jcnlwdFtwcml2LT5pZWVlLT50eF9rZXlpZHhdOworCQlpZiAoIWNyeXB0IHx8ICFjcnlwdC0+b3BzLT5zZXRfZmxhZ3MgfHwgIWNyeXB0LT5vcHMtPmdldF9mbGFncykKKwkJCWJyZWFrOworCisJCWZsYWdzID0gY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKGNyeXB0LT5wcml2KTsKKworCQlpZiAocGFyYW0tPnZhbHVlKQorCQkJZmxhZ3MgfD0gSUVFRTgwMjExX0NSWVBUT19US0lQX0NPVU5URVJNRUFTVVJFUzsKKwkJZWxzZQorCQkJZmxhZ3MgJj0gfklFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVM7CisKKwkJY3J5cHQtPm9wcy0+c2V0X2ZsYWdzKGZsYWdzLCBjcnlwdC0+cHJpdik7CisKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDp7CisJCQkvKiBIQUNLOgorCQkJICoKKwkJCSAqIHdwYV9zdXBwbGljYW50IGNhbGxzIHNldF93cGFfZW5hYmxlZCB3aGVuIHRoZSBkcml2ZXIKKwkJCSAqIGlzIGxvYWRlZCBhbmQgdW5sb2FkZWQsIHJlZ2FyZGxlc3Mgb2YgaWYgV1BBIGlzIGJlaW5nCisJCQkgKiB1c2VkLiAgTm8gb3RoZXIgY2FsbHMgYXJlIG1hZGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKwkJCSAqIGRldGVybWluZSBpZiBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZCBvciBub3QgcHJpb3IgdG8KKwkJCSAqIGFzc29jaWF0aW9uIGJlaW5nIGV4cGVjdGVkLiAgSWYgZW5jcnlwdGlvbiBpcyBub3QgYmVpbmcKKwkJCSAqIHVzZWQsIGRyb3BfdW5lbmNyeXB0ZWQgaXMgc2V0IHRvIGZhbHNlLCBlbHNlIHRydWUgLS0gd2UKKwkJCSAqIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIENBUF9QUklWQUNZX09OIGJpdCBzaG91bGQKKwkJCSAqIGJlIHNldC4KKwkJCSAqLworCQkJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJCQkJLmZsYWdzID0gU0VDX0VOQUJMRUQsCisJCQkJLmVuYWJsZWQgPSBwYXJhbS0+dmFsdWUsCisJCQl9OworCQkJcHJpdi0+aWVlZS0+ZHJvcF91bmVuY3J5cHRlZCA9IHBhcmFtLT52YWx1ZTsKKwkJCS8qIFdlIG9ubHkgY2hhbmdlIFNFQ19MRVZFTCBmb3Igb3BlbiBtb2RlLiBPdGhlcnMKKwkJCSAqIGFyZSBzZXQgYnkgaXB3X3dwYV9zZXRfZW5jcnlwdGlvbi4KKwkJCSAqLworCQkJaWYgKCFwYXJhbS0+dmFsdWUpIHsKKwkJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOworCQkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8wOworCQkJfSBlbHNlIHsKKwkJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOworCQkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8xOworCQkJfQorCQkJaWYgKHByaXYtPmllZWUtPnNldF9zZWN1cml0eSkKKwkJCQlwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkocHJpdi0+aWVlZS0+ZGV2LCAmc2VjKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXJldCA9IGlwd193cGFfc2V0X2F1dGhfYWxncyhwcml2LCBwYXJhbS0+dmFsdWUpOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJcmV0ID0gaXB3X3dwYV9lbmFibGUocHJpdiwgcGFyYW0tPnZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJCWllZWUtPmllZWU4MDJfMXggPSBwYXJhbS0+dmFsdWU7CisJCWJyZWFrOworCisJCS8vY2FzZSBJV19BVVRIX1JPQU1JTkdfQ09OVFJPTDoKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlpZWVlLT5wcml2YWN5X2ludm9rZWQgPSBwYXJhbS0+dmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBTSU9DR0lXQVVUSCAqLworc3RhdGljIGludCBpcHdfd3hfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJLyoKKwkJICogd3BhX3N1cHBsaWNhbnQgd2lsbCBjb250cm9sIHRoZXNlIGludGVybmFsbHkKKwkJICovCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJY3J5cHQgPSBwcml2LT5pZWVlLT5jcnlwdFtwcml2LT5pZWVlLT50eF9rZXlpZHhdOworCQlpZiAoIWNyeXB0IHx8ICFjcnlwdC0+b3BzLT5nZXRfZmxhZ3MpCisJCQlicmVhazsKKworCQlwYXJhbS0+dmFsdWUgPSAoY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKGNyeXB0LT5wcml2KSAmCisJCQkJSUVFRTgwMjExX0NSWVBUT19US0lQX0NPVU5URVJNRUFTVVJFUykgPyAxIDogMDsKKworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorCQlwYXJhbS0+dmFsdWUgPSBpZWVlLT5kcm9wX3VuZW5jcnlwdGVkOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJcGFyYW0tPnZhbHVlID0gaWVlZS0+c2VjLmF1dGhfbW9kZTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXBhcmFtLT52YWx1ZSA9IGllZWUtPndwYV9lbmFibGVkOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwkJcGFyYW0tPnZhbHVlID0gaWVlZS0+aWVlZTgwMl8xeDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfUk9BTUlOR19DT05UUk9MOgorCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJCXBhcmFtLT52YWx1ZSA9IGllZWUtPnByaXZhY3lfaW52b2tlZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisvKiBTSU9DU0lXRU5DT0RFRVhUICovCitzdGF0aWMgaW50IGlwd193eF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKworCWlmIChod2NyeXB0bykgeworCQlpZiAoZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB7CisJCQkvKiBJUFcgSFcgY2FuJ3QgYnVpbGQgVEtJUCBNSUMsCisJCQkgICBob3N0IGRlY3J5cHRpb24gc3RpbGwgbmVlZGVkICovCisJCQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkKKwkJCQlwcml2LT5pZWVlLT5ob3N0X21jX2RlY3J5cHQgPSAxOworCQkJZWxzZSB7CisJCQkJcHJpdi0+aWVlZS0+aG9zdF9lbmNyeXB0ID0gMDsKKwkJCQlwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHRfbXNkdSA9IDE7CisJCQkJcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0ID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCA9IDA7CisJCQlwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHRfbXNkdSA9IDA7CisJCQlwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQgPSAwOworCQkJcHJpdi0+aWVlZS0+aG9zdF9tY19kZWNyeXB0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiBpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7Cit9CisKKy8qIFNJT0NHSVdFTkNPREVFWFQgKi8KK3N0YXRpYyBpbnQgaXB3X3d4X2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKK30KKworLyogU0lPQ1NJV01MTUUgKi8KK3N0YXRpYyBpbnQgaXB3X3d4X3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOworCXUxNiByZWFzb247CisKKwlyZWFzb24gPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7CisKKwlzd2l0Y2ggKG1sbWUtPmNtZCkgeworCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJCS8vIHNpbGVudGx5IGlnbm9yZQorCQlicmVhazsKKworCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKKwkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0lQV19RT1MKKworLyogUW9TICovCisvKgorKiBnZXQgdGhlIG1vZHVsYXRpb24gdHlwZSBvZiB0aGUgY3VycmVudCBuZXR3b3JrIG9yCisqIHRoZSBjYXJkIGN1cnJlbnQgbW9kZQorKi8KK3U4IGlwd19xb3NfY3VycmVudF9tb2RlKHN0cnVjdCBpcHdfcHJpdiAqIHByaXYpCit7CisJdTggbW9kZSA9IDA7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCQltb2RlID0gcHJpdi0+YXNzb2NfbmV0d29yay0+bW9kZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCW1vZGUgPSBwcml2LT5pZWVlLT5tb2RlOworCX0KKwlJUFdfREVCVUdfUU9TKCJRb1MgbmV0d29yay9jYXJkIG1vZGUgJWQgXG4iLCBtb2RlKTsKKwlyZXR1cm4gbW9kZTsKK30KKworLyoKKyogSGFuZGxlIG1hbmFnZW1lbnQgZnJhbWUgYmVhY29uIGFuZCBwcm9iZSByZXNwb25zZQorKi8KK3N0YXRpYyBpbnQgaXB3X3Fvc19oYW5kbGVfcHJvYmVfcmVzcG9uc2Uoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCQkgaW50IGFjdGl2ZV9uZXR3b3JrLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQoreworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpOworCisJaWYgKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykKKwkJbmV0d29yay0+cW9zX2RhdGEuYWN0aXZlID0gbmV0d29yay0+cW9zX2RhdGEuc3VwcG9ydGVkOworCisJaWYgKG5ldHdvcmstPmZsYWdzICYgTkVUV09SS19IQVNfUU9TX01BU0spIHsKKwkJaWYgKGFjdGl2ZV9uZXR3b3JrICYmCisJCSAgICAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUykpCisJCQluZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSBuZXR3b3JrLT5xb3NfZGF0YS5zdXBwb3J0ZWQ7CisKKwkJaWYgKChuZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPT0gMSkgJiYgKGFjdGl2ZV9uZXR3b3JrID09IDEpICYmCisJCSAgICAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUykgJiYKKwkJICAgIChuZXR3b3JrLT5xb3NfZGF0YS5vbGRfcGFyYW1fY291bnQgIT0KKwkJICAgICBuZXR3b3JrLT5xb3NfZGF0YS5wYXJhbV9jb3VudCkpIHsKKwkJCW5ldHdvcmstPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudCA9CisJCQkgICAgbmV0d29yay0+cW9zX2RhdGEucGFyYW1fY291bnQ7CisJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5xb3NfYWN0aXZhdGUpOworCQkJSVBXX0RFQlVHX1FPUygiUW9TIHBhcmFtZXRlcnMgY2hhbmdlIGNhbGwgIgorCQkJCSAgICAgICJxb3NfYWN0aXZhdGVcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKChwcml2LT5pZWVlLT5tb2RlID09IElFRUVfQikgfHwgKG5ldHdvcmstPm1vZGUgPT0gSUVFRV9CKSkKKwkJCW1lbWNweSgmbmV0d29yay0+cW9zX2RhdGEucGFyYW1ldGVycywKKwkJCSAgICAgICAmZGVmX3BhcmFtZXRlcnNfQ0NLLCBzaXplKTsKKwkJZWxzZQorCQkJbWVtY3B5KCZuZXR3b3JrLT5xb3NfZGF0YS5wYXJhbWV0ZXJzLAorCQkJICAgICAgICZkZWZfcGFyYW1ldGVyc19PRkRNLCBzaXplKTsKKworCQlpZiAoKG5ldHdvcmstPnFvc19kYXRhLmFjdGl2ZSA9PSAxKSAmJiAoYWN0aXZlX25ldHdvcmsgPT0gMSkpIHsKKwkJCUlQV19ERUJVR19RT1MoIlFvUyB3YXMgZGlzYWJsZWQgY2FsbCBxb3NfYWN0aXZhdGUgXG4iKTsKKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnFvc19hY3RpdmF0ZSk7CisJCX0KKworCQluZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSAwOworCQluZXR3b3JrLT5xb3NfZGF0YS5zdXBwb3J0ZWQgPSAwOworCX0KKwlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgorCSAgICAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAoYWN0aXZlX25ldHdvcmsgPT0gMCkpIHsKKwkJaWYgKG1lbWNtcChuZXR3b3JrLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkKKwkJCWlmICgobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSAmJgorCQkJICAgICEobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0VNUFRZX0VTU0lEKSkKKwkJCQlpZiAoKG5ldHdvcmstPnNzaWRfbGVuID09CisJCQkJICAgICBwcml2LT5hc3NvY19uZXR3b3JrLT5zc2lkX2xlbikgJiYKKwkJCQkgICAgIW1lbWNtcChuZXR3b3JrLT5zc2lkLAorCQkJCQkgICAgcHJpdi0+YXNzb2NfbmV0d29yay0+c3NpZCwKKwkJCQkJICAgIG5ldHdvcmstPnNzaWRfbGVuKSkgeworCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5tZXJnZV9uZXR3b3Jrcyk7CisJCQkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorKiBUaGlzIGZ1bmN0aW9uIHNldCB1cCB0aGUgZmlybXdhcmUgdG8gc3VwcG9ydCBRb1MuIEl0IHNlbmRzCisqIElQV19DTURfUU9TX1BBUkFNRVRFUlMgYW5kIElQV19DTURfV01FX0lORk8KKyovCitzdGF0aWMgaW50IGlwd19xb3NfYWN0aXZhdGUoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgKnFvc19uZXR3b3JrX2RhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHFvc19wYXJhbWV0ZXJzW1FPU19RT1NfU0VUU107CisJc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqYWN0aXZlX29uZSA9IE5VTEw7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyk7CisJdTMyIGJ1cnN0X2R1cmF0aW9uOworCWludCBpOworCXU4IHR5cGU7CisKKwl0eXBlID0gaXB3X3Fvc19jdXJyZW50X21vZGUocHJpdik7CisKKwlhY3RpdmVfb25lID0gJihxb3NfcGFyYW1ldGVyc1tRT1NfUEFSQU1fU0VUX0RFRl9DQ0tdKTsKKwltZW1jcHkoYWN0aXZlX29uZSwgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtX0NDSywgc2l6ZSk7CisJYWN0aXZlX29uZSA9ICYocW9zX3BhcmFtZXRlcnNbUU9TX1BBUkFNX1NFVF9ERUZfT0ZETV0pOworCW1lbWNweShhY3RpdmVfb25lLCBwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fT0ZETSwgc2l6ZSk7CisKKwlpZiAocW9zX25ldHdvcmtfZGF0YSA9PSBOVUxMKSB7CisJCWlmICh0eXBlID09IElFRUVfQikgeworCQkJSVBXX0RFQlVHX1FPUygiUW9TIGFjdGl2YXRlIG5ldHdvcmsgbW9kZSAlZFxuIiwgdHlwZSk7CisJCQlhY3RpdmVfb25lID0gJmRlZl9wYXJhbWV0ZXJzX0NDSzsKKwkJfSBlbHNlCisJCQlhY3RpdmVfb25lID0gJmRlZl9wYXJhbWV0ZXJzX09GRE07CisKKwkJbWVtY3B5KCZxb3NfcGFyYW1ldGVyc1tRT1NfUEFSQU1fU0VUX0FDVElWRV0sIGFjdGl2ZV9vbmUsIHNpemUpOworCQlidXJzdF9kdXJhdGlvbiA9IGlwd19xb3NfZ2V0X2J1cnN0X2R1cmF0aW9uKHByaXYpOworCQlmb3IgKGkgPSAwOyBpIDwgUU9TX1FVRVVFX05VTTsgaSsrKQorCQkJcW9zX3BhcmFtZXRlcnNbUU9TX1BBUkFNX1NFVF9BQ1RJVkVdLnR4X29wX2xpbWl0W2ldID0KKwkJCSAgICAodTE2KSBidXJzdF9kdXJhdGlvbjsKKwl9IGVsc2UgaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQlpZiAodHlwZSA9PSBJRUVFX0IpIHsKKwkJCUlQV19ERUJVR19RT1MoIlFvUyBhY3RpdmF0ZSBJQlNTIG5ld29yayBtb2RlICVkXG4iLAorCQkJCSAgICAgIHR5cGUpOworCQkJaWYgKHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUgPT0gMCkKKwkJCQlhY3RpdmVfb25lID0gJmRlZl9wYXJhbWV0ZXJzX0NDSzsKKwkJCWVsc2UKKwkJCQlhY3RpdmVfb25lID0gcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtX0NDSzsKKwkJfSBlbHNlIHsKKwkJCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlID09IDApCisJCQkJYWN0aXZlX29uZSA9ICZkZWZfcGFyYW1ldGVyc19PRkRNOworCQkJZWxzZQorCQkJCWFjdGl2ZV9vbmUgPSBwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fT0ZETTsKKwkJfQorCQltZW1jcHkoJnFvc19wYXJhbWV0ZXJzW1FPU19QQVJBTV9TRVRfQUNUSVZFXSwgYWN0aXZlX29uZSwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IGFjdGl2ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCQlhY3RpdmVfb25lID0gJihxb3NfbmV0d29ya19kYXRhLT5wYXJhbWV0ZXJzKTsKKwkJcW9zX25ldHdvcmtfZGF0YS0+b2xkX3BhcmFtX2NvdW50ID0KKwkJICAgIHFvc19uZXR3b3JrX2RhdGEtPnBhcmFtX2NvdW50OworCQltZW1jcHkoJnFvc19wYXJhbWV0ZXJzW1FPU19QQVJBTV9TRVRfQUNUSVZFXSwgYWN0aXZlX29uZSwgc2l6ZSk7CisJCWFjdGl2ZSA9IHFvc19uZXR3b3JrX2RhdGEtPnN1cHBvcnRlZDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCisJCWlmIChhY3RpdmUgPT0gMCkgeworCQkJYnVyc3RfZHVyYXRpb24gPSBpcHdfcW9zX2dldF9idXJzdF9kdXJhdGlvbihwcml2KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBRT1NfUVVFVUVfTlVNOyBpKyspCisJCQkJcW9zX3BhcmFtZXRlcnNbUU9TX1BBUkFNX1NFVF9BQ1RJVkVdLgorCQkJCSAgICB0eF9vcF9saW1pdFtpXSA9ICh1MTYpIGJ1cnN0X2R1cmF0aW9uOworCQl9CisJfQorCisJSVBXX0RFQlVHX1FPUygiUW9TIHNlbmRpbmcgSVBXX0NNRF9RT1NfUEFSQU1FVEVSU1xuIik7CisJZXJyID0gaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHByaXYsCisJCQkJCSAgKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgKikKKwkJCQkJICAmKHFvc19wYXJhbWV0ZXJzWzBdKSk7CisJaWYgKGVycikKKwkJSVBXX0RFQlVHX1FPUygiUW9TIElQV19DTURfUU9TX1BBUkFNRVRFUlMgZmFpbGVkXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisqIHNlbmQgSVBXX0NNRF9XTUVfSU5GTyB0byB0aGUgZmlybXdhcmUKKyovCitzdGF0aWMgaW50IGlwd19xb3Nfc2V0X2luZm9fZWxlbWVudChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCBxb3NfaW5mbzsKKworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXFvc19pbmZvLmVsZW1lbnRJRCA9IFFPU19FTEVNRU5UX0lEOworCXFvc19pbmZvLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50KSAtIDI7CisKKwlxb3NfaW5mby52ZXJzaW9uID0gUU9TX1ZFUlNJT05fMTsKKwlxb3NfaW5mby5hY19pbmZvID0gMDsKKworCW1lbWNweShxb3NfaW5mby5xdWksIHFvc19vdWksIFFPU19PVUlfTEVOKTsKKwlxb3NfaW5mby5xdWlfdHlwZSA9IFFPU19PVUlfVFlQRTsKKwlxb3NfaW5mby5xdWlfc3VidHlwZSA9IFFPU19PVUlfSU5GT19TVUJfVFlQRTsKKworCXJldCA9IGlwd19zZW5kX3Fvc19pbmZvX2NvbW1hbmQocHJpdiwgJnFvc19pbmZvKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJSVBXX0RFQlVHX1FPUygiUW9TIGVycm9yIGNhbGxpbmcgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZFxuIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisqIFNldCB0aGUgUW9TIHBhcmFtZXRlciB3aXRoIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IHN0cnVjdHVyZQorKi8KK3N0YXRpYyBpbnQgaXB3X3Fvc19hc3NvY2lhdGlvbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgKnFvc19kYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIGlic3NfZGF0YSA9IHsKKwkJLnN1cHBvcnRlZCA9IDEsCisJCS5hY3RpdmUgPSAxLAorCX07CisKKwlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CisJCWlmICghKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCisJCQlCVUcoKTsKKworCQlxb3NfZGF0YSA9ICZpYnNzX2RhdGE7CisJCWJyZWFrOworCisJY2FzZSBJV19NT0RFX0lORlJBOgorCQlxb3NfZGF0YSA9ICZuZXR3b3JrLT5xb3NfZGF0YTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gaXB3X3Fvc19hY3RpdmF0ZShwcml2LCBxb3NfZGF0YSk7CisJaWYgKGVycikgeworCQlwcml2LT5hc3NvY19yZXF1ZXN0LnBvbGljeV9zdXBwb3J0ICY9IH5IQ19RT1NfU1VQUE9SVF9BU1NPQzsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2VuYWJsZSAmJiBxb3NfZGF0YS0+c3VwcG9ydGVkKSB7CisJCUlQV19ERUJVR19RT1MoIlFvUyB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoaXMgYXNzb2NpYXRpb25cbiIpOworCQlwcml2LT5hc3NvY19yZXF1ZXN0LnBvbGljeV9zdXBwb3J0IHw9IEhDX1FPU19TVVBQT1JUX0FTU09DOworCQlyZXR1cm4gaXB3X3Fvc19zZXRfaW5mb19lbGVtZW50KHByaXYpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorKiBoYW5kbGluZyB0aGUgYmVhY29uaW5nIHJlc3BvbmNlcy4gaWYgd2UgZ2V0IGRpZmZlcmVudCBRb1Mgc2V0dGluZworKiBvZiB0aGUgbmV0d29yayBmcm9tIHRoZSB0aGUgYXNzb2NpYXRlZCBzZXR0aW5nIGFkanVzdCB0aGUgUW9TCisqIHNldHRpbmcKKyovCitzdGF0aWMgaW50IGlwd19xb3NfYXNzb2NpYXRpb25fcmVzcChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpOworCWludCBzZXRfcW9zX3BhcmFtID0gMDsKKworCWlmICgocHJpdiA9PSBOVUxMKSB8fCAobmV0d29yayA9PSBOVUxMKSB8fAorCSAgICAocHJpdi0+YXNzb2NfbmV0d29yayA9PSBOVUxMKSkKKwkJcmV0dXJuIHJldDsKKworCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisJaWYgKG5ldHdvcmstPmZsYWdzICYgTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMpIHsKKwkJbWVtY3B5KCZwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YSwgJm5ldHdvcmstPnFvc19kYXRhLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEpKTsKKwkJcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEuYWN0aXZlID0gMTsKKwkJaWYgKChuZXR3b3JrLT5xb3NfZGF0YS5vbGRfcGFyYW1fY291bnQgIT0KKwkJICAgICBuZXR3b3JrLT5xb3NfZGF0YS5wYXJhbV9jb3VudCkpIHsKKwkJCXNldF9xb3NfcGFyYW0gPSAxOworCQkJbmV0d29yay0+cW9zX2RhdGEub2xkX3BhcmFtX2NvdW50ID0KKwkJCSAgICBuZXR3b3JrLT5xb3NfZGF0YS5wYXJhbV9jb3VudDsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKChuZXR3b3JrLT5tb2RlID09IElFRUVfQikgfHwgKHByaXYtPmllZWUtPm1vZGUgPT0gSUVFRV9CKSkKKwkJCW1lbWNweSgmcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEucGFyYW1ldGVycywKKwkJCSAgICAgICAmZGVmX3BhcmFtZXRlcnNfQ0NLLCBzaXplKTsKKwkJZWxzZQorCQkJbWVtY3B5KCZwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5wYXJhbWV0ZXJzLAorCQkJICAgICAgICZkZWZfcGFyYW1ldGVyc19PRkRNLCBzaXplKTsKKwkJcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEuYWN0aXZlID0gMDsKKwkJcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEuc3VwcG9ydGVkID0gMDsKKwkJc2V0X3Fvc19wYXJhbSA9IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHNldF9xb3NfcGFyYW0gPT0gMSkKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cW9zX2FjdGl2YXRlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgaXB3X3Fvc19nZXRfYnVyc3RfZHVyYXRpb24oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXUzMiByZXQgPSAwOworCisJaWYgKChwcml2ID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKworCWlmICghKHByaXYtPmllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSkKKwkJcmV0ID0gcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fQ0NLOworCWVsc2UKKwkJcmV0ID0gcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fT0ZETTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisqIEluaXRpYWxpemUgdGhlIHNldHRpbmcgb2YgUW9TIGdsb2JhbAorKi8KK3N0YXRpYyB2b2lkIGlwd19xb3NfaW5pdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCBlbmFibGUsCisJCQkgaW50IGJ1cnN0X2VuYWJsZSwgdTMyIGJ1cnN0X2R1cmF0aW9uX0NDSywKKwkJCSB1MzIgYnVyc3RfZHVyYXRpb25fT0ZETSkKK3sKKwlwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlID0gZW5hYmxlOworCisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpIHsKKwkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtX0NDSyA9ICZkZWZfcW9zX3BhcmFtZXRlcnNfQ0NLOworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fT0ZETSA9ICZkZWZfcW9zX3BhcmFtZXRlcnNfT0ZETTsKKwkJSVBXX0RFQlVHX1FPUygiUW9TIGlzIGVuYWJsZWRcbiIpOworCX0gZWxzZSB7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybV9DQ0sgPSAmZGVmX3BhcmFtZXRlcnNfQ0NLOworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fT0ZETSA9ICZkZWZfcGFyYW1ldGVyc19PRkRNOworCQlJUFdfREVCVUdfUU9TKCJRb1MgaXMgbm90IGVuYWJsZWRcbiIpOworCX0KKworCXByaXYtPnFvc19kYXRhLmJ1cnN0X2VuYWJsZSA9IGJ1cnN0X2VuYWJsZTsKKworCWlmIChidXJzdF9lbmFibGUpIHsKKwkJcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fQ0NLID0gYnVyc3RfZHVyYXRpb25fQ0NLOworCQlwcml2LT5xb3NfZGF0YS5idXJzdF9kdXJhdGlvbl9PRkRNID0gYnVyc3RfZHVyYXRpb25fT0ZETTsKKwl9IGVsc2UgeworCQlwcml2LT5xb3NfZGF0YS5idXJzdF9kdXJhdGlvbl9DQ0sgPSAwOworCQlwcml2LT5xb3NfZGF0YS5idXJzdF9kdXJhdGlvbl9PRkRNID0gMDsKKwl9Cit9CisKKy8qCisqIG1hcCB0aGUgcGFja2V0IHByaW9yaXR5IHRvIHRoZSByaWdodCBUWCBRdWV1ZQorKi8KK3N0YXRpYyBpbnQgaXB3X2dldF90eF9xdWV1ZV9udW1iZXIoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MTYgcHJpb3JpdHkpCit7CisJaWYgKHByaW9yaXR5ID4gNyB8fCAhcHJpdi0+cW9zX2RhdGEucW9zX2VuYWJsZSkKKwkJcHJpb3JpdHkgPSAwOworCisJcmV0dXJuIGZyb21fcHJpb3JpdHlfdG9fdHhfcXVldWVbcHJpb3JpdHldIC0gMTsKK30KKworLyoKKyogYWRkIFFvUyBwYXJhbWV0ZXIgdG8gdGhlIFRYIGNvbW1hbmQKKyovCitzdGF0aWMgaW50IGlwd19xb3Nfc2V0X3R4X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCQl1MTYgcHJpb3JpdHksCisJCQkJCXN0cnVjdCB0ZmRfZGF0YSAqdGZkLCB1OCB1bmljYXN0KQoreworCWludCByZXQgPSAwOworCWludCB0eF9xdWV1ZV9pZCA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSAqcW9zX2RhdGEgPSBOVUxMOworCWludCBhY3RpdmUsIHN1cHBvcnRlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQorCQlyZXR1cm4gMDsKKworCXFvc19kYXRhID0gJnByaXYtPmFzc29jX25ldHdvcmstPnFvc19kYXRhOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKKwkJaWYgKHVuaWNhc3QgPT0gMCkKKwkJCXFvc19kYXRhLT5hY3RpdmUgPSAwOworCQllbHNlCisJCQlxb3NfZGF0YS0+YWN0aXZlID0gcW9zX2RhdGEtPnN1cHBvcnRlZDsKKwl9CisKKwlhY3RpdmUgPSBxb3NfZGF0YS0+YWN0aXZlOworCXN1cHBvcnRlZCA9IHFvc19kYXRhLT5zdXBwb3J0ZWQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisKKwlJUFdfREVCVUdfUU9TKCJRb1MgICVkIG5ldHdvcmsgaXMgUW9TIGFjdGl2ZSAlZCAgc3VwcG9ydGVkICVkICAiCisJCSAgICAgICJ1bmljYXN0ICVkXG4iLAorCQkgICAgICBwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlLCBhY3RpdmUsIHN1cHBvcnRlZCwgdW5pY2FzdCk7CisJaWYgKGFjdGl2ZSAmJiBwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlKSB7CisJCXJldCA9IGZyb21fcHJpb3JpdHlfdG9fdHhfcXVldWVbcHJpb3JpdHldOworCQl0eF9xdWV1ZV9pZCA9IHJldCAtIDE7CisJCUlQV19ERUJVR19RT1MoIlFvUyBwYWNrZXQgcHJpb3JpdHkgaXMgJWQgXG4iLCBwcmlvcml0eSk7CisJCWlmIChwcmlvcml0eSA8PSA3KSB7CisJCQl0ZmQtPnR4X2ZsYWdzX2V4dCB8PSBEQ1RfRkxBR19FWFRfUU9TX0VOQUJMRUQ7CisJCQl0ZmQtPnRmZC50ZmRfMjYubWNoZHIucW9zX2N0cmwgPSBwcmlvcml0eTsKKwkJCXRmZC0+dGZkLnRmZF8yNi5tY2hkci5mcmFtZV9jdGwgfD0KKwkJCSAgICBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEE7CisKKwkJCWlmIChwcml2LT5xb3NfZGF0YS5xb3Nfbm9fYWNrX21hc2sgJgorCQkJICAgICgxVUwgPDwgdHhfcXVldWVfaWQpKSB7CisJCQkJdGZkLT50eF9mbGFncyAmPSB+RENUX0ZMQUdfQUNLX1JFUUQ7CisJCQkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLnFvc19jdHJsIHw9CisJCQkJICAgIENUUkxfUU9TX05PX0FDSzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisqIGJhY2tncm91bmQgc3VwcG9ydCB0byBydW4gUW9TIGFjdGl2YXRlIGZ1bmN0aW9uYWxpdHkKKyovCitzdGF0aWMgdm9pZCBpcHdfYmdfcW9zX2FjdGl2YXRlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybjsKKworCWRvd24oJnByaXYtPnNlbSk7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCisJCWlwd19xb3NfYWN0aXZhdGUocHJpdiwgJihwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YSkpOworCisJdXAoJnByaXYtPnNlbSk7Cit9CisKK3N0YXRpYyBpbnQgaXB3X2hhbmRsZV9wcm9iZV9yZXNwb25zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqcmVzcCwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWludCBhY3RpdmVfbmV0d29yayA9ICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCisJCQkgICAgICAobmV0d29yayA9PSBwcml2LT5hc3NvY19uZXR3b3JrKSk7CisKKwlpcHdfcW9zX2hhbmRsZV9wcm9iZV9yZXNwb25zZShwcml2LCBhY3RpdmVfbmV0d29yaywgbmV0d29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfaGFuZGxlX2JlYWNvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqcmVzcCwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJaW50IGFjdGl2ZV9uZXR3b3JrID0gKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKKwkJCSAgICAgIChuZXR3b3JrID09IHByaXYtPmFzc29jX25ldHdvcmspKTsKKworCWlwd19xb3NfaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKHByaXYsIGFjdGl2ZV9uZXR3b3JrLCBuZXR3b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwd19oYW5kbGVfYXNzb2NfcmVzcG9uc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKnJlc3AsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpcHdfcW9zX2Fzc29jaWF0aW9uX3Jlc3AocHJpdiwgbmV0d29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycworCQkJCSAgICAgICAqcW9zX3BhcmFtKQoreworCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7CisJCS5jbWQgPSBJUFdfQ01EX1FPU19QQVJBTUVURVJTLAorCQkubGVuID0gKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzKSAqIDMpCisJfTsKKworCW1lbWNweShjbWQucGFyYW0sIHFvc19wYXJhbSwgc2l6ZW9mKCpxb3NfcGFyYW0pICogMyk7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworc3RhdGljIGludCBpcHdfc2VuZF9xb3NfaW5mb19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudAorCQkJCSAgICAgKnFvc19wYXJhbSkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWQgY21kID0geworCQkuY21kID0gSVBXX0NNRF9XTUVfSU5GTywKKwkJLmxlbiA9IHNpemVvZigqcW9zX3BhcmFtKQorCX07CisKKwltZW1jcHkoY21kLnBhcmFtLCBxb3NfcGFyYW0sIHNpemVvZigqcW9zX3BhcmFtKSk7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisKIHN0YXRpYyBpbnQgaXB3X2Fzc29jaWF0ZV9uZXR3b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLAogCQkJCSBzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyAqcmF0ZXMsIGludCByb2FtaW5nKQpAQCAtNDYxNiw3ICs3MDQyLDcgQEAKIAlpbnQgZXJyOwogCiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19GSVhFRF9SQVRFKQotCQlpcHdfc2V0X2ZpeGVkX3JhdGUocHJpdiwgbmV0d29yayk7CisJCWlwd19zZXRfZml4ZWRfcmF0ZShwcml2LCBuZXR3b3JrLT5tb2RlKTsKIAogCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpKSB7CiAJCXByaXYtPmVzc2lkX2xlbiA9IG1pbihuZXR3b3JrLT5zc2lkX2xlbiwKQEAgLTQ2MzEsMTQgKzcwNTcsMjIgQEAKIAlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTikgJiYKIAkgICAgKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfU0hBUkVEX0tFWSkpIHsKIAkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hdXRoX3R5cGUgPSBBVVRIX1NIQVJFRF9LRVk7Ci0JCXByaXYtPmFzc29jX3JlcXVlc3QuYXV0aF9rZXkgPSBwcml2LT5zZWMuYWN0aXZlX2tleTsKKwkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hdXRoX2tleSA9IHByaXYtPmllZWUtPnNlYy5hY3RpdmVfa2V5OworCisJCWlmICgocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKSAmJgorCQkgICAgKHByaXYtPmllZWUtPnNlYy5sZXZlbCA9PSBTRUNfTEVWRUxfMSkgJiYKKwkJICAgICEocHJpdi0+aWVlZS0+aG9zdF9lbmNyeXB0IHx8IHByaXYtPmllZWUtPmhvc3RfZGVjcnlwdCkpCisJCQlpcHdfc2VuZF93ZXBfa2V5cyhwcml2LCBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9XRVApOwogCX0gZWxzZSB7CiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXV0aF90eXBlID0gQVVUSF9PUEVOOwogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF1dGhfa2V5ID0gMDsKIAl9CiAKLQlpZiAocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKQotCQlpcHdfc2VuZF93ZXBfa2V5cyhwcml2KTsKKwlpZiAocHJpdi0+aWVlZS0+d3BhX2llX2xlbikgeworCQlwcml2LT5hc3NvY19yZXF1ZXN0LnBvbGljeV9zdXBwb3J0ID0gMHgwMjsJLyogUlNOIGFjdGl2ZSAqLworCQlpcHdfc2V0X3Jzbl9jYXBhKHByaXYsIHByaXYtPmllZWUtPndwYV9pZSwKKwkJCQkgcHJpdi0+aWVlZS0+d3BhX2llX2xlbik7CisJfQogCiAJLyoKIAkgKiBJdCBpcyB2YWxpZCBmb3Igb3VyIGllZWUgZGV2aWNlIHRvIHN1cHBvcnQgbXVsdGlwbGUgbW9kZXMsIGJ1dApAQCAtNDY1MiwyMCArNzA4Niw0MSBAQAogCWVsc2UgaWYgKG5ldHdvcmstPm1vZGUgJiBwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9CKQogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmllZWVfbW9kZSA9IElQV19CX01PREU7CiAKKwlwcml2LT5hc3NvY19yZXF1ZXN0LmNhcGFiaWxpdHkgPSBuZXR3b3JrLT5jYXBhYmlsaXR5OworCWlmICgobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKKwkgICAgJiYgIShwcml2LT5jb25maWcgJiBDRkdfUFJFQU1CTEVfTE9ORykpIHsKKwkJcHJpdi0+YXNzb2NfcmVxdWVzdC5wcmVhbWJsZV9sZW5ndGggPSBEQ1RfRkxBR19TSE9SVF9QUkVBTUJMRTsKKwl9IGVsc2UgeworCQlwcml2LT5hc3NvY19yZXF1ZXN0LnByZWFtYmxlX2xlbmd0aCA9IERDVF9GTEFHX0xPTkdfUFJFQU1CTEU7CisKKwkJLyogQ2xlYXIgdGhlIHNob3J0IHByZWFtYmxlIGlmIHdlIHdvbid0IGJlIHN1cHBvcnRpbmcgaXQgKi8KKwkJcHJpdi0+YXNzb2NfcmVxdWVzdC5jYXBhYmlsaXR5ICY9CisJCSAgICB+V0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOworCX0KKworCS8qIENsZWFyIGNhcGFiaWxpdHkgYml0cyB0aGF0IGFyZW4ndCB1c2VkIGluIEFkIEhvYyAqLworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCisJCXByaXYtPmFzc29jX3JlcXVlc3QuY2FwYWJpbGl0eSAmPQorCQkgICAgfldMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUU7CisKIAlJUFdfREVCVUdfQVNTT0MoIiVzc3NvY2F0aW9uIGF0dGVtcHQ6ICclcycsIGNoYW5uZWwgJWQsICIKLQkJCSI4MDIuMTElYyBbJWRdLCBlbmM9JXMlcyVzJWMlY1xuIiwKKwkJCSI4MDIuMTElYyBbJWRdLCAlc1s6JXNdLCBlbmM9JXMlcyVzJWMlY1xuIiwKIAkJCXJvYW1pbmcgPyAiUmVhIiA6ICJBIiwKIAkJCWVzY2FwZV9lc3NpZChwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKSwKIAkJCW5ldHdvcmstPmNoYW5uZWwsCiAJCQlpcHdfbW9kZXNbcHJpdi0+YXNzb2NfcmVxdWVzdC5pZWVlX21vZGVdLAogCQkJcmF0ZXMtPm51bV9yYXRlcywKKwkJCShwcml2LT5hc3NvY19yZXF1ZXN0LnByZWFtYmxlX2xlbmd0aCA9PQorCQkJIERDVF9GTEFHX0xPTkdfUFJFQU1CTEUpID8gImxvbmciIDogInNob3J0IiwKKwkJCW5ldHdvcmstPmNhcGFiaWxpdHkgJgorCQkJV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFID8gInNob3J0IiA6ICJsb25nIiwKIAkJCXByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTiA/ICJvbiAiIDogIm9mZiIsCiAJCQlwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04gPwogCQkJKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfU0hBUkVEX0tFWSA/ICIoc2hhcmVkKSIgOgogCQkJICIob3BlbikiKSA6ICIiLAogCQkJcHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OID8gIiBrZXk9IiA6ICIiLAogCQkJcHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OID8KLQkJCScxJyArIHByaXYtPnNlYy5hY3RpdmVfa2V5IDogJy4nLAorCQkJJzEnICsgcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXkgOiAnLicsCiAJCQlwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04gPyAnLicgOiAnICcpOwogCiAJcHJpdi0+YXNzb2NfcmVxdWVzdC5iZWFjb25faW50ZXJ2YWwgPSBuZXR3b3JrLT5iZWFjb25faW50ZXJ2YWw7CkBAIC00NjgzLDE3ICs3MTM4LDE2IEBACiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXNzb2NfdHNmX2xzdyA9IG5ldHdvcmstPnRpbWVfc3RhbXBbMF07CiAJfQogCi0JbWVtY3B5KCZwcml2LT5hc3NvY19yZXF1ZXN0LmJzc2lkLCBuZXR3b3JrLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShwcml2LT5hc3NvY19yZXF1ZXN0LmJzc2lkLCBuZXR3b3JrLT5ic3NpZCwgRVRIX0FMRU4pOwogCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewogCQltZW1zZXQoJnByaXYtPmFzc29jX3JlcXVlc3QuZGVzdCwgMHhGRiwgRVRIX0FMRU4pOwogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF0aW1fd2luZG93ID0gbmV0d29yay0+YXRpbV93aW5kb3c7CiAJfSBlbHNlIHsKLQkJbWVtY3B5KCZwcml2LT5hc3NvY19yZXF1ZXN0LmRlc3QsIG5ldHdvcmstPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShwcml2LT5hc3NvY19yZXF1ZXN0LmRlc3QsIG5ldHdvcmstPmJzc2lkLCBFVEhfQUxFTik7CiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXRpbV93aW5kb3cgPSAwOwogCX0KIAotCXByaXYtPmFzc29jX3JlcXVlc3QuY2FwYWJpbGl0eSA9IG5ldHdvcmstPmNhcGFiaWxpdHk7CiAJcHJpdi0+YXNzb2NfcmVxdWVzdC5saXN0ZW5faW50ZXJ2YWwgPSBuZXR3b3JrLT5saXN0ZW5faW50ZXJ2YWw7CiAKIAllcnIgPSBpcHdfc2VuZF9zc2lkKHByaXYsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOwpAQCAtNDcxMCw2ICs3MTY0LDEyIEBACiAJCXByaXYtPnN5c19jb25maWcuZG90MTFnX2F1dG9fZGV0ZWN0aW9uID0gMTsKIAllbHNlCiAJCXByaXYtPnN5c19jb25maWcuZG90MTFnX2F1dG9fZGV0ZWN0aW9uID0gMDsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCisJCXByaXYtPnN5c19jb25maWcuYW5zd2VyX2Jyb2FkY2FzdF9zc2lkX3Byb2JlID0gMTsKKwllbHNlCisJCXByaXYtPnN5c19jb25maWcuYW5zd2VyX2Jyb2FkY2FzdF9zc2lkX3Byb2JlID0gMDsKKwogCWVyciA9IGlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdiwgJnByaXYtPnN5c19jb25maWcpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0hDKCJBdHRlbXB0IHRvIHNlbmQgc3lzIGNvbmZpZyBjb21tYW5kIGZhaWxlZC5cbiIpOwpAQCAtNDcxNyw3ICs3MTc3LDcgQEAKIAl9CiAKIAlJUFdfREVCVUdfQVNTT0MoIkFzc29jaWF0aW9uIHNlbnNpdGl2aXR5OiAlZFxuIiwgbmV0d29yay0+c3RhdHMucnNzaSk7Ci0JZXJyID0gaXB3X3NldF9zZW5zaXRpdml0eShwcml2LCBuZXR3b3JrLT5zdGF0cy5yc3NpKTsKKwllcnIgPSBpcHdfc2V0X3NlbnNpdGl2aXR5KHByaXYsIG5ldHdvcmstPnN0YXRzLnJzc2kgKyBJUFdfUlNTSV9UT19EQk0pOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0hDKCJBdHRlbXB0IHRvIHNlbmQgYXNzb2NpYXRlIGNvbW1hbmQgZmFpbGVkLlxuIik7CiAJCXJldHVybiBlcnI7CkBAIC00NzM1LDYgKzcxOTUsMTAgQEAKIAogCXByaXYtPmFzc29jX25ldHdvcmsgPSBuZXR3b3JrOwogCisjaWZkZWYgQ09ORklHX0lQV19RT1MKKwlpcHdfcW9zX2Fzc29jaWF0aW9uKHByaXYsIG5ldHdvcmspOworI2VuZGlmCisKIAllcnIgPSBpcHdfc2VuZF9hc3NvY2lhdGUocHJpdiwgJnByaXYtPmFzc29jX3JlcXVlc3QpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0hDKCJBdHRlbXB0IHRvIHNlbmQgYXNzb2NpYXRlIGNvbW1hbmQgZmFpbGVkLlxuIik7CkBAIC00NzgyLDEyICs3MjQ2LDE1IEBACiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSB7CiAJCS8qIEZpcnN0IHBhc3MgdGhyb3VnaCBST0FNIHByb2Nlc3MgLS0gbG9vayBmb3IgYSBiZXR0ZXIKIAkJICogbmV0d29yayAqLworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1OCByc3NpID0gcHJpdi0+YXNzb2NfbmV0d29yay0+c3RhdHMucnNzaTsKIAkJcHJpdi0+YXNzb2NfbmV0d29yay0+c3RhdHMucnNzaSA9IC0xMjg7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0d29yaywgJnByaXYtPmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewogCQkJaWYgKG5ldHdvcmsgIT0gcHJpdi0+YXNzb2NfbmV0d29yaykKIAkJCQlpcHdfYmVzdF9uZXR3b3JrKHByaXYsICZtYXRjaCwgbmV0d29yaywgMSk7CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCQlwcml2LT5hc3NvY19uZXR3b3JrLT5zdGF0cy5yc3NpID0gcnNzaTsKIAogCQlpZiAobWF0Y2gubmV0d29yayA9PSBwcml2LT5hc3NvY19uZXR3b3JrKSB7CkBAIC00ODEwLDcgKzcyNzcsMTUgQEAKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19ST0FNSU5HOwogfQogCi1zdGF0aWMgdm9pZCBpcHdfYXNzb2NpYXRlKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBpcHdfYmdfcm9hbSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfcm9hbShkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKworc3RhdGljIGludCBpcHdfYXNzb2NpYXRlKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKIApAQCAtNDgyMCwxNCArNzI5NSw0MSBAQAogCX07CiAJc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgKnJhdGVzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQlJUFdfREVCVUdfQVNTT0MoIk5vdCBhdHRlbXB0aW5nIGFzc29jaWF0aW9uIChtb25pdG9yIG1vZGUpXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19BU1NPQ0lBVElORykpIHsKKwkJSVBXX0RFQlVHX0FTU09DKCJOb3QgYXR0ZW1wdGluZyBhc3NvY2lhdGlvbiAoYWxyZWFkeSBpbiAiCisJCQkJInByb2dyZXNzKVxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRElTQVNTT0NJQVRJTkcpIHsKKwkJSVBXX0RFQlVHX0FTU09DKCJOb3QgYXR0ZW1wdGluZyBhc3NvY2lhdGlvbiAoaW4gIgorCQkJCSJkaXNhc3NvY2lhdGluZylcbiAiKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hc3NvY2lhdGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWlwd19pc19pbml0KHByaXYpIHx8IChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpKSB7CisJCUlQV19ERUJVR19BU1NPQygiTm90IGF0dGVtcHRpbmcgYXNzb2NpYXRpb24gKHNjYW5uaW5nIG9yIG5vdCAiCisJCQkJImluaXRpYWxpemVkKVxuIik7CisJCXJldHVybiAwOworCX0KIAogCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19BU1NPQ0lBVEUpICYmCiAJICAgICEocHJpdi0+Y29uZmlnICYgKENGR19TVEFUSUNfRVNTSUQgfAogCQkJICAgICAgQ0ZHX1NUQVRJQ19DSEFOTkVMIHwgQ0ZHX1NUQVRJQ19CU1NJRCkpKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTm90IGF0dGVtcHRpbmcgYXNzb2NpYXRpb24gKGFzc29jaWF0ZT0wKVxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCisJLyogUHJvdGVjdCBvdXIgdXNlIG9mIHRoZSBuZXR3b3JrX2xpc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0d29yaywgJnByaXYtPmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkKIAkgICAgaXB3X2Jlc3RfbmV0d29yayhwcml2LCAmbWF0Y2gsIG5ldHdvcmssIDApOwogCkBAIC00ODM4LDYgKzczNDAsNyBAQAogCSAgICBwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MgJiYKIAkgICAgcHJpdi0+Y29uZmlnICYgQ0ZHX0FESE9DX0NSRUFURSAmJgogCSAgICBwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEICYmCisJICAgIHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQ0hBTk5FTCAmJgogCSAgICAhbGlzdF9lbXB0eSgmcHJpdi0+aWVlZS0+bmV0d29ya19mcmVlX2xpc3QpKSB7CiAJCWVsZW1lbnQgPSBwcml2LT5pZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0OwogCQluZXR3b3JrID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmssIGxpc3QpOwpAQCAtNDg0NiwyNSArNzM0OSw4MyBAQAogCQlsaXN0X2RlbChlbGVtZW50KTsKIAkJbGlzdF9hZGRfdGFpbCgmbmV0d29yay0+bGlzdCwgJnByaXYtPmllZWUtPm5ldHdvcmtfbGlzdCk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKIAogCS8qIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbGlzdCwgdGhlbiB3ZSBkb24ndCBoYXZlIGFueSB2YWxpZAogCSAqIG1hdGNoaW5nIEFQcyAqLwogCWlmICghbmV0d29yaykgewogCQlpcHdfZGVidWdfY29uZmlnKHByaXYpOwogCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4sCi0JCQkJICAgU0NBTl9JTlRFUlZBTCk7CisJCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykpIHsKKwkJCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19TUEVFRF9TQ0FOKSkKKwkJCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2NhbiwKKwkJCQkJCSAgIFNDQU5fSU5URVJWQUwpOworCQkJZWxzZQorCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwkJfQogCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaXB3X2Fzc29jaWF0ZV9uZXR3b3JrKHByaXYsIG5ldHdvcmssIHJhdGVzLCAwKTsKKworCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXB3X2hhbmRsZV9kYXRhX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJCSAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCitzdGF0aWMgdm9pZCBpcHdfYmdfYXNzb2NpYXRlKHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19hc3NvY2lhdGUoZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19yZWJ1aWxkX2RlY3J5cHRlZF9za2Ioc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1MTYgZmM7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKQorCQlyZXR1cm47CisKKwlmYyAmPSB+SUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOworCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCXN3aXRjaCAocHJpdi0+aWVlZS0+c2VjLmxldmVsKSB7CisJY2FzZSBTRUNfTEVWRUxfMzoKKwkJLyogUmVtb3ZlIENDTVAgSERSICovCisJCW1lbW1vdmUoc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiwKKwkJCXNrYi0+ZGF0YSArIElFRUU4MDIxMV8zQUREUl9MRU4gKyA4LAorCQkJc2tiLT5sZW4gLSBJRUVFODAyMTFfM0FERFJfTEVOIC0gOCk7CisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAxNik7CS8qIENDTVBfSERSX0xFTiArIENDTVBfTUlDX0xFTiAqLworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8yOgorCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8xOgorCQkvKiBSZW1vdmUgSVYgKi8KKwkJbWVtbW92ZShza2ItPmRhdGEgKyBJRUVFODAyMTFfM0FERFJfTEVOLAorCQkJc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiArIDQsCisJCQlza2ItPmxlbiAtIElFRUU4MDIxMV8zQUREUl9MRU4gLSA0KTsKKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDgpOwkvKiBJViArIElDViAqLworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8wOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIlVua25vdyBzZWN1cml0eSBsZXZlbCAlZFxuIiwKKwkJICAgICAgIHByaXYtPmllZWUtPnNlYy5sZXZlbCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9kYXRhX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAKIAkvKiBXZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIEhXLCBzbyBzdG9wIHRoZSB3YXRjaGRvZyAqLwpAQCAtNDg3Miw3ICs3NDMzLDcgQEAKIAogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlCiAJICogaW50ZXJmYWNlIGlzIG9wZW4gKi8KLQlpZiAodW5saWtlbHkoKHBrdC0+dS5mcmFtZS5sZW5ndGggKyBJUFdfUlhfRlJBTUVfU0laRSkgPgorCWlmICh1bmxpa2VseSgobGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkgKyBJUFdfUlhfRlJBTUVfU0laRSkgPgogCQkgICAgIHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7CiAJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CkBAIC00ODg5LDE0ICs3NDUwLDM1MSBAQAogCXNrYl9yZXNlcnZlKHJ4Yi0+c2tiLCBvZmZzZXRvZihzdHJ1Y3QgaXB3X3J4X3BhY2tldCwgdS5mcmFtZS5kYXRhKSk7CiAKIAkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIHNrYiB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgKi8KLQlza2JfcHV0KHJ4Yi0+c2tiLCBwa3QtPnUuZnJhbWUubGVuZ3RoKTsKKwlza2JfcHV0KHJ4Yi0+c2tiLCBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSk7CisKKwlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHJ4Yi0+c2tiLT5sZW4pOworCisJLyogSFcgZGVjcnlwdCB3aWxsIG5vdCBjbGVhciB0aGUgV0VQIGJpdCwgTUlDLCBQTiwgZXRjLiAqLworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXJ4Yi0+c2tiLT5kYXRhOworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUiAmJgorCSAgICAoKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CisJICAgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpID8KKwkgICAgICFwcml2LT5pZWVlLT5ob3N0X21jX2RlY3J5cHQgOiAhcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0KSkKKwkJaXB3X3JlYnVpbGRfZGVjcnlwdGVkX3NrYihwcml2LCByeGItPnNrYik7CisKKwlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCByeGItPnNrYiwgc3RhdHMpKQorCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwllbHNlIHsJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCisJCXJ4Yi0+c2tiID0gTlVMTDsKKwkJX19pcHdfbGVkX2FjdGl2aXR5X29uKHByaXYpOworCX0KK30KKworI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKK3N0YXRpYyB2b2lkIGlwd19oYW5kbGVfZGF0YV9wYWNrZXRfbW9uaXRvcihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGlwd19yeF9mcmFtZSAqZnJhbWUgPSAmcGt0LT51LmZyYW1lOworCisJLyogaW5pdGlhbCBwdWxsIG9mIHNvbWUgZGF0YSAqLworCXUxNiByZWNlaXZlZF9jaGFubmVsID0gZnJhbWUtPnJlY2VpdmVkX2NoYW5uZWw7CisJdTggYW50ZW5uYUFuZFBoeSA9IGZyYW1lLT5hbnRlbm5hQW5kUGh5OworCXM4IGFudHNpZ25hbCA9IGZyYW1lLT5yc3NpX2RibSAtIElQV19SU1NJX1RPX0RCTTsJLyogY2FsbCBpdCBzaWduZWQgYW55aG93ICovCisJdTE2IHBrdHJhdGUgPSBmcmFtZS0+cmF0ZTsKKworCS8qIE1hZ2ljIHN0cnVjdCB0aGF0IHNsb3RzIGludG8gdGhlIHJhZGlvdGFwIGhlYWRlciAtLSBubyByZWFzb24KKwkgKiB0byBidWlsZCB0aGlzIG1hbnVhbGx5IGVsZW1lbnQgYnkgZWxlbWVudCwgd2UgY2FuIHdyaXRlIGl0IG11Y2gKKwkgKiBtb3JlIGVmZmljaWVudGx5IHRoYW4gd2UgY2FuIHBhcnNlIGl0LiBPUkRFUiBNQVRURVJTIEhFUkUgKi8KKwlzdHJ1Y3QgaXB3X3J0X2hkciB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKKwkJdTggcnRfZmxhZ3M7CS8qIHJhZGlvdGFwIHBhY2tldCBmbGFncyAqLworCQl1OCBydF9yYXRlOwkvKiByYXRlIGluIDUwMGtiL3MgKi8KKwkJdTE2IHJ0X2NoYW5uZWw7CS8qIGNoYW5uZWwgaW4gbWh6ICovCisJCXUxNiBydF9jaGJpdG1hc2s7CS8qIGNoYW5uZWwgYml0ZmllbGQgKi8KKwkJczggcnRfZGJtc2lnbmFsOwkvKiBzaWduYWwgaW4gZGJNLCBrbHVnZWQgdG8gc2lnbmVkICovCisJCXU4IHJ0X2FudGVubmE7CS8qIGFudGVubmEgbnVtYmVyICovCisJfSAqaXB3X3J0OworCisJc2hvcnQgbGVuID0gbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCk7CisKKwkvKiBXZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIEhXLCBzbyBzdG9wIHRoZSB3YXRjaGRvZyAqLworCXByaXYtPm5ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlCisJICogaW50ZXJmYWNlIGlzIG9wZW4gKi8KKwlpZiAodW5saWtlbHkoKGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpICsgSVBXX1JYX0ZSQU1FX1NJWkUpID4KKwkJICAgICBza2JfdGFpbHJvb20ocnhiLT5za2IpKSkgeworCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOworCQlJUFdfREVCVUdfRFJPUCgiQ29ycnVwdGlvbiBkZXRlY3RlZCEgT2ggbm8hXG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpKSB7CisJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOworCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIExpYnBjYXAgMC45LjMrIGNhbiBoYW5kbGUgdmFyaWFibGUgbGVuZ3RoIHJhZGlvdGFwLCBzbyB3ZSdsbCB1c2UKKwkgKiB0aGF0IG5vdyAqLworCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CisJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCisJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOworCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgdG9vIGxhcmdlIHBhY2tldCBpbiBtb25pdG9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNvcHkgdGhlIGZyYW1lIGl0c2VsZiAqLworCW1lbW1vdmUocnhiLT5za2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpLAorCQlyeGItPnNrYi0+ZGF0YSArIElQV19SWF9GUkFNRV9TSVpFLCBsZW4pOworCisJLyogWmVybyB0aGUgcmFkaW90YXAgc3RhdGljIGJ1ZmZlciAgLi4uICBXZSBvbmx5IG5lZWQgdG8gemVybyB0aGUgYnl0ZXMgTk9UCisJICogcGFydCBvZiBvdXIgcmVhbCBoZWFkZXIsIHNhdmVzIGEgbGl0dGxlIHRpbWUuCisJICoKKwkgKiBObyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIHdlIGZpbGwgaW4gYWxsIG91ciBkYXRhLiAgUHVyZ2UgYmVmb3JlIG1lcmdpbmcKKwkgKiBwYXRjaCBvZmZpY2lhbGx5LgorCSAqIG1lbXNldChyeGItPnNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkciksIDAsCisJICogICAgICAgIElFRUU4MDIxMV9SQURJT1RBUF9IRFJMRU4gLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKTsKKwkgKi8KKworCWlwd19ydCA9IChzdHJ1Y3QgaXB3X3J0X2hkciAqKXJ4Yi0+c2tiLT5kYXRhOworCisJaXB3X3J0LT5ydF9oZHIuaXRfdmVyc2lvbiA9IFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OOworCWlwd19ydC0+cnRfaGRyLml0X3BhZCA9IDA7CS8qIGFsd2F5cyBnb29kIHRvIHplcm8gKi8KKwlpcHdfcnQtPnJ0X2hkci5pdF9sZW4gPSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpOwkvKiB0b3RhbCBoZWFkZXIrZGF0YSAqLworCisJLyogQmlnIGJpdGZpZWxkIG9mIGFsbCB0aGUgZmllbGRzIHdlIHByb3ZpZGUgaW4gcmFkaW90YXAgKi8KKwlpcHdfcnQtPnJ0X2hkci5pdF9wcmVzZW50ID0KKwkgICAgKCgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKKwkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpKTsKKworCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLworCWlwd19ydC0+cnRfZmxhZ3MgPSAwOworCisJLyogQ29udmVydCBzaWduYWwgdG8gREJNICovCisJaXB3X3J0LT5ydF9kYm1zaWduYWwgPSBhbnRzaWduYWw7CisKKwkvKiBDb252ZXJ0IHRoZSBjaGFubmVsIGRhdGEgYW5kIHNldCB0aGUgZmxhZ3MgKi8KKwlpcHdfcnQtPnJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihpZWVlODAyMTFjaGFuMm1oeihyZWNlaXZlZF9jaGFubmVsKSk7CisJaWYgKHJlY2VpdmVkX2NoYW5uZWwgPiAxNCkgewkvKiA4MDIuMTFhICovCisJCWlwd19ydC0+cnRfY2hiaXRtYXNrID0KKwkJICAgIGNwdV90b19sZTE2KChJRUVFODAyMTFfQ0hBTl9PRkRNIHwgSUVFRTgwMjExX0NIQU5fNUdIWikpOworCX0gZWxzZSBpZiAoYW50ZW5uYUFuZFBoeSAmIDMyKSB7CS8qIDgwMi4xMWIgKi8KKwkJaXB3X3J0LT5ydF9jaGJpdG1hc2sgPQorCQkgICAgY3B1X3RvX2xlMTYoKElFRUU4MDIxMV9DSEFOX0NDSyB8IElFRUU4MDIxMV9DSEFOXzJHSFopKTsKKwl9IGVsc2UgewkJLyogODAyLjExZyAqLworCQlpcHdfcnQtPnJ0X2NoYml0bWFzayA9CisJCSAgICAoSUVFRTgwMjExX0NIQU5fT0ZETSB8IElFRUU4MDIxMV9DSEFOXzJHSFopOworCX0KKworCS8qIHNldCB0aGUgcmF0ZSBpbiBtdWx0aXBsZXMgb2YgNTAway9zICovCisJc3dpdGNoIChwa3RyYXRlKSB7CisJY2FzZSBJUFdfVFhfUkFURV8xTUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDI7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfMk1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA0OworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzVNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMTA7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfNk1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAxMjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV85TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDE4OworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzExTUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDIyOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzEyTUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDI0OworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzE4TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDM2OworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzI0TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDQ4OworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzM2TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDcyOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzQ4TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDk2OworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzU0TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDEwODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogYW50ZW5uYSBudW1iZXIgKi8KKwlpcHdfcnQtPnJ0X2FudGVubmEgPSAoYW50ZW5uYUFuZFBoeSAmIDMpOwkvKiBJcyB0aGlzIHJpZ2h0PyAqLworCisJLyogc2V0IHRoZSBwcmVhbWJsZSBmbGFnIGlmIHdlIGhhdmUgaXQgKi8KKwlpZiAoKGFudGVubmFBbmRQaHkgJiA2NCkpCisJCWlwd19ydC0+cnRfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkU7CisKKwkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIHNrYiB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgKi8KKwlza2JfcHV0KHJ4Yi0+c2tiLCBsZW4gKyBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKTsKIAogCUlQV19ERUJVR19SWCgiUnggcGFja2V0IG9mICVkIGJ5dGVzLlxuIiwgcnhiLT5za2ItPmxlbik7CiAKIAlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCByeGItPnNrYiwgc3RhdHMpKQogCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQllbHNlCQkJLyogaWVlZTgwMjExX3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLworCWVsc2UgewkJCS8qIGllZWU4MDIxMV9yeCBzdWNjZWVkZWQsIHNvIGl0IG5vdyBvd25zIHRoZSBTS0IgKi8KIAkJcnhiLT5za2IgPSBOVUxMOworCQkvKiBubyBMRUQgZHVyaW5nIGNhcHR1cmUgKi8KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyKQoreworCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXR0ZWQgdG93YXJkCisJICogdGhpcyBuZXR3b3JrLCBkaXNjYXJkaW5nIHBhY2tldHMgY29taW5nIGZyb20gb3Vyc2VsdmVzICovCisJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0FESE9DOgkvKiBIZWFkZXI6IERlc3QuIHwgU291cmNlICAgIHwgQlNTSUQgKi8KKwkJLyogcGFja2V0cyBmcm9tIG91ciBhZGFwdGVyIGFyZSBkcm9wcGVkIChlY2hvKSAqLworCQlpZiAoIW1lbWNtcChoZWFkZXItPmFkZHIyLCBwcml2LT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCQkJcmV0dXJuIDA7CisKKwkJLyoge2Jyb2FkLG11bHRpfWNhc3QgcGFja2V0cyB0byBvdXIgQlNTSUQgZ28gdGhyb3VnaCAqLworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSkgfHwKKwkJICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEpKQorCQkJcmV0dXJuICFtZW1jbXAoaGVhZGVyLT5hZGRyMywgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCQkvKiBwYWNrZXRzIHRvIG91ciBhZGFwdGVyIGdvIHRocm91Z2ggKi8KKwkJcmV0dXJuICFtZW1jbXAoaGVhZGVyLT5hZGRyMSwgcHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCisJY2FzZSBJV19NT0RFX0lORlJBOgkvKiBIZWFkZXI6IERlc3QuIHwgQlNTSUQgfCBTb3VyY2UgKi8KKwkJLyogcGFja2V0cyBmcm9tIG91ciBhZGFwdGVyIGFyZSBkcm9wcGVkIChlY2hvKSAqLworCQlpZiAoIW1lbWNtcChoZWFkZXItPmFkZHIzLCBwcml2LT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCQkJcmV0dXJuIDA7CisKKwkJLyoge2Jyb2FkLG11bHRpfWNhc3QgcGFja2V0cyB0byBvdXIgQlNTIGdvIHRocm91Z2ggKi8KKwkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEpIHx8CisJCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSkKKwkJCXJldHVybiAhbWVtY21wKGhlYWRlci0+YWRkcjIsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisKKwkJLyogcGFja2V0cyB0byBvdXIgYWRhcHRlciBnbyB0aHJvdWdoICovCisJCXJldHVybiAhbWVtY21wKGhlYWRlci0+YWRkcjEsIHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLAorCQkJICAgICAgIEVUSF9BTEVOKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBJUFdfUEFDS0VUX1JFVFJZX1RJTUUgSFoKKworc3RhdGljIGlubGluZSBpbnQgaXNfZHVwbGljYXRlX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlcikKK3sKKwl1MTYgc2MgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNlcV9jdGwpOworCXUxNiBzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKTsKKwl1MTYgZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKKwl1MTYgKmxhc3Rfc2VxLCAqbGFzdF9mcmFnOworCXVuc2lnbmVkIGxvbmcgKmxhc3RfdGltZTsKKworCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgeworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJeworCQkJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwkJCXN0cnVjdCBpcHdfaWJzc19zZXEgKmVudHJ5ID0gTlVMTDsKKwkJCXU4ICptYWMgPSBoZWFkZXItPmFkZHIyOworCQkJaW50IGluZGV4ID0gbWFjWzVdICUgSVBXX0lCU1NfTUFDX0hBU0hfU0laRTsKKworCQkJX19saXN0X2Zvcl9lYWNoKHAsICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSkgeworCQkJCWVudHJ5ID0KKwkJCQkgICAgbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaXB3X2lic3Nfc2VxLCBsaXN0KTsKKwkJCQlpZiAoIW1lbWNtcChlbnRyeS0+bWFjLCBtYWMsIEVUSF9BTEVOKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocCA9PSAmcHJpdi0+aWJzc19tYWNfaGFzaFtpbmRleF0pIHsKKwkJCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOworCQkJCWlmICghZW50cnkpIHsKKwkJCQkJSVBXX0VSUk9SCisJCQkJCSAgICAoIkNhbm5vdCBtYWxsb2MgbmV3IG1hYyBlbnRyeVxuIik7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQltZW1jcHkoZW50cnktPm1hYywgbWFjLCBFVEhfQUxFTik7CisJCQkJZW50cnktPnNlcV9udW0gPSBzZXE7CisJCQkJZW50cnktPmZyYWdfbnVtID0gZnJhZzsKKwkJCQllbnRyeS0+cGFja2V0X3RpbWUgPSBqaWZmaWVzOworCQkJCWxpc3RfYWRkKCZlbnRyeS0+bGlzdCwKKwkJCQkJICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlsYXN0X3NlcSA9ICZlbnRyeS0+c2VxX251bTsKKwkJCWxhc3RfZnJhZyA9ICZlbnRyeS0+ZnJhZ19udW07CisJCQlsYXN0X3RpbWUgPSAmZW50cnktPnBhY2tldF90aW1lOworCQkJYnJlYWs7CisJCX0KKwljYXNlIElXX01PREVfSU5GUkE6CisJCWxhc3Rfc2VxID0gJnByaXYtPmxhc3Rfc2VxX251bTsKKwkJbGFzdF9mcmFnID0gJnByaXYtPmxhc3RfZnJhZ19udW07CisJCWxhc3RfdGltZSA9ICZwcml2LT5sYXN0X3BhY2tldF90aW1lOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJaWYgKCgqbGFzdF9zZXEgPT0gc2VxKSAmJgorCSAgICB0aW1lX2FmdGVyKCpsYXN0X3RpbWUgKyBJUFdfUEFDS0VUX1JFVFJZX1RJTUUsIGppZmZpZXMpKSB7CisJCWlmICgqbGFzdF9mcmFnID09IGZyYWcpCisJCQlnb3RvIGRyb3A7CisJCWlmICgqbGFzdF9mcmFnICsgMSAhPSBmcmFnKQorCQkJLyogb3V0LW9mLW9yZGVyIGZyYWdtZW50ICovCisJCQlnb3RvIGRyb3A7CisJfSBlbHNlCisJCSpsYXN0X3NlcSA9IHNlcTsKKworCSpsYXN0X2ZyYWcgPSBmcmFnOworCSpsYXN0X3RpbWUgPSBqaWZmaWVzOworCXJldHVybiAwOworCisgICAgICBkcm9wOgorCS8qIENvbW1lbnQgdGhpcyBsaW5lIG5vdyBzaW5jZSB3ZSBvYnNlcnZlZCB0aGUgY2FyZCByZWNlaXZlcworCSAqIGR1cGxpY2F0ZSBwYWNrZXRzIGJ1dCB0aGUgRkNUTF9SRVRSWSBiaXQgaXMgbm90IHNldCBpbiB0aGUKKwkgKiBJQlNTIG1vZGUgd2l0aCBmcmFnbWVudGF0aW9uIGVuYWJsZWQuCisJIEJVR19PTighKGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX1JFVFJZKSk7ICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19oYW5kbGVfbWdtdF9wYWNrZXQoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSByeGItPnNrYjsKKwlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikKKwkgICAgKHNrYi0+ZGF0YSArIElQV19SWF9GUkFNRV9TSVpFKTsKKworCWllZWU4MDIxMV9yeF9tZ3QocHJpdi0+aWVlZSwgaGVhZGVyLCBzdGF0cyk7CisKKwlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCisJICAgICgoV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpKSA9PQorCSAgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKSB8fAorCSAgICAgKFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY3RsKSkgPT0KKwkgICAgICBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSkpIHsKKwkJaWYgKCFtZW1jbXAoaGVhZGVyLT5hZGRyMywgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkKKwkJCWlwd19hZGRfc3RhdGlvbihwcml2LCBoZWFkZXItPmFkZHIyKTsKKwl9CisKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX05FVF9TVEFUUykgeworCQlJUFdfREVCVUdfSEMoInNlbmRpbmcgc3RhdCBwYWNrZXRcbiIpOworCisJCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgc2tiIHRvIHRoZSBzaXplIG9mIHRoZSBmdWxsCisJCSAqIGlwdyBoZWFkZXIgYW5kIDgwMi4xMSBmcmFtZSAqLworCQlza2JfcHV0KHNrYiwgbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkgKworCQkJSVBXX1JYX0ZSQU1FX1NJWkUpOworCisJCS8qIEFkdmFuY2UgcGFzdCB0aGUgaXB3IHBhY2tldCBoZWFkZXIgdG8gdGhlIDgwMi4xMSBmcmFtZSAqLworCQlza2JfcHVsbChza2IsIElQV19SWF9GUkFNRV9TSVpFKTsKKworCQkvKiBQdXNoIHRoZSBpZWVlODAyMTFfcnhfc3RhdHMgYmVmb3JlIHRoZSA4MDIuMTEgZnJhbWUgKi8KKwkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpzdGF0cykpLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpOworCisJCXNrYi0+ZGV2ID0gcHJpdi0+aWVlZS0+ZGV2OworCisJCS8qIFBvaW50IHJhdyBhdCB0aGUgaWVlZTgwMjExX3N0YXRzICovCisJCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKworCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMTFfU1RBVFMpOworCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHJ4Yi0+c2tiLT5jYikpOworCQluZXRpZl9yeChza2IpOworCQlyeGItPnNrYiA9IE5VTEw7CisJfQogfQogCiAvKgpAQCAtNDkxMiw4ICs3ODEwLDggQEAKIAl1MzIgciwgdywgaTsKIAl1OCBuZXR3b3JrX3BhY2tldDsKIAotCXIgPSBpcHdfcmVhZDMyKHByaXYsIENYMl9SWF9SRUFEX0lOREVYKTsKLQl3ID0gaXB3X3JlYWQzMihwcml2LCBDWDJfUlhfV1JJVEVfSU5ERVgpOworCXIgPSBpcHdfcmVhZDMyKHByaXYsIElQV19SWF9SRUFEX0lOREVYKTsKKwl3ID0gaXB3X3JlYWQzMihwcml2LCBJUFdfUlhfV1JJVEVfSU5ERVgpOwogCWkgPSAocHJpdi0+cnhxLT5wcm9jZXNzZWQgKyAxKSAlIFJYX1FVRVVFX1NJWkU7CiAKIAl3aGlsZSAoaSAhPSByKSB7CkBAIC00OTI3LDcgKzc4MjUsNyBAQAogCQlwcml2LT5yeHEtPnF1ZXVlW2ldID0gTlVMTDsKIAogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKLQkJCQkJICAgIENYMl9SWF9CVUZfU0laRSwKKwkJCQkJICAgIElQV19SWF9CVUZfU0laRSwKIAkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CkBAIC00OTM4LDkgKzc4MzYsMTMgQEAKIAkJc3dpdGNoIChwa3QtPmhlYWRlci5tZXNzYWdlX3R5cGUpIHsKIAkJY2FzZSBSWF9GUkFNRV9UWVBFOgkvKiA4MDIuMTEgZnJhbWUgKi8gIHsKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHN0YXRzID0gewotCQkJCQkucnNzaSA9IHBrdC0+dS5mcmFtZS5yc3NpX2RibSAtCisJCQkJCS5yc3NpID0KKwkJCQkJICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5yc3NpX2RibSkgLQogCQkJCQkgICAgSVBXX1JTU0lfVE9fREJNLAotCQkJCQkuc2lnbmFsID0gcGt0LT51LmZyYW1lLnNpZ25hbCwKKwkJCQkJLnNpZ25hbCA9CisJCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUuc2lnbmFsKSwKKwkJCQkJLm5vaXNlID0KKwkJCQkJICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5ub2lzZSksCiAJCQkJCS5yYXRlID0gcGt0LT51LmZyYW1lLnJhdGUsCiAJCQkJCS5tYWNfdGltZSA9IGppZmZpZXMsCiAJCQkJCS5yZWNlaXZlZF9jaGFubmVsID0KQEAgLTQ5NTAsMjIgKzc4NTIsMzAgQEAKIAkJCQkJICAgICBjb250cm9sICYgKDEgPDwgMCkpID8KIAkJCQkJICAgIElFRUU4MDIxMV8yNEdIWl9CQU5EIDoKIAkJCQkJICAgIElFRUU4MDIxMV81MkdIWl9CQU5ELAotCQkJCQkubGVuID0gcGt0LT51LmZyYW1lLmxlbmd0aCwKKwkJCQkJLmxlbiA9IGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpLAogCQkJCX07CiAKIAkJCQlpZiAoc3RhdHMucnNzaSAhPSAwKQogCQkJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19SU1NJOwogCQkJCWlmIChzdGF0cy5zaWduYWwgIT0gMCkKIAkJCQkJc3RhdHMubWFzayB8PSBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMOworCQkJCWlmIChzdGF0cy5ub2lzZSAhPSAwKQorCQkJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRTsKIAkJCQlpZiAoc3RhdHMucmF0ZSAhPSAwKQogCQkJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19SQVRFOwogCiAJCQkJcHJpdi0+cnhfcGFja2V0cysrOwogCi0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogCQkJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKwkJCQkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHByaXYsCisJCQkJCQkJCSAgICAgICByeGIsCisJCQkJCQkJCSAgICAgICAmc3RhdHMpOworI2Vsc2UKIAkJCQkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LCByeGIsCiAJCQkJCQkJICAgICAgICZzdGF0cyk7CisjZW5kaWYKIAkJCQkJYnJlYWs7CiAJCQkJfQogI2VuZGlmCkBAIC00OTc5LDM1ICs3ODg5LDkgQEAKIAkJCQkgKiBjb3JyZWN0bHkgLS0gd2Ugc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUKIAkJCQkgKiBmcmFtZSBjb250cm9sIG9mIHRoZSBwYWNrZXQgYW5kIGRpc3JlZ2FyZAogCQkJCSAqIHRoZSBjdXJyZW50IGl3X21vZGUgKi8KLQkJCQlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKLQkJCQljYXNlIElXX01PREVfQURIT0M6Ci0JCQkJCW5ldHdvcmtfcGFja2V0ID0KLQkJCQkJICAgICFtZW1jbXAoaGVhZGVyLT5hZGRyMSwKLQkJCQkJCSAgICBwcml2LT5uZXRfZGV2LT5kZXZfYWRkciwKLQkJCQkJCSAgICBFVEhfQUxFTikgfHwKLQkJCQkJICAgICFtZW1jbXAoaGVhZGVyLT5hZGRyMywKLQkJCQkJCSAgICBwcml2LT5ic3NpZCwgRVRIX0FMRU4pIHx8Ci0JCQkJCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZWFkZXItPgotCQkJCQkJCQkgICAgYWRkcjEpCi0JCQkJCSAgICB8fCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPgotCQkJCQkJCQkgICAgICAgYWRkcjEpOwotCQkJCQlicmVhazsKIAotCQkJCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJCQlkZWZhdWx0OgotCQkJCQluZXR3b3JrX3BhY2tldCA9Ci0JCQkJCSAgICAhbWVtY21wKGhlYWRlci0+YWRkcjMsCi0JCQkJCQkgICAgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSB8fAotCQkJCQkgICAgIW1lbWNtcChoZWFkZXItPmFkZHIxLAotCQkJCQkJICAgIHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLAotCQkJCQkJICAgIEVUSF9BTEVOKSB8fAotCQkJCQkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT4KLQkJCQkJCQkJICAgIGFkZHIxKQotCQkJCQkgICAgfHwgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT4KLQkJCQkJCQkJICAgICAgIGFkZHIxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCisJCQkJbmV0d29ya19wYWNrZXQgPQorCQkJCSAgICBpc19uZXR3b3JrX3BhY2tldChwcml2LCBoZWFkZXIpOwogCQkJCWlmIChuZXR3b3JrX3BhY2tldCAmJiBwcml2LT5hc3NvY19uZXR3b3JrKSB7CiAJCQkJCXByaXYtPmFzc29jX25ldHdvcmstPnN0YXRzLnJzc2kgPQogCQkJCQkgICAgc3RhdHMucnNzaTsKQEAgLTUwMTcsOSArNzkwMSwxMCBAQAogCQkJCX0KIAogCQkJCUlQV19ERUJVR19SWCgiRnJhbWU6IGxlbj0ldVxuIiwKLQkJCQkJICAgICBwa3QtPnUuZnJhbWUubGVuZ3RoKTsKKwkJCQkJICAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSk7CiAKLQkJCQlpZiAocGt0LT51LmZyYW1lLmxlbmd0aCA8IGZyYW1lX2hkcl9sZW4oaGVhZGVyKSkgeworCQkJCWlmIChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSA8CisJCQkJICAgIGZyYW1lX2hkcl9sZW4oaGVhZGVyKSkgewogCQkJCQlJUFdfREVCVUdfRFJPUAogCQkJCQkgICAgKCJSZWNlaXZlZCBwYWNrZXQgaXMgdG9vIHNtYWxsLiAiCiAJCQkJCSAgICAgIkRyb3BwaW5nLlxuIik7CkBAIC01MDI4LDM0ICs3OTEzLDIyIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShoZWFkZXItPmZyYW1lX2N0bCkpIHsKKwkJCQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1RZUEUKKwkJCQkJKGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY3RsKSkpIHsKKwogCQkJCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCQkJCWllZWU4MDIxMV9yeF9tZ3QocHJpdi0+aWVlZSwgaGVhZGVyLAotCQkJCQkJCSAmc3RhdHMpOwotCQkJCQlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DCi0JCQkJCSAgICAmJgotCQkJCQkgICAgKChXTEFOX0ZDX0dFVF9TVFlQRQotCQkJCQkgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpID09Ci0JCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKQotCQkJCQkgICAgIHx8Ci0JCQkJCSAgICAgKFdMQU5fRkNfR0VUX1NUWVBFCi0JCQkJCSAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkgPT0KLQkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpCi0JCQkJCSAgICAmJiAhbWVtY21wKGhlYWRlci0+YWRkcjMsCi0JCQkJCQkgICAgICAgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkKLQkJCQkJCWlwd19hZGRfc3RhdGlvbihwcml2LAotCQkJCQkJCQloZWFkZXItPmFkZHIyKTsKKwkJCQkJaXB3X2hhbmRsZV9tZ210X3BhY2tldChwcml2LCByeGIsCisJCQkJCQkJICAgICAgICZzdGF0cyk7CiAJCQkJCWJyZWFrOwogCiAJCQkJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgogCQkJCQlicmVhazsKIAogCQkJCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCQkJCWlmIChuZXR3b3JrX3BhY2tldCkKLQkJCQkJCWlwd19oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwKLQkJCQkJCQkJICAgICAgIHJ4YiwKLQkJCQkJCQkJICAgICAgICZzdGF0cyk7Ci0JCQkJCWVsc2UKKwkJCQkJaWYgKHVubGlrZWx5KCFuZXR3b3JrX3BhY2tldCB8fAorCQkJCQkJICAgICBpc19kdXBsaWNhdGVfcGFja2V0KHByaXYsCisJCQkJCQkJCQkgaGVhZGVyKSkpCisJCQkJCXsKIAkJCQkJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZzogIgogCQkJCQkJCSAgICAgICBNQUNfRk1UICIsICIKIAkJCQkJCQkgICAgICAgTUFDX0ZNVCAiLCAiCkBAIC01MDY2LDYgKzc5MzksMTIgQEAKIAkJCQkJCQkJICAgICAgIGFkZHIyKSwKIAkJCQkJCQkgICAgICAgTUFDX0FSRyhoZWFkZXItPgogCQkJCQkJCQkgICAgICAgYWRkcjMpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LCByeGIsCisJCQkJCQkJICAgICAgICZzdGF0cyk7CisKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtNTA5Niw3ICs3OTc1LDcgQEAKIAkJfQogCiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKLQkJCQkgQ1gyX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCSBJUFdfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWxpc3RfYWRkX3RhaWwoJnJ4Yi0+bGlzdCwgJnByaXYtPnJ4cS0+cnhfdXNlZCk7CiAKIAkJaSA9IChpICsgMSkgJSBSWF9RVUVVRV9TSVpFOwpAQCAtNTEwOCwxMjggKzc5ODcsMTI5IEBACiAJaXB3X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGlwd19hYm9ydF9zY2FuKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKKyNkZWZpbmUgREVGQVVMVF9SVFNfVEhSRVNIT0xEICAgICAyMzA0VQorI2RlZmluZSBNSU5fUlRTX1RIUkVTSE9MRCAgICAgICAgIDFVCisjZGVmaW5lIE1BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgMjMwNFUKKyNkZWZpbmUgREVGQVVMVF9CRUFDT05fSU5URVJWQUwgICAxMDBVCisjZGVmaW5lCURFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQgN1UKKyNkZWZpbmUJREVGQVVMVF9MT05HX1JFVFJZX0xJTUlUICA0VQorCitzdGF0aWMgaW50IGlwd19zd19yZXNldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCBpbml0KQogewotCWludCBlcnI7CisJaW50IGJhbmQsIG1vZHVsYXRpb247CisJaW50IG9sZF9tb2RlID0gcHJpdi0+aWVlZS0+aXdfbW9kZTsKIAotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTl9BQk9SVElORykgewotCQlJUFdfREVCVUdfSEMoIklnbm9yaW5nIGNvbmN1cnJlbnQgc2NhbiBhYm9ydCByZXF1ZXN0LlxuIik7Ci0JCXJldHVybjsKLQl9Ci0JcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOX0FCT1JUSU5HOworCS8qIEluaXRpYWxpemUgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZXMgaGVyZSAqLworCXByaXYtPmNvbmZpZyA9IDA7CiAKLQllcnIgPSBpcHdfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCWlmIChlcnIpCi0JCUlQV19ERUJVR19IQygiUmVxdWVzdCB0byBhYm9ydCBzY2FuIGZhaWxlZC5cbiIpOwotfQorCS8qIFdlIGRlZmF1bHQgdG8gZGlzYWJsaW5nIHRoZSBMRUQgY29kZSBhcyByaWdodCBub3cgaXQgY2F1c2VzCisJICogdG9vIG1hbnkgc3lzdGVtcyB0byBsb2NrIHVwLi4uICovCisJaWYgKCFsZWQpCisJCXByaXYtPmNvbmZpZyB8PSBDRkdfTk9fTEVEOwogCi1zdGF0aWMgaW50IGlwd19yZXF1ZXN0X3NjYW4oc3RydWN0IGlwd19wcml2ICpwcml2KQotewotCXN0cnVjdCBpcHdfc2Nhbl9yZXF1ZXN0X2V4dCBzY2FuOwotCWludCBjaGFubmVsX2luZGV4ID0gMDsKLQlpbnQgaSwgZXJyLCBzY2FuX3R5cGU7CisJaWYgKGFzc29jaWF0ZSkKKwkJcHJpdi0+Y29uZmlnIHw9IENGR19BU1NPQ0lBVEU7CisJZWxzZQorCQlJUFdfREVCVUdfSU5GTygiQXV0byBhc3NvY2lhdGUgZGlzYWJsZWQuXG4iKTsKIAotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HKSB7Ci0JCUlQV19ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOwotCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fUEVORElORzsKLQkJcmV0dXJuIDA7CisJaWYgKGF1dG9fY3JlYXRlKQorCQlwcml2LT5jb25maWcgfD0gQ0ZHX0FESE9DX0NSRUFURTsKKwllbHNlCisJCUlQV19ERUJVR19JTkZPKCJBdXRvIGFkaG9jIGNyZWF0aW9uIGRpc2FibGVkLlxuIik7CisKKwlpZiAoZGlzYWJsZSkgeworCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JGX0tJTExfU1c7CisJCUlQV19ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOwogCX0KIAotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKLQkJSVBXX0RFQlVHX0hDKCJDb25jdXJyZW50IHNjYW4gcmVxdWVzdGVkLiAgQWJvcnRpbmcgZmlyc3QuXG4iKTsKLQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOX1BFTkRJTkc7Ci0JCWlwd19hYm9ydF9zY2FuKHByaXYpOwotCQlyZXR1cm4gMDsKKwlpZiAoY2hhbm5lbCAhPSAwKSB7CisJCXByaXYtPmNvbmZpZyB8PSBDRkdfU1RBVElDX0NIQU5ORUw7CisJCXByaXYtPmNoYW5uZWwgPSBjaGFubmVsOworCQlJUFdfREVCVUdfSU5GTygiQmluZCB0byBzdGF0aWMgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7CisJCS8qIFRPRE86IFZhbGlkYXRlIHRoYXQgcHJvdmlkZWQgY2hhbm5lbCBpcyBpbiByYW5nZSAqLworCX0KKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCWlwd19xb3NfaW5pdChwcml2LCBxb3NfZW5hYmxlLCBxb3NfYnVyc3RfZW5hYmxlLAorCQkgICAgIGJ1cnN0X2R1cmF0aW9uX0NDSywgYnVyc3RfZHVyYXRpb25fT0ZETSk7CisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwkJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfQURIT0M7CisJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CisKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCWNhc2UgMjoKKwkJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfTU9OSVRPUjsKKyNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1JBRElPVEFQCisJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworI2Vsc2UKKwkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKwkJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJCWJyZWFrOwogCX0KIAotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTl9BQk9SVElORykgewotCQlJUFdfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOwotCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fUEVORElORzsKLQkJcmV0dXJuIDA7CisJaWYgKGh3Y3J5cHRvKSB7CisJCXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCA9IDA7CisJCXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdF9tc2R1ID0gMDsKKwkJcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0ID0gMDsKKwkJcHJpdi0+aWVlZS0+aG9zdF9tY19kZWNyeXB0ID0gMDsKIAl9CisJSVBXX0RFQlVHX0lORk8oIkhhcmR3YXJlIGNyeXB0byBbJXNdXG4iLCBod2NyeXB0byA/ICJvbiIgOiAib2ZmIik7CiAKLQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgewotCQlJUFdfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7Ci0JCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9QRU5ESU5HOwotCQlyZXR1cm4gMDsKLQl9CisJLyogSVBXMjIwMC8yOTE1IGlzIGFibGVkIHRvIGRvIGhhcmR3YXJlIGZyYWdtZW50YXRpb24uICovCisJcHJpdi0+aWVlZS0+aG9zdF9vcGVuX2ZyYWcgPSAwOwogCi0JbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc2NhbikpOwotCi0Jc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfU0NBTl0gPSAyMDsKLQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9BTkRfRElSRUNUX1NDQU5dID0gMjA7Ci0Jc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOXSA9IDIwOwotCi0Jc2Nhbi5mdWxsX3NjYW5faW5kZXggPSBpZWVlODAyMTFfZ2V0X3NjYW5zKHByaXYtPmllZWUpOwotCS8qIElmIHdlIGFyZSByb2FtaW5nLCB0aGVuIG1ha2UgdGhpcyBhIGRpcmVjdGVkIHNjYW4gZm9yIHRoZSBjdXJyZW50Ci0JICogbmV0d29yay4gIE90aGVyd2lzZSwgZW5zdXJlIHRoYXQgZXZlcnkgb3RoZXIgc2NhbiBpcyBhIGZhc3QKLQkgKiBjaGFubmVsIGhvcCBzY2FuICovCi0JaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUk9BTUlORykKLQkgICAgfHwgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCi0JCSYmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEKQotCQkmJiAoc2Nhbi5mdWxsX3NjYW5faW5kZXggJSAyKSkpIHsKLQkJZXJyID0gaXB3X3NlbmRfc3NpZChwcml2LCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKTsKLQkJaWYgKGVycikgewotCQkJSVBXX0RFQlVHX0hDKCJBdHRlbXB0IHRvIHNlbmQgU1NJRCBjb21tYW5kIGZhaWxlZC5cbiIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCXNjYW5fdHlwZSA9IElQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfQU5EX0RJUkVDVF9TQ0FOOworCWlmICgocHJpdi0+cGNpX2Rldi0+ZGV2aWNlID09IDB4NDIyMykgfHwKKwkgICAgKHByaXYtPnBjaV9kZXYtPmRldmljZSA9PSAweDQyMjQpKSB7CisJCWlmIChpbml0KQorCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJICAgICAgICI6IERldGVjdGVkIEludGVsIFBSTy9XaXJlbGVzcyAyOTE1QUJHIE5ldHdvcmsgIgorCQkJICAgICAgICJDb25uZWN0aW9uXG4iKTsKKwkJcHJpdi0+aWVlZS0+YWJnX3RydWUgPSAxOworCQliYW5kID0gSUVFRTgwMjExXzUyR0haX0JBTkQgfCBJRUVFODAyMTFfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAorCQkgICAgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOworCQlwcml2LT5hZGFwdGVyID0gSVBXXzI5MTVBQkc7CisJCXByaXYtPmllZWUtPm1vZGUgPSBJRUVFX0EgfCBJRUVFX0cgfCBJRUVFX0I7CiAJfSBlbHNlIHsKLQkJc2Nhbl90eXBlID0gSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOOworCQlpZiAoaW5pdCkKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSAgICAgICAiOiBEZXRlY3RlZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjIwMEJHIE5ldHdvcmsgIgorCQkJICAgICAgICJDb25uZWN0aW9uXG4iKTsKKworCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDA7CisJCWJhbmQgPSBJRUVFODAyMTFfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAorCQkgICAgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOworCQlwcml2LT5hZGFwdGVyID0gSVBXXzIyMDBCRzsKKwkJcHJpdi0+aWVlZS0+bW9kZSA9IElFRUVfRyB8IElFRUVfQjsKIAl9CiAKLQlpZiAocHJpdi0+aWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpIHsKLQkJaW50IHN0YXJ0ID0gY2hhbm5lbF9pbmRleDsKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9BX0NIQU5ORUxTOyBpKyspIHsKLQkJCWlmIChiYW5kX2FfYWN0aXZlX2NoYW5uZWxbaV0gPT0gMCkKLQkJCQlicmVhazsKLQkJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCi0JCQkgICAgYmFuZF9hX2FjdGl2ZV9jaGFubmVsW2ldID09IHByaXYtPmNoYW5uZWwpCi0JCQkJY29udGludWU7Ci0JCQljaGFubmVsX2luZGV4Kys7Ci0JCQlzY2FuLmNoYW5uZWxzX2xpc3RbY2hhbm5lbF9pbmRleF0gPQotCQkJICAgIGJhbmRfYV9hY3RpdmVfY2hhbm5lbFtpXTsKLQkJCWlwd19zZXRfc2Nhbl90eXBlKCZzY2FuLCBjaGFubmVsX2luZGV4LCBzY2FuX3R5cGUpOwotCQl9CisJcHJpdi0+aWVlZS0+ZnJlcV9iYW5kID0gYmFuZDsKKwlwcml2LT5pZWVlLT5tb2R1bGF0aW9uID0gbW9kdWxhdGlvbjsKIAotCQlpZiAoc3RhcnQgIT0gY2hhbm5lbF9pbmRleCkgewotCQkJc2Nhbi5jaGFubmVsc19saXN0W3N0YXJ0XSA9ICh1OCkgKElQV19BX01PREUgPDwgNikgfAotCQkJICAgIChjaGFubmVsX2luZGV4IC0gc3RhcnQpOwotCQkJY2hhbm5lbF9pbmRleCsrOwotCQl9Ci0JfQorCXByaXYtPnJhdGVzX21hc2sgPSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLOwogCi0JaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSB7Ci0JCWludCBzdGFydCA9IGNoYW5uZWxfaW5kZXg7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQl9DSEFOTkVMUzsgaSsrKSB7Ci0JCQlpZiAoYmFuZF9iX2FjdGl2ZV9jaGFubmVsW2ldID09IDApCi0JCQkJYnJlYWs7Ci0JCQlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgotCQkJICAgIGJhbmRfYl9hY3RpdmVfY2hhbm5lbFtpXSA9PSBwcml2LT5jaGFubmVsKQotCQkJCWNvbnRpbnVlOwotCQkJY2hhbm5lbF9pbmRleCsrOwotCQkJc2Nhbi5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0KLQkJCSAgICBiYW5kX2JfYWN0aXZlX2NoYW5uZWxbaV07Ci0JCQlpcHdfc2V0X3NjYW5fdHlwZSgmc2NhbiwgY2hhbm5lbF9pbmRleCwgc2Nhbl90eXBlKTsKLQkJfQorCXByaXYtPmRpc2Fzc29jaWF0ZV90aHJlc2hvbGQgPSBJUFdfTUJfRElTQVNTT0NJQVRFX1RIUkVTSE9MRF9ERUZBVUxUOworCXByaXYtPnJvYW1pbmdfdGhyZXNob2xkID0gSVBXX01CX1JPQU1JTkdfVEhSRVNIT0xEX0RFRkFVTFQ7CiAKLQkJaWYgKHN0YXJ0ICE9IGNoYW5uZWxfaW5kZXgpIHsKLQkJCXNjYW4uY2hhbm5lbHNfbGlzdFtzdGFydF0gPSAodTgpIChJUFdfQl9NT0RFIDw8IDYpIHwKLQkJCSAgICAoY2hhbm5lbF9pbmRleCAtIHN0YXJ0KTsKLQkJfQotCX0KKwlwcml2LT5ydHNfdGhyZXNob2xkID0gREVGQVVMVF9SVFNfVEhSRVNIT0xEOworCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVDsKKwlwcml2LT5sb25nX3JldHJ5X2xpbWl0ID0gREVGQVVMVF9MT05HX1JFVFJZX0xJTUlUOwogCi0JZXJyID0gaXB3X3NlbmRfc2Nhbl9yZXF1ZXN0X2V4dChwcml2LCAmc2Nhbik7Ci0JaWYgKGVycikgewotCQlJUFdfREVCVUdfSEMoIlNlbmRpbmcgc2NhbiBjb21tYW5kIGZhaWxlZDogJTA4WFxuIiwgZXJyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFDIG1vZGUgKi8KKwlwcml2LT5wb3dlcl9tb2RlID0gSVBXX1BPV0VSX0FDOworCXByaXYtPnR4X3Bvd2VyID0gSVBXX1RYX1BPV0VSX0RFRkFVTFQ7CiAKLQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5OSU5HOwotCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX1NDQU5fUEVORElORzsKLQotCXJldHVybiAwOworCXJldHVybiBvbGRfbW9kZSA9PSBwcml2LT5pZWVlLT5pd19tb2RlOwogfQogCiAvKgpAQCAtNTI0NywxMiArODEyNywxNiBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpCisJZG93bigmcHJpdi0+c2VtKTsKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKKwkJc3RyY3B5KHdycXUtPm5hbWUsICJyYWRpbyBvZmYiKTsKKwllbHNlIGlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKIAkJc3RyY3B5KHdycXUtPm5hbWUsICJ1bmFzc29jaWF0ZWQiKTsKIAllbHNlCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElYyIsCiAJCQkgaXB3X21vZGVzW3ByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlXSk7CiAJSVBXX0RFQlVHX1dYKCJOYW1lOiAlc1xuIiwgd3JxdS0+bmFtZSk7CisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyNjEsMTMgKzgxNDUsOSBAQAogCWlmIChjaGFubmVsID09IDApIHsKIAkJSVBXX0RFQlVHX0lORk8oIlNldHRpbmcgY2hhbm5lbCB0byBBTlkgKDApXG4iKTsKIAkJcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0NIQU5ORUw7Ci0JCWlmICghKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfU0NBTk5JTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCB8Ci0JCQkJICAgICAgU1RBVFVTX0FTU09DSUFUSU5HKSkpIHsKLQkJCUlQV19ERUJVR19BU1NPQygiQXR0ZW1wdGluZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgIgotCQkJCQkicGFyYW1ldGVycy5cbiIpOwotCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKLQkJfQotCisJCUlQV19ERUJVR19BU1NPQygiQXR0ZW1wdGluZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgIgorCQkJCSJwYXJhbWV0ZXJzLlxuIik7CisJCWlwd19hc3NvY2lhdGUocHJpdik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTI4MiwxNCArODE2MiwzMiBAQAogCUlQV19ERUJVR19JTkZPKCJTZXR0aW5nIGNoYW5uZWwgdG8gJWlcbiIsIChpbnQpY2hhbm5lbCk7CiAJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7CiAKLQkvKiBJZiB3ZSBhcmUgY3VycmVudGx5IGFzc29jaWF0ZWQsIG9yIHRyeWluZyB0byBhc3NvY2lhdGUKLQkgKiB0aGVuIHNlZSBpZiB0aGlzIGlzIGEgbmV3IGNoYW5uZWwgKGNhdXNpbmcgdXMgdG8gZGlzYXNzb2NpYXRlKSAqLwotCWlmIChwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSB7Ci0JCUlQV19ERUJVR19BU1NPQygiRGlzYXNzb2NpYXRpbmcgZHVlIHRvIGNoYW5uZWwgY2hhbmdlLlxuIik7Ci0JCWlwd19kaXNhc3NvY2lhdGUocHJpdik7Ci0JfSBlbHNlIHsKLQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCWludCBpOworCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKSB7CisJCQlJUFdfREVCVUdfU0NBTigiU2NhbiBhYm9ydCB0cmlnZ2VyZWQgZHVlIHRvICIKKwkJCQkgICAgICAgImNoYW5uZWwgY2hhbmdlLlxuIik7CisJCQlpcHdfYWJvcnRfc2Nhbihwcml2KTsKKwkJfQorCisJCWZvciAoaSA9IDEwMDA7IGkgJiYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORyk7IGktLSkKKwkJCXVkZWxheSgxMCk7CisKKwkJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykKKwkJCUlQV19ERUJVR19TQ0FOKCJTdGlsbCBzY2FubmluZy4uLlxuIik7CisJCWVsc2UKKwkJCUlQV19ERUJVR19TQ0FOKCJUb29rICVkbXMgdG8gYWJvcnQgY3VycmVudCBzY2FuXG4iLAorCQkJCSAgICAgICAxMDAwIC0gaSk7CisKKwkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX01PTklUT1IgKi8KKworCS8qIE5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VkIC0tIGZvcmNlIFtyZV1hc3NvY2lhdGlvbiAqLworCUlQV19ERUJVR19BU1NPQygiW3JlXWFzc29jaWF0aW9uIHRyaWdnZXJlZCBkdWUgdG8gY2hhbm5lbCBjaGFuZ2UuXG4iKTsKKwlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCisJCWlwd19hc3NvY2lhdGUocHJpdik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyOTksMjkgKzgxOTcsNDggQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGlwd19nZXRfZ2VvKHByaXYtPmllZWUpOwogCXN0cnVjdCBpd19mcmVxICpmd3JxID0gJndycXUtPmZyZXE7CisJaW50IHJldCA9IDAsIGk7CisJdTggY2hhbm5lbCwgZmxhZ3M7CisJaW50IGJhbmQ7CiAKKwlpZiAoZndycS0+bSA9PSAwKSB7CisJCUlQV19ERUJVR19XWCgiU0VUIEZyZXEvQ2hhbm5lbCAtPiBhbnlcbiIpOworCQlkb3duKCZwcml2LT5zZW0pOworCQlyZXQgPSBpcHdfc2V0X2NoYW5uZWwocHJpdiwgMCk7CisJCXVwKCZwcml2LT5zZW0pOworCQlyZXR1cm4gcmV0OworCX0KIAkvKiBpZiBzZXR0aW5nIGJ5IGZyZXEgY29udmVydCB0byBjaGFubmVsICovCiAJaWYgKGZ3cnEtPmUgPT0gMSkgewotCQlpZiAoKGZ3cnEtPm0gPj0gKGludCkyLjQxMmU4ICYmIGZ3cnEtPm0gPD0gKGludCkyLjQ4N2U4KSkgewotCQkJaW50IGYgPSBmd3JxLT5tIC8gMTAwMDAwOwotCQkJaW50IGMgPSAwOworCQljaGFubmVsID0gaXB3X2ZyZXFfdG9fY2hhbm5lbChwcml2LT5pZWVlLCBmd3JxLT5tKTsKKwkJaWYgKGNoYW5uZWwgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQljaGFubmVsID0gZndycS0+bTsKIAotCQkJd2hpbGUgKChjIDwgUkVHX01BWF9DSEFOTkVMKSAmJgotCQkJICAgICAgIChmICE9IGlwd19mcmVxdWVuY2llc1tjXSkpCi0JCQkJYysrOworCWlmICghKGJhbmQgPSBpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCQkvKiBoYWNrIHRvIGZhbGwgdGhyb3VnaCAqLwotCQkJZndycS0+ZSA9IDA7Ci0JCQlmd3JxLT5tID0gYyArIDE7CisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQlpID0gaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgY2hhbm5lbCk7CisJCWlmIChpID09IC0xKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZmxhZ3MgPSAoYmFuZCA9PSBJRUVFODAyMTFfMjRHSFpfQkFORCkgPworCQkgICAgZ2VvLT5iZ1tpXS5mbGFncyA6IGdlby0+YVtpXS5mbGFnczsKKwkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkgeworCQkJSVBXX0RFQlVHX1dYKCJJbnZhbGlkIEFkLUhvYyBjaGFubmVsIGZvciA4MDIuMTFhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi0JaWYgKGZ3cnEtPmUgPiAwIHx8IGZ3cnEtPm0gPiAxMDAwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlJUFdfREVCVUdfV1goIlNFVCBGcmVxL0NoYW5uZWwgLT4gJWQgXG4iLCBmd3JxLT5tKTsKLQlyZXR1cm4gaXB3X3NldF9jaGFubmVsKHByaXYsICh1OCkgZndycS0+bSk7CisJZG93bigmcHJpdi0+c2VtKTsKKwlyZXQgPSBpcHdfc2V0X2NoYW5uZWwocHJpdiwgY2hhbm5lbCk7CisJdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpcHdfd3hfZ2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTUzMzQsMTIgKzgyNTEsMTQgQEAKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQogCSAqIGNvbmZpZ3VyZWQgQ0hBTk5FTCB0aGVuIHJldHVybiB0aGF0OyBvdGhlcndpc2UgcmV0dXJuIEFOWSAqLworCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQ0hBTk5FTCB8fAogCSAgICBwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFUSU5HIHwgU1RBVFVTX0FTU09DSUFURUQpKQogCQl3cnF1LT5mcmVxLm0gPSBwcml2LT5jaGFubmVsOwogCWVsc2UKIAkJd3JxdS0+ZnJlcS5tID0gMDsKIAorCXVwKCZwcml2LT5zZW0pOwogCUlQV19ERUJVR19XWCgiR0VUIEZyZXEvQ2hhbm5lbCAtPiAlZCBcbiIsIHByaXYtPmNoYW5uZWwpOwogCXJldHVybiAwOwogfQpAQCAtNTM1MywxMSArODI3Miw4IEBACiAKIAlJUFdfREVCVUdfV1goIlNldCBNT0RFOiAlZFxuIiwgd3JxdS0+bW9kZSk7CiAKLQlpZiAod3JxdS0+bW9kZSA9PSBwcml2LT5pZWVlLT5pd19tb2RlKQotCQlyZXR1cm4gMDsKLQogCXN3aXRjaCAod3JxdS0+bW9kZSkgewotI2lmZGVmIENPTkZJR19JUFdfUFJPTUlTQworI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKIAljYXNlIElXX01PREVfTU9OSVRPUjoKICNlbmRpZgogCWNhc2UgSVdfTU9ERV9BREhPQzoKQEAgLTUzNjksMzEgKzgyODUsMzMgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKHdycXUtPm1vZGUgPT0gcHJpdi0+aWVlZS0+aXdfbW9kZSkKKwkJcmV0dXJuIDA7CiAKLSNpZmRlZiBDT05GSUdfSVBXX1BST01JU0MKKwlkb3duKCZwcml2LT5zZW0pOworCisJaXB3X3N3X3Jlc2V0KHByaXYsIDApOworCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKIAkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAogCWlmICh3cnF1LT5tb2RlID09IElXX01PREVfTU9OSVRPUikKKyNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1JBRElPVEFQCisJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworI2Vsc2UKIAkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lQV19QUk9NSVNDICovCisjZW5kaWYKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9NT05JVE9SICovCiAKLSNpZmRlZiBDT05GSUdfUE0KIAkvKiBGcmVlIHRoZSBleGlzdGluZyBmaXJtd2FyZSBhbmQgcmVzZXQgdGhlIGZ3X2xvYWRlZAogCSAqIGZsYWcgc28gaXB3X2xvYWQoKSB3aWxsIGJyaW5nIGluIHRoZSBuZXcgZmlybWF3cmUgKi8KLQlpZiAoZndfbG9hZGVkKSB7Ci0JCWZ3X2xvYWRlZCA9IDA7Ci0JfQotCi0JcmVsZWFzZV9maXJtd2FyZShib290ZncpOwotCXJlbGVhc2VfZmlybXdhcmUodWNvZGUpOwotCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCWJvb3RmdyA9IHVjb2RlID0gZmlybXdhcmUgPSBOVUxMOwotI2VuZGlmCisJZnJlZV9maXJtd2FyZSgpOwogCiAJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IHdycXUtPm1vZGU7Ci0JaXB3X2FkYXB0ZXJfcmVzdGFydChwcml2KTsKIAorCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01NDAyLDIwICs4MzIwLDEzIEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCisJZG93bigmcHJpdi0+c2VtKTsKIAl3cnF1LT5tb2RlID0gcHJpdi0+aWVlZS0+aXdfbW9kZTsKIAlJUFdfREVCVUdfV1goIkdldCBNT0RFIC0+ICVkXG4iLCB3cnF1LT5tb2RlKTsKLQorCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIERFRkFVTFRfUlRTX1RIUkVTSE9MRCAgICAgMjMwNFUKLSNkZWZpbmUgTUlOX1JUU19USFJFU0hPTEQgICAgICAgICAxVQotI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRCAgICAgICAgIDIzMDRVCi0jZGVmaW5lIERFRkFVTFRfQkVBQ09OX0lOVEVSVkFMICAgMTAwVQotI2RlZmluZQlERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUIDdVCi0jZGVmaW5lCURFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCAgNFUKLQogLyogVmFsdWVzIGFyZSBpbiBtaWNyb3NlY29uZCAqLwogc3RhdGljIGNvbnN0IHMzMiB0aW1lb3V0X2R1cmF0aW9uW10gPSB7CiAJMzUwMDAwLApAQCAtNTQzOSw4ICs4MzUwLDggQEAKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7Ci0JdTE2IHZhbDsKLQlpbnQgaTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvID0gaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CisJaW50IGkgPSAwLCBqOwogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzaXplb2YoKnJhbmdlKTsKIAltZW1zZXQocmFuZ2UsIDAsIHNpemVvZigqcmFuZ2UpKTsKQEAgLTU0NTEsNyArODM2Miw3IEBACiAJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CiAJLyogVE9ETzogRmluZCByZWFsIG1heCBSU1NJIGFuZCBzdGljayBoZXJlICovCiAJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKLQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IHByaXYtPmllZWUtPndvcnN0X3Jzc2kgKyAweDEwMDsKIAlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IDc7CS8qIFVwZGF0ZWQgYWxsIHRocmVlICovCiAKIAlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDcwOwpAQCAtNTQ1OSw3ICs4MzcwLDcgQEAKIAlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAwOwkvKiBGSVhNRSB0byByZWFsIGF2ZXJhZ2UgbGV2ZWwgKi8KIAlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAwOwogCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gNzsJLyogVXBkYXRlZCBhbGwgdGhyZWUgKi8KLQorCWRvd24oJnByaXYtPnNlbSk7CiAJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IG1pbihwcml2LT5yYXRlcy5udW1fcmF0ZXMsICh1OCkgSVdfTUFYX0JJVFJBVEVTKTsKIAogCWZvciAoaSA9IDA7IGkgPCByYW5nZS0+bnVtX2JpdHJhdGVzOyBpKyspCkBAIC01NDc5LDE5ICs4MzkwLDM1IEBACiAJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CiAJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTY7CiAKLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gRlJFUV9DT1VOVDsKLQotCXZhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IEZSRVFfQ09VTlQ7IGkrKykgewotCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBpICsgMTsKLQkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gaXB3X2ZyZXF1ZW5jaWVzW2ldICogMTAwMDAwOwotCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAxOwotCQl2YWwrKzsKLQotCQlpZiAodmFsID09IElXX01BWF9GUkVRVUVOQ0lFUykKLQkJCWJyZWFrOworCWkgPSAwOworCWlmIChwcml2LT5pZWVlLT5tb2RlICYgKElFRUVfQiB8IElFRUVfRykpIHsKKwkJZm9yIChqID0gMDsgaiA8IGdlby0+YmdfY2hhbm5lbHMgJiYgaSA8IElXX01BWF9GUkVRVUVOQ0lFUzsKKwkJICAgICBpKyssIGorKykgeworCQkJcmFuZ2UtPmZyZXFbaV0uaSA9IGdlby0+Ymdbal0uY2hhbm5lbDsKKwkJCXJhbmdlLT5mcmVxW2ldLm0gPSBnZW8tPmJnW2pdLmZyZXEgKiAxMDAwMDA7CisJCQlyYW5nZS0+ZnJlcVtpXS5lID0gMTsKKwkJfQogCX0KLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IHZhbDsKKworCWlmIChwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9BKSB7CisJCWZvciAoaiA9IDA7IGogPCBnZW8tPmFfY2hhbm5lbHMgJiYgaSA8IElXX01BWF9GUkVRVUVOQ0lFUzsKKwkJICAgICBpKyssIGorKykgeworCQkJcmFuZ2UtPmZyZXFbaV0uaSA9IGdlby0+YVtqXS5jaGFubmVsOworCQkJcmFuZ2UtPmZyZXFbaV0ubSA9IGdlby0+YVtqXS5mcmVxICogMTAwMDAwOworCQkJcmFuZ2UtPmZyZXFbaV0uZSA9IDE7CisJCX0KKwl9CisKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gaTsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGk7CisKKwl1cCgmcHJpdi0+c2VtKTsKKworCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGtlcm5lbCArIGRyaXZlcikgKi8KKwlyYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8CisJCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdUSFJTUFkpIHwKKwkJCQlJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV0FQKSk7CisJcmFuZ2UtPmV2ZW50X2NhcGFbMV0gPSBJV19FVkVOVF9DQVBBX0tfMTsKIAogCUlQV19ERUJVR19XWCgiR0VUIFJhbmdlXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTU1MTIsMjUgKzg0MzksMjMgQEAKIAogCWlmICh3cnF1LT5hcF9hZGRyLnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCiAJCXJldHVybiAtRUlOVkFMOwotCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAoIW1lbWNtcChhbnksIHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pIHx8CiAJICAgICFtZW1jbXAob2ZmLCB3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSkgewogCQkvKiB3ZSBkaXNhYmxlIG1hbmRhdG9yeSBCU1NJRCBhc3NvY2lhdGlvbiAqLwogCQlJUFdfREVCVUdfV1goIlNldHRpbmcgQVAgQlNTSUQgdG8gQU5ZXG4iKTsKIAkJcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0JTU0lEOwotCQlpZiAoIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX1NDQU5OSU5HIHwgU1RBVFVTX0FTU09DSUFURUQgfAotCQkJCSAgICAgIFNUQVRVU19BU1NPQ0lBVElORykpKSB7Ci0JCQlJUFdfREVCVUdfQVNTT0MoIkF0dGVtcHRpbmcgdG8gYXNzb2NpYXRlIHdpdGggbmV3ICIKLQkJCQkJInBhcmFtZXRlcnMuXG4iKTsKLQkJCWlwd19hc3NvY2lhdGUocHJpdik7Ci0JCX0KLQorCQlJUFdfREVCVUdfQVNTT0MoIkF0dGVtcHRpbmcgdG8gYXNzb2NpYXRlIHdpdGggbmV3ICIKKwkJCQkicGFyYW1ldGVycy5cbiIpOworCQlpcHdfYXNzb2NpYXRlKHByaXYpOworCQl1cCgmcHJpdi0+c2VtKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcHJpdi0+Y29uZmlnIHw9IENGR19TVEFUSUNfQlNTSUQ7CiAJaWYgKCFtZW1jbXAocHJpdi0+YnNzaWQsIHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKSB7CiAJCUlQV19ERUJVR19XWCgiQlNTSUQgc2V0IHRvIGN1cnJlbnQgQlNTSUQuXG4iKTsKKwkJdXAoJnByaXYtPnNlbSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTUzOSwxNSArODQ2NCwxMiBAQAogCiAJbWVtY3B5KHByaXYtPmJzc2lkLCB3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKIAotCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCwgb3IgdHJ5aW5nIHRvIGFzc29jaWF0ZQotCSAqIHRoZW4gc2VlIGlmIHRoaXMgaXMgYSBuZXcgQlNTSUQgKGNhdXNpbmcgdXMgdG8gZGlzYXNzb2NpYXRlKSAqLwotCWlmIChwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSB7Ci0JCUlQV19ERUJVR19BU1NPQygiRGlzYXNzb2NpYXRpbmcgZHVlIHRvIEJTU0lEIGNoYW5nZS5cbiIpOwotCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOwotCX0gZWxzZSB7CisJLyogTmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZWQgLS0gZm9yY2UgW3JlXWFzc29jaWF0aW9uICovCisJSVBXX0RFQlVHX0FTU09DKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byBCU1NJRCBjaGFuZ2UuXG4iKTsKKwlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCiAJCWlwd19hc3NvY2lhdGUocHJpdik7Ci0JfQogCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NTgsMTUgKzg0ODAsMTcgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQogCSAqIGNvbmZpZ3VyZWQgQlNTSUQgdGhlbiByZXR1cm4gdGhhdDsgb3RoZXJ3aXNlIHJldHVybiBBTlkgKi8KKwlkb3duKCZwcml2LT5zZW0pOwogCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0JTU0lEIHx8CiAJICAgIHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19BU1NPQ0lBVElORykpIHsKIAkJd3JxdS0+YXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCW1lbWNweSh3cnF1LT5hcF9hZGRyLnNhX2RhdGEsICZwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkod3JxdS0+YXBfYWRkci5zYV9kYXRhLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOwogCX0gZWxzZQogCQltZW1zZXQod3JxdS0+YXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CiAKIAlJUFdfREVCVUdfV1goIkdldHRpbmcgV0FQIEJTU0lEOiAiIE1BQ19GTVQgIlxuIiwKIAkJICAgICBNQUNfQVJHKHdycXUtPmFwX2FkZHIuc2FfZGF0YSkpOworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC01NTc3LDIxICs4NTAxLDIyIEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAljaGFyICplc3NpZCA9ICIiOwkvKiBBTlkgKi8KIAlpbnQgbGVuZ3RoID0gMDsKLQorCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKHdycXUtPmVzc2lkLmZsYWdzICYmIHdycXUtPmVzc2lkLmxlbmd0aCkgewogCQlsZW5ndGggPSB3cnF1LT5lc3NpZC5sZW5ndGggLSAxOwogCQllc3NpZCA9IGV4dHJhOwogCX0KIAlpZiAobGVuZ3RoID09IDApIHsKIAkJSVBXX0RFQlVHX1dYKCJTZXR0aW5nIEVTU0lEIHRvIEFOWVxuIik7Ci0JCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX1NUQVRJQ19FU1NJRDsKLQkJaWYgKCEocHJpdi0+c3RhdHVzICYgKFNUQVRVU19TQ0FOTklORyB8IFNUQVRVU19BU1NPQ0lBVEVEIHwKKwkJaWYgKChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEKSAmJgorCQkgICAgIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfAogCQkJCSAgICAgIFNUQVRVU19BU1NPQ0lBVElORykpKSB7CiAJCQlJUFdfREVCVUdfQVNTT0MoIkF0dGVtcHRpbmcgdG8gYXNzb2NpYXRlIHdpdGggbmV3ICIKIAkJCQkJInBhcmFtZXRlcnMuXG4iKTsKKwkJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX1NUQVRJQ19FU1NJRDsKIAkJCWlwd19hc3NvY2lhdGUocHJpdik7CiAJCX0KLQorCQl1cCgmcHJpdi0+c2VtKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01NjAxLDYgKzg1MjYsNyBAQAogCiAJaWYgKHByaXYtPmVzc2lkX2xlbiA9PSBsZW5ndGggJiYgIW1lbWNtcChwcml2LT5lc3NpZCwgZXh0cmEsIGxlbmd0aCkpIHsKIAkJSVBXX0RFQlVHX1dYKCJFU1NJRCBzZXQgdG8gY3VycmVudCBFU1NJRC5cbiIpOworCQl1cCgmcHJpdi0+c2VtKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01NjEwLDE1ICs4NTM2LDEyIEBACiAJcHJpdi0+ZXNzaWRfbGVuID0gbGVuZ3RoOwogCW1lbWNweShwcml2LT5lc3NpZCwgZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7CiAKLQkvKiBJZiB3ZSBhcmUgY3VycmVudGx5IGFzc29jaWF0ZWQsIG9yIHRyeWluZyB0byBhc3NvY2lhdGUKLQkgKiB0aGVuIHNlZSBpZiB0aGlzIGlzIGEgbmV3IEVTU0lEIChjYXVzaW5nIHVzIHRvIGRpc2Fzc29jaWF0ZSkgKi8KLQlpZiAocHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkgewotCQlJUFdfREVCVUdfQVNTT0MoIkRpc2Fzc29jaWF0aW5nIGR1ZSB0byBFU1NJRCBjaGFuZ2UuXG4iKTsKLQkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKLQl9IGVsc2UgeworCS8qIE5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VkIC0tIGZvcmNlIFtyZV1hc3NvY2lhdGlvbiAqLworCUlQV19ERUJVR19BU1NPQygiW3JlXWFzc29jaWF0aW9uIHRyaWdnZXJlZCBkdWUgdG8gRVNTSUQgY2hhbmdlLlxuIik7CisJaWYgKCFpcHdfZGlzYXNzb2NpYXRlKHByaXYpKQogCQlpcHdfYXNzb2NpYXRlKHByaXYpOwotCX0KIAorCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC01NjMwLDYgKzg1NTMsNyBAQAogCiAJLyogSWYgd2UgYXJlIGFzc29jaWF0ZWQsIHRyeWluZyB0byBhc3NvY2lhdGUsIG9yIGhhdmUgYSBzdGF0aWNhbGx5CiAJICogY29uZmlndXJlZCBFU1NJRCB0aGVuIHJldHVybiB0aGF0OyBvdGhlcndpc2UgcmV0dXJuIEFOWSAqLworCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQgfHwKIAkgICAgcHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkgewogCQlJUFdfREVCVUdfV1goIkdldHRpbmcgZXNzaWQ6ICclcydcbiIsCkBAIC01NjQyLDcgKzg1NjYsNyBAQAogCQl3cnF1LT5lc3NpZC5sZW5ndGggPSAwOwogCQl3cnF1LT5lc3NpZC5mbGFncyA9IDA7CS8qIGFjdGl2ZSAqLwogCX0KLQorCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC01NjU1LDExICs4NTc5LDEyIEBACiAJSVBXX0RFQlVHX1dYKCJTZXR0aW5nIG5pY2sgdG8gJyVzJ1xuIiwgZXh0cmEpOwogCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQogCQlyZXR1cm4gLUUyQklHOwotCisJZG93bigmcHJpdi0+c2VtKTsKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IG1pbigoc2l6ZV90KSB3cnF1LT5kYXRhLmxlbmd0aCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKIAltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKIAltZW1jcHkocHJpdi0+bmljaywgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKIAlJUFdfREVCVUdfVFJBQ0UoIjw8XG4iKTsKKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gMDsKIAogfQpAQCAtNTY3MCw5ICs4NTk1LDExIEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlJUFdfREVCVUdfV1goIkdldHRpbmcgbmlja1xuIik7CisJZG93bigmcHJpdi0+c2VtKTsKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKSArIDE7CiAJbWVtY3B5KGV4dHJhLCBwcml2LT5uaWNrLCB3cnF1LT5kYXRhLmxlbmd0aCk7CiAJd3JxdS0+ZGF0YS5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC01NjgwLDggKzg2MDcsMTEzIEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0JSVBXX0RFQlVHX1dYKCIweCVwLCAweCVwLCAweCVwXG4iLCBkZXYsIGluZm8sIHdycXUpOwotCXJldHVybiAtRU9QTk9UU1VQUDsKKwkvKiBUT0RPOiBXZSBzaG91bGQgdXNlIHNlbWFwaG9yZXMgb3IgbG9ja3MgZm9yIGFjY2VzcyB0byBwcml2ICovCisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1MzIgdGFyZ2V0X3JhdGUgPSB3cnF1LT5iaXRyYXRlLnZhbHVlOworCXUzMiBmaXhlZCwgbWFzazsKKworCS8qIHZhbHVlID0gLTEsIGZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHdlIHNob3VsZCB1c2UgYWxsIHJhdGVzIG9mZmVyZWQgYnkgQVAgKi8KKwkvKiB2YWx1ZSA9IFgsIGZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWCAqLworCS8qIHZhbHVlID0gWCwgZml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyBsb3dlciBlcXVhbCBYICovCisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gLTEpIHsKKwkJZml4ZWQgPSAwOworCQltYXNrID0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSzsKKwkJLyogTm93IHdlIHNob3VsZCByZWFzc29jaWF0ZSAqLworCQlnb3RvIGFwcGx5OworCX0KKworCW1hc2sgPSAwOworCWZpeGVkID0gd3JxdS0+Yml0cmF0ZS5maXhlZDsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSAxMDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDEwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMjAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSAyMDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDU1MDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gNTUwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSA2MDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSA2MDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDkwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDkwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMTEwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDExMDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDEyMDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMTIwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMTgwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSAxODAwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSAyNDAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDI0MDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDM2MDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMzYwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gNDgwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSA0ODAwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSA1NDAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDU0MDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJSVBXX0RFQlVHX1dYKCJpbnZhbGlkIHJhdGUgc3BlY2lmaWVkLCByZXR1cm5pbmcgZXJyb3JcbiIpOworCXJldHVybiAtRUlOVkFMOworCisgICAgICBhcHBseToKKwlJUFdfREVCVUdfV1goIlNldHRpbmcgcmF0ZSBtYXNrIHRvIDB4JTA4WCBbJXNdXG4iLAorCQkgICAgIG1hc2ssIGZpeGVkID8gImZpeGVkIiA6ICJzdWItcmF0ZXMiKTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlmIChtYXNrID09IElFRUU4MDIxMV9ERUZBVUxUX1JBVEVTX01BU0spIHsKKwkJcHJpdi0+Y29uZmlnICY9IH5DRkdfRklYRURfUkFURTsKKwkJaXB3X3NldF9maXhlZF9yYXRlKHByaXYsIHByaXYtPmllZWUtPm1vZGUpOworCX0gZWxzZQorCQlwcml2LT5jb25maWcgfD0gQ0ZHX0ZJWEVEX1JBVEU7CisKKwlpZiAocHJpdi0+cmF0ZXNfbWFzayA9PSBtYXNrKSB7CisJCUlQV19ERUJVR19XWCgiTWFzayBzZXQgdG8gY3VycmVudCBtYXNrLlxuIik7CisJCXVwKCZwcml2LT5zZW0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcml2LT5yYXRlc19tYXNrID0gbWFzazsKKworCS8qIE5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VkIC0tIGZvcmNlIFtyZV1hc3NvY2lhdGlvbiAqLworCUlQV19ERUJVR19BU1NPQygiW3JlXWFzc29jaWF0aW9uIHRyaWdnZXJlZCBkdWUgdG8gcmF0ZXMgY2hhbmdlLlxuIik7CisJaWYgKCFpcHdfZGlzYXNzb2NpYXRlKHByaXYpKQorCQlpcHdfYXNzb2NpYXRlKHByaXYpOworCisJdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01Njg5LDggKzg3MjEsOSBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlkb3duKCZwcml2LT5zZW0pOwogCXdycXUtPmJpdHJhdGUudmFsdWUgPSBwcml2LT5sYXN0X3JhdGU7Ci0KKwl1cCgmcHJpdi0+c2VtKTsKIAlJUFdfREVCVUdfV1goIkdFVCBSYXRlIC0+ICVkIFxuIiwgd3JxdS0+Yml0cmF0ZS52YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzAwLDE4ICs4NzMzLDIwIEBACiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCWlmICh3cnF1LT5ydHMuZGlzYWJsZWQpCiAJCXByaXYtPnJ0c190aHJlc2hvbGQgPSBERUZBVUxUX1JUU19USFJFU0hPTEQ7CiAJZWxzZSB7CiAJCWlmICh3cnF1LT5ydHMudmFsdWUgPCBNSU5fUlRTX1RIUkVTSE9MRCB8fAotCQkgICAgd3JxdS0+cnRzLnZhbHVlID4gTUFYX1JUU19USFJFU0hPTEQpCisJCSAgICB3cnF1LT5ydHMudmFsdWUgPiBNQVhfUlRTX1RIUkVTSE9MRCkgeworCQkJdXAoJnByaXYtPnNlbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQorCQl9CiAJCXByaXYtPnJ0c190aHJlc2hvbGQgPSB3cnF1LT5ydHMudmFsdWU7CiAJfQogCiAJaXB3X3NlbmRfcnRzX3RocmVzaG9sZChwcml2LCBwcml2LT5ydHNfdGhyZXNob2xkKTsKKwl1cCgmcHJpdi0+c2VtKTsKIAlJUFdfREVCVUdfV1goIlNFVCBSVFMgVGhyZXNob2xkIC0+ICVkIFxuIiwgcHJpdi0+cnRzX3RocmVzaG9sZCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzIxLDEwICs4NzU2LDExIEBACiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJZG93bigmcHJpdi0+c2VtKTsKIAl3cnF1LT5ydHMudmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkOwogCXdycXUtPnJ0cy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCiAJd3JxdS0+cnRzLmRpc2FibGVkID0gKHdycXUtPnJ0cy52YWx1ZSA9PSBERUZBVUxUX1JUU19USFJFU0hPTEQpOwotCisJdXAoJnByaXYtPnNlbSk7CiAJSVBXX0RFQlVHX1dYKCJHRVQgUlRTIFRocmVzaG9sZCAtPiAlZCBcbiIsIHdycXUtPnJ0cy52YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzM0LDQxICs4NzcwLDMzIEBACiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXB3X3R4X3Bvd2VyIHR4X3Bvd2VyOwotCWludCBpOworCWludCBlcnIgPSAwOwogCi0JaWYgKGlwd19yYWRpb19raWxsX3N3KHByaXYsIHdycXUtPnBvd2VyLmRpc2FibGVkKSkKLQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwlkb3duKCZwcml2LT5zZW0pOworCWlmIChpcHdfcmFkaW9fa2lsbF9zdyhwcml2LCB3cnF1LT5wb3dlci5kaXNhYmxlZCkpIHsKKwkJZXJyID0gLUVJTlBST0dSRVNTOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAod3JxdS0+cG93ZXIuZmxhZ3MgIT0gSVdfVFhQT1dfREJNKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXdycXUtPnBvd2VyLmZpeGVkKQorCQl3cnF1LT5wb3dlci52YWx1ZSA9IElQV19UWF9QT1dFUl9ERUZBVUxUOwogCi0JaWYgKCh3cnF1LT5wb3dlci52YWx1ZSA+IDIwKSB8fCAod3JxdS0+cG93ZXIudmFsdWUgPCAtMTIpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAod3JxdS0+cG93ZXIuZmxhZ3MgIT0gSVdfVFhQT1dfREJNKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgod3JxdS0+cG93ZXIudmFsdWUgPiBJUFdfVFhfUE9XRVJfTUFYKSB8fAorCSAgICAod3JxdS0+cG93ZXIudmFsdWUgPCBJUFdfVFhfUE9XRVJfTUlOKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CiAKIAlwcml2LT50eF9wb3dlciA9IHdycXUtPnBvd2VyLnZhbHVlOwotCi0JbWVtc2V0KCZ0eF9wb3dlciwgMCwgc2l6ZW9mKHR4X3Bvd2VyKSk7Ci0KLQkvKiBjb25maWd1cmUgZGV2aWNlIGZvciAnRycgYmFuZCAqLwotCXR4X3Bvd2VyLmllZWVfbW9kZSA9IElQV19HX01PREU7Ci0JdHhfcG93ZXIubnVtX2NoYW5uZWxzID0gMTE7Ci0JZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKLQkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0uY2hhbm5lbF9udW1iZXIgPSBpICsgMTsKLQkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0udHhfcG93ZXIgPSBwcml2LT50eF9wb3dlcjsKLQl9Ci0JaWYgKGlwd19zZW5kX3R4X3Bvd2VyKHByaXYsICZ0eF9wb3dlcikpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBjb25maWd1cmUgZGV2aWNlIHRvIGFsc28gaGFuZGxlICdCJyBiYW5kICovCi0JdHhfcG93ZXIuaWVlZV9tb2RlID0gSVBXX0JfTU9ERTsKLQlpZiAoaXB3X3NlbmRfdHhfcG93ZXIocHJpdiwgJnR4X3Bvd2VyKSkKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiAwOwotCi0gICAgICBlcnJvcjoKLQlyZXR1cm4gLUVJTzsKKwllcnIgPSBpcHdfc2V0X3R4X3Bvd2VyKHByaXYpOworICAgICAgb3V0OgorCXVwKCZwcml2LT5zZW0pOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X2dldF90eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTc3NiwxNCArODgwNCwxNSBAQAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCXdycXUtPnBvd2VyLnZhbHVlID0gcHJpdi0+dHhfcG93ZXI7CiAJd3JxdS0+cG93ZXIuZml4ZWQgPSAxOwogCXdycXUtPnBvd2VyLmZsYWdzID0gSVdfVFhQT1dfREJNOwogCXdycXUtPnBvd2VyLmRpc2FibGVkID0gKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spID8gMSA6IDA7CisJdXAoJnByaXYtPnNlbSk7CiAKIAlJUFdfREVCVUdfV1goIkdFVCBUWCBQb3dlciAtPiAlcyAlZCBcbiIsCi0JCSAgICAgd3JxdS0+cG93ZXIuZGlzYWJsZWQgPyAiT04iIDogIk9GRiIsIHdycXUtPnBvd2VyLnZhbHVlKTsKKwkJICAgICB3cnF1LT5wb3dlci5kaXNhYmxlZCA/ICJPRkYiIDogIk9OIiwgd3JxdS0+cG93ZXIudmFsdWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzkzLDE4ICs4ODIyLDIxIEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAod3JxdS0+ZnJhZy5kaXNhYmxlZCkKIAkJcHJpdi0+aWVlZS0+ZnRzID0gREVGQVVMVF9GVFM7CiAJZWxzZSB7CiAJCWlmICh3cnF1LT5mcmFnLnZhbHVlIDwgTUlOX0ZSQUdfVEhSRVNIT0xEIHx8Ci0JCSAgICB3cnF1LT5mcmFnLnZhbHVlID4gTUFYX0ZSQUdfVEhSRVNIT0xEKQorCQkgICAgd3JxdS0+ZnJhZy52YWx1ZSA+IE1BWF9GUkFHX1RIUkVTSE9MRCkgeworCQkJdXAoJnByaXYtPnNlbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCiAJCXByaXYtPmllZWUtPmZ0cyA9IHdycXUtPmZyYWcudmFsdWUgJiB+MHgxOwogCX0KIAogCWlwd19zZW5kX2ZyYWdfdGhyZXNob2xkKHByaXYsIHdycXUtPmZyYWcudmFsdWUpOworCXVwKCZwcml2LT5zZW0pOwogCUlQV19ERUJVR19XWCgiU0VUIEZyYWcgVGhyZXNob2xkIC0+ICVkIFxuIiwgd3JxdS0+ZnJhZy52YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01ODE0LDEwICs4ODQ2LDExIEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWRvd24oJnByaXYtPnNlbSk7CiAJd3JxdS0+ZnJhZy52YWx1ZSA9IHByaXYtPmllZWUtPmZ0czsKIAl3cnF1LT5mcmFnLmZpeGVkID0gMDsJLyogbm8gYXV0byBzZWxlY3QgKi8KIAl3cnF1LT5mcmFnLmRpc2FibGVkID0gKHdycXUtPmZyYWcudmFsdWUgPT0gREVGQVVMVF9GVFMpOwotCisJdXAoJnByaXYtPnNlbSk7CiAJSVBXX0RFQlVHX1dYKCJHRVQgRnJhZyBUaHJlc2hvbGQgLT4gJWQgXG4iLCB3cnF1LT5mcmFnLnZhbHVlKTsKIAogCXJldHVybiAwOwpAQCAtNTgyNywxNiArODg2MCwxMjggQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCUlQV19ERUJVR19XWCgiMHglcCwgMHglcCwgMHglcFxuIiwgZGV2LCBpbmZvLCB3cnF1KTsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX0xJRkVUSU1FIHx8IHdycXUtPnJldHJ5LmRpc2FibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElNSVQpKQorCQlyZXR1cm4gMDsKKworCWlmICh3cnF1LT5yZXRyeS52YWx1ZSA8IDAgfHwgd3JxdS0+cmV0cnkudmFsdWUgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJZG93bigmcHJpdi0+c2VtKTsKKwlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NSU4pCisJCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gKHU4KSB3cnF1LT5yZXRyeS52YWx1ZTsKKwllbHNlIGlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01BWCkKKwkJcHJpdi0+bG9uZ19yZXRyeV9saW1pdCA9ICh1OCkgd3JxdS0+cmV0cnkudmFsdWU7CisJZWxzZSB7CisJCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gKHU4KSB3cnF1LT5yZXRyeS52YWx1ZTsKKwkJcHJpdi0+bG9uZ19yZXRyeV9saW1pdCA9ICh1OCkgd3JxdS0+cmV0cnkudmFsdWU7CisJfQorCisJaXB3X3NlbmRfcmV0cnlfbGltaXQocHJpdiwgcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQsCisJCQkgICAgIHByaXYtPmxvbmdfcmV0cnlfbGltaXQpOworCXVwKCZwcml2LT5zZW0pOworCUlQV19ERUJVR19XWCgiU0VUIHJldHJ5IGxpbWl0IC0+IHNob3J0OiVkIGxvbmc6JWRcbiIsCisJCSAgICAgcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQsIHByaXYtPmxvbmdfcmV0cnlfbGltaXQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlwd193eF9nZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCUlQV19ERUJVR19XWCgiMHglcCwgMHglcCwgMHglcFxuIiwgZGV2LCBpbmZvLCB3cnF1KTsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCWRvd24oJnByaXYtPnNlbSk7CisJd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOworCisJaWYgKCh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7CisJCXVwKCZwcml2LT5zZW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpIHsKKwkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwkJd3JxdS0+cmV0cnkudmFsdWUgPSBwcml2LT5sb25nX3JldHJ5X2xpbWl0OworCX0gZWxzZSBpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NSU4pIHsKKwkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01JTjsKKwkJd3JxdS0+cmV0cnkudmFsdWUgPSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdDsKKwl9IGVsc2UgeworCQl3cnF1LT5yZXRyeS5mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OworCX0KKwl1cCgmcHJpdi0+c2VtKTsKKworCUlQV19ERUJVR19XWCgiR0VUIHJldHJ5IC0+ICVkIFxuIiwgd3JxdS0+cmV0cnkudmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3JlcXVlc3RfZGlyZWN0X3NjYW4oc3RydWN0IGlwd19wcml2ICpwcml2LCBjaGFyICplc3NpZCwKKwkJCQkgICBpbnQgZXNzaWRfbGVuKQoreworCXN0cnVjdCBpcHdfc2Nhbl9yZXF1ZXN0X2V4dCBzY2FuOworCWludCBlcnIgPSAwLCBzY2FuX3R5cGU7CisKKwlkb3duKCZwcml2LT5zZW0pOworCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spIHsKKwkJSVBXX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBraWxsIGFjdGl2YXRpb25cbiIpOworCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fUEVORElORzsKKwkJZ290byBkb25lOworCX0KKworCUlQV19ERUJVR19IQygic3RhcnRpbmcgcmVxdWVzdCBkaXJlY3Qgc2NhbiFcbiIpOworCisJaWYgKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfU0NBTk5JTkcgfCBTVEFUVVNfU0NBTl9BQk9SVElORykpIHsKKwkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHByaXYtPndhaXRfc3RhdGUsCisJCQkJCSAgICAgICAhKHByaXYtPgorCQkJCQkJIHN0YXR1cyAmIChTVEFUVVNfU0NBTk5JTkcgfAorCQkJCQkJCSAgIFNUQVRVU19TQ0FOX0FCT1JUSU5HKSkpOworCQlpZiAoZXJyKSB7CisJCQlJUFdfREVCVUdfSEMoImFib3J0aW5nIGRpcmVjdCBzY2FuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc2NhbikpOworCisJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TUEVFRF9TQ0FOKQorCQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOXSA9CisJCSAgICBjcHVfdG9fbGUxNigzMCk7CisJZWxzZQorCQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOXSA9CisJCSAgICBjcHVfdG9fbGUxNigyMCk7CisKKwlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9BTkRfRElSRUNUX1NDQU5dID0KKwkgICAgY3B1X3RvX2xlMTYoMjApOworCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTl0gPSBjcHVfdG9fbGUxNigxMjApOworCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfRElSRUNUX1NDQU5dID0gY3B1X3RvX2xlMTYoMjApOworCisJc2Nhbi5mdWxsX3NjYW5faW5kZXggPSBjcHVfdG9fbGUzMihpZWVlODAyMTFfZ2V0X3NjYW5zKHByaXYtPmllZWUpKTsKKworCWVyciA9IGlwd19zZW5kX3NzaWQocHJpdiwgZXNzaWQsIGVzc2lkX2xlbik7CisJaWYgKGVycikgeworCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBTU0lEIGNvbW1hbmQgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwlzY2FuX3R5cGUgPSBJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX0FORF9ESVJFQ1RfU0NBTjsKKworCWlwd19hZGRfc2Nhbl9jaGFubmVscyhwcml2LCAmc2Nhbiwgc2Nhbl90eXBlKTsKKworCWVyciA9IGlwd19zZW5kX3NjYW5fcmVxdWVzdF9leHQocHJpdiwgJnNjYW4pOworCWlmIChlcnIpIHsKKwkJSVBXX0RFQlVHX0hDKCJTZW5kaW5nIHNjYW4gY29tbWFuZCBmYWlsZWQ6ICUwOFhcbiIsIGVycik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5OSU5HOworCisgICAgICBkb25lOgorCXVwKCZwcml2LT5zZW0pOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01ODQ0LDkgKzg5ODksMjEgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSBOVUxMOworCWlmICh3cnF1LT5kYXRhLmxlbmd0aAorCSAgICAmJiB3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkgeworCQlyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisJCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7CisJCQlpcHdfcmVxdWVzdF9kaXJlY3Rfc2Nhbihwcml2LCByZXEtPmVzc2lkLAorCQkJCQkJcmVxLT5lc3NpZF9sZW4pOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKIAlJUFdfREVCVUdfV1goIlN0YXJ0IHNjYW5cbiIpOwotCWlmIChpcHdfcmVxdWVzdF9zY2FuKHByaXYpKQotCQlyZXR1cm4gLUVJTzsKKworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01ODYzLDcgKzkwMjAsMjEgQEAKIAkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CisJaW50IHJldDsKKwl1MzIgY2FwID0gcHJpdi0+Y2FwYWJpbGl0eTsKKworCWRvd24oJnByaXYtPnNlbSk7CisJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9lbmNvZGUocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwga2V5KTsKKworCS8qIEluIElCU1MgbW9kZSwgd2UgbmVlZCB0byBub3RpZnkgdGhlIGZpcm13YXJlIHRvIHVwZGF0ZQorCSAqIHRoZSBiZWFjb24gaW5mbyBhZnRlciB3ZSBjaGFuZ2VkIHRoZSBjYXBhYmlsaXR5LiAqLworCWlmIChjYXAgIT0gcHJpdi0+Y2FwYWJpbGl0eSAmJgorCSAgICBwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MgJiYKKwkgICAgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCisJCWlwd19kaXNhc3NvY2lhdGUocHJpdik7CisKKwl1cCgmcHJpdi0+c2VtKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGlwd193eF9nZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01ODgwLDE3ICs5MDUxLDE3IEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgZXJyOwotCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAod3JxdS0+cG93ZXIuZGlzYWJsZWQpIHsKIAkJcHJpdi0+cG93ZXJfbW9kZSA9IElQV19QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKIAkJZXJyID0gaXB3X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJUFdfUE9XRVJfTU9ERV9DQU0pOwogCQlpZiAoZXJyKSB7CiAJCQlJUFdfREVCVUdfV1goImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKKwkJCXVwKCZwcml2LT5zZW0pOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCiAJCUlQV19ERUJVR19XWCgiU0VUIFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAtPiBvZmZcbiIpOwotCisJCXVwKCZwcml2LT5zZW0pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTU5MDIsNiArOTA3Myw3IEBACiAJZGVmYXVsdDoJCS8qIE90aGVyd2lzZSB3ZSBkb24ndCBzdXBwb3J0IGl0ICovCiAJCUlQV19ERUJVR19XWCgiU0VUIFBNIE1vZGU6ICVYIG5vdCBzdXBwb3J0ZWQuXG4iLAogCQkJICAgICB3cnF1LT5wb3dlci5mbGFncyk7CisJCXVwKCZwcml2LT5zZW0pOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC01OTE0LDExICs5MDg2LDEyIEBACiAJZXJyID0gaXB3X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJUFdfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSkpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX1dYKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CisJCXVwKCZwcml2LT5zZW0pOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCUlQV19ERUJVR19XWCgiU0VUIFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAtPiAweCUwMlhcbiIsIHByaXYtPnBvd2VyX21vZGUpOwotCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5MjcsMTMgKzkxMDAsMTMgQEAKIAkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCi0JaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkgeworCWRvd24oJnByaXYtPnNlbSk7CisJaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAxOwotCX0gZWxzZSB7CisJZWxzZQogCQl3cnF1LT5wb3dlci5kaXNhYmxlZCA9IDA7Ci0JfQogCisJdXAoJnByaXYtPnNlbSk7CiAJSVBXX0RFQlVHX1dYKCJHRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+ICUwMlhcbiIsIHByaXYtPnBvd2VyX21vZGUpOwogCiAJcmV0dXJuIDA7CkBAIC01OTQ2LDcgKzkxMTksNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IG1vZGUgPSAqKGludCAqKWV4dHJhOwogCWludCBlcnI7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCWlmICgobW9kZSA8IDEpIHx8IChtb2RlID4gSVBXX1BPV0VSX0xJTUlUKSkgewogCQltb2RlID0gSVBXX1BPV0VSX0FDOwogCQlwcml2LT5wb3dlcl9tb2RlID0gbW9kZTsKQEAgLTU5NTksMTAgKzkxMzIsMTEgQEAKIAogCQlpZiAoZXJyKSB7CiAJCQlJUFdfREVCVUdfV1goImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKKwkJCXVwKCZwcml2LT5zZW0pOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQorCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC02MDExLDcgKzkxODUsNyBAQAogCQlJUFdfV0FSTklORygiQXR0ZW1wdCB0byBzZXQgaW52YWxpZCB3aXJlbGVzcyBtb2RlOiAlZFxuIiwgbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQorCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKHByaXYtPmFkYXB0ZXIgPT0gSVBXXzI5MTVBQkcpIHsKIAkJcHJpdi0+aWVlZS0+YWJnX3RydWUgPSAxOwogCQlpZiAobW9kZSAmIElFRUVfQSkgewpAQCAtNjAyMyw2ICs5MTk3LDcgQEAKIAkJaWYgKG1vZGUgJiBJRUVFX0EpIHsKIAkJCUlQV19XQVJOSU5HKCJBdHRlbXB0IHRvIHNldCAyMjAwQkcgaW50byAiCiAJCQkJICAgICI4MDIuMTFhIG1vZGVcbiIpOworCQkJdXAoJnByaXYtPnNlbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC02MDQ2LDIwICs5MjIxLDIwIEBACiAJcHJpdi0+aWVlZS0+bW9kdWxhdGlvbiA9IG1vZHVsYXRpb247CiAJaW5pdF9zdXBwb3J0ZWRfcmF0ZXMocHJpdiwgJnByaXYtPnJhdGVzKTsKIAotCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCwgb3IgdHJ5aW5nIHRvIGFzc29jaWF0ZQotCSAqIHRoZW4gc2VlIGlmIHRoaXMgaXMgYSBuZXcgY29uZmlndXJhdGlvbiAoY2F1c2luZyB1cyB0bwotCSAqIGRpc2Fzc29jaWF0ZSkgKi8KLQlpZiAocHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkgewotCQkvKiBUaGUgcmVzdWx0aW5nIGFzc29jaWF0aW9uIHdpbGwgdHJpZ2dlcgotCQkgKiB0aGUgbmV3IHJhdGVzIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZSAqLwotCQlJUFdfREVCVUdfQVNTT0MoIkRpc2Fzc29jaWF0aW5nIGR1ZSB0byBtb2RlIGNoYW5nZS5cbiIpOwotCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOwotCX0gZWxzZQorCS8qIE5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VkIC0tIGZvcmNlIFtyZV1hc3NvY2lhdGlvbiAqLworCUlQV19ERUJVR19BU1NPQygiW3JlXWFzc29jaWF0aW9uIHRyaWdnZXJlZCBkdWUgdG8gbW9kZSBjaGFuZ2UuXG4iKTsKKwlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpIHsKIAkJaXB3X3NlbmRfc3VwcG9ydGVkX3JhdGVzKHByaXYsICZwcml2LT5yYXRlcyk7CisJCWlwd19hc3NvY2lhdGUocHJpdik7CisJfQorCisJLyogVXBkYXRlIHRoZSBiYW5kIExFRHMgKi8KKwlpcHdfbGVkX2JhbmRfb24ocHJpdik7CiAKIAlJUFdfREVCVUdfV1goIlBSSVYgU0VUIE1PREU6ICVjJWMlY1xuIiwKIAkJICAgICBtb2RlICYgSUVFRV9BID8gJ2EnIDogJy4nLAogCQkgICAgIG1vZGUgJiBJRUVFX0IgPyAnYicgOiAnLicsIG1vZGUgJiBJRUVFX0cgPyAnZycgOiAnLicpOworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC02MDY4LDEyNCArOTI0MywyMzQgQEAKIAkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQotCXN3aXRjaCAocHJpdi0+aWVlZS0+ZnJlcV9iYW5kKSB7Ci0JY2FzZSBJRUVFODAyMTFfMjRHSFpfQkFORDoKLQkJc3dpdGNoIChwcml2LT5pZWVlLT5tb2R1bGF0aW9uKSB7Ci0JCWNhc2UgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOgotCQkJc3RybmNweShleHRyYSwgIjgwMi4xMWIgKDIpIiwgTUFYX1dYX1NUUklORyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OOgotCQkJc3RybmNweShleHRyYSwgIjgwMi4xMWcgKDQpIiwgTUFYX1dYX1NUUklORyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFiZyAoNikiLCBNQVhfV1hfU1RSSU5HKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKKwlkb3duKCZwcml2LT5zZW0pOworCXN3aXRjaCAocHJpdi0+aWVlZS0+bW9kZSkgeworCWNhc2UgSUVFRV9BOgogCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYSAoMSkiLCBNQVhfV1hfU1RSSU5HKTsKIAkJYnJlYWs7Ci0KLQlkZWZhdWx0OgkJLyogTWl4ZWQgQmFuZCAqLwotCQlzd2l0Y2ggKHByaXYtPmllZWUtPm1vZHVsYXRpb24pIHsKLQkJY2FzZSBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT046Ci0JCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYWIgKDMpIiwgTUFYX1dYX1NUUklORyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OOgotCQkJc3RybmNweShleHRyYSwgIjgwMi4xMWFnICg1KSIsIE1BWF9XWF9TVFJJTkcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYWJnICg3KSIsIE1BWF9XWF9TVFJJTkcpOwotCQkJYnJlYWs7Ci0JCX0KKwljYXNlIElFRUVfQjoKKwkJc3RybmNweShleHRyYSwgIjgwMi4xMWIgKDIpIiwgTUFYX1dYX1NUUklORyk7CisJCWJyZWFrOworCWNhc2UgSUVFRV9BIHwgSUVFRV9COgorCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYWIgKDMpIiwgTUFYX1dYX1NUUklORyk7CisJCWJyZWFrOworCWNhc2UgSUVFRV9HOgorCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExZyAoNCkiLCBNQVhfV1hfU1RSSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFX0EgfCBJRUVFX0c6CisJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhZyAoNSkiLCBNQVhfV1hfU1RSSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFX0IgfCBJRUVFX0c6CisJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFiZyAoNikiLCBNQVhfV1hfU1RSSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFX0EgfCBJRUVFX0IgfCBJRUVFX0c6CisJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhYmcgKDcpIiwgTUFYX1dYX1NUUklORyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0cm5jcHkoZXh0cmEsICJ1bmtub3duIiwgTUFYX1dYX1NUUklORyk7CiAJCWJyZWFrOwogCX0KIAogCUlQV19ERUJVR19XWCgiUFJJViBHRVQgTU9ERTogJXNcbiIsIGV4dHJhKTsKIAogCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7CisJdXAoJnByaXYtPnNlbSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19JUFdfUFJPTUlTQwotc3RhdGljIGludCBpcHdfd3hfc2V0X3Byb21pc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgaXB3X3d4X3NldF9wcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpbnQgbW9kZSA9ICooaW50ICopZXh0cmE7CisJZG93bigmcHJpdi0+c2VtKTsKKwkvKiBTd2l0Y2hpbmcgZnJvbSBTSE9SVCAtPiBMT05HIHJlcXVpcmVzIGEgZGlzYXNzb2NpYXRpb24gKi8KKwlpZiAobW9kZSA9PSAxKSB7CisJCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19QUkVBTUJMRV9MT05HKSkgeworCQkJcHJpdi0+Y29uZmlnIHw9IENGR19QUkVBTUJMRV9MT05HOworCisJCQkvKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCAtLSBmb3JjZSBbcmVdYXNzb2NpYXRpb24gKi8KKwkJCUlQV19ERUJVR19BU1NPQworCQkJICAgICgiW3JlXWFzc29jaWF0aW9uIHRyaWdnZXJlZCBkdWUgdG8gcHJlYW1ibGUgY2hhbmdlLlxuIik7CisJCQlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCisJCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKKwkJfQorCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKG1vZGUgPT0gMCkgeworCQlwcml2LT5jb25maWcgJj0gfkNGR19QUkVBTUJMRV9MT05HOworCQlnb3RvIGRvbmU7CisJfQorCXVwKCZwcml2LT5zZW0pOworCXJldHVybiAtRUlOVkFMOworCisgICAgICBkb25lOgorCXVwKCZwcml2LT5zZW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwd193eF9nZXRfcHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1BSRUFNQkxFX0xPTkcpCisJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAibG9uZyAoMSkiKTsKKwllbHNlCisJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiYXV0byAoMCkiKTsKKwl1cCgmcHJpdi0+c2VtKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKK3N0YXRpYyBpbnQgaXB3X3d4X3NldF9tb25pdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgKnBhcm1zID0gKGludCAqKWV4dHJhOwogCWludCBlbmFibGUgPSAocGFybXNbMF0gPiAwKTsKLQotCUlQV19ERUJVR19XWCgiU0VUIFBST01JU0M6ICVkICVkXG4iLCBlbmFibGUsIHBhcm1zWzFdKTsKKwlkb3duKCZwcml2LT5zZW0pOworCUlQV19ERUJVR19XWCgiU0VUIE1PTklUT1I6ICVkICVkXG4iLCBlbmFibGUsIHBhcm1zWzFdKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKwkJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworI2Vsc2UKIAkJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwotCQkJaXB3X2FkYXB0ZXJfcmVzdGFydChwcml2KTsKKyNlbmRpZgorCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOwogCQl9CiAKIAkJaXB3X3NldF9jaGFubmVsKHByaXYsIHBhcm1zWzFdKTsKIAl9IGVsc2UgewotCQlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX01PTklUT1IpCisJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworCQkJdXAoJnByaXYtPnNlbSk7CiAJCQlyZXR1cm4gMDsKKwkJfQogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwotCQlpcHdfYWRhcHRlcl9yZXN0YXJ0KHByaXYpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFkYXB0ZXJfcmVzdGFydCk7CiAJfQorCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCisjZW5kaWYJCQkJLy8gQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCiBzdGF0aWMgaW50IGlwd193eF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJSVBXX0RFQlVHX1dYKCJSRVNFVFxuIik7Ci0JaXB3X2FkYXB0ZXJfcmVzdGFydChwcml2KTsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFkYXB0ZXJfcmVzdGFydCk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYJCQkJLy8gQ09ORklHX0lQV19QUk9NSVNDCisKK3N0YXRpYyBpbnQgaXB3X3d4X3N3X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXVfc2VjID0geworCQkuZW5jb2RpbmcgPSB7CisJCQkgICAgIC5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRCwKKwkJCSAgICAgfSwKKwl9OworCWludCByZXQ7CisKKwlJUFdfREVCVUdfV1goIlNXX1JFU0VUXG4iKTsKKworCWRvd24oJnByaXYtPnNlbSk7CisKKwlyZXQgPSBpcHdfc3dfcmVzZXQocHJpdiwgMCk7CisJaWYgKCFyZXQpIHsKKwkJZnJlZV9maXJtd2FyZSgpOworCQlpcHdfYWRhcHRlcl9yZXN0YXJ0KHByaXYpOworCX0KKworCS8qIFRoZSBTVyByZXNldCBiaXQgbWlnaHQgaGF2ZSBiZWVuIHRvZ2dsZWQgb24gYnkgdGhlICdkaXNhYmxlJworCSAqIG1vZHVsZSBwYXJhbWV0ZXIsIHNvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uICovCisJaXB3X3JhZGlvX2tpbGxfc3cocHJpdiwgcHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpOworCisJdXAoJnByaXYtPnNlbSk7CisJaWVlZTgwMjExX3d4X3NldF9lbmNvZGUocHJpdi0+aWVlZSwgaW5mbywgJndycXVfc2VjLCBOVUxMKTsKKwlkb3duKCZwcml2LT5zZW0pOworCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykpIHsKKwkJLyogQ29uZmlndXJhdGlvbiBsaWtlbHkgY2hhbmdlZCAtLSBmb3JjZSBbcmVdYXNzb2NpYXRpb24gKi8KKwkJSVBXX0RFQlVHX0FTU09DKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byBzdyAiCisJCQkJInJlc2V0LlxuIik7CisJCWlmICghaXB3X2Rpc2Fzc29jaWF0ZShwcml2KSkKKwkJCWlwd19hc3NvY2lhdGUocHJpdik7CisJfQorCisJdXAoJnByaXYtPnNlbSk7CisKKwlyZXR1cm4gMDsKK30KIAogLyogUmViYXNlIHRoZSBXRSBJT0NUTHMgdG8gemVybyBmb3IgdGhlIGhhbmRsZXIgYXJyYXkgKi8KICNkZWZpbmUgSVdfSU9DVEwoeCkgWyh4KS1TSU9DU0lXQ09NTUlUXQogc3RhdGljIGl3X2hhbmRsZXIgaXB3X3d4X2hhbmRsZXJzW10gPSB7Ci0JSVdfSU9DVEwoU0lPQ0dJV05BTUUpCT0gaXB3X3d4X2dldF9uYW1lLAotCUlXX0lPQ1RMKFNJT0NTSVdGUkVRKQk9IGlwd193eF9zZXRfZnJlcSwKLQlJV19JT0NUTChTSU9DR0lXRlJFUSkJPSBpcHdfd3hfZ2V0X2ZyZXEsCi0JSVdfSU9DVEwoU0lPQ1NJV01PREUpCT0gaXB3X3d4X3NldF9tb2RlLAotCUlXX0lPQ1RMKFNJT0NHSVdNT0RFKQk9IGlwd193eF9nZXRfbW9kZSwKLQlJV19JT0NUTChTSU9DR0lXUkFOR0UpCT0gaXB3X3d4X2dldF9yYW5nZSwKLQlJV19JT0NUTChTSU9DU0lXQVApCT0gaXB3X3d4X3NldF93YXAsCi0JSVdfSU9DVEwoU0lPQ0dJV0FQKQk9IGlwd193eF9nZXRfd2FwLAotCUlXX0lPQ1RMKFNJT0NTSVdTQ0FOKQk9IGlwd193eF9zZXRfc2NhbiwKLQlJV19JT0NUTChTSU9DR0lXU0NBTikJPSBpcHdfd3hfZ2V0X3NjYW4sCi0JSVdfSU9DVEwoU0lPQ1NJV0VTU0lEKQk9IGlwd193eF9zZXRfZXNzaWQsCi0JSVdfSU9DVEwoU0lPQ0dJV0VTU0lEKQk9IGlwd193eF9nZXRfZXNzaWQsCi0JSVdfSU9DVEwoU0lPQ1NJV05JQ0tOKQk9IGlwd193eF9zZXRfbmljaywKLQlJV19JT0NUTChTSU9DR0lXTklDS04pCT0gaXB3X3d4X2dldF9uaWNrLAotCUlXX0lPQ1RMKFNJT0NTSVdSQVRFKQk9IGlwd193eF9zZXRfcmF0ZSwKLQlJV19JT0NUTChTSU9DR0lXUkFURSkJPSBpcHdfd3hfZ2V0X3JhdGUsCi0JSVdfSU9DVEwoU0lPQ1NJV1JUUykJPSBpcHdfd3hfc2V0X3J0cywKLQlJV19JT0NUTChTSU9DR0lXUlRTKQk9IGlwd193eF9nZXRfcnRzLAotCUlXX0lPQ1RMKFNJT0NTSVdGUkFHKQk9IGlwd193eF9zZXRfZnJhZywKLQlJV19JT0NUTChTSU9DR0lXRlJBRykJPSBpcHdfd3hfZ2V0X2ZyYWcsCi0JSVdfSU9DVEwoU0lPQ1NJV1RYUE9XKQk9IGlwd193eF9zZXRfdHhwb3csCi0JSVdfSU9DVEwoU0lPQ0dJV1RYUE9XKQk9IGlwd193eF9nZXRfdHhwb3csCi0JSVdfSU9DVEwoU0lPQ1NJV1JFVFJZKQk9IGlwd193eF9zZXRfcmV0cnksCi0JSVdfSU9DVEwoU0lPQ0dJV1JFVFJZKQk9IGlwd193eF9nZXRfcmV0cnksCi0JSVdfSU9DVEwoU0lPQ1NJV0VOQ09ERSkJPSBpcHdfd3hfc2V0X2VuY29kZSwKLQlJV19JT0NUTChTSU9DR0lXRU5DT0RFKQk9IGlwd193eF9nZXRfZW5jb2RlLAotCUlXX0lPQ1RMKFNJT0NTSVdQT1dFUikJPSBpcHdfd3hfc2V0X3Bvd2VyLAotCUlXX0lPQ1RMKFNJT0NHSVdQT1dFUikJPSBpcHdfd3hfZ2V0X3Bvd2VyLAorCUlXX0lPQ1RMKFNJT0NHSVdOQU1FKSA9IGlwd193eF9nZXRfbmFtZSwKKwlJV19JT0NUTChTSU9DU0lXRlJFUSkgPSBpcHdfd3hfc2V0X2ZyZXEsCisJSVdfSU9DVEwoU0lPQ0dJV0ZSRVEpID0gaXB3X3d4X2dldF9mcmVxLAorCUlXX0lPQ1RMKFNJT0NTSVdNT0RFKSA9IGlwd193eF9zZXRfbW9kZSwKKwlJV19JT0NUTChTSU9DR0lXTU9ERSkgPSBpcHdfd3hfZ2V0X21vZGUsCisJSVdfSU9DVEwoU0lPQ0dJV1JBTkdFKSA9IGlwd193eF9nZXRfcmFuZ2UsCisJSVdfSU9DVEwoU0lPQ1NJV0FQKSA9IGlwd193eF9zZXRfd2FwLAorCUlXX0lPQ1RMKFNJT0NHSVdBUCkgPSBpcHdfd3hfZ2V0X3dhcCwKKwlJV19JT0NUTChTSU9DU0lXU0NBTikgPSBpcHdfd3hfc2V0X3NjYW4sCisJSVdfSU9DVEwoU0lPQ0dJV1NDQU4pID0gaXB3X3d4X2dldF9zY2FuLAorCUlXX0lPQ1RMKFNJT0NTSVdFU1NJRCkgPSBpcHdfd3hfc2V0X2Vzc2lkLAorCUlXX0lPQ1RMKFNJT0NHSVdFU1NJRCkgPSBpcHdfd3hfZ2V0X2Vzc2lkLAorCUlXX0lPQ1RMKFNJT0NTSVdOSUNLTikgPSBpcHdfd3hfc2V0X25pY2ssCisJSVdfSU9DVEwoU0lPQ0dJV05JQ0tOKSA9IGlwd193eF9nZXRfbmljaywKKwlJV19JT0NUTChTSU9DU0lXUkFURSkgPSBpcHdfd3hfc2V0X3JhdGUsCisJSVdfSU9DVEwoU0lPQ0dJV1JBVEUpID0gaXB3X3d4X2dldF9yYXRlLAorCUlXX0lPQ1RMKFNJT0NTSVdSVFMpID0gaXB3X3d4X3NldF9ydHMsCisJSVdfSU9DVEwoU0lPQ0dJV1JUUykgPSBpcHdfd3hfZ2V0X3J0cywKKwlJV19JT0NUTChTSU9DU0lXRlJBRykgPSBpcHdfd3hfc2V0X2ZyYWcsCisJSVdfSU9DVEwoU0lPQ0dJV0ZSQUcpID0gaXB3X3d4X2dldF9mcmFnLAorCUlXX0lPQ1RMKFNJT0NTSVdUWFBPVykgPSBpcHdfd3hfc2V0X3R4cG93LAorCUlXX0lPQ1RMKFNJT0NHSVdUWFBPVykgPSBpcHdfd3hfZ2V0X3R4cG93LAorCUlXX0lPQ1RMKFNJT0NTSVdSRVRSWSkgPSBpcHdfd3hfc2V0X3JldHJ5LAorCUlXX0lPQ1RMKFNJT0NHSVdSRVRSWSkgPSBpcHdfd3hfZ2V0X3JldHJ5LAorCUlXX0lPQ1RMKFNJT0NTSVdFTkNPREUpID0gaXB3X3d4X3NldF9lbmNvZGUsCisJSVdfSU9DVEwoU0lPQ0dJV0VOQ09ERSkgPSBpcHdfd3hfZ2V0X2VuY29kZSwKKwlJV19JT0NUTChTSU9DU0lXUE9XRVIpID0gaXB3X3d4X3NldF9wb3dlciwKKwlJV19JT0NUTChTSU9DR0lXUE9XRVIpID0gaXB3X3d4X2dldF9wb3dlciwKKwlJV19JT0NUTChTSU9DU0lXU1BZKSA9IGl3X2hhbmRsZXJfc2V0X3NweSwKKwlJV19JT0NUTChTSU9DR0lXU1BZKSA9IGl3X2hhbmRsZXJfZ2V0X3NweSwKKwlJV19JT0NUTChTSU9DU0lXVEhSU1BZKSA9IGl3X2hhbmRsZXJfc2V0X3RocnNweSwKKwlJV19JT0NUTChTSU9DR0lXVEhSU1BZKSA9IGl3X2hhbmRsZXJfZ2V0X3RocnNweSwKKwlJV19JT0NUTChTSU9DU0lXR0VOSUUpID0gaXB3X3d4X3NldF9nZW5pZSwKKwlJV19JT0NUTChTSU9DR0lXR0VOSUUpID0gaXB3X3d4X2dldF9nZW5pZSwKKwlJV19JT0NUTChTSU9DU0lXTUxNRSkgPSBpcHdfd3hfc2V0X21sbWUsCisJSVdfSU9DVEwoU0lPQ1NJV0FVVEgpID0gaXB3X3d4X3NldF9hdXRoLAorCUlXX0lPQ1RMKFNJT0NHSVdBVVRIKSA9IGlwd193eF9nZXRfYXV0aCwKKwlJV19JT0NUTChTSU9DU0lXRU5DT0RFRVhUKSA9IGlwd193eF9zZXRfZW5jb2RlZXh0LAorCUlXX0lPQ1RMKFNJT0NHSVdFTkNPREVFWFQpID0gaXB3X3d4X2dldF9lbmNvZGVleHQsCiB9OwogCi0jZGVmaW5lIElQV19QUklWX1NFVF9QT1dFUglTSU9DSVdGSVJTVFBSSVYKLSNkZWZpbmUgSVBXX1BSSVZfR0VUX1BPV0VSCVNJT0NJV0ZJUlNUUFJJVisxCi0jZGVmaW5lIElQV19QUklWX1NFVF9NT0RFCVNJT0NJV0ZJUlNUUFJJVisyCi0jZGVmaW5lIElQV19QUklWX0dFVF9NT0RFCVNJT0NJV0ZJUlNUUFJJViszCi0jZGVmaW5lIElQV19QUklWX1NFVF9QUk9NSVNDCVNJT0NJV0ZJUlNUUFJJVis0Ci0jZGVmaW5lIElQV19QUklWX1JFU0VUCQlTSU9DSVdGSVJTVFBSSVYrNQorZW51bSB7CisJSVBXX1BSSVZfU0VUX1BPV0VSID0gU0lPQ0lXRklSU1RQUklWLAorCUlQV19QUklWX0dFVF9QT1dFUiwKKwlJUFdfUFJJVl9TRVRfTU9ERSwKKwlJUFdfUFJJVl9HRVRfTU9ERSwKKwlJUFdfUFJJVl9TRVRfUFJFQU1CTEUsCisJSVBXX1BSSVZfR0VUX1BSRUFNQkxFLAorCUlQV19QUklWX1JFU0VULAorCUlQV19QUklWX1NXX1JFU0VULAorI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKKwlJUFdfUFJJVl9TRVRfTU9OSVRPUiwKKyNlbmRpZgorfTsKIAogc3RhdGljIHN0cnVjdCBpd19wcml2X2FyZ3MgaXB3X3ByaXZfYXJnc1tdID0gewogCXsKQEAgLTYyMDQsMTQgKzk0ODksMjUgQEAKIAkgLmNtZCA9IElQV19QUklWX0dFVF9NT0RFLAogCSAuZ2V0X2FyZ3MgPSBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IE1BWF9XWF9TVFJJTkcsCiAJIC5uYW1lID0gImdldF9tb2RlIn0sCi0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCiAJewotCSBJUFdfUFJJVl9TRVRfUFJPTUlTQywKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDIsIDAsICJtb25pdG9yIn0sCisJIC5jbWQgPSBJUFdfUFJJVl9TRVRfUFJFQU1CTEUsCisJIC5zZXRfYXJncyA9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAubmFtZSA9ICJzZXRfcHJlYW1ibGUifSwKKwl7CisJIC5jbWQgPSBJUFdfUFJJVl9HRVRfUFJFQU1CTEUsCisJIC5nZXRfYXJncyA9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgSUZOQU1TSVosCisJIC5uYW1lID0gImdldF9wcmVhbWJsZSJ9LAogCXsKIAkgSVBXX1BSSVZfUkVTRVQsCiAJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAwLCAwLCAicmVzZXQifSwKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1BST01JU0MgKi8KKwl7CisJIElQV19QUklWX1NXX1JFU0VULAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMCwgMCwgInN3X3Jlc2V0In0sCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCXsKKwkgSVBXX1BSSVZfU0VUX01PTklUT1IsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAyLCAwLCAibW9uaXRvciJ9LAorI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX01PTklUT1IgKi8KIH07CiAKIHN0YXRpYyBpd19oYW5kbGVyIGlwd19wcml2X2hhbmRsZXJbXSA9IHsKQEAgLTYyMTksMTkgKzk1MTUsMjMgQEAKIAlpcHdfd3hfZ2V0X3Bvd2VybW9kZSwKIAlpcHdfd3hfc2V0X3dpcmVsZXNzX21vZGUsCiAJaXB3X3d4X2dldF93aXJlbGVzc19tb2RlLAotI2lmZGVmIENPTkZJR19JUFdfUFJPTUlTQwotCWlwd193eF9zZXRfcHJvbWlzYywKKwlpcHdfd3hfc2V0X3ByZWFtYmxlLAorCWlwd193eF9nZXRfcHJlYW1ibGUsCiAJaXB3X3d4X3Jlc2V0LAorCWlwd193eF9zd19yZXNldCwKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJaXB3X3d4X3NldF9tb25pdG9yLAogI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGlwd193eF9oYW5kbGVyX2RlZiA9IHsKLQkuc3RhbmRhcmQJCT0gaXB3X3d4X2hhbmRsZXJzLAotCS5udW1fc3RhbmRhcmQJCT0gQVJSQVlfU0laRShpcHdfd3hfaGFuZGxlcnMpLAotCS5udW1fcHJpdmF0ZQkJPSBBUlJBWV9TSVpFKGlwd19wcml2X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZV9hcmdzCT0gQVJSQVlfU0laRShpcHdfcHJpdl9hcmdzKSwKLQkucHJpdmF0ZQkJPSBpcHdfcHJpdl9oYW5kbGVyLAotCS5wcml2YXRlX2FyZ3MJCT0gaXB3X3ByaXZfYXJncywKKwkuc3RhbmRhcmQgPSBpcHdfd3hfaGFuZGxlcnMsCisJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUoaXB3X3d4X2hhbmRsZXJzKSwKKwkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKGlwd19wcml2X2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShpcHdfcHJpdl9hcmdzKSwKKwkucHJpdmF0ZSA9IGlwd19wcml2X2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyA9IGlwd19wcml2X2FyZ3MsCisJLmdldF93aXJlbGVzc19zdGF0cyA9IGlwd19nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCiAvKgpAQCAtNjI0Niw4ICs5NTQ2LDggQEAKIAogCXdzdGF0cyA9ICZwcml2LT53c3RhdHM7CiAKLQkvKiBpZiBodyBpcyBkaXNhYmxlZCwgdGhlbiBpcHcyMTAwX2dldF9vcmRpbmFsKCkgY2FuJ3QgYmUgY2FsbGVkLgotCSAqIGlwdzIxMDBfd3hfd2lyZWxlc3Nfc3RhdHMgc2VlbXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBmdyBpcworCS8qIGlmIGh3IGlzIGRpc2FibGVkLCB0aGVuIGlwd19nZXRfb3JkaW5hbCgpIGNhbid0IGJlIGNhbGxlZC4KKwkgKiBuZXRkZXYtPmdldF93aXJlbGVzc19zdGF0cyBzZWVtcyB0byBiZSBjYWxsZWQgYmVmb3JlIGZ3IGlzCiAJICogaW5pdGlhbGl6ZWQuICBTVEFUVVNfQVNTT0NJQVRFRCB3aWxsIG9ubHkgYmUgc2V0IGlmIHRoZSBodyBpcyB1cAogCSAqIGFuZCBhc3NvY2lhdGVkOyBpZiBub3QgYXNzb2NpY2F0ZWQsIHRoZSB2YWx1ZXMgYXJlIGFsbCBtZWFuaW5nbGVzcwogCSAqIGFueXdheSwgc28gc2V0IHRoZW0gYWxsIHRvIE5VTEwgYW5kIElOVkFMSUQgKi8KQEAgLTYyOTgsNyArOTU5OCw3IEBACiAJc3lzX2NvbmZpZy0+ZG90MTFnX2F1dG9fZGV0ZWN0aW9uID0gMDsKIAlzeXNfY29uZmlnLT5lbmFibGVfY3RzX3RvX3NlbGYgPSAwOwogCXN5c19jb25maWctPmJ0X2NvZXhpc3RfY29sbGlzaW9uX3RociA9IDA7Ci0Jc3lzX2NvbmZpZy0+cGFzc19ub2lzZV9zdGF0c190b19ob3N0ID0gMTsKKwlzeXNfY29uZmlnLT5wYXNzX25vaXNlX3N0YXRzX3RvX2hvc3QgPSAxOwkvLzEgLS0gZml4IGZvciAyNTYKIH0KIAogc3RhdGljIGludCBpcHdfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTYzMDYsOSArOTYwNiwxMSBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJSVBXX0RFQlVHX0lORk8oImRldi0+b3BlblxuIik7CiAJLyogd2Ugc2hvdWxkIGJlIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIG9wZW5lZCAqLworCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgJiYKIAkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMyNiwyMiArOTYyOCwzNCBAQAogd2UgbmVlZCB0byBoZWF2aWx5IG1vZGlmeSB0aGUgaWVlZTgwMjExX3NrYl90b190eGIuCiAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXB3X3R4X3NrYihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIpCitzdGF0aWMgaW5saW5lIGludCBpcHdfdHhfc2tiKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwKKwkJCSAgICAgaW50IHByaSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopCiAJICAgIHR4Yi0+ZnJhZ21lbnRzWzBdLT5kYXRhOwogCWludCBpID0gMDsKIAlzdHJ1Y3QgdGZkX2ZyYW1lICp0ZmQ7CisjaWZkZWYgQ09ORklHX0lQV19RT1MKKwlpbnQgdHhfaWQgPSBpcHdfZ2V0X3R4X3F1ZXVlX251bWJlcihwcml2LCBwcmkpOworCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4X2lkXTsKKyNlbHNlCiAJc3RydWN0IGNseDJfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbMF07CisjZW5kaWYKIAlzdHJ1Y3QgY2x4Ml9xdWV1ZSAqcSA9ICZ0eHEtPnE7CiAJdTggaWQsIGhkcl9sZW4sIHVuaWNhc3Q7CiAJdTE2IHJlbWFpbmluZ19ieXRlczsKKwlpbnQgZmM7CisKKwkvKiBJZiB0aGVyZSBpc24ndCByb29tIGluIHRoZSBxdWV1ZSwgd2UgcmV0dXJuIGJ1c3kgYW5kIGxldCB0aGUKKwkgKiBuZXR3b3JrIHN0YWNrIHJlcXVldWUgdGhlIHBhY2tldCBmb3IgdXMgKi8KKwlpZiAoaXB3X3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6CiAJCWhkcl9sZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOwotCQl1bmljYXN0ID0gIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CisJCXVuaWNhc3QgPSAhKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CisJCQkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpOwogCQlpZCA9IGlwd19maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CiAJCWlmIChpZCA9PSBJUFdfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCQlpZCA9IGlwd19hZGRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKQEAgLTYzNTYsOCArOTY3MCw4IEBACiAKIAljYXNlIElXX01PREVfSU5GUkE6CiAJZGVmYXVsdDoKLQkJdW5pY2FzdCA9ICFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIzKSAmJgotCQkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpOworCQl1bmljYXN0ID0gIShpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIzKSB8fAorCQkJICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpKTsKIAkJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CiAJCWlkID0gMDsKIAkJYnJlYWs7CkBAIC02MzcyLDI2ICs5Njg2LDgzIEBACiAJdGZkLT5jb250cm9sX2ZsYWdzLmNvbnRyb2xfYml0cyA9IFRGRF9ORUVEX0lSUV9NQVNLOwogCiAJdGZkLT51LmRhdGEuY21kX2lkID0gRElOT19DTURfVFg7Ci0JdGZkLT51LmRhdGEubGVuID0gdHhiLT5wYXlsb2FkX3NpemU7CisJdGZkLT51LmRhdGEubGVuID0gY3B1X3RvX2xlMTYodHhiLT5wYXlsb2FkX3NpemUpOwogCXJlbWFpbmluZ19ieXRlcyA9IHR4Yi0+cGF5bG9hZF9zaXplOwotCWlmICh1bmxpa2VseSghdW5pY2FzdCkpCi0JCXRmZC0+dS5kYXRhLnR4X2ZsYWdzID0gRENUX0ZMQUdfTk9fV0VQOwotCWVsc2UKLQkJdGZkLT51LmRhdGEudHhfZmxhZ3MgPSBEQ1RfRkxBR19OT19XRVAgfCBEQ1RfRkxBR19BQ0tfUkVRRDsKIAogCWlmIChwcml2LT5hc3NvY19yZXF1ZXN0LmllZWVfbW9kZSA9PSBJUFdfQl9NT0RFKQotCQl0ZmQtPnUuZGF0YS50eF9mbGFnc19leHQgPSBEQ1RfRkxBR19FWFRfTU9ERV9DQ0s7CisJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCB8PSBEQ1RfRkxBR19FWFRfTU9ERV9DQ0s7CiAJZWxzZQotCQl0ZmQtPnUuZGF0YS50eF9mbGFnc19leHQgPSBEQ1RfRkxBR19FWFRfTU9ERV9PRkRNOworCQl0ZmQtPnUuZGF0YS50eF9mbGFnc19leHQgfD0gRENUX0ZMQUdfRVhUX01PREVfT0ZETTsKIAotCWlmIChwcml2LT5jb25maWcgJiBDRkdfUFJFQU1CTEUpCi0JCXRmZC0+dS5kYXRhLnR4X2ZsYWdzIHw9IERDVF9GTEFHX1NIT1JUX1BSRU1CTDsKKwlpZiAocHJpdi0+YXNzb2NfcmVxdWVzdC5wcmVhbWJsZV9sZW5ndGggPT0gRENUX0ZMQUdfU0hPUlRfUFJFQU1CTEUpCisJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzIHw9IERDVF9GTEFHX1NIT1JUX1BSRUFNQkxFOworCisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyAmIH5JRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpOwogCiAJbWVtY3B5KCZ0ZmQtPnUuZGF0YS50ZmQudGZkXzI0Lm1jaGRyLCBoZHIsIGhkcl9sZW4pOwogCisJaWYgKGxpa2VseSh1bmljYXN0KSkKKwkJdGZkLT51LmRhdGEudHhfZmxhZ3MgfD0gRENUX0ZMQUdfQUNLX1JFUUQ7CisKKwlpZiAodHhiLT5lbmNyeXB0ZWQgJiYgIXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCkgeworCQlzd2l0Y2ggKHByaXYtPmllZWUtPnNlYy5sZXZlbCkgeworCQljYXNlIFNFQ19MRVZFTF8zOgorCQkJdGZkLT51LmRhdGEudGZkLnRmZF8yNC5tY2hkci5mcmFtZV9jdGwgfD0KKwkJCSAgICBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7CisJCQkvKiBYWFg6IEFDSyBmbGFnIG11c3QgYmUgc2V0IGZvciBDQ01QIGV2ZW4gaWYgaXQKKwkJCSAqIGlzIGEgbXVsdGljYXN0L2Jyb2FkY2FzdCBwYWNrZXQsIGJlY2F1c2UgQ0NNUAorCQkJICogZ3JvdXAgY29tbXVuaWNhdGlvbiBlbmNyeXB0ZWQgYnkgR1RLIGlzCisJCQkgKiBhY3R1YWxseSBkb25lIGJ5IHRoZSBBUC4gKi8KKwkJCWlmICghdW5pY2FzdCkKKwkJCQl0ZmQtPnUuZGF0YS50eF9mbGFncyB8PSBEQ1RfRkxBR19BQ0tfUkVRRDsKKworCQkJdGZkLT51LmRhdGEudHhfZmxhZ3MgJj0gfkRDVF9GTEFHX05PX1dFUDsKKwkJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCB8PSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfQ0NNOworCQkJdGZkLT51LmRhdGEua2V5X2luZGV4ID0gMDsKKwkJCXRmZC0+dS5kYXRhLmtleV9pbmRleCB8PSBEQ1RfV0VQX0lOREVYX1VTRV9JTU1FRElBVEU7CisJCQlicmVhazsKKwkJY2FzZSBTRUNfTEVWRUxfMjoKKwkJCXRmZC0+dS5kYXRhLnRmZC50ZmRfMjQubWNoZHIuZnJhbWVfY3RsIHw9CisJCQkgICAgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOworCQkJdGZkLT51LmRhdGEudHhfZmxhZ3MgJj0gfkRDVF9GTEFHX05PX1dFUDsKKwkJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCB8PSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfVEtJUDsKKwkJCXRmZC0+dS5kYXRhLmtleV9pbmRleCA9IERDVF9XRVBfSU5ERVhfVVNFX0lNTUVESUFURTsKKwkJCWJyZWFrOworCQljYXNlIFNFQ19MRVZFTF8xOgorCQkJdGZkLT51LmRhdGEudGZkLnRmZF8yNC5tY2hkci5mcmFtZV9jdGwgfD0KKwkJCSAgICBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7CisJCQl0ZmQtPnUuZGF0YS5rZXlfaW5kZXggPSBwcml2LT5pZWVlLT50eF9rZXlpZHg7CisJCQlpZiAocHJpdi0+aWVlZS0+c2VjLmtleV9zaXplc1twcml2LT5pZWVlLT50eF9rZXlpZHhdIDw9CisJCQkgICAgNDApCisJCQkJdGZkLT51LmRhdGEua2V5X2luZGV4IHw9IERDVF9XRVBfS0VZXzY0Qml0OworCQkJZWxzZQorCQkJCXRmZC0+dS5kYXRhLmtleV9pbmRleCB8PSBEQ1RfV0VQX0tFWV8xMjhCaXQ7CisJCQlicmVhazsKKwkJY2FzZSBTRUNfTEVWRUxfMDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3cgc2VjdXJpdHkgbGV2ZWwgJWRcbiIsCisJCQkgICAgICAgcHJpdi0+aWVlZS0+c2VjLmxldmVsKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCS8qIE5vIGhhcmR3YXJlIGVuY3J5cHRpb24gKi8KKwkJdGZkLT51LmRhdGEudHhfZmxhZ3MgfD0gRENUX0ZMQUdfTk9fV0VQOworCisjaWZkZWYgQ09ORklHX0lQV19RT1MKKwlpcHdfcW9zX3NldF90eF9xdWV1ZV9jb21tYW5kKHByaXYsIHByaSwgJih0ZmQtPnUuZGF0YSksIHVuaWNhc3QpOworI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisKIAkvKiBwYXlsb2FkICovCi0JdGZkLT51LmRhdGEubnVtX2NodW5rcyA9IG1pbigodTgpIChOVU1fVEZEX0NIVU5LUyAtIDIpLCB0eGItPm5yX2ZyYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgdGZkLT51LmRhdGEubnVtX2NodW5rczsgaSsrKSB7CisJdGZkLT51LmRhdGEubnVtX2NodW5rcyA9IGNwdV90b19sZTMyKG1pbigodTgpIChOVU1fVEZEX0NIVU5LUyAtIDIpLAorCQkJCQkJIHR4Yi0+bnJfZnJhZ3MpKTsKKwlJUFdfREVCVUdfRlJBRygiJWkgZnJhZ21lbnRzIGJlaW5nIHNlbnQgYXMgJWkgY2h1bmtzLlxuIiwKKwkJICAgICAgIHR4Yi0+bnJfZnJhZ3MsIGxlMzJfdG9fY3B1KHRmZC0+dS5kYXRhLm51bV9jaHVua3MpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUzMl90b19jcHUodGZkLT51LmRhdGEubnVtX2NodW5rcyk7IGkrKykgeworCQlJUFdfREVCVUdfRlJBRygiQWRkaW5nIGZyYWdtZW50ICVpIG9mICVpICglZCBieXRlcykuXG4iLAorCQkJICAgICAgIGksIGxlMzJfdG9fY3B1KHRmZC0+dS5kYXRhLm51bV9jaHVua3MpLAorCQkJICAgICAgIHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW4gLSBoZHJfbGVuKTsKIAkJSVBXX0RFQlVHX1RYKCJEdW1waW5nIFRYIHBhY2tldCBmcmFnICVpIG9mICVpICglZCBieXRlcyk6XG4iLAogCQkJICAgICBpLCB0ZmQtPnUuZGF0YS5udW1fY2h1bmtzLAogCQkJICAgICB0eGItPmZyYWdtZW50c1tpXS0+bGVuIC0gaGRyX2xlbik7CkBAIC02Mzk5LDExICs5NzcwLDEzIEBACiAJCQkgICB0eGItPmZyYWdtZW50c1tpXS0+bGVuIC0gaGRyX2xlbik7CiAKIAkJdGZkLT51LmRhdGEuY2h1bmtfcHRyW2ldID0KLQkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJICAgdHhiLT5mcmFnbWVudHNbaV0tPmRhdGEgKyBoZHJfbGVuLAotCQkJCSAgIHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW4gLSBoZHJfbGVuLAotCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQl0ZmQtPnUuZGF0YS5jaHVua19sZW5baV0gPSB0eGItPmZyYWdtZW50c1tpXS0+bGVuIC0gaGRyX2xlbjsKKwkJICAgIGNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlCisJCQkJKHByaXYtPnBjaV9kZXYsCisJCQkJIHR4Yi0+ZnJhZ21lbnRzW2ldLT5kYXRhICsgaGRyX2xlbiwKKwkJCQkgdHhiLT5mcmFnbWVudHNbaV0tPmxlbiAtIGhkcl9sZW4sCisJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpKTsKKwkJdGZkLT51LmRhdGEuY2h1bmtfbGVuW2ldID0KKwkJICAgIGNwdV90b19sZTE2KHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW4gLSBoZHJfbGVuKTsKIAl9CiAKIAlpZiAoaSAhPSB0eGItPm5yX2ZyYWdzKSB7CkBAIC02NDE4LDkgKzk3OTEsMTAgQEAKIAkJICAgICAgIHJlbWFpbmluZ19ieXRlcyk7CiAJCXNrYiA9IGFsbG9jX3NrYihyZW1haW5pbmdfYnl0ZXMsIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiICE9IE5VTEwpIHsKLQkJCXRmZC0+dS5kYXRhLmNodW5rX2xlbltpXSA9IHJlbWFpbmluZ19ieXRlczsKKwkJCXRmZC0+dS5kYXRhLmNodW5rX2xlbltpXSA9IGNwdV90b19sZTE2KHJlbWFpbmluZ19ieXRlcyk7CiAJCQlmb3IgKGogPSBpOyBqIDwgdHhiLT5ucl9mcmFnczsgaisrKSB7CiAJCQkJaW50IHNpemUgPSB0eGItPmZyYWdtZW50c1tqXS0+bGVuIC0gaGRyX2xlbjsKKwogCQkJCXByaW50ayhLRVJOX0lORk8gIkFkZGluZyBmcmFnICVkICVkLi4uXG4iLAogCQkJCSAgICAgICBqLCBzaXplKTsKIAkJCQltZW1jcHkoc2tiX3B1dChza2IsIHNpemUpLApAQCAtNjQyOSwxMCArOTgwMywxNCBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkodHhiLT5mcmFnbWVudHNbaV0pOwogCQkJdHhiLT5mcmFnbWVudHNbaV0gPSBza2I7CiAJCQl0ZmQtPnUuZGF0YS5jaHVua19wdHJbaV0gPQotCQkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICAgdGZkLT51LmRhdGEuY2h1bmtfbGVuW2ldLAotCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCXRmZC0+dS5kYXRhLm51bV9jaHVua3MrKzsKKwkJCSAgICBjcHVfdG9fbGUzMihwY2lfbWFwX3NpbmdsZQorCQkJCQkocHJpdi0+cGNpX2Rldiwgc2tiLT5kYXRhLAorCQkJCQkgdGZkLT51LmRhdGEuY2h1bmtfbGVuW2ldLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSkpOworCisJCQl0ZmQtPnUuZGF0YS5udW1fY2h1bmtzID0KKwkJCSAgICBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdSh0ZmQtPnUuZGF0YS5udW1fY2h1bmtzKSArCisJCQkJCTEpOwogCQl9CiAJfQogCkBAIC02NDQwLDE0ICs5ODE4LDI4IEBACiAJcS0+Zmlyc3RfZW1wdHkgPSBpcHdfcXVldWVfaW5jX3dyYXAocS0+Zmlyc3RfZW1wdHksIHEtPm5fYmQpOwogCWlwd193cml0ZTMyKHByaXYsIHEtPnJlZ193LCBxLT5maXJzdF9lbXB0eSk7CiAKLQlpZiAoaXB3X3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQotCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwotCi0JcmV0dXJuOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKICAgICAgIGRyb3A6CiAJSVBXX0RFQlVHX0RST1AoIlNpbGVudGx5IGRyb3BwaW5nIFR4IHBhY2tldC5cbiIpOwogCWllZWU4MDIxMV90eGJfZnJlZSh0eGIpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgaXB3X25ldF9pc19xdWV1ZV9mdWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCWludCB0eF9pZCA9IGlwd19nZXRfdHhfcXVldWVfbnVtYmVyKHByaXYsIHByaSk7CisJc3RydWN0IGNseDJfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhfaWRdOworI2Vsc2UKKwlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVswXTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworCisJaWYgKGlwd19xdWV1ZV9zcGFjZSgmdHhxLT5xKSA8IHR4cS0+cS5oaWdoX21hcmspCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X25ldF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwKQEAgLTY0NTUsOSArOTg0Nyw5IEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKIAlJUFdfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcylcbiIsIHR4Yi0+cGF5bG9hZF9zaXplKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpIHsKQEAgLTY0NjcsMTAgKzk4NTksMTIgQEAKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKLQlpcHdfdHhfc2tiKHByaXYsIHR4Yik7Ci0KKwlyZXQgPSBpcHdfdHhfc2tiKHByaXYsIHR4YiwgcHJpKTsKKwlpZiAocmV0ID09IE5FVERFVl9UWF9PSykKKwkJX19pcHdfbGVkX2FjdGl2aXR5X29uKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiByZXQ7CiAKICAgICAgIGZhaWxfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTY0OTcsMTEgKzk4OTEsMTMgQEAKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWRvd24oJnByaXYtPnNlbSk7CiAJcHJpdi0+Y29uZmlnIHw9IENGR19DVVNUT01fTUFDOwogCW1lbWNweShwcml2LT5tYWNfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZXR0aW5nIE1BQyB0byAiIE1BQ19GTVQgIlxuIiwKIAkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgTUFDX0FSRyhwcml2LT5tYWNfYWRkcikpOwotCWlwd19hZGFwdGVyX3Jlc3RhcnQocHJpdik7CisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC02NTI0LDcgKzk5MjAsNyBAQAogCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24sIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSwgIiVzICglcykiLAogCQkgdmVycywgZGF0ZSk7CiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShwLT5wY2lfZGV2KSk7Ci0JaW5mby0+ZWVkdW1wX2xlbiA9IENYMl9FRVBST01fSU1BR0VfU0laRTsKKwlpbmZvLT5lZWR1bXBfbGVuID0gSVBXX0VFUFJPTV9JTUFHRV9TSVpFOwogfQogCiBzdGF0aWMgdTMyIGlwd19ldGh0b29sX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02NTM1LDcgKzk5MzEsNyBAQAogCiBzdGF0aWMgaW50IGlwd19ldGh0b29sX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIENYMl9FRVBST01fSU1BR0VfU0laRTsKKwlyZXR1cm4gSVBXX0VFUFJPTV9JTUFHRV9TSVpFOwogfQogCiBzdGF0aWMgaW50IGlwd19ldGh0b29sX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTY1NDMsMTAgKzk5MzksMTEgQEAKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0JaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBDWDJfRUVQUk9NX0lNQUdFX1NJWkUpCisJaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBJUFdfRUVQUk9NX0lNQUdFX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KGJ5dGVzLCAmKCh1OCAqKSBwLT5lZXByb20pW2VlcHJvbS0+b2Zmc2V0XSwgZWVwcm9tLT5sZW4pOworCWRvd24oJnAtPnNlbSk7CisJbWVtY3B5KGJ5dGVzLCAmcC0+ZWVwcm9tW2VlcHJvbS0+b2Zmc2V0XSwgZWVwcm9tLT5sZW4pOworCXVwKCZwLT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC02NTU2LDIzICs5OTUzLDIzIEBACiAJc3RydWN0IGlwd19wcml2ICpwID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgaTsKIAotCWlmIChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuID4gQ1gyX0VFUFJPTV9JTUFHRV9TSVpFKQorCWlmIChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuID4gSVBXX0VFUFJPTV9JTUFHRV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbWNweSgmKCh1OCAqKSBwLT5lZXByb20pW2VlcHJvbS0+b2Zmc2V0XSwgYnl0ZXMsIGVlcHJvbS0+bGVuKTsKKwlkb3duKCZwLT5zZW0pOworCW1lbWNweSgmcC0+ZWVwcm9tW2VlcHJvbS0+b2Zmc2V0XSwgYnl0ZXMsIGVlcHJvbS0+bGVuKTsKIAlmb3IgKGkgPSBJUFdfRUVQUk9NX0RBVEE7Ci0JICAgICBpIDwgSVBXX0VFUFJPTV9EQVRBICsgQ1gyX0VFUFJPTV9JTUFHRV9TSVpFOyBpKyspCisJICAgICBpIDwgSVBXX0VFUFJPTV9EQVRBICsgSVBXX0VFUFJPTV9JTUFHRV9TSVpFOyBpKyspCiAJCWlwd193cml0ZTgocCwgaSwgcC0+ZWVwcm9tW2ldKTsKLQorCXVwKCZwLT5zZW0pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlwd19ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2xpbmsJPSBpcHdfZXRodG9vbF9nZXRfbGluaywKLQkuZ2V0X2RydmluZm8JPSBpcHdfZXRodG9vbF9nZXRfZHJ2aW5mbywKLQkuZ2V0X2VlcHJvbV9sZW4JPSBpcHdfZXRodG9vbF9nZXRfZWVwcm9tX2xlbiwKLQkuZ2V0X2VlcHJvbQk9IGlwd19ldGh0b29sX2dldF9lZXByb20sCi0JLnNldF9lZXByb20JPSBpcHdfZXRodG9vbF9zZXRfZWVwcm9tLAorCS5nZXRfbGluayA9IGlwd19ldGh0b29sX2dldF9saW5rLAorCS5nZXRfZHJ2aW5mbyA9IGlwd19ldGh0b29sX2dldF9kcnZpbmZvLAorCS5nZXRfZWVwcm9tX2xlbiA9IGlwd19ldGh0b29sX2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tID0gaXB3X2V0aHRvb2xfZ2V0X2VlcHJvbSwKKwkuc2V0X2VlcHJvbSA9IGlwd19ldGh0b29sX3NldF9lZXByb20sCiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXB3X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTY1OTAsOCArOTk4Nyw4IEBACiAJCWdvdG8gbm9uZTsKIAl9CiAKLQlpbnRhID0gaXB3X3JlYWQzMihwcml2LCBDWDJfSU5UQV9SVyk7Ci0JaW50YV9tYXNrID0gaXB3X3JlYWQzMihwcml2LCBDWDJfSU5UQV9NQVNLX1IpOworCWludGEgPSBpcHdfcmVhZDMyKHByaXYsIElQV19JTlRBX1JXKTsKKwlpbnRhX21hc2sgPSBpcHdfcmVhZDMyKHByaXYsIElQV19JTlRBX01BU0tfUik7CiAKIAlpZiAoaW50YSA9PSAweEZGRkZGRkZGKSB7CiAJCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkICovCkBAIC02NTk5LDcgKzk5OTYsNyBAQAogCQlnb3RvIG5vbmU7CiAJfQogCi0JaWYgKCEoaW50YSAmIChDWDJfSU5UQV9NQVNLX0FMTCAmIGludGFfbWFzaykpKSB7CisJaWYgKCEoaW50YSAmIChJUFdfSU5UQV9NQVNLX0FMTCAmIGludGFfbWFzaykpKSB7CiAJCS8qIFNoYXJlZCBpbnRlcnJ1cHQgKi8KIAkJZ290byBub25lOwogCX0KQEAgLTY2MDgsOCArMTAwMDUsOCBAQAogCWlwd19kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAkvKiBhY2sgY3VycmVudCBpbnRlcnJ1cHRzICovCi0JaW50YSAmPSAoQ1gyX0lOVEFfTUFTS19BTEwgJiBpbnRhX21hc2spOwotCWlwd193cml0ZTMyKHByaXYsIENYMl9JTlRBX1JXLCBpbnRhKTsKKwlpbnRhICY9IChJUFdfSU5UQV9NQVNLX0FMTCAmIGludGFfbWFzayk7CisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfUlcsIGludGEpOwogCiAJLyogQ2FjaGUgSU5UQSB2YWx1ZSBmb3Igb3VyIHRhc2tsZXQgKi8KIAlwcml2LT5pc3JfaW50YSA9IGludGE7CkBAIC02NjU1LDI4ICsxMDA1MiwxMTYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19iZ19yZl9raWxsKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19yZl9raWxsKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCit2b2lkIGlwd19saW5rX3VwKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlwcml2LT5sYXN0X3NlcV9udW0gPSAtMTsKKwlwcml2LT5sYXN0X2ZyYWdfbnVtID0gLTE7CisJcHJpdi0+bGFzdF9wYWNrZXRfdGltZSA9IDA7CisKKwluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldF9kZXYpOworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPm5ldF9kZXYpKSB7CisJCUlQV19ERUJVR19OT1RJRigid2FraW5nIHF1ZXVlXG4iKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRfZGV2KTsKKwl9IGVsc2UgeworCQlJUFdfREVCVUdfTk9USUYoInN0YXJ0aW5nIHF1ZXVlXG4iKTsKKwkJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+bmV0X2Rldik7CisJfQorCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwlpcHdfcmVzZXRfc3RhdHMocHJpdik7CisJLyogRW5zdXJlIHRoZSByYXRlIGlzIHVwZGF0ZWQgaW1tZWRpYXRlbHkgKi8KKwlwcml2LT5sYXN0X3JhdGUgPSBpcHdfZ2V0X2N1cnJlbnRfcmF0ZShwcml2KTsKKwlpcHdfZ2F0aGVyX3N0YXRzKHByaXYpOworCWlwd19sZWRfbGlua191cChwcml2KTsKKwlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdik7CisKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0JBQ0tHUk9VTkRfU0NBTikKKwkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlcXVlc3Rfc2NhbiwgSFopOworfQorCitzdGF0aWMgdm9pZCBpcHdfYmdfbGlua191cCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfbGlua191cChkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKwordm9pZCBpcHdfbGlua19kb3duKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpcHdfbGVkX2xpbmtfZG93bihwcml2KTsKKwluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRfZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOworCW5vdGlmeV93eF9hc3NvY19ldmVudChwcml2KTsKKworCS8qIENhbmNlbCBhbnkgcXVldWVkIHdvcmsgLi4uICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hZGhvY19jaGVjayk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+Z2F0aGVyX3N0YXRzKTsKKworCWlwd19yZXNldF9zdGF0cyhwcml2KTsKKworCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpKSB7CisJCS8qIFF1ZXVlIHVwIGFub3RoZXIgc2Nhbi4uLiAqLworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlcXVlc3Rfc2Nhbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpcHdfYmdfbGlua19kb3duKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19saW5rX2Rvd24oZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKIHN0YXRpYyBpbnQgaXB3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCiAJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X3N0YXRlKTsKIAotCUlOSVRfV09SSygmcHJpdi0+YWRob2NfY2hlY2ssIGlwd19hZGhvY19jaGVjaywgcHJpdik7Ci0JSU5JVF9XT1JLKCZwcml2LT5hc3NvY2lhdGUsIGlwd19hc3NvY2lhdGUsIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+ZGlzYXNzb2NpYXRlLCBpcHdfZGlzYXNzb2NpYXRlLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPnJ4X3JlcGxlbmlzaCwgaXB3X3J4X3F1ZXVlX3JlcGxlbmlzaCwgcHJpdik7Ci0JSU5JVF9XT1JLKCZwcml2LT5hZGFwdGVyX3Jlc3RhcnQsIGlwd19hZGFwdGVyX3Jlc3RhcnQsIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+cmZfa2lsbCwgaXB3X3JmX2tpbGwsIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+dXAsICh2b2lkICgqKSh2b2lkICopKWlwd191cCwgcHJpdik7Ci0JSU5JVF9XT1JLKCZwcml2LT5kb3duLCAodm9pZCAoKikodm9pZCAqKSlpcHdfZG93biwgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5hZGhvY19jaGVjaywgaXB3X2JnX2FkaG9jX2NoZWNrLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmFzc29jaWF0ZSwgaXB3X2JnX2Fzc29jaWF0ZSwgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5kaXNhc3NvY2lhdGUsIGlwd19iZ19kaXNhc3NvY2lhdGUsIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+c3lzdGVtX2NvbmZpZywgaXB3X3N5c3RlbV9jb25maWcsIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpcHdfYmdfcnhfcXVldWVfcmVwbGVuaXNoLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmFkYXB0ZXJfcmVzdGFydCwgaXB3X2JnX2FkYXB0ZXJfcmVzdGFydCwgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpcHdfYmdfcmZfa2lsbCwgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT51cCwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX3VwLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmRvd24sICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19kb3duLCBwcml2KTsKIAlJTklUX1dPUksoJnByaXYtPnJlcXVlc3Rfc2NhbiwKIAkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfcmVxdWVzdF9zY2FuLCBwcml2KTsKIAlJTklUX1dPUksoJnByaXYtPmdhdGhlcl9zdGF0cywKLQkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfZ2F0aGVyX3N0YXRzLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sICh2b2lkICgqKSh2b2lkICopKWlwd19hYm9ydF9zY2FuLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPnJvYW0sIGlwd19yb2FtLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPnNjYW5fY2hlY2ssIGlwd19zY2FuX2NoZWNrLCBwcml2KTsKKwkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfZ2F0aGVyX3N0YXRzLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19hYm9ydF9zY2FuLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPnJvYW0sIGlwd19iZ19yb2FtLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPnNjYW5fY2hlY2ssIGlwd19iZ19zY2FuX2NoZWNrLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmxpbmtfdXAsICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19saW5rX3VwLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmxpbmtfZG93biwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2xpbmtfZG93biwgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5sZWRfbGlua19vbiwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2xlZF9saW5rX29uLAorCQkgIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+bGVkX2xpbmtfb2ZmLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfbGVkX2xpbmtfb2ZmLAorCQkgIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+bGVkX2FjdF9vZmYsICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19sZWRfYWN0aXZpdHlfb2ZmLAorCQkgIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+bWVyZ2VfbmV0d29ya3MsCisJCSAgKHZvaWQgKCopKHZvaWQgKikpaXB3X21lcmdlX2FkaG9jX25ldHdvcmssIHByaXYpOworCisjaWZkZWYgQ09ORklHX0lQV19RT1MKKwlJTklUX1dPUksoJnByaXYtPnFvc19hY3RpdmF0ZSwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX3Fvc19hY3RpdmF0ZSwKKwkJICBwcml2KTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLwogCiAJdGFza2xldF9pbml0KCZwcml2LT5pcnFfdGFza2xldCwgKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKQogCQkgICAgIGlwd19pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CkBAIC02Njg5LDM0ICsxMDE3NCwzNiBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmIChzZWMtPmZsYWdzICYgKDEgPDwgaSkpIHsKLQkJCXByaXYtPnNlYy5rZXlfc2l6ZXNbaV0gPSBzZWMtPmtleV9zaXplc1tpXTsKKwkJCXByaXYtPmllZWUtPnNlYy5lbmNvZGVfYWxnW2ldID0gc2VjLT5lbmNvZGVfYWxnW2ldOworCQkJcHJpdi0+aWVlZS0+c2VjLmtleV9zaXplc1tpXSA9IHNlYy0+a2V5X3NpemVzW2ldOwogCQkJaWYgKHNlYy0+a2V5X3NpemVzW2ldID09IDApCi0JCQkJcHJpdi0+c2VjLmZsYWdzICY9IH4oMSA8PCBpKTsKLQkJCWVsc2UKLQkJCQltZW1jcHkocHJpdi0+c2VjLmtleXNbaV0sIHNlYy0+a2V5c1tpXSwKKwkJCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJj0gfigxIDw8IGkpOworCQkJZWxzZSB7CisJCQkJbWVtY3B5KHByaXYtPmllZWUtPnNlYy5rZXlzW2ldLCBzZWMtPmtleXNbaV0sCiAJCQkJICAgICAgIHNlYy0+a2V5X3NpemVzW2ldKTsKLQkJCXByaXYtPnNlYy5mbGFncyB8PSAoMSA8PCBpKTsKKwkJCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gKDEgPDwgaSk7CisJCQl9CiAJCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7Ci0JCX0KKwkJfSBlbHNlIGlmIChzZWMtPmxldmVsICE9IFNFQ19MRVZFTF8xKQorCQkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzICY9IH4oMSA8PCBpKTsKIAl9CiAKLQlpZiAoKHNlYy0+ZmxhZ3MgJiBTRUNfQUNUSVZFX0tFWSkgJiYKLQkgICAgcHJpdi0+c2VjLmFjdGl2ZV9rZXkgIT0gc2VjLT5hY3RpdmVfa2V5KSB7CisJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfQUNUSVZFX0tFWSkgewogCQlpZiAoc2VjLT5hY3RpdmVfa2V5IDw9IDMpIHsKLQkJCXByaXYtPnNlYy5hY3RpdmVfa2V5ID0gc2VjLT5hY3RpdmVfa2V5OwotCQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19BQ1RJVkVfS0VZOworCQkJcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7CisJCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0FDVElWRV9LRVk7CiAJCX0gZWxzZQotCQkJcHJpdi0+c2VjLmZsYWdzICY9IH5TRUNfQUNUSVZFX0tFWTsKKwkJCXByaXYtPmllZWUtPnNlYy5mbGFncyAmPSB+U0VDX0FDVElWRV9LRVk7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKLQl9CisJfSBlbHNlCisJCXByaXYtPmllZWUtPnNlYy5mbGFncyAmPSB+U0VDX0FDVElWRV9LRVk7CiAKIAlpZiAoKHNlYy0+ZmxhZ3MgJiBTRUNfQVVUSF9NT0RFKSAmJgotCSAgICAocHJpdi0+c2VjLmF1dGhfbW9kZSAhPSBzZWMtPmF1dGhfbW9kZSkpIHsKLQkJcHJpdi0+c2VjLmF1dGhfbW9kZSA9IHNlYy0+YXV0aF9tb2RlOwotCQlwcml2LT5zZWMuZmxhZ3MgfD0gU0VDX0FVVEhfTU9ERTsKKwkgICAgKHByaXYtPmllZWUtPnNlYy5hdXRoX21vZGUgIT0gc2VjLT5hdXRoX21vZGUpKSB7CisJCXByaXYtPmllZWUtPnNlYy5hdXRoX21vZGUgPSBzZWMtPmF1dGhfbW9kZTsKKwkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzIHw9IFNFQ19BVVRIX01PREU7CiAJCWlmIChzZWMtPmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKIAkJCXByaXYtPmNhcGFiaWxpdHkgfD0gQ0FQX1NIQVJFRF9LRVk7CiAJCWVsc2UKQEAgLTY3MjQsOSArMTAyMTEsOSBAQAogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJfQogCi0JaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5BQkxFRCAmJiBwcml2LT5zZWMuZW5hYmxlZCAhPSBzZWMtPmVuYWJsZWQpIHsKLQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19FTkFCTEVEOwotCQlwcml2LT5zZWMuZW5hYmxlZCA9IHNlYy0+ZW5hYmxlZDsKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19FTkFCTEVEICYmIHByaXYtPmllZWUtPnNlYy5lbmFibGVkICE9IHNlYy0+ZW5hYmxlZCkgeworCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0VOQUJMRUQ7CisJCXByaXYtPmllZWUtPnNlYy5lbmFibGVkID0gc2VjLT5lbmFibGVkOwogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJCWlmIChzZWMtPmVuYWJsZWQpCiAJCQlwcml2LT5jYXBhYmlsaXR5IHw9IENBUF9QUklWQUNZX09OOwpAQCAtNjczNCwxMiArMTAyMjEsMTggQEAKIAkJCXByaXYtPmNhcGFiaWxpdHkgJj0gfkNBUF9QUklWQUNZX09OOwogCX0KIAotCWlmIChzZWMtPmZsYWdzICYgU0VDX0xFVkVMICYmIHByaXYtPnNlYy5sZXZlbCAhPSBzZWMtPmxldmVsKSB7Ci0JCXByaXYtPnNlYy5sZXZlbCA9IHNlYy0+bGV2ZWw7Ci0JCXByaXYtPnNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CisJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5DUllQVCkKKwkJcHJpdi0+aWVlZS0+c2VjLmVuY3J5cHQgPSBzZWMtPmVuY3J5cHQ7CisKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19MRVZFTCAmJiBwcml2LT5pZWVlLT5zZWMubGV2ZWwgIT0gc2VjLT5sZXZlbCkgeworCQlwcml2LT5pZWVlLT5zZWMubGV2ZWwgPSBzZWMtPmxldmVsOworCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOwogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJfQogCisJaWYgKCFwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQgJiYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5DUllQVCkpCisJCWlwd19zZXRfaHdjcnlwdG9fa2V5cyhwcml2KTsKKwogCS8qIFRvIG1hdGNoIGN1cnJlbnQgZnVuY3Rpb25hbGl0eSBvZiBpcHcyMTAwICh3aGljaCB3b3JrcyB3ZWxsIHcvCiAJICogdmFyaW91cyBzdXBwbGljYW50cywgd2UgZG9uJ3QgZm9yY2UgYSBkaXNhc3NvY2lhdGUgaWYgdGhlCiAJICogcHJpdmFjeSBjYXBhYmlsaXR5IGNoYW5nZXMgLi4uICovCkBAIC02Nzg4LDI5ICsxMDI4MSwxMCBAQAogCiBzdGF0aWMgaW50IGlwd19jb25maWcoc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCWludCBpOwotCXN0cnVjdCBpcHdfdHhfcG93ZXIgdHhfcG93ZXI7Ci0KLQltZW1zZXQoJnByaXYtPnN5c19jb25maWcsIDAsIHNpemVvZihwcml2LT5zeXNfY29uZmlnKSk7Ci0JbWVtc2V0KCZ0eF9wb3dlciwgMCwgc2l6ZW9mKHR4X3Bvd2VyKSk7Ci0KIAkvKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gaXB3X3VwLCB3aGljaCByZXNldHMvcmVsb2FkcyB0aGUgZmlybXdhcmUKIAkgICBzbywgd2UgZG9uJ3QgbmVlZCB0byBmaXJzdCBkaXNhYmxlIHRoZSBjYXJkIGJlZm9yZSB3ZSBjb25maWd1cmUKIAkgICBpdCAqLwotCi0JLyogY29uZmlndXJlIGRldmljZSBmb3IgJ0cnIGJhbmQgKi8KLQl0eF9wb3dlci5pZWVlX21vZGUgPSBJUFdfR19NT0RFOwotCXR4X3Bvd2VyLm51bV9jaGFubmVscyA9IDExOwotCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7Ci0JCXR4X3Bvd2VyLmNoYW5uZWxzX3R4X3Bvd2VyW2ldLmNoYW5uZWxfbnVtYmVyID0gaSArIDE7Ci0JCXR4X3Bvd2VyLmNoYW5uZWxzX3R4X3Bvd2VyW2ldLnR4X3Bvd2VyID0gcHJpdi0+dHhfcG93ZXI7Ci0JfQotCWlmIChpcHdfc2VuZF90eF9wb3dlcihwcml2LCAmdHhfcG93ZXIpKQotCQlnb3RvIGVycm9yOwotCi0JLyogY29uZmlndXJlIGRldmljZSB0byBhbHNvIGhhbmRsZSAnQicgYmFuZCAqLwotCXR4X3Bvd2VyLmllZWVfbW9kZSA9IElQV19CX01PREU7Ci0JaWYgKGlwd19zZW5kX3R4X3Bvd2VyKHByaXYsICZ0eF9wb3dlcikpCisJaWYgKGlwd19zZXRfdHhfcG93ZXIocHJpdikpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBpbml0aWFsaXplIGFkYXB0ZXIgYWRkcmVzcyAqLwpAQCAtNjgxOSw2ICsxMDI5MywxMSBAQAogCiAJLyogc2V0IGJhc2ljIHN5c3RlbSBjb25maWcgc2V0dGluZ3MgKi8KIAlpbml0X3N5c19jb25maWcoJnByaXYtPnN5c19jb25maWcpOworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCisJCXByaXYtPnN5c19jb25maWcuYW5zd2VyX2Jyb2FkY2FzdF9zc2lkX3Byb2JlID0gMTsKKwllbHNlCisJCXByaXYtPnN5c19jb25maWcuYW5zd2VyX2Jyb2FkY2FzdF9zc2lkX3Byb2JlID0gMDsKKwogCWlmIChpcHdfc2VuZF9zeXN0ZW1fY29uZmlnKHByaXYsICZwcml2LT5zeXNfY29uZmlnKSkKIAkJZ290byBlcnJvcjsKIApAQCAtNjgzMSw2ICsxMDMxMCwxMCBAQAogCQlpZiAoaXB3X3NlbmRfcnRzX3RocmVzaG9sZChwcml2LCBwcml2LT5ydHNfdGhyZXNob2xkKSkKIAkJCWdvdG8gZXJyb3I7CiAJfQorI2lmZGVmIENPTkZJR19JUFdfUU9TCisJSVBXX0RFQlVHX1FPUygiUW9TOiBjYWxsIGlwd19xb3NfYWN0aXZhdGVcbiIpOworCWlwd19xb3NfYWN0aXZhdGUocHJpdiwgTlVMTCk7CisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KIAogCWlmIChpcHdfc2V0X3JhbmRvbV9zZWVkKHByaXYpKQogCQlnb3RvIGVycm9yOwpAQCAtNjgzOSw5ICsxMDMyMiwxNyBAQAogCWlmIChpcHdfc2VuZF9ob3N0X2NvbXBsZXRlKHByaXYpKQogCQlnb3RvIGVycm9yOwogCi0JLyogSWYgY29uZmlndXJlZCB0byB0cnkgYW5kIGF1dG8tYXNzb2NpYXRlLCBraWNrIG9mZiBhIHNjYW4gKi8KLQlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19BU1NPQ0lBVEUpICYmIGlwd19yZXF1ZXN0X3NjYW4ocHJpdikpCi0JCWdvdG8gZXJyb3I7CisJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19JTklUOworCisJaXB3X2xlZF9pbml0KHByaXYpOworCWlwd19sZWRfcmFkaW9fb24ocHJpdik7CisJcHJpdi0+bm90aWZfbWlzc2VkX2JlYWNvbnMgPSAwOworCisJLyogU2V0IGhhcmR3YXJlIFdFUCBrZXkgaWYgaXQgaXMgY29uZmlndXJlZC4gKi8KKwlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTikgJiYKKwkgICAgKHByaXYtPmllZWUtPnNlYy5sZXZlbCA9PSBTRUNfTEVWRUxfMSkgJiYKKwkgICAgIShwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQgfHwgcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0KSkKKwkJaXB3X3NldF9od2NyeXB0b19rZXlzKHByaXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTY4NDksMjAgKzEwMzQwLDM3OSBAQAogCXJldHVybiAtRUlPOwogfQogCisvKgorICogTk9URToKKyAqCisgKiBUaGVzZSB0YWJsZXMgaGF2ZSBiZWVuIHRlc3RlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICogSW50ZWwgUFJPL1dpcmVsZXNzIDIyMDBCRyBhbmQgMjkxNUFCRyBOZXR3b3JrIENvbm5lY3Rpb24gQWRhcHRlcnMuCisgKgorICogQWx0ZXJpbmcgdGhpcyB2YWx1ZXMsIHVzaW5nIGl0IG9uIG90aGVyIGhhcmR3YXJlLCBvciBpbiBnZW9ncmFwaGllcworICogbm90IGludGVuZGVkIGZvciByZXNhbGUgb2YgdGhlIGFib3ZlIG1lbnRpb25lZCBJbnRlbCBhZGFwdGVycyBoYXMKKyAqIG5vdCBiZWVuIHRlc3RlZC4KKyAqCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyBpcHdfZ2Vvc1tdID0geworCXsJCQkvKiBSZXN0cmljdGVkICovCisJICItLS0iLAorCSAuYmdfY2hhbm5lbHMgPSAxMSwKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX19LAorCSB9LAorCisJewkJCS8qIEN1c3RvbSBVUy9DYW5hZGEgKi8KKwkgIlpaRiIsCisJIC5iZ19jaGFubmVscyA9IDExLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCisJIC5hX2NoYW5uZWxzID0gOCwKKwkgLmEgPSB7ezUxODAsIDM2fSwKKwkgICAgICAgezUyMDAsIDQwfSwKKwkgICAgICAgezUyMjAsIDQ0fSwKKwkgICAgICAgezUyNDAsIDQ4fSwKKwkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIH0sCisKKwl7CQkJLyogUmVzdCBvZiBXb3JsZCAqLworCSAiWlpEIiwKKwkgLmJnX2NoYW5uZWxzID0gMTMsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LCB7MjQ2NywgMTJ9LAorCQl7MjQ3MiwgMTN9fSwKKwkgfSwKKworCXsJCQkvKiBDdXN0b20gVVNBICYgRXVyb3BlICYgSGlnaCAqLworCSAiWlpBIiwKKwkgLmJnX2NoYW5uZWxzID0gMTEsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9fSwKKwkgLmFfY2hhbm5lbHMgPSAxMywKKwkgLmEgPSB7ezUxODAsIDM2fSwKKwkgICAgICAgezUyMDAsIDQwfSwKKwkgICAgICAgezUyMjAsIDQ0fSwKKwkgICAgICAgezUyNDAsIDQ4fSwKKwkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NDUsIDE0OX0sCisJICAgICAgIHs1NzY1LCAxNTN9LAorCSAgICAgICB7NTc4NSwgMTU3fSwKKwkgICAgICAgezU4MDUsIDE2MX0sCisJICAgICAgIHs1ODI1LCAxNjV9fSwKKwkgfSwKKworCXsJCQkvKiBDdXN0b20gTkEgJiBFdXJvcGUgKi8KKwkgIlpaQiIsCisJIC5iZ19jaGFubmVscyA9IDExLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCisJIC5hX2NoYW5uZWxzID0gMTMsCisJIC5hID0ge3s1MTgwLCAzNn0sCisJICAgICAgIHs1MjAwLCA0MH0sCisJICAgICAgIHs1MjIwLCA0NH0sCisJICAgICAgIHs1MjQwLCA0OH0sCisJICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzQ1LCAxNDksIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc2NSwgMTUzLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3ODUsIDE1NywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODA1LCAxNjEsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgyNSwgMTY1LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIH0sCisKKwl7CQkJLyogQ3VzdG9tIEphcGFuICovCisJICJaWkMiLAorCSAuYmdfY2hhbm5lbHMgPSAxMSwKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX19LAorCSAuYV9jaGFubmVscyA9IDQsCisJIC5hID0ge3s1MTcwLCAzNH0sIHs1MTkwLCAzOH0sCisJICAgICAgIHs1MjEwLCA0Mn0sIHs1MjMwLCA0Nn19LAorCSB9LAorCisJewkJCS8qIEN1c3RvbSAqLworCSAiWlpNIiwKKwkgLmJnX2NoYW5uZWxzID0gMTEsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9fSwKKwkgfSwKKworCXsJCQkvKiBFdXJvcGUgKi8KKwkgIlpaRSIsCisJIC5iZ19jaGFubmVscyA9IDEzLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfSwgezI0NjcsIDEyfSwKKwkJezI0NzIsIDEzfX0sCisJIC5hX2NoYW5uZWxzID0gMTksCisJIC5hID0ge3s1MTgwLCAzNn0sCisJICAgICAgIHs1MjAwLCA0MH0sCisJICAgICAgIHs1MjIwLCA0NH0sCisJICAgICAgIHs1MjQwLCA0OH0sCisJICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTAwLCAxMDAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTUyMCwgMTA0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1NDAsIDEwOCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTYwLCAxMTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU4MCwgMTE2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2MDAsIDEyMCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjIwLCAxMjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY0MCwgMTI4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2NjAsIDEzMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjgwLCAxMzYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTcwMCwgMTQwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIH0sCisKKwl7CQkJLyogQ3VzdG9tIEphcGFuICovCisJICJaWkoiLAorCSAuYmdfY2hhbm5lbHMgPSAxNCwKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sIHsyNDY3LCAxMn0sCisJCXsyNDcyLCAxM30sIHsyNDg0LCAxNCwgSUVFRTgwMjExX0NIX0JfT05MWX19LAorCSAuYV9jaGFubmVscyA9IDQsCisJIC5hID0ge3s1MTcwLCAzNH0sIHs1MTkwLCAzOH0sCisJICAgICAgIHs1MjEwLCA0Mn0sIHs1MjMwLCA0Nn19LAorCSB9LAorCisJewkJCS8qIFJlc3Qgb2YgV29ybGQgKi8KKwkgIlpaUiIsCisJIC5iZ19jaGFubmVscyA9IDE0LAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfSwgezI0NjcsIDEyfSwKKwkJezI0NzIsIDEzfSwgezI0ODQsIDE0LCBJRUVFODAyMTFfQ0hfQl9PTkxZIHwKKwkJCSAgICAgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSB9LAorCisJewkJCS8qIEhpZ2ggQmFuZCAqLworCSAiWlpIIiwKKwkgLmJnX2NoYW5uZWxzID0gMTMsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LAorCQl7MjQ2NywgMTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCQl7MjQ3MiwgMTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgLmFfY2hhbm5lbHMgPSA0LAorCSAuYSA9IHt7NTc0NSwgMTQ5fSwgezU3NjUsIDE1M30sCisJICAgICAgIHs1Nzg1LCAxNTd9LCB7NTgwNSwgMTYxfX0sCisJIH0sCisKKwl7CQkJLyogQ3VzdG9tIEV1cm9wZSAqLworCSAiWlpHIiwKKwkgLmJnX2NoYW5uZWxzID0gMTMsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LAorCQl7MjQ2NywgMTJ9LCB7MjQ3MiwgMTN9fSwKKwkgLmFfY2hhbm5lbHMgPSA0LAorCSAuYSA9IHt7NTE4MCwgMzZ9LCB7NTIwMCwgNDB9LAorCSAgICAgICB7NTIyMCwgNDR9LCB7NTI0MCwgNDh9fSwKKwkgfSwKKworCXsJCQkvKiBFdXJvcGUgKi8KKwkgIlpaSyIsCisJIC5iZ19jaGFubmVscyA9IDEzLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfSwKKwkJezI0NjcsIDEyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkJezI0NzIsIDEzLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIC5hX2NoYW5uZWxzID0gMjQsCisJIC5hID0ge3s1MTgwLCAzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjAwLCA0MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjIwLCA0NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjQwLCA0OCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTAwLCAxMDAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTUyMCwgMTA0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1NDAsIDEwOCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTYwLCAxMTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU4MCwgMTE2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2MDAsIDEyMCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjIwLCAxMjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY0MCwgMTI4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2NjAsIDEzMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjgwLCAxMzYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTcwMCwgMTQwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NDUsIDE0OSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzY1LCAxNTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc4NSwgMTU3LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU4MDUsIDE2MSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODI1LCAxNjUsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgfSwKKworCXsJCQkvKiBFdXJvcGUgKi8KKwkgIlpaTCIsCisJIC5iZ19jaGFubmVscyA9IDExLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCisJIC5hX2NoYW5uZWxzID0gMTMsCisJIC5hID0ge3s1MTgwLCAzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjAwLCA0MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjIwLCA0NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjQwLCA0OCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzQ1LCAxNDksIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc2NSwgMTUzLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3ODUsIDE1NywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODA1LCAxNjEsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgyNSwgMTY1LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIH0KK307CisKKy8qIEdFTyBjb2RlIGJvcnJvd2VkIGZyb20gaWVlZTgwMjExX2dlby5jICovCitzdGF0aWMgaW50IGlwd19pc192YWxpZF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCBjaGFubmVsKQoreworCWludCBpOworCisJLyogRHJpdmVyIG5lZWRzIHRvIGluaXRpYWxpemUgdGhlIGdlb2dyYXBoeSBtYXAgYmVmb3JlIHVzaW5nCisJICogdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyAqLworCUJVR19PTihpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPT0gMCAmJiBpZWVlLT5nZW8uYV9jaGFubmVscyA9PSAwKTsKKworCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkKKwkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5iZ19jaGFubmVsczsgaSsrKQorCQkJLyogTk9URTogSWYgRyBtb2RlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnV0CisJCQkgKiB0aGlzIGlzIGEgQiBvbmx5IGNoYW5uZWwsIHdlIGRvbid0IHNlZSBpdAorCQkJICogYXMgdmFsaWQuICovCisJCQlpZiAoKGllZWUtPmdlby5iZ1tpXS5jaGFubmVsID09IGNoYW5uZWwpICYmCisJCQkgICAgKCEoaWVlZS0+bW9kZSAmIElFRUVfRykgfHwKKwkJCSAgICAgIShpZWVlLT5nZW8uYmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfQl9PTkxZKSkpCisJCQkJcmV0dXJuIElFRUU4MDIxMV8yNEdIWl9CQU5EOworCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQorCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKKwkJCWlmIChpZWVlLT5nZW8uYVtpXS5jaGFubmVsID09IGNoYW5uZWwpCisJCQkJcmV0dXJuIElFRUU4MDIxMV81MkdIWl9CQU5EOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X2NoYW5uZWxfdG9faW5kZXgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCit7CisJaW50IGk7CisKKwkvKiBEcml2ZXIgbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgZ2VvZ3JhcGh5IG1hcCBiZWZvcmUgdXNpbmcKKwkgKiB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zICovCisJQlVHX09OKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApOworCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKQorCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCisJCQlpZiAoaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKKwkJCQlyZXR1cm4gaTsKKworCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5hX2NoYW5uZWxzOyBpKyspCisJCQlpZiAoaWVlZS0+Z2VvLmFbaV0uY2hhbm5lbCA9PSBjaGFubmVsKQorCQkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdTggaXB3X2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTMyIGZyZXEpCit7CisJaW50IGk7CisKKwkvKiBEcml2ZXIgbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgZ2VvZ3JhcGh5IG1hcCBiZWZvcmUgdXNpbmcKKwkgKiB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zICovCisJQlVHX09OKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApOworCisJZnJlcSAvPSAxMDAwMDA7CisKKwlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCisJCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYmdfY2hhbm5lbHM7IGkrKykKKwkJCWlmIChpZWVlLT5nZW8uYmdbaV0uZnJlcSA9PSBmcmVxKQorCQkJCXJldHVybiBpZWVlLT5nZW8uYmdbaV0uY2hhbm5lbDsKKworCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5hX2NoYW5uZWxzOyBpKyspCisJCQlpZiAoaWVlZS0+Z2VvLmFbaV0uZnJlcSA9PSBmcmVxKQorCQkJCXJldHVybiBpZWVlLT5nZW8uYVtpXS5jaGFubmVsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3NldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvKQoreworCW1lbWNweShpZWVlLT5nZW8ubmFtZSwgZ2VvLT5uYW1lLCAzKTsKKwlpZWVlLT5nZW8ubmFtZVszXSA9ICdcMCc7CisJaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID0gZ2VvLT5iZ19jaGFubmVsczsKKwlpZWVlLT5nZW8uYV9jaGFubmVscyA9IGdlby0+YV9jaGFubmVsczsKKwltZW1jcHkoaWVlZS0+Z2VvLmJnLCBnZW8tPmJnLCBnZW8tPmJnX2NoYW5uZWxzICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCW1lbWNweShpZWVlLT5nZW8uYSwgZ2VvLT5hLCBpZWVlLT5nZW8uYV9jaGFubmVscyAqCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICppcHdfZ2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3sKKwlyZXR1cm4gJmllZWUtPmdlbzsKK30KKwogI2RlZmluZSBNQVhfSFdfUkVTVEFSVFMgNQogc3RhdGljIGludCBpcHdfdXAoc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCWludCByYywgaTsKKwlpbnQgcmMsIGksIGo7CiAKIAlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0VYSVRfUEVORElORykKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAoY21kbG9nICYmICFwcml2LT5jbWRsb2cpIHsKKwkJcHJpdi0+Y21kbG9nID0ga21hbGxvYyhzaXplb2YoKnByaXYtPmNtZGxvZykgKiBjbWRsb2csCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAocHJpdi0+Y21kbG9nID09IE5VTEwpIHsKKwkJCUlQV19FUlJPUigiRXJyb3IgYWxsb2NhdGluZyAlZCBjb21tYW5kIGxvZyBlbnRyaWVzLlxuIiwKKwkJCQkgIGNtZGxvZyk7CisJCX0gZWxzZSB7CisJCQltZW1zZXQocHJpdi0+Y21kbG9nLCAwLCBzaXplb2YoKnByaXYtPmNtZGxvZykgKiBjbWRsb2cpOworCQkJcHJpdi0+Y21kbG9nX2xlbiA9IGNtZGxvZzsKKwkJfQorCX0KKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdfUkVTVEFSVFM7IGkrKykgewogCQkvKiBMb2FkIHRoZSBtaWNyb2NvZGUsIGZpcm13YXJlLCBhbmQgZWVwcm9tLgogCQkgKiBBbHNvIHN0YXJ0IHRoZSBjbG9ja3MuICovCiAJCXJjID0gaXB3X2xvYWQocHJpdik7CiAJCWlmIChyYykgewotCQkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZTogMHglMDhYXG4iLCByYyk7CisJCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlOiAlZFxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAKQEAgLTY4NzEsMjAgKzEwNzIxLDUwIEBACiAJCQllZXByb21fcGFyc2VfbWFjKHByaXYsIHByaXYtPm1hY19hZGRyKTsKIAkJbWVtY3B5KHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCi0JCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQorCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShpcHdfZ2Vvcyk7IGorKykgeworCQkJaWYgKCFtZW1jbXAoJnByaXYtPmVlcHJvbVtFRVBST01fQ09VTlRSWV9DT0RFXSwKKwkJCQkgICAgaXB3X2dlb3Nbal0ubmFtZSwgMykpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGogPT0gQVJSQVlfU0laRShpcHdfZ2VvcykpIHsKKwkJCUlQV19XQVJOSU5HKCJTS1UgWyVjJWMlY10gbm90IHJlY29nbml6ZWQuXG4iLAorCQkJCSAgICBwcml2LT5lZXByb21bRUVQUk9NX0NPVU5UUllfQ09ERSArIDBdLAorCQkJCSAgICBwcml2LT5lZXByb21bRUVQUk9NX0NPVU5UUllfQ09ERSArIDFdLAorCQkJCSAgICBwcml2LT5lZXByb21bRUVQUk9NX0NPVU5UUllfQ09ERSArIDJdKTsKKwkJCWogPSAwOworCQl9CisJCWlmIChpcHdfc2V0X2dlbyhwcml2LT5pZWVlLCAmaXB3X2dlb3Nbal0pKSB7CisJCQlJUFdfV0FSTklORygiQ291bGQgbm90IHNldCBnZW9ncmFwaHkuIik7CiAJCQlyZXR1cm4gMDsKKwkJfQorCisJCUlQV19ERUJVR19JTkZPKCJHZW9ncmFwaHkgJTAzZCBbJXNdIGRldGVjdGVkLlxuIiwKKwkJCSAgICAgICBqLCBwcml2LT5pZWVlLT5nZW8ubmFtZSk7CisKKwkJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSB7CisJCQlJUFdfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgbW9kdWxlIHBhcmFtZXRlci5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAocmZfa2lsbF9hY3RpdmUocHJpdikpIHsKKwkJCUlQV19XQVJOSU5HKCJSYWRpbyBGcmVxdWVuY3kgS2lsbCBTd2l0Y2ggaXMgT246XG4iCisJCQkJICAgICJLaWxsIHN3aXRjaCBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yICIKKwkJCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwsCisJCQkJCSAgIDIgKiBIWik7CisJCQlyZXR1cm4gMDsKKwkJfQogCiAJCXJjID0gaXB3X2NvbmZpZyhwcml2KTsKIAkJaWYgKCFyYykgewogCQkJSVBXX0RFQlVHX0lORk8oIkNvbmZpZ3VyZWQgZGV2aWNlIG9uIGNvdW50ICVpXG4iLCBpKTsKLQkJCXByaXYtPm5vdGlmX21pc3NlZF9iZWFjb25zID0gMDsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHByaXYtPm5ldF9kZXYpOworCisJCQkvKiBJZiBjb25maWd1cmUgdG8gdHJ5IGFuZCBhdXRvLWFzc29jaWF0ZSwga2ljaworCQkJICogb2ZmIGEgc2Nhbi4gKi8KKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwogCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7Ci0JCQlJUFdfREVCVUdfSU5GTygiRGV2aWNlIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAweCUwOFhcbiIsCi0JCQkJICAgICAgIHJjKTsKIAkJfQogCisJCUlQV19ERUJVR19JTkZPKCJEZXZpY2UgY29uZmlndXJhdGlvbiBmYWlsZWQ6IDB4JTA4WFxuIiwgcmMpOwogCQlJUFdfREVCVUdfSU5GTygiRmFpbGVkIHRvIGNvbmZpZyBkZXZpY2Ugb24gcmV0cnkgJWQgb2YgJWRcbiIsCiAJCQkgICAgICAgaSwgTUFYX0hXX1JFU1RBUlRTKTsKIApAQCAtNjg5Niw0NyArMTA3NzYsMTAxIEBACiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCiAJSVBXX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgdm9pZCBpcHdfYmdfdXAodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X3VwKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCitzdGF0aWMgdm9pZCBpcHdfZGVpbml0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKKwkJSVBXX0RFQlVHX0lORk8oIkFib3J0aW5nIHNjYW4gZHVyaW5nIHNodXRkb3duLlxuIik7CisJCWlwd19hYm9ydF9zY2FuKHByaXYpOworCX0KKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgeworCQlJUFdfREVCVUdfSU5GTygiRGlzYXNzb2NpYXRpbmcgZHVyaW5nIHNodXRkb3duLlxuIik7CisJCWlwd19kaXNhc3NvY2lhdGUocHJpdik7CisJfQorCisJaXB3X2xlZF9zaHV0ZG93bihwcml2KTsKKworCS8qIFdhaXQgdXAgdG8gMXMgZm9yIHN0YXR1cyB0byBjaGFuZ2UgdG8gbm90IHNjYW5uaW5nIGFuZCBub3QKKwkgKiBhc3NvY2lhdGVkIChkaXNhc3NvY2lhdGlvbiBjYW4gdGFrZSBhIHdoaWxlIGZvciBhIGZ1bCA4MDIuMTEKKwkgKiBleGNoYW5nZSAqLworCWZvciAoaSA9IDEwMDA7IGkgJiYgKHByaXYtPnN0YXR1cyAmCisJCQkgICAgIChTVEFUVVNfRElTQVNTT0NJQVRJTkcgfAorCQkJICAgICAgU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfU0NBTk5JTkcpKTsgaS0tKQorCQl1ZGVsYXkoMTApOworCisJaWYgKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfRElTQVNTT0NJQVRJTkcgfAorCQkJICAgIFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX1NDQU5OSU5HKSkKKwkJSVBXX0RFQlVHX0lORk8oIlN0aWxsIGFzc29jaWF0ZWQgb3Igc2Nhbm5pbmcuLi5cbiIpOworCWVsc2UKKwkJSVBXX0RFQlVHX0lORk8oIlRvb2sgJWRtcyB0byBkZS1pbml0XG4iLCAxMDAwIC0gaSk7CisKKwkvKiBBdHRlbXB0IHRvIGRpc2FibGUgdGhlIGNhcmQgKi8KKwlpcHdfc2VuZF9jYXJkX2Rpc2FibGUocHJpdiwgMCk7CisKKwlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19JTklUOworfQorCiBzdGF0aWMgdm9pZCBpcHdfZG93bihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0JLyogQXR0ZW1wdCB0byBkaXNhYmxlIHRoZSBjYXJkICovCi0jaWYgMAotCWlwd19zZW5kX2NhcmRfZGlzYWJsZShwcml2LCAwKTsKLSNlbmRpZgorCWludCBleGl0X3BlbmRpbmcgPSBwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HOworCisJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19FWElUX1BFTkRJTkc7CisKKwlpZiAoaXB3X2lzX2luaXQocHJpdikpCisJCWlwd19kZWluaXQocHJpdik7CisKKwkvKiBXaXBlIG91dCB0aGUgRVhJVF9QRU5ESU5HIHN0YXR1cyBiaXQgaWYgd2UgYXJlIG5vdCBhY3R1YWxseQorCSAqIGV4aXRpbmcgdGhlIG1vZHVsZSAqLworCWlmICghZXhpdF9wZW5kaW5nKQorCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19FWElUX1BFTkRJTkc7CiAKIAkvKiB0ZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAlpcHdfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAJLyogQ2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsICovCi0JcHJpdi0+c3RhdHVzICY9IFNUQVRVU19SRl9LSUxMX01BU0s7Ci0KKwlwcml2LT5zdGF0dXMgJj0gU1RBVFVTX1JGX0tJTExfTUFTSyB8IFNUQVRVU19FWElUX1BFTkRJTkc7CiAJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0X2Rldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKIAogCWlwd19zdG9wX25pYyhwcml2KTsKKworCWlwd19sZWRfcmFkaW9fb2ZmKHByaXYpOworfQorCitzdGF0aWMgdm9pZCBpcHdfYmdfZG93bih2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfZG93bihkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKIH0KIAogLyogQ2FsbGVkIGJ5IHJlZ2lzdGVyX25ldGRldigpICovCiBzdGF0aWMgaW50IGlwd19uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJZG93bigmcHJpdi0+c2VtKTsKIAotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVykgewotCQlJUFdfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgbW9kdWxlIHBhcmFtZXRlci5cbiIpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHJmX2tpbGxfYWN0aXZlKHByaXYpKSB7Ci0JCUlQV19XQVJOSU5HKCJSYWRpbyBGcmVxdWVuY3kgS2lsbCBTd2l0Y2ggaXMgT246XG4iCi0JCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgotCQkJICAgICJ3aXJlbGVzcyBuZXR3b3JraW5nIHRvIHdvcmsuXG4iKTsKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwsIDIgKiBIWik7Ci0JCXJldHVybiAwOworCWlmIChpcHdfdXAocHJpdikpIHsKKwkJdXAoJnByaXYtPnNlbSk7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChpcHdfdXAocHJpdikpCi0JCXJldHVybiAtRUlPOwotCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5NjEsNyArMTA4OTUsNyBAQAogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNDMsIDB4ODA4NiwgMHgyNzYyLCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQkcgKi8KLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogMjIyNUJHICovCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4NDIyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCS8qIEJHICovCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4NDIyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCS8qIEFCRyAqLwogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQyMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAkvKiBBQkcgKi8KIApAQCAtNjk4MSwxMSArMTA5MTUsMTYgQEAKIAkmZGV2X2F0dHJfbmljX3R5cGUuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX2NmZy5hdHRyLAotCSZkZXZfYXR0cl9kdW1wX2Vycm9ycy5hdHRyLAotCSZkZXZfYXR0cl9kdW1wX2V2ZW50cy5hdHRyLAorCSZkZXZfYXR0cl9lcnJvci5hdHRyLAorCSZkZXZfYXR0cl9ldmVudF9sb2cuYXR0ciwKKwkmZGV2X2F0dHJfY21kX2xvZy5hdHRyLAogCSZkZXZfYXR0cl9lZXByb21fZGVsYXkuYXR0ciwKIAkmZGV2X2F0dHJfdWNvZGVfdmVyc2lvbi5hdHRyLAogCSZkZXZfYXR0cl9ydGMuYXR0ciwKKwkmZGV2X2F0dHJfc2Nhbl9hZ2UuYXR0ciwKKwkmZGV2X2F0dHJfbGVkLmF0dHIsCisJJmRldl9hdHRyX3NwZWVkX3NjYW4uYXR0ciwKKwkmZGV2X2F0dHJfbmV0X3N0YXRzLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtNzAwMSw3ICsxMDk0MCw3IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXUzMiBsZW5ndGgsIHZhbDsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXY7Ci0JaW50IGJhbmQsIG1vZHVsYXRpb247CisJaW50IGk7CiAKIAluZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaXB3X3ByaXYpKTsKIAlpZiAobmV0X2RldiA9PSBOVUxMKSB7CkBAIC03MDExLDEzICsxMDk1MCwxNyBAQAogCiAJcHJpdiA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwogCXByaXYtPmllZWUgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwogCXByaXYtPm5ldF9kZXYgPSBuZXRfZGV2OwogCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKIAlpcHdfZGVidWdfbGV2ZWwgPSBkZWJ1ZzsKICNlbmRpZgogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVBXX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSk7CiAKKwlpbml0X01VVEVYKCZwcml2LT5zZW0pOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9mcmVlX2llZWU4MDIxMTsKQEAgLTcwNjQsOTAgKzExMDA3LDcgQEAKIAkJZ290byBvdXRfaW91bm1hcDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWVzIGhlcmUgKi8KLQlpZiAoaWZuYW1lKQotCQlzdHJuY3B5KG5ldF9kZXYtPm5hbWUsIGlmbmFtZSwgSUZOQU1TSVopOwotCi0JaWYgKGFzc29jaWF0ZSkKLQkJcHJpdi0+Y29uZmlnIHw9IENGR19BU1NPQ0lBVEU7Ci0JZWxzZQotCQlJUFdfREVCVUdfSU5GTygiQXV0byBhc3NvY2lhdGUgZGlzYWJsZWQuXG4iKTsKLQotCWlmIChhdXRvX2NyZWF0ZSkKLQkJcHJpdi0+Y29uZmlnIHw9IENGR19BREhPQ19DUkVBVEU7Ci0JZWxzZQotCQlJUFdfREVCVUdfSU5GTygiQXV0byBhZGhvYyBjcmVhdGlvbiBkaXNhYmxlZC5cbiIpOwotCi0JaWYgKGRpc2FibGUpIHsKLQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19SRl9LSUxMX1NXOwotCQlJUFdfREVCVUdfSU5GTygiUmFkaW8gZGlzYWJsZWQuXG4iKTsKLQl9Ci0KLQlpZiAoY2hhbm5lbCAhPSAwKSB7Ci0JCXByaXYtPmNvbmZpZyB8PSBDRkdfU1RBVElDX0NIQU5ORUw7Ci0JCXByaXYtPmNoYW5uZWwgPSBjaGFubmVsOwotCQlJUFdfREVCVUdfSU5GTygiQmluZCB0byBzdGF0aWMgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7Ci0JCUlQV19ERUJVR19JTkZPKCJCaW5kIHRvIHN0YXRpYyBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKLQkJLyogVE9ETzogVmFsaWRhdGUgdGhhdCBwcm92aWRlZCBjaGFubmVsIGlzIGluIHJhbmdlICovCi0JfQotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSAxOgotCQlwcml2LT5pZWVlLT5pd19tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCi0JY2FzZSAyOgotCQlwcml2LT5pZWVlLT5pd19tb2RlID0gSVdfTU9ERV9NT05JVE9SOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JY2FzZSAwOgotCQlwcml2LT5pZWVlLT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChwcml2LT5wY2lfZGV2LT5kZXZpY2UgPT0gMHg0MjIzKSB8fAotCSAgICAocHJpdi0+cGNpX2Rldi0+ZGV2aWNlID09IDB4NDIyNCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogRGV0ZWN0ZWQgSW50ZWwgUFJPL1dpcmVsZXNzIDI5MTVBQkcgTmV0d29yayAiCi0JCSAgICAgICAiQ29ubmVjdGlvblxuIik7Ci0JCXByaXYtPmllZWUtPmFiZ190cnVlID0gMTsKLQkJYmFuZCA9IElFRUU4MDIxMV81MkdIWl9CQU5EIHwgSUVFRTgwMjExXzI0R0haX0JBTkQ7Ci0JCW1vZHVsYXRpb24gPSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OIHwKLQkJICAgIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjsKLQkJcHJpdi0+YWRhcHRlciA9IElQV18yOTE1QUJHOwotCQlwcml2LT5pZWVlLT5tb2RlID0gSUVFRV9BIHwgSUVFRV9HIHwgSUVFRV9COwotCX0gZWxzZSB7Ci0JCWlmIChwcml2LT5wY2lfZGV2LT5kZXZpY2UgPT0gMHg0MjIxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJICAgICAgICI6IERldGVjdGVkIEludGVsIFBSTy9XaXJlbGVzcyAyMjI1QkcgTmV0d29yayAiCi0JCQkgICAgICAgIkNvbm5lY3Rpb25cbiIpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkgICAgICAgIjogRGV0ZWN0ZWQgSW50ZWwgUFJPL1dpcmVsZXNzIDIyMDBCRyBOZXR3b3JrICIKLQkJCSAgICAgICAiQ29ubmVjdGlvblxuIik7Ci0KLQkJcHJpdi0+aWVlZS0+YWJnX3RydWUgPSAwOwotCQliYW5kID0gSUVFRTgwMjExXzI0R0haX0JBTkQ7Ci0JCW1vZHVsYXRpb24gPSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OIHwKLQkJICAgIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjsKLQkJcHJpdi0+YWRhcHRlciA9IElQV18yMjAwQkc7Ci0JCXByaXYtPmllZWUtPm1vZGUgPSBJRUVFX0cgfCBJRUVFX0I7Ci0JfQotCi0JcHJpdi0+aWVlZS0+ZnJlcV9iYW5kID0gYmFuZDsKLQlwcml2LT5pZWVlLT5tb2R1bGF0aW9uID0gbW9kdWxhdGlvbjsKLQotCXByaXYtPnJhdGVzX21hc2sgPSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLOwotCi0JcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgPSBJUFdfTUJfRElTQVNTT0NJQVRFX1RIUkVTSE9MRF9ERUZBVUxUOwotCXByaXYtPnJvYW1pbmdfdGhyZXNob2xkID0gSVBXX01CX1JPQU1JTkdfVEhSRVNIT0xEX0RFRkFVTFQ7Ci0KLQlwcml2LT5ydHNfdGhyZXNob2xkID0gREVGQVVMVF9SVFNfVEhSRVNIT0xEOwotCi0JLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQUMgbW9kZSAqLwotCXByaXYtPnBvd2VyX21vZGUgPSBJUFdfUE9XRVJfQUM7Ci0JcHJpdi0+dHhfcG93ZXIgPSBJUFdfREVGQVVMVF9UWF9QT1dFUjsKKwlpcHdfc3dfcmVzZXQocHJpdiwgMSk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGlwd19pc3IsIFNBX1NISVJRLCBEUlZfTkFNRSwgcHJpdik7CiAJaWYgKGVycikgewpAQCAtNzE1OCw4ICsxMTAxOCwyMCBAQAogCVNFVF9NT0RVTEVfT1dORVIobmV0X2Rldik7CiAJU0VUX05FVERFVl9ERVYobmV0X2RldiwgJnBkZXYtPmRldik7CiAKKwlkb3duKCZwcml2LT5zZW0pOworCiAJcHJpdi0+aWVlZS0+aGFyZF9zdGFydF94bWl0ID0gaXB3X25ldF9oYXJkX3N0YXJ0X3htaXQ7CiAJcHJpdi0+aWVlZS0+c2V0X3NlY3VyaXR5ID0gc2hpbV9fc2V0X3NlY3VyaXR5OworCXByaXYtPmllZWUtPmlzX3F1ZXVlX2Z1bGwgPSBpcHdfbmV0X2lzX3F1ZXVlX2Z1bGw7CisKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCXByaXYtPmllZWUtPmhhbmRsZV9wcm9iZV9yZXNwb25zZSA9IGlwd19oYW5kbGVfYmVhY29uOworCXByaXYtPmllZWUtPmhhbmRsZV9iZWFjb24gPSBpcHdfaGFuZGxlX3Byb2JlX3Jlc3BvbnNlOworCXByaXYtPmllZWUtPmhhbmRsZV9hc3NvY19yZXNwb25zZSA9IGlwd19oYW5kbGVfYXNzb2NfcmVzcG9uc2U7CisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKworCXByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSA9IC0yMDsKKwlwcml2LT5pZWVlLT53b3JzdF9yc3NpID0gLTg1OwogCiAJbmV0X2Rldi0+b3BlbiA9IGlwd19uZXRfb3BlbjsKIAluZXRfZGV2LT5zdG9wID0gaXB3X25ldF9zdG9wOwpAQCAtNzE2Nyw3ICsxMTAzOSw5IEBACiAJbmV0X2Rldi0+Z2V0X3N0YXRzID0gaXB3X25ldF9nZXRfc3RhdHM7CiAJbmV0X2Rldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaXB3X25ldF9zZXRfbXVsdGljYXN0X2xpc3Q7CiAJbmV0X2Rldi0+c2V0X21hY19hZGRyZXNzID0gaXB3X25ldF9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0X2Rldi0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gaXB3X2dldF93aXJlbGVzc19zdGF0czsKKwlwcml2LT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnByaXYtPmllZWUtPnNweV9kYXRhOworCXByaXYtPndpcmVsZXNzX2RhdGEuaWVlZTgwMjExID0gcHJpdi0+aWVlZTsKKwluZXRfZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaXB3X3d4X2hhbmRsZXJfZGVmOwogCW5ldF9kZXYtPmV0aHRvb2xfb3BzID0gJmlwd19ldGh0b29sX29wczsKIAluZXRfZGV2LT5pcnEgPSBwZGV2LT5pcnE7CkBAIC03MTc4LDE4ICsxMTA1MiwxOSBAQAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpcHdfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7CiAJCUlQV19FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7CisJCXVwKCZwcml2LT5zZW0pOwogCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAl9CiAKKwl1cCgmcHJpdi0+c2VtKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CiAJaWYgKGVycikgewogCQlJUFdfRVJST1IoImZhaWxlZCB0byByZWdpc3RlciBuZXR3b3JrIGRldmljZVxuIik7Ci0JCWdvdG8gb3V0X3JlbW92ZV9ncm91cDsKKwkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwogCX0KLQogCXJldHVybiAwOwogCi0gICAgICBvdXRfcmVtb3ZlX2dyb3VwOgorICAgICAgb3V0X3JlbW92ZV9zeXNmczoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXB3X2F0dHJpYnV0ZV9ncm91cCk7CiAgICAgICBvdXRfcmVsZWFzZV9pcnE6CiAJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKQEAgLTcyMTIsMTQgKzExMDg3LDE5IEBACiBzdGF0aWMgdm9pZCBpcHdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7CisJaW50IGk7CisKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfRVhJVF9QRU5ESU5HOworCWRvd24oJnByaXYtPnNlbSk7CiAKKwlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0VYSVRfUEVORElORzsKKwlpcHdfZG93bihwcml2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXB3X2F0dHJpYnV0ZV9ncm91cCk7CiAKLQlpcHdfZG93bihwcml2KTsKKwl1cCgmcHJpdi0+c2VtKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPm5ldF9kZXYpOwogCkBAIC03MjI5LDE2ICsxMTEwOSwzMSBAQAogCX0KIAlpcHdfdHhfcXVldWVfZnJlZShwcml2KTsKIAorCWlmIChwcml2LT5jbWRsb2cpIHsKKwkJa2ZyZWUocHJpdi0+Y21kbG9nKTsKKwkJcHJpdi0+Y21kbG9nID0gTlVMTDsKKwl9CiAJLyogaXB3X2Rvd24gd2lsbCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBtb3JlIHBlbmRpbmcgd29yawogCSAqIGluIHRoZSB3b3JrcXVldWUncywgc28gd2UgY2FuIHNhZmVseSByZW1vdmUgdGhlbSBub3cuICovCi0JaWYgKHByaXYtPndvcmtxdWV1ZSkgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hZGhvY19jaGVjayk7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmdhdGhlcl9zdGF0cyk7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJmX2tpbGwpOwotCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKLQkJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKLQkJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hZGhvY19jaGVjayk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+Z2F0aGVyX3N0YXRzKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5yZXF1ZXN0X3NjYW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJmX2tpbGwpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOworCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CisJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKKworCS8qIEZyZWUgTUFDIGhhc2ggbGlzdCBmb3IgQURIT0MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSVBXX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSkgeworCQkJa2ZyZWUobGlzdF9lbnRyeShwLCBzdHJ1Y3QgaXB3X2lic3Nfc2VxLCBsaXN0KSk7CisJCQlsaXN0X2RlbChwKTsKKwkJfQorCX0KKworCWlmIChwcml2LT5lcnJvcikgeworCQlpcHdfZnJlZV9lcnJvcl9sb2cocHJpdi0+ZXJyb3IpOworCQlwcml2LT5lcnJvciA9IE5VTEw7CiAJfQogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKQEAgLTcyNDcsMTUgKzExMTQyLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaWVlZTgwMjExKHByaXYtPm5ldF9kZXYpOwotCi0jaWZkZWYgQ09ORklHX1BNCi0JaWYgKGZ3X2xvYWRlZCkgewotCQlyZWxlYXNlX2Zpcm13YXJlKGJvb3Rmdyk7Ci0JCXJlbGVhc2VfZmlybXdhcmUodWNvZGUpOwotCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQkJZndfbG9hZGVkID0gMDsKLQl9Ci0jZW5kaWYKKwlmcmVlX2Zpcm13YXJlKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTcyODcsMTMgKzExMTc0LDEwIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogQ29taW5nIG91dCBvZiBzdXNwZW5kLi4uXG4iLCBkZXYtPm5hbWUpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDEwKQotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYsIHByaXYtPnBtX3N0YXRlKTsKLSNlbHNlCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0jZW5kaWYKKwogCS8qCiAJICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bwogCSAqIHJlLWRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAgUENJIFR4IHJldHJpZXMKQEAgLTczNjUsMTYgKzExMjQ5LDMzIEBACiBtb2R1bGVfcGFyYW0oYXV0b19jcmVhdGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGF1dG9fY3JlYXRlLCAiYXV0byBjcmVhdGUgYWRob2MgbmV0d29yayAoZGVmYXVsdCBvbikiKTsKIAorbW9kdWxlX3BhcmFtKGxlZCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobGVkLCAiZW5hYmxlIGxlZCBjb250cm9sIG9uIHNvbWUgc3lzdGVtcyAoZGVmYXVsdCAwIG9mZilcbiIpOworCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKIAogbW9kdWxlX3BhcmFtKGNoYW5uZWwsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWwsICJjaGFubmVsIHRvIGxpbWl0IGFzc29jaWF0ZSB0byAoZGVmYXVsdCAwIFtBTlldKSIpOwogCi1tb2R1bGVfcGFyYW0oaWZuYW1lLCBjaGFycCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlmbmFtZSwgIm5ldHdvcmsgZGV2aWNlIG5hbWUgKGRlZmF1bHQgZXRoJWQpIik7CisjaWZkZWYgQ09ORklHX0lQV19RT1MKK21vZHVsZV9wYXJhbShxb3NfZW5hYmxlLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhxb3NfZW5hYmxlLCAiZW5hYmxlIGFsbCBRb1MgZnVuY3Rpb25hbGl0aXMiKTsKIAotI2lmZGVmIENPTkZJR19JUFdfUFJPTUlTQworbW9kdWxlX3BhcmFtKHFvc19idXJzdF9lbmFibGUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHFvc19idXJzdF9lbmFibGUsICJlbmFibGUgUW9TIGJ1cnN0IG1vZGUiKTsKKworbW9kdWxlX3BhcmFtKHFvc19ub19hY2tfbWFzaywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocW9zX25vX2Fja19tYXNrLCAibWFzayBUeF9RdWV1ZSB0byBubyBhY2siKTsKKworbW9kdWxlX3BhcmFtKGJ1cnN0X2R1cmF0aW9uX0NDSywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYnVyc3RfZHVyYXRpb25fQ0NLLCAic2V0IENDSyBidXJzdCB2YWx1ZSIpOworCittb2R1bGVfcGFyYW0oYnVyc3RfZHVyYXRpb25fT0ZETSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYnVyc3RfZHVyYXRpb25fT0ZETSwgInNldCBPRkRNIGJ1cnN0IHZhbHVlIik7CisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKworI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKIG1vZHVsZV9wYXJhbShtb2RlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtb2RlLCAibmV0d29yayBtb2RlICgwPUJTUywxPUlCU1MsMj1Nb25pdG9yKSIpOwogI2Vsc2UKQEAgLTczODIsNSArMTEyODMsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0MobW9kZSwgIm5ldHdvcmsgbW9kZSAoMD1CU1MsMT1JQlNTKSIpOwogI2VuZGlmCiAKK21vZHVsZV9wYXJhbShod2NyeXB0bywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaHdjcnlwdG8sICJlbmFibGUgaGFyZHdhcmUgY3J5cHRvIChkZWZhdWx0IG9uKSIpOworCittb2R1bGVfcGFyYW0oY21kbG9nLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjbWRsb2csCisJCSAiYWxsb2NhdGUgYSByaW5nIGJ1ZmZlciBmb3IgbG9nZ2luZyBmaXJtd2FyZSBjb21tYW5kcyIpOworCiBtb2R1bGVfZXhpdChpcHdfZXhpdCk7CiBtb2R1bGVfaW5pdChpcHdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKaW5kZXggZTljZjMyYi4uMWM5OGRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJpcHcyMjAwIgogCkBAIC0xNjEsNiArMTYxLDE2IEBACiAgKiBUWCBRdWV1ZSBGbGFnIERlZmluaXRpb25zCiAgKi8KIAorLyogdHggd2VwIGtleSBkZWZpbml0aW9uICovCisjZGVmaW5lIERDVF9XRVBfS0VZX05PVF9JTU1JRElBVEUJMHgwMAorI2RlZmluZSBEQ1RfV0VQX0tFWV82NEJpdAkJMHg0MAorI2RlZmluZSBEQ1RfV0VQX0tFWV8xMjhCaXQJCTB4ODAKKyNkZWZpbmUgRENUX1dFUF9LRVlfMTI4Yml0SVYJCTB4QzAKKyNkZWZpbmUgRENUX1dFUF9LRVlfU0laRV9NQVNLCQkweEMwCisKKyNkZWZpbmUgRENUX1dFUF9LRVlfSU5ERVhfTUFTSwkJMHgwRgorI2RlZmluZSBEQ1RfV0VQX0lOREVYX1VTRV9JTU1FRElBVEUJMHgyMAorCiAvKiBhYm9ydCBhdHRlbXB0IGlmIG1nbXQgZnJhbWUgaXMgcngnZCAqLwogI2RlZmluZSBEQ1RfRkxBR19BQk9SVF9NR01UICAgICAgICAgICAgICAgIDB4MDEKIApAQCAtMTY4LDcgKzE3OCw4IEBACiAjZGVmaW5lIERDVF9GTEFHX0NUU19SRVFVSVJFRCAgICAgICAgICAgICAgMHgwMgogCiAvKiB1c2Ugc2hvcnQgcHJlYW1ibGUgKi8KLSNkZWZpbmUgRENUX0ZMQUdfU0hPUlRfUFJFTUJMICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIERDVF9GTEFHX0xPTkdfUFJFQU1CTEUgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBEQ1RfRkxBR19TSE9SVF9QUkVBTUJMRSAgICAgICAgICAgIDB4MDQKIAogLyogUlRTL0NUUyBmaXJzdCAqLwogI2RlZmluZSBEQ1RfRkxBR19SVFNfUkVRRCAgICAgICAgICAgICAgICAgIDB4MDgKQEAgLTE4NSw5ICsxOTYsMjMgQEAKIC8qIEFDSyByeCBpcyBleHBlY3RlZCB0byBmb2xsb3cgKi8KICNkZWZpbmUgRENUX0ZMQUdfQUNLX1JFUUQgICAgICAgICAgICAgICAgICAweDgwCiAKKy8qIFRYIGZsYWdzIGV4dGVuc2lvbiAqLwogI2RlZmluZSBEQ1RfRkxBR19FWFRfTU9ERV9DQ0sgIDB4MDEKICNkZWZpbmUgRENUX0ZMQUdfRVhUX01PREVfT0ZETSAweDAwCiAKKyNkZWZpbmUgRENUX0ZMQUdfRVhUX1NFQ1VSSVRZX1dFUCAgICAgMHgwMAorI2RlZmluZSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfTk8gICAgICBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfV0VQCisjZGVmaW5lIERDVF9GTEFHX0VYVF9TRUNVUklUWV9DS0lQICAgIDB4MDQKKyNkZWZpbmUgRENUX0ZMQUdfRVhUX1NFQ1VSSVRZX0NDTSAgICAgMHgwOAorI2RlZmluZSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfVEtJUCAgICAweDBDCisjZGVmaW5lIERDVF9GTEFHX0VYVF9TRUNVUklUWV9NQVNLICAgIDB4MEMKKworI2RlZmluZSBEQ1RfRkxBR19FWFRfUU9TX0VOQUJMRUQgICAgICAweDEwCisKKyNkZWZpbmUgRENUX0ZMQUdfRVhUX0hDX05PX1NJRlNfUElGUyAgMHgwMAorI2RlZmluZSBEQ1RfRkxBR19FWFRfSENfU0lGUyAgICAgICAgICAweDIwCisjZGVmaW5lIERDVF9GTEFHX0VYVF9IQ19QSUZTICAgICAgICAgIDB4NDAKKwogI2RlZmluZSBUWF9SWF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkYKICNkZWZpbmUgVFhfRlJBTUVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIFRYX0hPU1RfQ09NTUFORF9UWVBFICAgICAgICAgICAgICAgMHgwMQpAQCAtMjMzLDYgKzI1OCwxMTcgQEAKICNkZWZpbmUgRENSX1RZUEVfU05JRkZFUiAgICAgICAgICAgICAgICAgIDB4MDYKICNkZWZpbmUgRENSX1RZUEVfTVVfQlNTICAgICAgICBEQ1JfVFlQRV9NVV9FU1MKIAorLyogUW9TICBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIENXX01JTl9PRkRNICAgICAgICAgIDE1CisjZGVmaW5lIENXX01BWF9PRkRNICAgICAgICAgIDEwMjMKKyNkZWZpbmUgQ1dfTUlOX0NDSyAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1dfTUFYX0NDSyAgICAgICAgICAgMTAyMworCisjZGVmaW5lIFFPU19UWDBfQ1dfTUlOX09GRE0gICAgICBDV19NSU5fT0ZETQorI2RlZmluZSBRT1NfVFgxX0NXX01JTl9PRkRNICAgICAgQ1dfTUlOX09GRE0KKyNkZWZpbmUgUU9TX1RYMl9DV19NSU5fT0ZETSAgICAgICggKENXX01JTl9PRkRNICsgMSkgLyAyIC0gMSApCisjZGVmaW5lIFFPU19UWDNfQ1dfTUlOX09GRE0gICAgICAoIChDV19NSU5fT0ZETSArIDEpIC8gNCAtIDEgKQorCisjZGVmaW5lIFFPU19UWDBfQ1dfTUlOX0NDSyAgICAgICBDV19NSU5fQ0NLCisjZGVmaW5lIFFPU19UWDFfQ1dfTUlOX0NDSyAgICAgICBDV19NSU5fQ0NLCisjZGVmaW5lIFFPU19UWDJfQ1dfTUlOX0NDSyAgICAgICAoIChDV19NSU5fQ0NLICsgMSkgLyAyIC0gMSApCisjZGVmaW5lIFFPU19UWDNfQ1dfTUlOX0NDSyAgICAgICAoIChDV19NSU5fQ0NLICsgMSkgLyA0IC0gMSApCisKKyNkZWZpbmUgUU9TX1RYMF9DV19NQVhfT0ZETSAgICAgIENXX01BWF9PRkRNCisjZGVmaW5lIFFPU19UWDFfQ1dfTUFYX09GRE0gICAgICBDV19NQVhfT0ZETQorI2RlZmluZSBRT1NfVFgyX0NXX01BWF9PRkRNICAgICAgQ1dfTUlOX09GRE0KKyNkZWZpbmUgUU9TX1RYM19DV19NQVhfT0ZETSAgICAgICggKENXX01JTl9PRkRNICsgMSkgLyAyIC0gMSApCisKKyNkZWZpbmUgUU9TX1RYMF9DV19NQVhfQ0NLICAgICAgIENXX01BWF9DQ0sKKyNkZWZpbmUgUU9TX1RYMV9DV19NQVhfQ0NLICAgICAgIENXX01BWF9DQ0sKKyNkZWZpbmUgUU9TX1RYMl9DV19NQVhfQ0NLICAgICAgIENXX01JTl9DQ0sKKyNkZWZpbmUgUU9TX1RYM19DV19NQVhfQ0NLICAgICAgICggKENXX01JTl9DQ0sgKyAxKSAvIDIgLSAxICkKKworI2RlZmluZSBRT1NfVFgwX0FJRlMgICAgICAgICAgICAoMyAtIFFPU19BSUZTTl9NSU5fVkFMVUUpCisjZGVmaW5lIFFPU19UWDFfQUlGUyAgICAgICAgICAgICg3IC0gUU9TX0FJRlNOX01JTl9WQUxVRSkKKyNkZWZpbmUgUU9TX1RYMl9BSUZTICAgICAgICAgICAgKDIgLSBRT1NfQUlGU05fTUlOX1ZBTFVFKQorI2RlZmluZSBRT1NfVFgzX0FJRlMgICAgICAgICAgICAoMiAtIFFPU19BSUZTTl9NSU5fVkFMVUUpCisKKyNkZWZpbmUgUU9TX1RYMF9BQ00gICAgICAgICAgICAgMAorI2RlZmluZSBRT1NfVFgxX0FDTSAgICAgICAgICAgICAwCisjZGVmaW5lIFFPU19UWDJfQUNNICAgICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX1RYM19BQ00gICAgICAgICAgICAgMAorCisjZGVmaW5lIFFPU19UWDBfVFhPUF9MSU1JVF9DQ0sgICAgICAgICAgMAorI2RlZmluZSBRT1NfVFgxX1RYT1BfTElNSVRfQ0NLICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX1RYMl9UWE9QX0xJTUlUX0NDSyAgICAgICAgICA2MDE2CisjZGVmaW5lIFFPU19UWDNfVFhPUF9MSU1JVF9DQ0sgICAgICAgICAgMzI2NAorCisjZGVmaW5lIFFPU19UWDBfVFhPUF9MSU1JVF9PRkRNICAgICAgMAorI2RlZmluZSBRT1NfVFgxX1RYT1BfTElNSVRfT0ZETSAgICAgIDAKKyNkZWZpbmUgUU9TX1RYMl9UWE9QX0xJTUlUX09GRE0gICAgICAzMDA4CisjZGVmaW5lIFFPU19UWDNfVFhPUF9MSU1JVF9PRkRNICAgICAgMTUwNAorCisjZGVmaW5lIERFRl9UWDBfQ1dfTUlOX09GRE0gICAgICBDV19NSU5fT0ZETQorI2RlZmluZSBERUZfVFgxX0NXX01JTl9PRkRNICAgICAgQ1dfTUlOX09GRE0KKyNkZWZpbmUgREVGX1RYMl9DV19NSU5fT0ZETSAgICAgIENXX01JTl9PRkRNCisjZGVmaW5lIERFRl9UWDNfQ1dfTUlOX09GRE0gICAgICBDV19NSU5fT0ZETQorCisjZGVmaW5lIERFRl9UWDBfQ1dfTUlOX0NDSyAgICAgICBDV19NSU5fQ0NLCisjZGVmaW5lIERFRl9UWDFfQ1dfTUlOX0NDSyAgICAgICBDV19NSU5fQ0NLCisjZGVmaW5lIERFRl9UWDJfQ1dfTUlOX0NDSyAgICAgICBDV19NSU5fQ0NLCisjZGVmaW5lIERFRl9UWDNfQ1dfTUlOX0NDSyAgICAgICBDV19NSU5fQ0NLCisKKyNkZWZpbmUgREVGX1RYMF9DV19NQVhfT0ZETSAgICAgIENXX01BWF9PRkRNCisjZGVmaW5lIERFRl9UWDFfQ1dfTUFYX09GRE0gICAgICBDV19NQVhfT0ZETQorI2RlZmluZSBERUZfVFgyX0NXX01BWF9PRkRNICAgICAgQ1dfTUFYX09GRE0KKyNkZWZpbmUgREVGX1RYM19DV19NQVhfT0ZETSAgICAgIENXX01BWF9PRkRNCisKKyNkZWZpbmUgREVGX1RYMF9DV19NQVhfQ0NLICAgICAgIENXX01BWF9DQ0sKKyNkZWZpbmUgREVGX1RYMV9DV19NQVhfQ0NLICAgICAgIENXX01BWF9DQ0sKKyNkZWZpbmUgREVGX1RYMl9DV19NQVhfQ0NLICAgICAgIENXX01BWF9DQ0sKKyNkZWZpbmUgREVGX1RYM19DV19NQVhfQ0NLICAgICAgIENXX01BWF9DQ0sKKworI2RlZmluZSBERUZfVFgwX0FJRlMgICAgICAgICAgICAwCisjZGVmaW5lIERFRl9UWDFfQUlGUyAgICAgICAgICAgIDAKKyNkZWZpbmUgREVGX1RYMl9BSUZTICAgICAgICAgICAgMAorI2RlZmluZSBERUZfVFgzX0FJRlMgICAgICAgICAgICAwCisKKyNkZWZpbmUgREVGX1RYMF9BQ00gICAgICAgICAgICAgMAorI2RlZmluZSBERUZfVFgxX0FDTSAgICAgICAgICAgICAwCisjZGVmaW5lIERFRl9UWDJfQUNNICAgICAgICAgICAgIDAKKyNkZWZpbmUgREVGX1RYM19BQ00gICAgICAgICAgICAgMAorCisjZGVmaW5lIERFRl9UWDBfVFhPUF9MSU1JVF9DQ0sgICAgICAgIDAKKyNkZWZpbmUgREVGX1RYMV9UWE9QX0xJTUlUX0NDSyAgICAgICAgMAorI2RlZmluZSBERUZfVFgyX1RYT1BfTElNSVRfQ0NLICAgICAgICAwCisjZGVmaW5lIERFRl9UWDNfVFhPUF9MSU1JVF9DQ0sgICAgICAgIDAKKworI2RlZmluZSBERUZfVFgwX1RYT1BfTElNSVRfT0ZETSAgICAgICAwCisjZGVmaW5lIERFRl9UWDFfVFhPUF9MSU1JVF9PRkRNICAgICAgIDAKKyNkZWZpbmUgREVGX1RYMl9UWE9QX0xJTUlUX09GRE0gICAgICAgMAorI2RlZmluZSBERUZfVFgzX1RYT1BfTElNSVRfT0ZETSAgICAgICAwCisKKyNkZWZpbmUgUU9TX1FPU19TRVRTICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBRT1NfUEFSQU1fU0VUX0FDVElWRSAgICAgICAgICAwCisjZGVmaW5lIFFPU19QQVJBTV9TRVRfREVGX0NDSyAgICAgICAgIDEKKyNkZWZpbmUgUU9TX1BBUkFNX1NFVF9ERUZfT0ZETSAgICAgICAgMgorCisjZGVmaW5lIENUUkxfUU9TX05PX0FDSyAgICAgICAgICAgICAgICgweDAwMjApCisKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzEgICAgICAgIDEKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzIgICAgICAgIDIKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzMgICAgICAgIDMKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzQgICAgICAgIDQKKworLyogUW9TIHN0dXJjdHVyZXMgKi8KK3N0cnVjdCBpcHdfcW9zX2luZm8geworCWludCBxb3NfZW5hYmxlOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgKmRlZl9xb3NfcGFybV9PRkRNOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgKmRlZl9xb3NfcGFybV9DQ0s7CisJdTMyIGJ1cnN0X2R1cmF0aW9uX0NDSzsKKwl1MzIgYnVyc3RfZHVyYXRpb25fT0ZETTsKKwl1MTYgcW9zX25vX2Fja19tYXNrOworCWludCBidXJzdF9lbmFibGU7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKICAqIEdlbmVyaWMgcXVldWUgc3RydWN0dXJlCiAgKgpAQCAtNDAyLDkgKzUzOCw5IEBACiAjZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyAzMgogI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKIAotI2RlZmluZSBTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMUyAgKDgpCi0jZGVmaW5lIFNVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTICAoNCkKLSNkZWZpbmUgU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFMgICgxMikKKyNkZWZpbmUgU1VQX1JBVEVfMTFBX01BWF9OVU1fQ0hBTk5FTFMgIDgKKyNkZWZpbmUgU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFMgIDQKKyNkZWZpbmUgU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFMgIDEyCiAKIC8vIFVzZWQgZm9yIHBhc3NpbmcgdG8gZHJpdmVyIG51bWJlciBvZiBzdWNjZXNzZXMgYW5kIGZhaWx1cmVzIHBlciByYXRlCiBzdHJ1Y3QgcmF0ZV9oaXN0b2dyYW0gewpAQCAtNDUzLDYgKzU4OSw5IEBACiAJdTggdVJlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgU0NBTl9DT01QTEVURURfU1RBVFVTX0NPTVBMRVRFICAxCisjZGVmaW5lIFNDQU5fQ09NUExFVEVEX1NUQVRVU19BQk9SVEVEICAgMgorCiBzdHJ1Y3Qgbm90aWZfc2Nhbl9jb21wbGV0ZSB7CiAJdTggc2Nhbl90eXBlOwogCXU4IG51bV9jaGFubmVsczsKQEAgLTU2Myw4ICs3MDIsOCBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgSVBXX1JYX05PVElGSUNBVElPTl9TSVpFIHNpemVvZihzdHJ1Y3QgaXB3X3J4X2hlYWRlcikgKyAxMgotI2RlZmluZSBJUFdfUlhfRlJBTUVfU0laRSAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHdfcnhfaGVhZGVyKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXB3X3J4X2ZyYW1lKQorI2RlZmluZSBJUFdfUlhfRlJBTUVfU0laRSAgICAgICAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBpcHdfcnhfaGVhZGVyKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXB3X3J4X2ZyYW1lKSkKIAogc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyIHsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwpAQCAtNjU3LDYgKzc5NiwxOSBAQAogCXU4IG1hYzRbNl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBEQ1dfV0VQX0tFWV9JTkRFWF9NQVNLCQkweDAzCS8qIGJpdHMgWzA6MV0gKi8KKyNkZWZpbmUgRENXX1dFUF9LRVlfU0VDX1RZUEVfTUFTSwkweDMwCS8qIGJpdHMgWzQ6NV0gKi8KKworI2RlZmluZSBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9XRVAJMHgwMAorI2RlZmluZSBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9DQ00JMHgyMAorI2RlZmluZSBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9US0lQCTB4MzAKKworI2RlZmluZSBEQ1dfV0VQX0tFWV9JTlZBTElEX1NJWkUJMHgwMAkvKiAwID0gSW52YWxpZCBrZXkgKi8KKyNkZWZpbmUgRENXX1dFUF9LRVk2NEJpdF9TSVpFCQkweDA1CS8qIDY0LWJpdCBlbmNyeXB0aW9uICovCisjZGVmaW5lIERDV19XRVBfS0VZMTI4Qml0X1NJWkUJCTB4MEQJLyogMTI4LWJpdCBlbmNyeXB0aW9uICovCisjZGVmaW5lIERDV19DQ01fS0VZMTI4Qml0X1NJWkUJCTB4MTAJLyogMTI4LWJpdCBrZXkgKi8KKy8vI2RlZmluZSBEQ1dfV0VQX0tFWTEyOEJpdElWX1NJWkUgICAgICAweDEwICAgIC8qIDEyOC1iaXQga2V5IGFuZCAxMjgtYml0IElWICovCisKIHN0cnVjdCBpcHdfd2VwX2tleSB7CiAJdTggY21kX2lkOwogCXU4IHNlcV9udW07CkBAIC04MTgsMTQgKzk3MCw2IEBACiAJc3RydWN0IGlwd19jaGFubmVsX3R4X3Bvd2VyIGNoYW5uZWxzX3R4X3Bvd2VyW01BWF9BX0NIQU5ORUxTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgaXB3X3Fvc19wYXJhbWV0ZXJzIHsKLQl1MTYgY3dfbWluWzRdOwotCXUxNiBjd19tYXhbNF07Ci0JdTggYWlmc1s0XTsKLQl1OCBmbGFnWzRdOwotCXUxNiB0eF9vcF9saW1pdFs0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3QgaXB3X3Jzbl9jYXBhYmlsaXRpZXMgewogCXU4IGlkOwogCXU4IGxlbmd0aDsKQEAgLTg4OCw2ICsxMDMyLDEwIEBACiAjZGVmaW5lIFNUQVRVU19TQ0FOX1BFTkRJTkcgICAgICgxPDwyMCkKICNkZWZpbmUgU1RBVFVTX1NDQU5OSU5HICAgICAgICAgKDE8PDIxKQogI2RlZmluZSBTVEFUVVNfU0NBTl9BQk9SVElORyAgICAoMTw8MjIpCisjZGVmaW5lIFNUQVRVU19TQ0FOX0ZPUkNFRCAgICAgICgxPDwyMykKKworI2RlZmluZSBTVEFUVVNfTEVEX0xJTktfT04gICAgICAoMTw8MjQpCisjZGVmaW5lIFNUQVRVU19MRURfQUNUX09OICAgICAgICgxPDwyNSkKIAogI2RlZmluZSBTVEFUVVNfSU5ESVJFQ1RfQllURSAgICAoMTw8MjgpCS8qIHN5c2ZzIGVudHJ5IGNvbmZpZ3VyZWQgZm9yIGFjY2VzcyAqLwogI2RlZmluZSBTVEFUVVNfSU5ESVJFQ1RfRFdPUkQgICAoMTw8MjkpCS8qIHN5c2ZzIGVudHJ5IGNvbmZpZ3VyZWQgZm9yIGFjY2VzcyAqLwpAQCAtODk5LDExICsxMDQ3LDE1IEBACiAjZGVmaW5lIENGR19TVEFUSUNfRVNTSUQgICAgICAgICgxPDwxKQkvKiBSZXN0cmljdCBhc3NvYy4gdG8gc2luZ2xlIFNTSUQgKi8KICNkZWZpbmUgQ0ZHX1NUQVRJQ19CU1NJRCAgICAgICAgKDE8PDIpCS8qIFJlc3RyaWN0IGFzc29jLiB0byBzaW5nbGUgQlNTSUQgKi8KICNkZWZpbmUgQ0ZHX0NVU1RPTV9NQUMgICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIENGR19QUkVBTUJMRSAgICAgICAgICAgICgxPDw0KQorI2RlZmluZSBDRkdfUFJFQU1CTEVfTE9ORyAgICAgICAoMTw8NCkKICNkZWZpbmUgQ0ZHX0FESE9DX1BFUlNJU1QgICAgICAgKDE8PDUpCiAjZGVmaW5lIENGR19BU1NPQ0lBVEUgICAgICAgICAgICgxPDw2KQogI2RlZmluZSBDRkdfRklYRURfUkFURSAgICAgICAgICAoMTw8NykKICNkZWZpbmUgQ0ZHX0FESE9DX0NSRUFURSAgICAgICAgKDE8PDgpCisjZGVmaW5lIENGR19OT19MRUQgICAgICAgICAgICAgICgxPDw5KQorI2RlZmluZSBDRkdfQkFDS0dST1VORF9TQ0FOICAgICAoMTw8MTApCisjZGVmaW5lIENGR19TUEVFRF9TQ0FOICAgICAgICAgICgxPDwxMSkKKyNkZWZpbmUgQ0ZHX05FVF9TVEFUUyAgICAgICAgICAgKDE8PDEyKQogCiAjZGVmaW5lIENBUF9TSEFSRURfS0VZICAgICAgICAgICgxPDwwKQkvKiBPZmYgPSBPUEVOICovCiAjZGVmaW5lIENBUF9QUklWQUNZX09OICAgICAgICAgICgxPDwxKQkvKiBPZmYgPSBObyBwcml2YWN5ICovCkBAIC05MjUsMTMgKzEwNzcsNTAgQEAKIAlzMzIgc3VtOwogfTsKIAorI2RlZmluZSBNQVhfU1BFRURfU0NBTiAxMDAKKyNkZWZpbmUgSVBXX0lCU1NfTUFDX0hBU0hfU0laRSAzMQorCitzdHJ1Y3QgaXB3X2lic3Nfc2VxIHsKKwl1OCBtYWNbRVRIX0FMRU5dOworCXUxNiBzZXFfbnVtOworCXUxNiBmcmFnX251bTsKKwl1bnNpZ25lZCBsb25nIHBhY2tldF90aW1lOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBpcHdfZXJyb3JfZWxlbSB7CisJdTMyIGRlc2M7CisJdTMyIHRpbWU7CisJdTMyIGJsaW5rMTsKKwl1MzIgYmxpbmsyOworCXUzMiBsaW5rMTsKKwl1MzIgbGluazI7CisJdTMyIGRhdGE7Cit9OworCitzdHJ1Y3QgaXB3X2V2ZW50IHsKKwl1MzIgZXZlbnQ7CisJdTMyIHRpbWU7CisJdTMyIGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGlwd19md19lcnJvciB7CisJdW5zaWduZWQgbG9uZyBqaWZmaWVzOworCXUzMiBzdGF0dXM7CisJdTMyIGNvbmZpZzsKKwl1MzIgZWxlbV9sZW47CisJdTMyIGxvZ19sZW47CisJc3RydWN0IGlwd19lcnJvcl9lbGVtICplbGVtOworCXN0cnVjdCBpcHdfZXZlbnQgKmxvZzsKKwl1OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpcHdfcHJpdiB7CiAJLyogaWVlZSBkZXZpY2UgdXNlZCBieSBnZW5lcmljIGllZWUgcHJvY2Vzc2luZyBjb2RlICovCiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7CiAKLQkvKiBzcGlubG9jayAqLwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKIAogCS8qIGJhc2ljIHBjaS1uZXR3b3JrIGRyaXZlciBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwpAQCAtOTY2LDcgKzExNTUsNyBAQAogCWludCByeF9idWZzX21pbjsJICAvKio8IG1pbmltdW0gbnVtYmVyIG9mIGJ1ZnMgaW4gUnggcXVldWUgKi8KIAlpbnQgcnhfcGVuZF9tYXg7CSAgLyoqPCBtYXhpbXVtIHBlbmRpbmcgYnVmZmVycyBmb3Igb25lIElSUSAqLwogCXUzMiBoY21kX3NlcTsJCSAgLyoqPCBzZXF1ZW5jZSBudW1iZXIgZm9yIGhjbWQgKi8KLQl1MzIgbWlzc2VkX2JlYWNvbl90aHJlc2hvbGQ7CisJdTMyIGRpc2Fzc29jaWF0ZV90aHJlc2hvbGQ7CiAJdTMyIHJvYW1pbmdfdGhyZXNob2xkOwogCiAJc3RydWN0IGlwd19hc3NvY2lhdGUgYXNzb2NfcmVxdWVzdDsKQEAgLTEwMDcsNiArMTE5Niw4IEBACiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCXU4IG51bV9zdGF0aW9uczsKIAl1OCBzdGF0aW9uc1tNQVhfU1RBVElPTlNdW0VUSF9BTEVOXTsKKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKwl1OCBsb25nX3JldHJ5X2xpbWl0OwogCiAJdTMyIG5vdGlmX21pc3NlZF9iZWFjb25zOwogCkBAIC0xMDI0LDE3ICsxMjE1LDI5IEBACiAJdTMyIHR4X3BhY2tldHM7CiAJdTMyIHF1YWxpdHk7CiAKKwl1OCBzcGVlZF9zY2FuW01BWF9TUEVFRF9TQ0FOXTsKKwl1OCBzcGVlZF9zY2FuX3BvczsKKworCXUxNiBsYXN0X3NlcV9udW07CisJdTE2IGxhc3RfZnJhZ19udW07CisJdW5zaWduZWQgbG9uZyBsYXN0X3BhY2tldF90aW1lOworCXN0cnVjdCBsaXN0X2hlYWQgaWJzc19tYWNfaGFzaFtJUFdfSUJTU19NQUNfSEFTSF9TSVpFXTsKKwogCS8qIGVlcHJvbSAqLwogCXU4IGVlcHJvbVsweDEwMF07CS8qIDI1NiBieXRlcyBvZiBlZXByb20gKi8KKwl1OCBjb3VudHJ5WzRdOwogCWludCBlZXByb21fZGVsYXk7CiAKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CiAKKwlzdHJ1Y3QgaXdfcHVibGljX2RhdGEgd2lyZWxlc3NfZGF0YTsKKwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRob2NfY2hlY2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGFzc29jaWF0ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGlzYXNzb2NpYXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzeXN0ZW1fY29uZmlnOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByeF9yZXBsZW5pc2g7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3Rfc2NhbjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRhcHRlcl9yZXN0YXJ0OwpAQCAtMTA0NSwyNSArMTI0OCw1MSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBhYm9ydF9zY2FuOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByb2FtOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2NoZWNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX3VwOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2Rvd247CiAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3Rhc2tsZXQ7CiAKKwkvKiBMRUQgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIHdvcmtfc3RydWN0ICovCisJdTggbmljX3R5cGU7CisJdTMyIGxlZF9hY3Rpdml0eV9vbjsKKwl1MzIgbGVkX2FjdGl2aXR5X29mZjsKKwl1MzIgbGVkX2Fzc29jaWF0aW9uX29uOworCXUzMiBsZWRfYXNzb2NpYXRpb25fb2ZmOworCXUzMiBsZWRfb2ZkbV9vbjsKKwl1MzIgbGVkX29mZG1fb2ZmOworCisJc3RydWN0IHdvcmtfc3RydWN0IGxlZF9saW5rX29uOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsZWRfbGlua19vZmY7CisJc3RydWN0IHdvcmtfc3RydWN0IGxlZF9hY3Rfb2ZmOworCXN0cnVjdCB3b3JrX3N0cnVjdCBtZXJnZV9uZXR3b3JrczsKKworCXN0cnVjdCBpcHdfY21kX2xvZyAqY21kbG9nOworCWludCBjbWRsb2dfbGVuOworCWludCBjbWRsb2dfcG9zOworCiAjZGVmaW5lIElQV18yMjAwQkcgIDEKICNkZWZpbmUgSVBXXzI5MTVBQkcgMgogCXU4IGFkYXB0ZXI7CiAKLSNkZWZpbmUgSVBXX0RFRkFVTFRfVFhfUE9XRVIgMHgxNAotCXU4IHR4X3Bvd2VyOworCXM4IHR4X3Bvd2VyOwogCiAjaWZkZWYgQ09ORklHX1BNCiAJdTMyIHBtX3N0YXRlWzE2XTsKICNlbmRpZgogCisJc3RydWN0IGlwd19md19lcnJvciAqZXJyb3I7CisKIAkvKiBuZXR3b3JrIHN0YXRlICovCiAKIAkvKiBVc2VkIHRvIHBhc3MgdGhlIGN1cnJlbnQgSU5UQSB2YWx1ZSBmcm9tIElTUiB0byBUYXNrbGV0ICovCiAJdTMyIGlzcl9pbnRhOwogCisJLyogUW9TICovCisJc3RydWN0IGlwd19xb3NfaW5mbyBxb3NfZGF0YTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcW9zX2FjdGl2YXRlOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIAkvKiBkZWJ1Z2dpbmcgaW5mbyAqLwogCXUzMiBpbmRpcmVjdF9kd29yZDsKIAl1MzIgZGlyZWN0X2R3b3JkOwpAQCAtMTEyNSw2ICsxMzU0LDggQEAKICNkZWZpbmUgSVBXX0RMX1JGX0tJTEwgICAgICAgKDE8PDE3KQogI2RlZmluZSBJUFdfRExfRldfRVJST1JTICAgICAoMTw8MTgpCiAKKyNkZWZpbmUgSVBXX0RMX0xFRCAgICAgICAgICAgKDE8PDE5KQorCiAjZGVmaW5lIElQV19ETF9PUkQgICAgICAgICAgICgxPDwyMCkKIAogI2RlZmluZSBJUFdfRExfRlJBRyAgICAgICAgICAoMTw8MjEpCkBAIC0xMTM3LDYgKzEzNjgsOCBAQAogI2RlZmluZSBJUFdfRExfVFJBQ0UgICAgICAgICAoMTw8MjgpCiAKICNkZWZpbmUgSVBXX0RMX1NUQVRTICAgICAgICAgKDE8PDI5KQorI2RlZmluZSBJUFdfRExfTUVSR0UgICAgICAgICAoMTw8MzApCisjZGVmaW5lIElQV19ETF9RT1MgICAgICAgICAgICgxPDwzMSkKIAogI2RlZmluZSBJUFdfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKICNkZWZpbmUgSVBXX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCkBAIC0xMTUwLDYgKzEzODMsNyBAQAogI2RlZmluZSBJUFdfREVCVUdfVFgoZiwgYS4uLikgICAgIElQV19ERUJVRyhJUFdfRExfVFgsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19JU1IoZiwgYS4uLikgICAgSVBXX0RFQlVHKElQV19ETF9JU1IsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19NQU5BR0VNRU5UKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfTUFOQUdFLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfTEVEKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfTEVELCBmLCAjIyBhKQogI2RlZmluZSBJUFdfREVCVUdfV0VQKGYsIGEuLi4pICAgIElQV19ERUJVRyhJUFdfRExfV0VQLCBmLCAjIyBhKQogI2RlZmluZSBJUFdfREVCVUdfSEMoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9IT1NUX0NPTU1BTkQsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19GUkFHKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfRlJBRywgZiwgIyMgYSkKQEAgLTExNjMsNiArMTM5Nyw4IEBACiAjZGVmaW5lIElQV19ERUJVR19TVEFURShmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX1NUQVRFIHwgSVBXX0RMX0FTU09DIHwgSVBXX0RMX0lORk8sIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19BU1NPQyhmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX0FTU09DIHwgSVBXX0RMX0lORk8sIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19TVEFUUyhmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfTUVSR0UoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9NRVJHRSwgZiwgIyMgYSkKKyNkZWZpbmUgSVBXX0RFQlVHX1FPUyhmLCBhLi4uKSAgIElQV19ERUJVRyhJUFdfRExfUU9TLCBmLCAjIyBhKQogCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIApAQCAtMTE3Nyw1OSArMTQxMyw2NSBAQAogI2RlZmluZSBESU5PX1JYRklGT19EQVRBICAgMHgwMQogI2RlZmluZSBESU5PX0NPTlRST0xfUkVHICAgMHgwMDIwMDAwMAogCi0jZGVmaW5lIENYMl9JTlRBX1JXICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQ1gyX0lOVEFfTUFTS19SICAgMHgwMDAwMDAwQwotI2RlZmluZSBDWDJfSU5ESVJFQ1RfQUREUiAweDAwMDAwMDEwCi0jZGVmaW5lIENYMl9JTkRJUkVDVF9EQVRBIDB4MDAwMDAwMTQKLSNkZWZpbmUgQ1gyX0FVVE9JTkNfQUREUiAgMHgwMDAwMDAxOAotI2RlZmluZSBDWDJfQVVUT0lOQ19EQVRBICAweDAwMDAwMDFDCi0jZGVmaW5lIENYMl9SRVNFVF9SRUcgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQ1gyX0dQX0NOVFJMX1JXICAgMHgwMDAwMDAyNAorI2RlZmluZSBJUFdfSU5UQV9SVyAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElQV19JTlRBX01BU0tfUiAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSVBXX0lORElSRUNUX0FERFIgMHgwMDAwMDAxMAorI2RlZmluZSBJUFdfSU5ESVJFQ1RfREFUQSAweDAwMDAwMDE0CisjZGVmaW5lIElQV19BVVRPSU5DX0FERFIgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSVBXX0FVVE9JTkNfREFUQSAgMHgwMDAwMDAxQworI2RlZmluZSBJUFdfUkVTRVRfUkVHICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElQV19HUF9DTlRSTF9SVyAgIDB4MDAwMDAwMjQKIAotI2RlZmluZSBDWDJfUkVBRF9JTlRfUkVHSVNURVIgMHhGRjQKKyNkZWZpbmUgSVBXX1JFQURfSU5UX1JFR0lTVEVSIDB4RkY0CiAKLSNkZWZpbmUgQ1gyX0dQX0NOVFJMX0JJVF9JTklUX0RPTkUJMHgwMDAwMDAwNAorI2RlZmluZSBJUFdfR1BfQ05UUkxfQklUX0lOSVRfRE9ORQkweDAwMDAwMDA0CiAKLSNkZWZpbmUgQ1gyX1JFR0lTVEVSX0RPTUFJTjFfRU5EICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIENYMl9TUkFNX1JFQURfSU5UX1JFR0lTVEVSIAkweDAwMDAwZmY0CisjZGVmaW5lIElQV19SRUdJU1RFUl9ET01BSU4xX0VORCAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJUFdfU1JBTV9SRUFEX0lOVF9SRUdJU1RFUiAJMHgwMDAwMGZmNAogCi0jZGVmaW5lIENYMl9TSEFSRURfTE9XRVJfQk9VTkQgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBDWDJfSU5URVJSVVBUX0FSRUFfTE9XRVJfQk9VTkQgIDB4MDAwMDBmODAKKyNkZWZpbmUgSVBXX1NIQVJFRF9MT1dFUl9CT1VORCAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElQV19JTlRFUlJVUFRfQVJFQV9MT1dFUl9CT1VORCAgMHgwMDAwMGY4MAogCi0jZGVmaW5lIENYMl9OSUNfU1JBTV9MT1dFUl9CT1VORCAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBDWDJfTklDX1NSQU1fVVBQRVJfQk9VTkQgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSVBXX05JQ19TUkFNX0xPV0VSX0JPVU5EICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElQV19OSUNfU1JBTV9VUFBFUl9CT1VORCAgICAgICAgMHgwMDAzMDAwMAogCi0jZGVmaW5lIENYMl9CSVRfSU5UX0hPU1RfU1JBTV9SRUFEX0lOVF9SRUdJU1RFUiAoMSA8PCAyOSkKLSNkZWZpbmUgQ1gyX0dQX0NOVFJMX0JJVF9DTE9DS19SRUFEWSAgICAweDAwMDAwMDAxCi0jZGVmaW5lIENYMl9HUF9DTlRSTF9CSVRfSE9TVF9BTExPV1NfU1RBTkRCWSAweDAwMDAwMDAyCisjZGVmaW5lIElQV19CSVRfSU5UX0hPU1RfU1JBTV9SRUFEX0lOVF9SRUdJU1RFUiAoMSA8PCAyOSkKKyNkZWZpbmUgSVBXX0dQX0NOVFJMX0JJVF9DTE9DS19SRUFEWSAgICAweDAwMDAwMDAxCisjZGVmaW5lIElQV19HUF9DTlRSTF9CSVRfSE9TVF9BTExPV1NfU1RBTkRCWSAweDAwMDAwMDAyCiAKIC8qCiAgKiBSRVNFVCBSZWdpc3RlciBCaXQgSW5kZXhlcwogICovCi0jZGVmaW5lIENCRF9SRVNFVF9SRUdfUFJJTkNFVE9OX1JFU0VUIDB4MDAwMDAwMDEJLyogQml0IDAgKExTQikgKi8KLSNkZWZpbmUgQ1gyX1JFU0VUX1JFR19TV19SRVNFVCAgICAgICAgMHgwMDAwMDA4MAkvKiBCaXQgNyAgICAgICAqLwotI2RlZmluZSBDWDJfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCAweDAwMDAwMTAwCS8qIEJpdCA4ICAgICAgICovCi0jZGVmaW5lIENYMl9SRVNFVF9SRUdfU1RPUF9NQVNURVIgICAgIDB4MDAwMDAyMDAJLyogQml0IDkgICAgICAgKi8KLSNkZWZpbmUgQ1gyX0FSQ19LRVNIRVRfQ09ORklHICAgICAgICAgMHgwODAwMDAwMAkvKiBCaXQgMjcgICAgICAqLwotI2RlZmluZSBDWDJfU1RBUlRfU1RBTkRCWSAgICAgICAgICAgICAweDAwMDAwMDA0CS8qIEJpdCAyICAgICAgICovCisjZGVmaW5lIENCRF9SRVNFVF9SRUdfUFJJTkNFVE9OX1JFU0VUICgxPDwwKQorI2RlZmluZSBJUFdfU1RBUlRfU1RBTkRCWSAgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSVBXX0FDVElWSVRZX0xFRCAgICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIElQV19BU1NPQ0lBVEVEX0xFRCAgICAgICAgICAgICgxPDw1KQorI2RlZmluZSBJUFdfT0ZETV9MRUQgICAgICAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgSVBXX1JFU0VUX1JFR19TV19SRVNFVCAgICAgICAgKDE8PDcpCisjZGVmaW5lIElQV19SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEICgxPDw4KQorI2RlZmluZSBJUFdfUkVTRVRfUkVHX1NUT1BfTUFTVEVSICAgICAoMTw8OSkKKyNkZWZpbmUgSVBXX0dBVEVfT0RNQSAgICAgICAgICAgICAgICAgKDE8PDI1KQorI2RlZmluZSBJUFdfR0FURV9JRE1BICAgICAgICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIElQV19BUkNfS0VTSEVUX0NPTkZJRyAgICAgICAgICgxPDwyNykKKyNkZWZpbmUgSVBXX0dBVEVfQURNQSAgICAgICAgICAgICAgICAgKDE8PDI5KQogCi0jZGVmaW5lIENYMl9DU1JfQ0lTX1VQUEVSX0JPVU5ECTB4MDAwMDAyMDAKLSNkZWZpbmUgQ1gyX0RPTUFJTl8wX0VORCAweDEwMDAKKyNkZWZpbmUgSVBXX0NTUl9DSVNfVVBQRVJfQk9VTkQJMHgwMDAwMDIwMAorI2RlZmluZSBJUFdfRE9NQUlOXzBfRU5EIDB4MTAwMAogI2RlZmluZSBDTFhfTUVNX0JBUl9TSVpFIDB4MTAwMAogCi0jZGVmaW5lIENYMl9CQVNFQkFORF9DT05UUk9MX1NUQVRVUwkwWDAwMjAwMDAwCi0jZGVmaW5lIENYMl9CQVNFQkFORF9UWF9GSUZPX1dSSVRFCTBYMDAyMDAwMDQKLSNkZWZpbmUgQ1gyX0JBU0VCQU5EX1JYX0ZJRk9fUkVBRAkwWDAwMjAwMDA0Ci0jZGVmaW5lIENYMl9CQVNFQkFORF9DT05UUk9MX1NUT1JFCTBYMDAyMDAwMTAKKyNkZWZpbmUgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTCTBYMDAyMDAwMDAKKyNkZWZpbmUgSVBXX0JBU0VCQU5EX1RYX0ZJRk9fV1JJVEUJMFgwMDIwMDAwNAorI2RlZmluZSBJUFdfQkFTRUJBTkRfUlhfRklGT19SRUFECTBYMDAyMDAwMDQKKyNkZWZpbmUgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RPUkUJMFgwMDIwMDAxMAogCi0jZGVmaW5lIENYMl9JTlRFUk5BTF9DTURfRVZFTlQgCTBYMDAzMDAwMDQKLSNkZWZpbmUgQ1gyX0JBU0VCQU5EX1BPV0VSX0RPV04gMHgwMDAwMDAwMQorI2RlZmluZSBJUFdfSU5URVJOQUxfQ01EX0VWRU5UIAkwWDAwMzAwMDA0CisjZGVmaW5lIElQV19CQVNFQkFORF9QT1dFUl9ET1dOIDB4MDAwMDAwMDEKIAotI2RlZmluZSBDWDJfTUVNX0hBTFRfQU5EX1JFU0VUICAweDAwMzAwMGUwCisjZGVmaW5lIElQV19NRU1fSEFMVF9BTkRfUkVTRVQgIDB4MDAzMDAwZTAKIAogLyogZGVmZ3JvdXAgYml0c19oYWx0X3Jlc2V0IE1FTV9IQUxUX0FORF9SRVNFVCByZWdpc3RlciBiaXRzICovCi0jZGVmaW5lIENYMl9CSVRfSEFMVF9SRVNFVF9PTgkweDgwMDAwMDAwCi0jZGVmaW5lIENYMl9CSVRfSEFMVF9SRVNFVF9PRkYgCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVBXX0JJVF9IQUxUX1JFU0VUX09OCTB4ODAwMDAwMDAKKyNkZWZpbmUgSVBXX0JJVF9IQUxUX1JFU0VUX09GRiAJMHgwMDAwMDAwMAogCiAjZGVmaW5lIENCX0xBU1RfVkFMSUQgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgQ0JfSU5UX0VOQUJMRUQgICAgMHg0MDAwMDAwMApAQCAtMTI0OCw2MyArMTQ5MCw2MyBAQAogI2RlZmluZSBETUFfQ0JfU1RPUF9BTkRfQUJPUlQgICAgICAgICAgICAweDAwMDAwQzAwCiAjZGVmaW5lIERNQV9DQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKIAotI2RlZmluZSBDWDJfU0hBUkVEX1NSQU1fU0laRSAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKLSNkZWZpbmUgQ1gyX1NIQVJFRF9TUkFNX0RNQV9DT05UUk9MICAgICAgICAweDAwMDI3MDAwCisjZGVmaW5lIElQV19TSEFSRURfU1JBTV9TSVpFICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJUFdfU0hBUkVEX1NSQU1fRE1BX0NPTlRST0wgICAgICAgIDB4MDAwMjcwMDAKICNkZWZpbmUgQ0JfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAweDFGRkYKIAotI2RlZmluZSBDWDJfSE9TVF9FRVBST01fREFUQV9TUkFNX1NJWkUgMHhBMTgKLSNkZWZpbmUgQ1gyX0VFUFJPTV9JTUFHRV9TSVpFICAgICAgICAgIDB4MTAwCisjZGVmaW5lIElQV19IT1NUX0VFUFJPTV9EQVRBX1NSQU1fU0laRSAweEExOAorI2RlZmluZSBJUFdfRUVQUk9NX0lNQUdFX1NJWkUgICAgICAgICAgMHgxMDAKIAogLyogRE1BIGRlZnMgKi8KLSNkZWZpbmUgQ1gyX0RNQV9JX0NVUlJFTlRfQ0IgIDB4MDAzMDAwRDAKLSNkZWZpbmUgQ1gyX0RNQV9PX0NVUlJFTlRfQ0IgIDB4MDAzMDAwRDQKLSNkZWZpbmUgQ1gyX0RNQV9JX0RNQV9DT05UUk9MIDB4MDAzMDAwQTQKLSNkZWZpbmUgQ1gyX0RNQV9JX0NCX0JBU0UgICAgIDB4MDAzMDAwQTAKKyNkZWZpbmUgSVBXX0RNQV9JX0NVUlJFTlRfQ0IgIDB4MDAzMDAwRDAKKyNkZWZpbmUgSVBXX0RNQV9PX0NVUlJFTlRfQ0IgIDB4MDAzMDAwRDQKKyNkZWZpbmUgSVBXX0RNQV9JX0RNQV9DT05UUk9MIDB4MDAzMDAwQTQKKyNkZWZpbmUgSVBXX0RNQV9JX0NCX0JBU0UgICAgIDB4MDAzMDAwQTAKIAotI2RlZmluZSBDWDJfVFhfQ01EX1FVRVVFX0JEX0JBU0UgICAgICAgICgweDAwMDAwMjAwKQotI2RlZmluZSBDWDJfVFhfQ01EX1FVRVVFX0JEX1NJWkUgICAgICAgICgweDAwMDAwMjA0KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMF9CRF9CQVNFICAgICAgICAgICgweDAwMDAwMjA4KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMF9CRF9TSVpFICAgICAgICAgICgweDAwMDAwMjBDKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMV9CRF9CQVNFICAgICAgICAgICgweDAwMDAwMjEwKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMV9CRF9TSVpFICAgICAgICAgICgweDAwMDAwMjE0KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMl9CRF9CQVNFICAgICAgICAgICgweDAwMDAwMjE4KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMl9CRF9TSVpFICAgICAgICAgICgweDAwMDAwMjFDKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfM19CRF9CQVNFICAgICAgICAgICgweDAwMDAwMjIwKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfM19CRF9TSVpFICAgICAgICAgICgweDAwMDAwMjI0KQotI2RlZmluZSBDWDJfUlhfQkRfQkFTRSAgICAgICAgICAgICAgICAgICgweDAwMDAwMjQwKQotI2RlZmluZSBDWDJfUlhfQkRfU0laRSAgICAgICAgICAgICAgICAgICgweDAwMDAwMjQ0KQotI2RlZmluZSBDWDJfUkZEU19UQUJMRV9MT1dFUiAgICAgICAgICAgICgweDAwMDAwNTAwKQorI2RlZmluZSBJUFdfVFhfQ01EX1FVRVVFX0JEX0JBU0UgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSVBXX1RYX0NNRF9RVUVVRV9CRF9TSVpFICAgICAgICAweDAwMDAwMjA0CisjZGVmaW5lIElQV19UWF9RVUVVRV8wX0JEX0JBU0UgICAgICAgICAgMHgwMDAwMDIwOAorI2RlZmluZSBJUFdfVFhfUVVFVUVfMF9CRF9TSVpFICAgICAgICAgICgweDAwMDAwMjBDKQorI2RlZmluZSBJUFdfVFhfUVVFVUVfMV9CRF9CQVNFICAgICAgICAgIDB4MDAwMDAyMTAKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzFfQkRfU0laRSAgICAgICAgICAweDAwMDAwMjE0CisjZGVmaW5lIElQV19UWF9RVUVVRV8yX0JEX0JBU0UgICAgICAgICAgMHgwMDAwMDIxOAorI2RlZmluZSBJUFdfVFhfUVVFVUVfMl9CRF9TSVpFICAgICAgICAgICgweDAwMDAwMjFDKQorI2RlZmluZSBJUFdfVFhfUVVFVUVfM19CRF9CQVNFICAgICAgICAgIDB4MDAwMDAyMjAKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzNfQkRfU0laRSAgICAgICAgICAweDAwMDAwMjI0CisjZGVmaW5lIElQV19SWF9CRF9CQVNFICAgICAgICAgICAgICAgICAgMHgwMDAwMDI0MAorI2RlZmluZSBJUFdfUlhfQkRfU0laRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAyNDQKKyNkZWZpbmUgSVBXX1JGRFNfVEFCTEVfTE9XRVIgICAgICAgICAgICAweDAwMDAwNTAwCiAKLSNkZWZpbmUgQ1gyX1RYX0NNRF9RVUVVRV9SRUFEX0lOREVYICAgICAoMHgwMDAwMDI4MCkKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzBfUkVBRF9JTkRFWCAgICAgICAoMHgwMDAwMDI4NCkKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzFfUkVBRF9JTkRFWCAgICAgICAoMHgwMDAwMDI4OCkKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzJfUkVBRF9JTkRFWCAgICAgICAoMHgwMDAwMDI4QykKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzNfUkVBRF9JTkRFWCAgICAgICAoMHgwMDAwMDI5MCkKLSNkZWZpbmUgQ1gyX1JYX1JFQURfSU5ERVggICAgICAgICAgICAgICAoMHgwMDAwMDJBMCkKKyNkZWZpbmUgSVBXX1RYX0NNRF9RVUVVRV9SRUFEX0lOREVYICAgICAweDAwMDAwMjgwCisjZGVmaW5lIElQV19UWF9RVUVVRV8wX1JFQURfSU5ERVggICAgICAgMHgwMDAwMDI4NAorI2RlZmluZSBJUFdfVFhfUVVFVUVfMV9SRUFEX0lOREVYICAgICAgIDB4MDAwMDAyODgKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzJfUkVBRF9JTkRFWCAgICAgICAoMHgwMDAwMDI4QykKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzNfUkVBRF9JTkRFWCAgICAgICAweDAwMDAwMjkwCisjZGVmaW5lIElQV19SWF9SRUFEX0lOREVYICAgICAgICAgICAgICAgKDB4MDAwMDAyQTApCiAKLSNkZWZpbmUgQ1gyX1RYX0NNRF9RVUVVRV9XUklURV9JTkRFWCAgICAoMHgwMDAwMEY4MCkKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzBfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY4NCkKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzFfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY4OCkKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzJfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY4QykKLSNkZWZpbmUgQ1gyX1RYX1FVRVVFXzNfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY5MCkKLSNkZWZpbmUgQ1gyX1JYX1dSSVRFX0lOREVYICAgICAgICAgICAgICAoMHgwMDAwMEZBMCkKKyNkZWZpbmUgSVBXX1RYX0NNRF9RVUVVRV9XUklURV9JTkRFWCAgICAoMHgwMDAwMEY4MCkKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzBfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY4NCkKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzFfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY4OCkKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzJfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY4QykKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzNfV1JJVEVfSU5ERVggICAgICAoMHgwMDAwMEY5MCkKKyNkZWZpbmUgSVBXX1JYX1dSSVRFX0lOREVYICAgICAgICAgICAgICAoMHgwMDAwMEZBMCkKIAogLyoKICAqIEVFUFJPTSBSZWxhdGVkIERlZmluaXRpb25zCiAgKi8KIAotI2RlZmluZSBJUFdfRUVQUk9NX0RBVEFfU1JBTV9BRERSRVNTIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg4MTQpCi0jZGVmaW5lIElQV19FRVBST01fREFUQV9TUkFNX1NJWkUgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDgxOCkKLSNkZWZpbmUgSVBXX0VFUFJPTV9MT0FEX0RJU0FCTEUgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4ODFDKQotI2RlZmluZSBJUFdfRUVQUk9NX0RBVEEgICAgICAgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg4MjApCi0jZGVmaW5lIElQV19FRVBST01fVVBQRVJfQUREUkVTUyAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDlFMCkKKyNkZWZpbmUgSVBXX0VFUFJPTV9EQVRBX1NSQU1fQUREUkVTUyAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4ODE0KQorI2RlZmluZSBJUFdfRUVQUk9NX0RBVEFfU1JBTV9TSVpFICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg4MTgpCisjZGVmaW5lIElQV19FRVBST01fTE9BRF9ESVNBQkxFICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDgxQykKKyNkZWZpbmUgSVBXX0VFUFJPTV9EQVRBICAgICAgICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4ODIwKQorI2RlZmluZSBJUFdfRUVQUk9NX1VQUEVSX0FERFJFU1MgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg5RTApCiAKLSNkZWZpbmUgSVBXX1NUQVRJT05fVEFCTEVfTE9XRVIgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QTBDKQotI2RlZmluZSBJUFdfU1RBVElPTl9UQUJMRV9VUFBFUiAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhCMEMpCi0jZGVmaW5lIElQV19SRVFVRVNUX0FUSU0gICAgICAgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIwQykKLSNkZWZpbmUgSVBXX0FUSU1fU0VOVCAgICAgICAgICAgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QjEwKQotI2RlZmluZSBJUFdfV0hPX0lTX0FXQUtFICAgICAgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhCMTQpCi0jZGVmaW5lIElQV19EVVJJTkdfQVRJTV9XSU5ET1cgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIxOCkKKyNkZWZpbmUgSVBXX1NUQVRJT05fVEFCTEVfTE9XRVIgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QTBDKQorI2RlZmluZSBJUFdfU1RBVElPTl9UQUJMRV9VUFBFUiAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhCMEMpCisjZGVmaW5lIElQV19SRVFVRVNUX0FUSU0gICAgICAgICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIwQykKKyNkZWZpbmUgSVBXX0FUSU1fU0VOVCAgICAgICAgICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QjEwKQorI2RlZmluZSBJUFdfV0hPX0lTX0FXQUtFICAgICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhCMTQpCisjZGVmaW5lIElQV19EVVJJTkdfQVRJTV9XSU5ET1cgICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIxOCkKIAogI2RlZmluZSBNU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCkBAIC0xMzI2LDE1ICsxNTY4LDE1IEBACiAjZGVmaW5lIEVFUFJPTV9IV19WRVJTSU9OICAgICAgIChHRVRfRUVQUk9NX0FERFIoMHg3MixMU0IpKQkvKiAyIGJ5dGVzICAqLwogCiAvKiBOSUMgdHlwZSBhcyBmb3VuZCBpbiB0aGUgb25lIGJ5dGUgRUVQUk9NX05JQ19UWVBFICBvZmZzZXQqLwotI2RlZmluZSBFRVBST01fTklDX1RZUEVfU1RBTkRBUkQgICAgICAgIDAKLSNkZWZpbmUgRUVQUk9NX05JQ19UWVBFX0RFTEwgICAgICAgICAgICAxCi0jZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV9GVUpJVFNVICAgICAgICAgMgotI2RlZmluZSBFRVBST01fTklDX1RZUEVfSUJNICAgICAgICAgICAgIDMKLSNkZWZpbmUgRUVQUk9NX05JQ19UWVBFX0hQICAgICAgICAgICAgICA0CisjZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV8wIDAKKyNkZWZpbmUgRUVQUk9NX05JQ19UWVBFXzEgMQorI2RlZmluZSBFRVBST01fTklDX1RZUEVfMiAyCisjZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV8zIDMKKyNkZWZpbmUgRUVQUk9NX05JQ19UWVBFXzQgNAogCiAjZGVmaW5lIEZXX01FTV9SRUdfTE9XRVJfQk9VTkQgICAgICAgICAgMHgwMDMwMDAwMAogI2RlZmluZSBGV19NRU1fUkVHX0VFUFJPTV9BQ0NFU1MgICAgICAgIChGV19NRU1fUkVHX0xPV0VSX0JPVU5EICsgMHg0MCkKLQorI2RlZmluZSBJUFdfRVZFTlRfUkVHICAgICAgICAgICAgICAgICAgIChGV19NRU1fUkVHX0xPV0VSX0JPVU5EICsgMHgwNCkKICNkZWZpbmUgRUVQUk9NX0JJVF9TSyAgICAgICAgICAgICAgICAgICAoMTw8MCkKICNkZWZpbmUgRUVQUk9NX0JJVF9DUyAgICAgICAgICAgICAgICAgICAoMTw8MSkKICNkZWZpbmUgRUVQUk9NX0JJVF9ESSAgICAgICAgICAgICAgICAgICAoMTw8MikKQEAgLTEzNDMsNTAgKzE1ODUsNDcgQEAKICNkZWZpbmUgRUVQUk9NX0NNRF9SRUFEICAgICAgICAgICAgICAgICAweDIKIAogLyogSW50ZXJydXB0cyBtYXNrcyAqLwotI2RlZmluZSBDWDJfSU5UQV9OT05FICAgMHgwMDAwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9OT05FICAgMHgwMDAwMDAwMAogCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9SWF9UUkFOU0ZFUiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElQV19JTlRBX0JJVF9SWF9UUkFOU0ZFUiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIElQV19JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElQV19JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQgICAgICAgICAweDAwMDAwMDIwCiAKIC8vSW50YSBCaXRzIGZvciBDRgotI2RlZmluZSBDWDJfSU5UQV9CSVRfVFhfQ01EX1FVRVVFICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMyAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfNCAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfVFhfQ01EX1FVRVVFICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMyAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfNCAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAogCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkUgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkUgICAgICAweDAwMDEwMDAwCiAKLSNkZWZpbmUgQ1gyX0lOVEFfQklUX1BSRVBBUkVfRk9SX1BPV0VSX0RPV04gICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgQ1gyX0lOVEFfQklUX1BPV0VSX0RPV04gICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgSVBXX0lOVEFfQklUX1BSRVBBUkVfRk9SX1BPV0VSX0RPV04gICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgSVBXX0lOVEFfQklUX1BPV0VSX0RPV04gICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKIAotI2RlZmluZSBDWDJfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfRldfQ0FSRF9ESVNBQkxFX1BIWV9PRkZfRE9ORSAgMHgwMjAwMDAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfUkZfS0lMTF9ET05FICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfRkFUQUxfRVJST1IgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfUEFSSVRZX0VSUk9SICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfRldfQ0FSRF9ESVNBQkxFX1BIWV9PRkZfRE9ORSAgMHgwMjAwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfUkZfS0lMTF9ET05FICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfRkFUQUxfRVJST1IgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfUEFSSVRZX0VSUk9SICAgICAgICAgICAgMHg4MDAwMDAwMAogCiAvKiBJbnRlcnJ1cHRzIGVuYWJsZWQgYXQgaW5pdCB0aW1lLiAqLwotI2RlZmluZSBDWDJfSU5UQV9NQVNLX0FMTCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKENYMl9JTlRBX0JJVF9UWF9RVUVVRV8xICAgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8yICAgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8zICAgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9UWF9RVUVVRV80ICAgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9UWF9DTURfUVVFVUUgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9SWF9UUkFOU0ZFUiAgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9GQVRBTF9FUlJPUiAgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9QQVJJVFlfRVJST1IgICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFICAgICAgICAgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FICAgfCBcCi0JIENYMl9JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQgICAgfCBcCi0JIENYMl9JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkUgfCBcCi0JIENYMl9JTlRBX0JJVF9QUkVQQVJFX0ZPUl9QT1dFUl9ET1dOICAgfCBcCi0JIENYMl9JTlRBX0JJVF9QT1dFUl9ET1dOICAgICAgICAgICAgICAgfCBcCi0gICAgICAgICBDWDJfSU5UQV9CSVRfUkZfS0lMTF9ET05FICkKLQotI2RlZmluZSBJUFdTVEFUVVNfRVJST1JfTE9HICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4NDEwKQotI2RlZmluZSBJUFdfRVZFTlRfTE9HICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4NDE0KQorI2RlZmluZSBJUFdfSU5UQV9NQVNLX0FMTCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKElQV19JTlRBX0JJVF9UWF9RVUVVRV8xICAgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9UWF9RVUVVRV8yICAgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9UWF9RVUVVRV8zICAgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9UWF9RVUVVRV80ICAgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9UWF9DTURfUVVFVUUgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9SWF9UUkFOU0ZFUiAgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9GQVRBTF9FUlJPUiAgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9QQVJJVFlfRVJST1IgICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFICAgICAgICAgICAgfCBcCisJIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FICAgfCBcCisJIElQV19JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQgICAgfCBcCisJIElQV19JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkUgfCBcCisJIElQV19JTlRBX0JJVF9QUkVQQVJFX0ZPUl9QT1dFUl9ET1dOICAgfCBcCisJIElQV19JTlRBX0JJVF9QT1dFUl9ET1dOICAgICAgICAgICAgICAgfCBcCisgICAgICAgICBJUFdfSU5UQV9CSVRfUkZfS0lMTF9ET05FICkKIAogLyogRlcgZXZlbnQgbG9nIGRlZmluaXRpb25zICovCiAjZGVmaW5lIEVWRU5UX0VMRU1fU0laRSAgICAgKDMgKiBzaXplb2YodTMyKSkKQEAgLTEzOTYsNiArMTYzNSwxMSBAQAogI2RlZmluZSBFUlJPUl9FTEVNX1NJWkUgICAgICg3ICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKIAorLyogVFggcG93ZXIgbGV2ZWwgKGRibSkgKi8KKyNkZWZpbmUgSVBXX1RYX1BPV0VSX01JTgktMTIKKyNkZWZpbmUgSVBXX1RYX1BPV0VSX01BWAkyMAorI2RlZmluZSBJUFdfVFhfUE9XRVJfREVGQVVMVAlJUFdfVFhfUE9XRVJfTUFYCisKIGVudW0gewogCUlQV19GV19FUlJPUl9PSyA9IDAsCiAJSVBXX0ZXX0VSUk9SX0ZBSUwsCkBAIC0xNDA4LDggKzE2NTIsOCBAQAogCUlQV19GV19FUlJPUl9BTExPQ19GQUlMLAogCUlQV19GV19FUlJPUl9ETUFfVU5ERVJSVU4sCiAJSVBXX0ZXX0VSUk9SX0RNQV9TVEFUVVMsCi0JSVBXX0ZXX0VSUk9SX0RJTk9TVEFUVVNfRVJST1IsCi0JSVBXX0ZXX0VSUk9SX0VFUFJPTVNUQVRVU19FUlJPUiwKKwlJUFdfRldfRVJST1JfRElOT19FUlJPUiwKKwlJUFdfRldfRVJST1JfRUVQUk9NX0VSUk9SLAogCUlQV19GV19FUlJPUl9TWVNBU1NFUlQsCiAJSVBXX0ZXX0VSUk9SX0ZBVEFMX0VSUk9SCiB9OwpAQCAtMTQyNSw2ICsxNjY5LDggQEAKICNkZWZpbmUgSENfSUJTU19SRUNPTkYgICAgNAogI2RlZmluZSBIQ19ESVNBU1NPQ19RVUlFVCA1CiAKKyNkZWZpbmUgSENfUU9TX1NVUFBPUlRfQVNTT0MgIDB4MDEKKwogI2RlZmluZSBJUFdfUkFURV9DQVBBQklMSVRJRVMgMQogI2RlZmluZSBJUFdfUkFURV9DT05ORUNUICAgICAgMAogCkBAIC0xNTk1LDE4ICsxODQxLDIwIEBACiAJSVBXX09SRF9UQUJMRV83X0xBU1QKIH07CiAKLSNkZWZpbmUgSVBXX09SRElOQUxTX1RBQkxFX0xPV0VSICAgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4NTAwKQotI2RlZmluZSBJUFdfT1JESU5BTFNfVEFCTEVfMCAgICAgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHgxODApCi0jZGVmaW5lIElQV19PUkRJTkFMU19UQUJMRV8xICAgICAgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDE4NCkKLSNkZWZpbmUgSVBXX09SRElOQUxTX1RBQkxFXzIgICAgICAgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4MTg4KQotI2RlZmluZSBJUFdfTUVNX0ZJWEVEX09WRVJSSURFICAgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MUMpCisjZGVmaW5lIElQV19FUlJPUl9MT0cgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MTApCisjZGVmaW5lIElQV19FVkVOVF9MT0cgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MTQpCisjZGVmaW5lIElQV19PUkRJTkFMU19UQUJMRV9MT1dFUiAgICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDUwMCkKKyNkZWZpbmUgSVBXX09SRElOQUxTX1RBQkxFXzAgICAgICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4MTgwKQorI2RlZmluZSBJUFdfT1JESU5BTFNfVEFCTEVfMSAgICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHgxODQpCisjZGVmaW5lIElQV19PUkRJTkFMU19UQUJMRV8yICAgICAgICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDE4OCkKKyNkZWZpbmUgSVBXX01FTV9GSVhFRF9PVkVSUklERSAgICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4NDFDKQogCiBzdHJ1Y3QgaXB3X2ZpeGVkX3JhdGUgewogCXUxNiB0eF9yYXRlczsKIAl1MTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBDWDJfSU5ESVJFQ1RfQUREUl9NQVNLICh+MHgzdWwpCisjZGVmaW5lIElQV19JTkRJUkVDVF9BRERSX01BU0sgKH4weDN1bCkKIAogc3RydWN0IGhvc3RfY21kIHsKIAl1OCBjbWQ7CkBAIC0xNjE1LDYgKzE4NjMsMTIgQEAKIAl1MzIgcGFyYW1bVEZEX0NNRF9JTU1FRElBVEVfUEFZTE9BRF9MRU5HVEhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBpcHdfY21kX2xvZyB7CisJdW5zaWduZWQgbG9uZyBqaWZmaWVzOworCWludCByZXRjb2RlOworCXN0cnVjdCBob3N0X2NtZCBjbWQ7Cit9OworCiAjZGVmaW5lIENGR19CVF9DT0VYSVNURU5DRV9NSU4gICAgICAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIENGR19CVF9DT0VYSVNURU5DRV9ERUZFUiAgICAgICAgICAgICAgICAweDAyCiAjZGVmaW5lIENGR19CVF9DT0VYSVNURU5DRV9LSUxMICAgICAgICAgICAgICAgICAweDA0CkBAIC0xNjQzLDE1ICsxODk3LDYgQEAKICNkZWZpbmUgUkVHX0NIQU5ORUxfTUFTSyAgICAgICAgICAgIDB4MDAwMDNGRkYKICNkZWZpbmUgSVBXX0lCU1NfMTFCX0RFRkFVTFRfTUFTSyAgIDB4ODdmZgogCi1zdGF0aWMgY29uc3QgbG9uZyBpcHdfZnJlcXVlbmNpZXNbXSA9IHsKLQkyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LAotCTI0MzIsIDI0MzcsIDI0NDIsIDI0NDcsCi0JMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywKLQkyNDcyLCAyNDg0Ci19OwotCi0jZGVmaW5lIEZSRVFfQ09VTlQgQVJSQVlfU0laRShpcHdfZnJlcXVlbmNpZXMpCi0KICNkZWZpbmUgSVBXX01BWF9DT05GSUdfUkVUUklFUyAxMAogCiBzdGF0aWMgaW5saW5lIHUzMiBmcmFtZV9oZHJfbGVuKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmgKaW5kZXggN2ExN2JiMy4uZjVkODU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaApAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlICJoZXJtZXMuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5jCmluZGV4IGFkYzc0OTkuLjEwOWE5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xMTIsOSArMTExLDEwIEBACiB2b2lkCiBpc2wzOHh4X3RyaWdnZXJfZGV2aWNlKGludCBhc2xlZXAsIHZvaWQgX19pb21lbSAqZGV2aWNlX2Jhc2UpCiB7Ci0JdTMyIHJlZywgY291bnRlciA9IDA7CisJdTMyIHJlZzsKIAogI2lmIFZFUkJPU0UgPiBTSE9XX0VSUk9SX01FU1NBR0VTCisJdTMyIGNvdW50ZXIgPSAwOwogCXN0cnVjdCB0aW1ldmFsIGN1cnJlbnRfdGltZTsKIAlERUJVRyhTSE9XX0ZVTkNUSU9OX0NBTExTLCAiaXNsMzh4eCB0cmlnZ2VyIGRldmljZVxuIik7CiAjZW5kaWYKQEAgLTEzMSw3ICsxMzEsNiBAQAogCQkgICAgICBjdXJyZW50X3RpbWUudHZfc2VjLCAobG9uZyljdXJyZW50X3RpbWUudHZfdXNlYywKIAkJICAgICAgcmVhZGwoZGV2aWNlX2Jhc2UgKyBJU0wzOFhYX0NUUkxfU1RBVF9SRUcpKTsKICNlbmRpZgotCQl1ZGVsYXkoSVNMMzhYWF9XUklURUlPX0RFTEFZKTsKIAogCQlyZWcgPSByZWFkbChkZXZpY2VfYmFzZSArIElTTDM4WFhfSU5UX0lERU5UX1JFRyk7CiAJCWlmIChyZWcgPT0gMHhhYmFkZmFjZSkgewpAQCAtMTQ1LDcgKzE0NCw5IEBACiAJCQl3aGlsZSAocmVnID0gcmVhZGwoZGV2aWNlX2Jhc2UgKyBJU0wzOFhYX0NUUkxfU1RBVF9SRUcpLAogCQkJICAgICAgIChyZWcgJiBJU0wzOFhYX0NUUkxfU1RBVF9TTEVFUE1PREUpID09IDApIHsKIAkJCQl1ZGVsYXkoSVNMMzhYWF9XUklURUlPX0RFTEFZKTsKKyNpZiBWRVJCT1NFID4gU0hPV19FUlJPUl9NRVNTQUdFUwogCQkJCWNvdW50ZXIrKzsKKyNlbmRpZgogCQkJfQogCiAjaWYgVkVSQk9TRSA+IFNIT1dfRVJST1JfTUVTU0FHRVMKQEAgLTE1MywxMCArMTU0LDYgQEAKIAkJCSAgICAgICIlMDhsaS4lMDhsaSBEZXZpY2UgcmVnaXN0ZXIgcmVhZCAlMDh4XG4iLAogCQkJICAgICAgY3VycmVudF90aW1lLnR2X3NlYywgKGxvbmcpY3VycmVudF90aW1lLnR2X3VzZWMsCiAJCQkgICAgICByZWFkbChkZXZpY2VfYmFzZSArIElTTDM4WFhfQ1RSTF9TVEFUX1JFRykpOwotI2VuZGlmCi0JCQl1ZGVsYXkoSVNMMzhYWF9XUklURUlPX0RFTEFZKTsKLQotI2lmIFZFUkJPU0UgPiBTSE9XX0VSUk9SX01FU1NBR0VTCiAJCQlkb19nZXR0aW1lb2ZkYXkoJmN1cnJlbnRfdGltZSk7CiAJCQlERUJVRyhTSE9XX1RSQUNJTkcsCiAJCQkgICAgICAiJTA4bGkuJTA4bGkgRGV2aWNlIGFzbGVlcCBjb3VudGVyICVpXG4iLApAQCAtMTcxLDcgKzE2OCw2IEBACiAKIAkJLyogcGVyZm9ybSBhbm90aGVyIHJlYWQgb24gdGhlIERldmljZSBTdGF0dXMgUmVnaXN0ZXIgKi8KIAkJcmVnID0gcmVhZGwoZGV2aWNlX2Jhc2UgKyBJU0wzOFhYX0NUUkxfU1RBVF9SRUcpOwotCQl1ZGVsYXkoSVNMMzhYWF9XUklURUlPX0RFTEFZKTsKIAogI2lmIFZFUkJPU0UgPiBTSE9XX0VSUk9SX01FU1NBR0VTCiAJCWRvX2dldHRpbWVvZmRheSgmY3VycmVudF90aW1lKTsKQEAgLTE4Nyw3ICsxODMsNiBAQAogCiAJCWlzbDM4eHhfdzMyX2ZsdXNoKGRldmljZV9iYXNlLCBJU0wzOFhYX0RFVl9JTlRfVVBEQVRFLAogCQkJCSAgSVNMMzhYWF9ERVZfSU5UX1JFRyk7Ci0JCXVkZWxheShJU0wzOFhYX1dSSVRFSU9fREVMQVkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5oCmluZGV4IGU4M2U0OTEuLjhhZjIwOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpZm5kZWYgX0lTTF8zOFhYX0gKICNkZWZpbmUgX0lTTF8zOFhYX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDVjMWExYWQuLjEzNWExNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMjAsNyArMjAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCA3OGJkYjM1Li41ZGRmMjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtMTksNyArMTksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCmluZGV4IGVmYmVkNDMuLjA3MDUzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaWZuZGVmIF9JU0xQQ0lfREVWX0gKICNkZWZpbmUgX0lTTFBDSV9ERVZfSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggZmMxZWIzNS4uMzNkNjRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMjI3LDE3ICsyMjYsMTcgQEAKIAkJcHJpdi0+ZGF0YV9sb3dfdHhfZnVsbCA9IDE7CiAJfQogCisJLyogc2V0IHRoZSB0cmFuc21pc3Npb24gdGltZSAqLworCW5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlwcml2LT5zdGF0aXN0aWNzLnR4X3BhY2tldHMrKzsKKwlwcml2LT5zdGF0aXN0aWNzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCiAJLyogdHJpZ2dlciB0aGUgZGV2aWNlICovCiAJaXNscGNpX3RyaWdnZXIocHJpdik7CiAKIAkvKiB1bmxvY2sgdGhlIGRyaXZlciBjb2RlICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2xvY2ssIGZsYWdzKTsKIAotCS8qIHNldCB0aGUgdHJhbnNtaXNzaW9uIHRpbWUgKi8KLQluZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQogCXJldHVybiAwOwogCiAgICAgICBkcm9wX2ZyZWU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKaW5kZXggZGMwNDBjYS4uYjQxZDY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwpAQCAtMTgsNyArMTgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKaW5kZXggNGIzYzk4Zi4uYzgyMmNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwpAQCAtNDYwOCw5ICs0NjA4LDggQEAKICNlbmRpZgogCiAgIC8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0gIGxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOworICBsaW5rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKICAgaWYgKCFsaW5rKSByZXR1cm4gTlVMTDsKLSAgbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwogCiAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwogICBsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwppbmRleCAzZjhjMjdmLi45NzhmZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwpAQCAtMTk2NSwxMCArMTk2NSw5IEBACiAJaW50IHJldDsKIAogCS8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0JbGluayA9IGttYWxsb2Moc2l6ZW9mKCpsaW5rKSwgR0ZQX0tFUk5FTCk7CisJbGluayA9IGt6YWxsb2Moc2l6ZW9mKCpsaW5rKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsaW5rKQogCQlnb3RvIG91dDsKLQltZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7CiAKIAkvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KIAlsaW5rLT5pby5OdW1Qb3J0czEJPSAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCBkNDE0YTNiLi44NmMwODA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKaW5kZXggZjExM2I2OS4uMDFhODk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKaW5kZXggZmU1ZWEzNi4uNTZjNTg4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCkBAIC0yMiwxNiArMjIsMjAgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+Ci0jaWZkZWYgQ09ORklHX1NBMTEwMF9DT0xMSUUKLSNpbmNsdWRlIDxhc20vYXJjaC1zYTExMDAvY29sbGllLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9hcmNoLXB4YS9weGEtcmVncy5oPgotI2VuZGlmCiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKICNkZWZpbmUJTk9fS0VFUF9WUyAweDAwMDEKIAorLyogUENNQ0lBIHRvIFNjb29wIGxpbmthZ2UKKworICAgVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gbGluayBtdWx0aXBsZSBzY29vcCBkZXZpY2VzIGludG8gb25lCisgICBzaW5nbGUgZW50aXR5IGZvciB0aGUgcHhhMnh4X3BjbWNpYSBkZXZpY2Ugc28gdGhpcyBzdHJ1Y3R1cmUKKyAgIGlzIHVzZWQgd2hpY2ggaXMgc2V0dXAgYnkgdGhlIHBsYXRmb3JtIGNvZGUKKyovCitzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2NvbmZpZyAqcGxhdGZvcm1fc2Nvb3BfY29uZmlnOworI2RlZmluZSBTQ09PUF9ERVYgcGxhdGZvcm1fc2Nvb3BfY29uZmlnLT5kZXZzCisKIHN0YXRpYyB2b2lkIHNoYXJwc2xfcGNtY2lhX2luaXRfcmVzZXQoc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgKnNjb29wZGV2KQogewogCXJlc2V0X3Njb29wKHNjb29wZGV2LT5kZXYpOwpAQCAtNDMsMzggKzQ3LDE2IEBACiB7CiAJaW50IHJldDsKIAotI2lmbmRlZiBDT05GSUdfU0ExMTAwX0NPTExJRQotCS8qCi0JICogU2V0dXAgZGVmYXVsdCBzdGF0ZSBvZiBHUElPIG91dHB1dHMKLQkgKiBiZWZvcmUgd2UgZW5hYmxlIHRoZW0gYXMgb3V0cHV0cy4KLQkgKi8KLQlHUFNSKEdQSU80OF9uUE9FKSA9Ci0JCUdQSU9fYml0KEdQSU80OF9uUE9FKSB8Ci0JCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8Ci0JCUdQSU9fYml0KEdQSU81MF9uUElPUikgfAotCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwKLQkJR1BJT19iaXQoR1BJTzUyX25QQ0VfMSkgfAotCQlHUElPX2JpdChHUElPNTNfblBDRV8yKTsKLQotCXB4YV9ncGlvX21vZGUoR1BJTzQ4X25QT0VfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzQ5X25QV0VfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUwX25QSU9SX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81MV9uUElPV19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTJfblBDRV8xX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81M19uUENFXzJfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU0X3BTS1RTRUxfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU1X25QUkVHX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81Nl9uUFdBSVRfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU3X25JT0lTMTZfTUQpOwotI2VuZGlmCisJaWYgKHBsYXRmb3JtX3Njb29wX2NvbmZpZy0+cGNtY2lhX2luaXQpCisJCXBsYXRmb3JtX3Njb29wX2NvbmZpZy0+cGNtY2lhX2luaXQoKTsKIAogCS8qIFJlZ2lzdGVyIGludGVycnVwdHMgKi8KLQlpZiAoc2Nvb3BfZGV2c1tza3QtPm5yXS5jZF9pcnEgPj0gMCkgeworCWlmIChTQ09PUF9ERVZbc2t0LT5ucl0uY2RfaXJxID49IDApIHsKIAkJc3RydWN0IHBjbWNpYV9pcnFzIGNkX2lycTsKIAogCQljZF9pcnEuc29jayA9IHNrdC0+bnI7Ci0JCWNkX2lycS5pcnEgID0gc2Nvb3BfZGV2c1tza3QtPm5yXS5jZF9pcnE7Ci0JCWNkX2lycS5zdHIgID0gc2Nvb3BfZGV2c1tza3QtPm5yXS5jZF9pcnFfc3RyOworCQljZF9pcnEuaXJxICA9IFNDT09QX0RFVltza3QtPm5yXS5jZF9pcnE7CisJCWNkX2lycS5zdHIgID0gU0NPT1BfREVWW3NrdC0+bnJdLmNkX2lycV9zdHI7CiAJCXJldCA9IHNvY19wY21jaWFfcmVxdWVzdF9pcnFzKHNrdCwgJmNkX2lycSwgMSk7CiAKIAkJaWYgKHJldCkgewpAQCAtODMsMTkgKzY1LDE5IEBACiAJCX0KIAl9CiAKLQlza3QtPmlycSA9IHNjb29wX2RldnNbc2t0LT5ucl0uaXJxOworCXNrdC0+aXJxID0gU0NPT1BfREVWW3NrdC0+bnJdLmlycTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzaGFycHNsX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlpZiAoc2Nvb3BfZGV2c1tza3QtPm5yXS5jZF9pcnEgPj0gMCkgeworCWlmIChTQ09PUF9ERVZbc2t0LT5ucl0uY2RfaXJxID49IDApIHsKIAkJc3RydWN0IHBjbWNpYV9pcnFzIGNkX2lycTsKIAogCQljZF9pcnEuc29jayA9IHNrdC0+bnI7Ci0JCWNkX2lycS5pcnEgID0gc2Nvb3BfZGV2c1tza3QtPm5yXS5jZF9pcnE7Ci0JCWNkX2lycS5zdHIgID0gc2Nvb3BfZGV2c1tza3QtPm5yXS5jZF9pcnFfc3RyOworCQljZF9pcnEuaXJxICA9IFNDT09QX0RFVltza3QtPm5yXS5jZF9pcnE7CisJCWNkX2lycS5zdHIgID0gU0NPT1BfREVWW3NrdC0+bnJdLmNkX2lycV9zdHI7CiAJCXNvY19wY21jaWFfZnJlZV9pcnFzKHNrdCwgJmNkX2lycSwgMSk7CiAJfQogfQpAQCAtMTA1LDkgKzg3LDkgQEAKIAkJCQkgICAgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCiB7CiAJdW5zaWduZWQgc2hvcnQgY3ByLCBjc3I7Ci0Jc3RydWN0IGRldmljZSAqc2Nvb3AgPSBzY29vcF9kZXZzW3NrdC0+bnJdLmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpzY29vcCA9IFNDT09QX0RFVltza3QtPm5yXS5kZXY7CiAKLQljcHIgPSByZWFkX3Njb29wX3JlZyhzY29vcF9kZXZzW3NrdC0+bnJdLmRldiwgU0NPT1BfQ1BSKTsKKwljcHIgPSByZWFkX3Njb29wX3JlZyhTQ09PUF9ERVZbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIpOwogCiAJd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9JUk0sIDB4MDBGRik7CiAJd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9JU1IsIDB4MDAwMCk7CkBAIC0xMTYsMjEgKzk4LDI1IEBACiAJaWYgKGNzciAmIDB4MDAwNCkgewogCQkvKiBjYXJkIGVqZWN0ICovCiAJCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ0RSLCAweDAwMDApOwotCQlzY29vcF9kZXZzW3NrdC0+bnJdLmtlZXBfdnMgPSBOT19LRUVQX1ZTOworCQlTQ09PUF9ERVZbc2t0LT5ucl0ua2VlcF92cyA9IE5PX0tFRVBfVlM7CiAJfQotCWVsc2UgaWYgKCEoc2Nvb3BfZGV2c1tza3QtPm5yXS5rZWVwX3ZzICYgTk9fS0VFUF9WUykpIHsKKwllbHNlIGlmICghKFNDT09QX0RFVltza3QtPm5yXS5rZWVwX3ZzICYgTk9fS0VFUF9WUykpIHsKIAkJLyoga2VlcCB2czEsdnMyICovCiAJCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ0RSLCAweDAwMDApOwotCQljc3IgfD0gc2Nvb3BfZGV2c1tza3QtPm5yXS5rZWVwX3ZzOworCQljc3IgfD0gU0NPT1BfREVWW3NrdC0+bnJdLmtlZXBfdnM7CiAJfQogCWVsc2UgaWYgKGNwciAmIDB4MDAwMykgewogCQkvKiBwb3dlciBvbiAqLwogCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NEUiwgMHgwMDAwKTsKLQkJc2Nvb3BfZGV2c1tza3QtPm5yXS5rZWVwX3ZzID0gKGNzciAmIDB4MDBDMCk7CisJCVNDT09QX0RFVltza3QtPm5yXS5rZWVwX3ZzID0gKGNzciAmIDB4MDBDMCk7CiAJfQogCWVsc2UgewogCQkvKiBjYXJkIGRldGVjdCAqLwotCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NEUiwgMHgwMDAyKTsKKwkgICAgICAgIGlmICgobWFjaGluZV9pc19zcGl0eigpIHx8IG1hY2hpbmVfaXNfYm9yem9pKCkpICYmIHNrdC0+bnIgPT0gMSkgeworCSAgICAgICAgICAgICAgICB3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NEUiwgMHgwMDAwKTsKKwkgICAgICAgIH0gZWxzZSB7CisJCSAgICAgICAgd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DRFIsIDB4MDAwMik7CisJICAgICAgICB9CiAJfQogCiAJc3RhdGUtPmRldGVjdCA9IChjc3IgJiAweDAwMDQpID8gMCA6IDE7CkBAIC0xNDQsNyArMTMwLDYgQEAKIAlpZiAoKGNwciAmIDB4MDA4MCkgJiYgKChjcHIgJiAweDgwNDApICE9IDB4ODA0MCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzaGFycHNsX3BjbWNpYV9zb2NrZXRfc3RhdGUoKTogQ1BSPSUwNFgsIExvdyB2b2x0YWdlIVxuIiwgY3ByKTsKIAl9Ci0KIH0KIAogCkBAIC0xNTIsNyArMTM3LDcgQEAKIAkJCQkgICAgICAgY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRldmljZSAqc2Nvb3AgPSBzY29vcF9kZXZzW3NrdC0+bnJdLmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpzY29vcCA9IFNDT09QX0RFVltza3QtPm5yXS5kZXY7CiAKIAl1bnNpZ25lZCBzaG9ydCBjcHIsIG5jcHIsIGNjciwgbmNjciwgbWNyLCBubWNyLCBpbXIsIG5pbXI7CiAKQEAgLTE3Nyw4ICsxNjIsMTMgQEAKIAluY2NyID0gKGNjciA9IHJlYWRfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DQ1IpKSAmIH4weDAwODA7CiAJbmltciA9IChpbXIgPSByZWFkX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfSU1SKSkgJiB+MHgwMDNFOwogCi0JbmNwciB8PSAoc3RhdGUtPlZjYyA9PSAzMykgPyAweDAwMDEgOgotCQkJCShzdGF0ZS0+VmNjID09IDUwKSA/IDB4MDAwMiA6IDA7CisJaWYgKChtYWNoaW5lX2lzX3NwaXR6KCkgfHwgbWFjaGluZV9pc19ib3J6b2koKSB8fCBtYWNoaW5lX2lzX2FraXRhKCkpICYmIHNrdC0+bnIgPT0gMCkgeworCSAgICAgICAgbmNwciB8PSAoc3RhdGUtPlZjYyA9PSAzMykgPyAweDAwMDIgOgorCQkgICAgICAgIChzdGF0ZS0+VmNjID09IDUwKSA/IDB4MDAwMiA6IDA7CisJfSBlbHNlIHsKKwkgICAgICAgIG5jcHIgfD0gKHN0YXRlLT5WY2MgPT0gMzMpID8gMHgwMDAxIDoKKwkJICAgICAgICAoc3RhdGUtPlZjYyA9PSA1MCkgPyAweDAwMDIgOiAwOworCX0KIAlubWNyIHw9IChzdGF0ZS0+ZmxhZ3MmU1NfSU9DQVJEKSA/IDB4MDAxMCA6IDA7CiAJbmNwciB8PSAoc3RhdGUtPmZsYWdzJlNTX09VVFBVVF9FTkEpID8gMHgwMDgwIDogMDsKIAluY2NyIHw9IChzdGF0ZS0+ZmxhZ3MmU1NfUkVTRVQpPyAweDAwODA6IDA7CkBAIC0xOTAsMTggKzE4MCwyMiBAQAogCQkJKChza3QtPnN0YXR1cyZTU19XUlBST1QpID8gMHgwMDA4IDogMCk7CiAKIAlpZiAoIShuY3ByICYgMHgwMDAzKSkgewotCQlzY29vcF9kZXZzW3NrdC0+bnJdLmtlZXBfcmQgPSAwOwotCX0gZWxzZSBpZiAoIXNjb29wX2RldnNbc2t0LT5ucl0ua2VlcF9yZCkgeworCQlTQ09PUF9ERVZbc2t0LT5ucl0ua2VlcF9yZCA9IDA7CisJfSBlbHNlIGlmICghU0NPT1BfREVWW3NrdC0+bnJdLmtlZXBfcmQpIHsKIAkJaWYgKG5jY3IgJiAweDAwODApCi0JCQlzY29vcF9kZXZzW3NrdC0+bnJdLmtlZXBfcmQgPSAxOworCQkJU0NPT1BfREVWW3NrdC0+bnJdLmtlZXBfcmQgPSAxOwogCQllbHNlCiAJCQluY2NyIHw9IDB4MDA4MDsKIAl9CiAKIAlpZiAobWNyICE9IG5tY3IpCiAJCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfTUNSLCBubWNyKTsKLQlpZiAoY3ByICE9IG5jcHIpCi0JCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ1BSLCBuY3ByKTsKKwlpZiAoY3ByICE9IG5jcHIpIHsKKwkJaWYgKHBsYXRmb3JtX3Njb29wX2NvbmZpZy0+cG93ZXJfY3RybCkKKwkJCXBsYXRmb3JtX3Njb29wX2NvbmZpZy0+cG93ZXJfY3RybChzY29vcCwgbmNwciAsIHNrdC0+bnIpOworCQllbHNlCisJCSAgICAgICAgd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DUFIsIG5jcHIpOworCX0KIAlpZiAoY2NyICE9IG5jY3IpCiAJCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ0NSLCBuY2NyKTsKIAlpZiAoaW1yICE9IG5pbXIpCkBAIC0yMTQsNDMgKzIwOCw0MyBAQAogCiBzdGF0aWMgdm9pZCBzaGFycHNsX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlzaGFycHNsX3BjbWNpYV9pbml0X3Jlc2V0KCZzY29vcF9kZXZzW3NrdC0+bnJdKTsKKwlzaGFycHNsX3BjbWNpYV9pbml0X3Jlc2V0KCZTQ09PUF9ERVZbc2t0LT5ucl0pOwogCiAJLyogRW5hYmxlIGludGVycnVwdCAqLwotCXdyaXRlX3Njb29wX3JlZyhzY29vcF9kZXZzW3NrdC0+bnJdLmRldiwgU0NPT1BfSU1SLCAweDAwQzApOwotCXdyaXRlX3Njb29wX3JlZyhzY29vcF9kZXZzW3NrdC0+bnJdLmRldiwgU0NPT1BfTUNSLCAweDAxMDEpOwotCXNjb29wX2RldnNbc2t0LT5ucl0ua2VlcF92cyA9IE5PX0tFRVBfVlM7CisJd3JpdGVfc2Nvb3BfcmVnKFNDT09QX0RFVltza3QtPm5yXS5kZXYsIFNDT09QX0lNUiwgMHgwMEMwKTsKKwl3cml0ZV9zY29vcF9yZWcoU0NPT1BfREVWW3NrdC0+bnJdLmRldiwgU0NPT1BfTUNSLCAweDAxMDEpOworCVNDT09QX0RFVltza3QtPm5yXS5rZWVwX3ZzID0gTk9fS0VFUF9WUzsKIAogCWlmIChtYWNoaW5lX2lzX2NvbGxpZSgpKQogCQkvKiBXZSBuZWVkIHRvIGRpc2FibGUgU1NfT1VUUFVUX0VOQSBoZXJlLiAqLwotCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX0NQUiwgcmVhZF9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX0NQUikgJiB+MHgwMDgwKTsKKwkJd3JpdGVfc2Nvb3BfcmVnKFNDT09QX0RFVltza3QtPm5yXS5kZXYsIFNDT09QX0NQUiwgcmVhZF9zY29vcF9yZWcoU0NPT1BfREVWW3NrdC0+bnJdLmRldiwgU0NPT1BfQ1BSKSAmIH4weDAwODApOwogfQogCiBzdGF0aWMgdm9pZCBzaGFycHNsX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAkvKiBDRl9CVVNfT0ZGICovCi0Jc2hhcnBzbF9wY21jaWFfaW5pdF9yZXNldCgmc2Nvb3BfZGV2c1tza3QtPm5yXSk7CisJc2hhcnBzbF9wY21jaWFfaW5pdF9yZXNldCgmU0NPT1BfREVWW3NrdC0+bnJdKTsKIAogCWlmIChtYWNoaW5lX2lzX2NvbGxpZSgpKQogCQkvKiBXZSBuZWVkIHRvIGRpc2FibGUgU1NfT1VUUFVUX0VOQSBoZXJlLiAqLwotCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX0NQUiwgcmVhZF9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX0NQUikgJiB+MHgwMDgwKTsKKwkJd3JpdGVfc2Nvb3BfcmVnKFNDT09QX0RFVltza3QtPm5yXS5kZXYsIFNDT09QX0NQUiwgcmVhZF9zY29vcF9yZWcoU0NPT1BfREVWW3NrdC0+bnJdLmRldiwgU0NPT1BfQ1BSKSAmIH4weDAwODApOwogfQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgc2hhcnBzbF9wY21jaWFfb3BzID0gewotCS5vd25lcgkJCQk9IFRISVNfTU9EVUxFLAotCS5od19pbml0CQkJPSBzaGFycHNsX3BjbWNpYV9od19pbml0LAotCS5od19zaHV0ZG93bgkJPSBzaGFycHNsX3BjbWNpYV9od19zaHV0ZG93biwKLQkuc29ja2V0X3N0YXRlCQk9IHNoYXJwc2xfcGNtY2lhX3NvY2tldF9zdGF0ZSwKLQkuY29uZmlndXJlX3NvY2tldAk9IHNoYXJwc2xfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCi0JLnNvY2tldF9pbml0CQk9IHNoYXJwc2xfcGNtY2lhX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBzaGFycHNsX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKLQkuZmlyc3QJCQkJPSAwLAotCS5ucgkJCQkJPSAwLAorCS5vd25lciAgICAgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLmh3X2luaXQgICAgICAgICAgICAgICAgPSBzaGFycHNsX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93biAgICAgICAgICAgID0gc2hhcnBzbF9wY21jaWFfaHdfc2h1dGRvd24sCisJLnNvY2tldF9zdGF0ZSAgICAgICAgICAgPSBzaGFycHNsX3BjbWNpYV9zb2NrZXRfc3RhdGUsCisJLmNvbmZpZ3VyZV9zb2NrZXQgICAgICAgPSBzaGFycHNsX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAorCS5zb2NrZXRfaW5pdCAgICAgICAgICAgID0gc2hhcnBzbF9wY21jaWFfc29ja2V0X2luaXQsCisJLnNvY2tldF9zdXNwZW5kICAgICAgICAgPSBzaGFycHNsX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKKwkuZmlyc3QgICAgICAgICAgICAgICAgICA9IDAsCisJLm5yICAgICAgICAgICAgICAgICAgICAgPSAwLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoYXJwc2xfcGNtY2lhX2RldmljZTsKLQogI2lmZGVmIENPTkZJR19TQTExMDBfQ09MTElFCisjaW5jbHVkZSAic2ExMXh4X2Jhc2UuaCIKKwogaW50IF9faW5pdCBwY21jaWFfY29sbGllX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogICAgICAgIGludCByZXQgPSAtRU5PREVWOwpAQCAtMjYzLDExICsyNTcsMTMgQEAKIAogI2Vsc2UKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoYXJwc2xfcGNtY2lhX2RldmljZTsKKwogc3RhdGljIGludCBfX2luaXQgc2hhcnBzbF9wY21jaWFfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlzaGFycHNsX3BjbWNpYV9vcHMubnI9c2Nvb3BfbnVtOworCXNoYXJwc2xfcGNtY2lhX29wcy5ucj1wbGF0Zm9ybV9zY29vcF9jb25maWctPm51bV9kZXZzOwogCXNoYXJwc2xfcGNtY2lhX2RldmljZSA9IGttYWxsb2Moc2l6ZW9mKCpzaGFycHNsX3BjbWNpYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNoYXJwc2xfcGNtY2lhX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNzUsNyArMjcxLDcgQEAKIAltZW1zZXQoc2hhcnBzbF9wY21jaWFfZGV2aWNlLCAwLCBzaXplb2YoKnNoYXJwc2xfcGNtY2lhX2RldmljZSkpOwogCXNoYXJwc2xfcGNtY2lhX2RldmljZS0+bmFtZSA9ICJweGEyeHgtcGNtY2lhIjsKIAlzaGFycHNsX3BjbWNpYV9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcGNtY2lhX29wczsKLQlzaGFycHNsX3BjbWNpYV9kZXZpY2UtPmRldi5wYXJlbnQ9c2Nvb3BfZGV2c1swXS5kZXY7CisJc2hhcnBzbF9wY21jaWFfZGV2aWNlLT5kZXYucGFyZW50PXBsYXRmb3JtX3Njb29wX2NvbmZpZy0+ZGV2c1swXS5kZXY7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoc2hhcnBzbF9wY21jaWFfZGV2aWNlKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuaCBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmgKaW5kZXggM2I0ZGE1YS4uZjdiZjQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5oCkBAIC00MSwxNCArNDEsMTQgQEAKIC8qCiAgKiBIZWxwZXIgRnVuY3Rpb25zLgogICovCi1leHRlcm4gaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAoga2JkX3B1dF9xdWV1ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgY2gpCiB7CiAJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgMCk7CiAJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGtiZF9wdXRzX3F1ZXVlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmNwKQogewogCXdoaWxlICgqY3ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDZiOGFhNmEuLjMyOGUzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0yNjUsNyArMjY1LDcgQEAKIC8qCiAgKiBTb21lIGluc3RydWN0aW9ucyBhcyBhc3NlbWJseQogICovCi1leHRlcm4gX19pbmxpbmVfXyBpbnQgCitzdGF0aWMgaW5saW5lIGludAogZG9fc2lnYV9zeW5jKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBtYXNrMSwgdW5zaWduZWQgaW50IG1hc2syKQogewogCWludCBjYzsKQEAgLTMwMCw3ICszMDAsNyBAQAogCXJldHVybiBjYzsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gaW50CitzdGF0aWMgaW5saW5lIGludAogZG9fc2lnYV9pbnB1dCh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbWFzaykKIHsKIAlpbnQgY2M7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAlyZXR1cm4gY2M7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIGludAorc3RhdGljIGlubGluZSBpbnQKIGRvX3NpZ2Ffb3V0cHV0KHVuc2lnbmVkIGxvbmcgaXJxLCB1bnNpZ25lZCBsb25nIG1hc2ssIF9fdTMyICpiYikKIHsKIAlpbnQgY2M7CkBAIC00MDEsNyArNDAxLDcgQEAKIAlyZXR1cm4gY2M7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogZG9fY2xlYXJfZ2xvYmFsX3N1bW1hcnkodm9pZCkKIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwppbmRleCAwNGMyZWY3Li40MDEwZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3RfdWV2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgIno5MGNyeXB0LmgiCiAjaW5jbHVkZSAiejkwY29tbW9uLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggMWExYzNkZS4uNmI2M2QyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTg4LDcgKzg4LDYgQEAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAiY3UzMDg4LmgiCiAjaW5jbHVkZSAiY2xhdy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9mc20uaCBiL2RyaXZlcnMvczM5MC9uZXQvZnNtLmgKaW5kZXggMWI4YTdlNy4uNWI5ODI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9mc20uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2ZzbS5oCkBAIC0xNDAsNyArMTQwLDcgQEAKICAqICAgICAgICAgICAgICAxICBpZiBjdXJyZW50IHN0YXRlIG9yIGV2ZW50IGlzIG91dCBvZiByYW5nZQogICogICAgICAgICAgICAgICEwIGlmIHN0YXRlIGFuZCBldmVudCBpbiByYW5nZSwgYnV0IG5vIGFjdGlvbiBkZWZpbmVkLgogICovCi1leHRlcm4gX19pbmxpbmVfXyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBmc21fZXZlbnQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJZnNtX2Z1bmN0aW9uX3QgcjsKQEAgLTE4OCw3ICsxODgsNyBAQAogICogQHBhcmFtIGZpICAgIFBvaW50ZXIgdG8gRlNNCiAgKiBAcGFyYW0gc3RhdGUgVGhlIG5ldyBzdGF0ZSBmb3IgdGhpcyBGU00uCiAgKi8KLWV4dGVybiBfX2lubGluZV9fIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogZnNtX25ld3N0YXRlKGZzbV9pbnN0YW5jZSAqZmksIGludCBuZXdzdGF0ZSkKIHsKIAlhdG9taWNfc2V0KCZmaS0+c3RhdGUsbmV3c3RhdGUpOwpAQCAtMjA4LDcgKzIwOCw3IEBACiAgKgogICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgRlNNLgogICovCi1leHRlcm4gX19pbmxpbmVfXyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBmc21fZ2V0c3RhdGUoZnNtX2luc3RhbmNlICpmaSkKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmZpLT5zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaCBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCmluZGV4IDRlYWE3MDEuLmQ5ZWE3ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCisrKyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCkBAIC04OCw3ICs4OCw3IEBACiAjZGVmaW5lIENSV19FUkNfUEVSUkkgICAgMHgwNyAvKiBwZXJtLiBlcnJvciwgZmFjaWxpdHkgaW5pdCAqLwogI2RlZmluZSBDUldfRVJDX1BNT0QgICAgIDB4MDggLyogaW5zdGFsbGVkIHBhcmFtZXRlcnMgbW9kaWZpZWQgKi8KIAotZXh0ZXJuIF9faW5saW5lX18gaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncgKQorc3RhdGljIGlubGluZSBpbnQgc3Rjcncoc3RydWN0IGNydyAqcGNydyApCiB7CiAgICAgICAgIGludCBjY29kZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguaCBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmgKaW5kZXggOThiYWQ3Ny4uNGY4MWZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguaAorKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5oCkBAIC01NCw3ICs1NCw2IEBACiAjaWZuZGVmIF8zV19YWFhYX0gKICNkZWZpbmUgXzNXX1hYWFhfSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIEFFTiBzdHJpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTIwOTEuYyBiL2RyaXZlcnMvc2NzaS9hMjA5MS5jCmluZGV4IGY3YTE3NTEuLjMwYTE0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hMjA5MS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hMjA5MS5jCkBAIC0yLDcgKzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCA0NjEyMzEyLi4xMGM0NzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTQyLDggKzQyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMTk2LDcgKzE5Niw3IEBACiBzdGF0aWMgaW5saW5lIGludCBhaGNpX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyB2b2lkIGFoY2lfcmVtb3ZlX29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGFoY2lfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYWhjaV9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaAppbmRleCAwNTJjNjYxLi5iYzQ0MjIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKaW5kZXggYmU5ZWRiZS4uZjJhOTU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmMgYi9kcml2ZXJzL3Njc2kvYW1pZ2E3eHguYwppbmRleCA1ZjEzNTQ2Li5kZWE4NDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYW1pZ2E3eHguYworKysgYi9kcml2ZXJzL3Njc2kvYW1pZ2E3eHguYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYyBiL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCmluZGV4IDdmOGFhMWIuLmExYmQ4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIApAQCAtMTI4LDcgKzEyNyw3IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBwaWl4X3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBpaXhfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmMgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDAuYwppbmRleCAyOWM3ZWQzLi4xMzBmMzBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ3ZwMTEuYyBiL2RyaXZlcnMvc2NzaS9ndnAxMS5jCmluZGV4IGQxMjM0MmYuLmFiMjIzODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ndnAxMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ndnAxMS5jCkBAIC0yLDcgKzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmMgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKaW5kZXggODg3YTVjMy4uOGQ5Nzk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libW1jYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuYwpAQCAtMTgsMTIgKzE4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaWZuZGVmIExJTlVYX1ZFUlNJT05fQ09ERQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNlbmRpZgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw0NSkKLSNlcnJvciAiVGhpcyBkcml2ZXIgd29ya3Mgb25seSB3aXRoIGtlcm5lbCAyLjUuNDUgb3IgaGlnaGVyISIKLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXBzLmggYi9kcml2ZXJzL3Njc2kvaXBzLmgKaW5kZXggNTA1ZTk2Ny4uYWRjNmVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHMuaApAQCAtNTAsNiArNTAsNyBAQAogI2lmbmRlZiBfSVBTX0hfCiAgICAjZGVmaW5lIF9JUFNfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICAgICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogICAgI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IDFjMWE3Y2EuLmE3NGI0MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC01MSw4ICs1MSw4IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgInNjc2lfcHJpdi5oIgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTExNDQsNyArMTE0NCw3IEBACiAJCSAqIEFUQSBzb2Z0d2FyZSByZXNldCAoU1JTVCwgdGhlIGRlZmF1bHQpIGRvZXMgbm90IGFwcGVhcgogCQkgKiB0byBoYXZlIHRoaXMgcHJvYmxlbS4KIAkJICovCi0JCWlmICgodXNpbmdfZWRkKSAmJiAocWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9JRF9BVEEpKSB7CisJCWlmICgodXNpbmdfZWRkKSAmJiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkpIHsKIAkJCXU4IGVyciA9IHFjLT50Zi5mZWF0dXJlOwogCQkJaWYgKGVyciAmIEFUQV9BQk9SVEVEKSB7CiAJCQkJZGV2LT5jbGFzcyA9IEFUQV9ERVZfQVRBUEk7CkBAIC0yNzEzLDcgKzI3MTMsNyBAQAogLyoqCiAgKglhdGFfcG9sbF9xY19jb21wbGV0ZSAtIHR1cm4gaXJxIGJhY2sgb24gYW5kIGZpbmlzaCBxYwogICoJQHFjOiBDb21tYW5kIHRvIGNvbXBsZXRlCi0gKglAZHJ2X3N0YXQ6IEFUQSBzdGF0dXMgcmVnaXN0ZXIgY29udGVudAorICoJQGVycl9tYXNrOiBBVEEgc3RhdHVzIHJlZ2lzdGVyIGNvbnRlbnQKICAqCiAgKglMT0NLSU5HOgogICoJTm9uZS4gIChncmFicyBob3N0IGxvY2spCkBAIC0yNzQ3LDcgKzI3NDcsNiBAQAogCXU4IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgcG9sbF9zdGF0ZSA9IEhTTV9TVF9VTktOT1dOOwogCXVuc2lnbmVkIGludCByZWdfc3RhdGUgPSBIU01fU1RfVU5LTk9XTjsKLQljb25zdCB1bnNpZ25lZCBpbnQgdG1vdXRfc3RhdGUgPSBIU01fU1RfVE1PVVQ7CiAKIAlzd2l0Y2ggKGFwLT5oc21fdGFza19zdGF0ZSkgewogCWNhc2UgSFNNX1NUOgpAQCAtMjc2OCw3ICsyNzY3LDcgQEAKIAlzdGF0dXMgPSBhdGFfY2hrX3N0YXR1cyhhcCk7CiAJaWYgKHN0YXR1cyAmIEFUQV9CVVNZKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGFwLT5waW9fdGFza190aW1lb3V0KSkgewotCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gdG1vdXRfc3RhdGU7CisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfVE1PVVQ7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBwb2xsX3N0YXRlOwpAQCAtMzQ3OCw3ICszNDc3LDcgQEAKIC8qKgogICoJYXRhX3FjX2NvbXBsZXRlIC0gQ29tcGxldGUgYW4gYWN0aXZlIEFUQSBjb21tYW5kCiAgKglAcWM6IENvbW1hbmQgdG8gY29tcGxldGUKLSAqCUBkcnZfc3RhdDogQVRBIFN0YXR1cyByZWdpc3RlciBjb250ZW50cworICoJQGVycl9tYXNrOiBBVEEgU3RhdHVzIHJlZ2lzdGVyIGNvbnRlbnRzCiAgKgogICoJSW5kaWNhdGUgdG8gdGhlIG1pZCBhbmQgdXBwZXIgbGF5ZXJzIHRoYXQgYW4gQVRBCiAgKgljb21tYW5kIGhhcyBjb21wbGV0ZWQsIHdpdGggZWl0aGVyIGFuIG9rIG9yIG5vdC1vayBzdGF0dXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCmluZGV4IGViNjA0YjAuLmJiMzBmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCkBAIC0zNyw5ICszNyw5IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3JlcXVlc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogLyoqCiAgKglhdGFfY21kX2lvY3RsIC0gSGFuZGxlciBmb3IgSERJT19EUklWRV9DTUQgaW9jdGwKLSAqCUBkZXY6IERldmljZSB0byB3aG9tIHdlIGFyZSBpc3N1aW5nIGNvbW1hbmQKKyAqCUBzY3NpZGV2OiBEZXZpY2UgdG8gd2hpY2ggd2UgYXJlIGlzc3VpbmcgY29tbWFuZAogICoJQGFyZzogVXNlciBwcm92aWRlZCBkYXRhIGZvciBpc3N1aW5nIGNvbW1hbmQKICAqCiAgKglMT0NLSU5HOgpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIC8qKgogICoJYXRhX3Rhc2tfaW9jdGwgLSBIYW5kbGVyIGZvciBIRElPX0RSSVZFX1RBU0sgaW9jdGwKLSAqCUBkZXY6IERldmljZSB0byB3aG9tIHdlIGFyZSBpc3N1aW5nIGNvbW1hbmQKKyAqCUBzY3NpZGV2OiBEZXZpY2UgdG8gd2hpY2ggd2UgYXJlIGlzc3VpbmcgY29tbWFuZAogICoJQGFyZzogVXNlciBwcm92aWRlZCBkYXRhIGZvciBpc3N1aW5nIGNvbW1hbmQKICAqCiAgKglMT0NLSU5HOgpAQCAtNDE2LDYgKzQxNiw3IEBACiAKIC8qKgogICoJYXRhX3RvX3NlbnNlX2Vycm9yIC0gY29udmVydCBBVEEgZXJyb3IgdG8gU0NTSSBlcnJvcgorICoJQGlkOiBBVEEgZGV2aWNlIG51bWJlcgogICoJQGRydl9zdGF0OiB2YWx1ZSBjb250YWluZWQgaW4gQVRBIHN0YXR1cyByZWdpc3RlcgogICoJQGRydl9lcnI6IHZhbHVlIGNvbnRhaW5lZCBpbiBBVEEgZXJyb3IgcmVnaXN0ZXIKICAqCUBzazogdGhlIHNlbnNlIGtleSB3ZSdsbCBmaWxsIG91dApAQCAtMjIzMSw3ICsyMjMyLDcgQEAKIC8qKgogICoJYXRhX3Njc2lfcGFzc190aHJ1IC0gY29udmVydCBBVEEgcGFzcy10aHJ1IENEQiB0byB0YXNrZmlsZQogICoJQHFjOiBjb21tYW5kIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAotICoJQGNtZDogU0NTSSBjb21tYW5kIHRvIGNvbnZlcnQKKyAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gY29udmVydAogICoKICAqCUhhbmRsZXMgZWl0aGVyIDEyIG9yIDE2LWJ5dGUgdmVyc2lvbnMgb2YgdGhlIENEQi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhX2NvbW1vbi5oCmluZGV4IDY5ZGYxYTkuLjhlNTQ3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhX2NvbW1vbi5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbW0uaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5oCmluZGV4IDdlMzZjNDYuLmViOGMzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKaW5kZXggNDI0NWQwNS4uODAxYTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZtZTE0Ny5jIGIvZHJpdmVycy9zY3NpL212bWUxNDcuYwppbmRleCAyZmIzMWVlLi4zMzM4MGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZtZTE0Ny5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdm1lMTQ3LmMKQEAgLTIsNyArMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZtZTE2eC5jIGIvZHJpdmVycy9zY3NpL212bWUxNnguYwppbmRleCBiMmQ4ZDhlLi4yOWVjNjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZtZTE2eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4LmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oIGIvZHJpdmVycy9zY3NpL25zcDMyLmgKaW5kZXggNTY2NDM5OC4uNWFkZGY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL25zcDMyLmgKKysrIGIvZHJpdmVycy9zY3NpL25zcDMyLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpZm5kZWYgX05TUDMyX0gKICNkZWZpbmUgX05TUDMyX0gKIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIC8vI2RlZmluZSBOU1AzMl9ERUJVRyA5CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNpMjAwMC5oIGIvZHJpdmVycy9zY3NpL3BjaTIwMDAuaAppbmRleCBjNjVhZmM5Li42Yzk2MmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNpMjAwMC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wY2kyMDAwLmgKQEAgLTI2LDkgKzI2LDYgQEAKICNpZm5kZWYJUFNJX0VJREVfU0NTSU9QCiAjZGVmaW5lCVBTSV9FSURFX1NDU0lPUAkxCiAKLSNpZm5kZWYgTElOVVhfVkVSU0lPTl9DT0RFCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2VuZGlmIAogI2RlZmluZQlMSU5VWFZFUlNJT04odixwLHMpICAgICgoKHYpPDwxNikgKyAoKHApPDw4KSArIChzKSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggYTUwNTg4Yy4uNzhiNGZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgpAQCAtMTM5LDcgKzEzOCw3IEBACiBzdGF0aWMgdm9pZCBhZG1hX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIGFkbWFfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgYWRtYV9hdGFfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYWRtYV9hdGFfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKaW5kZXggMGY0NjllMy4uOTNkNTUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTI3MCw3ICsyNzAsNyBAQAogc3RhdGljIHZvaWQgbXZfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IG12X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBtdl9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtdl9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwppbmRleCBkNTczODg4Li4zN2E0ZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKQEAgLTYyLDcgKzYyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCkBAIC0yMTksNyArMjE4LDcgQEAKIAkucmVtb3ZlCQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCiB9OwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIG52X3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG52X3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwppbmRleCBiNDFjOTc3Li45ZWRjOWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInNhdGFfcHJvbWlzZS5oIgpAQCAtOTQsNyArOTQsNyBAQAogc3RhdGljIGludCBwZGNfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHBkY19hdGFfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGRjX2F0YV9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwppbmRleCA2NTUwMmMxLi5kMjc0YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgpAQCAtMTI4LDcgKzEyNyw3IEBACiBzdGF0aWMgdm9pZCBxc19pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBxc19lbmdfdGltZW91dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBxc19hdGFfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcXNfYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKaW5kZXggNDM1ZjdlMC4uZDBlM2MzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIApAQCAtMTMxLDcgKzEzMCw3IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBzaWxfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2lsX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCmluZGV4IGU2YzhlODkuLjQ2ODJhNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLSNpbmNsdWRlICJzY3NpLmgiCisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMjU1LDcgKzI1NSw3IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLCAvKiBzYWZlPyAqLwogfTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBzaWwyNF9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzaWwyNF9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCmluZGV4IDQyMjg4YmUuLjQyZDdjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIApAQCAtODMsNyArODIsNyBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgc2lzX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNpc19zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCmluZGV4IGRiNjE1ZmYuLjk4OTVkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIApAQCAtMjg0LDcgKzI4Myw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQ19PRiAqLwogCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgazJfc2F0YV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBrMl9zYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKaW5kZXggZjg1OWJiZC4uZDVhMzg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKQEAgLTM5LDggKzM5LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAic2F0YV9wcm9taXNlLmgiCkBAIC0xNzcsNyArMTc3LDcgQEAKIHN0YXRpYyBpbnQgcGRjMjA2MjFfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHBkY19zYXRhX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBkY19zYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKaW5kZXggYTVlMjQ1Yy4uY2YwYmFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCkBAIC03MSw3ICs3MCw3IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSB1bGlfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdWxpX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKaW5kZXggYjNlY2RiZS4uYWIxOWQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtOTAsNyArODksNyBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgc3ZpYV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzdmlhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKaW5kZXggYmI4NGJhMC4uY2U4YTJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCkBAIC0yMTksNyArMjE4LDcgQEAKIH0KIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHZzY19zYXRhX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHZzY19zYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IGFhZGYwNTEuLmI2MWZiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtNDgsMTAgKzQ4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KIAotI2lmbmRlZiBMSU5VWF9WRVJTSU9OX0NPREUKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgogI2luY2x1ZGUgInNjc2lfZGVidWcuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA2MmUzZjM0Li43MmVjNTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtNjgsMTAgKzY4LDYgQEAKIHN0YXRpYyB2b2lkIHNnX3Byb2NfY2xlYW51cCh2b2lkKTsKICNlbmRpZgogCi0jaWZuZGVmIExJTlVYX1ZFUlNJT05fQ09ERQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNlbmRpZgkJCQkvKiBMSU5VWF9WRVJTSU9OX0NPREUgKi8KLQogI2RlZmluZSBTR19BTExPV19ESU9fREVGIDAKICNkZWZpbmUgU0dfQUxMT1dfRElPX0NPREUgLyogY29tcGlsZSBvdXQgYnkgY29tbWVudGluZyB0aGlzIGRlZmluZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jIGIvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwppbmRleCAwOWZkMjAzLi5mMzcxNDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggNTc1NDQ0NS4uZmQ2M2FkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC03Nyw3ICs3Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmggYi9kcml2ZXJzL3RlbGVwaG9ueS9peGouaAppbmRleCA1MWUzZjdmLi5mYmVhNDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouaAorKysgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGouaApAQCAtNDAsNyArNDAsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBJWEpfVkVSU0lPTiAzMDMxCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2l4anVzZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA5NzVhY2UzLi45MDQ1MTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKaW5kZXggMWJiNDU1Yy4uOWIyZTZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCmluZGV4IGVlOWNkNzguLjUxMGQyOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwppbmRleCAwNmI2ZWJhLi45Njg5ZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCmluZGV4IGE4MjY3Y2YuLjBlYWFiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCmluZGV4IGI3N2U2NWMuLjU1MjRmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYworKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJwd2MuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaAppbmRleCAyNjc4NjlkLi42ZGQ3NmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLmgKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaWZuZGVmIFBXQ19ICiAjZGVmaW5lIFBXQ19ICiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYwppbmRleCBmMzZjMGI2Li42NzYxMmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKaW5kZXggYzk0NmM5YS4uNDFlZjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTM3LDcgKzM3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmggYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaAppbmRleCA0MDFmZjIxLi4xZDdhNzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaApAQCAtMzcsNiArMzcsNyBAQAogI2lmbmRlZiBfU0lTVVNCX0hfCiAjZGVmaW5lIF9TSVNVU0JfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKICNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfY29uLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfY29uLmMKaW5kZXggMjQ1ODQ0Ni4uYmU1YzFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2Nvbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9jb24uYwpAQCAtNDgsNyArNDgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYwppbmRleCBmMjhiYzI0Li4wNDRmYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKQEAgLTM3LDcgKzM3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNDRiNmNhMi4uMjViNmNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtNTkzLDM4ICs1OTMsNiBAQAogCSAgZnJhbWVidWZmZXIuICBQcm9kdWN0IHNwZWNzIGF0CiAJICA8aHR0cDovL3d3dy5lcmQuZXBzb24uY29tL3ZkYy9odG1sL3Byb2R1Y3RzLmh0bT4uCiAKLWNvbmZpZyBGQl9FMTM1NgotCXRyaXN0YXRlICJFcHNvbiBTRUQxMzU2IGZyYW1lYnVmZmVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiBFWFBFUklNRU5UQUwgJiYgUENJICYmIE1JUFMKLQotY29uZmlnIFBCMTAwMF9DUlQKLQlib29sICJVc2UgQ1JUIG9uIFBiMTAwMCAoSjY1KSIKLQlkZXBlbmRzIG9uIE1JUFNfUEIxMDAwPXkgJiYgRkJfRTEzNTYKLQotY29uZmlnIFBCMTAwMF9OVFNDCi0JYm9vbCAiVXNlIENvbXBzaXRlIE5UU0Mgb24gUGIxMDAwIChKNjMpIgotCWRlcGVuZHMgb24gTUlQU19QQjEwMDA9eSAmJiBGQl9FMTM1NgotCi1jb25maWcgUEIxMDAwX1RGVAotCWJvb2wgIlVzZSBURlQgUGFuZWwgb24gUGIxMDAwIChKNjQpIgotCWRlcGVuZHMgb24gTUlQU19QQjEwMDA9eSAmJiBGQl9FMTM1NgotCi1jb25maWcgUEIxNTAwX0NSVAotCWJvb2wgIlVzZSBDUlQgb24gUGIxNTAwICIgaWYgTUlQU19QQjE1MDA9eQotCWRlcGVuZHMgb24gRkJfRTEzNTYKLQotY29uZmlnIFBCMTUwMF9DUlQKLQlwcm9tcHQgIlVzZSBDUlQgb24gUGIxMTAwICIKLQlkZXBlbmRzIG9uIEZCX0UxMzU2ICYmIE1JUFNfUEIxMTAwPXkKLQotY29uZmlnIFBCMTUwMF9URlQKLQlib29sICJVc2UgVEZUIFBhbmVsIG9uIFBiMTUwMCAiIGlmIE1JUFNfUEIxNTAwPXkKLQlkZXBlbmRzIG9uIEZCX0UxMzU2Ci0KLWNvbmZpZyBQQjE1MDBfVEZUCi0JcHJvbXB0ICJVc2UgVEZUIFBhbmVsIG9uIFBiMTEwMCAiCi0JZGVwZW5kcyBvbiBGQl9FMTM1NiAmJiBNSVBTX1BCMTEwMD15Ci0KIGNvbmZpZyBGQl9TMUQxM1hYWAogCXRyaXN0YXRlICJFcHNvbiBTMUQxM1hYWCBmcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCmluZGV4IDQ2N2ExZDcuLmEzYzJjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYwpAQCAtNTE4LDcgKzUxOCw3IEBACiAJLmlkX3RhYmxlCT0gY2xjZGZiX2lkX3RhYmxlLAogfTsKIAotaW50IF9faW5pdCBhbWJhX2NsY2RmYl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhbWJhX2NsY2RmYl9pbml0KHZvaWQpCiB7CiAJaWYgKGZiX2dldF9vcHRpb25zKCJhbWJhZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IGFjYzgxY2IuLjlkNTAxNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKaW5kZXggNDcwZTZmMC4uNjhjNjkwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKQEAgLTUsNyArNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYyBiL2RyaXZlcnMvdmlkZW8vY2ZiaW1nYmx0LmMKaW5kZXggZGE2NjRjZS4uYTc3NzBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYmltZ2JsdC5jCkBAIC04MCwxMCArODAsMTIgQEAKICNkZWZpbmUgTEVGVF9QT1MoYnBwKSAgICAgICAgICAoMzIgLSBicHApCiAjZGVmaW5lIFNISUZUX0hJR0godmFsLCBiaXRzKSAgKCh2YWwpID4+IChiaXRzKSkKICNkZWZpbmUgU0hJRlRfTE9XKHZhbCwgYml0cykgICAoKHZhbCkgPDwgKGJpdHMpKQorI2RlZmluZSBCSVRfTlIoYikgICAgICAgICAgICAgICg3IC0gKGIpKQogI2Vsc2UKICNkZWZpbmUgTEVGVF9QT1MoYnBwKSAgICAgICAgICAoMCkKICNkZWZpbmUgU0hJRlRfSElHSCh2YWwsIGJpdHMpICAoKHZhbCkgPDwgKGJpdHMpKQogI2RlZmluZSBTSElGVF9MT1codmFsLCBiaXRzKSAgICgodmFsKSA+PiAoYml0cykpCisjZGVmaW5lIEJJVF9OUihiKSAgICAgICAgICAgICAgKGIpCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbG9yX2ltYWdlYmxpdChjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCAKQEAgLTE3Nyw3ICsxNzksNyBAQAogCiAJCXdoaWxlIChqLS0pIHsKIAkJCWwtLTsKLQkJCWNvbG9yID0gKCpzICYgKDEgPDwgbCkpID8gZmdjb2xvciA6IGJnY29sb3I7CisJCQljb2xvciA9ICgqcyAmIDEgPDwgKEJJVF9OUihsKSkpID8gZmdjb2xvciA6IGJnY29sb3I7CiAJCQljb2xvciA8PD0gTEVGVF9QT1MoYnBwKTsKIAkJCXZhbCB8PSBTSElGVF9ISUdIKGNvbG9yLCBzaGlmdCk7CiAJCQkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnIGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKaW5kZXggZmFkZjdjNS4uOTRjNWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKQEAgLTEwMSw2ICsxMDEsMTYgQEAKIAloZWxwCiAJICBMb3ctbGV2ZWwgZnJhbWVidWZmZXItYmFzZWQgY29uc29sZSBkcml2ZXIuCiAKK2NvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OCisgICAgICAgYm9vbCAiRnJhbWVidWZmZXIgQ29uc29sZSBSb3RhdGlvbiIKKyAgICAgICBkZXBlbmRzIG9uIEZSQU1FQlVGRkVSX0NPTlNPTEUKKyAgICAgICBoZWxwCisgICAgICAgICBFbmFibGUgZGlzcGxheSByb3RhdGlvbiBmb3IgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUuICBUaGlzIGlzIGRvbmUKKyAgICAgICAgIGluIHNvZnR3YXJlIGFuZCBtYXkgYmUgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBhIG5vcm1hbGx5IG9yaWVudGVkCisgICAgICAgICBkaXNwbGF5LiAgTm90ZSB0aGF0IHRoZSByb3RhdGlvbiBpcyBkb25lIGF0IHRoZSBjb25zb2xlIGxldmVsIG9ubHkKKyAgICAgICAgIHN1Y2ggdGhhdCBvdGhlciB1c2VycyBvZiB0aGUgZnJhbWVidWZmZXIgd2lsbCByZW1haW4gbm9ybWFsbHkKKyAgICAgICAgIG9yaWVudGVkLgorCiBjb25maWcgU1RJX0NPTlNPTEUKICAgICAgICAgdHJpc3RhdGUgIlNUSSB0ZXh0IGNvbnNvbGUiIAogICAgICAgICBkZXBlbmRzIG9uIFBBUklTQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9jb25zb2xlL01ha2VmaWxlCmluZGV4IDUyMjI2MjguLmZlZDYwMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDEwIEBACiBpZmVxICgkKENPTkZJR19GQl9USUxFQkxJVFRJTkcpLHkpCiBvYmotJChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgICAgICs9IHRpbGVibGl0Lm8KIGVuZGlmCitpZmVxICgkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OKSx5KQorb2JqLSQoQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUpICAgICArPSBmYmNvbl9yb3RhdGUubyBmYmNvbl9jdy5vIGZiY29uX3VkLm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmNvbl9jY3cubworZW5kaWYKIAogb2JqLSQoQ09ORklHX0ZCX1NUSSkgICAgICAgICAgICAgICs9IHN0aWNvcmUubyBmb250Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKaW5kZXggNjc4NTdiMy4uZTY1ZmMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCkBAIC0yMiwzNSArMjIsNiBAQAogLyoKICAqIEFjY2VsZXJhdGVkIGhhbmRsZXJzLgogICovCi0jZGVmaW5lIEZCQ09OX0FUVFJJQlVURV9VTkRFUkxJTkUgMQotI2RlZmluZSBGQkNPTl9BVFRSSUJVVEVfUkVWRVJTRSAgIDIKLSNkZWZpbmUgRkJDT05fQVRUUklCVVRFX0JPTEQgICAgICA0Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlYWxfeShzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHlwb3MpCi17Ci0JaW50IHJvd3MgPSBwLT52cm93czsKLQotCXlwb3MgKz0gcC0+eXNjcm9sbDsKLQlyZXR1cm4geXBvcyA8IHJvd3MgPyB5cG9zIDogeXBvcyAtIHJvd3M7Ci19Ci0KLQotc3RhdGljIGlubGluZSBpbnQgZ2V0X2F0dHJpYnV0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTE2IGMpCi17Ci0JaW50IGF0dHJpYnV0ZSA9IDA7Ci0KLQlpZiAoZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpID09IDEpIHsKLQkJaWYgKGF0dHJfdW5kZXJsaW5lKGMpKQotCQkJYXR0cmlidXRlIHw9IEZCQ09OX0FUVFJJQlVURV9VTkRFUkxJTkU7Ci0JCWlmIChhdHRyX3JldmVyc2UoYykpCi0JCQlhdHRyaWJ1dGUgfD0gRkJDT05fQVRUUklCVVRFX1JFVkVSU0U7Ci0JCWlmIChhdHRyX2JvbGQoYykpCi0JCQlhdHRyaWJ1dGUgfD0gRkJDT05fQVRUUklCVVRFX0JPTEQ7Ci0JfQotCi0JcmV0dXJuIGF0dHJpYnV0ZTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCiAJCQkgICAgICAgc3RydWN0IHZjX2RhdGEgKnZjKQogewpAQCAtNDE4LDYgKzM4OSwxOCBAQAogCW9wcy0+Y3Vyc29yX3Jlc2V0ID0gMDsKIH0KIAorc3RhdGljIGludCBiaXRfdXBkYXRlX3N0YXJ0KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlpbnQgZXJyOworCisJZXJyID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJm9wcy0+dmFyKTsKKwlvcHMtPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJb3BzLT52YXIueW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworCW9wcy0+dmFyLnZtb2RlID0gaW5mby0+dmFyLnZtb2RlOworCXJldHVybiBlcnI7Cit9CisKIHZvaWQgZmJjb25fc2V0X2JpdG9wcyhzdHJ1Y3QgZmJjb25fb3BzICpvcHMpCiB7CiAJb3BzLT5ibW92ZSA9IGJpdF9ibW92ZTsKQEAgLTQyNSw2ICs0MDgsMTEgQEAKIAlvcHMtPnB1dGNzID0gYml0X3B1dGNzOwogCW9wcy0+Y2xlYXJfbWFyZ2lucyA9IGJpdF9jbGVhcl9tYXJnaW5zOwogCW9wcy0+Y3Vyc29yID0gYml0X2N1cnNvcjsKKwlvcHMtPnVwZGF0ZV9zdGFydCA9IGJpdF91cGRhdGVfc3RhcnQ7CisJb3BzLT5yb3RhdGVfZm9udCA9IE5VTEw7CisKKwlpZiAob3BzLT5yb3RhdGUpCisJCWZiY29uX3NldF9yb3RhdGUob3BzKTsKIH0KIAogRVhQT1JUX1NZTUJPTChmYmNvbl9zZXRfYml0b3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggM2NmMWI2MS4uZTc4MDJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTEwNyw2ICsxMDcsOCBAQAogfTsKIAogc3RydWN0IGRpc3BsYXkgZmJfZGlzcGxheVtNQVhfTlJfQ09OU09MRVNdOworRVhQT1JUX1NZTUJPTChmYl9kaXNwbGF5KTsKKwogc3RhdGljIHNpZ25lZCBjaGFyIGNvbjJmYl9tYXBbTUFYX05SX0NPTlNPTEVTXTsKIHN0YXRpYyBzaWduZWQgY2hhciBjb24yZmJfbWFwX2Jvb3RbTUFYX05SX0NPTlNPTEVTXTsKIHN0YXRpYyBpbnQgbG9nb19oZWlnaHQ7CkBAIC0xMzAsNiArMTMyLDkgQEAKIC8qIGN1cnJlbnQgZmJfaW5mbyAqLwogc3RhdGljIGludCBpbmZvX2lkeCA9IC0xOwogCisvKiBjb25zb2xlIHJvdGF0aW9uICovCitzdGF0aWMgaW50IHJvdGF0ZTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdyBmYl9jb247CiAKICNkZWZpbmUgQ01fU09GVEJBQ0sJKDgpCkBAIC0xNzYsNyArMTgxLDYgQEAKIC8qCiAgKiAgSW50ZXJuYWwgcm91dGluZXMKICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHJlYWxfeShzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHlwb3MpOwogc3RhdGljIF9faW5saW5lX18gdm9pZCB5d3JhcF91cChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjb3VudCk7CiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHl3cmFwX2Rvd24oc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgY291bnQpOwogc3RhdGljIF9faW5saW5lX18gdm9pZCB5cGFuX3VwKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGNvdW50KTsKQEAgLTE4OSw2ICsxOTMsOCBAQAogCQkJICAgICAgaW50IHVuaXQpOwogc3RhdGljIHZvaWQgZmJjb25fcmVkcmF3X21vdmUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZGlzcGxheSAqcCwKIAkJCSAgICAgIGludCBsaW5lLCBpbnQgY291bnQsIGludCBkeSk7CitzdGF0aWMgdm9pZCBmYmNvbl9tb2RlY2hhbmdlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgdm9pZCBmYmNvbl9zZXRfYWxsX3ZjcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKICNpZmRlZiBDT05GSUdfTUFDCiAvKgpAQCAtMjAzLDYgKzIwOSw4OCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTgorc3RhdGljIGlubGluZSB2b2lkIGZiY29uX3NldF9yb3RhdGlvbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRpc3BsYXkgKnApCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fTUlTQ19USUxFQkxJVFRJTkcpICYmCisJICAgIHAtPmNvbl9yb3RhdGUgPCA0KQorCQlvcHMtPnJvdGF0ZSA9IHAtPmNvbl9yb3RhdGU7CisJZWxzZQorCQlvcHMtPnJvdGF0ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZiY29uX3JvdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTMyIHJvdGF0ZSkKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHM9IGluZm8tPmZiY29uX3BhcjsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbzsKKworCWlmICghb3BzIHx8IG9wcy0+Y3VycmNvbiA9PSAtMSkKKwkJcmV0dXJuOworCisJZmJfaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFtvcHMtPmN1cnJjb25dXTsKKworCWlmIChpbmZvID09IGZiX2luZm8pIHsKKwkJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVtvcHMtPmN1cnJjb25dOworCisJCWlmIChyb3RhdGUgPCA0KQorCQkJcC0+Y29uX3JvdGF0ZSA9IHJvdGF0ZTsKKwkJZWxzZQorCQkJcC0+Y29uX3JvdGF0ZSA9IDA7CisKKwkJZmJjb25fbW9kZWNoYW5nZWQoaW5mbyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmYmNvbl9yb3RhdGVfYWxsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1MzIgcm90YXRlKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlzdHJ1Y3QgdmNfZGF0YSAqdmM7CisJc3RydWN0IGRpc3BsYXkgKnA7CisJaW50IGk7CisKKwlpZiAoIW9wcyB8fCBvcHMtPmN1cnJjb24gPCAwIHx8IHJvdGF0ZSA+IDMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OU09MRVM7IGkrKykgeworCQl2YyA9IHZjX2NvbnNbaV0uZDsKKwkJaWYgKCF2YyB8fCB2Yy0+dmNfbW9kZSAhPSBLRF9URVhUIHx8CisJCSAgICByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbaV1dICE9IGluZm8pCisJCQljb250aW51ZTsKKworCQlwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJCXAtPmNvbl9yb3RhdGUgPSByb3RhdGU7CisJfQorCisJZmJjb25fc2V0X2FsbF92Y3MoaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGZiY29uX3NldF9yb3RhdGlvbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRpc3BsYXkgKnApCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCisJb3BzLT5yb3RhdGUgPSBGQl9ST1RBVEVfVVI7Cit9CisKK3N0YXRpYyB2b2lkIGZiY29uX3JvdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTMyIHJvdGF0ZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZiY29uX3JvdGF0ZV9hbGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiByb3RhdGUpCit7CisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OICovCisKK3N0YXRpYyBpbnQgZmJjb25fZ2V0X3JvdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisKKwlyZXR1cm4gKG9wcykgPyBvcHMtPnJvdGF0ZSA6IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGZiY29uX2lzX2luYWN0aXZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwpAQCAtNDIyLDYgKzUxMCwxNCBAQAogCQkJCWxhc3RfZmJfdmMgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCAmb3B0aW9ucywgMTApIC0gMTsKIAkJCWZiY29uX2lzX2RlZmF1bHQgPSAwOyAKIAkJfQkKKworCQlpZiAoIXN0cm5jbXAob3B0aW9ucywgInJvdGF0ZToiLCA3KSkgeworCQkJb3B0aW9ucyArPSA3OworCQkJaWYgKCpvcHRpb25zKQorCQkJCXJvdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsICZvcHRpb25zLCAwKTsKKwkJCWlmIChyb3RhdGUgPiAzKQorCQkJCXJvdGF0ZSA9IDA7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00ODAsNiArNTc2LDcgQEAKIAkJCSAgICAgICBpbnQgY29scywgaW50IHJvd3MsIGludCBuZXdfY29scywgaW50IG5ld19yb3dzKQogewogCS8qIE5lZWQgdG8gbWFrZSByb29tIGZvciB0aGUgbG9nbyAqLworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlpbnQgY250LCBlcmFzZSA9IHZjLT52Y192aWRlb19lcmFzZV9jaGFyLCBzdGVwOwogCXVuc2lnbmVkIHNob3J0ICpzYXZlID0gTlVMTCwgKnIsICpxOwogCkBAIC00ODksNyArNTg2LDcgQEAKIAkgKi8KIAlpZiAoZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpID09IDEpCiAJCWVyYXNlICY9IH4weDQwMDsKLQlsb2dvX2hlaWdodCA9IGZiX3ByZXBhcmVfbG9nbyhpbmZvKTsKKwlsb2dvX2hlaWdodCA9IGZiX3ByZXBhcmVfbG9nbyhpbmZvLCBvcHMtPnJvdGF0ZSk7CiAJbG9nb19saW5lcyA9IChsb2dvX2hlaWdodCArIHZjLT52Y19mb250LmhlaWdodCAtIDEpIC8KIAkJdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCXEgPSAodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmlnaW4gKwpAQCAtNTU4LDE2ICs2NTUsMjQgQEAKIAogCWlmICgoaW5mby0+ZmxhZ3MgJiBGQklORk9fTUlTQ19USUxFQkxJVFRJTkcpKQogCQlmYmNvbl9zZXRfdGlsZW9wcyh2YywgaW5mbywgcCwgb3BzKTsKLQllbHNlCisJZWxzZSB7CisJCXN0cnVjdCBkaXNwbGF5ICpkaXNwOworCisJCWRpc3AgPSAocCkgPyBwIDogJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJCWZiY29uX3NldF9yb3RhdGlvbihpbmZvLCBkaXNwKTsKIAkJZmJjb25fc2V0X2JpdG9wcyhvcHMpOworCX0KIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBzZXRfYmxpdHRpbmdfdHlwZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGRpc3BsYXkgKnApCiB7CiAJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXN0cnVjdCBkaXNwbGF5ICpkaXNwOwogCiAJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1RJTEVCTElUVElORzsKKwlkaXNwID0gKHApID8gcCA6ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCWZiY29uX3NldF9yb3RhdGlvbihpbmZvLCBkaXNwKTsKIAlmYmNvbl9zZXRfYml0b3BzKG9wcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX01JU0NfVElMRUJMSVRUSU5HICovCkBAIC02MjcsNiArNzMyLDcgQEAKIAkJZmJjb25fZGVsX2N1cnNvcl90aW1lcihvbGRpbmZvKTsKIAkJa2ZyZWUob3BzLT5jdXJzb3Jfc3RhdGUubWFzayk7CiAJCWtmcmVlKG9wcy0+Y3Vyc29yX2RhdGEpOworCQlrZnJlZShvcHMtPmZvbnRidWZmZXIpOwogCQlrZnJlZShvbGRpbmZvLT5mYmNvbl9wYXIpOwogCQlvbGRpbmZvLT5mYmNvbl9wYXIgPSBOVUxMOwogCQltb2R1bGVfcHV0KG9sZGluZm8tPmZib3BzLT5vd25lcik7CkBAIC04MjcsNyArOTMzLDkgQEAKIAltZW1zZXQob3BzLCAwLCBzaXplb2Yoc3RydWN0IGZiY29uX29wcykpOwogCW9wcy0+Y3VycmNvbiA9IC0xOwogCW9wcy0+Z3JhcGhpY3MgPSAxOworCW9wcy0+Y3VyX3JvdGF0ZSA9IC0xOwogCWluZm8tPmZiY29uX3BhciA9IG9wczsKKwlwLT5jb25fcm90YXRlID0gcm90YXRlOwogCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvLCBOVUxMKTsKIAogCWlmIChpbmZvLT5maXgudHlwZSAhPSBGQl9UWVBFX1RFWFQpIHsKQEAgLTg2Niw4ICs5NzQsMTAgQEAKIAkJdmMtPnZjX2ZvbnQuY2hhcmNvdW50ID0gMjU2OyAvKiBGSVhNRSAgTmVlZCB0byBzdXBwb3J0IG1vcmUgZm9udHMgKi8KIAl9CiAKLQljb2xzID0gaW5mby0+dmFyLnhyZXMgLyB2Yy0+dmNfZm9udC53aWR0aDsKLQlyb3dzID0gaW5mby0+dmFyLnlyZXMgLyB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJY29scyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CisJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKKwlyb3dzIC89IHZjLT52Y19mb250LmhlaWdodDsKIAl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOwogCiAJRFBSSU5USygibW9kZTogICAlc1xuIiwgaW5mby0+Zml4LmlkKTsKQEAgLTk1Myw4ICsxMDYzLDYgQEAKIAkgICAgKGluZm8tPmZpeC50eXBlID09IEZCX1RZUEVfVEVYVCkpCiAJCWxvZ28gPSAwOwogCi0JaW5mby0+dmFyLnhvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOwkvKiByZXNldCB3cmFwL3BhbiAqLwotCiAJaWYgKHZhcl90b19kaXNwbGF5KHAsICZpbmZvLT52YXIsIGluZm8pKQogCQlyZXR1cm47CiAKQEAgLTk4NiwxMyArMTA5NCwxOCBAQAogCWlmICghKnZjLT52Y191bmlfcGFnZWRpcl9sb2MpCiAJCWNvbl9jb3B5X3VuaW1hcCh2Yywgc3ZjKTsKIAorCW9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlwLT5jb25fcm90YXRlID0gcm90YXRlOworCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvLCBOVUxMKTsKKwogCWNvbHMgPSB2Yy0+dmNfY29sczsKIAlyb3dzID0gdmMtPnZjX3Jvd3M7Ci0JbmV3X2NvbHMgPSBpbmZvLT52YXIueHJlcyAvIHZjLT52Y19mb250LndpZHRoOwotCW5ld19yb3dzID0gaW5mby0+dmFyLnlyZXMgLyB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJbmV3X2NvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCW5ld19yb3dzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKKwluZXdfY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKKwluZXdfcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJdmNfcmVzaXplKHZjLCBuZXdfY29scywgbmV3X3Jvd3MpOwogCi0Jb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCS8qCiAJICogV2UgbXVzdCBhbHdheXMgc2V0IHRoZSBtb2RlLiBUaGUgbW9kZSBvZiB0aGUgcHJldmlvdXMgY29uc29sZQogCSAqIGRyaXZlciBjb3VsZCBiZSBpbiB0aGUgc2FtZSByZXNvbHV0aW9uIGJ1dCB3ZSBhcmUgdXNpbmcgZGlmZmVyZW50CkBAIC0xMDMwLDYgKzExNDMsMTIgQEAKIAogCWlmICh2YyA9PSBzdmMgJiYgc29mdGJhY2tfYnVmKQogCQlmYmNvbl91cGRhdGVfc29mdGJhY2sodmMpOworCisJaWYgKG9wcy0+cm90YXRlX2ZvbnQgJiYgb3BzLT5yb3RhdGVfZm9udChpbmZvLCB2YywgcCkpIHsKKwkJb3BzLT5yb3RhdGUgPSBGQl9ST1RBVEVfVVI7CisJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvLCBwKTsKKwl9CisKIH0KIAogc3RhdGljIHZvaWQgZmJjb25fZGVpbml0KHN0cnVjdCB2Y19kYXRhICp2YykKQEAgLTEwNjYsMTUgKzExODUsNiBAQAogICogIHJlc3RyaWN0aW9uIGlzIHNpbXBsaWNpdHkgJiBlZmZpY2llbmN5IGF0IHRoZSBtb21lbnQuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gaW50IHJlYWxfeShzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHlwb3MpCi17Ci0JaW50IHJvd3MgPSBwLT52cm93czsKLQotCXlwb3MgKz0gcC0+eXNjcm9sbDsKLQlyZXR1cm4geXBvcyA8IHJvd3MgPyB5cG9zIDogeXBvcyAtIHJvd3M7Ci19Ci0KLQogc3RhdGljIHZvaWQgZmJjb25fY2xlYXIoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgc3ksIGludCBzeCwgaW50IGhlaWdodCwKIAkJCWludCB3aWR0aCkKIHsKQEAgLTExNjIsMTMgKzEyNzIsNiBAQAogc3RhdGljIGludCBzY3JvbGxiYWNrX21heCA9IDA7CiBzdGF0aWMgaW50IHNjcm9sbGJhY2tfY3VycmVudCA9IDA7CiAKLXN0YXRpYyBpbnQgdXBkYXRlX3ZhcihpbnQgY29uLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlpZiAoY29uID09ICgoc3RydWN0IGZiY29uX29wcyAqKWluZm8tPmZiY29uX3BhciktPmN1cnJjb24pCi0JCXJldHVybiBmYl9wYW5fZGlzcGxheShpbmZvLCAmaW5mby0+dmFyKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIElmIG5vIHZjIGlzIGV4aXN0ZW50IHlldCwganVzdCBzZXQgc3RydWN0IGRpc3BsYXkKICAqLwpAQCAtMTE3OCw3ICsxMjgxLDYgQEAKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3VuaXRdOwogCXN0cnVjdCBkaXNwbGF5ICp0ID0gJmZiX2Rpc3BsYXlbZmdfY29uc29sZV07CiAKLQl2YXItPnhvZmZzZXQgPSB2YXItPnlvZmZzZXQgPSBwLT55c2Nyb2xsID0gMDsKIAlpZiAodmFyX3RvX2Rpc3BsYXkocCwgdmFyLCBpbmZvKSkKIAkJcmV0dXJuOwogCkBAIC0xMTk0LDkgKzEyOTYsOSBAQAogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV0sICp0OwogCXN0cnVjdCB2Y19kYXRhICoqZGVmYXVsdF9tb2RlID0gdmMtPnZjX2Rpc3BsYXlfZmc7CiAJc3RydWN0IHZjX2RhdGEgKnN2YyA9ICpkZWZhdWx0X21vZGU7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCWludCByb3dzLCBjb2xzLCBjaGFyY250ID0gMjU2OwogCi0JdmFyLT54b2Zmc2V0ID0gdmFyLT55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CiAJaWYgKHZhcl90b19kaXNwbGF5KHAsIHZhciwgaW5mbykpCiAJCXJldHVybjsKIAl0ID0gJmZiX2Rpc3BsYXlbc3ZjLT52Y19udW1dOwpAQCAtMTIxMyw5ICsxMzE1LDEwIEBACiAKIAl2YXItPmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCWluZm8tPnZhci5hY3RpdmF0ZSA9IHZhci0+YWN0aXZhdGU7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSBpbmZvLT52YXIueG9mZnNldCA9IDA7CisJdmFyLT55b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQ7CisJdmFyLT54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CiAJZmJfc2V0X3ZhcihpbmZvLCB2YXIpOwotCisJb3BzLT52YXIgPSBpbmZvLT52YXI7CiAJdmMtPnZjX2Nhbl9kb19jb2xvciA9IChmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCkhPTEpOwogCXZjLT52Y19jb21wbGVtZW50X21hc2sgPSB2Yy0+dmNfY2FuX2RvX2NvbG9yID8gMHg3NzAwIDogMHgwODAwOwogCWlmIChjaGFyY250ID09IDI1NikgewpAQCAtMTIzMSw5ICsxMzM0LDEyIEBACiAJaWYgKCEqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYykKIAkJY29uX2NvcHlfdW5pbWFwKHZjLCBzdmMpOwogCi0JY29scyA9IHZhci0+eHJlcyAvIHZjLT52Y19mb250LndpZHRoOwotCXJvd3MgPSB2YXItPnlyZXMgLyB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJY29scyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CisJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKKwlyb3dzIC89IHZjLT52Y19mb250LmhlaWdodDsKIAl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOworCiAJaWYgKENPTl9JU19WSVNJQkxFKHZjKSkgewogCQl1cGRhdGVfc2NyZWVuKHZjKTsKIAkJaWYgKHNvZnRiYWNrX2J1ZikKQEAgLTEyNDQsMTUgKzEzNTAsMTYgQEAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXdyYXBfdXAoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCQogCXAtPnlzY3JvbGwgKz0gY291bnQ7CiAJaWYgKHAtPnlzY3JvbGwgPj0gcC0+dnJvd3MpCS8qIERlYWwgd2l0aCB3cmFwICovCiAJCXAtPnlzY3JvbGwgLT0gcC0+dnJvd3M7Ci0JaW5mby0+dmFyLnhvZmZzZXQgPSAwOwotCWluZm8tPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKLQlpbmZvLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7Ci0JdXBkYXRlX3Zhcih2Yy0+dmNfbnVtLCBpbmZvKTsKKwlvcHMtPnZhci54b2Zmc2V0ID0gMDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlvcHMtPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsKKwlvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsKIAlzY3JvbGxiYWNrX21heCArPSBjb3VudDsKIAlpZiAoc2Nyb2xsYmFja19tYXggPiBzY3JvbGxiYWNrX3BoeXNfbWF4KQogCQlzY3JvbGxiYWNrX21heCA9IHNjcm9sbGJhY2tfcGh5c19tYXg7CkBAIC0xMjYyLDE1ICsxMzY5LDE2IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHl3cmFwX2Rvd24oc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCQogCXAtPnlzY3JvbGwgLT0gY291bnQ7CiAJaWYgKHAtPnlzY3JvbGwgPCAwKQkvKiBEZWFsIHdpdGggd3JhcCAqLwogCQlwLT55c2Nyb2xsICs9IHAtPnZyb3dzOwotCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7Ci0JaW5mby0+dmFyLnZtb2RlIHw9IEZCX1ZNT0RFX1lXUkFQOwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisJb3BzLT52YXIueG9mZnNldCA9IDA7CisJb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJb3BzLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJc2Nyb2xsYmFja19tYXggLT0gY291bnQ7CiAJaWYgKHNjcm9sbGJhY2tfbWF4IDwgMCkKIAkJc2Nyb2xsYmFja19tYXggPSAwOwpAQCAtMTI4OSwxMCArMTM5NywxMSBAQAogCQkJICAgIDAsIDAsIDAsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scyk7CiAJCXAtPnlzY3JvbGwgLT0gcC0+dnJvd3MgLSB2Yy0+dmNfcm93czsKIAl9Ci0JaW5mby0+dmFyLnhvZmZzZXQgPSAwOwotCWluZm8tPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKLQlpbmZvLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisKKwlvcHMtPnZhci54b2Zmc2V0ID0gMDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlvcHMtPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJZmJjb25fY2xlYXJfbWFyZ2lucyh2YywgMSk7CiAJc2Nyb2xsYmFja19tYXggKz0gY291bnQ7CiAJaWYgKHNjcm9sbGJhY2tfbWF4ID4gc2Nyb2xsYmFja19waHlzX21heCkKQEAgLTEzMDMsNiArMTQxMiw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHlwYW5fdXBfcmVkcmF3KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHQsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJaW50IHJlZHJhdyA9IDA7CiAKQEAgLTEzMTIsMTIgKzE0MjIsMTMgQEAKIAkJcmVkcmF3ID0gMTsKIAl9CiAKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsICogdmMtPnZjX2ZvbnQuaGVpZ2h0OwotCWluZm8tPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CiAJaWYgKHJlZHJhdykKIAkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIHQgKyBjb3VudCwgdmMtPnZjX3Jvd3MgLSBjb3VudCwgdCk7Ci0JdXBkYXRlX3Zhcih2Yy0+dmNfbnVtLCBpbmZvKTsKKworCW9wcy0+dmFyLnhvZmZzZXQgPSAwOworCW9wcy0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCW9wcy0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsKKwlvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsKIAlmYmNvbl9jbGVhcl9tYXJnaW5zKHZjLCAxKTsKIAlzY3JvbGxiYWNrX21heCArPSBjb3VudDsKIAlpZiAoc2Nyb2xsYmFja19tYXggPiBzY3JvbGxiYWNrX3BoeXNfbWF4KQpAQCAtMTMzNywxMCArMTQ0OCwxMSBAQAogCQkJICAgIDAsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scyk7CiAJCXAtPnlzY3JvbGwgKz0gcC0+dnJvd3MgLSB2Yy0+dmNfcm93czsKIAl9Ci0JaW5mby0+dmFyLnhvZmZzZXQgPSAwOwotCWluZm8tPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKLQlpbmZvLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisKKwlvcHMtPnZhci54b2Zmc2V0ID0gMDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlvcHMtPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJZmJjb25fY2xlYXJfbWFyZ2lucyh2YywgMSk7CiAJc2Nyb2xsYmFja19tYXggLT0gY291bnQ7CiAJaWYgKHNjcm9sbGJhY2tfbWF4IDwgMCkKQEAgLTEzNTEsNiArMTQ2Myw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHlwYW5fZG93bl9yZWRyYXcoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdCwgaW50IGNvdW50KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAlpbnQgcmVkcmF3ID0gMDsKIApAQCAtMTM1OSwxMiArMTQ3MiwxNCBAQAogCQlwLT55c2Nyb2xsICs9IHAtPnZyb3dzIC0gdmMtPnZjX3Jvd3M7CiAJCXJlZHJhdyA9IDE7CiAJfQotCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7Ci0JaW5mby0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsKKwogCWlmIChyZWRyYXcpCiAJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCB0LCB2Yy0+dmNfcm93cyAtIGNvdW50LCB0ICsgY291bnQpOwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisKKwlvcHMtPnZhci54b2Zmc2V0ID0gMDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlvcHMtPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJZmJjb25fY2xlYXJfbWFyZ2lucyh2YywgMSk7CiAJc2Nyb2xsYmFja19tYXggLT0gY291bnQ7CiAJaWYgKHNjcm9sbGJhY2tfbWF4IDwgMCkKQEAgLTE4MzgsMzEgKzE5NTMsNDEgQEAKIAkJICAgaGVpZ2h0LCB3aWR0aCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdXBkYXRlc2Nyb2xsbW9kZShzdHJ1Y3QgZGlzcGxheSAqcCwgc3RydWN0IGZiX2luZm8gKmluZm8sCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVwZGF0ZXNjcm9sbG1vZGUoc3RydWN0IGRpc3BsYXkgKnAsCisJCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvLAogCQkJCQlzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCWludCBmaCA9IHZjLT52Y19mb250LmhlaWdodDsKIAlpbnQgY2FwID0gaW5mby0+ZmxhZ3M7Ci0JaW50IGdvb2RfcGFuID0gKGNhcCAmIEZCSU5GT19IV0FDQ0VMX1lQQU4pCi0JCSAmJiBkaXZpZGVzKGluZm8tPmZpeC55cGFuc3RlcCwgdmMtPnZjX2ZvbnQuaGVpZ2h0KQotCQkgJiYgaW5mby0+dmFyLnlyZXNfdmlydHVhbCA+IGluZm8tPnZhci55cmVzOwotCWludCBnb29kX3dyYXAgPSAoY2FwICYgRkJJTkZPX0hXQUNDRUxfWVdSQVApCi0JCSAmJiBkaXZpZGVzKGluZm8tPmZpeC55d3JhcHN0ZXAsIHZjLT52Y19mb250LmhlaWdodCkKLQkJICYmIGRpdmlkZXModmMtPnZjX2ZvbnQuaGVpZ2h0LCBpbmZvLT52YXIueXJlc192aXJ0dWFsKTsKKwl1MTYgdCA9IDA7CisJaW50IHlwYW4gPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT5maXgueXBhbnN0ZXAsCisJCQkJICBpbmZvLT5maXgueHBhbnN0ZXApOworCWludCB5d3JhcCA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPmZpeC55d3JhcHN0ZXAsIHQpOworCWludCB5cmVzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKKwlpbnQgdnlyZXMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueXJlc192aXJ0dWFsLAorCQkJCSAgIGluZm8tPnZhci54cmVzX3ZpcnR1YWwpOworCWludCBnb29kX3BhbiA9IChjYXAgJiBGQklORk9fSFdBQ0NFTF9ZUEFOKSAmJgorCQlkaXZpZGVzKHlwYW4sIHZjLT52Y19mb250LmhlaWdodCkgJiYgdnlyZXMgPiB5cmVzOworCWludCBnb29kX3dyYXAgPSAoY2FwICYgRkJJTkZPX0hXQUNDRUxfWVdSQVApICYmCisJCWRpdmlkZXMoeXdyYXAsIHZjLT52Y19mb250LmhlaWdodCkgJiYKKwkJZGl2aWRlcyh2Yy0+dmNfZm9udC5oZWlnaHQsIHZ5cmVzKTsKIAlpbnQgcmVhZGluZ19mYXN0ID0gY2FwICYgRkJJTkZPX1JFQURTX0ZBU1Q7Ci0JaW50IGZhc3RfY29weWFyZWEgPSAoY2FwICYgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEpICYmICEoY2FwICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpOwotCWludCBmYXN0X2ltYWdlYmxpdCA9IChjYXAgJiBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQpICYmICEoY2FwICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpOworCWludCBmYXN0X2NvcHlhcmVhID0gKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBKSAmJgorCQkhKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKTsKKwlpbnQgZmFzdF9pbWFnZWJsaXQgPSAoY2FwICYgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUKSAmJgorCQkhKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKTsKIAotCXAtPnZyb3dzID0gaW5mby0+dmFyLnlyZXNfdmlydHVhbC9maDsKLQlpZiAoaW5mby0+dmFyLnlyZXMgPiAoZmggKiAodmMtPnZjX3Jvd3MgKyAxKSkpCi0JCXAtPnZyb3dzIC09IChpbmZvLT52YXIueXJlcyAtIChmaCAqIHZjLT52Y19yb3dzKSkgLyBmaDsKLQlpZiAoKGluZm8tPnZhci55cmVzICUgZmgpICYmIChpbmZvLT52YXIueXJlc192aXJ0dWFsICUgZmggPAotCQkJCSAgICAgIGluZm8tPnZhci55cmVzICUgZmgpKQorCXAtPnZyb3dzID0gdnlyZXMvZmg7CisJaWYgKHlyZXMgPiAoZmggKiAodmMtPnZjX3Jvd3MgKyAxKSkpCisJCXAtPnZyb3dzIC09ICh5cmVzIC0gKGZoICogdmMtPnZjX3Jvd3MpKSAvIGZoOworCWlmICgoeXJlcyAlIGZoKSAmJiAodnlyZXMgJSBmaCA8IHlyZXMgJSBmaCkpCiAJCXAtPnZyb3dzLS07CiAKIAlpZiAoZ29vZF93cmFwIHx8IGdvb2RfcGFuKSB7CiAJCWlmIChyZWFkaW5nX2Zhc3QgfHwgZmFzdF9jb3B5YXJlYSkKLQkJCXAtPnNjcm9sbG1vZGUgPSBnb29kX3dyYXAgPyBTQ1JPTExfV1JBUF9NT1ZFIDogU0NST0xMX1BBTl9NT1ZFOworCQkJcC0+c2Nyb2xsbW9kZSA9IGdvb2Rfd3JhcCA/CisJCQkJU0NST0xMX1dSQVBfTU9WRSA6IFNDUk9MTF9QQU5fTU9WRTsKIAkJZWxzZQogCQkJcC0+c2Nyb2xsbW9kZSA9IGdvb2Rfd3JhcCA/IFNDUk9MTF9SRURSQVcgOgogCQkJCVNDUk9MTF9QQU5fUkVEUkFXOwpAQCAtMTg3OCwxNyArMjAwMywyMyBAQAogCQkJdW5zaWduZWQgaW50IGhlaWdodCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhciA9IGluZm8tPnZhcjsKLQlpbnQgeF9kaWZmLCB5X2RpZmY7Ci0JaW50IGZ3ID0gdmMtPnZjX2ZvbnQud2lkdGg7Ci0JaW50IGZoID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWludCB4X2RpZmYsIHlfZGlmZiwgdmlydF93LCB2aXJ0X2gsIHZpcnRfZncsIHZpcnRfZmg7CiAKLQl2YXIueHJlcyA9IHdpZHRoICogZnc7Ci0JdmFyLnlyZXMgPSBoZWlnaHQgKiBmaDsKKwl2aXJ0X3cgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCB3aWR0aCwgaGVpZ2h0KTsKKwl2aXJ0X2ggPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBoZWlnaHQsIHdpZHRoKTsKKwl2aXJ0X2Z3ID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgdmMtPnZjX2ZvbnQud2lkdGgsCisJCQkJIHZjLT52Y19mb250LmhlaWdodCk7CisJdmlydF9maCA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIHZjLT52Y19mb250LmhlaWdodCwKKwkJCQkgdmMtPnZjX2ZvbnQud2lkdGgpOworCXZhci54cmVzID0gdmlydF93ICogdmlydF9mdzsKKwl2YXIueXJlcyA9IHZpcnRfaCAqIHZpcnRfZmg7CiAJeF9kaWZmID0gaW5mby0+dmFyLnhyZXMgLSB2YXIueHJlczsKIAl5X2RpZmYgPSBpbmZvLT52YXIueXJlcyAtIHZhci55cmVzOwotCWlmICh4X2RpZmYgPCAwIHx8IHhfZGlmZiA+IGZ3IHx8ICh5X2RpZmYgPCAwIHx8IHlfZGlmZiA+IGZoKSkgeworCWlmICh4X2RpZmYgPCAwIHx8IHhfZGlmZiA+IHZpcnRfZncgfHwKKwkgICAgeV9kaWZmIDwgMCB8fCB5X2RpZmYgPiB2aXJ0X2ZoKSB7CiAJCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CiAKIAkJRFBSSU5USygiYXR0ZW1wdGluZyByZXNpemUgJWl4JWlcbiIsIHZhci54cmVzLCB2YXIueXJlcyk7CkBAIC0xODk4LDcgKzIwMjksNyBAQAogCQlkaXNwbGF5X3RvX3ZhcigmdmFyLCBwKTsKIAkJZmJfdmlkZW9tb2RlX3RvX3ZhcigmdmFyLCBtb2RlKTsKIAotCQlpZiAod2lkdGggPiB2YXIueHJlcy9mdyB8fCBoZWlnaHQgPiB2YXIueXJlcy9maCkKKwkJaWYgKHZpcnRfdyA+IHZhci54cmVzL3ZpcnRfZncgfHwgdmlydF9oID4gdmFyLnlyZXMvdmlydF9maCkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCURQUklOVEsoInJlc2l6ZSBub3cgJWl4JWlcbiIsIHZhci54cmVzLCB2YXIueXJlcyk7CkBAIC0xOTA4LDYgKzIwMzksNyBAQAogCQkJZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJfQogCQl2YXJfdG9fZGlzcGxheShwLCAmaW5mby0+dmFyLCBpbmZvKTsKKwkJb3BzLT52YXIgPSBpbmZvLT52YXI7CiAJfQogCXVwZGF0ZXNjcm9sbG1vZGUocCwgaW5mbywgdmMpOwogCXJldHVybiAwOwpAQCAtMTkxNiwxMSArMjA0OCwxMyBAQAogc3RhdGljIGludCBmYmNvbl9zd2l0Y2goc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvLCAqb2xkX2luZm8gPSBOVUxMOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wczsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7CiAJaW50IGksIHByZXZfY29uc29sZTsKIAogCWluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOworCW9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAogCWlmIChzb2Z0YmFja190b3ApIHsKIAkJaWYgKHNvZnRiYWNrX2xpbmVzKQpAQCAtMTkzOSw3ICsyMDczLDcgQEAKIAkJbG9nb19zaG93biA9IEZCQ09OX0xPR09fQ0FOU0hPVzsKIAl9CiAKLQlwcmV2X2NvbnNvbGUgPSAoKHN0cnVjdCBmYmNvbl9vcHMgKilpbmZvLT5mYmNvbl9wYXIpLT5jdXJyY29uOworCXByZXZfY29uc29sZSA9IG9wcy0+Y3VycmNvbjsKIAlpZiAocHJldl9jb25zb2xlICE9IC0xKQogCQlvbGRfaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFtwcmV2X2NvbnNvbGVdXTsKIAkvKgpAQCAtMTk1Miw5ICsyMDg2LDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgRkJfTUFYOyBpKyspIHsKIAkJaWYgKHJlZ2lzdGVyZWRfZmJbaV0gIT0gTlVMTCAmJiByZWdpc3RlcmVkX2ZiW2ldLT5mYmNvbl9wYXIpIHsKLQkJCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IHJlZ2lzdGVyZWRfZmJbaV0tPmZiY29uX3BhcjsKKwkJCXN0cnVjdCBmYmNvbl9vcHMgKm8gPSByZWdpc3RlcmVkX2ZiW2ldLT5mYmNvbl9wYXI7CiAKLQkJCW9wcy0+Y3VycmNvbiA9IHZjLT52Y19udW07CisJCQlvLT5jdXJyY29uID0gdmMtPnZjX251bTsKIAkJfQogCX0KIAltZW1zZXQoJnZhciwgMCwgc2l6ZW9mKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbykpOwpAQCAtMTk2Niw4ICsyMTAwLDExIEBACiAJICogaW4gZmJfc2V0X3ZhcigpCiAJICovCiAJaW5mby0+dmFyLmFjdGl2YXRlID0gdmFyLmFjdGl2YXRlOwotCWluZm8tPnZhci55b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQgPSBwLT55c2Nyb2xsID0gMDsKKwl2YXIueW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworCXZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJdmFyLnZtb2RlID0gaW5mby0+dmFyLnZtb2RlOwogCWZiX3NldF92YXIoaW5mbywgJnZhcik7CisJb3BzLT52YXIgPSBpbmZvLT52YXI7CiAKIAlpZiAob2xkX2luZm8gIT0gTlVMTCAmJiBvbGRfaW5mbyAhPSBpbmZvKSB7CiAJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcikKQEAgLTE5NzcsNyArMjExNCwxMiBAQAogCX0KIAogCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvLCBwKTsKLQkoKHN0cnVjdCBmYmNvbl9vcHMgKilpbmZvLT5mYmNvbl9wYXIpLT5jdXJzb3JfcmVzZXQgPSAxOworCW9wcy0+Y3Vyc29yX3Jlc2V0ID0gMTsKKworCWlmIChvcHMtPnJvdGF0ZV9mb250ICYmIG9wcy0+cm90YXRlX2ZvbnQoaW5mbywgdmMsIHApKSB7CisJCW9wcy0+cm90YXRlID0gRkJfUk9UQVRFX1VSOworCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgcCk7CisJfQogCiAJdmMtPnZjX2Nhbl9kb19jb2xvciA9IChmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCkhPTEpOwogCXZjLT52Y19jb21wbGVtZW50X21hc2sgPSB2Yy0+dmNfY2FuX2RvX2NvbG9yID8gMHg3NzAwIDogMHgwODAwOwpAQCAtMTk5NywxMCArMjEzOSwxMSBAQAogCQlzY3JvbGxiYWNrX3BoeXNfbWF4ID0gMDsKIAkJYnJlYWs7CiAJfQorCiAJc2Nyb2xsYmFja19tYXggPSAwOwogCXNjcm9sbGJhY2tfY3VycmVudCA9IDA7Ci0KLQl1cGRhdGVfdmFyKHZjLT52Y19udW0sIGluZm8pOworCW9wcy0+dmFyLnhvZmZzZXQgPSBvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJZmJjb25fc2V0X3BhbGV0dGUodmMsIGNvbG9yX3RhYmxlKTsgCQogCWZiY29uX2NsZWFyX21hcmdpbnModmMsIDApOwogCkBAIC0yMDA4LDcgKzIxNTEsNyBAQAogCiAJCWxvZ29fc2hvd24gPSBmZ19jb25zb2xlOwogCQkvKiBUaGlzIGlzIHByb3RlY3RlZCBhYm92ZSBieSBpbml0bWVtX2ZyZWVkICovCi0JCWZiX3Nob3dfbG9nbyhpbmZvKTsKKwkJZmJfc2hvd19sb2dvKGluZm8sIG9wcy0+cm90YXRlKTsKIAkJdXBkYXRlX3JlZ2lvbih2YywKIAkJCSAgICAgIHZjLT52Y19vcmlnaW4gKyB2Yy0+dmNfc2l6ZV9yb3cgKiB2Yy0+dmNfdG9wLAogCQkJICAgICAgdmMtPnZjX3NpemVfcm93ICogKHZjLT52Y19ib3R0b20gLQpAQCAtMjA0Nyw2ICsyMTkwLDcgQEAKIAkJCXZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVyB8IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCW9wcy0+Z3JhcGhpY3MgPSAwOworCQkJb3BzLT52YXIgPSBpbmZvLT52YXI7CiAJCX0KIAl9CiAKQEAgLTIxMzUsNiArMjI3OSw3IEBACiAJCQkgICAgIGNvbnN0IHU4ICogZGF0YSwgaW50IHVzZXJmb250KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAlpbnQgcmVzaXplOwogCWludCBjbnQ7CkBAIC0yMjE0LDkgKzIzNTksMTMgQEAKIAl9CiAKIAlpZiAocmVzaXplKSB7Ci0JCS8qIHJlc2V0IHdyYXAvcGFuICovCi0JCWluZm8tPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsID0gMDsKLQkJdmNfcmVzaXplKHZjLCBpbmZvLT52YXIueHJlcyAvIHcsIGluZm8tPnZhci55cmVzIC8gaCk7CisJCWludCBjb2xzLCByb3dzOworCisJCWNvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCQlyb3dzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKKwkJY29scyAvPSB3OworCQlyb3dzIC89IGg7CisJCXZjX3Jlc2l6ZSh2YywgY29scywgcm93cyk7CiAJCWlmIChDT05fSVNfVklTSUJMRSh2YykgJiYgc29mdGJhY2tfYnVmKQogCQkJZmJjb25fdXBkYXRlX3NvZnRiYWNrKHZjKTsKIAl9IGVsc2UgaWYgKENPTl9JU19WSVNJQkxFKHZjKQpAQCAtMjQ0NCw2ICsyNTkzLDcgQEAKIHN0YXRpYyBpbnQgZmJjb25fc2Nyb2xsZGVsdGEoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgbGluZXMpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbZmdfY29uc29sZV1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W2ZnX2NvbnNvbGVdOwogCWludCBvZmZzZXQsIGxpbWl0LCBzY3JvbGxiYWNrX29sZDsKIApAQCAtMjUyMCw5ICsyNjcwLDExIEBACiAJCW9mZnNldCArPSBsaW1pdDsKIAllbHNlIGlmIChvZmZzZXQgPj0gbGltaXQpCiAJCW9mZnNldCAtPSBsaW1pdDsKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSBvZmZzZXQgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7Ci0JdXBkYXRlX3Zhcih2Yy0+dmNfbnVtLCBpbmZvKTsKKworCW9wcy0+dmFyLnhvZmZzZXQgPSAwOworCW9wcy0+dmFyLnlvZmZzZXQgPSBvZmZzZXQgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CisKIAlpZiAoIXNjcm9sbGJhY2tfY3VycmVudCkKIAkJZmJjb25fY3Vyc29yKHZjLCBDTV9EUkFXKTsKIAlyZXR1cm4gMDsKQEAgLTI1NzAsMjIgKzI3MjIsMjUgQEAKIAlpZiAoIW9wcyB8fCBvcHMtPmN1cnJjb24gPCAwKQogCQlyZXR1cm47CiAJdmMgPSB2Y19jb25zW29wcy0+Y3VycmNvbl0uZDsKLQlpZiAodmMtPnZjX21vZGUgIT0gS0RfVEVYVCB8fCByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbb3BzLT5jdXJyY29uXV0gIT0gaW5mbykKKwlpZiAodmMtPnZjX21vZGUgIT0gS0RfVEVYVCB8fAorCSAgICByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbb3BzLT5jdXJyY29uXV0gIT0gaW5mbykKIAkJcmV0dXJuOwogCiAJcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwotCi0JaW5mby0+dmFyLnhvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOworCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvLCBwKTsKIAogCWlmIChDT05fSVNfVklTSUJMRSh2YykpIHsKIAkJdmFyX3RvX2Rpc3BsYXkocCwgJmluZm8tPnZhciwgaW5mbyk7Ci0JCWNvbHMgPSBpbmZvLT52YXIueHJlcyAvIHZjLT52Y19mb250LndpZHRoOwotCQlyb3dzID0gaW5mby0+dmFyLnlyZXMgLyB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJCWNvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCQlyb3dzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKKwkJY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKKwkJcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJCXZjX3Jlc2l6ZSh2YywgY29scywgcm93cyk7CiAJCXVwZGF0ZXNjcm9sbG1vZGUocCwgaW5mbywgdmMpOwogCQlzY3JvbGxiYWNrX21heCA9IDA7CiAJCXNjcm9sbGJhY2tfY3VycmVudCA9IDA7Ci0JCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisJCW9wcy0+dmFyLnhvZmZzZXQgPSBvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CisJCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOwogCQlmYmNvbl9zZXRfcGFsZXR0ZSh2YywgY29sb3JfdGFibGUpOwogCQl1cGRhdGVfc2NyZWVuKHZjKTsKIAkJaWYgKHNvZnRiYWNrX2J1ZikKQEAgLTI2MTAsMTggKzI3NjUsMjAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKLQotCQlpbmZvLT52YXIueG9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CisJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvLCBwKTsKIAkJdmFyX3RvX2Rpc3BsYXkocCwgJmluZm8tPnZhciwgaW5mbyk7Ci0JCWNvbHMgPSBpbmZvLT52YXIueHJlcyAvIHZjLT52Y19mb250LndpZHRoOwotCQlyb3dzID0gaW5mby0+dmFyLnlyZXMgLyB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJCWNvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCQlyb3dzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKKwkJY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKKwkJcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJCXZjX3Jlc2l6ZSh2YywgY29scywgcm93cyk7CiAKIAkJaWYgKENPTl9JU19WSVNJQkxFKHZjKSkgewogCQkJdXBkYXRlc2Nyb2xsbW9kZShwLCBpbmZvLCB2Yyk7CiAJCQlzY3JvbGxiYWNrX21heCA9IDA7CiAJCQlzY3JvbGxiYWNrX2N1cnJlbnQgPSAwOwotCQkJdXBkYXRlX3Zhcih2Yy0+dmNfbnVtLCBpbmZvKTsKKwkJCW9wcy0+dmFyLnhvZmZzZXQgPSBvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CisJCQlvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsKIAkJCWZiY29uX3NldF9wYWxldHRlKHZjLCBjb2xvcl90YWJsZSk7CiAJCQl1cGRhdGVfc2NyZWVuKHZjKTsKIAkJCWlmIChzb2Z0YmFja19idWYpCkBAIC0yNzcxLDYgKzI5MjgsMTQgQEAKIAljYXNlIEZCX0VWRU5UX05FV19NT0RFTElTVDoKIAkJZmJjb25fbmV3X21vZGVsaXN0KGluZm8pOwogCQlicmVhazsKKwljYXNlIEZCX0VWRU5UX1NFVF9DT05fUk9UQVRFOgorCQlmYmNvbl9yb3RhdGUoaW5mbywgKihpbnQgKilldmVudC0+ZGF0YSk7CisJCWJyZWFrOworCWNhc2UgRkJfRVZFTlRfR0VUX0NPTl9ST1RBVEU6CisJCXJldCA9IGZiY29uX2dldF9yb3RhdGUoaW5mbyk7CisJCWJyZWFrOworCWNhc2UgRkJfRVZFTlRfU0VUX0NPTl9ST1RBVEVfQUxMOgorCQlmYmNvbl9yb3RhdGVfYWxsKGluZm8sICooaW50ICopZXZlbnQtPmRhdGEpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaCBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5oCmluZGV4IGI2OGUwZTIuLmFjY2ZkN2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaApAQCAtMjcsMTUgKzI3LDE1IEBACiAgICAgKi8KIAogc3RydWN0IGRpc3BsYXkgewotICAgIC8qIEZpbGxlZCBpbiBieSB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSAqLwotICAgIHVfc2hvcnQgaW52ZXJzZTsgICAgICAgICAgICAgICAgLyogIT0gMCB0ZXh0IGJsYWNrIG9uIHdoaXRlIGFzIGRlZmF1bHQgKi8KICAgICAvKiBGaWxsZWQgaW4gYnkgdGhlIGxvdy1sZXZlbCBjb25zb2xlIGRyaXZlciAqLwogICAgIGNvbnN0IHVfY2hhciAqZm9udGRhdGE7CiAgICAgaW50IHVzZXJmb250OyAgICAgICAgICAgICAgICAgICAvKiAhPSAwIGlmIGZvbnRkYXRhIGttYWxsb2MoKWVkICovCiAgICAgdV9zaG9ydCBzY3JvbGxtb2RlOyAgICAgICAgICAgICAvKiBTY3JvbGwgTWV0aG9kICovCisgICAgdV9zaG9ydCBpbnZlcnNlOyAgICAgICAgICAgICAgICAvKiAhPSAwIHRleHQgYmxhY2sgb24gd2hpdGUgYXMgZGVmYXVsdCAqLwogICAgIHNob3J0IHlzY3JvbGw7ICAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgc2Nyb2xsaW5nICovCiAgICAgaW50IHZyb3dzOyAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdmlydHVhbCByb3dzICovCiAgICAgaW50IGN1cnNvcl9zaGFwZTsKKyAgICBpbnQgY29uX3JvdGF0ZTsKICAgICB1MzIgeHJlc192aXJ0dWFsOwogICAgIHUzMiB5cmVzX3ZpcnR1YWw7CiAgICAgdTMyIGhlaWdodDsKQEAgLTUyLDYgKzUyLDggQEAKICAgICBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOwogfTsKIAorZXh0ZXJuIHN0cnVjdCBkaXNwbGF5IGZiX2Rpc3BsYXlbXTsKKwogc3RydWN0IGZiY29uX29wcyB7CiAJdm9pZCAoKmJtb3ZlKShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksCiAJCSAgICAgIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCk7CkBAIC02Myw4ICs2NSwxMiBAQAogCXZvaWQgKCpjbGVhcl9tYXJnaW5zKShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAogCQkJICAgICAgaW50IGJvdHRvbV9vbmx5KTsKIAl2b2lkICgqY3Vyc29yKShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkgICAgICAgc3RydWN0IGRpc3BsYXkgKnAsIGludCBtb2RlLCBpbnQgc29mdGJhY2tfbGluZXMsIGludCBmZywgaW50IGJnKTsKLQorCQkgICAgICAgc3RydWN0IGRpc3BsYXkgKnAsIGludCBtb2RlLCBpbnQgc29mdGJhY2tfbGluZXMsCisJCSAgICAgICBpbnQgZmcsIGludCBiZyk7CisJaW50ICAoKnVwZGF0ZV9zdGFydCkoc3RydWN0IGZiX2luZm8gKmluZm8pOworCWludCAgKCpyb3RhdGVfZm9udCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YywKKwkJCSAgICBzdHJ1Y3QgZGlzcGxheSAqcCk7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsgIC8qIGNvcHkgb2YgdGhlIGN1cnJlbnQgZmJfdmFyX3NjcmVlbmluZm8gKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBjdXJzb3JfdGltZXI7IC8qIEN1cnNvciB0aW1lciAqLwogCXN0cnVjdCBmYl9jdXJzb3IgY3Vyc29yX3N0YXRlOwogICAgICAgICBpbnQgICAgY3VycmNvbjsJICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgVkMuICovCkBAIC03Myw3ICs3OSwxMiBAQAogCWludCAgICBibGFua19zdGF0ZTsKIAlpbnQgICAgZ3JhcGhpY3M7CiAJaW50ICAgIGZsYWdzOworCWludCAgICByb3RhdGU7CisJaW50ICAgIGN1cl9yb3RhdGU7CiAJY2hhciAgKmN1cnNvcl9kYXRhOworCXU4ICAgICpmb250YnVmZmVyOworCXU4ICAgICpmb250ZGF0YTsKKwl1MzIgICAgZmRfc2l6ZTsKIH07CiAgICAgLyoKICAgICAgKiAgQXR0cmlidXRlIERlY29kaW5nCkBAIC0xNjgsNCArMTc5LDQ3IEBACiAjZW5kaWYKIGV4dGVybiB2b2lkIGZiY29uX3NldF9iaXRvcHMoc3RydWN0IGZiY29uX29wcyAqb3BzKTsKIGV4dGVybiBpbnQgIHNvZnRfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpOworCisjZGVmaW5lIEZCQ09OX0FUVFJJQlVURV9VTkRFUkxJTkUgMQorI2RlZmluZSBGQkNPTl9BVFRSSUJVVEVfUkVWRVJTRSAgIDIKKyNkZWZpbmUgRkJDT05fQVRUUklCVVRFX0JPTEQgICAgICA0CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlYWxfeShzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHlwb3MpCit7CisJaW50IHJvd3MgPSBwLT52cm93czsKKworCXlwb3MgKz0gcC0+eXNjcm9sbDsKKwlyZXR1cm4geXBvcyA8IHJvd3MgPyB5cG9zIDogeXBvcyAtIHJvd3M7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2F0dHJpYnV0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTE2IGMpCit7CisJaW50IGF0dHJpYnV0ZSA9IDA7CisKKwlpZiAoZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpID09IDEpIHsKKwkJaWYgKGF0dHJfdW5kZXJsaW5lKGMpKQorCQkJYXR0cmlidXRlIHw9IEZCQ09OX0FUVFJJQlVURV9VTkRFUkxJTkU7CisJCWlmIChhdHRyX3JldmVyc2UoYykpCisJCQlhdHRyaWJ1dGUgfD0gRkJDT05fQVRUUklCVVRFX1JFVkVSU0U7CisJCWlmIChhdHRyX2JvbGQoYykpCisJCQlhdHRyaWJ1dGUgfD0gRkJDT05fQVRUUklCVVRFX0JPTEQ7CisJfQorCisJcmV0dXJuIGF0dHJpYnV0ZTsKK30KKworI2RlZmluZSBGQkNPTl9TV0FQKGkscix2KSAoeyBcCisgICAgICAgIHR5cGVvZihyKSBfciA9IChyKTsgIFwKKyAgICAgICAgdHlwZW9mKHYpIF92ID0gKHYpOyAgXAorICAgICAgICAodm9pZCkgKCZfciA9PSAmX3YpOyBcCisgICAgICAgIChpID09IEZCX1JPVEFURV9VUiB8fCBpID09IEZCX1JPVEFURV9VRCkgPyBfciA6IF92OyB9KQorCisjaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04KK2V4dGVybiB2b2lkIGZiY29uX3NldF9yb3RhdGUoc3RydWN0IGZiY29uX29wcyAqb3BzKTsKKyNlbHNlCisjZGVmaW5lIGZiY29uX3NldF9yb3RhdGUoeCkgZG8ge30gd2hpbGUoMCkKKyNlbmRpZiAvKiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiAqLworCiAjZW5kaWYgLyogX1ZJREVPX0ZCQ09OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MGFhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY2N3LmMKQEAgLTAsMCArMSw0MjggQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jIC0tIFNvZnR3YXJlIFJvdGF0aW9uIC0gMjcwIGRlZ3JlZXMKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXMgQHBvbC5uZXQ+CisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiZmJjb24uaCIKKyNpbmNsdWRlICJmYmNvbl9yb3RhdGUuaCIKKworLyoKKyAqIFJvdGF0aW9uIDI3MCBkZWdyZWVzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGNjd191cGRhdGVfYXR0cih1OCAqZHN0LCB1OCAqc3JjLCBpbnQgYXR0cmlidXRlLAorCQkJCSAgc3RydWN0IHZjX2RhdGEgKnZjKQoreworCWludCBpLCBqLCBvZmZzZXQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDwgMTApID8gMSA6IDI7CisJaW50IHdpZHRoID0gKHZjLT52Y19mb250LmhlaWdodCArIDcpID4+IDM7CisJaW50IG1vZCA9IHZjLT52Y19mb250LmhlaWdodCAlIDg7CisJdTggYywgbXNrID0gfigweGZmIDw8IG9mZnNldCksIG1zazEgPSAwOworCisJaWYgKG1vZCkKKwkJbXNrIDw8PSAoOCAtIG1vZCk7CisKKwlpZiAob2Zmc2V0ID4gbW9kKQorCQlzZXRfYml0KEZCQ09OX0JJVCg3KSwgKHZvaWQgKikmbXNrMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmMtPnZjX2ZvbnQud2lkdGg7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworCQkJYyA9ICpzcmM7CisKKwkJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FKSB7CisJCQkJaWYgKGogPT0gd2lkdGggLSAxKQorCQkJCQljIHw9IG1zazsKKworCQkJCWlmIChtc2sxICYmIGogPT0gd2lkdGggLSAyKQorCQkJCQljIHw9IG1zazE7CisJCQl9CisKKwkJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfQk9MRCAmJiBpKQorCQkJCSooZHN0IC0gd2lkdGgpIHw9IGM7CisKKwkJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfUkVWRVJTRSkKKwkJCQljID0gfmM7CisJCQlzcmMrKzsKKwkJCSpkc3QrKyA9IGM7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgY2N3X2Jtb3ZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwKKwkJICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlzdHJ1Y3QgZmJfY29weWFyZWEgYXJlYTsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWFyZWEuc3ggPSBzeSAqIHZjLT52Y19mb250LmhlaWdodDsKKwlhcmVhLnN5ID0gdnlyZXMgLSAoKHN4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCWFyZWEuZHggPSBkeSAqIHZjLT52Y19mb250LmhlaWdodDsKKwlhcmVhLmR5ID0gdnlyZXMgLSAoKGR4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCWFyZWEud2lkdGggPSBoZWlnaHQgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJYXJlYS5oZWlnaHQgID0gd2lkdGggKiB2Yy0+dmNfZm9udC53aWR0aDsKKworCWluZm8tPmZib3BzLT5mYl9jb3B5YXJlYShpbmZvLCAmYXJlYSk7Cit9CisKK3N0YXRpYyB2b2lkIGNjd19jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksCisJCSAgICAgaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlzdHJ1Y3QgZmJfZmlsbHJlY3QgcmVnaW9uOworCWludCBiZ3NoaWZ0ID0gKHZjLT52Y19oaV9mb250X21hc2spID8gMTMgOiAxMjsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCXJlZ2lvbi5jb2xvciA9IGF0dHJfYmdjb2xfZWMoYmdzaGlmdCx2Yyk7CisJcmVnaW9uLmR4ID0gc3kgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJcmVnaW9uLmR5ID0gdnlyZXMgLSAoKHN4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCXJlZ2lvbi5oZWlnaHQgPSB3aWR0aCAqIHZjLT52Y19mb250LndpZHRoOworCXJlZ2lvbi53aWR0aCA9IGhlaWdodCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlyZWdpb24ucm9wID0gUk9QX0NPUFk7CisKKwlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjY3dfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCSAgICBjb25zdCB1MTYgKnMsIHUzMiBhdHRyLCB1MzIgY250LAorCQkJCSAgICB1MzIgZF9waXRjaCwgdTMyIHNfcGl0Y2gsIHUzMiBjZWxsc2l6ZSwKKwkJCQkgICAgc3RydWN0IGZiX2ltYWdlICppbWFnZSwgdTggKmJ1ZiwgdTggKmRzdCkKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJdTE2IGNoYXJtYXNrID0gdmMtPnZjX2hpX2ZvbnRfbWFzayA/IDB4MWZmIDogMHhmZjsKKwl1MzIgaWR4ID0gKHZjLT52Y19mb250LmhlaWdodCArIDcpID4+IDM7CisJdTggKnNyYzsKKworCXdoaWxlIChjbnQtLSkgeworCQlzcmMgPSBvcHMtPmZvbnRidWZmZXIgKyAoc2NyX3JlYWR3KHMtLSkgJiBjaGFybWFzaykqY2VsbHNpemU7CisKKwkJaWYgKGF0dHIpIHsKKwkJCWNjd191cGRhdGVfYXR0cihidWYsIHNyYywgYXR0ciwgdmMpOworCQkJc3JjID0gYnVmOworCQl9CisKKwkJaWYgKGxpa2VseShpZHggPT0gMSkpCisJCQlfX2ZiX3BhZF9hbGlnbmVkX2J1ZmZlcihkc3QsIGRfcGl0Y2gsIHNyYywgaWR4LAorCQkJCQkJdmMtPnZjX2ZvbnQud2lkdGgpOworCQllbHNlCisJCQlmYl9wYWRfYWxpZ25lZF9idWZmZXIoZHN0LCBkX3BpdGNoLCBzcmMsIGlkeCwKKwkJCQkJICAgICAgdmMtPnZjX2ZvbnQud2lkdGgpOworCisJCWRzdCArPSBkX3BpdGNoICogdmMtPnZjX2ZvbnQud2lkdGg7CisJfQorCisJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywgaW50IGNvdW50LCBpbnQgeXksIGludCB4eCwKKwkJICAgICAgaW50IGZnLCBpbnQgYmcpCit7CisJc3RydWN0IGZiX2ltYWdlIGltYWdlOworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUzMiB3aWR0aCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KS84OworCXUzMiBjZWxsc2l6ZSA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7CisJdTMyIG1heGNudCA9IGluZm8tPnBpeG1hcC5zaXplL2NlbGxzaXplOworCXUzMiBzY2FuX2FsaWduID0gaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gLSAxOworCXUzMiBidWZfYWxpZ24gPSBpbmZvLT5waXhtYXAuYnVmX2FsaWduIC0gMTsKKwl1MzIgY250LCBwaXRjaCwgc2l6ZTsKKwl1MzIgYXR0cmlidXRlID0gZ2V0X2F0dHJpYnV0ZShpbmZvLCBzY3JfcmVhZHcocykpOworCXU4ICpkc3QsICpidWYgPSBOVUxMOworCXUzMiB2eXJlcyA9IEdFVFZZUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCisJaWYgKCFvcHMtPmZvbnRidWZmZXIpCisJCXJldHVybjsKKworCWltYWdlLmZnX2NvbG9yID0gZmc7CisJaW1hZ2UuYmdfY29sb3IgPSBiZzsKKwlpbWFnZS5keCA9IHl5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWltYWdlLmR5ID0gdnlyZXMgLSAoKHh4ICsgY291bnQpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCWltYWdlLndpZHRoID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWltYWdlLmRlcHRoID0gMTsKKworCWlmIChhdHRyaWJ1dGUpIHsKKwkJYnVmID0ga21hbGxvYyhjZWxsc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKQorCQkJcmV0dXJuOworCX0KKworCXMgKz0gY291bnQgLSAxOworCisJd2hpbGUgKGNvdW50KSB7CisJCWlmIChjb3VudCA+IG1heGNudCkKKwkJCWNudCA9IG1heGNudDsKKwkJZWxzZQorCQkJY250ID0gY291bnQ7CisKKwkJaW1hZ2UuaGVpZ2h0ID0gdmMtPnZjX2ZvbnQud2lkdGggKiBjbnQ7CisJCXBpdGNoID0gKChpbWFnZS53aWR0aCArIDcpID4+IDMpICsgc2Nhbl9hbGlnbjsKKwkJcGl0Y2ggJj0gfnNjYW5fYWxpZ247CisJCXNpemUgPSBwaXRjaCAqIGltYWdlLmhlaWdodCArIGJ1Zl9hbGlnbjsKKwkJc2l6ZSAmPSB+YnVmX2FsaWduOworCQlkc3QgPSBmYl9nZXRfYnVmZmVyX29mZnNldChpbmZvLCAmaW5mby0+cGl4bWFwLCBzaXplKTsKKwkJaW1hZ2UuZGF0YSA9IGRzdDsKKwkJY2N3X3B1dGNzX2FsaWduZWQodmMsIGluZm8sIHMsIGF0dHJpYnV0ZSwgY250LCBwaXRjaCwKKwkJCQkgd2lkdGgsIGNlbGxzaXplLCAmaW1hZ2UsIGJ1ZiwgZHN0KTsKKwkJaW1hZ2UuZHkgKz0gaW1hZ2UuaGVpZ2h0OworCQljb3VudCAtPSBjbnQ7CisJCXMgLT0gY250OworCX0KKworCS8qIGJ1ZiBpcyBhbHdheXMgTlVMTCBleGNlcHQgd2hlbiBpbiBtb25vY2hyb21lIG1vZGUsIHNvIGluIHRoaXMgY2FzZQorCSAgIGl0J3MgYSBnYWluIHRvIGNoZWNrIGJ1ZiBhZ2FpbnN0IE5VTEwgZXZlbiB0aG91Z2gga2ZyZWUoKSBoYW5kbGVzCisJICAgTlVMTCBwb2ludGVycyBqdXN0IGZpbmUgKi8KKwlpZiAodW5saWtlbHkoYnVmKSkKKwkJa2ZyZWUoYnVmKTsKKworfQorCitzdGF0aWMgdm9pZCBjY3dfY2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICBpbnQgYm90dG9tX29ubHkpCit7CisJdW5zaWduZWQgaW50IGN3ID0gdmMtPnZjX2ZvbnQud2lkdGg7CisJdW5zaWduZWQgaW50IGNoID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXVuc2lnbmVkIGludCBydyA9IGluZm8tPnZhci55cmVzIC0gKHZjLT52Y19jb2xzKmN3KTsKKwl1bnNpZ25lZCBpbnQgYmggPSBpbmZvLT52YXIueHJlcyAtICh2Yy0+dmNfcm93cypjaCk7CisJdW5zaWduZWQgaW50IGJzID0gdmMtPnZjX3Jvd3MqY2g7CisJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDEzIDogMTI7CisKKwlyZWdpb24uY29sb3IgPSBhdHRyX2JnY29sX2VjKGJnc2hpZnQsdmMpOworCXJlZ2lvbi5yb3AgPSBST1BfQ09QWTsKKworCWlmIChydyAmJiAhYm90dG9tX29ubHkpIHsKKwkJcmVnaW9uLmR4ID0gMDsKKwkJcmVnaW9uLmR5ID0gaW5mby0+dmFyLnlvZmZzZXQ7CisJCXJlZ2lvbi5oZWlnaHQgPSBydzsKKwkJcmVnaW9uLndpZHRoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKKwkJaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0KGluZm8sICZyZWdpb24pOworCX0KKworCWlmIChiaCkgeworCQlyZWdpb24uZHggPSBpbmZvLT52YXIueG9mZnNldCArIGJzOworCQlyZWdpb24uZHkgPSAwOworICAgICAgICAgICAgICAgIHJlZ2lvbi5oZWlnaHQgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsOworICAgICAgICAgICAgICAgIHJlZ2lvbi53aWR0aCA9IGJoOworCQlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjY3dfY3Vyc29yKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgbW9kZSwgaW50IHNvZnRiYWNrX2xpbmVzLAorCQkgICAgICBpbnQgZmcsIGludCBiZykKK3sKKwlzdHJ1Y3QgZmJfY3Vyc29yIGN1cnNvcjsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSAoc3RydWN0IGZiY29uX29wcyAqKSBpbmZvLT5mYmNvbl9wYXI7CisJdW5zaWduZWQgc2hvcnQgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrID8gMHgxZmYgOiAweGZmOworCWludCB3ID0gKHZjLT52Y19mb250LmhlaWdodCArIDcpID4+IDMsIGM7CisJaW50IHkgPSByZWFsX3kocCwgdmMtPnZjX3kpOworCWludCBhdHRyaWJ1dGUsIHVzZV9zdyA9ICh2Yy0+dmNfY3Vyc29yX3R5cGUgJiAweDEwKTsKKwlpbnQgZXJyID0gMSwgZHgsIGR5OworCWNoYXIgKnNyYzsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWlmICghb3BzLT5mb250YnVmZmVyKQorCQlyZXR1cm47CisKKwljdXJzb3Iuc2V0ID0gMDsKKworCWlmIChzb2Z0YmFja19saW5lcykgeworCQlpZiAoeSArIHNvZnRiYWNrX2xpbmVzID49IHZjLT52Y19yb3dzKSB7CisJCQltb2RlID0gQ01fRVJBU0U7CisJCQlvcHMtPmN1cnNvcl9mbGFzaCA9IDA7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJeSArPSBzb2Z0YmFja19saW5lczsKKwl9CisKKyAJYyA9IHNjcl9yZWFkdygodTE2ICopIHZjLT52Y19wb3MpOworCWF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7CisJc3JjID0gb3BzLT5mb250YnVmZmVyICsgKChjICYgY2hhcm1hc2spICogKHcgKiB2Yy0+dmNfZm9udC53aWR0aCkpOworCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmRhdGEgIT0gc3JjIHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmRhdGEgPSBzcmM7CisJICAgIGN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVElNQUdFOworCX0KKworCWlmIChhdHRyaWJ1dGUpIHsKKwkJdTggKmRzdDsKKworCQlkc3QgPSBrbWFsbG9jKHcgKiB2Yy0+dmNfZm9udC53aWR0aCwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KQorCQkJcmV0dXJuOworCQlrZnJlZShvcHMtPmN1cnNvcl9kYXRhKTsKKwkJb3BzLT5jdXJzb3JfZGF0YSA9IGRzdDsKKwkJY2N3X3VwZGF0ZV9hdHRyKGRzdCwgc3JjLCBhdHRyaWJ1dGUsIHZjKTsKKwkJc3JjID0gZHN0OworCX0KKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvciAhPSBmZyB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvciAhPSBiZyB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvciA9IGZnOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvciA9IGJnOworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRDTUFQOworCX0KKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5oZWlnaHQgIT0gdmMtPnZjX2ZvbnQud2lkdGggfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2Uud2lkdGggIT0gdmMtPnZjX2ZvbnQuaGVpZ2h0IHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmhlaWdodCA9IHZjLT52Y19mb250LndpZHRoOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aCA9IHZjLT52Y19mb250LmhlaWdodDsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUU0laRTsKKwl9CisKKwlkeCA9IHkgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJZHkgPSB2eXJlcyAtICgodmMtPnZjX3ggKyAxKSAqIHZjLT52Y19mb250LndpZHRoKTsKKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keCAhPSBkeCB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keSAhPSBkeSB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keCA9IGR4OworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keSA9IGR5OworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRQT1M7CisJfQorCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54IHx8IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC55IHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54ID0gY3Vyc29yLmhvdC55ID0gMDsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUSE9UOworCX0KKworCWlmIChjdXJzb3Iuc2V0ICYgRkJfQ1VSX1NFVFNJWkUgfHwKKwkgICAgdmMtPnZjX2N1cnNvcl90eXBlICE9IHAtPmN1cnNvcl9zaGFwZSB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrID09IE5VTEwgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJY2hhciAqdG1wLCAqbWFzayA9IGttYWxsb2Modyp2Yy0+dmNfZm9udC53aWR0aCwgR0ZQX0FUT01JQyk7CisJCWludCBjdXJfaGVpZ2h0LCBzaXplLCBpID0gMDsKKwkJaW50IHdpZHRoID0gKHZjLT52Y19mb250LndpZHRoICsgNykvODsKKworCQlpZiAoIW1hc2spCisJCQlyZXR1cm47CisKKwkJdG1wID0ga21hbGxvYyh3aWR0aCAqIHZjLT52Y19mb250LmhlaWdodCwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKCF0bXApIHsKKwkJCWtmcmVlKG1hc2spOworCQkJcmV0dXJuOworCQl9CisKKwkJa2ZyZWUob3BzLT5jdXJzb3Jfc3RhdGUubWFzayk7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLm1hc2sgPSBtYXNrOworCisJCXAtPmN1cnNvcl9zaGFwZSA9IHZjLT52Y19jdXJzb3JfdHlwZTsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUU0hBUEU7CisKKwkJc3dpdGNoIChwLT5jdXJzb3Jfc2hhcGUgJiBDVVJfSFdNQVNLKSB7CisJCWNhc2UgQ1VSX05PTkU6CisJCQljdXJfaGVpZ2h0ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIENVUl9VTkRFUkxJTkU6CisJCQljdXJfaGVpZ2h0ID0gKHZjLT52Y19mb250LmhlaWdodCA8IDEwKSA/IDEgOiAyOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0xPV0VSX1RISVJEOgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodC8zOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0xPV0VSX0hBTEY6CisJCQljdXJfaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0ID4+IDE7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfVFdPX1RISVJEUzoKKwkJCWN1cl9oZWlnaHQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDw8IDEpLzM7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfQkxPQ0s6CisJCWRlZmF1bHQ6CisJCQljdXJfaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQkJYnJlYWs7CisJCX0KKworCQlzaXplID0gKHZjLT52Y19mb250LmhlaWdodCAtIGN1cl9oZWlnaHQpICogd2lkdGg7CisJCXdoaWxlIChzaXplLS0pCisJCQl0bXBbaSsrXSA9IDA7CisJCXNpemUgPSBjdXJfaGVpZ2h0ICogd2lkdGg7CisJCXdoaWxlIChzaXplLS0pCisJCQl0bXBbaSsrXSA9IDB4ZmY7CisJCW1lbXNldChtYXNrLCAwLCB3ICogdmMtPnZjX2ZvbnQud2lkdGgpOworCQlyb3RhdGVfY2N3KHRtcCwgbWFzaywgdmMtPnZjX2ZvbnQud2lkdGgsIHZjLT52Y19mb250LmhlaWdodCk7CisJCWtmcmVlKHRtcCk7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTV9FUkFTRToKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDTV9EUkFXOgorCWNhc2UgQ01fTU9WRToKKwlkZWZhdWx0OgorCQlvcHMtPmN1cnNvcl9zdGF0ZS5lbmFibGUgPSAodXNlX3N3KSA/IDAgOiAxOworCQlicmVhazsKKwl9CisKKwljdXJzb3IuaW1hZ2UuZGF0YSA9IHNyYzsKKwljdXJzb3IuaW1hZ2UuZmdfY29sb3IgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvcjsKKwljdXJzb3IuaW1hZ2UuYmdfY29sb3IgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvcjsKKwljdXJzb3IuaW1hZ2UuZHggPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keDsKKwljdXJzb3IuaW1hZ2UuZHkgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keTsKKwljdXJzb3IuaW1hZ2UuaGVpZ2h0ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0OworCWN1cnNvci5pbWFnZS53aWR0aCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLndpZHRoOworCWN1cnNvci5ob3QueCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54OworCWN1cnNvci5ob3QueSA9IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC55OworCWN1cnNvci5tYXNrID0gb3BzLT5jdXJzb3Jfc3RhdGUubWFzazsKKwljdXJzb3IuZW5hYmxlID0gb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlOworCWN1cnNvci5pbWFnZS5kZXB0aCA9IDE7CisJY3Vyc29yLnJvcCA9IFJPUF9YT1I7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX2N1cnNvcikKKwkJZXJyID0gaW5mby0+ZmJvcHMtPmZiX2N1cnNvcihpbmZvLCAmY3Vyc29yKTsKKworCWlmIChlcnIpCisJCXNvZnRfY3Vyc29yKGluZm8sICZjdXJzb3IpOworCisJb3BzLT5jdXJzb3JfcmVzZXQgPSAwOworfQorCitpbnQgY2N3X3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVtvcHMtPmN1cnJjb25dOworCXUzMiB5b2Zmc2V0OworCXUzMiB2eXJlcyA9IEdFVFZZUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCWludCBlcnI7CisKKwl5b2Zmc2V0ID0gKHZ5cmVzIC0gaW5mby0+dmFyLnlyZXMpIC0gb3BzLT52YXIueG9mZnNldDsKKwlvcHMtPnZhci54b2Zmc2V0ID0gb3BzLT52YXIueW9mZnNldDsKKwlvcHMtPnZhci55b2Zmc2V0ID0geW9mZnNldDsKKwllcnIgPSBmYl9wYW5fZGlzcGxheShpbmZvLCAmb3BzLT52YXIpOworCW9wcy0+dmFyLnhvZmZzZXQgPSBpbmZvLT52YXIueG9mZnNldDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQ7CisJb3BzLT52YXIudm1vZGUgPSBpbmZvLT52YXIudm1vZGU7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBmYmNvbl9yb3RhdGVfY2N3KHN0cnVjdCBmYmNvbl9vcHMgKm9wcykKK3sKKwlvcHMtPmJtb3ZlID0gY2N3X2Jtb3ZlOworCW9wcy0+Y2xlYXIgPSBjY3dfY2xlYXI7CisJb3BzLT5wdXRjcyA9IGNjd19wdXRjczsKKwlvcHMtPmNsZWFyX21hcmdpbnMgPSBjY3dfY2xlYXJfbWFyZ2luczsKKwlvcHMtPmN1cnNvciA9IGNjd19jdXJzb3I7CisJb3BzLT51cGRhdGVfc3RhcnQgPSBjY3dfdXBkYXRlX3N0YXJ0OworfQorRVhQT1JUX1NZTUJPTChmYmNvbl9yb3RhdGVfY2N3KTsKKworTU9EVUxFX0FVVEhPUigiQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzQHBvbC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbnNvbGUgUm90YXRpb24gKDI3MCBkZWdyZWVzKSBTdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY3cuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNmYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY3cuYwpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fdWQuYyAtLSBTb2Z0d2FyZSBSb3RhdGlvbiAtIDkwIGRlZ3JlZXMKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXMgQHBvbC5uZXQ+CisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiZmJjb24uaCIKKyNpbmNsdWRlICJmYmNvbl9yb3RhdGUuaCIKKworLyoKKyAqIFJvdGF0aW9uIDkwIGRlZ3JlZXMKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgY3dfdXBkYXRlX2F0dHIodTggKmRzdCwgdTggKnNyYywgaW50IGF0dHJpYnV0ZSwKKwkJCQkgIHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlpbnQgaSwgaiwgb2Zmc2V0ID0gKHZjLT52Y19mb250LmhlaWdodCA8IDEwKSA/IDEgOiAyOworCWludCB3aWR0aCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KSA+PiAzOworCXU4IGMsIHQgPSAwLCBtc2sgPSB+KDB4ZmYgPj4gb2Zmc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCB2Yy0+dmNfZm9udC53aWR0aDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CisJCQljID0gKnNyYzsKKwkJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FICYmICFqKQorCQkJCWMgfD0gbXNrOworCQkJaWYgKGF0dHJpYnV0ZSAmIEZCQ09OX0FUVFJJQlVURV9CT0xEICYmIGkpCisJCQkJYyB8PSAqKHNyYy13aWR0aCk7CisJCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX1JFVkVSU0UpCisJCQkJYyA9IH5jOworCQkJc3JjKys7CisJCQkqZHN0KysgPSBjOworCQkJdCA9IGM7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgY3dfYm1vdmUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LAorCQkgICAgIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCXN0cnVjdCBmYl9jb3B5YXJlYSBhcmVhOworCXUzMiB2eHJlcyA9IEdFVFZYUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCisJYXJlYS5zeCA9IHZ4cmVzIC0gKChzeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOworCWFyZWEuc3kgPSBzeCAqIHZjLT52Y19mb250LndpZHRoOworCWFyZWEuZHggPSB2eHJlcyAtICgoZHkgKyBoZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlhcmVhLmR5ID0gZHggKiB2Yy0+dmNfZm9udC53aWR0aDsKKwlhcmVhLndpZHRoID0gaGVpZ2h0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWFyZWEuaGVpZ2h0ICA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7CisKKwlpbmZvLT5mYm9wcy0+ZmJfY29weWFyZWEoaW5mbywgJmFyZWEpOworfQorCitzdGF0aWMgdm9pZCBjd19jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksCisJCSAgICAgaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlzdHJ1Y3QgZmJfZmlsbHJlY3QgcmVnaW9uOworCWludCBiZ3NoaWZ0ID0gKHZjLT52Y19oaV9mb250X21hc2spID8gMTMgOiAxMjsKKwl1MzIgdnhyZXMgPSBHRVRWWFJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCXJlZ2lvbi5jb2xvciA9IGF0dHJfYmdjb2xfZWMoYmdzaGlmdCx2Yyk7CisJcmVnaW9uLmR4ID0gdnhyZXMgLSAoKHN5ICsgaGVpZ2h0KSAqIHZjLT52Y19mb250LmhlaWdodCk7CisJcmVnaW9uLmR5ID0gc3ggKiAgdmMtPnZjX2ZvbnQud2lkdGg7CisJcmVnaW9uLmhlaWdodCA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7CisJcmVnaW9uLndpZHRoID0gaGVpZ2h0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXJlZ2lvbi5yb3AgPSBST1BfQ09QWTsKKworCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN3X3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgY29uc3QgdTE2ICpzLCB1MzIgYXR0ciwgdTMyIGNudCwKKwkJCQkgICAgdTMyIGRfcGl0Y2gsIHUzMiBzX3BpdGNoLCB1MzIgY2VsbHNpemUsCisJCQkJICAgIHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsIHU4ICpidWYsIHU4ICpkc3QpCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUxNiBjaGFybWFzayA9IHZjLT52Y19oaV9mb250X21hc2sgPyAweDFmZiA6IDB4ZmY7CisJdTMyIGlkeCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KSA+PiAzOworCXU4ICpzcmM7CisKKwl3aGlsZSAoY250LS0pIHsKKwkJc3JjID0gb3BzLT5mb250YnVmZmVyICsgKHNjcl9yZWFkdyhzKyspICYgY2hhcm1hc2spKmNlbGxzaXplOworCisJCWlmIChhdHRyKSB7CisJCQljd191cGRhdGVfYXR0cihidWYsIHNyYywgYXR0ciwgdmMpOworCQkJc3JjID0gYnVmOworCQl9CisKKwkJaWYgKGxpa2VseShpZHggPT0gMSkpCisJCQlfX2ZiX3BhZF9hbGlnbmVkX2J1ZmZlcihkc3QsIGRfcGl0Y2gsIHNyYywgaWR4LAorCQkJCQkJdmMtPnZjX2ZvbnQud2lkdGgpOworCQllbHNlCisJCQlmYl9wYWRfYWxpZ25lZF9idWZmZXIoZHN0LCBkX3BpdGNoLCBzcmMsIGlkeCwKKwkJCQkJICAgICAgdmMtPnZjX2ZvbnQud2lkdGgpOworCisJCWRzdCArPSBkX3BpdGNoICogdmMtPnZjX2ZvbnQud2lkdGg7CisJfQorCisJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGN3X3B1dGNzKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzLCBpbnQgY291bnQsIGludCB5eSwgaW50IHh4LAorCQkgICAgICBpbnQgZmcsIGludCBiZykKK3sKKwlzdHJ1Y3QgZmJfaW1hZ2UgaW1hZ2U7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJdTMyIHdpZHRoID0gKHZjLT52Y19mb250LmhlaWdodCArIDcpLzg7CisJdTMyIGNlbGxzaXplID0gd2lkdGggKiB2Yy0+dmNfZm9udC53aWR0aDsKKwl1MzIgbWF4Y250ID0gaW5mby0+cGl4bWFwLnNpemUvY2VsbHNpemU7CisJdTMyIHNjYW5fYWxpZ24gPSBpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiAtIDE7CisJdTMyIGJ1Zl9hbGlnbiA9IGluZm8tPnBpeG1hcC5idWZfYWxpZ24gLSAxOworCXUzMiBjbnQsIHBpdGNoLCBzaXplOworCXUzMiBhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIHNjcl9yZWFkdyhzKSk7CisJdTggKmRzdCwgKmJ1ZiA9IE5VTEw7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlpZiAoIW9wcy0+Zm9udGJ1ZmZlcikKKwkJcmV0dXJuOworCisJaW1hZ2UuZmdfY29sb3IgPSBmZzsKKwlpbWFnZS5iZ19jb2xvciA9IGJnOworCWltYWdlLmR4ID0gdnhyZXMgLSAoKHl5ICsgMSkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOworCWltYWdlLmR5ID0geHggKiB2Yy0+dmNfZm9udC53aWR0aDsKKwlpbWFnZS53aWR0aCA9IHZjLT52Y19mb250LmhlaWdodDsKKwlpbWFnZS5kZXB0aCA9IDE7CisKKwlpZiAoYXR0cmlidXRlKSB7CisJCWJ1ZiA9IGttYWxsb2MoY2VsbHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJaWYgKGNvdW50ID4gbWF4Y250KQorCQkJY250ID0gbWF4Y250OworCQllbHNlCisJCQljbnQgPSBjb3VudDsKKworCQlpbWFnZS5oZWlnaHQgPSB2Yy0+dmNfZm9udC53aWR0aCAqIGNudDsKKwkJcGl0Y2ggPSAoKGltYWdlLndpZHRoICsgNykgPj4gMykgKyBzY2FuX2FsaWduOworCQlwaXRjaCAmPSB+c2Nhbl9hbGlnbjsKKwkJc2l6ZSA9IHBpdGNoICogaW1hZ2UuaGVpZ2h0ICsgYnVmX2FsaWduOworCQlzaXplICY9IH5idWZfYWxpZ247CisJCWRzdCA9IGZiX2dldF9idWZmZXJfb2Zmc2V0KGluZm8sICZpbmZvLT5waXhtYXAsIHNpemUpOworCQlpbWFnZS5kYXRhID0gZHN0OworCQljd19wdXRjc19hbGlnbmVkKHZjLCBpbmZvLCBzLCBhdHRyaWJ1dGUsIGNudCwgcGl0Y2gsCisJCQkJIHdpZHRoLCBjZWxsc2l6ZSwgJmltYWdlLCBidWYsIGRzdCk7CisJCWltYWdlLmR5ICs9IGltYWdlLmhlaWdodDsKKwkJY291bnQgLT0gY250OworCQlzICs9IGNudDsKKwl9CisKKwkvKiBidWYgaXMgYWx3YXlzIE5VTEwgZXhjZXB0IHdoZW4gaW4gbW9ub2Nocm9tZSBtb2RlLCBzbyBpbiB0aGlzIGNhc2UKKwkgICBpdCdzIGEgZ2FpbiB0byBjaGVjayBidWYgYWdhaW5zdCBOVUxMIGV2ZW4gdGhvdWdoIGtmcmVlKCkgaGFuZGxlcworCSAgIE5VTEwgcG9pbnRlcnMganVzdCBmaW5lICovCisJaWYgKHVubGlrZWx5KGJ1ZikpCisJCWtmcmVlKGJ1Zik7CisKK30KKworc3RhdGljIHZvaWQgY3dfY2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICBpbnQgYm90dG9tX29ubHkpCit7CisJdW5zaWduZWQgaW50IGN3ID0gdmMtPnZjX2ZvbnQud2lkdGg7CisJdW5zaWduZWQgaW50IGNoID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXVuc2lnbmVkIGludCBydyA9IGluZm8tPnZhci55cmVzIC0gKHZjLT52Y19jb2xzKmN3KTsKKwl1bnNpZ25lZCBpbnQgYmggPSBpbmZvLT52YXIueHJlcyAtICh2Yy0+dmNfcm93cypjaCk7CisJdW5zaWduZWQgaW50IHJzID0gaW5mby0+dmFyLnlyZXMgLSBydzsKKwlzdHJ1Y3QgZmJfZmlsbHJlY3QgcmVnaW9uOworCWludCBiZ3NoaWZ0ID0gKHZjLT52Y19oaV9mb250X21hc2spID8gMTMgOiAxMjsKKworCXJlZ2lvbi5jb2xvciA9IGF0dHJfYmdjb2xfZWMoYmdzaGlmdCx2Yyk7CisJcmVnaW9uLnJvcCA9IFJPUF9DT1BZOworCisJaWYgKHJ3ICYmICFib3R0b21fb25seSkgeworCQlyZWdpb24uZHggPSAwOworCQlyZWdpb24uZHkgPSBpbmZvLT52YXIueW9mZnNldCArIHJzOworCQlyZWdpb24uaGVpZ2h0ID0gcnc7CisJCXJlZ2lvbi53aWR0aCA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWw7CisJCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKKwl9CisKKwlpZiAoYmgpIHsKKwkJcmVnaW9uLmR4ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJCXJlZ2lvbi5keSA9IGluZm8tPnZhci55b2Zmc2V0OworICAgICAgICAgICAgICAgIHJlZ2lvbi5oZWlnaHQgPSBpbmZvLT52YXIueXJlczsKKyAgICAgICAgICAgICAgICByZWdpb24ud2lkdGggPSBiaDsKKwkJaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0KGluZm8sICZyZWdpb24pOworCX0KK30KKworc3RhdGljIHZvaWQgY3dfY3Vyc29yKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgbW9kZSwgaW50IHNvZnRiYWNrX2xpbmVzLAorCQkgICAgICBpbnQgZmcsIGludCBiZykKK3sKKwlzdHJ1Y3QgZmJfY3Vyc29yIGN1cnNvcjsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSAoc3RydWN0IGZiY29uX29wcyAqKSBpbmZvLT5mYmNvbl9wYXI7CisJdW5zaWduZWQgc2hvcnQgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrID8gMHgxZmYgOiAweGZmOworCWludCB3ID0gKHZjLT52Y19mb250LmhlaWdodCArIDcpID4+IDMsIGM7CisJaW50IHkgPSByZWFsX3kocCwgdmMtPnZjX3kpOworCWludCBhdHRyaWJ1dGUsIHVzZV9zdyA9ICh2Yy0+dmNfY3Vyc29yX3R5cGUgJiAweDEwKTsKKwlpbnQgZXJyID0gMSwgZHgsIGR5OworCWNoYXIgKnNyYzsKKwl1MzIgdnhyZXMgPSBHRVRWWFJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWlmICghb3BzLT5mb250YnVmZmVyKQorCQlyZXR1cm47CisKKwljdXJzb3Iuc2V0ID0gMDsKKworCWlmIChzb2Z0YmFja19saW5lcykgeworCQlpZiAoeSArIHNvZnRiYWNrX2xpbmVzID49IHZjLT52Y19yb3dzKSB7CisJCQltb2RlID0gQ01fRVJBU0U7CisJCQlvcHMtPmN1cnNvcl9mbGFzaCA9IDA7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJeSArPSBzb2Z0YmFja19saW5lczsKKwl9CisKKyAJYyA9IHNjcl9yZWFkdygodTE2ICopIHZjLT52Y19wb3MpOworCWF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7CisJc3JjID0gb3BzLT5mb250YnVmZmVyICsgKChjICYgY2hhcm1hc2spICogKHcgKiB2Yy0+dmNfZm9udC53aWR0aCkpOworCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmRhdGEgIT0gc3JjIHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmRhdGEgPSBzcmM7CisJICAgIGN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVElNQUdFOworCX0KKworCWlmIChhdHRyaWJ1dGUpIHsKKwkJdTggKmRzdDsKKworCQlkc3QgPSBrbWFsbG9jKHcgKiB2Yy0+dmNfZm9udC53aWR0aCwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KQorCQkJcmV0dXJuOworCQlrZnJlZShvcHMtPmN1cnNvcl9kYXRhKTsKKwkJb3BzLT5jdXJzb3JfZGF0YSA9IGRzdDsKKwkJY3dfdXBkYXRlX2F0dHIoZHN0LCBzcmMsIGF0dHJpYnV0ZSwgdmMpOworCQlzcmMgPSBkc3Q7CisJfQorCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmZnX2NvbG9yICE9IGZnIHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmJnX2NvbG9yICE9IGJnIHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmZnX2NvbG9yID0gZmc7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmJnX2NvbG9yID0gYmc7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVENNQVA7CisJfQorCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmhlaWdodCAhPSB2Yy0+dmNfZm9udC53aWR0aCB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aCAhPSB2Yy0+dmNfZm9udC5oZWlnaHQgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0ID0gdmMtPnZjX2ZvbnQud2lkdGg7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLndpZHRoID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRTSVpFOworCX0KKworCWR4ID0gdnhyZXMgLSAoKHkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpICsgdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlkeSA9IHZjLT52Y194ICogdmMtPnZjX2ZvbnQud2lkdGg7CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHggIT0gZHggfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHkgIT0gZHkgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHggPSBkeDsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHkgPSBkeTsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUUE9TOworCX0KKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueCB8fCBvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueSB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueCA9IGN1cnNvci5ob3QueSA9IDA7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVEhPVDsKKwl9CisKKwlpZiAoY3Vyc29yLnNldCAmIEZCX0NVUl9TRVRTSVpFIHx8CisJICAgIHZjLT52Y19jdXJzb3JfdHlwZSAhPSBwLT5jdXJzb3Jfc2hhcGUgfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUubWFzayA9PSBOVUxMIHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCWNoYXIgKnRtcCwgKm1hc2sgPSBrbWFsbG9jKHcqdmMtPnZjX2ZvbnQud2lkdGgsIEdGUF9BVE9NSUMpOworCQlpbnQgY3VyX2hlaWdodCwgc2l6ZSwgaSA9IDA7CisJCWludCB3aWR0aCA9ICh2Yy0+dmNfZm9udC53aWR0aCArIDcpLzg7CisKKwkJaWYgKCFtYXNrKQorCQkJcmV0dXJuOworCisJCXRtcCA9IGttYWxsb2Mod2lkdGggKiB2Yy0+dmNfZm9udC5oZWlnaHQsIEdGUF9BVE9NSUMpOworCisJCWlmICghdG1wKSB7CisJCQlrZnJlZShtYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWtmcmVlKG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2spOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrID0gbWFzazsKKworCQlwLT5jdXJzb3Jfc2hhcGUgPSB2Yy0+dmNfY3Vyc29yX3R5cGU7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFNIQVBFOworCisJCXN3aXRjaCAocC0+Y3Vyc29yX3NoYXBlICYgQ1VSX0hXTUFTSykgeworCQljYXNlIENVUl9OT05FOgorCQkJY3VyX2hlaWdodCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfVU5ERVJMSU5FOgorCQkJY3VyX2hlaWdodCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKKwkJCWJyZWFrOworCQljYXNlIENVUl9MT1dFUl9USElSRDoKKwkJCWN1cl9oZWlnaHQgPSB2Yy0+dmNfZm9udC5oZWlnaHQvMzsKKwkJCWJyZWFrOworCQljYXNlIENVUl9MT1dFUl9IQUxGOgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodCA+PiAxOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX1RXT19USElSRFM6CisJCQljdXJfaGVpZ2h0ID0gKHZjLT52Y19mb250LmhlaWdodCA8PCAxKS8zOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0JMT0NLOgorCQlkZWZhdWx0OgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2l6ZSA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgLSBjdXJfaGVpZ2h0KSAqIHdpZHRoOworCQl3aGlsZSAoc2l6ZS0tKQorCQkJdG1wW2krK10gPSAwOworCQlzaXplID0gY3VyX2hlaWdodCAqIHdpZHRoOworCQl3aGlsZSAoc2l6ZS0tKQorCQkJdG1wW2krK10gPSAweGZmOworCQltZW1zZXQobWFzaywgMCwgdyAqIHZjLT52Y19mb250LndpZHRoKTsKKwkJcm90YXRlX2N3KHRtcCwgbWFzaywgdmMtPnZjX2ZvbnQud2lkdGgsIHZjLT52Y19mb250LmhlaWdodCk7CisJCWtmcmVlKHRtcCk7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTV9FUkFTRToKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDTV9EUkFXOgorCWNhc2UgQ01fTU9WRToKKwlkZWZhdWx0OgorCQlvcHMtPmN1cnNvcl9zdGF0ZS5lbmFibGUgPSAodXNlX3N3KSA/IDAgOiAxOworCQlicmVhazsKKwl9CisKKwljdXJzb3IuaW1hZ2UuZGF0YSA9IHNyYzsKKwljdXJzb3IuaW1hZ2UuZmdfY29sb3IgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvcjsKKwljdXJzb3IuaW1hZ2UuYmdfY29sb3IgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvcjsKKwljdXJzb3IuaW1hZ2UuZHggPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keDsKKwljdXJzb3IuaW1hZ2UuZHkgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keTsKKwljdXJzb3IuaW1hZ2UuaGVpZ2h0ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0OworCWN1cnNvci5pbWFnZS53aWR0aCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLndpZHRoOworCWN1cnNvci5ob3QueCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54OworCWN1cnNvci5ob3QueSA9IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC55OworCWN1cnNvci5tYXNrID0gb3BzLT5jdXJzb3Jfc3RhdGUubWFzazsKKwljdXJzb3IuZW5hYmxlID0gb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlOworCWN1cnNvci5pbWFnZS5kZXB0aCA9IDE7CisJY3Vyc29yLnJvcCA9IFJPUF9YT1I7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX2N1cnNvcikKKwkJZXJyID0gaW5mby0+ZmJvcHMtPmZiX2N1cnNvcihpbmZvLCAmY3Vyc29yKTsKKworCWlmIChlcnIpCisJCXNvZnRfY3Vyc29yKGluZm8sICZjdXJzb3IpOworCisJb3BzLT5jdXJzb3JfcmVzZXQgPSAwOworfQorCitpbnQgY3dfdXBkYXRlX3N0YXJ0KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W29wcy0+Y3VycmNvbl07CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisJdTMyIHhvZmZzZXQ7CisJaW50IGVycjsKKworCXhvZmZzZXQgPSB2eHJlcyAtIChpbmZvLT52YXIueHJlcyArIG9wcy0+dmFyLnlvZmZzZXQpOworCW9wcy0+dmFyLnlvZmZzZXQgPSBvcHMtPnZhci54b2Zmc2V0OworCW9wcy0+dmFyLnhvZmZzZXQgPSB4b2Zmc2V0OworCWVyciA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZvcHMtPnZhcik7CisJb3BzLT52YXIueG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OworCW9wcy0+dmFyLnlvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldDsKKwlvcHMtPnZhci52bW9kZSA9IGluZm8tPnZhci52bW9kZTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGZiY29uX3JvdGF0ZV9jdyhzdHJ1Y3QgZmJjb25fb3BzICpvcHMpCit7CisJb3BzLT5ibW92ZSA9IGN3X2Jtb3ZlOworCW9wcy0+Y2xlYXIgPSBjd19jbGVhcjsKKwlvcHMtPnB1dGNzID0gY3dfcHV0Y3M7CisJb3BzLT5jbGVhcl9tYXJnaW5zID0gY3dfY2xlYXJfbWFyZ2luczsKKwlvcHMtPmN1cnNvciA9IGN3X2N1cnNvcjsKKwlvcHMtPnVwZGF0ZV9zdGFydCA9IGN3X3VwZGF0ZV9zdGFydDsKK30KK0VYUE9SVF9TWU1CT0woZmJjb25fcm90YXRlX2N3KTsKKworTU9EVUxFX0FVVEhPUigiQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzQHBvbC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbnNvbGUgUm90YXRpb24gKDkwIGRlZ3JlZXMpIFN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBkZDhmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3JvdGF0ZS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuYyAtLSBTb2Z0d2FyZSBSb3RhdGlvbgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA1IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhcyBAcG9sLm5ldD4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlICJmYmNvbi5oIgorI2luY2x1ZGUgImZiY29uX3JvdGF0ZS5oIgorCitzdGF0aWMgaW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMsCisJCQkgICAgIHN0cnVjdCBkaXNwbGF5ICpwKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlpbnQgbGVuLCBlcnIgPSAwOworCWludCBzX2NlbGxzaXplLCBkX2NlbGxzaXplLCBpOworCWNvbnN0IHU4ICpzcmM7CisJdTggKmRzdDsKKworCWlmICh2Yy0+dmNfZm9udC5kYXRhID09IG9wcy0+Zm9udGRhdGEgJiYKKwkgICAgcC0+Y29uX3JvdGF0ZSA9PSBvcHMtPmN1cl9yb3RhdGUpCisJCWdvdG8gZmluaXNoZWQ7CisKKwlzcmMgPSBvcHMtPmZvbnRkYXRhID0gdmMtPnZjX2ZvbnQuZGF0YTsKKwlvcHMtPmN1cl9yb3RhdGUgPSBwLT5jb25fcm90YXRlOworCWxlbiA9ICghcC0+dXNlcmZvbnQpID8gMjU2IDogRk5UQ0hBUkNOVChzcmMpOworCXNfY2VsbHNpemUgPSAoKHZjLT52Y19mb250LndpZHRoICsgNykvOCkgKgorCQl2Yy0+dmNfZm9udC5oZWlnaHQ7CisJZF9jZWxsc2l6ZSA9IHNfY2VsbHNpemU7CisKKwlpZiAob3BzLT5yb3RhdGUgPT0gRkJfUk9UQVRFX0NXIHx8CisJICAgIG9wcy0+cm90YXRlID09IEZCX1JPVEFURV9DQ1cpCisJCWRfY2VsbHNpemUgPSAoKHZjLT52Y19mb250LmhlaWdodCArIDcpLzgpICoKKwkJCXZjLT52Y19mb250LndpZHRoOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQorCQlpbmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKKworCWlmIChvcHMtPmZkX3NpemUgPCBkX2NlbGxzaXplICogbGVuKSB7CisJCWRzdCA9IGttYWxsb2MoZF9jZWxsc2l6ZSAqIGxlbiwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGRzdCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmaW5pc2hlZDsKKwkJfQorCisJCW9wcy0+ZmRfc2l6ZSA9IGRfY2VsbHNpemUgKiBsZW47CisJCWtmcmVlKG9wcy0+Zm9udGJ1ZmZlcik7CisJCW9wcy0+Zm9udGJ1ZmZlciA9IGRzdDsKKwl9CisKKwlkc3QgPSBvcHMtPmZvbnRidWZmZXI7CisJbWVtc2V0KGRzdCwgMCwgb3BzLT5mZF9zaXplKTsKKworCXN3aXRjaCAob3BzLT5yb3RhdGUpIHsKKwljYXNlIEZCX1JPVEFURV9VRDoKKwkJZm9yIChpID0gbGVuOyBpLS07ICkgeworCQkJcm90YXRlX3VkKHNyYywgZHN0LCB2Yy0+dmNfZm9udC53aWR0aCwKKwkJCQkgIHZjLT52Y19mb250LmhlaWdodCk7CisKKwkJCXNyYyArPSBzX2NlbGxzaXplOworCQkJZHN0ICs9IGRfY2VsbHNpemU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGQl9ST1RBVEVfQ1c6CisJCWZvciAoaSA9IGxlbjsgaS0tOyApIHsKKwkJCXJvdGF0ZV9jdyhzcmMsIGRzdCwgdmMtPnZjX2ZvbnQud2lkdGgsCisJCQkJICB2Yy0+dmNfZm9udC5oZWlnaHQpOworCQkJc3JjICs9IHNfY2VsbHNpemU7CisJCQlkc3QgKz0gZF9jZWxsc2l6ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEZCX1JPVEFURV9DQ1c6CisJCWZvciAoaSA9IGxlbjsgaS0tOyApIHsKKwkJCXJvdGF0ZV9jY3coc3JjLCBkc3QsIHZjLT52Y19mb250LndpZHRoLAorCQkJCSAgIHZjLT52Y19mb250LmhlaWdodCk7CisJCQlzcmMgKz0gc19jZWxsc2l6ZTsKKwkJCWRzdCArPSBkX2NlbGxzaXplOworCQl9CisJCWJyZWFrOworCX0KKworZmluaXNoZWQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBmYmNvbl9zZXRfcm90YXRlKHN0cnVjdCBmYmNvbl9vcHMgKm9wcykKK3sKKwlvcHMtPnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQ7CisKKwlzd2l0Y2gob3BzLT5yb3RhdGUpIHsKKwljYXNlIEZCX1JPVEFURV9DVzoKKwkJZmJjb25fcm90YXRlX2N3KG9wcyk7CisJCWJyZWFrOworCWNhc2UgRkJfUk9UQVRFX1VEOgorCQlmYmNvbl9yb3RhdGVfdWQob3BzKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9ST1RBVEVfQ0NXOgorCQlmYmNvbl9yb3RhdGVfY2N3KG9wcyk7CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0woZmJjb25fc2V0X3JvdGF0ZSk7CisKK01PRFVMRV9BVVRIT1IoIkFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25zb2xlIFJvdGF0aW9uIFN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuaCBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGM2NzIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3JvdGF0ZS5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuaCAtLSBTb2Z0d2FyZSBEaXNwbGF5IFJvdGF0aW9uCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDA1IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9GQkNPTl9ST1RBVEVfSAorI2RlZmluZSBfRkJDT05fUk9UQVRFX0gKKworI2RlZmluZSBGTlRDSEFSQ05UKGZkKQkoKChpbnQgKikoZmQpKVstM10pCisKKyNkZWZpbmUgR0VUVllSRVMocyxpKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHMgPT0gU0NST0xMX1JFRFJBVyB8fCBzID09IFNDUk9MTF9NT1ZFKSA/IFwKKyAgICAgICAgKGkpLT52YXIueXJlcyA6IChpKS0+dmFyLnlyZXNfdmlydHVhbDsgfSkKKworI2RlZmluZSBHRVRWWFJFUyhzLGkpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAocyA9PSBTQ1JPTExfUkVEUkFXIHx8IHMgPT0gU0NST0xMX01PVkUgfHwgIShpKS0+Zml4LnhwYW5zdGVwKSA/IFwKKyAgICAgICAgKGkpLT52YXIueHJlcyA6IChpKS0+dmFyLnhyZXNfdmlydHVhbDsgfSkKKworLyoKKyAqIFRoZSBiaXRtYXAgaXMgYWx3YXlzIGJpZyBlbmRpYW4KKyAqLworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2RlZmluZSBGQkNPTl9CSVQoYikgKDcgLSAoYikpCisjZWxzZQorI2RlZmluZSBGQkNPTl9CSVQoYikgKGIpCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgcGF0dGVybl90ZXN0X2JpdCh1MzIgeCwgdTMyIHksIHUzMiBwaXRjaCwgY29uc3QgY2hhciAqcGF0KQoreworCXUzMiB0bXAgPSAoeSAqIHBpdGNoKSArIHgsIGluZGV4ID0gdG1wIC8gOCwgIGJpdCA9IHRtcCAlIDg7CisKKwlwYXQgKz1pbmRleDsKKwlyZXR1cm4gKHRlc3RfYml0KEZCQ09OX0JJVChiaXQpLCAodm9pZCAqKXBhdCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGF0dGVybl9zZXRfYml0KHUzMiB4LCB1MzIgeSwgdTMyIHBpdGNoLCBjaGFyICpwYXQpCit7CisJdTMyIHRtcCA9ICh5ICogcGl0Y2gpICsgeCwgaW5kZXggPSB0bXAgLyA4LCBiaXQgPSB0bXAgJSA4OworCisJcGF0ICs9IGluZGV4OworCXNldF9iaXQoRkJDT05fQklUKGJpdCksICh2b2lkICopcGF0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJvdGF0ZV91ZChjb25zdCBjaGFyICppbiwgY2hhciAqb3V0LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCit7CisJaW50IGksIGo7CisJaW50IHNoaWZ0ID0gd2lkdGggJSA4OworCisJd2lkdGggPSAod2lkdGggKyA3KSAmIH43OworCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CisJCQlpZiAocGF0dGVybl90ZXN0X2JpdChqLCBpLCB3aWR0aCwgaW4pKQorCQkJCXBhdHRlcm5fc2V0X2JpdCh3aWR0aCAtICgxICsgaiArIHNoaWZ0KSwKKwkJCQkJCWhlaWdodCAtICgxICsgaSksCisJCQkJCQl3aWR0aCwgb3V0KTsKKwkJfQorCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcm90YXRlX2N3KGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwlpbnQgaSwgaiwgaCA9IGhlaWdodCwgdyA9IHdpZHRoOworCWludCBzaGlmdCA9ICg4IC0gKGhlaWdodCAlIDgpKSAmIDc7CisKKwl3aWR0aCA9ICh3aWR0aCArIDcpICYgfjc7CisJaGVpZ2h0ID0gKGhlaWdodCArIDcpICYgfjc7CisKKwlmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3OyBqKyspIHsKKwkJCWlmIChwYXR0ZXJuX3Rlc3RfYml0KGosIGksIHdpZHRoLCBpbikpCisJCQkJcGF0dGVybl9zZXRfYml0KGhlaWdodCAtIDEgLSBpIC0gc2hpZnQsIGosCisJCQkJCQloZWlnaHQsIG91dCk7CisKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJvdGF0ZV9jY3coY29uc3QgY2hhciAqaW4sIGNoYXIgKm91dCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCWludCBpLCBqLCBoID0gaGVpZ2h0LCB3ID0gd2lkdGg7CisJaW50IHNoaWZ0ID0gd2lkdGggJSA4OworCisJd2lkdGggPSAod2lkdGggKyA3KSAmIH43OworCWhlaWdodCA9IChoZWlnaHQgKyA3KSAmIH43OworCisJZm9yIChpID0gMDsgaSA8IGg7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgdzsgaisrKSB7CisJCQlpZiAocGF0dGVybl90ZXN0X2JpdChqLCBpLCB3aWR0aCwgaW4pKQorCQkJCXBhdHRlcm5fc2V0X2JpdChpLCB3aWR0aCAtIDEgLSBqIC0gc2hpZnQsCisJCQkJCQloZWlnaHQsIG91dCk7CisJCX0KKwl9Cit9CisKK2V4dGVybiB2b2lkIGZiY29uX3JvdGF0ZV9jdyhzdHJ1Y3QgZmJjb25fb3BzICpvcHMpOworZXh0ZXJuIHZvaWQgZmJjb25fcm90YXRlX3VkKHN0cnVjdCBmYmNvbl9vcHMgKm9wcyk7CitleHRlcm4gdm9pZCBmYmNvbl9yb3RhdGVfY2N3KHN0cnVjdCBmYmNvbl9vcHMgKm9wcyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3VkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxZDlkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jIC0tIFNvZnR3YXJlIFJvdGF0aW9uIC0gMTgwIGRlZ3JlZXMKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXMgQHBvbC5uZXQ+CisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiZmJjb24uaCIKKyNpbmNsdWRlICJmYmNvbl9yb3RhdGUuaCIKKworLyoKKyAqIFJvdGF0aW9uIDE4MCBkZWdyZWVzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHVkX3VwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCisJCQkJICBzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaW50IGksIG9mZnNldCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKKwlpbnQgd2lkdGggPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KSA+PiAzOworCXVuc2lnbmVkIGludCBjZWxsc2l6ZSA9IHZjLT52Y19mb250LmhlaWdodCAqIHdpZHRoOworCXU4IGM7CisKKwlvZmZzZXQgPSBvZmZzZXQgKiB3aWR0aDsKKworCWZvciAoaSA9IDA7IGkgPCBjZWxsc2l6ZTsgaSsrKSB7CisJCWMgPSBzcmNbaV07CisJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FICYmIGkgPCBvZmZzZXQpCisJCQljID0gMHhmZjsKKwkJaWYgKGF0dHJpYnV0ZSAmIEZCQ09OX0FUVFJJQlVURV9CT0xEKQorCQkJYyB8PSBjIDw8IDE7CisJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfUkVWRVJTRSkKKwkJCWMgPSB+YzsKKwkJZHN0W2ldID0gYzsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgdWRfYm1vdmUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LAorCQkgICAgIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCXN0cnVjdCBmYl9jb3B5YXJlYSBhcmVhOworCXUzMiB2eXJlcyA9IEdFVFZZUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCXUzMiB2eHJlcyA9IEdFVFZYUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCisJYXJlYS5zeSA9IHZ5cmVzIC0gKChzeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOworCWFyZWEuc3ggPSB2eHJlcyAtICgoc3ggKyB3aWR0aCkgKiB2Yy0+dmNfZm9udC53aWR0aCk7CisJYXJlYS5keSA9IHZ5cmVzIC0gKChkeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOworCWFyZWEuZHggPSB2eHJlcyAtICgoZHggKyB3aWR0aCkgKiB2Yy0+dmNfZm9udC53aWR0aCk7CisJYXJlYS5oZWlnaHQgPSBoZWlnaHQgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJYXJlYS53aWR0aCAgPSB3aWR0aCAqIHZjLT52Y19mb250LndpZHRoOworCisJaW5mby0+ZmJvcHMtPmZiX2NvcHlhcmVhKGluZm8sICZhcmVhKTsKK30KKworc3RhdGljIHZvaWQgdWRfY2xlYXIoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LAorCQkgICAgIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQoreworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDEzIDogMTI7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlyZWdpb24uY29sb3IgPSBhdHRyX2JnY29sX2VjKGJnc2hpZnQsdmMpOworCXJlZ2lvbi5keSA9IHZ5cmVzIC0gKChzeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOworCXJlZ2lvbi5keCA9IHZ4cmVzIC0gKChzeCArIHdpZHRoKSAqICB2Yy0+dmNfZm9udC53aWR0aCk7CisJcmVnaW9uLndpZHRoID0gd2lkdGggKiB2Yy0+dmNfZm9udC53aWR0aDsKKwlyZWdpb24uaGVpZ2h0ID0gaGVpZ2h0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXJlZ2lvbi5yb3AgPSBST1BfQ09QWTsKKworCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkX3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgY29uc3QgdTE2ICpzLCB1MzIgYXR0ciwgdTMyIGNudCwKKwkJCQkgICAgdTMyIGRfcGl0Y2gsIHUzMiBzX3BpdGNoLCB1MzIgY2VsbHNpemUsCisJCQkJICAgIHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsIHU4ICpidWYsIHU4ICpkc3QpCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUxNiBjaGFybWFzayA9IHZjLT52Y19oaV9mb250X21hc2sgPyAweDFmZiA6IDB4ZmY7CisJdTMyIGlkeCA9IHZjLT52Y19mb250LndpZHRoID4+IDM7CisJdTggKnNyYzsKKworCXdoaWxlIChjbnQtLSkgeworCQlzcmMgPSBvcHMtPmZvbnRidWZmZXIgKyAoc2NyX3JlYWR3KHMtLSkgJiBjaGFybWFzaykqY2VsbHNpemU7CisKKwkJaWYgKGF0dHIpIHsKKwkJCXVkX3VwZGF0ZV9hdHRyKGJ1Ziwgc3JjLCBhdHRyLCB2Yyk7CisJCQlzcmMgPSBidWY7CisJCX0KKworCQlpZiAobGlrZWx5KGlkeCA9PSAxKSkKKwkJCV9fZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBpZHgsCisJCQkJCQlpbWFnZS0+aGVpZ2h0KTsKKwkJZWxzZQorCQkJZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBpZHgsCisJCQkJCSAgICAgIGltYWdlLT5oZWlnaHQpOworCisJCWRzdCArPSBzX3BpdGNoOworCX0KKworCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRfcHV0Y3NfdW5hbGlnbmVkKHN0cnVjdCB2Y19kYXRhICp2YywKKwkJCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgdTE2ICpzLAorCQkJCSAgICAgIHUzMiBhdHRyLCB1MzIgY250LCB1MzIgZF9waXRjaCwKKwkJCQkgICAgICB1MzIgc19waXRjaCwgdTMyIGNlbGxzaXplLAorCQkJCSAgICAgIHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsIHU4ICpidWYsCisJCQkJICAgICAgdTggKmRzdCkKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJdTE2IGNoYXJtYXNrID0gdmMtPnZjX2hpX2ZvbnRfbWFzayA/IDB4MWZmIDogMHhmZjsKKwl1MzIgc2hpZnRfbG93ID0gMCwgbW9kID0gdmMtPnZjX2ZvbnQud2lkdGggJSA4OworCXUzMiBzaGlmdF9oaWdoID0gODsKKwl1MzIgaWR4ID0gdmMtPnZjX2ZvbnQud2lkdGggPj4gMzsKKwl1OCAqc3JjOworCisJd2hpbGUgKGNudC0tKSB7CisJCXNyYyA9IG9wcy0+Zm9udGJ1ZmZlciArIChzY3JfcmVhZHcocy0tKSAmIGNoYXJtYXNrKSpjZWxsc2l6ZTsKKworCQlpZiAoYXR0cikgeworCQkJdWRfdXBkYXRlX2F0dHIoYnVmLCBzcmMsIGF0dHIsIHZjKTsKKwkJCXNyYyA9IGJ1ZjsKKwkJfQorCisJCWZiX3BhZF91bmFsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBpZHgsCisJCQkJCWltYWdlLT5oZWlnaHQsIHNoaWZ0X2hpZ2gsCisJCQkJCXNoaWZ0X2xvdywgbW9kKTsKKwkJc2hpZnRfbG93ICs9IG1vZDsKKwkJZHN0ICs9IChzaGlmdF9sb3cgPj0gOCkgPyBzX3BpdGNoIDogc19waXRjaCAtIDE7CisJCXNoaWZ0X2xvdyAmPSA3OworCQlzaGlmdF9oaWdoID0gOCAtIHNoaWZ0X2xvdzsKKwl9CisKKwlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworfQorCitzdGF0aWMgdm9pZCB1ZF9wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywgaW50IGNvdW50LCBpbnQgeXksIGludCB4eCwKKwkJICAgICAgaW50IGZnLCBpbnQgYmcpCit7CisJc3RydWN0IGZiX2ltYWdlIGltYWdlOworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUzMiB3aWR0aCA9ICh2Yy0+dmNfZm9udC53aWR0aCArIDcpLzg7CisJdTMyIGNlbGxzaXplID0gd2lkdGggKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJdTMyIG1heGNudCA9IGluZm8tPnBpeG1hcC5zaXplL2NlbGxzaXplOworCXUzMiBzY2FuX2FsaWduID0gaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gLSAxOworCXUzMiBidWZfYWxpZ24gPSBpbmZvLT5waXhtYXAuYnVmX2FsaWduIC0gMTsKKwl1MzIgbW9kID0gdmMtPnZjX2ZvbnQud2lkdGggJSA4LCBjbnQsIHBpdGNoLCBzaXplOworCXUzMiBhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIHNjcl9yZWFkdyhzKSk7CisJdTggKmRzdCwgKmJ1ZiA9IE5VTEw7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlpZiAoIW9wcy0+Zm9udGJ1ZmZlcikKKwkJcmV0dXJuOworCisJaW1hZ2UuZmdfY29sb3IgPSBmZzsKKwlpbWFnZS5iZ19jb2xvciA9IGJnOworCWltYWdlLmR5ID0gdnlyZXMgLSAoKHl5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0KSArIHZjLT52Y19mb250LmhlaWdodCk7CisJaW1hZ2UuZHggPSB2eHJlcyAtICgoeHggKyBjb3VudCkgKiB2Yy0+dmNfZm9udC53aWR0aCk7CisJaW1hZ2UuaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWltYWdlLmRlcHRoID0gMTsKKworCWlmIChhdHRyaWJ1dGUpIHsKKwkJYnVmID0ga21hbGxvYyhjZWxsc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKQorCQkJcmV0dXJuOworCX0KKworCXMgKz0gY291bnQgLSAxOworCisJd2hpbGUgKGNvdW50KSB7CisJCWlmIChjb3VudCA+IG1heGNudCkKKwkJCWNudCA9IG1heGNudDsKKwkJZWxzZQorCQkJY250ID0gY291bnQ7CisKKwkJaW1hZ2Uud2lkdGggPSB2Yy0+dmNfZm9udC53aWR0aCAqIGNudDsKKwkJcGl0Y2ggPSAoKGltYWdlLndpZHRoICsgNykgPj4gMykgKyBzY2FuX2FsaWduOworCQlwaXRjaCAmPSB+c2Nhbl9hbGlnbjsKKwkJc2l6ZSA9IHBpdGNoICogaW1hZ2UuaGVpZ2h0ICsgYnVmX2FsaWduOworCQlzaXplICY9IH5idWZfYWxpZ247CisJCWRzdCA9IGZiX2dldF9idWZmZXJfb2Zmc2V0KGluZm8sICZpbmZvLT5waXhtYXAsIHNpemUpOworCQlpbWFnZS5kYXRhID0gZHN0OworCisJCWlmICghbW9kKQorCQkJdWRfcHV0Y3NfYWxpZ25lZCh2YywgaW5mbywgcywgYXR0cmlidXRlLCBjbnQsIHBpdGNoLAorCQkJCQkgd2lkdGgsIGNlbGxzaXplLCAmaW1hZ2UsIGJ1ZiwgZHN0KTsKKwkJZWxzZQorCQkJdWRfcHV0Y3NfdW5hbGlnbmVkKHZjLCBpbmZvLCBzLCBhdHRyaWJ1dGUsIGNudCwgcGl0Y2gsCisJCQkJCSAgIHdpZHRoLCBjZWxsc2l6ZSwgJmltYWdlLAorCQkJCQkgICBidWYsIGRzdCk7CisKKwkJaW1hZ2UuZHggKz0gaW1hZ2Uud2lkdGg7CisJCWNvdW50IC09IGNudDsKKwkJcyAtPSBjbnQ7CisJCXh4ICs9IGNudDsKKwl9CisKKwkvKiBidWYgaXMgYWx3YXlzIE5VTEwgZXhjZXB0IHdoZW4gaW4gbW9ub2Nocm9tZSBtb2RlLCBzbyBpbiB0aGlzIGNhc2UKKwkgICBpdCdzIGEgZ2FpbiB0byBjaGVjayBidWYgYWdhaW5zdCBOVUxMIGV2ZW4gdGhvdWdoIGtmcmVlKCkgaGFuZGxlcworCSAgIE5VTEwgcG9pbnRlcnMganVzdCBmaW5lICovCisJaWYgKHVubGlrZWx5KGJ1ZikpCisJCWtmcmVlKGJ1Zik7CisKK30KKworc3RhdGljIHZvaWQgdWRfY2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICBpbnQgYm90dG9tX29ubHkpCit7CisJdW5zaWduZWQgaW50IGN3ID0gdmMtPnZjX2ZvbnQud2lkdGg7CisJdW5zaWduZWQgaW50IGNoID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXVuc2lnbmVkIGludCBydyA9IGluZm8tPnZhci54cmVzIC0gKHZjLT52Y19jb2xzKmN3KTsKKwl1bnNpZ25lZCBpbnQgYmggPSBpbmZvLT52YXIueXJlcyAtICh2Yy0+dmNfcm93cypjaCk7CisJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDEzIDogMTI7CisKKwlyZWdpb24uY29sb3IgPSBhdHRyX2JnY29sX2VjKGJnc2hpZnQsdmMpOworCXJlZ2lvbi5yb3AgPSBST1BfQ09QWTsKKworCWlmIChydyAmJiAhYm90dG9tX29ubHkpIHsKKwkJcmVnaW9uLmR5ID0gMDsKKwkJcmVnaW9uLmR4ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJCXJlZ2lvbi53aWR0aCAgPSBydzsKKwkJcmVnaW9uLmhlaWdodCA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CisJCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKKwl9CisKKwlpZiAoYmgpIHsKKwkJcmVnaW9uLmR5ID0gaW5mby0+dmFyLnlvZmZzZXQ7CisJCXJlZ2lvbi5keCA9IGluZm8tPnZhci54b2Zmc2V0OworICAgICAgICAgICAgICAgIHJlZ2lvbi5oZWlnaHQgID0gYmg7CisgICAgICAgICAgICAgICAgcmVnaW9uLndpZHRoID0gaW5mby0+dmFyLnhyZXM7CisJCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkX2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IG1vZGUsIGludCBzb2Z0YmFja19saW5lcywKKwkJICAgICAgaW50IGZnLCBpbnQgYmcpCit7CisJc3RydWN0IGZiX2N1cnNvciBjdXJzb3I7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gKHN0cnVjdCBmYmNvbl9vcHMgKikgaW5mby0+ZmJjb25fcGFyOworCXVuc2lnbmVkIHNob3J0IGNoYXJtYXNrID0gdmMtPnZjX2hpX2ZvbnRfbWFzayA/IDB4MWZmIDogMHhmZjsKKwlpbnQgdyA9ICh2Yy0+dmNfZm9udC53aWR0aCArIDcpID4+IDMsIGM7CisJaW50IHkgPSByZWFsX3kocCwgdmMtPnZjX3kpOworCWludCBhdHRyaWJ1dGUsIHVzZV9zdyA9ICh2Yy0+dmNfY3Vyc29yX3R5cGUgJiAweDEwKTsKKwlpbnQgZXJyID0gMSwgZHgsIGR5OworCWNoYXIgKnNyYzsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKwl1MzIgdnhyZXMgPSBHRVRWWFJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWlmICghb3BzLT5mb250YnVmZmVyKQorCQlyZXR1cm47CisKKwljdXJzb3Iuc2V0ID0gMDsKKworCWlmIChzb2Z0YmFja19saW5lcykgeworCQlpZiAoeSArIHNvZnRiYWNrX2xpbmVzID49IHZjLT52Y19yb3dzKSB7CisJCQltb2RlID0gQ01fRVJBU0U7CisJCQlvcHMtPmN1cnNvcl9mbGFzaCA9IDA7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJeSArPSBzb2Z0YmFja19saW5lczsKKwl9CisKKyAJYyA9IHNjcl9yZWFkdygodTE2ICopIHZjLT52Y19wb3MpOworCWF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7CisJc3JjID0gb3BzLT5mb250YnVmZmVyICsgKChjICYgY2hhcm1hc2spICogKHcgKiB2Yy0+dmNfZm9udC5oZWlnaHQpKTsKKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5kYXRhICE9IHNyYyB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5kYXRhID0gc3JjOworCSAgICBjdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRJTUFHRTsKKwl9CisKKwlpZiAoYXR0cmlidXRlKSB7CisJCXU4ICpkc3Q7CisKKwkJZHN0ID0ga21hbGxvYyh3ICogdmMtPnZjX2ZvbnQuaGVpZ2h0LCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkc3QpCisJCQlyZXR1cm47CisJCWtmcmVlKG9wcy0+Y3Vyc29yX2RhdGEpOworCQlvcHMtPmN1cnNvcl9kYXRhID0gZHN0OworCQl1ZF91cGRhdGVfYXR0cihkc3QsIHNyYywgYXR0cmlidXRlLCB2Yyk7CisJCXNyYyA9IGRzdDsKKwl9CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZmdfY29sb3IgIT0gZmcgfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuYmdfY29sb3IgIT0gYmcgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZmdfY29sb3IgPSBmZzsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuYmdfY29sb3IgPSBiZzsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUQ01BUDsKKwl9CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0ICE9IHZjLT52Y19mb250LmhlaWdodCB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aCAhPSB2Yy0+dmNfZm9udC53aWR0aCB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5oZWlnaHQgPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLndpZHRoID0gdmMtPnZjX2ZvbnQud2lkdGg7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFNJWkU7CisJfQorCisJZHkgPSB2eXJlcyAtICgoeSAqIHZjLT52Y19mb250LmhlaWdodCkgKyB2Yy0+dmNfZm9udC5oZWlnaHQpOworCWR4ID0gdnhyZXMgLSAoKHZjLT52Y194ICogdmMtPnZjX2ZvbnQud2lkdGgpICsgdmMtPnZjX2ZvbnQud2lkdGgpOworCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR4ICE9IGR4IHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR5ICE9IGR5IHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR4ID0gZHg7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR5ID0gZHk7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFBPUzsKKwl9CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaG90LnggfHwgb3BzLT5jdXJzb3Jfc3RhdGUuaG90LnkgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaG90LnggPSBjdXJzb3IuaG90LnkgPSAwOworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRIT1Q7CisJfQorCisJaWYgKGN1cnNvci5zZXQgJiBGQl9DVVJfU0VUU0laRSB8fAorCSAgICB2Yy0+dmNfY3Vyc29yX3R5cGUgIT0gcC0+Y3Vyc29yX3NoYXBlIHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2sgPT0gTlVMTCB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQljaGFyICptYXNrID0ga21hbGxvYyh3KnZjLT52Y19mb250LmhlaWdodCwgR0ZQX0FUT01JQyk7CisJCWludCBjdXJfaGVpZ2h0LCBzaXplLCBpID0gMDsKKwkJdTggbXNrID0gMHhmZjsKKworCQlpZiAoIW1hc2spCisJCQlyZXR1cm47CisKKwkJa2ZyZWUob3BzLT5jdXJzb3Jfc3RhdGUubWFzayk7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLm1hc2sgPSBtYXNrOworCisJCXAtPmN1cnNvcl9zaGFwZSA9IHZjLT52Y19jdXJzb3JfdHlwZTsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUU0hBUEU7CisKKwkJc3dpdGNoIChwLT5jdXJzb3Jfc2hhcGUgJiBDVVJfSFdNQVNLKSB7CisJCWNhc2UgQ1VSX05PTkU6CisJCQljdXJfaGVpZ2h0ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIENVUl9VTkRFUkxJTkU6CisJCQljdXJfaGVpZ2h0ID0gKHZjLT52Y19mb250LmhlaWdodCA8IDEwKSA/IDEgOiAyOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0xPV0VSX1RISVJEOgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodC8zOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0xPV0VSX0hBTEY6CisJCQljdXJfaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0ID4+IDE7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfVFdPX1RISVJEUzoKKwkJCWN1cl9oZWlnaHQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDw8IDEpLzM7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfQkxPQ0s6CisJCWRlZmF1bHQ6CisJCQljdXJfaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQkJYnJlYWs7CisJCX0KKworCQlzaXplID0gY3VyX2hlaWdodCAqIHc7CisKKwkJd2hpbGUgKHNpemUtLSkKKwkJCW1hc2tbaSsrXSA9IG1zazsKKworCQlzaXplID0gKHZjLT52Y19mb250LmhlaWdodCAtIGN1cl9oZWlnaHQpICogdzsKKworCQl3aGlsZSAoc2l6ZS0tKQorCQkJbWFza1tpKytdID0gfm1zazsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENNX0VSQVNFOgorCQlvcHMtPmN1cnNvcl9zdGF0ZS5lbmFibGUgPSAwOworCQlicmVhazsKKwljYXNlIENNX0RSQVc6CisJY2FzZSBDTV9NT1ZFOgorCWRlZmF1bHQ6CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmVuYWJsZSA9ICh1c2Vfc3cpID8gMCA6IDE7CisJCWJyZWFrOworCX0KKworCWN1cnNvci5pbWFnZS5kYXRhID0gc3JjOworCWN1cnNvci5pbWFnZS5mZ19jb2xvciA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmZnX2NvbG9yOworCWN1cnNvci5pbWFnZS5iZ19jb2xvciA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmJnX2NvbG9yOworCWN1cnNvci5pbWFnZS5keCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR4OworCWN1cnNvci5pbWFnZS5keSA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR5OworCWN1cnNvci5pbWFnZS5oZWlnaHQgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5oZWlnaHQ7CisJY3Vyc29yLmltYWdlLndpZHRoID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2Uud2lkdGg7CisJY3Vyc29yLmhvdC54ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaG90Lng7CisJY3Vyc29yLmhvdC55ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaG90Lnk7CisJY3Vyc29yLm1hc2sgPSBvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrOworCWN1cnNvci5lbmFibGUgPSBvcHMtPmN1cnNvcl9zdGF0ZS5lbmFibGU7CisJY3Vyc29yLmltYWdlLmRlcHRoID0gMTsKKwljdXJzb3Iucm9wID0gUk9QX1hPUjsKKworCWlmIChpbmZvLT5mYm9wcy0+ZmJfY3Vyc29yKQorCQllcnIgPSBpbmZvLT5mYm9wcy0+ZmJfY3Vyc29yKGluZm8sICZjdXJzb3IpOworCisJaWYgKGVycikKKwkJc29mdF9jdXJzb3IoaW5mbywgJmN1cnNvcik7CisKKwlvcHMtPmN1cnNvcl9yZXNldCA9IDA7Cit9CisKK2ludCB1ZF91cGRhdGVfc3RhcnQoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbb3BzLT5jdXJyY29uXTsKKwl1MzIgeG9mZnNldCwgeW9mZnNldDsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKwl1MzIgdnhyZXMgPSBHRVRWWFJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKwlpbnQgZXJyOworCisJeG9mZnNldCA9ICh2eHJlcyAtIGluZm8tPnZhci54cmVzKSAtIG9wcy0+dmFyLnhvZmZzZXQ7CisJeW9mZnNldCA9ICh2eXJlcyAtIGluZm8tPnZhci55cmVzKSAtIG9wcy0+dmFyLnlvZmZzZXQ7CisJb3BzLT52YXIueG9mZnNldCA9IHhvZmZzZXQ7CisJb3BzLT52YXIueW9mZnNldCA9IHlvZmZzZXQ7CisJZXJyID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJm9wcy0+dmFyKTsKKwlvcHMtPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJb3BzLT52YXIueW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworCW9wcy0+dmFyLnZtb2RlID0gaW5mby0+dmFyLnZtb2RlOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZmJjb25fcm90YXRlX3VkKHN0cnVjdCBmYmNvbl9vcHMgKm9wcykKK3sKKwlvcHMtPmJtb3ZlID0gdWRfYm1vdmU7CisJb3BzLT5jbGVhciA9IHVkX2NsZWFyOworCW9wcy0+cHV0Y3MgPSB1ZF9wdXRjczsKKwlvcHMtPmNsZWFyX21hcmdpbnMgPSB1ZF9jbGVhcl9tYXJnaW5zOworCW9wcy0+Y3Vyc29yID0gdWRfY3Vyc29yOworCW9wcy0+dXBkYXRlX3N0YXJ0ID0gdWRfdXBkYXRlX3N0YXJ0OworfQorRVhQT1JUX1NZTUJPTChmYmNvbl9yb3RhdGVfdWQpOworCitNT0RVTEVfQVVUSE9SKCJBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29uc29sZSBSb3RhdGlvbiAoMTgwIGRlZ3JlZXMpIFN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3RpbGVibGl0LmMKaW5kZXggN2Y3NmUyYy4uY2IyNTMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3RpbGVibGl0LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3RpbGVibGl0LmMKQEAgLTExOCw2ICsxMTgsMTggQEAKIAlpbmZvLT50aWxlb3BzLT5mYl90aWxlY3Vyc29yKGluZm8sICZjdXJzb3IpOwogfQogCitzdGF0aWMgaW50IHRpbGVfdXBkYXRlX3N0YXJ0KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlpbnQgZXJyOworCisJZXJyID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJm9wcy0+dmFyKTsKKwlvcHMtPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJb3BzLT52YXIueW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworCW9wcy0+dmFyLnZtb2RlID0gaW5mby0+dmFyLnZtb2RlOworCXJldHVybiBlcnI7Cit9CisKIHZvaWQgZmJjb25fc2V0X3RpbGVvcHMoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJICAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLCBzdHJ1Y3QgZmJjb25fb3BzICpvcHMpCiB7CkBAIC0xMjgsNiArMTQwLDcgQEAKIAlvcHMtPnB1dGNzID0gdGlsZV9wdXRjczsKIAlvcHMtPmNsZWFyX21hcmdpbnMgPSB0aWxlX2NsZWFyX21hcmdpbnM7CiAJb3BzLT5jdXJzb3IgPSB0aWxlX2N1cnNvcjsKKwlvcHMtPnVwZGF0ZV9zdGFydCA9IHRpbGVfdXBkYXRlX3N0YXJ0OwogCiAJaWYgKHApIHsKIAkJbWFwLndpZHRoID0gdmMtPnZjX2ZvbnQud2lkdGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggZTI2NjdkZC4uOWYxODAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zMjMsOSArMzI0LDEwMyBAQAogCWNvbnN0IHN0cnVjdCBsaW51eF9sb2dvICpsb2dvOwogfSBmYl9sb2dvOwogCi1pbnQgZmJfcHJlcGFyZV9sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgZmJfcm90YXRlX2xvZ29fdWQoY29uc3QgdTggKmluLCB1OCAqb3V0LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCit7CisJdTMyIHNpemUgPSB3aWR0aCAqIGhlaWdodCwgaTsKKworCW91dCArPSBzaXplIC0gMTsKKworCWZvciAoaSA9IHNpemU7IGktLTsgKQorCQkqb3V0LS0gPSAqaW4rKzsKK30KKworc3RhdGljIHZvaWQgZmJfcm90YXRlX2xvZ29fY3coY29uc3QgdTggKmluLCB1OCAqb3V0LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCit7CisJaW50IGksIGosIHcgPSB3aWR0aCAtIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspCisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQorCQkJb3V0W2hlaWdodCAqIGogKyB3IC0gaV0gPSAqaW4rKzsKK30KKworc3RhdGljIHZvaWQgZmJfcm90YXRlX2xvZ29fY2N3KGNvbnN0IHU4ICppbiwgdTggKm91dCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCWludCBpLCBqLCB3ID0gd2lkdGggLSAxOworCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCW91dFtoZWlnaHQgKiAodyAtIGopICsgaV0gPSAqaW4rKzsKK30KKworc3RhdGljIHZvaWQgZmJfcm90YXRlX2xvZ28oc3RydWN0IGZiX2luZm8gKmluZm8sIHU4ICpkc3QsCisJCQkgICBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCBpbnQgcm90YXRlKQoreworCXUzMiB0bXA7CisKKwlpZiAocm90YXRlID09IEZCX1JPVEFURV9VRCkgeworCQlpbWFnZS0+ZHggPSBpbmZvLT52YXIueHJlcyAtIGltYWdlLT53aWR0aDsKKwkJaW1hZ2UtPmR5ID0gaW5mby0+dmFyLnlyZXMgLSBpbWFnZS0+aGVpZ2h0OworCQlmYl9yb3RhdGVfbG9nb191ZChpbWFnZS0+ZGF0YSwgZHN0LCBpbWFnZS0+d2lkdGgsCisJCQkJICBpbWFnZS0+aGVpZ2h0KTsKKwl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ1cpIHsKKwkJdG1wID0gaW1hZ2UtPndpZHRoOworCQlpbWFnZS0+d2lkdGggPSBpbWFnZS0+aGVpZ2h0OworCQlpbWFnZS0+aGVpZ2h0ID0gdG1wOworCQlpbWFnZS0+ZHggPSBpbmZvLT52YXIueHJlcyAtIGltYWdlLT5oZWlnaHQ7CisJCWZiX3JvdGF0ZV9sb2dvX2N3KGltYWdlLT5kYXRhLCBkc3QsIGltYWdlLT53aWR0aCwKKwkJCQkgIGltYWdlLT5oZWlnaHQpOworCX0gZWxzZSBpZiAocm90YXRlID09IEZCX1JPVEFURV9DQ1cpIHsKKwkJdG1wID0gaW1hZ2UtPndpZHRoOworCQlpbWFnZS0+d2lkdGggPSBpbWFnZS0+aGVpZ2h0OworCQlpbWFnZS0+aGVpZ2h0ID0gdG1wOworCQlpbWFnZS0+ZHkgPSBpbmZvLT52YXIueXJlcyAtIGltYWdlLT53aWR0aDsKKwkJZmJfcm90YXRlX2xvZ29fY2N3KGltYWdlLT5kYXRhLCBkc3QsIGltYWdlLT53aWR0aCwKKwkJCQkgICBpbWFnZS0+aGVpZ2h0KTsKKwl9CisKKwlpbWFnZS0+ZGF0YSA9IGRzdDsKK30KKworc3RhdGljIHZvaWQgZmJfZG9fc2hvd19sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLAorCQkJICAgIGludCByb3RhdGUpCit7CisJaW50IHg7CisKKwlpZiAocm90YXRlID09IEZCX1JPVEFURV9VUikgeworCQlmb3IgKHggPSAwOyB4IDwgbnVtX29ubGluZV9jcHVzKCkgJiYKKwkJCSAgICAgeCAqIChmYl9sb2dvLmxvZ28tPndpZHRoICsgOCkgPD0KKwkJCSAgICAgaW5mby0+dmFyLnhyZXMgLSBmYl9sb2dvLmxvZ28tPndpZHRoOyB4KyspIHsKKwkJCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCQkJaW1hZ2UtPmR4ICs9IGZiX2xvZ28ubG9nby0+d2lkdGggKyA4OworCQl9CisJfSBlbHNlIGlmIChyb3RhdGUgPT0gRkJfUk9UQVRFX1VEKSB7CisJCWZvciAoeCA9IDA7IHggPCBudW1fb25saW5lX2NwdXMoKSAmJgorCQkJICAgICB4ICogKGZiX2xvZ28ubG9nby0+d2lkdGggKyA4KSA8PQorCQkJICAgICBpbmZvLT52YXIueHJlcyAtIGZiX2xvZ28ubG9nby0+d2lkdGg7IHgrKykgeworCQkJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCQlpbWFnZS0+ZHggLT0gZmJfbG9nby5sb2dvLT53aWR0aCArIDg7CisJCX0KKwl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ1cpIHsKKwkJZm9yICh4ID0gMDsgeCA8IG51bV9vbmxpbmVfY3B1cygpICYmCisJCQkgICAgIHggKiAoZmJfbG9nby5sb2dvLT53aWR0aCArIDgpIDw9CisJCQkgICAgIGluZm8tPnZhci55cmVzIC0gZmJfbG9nby5sb2dvLT53aWR0aDsgeCsrKSB7CisJCQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJCWltYWdlLT5keSArPSBmYl9sb2dvLmxvZ28tPndpZHRoICsgODsKKwkJfQorCX0gZWxzZSBpZiAocm90YXRlID09IEZCX1JPVEFURV9DQ1cpIHsKKwkJZm9yICh4ID0gMDsgeCA8IG51bV9vbmxpbmVfY3B1cygpICYmCisJCQkgICAgIHggKiAoZmJfbG9nby5sb2dvLT53aWR0aCArIDgpIDw9CisJCQkgICAgIGluZm8tPnZhci55cmVzIC0gZmJfbG9nby5sb2dvLT53aWR0aDsgeCsrKSB7CisJCQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJCWltYWdlLT5keSAtPSBmYl9sb2dvLmxvZ28tPndpZHRoICsgODsKKwkJfQorCX0KK30KKworaW50IGZiX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHJvdGF0ZSkKIHsKIAlpbnQgZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCk7CisJaW50IHlyZXM7CiAKIAltZW1zZXQoJmZiX2xvZ28sIDAsIHNpemVvZihzdHJ1Y3QgbG9nb19kYXRhKSk7CiAKQEAgLTM1OCwxMCArNDUzLDE2IEBACiAJLyogUmV0dXJuIGlmIG5vIHN1aXRhYmxlIGxvZ28gd2FzIGZvdW5kICovCiAJZmJfbG9nby5sb2dvID0gZmJfZmluZF9sb2dvKGRlcHRoKTsKIAkKLQlpZiAoIWZiX2xvZ28ubG9nbyB8fCBmYl9sb2dvLmxvZ28tPmhlaWdodCA+IGluZm8tPnZhci55cmVzKSB7CisJaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfVVIgfHwgcm90YXRlID09IEZCX1JPVEFURV9VRCkKKwkJeXJlcyA9IGluZm8tPnZhci55cmVzOworCWVsc2UKKwkJeXJlcyA9IGluZm8tPnZhci54cmVzOworCisJaWYgKGZiX2xvZ28ubG9nbyAmJiBmYl9sb2dvLmxvZ28tPmhlaWdodCA+IHlyZXMpIHsKIAkJZmJfbG9nby5sb2dvID0gTlVMTDsKIAkJcmV0dXJuIDA7CiAJfQorCiAJLyogV2hhdCBkZXB0aCB3ZSBhc2tlZCBmb3IgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSBnZXQgKi8KIAlpZiAoZmJfbG9nby5sb2dvLT50eXBlID09IExJTlVYX0xPR09fQ0xVVDIyNCkKIAkJZmJfbG9nby5kZXB0aCA9IDg7CkBAIC0zNzIsMTIgKzQ3MywxMSBAQAogCXJldHVybiBmYl9sb2dvLmxvZ28tPmhlaWdodDsKIH0KIAotaW50IGZiX3Nob3dfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK2ludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCByb3RhdGUpCiB7CiAJdTMyICpwYWxldHRlID0gTlVMTCwgKnNhdmVkX3BzZXVkb19wYWxldHRlID0gTlVMTDsKLQl1bnNpZ25lZCBjaGFyICpsb2dvX25ldyA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqbG9nb19uZXcgPSBOVUxMLCAqbG9nb19yb3RhdGUgPSBOVUxMOwogCXN0cnVjdCBmYl9pbWFnZSBpbWFnZTsKLQlpbnQgeDsKIAogCS8qIFJldHVybiBpZiB0aGUgZnJhbWUgYnVmZmVyIGlzIG5vdCBtYXBwZWQgb3Igc3VzcGVuZGVkICovCiAJaWYgKGZiX2xvZ28ubG9nbyA9PSBOVUxMIHx8IGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQpAQCAtNDE3LDI1ICs1MTcsMzAgQEAKIAkJZmJfc2V0X2xvZ28oaW5mbywgZmJfbG9nby5sb2dvLCBsb2dvX25ldywgZmJfbG9nby5kZXB0aCk7CiAJfQogCisJaW1hZ2UuZHggPSAwOworCWltYWdlLmR5ID0gMDsKIAlpbWFnZS53aWR0aCA9IGZiX2xvZ28ubG9nby0+d2lkdGg7CiAJaW1hZ2UuaGVpZ2h0ID0gZmJfbG9nby5sb2dvLT5oZWlnaHQ7Ci0JaW1hZ2UuZHkgPSAwOwogCi0JZm9yICh4ID0gMDsgeCA8IG51bV9vbmxpbmVfY3B1cygpICogKGZiX2xvZ28ubG9nby0+d2lkdGggKyA4KSAmJgotCSAgICAgeCA8PSBpbmZvLT52YXIueHJlcy1mYl9sb2dvLmxvZ28tPndpZHRoOyB4ICs9IChmYl9sb2dvLmxvZ28tPndpZHRoICsgOCkpIHsKLQkJaW1hZ2UuZHggPSB4OwotCQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sICZpbWFnZSk7CisJaWYgKHJvdGF0ZSkgeworCQlsb2dvX3JvdGF0ZSA9IGttYWxsb2MoZmJfbG9nby5sb2dvLT53aWR0aCAqCisJCQkJICAgICAgZmJfbG9nby5sb2dvLT5oZWlnaHQsIEdGUF9LRVJORUwpOworCQlpZiAobG9nb19yb3RhdGUpCisJCQlmYl9yb3RhdGVfbG9nbyhpbmZvLCBsb2dvX3JvdGF0ZSwgJmltYWdlLCByb3RhdGUpOwogCX0KLQkKKworCWZiX2RvX3Nob3dfbG9nbyhpbmZvLCAmaW1hZ2UsIHJvdGF0ZSk7CisKIAlrZnJlZShwYWxldHRlKTsKIAlpZiAoc2F2ZWRfcHNldWRvX3BhbGV0dGUgIT0gTlVMTCkKIAkJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBzYXZlZF9wc2V1ZG9fcGFsZXR0ZTsKIAlrZnJlZShsb2dvX25ldyk7CisJa2ZyZWUobG9nb19yb3RhdGUpOwogCXJldHVybiBmYl9sb2dvLmxvZ28tPmhlaWdodDsKIH0KICNlbHNlCi1pbnQgZmJfcHJlcGFyZV9sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvKSB7IHJldHVybiAwOyB9Ci1pbnQgZmJfc2hvd19sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvKSB7IHJldHVybiAwOyB9CitpbnQgZmJfcHJlcGFyZV9sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcm90YXRlKSB7IHJldHVybiAwOyB9CitpbnQgZmJfc2hvd19sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcm90YXRlKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX0xPR08gKi8KIAogc3RhdGljIGludCBmYm1lbV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKQEAgLTgyOSwxOCArOTM0LDE1NCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvMzIgeworCWNoYXIJCQlpZFsxNl07CisJY29tcGF0X2NhZGRyX3QJCXNtZW1fc3RhcnQ7CisJdTMyCQkJc21lbV9sZW47CisJdTMyCQkJdHlwZTsKKwl1MzIJCQl0eXBlX2F1eDsKKwl1MzIJCQl2aXN1YWw7CisJdTE2CQkJeHBhbnN0ZXA7CisJdTE2CQkJeXBhbnN0ZXA7CisJdTE2CQkJeXdyYXBzdGVwOworCXUzMgkJCWxpbmVfbGVuZ3RoOworCWNvbXBhdF9jYWRkcl90CQltbWlvX3N0YXJ0OworCXUzMgkJCW1taW9fbGVuOworCXUzMgkJCWFjY2VsOworCXUxNgkJCXJlc2VydmVkWzNdOworfTsKKworc3RydWN0IGZiX2NtYXAzMiB7CisJdTMyCQkJc3RhcnQ7CisJdTMyCQkJbGVuOworCWNvbXBhdF9jYWRkcl90CXJlZDsKKwljb21wYXRfY2FkZHJfdAlncmVlbjsKKwljb21wYXRfY2FkZHJfdAlibHVlOworCWNvbXBhdF9jYWRkcl90CXRyYW5zcDsKK307CisKK3N0YXRpYyBpbnQgZmJfZ2V0cHV0X2NtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZmJfY21hcF91c2VyIF9fdXNlciAqY21hcDsKKwlzdHJ1Y3QgZmJfY21hcDMyIF9fdXNlciAqY21hcDMyOworCV9fdTMyIGRhdGE7CisJaW50IGVycjsKKworCWNtYXAgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtYXApKTsKKwljbWFwMzIgPSBjb21wYXRfcHRyKGFyZyk7CisKKwlpZiAoY29weV9pbl91c2VyKCZjbWFwLT5zdGFydCwgJmNtYXAzMi0+c3RhcnQsIDIgKiBzaXplb2YoX191MzIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZ2V0X3VzZXIoZGF0YSwgJmNtYXAzMi0+cmVkKSB8fAorCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+cmVkKSB8fAorCSAgICBnZXRfdXNlcihkYXRhLCAmY21hcDMyLT5ncmVlbikgfHwKKwkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPmdyZWVuKSB8fAorCSAgICBnZXRfdXNlcihkYXRhLCAmY21hcDMyLT5ibHVlKSB8fAorCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+Ymx1ZSkgfHwKKwkgICAgZ2V0X3VzZXIoZGF0YSwgJmNtYXAzMi0+dHJhbnNwKSB8fAorCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+dHJhbnNwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CisKKwlpZiAoIWVycikgeworCQlpZiAoY29weV9pbl91c2VyKCZjbWFwMzItPnN0YXJ0LAorCQkJCSAmY21hcC0+c3RhcnQsCisJCQkJIDIgKiBzaXplb2YoX191MzIpKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZG9fZnNjcmVlbmluZm9fdG9fdXNlcihzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwKKwkJCQkgIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbzMyIF9fdXNlciAqZml4MzIpCit7CisJX191MzIgZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gY29weV90b191c2VyKCZmaXgzMi0+aWQsICZmaXgtPmlkLCBzaXplb2YoZml4MzItPmlkKSk7CisKKwlkYXRhID0gKF9fdTMyKSAodW5zaWduZWQgbG9uZykgZml4LT5zbWVtX3N0YXJ0OworCWVyciB8PSBwdXRfdXNlcihkYXRhLCAmZml4MzItPnNtZW1fc3RhcnQpOworCisJZXJyIHw9IHB1dF91c2VyKGZpeC0+c21lbV9sZW4sICZmaXgzMi0+c21lbV9sZW4pOworCWVyciB8PSBwdXRfdXNlcihmaXgtPnR5cGUsICZmaXgzMi0+dHlwZSk7CisJZXJyIHw9IHB1dF91c2VyKGZpeC0+dHlwZV9hdXgsICZmaXgzMi0+dHlwZV9hdXgpOworCWVyciB8PSBwdXRfdXNlcihmaXgtPnZpc3VhbCwgJmZpeDMyLT52aXN1YWwpOworCWVyciB8PSBwdXRfdXNlcihmaXgtPnhwYW5zdGVwLCAmZml4MzItPnhwYW5zdGVwKTsKKwllcnIgfD0gcHV0X3VzZXIoZml4LT55cGFuc3RlcCwgJmZpeDMyLT55cGFuc3RlcCk7CisJZXJyIHw9IHB1dF91c2VyKGZpeC0+eXdyYXBzdGVwLCAmZml4MzItPnl3cmFwc3RlcCk7CisJZXJyIHw9IHB1dF91c2VyKGZpeC0+bGluZV9sZW5ndGgsICZmaXgzMi0+bGluZV9sZW5ndGgpOworCisJZGF0YSA9IChfX3UzMikgKHVuc2lnbmVkIGxvbmcpIGZpeC0+bW1pb19zdGFydDsKKwllcnIgfD0gcHV0X3VzZXIoZGF0YSwgJmZpeDMyLT5tbWlvX3N0YXJ0KTsKKworCWVyciB8PSBwdXRfdXNlcihmaXgtPm1taW9fbGVuLCAmZml4MzItPm1taW9fbGVuKTsKKwllcnIgfD0gcHV0X3VzZXIoZml4LT5hY2NlbCwgJmZpeDMyLT5hY2NlbCk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcihmaXgzMi0+cmVzZXJ2ZWQsIGZpeC0+cmVzZXJ2ZWQsCisJCQkgICAgc2l6ZW9mKGZpeC0+cmVzZXJ2ZWQpKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmJfZ2V0X2ZzY3JlZW5pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGZpeDsKKwlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8zMiBfX3VzZXIgKmZpeDMyOworCWludCBlcnI7CisKKwlmaXgzMiA9IGNvbXBhdF9wdHIoYXJnKTsKKworCW9sZF9mcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCWVyciA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKKwlzZXRfZnMob2xkX2ZzKTsKKworCWlmICghZXJyKQorCQllcnIgPSBkb19mc2NyZWVuaW5mb190b191c2VyKCZmaXgsIGZpeDMyKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBsb25nCiBmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWludCBmYmlkeCA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWludCBmYmlkeCA9IGltaW5vcihpbm9kZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKIAlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOwotCWxvbmcgcmV0OworCWxvbmcgcmV0ID0gLUVOT0lPQ1RMQ01EOwogCi0JaWYgKGZiLT5mYl9jb21wYXRfaW9jdGwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGZiLT5mYl9jb21wYXRfaW9jdGwoZmlsZSwgY21kLCBhcmcsIGluZm8pOworCXN3aXRjaChjbWQpIHsKKwljYXNlIEZCSU9HRVRfVlNDUkVFTklORk86CisJY2FzZSBGQklPUFVUX1ZTQ1JFRU5JTkZPOgorCWNhc2UgRkJJT1BBTl9ESVNQTEFZOgorCWNhc2UgRkJJT0dFVF9DT04yRkJNQVA6CisJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKKwkJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTsKKwljYXNlIEZCSU9CTEFOSzoKKwkJcmV0ID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86CisJCXJldCA9IGZiX2dldF9mc2NyZWVuaW5mbyhpbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCQlicmVhazsKKworCWNhc2UgRkJJT0dFVENNQVA6CisJY2FzZSBGQklPUFVUQ01BUDoKKwkJcmV0ID0gZmJfZ2V0cHV0X2NtYXAoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoZmItPmZiX2NvbXBhdF9pb2N0bCkKKwkJCXJldCA9IGZiLT5mYl9jb21wYXRfaW9jdGwoZmlsZSwgY21kLCBhcmcsIGluZm8pOworCQlicmVhazsKKwl9CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMjE1LDYgKzE0NTYsMjggQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKioKKyAqIGZiX2Nvbl9kdWl0IC0gdXNlcjwtPmZiY29uIHBhc3N0aHJvdWdoCisgKiBAaW5mbzogc3RydWN0IGZiX2luZm8KKyAqIEBldmVudDogbm90aWZpY2F0aW9uIGV2ZW50IHRvIGJlIHBhc3NlZCB0byBmYmNvbgorICogQGRhdGE6IHByaXZhdGUgZGF0YQorICoKKyAqIERFU0NSSVBUSU9OCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFuIGZiY29uLXVzZXIgZXZlbnQgcGFzc2luZyBjaGFubmVsCisgKiB3aGljaCBieXBhc3NlcyBmYmRldi4gIFRoaXMgaXMgaG9wZWZ1bGx5IHRlbXBvcmFyeQorICogdW50aWwgYSB1c2VyIGludGVyZmFjZSBmb3IgZmJjb24gaXMgY3JlYXRlZAorICovCitpbnQgZmJfY29uX2R1aXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZmJfZXZlbnQgZXZudDsKKworCWV2bnQuaW5mbyA9IGluZm87CisJZXZudC5kYXRhID0gZGF0YTsKKworCXJldHVybiBub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LCBldmVudCwgJmV2bnQpOworfQorRVhQT1JUX1NZTUJPTChmYl9jb25fZHVpdCk7CisKIHN0YXRpYyBjaGFyICp2aWRlb19vcHRpb25zW0ZCX01BWF07CiBzdGF0aWMgaW50IG9mb25seTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCAwMDdjOGU5Li4wOGRhYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtMjEzLDYgKzIxMyw3MCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOwogfQogCitzdGF0aWMgc3NpemVfdCBzdG9yZV9yb3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOworCWNoYXIgKipsYXN0ID0gTlVMTDsKKwlpbnQgZXJyOworCisJdmFyID0gZmJfaW5mby0+dmFyOworCXZhci5yb3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsIGxhc3QsIDApOworCisJaWYgKChlcnIgPSBhY3RpdmF0ZShmYl9pbmZvLCAmdmFyKSkpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2hvd19yb3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLCBjaGFyICpidWYpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXZpY2UpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGZiX2luZm8tPnZhci5yb3RhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9jb25fcm90YXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2RldmljZSk7CisJaW50IHJvdGF0ZTsKKwljaGFyICoqbGFzdCA9IE5VTEw7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJcm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKKwlmYl9jb25fZHVpdChmYl9pbmZvLCBGQl9FVkVOVF9TRVRfQ09OX1JPVEFURSwgJnJvdGF0ZSk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfY29uX3JvdGF0ZV9hbGwoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2aWNlKTsKKwlpbnQgcm90YXRlOworCWNoYXIgKipsYXN0ID0gTlVMTDsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlyb3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsIGxhc3QsIDApOworCWZiX2Nvbl9kdWl0KGZiX2luZm8sIEZCX0VWRU5UX1NFVF9DT05fUk9UQVRFX0FMTCwgJnJvdGF0ZSk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jb25fcm90YXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2aWNlKTsKKwlpbnQgcm90YXRlOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCXJvdGF0ZSA9IGZiX2Nvbl9kdWl0KGZiX2luZm8sIEZCX0VWRU5UX0dFVF9DT05fUk9UQVRFLCBOVUxMKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHJvdGF0ZSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3ZpcnR1YWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2aWNlLAogCQkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCiB7CkBAIC00NDAsNiArNTA0LDkgQEAKIAlfX0FUVFIodmlydHVhbF9zaXplLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfdmlydHVhbCwgc3RvcmVfdmlydHVhbCksCiAJX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCksCiAJX19BVFRSKHN0cmlkZSwgU19JUlVHTywgc2hvd19zdHJpZGUsIE5VTEwpLAorCV9fQVRUUihyb3RhdGUsIFNfSVJVR098U19JV1VTUiwgc2hvd19yb3RhdGUsIHN0b3JlX3JvdGF0ZSksCisJX19BVFRSKGNvbl9yb3RhdGUsIFNfSVJVR098U19JV1VTUiwgc2hvd19jb25fcm90YXRlLCBzdG9yZV9jb25fcm90YXRlKSwKKwlfX0FUVFIoY29uX3JvdGF0ZV9hbGwsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2Nvbl9yb3RhdGVfYWxsKSwKIH07CiAKIGludCBmYl9pbml0X2NsYXNzX2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCmluZGV4IDA3OTliOTkuLjQyNzY4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwpAQCAtMTIyLDcgKzEyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCmluZGV4IGFjOTRjMmUuLjYyNGM0YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwppbmRleCAxNzg5YTUyLi4xZGEyZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKQEAgLTI1MSw2ICsyNTEsMTAgQEAKIAlOVUxMLCA2MCwgMTkyMCwgMTIwMCwgNTE3NywgMTI4LCAzMzYsIDEsIDM4LCAyMDgsIDMsCiAJRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCiAJRkJfVk1PREVfTk9OSU5URVJMQUNFRAorICAgIH0sIHsKKwkvKiAxMTUyeDc2OCwgNjAgSHosIFBvd2VyQm9vayBHNCBUaXRhbml1bSBJIGFuZCBJSSAqLworCU5VTEwsIDYwLCAxMTUyLCA3NjgsIDE1Mzg2LCAxNTgsIDI2LCAyOSwgMywgMTM2LCA2LAorCUZCX1NZTkNfSE9SX0hJR0hfQUNUfEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAogICAgIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IGYwZGZiMzUuLjA5ZTJmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0xMzE1LDEwICsxMzE1LDE0IEBACiAJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqCiAJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDg7CiAKLQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDgpCisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4KSB7CiAJCWluZm8tPmZpeC52aXN1YWwgICAgICA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKLQllbHNlCisJCWluZm8tPmZpeC54cGFuc3RlcCAgICA9IDQ7CisJfSBlbHNlIHsKIAkJaW5mby0+Zml4LnZpc3VhbCAgICAgID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJaW5mby0+Zml4LnhwYW5zdGVwICAgID0gMjsKKwl9CisKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NBVkFHRV9BQ0NFTCkKQEAgLTEzNjMsNyArMTM2Nyw2IEBACiAJcGFyLT5taW5DbG9jayA9IDEwMDAwOwogCiAJc2F2YWdlZmJfc2V0X3Bhcl9pbnQgKHBhcik7Ci0Jc2F2YWdlZmJfdXBkYXRlX3N0YXJ0IChwYXIsIHZhcik7CiAJZmJfc2V0X2NtYXAgKCZpbmZvLT5jbWFwLCBpbmZvKTsKIAlzYXZhZ2VmYl9zZXRfZml4KGluZm8pOwogCXNhdmFnZWZiX3NldF9jbGlwKGluZm8pOwpAQCAtMTg3Myw3ICsxODc2LDYgQEAKIAogCWluZm8tPmZpeC50eXBlCSAgID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwogCWluZm8tPmZpeC50eXBlX2F1eAkgICA9IDA7Ci0JaW5mby0+Zml4LnhwYW5zdGVwCSAgID0gMjsKIAlpbmZvLT5maXgueXBhbnN0ZXAJICAgPSAxOwogCWluZm8tPmZpeC55d3JhcHN0ZXAgICA9IDA7CiAJaW5mby0+Zml4LmFjY2VsICAgICAgID0gaWQtPmRyaXZlcl9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwppbmRleCA2OTBiYjZmZS4uMjI2YWU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgpAQCAtNTEsMzUgKzUyLDMzIEBACiAgKiBjYXJkIHBhcmFtZXRlcnMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZiX2luZm8gdmdhMTZmYjsgCi0KLXN0YXRpYyBzdHJ1Y3QgdmdhMTZmYl9wYXIgeworc3RydWN0IHZnYTE2ZmJfcGFyIHsKIAkvKiBzdHJ1Y3R1cmUgaG9sZGluZyBvcmlnaW5hbCBWR0EgcmVnaXN0ZXIgc2V0dGluZ3Mgd2hlbiB0aGUKICAgICAgICAgICAgc2NyZWVuIGlzIGJsYW5rZWQgKi8KIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBjaGFyCVNlcUN0cmxJbmRleDsJCS8qIFNlcXVlbmNlciBJbmRleCByZWcuICAgKi8KLQkJdW5zaWduZWQgY2hhcglDcnRDdHJsSW5kZXg7CQkvKiBDUlQtQ29udHIuIEluZGV4IHJlZy4gICovCi0JCXVuc2lnbmVkIGNoYXIJQ3J0TWlzY0lPOwkJLyogTWlzY2VsbGFuZW91cyByZWdpc3RlciAqLwotCQl1bnNpZ25lZCBjaGFyCUhvcml6b250YWxUb3RhbDsJLyogQ1JULUNvbnRyb2xsZXI6MDBoICovCi0JCXVuc2lnbmVkIGNoYXIJSG9yaXpEaXNwbGF5RW5kOwkvKiBDUlQtQ29udHJvbGxlcjowMWggKi8KLQkJdW5zaWduZWQgY2hhcglTdGFydEhvcml6UmV0cmFjZTsJLyogQ1JULUNvbnRyb2xsZXI6MDRoICovCi0JCXVuc2lnbmVkIGNoYXIJRW5kSG9yaXpSZXRyYWNlOwkvKiBDUlQtQ29udHJvbGxlcjowNWggKi8KLQkJdW5zaWduZWQgY2hhcglPdmVyZmxvdzsJCS8qIENSVC1Db250cm9sbGVyOjA3aCAqLwotCQl1bnNpZ25lZCBjaGFyCVN0YXJ0VmVydFJldHJhY2U7CS8qIENSVC1Db250cm9sbGVyOjEwaCAqLwotCQl1bnNpZ25lZCBjaGFyCUVuZFZlcnRSZXRyYWNlOwkJLyogQ1JULUNvbnRyb2xsZXI6MTFoICovCi0JCXVuc2lnbmVkIGNoYXIJTW9kZUNvbnRyb2w7CQkvKiBDUlQtQ29udHJvbGxlcjoxN2ggKi8KLQkJdW5zaWduZWQgY2hhcglDbG9ja2luZ01vZGU7CQkvKiBTZXEtQ29udHJvbGxlcjowMWggKi8KKwkJdW5zaWduZWQgY2hhcglTZXFDdHJsSW5kZXg7CSAgLyogU2VxdWVuY2VyIEluZGV4IHJlZy4gICAqLworCQl1bnNpZ25lZCBjaGFyCUNydEN0cmxJbmRleDsJICAvKiBDUlQtQ29udHIuIEluZGV4IHJlZy4gICovCisJCXVuc2lnbmVkIGNoYXIJQ3J0TWlzY0lPOwkgIC8qIE1pc2NlbGxhbmVvdXMgcmVnaXN0ZXIgKi8KKwkJdW5zaWduZWQgY2hhcglIb3Jpem9udGFsVG90YWw7ICAvKiBDUlQtQ29udHJvbGxlcjowMGggKi8KKwkJdW5zaWduZWQgY2hhcglIb3JpekRpc3BsYXlFbmQ7ICAvKiBDUlQtQ29udHJvbGxlcjowMWggKi8KKwkJdW5zaWduZWQgY2hhcglTdGFydEhvcml6UmV0cmFjZTsvKiBDUlQtQ29udHJvbGxlcjowNGggKi8KKwkJdW5zaWduZWQgY2hhcglFbmRIb3JpelJldHJhY2U7ICAvKiBDUlQtQ29udHJvbGxlcjowNWggKi8KKwkJdW5zaWduZWQgY2hhcglPdmVyZmxvdzsJICAvKiBDUlQtQ29udHJvbGxlcjowN2ggKi8KKwkJdW5zaWduZWQgY2hhcglTdGFydFZlcnRSZXRyYWNlOyAvKiBDUlQtQ29udHJvbGxlcjoxMGggKi8KKwkJdW5zaWduZWQgY2hhcglFbmRWZXJ0UmV0cmFjZTsJICAvKiBDUlQtQ29udHJvbGxlcjoxMWggKi8KKwkJdW5zaWduZWQgY2hhcglNb2RlQ29udHJvbDsJICAvKiBDUlQtQ29udHJvbGxlcjoxN2ggKi8KKwkJdW5zaWduZWQgY2hhcglDbG9ja2luZ01vZGU7CSAgLyogU2VxLUNvbnRyb2xsZXI6MDFoICovCiAJfSB2Z2Ffc3RhdGU7CiAJc3RydWN0IHZnYXN0YXRlIHN0YXRlOwogCWF0b21pY190IHJlZl9jb3VudDsKIAlpbnQgcGFsZXR0ZV9ibGFua2VkLCB2ZXNhX2JsYW5rZWQsIG1vZGUsIGlzVkdBOwogCXU4IG1pc2MsIHBlbF9tc2ssIHZzcywgY2xrZGl2OwogCXU4IGNydGNbVkdBX0NSVF9DXTsKLX0gdmdhMTZfcGFyOworfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmdhMTZmYl9kZWZpbmVkID0geworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2Z2ExNmZiX2RlZmluZWQgX19pbml0ZGF0YSA9IHsKIAkueHJlcwkJPSA2NDAsCiAJLnlyZXMJCT0gNDgwLAogCS54cmVzX3ZpcnR1YWwJPSA2NDAsCkBAIC0yMDUsNyArMjA0LDcgQEAKIHN0YXRpYyB2b2lkIHZnYTE2ZmJfcGFuX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgCiAJCQkgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1MzIgeG9mZnNldCwgcG9zOwogCiAJeG9mZnNldCA9IHZhci0+eG9mZnNldDsKQEAgLTMwMCw3ICsyOTksNyBAQAogCiBzdGF0aWMgaW50IHZnYTE2ZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlpbnQgY250ID0gYXRvbWljX3JlYWQoJnBhci0+cmVmX2NvdW50KTsKIAogCWlmICghY250KSB7CkBAIC0zMTUsNyArMzE0LDcgQEAKIAogc3RhdGljIGludCB2Z2ExNmZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewotCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gKHN0cnVjdCB2Z2ExNmZiX3BhciAqKSBpbmZvLT5wYXI7CisJc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJaW50IGNudCA9IGF0b21pY19yZWFkKCZwYXItPnJlZl9jb3VudCk7CiAKIAlpZiAoIWNudCkKQEAgLTMzMCw3ICszMjksNyBAQAogc3RhdGljIGludCB2Z2ExNmZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKIAkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1MzIgeHJlcywgcmlnaHQsIGhzbGVuLCBsZWZ0LCB4dG90YWw7CiAJdTMyIHlyZXMsIGxvd2VyLCB2c2xlbiwgdXBwZXIsIHl0b3RhbDsKIAl1MzIgdnhyZXMsIHhvZmZzZXQsIHZ5cmVzLCB5b2Zmc2V0OwpAQCAtNTM1LDcgKzUzNCw3IEBACiAKIHN0YXRpYyBpbnQgdmdhMTZmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gKHN0cnVjdCB2Z2ExNmZiX3BhciAqKSBpbmZvLT5wYXI7CisJc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJdTggZ2RjW1ZHQV9HRlhfQ107CiAJdTggc2VxW1ZHQV9TRVFfQ107CiAJdTggYXRjW1ZHQV9BVFRfQ107CkBAIC02NzcsNyArNjc2LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAogCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IChzdHJ1Y3QgdmdhMTZmYl9wYXIgKikgaW5mby0+cGFyOworCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCWludCBncmF5OwogCiAJLyoKQEAgLTg1MCw3ICs4NDksNyBAQAogLyogMCB1bmJsYW5rLCAxIGJsYW5rLCAyIG5vIHZzeW5jLCAzIG5vIGhzeW5jLCA0IG9mZiAqLwogc3RhdGljIGludCB2Z2ExNmZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAogCXN3aXRjaCAoYmxhbmspIHsKIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6CQkJCS8qIFVuYmxhbmsgKi8KQEAgLTEyMDEsNyArMTIwMCw3IEBACiB7CiAJY2hhciBfX2lvbWVtICp3aGVyZSA9IGluZm8tPnNjcmVlbl9iYXNlICsgKGltYWdlLT5keC84KSArCiAJCWltYWdlLT5keSAqIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKLQlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IChzdHJ1Y3QgdmdhMTZmYl9wYXIgKikgaW5mby0+cGFyOworCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCWNoYXIgKmNkYXQgPSAoY2hhciAqKSBpbWFnZS0+ZGF0YTsKIAljaGFyIF9faW9tZW0gKmRzdDsKIAlpbnQgeCwgeTsKQEAgLTEyNjYsNyArMTI2NSw3IEBACiAJLyoKIAkgKiBEcmF3IGxvZ28gCiAJICovCi0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAljaGFyIF9faW9tZW0gKndoZXJlID0KIAkJaW5mby0+c2NyZWVuX2Jhc2UgKyBpbWFnZS0+ZHkgKiBpbmZvLT5maXgubGluZV9sZW5ndGggKwogCQlpbWFnZS0+ZHgvODsKQEAgLTEzNDMsOSArMTM0MiwxMTcgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IF9faW5pdCB2Z2ExNmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhcjsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICJ2Z2ExNmZiOiBpbml0aWFsaXppbmdcbiIpOworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHZnYTE2ZmJfcGFyKSwgJmRldi0+ZGV2KTsKKworCWlmICghaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mYl9hbGxvYzsKKwl9CisKKwkvKiBYWFggc2hhcmUgVkdBX0ZCX1BIWVMgYW5kIEkvTyByZWdpb24gd2l0aCB2Z2Fjb24gYW5kIG90aGVycyAqLworCWluZm8tPnNjcmVlbl9iYXNlID0gKHZvaWQgX19pb21lbSAqKVZHQV9NQVBfTUVNKFZHQV9GQl9QSFlTKTsKKworCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gbWFwIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAidmdhMTZmYjogbWFwcGVkIHRvIDB4JXBcbiIsIGluZm8tPnNjcmVlbl9iYXNlKTsKKwlwYXIgPSBpbmZvLT5wYXI7CisKKwlwYXItPmlzVkdBID0gT1JJR19WSURFT19JU1ZHQTsKKwlwYXItPnBhbGV0dGVfYmxhbmtlZCA9IDA7CisJcGFyLT52ZXNhX2JsYW5rZWQgPSAwOworCisJaSA9IHBhci0+aXNWR0E/IDYgOiAyOworCQorCXZnYTE2ZmJfZGVmaW5lZC5yZWQubGVuZ3RoICAgPSBpOworCXZnYTE2ZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSBpOworCXZnYTE2ZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCAgPSBpOwkKKworCS8qIG5hbWUgc2hvdWxkIG5vdCBkZXBlbmQgb24gRUdBL1ZHQSAqLworCWluZm8tPmZib3BzID0gJnZnYTE2ZmJfb3BzOworCWluZm8tPnZhciA9IHZnYTE2ZmJfZGVmaW5lZDsKKwlpbmZvLT5maXggPSB2Z2ExNmZiX2ZpeDsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAorCQlGQklORk9fSFdBQ0NFTF9ZUEFOOworCisJaSA9IChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCkgPyAyNTYgOiAxNjsKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBpLCAwKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAidmdhMTZmYjogdW5hYmxlIHRvIGFsbG9jYXRlIGNvbG9ybWFwXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfY21hcDsKKwl9CisKKwlpZiAodmdhMTZmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gdmFsaWRhdGUgdmFyaWFibGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9jaGVja192YXI7CisJfQorCisJdmdhMTZmYl91cGRhdGVfZml4KGluZm8pOworCisJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInZnYTE2ZmI6IHVuYWJsZSB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2NoZWNrX3ZhcjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAorCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIGluZm8pOworCisJcmV0dXJuIDA7CisKKyBlcnJfY2hlY2tfdmFyOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisgZXJyX2FsbG9jX2NtYXA6CisJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisgZXJyX2lvcmVtYXA6CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKyBlcnJfZmJfYWxsb2M6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2Z2ExNmZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCWlmIChpbmZvKSB7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCS8qIFhYWCB1bnNoYXJlIFZHQSByZWdpb25zICovCisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB2Z2ExNmZiX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ2Z2ExNmZiIiwKKwkuYnVzICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSB2Z2ExNmZiX3Byb2JlLAorCS5yZW1vdmUgPSB2Z2ExNmZiX3JlbW92ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZnYTE2ZmJfZGV2aWNlID0geworCS5uYW1lID0gInZnYTE2ZmIiLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgdmdhMTZmYl9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CiAJaW50IHJldDsKICNpZm5kZWYgTU9EVUxFCiAJY2hhciAqb3B0aW9uID0gTlVMTDsKQEAgLTEzNTUsNzcgKzE0NjIsMjEgQEAKIAogCXZnYTE2ZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXByaW50ayhLRVJOX0RFQlVHICJ2Z2ExNmZiOiBpbml0aWFsaXppbmdcbiIpOworCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmdmdhMTZmYl9kcml2ZXIpOwogCi0JLyogWFhYIHNoYXJlIFZHQV9GQl9QSFlTIGFuZCBJL08gcmVnaW9uIHdpdGggdmdhY29uIGFuZCBvdGhlcnMgKi8KLQotCXZnYTE2ZmIuc2NyZWVuX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopVkdBX01BUF9NRU0oVkdBX0ZCX1BIWVMpOwotCWlmICghdmdhMTZmYi5zY3JlZW5fYmFzZSkgewotCQlwcmludGsoS0VSTl9FUlIgInZnYTE2ZmI6IHVuYWJsZSB0byBtYXAgZGV2aWNlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfaW9yZW1hcDsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAidmdhMTZmYjogbWFwcGVkIHRvIDB4JXBcbiIsIHZnYTE2ZmIuc2NyZWVuX2Jhc2UpOwotCi0JdmdhMTZfcGFyLmlzVkdBID0gT1JJR19WSURFT19JU1ZHQTsKLQl2Z2ExNl9wYXIucGFsZXR0ZV9ibGFua2VkID0gMDsKLQl2Z2ExNl9wYXIudmVzYV9ibGFua2VkID0gMDsKLQotCWkgPSB2Z2ExNl9wYXIuaXNWR0E/IDYgOiAyOwotCQotCXZnYTE2ZmJfZGVmaW5lZC5yZWQubGVuZ3RoICAgPSBpOwotCXZnYTE2ZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSBpOwotCXZnYTE2ZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCAgPSBpOwkKLQotCS8qIG5hbWUgc2hvdWxkIG5vdCBkZXBlbmQgb24gRUdBL1ZHQSAqLwotCXZnYTE2ZmIuZmJvcHMgPSAmdmdhMTZmYl9vcHM7Ci0JdmdhMTZmYi52YXIgPSB2Z2ExNmZiX2RlZmluZWQ7Ci0JdmdhMTZmYi5maXggPSB2Z2ExNmZiX2ZpeDsKLQl2Z2ExNmZiLnBhciA9ICZ2Z2ExNl9wYXI7Ci0JdmdhMTZmYi5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAotCQlGQklORk9fSFdBQ0NFTF9ZUEFOOwotCi0JaSA9ICh2Z2ExNmZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPT0gOCkgPyAyNTYgOiAxNjsKLQlyZXQgPSBmYl9hbGxvY19jbWFwKCZ2Z2ExNmZiLmNtYXAsIGksIDApOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gYWxsb2NhdGUgY29sb3JtYXBcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9hbGxvY19jbWFwOworCWlmICghcmV0KSB7CisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmdhMTZmYl9kZXZpY2UpOworCQlpZiAocmV0KQorCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnZnYTE2ZmJfZHJpdmVyKTsKIAl9CiAKLQlpZiAodmdhMTZmYl9jaGVja192YXIoJnZnYTE2ZmIudmFyLCAmdmdhMTZmYikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gdmFsaWRhdGUgdmFyaWFibGVcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9jaGVja192YXI7Ci0JfQotCi0JdmdhMTZmYl91cGRhdGVfZml4KCZ2Z2ExNmZiKTsKLQotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmdmdhMTZmYikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidmdhMTZmYjogdW5hYmxlIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfY2hlY2tfdmFyOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCi0JICAgICAgIHZnYTE2ZmIubm9kZSwgdmdhMTZmYi5maXguaWQpOwotCi0JcmV0dXJuIDA7Ci0KLSBlcnJfY2hlY2tfdmFyOgotCWZiX2RlYWxsb2NfY21hcCgmdmdhMTZmYi5jbWFwKTsKLSBlcnJfYWxsb2NfY21hcDoKLQlpb3VubWFwKHZnYTE2ZmIuc2NyZWVuX2Jhc2UpOwotIGVycl9pb3JlbWFwOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2Z2ExNmZiX2V4aXQodm9pZCkKIHsKLSAgICB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZ2Z2ExNmZiKTsKLSAgICBpb3VubWFwKHZnYTE2ZmIuc2NyZWVuX2Jhc2UpOwotICAgIGZiX2RlYWxsb2NfY21hcCgmdmdhMTZmYi5jbWFwKTsKLSAgICAvKiBYWFggdW5zaGFyZSBWR0EgcmVnaW9ucyAqLworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ2Z2ExNmZiX2RldmljZSk7CisJZHJpdmVyX3VucmVnaXN0ZXIoJnZnYTE2ZmJfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jIGIvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jCmluZGV4IGNhOTI5NDAuLmQ5ZTAxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZnYXN0YXRlLmMKQEAgLTQ4NSwxMSArNDg1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIE1PRFVMRQotaW50IGluaXRfbW9kdWxlKHZvaWQpIHsgcmV0dXJuIDA7IH07Ci12b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIHt9OwotI2VuZGlmCi0KIEVYUE9SVF9TWU1CT0woc2F2ZV92Z2EpOwogRVhQT1JUX1NZTUJPTChyZXN0b3JlX3ZnYSk7CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IGJiYzNjYzYuLjg5Yzg0OWQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvYWRmcy5oIGIvZnMvYWRmcy9hZGZzLmgKaW5kZXggZmQ1Mjg0My4uZjZjZDAxMyAxMDA2NDQKLS0tIGEvZnMvYWRmcy9hZGZzLmgKKysrIGIvZnMvYWRmcy9hZGZzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUgQURGU19OREFfUFVCTElDX1JFQUQJKDEgPDwgNSkKICNkZWZpbmUgQURGU19OREFfUFVCTElDX1dSSVRFCSgxIDw8IDYpCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSAiZGlyX2YuaCIKIAogc3RydWN0IGJ1ZmZlcl9oZWFkOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmMKaW5kZXggOGFlMGRiNi4uMjU2OGViNCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X21pc2MuYworKysgYi9mcy9iaW5mbXRfbWlzYy5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAogCQkvKiBpZiB0aGUgYmluYXJ5IGlzIG5vdCByZWFkYWJsZSB0aGFuIGVuZm9yY2UgbW0tPmR1bXBhYmxlPTAKIAkJICAgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJwcmV0ZXIncyBwZXJtaXNzaW9ucyAqLwotCQlpZiAocGVybWlzc2lvbihicHJtLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgTUFZX1JFQUQsIE5VTEwpKQorCQlpZiAoZmlsZV9wZXJtaXNzaW9uKGJwcm0tPmZpbGUsIE1BWV9SRUFEKSkKIAkJCWJwcm0tPmludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QOwogCiAJCWFsbG93X3dyaXRlX2FjY2VzcyhicHJtLT5maWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggNDkwOTc1NC4uMjYzMDBmYyAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTg0MCwxNDYgKzg0MCw2IEBACiAJcmV0dXJuIGVyciA/IC1FRkFVTFQgOiAwOwogfQogCi1zdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8zMiB7Ci0JY2hhcgkJCWlkWzE2XTsKLSAgICAgICAgY29tcGF0X2NhZGRyX3QJc21lbV9zdGFydDsKLQl1MzIJCQlzbWVtX2xlbjsKLQl1MzIJCQl0eXBlOwotCXUzMgkJCXR5cGVfYXV4OwotCXUzMgkJCXZpc3VhbDsKLQl1MTYJCQl4cGFuc3RlcDsKLQl1MTYJCQl5cGFuc3RlcDsKLQl1MTYJCQl5d3JhcHN0ZXA7Ci0JdTMyCQkJbGluZV9sZW5ndGg7Ci0gICAgICAgIGNvbXBhdF9jYWRkcl90CW1taW9fc3RhcnQ7Ci0JdTMyCQkJbW1pb19sZW47Ci0JdTMyCQkJYWNjZWw7Ci0JdTE2CQkJcmVzZXJ2ZWRbM107Ci19OwotCi1zdHJ1Y3QgZmJfY21hcDMyIHsKLQl1MzIJCQlzdGFydDsKLQl1MzIJCQlsZW47Ci0JY29tcGF0X2NhZGRyX3QJcmVkOwotCWNvbXBhdF9jYWRkcl90CWdyZWVuOwotCWNvbXBhdF9jYWRkcl90CWJsdWU7Ci0JY29tcGF0X2NhZGRyX3QJdHJhbnNwOwotfTsKLQotc3RhdGljIGludCBmYl9nZXRwdXRfY21hcCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBmYl9jbWFwX3VzZXIgX191c2VyICpjbWFwOwotCXN0cnVjdCBmYl9jbWFwMzIgX191c2VyICpjbWFwMzI7Ci0JX191MzIgZGF0YTsKLQlpbnQgZXJyOwotCi0JY21hcCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqY21hcCkpOwotCWNtYXAzMiA9IGNvbXBhdF9wdHIoYXJnKTsKLQotCWlmIChjb3B5X2luX3VzZXIoJmNtYXAtPnN0YXJ0LCAmY21hcDMyLT5zdGFydCwgMiAqIHNpemVvZihfX3UzMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChnZXRfdXNlcihkYXRhLCAmY21hcDMyLT5yZWQpIHx8Ci0JICAgIHB1dF91c2VyKGNvbXBhdF9wdHIoZGF0YSksICZjbWFwLT5yZWQpIHx8Ci0JICAgIGdldF91c2VyKGRhdGEsICZjbWFwMzItPmdyZWVuKSB8fAotCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+Z3JlZW4pIHx8Ci0JICAgIGdldF91c2VyKGRhdGEsICZjbWFwMzItPmJsdWUpIHx8Ci0JICAgIHB1dF91c2VyKGNvbXBhdF9wdHIoZGF0YSksICZjbWFwLT5ibHVlKSB8fAotCSAgICBnZXRfdXNlcihkYXRhLCAmY21hcDMyLT50cmFuc3ApIHx8Ci0JICAgIHB1dF91c2VyKGNvbXBhdF9wdHIoZGF0YSksICZjbWFwLT50cmFuc3ApKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWVyciA9IHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7Ci0KLQlpZiAoIWVycikgewotCQlpZiAoY29weV9pbl91c2VyKCZjbWFwMzItPnN0YXJ0LAotCQkJCSAmY21hcC0+c3RhcnQsCi0JCQkJIDIgKiBzaXplb2YoX191MzIpKSkKLQkJCWVyciA9IC1FRkFVTFQ7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fZnNjcmVlbmluZm9fdG9fdXNlcihzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwKLQkJCQkgIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbzMyIF9fdXNlciAqZml4MzIpCi17Ci0JX191MzIgZGF0YTsKLQlpbnQgZXJyOwotCi0JZXJyID0gY29weV90b191c2VyKCZmaXgzMi0+aWQsICZmaXgtPmlkLCBzaXplb2YoZml4MzItPmlkKSk7Ci0KLQlkYXRhID0gKF9fdTMyKSAodW5zaWduZWQgbG9uZykgZml4LT5zbWVtX3N0YXJ0OwotCWVyciB8PSBwdXRfdXNlcihkYXRhLCAmZml4MzItPnNtZW1fc3RhcnQpOwotCi0JZXJyIHw9IHB1dF91c2VyKGZpeC0+c21lbV9sZW4sICZmaXgzMi0+c21lbV9sZW4pOwotCWVyciB8PSBwdXRfdXNlcihmaXgtPnR5cGUsICZmaXgzMi0+dHlwZSk7Ci0JZXJyIHw9IHB1dF91c2VyKGZpeC0+dHlwZV9hdXgsICZmaXgzMi0+dHlwZV9hdXgpOwotCWVyciB8PSBwdXRfdXNlcihmaXgtPnZpc3VhbCwgJmZpeDMyLT52aXN1YWwpOwotCWVyciB8PSBwdXRfdXNlcihmaXgtPnhwYW5zdGVwLCAmZml4MzItPnhwYW5zdGVwKTsKLQllcnIgfD0gcHV0X3VzZXIoZml4LT55cGFuc3RlcCwgJmZpeDMyLT55cGFuc3RlcCk7Ci0JZXJyIHw9IHB1dF91c2VyKGZpeC0+eXdyYXBzdGVwLCAmZml4MzItPnl3cmFwc3RlcCk7Ci0JZXJyIHw9IHB1dF91c2VyKGZpeC0+bGluZV9sZW5ndGgsICZmaXgzMi0+bGluZV9sZW5ndGgpOwotCi0JZGF0YSA9IChfX3UzMikgKHVuc2lnbmVkIGxvbmcpIGZpeC0+bW1pb19zdGFydDsKLQllcnIgfD0gcHV0X3VzZXIoZGF0YSwgJmZpeDMyLT5tbWlvX3N0YXJ0KTsKLQotCWVyciB8PSBwdXRfdXNlcihmaXgtPm1taW9fbGVuLCAmZml4MzItPm1taW9fbGVuKTsKLQllcnIgfD0gcHV0X3VzZXIoZml4LT5hY2NlbCwgJmZpeDMyLT5hY2NlbCk7Ci0JZXJyIHw9IGNvcHlfdG9fdXNlcihmaXgzMi0+cmVzZXJ2ZWQsIGZpeC0+cmVzZXJ2ZWQsCi0JCQkgICAgc2l6ZW9mKGZpeC0+cmVzZXJ2ZWQpKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZmJfZ2V0X2ZzY3JlZW5pbmZvKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JbW1fc2VnbWVudF90IG9sZF9mczsKLQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OwotCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbzMyIF9fdXNlciAqZml4MzI7Ci0JaW50IGVycjsKLQotCWZpeDMyID0gY29tcGF0X3B0cihhcmcpOwotCi0Jb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCWlmICghZXJyKQotCQllcnIgPSBkb19mc2NyZWVuaW5mb190b191c2VyKCZmaXgsIGZpeDMyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZmJfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86Ci0JCWVyciA9IGZiX2dldF9mc2NyZWVuaW5mbyhmZCxjbWQsIGFyZyk7Ci0JCWJyZWFrOwotCi0gIAljYXNlIEZCSU9HRVRDTUFQOgotCWNhc2UgRkJJT1BVVENNQVA6Ci0JCWVyciA9IGZiX2dldHB1dF9jbWFwKGZkLCBjbWQsIGFyZyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZG8gewotCQkJc3RhdGljIGludCBjb3VudDsKLQkJCWlmICgrK2NvdW50IDw9IDIwKQotCQkJCXByaW50aygiJXM6IFVua25vd24gZmIgaW9jdGwgY21kIGZkKCVkKSAiCi0JCQkJICAgICAgICJjbWQoJTA4eCkgYXJnKCUwOGx4KVxuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fLCBmZCwgY21kLCBhcmcpOwotCQl9IHdoaWxlKDApOwotCQllcnIgPSAtRU5PU1lTOwotCQlicmVhazsKLQl9OwotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBoZGlvX2lvY3RsX3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwpAQCAtMjk1MywxMCArMjgxMyw3IEBACiBIQU5ETEVfSU9DVEwoMHgxMjYwLCBicm9rZW5fYmxrZ2V0c2l6ZSkKIEhBTkRMRV9JT0NUTChCTEtGUkFHRVQsIHdfbG9uZykKIEhBTkRMRV9JT0NUTChCTEtTRUNUR0VULCB3X2xvbmcpCi1IQU5ETEVfSU9DVEwoRkJJT0dFVF9GU0NSRUVOSU5GTywgZmJfaW9jdGxfdHJhbnMpCiBIQU5ETEVfSU9DVEwoQkxLUEcsIGJsa3BnX2lvY3RsX3RyYW5zKQotSEFORExFX0lPQ1RMKEZCSU9HRVRDTUFQLCBmYl9pb2N0bF90cmFucykKLUhBTkRMRV9JT0NUTChGQklPUFVUQ01BUCwgZmJfaW9jdGxfdHJhbnMpCiBIQU5ETEVfSU9DVEwoSERJT19HRVRfS0VFUFNFVFRJTkdTLCBoZGlvX2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKEhESU9fR0VUX1VOTUFTS0lOVFIsIGhkaW9faW9jdGxfdHJhbnMpCiBIQU5ETEVfSU9DVEwoSERJT19HRVRfRE1BLCBoZGlvX2lvY3RsX3RyYW5zKQpAQCAtMzA1MSw2ICsyOTA4LDE2IEBACiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NHTFRDKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DU0xUQykKICNlbmRpZgorI2lmZGVmIFRJT0NTVEFSVAorLyoKKyAqIEZvciB0aGVzZSB0d28gd2UgaGF2ZSBkZWZpbnRpb25zIGluIGlvY3Rscy5oIGFuZC9vciB0ZXJtaW9zLmggb24KKyAqIHNvbWUgYXJjaGl0ZWN0dXJlcyBidXQgbm8gYWN0dWFsIGltcGxlbWVudGlvbi4gIFNvbWUgYXBwbGljYXRpb25zCisgKiBsaWtlIGJhc2ggY2FsbCB0aGVtIGlmIHRoZXkgYXJlIGRlZmluZWQgaW4gdGhlIGhlYWRlcnMsIHNvIHdlIHByb3ZpZGUKKyAqIGVudHJpZXMgaGVyZSB0byBhdm9pZCBzeXNsb2cgbWVzc2FnZSBzcGV3LgorICovCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTVEFSVCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ1NUT1ApCisjZW5kaWYKIC8qIFVzYmRldmZzICovCiBIQU5ETEVfSU9DVEwoVVNCREVWRlNfQ09OVFJPTDMyLCBkb191c2JkZXZmc19jb250cm9sKQogSEFORExFX0lPQ1RMKFVTQkRFVkZTX0JVTEszMiwgZG9fdXNiZGV2ZnNfYnVsaykKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA1YTRlM2FjLi5jNDY2ZmVjIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlpZiAoIVNfSVNSRUcobmQuZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlnb3RvIGV4aXQ7CiAKLQllcnJvciA9IHBlcm1pc3Npb24obmQuZGVudHJ5LT5kX2lub2RlLCBNQVlfUkVBRCB8IE1BWV9FWEVDLCAmbmQpOworCWVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfUkVBRCB8IE1BWV9FWEVDKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXhpdDsKIApAQCAtNDk1LDcgKzQ5NSw3IEBACiAJCWZpbGUgPSBFUlJfUFRSKC1FQUNDRVMpOwogCQlpZiAoIShuZC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT0VYRUMpICYmCiAJCSAgICBTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCQlpbnQgZXJyID0gcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMsICZuZCk7CisJCQlpbnQgZXJyID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfRVhFQyk7CiAJCQlpZiAoIWVyciAmJiAhKGlub2RlLT5pX21vZGUgJiAwMTExKSkKIAkJCQllcnIgPSAtRUFDQ0VTOwogCQkJZmlsZSA9IEVSUl9QVFIoZXJyKTsKQEAgLTg5Niw3ICs4OTYsNyBAQAogCWZsdXNoX3RocmVhZCgpOwogCiAJaWYgKGJwcm0tPmVfdWlkICE9IGN1cnJlbnQtPmV1aWQgfHwgYnBybS0+ZV9naWQgIT0gY3VycmVudC0+ZWdpZCB8fCAKLQkgICAgcGVybWlzc2lvbihicHJtLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSxNQVlfUkVBRCwgTlVMTCkgfHwKKwkgICAgZmlsZV9wZXJtaXNzaW9uKGJwcm0tPmZpbGUsIE1BWV9SRUFEKSB8fAogCSAgICAoYnBybS0+aW50ZXJwX2ZsYWdzICYgQklOUFJNX0ZMQUdTX0VORk9SQ0VfTk9ORFVNUCkpIHsKIAkJc3VpZF9rZXlzKGN1cnJlbnQpOwogCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSBzdWlkX2R1bXBhYmxlOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9DSEFOR0VTIGIvZnMvZXh0Mi9DSEFOR0VTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTVhYWYwLi4wMDAwMDAwCi0tLSBhL2ZzL2V4dDIvQ0hBTkdFUworKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi1DaGFuZ2VzIGZyb20gdmVyc2lvbiAwLjVhIHRvIHZlcnNpb24gMC41YgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQktIE5vdyB0aGF0IHdlIGhhdmUgc3lzY3RsKCksIHRoZSBpbW11dGFibGUgZmxhZyBjYW5ub3QgYmUgY2hhbmdlZCB3aGVuCi0JICB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgYXQgc2VjdXJpdHkgbGV2ZWwgPiAwLgotCS0gU29tZSBjbGVhbnVwcyBpbiB0aGUgY29kZS4KLQktIE1vcmUgY29uc2lzdGVuY3kgY2hlY2tzIG9uIGRpcmVjdG9yaWVzLgotCS0gVGhlIGV4dDIuZGlmZiBwYXRjaCBmcm9tIFRvbSBNYXkgPGZ0b21AbmV0Y29tLmNvbT4gaGFzIGJlZW4KLQkgIGludGVncmF0ZWQuICBUaGlzIHBhdGNoIHJlcGxhY2VzIGV4cGVuc2l2ZSAiLyIgYW5kICIlIiB3aXRoCi0JICBjaGVhcCAiPj4iIGFuZCAiJiIgd2hlcmUgcG9zc2libGUuCi0KLUNoYW5nZXMgZnJvbSB2ZXJzaW9uIDAuNSB0byB2ZXJzaW9uIDAuNWEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQktIFplcm8gdGhlIHBhcnRpYWwgYmxvY2sgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2hlbiBhIGZpbGUKLQkgIGlzIHRydW5jYXRlZC4KLQktIERhdGVzIHVwZGF0ZWQgaW4gdGhlIGNvcHlyaWdodC4KLQktIE1vcmUgY2hlY2tzIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZDogdGhlIGNvdW50IG9mIGJsb2NrcywKLQkgIGZyYWdtZW50cywgYW5kIGlub2RlcyBwZXIgZ3JvdXAgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBibG9jayBzaXplLgotCS0gVGhlIGJ1ZmZlcnMgdXNlZCBieSB0aGUgZXJyb3Igcm91dGluZXMgYXJlIG5vdyBzdGF0aWMgdmFyaWFibGVzLCB0bwotCSAgYXZvaWQgdXNpbmcgc3BhY2Ugb24gdGhlIGtlcm5lbCBzdGFjaywgYXMgcmVxdWVzdGVkIGJ5IExpbnVzLgotCS0gU29tZSBjbGVhbnVwcyBpbiB0aGUgZXJyb3IgbWVzc2FnZXMgKHNvbWUgdmVyc2lvbnMgb2Ygc3lzbG9nIGNvbnRhaW4KLQkgIGEgYnVnIHdoaWNoIHRydW5jYXRlcyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGNvbnRhaW5zICdcbicpLgotCS0gQ2hlY2sgdGhhdCBubyBkYXRhIGNhbiBiZSB3cml0dGVuIHRvIGEgZmlsZSBwYXN0IHRoZSAyR0IgbGltaXQuCi0JLSBUaGUgZmFtb3VzIHJlYWRkaXIoKSBidWcgaGFzIGJlZW4gZml4ZWQgYnkgU3RlcGhlbiBUd2VlZGllLgotCS0gQWRkZWQgYSByZXZpc2lvbiBsZXZlbCBpbiB0aGUgc3VwZXJibG9jay4KLQktIEZ1bGwgc3VwcG9ydCBmb3IgT19TWU5DIGZsYWcgb2YgdGhlIG9wZW4gc3lzdGVtIGNhbGwuCi0JLSBOZXcgbW91bnQgb3B0aW9uczogYHJlc3VpZD0jdWlkJyBhbmQgYHJlc2dpZD0jZ2lkJy4gIGByZXN1aWQnIGNhdXNlcwotCSAgZXh0MmZzIHRvIGNvbnNpZGVyIHVzZXIgI3VpZCBsaWtlIHJvb3QgZm9yIHRoZSByZXNlcnZlZCBibG9ja3MuCi0JICBgcmVzZ2lkJyBhY3RzIHRoZSBzYW1lIHdheSB3aXRoIGdyb3VwICNnaWQuICBOZXcgZmllbGRzIGluIHRoZQotCSAgc3VwZXJibG9jayBjb250YWluIGRlZmF1bHQgdmFsdWVzIGZvciByZXN1aWQgYW5kIHJlc2dpZCBhbmQgY2FuCi0JICBiZSBtb2RpZmllZCBieSB0dW5lMmZzLgotCSAgSWRlYSBjb21lcyBmcm9tIFJlbmUgQ291Z25lbmMgPGNvdWduZW5jQHJlbnV4LmZybXVnLmZyLm5ldD4uCi0JLSBOZXcgbW91bnQgb3B0aW9uczogYGJzZGRmJyBhbmQgYG1pbml4ZGYnLiAgYGJzZGRmJyBjYXVzZXMgZXh0MmZzCi0JICB0byByZW1vdmUgdGhlIGJsb2NrcyB1c2VkIGZvciBGUyBzdHJ1Y3R1cmVzIGZyb20gdGhlIHRvdGFsIGJsb2NrCi0JICBjb3VudCBpbiBzdGF0ZnMuICBXaXRoIGBtaW5peGRmJywgZXh0MmZzIG1pbWljcyBNaW5peCBiZWhhdmlvcgotCSAgaW4gc3RhdGZzIChpLmUuIGl0IHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBibG9ja3Mgb24gdGhlCi0JICBwYXJ0aXRpb24pLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBtYWtlIGJkZSBoYXBweSA6LSkKLQktIE5ldyBmaWxlIGF0dHJpYnV0ZXM6Ci0JICAtIEltbXV0YWJsZSBmaWxlcyBjYW5ub3QgYmUgbW9kaWZpZWQuICBEYXRhIGNhbm5vdCBiZSB3cml0dGVuIHRvCi0JICAgIHRoZXNlIGZpbGVzLiAgVGhleSBjYW5ub3QgYmUgcmVtb3ZlZCwgcmVuYW1lZCBhbmQgbmV3IGxpbmtzIGNhbm5vdAotCSAgICBiZSBjcmVhdGVkLiAgRXZlbiByb290IGNhbm5vdCBtb2RpZnkgdGhlIGZpbGVzLiAgSGUgaGFzIHRvIHJlbW92ZQotCSAgICB0aGUgaW1tdXRhYmxlIGF0dHJpYnV0ZSBmaXJzdC4KLQkgIC0gQXBwZW5kLW9ubHkgZmlsZXM6IGNhbiBvbmx5IGJlIHdyaXR0ZW4gaW4gYXBwZW5kLW1vZGUgd2hlbiB3cml0aW5nLgotCSAgICBUaGV5IGNhbm5vdCBiZSByZW1vdmVkLCByZW5hbWVkIGFuZCBuZXcgbGlua3MgY2Fubm90IGJlIGNyZWF0ZWQuCi0JICAgIE5vdGU6IGZpbGVzIG1heSBvbmx5IGJlIGFkZGVkIHRvIGFuIGFwcGVuZC1vbmx5IGRpcmVjdG9yeS4KLQkgIC0gTm8tZHVtcCBmaWxlczogdGhlIGF0dHJpYnV0ZSBpcyBub3QgdXNlZCBieSB0aGUga2VybmVsLiAgTXkgcG9ydAotCSAgICBvZiBkdW1wIHVzZXMgaXQgdG8gYXZvaWQgYmFja2luZyB1cCBmaWxlcyB3aGljaCBhcmUgbm90IGltcG9ydGFudC4KLQktIE5ldyBjaGVjayBpbiBleHQyX2NoZWNrX2Rpcl9lbnRyeTogdGhlIGlub2RlIG51bWJlciBpcyBjaGVja2VkLgotCS0gU3VwcG9ydCBmb3IgYmlnIGZpbGUgc3lzdGVtczogdGhlIGNvcHkgb2YgdGhlIEZTIGRlc2NyaXB0b3IgaXMgbm93Ci0JICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgKHByZXZpb3VzIHZlcnNpb25zIHVzZWQgYSBmaXhlZCBzaXplIGFycmF5KS4KLQkgIFRoaXMgYWxsb3dzIHRvIG1vdW50IDJHQisgRlMuCi0JLSBSZW9yZ2FuaXphdGlvbiBvZiB0aGUgZXh0Ml9pbm9kZSBzdHJ1Y3R1cmUgdG8gYWxsb3cgb3RoZXIgb3BlcmF0aW5nCi0JICBzeXN0ZW1zIHRvIGNyZWF0ZSBzcGVjaWZpYyBmaWVsZHMgaWYgdGhleSB1c2UgZXh0MmZzIGFzIHRoZWlyIG5hdGl2ZQotCSAgZmlsZSBzeXN0ZW0uICBDdXJyZW50bHksIGV4dDJmcyBpcyBvbmx5IGltcGxlbWVudGVkIGluIExpbnV4IGJ1dAotCSAgd2lsbCBzb29uIGJlIHBhcnQgb2YgR251IEh1cmQgYW5kIG9mIE1hc2l4LgotCi1DaGFuZ2VzIGZyb20gdmVyc2lvbiAwLjRiIHRvIHZlcnNpb24gMC41Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JLSBOZXcgc3VwZXJibG9jayBmaWVsZHM6IHNfbGFzdGNoZWNrIGFuZCBzX2NoZWNraW50ZXJ2YWwgYWRkZWQKLQkgIGJ5IFV3ZSBPaHNlIDx1d2VAdGlya2EuZ3VuLmRlPiB0byBpbXBsZW1lbnQgdGltZWRlcGVuZGVudCBjaGVja3MKLQkgIG9mIHRoZSBmaWxlIHN5c3RlbQotCS0gUmVhbCByYW5kb20gbnVtYmVycyBmb3Igc2VjdXJlIHJtIGFkZGVkIGJ5IFBpZXJyZSBkZWwgUGVydWdpYQotCSAgPGRlbHBlcnVnQGdsYS5lY29sZWRvYy5pYnAuZnI+Ci0JLSBUaGUgbW91bnQgd2FybmluZ3MgcmVsYXRlZCB0byB0aGUgc3RhdGUgb2YgYSBmcyBhcmUgbm90IHByaW50ZWQKLQkgIGlmIHRoZSBmcyBpcyBtb3VudGVkIHJlYWQtb25seSwgaWRlYSBieSBOaWNrIEhvbGxvd2F5Ci0JICA8YWxmaWVAZGNzLndhcndpY2suYWMudWs+Ci0KLUNoYW5nZXMgZnJvbSB2ZXJzaW9uIDAuNGEgdG8gdmVyc2lvbiAwLjRiCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCS0gQ29weXJpZ2h0cyBjaGFuZ2VkIHRvIGluY2x1ZGUgdGhlIG5hbWUgb2YgbXkgbGFib3JhdG9yeS4KLQktIENsZWFuIHVwIG9mIGJhbGxvYy5jIGFuZCBpYWxsb2MuYy4KLQktIE1vcmUgY29uc2lzdGVuY3kgY2hlY2tzLgotCS0gQmxvY2sgcHJlYWxsb2NhdGlvbiBhZGRlZCBieSBTdGVwaGVuIFR3ZWVkaWUuCi0JLSBEaXJlY3QgcmVhZHMgb2YgZGlyZWN0b3JpZXMgZGlzYWxsb3dlZC4KLQktIFJlYWRhaGVhZCBpbXBsZW1lbnRlZCBpbiByZWFkZGlyIGJ5IFN0ZXBoZW4gVHdlZWRpZS4KLQktIEJ1Z3MgaW4gYmxvY2sgYW5kIGlub2RlcyBhbGxvY2F0aW9uIGZpeGVkLgotCS0gUmVhZGFoZWFkIGltcGxlbWVudGVkIGluIGV4dDJfZmluZF9lbnRyeSBieSBDaGlwIFNhbHplbmJlcmcuCi0JLSBOZXcgbW91bnQgb3B0aW9uczoKLQkgIGBjaGVjaz1ub25lfG5vcm1hbHxzdHJpY3QnCi0JICBgZGVidWcnCi0JICBgZXJyb3JzPWNvbnRpbnVlfHJlbW91bnQtcm98cGFuaWMnCi0JICBgZ3JwaWQnLCBgYnNkZ3JvdXBzJwotCSAgYG5vY2hlY2snCi0JICBgbm9ncnBpZCcsIGBzeXN2Z3JvdXBzJwotCS0gdHJ1bmNhdGUoKSBub3cgdHJpZXMgdG8gZGVhbGxvY2F0ZSBjb250aWd1b3VzIGJsb2NrcyBpbiBhIHNpbmdsZSBjYWxsCi0JICB0byBleHQyX2ZyZWVfYmxvY2tzKCkuCi0JLSBsb3RzIG9mIGNvc21ldGljIGNoYW5nZXMuCi0KLUNoYW5nZXMgZnJvbSB2ZXJzaW9uIDAuNCB0byB2ZXJzaW9uIDAuNGEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgLSB0aGUgYHN5bmMnIG9wdGlvbiBzdXBwb3J0IGlzIG5vdyBjb21wbGV0ZS4gIFZlcnNpb24gMC40IHdhcyBub3QKLSAgICAgICAgICBzdXBwb3J0aW5nIGl0IHdoZW4gdHJ1bmNhdGluZyBhIGZpbGUuICBJIGhhdmUgdGVzdGVkIHRoZSBzeW5jaHJvbm91cwotICAgICAgICAgIHdyaXRlcyBhbmQgdGhleSB3b3JrIGJ1dCB0aGV5IG1ha2UgdGhlIHN5c3RlbSB2ZXJ5IHNsb3cgOi0oICBJIGhhdmUKLSAgICAgICAgICB0byB3b3JrIGFnYWluIG9uIHRoaXMgdG8gbWFrZSBpdCBmYXN0ZXIuCi0gICAgICAgIC0gd2hlbiBkZXRlY3RpbmcgYW4gZXJyb3Igb24gYSBtb3VudGVkIGZpbGVzeXN0ZW0sIHZlcnNpb24gMC40IHVzZWQKLSAgICAgICAgICB0byB0cnkgdG8gd3JpdGUgYSBmbGFnIGluIHRoZSBzdXBlciBibG9jayBldmVuIGlmIHRoZSBmaWxlc3lzdGVtIGhhZAotICAgICAgICAgIGJlZW4gbW91bnRlZCByZWFkLW9ubHkuICBUaGlzIGlzIGZpeGVkLgotICAgICAgICAtIHRoZSBgc2I9Iycgb3B0aW9uIG5vdyBjYXVzZXMgdGhlIGtlcm5lbCBjb2RlIHRvIHVzZSB0aGUgZmlsZXN5c3RlbQotICAgICAgICAgIGRlc2NyaXB0b3JzIGxvY2F0ZWQgYXQgYmxvY2sgIysxLiAgVmVyc2lvbiAwLjQgdXNlZCB0aGUgc3VwZXJibG9jawotICAgICAgICAgIGJhY2t1cCBsb2NhdGVkIGF0IGJsb2NrICMgYnV0IHVzZWQgdGhlIG1haW4gY29weSBvZiB0aGUgZGVzY3JpcHRvcnMuCi0gICAgICAgIC0gYSBuZXcgZmlsZSBhdHRyaWJ1dGUgYFMnIGlzIHN1cHBvcnRlZC4gIFRoaXMgYXR0cmlidXRlIGNhdXNlcwotICAgICAgICAgIHN5bmNocm9ub3VzIHdyaXRlcyBidXQgaXMgYXBwbGllZCB0byBhIGZpbGUgbm90IHRvIHRoZSBlbnRpcmUgZmlsZQotICAgICAgICAgIHN5c3RlbSAodGhhbmtzIHRvIE1pY2hhZWwgS3JhZWhlIDxrcmFlaGVAYmFrdW5pbi5ub3J0aC5kZT4gZm9yCi0gICAgICAgICAgc3VnZ2VzdGluZyBpdCkuCi0gICAgICAgIC0gdGhlIGRpcmVjdG9yeSBjYWNoZSBpcyBpbmhpYml0ZWQgYnkgZGVmYXVsdC4gIFRoZSBjYWNoZSBtYW5hZ2VtZW50Ci0gICAgICAgICAgY29kZSBzZWVtcyB0byBiZSBidWdneSBhbmQgSSBoYXZlIHRvIGxvb2sgYXQgaXQgY2FyZWZ1bGx5IGJlZm9yZQotICAgICAgICAgIHVzaW5nIGl0IGFnYWluLgotICAgICAgICAtIGRlbGV0aW5nIGEgZmlsZSB3aXRoIHRoZSBgcycgYXR0cmlidXRlIChzZWN1cmUgZGVsZXRpb24pIGNhdXNlcyBpdHMKLSAgICAgICAgICBibG9ja3MgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCByYW5kb20gdmFsdWVzIG5vdCB3aXRoIHplcm9zICh0aGFua3MgdG8KLSAgICAgICAgICBNaWNoYWVsIEEuIEdyaWZmaXRoIDxncmlmQGNzLnVjci5lZHU+IGZvciBzdWdnZXN0aW5nIGl0KS4KLSAgICAgICAgLSBsb3RzIG9mIGNvc21ldGljIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUuCi0KLUNoYW5nZXMgZnJvbSB2ZXJzaW9uIDAuMyB0byB2ZXJzaW9uIDAuNAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgIC0gVGhyZWUgbmV3IG1vdW50IG9wdGlvbnMgYXJlIHN1cHBvcnRlZDogYGNoZWNrJywgYHN5bmMnIGFuZCBgc2I9IycuCi0gICAgICAgICAgYGNoZWNrJyB0ZWxscyB0aGUga2VybmVsIGNvZGUgdG8gbWFrZSBtb3JlIGNvbnNpc3RlbmN5IGNoZWNrcwotICAgICAgICAgIHdoZW4gdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQuICBDdXJyZW50bHksIHRoZSBrZXJuZWwgY29kZSBjaGVja3MKLSAgICAgICAgICB0aGF0IHRoZSBibG9ja3MgYW5kIGlub2RlcyBiaXRtYXBzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGZyZWUKLSAgICAgICAgICBibG9ja3MgYW5kIGlub2RlcyBjb3VudHMuICBNb3JlIGNoZWNrcyB3aWxsIGJlIGFkZGVkIGluIGZ1dHVyZQotICAgICAgICAgIHJlbGVhc2VzLgotICAgICAgICAgIGBzeW5jJyB0ZWxscyB0aGUga2VybmVsIGNvZGUgdG8gdXNlIHN5bmNocm9ub3VzIHdyaXRlcyB3aGVuIHVwZGF0aW5nCi0gICAgICAgICAgYW4gaW5vZGUsIGEgYml0bWFwLCBhIGRpcmVjdG9yeSBlbnRyeSBvciBhbiBpbmRpcmVjdCBibG9jay4gIFRoaXMKLSAgICAgICAgICBjYW4gbWFrZSB0aGUgZmlsZSBzeXN0ZW0gbXVjaCBzbG93ZXIgYnV0IGNhbiBiZSBhIGJpZyB3aW4gZm9yIGZpbGVzCi0gICAgICAgICAgcmVjb3ZlcnkgaW4gY2FzZSBvZiBhIGNyYXNoIChhbmQgd2UgY2FuIG5vdyBzYXkgdG8gdGhlIEJTRCBmb2xrcwotICAgICAgICAgIHRoYXQgTGludXggYWxzbyBzdXBwb3J0cyBzeW5jaHJvbm91cyB1cGRhdGVzIDotKS4KLSAgICAgICAgICBgc2I9IycgdGVsbHMgdGhlIGtlcm5lbCBjb2RlIHRvIHVzZSBhbiBhbHRlcm5hdGUgc3VwZXIgYmxvY2sgaW5zdGVhZAotICAgICAgICAgIG9mIGl0cyBtYXN0ZXIgY29weS4gIGAjJyBpcyB0aGUgbnVtYmVyIG9mIHRoZSBibG9jayAoY291bnRlZCBpbgotICAgICAgICAgIDEwMjQgYnl0ZXMgYmxvY2tzKSB3aGljaCBjb250YWlucyB0aGUgYWx0ZXJuYXRlIHN1cGVyIGJsb2NrLgotICAgICAgICAgIEFuIGV4dDIgZmlsZSBzeXN0ZW0gdHlwaWNhbGx5IGNvbnRhaW5zIGJhY2t1cHMgb2YgdGhlIHN1cGVyIGJsb2NrCi0gICAgICAgICAgYXQgYmxvY2tzIDgxOTMsIDE2Mzg1LCBhbmQgc28gb24uCi0gICAgICAgIC0gSSBoYXZlIGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdmFsaWQgZmxhZyB1c2VkIGJ5IGUyZnNjay4gIGl0Ci0gICAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZSBzeXN0ZW0uICBJZiB0aGUga2VybmVsIGNvZGUKLSAgICAgICAgICBkZXRlY3RzIGFuIGluY29uc2lzdGVuY3kgd2hpbGUgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQsIGl0IGZsYWdzCi0gICAgICAgICAgaXQgYXMgZXJyb25lb3VzIGFuZCBlMmZzY2sgd2lsbCBkZXRlY3QgdGhhdCBvbiBuZXh0IHJ1bi4KLSAgICAgICAgLSBUaGUgc3VwZXIgYmxvY2sgbm93IGNvbnRhaW5zIGEgbW91bnQgY291bnRlci4gIFRoaXMgY291bnRlciBpcwotICAgICAgICAgIGluY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCByZWFkL3dyaXRlLiAgIFdoZW4KLSAgICAgICAgICB0aGlzIGNvdW50ZXIgYmVjb21lcyBiaWdnZXIgdGhhbiBhIG1heGltYWwgbW91bnQgY291bnRzIChhbHNvIHN0b3JlZAotICAgICAgICAgIGluIHRoZSBzdXBlciBibG9jayksIGUyZnNjayBjaGVja3MgdGhlIGZpbGUgc3lzdGVtLCBldmVuIGlmIGl0IGhhZAotICAgICAgICAgIGJlZW4gdW5tb3VudGVkIGNsZWFubHksIGFuZCByZXNldHMgdGhpcyBjb3VudGVyIHRvIDAuCi0gICAgICAgIC0gRmlsZSBhdHRyaWJ1dGVzIGFyZSBub3cgc3VwcG9ydGVkLiAgT25lIGNhbiBhc3NvY2lhdGUgYSBzZXQgb2YKLSAgICAgICAgICBhdHRyaWJ1dGVzIHRvIGEgZmlsZS4gIFRocmVlIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQ6Ci0gICAgICAgICAgYGMnOiB0aGUgZmlsZSBpcyBtYXJrZWQgZm9yIGF1dG9tYXRpYyBjb21wcmVzc2lvbiwKLSAgICAgICAgICBgcyc6IHRoZSBmaWxlIGlzIG1hcmtlZCBmb3Igc2VjdXJlIGRlbGV0aW9uOiB3aGVuIHRoZSBmaWxlIGlzCi0gICAgICAgICAgZGVsZXRlZCwgaXRzIGJsb2NrcyBhcmUgemVyb2VkIGFuZCB3cml0dGVuIGJhY2sgdG8gdGhlIGRpc2ssCi0gICAgICAgICAgYHUnOiB0aGUgZmlsZSBpcyBtYXJrZWQgZm9yIHVuZGVsZXRpb246IHdoZW4gdGhlIGZpbGUgaXMgZGVsZXRlZCwKLSAgICAgICAgICBpdHMgY29udGVudHMgYXJlIHNhdmVkIHRvIGFsbG93IGEgZnV0dXJlIHVuZGVsZXRpb24uCi0gICAgICAgICAgQ3VycmVudGx5LCBvbmx5IHRoZSBgcycgYXR0cmlidXRlIGlzIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwKLSAgICAgICAgICBjb2RlLiAgU3VwcG9ydCBmb3IgdGhlIG90aGVyIGF0dHJpYnV0ZXMgd2lsbCBiZSBhZGRlZCBpbiBhIGZ1dHVyZQotICAgICAgICAgIHJlbGVhc2UuCi0gICAgICAgIC0gYSBmZXcgYnVncyByZWxhdGVkIHRvIHRpbWVzIHVwZGF0ZXMgaGF2ZSBiZWVuIGZpeGVkIGJ5IEJydWNlCi0gICAgICAgICAgRXZhbnMgYW5kIG1lLgotICAgICAgICAtIGEgYnVnIHJlbGF0ZWQgdG8gdGhlIGxpbmtzIGNvdW50IG9mIGRlbGV0ZWQgaW5vZGVzIGhhcyBiZWVuIGZpeGVkLgotICAgICAgICAgIFByZXZpb3VzIHZlcnNpb25zIHVzZWQgdG8ga2VlcCB0aGUgbGlua3MgY291bnQgc2V0IHRvIDEgd2hlbiBhIGZpbGUKLSAgICAgICAgICB3YXMgZGVsZXRlZC4gIFRoZSBuZXcgdmVyc2lvbiBub3cgc2V0cyBsaW5rc19jb3VudCB0byAwIHdoZW4gZGVsZXRpbmcKLSAgICAgICAgICB0aGUgbGFzdCBsaW5rLgotICAgICAgICAtIGEgcmFjZSBjb25kaXRpb24gd2hlbiBkZWFsbG9jYXRpbmcgYW4gaW5vZGUgaGFzIGJlZW4gZml4ZWQgYnkKLSAgICAgICAgICBTdGVwaGVuIFR3ZWVkaWUuCi0KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYmFsbG9jLmMgYi9mcy9leHQyL2JhbGxvYy5jCmluZGV4IDY1OTFhYmUuLmJiNjkwODAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYmFsbG9jLmMKKysrIGIvZnMvZXh0Mi9iYWxsb2MuYwpAQCAtNjI0LDc2ICs2MjQsMyBAQAogCXJldHVybiBFWFQyX1NCKHNiKS0+c19nZGJfY291bnQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfRVhUMl9DSEVDSwotLyogQ2FsbGVkIGF0IG1vdW50LXRpbWUsIHN1cGVyLWJsb2NrIGlzIGxvY2tlZCAqLwotdm9pZCBleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoID0gTlVMTDsKLQlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIGVzOwotCXVuc2lnbmVkIGxvbmcgZGVzY19jb3VudCwgYml0bWFwX2NvdW50LCB4LCBqOwotCXVuc2lnbmVkIGxvbmcgZGVzY19ibG9ja3M7Ci0Jc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqIGRlc2M7Ci0JaW50IGk7Ci0KLQllcyA9IEVYVDJfU0Ioc2IpLT5zX2VzOwotCWRlc2NfY291bnQgPSAwOwotCWJpdG1hcF9jb3VudCA9IDA7Ci0JZGVzYyA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IEVYVDJfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsgaSsrKSB7Ci0JCWRlc2MgPSBleHQyX2dldF9ncm91cF9kZXNjIChzYiwgaSwgTlVMTCk7Ci0JCWlmICghZGVzYykKLQkJCWNvbnRpbnVlOwotCQlkZXNjX2NvdW50ICs9IGxlMTZfdG9fY3B1KGRlc2MtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KTsKLQkJYnJlbHNlKGJpdG1hcF9iaCk7Ci0JCWJpdG1hcF9iaCA9IHJlYWRfYmxvY2tfYml0bWFwKHNiLCBpKTsKLQkJaWYgKCFiaXRtYXBfYmgpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZXh0Ml9iZ19oYXNfc3VwZXIoc2IsIGkpICYmCi0JCQkJIWV4dDJfdGVzdF9iaXQoMCwgYml0bWFwX2JoLT5iX2RhdGEpKQotCQkJZXh0Ml9lcnJvcihzYiwgX19GVU5DVElPTl9fLAotCQkJCSAgICJTdXBlcmJsb2NrIGluIGdyb3VwICVkIGlzIG1hcmtlZCBmcmVlIiwgaSk7Ci0KLQkJZGVzY19ibG9ja3MgPSBleHQyX2JnX251bV9nZGIoc2IsIGkpOwotCQlmb3IgKGogPSAwOyBqIDwgZGVzY19ibG9ja3M7IGorKykKLQkJCWlmICghZXh0Ml90ZXN0X2JpdChqICsgMSwgYml0bWFwX2JoLT5iX2RhdGEpKQotCQkJCWV4dDJfZXJyb3Ioc2IsIF9fRlVOQ1RJT05fXywKLQkJCQkJICAgIkRlc2NyaXB0b3IgYmxvY2sgIyVsZCBpbiBncm91cCAiCi0JCQkJCSAgICIlZCBpcyBtYXJrZWQgZnJlZSIsIGosIGkpOwotCi0JCWlmICghYmxvY2tfaW5fdXNlKGxlMzJfdG9fY3B1KGRlc2MtPmJnX2Jsb2NrX2JpdG1hcCksCi0JCQkJCXNiLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQlleHQyX2Vycm9yKHNiLCAiZXh0Ml9jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkgICAgIkJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLAotCQkJCSAgICBpKTsKLQotCQlpZiAoIWJsb2NrX2luX3VzZShsZTMyX3RvX2NwdShkZXNjLT5iZ19pbm9kZV9iaXRtYXApLAotCQkJCQlzYiwgYml0bWFwX2JoLT5iX2RhdGEpKQotCQkJZXh0Ml9lcnJvcihzYiwgImV4dDJfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkJICAgICJJbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVkIGlzIG1hcmtlZCBmcmVlIiwKLQkJCQkgICAgaSk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEVYVDJfU0Ioc2IpLT5zX2l0Yl9wZXJfZ3JvdXA7IGorKykKLQkJCWlmICghYmxvY2tfaW5fdXNlKGxlMzJfdG9fY3B1KGRlc2MtPmJnX2lub2RlX3RhYmxlKSArIGosCi0JCQkJCQlzYiwgYml0bWFwX2JoLT5iX2RhdGEpKQotCQkJCWV4dDJfZXJyb3IgKHNiLCAiZXh0Ml9jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkJICAgICJCbG9jayAjJWxkIG9mIHRoZSBpbm9kZSB0YWJsZSBpbiAiCi0JCQkJCSAgICAiZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLCBqLCBpKTsKLQotCQl4ID0gZXh0Ml9jb3VudF9mcmVlKGJpdG1hcF9iaCwgc2ItPnNfYmxvY2tzaXplKTsKLQkJaWYgKGxlMTZfdG9fY3B1KGRlc2MtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KSAhPSB4KQotCQkJZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAiLAotCQkJCSAgICAiV3JvbmcgZnJlZSBibG9ja3MgY291bnQgZm9yIGdyb3VwICVkLCAiCi0JCQkJICAgICJzdG9yZWQgPSAlZCwgY291bnRlZCA9ICVsdSIsIGksCi0JCQkJICAgIGxlMTZfdG9fY3B1KGRlc2MtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KSwgeCk7Ci0JCWJpdG1hcF9jb3VudCArPSB4OwotCX0KLQlpZiAobGUzMl90b19jcHUoZXMtPnNfZnJlZV9ibG9ja3NfY291bnQpICE9IGJpdG1hcF9jb3VudCkKLQkJZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAiLAotCQkJIldyb25nIGZyZWUgYmxvY2tzIGNvdW50IGluIHN1cGVyIGJsb2NrLCAiCi0JCQkic3RvcmVkID0gJWx1LCBjb3VudGVkID0gJWx1IiwKLQkJCSh1bnNpZ25lZCBsb25nKWxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50KSwKLQkJCWJpdG1hcF9jb3VudCk7Ci0JYnJlbHNlKGJpdG1hcF9iaCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaWFsbG9jLmMgYi9mcy9leHQyL2lhbGxvYy5jCmluZGV4IGUyZDYyMDguLjc0NzE0YWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaWFsbG9jLmMKKysrIGIvZnMvZXh0Mi9pYWxsb2MuYwpAQCAtNzAwLDQzICs3MDAsMyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotI2lmZGVmIENPTkZJR19FWFQyX0NIRUNLCi0vKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovCi12b2lkIGV4dDJfY2hlY2tfaW5vZGVzX2JpdG1hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCi17Ci0Jc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBlcyA9IEVYVDJfU0Ioc2IpLT5zX2VzOwotCXVuc2lnbmVkIGxvbmcgZGVzY19jb3VudCA9IDAsIGJpdG1hcF9jb3VudCA9IDA7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmggPSBOVUxMOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEVYVDJfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmRlc2M7Ci0JCXVuc2lnbmVkIHg7Ci0KLQkJZGVzYyA9IGV4dDJfZ2V0X2dyb3VwX2Rlc2Moc2IsIGksIE5VTEwpOwotCQlpZiAoIWRlc2MpCi0JCQljb250aW51ZTsKLQkJZGVzY19jb3VudCArPSBsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2lub2Rlc19jb3VudCk7Ci0JCWJyZWxzZShiaXRtYXBfYmgpOwotCQliaXRtYXBfYmggPSByZWFkX2lub2RlX2JpdG1hcChzYiwgaSk7Ci0JCWlmICghYml0bWFwX2JoKQotCQkJY29udGludWU7Ci0JCQotCQl4ID0gZXh0Ml9jb3VudF9mcmVlKGJpdG1hcF9iaCwgRVhUMl9JTk9ERVNfUEVSX0dST1VQKHNiKSAvIDgpOwotCQlpZiAobGUxNl90b19jcHUoZGVzYy0+YmdfZnJlZV9pbm9kZXNfY291bnQpICE9IHgpCi0JCQlleHQyX2Vycm9yIChzYiwgImV4dDJfY2hlY2tfaW5vZGVzX2JpdG1hcCIsCi0JCQkJICAgICJXcm9uZyBmcmVlIGlub2RlcyBjb3VudCBpbiBncm91cCAlZCwgIgotCQkJCSAgICAic3RvcmVkID0gJWQsIGNvdW50ZWQgPSAlbHUiLCBpLAotCQkJCSAgICBsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2lub2Rlc19jb3VudCksIHgpOwotCQliaXRtYXBfY291bnQgKz0geDsKLQl9Ci0JYnJlbHNlKGJpdG1hcF9iaCk7Ci0JaWYgKHBlcmNwdV9jb3VudGVyX3JlYWQoJkVYVDJfU0Ioc2IpLT5zX2ZyZWVpbm9kZXNfY291bnRlcikgIT0KLQkJCQliaXRtYXBfY291bnQpCi0JCWV4dDJfZXJyb3Ioc2IsICJleHQyX2NoZWNrX2lub2Rlc19iaXRtYXAiLAotCQkJICAgICJXcm9uZyBmcmVlIGlub2RlcyBjb3VudCBpbiBzdXBlciBibG9jaywgIgotCQkJICAgICJzdG9yZWQgPSAlbHUsIGNvdW50ZWQgPSAlbHUiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfaW5vZGVzX2NvdW50KSwKLQkJCSAgICBiaXRtYXBfY291bnQpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmMKaW5kZXggM2MwYzdjNi4uZTRlZDRiMyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9zdXBlci5jCisrKyBiL2ZzL2V4dDIvc3VwZXIuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiBlbnVtIHsKIAlPcHRfYnNkX2RmLCBPcHRfbWluaXhfZGYsIE9wdF9ncnBpZCwgT3B0X25vZ3JwaWQsCiAJT3B0X3Jlc2dpZCwgT3B0X3Jlc3VpZCwgT3B0X3NiLCBPcHRfZXJyX2NvbnQsIE9wdF9lcnJfcGFuaWMsCi0JT3B0X2Vycl9ybywgT3B0X25vdWlkMzIsIE9wdF9jaGVjaywgT3B0X25vY2hlY2ssIE9wdF9kZWJ1ZywKKwlPcHRfZXJyX3JvLCBPcHRfbm91aWQzMiwgT3B0X25vY2hlY2ssIE9wdF9kZWJ1ZywKIAlPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwgT3B0X25vYmgsIE9wdF91c2VyX3hhdHRyLCBPcHRfbm91c2VyX3hhdHRyLAogCU9wdF9hY2wsIE9wdF9ub2FjbCwgT3B0X3hpcCwgT3B0X2lnbm9yZSwgT3B0X2VyciwgT3B0X3F1b3RhLAogCU9wdF91c3JxdW90YSwgT3B0X2dycHF1b3RhCkBAIC0zMDMsNyArMzAzLDYgQEAKIAl7T3B0X25vdWlkMzIsICJub3VpZDMyIn0sCiAJe09wdF9ub2NoZWNrLCAiY2hlY2s9bm9uZSJ9LAogCXtPcHRfbm9jaGVjaywgIm5vY2hlY2sifSwKLQl7T3B0X2NoZWNrLCAiY2hlY2sifSwKIAl7T3B0X2RlYnVnLCAiZGVidWcifSwKIAl7T3B0X29sZGFsbG9jLCAib2xkYWxsb2MifSwKIAl7T3B0X29ybG92LCAib3Jsb3YifSwKQEAgLTM3NiwxMyArMzc1LDYgQEAKIAkJY2FzZSBPcHRfbm91aWQzMjoKIAkJCXNldF9vcHQgKHNiaS0+c19tb3VudF9vcHQsIE5PX1VJRDMyKTsKIAkJCWJyZWFrOwotCQljYXNlIE9wdF9jaGVjazoKLSNpZmRlZiBDT05GSUdfRVhUMl9DSEVDSwotCQkJc2V0X29wdCAoc2JpLT5zX21vdW50X29wdCwgQ0hFQ0spOwotI2Vsc2UKLQkJCXByaW50aygiRVhUMiBDaGVjayBvcHRpb24gbm90IHN1cHBvcnRlZFxuIik7Ci0jZW5kaWYKLQkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2NoZWNrOgogCQkJY2xlYXJfb3B0IChzYmktPnNfbW91bnRfb3B0LCBDSEVDSyk7CiAJCQlicmVhazsKQEAgLTUwMywxMiArNDk1LDYgQEAKIAkJCUVYVDJfQkxPQ0tTX1BFUl9HUk9VUChzYiksCiAJCQlFWFQyX0lOT0RFU19QRVJfR1JPVVAoc2IpLAogCQkJc2JpLT5zX21vdW50X29wdCk7Ci0jaWZkZWYgQ09ORklHX0VYVDJfQ0hFQ0sKLQlpZiAodGVzdF9vcHQgKHNiLCBDSEVDSykpIHsKLQkJZXh0Ml9jaGVja19ibG9ja3NfYml0bWFwIChzYik7Ci0JCWV4dDJfY2hlY2tfaW5vZGVzX2JpdG1hcCAoc2IpOwotCX0KLSNlbmRpZgogCXJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDc5OTJkMjEuLmFlMTE0OGMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMTUxNyw3NiArMTUxNywzIEBACiAJcmV0dXJuIEVYVDNfU0Ioc2IpLT5zX2dkYl9jb3VudDsKIH0KIAotI2lmZGVmIENPTkZJR19FWFQzX0NIRUNLCi0vKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovCi12b2lkIGV4dDNfY2hlY2tfYmxvY2tzX2JpdG1hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCi17Ci0Jc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKmVzOwotCXVuc2lnbmVkIGxvbmcgZGVzY19jb3VudCwgYml0bWFwX2NvdW50LCB4LCBqOwotCXVuc2lnbmVkIGxvbmcgZGVzY19ibG9ja3M7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmggPSBOVUxMOwotCXN0cnVjdCBleHQzX2dyb3VwX2Rlc2MgKmdkcDsKLQlpbnQgaTsKLQotCWVzID0gRVhUM19TQihzYiktPnNfZXM7Ci0JZGVzY19jb3VudCA9IDA7Ci0JYml0bWFwX2NvdW50ID0gMDsKLQlnZHAgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBFWFQzX1NCKHNiKS0+c19ncm91cHNfY291bnQ7IGkrKykgewotCQlnZHAgPSBleHQzX2dldF9ncm91cF9kZXNjIChzYiwgaSwgTlVMTCk7Ci0JCWlmICghZ2RwKQotCQkJY29udGludWU7Ci0JCWRlc2NfY291bnQgKz0gbGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCk7Ci0JCWJyZWxzZShiaXRtYXBfYmgpOwotCQliaXRtYXBfYmggPSByZWFkX2Jsb2NrX2JpdG1hcChzYiwgaSk7Ci0JCWlmIChiaXRtYXBfYmggPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChleHQzX2JnX2hhc19zdXBlcihzYiwgaSkgJiYKLQkJCQkhZXh0M190ZXN0X2JpdCgwLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQlleHQzX2Vycm9yKHNiLCBfX0ZVTkNUSU9OX18sCi0JCQkJICAgIlN1cGVyYmxvY2sgaW4gZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLCBpKTsKLQotCQlkZXNjX2Jsb2NrcyA9IGV4dDNfYmdfbnVtX2dkYihzYiwgaSk7Ci0JCWZvciAoaiA9IDA7IGogPCBkZXNjX2Jsb2NrczsgaisrKQotCQkJaWYgKCFleHQzX3Rlc3RfYml0KGogKyAxLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQkJZXh0M19lcnJvcihzYiwgX19GVU5DVElPTl9fLAotCQkJCQkgICAiRGVzY3JpcHRvciBibG9jayAjJWxkIGluIGdyb3VwICIKLQkJCQkJICAgIiVkIGlzIG1hcmtlZCBmcmVlIiwgaiwgaSk7Ci0KLQkJaWYgKCFibG9ja19pbl91c2UgKGxlMzJfdG9fY3B1KGdkcC0+YmdfYmxvY2tfYml0bWFwKSwKLQkJCQkJCXNiLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQlleHQzX2Vycm9yIChzYiwgImV4dDNfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkJICAgICJCbG9jayBiaXRtYXAgZm9yIGdyb3VwICVkIGlzIG1hcmtlZCBmcmVlIiwKLQkJCQkgICAgaSk7Ci0KLQkJaWYgKCFibG9ja19pbl91c2UgKGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfYml0bWFwKSwKLQkJCQkJCXNiLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQlleHQzX2Vycm9yIChzYiwgImV4dDNfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkJICAgICJJbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVkIGlzIG1hcmtlZCBmcmVlIiwKLQkJCQkgICAgaSk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEVYVDNfU0Ioc2IpLT5zX2l0Yl9wZXJfZ3JvdXA7IGorKykKLQkJCWlmICghYmxvY2tfaW5fdXNlIChsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX3RhYmxlKSArIGosCi0JCQkJCQkJc2IsIGJpdG1hcF9iaC0+Yl9kYXRhKSkKLQkJCQlleHQzX2Vycm9yIChzYiwgImV4dDNfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkJCSAgICAiQmxvY2sgIyVkIG9mIHRoZSBpbm9kZSB0YWJsZSBpbiAiCi0JCQkJCSAgICAiZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLCBqLCBpKTsKLQotCQl4ID0gZXh0M19jb3VudF9mcmVlKGJpdG1hcF9iaCwgc2ItPnNfYmxvY2tzaXplKTsKLQkJaWYgKGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQpICE9IHgpCi0JCQlleHQzX2Vycm9yIChzYiwgImV4dDNfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkJICAgICJXcm9uZyBmcmVlIGJsb2NrcyBjb3VudCBmb3IgZ3JvdXAgJWQsICIKLQkJCQkgICAgInN0b3JlZCA9ICVkLCBjb3VudGVkID0gJWx1IiwgaSwKLQkJCQkgICAgbGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCksIHgpOwotCQliaXRtYXBfY291bnQgKz0geDsKLQl9Ci0JYnJlbHNlKGJpdG1hcF9iaCk7Ci0JaWYgKGxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50KSAhPSBiaXRtYXBfY291bnQpCi0JCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCSJXcm9uZyBmcmVlIGJsb2NrcyBjb3VudCBpbiBzdXBlciBibG9jaywgIgotCQkJInN0b3JlZCA9ICVsdSwgY291bnRlZCA9ICVsdSIsCi0JCQkodW5zaWduZWQgbG9uZylsZTMyX3RvX2NwdShlcy0+c19mcmVlX2Jsb2Nrc19jb3VudCksCi0JCQliaXRtYXBfY291bnQpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL2lhbGxvYy5jIGIvZnMvZXh0My9pYWxsb2MuYwppbmRleCBkZjNmNTE3Li45ZTRhMjQzIDEwMDY0NAotLS0gYS9mcy9leHQzL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDMvaWFsbG9jLmMKQEAgLTc1Niw0NCArNzU2LDMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfRVhUM19DSEVDSwotLyogQ2FsbGVkIGF0IG1vdW50LXRpbWUsIHN1cGVyLWJsb2NrIGlzIGxvY2tlZCAqLwotdm9pZCBleHQzX2NoZWNrX2lub2Rlc19iaXRtYXAgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKQotewotCXN0cnVjdCBleHQzX3N1cGVyX2Jsb2NrICogZXM7Ci0JdW5zaWduZWQgbG9uZyBkZXNjX2NvdW50LCBiaXRtYXBfY291bnQsIHg7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmggPSBOVUxMOwotCXN0cnVjdCBleHQzX2dyb3VwX2Rlc2MgKiBnZHA7Ci0JaW50IGk7Ci0KLQllcyA9IEVYVDNfU0Ioc2IpLT5zX2VzOwotCWRlc2NfY291bnQgPSAwOwotCWJpdG1hcF9jb3VudCA9IDA7Ci0JZ2RwID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgRVhUM19TQihzYiktPnNfZ3JvdXBzX2NvdW50OyBpKyspIHsKLQkJZ2RwID0gZXh0M19nZXRfZ3JvdXBfZGVzYyAoc2IsIGksIE5VTEwpOwotCQlpZiAoIWdkcCkKLQkJCWNvbnRpbnVlOwotCQlkZXNjX2NvdW50ICs9IGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9pbm9kZXNfY291bnQpOwotCQlicmVsc2UoYml0bWFwX2JoKTsKLQkJYml0bWFwX2JoID0gcmVhZF9pbm9kZV9iaXRtYXAoc2IsIGkpOwotCQlpZiAoIWJpdG1hcF9iaCkKLQkJCWNvbnRpbnVlOwotCi0JCXggPSBleHQzX2NvdW50X2ZyZWUoYml0bWFwX2JoLCBFWFQzX0lOT0RFU19QRVJfR1JPVVAoc2IpIC8gOCk7Ci0JCWlmIChsZTE2X3RvX2NwdShnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50KSAhPSB4KQotCQkJZXh0M19lcnJvciAoc2IsICJleHQzX2NoZWNrX2lub2Rlc19iaXRtYXAiLAotCQkJCSAgICAiV3JvbmcgZnJlZSBpbm9kZXMgY291bnQgaW4gZ3JvdXAgJWQsICIKLQkJCQkgICAgInN0b3JlZCA9ICVkLCBjb3VudGVkID0gJWx1IiwgaSwKLQkJCQkgICAgbGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCksIHgpOwotCQliaXRtYXBfY291bnQgKz0geDsKLQl9Ci0JYnJlbHNlKGJpdG1hcF9iaCk7Ci0JaWYgKGxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfaW5vZGVzX2NvdW50KSAhPSBiaXRtYXBfY291bnQpCi0JCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19pbm9kZXNfYml0bWFwIiwKLQkJCSAgICAiV3JvbmcgZnJlZSBpbm9kZXMgY291bnQgaW4gc3VwZXIgYmxvY2ssICIKLQkJCSAgICAic3RvcmVkID0gJWx1LCBjb3VudGVkID0gJWx1IiwKLQkJCSAgICAodW5zaWduZWQgbG9uZylsZTMyX3RvX2NwdShlcy0+c19mcmVlX2lub2Rlc19jb3VudCksCi0JCQkgICAgYml0bWFwX2NvdW50KTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IGY1OTQ5ODkuLjRlNjczMDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogZW51bSB7CiAJT3B0X2JzZF9kZiwgT3B0X21pbml4X2RmLCBPcHRfZ3JwaWQsIE9wdF9ub2dycGlkLAogCU9wdF9yZXNnaWQsIE9wdF9yZXN1aWQsIE9wdF9zYiwgT3B0X2Vycl9jb250LCBPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLAotCU9wdF9ub3VpZDMyLCBPcHRfY2hlY2ssIE9wdF9ub2NoZWNrLCBPcHRfZGVidWcsIE9wdF9vbGRhbGxvYywgT3B0X29ybG92LAorCU9wdF9ub3VpZDMyLCBPcHRfbm9jaGVjaywgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKIAlPcHRfdXNlcl94YXR0ciwgT3B0X25vdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X25vYWNsLAogCU9wdF9yZXNlcnZhdGlvbiwgT3B0X25vcmVzZXJ2YXRpb24sIE9wdF9ub2xvYWQsIE9wdF9ub2JoLAogCU9wdF9jb21taXQsIE9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfaW51bSwKQEAgLTY1Miw3ICs2NTIsNiBAQAogCXtPcHRfbm91aWQzMiwgIm5vdWlkMzIifSwKIAl7T3B0X25vY2hlY2ssICJub2NoZWNrIn0sCiAJe09wdF9ub2NoZWNrLCAiY2hlY2s9bm9uZSJ9LAotCXtPcHRfY2hlY2ssICJjaGVjayJ9LAogCXtPcHRfZGVidWcsICJkZWJ1ZyJ9LAogCXtPcHRfb2xkYWxsb2MsICJvbGRhbGxvYyJ9LAogCXtPcHRfb3Jsb3YsICJvcmxvdiJ9LApAQCAtNzczLDE0ICs3NzIsNiBAQAogCQljYXNlIE9wdF9ub3VpZDMyOgogCQkJc2V0X29wdCAoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X2NoZWNrOgotI2lmZGVmIENPTkZJR19FWFQzX0NIRUNLCi0JCQlzZXRfb3B0IChzYmktPnNfbW91bnRfb3B0LCBDSEVDSyk7Ci0jZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkVYVDMgQ2hlY2sgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwotI2VuZGlmCi0JCQlicmVhazsKIAkJY2FzZSBPcHRfbm9jaGVjazoKIAkJCWNsZWFyX29wdCAoc2JpLT5zX21vdW50X29wdCwgQ0hFQ0spOwogCQkJYnJlYWs7CkBAIC0xMTE1LDEyICsxMTA2LDYgQEAKIAl9IGVsc2UgewogCQlwcmludGsoImludGVybmFsIGpvdXJuYWxcbiIpOwogCX0KLSNpZmRlZiBDT05GSUdfRVhUM19DSEVDSwotCWlmICh0ZXN0X29wdCAoc2IsIENIRUNLKSkgewotCQlleHQzX2NoZWNrX2Jsb2Nrc19iaXRtYXAgKHNiKTsKLQkJZXh0M19jaGVja19pbm9kZXNfYml0bWFwIChzYik7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCBlMmVmZmUyLi5hMGY5YjlmIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtODQ2LDcgKzg0Niw3IEBACiAJe09wdF9lcnIsIE5VTEx9CiB9OwogCi1zdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucywgaW50IGlzX3ZmYXQsIGludCAqZGVidWcsCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucywgaW50IGlzX3ZmYXQsIGludCBzaWxlbnQsIGludCAqZGVidWcsCiAJCQkgc3RydWN0IGZhdF9tb3VudF9vcHRpb25zICpvcHRzKQogewogCWNoYXIgKnA7CkBAIC0xMDA4LDggKzEwMDgsMTEgQEAKIAkJCWJyZWFrOwogCQkvKiB1bmtub3duIG9wdGlvbiAqLwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJGQVQ6IFVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKLQkJCSAgICAgICAib3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CisJCQlpZiAoIXNpbGVudCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiRkFUOiBVbnJlY29nbml6ZWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCisJCQkJICAgICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKKwkJCX0KIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMTA5MSw3ICsxMDk0LDcgQEAKIAlzYi0+c19leHBvcnRfb3AgPSAmZmF0X2V4cG9ydF9vcHM7CiAJc2JpLT5kaXJfb3BzID0gZnNfZGlyX2lub2RlX29wczsKIAotCWVycm9yID0gcGFyc2Vfb3B0aW9ucyhkYXRhLCBpc3ZmYXQsICZkZWJ1ZywgJnNiaS0+b3B0aW9ucyk7CisJZXJyb3IgPSBwYXJzZV9vcHRpb25zKGRhdGEsIGlzdmZhdCwgc2lsZW50LCAmZGVidWcsICZzYmktPm9wdGlvbnMpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZmFpbDsKIApkaWZmIC0tZ2l0IGEvZnMvaGZzL2hmc19mcy5oIGIvZnMvaGZzL2hmc19mcy5oCmluZGV4IGFhZTAxOWEuLmNjNWRjZDUgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9oZnNfZnMuaAorKysgYi9mcy9oZnMvaGZzX2ZzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9MSU5VWF9IRlNfRlNfSAogI2RlZmluZSBfTElOVVhfSEZTX0ZTX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgpkaWZmIC0tZ2l0IGEvZnMvaGZzL2lub2RlLmMgYi9mcy9oZnMvaW5vZGUuYwppbmRleCAzZjY4MGM1Li5kNDk5MzkzYSAxMDA2NDQKLS0tIGEvZnMvaGZzL2lub2RlLmMKKysrIGIvZnMvaGZzL2lub2RlLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tcGFnZS5oPgogCiAjaW5jbHVkZSAiaGZzX2ZzLmgiCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmMKaW5kZXggYjg1YWJjNi4uOTMwY2Q5MiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlICJoZnNwbHVzX2ZzLmgiCiAjaW5jbHVkZSAiaGZzcGx1c19yYXcuaCIKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZGlyLmMgYi9mcy9oZnNwbHVzL2Rpci5jCmluZGV4IDdiZGE3NjYuLjUwYzhmNDRiIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2Rpci5jCisrKyBiL2ZzL2hmc3BsdXMvZGlyLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlICJoZnNwbHVzX2ZzLmgiCiAjaW5jbHVkZSAiaGZzcGx1c19yYXcuaCIKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKaW5kZXggZTcyMzVjYS4uZTNmZjU2YSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgImhmc3BsdXNfZnMuaCIKICNpbmNsdWRlICJoZnNwbHVzX3Jhdy5oIgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCAyYmMwY2RkLi5jNjBlNTYzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAorKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBfTElOVVhfSEZTUExVU19GU19ICiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgImhmc3BsdXNfcmF3LmgiCiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCBmMjA1NzczLi5mYzk4NTgzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KIAogI2luY2x1ZGUgImhmc3BsdXNfZnMuaCIKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwppbmRleCA0NTJmYzFmLi4wY2UxYzQ1IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3N1cGVyLmMKKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmxzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMGM1MWQ2My4uOTU0NTVlODMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJoZnNwbHVzX2ZzLmgiCmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IGEzM2ZiMWQuLjQ2ODRlYjcgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCkBAIC04LDcgKzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZmlsZS5jIGIvZnMvaHBmcy9maWxlLmMKaW5kZXggYWIxNDRkYS4uN2M5OTVhYyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9maWxlLmMKKysrIGIvZnMvaHBmcy9maWxlLmMKQEAgLTExNCwxMSArMTE0LDggQEAKIAlzc2l6ZV90IHJldHZhbDsKIAogCXJldHZhbCA9IGdlbmVyaWNfZmlsZV93cml0ZShmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKLQlpZiAocmV0dmFsID4gMCkgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJaHBmc19pKGlub2RlKS0+aV9kaXJ0eSA9IDE7Ci0JfQorCWlmIChyZXR2YWwgPiAwKQorCQlocGZzX2koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpLT5pX2RpcnR5ID0gMTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IGUwMjZjODAuLjY0OTgzYWIgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC02Myw3ICs2Myw3IEBACiAgKgogICogUmVzdWx0IGlzIGluIGJ5dGVzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBpc19odWdlcGFnZV9tZW1fZW5vdWdoKCkKICAqLwotdW5zaWduZWQgbG9uZworc3RhdGljIHVuc2lnbmVkIGxvbmcKIGh1Z2VfcGFnZXNfbmVlZGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2ZzL2lub3RpZnkuYyBiL2ZzL2lub3RpZnkuYwppbmRleCA5ZmJhZWJmLi5iZjdjZTFkIDEwMDY0NAotLS0gYS9mcy9pbm90aWZ5LmMKKysrIGIvZnMvaW5vdGlmeS5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAkvKiB5b3UgY2FuIG9ubHkgd2F0Y2ggYW4gaW5vZGUgaWYgeW91IGhhdmUgcmVhZCBwZXJtaXNzaW9ucyBvbiBpdCAqLwotCWVycm9yID0gcGVybWlzc2lvbihuZC0+ZGVudHJ5LT5kX2lub2RlLCBNQVlfUkVBRCwgTlVMTCk7CisJZXJyb3IgPSB2ZnNfcGVybWlzc2lvbihuZCwgTUFZX1JFQUQpOwogCWlmIChlcnJvcikgCiAJCXBhdGhfcmVsZWFzZShuZCk7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggYjNmOGExOS4uNmRiYmQ0MiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNTYsNiArMjU2LDM4IEBACiAJcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIG5kKTsKIH0KIAorLyoqCisgKiB2ZnNfcGVybWlzc2lvbiAgLSAgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMgdG8gYSBnaXZlbiBwYXRoCisgKiBAbmQ6CQlsb29rdXAgcmVzdWx0IHRoYXQgZGVzY3JpYmVzIHRoZSBwYXRoCisgKiBAbWFzazoJcmlnaHQgdG8gY2hlY2sgZm9yICglTUFZX1JFQUQsICVNQVlfV1JJVEUsICVNQVlfRVhFQykKKyAqCisgKiBVc2VkIHRvIGNoZWNrIGZvciByZWFkL3dyaXRlL2V4ZWN1dGUgcGVybWlzc2lvbnMgb24gYSBwYXRoLgorICogV2UgdXNlICJmc3VpZCIgZm9yIHRoaXMsIGxldHRpbmcgdXMgc2V0IGFyYml0cmFyeSBwZXJtaXNzaW9ucworICogZm9yIGZpbGVzeXN0ZW0gYWNjZXNzIHdpdGhvdXQgY2hhbmdpbmcgdGhlICJub3JtYWwiIHVpZHMgd2hpY2gKKyAqIGFyZSB1c2VkIGZvciBvdGhlciB0aGluZ3MuCisgKi8KK2ludCB2ZnNfcGVybWlzc2lvbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG1hc2spCit7CisJcmV0dXJuIHBlcm1pc3Npb24obmQtPmRlbnRyeS0+ZF9pbm9kZSwgbWFzaywgbmQpOworfQorCisvKioKKyAqIGZpbGVfcGVybWlzc2lvbiAgLSAgY2hlY2sgZm9yIGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0cyB0byBhIGdpdmVuIGZpbGUKKyAqIEBmaWxlOglmaWxlIHRvIGNoZWNrIGFjY2VzcyByaWdodHMgZm9yCisgKiBAbWFzazoJcmlnaHQgdG8gY2hlY2sgZm9yICglTUFZX1JFQUQsICVNQVlfV1JJVEUsICVNQVlfRVhFQykKKyAqCisgKiBVc2VkIHRvIGNoZWNrIGZvciByZWFkL3dyaXRlL2V4ZWN1dGUgcGVybWlzc2lvbnMgb24gYW4gYWxyZWFkeSBvcGVuZWQKKyAqIGZpbGUuCisgKgorICogTm90ZToKKyAqCURvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbiBuZXcgY29kZS4gIEFsbCBhY2Nlc3MgY2hlY2tzIHNob3VsZAorICoJYmUgZG9uZSB1c2luZyB2ZnNfcGVybWlzc2lvbigpLgorICovCitpbnQgZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gcGVybWlzc2lvbihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgbWFzaywgTlVMTCk7Cit9CisKIC8qCiAgKiBnZXRfd3JpdGVfYWNjZXNzKCkgZ2V0cyB3cml0ZSBwZXJtaXNzaW9uIGZvciBhIGZpbGUuCiAgKiBwdXRfd3JpdGVfYWNjZXNzKCkgcmVsZWFzZXMgdGhpcyB3cml0ZSBwZXJtaXNzaW9uLgpAQCAtNzY1LDkgKzc5Nyw4IEBACiAKIAkJbmQtPmZsYWdzIHw9IExPT0tVUF9DT05USU5VRTsKIAkJZXJyID0gZXhlY19wZXJtaXNzaW9uX2xpdGUoaW5vZGUsIG5kKTsKLQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7IAotCQkJZXJyID0gcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMsIG5kKTsKLQkJfQorCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCQllcnIgPSB2ZnNfcGVybWlzc2lvbihuZCwgTUFZX0VYRUMpOwogIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCkBAIC0xMTA5LDggKzExNDAsOSBAQAogICogQG9wZW5fZmxhZ3M6IG9wZW4gaW50ZW50IGZsYWdzCiAgKiBAY3JlYXRlX21vZGU6IGNyZWF0ZSBpbnRlbnQgZmxhZ3MKICAqLwotaW50IHBhdGhfbG9va3VwX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLAotCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZ3MsIGludCBjcmVhdGVfbW9kZSkKK3N0YXRpYyBpbnQgcGF0aF9sb29rdXBfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZ3MsCisJCQkgICAgICBpbnQgY3JlYXRlX21vZGUpCiB7CiAJcmV0dXJuIF9fcGF0aF9sb29rdXBfaW50ZW50X29wZW4obmFtZSwgbG9va3VwX2ZsYWdzfExPT0tVUF9DUkVBVEUsIG5kLAogCQkJb3Blbl9mbGFncywgY3JlYXRlX21vZGUpOwpAQCAtMTE3Myw5ICsxMjA1LDkgQEAKIAlyZXR1cm4gZGVudHJ5OwogfQogCi1zdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2hhc2goc3RydWN0IHFzdHIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKiBiYXNlKQorc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9oYXNoKHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXJldHVybiBfX2xvb2t1cF9oYXNoKG5hbWUsIGJhc2UsIE5VTEwpOworCXJldHVybiBfX2xvb2t1cF9oYXNoKCZuZC0+bGFzdCwgbmQtPmRlbnRyeSwgbmQpOwogfQogCiAvKiBTTVAtc2FmZSAqLwpAQCAtMTE5OSw3ICsxMjMxLDcgQEAKIAl9CiAJdGhpcy5oYXNoID0gZW5kX25hbWVfaGFzaChoYXNoKTsKIAotCXJldHVybiBsb29rdXBfaGFzaCgmdGhpcywgYmFzZSk7CisJcmV0dXJuIF9fbG9va3VwX2hhc2goJnRoaXMsIGJhc2UsIE5VTEwpOwogYWNjZXNzOgogCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwogfQpAQCAtMTQwNyw3ICsxNDM5LDcgQEAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAoZmxhZyAmIEZNT0RFX1dSSVRFKSkKIAkJcmV0dXJuIC1FSVNESVI7CiAKLQllcnJvciA9IHBlcm1pc3Npb24oaW5vZGUsIGFjY19tb2RlLCBuZCk7CisJZXJyb3IgPSB2ZnNfcGVybWlzc2lvbihuZCwgYWNjX21vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0xNTMyLDcgKzE1NjQsNyBAQAogCWRpciA9IG5kLT5kZW50cnk7CiAJbmQtPmZsYWdzICY9IH5MT09LVVBfUEFSRU5UOwogCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOwotCXBhdGguZGVudHJ5ID0gX19sb29rdXBfaGFzaCgmbmQtPmxhc3QsIG5kLT5kZW50cnksIG5kKTsKKwlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKIAlwYXRoLm1udCA9IG5kLT5tbnQ7CiAKIGRvX2xhc3Q6CkBAIC0xNjM0LDcgKzE2NjYsNyBAQAogCX0KIAlkaXIgPSBuZC0+ZGVudHJ5OwogCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOwotCXBhdGguZGVudHJ5ID0gX19sb29rdXBfaGFzaCgmbmQtPmxhc3QsIG5kLT5kZW50cnksIG5kKTsKKwlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKIAlwYXRoLm1udCA9IG5kLT5tbnQ7CiAJX19wdXRuYW1lKG5kLT5sYXN0Lm5hbWUpOwogCWdvdG8gZG9fbGFzdDsKQEAgLTE2NjYsNyArMTY5OCw3IEBACiAJLyoKIAkgKiBEbyB0aGUgZmluYWwgbG9va3VwLgogCSAqLwotCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZC0+bGFzdCwgbmQtPmRlbnRyeSk7CisJZGVudHJ5ID0gbG9va3VwX2hhc2gobmQpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBmYWlsOwogCkBAIC0xOTAxLDcgKzE5MzMsNyBAQAogCQkJZ290byBleGl0MTsKIAl9CiAJZG93bigmbmQuZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7Ci0JZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kLmxhc3QsIG5kLmRlbnRyeSk7CisJZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kKTsKIAllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7CiAJCWVycm9yID0gdmZzX3JtZGlyKG5kLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5KTsKQEAgLTE5NzAsNyArMjAwMiw3IEBACiAJaWYgKG5kLmxhc3RfdHlwZSAhPSBMQVNUX05PUk0pCiAJCWdvdG8gZXhpdDE7CiAJZG93bigmbmQuZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7Ci0JZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kLmxhc3QsIG5kLmRlbnRyeSk7CisJZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kKTsKIAllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7CiAJCS8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqLwpAQCAtMjMxMyw3ICsyMzQ1LDcgQEAKIAogCXRyYXAgPSBsb2NrX3JlbmFtZShuZXdfZGlyLCBvbGRfZGlyKTsKIAotCW9sZF9kZW50cnkgPSBsb29rdXBfaGFzaCgmb2xkbmQubGFzdCwgb2xkX2Rpcik7CisJb2xkX2RlbnRyeSA9IGxvb2t1cF9oYXNoKCZvbGRuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKG9sZF9kZW50cnkpOwogCWlmIChJU19FUlIob2xkX2RlbnRyeSkpCiAJCWdvdG8gZXhpdDM7CkBAIC0yMzMzLDcgKzIzNjUsNyBAQAogCWVycm9yID0gLUVJTlZBTDsKIAlpZiAob2xkX2RlbnRyeSA9PSB0cmFwKQogCQlnb3RvIGV4aXQ0OwotCW5ld19kZW50cnkgPSBsb29rdXBfaGFzaCgmbmV3bmQubGFzdCwgbmV3X2Rpcik7CisJbmV3X2RlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZXduZCk7CiAJZXJyb3IgPSBQVFJfRVJSKG5ld19kZW50cnkpOwogCWlmIChJU19FUlIobmV3X2RlbnRyeSkpCiAJCWdvdG8gZXhpdDQ7CkBAIC0yNTM2LDYgKzI1NjgsOCBAQAogRVhQT1JUX1NZTUJPTChwYXRoX3JlbGVhc2UpOwogRVhQT1JUX1NZTUJPTChwYXRoX3dhbGspOwogRVhQT1JUX1NZTUJPTChwZXJtaXNzaW9uKTsKK0VYUE9SVF9TWU1CT0wodmZzX3Blcm1pc3Npb24pOworRVhQT1JUX1NZTUJPTChmaWxlX3Blcm1pc3Npb24pOwogRVhQT1JUX1NZTUJPTCh1bmxvY2tfcmVuYW1lKTsKIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7CiBFWFBPUlRfU1lNQk9MKHZmc19mb2xsb3dfbGluayk7CmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IGNhYTkxODcuLjIwMTk4OTlmIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtNjM3LDcgKzYzNyw3IEBACiAJCWlmIChjdXJyZW50LT51aWQgIT0gbmQtPmRlbnRyeS0+ZF9pbm9kZS0+aV91aWQpCiAJCQlyZXR1cm4gLUVQRVJNOwogCX0KLQlpZiAocGVybWlzc2lvbihuZC0+ZGVudHJ5LT5kX2lub2RlLCBNQVlfV1JJVEUsIG5kKSkKKwlpZiAodmZzX3Blcm1pc3Npb24obmQsIE1BWV9XUklURSkpCiAJCXJldHVybiAtRVBFUk07CiAJcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lvY3RsLmMgYi9mcy9uY3Bmcy9pb2N0bC5jCmluZGV4IDg4ZGY3OTMuLmZkM2VmZGMgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lvY3RsLmMKKysrIGIvZnMvbmNwZnMvaW9jdGwuYwpAQCAtMzAsMTEgKzMwLDEzIEBACiAjZGVmaW5lIE5DUF9QQUNLRVRfU0laRV9JTlRFUk5BTCA2NTUzNgogCiBzdGF0aWMgaW50Ci1uY3BfZ2V0X2ZzX2luZm8oc3RydWN0IG5jcF9zZXJ2ZXIqIHNlcnZlciwgc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IG5jcF9mc19pbmZvIF9fdXNlciAqYXJnKQorbmNwX2dldF9mc19pbmZvKHN0cnVjdCBuY3Bfc2VydmVyICogc2VydmVyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJc3RydWN0IG5jcF9mc19pbmZvIF9fdXNlciAqYXJnKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbmNwX2ZzX2luZm8gaW5mbzsKIAotCWlmICgocGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSAhPSAwKQorCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9XUklURSkgIT0gMCkKIAkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKSB7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTU4LDExICs2MCwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1uY3BfZ2V0X2ZzX2luZm9fdjIoc3RydWN0IG5jcF9zZXJ2ZXIqIHNlcnZlciwgc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IG5jcF9mc19pbmZvX3YyIF9fdXNlciAqIGFyZykKK25jcF9nZXRfZnNfaW5mb192MihzdHJ1Y3QgbmNwX3NlcnZlciAqIHNlcnZlciwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgIHN0cnVjdCBuY3BfZnNfaW5mb192MiBfX3VzZXIgKiBhcmcpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBuY3BfZnNfaW5mb192MiBpbmZvMjsKIAotCWlmICgocGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSAhPSAwKQorCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9XUklURSkgIT0gMCkKIAkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKSB7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTE5MCw3ICsxOTQsNyBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBOQ1BfSU9DX05DUFJFUVVFU1Q6CiAKLQkJaWYgKChwZXJtaXNzaW9uKGlub2RlLCBNQVlfV1JJVEUsIE5VTEwpICE9IDApCisJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9XUklURSkgIT0gMCkKIAkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkgewogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KQEAgLTI0NSwxNiArMjQ5LDE2IEBACiAJCXJldHVybiBuY3BfY29ubl9sb2dnZWRfaW4oaW5vZGUtPmlfc2IpOwogCiAJY2FzZSBOQ1BfSU9DX0dFVF9GU19JTkZPOgotCQlyZXR1cm4gbmNwX2dldF9mc19pbmZvKHNlcnZlciwgaW5vZGUsIGFyZ3ApOworCQlyZXR1cm4gbmNwX2dldF9mc19pbmZvKHNlcnZlciwgZmlscCwgYXJncCk7CiAKIAljYXNlIE5DUF9JT0NfR0VUX0ZTX0lORk9fVjI6Ci0JCXJldHVybiBuY3BfZ2V0X2ZzX2luZm9fdjIoc2VydmVyLCBpbm9kZSwgYXJncCk7CisJCXJldHVybiBuY3BfZ2V0X2ZzX2luZm9fdjIoc2VydmVyLCBmaWxwLCBhcmdwKTsKIAogCWNhc2UgTkNQX0lPQ19HRVRNT1VOVFVJRDI6CiAJCXsKIAkJCXVuc2lnbmVkIGxvbmcgdG1wID0gc2VydmVyLT5tLm1vdW50ZWRfdWlkOwogCi0JCQlpZiAoICAgKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9SRUFELCBOVUxMKSAhPSAwKQorCQkJaWYgKChmaWxlX3Blcm1pc3Npb24oZmlscCwgTUFZX1JFQUQpICE9IDApCiAJCQkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKQogCQkJewogCQkJCXJldHVybiAtRUFDQ0VTOwpAQCAtMjY4LDcgKzI3Miw3IEBACiAJCXsKIAkJCXN0cnVjdCBuY3Bfc2V0cm9vdF9pb2N0bCBzcjsKIAotCQkJaWYgKCAgIChwZXJtaXNzaW9uKGlub2RlLCBNQVlfUkVBRCwgTlVMTCkgIT0gMCkKKwkJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQogCQkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkKIAkJCXsKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTM0Myw3ICszNDcsNyBAQAogCiAjaWZkZWYgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HCQogCWNhc2UgTkNQX0lPQ19TSUdOX0lOSVQ6Ci0JCWlmICgocGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSAhPSAwKQorCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfV1JJVEUpICE9IDApCiAJCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpCiAJCXsKIAkJCXJldHVybiAtRUFDQ0VTOwpAQCAtMzY2LDcgKzM3MCw3IEBACiAJCXJldHVybiAwOwkJCiAJCQogICAgICAgICBjYXNlIE5DUF9JT0NfU0lHTl9XQU5URUQ6Ci0JCWlmICggICAocGVybWlzc2lvbihpbm9kZSwgTUFZX1JFQUQsIE5VTEwpICE9IDApCisJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQogCQkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKQogCQl7CiAJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTM3OSw3ICszODMsNyBAQAogCQl7CiAJCQlpbnQgbmV3c3RhdGU7CiAKLQkJCWlmICggICAocGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSAhPSAwKQorCQkJaWYgKChmaWxlX3Blcm1pc3Npb24oZmlscCwgTUFZX1dSSVRFKSAhPSAwKQogCQkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkKIAkJCXsKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTQwMCw3ICs0MDQsNyBAQAogCiAjaWZkZWYgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcKIAljYXNlIE5DUF9JT0NfTE9DS1VOTE9DSzoKLQkJaWYgKCAgIChwZXJtaXNzaW9uKGlub2RlLCBNQVlfV1JJVEUsIE5VTEwpICE9IDApCisJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9XUklURSkgIT0gMCkKIAkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkKIAkJewogCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC02MDUsNyArNjA5LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfTkNQRlNfTkxTICovCiAKIAljYXNlIE5DUF9JT0NfU0VUREVOVFJZVFRMOgotCQlpZiAoKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSwgTlVMTCkgIT0gMCkgJiYKKwkJaWYgKChmaWxlX3Blcm1pc3Npb24oZmlscCwgTUFZX1dSSVRFKSAhPSAwKSAmJgogCQkJCSAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJewpAQCAtNjM1LDcgKzYzOSw3IEBACiAgICAgICAgICAgIHNvIHdlIGhhdmUgdGhpcyBvdXQgb2Ygc3dpdGNoICovCiAJaWYgKGNtZCA9PSBOQ1BfSU9DX0dFVE1PVU5UVUlEKSB7CiAJCV9fa2VybmVsX3VpZF90IHVpZCA9IDA7Ci0JCWlmICgocGVybWlzc2lvbihpbm9kZSwgTUFZX1JFQUQsIE5VTEwpICE9IDApCisJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQogCQkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKSB7CiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDZlODEzNjcuLmY1M2E1YjkgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKLQllcnJvciA9IHBlcm1pc3Npb24oaW5vZGUsTUFZX1dSSVRFLCZuZCk7CisJZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGRwdXRfYW5kX291dDsKIApAQCAtMzk0LDcgKzM5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRwdXRfYW5kX291dDsKIAogCQlpZiAoY3VycmVudC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmCi0JCSAgICAoZXJyb3IgPSBwZXJtaXNzaW9uKGlub2RlLE1BWV9XUklURSwmbmQpKSAhPSAwKQorCQkgICAgKGVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfV1JJVEUpKSAhPSAwKQogCQkJZ290byBkcHV0X2FuZF9vdXQ7CiAJfQogCWRvd24oJmlub2RlLT5pX3NlbSk7CkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZHB1dF9hbmRfb3V0OwogCiAJCWlmIChjdXJyZW50LT5mc3VpZCAhPSBpbm9kZS0+aV91aWQgJiYKLQkJICAgIChlcnJvciA9IHBlcm1pc3Npb24oaW5vZGUsTUFZX1dSSVRFLCZuZCkpICE9IDApCisJCSAgICAoZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSkpICE9IDApCiAJCQlnb3RvIGRwdXRfYW5kX291dDsKIAl9CiAJZG93bigmaW5vZGUtPmlfc2VtKTsKQEAgLTUwNiw3ICs1MDYsNyBAQAogCiAJcmVzID0gX191c2VyX3dhbGsoZmlsZW5hbWUsIExPT0tVUF9GT0xMT1d8TE9PS1VQX0FDQ0VTUywgJm5kKTsKIAlpZiAoIXJlcykgewotCQlyZXMgPSBwZXJtaXNzaW9uKG5kLmRlbnRyeS0+ZF9pbm9kZSwgbW9kZSwgJm5kKTsKKwkJcmVzID0gdmZzX3Blcm1pc3Npb24oJm5kLCBtb2RlKTsKIAkJLyogU3VTIHYyIHJlcXVpcmVzIHdlIHJlcG9ydCBhIHJlYWQgb25seSBmcyB0b28gKi8KIAkJaWYoIXJlcyAmJiAobW9kZSAmIFNfSVdPVEgpICYmIElTX1JET05MWShuZC5kZW50cnktPmRfaW5vZGUpCiAJCSAgICYmICFzcGVjaWFsX2ZpbGUobmQuZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQpAQCAtNTMwLDcgKzUzMCw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0gcGVybWlzc2lvbihuZC5kZW50cnktPmRfaW5vZGUsTUFZX0VYRUMsJm5kKTsKKwllcnJvciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX0VYRUMpOwogCWlmIChlcnJvcikKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKQEAgLTU2Myw3ICs1NjMsNyBAQAogCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXRfcHV0ZjsKIAotCWVycm9yID0gcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMsIE5VTEwpOworCWVycm9yID0gZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9FWEVDKTsKIAlpZiAoIWVycm9yKQogCQlzZXRfZnNfcHdkKGN1cnJlbnQtPmZzLCBtbnQsIGRlbnRyeSk7CiBvdXRfcHV0ZjoKQEAgLTU4MSw3ICs1ODEsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKLQllcnJvciA9IHBlcm1pc3Npb24obmQuZGVudHJ5LT5kX2lub2RlLE1BWV9FWEVDLCZuZCk7CisJZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9FWEVDKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggYzIwYmFiZC4uNzg5MmE4NiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMjUxLDEyICsyNTEsMTIgQEAKIAkJCQkJCSAgICAgICBibG9ja3NfdG9fYWxsb2NhdGUsCiAJCQkJCQkgICAgICAgYmxvY2tzX3RvX2FsbG9jYXRlKTsKIAkJCWlmIChyZXMgIT0gQ0FSUllfT04pIHsKLQkJCQlyZXMgPSAtRU5PU1BDOworCQkJCXJlcyA9IHJlcyA9PSBRVU9UQV9FWENFRURFRCA/IC1FRFFVT1QgOiAtRU5PU1BDOwogCQkJCXBhdGhyZWxzZSgmcGF0aCk7CiAJCQkJZ290byBlcnJvcl9leGl0OwogCQkJfQogCQl9IGVsc2UgewotCQkJcmVzID0gLUVOT1NQQzsKKwkJCXJlcyA9IHJlcyA9PSBRVU9UQV9FWENFRURFRCA/IC1FRFFVT1QgOiAtRU5PU1BDOwogCQkJcGF0aHJlbHNlKCZwYXRoKTsKIAkJCWdvdG8gZXJyb3JfZXhpdDsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggYmI0MGQ2My4uMDFmNTIwYyAxMDA2NDQKLS0tIGEvZnMvdWRmL2ZpbGUuYworKysgYi9mcy91ZGYvZmlsZS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIHsKIAlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKIAotCWlmICggcGVybWlzc2lvbihpbm9kZSwgTUFZX1JFQUQsIE5VTEwpICE9IDAgKQorCWlmICggZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwICkKIAl7CiAJCXVkZl9kZWJ1Zygibm8gcGVybWlzc2lvbiB0byBhY2Nlc3MgaW5vZGUgJWx1XG4iLAogCQkJCQkJaW5vZGUtPmlfaW5vKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDQ0ZmVkMTAuLmQ4ZTIxYmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaApAQCAtNzIsNyArNzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmcy5oIGIvZnMveGZzL3hmcy5oCmluZGV4IDk5YjUwZDIuLjFhNDhkYmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnMuaAorKysgYi9mcy94ZnMveGZzLmgKQEAgLTE3LDEyICsxNyw1IEBACiAgKi8KICNpZm5kZWYgX19YRlNfSF9fCiAjZGVmaW5lIF9fWEZTX0hfXwotCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKICNpbmNsdWRlIDxsaW51eC0yLjYveGZzX2xpbnV4Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpbnV4LTIuNC94ZnNfbGludXguaD4KLSNlbmRpZgotCiAjZW5kaWYJLyogX19YRlNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RtYXBpLmggYi9mcy94ZnMveGZzX2RtYXBpLmgKaW5kZXggNWE1YzdhNi4uODY0YmY2OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kbWFwaS5oCisrKyBiL2ZzL3hmcy94ZnNfZG1hcGkuaApAQCAtMTgsNiArMTgsNyBAQAogI2lmbmRlZiBfX1hGU19ETUFQSV9IX18KICNkZWZpbmUgX19YRlNfRE1BUElfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAvKglWYWx1ZXMgdXNlZCB0byBkZWZpbmUgdGhlIG9uLWRpc2sgdmVyc2lvbiBvZiBkbV9hdHRybmFtZV90LiBBbGwKICAqCW9uLWRpc2sgYXR0cmlidXRlIG5hbWVzIHN0YXJ0IHdpdGggdGhlIDgtYnl0ZSBzdHJpbmcgIlNHSV9ETUlfIi4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZW50cnktbWFjcm8uUwppbmRleCA0ZGY0NjliLi42Mjg4ZmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2VudHJ5LW1hY3JvLlMKQEAgLTYxLDMgKzYxLDE0IEBACiAJCXN0cmNjCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KIAkJY21wY3MJXGlycW5yLCBcaXJxbnIKIAkJLmVuZG0KKworCQkvKiBBcyBhYm92ZSwgdGhpcyBhc3N1bWVzIHRoYXQgaXJxc3RhdCBhbmQgYmFzZSBhcmUgcHJlc2VydmVkLi4gKi8KKworCQkubWFjcm8gdGVzdF9mb3JfbHRpcnEsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwkJbW92IAlcdG1wLCAjMAorCQljbXAJXGlycW5yLCAjMjkKKwkJbW92ZXEJXHRtcCwgIzEKKwkJc3RyZXEJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQorCQljbXAJXHRtcCwgIzAKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2lycXMuaAppbmRleCBmZjM3NjQ5Li5jMTYyMjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaXJxcy5oCkBAIC0yMSw2ICsyMSw5IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgogCisjZGVmaW5lIElSUV9MT0NBTFRJTUVSCQkJMjkKKyNkZWZpbmUgSVJRX0xPQ0FMV0RPRwkJCTMwCisKIC8qIAogICogIElSUSBpbnRlcnJ1cHRzIGRlZmluaXRpb25zIGFyZSB0aGUgc2FtZSB0aGUgSU5UIGRlZmluaXRpb25zCiAgKiAgaGVsZCB3aXRoaW4gcGxhdGZvcm0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3BsYXRmb3JtLmgKaW5kZXggYWVmOWIzNi4uMThkN2MxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9wbGF0Zm9ybS5oCkBAIC0yMDksNiArMjA5LDggQEAKICNlbHNlCiAjZGVmaW5lIFJFQUxWSUVXX01QQ09SRV9TQ1VfQkFTRQkweDEwMTAwMDAwCS8qICBTQ1UgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFJFQUxWSUVXX0dJQ19DUFVfQkFTRQkJMHgxMDEwMDEwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIENQVSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfVFdEX0JBU0UJCTB4MTAxMDA3MDAKKyNkZWZpbmUgUkVBTFZJRVdfVFdEX1NJWkUJCTB4MDAwMDAxMDAKICNkZWZpbmUgUkVBTFZJRVdfR0lDX0RJU1RfQkFTRQkJMHgxMDEwMTAwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIGRpc3RyaWJ1dG9yICovCiAjZW5kaWYKICNkZWZpbmUgUkVBTFZJRVdfU01DX0JBU0UgICAgICAgICAgICAgMHgxMDA4MDAwMAkvKiBTTUMgKi8KQEAgLTMwNSw5ICszMDcsNiBAQAogI2RlZmluZSBJTlRfVFNQRU5JTlQJCQkzMAkvKiBUb3VjaHNjcmVlbiBwZW4gKi8KICNkZWZpbmUgSU5UX1RTS1BBRElOVAkJCTMxCS8qIFRvdWNoc2NyZWVuIGtleXBhZCAqLwogI2Vsc2UKLSNkZWZpbmUgSU5UX0xPQ0FMVElNRVIJCQkyOQotI2RlZmluZSBJTlRfTE9DQUxXRE9HCQkJMzAKLQogI2RlZmluZSBJTlRfQUFDSQkJCTAKICNkZWZpbmUgSU5UX1RJTUVSSU5UMF8xCQkJMQogI2RlZmluZSBJTlRfVElNRVJJTlQyXzMJCQkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCmluZGV4IGQ3YTRhODMuLmRkZDE1NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCkBAIC0xMTYsNiArMTE2LDggQEAKIAl9CiB9CiAKKyNkZWZpbmUgX19yYXdfd3JpdGVsKGQsYWQpIGRvIHsgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkKSkgPSAoZCk7IH0gd2hpbGUoMCkKKwogLyogQ09ORklHX1MzQzI0MTBfQk9PVF9XQVRDSERPRwogICoKICAqIFNpbXBsZSBib290LXRpbWUgd2F0Y2hkb2cgc2V0dXAsIHRvIHJlYm9vdCB0aGUgc3lzdGVtIGlmIHRoZXJlIGlzCkBAIC0xMjYsOCArMTI4LDYgQEAKIAogI2RlZmluZSBXRE9HX0NPVU5UICgweGZmMDApCiAKLSNkZWZpbmUgX19yYXdfd3JpdGVsKGQsYWQpIGRvIHsgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkKSkgPSAoZCk7IH0gd2hpbGUoMCkKLQogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKIHsKIAlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7CkBAIC0xNDUsNiArMTQ1LDI0IEBACiAjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9CT09UX0VSUk9SX1JFU0VUCisKK3N0YXRpYyB2b2lkIGFyY2hfZGVjb21wX2Vycm9yKGNvbnN0IGNoYXIgKngpCit7CisJcHV0c3RyKCJcblxuIik7CisJcHV0c3RyKHgpOworCXB1dHN0cigiXG5cbiAtLSBTeXN0ZW0gcmVzZXR0aW5nXG4iKTsKKworCV9fcmF3X3dyaXRlbCgweDQwMDAsIFMzQzI0MTBfV1REQVQpOworCV9fcmF3X3dyaXRlbCgweDQwMDAsIFMzQzI0MTBfV1RDTlQpOworCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg0MCksIFMzQzI0MTBfV1RDT04pOworCisJd2hpbGUoMSk7Cit9CisKKyNkZWZpbmUgYXJjaF9lcnJvciBhcmNoX2RlY29tcF9lcnJvcgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKmVycik7CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXNzZW1ibGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXNzZW1ibGVyLmgKaW5kZXggNjlhMjhmOS4uZjMxYWM5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2Fzc2VtYmxlci5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hc3NlbWJsZXIuaApAQCAtODMsMTAgKzgzLDEzIEBACiAgKiBTYXZlIHRoZSBjdXJyZW50IElSUSBzdGF0ZSBhbmQgZGlzYWJsZSBJUlFzLiAgTm90ZSB0aGF0IHRoaXMgbWFjcm8KICAqIGFzc3VtZXMgRklRcyBhcmUgZW5hYmxlZCwgYW5kIHRoYXQgdGhlIHByb2Nlc3NvciBpcyBpbiBTVkMgbW9kZS4KICAqLwotCS5tYWNybwlzYXZlX2FuZF9kaXNhYmxlX2lycXMsIG9sZGNwc3IsIHRlbXAKKwkubWFjcm8Jc2F2ZV9hbmRfZGlzYWJsZV9pcnFzLCBvbGRjcHNyCiAJbXJzCVxvbGRjcHNyLCBjcHNyCi0JbW92CVx0ZW1wLCAjUFNSX0lfQklUIHwgTU9ERV9TVkMKLQltc3IJY3Bzcl9jLCBcdGVtcAorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisJY3BzaWQJaQorI2Vsc2UKKwltc3IJY3Bzcl9jLCAjUFNSX0lfQklUIHwgTU9ERV9TVkMKKyNlbmRpZgogCS5lbmRtCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaAppbmRleCBlNWNjYjZiLi4xY2JiMTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKQEAgLTgsNiArOCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IGxvY2FsX3RpbWVyX2lycXM7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwogCiAjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zY29vcC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKaW5kZXggYThmMTAxMy4uZDM3YmY3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKQEAgLTUyLDggKzUyLDE0IEBACiAJdW5zaWduZWQgY2hhciBrZWVwX3JkOwogfTsKIAotZXh0ZXJuIGludCBzY29vcF9udW07Ci1leHRlcm4gc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgKnNjb29wX2RldnM7CitzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2NvbmZpZyB7CisJc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgKmRldnM7CisJaW50IG51bV9kZXZzOworCXZvaWQgKCpwY21jaWFfaW5pdCkodm9pZCk7CisJdm9pZCAoKnBvd2VyX2N0cmwpKHN0cnVjdCBkZXZpY2UgKnNjb29wLCB1bnNpZ25lZCBzaG9ydCBjcHIsIGludCBucik7Cit9OworCitleHRlcm4gc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKIAogdm9pZCByZXNldF9zY29vcChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdW5zaWduZWQgc2hvcnQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvZmxhc2guaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2ZsYXNoLmgKaW5kZXggY2Q1NzQzNi4uMDViMDI5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21hY2gvZmxhc2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9mbGFzaC5oCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIEFTTUFSTV9NQUNIX0ZMQVNIX0gKIAogc3RydWN0IG10ZF9wYXJ0aXRpb247CitzdHJ1Y3QgbXRkX2luZm87CiAKIC8qCiAgKiBtYXBfbmFtZToJdGhlIG1hcCBwcm9iZSBmdW5jdGlvbiBuYW1lCkBAIC0xOSw2ICsyMCw3IEBACiAgKiBpbml0OgltZXRob2QgY2FsbGVkIGF0IGRyaXZlci9kZXZpY2UgaW5pdGlhbGlzYXRpb24KICAqIGV4aXQ6CW1ldGhvZCBjYWxsZWQgYXQgZHJpdmVyL2RldmljZSByZW1vdmFsCiAgKiBzZXRfdnBwOgltZXRob2QgY2FsbGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIFZQUAorICogbW1jb250cm9sOgltZXRob2QgY2FsbGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIFN5bmMuIEJ1cnN0IFJlYWQgaW4gT25lTkFORAogICogcGFydHM6CW9wdGlvbmFsIGFycmF5IG9mIG10ZF9wYXJ0aXRpb25zIGZvciBzdGF0aWMgcGFydGl0aW9uaW5nCiAgKiBucl9wYXJ0czoJbnVtYmVyIG9mIG10ZF9wYXJ0aXRpb25zIGZvciBzdGF0aWMgcGFydGl0b25pbmcKICAqLwpAQCAtMjksNiArMzEsNyBAQAogCWludAkJKCppbml0KSh2b2lkKTsKIAl2b2lkCQkoKmV4aXQpKHZvaWQpOwogCXZvaWQJCSgqc2V0X3ZwcCkoaW50IG9uKTsKKwl2b2lkCQkoKm1tY29udHJvbCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzeW5jX3JlYWQpOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKIAl1bnNpZ25lZCBpbnQJbnJfcGFydHM7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCmluZGV4IDU1MWNkM2MuLjVhNzJlNTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCkBAIC0zNyw2ICszNywxMSBAQAogZXh0ZXJuIHZvaWQgc2hvd19pcGlfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnApOwogCiAvKgorICogQ2FsbGVkIGZyb20gYXNzZW1ibHkgY29kZSwgdGhpcyBoYW5kbGVzIGFuIElQSS4KKyAqLworYXNtbGlua2FnZSB2b2lkIGRvX0lQSShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCiAgKiBNb3ZlIGdsb2JhbCBkYXRhIGludG8gcGVyLXByb2Nlc3NvciBzdG9yYWdlLgogICovCiBleHRlcm4gdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdWlkKTsKQEAgLTQ3LDEyICs1MiwyMyBAQAogZXh0ZXJuIHZvaWQgc21wX2Nyb3NzX2NhbGwoY3B1bWFza190IGNhbGxtYXApOwogCiAvKgorICogQnJvYWRjYXN0IGEgdGltZXIgaW50ZXJydXB0IHRvIHRoZSBvdGhlciBDUFVzLgorICovCitleHRlcm4gdm9pZCBzbXBfc2VuZF90aW1lcih2b2lkKTsKKworLyoKICAqIEJvb3QgYSBzZWNvbmRhcnkgQ1BVLCBhbmQgYXNzaWduIGl0IHRoZSBzcGVjaWZpZWQgaWRsZSB0YXNrLgogICogVGhpcyBhbHNvIGdpdmVzIHVzIHRoZSBpbml0aWFsIHN0YWNrIHRvIHVzZSBmb3IgdGhpcyBDUFUuCiAgKi8KIGV4dGVybiBpbnQgYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiAvKgorICogQ2FsbGVkIGZyb20gcGxhdGZvcm0gc3BlY2lmaWMgYXNzZW1ibHkgY29kZSwgdGhpcyBpcyB0aGUKKyAqIHNlY29uZGFyeSBDUFUgZW50cnkgcG9pbnQuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBzZWNvbmRhcnlfc3RhcnRfa2VybmVsKHZvaWQpOworCisvKgogICogUGVyZm9ybSBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIENQVS4KICAqLwogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSk7CkBAIC03Niw0ICs5Miw0MiBAQAogZXh0ZXJuIGludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX2NwdV9lbmFibGUodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCisvKgorICogU2V0dXAgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQgZm9yIGEgQ1BVLgorICovCitleHRlcm4gdm9pZCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyoKKyAqIFN0b3AgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQuCisgKi8KK2V4dGVybiB2b2lkIGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSk7CisKKy8qCisgKiBQbGF0Zm9ybSBwcm92aWRlcyB0aGlzIHRvIGFja25vd2xlZGdlIGEgbG9jYWwgdGltZXIgSVJRCisgKi8KK2V4dGVybiBpbnQgbG9jYWxfdGltZXJfYWNrKHZvaWQpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfdGltZXJfc2V0dXAodW5zaWduZWQgaW50IGNwdSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSkKK3sKK30KKworI2VuZGlmCisKKy8qCisgKiBzaG93IGxvY2FsIGludGVycnVwdCBpbmZvCisgKi8KK2V4dGVybiB2b2lkIHNob3dfbG9jYWxfaXJxcyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CisKKy8qCisgKiBDYWxsZWQgZnJvbSBhc3NlbWJseSwgdGhpcyBpcyB0aGUgbG9jYWwgdGltZXIgSVJRIGhhbmRsZXIKKyAqLworYXNtbGlua2FnZSB2b2lkIGRvX2xvY2FsX3RpbWVyKHN0cnVjdCBwdF9yZWdzICopOworCiAjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSTV9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1jLmgKaW5kZXggMmYzYzNmYy4uNWY0MWYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtYy5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiB0eXBlZGVmIHZvaWQgKCpwZXJmX2lycV90KShzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBwZXJmX2lycV90IHBlcmZfaXJxOwogCiBpbnQgcmVzZXJ2ZV9wbWNfaGFyZHdhcmUocGVyZl9pcnFfdCBuZXdfcGVyZl9pcnEpOwogdm9pZCByZWxlYXNlX3BtY19oYXJkd2FyZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCmluZGV4IGJiMWIwNTcuLmNlMjEyMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaApAQCAtMTA3LDYgKzEwNyw3IEBACiAJTVBDODN4eF9TRUMyLAogCU1QQzgzeHhfVVNCMl9EUiwKIAlNUEM4M3h4X1VTQjJfTVBILAorCU1QQzgzeHhfTURJTywKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfODN4eCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCmluZGV4IDcxMjcwMzAuLjIzNDUwZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKQEAgLTEyOSw3ICsxMjksNyBAQAogCiB2b2lkIGRlYnVnX3N0b3BfYWxsKHZvaWQpOwogCi1leHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorc3RhdGljIGlubGluZSBkZWJ1Z19lbnRyeV90KgogZGVidWdfZXZlbnQoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB2b2lkKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogCWlmICgoIWlkKSB8fCAobGV2ZWwgPiBpZC0+bGV2ZWwpIHx8IChpZC0+cGFnZXNfcGVyX2FyZWEgPT0gMCkpCkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgICAgcmV0dXJuIGRlYnVnX2V2ZW50X2NvbW1vbihpZCxsZXZlbCxkYXRhLGxlbmd0aCk7CiB9CiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QqCiBkZWJ1Z19pbnRfZXZlbnQoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB1bnNpZ25lZCBpbnQgdGFnKQogewogICAgICAgICB1bnNpZ25lZCBpbnQgdD10YWc7CkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgICAgICAgcmV0dXJuIGRlYnVnX2V2ZW50X2NvbW1vbihpZCxsZXZlbCwmdCxzaXplb2YodW5zaWduZWQgaW50KSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCAqCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QgKgogZGVidWdfbG9uZ19ldmVudCAoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB1bnNpZ25lZCBsb25nIHRhZykKIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyB0PXRhZzsKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICByZXR1cm4gZGVidWdfZXZlbnRfY29tbW9uKGlkLGxldmVsLCZ0LHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QqCiBkZWJ1Z190ZXh0X2V2ZW50KGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgY29uc3QgY2hhciogdHh0KQogewogCWlmICgoIWlkKSB8fCAobGV2ZWwgPiBpZC0+bGV2ZWwpIHx8IChpZC0+cGFnZXNfcGVyX2FyZWEgPT0gMCkpCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMywgNCkpKTsKIAogCi1leHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorc3RhdGljIGlubGluZSBkZWJ1Z19lbnRyeV90KgogZGVidWdfZXhjZXB0aW9uKGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgdm9pZCogZGF0YSwgaW50IGxlbmd0aCkKIHsKIAlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSB8fCAoaWQtPnBhZ2VzX3Blcl9hcmVhID09IDApKQpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgIHJldHVybiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGlkLGxldmVsLGRhdGEsbGVuZ3RoKTsKIH0KIAotZXh0ZXJuIGlubGluZSBkZWJ1Z19lbnRyeV90KiAKK3N0YXRpYyBpbmxpbmUgZGVidWdfZW50cnlfdCoKIGRlYnVnX2ludF9leGNlcHRpb24oZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB1bnNpZ25lZCBpbnQgdGFnKQogewogICAgICAgICB1bnNpZ25lZCBpbnQgdD10YWc7CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgcmV0dXJuIGRlYnVnX2V4Y2VwdGlvbl9jb21tb24oaWQsbGV2ZWwsJnQsc2l6ZW9mKHVuc2lnbmVkIGludCkpOwogfQogCi1leHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QgKiAKK3N0YXRpYyBpbmxpbmUgZGVidWdfZW50cnlfdCAqCiBkZWJ1Z19sb25nX2V4Y2VwdGlvbiAoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB1bnNpZ25lZCBsb25nIHRhZykKIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyB0PXRhZzsKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICByZXR1cm4gZGVidWdfZXhjZXB0aW9uX2NvbW1vbihpZCxsZXZlbCwmdCxzaXplb2YodW5zaWduZWQgbG9uZykpOwogfQogCi1leHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorc3RhdGljIGlubGluZSBkZWJ1Z19lbnRyeV90KgogZGVidWdfdGV4dF9leGNlcHRpb24oZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCBjb25zdCBjaGFyKiB0eHQpCiB7CiAJaWYgKCghaWQpIHx8IChsZXZlbCA+IGlkLT5sZXZlbCkgfHwgKGlkLT5wYWdlc19wZXJfYXJlYSA9PSAwKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCmluZGV4IDIwZTgxZTguLjRjYmMzMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaApAQCAtMjEsNyArMjEsNyBAQAogZXh0ZXJuIF9fdTggX2ViY190b2xvd2VyW107IC8qIEVCQ0RJQyAtPiBsb3dlcmNhc2UgKi8KIGV4dGVybiBfX3U4IF9lYmNfdG91cHBlcltdOyAvKiBFQkNESUMgLT4gdXBwZXJjYXNlICovCiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogY29kZXBhZ2VfY29udmVydChjb25zdCBfX3U4ICpjb2RlcGFnZSwgdm9sYXRpbGUgX191OCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJaWYgKG5yLS0gPD0gMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaW8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvaW8uaAppbmRleCA4MTg4ZmRjLi43MWY1NWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9pby5oCkBAIC0yNCw3ICsyNCw3IEBACiAgKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KICAqIFRoZXNlIGFyZSBwcmV0dHkgdHJpdmlhbAogICovCi1leHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBsb25nIHJlYWxfYWRkcmVzczsKIAlfX2FzbV9fICgKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcmV0dXJuIHJlYWxfYWRkcmVzczsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIHBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAgICAgICAgIHJldHVybiBfX2lvX3ZpcnQoYWRkcmVzcyk7CiB9CkBAIC01NCw3ICs1NCw3IEBACiAKIGV4dGVybiB2b2lkICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi1leHRlcm4gaW5saW5lIHZvaWQgKiBpb3JlbWFwICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIGlubGluZSB2b2lkICogaW9yZW1hcCAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDApOwogfQpAQCAtNjQsNyArNjQsNyBAQAogICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKICAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgogICovCi1leHRlcm4gaW5saW5lIHZvaWQgKiBpb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgKiBpb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAgICAgICAgIHJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKaW5kZXggYzZmNTFjOS4uZGIwNjA2YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCkBAIC0zNDYsNyArMzQ2LDcgQEAKICNkZWZpbmUgUzM5MF9sb3djb3JlICgqKChzdHJ1Y3QgX2xvd2NvcmUgKikgMCkpCiBleHRlcm4gc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltdOwogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHNldF9wcmVmaXgoX191MzIgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJlZml4KF9fdTMyIGFkZHJlc3MpCiB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3B4ICUwIiA6IDogIm0iIChhZGRyZXNzKSA6ICJtZW1vcnkiICk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zMzkwL21tdV9jb250ZXh0LmgKaW5kZXggM2EzYmIzZi4uYmNmMjRhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbW11X2NvbnRleHQuaApAQCAtNDQsNyArNDQsNyBAQAogCiAjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCiAKLWV4dGVybiBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKIHsKICAgICAgICAgc3dpdGNoX21tKHByZXYsIG5leHQsIGN1cnJlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAppbmRleCA5YmU3NDFiLi44NTliNWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaApAQCAtMzE5LDcgKzMxOSw3IEBACiAgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKICAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCiAgKi8KLWV4dGVybiBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwdHIsIHB0ZV90IHB0ZXZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwdHIsIHB0ZV90IHB0ZXZhbCkKIHsKIAkqcHRlcHRyID0gcHRldmFsOwogfQpAQCAtMzMwLDYzICszMzAsNjMgQEAKICAqLwogI2lmbmRlZiBfX3MzOTB4X18KIAotZXh0ZXJuIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKSB7IHJldHVybiAxOyB9Ci1leHRlcm4gaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpICAgIHsgcmV0dXJuIDA7IH0KLWV4dGVybiBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKSAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKSAgICAgeyByZXR1cm4gMDsgfQogCi1leHRlcm4gaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpIHsgcmV0dXJuIHBtZF92YWwocG1kKSAmIF9TRUdfUFJFU0VOVDsgfQotZXh0ZXJuIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKSAgICB7IHJldHVybiBwbWRfdmFsKHBtZCkgJiBfUEFHRV9UQUJMRV9JTlY7IH0KLWV4dGVybiBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKSB7IHJldHVybiBwbWRfdmFsKHBtZCkgJiBfU0VHX1BSRVNFTlQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkgICAgeyByZXR1cm4gcG1kX3ZhbChwbWQpICYgX1BBR0VfVEFCTEVfSU5WOyB9CitzdGF0aWMgaW5saW5lIGludCBwbWRfYmFkKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gKHBtZF92YWwocG1kKSAmICh+UEFHRV9NQVNLICYgfl9QQUdFX1RBQkxFX0lOVikpICE9IF9QQUdFX1RBQkxFOwogfQogCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAotZXh0ZXJuIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQorc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQogewogCXJldHVybiAocGdkX3ZhbChwZ2QpICYgflBBR0VfTUFTSykgPT0gX1BHRF9FTlRSWTsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQorc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQogewogCXJldHVybiBwZ2RfdmFsKHBnZCkgJiBfUEdEX0VOVFJZX0lOVjsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCitzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkKIHsKIAlyZXR1cm4gKHBnZF92YWwocGdkKSAmICh+UEFHRV9NQVNLICYgfl9QR0RfRU5UUllfSU5WKSkgIT0gX1BHRF9FTlRSWTsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKQogewogCXJldHVybiAocG1kX3ZhbChwbWQpICYgflBBR0VfTUFTSykgPT0gX1BNRF9FTlRSWTsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKQogewogCXJldHVybiBwbWRfdmFsKHBtZCkgJiBfUE1EX0VOVFJZX0lOVjsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcG1kX2JhZChwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIGludCBwbWRfYmFkKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gKHBtZF92YWwocG1kKSAmICh+UEFHRV9NQVNLICYgfl9QTURfRU5UUllfSU5WKSkgIT0gX1BNRF9FTlRSWTsKIH0KIAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCi1leHRlcm4gaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9JTlZBTElEX01BU0spID09IF9QQUdFX0lOVkFMSURfRU1QVFk7CiB9CiAKLWV4dGVybiBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9JTlZBTElEKSB8fAogCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRF9NQVNLKSA9PSBfUEFHRV9JTlZBTElEX05PTkU7CiB9CiAKLWV4dGVybiBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSURfTUFTSykgPT0gX1BBR0VfSU5WQUxJRF9GSUxFOwogfQpAQCAtMzk3LDEyICszOTcsMTIgQEAKICAqIHF1ZXJ5IGZ1bmN0aW9ucyBwdGVfd3JpdGUvcHRlX2RpcnR5L3B0ZV95b3VuZyBvbmx5IHdvcmsgaWYKICAqIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4gVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgogICovCi1leHRlcm4gaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JPKSA9PSAwOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkKIHsKIAkvKiBBIHB0ZSBpcyBuZWl0aGVyIGNsZWFuIG5vciBkaXJ0eSBvbiBzLzM5MC4gVGhlIGRpcnR5IGJpdAogCSAqIGlzIGluIHRoZSBzdG9yYWdlIGtleS4gU2VlIHBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkgZm9yCkBAIC00MTEsNyArNDExLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCiB7CiAJLyogQSBwdGUgaXMgbmVpdGhlciB5b3VuZyBub3Igb2xkIG9uIHMvMzkwLiBUaGUgeW91bmcgYml0CiAJICogaXMgaW4gdGhlIHN0b3JhZ2Uga2V5LiBTZWUgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyBmb3IKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIGludCBwdGVfcmVhZChwdGVfdCBwdGUpCiB7CiAJLyogQWxsIHBhZ2VzIGFyZSByZWFkYWJsZSBzaW5jZSB3ZSBkb24ndCB1c2UgdGhlIGZldGNoCiAJICogcHJvdGVjdGlvbiBiaXQgaW4gdGhlIHN0b3JhZ2Uga2V5LgpAQCAtNDM0LDkgKzQzNCw5IEBACiAKICNpZm5kZWYgX19zMzkweF9fCiAKLWV4dGVybiBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKiBwZ2RwKSAgICAgIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqIHBnZHApICAgICAgeyB9CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKiBwbWRwKQorc3RhdGljIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqIHBtZHApCiB7CiAJcG1kX3ZhbChwbWRwWzBdKSA9IF9QQUdFX1RBQkxFX0lOVjsKIAlwbWRfdmFsKHBtZHBbMV0pID0gX1BBR0VfVEFCTEVfSU5WOwpAQCAtNDQ2LDEyICs0NDYsMTIgQEAKIAogI2Vsc2UgLyogX19zMzkweF9fICovCiAKLWV4dGVybiBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKiBwZ2RwKQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqIHBnZHApCiB7CiAJcGdkX3ZhbCgqcGdkcCkgPSBfUEdEX0VOVFJZX0lOViB8IF9QR0RfRU5UUlk7CiB9CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKiBwbWRwKQorc3RhdGljIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqIHBtZHApCiB7CiAJcG1kX3ZhbCgqcG1kcCkgPSBfUE1EX0VOVFJZX0lOViB8IF9QTURfRU5UUlk7CiAJcG1kX3ZhbDEoKnBtZHApID0gX1BNRF9FTlRSWV9JTlYgfCBfUE1EX0VOVFJZOwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAotZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CiAJcHRlX3ZhbCgqcHRlcCkgPSBfUEFHRV9JTlZBTElEX0VNUFRZOwogfQpAQCAtNDY4LDE0ICs0NjgsMTQgQEAKICAqIFRoZSBmb2xsb3dpbmcgcHRlIG1vZGlmaWNhdGlvbiBmdW5jdGlvbnMgb25seSB3b3JrIGlmCiAgKiBwdGVfcHJlc2VudCgpIGlzIHRydWUuIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KICAqLwotZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCiB7CiAJcHRlX3ZhbChwdGUpICY9IFBBR0VfTUFTSzsKIAlwdGVfdmFsKHB0ZSkgfD0gcGdwcm90X3ZhbChuZXdwcm90KTsKIAlyZXR1cm4gcHRlOwogfQogCi1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKIHsKIAkvKiBEbyBub3QgY2xvYmJlciBfUEFHRV9JTlZBTElEX05PTkUgcGFnZXMhICAqLwogCWlmICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpKQpAQCAtNDgzLDEzICs0ODMsMTMgQEAKIAlyZXR1cm4gcHRlOwogfQogCi1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKIHsKIAlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX1JPOwogCXJldHVybiBwdGU7CiB9CiAKLWV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCiB7CiAJLyogVGhlIG9ubHkgdXNlciBvZiBwdGVfbWtjbGVhbiBpcyB0aGUgZm9yaygpIGNvZGUuCiAJICAgV2UgbXVzdCAqbm90KiBjbGVhciB0aGUgKnBoeXNpY2FsKiBwYWdlIGRpcnR5IGJpdApAQCAtNDk4LDcgKzQ5OCw3IEBACiAJcmV0dXJuIHB0ZTsKIH0KIAotZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIHsKIAkvKiBXZSBkbyBub3QgZXhwbGljaXRseSBzZXQgdGhlIGRpcnR5IGJpdCBiZWNhdXNlIHRoZQogCSAqIHNza2UgaW5zdHJ1Y3Rpb24gaXMgc2xvdy4gSXQgaXMgZmFzdGVyIHRvIGxldCB0aGUKQEAgLTUwNyw3ICs1MDcsNyBAQAogCXJldHVybiBwdGU7CiB9CiAKLWV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIHsKIAkvKiBTLzM5MCBkb2Vzbid0IGtlZXAgaXRzIGRpcnR5L3JlZmVyZW5jZWQgYml0IGluIHRoZSBwdGUuCiAJICogVGhlcmUgaXMgbm8gcG9pbnQgaW4gY2xlYXJpbmcgdGhlIHJlYWwgcmVmZXJlbmNlZCBiaXQuCkBAIC01MTUsNyArNTE1LDcgQEAKIAlyZXR1cm4gcHRlOwogfQogCi1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQogewogCS8qIFMvMzkwIGRvZXNuJ3Qga2VlcCBpdHMgZGlydHkvcmVmZXJlbmNlZCBiaXQgaW4gdGhlIHB0ZS4KIAkgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBzZXR0aW5nIHRoZSByZWFsIHJlZmVyZW5jZWQgYml0LgpAQCAtNjk1LDcgKzY5NSw3IEBACiAjaWZuZGVmIF9fczM5MHhfXwogCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCi1leHRlcm4gaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocGdkX3QgKiBkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICAgICAgICAgcmV0dXJuIChwbWRfdCAqKSBkaXI7CiB9CkBAIC03NTgsNyArNzU4LDcgQEAKICNlbHNlCiAjZGVmaW5lIF9fU1dQX09GRlNFVF9NQVNLICh+MFVMID4+IDExKQogI2VuZGlmCi1leHRlcm4gaW5saW5lIHB0ZV90IG1rX3N3YXBfcHRlKHVuc2lnbmVkIGxvbmcgdHlwZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHB0ZV90IG1rX3N3YXBfcHRlKHVuc2lnbmVkIGxvbmcgdHlwZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJcHRlX3QgcHRlOwogCW9mZnNldCAmPSBfX1NXUF9PRkZTRVRfTUFTSzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2lncC5oIGIvaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKaW5kZXggMzk3OWJjMy4uZmM1NjQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKQEAgLTY3LDcgKzY3LDcgQEAKIC8qCiAgKiBTaWduYWwgcHJvY2Vzc29yCiAgKi8KLWV4dGVybiBfX2lubGluZV9fIHNpZ3BfY2NvZGUKK3N0YXRpYyBpbmxpbmUgc2lncF9jY29kZQogc2lnbmFsX3Byb2Nlc3NvcihfX3UxNiBjcHVfYWRkciwgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCiB7CiAJc2lncF9jY29kZSBjY29kZTsKQEAgLTg2LDcgKzg2LDcgQEAKIC8qCiAgKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyCiAgKi8KLWV4dGVybiBfX2lubGluZV9fIHNpZ3BfY2NvZGUKK3N0YXRpYyBpbmxpbmUgc2lncF9jY29kZQogc2lnbmFsX3Byb2Nlc3Nvcl9wKF9fdTMyIHBhcmFtZXRlciwgX191MTYgY3B1X2FkZHIsCiAJCSAgIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQogewpAQCAtMTA3LDcgKzEwNyw3IEBACiAvKgogICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIHN0YXR1cwogICovCi1leHRlcm4gX19pbmxpbmVfXyBzaWdwX2Njb2RlCitzdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKIHNpZ25hbF9wcm9jZXNzb3JfcHMoX191MzIgKnN0YXR1c3B0ciwgX191MzIgcGFyYW1ldGVyLAogCQkgICAgX191MTYgY3B1X2FkZHIsIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKaW5kZXggZGQ1MGU1Ny4uYTJhZTc2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCkBAIC01Miw3ICs1Miw3IEBACiBleHRlcm4gaW50IHNtcF9nZXRfY3B1KGNwdW1hc2tfdCBjcHVfbWFwKTsKIGV4dGVybiB2b2lkIHNtcF9wdXRfY3B1KGludCBjcHUpOwogCi1leHRlcm4gX19pbmxpbmVfXyBfX3UxNiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgX191MTYgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCiB7CiAgICAgICAgIF9fdTE2IGNwdV9hZGRyZXNzOwogIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKaW5kZXggZWNiMGQzOS4uMjIwOWFkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCkBAIC0xMCw2ICsxMCwxMCBAQAogI2RlZmluZSBVTE9OR19JT0NUTChjbWQpICBIQU5ETEVfSU9DVEwoKGNtZCksKGlvY3RsX3RyYW5zX2hhbmRsZXJfdClzeXNfaW9jdGwpCiAjZW5kaWYKIAorCitDT01QQVRJQkxFX0lPQ1RMKDB4NEI1MCkgICAvKiBLREdIV0NMSyAtIG5vdCBpbiB0aGUga2VybmVsLCBidXQgZG9uJ3QgY29tcGxhaW4gKi8KK0NPTVBBVElCTEVfSU9DVEwoMHg0QjUxKSAgIC8qIEtEU0hXQ0xLIC0gbm90IGluIHRoZSBrZXJuZWwsIGJ1dCBkb24ndCBjb21wbGFpbiAqLworCiAvKiBCaWcgVCAqLwogQ09NUEFUSUJMRV9JT0NUTChUQ0dFVEEpCiBDT01QQVRJQkxFX0lPQ1RMKFRDU0VUQSkKQEAgLTUyLDEzICs1Niw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NHUFROKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DU1BUTENLKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DU0VSR0VUTFNSKQotLyogQmlnIEYgKi8KLUNPTVBBVElCTEVfSU9DVEwoRkJJT0JMQU5LKQotQ09NUEFUSUJMRV9JT0NUTChGQklPR0VUX1ZTQ1JFRU5JTkZPKQotQ09NUEFUSUJMRV9JT0NUTChGQklPUFVUX1ZTQ1JFRU5JTkZPKQotQ09NUEFUSUJMRV9JT0NUTChGQklPUEFOX0RJU1BMQVkpCi1DT01QQVRJQkxFX0lPQ1RMKEZCSU9HRVRfQ09OMkZCTUFQKQotQ09NUEFUSUJMRV9JT0NUTChGQklPUFVUX0NPTjJGQk1BUCkKIC8qIExpdHRsZSBmICovCiBDT01QQVRJQkxFX0lPQ1RMKEZJT0NMRVgpCiBDT01QQVRJQkxFX0lPQ1RMKEZJT05DTEVYKQpAQCAtODEsNiArNzgsOCBAQAogQ09NUEFUSUJMRV9JT0NUTChIRElPX0RSSVZFX1RBU0spCiBDT01QQVRJQkxFX0lPQ1RMKEhESU9fU0VUX1BJT19NT0RFKQogQ09NUEFUSUJMRV9JT0NUTChIRElPX1NFVF9OSUNFKQorQ09NUEFUSUJMRV9JT0NUTChIRElPX1NFVF9LRUVQU0VUVElOR1MpCitDT01QQVRJQkxFX0lPQ1RMKEhESU9fU0NBTl9IV0lGKQogLyogMHgwMiAtLSBGbG9wcHkgaW9jdGxzICovCiBDT01QQVRJQkxFX0lPQ1RMKEZETVNHT04pCiBDT01QQVRJQkxFX0lPQ1RMKEZETVNHT0ZGKQpAQCAtOTksNiArOTgsNyBAQAogQ09NUEFUSUJMRV9JT0NUTChGREZNVFRSSykKIENPTVBBVElCTEVfSU9DVEwoRkRSQVdDTUQpCiAvKiAweDEyICovCitDT01QQVRJQkxFX0lPQ1RMKEJMS1JBU0VUKQogQ09NUEFUSUJMRV9JT0NUTChCTEtST1NFVCkKIENPTVBBVElCTEVfSU9DVEwoQkxLUk9HRVQpCiBDT01QQVRJQkxFX0lPQ1RMKEJMS1JSUEFSVCkKQEAgLTI2Miw2ICsyNjIsNyBAQAogLyogTGl0dGxlIG0gKi8KIENPTVBBVElCTEVfSU9DVEwoTVRJT0NUT1ApCiAvKiBTb2NrZXQgbGV2ZWwgc3R1ZmYgKi8KK0NPTVBBVElCTEVfSU9DVEwoRklPUVNJWkUpCiBDT01QQVRJQkxFX0lPQ1RMKEZJT1NFVE9XTikKIENPTVBBVElCTEVfSU9DVEwoU0lPQ1NQR1JQKQogQ09NUEFUSUJMRV9JT0NUTChGSU9HRVRPV04pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCAxZjdiMmMwLi40M2M0NDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTQyLDYgKzQyLDcgQEAKIC8qIE5lZWQgdG8ga25vdyBhYm91dCBDUFVzIGdvaW5nIHVwL2Rvd24/ICovCiBleHRlcm4gaW50IHJlZ2lzdGVyX2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCBjdXJyZW50X2luX2NwdV9ob3RwbHVnKHZvaWQpOwogCiBpbnQgY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpOwogCkBAIC01NCw2ICs1NSwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7CiB9CitzdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2luX2NwdV9ob3RwbHVnKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBjcHVfc3lzZGV2X2NsYXNzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZXByb20uaCBiL2luY2x1ZGUvbGludXgvZWVwcm9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YWZkOWQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9lZXByb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKiBjcmVkaXQgd2luYm9uZC04NDAuYwotICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci1zdHJ1Y3QgZWVwcm9tX29wcyB7Ci0Jdm9pZAkoKnNldF9jcykodm9pZCAqZWUpOwotCXZvaWQJKCpjbGVhcl9jcykodm9pZCAqZWUpOwotfTsKLQotI2RlZmluZSBFRVBPTF9FRURJCTB4MDEKLSNkZWZpbmUgRUVQT0xfRUVETwkweDAyCi0jZGVmaW5lIEVFUE9MX0VFQ0xLCTB4MDQKLSNkZWZpbmUgRUVQT0xfRUVTRUwJMHgwOAotCi1zdHJ1Y3QgZWVwcm9tIHsKLQl2b2lkICpkZXY7Ci0Jc3RydWN0IGVlcHJvbV9vcHMgKm9wczsKLQotCXZvaWQgX19pb21lbSAqCWFkZHI7Ci0KLQl1bnNpZ25lZAllZV9hZGRyX2JpdHM7Ci0KLQl1bnNpZ25lZAllZXNlbDsKLQl1bnNpZ25lZAllZWNsazsKLQl1bnNpZ25lZAllZWRvOwotCXVuc2lnbmVkCWVlZGk7Ci0JdW5zaWduZWQJcG9sYXJpdHk7Ci0JdW5zaWduZWQJZWVfc3RhdGU7Ci0KLQlzcGlubG9ja190CSpsb2NrOwotCXUzMgkJKmNhY2hlOwotfTsKLQotCi11OCAgIGVlcHJvbV9yZWFkYihzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcyk7Ci12b2lkIGVlcHJvbV9yZWFkKHN0cnVjdCBlZXByb20gKmVlLCB1bnNpZ25lZCBhZGRyZXNzLCB1OCAqYnl0ZXMsCi0JCXVuc2lnbmVkIGNvdW50KTsKLXZvaWQgZWVwcm9tX3dyaXRlYihzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcywgdTggZGF0YSk7Ci12b2lkIGVlcHJvbV93cml0ZShzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcywgdTggKmJ5dGVzLAotCQl1bnNpZ25lZCBjb3VudCk7Ci0KLS8qIFRoZSBFRVBST00gY29tbWFuZHMgaW5jbHVkZSB0aGUgYWx3YXktc2V0IGxlYWRpbmcgYml0LiAqLwotZW51bSBFRVBST01fQ21kcyB7Ci0gICAgICAgIEVFX1dyaXRlQ21kPSg1IDw8IDYpLCBFRV9SZWFkQ21kPSg2IDw8IDYpLCBFRV9FcmFzZUNtZD0oNyA8PCA2KSwKLX07Ci0KLXZvaWQgc2V0dXBfZWVfbWVtX2JpdGJhbmdlcihzdHJ1Y3QgZWVwcm9tICplZSwgdm9pZCBfX2lvbWVtICptZW1hZGRyLCBpbnQgZWVzZWxfYml0LCBpbnQgZWVjbGtfYml0LCBpbnQgZWVkb19iaXQsIGludCBlZWRpX2JpdCwgdW5zaWduZWQgcG9sYXJpdHkpCi17Ci0JZWUtPmFkZHIgPSBtZW1hZGRyOwotCWVlLT5lZXNlbCA9IDEgPDwgZWVzZWxfYml0OwotCWVlLT5lZWNsayA9IDEgPDwgZWVjbGtfYml0OwotCWVlLT5lZWRvID0gMSA8PCBlZWRvX2JpdDsKLQllZS0+ZWVkaSA9IDEgPDwgZWVkaV9iaXQ7Ci0KLQllZS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKLQotCSplZS0+Y2FjaGUgPSByZWFkbChlZS0+YWRkcik7Ci19Ci0KLS8qIGZvby4gcHV0IHRoaXMgaW4gYSAuYyBmaWxlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZWVwcm9tX3VwZGF0ZShzdHJ1Y3QgZWVwcm9tICplZSwgdTMyIG1hc2ssIGludCBwb2wpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgZGF0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGVlLT5sb2NrLCBmbGFncyk7Ci0JZGF0YSA9ICplZS0+Y2FjaGU7Ci0KLQlkYXRhICY9IH5tYXNrOwotCWlmIChwb2wpCi0JCWRhdGEgfD0gbWFzazsKLQotCSplZS0+Y2FjaGUgPSBkYXRhOwotLy9wcmludGsoInVwZGF0ZTogJTA4eFxuIiwgZGF0YSk7Ci0Jd3JpdGVsKGRhdGEsIGVlLT5hZGRyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGVlLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgZWVwcm9tX2Nsa19sbyhzdHJ1Y3QgZWVwcm9tICplZSkKLXsKLQlpbnQgcG9sID0gISEoZWUtPnBvbGFyaXR5ICYgRUVQT0xfRUVDTEspOwotCi0JZWVwcm9tX3VwZGF0ZShlZSwgZWUtPmVlY2xrLCBwb2wpOwotCXVkZWxheSgyKTsKLX0KLQotdm9pZCBlZXByb21fY2xrX2hpKHN0cnVjdCBlZXByb20gKmVlKQotewotCWludCBwb2wgPSAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRUNMSyk7Ci0KLQllZXByb21fdXBkYXRlKGVlLCBlZS0+ZWVjbGssICFwb2wpOwotCXVkZWxheSgyKTsKLX0KLQotdm9pZCBlZXByb21fc2VuZF9hZGRyKHN0cnVjdCBlZXByb20gKmVlLCB1bnNpZ25lZCBhZGRyZXNzKQotewotCWludCBwb2wgPSAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRURJKTsKLQl1bnNpZ25lZCBpOwotCWFkZHJlc3MgfD0gNiA8PCA2OwotCi0gICAgICAgIC8qIFNoaWZ0IHRoZSByZWFkIGNvbW1hbmQgYml0cyBvdXQuICovCi0gICAgICAgIGZvciAoaT0wOyBpPDExOyBpKyspIHsKLQkJZWVwcm9tX3VwZGF0ZShlZSwgZWUtPmVlZGksICgoYWRkcmVzcyA+PiAxMCkgJiAxKSBeIHBvbCk7Ci0JCWFkZHJlc3MgPDw9IDE7Ci0JCWVlcHJvbV9jbGtfaGkoZWUpOwotCQllZXByb21fY2xrX2xvKGVlKTsKLSAgICAgICAgfQotCWVlcHJvbV91cGRhdGUoZWUsIGVlLT5lZWRpLCBwb2wpOwotfQotCi11MTYgICBlZXByb21fcmVhZHcoc3RydWN0IGVlcHJvbSAqZWUsIHVuc2lnbmVkIGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgaTsKLQl1MTYJcmVzID0gMDsKLQotCWVlcHJvbV9jbGtfbG8oZWUpOwotCWVlcHJvbV91cGRhdGUoZWUsIGVlLT5lZXNlbCwgMSBeICEhKGVlLT5wb2xhcml0eSAmIEVFUE9MX0VFU0VMKSk7Ci0JZWVwcm9tX3NlbmRfYWRkcihlZSwgYWRkcmVzcyk7Ci0KLQlmb3IgKGk9MDsgaTwxNjsgaSsrKSB7Ci0JCXUzMiBkYXRhOwotCQllZXByb21fY2xrX2hpKGVlKTsKLQkJcmVzIDw8PSAxOwotCQlkYXRhID0gcmVhZGwoZWUtPmFkZHIpOwotLy9wcmludGsoImVlcHJvbV9yZWFkdzogJTA4eFxuIiwgZGF0YSk7Ci0JCXJlcyB8PSAhIShkYXRhICYgZWUtPmVlZG8pIF4gISEoZWUtPnBvbGFyaXR5ICYgRUVQT0xfRUVETyk7Ci0JCWVlcHJvbV9jbGtfbG8oZWUpOwotCX0KLQllZXByb21fdXBkYXRlKGVlLCBlZS0+ZWVzZWwsIDAgXiAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRVNFTCkpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotCi12b2lkIGVlcHJvbV93cml0ZWIoc3RydWN0IGVlcHJvbSAqZWUsIHVuc2lnbmVkIGFkZHJlc3MsIHU4IGRhdGEpCi17Ci19CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggZTdmZjk4ZS4uMDRhNThmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtMjAxLDYgKzIwMSwxNCBAQAogI2RlZmluZSBGQl9WTU9ERV9TTU9PVEhfWFBBTgk1MTIJLyogc21vb3RoIHhwYW4gcG9zc2libGUgKGludGVybmFsbHkgdXNlZCkgKi8KICNkZWZpbmUgRkJfVk1PREVfQ09OVVBEQVRFCTUxMgkvKiBkb24ndCB1cGRhdGUgeC95b2Zmc2V0CSovCiAKKy8qCisgKiBEaXNwbGF5IHJvdGF0aW9uIHN1cHBvcnQKKyAqLworI2RlZmluZSBGQl9ST1RBVEVfVVIgICAgICAwCisjZGVmaW5lIEZCX1JPVEFURV9DVyAgICAgIDEKKyNkZWZpbmUgRkJfUk9UQVRFX1VEICAgICAgMgorI2RlZmluZSBGQl9ST1RBVEVfQ0NXICAgICAzCisKICNkZWZpbmUgUElDT1MyS0haKGEpICgxMDAwMDAwMDAwVUwvKGEpKQogI2RlZmluZSBLSFoyUElDT1MoYSkgKDEwMDAwMDAwMDBVTC8oYSkpCiAKQEAgLTQ4OSw5ICs0OTcsOSBAQAogI2RlZmluZSBGQl9FVkVOVF9NT0RFX0RFTEVURSAgICAgICAgICAgIDB4MDQKIC8qICAgICAgQSBkcml2ZXIgcmVnaXN0ZXJlZCBpdHNlbGYgKi8KICNkZWZpbmUgRkJfRVZFTlRfRkJfUkVHSVNURVJFRCAgICAgICAgICAweDA1Ci0vKiAgICAgIGdldCBjb25zb2xlIHRvIGZyYW1lYnVmZmVyIG1hcHBpbmcgKi8KKy8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogZ2V0IGNvbnNvbGUgdG8gZnJhbWVidWZmZXIgbWFwcGluZyAqLwogI2RlZmluZSBGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAgICAgICAgIDB4MDYKLS8qICAgICAgc2V0IGNvbnNvbGUgdG8gZnJhbWVidWZmZXIgbWFwcGluZyAqLworLyogICAgICBDT05TT0xFLVNQRUNJRklDOiBzZXQgY29uc29sZSB0byBmcmFtZWJ1ZmZlciBtYXBwaW5nICovCiAjZGVmaW5lIEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCAgICAgICAgMHgwNwogLyogICAgICBBIGRpc3BsYXkgYmxhbmsgaXMgcmVxdWVzdGVkICAgICAgICovCiAjZGVmaW5lIEZCX0VWRU5UX0JMQU5LICAgICAgICAgICAgICAgICAgMHgwOApAQCAtNTAwLDYgKzUwOCwxMiBAQAogLyoJVGhlIHJlc29sdXRpb24gb2YgdGhlIHBhc3NlZCBpbiBmYl9pbmZvIGFib3V0IHRvIGNoYW5nZSBhbmQKICAgICAgICAgYWxsIHZjJ3Mgc2hvdWxkIGJlIGNoYW5nZWQgICAgICAgICAqLwogI2RlZmluZSBGQl9FVkVOVF9NT0RFX0NIQU5HRV9BTEwJMHgwQQorLyogICAgICBDT05TT0xFLVNQRUNJRklDOiBzZXQgY29uc29sZSByb3RhdGlvbiAqLworI2RlZmluZSBGQl9FVkVOVF9TRVRfQ09OX1JPVEFURSAgICAgICAgIDB4MEIKKy8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogZ2V0IGNvbnNvbGUgcm90YXRpb24gKi8KKyNkZWZpbmUgRkJfRVZFTlRfR0VUX0NPTl9ST1RBVEUgICAgICAgICAweDBDCisvKiAgICAgIENPTlNPTEUtU1BFQ0lGSUM6IHJvdGF0ZSBhbGwgY29uc29sZXMgKi8KKyNkZWZpbmUgRkJfRVZFTlRfU0VUX0NPTl9ST1RBVEVfQUxMICAgICAweDBECiAKIHN0cnVjdCBmYl9ldmVudCB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC04MTcsOCArODMxLDggQEAKIC8qIGRyaXZlcnMvdmlkZW8vZmJtZW0uYyAqLwogZXh0ZXJuIGludCByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotZXh0ZXJuIGludCBmYl9wcmVwYXJlX2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotZXh0ZXJuIGludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworZXh0ZXJuIGludCBmYl9wcmVwYXJlX2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8sIGludCByb3RhdGUpOworZXh0ZXJuIGludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8sIGludCByb3RhdGUpOwogZXh0ZXJuIGNoYXIqIGZiX2dldF9idWZmZXJfb2Zmc2V0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsIHUzMiBzaXplKTsKIGV4dGVybiB2b2lkIGZiX3BhZF91bmFsaWduZWRfYnVmZmVyKHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgaWR4LAogCQkJCXUzMiBoZWlnaHQsIHUzMiBzaGlmdF9oaWdoLCB1MzIgc2hpZnRfbG93LCB1MzIgbW9kKTsKQEAgLTgyOCw2ICs4NDIsNyBAQAogCQkJICAgICAgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgpOwogZXh0ZXJuIGludCBmYl9nZXRfb3B0aW9ucyhjaGFyICpuYW1lLCBjaGFyICoqb3B0aW9uKTsKIGV4dGVybiBpbnQgZmJfbmV3X21vZGVsaXN0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2V4dGVybiBpbnQgZmJfY29uX2R1aXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBldmVudCwgdm9pZCAqZGF0YSk7CiAKIGV4dGVybiBzdHJ1Y3QgZmJfaW5mbyAqcmVnaXN0ZXJlZF9mYltGQl9NQVhdOwogZXh0ZXJuIGludCBudW1fcmVnaXN0ZXJlZF9mYjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAxYjVmNTAyLi5jYzM1YjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC04NzQsNiArODc0LDcgQEAKIC8qCiAgKiBWRlMgaGVscGVyIGZ1bmN0aW9ucy4uCiAgKi8KK2V4dGVybiBpbnQgdmZzX3Blcm1pc3Npb24oc3RydWN0IG5hbWVpZGF0YSAqLCBpbnQpOwogZXh0ZXJuIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBpbnQgdmZzX21rZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBleHRlcm4gaW50IHZmc19ta25vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGRldl90KTsKQEAgLTg4OSw2ICs4OTAsMTEgQEAKIGV4dGVybiB2b2lkIGRlbnRyeV91bmhhc2goc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAogLyoKKyAqIFZGUyBmaWxlIGhlbHBlciBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBpbnQgZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICosIGludCk7CisKKy8qCiAgKiBGaWxlIHR5cGVzCiAgKgogICogTk9URSEgVGhlc2UgbWF0Y2ggYml0cyAxMi4uMTUgb2Ygc3RhdC5zdF9tb2RlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2VuZXRfcGQuaCBiL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCmluZGV4IGJlZjIzYmIuLjc4M2M0NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIEZTX0VORVRfUERfSAogI2RlZmluZSBGU19FTkVUX1BEX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2RlZmluZSBGU19FTkVUX05BTUUJImZzX2VuZXQiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAxY2U0YjU0Li43NGFiYWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTI3LDEwICsyNywxMCBAQAogICogLS0tLSBEcml2ZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICAgICAgIGRldmljZSBpZCBuYW1lICsgbnVtYmVyICAgICAgICBmdW5jdGlvbiBkZXNjcmlwdGlvbiwgaTJjIGFkZHJlc3MoZXMpCiAgKgotICogIFJhbmdlIDEwMDAtMTk5OSByYW5nZSBpcyBkZWZpbmVkIGluIHNlbnNvcnMvc2Vuc29ycy5oIAotICogIFJhbmdlIDB4MTAwIC0gMHgxZmYgaXMgZm9yIFY0TDIgQ29tbW9uIENvbXBvbmVudHMgCisgKiAgUmFuZ2UgMTAwMC0xOTk5IHJhbmdlIGlzIGRlZmluZWQgaW4gc2Vuc29ycy9zZW5zb3JzLmgKKyAqICBSYW5nZSAweDEwMCAtIDB4MWZmIGlzIGZvciBWNEwyIENvbW1vbiBDb21wb25lbnRzCiAgKiAgUmFuZ2UgMHhmMDAwIC0gMHhmZmZmIGlzIHJlc2VydmVkIGZvciBsb2NhbCBleHBlcmltZW50YXRpb24sIGFuZCBzaG91bGQKLSAqICAgICAgICBuZXZlciBiZSB1c2VkIGluIG9mZmljaWFsIGRyaXZlcnMgCisgKiAgICAgICAgbmV2ZXIgYmUgdXNlZCBpbiBvZmZpY2lhbCBkcml2ZXJzCiAgKi8KIAogI2RlZmluZSBJMkNfRFJJVkVSSURfTVNQMzQwMAkgMQpAQCAtOTksNyArOTksMTQgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX01BWDY5MDAJNjMJLyogTUFYNjkwMCByZWFsLXRpbWUgY2xvY2sJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMTRICTY0CS8qIHZpZGVvIGRlY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9EUzEzNzQJNjUJLyogRFMxMzc0IHJlYWwgdGltZSBjbG9jawkqLwotCisjZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODc0CTY2CS8qIFRWIHNvdW5kIGRlY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE2NzUySFMJNjcJLyogTVBFRzIgZW5jb2RlcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1RWRUVQUk9NCTY4CS8qIFRWIEVFUFJPTQkJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9XTTg3NzUJNjkJLyogd204Nzc1IGF1ZGlvIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1M0wzMkEJNzAJLyogY3M1M2wzMmEgYXVkaW8gcHJvY2Vzc29yCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9DWDI1ODQwCTcxCS8qIGN4MjU4NHggdmlkZW8gZW5jb2RlcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzEyNwk3MgkvKiBzYWE3MTI0IHZpZGVvIGVuY29kZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMVgJNzMJLyogc2FhNzExeCB2aWRlbyBlbmNvZGVycwkqLwogCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9FWFAwCTB4RjAJLyogZXhwZXJpbWVudGFsIHVzZSBpZCdzCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9FWFAxCTB4RjEKQEAgLTExMSw3ICsxMTgsNyBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfQVJQICAgICAgICA5MDIgICAgLyogU01CdXMgQVJQIENsaWVudCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0FMRVJUICAgICAgOTAzICAgIC8qIFNNQnVzIEFsZXJ0IFJlc3BvbmRlciBDbGllbnQgICovCiAKLS8qIElEcyAtLSAgIFVzZSBEUklWRVJJRHMgMTAwMC0xOTk5IGZvciBzZW5zb3JzLiAKKy8qIElEcyAtLSAgIFVzZSBEUklWRVJJRHMgMTAwMC0xOTk5IGZvciBzZW5zb3JzLgogICAgVGhlc2Ugd2VyZSBvcmlnaW5hbGx5IGluIHNlbnNvcnMuaCBpbiB0aGUgbG1fc2Vuc29ycyBwYWNrYWdlICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9MTTc4IDEwMDIKICNkZWZpbmUgSTJDX0RSSVZFUklEX0xNNzUgMTAwMwpAQCAtMTkwLDYgKzE5Nyw3IEBACiAjZGVmaW5lIEkyQ19IV19CX05WSURJQQkJMHgwMTAwMWMgLyogbnZpZGlhIGZyYW1lYnVmZmVyIGRyaXZlciAqLwogI2RlZmluZSBJMkNfSFdfQl9TQVZBR0UJCTB4MDEwMDFkIC8qIHNhdmFnZSBmcmFtZWJ1ZmZlciBkcml2ZXIgKi8KICNkZWZpbmUgSTJDX0hXX0JfUkFERU9OCQkweDAxMDAxZSAvKiByYWRlb24gZnJhbWVidWZmZXIgZHJpdmVyICovCisjZGVmaW5lIEkyQ19IV19CX0VNMjhYWAkJMHgwMTAwMWYgLyogZW0yOHh4IHZpZGVvIGNhcHR1cmUgY2FyZHMgKi8KIAogLyogLS0tIFBDRiA4NTg0IGJhc2VkIGFsZ29yaXRobXMJCQkJCSovCiAjZGVmaW5lIEkyQ19IV19QX0xQCQkweDAyMDAwMCAvKiBQYXJhbGxlbCBwb3J0IGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl93YW5waXBlX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9pZl93YW5waXBlX2NvbW1vbi5oCmluZGV4IGYyNWZlYzguLjZlNTQ2MWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl93YW5waXBlX2NvbW1vbi5oCkBAIC0xNyw4ICsxNyw2IEBACiAjaWZuZGVmIF9XQU5QSVBFX1NPQ0tfRFJJVkVSX0NPTU1PTl9ICiAjZGVmaW5lIF9XQU5QSVBFX1NPQ0tfRFJJVkVSX0NPTU1PTl9ICiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KIHR5cGVkZWYgc3RydWN0IHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmU7CiAJYXRvbWljX3QgcGFja2V0X3NlbnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oIGIvaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaAppbmRleCA1ZjRlZTY0Li4xZjk5NjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKQEAgLTIxLDggKzIxLDYgQEAKICAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYJX0lTVEFMTElPTl9ICiAjZGVmaW5lCV9JU1RBTExJT05fSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggZGNkMTdlNy4uNmYwNzUyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiAJc3RydWN0IGRldmljZSAJCSpkZXY7CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKnBvcnRfb3BzOwotCVNjc2lfSG9zdF9UZW1wbGF0ZQkqc2h0OworCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodDsKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMJcG9ydFtBVEFfTUFYX1BPUlRTXTsKIAl1bnNpZ25lZCBpbnQJCW5fcG9ydHM7CiAJdW5zaWduZWQgaW50CQloYXJkX3BvcnRfbm87CkBAIC0zOTgsNyArMzk4LDcgQEAKIH07CiAKIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHsKLQlTY3NpX0hvc3RfVGVtcGxhdGUJKnNodDsKKwlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQ7CiAJdW5zaWduZWQgbG9uZwkJaG9zdF9mbGFnczsKIAl1bnNpZ25lZCBsb25nCQlwaW9fbWFzazsKIAl1bnNpZ25lZCBsb25nCQltd2RtYV9tYXNrOwpAQCAtNDMzLDcgKzQzMyw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogZXh0ZXJuIGludCBhdGFfZGV2aWNlX2FkZChjb25zdCBzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqZW50KTsKIGV4dGVybiB2b2lkIGF0YV9ob3N0X3NldF9yZW1vdmUoc3RydWN0IGF0YV9ob3N0X3NldCAqaG9zdF9zZXQpOwotZXh0ZXJuIGludCBhdGFfc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICpzaHQpOworZXh0ZXJuIGludCBhdGFfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IDM5ZjE0MzAuLjNjOWVhNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBfX01URF9DRklfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAppbmRleCBlOTVkMDQ2Li5iNmYyZmRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApAQCAtMTQsNyArMTQsNiBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaAppbmRleCAxYzk3NWQwLi40NTU2NjBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC03NCw3ICs3NCw3IEBACiBleHRlcm4gdm9pZCByZWxlYXNlX29wZW5faW50ZW50KHN0cnVjdCBuYW1laWRhdGEgKik7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX29uZV9sZW4oY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7Ci1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9oYXNoKHN0cnVjdCBxc3RyICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9oYXNoKHN0cnVjdCBuYW1laWRhdGEgKik7CiAKIGV4dGVybiBpbnQgZm9sbG93X2Rvd24oc3RydWN0IHZmc21vdW50ICoqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKIGV4dGVybiBpbnQgZm9sbG93X3VwKHN0cnVjdCB2ZnNtb3VudCAqKiwgc3RydWN0IGRlbnRyeSAqKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bob25lZGV2LmggYi9pbmNsdWRlL2xpbnV4L3Bob25lZGV2LmgKaW5kZXggZDU0MDQ5ZS4uYTBlMzFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waG9uZWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGhvbmVkZXYuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX19MSU5VWF9QSE9ORURFVl9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCA2NWNlZWFhLi43NDQ4OGU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtNjYsNiArNjYsNyBAQAogCXdyaXRlX3Byb2NfdCAqd3JpdGVfcHJvYzsKIAlhdG9taWNfdCBjb3VudDsJCS8qIHVzZSBjb3VudCAqLwogCWludCBkZWxldGVkOwkJLyogZGVsZXRlIGZsYWcgKi8KKwl2b2lkICpzZXQ7CiB9OwogCiBzdHJ1Y3Qga2NvcmVfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKaW5kZXggOWRlOTkxOS4uODk5NDM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaApAQCAtNiw3ICs2LDEzIEBACiAjaWZuZGVmIEJJVE1BUF9ICiAjZGVmaW5lIEJJVE1BUF9IIDEKIAotI2RlZmluZSBCSVRNQVBfTUFKT1IgMworI2RlZmluZSBCSVRNQVBfTUFKT1JfTE8gMworLyogdmVyc2lvbiA0IGluc2lzdHMgdGhlIGJpdG1hcCBpcyBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyCisgKiB3aXRoIHZlcnNpb24gMywgaXQgaXMgaG9zdC1lbmRpYW4gd2hpY2ggaXMgbm9uLXBvcnRhYmxlCisgKi8KKyNkZWZpbmUgQklUTUFQX01BSk9SX0hJIDQKKyNkZWZpbmUJQklUTUFQX01BSk9SX0hPU1RFTkRJQU4gMworCiAjZGVmaW5lIEJJVE1BUF9NSU5PUiAzOQogCiAvKgpAQCAtMTMzLDcgKzEzOSw4IEBACiAvKiB1c2UgdGhlc2UgZm9yIGJpdG1hcC0+ZmxhZ3MgYW5kIGJpdG1hcC0+c2ItPnN0YXRlIGJpdC1maWVsZHMgKi8KIGVudW0gYml0bWFwX3N0YXRlIHsKIAlCSVRNQVBfQUNUSVZFID0gMHgwMDEsIC8qIHRoZSBiaXRtYXAgaXMgaW4gdXNlICovCi0JQklUTUFQX1NUQUxFICA9IDB4MDAyICAvKiB0aGUgYml0bWFwIGZpbGUgaXMgb3V0IG9mIGRhdGUgb3IgaGFkIC1FSU8gKi8KKwlCSVRNQVBfU1RBTEUgID0gMHgwMDIsICAvKiB0aGUgYml0bWFwIGZpbGUgaXMgb3V0IG9mIGRhdGUgb3IgaGFkIC1FSU8gKi8KKwlCSVRNQVBfSE9TVEVORElBTiA9IDB4ODAwMCwKIH07CiAKIC8qIHRoZSBzdXBlcmJsb2NrIGF0IHRoZSBmcm9udCBvZiB0aGUgYml0bWFwIGZpbGUgLS0gbGl0dGxlIGVuZGlhbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAppbmRleCBmZmEzMTZjLi4xM2U3YzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaApAQCAtNjYsOCArNjYsMTAgQEAKICAqICAgICBhbmQgbWFqb3JfdmVyc2lvbi9taW5vcl92ZXJzaW9uIGFjY29yZGluZ2x5CiAgKiA+PTIgbWVhbnMgdGhhdCBJbnRlcm5hbCBiaXRtYXBzIGFyZSBzdXBwb3J0ZWQgYnkgc2V0dGluZyBNRF9TQl9CSVRNQVBfUFJFU0VOVAogICogICAgIGluIHRoZSBzdXBlciBzdGF0dXMgYnl0ZQorICogPj0zIG1lYW5zIHRoYXQgYml0bWFwIHN1cGVyYmxvY2sgdmVyc2lvbiA0IGlzIHN1cHBvcnRlZCwgd2hpY2ggdXNlcworICogICAgIGxpdHRsZS1lbmRpbmcgcmVwcmVzZW50YXRpb24gcmF0aGVyIHRoYW4gaG9zdC1lbmRpYW4KICAqLwotI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gICAgICAgICAgIDIKKyNkZWZpbmUgTURfUEFUQ0hMRVZFTF9WRVJTSU9OICAgICAgICAgICAzCiAKIGV4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkgKGludCBwX251bSwgbWRrX3BlcnNvbmFsaXR5X3QgKnApOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5IChpbnQgcF9udW0pOwpAQCAtODcsNiArODksNyBAQAogCiBleHRlcm4gdm9pZCBtZF9zdXBlcl93cml0ZShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldiwKIAkJCSAgIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIG1kX3N1cGVyX3dhaXQobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIGludCBzeW5jX3BhZ2VfaW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwKIAkJCXN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcncpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaAppbmRleCBlYmNlOTQ5Li40NjYyOWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKQEAgLTEwNSw2ICsxMDUsOCBAQAogCWludAkJc2Jfc2l6ZTsJLyogYnl0ZXMgaW4gdGhlIHN1cGVyYmxvY2sgKi8KIAlpbnQJCXByZWZlcnJlZF9taW5vcjsJLyogYXV0b3J1biBzdXBwb3J0ICovCiAKKwlzdHJ1Y3Qga29iamVjdAlrb2JqOworCiAJLyogQSBkZXZpY2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXMgYmFzZWQgb24gdHdvIGZsYWdzOgogCSAqIE5vdCB3b3JraW5nOiAgIGZhdWx0eT09MSBpbl9zeW5jPT0wCiAJICogRnVsbHkgd29ya2luZzogZmF1bHR5PT0wIGluX3N5bmM9PTEKQEAgLTExNSwxMSArMTE3LDEyIEBACiAJICogSXQgY2FuIG5ldmVyIGhhdmUgZmF1bHR5PT0xLCBpbl9zeW5jPT0xCiAJICogVGhpcyByZWR1Y2VzIHRoZSBidXJkZW4gb2YgdGVzdGluZyBtdWx0aXBsZSBmbGFncyBpbiBtYW55IGNhc2VzCiAJICovCi0JaW50IGZhdWx0eTsJCQkvKiBpZiBmYXVsdHkgZG8gbm90IGlzc3VlIElPIHJlcXVlc3RzICovCi0JaW50IGluX3N5bmM7CQkJLyogZGV2aWNlIGlzIGEgZnVsbCBtZW1iZXIgb2YgdGhlIGFycmF5ICovCiAKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwkJLyogU2hvdWxkIGluY2x1ZGUgZmF1bHR5IGFuZCBpbl9zeW5jIGhlcmUuICovCisJdW5zaWduZWQgbG9uZwlmbGFnczsKKyNkZWZpbmUJRmF1bHR5CQkxCQkvKiBkZXZpY2UgaXMga25vd24gdG8gaGF2ZSBhIGZhdWx0ICovCisjZGVmaW5lCUluX3N5bmMJCTIJCS8qIGRldmljZSBpcyBpbl9zeW5jIHdpdGggcmVzdCBvZiBhcnJheSAqLwogI2RlZmluZQlXcml0ZU1vc3RseQk0CQkvKiBBdm9pZCByZWFkaW5nIGlmIGF0IGFsbCBwb3NzaWJsZSAqLworI2RlZmluZQlCYXJyaWVyc05vdHN1cHAJNQkJLyogQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZCAqLwogCiAJaW50IGRlc2NfbnI7CQkJLyogZGVzY3JpcHRvciBpbmRleCBpbiB0aGUgc3VwZXJibG9jayAqLwogCWludCByYWlkX2Rpc2s7CQkJLyogcm9sZSBvZiBkZXZpY2UgaW4gYXJyYXkgKi8KQEAgLTEzMiw2ICsxMzUsOSBAQAogCQkJCQkgKiBvbmx5IG1haW50YWluZWQgZm9yIGFycmF5cyB0aGF0CiAJCQkJCSAqIHN1cHBvcnQgaG90IHJlbW92YWwKIAkJCQkJICovCisJYXRvbWljX3QJcmVhZF9lcnJvcnM7CS8qIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWFkIGVycm9ycyB0aGF0CisJCQkJCSAqIHdlIGhhdmUgdHJpZWQgdG8gaWdub3JlLgorCQkJCQkgKi8KIH07CiAKIHR5cGVkZWYgc3RydWN0IG1ka19wZXJzb25hbGl0eV9zIG1ka19wZXJzb25hbGl0eV90OwpAQCAtMTQ4LDYgKzE1NCw4IEBACiAKIAlzdHJ1Y3QgZ2VuZGlzawkJCSpnZW5kaXNrOwogCisJc3RydWN0IGtvYmplY3QJCQlrb2JqOworCiAJLyogU3VwZXJibG9jayBpbmZvcm1hdGlvbiAqLwogCWludAkJCQltYWpvcl92ZXJzaW9uLAogCQkJCQltaW5vcl92ZXJzaW9uLApAQCAtMTcxLDYgKzE3OSwxMCBAQAogCXNlY3Rvcl90CQkJcmVzeW5jX21hcmtfY250Oy8qIGJsb2NrcyB3cml0dGVuIGF0IHJlc3luY19tYXJrICovCiAKIAlzZWN0b3JfdAkJCXJlc3luY19tYXhfc2VjdG9yczsgLyogbWF5IGJlIHNldCBieSBwZXJzb25hbGl0eSAqLworCisJc2VjdG9yX3QJCQlyZXN5bmNfbWlzbWF0Y2hlczsgLyogY291bnQgb2Ygc2VjdG9ycyB3aGVyZQorCQkJCQkJCSAgICAqIHBhcml0eS9yZXBsaWNhIG1pc21hdGNoIGZvdW5kCisJCQkJCQkJICAgICovCiAJLyogcmVjb3ZlcnkvcmVzeW5jIGZsYWdzIAogCSAqIE5FRURFRDogICB3ZSBtaWdodCBuZWVkIHRvIHN0YXJ0IGEgcmVzeW5jL3JlY292ZXIKIAkgKiBSVU5OSU5HOiAgYSB0aHJlYWQgaXMgcnVubmluZywgb3IgYWJvdXQgdG8gYmUgc3RhcnRlZApAQCAtMTc4LDYgKzE5MCw4IEBACiAJICogRVJSOiAgICAgIGFuZCBJTyBlcnJvciB3YXMgZGV0ZWN0ZWQgLSBhYm9ydCB0aGUgcmVzeW5jL3JlY292ZXJ5CiAJICogSU5UUjogICAgIHNvbWVvbmUgcmVxdWVzdGVkIGEgKGNsZWFuKSBlYXJseSBhYm9ydC4KIAkgKiBET05FOiAgICAgdGhyZWFkIGlzIGRvbmUgYW5kIGlzIHdhaXRpbmcgdG8gYmUgcmVhcGVkCisJICogUkVRVUVTVDogIHVzZXItc3BhY2UgaGFzIHJlcXVlc3RlZCBhIHN5bmMgKHVzZWQgd2l0aCBTWU5DKQorCSAqIENIRUNLOiAgICB1c2VyLXNwYWNlIHJlcXVlc3QgZm9yIGZvciBjaGVjay1vbmx5LCBubyByZXBhaXIKIAkgKi8KICNkZWZpbmUJTURfUkVDT1ZFUllfUlVOTklORwkwCiAjZGVmaW5lCU1EX1JFQ09WRVJZX1NZTkMJMQpAQCAtMTg1LDYgKzE5OSw4IEBACiAjZGVmaW5lCU1EX1JFQ09WRVJZX0lOVFIJMwogI2RlZmluZQlNRF9SRUNPVkVSWV9ET05FCTQKICNkZWZpbmUJTURfUkVDT1ZFUllfTkVFREVECTUKKyNkZWZpbmUJTURfUkVDT1ZFUllfUkVRVUVTVEVECTYKKyNkZWZpbmUJTURfUkVDT1ZFUllfQ0hFQ0sJNwogCXVuc2lnbmVkIGxvbmcJCQlyZWNvdmVyeTsKIAogCWludAkJCQlpbl9zeW5jOwkvKiBrbm93IHRvIG5vdCBuZWVkIHJlc3luYyAqLwpAQCAtMTk1LDYgKzIxMSwxMyBAQAogCWludAkJCQlkZWdyYWRlZDsJLyogd2hldGhlciBtZCBzaG91bGQgY29uc2lkZXIKIAkJCQkJCQkgKiBhZGRpbmcgYSBzcGFyZQogCQkJCQkJCSAqLworCWludAkJCQliYXJyaWVyc193b3JrOwkvKiBpbml0aWFsaXNlZCB0byB0cnVlLCBjbGVhcmVkIGFzIHNvb24KKwkJCQkJCQkgKiBhcyBhIGJhcnJpZXIgcmVxdWVzdCB0byBzbGF2ZQorCQkJCQkJCSAqIGZhaWxzLiAgT25seSBzdXBwb3J0ZWQKKwkJCQkJCQkgKi8KKwlzdHJ1Y3QgYmlvCQkJKmJpb2xpc3Q7IAkvKiBiaW9zIHRoYXQgbmVlZCB0byBiZSByZXRyaWVkCisJCQkJCQkJICogYmVjYXVzZSBCSU9fUldfQkFSUklFUiBpcyBub3Qgc3VwcG9ydGVkCisJCQkJCQkJICovCiAKIAlhdG9taWNfdAkJCXJlY292ZXJ5X2FjdGl2ZTsgLyogYmxvY2tzIHNjaGVkdWxlZCwgYnV0IG5vdCB3cml0dGVuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXJlY292ZXJ5X3dhaXQ7CkBAIC0yMzIsNyArMjU1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHJkZXZfZGVjX3BlbmRpbmcobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpCiB7Ci0JaW50IGZhdWx0eSA9IHJkZXYtPmZhdWx0eTsKKwlpbnQgZmF1bHR5ID0gdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZGV2LT5ucl9wZW5kaW5nKSAmJiBmYXVsdHkpCiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIH0KQEAgLTI3MCw2ICsyOTMsMTMgQEAKIH07CiAKIAorc3RydWN0IG1kX3N5c2ZzX2VudHJ5IHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKG1kZGV2X3QgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKG1kZGV2X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworCiBzdGF0aWMgaW5saW5lIGNoYXIgKiBtZG5hbWUgKG1kZGV2X3QgKiBtZGRldikKIHsKIAlyZXR1cm4gbWRkZXYtPmdlbmRpc2sgPyBtZGRldi0+Z2VuZGlzay0+ZGlza19uYW1lIDogIm1kWCI7CkBAIC0zMDQsMTAgKzMzNCw4IEBACiAJbWRkZXZfdAkJCSptZGRldjsKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3cXVldWU7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgICAgZmxhZ3M7Ci0Jc3RydWN0IGNvbXBsZXRpb24JKmV2ZW50OwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdHNrOwogCXVuc2lnbmVkIGxvbmcJCXRpbWVvdXQ7Ci0JY29uc3QgY2hhcgkJKm5hbWU7CiB9IG1ka190aHJlYWRfdDsKIAogI2RlZmluZSBUSFJFQURfV0FLRVVQICAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCmluZGV4IDYwZTE5YjYuLjI5MmI5OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCkBAIC0xMTAsNyArMTEwLDkgQEAKICNkZWZpbmUJUjFCSU9fVXB0b2RhdGUJMAogI2RlZmluZQlSMUJJT19Jc1N5bmMJMQogI2RlZmluZQlSMUJJT19EZWdyYWRlZAkyCi0jZGVmaW5lCVIxQklPX0JlaGluZElPICAgMworI2RlZmluZQlSMUJJT19CZWhpbmRJTwkzCisjZGVmaW5lCVIxQklPX0JhcnJpZXIJNAorI2RlZmluZSBSMUJJT19CYXJyaWVyUmV0cnkgNQogLyogRm9yIHdyaXRlLWJlaGluZCByZXF1ZXN0cywgd2UgY2FsbCBiaV9lbmRfaW8gd2hlbgogICogdGhlIGxhc3Qgbm9uLXdyaXRlLWJlaGluZCBkZXZpY2UgY29tcGxldGVzLCBwcm92aWRpbmcKICAqIGFueSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bC4gIE90aGVyd2lzZSB3ZSBjYWxsIHdoZW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmgKaW5kZXggMTc2ZmM2NS4uZjAyNWJhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmgKQEAgLTE1NCw2ICsxNTQsOCBAQAogI2RlZmluZQlSNV9XYW50d3JpdGUJNQogI2RlZmluZQlSNV9TeW5jaW8JNgkvKiB0aGlzIGlvIG5lZWQgdG8gYmUgYWNjb3VudGVkIGFzIHJlc3luYyBpbyAqLwogI2RlZmluZQlSNV9PdmVybGFwCTcJLyogVGhlcmUgaXMgYSBwZW5kaW5nIG92ZXJsYXBwaW5nIHJlcXVlc3Qgb24gdGhpcyBibG9jayAqLworI2RlZmluZQlSNV9SZWFkRXJyb3IJOAkvKiBzZWVuIGEgcmVhZCBlcnJvciBoZXJlIHJlY2VudGx5ICovCisjZGVmaW5lCVI1X1JlV3JpdGUJOQkvKiBoYXZlIHRyaWVkIHRvIG92ZXItd3JpdGUgdGhlIHJlYWRlcnJvciAqLwogCiAvKgogICogV3JpdGUgbWV0aG9kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMDNiNjhhNy4uMmJiZjk2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtOTA5LDYgKzkwOSw3IEBACiAjZGVmaW5lIFBGX1NZTkNXUklURQkweDAwMjAwMDAwCS8qIEkgYW0gZG9pbmcgYSBzeW5jIHdyaXRlICovCiAjZGVmaW5lIFBGX0JPUlJPV0VEX01NCTB4MDA0MDAwMDAJLyogSSBhbSBhIGt0aHJlYWQgZG9pbmcgdXNlX21tICovCiAjZGVmaW5lIFBGX1JBTkRPTUlaRQkweDAwODAwMDAwCS8qIHJhbmRvbWl6ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KKyNkZWZpbmUgUEZfSE9UUExVR19DUFUJMHgwMTAwMDAwMAkvKiBDdXJyZW50bHkgcGVyZm9ybWluZyBDUFUgaG90cGx1ZyAqLwogCiAvKgogICogT25seSB0aGUgX2N1cnJlbnRfIHRhc2sgY2FuIHJlYWQvd3JpdGUgdG8gdHNrLT5mbGFncywgYnV0IG90aGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmggYi9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKaW5kZXggZTg5Yjc3Yi4uMTNhMzdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RhbGxpb24uaApAQCAtMjEsOCArMjEsNiBAQAogICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZglfU1RBTExJT05fSAogI2RlZmluZQlfU1RBTExJT05fSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggZmM4ZTM2Ny4uZmMxMzFkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogc3RydWN0IGZpbGU7CitzdHJ1Y3QgY29tcGxldGlvbjsKIAogI2RlZmluZSBDVExfTUFYTkFNRSAxMAkJLyogaG93IG1hbnkgcGF0aCBjb21wb25lbnRzIGRvIHdlIGFsbG93IGluIGEKIAkJCQkgICBjYWxsIHRvIHN5c2N0bD8gICBJbiBvdGhlciB3b3Jkcywgd2hhdCBpcwpAQCAtOTI1LDYgKzkyNiw4IEBACiB7CiAJY3RsX3RhYmxlICpjdGxfdGFibGU7CiAJc3RydWN0IGxpc3RfaGVhZCBjdGxfZW50cnk7CisJaW50IHVzZWQ7CisJc3RydWN0IGNvbXBsZXRpb24gKnVucmVnaXN0ZXJpbmc7CiB9OwogCiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqIHJlZ2lzdGVyX3N5c2N0bF90YWJsZShjdGxfdGFibGUgKiB0YWJsZSwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKaW5kZXggMWNjOGMzMS4uOTExNDAwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaApAQCAtMSw1NyArMSwxNiBAQAogI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWX0gKICNkZWZpbmUgX19MSU5VWF9WSURFT0RFVl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNkZWZpbmUgSEFWRV9WNEwyIDEKKyNkZWZpbmUgSEFWRV9WNEwxIDEKKwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKLXN0cnVjdCB2aWRlb19kZXZpY2UKLXsKLQkvKiBkZXZpY2UgaW5mbyAqLwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQljaGFyIG5hbWVbMzJdOwotCWludCB0eXBlOyAgICAgICAvKiB2NGwxICovCi0JaW50IHR5cGUyOyAgICAgIC8qIHY0bDIgKi8KLQlpbnQgaGFyZHdhcmU7Ci0JaW50IG1pbm9yOwotCi0JLyogZGV2aWNlIG9wcyArIGNhbGxiYWNrcyAqLwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7Ci0Jdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCk7Ci0KLQotCS8qIG9ic29sZXRlIC0tIGZvcHMtPm93bmVyIGlzIHVzZWQgaW5zdGVhZCAqLwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCS8qIGRldi0+ZHJpdmVyX2RhdGEgd2lsbCBiZSB1c2VkIGluc3RlYWQgc29tZSBkYXkuCi0JICogVXNlIHRoZSB2aWRlb197Z2V0fHNldH1fZHJ2ZGF0YSgpIGhlbHBlciBmdW5jdGlvbnMsCi0JICogc28gdGhlIHN3aXRjaCBvdmVyIHdpbGwgYmUgdHJhbnNwYXJlbnQgZm9yIHlvdS4KLQkgKiBPciB1c2Uge3BjaXx1c2J9X3tnZXR8c2V0fV9kcnZkYXRhKCkgZGlyZWN0bHkuICovCi0Jdm9pZCAqcHJpdjsKLQotCS8qIGZvciB2aWRlb2Rldi5jIGludGVuYWwgdXNhZ2UgLS0gcGxlYXNlIGRvbid0IHRvdWNoICovCi0JaW50IHVzZXJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHZpZGVvX2V4Y2x1c2l2ZV97b3BlbnxjbG9zZX0gLi4uICovCi0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOyAgICAgICAgIC8qIC4uLiBoZWxwZXIgZnVuY3Rpb24gdXNlcyB0aGVzZSAgICovCi0JY2hhciBkZXZmc19uYW1lWzY0XTsgICAgICAgICAgIC8qIGRldmZzICovCi0Jc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7IC8qIHN5c2ZzICovCi19OwotCi0jZGVmaW5lIFZJREVPX01BSk9SCTgxCi0KLSNkZWZpbmUgVkZMX1RZUEVfR1JBQkJFUgkwCi0jZGVmaW5lIFZGTF9UWVBFX1ZCSQkJMQotI2RlZmluZSBWRkxfVFlQRV9SQURJTwkJMgotI2RlZmluZSBWRkxfVFlQRV9WVFgJCTMKLQotZXh0ZXJuIGludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqLCBpbnQgdHlwZSwgaW50IG5yKTsKLWV4dGVybiB2b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSogdmlkZW9fZGV2ZGF0YShzdHJ1Y3QgZmlsZSopOwogCiAjZGVmaW5lIHRvX3ZpZGVvX2RldmljZShjZCkgY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBjbGFzc19kZXYpCkBAIC02OCwxMSArMjcsNyBAQAogCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmdmZkLT5jbGFzc19kZXYsIGF0dHIpOwogfQogCi0vKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFsbG9jIC8gcmVsZWFzZSBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCB0aGUKLSAgIGxhdGVyIGNhbiBiZSB1c2VkIGZvciB2aWRlb19kZXZpY2UtPnJlbGVhc2UoKSAqLwotc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlX2FsbG9jKHZvaWQpOwotdm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOwotCisjaWYgT0JTT0xFVEVfT1dORVIgLyogdG8gYmUgcmVtb3ZlZCBpbiAyLjYuMTUgKi8KIC8qIGhlbHBlciBmdW5jdGlvbnMgdG8gYWNjZXNzIGRyaXZlciBwcml2YXRlIGRhdGEuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnZpZGVvX2dldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKIHsKQEAgLTgzLDMwICszOCwxMiBAQAogewogCWRldi0+cHJpdiA9IGRhdGE7CiB9CisjZW5kaWYKIAogZXh0ZXJuIGludCB2aWRlb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLWV4dGVybiBpbnQgdmlkZW9fdXNlcmNvcHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAotCQkJICBpbnQgKCpmdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpKTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKLSNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRQkxCS8qIENhbiBjYXB0dXJlICovCi0jZGVmaW5lIFZJRF9UWVBFX1RVTkVSCQkyCS8qIENhbiB0dW5lICovCi0jZGVmaW5lIFZJRF9UWVBFX1RFTEVURVhUCTQJLyogRG9lcyB0ZWxldGV4dCAqLwotI2RlZmluZSBWSURfVFlQRV9PVkVSTEFZCTgJLyogT3ZlcmxheSBvbnRvIGZyYW1lIGJ1ZmZlciAqLwotI2RlZmluZSBWSURfVFlQRV9DSFJPTUFLRVkJMTYJLyogT3ZlcmxheSBieSBjaHJvbWFrZXkgKi8KLSNkZWZpbmUgVklEX1RZUEVfQ0xJUFBJTkcJMzIJLyogQ2FuIGNsaXAgKi8KLSNkZWZpbmUgVklEX1RZUEVfRlJBTUVSQU0JNjQJLyogVXNlcyB0aGUgZnJhbWUgYnVmZmVyIG1lbW9yeSAqLwotI2RlZmluZSBWSURfVFlQRV9TQ0FMRVMJCTEyOAkvKiBTY2FsYWJsZSAqLwotI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FCTI1NgkvKiBNb25vY2hyb21lIG9ubHkgKi8KLSNkZWZpbmUgVklEX1RZUEVfU1VCQ0FQVFVSRQk1MTIJLyogQ2FuIGNhcHR1cmUgc3ViYXJlYXMgb2YgdGhlIGltYWdlICovCi0jZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUgkxMDI0CS8qIENhbiBkZWNvZGUgTVBFRyBzdHJlYW1zICovCi0jZGVmaW5lIFZJRF9UWVBFX01QRUdfRU5DT0RFUgkyMDQ4CS8qIENhbiBlbmNvZGUgTVBFRyBzdHJlYW1zICovCi0jZGVmaW5lIFZJRF9UWVBFX01KUEVHX0RFQ09ERVIJNDA5NgkvKiBDYW4gZGVjb2RlIE1KUEVHIHN0cmVhbXMgKi8KLSNkZWZpbmUgVklEX1RZUEVfTUpQRUdfRU5DT0RFUgk4MTkyCS8qIENhbiBlbmNvZGUgTUpQRUcgc3RyZWFtcyAqLwotCiBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eQogewogCWNoYXIgbmFtZVszMl07CkBAIC0yMDIsOSArMTM5LDkgQEAKICNkZWZpbmUgVklERU9fU09VTkRfU1RFUkVPCTIKICNkZWZpbmUgVklERU9fU09VTkRfTEFORzEJNAogI2RlZmluZSBWSURFT19TT1VORF9MQU5HMgk4Ci0gICAgICAgIF9fdTE2ICAgbW9kZTsKLSAgICAgICAgX191MTYJYmFsYW5jZTsJLyogU3RlcmVvIGJhbGFuY2UgKi8KLSAgICAgICAgX191MTYJc3RlcDsJCS8qIFN0ZXAgYWN0dWFsIHZvbHVtZSB1c2VzICovCisJX191MTYgICBtb2RlOworCV9fdTE2CWJhbGFuY2U7CS8qIFN0ZXJlbyBiYWxhbmNlICovCisJX191MTYJc3RlcDsJCS8qIFN0ZXAgYWN0dWFsIHZvbHVtZSB1c2VzICovCiB9OwogCiBzdHJ1Y3QgdmlkZW9fY2xpcApAQCAtMjYwLDkgKzE5Nyw2IEBACiAJX191MzIJZmxhZ3M7CiB9OwogCi0KLSNkZWZpbmUgVklERU9fTUFYX0ZSQU1FCQkzMgotCiBzdHJ1Y3QgdmlkZW9fbWJ1ZgogewogCWludAlzaXplOwkJLyogVG90YWwgbWVtb3J5IHRvIG1hcCAqLwpAQCAtMjcwLDEwICsyMDQsOCBAQAogCWludAlvZmZzZXRzW1ZJREVPX01BWF9GUkFNRV07CiB9OwogCi0KICNkZWZpbmUgCVZJREVPX05PX1VOSVQJKC0xKQogCi0KIHN0cnVjdCB2aWRlb191bml0CiB7CiAJaW50IAl2aWRlbzsJCS8qIFZpZGVvIG1pbm9yICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCA4OWEwNTU3Li5hMTE0ZmZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0xNSwxNiArMTUsOTkgQEAKICAqLwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+IC8qIG5lZWQgc3RydWN0IHRpbWV2YWwgKi8KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwogCisKKyNkZWZpbmUgT0JTT0xFVEVfT1dORVIgMSAvKiBJdCB3aWxsIGJlIHJlbW92ZWQgZm9yIDIuNi4xNSAqLworI2RlZmluZSBIQVZFX1Y0TDIgMQorCisvKgorICogQ29tbW9uIHN0dWZmIGZvciBib3RoIFY0TDEgYW5kIFY0TDIKKyAqIE1vdmVkIGZyb20gdmlkZW9kZXYuaAorICovCisKKyNkZWZpbmUgVklERU9fTUFYX0ZSQU1FICAgICAgICAgICAgICAgMzIKKworI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVFVORVIJCTIJLyogQ2FuIHR1bmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQJNAkvKiBEb2VzIHRlbGV0ZXh0ICovCisjZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkJOAkvKiBPdmVybGF5IG9udG8gZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWQkxNgkvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLworI2RlZmluZSBWSURfVFlQRV9DTElQUElORwkzMgkvKiBDYW4gY2xpcCAqLworI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTQk2NAkvKiBVc2VzIHRoZSBmcmFtZSBidWZmZXIgbWVtb3J5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NDQUxFUwkJMTI4CS8qIFNjYWxhYmxlICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUJMjU2CS8qIE1vbm9jaHJvbWUgb25seSAqLworI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFCTUxMgkvKiBDYW4gY2FwdHVyZSBzdWJhcmVhcyBvZiB0aGUgaW1hZ2UgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSCTEwMjQJLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSCTIwNDgJLyogQ2FuIGVuY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUgk0MDk2CS8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSCTgxOTIJLyogQ2FuIGVuY29kZSBNSlBFRyBzdHJlYW1zICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgVkZMX1RZUEVfR1JBQkJFUgkwCisjZGVmaW5lIFZGTF9UWVBFX1ZCSQkJMQorI2RlZmluZSBWRkxfVFlQRV9SQURJTwkJMgorI2RlZmluZSBWRkxfVFlQRV9WVFgJCTMKKworc3RydWN0IHZpZGVvX2RldmljZQoreworCS8qIGRldmljZSBpbmZvICovCisJc3RydWN0IGRldmljZSAqZGV2OworCWNoYXIgbmFtZVszMl07CisJaW50IHR5cGU7ICAgICAgIC8qIHY0bDEgKi8KKwlpbnQgdHlwZTI7ICAgICAgLyogdjRsMiAqLworCWludCBoYXJkd2FyZTsKKwlpbnQgbWlub3I7CisKKwkvKiBkZXZpY2Ugb3BzICsgY2FsbGJhY2tzICovCisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKKworCisjaWYgT0JTT0xFVEVfT1dORVIgLyogdG8gYmUgcmVtb3ZlZCBpbiAyLjYuMTUgKi8KKwkvKiBvYnNvbGV0ZSAtLSBmb3BzLT5vd25lciBpcyB1c2VkIGluc3RlYWQgKi8KKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwkvKiBkZXYtPmRyaXZlcl9kYXRhIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIHNvbWUgZGF5LgorCSAqIFVzZSB0aGUgdmlkZW9fe2dldHxzZXR9X2RydmRhdGEoKSBoZWxwZXIgZnVuY3Rpb25zLAorCSAqIHNvIHRoZSBzd2l0Y2ggb3ZlciB3aWxsIGJlIHRyYW5zcGFyZW50IGZvciB5b3UuCisJICogT3IgdXNlIHtwY2l8dXNifV97Z2V0fHNldH1fZHJ2ZGF0YSgpIGRpcmVjdGx5LiAqLworCXZvaWQgKnByaXY7CisjZW5kaWYKKworCS8qIGZvciB2aWRlb2Rldi5jIGludGVuYWwgdXNhZ2UgLS0gcGxlYXNlIGRvbid0IHRvdWNoICovCisJaW50IHVzZXJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHZpZGVvX2V4Y2x1c2l2ZV97b3BlbnxjbG9zZX0gLi4uICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOyAgICAgICAgIC8qIC4uLiBoZWxwZXIgZnVuY3Rpb24gdXNlcyB0aGVzZSAgICovCisJY2hhciBkZXZmc19uYW1lWzY0XTsgICAgICAgICAgIC8qIGRldmZzICovCisJc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7IC8qIHN5c2ZzICovCit9OworCisjZGVmaW5lIFZJREVPX01BSk9SCTgxCisKK2V4dGVybiBpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKiwgaW50IHR5cGUsIGludCBucik7CitleHRlcm4gdm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICopOworZXh0ZXJuIGludCB2aWRlb191c2VyY29weShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCisJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykpOworCisvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFsbG9jIC8gcmVsZWFzZSBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCB0aGUKKyAgIGxhdGVyIGNhbiBiZSB1c2VkIGZvciB2aWRlb19kZXZpY2UtPnJlbGVhc2UoKSAqLworc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlX2FsbG9jKHZvaWQpOwordm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOworCisjZW5kaWYKKwogLyoKICAqCU0gSSBTIEMgRSBMIEwgQSBOIEUgTyBVIFMKICAqLwogCiAvKiAgRm91ci1jaGFyYWN0ZXItY29kZSAoRk9VUkNDKSAqLwogI2RlZmluZSB2NGwyX2ZvdXJjYyhhLGIsYyxkKVwKLSAgICAgICAgKCgoX191MzIpKGEpPDwwKXwoKF9fdTMyKShiKTw8OCl8KChfX3UzMikoYyk8PDE2KXwoKF9fdTMyKShkKTw8MjQpKQorCSgoKF9fdTMyKShhKTw8MCl8KChfX3UzMikoYik8PDgpfCgoX191MzIpKGMpPDwxNil8KChfX3UzMikoZCk8PDI0KSkKIAogLyoKICAqCUUgTiBVIE0gUwpAQCAtMTU0LDIwICsyMzcsMjAgQEAKIH07CiAKIC8qIFZhbHVlcyBmb3IgJ2NhcGFiaWxpdGllcycgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRQkgICAgICAgIDB4MDAwMDAwMDEgIC8qIElzIGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUCSAgICAgICAgMHgwMDAwMDAwMiAgLyogSXMgYSB2aWRlbyBvdXRwdXQgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09WRVJMQVkJICAgICAgICAweDAwMDAwMDA0ICAvKiBDYW4gZG8gdmlkZW8gb3ZlcmxheSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRQkgICAgICAgIDB4MDAwMDAwMTAgIC8qIElzIGEgcmF3IFZCSSBjYXB0dXJlIGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfT1VUUFVUCSAgICAgICAgMHgwMDAwMDAyMCAgLyogSXMgYSByYXcgVkJJIG91dHB1dCBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRQkJMHgwMDAwMDAwMSAgLyogSXMgYSB2aWRlbyBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQJCTB4MDAwMDAwMDIgIC8qIElzIGEgdmlkZW8gb3V0cHV0IGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZCQkweDAwMDAwMDA0ICAvKiBDYW4gZG8gdmlkZW8gb3ZlcmxheSAqLworI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRQkJMHgwMDAwMDAxMCAgLyogSXMgYSByYXcgVkJJIGNhcHR1cmUgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQJCTB4MDAwMDAwMjAgIC8qIElzIGEgcmF3IFZCSSBvdXRwdXQgZGV2aWNlICovCiAjaWYgMQogI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUJMHgwMDAwMDA0MCAgLyogSXMgYSBzbGljZWQgVkJJIGNhcHR1cmUgZGV2aWNlICovCiAjZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUCTB4MDAwMDAwODAgIC8qIElzIGEgc2xpY2VkIFZCSSBvdXRwdXQgZGV2aWNlICovCiAjZW5kaWYKLSNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUJICAgICAgICAweDAwMDAwMTAwICAvKiBSRFMgZGF0YSBjYXB0dXJlICovCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19DQVBUVVJFCQkweDAwMDAwMTAwICAvKiBSRFMgZGF0YSBjYXB0dXJlICovCiAKLSNkZWZpbmUgVjRMMl9DQVBfVFVORVIJCSAgICAgICAgMHgwMDAxMDAwMCAgLyogaGFzIGEgdHVuZXIgKi8KLSNkZWZpbmUgVjRMMl9DQVBfQVVESU8JCSAgICAgICAgMHgwMDAyMDAwMCAgLyogaGFzIGF1ZGlvIHN1cHBvcnQgKi8KLSNkZWZpbmUgVjRMMl9DQVBfUkFESU8JCSAgICAgICAgMHgwMDA0MDAwMCAgLyogaXMgYSByYWRpbyBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVFVORVIJCQkweDAwMDEwMDAwICAvKiBoYXMgYSB0dW5lciAqLworI2RlZmluZSBWNEwyX0NBUF9BVURJTwkJCTB4MDAwMjAwMDAgIC8qIGhhcyBhdWRpbyBzdXBwb3J0ICovCisjZGVmaW5lIFY0TDJfQ0FQX1JBRElPCQkJMHgwMDA0MDAwMCAgLyogaXMgYSByYWRpbyBkZXZpY2UgKi8KIAogI2RlZmluZSBWNEwyX0NBUF9SRUFEV1JJVEUgICAgICAgICAgICAgIDB4MDEwMDAwMDAgIC8qIHJlYWQvd3JpdGUgc3lzdGVtY2FsbHMgKi8KICNkZWZpbmUgVjRMMl9DQVBfQVNZTkNJTyAgICAgICAgICAgICAgICAweDAyMDAwMDAwICAvKiBhc3luYyBJL08gKi8KQEAgLTE3OSwxMyArMjYyLDEzIEBACiAKIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQKIHsKLQlfX3UzMiAgICAgICAgIAkgCXdpZHRoOwotCV9fdTMyCSAgICAgICAgIAloZWlnaHQ7Ci0JX191MzIJICAgICAgICAgCXBpeGVsZm9ybWF0OworCV9fdTMyICAgICAgICAgCQl3aWR0aDsKKwlfX3UzMgkJCWhlaWdodDsKKwlfX3UzMgkJCXBpeGVsZm9ybWF0OwogCWVudW0gdjRsMl9maWVsZCAgCWZpZWxkOwogCV9fdTMyICAgICAgICAgICAgCWJ5dGVzcGVybGluZTsJLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCi0JX191MzIgICAgICAgICAgCSAJc2l6ZWltYWdlOwotICAgICAgICBlbnVtIHY0bDJfY29sb3JzcGFjZQljb2xvcnNwYWNlOworCV9fdTMyICAgICAgICAgIAkJc2l6ZWltYWdlOworCWVudW0gdjRsMl9jb2xvcnNwYWNlCWNvbG9yc3BhY2U7CiAJX191MzIJCQlwcml2OwkJLyogcHJpdmF0ZSBkYXRhLCBkZXBlbmRzIG9uIHBpeGVsZm9ybWF0ICovCiB9OwogCkBAIC0yMzgsMTIgKzMyMSwxMiBAQAogICovCiBzdHJ1Y3QgdjRsMl9mbXRkZXNjCiB7Ci0JX191MzIJICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgICAgIC8qIEZvcm1hdCBudW1iZXIgICAgICAqLworCV9fdTMyCQkgICAgaW5kZXg7ICAgICAgICAgICAgIC8qIEZvcm1hdCBudW1iZXIgICAgICAqLwogCWVudW0gdjRsMl9idWZfdHlwZSAgdHlwZTsgICAgICAgICAgICAgIC8qIGJ1ZmZlciB0eXBlICAgICAgICAqLwogCV9fdTMyICAgICAgICAgICAgICAgZmxhZ3M7Ci0JX191OAkgICAgICAgICAgICBkZXNjcmlwdGlvblszMl07ICAgLyogRGVzY3JpcHRpb24gc3RyaW5nICovCi0JX191MzIJICAgICAgICAgICAgcGl4ZWxmb3JtYXQ7ICAgICAgIC8qIEZvcm1hdCBmb3VyY2MgICAgICAqLwotCV9fdTMyCSAgICAgICAgICAgIHJlc2VydmVkWzRdOworCV9fdTgJCSAgICBkZXNjcmlwdGlvblszMl07ICAgLyogRGVzY3JpcHRpb24gc3RyaW5nICovCisJX191MzIJCSAgICBwaXhlbGZvcm1hdDsgICAgICAgLyogRm9ybWF0IGZvdXJjYyAgICAgICovCisJX191MzIJCSAgICByZXNlcnZlZFs0XTsKIH07CiAKICNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQpAQCAtMzkzLDcgKzQ3Niw3IEBACiAjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFJJICgxPDw1KSAgICAvKiBEZWZpbmUgUmVzdGFydCBJbnRlcnZhbCAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0NPTSAoMTw8NikgICAgLyogQ29tbWVudCBzZWdtZW50ICovCiAjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQVBQICgxPDw3KSAgICAvKiBBcHAgc2VnbWVudCwgZHJpdmVyIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFsbHdheXMgdXNlIEFQUDAgKi8KKwkJCQkJKiBhbGx3YXlzIHVzZSBBUFAwICovCiB9OwogCiAKQEAgLTQwMiwxMCArNDg1LDEwIEBACiAgKi8KIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzCiB7Ci0JX191MzIJICAgICAgICAgICAgICAgIGNvdW50OworCV9fdTMyCQkJY291bnQ7CiAJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKIAllbnVtIHY0bDJfbWVtb3J5ICAgICAgICBtZW1vcnk7Ci0JX191MzIJICAgICAgICAgICAgICAgIHJlc2VydmVkWzJdOworCV9fdTMyCQkJcmVzZXJ2ZWRbMl07CiB9OwogCiBzdHJ1Y3QgdjRsMl9idWZmZXIKQEAgLTUxMSw5ICs1OTQsOSBAQAogCiBzdHJ1Y3QgdjRsMl9jcm9wY2FwIHsKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICB0eXBlOwotICAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBib3VuZHM7Ci0gICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgICAgICAgIGRlZnJlY3Q7Ci0gICAgICAgIHN0cnVjdCB2NGwyX2ZyYWN0ICAgICAgIHBpeGVsYXNwZWN0OworCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgIGJvdW5kczsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBkZWZyZWN0OworCXN0cnVjdCB2NGwyX2ZyYWN0ICAgICAgIHBpeGVsYXNwZWN0OwogfTsKIAogc3RydWN0IHY0bDJfY3JvcCB7CkBAIC01NDQsNiArNjI3LDcgQEAKIAogI2RlZmluZSBWNEwyX1NURF9OVFNDX00gICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDEwMDApCiAjZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQogCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQpAQCAtNTgxLDEzICs2NjUsMTQgQEAKIAogI2RlZmluZSBWNEwyX1NURF81MjVfNjAJCShWNEwyX1NURF9QQUxfTQkJfFwKIAkJCQkgVjRMMl9TVERfUEFMXzYwCXxcCi0JCQkJIFY0TDJfU1REX05UU0MpCisJCQkJIFY0TDJfU1REX05UU0MJCXxcCisJCQkJIFY0TDJfU1REX05UU0NfNDQzKQogI2RlZmluZSBWNEwyX1NURF82MjVfNTAJCShWNEwyX1NURF9QQUwJCXxcCiAJCQkJIFY0TDJfU1REX1BBTF9OCQl8XAogCQkJCSBWNEwyX1NURF9QQUxfTmMJfFwKIAkJCQkgVjRMMl9TVERfU0VDQU0pCiAjZGVmaW5lIFY0TDJfU1REX0FUU0MgICAgICAgICAgIChWNEwyX1NURF9BVFNDXzhfVlNCICAgIHxcCi0JCSAgICAgICAgICAgICAgICAgVjRMMl9TVERfQVRTQ18xNl9WU0IpCisJCQkJIFY0TDJfU1REX0FUU0NfMTZfVlNCKQogCiAjZGVmaW5lIFY0TDJfU1REX1VOS05PV04gICAgICAgIDAKICNkZWZpbmUgVjRMMl9TVERfQUxMICAgICAgICAgICAgKFY0TDJfU1REXzUyNV82MAl8XApAQCAtNTk1LDcgKzY4MCw3IEBACiAKIHN0cnVjdCB2NGwyX3N0YW5kYXJkCiB7Ci0JX191MzIJICAgICAgIAkgICAgIGluZGV4OworCV9fdTMyCQkgICAgIGluZGV4OwogCXY0bDJfc3RkX2lkICAgICAgICAgIGlkOwogCV9fdTgJCSAgICAgbmFtZVsyNF07CiAJc3RydWN0IHY0bDJfZnJhY3QgICAgZnJhbWVwZXJpb2Q7IC8qIEZyYW1lcywgbm90IGZpZWxkcyAqLwpAQCAtNjEwLDkgKzY5NSw5IEBACiBzdHJ1Y3QgdjRsMl9pbnB1dAogewogCV9fdTMyCSAgICAgaW5kZXg7CQkvKiAgV2hpY2ggaW5wdXQgKi8KLQlfX3U4CSAgICAgbmFtZVszMl07CSAgICAgICAgLyogIExhYmVsICovCisJX191OAkgICAgIG5hbWVbMzJdOwkJLyogIExhYmVsICovCiAJX191MzIJICAgICB0eXBlOwkJLyogIFR5cGUgb2YgaW5wdXQgKi8KLQlfX3UzMgkgICAgIGF1ZGlvc2V0OwkgICAgICAgIC8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCisJX191MzIJICAgICBhdWRpb3NldDsJCS8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCiAJX191MzIgICAgICAgIHR1bmVyOyAgICAgICAgICAgICAvKiAgQXNzb2NpYXRlZCB0dW5lciAqLwogCXY0bDJfc3RkX2lkICBzdGQ7CiAJX191MzIJICAgICBzdGF0dXM7CkBAIC02NDcsOSArNzMyLDkgQEAKIHN0cnVjdCB2NGwyX291dHB1dAogewogCV9fdTMyCSAgICAgaW5kZXg7CQkvKiAgV2hpY2ggb3V0cHV0ICovCi0JX191OAkgICAgIG5hbWVbMzJdOwkgICAgICAgIC8qICBMYWJlbCAqLworCV9fdTgJICAgICBuYW1lWzMyXTsJCS8qICBMYWJlbCAqLwogCV9fdTMyCSAgICAgdHlwZTsJCS8qICBUeXBlIG9mIG91dHB1dCAqLwotCV9fdTMyCSAgICAgYXVkaW9zZXQ7CSAgICAgICAgLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KKwlfX3UzMgkgICAgIGF1ZGlvc2V0OwkJLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KIAlfX3UzMgkgICAgIG1vZHVsYXRvcjsgICAgICAgICAvKiAgQXNzb2NpYXRlZCBtb2R1bGF0b3IgKi8KIAl2NGwyX3N0ZF9pZCAgc3RkOwogCV9fdTMyCSAgICAgcmVzZXJ2ZWRbNF07CkBAIC02NzEsMTIgKzc1NiwxMiBAQAogLyogIFVzZWQgaW4gdGhlIFZJRElPQ19RVUVSWUNUUkwgaW9jdGwgZm9yIHF1ZXJ5aW5nIGNvbnRyb2xzICovCiBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwKIHsKLQlfX3UzMgkgICAgICAgICAgICAgaWQ7CisJX191MzIJCSAgICAgaWQ7CiAJZW51bSB2NGwyX2N0cmxfdHlwZSAgdHlwZTsKIAlfX3U4CQkgICAgIG5hbWVbMzJdOwkvKiBXaGF0ZXZlciAqLwogCV9fczMyCQkgICAgIG1pbmltdW07CS8qIE5vdGUgc2lnbmVkbmVzcyAqLwogCV9fczMyCQkgICAgIG1heGltdW07Ci0JX19zMzIJICAgICAgICAgICAgIHN0ZXA7CisJX19zMzIJCSAgICAgc3RlcDsKIAlfX3MzMgkJICAgICBkZWZhdWx0X3ZhbHVlOwogCV9fdTMyICAgICAgICAgICAgICAgIGZsYWdzOwogCV9fdTMyCQkgICAgIHJlc2VydmVkWzJdOwpAQCAtNzc5LDEwICs4NjQsMTAgQEAKIAogc3RydWN0IHY0bDJfZnJlcXVlbmN5CiB7Ci0JX191MzIJICAgICAgICAgICAgICB0dW5lcjsKKwlfX3UzMgkJICAgICAgdHVuZXI7CiAJZW51bSB2NGwyX3R1bmVyX3R5cGUgIHR5cGU7Ci0gICAgICAgIF9fdTMyCSAgICAgICAgICAgICAgZnJlcXVlbmN5OwotCV9fdTMyCSAgICAgICAgICAgICAgcmVzZXJ2ZWRbOF07CisJX191MzIJCSAgICAgIGZyZXF1ZW5jeTsKKwlfX3UzMgkJICAgICAgcmVzZXJ2ZWRbOF07CiB9OwogCiAvKgpAQCAtODAyLDYgKzg4Nyw3IEBACiAKIC8qICBGbGFncyBmb3IgdGhlICdtb2RlJyBmaWVsZCAqLwogI2RlZmluZSBWNEwyX0FVRE1PREVfQVZMCQkweDAwMDAxCisjZGVmaW5lIFY0TDJfQVVETU9ERV8zMkJJVFMJCTB4MDAwMDIKIAogc3RydWN0IHY0bDJfYXVkaW9vdXQKIHsKQEAgLTg0NiwxNCArOTMyLDE0IEBACiAKIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0CiB7Ci0gICAgICAgIF9fdTE2ICAgc2VydmljZV9zZXQ7Ci0gICAgICAgIC8qIHNlcnZpY2VfbGluZXNbMF1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgZmlyc3QgZmllbGQKLSAgICAgICAgICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZHMsIDI2My0yODYgZm9yIDUyNSBsaW5lIHN0YW5kYXJkcykgKi8KLSAgICAgICAgX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLSAgICAgICAgX191MzIgICBpb19zaXplOwotICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOyAgICAgICAgICAgIC8qIG11c3QgYmUgemVybyAqLworCV9fdTE2ICAgc2VydmljZV9zZXQ7CisJLyogc2VydmljZV9saW5lc1swXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBmaXJzdCBmaWVsZAorCSAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCisJCQkJIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KKwkJCQkgIHN0YW5kYXJkcywgMjYzLTI4NiBmb3IgNTI1IGxpbmUgc3RhbmRhcmRzKSAqLworCV9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07CisJX191MzIgICBpb19zaXplOworCV9fdTMyICAgcmVzZXJ2ZWRbMl07ICAgICAgICAgICAgLyogbXVzdCBiZSB6ZXJvICovCiB9OwogCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgICAgICAgICAgKDB4MDAwMSkKQEAgLTg2NiwyMiArOTUyLDIyIEBACiAKIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwCiB7Ci0gICAgICAgIF9fdTE2ICAgc2VydmljZV9zZXQ7Ci0gICAgICAgIC8qIHNlcnZpY2VfbGluZXNbMF1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgZmlyc3QgZmllbGQKLSAgICAgICAgICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZHMsIDI2My0yODYgZm9yIDUyNSBsaW5lIHN0YW5kYXJkcykgKi8KLSAgICAgICAgX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLSAgICAgICAgX191MzIgICByZXNlcnZlZFs0XTsgICAgLyogbXVzdCBiZSAwICovCisJX191MTYgICBzZXJ2aWNlX3NldDsKKwkvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisJICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKKwkJCQkgKGVxdWFscyBmcmFtZSBsaW5lcyAzMTMtMzM2IGZvciA2MjUgbGluZSB2aWRlbworCQkJCSAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisJX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKKwlfX3UzMiAgIHJlc2VydmVkWzRdOyAgICAvKiBtdXN0IGJlIDAgKi8KIH07CiAKIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YQogewotICAgICAgICBfX3UzMiAgIGlkOwotICAgICAgICBfX3UzMiAgIGZpZWxkOyAgICAgICAgICAvKiAwOiBmaXJzdCBmaWVsZCwgMTogc2Vjb25kIGZpZWxkICovCi0gICAgICAgIF9fdTMyICAgbGluZTsgICAgICAgICAgIC8qIDEtMjMgKi8KLSAgICAgICAgX191MzIgICByZXNlcnZlZDsgICAgICAgLyogbXVzdCBiZSAwICovCi0gICAgICAgIF9fdTggICAgZGF0YVs0OF07CisJX191MzIgICBpZDsKKwlfX3UzMiAgIGZpZWxkOyAgICAgICAgICAvKiAwOiBmaXJzdCBmaWVsZCwgMTogc2Vjb25kIGZpZWxkICovCisJX191MzIgICBsaW5lOyAgICAgICAgICAgLyogMS0yMyAqLworCV9fdTMyICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIG11c3QgYmUgMCAqLworCV9fdTggICAgZGF0YVs0OF07CiB9OwogI2VuZGlmCiAKQEAgLTg5Niw5ICs5ODIsOSBAQAogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOwogCXVuaW9uCiAJewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CSAgICAgICAgcGl4OyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCi0JCXN0cnVjdCB2NGwyX3dpbmRvdwkgICAgICAgIHdpbjsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWQotCQlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0CSAgICAgICAgdmJpOyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRQorCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CQlwaXg7ICAgICAvLyBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKKwkJc3RydWN0IHY0bDJfd2luZG93CQl3aW47ICAgICAvLyBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkKKwkJc3RydWN0IHY0bDJfdmJpX2Zvcm1hdAkJdmJpOyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRQogI2lmIDEKIAkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQJc2xpY2VkOyAgLy8gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUKICNlbmRpZgpAQCAtOTgxLDYgKzEwNjcsNyBAQAogI2lmIDEKICNkZWZpbmUgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAgX0lPUiAgKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQogI2VuZGlmCisjZGVmaW5lIFZJRElPQ19MT0dfU1RBVFVTICAgICAgIF9JTyAgICgnVicsIDcwKQogCiAvKiBmb3IgY29tcGF0aWJpbGl0eSwgd2lsbCBnbyBhd2F5IHNvbWUgZGF5ICovCiAjZGVmaW5lIFZJRElPQ19PVkVSTEFZX09MRCAgICAgCV9JT1dSICgnVicsIDE0LCBpbnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oIGIvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaAppbmRleCBhN2NlZWU5Li5iN2Q0YjA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmgKQEAgLTQsNiArNCwyMyBAQAogI2lmbmRlZiBBVURJT0NISVBfSAogI2RlZmluZSBBVURJT0NISVBfSAogCitlbnVtIGF1ZGlvY2hpcCB7CisJQVVESU9fQ0hJUF9OT05FLAorCUFVRElPX0NISVBfVU5LTk9XTiwKKwkvKiBQcm92aWRlZCBieSB2aWRlbyBjaGlwICovCisJQVVESU9fQ0hJUF9JTlRFUk5BTCwKKwkvKiBQcm92aWRlZCBieSB0dmF1ZGlvLmMgKi8KKwlBVURJT19DSElQX1REQTg0MjUsCisJQVVESU9fQ0hJUF9URUE2MzAwLAorCUFVRElPX0NISVBfVEVBNjQyMCwKKwlBVURJT19DSElQX1REQTk4NDAsCisJQVVESU9fQ0hJUF9UREE5ODVYLAorCUFVRElPX0NISVBfVERBOTg3NCwKKwlBVURJT19DSElQX1BJQzE2QzU0LAorCS8qIFByb3ZpZGVkIGJ5IG1zcDM0MDAuYyAqLworCUFVRElPX0NISVBfTVNQMzRYWAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiB2NGwgZGV2aWNlIHdhcyBvcGVuZWQgaW4gUmFkaW8gbW9kZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pZC5oIGIvaW5jbHVkZS9tZWRpYS9pZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDAyYzk0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbWVkaWEvaWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKi8KLQotLyogRklYTUU6IHRoaXMgdGVtcG9yYXJlbHksIHVudGlsIHRoZXNlIGFyZSBpbmNsdWRlZCBpbiBsaW51eC9pMmMtaWQuaCAqLwotCi0vKiBkcml2ZXJzICovCi0jaWZuZGVmICBJMkNfRFJJVkVSSURfVFZNSVhFUgotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1RWTUlYRVIgSTJDX0RSSVZFUklEX0VYUDAKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1RWQVVESU8KLSMgZGVmaW5lIEkyQ19EUklWRVJJRF9UVkFVRElPIEkyQ19EUklWRVJJRF9FWFAxCi0jZW5kaWYKLQotLyogY2hpcHMgKi8KLSNpZm5kZWYgIEkyQ19EUklWRVJJRF9EUEwzNTE4Ci0jIGRlZmluZSBJMkNfRFJJVkVSSURfRFBMMzUxOCBJMkNfRFJJVkVSSURfRVhQMgotI2VuZGlmCi0jaWZuZGVmICBJMkNfRFJJVkVSSURfVERBOTg3MwotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NzMgSTJDX0RSSVZFUklEX0VYUDMKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTk4NzUKLSMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODc1IEkyQ19EUklWRVJJRF9FWFAwKzQKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOTUxCi0jIGRlZmluZSBJMkNfRFJJVkVSSURfUElDMTZDNTRfUFY5NTEgSTJDX0RSSVZFUklEX0VYUDArNQotI2VuZGlmCi0jaWZuZGVmICBJMkNfRFJJVkVSSURfVERBNzQzMgotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1REQTc0MzIgSTJDX0RSSVZFUklEX0VYUDArNgotI2VuZGlmCi0jaWZuZGVmICBJMkNfRFJJVkVSSURfVERBOTg3NAotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NzQgSTJDX0RSSVZFUklEX0VYUDArNwotI2VuZGlmCi0jaWZuZGVmICBJMkNfRFJJVkVSSURfU0FBNjc1MkhTCi0jIGRlZmluZSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTIEkyQ19EUklWRVJJRF9FWFAwKzgKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggMDFiNTY4Mi4uMGYxYmE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0yMCw4ICsyMCwxMCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpZm5kZWYgX0lSX0NPTU1PTgorI2RlZmluZSBfSVJfQ09NTU9OCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjZGVmaW5lIElSX1RZUEVfUkM1ICAgICAxCiAjZGVmaW5lIElSX1RZUEVfUEQgICAgICAyIC8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KQEAgLTYxLDYgKzYzLDggQEAKIGludCAgaXJfZGVjb2RlX2JpcGhhc2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKTsKIGludCAgaXJfZGVjb2RlX3B1bHNlZGlzdGFuY2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKTsKIAorI2VuZGlmCisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBjLWJhc2ljLW9mZnNldDogOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZhNTdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfSVJfSTJDCisjZGVmaW5lIF9JUl9JMkMKKworI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorCitzdHJ1Y3QgSVJfaTJjOworCitzdHJ1Y3QgSVJfaTJjIHsKKwlJUl9LRVlUQUJfVFlQRSAgICAgICAgICppcl9jb2RlczsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgIGM7CisJc3RydWN0IGlucHV0X2RldiAgICAgICAqaW5wdXQ7CisJc3RydWN0IGlyX2lucHV0X3N0YXRlICBpcjsKKworCS8qIFVzZWQgdG8gYXZvaWQgZmFzdCByZXBlYXRpbmcgKi8KKwl1bnNpZ25lZCBjaGFyICAgICAgICAgIG9sZDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHRpbWVyOworCWNoYXIgICAgICAgICAgICAgICAgICAgcGh5c1szMl07CisJaW50ICAgICAgICAgICAgICAgICAgICAoKmdldF9rZXkpKHN0cnVjdCBJUl9pMmMqLCB1MzIqLCB1MzIqKTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKaW5kZXggZjNhYTI0Zi4uNjQ2OTE3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fU0FBNzE0Nl9WVl9fCiAjZGVmaW5lIF9fU0FBNzE0Nl9WVl9fCiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc2FhNzE0Ni5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IDRhZDA4ZTIuLjkxODRlNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTk1LDcgKzk1LDcgQEAKICNkZWZpbmUgVFVORVJfVEhPTVNPTl9EVFQ3NjEwCQk1MgogI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZRMTI4NgkJNTMKICNkZWZpbmUgVFVORVJfUEhJTElQU19UREE4MjkwCQk1NAotI2RlZmluZSBUVU5FUl9MR19QQUxfVEFQRQkJNTUJLyogSGF1cHBhdWdlIFBWUi0xNTAgUEFMICovCisjZGVmaW5lIFRVTkVSX1RDTF8yMDAyTUIJCTU1CS8qIEhhdXBwYXVnZSBQVlItMTUwIFBBTCAqLwogCiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfRlExMjE2QU1FX01LNAk1NgkvKiBIYXVwcGF1Z2UgUFZSLTE1MCBQQUwgKi8KICNkZWZpbmUgVFVORVJfUEhJTElQU19GUTEyMzZBX01LNAk1NwkvKiBIYXVwcGF1Z2UgUFZSLTUwME1DRSBOVFNDICovCkBAIC0xMTAsNiArMTEwLDkgQEAKICNkZWZpbmUgVFVORVJfTEdfVERWU19IMDYyRgkJNjQJLyogRFZpQ08gRnVzaW9uSERUViA1ICovCiAjZGVmaW5lIFRVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRgk2NQkvKiBBY29ycCBZODc4RiAqLwogI2RlZmluZSBUVU5FUl9MR19OVFNDX1RBTE5fTUlOSQkJNjYKKyNkZWZpbmUgVFVORVJfUEhJTElQU19URDEzMTYJCTY3CisKKyNkZWZpbmUgVFVORVJfUEhJTElQU19UVVYxMjM2RAkJNjgJLyogQVRJIEhEVFYgV29uZGVyICovCiAKICNkZWZpbmUgTk9UVU5FUiAwCiAjZGVmaW5lIFBBTCAgICAgMQkvKiBQQUxfQkcgKi8KQEAgLTE0NSw2ICsxNDgsNyBAQAogIyBkZWZpbmUgVERBOTg4N19JTlRFUkNBUlJJRVIgICAgICAgICgxPDw0KQogIyBkZWZpbmUgVERBOTg4N19QT1JUMV9BQ1RJVkUgICAgICAgICgxPDw1KQogIyBkZWZpbmUgVERBOTg4N19QT1JUMl9BQ1RJVkUgICAgICAgICgxPDw2KQorIyBkZWZpbmUgVERBOTg4N19JTlRFUkNBUlJJRVJfTlRTQyAgICgxPDw3KQogLyogY29uZmlnIG9wdGlvbnMgKi8KICMgZGVmaW5lIFREQTk4ODdfREVFTVBIQVNJU19NQVNLICAgICAoMzw8MTYpCiAjIGRlZmluZSBUREE5ODg3X0RFRU1QSEFTSVNfTk9ORSAgICAgKDE8PDE2KQpAQCAtMTg4LDggKzE5MiwxMSBAQAogCXVuc2lnbmVkIGludCByYWRpb19pZjI7CiAKIAkvKiB1c2VkIGJ5IHRkYTgyOTAgKi8KLQl1bnNpZ25lZCBjaGFyIGkyY19lYXN5X21vZGVbMl07Ci0JdW5zaWduZWQgY2hhciBpMmNfc2V0X2ZyZXFbOF07CisJdW5zaWduZWQgY2hhciB0ZGE4MjkwX2Vhc3lfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIHRkYTgyN3hfbHBzZWw7CisJdW5zaWduZWQgY2hhciB0ZGE4Mjd4X2FkZHI7CisJdW5zaWduZWQgY2hhciB0ZGE4Mjd4X3ZlcjsKKwl1bnNpZ25lZCBpbnQgc2dJRjsKIAogCS8qIGZ1bmN0aW9uIHB0cnMgKi8KIAl2b2lkICgqdHZfZnJlcSkoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKTsKQEAgLTIwNCwyMCArMjExLDIxIEBACiAKIGV4dGVybiBpbnQgbWljcm90dW5lX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpOwogZXh0ZXJuIGludCB0ZGE4MjkwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpOworZXh0ZXJuIGludCB0ZGE4MjkwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIGV4dGVybiBpbnQgdGVhNTc2N190dW5lcl9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIGV4dGVybiBpbnQgZGVmYXVsdF90dW5lcl9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIGV4dGVybiBpbnQgdGVhNTc2N19hdXRvZGV0ZWN0aW9uKHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIAogI2RlZmluZSB0dW5lcl93YXJuKGZtdCwgYXJnLi4uKSBkbyB7XAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICVkLSUwNHg6ICIgZm10LCB0LT5pMmMuZHJpdmVyLT5uYW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICB0LT5pMmMuYWRhcHRlci0+bnIsIHQtPmkyYy5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCQkJdC0+aTJjLmFkYXB0ZXItPm5yLCB0LT5pMmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdHVuZXJfaW5mbyhmbXQsIGFyZy4uLikgZG8ge1wKIAlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+aTJjLmRyaXZlci0+bmFtZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgdC0+aTJjLmFkYXB0ZXItPm5yLCB0LT5pMmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwkJCXQtPmkyYy5hZGFwdGVyLT5uciwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHR1bmVyX2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAodHVuZXJfZGVidWcpIFwKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXMgJWQtJTA0eDogIiBmbXQsIHQtPmkyYy5kcml2ZXItPm5hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHQtPmkyYy5hZGFwdGVyLT5uciwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+aTJjLmRyaXZlci0+bmFtZSwgXAorCQkJdC0+aTJjLmFkYXB0ZXItPm5yLCB0LT5pMmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLmgKaW5kZXggYWU4ZDdhMC4uOGVjZmQ3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfTsKIAogc3RydWN0IHZpZGVvYnVmX3F1ZXVlIHsKLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICAgICBsb2NrOwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICppcnFsb2NrOwogCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpwY2k7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKaW5kZXggNWUzOGRjYS4uYjkzZmQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogQVJSQVlfU0laRSAqLwogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKLSNkZWZpbmUgSUVFRTgwMjExX1ZFUlNJT04gImdpdC0xLjEuNiIKKyNkZWZpbmUgSUVFRTgwMjExX1ZFUlNJT04gImdpdC0xLjEuNyIKIAogI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKIC8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX2NyeXB0LmgKaW5kZXggMGExYzJkOC4uMjI1ZmM3NTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oCkBAIC0zMSw2ICszMSw3IEBACiAKIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyB7CiAJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAkvKiBpbml0IG5ldyBjcnlwdG8gY29udGV4dCAoZS5nLiwgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHNwYWNlLAogCSAqIHNlbGVjdCBJViwgZXRjLik7IHJldHVybnMgTlVMTCBvbiBmYWlsdXJlIG9yIHBvaW50ZXIgdG8gYWxsb2NhdGVkCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGYxNDJkNDAuLjI3Zjk3ZjkgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0zOTQsMTQgKzM5NCwxNiBAQAogCWtlcm5lbF90aHJlYWQoaW5pdCwgTlVMTCwgQ0xPTkVfRlMgfCBDTE9ORV9TSUdIQU5EKTsKIAludW1hX2RlZmF1bHRfcG9saWN5KCk7CiAJdW5sb2NrX2tlcm5lbCgpOwotCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAogCS8qCiAJICogVGhlIGJvb3QgaWRsZSB0aHJlYWQgbXVzdCBleGVjdXRlIHNjaGVkdWxlKCkKIAkgKiBhdCBsZWFzdCBvbmUgdG8gZ2V0IHRoaW5ncyBtb3Zpbmc6CiAJICovCisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCXNjaGVkdWxlKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAKKwkvKiBDYWxsIGludG8gY3B1X2lkbGUgd2l0aCBwcmVlbXB0IGRpc2FibGVkICovCiAJY3B1X2lkbGUoKTsKIH0gCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCAzNjE5ZTkzLi5kNjFiYTg4IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0yMSw2ICsyMSwyNCBAQAogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpjcHVfY2hhaW47CiAKKy8qCisgKiBVc2VkIHRvIGNoZWNrIGJ5IGNhbGxlcnMgaWYgdGhleSBuZWVkIHRvIGFjcXVpcmUgdGhlIGNwdWNvbnRyb2wKKyAqIG9yIG5vdCB0byBwcm90ZWN0IGEgY3B1IGZyb20gYmVpbmcgcmVtb3ZlZC4gSXRzIHNvbWV0aW1lcyByZXF1aXJlZCB0bworICogY2FsbCB0aGVzZSBmdW5jdGlvbnMgYm90aCBmb3Igbm9ybWFsIG9wZXJhdGlvbnMsIGFuZCBpbiByZXNwb25zZSB0bworICogYSBjcHUgYmVpbmcgYWRkZWQvcmVtb3ZlZC4gSWYgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGwgaXMgaW4gdGhlIHNhbWUKKyAqIHRocmVhZCBjb250ZXh0IGFzIGEgQ1BVIGhvdHBsdWcgdGhyZWFkLCB3ZSBkb250IG5lZWQgdG8gdGFrZSB0aGUgbG9jaworICogc2luY2UgaXRzIGFscmVhZHkgcHJvdGVjdGVkCisgKiBjaGVjayBkcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGZvciBpdHMgdXNhZ2UgLSBBc2hvayBSYWoKKyAqLworCitpbnQgY3VycmVudF9pbl9jcHVfaG90cGx1Zyh2b2lkKQoreworCXJldHVybiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9IT1RQTFVHX0NQVSk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaW5fY3B1X2hvdHBsdWcpOworCisKIC8qIE5lZWQgdG8ga25vdyBhYm91dCBDUFVzIGdvaW5nIHVwL2Rvd24/ICovCiBpbnQgcmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7CkBAIC05NCw2ICsxMTIsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBMZWF2ZSBhIHRyYWNlIGluIGN1cnJlbnQtPmZsYWdzIGluZGljYXRpbmcgd2UgYXJlIGFscmVhZHkgaW4KKwkgKiBwcm9jZXNzIG9mIHBlcmZvcm1pbmcgQ1BVIGhvdHBsdWcuIENhbGxlcnMgY2FuIGNoZWNrIGlmIGNwdWNvbnRyb2wKKwkgKiBpcyBhbHJlYWR5IGFjcXVpcmVkIGJ5IGN1cnJlbnQgdGhyZWFkLCBhbmQgaWYgc28gbm90IGNhdXNlCisJICogYSBkZWFkIGxvY2sgYnkgbm90IGFjcXVpcmluZyB0aGUgbG9jaworCSAqLworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0hPVFBMVUdfQ1BVOwogCWVyciA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fUFJFUEFSRSwKIAkJCQkJCSh2b2lkICopKGxvbmcpY3B1KTsKIAlpZiAoZXJyID09IE5PVElGWV9CQUQpIHsKQEAgLTE0Niw2ICsxNzEsNyBAQAogb3V0X2FsbG93ZWQ6CiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRfYWxsb3dlZCk7CiBvdXQ6CisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX0hPVFBMVUdfQ1BVOwogCXVubG9ja19jcHVfaG90cGx1ZygpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNjMsNiArMTg5LDEyIEBACiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KKworCS8qCisJICogTGVhdmUgYSB0cmFjZSBpbiBjdXJyZW50LT5mbGFncyBpbmRpY2F0aW5nIHdlIGFyZSBhbHJlYWR5IGluCisJICogcHJvY2VzcyBvZiBwZXJmb3JtaW5nIENQVSBob3RwbHVnLgorCSAqLworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0hPVFBMVUdfQ1BVOwogCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX1VQX1BSRVBBUkUsIGhjcHUpOwogCWlmIChyZXQgPT0gTk9USUZZX0JBRCkgewogCQlwcmludGsoIiVzOiBhdHRlbXB0IHRvIGJyaW5nIHVwIENQVSAldSBmYWlsZWRcbiIsCkBAIC0xODUsNiArMjE3LDcgQEAKIAlpZiAocmV0ICE9IDApCiAJCW5vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX1VQX0NBTkNFTEVELCBoY3B1KTsKIG91dDoKKwljdXJyZW50LT5mbGFncyAmPSB+UEZfSE9UUExVR19DUFU7CiAJdXAoJmNwdWNvbnRyb2wpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCAxOGQ3ZDY5Li42ZWUyY2FkIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChwbV9vcHMtPnZhbGlkICYmICFwbV9vcHMtPnZhbGlkKHN0YXRlKSkKKwlpZiAocG1fb3BzICYmIHBtX29wcy0+dmFsaWQgJiYgIXBtX29wcy0+dmFsaWQoc3RhdGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoZG93bl90cnlsb2NrKCZwbV9zZW0pKQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2VyLmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCBkNGZkOTZhLi42YzA0MmI1IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAtNjUsOCArNjUsOCBAQAogZXh0ZXJuIGFzbWxpbmthZ2UgaW50IHN3c3VzcF9hcmNoX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSBpbnQgc3dzdXNwX2FyY2hfcmVzdW1lKHZvaWQpOwogCi1leHRlcm4gaW50IHJlc3RvcmVfaGlnaG1lbSh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgcGJlICogYWxsb2NfcGFnZWRpcih1bnNpZ25lZCBucl9wYWdlcyk7CitleHRlcm4gdm9pZCBmcmVlX3BhZ2VkaXIoc3RydWN0IHBiZSAqcGJsaXN0KTsKK2V4dGVybiBzdHJ1Y3QgcGJlICphbGxvY19wYWdlZGlyKHVuc2lnbmVkIG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaywgaW50IHNhZmVfbmVlZGVkKTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9wYmVfbGlzdChzdHJ1Y3QgcGJlICpwYmxpc3QsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKIGV4dGVybiB2b2lkIHN3c3VzcF9mcmVlKHZvaWQpOwotZXh0ZXJuIGludCBlbm91Z2hfc3dhcCh1bnNpZ25lZCBucl9wYWdlcyk7CitleHRlcm4gaW50IGFsbG9jX2RhdGFfcGFnZXMoc3RydWN0IHBiZSAqcGJsaXN0LCBnZnBfdCBnZnBfbWFzaywgaW50IHNhZmVfbmVlZGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggNzIzZjUxNy4uNGE2ZGJjZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTg4LDggKzg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IHNhdmVfaGlnaG1lbSh2b2lkKQoraW50IHNhdmVfaGlnaG1lbSh2b2lkKQogewogCXN0cnVjdCB6b25lICp6b25lOwogCWludCByZXMgPSAwOwpAQCAtMTIwLDExICsxMTksNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi1zdGF0aWMgaW50IHNhdmVfaGlnaG1lbSh2b2lkKSB7IHJldHVybiAwOyB9Ci1pbnQgcmVzdG9yZV9oaWdobWVtKHZvaWQpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwotCisjZW5kaWYKIAogc3RhdGljIGludCBwZm5faXNfbm9zYXZlKHVuc2lnbmVkIGxvbmcgcGZuKQogewpAQCAtMjE2LDcgKzIxMSw3IEBACiAgKglmcmVlX3BhZ2VkaXIgLSBmcmVlIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIGFsbG9jX3BhZ2VkaXIoKQogICovCiAKLXN0YXRpYyB2b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QpCit2b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QpCiB7CiAJc3RydWN0IHBiZSAqcGJlOwogCkBAIC0yNjksOSArMjY0LDMwIEBACiAJcHJfZGVidWcoImNyZWF0ZV9wYmVfbGlzdCgpOiBpbml0aWFsaXplZCAlZCBQQkVzXG4iLCBudW0pOwogfQogCi1zdGF0aWMgdm9pZCAqYWxsb2NfaW1hZ2VfcGFnZSh2b2lkKQorLyoqCisgKglAc2FmZV9uZWVkZWQgLSBvbiByZXN1bWUsIGZvciBzdG9yaW5nIHRoZSBQQkUgbGlzdCBhbmQgdGhlIGltYWdlLAorICoJd2UgY2FuIG9ubHkgdXNlIG1lbW9yeSBwYWdlcyB0aGF0IGRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBwYWdlcworICoJd2hpY2ggaGFkIGJlZW4gdXNlZCBiZWZvcmUgc3VzcGVuZC4KKyAqCisgKglUaGUgdW5zYWZlIHBhZ2VzIGFyZSBtYXJrZWQgd2l0aCB0aGUgUEdfbm9zYXZlX2ZyZWUgZmxhZworICoKKyAqCUFsbG9jYXRlZCBidXQgdW51c2FibGUgKGllIGVhdGVuKSBtZW1vcnkgcGFnZXMgc2hvdWxkIGJlIG1hcmtlZAorICoJc28gdGhhdCBzd3N1c3BfZnJlZSgpIGNhbiByZWxlYXNlIHRoZW0KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKmFsbG9jX2ltYWdlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2ssIGludCBzYWZlX25lZWRlZCkKIHsKLQl2b2lkICpyZXMgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfQ09MRCk7CisJdm9pZCAqcmVzOworCisJaWYgKHNhZmVfbmVlZGVkKQorCQlkbyB7CisJCQlyZXMgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShnZnBfbWFzayk7CisJCQlpZiAocmVzICYmIFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShyZXMpKSkKKwkJCQkvKiBUaGlzIGlzIGZvciBzd3N1c3BfZnJlZSgpICovCisJCQkJU2V0UGFnZU5vc2F2ZSh2aXJ0X3RvX3BhZ2UocmVzKSk7CisJCX0gd2hpbGUgKHJlcyAmJiBQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UocmVzKSkpOworCWVsc2UKKwkJcmVzID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoZ2ZwX21hc2spOwogCWlmIChyZXMpIHsKIAkJU2V0UGFnZU5vc2F2ZSh2aXJ0X3RvX3BhZ2UocmVzKSk7CiAJCVNldFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShyZXMpKTsKQEAgLTI3OSw2ICsyOTUsMTEgQEAKIAlyZXR1cm4gcmVzOwogfQogCit1bnNpZ25lZCBsb25nIGdldF9zYWZlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFsbG9jX2ltYWdlX3BhZ2UoZ2ZwX21hc2ssIDEpOworfQorCiAvKioKICAqCWFsbG9jX3BhZ2VkaXIgLSBBbGxvY2F0ZSB0aGUgcGFnZSBkaXJlY3RvcnkuCiAgKgpAQCAtMjkyLDcgKzMxMyw3IEBACiAgKglPbiBlYWNoIHBhZ2Ugd2Ugc2V0IHVwIGEgbGlzdCBvZiBzdHJ1Y3RfcGJlIGVsZW1lbnRzLgogICovCiAKLXN0cnVjdCBwYmUgKmFsbG9jX3BhZ2VkaXIodW5zaWduZWQgaW50IG5yX3BhZ2VzKQorc3RydWN0IHBiZSAqYWxsb2NfcGFnZWRpcih1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrLCBpbnQgc2FmZV9uZWVkZWQpCiB7CiAJdW5zaWduZWQgaW50IG51bTsKIAlzdHJ1Y3QgcGJlICpwYmxpc3QsICpwYmU7CkBAIC0zMDEsMTIgKzMyMiwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXByX2RlYnVnKCJhbGxvY19wYWdlZGlyKCk6IG5yX3BhZ2VzID0gJWRcbiIsIG5yX3BhZ2VzKTsKLQlwYmxpc3QgPSBhbGxvY19pbWFnZV9wYWdlKCk7CisJcGJsaXN0ID0gYWxsb2NfaW1hZ2VfcGFnZShnZnBfbWFzaywgc2FmZV9uZWVkZWQpOwogCS8qIEZJWE1FOiByZXdyaXRlIHRoaXMgdWdseSBsb29wICovCiAJZm9yIChwYmUgPSBwYmxpc3QsIG51bSA9IFBCRVNfUEVSX1BBR0U7IHBiZSAmJiBudW0gPCBucl9wYWdlczsKICAgICAgICAgCQlwYmUgPSBwYmUtPm5leHQsIG51bSArPSBQQkVTX1BFUl9QQUdFKSB7CiAJCXBiZSArPSBQQl9QQUdFX1NLSVA7Ci0JCXBiZS0+bmV4dCA9IGFsbG9jX2ltYWdlX3BhZ2UoKTsKKwkJcGJlLT5uZXh0ID0gYWxsb2NfaW1hZ2VfcGFnZShnZnBfbWFzaywgc2FmZV9uZWVkZWQpOwogCX0KIAlpZiAoIXBiZSkgeyAvKiBnZXRfemVyb2VkX3BhZ2UoKSBmYWlsZWQgKi8KIAkJZnJlZV9wYWdlZGlyKHBibGlzdCk7CkBAIC0zNTQsMjQgKzM3NSwzMiBAQAogCQkobnJfcGFnZXMgKyBQQkVTX1BFUl9QQUdFIC0gMSkgLyBQQkVTX1BFUl9QQUdFKTsKIH0KIAoraW50IGFsbG9jX2RhdGFfcGFnZXMoc3RydWN0IHBiZSAqcGJsaXN0LCBnZnBfdCBnZnBfbWFzaywgaW50IHNhZmVfbmVlZGVkKQoreworCXN0cnVjdCBwYmUgKnA7CisKKwlmb3JfZWFjaF9wYmUgKHAsIHBibGlzdCkgeworCQlwLT5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpYWxsb2NfaW1hZ2VfcGFnZShnZnBfbWFzaywgc2FmZV9uZWVkZWQpOworCQlpZiAoIXAtPmFkZHJlc3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGJlICpzd3N1c3BfYWxsb2ModW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewotCXN0cnVjdCBwYmUgKnBibGlzdCwgKnA7CisJc3RydWN0IHBiZSAqcGJsaXN0OwogCi0JaWYgKCEocGJsaXN0ID0gYWxsb2NfcGFnZWRpcihucl9wYWdlcykpKSB7CisJaWYgKCEocGJsaXN0ID0gYWxsb2NfcGFnZWRpcihucl9wYWdlcywgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTEQsIDApKSkgewogCQlwcmludGsoS0VSTl9FUlIgInN1c3BlbmQ6IEFsbG9jYXRpbmcgcGFnZWRpciBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWNyZWF0ZV9wYmVfbGlzdChwYmxpc3QsIG5yX3BhZ2VzKTsKIAotCWZvcl9lYWNoX3BiZSAocCwgcGJsaXN0KSB7Ci0JCXAtPmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylhbGxvY19pbWFnZV9wYWdlKCk7Ci0JCWlmICghcC0+YWRkcmVzcykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzdXNwZW5kOiBBbGxvY2F0aW5nIGltYWdlIHBhZ2VzIGZhaWxlZC5cbiIpOwotCQkJc3dzdXNwX2ZyZWUoKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CisJaWYgKGFsbG9jX2RhdGFfcGFnZXMocGJsaXN0LCBHRlBfQVRPTUlDIHwgX19HRlBfQ09MRCwgMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzdXNwZW5kOiBBbGxvY2F0aW5nIGltYWdlIHBhZ2VzIGZhaWxlZC5cbiIpOworCQlzd3N1c3BfZnJlZSgpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gcGJsaXN0OwpAQCAtMzgyLDExICs0MTEsNiBAQAogCXVuc2lnbmVkIGludCBucl9wYWdlczsKIAogCXByX2RlYnVnKCJzd3N1c3A6IGNyaXRpY2FsIHNlY3Rpb246IFxuIik7Ci0JaWYgKHNhdmVfaGlnaG1lbSgpKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgInN3c3VzcDogTm90IGVub3VnaCBmcmVlIHBhZ2VzIGZvciBoaWdobWVtXG4iKTsKLQkJcmVzdG9yZV9oaWdobWVtKCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWRyYWluX2xvY2FsX3BhZ2VzKCk7CiAJbnJfcGFnZXMgPSBjb3VudF9kYXRhX3BhZ2VzKCk7CkBAIC00MDYsMTEgKzQzMCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICghZW5vdWdoX3N3YXAobnJfcGFnZXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBOb3QgZW5vdWdoIGZyZWUgc3dhcFxuIik7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQogCXBhZ2VkaXJfbm9zYXZlID0gc3dzdXNwX2FsbG9jKG5yX3BhZ2VzKTsKIAlpZiAoIXBhZ2VkaXJfbm9zYXZlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYyBiL2tlcm5lbC9wb3dlci9zd3N1c3AuYwppbmRleCBlMWFiMjhiLi5jMDVmNDZlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCkBAIC03Myw2ICs3MywxNCBAQAogCiAjaW5jbHVkZSAicG93ZXIuaCIKIAorI2lmZGVmIENPTkZJR19ISUdITUVNCitpbnQgc2F2ZV9oaWdobWVtKHZvaWQpOworaW50IHJlc3RvcmVfaGlnaG1lbSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW50IHNhdmVfaGlnaG1lbSh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW50IHJlc3RvcmVfaGlnaG1lbSh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKwogI2RlZmluZSBDSVBIRVIgImFlcyIKICNkZWZpbmUgTUFYS0VZIDMyCiAjZGVmaW5lIE1BWElWICAzMgpAQCAtNTAwLDYgKzUwOCwyNiBAQAogfQogCiAvKioKKyAqCWVub3VnaF9zd2FwIC0gTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHN3YXAgdG8gc2F2ZSB0aGUgaW1hZ2UuCisgKgorICoJUmV0dXJucyBUUlVFIG9yIEZBTFNFIGFmdGVyIGNoZWNraW5nIHRoZSB0b3RhbCBhbW91bnQgb2Ygc3dhcAorICoJc3BhY2UgYXZhaWFibGUuCisgKgorICoJRklYTUU6IHNpX3N3YXBpbmZvKCZpKSByZXR1cm5zIGFsbCBzd2FwIGRldmljZXMgaW5mb3JtYXRpb24uCisgKglXZSBzaG91bGQgb25seSBjb25zaWRlciByZXN1bWVfZGV2aWNlLgorICovCisKK3N0YXRpYyBpbnQgZW5vdWdoX3N3YXAodW5zaWduZWQgaW50IG5yX3BhZ2VzKQoreworCXN0cnVjdCBzeXNpbmZvIGk7CisKKwlzaV9zd2FwaW5mbygmaSk7CisJcHJfZGVidWcoInN3c3VzcDogYXZhaWxhYmxlIHN3YXA6ICVsdSBwYWdlc1xuIiwgaS5mcmVlc3dhcCk7CisJcmV0dXJuIGkuZnJlZXN3YXAgPiAobnJfcGFnZXMgKyBQQUdFU19GT1JfSU8gKworCQkobnJfcGFnZXMgKyBQQkVTX1BFUl9QQUdFIC0gMSkgLyBQQkVTX1BFUl9QQUdFKTsKK30KKworLyoqCiAgKgl3cml0ZV9zdXNwZW5kX2ltYWdlIC0gV3JpdGUgZW50aXJlIGltYWdlIGFuZCBtZXRhZGF0YS4KICAqCiAgKi8KQEAgLTUwNyw2ICs1MzUsMTEgQEAKIHsKIAlpbnQgZXJyb3I7CiAKKwlpZiAoIWVub3VnaF9zd2FwKG5yX2NvcHlfcGFnZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBOb3QgZW5vdWdoIGZyZWUgc3dhcFxuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwogCWluaXRfaGVhZGVyKCk7CiAJaWYgKChlcnJvciA9IGRhdGFfd3JpdGUoKSkpCiAJCWdvdG8gRnJlZURhdGE7CkBAIC01MjYsMjcgKzU1OSw2IEBACiAJZ290byBEb25lOwogfQogCi0vKioKLSAqCWVub3VnaF9zd2FwIC0gTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHN3YXAgdG8gc2F2ZSB0aGUgaW1hZ2UuCi0gKgotICoJUmV0dXJucyBUUlVFIG9yIEZBTFNFIGFmdGVyIGNoZWNraW5nIHRoZSB0b3RhbCBhbW91bnQgb2Ygc3dhcAotICoJc3BhY2UgYXZhaWFibGUuCi0gKgotICoJRklYTUU6IHNpX3N3YXBpbmZvKCZpKSByZXR1cm5zIGFsbCBzd2FwIGRldmljZXMgaW5mb3JtYXRpb24uCi0gKglXZSBzaG91bGQgb25seSBjb25zaWRlciByZXN1bWVfZGV2aWNlLgotICovCi0KLWludCBlbm91Z2hfc3dhcCh1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCi17Ci0Jc3RydWN0IHN5c2luZm8gaTsKLQotCXNpX3N3YXBpbmZvKCZpKTsKLQlwcl9kZWJ1Zygic3dzdXNwOiBhdmFpbGFibGUgc3dhcDogJWx1IHBhZ2VzXG4iLCBpLmZyZWVzd2FwKTsKLQlyZXR1cm4gaS5mcmVlc3dhcCA+IChucl9wYWdlcyArIFBBR0VTX0ZPUl9JTyArCi0JCShucl9wYWdlcyArIFBCRVNfUEVSX1BBR0UgLSAxKSAvIFBCRVNfUEVSX1BBR0UpOwotfQotCi0KIC8qIEl0IGlzIGltcG9ydGFudCBfTk9UXyB0byB1bW91bnQgZmlsZXN5c3RlbXMgYXQgdGhpcyBwb2ludC4gV2Ugd2FudAogICogdGhlbSBzeW5jZWQgKGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcpIGJ1dCB3ZSBETyBub3Qgd2FudCB0byBtYXJrCiAgKiBmaWxlc3lzdGVtIGNsZWFuOiBpdCBpcyBub3QuIChBbmQgaXQgZG9lcyBub3QgbWF0dGVyLCBpZiB3ZSByZXN1bWUKQEAgLTU1NiwxMiArNTY4LDE1IEBACiB7CiAJaW50IGVycm9yOwogCisJaWYgKChlcnJvciA9IHN3c3VzcF9zd2FwX2NoZWNrKCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBjYW5ub3QgZmluZCBzd2FwIGRldmljZSwgdHJ5IHN3YXBvbiAtYS5cbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQogCWxvY2tfc3dhcGRldmljZXMoKTsKIAllcnJvciA9IHdyaXRlX3N1c3BlbmRfaW1hZ2UoKTsKIAkvKiBUaGlzIHdpbGwgdW5sb2NrIGlnbm9yZWQgc3dhcCBkZXZpY2VzIHNpbmNlIHdyaXRpbmcgaXMgZmluaXNoZWQgKi8KIAlsb2NrX3N3YXBkZXZpY2VzKCk7CiAJcmV0dXJuIGVycm9yOwotCiB9CiAKIApAQCAtNTY5LDYgKzU4NCw3IEBACiBpbnQgc3dzdXNwX3N1c3BlbmQodm9pZCkKIHsKIAlpbnQgZXJyb3I7CisKIAlpZiAoKGVycm9yID0gYXJjaF9wcmVwYXJlX3N1c3BlbmQoKSkpCiAJCXJldHVybiBlcnJvcjsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtNTgwLDE1ICs1OTYsMTIgQEAKIAkgKi8KIAlpZiAoKGVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19GUkVFWkUpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgYWJvcnRpbmcgc3VzcGVuZFxuIik7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIEVuYWJsZV9pcnFzOwogCX0KIAotCWlmICgoZXJyb3IgPSBzd3N1c3Bfc3dhcF9jaGVjaygpKSkgewotCQlwcmludGsoS0VSTl9FUlIgInN3c3VzcDogY2Fubm90IGZpbmQgc3dhcCBkZXZpY2UsIHRyeSBzd2Fwb24gLWEuXG4iKTsKLQkJZGV2aWNlX3Bvd2VyX3VwKCk7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJcmV0dXJuIGVycm9yOworCWlmICgoZXJyb3IgPSBzYXZlX2hpZ2htZW0oKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzd3N1c3A6IE5vdCBlbm91Z2ggZnJlZSBwYWdlcyBmb3IgaGlnaG1lbVxuIik7CisJCWdvdG8gUmVzdG9yZV9oaWdobWVtOwogCX0KIAogCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CkBAIC01OTYsOCArNjA5LDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgc3VzcGVuZGluZ1xuIiwgZXJyb3IpOwogCS8qIFJlc3RvcmUgY29udHJvbCBmbG93IG1hZ2ljYWxseSBhcHBlYXJzIGhlcmUgKi8KIAlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOworUmVzdG9yZV9oaWdobWVtOgogCXJlc3RvcmVfaGlnaG1lbSgpOwogCWRldmljZV9wb3dlcl91cCgpOworRW5hYmxlX2lycXM6CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTYyOSwxMjcgKzY0NCw0MyBAQAogfQogCiAvKioKLSAqCU9uIHJlc3VtZSwgZm9yIHN0b3JpbmcgdGhlIFBCRSBsaXN0IGFuZCB0aGUgaW1hZ2UsCi0gKgl3ZSBjYW4gb25seSB1c2UgbWVtb3J5IHBhZ2VzIHRoYXQgZG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIHBhZ2VzCi0gKgl3aGljaCBoYWQgYmVlbiB1c2VkIGJlZm9yZSBzdXNwZW5kLgotICoKLSAqCVdlIGRvbid0IGtub3cgd2hpY2ggcGFnZXMgYXJlIHVzYWJsZSB1bnRpbCB3ZSBhbGxvY2F0ZSB0aGVtLgotICoKLSAqCUFsbG9jYXRlZCBidXQgdW51c2FibGUgKGllIGVhdGVuKSBtZW1vcnkgcGFnZXMgYXJlIG1hcmtlZCBzbyB0aGF0Ci0gKglzd3N1c3BfZnJlZSgpIGNhbiByZWxlYXNlIHRoZW0KKyAqCW1hcmtfdW5zYWZlX3BhZ2VzIC0gbWFyayB0aGUgcGFnZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCBmb3Igc3RvcmluZworICoJdGhlIGltYWdlIGR1cmluZyByZXN1bWUsIGJlY2F1c2UgdGhleSBjb25mbGljdCB3aXRoIHRoZSBwYWdlcyB0aGF0CisgKgloYWQgYmVlbiB1c2VkIGJlZm9yZSBzdXNwZW5kCiAgKi8KIAotdW5zaWduZWQgbG9uZyBnZXRfc2FmZV9wYWdlKGdmcF90IGdmcF9tYXNrKQotewotCXVuc2lnbmVkIGxvbmcgbTsKLQotCWRvIHsKLQkJbSA9IGdldF96ZXJvZWRfcGFnZShnZnBfbWFzayk7Ci0JCWlmIChtICYmIFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShtKSkpCi0JCQkvKiBUaGlzIGlzIGZvciBzd3N1c3BfZnJlZSgpICovCi0JCQlTZXRQYWdlTm9zYXZlKHZpcnRfdG9fcGFnZShtKSk7Ci0JfSB3aGlsZSAobSAmJiBQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UobSkpKTsKLQlpZiAobSkgewotCQkvKiBUaGlzIGlzIGZvciBzd3N1c3BfZnJlZSgpICovCi0JCVNldFBhZ2VOb3NhdmUodmlydF90b19wYWdlKG0pKTsKLQkJU2V0UGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKG0pKTsKLQl9Ci0JcmV0dXJuIG07Ci19Ci0KLS8qKgotICoJY2hlY2tfcGFnZWRpciAtIFdlIGVuc3VyZSBoZXJlIHRoYXQgcGFnZXMgdGhhdCB0aGUgUEJFcyBwb2ludCB0bwotICoJd29uJ3QgY29sbGlkZSB3aXRoIHBhZ2VzIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIHJlc3RvcmUgZnJvbSB0aGUgbG9hZGVkCi0gKglwYWdlcyBsYXRlcgotICovCi0KLXN0YXRpYyBpbnQgY2hlY2tfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QpCi17Ci0Jc3RydWN0IHBiZSAqcDsKLQotCS8qIFRoaXMgaXMgbmVjZXNzYXJ5LCBzbyB0aGF0IHdlIGNhbiBmcmVlIGFsbG9jYXRlZCBwYWdlcwotCSAqIGluIGNhc2Ugb2YgZmFpbHVyZQotCSAqLwotCWZvcl9lYWNoX3BiZSAocCwgcGJsaXN0KQotCQlwLT5hZGRyZXNzID0gMFVMOwotCi0JZm9yX2VhY2hfcGJlIChwLCBwYmxpc3QpIHsKLQkJcC0+YWRkcmVzcyA9IGdldF9zYWZlX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCWlmICghcC0+YWRkcmVzcykKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKglzd3N1c3BfcGFnZWRpcl9yZWxvY2F0ZSAtIEl0IGlzIHBvc3NpYmxlLCB0aGF0IHNvbWUgbWVtb3J5IHBhZ2VzCi0gKglvY2N1cGllZCBieSB0aGUgbGlzdCBvZiBQQkVzIGNvbGxpZGUgd2l0aCBwYWdlcyB3aGVyZSB3ZSdyZSBnb2luZyB0bwotICoJcmVzdG9yZSBmcm9tIHRoZSBsb2FkZWQgcGFnZXMgbGF0ZXIuICBXZSByZWxvY2F0ZSB0aGVtIGhlcmUuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwYmUgKnN3c3VzcF9wYWdlZGlyX3JlbG9jYXRlKHN0cnVjdCBwYmUgKnBibGlzdCkKK3N0YXRpYyB2b2lkIG1hcmtfdW5zYWZlX3BhZ2VzKHN0cnVjdCBwYmUgKnBibGlzdCkKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAl1bnNpZ25lZCBsb25nIHpvbmVfcGZuOwotCXN0cnVjdCBwYmUgKnBicGFnZSwgKnRhaWwsICpwOwotCXZvaWQgKm07Ci0JaW50IHJlbCA9IDA7CisJc3RydWN0IHBiZSAqcDsKIAogCWlmICghcGJsaXN0KSAvKiBhIHNhbml0eSBjaGVjayAqLwotCQlyZXR1cm4gTlVMTDsKLQotCXByX2RlYnVnKCJzd3N1c3A6IFJlbG9jYXRpbmcgcGFnZWRpciAoJWx1IHBhZ2VzIHRvIGNoZWNrKVxuIiwKLQkJCXN3c3VzcF9pbmZvLnBhZ2VkaXJfcGFnZXMpOworCQlyZXR1cm47CiAKIAkvKiBDbGVhciBwYWdlIGZsYWdzICovCi0KIAlmb3JfZWFjaF96b25lICh6b25lKSB7Ci0gICAgICAgIAlmb3IgKHpvbmVfcGZuID0gMDsgem9uZV9wZm4gPCB6b25lLT5zcGFubmVkX3BhZ2VzOyArK3pvbmVfcGZuKQotICAgICAgICAJCWlmIChwZm5fdmFsaWQoem9uZV9wZm4gKyB6b25lLT56b25lX3N0YXJ0X3BmbikpCi0gICAgICAgICAgICAgICAgCQlDbGVhclBhZ2VOb3NhdmVGcmVlKHBmbl90b19wYWdlKHpvbmVfcGZuICsKKwkJZm9yICh6b25lX3BmbiA9IDA7IHpvbmVfcGZuIDwgem9uZS0+c3Bhbm5lZF9wYWdlczsgKyt6b25lX3BmbikKKwkJCWlmIChwZm5fdmFsaWQoem9uZV9wZm4gKyB6b25lLT56b25lX3N0YXJ0X3BmbikpCisJCQkJQ2xlYXJQYWdlTm9zYXZlRnJlZShwZm5fdG9fcGFnZSh6b25lX3BmbiArCiAJCQkJCXpvbmUtPnpvbmVfc3RhcnRfcGZuKSk7CiAJfQogCiAJLyogTWFyayBvcmlnIGFkZHJlc3NlcyAqLwotCiAJZm9yX2VhY2hfcGJlIChwLCBwYmxpc3QpCiAJCVNldFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShwLT5vcmlnX2FkZHJlc3MpKTsKIAotCXRhaWwgPSBwYmxpc3QgKyBQQl9QQUdFX1NLSVA7Cit9CiAKLQkvKiBSZWxvY2F0ZSBjb2xsaWRpbmcgcGFnZXMgKi8KLQotCWZvcl9lYWNoX3BiX3BhZ2UgKHBicGFnZSwgcGJsaXN0KSB7Ci0JCWlmIChQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGJwYWdlKSkpIHsKLQkJCW0gPSAodm9pZCAqKWdldF9zYWZlX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTEQpOwotCQkJaWYgKCFtKQotCQkJCXJldHVybiBOVUxMOwotCQkJbWVtY3B5KG0sICh2b2lkICopcGJwYWdlLCBQQUdFX1NJWkUpOwotCQkJaWYgKHBicGFnZSA9PSBwYmxpc3QpCi0JCQkJcGJsaXN0ID0gKHN0cnVjdCBwYmUgKiltOwotCQkJZWxzZQotCQkJCXRhaWwtPm5leHQgPSAoc3RydWN0IHBiZSAqKW07Ci0JCQlwYnBhZ2UgPSAoc3RydWN0IHBiZSAqKW07Ci0KLQkJCS8qIFdlIGhhdmUgdG8gbGluayB0aGUgUEJFcyBhZ2FpbiAqLwotCQkJZm9yIChwID0gcGJwYWdlOyBwIDwgcGJwYWdlICsgUEJfUEFHRV9TS0lQOyBwKyspCi0JCQkJaWYgKHAtPm5leHQpIC8qIG5lZWRlZCB0byBzYXZlIHRoZSBlbmQgKi8KLQkJCQkJcC0+bmV4dCA9IHAgKyAxOwotCi0JCQlyZWwrKzsKLQkJfQotCQl0YWlsID0gcGJwYWdlICsgUEJfUEFHRV9TS0lQOworc3RhdGljIHZvaWQgY29weV9wYWdlX2JhY2t1cF9saXN0KHN0cnVjdCBwYmUgKmRzdCwgc3RydWN0IHBiZSAqc3JjKQoreworCS8qIFdlIGFzc3VtZSBib3RoIGxpc3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzICovCisJd2hpbGUgKHNyYykgeworCQlkc3QtPm9yaWdfYWRkcmVzcyA9IHNyYy0+b3JpZ19hZGRyZXNzOworCQlkc3QtPnN3YXBfYWRkcmVzcyA9IHNyYy0+c3dhcF9hZGRyZXNzOworCQlkc3QgPSBkc3QtPm5leHQ7CisJCXNyYyA9IHNyYy0+bmV4dDsKIAl9Ci0KLQkvKiBUaGlzIGlzIGZvciBzd3N1c3BfZnJlZSgpICovCi0JZm9yX2VhY2hfcGJfcGFnZSAocGJwYWdlLCBwYmxpc3QpIHsKLQkJU2V0UGFnZU5vc2F2ZSh2aXJ0X3RvX3BhZ2UocGJwYWdlKSk7Ci0JCVNldFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShwYnBhZ2UpKTsKLQl9Ci0KLQlwcmludGsoInN3c3VzcDogUmVsb2NhdGVkICVkIHBhZ2VzXG4iLCByZWwpOwotCi0JcmV0dXJuIHBibGlzdDsKIH0KIAogLyoKQEAgLTg4OCw3ICs4MTksNyBAQAogCQkgKiBSZXNldCBzd2FwIHNpZ25hdHVyZSBub3cuCiAJCSAqLwogCQllcnJvciA9IGJpb193cml0ZV9wYWdlKDAsICZzd3N1c3BfaGVhZGVyKTsKLQl9IGVsc2UgeyAKKwl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFlcnJvcikKQEAgLTk5MCwyMCArOTIxLDI1IEBACiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgcGJlICpwOwogCi0JaWYgKCEocCA9IGFsbG9jX3BhZ2VkaXIobnJfY29weV9wYWdlcykpKQorCWlmICghKHAgPSBhbGxvY19wYWdlZGlyKG5yX2NvcHlfcGFnZXMsIEdGUF9BVE9NSUMsIDApKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoKGVycm9yID0gcmVhZF9wYWdlZGlyKHApKSkKIAkJcmV0dXJuIGVycm9yOwotCiAJY3JlYXRlX3BiZV9saXN0KHAsIG5yX2NvcHlfcGFnZXMpOwotCi0JaWYgKCEocGFnZWRpcl9ub3NhdmUgPSBzd3N1c3BfcGFnZWRpcl9yZWxvY2F0ZShwKSkpCisJbWFya191bnNhZmVfcGFnZXMocCk7CisJcGFnZWRpcl9ub3NhdmUgPSBhbGxvY19wYWdlZGlyKG5yX2NvcHlfcGFnZXMsIEdGUF9BVE9NSUMsIDEpOworCWlmIChwYWdlZGlyX25vc2F2ZSkgeworCQljcmVhdGVfcGJlX2xpc3QocGFnZWRpcl9ub3NhdmUsIG5yX2NvcHlfcGFnZXMpOworCQljb3B5X3BhZ2VfYmFja3VwX2xpc3QocGFnZWRpcl9ub3NhdmUsIHApOworCX0KKwlmcmVlX3BhZ2VkaXIocCk7CisJaWYgKCFwYWdlZGlyX25vc2F2ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbWFnZSBhbmQgcmVhZCB0aGUgZGF0YSBmcm9tIHN3YXAgKi8KIAotCWVycm9yID0gY2hlY2tfcGFnZWRpcihwYWdlZGlyX25vc2F2ZSk7CisJZXJyb3IgPSBhbGxvY19kYXRhX3BhZ2VzKHBhZ2VkaXJfbm9zYXZlLCBHRlBfQVRPTUlDLCAxKTsKIAogCWlmICghZXJyb3IpCiAJCWVycm9yID0gZGF0YV9yZWFkKHBhZ2VkaXJfbm9zYXZlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCA1YjhkZDk4Li5iODhkNDE4IDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAlyZXR2YWwgPSAtRVBFUk07CiAJaWYgKHRhc2stPnBpZCA8PSAxKQogCQlnb3RvIGJhZDsKLQlpZiAodGFzayA9PSBjdXJyZW50KQorCWlmICh0YXNrLT50Z2lkID09IGN1cnJlbnQtPnRnaWQpCiAJCWdvdG8gYmFkOwogCS8qIHRoZSBzYW1lIHByb2Nlc3MgY2Fubm90IGJlIGF0dGFjaGVkIG1hbnkgdGltZXMgKi8KIAlpZiAodGFzay0+cHRyYWNlICYgUFRfUFRSQUNFRCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggM2NlMjY5NS4uYWMzZjVjYyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogCSAqLwogCXVuc2lnbmVkIGxvbmcgbnJfcnVubmluZzsKICNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyBwcmlvX2JpYXM7CiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFszXTsKICNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbG9uZyBucl9zd2l0Y2hlczsKQEAgLTY1OSwxMyArNjYwLDY4IEBACiAJcmV0dXJuIHByaW87CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3ByaW9fYmlhcyhydW5xdWV1ZV90ICpycSwgaW50IHByaW8pCit7CisJcnEtPnByaW9fYmlhcyArPSBNQVhfUFJJTyAtIHByaW87Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfcHJpb19iaWFzKHJ1bnF1ZXVlX3QgKnJxLCBpbnQgcHJpbykKK3sKKwlycS0+cHJpb19iaWFzIC09IE1BWF9QUklPIC0gcHJpbzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluY19ucl9ydW5uaW5nKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCit7CisJcnEtPm5yX3J1bm5pbmcrKzsKKwlpZiAocnRfdGFzayhwKSkgeworCQlpZiAocCAhPSBycS0+bWlncmF0aW9uX3RocmVhZCkKKwkJCS8qCisJCQkgKiBUaGUgbWlncmF0aW9uIHRocmVhZCBkb2VzIHRoZSBhY3R1YWwgYmFsYW5jaW5nLiBEbworCQkJICogbm90IGJpYXMgYnkgaXRzIHByaW9yaXR5IGFzIHRoZSB1bHRyYSBoaWdoIHByaW9yaXR5CisJCQkgKiB3aWxsIHNrZXcgYmFsYW5jaW5nIGFkdmVyc2VseS4KKwkJCSAqLworCQkJaW5jX3ByaW9fYmlhcyhycSwgcC0+cHJpbyk7CisJfSBlbHNlCisJCWluY19wcmlvX2JpYXMocnEsIHAtPnN0YXRpY19wcmlvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY19ucl9ydW5uaW5nKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCit7CisJcnEtPm5yX3J1bm5pbmctLTsKKwlpZiAocnRfdGFzayhwKSkgeworCQlpZiAocCAhPSBycS0+bWlncmF0aW9uX3RocmVhZCkKKwkJCWRlY19wcmlvX2JpYXMocnEsIHAtPnByaW8pOworCX0gZWxzZQorCQlkZWNfcHJpb19iaWFzKHJxLCBwLT5zdGF0aWNfcHJpbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluY19wcmlvX2JpYXMocnVucXVldWVfdCAqcnEsIGludCBwcmlvKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX3ByaW9fYmlhcyhydW5xdWV1ZV90ICpycSwgaW50IHByaW8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfbnJfcnVubmluZyh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQoreworCXJxLT5ucl9ydW5uaW5nKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfbnJfcnVubmluZyh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQoreworCXJxLT5ucl9ydW5uaW5nLS07Cit9CisjZW5kaWYKKwogLyoKICAqIF9fYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfdGFzayh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQogewogCWVucXVldWVfdGFzayhwLCBycS0+YWN0aXZlKTsKLQlycS0+bnJfcnVubmluZysrOworCWluY19ucl9ydW5uaW5nKHAsIHJxKTsKIH0KIAogLyoKQEAgLTY3NCw3ICs3MzAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfaWRsZV90YXNrKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCiB7CiAJZW5xdWV1ZV90YXNrX2hlYWQocCwgcnEtPmFjdGl2ZSk7Ci0JcnEtPm5yX3J1bm5pbmcrKzsKKwlpbmNfbnJfcnVubmluZyhwLCBycSk7CiB9CiAKIHN0YXRpYyBpbnQgcmVjYWxjX3Rhc2tfcHJpbyh0YXNrX3QgKnAsIHVuc2lnbmVkIGxvbmcgbG9uZyBub3cpCkBAIC03OTMsNyArODQ5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcnVucXVldWVfdCAqcnEpCiB7Ci0JcnEtPm5yX3J1bm5pbmctLTsKKwlkZWNfbnJfcnVubmluZyhwLCBycSk7CiAJZGVxdWV1ZV90YXNrKHAsIHAtPmFycmF5KTsKIAlwLT5hcnJheSA9IE5VTEw7CiB9CkBAIC04MDgsMjEgKzg2NCwyOCBAQAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHJlc2NoZWRfdGFzayh0YXNrX3QgKnApCiB7Ci0JaW50IG5lZWRfcmVzY2hlZCwgbnJwb2xsaW5nOworCWludCBjcHU7CiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnRhc2tfcnEocCktPmxvY2spOwogCi0JLyogbWluaW1pc2UgdGhlIGNoYW5jZSBvZiBzZW5kaW5nIGFuIGludGVycnVwdCB0byBwb2xsX2lkbGUoKSAqLwotCW5ycG9sbGluZyA9IHRlc3RfdHNrX3RocmVhZF9mbGFnKHAsVElGX1BPTExJTkdfTlJGTEFHKTsKLQluZWVkX3Jlc2NoZWQgPSB0ZXN0X2FuZF9zZXRfdHNrX3RocmVhZF9mbGFnKHAsVElGX05FRURfUkVTQ0hFRCk7Ci0JbnJwb2xsaW5nIHw9IHRlc3RfdHNrX3RocmVhZF9mbGFnKHAsVElGX1BPTExJTkdfTlJGTEFHKTsKKwlpZiAodW5saWtlbHkodGVzdF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX05FRURfUkVTQ0hFRCkpKQorCQlyZXR1cm47CiAKLQlpZiAoIW5lZWRfcmVzY2hlZCAmJiAhbnJwb2xsaW5nICYmICh0YXNrX2NwdShwKSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpKQotCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHRhc2tfY3B1KHApKTsKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9ORUVEX1JFU0NIRUQpOworCisJY3B1ID0gdGFza19jcHUocCk7CisJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybjsKKworCS8qIE5FRURfUkVTQ0hFRCBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QgUE9MTElOR19OUkZMQUcgKi8KKwlzbXBfbWIoKTsKKwlpZiAoIXRlc3RfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9QT0xMSU5HX05SRkxBRykpCisJCXNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzY2hlZF90YXNrKHRhc2tfdCAqcCkKIHsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnRhc2tfcnEocCktPmxvY2spOwogCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOwogfQogI2VuZGlmCkBAIC05MzAsMjcgKzk5Myw2MSBAQAogICogV2Ugd2FudCB0byB1bmRlci1lc3RpbWF0ZSB0aGUgbG9hZCBvZiBtaWdyYXRpb24gc291cmNlcywgdG8KICAqIGJhbGFuY2UgY29uc2VydmF0aXZlbHkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb3VyY2VfbG9hZChpbnQgY3B1LCBpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3NvdXJjZV9sb2FkKGludCBjcHUsIGludCB0eXBlLCBlbnVtIGlkbGVfdHlwZSBpZGxlKQogewogCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdW5zaWduZWQgbG9uZyBsb2FkX25vdyA9IHJxLT5ucl9ydW5uaW5nICogU0NIRURfTE9BRF9TQ0FMRTsKLQlpZiAodHlwZSA9PSAwKQotCQlyZXR1cm4gbG9hZF9ub3c7CisJdW5zaWduZWQgbG9uZyBydW5uaW5nID0gcnEtPm5yX3J1bm5pbmc7CisJdW5zaWduZWQgbG9uZyBzb3VyY2VfbG9hZCwgY3B1X2xvYWQgPSBycS0+Y3B1X2xvYWRbdHlwZS0xXSwKKwkJbG9hZF9ub3cgPSBydW5uaW5nICogU0NIRURfTE9BRF9TQ0FMRTsKIAotCXJldHVybiBtaW4ocnEtPmNwdV9sb2FkW3R5cGUtMV0sIGxvYWRfbm93KTsKKwlpZiAodHlwZSA9PSAwKQorCQlzb3VyY2VfbG9hZCA9IGxvYWRfbm93OworCWVsc2UKKwkJc291cmNlX2xvYWQgPSBtaW4oY3B1X2xvYWQsIGxvYWRfbm93KTsKKworCWlmIChydW5uaW5nID4gMSB8fCAoaWRsZSA9PSBOT1RfSURMRSAmJiBydW5uaW5nKSkKKwkJLyoKKwkJICogSWYgd2UgYXJlIGJ1c3kgcmViYWxhbmNpbmcgdGhlIGxvYWQgaXMgYmlhc2VkIGJ5CisJCSAqIHByaW9yaXR5IHRvIGNyZWF0ZSAnbmljZScgc3VwcG9ydCBhY3Jvc3MgY3B1cy4gV2hlbgorCQkgKiBpZGxlIHJlYmFsYW5jaW5nIHdlIHNob3VsZCBvbmx5IGJpYXMgdGhlIHNvdXJjZV9sb2FkIGlmCisJCSAqIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdGFzayBydW5uaW5nIG9uIHRoYXQgcXVldWUgdG8KKwkJICogcHJldmVudCBpZGxlIHJlYmFsYW5jZSBmcm9tIHRyeWluZyB0byBwdWxsIHRhc2tzIGZyb20gYQorCQkgKiBxdWV1ZSB3aXRoIG9ubHkgb25lIHJ1bm5pbmcgdGFzay4KKwkJICovCisJCXNvdXJjZV9sb2FkID0gc291cmNlX2xvYWQgKiBycS0+cHJpb19iaWFzIC8gcnVubmluZzsKKworCXJldHVybiBzb3VyY2VfbG9hZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNvdXJjZV9sb2FkKGludCBjcHUsIGludCB0eXBlKQoreworCXJldHVybiBfX3NvdXJjZV9sb2FkKGNwdSwgdHlwZSwgTk9UX0lETEUpOwogfQogCiAvKgogICogUmV0dXJuIGEgaGlnaCBndWVzcyBhdCB0aGUgbG9hZCBvZiBhIG1pZ3JhdGlvbi10YXJnZXQgY3B1CiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXJnZXRfbG9hZChpbnQgY3B1LCBpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3RhcmdldF9sb2FkKGludCBjcHUsIGludCB0eXBlLCBlbnVtIGlkbGVfdHlwZSBpZGxlKQogewogCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdW5zaWduZWQgbG9uZyBsb2FkX25vdyA9IHJxLT5ucl9ydW5uaW5nICogU0NIRURfTE9BRF9TQ0FMRTsKLQlpZiAodHlwZSA9PSAwKQotCQlyZXR1cm4gbG9hZF9ub3c7CisJdW5zaWduZWQgbG9uZyBydW5uaW5nID0gcnEtPm5yX3J1bm5pbmc7CisJdW5zaWduZWQgbG9uZyB0YXJnZXRfbG9hZCwgY3B1X2xvYWQgPSBycS0+Y3B1X2xvYWRbdHlwZS0xXSwKKwkJbG9hZF9ub3cgPSBydW5uaW5nICogU0NIRURfTE9BRF9TQ0FMRTsKIAotCXJldHVybiBtYXgocnEtPmNwdV9sb2FkW3R5cGUtMV0sIGxvYWRfbm93KTsKKwlpZiAodHlwZSA9PSAwKQorCQl0YXJnZXRfbG9hZCA9IGxvYWRfbm93OworCWVsc2UKKwkJdGFyZ2V0X2xvYWQgPSBtYXgoY3B1X2xvYWQsIGxvYWRfbm93KTsKKworCWlmIChydW5uaW5nID4gMSB8fCAoaWRsZSA9PSBOT1RfSURMRSAmJiBydW5uaW5nKSkKKwkJdGFyZ2V0X2xvYWQgPSB0YXJnZXRfbG9hZCAqIHJxLT5wcmlvX2JpYXMgLyBydW5uaW5nOworCisJcmV0dXJuIHRhcmdldF9sb2FkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2xvYWQoaW50IGNwdSwgaW50IHR5cGUpCit7CisJcmV0dXJuIF9fdGFyZ2V0X2xvYWQoY3B1LCB0eXBlLCBOT1RfSURMRSk7CiB9CiAKIC8qCkBAIC0xNDExLDcgKzE1MDgsNyBAQAogCQkJCWxpc3RfYWRkX3RhaWwoJnAtPnJ1bl9saXN0LCAmY3VycmVudC0+cnVuX2xpc3QpOwogCQkJCXAtPmFycmF5ID0gY3VycmVudC0+YXJyYXk7CiAJCQkJcC0+YXJyYXktPm5yX2FjdGl2ZSsrOwotCQkJCXJxLT5ucl9ydW5uaW5nKys7CisJCQkJaW5jX25yX3J1bm5pbmcocCwgcnEpOwogCQkJfQogCQkJc2V0X25lZWRfcmVzY2hlZCgpOwogCQl9IGVsc2UKQEAgLTE3NTYsOSArMTg1Myw5IEBACiAJICAgICAgIHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIHByaW9fYXJyYXlfdCAqdGhpc19hcnJheSwgaW50IHRoaXNfY3B1KQogewogCWRlcXVldWVfdGFzayhwLCBzcmNfYXJyYXkpOwotCXNyY19ycS0+bnJfcnVubmluZy0tOworCWRlY19ucl9ydW5uaW5nKHAsIHNyY19ycSk7CiAJc2V0X3Rhc2tfY3B1KHAsIHRoaXNfY3B1KTsKLQl0aGlzX3JxLT5ucl9ydW5uaW5nKys7CisJaW5jX25yX3J1bm5pbmcocCwgdGhpc19ycSk7CiAJZW5xdWV1ZV90YXNrKHAsIHRoaXNfYXJyYXkpOwogCXAtPnRpbWVzdGFtcCA9IChwLT50aW1lc3RhbXAgLSBzcmNfcnEtPnRpbWVzdGFtcF9sYXN0X3RpY2spCiAJCQkJKyB0aGlzX3JxLT50aW1lc3RhbXBfbGFzdF90aWNrOwpAQCAtMTkzNyw5ICsyMDM0LDkgQEAKIAogCQkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLwogCQkJaWYgKGxvY2FsX2dyb3VwKQotCQkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7CisJCQkJbG9hZCA9IF9fdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgsIGlkbGUpOwogCQkJZWxzZQotCQkJCWxvYWQgPSBzb3VyY2VfbG9hZChpLCBsb2FkX2lkeCk7CisJCQkJbG9hZCA9IF9fc291cmNlX2xvYWQoaSwgbG9hZF9pZHgsIGlkbGUpOwogCiAJCQlhdmdfbG9hZCArPSBsb2FkOwogCQl9CkBAIC0yMDQ0LDE0ICsyMTQxLDE1IEBACiAvKgogICogZmluZF9idXNpZXN0X3F1ZXVlIC0gZmluZCB0aGUgYnVzaWVzdCBydW5xdWV1ZSBhbW9uZyB0aGUgY3B1cyBpbiBncm91cC4KICAqLwotc3RhdGljIHJ1bnF1ZXVlX3QgKmZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwKQorc3RhdGljIHJ1bnF1ZXVlX3QgKmZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCWVudW0gaWRsZV90eXBlIGlkbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBsb2FkLCBtYXhfbG9hZCA9IDA7CiAJcnVucXVldWVfdCAqYnVzaWVzdCA9IE5VTEw7CiAJaW50IGk7CiAKIAlmb3JfZWFjaF9jcHVfbWFzayhpLCBncm91cC0+Y3B1bWFzaykgewotCQlsb2FkID0gc291cmNlX2xvYWQoaSwgMCk7CisJCWxvYWQgPSBfX3NvdXJjZV9sb2FkKGksIDAsIGlkbGUpOwogCiAJCWlmIChsb2FkID4gbWF4X2xvYWQpIHsKIAkJCW1heF9sb2FkID0gbG9hZDsKQEAgLTIwOTUsNyArMjE5Myw3IEBACiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCX0KIAotCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXApOworCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIGlkbGUpOwogCWlmICghYnVzaWVzdCkgewogCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW2lkbGVdKTsKIAkJZ290byBvdXRfYmFsYW5jZWQ7CkBAIC0yMjE4LDcgKzIzMTYsNyBAQAogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAl9CiAKLQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwKTsKKwlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBORVdMWV9JRExFKTsKIAlpZiAoIWJ1c2llc3QpIHsKIAkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtORVdMWV9JRExFXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMzQ1MSw4ICszNTQ5LDEwIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJYXJyYXkgPSBwLT5hcnJheTsKLQlpZiAoYXJyYXkpCisJaWYgKGFycmF5KSB7CiAJCWRlcXVldWVfdGFzayhwLCBhcnJheSk7CisJCWRlY19wcmlvX2JpYXMocnEsIHAtPnN0YXRpY19wcmlvKTsKKwl9CiAKIAlvbGRfcHJpbyA9IHAtPnByaW87CiAJbmV3X3ByaW8gPSBOSUNFX1RPX1BSSU8obmljZSk7CkBAIC0zNDYyLDYgKzM1NjIsNyBAQAogCiAJaWYgKGFycmF5KSB7CiAJCWVucXVldWVfdGFzayhwLCBhcnJheSk7CisJCWluY19wcmlvX2JpYXMocnEsIHAtPnN0YXRpY19wcmlvKTsKIAkJLyoKIAkJICogSWYgdGhlIHRhc2sgaW5jcmVhc2VkIGl0cyBwcmlvcml0eSBvciBpcyBydW5uaW5nIGFuZAogCQkgKiBsb3dlcmVkIGl0cyBwcmlvcml0eSwgdGhlbiByZXNjaGVkdWxlIGl0cyBDUFU6CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGxvY2t1cC5jIGIva2VybmVsL3NvZnRsb2NrdXAuYwppbmRleCBhMmRjY2ViLi5jNjcxODlhMiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC03Myw5ICs3Myw2IEBACiBzdGF0aWMgaW50IHdhdGNoZG9nKHZvaWQgKiBfX2JpbmRfY3B1KQogewogCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gOTkgfTsKLQlpbnQgdGhpc19jcHUgPSAobG9uZykgX19iaW5kX2NwdTsKLQotCXByaW50aygic29mdGxvY2t1cCB0aHJlYWQgJWQgc3RhcnRlZCB1cC5cbiIsIHRoaXNfY3B1KTsKIAogCXNjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGM0ZjM1ZjkuLjk5OTBlMTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCiBleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N5c19yb290OwogCi1zdGF0aWMgdm9pZCByZWdpc3Rlcl9wcm9jX3RhYmxlKGN0bF90YWJsZSAqLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CitzdGF0aWMgdm9pZCByZWdpc3Rlcl9wcm9jX3RhYmxlKGN0bF90YWJsZSAqLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiwgdm9pZCAqKTsKIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICopOwogI2VuZGlmCiAKQEAgLTk5MiwxMCArOTkyLDUxIEBACiAKIGV4dGVybiB2b2lkIGluaXRfaXJxX3Byb2MgKHZvaWQpOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5c2N0bF9sb2NrKTsKKworLyogY2FsbGVkIHVuZGVyIHN5c2N0bF9sb2NrICovCitzdGF0aWMgaW50IHVzZV90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcCkKK3sKKwlpZiAodW5saWtlbHkocC0+dW5yZWdpc3RlcmluZykpCisJCXJldHVybiAwOworCXAtPnVzZWQrKzsKKwlyZXR1cm4gMTsKK30KKworLyogY2FsbGVkIHVuZGVyIHN5c2N0bF9sb2NrICovCitzdGF0aWMgdm9pZCB1bnVzZV90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcCkKK3sKKwlpZiAoIS0tcC0+dXNlZCkKKwkJaWYgKHVubGlrZWx5KHAtPnVucmVnaXN0ZXJpbmcpKQorCQkJY29tcGxldGUocC0+dW5yZWdpc3RlcmluZyk7Cit9CisKKy8qIGNhbGxlZCB1bmRlciBzeXNjdGxfbG9jaywgd2lsbCByZWFjcXVpcmUgaWYgaGFzIHRvIHdhaXQgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3VucmVnaXN0ZXJpbmcoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnApCit7CisJLyoKKwkgKiBpZiBwLT51c2VkIGlzIDAsIG5vYm9keSB3aWxsIGV2ZXIgdG91Y2ggdGhhdCBlbnRyeSBhZ2FpbjsKKwkgKiB3ZSdsbCBlbGltaW5hdGUgYWxsIHBhdGhzIHRvIGl0IGJlZm9yZSBkcm9wcGluZyBzeXNjdGxfbG9jaworCSAqLworCWlmICh1bmxpa2VseShwLT51c2VkKSkgeworCQlzdHJ1Y3QgY29tcGxldGlvbiB3YWl0OworCQlpbml0X2NvbXBsZXRpb24oJndhaXQpOworCQlwLT51bnJlZ2lzdGVyaW5nID0gJndhaXQ7CisJCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOworCQlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKKwl9CisJLyoKKwkgKiBkbyBub3QgcmVtb3ZlIGZyb20gdGhlIGxpc3QgdW50aWwgbm9ib2R5IGhvbGRzIGl0OyB3YWxraW5nIHRoZQorCSAqIGxpc3QgaW4gZG9fc3lzY3RsKCkgcmVsaWVzIG9uIHRoYXQuCisJICovCisJbGlzdF9kZWxfaW5pdCgmcC0+Y3RsX2VudHJ5KTsKK30KKwogdm9pZCBfX2luaXQgc3lzY3RsX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlZ2lzdGVyX3Byb2NfdGFibGUocm9vdF90YWJsZSwgcHJvY19zeXNfcm9vdCk7CisJcmVnaXN0ZXJfcHJvY190YWJsZShyb290X3RhYmxlLCBwcm9jX3N5c19yb290LCAmcm9vdF90YWJsZV9oZWFkZXIpOwogCWluaXRfaXJxX3Byb2MoKTsKICNlbmRpZgogfQpAQCAtMTAwNCw2ICsxMDQ1LDcgQEAKIAkgICAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJaW50IGVycm9yID0gLUVOT1RESVI7CiAKIAlpZiAobmxlbiA8PSAwIHx8IG5sZW4gPj0gQ1RMX01BWE5BTUUpCiAJCXJldHVybiAtRU5PVERJUjsKQEAgLTEwMTIsMjAgKzEwNTQsMzAgQEAKIAkJaWYgKCFvbGRsZW5wIHx8IGdldF91c2VyKG9sZF9sZW4sIG9sZGxlbnApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQorCXNwaW5fbG9jaygmc3lzY3RsX2xvY2spOwogCXRtcCA9ICZyb290X3RhYmxlX2hlYWRlci5jdGxfZW50cnk7CiAJZG8gewogCQlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCA9CiAJCQlsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIsIGN0bF9lbnRyeSk7CiAJCXZvaWQgKmNvbnRleHQgPSBOVUxMOwotCQlpbnQgZXJyb3IgPSBwYXJzZV90YWJsZShuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIAorCisJCWlmICghdXNlX3RhYmxlKGhlYWQpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKKworCQllcnJvciA9IHBhcnNlX3RhYmxlKG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgCiAJCQkJCW5ld3ZhbCwgbmV3bGVuLCBoZWFkLT5jdGxfdGFibGUsCiAJCQkJCSZjb250ZXh0KTsKIAkJa2ZyZWUoY29udGV4dCk7CisKKwkJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CisJCXVudXNlX3RhYmxlKGhlYWQpOwogCQlpZiAoZXJyb3IgIT0gLUVOT1RESVIpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCXRtcCA9IHRtcC0+bmV4dDsKLQl9IHdoaWxlICh0bXAgIT0gJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeSk7Ci0JcmV0dXJuIC1FTk9URElSOworCQkJYnJlYWs7CisJfSB3aGlsZSAoKHRtcCA9IHRtcC0+bmV4dCkgIT0gJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeSk7CisJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3lzY3RsKHN0cnVjdCBfX3N5c2N0bF9hcmdzIF9fdXNlciAqYXJncykKQEAgLTEyMzYsMTIgKzEyODgsMTYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJdG1wLT5jdGxfdGFibGUgPSB0YWJsZTsKIAlJTklUX0xJU1RfSEVBRCgmdG1wLT5jdGxfZW50cnkpOworCXRtcC0+dXNlZCA9IDA7CisJdG1wLT51bnJlZ2lzdGVyaW5nID0gTlVMTDsKKwlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKIAlpZiAoaW5zZXJ0X2F0X2hlYWQpCiAJCWxpc3RfYWRkKCZ0bXAtPmN0bF9lbnRyeSwgJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeSk7CiAJZWxzZQogCQlsaXN0X2FkZF90YWlsKCZ0bXAtPmN0bF9lbnRyeSwgJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeSk7CisJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlZ2lzdGVyX3Byb2NfdGFibGUodGFibGUsIHByb2Nfc3lzX3Jvb3QpOworCXJlZ2lzdGVyX3Byb2NfdGFibGUodGFibGUsIHByb2Nfc3lzX3Jvb3QsIHRtcCk7CiAjZW5kaWYKIAlyZXR1cm4gdG1wOwogfQpAQCAtMTI1NSwxMCArMTMxMSwxMyBAQAogICovCiB2b2lkIHVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICogaGVhZGVyKQogewotCWxpc3RfZGVsKCZoZWFkZXItPmN0bF9lbnRyeSk7CisJbWlnaHRfc2xlZXAoKTsKKwlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKKwlzdGFydF91bnJlZ2lzdGVyaW5nKGhlYWRlcik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAl1bnJlZ2lzdGVyX3Byb2NfdGFibGUoaGVhZGVyLT5jdGxfdGFibGUsIHByb2Nfc3lzX3Jvb3QpOwogI2VuZGlmCisJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKIAlrZnJlZShoZWFkZXIpOwogfQogCkBAIC0xMjY5LDcgKzEzMjgsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIC8qIFNjYW4gdGhlIHN5c2N0bCBlbnRyaWVzIGluIHRhYmxlIGFuZCBhZGQgdGhlbSBhbGwgaW50byAvcHJvYyAqLwotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiB0YWJsZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290KQorc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiB0YWJsZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290LCB2b2lkICpzZXQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZTsKIAlpbnQgbGVuOwpAQCAtMTMwNSwxMyArMTM2NCwxNCBAQAogCQkJZGUgPSBjcmVhdGVfcHJvY19lbnRyeSh0YWJsZS0+cHJvY25hbWUsIG1vZGUsIHJvb3QpOwogCQkJaWYgKCFkZSkKIAkJCQljb250aW51ZTsKKwkJCWRlLT5zZXQgPSBzZXQ7CiAJCQlkZS0+ZGF0YSA9ICh2b2lkICopIHRhYmxlOwogCQkJaWYgKHRhYmxlLT5wcm9jX2hhbmRsZXIpCiAJCQkJZGUtPnByb2NfZm9wcyA9ICZwcm9jX3N5c19maWxlX29wZXJhdGlvbnM7CiAJCX0KIAkJdGFibGUtPmRlID0gZGU7CiAJCWlmIChkZS0+bW9kZSAmIFNfSUZESVIpCi0JCQlyZWdpc3Rlcl9wcm9jX3RhYmxlKHRhYmxlLT5jaGlsZCwgZGUpOworCQkJcmVnaXN0ZXJfcHJvY190YWJsZSh0YWJsZS0+Y2hpbGQsIGRlLCBzZXQpOwogCX0KIH0KIApAQCAtMTMzNiw2ICsxMzk2LDEzIEBACiAJCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBJbiBhbnkgY2FzZSwgbWFyayB0aGUgZW50cnkgYXMgZ29uZXI7IHdlJ2xsIGtlZXAgaXQKKwkJICogYXJvdW5kIGlmIGl0J3MgYnVzeSwgYnV0IHdlJ2xsIGtub3cgdG8gZG8gbm90aGluZyB3aXRoCisJCSAqIGl0cyBmaWVsZHMuICBXZSBhcmUgdW5kZXIgc3lzY3RsX2xvY2sgaGVyZS4KKwkJICovCisJCWRlLT5kYXRhID0gTlVMTDsKKwogCQkvKiBEb24ndCB1bnJlZ2lzdGVyIHByb2MgZW50cmllcyB0aGF0IGFyZSBzdGlsbCBiZWluZyB1c2VkLi4gKi8KIAkJaWYgKGF0b21pY19yZWFkKCZkZS0+Y291bnQpKQogCQkJY29udGludWU7CkBAIC0xMzQ5LDI3ICsxNDE2LDM4IEBACiAJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWludCBvcDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXNpemVfdCByZXM7Ci0Jc3NpemVfdCBlcnJvcjsKKwlzc2l6ZV90IGVycm9yID0gLUVOT1RESVI7CiAJCi0JZGUgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwotCWlmICghZGUgfHwgIWRlLT5kYXRhKQotCQlyZXR1cm4gLUVOT1RESVI7Ci0JdGFibGUgPSAoc3RydWN0IGN0bF90YWJsZSAqKSBkZS0+ZGF0YTsKLQlpZiAoIXRhYmxlIHx8ICF0YWJsZS0+cHJvY19oYW5kbGVyKQotCQlyZXR1cm4gLUVOT1RESVI7Ci0Jb3AgPSAod3JpdGUgPyAwMDIgOiAwMDQpOwotCWlmIChjdGxfcGVybSh0YWJsZSwgb3ApKQotCQlyZXR1cm4gLUVQRVJNOwotCQotCXJlcyA9IGNvdW50OwotCi0JZXJyb3IgPSAoKnRhYmxlLT5wcm9jX2hhbmRsZXIpICh0YWJsZSwgd3JpdGUsIGZpbGUsIGJ1ZiwgJnJlcywgcHBvcyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JcmV0dXJuIHJlczsKKwlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKKwlpZiAoZGUgJiYgZGUtPmRhdGEgJiYgdXNlX3RhYmxlKGRlLT5zZXQpKSB7CisJCS8qCisJCSAqIGF0IHRoYXQgcG9pbnQgd2Uga25vdyB0aGF0IHN5c2N0bCB3YXMgbm90IHVucmVnaXN0ZXJlZAorCQkgKiBhbmQgd29uJ3QgYmUgdW50aWwgd2UgZmluaXNoCisJCSAqLworCQlzcGluX3VubG9jaygmc3lzY3RsX2xvY2spOworCQl0YWJsZSA9IChzdHJ1Y3QgY3RsX3RhYmxlICopIGRlLT5kYXRhOworCQlpZiAoIXRhYmxlIHx8ICF0YWJsZS0+cHJvY19oYW5kbGVyKQorCQkJZ290byBvdXQ7CisJCWVycm9yID0gLUVQRVJNOworCQlvcCA9ICh3cml0ZSA/IDAwMiA6IDAwNCk7CisJCWlmIChjdGxfcGVybSh0YWJsZSwgb3ApKQorCQkJZ290byBvdXQ7CisJCQorCQkvKiBjYXJlZnVsOiBjYWxsaW5nIGNvbnZlbnRpb25zIGFyZSBuYXN0eSBoZXJlICovCisJCXJlcyA9IGNvdW50OworCQllcnJvciA9ICgqdGFibGUtPnByb2NfaGFuZGxlcikodGFibGUsIHdyaXRlLCBmaWxlLAorCQkJCQkJYnVmLCAmcmVzLCBwcG9zKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gcmVzOworCW91dDoKKwkJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CisJCXVudXNlX3RhYmxlKGRlLT5zZXQpOworCX0KKwlzcGluX3VubG9jaygmc3lzY3RsX2xvY2spOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBwcm9jX29wZW5zeXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCAyMGNjNTgwLi5lY2M5YmIxIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTExLDE1ICsxMSwxNCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLQorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAorCiBNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3RBUCBjcnlwdG8iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTI5LDMyICsyOCwyMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogfTsKIAotc3RydWN0IGllZWU4MDIxMV9jcnlwdG8gewotCXN0cnVjdCBsaXN0X2hlYWQgYWxnczsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jcnlwdG8gKmhjcnlwdDsKK3N0YXRpYyBMSVNUX0hFQUQoaWVlZTgwMjExX2NyeXB0b19hbGdzKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaWVlZTgwMjExX2NyeXB0b19sb2NrKTsKIAogdm9pZCBpZWVlODAyMTFfY3J5cHRfZGVpbml0X2VudHJpZXMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIGludCBmb3JjZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIsICpuOwotCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqZW50cnk7CisgCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqZW50cnksICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGxpc3RfZW1wdHkoJmllZWUtPmNyeXB0X2RlaW5pdF9saXN0KSkKLQkJZ290byB1bmxvY2s7Ci0KLQlmb3IgKHB0ciA9IGllZWUtPmNyeXB0X2RlaW5pdF9saXN0Lm5leHQsIG4gPSBwdHItPm5leHQ7Ci0JICAgICBwdHIgIT0gJmllZWUtPmNyeXB0X2RlaW5pdF9saXN0OyBwdHIgPSBuLCBuID0gcHRyLT5uZXh0KSB7Ci0JCWVudHJ5ID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSwgbGlzdCk7Ci0KKyAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmaWVlZS0+Y3J5cHRfZGVpbml0X2xpc3QsIGxpc3QpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZlbnRyeS0+cmVmY250KSAhPSAwICYmICFmb3JjZSkKIAkJCWNvbnRpbnVlOwogCi0JCWxpc3RfZGVsKHB0cik7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CiAKIAkJaWYgKGVudHJ5LT5vcHMpIHsKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7CkBAIC02Miw3ICs0OSw2IEBACiAJCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KLSAgICAgIHVubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTEyNSw5ICsxMTEsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGc7CiAKLQlpZiAoaGNyeXB0ID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQogCWFsZyA9IGttYWxsb2Moc2l6ZW9mKCphbGcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYWxnID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM1LDkgKzExOCw5IEBACiAJbWVtc2V0KGFsZywgMCwgc2l6ZW9mKCphbGcpKTsKIAlhbGctPm9wcyA9IG9wczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmYWxnLT5saXN0LCAmaGNyeXB0LT5hbGdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmFsZy0+bGlzdCwgJmllZWU4MDIxMV9jcnlwdG9fYWxncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0OiByZWdpc3RlcmVkIGFsZ29yaXRobSAnJXMnXG4iLAogCSAgICAgICBvcHMtPm5hbWUpOwpAQCAtMTQ3LDY0ICsxMzAsNDkgQEAKIAogaW50IGllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHMpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICpkZWxfYWxnID0gTlVMTDsKIAotCWlmIChoY3J5cHQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhjcnlwdC0+bG9jaywgZmxhZ3MpOwotCWZvciAocHRyID0gaGNyeXB0LT5hbGdzLm5leHQ7IHB0ciAhPSAmaGNyeXB0LT5hbGdzOyBwdHIgPSBwdHItPm5leHQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqKXB0cjsKLQkJaWYgKGFsZy0+b3BzID09IG9wcykgewotCQkJbGlzdF9kZWwoJmFsZy0+bGlzdCk7Ci0JCQlkZWxfYWxnID0gYWxnOwotCQkJYnJlYWs7Ci0JCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhbGcsICZpZWVlODAyMTFfY3J5cHRvX2FsZ3MsIGxpc3QpIHsKKwkJaWYgKGFsZy0+b3BzID09IG9wcykKKwkJCWdvdG8gZm91bmQ7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhjcnlwdC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRlbF9hbGcpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCi0JCSAgICAgICAiJyVzJ1xuIiwgb3BzLT5uYW1lKTsKLQkJa2ZyZWUoZGVsX2FsZyk7Ci0JfQotCi0JcmV0dXJuIGRlbF9hbGcgPyAwIDogLTE7CisgZm91bmQ6CisJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCisJCQkgICInJXMnXG4iLCBvcHMtPm5hbWUpOworCWxpc3RfZGVsKCZhbGctPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCWtmcmVlKGFsZyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGNvbnN0IGNoYXIgKm5hbWUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICpmb3VuZF9hbGcgPSBOVUxMOwogCi0JaWYgKGhjcnlwdCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKHB0ciA9IGhjcnlwdC0+YWxncy5uZXh0OyBwdHIgIT0gJmhjcnlwdC0+YWxnczsgcHRyID0gcHRyLT5uZXh0KSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqYWxnID0KLQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19hbGcgKilwdHI7Ci0JCWlmIChzdHJjbXAoYWxnLT5vcHMtPm5hbWUsIG5hbWUpID09IDApIHsKLQkJCWZvdW5kX2FsZyA9IGFsZzsKLQkJCWJyZWFrOwotCQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxnLCAmaWVlZTgwMjExX2NyeXB0b19hbGdzLCBsaXN0KSB7CisJCWlmIChzdHJjbXAoYWxnLT5vcHMtPm5hbWUsIG5hbWUpID09IDApCisJCQlnb3RvIGZvdW5kOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlODAyMTFfY3J5cHRvX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKIAotCWlmIChmb3VuZF9hbGcpCi0JCXJldHVybiBmb3VuZF9hbGctPm9wczsKLQllbHNlCi0JCXJldHVybiBOVUxMOworIGZvdW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCXJldHVybiBhbGctPm9wczsKIH0KIAogc3RhdGljIHZvaWQgKmllZWU4MDIxMV9jcnlwdF9udWxsX2luaXQoaW50IGtleWlkeCkKIHsKIAlyZXR1cm4gKHZvaWQgKikxOwogfQorCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3J5cHRfbnVsbF9kZWluaXQodm9pZCAqcHJpdikKIHsKIH0KQEAgLTIxMyw1NiArMTgxLDE4IEBACiAJLm5hbWUgPSAiTlVMTCIsCiAJLmluaXQgPSBpZWVlODAyMTFfY3J5cHRfbnVsbF9pbml0LAogCS5kZWluaXQgPSBpZWVlODAyMTFfY3J5cHRfbnVsbF9kZWluaXQsCi0JLmVuY3J5cHRfbXBkdSA9IE5VTEwsCi0JLmRlY3J5cHRfbXBkdSA9IE5VTEwsCi0JLmVuY3J5cHRfbXNkdSA9IE5VTEwsCi0JLmRlY3J5cHRfbXNkdSA9IE5VTEwsCi0JLnNldF9rZXkgPSBOVUxMLAotCS5nZXRfa2V5ID0gTlVMTCwKLQkuZXh0cmFfbXBkdV9wcmVmaXhfbGVuID0gMCwKLQkuZXh0cmFfbXBkdV9wb3N0Zml4X2xlbiA9IDAsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfY3J5cHRvX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCWhjcnlwdCA9IGttYWxsb2Moc2l6ZW9mKCpoY3J5cHQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhjcnlwdCkKLQkJZ290byBvdXQ7Ci0KLQltZW1zZXQoaGNyeXB0LCAwLCBzaXplb2YoKmhjcnlwdCkpOwotCUlOSVRfTElTVF9IRUFEKCZoY3J5cHQtPmFsZ3MpOwotCXNwaW5fbG9ja19pbml0KCZoY3J5cHQtPmxvY2spOwotCi0JcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF9udWxsKTsKLQlpZiAocmV0IDwgMCkgewotCQlrZnJlZShoY3J5cHQpOwotCQloY3J5cHQgPSBOVUxMOwotCX0KLSAgICAgIG91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X251bGwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b19kZWluaXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIsICpuOwotCi0JaWYgKGhjcnlwdCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlmb3IgKHB0ciA9IGhjcnlwdC0+YWxncy5uZXh0LCBuID0gcHRyLT5uZXh0OyBwdHIgIT0gJmhjcnlwdC0+YWxnczsKLQkgICAgIHB0ciA9IG4sIG4gPSBwdHItPm5leHQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqKXB0cjsKLQkJbGlzdF9kZWwocHRyKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCi0JCSAgICAgICAiJyVzJyAoZGVpbml0KVxuIiwgYWxnLT5vcHMtPm5hbWUpOwotCQlrZnJlZShhbGcpOwotCX0KLQotCWtmcmVlKGhjcnlwdCk7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X251bGwpOworCUJVR19PTighbGlzdF9lbXB0eSgmaWVlZTgwMjExX2NyeXB0b19hbGdzKSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NyeXB0X2RlaW5pdF9lbnRyaWVzKTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDZhZDg4MjEuLjAzZWZhYWMgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMzY5LDYgKzM2OSw3IEBACiAJLyogUHV0IHRoaXMgY29kZSBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgZHVwbGljYXRpbmcgaXQgaW4gYWxsCiAJICogUnggcGF0aHMuIC0gSmVhbiBJSSAqLwogI2lmZGVmIElXX1dJUkVMRVNTX1NQWQkJLyogZGVmaW5lZCBpbiBpd19oYW5kbGVyLmggKi8KKyNpZmRlZiBDT05GSUdfTkVUX1JBRElPCiAJLyogSWYgc3B5IG1vbml0b3Jpbmcgb24gKi8KIAlpZiAoaWVlZS0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApIHsKIAkJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwpAQCAtMzk1LDYgKzM5Niw3IEBACiAJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwogCQl3aXJlbGVzc19zcHlfdXBkYXRlKGllZWUtPmRldiwgaGRyLT5hZGRyMiwgJndzdGF0cyk7CiAJfQorI2VuZGlmCQkJCS8qIENPTkZJR19ORVRfUkFESU8gKi8KICNlbmRpZgkJCQkvKiBJV19XSVJFTEVTU19TUFkgKi8KIAogI2lmZGVmIE5PVF9ZRVQKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDFjZTdhZjkuLjE4MTc1NWYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMTYxLDkgKzE2MSwxMSBAQAogCQkJICAgICAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gaWVlZS0+d29yc3RfcnNzaSkgLQogCQkJICAgICAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gbmV0d29yay0+c3RhdHMucnNzaSkgKgogCQkJICAgICAoMTUgKiAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gaWVlZS0+d29yc3RfcnNzaSkgKwotCQkJICAgICAgNjIgKiAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gbmV0d29yay0+c3RhdHMucnNzaSkpKSAvCi0JCQkgICAgKChpZWVlLT5wZXJmZWN0X3Jzc2kgLSBpZWVlLT53b3JzdF9yc3NpKSAqCi0JCQkgICAgIChpZWVlLT5wZXJmZWN0X3Jzc2kgLSBpZWVlLT53b3JzdF9yc3NpKSk7CisJCQkgICAgICA2MiAqIChpZWVlLT5wZXJmZWN0X3Jzc2kgLQorCQkJCSAgICBuZXR3b3JrLT5zdGF0cy5yc3NpKSkpIC8KKwkJCSAgICAoKGllZWUtPnBlcmZlY3RfcnNzaSAtCisJCQkgICAgICBpZWVlLT53b3JzdF9yc3NpKSAqIChpZWVlLT5wZXJmZWN0X3Jzc2kgLQorCQkJCQkJICAgaWVlZS0+d29yc3RfcnNzaSkpOwogCQlpZiAoaXdlLnUucXVhbC5xdWFsID4gMTAwKQogCQkJaXdlLnUucXVhbC5xdWFsID0gMTAwOwogCQllbHNlIGlmIChpd2UudS5xdWFsLnF1YWwgPCAxKQpAQCAtNTIwLDcgKzUyMiw4IEBACiAJCWNyeXB0ID0gJmllZWUtPmNyeXB0W2lkeF07CiAJCWdyb3VwX2tleSA9IDE7CiAJfSBlbHNlIHsKLQkJaWYgKGlkeCAhPSAwKQorCQkvKiBzb21lIENpc2NvIEFQcyB1c2UgaWR4PjAgZm9yIHVuaWNhc3QgaW4gZHluYW1pYyBXRVAgKi8KKwkJaWYgKGlkeCAhPSAwICYmIGV4dC0+YWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpCiAJCQljcnlwdCA9ICZpZWVlLT5jcnlwdFtpZHhdOwpAQCAtNjg4LDcgKzY5MSw4IEBACiAJfSBlbHNlCiAJCWlkeCA9IGllZWUtPnR4X2tleWlkeDsKIAotCWlmICghZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkKKwlpZiAoIWV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkgJiYKKwkgICAgZXh0LT5hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApCiAJCWlmIChpZHggIT0gMCB8fCBpZWVlLT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDRmMTg4ZDAuLjgxZTAwYTYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJZGlyID0gbmQtPmRlbnRyeS0+ZF9pbm9kZTsKIAlkb3duKCZkaXItPmlfc2VtKTsKLQlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQtPmxhc3QsIG5kLT5kZW50cnkpOworCWRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gb3V0X2VycjsKIAlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CkBAIC02NjUsNyArNjY1LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCWRpciA9IG5kLmRlbnRyeS0+ZF9pbm9kZTsKIAlkb3duKCZkaXItPmlfc2VtKTsKLQlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQubGFzdCwgbmQuZGVudHJ5KTsKKwlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQpOwogCWlmIChJU19FUlIoZGVudHJ5KSkgewogCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKIAkJZ290byBvdXRfcmVsZWFzZTsKQEAgLTcyNiw3ICs3MjYsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAJZGlyID0gbmQuZGVudHJ5LT5kX2lub2RlOwogCWRvd24oJmRpci0+aV9zZW0pOwotCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZC5sYXN0LCBuZC5kZW50cnkpOworCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJaWYgKElTX0VSUihkZW50cnkpKSB7CiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCQlnb3RvIG91dF9yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IDQxZmVjYTMuLmFjYzczYmEgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCQllcnIgPSBwYXRoX2xvb2t1cChzdW5uYW1lLT5zdW5fcGF0aCwgTE9PS1VQX0ZPTExPVywgJm5kKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZmFpbDsKLQkJZXJyID0gcGVybWlzc2lvbihuZC5kZW50cnktPmRfaW5vZGUsTUFZX1dSSVRFLCAmbmQpOworCQllcnIgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHB1dF9mYWlsOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKaW5kZXggYzY1YzQzNS4uOWQ2Nzc4MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCisrKyBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtMTE0LDcgKzExNCw3IEBACiBlbmRpZgogCiBjbGVhbi1maWxlcwk6PSBsa2NfZGVmcy5oIHFjb25mLm1vYyAudG1wX3F0Y2hlY2sgXAotCQkgICAudG1wX2d0a2NoZWNrIHpjb25mLnRhYi5jIHpjb25mLnRhYi5oIGxleC56Y29uZi5jCisJCSAgIC50bXBfZ3RrY2hlY2sgemNvbmYudGFiLmMgbGV4Lnpjb25mLmMgemNvbmYuaGFzaC5jCiAKICMgTmVlZGVkIGZvciBzeXN0ZW1zIHdpdGhvdXQgZ2V0dGV4dAogS0JVSUxEX0hBVkVfTkxTIDo9ICQoc2hlbGwgXApAQCAtMTM2LDEyICsxMzYsNiBAQAogSE9TVENGTEFHU19nY29uZi5vCT0gYHBrZy1jb25maWcgZ3RrKy0yLjAgZ21vZHVsZS0yLjAgbGliZ2xhZGUtMi4wIC0tY2ZsYWdzYCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EIExLQ19ESVJFQ1RfTElOSwogCi0kKG9iaikvY29uZi5vICQob2JqKS9tY29uZi5vICQob2JqKS9xY29uZi5vICQob2JqKS9nY29uZi5vICQob2JqKS9reGdldHRleHQ6ICQob2JqKS96Y29uZi50YWIuaAotCi0kKG9iaikvemNvbmYudGFiLmg6ICQoc3JjKS96Y29uZi50YWIuaF9zaGlwcGVkCi0kKG9iaikvemNvbmYudGFiLmM6ICQoc3JjKS96Y29uZi50YWIuY19zaGlwcGVkCi0kKG9iaikvbGV4Lnpjb25mLmM6ICQoc3JjKS9sZXguemNvbmYuY19zaGlwcGVkCi0KICQob2JqKS9xY29uZi5vOiAkKG9iaikvLnRtcF9xdGNoZWNrCiAKIGlmZXEgKCQocWNvbmYtdGFyZ2V0KSwxKQpAQCAtMjA3LDcgKzIwMSw3IEBACiAJZmkKIGVuZGlmCiAKLSQob2JqKS96Y29uZi50YWIubzogJChvYmopL2xleC56Y29uZi5jCiskKG9iaikvemNvbmYudGFiLm86ICQob2JqKS9sZXguemNvbmYuYyAkKG9iaikvemNvbmYuaGFzaC5jCiAKICQob2JqKS9rY29uZmlnX2xvYWQubzogJChvYmopL2xrY19kZWZzLmgKIApAQCAtMjIzLDIwICsyMTcsMjcgQEAKIAogCiAjIyMKLSMgVGhlIGZvbGxvd2luZyByZXF1aXJlcyBmbGV4L2Jpc29uCisjIFRoZSBmb2xsb3dpbmcgcmVxdWlyZXMgZmxleC9iaXNvbi9ncGVyZgogIyBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgX3NoaXBwZWQgdmVyc2lvbnMsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYKICMgeW91IGFyZSBtb2RpZnlpbmcgdGhlIGZsZXgvYmlzb24gc3JjLgogIyBMS0NfR0VOUEFSU0VSIDo9IDEKIAogaWZkZWYgTEtDX0dFTlBBUlNFUgogCi0kKG9iaikvemNvbmYudGFiLmM6ICQob2JqKS96Y29uZi55IAotJChvYmopL3pjb25mLnRhYi5oOiAkKG9iaikvemNvbmYudGFiLmMKKyQob2JqKS96Y29uZi50YWIuYzogJChzcmMpL3pjb25mLnkKKyQob2JqKS9sZXguemNvbmYuYzogJChzcmMpL3pjb25mLmwKKyQob2JqKS96Y29uZi5oYXNoLmM6ICQoc3JjKS96Y29uZi5ncGVyZgogCiAlLnRhYi5jOiAlLnkKLQliaXNvbiAtdCAtZCAtdiAtYiAkKiAtcCAkKG5vdGRpciAkKikgJDwKKwliaXNvbiAtbCAtYiAkKiAtcCAkKG5vdGRpciAkKikgJDwKKwljcCAkQCAkQF9zaGlwcGVkCiAKIGxleC4lLmM6ICUubAotCWZsZXggLVAkKG5vdGRpciAkKikgLW8kQCAkPAorCWZsZXggLUwgLVAkKG5vdGRpciAkKikgLW8kQCAkPAorCWNwICRAICRAX3NoaXBwZWQKKworJS5oYXNoLmM6ICUuZ3BlcmYKKwlncGVyZiA8ICQ8ID4gJEAKKwljcCAkQCAkQF9zaGlwcGVkCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwppbmRleCBiYzIwY2FiLi44YmE1ZDI5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKQEAgLTgyLDYgKzgyLDE1IEBACiAJfQogCiAJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJY2FzZSBzZXRfbm86CisJY2FzZSBzZXRfbW9kOgorCWNhc2Ugc2V0X3llczoKKwljYXNlIHNldF9yYW5kb206CisJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJCXByaW50ZigiJXNcbiIsIGRlZik7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBhc2tfbmV3OgogCWNhc2UgYXNrX3NpbGVudDoKIAkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgewpAQCAtNDY3LDE1ICs0NzYsMTQgQEAKIAkJcmV0dXJuOwogCiAJc3ltID0gbWVudS0+c3ltOwotCWlmIChzeW0pIHsKLQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiAhc3ltX2hhc192YWx1ZShzeW0pKSB7CisJaWYgKHN5bSAmJiAhc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkgfHwKKwkJICAgIChzeW1faXNfY2hvaWNlKHN5bSkgJiYgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHllcykpIHsKIAkJCWlmICghY29uZl9jbnQrKykKIAkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIikpOwogCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50X21lbnUobWVudSk7CiAJCQljb25mKHJvb3RFbnRyeSk7CiAJCX0KLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgIT0gbW9kKQotCQkJcmV0dXJuOwogCX0KIAogCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkKQEAgLTU1OSw2ICs1NjcsMjcgQEAKIAljYXNlIGFza19uZXc6CiAJCWNvbmZfcmVhZChOVUxMKTsKIAkJYnJlYWs7CisJY2FzZSBzZXRfbm86CisJY2FzZSBzZXRfbW9kOgorCWNhc2Ugc2V0X3llczoKKwljYXNlIHNldF9yYW5kb206CisJCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfQUxMQ09ORklHIik7CisJCWlmIChuYW1lICYmICFzdGF0KG5hbWUsICZ0bXBzdGF0KSkgeworCQkJY29uZl9yZWFkX3NpbXBsZShuYW1lKTsKKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCQljYXNlIHNldF9ubzoJIG5hbWUgPSAiYWxsbm8uY29uZmlnIjsgYnJlYWs7CisJCWNhc2Ugc2V0X21vZDoJIG5hbWUgPSAiYWxsbW9kLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIHNldF95ZXM6CSBuYW1lID0gImFsbHllcy5jb25maWciOyBicmVhazsKKwkJY2FzZSBzZXRfcmFuZG9tOiBuYW1lID0gImFsbHJhbmRvbS5jb25maWciOyBicmVhazsKKwkJZGVmYXVsdDogYnJlYWs7CisJCX0KKwkJaWYgKCFzdGF0KG5hbWUsICZ0bXBzdGF0KSkKKwkJCWNvbmZfcmVhZF9zaW1wbGUobmFtZSk7CisJCWVsc2UgaWYgKCFzdGF0KCJhbGwuY29uZmlnIiwgJnRtcHN0YXQpKQorCQkJY29uZl9yZWFkX3NpbXBsZSgiYWxsLmNvbmZpZyIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCmluZGV4IDAyZjY3MGMuLmNjZDQ1MTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCkBAIC0xNCw2ICsxNCwxMiBAQAogI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAorc3RhdGljIHZvaWQgY29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7CitzdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dhcm5pbmdzLCBjb25mX3Vuc2F2ZWQ7CisKIGNvbnN0IGNoYXIgY29uZl9kZWZfZmlsZW5hbWVbXSA9ICIuY29uZmlnIjsKIAogY29uc3QgY2hhciBjb25mX2RlZm5hbWVbXSA9ICJhcmNoLyRBUkNIL2RlZmNvbmZpZyI7CkBAIC0yNyw2ICszMywxNyBAQAogCU5VTEwsCiB9OwogCitzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXApOworCWNvbmZfd2FybmluZ3MrKzsKK30KKwogc3RhdGljIGNoYXIgKmNvbmZfZXhwYW5kX3ZhbHVlKGNvbnN0IGNoYXIgKmluKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bTsKQEAgLTY5LDE1ICs4NiwxMiBAQAogCXJldHVybiBuYW1lOwogfQogCi1pbnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpCitpbnQgY29uZl9yZWFkX3NpbXBsZShjb25zdCBjaGFyICpuYW1lKQogewogCUZJTEUgKmluID0gTlVMTDsKIAljaGFyIGxpbmVbMTAyNF07CiAJY2hhciAqcCwgKnAyOwotCWludCBsaW5lbm8gPSAwOwogCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0Jc3RydWN0IGV4cHIgKmU7CiAJaW50IGk7CiAKIAlpZiAobmFtZSkgewpAQCAtOTUsMTIgKzEwOSwxOCBAQAogCQkJfQogCQl9CiAJfQotCiAJaWYgKCFpbikKIAkJcmV0dXJuIDE7CiAKKwljb25mX2ZpbGVuYW1lID0gbmFtZTsKKwljb25mX2xpbmVubyA9IDA7CisJY29uZl93YXJuaW5ncyA9IDA7CisJY29uZl91bnNhdmVkID0gMDsKKwogCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKIAkJc3ltLT5mbGFncyB8PSBTWU1CT0xfTkVXIHwgU1lNQk9MX0NIQU5HRUQ7CisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpCisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfTkVXOwogCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7CiAJCXN3aXRjaCAoc3ltLT50eXBlKSB7CiAJCWNhc2UgU19JTlQ6CkBAIC0xMTUsNyArMTM1LDcgQEAKIAl9CiAKIAl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKLQkJbGluZW5vKys7CisJCWNvbmZfbGluZW5vKys7CiAJCXN5bSA9IE5VTEw7CiAJCXN3aXRjaCAobGluZVswXSkgewogCQljYXNlICcjJzoKQEAgLTEyOSw3ICsxNDksMTAgQEAKIAkJCQljb250aW51ZTsKIAkJCXN5bSA9IHN5bV9maW5kKGxpbmUgKyA5KTsKIAkJCWlmICghc3ltKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIlczolZDogdHJ5aW5nIHRvIGFzc2lnbiBub25leGlzdGVudCBzeW1ib2wgJXNcbiIsIG5hbWUsIGxpbmVubywgbGluZSArIDkpOworCQkJCWNvbmZfd2FybmluZygidHJ5aW5nIHRvIGFzc2lnbiBub25leGlzdGVudCBzeW1ib2wgJXMiLCBsaW5lICsgOSk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9ORVcpKSB7CisJCQkJY29uZl93YXJuaW5nKCJ0cnlpbmcgdG8gcmVhc3NpZ24gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXN3aXRjaCAoc3ltLT50eXBlKSB7CkBAIC0xNDMsOCArMTY2LDEwIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAnQyc6Ci0JCQlpZiAobWVtY21wKGxpbmUsICJDT05GSUdfIiwgNykpCisJCQlpZiAobWVtY21wKGxpbmUsICJDT05GSUdfIiwgNykpIHsKKwkJCQljb25mX3dhcm5pbmcoInVuZXhwZWN0ZWQgZGF0YSIpOwogCQkJCWNvbnRpbnVlOworCQkJfQogCQkJcCA9IHN0cmNocihsaW5lICsgNywgJz0nKTsKIAkJCWlmICghcCkKIAkJCQljb250aW51ZTsKQEAgLTE1NCw3ICsxNzksMTAgQEAKIAkJCQkqcDIgPSAwOwogCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDcpOwogCQkJaWYgKCFzeW0pIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiB0cnlpbmcgdG8gYXNzaWduIG5vbmV4aXN0ZW50IHN5bWJvbCAlc1xuIiwgbmFtZSwgbGluZW5vLCBsaW5lICsgNyk7CisJCQkJY29uZl93YXJuaW5nKCJ0cnlpbmcgdG8gYXNzaWduIG5vbmV4aXN0ZW50IHN5bWJvbCAlcyIsIGxpbmUgKyA3KTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX05FVykpIHsKKwkJCQljb25mX3dhcm5pbmcoInRyeWluZyB0byByZWFzc2lnbiBzeW1ib2wgJXMiLCBzeW0tPm5hbWUpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKQEAgLTE3NSw2ICsyMDMsNyBAQAogCQkJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfTkVXOwogCQkJCQlicmVhazsKIAkJCQl9CisJCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIsIHAsIHN5bS0+bmFtZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNfU1RSSU5HOgogCQkJCWlmICgqcCsrICE9ICciJykKQEAgLTE4Nyw4ICsyMTYsOCBAQAogCQkJCQltZW1tb3ZlKHAyLCBwMiArIDEsIHN0cmxlbihwMikpOwogCQkJCX0KIAkJCQlpZiAoIXAyKSB7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGludmFsaWQgc3RyaW5nIGZvdW5kXG4iLCBuYW1lLCBsaW5lbm8pOwotCQkJCQlleGl0KDEpOworCQkJCQljb25mX3dhcm5pbmcoImludmFsaWQgc3RyaW5nIGZvdW5kIik7CisJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCWNhc2UgU19JTlQ6CiAJCQljYXNlIFNfSEVYOgpAQCAtMTk2LDggKzIyNSw4IEBACiAJCQkJCXN5bS0+dXNlci52YWwgPSBzdHJkdXAocCk7CiAJCQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORVc7CiAJCQkJfSBlbHNlIHsKLQkJCQkJZnByaW50ZihzdGRlcnIsICIlczolZDogc3ltYm9sIHZhbHVlICclcycgaW52YWxpZCBmb3IgJXNcbiIsIG5hbWUsIGxpbmVubywgcCwgc3ltLT5uYW1lKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIsIHAsIHN5bS0+bmFtZSk7CisJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC0yMDcsNiArMjM2LDcgQEAKIAkJY2FzZSAnXG4nOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CisJCQljb25mX3dhcm5pbmcoInVuZXhwZWN0ZWQgZGF0YSIpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKQEAgLTIxNSwyNSArMjQ1LDYzIEBACiAJCQljYXNlIG5vOgogCQkJCWJyZWFrOwogCQkJY2FzZSBtb2Q6Ci0JCQkJaWYgKGNzLT51c2VyLnRyaSA9PSB5ZXMpCi0JCQkJCS8qIHdhcm4/ICovOworCQkJCWlmIChjcy0+dXNlci50cmkgPT0geWVzKSB7CisJCQkJCWNvbmZfd2FybmluZygiJXMgY3JlYXRlcyBpbmNvbnNpc3RlbnQgY2hvaWNlIHN0YXRlIiwgc3ltLT5uYW1lKTsKKwkJCQkJY3MtPmZsYWdzIHw9IFNZTUJPTF9ORVc7CisJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSB5ZXM6Ci0JCQkJaWYgKGNzLT51c2VyLnRyaSAhPSBubykKLQkJCQkJLyogd2Fybj8gKi87Ci0JCQkJY3MtPnVzZXIudmFsID0gc3ltOworCQkJCWlmIChjcy0+dXNlci50cmkgIT0gbm8pIHsKKwkJCQkJY29uZl93YXJuaW5nKCIlcyBjcmVhdGVzIGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJCQljcy0+ZmxhZ3MgfD0gU1lNQk9MX05FVzsKKwkJCQl9IGVsc2UKKwkJCQkJY3MtPnVzZXIudmFsID0gc3ltOwogCQkJCWJyZWFrOwogCQkJfQogCQkJY3MtPnVzZXIudHJpID0gRV9PUihjcy0+dXNlci50cmksIHN5bS0+dXNlci50cmkpOwotCQkJY3MtPmZsYWdzICY9IH5TWU1CT0xfTkVXOwogCQl9CiAJfQogCWZjbG9zZShpbik7CiAKIAlpZiAobW9kdWxlc19zeW0pCiAJCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZfcmVhZChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisJaW50IGk7CisKKwlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lKSkKKwkJcmV0dXJuIDE7CisKIAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CiAJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgfHwgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQVVUTykpCisJCQlnb3RvIHN5bV9vazsKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAmJiAoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpIHsKKwkJCS8qIGNoZWNrIHRoYXQgY2FsY3VsYXRlZCB2YWx1ZSBhZ3JlZXMgd2l0aCBzYXZlZCB2YWx1ZSAqLworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCWNhc2UgU19CT09MRUFOOgorCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCWlmIChzeW0tPnVzZXIudHJpICE9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpCisJCQkJCWdvdG8gc3ltX29rOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoIXN0cmNtcChzeW0tPmN1cnIudmFsLCBzeW0tPnVzZXIudmFsKSkKKwkJCQkJZ290byBzeW1fb2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQorCQkJLyogbm8gcHJldmlvdXMgdmFsdWUgYW5kIG5vdCBzYXZlZCAqLworCQkJZ290byBzeW1fb2s7CisJCWNvbmZfdW5zYXZlZCsrOworCQkvKiBtYXliZSBwcmludCB2YWx1ZSBpbiB2ZXJib3NlIG1vZGUuLi4gKi8KKwlzeW1fb2s6CiAJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgewogCQkJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKIAkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ORVc7CkBAIC0yNDEsOCArMzA5LDEwIEBACiAJCQljYXNlIFNfU1RSSU5HOgogCQkJY2FzZSBTX0lOVDoKIAkJCWNhc2UgU19IRVg6Ci0JCQkJaWYgKCFzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzeW0sIHN5bS0+dXNlci52YWwpKQorCQkJCWlmICghc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3ltLCBzeW0tPnVzZXIudmFsKSkgewogCQkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ORVc7CisJCQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsKKwkJCQl9CiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjU1LDcgKzMyNSw3IEBACiAJCQkJc3ltLT5mbGFncyB8PSBlLT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX05FVzsKIAl9CiAKLQlzeW1fY2hhbmdlX2NvdW50ID0gMTsKKwlzeW1fY2hhbmdlX2NvdW50ID0gY29uZl93YXJuaW5ncyAmJiBjb25mX3Vuc2F2ZWQ7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9leHByLmggYi9zY3JpcHRzL2tjb25maWcvZXhwci5oCmluZGV4IDdkMzlmZjQuLjFiMzZlZjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9leHByLmgKKysrIGIvc2NyaXB0cy9rY29uZmlnL2V4cHIuaApAQCAtOTMsNyArOTMsNiBAQAogI2RlZmluZSBTWU1CT0xfTkVXCQkweDA4MDAKICNkZWZpbmUgU1lNQk9MX0FVVE8JCTB4MTAwMAogI2RlZmluZSBTWU1CT0xfQ0hFQ0tFRAkJMHgyMDAwCi0jZGVmaW5lIFNZTUJPTF9DSEVDS19ET05FCTB4NDAwMAogI2RlZmluZSBTWU1CT0xfV0FSTkVECQkweDgwMDAKIAogI2RlZmluZSBTWU1CT0xfTUFYTEVOR1RICTI1NgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZAppbmRleCAyMmRkYTExZi4uMjRlM2M4YyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jX3NoaXBwZWQKQEAgLTEsNSArMSw1IEBACiAKLSNsaW5lIDMgImxleC56Y29uZi5jIgorI2xpbmUgMyAic2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jIgogCiAjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKIApAQCAtMzIzLDcgKzMyMyw3IEBACiAKIC8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KIAotI2RlZmluZSB6Y29uZndyYXAobikgMQorI2RlZmluZSB6Y29uZndyYXAoKSAxCiAjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwpAQCAtMzM4LDE1NjcgKzMzOCwzMjMgQEAKIAogZXh0ZXJuIGNoYXIgKnpjb25mdGV4dDsKICNkZWZpbmUgeXl0ZXh0X3B0ciB6Y29uZnRleHQKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbXVszOF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFtdWzE3XSA9CiAgICAgewogICAgIHsKICAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxMiwgICAxMiwgICAxNSwgICAxMiwgICAxMiwgICAxMiwKLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwKLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwKLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMgorICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxMiwgICAxMiwgICAxNSwgICAxMiwgICAxMiwgICAxMiwKLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwKLQotICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLAotICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyCisgICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LAotICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLAotICAgICAgIDIxLCAgIDIyLCAgIDE4LCAgIDE4LCAgIDIzLCAgIDI0LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDI2LAotICAgICAgIDI3LCAgIDE4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDE4LCAgIDE4LCAgIDE2CisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTgsICAgMTYsICAgMTYsICAgMTYKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LAotICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLAotICAgICAgIDIxLCAgIDIyLCAgIDE4LCAgIDE4LCAgIDIzLCAgIDI0LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDI2LAotICAgICAgIDI3LCAgIDE4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDE4LCAgIDE4LCAgIDE2CisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTgsICAgMTYsICAgMTYsICAgMTYKIAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgMzEsICAgMzIsICAgMzMsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEKKyAgICAgICAxMSwgICAxOSwgICAyMCwgICAyMSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwKKyAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOQogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgMzEsICAgMzIsICAgMzMsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEKKyAgICAgICAxMSwgICAxOSwgICAyMCwgICAyMSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwKKyAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOQogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAgMzYsICAgMzQsICAgMzQsICAgMzYsICAgMzQsCi0gICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzcsICAgMzQsICAgMzQsICAgMzQsICAgMzQsCi0KLSAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKLSAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNAorICAgICAgIDExLCAgIDIyLCAgIDIyLCAgIDIzLCAgIDIyLCAgIDI0LCAgIDIyLCAgIDIyLCAgIDI0LCAgIDIyLAorICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDI1LCAgIDIyCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICAzNCwgICAzNCwgICAzNSwgICAzNCwgICAzNiwgICAzNCwgICAzNCwgICAzNiwgICAzNCwKLSAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNywgICAzNCwgICAzNCwgICAzNCwgICAzNCwKLSAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwKLSAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNAorICAgICAgIDExLCAgIDIyLCAgIDIyLCAgIDIzLCAgIDIyLCAgIDI0LCAgIDIyLCAgIDIyLCAgIDI0LCAgIDIyLAorICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDI1LCAgIDIyCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICAzOCwgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0MSwgICA0NCwKLSAgICAgICA0NSwgICA0NiwgICA0NywgICA0NywgICA0OCwgICA0OSwgICA0NywgICA0NywgICA0NywgICA0NywKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA0NywgICA0NywgICA0NywgICA1MSwKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA1MgorICAgICAgIDExLCAgIDI2LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI5LCAgIDMyLAorICAgICAgIDMzLCAgIDM0LCAgIDM1LCAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4CiAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDM4LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQxLCAgIDQ0LAotICAgICAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LAotICAgICAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUxLAotICAgICAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUyCisgICAgICAgMTEsICAgMjYsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjksICAgMzIsCisgICAgICAgMzMsICAgMzQsICAgMzUsICAgMzUsICAgMzYsICAgMzcsICAgMzgKICAgICB9LAogCiAgICAgewogICAgICAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLAotICAgICAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLAotICAgICAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLAotICAgICAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExCisgICAgICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLAotICAgICAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLAotCi0gICAgICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsCi0gICAgICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIKKyAgICAgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMTMsICAgNTMsICAgNTQsICAtMTMsICAtMTMsICAgNTUsICAtMTMsICAtMTMsICAtMTMsCi0gICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsCi0gICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsCi0gICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMKKyAgICAgICAxMSwgIC0xMywgICAzOSwgICA0MCwgIC0xMywgIC0xMywgICA0MSwgIC0xMywgIC0xMywgIC0xMywKKyAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMwogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsCi0gICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsCi0gICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsCi0gICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQKKyAgICAgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNAogCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA1NiwgICA1NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NgorICAgICAgIDExLCAgIDQyLCAgIDQyLCAgIDQzLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLAorICAgICAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKLSAgICAgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKLSAgICAgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKLSAgICAgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNgorICAgICAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywKLSAgICAgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywKLQotICAgICAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LAotICAgICAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3CisgICAgICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LAotICAgICAgLTE4LCAgLTE4LCAgLTE4LCAgIDU4LCAgLTE4LCAgLTE4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTE4CisgICAgICAtMTgsICAtMTgsICAtMTgsICAgNDQsICAtMTgsICAtMTgsICAtMTgKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LAotICAgICAgLTE5LCAgLTE5LCAgLTE5LCAgIDU4LCAgLTE5LCAgLTE5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU5LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTE5CisgICAgICAgMTEsICAgNDUsICAgNDUsICAtMTksICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsCisgICAgICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUKIAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsCi0gICAgICAtMjAsICAtMjAsICAtMjAsICAgNTgsICAtMjAsICAtMjAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNjAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNjEsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjAKKyAgICAgICAxMSwgIC0yMCwgICA0NiwgICA0NywgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwKKyAgICAgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsCi0gICAgICAtMjEsICAtMjEsICAtMjEsICAgNTgsICAtMjEsICAtMjEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNjIsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjEKKyAgICAgICAxMSwgICA0OCwgIC0yMSwgIC0yMSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsCi0gICAgICAtMjIsICAtMjIsICAtMjIsICAgNTgsICAtMjIsICAtMjIsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0KLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA2MywgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0yMgorICAgICAgIDExLCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgLTIyLCAgIDQ5LCAgIDQ5LCAgLTIyLCAgIDQ5LAorICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgLTIyLCAgIDQ5CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywKLSAgICAgIC0yMywgIC0yMywgIC0yMywgICA1OCwgIC0yMywgIC0yMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA2NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0yMworICAgICAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwKLSAgICAgIC0yNCwgIC0yNCwgIC0yNCwgICA1OCwgIC0yNCwgIC0yNCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA2NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA2NiwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0yNAorICAgICAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0CiAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LAotICAgICAgLTI1LCAgLTI1LCAgLTI1LCAgIDU4LCAgLTI1LCAgLTI1LCAgIDU4LCAgIDY3LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDY4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTI1CisgICAgICAgMTEsICAgNTEsICAgNTEsICAgNTIsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LAotICAgICAgLTI2LCAgLTI2LCAgLTI2LCAgIDU4LCAgLTI2LCAgLTI2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDY5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTI2CisgICAgICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LAotICAgICAgLTI3LCAgLTI3LCAgLTI3LCAgIDU4LCAgLTI3LCAgLTI3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNzAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjcKKyAgICAgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNwogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsCi0gICAgICAtMjgsICAtMjgsICAtMjgsICAgNTgsICAtMjgsICAtMjgsICAgNTgsICAgNzEsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNzIsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjgKKyAgICAgIC0yOCwgIC0yOCwgIC0yOCwgIC0yOCwgICA1MywgIC0yOCwgIC0yOAogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksCi0gICAgICAtMjksICAtMjksICAtMjksICAgNTgsICAtMjksICAtMjksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNzMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNzQsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNzUsICAgNTgsICAgNTgsICAtMjkKKyAgICAgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOQogCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwKLSAgICAgIC0zMCwgIC0zMCwgIC0zMCwgICA1OCwgIC0zMCwgIC0zMCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA3NiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0zMAorICAgICAgIDExLCAgIDU0LCAgIDU0LCAgLTMwLCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LAorICAgICAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA3NywgICA3NywgIC0zMSwgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywKLSAgICAgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywKLSAgICAgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywKLSAgICAgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NworICAgICAgIDExLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgIDU1LCAgLTMxLCAgLTMxLAorICAgICAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC0zMiwgICA3OCwgICA3OSwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwKLSAgICAgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwKLQotICAgICAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLAotICAgICAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyCisgICAgICAgMTEsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsCisgICAgICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDgwLCAgLTMzLCAgLTMzLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwCisgICAgICAgMTEsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsCisgICAgICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgxLCAgLTM0LCAgIDgxLCAgIDgxLCAgLTM0LCAgIDgxLAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgLTM0LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxCisgICAgICAgMTEsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsCisgICAgICAtMzQsICAgNTYsICAgNTcsICAgNTcsICAtMzQsICAtMzQsICAtMzQKIAogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsCi0gICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsCi0gICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsCi0gICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUKKyAgICAgIC0zNSwgICA1NywgICA1NywgICA1NywgIC0zNSwgIC0zNSwgIC0zNQogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCi0gICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCi0gICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCi0gICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYKKyAgICAgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgODMsICAgODMsICAgODQsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0KLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgICAgIDExLCAgLTM3LCAgLTM3LCAgIDU4LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LAorICAgICAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKLSAgICAgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKLSAgICAgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKLSAgICAgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOAorICAgICAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgIDU5CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwKLSAgICAgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwKLSAgICAgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwKLSAgICAgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOQorICAgICAgIDExLCAgLTM5LCAgIDM5LCAgIDQwLCAgLTM5LCAgLTM5LCAgIDQxLCAgLTM5LCAgLTM5LCAgLTM5LAorICAgICAgLTM5LCAgLTM5LCAgLTM5LCAgLTM5LCAgLTM5LCAgLTM5LCAgLTM5CiAKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLAotICAgICAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgIDg1LCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLAotICAgICAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLAotICAgICAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwCisgICAgICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLAotICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLAotICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLAotICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxCisgICAgICAgMTEsICAgNDIsICAgNDIsICAgNDMsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsCisgICAgICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDg2LCAgIDg2LCAgLTQyLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYKKyAgICAgICAxMSwgICA0MiwgICA0MiwgICA0MywgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwKKyAgICAgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAgODcsICAtNDMsICAtNDMsCi0gICAgICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsCi0gICAgICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsCi0gICAgICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMKKyAgICAgICAxMSwgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywKKyAgICAgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MwogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCi0gICAgICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCi0gICAgICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCi0gICAgICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQKKyAgICAgIC00NCwgIC00NCwgIC00NCwgICA0NCwgIC00NCwgIC00NCwgIC00NAogCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwKLSAgICAgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwKLSAgICAgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwKLSAgICAgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NQorICAgICAgIDExLCAgIDQ1LCAgIDQ1LCAgLTQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LAorICAgICAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwKLSAgICAgIC00NiwgICA4OCwgICA4OSwgICA4OSwgIC00NiwgIC00NiwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgIC00NgorICAgICAgIDExLCAgLTQ2LCAgIDQ2LCAgIDQ3LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LAorICAgICAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywKLSAgICAgIC00NywgICA4OSwgICA4OSwgICA4OSwgIC00NywgIC00NywgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLQotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgLTQ3CisgICAgICAgMTEsICAgNDgsICAtNDcsICAtNDcsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LAotICAgICAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LAotICAgICAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LAotICAgICAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4CisgICAgICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTQ5LCAgLTQ5LCAgIDkwLCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAotICAgICAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAotICAgICAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAotICAgICAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5CisgICAgICAgMTEsICAgNDksICAgNDksICAgNTAsICAgNDksICAtNDksICAgNDksICAgNDksICAtNDksICAgNDksCisgICAgICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAtNDksICAgNDkKIAogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsCi0gICAgICAtNTAsICAgODksICAgODksICAgODksICAtNTAsICAtNTAsICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgOTEsICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAtNTAKKyAgICAgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsCi0gICAgICAtNTEsICAgODksICAgODksICAgODksICAtNTEsICAtNTEsICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgOTIsICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAtNTEKKyAgICAgICAxMSwgIC01MSwgIC01MSwgICA1MiwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKKyAgICAgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MQogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsCi0gICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsCi0KLSAgICAgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwKLSAgICAgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgICA5MworICAgICAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC01MywgICA1MywgICA1NCwgIC01MywgIC01MywgICA1NSwgIC01MywgIC01MywgIC01MywKLSAgICAgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywKLSAgICAgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywKLSAgICAgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MworICAgICAgIDExLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLAorICAgICAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwKLSAgICAgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwKLSAgICAgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwKLSAgICAgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NAorICAgICAgIDExLCAgIDU0LCAgIDU0LCAgLTU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LAorICAgICAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0CiAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2CisgICAgICAgMTEsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsCisgICAgICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2CisgICAgICAgMTEsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsCisgICAgICAtNTYsICAgNjAsICAgNTcsICAgNTcsICAtNTYsICAtNTYsICAtNTYKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LAotICAgICAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LAotCi0gICAgICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsCi0gICAgICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcKKyAgICAgIC01NywgICA1NywgICA1NywgICA1NywgIC01NywgIC01NywgIC01NwogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsCi0gICAgICAtNTgsICAtNTgsICAtNTgsICAgNTgsICAtNTgsICAtNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNTgKKyAgICAgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OAogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksCi0gICAgICAtNTksICAtNTksICAtNTksICAgNTgsICAtNTksICAtNTksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTQsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNTkKKyAgICAgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OQogCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwKLSAgICAgIC02MCwgIC02MCwgIC02MCwgICA1OCwgIC02MCwgIC02MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5NSwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC02MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsCi0gICAgICAtNjEsICAtNjEsICAtNjEsICAgNTgsICAtNjEsICAtNjEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTYsICAgOTcsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNjEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLAotICAgICAgLTYyLCAgLTYyLCAgLTYyLCAgIDU4LCAgLTYyLCAgLTYyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgOTksICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNjIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLAotICAgICAgLTYzLCAgLTYzLCAgLTYzLCAgIDU4LCAgLTYzLCAgLTYzLCAgIDU4LCAgMTAwLCAgIDU4LCAgIDU4LAotICAgICAgMTAxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTYzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwKLSAgICAgIC02NCwgIC02NCwgIC02NCwgICA1OCwgIC02NCwgIC02NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEwMiwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEwMywgIC02NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02NSwgIC02NSwgIC02NSwgIC02NSwgIC02NSwgIC02NSwgIC02NSwgIC02NSwgIC02NSwKLSAgICAgIC02NSwgIC02NSwgIC02NSwgICA1OCwgIC02NSwgIC02NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC02NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsCi0gICAgICAtNjYsICAtNjYsICAtNjYsICAgNTgsICAtNjYsICAtNjYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDQsICAgNTgsICAgNTgsICAtNjYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTY3LCAgLTY3LCAgLTY3LCAgLTY3LCAgLTY3LCAgLTY3LCAgLTY3LCAgLTY3LCAgLTY3LAotICAgICAgLTY3LCAgLTY3LCAgLTY3LCAgIDU4LCAgLTY3LCAgLTY3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNjcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LAotICAgICAgLTY4LCAgLTY4LCAgLTY4LCAgIDU4LCAgLTY4LCAgLTY4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTA2LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTY4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02OSwgIC02OSwgIC02OSwgIC02OSwgIC02OSwgIC02OSwgIC02OSwgIC02OSwgIC02OSwKLSAgICAgIC02OSwgIC02OSwgIC02OSwgICA1OCwgIC02OSwgIC02OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEwNywgICA1OCwgICA1OCwgIC02OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwKLSAgICAgIC03MCwgIC03MCwgIC03MCwgICA1OCwgIC03MCwgIC03MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEwOCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC03MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsCi0gICAgICAtNzEsICAtNzEsICAtNzEsICAgNTgsICAtNzEsICAtNzEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDksICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNzEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLAotICAgICAgLTcyLCAgLTcyLCAgLTcyLCAgIDU4LCAgLTcyLCAgLTcyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxMTAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNzIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLAotICAgICAgLTczLCAgLTczLCAgLTczLCAgIDU4LCAgLTczLCAgLTczLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTExLCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTczCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC03NCwgIC03NCwgIC03NCwgIC03NCwgIC03NCwgIC03NCwgIC03NCwgIC03NCwgIC03NCwKLSAgICAgIC03NCwgIC03NCwgIC03NCwgICA1OCwgIC03NCwgIC03NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDExMiwgICA1OCwgIC03NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwKLSAgICAgIC03NSwgIC03NSwgIC03NSwgICA1OCwgIC03NSwgIC03NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgIDExMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC03NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNzYsICAtNzYsICAtNzYsICAtNzYsICAtNzYsICAtNzYsICAtNzYsICAtNzYsICAtNzYsCi0gICAgICAtNzYsICAtNzYsICAtNzYsICAgNTgsICAtNzYsICAtNzYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMTQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNzYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgIDc3LCAgIDc3LCAgLTc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LAotICAgICAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LAotCi0gICAgICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsCi0gICAgICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTc4LCAgIDc4LCAgIDc5LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LAotICAgICAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LAotICAgICAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LAotICAgICAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgICA4MCwgIC03OSwgIC03OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwKLSAgICAgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwKLSAgICAgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwKLSAgICAgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgODEsICAgODEsICAgODIsICAgODEsICAtODEsICAgODEsICAgODEsICAtODEsICAgODEsCi0gICAgICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAtODEsICAgODEsICAgODEsICAgODEsICAgODEsCi0gICAgICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsCi0gICAgICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLAotICAgICAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLAotCi0gICAgICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsCi0gICAgICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIsICAtODIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTgzLCAgLTgzLCAgIDg0LCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLAotICAgICAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLAotICAgICAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLAotICAgICAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzLCAgLTgzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwKLSAgICAgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwKLSAgICAgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwKLSAgICAgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NCwgIC04NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwKLSAgICAgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwKLSAgICAgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwKLSAgICAgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NSwgIC04NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgODYsICAgODYsICAtODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LAotICAgICAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LAotCi0gICAgICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsCi0gICAgICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcsICAtODcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTg4LCAgLTg4LCAgLTg4LCAgLTg4LCAgLTg4LCAgLTg4LCAgLTg4LCAgLTg4LCAgLTg4LAotICAgICAgLTg4LCAgMTE1LCAgIDg5LCAgIDg5LCAgLTg4LCAgLTg4LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgLTg4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04OSwgIC04OSwgIC04OSwgIC04OSwgIC04OSwgIC04OSwgIC04OSwgIC04OSwgIC04OSwKLSAgICAgIC04OSwgICA4OSwgICA4OSwgICA4OSwgIC04OSwgIC04OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgIC04OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwKLSAgICAgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwKLSAgICAgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwKLSAgICAgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MCwgIC05MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtOTEsICAtOTEsICAtOTEsICAtOTEsICAtOTEsICAtOTEsICAtOTEsICAtOTEsICAtOTEsCi0gICAgICAtOTEsICAgODksICAgODksICAgODksICAtOTEsICAtOTEsICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAtOTEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTkyLCAgLTkyLCAgLTkyLCAgLTkyLCAgLTkyLCAgLTkyLCAgLTkyLCAgLTkyLCAgLTkyLAotICAgICAgLTkyLCAgIDg5LCAgIDg5LCAgIDg5LCAgLTkyLCAgLTkyLCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAtOTIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLAotICAgICAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLAotICAgICAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLAotICAgICAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzLCAgLTkzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05NCwgIC05NCwgIC05NCwgIC05NCwgIC05NCwgIC05NCwgIC05NCwgIC05NCwgIC05NCwKLSAgICAgIC05NCwgIC05NCwgIC05NCwgICA1OCwgIC05NCwgIC05NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDExNiwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC05NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05NSwgIC05NSwgIC05NSwgIC05NSwgIC05NSwgIC05NSwgIC05NSwgIC05NSwgIC05NSwKLSAgICAgIC05NSwgIC05NSwgIC05NSwgICA1OCwgIC05NSwgIC05NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDExNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC05NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtOTYsICAtOTYsICAtOTYsICAtOTYsICAtOTYsICAtOTYsICAtOTYsICAtOTYsICAtOTYsCi0gICAgICAtOTYsICAtOTYsICAtOTYsICAgNTgsICAtOTYsICAtOTYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtOTYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTk3LCAgLTk3LCAgLTk3LCAgLTk3LCAgLTk3LCAgLTk3LCAgLTk3LCAgLTk3LCAgLTk3LAotICAgICAgLTk3LCAgLTk3LCAgLTk3LCAgIDU4LCAgLTk3LCAgLTk3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAxMTksICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtOTcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTk4LCAgLTk4LCAgLTk4LCAgLTk4LCAgLTk4LCAgLTk4LCAgLTk4LCAgLTk4LCAgLTk4LAotICAgICAgLTk4LCAgLTk4LCAgLTk4LCAgIDU4LCAgLTk4LCAgLTk4LCAgMTIwLCAgMTIxLCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTk4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05OSwgIC05OSwgIC05OSwgIC05OSwgIC05OSwgIC05OSwgIC05OSwgIC05OSwgIC05OSwKLSAgICAgIC05OSwgIC05OSwgIC05OSwgICA1OCwgIC05OSwgIC05OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDEyMiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC05OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwKLSAgICAgLTEwMCwgLTEwMCwgLTEwMCwgICA1OCwgLTEwMCwgLTEwMCwgICA1OCwgICA1OCwgIDEyMywgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEwMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMDEsIC0xMDEsIC0xMDEsIC0xMDEsIC0xMDEsIC0xMDEsIC0xMDEsIC0xMDEsIC0xMDEsCi0gICAgIC0xMDEsIC0xMDEsIC0xMDEsICAgNTgsIC0xMDEsIC0xMDEsICAgNTgsICAgNTgsICAgNTgsICAxMjQsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMjUsICAgNTgsICAxMjYsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTAyLCAtMTAyLCAtMTAyLCAtMTAyLCAtMTAyLCAtMTAyLCAtMTAyLCAtMTAyLCAtMTAyLAotICAgICAtMTAyLCAtMTAyLCAtMTAyLCAgIDU4LCAtMTAyLCAtMTAyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAxMjcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTAzLCAtMTAzLCAtMTAzLCAtMTAzLCAtMTAzLCAtMTAzLCAtMTAzLCAtMTAzLCAtMTAzLAotICAgICAtMTAzLCAtMTAzLCAtMTAzLCAgIDU4LCAtMTAzLCAtMTAzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTAzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwNCwgLTEwNCwgLTEwNCwgLTEwNCwgLTEwNCwgLTEwNCwgLTEwNCwgLTEwNCwgLTEwNCwKLSAgICAgLTEwNCwgLTEwNCwgLTEwNCwgICA1OCwgLTEwNCwgLTEwNCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEwNAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwNSwgLTEwNSwgLTEwNSwgLTEwNSwgLTEwNSwgLTEwNSwgLTEwNSwgLTEwNSwgLTEwNSwKLSAgICAgLTEwNSwgLTEwNSwgLTEwNSwgICA1OCwgLTEwNSwgLTEwNSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEyOCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEwNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMDYsIC0xMDYsIC0xMDYsIC0xMDYsIC0xMDYsIC0xMDYsIC0xMDYsIC0xMDYsIC0xMDYsCi0gICAgIC0xMDYsIC0xMDYsIC0xMDYsICAgNTgsIC0xMDYsIC0xMDYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMjksICAgNTgsIC0xMDYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTA3LCAtMTA3LCAtMTA3LCAtMTA3LCAtMTA3LCAtMTA3LCAtMTA3LCAtMTA3LCAtMTA3LAotICAgICAtMTA3LCAtMTA3LCAtMTA3LCAgIDU4LCAtMTA3LCAtMTA3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMzAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTA4LCAtMTA4LCAtMTA4LCAtMTA4LCAtMTA4LCAtMTA4LCAtMTA4LCAtMTA4LCAtMTA4LAotICAgICAtMTA4LCAtMTA4LCAtMTA4LCAgIDU4LCAtMTA4LCAtMTA4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTMxLCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTA4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwOSwgLTEwOSwgLTEwOSwgLTEwOSwgLTEwOSwgLTEwOSwgLTEwOSwgLTEwOSwgLTEwOSwKLSAgICAgLTEwOSwgLTEwOSwgLTEwOSwgICA1OCwgLTEwOSwgLTEwOSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgIDEzMiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEwOQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExMCwgLTExMCwgLTExMCwgLTExMCwgLTExMCwgLTExMCwgLTExMCwgLTExMCwgLTExMCwKLSAgICAgLTExMCwgLTExMCwgLTExMCwgICA1OCwgLTExMCwgLTExMCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEzMywgICA1OCwgLTExMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMTEsIC0xMTEsIC0xMTEsIC0xMTEsIC0xMTEsIC0xMTEsIC0xMTEsIC0xMTEsIC0xMTEsCi0gICAgIC0xMTEsIC0xMTEsIC0xMTEsICAgNTgsIC0xMTEsIC0xMTEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxMzQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMTEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTEyLCAtMTEyLCAtMTEyLCAtMTEyLCAtMTEyLCAtMTEyLCAtMTEyLCAtMTEyLCAtMTEyLAotICAgICAtMTEyLCAtMTEyLCAtMTEyLCAgIDU4LCAtMTEyLCAtMTEyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAxMzUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMTIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTEzLCAtMTEzLCAtMTEzLCAtMTEzLCAtMTEzLCAtMTEzLCAtMTEzLCAtMTEzLCAtMTEzLAotICAgICAtMTEzLCAtMTEzLCAtMTEzLCAgIDU4LCAtMTEzLCAtMTEzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTM2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTEzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExNCwgLTExNCwgLTExNCwgLTExNCwgLTExNCwgLTExNCwgLTExNCwgLTExNCwgLTExNCwKLSAgICAgLTExNCwgLTExNCwgLTExNCwgICA1OCwgLTExNCwgLTExNCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgIDEzNywgICA1OCwgICA1OCwgICA1OCwgLTExNAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExNSwgLTExNSwgLTExNSwgLTExNSwgLTExNSwgLTExNSwgLTExNSwgLTExNSwgLTExNSwKLSAgICAgLTExNSwgICA4OSwgICA4OSwgICA4OSwgLTExNSwgLTExNSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgLTExNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMTYsIC0xMTYsIC0xMTYsIC0xMTYsIC0xMTYsIC0xMTYsIC0xMTYsIC0xMTYsIC0xMTYsCi0gICAgIC0xMTYsIC0xMTYsIC0xMTYsICAgNTgsIC0xMTYsIC0xMTYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxMzgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMTYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTE3LCAtMTE3LCAtMTE3LCAtMTE3LCAtMTE3LCAtMTE3LCAtMTE3LCAtMTE3LCAtMTE3LAotICAgICAtMTE3LCAtMTE3LCAtMTE3LCAgIDU4LCAtMTE3LCAtMTE3LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTM5LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMTcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTE4LCAtMTE4LCAtMTE4LCAtMTE4LCAtMTE4LCAtMTE4LCAtMTE4LCAtMTE4LCAtMTE4LAotICAgICAtMTE4LCAtMTE4LCAtMTE4LCAgIDU4LCAtMTE4LCAtMTE4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMTQwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTE4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExOSwgLTExOSwgLTExOSwgLTExOSwgLTExOSwgLTExOSwgLTExOSwgLTExOSwgLTExOSwKLSAgICAgLTExOSwgLTExOSwgLTExOSwgICA1OCwgLTExOSwgLTExOSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE0MSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTExOQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyMCwgLTEyMCwgLTEyMCwgLTEyMCwgLTEyMCwgLTEyMCwgLTEyMCwgLTEyMCwgLTEyMCwKLSAgICAgLTEyMCwgLTEyMCwgLTEyMCwgICA1OCwgLTEyMCwgLTEyMCwgICA1OCwgICA1OCwgIDE0MiwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE0MywgICA1OCwgICA1OCwgLTEyMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMjEsIC0xMjEsIC0xMjEsIC0xMjEsIC0xMjEsIC0xMjEsIC0xMjEsIC0xMjEsIC0xMjEsCi0gICAgIC0xMjEsIC0xMjEsIC0xMjEsICAgNTgsIC0xMjEsIC0xMjEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNDQsICAgNTgsIC0xMjEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTIyLCAtMTIyLCAtMTIyLCAtMTIyLCAtMTIyLCAtMTIyLCAtMTIyLCAtMTIyLCAtMTIyLAotICAgICAtMTIyLCAtMTIyLCAtMTIyLCAgIDU4LCAtMTIyLCAtMTIyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNDUsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMjIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTIzLCAtMTIzLCAtMTIzLCAtMTIzLCAtMTIzLCAtMTIzLCAtMTIzLCAtMTIzLCAtMTIzLAotICAgICAtMTIzLCAtMTIzLCAtMTIzLCAgIDU4LCAtMTIzLCAtMTIzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTQ2LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTIzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyNCwKLSAgICAgLTEyNCwgLTEyNCwgLTEyNCwgICA1OCwgLTEyNCwgLTEyNCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE0NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEyNAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyNSwgLTEyNSwgLTEyNSwgLTEyNSwgLTEyNSwgLTEyNSwgLTEyNSwgLTEyNSwgLTEyNSwKLSAgICAgLTEyNSwgLTEyNSwgLTEyNSwgICA1OCwgLTEyNSwgLTEyNSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgIDE0OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEyNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMjYsIC0xMjYsIC0xMjYsIC0xMjYsIC0xMjYsIC0xMjYsIC0xMjYsIC0xMjYsIC0xMjYsCi0gICAgIC0xMjYsIC0xMjYsIC0xMjYsICAgNTgsIC0xMjYsIC0xMjYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxNDksICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMjYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTI3LCAtMTI3LCAtMTI3LCAtMTI3LCAtMTI3LCAtMTI3LCAtMTI3LCAtMTI3LCAtMTI3LAotICAgICAtMTI3LCAtMTI3LCAtMTI3LCAgIDU4LCAtMTI3LCAtMTI3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMjcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LAotICAgICAtMTI4LCAtMTI4LCAtMTI4LCAgIDU4LCAtMTI4LCAtMTI4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTUwLCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTI4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyOSwgLTEyOSwgLTEyOSwgLTEyOSwgLTEyOSwgLTEyOSwgLTEyOSwgLTEyOSwgLTEyOSwKLSAgICAgLTEyOSwgLTEyOSwgLTEyOSwgICA1OCwgLTEyOSwgLTEyOSwgICA1OCwgICA1OCwgICA1OCwgIDE1MSwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEyOQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzMCwgLTEzMCwgLTEzMCwgLTEzMCwgLTEzMCwgLTEzMCwgLTEzMCwgLTEzMCwgLTEzMCwKLSAgICAgLTEzMCwgLTEzMCwgLTEzMCwgICA1OCwgLTEzMCwgLTEzMCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE1MiwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEzMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMzEsIC0xMzEsIC0xMzEsIC0xMzEsIC0xMzEsIC0xMzEsIC0xMzEsIC0xMzEsIC0xMzEsCi0gICAgIC0xMzEsIC0xMzEsIC0xMzEsICAgNTgsIC0xMzEsIC0xMzEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAxNTMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTMyLCAtMTMyLCAtMTMyLCAtMTMyLCAtMTMyLCAtMTMyLCAtMTMyLCAtMTMyLCAtMTMyLAotICAgICAtMTMyLCAtMTMyLCAtMTMyLCAgIDU4LCAtMTMyLCAtMTMyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAxNTQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTMzLCAtMTMzLCAtMTMzLCAtMTMzLCAtMTMzLCAtMTMzLCAtMTMzLCAtMTMzLCAtMTMzLAotICAgICAtMTMzLCAtMTMzLCAtMTMzLCAgIDU4LCAtMTMzLCAtMTMzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTU1LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTMzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzNCwgLTEzNCwgLTEzNCwgLTEzNCwgLTEzNCwgLTEzNCwgLTEzNCwgLTEzNCwgLTEzNCwKLSAgICAgLTEzNCwgLTEzNCwgLTEzNCwgICA1OCwgLTEzNCwgLTEzNCwgICA1OCwgICA1OCwgICA1OCwgIDE1NiwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEzNAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzNSwgLTEzNSwgLTEzNSwgLTEzNSwgLTEzNSwgLTEzNSwgLTEzNSwgLTEzNSwgLTEzNSwKLSAgICAgLTEzNSwgLTEzNSwgLTEzNSwgICA1OCwgLTEzNSwgLTEzNSwgICA1OCwgICA1OCwgICA1OCwgIDE1NywKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEzNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMzYsIC0xMzYsIC0xMzYsIC0xMzYsIC0xMzYsIC0xMzYsIC0xMzYsIC0xMzYsIC0xMzYsCi0gICAgIC0xMzYsIC0xMzYsIC0xMzYsICAgNTgsIC0xMzYsIC0xMzYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTM3LCAtMTM3LCAtMTM3LCAtMTM3LCAtMTM3LCAtMTM3LCAtMTM3LCAtMTM3LCAtMTM3LAotICAgICAtMTM3LCAtMTM3LCAtMTM3LCAgIDU4LCAtMTM3LCAtMTM3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNTksICAgNTgsICAgNTgsIC0xMzcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTM4LCAtMTM4LCAtMTM4LCAtMTM4LCAtMTM4LCAtMTM4LCAtMTM4LCAtMTM4LCAtMTM4LAotICAgICAtMTM4LCAtMTM4LCAtMTM4LCAgIDU4LCAtMTM4LCAtMTM4LCAgIDU4LCAgMTYwLCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTM4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzOSwgLTEzOSwgLTEzOSwgLTEzOSwgLTEzOSwgLTEzOSwgLTEzOSwgLTEzOSwgLTEzOSwKLSAgICAgLTEzOSwgLTEzOSwgLTEzOSwgICA1OCwgLTEzOSwgLTEzOSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDE2MSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEzOQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0MCwgLTE0MCwgLTE0MCwgLTE0MCwgLTE0MCwgLTE0MCwgLTE0MCwgLTE0MCwgLTE0MCwKLSAgICAgLTE0MCwgLTE0MCwgLTE0MCwgICA1OCwgLTE0MCwgLTE0MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE2MiwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE0MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNDEsIC0xNDEsIC0xNDEsIC0xNDEsIC0xNDEsIC0xNDEsIC0xNDEsIC0xNDEsIC0xNDEsCi0gICAgIC0xNDEsIC0xNDEsIC0xNDEsICAgNTgsIC0xNDEsIC0xNDEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAxNjMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTQyLCAtMTQyLCAtMTQyLCAtMTQyLCAtMTQyLCAtMTQyLCAtMTQyLCAtMTQyLCAtMTQyLAotICAgICAtMTQyLCAtMTQyLCAtMTQyLCAgIDU4LCAtMTQyLCAtMTQyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNjQsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTQzLCAtMTQzLCAtMTQzLCAtMTQzLCAtMTQzLCAtMTQzLCAtMTQzLCAtMTQzLCAtMTQzLAotICAgICAtMTQzLCAtMTQzLCAtMTQzLCAgIDU4LCAtMTQzLCAtMTQzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgMTY1LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTQzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0NCwgLTE0NCwgLTE0NCwgLTE0NCwgLTE0NCwgLTE0NCwgLTE0NCwgLTE0NCwgLTE0NCwKLSAgICAgLTE0NCwgLTE0NCwgLTE0NCwgICA1OCwgLTE0NCwgLTE0NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE2NiwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE0NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0NSwgLTE0NSwgLTE0NSwgLTE0NSwgLTE0NSwgLTE0NSwgLTE0NSwgLTE0NSwgLTE0NSwKLSAgICAgLTE0NSwgLTE0NSwgLTE0NSwgICA1OCwgLTE0NSwgLTE0NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgIDE2NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE0NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNDYsIC0xNDYsIC0xNDYsIC0xNDYsIC0xNDYsIC0xNDYsIC0xNDYsIC0xNDYsIC0xNDYsCi0gICAgIC0xNDYsIC0xNDYsIC0xNDYsICAgNTgsIC0xNDYsIC0xNDYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxNjgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTQ3LCAtMTQ3LCAtMTQ3LCAtMTQ3LCAtMTQ3LCAtMTQ3LCAtMTQ3LCAtMTQ3LCAtMTQ3LAotICAgICAtMTQ3LCAtMTQ3LCAtMTQ3LCAgIDU4LCAtMTQ3LCAtMTQ3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNjksCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTQ4LCAtMTQ4LCAtMTQ4LCAtMTQ4LCAtMTQ4LCAtMTQ4LCAtMTQ4LCAtMTQ4LCAtMTQ4LAotICAgICAtMTQ4LCAtMTQ4LCAtMTQ4LCAgIDU4LCAtMTQ4LCAtMTQ4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTQ4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0OSwgLTE0OSwgLTE0OSwgLTE0OSwgLTE0OSwgLTE0OSwgLTE0OSwgLTE0OSwgLTE0OSwKLSAgICAgLTE0OSwgLTE0OSwgLTE0OSwgICA1OCwgLTE0OSwgLTE0OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE3MCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE0OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1MCwgLTE1MCwgLTE1MCwgLTE1MCwgLTE1MCwgLTE1MCwgLTE1MCwgLTE1MCwgLTE1MCwKLSAgICAgLTE1MCwgLTE1MCwgLTE1MCwgICA1OCwgLTE1MCwgLTE1MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDE3MSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE1MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNTEsIC0xNTEsIC0xNTEsIC0xNTEsIC0xNTEsIC0xNTEsIC0xNTEsIC0xNTEsIC0xNTEsCi0gICAgIC0xNTEsIC0xNTEsIC0xNTEsICAgNTgsIC0xNTEsIC0xNTEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNzIsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTUyLCAtMTUyLCAtMTUyLCAtMTUyLCAtMTUyLCAtMTUyLCAtMTUyLCAtMTUyLCAtMTUyLAotICAgICAtMTUyLCAtMTUyLCAtMTUyLCAgIDU4LCAtMTUyLCAtMTUyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNzMsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTUzLCAtMTUzLCAtMTUzLCAtMTUzLCAtMTUzLCAtMTUzLCAtMTUzLCAtMTUzLCAtMTUzLAotICAgICAtMTUzLCAtMTUzLCAtMTUzLCAgIDU4LCAtMTUzLCAtMTUzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTc0LCAgIDU4LCAgIDU4LCAtMTUzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1NCwgLTE1NCwgLTE1NCwgLTE1NCwgLTE1NCwgLTE1NCwgLTE1NCwgLTE1NCwgLTE1NCwKLSAgICAgLTE1NCwgLTE1NCwgLTE1NCwgICA1OCwgLTE1NCwgLTE1NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE1NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1NSwgLTE1NSwgLTE1NSwgLTE1NSwgLTE1NSwgLTE1NSwgLTE1NSwgLTE1NSwgLTE1NSwKLSAgICAgLTE1NSwgLTE1NSwgLTE1NSwgICA1OCwgLTE1NSwgLTE1NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgIDE3NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE1NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNTYsIC0xNTYsIC0xNTYsIC0xNTYsIC0xNTYsIC0xNTYsIC0xNTYsIC0xNTYsIC0xNTYsCi0gICAgIC0xNTYsIC0xNTYsIC0xNTYsICAgNTgsIC0xNTYsIC0xNTYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNzYsICAgNTgsICAgNTgsIC0xNTYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTU3LCAtMTU3LCAtMTU3LCAtMTU3LCAtMTU3LCAtMTU3LCAtMTU3LCAtMTU3LCAtMTU3LAotICAgICAtMTU3LCAtMTU3LCAtMTU3LCAgIDU4LCAtMTU3LCAtMTU3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAxNzcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTU4LCAtMTU4LCAtMTU4LCAtMTU4LCAtMTU4LCAtMTU4LCAtMTU4LCAtMTU4LCAtMTU4LAotICAgICAtMTU4LCAtMTU4LCAtMTU4LCAgIDU4LCAtMTU4LCAtMTU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgMTc4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTU4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1OSwgLTE1OSwgLTE1OSwgLTE1OSwgLTE1OSwgLTE1OSwgLTE1OSwgLTE1OSwgLTE1OSwKLSAgICAgLTE1OSwgLTE1OSwgLTE1OSwgICA1OCwgLTE1OSwgLTE1OSwgICA1OCwgIDE3OSwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE1OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2MCwgLTE2MCwgLTE2MCwgLTE2MCwgLTE2MCwgLTE2MCwgLTE2MCwgLTE2MCwgLTE2MCwKLSAgICAgLTE2MCwgLTE2MCwgLTE2MCwgICA1OCwgLTE2MCwgLTE2MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE4MCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE2MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNjEsIC0xNjEsIC0xNjEsIC0xNjEsIC0xNjEsIC0xNjEsIC0xNjEsIC0xNjEsIC0xNjEsCi0gICAgIC0xNjEsIC0xNjEsIC0xNjEsICAgNTgsIC0xNjEsIC0xNjEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNjEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTYyLCAtMTYyLCAtMTYyLCAtMTYyLCAtMTYyLCAtMTYyLCAtMTYyLCAtMTYyLCAtMTYyLAotICAgICAtMTYyLCAtMTYyLCAtMTYyLCAgIDU4LCAtMTYyLCAtMTYyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODEsICAgNTgsICAgNTgsIC0xNjIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTYzLCAtMTYzLCAtMTYzLCAtMTYzLCAtMTYzLCAtMTYzLCAtMTYzLCAtMTYzLCAtMTYzLAotICAgICAtMTYzLCAtMTYzLCAtMTYzLCAgIDU4LCAtMTYzLCAtMTYzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTYzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2NCwgLTE2NCwgLTE2NCwgLTE2NCwgLTE2NCwgLTE2NCwgLTE2NCwgLTE2NCwgLTE2NCwKLSAgICAgLTE2NCwgLTE2NCwgLTE2NCwgICA1OCwgLTE2NCwgLTE2NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE4MiwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE2NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2NSwgLTE2NSwgLTE2NSwgLTE2NSwgLTE2NSwgLTE2NSwgLTE2NSwgLTE2NSwgLTE2NSwKLSAgICAgLTE2NSwgLTE2NSwgLTE2NSwgICA1OCwgLTE2NSwgLTE2NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE4MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE2NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNjYsIC0xNjYsIC0xNjYsIC0xNjYsIC0xNjYsIC0xNjYsIC0xNjYsIC0xNjYsIC0xNjYsCi0gICAgIC0xNjYsIC0xNjYsIC0xNjYsICAgNTgsIC0xNjYsIC0xNjYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODQsICAgNTgsICAgNTgsIC0xNjYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTY3LCAtMTY3LCAtMTY3LCAtMTY3LCAtMTY3LCAtMTY3LCAtMTY3LCAtMTY3LCAtMTY3LAotICAgICAtMTY3LCAtMTY3LCAtMTY3LCAgIDU4LCAtMTY3LCAtMTY3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAxODUsICAgNTgsICAgNTgsICAgNTgsIC0xNjcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTY4LCAtMTY4LCAtMTY4LCAtMTY4LCAtMTY4LCAtMTY4LCAtMTY4LCAtMTY4LCAtMTY4LAotICAgICAtMTY4LCAtMTY4LCAtMTY4LCAgIDU4LCAtMTY4LCAtMTY4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTY4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2OSwgLTE2OSwgLTE2OSwgLTE2OSwgLTE2OSwgLTE2OSwgLTE2OSwgLTE2OSwgLTE2OSwKLSAgICAgLTE2OSwgLTE2OSwgLTE2OSwgICA1OCwgLTE2OSwgLTE2OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE4NiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE2OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3MCwgLTE3MCwgLTE3MCwgLTE3MCwgLTE3MCwgLTE3MCwgLTE3MCwgLTE3MCwgLTE3MCwKLSAgICAgLTE3MCwgLTE3MCwgLTE3MCwgICA1OCwgLTE3MCwgLTE3MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE4NywgICA1OCwgLTE3MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNzEsIC0xNzEsIC0xNzEsIC0xNzEsIC0xNzEsIC0xNzEsIC0xNzEsIC0xNzEsIC0xNzEsCi0gICAgIC0xNzEsIC0xNzEsIC0xNzEsICAgNTgsIC0xNzEsIC0xNzEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNzEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTcyLCAtMTcyLCAtMTcyLCAtMTcyLCAtMTcyLCAtMTcyLCAtMTcyLCAtMTcyLCAtMTcyLAotICAgICAtMTcyLCAtMTcyLCAtMTcyLCAgIDU4LCAtMTcyLCAtMTcyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODksICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNzIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTczLCAtMTczLCAtMTczLCAtMTczLCAtMTczLCAtMTczLCAtMTczLCAtMTczLCAtMTczLAotICAgICAtMTczLCAtMTczLCAtMTczLCAgIDU4LCAtMTczLCAtMTczLCAgIDU4LCAgMTkwLCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTczCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3NCwgLTE3NCwgLTE3NCwgLTE3NCwgLTE3NCwgLTE3NCwgLTE3NCwgLTE3NCwgLTE3NCwKLSAgICAgLTE3NCwgLTE3NCwgLTE3NCwgICA1OCwgLTE3NCwgLTE3NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE3NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3NSwgLTE3NSwgLTE3NSwgLTE3NSwgLTE3NSwgLTE3NSwgLTE3NSwgLTE3NSwgLTE3NSwKLSAgICAgLTE3NSwgLTE3NSwgLTE3NSwgICA1OCwgLTE3NSwgLTE3NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDE5MSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE3NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNzYsIC0xNzYsIC0xNzYsIC0xNzYsIC0xNzYsIC0xNzYsIC0xNzYsIC0xNzYsIC0xNzYsCi0gICAgIC0xNzYsIC0xNzYsIC0xNzYsICAgNTgsIC0xNzYsIC0xNzYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNzYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTc3LCAtMTc3LCAtMTc3LCAtMTc3LCAtMTc3LCAtMTc3LCAtMTc3LCAtMTc3LCAtMTc3LAotICAgICAtMTc3LCAtMTc3LCAtMTc3LCAgIDU4LCAtMTc3LCAtMTc3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNzcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTc4LCAtMTc4LCAtMTc4LCAtMTc4LCAtMTc4LCAtMTc4LCAtMTc4LCAtMTc4LCAtMTc4LAotICAgICAtMTc4LCAtMTc4LCAtMTc4LCAgIDU4LCAtMTc4LCAtMTc4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTc4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3OSwgLTE3OSwgLTE3OSwgLTE3OSwgLTE3OSwgLTE3OSwgLTE3OSwgLTE3OSwgLTE3OSwKLSAgICAgLTE3OSwgLTE3OSwgLTE3OSwgICA1OCwgLTE3OSwgLTE3OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE5MiwgICA1OCwgICA1OCwgLTE3OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4MCwgLTE4MCwgLTE4MCwgLTE4MCwgLTE4MCwgLTE4MCwgLTE4MCwgLTE4MCwgLTE4MCwKLSAgICAgLTE4MCwgLTE4MCwgLTE4MCwgICA1OCwgLTE4MCwgLTE4MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE4MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xODEsIC0xODEsIC0xODEsIC0xODEsIC0xODEsIC0xODEsIC0xODEsIC0xODEsIC0xODEsCi0gICAgIC0xODEsIC0xODEsIC0xODEsICAgNTgsIC0xODEsIC0xODEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTgyLCAtMTgyLCAtMTgyLCAtMTgyLCAtMTgyLCAtMTgyLCAtMTgyLCAtMTgyLCAtMTgyLAotICAgICAtMTgyLCAtMTgyLCAtMTgyLCAgIDU4LCAtMTgyLCAtMTgyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxOTMsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTgzLCAtMTgzLCAtMTgzLCAtMTgzLCAtMTgzLCAtMTgzLCAtMTgzLCAtMTgzLCAtMTgzLAotICAgICAtMTgzLCAtMTgzLCAtMTgzLCAgIDU4LCAtMTgzLCAtMTgzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgMTk0LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTgzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4NCwgLTE4NCwgLTE4NCwgLTE4NCwgLTE4NCwgLTE4NCwgLTE4NCwgLTE4NCwgLTE4NCwKLSAgICAgLTE4NCwgLTE4NCwgLTE4NCwgICA1OCwgLTE4NCwgLTE4NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE4NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4NSwgLTE4NSwgLTE4NSwgLTE4NSwgLTE4NSwgLTE4NSwgLTE4NSwgLTE4NSwgLTE4NSwKLSAgICAgLTE4NSwgLTE4NSwgLTE4NSwgICA1OCwgLTE4NSwgLTE4NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE4NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xODYsIC0xODYsIC0xODYsIC0xODYsIC0xODYsIC0xODYsIC0xODYsIC0xODYsIC0xODYsCi0gICAgIC0xODYsIC0xODYsIC0xODYsICAgNTgsIC0xODYsIC0xODYsICAgNTgsICAgNTgsICAgNTgsICAxOTUsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTg3LCAtMTg3LCAtMTg3LCAtMTg3LCAtMTg3LCAtMTg3LCAtMTg3LCAtMTg3LCAtMTg3LAotICAgICAtMTg3LCAtMTg3LCAtMTg3LCAgIDU4LCAtMTg3LCAtMTg3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTg4LCAtMTg4LCAtMTg4LCAtMTg4LCAtMTg4LCAtMTg4LCAtMTg4LCAtMTg4LCAtMTg4LAotICAgICAtMTg4LCAtMTg4LCAtMTg4LCAgIDU4LCAtMTg4LCAtMTg4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTk2LCAgIDU4LCAtMTg4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4OSwgLTE4OSwgLTE4OSwgLTE4OSwgLTE4OSwgLTE4OSwgLTE4OSwgLTE4OSwgLTE4OSwKLSAgICAgLTE4OSwgLTE4OSwgLTE4OSwgICA1OCwgLTE4OSwgLTE4OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgIDE5NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE4OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5MCwgLTE5MCwgLTE5MCwgLTE5MCwgLTE5MCwgLTE5MCwgLTE5MCwgLTE5MCwgLTE5MCwKLSAgICAgLTE5MCwgLTE5MCwgLTE5MCwgICA1OCwgLTE5MCwgLTE5MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE5OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE5MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xOTEsIC0xOTEsIC0xOTEsIC0xOTEsIC0xOTEsIC0xOTEsIC0xOTEsIC0xOTEsIC0xOTEsCi0gICAgIC0xOTEsIC0xOTEsIC0xOTEsICAgNTgsIC0xOTEsIC0xOTEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAxOTksICAgNTgsICAgNTgsICAgNTgsIC0xOTEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTkyLCAtMTkyLCAtMTkyLCAtMTkyLCAtMTkyLCAtMTkyLCAtMTkyLCAtMTkyLCAtMTkyLAotICAgICAtMTkyLCAtMTkyLCAtMTkyLCAgIDU4LCAtMTkyLCAtMTkyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAyMDAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xOTIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTkzLCAtMTkzLCAtMTkzLCAtMTkzLCAtMTkzLCAtMTkzLCAtMTkzLCAtMTkzLCAtMTkzLAotICAgICAtMTkzLCAtMTkzLCAtMTkzLCAgIDU4LCAtMTkzLCAtMTkzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMjAxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTkzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5NCwgLTE5NCwgLTE5NCwgLTE5NCwgLTE5NCwgLTE5NCwgLTE5NCwgLTE5NCwgLTE5NCwKLSAgICAgLTE5NCwgLTE5NCwgLTE5NCwgICA1OCwgLTE5NCwgLTE5NCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDIwMiwgICA1OCwgICA1OCwgLTE5NAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5NSwgLTE5NSwgLTE5NSwgLTE5NSwgLTE5NSwgLTE5NSwgLTE5NSwgLTE5NSwgLTE5NSwKLSAgICAgLTE5NSwgLTE5NSwgLTE5NSwgICA1OCwgLTE5NSwgLTE5NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDIwMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE5NQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xOTYsIC0xOTYsIC0xOTYsIC0xOTYsIC0xOTYsIC0xOTYsIC0xOTYsIC0xOTYsIC0xOTYsCi0gICAgIC0xOTYsIC0xOTYsIC0xOTYsICAgNTgsIC0xOTYsIC0xOTYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xOTYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTk3LCAtMTk3LCAtMTk3LCAtMTk3LCAtMTk3LCAtMTk3LCAtMTk3LCAtMTk3LCAtMTk3LAotICAgICAtMTk3LCAtMTk3LCAtMTk3LCAgIDU4LCAtMTk3LCAtMTk3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAyMDQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xOTcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTk4LCAtMTk4LCAtMTk4LCAtMTk4LCAtMTk4LCAtMTk4LCAtMTk4LCAtMTk4LCAtMTk4LAotICAgICAtMTk4LCAtMTk4LCAtMTk4LCAgIDU4LCAtMTk4LCAtMTk4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTk4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5OSwgLTE5OSwgLTE5OSwgLTE5OSwgLTE5OSwgLTE5OSwgLTE5OSwgLTE5OSwgLTE5OSwKLSAgICAgLTE5OSwgLTE5OSwgLTE5OSwgICA1OCwgLTE5OSwgLTE5OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE5OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwMCwgLTIwMCwgLTIwMCwgLTIwMCwgLTIwMCwgLTIwMCwgLTIwMCwgLTIwMCwgLTIwMCwKLSAgICAgLTIwMCwgLTIwMCwgLTIwMCwgICA1OCwgLTIwMCwgLTIwMCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIwMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMDEsIC0yMDEsIC0yMDEsIC0yMDEsIC0yMDEsIC0yMDEsIC0yMDEsIC0yMDEsIC0yMDEsCi0gICAgIC0yMDEsIC0yMDEsIC0yMDEsICAgNTgsIC0yMDEsIC0yMDEsICAgNTgsICAyMDUsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDEKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMjAyLCAtMjAyLCAtMjAyLCAtMjAyLCAtMjAyLCAtMjAyLCAtMjAyLCAtMjAyLCAtMjAyLAotICAgICAtMjAyLCAtMjAyLCAtMjAyLCAgIDU4LCAtMjAyLCAtMjAyLCAgIDU4LCAgMjA2LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMjAzLCAtMjAzLCAtMjAzLCAtMjAzLCAtMjAzLCAtMjAzLCAtMjAzLCAtMjAzLCAtMjAzLAotICAgICAtMjAzLCAtMjAzLCAtMjAzLCAgIDU4LCAtMjAzLCAtMjAzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMjAzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwNCwgLTIwNCwgLTIwNCwgLTIwNCwgLTIwNCwgLTIwNCwgLTIwNCwgLTIwNCwgLTIwNCwKLSAgICAgLTIwNCwgLTIwNCwgLTIwNCwgICA1OCwgLTIwNCwgLTIwNCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgIDIwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIwNAotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwNSwgLTIwNSwgLTIwNSwgLTIwNSwgLTIwNSwgLTIwNSwgLTIwNSwgLTIwNSwgLTIwNSwKLSAgICAgLTIwNSwgLTIwNSwgLTIwNSwgICA1OCwgLTIwNSwgLTIwNSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDIwOCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIwNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMDYsIC0yMDYsIC0yMDYsIC0yMDYsIC0yMDYsIC0yMDYsIC0yMDYsIC0yMDYsIC0yMDYsCi0gICAgIC0yMDYsIC0yMDYsIC0yMDYsICAgNTgsIC0yMDYsIC0yMDYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAyMDksICAgNTgsICAgNTgsIC0yMDYKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMjA3LCAtMjA3LCAtMjA3LCAtMjA3LCAtMjA3LCAtMjA3LCAtMjA3LCAtMjA3LCAtMjA3LAotICAgICAtMjA3LCAtMjA3LCAtMjA3LCAgIDU4LCAtMjA3LCAtMjA3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMjA4LCAtMjA4LCAtMjA4LCAtMjA4LCAtMjA4LCAtMjA4LCAtMjA4LCAtMjA4LCAtMjA4LAotICAgICAtMjA4LCAtMjA4LCAtMjA4LCAgIDU4LCAtMjA4LCAtMjA4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMjA4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwOSwgLTIwOSwgLTIwOSwgLTIwOSwgLTIwOSwgLTIwOSwgLTIwOSwgLTIwOSwgLTIwOSwKLSAgICAgLTIwOSwgLTIwOSwgLTIwOSwgICA1OCwgLTIwOSwgLTIwOSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDIxMCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIwOQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIxMCwgLTIxMCwgLTIxMCwgLTIxMCwgLTIxMCwgLTIxMCwgLTIxMCwgLTIxMCwgLTIxMCwKLSAgICAgLTIxMCwgLTIxMCwgLTIxMCwgICA1OCwgLTIxMCwgLTIxMCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIxMAorICAgICAgLTYwLCAgIDU3LCAgIDU3LCAgIDU3LCAgLTYwLCAgLTYwLCAgLTYwCiAgICAgfSwKIAogICAgIH0gOwpAQCAtMTkxOCw4ICs2NzQsOCBAQAogCSp5eV9jcCA9ICdcMCc7IFwKIAkoeXlfY19idWZfcCkgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9OVU1fUlVMRVMgNjQKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiA2NQorI2RlZmluZSBZWV9OVU1fUlVMRVMgMzMKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAzNAogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAogICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwpAQCAtMTkyNywzMSArNjgzLDE0IEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzIxMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs2MV0gPQogICAgIHsgICAwLAogICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgIDY1LCAgICA1LCAgICA0LCAgICAzLCAgICAyLCAgIDM2LCAgIDM3LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDYzLCAgIDYwLCAgIDYyLCAgIDU1LCAgIDU5LCAgIDU4LCAgIDU3LCAgIDUzLCAgIDQ4LCAgIDQyLAotICAgICAgIDQ3LCAgIDUxLCAgIDUzLCAgIDQwLCAgIDQxLCAgIDUwLCAgIDUwLCAgIDQzLCAgIDUzLCAgIDUwLAotICAgICAgIDUwLCAgIDUzLCAgICA0LCAgICAzLCAgICAyLCAgICAyLCAgICAxLCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDE2LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDYzLCAgIDYwLCAgIDYyLCAgIDYxLAotICAgICAgIDU1LCAgIDU0LCAgIDU3LCAgIDU2LCAgIDQ0LCAgIDUxLCAgIDM4LCAgIDUwLCAgIDUwLCAgIDUyLAotICAgICAgIDQ1LCAgIDQ2LCAgIDM5LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotCi0gICAgICAgMzUsICAgMzUsICAgMzAsICAgMjksICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgNDksICAgMjUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMTUsICAgMzUsICAgIDcsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMTcsICAgMzUsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMzUsICAgMzQsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzUsCi0gICAgICAgMTAsICAgMzUsICAgMTMsICAgMzUsICAgMzUsICAgMzUsICAgMzUsICAgMzMsICAgMzUsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMzUsICAgMjIsICAgMzUsICAgMzIsICAgIDksICAgMzEsICAgMzUsICAgMjYsCi0gICAgICAgMTIsICAgMzUsICAgMzUsICAgMjEsICAgMTgsICAgMzUsICAgIDgsICAgMzUsICAgMzUsICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgMjcsICAgMzUsICAgMzUsICAgIDYsICAgMzUsICAgMjAsICAgMTksICAgMjMsCi0KLSAgICAgICAzNSwgICAzNSwgICAxMSwgICAzNSwgICAzNSwgICAzNSwgICAxNCwgICAyOCwgICAzNSwgICAyNAorICAgICAgIDM0LCAgICA1LCAgICA0LCAgICAyLCAgICAzLCAgICA3LCAgICA4LCAgICA2LCAgIDMyLCAgIDI5LAorICAgICAgIDMxLCAgIDI0LCAgIDI4LCAgIDI3LCAgIDI2LCAgIDIyLCAgIDE3LCAgIDEzLCAgIDE2LCAgIDIwLAorICAgICAgIDIyLCAgIDExLCAgIDEyLCAgIDE5LCAgIDE5LCAgIDE0LCAgIDIyLCAgIDIyLCAgICA0LCAgICAyLAorICAgICAgICAzLCAgICAzLCAgICAxLCAgICA2LCAgIDMyLCAgIDI5LCAgIDMxLCAgIDMwLCAgIDI0LCAgIDIzLAorICAgICAgIDI2LCAgIDI1LCAgIDE1LCAgIDIwLCAgICA5LCAgIDE5LCAgIDE5LCAgIDIxLCAgIDEwLCAgIDE4CiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KQEAgLTE5NjUsMTEgKzcwNCwxMSBAQAogICAgICAgIDE0LCAgICAxLCAgICAxLCAgICAxLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAogICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAogICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAotICAgICAgICAxLCAgIDE1LCAgICAxLCAgICAxLCAgIDE2LCAgICAxLCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLAorICAgICAgICAxLCAgIDE1LCAgICAxLCAgICAxLCAgIDEzLCAgICAxLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAogCi0gICAgICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMTMsICAgMTMsICAgMjYsICAgMjcsICAgMjgsCi0gICAgICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMTMsICAgMTMsICAgMzYsCi0gICAgICAgMTMsICAgMTMsICAgIDEsICAgMzcsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgMTMsICAgMTMsICAgIDEsICAgMTYsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC0yMDE0LDggKzc1MywxMiBAQAogCiAjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYKIAotY2hhciAqdGV4dDsKLXN0YXRpYyBjaGFyICp0ZXh0X3B0cjsKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87Cit9IGN1cnJlbnRfcG9zOworCitzdGF0aWMgY2hhciAqdGV4dDsKIHN0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOwogCiBzdHJ1Y3QgYnVmZmVyIHsKQEAgLTIwMjgsMjkgKzc3MSwyOCBAQAogc3RhdGljIGludCBsYXN0X3RzLCBmaXJzdF90czsKIAogc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyICp6Y29uZl9lbmRmaWxlKHZvaWQpOworc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAogdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKLQl0ZXh0X3B0ciA9IHRleHQ7CiAJdGV4dF9zaXplID0gMDsKLQkqdGV4dF9wdHIgPSAwOworCSp0ZXh0ID0gMDsKIH0KIAogdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CiAJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgeworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3NpemUgJj0gLVNUQVJUX1NUUlNJWkU7CiAJCXRleHQgPSByZWFsbG9jKHRleHQsIG5ld19zaXplKTsKIAkJdGV4dF9hc2l6ZSA9IG5ld19zaXplOwotCQl0ZXh0X3B0ciA9IHRleHQgKyB0ZXh0X3NpemU7CiAJfQotCW1lbWNweSh0ZXh0X3B0ciwgc3RyLCBzaXplKTsKLQl0ZXh0X3B0ciArPSBzaXplOworCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOwogCXRleHRfc2l6ZSArPSBzaXplOwotCSp0ZXh0X3B0ciA9IDA7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAogdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKQEAgLTIwNjYsMTEgKzgwOCwxMyBAQAogI2RlZmluZSBTVFJJTkcgMwogI2RlZmluZSBQQVJBTSA0CiAKKyNpZm5kZWYgWVlfTk9fVU5JU1REX0gKIC8qIFNwZWNpYWwgY2FzZSBmb3IgInVuaXN0ZC5oIiwgc2luY2UgaXQgaXMgbm9uLUFOU0kuIFdlIGluY2x1ZGUgaXQgd2F5CiAgKiBkb3duIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRoZSB1c2VyJ3Mgc2VjdGlvbiAxIHRvIGhhdmUgYmVlbiBzY2FubmVkIGZpcnN0LgogICogVGhlIHVzZXIgaGFzIGEgY2hhbmNlIHRvIG92ZXJyaWRlIGl0IHdpdGggYW4gb3B0aW9uLgogICovCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKIAogI2lmbmRlZiBZWV9FWFRSQV9UWVBFCiAjZGVmaW5lIFlZX0VYVFJBX1RZUEUgdm9pZCAqCkBAIC0yMjU0LDE3ICs5OTgsMTcgQEAKIAl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCiBjYXNlIDE6CiAvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotY3VycmVudF9maWxlLT5saW5lbm8rKzsKLQlZWV9CUkVBSwogY2FzZSAyOgorLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLQoreworCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CisJcmV0dXJuIFRfRU9MOworfQogCVlZX0JSRUFLCiBjYXNlIDM6Ci0vKiBydWxlIDMgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotY3VycmVudF9maWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOworCiAJWVlfQlJFQUsKIGNhc2UgNDoKIFlZX1JVTEVfU0VUVVAKQEAgLTIyODIsMTc1ICsxMDI2LDYzIEBACiAKIGNhc2UgNjoKIFlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfTUFJTk1FTlU7Ci0JWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfTUVOVTsKLQlZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9FTkRNRU5VOwotCVlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX1NPVVJDRTsKLQlZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfQ0hPSUNFOwotCVlZX0JSRUFLCi1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9FTkRDSE9JQ0U7Ci0JWVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0NPTU1FTlQ7Ci0JWVlfQlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0NPTkZJRzsKLQlZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfTUVOVUNPTkZJRzsKLQlZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfSEVMUDsKLQlZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfSUY7Ci0JWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0VORElGOwotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9ERVBFTkRTOwotCVlZX0JSRUFLCi1jYXNlIDE5OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9SRVFVSVJFUzsKLQlZWV9CUkVBSwotY2FzZSAyMDoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfT1BUSU9OQUw7Ci0JWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRkFVTFQ7Ci0JWVlfQlJFQUsKLWNhc2UgMjI6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX1BST01QVDsKLQlZWV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfVFJJU1RBVEU7Ci0JWVlfQlJFQUsKLWNhc2UgMjQ6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRl9UUklTVEFURTsKLQlZWV9CUkVBSwotY2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfQk9PTEVBTjsKLQlZWV9CUkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfQk9PTEVBTjsKLQlZWV9CUkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfREVGX0JPT0xFQU47Ci0JWVlfQlJFQUsKLWNhc2UgMjg6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRl9CT09MRUFOOwotCVlZX0JSRUFLCi1jYXNlIDI5OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9JTlQ7Ci0JWVlfQlJFQUsKLWNhc2UgMzA6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0hFWDsKLQlZWV9CUkVBSwotY2FzZSAzMToKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfU1RSSU5HOwotCVlZX0JSRUFLCi1jYXNlIDMyOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9TRUxFQ1Q7Ci0JWVlfQlJFQUsKLWNhc2UgMzM6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX1NFTEVDVDsKLQlZWV9CUkVBSwotY2FzZSAzNDoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfUkFOR0U7Ci0JWVlfQlJFQUsKLWNhc2UgMzU6Ci1ZWV9SVUxFX1NFVFVQCiB7CisJCXN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOworCQlCRUdJTihQQVJBTSk7CisJCWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7CisJCWN1cnJlbnRfcG9zLmxpbmVubyA9IGN1cnJlbnRfZmlsZS0+bGluZW5vOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfQ09NTUFORCkgeworCQkJemNvbmZsdmFsLmlkID0gaWQ7CisJCQlyZXR1cm4gaWQtPnRva2VuOworCQl9CiAJCWFsbG9jX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7CiAJCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OwogCQlyZXR1cm4gVF9XT1JEOwogCX0KIAlZWV9CUkVBSwotY2FzZSAzNjoKK2Nhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIAogCVlZX0JSRUFLCi1jYXNlIDM3OgotLyogcnVsZSAzNyBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDg6CisvKiBydWxlIDggY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotY3VycmVudF9maWxlLT5saW5lbm8rKzsgQkVHSU4oSU5JVElBTCk7Cit7CisJCUJFR0lOKElOSVRJQUwpOworCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCQlyZXR1cm4gVF9FT0w7CisJfQogCVlZX0JSRUFLCiAKLWNhc2UgMzg6CitjYXNlIDk6CiBZWV9SVUxFX1NFVFVQCiByZXR1cm4gVF9BTkQ7CiAJWVlfQlJFQUsKLWNhc2UgMzk6CitjYXNlIDEwOgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfT1I7CiAJWVlfQlJFQUsKLWNhc2UgNDA6CitjYXNlIDExOgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfT1BFTl9QQVJFTjsKIAlZWV9CUkVBSwotY2FzZSA0MToKK2Nhc2UgMTI6CiBZWV9SVUxFX1NFVFVQCiByZXR1cm4gVF9DTE9TRV9QQVJFTjsKIAlZWV9CUkVBSwotY2FzZSA0MjoKK2Nhc2UgMTM6CiBZWV9SVUxFX1NFVFVQCiByZXR1cm4gVF9OT1Q7CiAJWVlfQlJFQUsKLWNhc2UgNDM6CitjYXNlIDE0OgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfRVFVQUw7CiAJWVlfQlJFQUsKLWNhc2UgNDQ6CitjYXNlIDE1OgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfVU5FUVVBTDsKIAlZWV9CUkVBSwotY2FzZSA0NToKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0lGOwotCVlZX0JSRUFLCi1jYXNlIDQ2OgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfT047Ci0JWVlfQlJFQUsKLWNhc2UgNDc6CitjYXNlIDE2OgogWVlfUlVMRV9TRVRVUAogewogCQlzdHIgPSB6Y29uZnRleHRbMF07CkBAIC0yNDU4LDMzICsxMDkwLDM4IEBACiAJCUJFR0lOKFNUUklORyk7CiAJfQogCVlZX0JSRUFLCi1jYXNlIDQ4OgotLyogcnVsZSA0OCBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE3OgorLyogcnVsZSAxNyBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCiBCRUdJTihJTklUSUFMKTsgY3VycmVudF9maWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOwogCVlZX0JSRUFLCi1jYXNlIDQ5OgorY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKIC8qIGlnbm9yZSAqLwogCVlZX0JSRUFLCi1jYXNlIDUwOgorY2FzZSAxOToKIFlZX1JVTEVfU0VUVVAKIHsKKwkJc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh6Y29uZnRleHQsIHpjb25mbGVuZyk7CisJCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9QQVJBTSkgeworCQkJemNvbmZsdmFsLmlkID0gaWQ7CisJCQlyZXR1cm4gaWQtPnRva2VuOworCQl9CiAJCWFsbG9jX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7CiAJCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OwogCQlyZXR1cm4gVF9XT1JEOwogCX0KIAlZWV9CUkVBSwotY2FzZSA1MToKK2Nhc2UgMjA6CiBZWV9SVUxFX1NFVFVQCiAvKiBjb21tZW50ICovCiAJWVlfQlJFQUsKLWNhc2UgNTI6Ci0vKiBydWxlIDUyIGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMjE6CisvKiBydWxlIDIxIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIGN1cnJlbnRfZmlsZS0+bGluZW5vKys7CiAJWVlfQlJFQUsKLWNhc2UgNTM6CitjYXNlIDIyOgogWVlfUlVMRV9TRVRVUAogCiAJWVlfQlJFQUsKQEAgLTI0OTQsOCArMTEzMSw4IEBACiAJfQogCVlZX0JSRUFLCiAKLWNhc2UgNTQ6Ci0vKiBydWxlIDU0IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMjM6CisvKiBydWxlIDIzIGNhbiBtYXRjaCBlb2wgKi8KICp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB6Y29uZnRleHQgKi8KICh5eV9jX2J1Zl9wKSA9IHl5X2NwIC09IDE7CiBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgemNvbmZ0ZXh0IGFnYWluICovCkBAIC0yNTA2LDE0ICsxMTQzLDE0IEBACiAJCXJldHVybiBUX1dPUkRfUVVPVEU7CiAJfQogCVlZX0JSRUFLCi1jYXNlIDU1OgorY2FzZSAyNDoKIFlZX1JVTEVfU0VUVVAKIHsKIAkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7CiAJfQogCVlZX0JSRUFLCi1jYXNlIDU2OgotLyogcnVsZSA1NiBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDI1OgorLyogcnVsZSAyNSBjYW4gbWF0Y2ggZW9sICovCiAqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0ICovCiAoeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOwogWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLwpAQCAtMjUyNCwxMyArMTE2MSwxMyBAQAogCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwogCX0KIAlZWV9CUkVBSwotY2FzZSA1NzoKK2Nhc2UgMjY6CiBZWV9SVUxFX1NFVFVQCiB7CiAJCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0ICsgMSwgemNvbmZsZW5nIC0gMSk7CiAJfQogCVlZX0JSRUFLCi1jYXNlIDU4OgorY2FzZSAyNzoKIFlZX1JVTEVfU0VUVVAKIHsKIAkJaWYgKHN0ciA9PSB6Y29uZnRleHRbMF0pIHsKQEAgLTI1NDEsOCArMTE3OCw4IEBACiAJCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4dCwgMSk7CiAJfQogCVlZX0JSRUFLCi1jYXNlIDU5OgotLyogcnVsZSA1OSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDI4OgorLyogcnVsZSAyOCBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCiB7CiAJCXByaW50ZigiJXM6JWQ6d2FybmluZzogbXVsdGktbGluZSBzdHJpbmdzIG5vdCBzdXBwb3J0ZWRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwpAQCAtMjU1Nyw3ICsxMTk0LDcgQEAKIAl9CiAJWVlfQlJFQUsKIAotY2FzZSA2MDoKK2Nhc2UgMjk6CiBZWV9SVUxFX1NFVFVQCiB7CiAJCXRzID0gMDsKQEAgLTI1ODIsOCArMTIxOSw4IEBACiAJCX0KIAl9CiAJWVlfQlJFQUsKLWNhc2UgNjE6Ci0vKiBydWxlIDYxIGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMzA6CisvKiBydWxlIDMwIGNhbiBtYXRjaCBlb2wgKi8KICp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB6Y29uZnRleHQgKi8KICh5eV9jX2J1Zl9wKSA9IHl5X2NwIC09IDE7CiBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgemNvbmZ0ZXh0IGFnYWluICovCkBAIC0yNTk0LDE1ICsxMjMxLDE1IEBACiAJCXJldHVybiBUX0hFTFBURVhUOwogCX0KIAlZWV9CUkVBSwotY2FzZSA2MjoKLS8qIHJ1bGUgNjIgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAzMToKKy8qIHJ1bGUgMzEgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAogewogCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOwogCQlhcHBlbmRfc3RyaW5nKCJcbiIsIDEpOwogCX0KIAlZWV9CUkVBSwotY2FzZSA2MzoKK2Nhc2UgMzI6CiBZWV9SVUxFX1NFVFVQCiB7CiAJCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOwpAQCAtMjYyMCwxNSArMTI1NywxNSBAQAogY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CiBjYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToKIHsKLQlpZiAoY3VycmVudF9idWYpIHsKKwlpZiAoY3VycmVudF9maWxlKSB7CiAJCXpjb25mX2VuZGZpbGUoKTsKLQkJcmV0dXJuIFRfRU9GOworCQlyZXR1cm4gVF9FT0w7CiAJfQogCWZjbG9zZSh6Y29uZmluKTsKIAl5eXRlcm1pbmF0ZSgpOwogfQogCVlZX0JSRUFLCi1jYXNlIDY0OgorY2FzZSAzMzoKIFlZX1JVTEVfU0VUVVAKIFlZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVyIGphbW1lZCIgKTsKIAlZWV9CUkVBSwpAQCAtMzMzMiwxNiArMTk2OSwxNiBAQAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0gc3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eV9zdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgogICogCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQogICogICAgICAgemNvbmZfc2Nhbl9ieXRlcygpIGluc3RlYWQuCiAgKi8KLVlZX0JVRkZFUl9TVEFURSB6Y29uZl9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogc3RyICkKK1lZX0JVRkZFUl9TVEFURSB6Y29uZl9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlfc3RyICkKIHsKICAgICAKLQlyZXR1cm4gemNvbmZfc2Nhbl9ieXRlcyhzdHIsc3RybGVuKHN0cikgKTsKKwlyZXR1cm4gemNvbmZfc2Nhbl9ieXRlcyh5eV9zdHIsc3RybGVuKHl5X3N0cikgKTsKIH0KIAogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gemNvbmZsZXgoKSB3aWxsCkBAIC0zNjUwLDcgKzIyODcsNyBAQAogCWN1cnJlbnRfZmlsZSA9IGZpbGU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyICp6Y29uZl9lbmRmaWxlKHZvaWQpCitzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpCiB7CiAJc3RydWN0IGJ1ZmZlciAqcGFyZW50OwogCkBAIC0zNjY2LDIzICsyMzAzLDE1IEBACiAJfQogCWZyZWUoY3VycmVudF9idWYpOwogCWN1cnJlbnRfYnVmID0gcGFyZW50OwotCi0JcmV0dXJuIHBhcmVudDsKIH0KIAogaW50IHpjb25mX2xpbmVubyh2b2lkKQogewotCWlmIChjdXJyZW50X2J1ZikKLQkJcmV0dXJuIGN1cnJlbnRfZmlsZS0+bGluZW5vIC0gMTsKLQllbHNlCi0JCXJldHVybiAwOworCXJldHVybiBjdXJyZW50X3Bvcy5saW5lbm87CiB9CiAKIGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkKIHsKLQlpZiAoY3VycmVudF9idWYpCi0JCXJldHVybiBjdXJyZW50X2ZpbGUtPm5hbWU7Ci0JZWxzZQotCQlyZXR1cm4gIjxub25lPiI7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7CiB9CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9sa2MuaCBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaAppbmRleCA1ZmJhMWZlLi41MjdmNjBjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbGtjLmgKKysrIGIvc2NyaXB0cy9rY29uZmlnL2xrYy5oCkBAIC0zNyw2ICszNywxNyBAQAogI2RlZmluZSBfKHRleHQpIGdldHRleHQodGV4dCkKICNkZWZpbmUgTl8odGV4dCkgKHRleHQpCiAKKworI2RlZmluZSBURl9DT01NQU5ECTB4MDAwMQorI2RlZmluZSBURl9QQVJBTQkweDAwMDIKKworc3RydWN0IGtjb25mX2lkIHsKKwlpbnQgbmFtZTsKKwlpbnQgdG9rZW47CisJdW5zaWduZWQgaW50IGZsYWdzOworCWVudW0gc3ltYm9sX3R5cGUgc3R5cGU7Cit9OworCiBpbnQgemNvbmZwYXJzZSh2b2lkKTsKIHZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCk7CiAKQEAgLTUwLDcgKzYxLDYgQEAKIAogLyogY29uZmRhdGEuYyAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgY29uZl9kZWZfZmlsZW5hbWVbXTsKLWV4dGVybiBjaGFyIGNvbmZfZmlsZW5hbWVbXTsKIAogY2hhciAqY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSh2b2lkKTsKIApAQCAtNTksNyArNjksNyBAQAogCiAvKiBtZW51LmMgKi8KIHZvaWQgbWVudV9pbml0KHZvaWQpOwotdm9pZCBtZW51X2FkZF9tZW51KHZvaWQpOworc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCk7CiB2b2lkIG1lbnVfZW5kX21lbnUodm9pZCk7CiB2b2lkIG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSk7CiB2b2lkIG1lbnVfZW5kX2VudHJ5KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oIGIvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oCmluZGV4IDZkYzZkMGMuLmI2YTM4OWMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sa2NfcHJvdG8uaAorKysgYi9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmgKQEAgLTIsNiArMiw3IEBACiAvKiBjb25mZGF0YS5jICovCiBQKGNvbmZfcGFyc2Usdm9pZCwoY29uc3QgY2hhciAqbmFtZSkpOwogUChjb25mX3JlYWQsaW50LChjb25zdCBjaGFyICpuYW1lKSk7CitQKGNvbmZfcmVhZF9zaW1wbGUsaW50LChjb25zdCBjaGFyICpuYW1lKSk7CiBQKGNvbmZfd3JpdGUsaW50LChjb25zdCBjaGFyICpuYW1lKSk7CiAKIC8qIG1lbnUuYyAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL21lbnUuYyBiL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKaW5kZXggNWNmYTZjNC4uMGZjZTIwYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL21lbnUuYworKysgYi9zY3JpcHRzL2tjb25maWcvbWVudS5jCkBAIC02MSwxMCArNjEsMTEgQEAKIHsKIH0KIAotdm9pZCBtZW51X2FkZF9tZW51KHZvaWQpCitzdHJ1Y3QgbWVudSAqbWVudV9hZGRfbWVudSh2b2lkKQogewotCWN1cnJlbnRfbWVudSA9IGN1cnJlbnRfZW50cnk7CisJbWVudV9lbmRfZW50cnkoKTsKIAlsYXN0X2VudHJ5X3B0ciA9ICZjdXJyZW50X2VudHJ5LT5saXN0OworCXJldHVybiBjdXJyZW50X21lbnUgPSBjdXJyZW50X2VudHJ5OwogfQogCiB2b2lkIG1lbnVfZW5kX21lbnUodm9pZCkKQEAgLTE1MSw2ICsxNTIsMTIgQEAKIAltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7CiB9CiAKK3N0YXRpYyBpbnQgbWVudV9yYW5nZV92YWxpZF9zeW0oc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQoreworCXJldHVybiBzeW0yLT50eXBlID09IFNfSU5UIHx8IHN5bTItPnR5cGUgPT0gU19IRVggfHwKKwkgICAgICAgKHN5bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1lKSk7Cit9CisKIHZvaWQgc3ltX2NoZWNrX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQogewogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKQEAgLTE4NSw4ICsxOTIsOCBAQAogCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUgIT0gU19IRVgpCiAJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBvbmx5IGFsbG93ZWQgIgogCQkJCSAgICAgICAgICAgICAgICAiZm9yIGludCBvciBoZXggc3ltYm9scyIpOwotCQkJaWYgKCFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgcHJvcC0+ZXhwci0+bGVmdC5zeW0tPm5hbWUpIHx8Ci0JCQkgICAgIXN5bV9zdHJpbmdfdmFsaWQoc3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0tPm5hbWUpKQorCQkJaWYgKCFtZW51X3JhbmdlX3ZhbGlkX3N5bShzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fAorCQkJICAgICFtZW51X3JhbmdlX3ZhbGlkX3N5bShzeW0sIHByb3AtPmV4cHItPnJpZ2h0LnN5bSkpCiAJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBpbnZhbGlkIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYyBiL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYwppbmRleCBhZmZhNTJmLi42OWMyNTQ5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCkBAIC0xNDEsNiArMTQxLDU1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgc3ltX2dldF9yYW5nZV92YWwoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgYmFzZSkKK3sKKwlzeW1fY2FsY192YWx1ZShzeW0pOworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFzZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RydG9sKHN5bS0+Y3Vyci52YWwsIE5VTEwsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBzeW1fdmFsaWRhdGVfcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlpbnQgYmFzZSwgdmFsLCB2YWwyOworCWNoYXIgc3RyWzY0XTsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFzZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCXZhbCA9IHN0cnRvbChzeW0tPmN1cnIudmFsLCBOVUxMLCBiYXNlKTsKKwl2YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIGJhc2UpOworCWlmICh2YWwgPj0gdmFsMikgeworCQl2YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCBiYXNlKTsKKwkJaWYgKHZhbCA8PSB2YWwyKQorCQkJcmV0dXJuOworCX0KKwlpZiAoc3ltLT50eXBlID09IFNfSU5UKQorCQlzcHJpbnRmKHN0ciwgIiVkIiwgdmFsMik7CisJZWxzZQorCQlzcHJpbnRmKHN0ciwgIjB4JXgiLCB2YWwyKTsKKwlzeW0tPmN1cnIudmFsID0gc3RyZHVwKHN0cik7Cit9CisKIHN0YXRpYyB2b2lkIHN5bV9jYWxjX3Zpc2liaWxpdHkoc3RydWN0IHN5bWJvbCAqc3ltKQogewogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKQEAgLTMwMSw2ICszNTAsNyBAQAogCXN5bS0+Y3VyciA9IG5ld3ZhbDsKIAlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIG5ld3ZhbC50cmkgPT0geWVzKQogCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hvaWNlKHN5bSk7CisJc3ltX3ZhbGlkYXRlX3JhbmdlKHN5bSk7CiAKIAlpZiAobWVtY21wKCZvbGR2YWwsICZzeW0tPmN1cnIsIHNpemVvZihvbGR2YWwpKSkKIAkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CkBAIC0zODAsMTEgKzQzMCwyMiBAQAogCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfTkVXOwogCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKIAl9CisJLyoKKwkgKiBzZXR0aW5nIGEgY2hvaWNlIHZhbHVlIGFsc28gcmVzZXRzIHRoZSBuZXcgZmxhZyBvZiB0aGUgY2hvaWNlCisJICogc3ltYm9sIGFuZCBhbGwgb3RoZXIgY2hvaWNlIHZhbHVlcy4KKwkgKi8KIAlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHZhbCA9PSB5ZXMpIHsKIAkJc3RydWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCQlzdHJ1Y3QgZXhwciAqZTsKIAogCQljcy0+dXNlci52YWwgPSBzeW07CiAJCWNzLT5mbGFncyAmPSB+U1lNQk9MX05FVzsKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3MpOworCQlmb3IgKGUgPSBwcm9wLT5leHByOyBlOyBlID0gZS0+bGVmdC5leHByKSB7CisJCQlpZiAoZS0+cmlnaHQuc3ltLT52aXNpYmxlICE9IG5vKQorCQkJCWUtPnJpZ2h0LnN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORVc7CisJCX0KIAl9CiAKIAlzeW0tPnVzZXIudHJpID0gdmFsOwpAQCAtNDc4LDggKzUzOSw4IEBACiAJCWlmICghcHJvcCkKIAkJCXJldHVybiB0cnVlOwogCQl2YWwgPSBzdHJ0b2woc3RyLCBOVUxMLCAxMCk7Ci0JCXJldHVybiB2YWwgPj0gc3RydG9sKHByb3AtPmV4cHItPmxlZnQuc3ltLT5uYW1lLCBOVUxMLCAxMCkgJiYKLQkJICAgICAgIHZhbCA8PSBzdHJ0b2wocHJvcC0+ZXhwci0+cmlnaHQuc3ltLT5uYW1lLCBOVUxMLCAxMCk7CisJCXJldHVybiB2YWwgPj0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIDEwKSAmJgorCQkgICAgICAgdmFsIDw9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0LnN5bSwgMTApOwogCWNhc2UgU19IRVg6CiAJCWlmICghc3ltX3N0cmluZ192YWxpZChzeW0sIHN0cikpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC00ODcsOCArNTQ4LDggQEAKIAkJaWYgKCFwcm9wKQogCQkJcmV0dXJuIHRydWU7CiAJCXZhbCA9IHN0cnRvbChzdHIsIE5VTEwsIDE2KTsKLQkJcmV0dXJuIHZhbCA+PSBzdHJ0b2wocHJvcC0+ZXhwci0+bGVmdC5zeW0tPm5hbWUsIE5VTEwsIDE2KSAmJgotCQkgICAgICAgdmFsIDw9IHN0cnRvbChwcm9wLT5leHByLT5yaWdodC5zeW0tPm5hbWUsIE5VTEwsIDE2KTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTYpICYmCisJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxNik7CiAJY2FzZSBTX0JPT0xFQU46CiAJY2FzZSBTX1RSSVNUQVRFOgogCQlzd2l0Y2ggKHN0clswXSkgewpAQCAtNzMxLDEyICs3OTIsMTIgQEAKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0yOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAotCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLX0RPTkUpCi0JCXJldHVybiBOVUxMOwogCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLKSB7CiAJCXByaW50ZigiV2FybmluZyEgRm91bmQgcmVjdXJzaXZlIGRlcGVuZGVuY3k6ICVzIiwgc3ltLT5uYW1lKTsKIAkJcmV0dXJuIHN5bTsKIAl9CisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0tFRCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7CiAJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5yZXZfZGVwLmV4cHIpOwpAQCAtNzU2LDggKzgxNywxMyBAQAogCQkJZ290byBvdXQ7CiAJfQogb3V0OgotCWlmIChzeW0yKQorCWlmIChzeW0yKSB7CiAJCXByaW50ZigiICVzIiwgc3ltLT5uYW1lKTsKKwkJaWYgKHN5bTIgPT0gc3ltKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlzeW0yID0gTlVMTDsKKwkJfQorCX0KIAlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7CiAJcmV0dXJuIHN5bTI7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzMjIwNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgpAQCAtMCwwICsxLDQzIEBACislbGFuZ3VhZ2U9QU5TSS1DCislZGVmaW5lIGhhc2gtZnVuY3Rpb24tbmFtZSBrY29uZl9pZF9oYXNoCislZGVmaW5lIGxvb2t1cC1mdW5jdGlvbi1uYW1lIGtjb25mX2lkX2xvb2t1cAorJWRlZmluZSBzdHJpbmctcG9vbC1uYW1lIGtjb25mX2lkX3N0cmluZ3MKKyVjb21wYXJlLXN0cm5jbXAKKyVlbnVtCislcGljCislc3RydWN0LXR5cGUKKworc3RydWN0IGtjb25mX2lkOworCislJQorbWFpbm1lbnUsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkQKK21lbnUsCQlUX01FTlUsCQlURl9DT01NQU5ECitlbmRtZW51LAlUX0VORE1FTlUsCVRGX0NPTU1BTkQKK3NvdXJjZSwJCVRfU09VUkNFLAlURl9DT01NQU5ECitjaG9pY2UsCQlUX0NIT0lDRSwJVEZfQ09NTUFORAorZW5kY2hvaWNlLAlUX0VORENIT0lDRSwJVEZfQ09NTUFORAorY29tbWVudCwJVF9DT01NRU5ULAlURl9DT01NQU5ECitjb25maWcsCQlUX0NPTkZJRywJVEZfQ09NTUFORAorbWVudWNvbmZpZywJVF9NRU5VQ09ORklHLAlURl9DT01NQU5ECitoZWxwLAkJVF9IRUxQLAkJVEZfQ09NTUFORAoraWYsCQlUX0lGLAkJVEZfQ09NTUFORHxURl9QQVJBTQorZW5kaWYsCQlUX0VORElGLAlURl9DT01NQU5ECitkZXBlbmRzLAlUX0RFUEVORFMsCVRGX0NPTU1BTkQKK3JlcXVpcmVzLAlUX1JFUVVJUkVTLAlURl9DT01NQU5ECitvcHRpb25hbCwJVF9PUFRJT05BTCwJVEZfQ09NTUFORAorZGVmYXVsdCwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1VOS05PV04KK3Byb21wdCwJCVRfUFJPTVBULAlURl9DT01NQU5ECit0cmlzdGF0ZSwJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19UUklTVEFURQorZGVmX3RyaXN0YXRlLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEUKK2Jvb2wsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0JPT0xFQU4KK2Jvb2xlYW4sCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTgorZGVmX2Jvb2wsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19CT09MRUFOCitkZWZfYm9vbGVhbiwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX0JPT0xFQU4KK2ludCwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSU5UCitoZXgsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0hFWAorc3RyaW5nLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19TVFJJTkcKK3NlbGVjdCwJCVRfU0VMRUNULAlURl9DT01NQU5ECitlbmFibGUsCQlUX1NFTEVDVCwJVEZfQ09NTUFORAorcmFuZ2UsCQlUX1JBTkdFLAlURl9DT01NQU5ECitvbiwJCVRfT04sCQlURl9QQVJBTQorJSUKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVmMGZjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkCkBAIC0wLDAgKzEsMjMxIEBACisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4xICovCisvKiBDb21tYW5kLWxpbmU6IGdwZXJmICAqLworLyogQ29tcHV0ZWQgcG9zaXRpb25zOiAtaycxLDMnICovCisKKyNpZiAhKCgnICcgPT0gMzIpICYmICgnIScgPT0gMzMpICYmICgnIicgPT0gMzQpICYmICgnIycgPT0gMzUpIFwKKyAgICAgICYmICgnJScgPT0gMzcpICYmICgnJicgPT0gMzgpICYmICgnXCcnID09IDM5KSAmJiAoJygnID09IDQwKSBcCisgICAgICAmJiAoJyknID09IDQxKSAmJiAoJyonID09IDQyKSAmJiAoJysnID09IDQzKSAmJiAoJywnID09IDQ0KSBcCisgICAgICAmJiAoJy0nID09IDQ1KSAmJiAoJy4nID09IDQ2KSAmJiAoJy8nID09IDQ3KSAmJiAoJzAnID09IDQ4KSBcCisgICAgICAmJiAoJzEnID09IDQ5KSAmJiAoJzInID09IDUwKSAmJiAoJzMnID09IDUxKSAmJiAoJzQnID09IDUyKSBcCisgICAgICAmJiAoJzUnID09IDUzKSAmJiAoJzYnID09IDU0KSAmJiAoJzcnID09IDU1KSAmJiAoJzgnID09IDU2KSBcCisgICAgICAmJiAoJzknID09IDU3KSAmJiAoJzonID09IDU4KSAmJiAoJzsnID09IDU5KSAmJiAoJzwnID09IDYwKSBcCisgICAgICAmJiAoJz0nID09IDYxKSAmJiAoJz4nID09IDYyKSAmJiAoJz8nID09IDYzKSAmJiAoJ0EnID09IDY1KSBcCisgICAgICAmJiAoJ0InID09IDY2KSAmJiAoJ0MnID09IDY3KSAmJiAoJ0QnID09IDY4KSAmJiAoJ0UnID09IDY5KSBcCisgICAgICAmJiAoJ0YnID09IDcwKSAmJiAoJ0cnID09IDcxKSAmJiAoJ0gnID09IDcyKSAmJiAoJ0knID09IDczKSBcCisgICAgICAmJiAoJ0onID09IDc0KSAmJiAoJ0snID09IDc1KSAmJiAoJ0wnID09IDc2KSAmJiAoJ00nID09IDc3KSBcCisgICAgICAmJiAoJ04nID09IDc4KSAmJiAoJ08nID09IDc5KSAmJiAoJ1AnID09IDgwKSAmJiAoJ1EnID09IDgxKSBcCisgICAgICAmJiAoJ1InID09IDgyKSAmJiAoJ1MnID09IDgzKSAmJiAoJ1QnID09IDg0KSAmJiAoJ1UnID09IDg1KSBcCisgICAgICAmJiAoJ1YnID09IDg2KSAmJiAoJ1cnID09IDg3KSAmJiAoJ1gnID09IDg4KSAmJiAoJ1knID09IDg5KSBcCisgICAgICAmJiAoJ1onID09IDkwKSAmJiAoJ1snID09IDkxKSAmJiAoJ1xcJyA9PSA5MikgJiYgKCddJyA9PSA5MykgXAorICAgICAgJiYgKCdeJyA9PSA5NCkgJiYgKCdfJyA9PSA5NSkgJiYgKCdhJyA9PSA5NykgJiYgKCdiJyA9PSA5OCkgXAorICAgICAgJiYgKCdjJyA9PSA5OSkgJiYgKCdkJyA9PSAxMDApICYmICgnZScgPT0gMTAxKSAmJiAoJ2YnID09IDEwMikgXAorICAgICAgJiYgKCdnJyA9PSAxMDMpICYmICgnaCcgPT0gMTA0KSAmJiAoJ2knID09IDEwNSkgJiYgKCdqJyA9PSAxMDYpIFwKKyAgICAgICYmICgnaycgPT0gMTA3KSAmJiAoJ2wnID09IDEwOCkgJiYgKCdtJyA9PSAxMDkpICYmICgnbicgPT0gMTEwKSBcCisgICAgICAmJiAoJ28nID09IDExMSkgJiYgKCdwJyA9PSAxMTIpICYmICgncScgPT0gMTEzKSAmJiAoJ3InID09IDExNCkgXAorICAgICAgJiYgKCdzJyA9PSAxMTUpICYmICgndCcgPT0gMTE2KSAmJiAoJ3UnID09IDExNykgJiYgKCd2JyA9PSAxMTgpIFwKKyAgICAgICYmICgndycgPT0gMTE5KSAmJiAoJ3gnID09IDEyMCkgJiYgKCd5JyA9PSAxMjEpICYmICgneicgPT0gMTIyKSBcCisgICAgICAmJiAoJ3snID09IDEyMykgJiYgKCd8JyA9PSAxMjQpICYmICgnfScgPT0gMTI1KSAmJiAoJ34nID09IDEyNikpCisvKiBUaGUgY2hhcmFjdGVyIHNldCBpcyBub3QgYmFzZWQgb24gSVNPLTY0Ni4gICovCisjZXJyb3IgImdwZXJmIGdlbmVyYXRlZCB0YWJsZXMgZG9uJ3Qgd29yayB3aXRoIHRoaXMgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQuIFBsZWFzZSByZXBvcnQgYSBidWcgdG8gPGJ1Zy1nbnUtZ3BlcmZAZ251Lm9yZz4uIgorI2VuZGlmCisKK3N0cnVjdCBrY29uZl9pZDsKKy8qIG1heGltdW0ga2V5IHJhbmdlID0gNDUsIGR1cGxpY2F0ZXMgPSAwICovCisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2tjb25mX2lkX2hhc2ggKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNzb192YWx1ZXNbXSA9CisgICAgeworICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDI1LCAxMCwgMTUsCisgICAgICAgMCwgIDAsICA1LCA0NywgIDAsICAwLCA0NywgNDcsICAwLCAxMCwKKyAgICAgICAwLCAyMCwgMjAsIDIwLCAgNSwgIDAsICAwLCAyMCwgNDcsIDQ3LAorICAgICAgMjAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3CisgICAgfTsKKyAgcmVnaXN0ZXIgaW50IGh2YWwgPSBsZW47CisKKyAgc3dpdGNoIChodmFsKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGh2YWwgKz0gYXNzb192YWx1ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzJdXTsKKyAgICAgIC8qRkFMTFRIUk9VR0gqLworICAgICAgY2FzZSAyOgorICAgICAgY2FzZSAxOgorICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0clswXV07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIGh2YWw7Cit9CisKK3N0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QKKyAgeworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyW3NpemVvZigiaWYiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjNbc2l6ZW9mKCJpbnQiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjRbc2l6ZW9mKCJoZWxwIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1W3NpemVvZigiZW5kaWYiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjZbc2l6ZW9mKCJzZWxlY3QiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjdbc2l6ZW9mKCJlbmRtZW51IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI4W3NpemVvZigidHJpc3RhdGUiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjlbc2l6ZW9mKCJlbmRjaG9pY2UiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjEwW3NpemVvZigicmFuZ2UiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjExW3NpemVvZigic3RyaW5nIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxMltzaXplb2YoImRlZmF1bHQiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjEzW3NpemVvZigiZGVmX2Jvb2wiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE0W3NpemVvZigibWVudSIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTZbc2l6ZW9mKCJkZWZfYm9vbGVhbiIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTdbc2l6ZW9mKCJkZWZfdHJpc3RhdGUiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE4W3NpemVvZigibWFpbm1lbnUiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIwW3NpemVvZigibWVudWNvbmZpZyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjFbc2l6ZW9mKCJjb25maWciKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIyW3NpemVvZigib24iKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIzW3NpemVvZigiaGV4IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyNltzaXplb2YoInNvdXJjZSIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjdbc2l6ZW9mKCJkZXBlbmRzIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyOFtzaXplb2YoIm9wdGlvbmFsIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzMVtzaXplb2YoImVuYWJsZSIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzJbc2l6ZW9mKCJjb21tZW50IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzM1tzaXplb2YoInJlcXVpcmVzIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzNFtzaXplb2YoImJvb2wiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM3W3NpemVvZigiYm9vbGVhbiIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDFbc2l6ZW9mKCJjaG9pY2UiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjQ2W3NpemVvZigicHJvbXB0IildOworICB9Oworc3RhdGljIHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3Qga2NvbmZfaWRfc3RyaW5nc19jb250ZW50cyA9CisgIHsKKyAgICAiaWYiLAorICAgICJpbnQiLAorICAgICJoZWxwIiwKKyAgICAiZW5kaWYiLAorICAgICJzZWxlY3QiLAorICAgICJlbmRtZW51IiwKKyAgICAidHJpc3RhdGUiLAorICAgICJlbmRjaG9pY2UiLAorICAgICJyYW5nZSIsCisgICAgInN0cmluZyIsCisgICAgImRlZmF1bHQiLAorICAgICJkZWZfYm9vbCIsCisgICAgIm1lbnUiLAorICAgICJkZWZfYm9vbGVhbiIsCisgICAgImRlZl90cmlzdGF0ZSIsCisgICAgIm1haW5tZW51IiwKKyAgICAibWVudWNvbmZpZyIsCisgICAgImNvbmZpZyIsCisgICAgIm9uIiwKKyAgICAiaGV4IiwKKyAgICAic291cmNlIiwKKyAgICAiZGVwZW5kcyIsCisgICAgIm9wdGlvbmFsIiwKKyAgICAiZW5hYmxlIiwKKyAgICAiY29tbWVudCIsCisgICAgInJlcXVpcmVzIiwKKyAgICAiYm9vbCIsCisgICAgImJvb2xlYW4iLAorICAgICJjaG9pY2UiLAorICAgICJwcm9tcHQiCisgIH07CisjZGVmaW5lIGtjb25mX2lkX3N0cmluZ3MgKChjb25zdCBjaGFyICopICZrY29uZl9pZF9zdHJpbmdzX2NvbnRlbnRzKQorI2lmZGVmIF9fR05VQ19fCitfX2lubGluZQorI2VuZGlmCitzdHJ1Y3Qga2NvbmZfaWQgKgora2NvbmZfaWRfbG9va3VwIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pCit7CisgIGVudW0KKyAgICB7CisgICAgICBUT1RBTF9LRVlXT1JEUyA9IDMwLAorICAgICAgTUlOX1dPUkRfTEVOR1RIID0gMiwKKyAgICAgIE1BWF9XT1JEX0xFTkdUSCA9IDEyLAorICAgICAgTUlOX0hBU0hfVkFMVUUgPSAyLAorICAgICAgTUFYX0hBU0hfVkFMVUUgPSA0NgorICAgIH07CisKKyAgc3RhdGljIHN0cnVjdCBrY29uZl9pZCB3b3JkbGlzdFtdID0KKyAgICB7CisgICAgICB7LTF9LCB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIsCQlUX0lGLAkJVEZfQ09NTUFORHxURl9QQVJBTX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMywJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSU5UfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI0LAkJVF9IRUxQLAkJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNSwJCVRfRU5ESUYsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjYsCQlUX1NFTEVDVCwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNywJVF9FTkRNRU5VLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI4LAlUX1RZUEUsCQlURl9DT01NQU5ELCBTX1RSSVNUQVRFfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI5LAlUX0VORENIT0lDRSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTAsCQlUX1JBTkdFLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxMSwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfU1RSSU5HfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxMiwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1VOS05PV059LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjEzLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfQk9PTEVBTn0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTQsCQlUX01FTlUsCQlURl9DT01NQU5EfSwKKyAgICAgIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTYsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19CT09MRUFOfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxNywJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1RSSVNUQVRFfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxOCwJVF9NQUlOTUVOVSwJVEZfQ09NTUFORH0sCisgICAgICB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIwLAlUX01FTlVDT05GSUcsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIxLAkJVF9DT05GSUcsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIyLAkJVF9PTiwJCVRGX1BBUkFNfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyMywJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSEVYfSwKKyAgICAgIHstMX0sIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjYsCQlUX1NPVVJDRSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjcsCVRfREVQRU5EUywJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjgsCVRfT1BUSU9OQUwsCVRGX0NPTU1BTkR9LAorICAgICAgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzMSwJCVRfU0VMRUNULAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzMiwJVF9DT01NRU5ULAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzMywJVF9SRVFVSVJFUywJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzQsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0JPT0xFQU59LAorICAgICAgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzNywJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOfSwKKyAgICAgIHstMX0sIHstMX0sIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDEsCQlUX0NIT0lDRSwJVEZfQ09NTUFORH0sCisgICAgICB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjQ2LAkJVF9QUk9NUFQsCVRGX0NPTU1BTkR9CisgICAgfTsKKworICBpZiAobGVuIDw9IE1BWF9XT1JEX0xFTkdUSCAmJiBsZW4gPj0gTUlOX1dPUkRfTEVOR1RIKQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBrZXkgPSBrY29uZl9pZF9oYXNoIChzdHIsIGxlbik7CisKKyAgICAgIGlmIChrZXkgPD0gTUFYX0hBU0hfVkFMVUUgJiYga2V5ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICByZWdpc3RlciBpbnQgbyA9IHdvcmRsaXN0W2tleV0ubmFtZTsKKyAgICAgICAgICBpZiAobyA+PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpzID0gbyArIGtjb25mX2lkX3N0cmluZ3M7CisKKyAgICAgICAgICAgICAgaWYgKCpzdHIgPT0gKnMgJiYgIXN0cm5jbXAgKHN0ciArIDEsIHMgKyAxLCBsZW4gLSAxKSAmJiBzW2xlbl0gPT0gJ1wwJykKKyAgICAgICAgICAgICAgICByZXR1cm4gJndvcmRsaXN0W2tleV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYubCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCmluZGV4IDU1NTE3YjIuLmNmYTQ2MDcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCkBAIC0xOCw4ICsxOCwxMiBAQAogCiAjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYKIAotY2hhciAqdGV4dDsKLXN0YXRpYyBjaGFyICp0ZXh0X3B0cjsKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87Cit9IGN1cnJlbnRfcG9zOworCitzdGF0aWMgY2hhciAqdGV4dDsKIHN0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOwogCiBzdHJ1Y3QgYnVmZmVyIHsKQEAgLTMyLDI5ICszNiwyOCBAQAogc3RhdGljIGludCBsYXN0X3RzLCBmaXJzdF90czsKIAogc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyICp6Y29uZl9lbmRmaWxlKHZvaWQpOworc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAogdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKLQl0ZXh0X3B0ciA9IHRleHQ7CiAJdGV4dF9zaXplID0gMDsKLQkqdGV4dF9wdHIgPSAwOworCSp0ZXh0ID0gMDsKIH0KIAogdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CiAJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgeworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3NpemUgJj0gLVNUQVJUX1NUUlNJWkU7CiAJCXRleHQgPSByZWFsbG9jKHRleHQsIG5ld19zaXplKTsKIAkJdGV4dF9hc2l6ZSA9IG5ld19zaXplOwotCQl0ZXh0X3B0ciA9IHRleHQgKyB0ZXh0X3NpemU7CiAJfQotCW1lbWNweSh0ZXh0X3B0ciwgc3RyLCBzaXplKTsKLQl0ZXh0X3B0ciArPSBzaXplOworCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOwogCXRleHRfc2l6ZSArPSBzaXplOwotCSp0ZXh0X3B0ciA9IDA7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAogdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKQEAgLTcyLDEwICs3NSwxMyBAQAogCWludCBzdHIgPSAwOwogCWludCB0cywgaTsKIAotWyBcdF0qIy4qXG4JY3VycmVudF9maWxlLT5saW5lbm8rKzsKK1sgXHRdKiMuKlxuCXwKK1sgXHRdKlxuCXsKKwljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCXJldHVybiBUX0VPTDsKK30KIFsgXHRdKiMuKgogCi1bIFx0XSpcbgljdXJyZW50X2ZpbGUtPmxpbmVubysrOyByZXR1cm4gVF9FT0w7CiAKIFsgXHRdKwl7CiAJQkVHSU4oQ09NTUFORCk7CkBAIC04OCw0MiArOTQsMjUgQEAKIAogCiA8Q09NTUFORD57Ci0JIm1haW5tZW51IgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9NQUlOTUVOVTsKLQkibWVudSIJCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX01FTlU7Ci0JImVuZG1lbnUiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0VORE1FTlU7Ci0JInNvdXJjZSIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfU09VUkNFOwotCSJjaG9pY2UiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0NIT0lDRTsKLQkiZW5kY2hvaWNlIgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9FTkRDSE9JQ0U7Ci0JImNvbW1lbnQiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0NPTU1FTlQ7Ci0JImNvbmZpZyIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfQ09ORklHOwotCSJtZW51Y29uZmlnIgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9NRU5VQ09ORklHOwotCSJoZWxwIgkJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfSEVMUDsKLQkiaWYiCQkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9JRjsKLQkiZW5kaWYiCQkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9FTkRJRjsKLQkiZGVwZW5kcyIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfREVQRU5EUzsKLQkicmVxdWlyZXMiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1JFUVVJUkVTOwotCSJvcHRpb25hbCIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfT1BUSU9OQUw7Ci0JImRlZmF1bHQiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRkFVTFQ7Ci0JInByb21wdCIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfUFJPTVBUOwotCSJ0cmlzdGF0ZSIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfVFJJU1RBVEU7Ci0JImRlZl90cmlzdGF0ZSIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfREVGX1RSSVNUQVRFOwotCSJib29sIgkJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfQk9PTEVBTjsKLQkiYm9vbGVhbiIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfQk9PTEVBTjsKLQkiZGVmX2Jvb2wiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRl9CT09MRUFOOwotCSJkZWZfYm9vbGVhbiIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfREVGX0JPT0xFQU47Ci0JImludCIJCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0lOVDsKLQkiaGV4IgkJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfSEVYOwotCSJzdHJpbmciCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1NUUklORzsKLQkic2VsZWN0IgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9TRUxFQ1Q7Ci0JImVuYWJsZSIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfU0VMRUNUOwotCSJyYW5nZSIJCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1JBTkdFOwogCXtufSsJeworCQlzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5nKTsKKwkJQkVHSU4oUEFSQU0pOworCQljdXJyZW50X3Bvcy5maWxlID0gY3VycmVudF9maWxlOworCQljdXJyZW50X3Bvcy5saW5lbm8gPSBjdXJyZW50X2ZpbGUtPmxpbmVubzsKKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX0NPTU1BTkQpIHsKKwkJCXpjb25mbHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQogCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwogCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKIAkJcmV0dXJuIFRfV09SRDsKIAl9CiAJLgotCVxuCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7IEJFR0lOKElOSVRJQUwpOworCVxuCXsKKwkJQkVHSU4oSU5JVElBTCk7CisJCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CisJCXJldHVybiBUX0VPTDsKKwl9CiB9CiAKIDxQQVJBTT57CkBAIC0xMzQsOCArMTIzLDYgQEAKIAkiISIJcmV0dXJuIFRfTk9UOwogCSI9IglyZXR1cm4gVF9FUVVBTDsKIAkiIT0iCXJldHVybiBUX1VORVFVQUw7Ci0JImlmIglyZXR1cm4gVF9JRjsKLQkib24iCXJldHVybiBUX09OOwogCVwifFwnCXsKIAkJc3RyID0geXl0ZXh0WzBdOwogCQluZXdfc3RyaW5nKCk7CkBAIC0xNDQsNiArMTMxLDExIEBACiAJXG4JQkVHSU4oSU5JVElBTCk7IGN1cnJlbnRfZmlsZS0+bGluZW5vKys7IHJldHVybiBUX0VPTDsKIAktLS0JLyogaWdub3JlICovCiAJKHtufXxbLS8uXSkrCXsKKwkJc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVuZyk7CisJCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9QQVJBTSkgeworCQkJemNvbmZsdmFsLmlkID0gaWQ7CisJCQlyZXR1cm4gaWQtPnRva2VuOworCQl9CiAJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CiAJCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OwogCQlyZXR1cm4gVF9XT1JEOwpAQCAtMjM2LDkgKzIyOCw5IEBACiB9CiAKIDw8RU9GPj4JewotCWlmIChjdXJyZW50X2J1ZikgeworCWlmIChjdXJyZW50X2ZpbGUpIHsKIAkJemNvbmZfZW5kZmlsZSgpOwotCQlyZXR1cm4gVF9FT0Y7CisJCXJldHVybiBUX0VPTDsKIAl9CiAJZmNsb3NlKHl5aW4pOwogCXl5dGVybWluYXRlKCk7CkBAIC0zMjksNyArMzIxLDcgQEAKIAljdXJyZW50X2ZpbGUgPSBmaWxlOwogfQogCi1zdGF0aWMgc3RydWN0IGJ1ZmZlciAqemNvbmZfZW5kZmlsZSh2b2lkKQorc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKQogewogCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKIApAQCAtMzQ1LDIyICszMzcsMTQgQEAKIAl9CiAJZnJlZShjdXJyZW50X2J1Zik7CiAJY3VycmVudF9idWYgPSBwYXJlbnQ7Ci0KLQlyZXR1cm4gcGFyZW50OwogfQogCiBpbnQgemNvbmZfbGluZW5vKHZvaWQpCiB7Ci0JaWYgKGN1cnJlbnRfYnVmKQotCQlyZXR1cm4gY3VycmVudF9maWxlLT5saW5lbm8gLSAxOwotCWVsc2UKLQkJcmV0dXJuIDA7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsKIH0KIAogY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKQogewotCWlmIChjdXJyZW50X2J1ZikKLQkJcmV0dXJuIGN1cnJlbnRfZmlsZS0+bmFtZTsKLQllbHNlCi0JCXJldHVybiAiPG5vbmU+IjsKKwlyZXR1cm4gY3VycmVudF9wb3MuZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+IjsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQKaW5kZXggZmY0ZmNjMC4uZWE3NzU1ZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQKQEAgLTEsNyArMSw3IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMS44NzVhLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjAuICAqLwogCiAvKiBTa2VsZXRvbiBwYXJzZXIgZm9yIFlhY2MtbGlrZSBwYXJzaW5nIHdpdGggQmlzb24sCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDUsOCArNDUsNyBAQAogLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAotLyogSWYgTkFNRV9QUkVGSVggaXMgc3BlY2lmaWVkIHN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCi0gICBuYW1lcy4gICovCisvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwogI2RlZmluZSB5eXBhcnNlIHpjb25mcGFyc2UKICNkZWZpbmUgeXlsZXggICB6Y29uZmxleAogI2RlZmluZSB5eWVycm9yIHpjb25mZXJyb3IKQEAgLTc5LDI4ICs3OCwyMSBAQAogICAgICBUX1JFUVVJUkVTID0gMjcyLAogICAgICBUX09QVElPTkFMID0gMjczLAogICAgICBUX1BST01QVCA9IDI3NCwKLSAgICAgVF9ERUZBVUxUID0gMjc1LAotICAgICBUX1RSSVNUQVRFID0gMjc2LAotICAgICBUX0RFRl9UUklTVEFURSA9IDI3NywKLSAgICAgVF9CT09MRUFOID0gMjc4LAotICAgICBUX0RFRl9CT09MRUFOID0gMjc5LAotICAgICBUX1NUUklORyA9IDI4MCwKLSAgICAgVF9JTlQgPSAyODEsCi0gICAgIFRfSEVYID0gMjgyLAotICAgICBUX1dPUkQgPSAyODMsCi0gICAgIFRfV09SRF9RVU9URSA9IDI4NCwKLSAgICAgVF9VTkVRVUFMID0gMjg1LAotICAgICBUX0VPRiA9IDI4NiwKLSAgICAgVF9FT0wgPSAyODcsCi0gICAgIFRfQ0xPU0VfUEFSRU4gPSAyODgsCi0gICAgIFRfT1BFTl9QQVJFTiA9IDI4OSwKLSAgICAgVF9PTiA9IDI5MCwKLSAgICAgVF9TRUxFQ1QgPSAyOTEsCi0gICAgIFRfUkFOR0UgPSAyOTIsCi0gICAgIFRfT1IgPSAyOTMsCi0gICAgIFRfQU5EID0gMjk0LAotICAgICBUX0VRVUFMID0gMjk1LAotICAgICBUX05PVCA9IDI5NgorICAgICBUX1RZUEUgPSAyNzUsCisgICAgIFRfREVGQVVMVCA9IDI3NiwKKyAgICAgVF9TRUxFQ1QgPSAyNzcsCisgICAgIFRfUkFOR0UgPSAyNzgsCisgICAgIFRfT04gPSAyNzksCisgICAgIFRfV09SRCA9IDI4MCwKKyAgICAgVF9XT1JEX1FVT1RFID0gMjgxLAorICAgICBUX1VORVFVQUwgPSAyODIsCisgICAgIFRfQ0xPU0VfUEFSRU4gPSAyODMsCisgICAgIFRfT1BFTl9QQVJFTiA9IDI4NCwKKyAgICAgVF9FT0wgPSAyODUsCisgICAgIFRfT1IgPSAyODYsCisgICAgIFRfQU5EID0gMjg3LAorICAgICBUX0VRVUFMID0gMjg4LAorICAgICBUX05PVCA9IDI4OQogICAgfTsKICNlbmRpZgogI2RlZmluZSBUX01BSU5NRU5VIDI1OApAQCAtMTIwLDI4ICsxMTIsMjEgQEAKICNkZWZpbmUgVF9SRVFVSVJFUyAyNzIKICNkZWZpbmUgVF9PUFRJT05BTCAyNzMKICNkZWZpbmUgVF9QUk9NUFQgMjc0Ci0jZGVmaW5lIFRfREVGQVVMVCAyNzUKLSNkZWZpbmUgVF9UUklTVEFURSAyNzYKLSNkZWZpbmUgVF9ERUZfVFJJU1RBVEUgMjc3Ci0jZGVmaW5lIFRfQk9PTEVBTiAyNzgKLSNkZWZpbmUgVF9ERUZfQk9PTEVBTiAyNzkKLSNkZWZpbmUgVF9TVFJJTkcgMjgwCi0jZGVmaW5lIFRfSU5UIDI4MQotI2RlZmluZSBUX0hFWCAyODIKLSNkZWZpbmUgVF9XT1JEIDI4MwotI2RlZmluZSBUX1dPUkRfUVVPVEUgMjg0Ci0jZGVmaW5lIFRfVU5FUVVBTCAyODUKLSNkZWZpbmUgVF9FT0YgMjg2Ci0jZGVmaW5lIFRfRU9MIDI4NwotI2RlZmluZSBUX0NMT1NFX1BBUkVOIDI4OAotI2RlZmluZSBUX09QRU5fUEFSRU4gMjg5Ci0jZGVmaW5lIFRfT04gMjkwCi0jZGVmaW5lIFRfU0VMRUNUIDI5MQotI2RlZmluZSBUX1JBTkdFIDI5MgotI2RlZmluZSBUX09SIDI5MwotI2RlZmluZSBUX0FORCAyOTQKLSNkZWZpbmUgVF9FUVVBTCAyOTUKLSNkZWZpbmUgVF9OT1QgMjk2CisjZGVmaW5lIFRfVFlQRSAyNzUKKyNkZWZpbmUgVF9ERUZBVUxUIDI3NgorI2RlZmluZSBUX1NFTEVDVCAyNzcKKyNkZWZpbmUgVF9SQU5HRSAyNzgKKyNkZWZpbmUgVF9PTiAyNzkKKyNkZWZpbmUgVF9XT1JEIDI4MAorI2RlZmluZSBUX1dPUkRfUVVPVEUgMjgxCisjZGVmaW5lIFRfVU5FUVVBTCAyODIKKyNkZWZpbmUgVF9DTE9TRV9QQVJFTiAyODMKKyNkZWZpbmUgVF9PUEVOX1BBUkVOIDI4NAorI2RlZmluZSBUX0VPTCAyODUKKyNkZWZpbmUgVF9PUiAyODYKKyNkZWZpbmUgVF9BTkQgMjg3CisjZGVmaW5lIFRfRVFVQUwgMjg4CisjZGVmaW5lIFRfTk9UIDI4OQogCiAKIApAQCAtMTYxLDYgKzE0NiwxMSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAorI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworI2luY2x1ZGUgInpjb25mLmhhc2guYyIKKwogI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQogCiAjZGVmaW5lIFBSSU5URAkJMHgwMDAxCkBAIC0xNzAsMTQgKzE2MCwxOCBAQAogCiBleHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7CiBzdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihpbnQgdG9rZW4sIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7CiAKIHN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoWzI1N107CiAKIHN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKIAorI2RlZmluZSBZWURFQlVHIDAKKyNpZiBZWURFQlVHCiAjZGVmaW5lIFlZRVJST1JfVkVSQk9TRQorI2VuZGlmCiAKIAogLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KQEAgLTE5NiwxMyArMTkwLDE0IEBACiAjaWYgISBkZWZpbmVkIChZWVNUWVBFKSAmJiAhIGRlZmluZWQgKFlZU1RZUEVfSVNfREVDTEFSRUQpCiAKIHR5cGVkZWYgdW5pb24gWVlTVFlQRSB7Ci0JaW50IHRva2VuOwogCWNoYXIgKnN0cmluZzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7CiAJc3RydWN0IGV4cHIgKmV4cHI7CiAJc3RydWN0IG1lbnUgKm1lbnU7CisJc3RydWN0IGtjb25mX2lkICppZDsKIH0gWVlTVFlQRTsKLS8qIExpbmUgMTkxIG9mIHlhY2MuYy4gICovCisvKiBMaW5lIDE5MCBvZiB5YWNjLmMuICAqLwogCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKQEAgLTIxNCwyNyArMjA5LDI2IEBACiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKLSNpbmNsdWRlICJsa2MuaCIKLQotCi0vKiBMaW5lIDIxNCBvZiB5YWNjLmMuICAqLworLyogTGluZSAyMTMgb2YgeWFjYy5jLiAgKi8KIAogCiAjaWYgISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKIAorIyBpZm5kZWYgWVlGUkVFCisjICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgZW5kaWYKKyMgaWZuZGVmIFlZTUFMTE9DCisjICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjIGVuZGlmCisKIC8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KIAotIyBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQotIyBlbHNlCi0jICBpZm5kZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWYgZGVmaW5lZCAoYWxsb2NhKSB8fCBkZWZpbmVkIChfQUxMT0NBX0gpCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKICMgICBlbHNlCi0jICAgIGlmZGVmIF9fR05VQ19fCi0jICAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCi0jICAgIGVuZGlmCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQogIyAgIGVuZGlmCiAjICBlbmRpZgogIyBlbmRpZgpAQCAtMjQ3LDIwICsyNDEsMjAgQEAKICMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKICMgIGVuZGlmCi0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBtYWxsb2MKLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgZnJlZQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCiAjIGVuZGlmCiAjZW5kaWYgLyogISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KIAogCiAjaWYgKCEgZGVmaW5lZCAoeXlvdmVyZmxvdykgXAogICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAotCSB8fCAoWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8IChkZWZpbmVkIChZWVNUWVBFX0lTX1RSSVZJQUwpICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQogCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKIHsKLSAgc2hvcnQgeXlzczsKKyAgc2hvcnQgaW50IHl5c3M7CiAgIFlZU1RZUEUgeXl2czsKICAgfTsKIApAQCAtMjcwLDEzICsyNjQsMTMgQEAKIC8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAogICAgTiBlbGVtZW50cy4gICovCiAjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHNob3J0KSArIHNpemVvZiAoWVlTVFlQRSkpCQkJCVwKKyAgICAgKChOKSAqIChzaXplb2YgKHNob3J0IGludCkgKyBzaXplb2YgKFlZU1RZUEUpKQkJCVwKICAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKIAogLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCiAgICBub3Qgb3ZlcmxhcC4gICovCiAjIGlmbmRlZiBZWUNPUFkKLSMgIGlmIDEgPCBfX0dOVUNfXworIyAgaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIDEgPCBfX0dOVUNfXwogIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCiAgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCiAjICBlbHNlCkBAIC0zMTIsMjYgKzMwNiwyNiBAQAogI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKICAgIHR5cGVkZWYgc2lnbmVkIGNoYXIgeXlzaWduZWRfY2hhcjsKICNlbHNlCi0gICB0eXBlZGVmIHNob3J0IHl5c2lnbmVkX2NoYXI7CisgICB0eXBlZGVmIHNob3J0IGludCB5eXNpZ25lZF9jaGFyOwogI2VuZGlmCiAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlGSU5BTCAgMgorI2RlZmluZSBZWUZJTkFMICAzCiAvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMjAxCisjZGVmaW5lIFlZTEFTVCAgIDI2NAogCiAvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gKi8KLSNkZWZpbmUgWVlOVE9LRU5TICA0MgorI2RlZmluZSBZWU5UT0tFTlMgIDM1CiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gKi8KLSNkZWZpbmUgWVlOTlRTICA0MQorI2RlZmluZSBZWU5OVFMgIDQyCiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICovCiAjZGVmaW5lIFlZTlJVTEVTICAxMDQKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMTgyCisjZGVmaW5lIFlZTlNUQVRFUyAgMTc1CiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDI5NgorI2RlZmluZSBZWU1BWFVUT0sgICAyODkKIAogI2RlZmluZSBZWVRSQU5TTEFURShZWVgpIAkJCQkJCVwKICAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQpAQCAtMzY3LDc5ICszNjEsNzggQEAKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAogICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCiAgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0CiB9OwogCiAjaWYgWVlERUJVRwogLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCiAgICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgeXlwcmhzW10gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCB5eXByaHNbXSA9CiB7Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE3LCAgICAxOSwKLSAgICAgIDIxLCAgICAyMywgICAgMjYsICAgIDI4LCAgICAzMCwgICAgMzIsICAgIDM0LCAgICAzNiwgICAgMzgsICAgIDQyLAotICAgICAgNDUsICAgIDQ5LCAgICA1MiwgICAgNTMsICAgIDU2LCAgICA1OSwgICAgNjIsICAgIDY1LCAgICA2OSwgICAgNzQsCi0gICAgICA3OCwgICAgODMsICAgIDg3LCAgICA5MSwgICAgOTUsICAgMTAwLCAgIDEwNSwgICAxMTAsICAgMTE2LCAgIDExOSwKLSAgICAgMTIyLCAgIDEyNCwgICAxMjgsICAgMTMxLCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwgICAxNDQsICAgMTQ5LAotICAgICAxNTMsICAgMTU3LCAgIDE2MCwgICAxNjUsICAgMTY2LCAgIDE2OSwgICAxNzMsICAgMTc1LCAgIDE3OSwgICAxODIsCi0gICAgIDE4MywgICAxODYsICAgMTg5LCAgIDE5MiwgICAxOTYsICAgMTk5LCAgIDIwMSwgICAyMDUsICAgMjA4LCAgIDIwOSwKLSAgICAgMjEyLCAgIDIxNSwgICAyMTgsICAgMjIyLCAgIDIyNiwgICAyMjgsICAgMjMyLCAgIDIzNSwgICAyMzgsICAgMjQxLAotICAgICAyNDIsICAgMjQ1LCAgIDI0OCwgICAyNTMsICAgMjU3LCAgIDI2MSwgICAyNjIsICAgMjY1LCAgIDI2NywgICAyNjksCi0gICAgIDI3MiwgICAyNzUsICAgMjc4LCAgIDI4MCwgICAyODIsICAgMjgzLCAgIDI4NiwgICAyODgsICAgMjkyLCAgIDI5NiwKLSAgICAgMzAwLCAgIDMwMywgICAzMDcsICAgMzExLCAgIDMxMworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA2LCAgICAgOSwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMjMsCisgICAgICAyOCwgICAgMzMsICAgIDM3LCAgICAzOSwgICAgNDEsICAgIDQzLCAgICA0NSwgICAgNDcsICAgIDQ5LCAgICA1MSwKKyAgICAgIDUzLCAgICA1NSwgICAgNTcsICAgIDU5LCAgICA2MSwgICAgNjMsICAgIDY3LCAgICA3MCwgICAgNzQsICAgIDc3LAorICAgICAgODEsICAgIDg0LCAgICA4NSwgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTcsICAgMTAwLCAgIDEwNCwgICAxMDksCisgICAgIDExNCwgICAxMTksICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTMzLCAgIDEzNywgICAxMzgsICAgMTQxLCAgIDE0NCwKKyAgICAgMTQ3LCAgIDE1MCwgICAxNTMsICAgMTU4LCAgIDE2MiwgICAxNjUsICAgMTcwLCAgIDE3MSwgICAxNzQsICAgMTc4LAorICAgICAxODAsICAgMTg0LCAgIDE4NSwgICAxODgsICAgMTkxLCAgIDE5NCwgICAxOTgsICAgMjAxLCAgIDIwMywgICAyMDcsCisgICAgIDIwOCwgICAyMTEsICAgMjE0LCAgIDIxNywgICAyMjEsICAgMjI1LCAgIDIyOCwgICAyMzEsICAgMjM0LCAgIDIzNSwKKyAgICAgMjM4LCAgIDI0MSwgICAyNDQsICAgMjQ5LCAgIDI1MywgICAyNTcsICAgMjU4LCAgIDI2MSwgICAyNjMsICAgMjY1LAorICAgICAyNjgsICAgMjcxLCAgIDI3NCwgICAyNzYsICAgMjc5LCAgIDI4MCwgICAyODMsICAgMjg1LCAgIDI4OSwgICAyOTMsCisgICAgIDI5NywgICAzMDAsICAgMzA0LCAgIDMwOCwgICAzMTAKIH07CiAKIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gKi8KIHN0YXRpYyBjb25zdCB5eXNpZ25lZF9jaGFyIHl5cmhzW10gPQogewotICAgICAgNDMsICAgICAwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNTUsCi0gICAgICAtMSwgICAgNjYsICAgIC0xLCAgICAgMywgICAgNzcsICAgIDc5LCAgICAtMSwgICAgIDUsICAgIC0xLCAgICAxNSwKLSAgICAgIC0xLCAgICAgOCwgICAgLTEsICAgICAxLCAgICA3OSwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgNzEsICAgIC0xLAotICAgICAgNDcsICAgIC0xLCAgICA0OSwgICAgLTEsICAgIDY5LCAgICAtMSwgICAgNzksICAgIC0xLCAgICAxMCwgICAgMjgsCi0gICAgICAzMiwgICAgLTEsICAgIDQ2LCAgICA1MCwgICAgLTEsICAgIDExLCAgICAyOCwgICAgMzIsICAgIC0xLCAgICA0OCwKLSAgICAgIDUwLCAgICAtMSwgICAgLTEsICAgIDUwLCAgICA1MSwgICAgLTEsICAgIDUwLCAgICA3NSwgICAgLTEsICAgIDUwLAotICAgICAgNzMsICAgIC0xLCAgICA1MCwgICAgMzIsICAgIC0xLCAgICAyMSwgICAgNzYsICAgIDMyLCAgICAtMSwgICAgMjIsCi0gICAgICA4MSwgICAgODAsICAgIDMyLCAgICAtMSwgICAgMjMsICAgIDc2LCAgICAzMiwgICAgLTEsICAgIDI0LCAgICA4MSwKLSAgICAgIDgwLCAgICAzMiwgICAgLTEsICAgIDI2LCAgICA3NiwgICAgMzIsICAgIC0xLCAgICAyNywgICAgNzYsICAgIDMyLAotICAgICAgLTEsICAgIDI1LCAgICA3NiwgICAgMzIsICAgIC0xLCAgICAxOSwgICAgNzcsICAgIDgwLCAgICAzMiwgICAgLTEsCi0gICAgICAyMCwgICAgODEsICAgIDgwLCAgICAzMiwgICAgLTEsICAgIDM2LCAgICAyOCwgICAgODAsICAgIDMyLCAgICAtMSwKLSAgICAgIDM3LCAgICA4MiwgICAgODIsICAgIDgwLCAgICAzMiwgICAgLTEsICAgICA3LCAgICAzMiwgICAgLTEsICAgIDUyLAotICAgICAgNTYsICAgIC0xLCAgICA3OCwgICAgLTEsICAgIDUzLCAgICA1OCwgICAgNTQsICAgIC0xLCAgICA1MywgICAgNTgsCi0gICAgICAtMSwgICAgLTEsICAgIDU2LCAgICA1NywgICAgLTEsICAgIDU2LCAgICA3NSwgICAgLTEsICAgIDU2LCAgICA3MywKLSAgICAgIC0xLCAgICA1NiwgICAgMzIsICAgIC0xLCAgICAxOSwgICAgNzcsICAgIDgwLCAgICAzMiwgICAgLTEsICAgIDIxLAotICAgICAgNzYsICAgIDMyLCAgICAtMSwgICAgMjMsICAgIDc2LCAgICAzMiwgICAgLTEsICAgIDE4LCAgICAzMiwgICAgLTEsCi0gICAgICAyMCwgICAgMjgsICAgIDgwLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICA1OCwgICAgNDUsICAgIC0xLCAgICAxNCwKLSAgICAgIDgxLCAgICAzMiwgICAgLTEsICAgIDc4LCAgICAtMSwgICAgNTksICAgIDYyLCAgICA2MCwgICAgLTEsICAgIDU5LAotICAgICAgNjIsICAgIC0xLCAgICAtMSwgICAgNjIsICAgIDQ1LCAgICAtMSwgICAgNjIsICAgIDY2LCAgICAtMSwgICAgNjIsCi0gICAgICA1NSwgICAgLTEsICAgICA0LCAgICA3NywgICAgMzIsICAgIC0xLCAgICA2MywgICAgNzQsICAgIC0xLCAgICA3OCwKLSAgICAgIC0xLCAgICA2NCwgICAgNjcsICAgIDY1LCAgICAtMSwgICAgNjQsICAgIDY3LCAgICAtMSwgICAgLTEsICAgIDY3LAotICAgICAgNDUsICAgIC0xLCAgICA2NywgICAgNjYsICAgIC0xLCAgICA2NywgICAgNTUsICAgIC0xLCAgICA2NywgICAgIDEsCi0gICAgICAzMiwgICAgLTEsICAgICA2LCAgICA3NywgICAgMzIsICAgIC0xLCAgICA2OCwgICAgLTEsICAgICA5LCAgICA3NywKLSAgICAgIDMyLCAgICAtMSwgICAgNzAsICAgIDc0LCAgICAtMSwgICAgMTIsICAgIDMyLCAgICAtMSwgICAgNzIsICAgIDEzLAotICAgICAgLTEsICAgIC0xLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NCwgICAgMzIsICAgIC0xLCAgICAxNiwgICAgMzUsCi0gICAgICA4MSwgICAgMzIsICAgIC0xLCAgICAxNiwgICAgODEsICAgIDMyLCAgICAtMSwgICAgMTcsICAgIDgxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgNzcsICAgIDgwLCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICA1LAotICAgICAgNzksICAgIC0xLCAgICAgOCwgICAgNzksICAgIC0xLCAgICAxNSwgICAgNzksICAgIC0xLCAgICAzMiwgICAgLTEsCi0gICAgICAzMSwgICAgLTEsICAgIC0xLCAgICAxNCwgICAgODEsICAgIC0xLCAgICA4MiwgICAgLTEsICAgIDgyLCAgICA0MCwKLSAgICAgIDgyLCAgICAtMSwgICAgODIsICAgIDMwLCAgICA4MiwgICAgLTEsICAgIDM0LCAgICA4MSwgICAgMzMsICAgIC0xLAotICAgICAgNDEsICAgIDgxLCAgICAtMSwgICAgODEsICAgIDM4LCAgICA4MSwgICAgLTEsICAgIDgxLCAgICAzOSwgICAgODEsCi0gICAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEKKyAgICAgIDM2LCAgICAgMCwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAzOSwgICAgLTEsICAgIDM3LAorICAgICAgNTAsICAgIC0xLCAgICAzNywgICAgNjEsICAgIC0xLCAgICAzNywgICAgIDMsICAgIDcxLCAgICA3MywgICAgLTEsCisgICAgICAzNywgICAgNzIsICAgIC0xLCAgICAzNywgICAgMjUsICAgICAxLCAgICAzMCwgICAgLTEsICAgIDM3LCAgICAzOCwKKyAgICAgICAxLCAgICAzMCwgICAgLTEsICAgIDM3LCAgICAgMSwgICAgMzAsICAgIC0xLCAgICAxNiwgICAgLTEsICAgIDE5LAorICAgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjIsICAgIC0xLCAgICAxOCwgICAgLTEsICAgIDIzLCAgICAtMSwgICAgMjEsCisgICAgICAtMSwgICAgMzAsICAgIC0xLCAgICA1NiwgICAgLTEsICAgIDY1LCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0NCwKKyAgICAgIC0xLCAgICA2MywgICAgLTEsICAgIDI1LCAgICAgMSwgICAgMzAsICAgIC0xLCAgICAgMSwgICAgMzAsICAgIC0xLAorICAgICAgMTAsICAgIDI1LCAgICAzMCwgICAgLTEsICAgIDQxLCAgICA0NSwgICAgLTEsICAgIDExLCAgICAyNSwgICAgMzAsCisgICAgICAtMSwgICAgNDMsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICA2OSwKKyAgICAgIC0xLCAgICA0NSwgICAgNjcsICAgIC0xLCAgICA0NSwgICAgNDAsICAgIC0xLCAgICA0NSwgICAgMzAsICAgIC0xLAorICAgICAgMjAsICAgIDcwLCAgICAzMCwgICAgLTEsICAgIDE5LCAgICA3MSwgICAgNzQsICAgIDMwLCAgICAtMSwgICAgMjEsCisgICAgICA3NSwgICAgNzQsICAgIDMwLCAgICAtMSwgICAgMjIsICAgIDI1LCAgICA3NCwgICAgMzAsICAgIC0xLCAgICAyMywKKyAgICAgIDc2LCAgICA3NiwgICAgNzQsICAgIDMwLCAgICAtMSwgICAgIDcsICAgIDMwLCAgICAtMSwgICAgNDcsICAgIDUxLAorICAgICAgLTEsICAgIDcyLCAgICAtMSwgICAgNDgsICAgIDUzLCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsCisgICAgICAtMSwgICAgNTEsICAgIDY5LCAgICAtMSwgICAgNTEsICAgIDY3LCAgICAtMSwgICAgNTEsICAgIDMwLCAgICAtMSwKKyAgICAgIDUxLCAgICA0MCwgICAgLTEsICAgIDE5LCAgICA3MSwgICAgNzQsICAgIDMwLCAgICAtMSwgICAgMjAsICAgIDcwLAorICAgICAgMzAsICAgIC0xLCAgICAxOCwgICAgMzAsICAgIC0xLCAgICAyMSwgICAgMjUsICAgIDc0LCAgICAzMCwgICAgLTEsCisgICAgICAtMSwgICAgNTMsICAgIDM5LCAgICAtMSwgICAgMTQsICAgIDc1LCAgICA3MywgICAgLTEsICAgIDcyLCAgICAtMSwKKyAgICAgIDU0LCAgICA1NywgICAgNTUsICAgIC0xLCAgICAtMSwgICAgNTcsICAgIDM5LCAgICAtMSwgICAgNTcsICAgIDYxLAorICAgICAgLTEsICAgIDU3LCAgICA1MCwgICAgLTEsICAgICA0LCAgICA3MSwgICAgMzAsICAgIC0xLCAgICA1OCwgICAgNjgsCisgICAgICAtMSwgICAgNzIsICAgIC0xLCAgICA1OSwgICAgNjIsICAgIDYwLCAgICAtMSwgICAgLTEsICAgIDYyLCAgICAzOSwKKyAgICAgIC0xLCAgICA2MiwgICAgNjEsICAgIC0xLCAgICA2MiwgICAgNTAsICAgIC0xLCAgICAgNiwgICAgNzEsICAgIDMwLAorICAgICAgLTEsICAgICA5LCAgICA3MSwgICAgMzAsICAgIC0xLCAgICA2NCwgICAgNjgsICAgIC0xLCAgICAxMiwgICAgMzAsCisgICAgICAtMSwgICAgNjYsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIDY4LCAgICA2OSwgICAgLTEsICAgIDY4LCAgICAzMCwKKyAgICAgIC0xLCAgICA2OCwgICAgNDAsICAgIC0xLCAgICAxNiwgICAgMjQsICAgIDc1LCAgICAzMCwgICAgLTEsICAgIDE2LAorICAgICAgNzUsICAgIDMwLCAgICAtMSwgICAgMTcsICAgIDc1LCAgICAzMCwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgNzQsCisgICAgICAtMSwgICAgMjUsICAgIC0xLCAgICAyNiwgICAgLTEsICAgICA1LCAgICAzMCwgICAgLTEsICAgICA4LCAgICAzMCwKKyAgICAgIC0xLCAgICAxNSwgICAgMzAsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDczLCAgICAzMCwgICAgLTEsICAgIC0xLAorICAgICAgMTQsICAgIDc1LCAgICAtMSwgICAgNzYsICAgIC0xLCAgICA3NiwgICAgMzMsICAgIDc2LCAgICAtMSwgICAgNzYsCisgICAgICAyNywgICAgNzYsICAgIC0xLCAgICAyOSwgICAgNzUsICAgIDI4LCAgICAtMSwgICAgMzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc1LCAgICAzMSwgICAgNzUsICAgIC0xLCAgICA3NSwgICAgMzIsICAgIDc1LCAgICAtMSwgICAgMjUsICAgIC0xLAorICAgICAgMjYsICAgIC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB5eXJsaW5lW10gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCB5eXJsaW5lW10gPQogewotICAgICAgIDAsICAgIDk0LCAgICA5NCwgICAgOTUsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDMsCi0gICAgIDEwNCwgICAxMDUsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTIwLCAgIDEyOCwKLSAgICAgMTM0LCAgIDE0MiwgICAxNTIsICAgMTU0LCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE2MCwgICAxNjYsICAgMTczLAotICAgICAxNzksICAgMTg2LCAgIDE5MiwgICAxOTgsICAgMjA0LCAgIDIxMCwgICAyMTYsICAgMjIyLCAgIDIzMCwgICAyMzksCi0gICAgIDI0NSwgICAyNTQsICAgMjU1LCAgIDI2MSwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgMjY5LCAgIDI3NSwKLSAgICAgMjgxLCAgIDI4NywgICAyOTMsICAgMjk5LCAgIDMwMSwgICAzMDYsICAgMzE1LCAgIDMyNCwgICAzMjUsICAgMzMxLAotICAgICAzMzMsICAgMzM0LCAgIDMzNSwgICAzNDAsICAgMzQ3LCAgIDM1MywgICAzNjIsICAgMzYzLCAgIDM2OSwgICAzNzEsCi0gICAgIDM3MiwgICAzNzMsICAgMzc0LCAgIDM3NywgICAzODMsICAgMzkwLCAgIDM5NywgICA0MDQsICAgNDEwLCAgIDQxNywKLSAgICAgNDE4LCAgIDQxOSwgICA0MjIsICAgNDI3LCAgIDQzMiwgICA0NDAsICAgNDQyLCAgIDQ0NywgICA0NDgsICAgNDUxLAotICAgICA0NTIsICAgNDUzLCAgIDQ1NywgICA0NTcsICAgNDU5LCAgIDQ2MCwgICA0NjMsICAgNDY0LCAgIDQ2NSwgICA0NjYsCi0gICAgIDQ2NywgICA0NjgsICAgNDY5LCAgIDQ3MiwgICA0NzMKKyAgICAgICAwLCAgIDEwMywgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLAorICAgICAxMTMsICAgMTE3LCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjUsCisgICAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMzAsICAgMTM0LCAgIDEzNSwgICAxNDEsICAgMTQ5LCAgIDE1NSwKKyAgICAgMTYzLCAgIDE3MywgICAxNzUsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTc5LCAgIDE4MiwgICAxOTAsICAgMTk2LAorICAgICAyMDYsICAgMjEyLCAgIDIyMCwgICAyMjksICAgMjM0LCAgIDI0MiwgICAyNDUsICAgMjQ3LCAgIDI0OCwgICAyNDksCisgICAgIDI1MCwgICAyNTEsICAgMjU0LCAgIDI2MCwgICAyNzEsICAgMjc3LCAgIDI4NywgICAyODksICAgMjk0LCAgIDMwMiwKKyAgICAgMzEwLCAgIDMxMywgICAzMTUsICAgMzE2LCAgIDMxNywgICAzMjIsICAgMzI5LCAgIDMzNCwgICAzNDIsICAgMzQ1LAorICAgICAzNDcsICAgMzQ4LCAgIDM0OSwgICAzNTIsICAgMzYwLCAgIDM2NywgICAzNzQsICAgMzgwLCAgIDM4NywgICAzODksCisgICAgIDM5MCwgICAzOTEsICAgMzk0LCAgIDM5OSwgICA0MDQsICAgNDEyLCAgIDQxNCwgICA0MTksICAgNDIwLCAgIDQyMywKKyAgICAgNDI0LCAgIDQyNSwgICA0MjksICAgNDMwLCAgIDQzMywgICA0MzQsICAgNDM3LCAgIDQzOCwgICA0MzksICAgNDQwLAorICAgICA0NDEsICAgNDQyLCAgIDQ0MywgICA0NDYsICAgNDQ3CiB9OwogI2VuZGlmCiAKQEAgLTQ0OCw2NyArNDQxLDY1IEBACiAgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICovCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KIHsKLSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUX01BSU5NRU5VIiwgIlRfTUVOVSIsICJUX0VORE1FTlUiLCAKLSAgIlRfU09VUkNFIiwgIlRfQ0hPSUNFIiwgIlRfRU5EQ0hPSUNFIiwgIlRfQ09NTUVOVCIsICJUX0NPTkZJRyIsIAotICAiVF9NRU5VQ09ORklHIiwgIlRfSEVMUCIsICJUX0hFTFBURVhUIiwgIlRfSUYiLCAiVF9FTkRJRiIsICJUX0RFUEVORFMiLCAKLSAgIlRfUkVRVUlSRVMiLCAiVF9PUFRJT05BTCIsICJUX1BST01QVCIsICJUX0RFRkFVTFQiLCAiVF9UUklTVEFURSIsIAotICAiVF9ERUZfVFJJU1RBVEUiLCAiVF9CT09MRUFOIiwgIlRfREVGX0JPT0xFQU4iLCAiVF9TVFJJTkciLCAiVF9JTlQiLCAKLSAgIlRfSEVYIiwgIlRfV09SRCIsICJUX1dPUkRfUVVPVEUiLCAiVF9VTkVRVUFMIiwgIlRfRU9GIiwgIlRfRU9MIiwgCi0gICJUX0NMT1NFX1BBUkVOIiwgIlRfT1BFTl9QQVJFTiIsICJUX09OIiwgIlRfU0VMRUNUIiwgIlRfUkFOR0UiLCAiVF9PUiIsIAotICAiVF9BTkQiLCAiVF9FUVVBTCIsICJUX05PVCIsICIkYWNjZXB0IiwgImlucHV0IiwgImJsb2NrIiwgCi0gICJjb21tb25fYmxvY2siLCAiY29uZmlnX2VudHJ5X3N0YXJ0IiwgImNvbmZpZ19zdG10IiwgCi0gICJtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IiwgIm1lbnVjb25maWdfc3RtdCIsICJjb25maWdfb3B0aW9uX2xpc3QiLCAKLSAgImNvbmZpZ19vcHRpb24iLCAiY2hvaWNlIiwgImNob2ljZV9lbnRyeSIsICJjaG9pY2VfZW5kIiwgImNob2ljZV9zdG10IiwgCi0gICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9pY2VfYmxvY2siLCAiaWYiLCAiaWZfZW5kIiwgCi0gICJpZl9zdG10IiwgImlmX2Jsb2NrIiwgIm1lbnUiLCAibWVudV9lbnRyeSIsICJtZW51X2VuZCIsICJtZW51X3N0bXQiLCAKLSAgIm1lbnVfYmxvY2siLCAic291cmNlIiwgInNvdXJjZV9zdG10IiwgImNvbW1lbnQiLCAiY29tbWVudF9zdG10IiwgCi0gICJoZWxwX3N0YXJ0IiwgImhlbHAiLCAiZGVwZW5kc19saXN0IiwgImRlcGVuZHMiLCAicHJvbXB0X3N0bXRfb3B0IiwgCi0gICJwcm9tcHQiLCAiZW5kIiwgIm5sX29yX2VvZiIsICJpZl9leHByIiwgImV4cHIiLCAic3ltYm9sIiwgMAorICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlRfTUFJTk1FTlUiLCAiVF9NRU5VIiwgIlRfRU5ETUVOVSIsCisgICJUX1NPVVJDRSIsICJUX0NIT0lDRSIsICJUX0VORENIT0lDRSIsICJUX0NPTU1FTlQiLCAiVF9DT05GSUciLAorICAiVF9NRU5VQ09ORklHIiwgIlRfSEVMUCIsICJUX0hFTFBURVhUIiwgIlRfSUYiLCAiVF9FTkRJRiIsICJUX0RFUEVORFMiLAorICAiVF9SRVFVSVJFUyIsICJUX09QVElPTkFMIiwgIlRfUFJPTVBUIiwgIlRfVFlQRSIsICJUX0RFRkFVTFQiLAorICAiVF9TRUxFQ1QiLCAiVF9SQU5HRSIsICJUX09OIiwgIlRfV09SRCIsICJUX1dPUkRfUVVPVEUiLCAiVF9VTkVRVUFMIiwKKyAgIlRfQ0xPU0VfUEFSRU4iLCAiVF9PUEVOX1BBUkVOIiwgIlRfRU9MIiwgIlRfT1IiLCAiVF9BTkQiLCAiVF9FUVVBTCIsCisgICJUX05PVCIsICIkYWNjZXB0IiwgImlucHV0IiwgInN0bXRfbGlzdCIsICJvcHRpb25fbmFtZSIsICJjb21tb25fc3RtdCIsCisgICJvcHRpb25fZXJyb3IiLCAiY29uZmlnX2VudHJ5X3N0YXJ0IiwgImNvbmZpZ19zdG10IiwKKyAgIm1lbnVjb25maWdfZW50cnlfc3RhcnQiLCAibWVudWNvbmZpZ19zdG10IiwgImNvbmZpZ19vcHRpb25fbGlzdCIsCisgICJjb25maWdfb3B0aW9uIiwgImNob2ljZSIsICJjaG9pY2VfZW50cnkiLCAiY2hvaWNlX2VuZCIsICJjaG9pY2Vfc3RtdCIsCisgICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9pY2VfYmxvY2siLCAiaWZfZW50cnkiLAorICAiaWZfZW5kIiwgImlmX3N0bXQiLCAiaWZfYmxvY2siLCAibWVudSIsICJtZW51X2VudHJ5IiwgIm1lbnVfZW5kIiwKKyAgIm1lbnVfc3RtdCIsICJtZW51X2Jsb2NrIiwgInNvdXJjZV9zdG10IiwgImNvbW1lbnQiLCAiY29tbWVudF9zdG10IiwKKyAgImhlbHBfc3RhcnQiLCAiaGVscCIsICJkZXBlbmRzX2xpc3QiLCAiZGVwZW5kcyIsICJwcm9tcHRfc3RtdF9vcHQiLAorICAicHJvbXB0IiwgImVuZCIsICJubCIsICJpZl9leHByIiwgImV4cHIiLCAic3ltYm9sIiwgMAogfTsKICNlbmRpZgogCiAjIGlmZGVmIFlZUFJJTlQKIC8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KICAgIHRva2VuIFlZTEVYLU5VTS4gICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgeXl0b2tudW1bXSA9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IHl5dG9rbnVtW10gPQogewogICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCiAgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKICAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAotICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAyOTQsCi0gICAgIDI5NSwgICAyOTYKKyAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4OQogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXIxW10gPQogewotICAgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDMsICAgIDQ0LCAgICA0NCwgICAgNDQsICAgIDQ0LCAgICA0NCwgICAgNDQsCi0gICAgICA0NCwgICAgNDQsICAgIDQ1LCAgICA0NSwgICAgNDUsICAgIDQ1LCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA0NywKLSAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MiwgICAgNTMsCi0gICAgICA1NCwgICAgNTUsICAgIDU1LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywKLSAgICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU4LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjEsICAgIDYyLAotICAgICAgNjIsICAgIDYyLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY2LCAgICA2NywgICAgNjcsCi0gICAgICA2NywgICAgNjcsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKLSAgICAgIDc0LCAgICA3NCwgICAgNzUsICAgIDc1LCAgICA3NSwgICAgNzYsICAgIDc2LCAgICA3NywgICAgNzcsICAgIDc4LAotICAgICAgNzgsICAgIDc4LCAgICA3OSwgICAgNzksICAgIDgwLCAgICA4MCwgICAgODEsICAgIDgxLCAgICA4MSwgICAgODEsCi0gICAgICA4MSwgICAgODEsICAgIDgxLCAgICA4MiwgICAgODIKKyAgICAgICAwLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzNywgICAgMzcsICAgIDM3LCAgICAzNywgICAgMzcsICAgIDM3LAorICAgICAgMzcsICAgIDM3LCAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzksCisgICAgICAzOSwgICAgMzksICAgIDM5LCAgICAzOSwgICAgMzksICAgIDQwLCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDUsICAgIDQ1LCAgICA0NSwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsCisgICAgICA1MSwgICAgNTEsICAgIDUyLCAgICA1MiwgICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLAorICAgICAgNjIsICAgIDYyLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjgsCisgICAgICA2OCwgICAgNjgsICAgIDY5LCAgICA2OSwgICAgNjksICAgIDcwLCAgICA3MCwgICAgNzEsICAgIDcxLCAgICA3MiwKKyAgICAgIDcyLCAgICA3MiwgICAgNzMsICAgIDczLCAgICA3NCwgICAgNzQsICAgIDc1LCAgICA3NSwgICAgNzUsICAgIDc1LAorICAgICAgNzUsICAgIDc1LCAgICA3NSwgICAgNzYsICAgIDc2CiB9OwogCiAvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMiwKLSAgICAgICAzLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDQsICAgICAzLAotICAgICAgIDQsICAgICAzLCAgICAgMywgICAgIDMsICAgICA0LCAgICAgNCwgICAgIDQsICAgICA1LCAgICAgMiwgICAgIDIsCi0gICAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMywKLSAgICAgICAzLCAgICAgMiwgICAgIDQsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDIsICAgICAwLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAgICA0LAorICAgICAgIDQsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMywKKyAgICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDQsICAgICA0LAorICAgICAgIDQsICAgICA1LCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMywgICAgIDIsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMywgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsCiAgICAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEKIH07CiAKQEAgLTUxNywxNTEgKzUwOCwxNjAgQEAKICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHl5ZGVmYWN0W10gPQogewotICAgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgMCwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDksICAgIDkzLCAgICA5MiwgICAgIDMsICAgICA0LCAgICAyMiwKLSAgICAgIDE0LCAgICAyMiwgICAgMTUsICAgIDQzLCAgICA1MywgICAgIDUsICAgIDU5LCAgICAxMiwgICAgNzksICAgIDY4LAotICAgICAgIDYsICAgIDc0LCAgICAxNiwgICAgNzksICAgIDEzLCAgICAxNywgICAgMTEsICAgIDg3LCAgICA4OCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDM4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEwMywgICAxMDQsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICA5NiwgICAgMTksICAgIDIxLCAgICAzOSwgICAgNDIsICAgIDU4LCAgICA2NCwgICAgIDAsICAgIDc2LAotICAgICAgIDcsICAgIDYzLCAgICA3MywgICAgNzUsICAgIDE4LCAgICAyMCwgICAgIDAsICAgMTAwLCAgICA1NSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDg1LCAgICAgMCwKLSAgICAgIDg1LCAgICAgMCwgICAgODUsICAgIDg1LCAgICA4NSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLAotICAgICAgMjUsICAgIDI0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4NSwgICAgODUsICAgIDQ3LCAgICA0NCwgICAgNDYsCi0gICAgICA0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNTQsICAgIDQxLCAgICA0MCwgICAgNjAsICAgIDYyLCAgICA1NywKLSAgICAgIDYxLCAgICA1NiwgICAgODEsICAgIDgwLCAgICAgMCwgICAgNjksICAgIDcxLCAgICA2NiwgICAgNzAsICAgIDY1LAotICAgICAgOTksICAgMTAxLCAgIDEwMiwgICAgOTgsICAgIDk3LCAgICA3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsCi0gICAgICA5NCwgICAgIDAsICAgIDk0LCAgICA5NCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwKLSAgICAgICAwLCAgICA3OCwgICAgNTEsICAgIDk0LCAgICA5NCwgICAgIDAsICAgICAwLCAgICA4OSwgICAgOTAsICAgIDkxLAotICAgICAgNzIsICAgICAwLCAgICA4MywgICAgODQsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI3LCAgICA4NiwgICAgIDAsCi0gICAgICAyOSwgICAgIDAsICAgIDMzLCAgICAzMSwgICAgMzIsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICA0OSwKLSAgICAgIDUwLCAgICA4MiwgICAgOTUsICAgIDM0LCAgICAzNSwgICAgMjgsICAgIDMwLCAgICAzNiwgICAgIDAsICAgIDQ4LAotICAgICAgNTIsICAgIDM3CisgICAgICAgMywgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxNiwgICAgMTMsICAgIDE0LAorICAgICAgMTgsICAgIDE1LCAgICAxNywgICAgIDAsICAgIDE5LCAgICAgMCwgICAgIDQsICAgIDMxLCAgICAyMiwgICAgMzEsCisgICAgICAyMywgICAgNDYsICAgIDU2LCAgICAgNSwgICAgNjEsICAgIDIwLCAgICA3OCwgICAgNjksICAgICA2LCAgICAyNCwKKyAgICAgIDc4LCAgICAyMSwgICAgIDgsICAgIDExLCAgICA4NywgICAgODgsICAgICAwLCAgICAgMCwgICAgODksICAgICAwLAorICAgICAgNDIsICAgIDkwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEwMywgICAxMDQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICA5NiwgICAgOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgOTIsICAgICA3LCAgICA2NSwgICAgNzMsICAgIDc0LCAgICAyNywgICAgMjksICAgICAwLAorICAgICAxMDAsICAgICAwLCAgICAgMCwgICAgNTgsICAgICAwLCAgICAgMCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA4NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAzNSwKKyAgICAgIDMyLCAgICAgMCwgICAgMzQsICAgIDMzLCAgICAgMCwgICAgIDAsICAgIDg1LCAgICAgMCwgICAgNTAsICAgIDUxLAorICAgICAgNDcsICAgIDQ5LCAgICA0OCwgICAgNTcsICAgIDQ1LCAgICA0NCwgICAgNjIsICAgIDY0LCAgICA2MCwgICAgNjMsCisgICAgICA1OSwgICAgODAsICAgIDgxLCAgICA3OSwgICAgNzAsICAgIDcyLCAgICA2OCwgICAgNzEsICAgIDY3LCAgICA5MywKKyAgICAgIDk5LCAgIDEwMSwgICAxMDIsICAgIDk4LCAgICA5NywgICAgMjYsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTQsICAgICAwLCAgICA5NCwgICAgOTQsICAgIDk0LCAgICAgMCwgICAgIDAsICAgIDc3LCAgICA1NCwgICAgOTQsCisgICAgICAgMCwgICAgOTQsICAgICAwLCAgICA4MywgICAgODQsICAgICAwLCAgICAgMCwgICAgMzcsICAgIDg2LCAgICAgMCwKKyAgICAgICAwLCAgICA5NCwgICAgMjUsICAgICAwLCAgICA1MywgICAgIDAsICAgIDgyLCAgICA5NSwgICAgMzgsICAgIDM5LAorICAgICAgNDAsICAgICAwLCAgICA1MiwgICAgNTUsICAgIDQxCiB9OwogCiAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gKi8KLXN0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmdvdG9bXSA9CitzdGF0aWMgY29uc3Qgc2hvcnQgaW50IHl5ZGVmZ290b1tdID0KIHsKLSAgICAgIC0xLCAgICAgMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgNTIsICAgIDg4LAotICAgICAgMjMsICAgIDI0LCAgIDEwNSwgICAgMjUsICAgIDU0LCAgICA5OCwgICAgNTUsICAgIDI2LCAgIDEwOSwgICAgMjcsCi0gICAgICA1NiwgICAgMjgsICAgIDI5LCAgIDExNywgICAgMzAsICAgIDU4LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDg5LCAgICA5MCwgICAgNTcsICAgIDkxLCAgIDEzMSwgICAxMzIsICAgMTA2LCAgICAzNSwgICAxNTUsICAgIDUwLAotICAgICAgNTEKKyAgICAgIC0xLCAgICAgMSwgICAgIDIsICAgIDI1LCAgICAyNiwgICAgOTksICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgNjQsICAgMTAwLCAgICAzMSwgICAgMzIsICAgMTE0LCAgICAzMywgICAgNjYsICAgMTEwLCAgICA2NywgICAgMzQsCisgICAgIDExOCwgICAgMzUsICAgIDY4LCAgICAzNiwgICAgMzcsICAgMTI2LCAgICAzOCwgICAgNzAsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgIDEwMSwgICAxMDIsICAgIDY5LCAgIDEwMywgICAxNDEsICAgMTQyLCAgICA0MiwgICAgNzMsICAgMTU2LAorICAgICAgNTksICAgIDYwCiB9OwogCiAvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKICAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC05OQotc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTc4CitzdGF0aWMgY29uc3Qgc2hvcnQgaW50IHl5cGFjdFtdID0KIHsKLSAgICAgLTk5LCAgICA0OCwgICAtOTksICAgIDM4LCAgICA0NiwgICAgNDYsICAgLTk5LCAgICA0NiwgICAtMjksICAgLTk5LAotICAgICAgNDYsICAgLTE3LCAgICAtMywgICAtMTEsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksCi0gICAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwKLSAgICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgIDM4LAotICAgICAgMTIsICAgIDE1LCAgIC05OSwgICAgMTgsICAgIDUxLCAgICA2MiwgICAtOTksICAgLTk5LCAgIC0xMSwgICAtMTEsCi0gICAgICAgNCwgICAtMjQsICAgMTM4LCAgIDEzOCwgICAxNjAsICAgMTIxLCAgIDExMCwgICAgLTQsICAgIDgxLCAgICAtNCwKLSAgICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTE5LCAgIC05OSwgICAtOTksICAgLTExLAotICAgICAtMTEsICAgIDcwLCAgICA3MCwgICAgNzMsICAgIDMyLCAgIC0xMSwgICAgNDYsICAgLTExLCAgICA0NiwgICAtMTEsCi0gICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTk5LCAgICAzNiwgICAgNzAsICAgLTk5LCAgICA5NSwKLSAgICAgLTk5LCAgIC05OSwgICAgOTYsICAgIDQ2LCAgIDEwNiwgICAgNDYsICAgIDQ2LCAgIC05OSwgICAtOTksICAgLTk5LAotICAgICAtOTksICAgIDM4LCAgICAzOCwgICAgMzgsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksCi0gICAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAxMTIsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwKLSAgICAgLTk5LCAgIDExNywgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTExLCAgICAzMywgICAgNjUsICAgMTMxLAotICAgICAgIDEsICAgMTE5LCAgIDEzMSwgICAgIDEsICAgMTM2LCAgICAgMSwgICAxNTMsICAgMTU0LCAgIDE1NSwgICAxMzEsCi0gICAgICA3MCwgICAtOTksICAgLTk5LCAgIDEzMSwgICAxMzEsICAgMTU2LCAgIDE1NywgICAtOTksICAgLTk5LCAgIC05OSwKLSAgICAgLTk5LCAgIDEwMSwgICAtOTksICAgLTk5LCAgIC0xMSwgICAxNTgsICAgMTU5LCAgIC05OSwgICAtOTksICAgMTYxLAotICAgICAtOTksICAgMTYyLCAgIC05OSwgICAtOTksICAgLTk5LCAgIDE2MywgICAxMzEsICAgMTY0LCAgIDE2NSwgICAtOTksCi0gICAgIC05OSwgICAtOTksICAgIDk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgMTY2LCAgIC05OSwKLSAgICAgLTk5LCAgIC05OQorICAgICAtNzgsICAgICAyLCAgIDE1OSwgICAtNzgsICAgLTIxLCAgICAgMCwgICAgIDAsICAgLTEyLCAgICAgMCwgICAgIDEsCisgICAgICAgNCwgICAgIDAsICAgIDI3LCAgICAzOCwgICAgNjAsICAgIDU4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIC03OCwgICAtNzgsICAgMTAwLCAgIC03OCwgICAxMDQsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LAorICAgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgICA4NiwgICAxMTMsICAgLTc4LCAgIDExNCwKKyAgICAgLTc4LCAgIC03OCwgICAxMjUsICAgMTI3LCAgIDEyOCwgICAtNzgsICAgLTc4LCAgICA2MCwgICAgNjAsICAgMjEwLAorICAgICAgNjUsICAgLTc4LCAgIDE0MSwgICAxNDIsICAgIDM5LCAgIDEwMywgICAxODIsICAgMjAwLCAgICAgNiwgICAgNjYsCisgICAgICAgNiwgICAxMzEsICAgLTc4LCAgIDE0NiwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIDE5NiwKKyAgICAgLTc4LCAgICA2MCwgICAgNjAsICAgMTQ2LCAgICA0MCwgICAgNDAsICAgLTc4LCAgIC03OCwgICAxNTUsICAgMTU2LAorICAgICAgLTIsICAgIDYwLCAgICAgMCwgICAgIDAsICAgIDYwLCAgIDEwNSwgICAgNDAsICAgMTk0LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAyMDYsICAgLTc4LCAgIC03OCwgICAxODMsICAgICAwLCAgICAgMCwgICAxOTUsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LAorICAgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAxOTcsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAgNjAsICAgMjEzLCAgIDIxNiwKKyAgICAgMjEyLCAgIDIwMywgICAyMTIsICAgMTkwLCAgIDIxMiwgICAgNDAsICAgMjA4LCAgIC03OCwgICAtNzgsICAgMjEyLAorICAgICAyMjIsICAgMjEyLCAgIDIxOSwgICAtNzgsICAgLTc4LCAgICA2MCwgICAyMjMsICAgLTc4LCAgIC03OCwgICAyMjQsCisgICAgIDIyNSwgICAyMTIsICAgLTc4LCAgIDIyNiwgICAtNzgsICAgMjI3LCAgIC03OCwgICAgNDcsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIDIyOCwgICAtNzgsICAgLTc4LCAgIC03OAogfTsKIAogLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCBzaG9ydCB5eXBnb3RvW10gPQorc3RhdGljIGNvbnN0IHNob3J0IGludCB5eXBnb3RvW10gPQogewotICAgICAtOTksICAgLTk5LCAgIC05OSwgICAxMTEsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIDE3OCwgICAtOTksCi0gICAgIC05OSwgICAtOTksICAgLTk5LCAgICA5MSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwKLSAgICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIDExNSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LAotICAgICAtOTksICAgMTQ2LCAgIDE2OCwgICAgODksICAgIDI3LCAgICAgMCwgICAxMjYsICAgIC0xLCAgIC05OCwgICAtNDgsCi0gICAgIC02MworICAgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgMTY0LCAgIC0zNiwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsCisgICAgIDIzMCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgIDI5LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgIDU5LCAgIC03OCwgICAtNzgsICAgLTc4LAorICAgICAtNzgsICAgLTc4LCAgIDE5OCwgICAyMjAsICAgIDI0LCAgIDE1NywgICAgLTUsICAgMTY5LCAgIDIwMiwgICAgNzQsCisgICAgIC01MywgICAtNzcKIH07CiAKIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgogICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCiAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgogICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTY4Ci1zdGF0aWMgY29uc3Qgc2hvcnQgeXl0YWJsZVtdID0KKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC03Ngorc3RhdGljIGNvbnN0IHNob3J0IGludCB5eXRhYmxlW10gPQogewotICAgICAgNjYsICAgIDY3LCAgICAzNiwgICAgNDIsICAgIDM5LCAgICA0MCwgICAgNzEsICAgIDQxLCAgIDEyMywgICAxMjQsCi0gICAgICA0MywgICAgNDQsICAgIDc0LCAgICA3NSwgICAxMjAsICAgMTU0LCAgICA3MiwgICAgNDYsICAgIDQ3LCAgICA2OSwKLSAgICAgIDcwLCAgIDEyMSwgICAxMjIsICAgIDQ4LCAgIDE0MCwgICAgNDUsICAgMTI3LCAgIDEyOCwgICAxMTIsICAgMTMwLAotICAgICAgNDksICAgMTMzLCAgIDE1NiwgICAxMzUsICAgMTU4LCAgIDE1OSwgICAgNjgsICAgMTYxLCAgICA2MCwgICAgNjksCi0gICAgICA3MCwgICAxNjUsICAgIDY5LCAgICA3MCwgICAgNjEsICAgMTY3LCAgIDE2OCwgICAgNjIsICAgICAyLCAgICAgMywKLSAgICAgIDYzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgNDYsICAgIDQ3LCAgICAxMywgICAgMTQsICAgMTM5LCAgIDE1MiwgICAgNDgsICAgMTI2LCAgIDE3OCwgICAgMTUsCi0gICAgICAxNiwgICAgNjksICAgIDcwLCAgICA0OSwgICAgMzcsICAgIDM4LCAgIDEyOSwgICAxNjYsICAgMTUxLCAgICAxNSwKLSAgICAgIDE2LCAgIC02NywgICAxMTQsICAgIDY0LCAgIC02NywgICAgIDUsICAgMTAxLCAgICAgNywgICAgIDgsICAgMTAyLAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAxNDMsICAgIDY1LCAgICAxMywgICAxMDMsICAgMTUzLCAgICA0NiwgICAgNDcsCi0gICAgIDE0NywgICAxNDgsICAgMTQ5LCAgICA2OSwgICAgNzAsICAgMTI1LCAgIDE3MiwgICAxMzQsICAgMTQxLCAgIDEzNiwKLSAgICAgMTM3LCAgIDEzOCwgICAgMTUsICAgIDE2LCAgICAgNSwgICAxMDEsICAgICA3LCAgICAgOCwgICAxMDIsICAgIDEwLAotICAgICAgMTEsICAgIDEyLCAgIDE0NSwgICAxNDYsICAgIDEzLCAgIDEwMywgICAxMDEsICAgICA3LCAgIDE0MiwgICAxMDIsCi0gICAgICAxMCwgICAgMTEsICAgIDEyLCAgIDE3MSwgICAxNDQsICAgIDEzLCAgIDEwMywgICAgNjksICAgIDcwLCAgICA2OSwKLSAgICAgIDcwLCAgICAxNSwgICAgMTYsICAgMTAwLCAgIDE1MCwgICAxNTQsICAgMTEzLCAgIDEwOCwgICAxMTMsICAgMTE2LAotICAgICAgNzMsICAgMTU3LCAgICAxNSwgICAgMTYsICAgIDc0LCAgICA3NSwgICAgNzAsICAgIDc2LCAgICA3NywgICAgNzgsCi0gICAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAgIDg0LCAgIDEwNCwgICAxMDcsICAgMTYwLCAgIDExNSwKLSAgICAgIDg1LCAgIDExMCwgICAgNzMsICAgMTE4LCAgICA4NiwgICAgODcsICAgIDc0LCAgICA3NSwgICAgOTIsICAgIDkzLAotICAgICAgOTQsICAgIDk1LCAgIDExMSwgICAgOTYsICAgMTE5LCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2OSwgICAxNzAsCi0gICAgIDE3MywgICAxNzQsICAgIDk3LCAgIDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OSwgICAxODAsICAgMTgxLCAgICA1MywKLSAgICAgIDk5LCAgICA1OQorICAgICAgNDYsICAgIDQ3LCAgICAgMywgICAgNDksICAgIDc5LCAgICA4MCwgICAgNTIsICAgMTMzLCAgIDEzNCwgICAgNDMsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDQ4LCAgIDE0NSwKKyAgICAgIDE0LCAgICAxNSwgICAxMzcsICAgIDU1LCAgICA1NiwgICAgNDQsICAgIDQ1LCAgICA1NywgICAxMzEsICAgMTMyLAorICAgICAxMDksICAgIDUwLCAgICA1OCwgICAxMjIsICAgIDUxLCAgIDEyMiwgICAgMjQsICAgMTM4LCAgIDEzOSwgICAtMjgsCisgICAgICA4OCwgICAxNDMsICAgLTI4LCAgIC0yOCwgICAtMjgsICAgLTI4LCAgIC0yOCwgICAtMjgsICAgLTI4LCAgIC0yOCwKKyAgICAgLTI4LCAgICA4OSwgICAgNTMsICAgLTI4LCAgIC0yOCwgICAgOTAsICAgIDkxLCAgIC0yOCwgICAgOTIsICAgIDkzLAorICAgICAgOTQsICAgIDk1LCAgICA5NiwgICAgNTQsICAgIDk3LCAgICA1NSwgICAgNTYsICAgIDg4LCAgIDE2MSwgICAgOTgsCisgICAgIC02NiwgICAtNjYsICAgLTY2LCAgIC02NiwgICAtNjYsICAgLTY2LCAgIC02NiwgICAtNjYsICAgIDgxLCAgICA4MiwKKyAgICAgLTY2LCAgIC02NiwgICAgOTAsICAgIDkxLCAgIDE1MiwgICAgNTUsICAgIDU2LCAgIDE0MCwgICAgNjEsICAgIDU3LAorICAgICAxMTIsICAgIDk3LCAgICA4NCwgICAxMjMsICAgIDU4LCAgIDEyMywgICAxMjEsICAgMTE3LCAgICA4NSwgICAxMjUsCisgICAgIDE0OSwgICAgNjIsICAgMTY3LCAgIC0zMCwgICAgODgsICAgIDYzLCAgIC0zMCwgICAtMzAsICAgLTMwLCAgIC0zMCwKKyAgICAgLTMwLCAgIC0zMCwgICAtMzAsICAgLTMwLCAgIC0zMCwgICAgODksICAgIDcyLCAgIC0zMCwgICAtMzAsICAgIDkwLAorICAgICAgOTEsICAgLTMwLCAgICA5MiwgICAgOTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgMTE5LCAgICA5NywgICAxMjcsCisgICAgIDE0NCwgICAtNzUsICAgIDg4LCAgICA5OCwgICAtNzUsICAgLTc1LCAgIC03NSwgICAtNzUsICAgLTc1LCAgIC03NSwKKyAgICAgLTc1LCAgIC03NSwgICAtNzUsICAgIDc0LCAgICA3NSwgICAtNzUsICAgLTc1LCAgICA5MCwgICAgOTEsICAgLTc1LAorICAgICAtNzUsICAgLTc1LCAgIC03NSwgICAtNzUsICAgLTc1LCAgICA3NiwgICAgOTcsICAgIDc3LCAgICA3OCwgICAgLTIsCisgICAgICAgNCwgICAxMjEsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAgICA4NiwgICAgODcsICAgIDE0LCAgICAxNSwgICAgMTYsICAgMTI5LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgODgsICAgIDIzLCAgIDEzNSwgICAxMzYsICAgLTQzLCAgIC00MywgICAgMjQsCisgICAgIC00MywgICAtNDMsICAgLTQzLCAgIC00MywgICAgODksICAgMTQ2LCAgIC00MywgICAtNDMsICAgIDkwLCAgICA5MSwKKyAgICAgMTA0LCAgIDEwNSwgICAxMDYsICAgMTA3LCAgIDE1NSwgICAgIDcsICAgICA4LCAgICA5NywgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgIDEwOCwgICAxNDgsICAgIDE0LCAgICAxNSwgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxNDcsCisgICAgIDE1MSwgICAgODEsICAgIDgyLCAgIDE2MywgICAxMzAsICAgMTY1LCAgIDE1NSwgICAgODEsICAgIDgyLCAgICA4MiwKKyAgICAgIDI0LCAgIDExMywgICAxMTYsICAgMTU3LCAgIDEyNCwgICAxNzEsICAgMTE1LCAgIDEyMCwgICAxNjIsICAgMTI4LAorICAgICAgNzIsICAgIDgxLCAgICA4MiwgICAxNTMsICAgIDgxLCAgICA4MiwgICAxNTQsICAgIDgxLCAgICA4MiwgICAxNjYsCisgICAgICA4MSwgICAgODIsICAgMTY0LCAgIDE2OCwgICAxNjksICAgMTcwLCAgIDE3MiwgICAxNzMsICAgMTc0LCAgICA2NSwKKyAgICAgIDcxLCAgICA4MywgICAgIDAsICAgMTUwLCAgIDExMQogfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXljaGVja1tdID0KK3N0YXRpYyBjb25zdCBzaG9ydCBpbnQgeXljaGVja1tdID0KIHsKLSAgICAgIDQ4LCAgICA0OSwgICAgIDMsICAgIDMyLCAgICAgNCwgICAgIDUsICAgIDMwLCAgICAgNywgICAgNzEsICAgIDcyLAotICAgICAgMTAsICAgIDI4LCAgICAxNiwgICAgMTcsICAgIDMzLCAgICAxNCwgICAgNDAsICAgIDI4LCAgICAyOSwgICAgMzgsCi0gICAgICAzOSwgICAgNjksICAgIDcwLCAgICAzNCwgICAgODcsICAgIDI4LCAgICA3NCwgICAgNzUsICAgIDMyLCAgICA3NywKLSAgICAgIDQxLCAgICA3OSwgICAxMzAsICAgIDgxLCAgIDEzMiwgICAxMzMsICAgIDMyLCAgIDEzNSwgICAgMzksICAgIDM4LAotICAgICAgMzksICAgMTM5LCAgICAzOCwgICAgMzksICAgIDMyLCAgIDE0MywgICAxNDQsICAgIDMyLCAgICAgMCwgICAgIDEsCi0gICAgICAzMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDI4LCAgICAyOSwgICAgMTQsICAgIDE1LCAgICAyOCwgICAgMzIsICAgIDM0LCAgICAzNSwgICAxNjYsICAgIDMxLAotICAgICAgMzIsICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDI4LCAgICAyOSwgICAgNzYsICAgMTQwLCAgIDEyNiwgICAgMzEsCi0gICAgICAzMiwgICAgIDAsICAgICAxLCAgICAzMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDkzLCAgICAzMiwgICAgMTQsICAgIDE1LCAgICAzMiwgICAgMjgsICAgIDI5LAotICAgICAxMDEsICAgMTAyLCAgIDEwMywgICAgMzgsICAgIDM5LCAgICAzMiwgICAxNTQsICAgIDgwLCAgICAxMywgICAgODIsCi0gICAgICA4MywgICAgODQsICAgIDMxLCAgICAzMiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAxMSwgICAgOTUsICAgIDk2LCAgICAxNCwgICAgMTUsICAgICA1LCAgICAgNiwgICAgMzIsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzIsICAgIDI4LCAgICAxNCwgICAgMTUsICAgIDM4LCAgICAzOSwgICAgMzgsCi0gICAgICAzOSwgICAgMzEsICAgIDMyLCAgICA1NCwgICAgMzIsICAgIDE0LCAgICA1NywgICAgNTYsICAgIDU5LCAgICA1OCwKLSAgICAgIDEyLCAgICAzMiwgICAgMzEsICAgIDMyLCAgICAxNiwgICAgMTcsICAgIDM5LCAgICAxOSwgICAgMjAsICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgNTUsICAgIDU2LCAgICAzMiwgICAgNTgsCi0gICAgICAzMiwgICAgNTYsICAgIDEyLCAgICA1OCwgICAgMzYsICAgIDM3LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgNTYsICAgIDIzLCAgICA1OCwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLAotICAgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMjEsCi0gICAgICA1NCwgICAgMzMKKyAgICAgICA1LCAgICAgNiwgICAgIDAsICAgICA4LCAgICA1NywgICAgNTgsICAgIDExLCAgICA4NCwgICAgODUsICAgIDMwLAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzMCwgICAgOTYsCisgICAgICAxNCwgICAgMTUsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI1LCAgICAyNiwgICAgMjksICAgIDgxLCAgICA4MiwKKyAgICAgIDY2LCAgICAzMCwgICAgMzQsICAgIDY5LCAgICAzMCwgICAgNzEsICAgIDMwLCAgICA5MCwgICAgOTEsICAgICAwLAorICAgICAgIDEsICAgIDk0LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDI1LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI1LCAgICAyNSwgICAgMjUsICAgIDI2LCAgICAgMSwgICAxNDUsICAgIDMwLAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzMSwgICAgMzIsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAxMzcsICAgIDI1LCAgICAyNiwgICAgOTIsICAgIDMwLCAgICAyOSwKKyAgICAgIDY2LCAgICAyNSwgICAgMjcsICAgIDY5LCAgICAzNCwgICAgNzEsICAgIDMwLCAgICA2OCwgICAgMzMsICAgIDcwLAorICAgICAxMDUsICAgICAxLCAgIDE1NSwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAzMCwgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICA2OCwgICAgMjUsICAgIDcwLAorICAgICAgMjUsICAgICAwLCAgICAgMSwgICAgMzAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAzMCwgICAgMzAsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMzAsICAgIDI1LCAgICAzMCwgICAgMzAsICAgICAwLAorICAgICAgIDEsICAgIDMwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMzAsICAgIDMwLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAzMCwgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgICAxLCAgICAyNSwgICAgMzAsICAgIDMwLCAgICAgNSwgICAgIDYsICAgIDMwLAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAgMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMTQsICAgICA1LCAgICAgNiwgICAgMjUsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMzAsICAgIDMwLCAgICAxNCwgICAgMTUsICAgMTQyLCAgIDE0MywgICAxNDQsICAgIDEzLAorICAgICAgMjUsICAgIDMxLCAgICAzMiwgICAxNDksICAgIDI4LCAgIDE1MSwgICAgMTQsICAgIDMxLCAgICAzMiwgICAgMzIsCisgICAgICAzMCwgICAgNjcsICAgIDY4LCAgICAzMCwgICAgNzAsICAgMTYxLCAgICA2NywgICAgNjgsICAgIDMwLCAgICA3MCwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMCwgICAgMzAsICAgIDMwLCAgICAzMCwgICAgMzAsICAgIDMwLCAgICAzMCwgICAgMjksCisgICAgICA0MCwgICAgNTksICAgIC0xLCAgIDEwNiwgICAgNjYKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCiAgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHl5c3Rvc1tdID0KIHsKLSAgICAgICAwLCAgICA0MywgICAgIDAsICAgICAxLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTQsICAgIDE1LCAgICAzMSwgICAgMzIsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MiwgICAgNTMsICAgIDU1LCAgICA1OSwgICAgNjEsICAgIDYzLCAgICA2NCwKLSAgICAgIDY2LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzksICAgIDc5LCAgICAyOCwgICAgMjksICAgIDc3LAotICAgICAgNzcsICAgIDc3LCAgICAzMiwgICAgNzcsICAgIDI4LCAgICAyOCwgICAgMjgsICAgIDI5LCAgICAzNCwgICAgNDEsCi0gICAgICA4MSwgICAgODIsICAgIDUwLCAgICA1MCwgICAgNTYsICAgIDU4LCAgICA2MiwgICAgNzQsICAgIDY3LCAgICA3NCwKLSAgICAgIDc5LCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDgxLCAgICA4MSwgICAgMzIsICAgIDM4LAotICAgICAgMzksICAgIDMwLCAgICA0MCwgICAgMTIsICAgIDE2LCAgICAxNywgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDMyLCAgICAzNiwgICAgMzcsICAgIDUxLCAgICA3MiwKLSAgICAgIDczLCAgICA3NSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIzLCAgICAzMiwgICAgNTcsICAgIDczLAotICAgICAgNzUsICAgICA1LCAgICAgOCwgICAgMTUsICAgIDQ1LCAgICA1NCwgICAgNzgsICAgIDQ1LCAgICA1NSwgICAgNjAsCi0gICAgICA2NiwgICAgNzgsICAgIDMyLCAgICA3NSwgICAgIDEsICAgIDQ1LCAgICA1NSwgICAgNjUsICAgIDY2LCAgICA3OCwKLSAgICAgIDMzLCAgICA4MSwgICAgODEsICAgIDgyLCAgICA4MiwgICAgMzIsICAgIDM1LCAgICA4MSwgICAgODEsICAgIDc3LAotICAgICAgODEsICAgIDc2LCAgICA3NywgICAgODEsICAgIDc2LCAgICA4MSwgICAgNzYsICAgIDc2LCAgICA3NiwgICAgMjgsCi0gICAgICA4MiwgICAgMTMsICAgIDMyLCAgICA3NywgICAgMjgsICAgIDc2LCAgICA3NiwgICAgNzksICAgIDc5LCAgICA3OSwKLSAgICAgIDMyLCAgICA4MSwgICAgMzIsICAgIDMyLCAgICAxNCwgICAgODAsICAgIDgwLCAgICAzMiwgICAgODAsICAgIDgwLAotICAgICAgMzIsICAgIDgwLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICA4MCwgICAgODIsICAgIDgwLCAgICA4MCwgICAgMzIsCi0gICAgICAzMiwgICAgMzIsICAgIDgxLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDgwLCAgICAzMiwKLSAgICAgIDMyLCAgICAzMgorICAgICAgIDAsICAgIDM2LCAgICAzNywgICAgIDAsICAgICAxLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI1LCAgICAzMCwgICAgMzgsICAgIDM5LCAgICA0MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ3LCAgICA0OCwgICAgNTAsICAgIDU0LCAgICA1NiwgICAgNTgsICAgIDU5LCAgICA2MSwgICAgNjMsCisgICAgICA2NCwgICAgNjUsICAgIDcyLCAgICAzMCwgICAgMjUsICAgIDI2LCAgICA3MSwgICAgNzEsICAgIDMwLCAgICA3MSwKKyAgICAgIDMwLCAgICAzMCwgICAgNzEsICAgIDI1LCAgICAyNSwgICAgMjUsICAgIDI2LCAgICAyOSwgICAgMzQsICAgIDc1LAorICAgICAgNzYsICAgIDMwLCAgICAgMSwgICAgIDEsICAgIDQ1LCAgICA0NSwgICAgNTEsICAgIDUzLCAgICA1NywgICAgNjgsCisgICAgICA2MiwgICAgNjgsICAgIDMwLCAgICA3MywgICAgMzAsICAgIDMwLCAgICAzMCwgICAgMzAsICAgIDMwLCAgICA3NSwKKyAgICAgIDc1LCAgICAzMSwgICAgMzIsICAgIDczLCAgICAyNywgICAgMzMsICAgIDMwLCAgICAzMCwgICAgIDEsICAgIDEyLAorICAgICAgMTYsICAgIDE3LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI1LCAgICAzMCwgICAgNDAsCisgICAgICA0NiwgICAgNjYsICAgIDY3LCAgICA2OSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDMwLCAgICA0MCwKKyAgICAgIDUyLCAgICA2NywgICAgNjksICAgIDM5LCAgICA0OSwgICAgNzIsICAgIDM5LCAgICA1MCwgICAgNTUsICAgIDYxLAorICAgICAgNzIsICAgIDMwLCAgICA0MCwgICAgNjksICAgIDM5LCAgICA1MCwgICAgNjAsICAgIDYxLCAgICA3MiwgICAgMzAsCisgICAgICAyOCwgICAgNzUsICAgIDc1LCAgICA3NiwgICAgNzYsICAgIDMwLCAgICAzMCwgICAgMjQsICAgIDc1LCAgICA3NSwKKyAgICAgIDcxLCAgICA3MCwgICAgNzEsICAgIDc1LCAgICAyNSwgICAgNzYsICAgICAxLCAgICAxMywgICAgMzAsICAgIDcxLAorICAgICAgNzAsICAgIDI1LCAgICA3NSwgICAgMzAsICAgIDMwLCAgICAxNCwgICAgNzQsICAgIDMwLCAgICA3NCwgICAgNzQsCisgICAgICA3NCwgICAgNzYsICAgIDMwLCAgICA3NCwgICAgMzAsICAgIDc0LCAgICAzMCwgICAgNzUsICAgIDMwLCAgICAzMCwKKyAgICAgIDMwLCAgICA3NCwgICAgMzAsICAgIDMwLCAgICAzMAogfTsKIAogI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKF9fU0laRV9UWVBFX18pCkBAIC02ODcsNyArNjg3LDcgQEAKIAogI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCiAjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJybGFiMQorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKIAogCiAvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CkBAIC03MTUsMjAgKzcxNSw1MyBAQAogICAgIH0JCQkJCQkJCVwKIHdoaWxlICgwKQogCisKICNkZWZpbmUgWVlURVJST1IJMQogI2RlZmluZSBZWUVSUkNPREUJMjU2CiAKLS8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucwotICAgYXJlIHJ1bikuICAqLwogCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQogI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgIFwKLSAgQ3VycmVudC5maXJzdF9saW5lICAgPSBSaHNbMV0uZmlyc3RfbGluZTsgICAgICBcCi0gIEN1cnJlbnQuZmlyc3RfY29sdW1uID0gUmhzWzFdLmZpcnN0X2NvbHVtbjsgICAgXAotICBDdXJyZW50Lmxhc3RfbGluZSAgICA9IFJoc1tOXS5sYXN0X2xpbmU7ICAgICAgIFwKLSAgQ3VycmVudC5sYXN0X2NvbHVtbiAgPSBSaHNbTl0ubGFzdF9jb2x1bW47CisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChOKQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlcCisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoMCkKICNlbmRpZgogCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKyAgICAgICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCisgICAgICAgICAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYKKworCiAvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KIAogI2lmZGVmIFlZTEVYX1BBUkFNCkBAIC03NTEsMzYgKzc4NCwzMCBAQAogICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jIGRlZmluZSBZWURTWU1QUklOVChBcmdzKQkJCVwKLWRvIHsJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJXAotICAgIHl5c3ltcHJpbnQgQXJnczsJCQkJXAotfSB3aGlsZSAoMCkKLQotIyBkZWZpbmUgWVlEU1lNUFJJTlRGKFRpdGxlLCBUb2tlbiwgVmFsdWUsIExvY2F0aW9uKQkJXAorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQlcCiBkbyB7CQkJCQkJCQlcCiAgIGlmICh5eWRlYnVnKQkJCQkJCQlcCiAgICAgewkJCQkJCQkJXAogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCVwKICAgICAgIHl5c3ltcHJpbnQgKHN0ZGVyciwgCQkJCQlcCi0gICAgICAgICAgICAgICAgICBUb2tlbiwgVmFsdWUpOwlcCisgICAgICAgICAgICAgICAgICBUeXBlLCBWYWx1ZSk7CVwKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCVwKICAgICB9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGNpbmx1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChzaG9ydCAqYm90dG9tLCBzaG9ydCAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHNob3J0IGludCAqYm90dG9tLCBzaG9ydCBpbnQgKnRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAogeXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHNob3J0ICpib3R0b207Ci0gICAgc2hvcnQgKnRvcDsKKyAgICBzaG9ydCBpbnQgKmJvdHRvbTsKKyAgICBzaG9ydCBpbnQgKnRvcDsKICNlbmRpZgogewogICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwpAQCAtODEwLDkgKzgzNyw5IEBACiAjZW5kaWYKIHsKICAgaW50IHl5aTsKLSAgdW5zaWduZWQgaW50IHl5bGluZW5vID0geXlybGluZVt5eXJ1bGVdOworICB1bnNpZ25lZCBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAldSksICIsCi0gICAgICAgICAgICAgeXlydWxlIC0gMSwgeXlsaW5lbm8pOworICAgICAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKICAgLyogUHJpbnQgdGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCiAgIGZvciAoeXlpID0geXlwcmhzW3l5cnVsZV07IDAgPD0geXlyaHNbeXlpXTsgeXlpKyspCiAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lIFt5eXJoc1t5eWldXSk7CkBAIC04MzAsOCArODU3LDcgQEAKIGludCB5eWRlYnVnOwogI2Vsc2UgLyogIVlZREVCVUcgKi8KICMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlEU1lNUFJJTlQoQXJncykKLSMgZGVmaW5lIFlZRFNZTVBSSU5URihUaXRsZSwgVG9rZW4sIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQogIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCiAjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKICNlbmRpZiAvKiAhWVlERUJVRyAqLwpAQCAtODQ5LDEwICs4NzUsNiBAQAogICAgU0laRV9NQVggPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQogICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCiAKLSNpZiBZWU1BWERFUFRIID09IDAKLSMgdW5kZWYgWVlNQVhERVBUSAotI2VuZGlmCi0KICNpZm5kZWYgWVlNQVhERVBUSAogIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAogI2VuZGlmCkBAIC05MzQsMTUgKzk1NiwxNSBAQAogICAodm9pZCkgeXl2YWx1ZXA7CiAKICAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICB7Ci0gICAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0jIGlmZGVmIFlZUFJJTlQKLSAgICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbmRpZgotICAgIH0KKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CiAgIGVsc2UKICAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CiAKKworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVuZGlmCiAgIHN3aXRjaCAoeXl0eXBlKQogICAgIHsKICAgICAgIGRlZmF1bHQ6CkBAIC05NTgsMTAgKzk4MCwxMSBAQAogCiAjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQogc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwKQoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwKQogI2Vsc2UKIHN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eXR5cGUsIHl5dmFsdWVwKQoreXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXApCisgICAgY29uc3QgY2hhciAqeXltc2c7CiAgICAgaW50IHl5dHlwZTsKICAgICBZWVNUWVBFICp5eXZhbHVlcDsKICNlbmRpZgpAQCAtOTY5LDggKzk5Miw0MiBAQAogICAvKiBQYWNpZnkgYGB1bnVzZWQgdmFyaWFibGUnJyB3YXJuaW5ncy4gICovCiAgICh2b2lkKSB5eXZhbHVlcDsKIAorICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCiAgIHN3aXRjaCAoeXl0eXBlKQogICAgIHsKKyAgICAgIGNhc2UgNDg6IC8qIGNob2ljZV9lbnRyeSAqLworCisgICAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSh5eXZhbHVlcC0+bWVudSktPmZpbGUtPm5hbWUsICh5eXZhbHVlcC0+bWVudSktPmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9PSAoeXl2YWx1ZXAtPm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9OworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA1NDogLyogaWZfZW50cnkgKi8KKworICAgICAgICB7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAorCQkoeXl2YWx1ZXAtPm1lbnUpLT5maWxlLT5uYW1lLCAoeXl2YWx1ZXAtPm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUgPT0gKHl5dmFsdWVwLT5tZW51KSkKKwkJbWVudV9lbmRfbWVudSgpOworfTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNTk6IC8qIG1lbnVfZW50cnkgKi8KKworICAgICAgICB7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAorCQkoeXl2YWx1ZXAtPm1lbnUpLT5maWxlLT5uYW1lLCAoeXl2YWx1ZXAtPm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUgPT0gKHl5dmFsdWVwLT5tZW51KSkKKwkJbWVudV9lbmRfbWVudSgpOworfTsKKworICAgICAgICBicmVhazsKIAogICAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC05OTYsMTAgKzEwNTMsMTAgQEAKIAogCiAKLS8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCiBpbnQgeXljaGFyOwogCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCiBZWVNUWVBFIHl5bHZhbDsKIAogLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KQEAgLTEwMzUsNyArMTA5Miw3IEBACiAgIGludCB5eXJlc3VsdDsKICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCiAgIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwogICBpbnQgeXl0b2tlbiA9IDA7CiAKICAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKQEAgLTEwNDcsOSArMTEwNCw5IEBACiAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwogCiAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsKLSAgc2hvcnQgKnl5c3MgPSB5eXNzYTsKLSAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworICBzaG9ydCBpbnQgeXlzc2FbWVlJTklUREVQVEhdOworICBzaG9ydCBpbnQgKnl5c3MgPSB5eXNzYTsKKyAgcmVnaXN0ZXIgc2hvcnQgaW50ICp5eXNzcDsKIAogICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwogICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKQEAgLTEwODYsNiArMTE0Myw5IEBACiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCisKKyAgeXl2c3BbMF0gPSB5eWx2YWw7CisKICAgZ290byB5eXNldHN0YXRlOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTExMTEsNyArMTE3MSw3IEBACiAJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwogCSAgIG1lbW9yeS4gICovCiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotCXNob3J0ICp5eXNzMSA9IHl5c3M7CisJc2hvcnQgaW50ICp5eXNzMSA9IHl5c3M7CiAKIAogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQpAQCAtMTEzOSw3ICsxMTk5LDcgQEAKIAl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CiAKICAgICAgIHsKLQlzaG9ydCAqeXlzczEgPSB5eXNzOworCXNob3J0IGludCAqeXlzczEgPSB5eXNzOwogCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCkBAIC0xMTc1LDE4ICsxMjM1LDE4IEBACiB5eWJhY2t1cDoKIAogLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gICovCi0vKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKy8qIFJlYWQgYSBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIC8qIHl5cmVzdW1lOiAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCiAKICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTEyMDEsNyArMTI2MSw3IEBACiAgIGVsc2UKICAgICB7CiAgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWURTWU1QUklOVEYgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CiAgICAgfQogCiAgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwpAQCAtMTIyMSw4ICsxMjgxLDggQEAKICAgaWYgKHl5biA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCi0gIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwotICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlcywgIiwgeXl0bmFtZVt5eXRva2VuXSkpOworICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CiAKICAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KICAgaWYgKHl5Y2hhciAhPSBZWUVPRikKQEAgLTEyNzMsMzUgKzEzMzMsNDcgQEAKICAgICB7CiAgICAgICAgIGNhc2UgODoKIAotICAgIHsgemNvbmZwcmludCgidW5leHBlY3RlZCAnZW5kbWVudScgc3RhdGVtZW50Iik7IDt9CisgICAgeyB6Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgogCi0gICAgeyB6Y29uZnByaW50KCJ1bmV4cGVjdGVkICdlbmRpZicgc3RhdGVtZW50Iik7IDt9CisgICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1lbnQgXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwOgogCi0gICAgeyB6Y29uZnByaW50KCJ1bmV4cGVjdGVkICdlbmRjaG9pY2UnIHN0YXRlbWVudCIpOyA7fQorICAgIHsKKwl6Y29uZl9lcnJvcigidW5leHBlY3RlZCBvcHRpb24gXCIlc1wiIiwga2NvbmZfaWRfc3RyaW5ncyArICh5eXZzcFstMl0uaWQpLT5uYW1lKTsKKzt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAotICAgIHsgemNvbmZwcmludCgic3ludGF4IGVycm9yIik7IHl5ZXJyb2s7IDt9CisgICAgeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0ZW1lbnQiKTsgO30KICAgICBicmVhazsKIAotICBjYXNlIDE4OgorICBjYXNlIDI1OgorCisgICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBvcHRpb24gXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDI2OgorCisgICAgeyB6Y29uZl9lcnJvcigiaW52YWxpZCBvcHRpb24iKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDI3OgogCiAgICAgewotCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoeXl2c3BbLTFdLnN0cmluZywgMCk7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbLTFdLnN0cmluZyksIDApOwogCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOwogCW1lbnVfYWRkX2VudHJ5KHN5bSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCB5eXZzcFstMV0uc3RyaW5nKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3RyaW5nKSk7CiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk6CisgIGNhc2UgMjg6CiAKICAgICB7CiAJbWVudV9lbmRfZW50cnkoKTsKQEAgLTEzMDksMTcgKzEzODEsMTcgQEAKIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDoKKyAgY2FzZSAyOToKIAogICAgIHsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKHl5dnNwWy0xXS5zdHJpbmcsIDApOworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoKHl5dnNwWy0xXS5zdHJpbmcpLCAwKTsKIAlzeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKIAltZW51X2FkZF9lbnRyeShzeW0pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksIHl5dnNwWy0xXS5zdHJpbmcpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3RyaW5nKSk7CiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjE6CisgIGNhc2UgMzA6CiAKICAgICB7CiAJaWYgKGN1cnJlbnRfZW50cnktPnByb21wdCkKQEAgLTEzMzEsOTkgKzE0MDMsNTUgQEAKIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNzoKLQotICAgIHsKLQltZW51X3NldF90eXBlKFNfVFJJU1RBVEUpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnRyaXN0YXRlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyODoKLQotICAgIHsKLQltZW51X2FkZF9leHByKFBfREVGQVVMVCwgeXl2c3BbLTJdLmV4cHIsIHl5dnNwWy0xXS5leHByKTsKLQltZW51X3NldF90eXBlKFNfVFJJU1RBVEUpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZl9ib29sZWFuXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyOToKLQotICAgIHsKLQltZW51X3NldF90eXBlKFNfQk9PTEVBTik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Ym9vbGVhblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0JbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsIHl5dnNwWy0yXS5leHByLCB5eXZzcFstMV0uZXhwcik7Ci0JbWVudV9zZXRfdHlwZShTX0JPT0xFQU4pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZl9ib29sZWFuXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsKLQltZW51X3NldF90eXBlKFNfSU5UKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewotCW1lbnVfc2V0X3R5cGUoU19IRVgpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmhleFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6Ci0KLSAgICB7Ci0JbWVudV9zZXRfdHlwZShTX1NUUklORyk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c3RyaW5nXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNDoKLQotICAgIHsKLQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsIHl5dnNwWy0yXS5zdHJpbmcsIHl5dnNwWy0xXS5leHByKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDM1OgotCi0gICAgewotCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCB5eXZzcFstMl0uZXhwciwgeXl2c3BbLTFdLmV4cHIpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDM2OgotCi0gICAgewotCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgc3ltX2xvb2t1cCh5eXZzcFstMl0uc3RyaW5nLCAwKSwgeXl2c3BbLTFdLmV4cHIpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCiAgIGNhc2UgMzc6CiAKICAgICB7Ci0JbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9SQU5HRSx5eXZzcFstM10uc3ltYm9sLCB5eXZzcFstMl0uc3ltYm9sKSwgeXl2c3BbLTFdLmV4cHIpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwltZW51X3NldF90eXBlKCh5eXZzcFstMl0uaWQpLT5zdHlwZSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCSh5eXZzcFstMl0uaWQpLT5zdHlwZSk7CiA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzg6CiAKICAgICB7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbLTJdLnN0cmluZyksICh5eXZzcFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzk6CisKKyAgICB7CisJbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFstMV0uZXhwcikpOworCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgIT0gU19VTktOT1dOKQorCQltZW51X3NldF90eXBlKCh5eXZzcFstM10uaWQpLT5zdHlwZSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCSh5eXZzcFstM10uaWQpLT5zdHlwZSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDA6CisKKyAgICB7CisJbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCBzeW1fbG9va3VwKCh5eXZzcFstMl0uc3RyaW5nKSwgMCksICh5eXZzcFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDE6CisKKyAgICB7CisJbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9SQU5HRSwoeXl2c3BbLTNdLnN5bWJvbCksICh5eXZzcFstMl0uc3ltYm9sKSksICh5eXZzcFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKzt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MjoKKworICAgIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKE5VTEwsIDApOwogCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIT0lDRTsKIAltZW51X2FkZF9lbnRyeShzeW0pOwpAQCAtMTQzMiw1NyArMTQ2MCw0NSBAQAogO30KICAgICBicmVhazsKIAotICBjYXNlIDM5OgorICBjYXNlIDQzOgogCiAgICAgewotCW1lbnVfZW5kX2VudHJ5KCk7Ci0JbWVudV9hZGRfbWVudSgpOworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MDoKKyAgY2FzZSA0NDoKIAogICAgIHsKLQlpZiAoemNvbmZfZW5kdG9rZW4oeXl2c3BbMF0udG9rZW4sIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNwWzBdLmlkKSwgVF9DSE9JQ0UsIFRfRU5EQ0hPSUNFKSkgewogCQltZW51X2VuZF9tZW51KCk7CiAJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiAJfQogO30KICAgICBicmVhazsKIAotICBjYXNlIDQyOgorICBjYXNlIDUyOgogCiAgICAgewotCXByaW50ZigiJXM6JWQ6IG1pc3NpbmcgJ2VuZGNob2ljZScgZm9yIHRoaXMgJ2Nob2ljZScgc3RhdGVtZW50XG4iLCBjdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vKTsKLQl6Y29uZm5lcnJzKys7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7Ci0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCB5eXZzcFstMl0uc3RyaW5nLCB5eXZzcFstMV0uZXhwcik7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbLTJdLnN0cmluZyksICh5eXZzcFstMV0uZXhwcikpOwogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDk6CisgIGNhc2UgNTM6CiAKICAgICB7Ci0JbWVudV9zZXRfdHlwZShTX1RSSVNUQVRFKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0cmlzdGF0ZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJaWYgKCh5eXZzcFstMl0uaWQpLT5zdHlwZSA9PSBTX0JPT0xFQU4gfHwgKHl5dnNwWy0yXS5pZCktPnN0eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJbWVudV9zZXRfdHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCQkoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCX0gZWxzZQorCQlZWUVSUk9SOwogO30KICAgICBicmVhazsKIAotICBjYXNlIDUwOgotCi0gICAgewotCW1lbnVfc2V0X3R5cGUoU19CT09MRUFOKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpib29sZWFuXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MToKKyAgY2FzZSA1NDoKIAogICAgIHsKIAljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKQEAgLTE0OTAsMTE1ICsxNTA2LDg5IEBACiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTI6Ci0KLSAgICB7Ci0JbWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgc3ltX2xvb2t1cCh5eXZzcFstMl0uc3RyaW5nLCAwKSwgeXl2c3BbLTFdLmV4cHIpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQogICBjYXNlIDU1OgogCiAgICAgewotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLQltZW51X2FkZF9lbnRyeShOVUxMKTsKLQltZW51X2FkZF9kZXAoeXl2c3BbLTFdLmV4cHIpOwotCW1lbnVfZW5kX2VudHJ5KCk7Ci0JbWVudV9hZGRfbWVudSgpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDU2OgotCi0gICAgewotCWlmICh6Y29uZl9lbmR0b2tlbih5eXZzcFswXS50b2tlbiwgVF9JRiwgVF9FTkRJRikpIHsKLQkJbWVudV9lbmRfbWVudSgpOwotCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRpZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JfQorCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgPT0gU19VTktOT1dOKSB7CisJCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsIHN5bV9sb29rdXAoKHl5dnNwWy0yXS5zdHJpbmcpLCAwKSwgKHl5dnNwWy0xXS5leHByKSk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRcbiIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9IGVsc2UKKwkJWVlFUlJPUjsKIDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKIAogICAgIHsKLQlwcmludGYoIiVzOiVkOiBtaXNzaW5nICdlbmRpZicgZm9yIHRoaXMgJ2lmJyBzdGF0ZW1lbnRcbiIsIGN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8pOwotCXpjb25mbmVycnMrKzsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MzoKLQotICAgIHsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiAJbWVudV9hZGRfZW50cnkoTlVMTCk7Ci0JbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgeXl2c3BbLTFdLnN0cmluZywgTlVMTCk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhwcikpOworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2NDoKKyAgY2FzZSA1OToKIAogICAgIHsKLQltZW51X2VuZF9lbnRyeSgpOwotCW1lbnVfYWRkX21lbnUoKTsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNwWzBdLmlkKSwgVF9JRiwgVF9FTkRJRikpIHsKKwkJbWVudV9lbmRfbWVudSgpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRpZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQogO30KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCiAgICAgewotCWlmICh6Y29uZl9lbmR0b2tlbih5eXZzcFswXS50b2tlbiwgVF9NRU5VLCBUX0VORE1FTlUpKSB7Ci0JCW1lbnVfZW5kX21lbnUoKTsKLQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JfQorCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVMTCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjY6CisKKyAgICB7CisJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOwogO30KICAgICBicmVhazsKIAogICBjYXNlIDY3OgogCiAgICAgewotCXByaW50ZigiJXM6JWQ6IG1pc3NpbmcgJ2VuZG1lbnUnIGZvciB0aGlzICdtZW51JyBzdGF0ZW1lbnRcbiIsIGN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8pOwotCXpjb25mbmVycnMrKzsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNwWzBdLmlkKSwgVF9NRU5VLCBUX0VORE1FTlUpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQogO30KICAgICBicmVhazsKIAotICBjYXNlIDcyOgotCi0gICAgeyB6Y29uZnByaW50KCJpbnZhbGlkIG1lbnUgb3B0aW9uIik7IHl5ZXJyb2s7IDt9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA3MzoKIAogICAgIHsKLQl5eXZhbC5zdHJpbmcgPSB5eXZzcFstMV0uc3RyaW5nOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgeXl2c3BbLTFdLnN0cmluZyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFdLnN0cmluZykpOworCXpjb25mX25leHRmaWxlKCh5eXZzcFstMV0uc3RyaW5nKSk7CiA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CiAKICAgICB7Ci0JemNvbmZfbmV4dGZpbGUoeXl2c3BbMF0uc3RyaW5nKTsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9wcm9tcHQoUF9DT01NRU5ULCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogO30KICAgICBicmVhazsKIAogICBjYXNlIDc1OgogCiAgICAgewotCW1lbnVfYWRkX2VudHJ5KE5VTEwpOwotCW1lbnVfYWRkX3Byb21wdChQX0NPTU1FTlQsIHl5dnNwWy0xXS5zdHJpbmcsIE5VTEwpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDc2OgotCi0gICAgewogCW1lbnVfZW5kX2VudHJ5KCk7CiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzc6CisgIGNhc2UgNzY6CiAKICAgICB7CiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CkBAIC0xNjA2LDE3ICsxNTk2LDE3IEBACiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgNzc6CiAKICAgICB7Ci0JY3VycmVudF9lbnRyeS0+c3ltLT5oZWxwID0geXl2c3BbMF0uc3RyaW5nOworCWN1cnJlbnRfZW50cnktPnN5bS0+aGVscCA9ICh5eXZzcFswXS5zdHJpbmcpOwogO30KICAgICBicmVhazsKIAogICBjYXNlIDgyOgogCiAgICAgewotCW1lbnVfYWRkX2RlcCh5eXZzcFstMV0uZXhwcik7CisJbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhwcikpOwogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlcGVuZHMgb25cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogO30KICAgICBicmVhazsKQEAgLTE2MjQsNyArMTYxNCw3IEBACiAgIGNhc2UgODM6CiAKICAgICB7Ci0JbWVudV9hZGRfZGVwKHl5dnNwWy0xXS5leHByKTsKKwltZW51X2FkZF9kZXAoKHl5dnNwWy0xXS5leHByKSk7CiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVwZW5kc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiA7fQogICAgIGJyZWFrOwpAQCAtMTYzMiw3ICsxNjIyLDcgQEAKICAgY2FzZSA4NDoKIAogICAgIHsKLQltZW51X2FkZF9kZXAoeXl2c3BbLTFdLmV4cHIpOworCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIpKTsKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpyZXF1aXJlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiA7fQogICAgIGJyZWFrOwpAQCAtMTY0MCw4NCArMTYzMCw4NCBAQAogICBjYXNlIDg2OgogCiAgICAgewotCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgeXl2c3BbLTFdLnN0cmluZywgeXl2c3BbMF0uZXhwcik7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbLTFdLnN0cmluZyksICh5eXZzcFswXS5leHByKSk7CiA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgODk6CiAKLSAgICB7IHl5dmFsLnRva2VuID0gVF9FTkRNRU5VOyA7fQorICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTA6CiAKLSAgICB7IHl5dmFsLnRva2VuID0gVF9FTkRDSE9JQ0U7IDt9CisgICAgeyAoeXl2YWwuaWQpID0gKHl5dnNwWy0xXS5pZCk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAotICAgIHsgeXl2YWwudG9rZW4gPSBUX0VORElGOyA7fQorICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTQ6CiAKLSAgICB7IHl5dmFsLmV4cHIgPSBOVUxMOyA7fQorICAgIHsgKHl5dmFsLmV4cHIpID0gTlVMTDsgO30KICAgICBicmVhazsKIAogICBjYXNlIDk1OgogCi0gICAgeyB5eXZhbC5leHByID0geXl2c3BbMF0uZXhwcjsgO30KKyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFswXS5leHByKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDk2OgogCi0gICAgeyB5eXZhbC5leHByID0gZXhwcl9hbGxvY19zeW1ib2woeXl2c3BbMF0uc3ltYm9sKTsgO30KKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCh5eXZzcFswXS5zeW1ib2wpKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDk3OgogCi0gICAgeyB5eXZhbC5leHByID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHl5dnNwWy0yXS5zeW1ib2wsIHl5dnNwWzBdLnN5bWJvbCk7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5ODoKIAotICAgIHsgeXl2YWwuZXhwciA9IGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsIHl5dnNwWy0yXS5zeW1ib2wsIHl5dnNwWzBdLnN5bWJvbCk7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDk5OgogCi0gICAgeyB5eXZhbC5leHByID0geXl2c3BbLTFdLmV4cHI7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbLTFdLmV4cHIpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAwOgogCi0gICAgeyB5eXZhbC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHl5dnNwWzBdLmV4cHIpOyA7fQorICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsICh5eXZzcFswXS5leHByKSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDE6CiAKLSAgICB7IHl5dmFsLmV4cHIgPSBleHByX2FsbG9jX3R3byhFX09SLCB5eXZzcFstMl0uZXhwciwgeXl2c3BbMF0uZXhwcik7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3byhFX09SLCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbMF0uZXhwcikpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAyOgogCi0gICAgeyB5eXZhbC5leHByID0gZXhwcl9hbGxvY190d28oRV9BTkQsIHl5dnNwWy0yXS5leHByLCB5eXZzcFswXS5leHByKTsgO30KKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbMF0uZXhwcikpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAzOgogCi0gICAgeyB5eXZhbC5zeW1ib2wgPSBzeW1fbG9va3VwKHl5dnNwWzBdLnN0cmluZywgMCk7IGZyZWUoeXl2c3BbMF0uc3RyaW5nKTsgO30KKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2c3BbMF0uc3RyaW5nKSwgMCk7IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA0OgogCi0gICAgeyB5eXZhbC5zeW1ib2wgPSBzeW1fbG9va3VwKHl5dnNwWzBdLnN0cmluZywgMSk7IGZyZWUoeXl2c3BbMF0uc3RyaW5nKTsgO30KKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2c3BbMF0uc3RyaW5nKSwgMSk7IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyA7fQogICAgIGJyZWFrOwogCiAKICAgICB9CiAKLS8qIExpbmUgOTk5IG9mIHlhY2MuYy4gICovCisvKiBMaW5lIDEwMzcgb2YgeWFjYy5jLiAgKi8KIAogDAogICB5eXZzcCAtPSB5eWxlbjsKQEAgLTE3NTksMTggKzE3NDksMzMgQEAKIAl7CiAJICBZWVNJWkVfVCB5eXNpemUgPSAwOwogCSAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCSAgY29uc3QgY2hhciogeXlwcmVmaXg7CiAJICBjaGFyICp5eW1zZzsKLQkgIGludCB5eXgsIHl5Y291bnQ7CisJICBpbnQgeXl4OwogCi0JICB5eWNvdW50ID0gMDsKIAkgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KIAkgICAgIFlZQ0hFQ0suICAqLwotCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0JICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsgeXl4KyspCisJICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKwkgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworCSAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW47CisJICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisJICBpbnQgeXljb3VudCA9IDA7CisKKwkgIHl5cHJlZml4ID0gIiwgZXhwZWN0aW5nICI7CisJICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQogCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0JICAgICAgeXlzaXplICs9IHl5c3RybGVuICh5eXRuYW1lW3l5eF0pICsgMTUsIHl5Y291bnQrKzsKLQkgIHl5c2l6ZSArPSB5eXN0cmxlbiAoInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAiKSArIDE7Ci0JICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbeXl0eXBlXSk7CisJICAgICAgeworCQl5eXNpemUgKz0geXlzdHJsZW4gKHl5cHJlZml4KSArIHl5c3RybGVuICh5eXRuYW1lIFt5eXhdKTsKKwkJeXljb3VudCArPSAxOworCQlpZiAoeXljb3VudCA9PSA1KQorCQkgIHsKKwkJICAgIHl5c2l6ZSA9IDA7CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgfQorCSAgeXlzaXplICs9IChzaXplb2YgKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIikKKwkJICAgICArIHl5c3RybGVuICh5eXRuYW1lW3l5dHlwZV0pKTsKIAkgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlzaXplKTsKIAkgIGlmICh5eW1zZyAhPSAwKQogCSAgICB7CkBAIC0xNzc5LDE2ICsxNzg0LDEzIEBACiAKIAkgICAgICBpZiAoeXljb3VudCA8IDUpCiAJCXsKLQkJICB5eWNvdW50ID0gMDsKLQkJICBmb3IgKHl5eCA9IHl5biA8IDAgPyAteXluIDogMDsKLQkJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsKLQkJICAgICAgIHl5eCsrKQorCQkgIHl5cHJlZml4ID0gIiwgZXhwZWN0aW5nICI7CisJCSAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKIAkJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKIAkJICAgICAgewotCQkJY29uc3QgY2hhciAqeXlxID0gISB5eWNvdW50ID8gIiwgZXhwZWN0aW5nICIgOiAiIG9yICI7Ci0JCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXEpOworCQkJeXlwID0geXlzdHBjcHkgKHl5cCwgeXlwcmVmaXgpOwogCQkJeXlwID0geXlzdHBjcHkgKHl5cCwgeXl0bmFtZVt5eXhdKTsKLQkJCXl5Y291bnQrKzsKKwkJCXl5cHJlZml4ID0gIiBvciAiOwogCQkgICAgICB9CiAJCX0KIAkgICAgICB5eWVycm9yICh5eW1zZyk7CkBAIC0xODA2LDM4ICsxODA4LDU3IEBACiAKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgorICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KIAkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCi0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCiAgICAgICAgIHsKLQkgIC8qIFBvcCB0aGUgZXJyb3IgdG9rZW4uICAqLwotICAgICAgICAgIFlZUE9QU1RBQ0s7Ci0JICAvKiBQb3AgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLiAgKi8KLQkgIHdoaWxlICh5eXNzIDwgeXlzc3ApCi0JICAgIHsKLQkgICAgICBZWURTWU1QUklOVEYgKCJFcnJvcjogcG9wcGluZyIsIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3ApOwotCSAgICAgIHl5ZGVzdHJ1Y3QgKHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCk7Ci0JICAgICAgWVlQT1BTVEFDSzsKLQkgICAgfQotCSAgWVlBQk9SVDsKKyAgICAgICAgICAvKiBJZiBhdCBlbmQgb2YgaW5wdXQsIHBvcCB0aGUgZXJyb3IgdG9rZW4sCisJICAgICB0aGVuIHRoZSByZXN0IG9mIHRoZSBzdGFjaywgdGhlbiByZXR1cm4gZmFpbHVyZS4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICAgZm9yICg7OykKKwkgICAgICAgeworCisJCSBZWVBPUFNUQUNLOworCQkgaWYgKHl5c3NwID09IHl5c3MpCisJCSAgIFlZQUJPUlQ7CisJCSB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3ApOworCSAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgWVlEU1lNUFJJTlRGICgiRXJyb3I6IGRpc2NhcmRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLSAgICAgIHl5ZGVzdHJ1Y3QgKHl5dG9rZW4sICZ5eWx2YWwpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsIHl5dG9rZW4sICZ5eWx2YWwpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CiAgICAgfQogCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCiAgICAgIHRva2VuLiAgKi8KICAgZ290byB5eWVycmxhYjE7CiAKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgYW4gYWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworI2lmZGVmIF9fR05VQ19fCisgIC8qIFBhY2lmeSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMgWVlFUlJPUiBhbmQgdGhlIGxhYmVsCisgICAgIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlciBjb2RlLiAgKi8KKyAgaWYgKDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKyNlbmRpZgorCit5eXZzcCAtPSB5eWxlbjsKKyAgeXlzc3AgLT0geXlsZW47CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiMToKICAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwogCkBAIC0xODU5LDIyICsxODgwLDIyIEBACiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKIAlZWUFCT1JUOwogCi0gICAgICBZWURTWU1QUklOVEYgKCJFcnJvcjogcG9wcGluZyIsIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3ApOwotICAgICAgeXlkZXN0cnVjdCAoeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7Ci0gICAgICB5eXZzcC0tOwotICAgICAgeXlzdGF0ZSA9ICotLXl5c3NwOwogCisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLCB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwKTsKKyAgICAgIFlZUE9QU1RBQ0s7CisgICAgICB5eXN0YXRlID0gKnl5c3NwOwogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKICAgaWYgKHl5biA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAiKSk7Ci0KICAgKisreXl2c3AgPSB5eWx2YWw7CiAKIAorICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7CisKICAgeXlzdGF0ZSA9IHl5bjsKICAgZ290byB5eW5ld3N0YXRlOwogCkBAIC0xODkwLDYgKzE5MTEsOSBAQAogfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB5eWFib3J0bGFiOgorICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKyAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCk7CisgIHl5Y2hhciA9IFlZRU1QVFk7CiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIApAQCAtMTkyNywxNiArMTk1MSwxNiBAQAogCW1vZHVsZXNfc3ltID0gc3ltX2xvb2t1cCgiTU9EVUxFUyIsIDApOwogCXJvb3RtZW51LnByb21wdCA9IG1lbnVfYWRkX3Byb21wdChQX01FTlUsICJMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiIsIE5VTEwpOwogCi0JLy96Y29uZmRlYnVnID0gMTsKKyNpZiBZWURFQlVHCisJaWYgKGdldGVudigiWkNPTkZfREVCVUciKSkKKwkJemNvbmZkZWJ1ZyA9IDE7CisjZW5kaWYKIAl6Y29uZnBhcnNlKCk7CiAJaWYgKHpjb25mbmVycnMpCiAJCWV4aXQoMSk7CiAJbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOwogCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLRUQpICYmIHN5bV9jaGVja19kZXBzKHN5bSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0JCWVsc2UKLQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIRUNLX0RPTkU7CisJCXN5bV9jaGVja19kZXBzKHN5bSk7CiAgICAgICAgIH0KIAogCXN5bV9jaGFuZ2VfY291bnQgPSAxOwpAQCAtMTk1MSwyMCArMTk3NSwyNSBAQAogCWNhc2UgVF9FTkRDSE9JQ0U6CXJldHVybiAiZW5kY2hvaWNlIjsKIAljYXNlIFRfSUY6CQlyZXR1cm4gImlmIjsKIAljYXNlIFRfRU5ESUY6CQlyZXR1cm4gImVuZGlmIjsKKwljYXNlIFRfREVQRU5EUzoJCXJldHVybiAiZGVwZW5kcyI7CiAJfQogCXJldHVybiAiPHRva2VuPiI7CiB9CiAKLXN0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGludCB0b2tlbiwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbikKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pCiB7Ci0JaWYgKHRva2VuICE9IGVuZHRva2VuKSB7Ci0JCXpjb25mcHJpbnQoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLCB6Y29uZl90b2tlbm5hbWUodG9rZW4pLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9rZW4pIHsKKwkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLAorCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOwogCQl6Y29uZm5lcnJzKys7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGN1cnJlbnRfbWVudS0+ZmlsZSAhPSBjdXJyZW50X2ZpbGUpIHsKLQkJemNvbmZwcmludCgiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLCB6Y29uZl90b2tlbm5hbWUodG9rZW4pLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOwotCQl6Y29uZnByaW50KCJsb2NhdGlvbiBvZiB0aGUgJyVzJyIsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJCXpjb25mX2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsCisJCQlrY29uZl9pZF9zdHJpbmdzICsgaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4iLAorCQkJY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubywKKwkJCXpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CiAJCXpjb25mbmVycnMrKzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE5NzUsNyArMjAwNCwxOSBAQAogewogCXZhX2xpc3QgYXA7CiAKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSk7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXpjb25mbmVycnMrKzsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIAl2YV9zdGFydChhcCwgZXJyKTsKIAl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOwogCXZhX2VuZChhcCk7CkBAIC0xOTg0LDcgKzIwMjUsOSBAQAogCiBzdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycikKIHsKKyNpZiBZWURFQlVHCiAJZnByaW50ZihzdGRlcnIsICIlczolZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxLCBlcnIpOworI2VuZGlmCiB9CiAKIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuaF9zaGlwcGVkIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5oX3NoaXBwZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMTkxZWYuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5oX3NoaXBwZWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgZnJvbSB6Y29uZi55LCBieSBHTlUgYmlzb24gMS43NS4gICovCi0KLS8qIFNrZWxldG9uIHBhcnNlciBmb3IgWWFjYy1saWtlIHBhcnNpbmcgd2l0aCBCaXNvbiwKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKLSAgIEJpc29uIG91dHB1dCBmaWxlLCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLwotCi0jaWZuZGVmIEJJU09OX1pDT05GX1RBQl9ICi0jIGRlZmluZSBCSVNPTl9aQ09ORl9UQUJfSAotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBUX01BSU5NRU5VID0gMjU4LAotICAgICBUX01FTlUgPSAyNTksCi0gICAgIFRfRU5ETUVOVSA9IDI2MCwKLSAgICAgVF9TT1VSQ0UgPSAyNjEsCi0gICAgIFRfQ0hPSUNFID0gMjYyLAotICAgICBUX0VORENIT0lDRSA9IDI2MywKLSAgICAgVF9DT01NRU5UID0gMjY0LAotICAgICBUX0NPTkZJRyA9IDI2NSwKLSAgICAgVF9IRUxQID0gMjY2LAotICAgICBUX0hFTFBURVhUID0gMjY3LAotICAgICBUX0lGID0gMjY4LAotICAgICBUX0VORElGID0gMjY5LAotICAgICBUX0RFUEVORFMgPSAyNzAsCi0gICAgIFRfUkVRVUlSRVMgPSAyNzEsCi0gICAgIFRfT1BUSU9OQUwgPSAyNzIsCi0gICAgIFRfUFJPTVBUID0gMjczLAotICAgICBUX0RFRkFVTFQgPSAyNzQsCi0gICAgIFRfVFJJU1RBVEUgPSAyNzUsCi0gICAgIFRfQk9PTEVBTiA9IDI3NiwKLSAgICAgVF9JTlQgPSAyNzcsCi0gICAgIFRfSEVYID0gMjc4LAotICAgICBUX1dPUkQgPSAyNzksCi0gICAgIFRfU1RSSU5HID0gMjgwLAotICAgICBUX1VORVFVQUwgPSAyODEsCi0gICAgIFRfRU9GID0gMjgyLAotICAgICBUX0VPTCA9IDI4MywKLSAgICAgVF9DTE9TRV9QQVJFTiA9IDI4NCwKLSAgICAgVF9PUEVOX1BBUkVOID0gMjg1LAotICAgICBUX09OID0gMjg2LAotICAgICBUX09SID0gMjg3LAotICAgICBUX0FORCA9IDI4OCwKLSAgICAgVF9FUVVBTCA9IDI4OSwKLSAgICAgVF9OT1QgPSAyOTAKLSAgIH07Ci0jZW5kaWYKLSNkZWZpbmUgVF9NQUlOTUVOVSAyNTgKLSNkZWZpbmUgVF9NRU5VIDI1OQotI2RlZmluZSBUX0VORE1FTlUgMjYwCi0jZGVmaW5lIFRfU09VUkNFIDI2MQotI2RlZmluZSBUX0NIT0lDRSAyNjIKLSNkZWZpbmUgVF9FTkRDSE9JQ0UgMjYzCi0jZGVmaW5lIFRfQ09NTUVOVCAyNjQKLSNkZWZpbmUgVF9DT05GSUcgMjY1Ci0jZGVmaW5lIFRfSEVMUCAyNjYKLSNkZWZpbmUgVF9IRUxQVEVYVCAyNjcKLSNkZWZpbmUgVF9JRiAyNjgKLSNkZWZpbmUgVF9FTkRJRiAyNjkKLSNkZWZpbmUgVF9ERVBFTkRTIDI3MAotI2RlZmluZSBUX1JFUVVJUkVTIDI3MQotI2RlZmluZSBUX09QVElPTkFMIDI3MgotI2RlZmluZSBUX1BST01QVCAyNzMKLSNkZWZpbmUgVF9ERUZBVUxUIDI3NAotI2RlZmluZSBUX1RSSVNUQVRFIDI3NQotI2RlZmluZSBUX0JPT0xFQU4gMjc2Ci0jZGVmaW5lIFRfSU5UIDI3NwotI2RlZmluZSBUX0hFWCAyNzgKLSNkZWZpbmUgVF9XT1JEIDI3OQotI2RlZmluZSBUX1NUUklORyAyODAKLSNkZWZpbmUgVF9VTkVRVUFMIDI4MQotI2RlZmluZSBUX0VPRiAyODIKLSNkZWZpbmUgVF9FT0wgMjgzCi0jZGVmaW5lIFRfQ0xPU0VfUEFSRU4gMjg0Ci0jZGVmaW5lIFRfT1BFTl9QQVJFTiAyODUKLSNkZWZpbmUgVF9PTiAyODYKLSNkZWZpbmUgVF9PUiAyODcKLSNkZWZpbmUgVF9BTkQgMjg4Ci0jZGVmaW5lIFRfRVFVQUwgMjg5Ci0jZGVmaW5lIFRfTk9UIDI5MAotCi0KLQotCi0jaWZuZGVmIFlZU1RZUEUKLSNsaW5lIDMzICJ6Y29uZi55IgotdHlwZWRlZiB1bmlvbiB7Ci0JaW50IHRva2VuOwotCWNoYXIgKnN0cmluZzsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7Ci0Jc3RydWN0IGV4cHIgKmV4cHI7Ci0Jc3RydWN0IG1lbnUgKm1lbnU7Ci19IHl5c3R5cGU7Ci0vKiBMaW5lIDEyODEgb2YgL3Vzci9zaGFyZS9iaXNvbi95YWNjLmMuICAqLwotI2xpbmUgMTE4ICJ6Y29uZi50YWIuaCIKLSMgZGVmaW5lIFlZU1RZUEUgeXlzdHlwZQotI2VuZGlmCi0KLWV4dGVybiBZWVNUWVBFIHpjb25mbHZhbDsKLQotCi0jZW5kaWYgLyogbm90IEJJU09OX1pDT05GX1RBQl9IICovCi0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi55IGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkKaW5kZXggZTFhMGY0NS4uMWY2MWZiYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkKQEAgLTExLDYgKzExLDExIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogCisjZGVmaW5lIExLQ19ESVJFQ1RfTElOSworI2luY2x1ZGUgImxrYy5oIgorCisjaW5jbHVkZSAiemNvbmYuaGFzaC5jIgorCiAjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCiAKICNkZWZpbmUgUFJJTlRECQkweDAwMDEKQEAgLTIwLDYxICsyNSw1OSBAQAogCiBleHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7CiBzdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihpbnQgdG9rZW4sIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7CiAKIHN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoWzI1N107CiAKIHN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKIAorI2RlZmluZSBZWURFQlVHIDAKKyNpZiBZWURFQlVHCiAjZGVmaW5lIFlZRVJST1JfVkVSQk9TRQorI2VuZGlmCiAlfQotJWV4cGVjdCA0MAorJWV4cGVjdCAyNgogCiAldW5pb24KIHsKLQlpbnQgdG9rZW47CiAJY2hhciAqc3RyaW5nOworCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKIAlzdHJ1Y3QgZXhwciAqZXhwcjsKIAlzdHJ1Y3QgbWVudSAqbWVudTsKKwlzdHJ1Y3Qga2NvbmZfaWQgKmlkOwogfQogCi0ldG9rZW4gVF9NQUlOTUVOVQotJXRva2VuIFRfTUVOVQotJXRva2VuIFRfRU5ETUVOVQotJXRva2VuIFRfU09VUkNFCi0ldG9rZW4gVF9DSE9JQ0UKLSV0b2tlbiBUX0VORENIT0lDRQotJXRva2VuIFRfQ09NTUVOVAotJXRva2VuIFRfQ09ORklHCi0ldG9rZW4gVF9NRU5VQ09ORklHCi0ldG9rZW4gVF9IRUxQCisldG9rZW4gPGlkPlRfTUFJTk1FTlUKKyV0b2tlbiA8aWQ+VF9NRU5VCisldG9rZW4gPGlkPlRfRU5ETUVOVQorJXRva2VuIDxpZD5UX1NPVVJDRQorJXRva2VuIDxpZD5UX0NIT0lDRQorJXRva2VuIDxpZD5UX0VORENIT0lDRQorJXRva2VuIDxpZD5UX0NPTU1FTlQKKyV0b2tlbiA8aWQ+VF9DT05GSUcKKyV0b2tlbiA8aWQ+VF9NRU5VQ09ORklHCisldG9rZW4gPGlkPlRfSEVMUAogJXRva2VuIDxzdHJpbmc+IFRfSEVMUFRFWFQKLSV0b2tlbiBUX0lGCi0ldG9rZW4gVF9FTkRJRgotJXRva2VuIFRfREVQRU5EUwotJXRva2VuIFRfUkVRVUlSRVMKLSV0b2tlbiBUX09QVElPTkFMCi0ldG9rZW4gVF9QUk9NUFQKLSV0b2tlbiBUX0RFRkFVTFQKLSV0b2tlbiBUX1RSSVNUQVRFCi0ldG9rZW4gVF9ERUZfVFJJU1RBVEUKLSV0b2tlbiBUX0JPT0xFQU4KLSV0b2tlbiBUX0RFRl9CT09MRUFOCi0ldG9rZW4gVF9TVFJJTkcKLSV0b2tlbiBUX0lOVAotJXRva2VuIFRfSEVYCisldG9rZW4gPGlkPlRfSUYKKyV0b2tlbiA8aWQ+VF9FTkRJRgorJXRva2VuIDxpZD5UX0RFUEVORFMKKyV0b2tlbiA8aWQ+VF9SRVFVSVJFUworJXRva2VuIDxpZD5UX09QVElPTkFMCisldG9rZW4gPGlkPlRfUFJPTVBUCisldG9rZW4gPGlkPlRfVFlQRQorJXRva2VuIDxpZD5UX0RFRkFVTFQKKyV0b2tlbiA8aWQ+VF9TRUxFQ1QKKyV0b2tlbiA8aWQ+VF9SQU5HRQorJXRva2VuIDxpZD5UX09OCiAldG9rZW4gPHN0cmluZz4gVF9XT1JECiAldG9rZW4gPHN0cmluZz4gVF9XT1JEX1FVT1RFCiAldG9rZW4gVF9VTkVRVUFMCi0ldG9rZW4gVF9FT0YKLSV0b2tlbiBUX0VPTAogJXRva2VuIFRfQ0xPU0VfUEFSRU4KICV0b2tlbiBUX09QRU5fUEFSRU4KLSV0b2tlbiBUX09OCi0ldG9rZW4gVF9TRUxFQ1QKLSV0b2tlbiBUX1JBTkdFCisldG9rZW4gVF9FT0wKIAogJWxlZnQgVF9PUgogJWxlZnQgVF9BTkQKQEAgLTgyLDM4ICs4NSw1NCBAQAogJW5vbmFzc29jIFRfTk9UCiAKICV0eXBlIDxzdHJpbmc+IHByb21wdAotJXR5cGUgPHN0cmluZz4gc291cmNlCiAldHlwZSA8c3ltYm9sPiBzeW1ib2wKICV0eXBlIDxleHByPiBleHByCiAldHlwZSA8ZXhwcj4gaWZfZXhwcgotJXR5cGUgPHRva2VuPiBlbmQKKyV0eXBlIDxpZD4gZW5kCisldHlwZSA8aWQ+IG9wdGlvbl9uYW1lCisldHlwZSA8bWVudT4gaWZfZW50cnkgbWVudV9lbnRyeSBjaG9pY2VfZW50cnkKIAotJXsKLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCi0jaW5jbHVkZSAibGtjLmgiCi0lfQorJWRlc3RydWN0b3IgeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJJCQtPmZpbGUtPm5hbWUsICQkLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUgPT0gJCQpCisJCW1lbnVfZW5kX21lbnUoKTsKK30gaWZfZW50cnkgbWVudV9lbnRyeSBjaG9pY2VfZW50cnkKKwogJSUKLWlucHV0OgkgIC8qIGVtcHR5ICovCi0JfCBpbnB1dCBibG9jaworaW5wdXQ6IHN0bXRfbGlzdDsKKworc3RtdF9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IHN0bXRfbGlzdCBjb21tb25fc3RtdAorCXwgc3RtdF9saXN0IGNob2ljZV9zdG10CisJfCBzdG10X2xpc3QgbWVudV9zdG10CisJfCBzdG10X2xpc3QgVF9NQUlOTUVOVSBwcm9tcHQgbmwKKwl8IHN0bXRfbGlzdCBlbmQJCQl7IHpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkIGVuZCBzdGF0ZW1lbnQiKTsgfQorCXwgc3RtdF9saXN0IFRfV09SRCBlcnJvciBUX0VPTAl7IHpjb25mX2Vycm9yKCJ1bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAkMik7IH0KKwl8IHN0bXRfbGlzdCBvcHRpb25fbmFtZSBlcnJvciBUX0VPTAoreworCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkIG9wdGlvbiBcIiVzXCIiLCBrY29uZl9pZF9zdHJpbmdzICsgJDItPm5hbWUpOworfQorCXwgc3RtdF9saXN0IGVycm9yIFRfRU9MCQl7IHpjb25mX2Vycm9yKCJpbnZhbGlkIHN0YXRlbWVudCIpOyB9CiA7CiAKLWJsb2NrOgkgIGNvbW1vbl9ibG9jawotCXwgY2hvaWNlX3N0bXQKLQl8IG1lbnVfc3RtdAotCXwgVF9NQUlOTUVOVSBwcm9tcHQgbmxfb3JfZW9mCi0JfCBUX0VORE1FTlUJCXsgemNvbmZwcmludCgidW5leHBlY3RlZCAnZW5kbWVudScgc3RhdGVtZW50Iik7IH0KLQl8IFRfRU5ESUYJCXsgemNvbmZwcmludCgidW5leHBlY3RlZCAnZW5kaWYnIHN0YXRlbWVudCIpOyB9Ci0JfCBUX0VORENIT0lDRQkJeyB6Y29uZnByaW50KCJ1bmV4cGVjdGVkICdlbmRjaG9pY2UnIHN0YXRlbWVudCIpOyB9Ci0JfCBlcnJvciBubF9vcl9lb2YJeyB6Y29uZnByaW50KCJzeW50YXggZXJyb3IiKTsgeXllcnJvazsgfQorb3B0aW9uX25hbWU6CisJVF9ERVBFTkRTIHwgVF9QUk9NUFQgfCBUX1RZUEUgfCBUX1NFTEVDVCB8IFRfT1BUSU9OQUwgfCBUX1JBTkdFIHwgVF9ERUZBVUxUCiA7CiAKLWNvbW1vbl9ibG9jazoKLQkgIGlmX3N0bXQKK2NvbW1vbl9zdG10OgorCSAgVF9FT0wKKwl8IGlmX3N0bXQKIAl8IGNvbW1lbnRfc3RtdAogCXwgY29uZmlnX3N0bXQKIAl8IG1lbnVjb25maWdfc3RtdAogCXwgc291cmNlX3N0bXQKLQl8IG5sX29yX2VvZgorOworCitvcHRpb25fZXJyb3I6CisJICBUX1dPUkQgZXJyb3IgVF9FT0wJCXsgemNvbmZfZXJyb3IoInVua25vd24gb3B0aW9uIFwiJXNcIiIsICQxKTsgfQorCXwgZXJyb3IgVF9FT0wJCQl7IHpjb25mX2Vycm9yKCJpbnZhbGlkIG9wdGlvbiIpOyB9CiA7CiAKIApAQCAtMTU2LDUxICsxNzUsMTYgQEAKIAl8IGNvbmZpZ19vcHRpb25fbGlzdCBjb25maWdfb3B0aW9uCiAJfCBjb25maWdfb3B0aW9uX2xpc3QgZGVwZW5kcwogCXwgY29uZmlnX29wdGlvbl9saXN0IGhlbHAKKwl8IGNvbmZpZ19vcHRpb25fbGlzdCBvcHRpb25fZXJyb3IKIAl8IGNvbmZpZ19vcHRpb25fbGlzdCBUX0VPTAogOwogCi1jb25maWdfb3B0aW9uOiBUX1RSSVNUQVRFIHByb21wdF9zdG10X29wdCBUX0VPTAorY29uZmlnX29wdGlvbjogVF9UWVBFIHByb21wdF9zdG10X29wdCBUX0VPTAogewotCW1lbnVfc2V0X3R5cGUoU19UUklTVEFURSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHJpc3RhdGVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9ERUZfVFJJU1RBVEUgZXhwciBpZl9leHByIFRfRU9MCi17Ci0JbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICQyLCAkMyk7Ci0JbWVudV9zZXRfdHlwZShTX1RSSVNUQVRFKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZfYm9vbGVhblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19OwotCi1jb25maWdfb3B0aW9uOiBUX0JPT0xFQU4gcHJvbXB0X3N0bXRfb3B0IFRfRU9MCi17Ci0JbWVudV9zZXRfdHlwZShTX0JPT0xFQU4pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmJvb2xlYW5cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9ERUZfQk9PTEVBTiBleHByIGlmX2V4cHIgVF9FT0wKLXsKLQltZW51X2FkZF9leHByKFBfREVGQVVMVCwgJDIsICQzKTsKLQltZW51X3NldF90eXBlKFNfQk9PTEVBTik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmX2Jvb2xlYW5cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9JTlQgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCi17Ci0JbWVudV9zZXRfdHlwZShTX0lOVCk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRfSEVYIHByb21wdF9zdG10X29wdCBUX0VPTAotewotCW1lbnVfc2V0X3R5cGUoU19IRVgpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmhleFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19OwotCi1jb25maWdfb3B0aW9uOiBUX1NUUklORyBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKLXsKLQltZW51X3NldF90eXBlKFNfU1RSSU5HKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzdHJpbmdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJJDEtPnN0eXBlKTsKIH07CiAKIGNvbmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21wdCBpZl9leHByIFRfRU9MCkBAIC0yMTIsNyArMTk2LDExIEBACiBjb25maWdfb3B0aW9uOiBUX0RFRkFVTFQgZXhwciBpZl9leHByIFRfRU9MCiB7CiAJbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICQyLCAkMyk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJaWYgKCQxLT5zdHlwZSAhPSBTX1VOS05PV04pCisJCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0KCV1KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJJDEtPnN0eXBlKTsKIH07CiAKIGNvbmZpZ19vcHRpb246IFRfU0VMRUNUIFRfV09SRCBpZl9leHByIFRfRU9MCkBAIC0yNDAsOCArMjI4LDcgQEAKIAogY2hvaWNlX2VudHJ5OiBjaG9pY2UgY2hvaWNlX29wdGlvbl9saXN0CiB7Ci0JbWVudV9lbmRfZW50cnkoKTsKLQltZW51X2FkZF9tZW51KCk7CisJJCQgPSBtZW51X2FkZF9tZW51KCk7CiB9OwogCiBjaG9pY2VfZW5kOiBlbmQKQEAgLTI1MiwxMyArMjM5LDggQEAKIAl9CiB9OwogCi1jaG9pY2Vfc3RtdDoKLQkgIGNob2ljZV9lbnRyeSBjaG9pY2VfYmxvY2sgY2hvaWNlX2VuZAotCXwgY2hvaWNlX2VudHJ5IGNob2ljZV9ibG9jawotewotCXByaW50ZigiJXM6JWQ6IG1pc3NpbmcgJ2VuZGNob2ljZScgZm9yIHRoaXMgJ2Nob2ljZScgc3RhdGVtZW50XG4iLCBjdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vKTsKLQl6Y29uZm5lcnJzKys7Ci19OworY2hvaWNlX3N0bXQ6IGNob2ljZV9lbnRyeSBjaG9pY2VfYmxvY2sgY2hvaWNlX2VuZAorOwogCiBjaG9pY2Vfb3B0aW9uX2xpc3Q6CiAJICAvKiBlbXB0eSAqLwpAQCAtMjY2LDYgKzI0OCw3IEBACiAJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcwogCXwgY2hvaWNlX29wdGlvbl9saXN0IGhlbHAKIAl8IGNob2ljZV9vcHRpb25fbGlzdCBUX0VPTAorCXwgY2hvaWNlX29wdGlvbl9saXN0IG9wdGlvbl9lcnJvcgogOwogCiBjaG9pY2Vfb3B0aW9uOiBUX1BST01QVCBwcm9tcHQgaWZfZXhwciBUX0VPTApAQCAtMjc0LDE2ICsyNTcsMTUgQEAKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogfTsKIAotY2hvaWNlX29wdGlvbjogVF9UUklTVEFURSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKK2Nob2ljZV9vcHRpb246IFRfVFlQRSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKIHsKLQltZW51X3NldF90eXBlKFNfVFJJU1RBVEUpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnRyaXN0YXRlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0KLWNob2ljZV9vcHRpb246IFRfQk9PTEVBTiBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKLXsKLQltZW51X3NldF90eXBlKFNfQk9PTEVBTik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Ym9vbGVhblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJaWYgKCQxLT5zdHlwZSA9PSBTX0JPT0xFQU4gfHwgJDEtPnN0eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJbWVudV9zZXRfdHlwZSgkMS0+c3R5cGUpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCQkkMS0+c3R5cGUpOworCX0gZWxzZQorCQlZWUVSUk9SOwogfTsKIAogY2hvaWNlX29wdGlvbjogVF9PUFRJT05BTCBUX0VPTApAQCAtMjk0LDI0ICsyNzYsMjcgQEAKIAogY2hvaWNlX29wdGlvbjogVF9ERUZBVUxUIFRfV09SRCBpZl9leHByIFRfRU9MCiB7Ci0JbWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgc3ltX2xvb2t1cCgkMiwgMCksICQzKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwlpZiAoJDEtPnN0eXBlID09IFNfVU5LTk9XTikgeworCQltZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCBzeW1fbG9va3VwKCQyLCAwKSwgJDMpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfSBlbHNlCisJCVlZRVJST1I7CiB9OwogCiBjaG9pY2VfYmxvY2s6CiAJICAvKiBlbXB0eSAqLwotCXwgY2hvaWNlX2Jsb2NrIGNvbW1vbl9ibG9jaworCXwgY2hvaWNlX2Jsb2NrIGNvbW1vbl9zdG10CiA7CiAKIC8qIGlmIGVudHJ5ICovCiAKLWlmOiBUX0lGIGV4cHIgVF9FT0wKK2lmX2VudHJ5OiBUX0lGIGV4cHIgbmwKIHsKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiAJbWVudV9hZGRfZW50cnkoTlVMTCk7CiAJbWVudV9hZGRfZGVwKCQyKTsKLQltZW51X2VuZF9lbnRyeSgpOwotCW1lbnVfYWRkX21lbnUoKTsKKwkkJCA9IG1lbnVfYWRkX21lbnUoKTsKIH07CiAKIGlmX2VuZDogZW5kCkBAIC0zMjIsMTcgKzMwNywxMiBAQAogCX0KIH07CiAKLWlmX3N0bXQ6Ci0JICBpZiBpZl9ibG9jayBpZl9lbmQKLQl8IGlmIGlmX2Jsb2NrCi17Ci0JcHJpbnRmKCIlczolZDogbWlzc2luZyAnZW5kaWYnIGZvciB0aGlzICdpZicgc3RhdGVtZW50XG4iLCBjdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vKTsKLQl6Y29uZm5lcnJzKys7Ci19OworaWZfc3RtdDogaWZfZW50cnkgaWZfYmxvY2sgaWZfZW5kCis7CiAKIGlmX2Jsb2NrOgogCSAgLyogZW1wdHkgKi8KLQl8IGlmX2Jsb2NrIGNvbW1vbl9ibG9jaworCXwgaWZfYmxvY2sgY29tbW9uX3N0bXQKIAl8IGlmX2Jsb2NrIG1lbnVfc3RtdAogCXwgaWZfYmxvY2sgY2hvaWNlX3N0bXQKIDsKQEAgLTM0OCw4ICszMjgsNyBAQAogCiBtZW51X2VudHJ5OiBtZW51IGRlcGVuZHNfbGlzdAogewotCW1lbnVfZW5kX2VudHJ5KCk7Ci0JbWVudV9hZGRfbWVudSgpOworCSQkID0gbWVudV9hZGRfbWVudSgpOwogfTsKIAogbWVudV9lbmQ6IGVuZApAQCAtMzYwLDMxICszMzksMjAgQEAKIAl9CiB9OwogCi1tZW51X3N0bXQ6Ci0JICBtZW51X2VudHJ5IG1lbnVfYmxvY2sgbWVudV9lbmQKLQl8IG1lbnVfZW50cnkgbWVudV9ibG9jawotewotCXByaW50ZigiJXM6JWQ6IG1pc3NpbmcgJ2VuZG1lbnUnIGZvciB0aGlzICdtZW51JyBzdGF0ZW1lbnRcbiIsIGN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8pOwotCXpjb25mbmVycnMrKzsKLX07CittZW51X3N0bXQ6IG1lbnVfZW50cnkgbWVudV9ibG9jayBtZW51X2VuZAorOwogCiBtZW51X2Jsb2NrOgogCSAgLyogZW1wdHkgKi8KLQl8IG1lbnVfYmxvY2sgY29tbW9uX2Jsb2NrCisJfCBtZW51X2Jsb2NrIGNvbW1vbl9zdG10CiAJfCBtZW51X2Jsb2NrIG1lbnVfc3RtdAogCXwgbWVudV9ibG9jayBjaG9pY2Vfc3RtdAotCXwgbWVudV9ibG9jayBlcnJvciBUX0VPTAkJeyB6Y29uZnByaW50KCJpbnZhbGlkIG1lbnUgb3B0aW9uIik7IHl5ZXJyb2s7IH0KIDsKIAotc291cmNlOiBUX1NPVVJDRSBwcm9tcHQgVF9FT0wKK3NvdXJjZV9zdG10OiBUX1NPVVJDRSBwcm9tcHQgVF9FT0wKIHsKLQkkJCA9ICQyOwogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOwotfTsKLQotc291cmNlX3N0bXQ6IHNvdXJjZQotewotCXpjb25mX25leHRmaWxlKCQxKTsKKwl6Y29uZl9uZXh0ZmlsZSgkMik7CiB9OwogCiAvKiBjb21tZW50IGVudHJ5ICovCkBAIC00MTYsOSArMzg0LDExIEBACiAKIC8qIGRlcGVuZHMgb3B0aW9uICovCiAKLWRlcGVuZHNfbGlzdDoJICAvKiBlbXB0eSAqLwotCQl8IGRlcGVuZHNfbGlzdCBkZXBlbmRzCi0JCXwgZGVwZW5kc19saXN0IFRfRU9MCitkZXBlbmRzX2xpc3Q6CisJICAvKiBlbXB0eSAqLworCXwgZGVwZW5kc19saXN0IGRlcGVuZHMKKwl8IGRlcGVuZHNfbGlzdCBUX0VPTAorCXwgZGVwZW5kc19saXN0IG9wdGlvbl9lcnJvcgogOwogCiBkZXBlbmRzOiBUX0RFUEVORFMgVF9PTiBleHByIFRfRU9MCkBAIC00NTAsMTMgKzQyMCwxNSBAQAogCXwgVF9XT1JEX1FVT1RFCiA7CiAKLWVuZDoJICBUX0VORE1FTlUgbmxfb3JfZW9mCXsgJCQgPSBUX0VORE1FTlU7IH0KLQl8IFRfRU5EQ0hPSUNFIG5sX29yX2VvZgl7ICQkID0gVF9FTkRDSE9JQ0U7IH0KLQl8IFRfRU5ESUYgbmxfb3JfZW9mCXsgJCQgPSBUX0VORElGOyB9CitlbmQ6CSAgVF9FTkRNRU5VIFRfRU9MCXsgJCQgPSAkMTsgfQorCXwgVF9FTkRDSE9JQ0UgVF9FT0wJeyAkJCA9ICQxOyB9CisJfCBUX0VORElGIFRfRU9MCQl7ICQkID0gJDE7IH0KIDsKIAotbmxfb3JfZW9mOgotCVRfRU9MIHwgVF9FT0Y7CitubDoKKwkgIFRfRU9MCisJfCBubCBUX0VPTAorOwogCiBpZl9leHByOiAgLyogZW1wdHkgKi8JCQl7ICQkID0gTlVMTDsgfQogCXwgVF9JRiBleHByCQkJeyAkJCA9ICQyOyB9CkBAIC00ODksMTYgKzQ2MSwxNiBAQAogCW1vZHVsZXNfc3ltID0gc3ltX2xvb2t1cCgiTU9EVUxFUyIsIDApOwogCXJvb3RtZW51LnByb21wdCA9IG1lbnVfYWRkX3Byb21wdChQX01FTlUsICJMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiIsIE5VTEwpOwogCi0JLy96Y29uZmRlYnVnID0gMTsKKyNpZiBZWURFQlVHCisJaWYgKGdldGVudigiWkNPTkZfREVCVUciKSkKKwkJemNvbmZkZWJ1ZyA9IDE7CisjZW5kaWYKIAl6Y29uZnBhcnNlKCk7CiAJaWYgKHpjb25mbmVycnMpCiAJCWV4aXQoMSk7CiAJbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOwogCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLRUQpICYmIHN5bV9jaGVja19kZXBzKHN5bSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0JCWVsc2UKLQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIRUNLX0RPTkU7CisJCXN5bV9jaGVja19kZXBzKHN5bSk7CiAgICAgICAgIH0KIAogCXN5bV9jaGFuZ2VfY291bnQgPSAxOwpAQCAtNTEzLDIwICs0ODUsMjUgQEAKIAljYXNlIFRfRU5EQ0hPSUNFOglyZXR1cm4gImVuZGNob2ljZSI7CiAJY2FzZSBUX0lGOgkJcmV0dXJuICJpZiI7CiAJY2FzZSBUX0VORElGOgkJcmV0dXJuICJlbmRpZiI7CisJY2FzZSBUX0RFUEVORFM6CQlyZXR1cm4gImRlcGVuZHMiOwogCX0KIAlyZXR1cm4gIjx0b2tlbj4iOwogfQogCi1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihpbnQgdG9rZW4sIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pCitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKQogewotCWlmICh0b2tlbiAhPSBlbmR0b2tlbikgewotCQl6Y29uZnByaW50KCJ1bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2NrIiwgemNvbmZfdG9rZW5uYW1lKHRva2VuKSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwlpZiAoaWQtPnRva2VuICE9IGVuZHRva2VuKSB7CisJCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2NrIiwKKwkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKIAkJemNvbmZuZXJycysrOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxlKSB7Ci0JCXpjb25mcHJpbnQoIiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMnIiwgemNvbmZfdG9rZW5uYW1lKHRva2VuKSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKLQkJemNvbmZwcmludCgibG9jYXRpb24gb2YgdGhlICclcyciLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLAorCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sCisJCQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOwogCQl6Y29uZm5lcnJzKys7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC01MzcsNyArNTE0LDE5IEBACiB7CiAJdmFfbGlzdCBhcDsKIAotCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl2YV9zdGFydChhcCwgZXJyKTsKKwl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOworCXZhX2VuZChhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJemNvbmZuZXJycysrOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogCXZhX3N0YXJ0KGFwLCBlcnIpOwogCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7CiAJdmFfZW5kKGFwKTsKQEAgLTU0Niw3ICs1MzUsOSBAQAogCiBzdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycikKIHsKKyNpZiBZWURFQlVHCiAJZnByaW50ZihzdGRlcnIsICIlczolZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxLCBlcnIpOworI2VuZGlmCiB9CiAKIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA0NWM0MTQ5Li5mYzc3NDQzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xOTg2LDYgKzE5ODYsOSBAQAogCiAJaW5vZGVfc2VjdXJpdHlfc2V0X3NpZChpbm9kZSwgbmV3c2lkKTsKIAorCWlmIChzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAobmFtZSkgewogCQluYW1lcCA9IGtzdHJkdXAoWEFUVFJfU0VMSU5VWF9TVUZGSVgsIEdGUF9LRVJORUwpOwogCQlpZiAoIW5hbWVwKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggZmRjMzgyMy4uMGUxMzUyYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0yNzEsNDYgKzI3MSwzOCBAQAogCS53cml0ZQkJPSBzZWxfd3JpdGVfbG9hZCwKIH07CiAKLQotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NvbnRleHQoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi0KK3N0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9jb250ZXh0KHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKLQljaGFyICpwYWdlOwotCXUzMiBzaWQ7CisJY2hhciAqY2Fub247CisJdTMyIHNpZCwgbGVuOwogCXNzaXplX3QgbGVuZ3RoOwogCiAJbGVuZ3RoID0gdGFza19oYXNfc2VjdXJpdHkoY3VycmVudCwgU0VDVVJJVFlfX0NIRUNLX0NPTlRFWFQpOwogCWlmIChsZW5ndGgpCiAJCXJldHVybiBsZW5ndGg7CiAKLQlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoKnBwb3MgIT0gMCkgewotCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXBhZ2UgPSAoY2hhciopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbGVuZ3RoID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIocGFnZSwgYnVmLCBjb3VudCkpCi0JCWdvdG8gb3V0OwotCi0JbGVuZ3RoID0gc2VjdXJpdHlfY29udGV4dF90b19zaWQocGFnZSwgY291bnQsICZzaWQpOworCWxlbmd0aCA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKGJ1Ziwgc2l6ZSwgJnNpZCk7CiAJaWYgKGxlbmd0aCA8IDApCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gbGVuZ3RoOwogCi0JbGVuZ3RoID0gY291bnQ7CisJbGVuZ3RoID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQoc2lkLCAmY2Fub24sICZsZW4pOworCWlmIChsZW5ndGggPCAwKQorCQlyZXR1cm4gbGVuZ3RoOworCisJaWYgKGxlbiA+IFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgY29udGV4dCBzaXplICgldSkgZXhjZWVkcyBwYXlsb2FkICIKKwkJICAgICAgICJtYXhcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJbGVuZ3RoID0gLUVSQU5HRTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KGJ1ZiwgY2Fub24sIGxlbik7CisJbGVuZ3RoID0gbGVuOwogb3V0OgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7CisJa2ZyZWUoY2Fub24pOwogCXJldHVybiBsZW5ndGg7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9jb250ZXh0X29wcyA9IHsKLQkud3JpdGUJCT0gc2VsX3dyaXRlX2NvbnRleHQsCi19OwotCiBzdGF0aWMgc3NpemVfdCBzZWxfcmVhZF9jaGVja3JlcXByb3Qoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTM3NSw2ICszNjcsNyBAQAogCVtTRUxfUkVMQUJFTF0gPSBzZWxfd3JpdGVfcmVsYWJlbCwKIAlbU0VMX1VTRVJdID0gc2VsX3dyaXRlX3VzZXIsCiAJW1NFTF9NRU1CRVJdID0gc2VsX3dyaXRlX21lbWJlciwKKwlbU0VMX0NPTlRFWFRdID0gc2VsX3dyaXRlX2NvbnRleHQsCiB9OwogCiBzdGF0aWMgc3NpemVfdCBzZWxpbnV4X3RyYW5zYWN0aW9uX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCkBAIC0xMjIwLDcgKzEyMTMsNyBAQAogCXN0YXRpYyBzdHJ1Y3QgdHJlZV9kZXNjciBzZWxpbnV4X2ZpbGVzW10gPSB7CiAJCVtTRUxfTE9BRF0gPSB7ImxvYWQiLCAmc2VsX2xvYWRfb3BzLCBTX0lSVVNSfFNfSVdVU1J9LAogCQlbU0VMX0VORk9SQ0VdID0geyJlbmZvcmNlIiwgJnNlbF9lbmZvcmNlX29wcywgU19JUlVHT3xTX0lXVVNSfSwKLQkJW1NFTF9DT05URVhUXSA9IHsiY29udGV4dCIsICZzZWxfY29udGV4dF9vcHMsIFNfSVJVR098U19JV1VHT30sCisJCVtTRUxfQ09OVEVYVF0gPSB7ImNvbnRleHQiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lSVUdPfFNfSVdVR099LAogCQlbU0VMX0FDQ0VTU10gPSB7ImFjY2VzcyIsICZ0cmFuc2FjdGlvbl9vcHMsIFNfSVJVR098U19JV1VHT30sCiAJCVtTRUxfQ1JFQVRFXSA9IHsiY3JlYXRlIiwgJnRyYW5zYWN0aW9uX29wcywgU19JUlVHT3xTX0lXVUdPfSwKIAkJW1NFTF9SRUxBQkVMXSA9IHsicmVsYWJlbCIsICZ0cmFuc2FjdGlvbl9vcHMsIFNfSVJVR098U19JV1VHT30sCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwppbmRleCBhYWVmYWMyLi42NDBkMGJmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKQEAgLTI2Miw4ICsyNjIsMTEgQEAKIAlzdHJ1Y3QgY2F0X2RhdHVtICpjYXRkYXR1bSwgKnJuZ2RhdHVtOwogCWludCBsLCByYyA9IC1FSU5WQUw7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKSB7CisJCWlmIChkZWZfc2lkICE9IFNFQ1NJRF9OVUxMICYmIG9sZGMpCisJCQkqc2NvbnRleHQgKz0gc3RybGVuKCpzY29udGV4dCk7CiAJCXJldHVybiAwOworCX0KIAogCS8qCiAJICogTm8gTUxTIGNvbXBvbmVudCB0byB0aGUgc2VjdXJpdHkgY29udGV4dCwgdHJ5IGFuZCBtYXAgdG8KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwppbmRleCA5YTNkYzNjLi5jNDk5M2IwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+CiAjaW5jbHVkZSA8c291bmQvdnhfY29yZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL0tjb25maWcgYi9zb3VuZC9vc3MvS2NvbmZpZwppbmRleCA5NTNlNWYzLi44OGU1MmRjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvS2NvbmZpZworKysgYi9zb3VuZC9vc3MvS2NvbmZpZwpAQCAtNCw5ICs0LDI0IEBACiAjIE1vcmUgaGFja2luZyBmb3IgbW9kdWxhcmlzYXRpb24uCiAjCiAjIFByb21wdCB1c2VyIGZvciBwcmltYXJ5IGRyaXZlcnMuCisKK2NvbmZpZyBPQlNPTEVURV9PU1NfRFJJVkVSCisJYm9vbCAiT2Jzb2xldGUgT1NTIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3Igb2Jzb2xldGUgT1NTIGRyaXZlcnMgdGhhdAorCSAgYXJlIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBpbiB0aGUgbmVhciBmdXR1cmUgc2luY2UgdGhlcmUKKwkgIGFyZSBBTFNBIGRyaXZlcnMgZm9yIHRoZSBzYW1lIGhhcmR3YXJlLgorCisJICBQbGVhc2UgY29udGFjdCBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+IGlmIHlvdSBoYWQgdG8KKwkgIHNheSBZIGhlcmUgYmVjYXVzZSB5b3VyIHNvdW5kY2FyZCBpcyBub3QgcHJvcGVybHkgc3VwcG9ydGVkCisJICBieSBBTFNBLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgU09VTkRfQlQ4NzgKIAl0cmlzdGF0ZSAiQlQ4NzggYXVkaW8gZG1hIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCS0tLWhlbHAtLS0KIAkgIEF1ZGlvIERNQSBzdXBwb3J0IGZvciBidDg3OCBiYXNlZCBncmFiYmVyIGJvYXJkcy4gIEFzIHlvdSBtaWdodCBoYXZlCiAJICBhbHJlYWR5IG5vdGljZWQsIGJ0ODc4IGlzIGxpc3RlZCB3aXRoIHR3byBmdW5jdGlvbnMgaW4gL3Byb2MvcGNpLgpAQCAtMjIsNyArMzcsNyBAQAogCiBjb25maWcgU09VTkRfQ01QQ0kKIAl0cmlzdGF0ZSAiQy1NZWRpYSBQQ0kgKENNSTgzMzgvODczOCkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHVzaW5nIHRoZSBDTUk4MzM4CiAJICBvciB0aGUgQ01JODczOCBjaGlwc2V0LiAgRGF0YSBvbiB0aGVzZSBjaGlwcyBhcmUgYXZhaWxhYmxlIGF0CkBAIC02MSw3ICs3Niw3IEBACiAKIGNvbmZpZyBTT1VORF9FTVUxMEsxCiAJdHJpc3RhdGUgIkNyZWF0aXZlIFNCTGl2ZSEgKEVNVTEwSzEpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCS0tLWhlbHAtLS0KIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1c2luZyB0aGUgRU1VMTBLMSBjaGlwc2V0LAogCSAgc3VjaCBhcyB0aGUgQ3JlYXRpdmUgU0JMaXZlISwgU0IgUENJNTEyIG9yIEVtdS1BUFMuCkBAIC05NSw3ICsxMTAsNyBAQAogCiBjb25maWcgU09VTkRfQ1M0MjgxCiAJdHJpc3RhdGUgIkNyeXN0YWwgU291bmQgQ1M0MjgxIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFBpY3R1cmUgYW5kIGZlYXR1cmUgbGlzdCBhdAogCSAgPGh0dHA6Ly93d3cucGNicm9rZXIuY29tL2NyeXN0YWw0MjgxLmh0bWw+LgpAQCAtMTEyLDcgKzEyNyw3IEBACiAKIGNvbmZpZyBTT1VORF9FUzEzNzAKIAl0cmlzdGF0ZSAiRW5zb25pcSBBdWRpb1BDSSAoRVMxMzcwKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBFbnNvbmlxCiAJICBFUzEzNzAgY2hpcHNldCwgc3VjaCBhcyBFbnNvbmlxJ3MgQXVkaW9QQ0kgKG5vbi05NykuIFRvIGZpbmQKQEAgLTEyNSw3ICsxNDAsNyBAQAogCiBjb25maWcgU09VTkRfRVMxMzcxCiAJdHJpc3RhdGUgIkNyZWF0aXZlIEVuc29uaXEgQXVkaW9QQ0kgOTcgKEVTMTM3MSkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHV0aWxpemluZyB0aGUgRW5zb25pcQogCSAgRVMxMzcxIGNoaXBzZXQsIHN1Y2ggYXMgRW5zb25pcSdzIEF1ZGlvUENJOTcuIFRvIGZpbmQgb3V0IGlmCkBAIC0xMzgsNyArMTUzLDcgQEAKIAogY29uZmlnIFNPVU5EX0VTU1NPTE8xCiAJdHJpc3RhdGUgIkVTUyBUZWNobm9sb2d5IFNvbG8xIiAKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBFU1MgVGVjaG5vbG9neQogCSAgU29sbzEgY2hpcC4gVG8gZmluZCBvdXQgaWYgeW91ciBzb3VuZCBjYXJkIHVzZXMgYQpAQCAtMTQ5LDcgKzE2NCw3IEBACiAKIGNvbmZpZyBTT1VORF9NQUVTVFJPCiAJdHJpc3RhdGUgIkVTUyBNYWVzdHJvLCBNYWVzdHJvMiwgTWFlc3RybzJFIGRyaXZlciIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIGxpbmUKIAkgIG9mIFBDSSBzb3VuZCBjaGlwcy4gIFRoZXNlIGluY2x1ZGUgdGhlIE1hZXN0cm8gMSwgTWFlc3RybyAyLCBhbmQKQEAgLTE1OCw3ICsxNzMsNyBAQAogCiBjb25maWcgU09VTkRfTUFFU1RSTzMKIAl0cmlzdGF0ZSAiRVNTIE1hZXN0cm8zL0FsbGVncm8gZHJpdmVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIEVYUEVSSU1FTlRBTCAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIHNvdW5kIHN5c3RlbSBkcml2ZW4gYnkgRVNTJ3MgTWFlc3RybyAzCiAJICBQQ0kgc291bmQgY2hpcC4KQEAgLTE3MiwxNCArMTg3LDE0IEBACiAKIGNvbmZpZyBTT1VORF9IQVJNT05ZCiAJdHJpc3RhdGUgIlBBIEhhcm1vbnkgYXVkaW8gZHJpdmVyIgotCWRlcGVuZHMgb24gR1NDX0xBU0kgJiYgU09VTkRfUFJJTUUKKwlkZXBlbmRzIG9uIEdTQ19MQVNJICYmIFNPVU5EX1BSSU1FICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEhhcm1vbnkgc291bmRjaGlwCiAJICBvbiBIUCA3MTIsIDcxNS9uZXcgYW5kIG1hbnkgb3RoZXIgR1NDIGJhc2VkIG1hY2hpbmVzLgogCiBjb25maWcgU09VTkRfU09OSUNWSUJFUwogCXRyaXN0YXRlICJTMyBTb25pY1ZpYmVzIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1dGlsaXppbmcgdGhlIFMzCiAJICBTb25pY1ZpYmVzIGNoaXBzZXQuIFRvIGZpbmQgb3V0IGlmIHlvdXIgc291bmQgY2FyZCB1c2VzIGEKQEAgLTIxOCw3ICsyMzMsNyBAQAogCiBjb25maWcgU09VTkRfQVUxMDAwCiAJdHJpc3RhdGUgIkF1MTAwMCBTb3VuZCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIChTT0NfQVUxMDAwIHx8IFNPQ19BVTExMDAgfHwgU09DX0FVMTUwMCkKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIChTT0NfQVUxMDAwIHx8IFNPQ19BVTExMDAgfHwgU09DX0FVMTUwMCkgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCiBjb25maWcgU09VTkRfQVUxNTUwX0FDOTcKIAl0cmlzdGF0ZSAiQXUxNTUwIEFDOTcgU291bmQiCkBAIC00OTIsNyArNTA3LDcgQEAKIAogY29uZmlnIFNPVU5EX1ZJQTgyQ1hYWAogCXRyaXN0YXRlICJWSUEgODJDNjg2IEF1ZGlvIENvZGVjIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgYXVkaW8gY29kZWMgZm91bmQgb24gVklBCiAJICA4MkN4eHgtYmFzZWQgY2hpcHMuIFR5cGljYWxseSB0aGVzZSBhcmUgYnVpbHQgaW50byBhIG1vdGhlcmJvYXJkLgpAQCAtNTYzLDcgKzU3OCw3IEBACiAKIGNvbmZpZyBTT1VORF9TR0FMQVhZCiAJdHJpc3RhdGUgIkF6dGVjaCBTb3VuZCBHYWxheHkgKG5vbi1QblApIGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIHRoZSBvbGRlciBub24gUGx1ZyBhbmQgUGxheSBzb3VuZCBnYWxheHkKIAkgIGNhcmRzIGZyb20gQXp0ZWNoLiBJdCBzdXBwb3J0cyB0aGUgV2F2ZXJpZGVyIFBybyAzMiAtIDNEIGFuZCB0aGUKQEAgLTU5OSw3ICs2MTQsNyBAQAogCiBjb25maWcgU09VTkRfQ1M0MjMyCiAJdHJpc3RhdGUgIkNyeXN0YWwgQ1M0MjMyIGJhc2VkIChQblApIGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBjYXJkIGJhc2VkIG9uIHRoZSBDcnlzdGFsIENTNDIzMiBjaGlwIHNldCwKIAkgIHdoaWNoIHVzZXMgaXRzIG93biBQbHVnIGFuZCBQbGF5IHByb3RvY29sLgpAQCAtNjEzLDcgKzYyOCw3IEBACiAKIGNvbmZpZyBTT1VORF9TU0NBUEUKIAl0cmlzdGF0ZSAiRW5zb25pcSBTb3VuZFNjYXBlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgQW5zd2VyIFkgaWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGJhc2VkIG9uIHRoZSBFbnNvbmlxIFNvdW5kU2NhcGUKIAkgIGNoaXBzZXQuIFN1Y2ggY2FyZHMgYXJlIGJlaW5nIG1hbnVmYWN0dXJlZCBhdCBsZWFzdCBieSBFbnNvbmlxLCBTcGVhCkBAIC02MjUsNyArNjQwLDcgQEAKIAogY29uZmlnIFNPVU5EX0dVUwogCXRyaXN0YXRlICJHcmF2aXMgVWx0cmFzb3VuZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgZm9yIGFueSB0eXBlIG9mIEdyYXZpcyBVbHRyYXNvdW5kIGNhcmQsIGluY2x1ZGluZyB0aGUgR1VTCiAJICBvciBHVVMgTUFYLiAgU2VlIGFsc28gPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvdWx0cmFzb3VuZD4gZm9yIG1vcmUKQEAgLTcyNyw3ICs3NDIsNyBAQAogCiBjb25maWcgU09VTkRfTk0yNTYKIAl0cmlzdGF0ZSAiTk0yNTZBVi9OTTI1NlpYIGF1ZGlvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IE0gaGVyZSB0byBpbmNsdWRlIGF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBOZW9NYWdpYyAyNTZBVi8yNTZaWAogCSAgY2hpcHNldHMuIFRoZXNlIGFyZSB0aGUgYXVkaW8gY2hpcHNldHMgZm91bmQgaW4gdGhlIFNvbnkKQEAgLTczOSw3ICs3NTQsNyBAQAogCiBjb25maWcgU09VTkRfTUFEMTYKIAl0cmlzdGF0ZSAiT1BUaSBNQUQxNiBhbmQvb3IgTW96YXJ0IGJhc2VkIGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCS0tLWhlbHAtLS0KIAkgIEFuc3dlciBZIGlmIHlvdXIgY2FyZCBoYXMgYSBNb3phcnQgKE9BSyBPVEktNjAxKSBvciBNQUQxNiAoT1BUaQogCSAgODJDOTI4IG9yIDgyQzkyOSBvciA4MkM5MzEpIGF1ZGlvIGludGVyZmFjZSBjaGlwLiBUaGVzZSBjaGlwcyBhcmUKQEAgLTg2MCw3ICs4NzUsNyBAQAogCiBjb25maWcgU09VTkRfQVdFMzJfU1lOVEgKIAl0cmlzdGF0ZSAiQVdFMzIgc3ludGgiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFNvdW5kIEJsYXN0ZXIgU0IzMiwgQVdFMzItUG5QLCBTQiBBV0U2NCBvcgogCSAgc2ltaWxhciBzb3VuZCBjYXJkLiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZT4sCkBAIC04NzAsNyArODg1LDcgQEAKIAogY29uZmlnIFNPVU5EX1dBVkVGUk9OVAogCXRyaXN0YXRlICJGdWxsIHN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBXYXZlRnJvbnQgKFRyb3BleiBQbHVzLCBUcm9wZXosIE1hdWkpIHN5bnRoL3NvdW5kY2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgbQorCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIG0gJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIEFuc3dlciBZIG9yIE0gaWYgeW91IGhhdmUgYSBUcm9wZXogUGx1cywgVHJvcGV6IG9yIE1hdWkgc291bmQgY2FyZAogCSAgYW5kIHJlYWQgdGhlIGZpbGVzIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVmcm9udD4gYW5kCkBAIC04NzgsNyArODkzLDcgQEAKIAogY29uZmlnIFNPVU5EX01BVUkKIAl0cmlzdGF0ZSAiTGltaXRlZCBzdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggV2F2ZSBGcm9udCAoTWF1aSwgVHJvcGV6KSBzeW50aGVzaXplcnMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFR1cnRsZSBCZWFjaCBXYXZlIEZyb250LCBNYXVpLCBvciBUcm9wZXoKIAkgIHNvdW5kIGNhcmQuCkBAIC05MDQsNyArOTE5LDcgQEAKIAogY29uZmlnIFNPVU5EX1lNMzgxMgogCXRyaXN0YXRlICJZYW1haGEgRk0gc3ludGhlc2l6ZXIgKFlNMzgxMi9PUEwtMykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKIAktLS1oZWxwLS0tCiAJICBBbnN3ZXIgWSBpZiB5b3VyIGNhcmQgaGFzIGEgRk0gY2hpcCBtYWRlIGJ5IFlhbWFoYSAoT1BMMi9PUEwzL09QTDQpLgogCSAgQW5zd2VyaW5nIFkgaXMgdXN1YWxseSBhIHNhZmUgYW5kIHJlY29tbWVuZGVkIGNob2ljZSwgaG93ZXZlciBzb21lCkBAIC05MjAsNyArOTM1LDcgQEAKIAogY29uZmlnIFNPVU5EX09QTDNTQTEKIAl0cmlzdGF0ZSAiWWFtYWhhIE9QTDMtU0ExIGF1ZGlvIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFlhbWFoYSBPUEwzLVNBMSBzb3VuZCBjaGlwLCB3aGljaCBpcwogCSAgdXN1YWxseSBidWlsdCBpbnRvIG1vdGhlcmJvYXJkcy4gUmVhZApAQCAtOTQ2LDcgKzk2MSw3IEBACiAKIGNvbmZpZyBTT1VORF9ZTUZQQ0kKIAl0cmlzdGF0ZSAiWWFtYWhhIFlNRjd4eCBQQ0kgYXVkaW8gKG5hdGl2ZSBtb2RlKSIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFlhbWFoYSBjYXJkcyBpbmNsdWRpbmcgdGhlIFlNRjcxMSwgWU1GNzE1LCBZTUY3MTgsCiAJICBZTUY3MTksIFlNRjcyNCwgV2F2ZWZvcmNlIDE5MlhHLCBhbmQgV2F2ZWZvcmNlIDE5MiBEaWdpdGFsLgpAQCAtMTA4OCwxMSArMTEwMywxMSBAQAogCiBjb25maWcgU09VTkRfQUxJNTQ1NQogCXRyaXN0YXRlICJBTGk1NDU1IGF1ZGlvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAKIGNvbmZpZyBTT1VORF9GT1JURQogCXRyaXN0YXRlICJGb3J0ZU1lZGlhIEZNODAxIGRyaXZlciIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IGRyaXZlciBzdXBwb3J0IGZvciB0aGUgRm9ydGVNZWRpYSBGTTgwMSBQQ0kKIAkgIGF1ZGlvIGNvbnRyb2xsZXIgKEFiaXQgQVUxMCwgR2VuaXVzIFNvdW5kIE1ha2VyLCBIUCBXb3Jrc3RhdGlvbgpAQCAtMTEwMCw3ICsxMTE1LDcgQEAKIAogY29uZmlnIFNPVU5EX1JNRTk2WFgKIAl0cmlzdGF0ZSAiUk1FIEhhbW1lcmZhbGwgKFJNRTk2WFgpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIEhhbW1lcmZhbGwgb3IgSGFtbWVyZmFsbCBsaWdodAogCSAgbXVsdGljaGFubmVsIGNhcmQgZnJvbSBSTUUuIElmIHlvdSB3YW50IHRvIGFjY2VzcyBhZHZhbmNlZApAQCAtMTEwOCw3ICsxMTIzLDcgQEAKIAogY29uZmlnIFNPVU5EX0FEMTk4MAogCXRyaXN0YXRlICJBRDE5ODAgZnJvbnQvYmFjayBzd2l0Y2ggcGx1Z2luIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIE9CU09MRVRFX09TU19EUklWRVIKIAogY29uZmlnIFNPVU5EX1NIX0RBQ19BVURJTwogCXRyaXN0YXRlICJTdXBlckggREFDIGF1ZGlvIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbXNuZC5jIGIvc291bmQvb3NzL21zbmQuYwppbmRleCA0ZjFmZjFiLi5hN2FkMmIwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvbXNuZC5jCisrKyBiL3NvdW5kL29zcy9tc25kLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL29zLmggYi9zb3VuZC9vc3Mvb3MuaAppbmRleCA4MGRjZTMyLi4wNDkwNTYyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvb3MuaAorKysgYi9zb3VuZC9vc3Mvb3MuaApAQCAtNSwxMCArNSw4IEBACiAjdW5kZWYgIERPX1RJTUlOR1MKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvcm1lOTZ4eC5jIGIvc291bmQvb3NzL3JtZTk2eHguYwppbmRleCA3NjA5YzY4Li4zMThkYzUxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvcm1lOTZ4eC5jCisrKyBiL3NvdW5kL29zcy9ybWU5Nnh4LmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNkZWZpbmUgUk1FVkVSU0lPTiAiMC44IgogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBjMDljZGVlLi44YTk5MTdjOSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCisrKyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwpAQCAtMiw3ICsyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuaCBiL3NvdW5kL3BwYy9wbWFjLmgKaW5kZXggYWUzYmI2Yy4uYmZmZjc4OCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuaAorKysgYi9zb3VuZC9wcGMvcG1hYy5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIF9fUE1BQ19ICiAjZGVmaW5lIF9fUE1BQ19ICiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgImF3YWNzLmgiCg==