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 E2E42EB64DD for ; Mon, 14 Aug 2023 19:47:08 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qVdWc-00063e-My; Mon, 14 Aug 2023 15:46:50 -0400 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 1qVdWa-00063J-UL for grub-devel@gnu.org; Mon, 14 Aug 2023 15:46:48 -0400 Received: from mail-vs1-xe36.google.com ([2607:f8b0:4864:20::e36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qVdWY-0002vI-NR for grub-devel@gnu.org; Mon, 14 Aug 2023 15:46:48 -0400 Received: by mail-vs1-xe36.google.com with SMTP id ada2fe7eead31-4496d848a60so527604137.2 for ; Mon, 14 Aug 2023 12:46:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20221208.gappssmtp.com; s=20221208; t=1692042405; x=1692647205; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=4Mz58P3geqMh2wKDqmRx1Y8R+5pMkNk+4vDAQf7Rn7w=; b=XXn1oqlUile7RbzpCGFhKQNkxL9Wsla4KnXnpWRk4I+GM1iBVtrCQ+c5ClXk6IAp2p 2gZSTQoL9Fc59hkdXgbx7UJZyl9ou2PzkeihPK70V9ldc5rwhJQF7N2XJ3zuuZSagncp GBLZTaxUtGFXzaE0FBn17CstoiwpeUk3kpX5S60K72hk/j2L6omvdXobxswZDW9M6BsT fcr4yrZi34PNUEc3qExNQpDdxKB6gUeKL/PTHSEXmnkwzmNXAzbuprtM8lMuVqhcXGZR wMDEFjKAZs/xcHDmLNkumgypYdAW7Riz0wiEcoW3tMYYzSh3f9EZoGCp7LT+e5LzJY7+ JY4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692042405; x=1692647205; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4Mz58P3geqMh2wKDqmRx1Y8R+5pMkNk+4vDAQf7Rn7w=; b=PZSYtpulaR5hzva8WZxVPHS02hZru5lWuf9PjSQhk2qvNOuzIWmTmBTGUtpFwpgF6R JgBVaBpJ920ndBEFMMuBe05vrrs4LYbSWV3m4R+8UAtEUia0SmlMwSrbMaz9OadZeKSM R04sri+tsxWpQpRsKGH8POnppNWs8rgYjvle0ewciIKnhMySUDs2czX85dHo5f1tXVAX 6Jh8WCsaqQmq9Q4pMWR9sNhJCOfqzhvtYa6FBmmzTwaQj3vgPIzeAGce15aYrqu+a88/ hjJqy/XtEUuh27a86bFZISmIAHtW8yUrqdCA0+WmgLWv6dHMY40eU3Pq6s2pi7WGW0Lm kdFQ== X-Gm-Message-State: AOJu0Yw7jST+Ui395O96zQNpyxRHc+EUl4Uldx5QzLKID0FapHm7DyKS 2xhE24oTyDOTOOy7zKL7hQfLeGRo/ONVNxuow00= X-Google-Smtp-Source: AGHT+IGcEFID4x6L4C6YaJOO54A7EB6QIUW8jYhKpWmD+u+95M5kxhN6rXV+lIy5sVEncBW0EpgBEg== X-Received: by 2002:a67:e3da:0:b0:443:682e:2088 with SMTP id k26-20020a67e3da000000b00443682e2088mr7933673vsm.12.1692042405055; Mon, 14 Aug 2023 12:46:45 -0700 (PDT) Received: from localhost.localdomain ([37.218.244.249]) by smtp.gmail.com with ESMTPSA id u23-20020a67d997000000b0044794fe40f3sm1632486vsj.21.2023.08.14.12.46.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Aug 2023 12:46:44 -0700 (PDT) From: Glenn Washburn To: grub-devel@gnu.org, Daniel Kiper , Ard Biesheuvel Cc: Glenn Washburn Subject: [PATCH] efi: Add efiload module to allow loading EFI drivers Date: Mon, 14 Aug 2023 14:46:31 -0500 Message-Id: <20230814194631.1940408-1-development@efficientek.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::e36; envelope-from=development@efficientek.com; helo=mail-vs1-xe36.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-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: , Reply-To: The development of GNU GRUB 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 U2lnbmVkLW9mZi1ieTogR2xlbm4gV2FzaGJ1cm4gPGRldmVsb3BtZW50QGVmZmljaWVudGVrLmNv bT4KLS0tCiBncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgICAgICB8ICAgNiArCiBncnViLWNv cmUvY29tbWFuZHMvZWZpL2VmaWxvYWQuYyB8IDIxMiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDIxOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2VmaS9lZmlsb2FkLmMKCmRpZmYgLS1naXQgYS9ncnVi LWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKaW5k ZXggYTZlNmI4Y2IxMzVhLi44YTUwYTAzNjUzMTQgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9NYWtl ZmlsZS5jb3JlLmRlZgorKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKQEAgLTg0Myw2 ICs4NDMsMTIgQEAgbW9kdWxlID0gewogICBlbmFibGUgPSBlZmk7CiB9OwogCittb2R1bGUgPSB7 CisgIG5hbWUgPSBlZmlsb2FkOworICBjb21tb24gPSBjb21tYW5kcy9lZmkvZWZpbG9hZC5jOwor ICBlbmFibGUgPSBlZmk7Cit9OworCiBtb2R1bGUgPSB7CiAgIG5hbWUgPSBibG9ja2xpc3Q7CiAg IGNvbW1vbiA9IGNvbW1hbmRzL2Jsb2NrbGlzdC5jOwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2Nv bW1hbmRzL2VmaS9lZmlsb2FkLmMgYi9ncnViLWNvcmUvY29tbWFuZHMvZWZpL2VmaWxvYWQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQyNmFiMjRiNjkxOQotLS0g L2Rldi9udWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9lZmkvZWZpbG9hZC5jCkBAIC0wLDAg KzEsMjEyIEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAq ICBDb3B5cmlnaHQgKEMpIDIwMTkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoK KyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2luY2x1 ZGUgPGdydWIvZWZpL2FwaS5oPgorI2luY2x1ZGUgPGdydWIvZWZpL2VmaS5oPgorI2luY2x1ZGUg PGdydWIvZXJyLmg+CisjaW5jbHVkZSA8Z3J1Yi9leHRjbWQuaD4KKyNpbmNsdWRlIDxncnViL2Zp bGUuaD4KKyNpbmNsdWRlIDxncnViL2kxOG4uaD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKyNp bmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdy dWIvZWZpL2VmaWxvYWQuaD4KKworR1JVQl9NT0RfTElDRU5TRSAoIkdQTHYzKyIpOworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGdydWJfYXJnX29wdGlvbiBvcHRpb25zX2VmaWxvYWRbXSA9IHsKKyAg eyJuYyIsICduJywgMCwgTl8oIkxvYWRzIHRoZSBkcml2ZXIsIGJ1dCBkb2VzIG5vdCBjb25uZWN0 IHRoZSBkcml2ZXIuIiksIDAsIDB9LAorICB7MCwgMCwgMCwgMCwgMCwgMH0KK307CisKK3N0YXRp YyBncnViX2VmaV9ndWlkX3QgbG9hZGVkX2ltYWdlX3Byb3RvY29sX2d1aWQgPSBHUlVCX0VGSV9M T0FERURfSU1BR0VfUFJPVE9DT0xfR1VJRDsKKworZ3J1Yl9lZmlfc3RhdHVzX3QKK2Nvbm5lY3Rf YWxsX2VmaSAodm9pZCkKK3sKKyAgZ3J1Yl9lZmlfc3RhdHVzX3Qgc3RhdHVzOworICBncnViX2Vm aV91aW50bl90IGhhbmRsZV9jb3VudDsKKyAgZ3J1Yl9lZmlfaGFuZGxlX3QgKmhhbmRsZV9idWZm ZXI7CisgIGdydWJfZWZpX3VpbnRuX3QgaW5kZXg7CisgIGdydWJfZWZpX2Jvb3Rfc2VydmljZXNf dCAqYjsKKyAgZ3J1Yl9kcHJpbnRmICgiZWZpbG9hZCIsICJDb25uZWN0aW5nIC4uLlxuIik7Cisg IGIgPSBncnViX2VmaV9zeXN0ZW1fdGFibGUtPmJvb3Rfc2VydmljZXM7CisgIHN0YXR1cyA9IGVm aV9jYWxsXzUgKGItPmxvY2F0ZV9oYW5kbGVfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg ICBHUlVCX0VGSV9BTExfSEFORExFUywKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM TCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZV9jb3VudCwgJmhhbmRsZV9idWZmZXIp OworCisgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVz OworCisgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZV9jb3VudDsgaW5kZXgrKykKKyAg eworICAgIHN0YXR1cyA9IGVmaV9jYWxsXzQgKGItPmNvbm5lY3RfY29udHJvbGxlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBoYW5kbGVfYnVmZmVyW2luZGV4XSwgTlVMTCwgTlVMTCwgVFJV RSk7CisgIH0KKworICBpZiAoaGFuZGxlX2J1ZmZlcikKKyAgeworICAgIGVmaV9jYWxsXzEgKGIt PmZyZWVfcG9vbCwgaGFuZGxlX2J1ZmZlcik7CisgIH0KKyAgcmV0dXJuIEdSVUJfRUZJX1NVQ0NF U1M7Cit9CisKK2dydWJfZXJyX3QKK2dydWJfZWZpX2RyaXZlcl9sb2FkIChncnViX3NpemVfdCBz aXplLCB2b2lkICpib290X2ltYWdlLCBpbnQgY29ubmVjdCkKK3sKKyAgZ3J1Yl9lZmlfc3RhdHVz X3Qgc3RhdHVzOworICBncnViX2VmaV9oYW5kbGVfdCBkcml2ZXJfaGFuZGxlOworICBncnViX2Vm aV9ib290X3NlcnZpY2VzX3QgKmI7CisgIGdydWJfZWZpX2xvYWRlZF9pbWFnZV90ICpsb2FkZWRf aW1hZ2U7CisKKyAgYiA9IGdydWJfZWZpX3N5c3RlbV90YWJsZS0+Ym9vdF9zZXJ2aWNlczsKKwor ICBzdGF0dXMgPSBlZmlfY2FsbF82IChiLT5sb2FkX2ltYWdlLCAwLCBncnViX2VmaV9pbWFnZV9o YW5kbGUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb3RfaW1hZ2UsIHNpemUsICZk cml2ZXJfaGFuZGxlKTsKKyAgaWYgKHN0YXR1cyAhPSBHUlVCX0VGSV9TVUNDRVNTKQorICB7Cisg ICAgaWYgKHN0YXR1cyA9PSBHUlVCX0VGSV9PVVRfT0ZfUkVTT1VSQ0VTKQorICAgICAgZ3J1Yl9l cnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgIm91dCBvZiByZXNvdXJjZXMiKTsKKyAgICBl bHNlCisgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfT1MsICJjYW5ub3QgbG9hZCBpbWFn ZSIpOworICAgIGdvdG8gZmFpbDsKKyAgfQorICBsb2FkZWRfaW1hZ2UgPSBncnViX2VmaV9nZXRf bG9hZGVkX2ltYWdlIChkcml2ZXJfaGFuZGxlKTsKKyAgaWYgKCEgbG9hZGVkX2ltYWdlKQorICB7 CisgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX09TLCAibm8gbG9hZGVkIGltYWdlIGF2YWls YWJsZSIpOworICAgIGdvdG8gZmFpbDsKKyAgfQorICBncnViX2RwcmludGYgKCJlZmlsb2FkIiwg IlJlZ2lzdGVyaW5nIGxvYWRlZCBpbWFnZVxuIik7CisgIHN0YXR1cyA9IGVmaV9jYWxsXzMgKGIt PmhhbmRsZV9wcm90b2NvbCwgZHJpdmVyX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg JmxvYWRlZF9pbWFnZV9wcm90b2NvbF9ndWlkLCAodm9pZCAqKikmbG9hZGVkX2ltYWdlKTsKKyAg aWYgKHN0YXR1cyAhPSBHUlVCX0VGSV9TVUNDRVNTKQorICB7CisgICAgZ3J1Yl9wcmludGYgKCJO b3QgYSBkaXJ2ZXJcbiIpOworICAgIGdvdG8gZmFpbDsKKyAgfQorICBncnViX2RwcmludGYgKCJl Zmlsb2FkIiwgIlN0YXJ0SW1hZ2U6ICVwXG4iLCBib290X2ltYWdlKTsKKyAgc3RhdHVzID0gZWZp X2NhbGxfMyAoYi0+c3RhcnRfaW1hZ2UsIGRyaXZlcl9oYW5kbGUsIE5VTEwsIE5VTEwpOworICBp ZiAoc3RhdHVzICE9IEdSVUJfRUZJX1NVQ0NFU1MpCisgIHsKKyAgICBncnViX3ByaW50ZiAoIkVS Uk9SIGluIFN0YXJ0SW1hZ2VcbiIpOworICAgIGdvdG8gZmFpbDsKKyAgfQorICBpZiAoY29ubmVj dCkKKyAgeworICAgIHN0YXR1cyA9IGNvbm5lY3RfYWxsX2VmaSAoKTsKKyAgICBpZiAoc3RhdHVz ICE9IEdSVUJfRUZJX1NVQ0NFU1MpCisgICAgeworICAgICAgZ3J1Yl9wcmludGYgKCJFUlJPUiBp biBjb25uZWN0X2FsbF9lZmlcbiIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgfQorICBn cnViX2RwcmludGYgKCJlZmlsb2FkIiwgIkRyaXZlciBpbnN0YWxsZWRcbiIpOworICByZXR1cm4g MDsKK2ZhaWw6CisgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9PUywgTl8oImluc3RhbGwgZmFp bGVkLiIpKTsKKyAgcmV0dXJuIGdydWJfZXJybm87Cit9CisKK3N0YXRpYyBncnViX2Vycl90Citn cnViX2NtZF9lZmlsb2FkIChncnViX2V4dGNtZF9jb250ZXh0X3QgY3R4dCwKKyAgICAgICAgaW50 IGFyZ2MsCisgICAgICAgIGNoYXIgKiphcmdzKQoreworICBzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAq c3RhdGUgPSBjdHh0LT5zdGF0ZTsKKyAgaW50IGNvbm5lY3QgPSAxOworICBncnViX2ZpbGVfdCBm aWxlID0gMDsKKyAgZ3J1Yl9lZmlfYm9vdF9zZXJ2aWNlc190ICpiOworICBncnViX2VmaV9zdGF0 dXNfdCBzdGF0dXM7CisgIGdydWJfZWZpX3VpbnRuX3QgcGFnZXMgPSAwOworICBncnViX3NzaXpl X3Qgc2l6ZTsKKyAgZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190IGFkZHJlc3M7CisgIHZvaWQg KmJvb3RfaW1hZ2UgPSAwOworCisgIGIgPSBncnViX2VmaV9zeXN0ZW1fdGFibGUtPmJvb3Rfc2Vy dmljZXM7CisgIGlmIChhcmdjICE9IDEpCisgICAgZ290byBmYWlsOworCisgIGZpbGUgPSBncnVi X2ZpbGVfb3BlbiAoYXJnc1swXSwgR1JVQl9GSUxFX1RZUEVfRUZJX0NIQUlOTE9BREVEX0lNQUdF KTsKKyAgaWYgKCEgZmlsZSkKKyAgICBnb3RvIGZhaWw7CisgIHNpemUgPSBncnViX2ZpbGVfc2l6 ZSAoZmlsZSk7CisgIGlmICghc2l6ZSkKKyAgeworICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9PUywgTl8oInByZW1hdHVyZSBlbmQgb2YgZmlsZSAlcyIpLCBhcmdzWzBdKTsKKyAgICBnb3Rv IGZhaWw7CisgIH0KKyAgcGFnZXMgPSAoKChncnViX2VmaV91aW50bl90KSBzaXplICsgKCgxIDw8 IDEyKSAtIDEpKSA+PiAxMik7CisgIHN0YXR1cyA9IGVmaV9jYWxsXzQgKGItPmFsbG9jYXRlX3Bh Z2VzLCBHUlVCX0VGSV9BTExPQ0FURV9BTllfUEFHRVMsCisgICAgICAgICAgICAgICAgICAgICAg IEdSVUJfRUZJX0xPQURFUl9DT0RFLCBwYWdlcywgJmFkZHJlc3MpOworICBpZiAoc3RhdHVzICE9 IEdSVUJfRUZJX1NVQ0NFU1MpCisgIHsKKyAgICBncnViX3ByaW50ZiAoIkZhaWxlZCB0byBhbGxv Y2F0ZSAldSBwYWdlc1xuIiwgKHVuc2lnbmVkIGludCkgcGFnZXMpOworICAgIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksIE5fKCJvdXQgb2YgbWVtb3J5IikpOworICAgIGdvdG8g ZmFpbDsKKyAgfQorICBib290X2ltYWdlID0gKHZvaWQgKikgKChncnViX2FkZHJfdCkgYWRkcmVz cyk7CisgIGlmIChncnViX2ZpbGVfcmVhZCAoZmlsZSwgYm9vdF9pbWFnZSwgc2l6ZSkgIT0gc2l6 ZSkKKyAgeworICAgIGlmIChncnViX2Vycm5vID09IEdSVUJfRVJSX05PTkUpCisgICAgICBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfT1MsIE5fKCJwcmVtYXR1cmUgZW5kIG9mIGZpbGUgJXMiKSwg YXJnc1swXSk7CisgICAgZ290byBmYWlsOworICB9CisgIGdydWJfZmlsZV9jbG9zZSAoZmlsZSk7 CisgIGlmIChzdGF0ZVswXS5zZXQpCisgICAgY29ubmVjdCA9IDA7CisgIGdydWJfZXJybm8gPSBn cnViX2VmaV9kcml2ZXJfbG9hZCAoc2l6ZSwgYm9vdF9pbWFnZSwgY29ubmVjdCk7CisKKyAgcmV0 dXJuIGdydWJfZXJybm87CitmYWlsOgorICBncnViX3ByaW50ZiAoIkVSUk9SXG4iKTsKKyAgaWYg KGZpbGUpCisgICAgZ3J1Yl9maWxlX2Nsb3NlIChmaWxlKTsKKyAgaWYgKGFkZHJlc3MpCisgICAg ZWZpX2NhbGxfMiAoYi0+ZnJlZV9wYWdlcywgYWRkcmVzcywgcGFnZXMpOworICByZXR1cm4gMTsK K30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfY21kX2Nvbm5lY3QgKGdydWJfZXh0Y21kX2Nv bnRleHRfdCBjdHh0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICAgICAgICAgICAg IGludCBhcmdjIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICAgICAgICAgICAgIGNo YXIgKiphcmdzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKK3sKKyAgY29ubmVjdF9hbGxfZWZp ICgpOworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXh0Y21kX3Qg Y21kX2VmaWxvYWQsIGNtZF9jb25uZWN0OworCitHUlVCX01PRF9JTklUKGVmaWxvYWQpCit7Cisg IGNtZF9lZmlsb2FkID0gZ3J1Yl9yZWdpc3Rlcl9leHRjbWQgKCJlZmlsb2FkIiwgZ3J1Yl9jbWRf ZWZpbG9hZCwgMCwgCisgICAgICAgICAgICAgICAgICBOXygiRklMRSIpLAorICAgICAgICAgICAg ICAgICAgTl8oIkluc3RhbGwgVUVGSSBkcml2ZXIuIiksIG9wdGlvbnNfZWZpbG9hZCk7CisgIGNt ZF9jb25uZWN0ID0gZ3J1Yl9yZWdpc3Rlcl9leHRjbWQgKCJlZmlfY29ubmVjdF9hbGwiLCBncnVi X2NtZF9jb25uZWN0LCAwLCAKKyAgICAgICAgICAgICAgICAgIE5VTEwsIE5fKCJDb25uZWN0IGRy aXZlcnMuIiksIDApOworfQorCitHUlVCX01PRF9GSU5JKGVmaWxvYWQpCit7CisgIGdydWJfdW5y ZWdpc3Rlcl9leHRjbWQgKGNtZF9lZmlsb2FkKTsKKyAgZ3J1Yl91bnJlZ2lzdGVyX2V4dGNtZCAo Y21kX2Nvbm5lY3QpOworfQotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBn bnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK