From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 13546 invoked from network); 14 Jun 2021 20:39:20 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 14 Jun 2021 20:39:20 -0000 Received: from mail-ot1-f49.google.com ([209.85.210.49]) by 1ess; Mon Jun 14 16:27:53 -0400 2021 Received: by mail-ot1-f49.google.com with SMTP id h24-20020a9d64180000b029036edcf8f9a6so12115755otl.3 for <9front@9front.org>; Mon, 14 Jun 2021 13:27:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=1gk4cUS8Xa2OlbSlaeX3wIY1kROXUJACYCVgkyriUN0=; b=nHpzBdpUFFULhBFCKGCwXFUW5z3fsdEUlNRjqmDNvp4eiZ45UQZhAsuCjbuGkym8mn gxhT8IFHsLvfJ8lXr7oNWzf1CxsGpCaj1i/84snGfl9zwYTcGDgJkxz3s0ZE9O7a62Wv hcvJ4NqbCALUsudH6YXGClITteGzHJBuQuXSxu6OVNT42Z3NPr9D0+/ujSJDVKXRfoMw Jxc03QYi28Ehp6pFMWe47rwA72dDYY/drvINM+dghgd05Bkpd32bOoNjgyi7dvkJACPw LiJUDWHxY/RGaa2Fj5FqFnb5hZynlxCbUtoC7Ls4pNdTZ/qKcmbXfttbyaPGiVJ4i9fs xFZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=1gk4cUS8Xa2OlbSlaeX3wIY1kROXUJACYCVgkyriUN0=; b=BoBij0yjBpjeqoF1+wDAjGBAJn+3PJa8UNnIcGdZGamqAOXeqrYla+U5r8qSMCKD9a FyNuQTz3aCTkiHUw7ZOgPiZEw7r8k2Z8TRH/2Tg4YQttExW0kIE26UGg/xrL+lrHCxfo jAIVJ1eeXO12YC2d2PxbCnz8sZ3OQV8i0TpfwEMBhHtOAlHMXsPeLzKNKdHTD7py6GJG Wf1sh3R6+2yAfjswHMkOqa9bAPyIMMH7atnyA7tD0iBMjwt1T1tJp1vFRtvJt56ushbn 1pI/XrzSpGh+sGuLsQx0qR6XAQlO2S4IQm1LTmHdk2PbAyOTKL4R8amSWCtyknvF8ZAB MZnw== X-Gm-Message-State: AOAM532Rqad3yXnVSnyaBEEdGaJjFgkeRM0+of5VpsVEm7SGRuXdjjio rPsCabDjd+I9UAEfU/RcHuZqZDxwPc/clIV4N+FoFb6FQTw= X-Google-Smtp-Source: ABdhPJwPyGO4GDikmVM9pQAYuks3AWaiupzz1bdutytXVQymbkZ9bq20lL6JBl2hFvdVMGcYuuBPeYORE5l1JgU1O34= X-Received: by 2002:a05:6830:30a8:: with SMTP id g8mr15274203ots.122.1623702465108; Mon, 14 Jun 2021 13:27:45 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ac9:410a:0:0:0:0:0 with HTTP; Mon, 14 Jun 2021 13:27:44 -0700 (PDT) In-Reply-To: <144E4812C04A086AA104EB478BFC153F@felloff.net> References: <144E4812C04A086AA104EB478BFC153F@felloff.net> From: kemal Date: Mon, 14 Jun 2021 20:27:44 +0000 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="000000000000a774b805c4bfb0a3" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: mobile DOM just-in-time service-oriented rails controller Subject: Re: [9front] libsec: various tls changes Reply-To: 9front@9front.org Precedence: bulk --000000000000a774b805c4bfb0a3 Content-Type: text/plain; charset="UTF-8" > ok, that looks good. before, we would always just pick secp256r1, > no negotiation whatsoever. i just wonder what the rfc sais, now > that we have negotiation for it... it might be better to just > error and close the connection instead? according to rfc 8422 section 5.1 we should not negotiate ecdh* ciphers if we can't find a suitable curve, if i understood correctly. If a server does not understand the Supported Elliptic Curves Extension, does not understand the Supported Point Formats Extension, or is unable to complete the ECC handshake while restricting itself to the enumerated curves and point formats, it MUST NOT negotiate the use of an ECC cipher suite. Depending on what other cipher suites are proposed by the client and supported by the server, this may result in a fatal handshake failure alert due to the lack of common cipher suites. tlsServer2 now tells okCipher to not pass over ECDHE ciphers if we couldn't find a suitable curve. --000000000000a774b805c4bfb0a3 Content-Type: text/plain; charset="US-ASCII"; name="patchset.txt" Content-Disposition: attachment; filename="patchset.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 RnJvbSA5M2M2YjYzNjY4MGEyMDY5YzRhNjBhYzk4Y2E5ODM0MThmZDU0OTIyCkZyb206IGtlbWFs IDxrZW1hbGluYW5jOEBnbWFpbC5jb20+CkRhdGU6IE1vbiwgMTQgSnVuIDIwMjEgMjA6MjE6NTMg KzAwMDAKU3ViamVjdDogW1BBVENIXSBsaWJzZWM6IHZhcmlvdXMgY2hhbmdlcyB0byB0bHMKCgox LiBhZGQgdGhlIGN1cnZlIHgyNTUxOSB0byB0bHMsIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIuCml0 J3MgbW9yZSBmYXN0ZXIsIGltbXVuZSB0byB0aW1pbmcgYXR0YWNrcyBieSBkZXNpZ24sCmRvZXMg bm90IHJlcXVpcmUgdmVyaWZ5aW5nIGlmIHRoZSBwdWJsaWMga2V5IGlzIHZhbGlkLApldGMgZXRj LiBzZXJ2ZXItc2lkZSBoYXMgdG8gY2hlY2sgaWYgdGhlIGNsaWVudCBzdXBwb3J0cwp0aGUgY3Vy dmUsIHNvIGEgbmV3IGZ1bmN0aW9uIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gcGFyc2UKdGhlIGNs aWVudCdzIGV4dGVuc2lvbnMuCgoyLiByZWplY3Qgd2VhayBkaGUgcHJpbWVzIHRoYXQgY2FuIGJl IGVhc2lseSBjcmFja2VkIHdpdGgKdGhlIG51bWJlciBmaWVsZCBzaWV2ZSBhbGdvcml0aG0uIHRo aXMgYXZvaWRzIGF0dGFja3MgbGlrZQpsb2dqYW0uCgozLiBzdG9wIHB1dHRpbmcgdW5peCB0aW1l IHRvIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIGNsaWVudC8Kc2VydmVyIHJhbmRvbS4gaXQgY2FuIGFs bG93IGZpbmdlcnByaW50aW5nLCB0bHMgMS4zIGRvZXNuJ3QKcmVjb21tZW5kIGl0IGFueSBtb3Jl IGFuZCB0aGVyZSB3YXMgYSBkcmFmdCB0byBkZXByZWNhdGUKdGhpcyBiZWhhdmlvdXIgZWFybGll ci5bMV0KCjQuIHNpbXBseSBwcmYgY29kZSwgcmVtb3ZlIHVzZWxlc3MgY2lwaGVyIGVudW1zLgoK WzFdIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtbWF0aGV3c29u LW5vLWdtdHVuaXh0aW1lLTAwCi0tLQpkaWZmIGE3M2E5NjRlNTEyNDdlZDE2OWQzMjJjNzI1YTNh MTg4NTlmMTA5YTMgOTNjNmI2MzY2ODBhMjA2OWM0YTYwYWM5OGNhOTgzNDE4ZmQ1NDkyMgotLS0g YS9zeXMvc3JjL2xpYnNlYy9wb3J0L3Rsc2hhbmQuYwlNb24gSnVuIDE0IDAzOjAwOjM3IDIwMjEK KysrIGIvc3lzL3NyYy9saWJzZWMvcG9ydC90bHNoYW5kLmMJTW9uIEp1biAxNCAyMzoyMTo1MyAy MDIxCkBAIC02NiwxOCArNjYsMjAgQEAKIAlpbnQgcHNrbGVuOwogCWludCBjbGllbnRWZXJzOwkJ CS8vIHZlcnNpb24gaW4gQ2xpZW50SGVsbG8KIAl1Y2hhciBzZWNbTWFzdGVyU2VjcmV0U2l6ZV07 CS8vIG1hc3RlciBzZWNyZXQKLQl1Y2hhciBjcmFuZG9tW1JhbmRvbVNpemVdOwkvLyBjbGllbnQg cmFuZG9tCiAJdWNoYXIgc3JhbmRvbVtSYW5kb21TaXplXTsJLy8gc2VydmVyIHJhbmRvbQorCXVj aGFyIGNyYW5kb21bUmFuZG9tU2l6ZV07CS8vIGNsaWVudCByYW5kb20KIAorCU5hbWVkY3VydmUg Km5jOyAvLyBzZWxlY3RlZCBjdXJ2ZSBmb3IgRUNESEUKIAkvLyBkaWZmaWUgaGVsbG1hbiBzdGF0 ZQogCURIc3RhdGUgZGg7CiAJc3RydWN0IHsKIAkJRUNkb21haW4gZG9tOwogCQlFQ3ByaXYgUTsK IAl9IGVjOworCXVjaGFyIFhbMzJdOwogCiAJLy8gYnl0ZSBnZW5lcmF0aW9uIGFuZCBoYW5kc2hh a2UgY2hlY2tzdW0KLQl2b2lkICgqcHJmKSh1Y2hhciosIGludCwgdWNoYXIqLCBpbnQsIGNoYXIq LCB1Y2hhciosIGludCwgdWNoYXIqLCBpbnQpOworCXZvaWQgKCpwcmYpKHVjaGFyKiwgaW50LCB1 Y2hhciosIGludCwgY2hhciosIHVjaGFyKiwgaW50KTsKIAl2b2lkICgqc2V0RmluaXNoZWQpKFRs c1NlYyosIEhhbmRzaGFrZUhhc2gsIHVjaGFyKiwgaW50KTsKIAlpbnQgbmZpbjsKIH07CkBAIC0x MDcsNyArMTA5LDcgQEAKIAlpbnQgdGFnOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCWludCB2 ZXJzaW9uOworCQkJaW50CXZlcnNpb247CiAJCQl1Y2hhciAJcmFuZG9tW1JhbmRvbVNpemVdOwog CQkJQnl0ZXMqCXNpZDsKIAkJCUludHMqCWNpcGhlcnM7CkBAIC0xMTUsNyArMTE3LDcgQEAKIAkJ CUJ5dGVzKglleHRlbnNpb25zOwogCQl9IGNsaWVudEhlbGxvOwogCQlzdHJ1Y3QgewotCQkJaW50 IHZlcnNpb247CisJCQlpbnQJdmVyc2lvbjsKIAkJCXVjaGFyCXJhbmRvbVtSYW5kb21TaXplXTsK IAkJCUJ5dGVzKglzaWQ7CiAJCQlpbnQJY2lwaGVyOwpAQCAtMjE0LDc5ICsyMTYsMzYgQEAKIAog Ly8gY2lwaGVyIHN1aXRlcwogZW51bSB7Ci0JVExTX05VTExfV0lUSF9OVUxMX05VTEwJCQk9IDB4 MDAwMCwKLQlUTFNfUlNBX1dJVEhfTlVMTF9NRDUJCQk9IDB4MDAwMSwKLQlUTFNfUlNBX1dJVEhf TlVMTF9TSEEJCQk9IDB4MDAwMiwKLQlUTFNfUlNBX0VYUE9SVF9XSVRIX1JDNF80MF9NRDUJCT0g MHgwMDAzLAotCVRMU19SU0FfV0lUSF9SQzRfMTI4X01ENQkJPSAweDAwMDQsCi0JVExTX1JTQV9X SVRIX1JDNF8xMjhfU0hBCQk9IDB4MDAwNSwKLQlUTFNfUlNBX0VYUE9SVF9XSVRIX1JDMl9DQkNf NDBfTUQ1CT0gMFgwMDA2LAotCVRMU19SU0FfV0lUSF9JREVBX0NCQ19TSEEJCT0gMFgwMDA3LAot CVRMU19SU0FfRVhQT1JUX1dJVEhfREVTNDBfQ0JDX1NIQQk9IDBYMDAwOCwKLQlUTFNfUlNBX1dJ VEhfREVTX0NCQ19TSEEJCT0gMFgwMDA5LAogCVRMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hB CQk9IDBYMDAwQSwKLQlUTFNfREhfRFNTX0VYUE9SVF9XSVRIX0RFUzQwX0NCQ19TSEEJPSAwWDAw MEIsCi0JVExTX0RIX0RTU19XSVRIX0RFU19DQkNfU0hBCQk9IDBYMDAwQywKLQlUTFNfREhfRFNT X1dJVEhfM0RFU19FREVfQ0JDX1NIQQk9IDBYMDAwRCwKLQlUTFNfREhfUlNBX0VYUE9SVF9XSVRI X0RFUzQwX0NCQ19TSEEJPSAwWDAwMEUsCi0JVExTX0RIX1JTQV9XSVRIX0RFU19DQkNfU0hBCQk9 IDBYMDAwRiwKLQlUTFNfREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQk9IDBYMDAxMCwKLQlU TFNfREhFX0RTU19FWFBPUlRfV0lUSF9ERVM0MF9DQkNfU0hBCT0gMFgwMDExLAotCVRMU19ESEVf RFNTX1dJVEhfREVTX0NCQ19TSEEJCT0gMFgwMDEyLAotCVRMU19ESEVfRFNTX1dJVEhfM0RFU19F REVfQ0JDX1NIQQk9IDBYMDAxMywJLy8gWlpaIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIHRsczEu MCBjb21wbGlhbmNlCi0JVExTX0RIRV9SU0FfRVhQT1JUX1dJVEhfREVTNDBfQ0JDX1NIQQk9IDBY MDAxNCwKLQlUTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCQk9IDBYMDAxNSwKIAlUTFNfREhF X1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEJPSAwWDAwMTYsCi0JVExTX0RIX2Fub25fRVhQT1JU X1dJVEhfUkM0XzQwX01ENQk9IDB4MDAxNywKLQlUTFNfREhfYW5vbl9XSVRIX1JDNF8xMjhfTUQ1 CQk9IDB4MDAxOCwKLQlUTFNfREhfYW5vbl9FWFBPUlRfV0lUSF9ERVM0MF9DQkNfU0hBCT0gMFgw MDE5LAotCVRMU19ESF9hbm9uX1dJVEhfREVTX0NCQ19TSEEJCT0gMFgwMDFBLAotCVRMU19ESF9h bm9uX1dJVEhfM0RFU19FREVfQ0JDX1NIQQk9IDBYMDAxQiwKLQlUTFNfUlNBX1dJVEhfQUVTXzEy OF9DQkNfU0hBCQk9IDBYMDAyRiwJLy8gYWVzLCBha2EgcmlqbmRhZWwgd2l0aCAxMjggYml0IGJs b2NrcwotCVRMU19ESF9EU1NfV0lUSF9BRVNfMTI4X0NCQ19TSEEJCT0gMFgwMDMwLAotCVRMU19E SF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEJCT0gMFgwMDMxLAotCVRMU19ESEVfRFNTX1dJVEhf QUVTXzEyOF9DQkNfU0hBCT0gMFgwMDMyLAorCisJVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QQkJPSAwWDAwMkYsCiAJVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEJPSAwWDAwMzMs Ci0JVExTX0RIX2Fub25fV0lUSF9BRVNfMTI4X0NCQ19TSEEJPSAwWDAwMzQsCiAJVExTX1JTQV9X SVRIX0FFU18yNTZfQ0JDX1NIQQkJPSAwWDAwMzUsCi0JVExTX0RIX0RTU19XSVRIX0FFU18yNTZf Q0JDX1NIQQkJPSAwWDAwMzYsCi0JVExTX0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQkJPSAw WDAwMzcsCi0JVExTX0RIRV9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEJPSAwWDAwMzgsCiAJVExT X0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEJPSAwWDAwMzksCi0JVExTX0RIX2Fub25fV0lU SF9BRVNfMjU2X0NCQ19TSEEJPSAwWDAwM0EsCiAJVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QTI1NgkJPSAwWDAwM0MsCiAJVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgkJPSAwWDAw M0QsCiAJVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJPSAwWDAwNjcsCiAKIAlU TFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQk9IDB4MDA5QywKLQlUTFNfUlNBX1dJVEhf QUVTXzI1Nl9HQ01fU0hBMzg0CQk9IDB4MDA5RCwKIAlUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhf R0NNX1NIQTI1Ngk9IDB4MDA5RSwKLQlUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4 NAk9IDB4MDA5RiwKLQlUTFNfREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CT0gMHgwMEEw LAotCVRMU19ESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJPSAweDAwQTEsCi0JVExTX0RI RV9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJPSAweDAwQTIsCi0JVExTX0RIRV9EU1NfV0lU SF9BRVNfMjU2X0dDTV9TSEEzODQJPSAweDAwQTMsCi0JVExTX0RIX0RTU19XSVRIX0FFU18xMjhf R0NNX1NIQTI1Ngk9IDB4MDBBNCwKLQlUTFNfREhfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0 CT0gMHgwMEE1LAotCVRMU19ESF9hbm9uX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CT0gMHgwMEE2 LAotCVRMU19ESF9hbm9uX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CT0gMHgwMEE3LAotCi0JVExT X0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ID0gMHhDMDJCLAotCVRMU19FQ0RI RV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJPSAweEMwMkYsCiAKIAlUTFNfRUNESEVfUlNB X1dJVEhfQUVTXzEyOF9DQkNfU0hBCT0gMHhDMDEzLAogCVRMU19FQ0RIRV9SU0FfV0lUSF9BRVNf MjU2X0NCQ19TSEEJPSAweEMwMTQsCi0JVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QTI1Ngk9IDB4QzAyNywKIAlUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJ PSAweEMwMjMsCisJVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1Ngk9IDB4QzAy NywKIAotCVRMU19FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NBOCwKLQlU TFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NBOSwKLQlUTFNfREhF X1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CT0gMHhDQ0FBLAorCVRMU19FQ0RIRV9FQ0RTQV9X SVRIX0FFU18xMjhfR0NNX1NIQTI1NiA9IDB4QzAyQiwKKwlUTFNfRUNESEVfUlNBX1dJVEhfQUVT XzEyOF9HQ01fU0hBMjU2CT0gMHhDMDJGLAogCiAJR09PR0xFX0VDREhFX1JTQV9XSVRIX0NIQUNI QTIwX1BPTFkxMzA1CQk9IDB4Q0MxMywKIAlHT09HTEVfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEy MF9QT0xZMTMwNQk9IDB4Q0MxNCwKIAlHT09HTEVfREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkx MzA1CQk9IDB4Q0MxNSwKIAorCVRMU19FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9 IDB4Q0NBOCwKKwlUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NB OSwKKwlUTFNfREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CT0gMHhDQ0FBLAorCiAJVExT X1BTS19XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CQk9IDB4Q0NBQiwKIAlUTFNfUFNLX1dJVEhfQUVT XzEyOF9DQkNfU0hBMjU2CQk9IDB4MDBBRSwKIAlUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hB CQk9IDB4MDA4QywKQEAgLTMwMCw2ICsyNTksMjAgQEAKIAlDb21wcmVzc2lvbk1heAogfTsKIAor CisvLyBjdXJ2ZXMKK2VudW0geworCVgyNTUxOSA9IDB4MDAxZCwKK307CisKKy8vIGV4dGVuc2lv bnMKK2VudW0geworCUV4dHNuaSA9IDB4MDAwMCwKKwlFeHRlYyA9IDB4MDAwYSwKKwlFeHRlY3Ag PSAweDAwMGIsCisJRXh0c2lnYWxncyA9IDB4MDAwZCwKK307CisKIHN0YXRpYyBBbGdzIGNpcGhl ckFsZ3NbXSA9IHsKIAkvLyBFQ0RIRS1FQ0RTQQogCXsiY2Nwb2x5OTZfYWVhZCIsICJjbGVhciIs IDIqKDMyKzEyKSwgVExTX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDV9LApAQCAt MzQzLDYgKzMxNiw3IEBACiB9OwogCiBzdGF0aWMgTmFtZWRjdXJ2ZSBuYW1lZGN1cnZlc1tdID0g eworCVgyNTUxOSwgbmlsLAogCTB4MDAxNywgc2VjcDI1NnIxLAogCTB4MDAxOCwgc2VjcDM4NHIx LAogfTsKQEAgLTQwMiw3ICszNzYsNyBAQAogc3RhdGljIGludCBpc0VDRFNBKGludCB0bHNpZCk7 CiAKIHN0YXRpYyBpbnQgc2V0QWxncyhUbHNDb25uZWN0aW9uICpjLCBpbnQgYSk7Ci1zdGF0aWMg aW50IG9rQ2lwaGVyKEludHMgKmN2LCBpbnQgaXNwc2spOworc3RhdGljIGludCBva0NpcGhlcihJ bnRzICpjdiwgaW50IGlzcHNrLCBpbnQgY2FuZWMpOwogc3RhdGljIGludCBva0NvbXByZXNzaW9u KEJ5dGVzICpjdik7CiBzdGF0aWMgaW50IGluaXRDaXBoZXJzKHZvaWQpOwogc3RhdGljIEludHMq IG1ha2VjaXBoZXJzKGludCBpc3Bzayk7CkBAIC00MTMsNyArMzg3LDcgQEAKIAogc3RhdGljIHZv aWQJdGxzU2VjSW5pdHMoVGxzU2VjICpzZWMsIGludCBjdmVycywgdWNoYXIgKmNyYW5kb20pOwog c3RhdGljIGludAl0bHNTZWNSU0FzKFRsc1NlYyAqc2VjLCBCeXRlcyAqZXBtKTsKLXN0YXRpYyBC eXRlcyoJdGxzU2VjRUNESEVzMShUbHNTZWMgKnNlYywgTmFtZWRjdXJ2ZSAqbmMpOworc3RhdGlj IEJ5dGVzKgl0bHNTZWNFQ0RIRXMxKFRsc1NlYyAqc2VjKTsKIHN0YXRpYyBpbnQJdGxzU2VjRUNE SEVzMihUbHNTZWMgKnNlYywgQnl0ZXMgKlljKTsKIHN0YXRpYyB2b2lkCXRsc1NlY0luaXRjKFRs c1NlYyAqc2VjLCBpbnQgY3ZlcnMpOwogc3RhdGljIEJ5dGVzKgl0bHNTZWNSU0FjKFRsc1NlYyAq c2VjLCB1Y2hhciAqY2VydCwgaW50IG5jZXJ0KTsKQEAgLTQ1NCw2ICs0MjgsNyBAQAogewogCWNo YXIgYnVmWzhdOwogCWNoYXIgZG5hbWVbNjRdOworCXVjaGFyIHNlZWRbMipSYW5kb21TaXplXTsK IAlpbnQgbiwgZGF0YSwgY3RsLCBoYW5kOwogCVRsc0Nvbm5lY3Rpb24gKnRsczsKIApAQCAtNDk4 LDEzICs0NzMsMTUgQEAKIAljb25uLT5zZXNzaW9uSUQgPSBuaWw7CiAJaWYoY29ubi0+c2Vzc2lv bktleSAhPSBuaWwKIAkmJiBjb25uLT5zZXNzaW9uVHlwZSAhPSBuaWwKLQkmJiBzdHJjbXAoY29u bi0+c2Vzc2lvblR5cGUsICJ0dGxzIikgPT0gMCkKKwkmJiBzdHJjbXAoY29ubi0+c2Vzc2lvblR5 cGUsICJ0dGxzIikgPT0gMCl7CisJCW1lbW1vdmUoc2VlZCwgdGxzLT5zZWMtPmNyYW5kb20sIFJh bmRvbVNpemUpOworCQltZW1tb3ZlKHNlZWQrUmFuZG9tU2l6ZSwgdGxzLT5zZWMtPnNyYW5kb20s IFJhbmRvbVNpemUpOwogCQl0bHMtPnNlYy0+cHJmKAogCQkJY29ubi0+c2Vzc2lvbktleSwgY29u bi0+c2Vzc2lvbktleWxlbiwKIAkJCXRscy0+c2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsCiAJ CQljb25uLT5zZXNzaW9uQ29uc3QsIAotCQkJdGxzLT5zZWMtPmNyYW5kb20sIFJhbmRvbVNpemUs Ci0JCQl0bHMtPnNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCQlzZWVkLCBzaXplb2Yoc2Vl ZCkpOworCX0KIAl0bHNDb25uZWN0aW9uRnJlZSh0bHMpOwogCWNsb3NlKGZkKTsKIAlyZXR1cm4g ZGF0YTsKQEAgLTUyNiw3ICs1MDMsNyBAQAogCQliID0gZXJlYWxsb2MoYiwgbSArIDIrMisyKzEr MituKTsKIAkJcCA9IGIgKyBtOwogCi0JCXB1dDE2KHAsIDApLCBwICs9IDI7CQkvKiBUeXBlOiBz ZXJ2ZXJfbmFtZSAqLworCQlwdXQxNihwLCBFeHRzbmkpLCBwICs9IDI7CS8qIFR5cGU6IHNlcnZl cl9uYW1lICovCiAJCXB1dDE2KHAsIDIrMSsyK24pLCBwICs9IDI7CS8qIExlbmd0aCAqLwogCQlw dXQxNihwLCAxKzIrbiksIHAgKz0gMjsJLyogU2VydmVyIE5hbWUgbGlzdCBsZW5ndGggKi8KIAkJ KnArKyA9IDA7CQkJLyogU2VydmVyIE5hbWUgVHlwZTogaG9zdF9uYW1lICovCkBAIC01MzUsMjYg KzUxMiwyNiBAQAogCQlwICs9IG47CiAJfQogCi0JLy8gRUNESEUKKwkvLyBFbGxpcHRpYyBDdXJ2 ZXMgKGFsc28gY2FsbGVkIFN1cHBvcnRlZCBHcm91cHMpCiAJaWYoUHJvdG9jb2xWZXJzaW9uID49 IFRMUzEwVmVyc2lvbil7CiAJCW0gPSBwIC0gYjsKIAkJYiA9IGVyZWFsbG9jKGIsIG0gKyAyKzIr MituZWxlbShuYW1lZGN1cnZlcykqMiArIDIrMisxK25lbGVtKHBvaW50Zm9ybWF0cykpOwogCQlw ID0gYiArIG07CiAKIAkJbiA9IG5lbGVtKG5hbWVkY3VydmVzKTsKLQkJcHV0MTYocCwgMHgwMDBh KSwgcCArPSAyOwkvKiBUeXBlOiBlbGxpcHRpY19jdXJ2ZXMgKi8KKwkJcHV0MTYocCwgRXh0ZWMp LCBwICs9IDI7CS8qIFR5cGU6IGVsbGlwdGljX2N1cnZlcyAvIHN1cHBvcnRlZF9ncm91cHMgKi8K IAkJcHV0MTYocCwgKG4rMSkqMiksIHAgKz0gMjsJLyogTGVuZ3RoICovCiAJCXB1dDE2KHAsIG4q MiksIHAgKz0gMjsJCS8qIEVsbGlwdGljIEN1cnZlcyBMZW5ndGggKi8KLQkJZm9yKGk9MDsgaSA8 IG47IGkrKyl7CQkvKiBFbGxpcHRpYyBjdXJ2ZXMgKi8KKwkJZm9yKGk9MDsgaSA8IG47IGkrKyl7 CQkvKiBFbGxpcHRpYyBDdXJ2ZXMgKi8KIAkJCXB1dDE2KHAsIG5hbWVkY3VydmVzW2ldLnRsc2lk KTsKIAkJCXAgKz0gMjsKIAkJfQogCiAJCW4gPSBuZWxlbShwb2ludGZvcm1hdHMpOwotCQlwdXQx NihwLCAweDAwMGIpLCBwICs9IDI7CS8qIFR5cGU6IGVjX3BvaW50X2Zvcm1hdHMgKi8KKwkJcHV0 MTYocCwgRXh0ZWNwKSwgcCArPSAyOwkvKiBUeXBlOiBlY19wb2ludF9mb3JtYXRzICovCiAJCXB1 dDE2KHAsIG4rMSksIHAgKz0gMjsJCS8qIExlbmd0aCAqLwogCQkqcCsrID0gbjsJCQkvKiBFQyBw b2ludCBmb3JtYXRzIExlbmd0aCAqLwotCQlmb3IoaT0wOyBpIDwgbjsgaSsrKQkJLyogRWxsaXB0 aWMgY3VydmVzIHBvaW50IGZvcm1hdHMgKi8KKwkJZm9yKGk9MDsgaSA8IG47IGkrKykJCS8qIEVD IHBvaW50IGZvcm1hdHMgKi8KIAkJCSpwKysgPSBwb2ludGZvcm1hdHNbaV07CiAJfQogCkBAIC01 NjYsNyArNTQzLDcgQEAKIAkJYiA9IGVyZWFsbG9jKGIsIG0gKyAyKzIrMituKjIpOwogCQlwID0g YiArIG07CiAKLQkJcHV0MTYocCwgMHgwMDBkKSwgcCArPSAyOworCQlwdXQxNihwLCBFeHRzaWdh bGdzKSwgcCArPSAyOwogCQlwdXQxNihwLCBuKjIgKyAyKSwgcCArPSAyOwogCQlwdXQxNihwLCBu KjIpLCBwICs9IDI7CiAJCWZvcihpPTA7IGkgPCBuOyBpKyspewpAQCAtNTg2LDYgKzU2Myw3IEBA CiB7CiAJY2hhciBidWZbOF07CiAJY2hhciBkbmFtZVs2NF07CisJdWNoYXIgc2VlZFsyKlJhbmRv bVNpemVdOwogCWludCBuLCBkYXRhLCBjdGwsIGhhbmQ7CiAJVGxzQ29ubmVjdGlvbiAqdGxzOwog CXVjaGFyICpleHQ7CkBAIC02NDEsMTMgKzYxOSwxNSBAQAogCWNvbm4tPnNlc3Npb25JRCA9IG5p bDsKIAlpZihjb25uLT5zZXNzaW9uS2V5ICE9IG5pbAogCSYmIGNvbm4tPnNlc3Npb25UeXBlICE9 IG5pbAotCSYmIHN0cmNtcChjb25uLT5zZXNzaW9uVHlwZSwgInR0bHMiKSA9PSAwKQorCSYmIHN0 cmNtcChjb25uLT5zZXNzaW9uVHlwZSwgInR0bHMiKSA9PSAwKXsKKwkJbWVtbW92ZShzZWVkLCB0 bHMtPnNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCW1lbW1vdmUoc2VlZCtSYW5kb21TaXpl LCB0bHMtPnNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiAJCXRscy0+c2VjLT5wcmYoCiAJCQlj b25uLT5zZXNzaW9uS2V5LCBjb25uLT5zZXNzaW9uS2V5bGVuLAogCQkJdGxzLT5zZWMtPnNlYywg TWFzdGVyU2VjcmV0U2l6ZSwKIAkJCWNvbm4tPnNlc3Npb25Db25zdCwgCi0JCQl0bHMtPnNlYy0+ Y3JhbmRvbSwgUmFuZG9tU2l6ZSwKLQkJCXRscy0+c2VjLT5zcmFuZG9tLCBSYW5kb21TaXplKTsK KwkJCXNlZWQsIHNpemVvZihzZWVkKSk7CisJfQogCXRsc0Nvbm5lY3Rpb25GcmVlKHRscyk7CiAJ Y2xvc2UoZmQpOwogCXJldHVybiBkYXRhOwpAQCAtNjY1LDYgKzY0NSw1MyBAQAogCXJldHVybiBp OwogfQogCitzdGF0aWMgQnl0ZXMgKgordGxzU2VydmVyRXh0ZW5zaW9ucyhUbHNDb25uZWN0aW9u ICpjLCBCeXRlcyAqZXh0KQoreworCXVjaGFyICpwLCAqZTsKKwlpbnQgaSwgaiwgbjsKKworCXAg PSBleHQtPmRhdGE7CisJZSA9IHArZXh0LT5sZW47CisJd2hpbGUocCA8IGUpeworCQlpZihlLXAg PCAyKQorCQkJZ290byBTaG9ydDsKKwkJc3dpdGNoKGdldDE2KHApKXsKKwkJY2FzZSBFeHRlYzoJ CisJCQlwICs9IDI7CisJCQluID0gZ2V0MTYocCk7CisJCQlpZihlLXAgPCBuIHx8IG4gPCAyKQor CQkJCWdvdG8gU2hvcnQ7CisJCQlwICs9IDI7CisJCQluID0gZ2V0MTYocCk7CisJCQlwICs9IDI7 CisJCQlpZihlLXAgPCBuIHx8IG4gJiAxIHx8IG4gPT0gMCkKKwkJCQlnb3RvIFNob3J0OworCQkJ Zm9yKGkgPSAwOyBpIDwgbmVsZW0obmFtZWRjdXJ2ZXMpICYmIGMtPnNlYy0+bmMgPT0gbmlsOyBp KyspCisJCQkJZm9yKGogPSAwOyBqIDwgbjsgaiArPSAyKQorCQkJCQlpZihuYW1lZGN1cnZlc1tp XS50bHNpZCA9PSBnZXQxNihwK2opKXsKKwkJCQkJCWMtPnNlYy0+bmMgPSAmbmFtZWRjdXJ2ZXNb aV07CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJcCArPSBuOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlwICs9IDI7CisJCQluID0gZ2V0MTYocCk7CisJCQlwICs9IDI7CisJCQlpZihlLXAg PCBuKQorCQkJCWdvdG8gU2hvcnQ7CisJCQlwICs9IG47CisJCQlicmVhazsKKwkJfQorCX0KKwkv LyB3ZSBkbyBub3Qgc2VuZCBhbnkgZXh0ZW5zaW9ucyB5ZXQKKwlyZXR1cm4gbmlsOworU2hvcnQ6 CisJdGxzRXJyb3IoYywgRURlY29kZUVycm9yLCAiY2xpZW50aGVsbG8gZXh0ZW5zaW9ucyBoYXMg aW52YWxpZCBsZW5ndGgiKTsKKwlyZXR1cm4gbmlsOyAKK30gCisKIHN0YXRpYyBUbHNDb25uZWN0 aW9uICoKIHRsc1NlcnZlcjIoaW50IGN0bCwgaW50IGhhbmQsCiAJdWNoYXIgKmNlcnQsIGludCBj ZXJ0bGVuLApAQCAtNjc0LDYgKzcwMSw3IEBACiAJaW50IGNpcGhlciwgY29tcHJlc3NvciwgbnVt Y2VydHMsIGk7CiAJVGxzQ29ubmVjdGlvbiAqYzsKIAlNc2cgbTsKKwlCeXRlcyAqZXh0OwogCiAJ aWYodHJhY2UpCiAJCXRyYWNlKCJ0bHNTZXJ2ZXIyXG4iKTsKQEAgLTcwOCwxOSArNzM2LDYgQEAK IAkJdGxzRXJyb3IoYywgRUluYXBwcm9wcmlhdGVGYWxsYmFjaywgImluYXBwcm9wcmlhdGUgZmFs bGJhY2siKTsKIAkJZ290byBFcnI7CiAJfQotCWNpcGhlciA9IG9rQ2lwaGVyKG0udS5jbGllbnRI ZWxsby5jaXBoZXJzLCBwc2tsZW4gPiAwKTsKLQlpZihjaXBoZXIgPCAwIHx8ICFzZXRBbGdzKGMs IGNpcGhlcikpIHsKLQkJdGxzRXJyb3IoYywgRUhhbmRzaGFrZUZhaWx1cmUsICJubyBtYXRjaGlu ZyBjaXBoZXIgc3VpdGUiKTsKLQkJZ290byBFcnI7Ci0JfQotCWNvbXByZXNzb3IgPSBva0NvbXBy ZXNzaW9uKG0udS5jbGllbnRIZWxsby5jb21wcmVzc29ycyk7Ci0JaWYoY29tcHJlc3NvciA8IDAp IHsKLQkJdGxzRXJyb3IoYywgRUhhbmRzaGFrZUZhaWx1cmUsICJubyBtYXRjaGluZyBjb21wcmVz c29yIik7Ci0JCWdvdG8gRXJyOwotCX0KLQlpZih0cmFjZSkKLQkJdHJhY2UoIiAgY2lwaGVyICV4 LCBjb21wcmVzc29yICV4XG4iLCBjaXBoZXIsIGNvbXByZXNzb3IpOwotCiAJdGxzU2VjSW5pdHMo Yy0+c2VjLCBtLnUuY2xpZW50SGVsbG8udmVyc2lvbiwgbS51LmNsaWVudEhlbGxvLnJhbmRvbSk7 CiAJdGxzU2VjVmVycyhjLT5zZWMsIGMtPnZlcnNpb24pOwogCWlmKHBza2xlbiA+IDApewpAQCAt NzQwLDYgKzc1NSwyMSBAQAogCQkJZ290byBFcnI7CiAJCX0KIAl9CisJZXh0ID0gdGxzU2VydmVy RXh0ZW5zaW9ucyhjLCBtLnUuY2xpZW50SGVsbG8uZXh0ZW5zaW9ucyk7CisJaWYoYy0+ZXJyZWQp CisJCWdvdG8gRXJyOworCWNpcGhlciA9IG9rQ2lwaGVyKG0udS5jbGllbnRIZWxsby5jaXBoZXJz LCBwc2tsZW4gPiAwLCBjLT5zZWMtPm5jICE9IG5pbCk7CisJaWYoY2lwaGVyIDwgMCB8fCAhc2V0 QWxncyhjLCBjaXBoZXIpKSB7CisJCXRsc0Vycm9yKGMsIEVIYW5kc2hha2VGYWlsdXJlLCAibm8g bWF0Y2hpbmcgY2lwaGVyIHN1aXRlIik7CisJCWdvdG8gRXJyOworCX0KKwljb21wcmVzc29yID0g b2tDb21wcmVzc2lvbihtLnUuY2xpZW50SGVsbG8uY29tcHJlc3NvcnMpOworCWlmKGNvbXByZXNz b3IgPCAwKSB7CisJCXRsc0Vycm9yKGMsIEVIYW5kc2hha2VGYWlsdXJlLCAibm8gbWF0Y2hpbmcg Y29tcHJlc3NvciIpOworCQlnb3RvIEVycjsKKwl9CisJaWYodHJhY2UpCisJCXRyYWNlKCIgIGNp cGhlciAleCwgY29tcHJlc3NvciAleFxuIiwgY2lwaGVyLCBjb21wcmVzc29yKTsKIAltc2dDbGVh cigmbSk7CiAKIAltLnRhZyA9IEhTZXJ2ZXJIZWxsbzsKQEAgLTc0OCw2ICs3NzgsNyBAQAogCW0u dS5zZXJ2ZXJIZWxsby5jaXBoZXIgPSBjaXBoZXI7CiAJbS51LnNlcnZlckhlbGxvLmNvbXByZXNz b3IgPSBjb21wcmVzc29yOwogCW0udS5zZXJ2ZXJIZWxsby5zaWQgPSBtYWtlYnl0ZXMobmlsLCAw KTsKKwltLnUuc2VydmVySGVsbG8uZXh0ZW5zaW9ucyA9IGV4dDsKIAlpZighbXNnU2VuZChjLCAm bSwgQVF1ZXVlKSkKIAkJZ290byBFcnI7CiAKQEAgLTc2NCwxMSArNzk1LDkgQEAKIAl9CiAKIAlp Zihpc0VDREhFKGNpcGhlcikpewotCQlOYW1lZGN1cnZlICpuYyA9ICZuYW1lZGN1cnZlc1swXTsJ Lyogc2VjcDI1NnIxICovCi0KIAkJbS50YWcgPSBIU2VydmVyS2V5RXhjaGFuZ2U7Ci0JCW0udS5z ZXJ2ZXJLZXlFeGNoYW5nZS5jdXJ2ZSA9IG5jLT50bHNpZDsKLQkJbS51LnNlcnZlcktleUV4Y2hh bmdlLmRoX3BhcmFtZXRlcnMgPSB0bHNTZWNFQ0RIRXMxKGMtPnNlYywgbmMpOworCQltLnUuc2Vy dmVyS2V5RXhjaGFuZ2UuY3VydmUgPSBjLT5zZWMtPm5jLT50bHNpZDsKKwkJbS51LnNlcnZlcktl eUV4Y2hhbmdlLmRoX3BhcmFtZXRlcnMgPSB0bHNTZWNFQ0RIRXMxKGMtPnNlYyk7CiAJCWlmKG0u dS5zZXJ2ZXJLZXlFeGNoYW5nZS5kaF9wYXJhbWV0ZXJzID09IG5pbCl7CiAJCQl0bHNFcnJvcihj LCBFSW50ZXJuYWxFcnJvciwgImNhbid0IHNldCBESCBwYXJhbWV0ZXJzIik7CiAJCQlnb3RvIEVy cjsKQEAgLTg4OSw3ICs5MTgsOSBAQAogCiAJaWYocCA9PSBuaWwgfHwgZyA9PSBuaWwgfHwgWXMg PT0gbmlsKQogCQlyZXR1cm4gbmlsOwotCisJLy8gcmVqZWN0IGRoIHByaW1lcyB0aGF0IGlzIHN1 c2NlcHRpYmxlIHRvIGxvZ2phbQorCWlmKHAtPmxlbiA8PSAxMDI0LzgpCisJCXJldHVybiBuaWw7 CiAJWWMgPSBuaWw7CiAJUCA9IGJ5dGVzdG9tcChwKTsKIAlHID0gYnl0ZXN0b21wKGcpOwpAQCAt OTIyLDQ3ICs5NTMsNTUgQEAKIHsKIAlFQ2RvbWFpbiAqZG9tID0gJnNlYy0+ZWMuZG9tOwogCUVD cHJpdiAqUSA9ICZzZWMtPmVjLlE7Ci0JTmFtZWRjdXJ2ZSAqbmM7CiAJRUNwdWIgKnB1YjsKIAlF Q3BvaW50IEs7CisJTmFtZWRjdXJ2ZSAqbmM7CiAJQnl0ZXMgKlljOworCUJ5dGVzICpaOwogCWlu dCBuOwogCiAJaWYoWXMgPT0gbmlsKQogCQlyZXR1cm4gbmlsOwotCWZvcihuYyA9IG5hbWVkY3Vy dmVzOyBuYyAhPSAmbmFtZWRjdXJ2ZXNbbmVsZW0obmFtZWRjdXJ2ZXMpXTsgbmMrKykKLQkJaWYo bmMtPnRsc2lkID09IGN1cnZlKQotCQkJZ290byBGb3VuZDsKLQlyZXR1cm4gbmlsOwotCi1Gb3Vu ZDoKLQllY2RvbWluaXQoZG9tLCBuYy0+aW5pdCk7Ci0JcHViID0gZWNkZWNvZGVwdWIoZG9tLCBZ cy0+ZGF0YSwgWXMtPmxlbik7Ci0JaWYocHViID09IG5pbCkKLQkJcmV0dXJuIG5pbDsKIAotCW1l bXNldChRLCAwLCBzaXplb2YoKlEpKTsKLQlRLT54ID0gbXBuZXcoMCk7Ci0JUS0+eSA9IG1wbmV3 KDApOwotCVEtPmQgPSBtcG5ldygwKTsKLQotCW1lbXNldCgmSywgMCwgc2l6ZW9mKEspKTsKLQlL LnggPSBtcG5ldygwKTsKLQlLLnkgPSBtcG5ldygwKTsKLQotCWVjZ2VuKGRvbSwgUSk7Ci0JZWNt dWwoZG9tLCBwdWIsIFEtPmQsICZLKTsKLQotCW4gPSAobXBzaWduaWYoZG9tLT5wKSs3KS84Owot CXNldE1hc3RlclNlY3JldChzZWMsIG1wdG9ieXRlcyhLLngsIG4pKTsKLQlZYyA9IG5ld2J5dGVz KDEgKyAyKm4pOwotCVljLT5sZW4gPSBlY2VuY29kZXB1Yihkb20sIFEsIFljLT5kYXRhLCBZYy0+ bGVuKTsKKwlpZihjdXJ2ZSA9PSBYMjU1MTkpeworCQlpZihZcy0+bGVuICE9IDMyKQorCQkJcmV0 dXJuIG5pbDsKKwkJWWMgPSBuZXdieXRlcygzMik7CisJCWN1cnZlMjU1MTlfZGhfbmV3KHNlYy0+ WCwgWWMtPmRhdGEpOworCQlaID0gbmV3Ynl0ZXMoMzIpOworCQljdXJ2ZTI1NTE5X2RoX2Zpbmlz aChzZWMtPlgsIFlzLT5kYXRhLCBaLT5kYXRhKTsKKwkJc2V0TWFzdGVyU2VjcmV0KHNlYywgWik7 CisJfWVsc2V7CisJCWZvcihuYyA9IG5hbWVkY3VydmVzOyBuYy0+dGxzaWQgIT0gY3VydmU7IG5j KyspCisJCQlpZihuYyA9PSAmbmFtZWRjdXJ2ZXNbbmVsZW0obmFtZWRjdXJ2ZXMpXSkKKwkJCQly ZXR1cm4gbmlsOworCQllY2RvbWluaXQoZG9tLCBuYy0+aW5pdCk7CisJCXB1YiA9IGVjZGVjb2Rl cHViKGRvbSwgWXMtPmRhdGEsIFlzLT5sZW4pOworCQlpZihwdWIgPT0gbmlsKQorCQkJcmV0dXJu IG5pbDsKIAotCW1wZnJlZShLLngpOwotCW1wZnJlZShLLnkpOworCQltZW1zZXQoUSwgMCwgc2l6 ZW9mKCpRKSk7CisJCVEtPnggPSBtcG5ldygwKTsKKwkJUS0+eSA9IG1wbmV3KDApOworCQlRLT5k ID0gbXBuZXcoMCk7CisKKwkJbWVtc2V0KCZLLCAwLCBzaXplb2YoSykpOworCQlLLnggPSBtcG5l dygwKTsKKwkJSy55ID0gbXBuZXcoMCk7CisKKwkJZWNnZW4oZG9tLCBRKTsKKwkJZWNtdWwoZG9t LCBwdWIsIFEtPmQsICZLKTsKKworCQluID0gKG1wc2lnbmlmKGRvbS0+cCkrNykvODsKKwkJc2V0 TWFzdGVyU2VjcmV0KHNlYywgbXB0b2J5dGVzKEsueCwgbikpOworCQlZYyA9IG5ld2J5dGVzKDEg KyAyKm4pOworCQlZYy0+bGVuID0gZWNlbmNvZGVwdWIoZG9tLCBRLCBZYy0+ZGF0YSwgWWMtPmxl bik7CiAKLQllY3B1YmZyZWUocHViKTsKKwkJbXBmcmVlKEsueCk7CisJCW1wZnJlZShLLnkpOwog CisJCWVjcHViZnJlZShwdWIpOworCX0KIAlyZXR1cm4gWWM7CiB9CiAKQEAgLTEwNDUsNyArMTA4 NCw2IEBACiAJCXRsc0Vycm9yKGMsIEVJbGxlZ2FsUGFyYW1ldGVyLCAiaW52YWxpZCBjb21wcmVz c2lvbiIpOwogCQlnb3RvIEVycjsKIAl9Ci0KIAlkaHggPSBpc0RIRShjaXBoZXIpIHx8IGlzRUNE SEUoY2lwaGVyKTsKIAlpZighbXNnUmVjdihjLCAmbSkpCiAJCWdvdG8gRXJyOwpAQCAtMjEzNiwx MyArMjE3NCwxNyBAQAogfQogCiBzdGF0aWMgaW50Ci1va0NpcGhlcihJbnRzICpjdiwgaW50IGlz cHNrKQorb2tDaXBoZXIoSW50cyAqY3YsIGludCBpc3BzaywgaW50IGNhbmVjKQogewogCWludCBp LCBjOwogCiAJZm9yKGkgPSAwOyBpIDwgbmVsZW0oY2lwaGVyQWxncyk7IGkrKykgewogCQljID0g Y2lwaGVyQWxnc1tpXS50bHNpZDsKLQkJaWYoIWNpcGhlckFsZ3NbaV0ub2sgfHwgaXNFQ0RTQShj KSB8fCBpc0RIRShjKSB8fCBpc1BTSyhjKSAhPSBpc3BzaykKKwkJaWYoIWNpcGhlckFsZ3NbaV0u b2sgfHwgaXNFQ0RTQShjKSB8fCBpc0RIRShjKSkKKwkJCWNvbnRpbnVlOworCQlpZihpc1BTSyhj KSAhPSBpc3BzaykKKwkJCWNvbnRpbnVlOworCQlpZihpc0VDREhFKGMpICYmICFjYW5lYykKIAkJ CWNvbnRpbnVlOwogCQlpZihsb29rdXBpZChjdiwgYykgPj0gMCkKIAkJCXJldHVybiBjOwpAQCAt MjMxMywxMTQgKzIzNTUsNTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLXRsc1BtZDUodWNoYXIgKmJ1 ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCB1Y2hhciAqbGFiZWwsIGludCBubGFi ZWwsIHVjaGFyICpzZWVkMCwgaW50IG5zZWVkMCwgdWNoYXIgKnNlZWQxLCBpbnQgbnNlZWQxKQot ewotCXVjaGFyIGFpW01ENWRsZW5dLCB0bXBbTUQ1ZGxlbl07Ci0JaW50IGksIG47Ci0JTUQ1c3Rh dGUgKnM7Ci0KLQkvLyBnZW5lcmF0ZSBhMQotCXMgPSBobWFjX21kNShsYWJlbCwgbmxhYmVsLCBr ZXksIG5rZXksIG5pbCwgbmlsKTsKLQlzID0gaG1hY19tZDUoc2VlZDAsIG5zZWVkMCwga2V5LCBu a2V5LCBuaWwsIHMpOwotCWhtYWNfbWQ1KHNlZWQxLCBuc2VlZDEsIGtleSwgbmtleSwgYWksIHMp OwotCi0Jd2hpbGUobmJ1ZiA+IDApIHsKLQkJcyA9IGhtYWNfbWQ1KGFpLCBNRDVkbGVuLCBrZXks IG5rZXksIG5pbCwgbmlsKTsKLQkJcyA9IGhtYWNfbWQ1KGxhYmVsLCBubGFiZWwsIGtleSwgbmtl eSwgbmlsLCBzKTsKLQkJcyA9IGhtYWNfbWQ1KHNlZWQwLCBuc2VlZDAsIGtleSwgbmtleSwgbmls LCBzKTsKLQkJaG1hY19tZDUoc2VlZDEsIG5zZWVkMSwga2V5LCBua2V5LCB0bXAsIHMpOwotCQlu ID0gTUQ1ZGxlbjsKLQkJaWYobiA+IG5idWYpCi0JCQluID0gbmJ1ZjsKLQkJZm9yKGkgPSAwOyBp IDwgbjsgaSsrKQotCQkJYnVmW2ldIF49IHRtcFtpXTsKLQkJYnVmICs9IG47Ci0JCW5idWYgLT0g bjsKLQkJaG1hY19tZDUoYWksIE1ENWRsZW4sIGtleSwgbmtleSwgdG1wLCBuaWwpOwotCQltZW1t b3ZlKGFpLCB0bXAsIE1ENWRsZW4pOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXRsc1BzaGExKHVj aGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAqa2V5LCBpbnQgbmtleSwgdWNoYXIgKmxhYmVsLCBp bnQgbmxhYmVsLCB1Y2hhciAqc2VlZDAsIGludCBuc2VlZDAsIHVjaGFyICpzZWVkMSwgaW50IG5z ZWVkMSkKLXsKLQl1Y2hhciBhaVtTSEExZGxlbl0sIHRtcFtTSEExZGxlbl07Ci0JaW50IGksIG47 Ci0JU0hBc3RhdGUgKnM7Ci0KLQkvLyBnZW5lcmF0ZSBhMQotCXMgPSBobWFjX3NoYTEobGFiZWws IG5sYWJlbCwga2V5LCBua2V5LCBuaWwsIG5pbCk7Ci0JcyA9IGhtYWNfc2hhMShzZWVkMCwgbnNl ZWQwLCBrZXksIG5rZXksIG5pbCwgcyk7Ci0JaG1hY19zaGExKHNlZWQxLCBuc2VlZDEsIGtleSwg bmtleSwgYWksIHMpOwotCi0Jd2hpbGUobmJ1ZiA+IDApIHsKLQkJcyA9IGhtYWNfc2hhMShhaSwg U0hBMWRsZW4sIGtleSwgbmtleSwgbmlsLCBuaWwpOwotCQlzID0gaG1hY19zaGExKGxhYmVsLCBu bGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsKLQkJcyA9IGhtYWNfc2hhMShzZWVkMCwgbnNlZWQw LCBrZXksIG5rZXksIG5pbCwgcyk7Ci0JCWhtYWNfc2hhMShzZWVkMSwgbnNlZWQxLCBrZXksIG5r ZXksIHRtcCwgcyk7Ci0JCW4gPSBTSEExZGxlbjsKLQkJaWYobiA+IG5idWYpCi0JCQluID0gbmJ1 ZjsKLQkJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQotCQkJYnVmW2ldIF49IHRtcFtpXTsKLQkJYnVm ICs9IG47Ci0JCW5idWYgLT0gbjsKLQkJaG1hY19zaGExKGFpLCBTSEExZGxlbiwga2V5LCBua2V5 LCB0bXAsIG5pbCk7Ci0JCW1lbW1vdmUoYWksIHRtcCwgU0hBMWRsZW4pOwotCX0KLX0KLQotc3Rh dGljIHZvaWQKLXBfc2hhMjU2KHVjaGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAqa2V5LCBpbnQg bmtleSwgdWNoYXIgKmxhYmVsLCBpbnQgbmxhYmVsLCB1Y2hhciAqc2VlZCwgaW50IG5zZWVkKQor dGxzUCh1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtleSwgaW50IG5rZXksIHVjaGFyICps YWJlbCwgaW50IG5sYWJlbCwgdWNoYXIgKnNlZWQsIGludCBuc2VlZCwKKwlEaWdlc3RTdGF0ZSog KCp4KSh1Y2hhciosIHVsb25nLCB1Y2hhciosIHVsb25nLCB1Y2hhciosIERpZ2VzdFN0YXRlKiks IGludCB4bGVuKQogewogCXVjaGFyIGFpW1NIQTJfMjU2ZGxlbl0sIHRtcFtTSEEyXzI1NmRsZW5d OwotCVNIQXN0YXRlICpzOworCURpZ2VzdFN0YXRlICpzOwogCWludCBuOwogCisJYXNzZXJ0KHNp emVvZihhaSkgPD0geGxlbiAmJiBzaXplb2YodG1wKSA8PSB4bGVuKTsKIAkvLyBnZW5lcmF0ZSBh MQotCXMgPSBobWFjX3NoYTJfMjU2KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBuaWwp OwotCWhtYWNfc2hhMl8yNTYoc2VlZCwgbnNlZWQsIGtleSwgbmtleSwgYWksIHMpOworCXMgPSB4 KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBuaWwpOworCXgoc2VlZCwgbnNlZWQsIGtl eSwgbmtleSwgYWksIHMpOwogCiAJd2hpbGUobmJ1ZiA+IDApIHsKLQkJcyA9IGhtYWNfc2hhMl8y NTYoYWksIFNIQTJfMjU2ZGxlbiwga2V5LCBua2V5LCBuaWwsIG5pbCk7Ci0JCXMgPSBobWFjX3No YTJfMjU2KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsKLQkJaG1hY19zaGEyXzI1 NihzZWVkLCBuc2VlZCwga2V5LCBua2V5LCB0bXAsIHMpOwotCQluID0gU0hBMl8yNTZkbGVuOwor CQlzID0geChhaSwgeGxlbiwga2V5LCBua2V5LCBuaWwsIG5pbCk7CisJCXMgPSB4KGxhYmVsLCBu bGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsKKwkJeChzZWVkLCBuc2VlZCwga2V5LCBua2V5LCB0 bXAsIHMpOworCQluID0geGxlbjsKIAkJaWYobiA+IG5idWYpCiAJCQluID0gbmJ1ZjsKIAkJbWVt bW92ZShidWYsIHRtcCwgbik7CiAJCWJ1ZiArPSBuOwogCQluYnVmIC09IG47Ci0JCWhtYWNfc2hh Ml8yNTYoYWksIFNIQTJfMjU2ZGxlbiwga2V5LCBua2V5LCB0bXAsIG5pbCk7Ci0JCW1lbW1vdmUo YWksIHRtcCwgU0hBMl8yNTZkbGVuKTsKKwkJeChhaSwgeGxlbiwga2V5LCBua2V5LCB0bXAsIG5p bCk7CisJCW1lbW1vdmUoYWksIHRtcCwgeGxlbik7CiAJfQogfQogCiAvLyBmaWxsIGJ1ZiB3aXRo IG1kNShhcmdzKV5zaGExKGFyZ3MpCiBzdGF0aWMgdm9pZAotdGxzMTBQUkYodWNoYXIgKmJ1Ziwg aW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCBjaGFyICpsYWJlbCwgdWNoYXIgKnNlZWQw LCBpbnQgbnNlZWQwLCB1Y2hhciAqc2VlZDEsIGludCBuc2VlZDEpCit0bHMxMFBSRih1Y2hhciAq YnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtleSwgaW50IG5rZXksIGNoYXIgKmxhYmVsLCB1Y2hhciAq c2VlZCwgaW50IG5zZWVkKQogewogCWludCBubGFiZWwgPSBzdHJsZW4obGFiZWwpOwogCWludCBu ID0gKG5rZXkgKyAxKSA+PiAxOwogCi0JbWVtc2V0KGJ1ZiwgMCwgbmJ1Zik7Ci0JdGxzUG1kNShi dWYsIG5idWYsIGtleSwgbiwgKHVjaGFyKilsYWJlbCwgbmxhYmVsLCBzZWVkMCwgbnNlZWQwLCBz ZWVkMSwgbnNlZWQxKTsKLQl0bHNQc2hhMShidWYsIG5idWYsIGtleStua2V5LW4sIG4sICh1Y2hh ciopbGFiZWwsIG5sYWJlbCwgc2VlZDAsIG5zZWVkMCwgc2VlZDEsIG5zZWVkMSk7CisJdGxzUChi dWYsIG5idWYsIGtleSwgbiwgKHVjaGFyKilsYWJlbCwgbmxhYmVsLCBzZWVkLCBuc2VlZCwKKwkJ aG1hY19tZDUsIE1ENWRsZW4pOworCXRsc1AoYnVmLCBuYnVmLCBrZXkrbmtleS1uLCBuLCAodWNo YXIqKWxhYmVsLCBubGFiZWwsIHNlZWQsIG5zZWVkLAorCQlobWFjX3NoYTEsIFNIQTFkbGVuKTsK IH0KIAogc3RhdGljIHZvaWQKLXRsczEyUFJGKHVjaGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAq a2V5LCBpbnQgbmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkMCwgaW50IG5zZWVkMCwgdWNo YXIgKnNlZWQxLCBpbnQgbnNlZWQxKQordGxzMTJQUkYodWNoYXIgKmJ1ZiwgaW50IG5idWYsIHVj aGFyICprZXksIGludCBua2V5LCBjaGFyICpsYWJlbCwgdWNoYXIgKnNlZWQsIGludCBuc2VlZCkK IHsKLQl1Y2hhciBzZWVkWzIqUmFuZG9tU2l6ZV07Ci0KLQlhc3NlcnQobnNlZWQwK25zZWVkMSA8 PSBzaXplb2Yoc2VlZCkpOwotCW1lbW1vdmUoc2VlZCwgc2VlZDAsIG5zZWVkMCk7Ci0JbWVtbW92 ZShzZWVkK25zZWVkMCwgc2VlZDEsIG5zZWVkMSk7Ci0JcF9zaGEyNTYoYnVmLCBuYnVmLCBrZXks IG5rZXksICh1Y2hhciopbGFiZWwsIHN0cmxlbihsYWJlbCksIHNlZWQsIG5zZWVkMCtuc2VlZDEp OworCXRsc1AoYnVmLCBuYnVmLCBrZXksIG5rZXksICh1Y2hhciopbGFiZWwsIHN0cmxlbihsYWJl bCksIHNlZWQsIG5zZWVkLAorCQlobWFjX3NoYTJfMjU2LCBTSEEyXzI1NmRsZW4pOwogfQogCiBz dGF0aWMgdm9pZAotc3NsUFJGKHVjaGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAqa2V5LCBpbnQg bmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkMCwgaW50IG5zZWVkMCwgdWNoYXIgKnNlZWQx LCBpbnQgbnNlZWQxKQorc3NsUFJGKHVjaGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAqa2V5LCBp bnQgbmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkLCBpbnQgbnNlZWQpCiB7CiAJdWNoYXIg c2hhMWRpZ1tTSEExZGxlbl0sIG1kNWRpZ1tNRDVkbGVuXSwgdG1wWzI2XTsKIAlEaWdlc3RTdGF0 ZSAqczsKQEAgLTI0MzUsOCArMjQxOCw3IEBACiAJCQl0bXBbaV0gPSAnQScgLSAxICsgbGVuOwog CQlzID0gc2hhMSh0bXAsIGxlbiwgbmlsLCBuaWwpOwogCQlzID0gc2hhMShrZXksIG5rZXksIG5p bCwgcyk7Ci0JCXMgPSBzaGExKHNlZWQwLCBuc2VlZDAsIG5pbCwgcyk7Ci0JCXNoYTEoc2VlZDEs IG5zZWVkMSwgc2hhMWRpZywgcyk7CisJCXNoYTEoc2VlZCwgbnNlZWQsIHNoYTFkaWcsIHMpOwog CQlzID0gbWQ1KGtleSwgbmtleSwgbmlsLCBuaWwpOwogCQltZDUoc2hhMWRpZywgU0hBMWRsZW4s IG1kNWRpZywgcyk7CiAJCW4gPSBNRDVkbGVuOwpAQCAtMjQ4NiwxOCArMjQ2OCwxOCBAQAogc3Rh dGljIHZvaWQKIHRsczEwU2V0RmluaXNoZWQoVGxzU2VjICpzZWMsIEhhbmRzaGFrZUhhc2ggaHNo LCB1Y2hhciAqZmluaXNoZWQsIGludCBpc2NsaWVudCkKIHsKLQl1Y2hhciBoMFtNRDVkbGVuXSwg aDFbU0hBMWRsZW5dOworCXVjaGFyIGhbTUQ1ZGxlbitTSEExZGxlbl07CiAJY2hhciAqbGFiZWw7 CiAKIAkvLyBnZXQgY3VycmVudCBoYXNoIHZhbHVlLCBidXQgYWxsb3cgZnVydGhlciBtZXNzYWdl cyB0byBiZSBoYXNoZWQgaW4KLQltZDUobmlsLCAwLCBoMCwgJmhzaC5tZDUpOwotCXNoYTEobmls LCAwLCBoMSwgJmhzaC5zaGExKTsKKwltZDUobmlsLCAwLCBoLCAmaHNoLm1kNSk7CisJc2hhMShu aWwsIDAsIGgrTUQ1ZGxlbiwgJmhzaC5zaGExKTsKIAogCWlmKGlzY2xpZW50KQogCQlsYWJlbCA9 ICJjbGllbnQgZmluaXNoZWQiOwogCWVsc2UKIAkJbGFiZWwgPSAic2VydmVyIGZpbmlzaGVkIjsK LQl0bHMxMFBSRihmaW5pc2hlZCwgVExTRmluaXNoZWRMZW4sIHNlYy0+c2VjLCBNYXN0ZXJTZWNy ZXRTaXplLCBsYWJlbCwgaDAsIE1ENWRsZW4sIGgxLCBTSEExZGxlbik7CisJdGxzMTBQUkYoZmlu aXNoZWQsIFRMU0ZpbmlzaGVkTGVuLCBzZWMtPnNlYywgTWFzdGVyU2VjcmV0U2l6ZSwgbGFiZWws IGgsIHNpemVvZihoKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNTEzLDcgKzI0OTUsNyBAQAog CQlsYWJlbCA9ICJjbGllbnQgZmluaXNoZWQiOwogCWVsc2UKIAkJbGFiZWwgPSAic2VydmVyIGZp bmlzaGVkIjsKLQlwX3NoYTI1NihmaW5pc2hlZCwgVExTRmluaXNoZWRMZW4sIHNlYy0+c2VjLCBN YXN0ZXJTZWNyZXRTaXplLCAodWNoYXIqKWxhYmVsLCBzdHJsZW4obGFiZWwpLCBzZWVkLCBTSEEy XzI1NmRsZW4pOworCXRsczEyUFJGKGZpbmlzaGVkLCBUTFNGaW5pc2hlZExlbiwgc2VjLT5zZWMs IE1hc3RlclNlY3JldFNpemUsIGxhYmVsLCBzZWVkLCBTSEEyXzI1NmRsZW4pOwogfQogCiBzdGF0 aWMgdm9pZApAQCAtMjUyMyw4ICsyNTA1LDkgQEAKIAlzZWMtPmNsaWVudFZlcnMgPSBjdmVyczsK IAltZW1tb3ZlKHNlYy0+Y3JhbmRvbSwgY3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiAKLQlwdXQzMihz ZWMtPnNyYW5kb20sIHRpbWUobmlsKSk7Ci0JZ2VucmFuZG9tKHNlYy0+c3JhbmRvbSs0LCBSYW5k b21TaXplLTQpOworCS8vIHB1dHRpbmcgdGltZSgpJ3Mgb3V0cHV0IHRvIHRoZSBmaXJzdCA0IGJ5 dGVzIGlzIG5vCisJLy8gbG9uZ2VyIHJlY29tbWVuZGVkIGFuZCBpcyBub3QgdXNlZnVsCisJZ2Vu cmFuZG9tKHNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI1 NDksMjcgKzI1MzIsMzYgQEAKIH0KIAogc3RhdGljIEJ5dGVzKgotdGxzU2VjRUNESEVzMShUbHNT ZWMgKnNlYywgTmFtZWRjdXJ2ZSAqbmMpCit0bHNTZWNFQ0RIRXMxKFRsc1NlYyAqc2VjKQogewog CUVDZG9tYWluICpkb20gPSAmc2VjLT5lYy5kb207CiAJRUNwcml2ICpRID0gJnNlYy0+ZWMuUTsK IAlCeXRlcyAqcGFyOwogCWludCBuOwogCi0JZWNkb21pbml0KGRvbSwgbmMtPmluaXQpOwotCW1l bXNldChRLCAwLCBzaXplb2YoKlEpKTsKLQlRLT54ID0gbXBuZXcoMCk7Ci0JUS0+eSA9IG1wbmV3 KDApOwotCVEtPmQgPSBtcG5ldygwKTsKLQllY2dlbihkb20sIFEpOwotCW4gPSAxICsgMiooKG1w c2lnbmlmKGRvbS0+cCkrNykvOCk7Ci0JcGFyID0gbmV3Ynl0ZXMoMSsyKzErbik7Ci0JcGFyLT5k YXRhWzBdID0gMzsKLQlwdXQxNihwYXItPmRhdGErMSwgbmMtPnRsc2lkKTsKLQluID0gZWNlbmNv ZGVwdWIoZG9tLCBRLCBwYXItPmRhdGErNCwgcGFyLT5sZW4tNCk7Ci0JcGFyLT5kYXRhWzNdID0g bjsKLQlwYXItPmxlbiA9IDErMisxK247Ci0KKwlpZihzZWMtPm5jID09IG5pbCkKKwkJcmV0dXJu IG5pbDsKKwlpZihzZWMtPm5jLT50bHNpZCA9PSBYMjU1MTkpeworCQlwYXIgPSBuZXdieXRlcygx KzIrMSszMik7CisJCXBhci0+ZGF0YVswXSA9IDM7CisJCXB1dDE2KHBhci0+ZGF0YSsxLCBYMjU1 MTkpOworCQlwYXItPmRhdGFbM10gPSAzMjsKKwkJY3VydmUyNTUxOV9kaF9uZXcoc2VjLT5YLCBw YXItPmRhdGErNCk7CisJfWVsc2V7CisJCWVjZG9taW5pdChkb20sIHNlYy0+bmMtPmluaXQpOwor CQltZW1zZXQoUSwgMCwgc2l6ZW9mKCpRKSk7CisJCVEtPnggPSBtcG5ldygwKTsKKwkJUS0+eSA9 IG1wbmV3KDApOworCQlRLT5kID0gbXBuZXcoMCk7CisJCWVjZ2VuKGRvbSwgUSk7CisJCW4gPSAx ICsgMiooKG1wc2lnbmlmKGRvbS0+cCkrNykvOCk7CisJCXBhciA9IG5ld2J5dGVzKDErMisxK24p OworCQlwYXItPmRhdGFbMF0gPSAzOworCQlwdXQxNihwYXItPmRhdGErMSwgc2VjLT5uYy0+dGxz aWQpOworCQluID0gZWNlbmNvZGVwdWIoZG9tLCBRLCBwYXItPmRhdGErNCwgcGFyLT5sZW4tNCk7 CisJCXBhci0+ZGF0YVszXSA9IG47CisJCXBhci0+bGVuID0gMSsyKzErbjsKKwl9CiAJcmV0dXJu IHBhcjsKIH0KIApAQCAtMjU4MCwzMCArMjU3Miw0MCBAQAogCUVDcHJpdiAqUSA9ICZzZWMtPmVj LlE7CiAJRUNwb2ludCBLOwogCUVDcHViICpZOworCUJ5dGVzICpaOwogCiAJaWYoWWMgPT0gbmls KXsKIAkJd2VycnN0cigibm8gcHVibGljIGtleSIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYo KFkgPSBlY2RlY29kZXB1Yihkb20sIFljLT5kYXRhLCBZYy0+bGVuKSkgPT0gbmlsKXsKLQkJd2Vy cnN0cigiYmFkIHB1YmxpYyBrZXkiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1lbXNldCgmSywg MCwgc2l6ZW9mKEspKTsKLQlLLnggPSBtcG5ldygwKTsKLQlLLnkgPSBtcG5ldygwKTsKKwlpZihz ZWMtPm5jLT50bHNpZCA9PSBYMjU1MTkpeworCQlpZihZYy0+bGVuICE9IDMyKXsKKwkJCXdlcnJz dHIoImJhZCBwdWJsaWMga2V5Iik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJWiA9IG5ld2J5dGVz KDMyKTsKKwkJY3VydmUyNTUxOV9kaF9maW5pc2goc2VjLT5YLCBZYy0+ZGF0YSwgWi0+ZGF0YSk7 CisJCXNldE1hc3RlclNlY3JldChzZWMsIFopOworCX1lbHNleworCQlpZigoWSA9IGVjZGVjb2Rl cHViKGRvbSwgWWMtPmRhdGEsIFljLT5sZW4pKSA9PSBuaWwpeworCQkJd2VycnN0cigiYmFkIHB1 YmxpYyBrZXkiKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCi0JZWNtdWwoZG9tLCBZLCBRLT5kLCAm Syk7CisJCW1lbXNldCgmSywgMCwgc2l6ZW9mKEspKTsKKwkJSy54ID0gbXBuZXcoMCk7CisJCUsu eSA9IG1wbmV3KDApOwogCi0Jc2V0TWFzdGVyU2VjcmV0KHNlYywgbXB0b2J5dGVzKEsueCwgKG1w c2lnbmlmKGRvbS0+cCkrNykvOCkpOworCQllY211bChkb20sIFksIFEtPmQsICZLKTsKIAotCW1w ZnJlZShLLngpOwotCW1wZnJlZShLLnkpOworCQlzZXRNYXN0ZXJTZWNyZXQoc2VjLCBtcHRvYnl0 ZXMoSy54LCAobXBzaWduaWYoZG9tLT5wKSs3KS84KSk7CiAKLQllY3B1YmZyZWUoWSk7CisJCW1w ZnJlZShLLngpOworCQltcGZyZWUoSy55KTsKIAorCQllY3B1YmZyZWUoWSk7CisJfQogCXJldHVy biAwOwogfQogCkBAIC0yNjEyLDggKzI2MTQsOCBAQAogewogCW1lbXNldChzZWMsIDAsIHNpemVv Zigqc2VjKSk7CiAJc2VjLT5jbGllbnRWZXJzID0gY3ZlcnM7Ci0JcHV0MzIoc2VjLT5jcmFuZG9t LCB0aW1lKG5pbCkpOwotCWdlbnJhbmRvbShzZWMtPmNyYW5kb20rNCwgUmFuZG9tU2l6ZS00KTsK KwkvLyBzZWUgdGhlIGNvbW1lbnQgb24gdGxzU2VjSW5pdHMKKwlnZW5yYW5kb20oc2VjLT5jcmFu ZG9tLCBSYW5kb21TaXplKTsKIH0KIAogc3RhdGljIEJ5dGVzKgpAQCAtMjY3MSwxMyArMjY3Mywx NSBAQAogc3RhdGljIGludAogc2V0U2VjcmV0cyhUbHNDb25uZWN0aW9uICpjLCBpbnQgaXNjbGll bnQpCiB7Ci0JdWNoYXIga2RbTWF4S2V5RGF0YV07CisJdWNoYXIga2RbTWF4S2V5RGF0YV0sIHNl ZWRbMipSYW5kb21TaXplXTsKIAljaGFyICpzZWNyZXRzOwogCWludCBydjsKIAogCWFzc2VydChj LT5uc2VjcmV0IDw9IHNpemVvZihrZCkpOwogCXNlY3JldHMgPSBlbWFsbG9jKDIqYy0+bnNlY3Jl dCk7CiAKKwltZW1tb3ZlKHNlZWQsIGMtPnNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJbWVt bW92ZShzZWVkK1JhbmRvbVNpemUsIGMtPnNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiAJLyoK IAkgKiBnZW5lcmF0ZSBzZWNyZXQga2V5cyBmcm9tIHRoZSBtYXN0ZXIgc2VjcmV0LgogCSAqCkBA IC0yNjg2LDcgKzI2OTAsNyBAQAogCSAqIGJ1dCBpdCdzIGFsbCBnZW5lcmF0ZWQgdXNpbmcgdGhl IHNhbWUgZnVuY3Rpb24uCiAJICovCiAJKCpjLT5zZWMtPnByZikoa2QsIGMtPm5zZWNyZXQsIGMt PnNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCAia2V5IGV4cGFuc2lvbiIsCi0JCQljLT5zZWMt PnNyYW5kb20sIFJhbmRvbVNpemUsIGMtPnNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCQlz ZWVkLCBzaXplb2Yoc2VlZCkpOwogCiAJZW5jNjQoc2VjcmV0cywgMipjLT5uc2VjcmV0LCBrZCwg Yy0+bnNlY3JldCk7CiAJbWVtc2V0KGtkLCAwLCBjLT5uc2VjcmV0KTsKQEAgLTI3MDUsNiArMjcw OSw4IEBACiBzdGF0aWMgdm9pZAogc2V0TWFzdGVyU2VjcmV0KFRsc1NlYyAqc2VjLCBCeXRlcyAq cG0pCiB7CisJdWNoYXIgc2VlZFsyKlJhbmRvbVNpemVdOworCiAJaWYoc2VjLT5wc2tsZW4gPiAw KXsKIAkJQnl0ZXMgKm9wbSA9IHBtOwogCQl1Y2hhciAqcDsKQEAgLTI3MjEsOCArMjcyNywxMCBA QAogCQlmcmVlYnl0ZXMob3BtKTsKIAl9CiAKKwltZW1tb3ZlKHNlZWQsIHNlYy0+Y3JhbmRvbSwg UmFuZG9tU2l6ZSk7CisJbWVtbW92ZShzZWVkK1JhbmRvbVNpemUsIHNlYy0+c3JhbmRvbSwgUmFu ZG9tU2l6ZSk7CiAJKCpzZWMtPnByZikoc2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsIHBtLT5k YXRhLCBwbS0+bGVuLCAibWFzdGVyIHNlY3JldCIsCi0JCQlzZWMtPmNyYW5kb20sIFJhbmRvbVNp emUsIHNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCQlzZWVkLCBzaXplb2Yoc2VlZCkpOwog CiAJbWVtc2V0KHBtLT5kYXRhLCAwLCBwbS0+bGVuKTsJCiAJZnJlZWJ5dGVzKHBtKTsK --000000000000a774b805c4bfb0a3--