From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 9F3F541A22 for ; Tue, 19 Jul 2022 12:26:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1377668B607; Tue, 19 Jul 2022 15:26:17 +0300 (EEST) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0E49F68B5A5 for ; Tue, 19 Jul 2022 15:26:10 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id D24744A9C0; Tue, 19 Jul 2022 14:26:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1658233569; bh=d1TAlwgzm2gFLcAVq9GKS0yTYkzcIbLGg8pNcSBWhuY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YzL+WDWkWQSGHjBvDm27EnytkK+/ZLmbHbiNVHkIlHpmjmdYE1cM6/h27jw6kgl2L sONKTnumKTv4MSLBZJo4J+PZl+WU6ieos1KB2NUOSYZgqgLCxz7B6FL8pc9iPYLmp7 iHYVxv/SjCeNGMrf+WMUQiwF2aYyGyOlZWRuCy9g= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Jul 2022 14:26:03 +0200 Message-Id: <20220719122608.43974-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220719122608.43974-1-ffmpeg@haasn.xyz> References: <20220719122608.43974-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/6] fflcms2: move to libavcodec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CgpXZSB3aWxsIG5lZWQgdGhpcyBoZWxw ZXIgaW5zaWRlIGxpYmF2Y29kZWMgaW4gdGhlIGZ1dHVyZSwgc28gbW92ZSBpdAp0aGVyZSwgbGVh dmluZyBiZWhpbmQgYW4gI2luY2x1ZGUgdG8gdGhlIHJhdyBzb3VyY2UgZmlsZSBpbiBpdHMgb2xk CmxvY2F0aW9uIGluIGxpYnZmaWx0ZXIuIFRoaXMgYXBwcm9hY2ggaXMgaW5zcGlyZWQgYnkgdGhl IGhhbmRsaW5nIG9mCnZ1bGthbi5jLCBhbmQgYXZvaWRzIHVzIG5lZWRpbmcgdG8gZXhwb3NlIGFu eSBvZiBpdCBwdWJsaWNseSAob3IKc2VtaS1wdWJsaWNseSkgaW4gZS5nLiBsaWJhdnV0aWwsIHRo dXMgYXZvaWRpbmcgYW55IEFCSSBoZWFkYWNoZXMuCgpJdCdzIGRlYmF0YWJsZSB3aGV0aGVyIHRo ZSBhY3R1YWwgY29kZSBiZWxvbmdzIGluIGxpYmF2Y29kZWMgb3IKbGliYXZmaWx0ZXIsIGJ1dCBJ IGRlY2lkZWQgdG8gcHV0IGl0IGludG8gbGliYXZjb2RlYyBiZWNhdXNlIGl0CmNvbmNlcHR1YWxs eSBkZWFscyB3aXRoIGVuY29kaW5nIGFuZCBkZWNvZGluZyBJQ0MgcHJvZmlsZXMsIGFuZCB3aWxs IGJlCnVzZWQgdG8gZGVjb2RlIGVtYmVkZGVkIElDQyBwcm9maWxlcyBpbiBpbWFnZSBmaWxlcy4K ClNpZ25lZC1vZmYtYnk6IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2PgotLS0KIGxpYmF2Y29k ZWMvTWFrZWZpbGUgICB8ICAgMSArCiBsaWJhdmNvZGVjL2ZmbGNtczIuYyAgfCAzMTEgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL2ZmbGNtczIu aCAgfCAgODcgKysrKysrKysrKysrCiBsaWJhdmZpbHRlci9mZmxjbXMyLmMgfCAyOTQgKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWJhdmZpbHRlci9mZmxjbXMyLmgg fCAgNjUgKy0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDQwMSBpbnNlcnRpb25zKCspLCAzNTcg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9mZmxjbXMyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2ZmbGNtczIuaAoKZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCmluZGV4IGVmMjMxODQzOGIuLmFj OWZiNTc1YzUgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2Rl Yy9NYWtlZmlsZQpAQCAtMTI0MCw2ICsxMjQwLDcgQEAgU0tJUEhFQURFUlMtJChDT05GSUdfQU1G KSAgICAgICAgICAgICAgKz0gYW1mZW5jLmgKIFNLSVBIRUFERVJTLSQoQ09ORklHX0QzRDExVkEp ICAgICAgICAgICs9IGQzZDExdmEuaCBkeHZhMl9pbnRlcm5hbC5oCiBTS0lQSEVBREVSUy0kKENP TkZJR19EWFZBMikgICAgICAgICAgICArPSBkeHZhMi5oIGR4dmEyX2ludGVybmFsLmgKIFNLSVBI RUFERVJTLSQoQ09ORklHX0pOSSkgICAgICAgICAgICAgICs9IGZmam5pLmgKK1NLSVBIRUFERVJT LSQoQ09ORklHX0xDTVMyKSAgICAgICAgICAgICs9IGZmbGNtczIuaAogU0tJUEhFQURFUlMtJChD T05GSUdfTElCSlhMKSAgICAgICAgICAgKz0gbGlianhsLmgKIFNLSVBIRUFERVJTLSQoQ09ORklH X0xJQlZQWCkgICAgICAgICAgICs9IGxpYnZweC5oCiBTS0lQSEVBREVSUy0kKENPTkZJR19MSUJX RUJQX0VOQ09ERVIpICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5oCmRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL2ZmbGNtczIuYyBiL2xpYmF2Y29kZWMvZmZsY21zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmZkMzcwZmIzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNv ZGVjL2ZmbGNtczIuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAy MiBOaWtsYXMgSGFhcworICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNs dWRlICJsaWJhdnV0aWwvY29sb3JfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvY3NwLmgi CisKKyNpbmNsdWRlICJmZmxjbXMyLmgiCisKK3N0YXRpYyB2b2lkIGxvZ19jYihjbXNDb250ZXh0 IGN0eCwgY21zVUludDMyTnVtYmVyIGVycm9yLCBjb25zdCBjaGFyICpzdHIpCit7CisgICAgRkZJ Y2NDb250ZXh0ICpzID0gY21zR2V0Q29udGV4dFVzZXJEYXRhKGN0eCk7CisgICAgYXZfbG9nKHMt PmF2Y3R4LCBBVl9MT0dfRVJST1IsICJsY21zMjogWyUiUFJJdTMyIl0gJXNcbiIsIGVycm9yLCBz dHIpOworfQorCitpbnQgZmZfaWNjX2NvbnRleHRfaW5pdChGRkljY0NvbnRleHQgKnMsIHZvaWQg KmF2Y3R4KQoreworICAgIG1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKKyAgICBzLT5hdmN0eCA9 IGF2Y3R4OworICAgIHMtPmN0eCA9IGNtc0NyZWF0ZUNvbnRleHQoTlVMTCwgcyk7CisgICAgaWYg KCFzLT5jdHgpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBjbXNTZXRM b2dFcnJvckhhbmRsZXJUSFIocy0+Y3R4LCBsb2dfY2IpOworICAgIHJldHVybiAwOworfQorCit2 b2lkIGZmX2ljY19jb250ZXh0X3VuaW5pdChGRkljY0NvbnRleHQgKnMpCit7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzLT5jdXJ2ZXMpOyBpKyspCisgICAgICAgIGNt c0ZyZWVUb25lQ3VydmUocy0+Y3VydmVzW2ldKTsKKyAgICBjbXNEZWxldGVDb250ZXh0KHMtPmN0 eCk7CisgICAgbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOworfQorCitzdGF0aWMgaW50IGdldF9j dXJ2ZShGRkljY0NvbnRleHQgKnMsIGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMg dHJjLAorICAgICAgICAgICAgICAgICAgICAgY21zVG9uZUN1cnZlICoqb3V0X2N1cnZlKQorewor ICAgIGlmICh0cmMgPj0gQVZDT0xfVFJDX05CKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKworICAgIGlmIChzLT5jdXJ2ZXNbdHJjXSkKKyAgICAgICAgZ290byBkb25lOwor CisgICAgc3dpdGNoICh0cmMpIHsKKyAgICBjYXNlIEFWQ09MX1RSQ19MSU5FQVI6CisgICAgICAg IHMtPmN1cnZlc1t0cmNdID0gY21zQnVpbGRHYW1tYShzLT5jdHgsIDEuMCk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgQVZDT0xfVFJDX0dBTU1BMjI6CisgICAgICAgIHMtPmN1cnZlc1t0cmNd ID0gY21zQnVpbGRHYW1tYShzLT5jdHgsIDIuMik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug QVZDT0xfVFJDX0dBTU1BMjg6CisgICAgICAgIHMtPmN1cnZlc1t0cmNdID0gY21zQnVpbGRHYW1t YShzLT5jdHgsIDIuOCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVZDT0xfVFJDX0JUNzA5 OgorICAgIGNhc2UgQVZDT0xfVFJDX1NNUFRFMTcwTToKKyAgICBjYXNlIEFWQ09MX1RSQ19CVDIw MjBfMTA6CisgICAgY2FzZSBBVkNPTF9UUkNfQlQyMDIwXzEyOgorICAgICAgICBzLT5jdXJ2ZXNb dHJjXSA9IGNtc0J1aWxkUGFyYW1ldHJpY1RvbmVDdXJ2ZShzLT5jdHgsIDQsIChkb3VibGVbNV0p IHsKKyAgICAgICAgICAgIC8qIM6zID0gKi8gMS8wLjQ1LAorICAgICAgICAgICAgLyogYSA9ICov IDEvMS4wOTkyOTY4MjY4MDk0NDIsCisgICAgICAgICAgICAvKiBiID0gKi8gMSAtIDEvMS4wOTky OTY4MjY4MDk0NDIsCisgICAgICAgICAgICAvKiBjID0gKi8gMS80LjUsCisgICAgICAgICAgICAv KiBkID0gKi8gNC41ICogMC4wMTgwNTM5Njg1MTA4MDcsCisgICAgICAgIH0pOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTI0ME06CisgICAgICAgIHMtPmN1cnZlc1t0 cmNdID0gY21zQnVpbGRQYXJhbWV0cmljVG9uZUN1cnZlKHMtPmN0eCwgNCwgKGRvdWJsZVs1XSkg eworICAgICAgICAgICAgLyogzrMgPSAqLyAxLzAuNDUsCisgICAgICAgICAgICAvKiBhID0gKi8g MS8xLjExMTUsCisgICAgICAgICAgICAvKiBiID0gKi8gMSAtIDEvMS4xMTE1LAorICAgICAgICAg ICAgLyogYyA9ICovIDEvNC4wLAorICAgICAgICAgICAgLyogZCA9ICovIDQuMCAqIDAuMDIyOCwK KyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVZDT0xfVFJDX0xPRzoKKyAg ICAgICAgcy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZFBhcmFtZXRyaWNUb25lQ3VydmUocy0+Y3R4 LCA4LCAoZG91YmxlWzVdKSB7CisgICAgICAgICAgICAvKiBhID0gKi8gMS4wLAorICAgICAgICAg ICAgLyogYiA9ICovIDEwLjAsCisgICAgICAgICAgICAvKiBjID0gKi8gMi4wLAorICAgICAgICAg ICAgLyogZCA9ICovIC0xLjAsCisgICAgICAgICAgICAvKiBlID0gKi8gMC4wCisgICAgICAgIH0p OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFWQ09MX1RSQ19MT0dfU1FSVDoKKyAgICAgICAg cy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZFBhcmFtZXRyaWNUb25lQ3VydmUocy0+Y3R4LCA4LCAo ZG91YmxlWzVdKSB7CisgICAgICAgICAgICAvKiBhID0gKi8gMS4wLAorICAgICAgICAgICAgLyog YiA9ICovIDEwLjAsCisgICAgICAgICAgICAvKiBjID0gKi8gMi41LAorICAgICAgICAgICAgLyog ZCA9ICovIC0xLjAsCisgICAgICAgICAgICAvKiBlID0gKi8gMC4wCisgICAgICAgIH0pOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEFWQ09MX1RSQ19JRUM2MTk2Nl8yXzE6CisgICAgICAgIHMt PmN1cnZlc1t0cmNdID0gY21zQnVpbGRQYXJhbWV0cmljVG9uZUN1cnZlKHMtPmN0eCwgNCwgKGRv dWJsZVs1XSkgeworICAgICAgICAgICAgLyogzrMgPSAqLyAyLjQsCisgICAgICAgICAgICAvKiBh ID0gKi8gMS8xLjA1NSwKKyAgICAgICAgICAgIC8qIGIgPSAqLyAxIC0gMS8xLjA1NSwKKyAgICAg ICAgICAgIC8qIGMgPSAqLyAxLzEyLjkyLAorICAgICAgICAgICAgLyogZCA9ICovIDEyLjkyICog MC4wMDMxMzA4LAorICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBVkNPTF9U UkNfU01QVEU0Mjg6CisgICAgICAgIHMtPmN1cnZlc1t0cmNdID0gY21zQnVpbGRQYXJhbWV0cmlj VG9uZUN1cnZlKHMtPmN0eCwgMiwgKGRvdWJsZVszXSkgeworICAgICAgICAgICAgLyogzrMgPSAq LyAyLjYsCisgICAgICAgICAgICAvKiBhID0gKi8gcG93KDUyLjM3LzQ4LjAsIDEvMi42KSwKKyAg ICAgICAgICAgIC8qIGIgPSAqLyAwLjAKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworCisg ICAgLyogQ2FuJ3QgYmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIGV4aXN0aW5nIHBhcmFtZXRyaWMg dG9uZSBjdXJ2ZXMuCisgICAgICogRklYTUU6IHVzZSBjbXNCdWlsZFRhYnVsYXRlZFRvbmVDdXJ2 ZUZsb2F0IGluc3RlYWQgKi8KKyAgICBjYXNlIEFWQ09MX1RSQ19JRUM2MTk2Nl8yXzQ6CisgICAg Y2FzZSBBVkNPTF9UUkNfQlQxMzYxX0VDRzoKKyAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTIwODQ6 CisgICAgY2FzZSBBVkNPTF9UUkNfQVJJQl9TVERfQjY3OgorICAgICAgICByZXR1cm4gQVZFUlJP Ul9QQVRDSFdFTENPTUU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICB9CisKKyAgICBpZiAoIXMtPmN1cnZlc1t0cmNdKQorICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCitkb25lOgorICAgICpvdXRfY3VydmUgPSBzLT5jdXJ2 ZXNbdHJjXTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2ljY19wcm9maWxlX2dlbmVyYXRl KEZGSWNjQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWQ29s b3JQcmltYXJpZXMgY29sb3JfcHJpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt IEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIGNvbG9yX3RyYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbXNIUFJPRklMRSAqb3V0X3Byb2ZpbGUpCit7CisgICAgY21zVG9uZUN1 cnZlICp0b25lY3VydmU7CisgICAgY29uc3QgQVZDb2xvclByaW1hcmllc0Rlc2MgKnByaW07Cisg ICAgaW50IHJldDsKKworICAgIGlmICghKHByaW0gPSBhdl9jc3BfcHJpbWFyaWVzX2Rlc2NfZnJv bV9pZChjb2xvcl9wcmltKSkpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIGlmICgocmV0ID0gZ2V0X2N1cnZlKHMsIGNvbG9yX3RyYywgJnRvbmVjdXJ2ZSkpIDwgMCkK KyAgICAgICAgcmV0dXJuIHJldDsKKworICAgICpvdXRfcHJvZmlsZSA9IGNtc0NyZWF0ZVJHQlBy b2ZpbGVUSFIocy0+Y3R4LAorICAgICAgICAmKGNtc0NJRXh5WSkgeyBhdl9xMmQocHJpbS0+d3Au eCksIGF2X3EyZChwcmltLT53cC55KSwgMS4wIH0sCisgICAgICAgICYoY21zQ0lFeHlZVFJJUExF KSB7CisgICAgICAgICAgICAuUmVkICAgID0geyBhdl9xMmQocHJpbS0+cHJpbS5yLngpLCBhdl9x MmQocHJpbS0+cHJpbS5yLnkpLCAxLjAgfSwKKyAgICAgICAgICAgIC5HcmVlbiAgPSB7IGF2X3Ey ZChwcmltLT5wcmltLmcueCksIGF2X3EyZChwcmltLT5wcmltLmcueSksIDEuMCB9LAorICAgICAg ICAgICAgLkJsdWUgICA9IHsgYXZfcTJkKHByaW0tPnByaW0uYi54KSwgYXZfcTJkKHByaW0tPnBy aW0uYi55KSwgMS4wIH0sCisgICAgICAgIH0sCisgICAgICAgIChjbXNUb25lQ3VydmUgKlszXSkg eyB0b25lY3VydmUsIHRvbmVjdXJ2ZSwgdG9uZWN1cnZlIH0KKyAgICApOworCisgICAgcmV0dXJu ICpvdXRfcHJvZmlsZSA9PSBOVUxMID8gQVZFUlJPUihFTk9NRU0pIDogMDsKK30KKworaW50IGZm X2ljY19wcm9maWxlX2F0dGFjaChGRkljY0NvbnRleHQgKnMsIGNtc0hQUk9GSUxFIHByb2ZpbGUs IEFWRnJhbWUgKmZyYW1lKQoreworICAgIGNtc1VJbnQzMk51bWJlciBzaXplOworICAgIEFWQnVm ZmVyUmVmICpidWY7CisKKyAgICBpZiAoIWNtc1NhdmVQcm9maWxlVG9NZW0ocHJvZmlsZSwgTlVM TCwgJnNpemUpKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKworICAgIGJ1ZiA9 IGF2X2J1ZmZlcl9hbGxvYyhzaXplKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKworICAgIGlmICghY21zU2F2ZVByb2ZpbGVUb01lbShwcm9maWxlLCBi dWYtPmRhdGEsICZzaXplKSB8fCBzaXplICE9IGJ1Zi0+c2l6ZSkgeworICAgICAgICBhdl9idWZm ZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0K KworICAgIGlmICghYXZfZnJhbWVfbmV3X3NpZGVfZGF0YV9mcm9tX2J1ZihmcmFtZSwgQVZfRlJB TUVfREFUQV9JQ0NfUFJPRklMRSwgYnVmKSkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1 Zik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgWFlaX3h5KGNtc0NJRVhZWiBY WVosIEFWQ0lFeHkgKnh5KQoreworICAgIGRvdWJsZSBrID0gMS4wIC8gKFhZWi5YICsgWFlaLlkg KyBYWVouWik7CisgICAgeHktPnggPSBhdl9kMnEoayAqIFhZWi5YLCAxMDAwMDApOworICAgIHh5 LT55ID0gYXZfZDJxKGsgKiBYWVouWSwgMTAwMDAwKTsKK30KKworaW50IGZmX2ljY19wcm9maWxl X3JlYWRfcHJpbWFyaWVzKEZGSWNjQ29udGV4dCAqcywgY21zSFBST0ZJTEUgcHJvZmlsZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkNvbG9yUHJpbWFyaWVzRGVzYyAqb3V0 X3ByaW1hcmllcykKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0ZXN0cHJpbWFyaWVzWzRd WzNdID0geworICAgICAgICB7IDB4RkYsICAgIDAsICAgIDAgfSwgLyogcmVkICovCisgICAgICAg IHsgICAgMCwgMHhGRiwgICAgMCB9LCAvKiBncmVlbiAqLworICAgICAgICB7ICAgIDAsICAgIDAs IDB4RkYgfSwgLyogYmx1ZSAqLworICAgICAgICB7IDB4RkYsIDB4RkYsIDB4RkYgfSwgLyogd2hp dGUgKi8KKyAgICB9OworCisgICAgQVZXaGl0ZXBvaW50Q29lZmZpY2llbnRzICp3cCA9ICZvdXRf cHJpbWFyaWVzLT53cDsKKyAgICBBVlByaW1hcnlDb2VmZmljaWVudHMgKnByaW0gPSAmb3V0X3By aW1hcmllcy0+cHJpbTsKKyAgICBjbXNGbG9hdDY0TnVtYmVyIHByZXZfYWRhcHQ7CisgICAgY21z SFBST0ZJTEUgeHl6OworICAgIGNtc0hUUkFOU0ZPUk0gdGY7CisgICAgY21zQ0lFWFlaIGRzdFs0 XTsKKworICAgIHh5eiA9IGNtc0NyZWF0ZVhZWlByb2ZpbGVUSFIocy0+Y3R4KTsKKyAgICBpZiAo IXh5eikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIC8qIFdlIG5lZWQg dG8gdXNlIGFuIHVuYWRhcHRlZCBvYnNlcnZlciB0byBnZXQgdGhlIHJhdyB2YWx1ZXMgKi8KKyAg ICBwcmV2X2FkYXB0ID0gY21zU2V0QWRhcHRhdGlvblN0YXRlVEhSKHMtPmN0eCwgMC4wKTsKKyAg ICB0ZiA9IGNtc0NyZWF0ZVRyYW5zZm9ybVRIUihzLT5jdHgsIHByb2ZpbGUsIFRZUEVfUkdCXzgs IHh5eiwgVFlQRV9YWVpfREJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVO VF9BQlNPTFVURV9DT0xPUklNRVRSSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm90ZTogVGhlc2UgZmxhZ3MgbW9zdGx5IGRvbid0IGRvIGFueXRoaW5nCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogYW55d2F5LCBidXQgc3BlY2lmeSB0aGVtIHJlZ2FyZGxl c3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19OT0NBQ0hFIHwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19OT09QVElNSVpFIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19MT1dSRVNQUkVDQUxDIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGTEFHU19HUklEUE9JTlRTKDIpKTsKKyAg ICBjbXNTZXRBZGFwdGF0aW9uU3RhdGVUSFIocy0+Y3R4LCBwcmV2X2FkYXB0KTsKKyAgICBjbXND bG9zZVByb2ZpbGUoeHl6KTsKKyAgICBpZiAoIXRmKSB7CisgICAgICAgIGF2X2xvZyhzLT5hdmN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBJQ0MgcHJvZmlsZSAoZS5nLiBDTVlLKVxuIik7Cisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAgIGNtc0RvVHJh bnNmb3JtKHRmLCB0ZXN0cHJpbWFyaWVzLCBkc3QsIDQpOworICAgIGNtc0RlbGV0ZVRyYW5zZm9y bSh0Zik7CisgICAgWFlaX3h5KGRzdFswXSwgJnByaW0tPnIpOworICAgIFhZWl94eShkc3RbMV0s ICZwcmltLT5nKTsKKyAgICBYWVpfeHkoZHN0WzJdLCAmcHJpbS0+Yik7CisgICAgWFlaX3h5KGRz dFszXSwgd3ApOworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfaWNjX3Byb2ZpbGVfZGV0ZWN0 X3RyYW5zZmVyKEZGSWNjQ29udGV4dCAqcywgY21zSFBST0ZJTEUgcHJvZmlsZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJp c3RpYyAqb3V0X3RyYykKK3sKKyAgICAvKiA4LWJpdCBsaW5lYXIgZ3JheXNjYWxlIHJhbXAgKi8K KyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0ZXN0cmFtcFsxNl1bM10gPSB7CisgICAgICAgIHsg IDEsICAgMSwgICAxfSwgLyogYXZvaWQgZXhhY3QgemVybyBkdWUgdG8gbG9nMTAwIGV0Yy4gKi8K KyAgICAgICAgeyAxNywgIDE3LCAgMTd9LAorICAgICAgICB7IDM0LCAgMzQsICAzNH0sCisgICAg ICAgIHsgNTEsICA1MSwgIDUxfSwKKyAgICAgICAgeyA2OCwgIDY4LCAgNjh9LAorICAgICAgICB7 IDg1LCAgODUsICA4NX0sCisgICAgICAgIHsgMDIsICAwMiwgIDAyfSwKKyAgICAgICAgezExOSwg MTE5LCAxMTl9LAorICAgICAgICB7MTM2LCAxMzYsIDEzNn0sCisgICAgICAgIHsxNTMsIDE1Mywg MTUzfSwKKyAgICAgICAgezE3MCwgMTcwLCAxNzB9LAorICAgICAgICB7MTg3LCAxODcsIDE4N30s CisgICAgICAgIHsyMDQsIDIwNCwgMjA0fSwKKyAgICAgICAgezIyMSwgMjIxLCAyMjF9LAorICAg ICAgICB7MjM4LCAyMzgsIDIzOH0sCisgICAgICAgIHsyNTUsIDI1NSwgMjU1fSwKKyAgICB9Owor CisgICAgZG91YmxlIGRzdFtGRl9BUlJBWV9FTEVNUyh0ZXN0cmFtcCldOworCisgICAgZm9yIChl bnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRyYyA9IDA7IHRyYyA8IEFWQ09MX1RS Q19OQjsgdHJjKyspIHsKKyAgICAgICAgY21zVG9uZUN1cnZlICp0b25lY3VydmU7CisgICAgICAg IGNtc0hQUk9GSUxFIHJlZjsKKyAgICAgICAgY21zSFRSQU5TRk9STSB0ZjsKKyAgICAgICAgZG91 YmxlIGRlbHRhID0gMC4wOworICAgICAgICBpZiAoZ2V0X2N1cnZlKHMsIHRyYywgJnRvbmVjdXJ2 ZSkgPCAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVmID0gY21zQ3JlYXRl R3JheVByb2ZpbGVUSFIocy0+Y3R4LCBjbXNENTBfeHlZKCksIHRvbmVjdXJ2ZSk7CisgICAgICAg IGlmICghcmVmKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAg ICB0ZiA9IGNtc0NyZWF0ZVRyYW5zZm9ybVRIUihzLT5jdHgsIHByb2ZpbGUsIFRZUEVfUkdCXzgs IHJlZiwgVFlQRV9HUkFZX0RCTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SU5URU5UX1JFTEFUSVZFX0NPTE9SSU1FVFJJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY21zRkxBR1NfTk9DQUNIRSB8IGNtc0ZMQUdTX05PT1BUSU1JWkUpOworICAgICAg ICBjbXNDbG9zZVByb2ZpbGUocmVmKTsKKyAgICAgICAgaWYgKCF0ZikgeworICAgICAgICAgICAg YXZfbG9nKHMtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIElDQyBwcm9maWxlIChlLmcu IENNWUspXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICB9CisKKyAgICAgICAgY21zRG9UcmFuc2Zvcm0odGYsIHRlc3RyYW1wLCBkc3QsIEZGX0FS UkFZX0VMRU1TKGRzdCkpOworICAgICAgICBjbXNEZWxldGVUcmFuc2Zvcm0odGYpOworCisgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoZHN0KTsgaSsrKQorICAgICAg ICAgICAgZGVsdGEgKz0gZmFicyh0ZXN0cmFtcFtpXVswXSAvIDI1NS4wIC0gZHN0W2ldKTsKKyAg ICAgICAgaWYgKGRlbHRhIDwgMC4wMSkgeworICAgICAgICAgICAgKm91dF90cmMgPSB0cmM7Cisg ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgICpvdXRfdHJjID0g QVZDT0xfVFJDX1VOU1BFQ0lGSUVEOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9mZmxjbXMyLmggYi9saWJhdmNvZGVjL2ZmbGNtczIuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5hZjYzYzlhMTNjCi0tLSAvZGV2L251bGwKKysrIGIvbGli YXZjb2RlYy9mZmxjbXMyLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAyMiBOaWtsYXMgSGFhcworICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8q KgorICogQGZpbGUKKyAqIFZhcmlvdXMgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggSUNDIHBy b2ZpbGVzCisgKi8KKworI2lmbmRlZiBBVkNPREVDX0ZGTENNUzJfSAorI2RlZmluZSBBVkNPREVD X0ZGTENNUzJfSAorCisjaW5jbHVkZSAibGliYXZ1dGlsL2NzcC5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9mcmFtZS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIKKworI2luY2x1ZGUg PGxjbXMyLmg+CisKK3R5cGVkZWYgc3RydWN0IEZGSWNjQ29udGV4dCB7CisgICAgdm9pZCAqYXZj dHg7CisgICAgY21zQ29udGV4dCBjdHg7CisgICAgY21zVG9uZUN1cnZlICpjdXJ2ZXNbQVZDT0xf VFJDX05CXTsgLyogdG9uZSBjdXJ2ZSBjYWNoZSAqLworfSBGRkljY0NvbnRleHQ7CisKKy8qKgor ICogSW5pdGlhbGl6ZXMgYW4gRkZJY2NDb250ZXh0LiBUaGlzIG11c3QgYmUgZG9uZSBwcmlvciB0 byB1c2luZyBpdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBl cnJvciBjb2RlLgorICovCitpbnQgZmZfaWNjX2NvbnRleHRfaW5pdChGRkljY0NvbnRleHQgKnMs IHZvaWQgKmF2Y3R4KTsKK3ZvaWQgZmZfaWNjX2NvbnRleHRfdW5pbml0KEZGSWNjQ29udGV4dCAq cyk7CisKKy8qKgorICogR2VuZXJhdGUgYW4gSUNDIHByb2ZpbGUgZm9yIGEgZ2l2ZW4gY29tYmlu YXRpb24gb2YgY29sb3IgcHJpbWFyaWVzIGFuZAorICogdHJhbnNmZXIgZnVuY3Rpb24uIEJvdGgg dmFsdWVzIG11c3QgYmUgc2V0IHRvIHZhbGlkIGVudHJpZXMgKG5vdAorICogInVuZGVmaW5lZCIp IGZvciB0aGlzIGZ1bmN0aW9uIHRvIHdvcmsuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Ms IG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGZmX2ljY19wcm9maWxlX2dlbmVy YXRlKEZGSWNjQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFW Q29sb3JQcmltYXJpZXMgY29sb3JfcHJpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIGNvbG9yX3RyYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjbXNIUFJPRklMRSAqb3V0X3Byb2ZpbGUpOworCisvKioKKyAqIEF0 dGFjaCBhbiBJQ0MgcHJvZmlsZSB0byBhIGZyYW1lLiBIZWxwZXIgd3JhcHBlciBhcm91bmQgY21z U2F2ZVByb2ZpbGVUb01lbQorICogYW5kIGF2X2ZyYW1lX25ld19zaWRlX2RhdGFfZnJvbV9idWYu CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4K KyAqLworaW50IGZmX2ljY19wcm9maWxlX2F0dGFjaChGRkljY0NvbnRleHQgKnMsIGNtc0hQUk9G SUxFIHByb2ZpbGUsIEFWRnJhbWUgKmZyYW1lKTsKKworLyoqCisgKiBSZWFkIHRoZSBjb2xvciBw cmltYXJpZXMgYW5kIHdoaXRlIHBvaW50IGNvZWZmaWNpZW50cyBlbmNvZGVkIGJ5IGFuIElDQwor ICogcHJvZmlsZSwgYW5kIHJldHVybiB0aGUgcmF3IHZhbHVlcyBpbiBgb3V0X3ByaW1hcmllc2Au CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4K KyAqLworaW50IGZmX2ljY19wcm9maWxlX3JlYWRfcHJpbWFyaWVzKEZGSWNjQ29udGV4dCAqcywg Y21zSFBST0ZJTEUgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB VkNvbG9yUHJpbWFyaWVzRGVzYyAqb3V0X3ByaW1hcmllcyk7CisKKy8qKgorICogQXR0ZW1wdCBk ZXRlY3RpbmcgdGhlIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljIHRoYXQgYmVzdCBhcHByb3hpbWF0 ZXMgdGhlCisgKiB0cmFuc2ZlciBmdW5jdGlvbiBlbmNvZGVkIGJ5IGFuIElDQyBwcm9maWxlLiBT ZXRzIGBvdXRfdHJjYCB0bworICogQVZDT0xfVFJDX1VOU1BFQ0lGSUVEIGlmIG5vIGNsZWFyIG1h dGNoIGNhbiBiZSBpZGVudGlmaWVkLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIChpbmNs dWRpbmcgbm8gbWF0Y2gpLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBmZl9p Y2NfcHJvZmlsZV9kZXRlY3RfdHJhbnNmZXIoRkZJY2NDb250ZXh0ICpzLCBjbXNIUFJPRklMRSBw cm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWQ29sb3JU cmFuc2ZlckNoYXJhY3RlcmlzdGljICpvdXRfdHJjKTsKKworI2VuZGlmIC8qIEFWQ09ERUNfRkZM Q01TMl9IICovCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9mZmxjbXMyLmMgYi9saWJhdmZpbHRl ci9mZmxjbXMyLmMKaW5kZXggZmQzNzBmYjMxMC4uODIyNDYyZGU4NyAxMDA2NDQKLS0tIGEvbGli YXZmaWx0ZXIvZmZsY21zMi5jCisrKyBiL2xpYmF2ZmlsdGVyL2ZmbGNtczIuYwpAQCAtMSw1ICsx LDQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjIgTmlrbGFzIEhhYXMKICAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KICAqCiAgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xNywyOTUgKzE2LDQgQEAKICAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKICAqLwogCi0jaW5jbHVkZSAibGliYXZ1dGlsL2NvbG9yX3V0aWxzLmgi Ci0jaW5jbHVkZSAibGliYXZ1dGlsL2NzcC5oIgotCi0jaW5jbHVkZSAiZmZsY21zMi5oIgotCi1z dGF0aWMgdm9pZCBsb2dfY2IoY21zQ29udGV4dCBjdHgsIGNtc1VJbnQzMk51bWJlciBlcnJvciwg Y29uc3QgY2hhciAqc3RyKQotewotICAgIEZGSWNjQ29udGV4dCAqcyA9IGNtc0dldENvbnRleHRV c2VyRGF0YShjdHgpOwotICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX0VSUk9SLCAibGNtczI6 IFslIlBSSXUzMiJdICVzXG4iLCBlcnJvciwgc3RyKTsKLX0KLQotaW50IGZmX2ljY19jb250ZXh0 X2luaXQoRkZJY2NDb250ZXh0ICpzLCB2b2lkICphdmN0eCkKLXsKLSAgICBtZW1zZXQocywgMCwg c2l6ZW9mKCpzKSk7Ci0gICAgcy0+YXZjdHggPSBhdmN0eDsKLSAgICBzLT5jdHggPSBjbXNDcmVh dGVDb250ZXh0KE5VTEwsIHMpOwotICAgIGlmICghcy0+Y3R4KQotICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwotCi0gICAgY21zU2V0TG9nRXJyb3JIYW5kbGVyVEhSKHMtPmN0eCwgbG9n X2NiKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBmZl9pY2NfY29udGV4dF91bmluaXQoRkZJ Y2NDb250ZXh0ICpzKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMo cy0+Y3VydmVzKTsgaSsrKQotICAgICAgICBjbXNGcmVlVG9uZUN1cnZlKHMtPmN1cnZlc1tpXSk7 Ci0gICAgY21zRGVsZXRlQ29udGV4dChzLT5jdHgpOwotICAgIG1lbXNldChzLCAwLCBzaXplb2Yo KnMpKTsKLX0KLQotc3RhdGljIGludCBnZXRfY3VydmUoRkZJY2NDb250ZXh0ICpzLCBlbnVtIEFW Q29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRyYywKLSAgICAgICAgICAgICAgICAgICAgIGNt c1RvbmVDdXJ2ZSAqKm91dF9jdXJ2ZSkKLXsKLSAgICBpZiAodHJjID49IEFWQ09MX1RSQ19OQikK LSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0KLSAgICBpZiAocy0+Y3VydmVz W3RyY10pCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgIHN3aXRjaCAodHJjKSB7Ci0gICAgY2Fz ZSBBVkNPTF9UUkNfTElORUFSOgotICAgICAgICBzLT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxkR2Ft bWEocy0+Y3R4LCAxLjApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFWQ09MX1RSQ19HQU1N QTIyOgotICAgICAgICBzLT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxkR2FtbWEocy0+Y3R4LCAyLjIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFWQ09MX1RSQ19HQU1NQTI4OgotICAgICAgICBz LT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxkR2FtbWEocy0+Y3R4LCAyLjgpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIEFWQ09MX1RSQ19CVDcwOToKLSAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTE3 ME06Ci0gICAgY2FzZSBBVkNPTF9UUkNfQlQyMDIwXzEwOgotICAgIGNhc2UgQVZDT0xfVFJDX0JU MjAyMF8xMjoKLSAgICAgICAgcy0+Y3VydmVzW3RyY10gPSBjbXNCdWlsZFBhcmFtZXRyaWNUb25l Q3VydmUocy0+Y3R4LCA0LCAoZG91YmxlWzVdKSB7Ci0gICAgICAgICAgICAvKiDOsyA9ICovIDEv MC40NSwKLSAgICAgICAgICAgIC8qIGEgPSAqLyAxLzEuMDk5Mjk2ODI2ODA5NDQyLAotICAgICAg ICAgICAgLyogYiA9ICovIDEgLSAxLzEuMDk5Mjk2ODI2ODA5NDQyLAotICAgICAgICAgICAgLyog YyA9ICovIDEvNC41LAotICAgICAgICAgICAgLyogZCA9ICovIDQuNSAqIDAuMDE4MDUzOTY4NTEw ODA3LAotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVkNPTF9UUkNfU01Q VEUyNDBNOgotICAgICAgICBzLT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxkUGFyYW1ldHJpY1RvbmVD dXJ2ZShzLT5jdHgsIDQsIChkb3VibGVbNV0pIHsKLSAgICAgICAgICAgIC8qIM6zID0gKi8gMS8w LjQ1LAotICAgICAgICAgICAgLyogYSA9ICovIDEvMS4xMTE1LAotICAgICAgICAgICAgLyogYiA9 ICovIDEgLSAxLzEuMTExNSwKLSAgICAgICAgICAgIC8qIGMgPSAqLyAxLzQuMCwKLSAgICAgICAg ICAgIC8qIGQgPSAqLyA0LjAgKiAwLjAyMjgsCi0gICAgICAgIH0pOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEFWQ09MX1RSQ19MT0c6Ci0gICAgICAgIHMtPmN1cnZlc1t0cmNdID0gY21zQnVp bGRQYXJhbWV0cmljVG9uZUN1cnZlKHMtPmN0eCwgOCwgKGRvdWJsZVs1XSkgewotICAgICAgICAg ICAgLyogYSA9ICovIDEuMCwKLSAgICAgICAgICAgIC8qIGIgPSAqLyAxMC4wLAotICAgICAgICAg ICAgLyogYyA9ICovIDIuMCwKLSAgICAgICAgICAgIC8qIGQgPSAqLyAtMS4wLAotICAgICAgICAg ICAgLyogZSA9ICovIDAuMAotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB VkNPTF9UUkNfTE9HX1NRUlQ6Ci0gICAgICAgIHMtPmN1cnZlc1t0cmNdID0gY21zQnVpbGRQYXJh bWV0cmljVG9uZUN1cnZlKHMtPmN0eCwgOCwgKGRvdWJsZVs1XSkgewotICAgICAgICAgICAgLyog YSA9ICovIDEuMCwKLSAgICAgICAgICAgIC8qIGIgPSAqLyAxMC4wLAotICAgICAgICAgICAgLyog YyA9ICovIDIuNSwKLSAgICAgICAgICAgIC8qIGQgPSAqLyAtMS4wLAotICAgICAgICAgICAgLyog ZSA9ICovIDAuMAotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVkNPTF9U UkNfSUVDNjE5NjZfMl8xOgotICAgICAgICBzLT5jdXJ2ZXNbdHJjXSA9IGNtc0J1aWxkUGFyYW1l dHJpY1RvbmVDdXJ2ZShzLT5jdHgsIDQsIChkb3VibGVbNV0pIHsKLSAgICAgICAgICAgIC8qIM6z ID0gKi8gMi40LAotICAgICAgICAgICAgLyogYSA9ICovIDEvMS4wNTUsCi0gICAgICAgICAgICAv KiBiID0gKi8gMSAtIDEvMS4wNTUsCi0gICAgICAgICAgICAvKiBjID0gKi8gMS8xMi45MiwKLSAg ICAgICAgICAgIC8qIGQgPSAqLyAxMi45MiAqIDAuMDAzMTMwOCwKLSAgICAgICAgfSk7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgQVZDT0xfVFJDX1NNUFRFNDI4OgotICAgICAgICBzLT5jdXJ2 ZXNbdHJjXSA9IGNtc0J1aWxkUGFyYW1ldHJpY1RvbmVDdXJ2ZShzLT5jdHgsIDIsIChkb3VibGVb M10pIHsKLSAgICAgICAgICAgIC8qIM6zID0gKi8gMi42LAotICAgICAgICAgICAgLyogYSA9ICov IHBvdyg1Mi4zNy80OC4wLCAxLzIuNiksCi0gICAgICAgICAgICAvKiBiID0gKi8gMC4wCi0gICAg ICAgIH0pOwotICAgICAgICBicmVhazsKLQotICAgIC8qIENhbid0IGJlIHJlcHJlc2VudGVkIHVz aW5nIHRoZSBleGlzdGluZyBwYXJhbWV0cmljIHRvbmUgY3VydmVzLgotICAgICAqIEZJWE1FOiB1 c2UgY21zQnVpbGRUYWJ1bGF0ZWRUb25lQ3VydmVGbG9hdCBpbnN0ZWFkICovCi0gICAgY2FzZSBB VkNPTF9UUkNfSUVDNjE5NjZfMl80OgotICAgIGNhc2UgQVZDT0xfVFJDX0JUMTM2MV9FQ0c6Ci0g ICAgY2FzZSBBVkNPTF9UUkNfU01QVEUyMDg0OgotICAgIGNhc2UgQVZDT0xfVFJDX0FSSUJfU1RE X0I2NzoKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwotCi0gICAgZGVmYXVs dDoKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgfQotCi0gICAgaWYg KCFzLT5jdXJ2ZXNbdHJjXSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotZG9u ZToKLSAgICAqb3V0X2N1cnZlID0gcy0+Y3VydmVzW3RyY107Ci0gICAgcmV0dXJuIDA7Ci19Ci0K LWludCBmZl9pY2NfcHJvZmlsZV9nZW5lcmF0ZShGRkljY0NvbnRleHQgKnMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBBVkNvbG9yUHJpbWFyaWVzIGNvbG9yX3ByaW0sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp YyBjb2xvcl90cmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zSFBST0ZJTEUgKm91 dF9wcm9maWxlKQotewotICAgIGNtc1RvbmVDdXJ2ZSAqdG9uZWN1cnZlOwotICAgIGNvbnN0IEFW Q29sb3JQcmltYXJpZXNEZXNjICpwcmltOwotICAgIGludCByZXQ7Ci0KLSAgICBpZiAoIShwcmlt ID0gYXZfY3NwX3ByaW1hcmllc19kZXNjX2Zyb21faWQoY29sb3JfcHJpbSkpKQotICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICBpZiAoKHJldCA9IGdldF9jdXJ2ZShzLCBj b2xvcl90cmMsICZ0b25lY3VydmUpKSA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAq b3V0X3Byb2ZpbGUgPSBjbXNDcmVhdGVSR0JQcm9maWxlVEhSKHMtPmN0eCwKLSAgICAgICAgJihj bXNDSUV4eVkpIHsgYXZfcTJkKHByaW0tPndwLngpLCBhdl9xMmQocHJpbS0+d3AueSksIDEuMCB9 LAotICAgICAgICAmKGNtc0NJRXh5WVRSSVBMRSkgewotICAgICAgICAgICAgLlJlZCAgICA9IHsg YXZfcTJkKHByaW0tPnByaW0uci54KSwgYXZfcTJkKHByaW0tPnByaW0uci55KSwgMS4wIH0sCi0g ICAgICAgICAgICAuR3JlZW4gID0geyBhdl9xMmQocHJpbS0+cHJpbS5nLngpLCBhdl9xMmQocHJp bS0+cHJpbS5nLnkpLCAxLjAgfSwKLSAgICAgICAgICAgIC5CbHVlICAgPSB7IGF2X3EyZChwcmlt LT5wcmltLmIueCksIGF2X3EyZChwcmltLT5wcmltLmIueSksIDEuMCB9LAotICAgICAgICB9LAot ICAgICAgICAoY21zVG9uZUN1cnZlICpbM10pIHsgdG9uZWN1cnZlLCB0b25lY3VydmUsIHRvbmVj dXJ2ZSB9Ci0gICAgKTsKLQotICAgIHJldHVybiAqb3V0X3Byb2ZpbGUgPT0gTlVMTCA/IEFWRVJS T1IoRU5PTUVNKSA6IDA7Ci19Ci0KLWludCBmZl9pY2NfcHJvZmlsZV9hdHRhY2goRkZJY2NDb250 ZXh0ICpzLCBjbXNIUFJPRklMRSBwcm9maWxlLCBBVkZyYW1lICpmcmFtZSkKLXsKLSAgICBjbXNV SW50MzJOdW1iZXIgc2l6ZTsKLSAgICBBVkJ1ZmZlclJlZiAqYnVmOwotCi0gICAgaWYgKCFjbXNT YXZlUHJvZmlsZVRvTWVtKHByb2ZpbGUsIE5VTEwsICZzaXplKSkKLSAgICAgICAgcmV0dXJuIEFW RVJST1JfRVhURVJOQUw7Ci0KLSAgICBidWYgPSBhdl9idWZmZXJfYWxsb2Moc2l6ZSk7Ci0gICAg aWYgKCFidWYpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBpZiAoIWNt c1NhdmVQcm9maWxlVG9NZW0ocHJvZmlsZSwgYnVmLT5kYXRhLCAmc2l6ZSkgfHwgc2l6ZSAhPSBi dWYtPnNpemUpIHsKLSAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwotICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICBpZiAoIWF2X2ZyYW1lX25ld19zaWRl X2RhdGFfZnJvbV9idWYoZnJhbWUsIEFWX0ZSQU1FX0RBVEFfSUNDX1BST0ZJTEUsIGJ1ZikpIHsK LSAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYXZfYWx3YXlzX2lu bGluZSB2b2lkIFhZWl94eShjbXNDSUVYWVogWFlaLCBBVkNJRXh5ICp4eSkKLXsKLSAgICBkb3Vi bGUgayA9IDEuMCAvIChYWVouWCArIFhZWi5ZICsgWFlaLlopOwotICAgIHh5LT54ID0gYXZfZDJx KGsgKiBYWVouWCwgMTAwMDAwKTsKLSAgICB4eS0+eSA9IGF2X2QycShrICogWFlaLlksIDEwMDAw MCk7Ci19Ci0KLWludCBmZl9pY2NfcHJvZmlsZV9yZWFkX3ByaW1hcmllcyhGRkljY0NvbnRleHQg KnMsIGNtc0hQUk9GSUxFIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZDb2xvclByaW1hcmllc0Rlc2MgKm91dF9wcmltYXJpZXMpCi17Ci0gICAgc3RhdGljIGNv bnN0IHVpbnQ4X3QgdGVzdHByaW1hcmllc1s0XVszXSA9IHsKLSAgICAgICAgeyAweEZGLCAgICAw LCAgICAwIH0sIC8qIHJlZCAqLwotICAgICAgICB7ICAgIDAsIDB4RkYsICAgIDAgfSwgLyogZ3Jl ZW4gKi8KLSAgICAgICAgeyAgICAwLCAgICAwLCAweEZGIH0sIC8qIGJsdWUgKi8KLSAgICAgICAg eyAweEZGLCAweEZGLCAweEZGIH0sIC8qIHdoaXRlICovCi0gICAgfTsKLQotICAgIEFWV2hpdGVw b2ludENvZWZmaWNpZW50cyAqd3AgPSAmb3V0X3ByaW1hcmllcy0+d3A7Ci0gICAgQVZQcmltYXJ5 Q29lZmZpY2llbnRzICpwcmltID0gJm91dF9wcmltYXJpZXMtPnByaW07Ci0gICAgY21zRmxvYXQ2 NE51bWJlciBwcmV2X2FkYXB0OwotICAgIGNtc0hQUk9GSUxFIHh5ejsKLSAgICBjbXNIVFJBTlNG T1JNIHRmOwotICAgIGNtc0NJRVhZWiBkc3RbNF07Ci0KLSAgICB4eXogPSBjbXNDcmVhdGVYWVpQ cm9maWxlVEhSKHMtPmN0eCk7Ci0gICAgaWYgKCF4eXopCi0gICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Ci0KLSAgICAvKiBXZSBuZWVkIHRvIHVzZSBhbiB1bmFkYXB0ZWQgb2JzZXJ2ZXIg dG8gZ2V0IHRoZSByYXcgdmFsdWVzICovCi0gICAgcHJldl9hZGFwdCA9IGNtc1NldEFkYXB0YXRp b25TdGF0ZVRIUihzLT5jdHgsIDAuMCk7Ci0gICAgdGYgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIo cy0+Y3R4LCBwcm9maWxlLCBUWVBFX1JHQl84LCB4eXosIFRZUEVfWFlaX0RCTCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJTlRFTlRfQUJTT0xVVEVfQ09MT1JJTUVUUklDLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IFRoZXNlIGZsYWdzIG1vc3RseSBk b24ndCBkbyBhbnl0aGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFueXdh eSwgYnV0IHNwZWNpZnkgdGhlbSByZWdhcmRsZXNzICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY21zRkxBR1NfTk9DQUNIRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY21zRkxBR1NfTk9PUFRJTUlaRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21zRkxBR1NfTE9XUkVTUFJFQ0FMQyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21zRkxBR1NfR1JJRFBPSU5UUygyKSk7Ci0gICAgY21zU2V0QWRhcHRhdGlvblN0YXRlVEhSKHMt PmN0eCwgcHJldl9hZGFwdCk7Ci0gICAgY21zQ2xvc2VQcm9maWxlKHh5eik7Ci0gICAgaWYgKCF0 ZikgewotICAgICAgICBhdl9sb2cocy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgSUND IHByb2ZpbGUgKGUuZy4gQ01ZSylcbiIpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKLSAgICB9Ci0KLSAgICBjbXNEb1RyYW5zZm9ybSh0ZiwgdGVzdHByaW1hcmllcywgZHN0 LCA0KTsKLSAgICBjbXNEZWxldGVUcmFuc2Zvcm0odGYpOwotICAgIFhZWl94eShkc3RbMF0sICZw cmltLT5yKTsKLSAgICBYWVpfeHkoZHN0WzFdLCAmcHJpbS0+Zyk7Ci0gICAgWFlaX3h5KGRzdFsy XSwgJnByaW0tPmIpOwotICAgIFhZWl94eShkc3RbM10sIHdwKTsKLSAgICByZXR1cm4gMDsKLX0K LQotaW50IGZmX2ljY19wcm9maWxlX2RldGVjdF90cmFuc2ZlcihGRkljY0NvbnRleHQgKnMsIGNt c0hQUk9GSUxFIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgKm91dF90cmMpCi17Ci0gICAgLyogOC1i aXQgbGluZWFyIGdyYXlzY2FsZSByYW1wICovCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGVz dHJhbXBbMTZdWzNdID0gewotICAgICAgICB7ICAxLCAgIDEsICAgMX0sIC8qIGF2b2lkIGV4YWN0 IHplcm8gZHVlIHRvIGxvZzEwMCBldGMuICovCi0gICAgICAgIHsgMTcsICAxNywgIDE3fSwKLSAg ICAgICAgeyAzNCwgIDM0LCAgMzR9LAotICAgICAgICB7IDUxLCAgNTEsICA1MX0sCi0gICAgICAg IHsgNjgsICA2OCwgIDY4fSwKLSAgICAgICAgeyA4NSwgIDg1LCAgODV9LAotICAgICAgICB7IDAy LCAgMDIsICAwMn0sCi0gICAgICAgIHsxMTksIDExOSwgMTE5fSwKLSAgICAgICAgezEzNiwgMTM2 LCAxMzZ9LAotICAgICAgICB7MTUzLCAxNTMsIDE1M30sCi0gICAgICAgIHsxNzAsIDE3MCwgMTcw fSwKLSAgICAgICAgezE4NywgMTg3LCAxODd9LAotICAgICAgICB7MjA0LCAyMDQsIDIwNH0sCi0g ICAgICAgIHsyMjEsIDIyMSwgMjIxfSwKLSAgICAgICAgezIzOCwgMjM4LCAyMzh9LAotICAgICAg ICB7MjU1LCAyNTUsIDI1NX0sCi0gICAgfTsKLQotICAgIGRvdWJsZSBkc3RbRkZfQVJSQVlfRUxF TVModGVzdHJhbXApXTsKLQotICAgIGZvciAoZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJp c3RpYyB0cmMgPSAwOyB0cmMgPCBBVkNPTF9UUkNfTkI7IHRyYysrKSB7Ci0gICAgICAgIGNtc1Rv bmVDdXJ2ZSAqdG9uZWN1cnZlOwotICAgICAgICBjbXNIUFJPRklMRSByZWY7Ci0gICAgICAgIGNt c0hUUkFOU0ZPUk0gdGY7Ci0gICAgICAgIGRvdWJsZSBkZWx0YSA9IDAuMDsKLSAgICAgICAgaWYg KGdldF9jdXJ2ZShzLCB0cmMsICZ0b25lY3VydmUpIDwgMCkKLSAgICAgICAgICAgIGNvbnRpbnVl OwotCi0gICAgICAgIHJlZiA9IGNtc0NyZWF0ZUdyYXlQcm9maWxlVEhSKHMtPmN0eCwgY21zRDUw X3h5WSgpLCB0b25lY3VydmUpOwotICAgICAgICBpZiAoIXJlZikKLSAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAgICAgdGYgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIo cy0+Y3R4LCBwcm9maWxlLCBUWVBFX1JHQl84LCByZWYsIFRZUEVfR1JBWV9EQkwsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVOVF9SRUxBVElWRV9DT0xPUklNRVRSSUMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0ZMQUdTX05PQ0FDSEUgfCBj bXNGTEFHU19OT09QVElNSVpFKTsKLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKHJlZik7Ci0gICAg ICAgIGlmICghdGYpIHsKLSAgICAgICAgICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCBJQ0MgcHJvZmlsZSAoZS5nLiBDTVlLKVxuIik7Ci0gICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgfQotCi0gICAgICAgIGNtc0RvVHJhbnNm b3JtKHRmLCB0ZXN0cmFtcCwgZHN0LCBGRl9BUlJBWV9FTEVNUyhkc3QpKTsKLSAgICAgICAgY21z RGVsZXRlVHJhbnNmb3JtKHRmKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FS UkFZX0VMRU1TKGRzdCk7IGkrKykKLSAgICAgICAgICAgIGRlbHRhICs9IGZhYnModGVzdHJhbXBb aV1bMF0gLyAyNTUuMCAtIGRzdFtpXSk7Ci0gICAgICAgIGlmIChkZWx0YSA8IDAuMDEpIHsKLSAg ICAgICAgICAgICpvdXRfdHJjID0gdHJjOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg IH0KLSAgICB9Ci0KLSAgICAqb3V0X3RyYyA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsKLSAgICBy ZXR1cm4gMDsKLX0KKyNpbmNsdWRlICJsaWJhdmNvZGVjL2ZmbGNtczIuYyIKZGlmZiAtLWdpdCBh L2xpYmF2ZmlsdGVyL2ZmbGNtczIuaCBiL2xpYmF2ZmlsdGVyL2ZmbGNtczIuaAppbmRleCAwZDIz OGM2NzlmLi4xYWMyOWUzNTdiIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9mZmxjbXMyLmgKKysr IGIvbGliYXZmaWx0ZXIvZmZsY21zMi5oCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqIENvcHlyaWdo dCAoYykgMjAyMiBOaWtsYXMgSGFhcwogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgog ICoKICAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKQEAgLTE3LDcxICsxNiw5IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCiAgKi8KIAot LyoqCi0gKiBAZmlsZQotICogVmFyaW91cyBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBJQ0Mg cHJvZmlsZXMKLSAqLwotCiAjaWZuZGVmIEFWRklMVEVSX0ZGTENNUzJfSAogI2RlZmluZSBBVkZJ TFRFUl9GRkxDTVMyX0gKIAotI2luY2x1ZGUgImxpYmF2dXRpbC9jc3AuaCIKLSNpbmNsdWRlICJs aWJhdnV0aWwvZnJhbWUuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCi0KLSNpbmNs dWRlIDxsY21zMi5oPgotCi10eXBlZGVmIHN0cnVjdCBGRkljY0NvbnRleHQgewotICAgIHZvaWQg KmF2Y3R4OwotICAgIGNtc0NvbnRleHQgY3R4OwotICAgIGNtc1RvbmVDdXJ2ZSAqY3VydmVzW0FW Q09MX1RSQ19OQl07IC8qIHRvbmUgY3VydmUgY2FjaGUgKi8KLX0gRkZJY2NDb250ZXh0OwotCi0v KioKLSAqIEluaXRpYWxpemVzIGFuIEZGSWNjQ29udGV4dC4gVGhpcyBtdXN0IGJlIGRvbmUgcHJp b3IgdG8gdXNpbmcgaXQuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRp dmUgZXJyb3IgY29kZS4KLSAqLwotaW50IGZmX2ljY19jb250ZXh0X2luaXQoRkZJY2NDb250ZXh0 ICpzLCB2b2lkICphdmN0eCk7Ci12b2lkIGZmX2ljY19jb250ZXh0X3VuaW5pdChGRkljY0NvbnRl eHQgKnMpOwotCi0vKioKLSAqIEdlbmVyYXRlIGFuIElDQyBwcm9maWxlIGZvciBhIGdpdmVuIGNv bWJpbmF0aW9uIG9mIGNvbG9yIHByaW1hcmllcyBhbmQKLSAqIHRyYW5zZmVyIGZ1bmN0aW9uLiBC b3RoIHZhbHVlcyBtdXN0IGJlIHNldCB0byB2YWxpZCBlbnRyaWVzIChub3QKLSAqICJ1bmRlZmlu ZWQiKSBmb3IgdGhpcyBmdW5jdGlvbiB0byB3b3JrLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNj ZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gKi8KLWludCBmZl9pY2NfcHJvZmlsZV9n ZW5lcmF0ZShGRkljY0NvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBBVkNvbG9yUHJpbWFyaWVzIGNvbG9yX3ByaW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyBjb2xvcl90cmMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgY21zSFBST0ZJTEUgKm91dF9wcm9maWxlKTsKLQotLyoqCi0g KiBBdHRhY2ggYW4gSUNDIHByb2ZpbGUgdG8gYSBmcmFtZS4gSGVscGVyIHdyYXBwZXIgYXJvdW5k IGNtc1NhdmVQcm9maWxlVG9NZW0KLSAqIGFuZCBhdl9mcmFtZV9uZXdfc2lkZV9kYXRhX2Zyb21f YnVmLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUuCi0gKi8KLWludCBmZl9pY2NfcHJvZmlsZV9hdHRhY2goRkZJY2NDb250ZXh0ICpzLCBjbXNI UFJPRklMRSBwcm9maWxlLCBBVkZyYW1lICpmcmFtZSk7Ci0KLS8qKgotICogUmVhZCB0aGUgY29s b3IgcHJpbWFyaWVzIGFuZCB3aGl0ZSBwb2ludCBjb2VmZmljaWVudHMgZW5jb2RlZCBieSBhbiBJ Q0MKLSAqIHByb2ZpbGUsIGFuZCByZXR1cm4gdGhlIHJhdyB2YWx1ZXMgaW4gYG91dF9wcmltYXJp ZXNgLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUuCi0gKi8KLWludCBmZl9pY2NfcHJvZmlsZV9yZWFkX3ByaW1hcmllcyhGRkljY0NvbnRleHQg KnMsIGNtc0hQUk9GSUxFIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZDb2xvclByaW1hcmllc0Rlc2MgKm91dF9wcmltYXJpZXMpOwotCi0vKioKLSAqIEF0dGVt cHQgZGV0ZWN0aW5nIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpYyB0aGF0IGJlc3QgYXBwcm94 aW1hdGVzIHRoZQotICogdHJhbnNmZXIgZnVuY3Rpb24gZW5jb2RlZCBieSBhbiBJQ0MgcHJvZmls ZS4gU2V0cyBgb3V0X3RyY2AgdG8KLSAqIEFWQ09MX1RSQ19VTlNQRUNJRklFRCBpZiBubyBjbGVh ciBtYXRjaCBjYW4gYmUgaWRlbnRpZmllZC4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyAo aW5jbHVkaW5nIG5vIG1hdGNoKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICovCi1pbnQg ZmZfaWNjX3Byb2ZpbGVfZGV0ZWN0X3RyYW5zZmVyKEZGSWNjQ29udGV4dCAqcywgY21zSFBST0ZJ TEUgcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNv bG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyAqb3V0X3RyYyk7CisjaW5jbHVkZSAibGliYXZjb2Rl Yy9mZmxjbXMyLmgiCiAKICNlbmRpZiAvKiBBVkZJTFRFUl9GRkxDTVMyX0ggKi8KLS0gCjIuMzcu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVn LWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBl Zy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNp dCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=