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 4B2FF40F14 for ; Tue, 12 Apr 2022 05:54:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ED89168B379; Tue, 12 Apr 2022 08:54:30 +0300 (EEST) Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A67968AFEB for ; Tue, 12 Apr 2022 08:54:24 +0300 (EEST) Received: by mail-qk1-f180.google.com with SMTP id c1so1599598qkf.13 for ; Mon, 11 Apr 2022 22:54:24 -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=GC6IpBcbqpHGzFS7Vr52mPx4wD1uZv52tOzz1MVc+Us=; b=Q+SLkulNglxTttJyQA5E7S45sQSu05QmIecEWW84CQVOwf5HI+29e7qbB5vx03VMV/ PG6PJRqrAj+tuSTP9dfCrNGdO3z3gHrYdFmxBTXrGCLgvro4wsy35fwImweY66ruOtRe 840ogB0nXydbZptlElJuzcUn6J/bWn6EW+oisndV5QMxxPUh/wniGk/t1Jwi9V/Criuv OgEGYadEeFfK32FI3+glY9vdkiA+6RljjwQz0jcojZAYYCcRwBGHaS1/NC7zxo/FiyaD FWBzDVN3SQBT5tUBCLWbmPgJjKbUMRUxFUJPXNTw4JTMGDnjrqJcVQ/9NwecEMZjwKfe LkkA== 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=GC6IpBcbqpHGzFS7Vr52mPx4wD1uZv52tOzz1MVc+Us=; b=XvWTHtVq17kTrvtzRNuZerndB78vJvY95VQ1ugwvpQD1prXrZlbhCjBne1NM6qOtPu oD/AuwbERuyoI8T/bLh2zGYykZUEKn6YdoYUweSleKXiucCFWFQDRobiKUfuga04SwTy xkpL7bg6j4GQhwPS2qKv7aJauklxf02xK6PoDO02Et+pTWNCNYnRGX8OmkQ3gXHTCWRT Lt6XOwRQXA2rl2FDmfASGEEqTy6XmtvYPVY3J4YkDU4tqOawkVYMQEQzNxFrQ7EmvGcn g7IQQ1tYXueyguBPcv/dF3Y1lz2hNAF1Ns17iaUEB5QmFaSOiYhBJf5ks78Hkz51CuyX OzPA== X-Gm-Message-State: AOAM53345Uy1BoaNoMwzeFIw/lITTUpbjgbuapjsmE/VHeIHMmbb7j6W IENKCFhyHm4ImJ6iuJJQlvzL5PlW0WI= X-Google-Smtp-Source: ABdhPJxRIyQsWIdKd7OQ5ZQLnlpgIEgistnW68Wqa1/NRPUFYavj3CIY2BpcJ2UOFy2CQs8bPbBqgA== X-Received: by 2002:a05:620a:2590:b0:680:f8c3:582 with SMTP id x16-20020a05620a259000b00680f8c30582mr1912755qko.723.1649742862984; Mon, 11 Apr 2022 22:54:22 -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 k2-20020a37ba02000000b0067dc1b0104asm19801988qkf.124.2022.04.11.22.54.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Apr 2022 22:54:22 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Apr 2022 01:53:31 -0400 Message-Id: <20220412055333.62424-3-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412055333.62424-1-leo.izen@gmail.com> References: <20220412055333.62424-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v14 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 Y29kZWMvbGlianhsLmMgICAgICAgfCAgNzAgKysrKysrKysrKwogbGliYXZjb2RlYy9saWJqeGwu aCAgICAgICB8ICA0OCArKysrKysrCiBsaWJhdmNvZGVjL2xpYmp4bGRlYy5jICAgIHwgMjc0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQw NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJqeGwuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmNvZGVjL2xpYmp4bGRlYy5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlO VEFJTkVSUwppbmRleCA4NTlhNTAwNWQ0Li5mYWVhODRlYmYxIDEwMDY0NAotLS0gYS9NQUlOVEFJ TkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTk0LDYgKzE5NCw3IEBAIENvZGVjczoKICAgbGli Y29kZWMyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBUb21hcyBIw6RyZGluCiAgIGxpYmRp cmFjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ29ucmFkCiAgIGxpYmRhdnMy LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHVpd2VuIFJlbgorICBsaWJqeGwqLmMsIGxp Ymp4bC5oICAgICAgICAgICAgICAgICAgIExlbyBJemVuCiAgIGxpYmdzbS5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTWljaGVsIEJhcmRpYXV4CiAgIGxpYmt2YXphYXIuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJ0dHUgWWzDpC1PdXRpbmVuCiAgIGxpYm9wZW5oMjY0ZW5jLmMg ICAgICAgICAgICAgICAgICAgICAgTWFydGluIFN0b3Jzam8sIExpbmppZSBGdQpkaWZmIC0tZ2l0 IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDljODk2NTg1MmIuLmMzNmQ1ZGJjOGIgMTAw NzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0MCw2ICsyNDAsNyBAQCBF eHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6CiAgIC0tZW5hYmxlLWxpYmllYzYxODgzICAgICBlbmFi bGUgaWVjNjE4ODMgdmlhIGxpYmllYzYxODgzIFtub10KICAgLS1lbmFibGUtbGliaWxiYyAgICAg ICAgIGVuYWJsZSBpTEJDIGRlL2VuY29kaW5nIHZpYSBsaWJpbGJjIFtub10KICAgLS1lbmFibGUt bGliamFjayAgICAgICAgIGVuYWJsZSBKQUNLIGF1ZGlvIHNvdW5kIHNlcnZlciBbbm9dCisgIC0t ZW5hYmxlLWxpYmp4bCAgICAgICAgICBlbmFibGUgSlBFRyBYTCBkZWNvZGluZyB2aWEgbGlianhs IFtub10KICAgLS1lbmFibGUtbGlia2x2YW5jICAgICAgIGVuYWJsZSBLZXJuZWwgTGFicyBWQU5D IHByb2Nlc3NpbmcgW25vXQogICAtLWVuYWJsZS1saWJrdmF6YWFyICAgICAgZW5hYmxlIEhFVkMg ZW5jb2RpbmcgdmlhIGxpYmt2YXphYXIgW25vXQogICAtLWVuYWJsZS1saWJsZW5zZnVuICAgICAg ZW5hYmxlIGxlbnNmdW4gbGVucyBjb3JyZWN0aW9uIFtub10KQEAgLTE4MzMsNiArMTgzNCw3IEBA IEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgbGliaWVjNjE4ODMKICAgICBsaWJpbGJjCiAg ICAgbGliamFjaworICAgIGxpYmp4bAogICAgIGxpYmtsdmFuYwogICAgIGxpYmt2YXphYXIKICAg ICBsaWJtb2RwbHVnCkBAIC0zMzMxLDYgKzMzMzMsNyBAQCBsaWJnc21fbXNfZGVjb2Rlcl9kZXBz PSJsaWJnc20iCiBsaWJnc21fbXNfZW5jb2Rlcl9kZXBzPSJsaWJnc20iCiBsaWJpbGJjX2RlY29k ZXJfZGVwcz0ibGliaWxiYyIKIGxpYmlsYmNfZW5jb2Rlcl9kZXBzPSJsaWJpbGJjIgorbGlianhs X2RlY29kZXJfZGVwcz0ibGlianhsIGxpYmp4bF90aHJlYWRzIgogbGlia3ZhemFhcl9lbmNvZGVy X2RlcHM9ImxpYmt2YXphYXIiCiBsaWJtb2RwbHVnX2RlbXV4ZXJfZGVwcz0ibGlibW9kcGx1ZyIK IGxpYm1wM2xhbWVfZW5jb2Rlcl9kZXBzPSJsaWJtcDNsYW1lIgpAQCAtNjU0Myw2ICs2NTQ2LDgg QEAgZW5hYmxlZCBsaWJnc20gICAgICAgICAgICAmJiB7IGZvciBnc21faGRyIGluICJnc20uaCIg ImdzbS9nc20uaCI7IGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr X2xpYiBsaWJnc20gIiR7Z3NtX2hkcn0iIGdzbV9jcmVhdGUgLWxnc20gJiYgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSB8fCBkaWUgIkVSUk9SOiBsaWJnc20gbm90 IGZvdW5kIjsgfQogZW5hYmxlZCBsaWJpbGJjICAgICAgICAgICAmJiByZXF1aXJlIGxpYmlsYmMg aWxiYy5oIFdlYlJ0Y0lsYmNmaXhfSW5pdERlY29kZSAtbGlsYmMgJHB0aHJlYWRzX2V4dHJhbGli cworZW5hYmxlZCBsaWJqeGwgICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlianhs ICJsaWJqeGwgPj0gMC43LjAiIGp4bC9kZWNvZGUuaCBKeGxEZWNvZGVyVmVyc2lvbiAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgbGlianhsX3RocmVh ZHMgImxpYmp4bF90aHJlYWRzID49IDAuNy4wIiBqeGwvdGhyZWFkX3BhcmFsbGVsX3J1bm5lci5o IEp4bFRocmVhZFBhcmFsbGVsUnVubmVyCiBlbmFibGVkIGxpYmtsdmFuYyAgICAgICAgICYmIHJl cXVpcmUgbGlia2x2YW5jIGxpYmtsdmFuYy92YW5jLmgga2x2YW5jX2NvbnRleHRfY3JlYXRlIC1s a2x2YW5jCiBlbmFibGVkIGxpYmt2YXphYXIgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBs aWJrdmF6YWFyICJrdmF6YWFyID49IDAuOC4xIiBrdmF6YWFyLmgga3Z6X2FwaV9nZXQKIGVuYWJs ZWQgbGlibGVuc2Z1biAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmxlbnNmdW4gbGVu c2Z1biBsZW5zZnVuLmggbGZfZGJfbmV3CmRpZmYgLS1naXQgYS9kb2MvZ2VuZXJhbF9jb250ZW50 cy50ZXhpIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQppbmRleCAyMzg1NjhmMmJiLi45M2E5 MGE1ZTUyIDEwMDY0NAotLS0gYS9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCisrKyBiL2RvYy9n ZW5lcmFsX2NvbnRlbnRzLnRleGkKQEAgLTE3MSw2ICsxNzEsMTMgQEAgR28gdG8gQHVybHtodHRw czovL2dpdGh1Yi5jb20vVGltb3RoeUd1L2xpYmlsYmN9IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0 aW9ucyBmb3IKIGluc3RhbGxpbmcgdGhlIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJs ZS1saWJpbGJjfSB0byBjb25maWd1cmUgdG8KIGVuYWJsZSBpdC4KIAorQHNlY3Rpb24gbGlianhs CisKK0pQRUcgWEwgaXMgYW4gaW1hZ2UgZm9ybWF0IGludGVuZGVkIHRvIGZ1bGx5IHJlcGxhY2Ug bGVnYWN5IEpQRUcgZm9yIGFuIGV4dGVuZGVkCitwZXJpb2Qgb2YgbGlmZS4gU2VlIEB1cmx7aHR0 cHM6Ly9qcGVneGwuaW5mby99IGZvciBtb3JlIGluZm9ybWF0aW9uLCBhbmQgc2VlCitAdXJse2h0 dHBzOi8vZ2l0aHViLmNvbS9saWJqeGwvbGlianhsfSBmb3IgdGhlIGxpYnJhcnkgc291cmNlLiBZ b3UgY2FuIHBhc3MKK0Bjb2Rley0tZW5hYmxlLWxpYmp4bH0gdG8gY29uZmlndXJlIGluIG9yZGVy IGVuYWJsZSB0aGUgbGlianhsIHdyYXBwZXIuCisKIEBzZWN0aW9uIGxpYnZweAogCiBGRm1wZWcg Y2FuIG1ha2UgdXNlIG9mIHRoZSBsaWJ2cHggbGlicmFyeSBmb3IgVlA4L1ZQOSBkZWNvZGluZyBh bmQgZW5jb2RpbmcuCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2Rl Yy9NYWtlZmlsZQppbmRleCA5MGY0NjAzNWQ5Li44ZmMzYjNjYzVmIDEwMDY0NAotLS0gYS9saWJh dmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAgLTEwNjEsNiArMTA2 MSw3IEBAIE9CSlMtJChDT05GSUdfTElCR1NNX01TX0RFQ09ERVIpICAgICAgICAgICs9IGxpYmdz bWRlYy5vCiBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19FTkNPREVSKSAgICAgICAgICArPSBsaWJn c21lbmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0RFQ09ERVIpICAgICAgICAgICAgKz0gbGli aWxiYy5vCiBPQkpTLSQoQ09ORklHX0xJQklMQkNfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJp bGJjLm8KK09CSlMtJChDT05GSUdfTElCSlhMX0RFQ09ERVIpICAgICAgICAgICAgICs9IGxpYmp4 bGRlYy5vIGxpYmp4bC5vCiBPQkpTLSQoQ09ORklHX0xJQktWQVpBQVJfRU5DT0RFUikgICAgICAg ICArPSBsaWJrdmF6YWFyLm8KIE9CSlMtJChDT05GSUdfTElCTVAzTEFNRV9FTkNPREVSKSAgICAg ICAgICs9IGxpYm1wM2xhbWUubwogT0JKUy0kKENPTkZJR19MSUJPUEVOQ09SRV9BTVJOQl9ERUNP REVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29k ZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IDU4NTkxOGRhOTMuLjA3ZjViYWZk MjcgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9h bGxjb2RlY3MuYwpAQCAtNzUxLDYgKzc1MSw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xp YmdzbV9tc19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliZ3NtX21zX2RlY29k ZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJpbGJjX2VuY29kZXI7CiBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9saWJpbGJjX2RlY29kZXI7CitleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9s aWJqeGxfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm1wM2xhbWVfZW5jb2Rl cjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm9wZW5jb3JlX2Ftcm5iX2VuY29kZXI7CiBl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9kZWNvZGVyOwpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9saWJqeGwuYyBiL2xpYmF2Y29kZWMvbGlianhsLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMjA0ZDkxZDhhOAotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEpQRUcgWEwg ZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KKyAq IENvcHlyaWdodCAoYykgMjAyMSBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwuY29tPgorICoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBKUEVH IFhMIHZpYSBsaWJqeGwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KKyAqLworCisjaW5j bHVkZSAibGliYXZ1dGlsL2NwdS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKworI2lu Y2x1ZGUgPGp4bC9tZW1vcnlfbWFuYWdlci5oPgorI2luY2x1ZGUgImxpYmp4bC5oIgorCitzaXpl X3QgZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcykKK3sKKyAgICBpZiAodGhy ZWFkcyA8PSAwKQorICAgICAgICByZXR1cm4gYXZfY3B1X2NvdW50KCk7CisgICAgaWYgKHRocmVh ZHMgPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRocmVhZHM7Cit9CisKKy8q KgorICogV3JhcHBlciBhcm91bmQgYXZfbWFsbG9jIHVzZWQgYXMgYSBqcGVneGxfYWxsb2NfZnVu Yy4KKyAqCisgKiBAcGFyYW0gIG9wYXF1ZSBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2FsbG9j X2Z1bmMsIGFsd2F5cyBpZ25vcmVkCisgKiBAcGFyYW0gIHNpemUgU2l6ZSBpbiBieXRlcyBmb3Ig dGhlIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQKKyAqIEByZXR1cm4gUG9pbnRlciB0byB0 aGUgYWxsb2NhdGVkIGJsb2NrLCBvciBgTlVMTGAgaWYgaXQgY2Fubm90IGJlIGFsbG9jYXRlZAor ICovCitzdGF0aWMgdm9pZCAqbGlianhsX2F2X21hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBz aXplKQoreworICAgIHJldHVybiBhdl9tYWxsb2Moc2l6ZSk7Cit9CisKKy8qKgorICogV3JhcHBl ciBhcm91bmQgYXZfZnJlZSB1c2VkIGFzIGEganBlZ3hsX2ZyZWVfZnVuYy4KKyAqCisgKiBAcGFy YW0gb3BhcXVlICBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2ZyZWVfZnVuYywgYWx3YXlzIGln bm9yZWQKKyAqIEBwYXJhbSBhZGRyZXNzIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBibG9jaywg dG8gZnJlZS4gYE5VTExgIHBlcm1pdHRlZCBhcyBhIG5vLW9wLgorICovCitzdGF0aWMgdm9pZCBs aWJqeGxfYXZfZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmFkZHJlc3MpCit7CisgICAgYXZfZnJl ZShhZGRyZXNzKTsKK30KKwordm9pZCBmZl9saWJqeGxfaW5pdF9tZW1vcnlfbWFuYWdlcihKeGxN ZW1vcnlNYW5hZ2VyICptYW5hZ2VyKQoreworICAgIG1hbmFnZXItPm9wYXF1ZSA9IE5VTEw7Cisg ICAgbWFuYWdlci0+YWxsb2MgPSAmbGlianhsX2F2X21hbGxvYzsKKyAgICBtYW5hZ2VyLT5mcmVl ID0gJmxpYmp4bF9hdl9mcmVlOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJqeGwuaCBi L2xpYmF2Y29kZWMvbGlianhsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNTM4N2M0MzhmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvbGlianhsLmgKQEAg LTAsMCArMSw0OCBAQAorLyoKKyAqIEpQRUcgWEwgZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29t bW9uIHN1cHBvcnQgaGVhZGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTGVvIEl6ZW4gPGxlby5p emVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor LyoqCisgKiBAZmlsZQorICogSlBFRyBYTCB2aWEgbGlianhsIGNvbW1vbiBzdXBwb3J0IGhlYWRl cgorICovCisKKyNpZm5kZWYgQVZDT0RFQ19MSUJKWExfSAorI2RlZmluZSBBVkNPREVDX0xJQkpY TF9ICisKKyNpbmNsdWRlIDxqeGwvbWVtb3J5X21hbmFnZXIuaD4KKworLyoqCisgKiBUcmFuc2Zv cm0gdGhyZWFkY291bnQgaW4gZmZtcGVnIHRvIG9uZSB1c2VkIGJ5IGxpYmp4bC4KKyAqCisgKiBA cGFyYW0gIHRocmVhZHMgZmZtcGVnJ3MgdGhyZWFkcyBBVk9wdGlvbgorICogQHJldHVybiAgICAg ICAgIHRocmVhZCBjb3VudCBmb3IgbGlianhsJ3MgcGFyYWxsZWwgcnVubmVyCisgKi8KK3NpemVf dCBmZl9saWJqeGxfZ2V0X3RocmVhZGNvdW50KGludCB0aHJlYWRzKTsKKworLyoqCisgKiBJbml0 aWFsaXplIGFuZCBwb3B1bGF0ZSBhIEp4bE1lbW9yeU1hbmFnZXIKKyAqIHdpdGggYXZfbWFsbG9j KCkgYW5kIGF2X2ZyZWUoKSBzbyBsaWJqeGwgd2lsbCB1c2UgdGhlc2UKKyAqIGZ1bmN0aW9ucy4K KyAqIEBwYXJhbSBtYW5hZ2VyIGEgcG9pbnRlciB0byBhIEp4bE1lbW9yeU1hbmFnZXIgc3RydWN0 CisgKi8KK3ZvaWQgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoSnhsTWVtb3J5TWFuYWdl ciAqbWFuYWdlcik7CisKKyNlbmRpZiAvKiBBVkNPREVDX0xJQkpYTF9IICovCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2xpYmp4bGRlYy5jIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hN2QyMDViMDgxCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIEpQ RUcgWEwgZGVjb2Rpbmcgc3VwcG9ydCB2aWEgbGlianhsCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEg TGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBYTCBkZWNvZGVyIHVzaW5nIGxp Ymp4bAorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvYnVmZmVyLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgorI2luY2x1 ZGUgImxpYmF2dXRpbC9lcnJvci5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNs dWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIK KyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKworI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNp bmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNs dWRlIDxqeGwvZGVjb2RlLmg+CisjaW5jbHVkZSA8anhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIu aD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTGliSnhsRGVjb2RlQ29u dGV4dCB7CisgICAgdm9pZCAqcnVubmVyOworICAgIEp4bERlY29kZXIgKmRlY29kZXI7CisgICAg SnhsQmFzaWNJbmZvIGJhc2ljX2luZm87CisgICAgSnhsUGl4ZWxGb3JtYXQganhsX3BpeGZtdDsK KyAgICBKeGxEZWNvZGVyU3RhdHVzIGV2ZW50czsKKyAgICBBVkJ1ZmZlclJlZiAqaWNjcDsKK30g TGliSnhsRGVjb2RlQ29udGV4dDsKKworc3RhdGljIGludCBsaWJqeGxfaW5pdF9qeGxfZGVjb2Rl cihBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGN0eC0+ZXZlbnRzID0gSlhMX0RFQ19CQVNJQ19J TkZPIHwgSlhMX0RFQ19GVUxMX0lNQUdFIHwgSlhMX0RFQ19DT0xPUl9FTkNPRElORzsKKyAgICBp ZiAoSnhsRGVjb2RlclN1YnNjcmliZUV2ZW50cyhjdHgtPmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAh PSBKWExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJFcnJvciBzdWJzY3JpYmluZyB0byBKWEwgZXZlbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgaWYgKEp4bERlY29kZXJTZXRQYXJhbGxlbFJ1 bm5lcihjdHgtPmRlY29kZXIsIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyLCBjdHgtPnJ1bm5lcikg IT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIHNldCBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lclxuIik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIG1lbXNldCgmY3R4LT5iYXNpY19p bmZvLCAwLCBzaXplb2YoSnhsQmFzaWNJbmZvKSk7CisgICAgbWVtc2V0KCZjdHgtPmp4bF9waXhm bXQsIDAsIHNpemVvZihKeGxQaXhlbEZvcm1hdCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBhdl9jb2xkIGludCBsaWJqeGxfZGVjb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQoreworICAgIExpYkp4bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cisg ICAgSnhsTWVtb3J5TWFuYWdlciBtYW5hZ2VyOworCisgICAgZmZfbGlianhsX2luaXRfbWVtb3J5 X21hbmFnZXIoJm1hbmFnZXIpOworICAgIGN0eC0+ZGVjb2RlciA9IEp4bERlY29kZXJDcmVhdGUo Jm1hbmFnZXIpOworICAgIGlmICghY3R4LT5kZWNvZGVyKSB7CisgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBKeGxEZWNvZGVyXG4iKTsKKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgY3R4LT5ydW5uZXIgPSBK eGxUaHJlYWRQYXJhbGxlbFJ1bm5lckNyZWF0ZSgmbWFuYWdlciwgZmZfbGlianhsX2dldF90aHJl YWRjb3VudChhdmN0eC0+dGhyZWFkX2NvdW50KSk7CisgICAgaWYgKCFjdHgtPnJ1bm5lcikgewor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgSnhs VGhyZWFkUGFyYWxsZWxSdW5uZXJcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICB9CisKKyAgICByZXR1cm4gbGlianhsX2luaXRfanhsX2RlY29kZXIoYXZjdHgpOwor fQorCitzdGF0aWMgZW51bSBBVlBpeGVsRm9ybWF0IGxpYmp4bF9nZXRfcGl4X2ZtdChBVkNvZGVj Q29udGV4dCAqYXZjdHgsIEp4bEJhc2ljSW5mbyAqYmFzaWNfaW5mbywgSnhsUGl4ZWxGb3JtYXQg KmZvcm1hdCkKK3sKKyAgICBmb3JtYXQtPmVuZGlhbm5lc3MgPSBKWExfTkFUSVZFX0VORElBTjsK KyAgICBmb3JtYXQtPm51bV9jaGFubmVscyA9IGJhc2ljX2luZm8tPm51bV9jb2xvcl9jaGFubmVs cyArIChiYXNpY19pbmZvLT5hbHBoYV9iaXRzID4gMCk7CisgICAgLyogR3JheSAqLworICAgIGlm IChiYXNpY19pbmZvLT5udW1fY29sb3JfY2hhbm5lbHMgPT0gMSkgeworICAgICAgICBpZiAoYmFz aWNfaW5mby0+Yml0c19wZXJfc2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0 YV90eXBlID0gSlhMX1RZUEVfVUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+ YWxwaGFfYml0cyA/IEFWX1BJWF9GTVRfWUE4IDogQVZfUElYX0ZNVF9HUkFZODsKKyAgICAgICAg fQorICAgICAgICBpZiAoYmFzaWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlIHx8IGJh c2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+IDE2KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNf aW5mby0+YWxwaGFfYml0cykKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9OT05F OworICAgICAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9GTE9BVDsKKyAgICAg ICAgICAgIHJldHVybiBBVl9QSVhfRk1UX0dSQVlGMzI7CisgICAgICAgIH0KKyAgICAgICAgZm9y bWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9VSU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19p bmZvLT5hbHBoYV9iaXRzID8gQVZfUElYX0ZNVF9ZQTE2IDogQVZfUElYX0ZNVF9HUkFZMTY7Cisg ICAgfQorICAgIC8qIHJnYiBvbmx5ICovCisgICAgLyogbGlianhsIG9ubHkgc3VwcG9ydHMgcGFj a2VkIFJHQiBhbmQgZ3JheSBvdXRwdXQgYXQgdGhlIG1vbWVudCAqLworICAgIGlmIChiYXNpY19p bmZvLT5udW1fY29sb3JfY2hhbm5lbHMgPT0gMykgeworICAgICAgICBpZiAoYmFzaWNfaW5mby0+ Yml0c19wZXJfc2FtcGxlIDw9IDgpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0g SlhMX1RZUEVfVUlOVDg7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0 cyA/IEFWX1BJWF9GTVRfUkdCQSA6IEFWX1BJWF9GTVRfUkdCMjQ7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+IDE2KQorICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBsYXJnZXIgaW50ZWdlciB0 byAxNi1iaXQgdmlhIGxpYmp4bFxuIik7CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5leHBvbmVu dF9iaXRzX3Blcl9zYW1wbGUpCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJO SU5HLCAiRG93bnNhbXBsaW5nIGZsb2F0IHRvIDE2LWJpdCBpbnRlZ2VyIHZpYSBsaWJqeGxcbiIp OworICAgICAgICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQxNjsKKyAgICAgICAg cmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkE2NCA6IEFWX1BJ WF9GTVRfUkdCNDg7CisgICAgfQorCisgICAgcmV0dXJuIEFWX1BJWF9GTVRfTk9ORTsKK30KKwor c3RhdGljIGludCBsaWJqeGxfZGVjb2RlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZG cmFtZSAqZnJhbWUsIGludCAqZ290X2ZyYW1lLCBBVlBhY2tldCAqYXZwa3QpCit7CisgICAgTGli SnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICB1aW50OF90ICpi dWYgPSBhdnBrdC0+ZGF0YTsKKyAgICBzaXplX3QgcmVtYWluaW5nID0gYXZwa3QtPnNpemUsIGlj Y3BfbGVuOworICAgIEp4bERlY29kZXJTdGF0dXMganJldDsKKyAgICBpbnQgcmV0OworICAgICpn b3RfZnJhbWUgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKworICAgICAgICBqcmV0ID0gSnhsRGVj b2RlclNldElucHV0KGN0eC0+ZGVjb2RlciwgYnVmLCByZW1haW5pbmcpOworCisgICAgICAgIGlm IChqcmV0ID09IEpYTF9ERUNfRVJST1IpIHsKKyAgICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5l dmVyIGhhcHBlbiBoZXJlIHVubGVzcyB0aGVyZSdzIGEgYnVnIGluIGxpYmp4bCAqLworICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIGxpYmp4bCBkZWNvZGUg ZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAg IH0KKworICAgICAgICBqcmV0ID0gSnhsRGVjb2RlclByb2Nlc3NJbnB1dChjdHgtPmRlY29kZXIp OworICAgICAgICAvKgorICAgICAgICAgKiBKeGxEZWNvZGVyUmVsZWFzZUlucHV0IHJldHVybnMg dGhlIG51bWJlcgorICAgICAgICAgKiBvZiBieXRlcyByZW1haW5pbmcgdG8gYmUgcmVhZCwgcmF0 aGVyIHRoYW4KKyAgICAgICAgICogdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGl0IGRpZCByZWFk CisgICAgICAgICAqLworICAgICAgICByZW1haW5pbmcgPSBKeGxEZWNvZGVyUmVsZWFzZUlucHV0 KGN0eC0+ZGVjb2Rlcik7CisgICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhICsgYXZwa3QtPnNpemUg LSByZW1haW5pbmc7CisKKyAgICAgICAgc3dpdGNoKGpyZXQpIHsKKyAgICAgICAgY2FzZSBKWExf REVDX0VSUk9SOgorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtu b3duIGxpYmp4bCBkZWNvZGUgZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgICAgIGNhc2UgSlhMX0RFQ19ORUVEX01PUkVfSU5QVVQ6CisgICAg ICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgZW5kIG9mIEpYTCBjb2Rlc3RyZWFtXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTkVFRF9NT1JFX0lO UFVUIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNh c2UgSlhMX0RFQ19CQVNJQ19JTkZPOgorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df REVCVUcsICJCQVNJQ19JTkZPIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgaWYgKEp4 bERlY29kZXJHZXRCYXNpY0luZm8oY3R4LT5kZWNvZGVyLCAmY3R4LT5iYXNpY19pbmZvKSAhPSBK WExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAq IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgICAgICAgICAgICAqIGlmIGl0IGRvZXMg aXQgaXMgbGlrZWx5IGEgbGlianhsIGRlY29kZXIgYnVnCisgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIGJh c2ljIGluZm8gZXZlbnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBsaWJqeGxf Z2V0X3BpeF9mbXQoYXZjdHgsICZjdHgtPmJhc2ljX2luZm8sICZjdHgtPmp4bF9waXhmbXQpOwor ICAgICAgICAgICAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfTk9ORSkgeworICAg ICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBwaXhl bCBmb3JtYXRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgs IGN0eC0+YmFzaWNfaW5mby54c2l6ZSwgY3R4LT5iYXNpY19pbmZvLnlzaXplKTsKKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVDX0NPTE9SX0VOQ09ESU5HOgorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJDT0xPUl9FTkNPRElORyBldmVudCBl bWl0dGVkXG4iKTsKKyAgICAgICAgICAgIGpyZXQgPSBKeGxEZWNvZGVyR2V0SUNDUHJvZmlsZVNp emUoY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxfcGl4Zm10LCBKWExfQ09MT1JfUFJPRklMRV9UQVJH RVRfT1JJR0lOQUwsICZpY2NwX2xlbik7CisgICAgICAgICAgICBpZiAoanJldCA9PSBKWExfREVD X1NVQ0NFU1MgJiYgaWNjcF9sZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgYXZfYnVmZmVyX3Vu cmVmKCZjdHgtPmljY3ApOworICAgICAgICAgICAgICAgIGN0eC0+aWNjcCA9IGF2X2J1ZmZlcl9h bGxvYyhpY2NwX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKCFjdHgtPmljY3ApCisgICAgICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAganJl dCA9IEp4bERlY29kZXJHZXRDb2xvckFzSUNDUHJvZmlsZShjdHgtPmRlY29kZXIsICZjdHgtPmp4 bF9waXhmbXQsIEpYTF9DT0xPUl9QUk9GSUxFX1RBUkdFVF9PUklHSU5BTCwgY3R4LT5pY2NwLT5k YXRhLCBpY2NwX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKGpyZXQgIT0gSlhMX0RFQ19TVUND RVNTKQorICAgICAgICAgICAgICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aWNjcCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVD X05FRURfSU1BR0VfT1VUX0JVRkZFUjoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0RFQlVHLCAiTkVFRF9JTUFHRV9PVVRfQlVGRkVSIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAg ICAgICAgcmV0ID0gZmZfZ2V0X2J1ZmZlcihhdmN0eCwgZnJhbWUsIDApOworICAgICAgICAgICAg aWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIGN0 eC0+anhsX3BpeGZtdC5hbGlnbiA9IGZyYW1lLT5saW5lc2l6ZVswXTsKKyAgICAgICAgICAgIGlm IChKeGxEZWNvZGVyU2V0SW1hZ2VPdXRCdWZmZXIoY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxfcGl4 Zm10LCBmcmFtZS0+ZGF0YVswXSwgZnJhbWUtPmJ1ZlswXS0+c2l6ZSkgIT0gSlhMX0RFQ19TVUND RVNTKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQg bGlianhsIGRlYyBuZWVkIGltYWdlIG91dCBidWZmZXIgZXZlbnRcbiIpOworICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19GVUxMX0lNQUdFOgorICAgICAgICAgICAg LyogZnVsbCBpbWFnZSBpcyBvbmUgZnJhbWUsIGV2ZW4gaWYgYW5pbWF0ZWQgKi8KKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRlVMTF9JTUFHRSBldmVudCBlbWl0dGVk XG4iKTsKKyAgICAgICAgICAgICpnb3RfZnJhbWUgPSAxOworICAgICAgICAgICAgZnJhbWUtPnBp Y3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9JOworICAgICAgICAgICAgZnJhbWUtPmtleV9mcmFt ZSA9IDE7CisgICAgICAgICAgICBpZiAoY3R4LT5pY2NwKSB7CisgICAgICAgICAgICAgICAgQVZG cmFtZVNpZGVEYXRhICpzZCA9IGF2X2ZyYW1lX25ld19zaWRlX2RhdGFfZnJvbV9idWYoZnJhbWUs IEFWX0ZSQU1FX0RBVEFfSUNDX1BST0ZJTEUsIGN0eC0+aWNjcCk7CisgICAgICAgICAgICAgICAg aWYgKCFzZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgICAgICAgICAvKiBvd25lcnNoaXAgaXMgdHJhbnNmZXJlZCwgYW5kIGl0IGlzIG5vdCBy ZWYtZWQgKi8KKyAgICAgICAgICAgICAgICBjdHgtPmljY3AgPSBOVUxMOworICAgICAgICAgICAg fQorICAgICAgICAgICAgcmV0dXJuIGF2cGt0LT5zaXplIC0gcmVtYWluaW5nOworICAgICAgICBj YXNlIEpYTF9ERUNfU1VDQ0VTUzoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiU1VDQ0VTUyBldmVudCBlbWl0dGVkXG4iKTsKKyAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgKiBUaGUgZmlsZSBoYXMgZmluaXNoZWQgZGVjb2RpbmcKKyAgICAgICAgICAgICAqIHJl c2V0IHRoZSBkZWNvZGVyIHRvIGxldCB1cworICAgICAgICAgICAgICogcmV1c2UgaXQgYWdhaW4g Zm9yIHRoZSBuZXh0IGltYWdlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIEp4bERlY29k ZXJSZXNldChjdHgtPmRlY29kZXIpOworICAgICAgICAgICAgbGlianhsX2luaXRfanhsX2RlY29k ZXIoYXZjdHgpOworICAgICAgICAgICAgYnVmID0gYXZwa3QtPmRhdGE7CisgICAgICAgICAgICBy ZW1haW5pbmcgPSBhdnBrdC0+c2l6ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxp Ymp4bCBldmVudDogJWRcbiIsIGpyZXQpOworICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfY29sZCBpbnQgbGlianhs X2RlY29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2Rl Q29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGlmIChjdHgtPnJ1bm5lcikK KyAgICAgICAgSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJEZXN0cm95KGN0eC0+cnVubmVyKTsKKyAg ICBjdHgtPnJ1bm5lciA9IE5VTEw7CisgICAgaWYgKGN0eC0+ZGVjb2RlcikKKyAgICAgICAgSnhs RGVjb2RlckRlc3Ryb3koY3R4LT5kZWNvZGVyKTsKKyAgICBjdHgtPmRlY29kZXIgPSBOVUxMOwor ICAgIGF2X2J1ZmZlcl91bnJlZigmY3R4LT5pY2NwKTsKKworICAgIHJldHVybiAwOworfQorCitj b25zdCBGRkNvZGVjIGZmX2xpYmp4bF9kZWNvZGVyID0geworICAgIC5wLm5hbWUgICAgICAgICAg ID0gImxpYmp4bCIsCisgICAgLnAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFM TCgibGlianhsIEpQRUcgWEwiKSwKKyAgICAucC50eXBlICAgICAgICAgICA9IEFWTUVESUFfVFlQ RV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0pQRUdYTCwKKyAg ICAucHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihMaWJKeGxEZWNvZGVDb250ZXh0KSwKKyAgICAu aW5pdCAgICAgICAgICAgICA9IGxpYmp4bF9kZWNvZGVfaW5pdCwKKyAgICBGRl9DT0RFQ19ERUNP REVfQ0IobGlianhsX2RlY29kZV9mcmFtZSksCisgICAgLmNsb3NlICAgICAgICAgICAgPSBsaWJq eGxfZGVjb2RlX2Nsb3NlLAorICAgIC5wLmNhcGFiaWxpdGllcyAgID0gQVZfQ09ERUNfQ0FQX0RS MSB8IEFWX0NPREVDX0NBUF9PVEhFUl9USFJFQURTLAorICAgIC5jYXBzX2ludGVybmFsICAgID0g RkZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUyB8IEZGX0NPREVDX0NBUF9JTklUX0NMRUFOVVAsCisg ICAgLnAud3JhcHBlcl9uYW1lICAgPSAibGlianhsIiwKK307Ci0tIAoyLjM1LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWls aW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxt YW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3Qg InVuc3Vic2NyaWJlIi4K