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 24B1640855 for ; Sat, 2 Apr 2022 20:13:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 28AB368B211; Sat, 2 Apr 2022 23:12:51 +0300 (EEST) Received: from mail-qv1-f42.google.com (mail-qv1-f42.google.com [209.85.219.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5054768B1E0 for ; Sat, 2 Apr 2022 23:12:43 +0300 (EEST) Received: by mail-qv1-f42.google.com with SMTP id k7so4578882qvc.4 for ; Sat, 02 Apr 2022 13:12:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v7X/9uu/ENKWV2sL75oL+nKDQ8KUkW7rSuYP3keiWLU=; b=F8oDCOWc/sRWhHh+g71L72dXJeY4C822hOC8LyHqno4oQJxKRluun1gGE9IwxS0b/V z3qpeBIEDW9RM8Txhai5wqjCyRgHGxi0joZk1j+19SidzJT0PWt4FWgViVzFeJOjtXCg pTkKyWp/1stn9mQpgLpIGPPLEJOfVCBE5K9aYETBIPWNvXJuFEkjrN0xOE/YXHb4S+Wz XBrrNqX6BZpnC0n6hMiWXIGIcF+pZ0OnfneqjmxpR4cZOrgm05512iuwXy+f9zICCAhi 59Y1OllOH/f2nNm79ba2uuVNuIGTBwu+sSr77l9pbONJhhCmSTmVf5YID1uG3tt+BAML /5Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v7X/9uu/ENKWV2sL75oL+nKDQ8KUkW7rSuYP3keiWLU=; b=HGEDUT1r/nMU0gfe/mvEAcAHEH3A1obG0WV5mOL9XlBPlZfygv5amutoMTd+k0yQSw Djn0t2BfxW5++NlJx+yQ0bwNmO3dgLsB47/cOnCn0C6wSQJWG5eOEfBHygUeXN1L9UI5 Pt1RMX4QboxzOQGRq6RH5y05oPzC8Lg5beXV2qLpv8vRSsuDehsrSUF320OV6HXDDWcf L/kxoPMzRdnlqGzidpuSABzmf3yES99CbN1nGKzNGfhS6WOsStjvORq4AP3h1FiQxnPP bw4uFZ3+6+JyDpIzkORZh63OyvQEhtITXK8deLNJcvBXuJ+dvWxQBqXotuhacB5g5M3v yOQA== X-Gm-Message-State: AOAM5311NDpyfTlo7jQZOIy96lCX/BUJNC1jmLI8LuOeSSw91Q6MC3kH M3ePhXfE8g9V0MNiIFr8eJ1LH4KEhJY= X-Google-Smtp-Source: ABdhPJwCTn+4F0/DxOQHAMzWuhHlDPFcBTTb7OBbrfA6YaYnzlu3dBlVw92hew5wKuOKpZBNqga+6A== X-Received: by 2002:a05:6214:1c49:b0:441:2efc:e097 with SMTP id if9-20020a0562141c4900b004412efce097mr12368105qvb.43.1648930362017; Sat, 02 Apr 2022 13:12:42 -0700 (PDT) Received: from gauss.local (c-68-41-54-207.hsd1.mi.comcast.net. [68.41.54.207]) by smtp.gmail.com with ESMTPSA id h14-20020a05622a170e00b002e1a65754d8sm4743937qtk.91.2022.04.02.13.12.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 13:12:41 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Sat, 2 Apr 2022 16:12:08 -0400 Message-Id: <20220402201210.86308-3-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220402201210.86308-1-leo.izen@gmail.com> References: <20220402201210.86308-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 2/4] avcodec/libjxl: add Jpeg XL decoding via libjxl 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: Leo Izen 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: VGhpcyBjb21taXQgYWRkcyBkZWNvZGluZyBzdXBwb3J0IHRvIGxpYmF2Y29kZWMKZm9yIEpwZWcg WEwgaW1hZ2VzIHZpYSB0aGUgZXh0ZXJuYWwgbGlicmFyeSBsaWJqeGwuCi0tLQogTUFJTlRBSU5F UlMgICAgICAgICAgICAgICB8ICAgMSArCiBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICA1 ICsKIGRvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgfCAgIDcgKwogbGliYXZjb2RlYy9NYWtlZmls ZSAgICAgICB8ICAgMSArCiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jICAgIHwgICAxICsKIGxpYmF2 Y29kZWMvbGlianhsLmMgICAgICAgfCAgNzAgKysrKysrKysrCiBsaWJhdmNvZGVjL2xpYmp4bC5o ICAgICAgIHwgIDQ4ICsrKysrKwogbGliYXZjb2RlYy9saWJqeGxkZWMuYyAgICB8IDMwMSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MzQg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYmp4bC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy9saWJqeGxkZWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRB SU5FUlMKaW5kZXggNDkwZDY2NDNkMS4uM2RlMjFkOGFmZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5F UlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE5NCw2ICsxOTQsNyBAQCBDb2RlY3M6CiAgIGxpYmNv ZGVjMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9tYXMgSMOkcmRpbgogICBsaWJkaXJh YyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdmlkIENvbnJhZAogICBsaWJkYXZzMi5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh1aXdlbiBSZW4KKyAgbGlianhsKi5jLCBsaWJq eGwuaCAgICAgICAgICAgICAgICAgICBMZW8gSXplbgogICBsaWJnc20uYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1pY2hlbCBCYXJkaWF1eAogICBsaWJrdmF6YWFyLmMgICAgICAgICAg ICAgICAgICAgICAgICAgIEFydHR1IFlsw6QtT3V0aW5lbgogICBsaWJvcGVuaDI2NGVuYy5jICAg ICAgICAgICAgICAgICAgICAgIE1hcnRpbiBTdG9yc2pvLCBMaW5qaWUgRnUKZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlNGQzNmFhNjM5Li45NjliMTNlYmEzIDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yNDAsNiArMjQwLDcgQEAgRXh0 ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1saWJpZWM2MTg4MyAgICAgZW5hYmxl IGllYzYxODgzIHZpYSBsaWJpZWM2MTg4MyBbbm9dCiAgIC0tZW5hYmxlLWxpYmlsYmMgICAgICAg ICBlbmFibGUgaUxCQyBkZS9lbmNvZGluZyB2aWEgbGliaWxiYyBbbm9dCiAgIC0tZW5hYmxlLWxp YmphY2sgICAgICAgICBlbmFibGUgSkFDSyBhdWRpbyBzb3VuZCBzZXJ2ZXIgW25vXQorICAtLWVu YWJsZS1saWJqeGwgICAgICAgICAgZW5hYmxlIEpQRUcgWEwgZGVjb2RpbmcgdmlhIGxpYmp4bCBb bm9dCiAgIC0tZW5hYmxlLWxpYmtsdmFuYyAgICAgICBlbmFibGUgS2VybmVsIExhYnMgVkFOQyBw cm9jZXNzaW5nIFtub10KICAgLS1lbmFibGUtbGlia3ZhemFhciAgICAgIGVuYWJsZSBIRVZDIGVu Y29kaW5nIHZpYSBsaWJrdmF6YWFyIFtub10KICAgLS1lbmFibGUtbGlibGVuc2Z1biAgICAgIGVu YWJsZSBsZW5zZnVuIGxlbnMgY29ycmVjdGlvbiBbbm9dCkBAIC0xODMzLDYgKzE4MzQsNyBAQCBF WFRFUk5BTF9MSUJSQVJZX0xJU1Q9IgogICAgIGxpYmllYzYxODgzCiAgICAgbGliaWxiYwogICAg IGxpYmphY2sKKyAgICBsaWJqeGwKICAgICBsaWJrbHZhbmMKICAgICBsaWJrdmF6YWFyCiAgICAg bGlibW9kcGx1ZwpAQCAtMzMyOSw2ICszMzMxLDcgQEAgbGliZ3NtX21zX2RlY29kZXJfZGVwcz0i bGliZ3NtIgogbGliZ3NtX21zX2VuY29kZXJfZGVwcz0ibGliZ3NtIgogbGliaWxiY19kZWNvZGVy X2RlcHM9ImxpYmlsYmMiCiBsaWJpbGJjX2VuY29kZXJfZGVwcz0ibGliaWxiYyIKK2xpYmp4bF9k ZWNvZGVyX2RlcHM9ImxpYmp4bCBsaWJqeGxfdGhyZWFkcyIKIGxpYmt2YXphYXJfZW5jb2Rlcl9k ZXBzPSJsaWJrdmF6YWFyIgogbGlibW9kcGx1Z19kZW11eGVyX2RlcHM9ImxpYm1vZHBsdWciCiBs aWJtcDNsYW1lX2VuY29kZXJfZGVwcz0ibGlibXAzbGFtZSIKQEAgLTY1NDEsNiArNjU0NCw4IEBA IGVuYWJsZWQgbGliZ3NtICAgICAgICAgICAgJiYgeyBmb3IgZ3NtX2hkciBpbiAiZ3NtLmgiICJn c20vZ3NtLmgiOyBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19s aWIgbGliZ3NtICIke2dzbV9oZHJ9IiBnc21fY3JlYXRlIC1sZ3NtICYmIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgfHwgZGllICJFUlJPUjogbGliZ3NtIG5vdCBm b3VuZCI7IH0KIGVuYWJsZWQgbGliaWxiYyAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJpbGJjIGls YmMuaCBXZWJSdGNJbGJjZml4X0luaXREZWNvZGUgLWxpbGJjICRwdGhyZWFkc19leHRyYWxpYnMK K2VuYWJsZWQgbGlianhsICAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmp4bCAi bGlianhsID49IDAuNy4wIiBqeGwvZGVjb2RlLmggSnhsRGVjb2RlclZlcnNpb24gJiYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmp4bF90aHJlYWRz ICJsaWJqeGxfdGhyZWFkcyA+PSAwLjcuMCIganhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIuaCBK eGxUaHJlYWRQYXJhbGxlbFJ1bm5lcgogZW5hYmxlZCBsaWJrbHZhbmMgICAgICAgICAmJiByZXF1 aXJlIGxpYmtsdmFuYyBsaWJrbHZhbmMvdmFuYy5oIGtsdmFuY19jb250ZXh0X2NyZWF0ZSAtbGts dmFuYwogZW5hYmxlZCBsaWJrdmF6YWFyICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGli a3ZhemFhciAia3ZhemFhciA+PSAwLjguMSIga3ZhemFhci5oIGt2el9hcGlfZ2V0CiBlbmFibGVk IGxpYmxlbnNmdW4gICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJsZW5zZnVuIGxlbnNm dW4gbGVuc2Z1bi5oIGxmX2RiX25ldwpkaWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxfY29udGVudHMu dGV4aSBiL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkKaW5kZXggZmNkOWRhMWIzNC4uYTg5MzM0 N2ZiZSAxMDA2NDQKLS0tIGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQorKysgYi9kb2MvZ2Vu ZXJhbF9jb250ZW50cy50ZXhpCkBAIC0xNzEsNiArMTcxLDEzIEBAIEdvIHRvIEB1cmx7aHR0cHM6 Ly9naXRodWIuY29tL1RpbW90aHlHdS9saWJpbGJjfSBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlv bnMgZm9yCiBpbnN0YWxsaW5nIHRoZSBsaWJyYXJ5LiBUaGVuIHBhc3MgQGNvZGV7LS1lbmFibGUt bGliaWxiY30gdG8gY29uZmlndXJlIHRvCiBlbmFibGUgaXQuCiAKK0BzZWN0aW9uIGxpYmp4bAor CitKUEVHIFhMIGlzIGFuIGltYWdlIGZvcm1hdCBpbnRlbmRlZCB0byBmdWxseSByZXBsYWNlIGxl Z2FjeSBKUEVHIGZvciBhbiBleHRlbmRlZAorcGVyaW9kIG9mIGxpZmUuIFNlZSBAdXJse2h0dHBz Oi8vanBlZ3hsLmluZm8vfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgYW5kIHNlZQorQHVybHtodHRw czovL2dpdGh1Yi5jb20vbGlianhsL2xpYmp4bH0gZm9yIHRoZSBsaWJyYXJ5IHNvdXJjZS4gWW91 IGNhbiBwYXNzCitAY29kZXstLWVuYWJsZS1saWJqeGx9IHRvIGNvbmZpZ3VyZSBpbiBvcmRlciBl bmFibGUgdGhlIGxpYmp4bCB3cmFwcGVyLgorCiBAc2VjdGlvbiBsaWJ2cHgKIAogRkZtcGVnIGNh biBtYWtlIHVzZSBvZiB0aGUgbGlidnB4IGxpYnJhcnkgZm9yIFZQOC9WUDkgZGVjb2RpbmcgYW5k IGVuY29kaW5nLgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMv TWFrZWZpbGUKaW5kZXggZmI4YjBlODI0Yi4uYzZkMGFlNDEwNyAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCkBAIC0xMDU5LDYgKzEwNTks NyBAQCBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19ERUNPREVSKSAgICAgICAgICArPSBsaWJnc21k ZWMubwogT0JKUy0kKENPTkZJR19MSUJHU01fTVNfRU5DT0RFUikgICAgICAgICAgKz0gbGliZ3Nt ZW5jLm8KIE9CSlMtJChDT05GSUdfTElCSUxCQ19ERUNPREVSKSAgICAgICAgICAgICs9IGxpYmls YmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGliaWxi Yy5vCitPQkpTLSQoQ09ORklHX0xJQkpYTF9ERUNPREVSKSAgICAgICAgICAgICArPSBsaWJqeGxk ZWMubyBsaWJqeGwubwogT0JKUy0kKENPTkZJR19MSUJLVkFaQUFSX0VOQ09ERVIpICAgICAgICAg Kz0gbGlia3ZhemFhci5vCiBPQkpTLSQoQ09ORklHX0xJQk1QM0xBTUVfRU5DT0RFUikgICAgICAg ICArPSBsaWJtcDNsYW1lLm8KIE9CSlMtJChDT05GSUdfTElCT1BFTkNPUkVfQU1STkJfREVDT0RF UikgICs9IGxpYm9wZW5jb3JlLWFtci5vCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVj cy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwppbmRleCAyMmQ1Njc2MGVjLi5hOWNkNjlkZmNl IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCisrKyBiL2xpYmF2Y29kZWMvYWxs Y29kZWNzLmMKQEAgLTc0OSw2ICs3NDksNyBAQCBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJn c21fbXNfZW5jb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYmdzbV9tc19kZWNvZGVy OwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliaWxiY19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfbGliaWxiY19kZWNvZGVyOworZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGli anhsX2RlY29kZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJtcDNsYW1lX2VuY29kZXI7 CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9lbmNvZGVyOwogZXh0 ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmNvcmVfYW1ybmJfZGVjb2RlcjsKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvbGlianhsLmMgYi9saWJhdmNvZGVjL2xpYmp4bC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIwNGQ5MWQ4YTgKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJhdmNvZGVjL2xpYmp4bC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBKUEVHIFhMIGRl L2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVudGF0aW9uCisgKiBD b3B5cmlnaHQgKGMpIDIwMjEgTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBY TCB2aWEgbGlianhsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVudGF0aW9uCisgKi8KKworI2luY2x1 ZGUgImxpYmF2dXRpbC9jcHUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisKKyNpbmNs dWRlIDxqeGwvbWVtb3J5X21hbmFnZXIuaD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKworc2l6ZV90 IGZmX2xpYmp4bF9nZXRfdGhyZWFkY291bnQoaW50IHRocmVhZHMpCit7CisgICAgaWYgKHRocmVh ZHMgPD0gMCkKKyAgICAgICAgcmV0dXJuIGF2X2NwdV9jb3VudCgpOworICAgIGlmICh0aHJlYWRz ID09IDEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0aHJlYWRzOworfQorCisvKioK KyAqIFdyYXBwZXIgYXJvdW5kIGF2X21hbGxvYyB1c2VkIGFzIGEganBlZ3hsX2FsbG9jX2Z1bmMu CisgKgorICogQHBhcmFtICBvcGFxdWUgb3BhcXVlIHBvaW50ZXIgZm9yIGpwZWd4bF9hbGxvY19m dW5jLCBhbHdheXMgaWdub3JlZAorICogQHBhcmFtICBzaXplIFNpemUgaW4gYnl0ZXMgZm9yIHRo ZSBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhl IGFsbG9jYXRlZCBibG9jaywgb3IgYE5VTExgIGlmIGl0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAq Lworc3RhdGljIHZvaWQgKmxpYmp4bF9hdl9tYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgICByZXR1cm4gYXZfbWFsbG9jKHNpemUpOworfQorCisvKioKKyAqIFdyYXBwZXIg YXJvdW5kIGF2X2ZyZWUgdXNlZCBhcyBhIGpwZWd4bF9mcmVlX2Z1bmMuCisgKgorICogQHBhcmFt IG9wYXF1ZSAgb3BhcXVlIHBvaW50ZXIgZm9yIGpwZWd4bF9mcmVlX2Z1bmMsIGFsd2F5cyBpZ25v cmVkCisgKiBAcGFyYW0gYWRkcmVzcyBQb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYmxvY2ssIHRv IGZyZWUuIGBOVUxMYCBwZXJtaXR0ZWQgYXMgYSBuby1vcC4KKyAqLworc3RhdGljIHZvaWQgbGli anhsX2F2X2ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICphZGRyZXNzKQoreworICAgIGF2X2ZyZWUo YWRkcmVzcyk7Cit9CisKK3ZvaWQgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoSnhsTWVt b3J5TWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBtYW5hZ2VyLT5vcGFxdWUgPSBOVUxMOworICAg IG1hbmFnZXItPmFsbG9jID0gJmxpYmp4bF9hdl9tYWxsb2M7CisgICAgbWFuYWdlci0+ZnJlZSA9 ICZsaWJqeGxfYXZfZnJlZTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlianhsLmggYi9s aWJhdmNvZGVjL2xpYmp4bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjUzODdjNDM4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2xpYmp4bC5oCkBAIC0w LDAgKzEsNDggQEAKKy8qCisgKiBKUEVHIFhMIGRlL2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1v biBzdXBwb3J0IGhlYWRlcgorICogQ29weXJpZ2h0IChjKSAyMDIxIExlbyBJemVuIDxsZW8uaXpl bkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8q KgorICogQGZpbGUKKyAqIEpQRUcgWEwgdmlhIGxpYmp4bCBjb21tb24gc3VwcG9ydCBoZWFkZXIK KyAqLworCisjaWZuZGVmIEFWQ09ERUNfTElCSlhMX0gKKyNkZWZpbmUgQVZDT0RFQ19MSUJKWExf SAorCisjaW5jbHVkZSA8anhsL21lbW9yeV9tYW5hZ2VyLmg+CisKKy8qKgorICogVHJhbnNmb3Jt IHRocmVhZGNvdW50IGluIGZmbXBlZyB0byBvbmUgdXNlZCBieSBsaWJqeGwuCisgKgorICogQHBh cmFtICB0aHJlYWRzIGZmbXBlZydzIHRocmVhZHMgQVZPcHRpb24KKyAqIEByZXR1cm4gICAgICAg ICB0aHJlYWQgY291bnQgZm9yIGxpYmp4bCdzIHBhcmFsbGVsIHJ1bm5lcgorICovCitzaXplX3Qg ZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcyk7CisKKy8qKgorICogSW5pdGlh bGl6ZSBhbmQgcG9wdWxhdGUgYSBKeGxNZW1vcnlNYW5hZ2VyCisgKiB3aXRoIGF2X21hbGxvYygp IGFuZCBhdl9mcmVlKCkgc28gbGlianhsIHdpbGwgdXNlIHRoZXNlCisgKiBmdW5jdGlvbnMuCisg KiBAcGFyYW0gbWFuYWdlciBhIHBvaW50ZXIgdG8gYSBKeGxNZW1vcnlNYW5hZ2VyIHN0cnVjdAor ICovCit2b2lkIGZmX2xpYmp4bF9pbml0X21lbW9yeV9tYW5hZ2VyKEp4bE1lbW9yeU1hbmFnZXIg Km1hbmFnZXIpOworCisjZW5kaWYgLyogQVZDT0RFQ19MSUJKWExfSCAqLwpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9saWJqeGxkZWMuYyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTQzMmY0MmQzOAotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBKUEVH IFhMIGRlY29kaW5nIHN1cHBvcnQgdmlhIGxpYmp4bAorICogQ29weXJpZ2h0IChjKSAyMDIxIExl byBJemVuIDxsZW8uaXplbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEpQRUcgWEwgZGVjb2RlciB1c2luZyBsaWJq eGwKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGli YXZ1dGlsL2J1ZmZlci5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9jb21tb24uaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvZXJyb3IuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJhdmNvZGVjLmgiCisjaW5j bHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVk ZSA8anhsL2RlY29kZS5oPgorI2luY2x1ZGUgPGp4bC90aHJlYWRfcGFyYWxsZWxfcnVubmVyLmg+ CisjaW5jbHVkZSAibGlianhsLmgiCisKK3R5cGVkZWYgc3RydWN0IExpYkp4bERlY29kZUNvbnRl eHQgeworICAgIHZvaWQgKnJ1bm5lcjsKKyAgICBKeGxEZWNvZGVyICpkZWNvZGVyOworICAgIEp4 bEJhc2ljSW5mbyBiYXNpY19pbmZvOworICAgIEp4bFBpeGVsRm9ybWF0IGp4bF9waXhmbXQ7Cisg ICAgSnhsRGVjb2RlclN0YXR1cyBldmVudHM7CisgICAgQVZCdWZmZXJSZWYgKmljY3A7CisgICAg c2l6ZV90IGljY3BfbGVuOworfSBMaWJKeGxEZWNvZGVDb250ZXh0OworCitzdGF0aWMgaW50IGxp Ymp4bF9pbml0X2p4bF9kZWNvZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBMaWJK eGxEZWNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgY3R4LT5ldmVu dHMgPSBKWExfREVDX0JBU0lDX0lORk8gfCBKWExfREVDX0ZVTExfSU1BR0UgfCBKWExfREVDX0ZS QU1FIHwgSlhMX0RFQ19DT0xPUl9FTkNPRElORzsKKyAgICBpZiAoSnhsRGVjb2RlclN1YnNjcmli ZUV2ZW50cyhjdHgtPmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsK KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBzdWJzY3JpYmluZyB0 byBKWEwgZXZlbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAg fQorCisgICAgaWYgKEp4bERlY29kZXJTZXRQYXJhbGxlbFJ1bm5lcihjdHgtPmRlY29kZXIsIEp4 bFRocmVhZFBhcmFsbGVsUnVubmVyLCBjdHgtPnJ1bm5lcikgIT0gSlhMX0RFQ19TVUNDRVNTKSB7 CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHNldCBKeGxU aHJlYWRQYXJhbGxlbFJ1bm5lclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgIH0KKworICAgIG1lbXNldCgmY3R4LT5iYXNpY19pbmZvLCAwLCBzaXplb2YoSnhsQmFz aWNJbmZvKSk7CisgICAgbWVtc2V0KCZjdHgtPmp4bF9waXhmbXQsIDAsIHNpemVvZihKeGxQaXhl bEZvcm1hdCkpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgbGlianhs X2RlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBMaWJKeGxEZWNvZGVD b250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIEp4bE1lbW9yeU1hbmFnZXIgbWFu YWdlcjsKKworICAgIGZmX2xpYmp4bF9pbml0X21lbW9yeV9tYW5hZ2VyKCZtYW5hZ2VyKTsKKyAg ICBjdHgtPmRlY29kZXIgPSBKeGxEZWNvZGVyQ3JlYXRlKCZtYW5hZ2VyKTsKKyAgICBpZiAoIWN0 eC0+ZGVjb2RlcikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBjcmVhdGUgSnhsRGVjb2RlclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgIH0KKworICAgIGN0eC0+cnVubmVyID0gSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJD cmVhdGUoJm1hbmFnZXIsIGZmX2xpYmp4bF9nZXRfdGhyZWFkY291bnQoYXZjdHgtPnRocmVhZF9j b3VudCkpOworICAgIGlmICghY3R4LT5ydW5uZXIpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyXG4i KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcmV0dXJu IGxpYmp4bF9pbml0X2p4bF9kZWNvZGVyKGF2Y3R4KTsKK30KKworc3RhdGljIGVudW0gQVZQaXhl bEZvcm1hdCBsaWJqeGxfZ2V0X3BpeF9mbXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBKeGxCYXNp Y0luZm8gKmJhc2ljX2luZm8sIEp4bFBpeGVsRm9ybWF0ICpmb3JtYXQpCit7CisgICAgZm9ybWF0 LT5lbmRpYW5uZXNzID0gSlhMX05BVElWRV9FTkRJQU47CisgICAgZm9ybWF0LT5udW1fY2hhbm5l bHMgPSBiYXNpY19pbmZvLT5udW1fY29sb3JfY2hhbm5lbHMgKyAoYmFzaWNfaW5mby0+YWxwaGFf Yml0cyA+IDApOworICAgIC8qIGF2X21hbGxvYyBoYW5kbGVzIGFsaWdubWVudCBhbHJlYWR5ICov CisgICAgZm9ybWF0LT5hbGlnbiA9IDE7CisgICAgLyogR3JheSAqLworICAgIGlmIChiYXNpY19p bmZvLT5udW1fY29sb3JfY2hhbm5lbHMgPT0gMSkgeworICAgICAgICBpZiAoYmFzaWNfaW5mby0+ Yml0c19wZXJfc2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0g SlhMX1RZUEVfVUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0 cyA/IEFWX1BJWF9GTVRfWUE4IDogQVZfUElYX0ZNVF9HUkFZODsKKyAgICAgICAgfQorICAgICAg ICBpZiAoYmFzaWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlIHx8IGJhc2ljX2luZm8t PmJpdHNfcGVyX3NhbXBsZSA+IDE2KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNfaW5mby0+YWxw aGFfYml0cykKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9OT05FOworICAgICAg ICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9GTE9BVDsKKyAgICAgICAgICAgIHJl dHVybiBBVl9QSVhfRk1UX0dSQVlGMzI7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0LT5kYXRh X3R5cGUgPSBKWExfVFlQRV9VSU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBo YV9iaXRzID8gQVZfUElYX0ZNVF9ZQTE2IDogQVZfUElYX0ZNVF9HUkFZMTY7CisgICAgfQorICAg IC8qIHJnYiBvbmx5ICovCisgICAgLyogbGlianhsIG9ubHkgc3VwcG9ydHMgcGFja2VkIFJHQiBh bmQgZ3JheSBvdXRwdXQgYXQgdGhlIG1vbWVudCAqLworICAgIGlmIChiYXNpY19pbmZvLT5udW1f Y29sb3JfY2hhbm5lbHMgPT0gMykgeworICAgICAgICBpZiAoYmFzaWNfaW5mby0+Yml0c19wZXJf c2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZUEVf VUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0cyA/IEFWX1BJ WF9GTVRfUkdCQSA6IEFWX1BJWF9GTVRfUkdCMjQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJh c2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+IDE2KQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBsYXJnZXIgaW50ZWdlciB0byAxNi1iaXQg dmlhIGxpYmp4bFxuIik7CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5leHBvbmVudF9iaXRzX3Bl cl9zYW1wbGUpCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiRG93 bnNhbXBsaW5nIGZsb2F0IHRvIDE2LWJpdCBpbnRlZ2VyIHZpYSBsaWJqeGxcbiIpOworICAgICAg ICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQxNjsKKyAgICAgICAgcmV0dXJuIGJh c2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkE2NCA6IEFWX1BJWF9GTVRfUkdC NDg7CisgICAgfQorICAgIHJldHVybiBBVl9QSVhfRk1UX05PTkU7Cit9CisKK3N0YXRpYyB2b2lk IGxpYmp4bF9yb3dfZmlsbCh2b2lkICphdmZyYW1lLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVf dCBudW1fcGl4ZWxzLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgQVZGcmFtZSAqZnJhbWUg PSBhdmZyYW1lOworICAgIGludCBieXRlcyA9IGF2X2dldF9wYWRkZWRfYml0c19wZXJfcGl4ZWwo YXZfcGl4X2ZtdF9kZXNjX2dldChmcmFtZS0+Zm9ybWF0KSkgLyA4OworICAgIHNpemVfdCBvZmZz ZXQgPSB5ICogZnJhbWUtPmxpbmVzaXplWzBdICsgeCAqIGJ5dGVzOworICAgIG1lbWNweShmcmFt ZS0+ZGF0YVswXSArIG9mZnNldCwgcGl4ZWxzLCBudW1fcGl4ZWxzICogYnl0ZXMpOworfQorCitz dGF0aWMgaW50IGxpYmp4bF9kZWNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lk ICphdmZyYW1lLCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQgKmF2cGt0KQoreworICAgIExpYkp4 bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgdWludDhfdCAqYnVm ID0gYXZwa3QtPmRhdGE7CisgICAgc2l6ZV90IHJlbWFpbmluZyA9IGF2cGt0LT5zaXplOworICAg IEFWRnJhbWUgKmZyYW1lID0gYXZmcmFtZTsKKyAgICBKeGxEZWNvZGVyU3RhdHVzIGpyZXQ7Cisg ICAgaW50IHJldDsKKyAgICAqZ290X2ZyYW1lID0gMDsKKworICAgIHdoaWxlICgxKSB7CisKKyAg ICAgICAganJldCA9IEp4bERlY29kZXJTZXRJbnB1dChjdHgtPmRlY29kZXIsIGJ1ZiwgcmVtYWlu aW5nKTsKKworICAgICAgICBpZiAoanJldCA9PSBKWExfREVDX0VSUk9SKSB7CisgICAgICAgICAg ICAvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaGVyZSB1bmxlc3MgdGhlcmUncyBhIGJ1ZyBp biBsaWJqeGwgKi8KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5r bm93biBsaWJqeGwgZGVjb2RlIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0VYVEVSTkFMOworICAgICAgICB9CisKKyAgICAgICAganJldCA9IEp4bERlY29kZXJQcm9jZXNz SW5wdXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogSnhsRGVjb2RlclJl bGVhc2VJbnB1dCByZXR1cm5zIHRoZSBudW1iZXIKKyAgICAgICAgICogb2YgYnl0ZXMgcmVtYWlu aW5nIHRvIGJlIHJlYWQsIHJhdGhlciB0aGFuCisgICAgICAgICAqIHRoZSBudW1iZXIgb2YgYnl0 ZXMgdGhhdCBpdCBkaWQgcmVhZAorICAgICAgICAgKi8KKyAgICAgICAgcmVtYWluaW5nID0gSnhs RGVjb2RlclJlbGVhc2VJbnB1dChjdHgtPmRlY29kZXIpOworICAgICAgICBidWYgPSBhdnBrdC0+ ZGF0YSArIGF2cGt0LT5zaXplIC0gcmVtYWluaW5nOworCisgICAgICAgIHN3aXRjaChqcmV0KSB7 CisgICAgICAgIGNhc2UgSlhMX0RFQ19FUlJPUjoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVW5rbm93biBsaWJqeGwgZGVjb2RlIGVycm9yXG4iKTsKKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICBjYXNlIEpYTF9ERUNfTkVFRF9N T1JFX0lOUFVUOgorICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CisgICAgICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIlVuZXhwZWN0ZWQgZW5kIG9mIEpY TCBjb2Rlc3RyZWFtXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4p OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcs ICJORUVEX01PUkVfSU5QVVQgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgY2FzZSBKWExfREVDX0JBU0lDX0lORk86CisgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19ERUJVRywgIkJBU0lDX0lORk8gZXZlbnQgZW1pdHRlZFxuIik7CisgICAg ICAgICAgICBpZiAoSnhsRGVjb2RlckdldEJhc2ljSW5mbyhjdHgtPmRlY29kZXIsICZjdHgtPmJh c2ljX2luZm8pICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8qCisgICAg ICAgICAgICAgICAgICogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgICAgICAgICAg ICogaWYgaXQgZG9lcyBpdCBpcyBsaWtlbHkgYSBsaWJqeGwgZGVjb2RlciBidWcKKyAgICAgICAg ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkJhZCBsaWJqeGwgYmFzaWMgaW5mbyBldmVudFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdmN0eC0+cGl4 X2ZtdCA9IGxpYmp4bF9nZXRfcGl4X2ZtdChhdmN0eCwgJmN0eC0+YmFzaWNfaW5mbywgJmN0eC0+ anhsX3BpeGZtdCk7CisgICAgICAgICAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZN VF9OT05FKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJC YWQgbGlianhsIHBpeGVsIGZvcm1hdFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBmZl9zZXRfZGlt ZW5zaW9ucyhhdmN0eCwgY3R4LT5iYXNpY19pbmZvLnhzaXplLCBjdHgtPmJhc2ljX2luZm8ueXNp emUpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXZSByZXdpbmQgdGhlIGRlY29kZXIg YW5kIGFzayBmb3IgZXZlcnl0aGluZyBhZ2FpbgorICAgICAgICAgICAgICogVGhpcyBmdXR1cmVw cm9vZnMgdGhlIGRlY29kZXIgc2luY2UgaXQgd2lsbCBtYWtlCisgICAgICAgICAgICAgKiBhZGRp bmcgYSBwYXJzZXIgb3IgYSBkZWRpY2F0ZWQgZGVtdXhlciBtdWNoIGVhc2llcgorICAgICAgICAg ICAgICovCisgICAgICAgICAgICBidWYgPSBhdnBrdC0+ZGF0YTsKKyAgICAgICAgICAgIHJlbWFp bmluZyA9IGF2cGt0LT5zaXplOworICAgICAgICAgICAgSnhsRGVjb2RlclJld2luZChjdHgtPmRl Y29kZXIpOworICAgICAgICAgICAgY3R4LT5ldmVudHMgJj0gfkpYTF9ERUNfQkFTSUNfSU5GTzsK KyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyU3Vic2NyaWJlRXZlbnRzKGN0eC0+ZGVjb2Rlciwg Y3R4LT5ldmVudHMpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3Igc3Vic2NyaWJpbmcgdG8gSlhMIGV2ZW50cyBh ZnRlciByZXdpbmRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgSlhM X0RFQ19DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiQ09MT1JfRU5DT0RJTkcgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICBqcmV0 ID0gSnhsRGVjb2RlckdldElDQ1Byb2ZpbGVTaXplKGN0eC0+ZGVjb2RlciwgJmN0eC0+anhsX3Bp eGZtdCwgSlhMX0NPTE9SX1BST0ZJTEVfVEFSR0VUX09SSUdJTkFMLCAmY3R4LT5pY2NwX2xlbik7 CisgICAgICAgICAgICBpZiAoanJldCA9PSBKWExfREVDX1NVQ0NFU1MgJiYgY3R4LT5pY2NwX2xl biA+IDApIHsKKyAgICAgICAgICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aWNjcCk7Cisg ICAgICAgICAgICAgICAgYXZfYXNzZXJ0MighY3R4LT5pY2NwKTsKKyAgICAgICAgICAgICAgICBj dHgtPmljY3AgPSBhdl9idWZmZXJfYWxsb2MoY3R4LT5pY2NwX2xlbik7CisgICAgICAgICAgICAg ICAgaWYgKCFjdHgtPmljY3ApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgICAgICAgICAganJldCA9IEp4bERlY29kZXJHZXRDb2xvckFzSUNDUHJv ZmlsZShjdHgtPmRlY29kZXIsICZjdHgtPmp4bF9waXhmbXQsIEpYTF9DT0xPUl9QUk9GSUxFX1RB UkdFVF9PUklHSU5BTCwgY3R4LT5pY2NwLT5kYXRhLCBjdHgtPmljY3BfbGVuKTsKKyAgICAgICAg ICAgICAgICBpZiAoanJldCAhPSBKWExfREVDX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAg IGF2X2ZyZWVwKCZjdHgtPmljY3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19GUkFNRToKKyAgICAgICAgY2FzZSBKWExfREVDX05F RURfSU1BR0VfT1VUX0JVRkZFUjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXZSBk b24ndCBkbyB0aGlzIGF0IGJhc2ljIGluZm8gdGltZQorICAgICAgICAgICAgICogYmVjYXVzZSBp dCB3aWxsIGhhcHBlbiBhZ2FpbiB3aGVuIHdlCisgICAgICAgICAgICAgKiByZXdpbmQgYW55d2F5 CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVH LCAiJXMgZXZlbnQgZW1pdHRlZFxuIiwganJldCA9PSBKWExfREVDX0ZSQU1FID8gIkZSQU1FIiA6 ICJORUVEX0lNQUdFX09VVF9CVUZGRVIiKTsKKyAgICAgICAgICAgIHJldCA9IGZmX2dldF9idWZm ZXIoYXZjdHgsIGZyYW1lLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICBpZiAoSnhsRGVjb2RlclNldEltYWdlT3V0 Q2FsbGJhY2soY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxfcGl4Zm10LCAmbGlianhsX3Jvd19maWxs LCBmcmFtZSkgIT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIGRlYyBuZWVkIGltYWdlIG91dCBidWZmZXIg ZXZlbnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19G VUxMX0lNQUdFOgorICAgICAgICAgICAgLyogZnVsbCBpbWFnZSBpcyBvbmUgZnJhbWUsIGV2ZW4g aWYgYW5pbWF0ZWQgKi8KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi RlVMTF9JTUFHRSBldmVudCBlbWl0dGVkXG4iKTsKKyAgICAgICAgICAgICpnb3RfZnJhbWUgPSAx OworICAgICAgICAgICAgZnJhbWUtPnBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9JOworICAg ICAgICAgICAgZnJhbWUtPmtleV9mcmFtZSA9IDE7CisgICAgICAgICAgICBpZiAoY3R4LT5pY2Nw KSB7CisgICAgICAgICAgICAgICAgQVZGcmFtZVNpZGVEYXRhICpzZCA9IGF2X2ZyYW1lX25ld19z aWRlX2RhdGFfZnJvbV9idWYoZnJhbWUsIEFWX0ZSQU1FX0RBVEFfSUNDX1BST0ZJTEUsIGN0eC0+ aWNjcCk7CisgICAgICAgICAgICAgICAgaWYgKCFzZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICAvKiBvd25lcnNoaXAgaXMgdHJh bnNmZXJlZCwgYW5kIGl0IGlzIG5vdCByZWYtZWQgKi8KKyAgICAgICAgICAgICAgICBjdHgtPmlj Y3AgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGF2cGt0LT5zaXpl IC0gcmVtYWluaW5nOworICAgICAgICBjYXNlIEpYTF9ERUNfU1VDQ0VTUzoKKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiU1VDQ0VTUyBldmVudCBlbWl0dGVkXG4iKTsK KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGUgZmlsZSBoYXMgZmluaXNoZWQgZGVj b2RpbmcKKyAgICAgICAgICAgICAqIHJlc2V0IHRoZSBkZWNvZGVyIHRvIGxldCB1cworICAgICAg ICAgICAgICogcmV1c2UgaXQgYWdhaW4gZm9yIHRoZSBuZXh0IGltYWdlCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIEp4bERlY29kZXJSZXNldChjdHgtPmRlY29kZXIpOworICAgICAgICAg ICAgbGlianhsX2luaXRfanhsX2RlY29kZXIoYXZjdHgpOworICAgICAgICAgICAgYnVmID0gYXZw a3QtPmRhdGE7CisgICAgICAgICAgICByZW1haW5pbmcgPSBhdnBrdC0+c2l6ZTsKKyAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBldmVudDogJWRcbiIsIGpyZXQpOworICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisgICAgfQorfQorCitz dGF0aWMgYXZfY29sZCBpbnQgbGlianhsX2RlY29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZj dHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK KyAgICBpZiAoY3R4LT5ydW5uZXIpCisgICAgICAgIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyRGVz dHJveShjdHgtPnJ1bm5lcik7CisgICAgY3R4LT5ydW5uZXIgPSBOVUxMOworICAgIGlmIChjdHgt PmRlY29kZXIpCisgICAgICAgIEp4bERlY29kZXJEZXN0cm95KGN0eC0+ZGVjb2Rlcik7CisgICAg Y3R4LT5kZWNvZGVyID0gTlVMTDsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aWNjcCk7Cisg ICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IEZGQ29kZWMgZmZfbGlianhsX2RlY29kZXIgPSB7Cisg ICAgLnAubmFtZSAgICAgICAgICAgPSAibGlianhsIiwKKyAgICAucC5sb25nX25hbWUgICAgICA9 IE5VTExfSUZfQ09ORklHX1NNQUxMKCJsaWJqeGwgSlBFRyBYTCIpLAorICAgIC5wLnR5cGUgICAg ICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgIC5wLmlkICAgICAgICAgICAgID0gQVZf Q09ERUNfSURfSlBFR1hMLAorICAgIC5wcml2X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKExpYkp4bERl Y29kZUNvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICAgID0gbGlianhsX2RlY29kZV9pbml0 LAorICAgIC5kZWNvZGUgICAgICAgICAgID0gbGlianhsX2RlY29kZV9mcmFtZSwKKyAgICAuY2xv c2UgICAgICAgICAgICA9IGxpYmp4bF9kZWNvZGVfY2xvc2UsCisgICAgLnAuY2FwYWJpbGl0aWVz ICAgPSBBVl9DT0RFQ19DQVBfRFIxIHwgQVZfQ09ERUNfQ0FQX09USEVSX1RIUkVBRFMsCisgICAg LmNhcHNfaW50ZXJuYWwgICAgPSBGRl9DT0RFQ19DQVBfQVVUT19USFJFQURTIHwgRkZfQ09ERUNf Q0FQX0lOSVRfQ0xFQU5VUCwKKyAgICAucC53cmFwcGVyX25hbWUgICA9ICJsaWJqeGwiLAorfTsK LS0gCjIuMzUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRw czovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2Ny aWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1w ZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=