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 23F6ED6DDDB for ; Fri, 15 Nov 2024 07:38:54 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tBqu3-0002yy-FL; Fri, 15 Nov 2024 02:38:03 -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 1tBqsv-0001Im-VR for grub-devel@gnu.org; Fri, 15 Nov 2024 02:36:55 -0500 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tBqsq-00009i-NI for grub-devel@gnu.org; Fri, 15 Nov 2024 02:36:53 -0500 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-53d9ff92ee9so1652493e87.1 for ; Thu, 14 Nov 2024 23:36:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1731656207; x=1732261007; 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=C6X2bPAh9IjgEnjAOLcfRZ6ohvR+BsGQeVioFVxqJCY=; b=a32ywIkb/ccnp+wrJvypQXXyq+JVJkOjm1xuKYD5+oL+T0PnazqoitzoTrYAvefgQK 4cjSuxq7JAnglwyqz09lqW3+oOl5IO1r4pYfdRIbCYSWaBLCtyh59qRYnfOq4j6/WMq1 T5fsFAWdYpeHrzpIgTiDvpnsPJOOD1/C970Z4v+S+ZTIMEhlwx/nhAm2D8sWLdk0XZNM pmG9OTXICI05SN6Vjgs5VxNACBp7QME5jMkB9sB/gCi77g6VMwuSWcK58fvqbqhVRQNZ r0XrpocU8o13nwyTvSl08fabAJWhQDJJEG7e0Qgkil6xKgmF4DW/O6h/BUMsjrjHufai kCtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731656207; x=1732261007; 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=C6X2bPAh9IjgEnjAOLcfRZ6ohvR+BsGQeVioFVxqJCY=; b=Cdry3xj4cS76vfS4UbmZpyYEWDjAFDT2GVKoKHH9XiLi4FxZIW7WaP/hBIhJGVVNh3 zGtv2kAfT5uHFXFT0ad+15+loRS7+f1Zc15jR2om5gw6vVm8VUz1g3Fmb0jLx5isJpBF RgCD3/YIWAmx/6xcd8iXgFG56uqjBJv3gpNS0XHQCxpS6V5WiDBelewVzJvySoufQPXw jJ+WkrxJ00J6sTLOmY5JaK5Ncn+ZybDvLXS3i9KN8kyImkeYYzRokc/V3SwmQ+NreBuS Bvc+3pvOoUMnD6hFG0k6yXamTr4MlN8V4yl+6TjCm/ogGM/8bTN40gaGg8K6e+SesFbs qzGw== X-Gm-Message-State: AOJu0YxpRl5cqXbbvk++pdL8F/7U689febMHtqZOKGUzUky/o0MK3uJe JIO72QN5kFTj30lqmqfbmN6T4WaVb0cjnwvJROLBNjRjEmB+81bERWSUDqGvETT0M39Rdc644X4 L X-Google-Smtp-Source: AGHT+IFaIkK75PZFYbZq4Mllap95D/H0RXL77D9HlBn19sbuTAF4bthOOCWqfzt0CB3SNs0NA783Dg== X-Received: by 2002:a05:6512:1307:b0:539:f675:84d7 with SMTP id 2adb3069b0e04-53dab2a84bfmr739193e87.32.1731656206444; Thu, 14 Nov 2024 23:36:46 -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-7f8c1c31f48sm725733a12.32.2024.11.14.23.36.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Nov 2024 23:36:45 -0800 (PST) To: The development of GNU GRUB Subject: [PATCH v23 23/33] key_protector: Add TPM2 Key Protector Date: Fri, 15 Nov 2024 15:34:51 +0800 Message-ID: <20241115073506.2784-24-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::12c; envelope-from=glin@suse.com; helo=mail-lf1-x12c.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+CgpUaGUgVFBN MiBrZXkgcHJvdGVjdG9yIGlzIGEgbW9kdWxlIHRoYXQgZW5hYmxlcyB0aGUgYXV0b21hdGljIHJl dHJpZXZhbApvZiBhIGZ1bGx5LWVuY3J5cHRlZCBkaXNrJ3MgdW5sb2NraW5nIGtleSBmcm9tIGEg VFBNIDIuMC4KClRoZSB0aGVvcnkgb2Ygb3BlcmF0aW9uIGlzIHN1Y2ggdGhhdCB0aGUgbW9kdWxl IGFjY2VwdHMgdmFyaW91cwphcmd1bWVudHMsIG1vc3Qgb2Ygd2hpY2ggYXJlIG9wdGlvbmFsIGFu ZCB0aGVyZWZvcmUgcG9zc2VzcyByZWFzb25hYmxlCmRlZmF1bHRzLiBPbmUgb2YgdGhlc2UgYXJn dW1lbnRzIGlzIHRoZSBrZXlmaWxlL3RwbTJrZXkgcGFyYW1ldGVyLCB3aGljaAppcyBtYW5kYXRv cnkuIFRoZXJlIGFyZSB0d28gc3VwcG9ydGVkIGtleSBmb3JtYXRzOgoKMS4gUmF3IFNlYWxlZCBL ZXkgKC0ta2V5ZmlsZSkKICAgV2hlbiBzZWFsaW5nIGEga2V5IHdpdGggVFBNMl9DcmVhdGUsIHRo ZSBwdWJsaWMgcG9ydGlvbiBvZiB0aGUgc2VhbGVkCiAgIGtleSBpcyBzdG9yZWQgaW4gVFBNMkJf UFVCTElDLCBhbmQgdGhlIHByaXZhdGUgcG9ydGlvbiBpcyBpbgogICBUUE0yQl9QUklWQVRFLiBU aGUgcmF3IHNlYWxlZCBrZXkgZ2x1ZXMgdGhlIGZ1bGx5IG1hcnNoYWxsZWQKICAgVFBNMkJfUFVC TElDIGFuZCBUUE0yQl9QUklWQVRFIGludG8gb25lIGZpbGUuCgoyLiBUUE0gMi4wIEtleSAoLS10 cG0ya2V5KQogICBUaGUgZm9sbG93aW5nIGlzIHRoZSBBU04uMSBkZWZpbml0aW9uIG9mIFRQTSAy LjAgS2V5IEZpbGU6CgogICBUUE1Qb2xpY3kgOjo9IFNFUVVFTkNFIHsKICAgICBDb21tYW5kQ29k ZSAgIFswXSBFWFBMSUNJVCBJTlRFR0VSCiAgICAgQ29tbWFuZFBvbGljeSBbMV0gRVhQTElDSVQg T0NURVQgU1RSSU5HCiAgIH0KCiAgIFRQTUF1dGhQb2xpY3kgOjo9IFNFUVVFTkNFIHsKICAgICBO YW1lICAgIFswXSBFWFBMSUNJVCBVVEY4U1RSSU5HIE9QVElPTkFMCiAgICAgUG9saWN5ICBbMV0g RVhQTElDSVQgU0VRVUVOQ0UgT0YgVFBNUG9saWN5CiAgIH0KCiAgIFRQTUtleSA6Oj0gU0VRVUVO Q0UgewogICAgIHR5cGUgICAgICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgZW1wdHlBdXRoICAg WzBdIEVYUExJQ0lUIEJPT0xFQU4gT1BUSU9OQUwKICAgICBwb2xpY3kgICAgICBbMV0gRVhQTElD SVQgU0VRVUVOQ0UgT0YgVFBNUG9saWN5IE9QVElPTkFMCiAgICAgc2VjcmV0ICAgICAgWzJdIEVY UExJQ0lUIE9DVEVUIFNUUklORyBPUFRJT05BTAogICAgIGF1dGhQb2xpY3kgIFszXSBFWFBMSUNJ VCBTRVFVRU5DRSBPRiBUUE1BdXRoUG9saWN5IE9QVElPTkFMCiAgICAgZGVzY3JpcHRpb24gWzRd IEVYUExJQ0lUIFVURjhTdHJpbmcgT1BUSU9OQUwsCiAgICAgcnNhUGFyZW50ICAgWzVdIEVYUExJ Q0lUIEJPT0xFQU4gT1BUSU9OQUwsCiAgICAgcGFyZW50ICAgICAgSU5URUdFUgogICAgIHB1Ymtl eSAgICAgIE9DVEVUIFNUUklORwogICAgIHByaXZrZXkgICAgIE9DVEVUIFNUUklORwogICB9Cgog IFRoZSBUUE0yIGtleSBwcm90ZWN0b3Igb25seSBleHBlY3RzIGEgInNlYWxlZCIga2V5IGluIERF UiBlbmNvZGluZywKICBzbyAndHlwZScgaXMgYWx3YXlzIDIuMjMuMTMzLjEwLjEuNSwgJ2VtcHR5 QXV0aCcgaXMgJ1RSVUUnLCBhbmQKICAnc2VjcmV0JyBpcyBlbXB0eS4gJ3BvbGljeScgYW5kICdh dXRoUG9saWN5JyBhcmUgdGhlIHBvc3NpYmxlIHBvbGljeQogIGNvbW1hbmQgc2VxdWVuY2VzIHRv IGNvbnN0cnVzdCB0aGUgcG9saWN5IGRpZ2VzdCB0byB1bnNlYWwgdGhlIGtleS4KICBTaW1pbGFy IHRvIHRoZSByYXcgc2VhbGVkIGtleSwgdGhlIHB1YmxpYyBwb3J0aW9uIChUUE0yQl9QVUJMSUMp IG9mCiAgdGhlIHNlYWxlZCBrZXkgaXMgc3RvcmVkIGluICdwdWJrZXknLCBhbmQgdGhlIHByaXZh dGUgcG9ydGlvbgogIChUUE0yQl9QUklWQVRFKSBpcyBpbiAncHJpdmtleScuCgogIEZvciBtb3Jl IGRldGFpbHM6IGh0dHBzOi8vd3d3LmhhbnNlbnBhcnRuZXJzaGlwLmNvbS9kcmFmdC1ib3R0b21s ZXktdHBtMi1rZXlzLmh0bWwKClRoaXMgc2VhbGVkIGtleSBmaWxlIGlzIGNyZWF0ZWQgdmlhIHRo ZSBncnViLXByb3RlY3QgdG9vbC4gVGhlIHRvb2wKdXRpbGl6ZXMgdGhlIFRQTSdzIHNlYWxpbmcg ZnVuY3Rpb25hbGl0eSB0byBzZWFsIChpLmUuLCBlbmNyeXB0KSBhbgp1bmxvY2tpbmcga2V5IHVz aW5nIGEgU3RvcmFnZSBSb290IEtleSAoU1JLKSB0byB0aGUgdmFsdWVzIG9mIHZhcmlvdXMKUGxh dGZvcm0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKFBDUnMpLiBUaGVzZSBQQ1JzIHJlZmxlY3Qg dGhlIHN0YXRlCm9mIHRoZSBzeXN0ZW0gYXMgaXQgYm9vdHMuIElmIHRoZSB2YWx1ZXMgYXJlIGFz IGV4cGVjdGVkLCB0aGUgc3lzdGVtCm1heSBiZSBjb25zaWRlcmVkIHRydXN0d29ydGh5LCBhdCB3 aGljaCBwb2ludCB0aGUgVFBNIGFsbG93cyBmb3IgYQpjYWxsZXIgdG8gdXRpbGl6ZSB0aGUgcHJp dmF0ZSBjb21wb25lbnQgb2YgdGhlIFNSSyB0byB1bnNlYWwgKGkuZS4sCmRlY3J5cHQpIHRoZSBz ZWFsZWQga2V5IGZpbGUuIFRoZSBjYWxsZXIsIGluIHRoaXMgY2FzZSwgaXMgdGhpcyBrZXkKcHJv dGVjdG9yLgoKVGhlIFRQTTIga2V5IHByb3RlY3RvciByZWdpc3RlcnMgdHdvIGNvbW1hbmRzOgoK LSB0cG0yX2tleV9wcm90ZWN0b3JfaW5pdDogSW5pdGlhbGl6ZXMgdGhlIHN0YXRlIG9mIHRoZSBU UE0yIGtleQogICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0b3IgZm9yIGxhdGVyIHVz YWdlLCBjbGVhcmluZyBhbnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgc3Rh dGUsIHRvbywgaWYgYW55LgoKLSB0cG0yX2tleV9wcm90ZWN0b3JfY2xlYXI6IENsZWFycyBhbnkg c3RhdGUgc2V0IGJ5IHRwbTJfa2V5X3Byb3RlY3Rvcl9pbml0LgoKVGhlIHdheSB0aGlzIGlzIGV4 cGVjdGVkIHRvIGJlIHVzZWQgcmVxdWlyZXMgdGhlIHVzZXIgdG8sIGVpdGhlcgppbnRlcmFjdGl2 ZWx5IG9yLCBub3JtYWxseSwgdmlhIGEgYm9vdCBzY3JpcHQsIGluaXRpYWxpemUvY29uZmlndXJl CnRoZSBrZXkgcHJvdGVjdG9yIGFuZCB0aGVuIHNwZWNpZnkgdGhhdCBpdCBiZSB1c2VkIGJ5IHRo ZSAnY3J5cHRvbW91bnQnCmNvbW1hbmQgKG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBjb21tYW5kIGFy ZSBpbiBhIGRpZmZlcmVudCBwYXRjaCkuCgpGb3IgaW5zdGFuY2UsIHRvIHVuc2VhbCB0aGUgcmF3 IHNlYWxlZCBrZXkgZmlsZToKCnRwbTJfa2V5X3Byb3RlY3Rvcl9pbml0IC0ta2V5ZmlsZT0oaGQw LGdwdDEpL2VmaS9ncnViL3NlYWxlZC0xLmtleQpjcnlwdG9tb3VudCAtdSA8UEFSVDFfVVVJRD4g LVAgdHBtMgoKdHBtMl9rZXlfcHJvdGVjdG9yX2luaXQgLS1rZXlmaWxlPShoZDAsZ3B0MSkvZWZp L2dydWIvc2VhbGVkLTIua2V5IC0tcGNycz03LDExCmNyeXB0b21vdW50IC11IDxQQVJUMl9VVUlE PiAtUCB0cG0yCgpPciwgdG8gdW5zZWFsIHRoZSBUUE0gMi4wIEtleSBmaWxlOgoKdHBtMl9rZXlf cHJvdGVjdG9yX2luaXQgLS10cG0ya2V5PShoZDAsZ3B0MSkvZWZpL2dydWIvc2VhbGVkLTEudHBt CmNyeXB0b21vdW50IC11IDxQQVJUMV9VVUlEPiAtUCB0cG0yCgp0cG0yX2tleV9wcm90ZWN0b3Jf aW5pdCAtLXRwbTJrZXk9KGhkMCxncHQxKS9lZmkvZ3J1Yi9zZWFsZWQtMi50cG0gLS1wY3JzPTcs MTEKY3J5cHRvbW91bnQgLXUgPFBBUlQyX1VVSUQ+IC1QIHRwbTIKCklmIGEgdXNlciBkb2VzIG5v dCBpbml0aWFsaXplIHRoZSBrZXkgcHJvdGVjdG9yIGFuZCBhdHRlbXB0cyB0byB1c2UgaXQKYW55 d2F5LCB0aGUgcHJvdGVjdG9yIHJldHVybnMgYW4gZXJyb3IuCgpCZWZvcmUgdW5zZWFsaW5nIHRo ZSBrZXksIHRoZSBUUE0yIGtleSBwcm90ZWN0b3IgZm9sbG93cyB0aGUgIlRQTVBvbGljeSIKc2Vx dWVuY2VzIHRvIGVuZm9yY2UgdGhlIFRQTSBwb2xpY3kgY29tbWFuZHMgdG8gY29uc3RydWN0IGEg dmFsaWQgcG9saWN5CmRpZ2VzdCB0byB1bnNlYWwgdGhlIGtleS4KCkZvciB0aGUgVFBNIDIuMCBL ZXkgZmlsZXMsICdhdXRoUG9saWN5JyBtYXkgY29udGFpbiBtdWx0aXBsZSAiVFBNUG9saWN5Igpz ZXF1ZW5jZXMsIHRoZSBUUE0yIGtleSBwcm90ZWN0b3IgaXRlcmF0ZXMgJ2F1dGhQb2xpY3knIHRv IGZpbmQgYSB2YWxpZApzZXF1ZW5jZSB0byB1bnNlYWwga2V5LiBJZiAnYXV0aFBvbGljeScgaXMg ZW1wdHkgb3IgYWxsIHNlcXVlbmNlcyBpbgonYXV0aFBvbGljeScgZmFpbCwgdGhlIHByb3RlY3Rv ciB0cmllcyB0aGUgb25lIGZyb20gJ3BvbGljeScuIEluIGNhc2UKJ3BvbGljeScgaXMgYWxzbyBl bXB0eSwgdGhlIHByb3RlY3RvciBjcmVhdGVzIGEgIlRQTVBvbGljeSIgc2VxdWVuY2UKYmFzZWQg b24gdGhlIGdpdmVuIFBDUiBzZWxlY3Rpb24uCgpGb3IgdGhlIHJhdyBzZWFsZWQga2V5LCB0aGUg VFBNMiBrZXkgcHJvdGVjdG9yIHRyZWF0cyB0aGUga2V5IGZpbGUgYXMgYQpUUE0gMi4wIEtleSBm aWxlIHdpdGhvdXQgJ2F1dGhQb2xpY3knIGFuZCAncG9saWN5Jywgc28gdGhlICJUUE1Qb2xpY3ki CnNlcXVlbmNlIGlzIGFsd2F5cyBiYXNlZCBvbiB0aGUgUENSIHNlbGVjdGlvbiBmcm9tIHRoZSBj b21tYW5kCnBhcmFtZXRlcnMuCgpUaGlzIGNvbW1pdCBvbmx5IHN1cHBvcnRzIG9uZSBwb2xpY3kg Y29tbWFuZDogVFBNMl9Qb2xpY3lQQ1IuIFRoZQpjb21tYW5kIHNldCB3aWxsIGJlIGV4dGVuZGVk IHRvIHN1cHBvcnQgYWR2YW5jZWQgZmVhdHVyZXMsIHN1Y2ggYXMKYXV0aG9yaXplZCBwb2xpY3ks IGluIHRoZSBsYXRlciBjb21taXRzLgoKQ2M6IEphbWVzIEJvdHRvbWxleSA8amVqYkBsaW51eC5p Ym0uY29tPgpTaWduZWQtb2ZmLWJ5OiBIZXJuYW4gR2F0dGEgPGhlZ2F0dGFAbGludXgubWljcm9z b2Z0LmNvbT4KU2lnbmVkLW9mZi1ieTogR2FyeSBMaW4gPGdsaW5Ac3VzZS5jb20+ClJldmlld2Vk LWJ5OiBEYW5pZWwgS2lwZXIgPGRhbmllbC5raXBlckBvcmFjbGUuY29tPgpSZXZpZXdlZC1ieTog U3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC5pYm0uY29tPgotLS0KIGdydWItY29yZS9NYWtl ZmlsZS5jb3JlLmRlZiAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogZ3J1Yi1jb3JlL2NvbW1h bmRzL3RwbTJfa2V5X3Byb3RlY3Rvci9hcmdzLmMgIHwgIDEyNyArKwogLi4uL2NvbW1hbmRzL3Rw bTJfa2V5X3Byb3RlY3Rvci9tb2R1bGUuYyAgICAgIHwgMTE1MyArKysrKysrKysrKysrKysrKwog Z3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0yLmggIHwgICAzNiArCiAu Li4vY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3RwbTJfYXJncy5oICAgfCAgIDQ5ICsKIC4u Li9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvdHBtMmtleS5hc24gICB8ICAgNDkgKwogLi4u L2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5LmMgICAgIHwgIDQ5OSArKysrKysr CiAuLi4vY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3RwbTJrZXkuaCAgICAgfCAgIDg3ICsr CiAuLi4vdHBtMl9rZXlfcHJvdGVjdG9yL3RwbTJrZXlfYXNuMV90YWIuYyAgICAgfCAgIDYzICsK IDkgZmlsZXMgY2hhbmdlZCwgMjA3NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci9hcmdzLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL21vZHVsZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90 cG0yLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJv dGVjdG9yL3RwbTJfYXJncy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRz L3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5LmFzbgogY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWIt Y29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvdHBtMmtleS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3Rw bTJrZXlfYXNuMV90YWIuYwoKZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRl ZiBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgppbmRleCA0NWI3MDVhMzQuLjk3YWU0ZTQ5 YiAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCisrKyBiL2dydWItY29y ZS9NYWtlZmlsZS5jb3JlLmRlZgpAQCAtMjU3OCw2ICsyNTc4LDE3IEBAIG1vZHVsZSA9IHsKICAg Y3BwZmxhZ3MgPSAnLUkkKHNyY2RpcikvbGliL3RzczInOwogfTsKIAorbW9kdWxlID0geworICBu YW1lID0gdHBtMl9rZXlfcHJvdGVjdG9yOworICBjb21tb24gPSBjb21tYW5kcy90cG0yX2tleV9w cm90ZWN0b3IvYXJncy5jOworICBjb21tb24gPSBjb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3Iv bW9kdWxlLmM7CisgIGNvbW1vbiA9IGNvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5 LmM7CisgIGNvbW1vbiA9IGNvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5X2FzbjFf dGFiLmM7CisgIC8qIFRoZSBwbGFmb3JtIHN1cHBvcnQgb2YgdHBtMl9rZXlfcHJvdGVjdG9yIGRl cGVuZHMgb24gdGhlIHRjZzIgaW1wbGVtZW50YXRpb24gaW4gdHNzMi4gKi8KKyAgZW5hYmxlID0g ZWZpOworICBjcHBmbGFncyA9ICctSSQoc3JjZGlyKS9saWIvdHNzMiAtSSQoc3JjZGlyKS9saWIv bGlidGFzbjEtZ3J1Yic7Cit9OworCiBtb2R1bGUgPSB7CiAgIG5hbWUgPSB0cjsKICAgY29tbW9u ID0gY29tbWFuZHMvdHIuYzsKZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy90cG0yX2tl eV9wcm90ZWN0b3IvYXJncy5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rv ci9hcmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi40OGMzOWRlMDEK LS0tIC9kZXYvbnVsbAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9y L2FyZ3MuYwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmll ZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1pY3Jvc29mdCBDb3Jwb3JhdGlv bgorICogIENvcHlyaWdodCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNs dWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+CisKKyNpbmNsdWRlICJ0cG0y X2FyZ3MuaCIKKworZ3J1Yl9lcnJfdAorZ3J1Yl90cG0yX3Byb3RlY3Rvcl9wYXJzZV9wY3JzIChj aGFyICp2YWx1ZSwgZ3J1Yl91aW50OF90ICpwY3JzLAorCQkJCWdydWJfdWludDhfdCAqcGNyX2Nv dW50KQoreworICBjaGFyICpjdXJyZW50X3BjciA9IHZhbHVlOworICBjaGFyICpuZXh0X3BjcjsK KyAgY29uc3QgY2hhciAqcGNyX2VuZDsKKyAgZ3J1Yl91aW50NjRfdCBwY3I7CisgIGdydWJfdWlu dDhfdCBpOworCisgIGlmIChncnViX3N0cmxlbiAodmFsdWUpID09IDApCisgICAgcmV0dXJuIEdS VUJfRVJSX0JBRF9BUkdVTUVOVDsKKworICAqcGNyX2NvdW50ID0gMDsKKyAgZm9yIChpID0gMDsg aSA8IFRQTV9NQVhfUENSUzsgaSsrKQorICAgIHsKKyAgICAgIG5leHRfcGNyID0gZ3J1Yl9zdHJj aHIgKGN1cnJlbnRfcGNyLCAnLCcpOworICAgICAgaWYgKG5leHRfcGNyID09IGN1cnJlbnRfcGNy KQorCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJlbXB0eSBl bnRyeSBpbiBQQ1IgbGlzdCIpKTsKKyAgICAgIGlmIChuZXh0X3BjciAhPSBOVUxMKQorCSpuZXh0 X3BjciA9ICdcMCc7CisKKyAgICAgIHBjciA9IGdydWJfc3RydG91bCAoY3VycmVudF9wY3IsICZw Y3JfZW5kLCAxMCk7CisgICAgICBpZiAoKmN1cnJlbnRfcGNyID09ICdcMCcgfHwgKnBjcl9lbmQg IT0gJ1wwJykKKwlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX05VTUJFUiwgTl8oImVu dHJ5ICclcycgaW4gUENSIGxpc3QgaXMgbm90IGEgbnVtYmVyIiksIGN1cnJlbnRfcGNyKTsKKwor ICAgICAgaWYgKHBjciA+IFRQTV9NQVhfUENSUyAtIDEpCisJcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX09VVF9PRl9SQU5HRSwgTl8oImVudHJ5ICVsbHUgaW4gUENSIGxpc3QgaXMgdG9vIGxh cmdlIHRvIGJlIGEgUENSIG51bWJlciwgUENSIG51bWJlcnMgcmFuZ2UgZnJvbSAwIHRvICV1Iiks ICh1bnNpZ25lZCBsb25nIGxvbmcpcGNyLCBUUE1fTUFYX1BDUlMgLSAxKTsKKworICAgICAgcGNy c1tpXSA9IChncnViX3VpbnQ4X3QpIHBjcjsKKyAgICAgICsrKCpwY3JfY291bnQpOworCisgICAg ICBpZiAobmV4dF9wY3IgPT0gTlVMTCkKKwlicmVhazsKKworICAgICAgY3VycmVudF9wY3IgPSBu ZXh0X3BjciArIDE7CisgICAgICBpZiAoKmN1cnJlbnRfcGNyID09ICdcMCcpCisJcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oInRyYWlsaW5nIGNvbW1hIGF0IHRo ZSBlbmQgb2YgUENSIGxpc3QiKSk7CisgICAgfQorCisgIGlmIChpID09IFRQTV9NQVhfUENSUykK KyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCBOXygidG9vIG1h bnkgUENScyBpbiBQQ1IgbGlzdCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIFBDUnMgaXMgJXUiKSwg VFBNX01BWF9QQ1JTKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworZ3J1Yl9lcnJf dAorZ3J1Yl90cG0yX3Byb3RlY3Rvcl9wYXJzZV9hc3ltbWV0cmljIChjb25zdCBjaGFyICp2YWx1 ZSwKKwkJCQkgICAgICBncnViX3Nya190eXBlX3QgKnNya190eXBlKQoreworICBpZiAoZ3J1Yl9z dHJjYXNlY21wICh2YWx1ZSwgIkVDQyIpID09IDAgfHwKKyAgICAgIGdydWJfc3RyY2FzZWNtcCAo dmFsdWUsICJFQ0NfTklTVF9QMjU2IikgPT0gMCkKKyAgICB7CisgICAgICBzcmtfdHlwZS0+dHlw ZSA9IFRQTV9BTEdfRUNDOworICAgICAgc3JrX3R5cGUtPmRldGFpbC5lY2NfY3VydmUgPSBUUE1f RUNDX05JU1RfUDI1NjsKKyAgICB9CisgIGVsc2UgaWYgKGdydWJfc3RyY2FzZWNtcCAodmFsdWUs ICJSU0EiKSA9PSAwIHx8CisJICAgZ3J1Yl9zdHJjYXNlY21wICh2YWx1ZSwgIlJTQTIwNDgiKSA9 PSAwKQorICAgIHsKKyAgICAgIHNya190eXBlLT50eXBlID0gVFBNX0FMR19SU0E7CisgICAgICBz cmtfdHlwZS0+ZGV0YWlsLnJzYV9iaXRzID0gMjA0ODsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCBOXygidmFsdWUgJyVzJyBpcyBu b3QgYSB2YWxpZCBhc3ltbWV0cmljIGtleSB0eXBlIiksIHZhbHVlKTsKKworICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsKK30KKworZ3J1Yl9lcnJfdAorZ3J1Yl90cG0yX3Byb3RlY3Rvcl9wYXJzZV9i YW5rIChjb25zdCBjaGFyICp2YWx1ZSwgVFBNX0FMR19JRF90ICpiYW5rKQoreworICBpZiAoZ3J1 Yl9zdHJjYXNlY21wICh2YWx1ZSwgIlNIQTEiKSA9PSAwKQorICAgICpiYW5rID0gVFBNX0FMR19T SEExOworICBlbHNlIGlmIChncnViX3N0cmNhc2VjbXAgKHZhbHVlLCAiU0hBMjU2IikgPT0gMCkK KyAgICAqYmFuayA9IFRQTV9BTEdfU0hBMjU2OworICBlbHNlIGlmIChncnViX3N0cmNhc2VjbXAg KHZhbHVlLCAiU0hBMzg0IikgPT0gMCkKKyAgICAqYmFuayA9IFRQTV9BTEdfU0hBMzg0OworICBl bHNlIGlmIChncnViX3N0cmNhc2VjbXAgKHZhbHVlLCAiU0hBNTEyIikgPT0gMCkKKyAgICAqYmFu ayA9IFRQTV9BTEdfU0hBNTEyOworICBlbHNlCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX09VVF9PRl9SQU5HRSwgTl8oInZhbHVlICclcycgaXMgbm90IGEgdmFsaWQgUENSIGJhbmsi KSwgdmFsdWUpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitncnViX2Vycl90Citn cnViX3RwbTJfcHJvdGVjdG9yX3BhcnNlX3RwbV9oYW5kbGUgKGNvbnN0IGNoYXIgKnZhbHVlLCBU UE1fSEFORExFX3QgKmhhbmRsZSkKK3sKKyAgZ3J1Yl91aW50NjRfdCBudW07CisgIGNvbnN0IGNo YXIgKnN0cl9lbmQ7CisKKyAgbnVtID0gZ3J1Yl9zdHJ0b3VsICh2YWx1ZSwgJnN0cl9lbmQsIDAp OworICBpZiAoKnZhbHVlID09ICdcMCcgfHwgKnN0cl9lbmQgIT0gJ1wwJykKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX05VTUJFUiwgTl8oIlRQTSBoYW5kbGUgdmFsdWUgJyVz JyBpcyBub3QgYSBudW1iZXIiKSwgdmFsdWUpOworCisgIGlmIChudW0gPiBHUlVCX1VJTlRfTUFY KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsIE5fKCJ2YWx1 ZSAlbGx1IGlzIHRvbyBsYXJnZSB0byBiZSBhIFRQTSBoYW5kbGUsIFRQTSBoYW5kbGVzIGFyZSB1 bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMiKSwgKHVuc2lnbmVkIGxvbmcgbG9uZyludW0pOworCisg ICpoYW5kbGUgPSAoVFBNX0hBTkRMRV90KSBudW07CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7 Cit9CmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL21v ZHVsZS5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci9tb2R1bGUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjcwZDRkMGRmNwotLS0gL2Rldi9u dWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvbW9kdWxlLmMK QEAgLTAsMCArMSwxMTUzIEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rs b2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWljcm9zb2Z0IENvcnBvcmF0aW9uCisgKiAg Q29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAq ICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxncnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1 Yi9leHRjbWQuaD4KKyNpbmNsdWRlIDxncnViL2ZpbGUuaD4KKyNpbmNsdWRlIDxncnViL2xpc3Qu aD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVk ZSA8Z3J1Yi9rZXlfcHJvdGVjdG9yLmg+CisKKyNpbmNsdWRlIDx0c3MyX2J1ZmZlci5oPgorI2lu Y2x1ZGUgPHRzczJfdHlwZXMuaD4KKyNpbmNsdWRlIDx0c3MyX211Lmg+CisKKyNpbmNsdWRlICJ0 cG0yX2FyZ3MuaCIKKyNpbmNsdWRlICJ0cG0yLmgiCisjaW5jbHVkZSAidHBtMmtleS5oIgorCitH UlVCX01PRF9MSUNFTlNFICgiR1BMdjMrIik7CisKK3R5cGVkZWYgZW51bSB0cG0yX3Byb3RlY3Rv cl9tb2RlCit7CisgIFRQTTJfUFJPVEVDVE9SX01PREVfVU5TRVQsCisgIFRQTTJfUFJPVEVDVE9S X01PREVfU1JLLAorICBUUE0yX1BST1RFQ1RPUl9NT0RFX05WCit9IHRwbTJfcHJvdGVjdG9yX21v ZGVfdDsKKwordHlwZWRlZiBlbnVtIHRwbTJfcHJvdGVjdG9yX29wdGlvbnMKK3sKKyAgT1BUSU9O X01PREUsCisgIE9QVElPTl9QQ1JTLAorICBPUFRJT05fQkFOSywKKyAgT1BUSU9OX1RQTTJLRVks CisgIE9QVElPTl9LRVlGSUxFLAorICBPUFRJT05fU1JLLAorICBPUFRJT05fQVNZTU1FVFJJQywK KyAgT1BUSU9OX05WSU5ERVgKK30gdHBtMl9wcm90ZWN0b3Jfb3B0aW9uc190OworCit0eXBlZGVm IHN0cnVjdCB0cG0yX3Byb3RlY3Rvcl9jb250ZXh0Cit7CisgIHRwbTJfcHJvdGVjdG9yX21vZGVf dCBtb2RlOworICBncnViX3VpbnQ4X3QgcGNyc1tUUE1fTUFYX1BDUlNdOworICBncnViX3VpbnQ4 X3QgcGNyX2NvdW50OworICBncnViX3Nya190eXBlX3Qgc3JrX3R5cGU7CisgIFRQTV9BTEdfSURf dCBiYW5rOworICBjb25zdCBjaGFyICp0cG0ya2V5OworICBjb25zdCBjaGFyICprZXlmaWxlOwor ICBUUE1fSEFORExFX3Qgc3JrOworICBUUE1fSEFORExFX3QgbnY7Cit9IHRwbTJfcHJvdGVjdG9y X2NvbnRleHRfdDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBncnViX2FyZ19vcHRpb24gdHBtMl9w cm90ZWN0b3JfaW5pdF9jbWRfb3B0aW9uc1tdID0KKyAgeworICAgIC8qIE9wdGlvbnMgZm9yIGFs bCBtb2RlcyAqLworICAgIHsKKyAgICAgIC5sb25nYXJnICA9ICJtb2RlIiwKKyAgICAgIC5zaG9y dGFyZyA9ICdtJywKKyAgICAgIC5mbGFncyAgICA9IDAsCisgICAgICAuYXJnICAgICAgPSBOVUxM LAorICAgICAgLnR5cGUgICAgID0gQVJHX1RZUEVfU1RSSU5HLAorICAgICAgLmRvYyAgICAgID0K KwlOXygiVW5zZWFsIGtleSB1c2luZyBTUksgKCdzcmsnKSAoZGVmYXVsdCkgb3IgcmV0cmlldmUg aXQgZnJvbSBhbiBOViAiCisJICAgIkluZGV4ICgnbnYnKS4iKSwKKyAgICB9LAorICAgIHsKKyAg ICAgIC5sb25nYXJnICA9ICJwY3JzIiwKKyAgICAgIC5zaG9ydGFyZyA9ICdwJywKKyAgICAgIC5m bGFncyAgICA9IDAsCisgICAgICAuYXJnICAgICAgPSBOVUxMLAorICAgICAgLnR5cGUgICAgID0g QVJHX1RZUEVfU1RSSU5HLAorICAgICAgLmRvYyAgICAgID0KKwlOXygiQ29tbWEtc2VwYXJhdGVk IGxpc3Qgb2YgUENScyB1c2VkIHRvIGF1dGhvcml6ZSBrZXkgcmVsZWFzZSAiCisJICAgImUuZy4s ICc3LDExJy4gKGRlZmF1bHQ6IDcpIiksCisgICAgfSwKKyAgICB7CisgICAgICAubG9uZ2FyZyAg PSAiYmFuayIsCisgICAgICAuc2hvcnRhcmcgPSAnYicsCisgICAgICAuZmxhZ3MgICAgPSAwLAor ICAgICAgLmFyZyAgICAgID0gTlVMTCwKKyAgICAgIC50eXBlICAgICA9IEFSR19UWVBFX1NUUklO RywKKyAgICAgIC5kb2MgICAgICA9CisJTl8oIkJhbmsgb2YgUENScyB1c2VkIHRvIGF1dGhvcml6 ZSBrZXkgcmVsZWFzZTogIgorCSAgICJTSEExLCBTSEEyNTYsIFNIQTM4NCBvciBTSEE1MTIuIChk ZWZhdWx0OiBTSEEyNTYpIiksCisgICAgfSwKKyAgICAvKiBTUkstbW9kZSBvcHRpb25zICovCisg ICAgeworICAgICAgLmxvbmdhcmcgID0gInRwbTJrZXkiLAorICAgICAgLnNob3J0YXJnID0gJ1Qn LAorICAgICAgLmZsYWdzICAgID0gMCwKKyAgICAgIC5hcmcgICAgICA9IE5VTEwsCisgICAgICAu dHlwZSAgICAgPSBBUkdfVFlQRV9TVFJJTkcsCisgICAgICAuZG9jICAgICAgPQorCU5fKCJJbiBT UksgbW9kZSwgcGF0aCB0byB0aGUga2V5IGZpbGUgaW4gdGhlIFRQTSAyLjAgS2V5IEZpbGUgZm9y bWF0ICIKKwkgICAidG8gdW5zZWFsIHVzaW5nIHRoZSBUUE0gKGUuZy4sIChoZDAsZ3B0MSkvYm9v dC9ncnViMi9zZWFsZWQudHBtKS4iKSwKKyAgICB9LAorICAgIHsKKyAgICAgIC5sb25nYXJnICA9 ICJrZXlmaWxlIiwKKyAgICAgIC5zaG9ydGFyZyA9ICdrJywKKyAgICAgIC5mbGFncyAgICA9IDAs CisgICAgICAuYXJnICAgICAgPSBOVUxMLAorICAgICAgLnR5cGUgICAgID0gQVJHX1RZUEVfU1RS SU5HLAorICAgICAgLmRvYyAgICAgID0KKwlOXygiSW4gU1JLIG1vZGUsIHBhdGggdG8gdGhlIGtl eSBmaWxlIGluIHRoZSByYXcgZm9ybWF0IHRvIHVuc2VhbCAiCisJICAgInVzaW5nIHRoZSBUUE0g KGUuZy4sIChoZDAsZ3B0MSkvYm9vdC9ncnViMi9zZWFsZWQua2V5KS4gIgorCSAgICIoTWFpbmx5 IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBQbGVhc2UgdXNlICctLXRwbTJrZXknLikiKSwK KyAgICB9LAorICAgIHsKKyAgICAgIC5sb25nYXJnICA9ICJzcmsiLAorICAgICAgLnNob3J0YXJn ID0gJ3MnLAorICAgICAgLmZsYWdzICAgID0gMCwKKyAgICAgIC5hcmcgICAgICA9IE5VTEwsCisg ICAgICAudHlwZSAgICAgPSBBUkdfVFlQRV9TVFJJTkcsCisgICAgICAuZG9jICAgICAgPQorCU5f KCJJbiBTUksgbW9kZSwgdGhlIFNSSyBoYW5kbGUgaWYgdGhlIFNSSyBpcyBwZXJzaXN0ZW50LiIp LAorICAgIH0sCisgICAgeworICAgICAgLmxvbmdhcmcgID0gImFzeW1tZXRyaWMiLAorICAgICAg LnNob3J0YXJnID0gJ2EnLAorICAgICAgLmZsYWdzICAgID0gMCwKKyAgICAgIC5hcmcgICAgICA9 IE5VTEwsCisgICAgICAudHlwZSAgICAgPSBBUkdfVFlQRV9TVFJJTkcsCisgICAgICAuZG9jICAg ICAgPQorCU5fKCJJbiBTUksgbW9kZSwgdGhlIHR5cGUgb2YgU1JLOiBSU0EgKFJTQTIwNDgpIGFu ZCBFQ0MgKEVDQ19OSVNUX1AyNTYpIgorCSAgICIoZGVmYXVsdDogRUNDKSIpLAorICAgIH0sCisg ICAgLyogTlYgSW5kZXgtbW9kZSBvcHRpb25zICovCisgICAgeworICAgICAgLmxvbmdhcmcgID0g Im52aW5kZXgiLAorICAgICAgLnNob3J0YXJnID0gJ24nLAorICAgICAgLmZsYWdzICAgID0gMCwK KyAgICAgIC5hcmcgICAgICA9IE5VTEwsCisgICAgICAudHlwZSAgICAgPSBBUkdfVFlQRV9TVFJJ TkcsCisgICAgICAuZG9jICAgICAgPQorCU5fKCJSZXF1aXJlZCBpbiBOViBJbmRleCBtb2RlLCB0 aGUgTlYgaGFuZGxlIHRvIHJlYWQgd2hpY2ggbXVzdCAiCisJICAgInJlYWRpbHkgZXhpc3Qgb24g dGhlIFRQTSBhbmQgd2hpY2ggY29udGFpbnMgdGhlIGtleS4iKSwKKyAgICB9LAorICAgIC8qIEVu ZCBvZiBsaXN0ICovCisgICAgezAsIDAsIDAsIDAsIDAsIDB9CisgIH07CisKK3N0YXRpYyBncnVi X2V4dGNtZF90IHRwbTJfcHJvdGVjdG9yX2luaXRfY21kOworc3RhdGljIGdydWJfZXh0Y21kX3Qg dHBtMl9wcm90ZWN0b3JfY2xlYXJfY21kOworc3RhdGljIHRwbTJfcHJvdGVjdG9yX2NvbnRleHRf dCB0cG0yX3Byb3RlY3Rvcl9jdHggPSB7MH07CisKK3N0YXRpYyBncnViX2Vycl90Cit0cG0yX3By b3RlY3Rvcl9zcmtfcmVhZF9maWxlIChjb25zdCBjaGFyICpmaWxlcGF0aCwgdm9pZCAqKmJ1ZmZl ciwgZ3J1Yl9zaXplX3QgKmJ1ZmZlcl9zaXplKQoreworICBncnViX2ZpbGVfdCBmaWxlOworICBn cnViX29mZl90IGZpbGVfc2l6ZTsKKyAgdm9pZCAqcmVhZF9idWZmZXI7CisgIGdydWJfb2ZmX3Qg cmVhZF9uOworICBncnViX2Vycl90IGVycjsKKworICAvKgorICAgKiBVc2luZyBHUlVCX0ZJTEVf VFlQRV9TSUdOQVRVUkUgZW5zdXJlcyB3ZSBkbyBub3QgaGFzaCB0aGUga2V5ZmlsZSBpbnRvIFBD UjkKKyAgICogb3RoZXJ3aXNlIHdlJ2xsIG5ldmVyIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgdmFs dWUgb2YgUENSOSBhdCB1bnNlYWwgdGltZQorICAgKi8KKyAgZmlsZSA9IGdydWJfZmlsZV9vcGVu IChmaWxlcGF0aCwgR1JVQl9GSUxFX1RZUEVfU0lHTkFUVVJFKTsKKyAgaWYgKGZpbGUgPT0gTlVM TCkKKyAgICB7CisgICAgICAvKiBQdXNoIGVycm5vIGZyb20gZ3J1Yl9maWxlX29wZW4oKSBpbnRv IHRoZSBlcnJvciBtZXNzYWdlIHN0YWNrICovCisgICAgICBncnViX2Vycm9yX3B1c2goKTsKKyAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0ZJTEVfTk9UX0ZPVU5ELCBOXygiY291bGQg bm90IG9wZW4gZmlsZTogJXMiKSwgZmlsZXBhdGgpOworICAgICAgZ290byBlcnJvcjsKKyAgICB9 CisKKyAgZmlsZV9zaXplID0gZ3J1Yl9maWxlX3NpemUgKGZpbGUpOworICBpZiAoZmlsZV9zaXpl ID09IDApCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JB TkdFLCBOXygiY291bGQgbm90IHJlYWQgZmlsZSBzaXplOiAlcyIpLCBmaWxlcGF0aCk7CisgICAg ICBnb3RvIGVycm9yOworICAgIH0KKworICByZWFkX2J1ZmZlciA9IGdydWJfbWFsbG9jIChmaWxl X3NpemUpOworICBpZiAocmVhZF9idWZmZXIgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCBOXygiY291bGQgbm90IGFsbG9jYXRl IGJ1ZmZlciBmb3IgJXMiKSwgZmlsZXBhdGgpOworICAgICAgZ290byBlcnJvcjsKKyAgICB9CisK KyAgcmVhZF9uID0gZ3J1Yl9maWxlX3JlYWQgKGZpbGUsIHJlYWRfYnVmZmVyLCBmaWxlX3NpemUp OworICBpZiAocmVhZF9uICE9IGZpbGVfc2l6ZSkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKHJl YWRfYnVmZmVyKTsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0ZJTEVfUkVBRF9F UlJPUiwgTl8oImNvdWxkIG5vdCByZXRyaWV2ZSBmaWxlIGNvbnRlbnRzOiAlcyIpLCBmaWxlcGF0 aCk7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAqYnVmZmVyID0gcmVhZF9idWZmZXI7 CisgICpidWZmZXJfc2l6ZSA9IGZpbGVfc2l6ZTsKKworICBlcnIgPSBHUlVCX0VSUl9OT05FOwor CisgZXJyb3I6CisgIGlmIChmaWxlICE9IE5VTEwpCisgICAgZ3J1Yl9maWxlX2Nsb3NlIChmaWxl KTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAordHBtMl9wcm90ZWN0 b3Jfc3JrX3VubWFyc2hhbF9rZXlmaWxlICh2b2lkICpzZWFsZWRfa2V5LAorCQkJCSAgICAgIGdy dWJfc2l6ZV90IHNlYWxlZF9rZXlfc2l6ZSwKKwkJCQkgICAgICB0cG0yX3NlYWxlZF9rZXlfdCAq c2spCit7CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIGJ1ZjsKKworICBncnViX3RwbTJfYnVm ZmVyX2luaXQgKCZidWYpOworICBpZiAoc2VhbGVkX2tleV9zaXplID4gYnVmLmNhcCkKKyAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBOXygic2VhbGVkIGtleSBs YXJnZXIgdGhhbiAlbGx1IGJ5dGVzIiksICh1bnNpZ25lZCBsb25nIGxvbmcpYnVmLmNhcCk7CisK KyAgZ3J1Yl9tZW1jcHkgKGJ1Zi5kYXRhLCBzZWFsZWRfa2V5LCBzZWFsZWRfa2V5X3NpemUpOwor ICBidWYuc2l6ZSA9IHNlYWxlZF9rZXlfc2l6ZTsKKworICBncnViX1RzczJfTVVfVFBNMkJfUFVC TElDX1VubWFyc2hhbCAoJmJ1ZiwgJnNrLT5wdWJsaWMpOworICBncnViX1RzczJfTVVfVFBNMkJf UFJJVkFURV9Vbm1hcnNoYWwgKCZidWYsICZzay0+cHJpdmF0ZSk7CisKKyAgaWYgKGJ1Zi5lcnJv ciAhPSAwKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5f KCJtYWxmb3JtZWQgVFBNIHdpcmUga2V5IGZpbGUiKSk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05P TkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Cit0cG0yX3Byb3RlY3Rvcl9zcmtfdW5tYXJzaGFs X3RwbTJrZXkgKHZvaWQgKnNlYWxlZF9rZXksCisJCQkJICAgICAgZ3J1Yl9zaXplX3Qgc2VhbGVk X2tleV9zaXplLAorCQkJCSAgICAgIHRwbTJrZXlfcG9saWN5X3QgKnBvbGljeV9zZXEsCisJCQkJ ICAgICAgdHBtMmtleV9hdXRocG9saWN5X3QgKmF1dGhwb2xfc2VxLAorCQkJCSAgICAgIGdydWJf dWludDhfdCAqcnNhcGFyZW50LAorCQkJCSAgICAgIGdydWJfdWludDMyX3QgKnBhcmVudCwKKwkJ CQkgICAgICB0cG0yX3NlYWxlZF9rZXlfdCAqc2spCit7CisgIGFzbjFfbm9kZSB0cG0ya2V5ID0g TlVMTDsKKyAgZ3J1Yl91aW50OF90IHJzYXBhcmVudF90bXA7CisgIGdydWJfdWludDMyX3QgcGFy ZW50X3RtcDsKKyAgdm9pZCAqc2VhbGVkX3B1YiA9IE5VTEw7CisgIGdydWJfc2l6ZV90IHNlYWxl ZF9wdWJfc2l6ZTsKKyAgdm9pZCAqc2VhbGVkX3ByaXYgPSBOVUxMOworICBncnViX3NpemVfdCBz ZWFsZWRfcHJpdl9zaXplOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBidWY7CisgIGdydWJf ZXJyX3QgZXJyOworCisgIC8qCisgICAqIFN0YXJ0IHRvIHBhcnNlIHRoZSB0cG0ya2V5IGZpbGUK KyAgICogVFBNS2V5IDo6PSBTRVFVRU5DRSB7CisgICAqICAgICB0eXBlICAgICAgICBPQkpFQ1Qg SURFTlRJRklFUiwKKyAgICogICAgIGVtcHR5QXV0aCAgIFswXSBFWFBMSUNJVCBCT09MRUFOIE9Q VElPTkFMLAorICAgKiAgICAgcG9saWN5ICAgICAgWzFdIEVYUExJQ0lUIFNFUVVFTkNFIE9GIFRQ TVBvbGljeSBPUFRJT05BTCwKKyAgICogICAgIHNlY3JldCAgICAgIFsyXSBFWFBMSUNJVCBPQ1RF VCBTVFJJTkcgT1BUSU9OQUwsCisgICAqICAgICBhdXRoUG9saWN5ICBbM10gRVhQTElDSVQgU0VR VUVOQ0UgT0YgVFBNQXV0aFBvbGljeSBPUFRJT05BTCwKKyAgICogICAgIGRlc2NyaXB0aW9uIFs0 XSBFWFBMSUNJVCBVVEY4U3RyaW5nIE9QVElPTkFMLAorICAgKiAgICAgcnNhUGFyZW50ICAgWzVd IEVYUExJQ0lUIEJPT0xFQU4gT1BUSU9OQUwsCisgICAqICAgICBwYXJlbnQgICAgICBJTlRFR0VS LAorICAgKiAgICAgcHVia2V5ICAgICAgT0NURVQgU1RSSU5HLAorICAgKiAgICAgcHJpdmtleSAg ICAgT0NURVQgU1RSSU5HCisgICAqIH0KKyAgICovCisgIGVyciA9IGdydWJfdHBtMmtleV9zdGFy dF9wYXJzaW5nICgmdHBtMmtleSwgc2VhbGVkX2tleSwgc2VhbGVkX2tleV9zaXplKTsKKyAgaWYg KGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVybiBlcnI7CisKKyAgLyoKKyAgICogUmV0 cmlldmUgdGhlIHBvbGljeSBzZXF1ZW5jZSBmcm9tICdwb2xpY3knCisgICAqIHBvbGljeV9zZXEg d2lsbCBiZSBOVUxMIHdoZW4gJ3BvbGljeScgaXMgbm90IGF2YWlsYWJsZQorICAgKi8KKyAgZXJy ID0gZ3J1Yl90cG0ya2V5X2dldF9wb2xpY3lfc2VxICh0cG0ya2V5LCBwb2xpY3lfc2VxKTsKKyAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gZXJyb3I7CisKKyAgLyoKKyAgICog UmV0cmlldmUgdGhlIGF1dGhwb2xpY3kgc2VxdWVuY2UgZnJvbSAnYXV0aFBvbGljeScKKyAgICog YXV0aHBvbF9zZXEgd2lsbCBiZSBOVUxMIHdoZW4gJ2F1dGhQb2xpY3knIGlzIG5vdCBhdmFpbGFi bGUKKyAgICovCisgIGVyciA9IGdydWJfdHBtMmtleV9nZXRfYXV0aHBvbGljeV9zZXEgKHRwbTJr ZXksIGF1dGhwb2xfc2VxKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8g ZXJyb3I7CisKKyAgLyogUmV0cmlldmUgcnNhUGFyZW50ICovCisgIGVyciA9IGdydWJfdHBtMmtl eV9nZXRfcnNhcGFyZW50ICh0cG0ya2V5LCAmcnNhcGFyZW50X3RtcCk7CisgIGlmIChlcnIgIT0g R1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGVycm9yOworCisgICpyc2FwYXJlbnQgPSByc2FwYXJl bnRfdG1wOworCisgIC8qIFJldHJpZXZlIHRoZSBwYXJlbnQgaGFuZGxlICovCisgIGVyciA9IGdy dWJfdHBtMmtleV9nZXRfcGFyZW50ICh0cG0ya2V5LCAmcGFyZW50X3RtcCk7CisgIGlmIChlcnIg IT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGVycm9yOworCisgIC8qICBUaGUgcGFyZW50IGhh bmRsZSBzaG91bGQgYmUgZWl0aGVyIFBFUk1BTkVOVCBvciBQRVJTSVNURU5ULiAqLworICBpZiAo IVRQTV9IVF9JU19QRVJNQU5FTlQgKHBhcmVudF90bXApICYmICFUUE1fSFRfSVNfUEVSU0lTVEVO VCAocGFyZW50X3RtcCkpCisgICAgeworICAgICAgZXJyID0gR1JVQl9FUlJfT1VUX09GX1JBTkdF OworICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgKnBhcmVudCA9IHBhcmVudF90bXA7CisK KyAgLyogUmV0cmlldmUgdGhlIHB1YmxpYyBwYXJ0IG9mIHRoZSBzZWFsZWQga2V5ICovCisgIGVy ciA9IGdydWJfdHBtMmtleV9nZXRfcHVia2V5ICh0cG0ya2V5LCAmc2VhbGVkX3B1YiwgJnNlYWxl ZF9wdWJfc2l6ZSk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGVycm9y OworCisgIC8qIFJldHJpZXZlIHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIHNlYWxlZCBrZXkgKi8K KyAgZXJyID0gZ3J1Yl90cG0ya2V5X2dldF9wcml2a2V5ICh0cG0ya2V5LCAmc2VhbGVkX3ByaXYs ICZzZWFsZWRfcHJpdl9zaXplKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdv dG8gZXJyb3I7CisKKyAgLyogVW5tYXJzaGFsIHRoZSBzZWFsZWQga2V5ICovCisgIGdydWJfdHBt Ml9idWZmZXJfaW5pdCAoJmJ1Zik7CisgIGlmIChzZWFsZWRfcHViX3NpemUgKyBzZWFsZWRfcHJp dl9zaXplID4gYnVmLmNhcCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfQVJHVU1FTlQsIE5fKCJzZWFsZWQga2V5IGxhcmdlciB0aGFuICVsbHUgYnl0ZXMiKSwg KHVuc2lnbmVkIGxvbmcgbG9uZylidWYuY2FwKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQor CisgIGdydWJfdHBtMl9idWZmZXJfcGFjayAoJmJ1Ziwgc2VhbGVkX3B1Yiwgc2VhbGVkX3B1Yl9z aXplKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrICgmYnVmLCBzZWFsZWRfcHJpdiwgc2VhbGVk X3ByaXZfc2l6ZSk7CisKKyAgYnVmLm9mZnNldCA9IDA7CisKKyAgZ3J1Yl9Uc3MyX01VX1RQTTJC X1BVQkxJQ19Vbm1hcnNoYWwgKCZidWYsICZzay0+cHVibGljKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQ TTJCX1BSSVZBVEVfVW5tYXJzaGFsICgmYnVmLCAmc2stPnByaXZhdGUpOworCisgIGlmIChidWYu ZXJyb3IgIT0gMCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf QVJHVU1FTlQsIE5fKCJtYWxmb3JtZWQgVFBNIDIuMCBrZXkgZmlsZSIpKTsKKyAgICAgIGdvdG8g ZXJyb3I7CisgICAgfQorCisgIGVyciA9IEdSVUJfRVJSX05PTkU7CisKKyBlcnJvcjoKKyAgLyog RW5kIHRoZSBwYXJzaW5nICovCisgIGdydWJfdHBtMmtleV9lbmRfcGFyc2luZyAodHBtMmtleSk7 CisgIGdydWJfZnJlZSAoc2VhbGVkX3B1Yik7CisgIGdydWJfZnJlZSAoc2VhbGVkX3ByaXYpOwor CisgIHJldHVybiBlcnI7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBTUksgZXhpc3RzIGluIHRoZSBz cGVjaWZpZWQgaGFuZGxlICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordHBtMl9wcm90ZWN0b3Jfc3Jr X2NoZWNrIChjb25zdCBUUE1fSEFORExFX3Qgc3JrX2hhbmRsZSkKK3sKKyAgVFBNX1JDX3QgcmM7 CisgIFRQTTJCX1BVQkxJQ190IHB1YmxpYzsKKworICAvKiBGaW5kIFNSSyAqLworICByYyA9IGdy dWJfdHBtMl9yZWFkcHVibGljIChzcmtfaGFuZGxlLCBOVUxMLCAmcHVibGljKTsKKyAgaWYgKHJj ID09IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworCisgIHJldHVy biBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJmYWlsZWQgdG8gcmV0cmlldmUg U1JLIGZyb20gMHgleCAoVFBNMl9SZWFkUHVibGljOiAweCV4KSIsIHNya19oYW5kbGUsIHJjKTsK K30KKworLyogR2V0IHRoZSBTUksgd2l0aCB0aGUgdGVtcGxhdGUgKi8KK3N0YXRpYyBncnViX2Vy cl90Cit0cG0yX3Byb3RlY3Rvcl9zcmtfZ2V0IChjb25zdCBncnViX3Nya190eXBlX3Qgc3JrX3R5 cGUsCisJCQljb25zdCBUUE1fSEFORExFX3QgcGFyZW50LAorCQkJVFBNX0hBTkRMRV90ICpzcmtf aGFuZGxlKQoreworICBUUE1fUkNfdCByYzsKKyAgVFBNVF9QVUJMSUNfUEFSTVNfdCBwYXJtcyA9 IHswfTsKKyAgVFBNU19BVVRIX0NPTU1BTkRfdCBhdXRoQ29tbWFuZCA9IHswfTsKKyAgVFBNMkJf U0VOU0lUSVZFX0NSRUFURV90IGluU2Vuc2l0aXZlID0gezB9OworICBUUE0yQl9QVUJMSUNfdCBp blB1YmxpYyA9IHswfTsKKyAgVFBNMkJfREFUQV90IG91dHNpZGVJbmZvID0gezB9OworICBUUE1M X1BDUl9TRUxFQ1RJT05fdCBjcmVhdGlvblBjciA9IHswfTsKKyAgVFBNMkJfUFVCTElDX3Qgb3V0 UHVibGljID0gezB9OworICBUUE0yQl9DUkVBVElPTl9EQVRBX3QgY3JlYXRpb25EYXRhID0gezB9 OworICBUUE0yQl9ESUdFU1RfdCBjcmVhdGlvbkhhc2ggPSB7MH07CisgIFRQTVRfVEtfQ1JFQVRJ T05fdCBjcmVhdGlvblRpY2tldCA9IHswfTsKKyAgVFBNMkJfTkFNRV90IHNya05hbWUgPSB7MH07 CisgIFRQTV9IQU5ETEVfdCB0bXBfaGFuZGxlID0gMDsKKworICBpblB1YmxpYy5wdWJsaWNBcmVh LnR5cGUgPSBzcmtfdHlwZS50eXBlOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm5hbWVBbGcgPSBU UE1fQUxHX1NIQTI1NjsKKyAgaW5QdWJsaWMucHVibGljQXJlYS5vYmplY3RBdHRyaWJ1dGVzLnJl c3RyaWN0ZWQgPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMudXNl cldpdGhBdXRoID0gMTsKKyAgaW5QdWJsaWMucHVibGljQXJlYS5vYmplY3RBdHRyaWJ1dGVzLmRl Y3J5cHQgPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMuZml4ZWRU UE0gPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMuZml4ZWRQYXJl bnQgPSAxOworICBpblB1YmxpYy5wdWJsaWNBcmVhLm9iamVjdEF0dHJpYnV0ZXMuc2Vuc2l0aXZl RGF0YU9yaWdpbiA9IDE7CisgIGluUHVibGljLnB1YmxpY0FyZWEub2JqZWN0QXR0cmlidXRlcy5u b0RBID0gMTsKKworICBpZiAoc3JrX3R5cGUudHlwZSA9PSBUUE1fQUxHX1JTQSkKKyAgICB7Cisg ICAgICBpblB1YmxpYy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMucnNhRGV0YWlsLnN5bW1ldHJpYy5h bGdvcml0aG0gPSBUUE1fQUxHX0FFUzsKKyAgICAgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1l dGVycy5yc2FEZXRhaWwuc3ltbWV0cmljLmtleUJpdHMuYWVzID0gMTI4OworICAgICAgaW5QdWJs aWMucHVibGljQXJlYS5wYXJhbWV0ZXJzLnJzYURldGFpbC5zeW1tZXRyaWMubW9kZS5hZXMgPSBU UE1fQUxHX0NGQjsKKyAgICAgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1ldGVycy5yc2FEZXRh aWwuc2NoZW1lLnNjaGVtZSA9IFRQTV9BTEdfTlVMTDsKKyAgICAgIGluUHVibGljLnB1YmxpY0Fy ZWEucGFyYW1ldGVycy5yc2FEZXRhaWwua2V5Qml0cyA9IHNya190eXBlLmRldGFpbC5yc2FfYml0 czsKKyAgICAgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1ldGVycy5yc2FEZXRhaWwuZXhwb25l bnQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAoc3JrX3R5cGUudHlwZSA9PSBUUE1fQUxHX0VDQykK KyAgICB7CisgICAgICBpblB1YmxpYy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMuZWNjRGV0YWlsLnN5 bW1ldHJpYy5hbGdvcml0aG0gPSBUUE1fQUxHX0FFUzsKKyAgICAgIGluUHVibGljLnB1YmxpY0Fy ZWEucGFyYW1ldGVycy5lY2NEZXRhaWwuc3ltbWV0cmljLmtleUJpdHMuYWVzID0gMTI4OworICAg ICAgaW5QdWJsaWMucHVibGljQXJlYS5wYXJhbWV0ZXJzLmVjY0RldGFpbC5zeW1tZXRyaWMubW9k ZS5hZXMgPSBUUE1fQUxHX0NGQjsKKyAgICAgIGluUHVibGljLnB1YmxpY0FyZWEucGFyYW1ldGVy cy5lY2NEZXRhaWwuc2NoZW1lLnNjaGVtZSA9IFRQTV9BTEdfTlVMTDsKKyAgICAgIGluUHVibGlj LnB1YmxpY0FyZWEucGFyYW1ldGVycy5lY2NEZXRhaWwuY3VydmVJRCA9IHNya190eXBlLmRldGFp bC5lY2NfY3VydmU7CisgICAgICBpblB1YmxpYy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMuZWNjRGV0 YWlsLmtkZi5zY2hlbWUgPSBUUE1fQUxHX05VTEw7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgInVua25vd24gU1JLIGFsZ29yaXRo bSIpOworCisgIC8qIFRlc3QgdGhlIHBhcmFtZXRlcnMgYmVmb3JlIFNSSyBnZW5lcmF0aW9uICov CisgIHBhcm1zLnR5cGUgPSBzcmtfdHlwZS50eXBlOworICBncnViX21lbWNweSAoJnBhcm1zLnBh cmFtZXRlcnMsICZpblB1YmxpYy5wdWJsaWNBcmVhLnBhcmFtZXRlcnMsCisJICAgICAgIHNpemVv ZiAoVFBNVV9QVUJMSUNfUEFSTVNfdCkpOworCisgIHJjID0gZ3J1Yl90cG0yX3Rlc3RwYXJtcyAo JnBhcm1zLCBOVUxMKTsKKyAgaWYgKHJjICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJ1bnN1cHBvcnRlZCBTUksgdGVtcGxh dGUgKFRQTTJfVGVzdFBhcm1zOiAweCV4KSIsIHJjKTsKKworICAvKiBDcmVhdGUgU1JLICovCisg IGF1dGhDb21tYW5kLnNlc3Npb25IYW5kbGUgPSBUUE1fUlNfUFc7CisgIHJjID0gZ3J1Yl90cG0y X2NyZWF0ZXByaW1hcnkgKHBhcmVudCwgJmF1dGhDb21tYW5kLCAmaW5TZW5zaXRpdmUsICZpblB1 YmxpYywKKwkJCQkmb3V0c2lkZUluZm8sICZjcmVhdGlvblBjciwgJnRtcF9oYW5kbGUsICZvdXRQ dWJsaWMsCisJCQkJJmNyZWF0aW9uRGF0YSwgJmNyZWF0aW9uSGFzaCwgJmNyZWF0aW9uVGlja2V0 LAorCQkJCSZzcmtOYW1lLCBOVUxMKTsKKyAgaWYgKHJjICE9IFRQTV9SQ19TVUNDRVNTKQorICAg IHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAiY291bGQgbm90IGNyZWF0 ZSBTUksgKFRQTTJfQ3JlYXRlUHJpbWFyeTogMHgleCkiLCByYyk7CisKKyAgKnNya19oYW5kbGUg PSB0bXBfaGFuZGxlOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCisvKgorICogTG9h ZCB0aGUgU1JLIGZyb20gdGhlIHBlcnNpc3RlbnQgaGFuZGxlIG9yIGNyZWF0ZSBvbmUgd2l0aCBh IGdpdmVuIHR5cGUgb2YKKyAqIHRlbXBsYXRlLCBhbmQgdGhlbiBhc3NvY2lhdGUgdGhlIHNlYWxl ZCBrZXkgd2l0aCB0aGUgU1JLCisgKiBSZXR1cm4gdmFsdWVzOgorICogLSBHUlVCX0VSUl9OT05F OiBFdmVyeXRoaW5nIGlzIGZpbmUuCisgKiAtIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDogVGhlIFNS SyBkb2Vzbid0IG1hdGNoLiBUcnkgYW5vdGhlciBvbmUuCisgKiAtIE90aGVyOiBTb21ldGhpbmcg d2VudCB3cm9uZy4KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3RwbTJfcHJvdGVjdG9yX3Nya19s b2FkIChjb25zdCBncnViX3Nya190eXBlX3Qgc3JrX3R5cGUsCisJCQkgY29uc3QgdHBtMl9zZWFs ZWRfa2V5X3QgKnNlYWxlZF9rZXksCisJCQkgY29uc3QgVFBNX0hBTkRMRV90IHBhcmVudCwKKwkJ CSBUUE1fSEFORExFX3QgKnNlYWxlZF9oYW5kbGUsCisJCQkgVFBNX0hBTkRMRV90ICpzcmtfaGFu ZGxlKQoreworICBUUE1TX0FVVEhfQ09NTUFORF90IGF1dGhDbWQgPSB7MH07CisgIFRQTTJCX05B TUVfdCBuYW1lID0gezB9OworICBUUE1fUkNfdCByYzsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAg aWYgKHNya19oYW5kbGUgPT0gTlVMTCkKKyAgICByZXR1cm4gR1JVQl9FUlJfQlVHOworCisgIGlm ICgqc3JrX2hhbmRsZSAhPSAwKQorICAgIHsKKyAgICAgIGVyciA9IHRwbTJfcHJvdGVjdG9yX3Ny a19jaGVjayAoKnNya19oYW5kbGUpOworICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQor CXJldHVybiBlcnI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZXJyID0gdHBtMl9wcm90 ZWN0b3Jfc3JrX2dldCAoc3JrX3R5cGUsIHBhcmVudCwgc3JrX2hhbmRsZSk7CisgICAgICBpZiAo ZXJyICE9IEdSVUJfRVJSX05PTkUpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgLyogTG9hZCB0 aGUgc2VhbGVkIGtleSBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhlIFNSSyAqLworICBhdXRoQ21k LnNlc3Npb25IYW5kbGUgPSBUUE1fUlNfUFc7CisgIHJjID0gZ3J1Yl90cG0yX2xvYWQgKCpzcmtf aGFuZGxlLCAmYXV0aENtZCwgJnNlYWxlZF9rZXktPnByaXZhdGUsICZzZWFsZWRfa2V5LT5wdWJs aWMsCisJCSAgICAgICBzZWFsZWRfaGFuZGxlLCAmbmFtZSwgTlVMTCk7CisgIC8qCisgICAqIElm IFRQTTJfTG9hZCByZXR1cm5zIChUUE1fUkNfSU5URUdSSVRZIHwgVFBNX1JDX1AgfCBUUE1fUkNf MSksIHRoZW4gaXQKKyAgICogaW1wbGllcyB0aGUgd3JvbmcgU1JLIGlzIHVzZWQuCisgICAqLwor ICBpZiAocmMgPT0gKFRQTV9SQ19JTlRFR1JJVFkgfCBUUE1fUkNfUCB8IFRQTV9SQ18xKSkKKyAg ICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJTUksg bm90IG1hdGNoZWQiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICBlbHNlIGlmIChyYyAh PSBUUE1fUkNfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfREVWSUNFLCAiZmFpbGVkIHRvIGxvYWQgc2VhbGVkIGtleSAoVFBNMl9Mb2FkOiAweCV4 KSIsIHJjKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIHJldHVybiBHUlVCX0VSUl9O T05FOworCisgZXJyb3I6CisgIGlmICghVFBNX0hUX0lTX1BFUlNJU1RFTlQgKCpzcmtfaGFuZGxl KSkKKyAgICBncnViX3RwbTJfZmx1c2hjb250ZXh0ICgqc3JrX2hhbmRsZSk7CisKKyAgcmV0dXJu IGVycjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc3JrX3R5cGVfdG9fbmFtZSAoZ3J1Yl9z cmtfdHlwZV90IHNya190eXBlKQoreworICBpZiAoc3JrX3R5cGUudHlwZSA9PSBUUE1fQUxHX0VD QyAmJiBzcmtfdHlwZS5kZXRhaWwuZWNjX2N1cnZlID09IFRQTV9FQ0NfTklTVF9QMjU2KQorICAg IHJldHVybiAiRUNDX05JU1RfUDI1NiI7CisgIGVsc2UgaWYgKHNya190eXBlLnR5cGUgPT0gVFBN X0FMR19SU0EgJiYgc3JrX3R5cGUuZGV0YWlsLnJzYV9iaXRzID09IDIwNDgpCisgICAgcmV0dXJu ICJSU0EyMDQ4IjsKKworICByZXR1cm4gIlVua25vd24iOworfQorCitzdGF0aWMgZ3J1Yl9lcnJf dAordHBtMl9wcm90ZWN0b3JfbG9hZF9rZXkgKGNvbnN0IHRwbTJfcHJvdGVjdG9yX2NvbnRleHRf dCAqY3R4LAorCQkJIGNvbnN0IHRwbTJfc2VhbGVkX2tleV90ICpzZWFsZWRfa2V5LAorCQkJIGNv bnN0IFRQTV9IQU5ETEVfdCBwYXJlbnRfaGFuZGxlLAorCQkJIFRQTV9IQU5ETEVfdCAqc2VhbGVk X2hhbmRsZSwKKwkJCSBUUE1fSEFORExFX3QgKnNya19oYW5kbGUpCit7CisgIGdydWJfZXJyX3Qg ZXJyOworICBpbnQgaTsKKyAgZ3J1Yl9zcmtfdHlwZV90IGZhbGxiYWNrX3Nya3NbXSA9IHsKKyAg ICB7CisgICAgICAudHlwZSA9IFRQTV9BTEdfRUNDLAorICAgICAgLmRldGFpbC5lY2NfY3VydmUg PSBUUE1fRUNDX05JU1RfUDI1NiwKKyAgICB9LAorICAgIHsKKyAgICAgIC50eXBlID0gVFBNX0FM R19SU0EsCisgICAgICAuZGV0YWlsLnJzYV9iaXRzID0gMjA0OCwKKyAgICB9LAorICAgIHsKKyAg ICAgIC50eXBlID0gVFBNX0FMR19FUlJPUiwKKyAgICB9CisgIH07CisKKyAgLyogVHJ5IHRoZSBn aXZlbiBwZXJzaXN0ZW50IFNSSyBpZiBleGlzdHMgKi8KKyAgaWYgKCpzcmtfaGFuZGxlICE9IDAp CisgICAgeworICAgICAgZXJyID0gdHBtMl9wcm90ZWN0b3Jfc3JrX2xvYWQgKGN0eC0+c3JrX3R5 cGUsIHNlYWxlZF9rZXksCisJCQkJICAgICBwYXJlbnRfaGFuZGxlLCBzZWFsZWRfaGFuZGxlLAor CQkJCSAgICAgc3JrX2hhbmRsZSk7CisgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX0JBRF9BUkdV TUVOVCkKKwlyZXR1cm4gZXJyOworCisgICAgICBncnViX3ByaW50X2Vycm9yICgpOworICAgICAg Z3J1Yl9wcmludGYgKCJUcnlpbmcgdGhlIHNwZWNpZmllZCBTUksgYWxnb3JpdGhtOiAlc1xuIiwg c3JrX3R5cGVfdG9fbmFtZSAoY3R4LT5zcmtfdHlwZSkpOworICAgICAgZ3J1Yl9lcnJubyA9IEdS VUJfRVJSX05PTkU7CisgICAgICAqc3JrX2hhbmRsZSA9IDA7CisgICAgfQorCisgIC8qIFRyeSB0 aGUgc3BlY2lmaWVkIGFsZ29yaXRobSBmb3IgdGhlIFNSSyB0ZW1wbGF0ZSAqLworICBpZiAoKnNy a19oYW5kbGUgPT0gMCkKKyAgICB7CisgICAgICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9zcmtfbG9h ZCAoY3R4LT5zcmtfdHlwZSwgc2VhbGVkX2tleSwKKwkJCQkgICAgIHBhcmVudF9oYW5kbGUsIHNl YWxlZF9oYW5kbGUsCisJCQkJICAgICBzcmtfaGFuZGxlKTsKKyAgICAgIGlmIChlcnIgIT0gR1JV Ql9FUlJfQkFEX0FSR1VNRU5UKQorCXJldHVybiBlcnI7CisKKyAgICAgIGdydWJfcHJpbnRfZXJy b3IgKCk7CisgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKyAgICAgICpzcmtfaGFu ZGxlID0gMDsKKyAgICB9CisKKyAgLyogVHJ5IGFsbCB0aGUgZmFsbGJhY2sgU1JLIHRlbXBsYXRl cyAqLworICBmb3IgKGkgPSAwOyBmYWxsYmFja19zcmtzW2ldLnR5cGUgIT0gVFBNX0FMR19FUlJP UjsgaSsrKQorICAgIHsKKyAgICAgIC8qIFNraXAgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0gKi8K KyAgICAgIGlmIChmYWxsYmFja19zcmtzW2ldLnR5cGUgPT0gY3R4LT5zcmtfdHlwZS50eXBlICYm CisJICAoZmFsbGJhY2tfc3Jrc1tpXS5kZXRhaWwucnNhX2JpdHMgPT0gY3R4LT5zcmtfdHlwZS5k ZXRhaWwucnNhX2JpdHMgfHwKKwkgICBmYWxsYmFja19zcmtzW2ldLmRldGFpbC5lY2NfY3VydmUg PT0gY3R4LT5zcmtfdHlwZS5kZXRhaWwuZWNjX2N1cnZlKSkKKwljb250aW51ZTsKKworICAgICAg Z3J1Yl9wcmludGYgKCJUcnlpbmcgZmFsbGJhY2sgJXMgdGVtcGxhdGVcbiIsIHNya190eXBlX3Rv X25hbWUgKGZhbGxiYWNrX3Nya3NbaV0pKTsKKworICAgICAgKnNya19oYW5kbGUgPSAwOworCisg ICAgICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9zcmtfbG9hZCAoZmFsbGJhY2tfc3Jrc1tpXSwgc2Vh bGVkX2tleSwKKwkJCQkgICAgIHBhcmVudF9oYW5kbGUsIHNlYWxlZF9oYW5kbGUsCisJCQkJICAg ICBzcmtfaGFuZGxlKTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfQkFEX0FSR1VNRU5UKQor CXJldHVybiBlcnI7CisKKyAgICAgIGdydWJfcHJpbnRfZXJyb3IgKCk7CisgICAgICBncnViX2Vy cm5vID0gR1JVQl9FUlJfTk9ORTsKKyAgfQorCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBn cnViX2Vycl90Cit0cG0yX3Byb3RlY3Rvcl9wb2xpY3lwY3IgKFRQTUlfU0hfQVVUSF9TRVNTSU9O X3Qgc2Vzc2lvbiwgc3RydWN0IGdydWJfdHBtMl9idWZmZXIgKmNtZF9idWYpCit7CisgIFRQTTJC X0RJR0VTVF90IHBjcl9kaWdlc3Q7CisgIFRQTUxfUENSX1NFTEVDVElPTl90IHBjcl9zZWw7Cisg IFRQTV9SQ190IHJjOworCisgIGdydWJfVHNzMl9NVV9UUE0yQl9ESUdFU1RfVW5tYXJzaGFsIChj bWRfYnVmLCAmcGNyX2RpZ2VzdCk7CisgIGdydWJfVHNzMl9NVV9UUE1MX1BDUl9TRUxFQ1RJT05f VW5tYXJzaGFsIChjbWRfYnVmLCAmcGNyX3NlbCk7CisgIGlmIChjbWRfYnVmLT5lcnJvciAhPSAw KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJmYWlsZWQg dG8gdW5tYXJzaGFsIGNvbW1hbmRQb2xpY3kgZm9yIFRQTTJfUG9saWN5UENSIik7CisKKyAgcmMg PSBncnViX3RwbTJfcG9saWN5cGNyIChzZXNzaW9uLCBOVUxMLCAmcGNyX2RpZ2VzdCwgJnBjcl9z ZWwsIE5VTEwpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsICJmYWlsZWQgdG8gc3VibWl0IFBDUiBwb2xpY3kg KFRQTTJfUG9saWN5UENSOiAweCV4KSIsIHJjKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK K30KKworc3RhdGljIGdydWJfZXJyX3QKK3RwbTJfcHJvdGVjdG9yX2VuZm9yY2VfcG9saWN5ICh0 cG0ya2V5X3BvbGljeV90IHBvbGljeSwgVFBNSV9TSF9BVVRIX1NFU1NJT05fdCBzZXNzaW9uKQor eworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBidWY7CisgIGdydWJfZXJyX3QgZXJyOworCisg IGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJmJ1Zik7CisgIGlmIChwb2xpY3ktPmNtZF9wb2xpY3lf bGVuID4gYnVmLmNhcCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VN RU5ULCAiQ29tbWFuZFBvbGljeSBsYXJnZXIgdGhhbiBUUE0gYnVmZmVyIik7CisKKyAgZ3J1Yl9t ZW1jcHkgKGJ1Zi5kYXRhLCBwb2xpY3ktPmNtZF9wb2xpY3ksIHBvbGljeS0+Y21kX3BvbGljeV9s ZW4pOworICBidWYuc2l6ZSA9IHBvbGljeS0+Y21kX3BvbGljeV9sZW47CisKKyAgc3dpdGNoIChw b2xpY3ktPmNtZF9jb2RlKQorICAgIHsKKyAgICBjYXNlIFRQTV9DQ19Qb2xpY3lQQ1I6CisgICAg ICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9wb2xpY3lwY3IgKHNlc3Npb24sICZidWYpOworICAgICAg YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfQVJHVU1FTlQsICJ1bmtub3duIFRQTSBDb21tYW5kOiAweCV4IiwgcG9saWN5LT5jbWRfY29k ZSk7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Cit0cG0y X3Byb3RlY3Rvcl9lbmZvcmNlX3BvbGljeV9zZXEgKHRwbTJrZXlfcG9saWN5X3QgcG9saWN5X3Nl cSwgVFBNSV9TSF9BVVRIX1NFU1NJT05fdCBzZXNzaW9uKQoreworICB0cG0ya2V5X3BvbGljeV90 IHBvbGljeTsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAgRk9SX0xJU1RfRUxFTUVOVFMgKHBvbGlj eSwgcG9saWN5X3NlcSkKKyAgICB7CisgICAgICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9lbmZvcmNl X3BvbGljeSAocG9saWN5LCBzZXNzaW9uKTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9O RSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKwor c3RhdGljIGdydWJfZXJyX3QKK3RwbTJfcHJvdGVjdG9yX3NpbXBsZV9wb2xpY3lfc2VxIChjb25z dCB0cG0yX3Byb3RlY3Rvcl9jb250ZXh0X3QgKmN0eCwKKwkJCQkgIHRwbTJrZXlfcG9saWN5X3Qg KnBvbGljeV9zZXEpCit7CisgIHRwbTJrZXlfcG9saWN5X3QgcG9saWN5ID0gTlVMTDsKKyAgc3Ry dWN0IGdydWJfdHBtMl9idWZmZXIgYnVmOworICBUUE1MX1BDUl9TRUxFQ1RJT05fdCBwY3Jfc2Vs ID0geworICAgIC5jb3VudCA9IDEsCisgICAgLnBjclNlbGVjdGlvbnMgPSB7CisgICAgICB7CisJ Lmhhc2ggPSBjdHgtPmJhbmssCisJLnNpemVPZlNlbGVjdCA9IDMsCisJLnBjclNlbGVjdCA9IHsw fQorICAgICAgfSwKKyAgICB9CisgIH07CisgIGdydWJfdWludDhfdCBpOworICBncnViX2Vycl90 IGVycjsKKworICBpZiAocG9saWN5X3NlcSA9PSBOVUxMKQorICAgIHJldHVybiBHUlVCX0VSUl9C QURfQVJHVU1FTlQ7CisKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmYnVmKTsKKworICBmb3Ig KGkgPSAwOyBpIDwgY3R4LT5wY3JfY291bnQ7IGkrKykKKyAgICBUUE1TX1BDUl9TRUxFQ1RJT05f U2VsZWN0UENSICgmcGNyX3NlbC5wY3JTZWxlY3Rpb25zWzBdLCBjdHgtPnBjcnNbaV0pOworCisg IGdydWJfdHBtMl9idWZmZXJfcGFja191MTYgKCZidWYsIDApOworICBncnViX1RzczJfTVVfVFBN TF9QQ1JfU0VMRUNUSU9OX01hcnNoYWwgKCZidWYsICZwY3Jfc2VsKTsKKworICBpZiAoYnVmLmVy cm9yICE9IDApCisgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKworICBwb2xpY3kg PSBncnViX21hbGxvYyAoc2l6ZW9mKHN0cnVjdCB0cG0ya2V5X3BvbGljeSkpOworICBpZiAocG9s aWN5ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gR1JVQl9FUlJfT1VUX09GX01FTU9SWTsK KyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICBwb2xpY3ktPmNtZF9jb2RlID0gVFBNX0NDX1Bv bGljeVBDUjsKKyAgcG9saWN5LT5jbWRfcG9saWN5ID0gZ3J1Yl9tYWxsb2MgKGJ1Zi5zaXplKTsK KyAgaWYgKHBvbGljeS0+Y21kX3BvbGljeSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IEdS VUJfRVJSX09VVF9PRl9NRU1PUlk7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgZ3J1Yl9t ZW1jcHkgKHBvbGljeS0+Y21kX3BvbGljeSwgYnVmLmRhdGEsIGJ1Zi5zaXplKTsKKyAgcG9saWN5 LT5jbWRfcG9saWN5X2xlbiA9IGJ1Zi5zaXplOworCisgIGdydWJfbGlzdF9wdXNoIChHUlVCX0FT X0xJU1RfUCAocG9saWN5X3NlcSksIEdSVUJfQVNfTElTVCAocG9saWN5KSk7CisKKyAgcmV0dXJu IEdSVUJfRVJSX05PTkU7CisKKyBlcnJvcjoKKyAgZ3J1Yl9mcmVlIChwb2xpY3kpOworCisgIHJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Cit0cG0yX3Byb3RlY3Rvcl91bnNlYWwg KHRwbTJrZXlfcG9saWN5X3QgcG9saWN5X3NlcSwgVFBNX0hBTkRMRV90IHNlYWxlZF9oYW5kbGUs CisJCSAgICAgICBncnViX3VpbnQ4X3QgKiprZXksIGdydWJfc2l6ZV90ICprZXlfc2l6ZSkKK3sK KyAgVFBNU19BVVRIX0NPTU1BTkRfdCBhdXRoQ21kID0gezB9OworICBUUE0yQl9TRU5TSVRJVkVf REFUQV90IGRhdGE7CisgIFRQTTJCX05PTkNFX3Qgbm9uY2VDYWxsZXIgPSB7MH07CisgIFRQTVRf U1lNX0RFRl90IHN5bW1ldHJpYyA9IHswfTsKKyAgVFBNSV9TSF9BVVRIX1NFU1NJT05fdCBzZXNz aW9uOworICBncnViX3VpbnQ4X3QgKmtleV9vdXQ7CisgIFRQTV9SQ190IHJjOworICBncnViX2Vy cl90IGVycjsKKworICAvKiBTdGFydCBBdXRoIFNlc3Npb24gKi8KKyAgbm9uY2VDYWxsZXIuc2l6 ZSA9IFRQTV9TSEEyNTZfRElHRVNUX1NJWkU7CisgIHN5bW1ldHJpYy5hbGdvcml0aG0gPSBUUE1f QUxHX05VTEw7CisgIHJjID0gZ3J1Yl90cG0yX3N0YXJ0YXV0aHNlc3Npb24gKFRQTV9SSF9OVUxM LCBUUE1fUkhfTlVMTCwgTlVMTCwgJm5vbmNlQ2FsbGVyLCBOVUxMLAorCQkJCSAgIFRQTV9TRV9Q T0xJQ1ksICZzeW1tZXRyaWMsIFRQTV9BTEdfU0hBMjU2LAorCQkJCSAgICZzZXNzaW9uLCBOVUxM LCBOVUxMKTsKKyAgaWYgKHJjICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAiZmFpbGVkIHRvIHN0YXJ0IGF1dGggc2Vzc2lvbiAo VFBNMl9TdGFydEF1dGhTZXNzaW9uOiAweCV4KSIsIHJjKTsKKworICAvKiBFbmZvcmNlIHRoZSBw b2xpY3kgY29tbWFuZCBzZXF1ZW5jZSAqLworICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9lbmZvcmNl X3BvbGljeV9zZXEgKHBvbGljeV9zZXEsIHNlc3Npb24pOworICBpZiAoZXJyICE9IEdSVUJfRVJS X05PTkUpCisgICAgZ290byBlcnJvcjsKKworICAvKiBVbnNlYWwgU2VhbGVkIEtleSAqLworICBh dXRoQ21kLnNlc3Npb25IYW5kbGUgPSBzZXNzaW9uOworICByYyA9IGdydWJfdHBtMl91bnNlYWwg KHNlYWxlZF9oYW5kbGUsICZhdXRoQ21kLCAmZGF0YSwgTlVMTCk7CisgIGlmIChyYyAhPSBUUE1f UkNfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf REVWSUNFLCAiZmFpbGVkIHRvIHVuc2VhbCBzZWFsZWQga2V5IChUUE0yX1Vuc2VhbDogMHgleCki LCByYyk7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAvKiBFcGlsb2d1ZSAqLworICBr ZXlfb3V0ID0gZ3J1Yl9tYWxsb2MgKGRhdGEuc2l6ZSk7CisgIGlmIChrZXlfb3V0ID09IE5VTEwp CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwg Tl8oIm5vIG1lbW9yeSBsZWZ0IHRvIGFsbG9jYXRlIHVubG9jayBrZXkgYnVmZmVyIikpOworICAg ICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgZ3J1Yl9tZW1jcHkgKGtleV9vdXQsIGRhdGEuYnVm ZmVyLCBkYXRhLnNpemUpOworCisgICprZXkgPSBrZXlfb3V0OworICAqa2V5X3NpemUgPSBkYXRh LnNpemU7CisKKyAgZXJyID0gR1JVQl9FUlJfTk9ORTsKKworIGVycm9yOgorICBncnViX3RwbTJf Zmx1c2hjb250ZXh0IChzZXNzaW9uKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgZ3J1 Yl9lcnJfdAordHBtMl9wcm90ZWN0b3Jfc3JrX3JlY292ZXIgKGNvbnN0IHRwbTJfcHJvdGVjdG9y X2NvbnRleHRfdCAqY3R4LAorCQkJICAgIGdydWJfdWludDhfdCAqKmtleSwgZ3J1Yl9zaXplX3Qg KmtleV9zaXplKQoreworICB0cG0yX3NlYWxlZF9rZXlfdCBzZWFsZWRfa2V5ID0gezB9OworICB2 b2lkICpmaWxlX2J5dGVzID0gTlVMTDsKKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplID0gMDsKKyAg Z3J1Yl91aW50OF90IHJzYXBhcmVudCA9IDA7CisgIFRQTV9IQU5ETEVfdCBwYXJlbnRfaGFuZGxl ID0gMDsKKyAgVFBNX0hBTkRMRV90IHNya19oYW5kbGUgPSAwOworICBUUE1fSEFORExFX3Qgc2Vh bGVkX2hhbmRsZSA9IDA7CisgIHRwbTJrZXlfcG9saWN5X3QgcG9saWN5X3NlcSA9IE5VTEw7Cisg IHRwbTJrZXlfYXV0aHBvbGljeV90IGF1dGhwb2wgPSBOVUxMOworICB0cG0ya2V5X2F1dGhwb2xp Y3lfdCBhdXRocG9sX3NlcSA9IE5VTEw7CisgIGdydWJfZXJyX3QgZXJyOworCisgIC8qCisgICAq IFJldHJpZXZlIHNlYWxlZCBrZXksIHBhcmVudCBoYW5kbGUsIHBvbGljeSBzZXF1ZW5jZSwgYW5k IGF1dGhwb2xpY3kKKyAgICogc2VxdWVuY2UgZnJvbSB0aGUga2V5IGZpbGUKKyAgKi8KKyAgaWYg KGN0eC0+dHBtMmtleSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IHRwbTJfcHJvdGVjdG9y X3Nya19yZWFkX2ZpbGUgKGN0eC0+dHBtMmtleSwgJmZpbGVfYnl0ZXMsCisJCQkJCSAgICAgICAm ZmlsZV9zaXplKTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKwlyZXR1cm4gZXJy OworCisgICAgICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9zcmtfdW5tYXJzaGFsX3RwbTJrZXkgKGZp bGVfYnl0ZXMsCisJCQkJCQkgIGZpbGVfc2l6ZSwKKwkJCQkJCSAgJnBvbGljeV9zZXEsCisJCQkJ CQkgICZhdXRocG9sX3NlcSwKKwkJCQkJCSAgJnJzYXBhcmVudCwKKwkJCQkJCSAgJnBhcmVudF9o YW5kbGUsCisJCQkJCQkgICZzZWFsZWRfa2V5KTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJf Tk9ORSkKKwlnb3RvIGV4aXQxOworCisgICAgICBpZiAocnNhcGFyZW50ID09IDEpCisJeworCSAg dHBtMl9wcm90ZWN0b3JfY29udGV4dF90ICpjdHhfdzsKKworCSAgLyogT3ZlcndyaXRlIHRoZSBT UksgdHlwZSBhcyBub3RlZCBpbiB0aGUga2V5ICovCisJICBjdHhfdyA9ICh0cG0yX3Byb3RlY3Rv cl9jb250ZXh0X3QgKiljdHg7CisJICBjdHhfdy0+c3JrX3R5cGUudHlwZSA9IFRQTV9BTEdfUlNB OworCSAgY3R4X3ctPnNya190eXBlLmRldGFpbC5yc2FfYml0cyA9IDIwNDg7CisJfQorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGVyciA9IHRwbTJfcHJvdGVjdG9yX3Nya19yZWFkX2ZpbGUg KGN0eC0+a2V5ZmlsZSwgJmZpbGVfYnl0ZXMsICZmaWxlX3NpemUpOworICAgICAgaWYgKGVyciAh PSBHUlVCX0VSUl9OT05FKQorCXJldHVybiBlcnI7CisKKyAgICAgIHBhcmVudF9oYW5kbGUgPSBU UE1fUkhfT1dORVI7CisgICAgICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9zcmtfdW5tYXJzaGFsX2tl eWZpbGUgKGZpbGVfYnl0ZXMsIGZpbGVfc2l6ZSwgJnNlYWxlZF9rZXkpOworICAgICAgaWYgKGVy ciAhPSBHUlVCX0VSUl9OT05FKQorCWdvdG8gZXhpdDE7CisgICAgfQorCisgIC8qIFNldCB0aGUg U1JLIGhhbmRsZSBpZiBpdCBpcyBzcGVjaWZpZWQgd2l0aCAnLS1zcmsnIG9yIGluc2lkZSB0aGUg a2V5IGZpbGUgKi8KKyAgaWYgKGN0eC0+c3JrICE9IDApCisgICAgc3JrX2hhbmRsZSA9IGN0eC0+ c3JrOworICBlbHNlIGlmIChUUE1fSFRfSVNfUEVSU0lTVEVOVCAocGFyZW50X2hhbmRsZSkpCisg ICAgc3JrX2hhbmRsZSA9IHBhcmVudF9oYW5kbGU7CisKKyAgLyogTG9hZCB0aGUgc2VhbGVkIGtl eSBpbnRvIFRQTSBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhlIFNSSyAqLworICBlcnIgPSB0cG0y X3Byb3RlY3Rvcl9sb2FkX2tleSAoY3R4LCAmc2VhbGVkX2tleSwgcGFyZW50X2hhbmRsZSwgJnNl YWxlZF9oYW5kbGUsICZzcmtfaGFuZGxlKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQor ICAgIGdvdG8gZXhpdDE7CisKKyAgLyoKKyAgICogU2V0IGVyciB0byBhbiBlcnJvciBjb2RlIHRv IHRyaWdnZXIgdGhlIHN0YW5kYWxvbmUgcG9saWN5IHNlcXVlbmNlCisgICAqIGlmIHRoZXJlIGlz IG5vIGF1dGhwb2xpY3kgc2VxdWVuY2UKKyAgICovCisgIGVyciA9IEdSVUJfRVJSX1JFQURfRVJS T1I7CisKKyAgLyogSXRlcmF0ZSB0aGUgYXV0aHBvbGljeSBzZXF1ZW5jZSB0byBmaW5kIG9uZSB0 aGF0IHVuc2VhbHMgdGhlIGtleSAqLworICBGT1JfTElTVF9FTEVNRU5UUyAoYXV0aHBvbCwgYXV0 aHBvbF9zZXEpCisgICAgeworICAgICAgZXJyID0gdHBtMl9wcm90ZWN0b3JfdW5zZWFsIChhdXRo cG9sLT5wb2xpY3lfc2VxLCBzZWFsZWRfaGFuZGxlLCBrZXksIGtleV9zaXplKTsKKyAgICAgIGlm IChlcnIgPT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qCisgICAg ICAgKiBQdXNoIHRoZSBlcnJvciBtZXNzYWdlIGludG8gdGhlIGdydWJfZXJyb3Igc3RhY2sKKyAg ICAgICAqIE5vdGU6IFRoZSBncnViX2Vycm9yIHN0YWNrIG1heSBvdmVyZmxvdyBpZiB0aGVyZSBh cmUgdG9vIG1hbnkgcG9saWN5CisgICAgICAgKiAgICAgICBzZXF1ZW5jZXMuIEFueXdheSwgd2Ug c3RpbGwgY2FuIGtlZXAgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20KKyAgICAgICAqICAgICAgIHRo ZSBmaXJzdCBmZXcgcG9saWN5IHNlcXVlbmNlcyB3aGljaCBhcmUgdXN1YWxseSBtb3N0IGxpa2Vs eSB0bworICAgICAgICogICAgICAgdW5zZWFsIHRoZSBrZXkuCisgICAgICAgKi8KKyAgICAgIGdy dWJfZXJyb3JfcHVzaCgpOworICAgIH0KKworICAvKiBHaXZlIHRoZSBzdGFuZGFsb25lIHBvbGlj eSBzZXF1ZW5jZSBhIHRyeSAqLworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgewor ICAgICAgLyoKKyAgICAgICAqIENyZWF0ZSBhIGJhc2ljIHBvbGljeSBzZXF1ZW5jZSBiYXNlZCBv biB0aGUgZ2l2ZW4gUENSIHNlbGVjdGlvbiBpZiB0aGUKKyAgICAgICAqIGtleSBmaWxlIGRvZXNu J3QgcHJvdmlkZSBvbmUKKyAgICAgICAqLworICAgICAgaWYgKHBvbGljeV9zZXEgPT0gTlVMTCkK Kwl7CisJICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl9zaW1wbGVfcG9saWN5X3NlcSAoY3R4LCAmcG9s aWN5X3NlcSk7CisJICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisJICAgIGdvdG8gZXhpdDI7 CisJfQorCisgICAgICBlcnIgPSB0cG0yX3Byb3RlY3Rvcl91bnNlYWwgKHBvbGljeV9zZXEsIHNl YWxlZF9oYW5kbGUsIGtleSwga2V5X3NpemUpOworICAgIH0KKworICAvKiBQb3AgZXJyb3IgbWVz c2FnZXMgb24gc3VjY2VzcyAqLworICBpZiAoZXJyID09IEdSVUJfRVJSX05PTkUpCisgICAgd2hp bGUgKGdydWJfZXJyb3JfcG9wICgpKTsKKworIGV4aXQyOgorICBncnViX3RwbTJfZmx1c2hjb250 ZXh0IChzZWFsZWRfaGFuZGxlKTsKKworICBpZiAoIVRQTV9IVF9JU19QRVJTSVNURU5UIChzcmtf aGFuZGxlKSkKKyAgICBncnViX3RwbTJfZmx1c2hjb250ZXh0IChzcmtfaGFuZGxlKTsKKworIGV4 aXQxOgorICBncnViX3RwbTJrZXlfZnJlZV9wb2xpY3lfc2VxIChwb2xpY3lfc2VxKTsKKyAgZ3J1 Yl90cG0ya2V5X2ZyZWVfYXV0aHBvbGljeV9zZXEgKGF1dGhwb2xfc2VxKTsKKyAgZ3J1Yl9mcmVl IChmaWxlX2J5dGVzKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK3Rw bTJfcHJvdGVjdG9yX252X3JlY292ZXIgKGNvbnN0IHRwbTJfcHJvdGVjdG9yX2NvbnRleHRfdCAq Y3R4IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKwkJCSAgIGdydWJfdWludDhfdCAqKmtleSBf X2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisJCQkgICBncnViX3NpemVfdCAqa2V5X3NpemUgX19h dHRyaWJ1dGVfXyAoKHVudXNlZCkpKQoreworICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf Tk9UX0lNUExFTUVOVEVEX1lFVCwgIk5WIEluZGV4IG1vZGUgaXMgbm90IGltcGxlbWVudGVkIHll dCIpOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAordHBtMl9wcm90ZWN0b3JfcmVjb3ZlciAoY29u c3QgdHBtMl9wcm90ZWN0b3JfY29udGV4dF90ICpjdHgsCisJCQlncnViX3VpbnQ4X3QgKiprZXks IGdydWJfc2l6ZV90ICprZXlfc2l6ZSkKK3sKKyAgc3dpdGNoIChjdHgtPm1vZGUpCisgICAgewor ICAgIGNhc2UgVFBNMl9QUk9URUNUT1JfTU9ERV9TUks6CisgICAgICByZXR1cm4gdHBtMl9wcm90 ZWN0b3Jfc3JrX3JlY292ZXIgKGN0eCwga2V5LCBrZXlfc2l6ZSk7CisgICAgY2FzZSBUUE0yX1BS T1RFQ1RPUl9NT0RFX05WOgorICAgICAgcmV0dXJuIHRwbTJfcHJvdGVjdG9yX252X3JlY292ZXIg KGN0eCwga2V5LCBrZXlfc2l6ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBHUlVCX0VS Ul9CQURfQVJHVU1FTlQ7CisgICAgfQorfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAordHBtMl9wcm90 ZWN0b3JfcmVjb3Zlcl9rZXkgKGdydWJfdWludDhfdCAqKmtleSwgZ3J1Yl9zaXplX3QgKmtleV9z aXplKQoreworICAvKiBFeHBlY3QgYSBjYWxsIHRvIHRwbTJfcHJvdGVjdG9yX2luaXQgYmVmb3Jl IGFueWJvZHkgdHJpZXMgdG8gdXNlIHVzICovCisgIGlmICh0cG0yX3Byb3RlY3Rvcl9jdHgubW9k ZSA9PSBUUE0yX1BST1RFQ1RPUl9NT0RFX1VOU0VUKQorICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9JTlZBTElEX0NPTU1BTkQsIE5fKCJjYW5ub3QgdXNlIFRQTTIga2V5IHByb3RlY3Rv ciB3aXRob3V0IGluaXRpYWxpemluZyBpdCwgY2FsbCB0cG0yX3Byb3RlY3Rvcl9pbml0IGZpcnN0 IikpOworCisgIGlmIChrZXkgPT0gTlVMTCB8fCBrZXlfc2l6ZSA9PSBOVUxMKQorICAgIHJldHVy biBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisKKyAgcmV0dXJuIHRwbTJfcHJvdGVjdG9yX3JlY292 ZXIgKCZ0cG0yX3Byb3RlY3Rvcl9jdHgsIGtleSwga2V5X3NpemUpOworfQorCitzdGF0aWMgZ3J1 Yl9lcnJfdAordHBtMl9wcm90ZWN0b3JfY2hlY2tfYXJncyAodHBtMl9wcm90ZWN0b3JfY29udGV4 dF90ICpjdHgpCit7CisgIGlmIChjdHgtPm1vZGUgPT0gVFBNMl9QUk9URUNUT1JfTU9ERV9VTlNF VCkKKyAgICBjdHgtPm1vZGUgPSBUUE0yX1BST1RFQ1RPUl9NT0RFX1NSSzsKKworICAvKiBDaGVj a3MgZm9yIFNSSyBtb2RlICovCisgIGlmIChjdHgtPm1vZGUgPT0gVFBNMl9QUk9URUNUT1JfTU9E RV9TUksgJiYKKyAgICAgIChjdHgtPmtleWZpbGUgPT0gTlVMTCAmJiBjdHgtPnRwbTJrZXkgPT0g TlVMTCkpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8o ImluIFNSSyBtb2RlLCBhIGtleSBmaWxlIG11c3QgYmUgc3BlY2lmaWVkOiAtLXRwbTJrZXkvLVQg b3IgLS1rZXlmaWxlLy1rIikpOworCisgIGlmIChjdHgtPm1vZGUgPT0gVFBNMl9QUk9URUNUT1Jf TU9ERV9TUksgJiYKKyAgICAgIChjdHgtPmtleWZpbGUgIT0gTlVMTCAmJiBjdHgtPnRwbTJrZXkg IT0gTlVMTCkpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwg Tl8oImluIFNSSyBtb2RlLCBwbGVhc2Ugc3BlY2lmeSBhIGtleSBmaWxlIHdpdGggb25seSAtLXRw bTJrZXkvLVQgb3IgLS1rZXlmaWxlLy1rIikpOworCisgIGlmIChjdHgtPm1vZGUgPT0gVFBNMl9Q Uk9URUNUT1JfTU9ERV9TUksgJiYgY3R4LT5udiAhPSAwKQorICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJpbiBTUksgbW9kZSwgYW4gTlYgSW5kZXggY2Fu bm90IGJlIHNwZWNpZmllZCIpKTsKKworICAvKiBDaGVja3MgZm9yIE5WIG1vZGUgKi8KKyAgaWYg KGN0eC0+bW9kZSA9PSBUUE0yX1BST1RFQ1RPUl9NT0RFX05WICYmIGN0eC0+bnYgPT0gMCkKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBOXygiaW4gTlYgSW5k ZXggbW9kZSwgYW4gTlYgSW5kZXggbXVzdCBiZSBzcGVjaWZpZWQ6IC0tbnZpbmRleCBvciAtbiIp KTsKKworICBpZiAoY3R4LT5tb2RlID09IFRQTTJfUFJPVEVDVE9SX01PREVfTlYgJiYKKyAgICAg IChjdHgtPnRwbTJrZXkgIT0gTlVMTCB8fCBjdHgtPmtleWZpbGUgIT0gTlVMTCkpCisgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oImluIE5WIEluZGV4IG1v ZGUsIGEga2V5ZmlsZSBjYW5ub3QgYmUgc3BlY2lmaWVkIikpOworCisgIGlmIChjdHgtPm1vZGUg PT0gVFBNMl9QUk9URUNUT1JfTU9ERV9OViAmJiBjdHgtPnNyayAhPSAwKQorICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJpbiBOViBJbmRleCBtb2RlLCBh biBTUksgY2Fubm90IGJlIHNwZWNpZmllZCIpKTsKKworICBpZiAoY3R4LT5tb2RlID09IFRQTTJf UFJPVEVDVE9SX01PREVfTlYgJiYKKyAgICAgIGN0eC0+c3JrX3R5cGUudHlwZSAhPSBUUE1fQUxH X0VSUk9SKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5f KCJpbiBOViBJbmRleCBtb2RlLCBhbiBhc3ltbWV0cmljIGtleSB0eXBlIGNhbm5vdCBiZSBzcGVj aWZpZWQiKSk7CisKKyAgLyogRGVmYXVsdHMgYXNzaWdubWVudCAqLworICBpZiAoY3R4LT5iYW5r ID09IFRQTV9BTEdfRVJST1IpCisgICAgY3R4LT5iYW5rID0gVFBNX0FMR19TSEEyNTY7CisKKyAg aWYgKGN0eC0+cGNyX2NvdW50ID09IDApCisgICAgeworICAgICAgY3R4LT5wY3JzWzBdID0gNzsK KyAgICAgIGN0eC0+cGNyX2NvdW50ID0gMTsKKyAgICB9CisKKyAgaWYgKGN0eC0+bW9kZSA9PSBU UE0yX1BST1RFQ1RPUl9NT0RFX1NSSyAmJgorICAgICAgY3R4LT5zcmtfdHlwZS50eXBlID09IFRQ TV9BTEdfRVJST1IpCisgICAgeworICAgICAgY3R4LT5zcmtfdHlwZS50eXBlID0gVFBNX0FMR19F Q0M7CisgICAgICBjdHgtPnNya190eXBlLmRldGFpbC5lY2NfY3VydmUgPSBUUE1fRUNDX05JU1Rf UDI1NjsKKyAgICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnVi X2Vycl90Cit0cG0yX3Byb3RlY3Rvcl9wYXJzZV9maWxlIChjb25zdCBjaGFyICp2YWx1ZSwgY29u c3QgY2hhciAqKmZpbGUpCit7CisgIGlmIChncnViX3N0cmxlbiAodmFsdWUpID09IDApCisgICAg cmV0dXJuIEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKKworICAqZmlsZSA9IGdydWJfc3RyZHVwICh2 YWx1ZSk7CisgIGlmICgqZmlsZSA9PSBOVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9PVVRfT0ZfTUVNT1JZLCBOXygibm8gbWVtb3J5IHRvIGR1cGxpY2F0ZSBmaWxlIHBhdGgi KSk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Cit0 cG0yX3Byb3RlY3Rvcl9wYXJzZV9tb2RlIChjb25zdCBjaGFyICp2YWx1ZSwgdHBtMl9wcm90ZWN0 b3JfbW9kZV90ICptb2RlKQoreworICBpZiAoZ3J1Yl9zdHJjbXAgKHZhbHVlLCAic3JrIikgPT0g MCkKKyAgICAqbW9kZSA9IFRQTTJfUFJPVEVDVE9SX01PREVfU1JLOworICBlbHNlIGlmIChncnVi X3N0cmNtcCAodmFsdWUsICJudiIpID09IDApCisgICAgKm1vZGUgPSBUUE0yX1BST1RFQ1RPUl9N T0RFX05WOworICBlbHNlCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9S QU5HRSwgTl8oInZhbHVlICclcycgaXMgbm90IGEgdmFsaWQgVFBNMiBrZXkgcHJvdGVjdG9yIG1v ZGUiKSwgdmFsdWUpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMgZ3J1 Yl9lcnJfdAordHBtMl9wcm90ZWN0b3JfaW5pdF9jbWRfaGFuZGxlciAoZ3J1Yl9leHRjbWRfY29u dGV4dF90IGN0eHQsIGludCBhcmdjLAorCQkJCSBjaGFyICoqYXJncyBfX2F0dHJpYnV0ZV9fICgo dW51c2VkKSkpCit7CisgIHN0cnVjdCBncnViX2FyZ19saXN0ICpzdGF0ZSA9IGN0eHQtPnN0YXRl OworICBncnViX2Vycl90IGVycjsKKworICBpZiAoYXJnYykKKyAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBOXygidGhlIFRQTTIga2V5IHByb3RlY3RvciBkb2Vz IG5vdCBhY2NlcHQgYW55IG5vbi1vcHRpb24gYXJndW1lbnRzIChpLmUuLCBsaWtlIC1vIGFuZC9v ciAtLW9wdGlvbiBvbmx5KSIpKTsKKworICBncnViX2ZyZWUgKCh2b2lkICopIHRwbTJfcHJvdGVj dG9yX2N0eC5rZXlmaWxlKTsKKyAgZ3J1Yl9tZW1zZXQgKCZ0cG0yX3Byb3RlY3Rvcl9jdHgsIDAs IHNpemVvZiAodHBtMl9wcm90ZWN0b3JfY3R4KSk7CisKKyAgaWYgKHN0YXRlW09QVElPTl9NT0RF XS5zZXQpICAvKiBtb2RlICovCisgICAgeworICAgICAgZXJyID0gdHBtMl9wcm90ZWN0b3JfcGFy c2VfbW9kZSAoc3RhdGVbT1BUSU9OX01PREVdLmFyZywgJnRwbTJfcHJvdGVjdG9yX2N0eC5tb2Rl KTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKwlyZXR1cm4gZXJyOworICAgIH0K KworICBpZiAoc3RhdGVbT1BUSU9OX1BDUlNdLnNldCkgIC8qIHBjcnMgKi8KKyAgICB7CisgICAg ICBlcnIgPSBncnViX3RwbTJfcHJvdGVjdG9yX3BhcnNlX3BjcnMgKHN0YXRlW09QVElPTl9QQ1JT XS5hcmcsCisJCQkJCSAgICB0cG0yX3Byb3RlY3Rvcl9jdHgucGNycywKKwkJCQkJICAgICZ0cG0y X3Byb3RlY3Rvcl9jdHgucGNyX2NvdW50KTsKKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9O RSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAoc3RhdGVbT1BUSU9OX0JBTktdLnNldCkg IC8qIGJhbmsgKi8KKyAgICB7CisgICAgICBlcnIgPSBncnViX3RwbTJfcHJvdGVjdG9yX3BhcnNl X2JhbmsgKHN0YXRlW09QVElPTl9CQU5LXS5hcmcsCisJCQkJCSAgICAmdHBtMl9wcm90ZWN0b3Jf Y3R4LmJhbmspOworICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorCXJldHVybiBlcnI7 CisgICAgfQorCisgIGlmIChzdGF0ZVtPUFRJT05fVFBNMktFWV0uc2V0KSAgLyogdHBtMmtleSAq LworICAgIHsKKyAgICAgIGVyciA9IHRwbTJfcHJvdGVjdG9yX3BhcnNlX2ZpbGUgKHN0YXRlW09Q VElPTl9UUE0yS0VZXS5hcmcsCisJCQkJICAgICAgICZ0cG0yX3Byb3RlY3Rvcl9jdHgudHBtMmtl eSk7CisgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisJcmV0dXJuIGVycjsKKyAgICB9 CisKKyAgaWYgKHN0YXRlW09QVElPTl9LRVlGSUxFXS5zZXQpICAvKiBrZXlmaWxlICovCisgICAg eworICAgICAgZXJyID0gdHBtMl9wcm90ZWN0b3JfcGFyc2VfZmlsZSAoc3RhdGVbT1BUSU9OX0tF WUZJTEVdLmFyZywKKwkJCQkgICAgICAgJnRwbTJfcHJvdGVjdG9yX2N0eC5rZXlmaWxlKTsKKyAg ICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBp ZiAoc3RhdGVbT1BUSU9OX1NSS10uc2V0KSAgLyogc3JrICovCisgICAgeworICAgICAgZXJyID0g Z3J1Yl90cG0yX3Byb3RlY3Rvcl9wYXJzZV90cG1faGFuZGxlIChzdGF0ZVtPUFRJT05fU1JLXS5h cmcsCisJCQkJCQkgICZ0cG0yX3Byb3RlY3Rvcl9jdHguc3JrKTsKKyAgICAgIGlmIChlcnIgIT0g R1JVQl9FUlJfTk9ORSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAoc3RhdGVbT1BUSU9O X0FTWU1NRVRSSUNdLnNldCkgIC8qIGFzeW1tZXRyaWMgKi8KKyAgICB7CisgICAgICBlcnIgPSBn cnViX3RwbTJfcHJvdGVjdG9yX3BhcnNlX2FzeW1tZXRyaWMgKHN0YXRlW09QVElPTl9BU1lNTUVU UklDXS5hcmcsCisJCQkJCQkgICZ0cG0yX3Byb3RlY3Rvcl9jdHguc3JrX3R5cGUpOworICAgICAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIGlmIChz dGF0ZVtPUFRJT05fTlZJTkRFWF0uc2V0KSAgLyogbnZpbmRleCAqLworICAgIHsKKyAgICAgIGVy ciA9IGdydWJfdHBtMl9wcm90ZWN0b3JfcGFyc2VfdHBtX2hhbmRsZSAoc3RhdGVbT1BUSU9OX05W SU5ERVhdLmFyZywKKwkJCQkJCSAgJnRwbTJfcHJvdGVjdG9yX2N0eC5udik7CisgICAgICBpZiAo ZXJyICE9IEdSVUJfRVJSX05PTkUpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgZXJyID0gdHBt Ml9wcm90ZWN0b3JfY2hlY2tfYXJncyAoJnRwbTJfcHJvdGVjdG9yX2N0eCk7CisKKyAgLyogVGhp cyBjb21tYW5kIG9ubHkgaW5pdGlhbGl6ZXMgdGhlIHByb3RlY3Rvciwgc28gbm90aGluZyBlbHNl IHRvIGRvLiAqLworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Cit0cG0y X3Byb3RlY3Rvcl9jbGVhcl9jbWRfaGFuZGxlciAoZ3J1Yl9leHRjbWRfY29udGV4dF90IGN0eHQg X19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkJCSAgaW50IGFyZ2MsIGNoYXIgKiphcmdzIF9f YXR0cmlidXRlX18gKCh1bnVzZWQpKSkKK3sKKyAgaWYgKGFyZ2MgIT0gMCkKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBOXygidHBtMl9rZXlfcHJvdGVjdG9y X2NsZWFyIGFjY2VwdHMgbm8gYXJndW1lbnRzIikpOworCisgIGdydWJfZnJlZSAoKHZvaWQgKikg dHBtMl9wcm90ZWN0b3JfY3R4LmtleWZpbGUpOworICBncnViX21lbXNldCAoJnRwbTJfcHJvdGVj dG9yX2N0eCwgMCwgc2l6ZW9mICh0cG0yX3Byb3RlY3Rvcl9jdHgpKTsKKworICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsKK30KKworc3RhdGljIHN0cnVjdCBncnViX2tleV9wcm90ZWN0b3IgdHBtMl9r ZXlfcHJvdGVjdG9yID0KKyAgeworICAgIC5uYW1lID0gInRwbTIiLAorICAgIC5yZWNvdmVyX2tl eSA9IHRwbTJfcHJvdGVjdG9yX3JlY292ZXJfa2V5CisgIH07CisKK0dSVUJfTU9EX0lOSVQgKHRw bTJfa2V5X3Byb3RlY3RvcikKK3sKKyAgdHBtMl9wcm90ZWN0b3JfaW5pdF9jbWQgPQorICAgIGdy dWJfcmVnaXN0ZXJfZXh0Y21kICgidHBtMl9rZXlfcHJvdGVjdG9yX2luaXQiLAorCQkJICB0cG0y X3Byb3RlY3Rvcl9pbml0X2NtZF9oYW5kbGVyLCAwLAorCQkJICBOXygiWy1tIG1vZGVdICIKKwkJ CSAgICAgIlstcCBwY3JfbGlzdF0gIgorCQkJICAgICAiWy1iIHBjcl9iYW5rXSAiCisJCQkgICAg ICJbLVQgdHBtMl9rZXlfZmlsZV9wYXRoXSAiCisJCQkgICAgICJbLWsgc2VhbGVkX2tleV9maWxl X3BhdGhdICIKKwkJCSAgICAgIlstcyBzcmtfaGFuZGxlXSAiCisJCQkgICAgICJbLWEgYXN5bW1l dHJpY19rZXlfdHlwZV0gIgorCQkJICAgICAiWy1uIG52X2luZGV4XSIpLAorCQkJICBOXygiSW5p dGlhbGl6ZSB0aGUgVFBNMiBrZXkgcHJvdGVjdG9yLiIpLAorCQkJICB0cG0yX3Byb3RlY3Rvcl9p bml0X2NtZF9vcHRpb25zKTsKKyAgdHBtMl9wcm90ZWN0b3JfY2xlYXJfY21kID0KKyAgICBncnVi X3JlZ2lzdGVyX2V4dGNtZCAoInRwbTJfa2V5X3Byb3RlY3Rvcl9jbGVhciIsCisJCQkgIHRwbTJf cHJvdGVjdG9yX2NsZWFyX2NtZF9oYW5kbGVyLCAwLCBOVUxMLAorCQkJICBOXygiQ2xlYXIgdGhl IFRQTTIga2V5IHByb3RlY3RvciBpZiBwcmV2aW91c2x5IGluaXRpYWxpemVkLiIpLAorCQkJICBO VUxMKTsKKyAgZ3J1Yl9rZXlfcHJvdGVjdG9yX3JlZ2lzdGVyICgmdHBtMl9rZXlfcHJvdGVjdG9y KTsKK30KKworR1JVQl9NT0RfRklOSSAodHBtMl9rZXlfcHJvdGVjdG9yKQoreworICBncnViX2Zy ZWUgKCh2b2lkICopIHRwbTJfcHJvdGVjdG9yX2N0eC5rZXlmaWxlKTsKKworICBncnViX2tleV9w cm90ZWN0b3JfdW5yZWdpc3RlciAoJnRwbTJfa2V5X3Byb3RlY3Rvcik7CisgIGdydWJfdW5yZWdp c3Rlcl9leHRjbWQgKHRwbTJfcHJvdGVjdG9yX2NsZWFyX2NtZCk7CisgIGdydWJfdW5yZWdpc3Rl cl9leHRjbWQgKHRwbTJfcHJvdGVjdG9yX2luaXRfY21kKTsKK30KZGlmZiAtLWdpdCBhL2dydWIt Y29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvdHBtMi5oIGIvZ3J1Yi1jb3JlL2NvbW1h bmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwLi4xYzFkODcxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9ncnViLWNvcmUvY29tbWFu ZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3RwbTIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIEdS VUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg TWljcm9zb2Z0IENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg R1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYg R1JVQl9UUE0yX1RQTTJfSEVBREVSCisjZGVmaW5lIEdSVUJfVFBNMl9UUE0yX0hFQURFUiAxCisK KyNpbmNsdWRlIDx0c3MyX3R5cGVzLmg+CisjaW5jbHVkZSA8dHNzMl9zdHJ1Y3RzLmg+CisjaW5j bHVkZSA8dHBtMl9jbWQuaD4KKworLyogV2VsbC1Lbm93biBXaW5kb3dzIFNSSyBoYW5kbGUgKi8K KyNkZWZpbmUgVFBNMl9TUktfSEFORExFIDB4ODEwMDAwMDEKKworc3RydWN0IHRwbTJfc2VhbGVk X2tleSB7CisgIFRQTTJCX1BVQkxJQ190ICBwdWJsaWM7CisgIFRQTTJCX1BSSVZBVEVfdCBwcml2 YXRlOworfTsKK3R5cGVkZWYgc3RydWN0IHRwbTJfc2VhbGVkX2tleSB0cG0yX3NlYWxlZF9rZXlf dDsKKworI2VuZGlmIC8qICEgR1JVQl9UUE0yX1RQTTJfSEVBREVSICovCmRpZmYgLS1naXQgYS9n cnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3RwbTJfYXJncy5oIGIvZ3J1Yi1j b3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0yX2FyZ3MuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmJkYmY5ZjM3MwotLS0gL2Rldi9udWxsCisrKyBiL2dy dWItY29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvdHBtMl9hcmdzLmgKQEAgLTAsMCAr MSw0OSBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAg Q29weXJpZ2h0IChDKSAyMDIyIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAo QykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs b25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyAqLworCisjaWZuZGVmIEdSVUJfVFBNMl9JTlRFUk5BTF9BUkdTX0hFQURFUgorI2RlZmlu ZSBHUlVCX1RQTTJfSU5URVJOQUxfQVJHU19IRUFERVIgMQorCisjaW5jbHVkZSA8Z3J1Yi9lcnIu aD4KKworI2luY2x1ZGUgInRwbTIuaCIKKworc3RydWN0IGdydWJfc3JrX3R5cGUKK3sKKyAgVFBN SV9BTEdfUFVCTElDX3QgdHlwZTsKKyAgdW5pb24geworICAgIFRQTV9LRVlfQklUU190IHJzYV9i aXRzOworICAgIFRQTV9FQ0NfQ1VSVkVfdCBlY2NfY3VydmU7CisgIH0gZGV0YWlsOworfTsKK3R5 cGVkZWYgc3RydWN0IGdydWJfc3JrX3R5cGUgZ3J1Yl9zcmtfdHlwZV90OworCitleHRlcm4gZ3J1 Yl9lcnJfdAorZ3J1Yl90cG0yX3Byb3RlY3Rvcl9wYXJzZV9wY3JzIChjaGFyICp2YWx1ZSwgZ3J1 Yl91aW50OF90ICpwY3JzLCBncnViX3VpbnQ4X3QgKnBjcl9jb3VudCk7CisKK2V4dGVybiBncnVi X2Vycl90CitncnViX3RwbTJfcHJvdGVjdG9yX3BhcnNlX2FzeW1tZXRyaWMgKGNvbnN0IGNoYXIg KnZhbHVlLCBncnViX3Nya190eXBlX3QgKnNya190eXBlKTsKKworZXh0ZXJuIGdydWJfZXJyX3QK K2dydWJfdHBtMl9wcm90ZWN0b3JfcGFyc2VfYmFuayAoY29uc3QgY2hhciAqdmFsdWUsIFRQTV9B TEdfSURfdCAqYmFuayk7CisKK2V4dGVybiBncnViX2Vycl90CitncnViX3RwbTJfcHJvdGVjdG9y X3BhcnNlX3RwbV9oYW5kbGUgKGNvbnN0IGNoYXIgKnZhbHVlLCBUUE1fSEFORExFX3QgKmhhbmRs ZSk7CisKKyNlbmRpZiAvKiAhIEdSVUJfVFBNMl9JTlRFUk5BTF9BUkdTX0hFQURFUiAqLwpkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3RlY3Rvci90cG0ya2V5LmFz biBiL2dydWItY29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvdHBtMmtleS5hc24KbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5lMWZiNTE1NDUKLS0tIC9kZXYvbnVs bAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3RwbTJrZXkuYXNu CkBAIC0wLDAgKzEsNDkgQEAKKy0tCistLSBHUlVCOiBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIK Ky0tIENvcHlyaWdodCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0t CistLSBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKy0tIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLS0gKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0tCistLSBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLS0gTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLS0gR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0tCistLSBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor LS0gYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorLS0KKy0tIFRoaXMgZmlsZSBkZXNjcmliZXMgVFBNIDIuMCBLZXkgRmlsZSBmb3Jt YXQgZm9yIGxpYnRhc24xLgorLS0gIFRvIGdlbmVyYXRlIHRwbTJrZXlfYXNuMV90YWIuYzogYXNu MVBhcnNlciB0cG0ya2V5LmFzbgorLS0KK1RQTTJLRVkge30KK0RFRklOSVRJT05TIElNUExJQ0lU IFRBR1MgOjo9CisKK0JFR0lOCisKK1RQTVBvbGljeSA6Oj0gU0VRVUVOQ0UgeworICAgIENvbW1h bmRDb2RlICAgWzBdIEVYUExJQ0lUIElOVEVHRVIsCisgICAgQ29tbWFuZFBvbGljeSBbMV0gRVhQ TElDSVQgT0NURVQgU1RSSU5HCit9CisKK1RQTUF1dGhQb2xpY3kgOjo9IFNFUVVFTkNFIHsKKyAg ICBOYW1lICAgIFswXSBFWFBMSUNJVCBVVEY4U3RyaW5nIE9QVElPTkFMLAorICAgIFBvbGljeSAg WzFdIEVYUExJQ0lUIFNFUVVFTkNFIE9GIFRQTVBvbGljeQorfQorCitUUE1LZXkgOjo9IFNFUVVF TkNFIHsKKyAgICB0eXBlICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICBlbXB0eUF1dGgg ICBbMF0gRVhQTElDSVQgQk9PTEVBTiBPUFRJT05BTCwKKyAgICBwb2xpY3kgICAgICBbMV0gRVhQ TElDSVQgU0VRVUVOQ0UgT0YgVFBNUG9saWN5IE9QVElPTkFMLAorICAgIHNlY3JldCAgICAgIFsy XSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcgT1BUSU9OQUwsCisgICAgYXV0aFBvbGljeSAgWzNdIEVY UExJQ0lUIFNFUVVFTkNFIE9GIFRQTUF1dGhQb2xpY3kgT1BUSU9OQUwsCisgICAgZGVzY3JpcHRp b24gWzRdIEVYUExJQ0lUIFVURjhTdHJpbmcgT1BUSU9OQUwsCisgICAgcnNhUGFyZW50ICAgWzVd IEVYUExJQ0lUIEJPT0xFQU4gT1BUSU9OQUwsCisgICAgcGFyZW50ICAgICAgSU5URUdFUiwKKyAg ICBwdWJrZXkgICAgICBPQ1RFVCBTVFJJTkcsCisgICAgcHJpdmtleSAgICAgT0NURVQgU1RSSU5H Cit9CisKK0VORApkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3Byb3Rl Y3Rvci90cG0ya2V5LmMgYi9ncnViLWNvcmUvY29tbWFuZHMvdHBtMl9rZXlfcHJvdGVjdG9yL3Rw bTJrZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjNiNjAwMWQ4NAot LS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3Iv dHBtMmtleS5jCkBAIC0wLDAgKzEsNDk5IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlm aWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjMgU1VTRSBMTEMKKyAqICBDb3B5 cmlnaHQgKEMpIDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdS VUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGdydWIvbGlzdC5oPgorI2luY2x1ZGUgPGdydWIv bWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbW0uaD4KKworI2luY2x1ZGUgPHRzczJfYnVmZmVyLmg+ CisKKyNpbmNsdWRlICJ0cG0ya2V5LmgiCisKK2V4dGVybiBhc24xX3N0YXRpY19ub2RlIHRwbTJr ZXlfYXNuMV90YWJbXTsKK2NvbnN0IGNoYXIgKnNlYWxlZF9rZXlfb2lkID0gIjIuMjMuMTMzLjEw LjEuNSI7CisKK3N0YXRpYyBpbnQKK2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGFzbjFfbm9kZSBu b2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICoqY29udGVudCwgZ3J1Yl9zaXplX3QgKmNvbnRl bnRfc2l6ZSkKK3sKKyAgZ3J1Yl91aW50OF90ICp0bXBzdHIgPSBOVUxMOworICBpbnQgdG1wc3Ry X3NpemUgPSAwOworICBpbnQgcmV0OworCisgIGlmIChjb250ZW50ID09IE5VTEwpCisgICAgcmV0 dXJuIEFTTjFfTUVNX0VSUk9SOworCisgIHJldCA9IGFzbjFfcmVhZF92YWx1ZSAobm9kZSwgbmFt ZSwgTlVMTCwgJnRtcHN0cl9zaXplKTsKKyAgaWYgKHJldCAhPSBBU04xX01FTV9FUlJPUikKKyAg ICByZXR1cm4gcmV0OworCisgIHRtcHN0ciA9IGdydWJfbWFsbG9jICh0bXBzdHJfc2l6ZSk7Cisg IGlmICh0bXBzdHIgPT0gTlVMTCkKKyAgICByZXR1cm4gQVNOMV9NRU1fRVJST1I7CisKKyAgcmV0 ID0gYXNuMV9yZWFkX3ZhbHVlIChub2RlLCBuYW1lLCB0bXBzdHIsICZ0bXBzdHJfc2l6ZSk7Cisg IGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiByZXQ7CisKKyAgKmNvbnRlbnQg PSB0bXBzdHI7CisgICpjb250ZW50X3NpemUgPSB0bXBzdHJfc2l6ZTsKKworICByZXR1cm4gQVNO MV9TVUNDRVNTOworfQorCitzdGF0aWMgaW50Cithc24xX3JlYWRfdWludDMyIChhc24xX25vZGUg bm9kZSwgY29uc3QgY2hhciAqbmFtZSwgZ3J1Yl91aW50MzJfdCAqb3V0KQoreworICBncnViX3Vp bnQzMl90IHRtcCA9IDA7CisgIGdydWJfdWludDhfdCAqcHRyOworICB2b2lkICpkYXRhID0gTlVM TDsKKyAgZ3J1Yl9zaXplX3QgZGF0YV9zaXplOworICBpbnQgcmV0OworCisgIHJldCA9IGFzbjFf YWxsb2NhdGVfYW5kX3JlYWQgKG5vZGUsIG5hbWUsICZkYXRhLCAmZGF0YV9zaXplKTsKKyAgaWYg KHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIHJldDsKKworICAvKgorICAgKiBBU04u MSBJTlRFR0VSIGlzIGVuY29kZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgICAqCisgICAq IFRBRyBMRU5HVEggT0NURUNUUworICAgKgorICAgKiBUaGUgaW50ZWdlciBUQUcgaXMgMDIgYW5k IExFTkdUSCBpcyB0aGUgbnVtYmVyIG9mIGZvbGxvd2VkIE9DVEVDVFMgaW4KKyAgICogYmlnIGVu ZGlhbi4gRm9yIGV4YW1wbGU6CisgICAqCisgICAqICAgIDB4MTogMDIgMDEgMDEKKyAgICogMHhh YmNkOiAwMiAwMiBhYiBjZAorICAgKgorICAgKiBUbyBkZWNyaWJlIDB4MSwgaXQgb25seSB0YWtl cyAxIG9jdGVjdCwgc28gTEVOR1RIIGlzIDB4MDEgYW5kIHRoZQorICAgKiBvY3RlY3QgaXMgMHgw MS4gT24gdGhlIG90aGVyIGhhbmQsIDB4YWJjZCByZXF1aXJlcyAyIG9jdGVjdHM6ICdhYiIgYW5k CisgICAqICdjZCcsIHNvIExFTkdUSCBpcyAweDAyLgorICAgKgorICAgKiBUaGlzIGZ1bmN0aW9u IG9ubHkgZXhwZWN0cyBhIHVpbnQzMiBpbnRlZ2VyLCBzbyBpdCByZWplY3RzIGFueSBpbnRlZ2Vy CisgICAqIGNvbnRhaW5pbmcgbW9yZSB0aGFuIDQgb2N0ZWN0cy4KKyAgICovCisgIGlmIChkYXRh X3NpemUgPiA0KQorICAgIHsKKyAgICAgIHJldCA9IEFTTjFfTUVNX0VSUk9SOworICAgICAgZ290 byBlcnJvcjsKKyAgICB9CisKKyAgLyogQ29weSB0aGUgb2N0ZWN0cyBpbnRvICd0bXAnIHRvIG1h a2UgaXQgYSBiaWctZW5kaWFuIHVpbnQzMiAqLworICBwdHIgPSAoZ3J1Yl91aW50OF90ICopICZ0 bXAgKyAoNCAtIGRhdGFfc2l6ZSk7CisgIGdydWJfbWVtY3B5IChwdHIsIGRhdGEsIGRhdGFfc2l6 ZSk7CisKKyAgLyogQ29udmVydCB0aGUgYmlnLWVuZGlhbiBpbnRlZ2VyIHRvIGhvc3QgdWludDMy ICovCisgIHRtcCA9IGdydWJfYmVfdG9fY3B1MzIgKHRtcCk7CisKKyAgKm91dCA9IHRtcDsKKyBl cnJvcjoKKyAgaWYgKGRhdGEpCisgICAgZ3J1Yl9mcmVlIChkYXRhKTsKKyAgcmV0dXJuIHJldDsK K30KKworZ3J1Yl9lcnJfdAorZ3J1Yl90cG0ya2V5X3N0YXJ0X3BhcnNpbmcgKGFzbjFfbm9kZSAq cGFyc2VkX3RwbTJrZXksIHZvaWQgKmRhdGEsIGdydWJfc2l6ZV90IHNpemUpCit7CisgIGFzbjFf bm9kZSB0cG0ya2V5OworICBhc24xX25vZGUgdHBtMmtleV9hc24xID0gTlVMTDsKKyAgdm9pZCAq dHlwZV9vaWQgPSBOVUxMOworICBncnViX3NpemVfdCB0eXBlX29pZF9zaXplID0gMDsKKyAgdm9p ZCAqZW1wdHlfYXV0aCA9IE5VTEw7CisgIGdydWJfc2l6ZV90IGVtcHR5X2F1dGhfc2l6ZSA9IDA7 CisgIGludCB0bXBfc2l6ZSA9IDA7CisgIGludCByZXQ7CisgIGdydWJfZXJyX3QgZXJyOworCisg IC8qCisgICAqIFRQTUtleSA6Oj0gU0VRVUVOQ0UgeworICAgKiAgICB0eXBlICAgICAgICBPQkpF Q1QgSURFTlRJRklFUiwKKyAgICogICAgZW1wdHlBdXRoICAgWzBdIEVYUExJQ0lUIEJPT0xFQU4g T1BUSU9OQUwsCisgICAqICAgIHBvbGljeSAgICAgIFsxXSBFWFBMSUNJVCBTRVFVRU5DRSBPRiBU UE1Qb2xpY3kgT1BUSU9OQUwsCisgICAqICAgIHNlY3JldCAgICAgIFsyXSBFWFBMSUNJVCBPQ1RF VCBTVFJJTkcgT1BUSU9OQUwsCisgICAqICAgIGF1dGhQb2xpY3kgIFszXSBFWFBMSUNJVCBTRVFV RU5DRSBPRiBUUE1BdXRoUG9saWN5IE9QVElPTkFMLAorICAgKiAgICBkZXNjcmlwdGlvbiBbNF0g RVhQTElDSVQgVVRGOFN0cmluZyBPUFRJT05BTCwKKyAgICogICAgcnNhUGFyZW50ICAgWzVdIEVY UExJQ0lUIEJPT0xFQU4gT1BUSU9OQUwsCisgICAqICAgIHBhcmVudCAgICAgIElOVEVHRVIsCisg ICAqICAgIHB1YmtleSAgICAgIE9DVEVUIFNUUklORywKKyAgICogICAgcHJpdmtleSAgICAgT0NU RVQgU1RSSU5HCisgICAqIH0KKyAgICovCisgIHJldCA9IGFzbjFfYXJyYXkydHJlZSAodHBtMmtl eV9hc24xX3RhYiwgJnRwbTJrZXlfYXNuMSwgTlVMTCk7CisgIGlmIChyZXQgIT0gQVNOMV9TVUND RVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJmYWls ZWQgdG8gcGFyc2UgVFBNMktFWSBBU04uMSBhcnJheSIpOworCisgIHJldCA9IGFzbjFfY3JlYXRl X2VsZW1lbnQgKHRwbTJrZXlfYXNuMSwgIlRQTTJLRVkuVFBNS2V5IiwgJnRwbTJrZXkpOworICBp ZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0FSR1VNRU5ULCAiZmFpbGVkIHRvIGNyZWF0ZSBUUE0yS0VZLlRQTUtleSIpOworCisgIHJl dCA9IGFzbjFfZGVyX2RlY29kaW5nICgmdHBtMmtleSwgZGF0YSwgc2l6ZSwgTlVMTCk7CisgIGlm IChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfQVJHVU1FTlQsICJmYWlsZWQgdG8gZGVjb2RlIFRQTTJLRVkgREVSIik7CisKKyAgLyogQ2hl Y2sgaWYgJ3R5cGUnIGlzIFNlYWxlZCBLZXkgb3Igbm90ICovCisgIHJldCA9IGFzbjFfYWxsb2Nh dGVfYW5kX3JlYWQgKHRwbTJrZXksICJ0eXBlIiwgJnR5cGVfb2lkLCAmdHlwZV9vaWRfc2l6ZSk7 CisgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLCAibm90IGEgdmFsaWQgVFBNMktFWSBmaWxlIik7CisKKyAgaWYg KGdydWJfbWVtY21wIChzZWFsZWRfa2V5X29pZCwgdHlwZV9vaWQsIHR5cGVfb2lkX3NpemUpICE9 IDApCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQ RSwgIm5vdCBhIHZhbGlkIFRQTTJLRVkgZmlsZSIpOworICAgICAgZ290byBlcnJvcjsKKyAgICB9 CisKKyAgLyogJ2VtcHR5QXV0aCcgbXVzdCBiZSAnVFJVRScgc2luY2Ugd2UgZG9uJ3Qgc3VwcG9y dCBwYXNzd29yZCBhdXRob3JpemF0aW9uICovCisgIHJldCA9IGFzbjFfYWxsb2NhdGVfYW5kX3Jl YWQgKHRwbTJrZXksICJlbXB0eUF1dGgiLCAmZW1wdHlfYXV0aCwgJmVtcHR5X2F1dGhfc2l6ZSk7 CisgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTIHx8IGdydWJfc3RybmNtcCAoIlRSVUUiLCBlbXB0 eV9hdXRoLCBlbXB0eV9hdXRoX3NpemUpICE9IDApCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiZW1wdHlBdXRoIG5vdCBUUlVFIik7CisgICAg ICBnb3RvIGVycm9yOworICAgIH0KKworICAvKiAnc2VjcmV0JyBzaG91bGQgbm90IGJlIGluIGEg c2VhbGVkIGtleSAqLworICByZXQgPSBhc24xX3JlYWRfdmFsdWUgKHRwbTJrZXksICJzZWNyZXQi LCBOVUxMLCAmdG1wX3NpemUpOworICBpZiAocmV0ICE9IEFTTjFfRUxFTUVOVF9OT1RfRk9VTkQp CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAi XCJzZWNyZXRcIiBub3QgYWxsb3dlZCBmb3IgU2VhbGVkIEtleSIpOworICAgICAgZ290byBlcnJv cjsKKyAgICB9CisKKyAgKnBhcnNlZF90cG0ya2V5ID0gdHBtMmtleTsKKworICBlcnIgPSBHUlVC X0VSUl9OT05FOworCisgZXJyb3I6CisgIGdydWJfZnJlZSAodHlwZV9vaWQpOworICBncnViX2Zy ZWUgKGVtcHR5X2F1dGgpOworCisgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQKK2dydWJfdHBtMmtl eV9lbmRfcGFyc2luZyAoYXNuMV9ub2RlIHRwbTJrZXkpCit7CisgIGFzbjFfZGVsZXRlX3N0cnVj dHVyZSAoJnRwbTJrZXkpOworICB0cG0ya2V5ID0gTlVMTDsKK30KKworZ3J1Yl9lcnJfdAorZ3J1 Yl90cG0ya2V5X2dldF9yc2FwYXJlbnQgKGFzbjFfbm9kZSB0cG0ya2V5LCBncnViX3VpbnQ4X3Qg KnJzYXBhcmVudCkKK3sKKyAgdm9pZCAqYm9vbF9zdHIgPSBOVUxMOworICBncnViX3NpemVfdCBi b29sX3N0cl9zaXplID0gMDsKKyAgaW50IHJldDsKKworICBpZiAocnNhcGFyZW50ID09IE5VTEwp CisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgIk5VTEwgcG9p bnRlciBkZXRlY3RlZCIpOworCisgIGlmICh0cG0ya2V5ID09IE5VTEwpCisgICAgcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX1JFQURfRVJST1IsICJpbnZhbGlkIHBhcmVudCBub2RlIik7CisK KyAgcmV0ID0gYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAodHBtMmtleSwgInJzYVBhcmVudCIsICZi b29sX3N0ciwgJmJvb2xfc3RyX3NpemUpOworICBpZiAocmV0ID09IEFTTjFfU1VDQ0VTUykKKyAg ICB7CisgICAgICBpZiAoZ3J1Yl9zdHJuY21wICgiVFJVRSIsIGJvb2xfc3RyLCBib29sX3N0cl9z aXplKSA9PSAwKQorCSpyc2FwYXJlbnQgPSAxOworICAgICAgZWxzZQorCSpyc2FwYXJlbnQgPSAw OworICAgIH0KKyAgZWxzZSBpZiAocmV0ID09IEFTTjFfRUxFTUVOVF9OT1RfRk9VTkQpCisgICAg KnJzYXBhcmVudCA9IDA7CisgIGVsc2UKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf UkVBRF9FUlJPUiwgImZhaWxlZCB0byByZXRyaWV2ZSByc2FQYXJlbnQiKTsKKworICBncnViX2Zy ZWUgKGJvb2xfc3RyKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworZ3J1Yl9lcnJf dAorZ3J1Yl90cG0ya2V5X2dldF9wYXJlbnQgKGFzbjFfbm9kZSB0cG0ya2V5LCBncnViX3VpbnQz Ml90ICpwYXJlbnQpCit7CisgIGludCByZXQ7CisKKyAgaWYgKHBhcmVudCA9PSBOVUxMKQorICAg IHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJOVUxMIHBvaW50ZXIg ZGV0ZWN0ZWQiKTsKKworICBpZiAodHBtMmtleSA9PSBOVUxMKQorICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9SRUFEX0VSUk9SLCAiaW52YWxpZCBwYXJlbnQgbm9kZSIpOworCisgIHJl dCA9IGFzbjFfcmVhZF91aW50MzIgKHRwbTJrZXksICJwYXJlbnQiLCBwYXJlbnQpOworICBpZiAo cmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfUkVB RF9FUlJPUiwgImZhaWxlZCB0byByZXRyaWV2ZSBwYXJlbnQiKTsKKworICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK3RwbTJrZXlfZ2V0X29jdHN0cmluZyAo YXNuMV9ub2RlIHRwbTJrZXksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKipkYXRhLCBncnViX3Np emVfdCAqc2l6ZSkKK3sKKyAgaW50IHJldDsKKworICBpZiAobmFtZSA9PSBOVUxMIHx8IGRhdGEg PT0gTlVMTCB8fCBzaXplID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9BUkdVTUVOVCwgImludmFsaWQgcGFyYW1ldGVyKHMpIik7CisKKyAgaWYgKHRwbTJrZXkg PT0gTlVMTCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfUkVBRF9FUlJPUiwgImlu dmFsaWQgJXMgbm9kZSIsIG5hbWUpOworCisgIHJldCA9IGFzbjFfYWxsb2NhdGVfYW5kX3JlYWQg KHRwbTJrZXksIG5hbWUsIGRhdGEsIHNpemUpOworICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykK KyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfUkVBRF9FUlJPUiwgImZhaWxlZCB0byBy ZXRyaWV2ZSAlcyIsIG5hbWUpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitncnVi X2Vycl90CitncnViX3RwbTJrZXlfZ2V0X3B1YmtleSAoYXNuMV9ub2RlIHRwbTJrZXksIHZvaWQg KipkYXRhLCBncnViX3NpemVfdCAqc2l6ZSkKK3sKKyAgcmV0dXJuIHRwbTJrZXlfZ2V0X29jdHN0 cmluZyAodHBtMmtleSwgInB1YmtleSIsIGRhdGEsIHNpemUpOworfQorCitncnViX2Vycl90Citn cnViX3RwbTJrZXlfZ2V0X3ByaXZrZXkgKGFzbjFfbm9kZSB0cG0ya2V5LCB2b2lkICoqZGF0YSwg Z3J1Yl9zaXplX3QgKnNpemUpCit7CisgIHJldHVybiB0cG0ya2V5X2dldF9vY3RzdHJpbmcgKHRw bTJrZXksICJwcml2a2V5IiwgZGF0YSwgc2l6ZSk7Cit9CisKKy8qCisgKiBUaGUgbWF4aW11bSBh bmQgbWluaW11bSBudW1iZXIgb2YgZWxlbWVudHMgZm9yICdwb2xpY3knIGFuZCAnYXV0aFBvbGlj eScgc2VxdWVuY2VzCisgKgorICogQWx0aG91Z2ggdGhlcmUgaXMgbm8gbGltaXQgZm9yIHRoZSBu dW1iZXIgb2Ygc2VxdWVuY2VzIGVsZW1lbnRzLCB3ZSBzZXQgdGhlIHVwcGVyCisgKiBib3VuZCB0 byA5OSB0byBtYWtlIGl0IGVhc2llciB0byBpbXBsZW1lbnQgdGhlIGNvZGUuCisgKgorICogQW55 ICdwb2xpY3knIG9yICdhdXRoUG9saWN5JyBjb250YWlucyBtb3JlIHRoYW4gOTkgY29tbWFuZHMv cG9saWNpZXMgd291bGQgYmVjb21lCisgKiBleHRyZW1lbHkgY29tcGxleCB0byBtYW5hZ2Ugc28g aXQgaXMgaW1wcmFjdGljYWwgdG8gc3VwcG9ydCBzdWNoIHVzZSBjYXNlLgorICovCisjZGVmaW5l IFRQTTJLRVlfRUxFTUVOVFNfTUFYIDk5CisjZGVmaW5lIFRQTTJLRVlfRUxFTUVOVFNfTUlOIDEK KworLyoKKyAqIFRoZSBzdHJpbmcgdG8gZmV0Y2ggJ1BvbGljeScgZnJvbSAnYXV0aFBvbGljeSc6 CisgKiAgIGF1dGhQb2xpY3kuP1hYLlBvbGljeQorICovCisjZGVmaW5lIEFVVEhQT0xJQ1lfUE9M X01BWF9TVFIgImF1dGhQb2xpY3kuP1hYLlBvbGljeSIKKyNkZWZpbmUgQVVUSFBPTElDWV9QT0xf TUFYIChzaXplb2YgKEFVVEhQT0xJQ1lfUE9MX01BWF9TVFIpKQorCisvKgorICogRXhwZWN0ZWQg c3RyaW5ncyBmb3IgQ29tbWFuZENvZGUgYW5kIENvbW1hbmRQb2xpY3k6CisgKiAgIHBvbGljeS4/ WFguQ29tbWFuZENvZGUKKyAqICAgcG9saWN5Lj9YWC5Db21tYW5kUG9saWN5CisgKiAgIGF1dGhQ b2xpY3kuP1hYLlBvbGljeS4/WVkuQ29tbWFuZENvZGUKKyAqICAgYXV0aFBvbGljeS4/WFguUG9s aWN5Lj9ZWS5Db21tYW5kUG9saWN5CisgKi8KKyNkZWZpbmUgQ01EX0NPREVfTUFYX1NUUiBBVVRI UE9MSUNZX1BPTF9NQVhfU1RSIi4/WVkuQ29tbWFuZENvZGUiCisjZGVmaW5lIENNRF9QT0xfTUFY X1NUUiAgQVVUSFBPTElDWV9QT0xfTUFYX1NUUiIuP1lZLkNvbW1hbmRQb2xpY3kiCisjZGVmaW5l IENNRF9DT0RFX01BWCAoc2l6ZW9mIChDTURfQ09ERV9NQVhfU1RSKSkKKyNkZWZpbmUgQ01EX1BP TF9NQVggIChzaXplb2YgKENNRF9QT0xfTUFYX1NUUikpCisKK3N0YXRpYyBpbnQKK3RwbTJrZXlf Z2V0X3BvbGljeV9zZXEgKGFzbjFfbm9kZSB0cG0ya2V5LCBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQl0cG0ya2V5X3BvbGljeV90ICpwb2xpY3lfc2VxKQoreworICB0cG0ya2V5X3BvbGljeV90IHRt cF9zZXEgPSBOVUxMOworICB0cG0ya2V5X3BvbGljeV90IHBvbGljeSA9IE5VTEw7CisgIGludCBw b2xpY3lfbjsKKyAgY2hhciBjbWRfY29kZVtDTURfQ09ERV9NQVhdOworICBjaGFyIGNtZF9wb2xb Q01EX1BPTF9NQVhdOworICBncnViX3NpemVfdCBjbWRfcG9saWN5X2xlbjsKKyAgaW50IGk7Cisg IGludCByZXQ7CisKKyAgcmV0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKHRwbTJrZXksIHBy ZWZpeCwgJnBvbGljeV9uKTsKKyAgaWYgKHJldCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJu IHJldDsKKworICAvKgorICAgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHBvbGljeSBjb21tYW5kcyB0 byB0d28gZGlnaXRzICg5OSkKKyAgICogQWx0aG91Z2ggdGhlcmUgaXMgbm8gdXBwZXIgYm91bmQg Zm9yIHRoZSBudW1iZXIgb2YgcG9saWN5IGNvbW1hbmRzLAorICAgKiBpbiBwcmFjdGljZSwgaXQg dGFrZXMgb25lIG9yIHR3byBwb2xpY3kgY29tbWFuZHMgdG8gdW5zZWFsIHRoZSBrZXksCisgICAq IHNvIHRoZSA5OSBjb21tYW5kcyBsaW1pdCBpcyBtb3JlIHRoYW4gZW5vdWdoLgorICAgKi8KKyAg aWYgKHBvbGljeV9uID4gVFBNMktFWV9FTEVNRU5UU19NQVggfHwgcG9saWN5X24gPCBUUE0yS0VZ X0VMRU1FTlRTX01JTikKKyAgICByZXR1cm4gQVNOMV9WQUxVRV9OT1RfVkFMSUQ7CisKKyAgLyoK KyAgICogSXRlcmF0ZSB0aGUgcG9saWN5IGNvbW1hbmRzIGJhY2t3YXJkcyBzaW5jZSBncnViX2xp c3RfcHVzaCgpIHByZXBlbmRzCisgICAqIHRoZSBpdGVtIGludG8gdGhlIGxpc3QuCisgICAqLwor ICBmb3IgKGkgPSBwb2xpY3lfbjsgaSA+PSAxOyBpLS0pIHsKKyAgICBwb2xpY3kgPSBncnViX3ph bGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdHBtMmtleV9wb2xpY3kpKTsKKyAgICBpZiAocG9saWN5ID09 IE5VTEwpCisgICAgICB7CisJcmV0ID0gQVNOMV9NRU1fQUxMT0NfRVJST1I7CisJZ290byBlcnJv cjsKKyAgICAgIH0KKyAgICBncnViX3NucHJpbnRmIChjbWRfY29kZSwgQ01EX0NPREVfTUFYLCAi JXMuPyVkLkNvbW1hbmRDb2RlIiwgcHJlZml4LCBpKTsKKyAgICBncnViX3NucHJpbnRmIChjbWRf cG9sLCBDTURfUE9MX01BWCwgIiVzLj8lZC5Db21tYW5kUG9saWN5IiwgcHJlZml4LCBpKTsKKwor ICAgIC8qIENvbW1hbmRDb2RlICAgWzBdIEVYUExJQ0lUIElOVEVHRVIgKi8KKyAgICByZXQgPSBh c24xX3JlYWRfdWludDMyICh0cG0ya2V5LCBjbWRfY29kZSwgJnBvbGljeS0+Y21kX2NvZGUpOwor ICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgcmV0dXJuIHJldDsKKworICAgIC8q IENvbW1hbmRQb2xpY3kgWzFdIEVYUExJQ0lUIE9DVEVUIFNUUklORyAqLworICAgIHJldCA9IHRw bTJrZXlfZ2V0X29jdHN0cmluZyAodHBtMmtleSwgY21kX3BvbCwgJnBvbGljeS0+Y21kX3BvbGlj eSwKKwkJCQkgJmNtZF9wb2xpY3lfbGVuKTsKKyAgICBpZiAocmV0ICE9IEFTTjFfU1VDQ0VTUykK KyAgICAgIHsKKwlnb3RvIGVycm9yOworICAgICAgfQorICAgIGVsc2UgaWYgKGNtZF9wb2xpY3lf bGVuID4gR1JVQl9UUE0yX0JVRkZFUl9DQVBBQ0lUWSkKKyAgICAgIHsKKwkvKgorCSAqIENvbW1h bmRQb2xpY3kgaXMgdGhlIG1hcnNoYWxsZWQgcGFyYW1ldGVycyBmb3IgdGhlIFRQTSBjb21tYW5k IHNvCisJICogaXQgc2hvdWxkIG5vdCBiZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBUUE0yIGJ1 ZmZlci4KKwkgKi8KKwlyZXQgPSBBU04xX1ZBTFVFX05PVF9WQUxJRDsKKwlnb3RvIGVycm9yOwor ICAgICAgfQorICAgIHBvbGljeS0+Y21kX3BvbGljeV9sZW4gPSAoZ3J1Yl91aW50MTZfdCljbWRf cG9saWN5X2xlbjsKKworICAgIC8qIFByZXBlbmQgdGhlIHBvbGljeSBjb21tYW5kIGludG8gdGhl IHNlcXVlbmNlICovCisgICAgZ3J1Yl9saXN0X3B1c2ggKEdSVUJfQVNfTElTVF9QICgmdG1wX3Nl cSksIEdSVUJfQVNfTElTVCAocG9saWN5KSk7CisgIH0KKworICAqcG9saWN5X3NlcSA9IHRtcF9z ZXE7CisKKyAgcmV0dXJuIEFTTjFfU1VDQ0VTUzsKKworIGVycm9yOgorICBpZiAocG9saWN5ICE9 IE5VTEwpCisgICAgeworICAgICAgZ3J1Yl9mcmVlIChwb2xpY3ktPmNtZF9wb2xpY3kpOworICAg ICAgZ3J1Yl9mcmVlIChwb2xpY3kpOworICAgIH0KKyAgZ3J1Yl90cG0ya2V5X2ZyZWVfcG9saWN5 X3NlcSAodG1wX3NlcSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZ3J1Yl9lcnJfdAorZ3J1Yl90 cG0ya2V5X2dldF9wb2xpY3lfc2VxIChhc24xX25vZGUgdHBtMmtleSwgdHBtMmtleV9wb2xpY3lf dCAqcG9saWN5X3NlcSkKK3sKKyAgaW50IHJldDsKKworICByZXQgPSB0cG0ya2V5X2dldF9wb2xp Y3lfc2VxICh0cG0ya2V5LCAicG9saWN5IiwgcG9saWN5X3NlcSk7CisgIGlmIChyZXQgPT0gQVNO MV9FTEVNRU5UX05PVF9GT1VORCkKKyAgICB7CisgICAgICAvKiAicG9saWN5IiBpcyBvcHRpb25h bCwgc28gaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUgKi8KKyAgICAgICpwb2xpY3lfc2VxID0gTlVM TDsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworICAgIH0KKyAgZWxzZSBpZiAocmV0ICE9 IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfUkVBRF9FUlJP UiwgImZhaWxlZCB0byByZXRyaWV2ZSBwb2xpY3kiKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9O RTsKK30KKwordm9pZAorZ3J1Yl90cG0ya2V5X2ZyZWVfcG9saWN5X3NlcSAodHBtMmtleV9wb2xp Y3lfdCBwb2xpY3lfc2VxKQoreworICB0cG0ya2V5X3BvbGljeV90IHBvbGljeTsKKyAgdHBtMmtl eV9wb2xpY3lfdCBuZXh0OworCisgIGlmIChwb2xpY3lfc2VxID09IE5VTEwpCisgICAgcmV0dXJu OworCisgIEZPUl9MSVNUX0VMRU1FTlRTX1NBRkUgKHBvbGljeSwgbmV4dCwgcG9saWN5X3NlcSkK KyAgICB7CisgICAgICBncnViX2ZyZWUgKHBvbGljeS0+Y21kX3BvbGljeSk7CisgICAgICBncnVi X2ZyZWUgKHBvbGljeSk7CisgICAgfQorfQorCitncnViX2Vycl90CitncnViX3RwbTJrZXlfZ2V0 X2F1dGhwb2xpY3lfc2VxIChhc24xX25vZGUgdHBtMmtleSwgdHBtMmtleV9hdXRocG9saWN5X3Qg KmF1dGhwb2xfc2VxKQoreworICB0cG0ya2V5X2F1dGhwb2xpY3lfdCB0bXBfc2VxID0gTlVMTDsK KyAgdHBtMmtleV9hdXRocG9saWN5X3QgYXV0aHBvbCA9IE5VTEw7CisgIGludCBhdXRocG9sX247 CisgIGNoYXIgYXV0aHBvbF9wb2xbQVVUSFBPTElDWV9QT0xfTUFYXTsKKyAgaW50IGk7CisgIGlu dCByZXQ7CisgIGdydWJfZXJyX3QgZXJyOworCisgIHJldCA9IGFzbjFfbnVtYmVyX29mX2VsZW1l bnRzICh0cG0ya2V5LCAiYXV0aFBvbGljeSIsICZhdXRocG9sX24pOworICBpZiAocmV0ID09IEFT TjFfRUxFTUVOVF9OT1RfRk9VTkQpCisgICAgeworICAgICAgLyogImF1dGhQb2xpY3kiIGlzIG9w dGlvbmFsLCBzbyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZSAqLworICAgICAgKmF1dGhwb2xfc2Vx ID0gTlVMTDsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworICAgIH0KKyAgZWxzZSBpZiAo cmV0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfUkVB RF9FUlJPUiwgImZhaWxlZCB0byByZXRyaWV2ZSBhdXRoUG9saWN5Iik7CisKKyAgLyogTGltaXQg dGhlIG51bWJlciBvZiBhdXRoUG9saWN5IGVsZW1lbnRzIHRvIHR3byBkaWdpdHMgKDk5KSAqLwor ICBpZiAoYXV0aHBvbF9uID4gVFBNMktFWV9FTEVNRU5UU19NQVggfHwgYXV0aHBvbF9uIDwgVFBN MktFWV9FTEVNRU5UU19NSU4pCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9SQU5HRSwgImludmFsaWQgbnVtYmVyIG9mIGF1dGhQb2xpY3kgZWxlbWVudHMiKTsKKworICAv KgorICAgKiBJdGVyYXRlIHRoZSBhdXRoUG9saWN5IGVsZW1lbnRzIGJhY2t3YXJkcyBzaW5jZSBn cnViX2xpc3RfcHVzaCgpIHByZXBlbmRzCisgICAqIHRoZSBpdGVtIGludG8gdGhlIGxpc3QuCisg ICAqLworICBmb3IgKGkgPSBhdXRocG9sX247IGkgPj0gMTsgaS0tKSB7CisgICAgYXV0aHBvbCA9 IGdydWJfemFsbG9jIChzaXplb2YgKHN0cnVjdCB0cG0ya2V5X2F1dGhwb2xpY3kpKTsKKyAgICBp ZiAoYXV0aHBvbCA9PSBOVUxMKQorICAgICAgeworCWVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X09VVF9PRl9NRU1PUlksICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdXRoUG9saWN5 Iik7CisJZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICBncnViX3NucHJpbnRmIChhdXRocG9sX3Bv bCwgQVVUSFBPTElDWV9QT0xfTUFYLCAiYXV0aFBvbGljeS4/JWQuUG9saWN5IiwgaSk7CisKKyAg ICByZXQgPSB0cG0ya2V5X2dldF9wb2xpY3lfc2VxICh0cG0ya2V5LCBhdXRocG9sX3BvbCwgJmF1 dGhwb2wtPnBvbGljeV9zZXEpOworICAgIGlmIChyZXQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAg eworICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9SRUFEX0VSUk9SLCAiZmFpbGVk IHRvIHJldHJpZXZlIHBvbGljeSBmcm9tIGF1dGhQb2xpY3kiKTsKKyAgICAgICAgZ290byBlcnJv cjsKKyAgICAgIH0KKworICAgIC8qIFByZXBlbmQgdGhlIGF1dGhQb2xpY3kgZWxlbWVudCBpbnRv IHRoZSBzZXF1ZW5jZSAqLworICAgIGdydWJfbGlzdF9wdXNoIChHUlVCX0FTX0xJU1RfUCAoJnRt cF9zZXEpLCBHUlVCX0FTX0xJU1QgKGF1dGhwb2wpKTsKKyAgfQorCisgICphdXRocG9sX3NlcSA9 IHRtcF9zZXE7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBlcnJvcjoKKyAgaWYgKGF1 dGhwb2wgIT0gTlVMTCkKKyAgICB7CisgICAgICBncnViX3RwbTJrZXlfZnJlZV9wb2xpY3lfc2Vx IChhdXRocG9sLT5wb2xpY3lfc2VxKTsKKyAgICAgIGdydWJfZnJlZSAoYXV0aHBvbCk7CisgICAg fQorCisgIGdydWJfdHBtMmtleV9mcmVlX2F1dGhwb2xpY3lfc2VxICh0bXBfc2VxKTsKKworICBy ZXR1cm4gZXJyOworfQorCit2b2lkCitncnViX3RwbTJrZXlfZnJlZV9hdXRocG9saWN5X3NlcSAo dHBtMmtleV9hdXRocG9saWN5X3QgYXV0aHBvbF9zZXEpCit7CisgIHRwbTJrZXlfYXV0aHBvbGlj eV90IGF1dGhwb2w7CisgIHRwbTJrZXlfYXV0aHBvbGljeV90IG5leHQ7CisKKyAgaWYgKGF1dGhw b2xfc2VxID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIEZPUl9MSVNUX0VMRU1FTlRTX1NBRkUg KGF1dGhwb2wsIG5leHQsIGF1dGhwb2xfc2VxKQorICAgIHsKKyAgICAgIGdydWJfdHBtMmtleV9m cmVlX3BvbGljeV9zZXEgKGF1dGhwb2wtPnBvbGljeV9zZXEpOworICAgICAgZ3J1Yl9mcmVlIChh dXRocG9sKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvdHBtMl9r ZXlfcHJvdGVjdG9yL3RwbTJrZXkuaCBiL2dydWItY29yZS9jb21tYW5kcy90cG0yX2tleV9wcm90 ZWN0b3IvdHBtMmtleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZjc0 OWQ2MmMyCi0tLSAvZGV2L251bGwKKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJfa2V5X3By b3RlY3Rvci90cG0ya2V5LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqICBHUlVCICAtLSAgR1Jh bmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDIzIFNVU0UgTExDCisg KiAgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoK KyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgR1JVQl9UUE0yX1RQTTJLRVlfSEVBREVS CisjZGVmaW5lIEdSVUJfVFBNMl9UUE0yS0VZX0hFQURFUiAxCisKKyNpbmNsdWRlIDxncnViL3R5 cGVzLmg+CisjaW5jbHVkZSA8bGlidGFzbjEuaD4KKworLyoKKyAqIFRQTVBvbGljeSA6Oj0gU0VR VUVOQ0UgeworICogICBDb21tYW5kQ29kZSAgIFswXSBFWFBMSUNJVCBJTlRFR0VSLAorICogICBD b21tYW5kUG9saWN5IFsxXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcKKyAqIH0KKyAqLworc3RydWN0 IHRwbTJrZXlfcG9saWN5IHsKKyAgc3RydWN0IHRwbTJrZXlfcG9saWN5ICpuZXh0OworICBzdHJ1 Y3QgdHBtMmtleV9wb2xpY3kgKipwcmV2OworICBncnViX3VpbnQzMl90IGNtZF9jb2RlOworICB2 b2lkICpjbWRfcG9saWN5OworICBncnViX3VpbnQxNl90IGNtZF9wb2xpY3lfbGVuOworfTsKK3R5 cGVkZWYgc3RydWN0IHRwbTJrZXlfcG9saWN5ICp0cG0ya2V5X3BvbGljeV90OworCisvKgorICog VFBNQXV0aFBvbGljeSA6Oj0gU0VRVUVOQ0UgeworICogICBOYW1lICAgIFswXSBFWFBMSUNJVCBV VEY4U3RyaW5nIE9QVElPTkFMLAorICogICBQb2xpY3kgIFsxXSBFWFBMSUNJVCBTRVFVRU5DRSBP RiBUUE1Qb2xpY3kKKyAqIH0KKyAqCisgKiBOYW1lIGlzIG5vdCBhIG5lY2Vzc2FyeSBwYXJ0IHRv IHVuc2VhbCB0aGUga2V5LiBJZ25vcmUgaXQuCisgKi8KK3N0cnVjdCB0cG0ya2V5X2F1dGhwb2xp Y3kgeworICBzdHJ1Y3QgdHBtMmtleV9hdXRocG9saWN5ICpuZXh0OworICBzdHJ1Y3QgdHBtMmtl eV9hdXRocG9saWN5ICoqcHJldjsKKyAgLyogY2hhciAqbmFtZTsgKi8KKyAgdHBtMmtleV9wb2xp Y3lfdCBwb2xpY3lfc2VxOworfTsKK3R5cGVkZWYgc3RydWN0IHRwbTJrZXlfYXV0aHBvbGljeSAq dHBtMmtleV9hdXRocG9saWN5X3Q7CisKK2V4dGVybiBncnViX2Vycl90CitncnViX3RwbTJrZXlf c3RhcnRfcGFyc2luZyAoYXNuMV9ub2RlICpwYXJzZWRfdHBtMmtleSwgdm9pZCAqZGF0YSwgZ3J1 Yl9zaXplX3Qgc2l6ZSk7CisKK2V4dGVybiB2b2lkCitncnViX3RwbTJrZXlfZW5kX3BhcnNpbmcg KGFzbjFfbm9kZSB0cG0ya2V5KTsKKworZXh0ZXJuIGdydWJfZXJyX3QKK2dydWJfdHBtMmtleV9n ZXRfcnNhcGFyZW50IChhc24xX25vZGUgdHBtMmtleSwgZ3J1Yl91aW50OF90ICpyc2FwYXJlbnQp OworCitleHRlcm4gZ3J1Yl9lcnJfdAorZ3J1Yl90cG0ya2V5X2dldF9wYXJlbnQgKGFzbjFfbm9k ZSB0cG0ya2V5LCBncnViX3VpbnQzMl90ICpwYXJlbnQpOworCitleHRlcm4gZ3J1Yl9lcnJfdAor Z3J1Yl90cG0ya2V5X2dldF9wdWJrZXkgKGFzbjFfbm9kZSB0cG0ya2V5LCB2b2lkICoqZGF0YSwg Z3J1Yl9zaXplX3QgKnNpemUpOworCitleHRlcm4gZ3J1Yl9lcnJfdAorZ3J1Yl90cG0ya2V5X2dl dF9wcml2a2V5IChhc24xX25vZGUgdHBtMmtleSwgdm9pZCAqKmRhdGEsIGdydWJfc2l6ZV90ICpz aXplKTsKKworZXh0ZXJuIGdydWJfZXJyX3QKK2dydWJfdHBtMmtleV9nZXRfcG9saWN5X3NlcSAo YXNuMV9ub2RlIHRwbTJrZXksIHRwbTJrZXlfcG9saWN5X3QgKnBvbGljeV9zZXEpOworCitleHRl cm4gdm9pZAorZ3J1Yl90cG0ya2V5X2ZyZWVfcG9saWN5X3NlcSAodHBtMmtleV9wb2xpY3lfdCBw b2xpY3lfc2VxKTsKKworZXh0ZXJuIGdydWJfZXJyX3QKK2dydWJfdHBtMmtleV9nZXRfYXV0aHBv bGljeV9zZXEgKGFzbjFfbm9kZSB0cG0ya2V5LCB0cG0ya2V5X2F1dGhwb2xpY3lfdCAqYXV0aHBv bF9zZXEpOworCitleHRlcm4gdm9pZAorZ3J1Yl90cG0ya2V5X2ZyZWVfYXV0aHBvbGljeV9zZXEg KHRwbTJrZXlfYXV0aHBvbGljeV90IGF1dGhwb2xfc2VxKTsKKworI2VuZGlmIC8qIEdSVUJfVFBN Ml9UUE0yS0VZX0hFQURFUiAqLwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL3RwbTJf a2V5X3Byb3RlY3Rvci90cG0ya2V5X2FzbjFfdGFiLmMgYi9ncnViLWNvcmUvY29tbWFuZHMvdHBt Ml9rZXlfcHJvdGVjdG9yL3RwbTJrZXlfYXNuMV90YWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLmJlYmUxMDhhMwotLS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9j b21tYW5kcy90cG0yX2tleV9wcm90ZWN0b3IvdHBtMmtleV9hc24xX3RhYi5jCkBAIC0wLDAgKzEs NjMgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENv cHlyaWdodCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAg R1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyAqLworCisvKgorICogIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgJ2Fz bjFQYXJzZXIgdHBtMmtleS5hc24nIGFuZCB0aGUgJyNpbmNsdWRlJworICogIGhlYWRlcnMgYXJl IHJlcGxhY2VkIHdpdGggdGhlIG9uZXMgaW4gZ3J1YjIuCisgKiAgLSAnZ3J1Yi9tbS5oJyBmb3Ig dGhlIGRlZmluaXRpb24gb2YgJ05VTEwnCisgKiAgLSAnbGlidGFzbjEuaCcgZm9yIHRoZSBkZWZp bml0aW9uIG9mICdhc24xX3N0YXRpY19ub2RlJworICovCisKKyNpbmNsdWRlIDxncnViL21tLmg+ CisjaW5jbHVkZSA8bGlidGFzbjEuaD4KKworY29uc3QgYXNuMV9zdGF0aWNfbm9kZSB0cG0ya2V5 X2FzbjFfdGFiW10gPSB7CisgIHsgIlRQTTJLRVkiLCA1MzY4NzUwMjQsIE5VTEwgfSwKKyAgeyBO VUxMLCAxMDczNzQxODM2LCBOVUxMIH0sCisgIHsgIlRQTVBvbGljeSIsIDE2MTA2MTI3NDEsIE5V TEwgfSwKKyAgeyAiQ29tbWFuZENvZGUiLCAxNjEwNjIwOTMxLCBOVUxMIH0sCisgIHsgTlVMTCwg MjA1NiwgIjAifSwKKyAgeyAiQ29tbWFuZFBvbGljeSIsIDUzNjg3OTExMSwgTlVMTCB9LAorICB7 IE5VTEwsIDIwNTYsICIxIn0sCisgIHsgIlRQTUF1dGhQb2xpY3kiLCAxNjEwNjEyNzQxLCBOVUxM IH0sCisgIHsgIk5hbWUiLCAxNjEwNjM3MzQ2LCBOVUxMIH0sCisgIHsgTlVMTCwgMjA1NiwgIjAi fSwKKyAgeyAiUG9saWN5IiwgNTM2ODc5MTE1LCBOVUxMIH0sCisgIHsgTlVMTCwgMTA3Mzc0Mzg4 MCwgIjEifSwKKyAgeyBOVUxMLCAyLCAiVFBNUG9saWN5In0sCisgIHsgIlRQTUtleSIsIDUzNjg3 MDkxNywgTlVMTCB9LAorICB7ICJ0eXBlIiwgMTA3Mzc0MTgzNiwgTlVMTCB9LAorICB7ICJlbXB0 eUF1dGgiLCAxNjEwNjM3MzE2LCBOVUxMIH0sCisgIHsgTlVMTCwgMjA1NiwgIjAifSwKKyAgeyAi cG9saWN5IiwgMTYxMDYzNzMyMywgTlVMTCB9LAorICB7IE5VTEwsIDEwNzM3NDM4ODAsICIxIn0s CisgIHsgTlVMTCwgMiwgIlRQTVBvbGljeSJ9LAorICB7ICJzZWNyZXQiLCAxNjEwNjM3MzE5LCBO VUxMIH0sCisgIHsgTlVMTCwgMjA1NiwgIjIifSwKKyAgeyAiYXV0aFBvbGljeSIsIDE2MTA2Mzcz MjMsIE5VTEwgfSwKKyAgeyBOVUxMLCAxMDczNzQzODgwLCAiMyJ9LAorICB7IE5VTEwsIDIsICJU UE1BdXRoUG9saWN5In0sCisgIHsgImRlc2NyaXB0aW9uIiwgMTYxMDYzNzM0NiwgTlVMTCB9LAor ICB7IE5VTEwsIDIwNTYsICI0In0sCisgIHsgInJzYVBhcmVudCIsIDE2MTA2MzczMTYsIE5VTEwg fSwKKyAgeyBOVUxMLCAyMDU2LCAiNSJ9LAorICB7ICJwYXJlbnQiLCAxMDczNzQxODI3LCBOVUxM IH0sCisgIHsgInB1YmtleSIsIDEwNzM3NDE4MzEsIE5VTEwgfSwKKyAgeyAicHJpdmtleSIsIDcs IE5VTEwgfSwKKyAgeyBOVUxMLCAwLCBOVUxMIH0KK307Ci0tIAoyLjQzLjAKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcg bGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlz dGluZm8vZ3J1Yi1kZXZlbAo=