From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 54A18D6DDE0 for ; Fri, 15 Nov 2024 07:38:08 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tBqtd-0002Ak-H5; Fri, 15 Nov 2024 02:37:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tBqt2-0001RN-ID for grub-devel@gnu.org; Fri, 15 Nov 2024 02:37:06 -0500 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tBqsx-0000Ak-OB for grub-devel@gnu.org; Fri, 15 Nov 2024 02:37:00 -0500 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-53d9ff8ef3aso1616117e87.1 for ; Thu, 14 Nov 2024 23:36:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1731656214; x=1732261014; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Y6tyl1/1Yv0ynEAiXIlFju8xdySqX0bXzq9wX/vycCw=; b=coVj7MD99QdW2TH9cLzhY+sGst+6iJkLw2uJbsj2CrmKCQ6ZRjwuwclvkjHS8KEEdx qX4PnJ+Op7gZZe6qwaLRUy60CtcIlkav879/IXIuKZaCsfw9ZZcUfAzvwSZ84iD5PEHU oRhmCfS0mCgsEbtLIb0Hlh2AnGzn36MqW/MFoGoqBOiRazXL0/w+vYjRGcHLfH4TOyH7 BdU8SyddywWWZTEoqS5aPfAjLvrsPFkCc7cCx1nUGOVqlUq5GR+2S4zRmFaqUs8xJ6Su Y5o4w51jlEYmFIZQPR4KDhvRq70c0jVigyv4ZybJMGa5pIzgDNNJ6Z6z+YB2ycuMAtPO oWnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731656214; x=1732261014; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y6tyl1/1Yv0ynEAiXIlFju8xdySqX0bXzq9wX/vycCw=; b=QkleGxTA9EfHBqjvhXDp1+lIPxBUn+aLlMAl7hhFBbwcYb1DLAZv0NGt8rRBOSVKiG 5QfzD5CsGbpaiSGm4h7S9FrDCJEJnxPRcbjARQMQSF8FUGWGWu6m/kIcCAyY4GPvkAdO FTC0ZtPquu87lbbjA54OEBXDk144FCVb6BzC6PXShcjEF403bYhykjBOk6EqkkTnc6/x kAijamOva/k0S2AjEfs3QrS6j41z9PRoVuTrweIlbHpQBwidb8OwvP8b1Kjy2LIbAGW/ J2MS1THkDqv2Qhe+d5Y8nW3u+Gp6WfOorsvwuVbaFZ/Vha23P1AEk8EnvTvlTTmoOK3+ ZFhQ== X-Gm-Message-State: AOJu0Yw7gVPTa5uYSxamDwYGAY7h7fosoi6DQ3Sh9Pq1exj3kw6TwczT IH684gh9BZ4ecxZwdCFACDWx3/pJ6jbfXZjXdOFTaxfhm4VOTJsCooSNNR+ju7jcfZyqTVXQRWT j X-Google-Smtp-Source: AGHT+IHGRlBXCeZ0rr04YpdKbZBtYZ9A4gQ6sgje7L3seHbGvC240GmSWXWYKk6gmuWSfqeu4pJaNw== X-Received: by 2002:a05:6512:398d:b0:53d:a0f7:20f5 with SMTP id 2adb3069b0e04-53dab2a6209mr641077e87.24.1731656213816; Thu, 14 Nov 2024 23:36:53 -0800 (PST) Received: from localhost (111-240-136-29.dynamic-ip.hinet.net. [111.240.136.29]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-7f8c1c2cec2sm713859a12.21.2024.11.14.23.36.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Nov 2024 23:36:53 -0800 (PST) To: The development of GNU GRUB Subject: [PATCH v23 25/33] util/grub-protect: Add new tool Date: Fri, 15 Nov 2024 15:34:53 +0800 Message-ID: <20241115073506.2784-26-glin@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241115073506.2784-1-glin@suse.com> References: <20241115073506.2784-1-glin@suse.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=glin@suse.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Gary Lin via Grub-devel Reply-To: The development of GNU GRUB Cc: Gary Lin , Daniel Kiper , Hernan Gatta , Daniel Axtens , shkhisti@microsoft.com, jaskaran.khurana@microsoft.com, christopher.co@microsoft.com, daniel.mihai@microsoft.com, jaredz@redhat.com, development@efficientek.com, jejb@linux.ibm.com, mchang@suse.com, patrick.colp@oracle.com, Stefan Berger , Vladimir Serbinenko Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org RnJvbTogSGVybmFuIEdhdHRhIDxoZWdhdHRhQGxpbnV4Lm1pY3Jvc29mdC5jb20+CgpUbyB1dGls aXplIHRoZSBrZXkgcHJvdGVjdG9ycyBmcmFtZXdvcmssIHRoZXJlIG11c3QgYmUgYSB3YXkgdG8g cHJvdGVjdApmdWxsLWRpc2sgZW5jcnlwdGlvbiBrZXlzIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhl IGdydWItcHJvdGVjdCB0b29sCmluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSBUUE0yIGtleSBwcm90 ZWN0b3IgYnV0IG90aGVyIHByb3RlY3RvcnMgdGhhdApyZXF1aXJlIHNldHVwIGFoZWFkIG9mIHRp bWUgY2FuIGJlIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLgoKRm9yIHRoZSBUUE0yIGtleSBwcm90 ZWN0b3IsIHRoZSBpbnRlbmRlZCBmbG93IGlzIGZvciBhIHVzZXIgdG8gaGF2ZSBhCkxVS1MgMSBv ciBMVUtTIDItcHJvdGVjdGVkIGZ1bGx5LWVuY3J5cHRlZCBkaXNrLiBUaGUgdXNlciB0aGVuIGNy ZWF0ZXMgYQpuZXcgTFVLUyBrZXkgZmlsZSwgc2F5IGJ5IHJlYWRpbmcgL2Rldi91cmFuZG9tIGlu dG8gYSBmaWxlLCBhbmQgY3JlYXRlcwphIG5ldyBMVUtTIGtleSBzbG90IGZvciB0aGlzIGtleS4g VGhlbiwgdGhlIHVzZXIgaW52b2tlcyB0aGUgZ3J1Yi1wcm90ZWN0CnRvb2wgdG8gc2VhbCB0aGlz IGtleSBmaWxlIHRvIGEgc2V0IG9mIFBDUnMgdXNpbmcgdGhlIHN5c3RlbSdzIFRQTSAyLjAuClRo ZSByZXN1bHRpbmcgc2VhbGVkIGtleSBmaWxlIGlzIHN0b3JlZCBpbiBhbiB1bmVuY3J5cHRlZCBw YXJ0aXRpb24gc3VjaAphcyB0aGUgRUZJIFN5c3RlbSBQYXJ0aXRpb24gKEVTUCkgc28gdGhhdCBH UlVCIG1heSByZWFkIGl0LiBUaGUgdXNlciBhbHNvCmhhcyB0byBlbnN1cmUgdGhlIGNyeXB0b21v dW50IGNvbW1hbmQgaXMgaW5jbHVkZWQgaW4gR1JVQidzIGJvb3Qgc2NyaXB0CmFuZCB0aGF0IGl0 IGNhcnJpZXMgdGhlIHJlcXVpc2l0ZSBrZXkgcHJvdGVjdG9yICgtUCkgcGFyYW1ldGVyLgoKU2Ft cGxlIHVzYWdlOgoKJCBkZCBpZj0vZGV2L3VyYW5kb20gb2Y9bHVrcy1rZXkgYnM9MSBjb3VudD0z MgokIHN1ZG8gY3J5cHRzZXR1cCBsdWtzQWRkS2V5IC9kZXYvc2RiMSBsdWtzLWtleSAtLXBia2Rm PXBia2RmMiAtLWhhc2g9c2hhNTEyCgpUbyBzZWFsIHRoZSBrZXkgd2l0aCBUUE0gMi4wIEtleSBG aWxlIChyZWNvbW1lbmRlZCk6CgokIHN1ZG8gZ3J1Yi1wcm90ZWN0IC0tYWN0aW9uPWFkZCBcCiAg ICAgICAgICAgICAgICAgICAgLS1wcm90ZWN0b3I9dHBtMiBcCiAgICAgICAgICAgICAgICAgICAg LS10cG0yLXBjcnM9MCwyLDQsNyw5IFwKICAgICAgICAgICAgICAgICAgICAtLXRwbTJrZXkgXAog ICAgICAgICAgICAgICAgICAgIC0tdHBtMi1rZXlmaWxlPWx1a3Mta2V5IFwKICAgICAgICAgICAg ICAgICAgICAtLXRwbTItb3V0ZmlsZT0vYm9vdC9lZmkvZWZpL2dydWIvc2VhbGVkLnRwbQoKT3Is IHRvIHNlYWwgdGhlIGtleSB3aXRoIHRoZSByYXcgc2VhbGVkIGtleToKCiQgc3VkbyBncnViLXBy b3RlY3QgLS1hY3Rpb249YWRkIFwKICAgICAgICAgICAgICAgICAgICAtLXByb3RlY3Rvcj10cG0y IFwKICAgICAgICAgICAgICAgICAgICAtLXRwbTItcGNycz0wLDIsNCw3LDkgXAogICAgICAgICAg ICAgICAgICAgIC0tdHBtMi1rZXlmaWxlPWx1a3Mta2V5IFwKICAgICAgICAgICAgICAgICAgICAt LXRwbTItb3V0ZmlsZT0vYm9vdC9lZmkvZWZpL2dydWIvc2VhbGVkLmtleQoKVGhlbiwgaW4gdGhl IGJvb3Qgc2NyaXB0LCBmb3IgVFBNIDIuMCBLZXkgRmlsZToKCnRwbTJfa2V5X3Byb3RlY3Rvcl9p bml0IC0tdHBtMmtleT0oaGQwLGdwdDEpL2VmaS9ncnViL3NlYWxlZC50cG0KY3J5cHRvbW91bnQg LXUgPFNEQjFfVVVJRD4gLVAgdHBtMgoKT3IsIGZvciB0aGUgcmF3IHNlYWxlZCBrZXk6Cgp0cG0y X2tleV9wcm90ZWN0b3JfaW5pdCAtLWtleWZpbGU9KGhkMCxncHQxKS9lZmkvZ3J1Yi9zZWFsZWQu a2V5IC0tcGNycz0wLDIsNCw3LDkKY3J5cHRvbW91bnQgLXUgPFNEQjFfVVVJRD4gLVAgdHBtMgoK VGhlIGJlbmVmaXQgb2YgdXNpbmcgVFBNIDIuMCBLZXkgRmlsZSBpcyB0aGF0IHRoZSBQQ1Igc2V0 IGlzIGFscmVhZHkKd3JpdHRlbiBpbiB0aGUga2V5IGZpbGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQg dG8gc3BlY2lmeSBQQ1JzIHdoZW4KaW52b2tpbmcgdHBtMl9rZXlfcHJvdGVjdG9yX2luaXQuCgpT aWduZWQtb2ZmLWJ5OiBIZXJuYW4gR2F0dGEgPGhlZ2F0dGFAbGludXgubWljcm9zb2Z0LmNvbT4K U2lnbmVkLW9mZi1ieTogR2FyeSBMaW4gPGdsaW5Ac3VzZS5jb20+ClJldmlld2VkLWJ5OiBTdGVm YW4gQmVyZ2VyIDxzdGVmYW5iQGxpbnV4LmlibS5jb20+ClJldmlld2VkLWJ5OiBEYW5pZWwgS2lw ZXIgPGRhbmllbC5raXBlckBvcmFjbGUuY29tPgotLS0KIC5naXRpZ25vcmUgICAgICAgICAgICAg ICAgfCAgICAyICsKIE1ha2VmaWxlLnV0aWwuZGVmICAgICAgICAgfCAgIDI2ICsKIGNvbmZpZ3Vy ZS5hYyAgICAgICAgICAgICAgfCAgIDMwICsKIGRvY3MvbWFuL2dydWItcHJvdGVjdC5oMm0gfCAg ICA0ICsKIHV0aWwvZ3J1Yi1wcm90ZWN0LmMgICAgICAgfCAxNDA3ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTQ2OSBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jcy9tYW4vZ3J1Yi1wcm90ZWN0LmgybQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHV0aWwvZ3J1Yi1wcm90ZWN0LmMKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIv LmdpdGlnbm9yZQppbmRleCA0YzFmOTFkYjguLjIxMDVkODdjOCAxMDA2NDQKLS0tIGEvLmdpdGln bm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xNjksNiArMTY5LDggQEAgd2lkdGhzcGVjLmJpbgog L2dydWItb2ZwYXRobmFtZS5leGUKIC9ncnViLXByb2JlCiAvZ3J1Yi1wcm9iZS5leGUKKy9ncnVi LXByb3RlY3QKKy9ncnViLXByb3RlY3QuZXhlCiAvZ3J1Yi1yZWJvb3QKIC9ncnViLXJlbmRlci1s YWJlbAogL2dydWItcmVuZGVyLWxhYmVsLmV4ZQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudXRpbC5k ZWYgYi9NYWtlZmlsZS51dGlsLmRlZgppbmRleCBmYjgyZjU5YTAuLjA3NGMwYWZmNyAxMDA2NDQK LS0tIGEvTWFrZWZpbGUudXRpbC5kZWYKKysrIGIvTWFrZWZpbGUudXRpbC5kZWYKQEAgLTIwOCw2 ICsyMDgsMzIgQEAgcHJvZ3JhbSA9IHsKICAgbGRhZGQgPSAnJChMSUJJTlRMKSAkKExJQkRFVk1B UFBFUikgJChMSUJaRlMpICQoTElCTlZQQUlSKSAkKExJQkdFT00pJzsKIH07CiAKK3Byb2dyYW0g PSB7CisgIG5hbWUgPSBncnViLXByb3RlY3Q7CisgIG1hbnNlY3Rpb24gPSAxOworCisgIGNvbW1v biA9IGdydWItY29yZS9rZXJuL2VtdS9hcmdwX2NvbW1vbi5jOworICBjb21tb24gPSBncnViLWNv cmUvb3NkZXAvaW5pdC5jOworICBjb21tb24gPSBncnViLWNvcmUvbGliL3RzczIvYnVmZmVyLmM7 CisgIGNvbW1vbiA9IGdydWItY29yZS9saWIvdHNzMi90c3MyX211LmM7CisgIGNvbW1vbiA9IGdy dWItY29yZS9saWIvdHNzMi90cG0yX2NtZC5jOworICBjb21tb24gPSBncnViLWNvcmUvY29tbWFu ZHMvdHBtMl9rZXlfcHJvdGVjdG9yL2FyZ3MuYzsKKyAgY29tbW9uID0gZ3J1Yi1jb3JlL2NvbW1h bmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5X2FzbjFfdGFiLmM7CisgIGNvbW1vbiA9IHV0 aWwvZ3J1Yi1wcm90ZWN0LmM7CisgIGNvbW1vbiA9IHV0aWwvcHJvYmUuYzsKKworICBjZmxhZ3Mg PSAnLUkkKHNyY2RpcikvZ3J1Yi1jb3JlL2xpYi90c3MyIC1JJChzcmNkaXIpL2dydWItY29yZS9j b21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3InOworCisgIGxkYWRkID0gbGliZ3J1Ym1vZHMuYTsK KyAgbGRhZGQgPSBsaWJncnViZ2NyeS5hOworICBsZGFkZCA9IGxpYmdydWJrZXJuLmE7CisgIGxk YWRkID0gZ3J1Yi1jb3JlL2xpYi9nbnVsaWIvbGliZ251LmE7CisgIGxkYWRkID0gJyQoTElCVEFT TjEpJzsKKyAgbGRhZGQgPSAnJChMSUJJTlRMKSAkKExJQkRFVk1BUFBFUikgJChMSUJVVElMKSAk KExJQlpGUykgJChMSUJOVlBBSVIpICQoTElCR0VPTSknOworCisgIGNvbmRpdGlvbiA9IENPTkRf R1JVQl9QUk9URUNUOworfTsKKwogcHJvZ3JhbSA9IHsKICAgbmFtZSA9IGdydWItbWtyZWxwYXRo OwogICBtYW5zZWN0aW9uID0gMTsKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3Vy ZS5hYwppbmRleCA0NThiODM4MmIuLmFkMWU3YmVhNSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFj CisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNzYsNiArNzYsNyBAQCBncnViX1RSQU5TRk9STShbZ3J1 Yi1ta3Bhc3N3ZC1wYmtkZjJdKQogZ3J1Yl9UUkFOU0ZPUk0oW2dydWItbWtyZWxwYXRoXSkKIGdy dWJfVFJBTlNGT1JNKFtncnViLW1rcmVzY3VlXSkKIGdydWJfVFJBTlNGT1JNKFtncnViLXByb2Jl XSkKK2dydWJfVFJBTlNGT1JNKFtncnViLXByb3RlY3RdKQogZ3J1Yl9UUkFOU0ZPUk0oW2dydWIt cmVib290XSkKIGdydWJfVFJBTlNGT1JNKFtncnViLXNjcmlwdC1jaGVja10pCiBncnViX1RSQU5T Rk9STShbZ3J1Yi1zZXQtZGVmYXVsdF0pCkBAIC0yMDY4LDYgKzIwNjksMjkgQEAgZmkKIEFDX1NV QlNUKFtMSUJaRlNdKQogQUNfU1VCU1QoW0xJQk5WUEFJUl0pCiAKK0FDX0FSR19FTkFCTEUoW2dy dWItcHJvdGVjdF0sCisJICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ncnViLXByb3Rl Y3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnVpbGQgYW5kIGluc3RhbGwgdGhl IGBncnViLXByb3RlY3QnIHV0aWxpdHkgKGRlZmF1bHQ9Z3Vlc3NlZCldKV0pCitpZiB0ZXN0IHgi JGVuYWJsZV9ncnViX3Byb3RlY3QiID0geG5vIDsgdGhlbgorICBncnViX3Byb3RlY3RfZXhjdXNl PSJleHBsaWNpdGx5IGRpc2FibGVkIgorZmkKKworTElCVEFTTjE9CitpZiB0ZXN0IHgiJGdydWJf cHJvdGVjdF9leGN1c2UiID0geCA7IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKFt0YXNuMV0sIFthc24x X3dyaXRlX3ZhbHVlXSwgW0xJQlRBU04xPSItbHRhc24xIl0sIFtncnViX3Byb3RlY3RfZXhjdXNl PSJuZWVkIGxpYnRhc24xIGxpYnJhcnkiXSkKK2ZpCitBQ19TVUJTVChbTElCVEFTTjFdKQorCitp ZiB0ZXN0IHgiJGVuYWJsZV9ncnViX3Byb3RlY3QiID0geHllcyAmJiB0ZXN0IHgiJGdydWJfcHJv dGVjdF9leGN1c2UiICE9IHggOyB0aGVuCisgIEFDX01TR19FUlJPUihbZ3J1Yi1wcm90ZWN0IHdh cyBleHBsaWNpdGx5IHJlcXVlc3RlZCBidXQgY2FuJ3QgYmUgY29tcGlsZWQgKCRncnViX3Byb3Rl Y3RfZXhjdXNlKV0pCitmaQoraWYgdGVzdCB4IiRncnViX3Byb3RlY3RfZXhjdXNlIiA9IHggOyB0 aGVuCitlbmFibGVfZ3J1Yl9wcm90ZWN0PXllcworZWxzZQorZW5hYmxlX2dydWJfcHJvdGVjdD1u bworZmkKK0FDX1NVQlNUKFtlbmFibGVfZ3J1Yl9wcm90ZWN0XSkKKwogTElCUz0iIgogCiBBQ19T VUJTVChbRk9OVF9TT1VSQ0VdKQpAQCAtMjE4NCw2ICsyMjA4LDcgQEAgQU1fQ09ORElUSU9OQUwo W0NPTkRfR1JVQl9FTVVfU0RMXSwgW3Rlc3QgeCRlbmFibGVfZ3J1Yl9lbXVfc2RsID0geHllc10p CiBBTV9DT05ESVRJT05BTChbQ09ORF9HUlVCX0VNVV9QQ0ldLCBbdGVzdCB4JGVuYWJsZV9ncnVi X2VtdV9wY2kgPSB4eWVzXSkKIEFNX0NPTkRJVElPTkFMKFtDT05EX0dSVUJfTUtGT05UXSwgW3Rl c3QgeCRlbmFibGVfZ3J1Yl9ta2ZvbnQgPSB4eWVzXSkKIEFNX0NPTkRJVElPTkFMKFtDT05EX0dS VUJfTU9VTlRdLCBbdGVzdCB4JGVuYWJsZV9ncnViX21vdW50ID0geHllc10pCitBTV9DT05ESVRJ T05BTChbQ09ORF9HUlVCX1BST1RFQ1RdLCBbdGVzdCB4JGVuYWJsZV9ncnViX3Byb3RlY3QgPSB4 eWVzXSkKIEFNX0NPTkRJVElPTkFMKFtDT05EX0hBVkVfRk9OVF9TT1VSQ0VdLCBbdGVzdCB4JEZP TlRfU09VUkNFICE9IHhdKQogaWYgdGVzdCB4JEZPTlRfU09VUkNFICE9IHggOyB0aGVuCiAgICBI QVZFX0ZPTlRfU09VUkNFPTEKQEAgLTIzMTEsNiArMjMzNiwxMSBAQCBlY2hvIGdydWItbW91bnQ6 IFllcwogZWxzZQogZWNobyBncnViLW1vdW50OiBObyAiKCRncnViX21vdW50X2V4Y3VzZSkiCiBm aQoraWYgWyB4IiRncnViX3Byb3RlY3RfZXhjdXNlIiA9IHggXTsgdGhlbgorZWNobyBncnViLXBy b3RlY3Q6IFllcworZWxzZQorZWNobyBncnViLXByb3RlY3Q6IE5vICIoJGdydWJfcHJvdGVjdF9l eGN1c2UpIgorZmkKIGlmIFsgeCIkc3RhcmZpZWxkX2V4Y3VzZSIgPSB4IF07IHRoZW4KIGVjaG8g c3RhcmZpZWxkIHRoZW1lOiBZZXMKIGVjaG8gV2l0aCBEZWphVnVTYW5zIGZvbnQgZnJvbSAkREpW VV9GT05UX1NPVVJDRQpkaWZmIC0tZ2l0IGEvZG9jcy9tYW4vZ3J1Yi1wcm90ZWN0LmgybSBiL2Rv Y3MvbWFuL2dydWItcHJvdGVjdC5oMm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwLi5lY2YxYzllYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbi9ncnViLXByb3RlY3Qu aDJtCkBAIC0wLDAgKzEsNCBAQAorW05BTUVdCitncnViLXByb3RlY3QgXC0gcHJvdGVjdCBhIGRp c2sga2V5IHdpdGggYSBrZXkgcHJvdGVjdG9yCitbREVTQ1JJUFRJT05dCitncnViLXByb3RlY3Qg aGVscHMgdG8gcHJvdGVjdCBhIGRpc2sgZW5jcnlwdGlvbiBrZXkgd2l0aCBhIHNwZWNpZmllZCBr ZXkgcHJvdGVjdG9yLgpkaWZmIC0tZ2l0IGEvdXRpbC9ncnViLXByb3RlY3QuYyBiL3V0aWwvZ3J1 Yi1wcm90ZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi41YjdlOTUy ZjQKLS0tIC9kZXYvbnVsbAorKysgYi91dGlsL2dydWItcHJvdGVjdC5jCkBAIC0wLDAgKzEsMTQw NyBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29w eXJpZ2h0IChDKSAyMDIyIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykg MjAyMyBTVVNFIExMQworICogIENvcHlyaWdodCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Y29uZmln Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8 bGlidGFzbjEuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Z3J1Yi9lbXUvaG9zdGRpc2suaD4KKyNpbmNs dWRlIDxncnViL2VtdS9taXNjLmg+CisKKyNpbmNsdWRlIDxncnViL3V0aWwvbWlzYy5oPgorCisj aW5jbHVkZSA8dHNzMl9idWZmZXIuaD4KKyNpbmNsdWRlIDx0c3MyX211Lmg+CisjaW5jbHVkZSA8 dGNnMi5oPgorI2luY2x1ZGUgPHRwbTJfYXJncy5oPgorI2luY2x1ZGUgPHRwbTIuaD4KKworI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctcHJvdG90eXBlcyIKKyNwcmFn bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyNpbmNs dWRlIDxhcmdwLmg+CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yICItV21pc3NpbmctcHJv dG90eXBlcyIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgIi1XbWlzc2luZy1kZWNsYXJh dGlvbnMiCisKKyNpbmNsdWRlICJwcm9nbmFtZS5oIgorCisvKiBVbnByaW50YWJsZSBvcHRpb24g a2V5cyBmb3IgYXJncCAqLwordHlwZWRlZiBlbnVtIHByb3RlY3Rfb3B0Cit7CisgIC8qIEdlbmVy YWwgKi8KKyAgUFJPVEVDVF9PUFRfQUNUSU9OICAgICAgPSAnYScsCisgIFBST1RFQ1RfT1BUX1BS T1RFQ1RPUiAgID0gJ3AnLAorICAvKiBUUE0yICovCisgIFBST1RFQ1RfT1BUX1RQTTJfREVWSUNF ID0gMHgxMDAsCisgIFBST1RFQ1RfT1BUX1RQTTJfUENSUywKKyAgUFJPVEVDVF9PUFRfVFBNMl9B U1lNTUVUUklDLAorICBQUk9URUNUX09QVF9UUE0yX0JBTkssCisgIFBST1RFQ1RfT1BUX1RQTTJf U1JLLAorICBQUk9URUNUX09QVF9UUE0yX0tFWUZJTEUsCisgIFBST1RFQ1RfT1BUX1RQTTJfT1VU RklMRSwKKyAgUFJPVEVDVF9PUFRfVFBNMl9FVklDVCwKKyAgUFJPVEVDVF9PUFRfVFBNMl9UUE0y S0VZCit9IHByb3RlY3Rfb3B0X3Q7CisKKy8qIE9wdGlvbiBmbGFncyB0byBrZWVwIHRyYWNrIG9m IHNwZWNpZmllZCBhcmd1bWVudHMgKi8KK3R5cGVkZWYgZW51bSBwcm90ZWN0X2FyZworeworICAv KiBHZW5lcmFsICovCisgIFBST1RFQ1RfQVJHX0FDVElPTiAgICAgICAgICA9IDEgPDwgMCwKKyAg UFJPVEVDVF9BUkdfUFJPVEVDVE9SICAgICAgID0gMSA8PCAxLAorICAvKiBUUE0yICovCisgIFBS T1RFQ1RfQVJHX1RQTTJfREVWSUNFICAgICA9IDEgPDwgMiwKKyAgUFJPVEVDVF9BUkdfVFBNMl9Q Q1JTICAgICAgID0gMSA8PCAzLAorICBQUk9URUNUX0FSR19UUE0yX0FTWU1NRVRSSUMgPSAxIDw8 IDQsCisgIFBST1RFQ1RfQVJHX1RQTTJfQkFOSyAgICAgICA9IDEgPDwgNSwKKyAgUFJPVEVDVF9B UkdfVFBNMl9TUksgICAgICAgID0gMSA8PCA2LAorICBQUk9URUNUX0FSR19UUE0yX0tFWUZJTEUg ICAgPSAxIDw8IDcsCisgIFBST1RFQ1RfQVJHX1RQTTJfT1VURklMRSAgICA9IDEgPDwgOCwKKyAg UFJPVEVDVF9BUkdfVFBNMl9FVklDVCAgICAgID0gMSA8PCA5LAorICBQUk9URUNUX0FSR19UUE0y X1RQTTJLRVkgICAgPSAxIDw8IDEwCit9IHByb3RlY3RfYXJnX3Q7CisKK3R5cGVkZWYgZW51bSBw cm90ZWN0X3Byb3RlY3RvcgoreworICBQUk9URUNUX1RZUEVfRVJST1IsCisgIFBST1RFQ1RfVFlQ RV9UUE0yCit9IHByb3RlY3RfcHJvdGVjdG9yX3Q7CisKK3R5cGVkZWYgZW51bSBwcm90ZWN0X2Fj dGlvbgoreworICBQUk9URUNUX0FDVElPTl9FUlJPUiwKKyAgUFJPVEVDVF9BQ1RJT05fQURELAor ICBQUk9URUNUX0FDVElPTl9SRU1PVkUKK30gcHJvdGVjdF9hY3Rpb25fdDsKKwordHlwZWRlZiBz dHJ1Y3QgcHJvdGVjdF9hcmdzCit7CisgIHByb3RlY3RfYXJnX3QgYXJnczsKKyAgcHJvdGVjdF9h Y3Rpb25fdCBhY3Rpb247CisgIHByb3RlY3RfcHJvdGVjdG9yX3QgcHJvdGVjdG9yOworCisgIGNv bnN0IGNoYXIgKnRwbTJfZGV2aWNlOworICBncnViX3VpbnQ4X3QgdHBtMl9wY3JzW1RQTV9NQVhf UENSU107CisgIGdydWJfdWludDhfdCB0cG0yX3Bjcl9jb3VudDsKKyAgZ3J1Yl9zcmtfdHlwZV90 IHNya190eXBlOworICBUUE1fQUxHX0lEX3QgdHBtMl9iYW5rOworICBUUE1fSEFORExFX3QgdHBt Ml9zcms7CisgIGNvbnN0IGNoYXIgKnRwbTJfa2V5ZmlsZTsKKyAgY29uc3QgY2hhciAqdHBtMl9v dXRmaWxlOworICBib29sIHRwbTJfZXZpY3Q7CisgIGJvb2wgdHBtMl90cG0ya2V5OworfSBwcm90 ZWN0X2FyZ3NfdDsKKworc3RhdGljIHN0cnVjdCBhcmdwX29wdGlvbiBwcm90ZWN0X29wdGlvbnNb XSA9CisgIHsKKyAgICAvKiBUb3AtbGV2ZWwgb3B0aW9ucyAqLworICAgeworICAgICAgLm5hbWUg ID0gImFjdGlvbiIsCisgICAgICAua2V5ICAgPSAnYScsCisgICAgICAuYXJnICAgPSAiYWRkfHJl bW92ZSIsCisgICAgICAuZmxhZ3MgPSAwLAorICAgICAgLmRvYyAgID0KKwlOXygiQWRkIG9yIHJl bW92ZSBhIGtleSBwcm90ZWN0b3IgdG8gb3IgZnJvbSBhIGtleS4iKSwKKyAgICAgIC5ncm91cCA9 IDAKKyAgICB9LAorICAgIHsKKyAgICAgIC5uYW1lICA9ICJwcm90ZWN0b3IiLAorICAgICAgLmtl eSAgID0gJ3AnLAorICAgICAgLmFyZyAgID0gInRwbTIiLAorICAgICAgLmZsYWdzID0gMCwKKyAg ICAgIC5kb2MgICA9CisJTl8oIlNldCBrZXkgcHJvdGVjdG9yIHRvIHVzZSAob25seSB0cG0yIGlz IGN1cnJlbnRseSBzdXBwb3J0ZWQpLiIpLAorICAgICAgLmdyb3VwID0gMAorICAgIH0sCisgICAg LyogVFBNMiBrZXkgcHJvdGVjdG9yIG9wdGlvbnMgKi8KKyAgICB7CisgICAgICAubmFtZSA9ICJ0 cG0yLWRldmljZSIsCisgICAgICAua2V5ICAgPSBQUk9URUNUX09QVF9UUE0yX0RFVklDRSwKKyAg ICAgIC5hcmcgICA9ICJGSUxFIiwKKyAgICAgIC5mbGFncyA9IDAsCisgICAgICAuZG9jICAgPQor CU5fKCJTZXQgdGhlIHBhdGggdG8gdGhlIFRQTTIgZGV2aWNlLiAoZGVmYXVsdDogL2Rldi90cG0w KSIpLAorICAgICAgLmdyb3VwID0gMAorICAgIH0sCisgICAgeworICAgICAgLm5hbWUgPSAidHBt Mi1wY3JzIiwKKyAgICAgIC5rZXkgICA9IFBST1RFQ1RfT1BUX1RQTTJfUENSUywKKyAgICAgIC5h cmcgICA9ICIwWywxXS4uLiIsCisgICAgICAuZmxhZ3MgPSAwLAorICAgICAgLmRvYyAgID0KKwlO XygiU2V0IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgUENScyB1c2VkIHRvIGF1dGhvcml6ZSBr ZXkgcmVsZWFzZSAiCisJICAgImUuZy4sICc3LDExJy4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgUENS IDB+NyBhcmUgdXNlZCBieSB0aGUgIgorCSAgICJmaXJtd2FyZSBhbmQgdGhlIG1lYXN1cmVtZW50 IHJlc3VsdCBtYXkgY2hhbmdlIGFmdGVyIGEgIgorCSAgICJmaXJtd2FyZSB1cGRhdGUgKGZvciBi YXJlbWV0YWwgc3lzdGVtcykgb3IgYSBwYWNrYWdlICIKKwkgICAiKE9WTUYvU0xPRikgdXBkYXRl IGluIHRoZSBWTSBob3N0LiBUaGlzIG1heSBsZWFkIHRvICIKKwkgICAidGhlIGZhaWx1cmUgb2Yg a2V5IHVuc2VhbGluZy4gKGRlZmF1bHQ6IDcpIiksCisgICAgICAuZ3JvdXAgPSAwCisgICAgfSwK KyAgICB7CisgICAgICAubmFtZSA9ICJ0cG0yLWJhbmsiLAorICAgICAgLmtleSAgPSBQUk9URUNU X09QVF9UUE0yX0JBTkssCisgICAgICAuYXJnICAgPSAiQUxHIiwKKyAgICAgIC5mbGFncyA9IDAs CisgICAgICAuZG9jICAgPQorCU5fKCJTZXQgdGhlIGJhbmsgb2YgUENScyB1c2VkIHRvIGF1dGhv cml6ZSBrZXkgcmVsZWFzZTogIgorCSAgICJTSEExLCBTSEEyNTYsIFNIQTM4NCwgb3IgU0hBNTEy LiAoZGVmYXVsdDogU0hBMjU2KSIpLAorICAgICAgLmdyb3VwID0gMAorICAgIH0sCisgICAgewor ICAgICAgLm5hbWUgPSAidHBtMi1rZXlmaWxlIiwKKyAgICAgIC5rZXkgICA9IFBST1RFQ1RfT1BU X1RQTTJfS0VZRklMRSwKKyAgICAgIC5hcmcgICA9ICJGSUxFIiwKKyAgICAgIC5mbGFncyA9IDAs CisgICAgICAuZG9jICAgPQorCU5fKCJTZXQgdGhlIHBhdGggdG8gYSBmaWxlIHRoYXQgY29udGFp bnMgdGhlIGNsZWFydGV4dCBrZXkgdG8gcHJvdGVjdC4iKSwKKyAgICAgIC5ncm91cCA9IDAKKyAg ICB9LAorICAgIHsKKyAgICAgIC5uYW1lID0gInRwbTItb3V0ZmlsZSIsCisgICAgICAua2V5ICAg PSBQUk9URUNUX09QVF9UUE0yX09VVEZJTEUsCisgICAgICAuYXJnICAgPSAiRklMRSIsCisgICAg ICAuZmxhZ3MgPSAwLAorICAgICAgLmRvYyAgID0KKwlOXygiU2V0IHRoZSBwYXRoIHRvIHRoZSBm aWxlIHRoYXQgd2lsbCBjb250YWluIHRoZSBrZXkgYWZ0ZXIgc2VhbGluZyAiCisJICAgIihtdXN0 IGJlIGFjY2Vzc2libGUgdG8gR1JVQiBkdXJpbmcgYm9vdCkuIiksCisgICAgICAuZ3JvdXAgPSAw CisgICAgfSwKKyAgICB7CisgICAgICAubmFtZSA9ICJ0cG0yLXNyayIsCisgICAgICAua2V5ICAg PSBQUk9URUNUX09QVF9UUE0yX1NSSywKKyAgICAgIC5hcmcgICA9ICJOVU0iLAorICAgICAgLmZs YWdzID0gMCwKKyAgICAgIC5kb2MgICA9CisJTl8oIlNldCB0aGUgU1JLIGhhbmRsZSBpZiB0aGUg U1JLIGlzIHRvIGJlIG1hZGUgcGVyc2lzdGVudC4iKSwKKyAgICAgIC5ncm91cCA9IDAKKyAgICB9 LAorICAgIHsKKyAgICAgIC5uYW1lID0gInRwbTItYXN5bW1ldHJpYyIsCisgICAgICAua2V5ICAg PSBQUk9URUNUX09QVF9UUE0yX0FTWU1NRVRSSUMsCisgICAgICAuYXJnICAgPSAiVFlQRSIsCisg ICAgICAuZmxhZ3MgPSAwLAorICAgICAgLmRvYyAgID0KKwlOXygiU2V0IHRoZSB0eXBlIG9mIFNS SzogUlNBIChSU0EyMDQ4KSBhbmQgRUNDIChFQ0NfTklTVF9QMjU2KS4iCisJICAgIihkZWZhdWx0 OiBFQ0MpIiksCisgICAgICAuZ3JvdXAgPSAwCisgICAgfSwKKyAgICB7CisgICAgICAubmFtZSA9 ICJ0cG0yLWV2aWN0IiwKKyAgICAgIC5rZXkgICA9IFBST1RFQ1RfT1BUX1RQTTJfRVZJQ1QsCisg ICAgICAuYXJnICAgPSBOVUxMLAorICAgICAgLmZsYWdzID0gMCwKKyAgICAgIC5kb2MgICA9CisJ Tl8oIkV2aWN0IGEgcHJldmlvdXNseSBwZXJzaXN0ZWQgU1JLIGZyb20gdGhlIFRQTSwgaWYgYW55 LiIpLAorICAgICAgLmdyb3VwID0gMAorICAgIH0sCisgICAgeworICAgICAgLm5hbWUgPSAidHBt MmtleSIsCisgICAgICAua2V5ICAgPSBQUk9URUNUX09QVF9UUE0yX1RQTTJLRVksCisgICAgICAu YXJnICAgPSBOVUxMLAorICAgICAgLmZsYWdzID0gMCwKKyAgICAgIC5kb2MgICA9CisJTl8oIlVz ZSBUUE0gMi4wIEtleSBGaWxlIGZvcm1hdC4iKSwKKyAgICAgIC5ncm91cCA9IDAKKyAgICB9LAor ICAgIC8qIEVuZCBvZiBsaXN0ICovCisgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgfTsKKwor c3RhdGljIGludCBwcm90ZWN0b3JfdHBtMl9mZCA9IC0xOworCitzdGF0aWMgZ3J1Yl9lcnJfdAor cHJvdGVjdF9yZWFkX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVwYXRoLCB2b2lkICoqYnVmZmVyLCBz aXplX3QgKmJ1ZmZlcl9zaXplKQoreworICBncnViX2Vycl90IGVycjsKKyAgRklMRSAqZjsKKyAg bG9uZyBsZW47CisgIHZvaWQgKmJ1ZjsKKworICBmID0gZm9wZW4gKGZpbGVwYXRoLCAicmIiKTsK KyAgaWYgKGYgPT0gTlVMTCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIE5fKCJDb3Vs ZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiksIGZpbGVwYXRoKTsKKyAgICAgIHJldHVybiBHUlVCX0VS Ul9GSUxFX05PVF9GT1VORDsKKyAgICB9CisKKyAgaWYgKGZzZWVrIChmLCAwLCBTRUVLX0VORCkp CisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBOXygiQ291bGQgbm90IHNlZWsgZmlsZTog JXNcbiIpLCBmaWxlcGF0aCk7CisgICAgICBlcnIgPSBHUlVCX0VSUl9GSUxFX1JFQURfRVJST1I7 CisgICAgICBnb3RvIGV4aXQxOworICAgIH0KKworICBsZW4gPSBmdGVsbCAoZik7CisgIGlmIChs ZW4gPD0gMCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIE5fKCJDb3VsZCBub3QgZ2V0 IGZpbGUgbGVuZ3RoOiAlc1xuIiksIGZpbGVwYXRoKTsKKyAgICAgIGVyciA9IEdSVUJfRVJSX0ZJ TEVfUkVBRF9FUlJPUjsKKyAgICAgIGdvdG8gZXhpdDE7CisgICAgfQorCisgIHJld2luZCAoZik7 CisKKyAgYnVmID0gZ3J1Yl9tYWxsb2MgKGxlbik7CisgIGlmIChidWYgPT0gTlVMTCkKKyAgICB7 CisgICAgICBmcHJpbnRmIChzdGRlcnIsIE5fKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZv ciBmaWxlOiAlc1xuIiksIGZpbGVwYXRoKTsKKyAgICAgIGVyciA9IEdSVUJfRVJSX09VVF9PRl9N RU1PUlk7CisgICAgICBnb3RvIGV4aXQxOworICAgIH0KKworICBpZiAoZnJlYWQgKGJ1ZiwgbGVu LCAxLCBmKSAhPSAxKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgTl8oIkNvdWxkIG5v dCByZWFkIGZpbGU6ICVzXG4iKSwgZmlsZXBhdGgpOworICAgICAgZXJyID0gR1JVQl9FUlJfRklM RV9SRUFEX0VSUk9SOworICAgICAgZ290byBleGl0MjsKKyAgICB9CisKKyAgKmJ1ZmZlciA9IGJ1 ZjsKKyAgKmJ1ZmZlcl9zaXplID0gbGVuOworCisgIGJ1ZiA9IE5VTEw7CisgIGVyciA9IEdSVUJf RVJSX05PTkU7CisKKyBleGl0MjoKKyAgZ3J1Yl9mcmVlIChidWYpOworCisgZXhpdDE6CisgIGZj bG9zZSAoZik7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK3Byb3Rl Y3Rfd3JpdGVfZmlsZSAoY29uc3QgY2hhciAqZmlsZXBhdGgsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90 IGJ1ZmZlcl9zaXplKQoreworICBncnViX2Vycl90IGVycjsKKyAgRklMRSAqZjsKKworICBmID0g Zm9wZW4gKGZpbGVwYXRoLCAid2IiKTsKKyAgaWYgKGYgPT0gTlVMTCkKKyAgICByZXR1cm4gR1JV Ql9FUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgaWYgKGZ3cml0ZSAoYnVmZmVyLCBidWZmZXJfc2l6 ZSwgMSwgZikgIT0gMSkKKyAgeworICAgIGVyciA9IEdSVUJfRVJSX1dSSVRFX0VSUk9SOworICAg IGdvdG8gZXhpdDsKKyAgfQorCisgIGVyciA9IEdSVUJfRVJSX05PTkU7CisKKyBleGl0OgorICBm Y2xvc2UgKGYpOworCisgIHJldHVybiBlcnI7Cit9CisKK2dydWJfZXJyX3QKK2dydWJfdGNnMl9n ZXRfbWF4X291dHB1dF9zaXplIChncnViX3NpemVfdCAqc2l6ZSkKK3sKKyAgaWYgKHNpemUgPT0g TlVMTCkKKyAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworCisgICpzaXplID0gR1JV Ql9UUE0yX0JVRkZFUl9DQVBBQ0lUWTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKwor Z3J1Yl9lcnJfdAorZ3J1Yl90Y2cyX3N1Ym1pdF9jb21tYW5kIChncnViX3NpemVfdCBpbnB1dF9z aXplLCBncnViX3VpbnQ4X3QgKmlucHV0LAorCQkJICBncnViX3NpemVfdCBvdXRwdXRfc2l6ZSwg Z3J1Yl91aW50OF90ICpvdXRwdXQpCit7CisgIGlmICh3cml0ZSAocHJvdGVjdG9yX3RwbTJfZmQs IGlucHV0LCBpbnB1dF9zaXplKSAhPSBpbnB1dF9zaXplKQorICAgIHsKKyAgICAgIGZwcmludGYg KHN0ZGVyciwgTl8oIkNvdWxkIG5vdCBzZW5kIFRQTSBjb21tYW5kLlxuIikpOworICAgICAgcmV0 dXJuIEdSVUJfRVJSX0JBRF9ERVZJQ0U7CisgICAgfQorCisgIGlmIChyZWFkIChwcm90ZWN0b3Jf dHBtMl9mZCwgb3V0cHV0LCBvdXRwdXRfc2l6ZSkgPCBzaXplb2YgKFRQTV9SRVNQT05TRV9IRUFE RVJfdCkpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCBOXygiQ291bGQgbm90IGdldCBU UE0gcmVzcG9uc2UuXG4iKSk7CisgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0RFVklDRTsKKyAg ICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Citw cm90ZWN0X3RwbTJfb3Blbl9kZXZpY2UgKGNvbnN0IGNoYXIgKmRldl9ub2RlKQoreworICBpZiAo cHJvdGVjdG9yX3RwbTJfZmQgIT0gLTEpCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyAg cHJvdGVjdG9yX3RwbTJfZmQgPSBvcGVuIChkZXZfbm9kZSwgT19SRFdSKTsKKyAgaWYgKHByb3Rl Y3Rvcl90cG0yX2ZkID09IC0xKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgTl8oIkNv dWxkIG5vdCBvcGVuIFRQTSBkZXZpY2UgKCVzKS5cbiIpLCBzdHJlcnJvciAoZXJybm8pKTsKKyAg ICAgIHJldHVybiBHUlVCX0VSUl9GSUxFX05PVF9GT1VORDsKKyAgICB9CisKKyAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Citwcm90ZWN0X3RwbTJfY2xvc2Vf ZGV2aWNlICh2b2lkKQoreworICBpbnQgZXJyOworCisgIGlmIChwcm90ZWN0b3JfdHBtMl9mZCA9 PSAtMSkKKyAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKworICBlcnIgPSBjbG9zZSAocHJvdGVj dG9yX3RwbTJfZmQpOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgIHsKKyAgICBmcHJp bnRmIChzdGRlcnIsIE5fKCJDb3VsZCBub3QgY2xvc2UgVFBNIGRldmljZSAoJXMpLlxuIiksIHN0 cmVycm9yIChlcnJubykpOworICAgIHJldHVybiBHUlVCX0VSUl9JTzsKKyAgfQorCisgIHByb3Rl Y3Rvcl90cG0yX2ZkID0gLTE7CisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMg Z3J1Yl9lcnJfdAorcHJvdGVjdF90cG0yX2dldF9wb2xpY3lfZGlnZXN0IChwcm90ZWN0X2FyZ3Nf dCAqYXJncywgVFBNMkJfRElHRVNUX3QgKmRpZ2VzdCkKK3sKKyAgVFBNX1JDX3QgcmM7CisgIFRQ TUxfUENSX1NFTEVDVElPTl90IHBjcl9zZWwgPSB7CisgICAgLmNvdW50ID0gMSwKKyAgICAucGNy U2VsZWN0aW9ucyA9IHsKKyAgICAgIHsKKwkuaGFzaCA9IGFyZ3MtPnRwbTJfYmFuaywKKwkuc2l6 ZU9mU2VsZWN0ID0gMywKKwkucGNyU2VsZWN0ID0gezB9CisgICAgICB9LAorICAgIH0KKyAgfTsK KyAgVFBNTF9QQ1JfU0VMRUNUSU9OX3QgcGNyX3NlbF9vdXQgPSB7MH07CisgIFRQTUxfRElHRVNU X3QgcGNyX3ZhbHVlcyA9IHswfTsKKyAgVFBNMkJfRElHRVNUX3QgcGNyX2RpZ2VzdCA9IHswfTsK KyAgZ3J1Yl9zaXplX3QgcGNyX2RpZ2VzdF9sZW47CisgIFRQTTJCX01BWF9CVUZGRVJfdCBwY3Jf Y29uY2F0ID0gezB9OworICBncnViX3NpemVfdCBwY3JfY29uY2F0X2xlbjsKKyAgZ3J1Yl91aW50 OF90ICpwY3JfY3Vyc29yOworICBUUE0yQl9OT05DRV90IG5vbmNlID0gezB9OworICBUUE0yQl9F TkNSWVBURURfU0VDUkVUX3Qgc2FsdCA9IHswfTsKKyAgVFBNVF9TWU1fREVGX3Qgc3ltbWV0cmlj ID0gezB9OworICBUUE1JX1NIX0FVVEhfU0VTU0lPTl90IHNlc3Npb24gPSAwOworICBUUE0yQl9E SUdFU1RfdCBwb2xpY3lfZGlnZXN0ID0gezB9OworICBncnViX3VpbnQ4X3QgaTsKKyAgZ3J1Yl9l cnJfdCBlcnI7CisKKyAgLyogUENSIFJlYWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ3MtPnRw bTJfcGNyX2NvdW50OyBpKyspCisgICAgVFBNU19QQ1JfU0VMRUNUSU9OX1NlbGVjdFBDUiAoJnBj cl9zZWwucGNyU2VsZWN0aW9uc1swXSwgYXJncy0+dHBtMl9wY3JzW2ldKTsKKworICByYyA9IGdy dWJfdHBtMl9wY3JfcmVhZCAoTlVMTCwgJnBjcl9zZWwsIE5VTEwsICZwY3Jfc2VsX291dCwgJnBj cl92YWx1ZXMsIE5VTEwpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgeworICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgUENScyAoVFBNMl9QQ1JfUmVhZDog MHgleCkuXG4iLCByYyk7CisgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0RFVklDRTsKKyAgICB9 CisKKyAgaWYgKChwY3Jfc2VsX291dC5jb3VudCAhPSBwY3Jfc2VsLmNvdW50KSB8fAorICAgICAg IChwY3Jfc2VsLnBjclNlbGVjdGlvbnNbMF0uc2l6ZU9mU2VsZWN0ICE9CisJcGNyX3NlbF9vdXQu cGNyU2VsZWN0aW9uc1swXS5zaXplT2ZTZWxlY3QpKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0 ZGVyciwgTl8oIkNvdWxkIG5vdCByZWFkIGFsbCB0aGUgc3BlY2lmaWVkIFBDUnMuXG4iKSk7Cisg ICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0RFVklDRTsKKyAgICB9CisKKyAgLyogQ29tcHV0ZSBQ Q1IgRGlnZXN0ICovCisgIHN3aXRjaCAoYXJncy0+dHBtMl9iYW5rKQorICAgIHsKKyAgICBjYXNl IFRQTV9BTEdfU0hBMToKKyAgICAgIHBjcl9kaWdlc3RfbGVuID0gVFBNX1NIQTFfRElHRVNUX1NJ WkU7CisgICAgICBicmVhazsKKyAgICBjYXNlIFRQTV9BTEdfU0hBMjU2OgorICAgICAgcGNyX2Rp Z2VzdF9sZW4gPSBUUE1fU0hBMjU2X0RJR0VTVF9TSVpFOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSBUUE1fQUxHX1NIQTM4NDoKKyAgICAgIHBjcl9kaWdlc3RfbGVuID0gVFBNX1NIQTM4NF9ESUdF U1RfU0laRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVFBNX0FMR19TSEE1MTI6CisgICAgICBw Y3JfZGlnZXN0X2xlbiA9IFRQTV9TSEE1MTJfRElHRVNUX1NJWkU7CisgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKyAgICB9CisK KyAgcGNyX2NvbmNhdF9sZW4gPSBwY3JfZGlnZXN0X2xlbiAqIGFyZ3MtPnRwbTJfcGNyX2NvdW50 OworICBpZiAocGNyX2NvbmNhdF9sZW4gPiBUUE1fTUFYX0RJR0VTVF9CVUZGRVIpCisgICAgewor ICAgICAgZnByaW50ZiAoc3RkZXJyLCBOXygiUENSIGNvbmNhdGVuYXRpb24gYnVmZmVyIG5vdCBi aWcgZW5vdWdoLlxuIikpOworICAgICAgcmV0dXJuIEdSVUJfRVJSX09VVF9PRl9SQU5HRTsKKyAg ICB9CisKKyAgcGNyX2N1cnNvciA9IHBjcl9jb25jYXQuYnVmZmVyOworICBmb3IgKGkgPSAwOyBp IDwgYXJncy0+dHBtMl9wY3JfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAocGNyX3ZhbHVl cy5kaWdlc3RzW2ldLnNpemUgIT0gcGNyX2RpZ2VzdF9sZW4pCisJeworCSAgZnByaW50ZiAoc3Rk ZXJyLAorCQkgICBOXygiQmFkIFBDUiB2YWx1ZSBzaXplOiBleHBlY3RlZCAlbGx1IGJ5dGVzIGJ1 dCBnb3QgJXUgYnl0ZXMuXG4iKSwKKwkJICAgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpcGNyX2Rp Z2VzdF9sZW4sIHBjcl92YWx1ZXMuZGlnZXN0c1tpXS5zaXplKTsKKwkgIHJldHVybiBHUlVCX0VS Ul9CQURfQVJHVU1FTlQ7CisJfQorCisgICAgICBncnViX21lbWNweSAocGNyX2N1cnNvciwgcGNy X3ZhbHVlcy5kaWdlc3RzW2ldLmJ1ZmZlciwgcGNyX2RpZ2VzdF9sZW4pOworICAgICAgcGNyX2N1 cnNvciArPSBwY3JfZGlnZXN0X2xlbjsKKyAgICB9CisgIHBjcl9jb25jYXQuc2l6ZSA9IHBjcl9j b25jYXRfbGVuOworCisgIHJjID0gZ3J1Yl90cG0yX2hhc2ggKE5VTEwsICZwY3JfY29uY2F0LCBh cmdzLT50cG0yX2JhbmssIFRQTV9SSF9OVUxMLCAmcGNyX2RpZ2VzdCwgTlVMTCwgTlVMTCk7Cisg IGlmIChyYyAhPSBUUE1fUkNfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIs ICJGYWlsZWQgdG8gZ2VuZXJhdGUgUENSIGRpZ2VzdCAoVFBNMl9IYXNoOiAweCV4KVxuIiwgcmMp OworICAgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9ERVZJQ0U7CisgICAgfQorCisgIC8qIFN0YXJ0 IFRyaWFsIFNlc3Npb24gKi8KKyAgbm9uY2Uuc2l6ZSA9IFRQTV9TSEEyNTZfRElHRVNUX1NJWkU7 CisgIHN5bW1ldHJpYy5hbGdvcml0aG0gPSBUUE1fQUxHX05VTEw7CisKKyAgcmMgPSBncnViX3Rw bTJfc3RhcnRhdXRoc2Vzc2lvbiAoVFBNX1JIX05VTEwsIFRQTV9SSF9OVUxMLCAwLCAmbm9uY2Us ICZzYWx0LAorCQkJCSAgIFRQTV9TRV9UUklBTCwgJnN5bW1ldHJpYywgVFBNX0FMR19TSEEyNTYs CisJCQkJICAgJnNlc3Npb24sIE5VTEwsIDApOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1Mp CisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIHN0YXJ0IHRyaWFsIHBv bGljeSBzZXNzaW9uIChUUE0yX1N0YXJ0QXV0aFNlc3Npb246IDB4JXgpLlxuIiwgcmMpOworICAg ICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9ERVZJQ0U7CisgICAgfQorCisgIC8qIFBDUiBQb2xpY3kg Ki8KKyAgcmMgPSBncnViX3RwbTJfcG9saWN5cGNyIChzZXNzaW9uLCBOVUxMLCAmcGNyX2RpZ2Vz dCwgJnBjcl9zZWwsIE5VTEwpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgewor ICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIHN1Ym1pdCBQQ1IgcG9saWN5IChUUE0y X1BvbGljeVBDUjogMHgleCkuXG4iLCByYyk7CisgICAgICBlcnIgPSBHUlVCX0VSUl9CQURfREVW SUNFOworICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgLyogUmV0cmlldmUgUG9saWN5IERp Z2VzdCAqLworICByYyA9IGdydWJfdHBtMl9wb2xpY3lnZXRkaWdlc3QgKHNlc3Npb24sIE5VTEws ICZwb2xpY3lfZGlnZXN0LCBOVUxMKTsKKyAgaWYgKHJjICE9IFRQTV9SQ19TVUNDRVNTKQorICAg IHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byBnZXQgcG9saWN5IGRpZ2VzdCAo VFBNMl9Qb2xpY3lHZXREaWdlc3Q6IDB4JXgpLlxuIiwgcmMpOworICAgICAgZXJyID0gR1JVQl9F UlJfQkFEX0RFVklDRTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIC8qIEVwaWxvZ3Vl ICovCisgICpkaWdlc3QgPSBwb2xpY3lfZGlnZXN0OworICBlcnIgPSBHUlVCX0VSUl9OT05FOwor CisgZXJyb3I6CisgIGdydWJfdHBtMl9mbHVzaGNvbnRleHQgKHNlc3Npb24pOworCisgIHJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Citwcm90ZWN0X3RwbTJfZ2V0X3NyayAocHJv dGVjdF9hcmdzX3QgKmFyZ3MsIFRQTV9IQU5ETEVfdCAqc3JrKQoreworICBUUE1fUkNfdCByYzsK KyAgVFBNMkJfUFVCTElDX3QgcHVibGljOworICBUUE1TX0FVVEhfQ09NTUFORF90IGF1dGhDb21t YW5kID0gezB9OworICBUUE0yQl9TRU5TSVRJVkVfQ1JFQVRFX3QgaW5TZW5zaXRpdmUgPSB7MH07 CisgIFRQTTJCX1BVQkxJQ190IGluUHVibGljID0gezB9OworICBUUE0yQl9EQVRBX3Qgb3V0c2lk ZUluZm8gPSB7MH07CisgIFRQTUxfUENSX1NFTEVDVElPTl90IGNyZWF0aW9uUGNyID0gezB9Owor ICBUUE0yQl9QVUJMSUNfdCBvdXRQdWJsaWMgPSB7MH07CisgIFRQTTJCX0NSRUFUSU9OX0RBVEFf dCBjcmVhdGlvbkRhdGEgPSB7MH07CisgIFRQTTJCX0RJR0VTVF90IGNyZWF0aW9uSGFzaCA9IHsw fTsKKyAgVFBNVF9US19DUkVBVElPTl90IGNyZWF0aW9uVGlja2V0ID0gezB9OworICBUUE0yQl9O QU1FX3Qgc3JrTmFtZSA9IHswfTsKKyAgVFBNX0hBTkRMRV90IHNya0hhbmRsZTsKKworICBpZiAo YXJncy0+dHBtMl9zcmsgIT0gMCkKKyAgICB7CisgICAgICAvKiBGaW5kIFNSSyAqLworICAgICAg cmMgPSBncnViX3RwbTJfcmVhZHB1YmxpYyAoYXJncy0+dHBtMl9zcmssIE5VTEwsICZwdWJsaWMp OworICAgICAgaWYgKHJjID09IFRQTV9SQ19TVUNDRVNTKQorCXsKKwkgIHByaW50ZiAoIlJlYWQg U1JLIGZyb20gMHgleFxuIiwgYXJncy0+dHBtMl9zcmspOworCSAgKnNyayA9IGFyZ3MtPnRwbTJf c3JrOworCSAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisJfQorCisgICAgICAvKiBUaGUgaGFuZGxl IGV4aXN0cyBidXQgaXRzIHB1YmxpYyBhcmVhIGNvdWxkIG5vdCBiZSByZWFkLiAqLworICAgICAg aWYgKChyYyAmIH5UUE1fUkNfTl9NQVNLKSAhPSBUUE1fUkNfSEFORExFKQorCXsKKwkgIGZwcmlu dGYgKHN0ZGVyciwgIkZhaWxlZCB0byByZXRyaWV2ZSBTUksgZnJvbSAweCV4IChUUE0yX1JlYWRQ dWJsaWM6IDB4JXgpLlxuIiwgYXJncy0+dHBtMl9zcmssIHJjKTsKKwkgIHJldHVybiBHUlVCX0VS Ul9CQURfREVWSUNFOworCX0KKyAgICB9CisKKyAgLyogQ3JlYXRlIFNSSyAqLworICBhdXRoQ29t bWFuZC5zZXNzaW9uSGFuZGxlID0gVFBNX1JTX1BXOworICBpblB1YmxpYy5wdWJsaWNBcmVhLnR5 cGUgPSBhcmdzLT5zcmtfdHlwZS50eXBlOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm5hbWVBbGcg PSBUUE1fQUxHX1NIQTI1NjsKKyAgaW5QdWJsaWMucHVibGljQXJlYS5vYmplY3RBdHRyaWJ1dGVz LnJlc3RyaWN0ZWQgPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMu dXNlcldpdGhBdXRoID0gMTsKKyAgaW5QdWJsaWMucHVibGljQXJlYS5vYmplY3RBdHRyaWJ1dGVz LmRlY3J5cHQgPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMuZml4 ZWRUUE0gPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMuZml4ZWRQ YXJlbnQgPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMuc2Vuc2l0 aXZlRGF0YU9yaWdpbiA9IDE7CisgIGluUHVibGljLnB1YmxpY0FyZWEub2JqZWN0QXR0cmlidXRl cy5ub0RBID0gMTsKKworICBzd2l0Y2ggKGFyZ3MtPnNya190eXBlLnR5cGUpCisgICAgeworICAg IGNhc2UgVFBNX0FMR19SU0E6CisgICAgICBpblB1YmxpYy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMu cnNhRGV0YWlsLnN5bW1ldHJpYy5hbGdvcml0aG0gPSBUUE1fQUxHX0FFUzsKKyAgICAgIGluUHVi bGljLnB1YmxpY0FyZWEucGFyYW1ldGVycy5yc2FEZXRhaWwuc3ltbWV0cmljLmtleUJpdHMuYWVz ID0gMTI4OworICAgICAgaW5QdWJsaWMucHVibGljQXJlYS5wYXJhbWV0ZXJzLnJzYURldGFpbC5z eW1tZXRyaWMubW9kZS5hZXMgPSBUUE1fQUxHX0NGQjsKKyAgICAgIGluUHVibGljLnB1YmxpY0Fy ZWEucGFyYW1ldGVycy5yc2FEZXRhaWwuc2NoZW1lLnNjaGVtZSA9IFRQTV9BTEdfTlVMTDsKKyAg ICAgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1ldGVycy5yc2FEZXRhaWwua2V5Qml0cyA9IGFy Z3MtPnNya190eXBlLmRldGFpbC5yc2FfYml0czsKKyAgICAgIGluUHVibGljLnB1YmxpY0FyZWEu cGFyYW1ldGVycy5yc2FEZXRhaWwuZXhwb25lbnQgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBj YXNlIFRQTV9BTEdfRUNDOgorICAgICAgaW5QdWJsaWMucHVibGljQXJlYS5wYXJhbWV0ZXJzLmVj Y0RldGFpbC5zeW1tZXRyaWMuYWxnb3JpdGhtID0gVFBNX0FMR19BRVM7CisgICAgICBpblB1Ymxp Yy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMuZWNjRGV0YWlsLnN5bW1ldHJpYy5rZXlCaXRzLmFlcyA9 IDEyODsKKyAgICAgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1ldGVycy5lY2NEZXRhaWwuc3lt bWV0cmljLm1vZGUuYWVzID0gVFBNX0FMR19DRkI7CisgICAgICBpblB1YmxpYy5wdWJsaWNBcmVh LnBhcmFtZXRlcnMuZWNjRGV0YWlsLnNjaGVtZS5zY2hlbWUgPSBUUE1fQUxHX05VTEw7CisgICAg ICBpblB1YmxpYy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMuZWNjRGV0YWlsLmN1cnZlSUQgPSBhcmdz LT5zcmtfdHlwZS5kZXRhaWwuZWNjX2N1cnZlOworICAgICAgaW5QdWJsaWMucHVibGljQXJlYS5w YXJhbWV0ZXJzLmVjY0RldGFpbC5rZGYuc2NoZW1lID0gVFBNX0FMR19OVUxMOworICAgICAgYnJl YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsK KyAgICB9CisKKyAgcmMgPSBncnViX3RwbTJfY3JlYXRlcHJpbWFyeSAoVFBNX1JIX09XTkVSLCAm YXV0aENvbW1hbmQsICZpblNlbnNpdGl2ZSwgJmluUHVibGljLAorCQkJICAgICAgICAmb3V0c2lk ZUluZm8sICZjcmVhdGlvblBjciwgJnNya0hhbmRsZSwgJm91dFB1YmxpYywKKwkJCSAgICAgICAg JmNyZWF0aW9uRGF0YSwgJmNyZWF0aW9uSGFzaCwgJmNyZWF0aW9uVGlja2V0LAorCQkJICAgICAg ICAmc3JrTmFtZSwgTlVMTCk7CisgIGlmIChyYyAhPSBUUE1fUkNfU1VDQ0VTUykKKyAgICB7Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIFNSSyAoVFBNMl9DcmVhdGVQ cmltYXJ5OiAweCV4KS5cbiIsIHJjKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfREVWSUNF OworICAgIH0KKworICAvKiBQZXJzaXN0IFNSSyAqLworICBpZiAoYXJncy0+dHBtMl9zcmsgIT0g MCkKKyAgICB7CisgICAgICByYyA9IGdydWJfdHBtMl9ldmljdGNvbnRyb2wgKFRQTV9SSF9PV05F Uiwgc3JrSGFuZGxlLCAmYXV0aENvbW1hbmQsIGFyZ3MtPnRwbTJfc3JrLCBOVUxMKTsKKyAgICAg IGlmIChyYyA9PSBUUE1fUkNfU1VDQ0VTUykKKwl7CisJICBncnViX3RwbTJfZmx1c2hjb250ZXh0 IChzcmtIYW5kbGUpOworCSAgc3JrSGFuZGxlID0gYXJncy0+dHBtMl9zcms7CisJfQorICAgICAg ZWxzZQorCWZwcmludGYgKHN0ZGVyciwKKwkJICJXYXJuaW5nOiBGYWlsZWQgdG8gcGVyc2lzdCBT UksgKDB4JXgpIChUUE0yX0V2aWN0Q29udHJvbDogMHgleCkuXG4iCisJCSAiQ29udGludWluZyBh bnl3YXkuLi5cbiIsIGFyZ3MtPnRwbTJfc3JrLCByYyk7CisgICAgfQorCisgIC8qIEVwaWxvZ3Vl ICovCisgICpzcmsgPSBzcmtIYW5kbGU7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisK K3N0YXRpYyBncnViX2Vycl90Citwcm90ZWN0X3RwbTJfc2VhbCAoVFBNMkJfRElHRVNUX3QgKnBv bGljeURpZ2VzdCwgVFBNX0hBTkRMRV90IHNyaywKKwkJICAgZ3J1Yl91aW50OF90ICpjbGVhclRl eHQsIGdydWJfc2l6ZV90IGNsZWFyVGV4dExlbmd0aCwKKwkJICAgdHBtMl9zZWFsZWRfa2V5X3Qg KnNlYWxlZF9rZXkpCit7CisgIFRQTV9SQ190IHJjOworICBUUE1TX0FVVEhfQ09NTUFORF90IGF1 dGhDb21tYW5kID0gezB9OworICBUUE0yQl9TRU5TSVRJVkVfQ1JFQVRFX3QgaW5TZW5zaXRpdmUg PSB7MH07CisgIFRQTTJCX1BVQkxJQ190IGluUHVibGljICA9IHswfTsKKyAgVFBNMkJfREFUQV90 IG91dHNpZGVJbmZvID0gezB9OworICBUUE1MX1BDUl9TRUxFQ1RJT05fdCBwY3Jfc2VsID0gezB9 OworICBUUE0yQl9QUklWQVRFX3Qgb3V0UHJpdmF0ZSA9IHswfTsKKyAgVFBNMkJfUFVCTElDX3Qg b3V0UHVibGljID0gezB9OworCisgIC8qIFNlYWwgRGF0YSAqLworICBhdXRoQ29tbWFuZC5zZXNz aW9uSGFuZGxlID0gVFBNX1JTX1BXOworCisgIGluU2Vuc2l0aXZlLnNlbnNpdGl2ZS5kYXRhLnNp emUgPSBjbGVhclRleHRMZW5ndGg7CisgIG1lbWNweShpblNlbnNpdGl2ZS5zZW5zaXRpdmUuZGF0 YS5idWZmZXIsIGNsZWFyVGV4dCwgY2xlYXJUZXh0TGVuZ3RoKTsKKworICBpblB1YmxpYy5wdWJs aWNBcmVhLnR5cGUgPSBUUE1fQUxHX0tFWUVESEFTSDsKKyAgaW5QdWJsaWMucHVibGljQXJlYS5u YW1lQWxnID0gVFBNX0FMR19TSEEyNTY7CisgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1ldGVy cy5rZXllZEhhc2hEZXRhaWwuc2NoZW1lLnNjaGVtZSA9IFRQTV9BTEdfTlVMTDsKKyAgaW5QdWJs aWMucHVibGljQXJlYS5hdXRoUG9saWN5ID0gKnBvbGljeURpZ2VzdDsKKworICByYyA9IGdydWJf dHBtMl9jcmVhdGUgKHNyaywgJmF1dGhDb21tYW5kLCAmaW5TZW5zaXRpdmUsICZpblB1YmxpYywg Jm91dHNpZGVJbmZvLAorCQkJICZwY3Jfc2VsLCAmb3V0UHJpdmF0ZSwgJm91dFB1YmxpYywgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgIGlmIChyYyAhPSBUUE1fUkNfU1VDQ0VTUykKKyAgICB7 CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gc2VhbCBrZXkgKFRQTTJfQ3JlYXRl OiAweCV4KS5cbiIsIHJjKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfREVWSUNFOworICAg IH0KKworICAvKiBFcGlsb2d1ZSAqLworICBzZWFsZWRfa2V5LT5wdWJsaWMgPSBvdXRQdWJsaWM7 CisgIHNlYWxlZF9rZXktPnByaXZhdGUgPSBvdXRQcml2YXRlOworCisgIHJldHVybiBHUlVCX0VS Ul9OT05FOworfQorCitleHRlcm4gYXNuMV9zdGF0aWNfbm9kZSB0cG0ya2V5X2FzbjFfdGFiW107 CisKKy8qIGlkLXNlYWxlZGtleSBPSUQgZGVmaW5lZCBpbiBUUE0gMi4wIEtleSBGaWxlcyBTcGVj ICovCisjZGVmaW5lIFRQTTJLRVlfU0VBTEVEX0tFWV9PSUQgIjIuMjMuMTMzLjEwLjEuNSIKKwor c3RhdGljIGdydWJfZXJyX3QKK3Byb3RlY3RfdHBtMl9leHBvcnRfdHBtMmtleSAoY29uc3QgcHJv dGVjdF9hcmdzX3QgKmFyZ3MsCisJCQkgICAgIHRwbTJfc2VhbGVkX2tleV90ICpzZWFsZWRfa2V5 KQoreworICBjb25zdCBjaGFyICpzZWFsZWRfa2V5X29pZCA9IFRQTTJLRVlfU0VBTEVEX0tFWV9P SUQ7CisgIGFzbjFfbm9kZSBhc24xX2RlZiA9IE5VTEw7CisgIGFzbjFfbm9kZSB0cG0ya2V5ID0g TlVMTDsKKyAgZ3J1Yl91aW50MzJfdCBwYXJlbnQ7CisgIGdydWJfdWludDMyX3QgY21kX2NvZGU7 CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIHBvbF9idWY7CisgIFRQTUxfUENSX1NFTEVDVElP Tl90IHBjcl9zZWwgPSB7CisgICAgLmNvdW50ID0gMSwKKyAgICAucGNyU2VsZWN0aW9ucyA9IHsK KyAgICAgIHsKKwkuaGFzaCA9IGFyZ3MtPnRwbTJfYmFuaywKKwkuc2l6ZU9mU2VsZWN0ID0gMywK KwkucGNyU2VsZWN0ID0gezB9CisgICAgICB9LAorICAgIH0KKyAgfTsKKyAgc3RydWN0IGdydWJf dHBtMl9idWZmZXIgcHViX2J1ZjsKKyAgc3RydWN0IGdydWJfdHBtMl9idWZmZXIgcHJpdl9idWY7 CisgIHZvaWQgKmRlcl9idWYgPSBOVUxMOworICBpbnQgZGVyX2J1Zl9zaXplID0gMDsKKyAgaW50 IGk7CisgIGludCByZXQ7CisgIGdydWJfZXJyX3QgZXJyOworCisgIGZvciAoaSA9IDA7IGkgPCBh cmdzLT50cG0yX3Bjcl9jb3VudDsgaSsrKQorICAgIFRQTVNfUENSX1NFTEVDVElPTl9TZWxlY3RQ Q1IgKCZwY3Jfc2VsLnBjclNlbGVjdGlvbnNbMF0sIGFyZ3MtPnRwbTJfcGNyc1tpXSk7CisKKyAg LyoKKyAgICogUHJlcGFyZSB0aGUgcGFyYW1ldGVycyBmb3IgVFBNX0NDX1BvbGljeVBDUjoKKyAg ICogZW1wdHkgcGNyRGlnZXN0IGFuZCB0aGUgdXNlciBzZWxlY3RlZCBQQ1JzCisgICAqLworICBn cnViX3RwbTJfYnVmZmVyX2luaXQgKCZwb2xfYnVmKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNr X3UxNiAoJnBvbF9idWYsIDApOworICBncnViX1RzczJfTVVfVFBNTF9QQ1JfU0VMRUNUSU9OX01h cnNoYWwgKCZwb2xfYnVmLCAmcGNyX3NlbCk7CisKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgm cHViX2J1Zik7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9QVUJMSUNfTWFyc2hhbCAoJnB1Yl9idWYs ICZzZWFsZWRfa2V5LT5wdWJsaWMpOworICBncnViX3RwbTJfYnVmZmVyX2luaXQgKCZwcml2X2J1 Zik7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9NYXJzaGFsICgmcHJpdl9idWYsIHNlYWxlZF9rZXkt PnByaXZhdGUuc2l6ZSwKKwkJCSAgICAgIHNlYWxlZF9rZXktPnByaXZhdGUuYnVmZmVyKTsKKyAg aWYgKHB1Yl9idWYuZXJyb3IgIT0gMCB8fCBwcml2X2J1Zi5lcnJvciAhPSAwKQorICAgIHJldHVy biBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisKKyAgcmV0ID0gYXNuMV9hcnJheTJ0cmVlICh0cG0y a2V5X2FzbjFfdGFiLCAmYXNuMV9kZWYsIE5VTEwpOworICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VT UykKKyAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworCisgIHJldCA9IGFzbjFfY3Jl YXRlX2VsZW1lbnQgKGFzbjFfZGVmLCAiVFBNMktFWS5UUE1LZXkiICwgJnRwbTJrZXkpOworICBp ZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5U OworCisgIC8qIFNldCAndHlwZScgdG8gInNlYWxlZCBrZXkiICovCisgIHJldCA9IGFzbjFfd3Jp dGVfdmFsdWUgKHRwbTJrZXksICJ0eXBlIiwgc2VhbGVkX2tleV9vaWQsIDEpOworICBpZiAocmV0 ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQg dG8gc2V0ICd0eXBlJzogMHgldVxuIiwgcmV0KTsKKyAgICAgIGVyciA9IEdSVUJfRVJSX0JBRF9B UkdVTUVOVDsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIC8qIFNldCAnZW1wdHlBdXRo JyB0byBUUlVFICovCisgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUgKHRwbTJrZXksICJlbXB0eUF1 dGgiLCAiVFJVRSIsIDEpOworICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAg ICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gc2V0ICdlbXB0eUF1dGgnOiAweCV4XG4iLCBy ZXQpOworICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworICAgICAgZ290byBlcnJv cjsKKyAgICB9CisKKyAgLyogU2V0ICdwb2xpY3knICovCisgIHJldCA9IGFzbjFfd3JpdGVfdmFs dWUgKHRwbTJrZXksICJwb2xpY3kiLCAiTkVXIiwgMSk7CisgIGlmIChyZXQgIT0gQVNOMV9TVUND RVNTKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byBzZXQgJ3BvbGlj eSc6IDB4JXhcbiIsIHJldCk7CisgICAgICBlcnIgPSBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7Cisg ICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgY21kX2NvZGUgPSBncnViX2NwdV90b19iZTMyIChU UE1fQ0NfUG9saWN5UENSKTsKKyAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZSAodHBtMmtleSwgInBv bGljeS4/TEFTVC5Db21tYW5kQ29kZSIsICZjbWRfY29kZSwKKwkJCSAgc2l6ZW9mIChjbWRfY29k ZSkpOworICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmIChz dGRlcnIsICJGYWlsZWQgdG8gc2V0ICdwb2xpY3kgQ29tbWFuZENvZGUnOiAweCV4XG4iLCByZXQp OworICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworICAgICAgZ290byBlcnJvcjsK KyAgICB9CisgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUgKHRwbTJrZXksICJwb2xpY3kuP0xBU1Qu Q29tbWFuZFBvbGljeSIsICZwb2xfYnVmLmRhdGEsCisJCQkgIHBvbF9idWYuc2l6ZSk7CisgIGlm IChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZh aWxlZCB0byBzZXQgJ3BvbGljeSBDb21tYW5kUG9saWN5JzogMHgleFxuIiwgcmV0KTsKKyAgICAg IGVyciA9IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQor CisgIC8qIFJlbW92ZSAnc2VjcmV0JyAqLworICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlICh0cG0y a2V5LCAic2VjcmV0IiwgTlVMTCwgMCk7CisgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAg IHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byByZW1vdmUgJ3NlY3JldCc6IDB4 JXhcbiIsIHJldCk7CisgICAgICBlcnIgPSBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisgICAgICBn b3RvIGVycm9yOworICAgIH0KKworICAvKiBSZW1vdmUgJ2F1dGhQb2xpY3knICovCisgIHJldCA9 IGFzbjFfd3JpdGVfdmFsdWUgKHRwbTJrZXksICJhdXRoUG9saWN5IiwgTlVMTCwgMCk7CisgIGlm IChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZh aWxlZCB0byByZW1vdmUgJ2F1dGhQb2xpY3knOiAweCV4XG4iLCByZXQpOworICAgICAgZXJyID0g R1JVQl9FUlJfQkFEX0FSR1VNRU5UOworICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgLyog UmVtb3ZlICdkZXNjcmlwdGlvbicgKi8KKyAgcmV0ID0gYXNuMV93cml0ZV92YWx1ZSAodHBtMmtl eSwgImRlc2NyaXB0aW9uIiwgTlVMTCwgMCk7CisgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQor ICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byByZW1vdmUgJ2Rlc2NyaXB0 aW9uJzogMHgleFxuIiwgcmV0KTsKKyAgICAgIGVyciA9IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsK KyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIC8qCisgICAqICBVc2UgdGhlIFNSSyBoYW5k bGUgYXMgdGhlIHBhcmVudCBoYW5kbGUgaWYgc3BlY2lmaWVkCisgICAqICBPdGhlcndpc2UsIFVz ZSBUUE1fUkhfT1dORVIgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGhhbmRsZQorICAqLworICBpZiAo YXJncy0+dHBtMl9zcmsgIT0gMCkKKyAgICBwYXJlbnQgPSBncnViX2NwdV90b19iZTMyIChhcmdz LT50cG0yX3Nyayk7CisgIGVsc2UKKyAgICBwYXJlbnQgPSBncnViX2NwdV90b19iZTMyIChUUE1f UkhfT1dORVIpOworICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlICh0cG0ya2V5LCAicGFyZW50Iiwg JnBhcmVudCwgc2l6ZW9mIChwYXJlbnQpKTsKKyAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisg ICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCAncGFyZW50JzogMHgl eFxuIiwgcmV0KTsKKyAgICAgIGVyciA9IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKyAgICAgIGdv dG8gZXJyb3I7CisgICAgfQorCisgIC8qCisgICAqIFNldCAncnNhUGFyZW50JyB0byBUUlVFIGlm IHRoZSBSU0EgU1JLIGlzIHNwZWNpZmllZCBhbmQgdGhlIFNSSworICAgKiBoYW5kbGUgaXMgbm90 IHBlcnNpc3RlbnQuIE90aGVyd2lzZSwgcmVtb3ZlICdyc2FQYXJlbnQnLgorICAgKi8KKyAgaWYg KGFyZ3MtPnRwbTJfc3JrID09IDAgJiYgYXJncy0+c3JrX3R5cGUudHlwZSA9PSBUUE1fQUxHX1JT QSkKKyAgICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlICh0cG0ya2V5LCAicnNhUGFyZW50IiwgIlRS VUUiLCAxKTsKKyAgZWxzZQorICAgIHJldCA9IGFzbjFfd3JpdGVfdmFsdWUgKHRwbTJrZXksICJy c2FQYXJlbnQiLCBOVUxMLCAwKTsKKworICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7 CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gc2V0ICdyc2FQYXJlbnQnOiAweCV4 XG4iLCByZXQpOworICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworICAgICAgZ290 byBlcnJvcjsKKyAgICB9CisKKyAgLyogU2V0IHRoZSBwdWJrZXkgKi8KKyAgcmV0ID0gYXNuMV93 cml0ZV92YWx1ZSAodHBtMmtleSwgInB1YmtleSIsIHB1Yl9idWYuZGF0YSwgcHViX2J1Zi5zaXpl KTsKKyAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiRmFpbGVkIHRvIHNldCAncHVia2V5JzogMHgleFxuIiwgcmV0KTsKKyAgICAgIGVyciA9 IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIC8q IFNldCB0aGUgcHJpdmtleSAqLworICByZXQgPSBhc24xX3dyaXRlX3ZhbHVlICh0cG0ya2V5LCAi cHJpdmtleSIsIHByaXZfYnVmLmRhdGEsIHByaXZfYnVmLnNpemUpOworICBpZiAocmV0ICE9IEFT TjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gc2V0 ICdwcml2a2V5JzogMHgleFxuIiwgcmV0KTsKKyAgICAgIGVyciA9IEdSVUJfRVJSX0JBRF9BUkdV TUVOVDsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIC8qIENyZWF0ZSB0aGUgREVSIGJp bmFyeSAqLworICBkZXJfYnVmX3NpemUgPSAwOworICByZXQgPSBhc24xX2Rlcl9jb2RpbmcgKHRw bTJrZXksICIiLCBOVUxMLCAmZGVyX2J1Zl9zaXplLCBOVUxMKTsKKyAgaWYgKHJldCAhPSBBU04x X01FTV9FUlJPUikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gZ2V0 IERFUiBzaXplOiAweCV4XG4iLCByZXQpOworICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX0FSR1VN RU5UOworICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgZGVyX2J1ZiA9IGdydWJfbWFsbG9j IChkZXJfYnVmX3NpemUpOworICBpZiAoZGVyX2J1ZiA9PSBOVUxMKQorICAgIHsKKyAgICAgIGZw cmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIERFUiBlbmNvZGlu Z1xuIik7CisgICAgICBlcnIgPSBHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZOworICAgICAgZ290byBl cnJvcjsKKyAgICB9CisKKyAgcmV0ID0gYXNuMV9kZXJfY29kaW5nICh0cG0ya2V5LCAiIiwgZGVy X2J1ZiwgJmRlcl9idWZfc2l6ZSwgTlVMTCk7CisgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQor ICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkRFUiBjb2RpbmcgZXJyb3I6IDB4JXhcbiIs IHJldCk7CisgICAgICBlcnIgPSBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisgICAgICBnb3RvIGVy cm9yOworICAgIH0KKworICBlcnIgPSBwcm90ZWN0X3dyaXRlX2ZpbGUgKGFyZ3MtPnRwbTJfb3V0 ZmlsZSwgZGVyX2J1ZiwgZGVyX2J1Zl9zaXplKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05F KQorICAgIGZwcmludGYgKHN0ZGVyciwgTl8oIkNvdWxkIG5vdCB3cml0ZSB0cG0ya2V5IGZpbGUg KCVzKS5cbiIpLCBzdHJlcnJvciAoZXJybm8pKTsKKworIGVycm9yOgorICBncnViX2ZyZWUgKGRl cl9idWYpOworCisgIGlmICh0cG0ya2V5KQorICAgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnRw bTJrZXkpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Citwcm90ZWN0 X3RwbTJfZXhwb3J0X3NlYWxlZF9rZXkgKGNvbnN0IGNoYXIgKmZpbGVwYXRoLAorCQkJCXRwbTJf c2VhbGVkX2tleV90ICpzZWFsZWRfa2V5KQoreworICBncnViX2Vycl90IGVycjsKKyAgc3RydWN0 IGdydWJfdHBtMl9idWZmZXIgYnVmOworCisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJmJ1Zik7 CisgIGdydWJfVHNzMl9NVV9UUE0yQl9QVUJMSUNfTWFyc2hhbCAoJmJ1ZiwgJnNlYWxlZF9rZXkt PnB1YmxpYyk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9NYXJzaGFsICgmYnVmLCBzZWFsZWRfa2V5 LT5wcml2YXRlLnNpemUsCisJCQkgICAgICBzZWFsZWRfa2V5LT5wcml2YXRlLmJ1ZmZlcik7Cisg IGlmIChidWYuZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwor CisgIGVyciA9IHByb3RlY3Rfd3JpdGVfZmlsZSAoZmlsZXBhdGgsIGJ1Zi5kYXRhLCBidWYuc2l6 ZSk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBmcHJpbnRmIChzdGRlcnIsIE5f KCJDb3VsZCBub3Qgd3JpdGUgc2VhbGVkIGtleSBmaWxlICglcykuXG4iKSwgc3RyZXJyb3IgKGVy cm5vKSk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK3Byb3RlY3Rf dHBtMl9hZGQgKHByb3RlY3RfYXJnc190ICphcmdzKQoreworICBncnViX2Vycl90IGVycjsKKyAg Z3J1Yl91aW50OF90ICprZXkgPSBOVUxMOworICBncnViX3NpemVfdCBrZXlfc2l6ZTsKKyAgVFBN X0hBTkRMRV90IHNyazsKKyAgVFBNMkJfRElHRVNUX3QgcG9saWN5X2RpZ2VzdDsKKyAgdHBtMl9z ZWFsZWRfa2V5X3Qgc2VhbGVkX2tleTsKKworICBlcnIgPSBwcm90ZWN0X3RwbTJfb3Blbl9kZXZp Y2UgKGFyZ3MtPnRwbTJfZGV2aWNlKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAg IHJldHVybiBlcnI7CisKKyAgZXJyID0gcHJvdGVjdF9yZWFkX2ZpbGUgKGFyZ3MtPnRwbTJfa2V5 ZmlsZSwgKHZvaWQgKiopJmtleSwgJmtleV9zaXplKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9O T05FKQorICAgIGdvdG8gZXhpdDE7CisKKyAgaWYgKGtleV9zaXplID4gVFBNX01BWF9TWU1fREFU QSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIE5fKCJJbnB1dCBrZXkgc2l6ZSBsYXJn ZXIgdGhhbiAldSBieXRlcy5cbiIpLCBUUE1fTUFYX1NZTV9EQVRBKTsKKyAgICAgIGVyciA9IEdS VUJfRVJSX09VVF9PRl9SQU5HRTsKKyAgICAgIGdvdG8gZXhpdDI7CisgICAgfQorCisgIGVyciA9 IHByb3RlY3RfdHBtMl9nZXRfc3JrIChhcmdzLCAmc3JrKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VS Ul9OT05FKQorICAgIGdvdG8gZXhpdDI7CisKKyAgZXJyID0gcHJvdGVjdF90cG0yX2dldF9wb2xp Y3lfZGlnZXN0IChhcmdzLCAmcG9saWN5X2RpZ2VzdCk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJf Tk9ORSkKKyAgICBnb3RvIGV4aXQzOworCisgIGVyciA9IHByb3RlY3RfdHBtMl9zZWFsICgmcG9s aWN5X2RpZ2VzdCwgc3JrLCBrZXksIGtleV9zaXplLCAmc2VhbGVkX2tleSk7CisgIGlmIChlcnIg IT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGV4aXQzOworCisgIGlmIChhcmdzLT50cG0yX3Rw bTJrZXkgIT0gMCkKKyAgICBlcnIgPSBwcm90ZWN0X3RwbTJfZXhwb3J0X3RwbTJrZXkgKGFyZ3Ms ICZzZWFsZWRfa2V5KTsKKyAgZWxzZQorICAgIGVyciA9IHByb3RlY3RfdHBtMl9leHBvcnRfc2Vh bGVkX2tleSAoYXJncy0+dHBtMl9vdXRmaWxlLCAmc2VhbGVkX2tleSk7CisgIGlmIChlcnIgIT0g R1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGV4aXQzOworCisgZXhpdDM6CisgIGdydWJfdHBtMl9m bHVzaGNvbnRleHQgKHNyayk7CisKKyBleGl0MjoKKyAgZ3J1Yl9mcmVlIChrZXkpOworCisgZXhp dDE6CisgIHByb3RlY3RfdHBtMl9jbG9zZV9kZXZpY2UgKCk7CisKKyAgcmV0dXJuIGVycjsKK30K Kworc3RhdGljIGdydWJfZXJyX3QKK3Byb3RlY3RfdHBtMl9yZW1vdmUgKHByb3RlY3RfYXJnc190 ICphcmdzKQoreworICBUUE1fUkNfdCByYzsKKyAgVFBNMkJfUFVCTElDX3QgcHVibGljOworICBU UE1TX0FVVEhfQ09NTUFORF90IGF1dGhDb21tYW5kID0gezB9OworICBncnViX2Vycl90IGVycjsK KworICBpZiAoYXJncy0+dHBtMl9ldmljdCA9PSAwKQorICAgIHsKKyAgICAgIHByaW50ZiAoIi0t dHBtMi1ldmljdCBub3Qgc3BlY2lmaWVkLCBub3RoaW5nIHRvIGRvLlxuIik7CisgICAgICByZXR1 cm4gR1JVQl9FUlJfTk9ORTsKKyAgICB9CisKKyAgZXJyID0gcHJvdGVjdF90cG0yX29wZW5fZGV2 aWNlIChhcmdzLT50cG0yX2RldmljZSk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAg ICByZXR1cm4gZXJyOworCisgIC8qIEZpbmQgU1JLICovCisgIHJjID0gZ3J1Yl90cG0yX3JlYWRw dWJsaWMgKGFyZ3MtPnRwbTJfc3JrLCBOVUxMLCAmcHVibGljKTsKKyAgaWYgKHJjICE9IFRQTV9S Q19TVUNDRVNTKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlNSSyB3aXRoIGhhbmRs ZSAweCV4IG5vdCBmb3VuZC5cbiIsIGFyZ3MtPnRwbTJfc3JrKTsKKyAgICAgIGVyciA9IEdSVUJf RVJSX0JBRF9BUkdVTUVOVDsKKyAgICAgIGdvdG8gZXhpdDE7CisgICAgfQorCisgIC8qIEV2aWN0 IFNSSyAqLworICBhdXRoQ29tbWFuZC5zZXNzaW9uSGFuZGxlID0gVFBNX1JTX1BXOworCisgIHJj ID0gZ3J1Yl90cG0yX2V2aWN0Y29udHJvbCAoVFBNX1JIX09XTkVSLCBhcmdzLT50cG0yX3Nyaywg JmF1dGhDb21tYW5kLCBhcmdzLT50cG0yX3NyaywgTlVMTCk7CisgIGlmIChyYyAhPSBUUE1fUkNf U1VDQ0VTUykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gZXZpY3Qg U1JLIHdpdGggaGFuZGxlIDB4JXggKFRQTTJfRXZpY3RDb250cm9sOiAweCV4KS5cbiIsIGFyZ3Mt PnRwbTJfc3JrLCByYyk7CisgICAgICBlcnIgPSBHUlVCX0VSUl9CQURfREVWSUNFOworICAgICAg Z290byBleGl0MjsKKyAgICB9CisKKyAgZXJyID0gR1JVQl9FUlJfTk9ORTsKKworIGV4aXQyOgor ICBncnViX3RwbTJfZmx1c2hjb250ZXh0IChhcmdzLT50cG0yX3Nyayk7CisKKyBleGl0MToKKyAg cHJvdGVjdF90cG0yX2Nsb3NlX2RldmljZSAoKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK K30KKworc3RhdGljIGdydWJfZXJyX3QKK3Byb3RlY3RfdHBtMl9ydW4gKHByb3RlY3RfYXJnc190 ICphcmdzKQoreworICBzd2l0Y2ggKGFyZ3MtPmFjdGlvbikKKyAgICB7CisgICAgY2FzZSBQUk9U RUNUX0FDVElPTl9BREQ6CisgICAgICByZXR1cm4gcHJvdGVjdF90cG0yX2FkZCAoYXJncyk7CisK KyAgICBjYXNlIFBST1RFQ1RfQUNUSU9OX1JFTU9WRToKKyAgICAgIHJldHVybiBwcm90ZWN0X3Rw bTJfcmVtb3ZlIChhcmdzKTsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gR1JVQl9FUlJf QkFEX0FSR1VNRU5UOworICAgIH0KK30KKworc3RhdGljIGdydWJfZXJyX3QKK3Byb3RlY3RfdHBt Ml9hcmdzX3ZlcmlmeSAocHJvdGVjdF9hcmdzX3QgKmFyZ3MpCit7CisgIGlmIChhcmdzLT50cG0y X2RldmljZSA9PSBOVUxMKQorICAgIGFyZ3MtPnRwbTJfZGV2aWNlID0gIi9kZXYvdHBtMCI7CisK KyAgc3dpdGNoIChhcmdzLT5hY3Rpb24pCisgICAgeworICAgIGNhc2UgUFJPVEVDVF9BQ1RJT05f QUREOgorICAgICAgaWYgKGFyZ3MtPmFyZ3MgJiBQUk9URUNUX0FSR19UUE0yX0VWSUNUKQorCXsK KwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1ldmljdCBpcyBpbnZhbGlkIHdoZW4gLS1h Y3Rpb24gaXMgJ2FkZCcuXG4iKSk7CisJICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwor CX0KKworICAgICAgaWYgKGFyZ3MtPnRwbTJfa2V5ZmlsZSA9PSBOVUxMKQorCXsKKwkgIGZwcmlu dGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1rZXlmaWxlIG11c3QgYmUgc3BlY2lmaWVkLlxuIikpOwor CSAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKwl9CisKKyAgICAgIGlmIChhcmdzLT50 cG0yX291dGZpbGUgPT0gTlVMTCkKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXRwbTIt b3V0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZC5cbiIpKTsKKwkgIHJldHVybiBHUlVCX0VSUl9CQURf QVJHVU1FTlQ7CisJfQorCisgICAgICBpZiAoYXJncy0+dHBtMl9wY3JfY291bnQgPT0gMCkKKwl7 CisJICBhcmdzLT50cG0yX3BjcnNbMF0gPSA3OworCSAgYXJncy0+dHBtMl9wY3JfY291bnQgPSAx OworCX0KKworICAgICAgaWYgKGFyZ3MtPnNya190eXBlLnR5cGUgPT0gVFBNX0FMR19FUlJPUikK Kwl7CisJICBhcmdzLT5zcmtfdHlwZS50eXBlID0gVFBNX0FMR19FQ0M7CisJICBhcmdzLT5zcmtf dHlwZS5kZXRhaWwuZWNjX2N1cnZlID0gVFBNX0VDQ19OSVNUX1AyNTY7CisJfQorCisgICAgICBp ZiAoYXJncy0+dHBtMl9iYW5rID09IFRQTV9BTEdfRVJST1IpCisJYXJncy0+dHBtMl9iYW5rID0g VFBNX0FMR19TSEEyNTY7CisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQUk9URUNUX0FDVElP Tl9SRU1PVkU6CisgICAgICBpZiAoYXJncy0+YXJncyAmIFBST1RFQ1RfQVJHX1RQTTJfQVNZTU1F VFJJQykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXRwbTItYXN5bW1ldHJpYyBpcyBp bnZhbGlkIHdoZW4gLS1hY3Rpb24gaXMgJ3JlbW92ZScuXG4iKSk7CisJICByZXR1cm4gR1JVQl9F UlJfQkFEX0FSR1VNRU5UOworCX0KKworICAgICAgaWYgKGFyZ3MtPmFyZ3MgJiBQUk9URUNUX0FS R19UUE0yX0JBTkspCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCBOXygiLS10cG0yLWJhbmsgaXMg aW52YWxpZCB3aGVuIC0tYWN0aW9uIGlzICdyZW1vdmUnLlxuIikpOworCSAgcmV0dXJuIEdSVUJf RVJSX0JBRF9BUkdVTUVOVDsKKwl9CisKKyAgICAgIGlmIChhcmdzLT5hcmdzICYgUFJPVEVDVF9B UkdfVFBNMl9LRVlGSUxFKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1rZXlm aWxlIGlzIGludmFsaWQgd2hlbiAtLWFjdGlvbiBpcyAncmVtb3ZlJy5cbiIpKTsKKwkgIHJldHVy biBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisJfQorCisgICAgICBpZiAoYXJncy0+YXJncyAmIFBS T1RFQ1RfQVJHX1RQTTJfT1VURklMRSkKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXRw bTItb3V0ZmlsZSBpcyBpbnZhbGlkIHdoZW4gLS1hY3Rpb24gaXMgJ3JlbW92ZScuXG4iKSk7CisJ ICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworCX0KKworICAgICAgaWYgKGFyZ3MtPmFy Z3MgJiBQUk9URUNUX0FSR19UUE0yX1BDUlMpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCBOXygi LS10cG0yLXBjcnMgaXMgaW52YWxpZCB3aGVuIC0tYWN0aW9uIGlzICdyZW1vdmUnLlxuIikpOwor CSAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKwl9CisKKyAgICAgIGlmIChhcmdzLT50 cG0yX3NyayA9PSAwKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1zcmsgaXMg bm90IHNwZWNpZmllZCB3aGVuIC0tYWN0aW9uIGlzICdyZW1vdmUnLlxuIikpOworCSAgcmV0dXJu IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKwl9CisKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVs dDoKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgTl8oIlRoZSBUUE0yIGtleSBwcm90ZWN0b3Igb25s eSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6IGFkZCwgcmVtb3ZlLlxuIikpOworICAg ICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKyAgICB9CisKKyAgcmV0dXJuIEdSVUJf RVJSX05PTkU7Cit9CisKK3N0YXRpYyBlcnJvcl90Citwcm90ZWN0X2FyZ3BfcGFyc2VyIChpbnQg a2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKK3sKKyAgZ3J1Yl9lcnJf dCBlcnI7CisgIHByb3RlY3RfYXJnc190ICphcmdzID0gc3RhdGUtPmlucHV0OworCisgIHN3aXRj aCAoa2V5KQorICAgIHsKKyAgICBjYXNlIFBST1RFQ1RfT1BUX0FDVElPTjoKKyAgICAgIGlmIChh cmdzLT5hcmdzICYgUFJPVEVDVF9BUkdfQUNUSU9OKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwg Tl8oIi0tYWN0aW9ufC1hIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlLlxuIikpOworCSAgcmV0 dXJuIEVJTlZBTDsKKwl9CisKKyAgICAgIGlmIChncnViX3N0cmNtcCAoYXJnLCAiYWRkIikgPT0g MCkKKwlhcmdzLT5hY3Rpb24gPSBQUk9URUNUX0FDVElPTl9BREQ7CisgICAgICBlbHNlIGlmIChn cnViX3N0cmNtcCAoYXJnLCAicmVtb3ZlIikgPT0gMCkKKwlhcmdzLT5hY3Rpb24gPSBQUk9URUNU X0FDVElPTl9SRU1PVkU7CisgICAgICBlbHNlCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCBOXygi JyVzJyBpcyBub3QgYSB2YWxpZCBhY3Rpb24uXG4iKSwgYXJnKTsKKwkgIHJldHVybiBFSU5WQUw7 CisJfQorCisgICAgICBhcmdzLT5hcmdzIHw9IFBST1RFQ1RfQVJHX0FDVElPTjsKKyAgICAgIGJy ZWFrOworCisgICAgY2FzZSBQUk9URUNUX09QVF9QUk9URUNUT1I6CisgICAgICBpZiAoYXJncy0+ YXJncyAmIFBST1RFQ1RfQVJHX1BST1RFQ1RPUikKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5f KCItLXByb3RlY3RvcnwtcCBjYW4gb25seSBiZSBzcGVjaWZpZWQgb25jZS5cbiIpKTsKKwkgIHJl dHVybiBFSU5WQUw7CisJfQorCisgICAgICBpZiAoZ3J1Yl9zdHJjbXAgKGFyZywgInRwbTIiKSA9 PSAwKQorCWFyZ3MtPnByb3RlY3RvciA9IFBST1RFQ1RfVFlQRV9UUE0yOworICAgICAgZWxzZQor CXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIiclcycgaXMgbm90IGEgdmFsaWQgcHJvdGVjdG9y LlxuIiksIGFyZyk7CisJICByZXR1cm4gRUlOVkFMOworCX0KKworICAgICAgYXJncy0+YXJncyB8 PSBQUk9URUNUX0FSR19QUk9URUNUT1I7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFJPVEVD VF9PUFRfVFBNMl9ERVZJQ0U6CisgICAgICBpZiAoYXJncy0+YXJncyAmIFBST1RFQ1RfQVJHX1RQ TTJfREVWSUNFKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1kZXZpY2UgY2Fu IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UuXG4iKSk7CisJICByZXR1cm4gRUlOVkFMOworCX0KKwor ICAgICAgYXJncy0+dHBtMl9kZXZpY2UgPSB4c3RyZHVwIChhcmcpOworICAgICAgYXJncy0+YXJn cyB8PSBQUk9URUNUX0FSR19UUE0yX0RFVklDRTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQ Uk9URUNUX09QVF9UUE0yX1BDUlM6CisgICAgICBpZiAoYXJncy0+YXJncyAmIFBST1RFQ1RfQVJH X1RQTTJfUENSUykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXRwbTItcGNycyBjYW4g b25seSBiZSBzcGVjaWZpZWQgb25jZS5cbiIpKTsKKwkgIHJldHVybiBFSU5WQUw7CisJfQorCisg ICAgICBlcnIgPSBncnViX3RwbTJfcHJvdGVjdG9yX3BhcnNlX3BjcnMgKGFyZywgYXJncy0+dHBt Ml9wY3JzLAorCQkJCQkgICAgJmFyZ3MtPnRwbTJfcGNyX2NvdW50KTsKKyAgICAgIGlmIChlcnIg IT0gR1JVQl9FUlJfTk9ORSkKKwl7CisJICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05F KQorCSAgICBncnViX3ByaW50X2Vycm9yICgpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAg ICAgIGFyZ3MtPmFyZ3MgfD0gUFJPVEVDVF9BUkdfVFBNMl9QQ1JTOworICAgICAgYnJlYWs7CisK KyAgICBjYXNlIFBST1RFQ1RfT1BUX1RQTTJfU1JLOgorICAgICAgaWYgKGFyZ3MtPmFyZ3MgJiBQ Uk9URUNUX0FSR19UUE0yX1NSSykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXRwbTIt c3JrIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlLlxuIikpOworCSAgcmV0dXJuIEVJTlZBTDsK Kwl9CisKKyAgICAgIGVyciA9IGdydWJfdHBtMl9wcm90ZWN0b3JfcGFyc2VfdHBtX2hhbmRsZSAo YXJnLCAmYXJncy0+dHBtMl9zcmspOworICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQor CXsKKwkgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCisJICAgIGdydWJfcHJpbnRf ZXJyb3IgKCk7CisJICByZXR1cm4gRUlOVkFMOworCX0KKworICAgICAgYXJncy0+YXJncyB8PSBQ Uk9URUNUX0FSR19UUE0yX1NSSzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQUk9URUNUX09Q VF9UUE0yX0FTWU1NRVRSSUM6CisgICAgICBpZiAoYXJncy0+YXJncyAmIFBST1RFQ1RfQVJHX1RQ TTJfQVNZTU1FVFJJQykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXRwbTItYXN5bW1l dHJpYyBjYW4gb25seSBiZSBzcGVjaWZpZWQgb25jZS5cbiIpKTsKKwkgIHJldHVybiBFSU5WQUw7 CisJfQorCisgICAgICBlcnIgPSBncnViX3RwbTJfcHJvdGVjdG9yX3BhcnNlX2FzeW1tZXRyaWMg KGFyZywgJmFyZ3MtPnNya190eXBlKTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkK Kwl7CisJICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorCSAgICBncnViX3ByaW50 X2Vycm9yICgpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAgICAgIGFyZ3MtPmFyZ3MgfD0g UFJPVEVDVF9BUkdfVFBNMl9BU1lNTUVUUklDOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBS T1RFQ1RfT1BUX1RQTTJfQkFOSzoKKyAgICAgIGlmIChhcmdzLT5hcmdzICYgUFJPVEVDVF9BUkdf VFBNMl9CQU5LKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1iYW5rIGNhbiBv bmx5IGJlIHNwZWNpZmllZCBvbmNlLlxuIikpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAg ICAgIGVyciA9IGdydWJfdHBtMl9wcm90ZWN0b3JfcGFyc2VfYmFuayAoYXJnLCAmYXJncy0+dHBt Ml9iYW5rKTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKwl7CisJICBpZiAoZ3J1 Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorCSAgICBncnViX3ByaW50X2Vycm9yICgpOworCSAg cmV0dXJuIEVJTlZBTDsKKwl9CisKKyAgICAgIGFyZ3MtPmFyZ3MgfD0gUFJPVEVDVF9BUkdfVFBN Ml9CQU5LOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBST1RFQ1RfT1BUX1RQTTJfS0VZRklM RToKKyAgICAgIGlmIChhcmdzLT5hcmdzICYgUFJPVEVDVF9BUkdfVFBNMl9LRVlGSUxFKQorCXsK KwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1rZXlmaWxlIGNhbiBvbmx5IGJlIHNwZWNp ZmllZCBvbmNlLlxuIikpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAgICAgIGFyZ3MtPnRw bTJfa2V5ZmlsZSA9IHhzdHJkdXAoYXJnKTsKKyAgICAgIGFyZ3MtPmFyZ3MgfD0gUFJPVEVDVF9B UkdfVFBNMl9LRVlGSUxFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBST1RFQ1RfT1BUX1RQ TTJfT1VURklMRToKKyAgICAgIGlmIChhcmdzLT5hcmdzICYgUFJPVEVDVF9BUkdfVFBNMl9PVVRG SUxFKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi1vdXRmaWxlIGNhbiBvbmx5 IGJlIHNwZWNpZmllZCBvbmNlLlxuIikpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAgICAg IGFyZ3MtPnRwbTJfb3V0ZmlsZSA9IHhzdHJkdXAoYXJnKTsKKyAgICAgIGFyZ3MtPmFyZ3MgfD0g UFJPVEVDVF9BUkdfVFBNMl9PVVRGSUxFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBST1RF Q1RfT1BUX1RQTTJfRVZJQ1Q6CisgICAgICBpZiAoYXJncy0+YXJncyAmIFBST1RFQ1RfQVJHX1RQ TTJfRVZJQ1QpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCBOXygiLS10cG0yLWV2aWN0IGNhbiBv bmx5IGJlIHNwZWNpZmllZCBvbmNlLlxuIikpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAg ICAgIGFyZ3MtPnRwbTJfZXZpY3QgPSAxOworICAgICAgYXJncy0+YXJncyB8PSBQUk9URUNUX0FS R19UUE0yX0VWSUNUOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBST1RFQ1RfT1BUX1RQTTJf VFBNMktFWToKKyAgICAgIGlmIChhcmdzLT5hcmdzICYgUFJPVEVDVF9BUkdfVFBNMl9UUE0yS0VZ KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgTl8oIi0tdHBtMi10cG0ya2V5IGNhbiBvbmx5IGJl IHNwZWNpZmllZCBvbmNlLlxuIikpOworCSAgcmV0dXJuIEVJTlZBTDsKKwl9CisKKyAgICAgIGFy Z3MtPnRwbTJfdHBtMmtleSA9IDE7CisgICAgICBhcmdzLT5hcmdzIHw9IFBST1RFQ1RfQVJHX1RQ TTJfVFBNMktFWTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBB UkdQX0VSUl9VTktOT1dOOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGdydWJf ZXJyX3QKK3Byb3RlY3RfYXJnc192ZXJpZnkgKHByb3RlY3RfYXJnc190ICphcmdzKQoreworICBp ZiAoYXJncy0+YWN0aW9uID09IFBST1RFQ1RfQUNUSU9OX0VSUk9SKQorICAgIHsKKyAgICAgIGZw cmludGYgKHN0ZGVyciwgTl8oIi0tYWN0aW9uIGlzIG1hbmRhdG9yeS5cbiIpKTsKKyAgICAgIHJl dHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisgICAgfQorCisgIC8qCisgICAqIEF0IHRoZSBt b21lbnQsIHRoZSBvbmx5IGNvbmZpZ3VyYWJsZSBrZXkgcHJvdGVjdG9yIGlzIHRoZSBUUE0yIG9u ZSwgc28gaXQKKyAgICogaXMgdGhlIG9ubHkga2V5IHByb3RlY3RvciBzdXBwb3J0ZWQgYnkgdGhp cyB0b29sLgorICAgKi8KKyAgaWYgKGFyZ3MtPnByb3RlY3RvciAhPSBQUk9URUNUX1RZUEVfVFBN MikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsIE5fKCItLXByb3RlY3RvciBpcyBtYW5k YXRvcnkgYW5kIG9ubHkgJ3RwbTInIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iKSk7CisgICAg ICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworICAgIH0KKworICBzd2l0Y2ggKGFyZ3Mt PnByb3RlY3RvcikKKyAgICB7CisgICAgY2FzZSBQUk9URUNUX1RZUEVfVFBNMjoKKyAgICAgIHJl dHVybiBwcm90ZWN0X3RwbTJfYXJnc192ZXJpZnkgKGFyZ3MpOworICAgIGRlZmF1bHQ6CisgICAg ICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOworICAgIH0KKworICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK3Byb3RlY3RfZGlzcGF0Y2ggKHByb3Rl Y3RfYXJnc190ICphcmdzKQoreworICBzd2l0Y2ggKGFyZ3MtPnByb3RlY3RvcikKKyAgICB7Cisg ICAgY2FzZSBQUk9URUNUX1RZUEVfVFBNMjoKKyAgICAgIHJldHVybiBwcm90ZWN0X3RwbTJfcnVu IChhcmdzKTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVO VDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitwcm90ZWN0X2luaXQgKGludCAqYXJnYywgY2hh ciAqKmFyZ3ZbXSkKK3sKKyAgZ3J1Yl91dGlsX2hvc3RfaW5pdCAoYXJnYywgYXJndik7CisKKyAg Z3J1Yl91dGlsX2Jpb3NkaXNrX2luaXQgKE5VTEwpOworCisgIGdydWJfaW5pdF9hbGwgKCk7CisK KyAgZ3J1Yl9sdm1fZmluaSAoKTsKKyAgZ3J1Yl9tZHJhaWQwOV9maW5pICgpOworICBncnViX21k cmFpZDF4X2ZpbmkgKCk7CisgIGdydWJfZGlza2ZpbHRlcl9maW5pICgpOworICBncnViX2Rpc2tm aWx0ZXJfaW5pdCAoKTsKKyAgZ3J1Yl9tZHJhaWQwOV9pbml0ICgpOworICBncnViX21kcmFpZDF4 X2luaXQgKCk7CisgIGdydWJfbHZtX2luaXQgKCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm90ZWN0 X2ZpbmkgKHZvaWQpCit7CisgIGdydWJfZmluaV9hbGwgKCk7CisgIGdydWJfdXRpbF9iaW9zZGlz a19maW5pICgpOworfQorCitzdGF0aWMgc3RydWN0IGFyZ3AgcHJvdGVjdF9hcmdwID0KK3sKKyAg Lm9wdGlvbnMgICAgID0gcHJvdGVjdF9vcHRpb25zLAorICAucGFyc2VyICAgICAgPSBwcm90ZWN0 X2FyZ3BfcGFyc2VyLAorICAuYXJnc19kb2MgICAgPSBOVUxMLAorICAuZG9jICAgICAgICAgPQor ICAgIE5fKCJQcm90ZWN0IGEgY2xlYXJ0ZXh0IGtleSB1c2luZyBhIEdSVUIga2V5IHByb3RlY3Rv ciB0aGF0IGNhbiByZXRyaWV2ZSAiCisgICAgICAgInRoZSBrZXkgZHVyaW5nIGJvb3QgdG8gdW5s b2NrIGZ1bGx5LWVuY3J5cHRlZCBkaXNrcyBhdXRvbWF0aWNhbGx5LiIpLAorICAuY2hpbGRyZW4g ICAgPSBOVUxMLAorICAuaGVscF9maWx0ZXIgPSBOVUxMLAorICAuYXJncF9kb21haW4gPSBOVUxM Cit9OworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGdydWJfZXJy X3QgZXJyOworICBwcm90ZWN0X2FyZ3NfdCBhcmdzID0gezB9OworCisgIGlmIChhcmdwX3BhcnNl ICgmcHJvdGVjdF9hcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAmYXJncykgIT0gMCkKKyAgICB7Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsIE5fKCJDb3VsZCBub3QgcGFyc2UgYXJndW1lbnRzLlxuIikp OworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgcHJvdGVjdF9pbml0ICgm YXJnYywgJmFyZ3YpOworCisgIGVyciA9IHByb3RlY3RfYXJnc192ZXJpZnkgKCZhcmdzKTsKKyAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gZXhpdDsKKworICBlcnIgPSBwcm90 ZWN0X2Rpc3BhdGNoICgmYXJncyk7CisKKyBleGl0OgorICBwcm90ZWN0X2ZpbmkgKCk7CisKKyAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisKKyAg cmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KLS0gCjIuNDMuMAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWIt ZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnVi LWRldmVsCg==