From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Jan Zarsky To: git-commits@fedoraproject.org Subject: [tests/selinux] pr775-checkpolicy-revdeps: Add libsemanage sanity test Date: Fri, 11 Sep 2026 13:17:14 GMT Message-ID: <178913263484.1.11520251866172696849.tests-selinux-4a646221891f@fedoraproject.org> List-ID: X-Git-Repo: tests/selinux X-Git-Branch: pr775-checkpolicy-revdeps X-Git-Rev: 4a646221891f0d893e926fb79a243a3d1b74bbd8 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHRlc3RzL3NlbGludXgKICAgICAgICAgICAgQnJhbmNoIDogcHI3NzUtY2hlY2twb2xp Y3ktcmV2ZGVwcwogICAgICAgICAgICBDb21taXQgOiA0YTY0NjIyMTg5MWYwZDg5M2U5MjZmYjc5 YTI0M2EzZDFiNzRiYmQ4CiAgICAgICAgICAgIEF1dGhvciA6IEphbiBaYXJza3kgPGp6YXJza3lA cmVkaGF0LmNvbT4KICAgICAgICAgICAgRGF0ZSAgIDogMjAxOC0wNC0yN1QxNDoyMjozMyswMjow MAogICAgICAgICAgICBTdGF0cyAgOiArMTA0NjAvLTAgaW4gMzIgZmlsZShzKQogICAgICAgICAg ICBVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy90ZXN0cy9zZWxpbnV4L2Mv NGE2NDYyMjE4OTFmMGQ4OTNlOTI2ZmI3OWEyNDNhM2QxYjc0YmJkOD9icmFuY2g9cHI3NzUtY2hl Y2twb2xpY3ktcmV2ZGVwcwoKICAgICAgICAgICAgTG9nOgogICAgICAgICAgICBBZGQgbGlic2Vt YW5hZ2Ugc2FuaXR5IHRlc3QKClRoaXMgdGVzdCBzdWl0ZSB3cml0dGVuIGluIENVbml0IGFpbXMg Zm9yIDEwMCAlIGZ1bmN0aW9uIGNvdmVyYWdlIG9mCmxpYnNlbWFuYWdlIEFQSSBhbmQgcHJvdmlk ZXMgYmFzaWMgc2FuaXR5IHRlc3RzLiBBbGwgY29tbW9uIHVzZXMgb2YKbGlic2VtYW5hZ2Ugc2hv dWxkIGJlIGNvdmVyZWQuCgotLS0KZGlmZiAtLWdpdCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0 cy9NYWtlZmlsZSBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VmNmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGli c2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL01ha2VmaWxlCkBAIC0wLDAgKzEsNjMgQEAKKyMgfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4KKyMKKyMgICBNYWtlZmlsZSBvZiAvQ29yZU9TL2xpYnNlbWFuYWdlL1Nhbml0eS9zYW5p dHktdGVzdHMKKyMgICBEZXNjcmlwdGlvbjogVGVzdCBsaWJzZW1hbmFnZSBmdW5jdGlvbnMKKyMg ICBBdXRob3I6IEphbiBaYXJza3kgPGp6YXJza3lAcmVkaGF0LmNvbT4KKyMKKyMgfn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn4KKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdCwgSW5jLgorIworIyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcworIyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAyIG9mCisjICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorIyAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyMgICB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjICAgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSBodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorIworIyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitleHBvcnQgVEVT VD0vQ29yZU9TL2xpYnNlbWFuYWdlL1Nhbml0eS9zYW5pdHktdGVzdHMKK2V4cG9ydCBURVNUVkVS U0lPTj0xLjAKKworQlVJTFRfRklMRVM9CisKK0ZJTEVTPSQoTUVUQURBVEEpIHJ1bnRlc3Quc2gg TWFrZWZpbGUgUFVSUE9TRSB0ZXN0cy8KKworLlBIT05ZOiBhbGwgaW5zdGFsbCBkb3dubG9hZCBj bGVhbgorCitydW46ICQoRklMRVMpIGJ1aWxkCisJLi9ydW50ZXN0LnNoCisKK2J1aWxkOiAkKEJV SUxUX0ZJTEVTKQorCXRlc3QgLXggcnVudGVzdC5zaCB8fCBjaG1vZCBhK3ggcnVudGVzdC5zaAor CitjbGVhbjoKKwlybSAtZiAqfiAkKEJVSUxUX0ZJTEVTKQorCisKK2luY2x1ZGUgL3Vzci9zaGFy ZS9yaHRzL2xpYi9yaHRzLW1ha2UuaW5jbHVkZQorCiskKE1FVEFEQVRBKTogTWFrZWZpbGUKKwlA ZWNobyAiT3duZXI6ICAgICAgICAgICBKYW4gWmFyc2t5IDxqemFyc2t5QHJlZGhhdC5jb20+IiA+ ICQoTUVUQURBVEEpCisJQGVjaG8gIk5hbWU6ICAgICAgICAgICAgJChURVNUKSIgPj4gJChNRVRB REFUQSkKKwlAZWNobyAiVGVzdFZlcnNpb246ICAgICAkKFRFU1RWRVJTSU9OKSIgPj4gJChNRVRB REFUQSkKKwlAZWNobyAiUGF0aDogICAgICAgICAgICAkKFRFU1RfRElSKSIgPj4gJChNRVRBREFU QSkKKwlAZWNobyAiRGVzY3JpcHRpb246ICAgICBUZXN0IGxpYnNlbWFuYWdlIGZ1bmN0aW9ucyIg Pj4gJChNRVRBREFUQSkKKwlAZWNobyAiVHlwZTogICAgICAgICAgICBTYW5pdHkiID4+ICQoTUVU QURBVEEpCisJQGVjaG8gIlRlc3RUaW1lOiAgICAgICAgNjBtIiA+PiAkKE1FVEFEQVRBKQorCUBl Y2hvICJSdW5Gb3I6ICAgICAgICAgIGxpYnNlbWFuYWdlIiA+PiAkKE1FVEFEQVRBKQorCUBlY2hv ICJSZXF1aXJlczogICAgICAgIGxpYnNlbWFuYWdlIGxpYnNlbWFuYWdlLWRldmVsIGdjYyBDVW5p dCBDVW5pdC1kZXZlbCBjaGVja3BvbGljeSBwb2xpY3ljb3JldXRpbHMtcHl0aG9uLXV0aWxzIiA+ PiAkKE1FVEFEQVRBKQorCUBlY2hvICJQcmlvcml0eTogICAgICAgIE5vcm1hbCIgPj4gJChNRVRB REFUQSkKKwlAZWNobyAiTGljZW5zZTogICAgICAgICBHUEx2MisiID4+ICQoTUVUQURBVEEpCisJ QGVjaG8gIkNvbmZpZGVudGlhbDogICAgbm8iID4+ICQoTUVUQURBVEEpCisJQGVjaG8gIkRlc3Ry dWN0aXZlOiAgICAgbm8iID4+ICQoTUVUQURBVEEpCisJQGVjaG8gIlJlbGVhc2VzOiAgICAgICAg LVJIRUw0IC1SSEVMQ2xpZW50NSAtUkhFTFNlcnZlcjUiID4+ICQoTUVUQURBVEEpCisKKwlyaHRz LWxpbnQgJChNRVRBREFUQSkKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMv UFVSUE9TRSBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy9QVVJQT1NFCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0M2IxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzZW1h bmFnZS9zYW5pdHktdGVzdHMvUFVSUE9TRQpAQCAtMCwwICsxLDMgQEAKK1BVUlBPU0Ugb2YgL0Nv cmVPUy9saWJzZW1hbmFnZS9TYW5pdHkvc2FuaXR5LXRlc3RzCitEZXNjcmlwdGlvbjogVGVzdCBs aWJzZW1hbmFnZSBmdW5jdGlvbnMKK0F1dGhvcjogSmFuIFphcnNreSA8anphcnNreUByZWRoYXQu Y29tPgoKZGlmZiAtLWdpdCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy9ydW50ZXN0LnNoIGIv bGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3J1bnRlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uMGIxNzg1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnNlbWFuYWdlL3Nh bml0eS10ZXN0cy9ydW50ZXN0LnNoCkBAIC0wLDAgKzEsNzEgQEAKKyMhL2Jpbi9iYXNoCisjIHZp bTogZGljdCs9L3Vzci9zaGFyZS9iZWFrZXJsaWIvZGljdGlvbmFyeS52aW0gY3B0PS4sdyxiLHUs dCxpLGsKKyMgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMKKyMgICBydW50ZXN0LnNoIG9mIC9Db3JlT1MvbGlic2Vt YW5hZ2UvU2FuaXR5L3Nhbml0eS10ZXN0cworIyAgIERlc2NyaXB0aW9uOiBUZXN0IGxpYnNlbWFu YWdlIGZ1bmN0aW9ucworIyAgIEF1dGhvcjogSmFuIFphcnNreSA8anphcnNreUByZWRoYXQuY29t PgorIworIyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyAgIENvcHlyaWdodCAoYykgMjAxNyBSZWQgSGF0LCBJ bmMuCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorIyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgICB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisjICAgdXNlZnVs LCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorIyAg IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KyMgICBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u IElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisjCisjIH5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+CisKKyMgSW5jbHVkZSBCZWFrZXIgZW52aXJvbm1lbnQKKy4gL3Vzci9iaW4vcmh0cy1lbnZp cm9ubWVudC5zaCB8fCBleGl0IDEKKy4gL3Vzci9zaGFyZS9iZWFrZXJsaWIvYmVha2VybGliLnNo IHx8IGV4aXQgMQorCitQQUNLQUdFPSJsaWJzZW1hbmFnZSIKKworcmxKb3VybmFsU3RhcnQKKyAg ICBybFBoYXNlU3RhcnRTZXR1cAorICAgICAgICBybFJ1biAicmxJbXBvcnQgLS1hbGwiIHx8IHJs RGllCisKKyAgICAgICAgcmxSdW4gInJsQ2hlY2tNYWtlZmlsZVJlcXVpcmVzIiB8fCBybERpZQor CisgICAgICAgIFZFUlM9JChycG0gLXEgJFBBQ0tBR0UgfCBjdXQgLWYgMiAtZCAnLScpCisgICAg ICAgIFZFUlNfTUFKT1I9JChlY2hvICRWRVJTIHwgY3V0IC1mIDEgLWQgJy4nKQorICAgICAgICBW RVJTX01JTk9SPSQoZWNobyAkVkVSUyB8IGN1dCAtZiAyIC1kICcuJykKKyAgICAgICAgVkVSU19S RUxFQVNFPSQocnBtIC1xICRQQUNLQUdFIHwgY3V0IC1mIDMgLWQgJy0nIHwgY3V0IC1mIDEgLWQg Jy4nKQorCisgICAgICAgIHJsUnVuICJjZCB0ZXN0cyIKKworICAgICAgICBybFJ1biAibWFrZSBW RVJTX01BSk9SPSRWRVJTX01BSk9SIFZFUlNfTUlOT1I9JFZFUlNfTUlOT1IgVkVSU19SRUxFQVNF PSRWRVJTX1JFTEVBU0UiCisKKyAgICAgICAgcmxSdW4gIi4vbGlic2VtYW5hZ2UtdGVzdHMgbGlz dCA+IGxpc3QiCisgICAgcmxQaGFzZUVuZAorCisgICAgZm9yIHN1aXRlIGluICQoY2F0IGxpc3Qp OyBkbworICAgICAgICBybFBoYXNlU3RhcnRUZXN0ICIkc3VpdGUiCisgICAgICAgICAgICBybFJ1 biAiLi9saWJzZW1hbmFnZS10ZXN0cyBzdWl0ZSAkc3VpdGUgPnJhd291dHB1dCAyPmVycm91dHB1 dCIgMCAiUnVuIHRlc3Qgc3VpdGUgJHN1aXRlIgorCisgICAgICAgICAgICBybFJ1biAiY2F0IHJh d291dHB1dCB8IHNlZCAxLDVkIiAwICJzdGRvdXQiCisgICAgICAgICAgICBybFJ1biAiY2F0IGVy cm91dHB1dCIgMCAic3RkZXJyIgorCisgICAgICAgICAgICBybFJ1biAiZ3JlcCAtdiAnUnVuIFN1 bW1hcnk6JyByYXdvdXRwdXQgPiBvdXRwdXQiCisKKyAgICAgICAgICAgIHJsUnVuICIhIGdyZXAg LWkgZmFpbGVkIG91dHB1dCIgMCAiRmFpbHMiCisgICAgICAgICAgICBybFJ1biAiISBncmVwIC1p IGVycm9yIG91dHB1dCIgMCAiRXJyb3JzIgorICAgICAgICBybFBoYXNlRW5kCisgICAgZG9uZTsK KworICAgIHJsUGhhc2VTdGFydENsZWFudXAKKyAgICAgICAgcmxSdW4gIm1ha2UgY2xlYW4iCisg ICAgICAgIHJsUnVuICJybSAtZiBvdXRwdXQgcmF3b3V0cHV0IGVycm91dHB1dCBsaXN0IgorICAg IHJsUGhhc2VFbmQKK3JsSm91cm5hbFByaW50VGV4dAorcmxKb3VybmFsRW5kCgpkaWZmIC0tZ2l0 IGEvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzLy5naXRpZ25vcmUgYi9saWJzZW1hbmFn ZS9zYW5pdHktdGVzdHMvdGVzdHMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5mMDcxMTFkCi0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2FuaXR5 LXRlc3RzL3Rlc3RzLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorbGlic2VtYW5hZ2UtdGVzdHMK CmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvTWFrZWZpbGUgYi9s aWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZDc3YTA5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnNlbWFuYWdl L3Nhbml0eS10ZXN0cy90ZXN0cy9NYWtlZmlsZQpAQCAtMCwwICsxLDM1IEBACitTT1VSQ0VTID0g JCh3aWxkY2FyZCAqLmMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitFWEVDVVRBQkxFID0gbGli c2VtYW5hZ2UtdGVzdHMKK0NGTEFHUyArPSAtZyAtV2FsbCAtV2Vycm9yIC1zdGQ9Z251OTkKK0xE RkxBR1MgKz0gLWxjdW5pdCAtbHNlbWFuYWdlIC1sc2VsaW51eAorT0JKRUNUUyA9ICQoU09VUkNF UzouYz0ubykgCisKK2lmZGVmIFZFUlNfTUFKT1IKK0RFRklORVMgKz0gLUQgVkVSU19NQUpPUj0k KFZFUlNfTUFKT1IpCitlbmRpZgorCitpZmRlZiBWRVJTX01JTk9SCitERUZJTkVTICs9IC1EIFZF UlNfTUlOT1I9JChWRVJTX01JTk9SKQorZW5kaWYKKworaWZkZWYgVkVSU19SRUxFQVNFCitERUZJ TkVTICs9IC1EIFZFUlNfUkVMRUFTRT0kKFZFUlNfUkVMRUFTRSkKK2VuZGlmCisKK2FsbDogJChF WEVDVVRBQkxFKSAKKworJChFWEVDVVRBQkxFKTogJChPQkpFQ1RTKQorCSQoQ0MpICQoT0JKRUNU UykgJChMSUJTKSAkKExERkxBR1MpIC1vICRACisKKyUubzogJS5jCisJJChDQykgJChDRkxBR1Mp ICQoREVGSU5FUykgLWMgJCouYyAtbyAkKi5vCisKK2NsZWFuIGRpc3RjbGVhbjogCisJcm0gLXJm ICQoT0JKRUNUUykgJChFWEVDVVRBQkxFKQorCit0ZXN0OiBhbGwgCisJLi8kKEVYRUNVVEFCTEUp CisKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvZnVuY3Rpb25z LmMgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvZnVuY3Rpb25zLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2MjA2MQotLS0gL2Rldi9udWxsCisrKyBiL2xp YnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy9mdW5jdGlvbnMuYwpAQCAtMCwwICsxLDc3MSBA QAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk ZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPHNlbWFuYWdlL2hhbmRsZS5oPgorI2lu Y2x1ZGUgPHNlbWFuYWdlL3NlbWFuYWdlLmg+CisKKyNpbmNsdWRlIDxDVW5pdC9CYXNpYy5oPgor CisjaW5jbHVkZSAiZnVuY3Rpb25zLmgiCisKK2ludCByZXN1bHQ7CisKK3NlbWFuYWdlX2hhbmRs ZV90ICpzaCA9IE5VTEw7CisKK3ZvaWQgc3RkZXJyX2NhbGxiYWNrKHZvaWQgKnZhcmcsIHNlbWFu YWdlX2hhbmRsZV90ICpzaCwgY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKyAgICB2YV9saXN0IGFy Z3M7CisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKworICAgIHZmcHJpbnRmKHN0ZGVyciwgZm10 LCBhcmdzKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworICAgIHZhX2VuZChhcmdz KTsKK30KKwordm9pZCBoZWxwZXJfaGFuZGxlX2NyZWF0ZSh2b2lkKSB7CisgICAgc2ggPSBzZW1h bmFnZV9oYW5kbGVfY3JlYXRlKCk7CisgICAgCisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChz aCk7CisKKyAgICBzZW1hbmFnZV9tc2dfc2V0X2NhbGxiYWNrKHNoLCBzdGRlcnJfY2FsbGJhY2ss IE5VTEwpOworfQorCit2b2lkIGhlbHBlcl9oYW5kbGVfZGVzdHJveSh2b2lkKSB7CisgICAgc2Vt YW5hZ2VfaGFuZGxlX2Rlc3Ryb3koc2gpOworfQorCit2b2lkIGhlbHBlcl9jb25uZWN0KHZvaWQp IHsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29ubmVjdChzaCkgPj0gMCk7Cit9CisKK3ZvaWQg aGVscGVyX2Rpc2Nvbm5lY3Qodm9pZCkgeworICAgIENVX0FTU0VSVChzZW1hbmFnZV9kaXNjb25u ZWN0KHNoKSA+PSAwKTsKK30KKwordm9pZCBoZWxwZXJfYmVnaW5fdHJhbnNhY3Rpb24odm9pZCkg eworICAgIENVX0FTU0VSVChzZW1hbmFnZV9iZWdpbl90cmFuc2FjdGlvbihzaCkgPj0gMCk7Cit9 CisKK3ZvaWQgaGVscGVyX2NvbW1pdCh2b2lkKSB7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Nv bW1pdChzaCkgPj0gMCk7Cit9CisKK3ZvaWQgc2V0dXBfaGFuZGxlKGxldmVsX3QgbGV2ZWwpIHsK KyAgICBpZiAobGV2ZWwgPj0gU0hfTlVMTCkKKyAgICAgICAgc2ggPSBOVUxMOworCisgICAgaWYg KGxldmVsID49IFNIX0hBTkRMRSkKKyAgICAgICAgaGVscGVyX2hhbmRsZV9jcmVhdGUoKTsKKwor ICAgIGlmIChsZXZlbCA+PSBTSF9DT05ORUNUKQorICAgICAgICBoZWxwZXJfY29ubmVjdCgpOwor CisgICAgaWYgKGxldmVsID49IFNIX1RSQU5TKQorICAgICAgICBoZWxwZXJfYmVnaW5fdHJhbnNh Y3Rpb24oKTsKK30KKwordm9pZCBjbGVhbnVwX2hhbmRsZShsZXZlbF90IGxldmVsKSB7CisgICAg aWYgKGxldmVsID49IFNIX1RSQU5TKQorICAgICAgICBoZWxwZXJfY29tbWl0KCk7CisKKyAgICBp ZiAobGV2ZWwgPj0gU0hfQ09OTkVDVCkKKyAgICAgICAgaGVscGVyX2Rpc2Nvbm5lY3QoKTsKKwor ICAgIGlmIChsZXZlbCA+PSBTSF9IQU5ETEUpCisgICAgICAgIGhlbHBlcl9oYW5kbGVfZGVzdHJv eSgpOworCisgICAgaWYgKGxldmVsID49IFNIX05VTEwpCisgICAgICAgIHNoID0gTlVMTDsKK30K Kwordm9pZCBzZXR1cF9oYW5kbGVfaW52YWxpZF9zdG9yZShsZXZlbF90IGxldmVsKSB7CisgICAg Q1VfQVNTRVJUKGxldmVsID49IFNIX0hBTkRMRSk7CisKKyAgICBoZWxwZXJfaGFuZGxlX2NyZWF0 ZSgpOworICAgIAorICAgIHNlbWFuYWdlX3NlbGVjdF9zdG9yZShzaCwgIiIsIFNFTUFOQUdFX0NP Tl9JTlZBTElEKTsKKworICAgIGlmIChsZXZlbCA+PSBTSF9DT05ORUNUKQorICAgICAgICBoZWxw ZXJfY29ubmVjdCgpOworCisgICAgaWYgKGxldmVsID49IFNIX1RSQU5TKQorICAgICAgICBoZWxw ZXJfYmVnaW5fdHJhbnNhY3Rpb24oKTsKK30KKworaW50IGNvbnRleHRfY29tcGFyZShzZW1hbmFn ZV9jb250ZXh0X3QgKmNvbiwgY29uc3QgY2hhciAqc3RyKSB7CisgICAgY2hhciAqY29uX3N0ciA9 IE5VTEw7CisgICAgaW50IHJjOworCisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChj b24pOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfdG9fc3RyaW5nKHNoLCBjb24s ICZjb25fc3RyKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGNvbl9z dHIpOworCisgICAgcmMgPSBzdHJjbXAoY29uX3N0ciwgc3RyKTsKKworICAgIGZyZWUoY29uX3N0 cik7CisgICAgcmV0dXJuIHJjOworfQorCitzZW1hbmFnZV9zZXVzZXJfdCAqZ2V0X3NldXNlcl9u dGgoaW50IGluZGV4KSB7CisgICAgaW50IHJlc3VsdDsKKyAgICBzZW1hbmFnZV9zZXVzZXJfdCAq KnJlY29yZHM7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX3QgKnNldXNlcjsKKyAgICB1bnNpZ25lZCBp bnQgY291bnQ7CisKKyAgICBpZiAoaW5kZXggPT0gSV9OVUxMKQorICAgICAgICByZXR1cm4gTlVM TDsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX3NldXNlcl9saXN0KHNoLCAmcmVjb3JkcywgJmNv dW50KTsKKyAgICAKKyAgICBDVV9BU1NFUlRfRkFUQUwocmVzdWx0ID49IDApOworICAgIENVX0FT U0VSVF9GQVRBTChjb3VudCA+PSBpbmRleCArIDEpOworCisgICAgc2V1c2VyID0gcmVjb3Jkc1tp bmRleF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK KyAgICAgICAgaWYgKGkgIT0gaW5kZXgpCisgICAgICAgICAgICBzZW1hbmFnZV9zZXVzZXJfZnJl ZShyZWNvcmRzW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V1c2VyOworfQorCitzZW1hbmFn ZV9zZXVzZXJfdCAqZ2V0X3NldXNlcl9uZXcoKSB7CisgICAgaW50IHJlc3VsdDsKKyAgICBzZW1h bmFnZV9zZXVzZXJfdCAqc2V1c2VyOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2Vfc2V1c2VyX2Ny ZWF0ZShzaCwgJnNldXNlcik7CisgICAgCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHJlc3VsdCA+PSAw KTsKKworICAgIHJldHVybiBzZXVzZXI7Cit9CisKK3NlbWFuYWdlX3NldXNlcl9rZXlfdCAqZ2V0 X3NldXNlcl9rZXlfbnRoKGludCBpbmRleCkgeworICAgIHNlbWFuYWdlX3NldXNlcl9rZXlfdCAq a2V5OworICAgIHNlbWFuYWdlX3NldXNlcl90ICpzZXVzZXI7CisgICAgaW50IHJlc3VsdDsKKwor ICAgIGlmIChpbmRleCA9PSBJX05VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2V1 c2VyID0gZ2V0X3NldXNlcl9udGgoaW5kZXgpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2Vfc2V1 c2VyX2tleV9leHRyYWN0KHNoLCBzZXVzZXIsICZrZXkpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFM KHJlc3VsdCA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtleSk7CisK KyAgICByZXR1cm4ga2V5OworfQorCitzZW1hbmFnZV9zZXVzZXJfa2V5X3QgKmdldF9zZXVzZXJf a2V5X2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cikgeworICAgIHNlbWFuYWdlX3NldXNlcl9rZXlf dCAqa2V5OworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAg IHJldHVybiBOVUxMOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2Vfc2V1c2VyX2tleV9jcmVhdGUo c2gsIHN0ciwgJmtleSk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwocmVzdWx0ID49IDApOworICAg IENVX0FTU0VSVF9QVFJfTk9UX05VTExfRkFUQUwoa2V5KTsKKworICAgIHJldHVybiBrZXk7Cit9 CisKK3ZvaWQgYWRkX2xvY2FsX3NldXNlcihpbnQgc2V1c2VyX2luZGV4KSB7CisgICAgc2VtYW5h Z2Vfc2V1c2VyX3QgKnNldXNlcjsKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X3QgKmtleSA9IE5V TEw7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2V1c2VyX2luZGV4ICE9IElfTlVMTCk7CisKKyAg ICBzZXVzZXIgPSBnZXRfc2V1c2VyX250aChzZXVzZXJfaW5kZXgpOworCisgICAgQ1VfQVNTRVJU X0ZBVEFMKHNlbWFuYWdlX3NldXNlcl9rZXlfZXh0cmFjdChzaCwgc2V1c2VyLCAma2V5KSA+PSAw KTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtleSk7CisKKyAgICBDVV9BU1NF UlRfRkFUQUwoc2VtYW5hZ2Vfc2V1c2VyX21vZGlmeV9sb2NhbChzaCwga2V5LCBzZXVzZXIpID49 IDApOworCisgICAgc2VtYW5hZ2Vfc2V1c2VyX2tleV9mcmVlKGtleSk7CisgICAgc2VtYW5hZ2Vf c2V1c2VyX2ZyZWUoc2V1c2VyKTsKK30KKwordm9pZCBkZWxldGVfbG9jYWxfc2V1c2VyKGludCBz ZXVzZXJfaW5kZXgpIHsKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X3QgKmtleSA9IE5VTEw7CisK KyAgICBDVV9BU1NFUlRfRkFUQUwoc2V1c2VyX2luZGV4ICE9IElfTlVMTCk7CisKKyAgICBrZXkg PSBnZXRfc2V1c2VyX2tleV9udGgoc2V1c2VyX2luZGV4KTsKKworICAgIENVX0FTU0VSVF9GQVRB TChzZW1hbmFnZV9zZXVzZXJfZGVsX2xvY2FsKHNoLCBrZXkpID49IDApOworCisgICAgc2VtYW5h Z2Vfc2V1c2VyX2tleV9mcmVlKGtleSk7Cit9CisKK3NlbWFuYWdlX2Jvb2xfdCAqZ2V0X2Jvb2xf bnRoKGludCBpbmRleCkgeworICAgIGludCByZXN1bHQ7CisgICAgc2VtYW5hZ2VfYm9vbF90ICoq cmVjb3JkczsKKyAgICBzZW1hbmFnZV9ib29sX3QgKmJvb2xlYW47CisgICAgdW5zaWduZWQgaW50 IGNvdW50OworCisgICAgaWYgKGluZGV4ID09IElfTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9ib29sX2xpc3Qoc2gsICZyZWNvcmRzLCAmY291bnQp OworICAgIAorICAgIENVX0FTU0VSVF9GQVRBTChyZXN1bHQgPj0gMCk7CisgICAgQ1VfQVNTRVJU X0ZBVEFMKGNvdW50ID49IGluZGV4ICsgMSk7CisKKyAgICBib29sZWFuID0gcmVjb3Jkc1tpbmRl eF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAg ICAgICAgaWYgKGkgIT0gaW5kZXgpCisgICAgICAgICAgICBzZW1hbmFnZV9ib29sX2ZyZWUocmVj b3Jkc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIGJvb2xlYW47Cit9CisKK3NlbWFuYWdlX2Jv b2xfdCAqZ2V0X2Jvb2xfbmV3KCkgeworICAgIGludCByZXN1bHQ7CisgICAgc2VtYW5hZ2VfYm9v bF90ICpib29sZWFuOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfYm9vbF9jcmVhdGUoc2gsICZi b29sZWFuKTsKKyAgICAKKyAgICBDVV9BU1NFUlRfRkFUQUwocmVzdWx0ID49IDApOworCisgICAg cmV0dXJuIGJvb2xlYW47Cit9CisKK3NlbWFuYWdlX2Jvb2xfa2V5X3QgKmdldF9ib29sX2tleV9u dGgoaW50IGluZGV4KSB7CisgICAgc2VtYW5hZ2VfYm9vbF9rZXlfdCAqa2V5OworICAgIHNlbWFu YWdlX2Jvb2xfdCAqYm9vbGVhbjsKKyAgICBpbnQgcmVzdWx0OworCisgICAgaWYgKGluZGV4ID09 IElfTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBib29sZWFuID0gZ2V0X2Jvb2xf bnRoKGluZGV4KTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX2Jvb2xfa2V5X2V4dHJhY3Qoc2gs IGJvb2xlYW4sICZrZXkpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHJlc3VsdCA+PSAwKTsKKyAg ICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtleSk7CisKKyAgICByZXR1cm4ga2V5Owor fQorCitzZW1hbmFnZV9ib29sX2tleV90ICpnZXRfYm9vbF9rZXlfZnJvbV9zdHIoY29uc3QgY2hh ciAqc3RyKSB7CisgICAgc2VtYW5hZ2VfYm9vbF9rZXlfdCAqa2V5OworICAgIGludCByZXN1bHQ7 CisKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmVz dWx0ID0gc2VtYW5hZ2VfYm9vbF9rZXlfY3JlYXRlKHNoLCBzdHIsICZrZXkpOworCisgICAgQ1Vf QVNTRVJUX0ZBVEFMKHJlc3VsdCA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZB VEFMKGtleSk7CisKKyAgICByZXR1cm4ga2V5OworfQorCit2b2lkIGFkZF9sb2NhbF9ib29sKGlu dCBib29sX2luZGV4KSB7CisgICAgc2VtYW5hZ2VfYm9vbF90ICpib29sZWFuOworICAgIHNlbWFu YWdlX2Jvb2xfa2V5X3QgKmtleSA9IE5VTEw7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoYm9vbF9p bmRleCAhPSBJX05VTEwpOworCisgICAgYm9vbGVhbiA9IGdldF9ib29sX250aChib29sX2luZGV4 KTsKKworICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9ib29sX2tleV9leHRyYWN0KHNoLCBi b29sZWFuLCAma2V5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtl eSk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfYm9vbF9tb2RpZnlfbG9jYWwoc2gs IGtleSwgYm9vbGVhbikgPj0gMCk7Cit9CisKK3ZvaWQgZGVsZXRlX2xvY2FsX2Jvb2woaW50IGJv b2xfaW5kZXgpIHsKKyAgICBzZW1hbmFnZV9ib29sX2tleV90ICprZXkgPSBOVUxMOworCisgICAg Q1VfQVNTRVJUX0ZBVEFMKGJvb2xfaW5kZXggIT0gSV9OVUxMKTsKKworICAgIGtleSA9IGdldF9i b29sX2tleV9udGgoYm9vbF9pbmRleCk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2Vf Ym9vbF9kZWxfbG9jYWwoc2gsIGtleSkgPj0gMCk7Cit9CisKK3NlbWFuYWdlX2Zjb250ZXh0X3Qg KmdldF9mY29udGV4dF9uZXcoKSB7CisgICAgaW50IHJlc3VsdDsKKyAgICBzZW1hbmFnZV9mY29u dGV4dF90ICpmY29udGV4dDsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX2Zjb250ZXh0X2NyZWF0 ZShzaCwgJmZjb250ZXh0KTsKKyAgICAKKyAgICBDVV9BU1NFUlRfRkFUQUwocmVzdWx0ID49IDAp OworCisgICAgcmV0dXJuIGZjb250ZXh0OworfQorCitzZW1hbmFnZV9mY29udGV4dF90ICpnZXRf ZmNvbnRleHRfbnRoKGludCBpbmRleCkgeworICAgIGludCByZXN1bHQ7CisgICAgc2VtYW5hZ2Vf ZmNvbnRleHRfdCAqKnJlY29yZHM7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfdCAqZmNvbnRleHQ7 CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgaWYgKGluZGV4ID09IElfTlVMTCkKKyAg ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9mY29udGV4dF9saXN0 KHNoLCAmcmVjb3JkcywgJmNvdW50KTsKKyAgICAKKyAgICBDVV9BU1NFUlRfRkFUQUwocmVzdWx0 ID49IDApOworICAgIENVX0FTU0VSVF9GQVRBTChjb3VudCA+PSBpbmRleCArIDEpOworCisgICAg ZmNvbnRleHQgPSByZWNvcmRzW2luZGV4XTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw OyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBpZiAoaSAhPSBpbmRleCkKKyAgICAgICAgICAg IHNlbWFuYWdlX2Zjb250ZXh0X2ZyZWUocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJu IGZjb250ZXh0OworfQorCitzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqZ2V0X2Zjb250ZXh0X2tl eV9udGgoaW50IGluZGV4KSB7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfa2V5X3QgKmtleTsKKyAg ICBzZW1hbmFnZV9mY29udGV4dF90ICpmY29udGV4dDsKKyAgICBpbnQgcmVzdWx0OworCisgICAg aWYgKGluZGV4ID09IElfTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmY29udGV4 dCA9IGdldF9mY29udGV4dF9udGgoaW5kZXgpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfZmNv bnRleHRfa2V5X2V4dHJhY3Qoc2gsIGZjb250ZXh0LCAma2V5KTsKKworICAgIENVX0FTU0VSVF9G QVRBTChyZXN1bHQgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChrZXkp OworCisgICAgcmV0dXJuIGtleTsKK30KKworc2VtYW5hZ2VfZmNvbnRleHRfa2V5X3QgKmdldF9m Y29udGV4dF9rZXlfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyLCBpbnQgdHlwZSkgeworICAgIHNl bWFuYWdlX2Zjb250ZXh0X2tleV90ICprZXk7CisgICAgaW50IHJlc3VsdDsKKworICAgIGlmIChz dHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSBzZW1hbmFn ZV9mY29udGV4dF9rZXlfY3JlYXRlKHNoLCBzdHIsIHR5cGUsICZrZXkpOworCisgICAgQ1VfQVNT RVJUX0ZBVEFMKHJlc3VsdCA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFM KGtleSk7CisKKyAgICByZXR1cm4ga2V5OworfQorCit2b2lkIGFkZF9sb2NhbF9mY29udGV4dChp bnQgZmNvbnRleHRfaW5kZXgpIHsKKyAgICBzZW1hbmFnZV9mY29udGV4dF90ICpmY29udGV4dDsK KyAgICBzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqa2V5ID0gTlVMTDsKKworICAgIENVX0FTU0VS VF9GQVRBTChmY29udGV4dF9pbmRleCAhPSBJX05VTEwpOworCisgICAgZmNvbnRleHQgPSBnZXRf ZmNvbnRleHRfbnRoKGZjb250ZXh0X2luZGV4KTsKKworICAgIENVX0FTU0VSVF9GQVRBTChzZW1h bmFnZV9mY29udGV4dF9rZXlfZXh0cmFjdChzaCwgZmNvbnRleHQsICZrZXkpID49IDApOworICAg IENVX0FTU0VSVF9QVFJfTk9UX05VTExfRkFUQUwoa2V5KTsKKworICAgIENVX0FTU0VSVF9GQVRB TChzZW1hbmFnZV9mY29udGV4dF9tb2RpZnlfbG9jYWwoc2gsIGtleSwgZmNvbnRleHQpID49IDAp OworfQorCit2b2lkIGRlbGV0ZV9sb2NhbF9mY29udGV4dChpbnQgZmNvbnRleHRfaW5kZXgpIHsK KyAgICBzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqa2V5ID0gTlVMTDsKKworICAgIENVX0FTU0VS VF9GQVRBTChmY29udGV4dF9pbmRleCAhPSBJX05VTEwpOworCisgICAga2V5ID0gZ2V0X2Zjb250 ZXh0X2tleV9udGgoZmNvbnRleHRfaW5kZXgpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFu YWdlX2Zjb250ZXh0X2RlbF9sb2NhbChzaCwga2V5KSA+PSAwKTsKK30KKworI2lmIFZFUlNfQ0hF Q0soMiwgNSkKKworc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqZ2V0X21vZHVsZV9pbmZvX250aChp bnQgaW5kZXgsIHNlbWFuYWdlX21vZHVsZV9pbmZvX3QgKiptb2RpbmZvX2ZyZWUpIHsKKyAgICBp bnQgcmVzdWx0OworICAgIHNlbWFuYWdlX21vZHVsZV9pbmZvX3QgKnJlY29yZHMgPSBOVUxMOwor ICAgIHNlbWFuYWdlX21vZHVsZV9pbmZvX3QgKm1vZGluZm87CisgICAgaW50IGNvdW50OworCisg ICAgaWYgKGluZGV4ID09IElfTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1 bHQgPSBzZW1hbmFnZV9tb2R1bGVfbGlzdF9hbGwoc2gsICZyZWNvcmRzLCAmY291bnQpOworICAg IAorICAgIENVX0FTU0VSVF9GQVRBTChyZXN1bHQgPj0gMCk7CisgICAgQ1VfQVNTRVJUX0ZBVEFM KHJlY29yZHMgIT0gTlVMTCk7CisgICAgQ1VfQVNTRVJUX0ZBVEFMKGNvdW50ID49IGluZGV4ICsg MSk7CisKKyAgICBtb2RpbmZvID0gc2VtYW5hZ2VfbW9kdWxlX2xpc3RfbnRoKHJlY29yZHMsIGlu ZGV4KTsKKworICAgIENVX0FTU0VSVF9GQVRBTChtb2RpbmZvICE9IE5VTEwpOworCisgICAgZm9y ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChpICE9 IGluZGV4KSB7CisgICAgICAgICAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb190ICp0bXAgPSBzZW1h bmFnZV9tb2R1bGVfbGlzdF9udGgocmVjb3JkcywgaSk7CisgICAgICAgICAgICBzZW1hbmFnZV9t b2R1bGVfaW5mb19kZXN0cm95KHNoLCB0bXApOworICAgICAgICB9CisgICAgfQorCisgICAgKm1v ZGluZm9fZnJlZSA9IHJlY29yZHM7CisKKyAgICByZXR1cm4gbW9kaW5mbzsKK30KKworc2VtYW5h Z2VfbW9kdWxlX2tleV90ICpnZXRfbW9kdWxlX2tleV9udGgoaW50IGluZGV4KSB7CisgICAgc2Vt YW5hZ2VfbW9kdWxlX2tleV90ICptb2RrZXkgPSBOVUxMOworICAgIHNlbWFuYWdlX21vZHVsZV9p bmZvX3QgKm1vZGluZm8gPSBOVUxMOworICAgIHNlbWFuYWdlX21vZHVsZV9pbmZvX3QgKm1vZGlu Zm9fZnJlZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgdWludDE2 X3QgcHJpb3JpdHkgPSAwOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9rZXlfY3Jl YXRlKHNoLCAmbW9ka2V5KSA+PSAwKTsKKworICAgIG1vZGluZm8gPSBnZXRfbW9kdWxlX2luZm9f bnRoKGluZGV4LCAmbW9kaW5mb19mcmVlKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1 bGVfaW5mb19nZXRfbmFtZShzaCwgbW9kaW5mbywgJm5hbWUpID49IDApOworICAgIENVX0FTU0VS VChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBtb2RrZXksIG5hbWUpID49IDApOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2dldF9wcmlvcml0eShzaCwgbW9k aW5mbywgJnByaW9yaXR5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tl eV9zZXRfcHJpb3JpdHkoc2gsIG1vZGtleSwgcHJpb3JpdHkpID49IDApOworCisgICAgZnJlZSht b2RpbmZvX2ZyZWUpOworCisgICAgcmV0dXJuIG1vZGtleTsKK30KKworaW50IG1vZHVsZV9leGlz dHMoY29uc3QgY2hhciAqbmFtZSkgeworICAgIGNvbnN0IGNoYXIgKmJvb2xzX3BhdGggPSAiL3N5 cy9mcy9zZWxpbnV4L2Jvb2xlYW5zLyI7CisgICAgY2hhciAqcGF0aCA9IE5VTEw7CisgICAgc3Ry dWN0IHN0YXQgYnVmOworCisgICAgcGF0aCA9IG1hbGxvYyhzdHJsZW4oYm9vbHNfcGF0aCkgKyBz dHJsZW4obmFtZSkgKyAxKTsKKworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwocGF0aCk7CisK KyAgICBzdHJjcHkocGF0aCwgYm9vbHNfcGF0aCk7CisgICAgc3RyY2F0KHBhdGgsIG5hbWUpOwor CisgICAgaWYgKHN0YXQocGF0aCwgJmJ1ZikgIT0gMCkgeworICAgICAgICBDVV9BU1NFUlQoZXJy bm8gPT0gRU5PRU5UKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7Cisg ICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworI2VuZGlmCisKK3NlbWFuYWdlX3BvcnRfdCAq Z2V0X3BvcnRfbnRoKGludCBpbmRleCkgeworICAgIGludCByZXN1bHQ7CisgICAgc2VtYW5hZ2Vf cG9ydF90ICoqcmVjb3JkczsKKyAgICBzZW1hbmFnZV9wb3J0X3QgKnBvcnQ7CisgICAgdW5zaWdu ZWQgaW50IGNvdW50OworCisgICAgaWYgKGluZGV4ID09IElfTlVMTCkKKyAgICAgICAgcmV0dXJu IE5VTEw7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9wb3J0X2xpc3Qoc2gsICZyZWNvcmRzLCAm Y291bnQpOworICAgIAorICAgIENVX0FTU0VSVF9GQVRBTChyZXN1bHQgPj0gMCk7CisgICAgQ1Vf QVNTRVJUX0ZBVEFMKGNvdW50ID49IGluZGV4ICsgMSk7CisKKyAgICBwb3J0ID0gcmVjb3Jkc1tp bmRleF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK KyAgICAgICAgaWYgKGkgIT0gaW5kZXgpCisgICAgICAgICAgICBzZW1hbmFnZV9wb3J0X2ZyZWUo cmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIHBvcnQ7Cit9CisKK3NlbWFuYWdlX3Bv cnRfa2V5X3QgKmdldF9wb3J0X2tleV9udGgoaW50IGluZGV4KSB7CisgICAgc2VtYW5hZ2VfcG9y dF9rZXlfdCAqa2V5OworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydDsKKyAgICBpbnQgcmVzdWx0 OworCisgICAgaWYgKGluZGV4ID09IElfTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAg ICBwb3J0ID0gZ2V0X3BvcnRfbnRoKGluZGV4KTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX3Bv cnRfa2V5X2V4dHJhY3Qoc2gsIHBvcnQsICZrZXkpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHJl c3VsdCA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtleSk7CisKKyAg ICByZXR1cm4ga2V5OworfQorCit2b2lkIGFkZF9sb2NhbF9wb3J0KGludCBwb3J0X2luZGV4KSB7 CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0OworICAgIHNlbWFuYWdlX3BvcnRfa2V5X3QgKmtl eSA9IE5VTEw7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwocG9ydF9pbmRleCAhPSBJX05VTEwpOwor CisgICAgcG9ydCA9IGdldF9wb3J0X250aChwb3J0X2luZGV4KTsKKworICAgIENVX0FTU0VSVF9G QVRBTChzZW1hbmFnZV9wb3J0X2tleV9leHRyYWN0KHNoLCBwb3J0LCAma2V5KSA+PSAwKTsKKyAg ICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtleSk7CisKKyAgICBDVV9BU1NFUlRfRkFU QUwoc2VtYW5hZ2VfcG9ydF9tb2RpZnlfbG9jYWwoc2gsIGtleSwgcG9ydCkgPj0gMCk7Cit9CisK K3ZvaWQgZGVsZXRlX2xvY2FsX3BvcnQoaW50IHBvcnRfaW5kZXgpIHsKKyAgICBzZW1hbmFnZV9w b3J0X2tleV90ICprZXkgPSBOVUxMOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHBvcnRfaW5kZXgg IT0gSV9OVUxMKTsKKworICAgIGtleSA9IGdldF9wb3J0X2tleV9udGgocG9ydF9pbmRleCk7CisK KyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfcG9ydF9kZWxfbG9jYWwoc2gsIGtleSkgPj0g MCk7Cit9CisKK3NlbWFuYWdlX2lmYWNlX3QgKmdldF9pZmFjZSgpIHsKKyAgICBzZW1hbmFnZV9p ZmFjZV90ICppZmFjZSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICppZmNvbiA9IE5V TEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICptc2djb24gPSBOVUxMOworCisgICAgQ1VfQVNT RVJUX0ZBVEFMKHNlbWFuYWdlX2lmYWNlX2NyZWF0ZShzaCwgJmlmYWNlKSA+PSAwKTsKKworICAg IENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9pZmFjZV9zZXRfbmFtZShzaCwgaWZhY2UsICJhc2Rm IikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfY29udGV4dF9mcm9tX3N0 cmluZyhzaCwgInN5c3RlbV91Om9iamVjdF9yOnRtcF90OnMwIiwgJmlmY29uKSA+PSAwKTsKKyAg ICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfaWZhY2Vfc2V0X2lmY29uKHNoLCBpZmFjZSwgaWZj b24pID49IDApOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX2NvbnRleHRfZnJvbV9z dHJpbmcoc2gsICJzeXN0ZW1fdTpvYmplY3Rfcjp0bXBfdDpzMCIsICZtc2djb24pID49IDApOwor ICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9pZmFjZV9zZXRfbXNnY29uKHNoLCBpZmFjZSwg bXNnY29uKSA+PSAwKTsKKworICAgIHJldHVybiBpZmFjZTsKK30KKworc2VtYW5hZ2VfaWZhY2Vf a2V5X3QgKmdldF9pZmFjZV9rZXkoKSB7CisgICAgc2VtYW5hZ2VfaWZhY2Vfa2V5X3QgKmtleTsK KworICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9pZmFjZV9rZXlfY3JlYXRlKHNoLCAiYXNk ZiIsICZrZXkpID49IDApOworCisgICAgcmV0dXJuIGtleTsKK30KKwordm9pZCBhZGRfbG9jYWxf aWZhY2UoaW50IGluZGV4KSB7CisgICAgc2VtYW5hZ2VfaWZhY2VfdCAqaWZhY2U7CisgICAgc2Vt YW5hZ2VfaWZhY2Vfa2V5X3QgKmtleSA9IE5VTEw7CisgICAgY2hhciBuYW1lWzUwXSA9IHt9Owor CisgICAgc25wcmludGYobmFtZSwgNTAsICJhc2RmJWQiLCBpbmRleCk7CisKKyAgICBpZmFjZSA9 IGdldF9pZmFjZSgpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX2lmYWNlX3NldF9u YW1lKHNoLCBpZmFjZSwgbmFtZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5h Z2VfaWZhY2Vfa2V5X2V4dHJhY3Qoc2gsIGlmYWNlLCAma2V5KSA+PSAwKTsKKyAgICBDVV9BU1NF UlRfUFRSX05PVF9OVUxMX0ZBVEFMKGtleSk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5h Z2VfaWZhY2VfbW9kaWZ5X2xvY2FsKHNoLCBrZXksIGlmYWNlKSA+PSAwKTsKK30KKwordm9pZCBk ZWxldGVfbG9jYWxfaWZhY2UoaW50IGluZGV4KSB7CisgICAgc2VtYW5hZ2VfaWZhY2Vfa2V5X3Qg KmtleSA9IE5VTEw7CisgICAgY2hhciBuYW1lWzUwXSA9IHt9OworCisgICAgc25wcmludGYobmFt ZSwgNTAsICJhc2RmJWQiLCBpbmRleCk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2Vf aWZhY2Vfa2V5X2NyZWF0ZShzaCwgbmFtZSwgJmtleSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRf RkFUQUwoc2VtYW5hZ2VfaWZhY2VfZGVsX2xvY2FsKHNoLCBrZXkpID49IDApOworfQorCitzZW1h bmFnZV9ub2RlX3QgKmdldF9ub2RlKCkgeworICAgIHNlbWFuYWdlX25vZGVfdCAqbm9kZSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24gPSBOVUxMOworCisgICAgQ1VfQVNTRVJU X0ZBVEFMKHNlbWFuYWdlX25vZGVfY3JlYXRlKHNoLCAmbm9kZSkgPj0gMCk7CisKKyAgICBDVV9B U1NFUlRfRkFUQUwoc2VtYW5hZ2Vfbm9kZV9zZXRfYWRkcihzaCwgbm9kZSwgU0VNQU5BR0VfUFJP VE9fSVA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjcu MC4wLjEiKSA+PSAwKTsKKworICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9ub2RlX3NldF9t YXNrKHNoLCBub2RlLCBTRU1BTkFHRV9QUk9UT19JUDQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIjI1NS4yNTUuMjU1LjAiKSA+PSAwKTsKKworICAgIHNlbWFu YWdlX25vZGVfc2V0X3Byb3RvKG5vZGUsIFNFTUFOQUdFX1BST1RPX0lQNCk7CisKKyAgICBDVV9B U1NFUlRfRkFUQUwoc2VtYW5hZ2VfY29udGV4dF9mcm9tX3N0cmluZyhzaCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5c3RlbV91Om9iamVjdF9yOnRtcF90OnMwIiwg JmNvbikgPj0gMCk7CisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX25vZGVfc2V0X2Nvbihz aCwgbm9kZSwgY29uKSA+PSAwKTsKKworICAgIHJldHVybiBub2RlOworfQorCitzZW1hbmFnZV9u b2RlX2tleV90ICpnZXRfbm9kZV9rZXkoKSB7CisgICAgc2VtYW5hZ2Vfbm9kZV9rZXlfdCAqa2V5 OworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX25vZGVfa2V5X2NyZWF0ZShzaCwgIjEy Ny4wLjAuMSIsICIyNTUuMjU1LjI1NS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNFTUFOQUdFX1BST1RPX0lQNCwgJmtleSkgPj0gMCk7CisKKyAgICBy ZXR1cm4ga2V5OworfQorCit2b2lkIGFkZF9sb2NhbF9ub2RlKGludCBpbmRleCkgeworICAgIHNl bWFuYWdlX25vZGVfdCAqbm9kZTsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV90ICprZXkgPSBOVUxM OworICAgIGNoYXIgYWRkcls1MF0gPSB7fTsKKworICAgIENVX0FTU0VSVChpbmRleCA+PSAwICYm IGluZGV4IDw9IDI1NSk7CisKKyAgICBzbnByaW50ZihhZGRyLCA1MCwgIjE5Mi4xNjguMC4lZCIs IGluZGV4KTsKKworICAgIG5vZGUgPSBnZXRfbm9kZSgpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFM KHNlbWFuYWdlX25vZGVfc2V0X2FkZHIoc2gsIG5vZGUsIFNFTUFOQUdFX1BST1RPX0lQNCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyKSA+PSAwKTsKKyAg ICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2Vfbm9kZV9zZXRfbWFzayhzaCwgbm9kZSwgU0VNQU5B R0VfUFJPVE9fSVA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIyNTUuMjU1LjAuMCIpID49IDApOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX25v ZGVfa2V5X2V4dHJhY3Qoc2gsIG5vZGUsICZrZXkpID49IDApOworICAgIENVX0FTU0VSVF9QVFJf Tk9UX05VTExfRkFUQUwoa2V5KTsKKworICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9ub2Rl X21vZGlmeV9sb2NhbChzaCwga2V5LCBub2RlKSA+PSAwKTsKK30KKwordm9pZCBkZWxldGVfbG9j YWxfbm9kZShpbnQgaW5kZXgpIHsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV90ICprZXkgPSBOVUxM OworICAgIGNoYXIgYWRkcls1MF0gPSB7fTsKKworICAgIENVX0FTU0VSVChpbmRleCA+PSAwICYm IGluZGV4IDw9IDI1NSk7CisKKyAgICBzbnByaW50ZihhZGRyLCA1MCwgIjE5Mi4xNjguMC4lZCIs IGluZGV4KTsKKworICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9ub2RlX2tleV9jcmVhdGUo c2gsIGFkZHIsICIyNTUuMjU1LjAuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTRU1BTkFHRV9QUk9UT19JUDQsICZrZXkpID49IDApOworCisgICAgQ1Vf QVNTRVJUX0ZBVEFMKHNlbWFuYWdlX25vZGVfZGVsX2xvY2FsKHNoLCBrZXkpID49IDApOworfQor CitzZW1hbmFnZV91c2VyX3QgKmdldF91c2VyX250aChpbnQgaW5kZXgpIHsKKyAgICBpbnQgcmVz dWx0OworICAgIHNlbWFuYWdlX3VzZXJfdCAqKnJlY29yZHM7CisgICAgc2VtYW5hZ2VfdXNlcl90 ICp1c2VyOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKworICAgIGlmIChpbmRleCA9PSBJX05V TEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfdXNlcl9s aXN0KHNoLCAmcmVjb3JkcywgJmNvdW50KTsKKyAgICAKKyAgICBDVV9BU1NFUlRfRkFUQUwocmVz dWx0ID49IDApOworICAgIENVX0FTU0VSVF9GQVRBTChjb3VudCA+PSBpbmRleCArIDEpOworCisg ICAgdXNlciA9IHJlY29yZHNbaW5kZXhdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7 IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChpICE9IGluZGV4KQorICAgICAgICAgICAg c2VtYW5hZ2VfdXNlcl9mcmVlKHJlY29yZHNbaV0pOworICAgIH0KKworICAgIHJldHVybiB1c2Vy OworfQorCitzZW1hbmFnZV91c2VyX2tleV90ICpnZXRfdXNlcl9rZXlfbnRoKGludCBpbmRleCkg eworICAgIHNlbWFuYWdlX3VzZXJfa2V5X3QgKmtleTsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVz ZXI7CisgICAgaW50IHJlc3VsdDsKKworICAgIGlmIChpbmRleCA9PSBJX05VTEwpCisgICAgICAg IHJldHVybiBOVUxMOworCisgICAgdXNlciA9IGdldF91c2VyX250aChpbmRleCk7CisKKyAgICBy ZXN1bHQgPSBzZW1hbmFnZV91c2VyX2tleV9leHRyYWN0KHNoLCB1c2VyLCAma2V5KTsKKworICAg IENVX0FTU0VSVF9GQVRBTChyZXN1bHQgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVM TF9GQVRBTChrZXkpOworCisgICAgcmV0dXJuIGtleTsKK30KKwordm9pZCBhZGRfbG9jYWxfdXNl cihpbnQgdXNlcl9pbmRleCkgeworICAgIHNlbWFuYWdlX3VzZXJfdCAqdXNlcjsKKyAgICBzZW1h bmFnZV91c2VyX2tleV90ICprZXkgPSBOVUxMOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHVzZXJf aW5kZXggIT0gSV9OVUxMKTsKKworICAgIHVzZXIgPSBnZXRfdXNlcl9udGgodXNlcl9pbmRleCk7 CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfdXNlcl9rZXlfZXh0cmFjdChzaCwgdXNl ciwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChrZXkpOwor CisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX3VzZXJfbW9kaWZ5X2xvY2FsKHNoLCBrZXks IHVzZXIpID49IDApOworfQorCit2b2lkIGRlbGV0ZV9sb2NhbF91c2VyKGludCB1c2VyX2luZGV4 KSB7CisgICAgc2VtYW5hZ2VfdXNlcl9rZXlfdCAqa2V5ID0gTlVMTDsKKworICAgIENVX0FTU0VS VF9GQVRBTCh1c2VyX2luZGV4ICE9IElfTlVMTCk7CisKKyAgICBrZXkgPSBnZXRfdXNlcl9rZXlf bnRoKHVzZXJfaW5kZXgpOworCisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX3VzZXJfZGVs X2xvY2FsKHNoLCBrZXkpID49IDApOworfQorCisjaWZkZWYgRkVBVFVSRV9JTkZJTklCQU5ECisK K3ZvaWQgYWRkX2xvY2FsX2liZW5kcG9ydChpbnQgaW5kZXgpIHsKKyAgICBzZW1hbmFnZV9pYmVu ZHBvcnRfdCAqaWJlbmRwb3J0OworICAgIHNlbWFuYWdlX2liZW5kcG9ydF9rZXlfdCAqa2V5ID0g TlVMTDsKKyAgICBzZW1hbmFnZV9jb250ZXh0X3QgKmNvbiA9IE5VTEw7CisgICAgY2hhciBuYW1l WzUwXTsKKworICAgIENVX0FTU0VSVChpbmRleCA+PSAwICYmIGluZGV4IDw9IDI1NSk7CisKKyAg ICBzbnByaW50ZihuYW1lLCA1MCwgImliZW5kcG9ydCVkIiwgaW5kZXgpOworCisgICAgQ1VfQVNT RVJUX0ZBVEFMKHNlbWFuYWdlX2liZW5kcG9ydF9rZXlfY3JlYXRlKHNoLCBuYW1lLCAwLCAma2V5 KSA+PSAwKTsKKworICAgIENVX0FTU0VSVF9GQVRBTChzZW1hbmFnZV9pYmVuZHBvcnRfY3JlYXRl KHNoLCAmaWJlbmRwb3J0KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfaWJl bmRwb3J0X3NldF9pYmRldl9uYW1lKHNoLCBpYmVuZHBvcnQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSA+PSAwKTsKKyAgICBzZW1h bmFnZV9pYmVuZHBvcnRfc2V0X3BvcnQoaWJlbmRwb3J0LCAwKTsKKyAgICBDVV9BU1NFUlRfRkFU QUwoc2VtYW5hZ2VfY29udGV4dF9mcm9tX3N0cmluZyhzaCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInN5c3RlbV91Om9iamVjdF9yOmJpbl90OnMwIiwgJmNvbikgPj0g MCk7CisgICAgQ1VfQVNTRVJUX0ZBVEFMKHNlbWFuYWdlX2liZW5kcG9ydF9zZXRfY29uKHNoLCBp YmVuZHBvcnQsIGNvbikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2VfaWJl bmRwb3J0X21vZGlmeV9sb2NhbChzaCwga2V5LCBpYmVuZHBvcnQpID49IDApOworCisgICAgc2Vt YW5hZ2VfY29udGV4dF9mcmVlKGNvbik7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9mcmVl KGtleSk7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2ZyZWUoaWJlbmRwb3J0KTsKK30KKwordm9p ZCBkZWxldGVfbG9jYWxfaWJlbmRwb3J0KGludCBpbmRleCkgeworICAgIHNlbWFuYWdlX2liZW5k cG9ydF9rZXlfdCAqa2V5ID0gTlVMTDsKKyAgICBjaGFyIG5hbWVbNTBdOworCisgICAgQ1VfQVNT RVJUKGluZGV4ID49IDAgJiYgaW5kZXggPD0gMjU1KTsKKworICAgIHNucHJpbnRmKG5hbWUsIDUw LCAiaWJlbmRwb3J0JWQiLCBpbmRleCk7CisKKyAgICBDVV9BU1NFUlRfRkFUQUwoc2VtYW5hZ2Vf aWJlbmRwb3J0X2tleV9jcmVhdGUoc2gsIG5hbWUsIDAsICZrZXkpID49IDApOworCisgICAgQ1Vf QVNTRVJUX0ZBVEFMKHNlbWFuYWdlX2liZW5kcG9ydF9kZWxfbG9jYWwoc2gsIGtleSkgPj0gMCk7 CisKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRfa2V5X2ZyZWUoa2V5KTsKK30KKworI2VuZGlmCgpk aWZmIC0tZ2l0IGEvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL2Z1bmN0aW9ucy5oIGIv bGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL2Z1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGM1MTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzZW1h bmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvZnVuY3Rpb25zLmgKQEAgLTAsMCArMSwxNjMgQEAKKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNlbWFuYWdlL2hhbmRsZS5o PgorI2luY2x1ZGUgPHNlbWFuYWdlL3NlbWFuYWdlLmg+CisKKyNpZm5kZWYgX19GVU5DVElPTlNf SF9fCisjZGVmaW5lIF9fRlVOQ1RJT05TX0hfXworCisjaWYgZGVmaW5lZChWRVJTX01BSk9SKSAm JiBkZWZpbmVkKFZFUlNfTUlOT1IpCisKKyNkZWZpbmUgVkVSU19DSEVDSyhtYWpvciwgbWlub3Ip IFwKKyAgICAoKFZFUlNfTUFKT1IgPiBtYWpvcikgfHwgKChWRVJTX01BSk9SID09IG1ham9yKSAm JiAoVkVSU19NSU5PUiA+PSBtaW5vcikpKQorCisjZWxzZQorCisjZGVmaW5lIFZFUlNfQ0hFQ0so bWFqb3IsIG1pbm9yKSAxCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChWRVJTX01BSk9SKSAmJiBk ZWZpbmVkKFZFUlNfTUlOT1IpICYmIGRlZmluZWQoVkVSU19SRUxFQVNFKQorCisjZGVmaW5lIFZF UlNfQ0hFQ0tfUkVMKG1ham9yLCBtaW5vciwgcmVsZWFzZSkgXAorICAgICgoVkVSU19NQUpPUiA9 PSBtYWpvcikgJiYgKFZFUlNfTUlOT1IgPT0gbWlub3IpICYmIChWRVJTX1JFTEVBU0UgPj0gcmVs ZWFzZSkpCisKKyNlbHNlCisKKyNkZWZpbmUgVkVSU19DSEVDS19SRUwobWFqb3IsIG1pbm9yLCBy ZWxlYXNlKSAwCisKKyNlbmRpZgorCisjaWYgVkVSU19DSEVDSygyLCA3KSB8fCBWRVJTX0NIRUNL X1JFTCgyLCA1LCA5KQorI2RlZmluZSBGRUFUVVJFX0lORklOSUJBTkQKKyNlbmRpZgorCit0eXBl ZGVmIGVudW0geyBTSF9OVUxMLCBTSF9IQU5ETEUsIFNIX0NPTk5FQ1QsIFNIX1RSQU5TIH0gbGV2 ZWxfdDsKKwordm9pZCBzZXR1cF9oYW5kbGUobGV2ZWxfdCBsZXZlbCk7Cit2b2lkIGNsZWFudXBf aGFuZGxlKGxldmVsX3QgbGV2ZWwpOwordm9pZCBzZXR1cF9oYW5kbGVfaW52YWxpZF9zdG9yZShs ZXZlbF90IGxldmVsKTsKKwordm9pZCBoZWxwZXJfaGFuZGxlX2NyZWF0ZSh2b2lkKTsKK3ZvaWQg aGVscGVyX2hhbmRsZV9kZXN0cm95KHZvaWQpOwordm9pZCBoZWxwZXJfY29ubmVjdCh2b2lkKTsK K3ZvaWQgaGVscGVyX2Rpc2Nvbm5lY3Qodm9pZCk7Cit2b2lkIGhlbHBlcl9iZWdpbl90cmFuc2Fj dGlvbih2b2lkKTsKK3ZvaWQgaGVscGVyX2NvbW1pdCh2b2lkKTsKKworaW50IGNvbnRleHRfY29t cGFyZShzZW1hbmFnZV9jb250ZXh0X3QgKmNvbiwgY29uc3QgY2hhciAqc3RyKTsKKworLy8gZm9y a3MsIHJ1bnMgY29kZSBhbmQgY2hlY2tzIHNpZ25hbCByZXR1cm5lZCBieSBjaGlsZCBwcm9jZXNz CisjZGVmaW5lIENVX0FTU0VSVF9TSUdOQUwoQ09ERSxTSUdOQUwpIFwKKyAgICBkbyB7IFwKKyAg ICAgICAgcGlkX3QgcGlkID0gZm9yaygpOyBcCisgICAgICAgIGlmIChwaWQgPT0gMCkgeyBcCisg ICAgICAgICAgICBDT0RFOyBcCisgICAgICAgICAgICBleGl0KDApOyBcCisgICAgICAgIH0gZWxz ZSB7IFwKKyAgICAgICAgICAgIGludCBzdGF0X3ZhbDsgXAorICAgICAgICAgICAgd2FpdCgmc3Rh dF92YWwpOyBcCisgICAgICAgICAgICBDVV9BU1NFUlRfRkFMU0UoV0lGRVhJVEVEKHN0YXRfdmFs KSk7IFwKKyAgICAgICAgICAgIENVX0FTU0VSVF9FUVVBTChXVEVSTVNJRyhzdGF0X3ZhbCksIFNJ R05BTCk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIENVX0FTU0VS VF9DT05URVhUKENPTjEsQ09OMixFUVVBTCkgXAorICAgIGRvIHsgXAorICAgICAgICBjaGFyICpz dHI7IFwKKyAgICAgICAgY2hhciAqc3RyMjsgXAorICAgICAgICBDVV9BU1NFUlRfUFRSX05PVF9O VUxMKENPTjEpOyBcCisgICAgICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwoQ09OMik7IFwKKyAg ICAgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfdG9fc3RyaW5nKHNoLCBDT04xLCAmc3Ry KSA+PSAwKTsgXAorICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29udGV4dF90b19zdHJpbmco c2gsIENPTjIsICZzdHIyKSA+PSAwKTsgXAorICAgICAgICBpZiAoRVFVQUwpIHtcCisgICAgICAg ICAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKHN0ciwgc3RyMik7IFwKKyAgICAgICAgfSBlbHNl IHtcCisgICAgICAgICAgICBDVV9BU1NFUlRfU1RSSU5HX05PVF9FUVVBTChzdHIsIHN0cjIpOyBc CisgICAgICAgIH0gXAorICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBDVV9BU1NFUlRfQ09OVEVY VF9FUVVBTChDT04xLENPTjIpIENVX0FTU0VSVF9DT05URVhUKENPTjEsQ09OMiwxKQorI2RlZmlu ZSBDVV9BU1NFUlRfQ09OVEVYVF9OT1RfRVFVQUwoQ09OMSxDT04yKSBDVV9BU1NFUlRfQ09OVEVY VChDT04xLENPTjIsMCkKKworI2RlZmluZSBJX05VTEwgIC0xCisjZGVmaW5lIElfRklSU1QgIDAK KyNkZWZpbmUgSV9TRUNPTkQgMQorI2RlZmluZSBJX1RISVJEICAyCisKKy8vIHNldXNlcnMKK3Nl bWFuYWdlX3NldXNlcl90ICpnZXRfc2V1c2VyX250aChpbnQgaW5kZXgpOworc2VtYW5hZ2Vfc2V1 c2VyX3QgKmdldF9zZXVzZXJfbmV3KCk7CisKK3NlbWFuYWdlX3NldXNlcl9rZXlfdCAqZ2V0X3Nl dXNlcl9rZXlfbnRoKGludCBpbmRleCk7CitzZW1hbmFnZV9zZXVzZXJfa2V5X3QgKmdldF9zZXVz ZXJfa2V5X2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cik7CisKK3ZvaWQgYWRkX2xvY2FsX3NldXNl cihpbnQgc2V1c2VyX2luZGV4KTsKK3ZvaWQgZGVsZXRlX2xvY2FsX3NldXNlcihpbnQgc2V1c2Vy X2luZGV4KTsKKworLy8gYm9vbGVhbnMKK3NlbWFuYWdlX2Jvb2xfdCAqZ2V0X2Jvb2xfbnRoKGlu dCBpbmRleCk7CitzZW1hbmFnZV9ib29sX3QgKmdldF9ib29sX25ldygpOworCitzZW1hbmFnZV9i b29sX2tleV90ICpnZXRfYm9vbF9rZXlfbnRoKGludCBpbmRleCk7CitzZW1hbmFnZV9ib29sX2tl eV90ICpnZXRfYm9vbF9rZXlfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTsKKwordm9pZCBhZGRf bG9jYWxfYm9vbChpbnQgYm9vbF9pbmRleCk7Cit2b2lkIGRlbGV0ZV9sb2NhbF9ib29sKGludCBi b29sX2luZGV4KTsKKworLy8gZmNvbnRleHQKK3NlbWFuYWdlX2Zjb250ZXh0X3QgKmdldF9mY29u dGV4dF9udGgoaW50IGluZGV4KTsKK3NlbWFuYWdlX2Zjb250ZXh0X3QgKmdldF9mY29udGV4dF9u ZXcoKTsKKworc2VtYW5hZ2VfZmNvbnRleHRfa2V5X3QgKmdldF9mY29udGV4dF9rZXlfbnRoKGlu dCBpbmRleCk7CitzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqZ2V0X2Zjb250ZXh0X2tleV9mcm9t X3N0cihjb25zdCBjaGFyICpzdHIsIGludCB0eXBlKTsKKwordm9pZCBhZGRfbG9jYWxfZmNvbnRl eHQoaW50IGZjb250ZXh0X2luZGV4KTsKK3ZvaWQgZGVsZXRlX2xvY2FsX2Zjb250ZXh0KGludCBm Y29udGV4dF9pbmRleCk7CisKKy8vIG1vZHVsZQorI2lmIFZFUlNfQ0hFQ0soMiwgNSkKK3NlbWFu YWdlX21vZHVsZV9pbmZvX3QgKmdldF9tb2R1bGVfaW5mb19udGgoaW50IGluZGV4LCBzZW1hbmFn ZV9tb2R1bGVfaW5mb190ICoqbW9kaW5mb19mcmVlKTsKK3NlbWFuYWdlX21vZHVsZV9rZXlfdCAq Z2V0X21vZHVsZV9rZXlfbnRoKGludCBpbmRleCk7CitpbnQgbW9kdWxlX2V4aXN0cyhjb25zdCBj aGFyICpuYW1lKTsKKyNlbmRpZgorCisvLyBwb3J0CitzZW1hbmFnZV9wb3J0X3QgKmdldF9wb3J0 X250aChpbnQgaW5kZXgpOworc2VtYW5hZ2VfcG9ydF9rZXlfdCAqZ2V0X3BvcnRfa2V5X250aChp bnQgaW5kZXgpOworCit2b2lkIGFkZF9sb2NhbF9wb3J0KGludCBwb3J0X2luZGV4KTsKK3ZvaWQg ZGVsZXRlX2xvY2FsX3BvcnQoaW50IHBvcnRfaW5kZXgpOworCisvLyBpZmFjZQorc2VtYW5hZ2Vf aWZhY2VfdCAqZ2V0X2lmYWNlKCk7CitzZW1hbmFnZV9pZmFjZV9rZXlfdCAqZ2V0X2lmYWNlX2tl eSgpOworCit2b2lkIGFkZF9sb2NhbF9pZmFjZShpbnQgaW5kZXgpOwordm9pZCBkZWxldGVfbG9j YWxfaWZhY2UoaW50IGluZGV4KTsKKworLy8gbm9kZQorCitzZW1hbmFnZV9ub2RlX3QgKmdldF9u b2RlKCk7CitzZW1hbmFnZV9ub2RlX2tleV90ICpnZXRfbm9kZV9rZXkoKTsKKwordm9pZCBhZGRf bG9jYWxfbm9kZShpbnQgaW5kZXgpOwordm9pZCBkZWxldGVfbG9jYWxfbm9kZShpbnQgaW5kZXgp OworCisvLyB1c2VyCisKK3NlbWFuYWdlX3VzZXJfdCAqZ2V0X3VzZXJfbnRoKGludCBpbmRleCk7 CitzZW1hbmFnZV91c2VyX2tleV90ICpnZXRfdXNlcl9rZXlfbnRoKGludCBpbmRleCk7CisKK3Zv aWQgYWRkX2xvY2FsX3VzZXIoaW50IGluZGV4KTsKK3ZvaWQgZGVsZXRlX2xvY2FsX3VzZXIoaW50 IGluZGV4KTsKKworLy8gaWJlbmRwb3J0CisjaWZkZWYgRkVBVFVSRV9JTkZJTklCQU5ECit2b2lk IGFkZF9sb2NhbF9pYmVuZHBvcnQoaW50IGluZGV4KTsKK3ZvaWQgZGVsZXRlX2xvY2FsX2liZW5k cG9ydChpbnQgaW5kZXgpOworI2VuZGlmCisKKyNlbmRpZgoKZGlmZiAtLWdpdCBhL2xpYnNlbWFu YWdlL3Nhbml0eS10ZXN0cy90ZXN0cy9saWJzZW1hbmFnZS10ZXN0cy5jIGIvbGlic2VtYW5hZ2Uv c2FuaXR5LXRlc3RzL3Rlc3RzL2xpYnNlbWFuYWdlLXRlc3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYWQzY2MyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnNlbWFuYWdl L3Nhbml0eS10ZXN0cy90ZXN0cy9saWJzZW1hbmFnZS10ZXN0cy5jCkBAIC0wLDAgKzEsMTEwIEBA CisvKiBBdXRob3JzOiBDaHJpc3RvcGhlciBBc2h3b3J0aCA8Y2FzaHdvcnRoQHRyZXN5cy5jb20+ CisgKiAgICAgICAgICBDYWxlYiBDYXNlIDxjY2FzZUB0cmVzeXMuY29tPgorICogICAgICAgICAg Q2hhZCBTZWxsZXJzIDxjc2VsbGVyc0B0cmVzeXMuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykg MjAwNiBUcmVzeXMgVGVjaG5vbG9neSwgTExDCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K KworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJ0ZXN0X2hhbmRsZS5oIgorI2luY2x1 ZGUgInRlc3Rfc2V1c2VyLmgiCisjaW5jbHVkZSAidGVzdF9ib29sLmgiCisjaW5jbHVkZSAidGVz dF9mY29udGV4dC5oIgorI2luY2x1ZGUgInRlc3RfbW9kdWxlLmgiCisjaW5jbHVkZSAidGVzdF9w b3J0LmgiCisjaW5jbHVkZSAidGVzdF9pZmFjZS5oIgorI2luY2x1ZGUgInRlc3Rfbm9kZS5oIgor I2luY2x1ZGUgInRlc3Rfb3RoZXIuaCIKKyNpbmNsdWRlICJ0ZXN0X3VzZXIuaCIKKyNpbmNsdWRl ICJ0ZXN0X2liZW5kcG9ydC5oIgorCisjaW5jbHVkZSA8Q1VuaXQvQmFzaWMuaD4KKyNpbmNsdWRl IDxDVW5pdC9Db25zb2xlLmg+CisjaW5jbHVkZSA8Q1VuaXQvVGVzdERCLmg+CisKKyNkZWZpbmUg REVDTEFSRV9TVUlURShuYW1lKSBcCisgICAgc3VpdGVzW3N1aXRlX2luZGV4XSA9IENVX2FkZF9z dWl0ZSgjbmFtZSwgbmFtZSMjX3Rlc3RfaW5pdCwgbmFtZSMjX3Rlc3RfY2xlYW51cCk7IFwKKyAg ICBpZiAoTlVMTCA9PSBzdWl0ZXNbc3VpdGVfaW5kZXhdKSB7IFwKKyAgICAgICAgQ1VfY2xlYW51 cF9yZWdpc3RyeSgpOyBcCisgICAgICAgIHJldHVybiBDVV9nZXRfZXJyb3IoKTsgfSBcCisgICAg aWYgKG5hbWUjI19hZGRfdGVzdHMoc3VpdGVzW3N1aXRlX2luZGV4XSkpIHsgXAorICAgICAgICBD VV9jbGVhbnVwX3JlZ2lzdHJ5KCk7IFwKKyAgICAgICAgcmV0dXJuIENVX2dldF9lcnJvcigpOyB9 IFwKKyAgICBzdWl0ZXNfbmFtZXNbc3VpdGVfaW5kZXhdID0gI25hbWU7IFwKKyAgICBzdWl0ZV9p bmRleCsrOworCisjZGVmaW5lIFNVSVRFX05VTSAxMQorCitDVV9wU3VpdGUgc3VpdGVzW1NVSVRF X05VTV0gPSB7IE5VTEwgfTsKK2NvbnN0IGNoYXIgKnN1aXRlc19uYW1lc1tTVUlURV9OVU1dID0g eyBOVUxMIH07CisKK2ludCBzdWl0ZV9pbmRleCA9IDA7CisKK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKyAgICBpZiAoQ1VFX1NVQ0NFU1MgIT0gQ1VfaW5pdGlhbGl6ZV9yZWdp c3RyeSgpKQorICAgICAgICByZXR1cm4gQ1VfZ2V0X2Vycm9yKCk7CisKKyAgICAvLyB3aGVuIGFk ZGluZyBuZXcgc3VpdGUsIHVwZGF0ZSBTVUlURV9OVU0gYW5kIGluY2x1ZGUgaGVhZGVyIGZpbGUK KyAgICBERUNMQVJFX1NVSVRFKGhhbmRsZSk7CisgICAgREVDTEFSRV9TVUlURShzZXVzZXIpOwor ICAgIERFQ0xBUkVfU1VJVEUoZmNvbnRleHQpOworICAgIERFQ0xBUkVfU1VJVEUobW9kdWxlKTsK KyAgICBERUNMQVJFX1NVSVRFKGJvb2wpOworICAgIERFQ0xBUkVfU1VJVEUocG9ydCk7CisgICAg REVDTEFSRV9TVUlURShpZmFjZSk7CisgICAgREVDTEFSRV9TVUlURShub2RlKTsKKyAgICBERUNM QVJFX1NVSVRFKG90aGVyKTsKKyAgICBERUNMQVJFX1NVSVRFKHVzZXIpOworICAgIERFQ0xBUkVf U1VJVEUoaWJlbmRwb3J0KTsKKworICAgIENVX2Jhc2ljX3NldF9tb2RlKENVX0JSTV9WRVJCT1NF KTsKKworICAgIGlmIChhcmdjID09IDEpIHsKKyAgICAgICAgQ1VfYmFzaWNfcnVuX3Rlc3RzKCk7 CisgICAgfQorICAgIGVsc2UgaWYgKGFyZ2MgPT0gMiAmJiBzdHJjbXAoYXJndlsxXSwgImxpc3Qi KSA9PSAwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VpdGVfaW5kZXg7IGkrKykK KyAgICAgICAgICAgIHByaW50ZigiJXMgIiwgc3VpdGVzX25hbWVzW2ldKTsKKyAgICB9CisgICAg ZWxzZSBpZiAoYXJnYyA9PSAzICYmIHN0cmNtcChhcmd2WzFdLCAic3VpdGUiKSA9PSAwKSB7Cisg ICAgICAgIGludCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdWl0ZV9pbmRleDsgaSsr KSB7CisgICAgICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMl0sIHN1aXRlc19uYW1lc1tpXSkgPT0g MCkgeworICAgICAgICAgICAgICAgIENVX2Jhc2ljX3J1bl9zdWl0ZShzdWl0ZXNbaV0pOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor ICAgICAgICBpZiAoaSA9PSBzdWl0ZV9pbmRleCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIHN1aXRlIG5hbWVcbiIpOworICAgICAgICAgICAgQ1VfY2xlYW51cF9yZWdp c3RyeSgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz ZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBhcmd1bWVudHNcbiIpOworICAg ICAgICBDVV9jbGVhbnVwX3JlZ2lzdHJ5KCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwor ICAgIENVX2NsZWFudXBfcmVnaXN0cnkoKTsKKworICAgIHJldHVybiAwOworfQoKZGlmZiAtLWdp dCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2Jvb2wuYyBiL2xpYnNlbWFu YWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2Jvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi44MzlmNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2Fu aXR5LXRlc3RzL3Rlc3RzL3Rlc3RfYm9vbC5jCkBAIC0wLDAgKzEsMTIzMSBAQAorI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzZW1h bmFnZS9zZW1hbmFnZS5oPgorI2luY2x1ZGUgPHNlbWFuYWdlL2hhbmRsZS5oPgorI2luY2x1ZGUg PHNlbGludXgvc2VsaW51eC5oPgorI2luY2x1ZGUgPENVbml0L0Jhc2ljLmg+CisKKyNpbmNsdWRl ICJ0ZXN0X2Jvb2wuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKworLyogIFRoZSBmb2xsb3dp bmcgZnVuY3Rpb25zIGRvZXMgbm90IGhhdmUgMTAwICUgY29kZSBjb3ZlcmFnZSBiZWNhdXNlIHdl IGRvIG5vdAorICogIHRlc3QgYmFkIG1hbGxvY3M6CisgKiAgYm9vbF9yZWFkX2xpc3QKKyAqICBi b29sX2FjdGl2ZWRiX2Jhc2VfaW5pdAorICovCisKKy8vIFRPRE86IHRlc3Qgc2VtYW5hZ2VfYm9v bF9jb21wYXJlMl9xc29ydAorLy8gVE9ETzogYm9vbF9jb21taXRfbGlzdDogZm9yIGxvb3AgYWZ0 ZXIgY29udGludWUKKy8vIFRPRE86IGJvb2xfY29tbWl0X2xpc3Q6IG1ha2Ugc2VjdXJpdHlfc2V0 X2Jvb2xlYW5fbGlzdCByZXR1cm4gZXJyb3IKKy8vIFRPRE86IGJvb2xfY29tbWl0X2xpc3Q6IGZy ZWUgYmxpc3QgbG9vcAorLy8gVE9ETzogdGVzdCBib29sX3ByaW50CisvLyBUT0RPOiB0ZXN0IGJv b2xfcGFyc2UKKy8vIFRPRE86IGJvb2xfZmlsZV9kYmFzZV9pbml0OiBtYWtlIGRiYXNlX2ZpbGVf aW5pdCByZXR1cm4gZXJyb3IKKy8vIFRPRE86IGJvb2xfcG9saWN5ZGJfZGJhc2VfaW5pdDogbWFr ZSBkYmFzZV9wb2xpY3lkYl9pbml0IHJldHVybiBlcnJvcgorCitleHRlcm4gc2VtYW5hZ2VfaGFu ZGxlX3QgKnNoOworCitjaGFyICpCT09MOworY2hhciAqQk9PTDI7CitjaGFyICpCT09MX05PTkVY SVNURU5UOwordW5zaWduZWQgaW50IEJPT0xTX0NPVU5UOworCitpbnQgYm9vbF90ZXN0X2luaXQo dm9pZCkgeworI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAgICBjaGFyICpib29sc19wYXRoID0gIi9z eXMvZnMvc2VsaW51eC9ib29sZWFucyI7CisKKyAgICBESVIgKmRwOworICAgIHN0cnVjdCBkaXJl bnQgKmVwOworCisgICAgZHAgPSBvcGVuZGlyKGJvb2xzX3BhdGgpOworCisgICAgaWYgKGRwID09 IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciByZWFkaW5nIGJvb2xlYW5z XG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgQk9PTFNfQ09VTlQgPSAwOwor CisgICAgd2hpbGUgKChlcCA9IHJlYWRkaXIoZHApKSkgeworICAgICAgICBCT09MU19DT1VOVCsr OworCisgICAgICAgIGlmIChCT09MU19DT1VOVCA9PSAzKSB7CisgICAgICAgICAgICBCT09MID0g c3RyZHVwKGVwLT5kX25hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEJPT0xTX0NP VU5UID09IDQpIHsKKyAgICAgICAgICAgIEJPT0wyID0gc3RyZHVwKGVwLT5kX25hbWUpOworICAg ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIGlnbm9yZSAuIGFuZCAuLgorICAgIEJPT0xTX0NP VU5UIC09IDI7CisKKyAgICBCT09MX05PTkVYSVNURU5UID0gIm5vbmV4aXN0ZW50Ym9vbCI7CisK KyAgICBjbG9zZWRpcihkcCk7CisKKyAgICBpZiAoQk9PTFNfQ09VTlQgPT0gMCkgeworICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkJPT0xTX0NPVU5UIGlzIHplcm9cbiIpOworICAgICAgICByZXR1 cm4gMTsKKyAgICB9CisjZWxzZQorICAgIEJPT0wgPSAic2VjdXJlX21vZGUiOworICAgIEJPT0wy ID0gImh0dHBkX3RtcF9leGVjIjsKKyAgICBCT09MX05PTkVYSVNURU5UID0gIm5vbmV4aXN0ZW50 Ym9vbCI7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgYm9vbF90ZXN0X2NsZWFudXAo dm9pZCkgeworCXJldHVybiAwOworfQorCitpbnQgYm9vbF9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1 aXRlKSB7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJib29sX2tleV9jcmVhdGUiLCB0ZXN0X2Jv b2xfa2V5X2NyZWF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJib29sX2tleV9leHRyYWN0 IiwgdGVzdF9ib29sX2tleV9leHRyYWN0KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImJvb2xf Y29tcGFyZSIsIHRlc3RfYm9vbF9jb21wYXJlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImJv b2xfY29tcGFyZTIiLCB0ZXN0X2Jvb2xfY29tcGFyZTIpOworICAgIENVX2FkZF90ZXN0KHN1aXRl LCAiYm9vbF9nZXRfc2V0X25hbWUiLCB0ZXN0X2Jvb2xfZ2V0X3NldF9uYW1lKTsKKyAgICBDVV9h ZGRfdGVzdChzdWl0ZSwgImJvb2xfZ2V0X3NldF92YWx1ZSIsIHRlc3RfYm9vbF9nZXRfc2V0X3Zh bHVlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImJvb2xfY3JlYXRlIiwgdGVzdF9ib29sX2Ny ZWF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJib29sX2Nsb25lIiwgdGVzdF9ib29sX2Ns b25lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIENVX2FkZF90ZXN0 KHN1aXRlLCAiYm9vbF9xdWVyeSIsIHRlc3RfYm9vbF9xdWVyeSk7CisgICAgQ1VfYWRkX3Rlc3Qo c3VpdGUsICJib29sX2V4aXN0cyIsIHRlc3RfYm9vbF9leGlzdHMpOworICAgIENVX2FkZF90ZXN0 KHN1aXRlLCAiYm9vbF9jb3VudCIsIHRlc3RfYm9vbF9jb3VudCk7CisgICAgQ1VfYWRkX3Rlc3Qo c3VpdGUsICJib29sX2l0ZXJhdGUiLCB0ZXN0X2Jvb2xfaXRlcmF0ZSk7CisgICAgQ1VfYWRkX3Rl c3Qoc3VpdGUsICJib29sX2xpc3QiLCB0ZXN0X2Jvb2xfbGlzdCk7CisKKyAgICBDVV9hZGRfdGVz dChzdWl0ZSwgImJvb2xfbW9kaWZ5X2RlbF9sb2NhbCIsIHRlc3RfYm9vbF9tb2RpZnlfZGVsX2xv Y2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImJvb2xfcXVlcnlfbG9jYWwiLCB0ZXN0X2Jv b2xfcXVlcnlfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiYm9vbF9leGlzdHNfbG9j YWwiLCB0ZXN0X2Jvb2xfZXhpc3RzX2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImJv b2xfY291bnRfbG9jYWwiLCB0ZXN0X2Jvb2xfY291bnRfbG9jYWwpOworICAgIENVX2FkZF90ZXN0 KHN1aXRlLCAiYm9vbF9pdGVyYXRlX2xvY2FsIiwgdGVzdF9ib29sX2l0ZXJhdGVfbG9jYWwpOwor ICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiYm9vbF9saXN0X2xvY2FsIiwgdGVzdF9ib29sX2xpc3Rf bG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgQ1VfYWRkX3Rl c3Qoc3VpdGUsICJib29sX3NldF9hY3RpdmUiLCB0ZXN0X2Jvb2xfc2V0X2FjdGl2ZSk7CisgICAg Q1VfYWRkX3Rlc3Qoc3VpdGUsICJib29sX3F1ZXJ5X2FjdGl2ZSIsIHRlc3RfYm9vbF9xdWVyeV9h Y3RpdmUpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiYm9vbF9leGlzdHNfYWN0aXZlIiwgdGVz dF9ib29sX2V4aXN0c19hY3RpdmUpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiYm9vbF9jb3Vu dF9hY3RpdmUiLCB0ZXN0X2Jvb2xfY291bnRfYWN0aXZlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgImJvb2xfaXRlcmF0ZV9hY3RpdmUiLCB0ZXN0X2Jvb2xfaXRlcmF0ZV9hY3RpdmUpOworICAg IENVX2FkZF90ZXN0KHN1aXRlLCAiYm9vbF9saXN0X2FjdGl2ZSIsIHRlc3RfYm9vbF9saXN0X2Fj dGl2ZSk7CisgICAgIAorCXJldHVybiAwOworfQorCisvLyBGdW5jdGlvbiBib29sX2tleV9jcmVh dGUKKwordm9pZCBoZWxwZXJfYm9vbF9rZXlfY3JlYXRlKGxldmVsX3QgbGV2ZWwpIHsKKyAgICBz ZW1hbmFnZV9ib29sX2tleV90ICprZXkgPSBOVUxMOworCisgICAgc2V0dXBfaGFuZGxlKGxldmVs KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2tleV9jcmVhdGUoc2gsICIiLCAma2V5 KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleSk7CisKKyAgICBzZW1hbmFn ZV9ib29sX2tleV9mcmVlKGtleSk7CisKKyAgICBrZXkgPSBOVUxMOworCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX2Jvb2xfa2V5X2NyZWF0ZShzaCwgInRlc3Rib29sIiwgJmtleSkgPj0gMCk7Cisg ICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOworCisgICAgc2VtYW5hZ2VfYm9vbF9rZXlf ZnJlZShrZXkpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9ib29sX2tleV9jcmVh dGUoc2gsICJ0ZXN0Ym9vbCIsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxl KGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Jvb2xfa2V5X2NyZWF0ZSh2b2lkKSB7CisgICAgaGVs cGVyX2Jvb2xfa2V5X2NyZWF0ZShTSF9DT05ORUNUKTsKKyAgICBoZWxwZXJfYm9vbF9rZXlfY3Jl YXRlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gYm9vbF9rZXlfZXh0cmFjdAorCisjZGVm aW5lIFNLX05VTEwgMQorI2RlZmluZSBTS19ORVcgMgorI2RlZmluZSBTS19JTkRFWCAzCisjZGVm aW5lIFNLX0tFWV9OVUxMIDQKK3ZvaWQgaGVscGVyX2Jvb2xfa2V5X2V4dHJhY3QobGV2ZWxfdCBs ZXZlbCwgaW50IG1vZGUpIHsKKyAgICBzZW1hbmFnZV9ib29sX3QgKmJvb2xlYW47CisgICAgc2Vt YW5hZ2VfYm9vbF9rZXlfdCAqa2V5OworICAgIGludCByZXN1bHQ7CisgICAgCisgICAgc2V0dXBf aGFuZGxlKGxldmVsKTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIFNLX05V TEw6CisgICAgICAgICAgICBib29sZWFuID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIFNLX05FVzoKKyAgICAgICAgICAgIGJvb2xlYW4gPSBnZXRfYm9vbF9uZXcoKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNLX0lOREVYOgorICAgICAgICAgICAg Ym9vbGVhbiA9IGdldF9ib29sX250aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIFNLX0tFWV9OVUxMOgorICAgICAgICAgICAgYm9vbGVhbiA9IGdldF9ib29sX250aCgwKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1VfRkFJ TF9GQVRBTCgiSW52YWxpZCBtb2RlXG4iKTsKKyAgICB9CisKKyAgICBpZiAobW9kZSA9PSBTS19L RVlfTlVMTCkKKyAgICAgICAgcmVzdWx0ID0gc2VtYW5hZ2VfYm9vbF9rZXlfZXh0cmFjdChzaCwg Ym9vbGVhbiwgTlVMTCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBzZW1hbmFnZV9ib29s X2tleV9leHRyYWN0KHNoLCBib29sZWFuLCAma2V5KTsKKworICAgIENVX0FTU0VSVChyZXN1bHQg Pj0gMCk7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9ib29sX2NvbXBhcmUoYm9vbGVhbiwga2V5 KTsKKworICAgIENVX0FTU0VSVChyZXN1bHQgPT0gMCk7CisKKyAgICBzZW1hbmFnZV9ib29sX2tl eV9mcmVlKGtleSk7CisgICAgc2VtYW5hZ2VfYm9vbF9mcmVlKGJvb2xlYW4pOworCisgICAgY2xl YW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfYm9vbF9rZXlfZXh0cmFjdCh2b2lk KSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9rZXlfZXh0cmFjdChTSF9DT05O RUNULCBTS19OVUxMKSwgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9v bF9rZXlfZXh0cmFjdChTSF9DT05ORUNULCBTS19LRVlfTlVMTCksIFNJR1NFR1YpOworCisgICAg Ly8gRklYTUUKKyAgICAvL2hlbHBlcl9ib29sX2tleV9leHRyYWN0KFNIX0NPTk5FQ1QsIFNLX05F Vyk7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9rZXlfZXh0cmFjdChTSF9DT05O RUNULCBTS19ORVcpLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9ib29sX2tleV9leHRyYWN0KFNI X0NPTk5FQ1QsIFNLX0lOREVYKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Jvb2xf a2V5X2V4dHJhY3QoU0hfVFJBTlMsIFNLX05VTEwpLCBTSUdTRUdWKTsKKyAgICBDVV9BU1NFUlRf U0lHTkFMKGhlbHBlcl9ib29sX2tleV9leHRyYWN0KFNIX1RSQU5TLCBTS19LRVlfTlVMTCksIFNJ R1NFR1YpOworCisgICAgLy8gRklYTUUKKyAgICAvL2hlbHBlcl9ib29sX2tleV9leHRyYWN0KFNI X1RSQU5TLCBTS19ORVcpOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Jvb2xfa2V5X2V4 dHJhY3QoU0hfVFJBTlMsIFNLX05FVyksIFNJR1NFR1YpOworCisgICAgaGVscGVyX2Jvb2xfa2V5 X2V4dHJhY3QoU0hfVFJBTlMsIFNLX0lOREVYKTsKK30KKyN1bmRlZiBTS19OVUxMCisjdW5kZWYg U0tfTkVXCisjdW5kZWYgU0tfSU5ERVgKKyN1bmRlZiBTS19LRVlfTlVMTAorCisvLyBGdW5jdGlv biBib29sX2NvbXBhcmUKKwordm9pZCBoZWxwZXJfYm9vbF9jb21wYXJlKGxldmVsX3QgbGV2ZWws IGludCBib29sX2luZGV4MSwgaW50IGJvb2xfaW5kZXgyKSB7CisgICAgc2VtYW5hZ2VfYm9vbF90 ICpib29sZWFuOworICAgIHNlbWFuYWdlX2Jvb2xfa2V5X3QgKmtleTsKKyAgICBpbnQgcmVzdWx0 OworCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKworICAgIGJvb2xlYW4gPSBnZXRfYm9vbF9u dGgoYm9vbF9pbmRleDEpOworICAgIGtleSA9IGdldF9ib29sX2tleV9udGgoYm9vbF9pbmRleDIp OworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfYm9vbF9jb21wYXJlKGJvb2xlYW4sIGtleSk7CisK KyAgICBpZiAoYm9vbF9pbmRleDEgPT0gYm9vbF9pbmRleDIpIHsKKyAgICAgICAgQ1VfQVNTRVJU KHJlc3VsdCA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1 bHQgIT0gMCk7CisgICAgfQorCisgICAgc2VtYW5hZ2VfYm9vbF9mcmVlKGJvb2xlYW4pOworICAg IHNlbWFuYWdlX2Jvb2xfa2V5X2ZyZWUoa2V5KTsKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7 Cit9CisKK3ZvaWQgdGVzdF9ib29sX2NvbXBhcmUodm9pZCkgeworICAgIGhlbHBlcl9ib29sX2Nv bXBhcmUoU0hfQ09OTkVDVCwgSV9GSVJTVCwgIElfRklSU1QpOworICAgIGhlbHBlcl9ib29sX2Nv bXBhcmUoU0hfQ09OTkVDVCwgSV9GSVJTVCwgIElfU0VDT05EKTsKKyAgICBoZWxwZXJfYm9vbF9j b21wYXJlKFNIX0NPTk5FQ1QsIElfU0VDT05ELCBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfYm9vbF9j b21wYXJlKFNIX0NPTk5FQ1QsIElfU0VDT05ELCBJX1NFQ09ORCk7CisKKyAgICBDVV9BU1NFUlRf U0lHTkFMKGhlbHBlcl9ib29sX2NvbXBhcmUoU0hfQ09OTkVDVCwgSV9OVUxMLCBJX0ZJUlNUKSwg U0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9jb21wYXJlKFNIX0NP Tk5FQ1QsIElfRklSU1QsIElfTlVMTCksIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwo aGVscGVyX2Jvb2xfY29tcGFyZShTSF9DT05ORUNULCBJX05VTEwsICBJX05VTEwpLCBTSUdTRUdW KTsKKworICAgIGhlbHBlcl9ib29sX2NvbXBhcmUoU0hfVFJBTlMsIElfRklSU1QsICBJX0ZJUlNU KTsKKyAgICBoZWxwZXJfYm9vbF9jb21wYXJlKFNIX1RSQU5TLCBJX0ZJUlNULCAgSV9TRUNPTkQp OworICAgIGhlbHBlcl9ib29sX2NvbXBhcmUoU0hfVFJBTlMsIElfU0VDT05ELCBJX0ZJUlNUKTsK KyAgICBoZWxwZXJfYm9vbF9jb21wYXJlKFNIX1RSQU5TLCBJX1NFQ09ORCwgSV9TRUNPTkQpOwor CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9jb21wYXJlKFNIX1RSQU5TLCBJX05V TEwsICBJX0ZJUlNUKSwgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9v bF9jb21wYXJlKFNIX1RSQU5TLCBJX0ZJUlNULCBJX05VTEwpLCBTSUdTRUdWKTsKKyAgICBDVV9B U1NFUlRfU0lHTkFMKGhlbHBlcl9ib29sX2NvbXBhcmUoU0hfVFJBTlMsIElfTlVMTCwgIElfTlVM TCksIFNJR1NFR1YpOworfQorCisvLyBGdW5jdGlvbiBib29sX2NvbXBhcmUyCisKK3ZvaWQgaGVs cGVyX2Jvb2xfY29tcGFyZTIobGV2ZWxfdCBsZXZlbCwgaW50IGJvb2xfaW5kZXgxLCBpbnQgYm9v bF9pbmRleDIpIHsKKyAgICBzZW1hbmFnZV9ib29sX3QgKmJvb2wxOworICAgIHNlbWFuYWdlX2Jv b2xfdCAqYm9vbDI7CisgICAgaW50IHJlc3VsdDsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7 CisKKyAgICBib29sMSA9IGdldF9ib29sX250aChib29sX2luZGV4MSk7CisgICAgYm9vbDIgPSBn ZXRfYm9vbF9udGgoYm9vbF9pbmRleDIpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfYm9vbF9j b21wYXJlMihib29sMSwgYm9vbDIpOworCisgICAgaWYgKGJvb2xfaW5kZXgxID09IGJvb2xfaW5k ZXgyKSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPT0gMCk7CisgICAgfQorICAgIGVsc2Ug eworICAgICAgICBDVV9BU1NFUlQocmVzdWx0ICE9IDApOworICAgIH0KKworICAgIHNlbWFuYWdl X2Jvb2xfZnJlZShib29sMSk7CisgICAgc2VtYW5hZ2VfYm9vbF9mcmVlKGJvb2wyKTsgCisgICAg Y2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfYm9vbF9jb21wYXJlMih2b2lk KSB7CisgICAgaGVscGVyX2Jvb2xfY29tcGFyZTIoU0hfQ09OTkVDVCwgSV9GSVJTVCwgIElfRklS U1QpOworICAgIGhlbHBlcl9ib29sX2NvbXBhcmUyKFNIX0NPTk5FQ1QsIElfRklSU1QsICBJX1NF Q09ORCk7CisgICAgaGVscGVyX2Jvb2xfY29tcGFyZTIoU0hfQ09OTkVDVCwgSV9TRUNPTkQsIElf RklSU1QpOworICAgIGhlbHBlcl9ib29sX2NvbXBhcmUyKFNIX0NPTk5FQ1QsIElfU0VDT05ELCBJ X1NFQ09ORCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9ib29sX2NvbXBhcmUyKFNI X0NPTk5FQ1QsIElfTlVMTCwgSV9GSVJTVCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdW KTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9ib29sX2NvbXBhcmUyKFNIX0NPTk5FQ1Qs IElfRklSU1QsIElfTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBD VV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9ib29sX2NvbXBhcmUyKFNIX0NPTk5FQ1QsIElfTlVMTCwg SV9OVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworCisgICAgaGVscGVyX2Jv b2xfY29tcGFyZTIoU0hfVFJBTlMsIElfRklSU1QsICBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfYm9v bF9jb21wYXJlMihTSF9UUkFOUywgSV9GSVJTVCwgIElfU0VDT05EKTsKKyAgICBoZWxwZXJfYm9v bF9jb21wYXJlMihTSF9UUkFOUywgSV9TRUNPTkQsIElfRklSU1QpOworICAgIGhlbHBlcl9ib29s X2NvbXBhcmUyKFNIX1RSQU5TLCBJX1NFQ09ORCwgSV9TRUNPTkQpOworCisgICAgQ1VfQVNTRVJU X1NJR05BTChoZWxwZXJfYm9vbF9jb21wYXJlMihTSF9UUkFOUywgSV9OVUxMLCBJX0ZJUlNUKSwg U0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9jb21wYXJlMihTSF9U UkFOUywgSV9GSVJTVCwgSV9OVUxMKSwgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTCho ZWxwZXJfYm9vbF9jb21wYXJlMihTSF9UUkFOUywgSV9OVUxMLCBJX05VTEwpLCBTSUdTRUdWKTsK K30KKworLy8gRnVuY3Rpb24gYm9vbF9nZXRfbmFtZSwgYm9vbF9zZXRfbmFtZQorCit2b2lkIGhl bHBlcl9ib29sX2dldF9zZXRfbmFtZShsZXZlbF90IGxldmVsLCBpbnQgYm9vbF9pbmRleCwgY29u c3QgY2hhciAqbmFtZSkgeworICAgIHNlbWFuYWdlX2Jvb2xfdCAqYm9vbGVhbjsKKyAgICBjb25z dCBjaGFyICpuZXdfbmFtZSA9IE5VTEw7CisgICAgCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsK KworICAgIGJvb2xlYW4gPSBnZXRfYm9vbF9udGgoYm9vbF9pbmRleCk7CisKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfYm9vbF9zZXRfbmFtZShzaCwgYm9vbGVhbiwgbmFtZSkgPj0gMCk7CisKKyAg ICBuZXdfbmFtZSA9IHNlbWFuYWdlX2Jvb2xfZ2V0X25hbWUoYm9vbGVhbik7CisKKyAgICBDVV9B U1NFUlRfUFRSX05PVF9OVUxMKG5ld19uYW1lKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFM KG5ld19uYW1lLCBuYW1lKTsKKworICAgIHNlbWFuYWdlX2Jvb2xfZnJlZShib29sZWFuKTsKKyAg ICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7Cit9CisKK3ZvaWQgdGVzdF9ib29sX2dldF9zZXRfbmFt ZSh2b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9nZXRfc2V0X25hbWUo U0hfQ09OTkVDVCwgSV9GSVJTVCwgTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdW KTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9ib29sX2dldF9zZXRfbmFtZShTSF9DT05O RUNULCBJX05VTEwsICJ0ZXN0Ym9vbCIpLAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7 CisKKyAgICBoZWxwZXJfYm9vbF9nZXRfc2V0X25hbWUoU0hfQ09OTkVDVCwgSV9GSVJTVCwgInRl c3Rib29sIik7CisgICAgaGVscGVyX2Jvb2xfZ2V0X3NldF9uYW1lKFNIX0NPTk5FQ1QsIElfRklS U1QsICIiKTsKKyAgICBoZWxwZXJfYm9vbF9nZXRfc2V0X25hbWUoU0hfQ09OTkVDVCwgSV9TRUNP TkQsICJ0ZXN0Ym9vbCIpOworICAgIGhlbHBlcl9ib29sX2dldF9zZXRfbmFtZShTSF9DT05ORUNU LCBJX1NFQ09ORCwgIiIpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9nZXRf c2V0X25hbWUoU0hfVFJBTlMsIElfRklSU1QsIE5VTEwpLAorICAgICAgICAgICAgICAgICAgICAg U0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9nZXRfc2V0X25hbWUo U0hfVFJBTlMsIElfTlVMTCwgInRlc3Rib29sIiksCisgICAgICAgICAgICAgICAgICAgICBTSUdT RUdWKTsKKworICAgIGhlbHBlcl9ib29sX2dldF9zZXRfbmFtZShTSF9UUkFOUywgSV9GSVJTVCwg InRlc3Rib29sIik7CisgICAgaGVscGVyX2Jvb2xfZ2V0X3NldF9uYW1lKFNIX1RSQU5TLCBJX0ZJ UlNULCAiIik7CisgICAgaGVscGVyX2Jvb2xfZ2V0X3NldF9uYW1lKFNIX1RSQU5TLCBJX1NFQ09O RCwgInRlc3Rib29sIik7CisgICAgaGVscGVyX2Jvb2xfZ2V0X3NldF9uYW1lKFNIX1RSQU5TLCBJ X1NFQ09ORCwgIiIpOworfQorCisvLyBGdW5jdGlvbiBib29sX2dldF92YWx1ZSwgYm9vbF9zZXRf dmFsdWUKKwordm9pZCBoZWxwZXJfYm9vbF9nZXRfc2V0X3ZhbHVlKGludCBib29sX2luZGV4LCBp bnQgdmFsdWUpIHsKKyAgICBzZW1hbmFnZV9ib29sX3QgKmJvb2xlYW47CisgICAgaW50IG5ld192 YWx1ZSA9IDA7CisKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisgICAgYm9vbGVhbiA9 IGdldF9ib29sX250aChib29sX2luZGV4KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNU KTsKKworICAgIHNlbWFuYWdlX2Jvb2xfc2V0X3ZhbHVlKGJvb2xlYW4sIHZhbHVlKTsKKworICAg IG5ld192YWx1ZSA9IHNlbWFuYWdlX2Jvb2xfZ2V0X3ZhbHVlKGJvb2xlYW4pOworCisgICAgQ1Vf QVNTRVJUKG5ld192YWx1ZSA9PSB2YWx1ZSk7CisKKyAgICBzZW1hbmFnZV9ib29sX2ZyZWUoYm9v bGVhbik7Cit9CisKK3ZvaWQgdGVzdF9ib29sX2dldF9zZXRfdmFsdWUodm9pZCkgeworICAgIENV X0FTU0VSVF9TSUdOQUwoaGVscGVyX2Jvb2xfZ2V0X3NldF92YWx1ZShJX05VTEwsIDApLCBTSUdT RUdWKTsKKworICAgIGhlbHBlcl9ib29sX2dldF9zZXRfdmFsdWUoSV9GSVJTVCwgMSk7CisgICAg aGVscGVyX2Jvb2xfZ2V0X3NldF92YWx1ZShJX0ZJUlNULCAwKTsKKyAgICBoZWxwZXJfYm9vbF9n ZXRfc2V0X3ZhbHVlKElfU0VDT05ELCAxKTsKKyAgICBoZWxwZXJfYm9vbF9nZXRfc2V0X3ZhbHVl KElfU0VDT05ELCAwKTsKK30KKworLy8gRnVuY3Rpb24gYm9vbF9jcmVhdGUKKwordm9pZCBoZWxw ZXJfYm9vbF9jcmVhdGUobGV2ZWxfdCBsZXZlbCkgeworICAgIHNlbWFuYWdlX2Jvb2xfdCAqYm9v bGVhbjsKKyAgICAKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgQ1VfQVNTRVJUKHNl bWFuYWdlX2Jvb2xfY3JlYXRlKHNoLCAmYm9vbGVhbikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRf UFRSX05VTEwoc2VtYW5hZ2VfYm9vbF9nZXRfbmFtZShib29sZWFuKSk7CisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX2Jvb2xfZ2V0X3ZhbHVlKGJvb2xlYW4pID09IDApOworCisgICAgY2xlYW51cF9o YW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfYm9vbF9jcmVhdGUodm9pZCkgeworICAgIENV X0FTU0VSVF9TSUdOQUwoaGVscGVyX2Jvb2xfY3JlYXRlKFNIX05VTEwpLCBTSUdTRUdWKTsKKyAg ICBoZWxwZXJfYm9vbF9jcmVhdGUoU0hfSEFORExFKTsKKyAgICBoZWxwZXJfYm9vbF9jcmVhdGUo U0hfQ09OTkVDVCk7CisgICAgaGVscGVyX2Jvb2xfY3JlYXRlKFNIX1RSQU5TKTsKK30KKworLy8g RnVuY3Rpb24gYm9vbF9jbG9uZQorCit2b2lkIGhlbHBlcl9ib29sX2Nsb25lKGxldmVsX3QgbGV2 ZWwsIGludCBib29sX2luZGV4KSB7CisgICAgc2VtYW5hZ2VfYm9vbF90ICpib29sZWFuOworICAg IHNlbWFuYWdlX2Jvb2xfdCAqYm9vbGVhbl9jbG9uZTsKKyAgICBjb25zdCBjaGFyICpzdHI7Cisg ICAgY29uc3QgY2hhciAqc3RyX2Nsb25lOworICAgIGludCB2YWx1ZTsKKyAgICBpbnQgdmFsdWVf Y2xvbmU7CisgICAgCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKworICAgIGJvb2xlYW4gPSBn ZXRfYm9vbF9udGgoYm9vbF9pbmRleCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9j bG9uZShzaCwgYm9vbGVhbiwgJmJvb2xlYW5fY2xvbmUpID49IDApOworCisgICAgc3RyID0gc2Vt YW5hZ2VfYm9vbF9nZXRfbmFtZShib29sZWFuKTsKKyAgICBzdHJfY2xvbmUgPSBzZW1hbmFnZV9i b29sX2dldF9uYW1lKGJvb2xlYW5fY2xvbmUpOworCisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVB TChzdHIsIHN0cl9jbG9uZSk7CisKKyAgICB2YWx1ZSA9IHNlbWFuYWdlX2Jvb2xfZ2V0X3ZhbHVl KGJvb2xlYW4pOworICAgIHZhbHVlX2Nsb25lID0gc2VtYW5hZ2VfYm9vbF9nZXRfdmFsdWUoYm9v bGVhbl9jbG9uZSk7CisKKyAgICBDVV9BU1NFUlRfRVFVQUwodmFsdWUsIHZhbHVlX2Nsb25lKTsK KworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Jvb2xfY2xvbmUo dm9pZCkgeworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Jvb2xfY2xvbmUoU0hfQ09OTkVD VCwgSV9OVUxMKSwgU0lHU0VHVik7CisgICAgaGVscGVyX2Jvb2xfY2xvbmUoU0hfQ09OTkVDVCwg SV9GSVJTVCk7CisgICAgaGVscGVyX2Jvb2xfY2xvbmUoU0hfQ09OTkVDVCwgSV9TRUNPTkQpOwor CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9jbG9uZShTSF9UUkFOUywgSV9OVUxM KSwgU0lHU0VHVik7CisgICAgaGVscGVyX2Jvb2xfY2xvbmUoU0hfVFJBTlMsIElfRklSU1QpOwor ICAgIGhlbHBlcl9ib29sX2Nsb25lKFNIX1RSQU5TLCBJX1NFQ09ORCk7Cit9CisKKy8vIEZ1bmN0 aW9uIGJvb2xfcXVlcnkKKwordm9pZCBoZWxwZXJfYm9vbF9xdWVyeShsZXZlbF90IGxldmVsLCBj b25zdCBjaGFyICpib29sX3N0ciwgaW50IGV4cF9yZXN1bHQpIHsKKyAgICBzZW1hbmFnZV9ib29s X2tleV90ICprZXk7CisgICAgLy8gc29tZSBub24tbnVsbCB2YWx1ZQorICAgIHNlbWFuYWdlX2Jv b2xfdCAqcmVzcG9uc2UgPSAodm9pZCAqKSA0MjsKKyAgICBjb25zdCBjaGFyICpuYW1lOworCisg ICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKworICAgIGtleSA9IGdldF9ib29sX2tleV9mcm9tX3N0 cihib29sX3N0cik7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9xdWVyeShzaCwga2V5 LCAmcmVzcG9uc2UpID49IDApOworCisgICAgaWYgKGV4cF9yZXN1bHQgPj0gMCkgeworICAgICAg ICBuYW1lID0gc2VtYW5hZ2VfYm9vbF9nZXRfbmFtZShyZXNwb25zZSk7CisKKyAgICAgICAgQ1Vf QVNTRVJUX1NUUklOR19FUVVBTChuYW1lLCBib29sX3N0cik7CisgICAgfQorICAgIGVsc2Ugewor ICAgICAgICBDVV9BU1NFUlRfUFRSX05VTEwocmVzcG9uc2UpOworICAgIH0KKworICAgIGNsZWFu dXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Jvb2xfcXVlcnkodm9pZCkgeworICAg IENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Jvb2xfcXVlcnkoU0hfQ09OTkVDVCwgTlVMTCwgLTEp LCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9ib29sX3F1ZXJ5KFNIX0NPTk5FQ1QsIEJPT0wsICAx KTsKKyAgICBoZWxwZXJfYm9vbF9xdWVyeShTSF9DT05ORUNULCBCT09MMiwgMSk7CisgICAgaGVs cGVyX2Jvb2xfcXVlcnkoU0hfQ09OTkVDVCwgQk9PTF9OT05FWElTVEVOVCwgLTEpOworCisgICAg Q1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9xdWVyeShTSF9UUkFOUywgTlVMTCwgLTEpLCBT SUdTRUdWKTsKKworICAgIGhlbHBlcl9ib29sX3F1ZXJ5KFNIX1RSQU5TLCBCT09MLCAgMSk7Cisg ICAgaGVscGVyX2Jvb2xfcXVlcnkoU0hfVFJBTlMsIEJPT0wyLCAxKTsKKyAgICBoZWxwZXJfYm9v bF9xdWVyeShTSF9UUkFOUywgQk9PTF9OT05FWElTVEVOVCwgLTEpOworfQorCisvLyBGdW5jdG9u IGJvb2xfZXhpc3RzCisKK3ZvaWQgaGVscGVyX2Jvb2xfZXhpc3RzKGxldmVsX3QgbGV2ZWwsIGNo YXIgKiBib29sX3N0ciwgaW50IGV4cF9yZXNwb25zZSkgeworICAgIHNlbWFuYWdlX2Jvb2xfa2V5 X3QgKmtleTsKKyAgICBpbnQgcmVzcG9uc2U7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOwor CisgICAga2V5ID0gZ2V0X2Jvb2xfa2V5X2Zyb21fc3RyKGJvb2xfc3RyKTsKKworICAgIENVX0FT U0VSVChzZW1hbmFnZV9ib29sX2V4aXN0cyhzaCwga2V5LCAmcmVzcG9uc2UpID49IDApOworICAg IENVX0FTU0VSVChyZXNwb25zZSA9PSBleHBfcmVzcG9uc2UpOworCisgICAgQ1VfQVNTRVJUX1NJ R05BTChzZW1hbmFnZV9ib29sX2V4aXN0cyhzaCwga2V5LCBOVUxMKSwgU0lHU0VHVik7CisKKyAg ICBzZW1hbmFnZV9ib29sX2tleV9mcmVlKGtleSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZl bCk7Cit9CisKK3ZvaWQgdGVzdF9ib29sX2V4aXN0cyh2b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NJ R05BTChoZWxwZXJfYm9vbF9leGlzdHMoU0hfQ09OTkVDVCwgTlVMTCwgMCksIFNJR1NFR1YpOwor CisgICAgaGVscGVyX2Jvb2xfZXhpc3RzKFNIX0NPTk5FQ1QsIEJPT0wsICAxKTsKKyAgICBoZWxw ZXJfYm9vbF9leGlzdHMoU0hfQ09OTkVDVCwgQk9PTDIsIDEpOworICAgIGhlbHBlcl9ib29sX2V4 aXN0cyhTSF9DT05ORUNULCBCT09MX05PTkVYSVNURU5ULCAwKTsKKworICAgIENVX0FTU0VSVF9T SUdOQUwoaGVscGVyX2Jvb2xfZXhpc3RzKFNIX1RSQU5TLCBOVUxMLCAwKSwgU0lHU0VHVik7CisK KyAgICBoZWxwZXJfYm9vbF9leGlzdHMoU0hfVFJBTlMsIEJPT0wsICAxKTsKKyAgICBoZWxwZXJf Ym9vbF9leGlzdHMoU0hfVFJBTlMsIEJPT0wyLCAxKTsKKyAgICBoZWxwZXJfYm9vbF9leGlzdHMo U0hfVFJBTlMsIEJPT0xfTk9ORVhJU1RFTlQsIDApOworfQorCisvLyBGdW5jdGlvbiBib29sX2Nv dW50CisKK3ZvaWQgdGVzdF9ib29sX2NvdW50KHZvaWQpIHsKKyAgICB1bnNpZ25lZCBpbnQgcmVz cG9uc2U7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Jvb2xfY291bnQoTlVMTCwg JnJlc3BvbnNlKSwgU0lHU0VHVik7CisKKyAgICAvL2hhbmRsZQorICAgIHNldHVwX2hhbmRsZShT SF9IQU5ETEUpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfY291bnQoc2gsICZyZXNw b25zZSkgPCAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50KHNoLCBOVUxM KSA8IDApOworICAgIAorICAgIGNsZWFudXBfaGFuZGxlKFNIX0hBTkRMRSk7CisgICAgCisgICAg Ly9jb25uZWN0CisgICAgcmVzcG9uc2UgPSAwOworICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNU KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50KHNoLCAmcmVzcG9uc2UpID49 IDApOworI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gQk9P TFNfQ09VTlQpOworI2Vsc2UKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPiAwKTsKKyNlbmRpZgor CisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9ib29sX2NvdW50KHNoLCBOVUxMKSwgU0lH U0VHVik7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIC8vdHJhbnMK KyAgICByZXNwb25zZSA9IDA7CisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50KHNoLCAmcmVzcG9uc2UpID49IDApOworI2lmIFZF UlNfQ0hFQ0soMiwgNSkKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gQk9PTFNfQ09VTlQpOwor I2Vsc2UKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPiAwKTsKKyNlbmRpZgorCisgICAgQ1VfQVNT RVJUX1NJR05BTChzZW1hbmFnZV9ib29sX2NvdW50KHNoLCBOVUxMKSwgU0lHU0VHVik7CisKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIGJvb2xfaXRlcmF0 ZQorCit1bnNpZ25lZCBpbnQgY291bnRlcl9ib29sX2l0ZXJhdGUgPSAwOworCitpbnQgaGFuZGxl cl9ib29sX2l0ZXJhdGUoY29uc3Qgc2VtYW5hZ2VfYm9vbF90ICpyZWNvcmQsIHZvaWQgKnZhcmcp IHsKKyAgICBjb3VudGVyX2Jvb2xfaXRlcmF0ZSsrOworICAgIHJldHVybiAwOworfQorCit2b2lk IGhlbHBlcl9ib29sX2l0ZXJhdGVfaW52YWxpZCh2b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NJR05B TChzZW1hbmFnZV9ib29sX2l0ZXJhdGUoTlVMTCwgJmhhbmRsZXJfYm9vbF9pdGVyYXRlLCBOVUxM KSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworCisgICAgc2V0dXBfaGFuZGxlKFNI X0hBTkRMRSk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9pdGVyYXRlKHNoLCAmaGFu ZGxlcl9ib29sX2l0ZXJhdGUsIE5VTEwpIDwgMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf Ym9vbF9pdGVyYXRlKHNoLCBOVUxMLCBOVUxMKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUo U0hfSEFORExFKTsKK30KKwordm9pZCBoZWxwZXJfYm9vbF9pdGVyYXRlKGxldmVsX3QgbGV2ZWwp IHsKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgY291bnRlcl9ib29sX2l0ZXJhdGUg PSAwOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfaXRlcmF0ZShzaCwgJmhhbmRsZXJf Ym9vbF9pdGVyYXRlLCBOVUxMKSA+PSAwKTsKKyNpZiBWRVJTX0NIRUNLKDIsIDUpCisgICAgQ1Vf QVNTRVJUKGNvdW50ZXJfYm9vbF9pdGVyYXRlID09IEJPT0xTX0NPVU5UKTsKKyNlbHNlCisgICAg Q1VfQVNTRVJUKGNvdW50ZXJfYm9vbF9pdGVyYXRlID4gMCk7CisjZW5kaWYKKworICAgIENVX0FT U0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9pdGVyYXRlKHNoLCBOVUxMLCBOVUxMKSwgU0lHU0VH Vik7CisKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7Cit9CisKK3ZvaWQgdGVzdF9ib29sX2l0 ZXJhdGUodm9pZCkgeworICAgIGhlbHBlcl9ib29sX2l0ZXJhdGVfaW52YWxpZCgpOworICAgIGhl bHBlcl9ib29sX2l0ZXJhdGUoU0hfQ09OTkVDVCk7CisgICAgaGVscGVyX2Jvb2xfaXRlcmF0ZShT SF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIGJvb2xfbGlzdAorCit2b2lkIGhlbHBlcl9ib29s X2xpc3RfaW52YWxpZCh2b2lkKSB7CisgICAgc2VtYW5hZ2VfYm9vbF90ICoqcmVjb3JkczsKKyAg ICB1bnNpZ25lZCBpbnQgY291bnQ7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Jv b2xfbGlzdChOVUxMLCAmcmVjb3JkcywgJmNvdW50KSwgU0lHU0VHVik7CisKKyAgICBzZXR1cF9o YW5kbGUoU0hfSEFORExFKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9saXN0 KHNoLCAmcmVjb3JkcywgJmNvdW50KSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jv b2xfbGlzdChzaCwgTlVMTCwgJmNvdW50KSA8IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9i b29sX2xpc3Qoc2gsICZyZWNvcmRzLCBOVUxMKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUo U0hfSEFORExFKTsKK30KKwordm9pZCBoZWxwZXJfYm9vbF9saXN0KGxldmVsX3QgbGV2ZWwpIHsK KyAgICBzZW1hbmFnZV9ib29sX3QgKipyZWNvcmRzOworICAgIHVuc2lnbmVkIGludCBjb3VudDsK KworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X2Jvb2xfbGlzdChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisjaWYgVkVSU19DSEVDSygy LCA1KQorICAgIENVX0FTU0VSVChjb3VudCA9PSBCT09MU19DT1VOVCk7CisjZWxzZQorICAgIENV X0FTU0VSVChjb3VudCA+IDApOworI2VuZGlmCisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZWNv cmRzW2ldKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsKKyAgICAgICAgc2VtYW5hZ2VfYm9vbF9mcmVlKHJlY29yZHNbaV0pOworICAgIH0K KworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9saXN0KHNoLCBOVUxMLCAmY291 bnQpLCBTSUdTRUdWKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Jvb2xfbGlzdChz aCwgJnJlY29yZHMsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVs KTsKK30KKwordm9pZCB0ZXN0X2Jvb2xfbGlzdCh2b2lkKSB7CisgICAgaGVscGVyX2Jvb2xfbGlz dF9pbnZhbGlkKCk7CisgICAgaGVscGVyX2Jvb2xfbGlzdChTSF9DT05ORUNUKTsKKyAgICBoZWxw ZXJfYm9vbF9saXN0KFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gYm9vbF9tb2RpZnlfbG9j YWwsIGJvb2xfZGVsX2xvY2FsCisKK3ZvaWQgaGVscGVyX2Jvb2xfbW9kaWZ5X2RlbF9sb2NhbChs ZXZlbF90IGxldmVsLCBpbnQgYm9vbF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZXhwX3Jlc3VsdCkgeworICAgIHNlbWFuYWdlX2Jvb2xfdCAqYm9vbGVhbjsK KyAgICBzZW1hbmFnZV9ib29sX3QgKmJvb2xlYW5fbG9jYWw7CisgICAgc2VtYW5hZ2VfYm9vbF9r ZXlfdCAqa2V5ID0gTlVMTDsKKyAgICBpbnQgcmVzdWx0OworICAgIGludCBuZXdfdmFsdWU7CisK KyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgYm9vbGVhbiA9IGdldF9ib29sX250aChi b29sX2luZGV4KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2tleV9leHRyYWN0KHNo LCBib29sZWFuLCAma2V5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleSk7 CisKKyAgICBuZXdfdmFsdWUgPSAhc2VtYW5hZ2VfYm9vbF9nZXRfdmFsdWUoYm9vbGVhbik7Cisg ICAgc2VtYW5hZ2VfYm9vbF9zZXRfdmFsdWUoYm9vbGVhbiwgbmV3X3ZhbHVlKTsKKworICAgIHJl c3VsdCA9IHNlbWFuYWdlX2Jvb2xfbW9kaWZ5X2xvY2FsKHNoLCBrZXksIGJvb2xlYW4pOworCisg ICAgaWYgKGV4cF9yZXN1bHQgPCAwKSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPCAwKTsK KyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPj0gMCk7CisKKyAg ICAgICAgLy8gd3JpdGUgY2hhbmdlcyB0byBmaWxlCisgICAgICAgIGlmIChsZXZlbCA9PSBTSF9U UkFOUykgeworICAgICAgICAgICAgaGVscGVyX2NvbW1pdCgpOworICAgICAgICAgICAgaGVscGVy X2JlZ2luX3RyYW5zYWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfYm9vbF9xdWVyeV9sb2NhbChzaCwga2V5LCAmYm9vbGVhbl9sb2NhbCkgPj0gMCk7Cisg ICAgICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvbXBhcmUyKGJvb2xlYW5fbG9jYWwsIGJv b2xlYW4pID09IDApOworCisgICAgICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2RlbF9sb2Nh bChzaCwga2V5KSA+PSAwKTsKKworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9xdWVy eV9sb2NhbChzaCwga2V5LCAmYm9vbGVhbl9sb2NhbCkgPCAwKTsKKyAgICB9CisKKyAgICBzZW1h bmFnZV9ib29sX2tleV9mcmVlKGtleSk7CisgICAgc2VtYW5hZ2VfYm9vbF9mcmVlKGJvb2xlYW4p OworCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfYm9vbF9tb2Rp ZnlfZGVsX2xvY2FsKHZvaWQpIHsKKyAgICBoZWxwZXJfYm9vbF9tb2RpZnlfZGVsX2xvY2FsKFNI X0NPTk5FQ1QsIElfRklSU1QsICAtMSk7CisgICAgaGVscGVyX2Jvb2xfbW9kaWZ5X2RlbF9sb2Nh bChTSF9DT05ORUNULCBJX1NFQ09ORCwgLTEpOworCisgICAgaGVscGVyX2Jvb2xfbW9kaWZ5X2Rl bF9sb2NhbChTSF9UUkFOUywgSV9GSVJTVCwgIDEpOworICAgIGhlbHBlcl9ib29sX21vZGlmeV9k ZWxfbG9jYWwoU0hfVFJBTlMsIElfU0VDT05ELCAxKTsKK30KKworLy8gRnVuY3Rpb24gYm9vbF9x dWVyeV9sb2NhbAorCit2b2lkIHRlc3RfYm9vbF9xdWVyeV9sb2NhbCh2b2lkKSB7CisgICAgc2Vt YW5hZ2VfYm9vbF9rZXlfdCAqa2V5ID0gTlVMTDsKKyAgICBzZW1hbmFnZV9ib29sX3QgKnJlc3Bv bnNlID0gTlVMTDsKKworICAgIC8vIGNvbm5lY3QKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVD VCk7CisKKyAgICBrZXkgPSBnZXRfYm9vbF9rZXlfbnRoKElfRklSU1QpOworCisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX2Jvb2xfcXVlcnlfbG9jYWwoc2gsIGtleSwgJnJlc3BvbnNlKSA8IDApOwor ICAgIENVX0FTU0VSVF9QVFJfTlVMTChyZXNwb25zZSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShT SF9DT05ORUNUKTsKKworICAgIC8vIHRyYW5zYWN0aW9uCisgICAgc2V0dXBfaGFuZGxlKFNIX1RS QU5TKTsKKworICAgIGtleSA9IGdldF9ib29sX2tleV9udGgoSV9GSVJTVCk7CisKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfYm9vbF9xdWVyeV9sb2NhbChzaCwga2V5LCAmcmVzcG9uc2UpIDwgMCk7 CisgICAgQ1VfQVNTRVJUX1BUUl9OVUxMKHJlc3BvbnNlKTsKKworICAgIGFkZF9sb2NhbF9ib29s KElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfcXVlcnlfbG9jYWwoc2gs IGtleSwgJnJlc3BvbnNlKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKHJlc3Bv bnNlKTsKKworICAgIHNlbWFuYWdlX2Jvb2xfa2V5X2ZyZWUoa2V5KTsKKyAgICBrZXkgPSBnZXRf Ym9vbF9rZXlfbnRoKElfU0VDT05EKTsKKworICAgIGFkZF9sb2NhbF9ib29sKElfU0VDT05EKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZyZXNw b25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZXNwb25zZSk7CisKKyAg ICBkZWxldGVfbG9jYWxfYm9vbChJX0ZJUlNUKTsKKyAgICBkZWxldGVfbG9jYWxfYm9vbChJX1NF Q09ORCk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBi b29sX2V4aXN0c19sb2NhbAorCit2b2lkIHRlc3RfYm9vbF9leGlzdHNfbG9jYWwodm9pZCkgewor ICAgIGludCByZXNwb25zZSA9IC0xOworICAgIHNlbWFuYWdlX2Jvb2xfa2V5X3QgKmtleTsKKyAg ICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAga2V5ID0gZ2V0X2Jvb2xfa2V5X250aChJ X0ZJUlNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2V4aXN0c19sb2NhbChzaCwg a2V5LCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAwKTsKKwor ICAgIGFkZF9sb2NhbF9ib29sKElfRklSU1QpOworICAgIHJlc3BvbnNlID0gLTE7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9leGlzdHNfbG9jYWwoc2gsIGtleSwgJnJlc3BvbnNlKSA+ PSAwKTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gMSk7CisKKyAgICBkZWxldGVfbG9jYWxf Ym9vbChJX0ZJUlNUKTsKKyAgICByZXNwb25zZSA9IC0xOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX2Jvb2xfZXhpc3RzX2xvY2FsKHNoLCBrZXksICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1Vf QVNTRVJUKHJlc3BvbnNlID09IDApOworCisgICAgcmVzcG9uc2UgPSAtMTsKKworICAgIC8vQ1Vf QVNTRVJUKHNlbWFuYWdlX2Jvb2xfZXhpc3RzX2xvY2FsKHNoLCBOVUxMLCAmcmVzcG9uc2UpID49 IDApOworICAgIC8vQ1VfQVNTRVJUKHJlc3BvbnNlID09IDApOworCisgICAgLy9DVV9BU1NFUlRf U0lHTkFMKHNlbWFuYWdlX2Jvb2xfZXhpc3RzX2xvY2FsKHNoLCBrZXksIE5VTEwpLCBTSUdTRUdW KTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gYm9v bF9jb3VudF9sb2NhbAorCit2b2lkIHRlc3RfYm9vbF9jb3VudF9sb2NhbCh2b2lkKSB7CisgICAg dW5zaWduZWQgaW50IHJlc3BvbnNlOworICAgIHVuc2lnbmVkIGludCBpbml0X2NvdW50OworCisg ICAgLy8gbnVsbAorICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9jb3VudF9sb2Nh bChOVUxMLCAmcmVzcG9uc2UpLCBTSUdTRUdWKTsKKworICAgIC8vIGhhbmRsZQorICAgIHNldHVw X2hhbmRsZShTSF9IQU5ETEUpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfY291bnRf bG9jYWwoc2gsICZyZXNwb25zZSkgPCAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX0hBTkRM RSk7CisgICAgCisgICAgLy8gY29ubmVjdAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50X2xvY2FsKHNoLCAmaW5pdF9jb3Vu dCkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Jvb2xfY291bnRfbG9j YWwoc2gsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1Qp OworICAgIAorICAgIC8vIHRyYW5zYWN0aW9uCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50X2xvY2FsKHNoLCAmcmVzcG9uc2Up ID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSBpbml0X2NvdW50KTsKKworICAgIGFk ZF9sb2NhbF9ib29sKElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfY291 bnRfbG9jYWwoc2gsICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09 IGluaXRfY291bnQgKyAxKTsKKworICAgIGFkZF9sb2NhbF9ib29sKElfU0VDT05EKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50X2xvY2FsKHNoLCAmcmVzcG9uc2UpID49IDAp OworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSBpbml0X2NvdW50ICsgMik7CisgICAgCisgICAg ZGVsZXRlX2xvY2FsX2Jvb2woSV9TRUNPTkQpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jv b2xfY291bnRfbG9jYWwoc2gsICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3Bv bnNlID09IGluaXRfY291bnQgKyAxKTsKKworICAgIGRlbGV0ZV9sb2NhbF9ib29sKElfRklSU1Qp OworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9ib29sX2NvdW50X2xvY2FsKHNoLCBO VUxMKSwgU0lHU0VHVik7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8v IEZ1bmN0aW9uIGJvb2xfaXRlcmF0ZV9sb2NhbAorCit1bnNpZ25lZCBpbnQgY291bnRlcl9ib29s X2l0ZXJhdGVfbG9jYWwgPSAwOworCitpbnQgaGFuZGxlcl9ib29sX2l0ZXJhdGVfbG9jYWwoY29u c3Qgc2VtYW5hZ2VfYm9vbF90ICpyZWNvcmQsIHZvaWQgKnZhcmcpIHsKKyAgICBjb3VudGVyX2Jv b2xfaXRlcmF0ZV9sb2NhbCsrOworICAgIHJldHVybiAwOworfQorCit2b2lkIHRlc3RfYm9vbF9p dGVyYXRlX2xvY2FsKHZvaWQpIHsKKyAgICB1bnNpZ25lZCBpbnQgaW5pdF9jb3VudDsKKworICAg IC8vIG51bGwKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Jvb2xfaXRlcmF0ZV9sb2Nh bChOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlcl9ib29s X2l0ZXJhdGVfbG9jYWwsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIC8vIGhhbmRsZQorICAgIHNl dHVwX2hhbmRsZShTSF9IQU5ETEUpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfaXRl cmF0ZV9sb2NhbChzaCwgJmhhbmRsZXJfYm9vbF9pdGVyYXRlX2xvY2FsLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgPCAwKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9ib29sX2l0ZXJhdGVfbG9jYWwoc2gsIE5VTEwsIE5VTEwpIDwgMCk7CisKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9IQU5ETEUpOworICAgIAorICAgIC8vIGNvbm5lY3QKKyAgICBz ZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9j b3VudF9sb2NhbChzaCwgJmluaXRfY291bnQpID49IDApOworCisgICAgY291bnRlcl9ib29sX2l0 ZXJhdGVfbG9jYWwgPSAwOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2l0ZXJhdGVfbG9j YWwoc2gsICZoYW5kbGVyX2Jvb2xfaXRlcmF0ZV9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpID49IDApOworICAgIENVX0FTU0VSVChjb3VudGVy X2Jvb2xfaXRlcmF0ZV9sb2NhbCA9PSBpbml0X2NvdW50KTsKKworICAgIGNsZWFudXBfaGFuZGxl KFNIX0NPTk5FQ1QpOworCisgICAgLy8gdHJhbnNhY3Rpb24KKyAgICBzZXR1cF9oYW5kbGUoU0hf VFJBTlMpOworCisgICAgY291bnRlcl9ib29sX2l0ZXJhdGVfbG9jYWwgPSAwOworICAgIENVX0FT U0VSVChzZW1hbmFnZV9ib29sX2l0ZXJhdGVfbG9jYWwoc2gsICZoYW5kbGVyX2Jvb2xfaXRlcmF0 ZV9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp ID49IDApOworICAgIENVX0FTU0VSVChjb3VudGVyX2Jvb2xfaXRlcmF0ZV9sb2NhbCA9PSBpbml0 X2NvdW50KTsKKworICAgIGFkZF9sb2NhbF9ib29sKElfRklSU1QpOworCisgICAgY291bnRlcl9i b29sX2l0ZXJhdGVfbG9jYWwgPSAwOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2l0ZXJh dGVfbG9jYWwoc2gsICZoYW5kbGVyX2Jvb2xfaXRlcmF0ZV9sb2NhbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpID49IDApOworICAgIENVX0FTU0VSVChj b3VudGVyX2Jvb2xfaXRlcmF0ZV9sb2NhbCA9PSBpbml0X2NvdW50ICsgMSk7CisKKyAgICBhZGRf bG9jYWxfYm9vbChJX1NFQ09ORCk7CisKKyAgICBjb3VudGVyX2Jvb2xfaXRlcmF0ZV9sb2NhbCA9 IDA7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfaXRlcmF0ZV9sb2NhbChzaCwgJmhhbmRs ZXJfYm9vbF9pdGVyYXRlX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ZXJfYm9vbF9pdGVyYXRl X2xvY2FsID09IGluaXRfY291bnQgKyAyKTsKKworICAgIC8vQ1VfQVNTRVJUX1NJR05BTChzZW1h bmFnZV9ib29sX2l0ZXJhdGVfbG9jYWwoc2gsIE5VTEwsIE5VTEwpLCBTSUdTRUdWKTsKKworICAg IGRlbGV0ZV9sb2NhbF9ib29sKElfRklSU1QpOworICAgIGRlbGV0ZV9sb2NhbF9ib29sKElfU0VD T05EKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0dGlvbiBi b29sX2xpc3RfbG9jYWwKKwordm9pZCB0ZXN0X2Jvb2xfbGlzdF9sb2NhbCh2b2lkKSB7CisgICAg c2VtYW5hZ2VfYm9vbF90ICoqcmVjb3JkczsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisgICAg dW5zaWduZWQgaW50IGluaXRfY291bnQ7CisKKyAgICAvLyBudWxsCisgICAgQ1VfQVNTRVJUX1NJ R05BTChzZW1hbmFnZV9ib29sX2xpc3RfbG9jYWwoTlVMTCwgJnJlY29yZHMsICZjb3VudCksIFNJ R1NFR1YpOworCisgICAgLy8gaGFuZGxlCisgICAgc2V0dXBfaGFuZGxlKFNIX0hBTkRMRSk7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9saXN0X2xvY2FsKHNoLCAmcmVjb3JkcywgJmNv dW50KSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfbGlzdF9sb2NhbChzaCwg TlVMTCwgJmNvdW50KSA8IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2xpc3RfbG9j YWwoc2gsICZyZWNvcmRzLCBOVUxMKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfSEFO RExFKTsKKworICAgIC8vIGNvbm5lY3QKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cisg ICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfY291bnRfbG9jYWwoc2gsICZpbml0X2Nv dW50KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2xpc3RfbG9jYWwoc2gs ICZyZWNvcmRzLCAmY291bnQpID49IDApOworICAgIENVX0FTU0VSVChjb3VudCA9PSBpbml0X2Nv dW50KTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9saXN0X2xvY2FsKHNo LCBOVUxMLCAmY291bnQpLCBTSUdTRUdWKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdl X2Jvb2xfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNs ZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgLy8gdHJhbnNhY3Rpb24KKyAgICBzZXR1 cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfbGlzdF9s b2NhbChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ID09 IGluaXRfY291bnQpOworCisgICAgYWRkX2xvY2FsX2Jvb2woSV9GSVJTVCk7CisgICAgCisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsICZjb3VudCkg Pj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ID09IGluaXRfY291bnQgKyAxKTsKKyAgICBDVV9B U1NFUlRfUFRSX05PVF9OVUxMKHJlY29yZHNbMF0pOworCisgICAgYWRkX2xvY2FsX2Jvb2woSV9T RUNPTkQpOworICAgIAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2xpc3RfbG9jYWwoc2gs ICZyZWNvcmRzLCAmY291bnQpID49IDApOworICAgIENVX0FTU0VSVChjb3VudCA9PSBpbml0X2Nv dW50ICsgMik7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZWNvcmRzWzBdKTsKKyAgICBD VV9BU1NFUlRfUFRSX05PVF9OVUxMKHJlY29yZHNbMV0pOworCisgICAgQ1VfQVNTRVJUX1NJR05B TChzZW1hbmFnZV9ib29sX2xpc3RfbG9jYWwoc2gsIE5VTEwsICZjb3VudCksIFNJR1NFR1YpOwor ICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9saXN0X2xvY2FsKHNoLCAmcmVjb3Jk cywgTlVMTCksIFNJR1NFR1YpOworCisgICAgZGVsZXRlX2xvY2FsX2Jvb2woSV9GSVJTVCk7Cisg ICAgZGVsZXRlX2xvY2FsX2Jvb2woSV9TRUNPTkQpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RS QU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfYm9vbF9zZXRfYWN0aXZlCisKK3ZvaWQg dGVzdF9ib29sX3NldF9hY3RpdmUodm9pZCkgeworICAgIHNlbWFuYWdlX2Jvb2xfa2V5X3QgKmtl eTsKKyAgICBzZW1hbmFnZV9ib29sX3QgKmJvb2xlYW47CisgICAgaW50IHJlc3BvbnNlOworCisg ICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGtleSA9IGdldF9ib29sX2tleV9udGgo MCk7CisgICAgYm9vbGVhbiA9IGdldF9ib29sX250aCgwKTsKKworICAgIHNlbWFuYWdlX2Jvb2xf c2V0X3ZhbHVlKGJvb2xlYW4sICFzZW1hbmFnZV9ib29sX2dldF92YWx1ZShib29sZWFuKSk7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9zZXRfYWN0aXZlKHNoLCBrZXksIGJvb2xlYW4p ID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfZXhpc3RzX2FjdGl2ZShzaCwg a2V5LCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAxKTsKKwor ICAgIHNlbWFuYWdlX2Jvb2xfc2V0X3ZhbHVlKGJvb2xlYW4sICFzZW1hbmFnZV9ib29sX2dldF92 YWx1ZShib29sZWFuKSk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9zZXRfYWN0aXZl KHNoLCBrZXksIGJvb2xlYW4pID49IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMp OworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9ib29sX3F1ZXJ5X2FjdGl2ZQorCit2b2lkIGhl bHBlcl9ib29sX3F1ZXJ5X2FjdGl2ZShsZXZlbF90IGxldmVsLCBjb25zdCBjaGFyICpib29sX3N0 ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBfcmVzdWx0KSB7CisgICAg c2VtYW5hZ2VfYm9vbF9rZXlfdCAqa2V5OworICAgIC8vIHNvbWUgbm9uLW51bGwgdmFsdWUKKyAg ICBzZW1hbmFnZV9ib29sX3QgKnJlc3BvbnNlID0gKHZvaWQgKikgNDI7CisgICAgY29uc3QgY2hh ciAqbmFtZTsKKyAgICBpbnQgcmVzdWx0OworCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKwor ICAgIGtleSA9IGdldF9ib29sX2tleV9mcm9tX3N0cihib29sX3N0cik7CisKKyAgICByZXN1bHQg PSBzZW1hbmFnZV9ib29sX3F1ZXJ5X2FjdGl2ZShzaCwga2V5LCAmcmVzcG9uc2UpOworCisgICAg aWYgKGV4cF9yZXN1bHQgPj0gMCkgeworICAgICAgICBDVV9BU1NFUlQocmVzdWx0ID49IDApOwor CisgICAgICAgIG5hbWUgPSBzZW1hbmFnZV9ib29sX2dldF9uYW1lKHJlc3BvbnNlKTsKKworICAg ICAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKG5hbWUsIGJvb2xfc3RyKTsKKyAgICB9CisgICAg ZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPCAwKTsKKyAgICB9CisKKyAgICBjbGVh bnVwX2hhbmRsZShsZXZlbCk7Cit9CisKK3ZvaWQgdGVzdF9ib29sX3F1ZXJ5X2FjdGl2ZSh2b2lk KSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9xdWVyeV9hY3RpdmUoU0hfQ09O TkVDVCwgTlVMTCwgLTEpLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9ib29sX3F1ZXJ5X2FjdGl2 ZShTSF9DT05ORUNULCBCT09MLCAgMSk7CisgICAgaGVscGVyX2Jvb2xfcXVlcnlfYWN0aXZlKFNI X0NPTk5FQ1QsIEJPT0wyLCAxKTsKKyAgICBoZWxwZXJfYm9vbF9xdWVyeV9hY3RpdmUoU0hfQ09O TkVDVCwgQk9PTF9OT05FWElTVEVOVCwgLTEpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxw ZXJfYm9vbF9xdWVyeV9hY3RpdmUoU0hfVFJBTlMsIE5VTEwsIC0xKSwgU0lHU0VHVik7CisKKyAg ICBoZWxwZXJfYm9vbF9xdWVyeV9hY3RpdmUoU0hfVFJBTlMsIEJPT0wsICAxKTsKKyAgICBoZWxw ZXJfYm9vbF9xdWVyeV9hY3RpdmUoU0hfVFJBTlMsIEJPT0wyLCAxKTsKKyAgICBoZWxwZXJfYm9v bF9xdWVyeV9hY3RpdmUoU0hfVFJBTlMsIEJPT0xfTk9ORVhJU1RFTlQsIC0xKTsKK30KKworLy8g RnVuY3Rpb24gYm9vbF9leGlzdHNfYWN0aXZlCisKK3ZvaWQgaGVscGVyX2Jvb2xfZXhpc3RzX2Fj dGl2ZShsZXZlbF90IGxldmVsLCBjaGFyICogYm9vbF9zdHIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGV4cF9yZXNwb25zZSkgeworICAgIHNlbWFuYWdlX2Jvb2xfa2V5X3Qg KmtleTsKKyAgICBpbnQgcmVzcG9uc2U7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisg ICAga2V5ID0gZ2V0X2Jvb2xfa2V5X2Zyb21fc3RyKGJvb2xfc3RyKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9ib29sX2V4aXN0c19hY3RpdmUoc2gsIGtleSwgJnJlc3BvbnNlKSA+PSAwKTsK KyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gZXhwX3Jlc3BvbnNlKTsKKworICAgIENVX0FTU0VS VF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9leGlzdHNfYWN0aXZlKHNoLCBrZXksIE5VTEwpLCBTSUdT RUdWKTsKKworICAgIHNlbWFuYWdlX2Jvb2xfa2V5X2ZyZWUoa2V5KTsKKworICAgIGNsZWFudXBf aGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Jvb2xfZXhpc3RzX2FjdGl2ZSh2b2lkKSB7 CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfYm9vbF9leGlzdHNfYWN0aXZlKFNIX0NPTk5F Q1QsIE5VTEwsIDApLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9ib29sX2V4aXN0c19hY3RpdmUo U0hfQ09OTkVDVCwgQk9PTCwgIDEpOworICAgIGhlbHBlcl9ib29sX2V4aXN0c19hY3RpdmUoU0hf Q09OTkVDVCwgQk9PTDIsIDEpOworICAgIGhlbHBlcl9ib29sX2V4aXN0c19hY3RpdmUoU0hfQ09O TkVDVCwgQk9PTF9OT05FWElTVEVOVCwgMCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBl cl9ib29sX2V4aXN0c19hY3RpdmUoU0hfVFJBTlMsIE5VTEwsIDApLCBTSUdTRUdWKTsKKworICAg IGhlbHBlcl9ib29sX2V4aXN0c19hY3RpdmUoU0hfVFJBTlMsIEJPT0wsICAxKTsKKyAgICBoZWxw ZXJfYm9vbF9leGlzdHNfYWN0aXZlKFNIX1RSQU5TLCBCT09MMiwgMSk7CisgICAgaGVscGVyX2Jv b2xfZXhpc3RzX2FjdGl2ZShTSF9UUkFOUywgQk9PTF9OT05FWElTVEVOVCwgMCk7Cit9CisKKy8v IEZ1bmN0aW9uIHNlbWFuYWdlX2Jvb2xfY291bnRfYWN0aXZlCisKK3ZvaWQgdGVzdF9ib29sX2Nv dW50X2FjdGl2ZSh2b2lkKSB7CisgICAgdW5zaWduZWQgaW50IHJlc3BvbnNlOworCisgICAgLy8g bnVsbAorICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9jb3VudF9hY3RpdmUoTlVM TCwgJnJlc3BvbnNlKSwgU0lHU0VHVik7CisKKyAgICAvLyBoYW5kbGUKKyAgICBzZXR1cF9oYW5k bGUoU0hfSEFORExFKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50X2FjdGl2 ZShzaCwgJnJlc3BvbnNlKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfSEFORExFKTsK KyAgICAKKyAgICAvLyBjb25uZWN0CisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfY291bnRfYWN0aXZlKHNoLCAmcmVzcG9uc2UpID49 IDApOworI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gQk9P TFNfQ09VTlQpOworI2Vsc2UKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPiAwKTsKKyNlbmRpZgor CisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9ib29sX2NvdW50X2FjdGl2ZShzaCwgTlVM TCksIFNJR1NFR1YpOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisgICAgCisg ICAgLy8gdHJhbnNhY3Rpb24KKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworICAgIAorICAg IENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2NvdW50X2FjdGl2ZShzaCwgJnJlc3BvbnNlKSA+PSAw KTsKKyNpZiBWRVJTX0NIRUNLKDIsIDUpCisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IEJPT0xT X0NPVU5UKTsKKyNlbHNlCisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID4gMCk7CisjZW5kaWYKKwor ICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9jb3VudF9hY3RpdmUoc2gsIE5VTEwp LCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVu Y3Rpb24gc2VtYW5hZ2VfYm9vbF9pdGVyYXRlX2FjdGl2ZQordW5zaWduZWQgaW50IGNvdW50ZXJf Ym9vbF9pdGVyYXRlX2FjdGl2ZSA9IDA7CisKK2ludCBoYW5kbGVyX2Jvb2xfaXRlcmF0ZV9hY3Rp dmUoY29uc3Qgc2VtYW5hZ2VfYm9vbF90ICpyZWNvcmQsIHZvaWQgKnZhcmcpIHsKKyAgICBjb3Vu dGVyX2Jvb2xfaXRlcmF0ZV9hY3RpdmUrKzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0 X2Jvb2xfaXRlcmF0ZV9hY3RpdmUodm9pZCkgeworICAgIC8vIG51bGwKKyAgICBDVV9BU1NFUlRf U0lHTkFMKHNlbWFuYWdlX2Jvb2xfaXRlcmF0ZV9hY3RpdmUoTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmaGFuZGxlcl9ib29sX2l0ZXJhdGVfYWN0aXZlLCBOVUxMKSwg U0lHU0VHVik7CisKKyAgICAvLyBoYW5kbGUKKyAgICBzZXR1cF9oYW5kbGUoU0hfSEFORExFKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2l0ZXJhdGVfYWN0aXZlKHNoLCAmaGFuZGxl cl9ib29sX2l0ZXJhdGVfYWN0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwpIDwgMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYm9vbF9pdGVy YXRlX2FjdGl2ZShzaCwgTlVMTCwgTlVMTCkgPCAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNI X0hBTkRMRSk7CisKKyAgICAvLyBjb25uZWN0CisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1Qp OworCisgICAgY291bnRlcl9ib29sX2l0ZXJhdGVfYWN0aXZlID0gMDsKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfYm9vbF9pdGVyYXRlX2FjdGl2ZShzaCwgJmhhbmRsZXJfYm9vbF9pdGVyYXRlX2Fj dGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSA+ PSAwKTsKKyNpZiBWRVJTX0NIRUNLKDIsIDUpCisgICAgQ1VfQVNTRVJUKGNvdW50ZXJfYm9vbF9p dGVyYXRlX2FjdGl2ZSA9PSBCT09MU19DT1VOVCk7CisjZWxzZQorICAgIENVX0FTU0VSVChjb3Vu dGVyX2Jvb2xfaXRlcmF0ZV9hY3RpdmUgPiAwKTsKKyNlbmRpZgorCisgICAgQ1VfQVNTRVJUX1NJ R05BTChzZW1hbmFnZV9ib29sX2l0ZXJhdGVfYWN0aXZlKHNoLCBOVUxMLCBOVUxMKSwgU0lHU0VH Vik7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIC8vIHRyYW5zYWN0 aW9uCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGNvdW50ZXJfYm9vbF9pdGVy YXRlX2FjdGl2ZSA9IDA7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfaXRlcmF0ZV9hY3Rp dmUoc2gsICZoYW5kbGVyX2Jvb2xfaXRlcmF0ZV9hY3RpdmUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgPj0gMCk7CisjaWYgVkVSU19DSEVDSygyLCA1 KQorICAgIENVX0FTU0VSVChjb3VudGVyX2Jvb2xfaXRlcmF0ZV9hY3RpdmUgPT0gQk9PTFNfQ09V TlQpOworI2Vsc2UKKyAgICBDVV9BU1NFUlQoY291bnRlcl9ib29sX2l0ZXJhdGVfYWN0aXZlID4g MCk7CisjZW5kaWYKKworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9pdGVyYXRl X2FjdGl2ZShzaCwgTlVMTCwgTlVMTCksIFNJR1NFR1YpOworCisgICAgY2xlYW51cF9oYW5kbGUo U0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9ib29sX2xpc3RfYWN0aXZlCisK K3ZvaWQgaGVscGVyX2Jvb2xfbGlzdF9hY3RpdmVfaW52YWxpZCh2b2lkKSB7CisgICAgc2VtYW5h Z2VfYm9vbF90ICoqcmVjb3JkczsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisKKyAgICBDVV9B U1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Jvb2xfbGlzdF9hY3RpdmUoTlVMTCwgJnJlY29yZHMsICZj b3VudCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKworICAgIHNldHVwX2hhbmRs ZShTSF9IQU5ETEUpOworICAgIAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9ib29sX2xpc3RfYWN0 aXZlKHNoLCAmcmVjb3JkcywgJmNvdW50KSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X2Jvb2xfbGlzdF9hY3RpdmUoc2gsIE5VTEwsICZjb3VudCkgPCAwKTsKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfYm9vbF9saXN0X2FjdGl2ZShzaCwgJnJlY29yZHMsIE5VTEwpIDwgMCk7CisKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9IQU5ETEUpOworfQorCit2b2lkIGhlbHBlcl9ib29sX2xpc3Rf YWN0aXZlKGxldmVsX3QgbGV2ZWwpIHsKKyAgICBzZW1hbmFnZV9ib29sX3QgKipyZWNvcmRzOwor ICAgIHVuc2lnbmVkIGludCBjb3VudDsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisgICAg CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Jvb2xfbGlzdF9hY3RpdmUoc2gsICZyZWNvcmRzLCAm Y291bnQpID49IDApOworI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAgICBDVV9BU1NFUlQoY291bnQg PT0gQk9PTFNfQ09VTlQpOworI2Vsc2UKKyAgICBDVV9BU1NFUlQoY291bnQgPiAwKTsKKyNlbmRp ZgorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAg ICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgZm9y ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHNlbWFuYWdl X2Jvb2xfZnJlZShyZWNvcmRzW2ldKTsKKyAgICB9CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNl bWFuYWdlX2Jvb2xfbGlzdF9hY3RpdmUoc2gsIE5VTEwsICZjb3VudCksIFNJR1NFR1YpOworICAg IENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYm9vbF9saXN0X2FjdGl2ZShzaCwgJnJlY29yZHMs IE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9p ZCB0ZXN0X2Jvb2xfbGlzdF9hY3RpdmUodm9pZCkgeworICAgIGhlbHBlcl9ib29sX2xpc3RfYWN0 aXZlX2ludmFsaWQoKTsKKyAgICBoZWxwZXJfYm9vbF9saXN0X2FjdGl2ZShTSF9DT05ORUNUKTsK KyAgICBoZWxwZXJfYm9vbF9saXN0X2FjdGl2ZShTSF9UUkFOUyk7Cit9CgpkaWZmIC0tZ2l0IGEv bGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfYm9vbC5oIGIvbGlic2VtYW5hZ2Uv c2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfYm9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmE3MjU4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzZW1hbmFnZS9zYW5pdHkt dGVzdHMvdGVzdHMvdGVzdF9ib29sLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfX1RFU1Rf Qk9PTF9IX18KKyNkZWZpbmUgX19URVNUX0JPT0xfSF9fCisKKyNpbmNsdWRlIDxDVW5pdC9CYXNp Yy5oPgorCitpbnQgYm9vbF90ZXN0X2luaXQodm9pZCk7CitpbnQgYm9vbF90ZXN0X2NsZWFudXAo dm9pZCk7CitpbnQgYm9vbF9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1aXRlKTsKKworLy8gYm9vbGVh bl9yZWNvcmQuaAorCit2b2lkIHRlc3RfYm9vbF9rZXlfY3JlYXRlKHZvaWQpOwordm9pZCB0ZXN0 X2Jvb2xfa2V5X2V4dHJhY3Qodm9pZCk7Cit2b2lkIHRlc3RfYm9vbF9jb21wYXJlKHZvaWQpOwor dm9pZCB0ZXN0X2Jvb2xfY29tcGFyZTIodm9pZCk7Cit2b2lkIHRlc3RfYm9vbF9nZXRfc2V0X25h bWUodm9pZCk7Cit2b2lkIHRlc3RfYm9vbF9nZXRfc2V0X3ZhbHVlKHZvaWQpOwordm9pZCB0ZXN0 X2Jvb2xfY3JlYXRlKHZvaWQpOwordm9pZCB0ZXN0X2Jvb2xfY2xvbmUodm9pZCk7CisKKy8vIGJv b2xlYW5zX3BvbGljeS5oCisKK3ZvaWQgdGVzdF9ib29sX3F1ZXJ5KHZvaWQpOwordm9pZCB0ZXN0 X2Jvb2xfZXhpc3RzKHZvaWQpOwordm9pZCB0ZXN0X2Jvb2xfY291bnQodm9pZCk7Cit2b2lkIHRl c3RfYm9vbF9pdGVyYXRlKHZvaWQpOwordm9pZCB0ZXN0X2Jvb2xfbGlzdCh2b2lkKTsKKworLy8g Ym9vbGVhbnNfbG9jYWwuaAorCit2b2lkIHRlc3RfYm9vbF9tb2RpZnlfZGVsX2xvY2FsKHZvaWQp Owordm9pZCB0ZXN0X2Jvb2xfcXVlcnlfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfYm9vbF9leGlz dHNfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfYm9vbF9jb3VudF9sb2NhbCh2b2lkKTsKK3ZvaWQg dGVzdF9ib29sX2l0ZXJhdGVfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfYm9vbF9saXN0X2xvY2Fs KHZvaWQpOworCisvLyBib29sZWFuc19hY3RpdmUuaAorCit2b2lkIHRlc3RfYm9vbF9zZXRfYWN0 aXZlKHZvaWQpOwordm9pZCB0ZXN0X2Jvb2xfcXVlcnlfYWN0aXZlKHZvaWQpOwordm9pZCB0ZXN0 X2Jvb2xfZXhpc3RzX2FjdGl2ZSh2b2lkKTsKK3ZvaWQgdGVzdF9ib29sX2NvdW50X2FjdGl2ZSh2 b2lkKTsKK3ZvaWQgdGVzdF9ib29sX2l0ZXJhdGVfYWN0aXZlKHZvaWQpOwordm9pZCB0ZXN0X2Jv b2xfbGlzdF9hY3RpdmUodm9pZCk7CisKKyNlbmRpZgorCgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5h Z2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfZmNvbnRleHQuYyBiL2xpYnNlbWFuYWdlL3Nhbml0 eS10ZXN0cy90ZXN0cy90ZXN0X2Zjb250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uY2Y1ZDQzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10 ZXN0cy90ZXN0cy90ZXN0X2Zjb250ZXh0LmMKQEAgLTAsMCArMSwxMTg5IEBACisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9zZW1hbmFn ZS5oPgorI2luY2x1ZGUgPHNlbWFuYWdlL2hhbmRsZS5oPgorI2luY2x1ZGUgPHNlbGludXgvc2Vs aW51eC5oPgorI2luY2x1ZGUgPENVbml0L0Jhc2ljLmg+CisKKyNpbmNsdWRlICJ0ZXN0X2Zjb250 ZXh0LmgiCisjaW5jbHVkZSAiZnVuY3Rpb25zLmgiCisKKy8qIFRPRE86IHRlc3QgZnVuY3Rpb24g dHlwZV9zdHIKKyAqIFRPRE86IHRlc3QgZnVuY3Rpb24gZmNvbnRleHRfcHJpbnQKKyAqIFRPRE86 IGZ1bmN0aW9uIGZjb250ZXh0X3BhcnNlLCBlcnJvciBnb3RvcworICogVE9ETzogdGVzdCBmdW5j dGlvbiB2YWxpZGF0ZV9oYW5kbGVyCisgKi8KKworZXh0ZXJuIHNlbWFuYWdlX2hhbmRsZV90ICpz aDsKKworY2hhciAqRkNPTlRFWFRfRVhQUjsKK2ludCBGQ09OVEVYVF9UWVBFOworY2hhciAqRkNP TlRFWFRfQ09OOworCitjaGFyICpGQ09OVEVYVDJfRVhQUjsKK2ludCBGQ09OVEVYVDJfVFlQRTsK K2NoYXIgKkZDT05URVhUMl9DT047CisKK2NoYXIgKkZDT05URVhUX05PTkVYSVNURU5UX0VYUFI7 CitpbnQgRkNPTlRFWFRfTk9ORVhJU1RFTlRfVFlQRTsKKwordW5zaWduZWQgaW50IEZDT05URVhU U19DT1VOVDsKKworaW50IGdldF90eXBlKGNoYXIgKnQpIHsKKyAgICBpZiAoc3RyY21wKHQsICIt LSIpID09IDApCisgICAgICAgIHJldHVybiBTRU1BTkFHRV9GQ09OVEVYVF9BTEw7CisgICAgZWxz ZSBpZiAoc3RyY21wKHQsICItZiIpID09IDApCisgICAgICAgIHJldHVybiBTRU1BTkFHRV9GQ09O VEVYVF9SRUc7CisgICAgZWxzZSBpZiAoc3RyY21wKHQsICItZCIpID09IDApCisgICAgICAgIHJl dHVybiBTRU1BTkFHRV9GQ09OVEVYVF9ESVI7CisgICAgZWxzZSBpZiAoc3RyY21wKHQsICItYyIp ID09IDApCisgICAgICAgIHJldHVybiBTRU1BTkFHRV9GQ09OVEVYVF9DSEFSOworICAgIGVsc2Ug aWYgKHN0cmNtcCh0LCAiLWIiKSA9PSAwKQorICAgICAgICByZXR1cm4gU0VNQU5BR0VfRkNPTlRF WFRfQkxPQ0s7CisgICAgZWxzZSBpZiAoc3RyY21wKHQsICItcyIpID09IDApCisgICAgICAgIHJl dHVybiBTRU1BTkFHRV9GQ09OVEVYVF9TT0NLOworICAgIGVsc2UgaWYgKHN0cmNtcCh0LCAiLWwi KSA9PSAwKQorICAgICAgICByZXR1cm4gU0VNQU5BR0VfRkNPTlRFWFRfTElOSzsKKyAgICBlbHNl IGlmIChzdHJjbXAodCwgIi1wIikgPT0gMCkKKyAgICAgICAgcmV0dXJuIFNFTUFOQUdFX0ZDT05U RVhUX1BJUEU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gLTE7Cit9CisKK2ludCBmY29udGV4 dF90ZXN0X2luaXQodm9pZCkgeworICAgIGNoYXIgKnBvbGljeV90eXBlOworICAgIGNoYXIgKmZj b250ZXh0c19wYXRoOworCisgICAgc2VsaW51eF9nZXRwb2xpY3l0eXBlKCZwb2xpY3lfdHlwZSk7 CisKKyAgICBmY29udGV4dHNfcGF0aCA9IG1hbGxvYyhzdHJsZW4oIi9ldGMvc2VsaW51eC8iKSAr IHN0cmxlbihwb2xpY3lfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuKCIvY29u dGV4dHMvZmlsZXMvZmlsZV9jb250ZXh0cyIpICsgMSk7CisKKyAgICBzdHJjcHkoZmNvbnRleHRz X3BhdGgsICIvZXRjL3NlbGludXgvIik7CisgICAgc3RyY2F0KGZjb250ZXh0c19wYXRoLCBwb2xp Y3lfdHlwZSk7CisgICAgc3RyY2F0KGZjb250ZXh0c19wYXRoLCAiL2NvbnRleHRzL2ZpbGVzL2Zp bGVfY29udGV4dHMiKTsKKworICAgIEZJTEUgKmYgPSBmb3BlbihmY29udGV4dHNfcGF0aCwgInIi KTsKKworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv ciBvcGVuaW5nIGZpbGUgJXNcbiIsIGZjb250ZXh0c19wYXRoKTsKKyAgICAgICAgcmV0dXJuIDE7 CisgICAgfQorCisgICAgY2hhciBsaW5lWzUxMl07CisgICAgdW5zaWduZWQgaW50IGxpbmVfY291 bnRlciA9IDA7CisgICAgY2hhciAqcDE7CisgICAgY2hhciAqcDI7CisgICAgY2hhciAqcDM7Cisg ICAgLy9jaGFyIGZjb250ZXh0c190bXBbNTEyXTsKKworICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBz aXplb2YobGluZSksIGYpKSB7CisgICAgICAgIGlmIChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBd ID09ICdcbicpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBwMSA9IHN0cnRvayhs aW5lLCAiXHQiKTsKKyAgICAgICAgcDIgPSBzdHJ0b2soTlVMTCwgIlx0Iik7CisgICAgICAgIHAz ID0gc3RydG9rKE5VTEwsICJcdCIpOworICAgICAgICAvL3N0cmNhdChzZXVzZXJzX3RtcCwgIiAi KTsKKyAgICAgICAgLy9zdHJjYXQoc2V1c2Vyc190bXAsIHApOworCisgICAgICAgIGlmIChsaW5l X2NvdW50ZXIgPT0gMCkgeworICAgICAgICAgICAgRkNPTlRFWFRfRVhQUiA9IHN0cmR1cChwMSk7 CisKKyAgICAgICAgICAgIGlmIChwMyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgRkNPTlRF WFRfVFlQRSA9IFNFTUFOQUdFX0ZDT05URVhUX0FMTDsKKyAgICAgICAgICAgICAgICBGQ09OVEVY VF9DT04gPSBzdHJkdXAocDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICAgICAgRkNPTlRFWFRfVFlQRSA9IGdldF90eXBlKHAyKTsKKyAgICAgICAgICAg ICAgICBGQ09OVEVYVF9DT04gPSBzdHJkdXAocDMpOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIC8vIGNob3NlIGVudHJ5IHdpdGggdHlwZSAhPSBBTEwKKyAgICAgICAgZWxzZSBp ZiAocDMgIT0gTlVMTCAmJiBzdHJjbXAocDIsICItLSIpICE9IDApIHsKKyAgICAgICAgICAgIEZD T05URVhUMl9FWFBSID0gc3RyZHVwKHAxKTsKKyAgICAgICAgICAgIEZDT05URVhUMl9UWVBFID0g Z2V0X3R5cGUocDIpOworICAgICAgICAgICAgRkNPTlRFWFQyX0NPTiA9IHN0cmR1cChwMyk7Cisg ICAgICAgIH0KKworICAgICAgICBsaW5lX2NvdW50ZXIrKzsKKyAgICB9CisKKyAgICAvL0ZDT05U RVhUUyA9IHN0cmR1cChzZXVzZXJzX3RtcCk7CisgICAgCisgICAgRkNPTlRFWFRfTk9ORVhJU1RF TlRfRVhQUiA9ICIvbm9uL2V4aXN0ZW50L3BhdGgiOworICAgIEZDT05URVhUX05PTkVYSVNURU5U X1RZUEUgPSBTRU1BTkFHRV9GQ09OVEVYVF9BTEw7CisKKyAgICBGQ09OVEVYVFNfQ09VTlQgPSBs aW5lX2NvdW50ZXI7CisKKyAgICBpZiAoRkNPTlRFWFRTX0NPVU5UID09IDApIHsKKyAgICAgICAg ZnByaW50ZihzdGRlcnIsICJGQ09OVEVYVFNfQ09VTlQgaXMgemVyb1xuIik7CisgICAgICAgIHJl dHVybiAxOworICAgIH0KKworICAgIGZyZWUoZmNvbnRleHRzX3BhdGgpOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBmY29udGV4dF90ZXN0X2NsZWFudXAodm9pZCkgeworCXJldHVybiAwOworfQor CitpbnQgZmNvbnRleHRfYWRkX3Rlc3RzKENVX3BTdWl0ZSBzdWl0ZSkgeworICAgIENVX2FkZF90 ZXN0KHN1aXRlLCAidGVzdF9mY29udGV4dF9jb21wYXJlIiwgICAgIHRlc3RfZmNvbnRleHRfY29t cGFyZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0X2Zjb250ZXh0X2NvbXBhcmUyIiwg ICAgdGVzdF9mY29udGV4dF9jb21wYXJlMik7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0 X2Zjb250ZXh0X2tleV9jcmVhdGUiLCAgdGVzdF9mY29udGV4dF9rZXlfY3JlYXRlKTsKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNvbnRleHRfa2V5X2V4dHJhY3QiLCB0ZXN0X2Zjb250 ZXh0X2tleV9leHRyYWN0KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNvbnRleHRf Z2V0X3NldF9leHByIix0ZXN0X2Zjb250ZXh0X2dldF9zZXRfZXhwcik7CisgICAgQ1VfYWRkX3Rl c3Qoc3VpdGUsICJ0ZXN0X2Zjb250ZXh0X2dldF9zZXRfdHlwZSIsdGVzdF9mY29udGV4dF9nZXRf c2V0X3R5cGUpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidGVzdF9mY29udGV4dF9nZXRfdHlw ZV9zdHIiLHRlc3RfZmNvbnRleHRfZ2V0X3R5cGVfc3RyKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgInRlc3RfZmNvbnRleHRfZ2V0X3NldF9jb24iLCB0ZXN0X2Zjb250ZXh0X2dldF9zZXRfY29u KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNvbnRleHRfY3JlYXRlIiwgICAgICB0 ZXN0X2Zjb250ZXh0X2NyZWF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0X2Zjb250 ZXh0X2Nsb25lIiwgICAgICAgdGVzdF9mY29udGV4dF9jbG9uZSk7CisKKyAgICBDVV9hZGRfdGVz dChzdWl0ZSwgInRlc3RfZmNvbnRleHRfcXVlcnkiLCAgICAgICB0ZXN0X2Zjb250ZXh0X3F1ZXJ5 KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNvbnRleHRfZXhpc3RzIiwgICAgICB0 ZXN0X2Zjb250ZXh0X2V4aXN0cyk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0X2Zjb250 ZXh0X2NvdW50IiwgICAgICAgdGVzdF9mY29udGV4dF9jb3VudCk7CisgICAgQ1VfYWRkX3Rlc3Qo c3VpdGUsICJ0ZXN0X2Zjb250ZXh0X2l0ZXJhdGUiLCAgICAgdGVzdF9mY29udGV4dF9pdGVyYXRl KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNvbnRleHRfbGlzdCIsICAgICAgICB0 ZXN0X2Zjb250ZXh0X2xpc3QpOworICAgIAorICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidGVzdF9m Y29udGV4dF9tb2RpZnlfZGVsX2xvY2FsIiwKKyAgICAgICAgICAgICAgICB0ZXN0X2Zjb250ZXh0 X21vZGlmeV9kZWxfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidGVzdF9mY29udGV4 dF9xdWVyeV9sb2NhbCIsIHRlc3RfZmNvbnRleHRfcXVlcnlfbG9jYWwpOworICAgIENVX2FkZF90 ZXN0KHN1aXRlLCAidGVzdF9mY29udGV4dF9leGlzdHNfbG9jYWwiLHRlc3RfZmNvbnRleHRfZXhp c3RzX2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNvbnRleHRfY291bnRf bG9jYWwiLCB0ZXN0X2Zjb250ZXh0X2NvdW50X2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgInRlc3RfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbCIsCisgICAgICAgICAgICAgICAgdGVzdF9m Y29udGV4dF9pdGVyYXRlX2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZmNv bnRleHRfbGlzdF9sb2NhbCIsICB0ZXN0X2Zjb250ZXh0X2xpc3RfbG9jYWwpOworCisJcmV0dXJu IDA7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2Zjb250ZXh0X2NvbXBhcmUKKwordm9pZCBo ZWxwZXJfZmNvbnRleHRfY29tcGFyZShsZXZlbF90IGxldmVsLCBpbnQgZmNvbnRleHRfaW5kZXgx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmNvbnRleHRfaW5kZXgyKSB7Cisg ICAgc2VtYW5hZ2VfZmNvbnRleHRfdCAqZmNvbnRleHQ7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRf a2V5X3QgKmtleTsKKyAgICBpbnQgcmVzdWx0OworCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsK KworICAgIGZjb250ZXh0ID0gZ2V0X2Zjb250ZXh0X250aChmY29udGV4dF9pbmRleDEpOworICAg IGtleSA9IGdldF9mY29udGV4dF9rZXlfbnRoKGZjb250ZXh0X2luZGV4Mik7CisKKyAgICByZXN1 bHQgPSBzZW1hbmFnZV9mY29udGV4dF9jb21wYXJlKGZjb250ZXh0LCBrZXkpOworCisgICAgaWYg KGZjb250ZXh0X2luZGV4MSA9PSBmY29udGV4dF9pbmRleDIpIHsKKyAgICAgICAgQ1VfQVNTRVJU KHJlc3VsdCA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1 bHQgIT0gMCk7CisgICAgfQorCisgICAgc2VtYW5hZ2VfZmNvbnRleHRfZnJlZShmY29udGV4dCk7 CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfa2V5X2ZyZWUoa2V5KTsKKyAgICBjbGVhbnVwX2hhbmRs ZShsZXZlbCk7Cit9CisKK3ZvaWQgaGVscGVyX2Zjb250ZXh0X2NvbXBhcmVfdHlwZShsZXZlbF90 IGxldmVsLCBpbnQgaW5kZXgsIGludCBpbmNyZWFzZSkgeworICAgIHNlbWFuYWdlX2Zjb250ZXh0 X3QgKmZjb250ZXh0ID0gTlVMTDsKKyAgICBzZW1hbmFnZV9mY29udGV4dF90ICpmY29udGV4dDIg PSBOVUxMOworICAgIHNlbWFuYWdlX2Zjb250ZXh0X2tleV90ICprZXkgPSBOVUxMOworICAgIGlu dCB0eXBlID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisK KyAgICBmY29udGV4dCA9IGdldF9mY29udGV4dF9udGgoaW5kZXgpOworICAgIGZjb250ZXh0MiA9 IGdldF9mY29udGV4dF9udGgoaW5kZXgpOworCisgICAgdHlwZSA9IHNlbWFuYWdlX2Zjb250ZXh0 X2dldF90eXBlKGZjb250ZXh0Mik7CisKKyAgICBpZiAoaW5jcmVhc2UpIHsKKyAgICAgICAgdHlw ZSArPSAxOworCisgICAgICAgIGlmICh0eXBlID4gU0VNQU5BR0VfRkNPTlRFWFRfUElQRSkKKyAg ICAgICAgICAgIHR5cGUgPSBTRU1BTkFHRV9GQ09OVEVYVF9BTEw7CisgICAgfQorICAgIGVsc2Ug eworICAgICAgICB0eXBlIC09IDE7CisKKyAgICAgICAgaWYgKHR5cGUgPCBTRU1BTkFHRV9GQ09O VEVYVF9BTEwpCisgICAgICAgICAgICB0eXBlID0gU0VNQU5BR0VfRkNPTlRFWFRfUElQRTsKKyAg ICB9CisKKyAgICBzZW1hbmFnZV9mY29udGV4dF9zZXRfdHlwZShmY29udGV4dDIsIHR5cGUpOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2tleV9leHRyYWN0KHNoLCBmY29udGV4 dDIsICZrZXkpID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9m Y29udGV4dF9jb21wYXJlKGZjb250ZXh0LCBrZXkpICE9IDApOworCisgICAgLy8gY2xlYW51cAor ICAgIHNlbWFuYWdlX2Zjb250ZXh0X2ZyZWUoZmNvbnRleHQpOworICAgIHNlbWFuYWdlX2Zjb250 ZXh0X2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lk IHRlc3RfZmNvbnRleHRfY29tcGFyZSh2b2lkKSB7CisgICAgaGVscGVyX2Zjb250ZXh0X2NvbXBh cmUoU0hfQ09OTkVDVCwgSV9GSVJTVCwgIElfRklSU1QpOworICAgIGhlbHBlcl9mY29udGV4dF9j b21wYXJlKFNIX0NPTk5FQ1QsIElfRklSU1QsICBJX1NFQ09ORCk7CisgICAgaGVscGVyX2Zjb250 ZXh0X2NvbXBhcmUoU0hfQ09OTkVDVCwgSV9TRUNPTkQsIElfRklSU1QpOworICAgIGhlbHBlcl9m Y29udGV4dF9jb21wYXJlKFNIX0NPTk5FQ1QsIElfU0VDT05ELCBJX1NFQ09ORCk7CisKKyAgICBD VV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9jb21wYXJlKFNIX0NPTk5FQ1QsIElfTlVM TCwgIElfRklSU1QpLAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNT RVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZShTSF9DT05ORUNULCBJX0ZJUlNULCBJ X05VTEwpLAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJ R05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZShTSF9DT05ORUNULCBJX05VTEwsICBJX05VTEwp LAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisKKyAgICBoZWxwZXJfZmNvbnRleHRf Y29tcGFyZV90eXBlKFNIX0NPTk5FQ1QsIElfRklSU1QsIC0xKTsKKyAgICBoZWxwZXJfZmNvbnRl eHRfY29tcGFyZV90eXBlKFNIX0NPTk5FQ1QsIElfRklSU1QsIDEpOworCisgICAgaGVscGVyX2Zj b250ZXh0X2NvbXBhcmUoU0hfVFJBTlMsIElfRklSU1QsICBJX0ZJUlNUKTsKKyAgICBoZWxwZXJf ZmNvbnRleHRfY29tcGFyZShTSF9UUkFOUywgSV9GSVJTVCwgIElfU0VDT05EKTsKKyAgICBoZWxw ZXJfZmNvbnRleHRfY29tcGFyZShTSF9UUkFOUywgSV9TRUNPTkQsIElfRklSU1QpOworICAgIGhl bHBlcl9mY29udGV4dF9jb21wYXJlKFNIX1RSQU5TLCBJX1NFQ09ORCwgSV9TRUNPTkQpOworCisg ICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZShTSF9UUkFOUywgSV9O VUxMLCAgSV9GSVJTVCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBDVV9B U1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9jb21wYXJlKFNIX1RSQU5TLCBJX0ZJUlNULCBJ X05VTEwpLAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJ R05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZShTSF9UUkFOUywgSV9OVUxMLCAgSV9OVUxMKSwK KyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworCisgICAgaGVscGVyX2Zjb250ZXh0X2Nv bXBhcmVfdHlwZShTSF9UUkFOUywgSV9GSVJTVCwgLTEpOworICAgIGhlbHBlcl9mY29udGV4dF9j b21wYXJlX3R5cGUoU0hfVFJBTlMsIElfRklSU1QsIDEpOworfQorCisvLyBGdW5jdGlvbiBzZW1h bmFnZV9mY29udGV4dF9jb21wYXJlMgorLy8gVE9ETzogdGVzdCBzYW1lIGV4cHIsIGRpZmZlcmVu dCB0eXBlCisvLyBUT0RPOiB0ZXN0IGZ1bmN0aW9uIHNlbWFuYWdlX2Zjb250ZXh0X2NvbXBhcmUy X3Fzb3J0CisKK3ZvaWQgaGVscGVyX2Zjb250ZXh0X2NvbXBhcmUyKGxldmVsX3QgbGV2ZWwsIGlu dCBmY29udGV4dF9pbmRleDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmNv bnRleHRfaW5kZXgyKSB7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfdCAqZmNvbnRleHQxOworICAg IHNlbWFuYWdlX2Zjb250ZXh0X3QgKmZjb250ZXh0MjsKKyAgICBpbnQgcmVzdWx0OworCisgICAg c2V0dXBfaGFuZGxlKGxldmVsKTsKKworICAgIGZjb250ZXh0MSA9IGdldF9mY29udGV4dF9udGgo ZmNvbnRleHRfaW5kZXgxKTsKKyAgICBmY29udGV4dDIgPSBnZXRfZmNvbnRleHRfbnRoKGZjb250 ZXh0X2luZGV4Mik7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9mY29udGV4dF9jb21wYXJlMihm Y29udGV4dDEsIGZjb250ZXh0Mik7CisKKyAgICBpZiAoZmNvbnRleHRfaW5kZXgxID09IGZjb250 ZXh0X2luZGV4MikgeworICAgICAgICBDVV9BU1NFUlQocmVzdWx0ID09IDApOworICAgIH0KKyAg ICBlbHNlIHsKKyAgICAgICAgQ1VfQVNTRVJUKHJlc3VsdCAhPSAwKTsKKyAgICB9CisKKyAgICBz ZW1hbmFnZV9mY29udGV4dF9mcmVlKGZjb250ZXh0MSk7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRf ZnJlZShmY29udGV4dDIpOyAKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7Cit9CisKK3ZvaWQg dGVzdF9mY29udGV4dF9jb21wYXJlMih2b2lkKSB7CisgICAgaGVscGVyX2Zjb250ZXh0X2NvbXBh cmUyKFNIX0NPTk5FQ1QsIElfRklSU1QsICBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfZmNvbnRleHRf Y29tcGFyZTIoU0hfQ09OTkVDVCwgSV9GSVJTVCwgIElfU0VDT05EKTsKKyAgICBoZWxwZXJfZmNv bnRleHRfY29tcGFyZTIoU0hfQ09OTkVDVCwgSV9TRUNPTkQsIElfRklSU1QpOworICAgIGhlbHBl cl9mY29udGV4dF9jb21wYXJlMihTSF9DT05ORUNULCBJX1NFQ09ORCwgSV9TRUNPTkQpOworCisg ICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZTIoU0hfQ09OTkVDVCwg SV9OVUxMLCAgSV9GSVJTVCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBD VV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9jb21wYXJlMihTSF9DT05ORUNULCBJX0ZJ UlNULCBJX05VTEwpLAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNT RVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZTIoU0hfQ09OTkVDVCwgSV9OVUxMLCAg SV9OVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworCisgICAgaGVscGVyX2Zj b250ZXh0X2NvbXBhcmUyKFNIX1RSQU5TLCBJX0ZJUlNULCAgSV9GSVJTVCk7CisgICAgaGVscGVy X2Zjb250ZXh0X2NvbXBhcmUyKFNIX1RSQU5TLCBJX0ZJUlNULCAgSV9TRUNPTkQpOworICAgIGhl bHBlcl9mY29udGV4dF9jb21wYXJlMihTSF9UUkFOUywgSV9TRUNPTkQsIElfRklSU1QpOworICAg IGhlbHBlcl9mY29udGV4dF9jb21wYXJlMihTSF9UUkFOUywgSV9TRUNPTkQsIElfU0VDT05EKTsK KworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X2NvbXBhcmUyKFNIX1RSQU5T LCBJX05VTEwsICBJX0ZJUlNUKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworICAg IENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X2NvbXBhcmUyKFNIX1RSQU5TLCBJX0ZJ UlNULCBJX05VTEwpLAorICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNT RVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfY29tcGFyZTIoU0hfVFJBTlMsIElfTlVMTCwgIElf TlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKK30KKworLy8gRnVuY3Rpb24g c2VtYW5hZ2VfZmNvbnRleHRfa2V5X2NyZWF0ZQorCit2b2lkIGhlbHBlcl9mY29udGV4dF9rZXlf Y3JlYXRlKGxldmVsX3QgbGV2ZWwpIHsKKyAgICBzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqa2V5 ID0gTlVMTDsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfZmNvbnRleHRfa2V5X2NyZWF0ZShzaCwgIiIsIFNFTUFOQUdFX0ZDT05URVhUX0FMTCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5KSA+PSAwKTsK KyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleSk7CisKKyAgICBzZW1hbmFnZV9mY29udGV4 dF9rZXlfZnJlZShrZXkpOworCisgICAga2V5ID0gTlVMTDsKKworICAgIENVX0FTU0VSVChzZW1h bmFnZV9mY29udGV4dF9rZXlfY3JlYXRlKHNoLCAidGVzdGZjb250ZXh0IiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRU1BTkFHRV9GQ09OVEVYVF9BTEwsICZr ZXkpID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwoa2V5KTsKKworICAgIHNlbWFu YWdlX2Zjb250ZXh0X2tleV9mcmVlKGtleSk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFu YWdlX2Zjb250ZXh0X2tleV9jcmVhdGUoc2gsICJ0ZXN0ZmNvbnRleHQiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRU1BTkFHRV9GQ09OVEVYVF9BTEwsIE5VTEwp LCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0 X2Zjb250ZXh0X2tleV9jcmVhdGUodm9pZCkgeworICAgIGhlbHBlcl9mY29udGV4dF9rZXlfY3Jl YXRlKFNIX05VTEwpOworICAgIGhlbHBlcl9mY29udGV4dF9rZXlfY3JlYXRlKFNIX0hBTkRMRSk7 CisgICAgaGVscGVyX2Zjb250ZXh0X2tleV9jcmVhdGUoU0hfQ09OTkVDVCk7CisgICAgaGVscGVy X2Zjb250ZXh0X2tleV9jcmVhdGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFn ZV9mY29udGV4dF9rZXlfZXh0cmFjdAorLy8gVE9ETzogbWFrZSBzZW1hbmFnZV9mY29udGV4dF9r ZXlfY3JlYXRlIHJldHVybiBlcnJvcgorCisjZGVmaW5lIFNLX05VTEwgMQorI2RlZmluZSBTS19O RVcgMgorI2RlZmluZSBTS19JTkRFWCAzCisjZGVmaW5lIFNLX0tFWV9OVUxMIDQKK3ZvaWQgaGVs cGVyX2Zjb250ZXh0X2tleV9leHRyYWN0KGxldmVsX3QgbGV2ZWwsIGludCBtb2RlKSB7CisgICAg c2VtYW5hZ2VfZmNvbnRleHRfdCAqZmNvbnRleHQ7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfa2V5 X3QgKmtleTsKKyAgICBpbnQgcmVzdWx0OworICAgIAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7 CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBTS19OVUxMOgorICAgICAgICAg ICAgZmNvbnRleHQgPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0tf TkVXOgorICAgICAgICAgICAgZmNvbnRleHQgPSBnZXRfZmNvbnRleHRfbmV3KCk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTS19JTkRFWDoKKyAgICAgICAgICAgIGZjb250ZXh0 ID0gZ2V0X2Zjb250ZXh0X250aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl IFNLX0tFWV9OVUxMOgorICAgICAgICAgICAgZmNvbnRleHQgPSBnZXRfZmNvbnRleHRfbnRoKDAp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDVV9G QUlMX0ZBVEFMKCJJbnZhbGlkIG1vZGVcbiIpOworICAgIH0KKworICAgIGlmIChtb2RlID09IFNL X0tFWV9OVUxMKQorICAgICAgICByZXN1bHQgPSBzZW1hbmFnZV9mY29udGV4dF9rZXlfZXh0cmFj dChzaCwgZmNvbnRleHQsIE5VTEwpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gc2VtYW5h Z2VfZmNvbnRleHRfa2V5X2V4dHJhY3Qoc2gsIGZjb250ZXh0LCAma2V5KTsKKworICAgIENVX0FT U0VSVChyZXN1bHQgPj0gMCk7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9mY29udGV4dF9jb21w YXJlKGZjb250ZXh0LCBrZXkpOworCisgICAgQ1VfQVNTRVJUKHJlc3VsdCA9PSAwKTsKKworICAg IHNlbWFuYWdlX2Zjb250ZXh0X2tleV9mcmVlKGtleSk7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRf ZnJlZShmY29udGV4dCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7Cit9CisKK3ZvaWQg dGVzdF9mY29udGV4dF9rZXlfZXh0cmFjdCh2b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTCho ZWxwZXJfZmNvbnRleHRfa2V5X2V4dHJhY3QoU0hfQ09OTkVDVCwgU0tfTlVMTCksIFNJR1NFR1Yp OworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X2tleV9leHRyYWN0KFNIX0NP Tk5FQ1QsIFNLX0tFWV9OVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworCisg ICAgLy8gRklYTUUKKyAgICAvL2hlbHBlcl9mY29udGV4dF9rZXlfZXh0cmFjdChTSF9DT05ORUNU LCBTS19ORVcpOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X2tleV9leHRy YWN0KFNIX0NPTk5FQ1QsIFNLX05FVyksIFNJR1NFR1YpOworCisgICAgaGVscGVyX2Zjb250ZXh0 X2tleV9leHRyYWN0KFNIX0NPTk5FQ1QsIFNLX0lOREVYKTsKKworICAgIENVX0FTU0VSVF9TSUdO QUwoaGVscGVyX2Zjb250ZXh0X2tleV9leHRyYWN0KFNIX1RSQU5TLCBTS19OVUxMKSwgU0lHU0VH Vik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfa2V5X2V4dHJhY3QoU0hf VFJBTlMsIFNLX0tFWV9OVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworCisg ICAgLy8gRklYTUUKKyAgICAvL2hlbHBlcl9mY29udGV4dF9rZXlfZXh0cmFjdChTSF9UUkFOUywg U0tfTkVXKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9rZXlfZXh0cmFj dChTSF9UUkFOUywgU0tfTkVXKSwgU0lHU0VHVik7CisKKyAgICBoZWxwZXJfZmNvbnRleHRfa2V5 X2V4dHJhY3QoU0hfVFJBTlMsIFNLX0lOREVYKTsKK30KKyN1bmRlZiBTS19OVUxMCisjdW5kZWYg U0tfTkVXCisjdW5kZWYgU0tfSU5ERVgKKyN1bmRlZiBTS19LRVlfTlVMTAorCisvLyBGdW5jdGlv biBzZW1hbmFnZV9mY29udGV4dF9nZXRfZXhwciwgc2VtYW5hZ2VfZmNvbnRleHRfc2V0X2V4cHIK Kwordm9pZCBoZWxwZXJfZmNvbnRleHRfZ2V0X3NldF9leHByKGxldmVsX3QgbGV2ZWwsIGludCBm Y29udGV4dF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpuYW1lKSB7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfdCAqZmNvbnRleHQ7CisgICAgY29u c3QgY2hhciAqbmV3X25hbWUgPSBOVUxMOworICAgIAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7 CisKKyAgICBmY29udGV4dCA9IGdldF9mY29udGV4dF9udGgoZmNvbnRleHRfaW5kZXgpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X3NldF9leHByKHNoLCBmY29udGV4dCwgbmFt ZSkgPj0gMCk7CisKKyAgICBuZXdfbmFtZSA9IHNlbWFuYWdlX2Zjb250ZXh0X2dldF9leHByKGZj b250ZXh0KTsKKworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwobmV3X25hbWUpOworICAgIENV X0FTU0VSVF9TVFJJTkdfRVFVQUwobmV3X25hbWUsIG5hbWUpOworCisgICAgc2VtYW5hZ2VfZmNv bnRleHRfZnJlZShmY29udGV4dCk7CisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2 b2lkIHRlc3RfZmNvbnRleHRfZ2V0X3NldF9leHByKHZvaWQpIHsKKyAgICBDVV9BU1NFUlRfU0lH TkFMKGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2V4cHIoU0hfQ09OTkVDVCwgSV9GSVJTVCwgTlVM TCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFM KGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2V4cHIoU0hfQ09OTkVDVCwgSV9OVUxMLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGZjb250ZXh0 IiksIFNJR1NFR1YpOworCisgICAgaGVscGVyX2Zjb250ZXh0X2dldF9zZXRfZXhwcihTSF9DT05O RUNULCBJX0ZJUlNULCAidGVzdGZjb250ZXh0Iik7CisgICAgaGVscGVyX2Zjb250ZXh0X2dldF9z ZXRfZXhwcihTSF9DT05ORUNULCBJX0ZJUlNULCAiIik7CisgICAgaGVscGVyX2Zjb250ZXh0X2dl dF9zZXRfZXhwcihTSF9DT05ORUNULCBJX1NFQ09ORCwgInRlc3RmY29udGV4dCIpOworICAgIGhl bHBlcl9mY29udGV4dF9nZXRfc2V0X2V4cHIoU0hfQ09OTkVDVCwgSV9TRUNPTkQsICIiKTsKKwor ICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X2dldF9zZXRfZXhwcihTSF9UUkFO UywgSV9GSVJTVCwgTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBD VV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2V4cHIoU0hfVFJBTlMsIElf TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg InRlc3RmY29udGV4dCIpLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9mY29udGV4dF9nZXRfc2V0 X2V4cHIoU0hfVFJBTlMsIElfRklSU1QsICJ0ZXN0ZmNvbnRleHQiKTsKKyAgICBoZWxwZXJfZmNv bnRleHRfZ2V0X3NldF9leHByKFNIX1RSQU5TLCBJX0ZJUlNULCAiIik7CisgICAgaGVscGVyX2Zj b250ZXh0X2dldF9zZXRfZXhwcihTSF9UUkFOUywgSV9TRUNPTkQsICJ0ZXN0ZmNvbnRleHQiKTsK KyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3NldF9leHByKFNIX1RSQU5TLCBJX1NFQ09ORCwgIiIp OworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9mY29udGV4dF9nZXRfdHlwZSwgc2VtYW5hZ2Vf ZmNvbnRleHRfc2V0X3R5cGUKKwordm9pZCBoZWxwZXJfZmNvbnRleHRfZ2V0X3NldF90eXBlKGlu dCBmY29udGV4dF9pbmRleCwgaW50IHR5cGUpIHsKKyAgICBzZW1hbmFnZV9mY29udGV4dF90ICpm Y29udGV4dDsKKyAgICBpbnQgbmV3X3R5cGUgPSAtMTsKKyAgICAKKyAgICBzZXR1cF9oYW5kbGUo U0hfQ09OTkVDVCk7CisKKyAgICBmY29udGV4dCA9IGdldF9mY29udGV4dF9udGgoZmNvbnRleHRf aW5kZXgpOworCisgICAgc2VtYW5hZ2VfZmNvbnRleHRfc2V0X3R5cGUoZmNvbnRleHQsIHR5cGUp OworCisgICAgbmV3X3R5cGUgPSBzZW1hbmFnZV9mY29udGV4dF9nZXRfdHlwZShmY29udGV4dCk7 CisKKyAgICBDVV9BU1NFUlQobmV3X3R5cGUgPT0gdHlwZSk7CisKKyAgICBzZW1hbmFnZV9mY29u dGV4dF9mcmVlKGZjb250ZXh0KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30K Kwordm9pZCB0ZXN0X2Zjb250ZXh0X2dldF9zZXRfdHlwZSh2b2lkKSB7CisgICAgaGVscGVyX2Zj b250ZXh0X2dldF9zZXRfdHlwZShJX0ZJUlNULCBTRU1BTkFHRV9GQ09OVEVYVF9BTEwgLSAxKTsK KyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3NldF90eXBlKElfRklSU1QsIFNFTUFOQUdFX0ZDT05U RVhUX0FMTCk7CisgICAgaGVscGVyX2Zjb250ZXh0X2dldF9zZXRfdHlwZShJX0ZJUlNULCBTRU1B TkFHRV9GQ09OVEVYVF9ESVIpOworICAgIGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X3R5cGUoSV9G SVJTVCwgU0VNQU5BR0VfRkNPTlRFWFRfUElQRSk7CisgICAgaGVscGVyX2Zjb250ZXh0X2dldF9z ZXRfdHlwZShJX0ZJUlNULCBTRU1BTkFHRV9GQ09OVEVYVF9QSVBFICsgMSk7CisKKyAgICBoZWxw ZXJfZmNvbnRleHRfZ2V0X3NldF90eXBlKElfU0VDT05ELCBTRU1BTkFHRV9GQ09OVEVYVF9BTEwp OworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9mY29udGV4dF9nZXRfdHlwZV9zdHIKKwordm9p ZCBoZWxwZXJfZmNvbnRleHRfZ2V0X3R5cGVfc3RyKGludCB0eXBlLCBjb25zdCBjaGFyICpleHBf c3RyKSB7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzZW1hbmFnZV9mY29udGV4dF9nZXRf dHlwZV9zdHIodHlwZSksIGV4cF9zdHIpOworfQorCit2b2lkIHRlc3RfZmNvbnRleHRfZ2V0X3R5 cGVfc3RyKHZvaWQpIHsKKyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3R5cGVfc3RyKFNFTUFOQUdF X0ZDT05URVhUX0FMTCwgICAiYWxsIGZpbGVzIik7CisgICAgaGVscGVyX2Zjb250ZXh0X2dldF90 eXBlX3N0cihTRU1BTkFHRV9GQ09OVEVYVF9SRUcsICAgInJlZ3VsYXIgZmlsZSIpOworICAgIGhl bHBlcl9mY29udGV4dF9nZXRfdHlwZV9zdHIoU0VNQU5BR0VfRkNPTlRFWFRfRElSLCAgICJkaXJl Y3RvcnkiKTsKKyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3R5cGVfc3RyKFNFTUFOQUdFX0ZDT05U RVhUX0NIQVIsICAiY2hhcmFjdGVyIGRldmljZSIpOworICAgIGhlbHBlcl9mY29udGV4dF9nZXRf dHlwZV9zdHIoU0VNQU5BR0VfRkNPTlRFWFRfQkxPQ0ssICJibG9jayBkZXZpY2UiKTsKKyAgICBo ZWxwZXJfZmNvbnRleHRfZ2V0X3R5cGVfc3RyKFNFTUFOQUdFX0ZDT05URVhUX1NPQ0ssICAic29j a2V0Iik7CisgICAgaGVscGVyX2Zjb250ZXh0X2dldF90eXBlX3N0cihTRU1BTkFHRV9GQ09OVEVY VF9MSU5LLCAgInN5bWJvbGljIGxpbmsiKTsKKyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3R5cGVf c3RyKFNFTUFOQUdFX0ZDT05URVhUX1BJUEUsICAibmFtZWQgcGlwZSIpOworCisgICAgaGVscGVy X2Zjb250ZXh0X2dldF90eXBlX3N0cihTRU1BTkFHRV9GQ09OVEVYVF9BTEwgLSAxLCAgIj8/Pz8i KTsKKyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3R5cGVfc3RyKFNFTUFOQUdFX0ZDT05URVhUX1BJ UEUgKyAxLCAiPz8/PyIpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9mY29udGV4dF9nZXRf Y29uLCBzZW1hbmFnZV9mY29udGV4dF9zZXRfY29uCisKK3ZvaWQgaGVscGVyX2Zjb250ZXh0X2dl dF9zZXRfY29uKGxldmVsX3QgbGV2ZWwsIGludCBmY29udGV4dF9pbmRleCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbl9zdHIpIHsKKyAgICBzZW1hbmFn ZV9mY29udGV4dF90ICpmY29udGV4dDsKKyAgICBzZW1hbmFnZV9jb250ZXh0X3QgKmNvbiA9IE5V TEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpuZXdfY29uID0gTlVMTDsKKyAgICAKKyAgICBz ZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgZmNvbnRleHQgPSBnZXRfZmNvbnRleHRfbnRoKGZj b250ZXh0X2luZGV4KTsKKworICAgIGlmIChjb25fc3RyICE9IE5VTEwpIHsKKyAgICAgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfZnJvbV9zdHJpbmcoc2gsIGNvbl9zdHIsICZjb24pID49 IDApOworICAgICAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGNvbik7CisgICAgfQorICAgIGVs c2UgeworICAgICAgICBjb24gPSBOVUxMOworICAgIH0KKworICAgIC8vIHNldCBjb24KKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfc2V0X2NvbihzaCwgZmNvbnRleHQsIGNvbikgPj0g MCk7CisKKyAgICAvLyBnZXQgY29uCisgICAgbmV3X2NvbiA9IHNlbWFuYWdlX2Zjb250ZXh0X2dl dF9jb24oZmNvbnRleHQpOworCisgICAgaWYgKGNvbl9zdHIgIT0gTlVMTCkgeworICAgICAgICBD VV9BU1NFUlRfQ09OVEVYVF9FUVVBTChjb24sIG5ld19jb24pOworICAgIH0KKyAgICBlbHNlIHsK KyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OVUxMKG5ld19jb24pOworICAgIH0KKworICAgIHNlbWFu YWdlX2Zjb250ZXh0X2ZyZWUoZmNvbnRleHQpOworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsK K30KKwordm9pZCB0ZXN0X2Zjb250ZXh0X2dldF9zZXRfY29uKHZvaWQpIHsKKyAgICBDVV9BU1NF UlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2NvbihTSF9DT05ORUNULCBJX05VTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZXJfdTpyb2xl X3I6dHlwZV90OnMwIiksIFNJR1NFR1YpOworICAgIGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2Nv bihTSF9DT05ORUNULCBJX0ZJUlNULCBOVUxMKTsKKworICAgIGhlbHBlcl9mY29udGV4dF9nZXRf c2V0X2NvbihTSF9DT05ORUNULCBJX0ZJUlNULCAidXNlcl91OnJvbGVfcjp0eXBlX3Q6czAiKTsK KyAgICBoZWxwZXJfZmNvbnRleHRfZ2V0X3NldF9jb24oU0hfQ09OTkVDVCwgSV9TRUNPTkQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VyX3U6cm9sZV9yOnR5cGVfdDpzMCIp OworCisgICAgaGVscGVyX2Zjb250ZXh0X2dldF9zZXRfY29uKFNIX1RSQU5TLCBJX0ZJUlNULCBO VUxMKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2NvbihT SF9UUkFOUywgSV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ1c2VyX3U6cm9sZV9yOnR5cGVfdDpzMCIpLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9m Y29udGV4dF9nZXRfc2V0X2NvbihTSF9UUkFOUywgSV9GSVJTVCwgICJ1c2VyX3U6cm9sZV9yOnR5 cGVfdDpzMCIpOworICAgIGhlbHBlcl9mY29udGV4dF9nZXRfc2V0X2NvbihTSF9UUkFOUywgSV9T RUNPTkQsICJ1c2VyX3U6cm9sZV9yOnR5cGVfdDpzMCIpOworfQorCisvLyBGdW5jdGlvbiBzZW1h bmFnZV9mY29udGV4dF9jcmVhdGUKKwordm9pZCBoZWxwZXJfZmNvbnRleHRfY3JlYXRlKGxldmVs X3QgbGV2ZWwpIHsKKyAgICBzZW1hbmFnZV9mY29udGV4dF90ICpmY29udGV4dDsKKyAgICAKKyAg ICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0 X2NyZWF0ZShzaCwgJmZjb250ZXh0KSA+PSAwKTsKKworICAgIENVX0FTU0VSVF9QVFJfTlVMTChz ZW1hbmFnZV9mY29udGV4dF9nZXRfZXhwcihmY29udGV4dCkpOworICAgIENVX0FTU0VSVChzZW1h bmFnZV9mY29udGV4dF9nZXRfdHlwZShmY29udGV4dCkgPT0gU0VNQU5BR0VfRkNPTlRFWFRfQUxM KTsKKyAgICBDVV9BU1NFUlRfUFRSX05VTEwoc2VtYW5hZ2VfZmNvbnRleHRfZ2V0X2NvbihmY29u dGV4dCkpOworCisgICAgc2VtYW5hZ2VfZmNvbnRleHRfZnJlZShmY29udGV4dCk7CisgICAgY2xl YW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfZmNvbnRleHRfY3JlYXRlKHZvaWQp IHsKKyAgICBoZWxwZXJfZmNvbnRleHRfY3JlYXRlKFNIX05VTEwpOworICAgIGhlbHBlcl9mY29u dGV4dF9jcmVhdGUoU0hfSEFORExFKTsKKyAgICBoZWxwZXJfZmNvbnRleHRfY3JlYXRlKFNIX0NP Tk5FQ1QpOworICAgIGhlbHBlcl9mY29udGV4dF9jcmVhdGUoU0hfVFJBTlMpOworfQorCisvLyBG dW5jdGlvbiBzZW1hbmFnZV9mY29udGV4dF9jbG9uZQorLy8gVE9ETzogZXJyb3IgZ290b3MKKwor dm9pZCBoZWxwZXJfZmNvbnRleHRfY2xvbmUobGV2ZWxfdCBsZXZlbCwgaW50IGZjb250ZXh0X2lu ZGV4KSB7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfdCAqZmNvbnRleHQ7CisgICAgc2VtYW5hZ2Vf ZmNvbnRleHRfdCAqZmNvbnRleHRfY2xvbmU7CisgICAgY29uc3QgY2hhciAqZXhwcjsKKyAgICBj b25zdCBjaGFyICpleHByX2Nsb25lOworICAgIGludCB0eXBlOworICAgIGludCB0eXBlX2Nsb25l OworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAq Y29uX2Nsb25lOworICAgIAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBmY29udGV4 dCA9IGdldF9mY29udGV4dF9udGgoZmNvbnRleHRfaW5kZXgpOworCisgICAgLy8gY2xvbmUKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfY2xvbmUoc2gsIGZjb250ZXh0LCAmZmNvbnRl eHRfY2xvbmUpID49IDApOworCisgICAgLy8gY29tcGFyZSBleHByCisgICAgZXhwciA9IHNlbWFu YWdlX2Zjb250ZXh0X2dldF9leHByKGZjb250ZXh0KTsKKyAgICBleHByX2Nsb25lID0gc2VtYW5h Z2VfZmNvbnRleHRfZ2V0X2V4cHIoZmNvbnRleHRfY2xvbmUpOworCisgICAgQ1VfQVNTRVJUX1NU UklOR19FUVVBTChleHByLCBleHByX2Nsb25lKTsKKworICAgIC8vIGNvbXBhcmUgdHlwZQorICAg IHR5cGUgPSBzZW1hbmFnZV9mY29udGV4dF9nZXRfdHlwZShmY29udGV4dCk7CisgICAgdHlwZV9j bG9uZSA9IHNlbWFuYWdlX2Zjb250ZXh0X2dldF90eXBlKGZjb250ZXh0X2Nsb25lKTsKKworICAg IENVX0FTU0VSVF9FUVVBTCh0eXBlLCB0eXBlX2Nsb25lKTsKKworICAgIC8vIGNvbXBhcmUgY29u dGV4dAorICAgIGNvbiA9IHNlbWFuYWdlX2Zjb250ZXh0X2dldF9jb24oZmNvbnRleHQpOworICAg IGNvbl9jbG9uZSA9IHNlbWFuYWdlX2Zjb250ZXh0X2dldF9jb24oZmNvbnRleHRfY2xvbmUpOwor CisgICAgQ1VfQVNTRVJUX0NPTlRFWFRfRVFVQUwoY29uLCBjb25fY2xvbmUpOworCisgICAgc2Vt YW5hZ2VfZmNvbnRleHRfZnJlZShmY29udGV4dCk7CisgICAgc2VtYW5hZ2VfZmNvbnRleHRfZnJl ZShmY29udGV4dF9jbG9uZSk7CisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lk IHRlc3RfZmNvbnRleHRfY2xvbmUodm9pZCkgeworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVy X2Zjb250ZXh0X2Nsb25lKFNIX0NPTk5FQ1QsIElfTlVMTCksIFNJR1NFR1YpOworICAgIGhlbHBl cl9mY29udGV4dF9jbG9uZShTSF9DT05ORUNULCBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfZmNvbnRl eHRfY2xvbmUoU0hfQ09OTkVDVCwgSV9TRUNPTkQpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTCho ZWxwZXJfZmNvbnRleHRfY2xvbmUoU0hfVFJBTlMsIElfTlVMTCksIFNJR1NFR1YpOworICAgIGhl bHBlcl9mY29udGV4dF9jbG9uZShTSF9UUkFOUywgSV9GSVJTVCk7CisgICAgaGVscGVyX2Zjb250 ZXh0X2Nsb25lKFNIX1RSQU5TLCBJX1NFQ09ORCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdl X2Zjb250ZXh0X3F1ZXJ5CisKK3ZvaWQgaGVscGVyX2Zjb250ZXh0X3F1ZXJ5KGxldmVsX3QgbGV2 ZWwsIGNvbnN0IGNoYXIgKmZjb250ZXh0X2V4cHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZmNvbnRleHRfdHlwZSwgaW50IGV4cF9yZXN1bHQpIHsKKyAgICBzZW1hbmFnZV9mY29u dGV4dF9rZXlfdCAqa2V5OworICAgIC8vIHNvbWUgbm9uLW51bGwgdmFsdWUKKyAgICBzZW1hbmFn ZV9mY29udGV4dF90ICpyZXNwb25zZSA9ICh2b2lkICopIDQyOworICAgIGNvbnN0IGNoYXIgKmV4 cHI7CisgICAgaW50IHJlc3VsdDsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBr ZXkgPSBnZXRfZmNvbnRleHRfa2V5X2Zyb21fc3RyKGZjb250ZXh0X2V4cHIsIGZjb250ZXh0X3R5 cGUpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfZmNvbnRleHRfcXVlcnkoc2gsIGtleSwgJnJl c3BvbnNlKTsKKworICAgIGlmIChleHBfcmVzdWx0ID49IDApIHsKKyAgICAgICAgQ1VfQVNTRVJU KHJlc3VsdCA+PSAwKTsKKworICAgICAgICBleHByID0gc2VtYW5hZ2VfZmNvbnRleHRfZ2V0X2V4 cHIocmVzcG9uc2UpOworCisgICAgICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoZXhwciwgZmNv bnRleHRfZXhwcik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBDVV9BU1NFUlQocmVzdWx0 IDwgMCk7CisgICAgICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAodm9pZCAqKSA0Mik7CisgICAg fQorCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfZmNvbnRleHRf cXVlcnkodm9pZCkgeworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X3F1ZXJ5 KFNIX0NPTk5FQ1QsIE5VTEwsIDAsIC0xKSwgU0lHU0VHVik7CisgICAgaGVscGVyX2Zjb250ZXh0 X3F1ZXJ5KFNIX0NPTk5FQ1QsIEZDT05URVhUX05PTkVYSVNURU5UX0VYUFIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIEZDT05URVhUX05PTkVYSVNURU5UX1RZUEUsIC0xKTsKKyAgICAvLyBk aWZmZXJlbnQgdHlwZQorICAgIGhlbHBlcl9mY29udGV4dF9xdWVyeShTSF9DT05ORUNULCBGQ09O VEVYVDJfRVhQUiwgRkNPTlRFWFRfVFlQRSwgLTEpOworCisgICAgaGVscGVyX2Zjb250ZXh0X3F1 ZXJ5KFNIX0NPTk5FQ1QsIEZDT05URVhUX0VYUFIsICBGQ09OVEVYVF9UWVBFLCAgMSk7CisgICAg aGVscGVyX2Zjb250ZXh0X3F1ZXJ5KFNIX0NPTk5FQ1QsIEZDT05URVhUMl9FWFBSLCBGQ09OVEVY VDJfVFlQRSwgMSk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9mY29udGV4dF9xdWVy eShTSF9UUkFOUywgTlVMTCwgMCwgLTEpLCBTSUdTRUdWKTsKKyAgICBoZWxwZXJfZmNvbnRleHRf cXVlcnkoU0hfVFJBTlMsIEZDT05URVhUX05PTkVYSVNURU5UX0VYUFIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIEZDT05URVhUX05PTkVYSVNURU5UX1RZUEUsIC0xKTsKKyAgICAvLyBkaWZm ZXJlbnQgdHlwZQorICAgIGhlbHBlcl9mY29udGV4dF9xdWVyeShTSF9UUkFOUywgRkNPTlRFWFQy X0VYUFIsIEZDT05URVhUX1RZUEUsIC0xKTsKKworICAgIGhlbHBlcl9mY29udGV4dF9xdWVyeShT SF9UUkFOUywgRkNPTlRFWFRfRVhQUiwgIEZDT05URVhUX1RZUEUsICAxKTsKKyAgICBoZWxwZXJf ZmNvbnRleHRfcXVlcnkoU0hfVFJBTlMsIEZDT05URVhUMl9FWFBSLCBGQ09OVEVYVDJfVFlQRSwg MSk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2Zjb250ZXh0X2V4aXN0cworCit2b2lkIGhl bHBlcl9mY29udGV4dF9leGlzdHMobGV2ZWxfdCBsZXZlbCwgY2hhciAqIGZjb250ZXh0X2V4cHIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZjb250ZXh0X3R5cGUsIGludCBleHBf cmVzcG9uc2UpIHsKKyAgICBzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqa2V5OworICAgIGludCBy ZXNwb25zZTsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBrZXkgPSBnZXRfZmNv bnRleHRfa2V5X2Zyb21fc3RyKGZjb250ZXh0X2V4cHIsIGZjb250ZXh0X3R5cGUpOworCisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2V4aXN0cyhzaCwga2V5LCAmcmVzcG9uc2UpID49 IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSBleHBfcmVzcG9uc2UpOworCisgICAgQ1Vf QVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29udGV4dF9leGlzdHMoc2gsIGtleSwgTlVMTCksIFNJ R1NFR1YpOworCisgICAgc2VtYW5hZ2VfZmNvbnRleHRfa2V5X2ZyZWUoa2V5KTsKKworICAgIGNs ZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Zjb250ZXh0X2V4aXN0cyh2b2lk KSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfZmNvbnRleHRfZXhpc3RzKFNIX0NPTk5F Q1QsIE5VTEwsIDAsIDApLCBTSUdTRUdWKTsKKyAgICBoZWxwZXJfZmNvbnRleHRfZXhpc3RzKFNI X0NPTk5FQ1QsIEZDT05URVhUX05PTkVYSVNURU5UX0VYUFIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGQ09OVEVYVF9OT05FWElTVEVOVF9UWVBFLCAwKTsKKyAgICAvLyBkaWZmZXJlbnQg dHlwZQorICAgIGhlbHBlcl9mY29udGV4dF9leGlzdHMoU0hfQ09OTkVDVCwgRkNPTlRFWFQyX0VY UFIsIEZDT05URVhUX1RZUEUsIDApOworCisgICAgaGVscGVyX2Zjb250ZXh0X2V4aXN0cyhTSF9D T05ORUNULCBGQ09OVEVYVF9FWFBSLCAgRkNPTlRFWFRfVFlQRSwgIDEpOworICAgIGhlbHBlcl9m Y29udGV4dF9leGlzdHMoU0hfQ09OTkVDVCwgRkNPTlRFWFQyX0VYUFIsIEZDT05URVhUMl9UWVBF LCAxKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX2Zjb250ZXh0X2V4aXN0cyhTSF9U UkFOUywgTlVMTCwgMCwgMCksIFNJR1NFR1YpOworICAgIGhlbHBlcl9mY29udGV4dF9leGlzdHMo U0hfVFJBTlMsIEZDT05URVhUX05PTkVYSVNURU5UX0VYUFIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGQ09OVEVYVF9OT05FWElTVEVOVF9UWVBFLCAwKTsKKyAgICAvLyBkaWZmZXJlbnQg dHlwZQorICAgIGhlbHBlcl9mY29udGV4dF9leGlzdHMoU0hfVFJBTlMsIEZDT05URVhUMl9FWFBS LCBGQ09OVEVYVF9UWVBFLCAgMCk7CisKKyAgICBoZWxwZXJfZmNvbnRleHRfZXhpc3RzKFNIX1RS QU5TLCBGQ09OVEVYVF9FWFBSLCAgRkNPTlRFWFRfVFlQRSwgIDEpOworICAgIGhlbHBlcl9mY29u dGV4dF9leGlzdHMoU0hfVFJBTlMsIEZDT05URVhUMl9FWFBSLCBGQ09OVEVYVDJfVFlQRSwgMSk7 Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2Zjb250ZXh0X2NvdW50CisKK3ZvaWQgdGVzdF9m Y29udGV4dF9jb3VudCh2b2lkKSB7CisgICAgdW5zaWduZWQgaW50IHJlc3BvbnNlOworCisgICAg Q1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29udGV4dF9jb3VudChOVUxMLCAmcmVzcG9uc2Up LCBTSUdTRUdWKTsKKworICAgIC8vaGFuZGxlCisgICAgc2V0dXBfaGFuZGxlKFNIX0hBTkRMRSk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfY291bnQoc2gsICZyZXNwb25zZSkg PCAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9jb3VudChzaCwgTlVMTCkg PCAwKTsKKyAgICAKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9IQU5ETEUpOworICAgIAorICAgIC8v Y29ubmVjdAorICAgIHJlc3BvbnNlID0gMDsKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfY291bnQoc2gsICZyZXNwb25zZSkg Pj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IEZDT05URVhUU19DT1VOVCk7CisKKyAg ICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Zjb250ZXh0X2NvdW50KHNoLCBOVUxMKSwgU0lH U0VHVik7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIC8vdHJhbnMK KyAgICByZXNwb25zZSA9IDA7CisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9jb3VudChzaCwgJnJlc3BvbnNlKSA+PSAwKTsKKyAg ICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gRkNPTlRFWFRTX0NPVU5UKTsKKworICAgIENVX0FTU0VS VF9TSUdOQUwoc2VtYW5hZ2VfZmNvbnRleHRfY291bnQoc2gsIE5VTEwpLCBTSUdTRUdWKTsKKwor ICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vf ZmNvbnRleHRfaXRlcmF0ZQorCit1bnNpZ25lZCBpbnQgY291bnRlcl9mY29udGV4dF9pdGVyYXRl ID0gMDsKKworaW50IGhhbmRsZXJfZmNvbnRleHRfaXRlcmF0ZShjb25zdCBzZW1hbmFnZV9mY29u dGV4dF90ICpyZWNvcmQsIHZvaWQgKnZhcmcpIHsKKyAgICBjb3VudGVyX2Zjb250ZXh0X2l0ZXJh dGUrKzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBoZWxwZXJfZmNvbnRleHRfaXRlcmF0ZV9p bnZhbGlkKHZvaWQpIHsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Zjb250ZXh0X2l0 ZXJhdGUoTlVMTCwgJmhhbmRsZXJfZmNvbnRleHRfaXRlcmF0ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCksIFNJR1NFR1YpOworCisgICAgc2V0 dXBfaGFuZGxlKFNIX0hBTkRMRSk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRf aXRlcmF0ZShzaCwgJmhhbmRsZXJfZmNvbnRleHRfaXRlcmF0ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX2Zjb250ZXh0X2l0ZXJhdGUoc2gsIE5VTEwsIE5VTEwpIDwgMCk7CisKKyAgICBjbGVhbnVw X2hhbmRsZShTSF9IQU5ETEUpOworfQorCit2b2lkIGhlbHBlcl9mY29udGV4dF9pdGVyYXRlKGxl dmVsX3QgbGV2ZWwpIHsKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgY291bnRlcl9m Y29udGV4dF9pdGVyYXRlID0gMDsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9p dGVyYXRlKHNoLCAmaGFuZGxlcl9mY29udGV4dF9pdGVyYXRlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpID49IDApOworICAgIENVX0FTU0VSVChjb3VudGVy X2Zjb250ZXh0X2l0ZXJhdGUgPT0gRkNPTlRFWFRTX0NPVU5UKTsKKworICAgIENVX0FTU0VSVF9T SUdOQUwoc2VtYW5hZ2VfZmNvbnRleHRfaXRlcmF0ZShzaCwgTlVMTCwgTlVMTCksIFNJR1NFR1Yp OworCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3RfZmNvbnRleHRf aXRlcmF0ZSh2b2lkKSB7CisgICAgaGVscGVyX2Zjb250ZXh0X2l0ZXJhdGVfaW52YWxpZCgpOwor ICAgIGhlbHBlcl9mY29udGV4dF9pdGVyYXRlKFNIX0NPTk5FQ1QpOworICAgIGhlbHBlcl9mY29u dGV4dF9pdGVyYXRlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfZmNvbnRl eHRfbGlzdAorCit2b2lkIGhlbHBlcl9mY29udGV4dF9saXN0X2ludmFsaWQodm9pZCkgeworICAg IHNlbWFuYWdlX2Zjb250ZXh0X3QgKipyZWNvcmRzOworICAgIHVuc2lnbmVkIGludCBjb3VudDsK KworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfZmNvbnRleHRfbGlzdChOVUxMLCAmcmVj b3JkcywgJmNvdW50KSwgU0lHU0VHVik7CisKKyAgICBzZXR1cF9oYW5kbGUoU0hfSEFORExFKTsK KyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfbGlzdChzaCwgJnJlY29yZHMs ICZjb3VudCkgPCAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9saXN0KHNo LCBOVUxMLCAmY291bnQpIDwgMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2xp c3Qoc2gsICZyZWNvcmRzLCBOVUxMKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfSEFO RExFKTsKK30KKwordm9pZCBoZWxwZXJfZmNvbnRleHRfbGlzdChsZXZlbF90IGxldmVsKSB7Cisg ICAgc2VtYW5hZ2VfZmNvbnRleHRfdCAqKnJlY29yZHM7CisgICAgdW5zaWduZWQgaW50IGNvdW50 OworCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2VfZmNvbnRleHRfbGlzdChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisgICAgQ1VfQVNT RVJUKGNvdW50ID09IEZDT05URVhUU19DT1VOVCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChy ZWNvcmRzW2ldKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv dW50OyBpKyspIHsKKyAgICAgICAgc2VtYW5hZ2VfZmNvbnRleHRfZnJlZShyZWNvcmRzW2ldKTsK KyAgICB9CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Zjb250ZXh0X2xpc3Qoc2gs IE5VTEwsICZjb3VudCksIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vf ZmNvbnRleHRfbGlzdChzaCwgJnJlY29yZHMsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFu dXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Zjb250ZXh0X2xpc3Qodm9pZCkgewor ICAgIGhlbHBlcl9mY29udGV4dF9saXN0X2ludmFsaWQoKTsKKyAgICBoZWxwZXJfZmNvbnRleHRf bGlzdChTSF9DT05ORUNUKTsKKyAgICBoZWxwZXJfZmNvbnRleHRfbGlzdChTSF9UUkFOUyk7Cit9 CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2Zjb250ZXh0X21vZGlmeV9sb2NhbCwgc2VtYW5hZ2Vf ZmNvbnRleHRfZGVsX2xvY2FsCisKK3ZvaWQgaGVscGVyX2Zjb250ZXh0X21vZGlmeV9kZWxfbG9j YWwobGV2ZWxfdCBsZXZlbCwgaW50IGZjb250ZXh0X2luZGV4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb25fc3RyLCBpbnQgZXhwX3Jlc3VsdCkg eworICAgIHNlbWFuYWdlX2Zjb250ZXh0X3QgKmZjb250ZXh0OworICAgIHNlbWFuYWdlX2Zjb250 ZXh0X3QgKmZjb250ZXh0X2xvY2FsOworICAgIHNlbWFuYWdlX2Zjb250ZXh0X2tleV90ICprZXkg PSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uID0gTlVMTDsKKyAgICBpbnQgcmVz dWx0OworCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKworICAgIGZjb250ZXh0ID0gZ2V0X2Zj b250ZXh0X250aChmY29udGV4dF9pbmRleCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNv bnRleHRfa2V5X2V4dHJhY3Qoc2gsIGZjb250ZXh0LCAma2V5KSA+PSAwKTsKKyAgICBDVV9BU1NF UlRfUFRSX05PVF9OVUxMKGtleSk7CisKKyAgICBpZiAoY29uX3N0ciAhPSBOVUxMKSB7CisgICAg ICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNoLCBjb25fc3RyLCAm Y29uKSA+PSAwKTsKKyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChjb24pOworICAgIH0K KyAgICBlbHNlIHsKKyAgICAgICAgY29uID0gTlVMTDsKKyAgICB9CisKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfZmNvbnRleHRfc2V0X2NvbihzaCwgZmNvbnRleHQsIGNvbikgPj0gMCk7CisKKyAg ICByZXN1bHQgPSBzZW1hbmFnZV9mY29udGV4dF9tb2RpZnlfbG9jYWwoc2gsIGtleSwgZmNvbnRl eHQpOworCisgICAgaWYgKGV4cF9yZXN1bHQgPCAwKSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1 bHQgPCAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPj0g MCk7CisKKyAgICAgICAgaWYgKGxldmVsID09IFNIX1RSQU5TKSB7CisgICAgICAgICAgICBoZWxw ZXJfY29tbWl0KCk7CisgICAgICAgICAgICBoZWxwZXJfYmVnaW5fdHJhbnNhY3Rpb24oKTsKKyAg ICAgICAgfQorCisgICAgICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9xdWVyeV9sb2Nh bChzaCwga2V5LCAmZmNvbnRleHRfbG9jYWwpID49IDApOworICAgICAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfZmNvbnRleHRfY29tcGFyZTIoZmNvbnRleHRfbG9jYWwsIGZjb250ZXh0KSA9PSAwKTsK KworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfZGVsX2xvY2FsKHNoLCBrZXkp ID49IDApOworCisgICAgICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9xdWVyeV9sb2Nh bChzaCwga2V5LCAmZmNvbnRleHRfbG9jYWwpIDwgMCk7CisgICAgfQorCisgICAgc2VtYW5hZ2Vf ZmNvbnRleHRfa2V5X2ZyZWUoa2V5KTsKKyAgICBzZW1hbmFnZV9mY29udGV4dF9mcmVlKGZjb250 ZXh0KTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X2Zjb250 ZXh0X21vZGlmeV9kZWxfbG9jYWwodm9pZCkgeworICAgIGhlbHBlcl9mY29udGV4dF9tb2RpZnlf ZGVsX2xvY2FsKFNIX0NPTk5FQ1QsIElfRklSU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInN5c3RlbV91Om9iamVjdF9yOnRtcF90OnMwIiwgLTEpOworICAgIGhlbHBl cl9mY29udGV4dF9tb2RpZnlfZGVsX2xvY2FsKFNIX0NPTk5FQ1QsIElfU0VDT05ELAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW1fdTpvYmplY3Rfcjp0bXBfdDpz MCIsIC0xKTsKKworICAgIGhlbHBlcl9mY29udGV4dF9tb2RpZnlfZGVsX2xvY2FsKFNIX1RSQU5T LCBJX0ZJUlNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW1f dTpvYmplY3Rfcjp0bXBfdDpzMCIsIDEpOworICAgIGhlbHBlcl9mY29udGV4dF9tb2RpZnlfZGVs X2xvY2FsKFNIX1RSQU5TLCBJX1NFQ09ORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAic3lzdGVtX3U6b2JqZWN0X3I6dG1wX3Q6czAiLCAxKTsKK30KKworLy8gRnVuY3Rp b24gc2VtYW5hZ2VfZmNvbnRleHRfcXVlcnlfbG9jYWwKKwordm9pZCB0ZXN0X2Zjb250ZXh0X3F1 ZXJ5X2xvY2FsKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9mY29udGV4dF9rZXlfdCAqa2V5ID0gTlVM TDsKKyAgICBzZW1hbmFnZV9mY29udGV4dF90ICpyZXNwb25zZSA9IE5VTEw7CisKKyAgICAvLyBj b25uZWN0CisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAga2V5ID0gZ2V0X2Zj b250ZXh0X2tleV9udGgoSV9GSVJTVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRl eHRfcXVlcnlfbG9jYWwoc2gsIGtleSwgJnJlc3BvbnNlKSA8IDApOworICAgIENVX0FTU0VSVF9Q VFJfTlVMTChyZXNwb25zZSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKKwor ICAgIC8vIHRyYW5zYWN0aW9uCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGtl eSA9IGdldF9mY29udGV4dF9rZXlfbnRoKElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX2Zjb250ZXh0X3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZyZXNwb25zZSkgPCAwKTsKKyAgICBD VV9BU1NFUlRfUFRSX05VTEwocmVzcG9uc2UpOworCisgICAgYWRkX2xvY2FsX2Zjb250ZXh0KElf RklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X3F1ZXJ5X2xvY2FsKHNo LCBrZXksICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZXNw b25zZSk7CisKKyAgICBzZW1hbmFnZV9mY29udGV4dF9rZXlfZnJlZShrZXkpOworICAgIGtleSA9 IGdldF9mY29udGV4dF9rZXlfbnRoKElfU0VDT05EKTsKKworICAgIGFkZF9sb2NhbF9mY29udGV4 dChJX1NFQ09ORCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfcXVlcnlfbG9j YWwoc2gsIGtleSwgJnJlc3BvbnNlKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxM KHJlc3BvbnNlKTsKKworICAgIGRlbGV0ZV9sb2NhbF9mY29udGV4dChJX0ZJUlNUKTsKKyAgICBk ZWxldGVfbG9jYWxfZmNvbnRleHQoSV9TRUNPTkQpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RS QU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfZmNvbnRleHRfZXhpc3RzX2xvY2FsCisK K3ZvaWQgdGVzdF9mY29udGV4dF9leGlzdHNfbG9jYWwodm9pZCkgeworICAgIGludCByZXNwb25z ZSA9IC0xOworICAgIHNlbWFuYWdlX2Zjb250ZXh0X2tleV90ICprZXk7CisgICAgc2V0dXBfaGFu ZGxlKFNIX1RSQU5TKTsKKworICAgIGtleSA9IGdldF9mY29udGV4dF9rZXlfbnRoKElfRklSU1Qp OworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2V4aXN0c19sb2NhbChzaCwga2V5 LCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAwKTsKKworICAg IGFkZF9sb2NhbF9mY29udGV4dChJX0ZJUlNUKTsKKyAgICByZXNwb25zZSA9IC0xOworCisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2V4aXN0c19sb2NhbChzaCwga2V5LCAmcmVzcG9u c2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAxKTsKKworICAgIGRlbGV0ZV9s b2NhbF9mY29udGV4dChJX0ZJUlNUKTsKKyAgICByZXNwb25zZSA9IC0xOworCisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX2Zjb250ZXh0X2V4aXN0c19sb2NhbChzaCwga2V5LCAmcmVzcG9uc2UpID49 IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAwKTsKKworICAgIHJlc3BvbnNlID0gLTE7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfZXhpc3RzX2xvY2FsKHNoLCBOVUxM LCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAwKTsKKworICAg IENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfZmNvbnRleHRfZXhpc3RzX2xvY2FsKHNoLCBrZXks IE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKwor Ly8gRnVuY3Rpb24gc2VtYW5hZ2VfZmNvbnRleHRfY291bnRfbG9jYWwKKwordm9pZCB0ZXN0X2Zj b250ZXh0X2NvdW50X2xvY2FsKHZvaWQpIHsKKyAgICB1bnNpZ25lZCBpbnQgcmVzcG9uc2U7CisK KyAgICAvLyBudWxsCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29udGV4dF9jb3Vu dF9sb2NhbChOVUxMLCAmcmVzcG9uc2UpLCBTSUdTRUdWKTsKKworICAgIC8vIGhhbmRsZQorICAg IHNldHVwX2hhbmRsZShTSF9IQU5ETEUpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250 ZXh0X2NvdW50X2xvY2FsKHNoLCAmcmVzcG9uc2UpIDwgMCk7CisKKyAgICBjbGVhbnVwX2hhbmRs ZShTSF9IQU5ETEUpOworICAgIAorICAgIC8vIGNvbm5lY3QKKyAgICBzZXR1cF9oYW5kbGUoU0hf Q09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfY291bnRfbG9jYWwo c2gsICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IDApOworCisg ICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29udGV4dF9jb3VudF9sb2NhbChzaCwgTlVM TCksIFNJR1NFR1YpOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisgICAgCisg ICAgLy8gdHJhbnNhY3Rpb24KKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworICAgIAorICAg IENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9jb3VudF9sb2NhbChzaCwgJnJlc3BvbnNlKSA+ PSAwKTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gMCk7CisKKyAgICBhZGRfbG9jYWxfZmNv bnRleHQoSV9GSVJTVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfY291bnRf bG9jYWwoc2gsICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IDEp OworCisgICAgYWRkX2xvY2FsX2Zjb250ZXh0KElfU0VDT05EKTsKKworICAgIENVX0FTU0VSVChz ZW1hbmFnZV9mY29udGV4dF9jb3VudF9sb2NhbChzaCwgJnJlc3BvbnNlKSA+PSAwKTsKKyAgICBD VV9BU1NFUlQocmVzcG9uc2UgPT0gMik7CisKKyAgICBkZWxldGVfbG9jYWxfZmNvbnRleHQoSV9T RUNPTkQpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2NvdW50X2xvY2FsKHNo LCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9PSAxKTsKKworICAg IGRlbGV0ZV9sb2NhbF9mY29udGV4dChJX0ZJUlNUKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwo c2VtYW5hZ2VfZmNvbnRleHRfY291bnRfbG9jYWwoc2gsIE5VTEwpLCBTSUdTRUdWKTsKKworICAg IGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfZmNv bnRleHRfaXRlcmF0ZV9sb2NhbAorCit1bnNpZ25lZCBpbnQgY291bnRlcl9mY29udGV4dF9pdGVy YXRlX2xvY2FsID0gMDsKKworaW50IGhhbmRsZXJfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbChjb25z dCBzZW1hbmFnZV9mY29udGV4dF90ICpyZWNvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKnZhcmcpIHsKKyAgICBjb3VudGVyX2Zjb250ZXh0X2l0ZXJhdGVfbG9j YWwrKzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0X2Zjb250ZXh0X2l0ZXJhdGVfbG9j YWwodm9pZCkgeworICAgIC8vIG51bGwKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2Zj b250ZXh0X2l0ZXJhdGVfbG9jYWwoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmaGFuZGxlcl9mY29udGV4dF9pdGVyYXRlX2xvY2FsLCBOVUxMKSwgU0lHU0VHVik7CisKKyAg ICAvLyBoYW5kbGUKKyAgICBzZXR1cF9oYW5kbGUoU0hfSEFORExFKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9mY29udGV4dF9pdGVyYXRlX2xvY2FsKHNoLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmhhbmRsZXJfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbCwgTlVMTCkg PCAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9pdGVyYXRlX2xvY2FsKHNo LCBOVUxMLCBOVUxMKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfSEFORExFKTsKKyAg ICAKKyAgICAvLyBjb25uZWN0CisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAg Y291bnRlcl9mY29udGV4dF9pdGVyYXRlX2xvY2FsID0gMDsKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2VfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbChzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmhhbmRsZXJfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbCwgTlVMTCkgPj0gMCk7Cisg ICAgQ1VfQVNTRVJUKGNvdW50ZXJfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbCA9PSAwKTsKKworICAg IC8vIEZJWE1FCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2l0ZXJhdGVfbG9jYWwo c2gsIE5VTEwsIE5VTEwpID49IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7 CisKKyAgICAvLyB0cmFuc2FjdGlvbgorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAg ICBjb3VudGVyX2Zjb250ZXh0X2l0ZXJhdGVfbG9jYWwgPSAwOworICAgIENVX0FTU0VSVChzZW1h bmFnZV9mY29udGV4dF9pdGVyYXRlX2xvY2FsKHNoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmaGFuZGxlcl9mY29udGV4dF9pdGVyYXRlX2xvY2FsLCBOVUxMKSA+PSAwKTsK KyAgICBDVV9BU1NFUlQoY291bnRlcl9mY29udGV4dF9pdGVyYXRlX2xvY2FsID09IDApOworCisg ICAgYWRkX2xvY2FsX2Zjb250ZXh0KElfRklSU1QpOworCisgICAgY291bnRlcl9mY29udGV4dF9p dGVyYXRlX2xvY2FsID0gMDsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNvbnRleHRfaXRlcmF0 ZV9sb2NhbChzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZXJf ZmNvbnRleHRfaXRlcmF0ZV9sb2NhbCwgTlVMTCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50 ZXJfZmNvbnRleHRfaXRlcmF0ZV9sb2NhbCA9PSAxKTsKKworICAgIGFkZF9sb2NhbF9mY29udGV4 dChJX1NFQ09ORCk7CisKKyAgICBjb3VudGVyX2Zjb250ZXh0X2l0ZXJhdGVfbG9jYWwgPSAwOwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9pdGVyYXRlX2xvY2FsKHNoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlcl9mY29udGV4dF9pdGVyYXRlX2xv Y2FsLCBOVUxMKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoY291bnRlcl9mY29udGV4dF9pdGVyYXRl X2xvY2FsID09IDIpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29udGV4dF9p dGVyYXRlX2xvY2FsKHNoLCBOVUxMLCBOVUxMKSwgU0lHU0VHVik7CisKKyAgICBkZWxldGVfbG9j YWxfZmNvbnRleHQoSV9GSVJTVCk7CisgICAgZGVsZXRlX2xvY2FsX2Zjb250ZXh0KElfU0VDT05E KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFu YWdlX2Zjb250ZXh0X2xpc3RfbG9jYWwKKwordm9pZCB0ZXN0X2Zjb250ZXh0X2xpc3RfbG9jYWwo dm9pZCkgeworICAgIHNlbWFuYWdlX2Zjb250ZXh0X3QgKipyZWNvcmRzOworICAgIHVuc2lnbmVk IGludCBjb3VudDsKKworICAgIC8vIG51bGwKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdl X2Zjb250ZXh0X2xpc3RfbG9jYWwoTlVMTCwgJnJlY29yZHMsICZjb3VudCksCisgICAgICAgICAg ICAgICAgICAgICBTSUdTRUdWKTsKKworICAgIC8vIGhhbmRsZQorICAgIHNldHVwX2hhbmRsZShT SF9IQU5ETEUpOworICAgIAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9mY29udGV4dF9saXN0X2xv Y2FsKHNoLCAmcmVjb3JkcywgJmNvdW50KSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X2Zjb250ZXh0X2xpc3RfbG9jYWwoc2gsIE5VTEwsICZjb3VudCkgPCAwKTsKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfZmNvbnRleHRfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsIE5VTEwpIDwgMCk7 CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9IQU5ETEUpOworCisgICAgLy8gY29ubmVjdAorICAg IHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf ZmNvbnRleHRfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisgICAgQ1Vf QVNTRVJUKGNvdW50ID09IDApOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29u dGV4dF9saXN0X2xvY2FsKHNoLCBOVUxMLCAmY291bnQpLCBTSUdTRUdWKTsKKyAgICBDVV9BU1NF UlRfU0lHTkFMKHNlbWFuYWdlX2Zjb250ZXh0X2xpc3RfbG9jYWwoc2gsICZyZWNvcmRzLCBOVUxM KSwgU0lHU0VHVik7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIC8v IHRyYW5zYWN0aW9uCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9mY29udGV4dF9saXN0X2xvY2FsKHNoLCAmcmVjb3JkcywgJmNvdW50KSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoY291bnQgPT0gMCk7CisKKyAgICBhZGRfbG9jYWxfZmNvbnRleHQo SV9GSVJTVCk7CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Zjb250ZXh0X2xpc3RfbG9j YWwoc2gsICZyZWNvcmRzLCAmY291bnQpID49IDApOworICAgIENVX0FTU0VSVChjb3VudCA9PSAx KTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKHJlY29yZHNbMF0pOworCisgICAgYWRkX2xv Y2FsX2Zjb250ZXh0KElfU0VDT05EKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZmNv bnRleHRfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisgICAgQ1VfQVNT RVJUKGNvdW50ID09IDIpOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwocmVjb3Jkc1swXSk7 CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZWNvcmRzWzFdKTsKKworICAgIENVX0FTU0VS VF9TSUdOQUwoc2VtYW5hZ2VfZmNvbnRleHRfbGlzdF9sb2NhbChzaCwgTlVMTCwgJmNvdW50KSwg U0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9mY29udGV4dF9saXN0X2xv Y2FsKHNoLCAmcmVjb3JkcywgTlVMTCksIFNJR1NFR1YpOworCisgICAgZGVsZXRlX2xvY2FsX2Zj b250ZXh0KElfRklSU1QpOworICAgIGRlbGV0ZV9sb2NhbF9mY29udGV4dChJX1NFQ09ORCk7Cisg ICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQoKZGlmZiAtLWdpdCBhL2xpYnNlbWFuYWdl L3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2Zjb250ZXh0LmggYi9saWJzZW1hbmFnZS9zYW5pdHkt dGVzdHMvdGVzdHMvdGVzdF9mY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjgwYTU0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVz dHMvdGVzdHMvdGVzdF9mY29udGV4dC5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX19URVNU X0ZDT05URVhUX0hfXworI2RlZmluZSBfX1RFU1RfRkNPTlRFWFRfSF9fCisKKyNpbmNsdWRlIDxD VW5pdC9CYXNpYy5oPgorCitpbnQgZmNvbnRleHRfdGVzdF9pbml0KHZvaWQpOworaW50IGZjb250 ZXh0X3Rlc3RfY2xlYW51cCh2b2lkKTsKK2ludCBmY29udGV4dF9hZGRfdGVzdHMoQ1VfcFN1aXRl IHN1aXRlKTsKKworLy8gZmNvbnRleHRfcmVjb3JkLmgKKwordm9pZCB0ZXN0X2Zjb250ZXh0X2Nv bXBhcmUodm9pZCk7Cit2b2lkIHRlc3RfZmNvbnRleHRfY29tcGFyZTIodm9pZCk7Cit2b2lkIHRl c3RfZmNvbnRleHRfa2V5X2NyZWF0ZSh2b2lkKTsKK3ZvaWQgdGVzdF9mY29udGV4dF9rZXlfZXh0 cmFjdCh2b2lkKTsKK3ZvaWQgdGVzdF9mY29udGV4dF9nZXRfc2V0X2V4cHIodm9pZCk7Cit2b2lk IHRlc3RfZmNvbnRleHRfZ2V0X3NldF90eXBlKHZvaWQpOwordm9pZCB0ZXN0X2Zjb250ZXh0X2dl dF90eXBlX3N0cih2b2lkKTsKK3ZvaWQgdGVzdF9mY29udGV4dF9nZXRfc2V0X2Nvbih2b2lkKTsK K3ZvaWQgdGVzdF9mY29udGV4dF9jcmVhdGUodm9pZCk7Cit2b2lkIHRlc3RfZmNvbnRleHRfY2xv bmUodm9pZCk7CisKKy8vIGZjb250ZXh0X3BvbGljeS5oCisKK3ZvaWQgdGVzdF9mY29udGV4dF9x dWVyeSh2b2lkKTsKK3ZvaWQgdGVzdF9mY29udGV4dF9leGlzdHModm9pZCk7Cit2b2lkIHRlc3Rf ZmNvbnRleHRfY291bnQodm9pZCk7Cit2b2lkIHRlc3RfZmNvbnRleHRfaXRlcmF0ZSh2b2lkKTsK K3ZvaWQgdGVzdF9mY29udGV4dF9saXN0KHZvaWQpOworCisvLyBmY29udGV4dF9sb2NhbC5oCisK K3ZvaWQgdGVzdF9mY29udGV4dF9tb2RpZnlfZGVsX2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0X2Zj b250ZXh0X3F1ZXJ5X2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0X2Zjb250ZXh0X2V4aXN0c19sb2Nh bCh2b2lkKTsKK3ZvaWQgdGVzdF9mY29udGV4dF9jb3VudF9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVz dF9mY29udGV4dF9pdGVyYXRlX2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0X2Zjb250ZXh0X2xpc3Rf bG9jYWwodm9pZCk7CisKKyNlbmRpZgorCgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5hZ2Uvc2FuaXR5 LXRlc3RzL3Rlc3RzL3Rlc3RfaGFuZGxlLmMgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVz dHMvdGVzdF9oYW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTAw MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rl c3RfaGFuZGxlLmMKQEAgLTAsMCArMSw0MzIgQEAKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisj aW5jbHVkZSA8c2VtYW5hZ2Uvc2VtYW5hZ2UuaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9oYW5kbGUu aD4KKworI2luY2x1ZGUgPENVbml0L0Jhc2ljLmg+CisKKyNpbmNsdWRlICJ0ZXN0X2hhbmRsZS5o IgorI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorCitleHRlcm4gc2VtYW5hZ2VfaGFuZGxlX3QgKnNo OworCitpbnQgaGFuZGxlX3Rlc3RfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitpbnQg aGFuZGxlX3Rlc3RfY2xlYW51cCh2b2lkKQoreworCXJldHVybiAwOworfQorCitpbnQgaGFuZGxl X2FkZF90ZXN0cyhDVV9wU3VpdGUgc3VpdGUpCit7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0 ZXN0X2hhbmRsZV9jcmVhdGUiLCAgICB0ZXN0X2hhbmRsZV9jcmVhdGUpOworICAgIENVX2FkZF90 ZXN0KHN1aXRlLCAidGVzdF9jb25uZWN0IiwgICAgICAgICAgdGVzdF9jb25uZWN0KTsKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfZGlzY29ubmVjdCIsICAgICAgIHRlc3RfZGlzY29ubmVj dCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0X3RyYW5zYWN0aW9uIiwgICAgICB0ZXN0 X3RyYW5zYWN0aW9uKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfY29tbWl0IiwgICAg ICAgICAgIHRlc3RfY29tbWl0KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInRlc3RfaXNfY29u bmVjdGVkIiwgICAgIHRlc3RfaXNfY29ubmVjdGVkKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwg InRlc3RfYWNjZXNzX2NoZWNrIiwgICAgIHRlc3RfYWNjZXNzX2NoZWNrKTsKKyAgICBDVV9hZGRf dGVzdChzdWl0ZSwgInRlc3RfaXNfbWFuYWdlZCIsICAgICAgIHRlc3RfaXNfbWFuYWdlZCk7Cisg ICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0X21sc19lbmFibGVkIiwgICAgICB0ZXN0X21sc19l bmFibGVkKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm1zZ19zZXRfY2FsbGJhY2siLCAgICAg IHRlc3RfbXNnX3NldF9jYWxsYmFjayk7CisKKyNpZiBWRVJTX0NIRUNLKDIsIDUpCisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJ0ZXN0X3Jvb3QiLCAgICAgICAgIHRlc3Rfcm9vdCk7CisjZW5kaWYK KworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidGVzdF9zZWxlY3Rfc3RvcmUiLCB0ZXN0X3NlbGVj dF9zdG9yZSk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaGFuZGxl X2NyZWF0ZQorCit2b2lkIHRlc3RfaGFuZGxlX2NyZWF0ZSh2b2lkKSB7CisgICAgc2ggPSBzZW1h bmFnZV9oYW5kbGVfY3JlYXRlKCk7CisKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKHNoKTsK KworICAgIHNlbWFuYWdlX2hhbmRsZV9kZXN0cm95KHNoKTsKK30KKworLy8gRnVuY3Rpb24gc2Vt YW5hZ2VfY29ubmVjdAorLy8gVE9ETzogbWFrZSBzZW1hbmFnZV9kaXJlY3RfY29ubmVjdChzaCkg cmV0dXJuIGVycm9yCisvLyBUT0RPOiBtYWtlIHNlbWFuYWdlX2NoZWNrX2luaXQgcmV0dXJuIGVy cm9yCisvLyBUT0RPOiBtYWtlIHNlbWFuYWdlX2NyZWF0ZV9zdG9yZSByZXR1cm4gZXJyb3IKKy8v IFRPRE86IG1ha2Ugb3RoZXIgZnVuY3Rpb25zIHJldHVybiBlcnJvcgorLy8gVE9ETzogdHJ5IGFs bCB2YWx1ZXMgb2YgZGlzYWJsZSBkb250YXVkaXQgKGFkZCBmaWxlKQorCit2b2lkIHRlc3RfY29u bmVjdCh2b2lkKSB7CisgICAgLy8gdGVzdCB3aXRob3V0IGhhbmRsZQorICAgIHNldHVwX2hhbmRs ZShTSF9OVUxMKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfY29ubmVjdChzaCks IFNJR0FCUlQpOworCisgICAgLy8gdGVzdCBoYW5kbGUgY3JlYXRlZAorICAgIGhlbHBlcl9oYW5k bGVfY3JlYXRlKCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29ubmVjdChzaCkgPj0gMCk7 CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Rpc2Nvbm5lY3Qoc2gpID49IDApOworCisgICAgY2xl YW51cF9oYW5kbGUoU0hfSEFORExFKTsKKworICAgIC8vIHRlc3QgaW52YWxpZCBzdG9yZQorICAg IHNldHVwX2hhbmRsZV9pbnZhbGlkX3N0b3JlKFNIX0hBTkRMRSk7CisKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfY29ubmVjdChzaCkgPCAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX0hBTkRM RSk7CisKKyAgICAvLyB0ZXN0IG5vcm1hbCB1c2UKKyAgICBzZXR1cF9oYW5kbGUoU0hfSEFORExF KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb25uZWN0KHNoKSA+PSAwKTsKKworICAgIC8v IHRlc3QgY29ubmVjdGluZyB0d2ljZQorICAgIC8vIFRPRE86IGNvbm5lY3RpbmcgdHdpY2UgY3Jl YXRlcyBtZW1vcnkgbGVha3MKKyAgICAvL0NVX0FTU0VSVChzZW1hbmFnZV9jb25uZWN0KHNoKSA8 IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb25uZWN0KHNoKSA+PSAwKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV9kaXNjb25uZWN0KHNoKSA+PSAwKTsKKworICAgIGNsZWFudXBfaGFu ZGxlKFNIX0hBTkRMRSk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2Rpc2Nvbm5lY3QKKy8v IFRPRE86IGRpc2Nvbm5lY3Qgd2hlbiBkaXNjb25uZWN0IGZ1bmN0aW9uIG5vdCBzZXQKKy8vIFRP RE86IG1ha2Ugc2VtYW5hZ2VfcmVtb3ZlX2RpcmVjdG9yeSByZXR1cm4gZXJyb3IgKHR3aWNlKQor Cit2b2lkIHRlc3RfZGlzY29ubmVjdCh2b2lkKSB7CisgICAgc2V0dXBfaGFuZGxlKFNIX05VTEwp OworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9kaXNjb25uZWN0KHNoKSwgU0lHQUJS VCk7CisKKyAgICBoZWxwZXJfaGFuZGxlX2NyZWF0ZSgpOworCisgICAgQ1VfQVNTRVJUX1NJR05B TChzZW1hbmFnZV9kaXNjb25uZWN0KHNoKSwgU0lHQUJSVCk7CisKKyAgICBoZWxwZXJfY29ubmVj dCgpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2Rpc2Nvbm5lY3Qoc2gpID49IDApOworCisg ICAgY2xlYW51cF9oYW5kbGUoU0hfSEFORExFKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vf YmVnaW5fdHJhbnNhY3Rpb24KKy8vIFRPRE86IG1ha2Ugc2VtYW5hZ2VfZ2V0X3RyYW5zX2xvY2sg cmV0dXJuIGVycm9yCisvLyBUT0RPOiBtYWtlIHNlbWFuYWdlX21ha2Vfc2FuZGJvdyByZXR1cm4g ZXJyb3IKKy8vIFRPRE86IG1ha2Ugc2VtYW5hZ2VfbWFrZV9maW5hbCByZXR1cm4gZXJyb3IKKy8v IFRPRE86IHRoZXJlIGlzIGEgbWVtb3J5IGxlYWsgaW4gc2VtYW5hZ2VfYmVnaW5fdHJhbnNhY3Rp b24oKQorLyoKKz09MjQ4MTA9PSAxMDEgKDgwIGRpcmVjdCwgMjEgaW5kaXJlY3QpIGJ5dGVzIGlu IDEgYmxvY2tzIGFyZSBkZWZpbml0ZWx5IGxvc3QgaW4gbG9zcyByZWNvcmQgMjYgb2YgMzEKKz09 MjQ4MTA9PSAgICBhdCAweDRDMzBBMUU6IGNhbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzo3MTEp Cis9PTI0ODEwPT0gICAgYnkgMHg1MDYyQUY4OiBzZW1hbmFnZV9nZW5ob21lZGlyY29uIChnZW5o b21lZGlyY29uLmM6MTM1MSkKKz09MjQ4MTA9PSAgICBieSAweDUwNUZBRjQ6IHNlbWFuYWdlX2Rp cmVjdF9jb21taXQgKGRpcmVjdF9hcGkuYzoxNTY3KQorPT0yNDgxMD09ICAgIGJ5IDB4NTA2NEM2 Qzogc2VtYW5hZ2VfY29tbWl0IChoYW5kbGUuYzo0MjYpCis9PTI0ODEwPT0gICAgYnkgMHg0MTAz MkU6IHRlc3RfdHJhbnNhY3Rpb24gKHRlc3RfaGFuZGxlLmM6MTQ2KQorPT0yNDgxMD09ICAgIGJ5 IDB4NEUzRjEwNjogPz8/IChpbiAvdXNyL2xpYjY0L2xpYmN1bml0LnNvLjEuMC4xKQorPT0yNDgx MD09ICAgIGJ5IDB4NEUzRjMzQzogPz8/IChpbiAvdXNyL2xpYjY0L2xpYmN1bml0LnNvLjEuMC4x KQorPT0yNDgxMD09ICAgIGJ5IDB4NEUzRjg1NTogQ1VfcnVuX3N1aXRlIChpbiAvdXNyL2xpYjY0 L2xpYmN1bml0LnNvLjEuMC4xKQorPT0yNDgxMD09ICAgIGJ5IDB4NDIwODVBOiBtYWluIChsaWJz ZW1hbmFnZS10ZXN0cy5jOjkwKQorKi8KKwordm9pZCB0ZXN0X3RyYW5zYWN0aW9uKHZvaWQpIHsK KyAgICAvLyB0ZXN0IHdpdGhvdXQgaGFuZGxlCisgICAgc2V0dXBfaGFuZGxlKFNIX05VTEwpOwor CisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9iZWdpbl90cmFuc2FjdGlvbihzaCksIFNJ R0FCUlQpOworCisgICAgLy8gdGVzdCB3aXRoIGhhbmRsZQorICAgIGhlbHBlcl9oYW5kbGVfY3Jl YXRlKCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2JlZ2luX3RyYW5zYWN0aW9u KHNoKSwgU0lHQUJSVCk7CisKKyAgICAvLyB0ZXN0IGRpc2Nvbm5lY3RlZAorICAgIGhlbHBlcl9j b25uZWN0KCk7CisgICAgaGVscGVyX2Rpc2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1h bmFnZV9iZWdpbl90cmFuc2FjdGlvbihzaCkgPCAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNI X0hBTkRMRSk7CisKKyAgICAvLyB0ZXN0IG5vcm1hbCB1c2UKKyAgICBzZXR1cF9oYW5kbGUoU0hf Q09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfYmVnaW5fdHJhbnNhY3Rpb24oc2gp ID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb21taXQoc2gpID49IDApOworCisgICAg Ly8gdGVzdCBiZWdpbm5pbmcgdHJhbnNhY3Rpb24gdHdpY2UKKyAgICAvLyBGSVhNRQorICAgIC8v Q1VfQVNTRVJUKHNlbWFuYWdlX2JlZ2luX3RyYW5zYWN0aW9uKHNoKSA+PSAwKTsKKyAgICAvL0NV X0FTU0VSVChzZW1hbmFnZV9iZWdpbl90cmFuc2FjdGlvbihzaCkgPj0gMCk7CisgICAgLy9DVV9B U1NFUlQoc2VtYW5hZ2VfY29tbWl0KHNoKSA+PSAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNI X0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9jb21taXQKKy8vIFRPRE86IHRy eSBvdGhlciB2YWx1ZXMgb2YgZGlzYWJsZSBkb250YXVkaXQKKy8vIFRPRE86IHRyeSBvdGhlciB2 YWx1ZXMgb2YgcHJlc2VydmUgdHVuYWJsZXMKKy8vIFRPRE86IG1ha2UgdXNlcnMtPmR0YWJsZS0+ aXNfbW9kaWZpZWQgcmV0dXJuIHRydWUKKy8vIFRPRE86IHRyeSBtaXNzaW5nIHBhdGhzIChsaW5l cyAxMjM2LTEyNzIpCisvLyBUT0RPOiBlcnJvciBnb3RvcyAobGluZXMgMTI5OS0xNTE0KQorLy8g VE9ETzogbWFrZSBzaC0+Y29uZi0+ZGlzYWJsZV9nZW5ob21lZGlyY29uIHJldHVybiB0cnVlCisv LyBUT0RPOiBtYWtlIHNlbWFuYWdlX2dlbmhvbWVkaXJjb24gcmV0dXJuIGVycm9yCisKK3ZvaWQg dGVzdF9jb21taXQodm9pZCkgeworICAgIHNldHVwX2hhbmRsZShTSF9OVUxMKTsKKworICAgIENV X0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfY29tbWl0KHNoKSwgU0lHQUJSVCk7CisKKyAgICBoZWxw ZXJfaGFuZGxlX2NyZWF0ZSgpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9jb21t aXQoc2gpLCBTSUdBQlJUKTsKKworICAgIGhlbHBlcl9jb25uZWN0KCk7CisKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfY29tbWl0KHNoKSA8IDApOworCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0 aW9uKCk7CisKKyAgICAvLyBGSVhNRTogbWVtb3J5IGxlYWtzCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX2NvbW1pdChzaCkgPj0gMCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsK K30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaXNfY29ubmVjdGVkCisKK3ZvaWQgdGVzdF9pc19j b25uZWN0ZWQodm9pZCkgeworICAgIHNldHVwX2hhbmRsZShTSF9OVUxMKTsKKworICAgIENVX0FT U0VSVF9TSUdOQUwoc2VtYW5hZ2VfaXNfY29ubmVjdGVkKHNoKSwgU0lHQUJSVCk7CisKKyAgICBo ZWxwZXJfaGFuZGxlX2NyZWF0ZSgpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lzX2Nvbm5l Y3RlZChzaCkgPT0gMCk7CisKKyAgICBoZWxwZXJfY29ubmVjdCgpOworCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX2lzX2Nvbm5lY3RlZChzaCkgPT0gMSk7CisKKyAgICBoZWxwZXJfYmVnaW5fdHJh bnNhY3Rpb24oKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pc19jb25uZWN0ZWQoc2gpID09 IDEpOworCisgICAgLy8gRklYTUU6IG1lbW9yeSBsZWFrcyAoc2VtYW5hZ2VfY29tbWl0KQorICAg IGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfYWNj ZXNzX2NoZWNrCisKK3ZvaWQgdGVzdF9hY2Nlc3NfY2hlY2sodm9pZCkgeworICAgIGludCByZXN1 bHQgPSAwOworCisgICAgLy8gdGVzdCB3aXRob3V0IGhhbmRsZQorICAgIHNldHVwX2hhbmRsZShT SF9OVUxMKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfYWNjZXNzX2NoZWNrKHNo KSwgU0lHQUJSVCk7CisKKyAgICAvLyB0ZXN0IHdpdGggaGFuZGxlCisgICAgaGVscGVyX2hhbmRs ZV9jcmVhdGUoKTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX2FjY2Vzc19jaGVjayhzaCk7CisK KyAgICBDVV9BU1NFUlQocmVzdWx0ID09IDAgfHwgcmVzdWx0ID09IFNFTUFOQUdFX0NBTl9SRUFE CisgICAgICAgICAgICAgIHx8IHJlc3VsdCA9PSBTRU1BTkFHRV9DQU5fV1JJVEUpOworCisgICAg Y2xlYW51cF9oYW5kbGUoU0hfSEFORExFKTsKKyAgICAKKyAgICAvLyB0ZXN0IHdpdGggaW52YWxp ZCBzdG9yZQorICAgIHNldHVwX2hhbmRsZV9pbnZhbGlkX3N0b3JlKFNIX0hBTkRMRSk7CisKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfYWNjZXNzX2NoZWNrKHNoKSA8IDApOworCisgICAgY2xlYW51 cF9oYW5kbGUoU0hfSEFORExFKTsKKyAgICAKKyAgICAvLyB0ZXN0IG5vcm1hbCB1c2UKKyAgICBz ZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9hY2Nlc3Nf Y2hlY2soc2gpOworCisgICAgQ1VfQVNTRVJUKHJlc3VsdCA9PSAwIHx8IHJlc3VsdCA9PSBTRU1B TkFHRV9DQU5fUkVBRAorICAgICAgICAgICAgICB8fCByZXN1bHQgPT0gU0VNQU5BR0VfQ0FOX1dS SVRFKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlv biBzZW1hbmFnZV9pc19tYW5hZ2VkCisvLyBUT0RPOiBtYWtlIHNlbWFuYWdlX2NoZWNrX2luaXQg cmV0dXJuIGVycm9yCisvLyBUT0RPOiBtYWtlIHNlbWFuYWdlX2FjY2Vzc19jaGVjayByZXR1cm4g ZXJyb3IKKwordm9pZCB0ZXN0X2lzX21hbmFnZWQodm9pZCkgeworICAgIGludCByZXN1bHQgPSAw OworICAgIAorICAgIC8vIHRlc3Qgd2l0aG91dCBoYW5kbGUKKyAgICBzZXR1cF9oYW5kbGUoU0hf TlVMTCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX2lzX21hbmFnZWQoc2gpLCBT SUdBQlJUKTsKKworICAgIC8vIHRlc3Qgd2l0aCBoYW5kbGUKKyAgICBoZWxwZXJfaGFuZGxlX2Ny ZWF0ZSgpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfaXNfbWFuYWdlZChzaCk7CisKKyAgICBD VV9BU1NFUlQocmVzdWx0ID09IDAgfHwgcmVzdWx0ID09IDEpOworCisgICAgLy8gdGVzdCBjb25u ZWN0ZWQKKyAgICBoZWxwZXJfY29ubmVjdCgpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfaXNf bWFuYWdlZChzaCk7CisKKyAgICBDVV9BU1NFUlQocmVzdWx0IDwgMCk7CisKKyAgICBjbGVhbnVw X2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfbWxzX2VuYWJs ZWQKKwordm9pZCB0ZXN0X21sc19lbmFibGVkKHZvaWQpIHsKKyAgICBpbnQgcmVzdWx0ID0gMDsK KworICAgIC8vIHRlc3Qgd2l0aG91dCBoYW5kbGUKKyAgICBzZXR1cF9oYW5kbGUoU0hfTlVMTCk7 CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX21sc19lbmFibGVkKHNoKSwgU0lHQUJS VCk7CisKKyAgICAvLyB0ZXN0IHdpdGggaGFuZGxlCisgICAgaGVscGVyX2hhbmRsZV9jcmVhdGUo KTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX21sc19lbmFibGVkKHNoKTsKKworICAgIENVX0FT U0VSVChyZXN1bHQgPT0gMCB8fCByZXN1bHQgPT0gMSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShT SF9IQU5ETEUpOworICAgIAorICAgIC8vIHRlc3Qgd2l0aCBpbnZhbGlkIHN0b3JlCisgICAgc2V0 dXBfaGFuZGxlX2ludmFsaWRfc3RvcmUoU0hfSEFORExFKTsKKworICAgIENVX0FTU0VSVChzZW1h bmFnZV9tbHNfZW5hYmxlZChzaCkgPCAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX0hBTkRM RSk7CisKKyAgICAvLyB0ZXN0IGNvbm5lY3RlZAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNU KTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX21sc19lbmFibGVkKHNoKTsKKworICAgIENVX0FT U0VSVChyZXN1bHQgPT0gMCB8fCByZXN1bHQgPT0gMSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShT SF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vfc2V0X2NhbGxiYWNrCisKK2lu dCBtc2dfc2V0X2NhbGxiYWNrX2NvdW50ID0gMDsKKwordm9pZCBoZWxwZXJfbXNnX3NldF9jYWxs YmFjayh2b2lkICp2YXJnLCBzZW1hbmFnZV9oYW5kbGVfdCAqc2gsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CisgICAgbXNnX3NldF9jYWxsYmFj a19jb3VudCsrOworfQorCit2b2lkIHRlc3RfbXNnX3NldF9jYWxsYmFjayh2b2lkKSB7CisgICAg c2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgc2VtYW5hZ2VfbXNnX3NldF9jYWxsYmFj ayhzaCwgaGVscGVyX21zZ19zZXRfY2FsbGJhY2ssIE5VTEwpOworCisgICAgLy8gcHJvZHVjZSBl cnJvciBtZXNzYWdlCisgICAgc2VtYW5hZ2VfY29tbWl0KHNoKTsKKworICAgIENVX0FTU0VSVCht c2dfc2V0X2NhbGxiYWNrX2NvdW50ID09IDEpOworCisgICAgc2VtYW5hZ2VfbXNnX3NldF9jYWxs YmFjayhzaCwgTlVMTCwgTlVMTCk7CisKKyAgICAvLyBwcm9kdWNlIGVycm9yIG1lc3NhZ2UKKyAg ICBzZW1hbmFnZV9jb21taXQoc2gpOworCisgICAgQ1VfQVNTRVJUKG1zZ19zZXRfY2FsbGJhY2tf Y291bnQgPT0gMSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8g RnVuY3Rpb24gc2VtYW5hZ2Vfcm9vdCwgc2VtYW5hZ2Vfc2V0X3Jvb3QKKworI2lmIFZFUlNfQ0hF Q0soMiwgNSkKKwordm9pZCBoZWxwZXJfcm9vdCh2b2lkKSB7CisgICAgY29uc3QgY2hhciAqcm9v dCA9IHNlbWFuYWdlX3Jvb3QoKTsKKworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwocm9vdCwg IiIpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldF9yb290KCJhc2RmIikgPj0gMCk7CisK KyAgICByb290ID0gc2VtYW5hZ2Vfcm9vdCgpOworCisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVB TChyb290LCAiYXNkZiIpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldF9yb290KCIiKSA+ PSAwKTsKKworICAgIHJvb3QgPSBzZW1hbmFnZV9yb290KCk7CisKKyAgICBDVV9BU1NFUlRfU1RS SU5HX0VRVUFMKHJvb3QsICIiKTsKK30KKwordm9pZCB0ZXN0X3Jvb3Qodm9pZCkgeworICAgIC8v IHRlc3Qgd2l0aG91dCBoYW5kbGUKKyAgICBzZXR1cF9oYW5kbGUoU0hfTlVMTCk7CisKKyAgICBo ZWxwZXJfcm9vdCgpOworCisgICAgLy8gdGVzdCB3aXRoIGhhbmRsZQorICAgIGhlbHBlcl9oYW5k bGVfY3JlYXRlKCk7CisKKyAgICBoZWxwZXJfcm9vdCgpOworCisgICAgLy8gdGVzdCBjb25uZWN0 ZWQKKyAgICBoZWxwZXJfY29ubmVjdCgpOworCisgICAgaGVscGVyX3Jvb3QoKTsKKworICAgIGNs ZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisjZW5kaWYKKworLy8gRnVuY3Rpb24gc2Vt YW5hZ2Vfc2VsZWN0X3N0b3JlCisKK3ZvaWQgaGVscGVyX3NlbGVjdF9zdG9yZShjaGFyICpuYW1l LCBlbnVtIHNlbWFuYWdlX2Nvbm5lY3RfdHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBleHBfcmVzdWx0KSB7CisgICAgc2V0dXBfaGFuZGxlKFNIX0hBTkRMRSk7CisKKyAg ICBzZW1hbmFnZV9zZWxlY3Rfc3RvcmUoc2gsIG5hbWUsIHR5cGUpOworCisgICAgaW50IHJlc3Vs dCA9IHNlbWFuYWdlX2Nvbm5lY3Qoc2gpOworCisgICAgaWYgKGV4cF9yZXN1bHQgPCAwKSB7Cisg ICAgICAgIENVX0FTU0VSVChyZXN1bHQgPCAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg IENVX0FTU0VSVChyZXN1bHQgPj0gMCk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCA+PSAwKQor ICAgICAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKKyAgICBlbHNlCisgICAgICAgIGNs ZWFudXBfaGFuZGxlKFNIX0hBTkRMRSk7Cit9CisKK3ZvaWQgdGVzdF9zZWxlY3Rfc3RvcmUodm9p ZCkgeworICAgIGhlbHBlcl9zZWxlY3Rfc3RvcmUoImFzZGYiLCBTRU1BTkFHRV9DT05fSU5WQUxJ RCAtIDEsIC0xKTsKKyAgICBoZWxwZXJfc2VsZWN0X3N0b3JlKCJhc2RmIiwgU0VNQU5BR0VfQ09O X1BPTFNFUlZfUkVNT1RFICsgMSwgLTEpOworICAgIGhlbHBlcl9zZWxlY3Rfc3RvcmUoIiIsIFNF TUFOQUdFX0NPTl9ESVJFQ1QsIDApOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NlbGVj dF9zdG9yZShOVUxMLCBTRU1BTkFHRV9DT05fRElSRUNULCAtMSksCisgICAgICAgICAgICAgICAg ICAgICBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9zZWxlY3Rfc3RvcmUoImFzZGYiLCBTRU1BTkFH RV9DT05fSU5WQUxJRCwgLTEpOworICAgIGhlbHBlcl9zZWxlY3Rfc3RvcmUoImFzZGYiLCBTRU1B TkFHRV9DT05fRElSRUNULCAwKTsKKyAgICBoZWxwZXJfc2VsZWN0X3N0b3JlKCJhc2RmIiwgU0VN QU5BR0VfQ09OX1BPTFNFUlZfTE9DQUwsIC0xKTsKKyAgICBoZWxwZXJfc2VsZWN0X3N0b3JlKCJh c2RmIiwgU0VNQU5BR0VfQ09OX1BPTFNFUlZfUkVNT1RFLCAtMSk7Cit9CgpkaWZmIC0tZ2l0IGEv bGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaGFuZGxlLmggYi9saWJzZW1hbmFn ZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9oYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5mNmFmNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2Fu aXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaGFuZGxlLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBf X1RFU1RfSEFORExFX0hfXworI2RlZmluZSBfX1RFU1RfSEFORExFX0hfXworCisjaW5jbHVkZSA8 Q1VuaXQvQmFzaWMuaD4KKworI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorCitpbnQgaGFuZGxlX3Rl c3RfaW5pdCh2b2lkKTsKK2ludCBoYW5kbGVfdGVzdF9jbGVhbnVwKHZvaWQpOworaW50IGhhbmRs ZV9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1aXRlKTsKKwordm9pZCB0ZXN0X2hhbmRsZV9jcmVhdGUo dm9pZCk7Cit2b2lkIHRlc3RfY29ubmVjdCh2b2lkKTsKK3ZvaWQgdGVzdF9kaXNjb25uZWN0KHZv aWQpOwordm9pZCB0ZXN0X3RyYW5zYWN0aW9uKHZvaWQpOwordm9pZCB0ZXN0X2NvbW1pdCh2b2lk KTsKK3ZvaWQgdGVzdF9pc19jb25uZWN0ZWQodm9pZCk7Cit2b2lkIHRlc3RfYWNjZXNzX2NoZWNr KHZvaWQpOwordm9pZCB0ZXN0X2lzX21hbmFnZWQodm9pZCk7Cit2b2lkIHRlc3RfbWxzX2VuYWJs ZWQodm9pZCk7Cit2b2lkIHRlc3RfbXNnX3NldF9jYWxsYmFjayh2b2lkKTsKKworI2lmIFZFUlNf Q0hFQ0soMiwgNSkKK3ZvaWQgdGVzdF9yb290KHZvaWQpOworI2VuZGlmCisKK3ZvaWQgdGVzdF9z ZWxlY3Rfc3RvcmUodm9pZCk7CisKKyNlbmRpZgorCgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5hZ2Uv c2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaWJlbmRwb3J0LmMgYi9saWJzZW1hbmFnZS9zYW5pdHkt dGVzdHMvdGVzdHMvdGVzdF9pYmVuZHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xYzNiMzZlCi0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRl c3RzL3Rlc3RzL3Rlc3RfaWJlbmRwb3J0LmMKQEAgLTAsMCArMSw1NDIgQEAKKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNlbWFuYWdlL3NlbWFuYWdl Lmg+CisjaW5jbHVkZSA8c2VtYW5hZ2UvaGFuZGxlLmg+CisjaW5jbHVkZSA8Q1VuaXQvQmFzaWMu aD4KKworI2luY2x1ZGUgInRlc3RfaWJlbmRwb3J0LmgiCisjaW5jbHVkZSAidGVzdF9pYmVuZHBv cnRfbW9kdWxlLmgiCisjaW5jbHVkZSAiZnVuY3Rpb25zLmgiCisKK2V4dGVybiBzZW1hbmFnZV9o YW5kbGVfdCAqc2g7CisKK2ludCBpYmVuZHBvcnRfdGVzdF9pbml0KHZvaWQpIHsKKyNpZmRlZiBG RUFUVVJFX0lORklOSUJBTkQKKworICAgIHNlbWFuYWdlX2hhbmRsZV90ICpzaDsKKworICAgIHNo ID0gc2VtYW5hZ2VfaGFuZGxlX2NyZWF0ZSgpOworCisgICAgaWYgKHNlbWFuYWdlX2Nvbm5lY3Qo c2gpIDwgMCkgeworICAgICAgICBzZW1hbmFnZV9oYW5kbGVfZGVzdHJveShzaCk7CisgICAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc2VtYW5hZ2VfYmVnaW5fdHJhbnNhY3Rpb24o c2gpIDwgMCkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBpZiAoc2VtYW5hZ2VfbW9kdWxlX2lu c3RhbGwoc2gsIChjaGFyICopIHRlc3RfaWJlbmRwb3J0X21vZHVsZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGVzdF9pYmVuZHBvcnRfbW9kdWxlX2xlbiwgInRlc3RfaWJlbmRw b3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNpbCIpIDwgMCkgeworICAg ICAgICBzZW1hbmFnZV9kaXNjb25uZWN0KHNoKTsKKyAgICAgICAgc2VtYW5hZ2VfaGFuZGxlX2Rl c3Ryb3koc2gpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNlbWFuYWdl X2NvbW1pdChzaCkgPCAwKSB7CisgICAgICAgIHNlbWFuYWdlX2Rpc2Nvbm5lY3Qoc2gpOworICAg ICAgICBzZW1hbmFnZV9oYW5kbGVfZGVzdHJveShzaCk7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgICByZXR1cm4gMDsKKworZXJyOgorICAgIHNlbWFuYWdlX2Rpc2Nvbm5lY3Qoc2gp OworICAgIHNlbWFuYWdlX2hhbmRsZV9kZXN0cm95KHNoKTsKKyAgICByZXR1cm4gLTE7CisKKyNl bHNlCisKKyAgICByZXR1cm4gMDsKKworI2VuZGlmCit9CisKK2ludCBpYmVuZHBvcnRfdGVzdF9j bGVhbnVwKHZvaWQpIHsKKyNpZmRlZiBGRUFUVVJFX0lORklOSUJBTkQKKworICAgIHNlbWFuYWdl X2hhbmRsZV90ICpzaDsKKworICAgIHNoID0gc2VtYW5hZ2VfaGFuZGxlX2NyZWF0ZSgpOworCisg ICAgaWYgKHNlbWFuYWdlX2Nvbm5lY3Qoc2gpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisg ICAgaWYgKHNlbWFuYWdlX2JlZ2luX3RyYW5zYWN0aW9uKHNoKSA8IDApIHsKKyAgICAgICAgc2Vt YW5hZ2VfZGlzY29ubmVjdChzaCk7CisgICAgICAgIHNlbWFuYWdlX2hhbmRsZV9kZXN0cm95KHNo KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzZW1hbmFnZV9tb2R1bGVf cmVtb3ZlKHNoLCAidGVzdF9pYmVuZHBvcnQiKSA8IDApIHsKKyAgICAgICAgc2VtYW5hZ2VfZGlz Y29ubmVjdChzaCk7CisgICAgICAgIHNlbWFuYWdlX2hhbmRsZV9kZXN0cm95KHNoKTsKKyAgICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzZW1hbmFnZV9jb21taXQoc2gpIDwgMCkg eworICAgICAgICBzZW1hbmFnZV9kaXNjb25uZWN0KHNoKTsKKyAgICAgICAgc2VtYW5hZ2VfaGFu ZGxlX2Rlc3Ryb3koc2gpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc2VtYW5h Z2VfZGlzY29ubmVjdChzaCk7CisgICAgc2VtYW5hZ2VfaGFuZGxlX2Rlc3Ryb3koc2gpOworCisj ZW5kaWYKKworICAgIHJldHVybiAwOworfQorCitpbnQgaWJlbmRwb3J0X2FkZF90ZXN0cyhDVV9w U3VpdGUgc3VpdGUpIHsKKyNpZmRlZiBGRUFUVVJFX0lORklOSUJBTkQKKyAgICBDVV9hZGRfdGVz dChzdWl0ZSwgImliZW5kcG9ydF9xdWVyeSIsIHRlc3RfaWJlbmRwb3J0X3F1ZXJ5KTsKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgImliZW5kcG9ydF9leGlzdHMiLCB0ZXN0X2liZW5kcG9ydF9leGlz dHMpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWJlbmRwb3J0X2NvdW50IiwgdGVzdF9pYmVu ZHBvcnRfY291bnQpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWJlbmRwb3J0X2l0ZXJhdGUi LCB0ZXN0X2liZW5kcG9ydF9pdGVyYXRlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImliZW5k cG9ydF9saXN0IiwgdGVzdF9pYmVuZHBvcnRfbGlzdCk7CisKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgImliZW5kcG9ydF9tb2RpZnlfZGVsX3F1ZXJ5X2xvY2FsIiwKKyAgICAgICAgICAgICAgICB0 ZXN0X2liZW5kcG9ydF9tb2RpZnlfZGVsX3F1ZXJ5X2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChz dWl0ZSwgImliZW5kcG9ydF9leGlzdHNfbG9jYWwiLCB0ZXN0X2liZW5kcG9ydF9leGlzdHNfbG9j YWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWJlbmRwb3J0X2NvdW50X2xvY2FsIiwgdGVz dF9pYmVuZHBvcnRfY291bnRfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWJlbmRw b3J0X2l0ZXJhdGVfbG9jYWwiLCB0ZXN0X2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsKTsKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgImliZW5kcG9ydF9saXN0X2xvY2FsIiwgdGVzdF9pYmVuZHBvcnRf bGlzdF9sb2NhbCk7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQorCisjaWZkZWYgRkVBVFVS RV9JTkZJTklCQU5ECisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2liZW5kcG9ydF9xdWVyeQorCit2 b2lkIHRlc3RfaWJlbmRwb3J0X3F1ZXJ5KHZvaWQpIHsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRf a2V5X3QgKmtleTEgPSBOVUxMOworICAgIHNlbWFuYWdlX2liZW5kcG9ydF9rZXlfdCAqa2V5MiA9 IE5VTEw7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X3QgKnJlc3BvbnNlMSA9IE5VTEw7CisgICAg c2VtYW5hZ2VfaWJlbmRwb3J0X3QgKnJlc3BvbnNlMiA9IE5VTEw7CisgICAgY2hhciAqbmFtZSA9 IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24gPSBOVUxMOworCisgICAgLy8gc2V0 dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2VfaWJlbmRwb3J0X2tleV9jcmVhdGUoc2gsIElCRU5EUE9SVF9JTlZfTkFNRSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJFTkRQT1JUX0lOVl9QT1JULCAm a2V5MSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9jcmVh dGUoc2gsIElCRU5EUE9SVF8xX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElCRU5EUE9SVF8xX1BPUlQsICZrZXkyKSA+PSAwKTsKKworICAgIC8vIHRl c3Qgbm9uZXhpc3RpbmcgaWJlbmRwb3J0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9y dF9xdWVyeShzaCwga2V5MSwgJnJlc3BvbnNlMSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3Bv bnNlMSA9PSBOVUxMKTsKKworICAgIC8vIHRlc3QgZXhpc3RpbmcgaWJlbmRwb3J0CisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9xdWVyeShzaCwga2V5MiwgJnJlc3BvbnNlMikgPj0g MCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChyZXNwb25zZTIpOworCisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9nZXRfaWJkZXZfbmFtZShzaCwgcmVzcG9uc2Uy LCAmbmFtZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChuYW1lKTsK KyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKG5hbWUsIElCRU5EUE9SVF8xX05BTUUpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9nZXRfcG9ydChyZXNwb25zZTIpID09IElC RU5EUE9SVF8xX1BPUlQpOworCisgICAgY29uID0gc2VtYW5hZ2VfaWJlbmRwb3J0X2dldF9jb24o cmVzcG9uc2UyKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKGNvbik7CisgICAg Q1VfQVNTRVJUKGNvbnRleHRfY29tcGFyZShjb24sIElCRU5EUE9SVF8xX0NPTikgPT0gMCk7CisK KyAgICAvLyBjbGVhbnVwCisgICAgZnJlZShuYW1lKTsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRf a2V5X2ZyZWUoa2V5MSk7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9mcmVlKGtleTIpOwor ICAgIHNlbWFuYWdlX2liZW5kcG9ydF9mcmVlKHJlc3BvbnNlMSk7CisgICAgc2VtYW5hZ2VfaWJl bmRwb3J0X2ZyZWUocmVzcG9uc2UyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsK K30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWJlbmRwb3J0X2V4aXN0cworCit2b2lkIHRlc3Rf aWJlbmRwb3J0X2V4aXN0cyh2b2lkKSB7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV90ICpr ZXkxID0gTlVMTDsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRfa2V5X3QgKmtleTIgPSBOVUxMOwor ICAgIGludCByZXNwb25zZSA9IDQyOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUo U0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9jcmVh dGUoc2gsIElCRU5EUE9SVF9JTlZfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSUJFTkRQT1JUX0lOVl9QT1JULCAma2V5MSkgPj0gMCk7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9jcmVhdGUoc2gsIElCRU5EUE9SVF8xX05B TUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElCRU5EUE9S VF8xX1BPUlQsICZrZXkyKSA+PSAwKTsKKworICAgIC8vIHRlc3Qgbm9uZXhpc3RpbmcgaWJlbmRw b3J0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9leGlzdHMoc2gsIGtleTEsICZy ZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKCFyZXNwb25zZSk7CisKKyAgICAvLyB0ZXN0 IGV4aXN0aW5nIGliZW5kcG9ydAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRfZXhp c3RzKHNoLCBrZXkyLCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSk7 CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9mcmVlKGtleTEp OworICAgIHNlbWFuYWdlX2liZW5kcG9ydF9rZXlfZnJlZShrZXkyKTsKKyAgICBjbGVhbnVwX2hh bmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWJlbmRwb3J0X2Nv dW50CisKK3ZvaWQgdGVzdF9pYmVuZHBvcnRfY291bnQodm9pZCkgeworICAgIHVuc2lnbmVkIGlu dCBjb3VudCA9IDQyOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVD VCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9jb3Vu dChzaCwgJmNvdW50KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChjb3VudCA9PSBJQkVORFBPUlRf Q09VTlQpOworCisgICAgLy8gY2xlYW51cAorICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1Qp OworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9pYmVuZHBvcnRfaXRlcmF0ZQorCit1bnNpZ25l ZCBpbnQgaGVscGVyX2liZW5kcG9ydF9pdGVyYXRlX2NvdW50ZXIgPSAwOworCitpbnQgaGVscGVy X2liZW5kcG9ydF9pdGVyYXRlKGNvbnN0IHNlbWFuYWdlX2liZW5kcG9ydF90ICppYmVuZHBvcnQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmZuX2FyZykgeworICAgIENVX0FT U0VSVChmbl9hcmcgPT0gKHZvaWQgKikgNDIpOworCisgICAgaGVscGVyX2liZW5kcG9ydF9pdGVy YXRlX2NvdW50ZXIrKzsKKworICAgIHJldHVybiAwOworfQorCitpbnQgaGVscGVyX2liZW5kcG9y dF9pdGVyYXRlX2Vycm9yKGNvbnN0IHNlbWFuYWdlX2liZW5kcG9ydF90ICppYmVuZHBvcnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmZuX2FyZykgeworICAgIENV X0FTU0VSVChmbl9hcmcgPT0gKHZvaWQgKikgNDIpOworCisgICAgaGVscGVyX2liZW5kcG9ydF9p dGVyYXRlX2NvdW50ZXIrKzsKKworICAgIHJldHVybiAtMTsKK30KKworaW50IGhlbHBlcl9pYmVu ZHBvcnRfaXRlcmF0ZV9icmVhayhjb25zdCBzZW1hbmFnZV9pYmVuZHBvcnRfdCAqaWJlbmRwb3J0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmbl9hcmcpIHsKKyAg ICBDVV9BU1NFUlQoZm5fYXJnID09ICh2b2lkICopIDQyKTsKKworICAgIGhlbHBlcl9pYmVuZHBv cnRfaXRlcmF0ZV9jb3VudGVyKys7CisKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCB0ZXN0X2li ZW5kcG9ydF9pdGVyYXRlKHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShT SF9DT05ORUNUKTsKKworICAgIC8vIHRlc3QKKyAgICBoZWxwZXJfaWJlbmRwb3J0X2l0ZXJhdGVf Y291bnRlciA9IDA7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2l0ZXJhdGUo c2gsIGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQgKikgNDIpID49IDApOworICAgIENVX0FTU0VSVChoZWxwZXJf aWJlbmRwb3J0X2l0ZXJhdGVfY291bnRlciA9PSBJQkVORFBPUlRfQ09VTlQpOworCisgICAgLy8g dGVzdCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGVycm9yCisgICAgaGVscGVyX2liZW5kcG9ydF9p dGVyYXRlX2NvdW50ZXIgPSAwOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9p dGVyYXRlKHNoLCBoZWxwZXJfaWJlbmRwb3J0X2l0ZXJhdGVfZXJyb3IsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDQyKSA8IDApOworICAgIENVX0FT U0VSVChoZWxwZXJfaWJlbmRwb3J0X2l0ZXJhdGVfY291bnRlciA9PSAxKTsKKworICAgIC8vIHRl c3QgZnVuY3Rpb24gd2hpY2ggcmVxdWVzdHMgYnJlYWsKKyAgICBoZWxwZXJfaWJlbmRwb3J0X2l0 ZXJhdGVfY291bnRlciA9IDA7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2l0 ZXJhdGUoc2gsIGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9icmVhaywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgNDIpID49IDApOworICAgIENVX0FT U0VSVChoZWxwZXJfaWJlbmRwb3J0X2l0ZXJhdGVfY291bnRlciA9PSAxKTsKKworICAgIC8vIGNs ZWFudXAKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24g c2VtYW5hZ2VfaWJlbmRwb3J0X2xpc3QKKwordm9pZCB0ZXN0X2liZW5kcG9ydF9saXN0KHZvaWQp IHsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRfdCAqKnJlY29yZHMgPSBOVUxMOworICAgIHVuc2ln bmVkIGludCBjb3VudCA9IDQyOworICAgIGNoYXIgKm5hbWUgPSBOVUxMOworICAgIHNlbWFuYWdl X2NvbnRleHRfdCAqY29uID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxl KFNIX0NPTk5FQ1QpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVu ZHBvcnRfbGlzdChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRf UFRSX05PVF9OVUxMX0ZBVEFMKHJlY29yZHMpOworICAgIENVX0FTU0VSVChjb3VudCA9PSBJQkVO RFBPUlRfQ09VTlQpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsg aSsrKSB7CisgICAgICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTExfRkFUQUwocmVjb3Jkc1tpXSk7 CisKKyAgICAgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9nZXRfaWJkZXZfbmFtZShz aCwgcmVjb3Jkc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbmFtZSkgPj0gMCk7CisKKyAgICAgICAgY29uID0gc2VtYW5hZ2VfaWJlbmRw b3J0X2dldF9jb24ocmVjb3Jkc1tpXSk7CisgICAgICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTExf RkFUQUwoY29uKTsKKworICAgICAgICBmcmVlKG5hbWUpOworICAgIH0KKworICAgIC8vIGNsZWFu dXAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAg ICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2ZyZWUocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgZnJl ZShyZWNvcmRzKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVu Y3Rpb24gc2VtYW5hZ2VfaWJlbmRwb3J0X21vZGlmeV9sb2NhbCwgc2VtYW5hZ2VfaWJlbmRwb3J0 X2RlbF9sb2NhbCwKKy8vIHNlbWFuYWdlX2liZW5kcG9ydF9xdWVyeV9sb2NhbAorCit2b2lkIHRl c3RfaWJlbmRwb3J0X21vZGlmeV9kZWxfcXVlcnlfbG9jYWwodm9pZCkgeworICAgIHNlbWFuYWdl X2liZW5kcG9ydF90ICppYmVuZHBvcnQ7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X3QgKmliZW5k cG9ydF9sb2NhbDsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRfdCAqaWJlbmRwb3J0X3RtcDsKKyAg ICBzZW1hbmFnZV9pYmVuZHBvcnRfa2V5X3QgKmtleSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfaWJl bmRwb3J0X2tleV90ICprZXlfdG1wID0gTlVMTDsKKyAgICBzZW1hbmFnZV9jb250ZXh0X3QgKmNv biA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb25fdG1wID0gTlVMTDsKKworICAg IC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENVX0FTU0VSVChz ZW1hbmFnZV9pYmVuZHBvcnRfa2V5X2NyZWF0ZShzaCwgImFzZGYiLCAxLCAma2V5KSA+PSAwKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRfY3JlYXRlKHNoLCAmaWJlbmRwb3J0 KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X3NldF9pYmRldl9uYW1l KHNoLCBpYmVuZHBvcnQsICJhc2RmIikgPj0gMCk7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X3Nl dF9wb3J0KGliZW5kcG9ydCwgMSk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfZnJv bV9zdHJpbmcoc2gsICJzeXN0ZW1fdTpvYmplY3RfcjpiaW5fdDpzMCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbikgPj0gMCk7CisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX2liZW5kcG9ydF9zZXRfY29uKHNoLCBpYmVuZHBvcnQsIGNvbikgPj0gMCk7CisK KyAgICAvLyBhZGQgc2Vjb25kIHJlY29yZCwgc28gdGhhdCBzZW1hbmFnZV9pYmVuZHBvcnRfY29t cGFyZTJfcXNvcnQgd2lsbCBiZQorICAgIC8vIGNhbGxlZAorICAgIENVX0FTU0VSVChzZW1hbmFn ZV9pYmVuZHBvcnRfa2V5X2NyZWF0ZShzaCwgInF3ZXJ0eSIsIDIsICZrZXlfdG1wKSA+PSAwKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRfY3JlYXRlKHNoLCAmaWJlbmRwb3J0 X3RtcCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9zZXRfaWJkZXZf bmFtZShzaCwgaWJlbmRwb3J0X3RtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJxd2VydHkiKSA+PSAwKTsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRf c2V0X3BvcnQoaWJlbmRwb3J0X3RtcCwgMik7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRl eHRfZnJvbV9zdHJpbmcoc2gsICJzeXN0ZW1fdTpvYmplY3RfcjpiaW5fdDpzMCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbl90bXApID49IDApOworICAg IENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRfc2V0X2NvbihzaCwgaWJlbmRwb3J0X3RtcCwg Y29uX3RtcCkgPj0gMCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2li ZW5kcG9ydF9tb2RpZnlfbG9jYWwoc2gsIGtleSwgaWJlbmRwb3J0KSA+PSAwKTsKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X21vZGlmeV9sb2NhbChzaCwga2V5X3RtcCwgaWJlbmRw b3J0X3RtcCkgPj0gMCk7CisKKyAgICAvLyB3cml0ZSBjaGFuZ2VzIHRvIGZpbGUKKyAgICBoZWxw ZXJfY29tbWl0KCk7CisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZpYmVuZHBvcnRf bG9jYWwpID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTExfRkFUQUwoaWJlbmRwb3J0 X2xvY2FsKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRfZGVsX2xvY2FsKHNo LCBrZXkpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRfZGVsX2xvY2Fs KHNoLCBrZXlfdG1wKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pYmVuZHBvcnRf cXVlcnlfbG9jYWwoc2gsIGtleSwgJmliZW5kcG9ydF9sb2NhbCkgPCAwKTsKKworICAgIC8vIGNs ZWFudXAKKyAgICBzZW1hbmFnZV9jb250ZXh0X2ZyZWUoY29uKTsKKyAgICBzZW1hbmFnZV9jb250 ZXh0X2ZyZWUoY29uX3RtcCk7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9mcmVlKGtleSk7 CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9mcmVlKGtleV90bXApOworICAgIHNlbWFuYWdl X2liZW5kcG9ydF9mcmVlKGliZW5kcG9ydCk7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2ZyZWUo aWJlbmRwb3J0X2xvY2FsKTsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRfZnJlZShpYmVuZHBvcnRf dG1wKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNl bWFuYWdlX2liZW5kcG9ydF9leGlzdHNfbG9jYWwKKwordm9pZCB0ZXN0X2liZW5kcG9ydF9leGlz dHNfbG9jYWwodm9pZCkgeworICAgIHNlbWFuYWdlX2liZW5kcG9ydF9rZXlfdCAqa2V5MSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfaWJlbmRwb3J0X2tleV90ICprZXkyID0gTlVMTDsKKyAgICBpbnQg cmVzcG9uc2UgPSA0MjsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5T KTsKKworICAgIGFkZF9sb2NhbF9pYmVuZHBvcnQoSV9GSVJTVCk7CisKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfaWJlbmRwb3J0X2tleV9jcmVhdGUoc2gsIElCRU5EUE9SVF9JTlZfTkFNRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJFTkRQT1JUX0lOVl9Q T1JULCAma2V5MSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2tl eV9jcmVhdGUoc2gsICJpYmVuZHBvcnQwIiwgMCwgJmtleTIpID49IDApOworCisgICAgLy8gdGVz dCBub25leGlzdGluZyBpYmVuZHBvcnQKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0 X2V4aXN0c19sb2NhbChzaCwga2V5MSwgJnJlc3BvbnNlKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQo IXJlc3BvbnNlKTsKKworICAgIC8vIHRlc3QgZXhpc3RpbmcgaWJlbmRwb3J0CisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX2liZW5kcG9ydF9leGlzdHNfbG9jYWwoc2gsIGtleTIsICZyZXNwb25zZSkg Pj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlKTsKKworICAgIC8vIGNsZWFudXAKKyAgICAK KyAgICBkZWxldGVfbG9jYWxfaWJlbmRwb3J0KElfRklSU1QpOworCisgICAgc2VtYW5hZ2VfaWJl bmRwb3J0X2tleV9mcmVlKGtleTEpOworICAgIHNlbWFuYWdlX2liZW5kcG9ydF9rZXlfZnJlZShr ZXkyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNl bWFuYWdlX2liZW5kcG9ydF9jb3VudF9sb2NhbAorCit2b2lkIHRlc3RfaWJlbmRwb3J0X2NvdW50 X2xvY2FsKHZvaWQpIHsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSA0MjsKKworICAgIC8vIHNl dHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGFkZF9sb2NhbF9pYmVuZHBv cnQoSV9GSVJTVCk7CisgICAgYWRkX2xvY2FsX2liZW5kcG9ydChJX1NFQ09ORCk7CisgICAgYWRk X2xvY2FsX2liZW5kcG9ydChJX1RISVJEKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfaWJlbmRwb3J0X2NvdW50X2xvY2FsKHNoLCAmY291bnQpID49IDApOworCisgICAg Q1VfQVNTRVJUKGNvdW50ID09IDMpOworCisgICAgLy8gY2xlYW51cAorICAgIGRlbGV0ZV9sb2Nh bF9pYmVuZHBvcnQoSV9GSVJTVCk7CisgICAgZGVsZXRlX2xvY2FsX2liZW5kcG9ydChJX1NFQ09O RCk7CisgICAgZGVsZXRlX2xvY2FsX2liZW5kcG9ydChJX1RISVJEKTsKKworICAgIGNsZWFudXBf aGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWJlbmRwb3J0X2l0 ZXJhdGVfbG9jYWwKKwordW5zaWduZWQgaW50IGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9sb2Nh bF9jb3VudGVyID0gMDsKKworaW50IGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbChjb25z dCBzZW1hbmFnZV9pYmVuZHBvcnRfdCAqaWJlbmRwb3J0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpmbl9hcmcpIHsKKyAgICBDVV9BU1NFUlQoZm5fYXJnID09ICh2 b2lkICopIDQyKTsKKworICAgIGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbF9jb3VudGVy Kys7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9s b2NhbF9lcnJvcihjb25zdCBzZW1hbmFnZV9pYmVuZHBvcnRfdCAqaWJlbmRwb3J0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmbl9hcmcpIHsKKyAgICBD VV9BU1NFUlQoZm5fYXJnID09ICh2b2lkICopIDQyKTsKKworICAgIGhlbHBlcl9pYmVuZHBvcnRf aXRlcmF0ZV9sb2NhbF9jb3VudGVyKys7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBoZWxw ZXJfaWJlbmRwb3J0X2l0ZXJhdGVfbG9jYWxfYnJlYWsoY29uc3Qgc2VtYW5hZ2VfaWJlbmRwb3J0 X3QgKmliZW5kcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqZm5fYXJnKSB7CisgICAgQ1VfQVNTRVJUKGZuX2FyZyA9PSAodm9pZCAqKSA0Mik7CisK KyAgICBoZWxwZXJfaWJlbmRwb3J0X2l0ZXJhdGVfbG9jYWxfY291bnRlcisrOworCisgICAgcmV0 dXJuIDE7Cit9CisKK3ZvaWQgdGVzdF9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbCh2b2lkKSB7Cisg ICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAgYWRkX2xvY2Fs X2liZW5kcG9ydChJX0ZJUlNUKTsKKyAgICBhZGRfbG9jYWxfaWJlbmRwb3J0KElfU0VDT05EKTsK KyAgICBhZGRfbG9jYWxfaWJlbmRwb3J0KElfVEhJUkQpOworCisgICAgLy8gdGVzdAorICAgIGhl bHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbF9jb3VudGVyID0gMDsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbChzaCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGVscGVyX2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsLCAodm9pZCAqKSA0Mikg Pj0gMCk7CisgICAgQ1VfQVNTRVJUKGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbF9jb3Vu dGVyID09IDMpOworCisgICAgLy8gdGVzdCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGVycm9yCisg ICAgaGVscGVyX2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsX2NvdW50ZXIgPSAwOworCisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsKHNoLAorICAgICAgICAgICAg ICAgICAgICAgICAgaGVscGVyX2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsX2Vycm9yLCAodm9pZCAq KSA0MikgPCAwKTsKKyAgICBDVV9BU1NFUlQoaGVscGVyX2liZW5kcG9ydF9pdGVyYXRlX2xvY2Fs X2NvdW50ZXIgPT0gMSk7CisKKyAgICAvLyB0ZXN0IGZ1bmN0aW9uIHdoaWNoIHJlcXVlc3RzIGJy ZWFrCisgICAgaGVscGVyX2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsX2NvdW50ZXIgPSAwOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2liZW5kcG9ydF9pdGVyYXRlX2xvY2FsKHNoLAorICAgICAg ICAgICAgICAgICAgICAgICBoZWxwZXJfaWJlbmRwb3J0X2l0ZXJhdGVfbG9jYWxfYnJlYWssICh2 b2lkICopIDQyKSA+PSAwKTsKKyAgICAvLyBUT0RPOiB0aGVyZSBpcyBhIGJ1ZworICAgIC8vQ1Vf QVNTRVJUKGhlbHBlcl9pYmVuZHBvcnRfaXRlcmF0ZV9sb2NhbF9jb3VudGVyID09IDEpOworCisg ICAgLy8gY2xlYW51cAorICAgIGRlbGV0ZV9sb2NhbF9pYmVuZHBvcnQoSV9GSVJTVCk7CisgICAg ZGVsZXRlX2xvY2FsX2liZW5kcG9ydChJX1NFQ09ORCk7CisgICAgZGVsZXRlX2xvY2FsX2liZW5k cG9ydChJX1RISVJEKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8g RnVuY3Rpb24gc2VtYW5hZ2VfaWJlbmRwb3J0X2xpc3RfbG9jYWwKKwordm9pZCB0ZXN0X2liZW5k cG9ydF9saXN0X2xvY2FsKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9pYmVuZHBvcnRfdCAqKnJlY29y ZHMgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDQyOworICAgIGNoYXIgKm5hbWUg PSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uID0gTlVMTDsKKworICAgIC8vIHNl dHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGFkZF9sb2NhbF9pYmVuZHBv cnQoSV9GSVJTVCk7CisgICAgYWRkX2xvY2FsX2liZW5kcG9ydChJX1NFQ09ORCk7CisgICAgYWRk X2xvY2FsX2liZW5kcG9ydChJX1RISVJEKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfaWJlbmRwb3J0X2xpc3RfbG9jYWwoc2gsICZyZWNvcmRzLCAmY291bnQpID49IDAp OworCisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChyZWNvcmRzKTsKKyAgICBDVV9B U1NFUlQoY291bnQgPT0gMyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv dW50OyBpKyspIHsKKyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChyZWNvcmRz W2ldKTsKKworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWJlbmRwb3J0X2dldF9pYmRldl9u YW1lKHNoLCByZWNvcmRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZuYW1lKSA+PSAwKTsKKworICAgICAgICBjb24gPSBzZW1hbmFnZV9p YmVuZHBvcnRfZ2V0X2NvbihyZWNvcmRzW2ldKTsKKyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OT1Rf TlVMTF9GQVRBTChjb24pOworCisgICAgICAgIGZyZWUobmFtZSk7CisgICAgfQorCisgICAgLy8g Y2xlYW51cAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor ICAgICAgICBzZW1hbmFnZV9pYmVuZHBvcnRfZnJlZShyZWNvcmRzW2ldKTsKKyAgICB9CisKKyAg ICBmcmVlKHJlY29yZHMpOworCisgICAgZGVsZXRlX2xvY2FsX2liZW5kcG9ydChJX0ZJUlNUKTsK KyAgICBkZWxldGVfbG9jYWxfaWJlbmRwb3J0KElfU0VDT05EKTsKKyAgICBkZWxldGVfbG9jYWxf aWJlbmRwb3J0KElfVEhJUkQpOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQor CisjZW5kaWYKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVz dF9pYmVuZHBvcnQuaCBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2liZW5k cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjc1YzMKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9pYmVuZHBv cnQuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9fVEVTVF9JQkVORFBPUlRfSF9fCisjZGVm aW5lIF9fVEVTVF9JQkVORFBPUlRfSF9fCisKKyNpbmNsdWRlIDxDVW5pdC9CYXNpYy5oPgorCisj aW5jbHVkZSAiZnVuY3Rpb25zLmgiCisKK2ludCBpYmVuZHBvcnRfdGVzdF9pbml0KHZvaWQpOwor aW50IGliZW5kcG9ydF90ZXN0X2NsZWFudXAodm9pZCk7CitpbnQgaWJlbmRwb3J0X2FkZF90ZXN0 cyhDVV9wU3VpdGUgc3VpdGUpOworCisjaWYgVkVSU19DSEVDSygyLCA1KQorCisvLyBpYmVuZHBv cnRzX3BvbGljeS5oCisKK3ZvaWQgdGVzdF9pYmVuZHBvcnRfcXVlcnkodm9pZCk7Cit2b2lkIHRl c3RfaWJlbmRwb3J0X2V4aXN0cyh2b2lkKTsKK3ZvaWQgdGVzdF9pYmVuZHBvcnRfY291bnQodm9p ZCk7Cit2b2lkIHRlc3RfaWJlbmRwb3J0X2l0ZXJhdGUodm9pZCk7Cit2b2lkIHRlc3RfaWJlbmRw b3J0X2xpc3Qodm9pZCk7CisKKy8vIGliZW5kcG9ydHNfbG9jYWwuaAorCit2b2lkIHRlc3RfaWJl bmRwb3J0X21vZGlmeV9kZWxfcXVlcnlfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfaWJlbmRwb3J0 X2V4aXN0c19sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF9pYmVuZHBvcnRfY291bnRfbG9jYWwodm9p ZCk7Cit2b2lkIHRlc3RfaWJlbmRwb3J0X2l0ZXJhdGVfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3Rf aWJlbmRwb3J0X2xpc3RfbG9jYWwodm9pZCk7CisKKyNlbmRpZgorCisjZW5kaWYKCmRpZmYgLS1n aXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9pYmVuZHBvcnQudGUgYi9s aWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9pYmVuZHBvcnQudGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NmYwYgotLS0gL2Rldi9udWxsCisrKyBiL2xp YnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2liZW5kcG9ydC50ZQpAQCAtMCwwICsx LDM0IEBACitwb2xpY3lfbW9kdWxlKHRlc3RfaWJlbmRwb3J0LDEuMCkKKworZ2VuX3JlcXVpcmUo YAorICAgICAgICB0eXBlIGJpbl90OworICAgICAgICB0eXBlIGluZmluaWJhbmRfbWdtdF9kZXZp Y2VfdDsKKycpCisKK2F0dHJpYnV0ZSBpYmVuZHBvcnRkb21haW47CisKKyMgRG9tYWluIGZvciBw cm9jZXNzLgordHlwZSB0ZXN0X2liZW5kcG9ydF9tYW5hZ2Vfc3VibmV0X3Q7Citkb21haW5fdHlw ZSh0ZXN0X2liZW5kcG9ydF9tYW5hZ2Vfc3VibmV0X3QpCit0eXBlYXR0cmlidXRlIHRlc3RfaWJl bmRwb3J0X21hbmFnZV9zdWJuZXRfdCBpYmVuZHBvcnRkb21haW47CisKK3R5cGUgdGVzdF9pYmVu ZHBvcnRfdDsKK2lmZGVmKGBjb3JlbmV0X2liX2VuZHBvcnQnLGAKK2NvcmVuZXRfaWJfZW5kcG9y dCh0ZXN0X2liZW5kcG9ydF90KQorJykKKworZGV2X3J3X2luZmluaWJhbmRfZGV2KHRlc3RfaWJl bmRwb3J0X21hbmFnZV9zdWJuZXRfdCkKK2Rldl9yd19zeXNmcyh0ZXN0X2liZW5kcG9ydF9tYW5h Z2Vfc3VibmV0X3QpCisKK2NvcmVjbWRfYmluX2VudHJ5X3R5cGUodGVzdF9pYmVuZHBvcnRfbWFu YWdlX3N1Ym5ldF90KQorCithbGxvdyB0ZXN0X2liZW5kcG9ydF9tYW5hZ2Vfc3VibmV0X3QgaW5m aW5pYmFuZF9tZ210X2RldmljZV90OmNocl9maWxlIHsgcmVhZCB3cml0ZSBvcGVuIGlvY3RsfTsK KworaWZkZWYoYGNvcmVuZXRfaWJfYWNjZXNzX3VubGFiZWxlZF9wa2V5cycsYAorY29yZW5ldF9p Yl9hY2Nlc3NfdW5sYWJlbGVkX3BrZXlzKHRlc3RfaWJlbmRwb3J0X21hbmFnZV9zdWJuZXRfdCkK KycpCisKK2FsbG93IHRlc3RfaWJlbmRwb3J0X21hbmFnZV9zdWJuZXRfdCB0ZXN0X2liZW5kcG9y dF90OmluZmluaWJhbmRfZW5kcG9ydCBtYW5hZ2Vfc3VibmV0OworCisjIEFsbG93IGFsbCBvZiB0 aGVzZSBkb21haW5zIHRvIGJlIGVudGVyZWQgZnJvbSB0aGUgc3lzYWRtIGRvbWFpbi4KK21pc2Nm aWxlc19kb21haW5fZW50cnlfdGVzdF9maWxlcyhpYmVuZHBvcnRkb21haW4pCgpkaWZmIC0tZ2l0 IGEvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaWJlbmRwb3J0X21vZHVsZS5o IGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaWJlbmRwb3J0X21vZHVsZS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZGQ5MjIKLS0tIC9kZXYvbnVs bAorKysgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9pYmVuZHBvcnRfbW9k dWxlLmgKQEAgLTAsMCArMSwyMyBAQAorI2RlZmluZSBJQkVORFBPUlRfQ09VTlQgMgorCisjZGVm aW5lIElCRU5EUE9SVF9NT0RVTEVfU09VUkNFIFwKKyAgICAiKHR5cGUgdGVzdF9pYmVuZHBvcnRf dClcbiIgXAorICAgICIodHlwZSB0ZXN0X2liZW5kcG9ydF9zZWNvbmRfdClcbiIgXAorICAgICIo cm9sZXR5cGUgb2JqZWN0X3IgdGVzdF9pYmVuZHBvcnRfdClcbiIgXAorICAgICIocm9sZXR5cGUg b2JqZWN0X3IgdGVzdF9pYmVuZHBvcnRfc2Vjb25kX3QpXG4iIFwKKyAgICAiKGliZW5kcG9ydGNv biBtbHg0XzAgMSAoc3lzdGVtX3Ugb2JqZWN0X3IgdGVzdF9pYmVuZHBvcnRfdCAoKHMwKSAoczAp KSkpXG4iIFwKKyAgICAiKGliZW5kcG9ydGNvbiBtbHg0XzEgMiAoc3lzdGVtX3Ugb2JqZWN0X3Ig dGVzdF9pYmVuZHBvcnRfc2Vjb25kX3QgKChzMCkgKHMwKSkpKVxuIgorCisjZGVmaW5lIElCRU5E UE9SVF9JTlZfTkFNRSAibWx4NF80MiIKKyNkZWZpbmUgSUJFTkRQT1JUX0lOVl9QT1JUIDQyCisK KyNkZWZpbmUgSUJFTkRQT1JUXzFfTkFNRSAibWx4NF8wIgorI2RlZmluZSBJQkVORFBPUlRfMV9Q T1JUIDEKKyNkZWZpbmUgSUJFTkRQT1JUXzFfQ09OICJzeXN0ZW1fdTpvYmplY3Rfcjp0ZXN0X2li ZW5kcG9ydF90OnMwIgorCisjZGVmaW5lIElCRU5EUE9SVF8yX05BTUUgIm1seDRfMSIKKyNkZWZp bmUgSUJFTkRQT1JUXzJfUE9SVCAyCisjZGVmaW5lIElCRU5EUE9SVF8yX0NPTiAic3lzdGVtX3U6 b2JqZWN0X3I6dGVzdF9pYmVuZHBvcnRfc2Vjb25kX3Q6czAiCisKK2NvbnN0IGNoYXIgKnRlc3Rf aWJlbmRwb3J0X21vZHVsZSA9IElCRU5EUE9SVF9NT0RVTEVfU09VUkNFOworc2l6ZV90IHRlc3Rf aWJlbmRwb3J0X21vZHVsZV9sZW4gPSAoc2l6ZW9mIElCRU5EUE9SVF9NT0RVTEVfU09VUkNFKSAt IDE7CgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaWZh Y2UuYyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2lmYWNlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzYzM2NgotLS0gL2Rldi9udWxsCisrKyBi L2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X2lmYWNlLmMKQEAgLTAsMCArMSw1 NjYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNlbWFuYWdlL3NlbWFuYWdlLmg+ CisjaW5jbHVkZSA8c2VtYW5hZ2UvaGFuZGxlLmg+CisjaW5jbHVkZSA8Q1VuaXQvQmFzaWMuaD4K KworI2luY2x1ZGUgInRlc3RfaWZhY2UuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKworZXh0 ZXJuIHNlbWFuYWdlX2hhbmRsZV90ICpzaDsKKworLy8gVE9ETzogY3VycmVudCBwb2xpY2llcyBk b2VzIG5vdCBoYXZlIGFueSBuZXRpZmNvbiBydWxlcworI2RlZmluZSBJRkFDRV9DT1VOVCAwCisK K2ludCBpZmFjZV90ZXN0X2luaXQodm9pZCkgeworCXJldHVybiAwOworfQorCitpbnQgaWZhY2Vf dGVzdF9jbGVhbnVwKHZvaWQpIHsKKwlyZXR1cm4gMDsKK30KKworaW50IGlmYWNlX2FkZF90ZXN0 cyhDVV9wU3VpdGUgc3VpdGUpIHsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2NvbXBh cmUiLCB0ZXN0X2lmYWNlX2NvbXBhcmUpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWZhY2Vf Y29tcGFyZTIiLCB0ZXN0X2lmYWNlX2NvbXBhcmUyKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwg ImlmYWNlX2tleV9jcmVhdGUiLCB0ZXN0X2lmYWNlX2tleV9jcmVhdGUpOworICAgIENVX2FkZF90 ZXN0KHN1aXRlLCAiaWZhY2Vfa2V5X2V4dHJhY3QiLCB0ZXN0X2lmYWNlX2tleV9leHRyYWN0KTsK KyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2dldF9zZXRfbmFtZSIsIHRlc3RfaWZhY2Vf Z2V0X3NldF9uYW1lKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2dldF9zZXRfaWZj b24iLCB0ZXN0X2lmYWNlX2dldF9zZXRfaWZjb24pOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAi aWZhY2VfZ2V0X3NldF9tc2djb24iLCB0ZXN0X2lmYWNlX2dldF9zZXRfbXNnY29uKTsKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2NyZWF0ZSkiLCB0ZXN0X2lmYWNlX2NyZWF0ZSk7Cisg ICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJpZmFjZV9jbG9uZSk7IiwgdGVzdF9pZmFjZV9jbG9uZSk7 CisKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX3F1ZXJ5IiwgdGVzdF9pZmFjZV9xdWVy eSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJpZmFjZV9leGlzdHMiLCB0ZXN0X2lmYWNlX2V4 aXN0cyk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJpZmFjZV9jb3VudCIsIHRlc3RfaWZhY2Vf Y291bnQpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWZhY2VfaXRlcmF0ZSIsIHRlc3RfaWZh Y2VfaXRlcmF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJpZmFjZV9saXN0IiwgdGVzdF9p ZmFjZV9saXN0KTsKKworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAiaWZhY2VfbW9kaWZ5X2RlbF9x dWVyeV9sb2NhbCIsCisgICAgICAgICAgICAgICAgdGVzdF9pZmFjZV9tb2RpZnlfZGVsX3F1ZXJ5 X2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2V4aXN0c19sb2NhbCIsIHRl c3RfaWZhY2VfZXhpc3RzX2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2Nv dW50X2xvY2FsIiwgdGVzdF9pZmFjZV9jb3VudF9sb2NhbCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3Vp dGUsICJpZmFjZV9pdGVyYXRlX2xvY2FsIiwgdGVzdF9pZmFjZV9pdGVyYXRlX2xvY2FsKTsKKyAg ICBDVV9hZGRfdGVzdChzdWl0ZSwgImlmYWNlX2xpc3RfbG9jYWwiLCB0ZXN0X2lmYWNlX2xpc3Rf bG9jYWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2lmYWNlX2Nv bXBhcmUKKwordm9pZCB0ZXN0X2lmYWNlX2NvbXBhcmUodm9pZCkgeworICAgIHNlbWFuYWdlX2lm YWNlX3QgKmlmYWNlID0gTlVMTDsKKyAgICBzZW1hbmFnZV9pZmFjZV9rZXlfdCAqa2V5MSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfaWZhY2Vfa2V5X3QgKmtleTIgPSBOVUxMOworICAgIGludCByZXN1 bHQgPSA0MjsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOwor CisgICAgaWZhY2UgPSBnZXRfaWZhY2UoKTsKKworICAgIGtleTEgPSBnZXRfaWZhY2Vfa2V5KCk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWZhY2Vfa2V5X2NyZWF0ZShzaCwgInF3ZXJ0eSIs ICZrZXkyKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleTIpOworCisgICAg Ly8gdGVzdAorICAgIHJlc3VsdCA9IHNlbWFuYWdlX2lmYWNlX2NvbXBhcmUoaWZhY2UsIGtleTEp OworCisgICAgQ1VfQVNTRVJUKHJlc3VsdCA9PSAwKTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdl X2lmYWNlX2NvbXBhcmUoaWZhY2UsIGtleTIpOworCisgICAgQ1VfQVNTRVJUKHJlc3VsdCAhPSAw KTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV9pZmFjZV9mcmVlKGlmYWNlKTsKKyAg ICBzZW1hbmFnZV9pZmFjZV9rZXlfZnJlZShrZXkxKTsKKyAgICBzZW1hbmFnZV9pZmFjZV9rZXlf ZnJlZShrZXkyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVu Y3Rpb24gc2VtYW5hZ2VfaWZhY2VfY29tcGFyZTIKKwordm9pZCB0ZXN0X2lmYWNlX2NvbXBhcmUy KHZvaWQpIHsKKyAgICBzZW1hbmFnZV9pZmFjZV90ICppZmFjZTEgPSBOVUxMOworICAgIHNlbWFu YWdlX2lmYWNlX3QgKmlmYWNlMiA9IE5VTEw7CisgICAgc2VtYW5hZ2VfaWZhY2VfdCAqaWZhY2Uz ID0gTlVMTDsKKyAgICBpbnQgcmVzdWx0ID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVw X2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIGlmYWNlMSA9IGdldF9pZmFjZSgpOworICAgIGlm YWNlMiA9IGdldF9pZmFjZSgpOworCisgICAgaWZhY2UzID0gZ2V0X2lmYWNlKCk7CisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX2lmYWNlX3NldF9uYW1lKHNoLCBpZmFjZTMsICJxd2VydHkiKSA+PSAw KTsKKworICAgIC8vIHRlc3QKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9pZmFjZV9jb21wYXJlMihp ZmFjZTEsIGlmYWNlMik7CisKKyAgICBDVV9BU1NFUlQocmVzdWx0ID09IDApOworCisgICAgcmVz dWx0ID0gc2VtYW5hZ2VfaWZhY2VfY29tcGFyZTIoaWZhY2UxLCBpZmFjZTMpOworCisgICAgQ1Vf QVNTRVJUKHJlc3VsdCAhPSAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV9pZmFj ZV9mcmVlKGlmYWNlMSk7CisgICAgc2VtYW5hZ2VfaWZhY2VfZnJlZShpZmFjZTIpOworICAgIHNl bWFuYWdlX2lmYWNlX2ZyZWUoaWZhY2UzKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNU KTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWZhY2VfY3JlYXRlCisKK3ZvaWQgdGVzdF9p ZmFjZV9rZXlfY3JlYXRlKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9pZmFjZV9rZXlfdCAqa2V5ID0g TlVMTDsKKworICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChz ZW1hbmFnZV9pZmFjZV9rZXlfY3JlYXRlKHNoLCAiYXNkZiIsICZrZXkpID49IDApOworICAgIENV X0FTU0VSVF9QVFJfTk9UX05VTEwoa2V5KTsKKworICAgIHNlbWFuYWdlX2lmYWNlX2tleV9mcmVl KGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9u IHNlbWFuYWdlX2lmYWNlX2V4dHJhY3QKKwordm9pZCB0ZXN0X2lmYWNlX2tleV9leHRyYWN0KHZv aWQpIHsKKyAgICBzZW1hbmFnZV9pZmFjZV90ICppZmFjZSA9IE5VTEw7CisgICAgc2VtYW5hZ2Vf aWZhY2Vfa2V5X3QgKmtleSA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRs ZShTSF9DT05ORUNUKTsKKworICAgIGlmYWNlID0gZ2V0X2lmYWNlKCk7CisKKyAgICAvLyB0ZXN0 CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX2tleV9leHRyYWN0KHNoLCBpZmFjZSwgJmtl eSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOworCisgICAgLy8gY2xl YW51cAorICAgIHNlbWFuYWdlX2lmYWNlX2ZyZWUoaWZhY2UpOworICAgIHNlbWFuYWdlX2lmYWNl X2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8v IEZ1bmN0aW9uIHNlbWFuYWdlX2lmYWNlX2dldF9uYW1lLCBzZW1hbmFnZV9pZmFjZV9zZXRfbmFt ZQorCit2b2lkIHRlc3RfaWZhY2VfZ2V0X3NldF9uYW1lKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9p ZmFjZV90ICppZmFjZSA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShT SF9DT05ORUNUKTsKKworICAgIGlmYWNlID0gZ2V0X2lmYWNlKCk7CisKKyAgICAvLyB0ZXN0Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX3NldF9uYW1lKHNoLCBpZmFjZSwgIm15X2FzZGYi KSA9PSAwKTsKKworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfaWZhY2VfZ2V0 X25hbWUoaWZhY2UpLCAibXlfYXNkZiIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdl X2lmYWNlX2ZyZWUoaWZhY2UpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQor CisvLyBGdW5jdGlvbiBzZW1hbmFnZV9pZmFjZV9nZXRfaWZjb24sIHNlbWFuYWdlX2lmYWNlX3Nl dF9pZmNvbgorCit2b2lkIHRlc3RfaWZhY2VfZ2V0X3NldF9pZmNvbih2b2lkKSB7CisgICAgc2Vt YW5hZ2VfaWZhY2VfdCAqaWZhY2UgPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29u MSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24yID0gTlVMTDsKKworICAgIC8v IHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgaWZhY2UgPSBnZXRf aWZhY2UoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteV91c2VyX3U6bXlfcm9sZV9yOm15 X3R5cGVfdDpzMCIsICZjb24xKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfaWZhY2Vfc2V0X2lmY29uKHNoLCBpZmFjZSwgY29uMSkgPT0gMCk7CisKKyAgICBj b24yID0gc2VtYW5hZ2VfaWZhY2VfZ2V0X2lmY29uKGlmYWNlKTsKKworICAgIENVX0FTU0VSVF9D T05URVhUX0VRVUFMKGNvbjEsIGNvbjIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdl X2lmYWNlX2ZyZWUoaWZhY2UpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQor CisvLyBGdW5jdGlvbiBzZW1hbmFnZV9pZmFjZV9nZXRfbXNnY29uLCBzZW1hbmFnZV9pZmFjZV9z ZXRfbXNnY29uCisKK3ZvaWQgdGVzdF9pZmFjZV9nZXRfc2V0X21zZ2Nvbih2b2lkKSB7CisgICAg c2VtYW5hZ2VfaWZhY2VfdCAqaWZhY2UgPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAq Y29uMSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24yID0gTlVMTDsKKworICAg IC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgaWZhY2UgPSBn ZXRfaWZhY2UoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3RyaW5n KHNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm15X3VzZXJfdTpteV9yb2xlX3I6 bXlfdHlwZV90OnMwIiwgJmNvbjEpID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VS VChzZW1hbmFnZV9pZmFjZV9zZXRfbXNnY29uKHNoLCBpZmFjZSwgY29uMSkgPT0gMCk7CisKKyAg ICBjb24yID0gc2VtYW5hZ2VfaWZhY2VfZ2V0X21zZ2NvbihpZmFjZSk7CisKKyAgICBDVV9BU1NF UlRfQ09OVEVYVF9FUVVBTChjb24xLCBjb24yKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1h bmFnZV9pZmFjZV9mcmVlKGlmYWNlKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsK K30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWZhY2VfY3JlYXRlCisKK3ZvaWQgdGVzdF9pZmFj ZV9jcmVhdGUodm9pZCkgeworICAgIHNlbWFuYWdlX2lmYWNlX3QgKmlmYWNlID0gTlVMTDsKKyAg ICBzZW1hbmFnZV9jb250ZXh0X3QgKmlmY29uID0gTlVMTDsKKyAgICBzZW1hbmFnZV9jb250ZXh0 X3QgKm1zZ2NvbiA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9D T05ORUNUKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWZhY2VfY3Jl YXRlKHNoLCAmaWZhY2UpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX3Nl dF9uYW1lKHNoLCBpZmFjZSwgImFzZGYiKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNoLCAidXNlcl91OnJvbGVfcjp0eXBlX3Q6czAiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmNvbikgPj0gMCk7Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX3NldF9pZmNvbihzaCwgaWZhY2UsIGlmY29uKSA+ PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNoLCAi dXNlcl91OnJvbGVfcjp0eXBlX3Q6czAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZtc2djb24pID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFj ZV9zZXRfbXNnY29uKHNoLCBpZmFjZSwgbXNnY29uKSA+PSAwKTsKKworICAgIC8vIGNsZWFudXAK KyAgICBzZW1hbmFnZV9pZmFjZV9mcmVlKGlmYWNlKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9D T05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWZhY2VfY2xvbmUKKwordm9pZCB0 ZXN0X2lmYWNlX2Nsb25lKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9pZmFjZV90ICppZmFjZSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfaWZhY2VfdCAqaWZhY2VfY2xvbmUgPSBOVUxMOworICAgIHNlbWFu YWdlX2NvbnRleHRfdCAqaWZjb24gPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqaWZj b24yID0gTlVMTDsKKyAgICBzZW1hbmFnZV9jb250ZXh0X3QgKm1zZ2NvbiA9IE5VTEw7CisgICAg c2VtYW5hZ2VfY29udGV4dF90ICptc2djb24yID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAg c2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNl X2NyZWF0ZShzaCwgJmlmYWNlKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFj ZV9zZXRfbmFtZShzaCwgaWZhY2UsICJhc2RmIikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfY29udGV4dF9mcm9tX3N0cmluZyhzaCwgInVzZXJfdTpyb2xlX3I6aWZfdHlwZV90OnMw IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZjb24pID49 IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFjZV9zZXRfaWZjb24oc2gsIGlmYWNlLCBp ZmNvbikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29udGV4dF9mcm9tX3N0cmlu ZyhzaCwgInVzZXJfdTpyb2xlX3I6bXNnX3R5cGVfdDpzMCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJm1zZ2NvbikgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNl bWFuYWdlX2lmYWNlX3NldF9tc2djb24oc2gsIGlmYWNlLCBtc2djb24pID49IDApOworCisgICAg Ly8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFjZV9jbG9uZShzaCwgaWZhY2UsICZp ZmFjZV9jbG9uZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKHNlbWFuYWdl X2lmYWNlX2dldF9uYW1lKGlmYWNlX2Nsb25lKSwgImFzZGYiKTsKKworICAgIGlmY29uMiA9IHNl bWFuYWdlX2lmYWNlX2dldF9pZmNvbihpZmFjZV9jbG9uZSk7CisgICAgCisgICAgQ1VfQVNTRVJU X0NPTlRFWFRfRVFVQUwoaWZjb24sIGlmY29uMik7CisKKyAgICBtc2djb24yID0gc2VtYW5hZ2Vf aWZhY2VfZ2V0X21zZ2NvbihpZmFjZV9jbG9uZSk7CisKKyAgICBDVV9BU1NFUlRfQ09OVEVYVF9F UVVBTChtc2djb24sIG1zZ2NvbjIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX2lm YWNlX2ZyZWUoaWZhY2UpOworICAgIHNlbWFuYWdlX2lmYWNlX2ZyZWUoaWZhY2VfY2xvbmUpOwor ICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFn ZV9pZmFjZV9xdWVyeQorCit2b2lkIHRlc3RfaWZhY2VfcXVlcnkodm9pZCkgeworICAgIHNlbWFu YWdlX2lmYWNlX3QgKmlmYWNlID0gTlVMTDsKKyAgICBzZW1hbmFnZV9pZmFjZV9rZXlfdCAqa2V5 ID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOwor CisgICAga2V5ID0gZ2V0X2lmYWNlX2tleSgpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VS VChzZW1hbmFnZV9pZmFjZV9xdWVyeShzaCwga2V5LCAmaWZhY2UpID49IDApOworCisgICAgQ1Vf QVNTRVJUKGlmYWNlID09IE5VTEwpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX2lm YWNlX2ZyZWUoaWZhY2UpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisv LyBGdW5jdGlvbiBzZW1hbmFnZV9pZmFjZV9leGlzdHMKKwordm9pZCB0ZXN0X2lmYWNlX2V4aXN0 cyh2b2lkKSB7CisgICAgc2VtYW5hZ2VfaWZhY2Vfa2V5X3QgKmtleSA9IE5VTEw7CisgICAgaW50 IHJlc3BvbnNlID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05O RUNUKTsKKworICAgIGtleSA9IGdldF9pZmFjZV9rZXkoKTsKKworICAgIC8vIHRlc3QKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfaWZhY2VfZXhpc3RzKHNoLCBrZXksICZyZXNwb25zZSkgPj0gMCk7 CisKKyAgICBDVV9BU1NFUlQoIXJlc3BvbnNlKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1h bmFnZV9pZmFjZV9rZXlfZnJlZShrZXkpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1Qp OworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9pZmFjZV9jb3VudAorCit2b2lkIHRlc3RfaWZh Y2VfY291bnQodm9pZCkgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDQyOworCisgICAgLy8g c2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICAvLyB0ZXN0CisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX2NvdW50KHNoLCAmY291bnQpID49IDApOworCisgICAg Q1VfQVNTRVJUKGNvdW50ID09IElGQUNFX0NPVU5UKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBj bGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfaWZh Y2VfaXRlcmF0ZQorCit1bnNpZ25lZCBpbnQgY291bnRlcl9pZmFjZV9pdGVyYXRlID0gMDsKKwor aW50IGhhbmRsZXJfaWZhY2VfaXRlcmF0ZShjb25zdCBzZW1hbmFnZV9pZmFjZV90ICpyZWNvcmQs IHZvaWQgKnZhcmcpIHsKKyAgICBjb3VudGVyX2lmYWNlX2l0ZXJhdGUrKzsKKyAgICByZXR1cm4g MDsKK30KKwordm9pZCB0ZXN0X2lmYWNlX2l0ZXJhdGUodm9pZCkgeworICAgIC8vIHNldHVwCisg ICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgLy8gdGVzdAorICAgIHNlbWFuYWdl X2lmYWNlX2l0ZXJhdGUoc2gsIGhhbmRsZXJfaWZhY2VfaXRlcmF0ZSwgTlVMTCk7CisKKyAgICBD VV9BU1NFUlQoY291bnRlcl9pZmFjZV9pdGVyYXRlID09IElGQUNFX0NPVU5UKTsKKworICAgIC8v IGNsZWFudXAKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rp b24gc2VtYW5hZ2VfaWZhY2VfbGlzdAorCit2b2lkIHRlc3RfaWZhY2VfbGlzdCh2b2lkKSB7Cisg ICAgc2VtYW5hZ2VfaWZhY2VfdCAqKnJlY29yZHMgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBj b3VudCA9IDQyOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7 CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX2xpc3Qoc2gsICZy ZWNvcmRzLCAmY291bnQpID49IDApOworCisgICAgQ1VfQVNTRVJUKGNvdW50ID09IElGQUNFX0NP VU5UKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor ICAgICAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKHJlY29yZHNbaV0pOworICAgIH0KKworICAg IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzZW1h bmFnZV9pZmFjZV9mcmVlKHJlY29yZHNbaV0pOworICAgIH0KKworICAgIC8vIGNsZWFudXAKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vf aWZhY2VfbW9kaWZ5X2xvY2FsLCBzZW1hbmFnZV9pZmFjZV9kZWxfbG9jYWwsCisvLyBzZW1hbmFn ZV9pZmFjZV9xdWVyeV9sb2NhbAorCit2b2lkIHRlc3RfaWZhY2VfbW9kaWZ5X2RlbF9xdWVyeV9s b2NhbCh2b2lkKSB7CisgICAgc2VtYW5hZ2VfaWZhY2VfdCAqaWZhY2U7CisgICAgc2VtYW5hZ2Vf aWZhY2VfdCAqaWZhY2VfbG9jYWw7CisgICAgc2VtYW5hZ2VfaWZhY2Vfa2V5X3QgKmtleSA9IE5V TEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBp ZmFjZSA9IGdldF9pZmFjZSgpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX2tleV9l eHRyYWN0KHNoLCBpZmFjZSwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVM TChrZXkpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFjZV9tb2Rp ZnlfbG9jYWwoc2gsIGtleSwgaWZhY2UpID49IDApOworCisgICAgLy8gd3JpdGUgY2hhbmdlcyB0 byBmaWxlCisgICAgaGVscGVyX2NvbW1pdCgpOworICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlv bigpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX3F1ZXJ5X2xvY2FsKHNoLCBrZXks ICZpZmFjZV9sb2NhbCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTF9GQVRBTChp ZmFjZV9sb2NhbCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWZhY2VfZGVsX2xvY2FsKHNo LCBrZXkpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2lmYWNlX3F1ZXJ5X2xvY2Fs KHNoLCBrZXksICZpZmFjZV9sb2NhbCkgPCAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1h bmFnZV9pZmFjZV9mcmVlKGlmYWNlKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9 CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2lmYWNlX2V4aXN0c19sb2NhbAorCit2b2lkIHRlc3Rf aWZhY2VfZXhpc3RzX2xvY2FsKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9pZmFjZV90ICppZmFjZTEg PSBOVUxMOworICAgIHNlbWFuYWdlX2lmYWNlX2tleV90ICprZXkxID0gTlVMTDsKKyAgICBzZW1h bmFnZV9pZmFjZV9rZXlfdCAqa2V5MiA9IE5VTEw7CisgICAgaW50IHJlc3BvbnNlID0gNDI7CisK KyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfaWZhY2VfY3JlYXRlKHNoLCAmaWZhY2UxKSA+PSAwKTsKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfaWZhY2Vfc2V0X25hbWUoc2gsIGlmYWNlMSwgImFzZGYiKSA+PSAwKTsKKwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFjZV9rZXlfZXh0cmFjdChzaCwgaWZhY2UxLCAma2V5 MSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkxKTsKKworICAgIENVX0FT U0VSVChzZW1hbmFnZV9pZmFjZV9tb2RpZnlfbG9jYWwoc2gsIGtleTEsIGlmYWNlMSkgPj0gMCk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfaWZhY2Vfa2V5X2NyZWF0ZShzaCwgInF3ZXJ0eSIs ICZrZXkyKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleTIpOworCisgICAg Ly8gdGVzdCBleGlzdGluZworICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFjZV9leGlzdHNfbG9j YWwoc2gsIGtleTEsICZyZXNwb25zZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQocmVzcG9uc2Up OworCisgICAgLy8gdGVzdCBub25leGlzdGVudAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9pZmFj ZV9leGlzdHNfbG9jYWwoc2gsIGtleTIsICZyZXNwb25zZSkgPj0gMCk7CisKKyAgICBDVV9BU1NF UlQoIXJlc3BvbnNlKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf aWZhY2VfZGVsX2xvY2FsKHNoLCBrZXkxKSA+PSAwKTsKKyAgICBzZW1hbmFnZV9pZmFjZV9mcmVl KGlmYWNlMSk7CisgICAgc2VtYW5hZ2VfaWZhY2Vfa2V5X2ZyZWUoa2V5MSk7CisgICAgc2VtYW5h Z2VfaWZhY2Vfa2V5X2ZyZWUoa2V5Mik7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOwor fQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9pZmFjZV9jb3VudF9sb2NhbAorCit2b2lkIHRlc3Rf aWZhY2VfY291bnRfbG9jYWwodm9pZCkgeworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDQyOwor CisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAgYWRkX2xv Y2FsX2lmYWNlKElfRklSU1QpOworICAgIGFkZF9sb2NhbF9pZmFjZShJX1NFQ09ORCk7CisgICAg YWRkX2xvY2FsX2lmYWNlKElfVEhJUkQpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChz ZW1hbmFnZV9pZmFjZV9jb3VudF9sb2NhbChzaCwgJmNvdW50KSA+PSAwKTsKKworICAgIENVX0FT U0VSVChjb3VudCA9PSAzKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBkZWxldGVfbG9jYWxfaWZh Y2UoSV9GSVJTVCk7CisgICAgZGVsZXRlX2xvY2FsX2lmYWNlKElfU0VDT05EKTsKKyAgICBkZWxl dGVfbG9jYWxfaWZhY2UoSV9USElSRCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7 Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2lmYWNlX2l0ZXJhdGVfbG9jYWwKKwordW5zaWdu ZWQgaW50IGNvdW50ZXJfaWZhY2VfaXRlcmF0ZV9sb2NhbCA9IDA7CisKK2ludCBoYW5kbGVyX2lm YWNlX2l0ZXJhdGVfbG9jYWwoY29uc3Qgc2VtYW5hZ2VfaWZhY2VfdCAqcmVjb3JkLCB2b2lkICp2 YXJnKSB7CisgICAgY291bnRlcl9pZmFjZV9pdGVyYXRlX2xvY2FsKys7CisgICAgcmV0dXJuIDA7 Cit9CisKK3ZvaWQgdGVzdF9pZmFjZV9pdGVyYXRlX2xvY2FsKHZvaWQpIHsKKyAgICAvLyBzZXR1 cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBhZGRfbG9jYWxfaWZhY2UoSV9G SVJTVCk7CisgICAgYWRkX2xvY2FsX2lmYWNlKElfU0VDT05EKTsKKyAgICBhZGRfbG9jYWxfaWZh Y2UoSV9USElSRCk7CisKKyAgICAvLyB0ZXN0CisgICAgc2VtYW5hZ2VfaWZhY2VfaXRlcmF0ZV9s b2NhbChzaCwgaGFuZGxlcl9pZmFjZV9pdGVyYXRlX2xvY2FsLCBOVUxMKTsKKworICAgIENVX0FT U0VSVChjb3VudGVyX2lmYWNlX2l0ZXJhdGVfbG9jYWwgPT0gMyk7CisKKyAgICAvLyBjbGVhbnVw CisgICAgZGVsZXRlX2xvY2FsX2lmYWNlKElfRklSU1QpOworICAgIGRlbGV0ZV9sb2NhbF9pZmFj ZShJX1NFQ09ORCk7CisgICAgZGVsZXRlX2xvY2FsX2lmYWNlKElfVEhJUkQpOworCisgICAgY2xl YW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9pZmFjZV9s aXN0X2xvY2FsCisKK3ZvaWQgdGVzdF9pZmFjZV9saXN0X2xvY2FsKHZvaWQpIHsKKyAgICBzZW1h bmFnZV9pZmFjZV90ICoqcmVjb3JkcyA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0g NDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBh ZGRfbG9jYWxfaWZhY2UoSV9GSVJTVCk7CisgICAgYWRkX2xvY2FsX2lmYWNlKElfU0VDT05EKTsK KyAgICBhZGRfbG9jYWxfaWZhY2UoSV9USElSRCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX2lmYWNlX2xpc3RfbG9jYWwoc2gsICZyZWNvcmRzLCAmY291bnQpID49IDAp OworCisgICAgQ1VfQVNTRVJUKGNvdW50ID09IDMpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwo cmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgLy8gY2xlYW51cAorICAgIGZvciAodW5zaWduZWQg aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzZW1hbmFnZV9pZmFjZV9mcmVl KHJlY29yZHNbaV0pOworICAgIH0KKworICAgIGRlbGV0ZV9sb2NhbF9pZmFjZShJX0ZJUlNUKTsK KyAgICBkZWxldGVfbG9jYWxfaWZhY2UoSV9TRUNPTkQpOworICAgIGRlbGV0ZV9sb2NhbF9pZmFj ZShJX1RISVJEKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KCmRpZmYgLS1n aXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9pZmFjZS5oIGIvbGlic2Vt YW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaWZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5mMDNkYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uv c2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfaWZhY2UuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVm IF9fVEVTVF9JRkFDRV9IX18KKyNkZWZpbmUgX19URVNUX0lGQUNFX0hfXworCisjaW5jbHVkZSA8 Q1VuaXQvQmFzaWMuaD4KKworaW50IGlmYWNlX3Rlc3RfaW5pdCh2b2lkKTsKK2ludCBpZmFjZV90 ZXN0X2NsZWFudXAodm9pZCk7CitpbnQgaWZhY2VfYWRkX3Rlc3RzKENVX3BTdWl0ZSBzdWl0ZSk7 CisKKy8vIGlmYWNlX3JlY29yZC5oCisKK3ZvaWQgdGVzdF9pZmFjZV9jb21wYXJlKHZvaWQpOwor dm9pZCB0ZXN0X2lmYWNlX2NvbXBhcmUyKHZvaWQpOwordm9pZCB0ZXN0X2lmYWNlX2tleV9jcmVh dGUodm9pZCk7Cit2b2lkIHRlc3RfaWZhY2Vfa2V5X2V4dHJhY3Qodm9pZCk7Cit2b2lkIHRlc3Rf aWZhY2VfZ2V0X3NldF9uYW1lKHZvaWQpOwordm9pZCB0ZXN0X2lmYWNlX2dldF9zZXRfaWZjb24o dm9pZCk7Cit2b2lkIHRlc3RfaWZhY2VfZ2V0X3NldF9tc2djb24odm9pZCk7Cit2b2lkIHRlc3Rf aWZhY2VfY3JlYXRlKHZvaWQpOwordm9pZCB0ZXN0X2lmYWNlX2Nsb25lKHZvaWQpOworCisvLyBp dGVyZmFjZXNfcG9saWN5LmgKKwordm9pZCB0ZXN0X2lmYWNlX3F1ZXJ5KHZvaWQpOwordm9pZCB0 ZXN0X2lmYWNlX2V4aXN0cyh2b2lkKTsKK3ZvaWQgdGVzdF9pZmFjZV9jb3VudCh2b2lkKTsKK3Zv aWQgdGVzdF9pZmFjZV9pdGVyYXRlKHZvaWQpOwordm9pZCB0ZXN0X2lmYWNlX2xpc3Qodm9pZCk7 CisKKy8vIGludGVyZmFjZXNfbG9jYWwuaAorCit2b2lkIHRlc3RfaWZhY2VfbW9kaWZ5X2RlbF9x dWVyeV9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF9pZmFjZV9leGlzdHNfbG9jYWwodm9pZCk7Cit2 b2lkIHRlc3RfaWZhY2VfY291bnRfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfaWZhY2VfaXRlcmF0 ZV9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF9pZmFjZV9saXN0X2xvY2FsKHZvaWQpOworCisjZW5k aWYKKwoKZGlmZiAtLWdpdCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X21v ZHVsZS5jIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfbW9kdWxlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1YWNhOQotLS0gL2Rldi9udWxsCisr KyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X21vZHVsZS5jCkBAIC0wLDAg KzEsMTM0NyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9zZW1hbmFnZS5oPgorI2luY2x1ZGUgPHNlbWFuYWdl L2hhbmRsZS5oPgorI2luY2x1ZGUgPHNlbGludXgvc2VsaW51eC5oPgorI2luY2x1ZGUgPENVbml0 L0Jhc2ljLmg+CisKKyNpbmNsdWRlICJ0ZXN0X21vZHVsZS5oIgorI2luY2x1ZGUgImZ1bmN0aW9u cy5oIgorCitleHRlcm4gc2VtYW5hZ2VfaGFuZGxlX3QgKnNoOworCisjZGVmaW5lIENJTF9OQU1F ICJteV9jaWxfbW9kdWxlIgorI2RlZmluZSBDSUxfTEFOR19FWFQgImNpbCIKKyNkZWZpbmUgQ0lM X0ZJTEUgQ0lMX05BTUUgIi4iIENJTF9MQU5HX0VYVAorI2RlZmluZSBDSUxfVEVYVCAiKGJvb2xl YW4gIiBDSUxfTkFNRSAiIHRydWUpIgorCisjZGVmaW5lIEJaSVBfTkFNRSAibXlfYnppcF9tb2R1 bGUiCisjZGVmaW5lIEJaSVBfTEFOR19FWFQgImNpbCIKKyNkZWZpbmUgQlpJUF9GSUxFIEJaSVBf TkFNRSAiLiIgQlpJUF9MQU5HX0VYVAorI2RlZmluZSBCWklQX1RFWFRfVU5DT01QUkVTU0VEICIo Ym9vbGVhbiBteV9iemlwX21vZHVsZSB0cnVlKSIKK2NvbnN0IGNoYXIgQlpJUF9URVhUW10gPSB7 CisgICAgMHg0MiwgMHg1YSwgMHg2OCwgMHgzOSwgMHgzMSwgMHg0MSwgMHg1OSwgMHgyNiwgMHg1 MywgMHg1OSwgMHg0MywgMHg2MiwKKyAgICAweDg2LCAweDM1LCAweDAwLCAweDAwLCAweDAxLCAw eDEzLCAweDgwLCAweDQwLCAweDYwLCAweDAwLCAweDAwLCAweGI2LAorICAgIDB4MjcsIDB4ZDYs IDB4MzAsIDB4MjAsIDB4MDAsIDB4MzEsIDB4NGMsIDB4OTgsIDB4OTksIDB4MDYsIDB4NDYsIDB4 MTQsCisgICAgMHhkMSwgMHhhNiwgMHg0MywgMHg0NiwgMHg5OSwgMHhhOCwgMHhkOSwgMHgzMiwg MHg5NywgMHhiMiwgMHgyYiwgMHhmNiwKKyAgICAweDQ4LCAweDVhLCAweGU2LCAweGRjLCAweDgz LCAweDc4LCAweDA4LCAweDAyLCAweGE3LCAweGM1LCAweGRjLCAweDkxLAorICAgIDB4NGUsIDB4 MTQsIDB4MjQsIDB4MTAsIDB4ZDgsIDB4YTEsIDB4OGQsIDB4NDAgfTsKKworI2RlZmluZSBCWklQ X0lOVkFMSURfRklMRSAibXlfaW52YWxpZF9iemlwX21vZHVsZSIKKyNkZWZpbmUgQlpJUF9JTlZB TElEX1RFWFQgQlpJUF9URVhUCisKKyNkZWZpbmUgSExMX05BTUUgIm15X2hsbF9tb2R1bGUiCisj ZGVmaW5lIEhMTF9MQU5HX0VYVCAicHAiCisjZGVmaW5lIEhMTF9GSUxFIEhMTF9OQU1FICIuIiBI TExfTEFOR19FWFQKKyNkZWZpbmUgSExMX1RFWFQgIm1vZHVsZSAiIEhMTF9OQU1FICIgMS4wO1xu cmVxdWlyZSB7XG5yb2xlIHN5c3RlbV9yO1xuIiBcCisgICAgICAgICAgICAgICAgICJ9XG5ib29s ICIgSExMX05BTUUgIiB0cnVlO1xuIgorY2hhciAqSExMX0RBVEEgPSBOVUxMOworc2l6ZV90IEhM TF9EQVRBX0xFTiA9IDA7CisKKyNkZWZpbmUgSU5WQUxJRF9OQU1FICJteV9pbnZhbGlkX21vZHVs ZSIKKyNkZWZpbmUgSU5WQUxJRF9GSUxFIElOVkFMSURfTkFNRQorI2RlZmluZSBJTlZBTElEX1RF WFQgIihib29sZWFuICIgSU5WQUxJRF9OQU1FICIgdHJ1ZSkiCisKKyNkZWZpbmUgUFJJT1JJVFlf TkFNRSAibXlfY2lsX21vZHVsZSIKKyNkZWZpbmUgUFJJT1JJVFlfRklMRSAicHJpb3JpdHkvIiBQ UklPUklUWV9OQU1FICIuY2lsIgorI2RlZmluZSBQUklPUklUWV9CT09MICJteV9wcmlvcml0eV9t b2R1bGUiCisjZGVmaW5lIFBSSU9SSVRZX1RFWFQgIihib29sZWFuICIgUFJJT1JJVFlfQk9PTCAi IHRydWUpIgorCitpbnQgbW9kdWxlX3Rlc3RfaW5pdCh2b2lkKSB7CisgICAgLy8gQ0lMIG1vZHVs ZQorICAgIEZJTEUgKmNpbF9maWxlID0gZm9wZW4oQ0lMX0ZJTEUsICJ3Iik7CisKKyAgICBpZiAo Y2lsX2ZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGZwcmludGYo Y2lsX2ZpbGUsIENJTF9URVhUKSAhPSBzdHJsZW4oQ0lMX1RFWFQpKQorICAgICAgICByZXR1cm4g LTE7CisKKyAgICBmY2xvc2UoY2lsX2ZpbGUpOworCisgICAgLy8gYnppcHBlZCBjaWwgbW9kdWxl CisgICAgRklMRSAqYnppcF9maWxlID0gZm9wZW4oQlpJUF9GSUxFLCAidyIpOworCisgICAgaWYg KGJ6aXBfZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoZndyaXRl KCZCWklQX1RFWFQsIHNpemVvZihjaGFyKSwgc2l6ZW9mKEJaSVBfVEVYVCksIGJ6aXBfZmlsZSkK KyAgICAgICAgICAgICE9IHNpemVvZihCWklQX1RFWFQpKQorICAgICAgICByZXR1cm4gLTE7CisK KyAgICBmY2xvc2UoYnppcF9maWxlKTsKKworICAgIC8vIGJ6aXBwZWQgY2lsIG1vZHVsZSB3aXRo IGludmFsaWQgZmlsZSBleHRlbnNpb24KKyAgICBGSUxFICpiemlwX2ludmFsaWRfZmlsZSA9IGZv cGVuKEJaSVBfSU5WQUxJRF9GSUxFLCAidyIpOworCisgICAgaWYgKGJ6aXBfaW52YWxpZF9maWxl ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChmd3JpdGUoJkJaSVBfSU5W QUxJRF9URVhULCBzaXplb2YoY2hhciksIHNpemVvZihCWklQX0lOVkFMSURfVEVYVCksCisgICAg ICAgICAgICAgICBiemlwX2ludmFsaWRfZmlsZSkgIT0gc2l6ZW9mKEJaSVBfSU5WQUxJRF9URVhU KSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZmNsb3NlKGJ6aXBfaW52YWxpZF9maWxlKTsK KworICAgIC8vIGhsbCBtb2R1bGUKKyAgICBGSUxFICp0ZV9maWxlID0gZm9wZW4oSExMX05BTUUg Ii50ZSIsICJ3Iik7CisKKyAgICBpZiAodGVfZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4g LTE7CisKKyAgICBpZiAoZnByaW50Zih0ZV9maWxlLCBITExfVEVYVCkgIT0gc3RybGVuKEhMTF9U RVhUKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZmNsb3NlKHRlX2ZpbGUpOworCisgICAg aWYgKHN5c3RlbSgiY2hlY2ttb2R1bGUgLU0gLW0gLW8gIiBITExfTkFNRSAiLm1vZCAiIEhMTF9O QU1FICIudGUiKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoc3lzdGVtKCJz ZW1vZHVsZV9wYWNrYWdlIC1tICIgSExMX05BTUUgIi5tb2QgLW8gIiBITExfRklMRSkgIT0gMCkK KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgRklMRSAqcHBfZmlsZSA9IGZvcGVuKEhMTF9GSUxF LCAiciIpOworICAgIAorICAgIGlmIChwcF9maWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAt MTsKKworICAgIGZzZWVrKHBwX2ZpbGUsIDAsIFNFRUtfRU5EKTsKKyAgICBITExfREFUQV9MRU4g PSBmdGVsbChwcF9maWxlKTsKKyAgICByZXdpbmQocHBfZmlsZSk7CisKKyAgICBITExfREFUQSA9 IG1hbGxvYyhITExfREFUQV9MRU4pOworCisgICAgaWYgKEhMTF9EQVRBID09IE5VTEwpCisgICAg ICAgIHJldHVybiAtMTsKKworICAgIGlmIChmcmVhZChITExfREFUQSwgMSwgSExMX0RBVEFfTEVO LCBwcF9maWxlKSAhPSBITExfREFUQV9MRU4pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGZj bG9zZShwcF9maWxlKTsKKworICAgIC8vIENJTCBtb2R1bGUgd2l0aCBpbnZhbGlkIGxhbmcgZXh0 CisgICAgRklMRSAqaW52YWxpZF9sYW5nX2V4dF9maWxlID0gZm9wZW4oSU5WQUxJRF9GSUxFLCAi dyIpOworCisgICAgaWYgKGludmFsaWRfbGFuZ19leHRfZmlsZSA9PSBOVUxMKQorICAgICAgICBy ZXR1cm4gLTE7CisKKyAgICBpZiAoZnByaW50ZihpbnZhbGlkX2xhbmdfZXh0X2ZpbGUsIElOVkFM SURfVEVYVCkgIT0gc3RybGVuKElOVkFMSURfVEVYVCkpCisgICAgICAgIHJldHVybiAtMTsKKwor ICAgIGZjbG9zZShpbnZhbGlkX2xhbmdfZXh0X2ZpbGUpOworCisgICAgLy8gQ0lMIG1vZHVsZSB3 aXRoIHNhbWUgbmFtZSBhcyBleGlzdGluZyBtb2R1bGUKKyAgICBpZiAobWtkaXIoInByaW9yaXR5 IiwgMDcwMCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgRklMRSAqcHJpb3JpdHlf ZmlsZSA9IGZvcGVuKFBSSU9SSVRZX0ZJTEUsICJ3Iik7CisKKyAgICBpZiAocHJpb3JpdHlfZmls ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoZnByaW50Zihwcmlvcml0 eV9maWxlLCBQUklPUklUWV9URVhUKSAhPSBzdHJsZW4oUFJJT1JJVFlfVEVYVCkpCisgICAgICAg IHJldHVybiAtMTsKKworICAgIGZjbG9zZShwcmlvcml0eV9maWxlKTsKKworCXJldHVybiAwOwor fQorCitpbnQgbW9kdWxlX3Rlc3RfY2xlYW51cCh2b2lkKSB7CisgICAgaW50IHN0YXR1cyA9IDA7 CisKKyAgICBpZiAodW5saW5rKENJTF9GSUxFKSA8IDApCisgICAgICAgIHN0YXR1cyA9IC0xOwor CisgICAgaWYgKHVubGluayhCWklQX0ZJTEUpIDwgMCkKKyAgICAgICAgc3RhdHVzID0gLTE7CisK KyAgICBpZiAodW5saW5rKEJaSVBfSU5WQUxJRF9GSUxFKSA8IDApCisgICAgICAgIHN0YXR1cyA9 IC0xOworCisgICAgaWYgKHVubGluayhITExfRklMRSkgPCAwKQorICAgICAgICBzdGF0dXMgPSAt MTsKKworICAgIGlmICh1bmxpbmsoSExMX05BTUUgIi5tb2QiKSA8IDApCisgICAgICAgIHN0YXR1 cyA9IC0xOworCisgICAgaWYgKHVubGluayhITExfTkFNRSAiLnRlIikgPCAwKQorICAgICAgICBz dGF0dXMgPSAtMTsKKworICAgIGlmICh1bmxpbmsoSU5WQUxJRF9GSUxFKSA8IDApCisgICAgICAg IHN0YXR1cyA9IC0xOworCisgICAgaWYgKHVubGluayhQUklPUklUWV9GSUxFKSA8IDApCisgICAg ICAgIHN0YXR1cyA9IC0xOworCisgICAgaWYgKHJtZGlyKCJwcmlvcml0eSIpICE9IDApCisgICAg ICAgIHN0YXR1cyA9IC0xOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW50IG1vZHVsZV9h ZGRfdGVzdHMoQ1VfcFN1aXRlIHN1aXRlKSB7CisjaWYgVkVSU19DSEVDSygyLCA1KQorICAgIENV X2FkZF90ZXN0KHN1aXRlLCAibW9kdWxlX2luc3RhbGwiLCB0ZXN0X21vZHVsZV9pbnN0YWxsKTsK KyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm1vZHVsZV9pbnN0YWxsX2ZpbGUiLCB0ZXN0X21vZHVs ZV9pbnN0YWxsX2ZpbGUpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAibW9kdWxlX2luc3RhbGxf aW5mbyIsIHRlc3RfbW9kdWxlX2luc3RhbGxfaW5mbyk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUs ICJtb2R1bGVfcmVtb3ZlIiwgdGVzdF9tb2R1bGVfcmVtb3ZlKTsKKyAgICBDVV9hZGRfdGVzdChz dWl0ZSwgIm1vZHVsZV9yZW1vdmVfa2V5IiwgdGVzdF9tb2R1bGVfcmVtb3ZlX2tleSk7CisKKyAg ICBDVV9hZGRfdGVzdChzdWl0ZSwgIm1vZHVsZV9leHRyYWN0IiwgdGVzdF9tb2R1bGVfZXh0cmFj dCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJtb2R1bGVfbGlzdF9hbGwiLCB0ZXN0X21vZHVs ZV9saXN0X2FsbCk7CisjZW5kaWYKKworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAibW9kdWxlX2xp c3QiLCB0ZXN0X21vZHVsZV9saXN0KTsKKworI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAgICBDVV9h ZGRfdGVzdChzdWl0ZSwgIm1vZHVsZV9nZXRfbmFtZSIsIHRlc3RfbW9kdWxlX2dldF9uYW1lKTsK KyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm1vZHVsZV9nZXRfbW9kdWxlX2luZm8iLAorICAgICAg ICAgICAgICAgIHRlc3RfbW9kdWxlX2dldF9tb2R1bGVfaW5mbyk7CisKKyAgICBDVV9hZGRfdGVz dChzdWl0ZSwgIm1vZHVsZV9pbmZvX2NyZWF0ZSIsIHRlc3RfbW9kdWxlX2luZm9fY3JlYXRlKTsK KyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm1vZHVsZV9pbmZvX2dldF9zZXRfcHJpb3JpdHkiLAor ICAgICAgICAgICAgICAgIHRlc3RfbW9kdWxlX2luZm9fZ2V0X3NldF9wcmlvcml0eSk7CisgICAg Q1VfYWRkX3Rlc3Qoc3VpdGUsICJtb2R1bGVfaW5mb19nZXRfc2V0X25hbWUiLAorICAgICAgICAg ICAgICAgIHRlc3RfbW9kdWxlX2luZm9fZ2V0X3NldF9uYW1lKTsKKyAgICBDVV9hZGRfdGVzdChz dWl0ZSwgIm1vZHVsZV9pbmZvX2dldF9zZXRfbGFuZ19leHQiLAorICAgICAgICAgICAgICAgIHRl c3RfbW9kdWxlX2luZm9fZ2V0X3NldF9sYW5nX2V4dCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUs ICJtb2R1bGVfaW5mb19nZXRfc2V0X2VuYWJsZWQiLAorICAgICAgICAgICAgICAgIHRlc3RfbW9k dWxlX2luZm9fZ2V0X3NldF9lbmFibGVkKTsKKworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAibW9k dWxlX2tleV9jcmVhdGUiLCB0ZXN0X21vZHVsZV9rZXlfY3JlYXRlKTsKKyAgICBDVV9hZGRfdGVz dChzdWl0ZSwgIm1vZHVsZV9rZXlfZ2V0X3NldF9uYW1lIiwgdGVzdF9tb2R1bGVfa2V5X2dldF9z ZXRfbmFtZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJtb2R1bGVfa2V5X2dldF9zZXRfcHJp b3JpdHkiLAorICAgICAgICAgICAgICAgIHRlc3RfbW9kdWxlX2tleV9nZXRfc2V0X3ByaW9yaXR5 KTsKKworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAibW9kdWxlX2dldF9zZXRfZW5hYmxlZCIsIHRl c3RfbW9kdWxlX2dldF9zZXRfZW5hYmxlZCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisj aWYgVkVSU19DSEVDSygyLCA1KQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9tb2R1bGVfaW5zdGFs bAorCit2b2lkIGhlbHBlcl9tb2R1bGVfaW5zdGFsbF9pbnZhbGlkKHZvaWQpIHsKKyAgICAvLyBk aXNjb25uZWN0ZWQKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisgICAgaGVscGVyX2Rp c2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFsbChzaCwg Q0lMX1RFWFQsIHN0cmxlbihDSUxfVEVYVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENJTF9OQU1FLCBDSUxfTEFOR19FWFQpIDwgMCk7CisKKyAgICBjbGVhbnVwX2hh bmRsZShTSF9IQU5ETEUpOworCisgICAgLy8gbm90IGluIHRyYW5zYWN0aW9uCisgICAgc2V0dXBf aGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0 YWxsKHNoLCBDSUxfVEVYVCwgc3RybGVuKENJTF9URVhUKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ0lMX05BTUUsIENJTF9MQU5HX0VYVCkgPj0gMCk7CisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX21vZHVsZV9yZW1vdmUoc2gsIENJTF9OQU1FKSA+PSAwKTsKKworICAg IGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIC8vIGludmFsaWQgbmFtZQorICAgIHNl dHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2lu c3RhbGwoc2gsIENJTF9URVhULCBzdHJsZW4oQ0lMX1RFWFQpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiI2ludmFsaWQiLCBDSUxfTEFOR19FWFQpIDwgMCk7CisKKyAg ICAvLyBpbnZhbGlkIGxhbmcgZXh0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0 YWxsKHNoLCBDSUxfVEVYVCwgc3RybGVuKENJTF9URVhUKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ0lMX05BTUUsICIjaW52YWxpZCIpIDwgMCk7CisKKyAgICBjbGVh bnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKK3ZvaWQgaGVscGVyX21vZHVsZV9pbnN0YWxsX2Np bCh2b2lkKSB7CisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0YWxsKHNoLCBDSUxfVEVYVCwgc3RybGVu KENJTF9URVhUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0lMX05B TUUsIENJTF9MQU5HX0VYVCkgPj0gMCk7CisKKyAgICBoZWxwZXJfY29tbWl0KCk7CisgICAgCisg ICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChtb2R1bGVfZXhpc3RzKENJTF9OQU1FKSk7CisKKyAg ICAvLyBjbGVhbnVwCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfbW9kdWxlX3JlbW92ZShzaCwgQ0lMX05BTUUpID49IDApOworCisgICAg Y2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCit2b2lkIGhlbHBlcl9tb2R1bGVfaW5zdGFs bF9obGwodm9pZCkgeworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFsbChzaCwgSExMX0RBVEEsIEhM TF9EQVRBX0xFTiwgSExMX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhMTF9MQU5HX0VYVCkgPj0gMCk7CisKKyAgICBoZWxwZXJfY29tbWl0KCk7CisgICAgCisg ICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChtb2R1bGVfZXhpc3RzKEhMTF9OQU1FKSk7CisKKyAg ICAvLyBjbGVhbnVwCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfbW9kdWxlX3JlbW92ZShzaCwgSExMX05BTUUpID49IDApOworCisgICAg Y2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCit2b2lkIHRlc3RfbW9kdWxlX2luc3RhbGwo dm9pZCkgeworICAgIGhlbHBlcl9tb2R1bGVfaW5zdGFsbF9pbnZhbGlkKCk7CisgICAgaGVscGVy X21vZHVsZV9pbnN0YWxsX2NpbCgpOworICAgIGhlbHBlcl9tb2R1bGVfaW5zdGFsbF9obGwoKTsK K30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfZmlsZQorCit2b2lkIGhl bHBlcl9tb2R1bGVfaW5zdGFsbF9maWxlX2ludmFsaWQodm9pZCkgeworICAgIC8vIGRpc2Nvbm5l Y3RlZAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKyAgICBoZWxwZXJfZGlzY29ubmVj dCgpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0YWxsX2ZpbGUoc2gsIENJ TF9GSUxFKSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfSEFORExFKTsKKworICAgIC8v IG5vdCBpbiB0cmFuc2FjdGlvbgorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFsbF9maWxlKHNoLCBDSUxfRklMRSkgPj0g MCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9yZW1vdmUoc2gsIENJTF9OQU1FKSA+ PSAwKTsKKworICAgIC8vIG5vbmV4aXN0aW5nIG1vZHVsZQorICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfaW5zdGFsbF9maWxlKHNoLCAibm9uZXhpc3RpbmciKSA8IDApOworCisgICAgLy8g bW9kdWxlIHdpdGggaW52YWxpZCBsYW5nIGV4dAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1 bGVfaW5zdGFsbF9maWxlKHNoLCBJTlZBTElEX0ZJTEUpIDwgMCk7CisKKyAgICAvLyBjb21wcmVz c2VkIG1vZHVsZSB3aXRoIGludmFsaWQgbGFuZyBleHQKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf bW9kdWxlX2luc3RhbGxfZmlsZShzaCwgQlpJUF9JTlZBTElEX0ZJTEUpIDwgMCk7CisKKyAgICBj bGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKK3ZvaWQgaGVscGVyX21vZHVsZV9pbnN0YWxs X2ZpbGVfY2lsKHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFO Uyk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfZmlsZShzaCwgQ0lM X0ZJTEUpID49IDApOworCisgICAgaGVscGVyX2NvbW1pdCgpOworICAgIAorICAgIC8vIHRlc3QK KyAgICBDVV9BU1NFUlQobW9kdWxlX2V4aXN0cyhDSUxfTkFNRSkpOworCisgICAgLy8gY2xlYW51 cAorICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX21vZHVsZV9yZW1vdmUoc2gsIENJTF9OQU1FKSA+PSAwKTsKKworICAgIGNsZWFudXBfaGFu ZGxlKFNIX1RSQU5TKTsKK30KKwordm9pZCBoZWxwZXJfbW9kdWxlX2luc3RhbGxfZmlsZV9iemlw KHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfZmlsZShzaCwgQlpJUF9GSUxFKSA+ PSAwKTsKKworICAgIGhlbHBlcl9jb21taXQoKTsKKyAgICAKKyAgICAvLyB0ZXN0CisgICAgQ1Vf QVNTRVJUKG1vZHVsZV9leGlzdHMoQlpJUF9OQU1FKSk7CisKKyAgICAvLyBjbGVhbnVwCisgICAg aGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9k dWxlX3JlbW92ZShzaCwgQlpJUF9OQU1FKSA+PSAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNI X1RSQU5TKTsKK30KKwordm9pZCBoZWxwZXJfbW9kdWxlX2luc3RhbGxfZmlsZV9obGwodm9pZCkg eworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENVX0FT U0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFsbF9maWxlKHNoLCBITExfRklMRSkgPj0gMCk7CisK KyAgICBoZWxwZXJfY29tbWl0KCk7CisgICAgCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVCht b2R1bGVfZXhpc3RzKEhMTF9OQU1FKSk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgaGVscGVyX2Jl Z2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX3JlbW92 ZShzaCwgSExMX05BTUUpID49IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOwor fQorCit2b2lkIGhlbHBlcl9tb2R1bGVfaW5zdGFsbF9maWxlX292ZXJyaWRkZW4odm9pZCkgewor ICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9zZXRfZGVmYXVsdF9wcmlvcml0eShzaCwgNDAwKSA+PSAwKTsKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfZmlsZShzaCwgQ0lMX0ZJTEUpID49IDApOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldF9kZWZhdWx0X3ByaW9yaXR5KHNoLCAxKSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfZmlsZShzaCwgUFJJT1JJ VFlfRklMRSkgPj0gMCk7CisKKyAgICBoZWxwZXJfY29tbWl0KCk7CisgICAgCisgICAgLy8gdGVz dAorICAgIENVX0FTU0VSVCghbW9kdWxlX2V4aXN0cyhQUklPUklUWV9CT09MKSk7CisKKyAgICAv LyBjbGVhbnVwCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2Vfc2V0X2RlZmF1bHRfcHJpb3JpdHkoc2gsIDEpID49IDApOworICAgIENVX0FT U0VSVChzZW1hbmFnZV9tb2R1bGVfcmVtb3ZlKHNoLCBQUklPUklUWV9OQU1FKSA+PSAwKTsKKwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXRfZGVmYXVsdF9wcmlvcml0eShzaCwgNDAwKSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX3JlbW92ZShzaCwgQ0lMX05BTUUpID49 IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCit2b2lkIGhlbHBlcl9t b2R1bGVfaW5zdGFsbF9maWxlX292ZXJyaWRlKHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNl dHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V0X2RlZmF1 bHRfcHJpb3JpdHkoc2gsIDQwMCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVs ZV9pbnN0YWxsX2ZpbGUoc2gsIENJTF9GSUxFKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1h bmFnZV9zZXRfZGVmYXVsdF9wcmlvcml0eShzaCwgOTk5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfZmlsZShzaCwgUFJJT1JJVFlfRklMRSkgPj0gMCk7CisK KyAgICBoZWxwZXJfY29tbWl0KCk7CisgICAgCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVCht b2R1bGVfZXhpc3RzKFBSSU9SSVRZX0JPT0wpKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBoZWxw ZXJfYmVnaW5fdHJhbnNhY3Rpb24oKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXRfZGVm YXVsdF9wcmlvcml0eShzaCwgOTk5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9k dWxlX3JlbW92ZShzaCwgUFJJT1JJVFlfTkFNRSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2Vfc2V0X2RlZmF1bHRfcHJpb3JpdHkoc2gsIDQwMCkgPj0gMCk7CisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX21vZHVsZV9yZW1vdmUoc2gsIENJTF9OQU1FKSA+PSAwKTsKKworICAgIGNsZWFu dXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKwordm9pZCBoZWxwZXJfbW9kdWxlX2luc3RhbGxfZmls ZV9jb25mbGljdCh2b2lkKSB7CisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJB TlMpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0YWxsX2ZpbGUoc2gsIENJ TF9GSUxFKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFsbF9m aWxlKHNoLCBQUklPUklUWV9GSUxFKSA+PSAwKTsKKworICAgIGhlbHBlcl9jb21taXQoKTsKKyAg ICAKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKG1vZHVsZV9leGlzdHMoUFJJT1JJVFlfQk9P TCkpOworCisgICAgLy8gY2xlYW51cAorICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOwor ICAgIAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfcmVtb3ZlKHNoLCBQUklPUklUWV9O QU1FKSA+PSAwKTsKKworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKwordm9pZCB0 ZXN0X21vZHVsZV9pbnN0YWxsX2ZpbGUodm9pZCkgeworICAgIGhlbHBlcl9tb2R1bGVfaW5zdGFs bF9maWxlX2ludmFsaWQoKTsKKyAgICBoZWxwZXJfbW9kdWxlX2luc3RhbGxfZmlsZV9jaWwoKTsK KyAgICBoZWxwZXJfbW9kdWxlX2luc3RhbGxfZmlsZV9iemlwKCk7CisgICAgaGVscGVyX21vZHVs ZV9pbnN0YWxsX2ZpbGVfaGxsKCk7CisgICAgaGVscGVyX21vZHVsZV9pbnN0YWxsX2ZpbGVfb3Zl cnJpZGRlbigpOworICAgIGhlbHBlcl9tb2R1bGVfaW5zdGFsbF9maWxlX292ZXJyaWRlKCk7Cisg ICAgaGVscGVyX21vZHVsZV9pbnN0YWxsX2ZpbGVfY29uZmxpY3QoKTsKK30KKworLy8gRnVuY3Rp b24gc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfaW5mbworCit2b2lkIHRlc3RfbW9kdWxlX2luc3Rh bGxfaW5mbyh2b2lkKSB7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqbW9kaW5mbyA9IE5V TEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19jcmVhdGUoc2gsICZtb2RpbmZvKSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X3ByaW9yaXR5KHNoLCBt b2RpbmZvLCA0MDApID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19z ZXRfbmFtZShzaCwgbW9kaW5mbywgQ0lMX05BTUUpID49IDApOworICAgIENVX0FTU0VSVChzZW1h bmFnZV9tb2R1bGVfaW5mb19zZXRfbGFuZ19leHQoc2gsIG1vZGluZm8sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSUxfTEFOR19FWFQpID49IDApOwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfZW5hYmxlZChzaCwgbW9kaW5m bywgMSkgPj0gMCk7CisKKyAgICAvLyB0ZXN0IGRpc2Nvbm5lY3RlZAorICAgIGhlbHBlcl9kaXNj b25uZWN0KCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luc3RhbGxfaW5mbyhz aCwgbW9kaW5mbywgQ0lMX1RFWFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RybGVuKENJTF9URVhUKSkgPCAwKTsKKworICAgIC8vIHRlc3Qgbm90IGluIHRy YW5zYWN0aW9uCisgICAgaGVscGVyX2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfaW5zdGFsbF9pbmZvKHNoLCBtb2RpbmZvLCBDSUxfVEVYVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oQ0lMX1RFWFQpKSA+PSAwKTsK KworICAgIGhlbHBlcl9jb21taXQoKTsKKworICAgIENVX0FTU0VSVChtb2R1bGVfZXhpc3RzKENJ TF9OQU1FKSk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9u KCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9yZW1vdmUoc2gsIENJTF9OQU1FKSA+ PSAwKTsKKyAgICBoZWxwZXJfY29tbWl0KCk7CisKKyAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb19k ZXN0cm95KHNoLCBtb2RpbmZvKTsKKyAgICBmcmVlKG1vZGluZm8pOworICAgIGNsZWFudXBfaGFu ZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9tb2R1bGVfcmVtb3Zl CisvLyBUT0RPOiBmaXggbWVtb3J5IGxlYWsgaW4gc2VtYW5hZ2VfZGlyZWN0X3JlbW92ZSAobWlz c2luZworLy8gc2VtYW5hZ2VfbW9kdWxlX2tleV9mcmVlKQorCit2b2lkIHRlc3RfbW9kdWxlX3Jl bW92ZSh2b2lkKSB7CisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0YWxsX2ZpbGUoc2gsIENJTF9GSUxF KSA+PSAwKTsKKworICAgIGhlbHBlcl9jb21taXQoKTsKKworICAgIC8vIHRlc3QgZGlzY29ubmVj dGVkCisgICAgaGVscGVyX2Rpc2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9t b2R1bGVfcmVtb3ZlKHNoLCBDSUxfTkFNRSkgPCAwKTsKKworICAgIC8vIHRlc3Qgbm90IGluIHRy YW5zYWN0aW9uCisgICAgaGVscGVyX2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfcmVtb3ZlKHNoLCBDSUxfTkFNRSkgPj0gMCk7CisKKyAgICBjbGVhbnVwX2hhbmRs ZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX21vZHVsZV9yZW1vdmVfa2V5 CisKK3ZvaWQgdGVzdF9tb2R1bGVfcmVtb3ZlX2tleSh2b2lkKSB7CisgICAgc2VtYW5hZ2VfbW9k dWxlX2tleV90ICptb2RrZXkgPSBOVUxMOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5k bGUoU0hfVFJBTlMpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldF9kZWZhdWx0X3ByaW9y aXR5KHNoLCA0MDApID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFs bF9maWxlKHNoLCBDSUxfRklMRSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9k dWxlX2tleV9jcmVhdGUoc2gsICZtb2RrZXkpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBtb2RrZXksIENJTF9OQU1FKSA+PSAwKTsKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfcHJpb3JpdHkoc2gsIG1vZGtleSwgNDAw KSA+PSAwKTsKKworICAgIGhlbHBlcl9jb21taXQoKTsKKworICAgIC8vIHRlc3QgZGlzY29ubmVj dGVkCisgICAgaGVscGVyX2Rpc2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9t b2R1bGVfcmVtb3ZlX2tleShzaCwgbW9ka2V5KSA8IDApOworCisgICAgLy8gdGVzdCBub3QgaW4g dHJhbnNhY3Rpb24KKyAgICBoZWxwZXJfY29ubmVjdCgpOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX21vZHVsZV9yZW1vdmVfa2V5KHNoLCBtb2RrZXkpID49IDApOworCisgICAgaGVscGVyX2Nv bW1pdCgpOworCisgICAgc2VtYW5hZ2VfbW9kdWxlX2tleV9kZXN0cm95KHNoLCBtb2RrZXkpOwor ICAgIGZyZWUobW9ka2V5KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKwor Ly8gRnVuY3Rpb24gc2VtYW5hZ2VfbW9kdWxlX2V4dHJhY3QKKwordm9pZCBoZWxwZXJfbW9kdWxl X2V4dHJhY3RfaW52YWxpZCgpIHsKKyAgICBzZW1hbmFnZV9tb2R1bGVfa2V5X3QgKm1vZGtleSA9 IE5VTEw7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqbW9kaW5mbyA9IE5VTEw7CisgICAg dm9pZCAqbWFwcGVkX2RhdGEgPSBOVUxMOworICAgIHNpemVfdCBkYXRhX2xlbiA9IDA7CisKKyAg ICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBtb2RrZXkgPSBnZXRfbW9kdWxlX2tl eV9udGgoSV9GSVJTVCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX21vZHVsZV9l eHRyYWN0KE5VTEwsIG1vZGtleSwgMCwgJm1hcHBlZF9kYXRhLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfbGVuLCAmbW9kaW5mbyksIFNJR1NFR1Yp OworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfbW9kdWxlX2V4dHJhY3Qoc2gsIE5VTEws IDAsICZtYXBwZWRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZkYXRhX2xlbiwgJm1vZGluZm8pLCBTSUdBQlJUKTsKKyAgICBDVV9BU1NFUlRfU0lH TkFMKHNlbWFuYWdlX21vZHVsZV9leHRyYWN0KHNoLCBtb2RrZXksIDAsICZtYXBwZWRfZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX2xlbiwg TlVMTCksIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfbW9kdWxlX2V4 dHJhY3Qoc2gsIG1vZGtleSwgMCwgJm1hcHBlZF9kYXRhLCBOVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGluZm8pLCBTSUdTRUdWKTsKKyAgICBD VV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX21vZHVsZV9leHRyYWN0KHNoLCBtb2RrZXksIDAsIE5V TEwsICZkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZtb2RpbmZvKSwgU0lHU0VHVik7CisKKyAgICBoZWxwZXJfZGlzY29ubmVjdCgpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9leHRyYWN0KHNoLCBtb2RrZXksIDAsICZtYXBw ZWRfZGF0YSwgJmRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbW9kaW5mbykgPCAwKTsKKworICAgIGhlbHBlcl9jb25uZWN0KCk7CisgICAgaGVscGVyX2Jl Z2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9z ZXRfbmFtZShzaCwgbW9ka2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJteV9ub25leGlzdGluZ19tb2R1bGUiKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfbW9kdWxlX2tleV9zZXRfcHJpb3JpdHkoc2gsIG1vZGtleSwgNDAwKSA+PSAwKTsKKwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfZXh0cmFjdChzaCwgbW9ka2V5LCAwLCAmbWFw cGVkX2RhdGEsICZkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm1vZGluZm8pIDwgMCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisK K3ZvaWQgaGVscGVyX21vZHVsZV9leHRyYWN0KCkgeworICAgIHNlbWFuYWdlX21vZHVsZV9rZXlf dCAqbW9ka2V5MSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2tleV90ICptb2RrZXkyID0g TlVMTDsKKyAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb190ICptb2RpbmZvID0gTlVMTDsKKyAgICB2 b2lkICptYXBwZWRfZGF0YSA9IE5VTEw7CisgICAgc2l6ZV90IGRhdGFfbGVuID0gMDsKKyAgICBj b25zdCBjaGFyICpuYW1lID0gTlVMTDsKKyAgICB1aW50MTZfdCBwcmlvcml0eSA9IDQyOworICAg IGNvbnN0IGNoYXIgKmxhbmdfZXh0ID0gTlVMTDsKKyAgICBpbnQgZW5hYmxlZCA9IDQyOworCisg ICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX3NldF9kZWZhdWx0X3ByaW9yaXR5KHNoLCA0MDApID49IDApOworICAgIENVX0FT U0VSVChzZW1hbmFnZV9tb2R1bGVfaW5zdGFsbF9maWxlKHNoLCBDSUxfRklMRSkgPj0gMCk7Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0YWxsX2ZpbGUoc2gsIEJaSVBfRklMRSkg Pj0gMCk7CisKKyAgICBoZWxwZXJfY29tbWl0KCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf bW9kdWxlX2tleV9jcmVhdGUoc2gsICZtb2RrZXkxKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfbW9kdWxlX2tleV9zZXRfbmFtZShzaCwgbW9ka2V5MSwgQ0lMX05BTUUpID49IDApOwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0eShzaCwgbW9ka2V5 MSwgNDAwKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X2NyZWF0 ZShzaCwgJm1vZGtleTIpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5 X3NldF9uYW1lKHNoLCBtb2RrZXkyLCBCWklQX05BTUUpID49IDApOworICAgIENVX0FTU0VSVChz ZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0eShzaCwgbW9ka2V5MiwgNDAwKSA+PSAwKTsK KworICAgIC8vIHRlc3QgQ0lMIG1vZHVsZQorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVf ZXh0cmFjdChzaCwgbW9ka2V5MSwgMCwgJm1hcHBlZF9kYXRhLCAmZGF0YV9sZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtb2RpbmZvKSA+PSAwKTsKKworICAgIENV X0FTU0VSVChtYXBwZWRfZGF0YSAhPSBOVUxMKTsKKyAgICBDVV9BU1NFUlQoZGF0YV9sZW4gPT0g c3RybGVuKENJTF9URVhUKSk7CisgICAgQ1VfQVNTRVJUKG1lbWNtcChtYXBwZWRfZGF0YSwgQ0lM X1RFWFQsIGRhdGFfbGVuKSA9PSAwKTsKKworICAgIENVX0FTU0VSVChtb2RpbmZvICE9IE5VTEwp OworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2dldF9wcmlvcml0eShzaCwg bW9kaW5mbywgJnByaW9yaXR5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQocHJpb3JpdHkgPT0gNDAw KTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZ2V0X25hbWUoc2gs IG1vZGluZm8sICZuYW1lKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKG5hbWUs IENJTF9OQU1FKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZ2V0 X2xhbmdfZXh0KHNoLCBtb2RpbmZvLCAmbGFuZ19leHQpID49IDApOworICAgIENVX0FTU0VSVF9T VFJJTkdfRVFVQUwobGFuZ19leHQsIENJTF9MQU5HX0VYVCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfbW9kdWxlX2luZm9fZ2V0X2VuYWJsZWQoc2gsIG1vZGluZm8sICZlbmFibGVkKSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoZW5hYmxlZCA9PSAxKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfaW5mb19kZXN0cm95KHNoLCBtb2RpbmZvKSA+PSAwKTsKKyAgICBmcmVlKG1vZGlu Zm8pOworCisgICAgLy8gdGVzdCBjb21wcmVzc2VkIG1vZHVsZQorICAgIENVX0FTU0VSVChzZW1h bmFnZV9tb2R1bGVfZXh0cmFjdChzaCwgbW9ka2V5MiwgMSwgJm1hcHBlZF9kYXRhLCAmZGF0YV9s ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtb2RpbmZvKSA+PSAw KTsKKworICAgIENVX0FTU0VSVChtYXBwZWRfZGF0YSAhPSBOVUxMKTsKKyAgICBDVV9BU1NFUlQo ZGF0YV9sZW4gPT0gc3RybGVuKEJaSVBfVEVYVF9VTkNPTVBSRVNTRUQpKTsKKyAgICBDVV9BU1NF UlQobWVtY21wKG1hcHBlZF9kYXRhLCBCWklQX1RFWFRfVU5DT01QUkVTU0VELCBkYXRhX2xlbikg PT0gMCk7CisKKyAgICBDVV9BU1NFUlQobW9kaW5mbyAhPSBOVUxMKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfcHJpb3JpdHkoc2gsIG1vZGluZm8sICZwcmlvcml0 eSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHByaW9yaXR5ID09IDQwMCk7CisgICAgCisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2dldF9uYW1lKHNoLCBtb2RpbmZvLCAmbmFtZSkg Pj0gMCk7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChuYW1lLCBCWklQX05BTUUpOworICAg IAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfbGFuZ19leHQoc2gsIG1v ZGluZm8sICZsYW5nX2V4dCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChsYW5n X2V4dCwgQlpJUF9MQU5HX0VYVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2lu Zm9fZ2V0X2VuYWJsZWQoc2gsIG1vZGluZm8sICZlbmFibGVkKSA+PSAwKTsKKyAgICBDVV9BU1NF UlQoZW5hYmxlZCA9PSAxKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2VfbW9kdWxlX2luZm9fZGVzdHJveShzaCwgbW9kaW5mbykgPj0gMCk7CisgICAgZnJlZShtb2Rp bmZvKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKwordm9pZCB0ZXN0X21v ZHVsZV9leHRyYWN0KHZvaWQpIHsKKyAgICBoZWxwZXJfbW9kdWxlX2V4dHJhY3RfaW52YWxpZCgp OworICAgIGhlbHBlcl9tb2R1bGVfZXh0cmFjdCgpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFn ZV9tb2R1bGVfbGlzdF9hbGwsIHNlbWFuYWdlX21vZHVsZV9saXN0X250aCwKKy8vIHNlbWFuYWdl X2luZm9fZGVzdHJveQorCit2b2lkIGhlbHBlcl9tb2R1bGVfbGlzdF9hbGxfaW52YWxpZCgpIHsK KyAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb190ICpyZWNvcmRzOworICAgIGludCBjb3VudCA9IC0x OworCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworICAgIGhlbHBlcl9kaXNjb25uZWN0 KCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2xpc3RfYWxsKHNoLCAmcmVjb3Jk cywgJmNvdW50KSA8IDApOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfSEFORExFKTsKK30KKwor dm9pZCBoZWxwZXJfbW9kdWxlX2xpc3RfYWxsKGxldmVsX3QgbGV2ZWwpIHsKKyAgICBzZW1hbmFn ZV9tb2R1bGVfaW5mb190ICpyZWNvcmRzOworICAgIGludCBjb3VudCA9IC0xOworCisgICAgc2V0 dXBfaGFuZGxlKGxldmVsKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2xp c3RfYWxsKHNoLCAmcmVjb3JkcywgJmNvdW50KSA+PSAwKTsKKworICAgIC8vIFRPRE86IGNoZWNr IHJlYWwgY291bnQKKyAgICBDVV9BU1NFUlQoY291bnQgPiAwKTsKKworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb190ICpp bmZvID0gc2VtYW5hZ2VfbW9kdWxlX2xpc3RfbnRoKHJlY29yZHMsIGkpOworCisgICAgICAgIC8v IFRPRE86IGNoZWNrIHJlYWwgbmFtZXMKKyAgICAgICAgQ1VfQVNTRVJUX1NUUklOR19OT1RfRVFV QUwoc2VtYW5hZ2VfbW9kdWxlX2dldF9uYW1lKGluZm8pLCAiIik7CisgICAgICAgIAorICAgICAg ICBzZW1hbmFnZV9tb2R1bGVfaW5mb19kZXN0cm95KHNoLCBpbmZvKTsKKyAgICB9CisKKyAgICBm cmVlKHJlY29yZHMpOworCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRl c3RfbW9kdWxlX2xpc3RfYWxsKHZvaWQpIHsKKyAgICBoZWxwZXJfbW9kdWxlX2xpc3RfYWxsX2lu dmFsaWQoKTsKKyAgICBoZWxwZXJfbW9kdWxlX2xpc3RfYWxsKFNIX0NPTk5FQ1QpOworICAgIGhl bHBlcl9tb2R1bGVfbGlzdF9hbGwoU0hfVFJBTlMpOworfQorI2VuZGlmCisKKy8vIEZ1bmN0aW9u IHNlbWFuYWdlX21vZHVsZV9saXN0LCBzZW1hbmFnZV9tb2R1bGVfbGlzdF9udGgsCisvLyBzZW1h bmFnZV9pbmZvX2RhdHVtX2Rlc3Ryb3ksIHNlbWFuYWdlX2luZm9fZGVzdHJveQorCit2b2lkIGhl bHBlcl9tb2R1bGVfbGlzdF9pbnZhbGlkKCkgeworICAgIHNlbWFuYWdlX21vZHVsZV9pbmZvX3Qg KnJlY29yZHM7CisgICAgaW50IGNvdW50ID0gLTE7CisKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09O TkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZGlzY29ubmVjdChzaCkgPj0gMCk7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2xpc3Qoc2gsICZyZWNvcmRzLCAmY291bnQp IDwgMCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9IQU5ETEUpOworfQorCit2b2lkIGhlbHBl cl9tb2R1bGVfbGlzdChsZXZlbF90IGxldmVsKSB7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9f dCAqcmVjb3JkczsKKyAgICBpbnQgY291bnQgPSAtMTsKKworICAgIHNldHVwX2hhbmRsZShsZXZl bCk7CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9saXN0KHNoLCAmcmVjb3Jk cywgJmNvdW50KSA+PSAwKTsKKworICAgIC8vIFRPRE86IGNoZWNrIHJlYWwgY291bnQKKyAgICBD VV9BU1NFUlQoY291bnQgPiAwKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr KykgeworICAgICAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb190ICppbmZvID0gc2VtYW5hZ2VfbW9k dWxlX2xpc3RfbnRoKHJlY29yZHMsIGkpOworCisgICAgICAgIC8vIFRPRE86IGNoZWNrIHJlYWwg bmFtZXMKKyAgICAgICAgQ1VfQVNTRVJUX1NUUklOR19OT1RfRVFVQUwoc2VtYW5hZ2VfbW9kdWxl X2dldF9uYW1lKGluZm8pLCAiIik7CisgICAgICAgIAorI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAg ICAgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fZGVzdHJveShzaCwgaW5mbyk7CisjZWxzZQorICAg ICAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb19kYXR1bV9kZXN0cm95KGluZm8pOworI2VuZGlmCisg ICAgfQorCisgICAgZnJlZShyZWNvcmRzKTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsK K30KKwordm9pZCB0ZXN0X21vZHVsZV9saXN0KHZvaWQpIHsKKyAgICBoZWxwZXJfbW9kdWxlX2xp c3RfaW52YWxpZCgpOworICAgIAorICAgIGhlbHBlcl9tb2R1bGVfbGlzdChTSF9DT05ORUNUKTsK KyAgICBoZWxwZXJfbW9kdWxlX2xpc3QoU0hfVFJBTlMpOworfQorCisjaWYgVkVSU19DSEVDSygy LCA1KQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9tb2R1bGVfZ2V0X25hbWUKKwordm9pZCB0ZXN0 X21vZHVsZV9nZXRfbmFtZSh2b2lkKSB7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7Cisg ICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqbW9kaW5mbyA9IE5VTEw7CisKKyAgICAvLyBzZXR1 cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfaW5mb19jcmVhdGUoc2gsICZtb2RpbmZvKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X25hbWUoc2gsIG1vZGluZm8sICJtb2R1bGVfbmFtZSIp ID49IDApOworCisgICAgLy8gdGVzdAorICAgIG5hbWUgPSBzZW1hbmFnZV9tb2R1bGVfZ2V0X25h bWUobW9kaW5mbyk7CisKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKG5hbWUsICJtb2R1bGVf bmFtZSIpOworCisgICAgLy8gdGVzdCBtb2RpbmZvID09IE5VTEwKKyAgICBDVV9BU1NFUlRfU0lH TkFMKHNlbWFuYWdlX21vZHVsZV9nZXRfbmFtZShOVUxMKSwgU0lHU0VHVik7CisKKyAgICAvLyBj bGVhbnVwCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2Rlc3Ryb3koc2gsIG1v ZGluZm8pID49IDApOworICAgIGZyZWUobW9kaW5mbyk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hf Q09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX2dldF9tb2R1bGVfaW5mbworCit2 b2lkIHRlc3RfbW9kdWxlX2dldF9tb2R1bGVfaW5mbyh2b2lkKSB7CisgICAgc2VtYW5hZ2VfbW9k dWxlX2tleV90ICptb2RrZXkgPSBOVUxMOworICAgIHNlbWFuYWdlX21vZHVsZV9pbmZvX3QgKm1v ZGluZm8gPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgIHVpbnQxNl90 IHByaW9yaXR5ID0gNDI7CisKKyAgICAvLyB0ZXN0IGludmFsaWQgcGFyYW1ldGVycworICAgIENV X0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfbW9kdWxlX2dldF9tb2R1bGVfaW5mbyhOVUxMLCBOVUxM LCBOVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR0FCUlQpOworCisgICAgc2V0dXBfaGFu ZGxlKFNIX0hBTkRMRSk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX21vZHVsZV9n ZXRfbW9kdWxlX2luZm8oc2gsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICAgICAgICAgU0lH QUJSVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9jcmVhdGUoc2gsICZt b2RrZXkpID49IDApOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9tb2R1bGVfZ2V0 X21vZHVsZV9pbmZvKHNoLCBtb2RrZXksIE5VTEwpLAorICAgICAgICAgICAgICAgICAgICAgU0lH QUJSVCk7CisKKyAgICAvLyB0ZXN0IGRpc2Nvbm5lY3RlZAorICAgIGhlbHBlcl9jb25uZWN0KCk7 CisgICAgaGVscGVyX2Rpc2Nvbm5lY3QoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1 bGVfZ2V0X21vZHVsZV9pbmZvKHNoLCBtb2RrZXksICZtb2RpbmZvKSA8IDApOworCisgICAgLy8g dGVzdCBub25leGlzdGluZyBtb2R1bGUKKworICAgIGhlbHBlcl9jb25uZWN0KCk7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfbmFtZShzaCwgbW9ka2V5LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteV9ub25leGlzdGluZ19tb2R1 bGUiKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfZ2V0X21vZHVsZV9p bmZvKHNoLCBtb2RrZXksICZtb2RpbmZvKSA8IDApOworCisgICAgLy8gdGVzdCBleGlzdGluZyBt b2R1bGUKKworICAgIGhlbHBlcl9jb25uZWN0KCk7CisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0 aW9uKCk7CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbnN0YWxsX2ZpbGUo c2gsIENJTF9GSUxFKSA+PSAwKTsKKworICAgIGhlbHBlcl9jb21taXQoKTsKKworICAgIENVX0FT U0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBtb2RrZXksIENJTF9OQU1FKSA+ PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfcHJpb3JpdHkoc2gs IG1vZGtleSwgNDAwKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfZ2V0 X21vZHVsZV9pbmZvKHNoLCBtb2RrZXksICZtb2RpbmZvKSA+PSAwKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfbmFtZShzaCwgbW9kaW5mbywgJm5hbWUpID49IDAp OworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwobmFtZSwgQ0lMX05BTUUpOworCisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2dldF9wcmlvcml0eShzaCwgbW9kaW5mbywgJnBy aW9yaXR5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQocHJpb3JpdHkgPT0gNDAwKTsKKworICAgIGhl bHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVs ZV9yZW1vdmUoc2gsIENJTF9OQU1FKSA+PSAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1h bmFnZV9tb2R1bGVfa2V5X2Rlc3Ryb3koc2gsIG1vZGtleSk7CisgICAgZnJlZShtb2RrZXkpOwor ICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vf bW9kdWxlX2dldF9uYW1lLCBzZW1hbmFnZV9tb2R1bGVfaW5mb19kZXN0cm95CisKK3ZvaWQgaGVs cGVyX21vZHVsZV9pbmZvX2NyZWF0ZShsZXZlbF90IGxldmVsKSB7CisgICAgc2VtYW5hZ2VfbW9k dWxlX2luZm9fdCAqbW9kaW5mbzsKKyAgICB1aW50MTZfdCBwcmlvcml0eSA9IDQyOworICAgIGNv bnN0IGNoYXIgKm5hbWUgPSAiYXNkZiI7CisgICAgY29uc3QgY2hhciAqbGFuZ19leHQgPSAiYXNk ZiI7CisgICAgaW50IGVuYWJsZWQgPSA0MjsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fY3JlYXRlKHNoLCAmbW9kaW5mbykg Pj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZ2V0X3ByaW9yaXR5 KHNoLCBtb2RpbmZvLCAmcHJpb3JpdHkpID49IDApOworICAgIENVX0FTU0VSVChwcmlvcml0eSA9 PSAwKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZ2V0X25hbWUo c2gsIG1vZGluZm8sICZuYW1lKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQobmFtZSA9PSBOVUxMKTsK KyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZ2V0X2xhbmdfZXh0KHNo LCBtb2RpbmZvLCAmbGFuZ19leHQpID49IDApOworICAgIENVX0FTU0VSVChsYW5nX2V4dCA9PSBO VUxMKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfZW5hYmxlZChz aCwgbW9kaW5mbywgJmVuYWJsZWQpID49IDApOworICAgIENVX0FTU0VSVChlbmFibGVkID09IC0x KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19kZXN0cm95KHNoLCBtb2Rp bmZvKSA+PSAwKTsKKyAgICBmcmVlKG1vZGluZm8pOworCisgICAgY2xlYW51cF9oYW5kbGUobGV2 ZWwpOworfQorCit2b2lkIHRlc3RfbW9kdWxlX2luZm9fY3JlYXRlKHZvaWQpIHsKKyAgICBoZWxw ZXJfbW9kdWxlX2luZm9fY3JlYXRlKFNIX0NPTk5FQ1QpOworICAgIGhlbHBlcl9tb2R1bGVfaW5m b19jcmVhdGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9tb2R1bGVfaW5m b19nZXRfcHJpb3JpdHksCisvLyBzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfcHJpb3JpdHkKKwor dm9pZCBoZWxwZXJfbW9kdWxlX2luZm9fZ2V0X3NldF9wcmlvcml0eV9pbnZhbGlkKCkgeworICAg IHNlbWFuYWdlX21vZHVsZV9pbmZvX3QgKm1vZGluZm8gPSBOVUxMOworCisgICAgLy8gc2V0dXAK KyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf bW9kdWxlX2luZm9fY3JlYXRlKHNoLCAmbW9kaW5mbykgPj0gMCk7CisKKyAgICAvLyB0ZXN0Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX3NldF9wcmlvcml0eShzaCwgbW9kaW5m bywgLTQyKSA8IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfcHJp b3JpdHkoc2gsIG1vZGluZm8sIC0xKSA8IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1 bGVfaW5mb19zZXRfcHJpb3JpdHkoc2gsIG1vZGluZm8sIDApIDwgMCk7CisKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X3ByaW9yaXR5KHNoLCBtb2RpbmZvLCAxKSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X3ByaW9yaXR5KHNoLCBt b2RpbmZvLCAxMjMpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19z ZXRfcHJpb3JpdHkoc2gsIG1vZGluZm8sIDk5OSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfbW9kdWxlX2luZm9fc2V0X3ByaW9yaXR5KHNoLCBtb2RpbmZvLCAxMDAwKSA8IDApOwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfcHJpb3JpdHkoc2gsIG1vZGlu Zm8sIDEyMzQpIDwgMCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X21vZHVsZV9pbmZvX2Rlc3Ryb3koc2gsIG1vZGluZm8pID49IDApOworICAgIGZyZWUobW9kaW5m byk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKK3ZvaWQgaGVscGVyX21v ZHVsZV9pbmZvX2dldF9zZXRfcHJpb3JpdHkoKSB7CisgICAgdWludDE2X3QgcHJpb3JpdHkgPSA0 MjsKKyAgICBzZW1hbmFnZV9tb2R1bGVfaW5mb190ICptb2RpbmZvID0gTlVMTDsKKworICAgIC8v IHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNl bWFuYWdlX21vZHVsZV9pbmZvX2NyZWF0ZShzaCwgJm1vZGluZm8pID49IDApOworCisgICAgLy8g dGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfcHJpb3JpdHkoc2gs IG1vZGluZm8sIDEyMykgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2lu Zm9fZ2V0X3ByaW9yaXR5KHNoLCBtb2RpbmZvLCAmcHJpb3JpdHkpID49IDApOworICAgIENVX0FT U0VSVChwcmlvcml0eSA9PSAxMjMpOworCisgICAgLy8gY2xlYW51cAorICAgIENVX0FTU0VSVChz ZW1hbmFnZV9tb2R1bGVfaW5mb19kZXN0cm95KHNoLCBtb2RpbmZvKSA+PSAwKTsKKyAgICBmcmVl KG1vZGluZm8pOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCit2b2lkIHRl c3RfbW9kdWxlX2luZm9fZ2V0X3NldF9wcmlvcml0eSh2b2lkKSB7CisgICAgaGVscGVyX21vZHVs ZV9pbmZvX2dldF9zZXRfcHJpb3JpdHlfaW52YWxpZCgpOworICAgIGhlbHBlcl9tb2R1bGVfaW5m b19nZXRfc2V0X3ByaW9yaXR5KCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX21vZHVsZV9p bmZvX2dldF9uYW1lLCBzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfbmFtZQorCit2b2lkIGhlbHBl cl9tb2R1bGVfaW5mb19nZXRfc2V0X25hbWVfaW52YWxpZCgpIHsKKyAgICBzZW1hbmFnZV9tb2R1 bGVfaW5mb190ICptb2RpbmZvID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFu ZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2Ny ZWF0ZShzaCwgJm1vZGluZm8pID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVF9T SUdOQUwoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X25hbWUoc2gsIG1vZGluZm8sIE5VTEwpLCBT SUdBQlJUKTsgCisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X25hbWUo c2gsIG1vZGluZm8sICIiKSA8IDApOyAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2lu Zm9fc2V0X25hbWUoc2gsIG1vZGluZm8sICI0YXNkZiIpIDwgMCk7IAorICAgIENVX0FTU0VSVChz ZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfbmFtZShzaCwgbW9kaW5mbywgImFzZGYlIikgPCAwKTsg CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX3NldF9uYW1lKHNoLCBtb2RpbmZv LCAiYXNkZi4iKSA8IDApOyAKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19z ZXRfbmFtZShzaCwgbW9kaW5mbywgImEiKSA+PSAwKTsgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X21vZHVsZV9pbmZvX3NldF9uYW1lKHNoLCBtb2RpbmZvLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiYXNkZl9hc2RmLTEyMzQuYXNkZi5hc2RmIikgPj0gMCk7 IAorCisgICAgLy8gY2xlYW51cAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19k ZXN0cm95KHNoLCBtb2RpbmZvKSA+PSAwKTsKKyAgICBmcmVlKG1vZGluZm8pOworICAgIGNsZWFu dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCit2b2lkIGhlbHBlcl9tb2R1bGVfaW5mb19nZXRf c2V0X25hbWUoKSB7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgc2VtYW5hZ2Vf bW9kdWxlX2luZm9fdCAqbW9kaW5mbyA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVw X2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5m b19jcmVhdGUoc2gsICZtb2RpbmZvKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X25hbWUoc2gsIG1vZGluZm8sICJhc2RmIikgPj0g MCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZ2V0X25hbWUoc2gsIG1v ZGluZm8sICZuYW1lKSA+PSAwKTsgCisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChuYW1lLCAi YXNkZiIpOworCisgICAgLy8gY2xlYW51cAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVf aW5mb19kZXN0cm95KHNoLCBtb2RpbmZvKSA+PSAwKTsKKyAgICBmcmVlKG1vZGluZm8pOworICAg IGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCit2b2lkIHRlc3RfbW9kdWxlX2luZm9f Z2V0X3NldF9uYW1lKHZvaWQpIHsKKyAgICBoZWxwZXJfbW9kdWxlX2luZm9fZ2V0X3NldF9uYW1l X2ludmFsaWQoKTsKKyAgICBoZWxwZXJfbW9kdWxlX2luZm9fZ2V0X3NldF9uYW1lKCk7Cit9CisK Ky8vIEZ1bmN0aW9uIHNlbWFuYWdlX21vZHVsZV9pbmZvX2dldF9sYW5nX2V4dCwKKy8vIHNlbWFu YWdlX21vZHVsZV9pbmZvX3NldF9sYW5nX2V4dAorCit2b2lkIGhlbHBlcl9tb2R1bGVfaW5mb19n ZXRfc2V0X2xhbmdfZXh0X2ludmFsaWQoKSB7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAq bW9kaW5mbyA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05O RUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19jcmVhdGUoc2gsICZt b2RpbmZvKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFu YWdlX21vZHVsZV9pbmZvX3NldF9sYW5nX2V4dChzaCwgbW9kaW5mbywgTlVMTCksCisgICAgICAg ICAgICAgICAgICAgICBTSUdBQlJUKTsgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9p bmZvX3NldF9sYW5nX2V4dChzaCwgbW9kaW5mbywgIiIpIDwgMCk7IAorICAgIENVX0FTU0VSVChz ZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfbGFuZ19leHQoc2gsIG1vZGluZm8sICJfYXNkZiIpIDwg MCk7IAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfbGFuZ19leHQoc2gs IG1vZGluZm8sICJhI2FzZGYiKSA8IDApOyAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxl X2luZm9fc2V0X2xhbmdfZXh0KHNoLCBtb2RpbmZvLCAiYXMjYXNkZiIpIDwgMCk7IAorICAgIENV X0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfbGFuZ19leHQoc2gsIG1vZGluZm8sICJh c2RmIyIpIDwgMCk7IAorCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX3NldF9s YW5nX2V4dChzaCwgbW9kaW5mbywgImEiKSA+PSAwKTsgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X21vZHVsZV9pbmZvX3NldF9sYW5nX2V4dChzaCwgbW9kaW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc2RmLTEyMzRfQVNERiIpID49IDApOyAK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X2xhbmdfZXh0KHNoLCBtb2Rp bmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEy MzRfYXNkZi1BU0RGIikgPj0gMCk7IAorICAgIAorICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fZGVzdHJveShzaCwgbW9kaW5mbykgPj0gMCk7CisgICAg ZnJlZShtb2RpbmZvKTsKKyAgICAKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30K Kwordm9pZCBoZWxwZXJfbW9kdWxlX2luZm9fZ2V0X3NldF9sYW5nX2V4dCgpIHsKKyAgICBjb25z dCBjaGFyICpsYW5nX2V4dCA9IE5VTEw7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqbW9k aW5mbyA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNU KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19jcmVhdGUoc2gsICZtb2Rp bmZvKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxl X2luZm9fc2V0X2xhbmdfZXh0KHNoLCBtb2RpbmZvLCAiYXNkZiIpID49IDApOyAKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfbGFuZ19leHQoc2gsIG1vZGluZm8sICZs YW5nX2V4dCkgPj0gMCk7IAorCisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChsYW5nX2V4dCwg ImFzZGYiKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxl X2luZm9fZGVzdHJveShzaCwgbW9kaW5mbykgPj0gMCk7CisgICAgZnJlZShtb2RpbmZvKTsKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKwordm9pZCB0ZXN0X21vZHVsZV9pbmZv X2dldF9zZXRfbGFuZ19leHQodm9pZCkgeworICAgIGhlbHBlcl9tb2R1bGVfaW5mb19nZXRfc2V0 X2xhbmdfZXh0X2ludmFsaWQoKTsKKyAgICBoZWxwZXJfbW9kdWxlX2luZm9fZ2V0X3NldF9sYW5n X2V4dCgpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfZW5hYmxl ZCwgc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X2VuYWJsZWQKKwordm9pZCBoZWxwZXJfbW9kdWxl X2luZm9fZ2V0X3NldF9lbmFibGVkX2ludmFsaWQoKSB7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2lu Zm9fdCAqbW9kaW5mbyA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShT SF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19jcmVhdGUo c2gsICZtb2RpbmZvKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2VfbW9kdWxlX2luZm9fc2V0X2VuYWJsZWQoc2gsIG1vZGluZm8sIC0xMjMpIDwgMCk7IAorICAg IENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfZW5hYmxlZChzaCwgbW9kaW5mbywg LTIpIDwgMCk7IAorICAgIAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRf ZW5hYmxlZChzaCwgbW9kaW5mbywgLTEpID49IDApOyAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf bW9kdWxlX2luZm9fc2V0X2VuYWJsZWQoc2gsIG1vZGluZm8sIDApID49IDApOyAKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2luZm9fc2V0X2VuYWJsZWQoc2gsIG1vZGluZm8sIDEpID49 IDApOyAKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfZW5hYmxlZChz aCwgbW9kaW5mbywgMikgPCAwKTsgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZv X3NldF9lbmFibGVkKHNoLCBtb2RpbmZvLCAxMjMpIDwgMCk7IAorCisgICAgLy8gY2xlYW51cAor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19kZXN0cm95KHNoLCBtb2RpbmZvKSA+ PSAwKTsKKyAgICBmcmVlKG1vZGluZm8pOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1Qp OworfQorCit2b2lkIGhlbHBlcl9tb2R1bGVfaW5mb19nZXRfc2V0X2VuYWJsZWQoKSB7CisgICAg aW50IGVuYWJsZWQ7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqbW9kaW5mbyA9IE5VTEw7 CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19jcmVhdGUoc2gsICZtb2RpbmZvKSA+PSAwKTsK KworICAgIC8vIHRlc3QgZW5hYmxlZCA9PSAwCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVs ZV9pbmZvX3NldF9lbmFibGVkKHNoLCBtb2RpbmZvLCAwKSA+PSAwKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9tb2R1bGVfaW5mb19nZXRfZW5hYmxlZChzaCwgbW9kaW5mbywgJmVuYWJsZWQp ID49IDApOyAKKyAgICBDVV9BU1NFUlQoZW5hYmxlZCA9PSAwKTsKKworICAgIC8vIHRlc3QgZW5h YmxlZCA9PSAxCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX3NldF9lbmFibGVk KHNoLCBtb2RpbmZvLCAxKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVf aW5mb19nZXRfZW5hYmxlZChzaCwgbW9kaW5mbywgJmVuYWJsZWQpID49IDApOyAKKyAgICBDVV9B U1NFUlQoZW5hYmxlZCA9PSAxKTsKKworICAgIC8vIHRlc3QgZW5hYmxlZCA9PSAtMQorICAgIENV X0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfZW5hYmxlZChzaCwgbW9kaW5mbywgLTEp ID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9pbmZvX2dldF9lbmFibGVk KHNoLCBtb2RpbmZvLCAmZW5hYmxlZCkgPj0gMCk7IAorICAgIENVX0FTU0VSVChlbmFibGVkID09 IC0xKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2lu Zm9fZGVzdHJveShzaCwgbW9kaW5mbykgPj0gMCk7CisgICAgZnJlZShtb2RpbmZvKTsKKyAgICBj bGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKwordm9pZCB0ZXN0X21vZHVsZV9pbmZvX2dl dF9zZXRfZW5hYmxlZCh2b2lkKSB7CisgICAgaGVscGVyX21vZHVsZV9pbmZvX2dldF9zZXRfZW5h YmxlZF9pbnZhbGlkKCk7CisgICAgaGVscGVyX21vZHVsZV9pbmZvX2dldF9zZXRfZW5hYmxlZCgp OworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9tb2R1bGVfa2V5X2NyZWF0ZSwgc2VtYW5hZ2Vf bW9kdWxlX2tleV9kZXN0cm95CisKK3ZvaWQgaGVscGVyX21vZHVsZV9rZXlfY3JlYXRlKGxldmVs X3QgbGV2ZWwpIHsKKyAgICBzZW1hbmFnZV9tb2R1bGVfa2V5X3QgKm1vZGtleSA9IE5VTEw7Cisg ICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgdWludDE2X3QgcHJpb3JpdHkgPSA0MjsK KworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9k dWxlX2tleV9jcmVhdGUoc2gsICZtb2RrZXkpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX21vZHVsZV9rZXlfZ2V0X25hbWUoc2gsIG1vZGtleSwgJm5hbWUpID49IDApOworICAgIENV X0FTU0VSVChuYW1lID09IE5VTEwpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9r ZXlfZ2V0X3ByaW9yaXR5KHNoLCBtb2RrZXksICZwcmlvcml0eSkgPj0gMCk7CisgICAgQ1VfQVNT RVJUKHByaW9yaXR5ID09IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9rZXlf ZGVzdHJveShzaCwgbW9ka2V5KSA+PSAwKTsKKyAgICBmcmVlKG1vZGtleSk7CisKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9kZXN0cm95KHNoLCBOVUxMKSA+PSAwKTsKKworICAg IGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X21vZHVsZV9rZXlfY3JlYXRl KHZvaWQpIHsKKyAgICBoZWxwZXJfbW9kdWxlX2tleV9jcmVhdGUoU0hfQ09OTkVDVCk7CisgICAg aGVscGVyX21vZHVsZV9rZXlfY3JlYXRlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2Vt YW5hZ2VfbW9kdWxlX2tleV9nZXRfbmFtZSwgc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfbmFtZQor Cit2b2lkIGhlbHBlcl9tb2R1bGVfa2V5X2dldF9zZXRfbmFtZV9pbnZhbGlkKGxldmVsX3QgbGV2 ZWwpIHsKKyAgICBzZW1hbmFnZV9tb2R1bGVfa2V5X3QgKm1vZGtleSA9IE5VTEw7CisKKyAgICAv LyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2VfbW9kdWxlX2tleV9jcmVhdGUoc2gsICZtb2RrZXkpID49IDApOworCisgICAgLy8gdGVzdAor ICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfbmFtZShzaCwgbW9k a2V5LCBOVUxMKSwgU0lHQUJSVCk7IAorCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9r ZXlfc2V0X25hbWUoc2gsIG1vZGtleSwgIiIpIDwgMCk7IAorICAgIENVX0FTU0VSVChzZW1hbmFn ZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBtb2RrZXksICI0YXNkZiIpIDwgMCk7IAorICAgIENV X0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBtb2RrZXksICJhc2RmJSIp IDwgMCk7IAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBt b2RrZXksICJhc2RmLiIpIDwgMCk7IAorCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9r ZXlfc2V0X25hbWUoc2gsIG1vZGtleSwgImEiKSA+PSAwKTsgCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX21vZHVsZV9rZXlfc2V0X25hbWUoc2gsIG1vZGtleSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiYXNkZl9hc2RmLTEyMzQuYXNkZi5hc2RmIikgPj0gMCk7 IAorCisgICAgLy8gY2xlYW51cAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X2Rl c3Ryb3koc2gsIG1vZGtleSkgPj0gMCk7CisgICAgZnJlZShtb2RrZXkpOworCisgICAgY2xlYW51 cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIGhlbHBlcl9tb2R1bGVfa2V5X2dldF9zZXRfbmFt ZShsZXZlbF90IGxldmVsKSB7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2tleV90ICptb2RrZXk7Cisg ICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9rZXlfY3JlYXRlKHNoLCAmbW9ka2V5KSA+ PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9uYW1lKHNoLCBt b2RrZXksICJhc2RmIikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tl eV9nZXRfbmFtZShzaCwgbW9ka2V5LCAmbmFtZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQobmFt ZSAhPSBOVUxMKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKG5hbWUsICJhc2RmIik7Cisg ICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9rZXlfZGVzdHJveShzaCwgbW9ka2V5 KSA+PSAwKTsKKyAgICBmcmVlKG1vZGtleSk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7 Cit9CisKK3ZvaWQgdGVzdF9tb2R1bGVfa2V5X2dldF9zZXRfbmFtZSh2b2lkKSB7CisgICAgaGVs cGVyX21vZHVsZV9rZXlfZ2V0X3NldF9uYW1lX2ludmFsaWQoU0hfQ09OTkVDVCk7CisgICAgaGVs cGVyX21vZHVsZV9rZXlfZ2V0X3NldF9uYW1lKFNIX0NPTk5FQ1QpOworICAgIGhlbHBlcl9tb2R1 bGVfa2V5X2dldF9zZXRfbmFtZShTSF9DT05ORUNUKTsKKworICAgIGhlbHBlcl9tb2R1bGVfa2V5 X2dldF9zZXRfbmFtZV9pbnZhbGlkKFNIX1RSQU5TKTsKKyAgICBoZWxwZXJfbW9kdWxlX2tleV9n ZXRfc2V0X25hbWUoU0hfVFJBTlMpOworICAgIGhlbHBlcl9tb2R1bGVfa2V5X2dldF9zZXRfbmFt ZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX21vZHVsZV9rZXlfZ2V0X3By aW9yaXR5LCBzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0eQorCit2b2lkIGhlbHBlcl9t b2R1bGVfa2V5X2dldF9zZXRfcHJpb3JpdHlfaW52YWxpZChsZXZlbF90IGxldmVsKSB7CisgICAg c2VtYW5hZ2VfbW9kdWxlX2tleV90ICptb2RrZXkgPSBOVUxMOworCisgICAgc2V0dXBfaGFuZGxl KGxldmVsKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X2NyZWF0ZShzaCwg Jm1vZGtleSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRf cHJpb3JpdHkoc2gsIG1vZGtleSwgLTQyKSA8IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9t b2R1bGVfa2V5X3NldF9wcmlvcml0eShzaCwgbW9ka2V5LCAtMSkgPCAwKTsKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfcHJpb3JpdHkoc2gsIG1vZGtleSwgMCkgPCAwKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0eShzaCwgbW9k a2V5LCAxKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX2tleV9zZXRfcHJp b3JpdHkoc2gsIG1vZGtleSwgMTIzKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9k dWxlX2tleV9zZXRfcHJpb3JpdHkoc2gsIG1vZGtleSwgOTk5KSA+PSAwKTsKKworICAgIENVX0FT U0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0eShzaCwgbW9ka2V5LCAxMDAwKSA8 IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0eShzaCwg bW9ka2V5LCAxMjM0KSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9rZXlf ZGVzdHJveShzaCwgbW9ka2V5KSA+PSAwKTsKKyAgICBmcmVlKG1vZGtleSk7CisgICAgY2xlYW51 cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIGhlbHBlcl9tb2R1bGVfa2V5X2dldF9zZXRfcHJp b3JpdHkobGV2ZWxfdCBsZXZlbCkgeworICAgIHNlbWFuYWdlX21vZHVsZV9rZXlfdCAqbW9ka2V5 OworICAgIHVpbnQxNl90IHByaW9yaXR5ID0gNDI7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwp OworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9rZXlfY3JlYXRlKHNoLCAmbW9ka2V5 KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfa2V5X3NldF9wcmlvcml0 eShzaCwgbW9ka2V5LCAyMDApID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVs ZV9rZXlfZ2V0X3ByaW9yaXR5KHNoLCBtb2RrZXksICZwcmlvcml0eSkgPj0gMCk7CisKKyAgICBD VV9BU1NFUlQocHJpb3JpdHkgPT0gMjAwKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf bW9kdWxlX2tleV9kZXN0cm95KHNoLCBtb2RrZXkpID49IDApOworICAgIGZyZWUobW9ka2V5KTsK KworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X21vZHVsZV9rZXlf Z2V0X3NldF9wcmlvcml0eSh2b2lkKSB7CisgICAgaGVscGVyX21vZHVsZV9rZXlfZ2V0X3NldF9w cmlvcml0eV9pbnZhbGlkKFNIX0NPTk5FQ1QpOworICAgIGhlbHBlcl9tb2R1bGVfa2V5X2dldF9z ZXRfcHJpb3JpdHkoU0hfQ09OTkVDVCk7CisgICAgaGVscGVyX21vZHVsZV9rZXlfZ2V0X3NldF9w cmlvcml0eShTSF9DT05ORUNUKTsKKworICAgIGhlbHBlcl9tb2R1bGVfa2V5X2dldF9zZXRfcHJp b3JpdHlfaW52YWxpZChTSF9UUkFOUyk7CisgICAgaGVscGVyX21vZHVsZV9rZXlfZ2V0X3NldF9w cmlvcml0eShTSF9UUkFOUyk7CisgICAgaGVscGVyX21vZHVsZV9rZXlfZ2V0X3NldF9wcmlvcml0 eShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX21vZHVsZV9nZXRfZW5hYmxl ZCwgc2VtYW5hZ2VfbW9kdWxlX3NldF9lbmFibGVkCisKK3ZvaWQgaGVscGVyX21vZHVsZV9nZXRf c2V0X2VuYWJsZWQobGV2ZWxfdCBsZXZlbCwgaW50IGluZGV4KSB7CisgICAgc2VtYW5hZ2VfbW9k dWxlX2tleV90ICptb2RrZXkgPSBOVUxMOworICAgIGludCBlbmFibGVkX29sZCA9IDQyOworICAg IGludCBlbmFibGVkX25ldyA9IDQyOworICAgIGludCBlbmFibGVkID0gNDI7CisKKyAgICBzZXR1 cF9oYW5kbGUobGV2ZWwpOworCisgICAgbW9ka2V5ID0gZ2V0X21vZHVsZV9rZXlfbnRoKGluZGV4 KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfZ2V0X2VuYWJsZWQoc2gsIG1vZGtl eSwgJmVuYWJsZWRfb2xkKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChlbmFibGVkX29sZCA9PSAw IHx8IGVuYWJsZWRfb2xkID09IDEpOworCisgICAgZW5hYmxlZF9uZXcgPSAhZW5hYmxlZF9vbGQ7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfbW9kdWxlX3NldF9lbmFibGVkKHNoLCBtb2RrZXks IGVuYWJsZWRfbmV3KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9tb2R1bGVfZ2V0 X2VuYWJsZWQoc2gsIG1vZGtleSwgJmVuYWJsZWQpID49IDApOworCisgICAgQ1VfQVNTRVJUKGVu YWJsZWQgPT0gZW5hYmxlZF9uZXcpOworCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQor Cit2b2lkIHRlc3RfbW9kdWxlX2dldF9zZXRfZW5hYmxlZCh2b2lkKSB7CisgICAgaGVscGVyX21v ZHVsZV9nZXRfc2V0X2VuYWJsZWQoU0hfQ09OTkVDVCwgSV9GSVJTVCk7CisgICAgaGVscGVyX21v ZHVsZV9nZXRfc2V0X2VuYWJsZWQoU0hfVFJBTlMsIElfRklSU1QpOworfQorCisjZW5kaWYKCmRp ZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9tb2R1bGUuaCBi L2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X21vZHVsZS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2E4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJz ZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9tb2R1bGUuaApAQCAtMCwwICsxLDQyIEBA CisjaWZuZGVmIF9fVEVTVF9NT0RVTEVfSF9fCisjZGVmaW5lIF9fVEVTVF9NT0RVTEVfSF9fCisK KyNpbmNsdWRlIDxDVW5pdC9CYXNpYy5oPgorCisjaW5jbHVkZSAiZnVuY3Rpb25zLmgiCisKK2lu dCBtb2R1bGVfdGVzdF9pbml0KHZvaWQpOworaW50IG1vZHVsZV90ZXN0X2NsZWFudXAodm9pZCk7 CitpbnQgbW9kdWxlX2FkZF90ZXN0cyhDVV9wU3VpdGUgc3VpdGUpOworCisvLyBtb2R1bGVzLmgK Kwordm9pZCB0ZXN0X21vZHVsZV9saXN0KHZvaWQpOworCisjaWYgVkVSU19DSEVDSygyLCA1KQor dm9pZCB0ZXN0X21vZHVsZV9pbnN0YWxsKHZvaWQpOwordm9pZCB0ZXN0X21vZHVsZV9pbnN0YWxs X2ZpbGUodm9pZCk7Cit2b2lkIHRlc3RfbW9kdWxlX2luc3RhbGxfaW5mbyh2b2lkKTsKK3ZvaWQg dGVzdF9tb2R1bGVfcmVtb3ZlKHZvaWQpOwordm9pZCB0ZXN0X21vZHVsZV9yZW1vdmVfa2V5KHZv aWQpOworCit2b2lkIHRlc3RfbW9kdWxlX2V4dHJhY3Qodm9pZCk7Cit2b2lkIHRlc3RfbW9kdWxl X2xpc3RfYWxsKHZvaWQpOworCit2b2lkIHRlc3RfbW9kdWxlX2dldF9uYW1lKHZvaWQpOwordm9p ZCB0ZXN0X21vZHVsZV9nZXRfbW9kdWxlX2luZm8odm9pZCk7CisKK3ZvaWQgdGVzdF9tb2R1bGVf aW5mb19jcmVhdGUodm9pZCk7Cit2b2lkIHRlc3RfbW9kdWxlX2luZm9fZ2V0X3NldF9wcmlvcml0 eSh2b2lkKTsKK3ZvaWQgdGVzdF9tb2R1bGVfaW5mb19nZXRfc2V0X25hbWUodm9pZCk7Cit2b2lk IHRlc3RfbW9kdWxlX2luZm9fZ2V0X3NldF9sYW5nX2V4dCh2b2lkKTsKK3ZvaWQgdGVzdF9tb2R1 bGVfaW5mb19nZXRfc2V0X2VuYWJsZWQodm9pZCk7CisKK3ZvaWQgdGVzdF9tb2R1bGVfa2V5X2Ny ZWF0ZSh2b2lkKTsKK3ZvaWQgdGVzdF9tb2R1bGVfa2V5X2dldF9zZXRfbmFtZSh2b2lkKTsKK3Zv aWQgdGVzdF9tb2R1bGVfa2V5X2dldF9zZXRfcHJpb3JpdHkodm9pZCk7Cit2b2lkIHRlc3RfbW9k dWxlX2dldF9zZXRfZW5hYmxlZCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYKKwoKZGlmZiAtLWdp dCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X25vZGUuYyBiL2xpYnNlbWFu YWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X25vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5jOWMyYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2Fu aXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfbm9kZS5jCkBAIC0wLDAgKzEsNjk3IEBACisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9zZW1hbmFnZS5oPgorI2luY2x1ZGUgPHNlbWFu YWdlL2hhbmRsZS5oPgorI2luY2x1ZGUgPENVbml0L0Jhc2ljLmg+CisKKyNpbmNsdWRlICJ0ZXN0 X25vZGUuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKworZXh0ZXJuIHNlbWFuYWdlX2hhbmRs ZV90ICpzaDsKKworLy8gVE9ETzogY3VycmVudCBwb2xpY2llcyBkb2VzIG5vdCBoYXZlIGFueSBu b2RlY29uIHJ1bGVzCisjZGVmaW5lIE5PREVfQ09VTlQgMAorCitpbnQgbm9kZV90ZXN0X2luaXQo dm9pZCkgeworICAgIHJldHVybiAwOworfQorCitpbnQgbm9kZV90ZXN0X2NsZWFudXAodm9pZCkg eworICAgIHJldHVybiAwOworfQorCitpbnQgbm9kZV9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1aXRl KSB7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJub2RlX2NvbXBhcmUiLCB0ZXN0X25vZGVfY29t cGFyZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJub2RlX2NvbXBhcmUyIiwgdGVzdF9ub2Rl X2NvbXBhcmUyKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm5vZGVfa2V5X2NyZWF0ZSIsIHRl c3Rfbm9kZV9rZXlfY3JlYXRlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm5vZGVfa2V5X2V4 dHJhY3QiLCB0ZXN0X25vZGVfa2V5X2V4dHJhY3QpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAi bm9kZV9nZXRfc2V0X2FkZHIiLCB0ZXN0X25vZGVfZ2V0X3NldF9hZGRyKTsKKyAgICBDVV9hZGRf dGVzdChzdWl0ZSwgIm5vZGVfZ2V0X3NldF9hZGRyX2J5dGVzIiwgdGVzdF9ub2RlX2dldF9zZXRf YWRkcl9ieXRlcyk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJub2RlX2dldF9zZXRfbWFzayIs IHRlc3Rfbm9kZV9nZXRfc2V0X21hc2spOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAibm9kZV9n ZXRfc2V0X21hc2tfYnl0ZXMiLCB0ZXN0X25vZGVfZ2V0X3NldF9tYXNrX2J5dGVzKTsKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgIm5vZGVfZ2V0X3NldF9wcm90byIsIHRlc3Rfbm9kZV9nZXRfc2V0 X3Byb3RvKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm5vZGVfZ2V0X3Byb3RvX3N0ciIsIHRl c3Rfbm9kZV9nZXRfcHJvdG9fc3RyKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgIm5vZGVfZ2V0 X3NldF9jb24iLCB0ZXN0X25vZGVfZ2V0X3NldF9jb24pOworICAgIENVX2FkZF90ZXN0KHN1aXRl LCAibm9kZV9jcmVhdGUiLCB0ZXN0X25vZGVfY3JlYXRlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgIm5vZGVfY2xvbmUiLCB0ZXN0X25vZGVfY2xvbmUpOworCisgICAgQ1VfYWRkX3Rlc3Qoc3Vp dGUsICJub2RlX3F1ZXJ5IiwgdGVzdF9ub2RlX3F1ZXJ5KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgIm5vZGVfZXhpc3RzIiwgdGVzdF9ub2RlX2V4aXN0cyk7CisgICAgQ1VfYWRkX3Rlc3Qoc3Vp dGUsICJub2RlX2NvdW50IiwgdGVzdF9ub2RlX2NvdW50KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0 ZSwgIm5vZGVfaXRlcmF0ZSIsIHRlc3Rfbm9kZV9pdGVyYXRlKTsKKyAgICBDVV9hZGRfdGVzdChz dWl0ZSwgIm5vZGVfbGlzdCIsIHRlc3Rfbm9kZV9saXN0KTsKKworICAgIENVX2FkZF90ZXN0KHN1 aXRlLCAibm9kZV9tb2RpZnlfZGVsX3F1ZXJ5X2xvY2FsIiwKKyAgICAgICAgICAgICAgICB0ZXN0 X25vZGVfbW9kaWZ5X2RlbF9xdWVyeV9sb2NhbCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJu b2RlX2V4aXN0c19sb2NhbCIsIHRlc3Rfbm9kZV9leGlzdHNfbG9jYWwpOworICAgIENVX2FkZF90 ZXN0KHN1aXRlLCAibm9kZV9jb3VudF9sb2NhbCIsIHRlc3Rfbm9kZV9jb3VudF9sb2NhbCk7Cisg ICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJub2RlX2l0ZXJhdGVfbG9jYWwiLCB0ZXN0X25vZGVfaXRl cmF0ZV9sb2NhbCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJub2RlX2xpc3RfbG9jYWwiLCB0 ZXN0X25vZGVfbGlzdF9sb2NhbCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gRnVuY3Rpb24g c2VtYW5hZ2Vfbm9kZV9jb21wYXJlCisKK3ZvaWQgdGVzdF9ub2RlX2NvbXBhcmUodm9pZCkgewor ICAgIHNlbWFuYWdlX25vZGVfdCAqbm9kZSA9IE5VTEw7CisgICAgc2VtYW5hZ2Vfbm9kZV9rZXlf dCAqa2V5MSA9IE5VTEw7CisgICAgc2VtYW5hZ2Vfbm9kZV9rZXlfdCAqa2V5MiA9IE5VTEw7Cisg ICAgaW50IHJlc3VsdCA9IDQyOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hf Q09OTkVDVCk7CisKKyAgICBub2RlID0gZ2V0X25vZGUoKTsKKworICAgIGtleTEgPSBnZXRfbm9k ZV9rZXkoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX2tleV9jcmVhdGUoc2gsICIx OTIuMTY4LjAuMSIsICIyNTUuMjU1LjAuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTRU1BTkFHRV9QUk9UT19JUDQsICZrZXkyKSA+PSAwKTsKKyAgICBDVV9BU1NF UlRfUFRSX05PVF9OVUxMKGtleTIpOworCisgICAgLy8gdGVzdAorICAgIHJlc3VsdCA9IHNlbWFu YWdlX25vZGVfY29tcGFyZShub2RlLCBrZXkxKTsKKworICAgIENVX0FTU0VSVChyZXN1bHQgPT0g MCk7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9ub2RlX2NvbXBhcmUobm9kZSwga2V5Mik7CisK KyAgICBDVV9BU1NFUlQocmVzdWx0ICE9IDApOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFu YWdlX25vZGVfZnJlZShub2RlKTsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV9mcmVlKGtleTEpOwor ICAgIHNlbWFuYWdlX25vZGVfa2V5X2ZyZWUoa2V5Mik7CisgICAgY2xlYW51cF9oYW5kbGUoU0hf Q09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfY29tcGFyZTIKKwordm9p ZCB0ZXN0X25vZGVfY29tcGFyZTIodm9pZCkgeworICAgIHNlbWFuYWdlX25vZGVfdCAqbm9kZTEg PSBOVUxMOworICAgIHNlbWFuYWdlX25vZGVfdCAqbm9kZTIgPSBOVUxMOworICAgIHNlbWFuYWdl X25vZGVfdCAqbm9kZTMgPSBOVUxMOworICAgIGludCByZXN1bHQgPSA0MjsKKworICAgIC8vIHNl dHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgbm9kZTEgPSBnZXRfbm9k ZSgpOworICAgIG5vZGUyID0gZ2V0X25vZGUoKTsKKworICAgIG5vZGUzID0gZ2V0X25vZGUoKTsK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9zZXRfYWRkcihzaCwgbm9kZTMsIFNFTUFOQUdF X1BST1RPX0lQNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTkyLjE2 OC4wLjEiKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9ub2Rl X2NvbXBhcmUyKG5vZGUxLCBub2RlMik7CisKKyAgICBDVV9BU1NFUlQocmVzdWx0ID09IDApOwor CisgICAgcmVzdWx0ID0gc2VtYW5hZ2Vfbm9kZV9jb21wYXJlMihub2RlMSwgbm9kZTMpOworCisg ICAgQ1VfQVNTRVJUKHJlc3VsdCAhPSAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFn ZV9ub2RlX2ZyZWUobm9kZTEpOworICAgIHNlbWFuYWdlX25vZGVfZnJlZShub2RlMik7CisgICAg c2VtYW5hZ2Vfbm9kZV9mcmVlKG5vZGUzKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNU KTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vfbm9kZV9rZXlfY3JlYXRlCisKK3ZvaWQgdGVz dF9ub2RlX2tleV9jcmVhdGUodm9pZCkgeworICAgIHNlbWFuYWdlX25vZGVfa2V5X3QgKmtleSA9 IE5VTEw7CisKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2Vfbm9kZV9rZXlfY3JlYXRlKHNoLCAiMTI3LjAuMC4xIiwgIjI1NS4yNTUuMjU1LjI1 NSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRU1BTkFHRV9QUk9U T19JUDQsICZrZXkpID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwoa2V5KTsKKwor ICAgIHNlbWFuYWdlX25vZGVfa2V5X2ZyZWUoa2V5KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9D T05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vfbm9kZV9rZXlfZXh0cmFjdAorCit2 b2lkIHRlc3Rfbm9kZV9rZXlfZXh0cmFjdCh2b2lkKSB7CisgICAgc2VtYW5hZ2Vfbm9kZV90ICpu b2RlID0gTlVMTDsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV90ICprZXkgPSBOVUxMOworCisgICAg Ly8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBub2RlID0gZ2V0 X25vZGUoKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9rZXlf ZXh0cmFjdChzaCwgbm9kZSwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVM TChrZXkpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX25vZGVfZnJlZShub2RlKTsK KyAgICBzZW1hbmFnZV9ub2RlX2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hf Q09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfZ2V0X2FkZHIsIHNlbWFu YWdlX25vZGVfc2V0X2FkZHIKKwordm9pZCB0ZXN0X25vZGVfZ2V0X3NldF9hZGRyKHZvaWQpIHsK KyAgICBzZW1hbmFnZV9ub2RlX3QgKm5vZGUgPSBOVUxMOworICAgIGNoYXIgKmFkZHIgPSBOVUxM OworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9jcmVhdGUoc2gsICZub2RlKSA+PSAwKTsKKworICAgIC8v IHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9zZXRfYWRkcihzaCwgbm9kZSwgU0VN QU5BR0VfUFJPVE9fSVA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIx OTIuMTY4LjAuMSIpID09IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfZ2V0X2Fk ZHIoc2gsIG5vZGUsICZhZGRyKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGFk ZHIpOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoYWRkciwgIjE5Mi4xNjguMC4xIik7CisK KyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2Vfbm9kZV9mcmVlKG5vZGUpOworICAgIGNsZWFu dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9ub2RlX2dl dF9hZGRyX2J5dGVzLCBzZW1hbmFnZV9ub2RlX3NldF9hZGRyX2J5dGVzCisKK3ZvaWQgdGVzdF9u b2RlX2dldF9zZXRfYWRkcl9ieXRlcyh2b2lkKSB7CisgICAgc2VtYW5hZ2Vfbm9kZV90ICpub2Rl ID0gTlVMTDsKKyAgICBjaGFyIGFkZHIxW10gPSB7IDE5MiwgMTY4LCAwLCAxIH07CisgICAgc2l6 ZV90IGFkZHIxX3NpemUgPSBzaXplb2YoYWRkcjEpOworICAgIGNoYXIgKmFkZHIyID0gTlVMTDsK KyAgICBzaXplX3QgYWRkcjJfc2l6ZSA9IDA7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hh bmRsZShTSF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX2NyZWF0ZShz aCwgJm5vZGUpID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9u b2RlX3NldF9hZGRyX2J5dGVzKHNoLCBub2RlLCBhZGRyMSwgYWRkcjFfc2l6ZSkgPT0gMCk7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9nZXRfYWRkcl9ieXRlcyhzaCwgbm9kZSwgJmFk ZHIyLCAmYWRkcjJfc2l6ZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChhZGRy Mik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFkZHIyX3NpemU7IGkrKykgeworICAg ICAgICBDVV9BU1NFUlQoYWRkcjFbaV0gPT0gYWRkcjJbaV0pOworICAgIH0KKworICAgIC8vIGNs ZWFudXAKKyAgICBzZW1hbmFnZV9ub2RlX2ZyZWUobm9kZSk7CisgICAgY2xlYW51cF9oYW5kbGUo U0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfZ2V0X21hc2ssIHNl bWFuYWdlX25vZGVfc2V0X21hc2sKKwordm9pZCB0ZXN0X25vZGVfZ2V0X3NldF9tYXNrKHZvaWQp IHsKKyAgICBzZW1hbmFnZV9ub2RlX3QgKm5vZGUgPSBOVUxMOworICAgIGNoYXIgKm1hc2sgPSBO VUxMOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9jcmVhdGUoc2gsICZub2RlKSA+PSAwKTsKKworICAg IC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9zZXRfbWFzayhzaCwgbm9kZSwg U0VNQU5BR0VfUFJPVE9fSVA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIyNTUuMjU1LjI1NS4wIikgPT0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9n ZXRfbWFzayhzaCwgbm9kZSwgJm1hc2spID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05V TEwobWFzayk7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChtYXNrLCAiMjU1LjI1NS4yNTUu MCIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX25vZGVfZnJlZShub2RlKTsKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vf bm9kZV9nZXRfbWFza19ieXRlcywgc2VtYW5hZ2Vfbm9kZV9zZXRfbWFza19ieXRlcworCit2b2lk IHRlc3Rfbm9kZV9nZXRfc2V0X21hc2tfYnl0ZXModm9pZCkgeworICAgIHNlbWFuYWdlX25vZGVf dCAqbm9kZSA9IE5VTEw7CisgICAgY2hhciBtYXNrMVtdID0geyAyNTUsIDI1NSwgMjU1LCAwIH07 CisgICAgc2l6ZV90IG1hc2sxX3NpemUgPSBzaXplb2YobWFzazEpOworICAgIGNoYXIgKm1hc2sy ID0gTlVMTDsKKyAgICBzaXplX3QgbWFzazJfc2l6ZSA9IDA7CisKKyAgICAvLyBzZXR1cAorICAg IHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2Rl X2NyZWF0ZShzaCwgJm5vZGUpID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChz ZW1hbmFnZV9ub2RlX3NldF9tYXNrX2J5dGVzKHNoLCBub2RlLCBtYXNrMSwgbWFzazFfc2l6ZSkg PT0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9nZXRfbWFza19ieXRlcyhzaCwg bm9kZSwgJm1hc2syLCAmbWFzazJfc2l6ZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1Rf TlVMTChtYXNrMik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hc2syX3NpemU7IGkr KykgeworICAgICAgICBDVV9BU1NFUlQobWFzazFbaV0gPT0gbWFzazJbaV0pOworICAgIH0KKwor ICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV9ub2RlX2ZyZWUobm9kZSk7CisgICAgY2xlYW51 cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfZ2V0 X3Byb3RvLCBzZW1hbmFnZV9ub2RlX3NldF9wcm90bworCit2b2lkIHRlc3Rfbm9kZV9nZXRfc2V0 X3Byb3RvKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9ub2RlX3QgKm5vZGUgPSBOVUxMOworCisgICAg Ly8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2Vfbm9kZV9jcmVhdGUoc2gsICZub2RlKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAg ICBzZW1hbmFnZV9ub2RlX3NldF9wcm90byhub2RlLCBTRU1BTkFHRV9QUk9UT19JUDQpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfZ2V0X3Byb3RvKG5vZGUpID09IFNFTUFOQUdFX1BS T1RPX0lQNCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2Vfbm9kZV9mcmVlKG5vZGUp OworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1h bmFnZV9ub2RlX2dldF9wcm90b19zdHIKKwordm9pZCB0ZXN0X25vZGVfZ2V0X3Byb3RvX3N0cih2 b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzZW1hbmFnZV9ub2RlX2dldF9wcm90 b19zdHIoU0VNQU5BR0VfUFJPVE9fSVA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJp cHY0Iik7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzZW1hbmFnZV9ub2RlX2dldF9wcm90 b19zdHIoU0VNQU5BR0VfUFJPVE9fSVA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJp cHY2Iik7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfZ2V0X2Nvbiwgc2VtYW5hZ2Vf bm9kZV9zZXRfY29uCisKK3ZvaWQgdGVzdF9ub2RlX2dldF9zZXRfY29uKHZvaWQpIHsKKyAgICBz ZW1hbmFnZV9ub2RlX3QgKm5vZGUgPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29u MSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24yID0gTlVMTDsKKworICAgIC8v IHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNl bWFuYWdlX25vZGVfY3JlYXRlKHNoLCAmbm9kZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfY29udGV4dF9mcm9tX3N0cmluZyhzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAibXlfdXNlcl91Om15X3JvbGVfcjpteV90eXBlX3Q6czAiLCAmY29uMSkgPj0gMCk7CisK KyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfc2V0X2NvbihzaCwgbm9k ZSwgY29uMSkgPT0gMCk7CisKKyAgICBjb24yID0gc2VtYW5hZ2Vfbm9kZV9nZXRfY29uKG5vZGUp OworCisgICAgQ1VfQVNTRVJUX0NPTlRFWFRfRVFVQUwoY29uMSwgY29uMik7CisKKyAgICAvLyBj bGVhbnVwCisgICAgc2VtYW5hZ2Vfbm9kZV9mcmVlKG5vZGUpOworICAgIGNsZWFudXBfaGFuZGxl KFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9ub2RlX2NyZWF0ZQorCit2 b2lkIHRlc3Rfbm9kZV9jcmVhdGUodm9pZCkgeworICAgIHNlbWFuYWdlX25vZGVfdCAqbm9kZSA9 IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24gPSBOVUxMOworCisgICAgLy8gc2V0 dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX25vZGVfY3JlYXRlKHNoLCAmbm9kZSkgPj0gMCk7CisKKyAgICBDVV9B U1NFUlQoc2VtYW5hZ2Vfbm9kZV9zZXRfYWRkcihzaCwgbm9kZSwgU0VNQU5BR0VfUFJPVE9fSVA0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjcuMC4wLjEiKSA+PSAw KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX3NldF9tYXNrKHNoLCBub2RlLCBTRU1B TkFHRV9QUk9UT19JUDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjI1 NS4yNTUuMjU1LjAiKSA+PSAwKTsKKworICAgIHNlbWFuYWdlX25vZGVfc2V0X3Byb3RvKG5vZGUs IFNFTUFOQUdFX1BST1RPX0lQNCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29udGV4dF9m cm9tX3N0cmluZyhzaCwgInVzZXJfdTpyb2xlX3I6dHlwZV90OnMwIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2Vfbm9kZV9zZXRfY29uKHNoLCBub2RlLCBjb24pID49IDApOworCisgICAgLy8gY2xl YW51cAorICAgIHNlbWFuYWdlX25vZGVfZnJlZShub2RlKTsKKyAgICBjbGVhbnVwX2hhbmRsZShT SF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vfbm9kZV9jbG9uZQorCit2b2lk IHRlc3Rfbm9kZV9jbG9uZSh2b2lkKSB7CisgICAgc2VtYW5hZ2Vfbm9kZV90ICpub2RlID0gTlVM TDsKKyAgICBzZW1hbmFnZV9ub2RlX3QgKm5vZGVfY2xvbmUgPSBOVUxMOworICAgIHNlbWFuYWdl X2NvbnRleHRfdCAqY29uID0gTlVMTDsKKyAgICBzZW1hbmFnZV9jb250ZXh0X3QgKmNvbjIgPSBO VUxMOworICAgIGNvbnN0IGNoYXIgKmFkZHIxID0gIjEyNy4wLjAuMSI7CisgICAgY2hhciAqYWRk cjIgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm1hc2sxID0gIjI1NS4yNTUuMjU1LjAiOworICAg IGNoYXIgKm1hc2syID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNI X0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfY3JlYXRlKHNoLCAmbm9k ZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9zZXRfYWRkcihzaCwgbm9k ZSwgU0VNQU5BR0VfUFJPVE9fSVA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFkZHIxKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX3NldF9tYXNr KHNoLCBub2RlLCBTRU1BTkFHRV9QUk9UT19JUDQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFzazEpID49IDApOworCisgICAgc2VtYW5hZ2Vfbm9kZV9zZXRfcHJvdG8o bm9kZSwgU0VNQU5BR0VfUFJPVE9fSVA0KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250 ZXh0X2Zyb21fc3RyaW5nKHNoLCAidXNlcl91OnJvbGVfcjp0eXBlX3Q6czAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb24pID49IDApOworICAgIENVX0FT U0VSVChzZW1hbmFnZV9ub2RlX3NldF9jb24oc2gsIG5vZGUsIGNvbikgPj0gMCk7CisKKyAgICAv LyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfY2xvbmUoc2gsIG5vZGUsICZub2Rl X2Nsb25lKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX2dldF9hZGRyKHNo LCBub2RlX2Nsb25lLCAmYWRkcjIpID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwo YWRkcjIpOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoYWRkcjEsIGFkZHIyKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX2dldF9tYXNrKHNoLCBub2RlX2Nsb25lLCAmbWFzazIp ID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwobWFzazIpOworICAgIENVX0FTU0VS VF9TVFJJTkdfRVFVQUwobWFzazEsIG1hc2syKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9u b2RlX2dldF9wcm90byhub2RlX2Nsb25lKSA9PSBTRU1BTkFHRV9QUk9UT19JUDQpOworCisgICAg Y29uMiA9IHNlbWFuYWdlX25vZGVfZ2V0X2Nvbihub2RlX2Nsb25lKTsKKyAgICAKKyAgICBDVV9B U1NFUlRfQ09OVEVYVF9FUVVBTChjb24sIGNvbjIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNl bWFuYWdlX25vZGVfZnJlZShub2RlKTsKKyAgICBzZW1hbmFnZV9ub2RlX2ZyZWUobm9kZV9jbG9u ZSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNl bWFuYWdlX25vZGVfcXVlcnkKKwordm9pZCB0ZXN0X25vZGVfcXVlcnkodm9pZCkgeworICAgIHNl bWFuYWdlX25vZGVfdCAqbm9kZSA9IE5VTEw7CisgICAgc2VtYW5hZ2Vfbm9kZV9rZXlfdCAqa2V5 ID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOwor CisgICAga2V5ID0gZ2V0X25vZGVfa2V5KCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX25vZGVfcXVlcnkoc2gsIGtleSwgJm5vZGUpID49IDApOworCisgICAgQ1VfQVNT RVJUKG5vZGUgPT0gTlVMTCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2Vfbm9kZV9m cmVlKG5vZGUpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5j dGlvbiBzZW1hbmFnZV9ub2RlX2V4aXN0cworCit2b2lkIHRlc3Rfbm9kZV9leGlzdHModm9pZCkg eworICAgIHNlbWFuYWdlX25vZGVfa2V5X3QgKmtleSA9IE5VTEw7CisgICAgaW50IHJlc3BvbnNl ID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKwor ICAgIGtleSA9IGdldF9ub2RlX2tleSgpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChz ZW1hbmFnZV9ub2RlX2V4aXN0cyhzaCwga2V5LCAmcmVzcG9uc2UpID49IDApOworCisgICAgQ1Vf QVNTRVJUKCFyZXNwb25zZSk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2Vfbm9kZV9r ZXlfZnJlZShrZXkpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBG dW5jdGlvbiBzZW1hbmFnZV9ub2RlX2NvdW50CisKK3ZvaWQgdGVzdF9ub2RlX2NvdW50KHZvaWQp IHsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSA0MjsKKworICAgIC8vIHNldHVwCisgICAgc2V0 dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1h bmFnZV9ub2RlX2NvdW50KHNoLCAmY291bnQpID49IDApOworCisgICAgQ1VfQVNTRVJUKGNvdW50 ID09IE5PREVfQ09VTlQpOworCisgICAgLy8gY2xlYW51cAorICAgIGNsZWFudXBfaGFuZGxlKFNI X0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9ub2RlX2l0ZXJhdGUKKwordW5z aWduZWQgaW50IGNvdW50ZXJfbm9kZV9pdGVyYXRlID0gMDsKKworaW50IGhhbmRsZXJfbm9kZV9p dGVyYXRlKGNvbnN0IHNlbWFuYWdlX25vZGVfdCAqcmVjb3JkLCB2b2lkICp2YXJnKSB7CisgICAg Y291bnRlcl9ub2RlX2l0ZXJhdGUrKzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0X25v ZGVfaXRlcmF0ZSh2b2lkKSB7CisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09O TkVDVCk7CisKKyAgICAvLyB0ZXN0CisgICAgc2VtYW5hZ2Vfbm9kZV9pdGVyYXRlKHNoLCBoYW5k bGVyX25vZGVfaXRlcmF0ZSwgTlVMTCk7CisKKyAgICBDVV9BU1NFUlQoY291bnRlcl9ub2RlX2l0 ZXJhdGUgPT0gTk9ERV9DT1VOVCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgY2xlYW51cF9oYW5k bGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfbGlzdAorCit2 b2lkIHRlc3Rfbm9kZV9saXN0KHZvaWQpIHsKKyAgICBzZW1hbmFnZV9ub2RlX3QgKipyZWNvcmRz ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSA0MjsKKworICAgIC8vIHNldHVwCisg ICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VS VChzZW1hbmFnZV9ub2RlX2xpc3Qoc2gsICZyZWNvcmRzLCAmY291bnQpID49IDApOworCisgICAg Q1VfQVNTRVJUKGNvdW50ID09IE5PREVfQ09VTlQpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwo cmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj b3VudDsgaSsrKSB7CisgICAgICAgIHNlbWFuYWdlX25vZGVfZnJlZShyZWNvcmRzW2ldKTsKKyAg ICB9CisKKyAgICAvLyBjbGVhbnVwCisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9 CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfbW9kaWZ5X2xvY2FsLCBzZW1hbmFnZV9ub2Rl X2RlbF9sb2NhbCwKKy8vIHNlbWFuYWdlX25vZGVfcXVlcnlfbG9jYWwKKwordm9pZCB0ZXN0X25v ZGVfbW9kaWZ5X2RlbF9xdWVyeV9sb2NhbCh2b2lkKSB7CisgICAgc2VtYW5hZ2Vfbm9kZV90ICpu b2RlOworICAgIHNlbWFuYWdlX25vZGVfdCAqbm9kZV9sb2NhbDsKKyAgICBzZW1hbmFnZV9ub2Rl X3QgKm5vZGVfdG1wOworICAgIHNlbWFuYWdlX25vZGVfa2V5X3QgKmtleSA9IE5VTEw7CisgICAg c2VtYW5hZ2Vfbm9kZV9rZXlfdCAqa2V5X3RtcCA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAg IHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBub2RlID0gZ2V0X25vZGUoKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX2tleV9leHRyYWN0KHNoLCBub2RlLCAma2V5KSA+PSAw KTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleSk7CisKKyAgICAvLyBhZGQgc2Vjb25k IHJlY29yZCwgc28gdGhhdCBzZW1hbmFnZV9ub2RlX2NvbXBhcmUyX3Fzb3J0IHdpbGwgYmUgY2Fs bGVkCisgICAgbm9kZV90bXAgPSBnZXRfbm9kZSgpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X25vZGVfc2V0X2FkZHIoc2gsIG5vZGVfdG1wLCBTRU1BTkFHRV9QUk9UT19JUDQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwLjAuMC4xIikgPj0gMCk7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9rZXlfZXh0cmFjdChzaCwgbm9kZV90bXAsICZrZXlfdG1w KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleV90bXApOworCisgICAgLy8g dGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX21vZGlmeV9sb2NhbChzaCwga2V5LCBu b2RlKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9tb2RpZnlfbG9jYWwoc2gs IGtleV90bXAsIG5vZGVfdG1wKSA+PSAwKTsKKworICAgIC8vIHdyaXRlIGNoYW5nZXMgdG8gZmls ZQorICAgIGhlbHBlcl9jb21taXQoKTsKKyAgICBoZWxwZXJfYmVnaW5fdHJhbnNhY3Rpb24oKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZub2Rl X2xvY2FsKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKG5vZGVfbG9j YWwpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfZGVsX2xvY2FsKHNoLCBrZXkpID49 IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9ub2RlX2RlbF9sb2NhbChzaCwga2V5X3RtcCkg Pj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9xdWVyeV9sb2NhbChzaCwga2V5 LCAmbm9kZV9sb2NhbCkgPCAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV9ub2Rl X2ZyZWUobm9kZSk7CisgICAgc2VtYW5hZ2Vfbm9kZV9mcmVlKG5vZGVfdG1wKTsKKyAgICBjbGVh bnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX25vZGVfZXhp c3RzX2xvY2FsCisKK3ZvaWQgdGVzdF9ub2RlX2V4aXN0c19sb2NhbCh2b2lkKSB7CisgICAgc2Vt YW5hZ2Vfbm9kZV90ICpub2RlID0gTlVMTDsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV90ICprZXkx ID0gTlVMTDsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV90ICprZXkyID0gTlVMTDsKKyAgICBzZW1h bmFnZV9jb250ZXh0X3QgKmNvbiA9IE5VTEw7CisgICAgaW50IHJlc3BvbnNlID0gNDI7CisKKyAg ICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2Vfbm9kZV9jcmVhdGUoc2gsICZub2RlKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChz ZW1hbmFnZV9ub2RlX3NldF9hZGRyKHNoLCBub2RlLCBTRU1BTkFHRV9QUk9UT19JUDQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyNy4wLjAuMSIpID49IDApOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfc2V0X21hc2soc2gsIG5vZGUsIFNFTUFOQUdFX1BS T1RPX0lQNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjU1LjI1NS4y NTUuMCIpID49IDApOworCisgICAgc2VtYW5hZ2Vfbm9kZV9zZXRfcHJvdG8obm9kZSwgU0VNQU5B R0VfUFJPVE9fSVA0KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3Ry aW5nKHNoLCAidXNlcl91OnJvbGVfcjp0eXBlX3Q6czAiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZjb24pID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9ub2RlX3NldF9jb24oc2gsIG5vZGUsIGNvbikgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2Vfbm9kZV9rZXlfZXh0cmFjdChzaCwgbm9kZSwgJmtleTEpID49IDApOworICAgIENVX0FT U0VSVF9QVFJfTk9UX05VTEwoa2V5MSk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9t b2RpZnlfbG9jYWwoc2gsIGtleTEsIG5vZGUpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX25vZGVfa2V5X2NyZWF0ZShzaCwgIjE5Mi4xNjguMC4xIiwgIjI1NS4yNTUuMC4wIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTUFOQUdFX1BST1RPX0lQNCwg JmtleTIpID49IDApOworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwoa2V5Mik7CisKKyAgICAv LyB0ZXN0IGV4aXN0aW5nCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfZXhpc3RzX2xvY2Fs KHNoLCBrZXkxLCAmcmVzcG9uc2UpID49IDApOworCisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlKTsK KworICAgIC8vIHRlc3Qgbm9uZXhpc3RlbnQKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9l eGlzdHNfbG9jYWwoc2gsIGtleTIsICZyZXNwb25zZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQo IXJlc3BvbnNlKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9k ZV9kZWxfbG9jYWwoc2gsIGtleTEpID49IDApOworICAgIHNlbWFuYWdlX25vZGVfZnJlZShub2Rl KTsKKyAgICBzZW1hbmFnZV9ub2RlX2tleV9mcmVlKGtleTEpOworICAgIHNlbWFuYWdlX25vZGVf a2V5X2ZyZWUoa2V5Mik7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBG dW5jdGlvbiBzZW1hbmFnZV9ub2RlX2NvdW50X2xvY2FsCisKK3ZvaWQgdGVzdF9ub2RlX2NvdW50 X2xvY2FsKHZvaWQpIHsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSA0MjsKKworICAgIC8vIHNl dHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGFkZF9sb2NhbF9ub2RlKElf RklSU1QpOworICAgIGFkZF9sb2NhbF9ub2RlKElfU0VDT05EKTsKKyAgICBhZGRfbG9jYWxfbm9k ZShJX1RISVJEKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfbm9kZV9j b3VudF9sb2NhbChzaCwgJmNvdW50KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChjb3VudCA9PSAz KTsKKworICAgIC8vIGNsZWFudXAKKyAgICBkZWxldGVfbG9jYWxfbm9kZShJX0ZJUlNUKTsKKyAg ICBkZWxldGVfbG9jYWxfbm9kZShJX1NFQ09ORCk7CisgICAgZGVsZXRlX2xvY2FsX25vZGUoSV9U SElSRCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9u IHNlbWFuYWdlX25vZGVfaXRlcmF0ZV9sb2NhbAorCit1bnNpZ25lZCBpbnQgY291bnRlcl9ub2Rl X2l0ZXJhdGVfbG9jYWwgPSAwOworCitpbnQgaGFuZGxlcl9ub2RlX2l0ZXJhdGVfbG9jYWwoY29u c3Qgc2VtYW5hZ2Vfbm9kZV90ICpyZWNvcmQsIHZvaWQgKnZhcmcpIHsKKyAgICBjb3VudGVyX25v ZGVfaXRlcmF0ZV9sb2NhbCsrOworICAgIHJldHVybiAwOworfQorCit2b2lkIHRlc3Rfbm9kZV9p dGVyYXRlX2xvY2FsKHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9U UkFOUyk7CisKKyAgICBhZGRfbG9jYWxfbm9kZShJX0ZJUlNUKTsKKyAgICBhZGRfbG9jYWxfbm9k ZShJX1NFQ09ORCk7CisgICAgYWRkX2xvY2FsX25vZGUoSV9USElSRCk7CisKKyAgICAvLyB0ZXN0 CisgICAgc2VtYW5hZ2Vfbm9kZV9pdGVyYXRlX2xvY2FsKHNoLCBoYW5kbGVyX25vZGVfaXRlcmF0 ZV9sb2NhbCwgTlVMTCk7CisKKyAgICBDVV9BU1NFUlQoY291bnRlcl9ub2RlX2l0ZXJhdGVfbG9j YWwgPT0gMyk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgZGVsZXRlX2xvY2FsX25vZGUoSV9GSVJT VCk7CisgICAgZGVsZXRlX2xvY2FsX25vZGUoSV9TRUNPTkQpOworICAgIGRlbGV0ZV9sb2NhbF9u b2RlKElfVEhJUkQpOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBG dW5jdGlvbiBzZW1hbmFnZV9ub2RlX2xpc3RfbG9jYWwKKwordm9pZCB0ZXN0X25vZGVfbGlzdF9s b2NhbCh2b2lkKSB7CisgICAgc2VtYW5hZ2Vfbm9kZV90ICoqcmVjb3JkcyA9IE5VTEw7CisgICAg dW5zaWduZWQgaW50IGNvdW50ID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRs ZShTSF9UUkFOUyk7CisKKyAgICBhZGRfbG9jYWxfbm9kZShJX0ZJUlNUKTsKKyAgICBhZGRfbG9j YWxfbm9kZShJX1NFQ09ORCk7CisgICAgYWRkX2xvY2FsX25vZGUoSV9USElSRCk7CisKKyAgICAv LyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX25vZGVfbGlzdF9sb2NhbChzaCwgJnJlY29y ZHMsICZjb3VudCkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoY291bnQgPT0gMyk7CisKKyAgICBm b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ1VfQVNT RVJUX1BUUl9OT1RfTlVMTChyZWNvcmRzW2ldKTsKKyAgICB9CisKKyAgICAvLyBjbGVhbnVwCisg ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHNl bWFuYWdlX25vZGVfZnJlZShyZWNvcmRzW2ldKTsKKyAgICB9CisKKyAgICBkZWxldGVfbG9jYWxf bm9kZShJX0ZJUlNUKTsKKyAgICBkZWxldGVfbG9jYWxfbm9kZShJX1NFQ09ORCk7CisgICAgZGVs ZXRlX2xvY2FsX25vZGUoSV9USElSRCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7 Cit9CgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfbm9k ZS5oIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfbm9kZS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDBjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9ub2RlLmgKQEAgLTAsMCArMSw0MyBA QAorI2lmbmRlZiBfX1RFU1RfTk9ERV9IX18KKyNkZWZpbmUgX19URVNUX05PREVfSF9fCisKKyNp bmNsdWRlIDxDVW5pdC9CYXNpYy5oPgorCitpbnQgbm9kZV90ZXN0X2luaXQodm9pZCk7CitpbnQg bm9kZV90ZXN0X2NsZWFudXAodm9pZCk7CitpbnQgbm9kZV9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1 aXRlKTsKKworLy8gbm9kZV9yZWNvcmQuaAorCit2b2lkIHRlc3Rfbm9kZV9jb21wYXJlKHZvaWQp Owordm9pZCB0ZXN0X25vZGVfY29tcGFyZTIodm9pZCk7Cit2b2lkIHRlc3Rfbm9kZV9rZXlfY3Jl YXRlKHZvaWQpOwordm9pZCB0ZXN0X25vZGVfa2V5X2V4dHJhY3Qodm9pZCk7Cit2b2lkIHRlc3Rf bm9kZV9nZXRfc2V0X2FkZHIodm9pZCk7Cit2b2lkIHRlc3Rfbm9kZV9nZXRfc2V0X2FkZHJfYnl0 ZXModm9pZCk7Cit2b2lkIHRlc3Rfbm9kZV9nZXRfc2V0X21hc2sodm9pZCk7Cit2b2lkIHRlc3Rf bm9kZV9nZXRfc2V0X21hc2tfYnl0ZXModm9pZCk7Cit2b2lkIHRlc3Rfbm9kZV9nZXRfc2V0X3By b3RvKHZvaWQpOwordm9pZCB0ZXN0X25vZGVfZ2V0X3Byb3RvX3N0cih2b2lkKTsKK3ZvaWQgdGVz dF9ub2RlX2dldF9zZXRfY29uKHZvaWQpOwordm9pZCB0ZXN0X25vZGVfY3JlYXRlKHZvaWQpOwor dm9pZCB0ZXN0X25vZGVfY2xvbmUodm9pZCk7CisKKy8vIG5vZGVzX3BvbGljeS5oCisKK3ZvaWQg dGVzdF9ub2RlX3F1ZXJ5KHZvaWQpOwordm9pZCB0ZXN0X25vZGVfZXhpc3RzKHZvaWQpOwordm9p ZCB0ZXN0X25vZGVfY291bnQodm9pZCk7Cit2b2lkIHRlc3Rfbm9kZV9pdGVyYXRlKHZvaWQpOwor dm9pZCB0ZXN0X25vZGVfbGlzdCh2b2lkKTsKKworLy8gbm9kZXNfbG9jYWwuaAorCit2b2lkIHRl c3Rfbm9kZV9tb2RpZnlfZGVsX3F1ZXJ5X2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0X25vZGVfZXhp c3RzX2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0X25vZGVfY291bnRfbG9jYWwodm9pZCk7Cit2b2lk IHRlc3Rfbm9kZV9pdGVyYXRlX2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0X25vZGVfbGlzdF9sb2Nh bCh2b2lkKTsKKworI2VuZGlmCisKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVz dHMvdGVzdHMvdGVzdF9vdGhlci5jIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rl c3Rfb3RoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFmNDlmCi0t LSAvZGV2L251bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfb3Ro ZXIuYwpAQCAtMCwwICsxLDEwOCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2Vt YW5hZ2Uvc2VtYW5hZ2UuaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9oYW5kbGUuaD4KKyNpbmNsdWRl IDxDVW5pdC9CYXNpYy5oPgorCisjaW5jbHVkZSAidGVzdF9vdGhlci5oIgorI2luY2x1ZGUgImZ1 bmN0aW9ucy5oIgorCitleHRlcm4gc2VtYW5hZ2VfaGFuZGxlX3QgKnNoOworCitpbnQgb3RoZXJf dGVzdF9pbml0KHZvaWQpIHsKKwlyZXR1cm4gMDsKK30KKworaW50IG90aGVyX3Rlc3RfY2xlYW51 cCh2b2lkKSB7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvdGhlcl9hZGRfdGVzdHMoQ1VfcFN1aXRl IHN1aXRlKSB7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJzZW1hbmFnZV9jb250ZXh0IiwgdGVz dF9zZW1hbmFnZV9jb250ZXh0KTsKKworI2lmIFZFUlNfQ0hFQ0soMiwgNSkKKyAgICBDVV9hZGRf dGVzdChzdWl0ZSwgImRlYnVnIiwgdGVzdF9kZWJ1Zyk7CisjZW5kaWYKKworCXJldHVybiAwOwor fQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9jb250ZXh0X2dldF91c2VyLCBzZW1hbmFnZV9jb250 ZXh0X3NldF91c2VyLAorLy8gc2VtYW5hZ2VfY29udGV4dF9nZXRfcm9sZSwgc2VtYW5hZ2VfY29u dGV4dF9zZXRfcm9sZSwKKy8vIHNlbWFuYWdlX2NvbnRleHRfZ2V0X3R5cGUsIHNlbWFuYWdlX2Nv bnRleHRfc2V0X3R5cGUsCisvLyBzZW1hbmFnZV9jb250ZXh0X2dldF9tbHMsIHNlbWFuYWdlX2Nv bnRleHRfc2V0X21scywKKy8vIHNlbWFuYWdlX2NvbnRleHRfY3JlYXRlLCBzZW1hbmFnZV9jb250 ZXh0X2Nsb25lLAorLy8gc2VtYW5hZ2VfY29udGV4dF9mcmVlLCBzZW1hbmFnZV9jb250ZXh0X2Zy b21fc3RyaW5nCisvLyBzZW1hbmFnZV9jb250ZXh0X3RvX3N0cmluZworCit2b2lkIHRlc3Rfc2Vt YW5hZ2VfY29udGV4dCh2b2lkKSB7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24gPSBOVUxM OworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uX2Nsb25lID0gTlVMTDsKKyAgICBjaGFyICpz dHIgPSBOVUxMOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7 CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfY3JlYXRlKHNo LCAmY29uKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X3NldF91c2Vy KHNoLCBjb24sICJ1c2VyX3UiKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKHNl bWFuYWdlX2NvbnRleHRfZ2V0X3VzZXIoY29uKSwgInVzZXJfdSIpOworCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX2NvbnRleHRfc2V0X3JvbGUoc2gsIGNvbiwgInJvbGVfciIpID49IDApOworICAg IENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfY29udGV4dF9nZXRfcm9sZShjb24pLCAi cm9sZV9yIik7CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfc2V0X3R5cGUo c2gsIGNvbiwgInR5cGVfdCIpID49IDApOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2Vt YW5hZ2VfY29udGV4dF9nZXRfdHlwZShjb24pLCAidHlwZV90Iik7CisgICAgCisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX2NvbnRleHRfc2V0X21scyhzaCwgY29uLCAiczAiKSA+PSAwKTsKKyAgICBD VV9BU1NFUlRfU1RSSU5HX0VRVUFMKHNlbWFuYWdlX2NvbnRleHRfZ2V0X21scyhjb24pLCAiczAi KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X3RvX3N0cmluZyhzaCwgY29uLCAm c3RyKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKHN0cik7CisgICAgQ1VfQVNT RVJUX1NUUklOR19FUVVBTChzdHIsICJ1c2VyX3U6cm9sZV9yOnR5cGVfdDpzMCIpOworCisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX2NvbnRleHRfZnJvbV9zdHJpbmcoc2gsICJteV91Om15X3I6bXlf dDpzMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbikg Pj0gMCk7CisgICAgCisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzZW1hbmFnZV9jb250ZXh0 X2dldF91c2VyKGNvbiksICJteV91Iik7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzZW1h bmFnZV9jb250ZXh0X2dldF9yb2xlKGNvbiksICJteV9yIik7CisgICAgQ1VfQVNTRVJUX1NUUklO R19FUVVBTChzZW1hbmFnZV9jb250ZXh0X2dldF90eXBlKGNvbiksICJteV90Iik7CisgICAgQ1Vf QVNTRVJUX1NUUklOR19FUVVBTChzZW1hbmFnZV9jb250ZXh0X2dldF9tbHMoY29uKSwgInMwIik7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29udGV4dF9jbG9uZShzaCwgY29uLCAmY29uX2Ns b25lKSA+PSAwKTsKKworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfY29udGV4 dF9nZXRfdXNlcihjb25fY2xvbmUpLCAibXlfdSIpOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFV QUwoc2VtYW5hZ2VfY29udGV4dF9nZXRfcm9sZShjb25fY2xvbmUpLCAibXlfciIpOworICAgIENV X0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfY29udGV4dF9nZXRfdHlwZShjb25fY2xvbmUp LCAibXlfdCIpOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfY29udGV4dF9n ZXRfbWxzKGNvbl9jbG9uZSksICJzMCIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdl X2NvbnRleHRfZnJlZShjb24pOworICAgIHNlbWFuYWdlX2NvbnRleHRfZnJlZShjb25fY2xvbmUp OworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1h bmFnZV9tc2dfZGVmYXVsdF9oYW5kbGVyCisKKyNpZiBWRVJTX0NIRUNLKDIsIDUpCisKK3ZvaWQg dGVzdF9kZWJ1Zyh2b2lkKSB7CisgICAgc2VtYW5hZ2VfbW9kdWxlX2luZm9fdCAqbW9kaW5mbyA9 IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNoID0gc2VtYW5hZ2VfaGFuZGxlX2NyZWF0ZSgp OworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwoc2gpOworCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX2Nvbm5lY3Qoc2gpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX21vZHVsZV9p bmZvX2NyZWF0ZShzaCwgJm1vZGluZm8pID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FT U0VSVChzZW1hbmFnZV9tb2R1bGVfaW5mb19zZXRfcHJpb3JpdHkoc2gsIG1vZGluZm8sIC00Mikg PCAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfZGlzY29ubmVj dChzaCkgPj0gMCk7CisgICAgc2VtYW5hZ2VfaGFuZGxlX2Rlc3Ryb3koc2gpOworfQorCisjZW5k aWYKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9vdGhl ci5oIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfb3RoZXIuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQzYzJiCi0tLSAvZGV2L251bGwKKysrIGIv bGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfb3RoZXIuaApAQCAtMCwwICsxLDI1 IEBACisjaWZuZGVmIF9fVEVTVF9PVEhFUl9IX18KKyNkZWZpbmUgX19URVNUX09USEVSX0hfXwor CisjaW5jbHVkZSA8Q1VuaXQvQmFzaWMuaD4KKworI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorCitp bnQgb3RoZXJfdGVzdF9pbml0KHZvaWQpOworaW50IG90aGVyX3Rlc3RfY2xlYW51cCh2b2lkKTsK K2ludCBvdGhlcl9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1aXRlKTsKKworLy8gY29udGV4dF9yZWNv cmQuaAorCit2b2lkIHRlc3Rfc2VtYW5hZ2VfY29udGV4dCh2b2lkKTsKKworLy8gZGVidWcuaAor CisjaWYgVkVSU19DSEVDSygyLCA1KQorCit2b2lkIHRlc3RfZGVidWcodm9pZCk7CisKKyNlbmRp ZgorCisjZW5kaWYKKwoKZGlmZiAtLWdpdCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0 cy90ZXN0X3BvcnQuYyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X3BvcnQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTYyNWE5Ci0tLSAvZGV2L251 bGwKKysrIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfcG9ydC5jCkBAIC0w LDAgKzEsODQzIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9zZW1h bmFnZS5oPgorI2luY2x1ZGUgPHNlbWFuYWdlL2hhbmRsZS5oPgorI2luY2x1ZGUgPENVbml0L0Jh c2ljLmg+CisKKyNpbmNsdWRlICJ0ZXN0X3BvcnQuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIK KworZXh0ZXJuIHNlbWFuYWdlX2hhbmRsZV90ICpzaDsKKworaW50IHBvcnRfdGVzdF9pbml0KHZv aWQpIHsKKwlyZXR1cm4gMDsKK30KKworaW50IHBvcnRfdGVzdF9jbGVhbnVwKHZvaWQpIHsKKwly ZXR1cm4gMDsKK30KKworaW50IHBvcnRfYWRkX3Rlc3RzKENVX3BTdWl0ZSBzdWl0ZSkgeworICAg IENVX2FkZF90ZXN0KHN1aXRlLCAicG9ydF9jb21wYXJlIiwgdGVzdF9wb3J0X2NvbXBhcmUpOwor ICAgIENVX2FkZF90ZXN0KHN1aXRlLCAicG9ydF9jb21wYXJlMiIsIHRlc3RfcG9ydF9jb21wYXJl Mik7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2tleV9jcmVhdGUiLCB0ZXN0X3BvcnRf a2V5X2NyZWF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2tleV9leHRyYWN0Iiwg dGVzdF9wb3J0X2tleV9leHRyYWN0KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInBvcnRfZ2V0 X3NldF9wcm90byIsIHRlc3RfcG9ydF9nZXRfc2V0X3Byb3RvKTsKKyAgICBDVV9hZGRfdGVzdChz dWl0ZSwgInBvcnRfZ2V0X3Byb3RvX3N0ciIsIHRlc3RfcG9ydF9nZXRfcHJvdG9fc3RyKTsKKyAg ICBDVV9hZGRfdGVzdChzdWl0ZSwgInBvcnRfZ2V0X3NldF9wb3J0IiwgdGVzdF9wb3J0X2dldF9z ZXRfcG9ydCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2dldF9zZXRfY29uIiwgdGVz dF9wb3J0X2dldF9zZXRfY29uKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInBvcnRfY3JlYXRl IiwgdGVzdF9wb3J0X2NyZWF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2Nsb25l IiwgdGVzdF9wb3J0X2Nsb25lKTsKKworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAicG9ydF9xdWVy eSIsIHRlc3RfcG9ydF9xdWVyeSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2V4aXN0 cyIsIHRlc3RfcG9ydF9leGlzdHMpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAicG9ydF9jb3Vu dCIsIHRlc3RfcG9ydF9jb3VudCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2l0ZXJh dGUiLCB0ZXN0X3BvcnRfaXRlcmF0ZSk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJwb3J0X2xp c3QiLCB0ZXN0X3BvcnRfbGlzdCk7CisKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInBvcnRfbW9k aWZ5X2RlbF9sb2NhbCIsIHRlc3RfcG9ydF9tb2RpZnlfZGVsX2xvY2FsKTsKKyAgICBDVV9hZGRf dGVzdChzdWl0ZSwgInBvcnRfcXVlcnlfbG9jYWwiLCB0ZXN0X3BvcnRfcXVlcnlfbG9jYWwpOwor ICAgIENVX2FkZF90ZXN0KHN1aXRlLCAicG9ydF9leGlzdHNfbG9jYWwiLCB0ZXN0X3BvcnRfZXhp c3RzX2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInBvcnRfY291bnRfbG9jYWwiLCB0 ZXN0X3BvcnRfY291bnRfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAicG9ydF9pdGVy YXRlX2xvY2FsIiwgdGVzdF9wb3J0X2l0ZXJhdGVfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1 aXRlLCAicG9ydF9saXN0X2xvY2FsIiwgdGVzdF9wb3J0X2xpc3RfbG9jYWwpOworCisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJwb3J0X3ZhbGlkYXRlX2xvY2FsIiwgdGVzdF9wb3J0X3ZhbGlkYXRl X2xvY2FsKTsKKworCXJldHVybiAwOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9wb3J0X2Nv bXBhcmUKKwordm9pZCBoZWxwZXJfcG9ydF9jb21wYXJlKGludCBpbmRleDEsIGludCBpbmRleDIp IHsKKyAgICBzZW1hbmFnZV9wb3J0X3QgKnBvcnQgPSBOVUxMOworICAgIHNlbWFuYWdlX3BvcnRf a2V5X3QgKmtleSA9IE5VTEw7CisgICAgaW50IHJlc3VsdCA9IDQyOworCisgICAgLy8gc2V0dXAK KyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBwb3J0ID0gZ2V0X3BvcnRfbnRo KGluZGV4MSk7CisgICAga2V5ID0gZ2V0X3BvcnRfa2V5X250aChpbmRleDIpOworCisgICAgLy8g dGVzdAorICAgIHJlc3VsdCA9IHNlbWFuYWdlX3BvcnRfY29tcGFyZShwb3J0LCBrZXkpOworCisg ICAgaWYgKGluZGV4MSA9PSBpbmRleDIpIHsKKyAgICAgICAgQ1VfQVNTRVJUKHJlc3VsdCA9PSAw KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgIT0gMCk7Cisg ICAgfQorCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0KTsKKyAg ICBzZW1hbmFnZV9wb3J0X2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09O TkVDVCk7Cit9CisKK3ZvaWQgdGVzdF9wb3J0X2NvbXBhcmUodm9pZCkgeworICAgIGhlbHBlcl9w b3J0X2NvbXBhcmUoSV9GSVJTVCwgIElfRklSU1QpOworICAgIGhlbHBlcl9wb3J0X2NvbXBhcmUo SV9GSVJTVCwgIElfU0VDT05EKTsKKyAgICBoZWxwZXJfcG9ydF9jb21wYXJlKElfU0VDT05ELCBJ X0ZJUlNUKTsKKyAgICBoZWxwZXJfcG9ydF9jb21wYXJlKElfU0VDT05ELCBJX1NFQ09ORCk7CisK KyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9wb3J0X2NvbXBhcmUoSV9OVUxMLCAgSV9GSVJT VCksIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3BvcnRfY29tcGFyZShJ X0ZJUlNULCBJX05VTEwpLCBTSUdTRUdWKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9w b3J0X2NvbXBhcmUoSV9OVUxMLCAgSV9OVUxMKSwgU0lHU0VHVik7Cit9CisKKy8vIEZ1bmN0aW9u IHNlbWFuYWdlX3BvcnRfY29tcGFyZTIKKwordm9pZCBoZWxwZXJfcG9ydF9jb21wYXJlMihpbnQg aW5kZXgxLCBpbnQgaW5kZXgyKSB7CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0MSA9IE5VTEw7 CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0MiA9IE5VTEw7CisgICAgaW50IHJlc3VsdCA9IDQy OworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBw b3J0MSA9IGdldF9wb3J0X250aChpbmRleDEpOworICAgIHBvcnQyID0gZ2V0X3BvcnRfbnRoKGlu ZGV4Mik7CisKKyAgICAvLyB0ZXN0CisgICAgcmVzdWx0ID0gc2VtYW5hZ2VfcG9ydF9jb21wYXJl Mihwb3J0MSwgcG9ydDIpOworCisgICAgaWYgKGluZGV4MSA9PSBpbmRleDIpIHsKKyAgICAgICAg Q1VfQVNTRVJUKHJlc3VsdCA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FT U0VSVChyZXN1bHQgIT0gMCk7CisgICAgfQorCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdl X3BvcnRfZnJlZShwb3J0MSk7CisgICAgc2VtYW5hZ2VfcG9ydF9mcmVlKHBvcnQyKTsKKyAgICBj bGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKwordm9pZCB0ZXN0X3BvcnRfY29tcGFyZTIo dm9pZCkgeworICAgIGhlbHBlcl9wb3J0X2NvbXBhcmUyKElfRklSU1QsICBJX0ZJUlNUKTsKKyAg ICBoZWxwZXJfcG9ydF9jb21wYXJlMihJX0ZJUlNULCAgSV9TRUNPTkQpOworICAgIGhlbHBlcl9w b3J0X2NvbXBhcmUyKElfU0VDT05ELCBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfcG9ydF9jb21wYXJl MihJX1NFQ09ORCwgSV9TRUNPTkQpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfcG9y dF9jb21wYXJlMihJX05VTEwsICBJX0ZJUlNUKSwgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJ R05BTChoZWxwZXJfcG9ydF9jb21wYXJlMihJX0ZJUlNULCBJX05VTEwpLCBTSUdTRUdWKTsKKyAg ICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9wb3J0X2NvbXBhcmUyKElfTlVMTCwgIElfTlVMTCks IFNJR1NFR1YpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9wb3J0X2NyZWF0ZQorCit2b2lk IHRlc3RfcG9ydF9rZXlfY3JlYXRlKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV90ICpr ZXkgPSBOVUxMOworCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX3BvcnRfa2V5X2NyZWF0ZShzaCwgMTAwMCwgMTIwMCwgMCwgJmtleSkgPj0g MCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOworCisgICAgc2VtYW5hZ2VfcG9y dF9rZXlfZnJlZShrZXkpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisv LyBGdW5jdGlvbiBzZW1hbmFnZV9wb3J0X2V4dHJhY3QKKwordm9pZCB0ZXN0X3BvcnRfa2V5X2V4 dHJhY3Qodm9pZCkgeworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydCA9IE5VTEw7CisgICAgc2Vt YW5hZ2VfcG9ydF9rZXlfdCAqa2V5ID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBf aGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgcG9ydCA9IGdldF9wb3J0X250aChJX0ZJUlNUKTsK KworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9rZXlfZXh0cmFjdChz aCwgcG9ydCwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOwor CisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0KTsKKyAgICBzZW1h bmFnZV9wb3J0X2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7 Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3RvLCBzZW1hbmFnZV9wb3J0 X3NldF9wcm90bworCit2b2lkIGhlbHBlcl9wb3J0X2dldF9zZXRfcHJvdG8oaW50IGluZGV4KSB7 CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0ID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAg c2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgcG9ydCA9IGdldF9wb3J0X250aChpbmRl eCk7CisKKyAgICAvLyB0ZXN0CisgICAgc2VtYW5hZ2VfcG9ydF9zZXRfcHJvdG8ocG9ydCwgMCk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9nZXRfcHJvdG8ocG9ydCkgPT0gMCk7CisK KyAgICBzZW1hbmFnZV9wb3J0X3NldF9wcm90byhwb3J0LCAxKTsKKworICAgIENVX0FTU0VSVChz ZW1hbmFnZV9wb3J0X2dldF9wcm90byhwb3J0KSA9PSAxKTsKKworICAgIC8vIGNsZWFudXAKKyAg ICBzZW1hbmFnZV9wb3J0X2ZyZWUocG9ydCk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVD VCk7Cit9CisKK3ZvaWQgdGVzdF9wb3J0X2dldF9zZXRfcHJvdG8odm9pZCkgeworICAgIGhlbHBl cl9wb3J0X2dldF9zZXRfcHJvdG8oSV9GSVJTVCk7CisgICAgaGVscGVyX3BvcnRfZ2V0X3NldF9w cm90byhJX1NFQ09ORCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3Rv X3N0cgorCit2b2lkIHRlc3RfcG9ydF9nZXRfcHJvdG9fc3RyKHZvaWQpIHsKKyAgICBjb25zdCBj aGFyICpzdHIgPSBOVUxMOworCisgICAgc3RyID0gc2VtYW5hZ2VfcG9ydF9nZXRfcHJvdG9fc3Ry KC0xKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKHN0ciwgIj8/PyIpOworCisgICAgc3Ry ID0gc2VtYW5hZ2VfcG9ydF9nZXRfcHJvdG9fc3RyKDApOworICAgIENVX0FTU0VSVF9TVFJJTkdf RVFVQUwoc3RyLCAidWRwIik7CisKKyAgICBzdHIgPSBzZW1hbmFnZV9wb3J0X2dldF9wcm90b19z dHIoMSk7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzdHIsICJ0Y3AiKTsKKworICAgIHN0 ciA9IHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3RvX3N0cigyKTsKKyNpZiBWRVJTX0NIRUNLKDIsIDUp CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzdHIsICJkY2NwIik7CisjZWxzZQorICAgIENV X0FTU0VSVF9TVFJJTkdfRVFVQUwoc3RyLCAiPz8/Iik7CisjZW5kaWYKKworICAgIHN0ciA9IHNl bWFuYWdlX3BvcnRfZ2V0X3Byb3RvX3N0cigzKTsKKyNpZiBWRVJTX0NIRUNLKDIsIDgpIHx8IFZF UlNfQ0hFQ0tfUkVMKDIsIDcsIDYpCisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzdHIsICJz Y3RwIik7CisjZWxzZQorICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc3RyLCAiPz8/Iik7Cisj ZW5kaWYKKworICAgIHN0ciA9IHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3RvX3N0cig0KTsKKyAgICBD VV9BU1NFUlRfU1RSSU5HX0VRVUFMKHN0ciwgIj8/PyIpOworfQorCisvLyBGdW5jdGlvbiBzZW1h bmFnZV9wb3J0X2dldF9sb3csIHNlbWFuYWdlX3BvcnRfZ2V0X2hpZ2gsCisvLyBzZW1hbmFnZV9w b3J0X3NldF9wb3J0LCBzZW1hbmFnZV9wb3J0X3NldF9yYW5nZQorCit2b2lkIHRlc3RfcG9ydF9n ZXRfc2V0X3BvcnQodm9pZCkgeworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydCA9IE5VTEw7CisK KyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIHBvcnQg PSBnZXRfcG9ydF9udGgoSV9GSVJTVCk7CisKKyAgICAvLyB0ZXN0CisgICAgc2VtYW5hZ2VfcG9y dF9zZXRfcG9ydChwb3J0LCAxMDAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2dl dF9sb3cocG9ydCkgPT0gMTAwMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X2hp Z2gocG9ydCkgPT0gMTAwMCk7CisKKyAgICBzZW1hbmFnZV9wb3J0X3NldF9yYW5nZShwb3J0LCAx MDAwLCAxMjAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2dldF9sb3cocG9ydCkg PT0gMTAwMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X2hpZ2gocG9ydCkgPT0g MTIwMCk7CisgICAgCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0 KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2Vt YW5hZ2VfcG9ydF9nZXRfY29uLCBzZW1hbmFnZV9wb3J0X3NldF9jb24KKwordm9pZCB0ZXN0X3Bv cnRfZ2V0X3NldF9jb24odm9pZCkgeworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydCA9IE5VTEw7 CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0X3RtcCA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29u dGV4dF90ICpjb24gPSBOVUxMOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hf Q09OTkVDVCk7CisKKyAgICBwb3J0ID0gZ2V0X3BvcnRfbnRoKElfRklSU1QpOworICAgIHBvcnRf dG1wID0gZ2V0X3BvcnRfbnRoKElfU0VDT05EKTsKKworICAgIGNvbiA9IHNlbWFuYWdlX3BvcnRf Z2V0X2Nvbihwb3J0X3RtcCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3BvcnRfc2V0X2NvbihzaCwgcG9ydCwgY29uKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1h bmFnZV9wb3J0X2dldF9jb24ocG9ydCkgIT0gTlVMTCk7CisKKyAgICAvLyBUT0RPOiBjaGVjayB0 aGUgY29udGV4dAorCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0 KTsKKyAgICBzZW1hbmFnZV9wb3J0X2ZyZWUocG9ydF90bXApOworICAgIGNsZWFudXBfaGFuZGxl KFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9wb3J0X2NyZWF0ZQorCit2 b2lkIHRlc3RfcG9ydF9jcmVhdGUodm9pZCkgeworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydCA9 IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKwor ICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9jcmVhdGUoc2gsICZwb3J0 KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2dldF9sb3cocG9ydCkgPT0g MCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X2hpZ2gocG9ydCkgPT0gMCk7Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X2Nvbihwb3J0KSA9PSBOVUxMKTsKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9nZXRfcHJvdG8ocG9ydCkgPT0gMCk7CisKKyAgICAvLyBj bGVhbnVwCisgICAgc2VtYW5hZ2VfcG9ydF9mcmVlKHBvcnQpOworICAgIGNsZWFudXBfaGFuZGxl KFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9wb3J0X2Nsb25lCisKK3Zv aWQgdGVzdF9wb3J0X2Nsb25lKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9wb3J0X3QgKnBvcnQgPSBO VUxMOworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydF9jbG9uZSA9IE5VTEw7CisgICAgc2VtYW5h Z2VfY29udGV4dF90ICpjb24gPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uMiA9 IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2NyZWF0ZShzaCwgJnBvcnQpID49IDApOworCisg ICAgc2VtYW5hZ2VfcG9ydF9zZXRfcmFuZ2UocG9ydCwgMTAwMCwgMTIwMCk7CisgICAgc2VtYW5h Z2VfcG9ydF9zZXRfcHJvdG8ocG9ydCwgMSk7CisKKyAgICBzZW1hbmFnZV9jb250ZXh0X2Zyb21f c3RyaW5nKHNoLCAidXNlcl91OnJvbGVfcjp0eXBlX3Q6czAiLCAmY29uKTsKKyAgICBzZW1hbmFn ZV9wb3J0X3NldF9jb24oc2gsIHBvcnQsIGNvbik7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX3BvcnRfY2xvbmUoc2gsIHBvcnQsICZwb3J0X2Nsb25lKSA+PSAwKTsKKwor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2dldF9sb3cocG9ydF9jbG9uZSkgPT0gMTAwMCk7 CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X2hpZ2gocG9ydF9jbG9uZSkgPT0gMTIw MCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3RvKHBvcnRfY2xvbmUpID09 IDEpOworCisgICAgY29uMiA9IHNlbWFuYWdlX3BvcnRfZ2V0X2Nvbihwb3J0X2Nsb25lKTsKKyAg ICBDVV9BU1NFUlRfQ09OVEVYVF9FUVVBTChjb24sIGNvbjIpOworCisgICAgLy8gY2xlYW51cAor ICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0KTsKKyAgICBzZW1hbmFnZV9wb3J0X2ZyZWUocG9y dF9jbG9uZSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0 aW9uIHNlbWFuYWdlX3BvcnRfcXVlcnkKKwordm9pZCB0ZXN0X3BvcnRfcXVlcnkodm9pZCkgewor ICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydCA9IE5VTEw7CisgICAgc2VtYW5hZ2VfcG9ydF90ICpw b3J0X2V4cCA9IE5VTEw7CisgICAgc2VtYW5hZ2VfcG9ydF9rZXlfdCAqa2V5ID0gTlVMTDsKKyAg ICBzZW1hbmFnZV9jb250ZXh0X3QgKmNvbiA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90 ICpjb25fZXhwID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NP Tk5FQ1QpOworCisgICAga2V5ID0gZ2V0X3BvcnRfa2V5X250aChJX0ZJUlNUKTsKKworICAgIHBv cnRfZXhwID0gZ2V0X3BvcnRfbnRoKElfRklSU1QpOworCisgICAgLy8gdGVzdAorICAgIENVX0FT U0VSVChzZW1hbmFnZV9wb3J0X3F1ZXJ5KHNoLCBrZXksICZwb3J0KSA+PSAwKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV9wb3J0X2dldF9sb3cocG9ydCkgPT0KKyAgICAgICAgICAgICAgc2Vt YW5hZ2VfcG9ydF9nZXRfbG93KHBvcnRfZXhwKSk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3Bv cnRfZ2V0X2hpZ2gocG9ydCkgPT0KKyAgICAgICAgICAgICAgc2VtYW5hZ2VfcG9ydF9nZXRfaGln aChwb3J0X2V4cCkpOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2dldF9wcm90byhwb3J0 KSA9PQorICAgICAgICAgICAgICBzZW1hbmFnZV9wb3J0X2dldF9wcm90byhwb3J0X2V4cCkpOwor CisgICAgY29uID0gc2VtYW5hZ2VfcG9ydF9nZXRfY29uKHBvcnQpOworICAgIGNvbl9leHAgPSBz ZW1hbmFnZV9wb3J0X2dldF9jb24ocG9ydF9leHApOworCisgICAgQ1VfQVNTRVJUX0NPTlRFWFRf RVFVQUwoY29uLCBjb25fZXhwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV9wb3J0 X2ZyZWUocG9ydCk7CisgICAgc2VtYW5hZ2VfcG9ydF9mcmVlKHBvcnRfZXhwKTsKKyAgICBjbGVh bnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfcG9ydF9l eGlzdHMKKwordm9pZCB0ZXN0X3BvcnRfZXhpc3RzKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9wb3J0 X2tleV90ICprZXkxID0gTlVMTDsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV90ICprZXkyID0gTlVM TDsKKyAgICBpbnQgcmVzcG9uc2UgPSA0MjsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFu ZGxlKFNIX0NPTk5FQ1QpOworCisgICAga2V5MSA9IGdldF9wb3J0X2tleV9udGgoSV9GSVJTVCk7 CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfa2V5X2NyZWF0ZShzaCwgMTIzLCA0 NTYsIDAsICZrZXkyKSA+PSAwKTsKKworICAgIC8vIHRlc3QgZXhpc3RpbmcKKyAgICBDVV9BU1NF UlQoc2VtYW5hZ2VfcG9ydF9leGlzdHMoc2gsIGtleTEsICZyZXNwb25zZSkgPj0gMCk7CisKKyAg ICBDVV9BU1NFUlQocmVzcG9uc2UpOworCisgICAgLy8gdGVzdCBub25leGlzdGVudAorICAgIENV X0FTU0VSVChzZW1hbmFnZV9wb3J0X2V4aXN0cyhzaCwga2V5MiwgJnJlc3BvbnNlKSA+PSAwKTsK KworICAgIENVX0FTU0VSVCghcmVzcG9uc2UpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFu YWdlX3BvcnRfa2V5X2ZyZWUoa2V5MSk7CisgICAgc2VtYW5hZ2VfcG9ydF9rZXlfZnJlZShrZXky KTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2Vt YW5hZ2VfcG9ydF9jb3VudAorCit2b2lkIHRlc3RfcG9ydF9jb3VudCh2b2lkKSB7CisgICAgdW5z aWduZWQgaW50IGNvdW50ID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShT SF9DT05ORUNUKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9j b3VudChzaCwgJmNvdW50KSA+PSAwKTsKKworICAgIC8vIFRPRE86IGNoZWNrIHJlYWwgY291bnQK KyAgICBDVV9BU1NFUlQoY291bnQgPiAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBjbGVhbnVw X2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfcG9ydF9pdGVy YXRlCisKK3Vuc2lnbmVkIGludCBjb3VudGVyX3BvcnRfaXRlcmF0ZSA9IDA7CisKK2ludCBoYW5k bGVyX3BvcnRfaXRlcmF0ZShjb25zdCBzZW1hbmFnZV9wb3J0X3QgKnJlY29yZCwgdm9pZCAqdmFy ZykgeworICAgIGNvdW50ZXJfcG9ydF9pdGVyYXRlKys7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv aWQgdGVzdF9wb3J0X2l0ZXJhdGUodm9pZCkgeworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFu ZGxlKFNIX0NPTk5FQ1QpOworCisgICAgLy8gdGVzdAorICAgIHNlbWFuYWdlX3BvcnRfaXRlcmF0 ZShzaCwgaGFuZGxlcl9wb3J0X2l0ZXJhdGUsIE5VTEwpOworCisgICAgLy8gVE9ETzogY2hlY2sg cmVhbCBjb3VudAorICAgIENVX0FTU0VSVChjb3VudGVyX3BvcnRfaXRlcmF0ZSA+IDApOworCisg ICAgLy8gY2xlYW51cAorICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBG dW5jdGlvbiBzZW1hbmFnZV9wb3J0X2xpc3QKKwordm9pZCB0ZXN0X3BvcnRfbGlzdCh2b2lkKSB7 CisgICAgc2VtYW5hZ2VfcG9ydF90ICoqcmVjb3JkcyA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50 IGNvdW50ID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNU KTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9saXN0KHNoLCAm cmVjb3JkcywgJmNvdW50KSA+PSAwKTsKKworICAgIENVX0FTU0VSVChjb3VudCA+IDApOworCisg ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIENV X0FTU0VSVF9QVFJfTk9UX05VTEwocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgLy8gY2xlYW51 cAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAg ICBzZW1hbmFnZV9wb3J0X2ZyZWUocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgY2xlYW51cF9o YW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3BvcnRfbW9kaWZ5 X2xvY2FsLCBzZW1hbmFnZV9wb3J0X2RlbF9sb2NhbAorCit2b2lkIHRlc3RfcG9ydF9tb2RpZnlf ZGVsX2xvY2FsKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9wb3J0X3QgKnBvcnQ7CisgICAgc2VtYW5h Z2VfcG9ydF90ICpwb3J0X2xvY2FsOworICAgIHNlbWFuYWdlX3BvcnRfa2V5X3QgKmtleSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24gPSBOVUxMOworICAgIHNlbWFuYWdlX2Nv bnRleHRfdCAqY29uX2xvY2FsID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFu ZGxlKFNIX1RSQU5TKTsKKworICAgIHBvcnQgPSBnZXRfcG9ydF9udGgoSV9GSVJTVCk7CisKKyAg ICBzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNoLCAidXNlcl91OnJvbGVfcjp0eXBlX3Q6 czAiLCAmY29uKTsKKyAgICBzZW1hbmFnZV9wb3J0X3NldF9jb24oc2gsIHBvcnQsIGNvbik7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9rZXlfZXh0cmFjdChzaCwgcG9ydCwgJmtleSkg Pj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOworCisgICAgLy8gdGVzdAor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X21vZGlmeV9sb2NhbChzaCwga2V5LCBwb3J0KSA+ PSAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X3F1ZXJ5X2xvY2FsKHNoLCBrZXks ICZwb3J0X2xvY2FsKSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKHBv cnRfbG9jYWwpOworCisgICAgY29uX2xvY2FsID0gc2VtYW5hZ2VfcG9ydF9nZXRfY29uKHBvcnRf bG9jYWwpOworCisgICAgQ1VfQVNTRVJUX0NPTlRFWFRfRVFVQUwoY29uLCBjb25fbG9jYWwpOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZGVsX2xvY2FsKHNoLCBrZXkpID49IDApOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfcXVlcnlfbG9jYWwoc2gsIGtleSwgJnBvcnRf bG9jYWwpIDwgMCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2VfcG9ydF9mcmVlKHBv cnQpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2Vt YW5hZ2VfcG9ydF9xdWVyeV9sb2NhbAorCit2b2lkIHRlc3RfcG9ydF9xdWVyeV9sb2NhbCh2b2lk KSB7CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0ID0gTlVMTDsKKyAgICBzZW1hbmFnZV9wb3J0 X3QgKnBvcnRfZXhwID0gTlVMTDsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV90ICprZXkgPSBOVUxM OworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uID0gTlVMTDsKKyAgICBzZW1hbmFnZV9jb250 ZXh0X3QgKmNvbl9leHAgPSBOVUxMOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUo U0hfVFJBTlMpOworCisgICAgYWRkX2xvY2FsX3BvcnQoSV9GSVJTVCk7CisKKyAgICBrZXkgPSBn ZXRfcG9ydF9rZXlfbnRoKElfRklSU1QpOworCisgICAgcG9ydF9leHAgPSBnZXRfcG9ydF9udGgo SV9GSVJTVCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfcXVl cnlfbG9jYWwoc2gsIGtleSwgJnBvcnQpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3BvcnRfZ2V0X2xvdyhwb3J0KSA9PQorICAgICAgICAgICAgICBzZW1hbmFnZV9wb3J0X2dldF9s b3cocG9ydF9leHApKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9nZXRfaGlnaChwb3J0 KSA9PQorICAgICAgICAgICAgICBzZW1hbmFnZV9wb3J0X2dldF9oaWdoKHBvcnRfZXhwKSk7Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3RvKHBvcnQpID09CisgICAgICAgICAg ICAgIHNlbWFuYWdlX3BvcnRfZ2V0X3Byb3RvKHBvcnRfZXhwKSk7CisKKyAgICBjb24gPSBzZW1h bmFnZV9wb3J0X2dldF9jb24ocG9ydCk7CisgICAgY29uX2V4cCA9IHNlbWFuYWdlX3BvcnRfZ2V0 X2Nvbihwb3J0X2V4cCk7CisKKyAgICBDVV9BU1NFUlRfQ09OVEVYVF9FUVVBTChjb24sIGNvbl9l eHApOworCisgICAgLy8gY2xlYW51cAorICAgIGRlbGV0ZV9sb2NhbF9wb3J0KElfRklSU1QpOwor ICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0KTsKKyAgICBzZW1hbmFnZV9wb3J0X2ZyZWUocG9y dF9leHApOworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24g c2VtYW5hZ2VfcG9ydF9leGlzdHNfbG9jYWwKKwordm9pZCB0ZXN0X3BvcnRfZXhpc3RzX2xvY2Fs KHZvaWQpIHsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV90ICprZXkxID0gTlVMTDsKKyAgICBzZW1h bmFnZV9wb3J0X2tleV90ICprZXkyID0gTlVMTDsKKyAgICBpbnQgcmVzcG9uc2UgPSA0MjsKKwor ICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGFkZF9sb2Nh bF9wb3J0KElfRklSU1QpOworCisgICAga2V5MSA9IGdldF9wb3J0X2tleV9udGgoSV9GSVJTVCk7 CisgICAga2V5MiA9IGdldF9wb3J0X2tleV9udGgoSV9TRUNPTkQpOworCisgICAgLy8gdGVzdCBl eGlzdGluZworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2V4aXN0c19sb2NhbChzaCwga2V5 MSwgJnJlc3BvbnNlKSA+PSAwKTsKKworICAgIENVX0FTU0VSVChyZXNwb25zZSk7CisKKyAgICAv LyB0ZXN0IG5vbmV4aXN0ZW50CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfZXhpc3RzX2xv Y2FsKHNoLCBrZXkyLCAmcmVzcG9uc2UpID49IDApOworCisgICAgQ1VfQVNTRVJUKCFyZXNwb25z ZSk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgZGVsZXRlX2xvY2FsX3BvcnQoSV9GSVJTVCk7Cisg ICAgc2VtYW5hZ2VfcG9ydF9rZXlfZnJlZShrZXkxKTsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV9m cmVlKGtleTIpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rp b24gc2VtYW5hZ2VfcG9ydF9jb3VudF9sb2NhbAorCit2b2lkIHRlc3RfcG9ydF9jb3VudF9sb2Nh bCh2b2lkKSB7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gNDI7CisKKyAgICAvLyBzZXR1cAor ICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICAvLyB0ZXN0IDAgbG9jYWwgcG9ydHMK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9jb3VudF9sb2NhbChzaCwgJmNvdW50KSA+PSAw KTsKKyAgICBDVV9BU1NFUlQoY291bnQgPT0gMCk7CisKKyAgICAvLyB0ZXN0IDEgbG9jYWwgcG9y dAorICAgIGFkZF9sb2NhbF9wb3J0KElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3BvcnRfY291bnRfbG9jYWwoc2gsICZjb3VudCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50 ID09IDEpOworCisgICAgLy8gdGVzdCAyIGxvY2FsIHBvcnRzCisgICAgYWRkX2xvY2FsX3BvcnQo SV9TRUNPTkQpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfY291bnRfbG9jYWwoc2gs ICZjb3VudCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ID09IDIpOworCisgICAgLy8gdGVz dCAxIGxvY2FsIHBvcnQKKyAgICBkZWxldGVfbG9jYWxfcG9ydChJX1NFQ09ORCk7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9jb3VudF9sb2NhbChzaCwgJmNvdW50KSA+PSAwKTsKKyAg ICBDVV9BU1NFUlQoY291bnQgPT0gMSk7CisKKyAgICAvLyB0ZXN0IDAgbG9jYWwgcG9ydHMKKyAg ICBkZWxldGVfbG9jYWxfcG9ydChJX0ZJUlNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9w b3J0X2NvdW50X2xvY2FsKHNoLCAmY291bnQpID49IDApOworICAgIENVX0FTU0VSVChjb3VudCA9 PSAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9 CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3BvcnRfaXRlcmF0ZV9sb2NhbAorCit1bnNpZ25lZCBp bnQgY291bnRlcl9wb3J0X2l0ZXJhdGVfbG9jYWwgPSAwOworCitpbnQgaGFuZGxlcl9wb3J0X2l0 ZXJhdGVfbG9jYWwoY29uc3Qgc2VtYW5hZ2VfcG9ydF90ICpyZWNvcmQsIHZvaWQgKnZhcmcpIHsK KyAgICBjb3VudGVyX3BvcnRfaXRlcmF0ZV9sb2NhbCsrOworICAgIHJldHVybiAwOworfQorCit2 b2lkIHRlc3RfcG9ydF9pdGVyYXRlX2xvY2FsKHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNl dHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBhZGRfbG9jYWxfcG9ydChJX0ZJUlNUKTsKKyAg ICBhZGRfbG9jYWxfcG9ydChJX1NFQ09ORCk7CisgICAgYWRkX2xvY2FsX3BvcnQoSV9USElSRCk7 CisKKyAgICAvLyB0ZXN0CisgICAgc2VtYW5hZ2VfcG9ydF9pdGVyYXRlX2xvY2FsKHNoLCBoYW5k bGVyX3BvcnRfaXRlcmF0ZV9sb2NhbCwgTlVMTCk7CisKKyAgICBDVV9BU1NFUlQoY291bnRlcl9w b3J0X2l0ZXJhdGVfbG9jYWwgPT0gMyk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgZGVsZXRlX2xv Y2FsX3BvcnQoSV9GSVJTVCk7CisgICAgZGVsZXRlX2xvY2FsX3BvcnQoSV9TRUNPTkQpOworICAg IGRlbGV0ZV9sb2NhbF9wb3J0KElfVEhJUkQpOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJB TlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV9wb3J0X2xpc3RfbG9jYWwKKwordm9pZCB0 ZXN0X3BvcnRfbGlzdF9sb2NhbCh2b2lkKSB7CisgICAgc2VtYW5hZ2VfcG9ydF90ICoqcmVjb3Jk cyA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gNDI7CisgICAgLy8gc2V0dXAKKyAg ICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAgYWRkX2xvY2FsX3BvcnQoSV9GSVJTVCk7 CisgICAgYWRkX2xvY2FsX3BvcnQoSV9TRUNPTkQpOworICAgIGFkZF9sb2NhbF9wb3J0KElfVEhJ UkQpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2xpc3RfbG9j YWwoc2gsICZyZWNvcmRzLCAmY291bnQpID49IDApOworCisgICAgQ1VfQVNTRVJUKGNvdW50ID09 IDMpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg ICAgICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAg Ly8gY2xlYW51cAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg eworICAgICAgICBzZW1hbmFnZV9wb3J0X2ZyZWUocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAg ZGVsZXRlX2xvY2FsX3BvcnQoSV9GSVJTVCk7CisgICAgZGVsZXRlX2xvY2FsX3BvcnQoSV9TRUNP TkQpOworICAgIGRlbGV0ZV9sb2NhbF9wb3J0KElfVEhJUkQpOworCisgICAgY2xlYW51cF9oYW5k bGUoU0hfVFJBTlMpOworfQorCisvLyBJbnRlcm5hbCBmdW5jdGlvbiBzZW1hbmFnZV9wb3J0X3Zh bGlkYXRlX2xvY2FsCisvLyBUT0RPOiB0ZXN0IGFsbCBjb3JuZXIgY2FzZXMKKwordm9pZCBoZWxw ZXJfcG9ydF92YWxpZGF0ZV9sb2NhbF9ub3BvcnQodm9pZCkgeworICAgIHNlbWFuYWdlX3BvcnRf a2V5X3QgKmtleSA9IE5VTEw7CisgICAgaW50IHJlc3BvbnNlID0gNDI7CisKKyAgICAvLyBzZXR1 cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBhZGRfbG9jYWxfcG9ydChJX0ZJ UlNUKTsKKworICAgIGhlbHBlcl9jb21taXQoKTsKKworICAgIGtleSA9IGdldF9wb3J0X2tleV9u dGgoSV9GSVJTVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9leGlzdHNfbG9jYWwo c2gsIGtleSwgJnJlc3BvbnNlKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UpOworCisg ICAgLy8gdGVzdAorICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOworCisgICAgZGVsZXRl X2xvY2FsX3BvcnQoSV9GSVJTVCk7CisKKyAgICBoZWxwZXJfY29tbWl0KCk7CisKKyAgICAvLyBj bGVhbnVwCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisgICAgZGVsZXRlX2xvY2Fs X3BvcnQoSV9GSVJTVCk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCit2b2lk IGhlbHBlcl9wb3J0X3ZhbGlkYXRlX2xvY2FsX29uZXBvcnQodm9pZCkgeworICAgIC8vIHNldHVw CisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIGFkZF9sb2NhbF9wb3J0KElfRklS U1QpOworCisgICAgLy8gdGVzdAorICAgIGhlbHBlcl9jb21taXQoKTsKKworICAgIC8vIGNsZWFu dXAKKyAgICBoZWxwZXJfYmVnaW5fdHJhbnNhY3Rpb24oKTsKKyAgICBkZWxldGVfbG9jYWxfcG9y dChJX0ZJUlNUKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKK3ZvaWQgaGVs cGVyX3BvcnRfdmFsaWRhdGVfbG9jYWxfdHdvcG9ydHModm9pZCkgeworICAgIHNlbWFuYWdlX3Bv cnRfa2V5X3QgKmtleTEgPSBOVUxMOworICAgIHNlbWFuYWdlX3BvcnRfa2V5X3QgKmtleTIgPSBO VUxMOworICAgIHNlbWFuYWdlX3BvcnRfdCAqcG9ydDEgPSBOVUxMOworICAgIHNlbWFuYWdlX3Bv cnRfdCAqcG9ydDIgPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRleHRfdCAqY29uMSA9IE5VTEw7 CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24yID0gTlVMTDsKKworICAgIC8vIHNldHVwCisg ICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0 X2tleV9jcmVhdGUoc2gsIDEwMSwgMjAwLCAwLCAma2V5MSkgPj0gMCk7CisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX3BvcnRfa2V5X2NyZWF0ZShzaCwgMjAxLCAzMDAsIDAsICZrZXkyKSA+PSAwKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2NyZWF0ZShzaCwgJnBvcnQxKSA+PSAwKTsK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9jcmVhdGUoc2gsICZwb3J0MikgPj0gMCk7CisK KyAgICBzZW1hbmFnZV9wb3J0X3NldF9yYW5nZShwb3J0MSwgMTAxLCAyMDApOworICAgIHNlbWFu YWdlX3BvcnRfc2V0X3JhbmdlKHBvcnQyLCAyMDEsIDMwMCk7CisgICAgc2VtYW5hZ2VfcG9ydF9z ZXRfcHJvdG8ocG9ydDEsIDApOworICAgIHNlbWFuYWdlX3BvcnRfc2V0X3Byb3RvKHBvcnQyLCAw KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNoLAorICAg ICAgICAgICAgICAgICJzeXN0ZW1fdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMCIsICZjb24xKSA+ PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfY29udGV4dF9mcm9tX3N0cmluZyhzaCwKKyAg ICAgICAgICAgICAgICAic3lzdGVtX3U6b2JqZWN0X3I6dXNlcl90bXBfdDpzMCIsICZjb24yKSA+ PSAwKTsKKworICAgIHNlbWFuYWdlX3BvcnRfc2V0X2NvbihzaCwgcG9ydDEsIGNvbjEpOworICAg IHNlbWFuYWdlX3BvcnRfc2V0X2NvbihzaCwgcG9ydDIsIGNvbjIpOworCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX3BvcnRfbW9kaWZ5X2xvY2FsKHNoLCBrZXkxLCBwb3J0MSkgPj0gMCk7CisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRfbW9kaWZ5X2xvY2FsKHNoLCBrZXkyLCBwb3J0MikgPj0g MCk7CisKKyAgICAvLyB0ZXN0CisgICAgaGVscGVyX2NvbW1pdCgpOworCisgICAgLy8gY2xlYW51 cAorICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9wb3J0X2RlbF9sb2NhbChzaCwga2V5MSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3BvcnRfZGVsX2xvY2FsKHNoLCBrZXkyKSA+PSAwKTsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV9m cmVlKGtleTEpOworICAgIHNlbWFuYWdlX3BvcnRfa2V5X2ZyZWUoa2V5Mik7CisgICAgc2VtYW5h Z2VfcG9ydF9mcmVlKHBvcnQxKTsKKyAgICBzZW1hbmFnZV9wb3J0X2ZyZWUocG9ydDIpOworICAg IGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKwordm9pZCBoZWxwZXJfcG9ydF92YWxpZGF0 ZV9sb2NhbF9wcm90byh2b2lkKSB7CisgICAgc2VtYW5hZ2VfcG9ydF9rZXlfdCAqa2V5MSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfcG9ydF9rZXlfdCAqa2V5MiA9IE5VTEw7CisgICAgc2VtYW5hZ2Vf cG9ydF9rZXlfdCAqa2V5MyA9IE5VTEw7CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0MSA9IE5V TEw7CisgICAgc2VtYW5hZ2VfcG9ydF90ICpwb3J0MiA9IE5VTEw7CisgICAgc2VtYW5hZ2VfcG9y dF90ICpwb3J0MyA9IE5VTEw7CisgICAgc2VtYW5hZ2VfY29udGV4dF90ICpjb24xID0gTlVMTDsK KyAgICBzZW1hbmFnZV9jb250ZXh0X3QgKmNvbjIgPSBOVUxMOworICAgIHNlbWFuYWdlX2NvbnRl eHRfdCAqY29uMyA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9U UkFOUyk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9rZXlfY3JlYXRlKHNoLCAxMDEs IDIwMCwgMCwgJmtleTEpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2tleV9j cmVhdGUoc2gsICA1MSwgMjUwLCAxLCAma2V5MikgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX3BvcnRfa2V5X2NyZWF0ZShzaCwgMjAxLCAzMDAsIDAsICZrZXkzKSA+PSAwKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2NyZWF0ZShzaCwgJnBvcnQxKSA+PSAwKTsKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9jcmVhdGUoc2gsICZwb3J0MikgPj0gMCk7CisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX3BvcnRfY3JlYXRlKHNoLCAmcG9ydDMpID49IDApOworCisgICAgc2Vt YW5hZ2VfcG9ydF9zZXRfcmFuZ2UocG9ydDEsIDEwMSwgMjAwKTsKKyAgICBzZW1hbmFnZV9wb3J0 X3NldF9yYW5nZShwb3J0MiwgIDUxLCAyNTApOworICAgIHNlbWFuYWdlX3BvcnRfc2V0X3Jhbmdl KHBvcnQzLCAyMDEsIDMwMCk7CisgICAgCisgICAgc2VtYW5hZ2VfcG9ydF9zZXRfcHJvdG8ocG9y dDEsIDApOworICAgIHNlbWFuYWdlX3BvcnRfc2V0X3Byb3RvKHBvcnQyLCAwKTsKKyAgICBzZW1h bmFnZV9wb3J0X3NldF9wcm90byhwb3J0MywgMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf Y29udGV4dF9mcm9tX3N0cmluZyhzaCwKKyAgICAgICAgICAgICAgICAic3lzdGVtX3U6b2JqZWN0 X3I6dXNlcl9ob21lX3Q6czAiLCAmY29uMSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X2NvbnRleHRfZnJvbV9zdHJpbmcoc2gsCisgICAgICAgICAgICAgICAgInN5c3RlbV91Om9iamVj dF9yOnVzZXJfaG9tZV90OnMwIiwgJmNvbjIpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9jb250ZXh0X2Zyb21fc3RyaW5nKHNoLAorICAgICAgICAgICAgICAgICJzeXN0ZW1fdTpvYmpl Y3Rfcjp1c2VyX3RtcF90OnMwIiwgJmNvbjMpID49IDApOworCisgICAgc2VtYW5hZ2VfcG9ydF9z ZXRfY29uKHNoLCBwb3J0MSwgY29uMSk7CisgICAgc2VtYW5hZ2VfcG9ydF9zZXRfY29uKHNoLCBw b3J0MiwgY29uMik7CisgICAgc2VtYW5hZ2VfcG9ydF9zZXRfY29uKHNoLCBwb3J0MywgY29uMyk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9tb2RpZnlfbG9jYWwoc2gsIGtleTEsIHBv cnQxKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9tb2RpZnlfbG9jYWwoc2gs IGtleTIsIHBvcnQyKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9tb2RpZnlf bG9jYWwoc2gsIGtleTMsIHBvcnQzKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBoZWxwZXJf Y29tbWl0KCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3BvcnRf ZGVsX2xvY2FsKHNoLCBrZXkxKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfcG9ydF9k ZWxfbG9jYWwoc2gsIGtleTIpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV9wb3J0X2Rl bF9sb2NhbChzaCwga2V5MykgPj0gMCk7CisgICAgc2VtYW5hZ2VfcG9ydF9rZXlfZnJlZShrZXkx KTsKKyAgICBzZW1hbmFnZV9wb3J0X2tleV9mcmVlKGtleTIpOworICAgIHNlbWFuYWdlX3BvcnRf a2V5X2ZyZWUoa2V5Myk7CisgICAgc2VtYW5hZ2VfcG9ydF9mcmVlKHBvcnQxKTsKKyAgICBzZW1h bmFnZV9wb3J0X2ZyZWUocG9ydDIpOworICAgIHNlbWFuYWdlX3BvcnRfZnJlZShwb3J0Myk7Cisg ICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCit2b2lkIHRlc3RfcG9ydF92YWxpZGF0 ZV9sb2NhbCh2b2lkKSB7CisgICAgaGVscGVyX3BvcnRfdmFsaWRhdGVfbG9jYWxfbm9wb3J0KCk7 CisgICAgaGVscGVyX3BvcnRfdmFsaWRhdGVfbG9jYWxfb25lcG9ydCgpOworICAgIGhlbHBlcl9w b3J0X3ZhbGlkYXRlX2xvY2FsX3R3b3BvcnRzKCk7Cit9CgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5h Z2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3RfcG9ydC5oIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRl c3RzL3Rlc3RzL3Rlc3RfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjUyMGY0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVz dHMvdGVzdF9wb3J0LmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBfX1RFU1RfUE9SVF9IX18K KyNkZWZpbmUgX19URVNUX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxDVW5pdC9CYXNpYy5oPgorCitp bnQgcG9ydF90ZXN0X2luaXQodm9pZCk7CitpbnQgcG9ydF90ZXN0X2NsZWFudXAodm9pZCk7Citp bnQgcG9ydF9hZGRfdGVzdHMoQ1VfcFN1aXRlIHN1aXRlKTsKKworLy8gcG9ydF9yZWNvcmQuaAor Cit2b2lkIHRlc3RfcG9ydF9jb21wYXJlKHZvaWQpOwordm9pZCB0ZXN0X3BvcnRfY29tcGFyZTIo dm9pZCk7Cit2b2lkIHRlc3RfcG9ydF9rZXlfY3JlYXRlKHZvaWQpOwordm9pZCB0ZXN0X3BvcnRf a2V5X2V4dHJhY3Qodm9pZCk7Cit2b2lkIHRlc3RfcG9ydF9nZXRfc2V0X3Byb3RvKHZvaWQpOwor dm9pZCB0ZXN0X3BvcnRfZ2V0X3Byb3RvX3N0cih2b2lkKTsKK3ZvaWQgdGVzdF9wb3J0X2dldF9z ZXRfcG9ydCh2b2lkKTsKK3ZvaWQgdGVzdF9wb3J0X2dldF9zZXRfY29uKHZvaWQpOwordm9pZCB0 ZXN0X3BvcnRfY3JlYXRlKHZvaWQpOwordm9pZCB0ZXN0X3BvcnRfY2xvbmUodm9pZCk7CisKKy8v IHBvcnRzX3BvbGljeS5oCisKK3ZvaWQgdGVzdF9wb3J0X3F1ZXJ5KHZvaWQpOwordm9pZCB0ZXN0 X3BvcnRfZXhpc3RzKHZvaWQpOwordm9pZCB0ZXN0X3BvcnRfY291bnQodm9pZCk7Cit2b2lkIHRl c3RfcG9ydF9pdGVyYXRlKHZvaWQpOwordm9pZCB0ZXN0X3BvcnRfbGlzdCh2b2lkKTsKKworLy8g cG9ydHNfbG9jYWwuaAorCit2b2lkIHRlc3RfcG9ydF9tb2RpZnlfZGVsX2xvY2FsKHZvaWQpOwor dm9pZCB0ZXN0X3BvcnRfcXVlcnlfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfcG9ydF9leGlzdHNf bG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfcG9ydF9jb3VudF9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVz dF9wb3J0X2l0ZXJhdGVfbG9jYWwodm9pZCk7Cit2b2lkIHRlc3RfcG9ydF9saXN0X2xvY2FsKHZv aWQpOworLy8gaW50ZXJuYWwKK3ZvaWQgdGVzdF9wb3J0X3ZhbGlkYXRlX2xvY2FsKHZvaWQpOwor CisjZW5kaWYKKwoKZGlmZiAtLWdpdCBhL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90 ZXN0X3NldXNlci5jIGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfc2V1c2Vy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4YWVlMQotLS0gL2Rldi9u dWxsCisrKyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X3NldXNlci5jCkBA IC0wLDAgKzEsMTIwMyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9zZW1hbmFnZS5oPgor I2luY2x1ZGUgPHNlbWFuYWdlL2hhbmRsZS5oPgorI2luY2x1ZGUgPHNlbGludXgvc2VsaW51eC5o PgorI2luY2x1ZGUgPENVbml0L0Jhc2ljLmg+CisKKyNpbmNsdWRlICJ0ZXN0X3NldXNlci5oIgor I2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorCisvLyBUT0RPOiB0ZXN0IGZ1bmN0aW9uIHNlbWFuYWdl X3NldXNlcl9jb21wYXJlMl9xc29ydAorLy8gVE9ETzogc2V1c2VyX3ByaW50OiBlcnJvciBnb3Rv cworLy8gVE9ETzogc2V1c2VyX3BhcnNlOiBlcnJvciBnb3RvcworLy8gVE9ETzogc2V1c2VyX2Zp bGVfZGJhc2VfaW5pdDogbWFrZSBkYmFzZV9maWxlX2luaXQgcmV0dXJuIGVycm9yCisvLyBUT0RP OiBzZW1hbmFnZV9zZXVzZXJfYXVkaXQ6IGxpbmVzIDg4LTkwLCA5My05NAorLy8gVE9ETzogc2Vt YW5hZ2Vfc2V1c2VyX2F1ZGl0OiBtYWtlIGF1ZGl0X29wZW4gcmV0dXJuIGVycm9yCisvLyBUT0RP OiB2YWxpZGF0ZV9oYW5kbGVyOiBlcnJvciBnb3RvcworCitleHRlcm4gc2VtYW5hZ2VfaGFuZGxl X3QgKnNoOworCisjZGVmaW5lIFNFVVNFUl9OT05FWElTVEVOVCAibm9udXNlciIKKyNkZWZpbmUg U0VVU0VSX0RFRkFVTFQgIl9fZGVmYXVsdF9fIgorCitjaGFyICpTRVVTRVI7CitjaGFyICpTRVVT RVJfU0VOQU1FOworY2hhciAqU0VVU0VSX01MU1JBTkdFOworY2hhciAqU0VVU0VSMjsKK2NoYXIg KlNFVVNFUjJfU0VOQU1FOworY2hhciAqU0VVU0VSMl9NTFNSQU5HRTsKK3Vuc2lnbmVkIGludCBT RVVTRVJTX0NPVU5UOworY2hhciAqU0VVU0VSUzsKKworaW50IHByZXBhcmVfcGF0aHMoY2hhciAq KnAxLCBjaGFyICoqcDIsIGNoYXIgKipwMykgeworI2RlZmluZSBQT0xJQ1lfU1RPUkUxICIvdmFy L2xpYi9zZWxpbnV4LyIKKyNkZWZpbmUgUE9MSUNZX1NUT1JFMiAiL2V0Yy9zZWxpbnV4LyIKKyNk ZWZpbmUgUEFUSDEgIi9hY3RpdmUvc2V1c2VycyIKKyNkZWZpbmUgUEFUSDIgIi9zZXVzZXJzIgor CisgICAgY2hhciAqcG9saWN5X3R5cGU7CisKKyAgICBzZWxpbnV4X2dldHBvbGljeXR5cGUoJnBv bGljeV90eXBlKTsKKworICAgICpwMSA9IG1hbGxvYyhzdHJsZW4oUE9MSUNZX1NUT1JFMSkgKyBz dHJsZW4ocG9saWN5X3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbihQ QVRIMSkgKyAxKTsKKworICAgIGlmICgqcDEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgKnAyID0gbWFsbG9jKHN0cmxlbihQT0xJQ1lfU1RPUkUyKSArIHN0cmxlbihwb2xpY3lf dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuKFBBVEgxKSArIDEpOwor ICAgIAorICAgIGlmICgqcDIgPT0gTlVMTCkgeworICAgICAgICBmcmVlKCpwMSk7CisgICAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqcDMgPSBtYWxsb2Moc3RybGVuKFBPTElDWV9TVE9S RTIpICsgc3RybGVuKHBvbGljeV90eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBz dHJsZW4oUEFUSDIpICsgMSk7CisgICAgCisgICAgaWYgKCpwMyA9PSBOVUxMKSB7CisgICAgICAg IGZyZWUoKnAxKTsKKyAgICAgICAgZnJlZSgqcDIpOworICAgICAgICByZXR1cm4gLTE7CisgICAg fQorCisgICAgc3RyY3B5KCpwMSwgUE9MSUNZX1NUT1JFMSk7CisgICAgc3RyY2F0KCpwMSwgcG9s aWN5X3R5cGUpOworICAgIHN0cmNhdCgqcDEsIFBBVEgxKTsKKworICAgIHN0cmNweSgqcDIsIFBP TElDWV9TVE9SRTIpOworICAgIHN0cmNhdCgqcDIsIHBvbGljeV90eXBlKTsKKyAgICBzdHJjYXQo KnAyLCBQQVRIMSk7CisKKyAgICBzdHJjcHkoKnAzLCBQT0xJQ1lfU1RPUkUyKTsKKyAgICBzdHJj YXQoKnAzLCBwb2xpY3lfdHlwZSk7CisgICAgc3RyY2F0KCpwMywgUEFUSDIpOworCisgICAgZnJl ZShwb2xpY3lfdHlwZSk7CisKKyAgICByZXR1cm4gMDsKKworI3VuZGVmIFBPTElDWV9TVE9SRTEK KyN1bmRlZiBQT0xJQ1lfU1RPUkUyCisjdW5kZWYgUEFUSDEKKyN1bmRlZiBQQVRIMgorfQorCitp bnQgc2V1c2VyX3Rlc3RfaW5pdCh2b2lkKQoreworICAgIGNoYXIgKnNldXNlcnNfcGF0aDE7Cisg ICAgY2hhciAqc2V1c2Vyc19wYXRoMjsKKyAgICBjaGFyICpzZXVzZXJzX3BhdGgzOworICAgIEZJ TEUgKmY7CisKKyAgICBpZiAocHJlcGFyZV9wYXRocygmc2V1c2Vyc19wYXRoMSwgJnNldXNlcnNf cGF0aDIsICZzZXVzZXJzX3BhdGgzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor CisgICAgZiA9IGZvcGVuKHNldXNlcnNfcGF0aDEsICJyIik7CisKKyAgICBpZiAoZiA9PSBOVUxM KSB7CisgICAgICAgIGYgPSBmb3BlbihzZXVzZXJzX3BhdGgyLCAiciIpOworCisgICAgICAgIGlm IChmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGYgPSBmb3BlbihzZXVzZXJzX3BhdGgzLCAiciIp OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZiA9PSBOVUxMKSB7CisgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBzZXVzZXJzIGZpbGVcbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorCisgICAgY2hhciBsaW5lWzUxMl07CisgICAgdW5zaWduZWQgaW50IGxpbmVfY291bnRlciA9 IDA7CisgICAgY2hhciAqcDsKKyAgICBjaGFyIHNldXNlcnNfdG1wWzUxMl07CisKKyAgICB3aGls ZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgeworICAgICAgICBpZiAobGluZVswXSA9 PSAnIycgfHwgbGluZVswXSA9PSAnXG4nKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgcCA9IHN0cnRvayhsaW5lLCAiOiIpOworICAgICAgICBzdHJjYXQoc2V1c2Vyc190bXAsICIg Iik7CisgICAgICAgIHN0cmNhdChzZXVzZXJzX3RtcCwgcCk7CisKKyAgICAgICAgaWYgKGxpbmVf Y291bnRlciA9PSAwKSB7CisgICAgICAgICAgICBTRVVTRVIgPSBzdHJkdXAocCk7CisKKyAgICAg ICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIjoiKTsKKyAgICAgICAgICAgIFNFVVNFUl9TRU5BTUUg PSBzdHJkdXAocCk7CisKKyAgICAgICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIjoiKTsKKyAgICAg ICAgICAgIFNFVVNFUl9NTFNSQU5HRSA9IHN0cmR1cChwKTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIGlmIChsaW5lX2NvdW50ZXIgPT0gMSkgeworICAgICAgICAgICAgU0VVU0VSMiA9IHN0cmR1 cChwKTsKKworICAgICAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiOiIpOworICAgICAgICAgICAg U0VVU0VSMl9TRU5BTUUgPSBzdHJkdXAocCk7CisKKyAgICAgICAgICAgIHAgPSBzdHJ0b2soTlVM TCwgIjoiKTsKKyAgICAgICAgICAgIFNFVVNFUjJfTUxTUkFOR0UgPSBzdHJkdXAocCk7CisgICAg ICAgIH0KKworICAgICAgICBsaW5lX2NvdW50ZXIrKzsKKyAgICB9CisKKyAgICBTRVVTRVJTID0g c3RyZHVwKHNldXNlcnNfdG1wKTsKKyAgICAKKyAgICBTRVVTRVJTX0NPVU5UID0gbGluZV9jb3Vu dGVyOworCisgICAgaWYgKFNFVVNFUlNfQ09VTlQgPT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIlNFVVNFUlNfQ09VTlQgaXMgemVyb1xuIik7CisgICAgICAgIHJldHVybiAxOworICAg IH0KKworICAgIC8vIGRlbGV0ZSBsb2NhbCBzZXVzZXJzICh3cml0dGVuIGJlY2F1c2Ugb2YgUkhF TCA2KQorICAgIHNlbWFuYWdlX3NldXNlcl9rZXlfdCAqa2V5ID0gTlVMTDsKKyAgICBzZW1hbmFn ZV9zZXVzZXJfdCAqKnJlY29yZHMgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7 CisgICAgCisgICAgaWYgKChzaCA9IHNlbWFuYWdlX2hhbmRsZV9jcmVhdGUoKSkgPT0gTlVMTCkg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGRlbGV0aW5nIGxvY2FsIHNldXNlcnNc biIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoc2VtYW5hZ2VfY29ubmVj dChzaCkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgZGVsZXRpbmcgbG9j YWwgc2V1c2Vyc1xuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChzZW1h bmFnZV9iZWdpbl90cmFuc2FjdGlvbihzaCkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy LCAiRXJyb3IgZGVsZXRpbmcgbG9jYWwgc2V1c2Vyc1xuIik7CisgICAgICAgIHJldHVybiAxOwor ICAgIH0KKworICAgIGlmIChzZW1hbmFnZV9zZXVzZXJfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMs ICZjb3VudCkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgZGVsZXRpbmcg bG9jYWwgc2V1c2Vyc1xuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGZvciAo dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBpZiAoc2VtYW5h Z2Vfc2V1c2VyX2tleV9leHRyYWN0KHNoLCByZWNvcmRzW2ldLCAma2V5KSA8IDApIHsKKyAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgZGVsZXRpbmcgbG9jYWwgc2V1c2Vyc1xuIik7 CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZW1hbmFn ZV9zZXVzZXJfZGVsX2xvY2FsKHNoLCBrZXkpIDwgMCkgeworICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJFcnJvciBkZWxldGluZyBsb2NhbCBzZXVzZXJzXG4iKTsKKyAgICAgICAgICAgIHJl dHVybiAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlbWFuYWdlX3NldXNlcl9jb3Vu dF9sb2NhbChzaCwgJmNvdW50KSA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv ciBkZWxldGluZyBsb2NhbCBzZXVzZXJzXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor ICAgIAorICAgIGlmIChjb3VudCAhPSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy b3IgZGVsZXRpbmcgbG9jYWwgc2V1c2Vyc1xuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0K KyAgICAKKyAgICBpZiAoc2VtYW5hZ2VfY29tbWl0KHNoKSA8IDApIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJFcnJvciBkZWxldGluZyBsb2NhbCBzZXVzZXJzXG4iKTsKKyAgICAgICAgcmV0 dXJuIDE7CisgICAgfQorCisgICAgaWYgKHNlbWFuYWdlX2Rpc2Nvbm5lY3Qoc2gpIDwgMCkgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGRlbGV0aW5nIGxvY2FsIHNldXNlcnNcbiIp OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBzZW1hbmFnZV9oYW5kbGVfZGVzdHJv eShzaCk7CisgICAgZnJlZShzZXVzZXJzX3BhdGgxKTsKKyAgICBmcmVlKHNldXNlcnNfcGF0aDIp OworICAgIGZyZWUoc2V1c2Vyc19wYXRoMyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNldXNl cl90ZXN0X2NsZWFudXAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHNldXNlcl9hZGRf dGVzdHMoQ1VfcFN1aXRlIHN1aXRlKQoreworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAic2V1c2Vy X2tleV9jcmVhdGUiLCAgICAgICAgIHRlc3Rfc2V1c2VyX2tleV9jcmVhdGUpOworICAgIENVX2Fk ZF90ZXN0KHN1aXRlLCAic2V1c2VyX2tleV9leHRyYWN0IiwgICAgICAgIHRlc3Rfc2V1c2VyX2tl eV9leHRyYWN0KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInNldXNlcl9jb21wYXJlIiwgICAg ICAgICAgICB0ZXN0X3NldXNlcl9jb21wYXJlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInNl dXNlcl9jb21wYXJlMiIsICAgICAgICAgICB0ZXN0X3NldXNlcl9jb21wYXJlMik7CisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJzZXVzZXJfZ2V0X3NldF9uYW1lIiwgICAgICAgdGVzdF9zZXVzZXJf Z2V0X3NldF9uYW1lKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInNldXNlcl9nZXRfc2V0X3Nl bmFtZSIsICAgICB0ZXN0X3NldXNlcl9nZXRfc2V0X3NlbmFtZSk7CisgICAgQ1VfYWRkX3Rlc3Qo c3VpdGUsICJzZXVzZXJfZ2V0X3NldF9tbHNyYW5nZSIsIHRlc3Rfc2V1c2VyX2dldF9zZXRfbWxz cmFuZ2UpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAic2V1c2VyX2Nsb25lIiwgICAgICAgICAg ICAgIHRlc3Rfc2V1c2VyX2Nsb25lKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInNldXNlcl9j cmVhdGUiLCAgICAgICAgICAgICB0ZXN0X3NldXNlcl9jcmVhdGUpOworCisgICAgQ1VfYWRkX3Rl c3Qoc3VpdGUsICJzZXVzZXJfcXVlcnkiLCAgICAgICAgICAgICAgdGVzdF9zZXVzZXJfcXVlcnkp OworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAic2V1c2VyX2V4aXN0cyIsICAgICAgICAgICAgIHRl c3Rfc2V1c2VyX2V4aXN0cyk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJzZXVzZXJfY291bnQi LCAgICAgICAgICAgICAgdGVzdF9zZXVzZXJfY291bnQpOworICAgIENVX2FkZF90ZXN0KHN1aXRl LCAic2V1c2VyX2l0ZXJhdGUiLCAgICAgICAgICAgIHRlc3Rfc2V1c2VyX2l0ZXJhdGUpOworICAg IENVX2FkZF90ZXN0KHN1aXRlLCAic2V1c2VyX2xpc3QiLCAgICAgICAgICAgICAgIHRlc3Rfc2V1 c2VyX2xpc3QpOworCisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJzZXVzZXJfbW9kaWZ5X2RlbF9s b2NhbCIsIHRlc3Rfc2V1c2VyX21vZGlmeV9kZWxfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1 aXRlLCAic2V1c2VyX3F1ZXJ5X2xvY2FsIiwgICAgICAgIHRlc3Rfc2V1c2VyX3F1ZXJ5X2xvY2Fs KTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInNldXNlcl9leGlzdHNfbG9jYWwiLCAgICAgICB0 ZXN0X3NldXNlcl9leGlzdHNfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAic2V1c2Vy X2NvdW50X2xvY2FsIiwgICAgICAgIHRlc3Rfc2V1c2VyX2NvdW50X2xvY2FsKTsKKyAgICBDVV9h ZGRfdGVzdChzdWl0ZSwgInNldXNlcl9pdGVyYXRlX2xvY2FsIiwgICAgICB0ZXN0X3NldXNlcl9p dGVyYXRlX2xvY2FsKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInNldXNlcl9saXN0X2xvY2Fs IiwgICAgICAgICB0ZXN0X3NldXNlcl9saXN0X2xvY2FsKTsKKyAgICAgCisJcmV0dXJuIDA7Cit9 CisKKy8vIEZ1bmN0aW9uIHNldXNlcl9rZXlfY3JlYXRlCisKK3ZvaWQgaGVscGVyX3NldXNlcl9r ZXlfY3JlYXRlKGxldmVsX3QgbGV2ZWwpIHsKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X3QgKmtl eSA9IE5VTEw7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgLy8gbmFtZSA9PSAi IgorICAgIGtleSA9IE5VTEw7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2tleV9j cmVhdGUoc2gsICIiLCAma2V5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtl eSk7CisKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X2ZyZWUoa2V5KTsKKworICAgIC8vIG5hbWUg PT0gInRlc3R1c2VyIgorICAgIGtleSA9IE5VTEw7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vf c2V1c2VyX2tleV9jcmVhdGUoc2gsICJ0ZXN0dXNlciIsICZrZXkpID49IDApOworICAgIENVX0FT U0VSVF9QVFJfTk9UX05VTEwoa2V5KTsKKworICAgIHNlbWFuYWdlX3NldXNlcl9rZXlfZnJlZShr ZXkpOworCisgICAgLy8gJmtleSA9PSBOVUxMCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFn ZV9zZXVzZXJfa2V5X2NyZWF0ZShzaCwgInRlc3R1c2VyIiwgTlVMTCksIFNJR1NFR1YpOworCisg ICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3Rfc2V1c2VyX2tleV9jcmVh dGUodm9pZCkgeworICAgIGhlbHBlcl9zZXVzZXJfa2V5X2NyZWF0ZShTSF9DT05ORUNUKTsKKyAg ICBoZWxwZXJfc2V1c2VyX2tleV9jcmVhdGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBz ZXVzZXJfa2V5X2V4dHJhY3QKKy8vIFRPRE86IG1ha2Ugc2VtYW5hZ2Vfc2V1c2VyX2tleV9jcmVh dGUgcmV0dXJuIGVycm9yCisKKyNkZWZpbmUgU0tfTlVMTCAxCisjZGVmaW5lIFNLX05FVyAyCisj ZGVmaW5lIFNLX0lOREVYIDMKKyNkZWZpbmUgU0tfS0VZX05VTEwgNAordm9pZCBoZWxwZXJfc2V1 c2VyX2tleV9leHRyYWN0KGxldmVsX3QgbGV2ZWwsIGludCBtb2RlKSB7CisgICAgc2VtYW5hZ2Vf c2V1c2VyX3QgKnNldXNlcjsKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X3QgKmtleTsKKyAgICBp bnQgcmVzdWx0OworICAgIAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBzd2l0Y2gg KG1vZGUpIHsKKyAgICAgICAgY2FzZSBTS19OVUxMOgorICAgICAgICAgICAgc2V1c2VyID0gTlVM TDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNLX05FVzoKKyAgICAgICAgICAg IHNldXNlciA9IGdldF9zZXVzZXJfbmV3KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSBTS19JTkRFWDoKKyAgICAgICAgICAgIHNldXNlciA9IGdldF9zZXVzZXJfbnRoKDApOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0tfS0VZX05VTEw6CisgICAgICAgICAg ICBzZXVzZXIgPSBnZXRfc2V1c2VyX250aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgQ1VfRkFJTF9GQVRBTCgiSW52YWxpZCBtb2RlXG4iKTsK KyAgICB9CisKKyAgICBpZiAobW9kZSA9PSBTS19LRVlfTlVMTCkKKyAgICAgICAgcmVzdWx0ID0g c2VtYW5hZ2Vfc2V1c2VyX2tleV9leHRyYWN0KHNoLCBzZXVzZXIsIE5VTEwpOworICAgIGVsc2UK KyAgICAgICAgcmVzdWx0ID0gc2VtYW5hZ2Vfc2V1c2VyX2tleV9leHRyYWN0KHNoLCBzZXVzZXIs ICZrZXkpOworCisgICAgQ1VfQVNTRVJUKHJlc3VsdCA+PSAwKTsKKworICAgIHJlc3VsdCA9IHNl bWFuYWdlX3NldXNlcl9jb21wYXJlKHNldXNlciwga2V5KTsKKworICAgIENVX0FTU0VSVChyZXN1 bHQgPT0gMCk7CisKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X2ZyZWUoa2V5KTsKKyAgICBzZW1h bmFnZV9zZXVzZXJfZnJlZShzZXVzZXIpOworCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOwor fQorCit2b2lkIHRlc3Rfc2V1c2VyX2tleV9leHRyYWN0KHZvaWQpIHsKKyAgICBDVV9BU1NFUlRf U0lHTkFMKGhlbHBlcl9zZXVzZXJfa2V5X2V4dHJhY3QoU0hfQ09OTkVDVCwgU0tfTlVMTCksIFNJ R1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9rZXlfZXh0cmFjdChT SF9DT05ORUNULCBTS19LRVlfTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsK KworICAgIC8vIEZJWE1FCisgICAgLy9oZWxwZXJfc2V1c2VyX2tleV9leHRyYWN0KFNIX0NPTk5F Q1QsIFNLX05FVyk7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1c2VyX2tleV9leHRy YWN0KFNIX0NPTk5FQ1QsIFNLX05FVyksIFNJR1NFR1YpOworCisgICAgaGVscGVyX3NldXNlcl9r ZXlfZXh0cmFjdChTSF9DT05ORUNULCBTS19JTkRFWCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFM KGhlbHBlcl9zZXVzZXJfa2V5X2V4dHJhY3QoU0hfVFJBTlMsIFNLX05VTEwpLCBTSUdTRUdWKTsK KyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfa2V5X2V4dHJhY3QoU0hfVFJBTlMs IFNLX0tFWV9OVUxMKSwgU0lHU0VHVik7CisKKyAgICAvLyBGSVhNRQorICAgIC8vaGVscGVyX3Nl dXNlcl9rZXlfZXh0cmFjdChTSF9UUkFOUywgU0tfTkVXKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFM KGhlbHBlcl9zZXVzZXJfa2V5X2V4dHJhY3QoU0hfVFJBTlMsIFNLX05FVyksIFNJR1NFR1YpOwor CisgICAgaGVscGVyX3NldXNlcl9rZXlfZXh0cmFjdChTSF9UUkFOUywgU0tfSU5ERVgpOworfQor I3VuZGVmIFNLX05VTEwKKyN1bmRlZiBTS19ORVcKKyN1bmRlZiBTS19JTkRFWAorI3VuZGVmIFNL X0tFWV9OVUxMCisKKy8vIEZ1bmN0aW9uIHNldXNlcl9jb21wYXJlCisKK3ZvaWQgaGVscGVyX3Nl dXNlcl9jb21wYXJlKGxldmVsX3QgbGV2ZWwsIGludCBzZXVzZXJfaW5kZXgxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHNldXNlcl9pbmRleDIpIHsKKyAgICBzZW1hbmFnZV9zZXVz ZXJfdCAqc2V1c2VyOworICAgIHNlbWFuYWdlX3NldXNlcl9rZXlfdCAqa2V5OworICAgIGludCBy ZXN1bHQ7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgc2V1c2VyID0gZ2V0X3Nl dXNlcl9udGgoc2V1c2VyX2luZGV4MSk7CisKKyAgICBrZXkgPSBnZXRfc2V1c2VyX2tleV9udGgo c2V1c2VyX2luZGV4Mik7CisKKyAgICByZXN1bHQgPSBzZW1hbmFnZV9zZXVzZXJfY29tcGFyZShz ZXVzZXIsIGtleSk7CisKKyAgICBpZiAoc2V1c2VyX2luZGV4MSA9PSBzZXVzZXJfaW5kZXgyKSB7 CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPT0gMCk7CisgICAgfQorICAgIGVsc2UgeworICAg ICAgICBDVV9BU1NFUlQocmVzdWx0ICE9IDApOworICAgIH0KKworICAgIHNlbWFuYWdlX3NldXNl cl9mcmVlKHNldXNlcik7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX2tleV9mcmVlKGtleSk7CisgICAg Y2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3Rfc2V1c2VyX2NvbXBhcmUodm9p ZCkgeworICAgIGhlbHBlcl9zZXVzZXJfY29tcGFyZShTSF9DT05ORUNULCBJX0ZJUlNULCAgSV9G SVJTVCk7CisgICAgaGVscGVyX3NldXNlcl9jb21wYXJlKFNIX0NPTk5FQ1QsIElfRklSU1QsICBJ X1NFQ09ORCk7CisgICAgaGVscGVyX3NldXNlcl9jb21wYXJlKFNIX0NPTk5FQ1QsIElfU0VDT05E LCBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfc2V1c2VyX2NvbXBhcmUoU0hfQ09OTkVDVCwgSV9TRUNP TkQsIElfU0VDT05EKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9jb21w YXJlKFNIX0NPTk5FQ1QsIElfTlVMTCwgIElfRklSU1QpLAorICAgICAgICAgICAgICAgICAgICAg U0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1c2VyX2NvbXBhcmUoU0hf Q09OTkVDVCwgSV9GSVJTVCwgSV9OVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1Yp OworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9jb21wYXJlKFNIX0NPTk5FQ1Qs IElfTlVMTCwgIElfTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKworICAg IGhlbHBlcl9zZXVzZXJfY29tcGFyZShTSF9UUkFOUywgSV9GSVJTVCwgIElfRklSU1QpOworICAg IGhlbHBlcl9zZXVzZXJfY29tcGFyZShTSF9UUkFOUywgSV9GSVJTVCwgIElfU0VDT05EKTsKKyAg ICBoZWxwZXJfc2V1c2VyX2NvbXBhcmUoU0hfVFJBTlMsIElfU0VDT05ELCBJX0ZJUlNUKTsKKyAg ICBoZWxwZXJfc2V1c2VyX2NvbXBhcmUoU0hfVFJBTlMsIElfU0VDT05ELCBJX1NFQ09ORCk7CisK KyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfY29tcGFyZShTSF9UUkFOUywgSV9O VUxMLCBJX0ZJUlNUKSwgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1 c2VyX2NvbXBhcmUoU0hfVFJBTlMsIElfRklSU1QsIElfTlVMTCksIFNJR1NFR1YpOworICAgIENV X0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9jb21wYXJlKFNIX1RSQU5TLCBJX05VTEwsIElf TlVMTCksIFNJR1NFR1YpOworfQorCisvLyBGdW5jdGlvbiBzZXVzZXJfY29tcGFyZTIKKwordm9p ZCBoZWxwZXJfc2V1c2VyX2NvbXBhcmUyKGxldmVsX3QgbGV2ZWwsIGludCBzZXVzZXJfaW5kZXgx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXVzZXJfaW5kZXgyKSB7CisgICAg c2VtYW5hZ2Vfc2V1c2VyX3QgKnNldXNlcjE7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX3QgKnNldXNl cjI7CisgICAgaW50IHJlc3VsdDsKKworICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICBz ZXVzZXIxID0gZ2V0X3NldXNlcl9udGgoc2V1c2VyX2luZGV4MSk7CisgICAgc2V1c2VyMiA9IGdl dF9zZXVzZXJfbnRoKHNldXNlcl9pbmRleDIpOworCisgICAgcmVzdWx0ID0gc2VtYW5hZ2Vfc2V1 c2VyX2NvbXBhcmUyKHNldXNlcjEsIHNldXNlcjIpOworCisgICAgaWYgKHNldXNlcl9pbmRleDEg PT0gc2V1c2VyX2luZGV4MikgeworICAgICAgICBDVV9BU1NFUlQocmVzdWx0ID09IDApOworICAg IH0KKyAgICBlbHNlIHsKKyAgICAgICAgQ1VfQVNTRVJUKHJlc3VsdCAhPSAwKTsKKyAgICB9CisK KyAgICBzZW1hbmFnZV9zZXVzZXJfZnJlZShzZXVzZXIxKTsKKyAgICBzZW1hbmFnZV9zZXVzZXJf ZnJlZShzZXVzZXIyKTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0 ZXN0X3NldXNlcl9jb21wYXJlMih2b2lkKSB7CisgICAgaGVscGVyX3NldXNlcl9jb21wYXJlMihT SF9DT05ORUNULCBJX0ZJUlNULCAgSV9GSVJTVCk7CisgICAgaGVscGVyX3NldXNlcl9jb21wYXJl MihTSF9DT05ORUNULCBJX0ZJUlNULCAgSV9TRUNPTkQpOworICAgIGhlbHBlcl9zZXVzZXJfY29t cGFyZTIoU0hfQ09OTkVDVCwgSV9TRUNPTkQsIElfRklSU1QpOworICAgIGhlbHBlcl9zZXVzZXJf Y29tcGFyZTIoU0hfQ09OTkVDVCwgSV9TRUNPTkQsIElfU0VDT05EKTsKKworICAgIENVX0FTU0VS VF9TSUdOQUwoaGVscGVyX3NldXNlcl9jb21wYXJlMihTSF9DT05ORUNULCBJX05VTEwsICBJX0ZJ UlNUKSwKKyAgICAgICAgICAgICAgICAgICAgIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdO QUwoaGVscGVyX3NldXNlcl9jb21wYXJlMihTSF9DT05ORUNULCBJX0ZJUlNULCBJX05VTEwpLAor ICAgICAgICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxw ZXJfc2V1c2VyX2NvbXBhcmUyKFNIX0NPTk5FQ1QsIElfTlVMTCwgIElfTlVMTCksCisgICAgICAg ICAgICAgICAgICAgICBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9zZXVzZXJfY29tcGFyZTIoU0hf VFJBTlMsIElfRklSU1QsICBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfc2V1c2VyX2NvbXBhcmUyKFNI X1RSQU5TLCBJX0ZJUlNULCAgSV9TRUNPTkQpOworICAgIGhlbHBlcl9zZXVzZXJfY29tcGFyZTIo U0hfVFJBTlMsIElfU0VDT05ELCBJX0ZJUlNUKTsKKyAgICBoZWxwZXJfc2V1c2VyX2NvbXBhcmUy KFNIX1RSQU5TLCBJX1NFQ09ORCwgSV9TRUNPTkQpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTCho ZWxwZXJfc2V1c2VyX2NvbXBhcmUyKFNIX1RSQU5TLCBJX05VTEwsIElfRklSU1QpLAorICAgICAg ICAgICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1 c2VyX2NvbXBhcmUyKFNIX1RSQU5TLCBJX0ZJUlNULCBJX05VTEwpLAorICAgICAgICAgICAgICAg ICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1c2VyX2NvbXBh cmUyKFNIX1RSQU5TLCBJX05VTEwsIElfTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdT RUdWKTsKK30KKworLy8gRnVuY3Rpb24gc2V1c2VyX2dldF9uYW1lLCBzZXVzZXJfc2V0X25hbWUK Kwordm9pZCBoZWxwZXJfc2V1c2VyX2dldF9zZXRfbmFtZShsZXZlbF90IGxldmVsLCBpbnQgc2V1 c2VyX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpu YW1lKSB7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX3QgKnVzZXI7CisgICAgY29uc3QgY2hhciAqbmV3 X25hbWUgPSBOVUxMOworICAgIAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisKKyAgICB1c2Vy ID0gZ2V0X3NldXNlcl9udGgoc2V1c2VyX2luZGV4KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9zZXVzZXJfc2V0X25hbWUoc2gsIHVzZXIsIG5hbWUpID49IDApOworCisgICAgbmV3X25hbWUg PSBzZW1hbmFnZV9zZXVzZXJfZ2V0X25hbWUodXNlcik7CisKKyAgICBDVV9BU1NFUlRfUFRSX05P VF9OVUxMKG5ld19uYW1lKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKG5ld19uYW1lLCBu YW1lKTsKKworICAgIHNlbWFuYWdlX3NldXNlcl9mcmVlKHVzZXIpOworICAgIGNsZWFudXBfaGFu ZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X3NldXNlcl9nZXRfc2V0X25hbWUodm9pZCkgewor ICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9nZXRfc2V0X25hbWUoU0hfQ09OTkVD VCwgSV9GSVJTVCwgTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBD VV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9uYW1lKFNIX0NPTk5FQ1QsIElf TlVMTCwgInRlc3R1c2VyIiksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKworICAg IGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9uYW1lKFNIX0NPTk5FQ1QsIElfRklSU1QsICJ0ZXN0c2V1 c2VyIik7CisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X25hbWUoU0hfQ09OTkVDVCwgSV9GSVJT VCwgIiIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9uYW1lKFNIX0NPTk5FQ1QsIElfU0VD T05ELCAidGVzdHNldXNlciIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9uYW1lKFNIX0NP Tk5FQ1QsIElfU0VDT05ELCAiIik7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVz ZXJfZ2V0X3NldF9uYW1lKFNIX1RSQU5TLCBJX0ZJUlNULCBOVUxMKSwKKyAgICAgICAgICAgICAg ICAgICAgIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9nZXRf c2V0X25hbWUoU0hfVFJBTlMsIElfTlVMTCwgInRlc3R1c2VyIiksCisgICAgICAgICAgICAgICAg ICAgICBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9uYW1lKFNIX1RSQU5T LCBJX0ZJUlNULCAidGVzdHNldXNlciIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9uYW1l KFNIX1RSQU5TLCBJX0ZJUlNULCAiIik7CisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X25hbWUo U0hfVFJBTlMsIElfU0VDT05ELCAidGVzdHNldXNlciIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0 X3NldF9uYW1lKFNIX1RSQU5TLCBJX1NFQ09ORCwgIiIpOworfQorCisvLyBGdW5jdGlvbiBzZXVz ZXJfZ2V0X3NlbmFtZSwgc2V1c2VyX3NldF9zZW5hbWUKKwordm9pZCBoZWxwZXJfc2V1c2VyX2dl dF9zZXRfc2VuYW1lKGxldmVsX3QgbGV2ZWwsIGludCBzZXVzZXJfaW5kZXgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VuYW1lKSB7CisgICAgc2VtYW5h Z2Vfc2V1c2VyX3QgKnVzZXI7CisgICAgY29uc3QgY2hhciAqb2xkX3NlbmFtZSA9IE5VTEw7Cisg ICAgY29uc3QgY2hhciAqbmV3X3NlbmFtZSA9IE5VTEw7CisgICAgCisgICAgc2V0dXBfaGFuZGxl KGxldmVsKTsKKworICAgIHVzZXIgPSBnZXRfc2V1c2VyX250aChzZXVzZXJfaW5kZXgpOworCisg ICAgb2xkX3NlbmFtZSA9IHNlbWFuYWdlX3NldXNlcl9nZXRfc2VuYW1lKHVzZXIpOworCisgICAg Q1VfQVNTRVJUX1BUUl9OT1RfTlVMTChvbGRfc2VuYW1lKTsKKworICAgIENVX0FTU0VSVChzZW1h bmFnZV9zZXVzZXJfc2V0X3NlbmFtZShzaCwgdXNlciwgc2VuYW1lKSA+PSAwKTsKKworICAgIG5l d19zZW5hbWUgPSBzZW1hbmFnZV9zZXVzZXJfZ2V0X3NlbmFtZSh1c2VyKTsKKworICAgIENVX0FT U0VSVF9QVFJfTk9UX05VTEwobmV3X3NlbmFtZSk7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVB TChuZXdfc2VuYW1lLCBzZW5hbWUpOworCisgICAgc2VtYW5hZ2Vfc2V1c2VyX2ZyZWUodXNlcik7 CisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3Rfc2V1c2VyX2dldF9z ZXRfc2VuYW1lKHZvaWQpIHsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfZ2V0 X3NldF9zZW5hbWUoU0hfQ09OTkVDVCwgSV9GSVJTVCwgTlVMTCksCisgICAgICAgICAgICAgICAg ICAgICBTSUdTRUdWKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfZ2V0X3Nl dF9zZW5hbWUoU0hfQ09OTkVDVCwgSV9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNldXNlciIpLCBTSUdTRUdWKTsKKworICAgIGhl bHBlcl9zZXVzZXJfZ2V0X3NldF9zZW5hbWUoU0hfQ09OTkVDVCwgSV9GSVJTVCwgICJ0ZXN0c2V1 c2VyIik7CisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X3NlbmFtZShTSF9DT05ORUNULCBJX0ZJ UlNULCAgIiIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9zZW5hbWUoU0hfQ09OTkVDVCwg SV9TRUNPTkQsICJ0ZXN0c2V1c2VyIik7CisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X3NlbmFt ZShTSF9DT05ORUNULCBJX1NFQ09ORCwgIiIpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxw ZXJfc2V1c2VyX2dldF9zZXRfc2VuYW1lKFNIX1RSQU5TLCBJX0ZJUlNULCBOVUxMKSwKKyAgICAg ICAgICAgICAgICAgICAgIFNJR1NFR1YpOworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3Nl dXNlcl9nZXRfc2V0X3NlbmFtZShTSF9UUkFOUywgSV9OVUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNldXNlciIpLCBTSUdTRUdWKTsK KworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9zZW5hbWUoU0hfVFJBTlMsIElfRklSU1QsICAi dGVzdHNldXNlciIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9zZW5hbWUoU0hfVFJBTlMs IElfRklSU1QsICAiIik7CisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X3NlbmFtZShTSF9UUkFO UywgSV9TRUNPTkQsICJ0ZXN0c2V1c2VyIik7CisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X3Nl bmFtZShTSF9UUkFOUywgSV9TRUNPTkQsICIiKTsKK30KKworLy8gRnVuY3Rpb24gc2V1c2VyX2dl dF9tbHNyYW5nZSwgc2V1c2VyX3NldF9tbHNyYW5nZQorCit2b2lkIGhlbHBlcl9zZXVzZXJfZ2V0 X3NldF9tbHNyYW5nZShsZXZlbF90IGxldmVsLCBpbnQgc2V1c2VyX2luZGV4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWxzcmFuZ2UpIHsKKyAgICBz ZW1hbmFnZV9zZXVzZXJfdCAqdXNlcjsKKyAgICBjb25zdCBjaGFyICpvbGRfbWxzcmFuZ2UgPSBO VUxMOworICAgIGNvbnN0IGNoYXIgKm5ld19tbHNyYW5nZSA9IE5VTEw7CisgICAgCisgICAgc2V0 dXBfaGFuZGxlKGxldmVsKTsKKworICAgIHVzZXIgPSBnZXRfc2V1c2VyX250aChzZXVzZXJfaW5k ZXgpOworCisgICAgb2xkX21sc3JhbmdlID0gc2VtYW5hZ2Vfc2V1c2VyX2dldF9tbHNyYW5nZSh1 c2VyKTsKKworICAgIENVX0FTU0VSVF9QVFJfTk9UX05VTEwob2xkX21sc3JhbmdlKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfc2V0X21sc3JhbmdlKHNoLCB1c2VyLCBtbHNyYW5n ZSkgPj0gMCk7CisKKyAgICBuZXdfbWxzcmFuZ2UgPSBzZW1hbmFnZV9zZXVzZXJfZ2V0X21sc3Jh bmdlKHVzZXIpOworCisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChuZXdfbWxzcmFuZ2UpOwor ICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwobmV3X21sc3JhbmdlLCBtbHNyYW5nZSk7CisKKyAg ICBzZW1hbmFnZV9zZXVzZXJfZnJlZSh1c2VyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7 Cit9CisKK3ZvaWQgdGVzdF9zZXVzZXJfZ2V0X3NldF9tbHNyYW5nZSh2b2lkKSB7CisgICAgQ1Vf QVNTRVJUX1NJR05BTChoZWxwZXJfc2V1c2VyX2dldF9zZXRfbWxzcmFuZ2UoU0hfQ09OTkVDVCwg SV9GSVJTVCwgTlVMTCksCisgICAgICAgICAgICAgICAgICAgICBTSUdTRUdWKTsKKyAgICBDVV9B U1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9tbHNyYW5nZShTSF9DT05ORUNULCBJ X05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInRlc3RtbHNyYW5nZSIpLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3Nl dF9tbHNyYW5nZShTSF9DT05ORUNULCBJX0ZJUlNULCAgInRlc3RtbHNyYW5nZSIpOworICAgIGhl bHBlcl9zZXVzZXJfZ2V0X3NldF9tbHNyYW5nZShTSF9DT05ORUNULCBJX0ZJUlNULCAgIiIpOwor ICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9tbHNyYW5nZShTSF9DT05ORUNULCBJX1NFQ09ORCwg InRlc3RtbHNyYW5nZSIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9tbHNyYW5nZShTSF9D T05ORUNULCBJX1NFQ09ORCwgIiIpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1 c2VyX2dldF9zZXRfbWxzcmFuZ2UoU0hfVFJBTlMsIElfRklSU1QsIE5VTEwpLAorICAgICAgICAg ICAgICAgICAgICAgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1c2Vy X2dldF9zZXRfbWxzcmFuZ2UoU0hfVFJBTlMsIElfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdG1sc3JhbmdlIiksIFNJR1NFR1Yp OworCisgICAgaGVscGVyX3NldXNlcl9nZXRfc2V0X21sc3JhbmdlKFNIX1RSQU5TLCBJX0ZJUlNU LCAgInRlc3RtbHNyYW5nZSIpOworICAgIGhlbHBlcl9zZXVzZXJfZ2V0X3NldF9tbHNyYW5nZShT SF9UUkFOUywgSV9GSVJTVCwgICIiKTsKKyAgICBoZWxwZXJfc2V1c2VyX2dldF9zZXRfbWxzcmFu Z2UoU0hfVFJBTlMsIElfU0VDT05ELCAidGVzdG1sc3JhbmdlIik7CisgICAgaGVscGVyX3NldXNl cl9nZXRfc2V0X21sc3JhbmdlKFNIX1RSQU5TLCBJX1NFQ09ORCwgIiIpOworfQorCisvLyBGdW5j dGlvbiBzZXVzZXJfY3JlYXRlCisKK3ZvaWQgaGVscGVyX3NldXNlcl9jcmVhdGUobGV2ZWxfdCBs ZXZlbCkgeworICAgIHNlbWFuYWdlX3NldXNlcl90ICpzZXVzZXI7CisgICAgCisgICAgc2V0dXBf aGFuZGxlKGxldmVsKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfY3JlYXRlKHNo LCAmc2V1c2VyKSA+PSAwKTsKKworICAgIENVX0FTU0VSVF9QVFJfTlVMTChzZW1hbmFnZV9zZXVz ZXJfZ2V0X25hbWUoc2V1c2VyKSk7CisgICAgQ1VfQVNTRVJUX1BUUl9OVUxMKHNlbWFuYWdlX3Nl dXNlcl9nZXRfc2VuYW1lKHNldXNlcikpOworICAgIENVX0FTU0VSVF9QVFJfTlVMTChzZW1hbmFn ZV9zZXVzZXJfZ2V0X21sc3JhbmdlKHNldXNlcikpOworCisgICAgc2VtYW5hZ2Vfc2V1c2VyX2Zy ZWUoc2V1c2VyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShsZXZlbCk7Cit9CisKK3ZvaWQgdGVzdF9z ZXVzZXJfY3JlYXRlKHZvaWQpIHsKKyAgICAvLyBGSVhNRQorICAgIC8vQ1VfQVNTRVJUX1NJR05B TChoZWxwZXJfc2V1c2VyX2NyZWF0ZShTSF9OVUxMKSwgU0lHU0VHVik7CisgICAgaGVscGVyX3Nl dXNlcl9jcmVhdGUoU0hfTlVMTCk7CisKKyAgICAvLyBGSVhNRQorICAgIC8vQ1VfQVNTRVJUX1NJ R05BTChoZWxwZXJfc2V1c2VyX2NyZWF0ZShTSF9IQU5ETEUpLCBTSUdTRUdWKTsKKyAgICBoZWxw ZXJfc2V1c2VyX2NyZWF0ZShTSF9IQU5ETEUpOworCisgICAgaGVscGVyX3NldXNlcl9jcmVhdGUo U0hfQ09OTkVDVCk7CisgICAgaGVscGVyX3NldXNlcl9jcmVhdGUoU0hfVFJBTlMpOworfQorCisv LyBGdW5jdGlvbiBzZXVzZXJfY2xvbmUKKy8vIFRPRE86IGVycm9yIGdvdG9zCisKK3ZvaWQgaGVs cGVyX3NldXNlcl9jbG9uZShsZXZlbF90IGxldmVsLCBpbnQgc2V1c2VyX2luZGV4KSB7CisgICAg c2VtYW5hZ2Vfc2V1c2VyX3QgKnNldXNlcjsKKyAgICBzZW1hbmFnZV9zZXVzZXJfdCAqc2V1c2Vy X2Nsb25lOworICAgIGNvbnN0IGNoYXIgKnN0cjsKKyAgICBjb25zdCBjaGFyICpzdHJfY2xvbmU7 CisgICAgCisgICAgc2V0dXBfaGFuZGxlKGxldmVsKTsKKworICAgIHNldXNlciA9IGdldF9zZXVz ZXJfbnRoKHNldXNlcl9pbmRleCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2Ns b25lKHNoLCBzZXVzZXIsICZzZXVzZXJfY2xvbmUpID49IDApOworCisgICAgc3RyID0gc2VtYW5h Z2Vfc2V1c2VyX2dldF9uYW1lKHNldXNlcik7CisgICAgc3RyX2Nsb25lID0gc2VtYW5hZ2Vfc2V1 c2VyX2dldF9uYW1lKHNldXNlcl9jbG9uZSk7CisKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFM KHN0ciwgc3RyX2Nsb25lKTsKKworICAgIHN0ciA9IHNlbWFuYWdlX3NldXNlcl9nZXRfc2VuYW1l KHNldXNlcik7CisgICAgc3RyX2Nsb25lID0gc2VtYW5hZ2Vfc2V1c2VyX2dldF9zZW5hbWUoc2V1 c2VyX2Nsb25lKTsKKworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc3RyLCBzdHJfY2xvbmUp OworCisgICAgc3RyID0gc2VtYW5hZ2Vfc2V1c2VyX2dldF9tbHNyYW5nZShzZXVzZXIpOworICAg IHN0cl9jbG9uZSA9IHNlbWFuYWdlX3NldXNlcl9nZXRfbWxzcmFuZ2Uoc2V1c2VyX2Nsb25lKTsK KworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc3RyLCBzdHJfY2xvbmUpOworCisgICAgc2Vt YW5hZ2Vfc2V1c2VyX2ZyZWUoc2V1c2VyKTsKKyAgICBzZW1hbmFnZV9zZXVzZXJfZnJlZShzZXVz ZXJfY2xvbmUpOworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X3Nl dXNlcl9jbG9uZSh2b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJfc2V1c2VyX2Ns b25lKFNIX0NPTk5FQ1QsIElfTlVMTCksIFNJR1NFR1YpOworICAgIGhlbHBlcl9zZXVzZXJfY2xv bmUoU0hfQ09OTkVDVCwgSV9GSVJTVCk7CisgICAgaGVscGVyX3NldXNlcl9jbG9uZShTSF9DT05O RUNULCBJX1NFQ09ORCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJfY2xv bmUoU0hfVFJBTlMsIElfTlVMTCksIFNJR1NFR1YpOworICAgIGhlbHBlcl9zZXVzZXJfY2xvbmUo U0hfVFJBTlMsIElfRklSU1QpOworICAgIGhlbHBlcl9zZXVzZXJfY2xvbmUoU0hfVFJBTlMsIElf U0VDT05EKTsKK30KKworLy8gRnVuY3Rpb24gc2V1c2VyX3F1ZXJ5CisKK3ZvaWQgaGVscGVyX3Nl dXNlcl9xdWVyeShsZXZlbF90IGxldmVsLCBjb25zdCBjaGFyICpzZXVzZXJfc3RyLAorICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBleHBfcmVzdWx0KSB7CisgICAgc2VtYW5hZ2Vfc2V1c2Vy X2tleV90ICprZXk7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX3QgKnJlc3BvbnNlOworICAgIGNvbnN0 IGNoYXIgKm5hbWU7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShsZXZlbCk7CisK KyAgICBrZXkgPSBnZXRfc2V1c2VyX2tleV9mcm9tX3N0cihzZXVzZXJfc3RyKTsKKworICAgIC8v IHRlc3QKKyAgICBpZiAoZXhwX3Jlc3VsdCA8IDApIHsKKyAgICAgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX3NldXNlcl9xdWVyeShzaCwga2V5LCAmcmVzcG9uc2UpIDwgMCk7CisgICAgfQorICAgIGVs c2UgeworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX3F1ZXJ5KHNoLCBrZXksICZy ZXNwb25zZSkgPj0gMCk7CisKKyAgICAgICAgbmFtZSA9IHNlbWFuYWdlX3NldXNlcl9nZXRfbmFt ZShyZXNwb25zZSk7CisKKyAgICAgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChuYW1lLCBzZXVz ZXJfc3RyKTsKKyAgICB9CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2Vfc2V1c2VyX2tl eV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3Rf c2V1c2VyX3F1ZXJ5KHZvaWQpIHsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKGhlbHBlcl9zZXVzZXJf cXVlcnkoU0hfQ09OTkVDVCwgTlVMTCwgLTEpLCBTSUdTRUdWKTsKKworICAgIGhlbHBlcl9zZXVz ZXJfcXVlcnkoU0hfQ09OTkVDVCwgU0VVU0VSLCAgMSk7CisgICAgaGVscGVyX3NldXNlcl9xdWVy eShTSF9DT05ORUNULCBTRVVTRVIyLCAxKTsKKyAgICBoZWxwZXJfc2V1c2VyX3F1ZXJ5KFNIX0NP Tk5FQ1QsIFNFVVNFUl9ERUZBVUxULCAgICAgIDEpOworICAgIGhlbHBlcl9zZXVzZXJfcXVlcnko U0hfQ09OTkVDVCwgU0VVU0VSX05PTkVYSVNURU5ULCAtMSk7CisKKyAgICBDVV9BU1NFUlRfU0lH TkFMKGhlbHBlcl9zZXVzZXJfcXVlcnkoU0hfVFJBTlMsIE5VTEwsIC0xKSwgU0lHU0VHVik7CisK KyAgICBoZWxwZXJfc2V1c2VyX3F1ZXJ5KFNIX1RSQU5TLCBTRVVTRVIsICAxKTsKKyAgICBoZWxw ZXJfc2V1c2VyX3F1ZXJ5KFNIX1RSQU5TLCBTRVVTRVIyLCAxKTsKKyAgICBoZWxwZXJfc2V1c2Vy X3F1ZXJ5KFNIX1RSQU5TLCBTRVVTRVJfREVGQVVMVCwgICAgICAxKTsKKyAgICBoZWxwZXJfc2V1 c2VyX3F1ZXJ5KFNIX1RSQU5TLCBTRVVTRVJfTk9ORVhJU1RFTlQsIC0xKTsKK30KKworLy8gRnVu Y3Rpb24gc2V1c2VyX2V4aXN0cworCit2b2lkIGhlbHBlcl9zZXVzZXJfZXhpc3RzKGxldmVsX3Qg bGV2ZWwsIGNoYXIgKiBzZXVzZXJfc3RyLCBpbnQgZXhwX3Jlc3BvbnNlKSB7CisgICAgc2VtYW5h Z2Vfc2V1c2VyX2tleV90ICprZXk7CisgICAgaW50IHJlc3BvbnNlOworCisgICAgc2V0dXBfaGFu ZGxlKGxldmVsKTsKKworICAgIGtleSA9IGdldF9zZXVzZXJfa2V5X2Zyb21fc3RyKHNldXNlcl9z dHIpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9leGlzdHMoc2gsIGtleSwgJnJl c3BvbnNlKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gZXhwX3Jlc3BvbnNlKTsK KworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vfc2V1c2VyX2V4aXN0cyhzaCwga2V5LCBO VUxMKSwgU0lHU0VHVik7CisKKyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X2ZyZWUoa2V5KTsKKwor ICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X3NldXNlcl9leGlzdHMo dm9pZCkgeworICAgIENVX0FTU0VSVF9TSUdOQUwoaGVscGVyX3NldXNlcl9leGlzdHMoU0hfQ09O TkVDVCwgTlVMTCwgMCksIFNJR1NFR1YpOworCisgICAgaGVscGVyX3NldXNlcl9leGlzdHMoU0hf Q09OTkVDVCwgU0VVU0VSLCAgMSk7CisgICAgaGVscGVyX3NldXNlcl9leGlzdHMoU0hfQ09OTkVD VCwgU0VVU0VSMiwgMSk7CisgICAgaGVscGVyX3NldXNlcl9leGlzdHMoU0hfQ09OTkVDVCwgU0VV U0VSX0RFRkFVTFQsICAgICAxKTsKKyAgICBoZWxwZXJfc2V1c2VyX2V4aXN0cyhTSF9DT05ORUNU LCBTRVVTRVJfTk9ORVhJU1RFTlQsIDApOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChoZWxwZXJf c2V1c2VyX2V4aXN0cyhTSF9UUkFOUywgTlVMTCwgMCksIFNJR1NFR1YpOworCisgICAgaGVscGVy X3NldXNlcl9leGlzdHMoU0hfVFJBTlMsIFNFVVNFUiwgIDEpOworICAgIGhlbHBlcl9zZXVzZXJf ZXhpc3RzKFNIX1RSQU5TLCBTRVVTRVIyLCAxKTsKKyAgICBoZWxwZXJfc2V1c2VyX2V4aXN0cyhT SF9UUkFOUywgU0VVU0VSX0RFRkFVTFQsICAgICAxKTsKKyAgICBoZWxwZXJfc2V1c2VyX2V4aXN0 cyhTSF9UUkFOUywgU0VVU0VSX05PTkVYSVNURU5ULCAwKTsKK30KKworLy8gRnVuY3Rpb24gc2V1 c2VyX2NvdW50CisKK3ZvaWQgdGVzdF9zZXVzZXJfY291bnQodm9pZCkgeworICAgIHVuc2lnbmVk IGludCByZXNwb25zZTsKKworICAgIC8vIHRlc3Qgd2l0aG91dCBoYW5kbGUKKyAgICBDVV9BU1NF UlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9jb3VudChOVUxMLCAmcmVzcG9uc2UpLCBTSUdTRUdW KTsKKworICAgIC8vIHRlc3Qgd2l0aCBoYW5kbGUKKyAgICBzZXR1cF9oYW5kbGUoU0hfSEFORExF KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfY291bnQoc2gsICZyZXNwb25zZSkg PCAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfY291bnQoc2gsIE5VTEwpIDwg MCk7CisgICAgCisgICAgLy8gdGVzdCBjb25uZWN0ZWQKKyAgICBoZWxwZXJfY29ubmVjdCgpOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9jb3VudChzaCwgJnJlc3BvbnNlKSA+PSAw KTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gU0VVU0VSU19DT1VOVCk7CisKKyAgICBDVV9B U1NFUlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9jb3VudChzaCwgTlVMTCksIFNJR1NFR1YpOwor CisgICAgLy8gdGVzdCBpbiB0cmFuc2FjdGlvbgorICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlv bigpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9jb3VudChzaCwgJnJlc3BvbnNl KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gU0VVU0VSU19DT1VOVCk7CisKKyAg ICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9jb3VudChzaCwgTlVMTCksIFNJR1NF R1YpOworCisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBz ZXVzZXJfaXRlcmF0ZQorLy8gVE9ETzogY29tcGFyZSB3aXRoIGVudHJpZXMgaW4gZmlsZQorLy8g VE9ETzogdGVzdCBhcmd1bWVudCBwYXNzaW5nCisKK3Vuc2lnbmVkIGludCBjb3VudGVyX3NldXNl cl9pdGVyYXRlID0gMDsKKworaW50IGhhbmRsZXJfc2V1c2VyX2l0ZXJhdGUoY29uc3Qgc2VtYW5h Z2Vfc2V1c2VyX3QgKnJlY29yZCwgdm9pZCAqdmFyZykgeworICAgIGNvdW50ZXJfc2V1c2VyX2l0 ZXJhdGUrKzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBoZWxwZXJfc2V1c2VyX2l0ZXJhdGVf aW52YWxpZCh2b2lkKSB7CisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9zZXVzZXJfaXRl cmF0ZShOVUxMLCAmaGFuZGxlcl9zZXVzZXJfaXRlcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIHNldHVwX2hh bmRsZShTSF9IQU5ETEUpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9pdGVyYXRl KHNoLCAmaGFuZGxlcl9zZXVzZXJfaXRlcmF0ZSwgTlVMTCkgPCAwKTsKKworICAgIENVX0FTU0VS VChzZW1hbmFnZV9zZXVzZXJfaXRlcmF0ZShzaCwgTlVMTCwgTlVMTCkgPCAwKTsKKworICAgIGNs ZWFudXBfaGFuZGxlKFNIX0hBTkRMRSk7Cit9CisKK3ZvaWQgaGVscGVyX3NldXNlcl9pdGVyYXRl KGxldmVsX3QgbGV2ZWwpIHsKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworCisgICAgY291bnRl cl9zZXVzZXJfaXRlcmF0ZSA9IDA7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2l0 ZXJhdGUoc2gsICZoYW5kbGVyX3NldXNlcl9pdGVyYXRlLCBOVUxMKSA+PSAwKTsKKyAgICBDVV9B U1NFUlQoY291bnRlcl9zZXVzZXJfaXRlcmF0ZSA9PSBTRVVTRVJTX0NPVU5UKTsKKworICAgIENV X0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vfc2V1c2VyX2l0ZXJhdGUoc2gsIE5VTEwsIE5VTEwpLCBT SUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X3Nl dXNlcl9pdGVyYXRlKHZvaWQpIHsKKyAgICBoZWxwZXJfc2V1c2VyX2l0ZXJhdGVfaW52YWxpZCgp OworICAgIGhlbHBlcl9zZXVzZXJfaXRlcmF0ZShTSF9DT05ORUNUKTsKKyAgICBoZWxwZXJfc2V1 c2VyX2l0ZXJhdGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZXVzZXJfbGlzdAorLy8g VE9ETzogY29tcGFyZSB3aXRoIGVudHJpZXMgaW4gZmlsZQorCit2b2lkIGhlbHBlcl9zZXVzZXJf bGlzdF9pbnZhbGlkKHZvaWQpIHsKKyAgICBzZW1hbmFnZV9zZXVzZXJfdCAqKnJlY29yZHM7Cisg ICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9z ZXVzZXJfbGlzdChOVUxMLCAmcmVjb3JkcywgJmNvdW50KSwgU0lHU0VHVik7CisKKyAgICBzZXR1 cF9oYW5kbGUoU0hfSEFORExFKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2Vy X2xpc3Qoc2gsICZyZWNvcmRzLCAmY291bnQpIDwgMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2Vfc2V1c2VyX2xpc3Qoc2gsIE5VTEwsICZjb3VudCkgPCAwKTsKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2Vfc2V1c2VyX2xpc3Qoc2gsICZyZWNvcmRzLCBOVUxMKSA8IDApOworCisgICAgY2xlYW51 cF9oYW5kbGUoU0hfSEFORExFKTsKK30KKwordm9pZCBoZWxwZXJfc2V1c2VyX2xpc3QobGV2ZWxf dCBsZXZlbCkgeworICAgIHNlbWFuYWdlX3NldXNlcl90ICoqcmVjb3JkczsKKyAgICB1bnNpZ25l ZCBpbnQgY291bnQ7CisKKyAgICBzZXR1cF9oYW5kbGUobGV2ZWwpOworICAgIAorICAgIENVX0FT U0VSVChzZW1hbmFnZV9zZXVzZXJfbGlzdChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7Cisg ICAgQ1VfQVNTRVJUKGNvdW50ID09IFNFVVNFUlNfQ09VTlQpOworCisgICAgZm9yICh1bnNpZ25l ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIENVX0FTU0VSVF9QVFJfTk9U X05VTEwocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7 IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHNlbWFuYWdlX3NldXNlcl9mcmVlKHJlY29yZHNb aV0pOworICAgIH0KKworICAgIGZyZWUocmVjb3Jkcyk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFM KHNlbWFuYWdlX3NldXNlcl9saXN0KHNoLCBOVUxMLCAmY291bnQpLCBTSUdTRUdWKTsKKyAgICBD VV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9saXN0KHNoLCAmcmVjb3JkcywgTlVMTCks IFNJR1NFR1YpOworCisgICAgY2xlYW51cF9oYW5kbGUobGV2ZWwpOworfQorCit2b2lkIHRlc3Rf c2V1c2VyX2xpc3Qodm9pZCkgeworICAgIGhlbHBlcl9zZXVzZXJfbGlzdF9pbnZhbGlkKCk7Cisg ICAgaGVscGVyX3NldXNlcl9saXN0KFNIX0NPTk5FQ1QpOworICAgIGhlbHBlcl9zZXVzZXJfbGlz dChTSF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNldXNlcl9tb2RpZnlfbG9jYWwsIHNldXNl cl9kZWxfbG9jYWwKKy8vIFRPRE86IG1ha2Ugc2VtYW5hZ2Vfc2V1c2VyX2dldF9zZW5hbWUgcmV0 dXJuIE5VTEwKKy8vIFRPRE86IG1ha2Ugc2VtYW5hZ2Vfc2V1c2VyX2Nsb25lIHJldHVybiBlcnJv cgorLy8gVE9ETzogbWxzIGVuYWJsZWQKKy8vIFRPRE86IG1ha2Ugc2VtYW5hZ2Vfc2V1c2VyX2F1 ZGl0IHJldHVybiBlcnJvcgorCit2b2lkIGhlbHBlcl9zZXVzZXJfbW9kaWZ5X2RlbF9sb2NhbChs ZXZlbF90IGxldmVsLCBpbnQgc2V1c2VyX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGV4cF9yZXN1bHQpIHsKKyAgICBzZW1hbmFnZV9zZXVzZXJfdCAqc2V1 c2VyOworICAgIHNlbWFuYWdlX3NldXNlcl90ICpzZXVzZXJfbG9jYWw7CisgICAgc2VtYW5hZ2Vf c2V1c2VyX2tleV90ICprZXkgPSBOVUxMOworICAgIGludCByZXN1bHQ7CisKKyAgICBzZXR1cF9o YW5kbGUobGV2ZWwpOworCisgICAgc2V1c2VyID0gZ2V0X3NldXNlcl9udGgoc2V1c2VyX2luZGV4 KTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfa2V5X2V4dHJhY3Qoc2gsIHNldXNl ciwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOworCisgICAg cmVzdWx0ID0gc2VtYW5hZ2Vfc2V1c2VyX21vZGlmeV9sb2NhbChzaCwga2V5LCBzZXVzZXIpOwor CisgICAgaWYgKGV4cF9yZXN1bHQgPCAwKSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPCAw KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENVX0FTU0VSVChyZXN1bHQgPj0gMCk7CisK KyAgICAgICAgLy8gd3JpdGUgY2hhbmdlcyB0byBmaWxlCisgICAgICAgIGlmIChsZXZlbCA9PSBT SF9UUkFOUykgeworICAgICAgICAgICAgaGVscGVyX2NvbW1pdCgpOworICAgICAgICAgICAgaGVs cGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDVV9BU1NFUlQo c2VtYW5hZ2Vfc2V1c2VyX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZzZXVzZXJfbG9jYWwpID49IDAp OworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2NvbXBhcmUyKHNldXNlcl9sb2Nh bCwgc2V1c2VyKSA9PSAwKTsKKworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2Rl bF9sb2NhbChzaCwga2V5KSA+PSAwKTsKKworICAgICAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1 c2VyX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZzZXVzZXJfbG9jYWwpIDwgMCk7CisgICAgfQorCisj aWYgVkVSU19DSEVDSygyLCA1KQorICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vfc2V1c2Vy X21vZGlmeV9sb2NhbChzaCwgTlVMTCwgc2V1c2VyKSwgU0lHU0VHVik7CisgICAgQ1VfQVNTRVJU X1NJR05BTChzZW1hbmFnZV9zZXVzZXJfbW9kaWZ5X2xvY2FsKHNoLCBrZXksIE5VTEwpLCBTSUdT RUdWKTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9kZWxfbG9jYWwoc2gs IE5VTEwpLCBTSUdTRUdWKTsKKyNlbmRpZgorCisgICAgc2VtYW5hZ2Vfc2V1c2VyX2tleV9mcmVl KGtleSk7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX2ZyZWUoc2V1c2VyKTsKKworICAgIGNsZWFudXBf aGFuZGxlKGxldmVsKTsKK30KKwordm9pZCB0ZXN0X3NldXNlcl9tb2RpZnlfZGVsX2xvY2FsKHZv aWQpIHsKKyAgICBoZWxwZXJfc2V1c2VyX21vZGlmeV9kZWxfbG9jYWwoU0hfQ09OTkVDVCwgSV9G SVJTVCwgIC0xKTsKKyAgICBoZWxwZXJfc2V1c2VyX21vZGlmeV9kZWxfbG9jYWwoU0hfQ09OTkVD VCwgSV9TRUNPTkQsIC0xKTsKKworICAgIGhlbHBlcl9zZXVzZXJfbW9kaWZ5X2RlbF9sb2NhbChT SF9UUkFOUywgSV9GSVJTVCwgIDEpOworICAgIGhlbHBlcl9zZXVzZXJfbW9kaWZ5X2RlbF9sb2Nh bChTSF9UUkFOUywgSV9TRUNPTkQsIDEpOworfQorCisvLyBGdW5jdGlvbiBzZXVzZXJfcXVlcnlf bG9jYWwKKwordm9pZCB0ZXN0X3NldXNlcl9xdWVyeV9sb2NhbCh2b2lkKSB7CisgICAgc2VtYW5h Z2Vfc2V1c2VyX2tleV90ICprZXkgPSBOVUxMOworICAgIHNlbWFuYWdlX3NldXNlcl90ICpyZXNw b25zZSA9IE5VTEw7CisKKyAgICAvLyBjb25uZWN0CisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5F Q1QpOworCisgICAga2V5ID0gZ2V0X3NldXNlcl9rZXlfbnRoKElfRklSU1QpOworCisgICAgQ1Vf QVNTRVJUKHNlbWFuYWdlX3NldXNlcl9xdWVyeV9sb2NhbChzaCwga2V5LCAmcmVzcG9uc2UpIDwg MCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OVUxMKHJlc3BvbnNlKTsKKworICAgIHNlbWFuYWdlX3Nl dXNlcl9rZXlfZnJlZShrZXkpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisg ICAgLy8gdHJhbnNhY3Rpb24KKyAgICBzZXR1cF9oYW5kbGUoU0hfVFJBTlMpOworCisgICAga2V5 ID0gZ2V0X3NldXNlcl9rZXlfbnRoKElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3NldXNlcl9xdWVyeV9sb2NhbChzaCwga2V5LCAmcmVzcG9uc2UpIDwgMCk7CisgICAgQ1VfQVNT RVJUX1BUUl9OVUxMKHJlc3BvbnNlKTsKKworICAgIGFkZF9sb2NhbF9zZXVzZXIoSV9GSVJTVCk7 CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZy ZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZXNwb25zZSk7CisK KyAgICBzZW1hbmFnZV9zZXVzZXJfa2V5X2ZyZWUoa2V5KTsKKyAgICBrZXkgPSBnZXRfc2V1c2Vy X2tleV9udGgoSV9TRUNPTkQpOworCisgICAgYWRkX2xvY2FsX3NldXNlcihJX1NFQ09ORCk7CisK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZyZXNw b25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZXNwb25zZSk7CisKKyAg ICBzZW1hbmFnZV9zZXVzZXJfa2V5X2ZyZWUoa2V5KTsKKyAgICBkZWxldGVfbG9jYWxfc2V1c2Vy KElfRklSU1QpOworICAgIGRlbGV0ZV9sb2NhbF9zZXVzZXIoSV9TRUNPTkQpOworICAgIGNsZWFu dXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2V1c2VyX2V4aXN0c19sb2Nh bAorCit2b2lkIHRlc3Rfc2V1c2VyX2V4aXN0c19sb2NhbCh2b2lkKSB7CisgICAgaW50IHJlc3Bv bnNlID0gLTE7CisgICAgc2VtYW5hZ2Vfc2V1c2VyX2tleV90ICprZXk7CisKKyAgICAvLyBzZXR1 cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICAvLyB0ZXN0CisgICAga2V5ID0g Z2V0X3NldXNlcl9rZXlfbnRoKElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3Nl dXNlcl9leGlzdHNfbG9jYWwoc2gsIGtleSwgJnJlc3BvbnNlKSA+PSAwKTsKKyAgICBDVV9BU1NF UlQocmVzcG9uc2UgPT0gMCk7CisKKyAgICBhZGRfbG9jYWxfc2V1c2VyKElfRklSU1QpOworICAg IHJlc3BvbnNlID0gLTE7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2V4aXN0c19s b2NhbChzaCwga2V5LCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25zZSA9 PSAxKTsKKworICAgIGRlbGV0ZV9sb2NhbF9zZXVzZXIoSV9GSVJTVCk7CisgICAgcmVzcG9uc2Ug PSAtMTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfZXhpc3RzX2xvY2FsKHNoLCBr ZXksICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IDApOworCisg ICAgcmVzcG9uc2UgPSAtMTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfZXhpc3Rz X2xvY2FsKHNoLCBOVUxMLCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VSVChyZXNwb25z ZSA9PSAwKTsKKworICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vfc2V1c2VyX2V4aXN0c19s b2NhbChzaCwga2V5LCBOVUxMKSwgU0lHU0VHVik7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2Vt YW5hZ2Vfc2V1c2VyX2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfVFJBTlMp OworfQorCisvLyBGdW5jdGlvbiBzZXVzZXJfY291bnRfbG9jYWwKKwordm9pZCB0ZXN0X3NldXNl cl9jb3VudF9sb2NhbCh2b2lkKSB7CisgICAgdW5zaWduZWQgaW50IHJlc3BvbnNlOworCisgICAg Ly8gdGVzdCB3aXRob3V0IGhhbmRsZQorICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vfc2V1 c2VyX2NvdW50X2xvY2FsKE5VTEwsICZyZXNwb25zZSksIFNJR1NFR1YpOworCisgICAgLy8gdGVz dCB3aXRoIGhhbmRsZQorICAgIHNldHVwX2hhbmRsZShTSF9IQU5ETEUpOworCisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX3NldXNlcl9jb3VudF9sb2NhbChzaCwgJnJlc3BvbnNlKSA8IDApOworCisg ICAgLy8gdGVzdCBjb25uZWN0ZWQKKyAgICBoZWxwZXJfY29ubmVjdCgpOworCisgICAgQ1VfQVNT RVJUKHNlbWFuYWdlX3NldXNlcl9jb3VudF9sb2NhbChzaCwgJnJlc3BvbnNlKSA+PSAwKTsKKyAg ICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gMCk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFu YWdlX3NldXNlcl9jb3VudF9sb2NhbChzaCwgTlVMTCksIFNJR1NFR1YpOworCisgICAgLy8gdGVz dCBpbiB0cmFuc2FjdGlvbgorICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOworICAgIAor ICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfY291bnRfbG9jYWwoc2gsICZyZXNwb25zZSkg Pj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IDApOworCisgICAgYWRkX2xvY2FsX3Nl dXNlcihJX0ZJUlNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfY291bnRfbG9j YWwoc2gsICZyZXNwb25zZSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlID09IDEpOwor CisgICAgYWRkX2xvY2FsX3NldXNlcihJX1NFQ09ORCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5h Z2Vfc2V1c2VyX2NvdW50X2xvY2FsKHNoLCAmcmVzcG9uc2UpID49IDApOworICAgIENVX0FTU0VS VChyZXNwb25zZSA9PSAyKTsKKworICAgIGRlbGV0ZV9sb2NhbF9zZXVzZXIoSV9TRUNPTkQpOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9jb3VudF9sb2NhbChzaCwgJnJlc3BvbnNl KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQocmVzcG9uc2UgPT0gMSk7CisKKyAgICBkZWxldGVfbG9j YWxfc2V1c2VyKElfRklSU1QpOworCisgICAgQ1VfQVNTRVJUX1NJR05BTChzZW1hbmFnZV9zZXVz ZXJfY291bnRfbG9jYWwoc2gsIE5VTEwpLCBTSUdTRUdWKTsKKworICAgIGNsZWFudXBfaGFuZGxl KFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2V1c2VyX2l0ZXJhdGVfbG9jYWwKKwordW5z aWduZWQgaW50IGNvdW50ZXJfc2V1c2VyX2l0ZXJhdGVfbG9jYWwgPSAwOworCitpbnQgaGFuZGxl cl9zZXVzZXJfaXRlcmF0ZV9sb2NhbChjb25zdCBzZW1hbmFnZV9zZXVzZXJfdCAqcmVjb3JkLCB2 b2lkICp2YXJnKSB7CisgICAgY291bnRlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCsrOworICAgIHJl dHVybiAwOworfQorCit2b2lkIHRlc3Rfc2V1c2VyX2l0ZXJhdGVfbG9jYWwodm9pZCkgeworICAg IC8vIHRlc3Qgd2l0aG91dCBoYW5kbGUKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3Nl dXNlcl9pdGVyYXRlX2xvY2FsKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmaGFuZGxlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCwgTlVMTCksIFNJR1NFR1YpOworCisgICAg Ly8gdGVzdCB3aXRoIGhhbmRsZQorICAgIGhlbHBlcl9oYW5kbGVfY3JlYXRlKCk7CisKKyAgICBD VV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2l0ZXJhdGVfbG9jYWwoc2gsICZoYW5kbGVyX3NldXNl cl9pdGVyYXRlX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMKSA8IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9pdGVyYXRl X2xvY2FsKHNoLCBOVUxMLCBOVUxMKSA8IDApOworCisgICAgLy8gdGVzdCBjb25uZWN0ZWQKKyAg ICBoZWxwZXJfY29ubmVjdCgpOworCisgICAgY291bnRlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCA9 IDA7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9pdGVyYXRlX2xvY2FsKHNoLCAmaGFu ZGxlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ZXJfc2V1c2Vy X2l0ZXJhdGVfbG9jYWwgPT0gMCk7CisKKyAgICAvLyBGSVhNRQorICAgIENVX0FTU0VSVChzZW1h bmFnZV9zZXVzZXJfaXRlcmF0ZV9sb2NhbChzaCwgTlVMTCwgTlVMTCkgPj0gMCk7CisKKyAgICAv LyB0ZXN0IGluIHRyYW5zYWN0aW9uCisgICAgaGVscGVyX2JlZ2luX3RyYW5zYWN0aW9uKCk7CisK KyAgICBjb3VudGVyX3NldXNlcl9pdGVyYXRlX2xvY2FsID0gMDsKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2Vfc2V1c2VyX2l0ZXJhdGVfbG9jYWwoc2gsICZoYW5kbGVyX3NldXNlcl9pdGVyYXRlX2xv Y2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSA+ PSAwKTsKKyAgICBDVV9BU1NFUlQoY291bnRlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCA9PSAwKTsK KworICAgIGFkZF9sb2NhbF9zZXVzZXIoSV9GSVJTVCk7CisKKyAgICBjb3VudGVyX3NldXNlcl9p dGVyYXRlX2xvY2FsID0gMDsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2l0ZXJhdGVf bG9jYWwoc2gsICZoYW5kbGVyX3NldXNlcl9pdGVyYXRlX2xvY2FsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQo Y291bnRlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCA9PSAxKTsKKworICAgIGFkZF9sb2NhbF9zZXVz ZXIoSV9TRUNPTkQpOworCisgICAgY291bnRlcl9zZXVzZXJfaXRlcmF0ZV9sb2NhbCA9IDA7Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9pdGVyYXRlX2xvY2FsKHNoLCAmaGFuZGxlcl9z ZXVzZXJfaXRlcmF0ZV9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ZXJfc2V1c2VyX2l0ZXJh dGVfbG9jYWwgPT0gMik7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9p dGVyYXRlX2xvY2FsKHNoLCBOVUxMLCBOVUxMKSwgU0lHU0VHVik7CisKKyAgICBkZWxldGVfbG9j YWxfc2V1c2VyKElfRklSU1QpOworICAgIGRlbGV0ZV9sb2NhbF9zZXVzZXIoSV9TRUNPTkQpOwor ICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2V1c2VyX2xp c3RfbG9jYWwKKwordm9pZCB0ZXN0X3NldXNlcl9saXN0X2xvY2FsKHZvaWQpIHsKKyAgICBzZW1h bmFnZV9zZXVzZXJfdCAqKnJlY29yZHM7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAg Ly8gdGVzdCB3aXRob3V0IGhhbmRsZQorICAgIENVX0FTU0VSVF9TSUdOQUwoc2VtYW5hZ2Vfc2V1 c2VyX2xpc3RfbG9jYWwoTlVMTCwgJnJlY29yZHMsICZjb3VudCksCisgICAgICAgICAgICAgICAg ICAgICBTSUdTRUdWKTsKKyAgICAKKyAgICAvLyB0ZXN0IHdpdGggaGFuZGxlCisgICAgaGVscGVy X2hhbmRsZV9jcmVhdGUoKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfbGlzdF9s b2NhbChzaCwgJnJlY29yZHMsICZjb3VudCkgPCAwKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFn ZV9zZXVzZXJfbGlzdF9sb2NhbChzaCwgTlVMTCwgJmNvdW50KSA8IDApOworICAgIENVX0FTU0VS VChzZW1hbmFnZV9zZXVzZXJfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsIE5VTEwpIDwgMCk7CisK KyAgICAvLyB0ZXN0IGNvbm5lY3RlZAorICAgIGhlbHBlcl9jb25uZWN0KCk7CisgICAgCisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX3NldXNlcl9saXN0X2xvY2FsKHNoLCAmcmVjb3JkcywgJmNvdW50 KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoY291bnQgPT0gMCk7CisKKyAgICBDVV9BU1NFUlRfU0lH TkFMKHNlbWFuYWdlX3NldXNlcl9saXN0X2xvY2FsKHNoLCBOVUxMLCAmY291bnQpLCBTSUdTRUdW KTsKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9saXN0X2xvY2FsKHNoLCAm cmVjb3JkcywgTlVMTCksIFNJR1NFR1YpOworCisgICAgLy8gdGVzdCBpbiB0cmFuc2FjdGlvbgor ICAgIGhlbHBlcl9iZWdpbl90cmFuc2FjdGlvbigpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3NldXNlcl9saXN0X2xvY2FsKHNoLCAmcmVjb3JkcywgJmNvdW50KSA+PSAwKTsKKyAgICBDVV9B U1NFUlQoY291bnQgPT0gMCk7CisKKyAgICBhZGRfbG9jYWxfc2V1c2VyKElfRklSU1QpOworICAg IAorICAgIENVX0FTU0VSVChzZW1hbmFnZV9zZXVzZXJfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMs ICZjb3VudCkgPj0gMCk7CisgICAgQ1VfQVNTRVJUKGNvdW50ID09IDEpOworICAgIENVX0FTU0VS VF9QVFJfTk9UX05VTEwocmVjb3Jkc1swXSk7CisKKyAgICBhZGRfbG9jYWxfc2V1c2VyKElfU0VD T05EKTsKKyAgICAKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2Vfc2V1c2VyX2xpc3RfbG9jYWwoc2gs ICZyZWNvcmRzLCAmY291bnQpID49IDApOworICAgIENVX0FTU0VSVChjb3VudCA9PSAyKTsKKyAg ICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKHJlY29yZHNbMF0pOworICAgIENVX0FTU0VSVF9QVFJf Tk9UX05VTEwocmVjb3Jkc1sxXSk7CisKKyAgICBDVV9BU1NFUlRfU0lHTkFMKHNlbWFuYWdlX3Nl dXNlcl9saXN0X2xvY2FsKHNoLCBOVUxMLCAmY291bnQpLCBTSUdTRUdWKTsKKyAgICBDVV9BU1NF UlRfU0lHTkFMKHNlbWFuYWdlX3NldXNlcl9saXN0X2xvY2FsKHNoLCAmcmVjb3JkcywgTlVMTCks IFNJR1NFR1YpOworCisgICAgZGVsZXRlX2xvY2FsX3NldXNlcihJX0ZJUlNUKTsKKyAgICBkZWxl dGVfbG9jYWxfc2V1c2VyKElfU0VDT05EKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7 Cit9CgpkaWZmIC0tZ2l0IGEvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfc2V1 c2VyLmggYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF9zZXVzZXIuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhjMzhiCi0tLSAvZGV2L251bGwKKysr IGIvbGlic2VtYW5hZ2Uvc2FuaXR5LXRlc3RzL3Rlc3RzL3Rlc3Rfc2V1c2VyLmgKQEAgLTAsMCAr MSw0MCBAQAorI2lmbmRlZiBfX1RFU1RfU0VVU0VSX0hfXworI2RlZmluZSBfX1RFU1RfU0VVU0VS X0hfXworCisjaW5jbHVkZSA8Q1VuaXQvQmFzaWMuaD4KKworaW50IHNldXNlcl90ZXN0X2luaXQo dm9pZCk7CitpbnQgc2V1c2VyX3Rlc3RfY2xlYW51cCh2b2lkKTsKK2ludCBzZXVzZXJfYWRkX3Rl c3RzKENVX3BTdWl0ZSBzdWl0ZSk7CisKKy8vIHNldXNlcl9yZWNvcmQuaAorCit2b2lkIHRlc3Rf c2V1c2VyX2tleV9jcmVhdGUodm9pZCk7Cit2b2lkIHRlc3Rfc2V1c2VyX2tleV9leHRyYWN0KHZv aWQpOwordm9pZCB0ZXN0X3NldXNlcl9jb21wYXJlKHZvaWQpOwordm9pZCB0ZXN0X3NldXNlcl9j b21wYXJlMih2b2lkKTsKK3ZvaWQgdGVzdF9zZXVzZXJfZ2V0X3NldF9uYW1lKHZvaWQpOwordm9p ZCB0ZXN0X3NldXNlcl9nZXRfc2V0X3NlbmFtZSh2b2lkKTsKK3ZvaWQgdGVzdF9zZXVzZXJfZ2V0 X3NldF9tbHNyYW5nZSh2b2lkKTsKK3ZvaWQgdGVzdF9zZXVzZXJfY2xvbmUodm9pZCk7Cit2b2lk IHRlc3Rfc2V1c2VyX2NyZWF0ZSh2b2lkKTsKKworLy8gc2V1c2Vyc19wb2xpY3kuaAorCit2b2lk IHRlc3Rfc2V1c2VyX3F1ZXJ5KHZvaWQpOwordm9pZCB0ZXN0X3NldXNlcl9leGlzdHModm9pZCk7 Cit2b2lkIHRlc3Rfc2V1c2VyX2NvdW50KHZvaWQpOwordm9pZCB0ZXN0X3NldXNlcl9pdGVyYXRl KHZvaWQpOwordm9pZCB0ZXN0X3NldXNlcl9saXN0KHZvaWQpOworCisvLyBzZXVzZXJzX2xvY2Fs LmgKKwordm9pZCB0ZXN0X3NldXNlcl9tb2RpZnlfZGVsX2xvY2FsKHZvaWQpOwordm9pZCB0ZXN0 X3NldXNlcl9xdWVyeV9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF9zZXVzZXJfZXhpc3RzX2xvY2Fs KHZvaWQpOwordm9pZCB0ZXN0X3NldXNlcl9jb3VudF9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF9z ZXVzZXJfaXRlcmF0ZV9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF9zZXVzZXJfbGlzdF9sb2NhbCh2 b2lkKTsKKworI2VuZGlmCisKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMv dGVzdHMvdGVzdF91c2VyLmMgYi9saWJzZW1hbmFnZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF91 c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkZTdiZgotLS0gL2Rl di9udWxsCisrKyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0cy90ZXN0X3VzZXIuYwpA QCAtMCwwICsxLDYwNCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2VtYW5hZ2Uv c2VtYW5hZ2UuaD4KKyNpbmNsdWRlIDxzZW1hbmFnZS9oYW5kbGUuaD4KKyNpbmNsdWRlIDxDVW5p dC9CYXNpYy5oPgorCisjaW5jbHVkZSAidGVzdF91c2VyLmgiCisjaW5jbHVkZSAiZnVuY3Rpb25z LmgiCisKK2V4dGVybiBzZW1hbmFnZV9oYW5kbGVfdCAqc2g7CisKK2ludCB1c2VyX3Rlc3RfaW5p dCh2b2lkKSB7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2VyX3Rlc3RfY2xlYW51cCh2b2lk KSB7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2VyX2FkZF90ZXN0cyhDVV9wU3VpdGUgc3Vp dGUpIHsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInVzZXJfY29tcGFyZSIsIHRlc3RfdXNlcl9j b21wYXJlKTsKKyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInVzZXJfY29tcGFyZTIiLCB0ZXN0X3Vz ZXJfY29tcGFyZTIpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidXNlcl9rZXlfY3JlYXRlIiwg dGVzdF91c2VyX2tleV9jcmVhdGUpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidXNlcl9rZXlf ZXh0cmFjdCIsIHRlc3RfdXNlcl9rZXlfZXh0cmFjdCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUs ICJ1c2VyX2dldF9zZXRfbmFtZSIsIHRlc3RfdXNlcl9nZXRfc2V0X25hbWUpOworICAgIENVX2Fk ZF90ZXN0KHN1aXRlLCAidXNlcl9nZXRfc2V0X3ByZWZpeCIsIHRlc3RfdXNlcl9nZXRfc2V0X3By ZWZpeCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ1c2VyX2dldF9zZXRfbWxzbGV2ZWwiLCB0 ZXN0X3VzZXJfZ2V0X3NldF9tbHNsZXZlbCk7CisgICAgQ1VfYWRkX3Rlc3Qoc3VpdGUsICJ1c2Vy X2dldF9zZXRfbWxzcmFuZ2UiLCB0ZXN0X3VzZXJfZ2V0X3NldF9tbHNyYW5nZSk7CisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJ1c2VyX3JvbGVzIiwgdGVzdF91c2VyX3JvbGVzKTsKKyAgICBDVV9h ZGRfdGVzdChzdWl0ZSwgInVzZXJfY3JlYXRlIiwgdGVzdF91c2VyX2NyZWF0ZSk7CisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJ1c2VyX2Nsb25lIiwgdGVzdF91c2VyX2Nsb25lKTsKKworICAgIENV X2FkZF90ZXN0KHN1aXRlLCAidXNlcl9xdWVyeSIsIHRlc3RfdXNlcl9xdWVyeSk7CisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJ1c2VyX2V4aXN0cyIsIHRlc3RfdXNlcl9leGlzdHMpOworICAgIENV X2FkZF90ZXN0KHN1aXRlLCAidXNlcl9jb3VudCIsIHRlc3RfdXNlcl9jb3VudCk7CisgICAgQ1Vf YWRkX3Rlc3Qoc3VpdGUsICJ1c2VyX2l0ZXJhdGUiLCB0ZXN0X3VzZXJfaXRlcmF0ZSk7CisgICAg Q1VfYWRkX3Rlc3Qoc3VpdGUsICJ1c2VyX2xpc3QiLCB0ZXN0X3VzZXJfbGlzdCk7CisKKyAgICBD VV9hZGRfdGVzdChzdWl0ZSwgInVzZXJfbW9kaWZ5X2RlbF9xdWVyeV9sb2NhbCIsCisgICAgICAg ICAgICAgICAgdGVzdF91c2VyX21vZGlmeV9kZWxfcXVlcnlfbG9jYWwpOworICAgIENVX2FkZF90 ZXN0KHN1aXRlLCAidXNlcl9leGlzdHNfbG9jYWwiLCB0ZXN0X3VzZXJfZXhpc3RzX2xvY2FsKTsK KyAgICBDVV9hZGRfdGVzdChzdWl0ZSwgInVzZXJfY291bnRfbG9jYWwiLCB0ZXN0X3VzZXJfY291 bnRfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidXNlcl9pdGVyYXRlX2xvY2FsIiwg dGVzdF91c2VyX2l0ZXJhdGVfbG9jYWwpOworICAgIENVX2FkZF90ZXN0KHN1aXRlLCAidXNlcl9s aXN0X2xvY2FsIiwgdGVzdF91c2VyX2xpc3RfbG9jYWwpOworCisgICAgcmV0dXJuIDA7Cit9CisK Ky8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJfY29tcGFyZQorCit2b2lkIHRlc3RfdXNlcl9jb21w YXJlKHZvaWQpIHsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVzZXIgPSBOVUxMOworICAgIHNlbWFu YWdlX3VzZXJfa2V5X3QgKmtleTEgPSBOVUxMOworICAgIHNlbWFuYWdlX3VzZXJfa2V5X3QgKmtl eTIgPSBOVUxMOworICAgIGludCByZXN1bHQgPSA0MjsKKworICAgIC8vIHNldHVwCisgICAgc2V0 dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgdXNlciA9IGdldF91c2VyX250aChJX0ZJUlNU KTsKKyAgICBrZXkxID0gZ2V0X3VzZXJfa2V5X250aChJX0ZJUlNUKTsKKyAgICBrZXkyID0gZ2V0 X3VzZXJfa2V5X250aChJX1NFQ09ORCk7CisKKyAgICAvLyB0ZXN0CisgICAgcmVzdWx0ID0gc2Vt YW5hZ2VfdXNlcl9jb21wYXJlKHVzZXIsIGtleTEpOworCisgICAgQ1VfQVNTRVJUKHJlc3VsdCA9 PSAwKTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX3VzZXJfY29tcGFyZSh1c2VyLCBrZXkyKTsK KworICAgIENVX0FTU0VSVChyZXN1bHQgIT0gMCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2Vt YW5hZ2VfdXNlcl9mcmVlKHVzZXIpOworICAgIHNlbWFuYWdlX3VzZXJfa2V5X2ZyZWUoa2V5MSk7 CisgICAgc2VtYW5hZ2VfdXNlcl9rZXlfZnJlZShrZXkyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShT SF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfdXNlcl9jb21wYXJlMgorCit2 b2lkIHRlc3RfdXNlcl9jb21wYXJlMih2b2lkKSB7CisgICAgc2VtYW5hZ2VfdXNlcl90ICp1c2Vy MSA9IE5VTEw7CisgICAgc2VtYW5hZ2VfdXNlcl90ICp1c2VyMiA9IE5VTEw7CisgICAgc2VtYW5h Z2VfdXNlcl90ICp1c2VyMyA9IE5VTEw7CisgICAgaW50IHJlc3VsdCA9IDQyOworCisgICAgLy8g c2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICB1c2VyMSA9IGdldF91 c2VyX250aChJX0ZJUlNUKTsKKyAgICB1c2VyMiA9IGdldF91c2VyX250aChJX0ZJUlNUKTsKKyAg ICB1c2VyMyA9IGdldF91c2VyX250aChJX1NFQ09ORCk7CisKKyAgICAvLyB0ZXN0CisgICAgcmVz dWx0ID0gc2VtYW5hZ2VfdXNlcl9jb21wYXJlMih1c2VyMSwgdXNlcjIpOworCisgICAgQ1VfQVNT RVJUKHJlc3VsdCA9PSAwKTsKKworICAgIHJlc3VsdCA9IHNlbWFuYWdlX3VzZXJfY29tcGFyZTIo dXNlcjEsIHVzZXIzKTsKKworICAgIENVX0FTU0VSVChyZXN1bHQgIT0gMCk7CisKKyAgICAvLyBj bGVhbnVwCisgICAgc2VtYW5hZ2VfdXNlcl9mcmVlKHVzZXIxKTsKKyAgICBzZW1hbmFnZV91c2Vy X2ZyZWUodXNlcjIpOworICAgIHNlbWFuYWdlX3VzZXJfZnJlZSh1c2VyMyk7CisgICAgY2xlYW51 cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJfa2V5 X2NyZWF0ZQorCit2b2lkIHRlc3RfdXNlcl9rZXlfY3JlYXRlKHZvaWQpIHsKKyAgICBzZW1hbmFn ZV91c2VyX2tleV90ICprZXkgPSBOVUxMOworCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1Qp OworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfa2V5X2NyZWF0ZShzaCwgImFzZGYiLCAm a2V5KSA+PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMKGtleSk7CisKKyAgICBzZW1h bmFnZV91c2VyX2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7 Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJfa2V5X2V4dHJhY3QKKwordm9pZCB0ZXN0 X3VzZXJfa2V5X2V4dHJhY3Qodm9pZCkgeworICAgIHNlbWFuYWdlX3VzZXJfdCAqdXNlciA9IE5V TEw7CisgICAgc2VtYW5hZ2VfdXNlcl9rZXlfdCAqa2V5ID0gTlVMTDsKKworICAgIC8vIHNldHVw CisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgdXNlciA9IGdldF91c2VyX250 aChJX0ZJUlNUKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9r ZXlfZXh0cmFjdChzaCwgdXNlciwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1Rf TlVMTChrZXkpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3VzZXJfZnJlZSh1c2Vy KTsKKyAgICBzZW1hbmFnZV91c2VyX2tleV9mcmVlKGtleSk7CisgICAgY2xlYW51cF9oYW5kbGUo U0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJfZ2V0X25hbWUsIHNl bWFuYWdlX3VzZXJfc2V0X25hbWUKKwordm9pZCB0ZXN0X3VzZXJfZ2V0X3NldF9uYW1lKHZvaWQp IHsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVzZXIgPSBOVUxMOworCisgICAgLy8gc2V0dXAKKyAg ICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNl cl9jcmVhdGUoc2gsICZ1c2VyKSA+PSAwKTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQo c2VtYW5hZ2VfdXNlcl9zZXRfbmFtZShzaCwgdXNlciwgInVzZXJfdSIpID09IDApOworICAgIENV X0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfdXNlcl9nZXRfbmFtZSh1c2VyKSwgInVzZXJf dSIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3VzZXJfZnJlZSh1c2VyKTsKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2Vf dXNlcl9nZXRfcHJlZml4LCBzZW1hbmFnZV91c2VyX3NldF9wcmVmaXgKKwordm9pZCB0ZXN0X3Vz ZXJfZ2V0X3NldF9wcmVmaXgodm9pZCkgeworICAgIHNlbWFuYWdlX3VzZXJfdCAqdXNlciA9IE5V TEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAg IENVX0FTU0VSVChzZW1hbmFnZV91c2VyX2NyZWF0ZShzaCwgJnVzZXIpID49IDApOworCisgICAg Ly8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2VyX3NldF9wcmVmaXgoc2gsIHVzZXIs ICJ1c2VyIikgPT0gMCk7CisgICAgQ1VfQVNTRVJUX1NUUklOR19FUVVBTChzZW1hbmFnZV91c2Vy X2dldF9wcmVmaXgodXNlciksICJ1c2VyIik7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5h Z2VfdXNlcl9mcmVlKHVzZXIpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQor CisvLyBGdW5jdGlvbiBzZW1hbmFnZV91c2VyX2dldF9tbHNsZXZlbCwgc2VtYW5hZ2VfdXNlcl9z ZXRfbWxzbGV2ZWwKKwordm9pZCB0ZXN0X3VzZXJfZ2V0X3NldF9tbHNsZXZlbCh2b2lkKSB7Cisg ICAgc2VtYW5hZ2VfdXNlcl90ICp1c2VyID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0 dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfY3Jl YXRlKHNoLCAmdXNlcikgPj0gMCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX3VzZXJfc2V0X21sc2xldmVsKHNoLCB1c2VyLCAiczAiKSA9PSAwKTsKKyAgICBDVV9BU1NF UlRfU1RSSU5HX0VRVUFMKHNlbWFuYWdlX3VzZXJfZ2V0X21sc2xldmVsKHVzZXIpLCAiczAiKTsK KworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV91c2VyX2ZyZWUodXNlcik7CisgICAgY2xl YW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJf Z2V0X21sc3JhbmdlLCBzZW1hbmFnZV91c2VyX3NldF9tbHNyYW5nZQorCit2b2lkIHRlc3RfdXNl cl9nZXRfc2V0X21sc3JhbmdlKHZvaWQpIHsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVzZXIgPSBO VUxMOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9jcmVhdGUoc2gsICZ1c2VyKSA+PSAwKTsKKworICAg IC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9zZXRfbWxzcmFuZ2Uoc2gsIHVz ZXIsICJzMC1zMTUiKSA9PSAwKTsKKyAgICBDVV9BU1NFUlRfU1RSSU5HX0VRVUFMKHNlbWFuYWdl X3VzZXJfZ2V0X21sc3JhbmdlKHVzZXIpLCAiczAtczE1Iik7CisKKyAgICAvLyBjbGVhbnVwCisg ICAgc2VtYW5hZ2VfdXNlcl9mcmVlKHVzZXIpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5F Q1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV91c2VyX2dldF9udW1fcm9sZXMsIHNlbWFu YWdlX3VzZXJfYWRkX3JvbGUsCisvLyBzZW1hbmFnZV91c2VyX2RlbF9yb2xlLCBzZW1hbmFnZV91 c2VyX2hhc19yb2xlLCBzZW1hbmFnZV91c2VyX2dldF9yb2xlcworLy8gc2VtYW5hZ2VfdXNlcl9z ZXRfcm9sZXMKKwordm9pZCB0ZXN0X3VzZXJfcm9sZXModm9pZCkgeworICAgIHNlbWFuYWdlX3Vz ZXJfdCAqdXNlciA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqKnJvbGVzX2FyciA9IE5VTEw7Cisg ICAgdW5zaWduZWQgaW50IG51bV9yb2xlcyA9IDQyOworICAgIGNvbnN0IGNoYXIgKm5ld19yb2xl c19hcnJbXSA9IHsgIm5ld19yb2xlX3IiLCAibmV3X215X3JvbGVfciIgfTsKKyAgICB1bnNpZ25l ZCBpbnQgbmV3X251bV9yb2xlcyA9IDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRs ZShTSF9DT05ORUNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2VyX2NyZWF0ZShzaCwg JnVzZXIpID49IDApOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2Vy X2dldF9udW1fcm9sZXModXNlcikgPT0gMCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNl cl9hZGRfcm9sZShzaCwgdXNlciwgInJvbGVfciIpID09IDApOworICAgIENVX0FTU0VSVChzZW1h bmFnZV91c2VyX2dldF9udW1fcm9sZXModXNlcikgPT0gMSk7CisKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfdXNlcl9oYXNfcm9sZSh1c2VyLCAicm9sZV9yIikpOworICAgIENVX0FTU0VSVCghc2Vt YW5hZ2VfdXNlcl9oYXNfcm9sZSh1c2VyLCAibXlfcm9sZV9yIikpOworCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX3VzZXJfYWRkX3JvbGUoc2gsIHVzZXIsICJteV9yb2xlX3IiKSA9PSAwKTsKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9nZXRfbnVtX3JvbGVzKHVzZXIpID09IDIpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfZ2V0X3JvbGVzKHNoLCB1c2VyLCAmcm9sZXNfYXJy LCAmbnVtX3JvbGVzKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQobnVtX3JvbGVzID09IDIpOworICAg IENVX0FTU0VSVF9TVFJJTkdfRVFVQUwocm9sZXNfYXJyWzBdLCAicm9sZV9yIik7CisgICAgQ1Vf QVNTRVJUX1NUUklOR19FUVVBTChyb2xlc19hcnJbMV0sICJteV9yb2xlX3IiKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV91c2VyX3NldF9yb2xlcyhzaCwgdXNlciwgbmV3X3JvbGVzX2FyciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X251bV9yb2xlcykgPj0g MCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9oYXNfcm9sZSh1c2VyLCAibmV3X3Jv bGVfciIpKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9oYXNfcm9sZSh1c2VyLCAibmV3 X215X3JvbGVfciIpKTsKKworICAgIENVX0FTU0VSVCghc2VtYW5hZ2VfdXNlcl9oYXNfcm9sZSh1 c2VyLCAicm9sZV9yIikpOworICAgIENVX0FTU0VSVCghc2VtYW5hZ2VfdXNlcl9oYXNfcm9sZSh1 c2VyLCAibXlfcm9sZV9yIikpOworCisgICAgc2VtYW5hZ2VfdXNlcl9kZWxfcm9sZSh1c2VyLCAi bmV3X215X3JvbGVfciIpOworICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2VyX2dldF9udW1fcm9s ZXModXNlcikgPT0gMSk7CisKKyAgICBzZW1hbmFnZV91c2VyX2RlbF9yb2xlKHVzZXIsICJuZXdf cm9sZV9yIik7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfZ2V0X251bV9yb2xlcyh1c2Vy KSA9PSAwKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV91c2VyX2ZyZWUodXNlcik7 CisgICAgY2xlYW51cF9oYW5kbGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFu YWdlX3VzZXJfY3JlYXRlCisKK3ZvaWQgdGVzdF91c2VyX2NyZWF0ZSh2b2lkKSB7CisgICAgc2Vt YW5hZ2VfdXNlcl90ICp1c2VyID0gTlVMTDsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFu ZGxlKFNIX0NPTk5FQ1QpOworCisgICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV91 c2VyX2NyZWF0ZShzaCwgJnVzZXIpID49IDApOworCisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3Vz ZXJfc2V0X25hbWUoc2gsIHVzZXIsICJ1c2VyX3UiKSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2Vt YW5hZ2VfdXNlcl9zZXRfcHJlZml4KHNoLCB1c2VyLCAidXNlciIpID49IDApOworICAgIENVX0FT U0VSVChzZW1hbmFnZV91c2VyX3NldF9tbHNsZXZlbChzaCwgdXNlciwgInMwIikgPj0gMCk7Cisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfc2V0X21sc3JhbmdlKHNoLCB1c2VyLCAiczAtczE1 IikgPj0gMCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2VfdXNlcl9mcmVlKHVzZXIp OworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1h bmFnZV91c2VyX2Nsb25lCisKK3ZvaWQgdGVzdF91c2VyX2Nsb25lKHZvaWQpIHsKKyAgICBzZW1h bmFnZV91c2VyX3QgKnVzZXIgPSBOVUxMOworICAgIHNlbWFuYWdlX3VzZXJfdCAqdXNlcl9jbG9u ZSA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNUKTsK KworICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2VyX2NyZWF0ZShzaCwgJnVzZXIpID49IDApOwor CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfc2V0X25hbWUoc2gsIHVzZXIsICJ1c2VyX3Ui KSA+PSAwKTsKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9zZXRfcHJlZml4KHNoLCB1c2Vy LCAidXNlciIpID49IDApOworICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2VyX3NldF9tbHNsZXZl bChzaCwgdXNlciwgInMwIikgPj0gMCk7CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfc2V0 X21sc3JhbmdlKHNoLCB1c2VyLCAiczAtczE1IikgPj0gMCk7CisKKyAgICAvLyB0ZXN0CisgICAg Q1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfY2xvbmUoc2gsIHVzZXIsICZ1c2VyX2Nsb25lKSA+PSAw KTsKKworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfdXNlcl9nZXRfbmFtZSh1 c2VyKSwgInVzZXJfdSIpOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwoc2VtYW5hZ2VfdXNl cl9nZXRfcHJlZml4KHVzZXIpLCAidXNlciIpOworICAgIENVX0FTU0VSVF9TVFJJTkdfRVFVQUwo c2VtYW5hZ2VfdXNlcl9nZXRfbWxzbGV2ZWwodXNlciksICJzMCIpOworICAgIENVX0FTU0VSVF9T VFJJTkdfRVFVQUwoc2VtYW5hZ2VfdXNlcl9nZXRfbWxzcmFuZ2UodXNlciksICJzMC1zMTUiKTsK KworICAgIC8vIGNsZWFudXAKKyAgICBzZW1hbmFnZV91c2VyX2ZyZWUodXNlcik7CisgICAgc2Vt YW5hZ2VfdXNlcl9mcmVlKHVzZXJfY2xvbmUpOworICAgIGNsZWFudXBfaGFuZGxlKFNIX0NPTk5F Q1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV91c2VyX3F1ZXJ5CisKK3ZvaWQgdGVzdF91 c2VyX3F1ZXJ5KHZvaWQpIHsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVzZXIgPSBOVUxMOworICAg IHNlbWFuYWdlX3VzZXJfa2V5X3QgKmtleSA9IE5VTEw7CisKKyAgICAvLyBzZXR1cAorICAgIHNl dHVwX2hhbmRsZShTSF9DT05ORUNUKTsKKworICAgIGtleSA9IGdldF91c2VyX2tleV9udGgoSV9G SVJTVCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfcXVlcnko c2gsIGtleSwgJnVzZXIpID49IDApOworCisgICAgLy8gVE9ETzogdGVzdCB2YWx1ZXMKKyAgICBD VV9BU1NFUlRfUFRSX05PVF9OVUxMKHVzZXIpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFu YWdlX3VzZXJfZnJlZSh1c2VyKTsKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30K KworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfdXNlcl9leGlzdHMKKwordm9pZCB0ZXN0X3VzZXJfZXhp c3RzKHZvaWQpIHsKKyAgICBzZW1hbmFnZV91c2VyX2tleV90ICprZXkxID0gTlVMTDsKKyAgICBz ZW1hbmFnZV91c2VyX2tleV90ICprZXkyID0gTlVMTDsKKyAgICBpbnQgcmVzcG9uc2UgPSA0MjsK KworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX0NPTk5FQ1QpOworCisgICAga2V5 MSA9IGdldF91c2VyX2tleV9udGgoSV9GSVJTVCk7CisgICAgCisgICAgQ1VfQVNTRVJUKHNlbWFu YWdlX3VzZXJfa2V5X2NyZWF0ZShzaCwgImFzZGYiLCAma2V5MikgPj0gMCk7CisKKyAgICAvLyB0 ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfZXhpc3RzKHNoLCBrZXkxLCAmcmVzcG9u c2UpID49IDApOworCisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlKTsKKworICAgIENVX0FTU0VSVChz ZW1hbmFnZV91c2VyX2V4aXN0cyhzaCwga2V5MiwgJnJlc3BvbnNlKSA+PSAwKTsKKworICAgIENV X0FTU0VSVCghcmVzcG9uc2UpOworCisgICAgLy8gY2xlYW51cAorICAgIHNlbWFuYWdlX3VzZXJf a2V5X2ZyZWUoa2V5MSk7CisgICAgc2VtYW5hZ2VfdXNlcl9rZXlfZnJlZShrZXkyKTsKKyAgICBj bGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5hZ2VfdXNl cl9jb3VudAorCit2b2lkIHRlc3RfdXNlcl9jb3VudCh2b2lkKSB7CisgICAgdW5zaWduZWQgaW50 IGNvdW50ID0gNDI7CisKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9DT05ORUNU KTsKKworICAgIC8vIHRlc3QKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9jb3VudChzaCwg JmNvdW50KSA+PSAwKTsKKyAgICAKKyAgICAvLyBUT0RPOiBjaGVjayByZWFsIGNvdW50CisgICAg Q1VfQVNTRVJUKGNvdW50ID4gMCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgY2xlYW51cF9oYW5k bGUoU0hfQ09OTkVDVCk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJfaXRlcmF0ZQor Cit1bnNpZ25lZCBpbnQgY291bnRlcl91c2VyX2l0ZXJhdGUgPSAwOworCitpbnQgaGFuZGxlcl91 c2VyX2l0ZXJhdGUoY29uc3Qgc2VtYW5hZ2VfdXNlcl90ICpyZWNvcmQsIHZvaWQgKnZhcmcpIHsK KyAgICBjb3VudGVyX3VzZXJfaXRlcmF0ZSsrOworICAgIHJldHVybiAwOworfQorCit2b2lkIHRl c3RfdXNlcl9pdGVyYXRlKHZvaWQpIHsKKyAgICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShT SF9DT05ORUNUKTsKKworICAgIC8vIHRlc3QKKyAgICBzZW1hbmFnZV91c2VyX2l0ZXJhdGUoc2gs IGhhbmRsZXJfdXNlcl9pdGVyYXRlLCBOVUxMKTsKKworICAgIC8vIFRPRE86IGNoZWNrIHJlYWwg Y291bnQKKyAgICBDVV9BU1NFUlQoY291bnRlcl91c2VyX2l0ZXJhdGUgPiAwKTsKKworICAgIC8v IGNsZWFudXAKKyAgICBjbGVhbnVwX2hhbmRsZShTSF9DT05ORUNUKTsKK30KKworLy8gRnVuY3Rp b24gc2VtYW5hZ2VfdXNlcl9saXN0CisKK3ZvaWQgdGVzdF91c2VyX2xpc3Qodm9pZCkgeworICAg IHNlbWFuYWdlX3VzZXJfdCAqKnJlY29yZHMgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBjb3Vu dCA9IDQyOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5kbGUoU0hfQ09OTkVDVCk7CisK KyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfbGlzdChzaCwgJnJlY29y ZHMsICZjb3VudCkgPj0gMCk7CisKKyAgICAvLyBUT0RPOiBjaGVjayByZWFsIGNvdW50CisgICAg Q1VfQVNTRVJUKGNvdW50ID4gMCk7CisKKyAgICAvLyBUT0RPOiBjaGVjayByZWFsIHZhbHVlcwor ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBD VV9BU1NFUlRfUFRSX05PVF9OVUxMKHJlY29yZHNbaV0pOworICAgIH0KKworICAgIGZvciAodW5z aWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzZW1hbmFnZV91c2Vy X2ZyZWUocmVjb3Jkc1tpXSk7CisgICAgfQorCisgICAgLy8gY2xlYW51cAorICAgIGNsZWFudXBf aGFuZGxlKFNIX0NPTk5FQ1QpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV91c2VyX21vZGlm eV9sb2NhbCwgc2VtYW5hZ2VfdXNlcl9kZWxfbG9jYWwsCisvLyBzZW1hbmFnZV91c2VyX3F1ZXJ5 X2xvY2FsCisKK3ZvaWQgdGVzdF91c2VyX21vZGlmeV9kZWxfcXVlcnlfbG9jYWwodm9pZCkgewor ICAgIHNlbWFuYWdlX3VzZXJfdCAqdXNlcjsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVzZXJfbG9j YWw7CisgICAgc2VtYW5hZ2VfdXNlcl9rZXlfdCAqa2V5ID0gTlVMTDsKKworICAgIC8vIHNldHVw CisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5TKTsKKworICAgIHVzZXIgPSBnZXRfdXNlcl9udGgo SV9GSVJTVCk7CisKKyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9rZXlfZXh0cmFjdChzaCwg dXNlciwgJmtleSkgPj0gMCk7CisgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChrZXkpOworCisg ICAgLy8gdGVzdAorICAgIENVX0FTU0VSVChzZW1hbmFnZV91c2VyX21vZGlmeV9sb2NhbChzaCwg a2V5LCB1c2VyKSA+PSAwKTsKKworICAgIC8vIHdyaXRlIGNoYW5nZXMgdG8gZmlsZQorICAgIGhl bHBlcl9jb21taXQoKTsKKyAgICBoZWxwZXJfYmVnaW5fdHJhbnNhY3Rpb24oKTsKKworICAgIENV X0FTU0VSVChzZW1hbmFnZV91c2VyX3F1ZXJ5X2xvY2FsKHNoLCBrZXksICZ1c2VyX2xvY2FsKSA+ PSAwKTsKKyAgICBDVV9BU1NFUlRfUFRSX05PVF9OVUxMX0ZBVEFMKHVzZXJfbG9jYWwpOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfZGVsX2xvY2FsKHNoLCBrZXkpID49IDApOworCisg ICAgQ1VfQVNTRVJUKHNlbWFuYWdlX3VzZXJfcXVlcnlfbG9jYWwoc2gsIGtleSwgJnVzZXJfbG9j YWwpIDwgMCk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgc2VtYW5hZ2VfdXNlcl9mcmVlKHVzZXIp OworICAgIGNsZWFudXBfaGFuZGxlKFNIX1RSQU5TKTsKK30KKworLy8gRnVuY3Rpb24gc2VtYW5h Z2VfdXNlcl9leGlzdHNfbG9jYWwKKwordm9pZCB0ZXN0X3VzZXJfZXhpc3RzX2xvY2FsKHZvaWQp IHsKKyAgICBzZW1hbmFnZV91c2VyX3QgKnVzZXIgPSBOVUxMOworICAgIHNlbWFuYWdlX3VzZXJf a2V5X3QgKmtleTEgPSBOVUxMOworICAgIHNlbWFuYWdlX3VzZXJfa2V5X3QgKmtleTIgPSBOVUxM OworICAgIGludCByZXNwb25zZSA9IDQyOworCisgICAgLy8gc2V0dXAKKyAgICBzZXR1cF9oYW5k bGUoU0hfVFJBTlMpOworCisgICAgYWRkX2xvY2FsX3VzZXIoSV9GSVJTVCk7CisKKyAgICBrZXkx ID0gZ2V0X3VzZXJfa2V5X250aChJX0ZJUlNUKTsKKworICAgIENVX0FTU0VSVChzZW1hbmFnZV91 c2VyX2tleV9jcmVhdGUoc2gsICJhc2RmIiwgJmtleTIpID49IDApOworICAgIENVX0FTU0VSVF9Q VFJfTk9UX05VTEwoa2V5Mik7CisKKyAgICAvLyB0ZXN0IGV4aXN0aW5nCisgICAgQ1VfQVNTRVJU KHNlbWFuYWdlX3VzZXJfZXhpc3RzX2xvY2FsKHNoLCBrZXkxLCAmcmVzcG9uc2UpID49IDApOwor CisgICAgQ1VfQVNTRVJUKHJlc3BvbnNlKTsKKworICAgIC8vIHRlc3Qgbm9uZXhpc3RlbnQKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9leGlzdHNfbG9jYWwoc2gsIGtleTIsICZyZXNwb25z ZSkgPj0gMCk7CisKKyAgICBDVV9BU1NFUlQoIXJlc3BvbnNlKTsKKworICAgIC8vIGNsZWFudXAK KyAgICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9kZWxfbG9jYWwoc2gsIGtleTEpID49IDApOwor ICAgIHNlbWFuYWdlX3VzZXJfZnJlZSh1c2VyKTsKKyAgICBzZW1hbmFnZV91c2VyX2tleV9mcmVl KGtleTEpOworICAgIHNlbWFuYWdlX3VzZXJfa2V5X2ZyZWUoa2V5Mik7CisgICAgY2xlYW51cF9o YW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV91c2VyX2NvdW50X2xv Y2FsCisKK3ZvaWQgdGVzdF91c2VyX2NvdW50X2xvY2FsKHZvaWQpIHsKKyAgICB1bnNpZ25lZCBp bnQgY291bnQgPSA0MjsKKworICAgIC8vIHNldHVwCisgICAgc2V0dXBfaGFuZGxlKFNIX1RSQU5T KTsKKworICAgIGFkZF9sb2NhbF91c2VyKElfRklSU1QpOworICAgIGFkZF9sb2NhbF91c2VyKElf U0VDT05EKTsKKyAgICBhZGRfbG9jYWxfdXNlcihJX1RISVJEKTsKKworICAgIC8vIHRlc3QKKyAg ICBDVV9BU1NFUlQoc2VtYW5hZ2VfdXNlcl9jb3VudF9sb2NhbChzaCwgJmNvdW50KSA+PSAwKTsK KworICAgIENVX0FTU0VSVChjb3VudCA9PSAzKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBkZWxl dGVfbG9jYWxfdXNlcihJX0ZJUlNUKTsKKyAgICBkZWxldGVfbG9jYWxfdXNlcihJX1NFQ09ORCk7 CisgICAgZGVsZXRlX2xvY2FsX3VzZXIoSV9USElSRCk7CisKKyAgICBjbGVhbnVwX2hhbmRsZShT SF9UUkFOUyk7Cit9CisKKy8vIEZ1bmN0aW9uIHNlbWFuYWdlX3VzZXJfaXRlcmF0ZV9sb2NhbAor Cit1bnNpZ25lZCBpbnQgY291bnRlcl91c2VyX2l0ZXJhdGVfbG9jYWwgPSAwOworCitpbnQgaGFu ZGxlcl91c2VyX2l0ZXJhdGVfbG9jYWwoY29uc3Qgc2VtYW5hZ2VfdXNlcl90ICpyZWNvcmQsIHZv aWQgKnZhcmcpIHsKKyAgICBjb3VudGVyX3VzZXJfaXRlcmF0ZV9sb2NhbCsrOworICAgIHJldHVy biAwOworfQorCit2b2lkIHRlc3RfdXNlcl9pdGVyYXRlX2xvY2FsKHZvaWQpIHsKKyAgICAvLyBz ZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBhZGRfbG9jYWxfdXNlcihJ X0ZJUlNUKTsKKyAgICBhZGRfbG9jYWxfdXNlcihJX1NFQ09ORCk7CisgICAgYWRkX2xvY2FsX3Vz ZXIoSV9USElSRCk7CisKKyAgICAvLyB0ZXN0CisgICAgc2VtYW5hZ2VfdXNlcl9pdGVyYXRlX2xv Y2FsKHNoLCBoYW5kbGVyX3VzZXJfaXRlcmF0ZV9sb2NhbCwgTlVMTCk7CisKKyAgICBDVV9BU1NF UlQoY291bnRlcl91c2VyX2l0ZXJhdGVfbG9jYWwgPT0gMyk7CisKKyAgICAvLyBjbGVhbnVwCisg ICAgZGVsZXRlX2xvY2FsX3VzZXIoSV9GSVJTVCk7CisgICAgZGVsZXRlX2xvY2FsX3VzZXIoSV9T RUNPTkQpOworICAgIGRlbGV0ZV9sb2NhbF91c2VyKElfVEhJUkQpOworCisgICAgY2xlYW51cF9o YW5kbGUoU0hfVFJBTlMpOworfQorCisvLyBGdW5jdGlvbiBzZW1hbmFnZV91c2VyX2xpc3RfbG9j YWwKKwordm9pZCB0ZXN0X3VzZXJfbGlzdF9sb2NhbCh2b2lkKSB7CisgICAgc2VtYW5hZ2VfdXNl cl90ICoqcmVjb3JkcyA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gNDI7CisKKyAg ICAvLyBzZXR1cAorICAgIHNldHVwX2hhbmRsZShTSF9UUkFOUyk7CisKKyAgICBhZGRfbG9jYWxf dXNlcihJX0ZJUlNUKTsKKyAgICBhZGRfbG9jYWxfdXNlcihJX1NFQ09ORCk7CisgICAgYWRkX2xv Y2FsX3VzZXIoSV9USElSRCk7CisKKyAgICAvLyB0ZXN0CisgICAgQ1VfQVNTRVJUKHNlbWFuYWdl X3VzZXJfbGlzdF9sb2NhbChzaCwgJnJlY29yZHMsICZjb3VudCkgPj0gMCk7CisKKyAgICBDVV9B U1NFUlQoY291bnQgPT0gMyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv dW50OyBpKyspIHsKKyAgICAgICAgQ1VfQVNTRVJUX1BUUl9OT1RfTlVMTChyZWNvcmRzW2ldKTsK KyAgICB9CisKKyAgICAvLyBjbGVhbnVwCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7CisgICAgICAgIHNlbWFuYWdlX3VzZXJfZnJlZShyZWNvcmRzW2ldKTsK KyAgICB9CisKKyAgICBkZWxldGVfbG9jYWxfdXNlcihJX0ZJUlNUKTsKKyAgICBkZWxldGVfbG9j YWxfdXNlcihJX1NFQ09ORCk7CisgICAgZGVsZXRlX2xvY2FsX3VzZXIoSV9USElSRCk7CisKKyAg ICBjbGVhbnVwX2hhbmRsZShTSF9UUkFOUyk7Cit9CisKCmRpZmYgLS1naXQgYS9saWJzZW1hbmFn ZS9zYW5pdHktdGVzdHMvdGVzdHMvdGVzdF91c2VyLmggYi9saWJzZW1hbmFnZS9zYW5pdHktdGVz dHMvdGVzdHMvdGVzdF91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjJjMzc0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnNlbWFuYWdlL3Nhbml0eS10ZXN0cy90ZXN0 cy90ZXN0X3VzZXIuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9fVEVTVF9VU0VSX0hfXwor I2RlZmluZSBfX1RFU1RfVVNFUl9IX18KKworI2luY2x1ZGUgPENVbml0L0Jhc2ljLmg+CisKK2lu dCB1c2VyX3Rlc3RfaW5pdCh2b2lkKTsKK2ludCB1c2VyX3Rlc3RfY2xlYW51cCh2b2lkKTsKK2lu dCB1c2VyX2FkZF90ZXN0cyhDVV9wU3VpdGUgc3VpdGUpOworCisvLyB1c2VyX3JlY29yZC5oCisK K3ZvaWQgdGVzdF91c2VyX2NvbXBhcmUodm9pZCk7Cit2b2lkIHRlc3RfdXNlcl9jb21wYXJlMih2 b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2tleV9jcmVhdGUodm9pZCk7Cit2b2lkIHRlc3RfdXNlcl9r ZXlfZXh0cmFjdCh2b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2dldF9zZXRfbmFtZSh2b2lkKTsKK3Zv aWQgdGVzdF91c2VyX2dldF9zZXRfcHJlZml4KHZvaWQpOwordm9pZCB0ZXN0X3VzZXJfZ2V0X3Nl dF9tbHNsZXZlbCh2b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2dldF9zZXRfbWxzcmFuZ2Uodm9pZCk7 Cit2b2lkIHRlc3RfdXNlcl9yb2xlcyh2b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2NyZWF0ZSh2b2lk KTsKK3ZvaWQgdGVzdF91c2VyX2Nsb25lKHZvaWQpOworCisvLyB1c2Vyc19wb2xpY3kuaAorCit2 b2lkIHRlc3RfdXNlcl9xdWVyeSh2b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2V4aXN0cyh2b2lkKTsK K3ZvaWQgdGVzdF91c2VyX2NvdW50KHZvaWQpOwordm9pZCB0ZXN0X3VzZXJfaXRlcmF0ZSh2b2lk KTsKK3ZvaWQgdGVzdF91c2VyX2xpc3Qodm9pZCk7CisKKy8vIHVzZXJzX2xvY2FsLmgKKwordm9p ZCB0ZXN0X3VzZXJfbW9kaWZ5X2RlbF9xdWVyeV9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF91c2Vy X2V4aXN0c19sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2NvdW50X2xvY2FsKHZvaWQpOwor dm9pZCB0ZXN0X3VzZXJfaXRlcmF0ZV9sb2NhbCh2b2lkKTsKK3ZvaWQgdGVzdF91c2VyX2xpc3Rf bG9jYWwodm9pZCk7CisKKyNlbmRpZgorCg==