From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=VcHKxLHZ; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 9E5D45A0275 for ; Mon, 24 Aug 2026 15:45:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787579113; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5qugtWMQLkOFwQXgK+ffBGJBlk9laVO8reLV59btStI=; b=VcHKxLHZ4kIkVuK6KSDmuiXUpzhr3D6nAJFOwCtCJFSDagpkjdAwvTAhw5NUN25NvCQ6qE K4o0cpadY82daKAgx1Dl6WBVIwgDC6P8W517csyWOwZxam7q9Za55Do0WRdA/3YFIqCBpY k9CD2icBFxdTEUJKKsKUlvVMvBWwgUY= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-670-VUcRM88mNxWM5gIQ8Oa3-g-1; Mon, 24 Aug 2026 09:45:12 -0400 X-MC-Unique: VUcRM88mNxWM5gIQ8Oa3-g-1 X-Mimecast-MFC-AGG-ID: VUcRM88mNxWM5gIQ8Oa3-g_1787579111 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 15799195DE22; Mon, 24 Aug 2026 13:45:11 +0000 (UTC) Received: from anskuma-thinkpadp1gen7.bengluru.csb (unknown [10.74.80.6]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C349A1955F12; Mon, 24 Aug 2026 13:45:01 +0000 (UTC) From: Anshu Kumari To: sbrivio@redhat.com, passt-dev@passt.top, anskuma@redhat.com Subject: [PATCH v6 4/6] dhcp: Add --dhcp-opt with option table and value parser Date: Mon, 24 Aug 2026 19:14:32 +0530 Message-ID: <20260824134436.282300-5-anskuma@redhat.com> In-Reply-To: <20260824134436.282300-1-anskuma@redhat.com> References: <20260824134436.282300-1-anskuma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: VGdlhbsOoK9Wx0cAGJPxUCwR0DvSsF6xvoZXSBrJVfE_1787579111 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: P26WF7Y4PLDL7ZQAPNC6MC6ESDVCI4IX X-Message-ID-Hash: P26WF7Y4PLDL7ZQAPNC6MC6ESDVCI4IX X-MailFrom: anskuma@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: david@gibson.dropbear.id.au, jmaloy@redhat.com, lvivier@redhat.com X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: SW50cm9kdWNlIHRoZSAtLWRoY3Atb3B0IGZsYWcgdGhhdCBhbGxvd3Mgc2V0dGluZyBhcmJpdHJh cnkgREhDUA0Kb3B0aW9ucyBmcm9tIGNvbW1hbmQtbGluZSBpbiB0aGUgZm9ybSBbLS1kaGNwLW9w dCBDT0RFLFZBTFVFXS4NCg0KQWRkIGEgdHlwZSBsb29rdXAgdGFibGUgbWFwcGluZyBvcHRpb24g Y29kZXMgdG8gUkZDIDIxMzIgdmFsdWUgdHlwZXMNCihJUHY0LCBJUHY0IGxpc3QsIGludGVnZXIs IHN0cmluZykgYW5kIGRoY3Bfb3B0X3BhcnNlKCkgdG8gY29udmVydA0KQ0xJIHN0cmluZ3MgdG8g YmluYXJ5IHdpcmUgZm9ybWF0LiAgUGFyc2VkIG9wdGlvbnMgYXJlIHN0b3JlZCBpbg0Kc3RydWN0 IG9wdHNbXSBhbmQgaW5qZWN0ZWQgaW50byBESENQIHJlcGxpZXMuICBJZiB0aGUgc2FtZSBvcHRp b24gY29kZQ0KaXMgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIHdpbnMuDQoN Ckxpbms6IGh0dHBzOi8vYnVncy5wYXNzdC50b3Avc2hvd19idWcuY2dpP2lkPTE5Mg0KU2lnbmVk LW9mZi1ieTogQW5zaHUgS3VtYXJpIDxhbnNrdW1hQHJlZGhhdC5jb20+DQotLS0NCnY2Og0KICAt IGRyb3BwZWQgb3B0aW9uIDUzLg0KICAtIFVzZWQgcGFyc2VfdW5zaWduZWQoKSwgcGFyc2VfbGl0 ZXJhbCgpLCBwYXJzZV9pcHY0KCkNCiAgICBmcm9tIHBhcnNlLmMgaW5zdGVhZCBvZiBtYW51YWwg c3RydG91bC9pbmV0X3B0b24uDQogIC0gTW92ZWQgb3B0aW9uLXBhcnNpbmcgdmFyaWFibGVzIGlu dG8gY2FzZSAzNCBibG9jaw0KICAgIHNjb3BlLg0KICAtIFVzZWQgaHRvbnMoKS9odG9ubCgpIGZv ciBpbnRlZ2VyIGVuY29kaW5nLg0KICAtIFVzZWQgYXNzZXJ0KCkgZm9yIGJvdW5kYXJ5IGNoZWNr cyBpbiBkaGNwX29wdF90b19zdHIoKS4NCiAgLSBVc2VkIHNucHJpbnRmKCkgd2l0aCAlLipzIGZv ciBzdHJpbmcgZm9ybWF0dGluZyBpbg0KICAgIGRoY3Bfb3B0X3RvX3N0cigpLg0KICAtIFVzZWQg c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSBpbnN0ZWFkIG9mIGxpdGVyYWwgNC4NCiAgLSBkaGNwX29w dF90b19zdHIoKSBjaGVja3MgT1BUX1VOU0VUIGZvciBhbGwgc3RhdGVzLA0KICAgIG5vdCBqdXN0 IE9QVF9VU0VSLg0KICAtIEFkZGVkIGN1cmx5IGJyYWNrZXRzIGZvciBtdWx0aS1saW5lIGNvbmRp dGlvbmFscy4NCiAgLSBEcm9wcGVkIHRyYWlsaW5nIGNvbW1hIGFmdGVyIE9QVF9ERUZBVUxUIGlu DQogICAgaW5pdGlhbGl6ZXJzIHRvIHJlZHVjZSBsaW5lIGxlbmd0aC4NCg0KdjU6DQogIC0gUmVu YW1lIGVudW0gdmFsdWVzOiBJTlQ4L0lOVDE2L0lOVDMyL1NJTlQzMiDihpIgVUlOVDgvVUlOVDE2 L1VJTlQzMi9JTlQzMg0KICAtIENoYW5nZSBpbnQgbGVuIHRvIHNpemVfdCBsZW4gaW4gZGhjcF9v cHRfcGFyc2UoKSwgcmVtb3ZlIGludCBjYXN0cw0KICAtIE1ha2UgZGhjcF9vcHRfcGFyc2UoKSBz dGF0aWMsIGFkZCBkaGNwX3NldF9vcHQoKSB0byBzdG9yZSBvcHRpb25zIA0KICAgIGRpcmVjdGx5 IGluIG9wdHNbXSBhdCBzdGFydHVwIGluc3RlYWQgb2YgZG91YmxlLXBhcnNpbmcgdmlhIGN0eC0+ ZGhjcF9vcHRzDQogIC0gQWRkIE9QVF9VU0VSIHRvIGVudW0gb3B0X3N0YXRlIHRvIHByb3RlY3Qg dXNlciBvcHRpb25zIGZyb20gYmVpbmcNCiAgICBvdmVyd3JpdHRlbiBieSBidWlsdC1pbiBkZWZh dWx0cw0KICAtIEFkZCBkaGNwX29wdF90b19zdHIoKSBmb3IgY29uZl9wcmludCgpIGRpc3BsYXkN CiAgLSBSZW1vdmUgZGhjcF9vcHRzW10gZnJvbSBzdHJ1Y3QgY3R4IGluIHBhc3N0LmgNCiAgLSBS ZW1vdmUgY29uZl9kaGNwX29wdGlvbigpIHdyYXBwZXIgZnJvbSBjb25mLmMNCg0KdjQ6DQogIC0g UmVuYW1lZCBjdXN0b21fb3B0cyB0byBkaGNwX29wdHMsIDI1NiBlbnRyaWVzIGluZGV4ZWQgYnkg b3B0aW9uDQogICAgY29kZSwgcmVtb3ZlZCBNQVhfQ1VTVE9NX0RIQ1BfT1BUUyBhbmQgY291bnQg ZmllbGQuDQogIC0gQ2hhbmdlZCBzdHIgYnVmZmVyIGZyb20gMjU2IHRvIDI1NSBieXRlcy4NCiAg LSBNb3ZlZCBmdW5jdGlvbiB0byBjb25mLmMgYXMgc3RhdGljIGNvbmZfZGhjcF9vcHRpb24oKSwg cmVuYW1lZA0KICAgIGZyb20gZGhjcF9hZGRfb3B0aW9uKCkuDQogIC0gTWFkZSBkaGNwX29wdF9w YXJzZSgpIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGRoY3AuaA0KICAtIERyb3BwZWQgdmFsL2xl biBmcm9tIGN0eCBzdHJ1Y3Q7IGNvbmZfZGhjcF9vcHRpb24oKSB2YWxpZGF0ZXMNCiAgICB3aXRo IHRlbXAgYnVmZmVyLCBkaGNwKCkgcGFyc2VzIHN0ciBkaXJlY3RseSBpbnRvIG9wdHNbXSBhdA0K ICAgIHJlcGx5IHRpbWUuDQogIC0gUmVwbGFjZWQgc3RydG9rX3IoKSArIDI1Ni1ieXRlIGJ1ZmZl ciB3aXRoIHN0cmNzcG4oKSArDQogICAgSU5FVF9BRERSU1RSTEVOIGJ1ZmZlci4NCiAgLSBBZGRl ZCBESENQX09QVF9TSU5UMzIgZm9yIG9wdGlvbiAyIChUaW1lIE9mZnNldCksIHVzZXMgc3RydG9s KCkNCiAgICBwZXIgUkZDIDIxMzIgU2VjdGlvbiA4LjIuDQogIC0gQWxsIGVycm9ycyBpbiBkaGNw X29wdF9wYXJzZSgpIHJldHVybiAtMSwgcmVtb3ZlZCBkaWUoKSBjYWxsczsNCiAgICBjYWxsZXIg aGFuZGxlcyBlcnJvciBtZXNzYWdlIGNvbnNpc3RlbnRseS4NCiAgLSBSZW1vdmVkIHJlZHVuZGFu dCAhc2xlbiBjaGVjayBpbiBESENQX09QVF9TVFIgY2FzZS4NCiAgLSBPbWl0dGVkIGV4cGxpY2l0 IGFycmF5IHNpemUgZm9yIGRoY3Bfb3B0X3R5cGVzW10sIGFycmF5ZGRlZCBib3VuZHMNCiAgICBj aGVjayBiZWZvcmUgbG9va3VwLg0KICAtIEFkZGVkIGVycm5vID0gMCArIGVycm5vIGNoZWNrIGZv ciBzdHJ0b3VsKCkgaW4gY2FzZSAzNC4NCiAgLSBGaXhlZCB1c2FnZSB0ZXh0OiAiU2V0IERIQ1Ag b3B0aW9uIENPREUgdG8gVkFMIi4NCiAgLSBJbXByb3ZlZCBtYW4gcGFnZTogYWRkZWQgZm9ybWF0 IGRlc2NyaXB0aW9uIGFuZCBleGFtcGxlcw0KDQp2MzoNCiAgLSBSZXBsYWNlZCBESENQX09QVF9J TlRFR0VSIHdpdGggc2VwYXJhdGUgREhDUF9PUFRfSU5UOC9JTlQxNi9JTlQzMg0KICAgIGVudW1z LCByZW1vdmVkIGRoY3Bfb3B0X2ludF93aWR0aFtdIGFycmF5Lg0KICAtIFNoYXJlZCBsb2dpYyBi ZXR3ZWVuIERIQ1BfT1BUX0lQVjQgYW5kIERIQ1BfT1BUX0lQVjRfTElTVCDigJQgcGFyc2UNCiAg ICBib3RoIGFzIGxpc3QsIGVycm9yIGlmID4xIGluIHNpbmdsZSBjYXNlLg0KICAtIEFkZGVkIGVy cm5vID0gMCBiZWZvcmUgc3RydG91bCgpIGFuZCBjaGVjayBhZnRlci4NCiAgLSBGaXhlZCByYW5n ZSBjaGVjazogMVVMTCA8PCAod2lkdGggKiA4KSBmb3IgYWxsIHdpZHRocyBpbmNsdWRpbmcNCiAg ICB3aWR0aD09NC4NCiAgLSBzdHJuY3B5IOKGkiBtZW1jcHkgZm9yIERIQ1BfT1BUX1NUUi4NCiAg LSBNb3ZlZCBlbnVtIHRvIGRoY3AuYyBzaW5jZSBub3QgdXNlZCBpbiBvdGhlciBmaWxlcy4NCiAg LSBSZW1vdmVkIG9wdGlvbnMgNTUsIDYxIChjbGllbnQtb25seSksIDExOSAoRE5TIGNvbXByZXNz aW9uLCB1c2UNCiAgICAtLWRoY3Atc2VhcmNoIGluc3RlYWQpLCAzMyAoSVAgcGFpcnMgbm90IHN1 cHBvcnRlZCkuDQogIC0gREhDUF9PUFRfUEFSU0VfQlVGIDEwMjQg4oaSIGNoYXIgdG1wWzI1Nl0u DQogIC0gVXBncmFkZWQgZGhjcF9hZGRfb3B0aW9uKCkgdG8gY2FsbCBkaGNwX29wdF9wYXJzZSgp IGFuZCBwb3B1bGF0ZQ0KICAgIHZhbFtdL2xlbi4NCiAgLSBBbGlnbmVkIGFycmF5IGVudHJpZXMg Zm9yIHJlYWRhYmlsaXR5Lg0KICAtIEFkZGVkIHRhYiBhZnRlciBAREhDUF9PUFRfSVBWNF9MSVNU OiBpbiBrZXJuZWxkb2MuDQogIC0gUmVqZWN0IGVtcHR5IHZhbHVlIHN0cmluZ3MgYmVmb3JlIHBh cnNpbmcNCiAgLSBSZWplY3QgbGVhZGluZy90cmFpbGluZy9jb25zZWN1dGl2ZSBjb21tYXMgaW4g SVAgbGlzdCB2YWx1ZXMuDQoNCnYyOg0KICAtIFJlcGxhY2VkIHN0cnVjdCBsb29rdXAgdGFibGUg KyBkaGNwX29wdF90eXBlX2xvb2t1cCgpIGZ1bmN0aW9uIHdpdGggZmxhdCBkaGNwX29wdF90eXBl c1syNTZdIGFycmF5IGluZGV4ZWQgYnkgY29kZS4NCiAgLSBDb25zb2xpZGF0ZWQgREhDUF9PUFRf VUlOVDgvVUlOVDE2L1VJTlQzMiBpbnRvIHNpbmdsZSBESENQX09QVF9JTlRFR0VSIHdpdGggZGhj cF9vcHRfaW50X3dpZHRoWzI1Nl0gdGFibGUuDQogIC0gRHJvcHBlZCBESENQX09QVF9ST1VURVMg LyBvcHRpb24gMTIxIGVudGlyZWx5Lg0KICAtIEFkZGVkIGtlcm5lbGRvYyBmb3IgZW51bSBkaGNw X29wdF90eXBlIHZhbHVlcy4NCiAgLSBSZW1vdmVkIGN1cmx5IGJyYWNlcyBmcm9tIHN3aXRjaCBj YXNlcywgZGVjbGFyYXRpb25zIGJlZm9yZSBzd2l0Y2guDQogIC0gQWRkZWQgbmV3bGluZXMgYmVm b3JlIHJldHVybiBzdGF0ZW1lbnRzLg0KICAtIENoYW5nZWQgSVAgbGlzdCBkZWxpbWl0ZXIgZnJv bSBzcGFjZSB0byBjb21tYSAoLS1kaGNwLW9wdCA2LDEuMS4xLjEsOC44LjguOCkuDQogIC0gRGVm aW5lZCBESENQX09QVF9QQVJTRV9CVUYgY29uc3RhbnQgZm9yIGJhcmUgMTAyNC4NCiAgLSBBZGRl ZCBsZW4gYW5kIHZhbFsyNTVdIGZpZWxkcyB0byBzdHJ1Y3QgaGVyZSAobW92ZWQgZnJvbSBwYXRj aCAxKS4NCiAgLSBBZGRlZCBrZXJuZWxkb2MgZm9yIEBjdXN0b21fb3B0cy5sZW4gYW5kIEBjdXN0 b21fb3B0cy52YWwuDQogIC0gV2lyZWQgZGhjcF9vcHRfcGFyc2UoKSBpbnRvIGNhc2UgMzIgKC0t ZGhjcC1ib290KSB0byBwb3B1bGF0ZSB2YWwvbGVuLg0KLS0tDQogY29uZi5jICB8ICAyNiArKysr LQ0KIGRoY3AuYyAgfCAzMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0NCiBkaGNwLmggIHwgICAyICsNCiBwYXNzdC4xIHwgIDQyICsrKysr KysrDQogNCBmaWxlcyBjaGFuZ2VkLCAzNjkgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0p DQoNCmRpZmYgLS1naXQgYS9jb25mLmMgYi9jb25mLmMNCmluZGV4IGZhZjI2ODEuLmU1ZjExMDgg MTAwNjQ0DQotLS0gYS9jb25mLmMNCisrKyBiL2NvbmYuYw0KQEAgLTQ3LDYgKzQ3LDcgQEANCiAj aW5jbHVkZSAibGluZXJlYWQuaCINCiAjaW5jbHVkZSAiaXNvbGF0aW9uLmgiDQogI2luY2x1ZGUg ImxvZy5oIg0KKyNpbmNsdWRlICJkaGNwLmgiDQogI2luY2x1ZGUgInZob3N0X3VzZXIuaCINCiAj aW5jbHVkZSAiZXBvbGxfY3RsLmgiDQogI2luY2x1ZGUgImNvbmYuaCINCkBAIC02MzIsNyArNjMz LDggQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbmFtZSwgRklMRSAqZiwgaW50IHN0 YXR1cykNCiAJCSIgIC1TLCAtLXNlYXJjaCBMSVNUCVNwYWNlLXNlcGFyYXRlZCBsaXN0LCBzZWFy Y2ggZG9tYWluc1xuIg0KIAkJIiAgICBhIHNpbmdsZSwgZW1wdHkgb3B0aW9uIGRpc2FibGVzIHRo ZSBETlMgc2VhcmNoIGxpc3RcbiINCiAJCSIgIC1ILCAtLWhvc3RuYW1lIE5BTUUgCUhvc3RuYW1l IHRvIGNvbmZpZ3VyZSBjbGllbnQgd2l0aFxuIg0KLQkJIiAgLS1mcWRuIE5BTUUJCUZRRE4gdG8g Y29uZmlndXJlIGNsaWVudCB3aXRoXG4iKTsNCisJCSIgIC0tZnFkbiBOQU1FCQlGUUROIHRvIGNv bmZpZ3VyZSBjbGllbnQgd2l0aFxuIg0KKwkJIiAgLS1kaGNwLW9wdCBDT0RFLFZBTAlTZXQgREhD UCBvcHRpb24gQ09ERSB0byBWQUxcbiIpOw0KIAlpZiAoc3Ryc3RyKG5hbWUsICJwYXN0YSIpKQ0K IAkJRlBSSU5URihmLCAiICAgIGRlZmF1bHQ6IGRvbid0IHVzZSBhbnkgc2VhcmNoIGxpc3RcbiIp Ow0KIAllbHNlDQpAQCAtODYwLDYgKzg2Miw5IEBAIHN0YXRpYyB2b2lkIGNvbmZfcHJpbnQoY29u c3Qgc3RydWN0IGN0eCAqYykNCiAJCQlpbmZvKCIgICAgcm91dGVyOiAlcyIsDQogCQkJICAgICBp bmV0X250b3AoQUZfSU5FVCwgJmMtPmlwNC5ndWVzdF9ndywNCiAJCQkJICAgICAgIGJ1Ziwgc2l6 ZW9mKGJ1ZikpKTsNCisJCQlmb3IgKGkgPSAxOyBpIDwgMjU1OyBpKyspDQorCQkJCWlmIChkaGNw X29wdF90b19zdHIoaSwgYnVmLCBzaXplb2YoYnVmKSkpDQorCQkJCQlpbmZvKCIgICAgb3B0aW9u ICV1OiAlcyIsIGksIGJ1Zik7DQogCQl9DQogDQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShjLT5pcDQuZG5zKTsgaSsrKSB7DQpAQCAtMTM0OCw2ICsxMzUzLDcgQEAgdm9pZCBjb25mKHN0 cnVjdCBjdHggKmMsIGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsic3RhdHMiLCByZXF1aXJl ZF9hcmd1bWVudCwJCU5VTEwsCQkzMSB9LA0KIAkJeyJjb25mLXBhdGgiLAlyZXF1aXJlZF9hcmd1 bWVudCwJTlVMTCwJCSdjJyB9LA0KIAkJeyJjaHJvb3QtZmFsbGJhY2siLCBub19hcmd1bWVudCwJ TlVMTCwgCQkzMiB9LA0KKwkJeyJkaGNwLW9wdCIsIHJlcXVpcmVkX2FyZ3VtZW50LAkJTlVMTCwJ CTM0IH0sDQogCQl7IDAgfSwNCiAJfTsNCiAJY29uc3QgY2hhciAqb3B0c3RyaW5nID0gIitkcWZl bDpoczpjOkY6STpwOlA6bTphOm46TTpnOmk6bzpEOlM6SDo0NjF0OnU6VDpVOiI7DQpAQCAtMTU4 OSw2ICsxNTk1LDI0IEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogCQljYXNlIDMyOg0KIAkJCWMtPmNocm9vdF9mYWxsYmFjayA9IHRydWU7DQogCQkJ YnJlYWs7DQorCQljYXNlIDM0OiB7DQorCQkJdW5zaWduZWQgbG9uZyBvcHRjb2RlOw0KKw0KKwkJ CXAgPSBvcHRhcmc7DQorDQorCQkJaWYgKCFwYXJzZV91bnNpZ25lZCgmcCwgMCwgJm9wdGNvZGUp IHx8DQorCQkJICAgICFwYXJzZV9saXRlcmFsKCZwLCAiLCIpKSB7DQorCQkJCWRpZSgiLS1kaGNw LW9wdCByZXF1aXJlcyBDT0RFLFZBTFVFIGZvcm1hdCIpOw0KKwkJCX0NCisNCisJCQlpZiAob3B0 Y29kZSA8IDEgfHwgb3B0Y29kZSA+IDI1NCkgew0KKwkJCQlkaWUoIkRIQ1Agb3B0aW9uIGNvZGUg bXVzdCBiZSAxLTI1NDogJXMiLA0KKwkJCQkgICAgb3B0YXJnKTsNCisJCQl9DQorDQorCQkJZGhj cF9zZXRfb3B0KG9wdGNvZGUsIHApOw0KKwkJCWJyZWFrOw0KKwkJfQ0KIAkJY2FzZSAnZCc6DQog CQkJYy0+ZGVidWcgPSAxOw0KIAkJCWMtPnF1aWV0ID0gMDsNCmRpZmYgLS1naXQgYS9kaGNwLmMg Yi9kaGNwLmMNCmluZGV4IDAyYzc3NDQuLjQzY2UxMzMgMTAwNjQ0DQotLS0gYS9kaGNwLmMNCisr KyBiL2RoY3AuYw0KQEAgLTIzLDYgKzIzLDcgQEANCiAjaW5jbHVkZSA8dW5pc3RkLmg+DQogI2lu Y2x1ZGUgPHN0cmluZy5oPg0KICNpbmNsdWRlIDxsaW1pdHMuaD4NCisjaW5jbHVkZSA8ZXJybm8u aD4NCiANCiAjaW5jbHVkZSAidXRpbC5oIg0KICNpbmNsdWRlICJpcC5oIg0KQEAgLTMyLDE1ICsz MywxOCBAQA0KICNpbmNsdWRlICJ0YXAuaCINCiAjaW5jbHVkZSAibG9nLmgiDQogI2luY2x1ZGUg ImRoY3AuaCINCisjaW5jbHVkZSAicGFyc2UuaCINCiANCiAvKioNCiAgKiBlbnVtIG9wdF9zdGF0 ZSAtIERIQ1Agb3B0aW9uIHN0YXRlDQogICogQE9QVF9VTlNFVDoJCU9wdGlvbiBub3QgY29uZmln dXJlZA0KICAqIEBPUFRfREVGQVVMVDoJT3B0aW9uIGRlcml2ZWQgZnJvbSBob3N0IGNvbmZpZ3Vy YXRpb24NCisgKiBAT1BUX1VTRVI6CQlPcHRpb24gc2V0IHZpYSAtLWRoY3Atb3B0IGNvbW1hbmQg bGluZQ0KICAqLw0KIGVudW0gb3B0X3N0YXRlIHsNCiAJT1BUX1VOU0VUID0gMCwNCiAJT1BUX0RF RkFVTFQsDQorCU9QVF9VU0VSLA0KIH07DQogDQogLyoqDQpAQCAtNTAsNyArNTQsNyBAQCBlbnVt IG9wdF9zdGF0ZSB7DQogICogQHM6CQlPcHRpb24gcGF5bG9hZCBmcm9tIHNlcnZlcg0KICAqIEBj bGVuOglMZW5ndGggb2Ygb3B0aW9uIHJlY2VpdmVkIGZyb20gY2xpZW50LCAtMSBpZiBub3QgcmVj ZWl2ZWQNCiAgKiBAYzoJCU9wdGlvbiBwYXlsb2FkIGZyb20gY2xpZW50DQotICogQHN0YXRlOglP cHRpb24gc3RhdGUgKHVuc2V0IG9yIGRlZmF1bHQpDQorICogQHN0YXRlOglPcHRpb24gc3RhdGUg KHVuc2V0LCBkZWZhdWx0LCBvciB1c2VyKQ0KICAqLw0KIHN0cnVjdCBvcHQgew0KIAlpbnQgc2Vu dDsNCkBAIC04NSwxNyArODksMjQgQEAgc3RhdGljIHN0cnVjdCBvcHQgb3B0c1syNTZdOw0KICAq Lw0KIHZvaWQgZGhjcF9pbml0KHZvaWQpDQogew0KLQkvKiBNYXNrICovDQotCW9wdHNbMV0gID0g KHN0cnVjdCBvcHQpIHsgMCwgNCwgeyAgMCB9LCAwLCB7IDAgfSwgT1BUX0RFRkFVTFQsIH07DQot CS8qIFJvdXRlciAqLw0KLQlvcHRzWzNdICA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDQsIHsgIDAgfSwg MCwgeyAwIH0sIE9QVF9ERUZBVUxULCB9Ow0KLQkvKiBMZWFzZSB0aW1lICovDQotCW9wdHNbNTFd ID0gKHN0cnVjdCBvcHQpIHsgMCwgNCwgeyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sDQotCQkJ CQkJICAgICAgIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwlpbnQgaTsNCisNCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUob3B0cyk7IGkrKykNCisJCWlmIChvcHRzW2ldLnN0YXRlICE9 IE9QVF9VU0VSKQ0KKwkJCW9wdHNbaV0uc3RhdGUgPSBPUFRfVU5TRVQ7DQorDQorCWlmIChvcHRz WzFdLnN0YXRlICE9IE9QVF9VU0VSKQkJCS8qIE1hc2sgKi8NCisJCW9wdHNbMV0gPSAoc3RydWN0 IG9wdCkgeyAwLCA0LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwlpZiAob3B0 c1szXS5zdGF0ZSAhPSBPUFRfVVNFUikJCQkvKiBSb3V0ZXIgKi8NCisJCW9wdHNbM10gPSAoc3Ry dWN0IG9wdCkgeyAwLCA0LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwlpZiAo b3B0c1s1MV0uc3RhdGUgIT0gT1BUX1VTRVIpCQkJLyogTGVhc2UgdGltZSAqLw0KKwkJb3B0c1s1 MV0gPSAoc3RydWN0IG9wdCkgeyAwLCA0LCB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwNCisJ CQkJCSAgICAgICAwLCB7IDAgfSwgT1BUX0RFRkFVTFQgfTsNCiAJLyogVHlwZSAqLw0KLQlvcHRz WzUzXSA9IChzdHJ1Y3Qgb3B0KSB7IDAsIDEsIHsgIDAgfSwgMCwgeyAwIH0sIE9QVF9ERUZBVUxU LCB9Ow0KLQkvKiBTZXJ2ZXIgSUQgKi8NCi0Jb3B0c1s1NF0gPSAoc3RydWN0IG9wdCkgeyAwLCA0 LCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCwgfTsNCisJb3B0c1s1M10gPSAoc3RydWN0 IG9wdCkgeyAwLCAxLCB7ICAwIH0sIDAsIHsgMCB9LCBPUFRfREVGQVVMVCB9Ow0KKwlpZiAob3B0 c1s1NF0uc3RhdGUgIT0gT1BUX1VTRVIpCQkJLyogU2VydmVyIElEICovDQorCQlvcHRzWzU0XSA9 IChzdHJ1Y3Qgb3B0KSB7IDAsIDQsIHsgIDAgfSwgMCwgeyAwIH0sDQorCQkJCQkJCU9QVF9ERUZB VUxUIH07DQogfQ0KIA0KIC8qKg0KQEAgLTE0MCw2ICsxNTEsMjU4IEBAIHN0cnVjdCBtc2cgew0K IAl1aW50OF90IG9bT1BUX01BWCArIDEgLyogRW5kIG9wdGlvbiAqLyBdOw0KIH0gX19hdHRyaWJ1 dGVfXygoX19wYWNrZWRfXykpOw0KIA0KKy8qKg0KKyAqIGVudW0gZGhjcF9vcHRfdHlwZSAtIERI Q1Agb3B0aW9uIHZhbHVlIHR5cGVzIHBlciBSRkMgMjEzMg0KKyAqIEBESENQX09QVF9OT05FOglV bnN1cHBvcnRlZCBvciB1bmtub3duIG9wdGlvbg0KKyAqIEBESENQX09QVF9TVFI6CVZhcmlhYmxl LWxlbmd0aCBzdHJpbmcNCisgKiBAREhDUF9PUFRfSVBWNDoJU2luZ2xlIElQdjQgYWRkcmVzcw0K KyAqIEBESENQX09QVF9JUFY0X0xJU1Q6CU11bHRpcGxlIElQdjQgYWRkcmVzc2VzLCBjb21tYS1z ZXBhcmF0ZWQNCisgKiBAREhDUF9PUFRfVUlOVDg6CVVuc2lnbmVkIDgtYml0IGludGVnZXINCisg KiBAREhDUF9PUFRfVUlOVDE2OglVbnNpZ25lZCAxNi1iaXQgaW50ZWdlcg0KKyAqIEBESENQX09Q VF9VSU5UMzI6CVVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyDQorICogQERIQ1BfT1BUX0lOVDMyOglT aWduZWQgMzItYml0IGludGVnZXINCisgKi8NCitlbnVtIGRoY3Bfb3B0X3R5cGUgew0KKwlESENQ X09QVF9OT05FLA0KKwlESENQX09QVF9TVFIsDQorCURIQ1BfT1BUX0lQVjQsDQorCURIQ1BfT1BU X0lQVjRfTElTVCwNCisJREhDUF9PUFRfVUlOVDgsDQorCURIQ1BfT1BUX1VJTlQxNiwNCisJREhD UF9PUFRfVUlOVDMyLA0KKwlESENQX09QVF9JTlQzMiwNCit9Ow0KKw0KKy8qKg0KKyAqIGRoY3Bf b3B0X3R5cGVzIC0gTWFwcyBvcHRpb24gY29kZSB0byBSRkMgMjEzMiB2YWx1ZSB0eXBlLCBpbmRl eGVkIGJ5IGNvZGUNCisgKi8NCitzdGF0aWMgY29uc3QgZW51bSBkaGNwX29wdF90eXBlIGRoY3Bf b3B0X3R5cGVzW10gPSB7DQorCVsxXSAgID0gREhDUF9PUFRfSVBWNCwJCS8qIFN1Ym5ldCBNYXNr ICovDQorCVsyXSAgID0gREhDUF9PUFRfSU5UMzIsCQkvKiBUaW1lIE9mZnNldCAqLw0KKwlbM10g ICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogUm91dGVyICovDQorCVs0XSAgID0gREhDUF9PUFRf SVBWNF9MSVNULAkvKiBUaW1lIFNlcnZlciAqLw0KKwlbNV0gICA9IERIQ1BfT1BUX0lQVjRfTElT VCwJLyogTmFtZSBTZXJ2ZXIgKi8NCisJWzZdICAgPSBESENQX09QVF9JUFY0X0xJU1QsCS8qIERv bWFpbiBOYW1lIFNlcnZlciAqLw0KKwlbN10gICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogTG9n IFNlcnZlciAqLw0KKwlbOF0gICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogQ29va2llIFNlcnZl ciAqLw0KKwlbOV0gICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogTFBSIFNlcnZlciAqLw0KKwlb MTBdICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogSW1wcmVzcyBTZXJ2ZXIgKi8NCisJWzExXSAg PSBESENQX09QVF9JUFY0X0xJU1QsCS8qIFJlc291cmNlIExvY2F0aW9uIFNlcnZlciAqLw0KKwlb MTJdICA9IERIQ1BfT1BUX1NUUiwJCS8qIEhvc3QgTmFtZSAqLw0KKwlbMTNdICA9IERIQ1BfT1BU X1VJTlQxNiwJLyogQm9vdCBGaWxlIFNpemUgKi8NCisJWzE1XSAgPSBESENQX09QVF9TVFIsCQkv KiBEb21haW4gTmFtZSAqLw0KKwlbMTZdICA9IERIQ1BfT1BUX0lQVjQsCQkvKiBTd2FwIFNlcnZl ciAqLw0KKwlbMTddICA9IERIQ1BfT1BUX1NUUiwJCS8qIFJvb3QgUGF0aCAqLw0KKwlbMTldICA9 IERIQ1BfT1BUX1VJTlQ4LAkJLyogSVAgRm9yd2FyZGluZyAqLw0KKwlbMjNdICA9IERIQ1BfT1BU X1VJTlQ4LAkJLyogRGVmYXVsdCBJUCBUVEwgKi8NCisJWzI2XSAgPSBESENQX09QVF9VSU5UMTYs CS8qIEludGVyZmFjZSBNVFUgKi8NCisJWzI4XSAgPSBESENQX09QVF9JUFY0LAkJLyogQnJvYWRj YXN0IEFkZHJlc3MgKi8NCisJWzM3XSAgPSBESENQX09QVF9VSU5UOCwJCS8qIFRDUCBEZWZhdWx0 IFRUTCAqLw0KKwlbMzhdICA9IERIQ1BfT1BUX1VJTlQzMiwJLyogVENQIEtlZXBhbGl2ZSBJbnRl cnZhbCAqLw0KKwlbNDBdICA9IERIQ1BfT1BUX1NUUiwJCS8qIE5JUyBEb21haW4gTmFtZSAqLw0K KwlbNDFdICA9IERIQ1BfT1BUX0lQVjRfTElTVCwJLyogTklTIFNlcnZlcnMgKi8NCisJWzQyXSAg PSBESENQX09QVF9JUFY0X0xJU1QsCS8qIE5UUCBTZXJ2ZXJzICovDQorCVs0NF0gID0gREhDUF9P UFRfSVBWNF9MSVNULAkvKiBOZXRCSU9TIE5hbWUgU2VydmVyICovDQorCVs1MF0gID0gREhDUF9P UFRfSVBWNCwJCS8qIFJlcXVlc3RlZCBJUCBBZGRyZXNzICovDQorCVs1MV0gID0gREhDUF9PUFRf VUlOVDMyLAkvKiBJUCBBZGRyZXNzIExlYXNlIFRpbWUgKi8NCisJWzU0XSAgPSBESENQX09QVF9J UFY0LAkJLyogU2VydmVyIElkZW50aWZpZXIgKi8NCisJWzU3XSAgPSBESENQX09QVF9VSU5UMTYs CS8qIE1heCBESENQIE1lc3NhZ2UgU2l6ZSAqLw0KKwlbNThdICA9IERIQ1BfT1BUX1VJTlQzMiwJ LyogUmVuZXdhbCAoVDEpIFRpbWUgKi8NCisJWzU5XSAgPSBESENQX09QVF9VSU5UMzIsCS8qIFJl YmluZGluZyAoVDIpIFRpbWUgKi8NCisJWzYwXSAgPSBESENQX09QVF9TVFIsCQkvKiBWZW5kb3Ig Q2xhc3MgSWRlbnRpZmllciAqLw0KKwlbNjZdICA9IERIQ1BfT1BUX1NUUiwJCS8qIFRGVFAgU2Vy dmVyIE5hbWUgKi8NCisJWzY3XSAgPSBESENQX09QVF9TVFIsCQkvKiBCb290ZmlsZSBOYW1lICov DQorCVsyNTJdID0gREhDUF9PUFRfU1RSLAkJLyogV1BBRCBVUkwgKi8NCit9Ow0KKw0KKy8qKg0K KyAqIGRoY3Bfb3B0X3BhcnNlKCkgLSBQYXJzZSBhIERIQ1Agb3B0aW9uIHZhbHVlDQorICogQGNv ZGU6CURIQ1Agb3B0aW9uIGNvZGUNCisgKiBAc3RyOglWYWx1ZSBzdHJpbmcgZnJvbSBjb21tYW5k IGxpbmUNCisgKiBAYnVmOglPdXRwdXQgYnVmZmVyIGZvciBiaW5hcnkgdmFsdWUNCisgKiBAYnVm X2xlbjoJU2l6ZSBvZiBvdXRwdXQgYnVmZmVyDQorICoNCisgKiBSZXR1cm46IG51bWJlciBvZiBi eXRlcyB3cml0dGVuIHRvIEBidWYsIG9yIC0xIG9uIGVycm9yDQorICovDQorc3RhdGljIGludCBk aGNwX29wdF9wYXJzZSh1aW50OF90IGNvZGUsIGNvbnN0IGNoYXIgKnN0ciwNCisJCQkgIHVpbnQ4 X3QgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pDQorew0KKwllbnVtIGRoY3Bfb3B0X3R5cGUgdHlwZTsN CisJdW5zaWduZWQgbG9uZyB2YWw7DQorCXVpbnQ4X3Qgd2lkdGg7DQorCXNpemVfdCBzbGVuOw0K KwlzaXplX3QgbGVuOw0KKwljaGFyICplbmQ7DQorDQorCWlmIChjb2RlID49IEFSUkFZX1NJWkUo ZGhjcF9vcHRfdHlwZXMpKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwl0eXBlID0gZGhjcF9vcHRfdHlw ZXNbY29kZV07DQorDQorCWlmICghKnN0cikNCisJCXJldHVybiAtMTsNCisNCisJc3dpdGNoICh0 eXBlKSB7DQorCWNhc2UgREhDUF9PUFRfTk9ORToNCisJCXJldHVybiAtMTsNCisJY2FzZSBESENQ X09QVF9JUFY0Og0KKwljYXNlIERIQ1BfT1BUX0lQVjRfTElTVDoNCisJCWxlbiA9IDA7DQorDQor CQlkbyB7DQorCQkJaWYgKGxlbiArIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikgPiBidWZfbGVuKQ0K KwkJCQlyZXR1cm4gLTE7DQorDQorCQkJaWYgKCFwYXJzZV9pcHY0KCZzdHIsDQorCQkJCQkoc3Ry dWN0IGluX2FkZHIgKikoYnVmICsgbGVuKSkpDQorCQkJCXJldHVybiAtMTsNCisNCisJCQlsZW4g Kz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsNCisNCisJCQlpZiAodHlwZSA9PSBESENQX09QVF9J UFY0KQ0KKwkJCQlicmVhazsNCisJCX0gd2hpbGUgKHBhcnNlX2xpdGVyYWwoJnN0ciwgIiwiKSk7 DQorDQorCQlpZiAoIWxlbiB8fCAhcGFyc2VfZW9pKHN0cikpDQorCQkJcmV0dXJuIC0xOw0KKw0K KwkJcmV0dXJuIGxlbjsNCisJY2FzZSBESENQX09QVF9VSU5UODoNCisJY2FzZSBESENQX09QVF9V SU5UMTY6DQorCWNhc2UgREhDUF9PUFRfVUlOVDMyOg0KKwljYXNlIERIQ1BfT1BUX0lOVDMyOg0K KwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfVUlOVDgpDQorCQkJd2lkdGggPSAxOw0KKwkJZWxzZSBp ZiAodHlwZSA9PSBESENQX09QVF9VSU5UMTYpDQorCQkJd2lkdGggPSAyOw0KKwkJZWxzZQ0KKwkJ CXdpZHRoID0gNDsNCisNCisJCWlmIChidWZfbGVuIDwgd2lkdGgpDQorCQkJcmV0dXJuIC0xOw0K Kw0KKwkJZXJybm8gPSAwOw0KKwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfSU5UMzIpIHsNCisJCQls b25nIHN2YWw7DQorDQorCQkJc3ZhbCA9IHN0cnRvbChzdHIsICZlbmQsIDApOw0KKwkJCWlmICgq ZW5kIHx8IGVycm5vIHx8DQorCQkJICAgIHN2YWwgPCBJTlQzMl9NSU4gfHwgc3ZhbCA+IElOVDMy X01BWCkNCisJCQkJcmV0dXJuIC0xOw0KKwkJCXZhbCA9ICh1aW50MzJfdClzdmFsOw0KKwkJfSBl bHNlIHsNCisJCQl2YWwgPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMCk7DQorCQkJaWYgKCplbmQgfHwg ZXJybm8gfHwNCisJCQkgICAgdmFsID49ICgxVUxMIDw8ICh3aWR0aCAqIDgpKSkNCisJCQkJcmV0 dXJuIC0xOw0KKwkJfQ0KKw0KKwkJaWYgKHR5cGUgPT0gREhDUF9PUFRfVUlOVDE2KQ0KKwkJCSoo dWludDE2X3QgKilidWYgPSBodG9ucyh2YWwpOw0KKwkJZWxzZSBpZiAodHlwZSA9PSBESENQX09Q VF9VSU5UMzIgfHwNCisJCQkgdHlwZSA9PSBESENQX09QVF9JTlQzMikNCisJCQkqKHVpbnQzMl90 ICopYnVmID0gaHRvbmwodmFsKTsNCisJCWVsc2UNCisJCQlidWZbMF0gPSB2YWw7DQorDQorCQly ZXR1cm4gd2lkdGg7DQorCWNhc2UgREhDUF9PUFRfU1RSOg0KKwkJc2xlbiA9IHN0cmxlbihzdHIp Ow0KKw0KKwkJaWYgKHNsZW4gPj0gYnVmX2xlbikNCisJCQlyZXR1cm4gLTE7DQorDQorCQltZW1j cHkoYnVmLCBzdHIsIHNsZW4pOw0KKw0KKwkJcmV0dXJuIHNsZW47DQorCX0NCisNCisJcmV0dXJu IC0xOw0KK30NCisNCisvKioNCisgKiBkaGNwX3NldF9vcHQoKSAtIFBhcnNlIGFuZCBzdG9yZSBh IHVzZXItc3BlY2lmaWVkIERIQ1Agb3B0aW9uDQorICogQGNvZGU6CURIQ1Agb3B0aW9uIGNvZGUN CisgKiBAdmFsX3N0cjoJVmFsdWUgc3RyaW5nIGZyb20gY29tbWFuZCBsaW5lDQorICovDQordm9p ZCBkaGNwX3NldF9vcHQodWludDhfdCBjb2RlLCBjb25zdCBjaGFyICp2YWxfc3RyKQ0KK3sNCisJ aW50IHJldDsNCisNCisJcmV0ID0gZGhjcF9vcHRfcGFyc2UoY29kZSwgdmFsX3N0ciwgb3B0c1tj b2RlXS5zLCBzaXplb2Yob3B0c1tjb2RlXS5zKSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZGllKCJJ bnZhbGlkIHZhbHVlIGZvciBESENQIG9wdGlvbiAldTogJXMiLCBjb2RlLCB2YWxfc3RyKTsNCisN CisJb3B0c1tjb2RlXS5zbGVuID0gcmV0Ow0KKwlvcHRzW2NvZGVdLnN0YXRlID0gT1BUX1VTRVI7 DQorfQ0KKw0KKy8qKg0KKyAqIGRoY3Bfb3B0X3RvX3N0cigpIC0gUmVuZGVyIGEgYmluYXJ5IERI Q1Agb3B0aW9uIHZhbHVlIHRvIGEgcHJpbnRhYmxlIHN0cmluZw0KKyAqIEBjb2RlOglESENQIG9w dGlvbiBjb2RlDQorICogQGJ1ZjoJT3V0cHV0IHN0cmluZyBidWZmZXINCisgKiBAYnVmX2xlbjoJ U2l6ZSBvZiBvdXRwdXQgYnVmZmVyDQorICoNCisgKiBSZXR1cm46IHBvaW50ZXIgdG8gQGJ1ZiBp ZiBvcHRpb24gaXMgc2V0LCBOVUxMIG90aGVyd2lzZQ0KKyAqLw0KK2NvbnN0IGNoYXIgKmRoY3Bf b3B0X3RvX3N0cih1aW50OF90IGNvZGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pDQorew0K KwllbnVtIGRoY3Bfb3B0X3R5cGUgdHlwZTsNCisJdW5zaWduZWQgaW50IGk7DQorCWludCBvZmYg PSAwOw0KKw0KKwlpZiAob3B0c1tjb2RlXS5zdGF0ZSA9PSBPUFRfVU5TRVQpDQorCQlyZXR1cm4g TlVMTDsNCisNCisJYXNzZXJ0KGNvZGUgPCBBUlJBWV9TSVpFKGRoY3Bfb3B0X3R5cGVzKSk7DQor DQorCXR5cGUgPSBkaGNwX29wdF90eXBlc1tjb2RlXTsNCisNCisJc3dpdGNoICh0eXBlKSB7DQor CWNhc2UgREhDUF9PUFRfSVBWNDoNCisJY2FzZSBESENQX09QVF9JUFY0X0xJU1Q6DQorCQlmb3Ig KGkgPSAwOyBpICsgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSA8PSAodW5zaWduZWQgaW50KW9wdHNb Y29kZV0uc2xlbjsNCisJCSAgICAgaSArPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7DQorCQkJ aWYgKG9mZikNCisJCQkJb2ZmICs9IHNucHJpbnRmKGJ1ZiArIG9mZiwgYnVmX2xlbiAtIG9mZiwg IiwiKTsNCisJCQlpbmV0X250b3AoQUZfSU5FVCwgb3B0c1tjb2RlXS5zICsgaSwNCisJCQkJICBi dWYgKyBvZmYsIGJ1Zl9sZW4gLSBvZmYpOw0KKwkJCW9mZiA9IHN0cmxlbihidWYpOw0KKwkJfQ0K KwkJcmV0dXJuIGJ1ZjsNCisJY2FzZSBESENQX09QVF9VSU5UODoNCisJY2FzZSBESENQX09QVF9V SU5UMTY6DQorCWNhc2UgREhDUF9PUFRfVUlOVDMyOiB7DQorCQl1bnNpZ25lZCB2YWwgPSAwOw0K KwkJaW50IGo7DQorDQorCQlmb3IgKGogPSAwOyBqIDwgb3B0c1tjb2RlXS5zbGVuOyBqKyspDQor CQkJdmFsID0gKHZhbCA8PCA4KSB8IG9wdHNbY29kZV0uc1tqXTsNCisNCisJCWlmIChzbnByaW50 ZihidWYsIGJ1Zl9sZW4sICIldSIsIHZhbCkgPj0gKGludClidWZfbGVuKQ0KKwkJCXJldHVybiBO VUxMOw0KKwkJcmV0dXJuIGJ1ZjsNCisJfQ0KKwljYXNlIERIQ1BfT1BUX0lOVDMyOiB7DQorCQlp bnQgdmFsID0gMDsNCisJCWludCBqOw0KKw0KKwkJZm9yIChqID0gMDsgaiA8IG9wdHNbY29kZV0u c2xlbjsgaisrKQ0KKwkJCXZhbCA9ICh2YWwgPDwgOCkgfCBvcHRzW2NvZGVdLnNbal07DQorDQor CQlpZiAoc25wcmludGYoYnVmLCBidWZfbGVuLCAiJWQiLCB2YWwpID49IChpbnQpYnVmX2xlbikN CisJCQlyZXR1cm4gTlVMTDsNCisJCXJldHVybiBidWY7DQorCX0NCisJY2FzZSBESENQX09QVF9T VFI6DQorCQkodm9pZClzbnByaW50ZihidWYsIGJ1Zl9sZW4sICIlLipzIiwNCisJCQkgICAgICAg b3B0c1tjb2RlXS5zbGVuLCBvcHRzW2NvZGVdLnMpOw0KKwkJcmV0dXJuIGJ1ZjsNCisJZGVmYXVs dDoNCisJCWFzc2VydCgwKTsNCisJfQ0KK30NCisNCiAvKioNCiAgKiBmaWxsX29uZSgpIC0gRmls bCBhIHNpbmdsZSBvcHRpb24gaW50byBhIGJ1ZmZlcg0KICAqIEBidWY6CUJ1ZmZlciB0byB3cml0 ZSBvcHRpb24NCkBAIC00NzQsMTQgKzczNywyMCBAQCBpbnQgZGhjcChjb25zdCBzdHJ1Y3QgY3R4 ICpjLCBzdHJ1Y3QgaW92X3RhaWwgKmRhdGEpDQogCWluZm8oIiAgICBmcm9tICVzIiwgZXRoX250 b3AobS0+Y2hhZGRyLCBtYWNzdHIsIHNpemVvZihtYWNzdHIpKSk7DQogDQogCW1hc2suc19hZGRy ID0gaHRvbmwoMHhmZmZmZmZmZiA8PCAoMzIgLSBjLT5pcDQucHJlZml4X2xlbikpOw0KLQltZW1j cHkob3B0c1sxXS5zLCAgJm1hc2ssICAgICAgICAgICAgICAgIHNpemVvZihtYXNrKSk7DQotCW1l bWNweShvcHRzWzNdLnMsICAmYy0+aXA0Lmd1ZXN0X2d3LCAgICAgc2l6ZW9mKGMtPmlwNC5ndWVz dF9ndykpOw0KLQltZW1jcHkob3B0c1s1NF0ucywgJmMtPmlwNC5vdXJfdGFwX2FkZHIsIHNpemVv ZihjLT5pcDQub3VyX3RhcF9hZGRyKSk7DQorCWlmIChvcHRzWzFdLnN0YXRlICE9IE9QVF9VU0VS KQ0KKwkJbWVtY3B5KG9wdHNbMV0ucywgJm1hc2ssIHNpemVvZihtYXNrKSk7DQorCWlmIChvcHRz WzNdLnN0YXRlICE9IE9QVF9VU0VSKQ0KKwkJbWVtY3B5KG9wdHNbM10ucywgJmMtPmlwNC5ndWVz dF9ndywgc2l6ZW9mKGMtPmlwNC5ndWVzdF9ndykpOw0KKwlpZiAob3B0c1s1NF0uc3RhdGUgIT0g T1BUX1VTRVIpIHsNCisJCW1lbWNweShvcHRzWzU0XS5zLCAmYy0+aXA0Lm91cl90YXBfYWRkciwN CisJCSAgICAgICBzaXplb2YoYy0+aXA0Lm91cl90YXBfYWRkcikpOw0KKwl9DQogDQogCS8qIElm IHRoZSBnYXRld2F5IGlzIG5vdCBvbiB0aGUgYXNzaWduZWQgc3VibmV0LCBzZW5kIGFuIG9wdGlv biAxMjENCiAJICogKENsYXNzbGVzcyBTdGF0aWMgUm91dGluZykgYWRkaW5nIGEgZHVtbXkgcm91 dGUgdG8gaXQuDQogCSAqLw0KLQlpZiAoKGMtPmlwNC5hZGRyLnNfYWRkciAmIG1hc2suc19hZGRy KQ0KKwlpZiAob3B0c1sxMjFdLnN0YXRlICE9IE9QVF9VU0VSICYmDQorCSAgICAoYy0+aXA0LmFk ZHIuc19hZGRyICYgbWFzay5zX2FkZHIpDQogCSAgICAhPSAoYy0+aXA0Lmd1ZXN0X2d3LnNfYWRk ciAmIG1hc2suc19hZGRyKSkgew0KIAkJLyogYS5iLmMuZC8zMjowLjAuMC4wLCAwOmEuYi5jLmQg Ki8NCiAJCW9wdHNbMTIxXS5zbGVuID0gMTQ7DQpAQCAtNDkzLDI3ICs3NjIsMzEgQEAgaW50IGRo Y3AoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IGlvdl90YWlsICpkYXRhKQ0KIAkJICAgICAg ICZjLT5pcDQuZ3Vlc3RfZ3csIHNpemVvZihjLT5pcDQuZ3Vlc3RfZ3cpKTsNCiAJfQ0KIA0KLQlp ZiAoYy0+bXR1KSB7DQorCWlmIChvcHRzWzI2XS5zdGF0ZSAhPSBPUFRfVVNFUiAmJiBjLT5tdHUp IHsNCiAJCW9wdHNbMjZdLnNsZW4gPSAyOw0KIAkJb3B0c1syNl0uc3RhdGUgPSBPUFRfREVGQVVM VDsNCiAJCW9wdHNbMjZdLnNbMF0gPSBjLT5tdHUgLyAyNTY7DQogCQlvcHRzWzI2XS5zWzFdID0g Yy0+bXR1ICUgMjU2Ow0KIAl9DQogDQotCWZvciAoaSA9IDAsIG9wdHNbNl0uc2xlbiA9IDA7DQot CSAgICAgIWMtPm5vX2RoY3BfZG5zICYmIGkgPCBBUlJBWV9TSVpFKGMtPmlwNC5kbnMpOyBpKysp IHsNCi0JCWlmIChJTjRfSVNfQUREUl9VTlNQRUNJRklFRCgmYy0+aXA0LmRuc1tpXSkpDQotCQkJ YnJlYWs7DQotCQkoKHN0cnVjdCBpbl9hZGRyICopb3B0c1s2XS5zKVtpXSA9IGMtPmlwNC5kbnNb aV07DQotCQlvcHRzWzZdLnNsZW4gKz0gc2l6ZW9mKHVpbnQzMl90KTsNCisJaWYgKG9wdHNbNl0u c3RhdGUgIT0gT1BUX1VTRVIpIHsNCisJCW9wdHNbNl0uc2xlbiA9IDA7DQorCQlmb3IgKGkgPSAw Ow0KKwkJICAgICAhYy0+bm9fZGhjcF9kbnMgJiYgaSA8IEFSUkFZX1NJWkUoYy0+aXA0LmRucyk7 DQorCQkgICAgIGkrKykgew0KKwkJCWlmIChJTjRfSVNfQUREUl9VTlNQRUNJRklFRCgmYy0+aXA0 LmRuc1tpXSkpDQorCQkJCWJyZWFrOw0KKwkJCSgoc3RydWN0IGluX2FkZHIgKilvcHRzWzZdLnMp W2ldID0gYy0+aXA0LmRuc1tpXTsNCisJCQlvcHRzWzZdLnNsZW4gKz0gc2l6ZW9mKHVpbnQzMl90 KTsNCisJCX0NCisJCWlmIChvcHRzWzZdLnNsZW4pDQorCQkJb3B0c1s2XS5zdGF0ZSA9IE9QVF9E RUZBVUxUOw0KKwkJZWxzZQ0KKwkJCW9wdHNbNl0uc3RhdGUgPSBPUFRfVU5TRVQ7DQogCX0NCi0J aWYgKG9wdHNbNl0uc2xlbikNCi0JCW9wdHNbNl0uc3RhdGUgPSBPUFRfREVGQVVMVDsNCi0JZWxz ZQ0KLQkJb3B0c1s2XS5zdGF0ZSA9IE9QVF9VTlNFVDsNCiANCiAJb3B0X2xlbiA9IHN0cmxlbihj LT5ob3N0bmFtZSk7DQotCWlmIChvcHRfbGVuID4gMCkgew0KKwlpZiAob3B0c1sxMl0uc3RhdGUg IT0gT1BUX1VTRVIgJiYgb3B0X2xlbiA+IDApIHsNCiAJCW9wdHNbMTJdLnNsZW4gPSBvcHRfbGVu Ow0KIAkJb3B0c1sxMl0uc3RhdGUgPSBPUFRfREVGQVVMVDsNCiAJCW1lbWNweShvcHRzWzEyXS5z LCAmYy0+aG9zdG5hbWUsIG9wdF9sZW4pOw0KZGlmZiAtLWdpdCBhL2RoY3AuaCBiL2RoY3AuaA0K aW5kZXggY2Q1MGM5OS4uODBhYmRhNiAxMDA2NDQNCi0tLSBhL2RoY3AuaA0KKysrIGIvZGhjcC5o DQpAQCAtOCw1ICs4LDcgQEANCiANCiBpbnQgZGhjcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1 Y3QgaW92X3RhaWwgKmRhdGEpOw0KIHZvaWQgZGhjcF9pbml0KHZvaWQpOw0KK3ZvaWQgZGhjcF9z ZXRfb3B0KHVpbnQ4X3QgY29kZSwgY29uc3QgY2hhciAqdmFsX3N0cik7DQorY29uc3QgY2hhciAq ZGhjcF9vcHRfdG9fc3RyKHVpbnQ4X3QgY29kZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbik7 DQogDQogI2VuZGlmIC8qIERIQ1BfSCAqLw0KZGlmZiAtLWdpdCBhL3Bhc3N0LjEgYi9wYXNzdC4x DQppbmRleCA1M2UwNzJhLi5iNGE0NGM1IDEwMDY0NA0KLS0tIGEvcGFzc3QuMQ0KKysrIGIvcGFz c3QuMQ0KQEAgLTQ0MCw2ICs0NDAsNDggQEAgU2VuZCBcZkluYW1lXGZSIGFzIERIQ1Agb3B0aW9u IDEyIChob3N0bmFtZSkuDQogRlFETiB0byBjb25maWd1cmUgdGhlIGNsaWVudCB3aXRoLg0KIFNl bmQgXGZJbmFtZVxmUiBhcyBDbGllbnQgRlFETjogREhDUCBvcHRpb24gODEgYW5kIERIQ1B2NiBv cHRpb24gMzkuDQogDQorLlRQDQorLkJSIFwtXC1kaGNwLW9wdCAiICIgXGZJQ09ERVxmUixcZklW QUxVRVxmUg0KK1NldCBESENQIG9wdGlvbiBcZklDT0RFXGZSICgxXC0yNTQpIHRvIFxmSVZBTFVF XGZSLiBUaGUgdmFsdWUgZm9ybWF0IGRlcGVuZHMNCitvbiB0aGUgb3B0aW9uIHR5cGUgYW5kIGlz IGRldGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcHRpb24gY29kZS4NCitNdWx0aXBs ZSBJUHY0IGFkZHJlc3NlcyBhcmUgY29tbWEtc2VwYXJhdGVkLg0KK1RoaXMgb3B0aW9uIGNhbiBi ZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuIElmIHRoZSBzYW1lIG9wdGlvbiBjb2RlIGlzDQor Z2l2ZW4gbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIHdpbnMuIE9wdGlvbnMgc2V0IHdp dGgNCitcZkJcLVwtZGhjcC1vcHRcZlIgb3ZlcnJpZGUgYnVpbHQtaW4gdmFsdWVzLg0KKy5QUA0K K0V4YW1wbGVzOg0KKy5uZg0KKyAgXC1cLWRoY3Atb3B0IDYsOC44LjguOCw0LjQuNC40DQorICBc LVwtZGhjcC1vcHQgMTIsbXlob3N0bmFtZQ0KKy5maQ0KKy5QUA0KK09ubHkgdGhlIGZvbGxvd2lu ZyBvcHRpb24gY29kZXMgYXJlIHN1cHBvcnRlZCAodW5zdXBwb3J0ZWQgY29kZXMgY2F1c2UgYW4g ZXJyb3IpOg0KKy5SUw0KKy5UUA0KKy5CIElQdjQgYWRkcmVzcyBvcHRpb25zDQorMSAoU3VibmV0 IE1hc2spLCAxNiAoU3dhcCBTZXJ2ZXIpLCAyOCAoQnJvYWRjYXN0IEFkZHJlc3MpLCA1MCAoUmVx dWVzdGVkIElQKSwNCis1NCAoU2VydmVyIElkZW50aWZpZXIpDQorLlRQDQorLkIgSVB2NCBhZGRy ZXNzIGxpc3Qgb3B0aW9ucyAoY29tbWEtc2VwYXJhdGVkKQ0KKzMgKFJvdXRlciksIDQgKFRpbWUg U2VydmVyKSwgNSAoTmFtZSBTZXJ2ZXIpLCA2IChETlMpLCA3IChMb2cgU2VydmVyKSwNCis4IChD b29raWUgU2VydmVyKSwgOSAoTFBSIFNlcnZlciksIDEwIChJbXByZXNzIFNlcnZlciksDQorMTEg KFJlc291cmNlIExvY2F0aW9uIFNlcnZlciksIDQxIChOSVMgU2VydmVycyksDQorNDIgKE5UUCBT ZXJ2ZXJzKSwgNDQgKE5ldEJJT1MgTmFtZSBTZXJ2ZXIpDQorLlRQDQorLkIgSW50ZWdlciBvcHRp b25zDQorMiAoVGltZSBPZmZzZXQsIDMyLWJpdCksIDEzIChCb290IEZpbGUgU2l6ZSwgMTYtYml0 KSwgMTkgKElQIEZvcndhcmRpbmcsIDgtYml0KSwNCisyMyAoRGVmYXVsdCBJUCBUVEwsIDgtYml0 KSwgMjYgKEludGVyZmFjZSBNVFUsIDE2LWJpdCksDQorMzcgKFRDUCBEZWZhdWx0IFRUTCwgOC1i aXQpLCAzOCAoVENQIEtlZXBhbGl2ZSBJbnRlcnZhbCwgMzItYml0KSwNCis1MSAoSVAgQWRkcmVz cyBMZWFzZSBUaW1lLCAzMi1iaXQpLA0KKzU3IChNYXggREhDUCBNZXNzYWdlIFNpemUsIDE2LWJp dCksDQorNTggKFJlbmV3YWwgVGltZSwgMzItYml0KSwgNTkgKFJlYmluZGluZyBUaW1lLCAzMi1i aXQpDQorLlRQDQorLkIgU3RyaW5nIG9wdGlvbnMNCisxMiAoSG9zdCBOYW1lKSwgMTUgKERvbWFp biBOYW1lKSwgMTcgKFJvb3QgUGF0aCksIDQwIChOSVMgRG9tYWluIE5hbWUpLA0KKzYwIChWZW5k b3IgQ2xhc3MgSWRlbnRpZmllciksIDY2IChURlRQIFNlcnZlciBOYW1lKSwNCis2NyAoQm9vdGZp bGUgTmFtZSksIDI1MiAoV1BBRCBVUkwpDQorLlJFDQorDQogLlRQDQogLkJSIFwtdCAiLCAiIFwt XC10Y3AtcG9ydHMgIiAiIFxmSXNwZWMNCiBDb25maWd1cmUgVENQIHBvcnQgZm9yd2FyZGluZyB0 byBndWVzdCBvciBuYW1lc3BhY2UuIFxmSXNwZWNcZlIgY2FuIGJlIGVpdGhlcjoNCi0tIA0KMi41 NS4wDQoNCg==