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 B3635453AB for ; Mon, 27 Feb 2023 16:54:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0FC9E689D3A; Mon, 27 Feb 2023 18:54:08 +0200 (EET) Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 78C1A6897E6 for ; Mon, 27 Feb 2023 18:54:01 +0200 (EET) Received: by mail-qt1-f176.google.com with SMTP id c19so7297120qtn.13 for ; Mon, 27 Feb 2023 08:54:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vimeo.com; s=google; h=content-transfer-encoding:in-reply-to:to:references :content-language:subject:from:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=F38AbVORR8RsM9sOD8LDQHTvLfHFL/0oq74i9J6NAkI=; b=WflpmnuOF1AQacPYeEZ32A3tIoD+BrBazSIX70LW+ZzHfZ+A4pvTwaxi5r4K0uFdKe 4Ch4brEGcin/wUVUsPo2wbFPg0p/F3fihE82WE8iNPjA0R8hmGZw0xsCFC21TwXqjFTS V4A0KMHvEi0NCQw+26rrHY83mqp61lz8d8oeg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:to:references :content-language:subject:from:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=F38AbVORR8RsM9sOD8LDQHTvLfHFL/0oq74i9J6NAkI=; b=KNDuVaoLCutcrJ1nAJQZm1X5QpNY6OelSg96Ki5PFPMBX0cYTgiDCa7QZHFRgxUrDI S19Mf5S/+w3mnmx9irOd5hfSABG1Nm8AT7hXn15s9wCkYHEr8KmrZkAz1YeHbgzqS2WO iXUpMeM1McZBrFLSnM4e9bYYOYjUulBBb2ANmh0qY8ri/XiWMPj7N3dmRmNdMIf9/buU t+Sqywig804oNJSjG+QZp1tQsoRTBxsl4PCxqkC5pBkrcc82nuVSQ2AQwwKgcazlqV4M KU7afFK6YQ5ks7Gtkg5rZl4QIMMYarQD6d33bMTa3GBw7JHrFEDxEgwEoY3+z5b3+upY LSTA== X-Gm-Message-State: AO0yUKUcKaUGkO1HIcVT96uwg+YqSaG23VMKGyN8Cjn+ZfU4sGjpcrPr BS2JCOmD76PkdI+28tpn2Y7r+0krv6bxNMewLhY= X-Google-Smtp-Source: AK7set/50zkMORKy8ABYAl1lEevW3x68xp5fj8hE3RYvec3EX0QrwbBnQdMps2uL3E/JYSk+rsqj+A== X-Received: by 2002:ac8:59c1:0:b0:3bf:e11a:bd6 with SMTP id f1-20020ac859c1000000b003bfe11a0bd6mr2767657qtf.62.1677516839046; Mon, 27 Feb 2023 08:53:59 -0800 (PST) Received: from ?IPV6:2600:4041:6c:7000:1f01:20c:8ba9:815b? ([2600:4041:6c:7000:1f01:20c:8ba9:815b]) by smtp.gmail.com with ESMTPSA id c20-20020ac853d4000000b003b62bc6cd1csm4927692qtq.82.2023.02.27.08.53.58 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Feb 2023 08:53:58 -0800 (PST) Message-ID: Date: Mon, 27 Feb 2023 11:53:57 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 From: =?UTF-8?Q?Rapha=c3=abl_Zumer?= Content-Language: en-US, fr-FR References: To: ffmpeg-devel@ffmpeg.org In-Reply-To: Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/avutil: move dynamic HDR metadata parsing to libavutil 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 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: ClRoaXMgcGF0Y2ggc2V0IGltcGxlbWVudHMgc2VyaWFsaXphdGlvbiBmb3IgSERSMTArIGR5bmFt aWMgbWV0YWRhdGEgCihBVkR5bmFtaWNIRFJQbHVzKSwgd2hpY2ggaXMgdGhlIGludmVyc2Ugb3Bl cmF0aW9uIG9mIHRoZSBleGlzdGluZyAKZmZfcGFyc2VfaXR1X3RfdDM1X3RvX2R5bmFtaWNfaGRy MTBfcGx1cygpIGZ1bmN0aW9uLiBJdCBhbHNvIG1vdmVzIGJvdGggCmZ1bmN0aW9ucyBmcm9tIGxp YmF2Y29kZWMgdG8gbGliYXZ1dGlsIGFuZCBtYWtlcyB0aGVtIHB1YmxpYy4gRm9yIApjb25zaXN0 ZW5jeSwgdGhlIGVxdWl2YWxlbnQgdml2aWQgSERSIHBhcnNpbmcgZnVuY3Rpb24gaXMgYWxzbyBt aWdyYXRlZCwgCmJ1dCBJIGRpZCBub3QgaW1wbGVtZW50IHNlcmlhbGl6YXRpb24gZm9yIGl0LiBG aW5hbGx5LCB0aGUgcGF0Y2ggcmVuYW1lcyAKdGhvc2UgZnVuY3Rpb25zIHRvIGF2X2R5bmFtaWNf aGRyX3BsdXNfZnJvbV90MzUoKSAoZm9yIHBhcnNpbmcpIGFuZCAKYXZfZHluYW1pY19oZHJfcGx1 c190b190MzUgKGZvciBzZXJpYWxpemF0aW9uKSwgd2l0aCB0aGUgZXF1aXZhbGVudCAKY2hhbmdl IGJlaW5nIG1hZGUgZm9yIHZpdmlkIGFzIHdlbGwuCgpUaGUgbW90aXZhdGlvbiBmb3IgdGhpcyBj aGFuZ2UgaXMgdG8gYWxsb3cgdXNlcnMgdG8gZWFzaWx5IGNvbnZlcnQgCkhEUjEwKyBzaWRlIGRh dGEgKHdoaWNoIGlzIHBhcnNlZCBpbnRvIEFWRHluYW1pY0hEUlBsdXMpIHRvIGEgc3RhbmRhcmQg CklUVS1UIFQuMzUgcGF5bG9hZCB0aGF0IGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gYXBwbGlj YXRpb25zIHRoYXQgCmV4cGVjdCBIRFIxMCsgZHluYW1pYyBtZXRhZGF0YSBpbiB0aGF0IGZvcm1h dCAoZS5nLiB4MjY1IGFuZCByYXYxZSAKZW5jb2RlcnMpLgoKVGhlIHJldHVybiB2YWx1ZSBvZiB0 aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBpcyBBVkJ1ZmZlclJlZiosIHdoaWNoIEkgCmV4cGVj dCB0byBiZSBjb250ZW50aW91cy4gUGF5bG9hZCBzaXplIGlzIG5vdCBlbWJlZGRlZCBpbiB0aGUg VC4zNSBkYXRhLCAKc28gaXQgbXVzdCBiZSBjYWxjdWxhdGVkLCB1c2VkIHRvIGFsbG9jYXRlIGEg YnVmZmVyLCBhbmQgcmV0dXJuZWQgYWxvbmcgCndpdGggdGhhdCBidWZmZXIgdG8gdGhlIHVzZXIu IEFzIGZhciBhcyBJJ20gYXdhcmUsIEFWQnVmZmVyUmVmIGlzIHRoZSAKc2ltcGxlc3Qgd2F5IHRv IGRvIHRoYXQsIGJ1dCBJIHdpbGwgYmUgaGFwcHkgdG8gY29uc2lkZXIgYWx0ZXJuYXRpdmUgCnNv bHV0aW9ucy4KClBsZWFzZSBsZXQgbWUga25vdyBpZiBpdCBpcyBwcmVmZXJyZWQgdG8gYnVtcCBs aWJhdnV0aWwgd2l0aCB0aGUgZmlyc3QgCmNvbW1pdCwgb3Igd2l0aCBib3RoIG9mIHRoZW0sIGNv bnNpZGVyaW5nIHRoZXJlIGFyZSBwdWJsaWMgQVBJIGNoYW5nZXMgCmFzc29jaWF0ZWQgd2l0aCBl YWNoIG9uZS4KClJhcGhhw6tsIFp1bWVyCgpTaWduZWQtb2ZmLWJ5OiBSYXBoYcOrbCBadW1lciA8 cnp1bWVyQHRlYmFrby5uZXQ+Ci0tLQogIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgIHwgICAzICstCiAgbGliYXZjb2RlYy9keW5hbWljX2hkcjEwX3BsdXMuYyAgICAgICAg fCAxOTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGxpYmF2Y29kZWMvZHluYW1pY19oZHIx MF9wbHVzLmggICAgICAgIHwgIDM1IC0tLS0tCiAgbGliYXZjb2RlYy9keW5hbWljX2hkcl92aXZp ZC5jICAgICAgICAgfCAxMzkgLS0tLS0tLS0tLS0tLS0tLS0KICBsaWJhdmNvZGVjL2R5bmFtaWNf aGRyX3ZpdmlkLmggICAgICAgICB8ICAzNSAtLS0tLQogIGxpYmF2Y29kZWMvaDI2NDVfc2VpLmMg ICAgICAgICAgICAgICAgIHwgIDEyICstCiAgbGliYXZ1dGlsL2hkcl9keW5hbWljX21ldGFkYXRh LmMgICAgICAgfCAxODAgKysrKysrKysrKysrKysrKysrKysrKwogIGxpYmF2dXRpbC9oZHJfZHlu YW1pY19tZXRhZGF0YS5oICAgICAgIHwgIDExICsrCiAgbGliYXZ1dGlsL2hkcl9keW5hbWljX3Zp dmlkX21ldGFkYXRhLmMgfCAxMjAgKysrKysrKysrKysrKysrCiAgbGliYXZ1dGlsL2hkcl9keW5h bWljX3ZpdmlkX21ldGFkYXRhLmggfCAgMTEgKysKICAxMCBmaWxlcyBjaGFuZ2VkLCAzMjkgaW5z ZXJ0aW9ucygrKSwgNDE1IGRlbGV0aW9ucygtKQogIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNv ZGVjL2R5bmFtaWNfaGRyMTBfcGx1cy5jCiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMv ZHluYW1pY19oZHIxMF9wbHVzLmgKICBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9keW5h bWljX2hkcl92aXZpZC5jCiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZHluYW1pY19o ZHJfdml2aWQuaAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVj L01ha2VmaWxlCmluZGV4IDM4OTI1M2Y1ZDAuLjRiZGZjYmFiMTIgMTAwNjQ0Ci0tLSBhL2xpYmF2 Y29kZWMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQpAQCAtMTAzLDggKzEwMyw3 IEBAIE9CSlMtJChDT05GSUdfSDI2NFFQRUwpICAgICAgICAgICAgICAgICs9IGgyNjRxcGVsLm8K ICBPQkpTLSQoQ09ORklHX0gyNjRfU0VJKSAgICAgICAgICAgICAgICArPSBoMjY0X3NlaS5vIGgy NjQ1X3NlaS5vCiAgT0JKUy0kKENPTkZJR19IRVZDUEFSU0UpICAgICAgICAgICAgICAgKz0gaGV2 Y19wYXJzZS5vIGhldmNfcHMubyAKaGV2Y19kYXRhLm8gXAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGgyNjQ1ZGF0YS5vIGgyNjQ1X3BhcnNlLm8gCmgyNjQ1X3Z1 aS5vCi1PQkpTLSQoQ09ORklHX0hFVkNfU0VJKSAgICAgICAgICAgICAgICArPSBoZXZjX3NlaS5v IGgyNjQ1X3NlaS5vIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGR5bmFtaWNfaGRyMTBfcGx1cy5vIApkeW5hbWljX2hkcl92aXZpZC5vCitPQkpTLSQoQ09ORklH X0hFVkNfU0VJKSAgICAgICAgICAgICAgICArPSBoZXZjX3NlaS5vIGgyNjQ1X3NlaS5vCiAgT0JK Uy0kKENPTkZJR19IUEVMRFNQKSAgICAgICAgICAgICAgICAgKz0gaHBlbGRzcC5vCiAgT0JKUy0k KENPTkZJR19IVUZGTUFOKSAgICAgICAgICAgICAgICAgKz0gaHVmZm1hbi5vCiAgT0JKUy0kKENP TkZJR19IVUZGWVVWRFNQKSAgICAgICAgICAgICAgKz0gaHVmZnl1dmRzcC5vCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2R5bmFtaWNfaGRyMTBfcGx1cy5jIApiL2xpYmF2Y29kZWMvZHluYW1pY19o ZHIxMF9wbHVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YTQ0YWFjNjUuLjAw MDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy9keW5hbWljX2hkcjEwX3BsdXMuYworKysgL2Rldi9u dWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn LgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAKMDIxMTAtMTMwMSBVU0EK LSAqLwotCi0jaW5jbHVkZSAiZHluYW1pY19oZHIxMF9wbHVzLmgiCi0jaW5jbHVkZSAiZ2V0X2Jp dHMuaCIKLQotc3RhdGljIGNvbnN0IGludDY0X3QgbHVtaW5hbmNlX2RlbiA9IDE7Ci1zdGF0aWMg Y29uc3QgaW50MzJfdCBwZWFrX2x1bWluYW5jZV9kZW4gPSAxNTsKLXN0YXRpYyBjb25zdCBpbnQ2 NF90IHJnYl9kZW4gPSAxMDAwMDA7Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBmcmFjdGlvbl9waXhl bF9kZW4gPSAxMDAwOwotc3RhdGljIGNvbnN0IGludDMyX3Qga25lZV9wb2ludF9kZW4gPSA0MDk1 Owotc3RhdGljIGNvbnN0IGludDMyX3QgYmV6aWVyX2FuY2hvcl9kZW4gPSAxMDIzOwotc3RhdGlj IGNvbnN0IGludDMyX3Qgc2F0dXJhdGlvbl93ZWlnaHRfZGVuID0gODsKLQotaW50IGZmX3BhcnNl X2l0dV90X3QzNV90b19keW5hbWljX2hkcjEwX3BsdXMoQVZEeW5hbWljSERSUGx1cyAqcywgY29u c3QgCnVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc2l6ZSkKLXsKLSAgICBHZXRCaXRDb250ZXh0IGdiYywgKmdiID0gJmdiYzsK LSAgICBpbnQgcmV0OwotCi0gICAgaWYgKCFzKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwotCi0gICAgcmV0ID0gaW5pdF9nZXRfYml0czgoZ2IsIGRhdGEsIHNpemUpOwotICAgIGlm IChyZXQgPCAwKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgaWYgKGdldF9iaXRzX2xlZnQo Z2IpIDwgMTApCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotCi0gICAgcy0+ YXBwbGljYXRpb25fdmVyc2lvbiA9IGdldF9iaXRzKGdiLCA4KTsKLSAgICBzLT5udW1fd2luZG93 cyA9IGdldF9iaXRzKGdiLCAyKTsKLQotICAgIGlmIChzLT5udW1fd2luZG93cyA8IDEgfHwgcy0+ bnVtX3dpbmRvd3MgPiAzKSB7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwot ICAgIH0KLQotICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8ICgoMTkgKiA4ICsgMSkgKiAocy0+ bnVtX3dpbmRvd3MgLSAxKSkpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwot Ci0gICAgZm9yIChpbnQgdyA9IDE7IHcgPCBzLT5udW1fd2luZG93czsgdysrKSB7Ci0gICAgICAg IC8vIFRoZSBjb3JuZXJzIGFyZSBzZXQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMgaGVyZS4gVGhl eSBzaG91bGQgYmUKLSAgICAgICAgLy8gY29udmVydGVkIHRvIHRoZSByZWxhdGl2ZSBjb29yZGlu YXRlcyAoaW4gWzAsIDFdKSBpbiB0aGUgCmRlY29kZXIuCi0gICAgICAgIEFWSERSUGx1c0NvbG9y VHJhbnNmb3JtUGFyYW1zICpwYXJhbXMgPSAmcy0+cGFyYW1zW3ddOwotICAgICAgICBwYXJhbXMt PndpbmRvd191cHBlcl9sZWZ0X2Nvcm5lcl94ID0KLSAgICAgICAgICAgIChBVlJhdGlvbmFsKXtn ZXRfYml0cyhnYiwgMTYpLCAxfTsKLSAgICAgICAgcGFyYW1zLT53aW5kb3dfdXBwZXJfbGVmdF9j b3JuZXJfeSA9Ci0gICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDE2KSwgMX07 Ci0gICAgICAgIHBhcmFtcy0+d2luZG93X2xvd2VyX3JpZ2h0X2Nvcm5lcl94ID0KLSAgICAgICAg ICAgIChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTYpLCAxfTsKLSAgICAgICAgcGFyYW1zLT53 aW5kb3dfbG93ZXJfcmlnaHRfY29ybmVyX3kgPQotICAgICAgICAgICAgKEFWUmF0aW9uYWwpe2dl dF9iaXRzKGdiLCAxNiksIDF9OwotCi0gICAgICAgIHBhcmFtcy0+Y2VudGVyX29mX2VsbGlwc2Vf eCA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAgICAgIHBhcmFtcy0+Y2VudGVyX29mX2VsbGlwc2Vf eSA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAgICAgIHBhcmFtcy0+cm90YXRpb25fYW5nbGUgPSBn ZXRfYml0cyhnYiwgOCk7Ci0gICAgICAgIHBhcmFtcy0+c2VtaW1ham9yX2F4aXNfaW50ZXJuYWxf ZWxsaXBzZSA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAgICAgIHBhcmFtcy0+c2VtaW1ham9yX2F4 aXNfZXh0ZXJuYWxfZWxsaXBzZSA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAgICAgIHBhcmFtcy0+ c2VtaW1pbm9yX2F4aXNfZXh0ZXJuYWxfZWxsaXBzZSA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAg ICAgIHBhcmFtcy0+b3ZlcmxhcF9wcm9jZXNzX29wdGlvbiA9IGdldF9iaXRzMShnYik7Ci0gICAg fQotCi0gICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgMjgpCi0gICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwotCi0gICAgcy0+dGFyZ2V0ZWRfc3lzdGVtX2Rpc3BsYXlfbWF4aW11 bV9sdW1pbmFuY2UgPQotICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHNfbG9uZyhnYiwgMjcp LCBsdW1pbmFuY2VfZGVufTsKLSAgICBzLT50YXJnZXRlZF9zeXN0ZW1fZGlzcGxheV9hY3R1YWxf cGVha19sdW1pbmFuY2VfZmxhZyA9IGdldF9iaXRzMShnYik7Ci0KLSAgICBpZiAocy0+dGFyZ2V0 ZWRfc3lzdGVtX2Rpc3BsYXlfYWN0dWFsX3BlYWtfbHVtaW5hbmNlX2ZsYWcpIHsKLSAgICAgICAg aW50IHJvd3MsIGNvbHM7Ci0gICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8IDEwKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgIHJvd3MgPSBnZXRf Yml0cyhnYiwgNSk7Ci0gICAgICAgIGNvbHMgPSBnZXRfYml0cyhnYiwgNSk7Ci0gICAgICAgIGlm ICgoKHJvd3MgPCAyKSB8fCAocm93cyA+IDI1KSkgfHwgKChjb2xzIDwgMikgfHwgKGNvbHMgPiAy NSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAg fQotICAgICAgICBzLT5udW1fcm93c190YXJnZXRlZF9zeXN0ZW1fZGlzcGxheV9hY3R1YWxfcGVh a19sdW1pbmFuY2UgPSByb3dzOwotICAgICAgICBzLT5udW1fY29sc190YXJnZXRlZF9zeXN0ZW1f ZGlzcGxheV9hY3R1YWxfcGVha19sdW1pbmFuY2UgPSBjb2xzOwotCi0gICAgICAgIGlmIChnZXRf Yml0c19sZWZ0KGdiKSA8IChyb3dzICogY29scyAqIDQpKQotICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBp KyspIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgaisrKSB7Ci0gICAg ICAgICAgICAgICAgcy0+dGFyZ2V0ZWRfc3lzdGVtX2Rpc3BsYXlfYWN0dWFsX3BlYWtfbHVtaW5h bmNlW2ldW2pdID0KLSAgICAgICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdi LCA0KSwgcGVha19sdW1pbmFuY2VfZGVufTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg IH0KLSAgICBmb3IgKGludCB3ID0gMDsgdyA8IHMtPm51bV93aW5kb3dzOyB3KyspIHsKLSAgICAg ICAgQVZIRFJQbHVzQ29sb3JUcmFuc2Zvcm1QYXJhbXMgKnBhcmFtcyA9ICZzLT5wYXJhbXNbd107 Ci0gICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8ICgzICogMTcgKyAxNyArIDQpKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0KLSAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIHBhcmFtcy0+bWF4c2NsW2ldID0KLSAg ICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDE3KSwgcmdiX2Rlbn07Ci0g ICAgICAgIH0KLSAgICAgICAgcGFyYW1zLT5hdmVyYWdlX21heHJnYiA9Ci0gICAgICAgICAgICAo QVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDE3KSwgcmdiX2Rlbn07Ci0gICAgICAgIHBhcmFtcy0+ bnVtX2Rpc3RyaWJ1dGlvbl9tYXhyZ2JfcGVyY2VudGlsZXMgPSBnZXRfYml0cyhnYiwgNCk7Ci0K LSAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwKLSAgICAgICAgICAgIChwYXJhbXMtPm51 bV9kaXN0cmlidXRpb25fbWF4cmdiX3BlcmNlbnRpbGVzICogMjQpKQotICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAK cGFyYW1zLT5udW1fZGlzdHJpYnV0aW9uX21heHJnYl9wZXJjZW50aWxlczsgaSsrKSB7Ci0gICAg ICAgICAgICBwYXJhbXMtPmRpc3RyaWJ1dGlvbl9tYXhyZ2JbaV0ucGVyY2VudGFnZSA9IGdldF9i aXRzKGdiLCA3KTsKLSAgICAgICAgICAgIHBhcmFtcy0+ZGlzdHJpYnV0aW9uX21heHJnYltpXS5w ZXJjZW50aWxlID0KLSAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDE3 KSwgcmdiX2Rlbn07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikg PCAxMCkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotCi0gICAgICAg IHBhcmFtcy0+ZnJhY3Rpb25fYnJpZ2h0X3BpeGVscyA9IChBVlJhdGlvbmFsKXtnZXRfYml0cyhn YiwgMTApLCAKZnJhY3Rpb25fcGl4ZWxfZGVufTsKLSAgICB9Ci0gICAgaWYgKGdldF9iaXRzX2xl ZnQoZ2IpIDwgMSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgcy0+ bWFzdGVyaW5nX2Rpc3BsYXlfYWN0dWFsX3BlYWtfbHVtaW5hbmNlX2ZsYWcgPSBnZXRfYml0czEo Z2IpOwotICAgIGlmIChzLT5tYXN0ZXJpbmdfZGlzcGxheV9hY3R1YWxfcGVha19sdW1pbmFuY2Vf ZmxhZykgewotICAgICAgICBpbnQgcm93cywgY29sczsKLSAgICAgICAgaWYgKGdldF9iaXRzX2xl ZnQoZ2IpIDwgMTApCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAg ICAgICAgcm93cyA9IGdldF9iaXRzKGdiLCA1KTsKLSAgICAgICAgY29scyA9IGdldF9iaXRzKGdi LCA1KTsKLSAgICAgICAgaWYgKCgocm93cyA8IDIpIHx8IChyb3dzID4gMjUpKSB8fCAoKGNvbHMg PCAyKSB8fCAoY29scyA+IDI1KSkpIHsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwotICAgICAgICB9Ci0gICAgICAgIHMtPm51bV9yb3dzX21hc3RlcmluZ19kaXNwbGF5 X2FjdHVhbF9wZWFrX2x1bWluYW5jZSA9IHJvd3M7Ci0gICAgICAgIHMtPm51bV9jb2xzX21hc3Rl cmluZ19kaXNwbGF5X2FjdHVhbF9wZWFrX2x1bWluYW5jZSA9IGNvbHM7Ci0KLSAgICAgICAgaWYg KGdldF9iaXRzX2xlZnQoZ2IpIDwgKHJvd3MgKiBjb2xzICogNCkpCi0gICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJv d3M7IGkrKykgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHsK LSAgICAgICAgICAgICAgICBzLT5tYXN0ZXJpbmdfZGlzcGxheV9hY3R1YWxfcGVha19sdW1pbmFu Y2VbaV1bal0gPQotICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2Is IDQpLCBwZWFrX2x1bWluYW5jZV9kZW59OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotCi0gICAgZm9yIChpbnQgdyA9IDA7IHcgPCBzLT5udW1fd2luZG93czsgdysrKSB7Ci0gICAg ICAgIEFWSERSUGx1c0NvbG9yVHJhbnNmb3JtUGFyYW1zICpwYXJhbXMgPSAmcy0+cGFyYW1zW3dd OwotICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAxKQotICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0KLSAgICAgICAgcGFyYW1zLT50b25lX21hcHBpbmdfZmxh ZyA9IGdldF9iaXRzMShnYik7Ci0gICAgICAgIGlmIChwYXJhbXMtPnRvbmVfbWFwcGluZ19mbGFn KSB7Ci0gICAgICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAyOCkKLSAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLQotICAgICAgICAgICAgcGFyYW1zLT5r bmVlX3BvaW50X3ggPQotICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwg MTIpLCBrbmVlX3BvaW50X2Rlbn07Ci0gICAgICAgICAgICBwYXJhbXMtPmtuZWVfcG9pbnRfeSA9 Ci0gICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMiksIGtuZWVfcG9p bnRfZGVufTsKLSAgICAgICAgICAgIHBhcmFtcy0+bnVtX2Jlemllcl9jdXJ2ZV9hbmNob3JzID0g Z2V0X2JpdHMoZ2IsIDQpOwotCi0gICAgICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAo cGFyYW1zLT5udW1fYmV6aWVyX2N1cnZlX2FuY2hvcnMgKiAKMTApKQotICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IHBhcmFtcy0+bnVtX2Jlemllcl9jdXJ2ZV9hbmNob3JzOyBpKyspIHsKLSAgICAgICAg ICAgICAgICBwYXJhbXMtPmJlemllcl9jdXJ2ZV9hbmNob3JzW2ldID0KLSAgICAgICAgICAgICAg ICAgICAgKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMCksIGJlemllcl9hbmNob3JfZGVufTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdi KSA8IDEpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAg cGFyYW1zLT5jb2xvcl9zYXR1cmF0aW9uX21hcHBpbmdfZmxhZyA9IGdldF9iaXRzMShnYik7Ci0g ICAgICAgIGlmIChwYXJhbXMtPmNvbG9yX3NhdHVyYXRpb25fbWFwcGluZ19mbGFnKSB7Ci0gICAg ICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCA2KQotICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAgcGFyYW1zLT5jb2xvcl9zYXR1cmF0 aW9uX3dlaWdodCA9Ci0gICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCA2 KSwgc2F0dXJhdGlvbl93ZWlnaHRfZGVufTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy biAwOwotfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9keW5hbWljX2hkcjEwX3BsdXMuaCAKYi9s aWJhdmNvZGVjL2R5bmFtaWNfaGRyMTBfcGx1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBjZDdhY2YwNDMyLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvZHluYW1pY19oZHIx MF9wbHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g KgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAKMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIEFWQ09ERUNfRFlOQU1JQ19IRFIxMF9Q TFVTX0gKLSNkZWZpbmUgQVZDT0RFQ19EWU5BTUlDX0hEUjEwX1BMVVNfSAotCi0jaW5jbHVkZSAi bGliYXZ1dGlsL2hkcl9keW5hbWljX21ldGFkYXRhLmgiCi0KLS8qKgotICogUGFyc2UgdGhlIHVz ZXIgZGF0YSByZWdpc3RlcmVkIElUVS1UIFQuMzUgdG8gQVZidWZmZXIgCihBVkR5bmFtaWNIRFJQ bHVzKS4KLSAqIEBwYXJhbSBzIEEgcG9pbnRlciBjb250YWluaW5nIHRoZSBkZWNvZGVkIEFWRHlu YW1pY0hEUlBsdXMgc3RydWN0dXJlLgotICogQHBhcmFtIGRhdGEgVGhlIGJ5dGUgYXJyYXkgY29u dGFpbmluZyB0aGUgcmF3IElUVS1UIFQuMzUgZGF0YS4KLSAqIEBwYXJhbSBzaXplIFNpemUgb2Yg dGhlIGRhdGEgYXJyYXkgaW4gYnl0ZXMuCi0gKgotICogQHJldHVybiAwIGlmIHN1Y2NlZWQuIE90 aGVyd2lzZSwgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQVZFUlJPUi4KLSAqLwotaW50IGZmX3Bh cnNlX2l0dV90X3QzNV90b19keW5hbWljX2hkcjEwX3BsdXMoQVZEeW5hbWljSERSUGx1cyAqcywg Y29uc3QgCnVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgc2l6ZSk7Ci0KLSNlbmRpZiAvKiBBVkNPREVDX0RZTkFNSUNfSERSMTBf UExVU19IICovCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2R5bmFtaWNfaGRyX3ZpdmlkLmMgYi9s aWJhdmNvZGVjL2R5bmFtaWNfaGRyX3ZpdmlkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGQ2ODk2NjlkZWMuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy9keW5hbWljX2hkcl92 aXZpZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq Ci0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IAowMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJkeW5hbWljX2hkcl92aXZpZC5oIgot I2luY2x1ZGUgImdldF9iaXRzLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQzMl90IG1heHJnYl9kZW4g PSA0MDk1Owotc3RhdGljIGNvbnN0IGludDMyX3QgY29sb3Jfc2F0dXJhdGlvbl9nYWluX2RlbiA9 IDEyODsKLXN0YXRpYyBjb25zdCBpbnQzMl90IG1heGltdW1fbHVtaW5hbmNlX2RlbiA9IDQwOTU7 Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBiYXNlX3BhcmFtX21fcF9kZW4gPSAxNjM4MzsKLXN0YXRp YyBjb25zdCBpbnQzMl90IGJhc2VfcGFyYW1fbV9tX2RlbiA9IDEwOwotc3RhdGljIGNvbnN0IGlu dDMyX3QgYmFzZV9wYXJhbV9tX2FfZGVuID0gMTAyMzsKLXN0YXRpYyBjb25zdCBpbnQzMl90IGJh c2VfcGFyYW1fbV9iX2RlbiA9IDEwMjM7Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBiYXNlX3BhcmFt X21fbl9kZW4gPSAxMDsKLXN0YXRpYyBjb25zdCBpbnQzMl90IGJhc2VfcGFyYW1fRGVsdGFfZGVu ID0gMTI3OwotCi1pbnQgZmZfcGFyc2VfaXR1X3RfdDM1X3RvX2R5bmFtaWNfaGRyX3ZpdmlkKEFW RHluYW1pY0hEUlZpdmlkICpzLCBjb25zdCAKdWludDhfdCAqZGF0YSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKQotewotICAgIEdldEJpdENv bnRleHQgZ2JjLCAqZ2IgPSAmZ2JjOwotICAgIGludCByZXQ7Ci0KLSAgICBpZiAoIXMpCi0gICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICByZXQgPSBpbml0X2dldF9iaXRzOChn YiwgZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0K LSAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCA4KQotICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKLQotICAgIHMtPnN5c3RlbV9zdGFydF9jb2RlID0gZ2V0X2JpdHMoZ2IsIDgp OwotICAgIGlmIChzLT5zeXN0ZW1fc3RhcnRfY29kZSA9PSAweDAxKSB7Ci0gICAgICAgIHMtPm51 bV93aW5kb3dzID0gMTsKLQotICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAxMiAqIDQg KiBzLT5udW1fd2luZG93cykKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OwotICAgICAgICBmb3IgKGludCB3ID0gMDsgdyA8IHMtPm51bV93aW5kb3dzOyB3KyspIHsKLSAg ICAgICAgICAgIEFWSERSVml2aWRDb2xvclRyYW5zZm9ybVBhcmFtcyAqcGFyYW1zID0gJnMtPnBh cmFtc1t3XTsKLQotICAgICAgICAgICAgcGFyYW1zLT5taW5pbXVtX21heHJnYiAgPSAoQVZSYXRp b25hbCl7Z2V0X2JpdHMoZ2IsIDEyKSwgCm1heHJnYl9kZW59OwotICAgICAgICAgICAgcGFyYW1z LT5hdmVyYWdlX21heHJnYiAgPSAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEyKSwgCm1heHJn Yl9kZW59OwotICAgICAgICAgICAgcGFyYW1zLT52YXJpYW5jZV9tYXhyZ2IgPSAoQVZSYXRpb25h bCl7Z2V0X2JpdHMoZ2IsIDEyKSwgCm1heHJnYl9kZW59OwotICAgICAgICAgICAgcGFyYW1zLT5t YXhpbXVtX21heHJnYiAgPSAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEyKSwgCm1heHJnYl9k ZW59OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgMiAqIHMt Pm51bV93aW5kb3dzKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0g ICAgICAgIGZvciAoaW50IHcgPSAwOyB3IDwgcy0+bnVtX3dpbmRvd3M7IHcrKykgewotICAgICAg ICAgICAgQVZIRFJWaXZpZENvbG9yVHJhbnNmb3JtUGFyYW1zICpwYXJhbXMgPSAmcy0+cGFyYW1z W3ddOwotCi0gICAgICAgICAgICBwYXJhbXMtPnRvbmVfbWFwcGluZ19tb2RlX2ZsYWcgPSBnZXRf Yml0cyhnYiwgMSk7Ci0gICAgICAgICAgICBpZiAocGFyYW1zLT50b25lX21hcHBpbmdfbW9kZV9m bGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgMSApCi0gICAg ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAg ICAgIHBhcmFtcy0+dG9uZV9tYXBwaW5nX3BhcmFtX251bSA9IGdldF9iaXRzKGdiLCAxKSArIDE7 Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMtPnRvbmVfbWFwcGlu Z19wYXJhbV9udW07IGkrKykgewotICAgICAgICAgICAgICAgICAgICBBVkhEUlZpdmlkQ29sb3JU b25lTWFwcGluZ1BhcmFtcyAqdG1fcGFyYW1zID0gCiZwYXJhbXMtPnRtX3BhcmFtc1tpXTsKLQot ICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAxMykKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotIHRtX3BhcmFtcy0+ dGFyZ2V0ZWRfc3lzdGVtX2Rpc3BsYXlfbWF4aW11bV9sdW1pbmFuY2UgPSAKKEFWUmF0aW9uYWwp e2dldF9iaXRzKGdiLCAxMiksIG1heGltdW1fbHVtaW5hbmNlX2Rlbn07Ci0gICAgICAgICAgICAg ICAgICAgIHRtX3BhcmFtcy0+YmFzZV9lbmFibGVfZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHRtX3BhcmFtcy0+YmFzZV9lbmFibGVfZmxhZykgewotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgKDE0ICsgNiArIDEw ICsgMTAgKyA2ICsgCjggKyAxMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMt PmJhc2VfcGFyYW1fbV9wID0gCihBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTQpLCBiYXNlX3Bh cmFtX21fcF9kZW59OwotICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT5iYXNlX3Bh cmFtX21fbSA9IAooQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsICA2KSwgYmFzZV9wYXJhbV9tX21f ZGVufTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9tX2Eg PSAKKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMCksIGJhc2VfcGFyYW1fbV9hX2Rlbn07Ci0g ICAgICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMtPmJhc2VfcGFyYW1fbV9iID0gCihBVlJh dGlvbmFsKXtnZXRfYml0cyhnYiwgMTApLCBiYXNlX3BhcmFtX21fYl9kZW59OwotICAgICAgICAg ICAgICAgICAgICAgICAgdG1fcGFyYW1zLT5iYXNlX3BhcmFtX21fbiA9IAooQVZSYXRpb25hbCl7 Z2V0X2JpdHMoZ2IsICA2KSwgYmFzZV9wYXJhbV9tX25fZGVufTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9rMSA9IGdldF9iaXRzKGdiLCAyKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9rMiA9IGdldF9iaXRzKGdi LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9rMyA9 IGdldF9iaXRzKGdiLCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+YmFz ZV9wYXJhbV9EZWx0YV9lbmFibGVfbW9kZSA9IApnZXRfYml0cyhnYiwgMyk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAodG1fcGFyYW1zLT5iYXNlX3BhcmFtX0RlbHRhX2VuYWJsZV9tb2Rl ID09IAoyIHx8IHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9EZWx0YV9lbmFibGVfbW9kZSA9PSA2KQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9EZWx0YSA9 IAooQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDcpICogLTEsIGJhc2VfcGFyYW1fRGVsdGFfZGVu fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bV9wYXJhbXMtPmJhc2VfcGFyYW1fRGVsdGEgPSAKKEFWUmF0aW9uYWwpe2dldF9iaXRz KGdiLCA3KSwgYmFzZV9wYXJhbV9EZWx0YV9kZW59OwotCi0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgdG1f cGFyYW1zLT50aHJlZV9TcGxpbmVfZW5hYmxlX2ZsYWcgPSAKZ2V0X2JpdHMoZ2IsIDEpOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHRtX3BhcmFtcy0+dGhyZWVfU3BsaW5lX2VuYWJsZV9m bGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2Ip IDwgMSArIAp0bV9wYXJhbXMtPnRocmVlX1NwbGluZV9udW0gKiAoMiArIDEyICsgMjggKyAxKSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVf bnVtID0gZ2V0X2JpdHMoZ2IsIAoxKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCAKdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVfbnVtOyBqKyspIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVf VEhfbW9kZSA9IApnZXRfYml0cyhnYiwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0bV9wYXJhbXMtPnRocmVlX1NwbGluZV9USF9tb2RlID09IAowIHx8IHRtX3BhcmFt cy0+dGhyZWVfU3BsaW5lX1RIX21vZGUgPT0gMikgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgOCkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSB0bV9w YXJhbXMtPnRocmVlX1NwbGluZV9USF9lbmFibGVfTUIgPSAoQVZSYXRpb25hbCl7Z2V0X2JpdHMo Z2IsIDgpLCAKMjU1fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMtPnRocmVlX1NwbGluZV9USF9lbmFi bGUgPSAKKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMiksICA0MDk1fTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVfVEhfRGVsdGExID0g CihBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTApLCAgMTAyM307Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+dGhyZWVfU3BsaW5lX1RIX0RlbHRhMiA9IAooQVZS YXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEwKSwgIDEwMjN9OwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0bV9wYXJhbXMtPnRocmVlX1NwbGluZV9lbmFibGVfU3RyZW5ndGggCj0gKEFW UmF0aW9uYWwpe2dldF9iaXRzKGdiLCAgOCksICAyNTV9OwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVfbnVtICAgICA9IDE7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVfVEhfbW9kZSA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYW1zLT5j b2xvcl9zYXR1cmF0aW9uX21hcHBpbmdfZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsKLSAgICAgICAg ICAgIGlmIChwYXJhbXMtPmNvbG9yX3NhdHVyYXRpb25fbWFwcGluZ19mbGFnKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgMyArIApwYXJhbXMtPmNvbG9yX3NhdHVy YXRpb25fbnVtICogOCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMtPmNvbG9yX3NhdHVyYXRpb25fbnVtID0g Z2V0X2JpdHMoZ2IsIDMpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFy YW1zLT5jb2xvcl9zYXR1cmF0aW9uX251bTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBh cmFtcy0+Y29sb3Jfc2F0dXJhdGlvbl9nYWluW2ldID0gCihBVlJhdGlvbmFsKXtnZXRfYml0cyhn YiwgOCksIGNvbG9yX3NhdHVyYXRpb25fZ2Fpbl9kZW59OwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9keW5hbWljX2hkcl92aXZpZC5oIGIvbGliYXZjb2RlYy9keW5hbWlj X2hkcl92aXZpZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTIxYjNkMjYzLi4w MDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvZHluYW1pY19oZHJfdml2aWQuaAorKysgL2Rldi9u dWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu Ci0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIAowMjExMC0xMzAxIFVTQQot ICovCi0KLSNpZm5kZWYgQVZDT0RFQ19EWU5BTUlDX0hEUl9WSVZJRF9ICi0jZGVmaW5lIEFWQ09E RUNfRFlOQU1JQ19IRFJfVklWSURfSAotCi0jaW5jbHVkZSAibGliYXZ1dGlsL2hkcl9keW5hbWlj X3ZpdmlkX21ldGFkYXRhLmgiCi0KLS8qKgotICogUGFyc2UgdGhlIHVzZXIgZGF0YSByZWdpc3Rl cmVkIElUVS1UIFQuMzUgdG8gQVZidWZmZXIgCihBVkR5bmFtaWNIRFJWaXZpZCkuCi0gKiBAcGFy YW0gcyBBIHBvaW50ZXIgY29udGFpbmluZyB0aGUgZGVjb2RlZCBBVkR5bmFtaWNIRFJWaXZpZCBz dHJ1Y3R1cmUuCi0gKiBAcGFyYW0gZGF0YSBUaGUgYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBy YXcgSVRVLVQgVC4zNSBkYXRhLgotICogQHBhcmFtIHNpemUgU2l6ZSBvZiB0aGUgZGF0YSBhcnJh eSBpbiBieXRlcy4KLSAqCi0gKiBAcmV0dXJuIDAgaWYgc3VjY2VlZC4gT3RoZXJ3aXNlLCByZXR1 cm5zIHRoZSBhcHByb3ByaWF0ZSBBVkVSUk9SLgotICovCi1pbnQgZmZfcGFyc2VfaXR1X3RfdDM1 X3RvX2R5bmFtaWNfaGRyX3ZpdmlkKEFWRHluYW1pY0hEUlZpdmlkICpzLCBjb25zdCAKdWludDhf dCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzaXplKTsKLQotI2VuZGlmIC8qIEFWQ09ERUNfRFlOQU1JQ19IRFJfVklWSURfSCAqLwpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9oMjY0NV9zZWkuYyBiL2xpYmF2Y29kZWMvaDI2NDVfc2VpLmMK aW5kZXggNmU0YTlhMWFmMi4uN2E5NmJjNjA1NiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9oMjY0 NV9zZWkuYworKysgYi9saWJhdmNvZGVjL2gyNjQ1X3NlaS5jCkBAIC0yNywxNCArMjcsMTQgQEAK ICAgI2luY2x1ZGUgImxpYmF2dXRpbC9hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQuaCIKICAj aW5jbHVkZSAibGliYXZ1dGlsL2Rpc3BsYXkuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaGRyX2R5 bmFtaWNfbWV0YWRhdGEuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaGRyX2R5bmFtaWNfdml2aWRf bWV0YWRhdGEuaCIKICAjaW5jbHVkZSAibGliYXZ1dGlsL2ZpbG1fZ3JhaW5fcGFyYW1zLmgiCiAg I2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCiAgI2luY2x1ZGUgImxpYmF2dXRpbC9zdGVy ZW8zZC5oIgogICAjaW5jbHVkZSAiYXRzY19hNTMuaCIKICAjaW5jbHVkZSAiYXZjb2RlYy5oIgot I2luY2x1ZGUgImR5bmFtaWNfaGRyMTBfcGx1cy5oIgotI2luY2x1ZGUgImR5bmFtaWNfaGRyX3Zp dmlkLmgiCiAgI2luY2x1ZGUgImdldF9iaXRzLmgiCiAgI2luY2x1ZGUgImdvbG9tYi5oIgogICNp bmNsdWRlICJoMjY0NV9zZWkuaCIKQEAgLTUyLDggKzUyLDggQEAgc3RhdGljIGludCAKZGVjb2Rl X3JlZ2lzdGVyZWRfdXNlcl9kYXRhX2R5bmFtaWNfaGRyX3BsdXMoSEVWQ1NFSUR5bmFtaWNIRFJQ bHVzICpzCiAgICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwogIC0gICAgZXJyID0gZmZfcGFyc2VfaXR1X3RfdDM1X3RvX2R5bmFtaWNfaGRyMTBfcGx1 cyhtZXRhZGF0YSwgZ2ItPmJ1ZmZlciwKLSBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYikp OworICAgIGVyciA9IGF2X2R5bmFtaWNfaGRyX3BsdXNfZnJvbV90MzUobWV0YWRhdGEsIGdiLT5i dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYikpOwogICAgICBpZiAoZXJyIDwgMCkgewogICAgICAgICAgYXZf ZnJlZShtZXRhZGF0YSk7CiAgICAgICAgICByZXR1cm4gZXJyOwpAQCAtNzgsOCArNzgsOCBAQCBz dGF0aWMgaW50IApkZWNvZGVfcmVnaXN0ZXJlZF91c2VyX2RhdGFfZHluYW1pY19oZHJfdml2aWQo SEVWQ1NFSUR5bmFtaWNIRFJWaXZpZAogICAgICBpZiAoIW1ldGFkYXRhKQogICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKICAtICAgIGVyciA9IGZmX3BhcnNlX2l0dV90X3QzNV90b19k eW5hbWljX2hkcl92aXZpZChtZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2ItPmJ1ZmZlciwgCmJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiKSk7CisgICAgZXJyID0gYXZfZHluYW1pY19oZHJfdml2aWRfZnJvbV90MzUobWV0YWRh dGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ItPmJ1ZmZlciwg CmJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiKSk7CiAgICAgIGlmIChlcnIgPCAwKSB7CiAg ICAgICAgICBhdl9mcmVlKG1ldGFkYXRhKTsKICAgICAgICAgIHJldHVybiBlcnI7CmRpZmYgLS1n aXQgYS9saWJhdnV0aWwvaGRyX2R5bmFtaWNfbWV0YWRhdGEuYyAKYi9saWJhdnV0aWwvaGRyX2R5 bmFtaWNfbWV0YWRhdGEuYwppbmRleCAwZmExZWU4MmRlLi45OGYzOTliMDMyIDEwMDY0NAotLS0g YS9saWJhdnV0aWwvaGRyX2R5bmFtaWNfbWV0YWRhdGEuYworKysgYi9saWJhdnV0aWwvaGRyX2R5 bmFtaWNfbWV0YWRhdGEuYwpAQCAtMjAsNiArMjAsMTYgQEAKICAgI2luY2x1ZGUgImhkcl9keW5h bWljX21ldGFkYXRhLmgiCiAgI2luY2x1ZGUgIm1lbS5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMv Z2V0X2JpdHMuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3B1dF9iaXRzLmgiCisKK3N0YXRpYyBj b25zdCBpbnQ2NF90IGx1bWluYW5jZV9kZW4gPSAxOworc3RhdGljIGNvbnN0IGludDMyX3QgcGVh a19sdW1pbmFuY2VfZGVuID0gMTU7CitzdGF0aWMgY29uc3QgaW50NjRfdCByZ2JfZGVuID0gMTAw MDAwOworc3RhdGljIGNvbnN0IGludDMyX3QgZnJhY3Rpb25fcGl4ZWxfZGVuID0gMTAwMDsKK3N0 YXRpYyBjb25zdCBpbnQzMl90IGtuZWVfcG9pbnRfZGVuID0gNDA5NTsKK3N0YXRpYyBjb25zdCBp bnQzMl90IGJlemllcl9hbmNob3JfZGVuID0gMTAyMzsKK3N0YXRpYyBjb25zdCBpbnQzMl90IHNh dHVyYXRpb25fd2VpZ2h0X2RlbiA9IDg7CiAgIEFWRHluYW1pY0hEUlBsdXMgKmF2X2R5bmFtaWNf aGRyX3BsdXNfYWxsb2Moc2l6ZV90ICpzaXplKQogIHsKQEAgLTQ1LDMgKzU1LDE3MyBAQCBBVkR5 bmFtaWNIRFJQbHVzIAoqYXZfZHluYW1pY19oZHJfcGx1c19jcmVhdGVfc2lkZV9kYXRhKEFWRnJh bWUgKmZyYW1lKQogICAgICAgcmV0dXJuIChBVkR5bmFtaWNIRFJQbHVzICopc2lkZV9kYXRhLT5k YXRhOwogIH0KKworaW50IGF2X2R5bmFtaWNfaGRyX3BsdXNfZnJvbV90MzUoQVZEeW5hbWljSERS UGx1cyAqcywgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBzaXplKQoreworICAgIEdldEJpdENvbnRleHQgZ2JjLCAqZ2IgPSAmZ2JjOwor ICAgIGludCByZXQ7CisKKyAgICBpZiAoIXMpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisKKyAgICByZXQgPSBpbml0X2dldF9iaXRzOChnYiwgZGF0YSwgc2l6ZSk7CisgICAgaWYg KHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAoZ2V0X2JpdHNfbGVmdChn YikgPCAxMCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBzLT5h cHBsaWNhdGlvbl92ZXJzaW9uID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIHMtPm51bV93aW5kb3dz ID0gZ2V0X2JpdHMoZ2IsIDIpOworCisgICAgaWYgKHMtPm51bV93aW5kb3dzIDwgMSB8fCBzLT5u dW1fd2luZG93cyA+IDMpIHsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgfQorCisgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgKCgxOSAqIDggKyAxKSAqIChzLT5u dW1fd2luZG93cyAtIDEpKSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisK KyAgICBmb3IgKGludCB3ID0gMTsgdyA8IHMtPm51bV93aW5kb3dzOyB3KyspIHsKKyAgICAgICAg Ly8gVGhlIGNvcm5lcnMgYXJlIHNldCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcyBoZXJlLiBUaGV5 IHNob3VsZCBiZQorICAgICAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHJlbGF0aXZlIGNvb3JkaW5h dGVzIChpbiBbMCwgMV0pIGluIHRoZSAKZGVjb2Rlci4KKyAgICAgICAgQVZIRFJQbHVzQ29sb3JU cmFuc2Zvcm1QYXJhbXMgKnBhcmFtcyA9ICZzLT5wYXJhbXNbd107CisgICAgICAgIHBhcmFtcy0+ d2luZG93X3VwcGVyX2xlZnRfY29ybmVyX3ggPQorICAgICAgICAgICAgKEFWUmF0aW9uYWwpe2dl dF9iaXRzKGdiLCAxNiksIDF9OworICAgICAgICBwYXJhbXMtPndpbmRvd191cHBlcl9sZWZ0X2Nv cm5lcl95ID0KKyAgICAgICAgICAgIChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTYpLCAxfTsK KyAgICAgICAgcGFyYW1zLT53aW5kb3dfbG93ZXJfcmlnaHRfY29ybmVyX3ggPQorICAgICAgICAg ICAgKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxNiksIDF9OworICAgICAgICBwYXJhbXMtPndp bmRvd19sb3dlcl9yaWdodF9jb3JuZXJfeSA9CisgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0 X2JpdHMoZ2IsIDE2KSwgMX07CisKKyAgICAgICAgcGFyYW1zLT5jZW50ZXJfb2ZfZWxsaXBzZV94 ID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgcGFyYW1zLT5jZW50ZXJfb2ZfZWxsaXBzZV95 ID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgcGFyYW1zLT5yb3RhdGlvbl9hbmdsZSA9IGdl dF9iaXRzKGdiLCA4KTsKKyAgICAgICAgcGFyYW1zLT5zZW1pbWFqb3JfYXhpc19pbnRlcm5hbF9l bGxpcHNlID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgcGFyYW1zLT5zZW1pbWFqb3JfYXhp c19leHRlcm5hbF9lbGxpcHNlID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgcGFyYW1zLT5z ZW1pbWlub3JfYXhpc19leHRlcm5hbF9lbGxpcHNlID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAg ICAgcGFyYW1zLT5vdmVybGFwX3Byb2Nlc3Nfb3B0aW9uID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB9 CisKKyAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPCAyOCkKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICBzLT50YXJnZXRlZF9zeXN0ZW1fZGlzcGxheV9tYXhpbXVt X2x1bWluYW5jZSA9CisgICAgICAgIChBVlJhdGlvbmFsKXtnZXRfYml0c19sb25nKGdiLCAyNyks IGx1bWluYW5jZV9kZW59OworICAgIHMtPnRhcmdldGVkX3N5c3RlbV9kaXNwbGF5X2FjdHVhbF9w ZWFrX2x1bWluYW5jZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKworICAgIGlmIChzLT50YXJnZXRl ZF9zeXN0ZW1fZGlzcGxheV9hY3R1YWxfcGVha19sdW1pbmFuY2VfZmxhZykgeworICAgICAgICBp bnQgcm93cywgY29sczsKKyAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgMTApCisgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgcm93cyA9IGdldF9i aXRzKGdiLCA1KTsKKyAgICAgICAgY29scyA9IGdldF9iaXRzKGdiLCA1KTsKKyAgICAgICAgaWYg KCgocm93cyA8IDIpIHx8IChyb3dzID4gMjUpKSB8fCAoKGNvbHMgPCAyKSB8fCAoY29scyA+IDI1 KSkpIHsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICB9 CisgICAgICAgIHMtPm51bV9yb3dzX3RhcmdldGVkX3N5c3RlbV9kaXNwbGF5X2FjdHVhbF9wZWFr X2x1bWluYW5jZSA9IHJvd3M7CisgICAgICAgIHMtPm51bV9jb2xzX3RhcmdldGVkX3N5c3RlbV9k aXNwbGF5X2FjdHVhbF9wZWFrX2x1bWluYW5jZSA9IGNvbHM7CisKKyAgICAgICAgaWYgKGdldF9i aXRzX2xlZnQoZ2IpIDwgKHJvd3MgKiBjb2xzICogNCkpCisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkr KykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKKyAgICAg ICAgICAgICAgICBzLT50YXJnZXRlZF9zeXN0ZW1fZGlzcGxheV9hY3R1YWxfcGVha19sdW1pbmFu Y2VbaV1bal0gPQorICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2Is IDQpLCBwZWFrX2x1bWluYW5jZV9kZW59OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorICAgIGZvciAoaW50IHcgPSAwOyB3IDwgcy0+bnVtX3dpbmRvd3M7IHcrKykgeworICAgICAg ICBBVkhEUlBsdXNDb2xvclRyYW5zZm9ybVBhcmFtcyAqcGFyYW1zID0gJnMtPnBhcmFtc1t3XTsK KyAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgKDMgKiAxNyArIDE3ICsgNCkpCisgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgcGFyYW1zLT5tYXhzY2xbaV0gPQorICAg ICAgICAgICAgICAgIChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTcpLCByZ2JfZGVufTsKKyAg ICAgICAgfQorICAgICAgICBwYXJhbXMtPmF2ZXJhZ2VfbWF4cmdiID0KKyAgICAgICAgICAgIChB VlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTcpLCByZ2JfZGVufTsKKyAgICAgICAgcGFyYW1zLT5u dW1fZGlzdHJpYnV0aW9uX21heHJnYl9wZXJjZW50aWxlcyA9IGdldF9iaXRzKGdiLCA0KTsKKwor ICAgICAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPAorICAgICAgICAgICAgKHBhcmFtcy0+bnVt X2Rpc3RyaWJ1dGlvbl9tYXhyZ2JfcGVyY2VudGlsZXMgKiAyNCkpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IApw YXJhbXMtPm51bV9kaXN0cmlidXRpb25fbWF4cmdiX3BlcmNlbnRpbGVzOyBpKyspIHsKKyAgICAg ICAgICAgIHBhcmFtcy0+ZGlzdHJpYnV0aW9uX21heHJnYltpXS5wZXJjZW50YWdlID0gZ2V0X2Jp dHMoZ2IsIDcpOworICAgICAgICAgICAgcGFyYW1zLT5kaXN0cmlidXRpb25fbWF4cmdiW2ldLnBl cmNlbnRpbGUgPQorICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTcp LCByZ2JfZGVufTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8 IDEwKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAgICAg cGFyYW1zLT5mcmFjdGlvbl9icmlnaHRfcGl4ZWxzID0gKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdi LCAxMCksIApmcmFjdGlvbl9waXhlbF9kZW59OworICAgIH0KKyAgICBpZiAoZ2V0X2JpdHNfbGVm dChnYikgPCAxKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBzLT5t YXN0ZXJpbmdfZGlzcGxheV9hY3R1YWxfcGVha19sdW1pbmFuY2VfZmxhZyA9IGdldF9iaXRzMShn Yik7CisgICAgaWYgKHMtPm1hc3RlcmluZ19kaXNwbGF5X2FjdHVhbF9wZWFrX2x1bWluYW5jZV9m bGFnKSB7CisgICAgICAgIGludCByb3dzLCBjb2xzOworICAgICAgICBpZiAoZ2V0X2JpdHNfbGVm dChnYikgPCAxMCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICByb3dzID0gZ2V0X2JpdHMoZ2IsIDUpOworICAgICAgICBjb2xzID0gZ2V0X2JpdHMoZ2Is IDUpOworICAgICAgICBpZiAoKChyb3dzIDwgMikgfHwgKHJvd3MgPiAyNSkpIHx8ICgoY29scyA8 IDIpIHx8IChjb2xzID4gMjUpKSkgeworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgIH0KKyAgICAgICAgcy0+bnVtX3Jvd3NfbWFzdGVyaW5nX2Rpc3BsYXlf YWN0dWFsX3BlYWtfbHVtaW5hbmNlID0gcm93czsKKyAgICAgICAgcy0+bnVtX2NvbHNfbWFzdGVy aW5nX2Rpc3BsYXlfYWN0dWFsX3BlYWtfbHVtaW5hbmNlID0gY29sczsKKworICAgICAgICBpZiAo Z2V0X2JpdHNfbGVmdChnYikgPCAocm93cyAqIGNvbHMgKiA0KSkKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93 czsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHM7IGorKykgewor ICAgICAgICAgICAgICAgIHMtPm1hc3RlcmluZ19kaXNwbGF5X2FjdHVhbF9wZWFrX2x1bWluYW5j ZVtpXVtqXSA9CisgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwg NCksIHBlYWtfbHVtaW5hbmNlX2Rlbn07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBmb3IgKGludCB3ID0gMDsgdyA8IHMtPm51bV93aW5kb3dzOyB3KyspIHsKKyAgICAg ICAgQVZIRFJQbHVzQ29sb3JUcmFuc2Zvcm1QYXJhbXMgKnBhcmFtcyA9ICZzLT5wYXJhbXNbd107 CisgICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8IDEpCisgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBwYXJhbXMtPnRvbmVfbWFwcGluZ19mbGFn ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgaWYgKHBhcmFtcy0+dG9uZV9tYXBwaW5nX2ZsYWcp IHsKKyAgICAgICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8IDI4KQorICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgICAgICAgICBwYXJhbXMtPmtu ZWVfcG9pbnRfeCA9CisgICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAx MiksIGtuZWVfcG9pbnRfZGVufTsKKyAgICAgICAgICAgIHBhcmFtcy0+a25lZV9wb2ludF95ID0K KyAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEyKSwga25lZV9wb2lu dF9kZW59OworICAgICAgICAgICAgcGFyYW1zLT5udW1fYmV6aWVyX2N1cnZlX2FuY2hvcnMgPSBn ZXRfYml0cyhnYiwgNCk7CisKKyAgICAgICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8IChw YXJhbXMtPm51bV9iZXppZXJfY3VydmVfYW5jaG9ycyAqIAoxMCkpCisgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgcGFyYW1zLT5udW1fYmV6aWVyX2N1cnZlX2FuY2hvcnM7IGkrKykgeworICAgICAgICAg ICAgICAgIHBhcmFtcy0+YmV6aWVyX2N1cnZlX2FuY2hvcnNbaV0gPQorICAgICAgICAgICAgICAg ICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEwKSwgYmV6aWVyX2FuY2hvcl9kZW59Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2Ip IDwgMSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBw YXJhbXMtPmNvbG9yX3NhdHVyYXRpb25fbWFwcGluZ19mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAg ICAgICAgaWYgKHBhcmFtcy0+Y29sb3Jfc2F0dXJhdGlvbl9tYXBwaW5nX2ZsYWcpIHsKKyAgICAg ICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8IDYpCisgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICBwYXJhbXMtPmNvbG9yX3NhdHVyYXRp b25fd2VpZ2h0ID0KKyAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDYp LCBzYXR1cmF0aW9uX3dlaWdodF9kZW59OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu IDA7Cit9CmRpZmYgLS1naXQgYS9saWJhdnV0aWwvaGRyX2R5bmFtaWNfbWV0YWRhdGEuaCAKYi9s aWJhdnV0aWwvaGRyX2R5bmFtaWNfbWV0YWRhdGEuaAppbmRleCAyZDcyZGU1NmFlLi4xZjk1M2Vm MWY1IDEwMDY0NAotLS0gYS9saWJhdnV0aWwvaGRyX2R5bmFtaWNfbWV0YWRhdGEuaAorKysgYi9s aWJhdnV0aWwvaGRyX2R5bmFtaWNfbWV0YWRhdGEuaApAQCAtMzQwLDQgKzM0MCwxNSBAQCBBVkR5 bmFtaWNIRFJQbHVzICphdl9keW5hbWljX2hkcl9wbHVzX2FsbG9jKHNpemVfdCAKKnNpemUpOwog ICAqLwogIEFWRHluYW1pY0hEUlBsdXMgKmF2X2R5bmFtaWNfaGRyX3BsdXNfY3JlYXRlX3NpZGVf ZGF0YShBVkZyYW1lICpmcmFtZSk7CiAgKy8qKgorICogUGFyc2UgdGhlIHVzZXIgZGF0YSByZWdp c3RlcmVkIElUVS1UIFQuMzUgdG8gQVZidWZmZXIgCihBVkR5bmFtaWNIRFJQbHVzKS4KKyAqIEBw YXJhbSBzIEEgcG9pbnRlciBjb250YWluaW5nIHRoZSBkZWNvZGVkIEFWRHluYW1pY0hEUlBsdXMg c3RydWN0dXJlLgorICogQHBhcmFtIGRhdGEgVGhlIGJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUg cmF3IElUVS1UIFQuMzUgZGF0YS4KKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgdGhlIGRhdGEgYXJy YXkgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiAwIGlmIHN1Y2NlZWQuIE90aGVyd2lzZSwgcmV0 dXJucyB0aGUgYXBwcm9wcmlhdGUgQVZFUlJPUi4KKyAqLworaW50IGF2X2R5bmFtaWNfaGRyX3Bs dXNfZnJvbV90MzUoQVZEeW5hbWljSERSUGx1cyAqcywgY29uc3QgdWludDhfdCAqZGF0YSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKTsKKwogICNlbmRpZiAvKiBB VlVUSUxfSERSX0RZTkFNSUNfTUVUQURBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2hk cl9keW5hbWljX3ZpdmlkX21ldGFkYXRhLmMgCmIvbGliYXZ1dGlsL2hkcl9keW5hbWljX3Zpdmlk X21ldGFkYXRhLmMKaW5kZXggMzJkYTAxZjU4Ny4uMTIxODY0NDEyMyAxMDA2NDQKLS0tIGEvbGli YXZ1dGlsL2hkcl9keW5hbWljX3ZpdmlkX21ldGFkYXRhLmMKKysrIGIvbGliYXZ1dGlsL2hkcl9k eW5hbWljX3ZpdmlkX21ldGFkYXRhLmMKQEAgLTIwLDYgKzIwLDE3IEBACiAgICNpbmNsdWRlICJo ZHJfZHluYW1pY192aXZpZF9tZXRhZGF0YS5oIgogICNpbmNsdWRlICJtZW0uaCIKKyNpbmNsdWRl ICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCisKK3N0YXRpYyBjb25zdCBpbnQzMl90IG1heHJnYl9k ZW4gPSA0MDk1Oworc3RhdGljIGNvbnN0IGludDMyX3QgY29sb3Jfc2F0dXJhdGlvbl9nYWluX2Rl biA9IDEyODsKK3N0YXRpYyBjb25zdCBpbnQzMl90IG1heGltdW1fbHVtaW5hbmNlX2RlbiA9IDQw OTU7CitzdGF0aWMgY29uc3QgaW50MzJfdCBiYXNlX3BhcmFtX21fcF9kZW4gPSAxNjM4MzsKK3N0 YXRpYyBjb25zdCBpbnQzMl90IGJhc2VfcGFyYW1fbV9tX2RlbiA9IDEwOworc3RhdGljIGNvbnN0 IGludDMyX3QgYmFzZV9wYXJhbV9tX2FfZGVuID0gMTAyMzsKK3N0YXRpYyBjb25zdCBpbnQzMl90 IGJhc2VfcGFyYW1fbV9iX2RlbiA9IDEwMjM7CitzdGF0aWMgY29uc3QgaW50MzJfdCBiYXNlX3Bh cmFtX21fbl9kZW4gPSAxMDsKK3N0YXRpYyBjb25zdCBpbnQzMl90IGJhc2VfcGFyYW1fRGVsdGFf ZGVuID0gMTI3OwogICBBVkR5bmFtaWNIRFJWaXZpZCAqYXZfZHluYW1pY19oZHJfdml2aWRfYWxs b2Moc2l6ZV90ICpzaXplKQogIHsKQEAgLTQ1LDMgKzU2LDExMiBAQCBBVkR5bmFtaWNIRFJWaXZp ZCAKKmF2X2R5bmFtaWNfaGRyX3ZpdmlkX2NyZWF0ZV9zaWRlX2RhdGEoQVZGcmFtZSAqZnJhbWUp CiAgICAgICByZXR1cm4gKEFWRHluYW1pY0hEUlZpdmlkICopc2lkZV9kYXRhLT5kYXRhOwogIH0K KworaW50IGF2X2R5bmFtaWNfaGRyX3ZpdmlkX2Zyb21fdDM1KEFWRHluYW1pY0hEUlZpdmlkICpz LCBjb25zdCB1aW50OF90IAoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2l6ZSkKK3sKKyAgICBHZXRCaXRDb250ZXh0IGdiYywgKmdiID0gJmdiYzsKKyAgICBp bnQgcmV0OworCisgICAgaWYgKCFzKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor CisgICAgcmV0ID0gaW5pdF9nZXRfYml0czgoZ2IsIGRhdGEsIHNpemUpOworICAgIGlmIChyZXQg PCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwg OCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBzLT5zeXN0ZW1f c3RhcnRfY29kZSA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICBpZiAocy0+c3lzdGVtX3N0YXJ0X2Nv ZGUgPT0gMHgwMSkgeworICAgICAgICBzLT5udW1fd2luZG93cyA9IDE7CisKKyAgICAgICAgaWYg KGdldF9iaXRzX2xlZnQoZ2IpIDwgMTIgKiA0ICogcy0+bnVtX3dpbmRvd3MpCisgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgZm9yIChpbnQgdyA9IDA7IHcg PCBzLT5udW1fd2luZG93czsgdysrKSB7CisgICAgICAgICAgICBBVkhEUlZpdmlkQ29sb3JUcmFu c2Zvcm1QYXJhbXMgKnBhcmFtcyA9ICZzLT5wYXJhbXNbd107CisKKyAgICAgICAgICAgIHBhcmFt cy0+bWluaW11bV9tYXhyZ2IgID0gKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMiksIAptYXhy Z2JfZGVufTsKKyAgICAgICAgICAgIHBhcmFtcy0+YXZlcmFnZV9tYXhyZ2IgID0gKEFWUmF0aW9u YWwpe2dldF9iaXRzKGdiLCAxMiksIAptYXhyZ2JfZGVufTsKKyAgICAgICAgICAgIHBhcmFtcy0+ dmFyaWFuY2VfbWF4cmdiID0gKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMiksIAptYXhyZ2Jf ZGVufTsKKyAgICAgICAgICAgIHBhcmFtcy0+bWF4aW11bV9tYXhyZ2IgID0gKEFWUmF0aW9uYWwp e2dldF9iaXRzKGdiLCAxMiksIAptYXhyZ2JfZGVufTsKKyAgICAgICAgfQorCisgICAgICAgIGlm IChnZXRfYml0c19sZWZ0KGdiKSA8IDIgKiBzLT5udW1fd2luZG93cykKKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBmb3IgKGludCB3ID0gMDsgdyA8IHMt Pm51bV93aW5kb3dzOyB3KyspIHsKKyAgICAgICAgICAgIEFWSERSVml2aWRDb2xvclRyYW5zZm9y bVBhcmFtcyAqcGFyYW1zID0gJnMtPnBhcmFtc1t3XTsKKworICAgICAgICAgICAgcGFyYW1zLT50 b25lX21hcHBpbmdfbW9kZV9mbGFnID0gZ2V0X2JpdHMoZ2IsIDEpOworICAgICAgICAgICAgaWYg KHBhcmFtcy0+dG9uZV9tYXBwaW5nX21vZGVfZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChn ZXRfYml0c19sZWZ0KGdiKSA8IDEgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnRvbmVfbWFwcGluZ19wYXJh bV9udW0gPSBnZXRfYml0cyhnYiwgMSkgKyAxOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcGFyYW1zLT50b25lX21hcHBpbmdfcGFyYW1fbnVtOyBpKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgQVZIRFJWaXZpZENvbG9yVG9uZU1hcHBpbmdQYXJhbXMgKnRtX3BhcmFtcyA9 IAomcGFyYW1zLT50bV9wYXJhbXNbaV07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdldF9i aXRzX2xlZnQoZ2IpIDwgMTMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyB0bV9wYXJhbXMtPnRhcmdldGVkX3N5c3RlbV9kaXNwbGF5X21heGlt dW1fbHVtaW5hbmNlID0gCihBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgMTIpLCBtYXhpbXVtX2x1 bWluYW5jZV9kZW59OworICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMtPmJhc2VfZW5hYmxl X2ZsYWcgPSBnZXRfYml0cyhnYiwgMSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bV9wYXJh bXMtPmJhc2VfZW5hYmxlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRf Yml0c19sZWZ0KGdiKSA8ICgxNCArIDYgKyAxMCArIDEwICsgNiArIAo4ICsgMTApKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAg ICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT5iYXNlX3BhcmFtX21fcCA9IAooQVZSYXRpb25h bCl7Z2V0X2JpdHMoZ2IsIDE0KSwgYmFzZV9wYXJhbV9tX3BfZGVufTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHRtX3BhcmFtcy0+YmFzZV9wYXJhbV9tX20gPSAKKEFWUmF0aW9uYWwpe2dldF9i aXRzKGdiLCAgNiksIGJhc2VfcGFyYW1fbV9tX2Rlbn07CisgICAgICAgICAgICAgICAgICAgICAg ICB0bV9wYXJhbXMtPmJhc2VfcGFyYW1fbV9hID0gCihBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwg MTApLCBiYXNlX3BhcmFtX21fYV9kZW59OworICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFy YW1zLT5iYXNlX3BhcmFtX21fYiA9IAooQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEwKSwgYmFz ZV9wYXJhbV9tX2JfZGVufTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+YmFz ZV9wYXJhbV9tX24gPSAKKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAgNiksIGJhc2VfcGFyYW1f bV9uX2Rlbn07CisgICAgICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMtPmJhc2VfcGFyYW1f azEgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMt PmJhc2VfcGFyYW1fazIgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICAgICAgICAgICAg ICB0bV9wYXJhbXMtPmJhc2VfcGFyYW1fazMgPSBnZXRfYml0cyhnYiwgNCk7CisgICAgICAgICAg ICAgICAgICAgICAgICB0bV9wYXJhbXMtPmJhc2VfcGFyYW1fRGVsdGFfZW5hYmxlX21vZGUgPSAK Z2V0X2JpdHMoZ2IsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtX3BhcmFtcy0+ YmFzZV9wYXJhbV9EZWx0YV9lbmFibGVfbW9kZSA9PSAKMiB8fCB0bV9wYXJhbXMtPmJhc2VfcGFy YW1fRGVsdGFfZW5hYmxlX21vZGUgPT0gNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bV9wYXJhbXMtPmJhc2VfcGFyYW1fRGVsdGEgPSAKKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCA3 KSAqIC0xLCBiYXNlX3BhcmFtX0RlbHRhX2Rlbn07CisgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT5iYXNlX3BhcmFtX0Rl bHRhID0gCihBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgNyksIGJhc2VfcGFyYW1fRGVsdGFfZGVu fTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgMSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+dGhyZWVfU3BsaW5lX2VuYWJsZV9m bGFnID0gCmdldF9iaXRzKGdiLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bV9w YXJhbXMtPnRocmVlX1NwbGluZV9lbmFibGVfZmxhZykgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdiKSA8IDEgKyAKdG1fcGFyYW1zLT50aHJlZV9TcGxp bmVfbnVtICogKDIgKyAxMiArIDI4ICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtX3BhcmFtcy0+dGhyZWVfU3BsaW5lX251bSA9IGdldF9iaXRzKGdiLCAKMSkgKyAxOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgCnRtX3BhcmFt cy0+dGhyZWVfU3BsaW5lX251bTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtX3BhcmFtcy0+dGhyZWVfU3BsaW5lX1RIX21vZGUgPSAKZ2V0X2JpdHMoZ2IsIDIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1fcGFyYW1zLT50aHJlZV9TcGxp bmVfVEhfbW9kZSA9PSAKMCB8fCB0bV9wYXJhbXMtPnRocmVlX1NwbGluZV9USF9tb2RlID09IDIp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRfYml0c19sZWZ0 KGdiKSA8IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgdG1fcGFyYW1zLT50aHJlZV9TcGxpbmVfVEhfZW5hYmxl X01CID0gKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCA4KSwgCjI1NX07CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1f cGFyYW1zLT50aHJlZV9TcGxpbmVfVEhfZW5hYmxlID0gCihBVlJhdGlvbmFsKXtnZXRfYml0cyhn YiwgMTIpLCAgNDA5NX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFt cy0+dGhyZWVfU3BsaW5lX1RIX0RlbHRhMSA9IAooQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDEw KSwgIDEwMjN9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bV9wYXJhbXMtPnRo cmVlX1NwbGluZV9USF9EZWx0YTIgPSAKKEFWUmF0aW9uYWwpe2dldF9iaXRzKGdiLCAxMCksICAx MDIzfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1fcGFyYW1zLT50aHJlZV9T cGxpbmVfZW5hYmxlX1N0cmVuZ3RoIAo9IChBVlJhdGlvbmFsKXtnZXRfYml0cyhnYiwgIDgpLCAg MjU1fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtX3BhcmFtcy0+dGhy ZWVfU3BsaW5lX251bSAgICAgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtX3Bh cmFtcy0+dGhyZWVfU3BsaW5lX1RIX21vZGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIHBhcmFtcy0+Y29sb3Jfc2F0dXJhdGlvbl9tYXBwaW5nX2ZsYWcg PSBnZXRfYml0cyhnYiwgMSk7CisgICAgICAgICAgICBpZiAocGFyYW1zLT5jb2xvcl9zYXR1cmF0 aW9uX21hcHBpbmdfZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChnZXRfYml0c19sZWZ0KGdi KSA8IDMgKyAKcGFyYW1zLT5jb2xvcl9zYXR1cmF0aW9uX251bSAqIDgpCisgICAgICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgICAgICAgICAgICAgcGFy YW1zLT5jb2xvcl9zYXR1cmF0aW9uX251bSA9IGdldF9iaXRzKGdiLCAzKTsKKyAgICAgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy0+Y29sb3Jfc2F0dXJhdGlvbl9udW07IGkr KykgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPmNvbG9yX3NhdHVyYXRpb25fZ2Fpbltp XSA9IAooQVZSYXRpb25hbCl7Z2V0X2JpdHMoZ2IsIDgpLCBjb2xvcl9zYXR1cmF0aW9uX2dhaW5f ZGVufTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9oZHJfZHluYW1pY192 aXZpZF9tZXRhZGF0YS5oIApiL2xpYmF2dXRpbC9oZHJfZHluYW1pY192aXZpZF9tZXRhZGF0YS5o CmluZGV4IGEzNGY4MzA3MmMuLjE2YTg0Y2UzNDMgMTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9oZHJf ZHluYW1pY192aXZpZF9tZXRhZGF0YS5oCisrKyBiL2xpYmF2dXRpbC9oZHJfZHluYW1pY192aXZp ZF9tZXRhZGF0YS5oCkBAIC0yODIsNCArMjgyLDE1IEBAIEFWRHluYW1pY0hEUlZpdmlkIAoqYXZf ZHluYW1pY19oZHJfdml2aWRfYWxsb2Moc2l6ZV90ICpzaXplKTsKICAgKi8KICBBVkR5bmFtaWNI RFJWaXZpZCAqYXZfZHluYW1pY19oZHJfdml2aWRfY3JlYXRlX3NpZGVfZGF0YShBVkZyYW1lICpm cmFtZSk7CiAgKy8qKgorICogUGFyc2UgdGhlIHVzZXIgZGF0YSByZWdpc3RlcmVkIElUVS1UIFQu MzUgdG8gQVZidWZmZXIgCihBVkR5bmFtaWNIRFJWaXZpZCkuCisgKiBAcGFyYW0gcyBBIHBvaW50 ZXIgY29udGFpbmluZyB0aGUgZGVjb2RlZCBBVkR5bmFtaWNIRFJWaXZpZCBzdHJ1Y3R1cmUuCisg KiBAcGFyYW0gZGF0YSBUaGUgYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSByYXcgSVRVLVQgVC4z NSBkYXRhLgorICogQHBhcmFtIHNpemUgU2l6ZSBvZiB0aGUgZGF0YSBhcnJheSBpbiBieXRlcy4K KyAqCisgKiBAcmV0dXJuIDAgaWYgc3VjY2VlZC4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBhcHBy b3ByaWF0ZSBBVkVSUk9SLgorICovCitpbnQgYXZfZHluYW1pY19oZHJfdml2aWRfZnJvbV90MzUo QVZEeW5hbWljSERSVml2aWQgKnMsIGNvbnN0IHVpbnQ4X3QgCipkYXRhLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKTsKKwogICNlbmRpZiAvKiBBVlVUSUxfSERS X0RZTkFNSUNfVklWSURfTUVUQURBVEFfSCAqLwotLSAKMi4zOS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0 CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVt YWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNj cmliZSIuCg==