Received: by 2002:a05:7412:6592:b0:d7:7d3a:4fe2 with SMTP id m18csp1363033rdg; Fri, 11 Aug 2023 20:56:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH7mtPJcwiaujsVAVhMnieiEGO9EyDEURwKkZ2ZuQFmNkbeXQaJbmeuSZL2SeyqM3v+d7g8 X-Received: by 2002:ac2:5936:0:b0:4f7:66bf:b263 with SMTP id v22-20020ac25936000000b004f766bfb263mr2504891lfi.24.1691812580183; Fri, 11 Aug 2023 20:56:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691812580; cv=none; d=google.com; s=arc-20160816; b=SqyN2qh/TDT0PgCM4LEzBI/X0gA5D2N4B3FkAzsLoIG741SupZAGvb6SRGO5cKTQY0 4P/E4+t4sCohLmHC+I5sylE4G2W/W8so765wiaaeYxwWu5pBcHS7+YGkIn/8lQ1B1Cap qYIGGI0iuIKogv+ezyMJkhzfhKtnUZe7rlHlTAv4+pUSbMC3qWZ4g3FNP3eO4Ah06u9f 0Z6dzND5zWLDmNshWsprsFN3Emz3JJJm8+i83rsCaW39JoJIKhXV/G/izYCJBu671b2H JmbmALLuq0bj8t7bPUktK8eB/MXOcA/Q9Zal9CWhQsscjXBYEsxsJ+FCRH44utfHDBzJ GP8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:mime-version :content-transfer-encoding:references:in-reply-to:subject:cc:to:from :date; bh=iX2RxFTI6b+yAJC9zD53OTbQjx2Ex0ghlUZBvWrAisc=; fh=B3E/9QK0HFkzwKgHWu4ujL1VqxO2fEKM7L/1EIHo/Zg=; b=jo5RHCX1CY93ZcvYRK00In6tMgnil+N6UCbf+tHWuyl7NuTUrVTGhZlscAeVF2fs3l E7/a+6Yf9QUzkVCr+NpBB99/xn2lS01qSOG9utmM4WPkfAQTrhyKjKzCFeUrpivNMNus mNsPKtPLTZlHQMZalfmFisw4xG5wuCjki5ZjpCJODpNONVgqjava1wMFE71kZkfcOJny biZzDZpiE9i+gN+GiAJD1bYPK04AyiheT+8i3Vb2Ei666q+RJ0anVfFG4f2VlEuvVO5b jBkI+A8znI4bUHAIRYxHjB2pWiwRd6yiUAjGMxmr4BUXc8kpUXjoRd3043Sry3oLcVu0 IwKg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p4-20020a056402074400b0052336e17249si4356123edy.64.2023.08.11.20.55.54; Fri, 11 Aug 2023 20:56:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235175AbjHLCMu (ORCPT + 99 others); Fri, 11 Aug 2023 22:12:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51360 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234229AbjHLCMt (ORCPT ); Fri, 11 Aug 2023 22:12:49 -0400 Received: from zju.edu.cn (mail.zju.edu.cn [61.164.42.155]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8C9AD10DF; Fri, 11 Aug 2023 19:12:44 -0700 (PDT) Received: from linma$zju.edu.cn ( [210.32.146.231] ) by ajax-webmail-mail-app4 (Coremail) ; Sat, 12 Aug 2023 10:12:09 +0800 (GMT+08:00) X-Originating-IP: [210.32.146.231] Date: Sat, 12 Aug 2023 10:12:09 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: "Lin Ma" To: "Randy Dunlap" Cc: corbet@lwn.net, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, void@manifault.com, jani.nikula@intel.com, horms@kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: Re: [PATCH v3] docs: net: add netlink attrs best practices X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20220622(41e5976f) Copyright (c) 2002-2023 www.mailtech.cn mispb-4df6dc2c-e274-4d1c-b502-72c5c3dfa9ce-zj.edu.cn In-Reply-To: <8ef7f3c7-d203-142b-743d-72c6f4861012@infradead.org> References: <20230811031549.2011622-1-linma@zju.edu.cn> <8ef7f3c7-d203-142b-743d-72c6f4861012@infradead.org> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 MIME-Version: 1.0 Message-ID: <5f07ab6e.106acc.189e783e93c.Coremail.linma@zju.edu.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: cS_KCgAHTAl66tZk637lCg--.64133W X-CM-SenderInfo: qtrwiiyqvtljo62m3hxhgxhubq/1tbiAwMEEmTVkPsCogAKsm X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gUmFuZHksCgo+IAo+IEhpLS0KPiAKPiBNb3JlIGNvcnJlY3Rpb25zL2NvbW1lbnRzOgo+ IAo+IE9uIDgvMTAvMjMgMjA6MTUsIExpbiBNYSB3cm90ZToKPiA+IFByb3ZpZGUgc29tZSBzdWdn ZXN0aW9ucyB0aGF0IHdobyBkZWFsIHdpdGggTmV0bGluayBjb2RlIGNvdWxkIGZvbGxvdwo+ID4g KG9mIGNvdXJzZSB1c2luZyB0aGUgd29yZCAiYmVzdC1wcmFjdGljZXMiIG1heSBzb3VuZCBzb21l d2hhdAo+ID4gZXhhZ2dlcmF0ZSkuCj4gPiAKPiA+IEFjY29yZGluZyB0byBteSByZWNlbnQgcHJh Y3RpY2VzLCB0aGUgcGFyc2luZyBvZiB0aGUgTmV0bGluayBhdHRyaWJ1dGVzCj4gPiBsYWNrcyBk b2N1bWVudHMgZm9yIGtlcm5lbCBkZXZlbG9wZXJzLiBTaW5jZSByZWNlbnRseSB0aGUgcmVsZXZh bnQgZG9jcwo+ID4gZm9yIE5ldGxpbmsgdXNlciBzcGFjZSBnZXQgcmVwbGVuaXNoZWQsIEkgZ3Vl c3MgaXMgYSBnb29kIGNoYW5jZSBmb3IKPiA+IGtlcm5lbCBzcGFjZSBwYXJ0IHRvIGNhdGNoIHdp dGguCj4gPiAKPiA+IEZpcnN0IHRpbWUgdG8gd3JpdGUgYSBkb2N1bWVudCBhbmQgYW55IHJldmll d3MgYXJlIGFwcHJlY2lhdGVkLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBMaW4gTWEgPGxpbm1h QHpqdS5lZHUuY24+Cj4gPiAtLS0KPiA+IHYxIC0+IHYyOiBmaXggc29tZSB0eXBvcyBpbiBGT08g ZXhhbXBsZSwKPiA+ICAgICAgICAgICBhZGQgZXh0cmEgc2VjdGlvbiAiQWJvdXQgR2VuZXJhbCBO ZXRsaW5rIENhc2UiIHRvIGF2b2lkIGFueQo+ID4gICAgICAgICAgIGNvbmZ1c2lvbiBmb3IgbmV3 IGNvZGUgdXNlcnMuCj4gPiB2MiAtPiB2MzogbW92ZSBmcm9tIHN0YWdpbmcgdG8gdGhlIG5ldHdv cmtpbmcgZGlyZWN0b3J5IGFuZCBwb2xpc2ggdGhpcyBkb2N1bWVudAo+ID4gICAgICAgICAgIHdp dGggdGhlIHN1Z2dlc3Rpb25zIGZyb20gU2ltb24gYW5kIFJhbmR5LCBpbmNsdWRpbmc6Cj4gPiAg ICAgICAgICAgKiBmaXggdHlwb3MKPiA+ICAgICAgICAgICAqIHdyYXAgbGluZXMKPiA+ICAgICAg ICAgICAqIHVzZSBrZXJuZWwtZG9jIHRvIHJlZmVyIHRvIHRoZSBwYXJzZXJzIGZ1bmN0aW9uCj4g PiAgICAgICAgICAgKiBhZGQgYW4gZXhhbXBsZSBmb3Igc3RyaWN0X3N0YXJ0X3R5cGUKPiA+IAo+ ID4gIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pbmRleC5yc3QgICAgICAgICAgICB8ICAgMSAr Cj4gPiAgLi4uL25ldGxpbmstYXR0cnMtYmVzdC1wcmFjdGljZXMucnN0ICAgICAgICAgIHwgNzcy ICsrKysrKysrKysrKysrKysrKwo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgNzczIGluc2VydGlvbnMo KykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGxp bmstYXR0cnMtYmVzdC1wcmFjdGljZXMucnN0Cj4gPiAKPiAKPiA+IGRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0bGluay1hdHRycy1iZXN0LXByYWN0aWNlcy5yc3QgYi9E b2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0bGluay1hdHRycy1iZXN0LXByYWN0aWNlcy5yc3QK PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjM4Y2JkNDdi MmM5OQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5n L25ldGxpbmstYXR0cnMtYmVzdC1wcmFjdGljZXMucnN0Cj4gPiBAQCAtMCwwICsxLDc3MiBAQAo+ ID4gKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKPiA+ICsKPiA+ICs9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ICtOZXRsaW5rIEF0dHJpYnV0ZXMg QmVzdCBQcmFjdGljZXMKPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ ICsKPiA+ICtJbnRyb2R1Y3Rpb24KPiA+ICs9PT09PT09PT09PT0KPiA+ICsKPiA+ICtUaGlzIGRv Y3VtZW50IHNlcnZlcyBhcyBhIGd1aWRlIHRvIHRoZSBiZXN0IHByYWN0aWNlcywgb3IgY2F1dGlv bnMsIGZvciBwYXJzaW5nCj4gPiArdXNlci1zcGFjZS1wcm92aWRlZCBOZXRsaW5rIGF0dHJpYnV0 ZXMgaW4ga2VybmVsIHNwYWNlLiBUaGUgaW50ZW5kZWQgYXVkaWVuY2UKPiA+ICtpcyB0aG9zZSB3 aG8gd2FudCB0byBsZXZlcmFnZSB0aGUgcG93ZXJmdWwgTmV0bGluayBpbnRlcmZhY2UKPiA+ICso bWFpbmx5IGZvciBjbGFzc2ljIG9yIGxlZ2FjeSBOZXRsaW5rIGFuZCB0aGUgZ2VuZXJhbCBOZXRs aW5rIHVzZXJzIGJhc2ljYWxseQo+ID4gK2Rvbid0IHdvcnJ5IGFib3V0IHRoZXNlLCBzZWUgcGVu dWx0aW1hdGUgc2VjdGlvbikgaW4gdGhlaXIgY29kZS4gQWRkaXRpb25hbGx5LAo+ID4gK2ZvciB0 aG9zZSB3aG8gYXJlIGN1cmlvdXMgYWJvdXQgdGhlIHBhcnNpbmcgb2YgTmV0bGluayBhdHRyaWJ1 dGVzIGJ1dCBtYXkgZmVlbAo+ID4gK2FwcHJlaGVuc2l2ZSBhYm91dCBkZWx2aW5nIGludG8gdGhl IGNvZGUgaXRzZWxmLCB0aGlzIGRvY3VtZW50IGNhbiBzZXJ2ZSBhcyBhbgo+ID4gK2V4Y2VsbGVu dCBzdGFydGluZyBwb2ludC4KPiA+ICsKPiA+ICtIb3dldmVyLCBpZiB5b3UgYXJlIGNvbmNlcm5l ZCBhYm91dCBob3cgdG8gcHJlcGFyZSBOZXRsaW5rIG1lc3NhZ2VzIGZyb20gYSB1c2VyCj4gPiAr c3BhY2Ugc29ja2V0IGluc3RlYWQgb2Ygd3JpdGluZyBrZXJuZWwgY29kZSwgaXQgaXMgcmVjb21t ZW5kZWQgdG8gcmVhZCB0aGUKPiA+ICtgTmV0bGluayBIYW5kYm9vayA8aHR0cHM6Ly9kb2NzLmtl cm5lbC5vcmcvdXNlcnNwYWNlLWFwaS9uZXRsaW5rL2ludHJvLmh0bWw+YF8KPiA+ICtmaXJzdC4g QW5kIGFmdGVyIGZpbmlzaGluZyByZWFkaW5nIHRoaXMsIHJlbWVtYmVyIHRvIGFsc28gcmVhZCB0 aGUgYnJpZWYKPiA+ICtpbnRyb2R1Y3Rpb24gdG8gYEdlbmVyaWMgTmV0bGluayA8aHR0cHM6Ly9k b2NzLmtlcm5lbC5vcmcvbmV0d29ya2luZy9nZW5lcmljX25ldGxpbmsuaHRtbD5gXy4KPiA+ICsK PiA+ICtCYWNrZ3JvdW5kCj4gPiArPT09PT09PT09PQo+ID4gKwo+ID4gK0RhdGEgU3RydWN0dXJl cwo+ID4gKy0tLS0tLS0tLS0tLS0tLQo+ID4gKwo+ID4gK1NvIHdoYXQgaXMgYSBOZXRsaW5rIGF0 dHJpYnV0ZT8gSW4gc2ltcGxlIHRlcm1zLCAqKnRoZSBOZXRsaW5rIGF0dHJpYnV0ZSBpcyB0aGUK PiA+ICtzdHJ1Y3R1cmFsIHBheWxvYWQgY2FycmllZCBieSB0aGUgTmV0bGluayBtZXNzYWdlIGlu IFRMViAoVHlwZS1MZW5ndGgtVmFsdWUpCj4gPiArZm9ybWF0KiogKEF0IGxlYXN0IGl0IGlzIHN1 Z2dlc3RlZCB0byBkbyBzbykuIE9uZSBjYW4gc3RyYWlnaHRseSByZWFkIHRoZQo+IAo+IHMvc3Ry YWlndGx5L2RpcmVjdGx5Lwo+IAo+ID4gK2NvbW1lbnQgYW5kIHRoZSBjb2RlIGluIGBgaW5jbHVk ZS9uZXQvbmV0bGluay5oYGAgKG1vc3Qgb2YgdGhlIGJlbG93IGNvbnRlbnQgaXMKPiA+ICtkZXJp dmVkIGZyb20gdGhlcmUpLiBUaGUgZm9sbG93aW5nIGdyYXBoIGRlbW9uc3RyYXRlcyB0aGUgc3Ry dWN0dXJlIGZvciB0aGUKPiA+ICttYWpvcml0eSBvZiBtZXNzYWdlcy4KPiA+ICsKPiA+ICsuLiBj b2RlLWJsb2NrOjoKPiA+ICsKPiA+ICsgICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiArICAgfCBOZXRsaW5rIE1zZyBIZHIgfCBG YW1pbHkgSGRyIHwgIE5ldGxpbmsgQXR0cmlidXRlcyAgLi4uCj4gPiArICAgKy0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICBeCj4gPiArCj4gPiArVGhlIGBgXmBgIHBhcnQg d2lsbCBiZSBwYWRkZWQgdG8gYWxpZ24gdG8gYGBOTE1TR19BTElHTlRPYGAgKDQgYnl0ZXMgZm9y IHRoZQo+ID4gK0xpbnV4IGtlcm5lbCkuCj4gPiArCj4gPiArVGhlIHRlcm0gKiptYWpvcml0eSoq IGlzIHVzZWQgaGVyZSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMgZGVwZW5kZW50IG9uIHRoZQo+ ID4gK3NwZWNpZmljIE5ldGxpbmsgZmFtaWx5IHlvdSBhcmUgZGVhbGluZyB3aXRoLiBGb3IgZXhh bXBsZSwgdGhlIGdlbmVyYWwgTmV0bGluawo+ID4gK2ZhbWlseSAoTkVUTElOS19HRU5FUklDKSBw dXRzIGBgc3RydWN0IGdlbmxtc2doZHJgYCBpbiB0aGUgRmFtaWx5IEhkciBsb2NhdGlvbgo+ID4g K2FuZCBpcyBzdHJpY3RseSBmb2xsb3dlZCBieSBzcGVjaWZpZWQgTmV0bGluayBhdHRyaWJ1dGVz IFRMVi4gQXMgYQo+ID4gK2NvdW50ZXJleGFtcGxlLCB0aGUgY29ubmVjdG9yIE5ldGxpbmsgZmFt aWx5IChORVRMSU5LX0NPTk5FQ1RPUikgZG9lcyBub3QgdXNlCj4gPiArTmV0bGluayBhdHRyaWJ1 dGVzIGZvciB0cmFuc2l0aW5nIHRoZSBwYXlsb2FkLCBidXQsIHJhdGhlciwgcGxhY2VzIGEgbmFr ZWQgZGF0YQo+IAo+IEdyYW1tYXRpY2FsbHkgInRyYW5zaXRpbmciIGlzIGNvcnJlY3QuIFBlcnNv bmFsbHkgSSB3b3VsZCB1c2UgImNhcnJ5aW5nIiBvciAicGFzc2luZyIKPiBvciBldmVuICJ0cmFu c21pdHRpbmciLiBOb3QgYSBiaWcgZGVhbCB0aG91Z2guCj4gCj4gPiArc3RydWN0dXJlIGltbWVk aWF0ZWx5IGFmdGVyIGl0cyBmYW1pbHkgaGVhZGVyIGBgc3RydWN0IGNuX21zZ2BgLiBJbiBnZW5l cmFsLAo+ID4gK3doZW4gd29ya2luZyB3aXRoIE5ldGxpbmstcG93ZXJlZCBjb2RlLCBtb3N0IGRl dmVsb3BlcnMgb3B0IGZvciBOZXRsaW5rCj4gPiArYXR0cmlidXRlcyBkdWUgdG8gdGhlaXIgY29u dmVuaWVuY2UgYW5kIGVhc2Ugb2YgbWFpbnRlbmFuY2UuIFRoaXMgbWVhbnMgaXQgaXMKPiA+ICtk ZWZpbml0ZWx5IG9rYXkgdG8gb3Zlcmxvb2sgdGhlIGNvcm5lciBjYXNlcyB3aGljaCBtYXkgZXZl bnR1YWxseSBiZQo+ID4gK2luY29ycG9yYXRlZCBpbnRvIE5ldGxpbmsgYXR0cmlidXRlcyBpbiB0 aGUgZnV0dXJlLgo+ID4gKwo+ID4gK1RoZSBOZXRsaW5rIGF0dHJpYnV0ZSBpbiB0aGUgTGludXgg a2VybmVsIGNvbmZvcm1zIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLgo+ID4gKwo+ID4gKy4u IGNvZGUtYmxvY2s6OiBjCj4gPiArCj4gPiArICAgLy8gPi0tLS0tLS0gbmxhIGhlYWRlciAtLS0t LS0tLTwKPiA+ICsgICAvLyArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t IC0gLSAtIC0tLS0tLS0tLS0rCj4gPiArICAgLy8gfCAgQXR0ciBMZW4gICB8ICBBdHRyIFR5cGUg IHwgICAgICAgICAgQXR0ciBEYXRhICAgICAgICAgfAo+ID4gKyAgIC8vICstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0gLSAtIC0gLS0tLS0tLS0tLSsKPiA+ICsgICAvLyA+ LS0gMiBieXRlcyAtLXwtLSAyIGJ5dGVzIC0tfC0tLS0tLSBBdHRyIExlbiBieXRlcyAtLS0tLS08 Cj4gPiArCj4gPiArICAgc3RydWN0IG5sYXR0ciB7Cj4gPiArICAgICAgIF9fdTE2ICAgICAgICAg ICBubGFfbGVuOwo+ID4gKyAgICAgICBfX3UxNiAgICAgICAgICAgbmxhX3R5cGU7Cj4gPiArICAg fTsKPiA+ICsKPiA+ICtUaGUgMiBieXRlcyBhdHRyIGxlbiAoXCBgYG5sYV9sZW5gYFwgKSBpbmRp Y2F0ZXMgdGhlIGVudGlyZSBhdHRyaWJ1dGUgbGVuZ3RoCj4gPiArKGluY2x1ZGVzIHRoZSBubGEg aGVhZGVyKSBhbmQgdGhlIG90aGVyIDIgYnl0ZXMgYXR0ciB0eXBlIChcIGBgbmxhX3R5cGVgYFwg KQo+ID4gK2lzIHVzZWQgYnkgdGhlIGtlcm5lbCBjb2RlIHRvIGlkZW50aWZ5IHRoZSBleHBlY3Rl ZCBhdHRyaWJ1dGUuIFRvIHByb2Nlc3MKPiA+ICt0aGVzZSBhdHRyaWJ1dGVzLCB0aGUga2VybmVs IGNvZGUgbmVlZHMgdG8gbG9jYXRlIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgYW5kCj4gPiArZXh0 cmFjdCB0aGUgcGF5bG9hZCBmcm9tIGl0LCBhIHByb2Nlc3Mga25vd24gYXMgYXR0cmlidXRlIHBh cnNpbmcuIFRoaXMKPiA+ICtwcm9jZWR1cmUgY2FuIGJlIHRlZGlvdXMgYW5kIGVycm9yLXByb25l IHdoZW4gZG9uZSBtYW51YWxseSwgc28gdGhlIGludGVyZmFjZQo+ID4gK3Byb3ZpZGVzIHBhcnNl cnMgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3MuCj4gPiArCj4gPiArKkl0IGlzIHdvcnRoIG1lbnRp b25pbmcgdGhhdCBpZiB5b3UgY2hvb3NlIHRvIHVzZSBnZW5lcmFsIE5ldGxpbmsgd2l0aG91dCBh Cj4gPiArbmVzdGVkIGRhdGEgc3RydWN0dXJlLCB5b3UgZG9uJ3QgZXZlbiBuZWVkIHRvIGNhbGwg YW55IHBhcnNlcnMgYXMgdGhlCj4gPiAraW50ZXJmYWNlIGFscmVhZHkgZG9lcyB0aGlzIGFuZCB5 b3VyIHRhc2sgd2lsbCBiZSBzaW1wbGlmaWVkIHRvIGhhbmRsaW5nIHRoZQo+ID4gK3BhcnNlZCBy ZXN1bHQuKgo+ID4gKwo+ID4gK1BhcnNlcnMKPiA+ICstLS0tLS0tCj4gPiArCj4gPiArVGhlcmUg YXJlIHNldmVyYWwgcGFyc2VycyBhdmFpbGFibGUsIGVhY2ggZGVzaWduZWQgdG8gaGFuZGxlIGEg c3BlY2lmaWMgdHlwZQo+ID4gK29mIG9iamVjdCBiZWluZyBwYXJzZWQuIElmIHlvdSBoYXZlIGEg cG9pbnRlciB0byBhIE5ldGxpbmsgbWVzc2FnZSwKPiA+ICtzcGVjaWZpY2FsbHkgYSAoXCBgYHN0 cnVjdCBubG1zZ2hkciAqYGBcICksIGl0J3MgbGlrZWx5IHRoYXQgeW91J2xsIHdhbnQgdG8KPiA+ ICtjYWxsIHRoZSBgYG5sbXNnX3BhcnNlYGAgZnVuY3Rpb24uIFRoZSBwcm90b3R5cGUgZm9yIHRo aXMgZnVuY3Rpb24gaXMgYXMKPiA+ICtmb2xsb3dzOgo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6 OiBpbmNsdWRlL25ldC9uZXRsaW5rLmgKPiA+ICsgICA6aWRlbnRpZmllcnM6IG5sbXNnX3BhcnNl Cj4gPiArCj4gPiArT3RoZXJ3aXNlLCBpZiB5b3UgaGF2ZSBhIHBvaW50ZXIgdG8gTmV0bGluayBh dHRyaWJ1dGUgKFwgYGBzdHJ1Y3QgbmxhdHRyICpgYFwgKQo+ID4gK2FscmVhZHksIHRoZSBgYG5s YV9wYXJzZWBgXCAsIG9yICBgYG5sYV9wYXJzZV9uZXN0ZWRgYCBtYXkgYmUgdXNlZC4KPiA+ICsK PiA+ICsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9uZXQvbmV0bGluay5oCj4gPiArICAgOmlkZW50 aWZpZXJzOiBubGFfcGFyc2UKPiA+ICsKPiA+ICsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9uZXQv bmV0bGluay5oCj4gPiArICAgOmlkZW50aWZpZXJzOiBubGFfcGFyc2VfbmVzdGVkCj4gPiArCj4g PiArVXBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgb25lIHdpbGwgbm90aWNlIHRoYXQgdGhlIHBhcmFt ZXRlcnMgZm9yIHRoZSB2YXJpb3VzCj4gPiArcGFyc2VycyBiZWFyIGEgc3RyaWtpbmcgcmVzZW1i bGFuY2UgdG8gb25lIGFub3RoZXIuIEluIGZhY3QsIHRoZXkgc2hhcmUgYQo+ID4gK2NvbW1vbmFs aXR5IHRoYXQgZ29lcyBiZXlvbmQgbWVyZSBjb2luY2lkZW5jZSwgYXMgdGhleSBhbGwgdWx0aW1h dGVseSBjYWxsCj4gPiArdXBvbiB0aGUgc2FtZSBpbnRlcm5hbCBwYXJzaW5nIGhlbHBlciBmdW5j dGlvbiwgbmFtZWx5IGBgX19ubGFfcGFyc2VgYC4KPiA+ICsKPiA+ICsuLiBjb2RlLWJsb2NrOjog Ywo+ID4gKwo+ID4gKyAgIGludCBfX25sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICoqdGIsIGludCBt YXh0eXBlLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpoZWFkLAo+ID4gKyAgICAgICAgICAgaW50IGxl biwgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IHZhbGlkYXRl LAo+ID4gKyAgICAgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKPiA+ICsK PiA+ICtUaGUgaWRlYSBpcyBzdHJhaWdodGZvcndhcmQgc2luY2Ugd2Uga25vdyB0aGF0IGFkZGlu ZyBhbiBvZmZzZXQgdG8gZWl0aGVyCj4gPiArdGhlIE5ldGxpbmsgbWVzc2FnZSBoZWFkZXIgb3Ig dGhlIG5lc3RlZCBhdHRyaWJ1dGUgd2lsbCB5aWVsZCB0aGUgVExWIGZvcm1hdAo+ID4gK29mIHRo ZSBhdHRyaWJ1dGVzLiBPbiB0aGlzIGJhc2lzLCB3ZSB3aWxsIGxlYXJuIGhvdyB0byB1dGlsaXpl IHRob3NlIHBhcnNlcnMuCj4gPiArCj4gPiArVGhlIHBhcnNlciBmdW5jdGlvbnMgbWVudGlvbmVk IGFib3ZlIHJlcXVpcmUgdHdvIGlucHV0cyBmcm9tIHRoZSB1c2VyOiBhCj4gPiArZGVzdGluYXRp b24gYXJyYXksIGBgdGJgYCwgYW5kIGEgbWF4aW11bSBhdHRyaWJ1dGUgdHlwZSwgYGBtYXh0eXBl YGAuIFJlc3QKPiA+ICthc3N1cmVkIHRoYXQgdGhlIHBhcnNlcnMgd2lsbCB0YWtlIGNhcmUgb2Yg Y2xlYXJpbmcgdGhlIGJ1ZmZlciBieSBjYWxsaW5nCj4gCj4gSSB3b3VsZCBkcm9wIHRoZSAiUmVz dCBhc3N1cmVkIHRoYXQiLgo+IAo+ID4gK21lbXNldCwgc28geW91IGRvbid0IG5lZWQgdG8gd29y cnkgYWJvdXQgYW55IGRpcnR5IGRhdGEuICBBZnRlciB0aGUgcGFyc2luZywKPiA+ICtwYXJzZXJz IHdpbGwgc3RvcmUgdGhlIHBhcnNlZCBwb2ludGVyIGluIHRoZSBwcm92aWRlZCBhcnJheSwgYWxs b3dpbmcgeW91IHRvCj4gPiArZWFzaWx5IGFjY2VzcyB0aGUgcGFyc2VkIGRhdGEgbGF0ZXIgb24u ICBGb3IgY2xhcml0eSwgeW91IGNhbiByZWZlciB0byB0aGUKPiA+ICtleGFtcGxlIGJlbG93IHRv IHNlZSBob3cgdGhlIHBhcnNlZCByZXN1bHQgaXMgb3JnYW5pemVkLgo+ID4gKwo+ID4gKy4uIGNv ZGUtYmxvY2s6OiBjCj4gPiArCj4gPiArICAgZW51bSB7Cj4gPiArICAgICAgIEVYQU1QTEVBXzEs Cj4gPiArICAgICAgIEVYQU1QTEVBXzIsCj4gPiArICAgICAgIEVYQU1QTEVBXzMsCj4gPiArICAg ICAgIEVYQU1QTEVBXzQsCj4gPiArICAgICAgIF9fRVhBTVBMRUFfTUFYCj4gPiArCj4gPiArICAg I2RlZmluZSBFWEFNUExFQV9NQVggKF9fRVhBTVBMRUFfTUFYIC0gMSkKPiA+ICsgICB9Owo+ID4g Kwo+ID4gKyAgIC8qCj4gPiArICAgICogICAgIGF0dHJpYnV0ZXMgYmVpbmcgcGFyc2VkIGFuZCBw b2ludGVyczoKPiA+ICsgICAgKgo+ID4gKyAgICAqICAgICArLS0tKy0tLS0tLS0tLS0tLSstIC0g LSstLS0rLS0tLS0tLS0tLS0tKy0gLSAtKy0tLSstLS0tLS0tLS0tLS0rLSAtIC0rCj4gPiArICAg ICogICAgIHwgWCB8IEVYQU1QTEVBXzEgfCAuLi4gfCBZIHwgRVhBTVBMRUFfNCB8IC4uLiB8IFog fCBFWEFNUExFQV8yIHwgLi4uIHwKPiA+ICsgICAgKiAgICAgKy0tLSstLS0tLS0tLS0tLS0rLSAt IC0rLS0tKy0tLS0tLS0tLS0tLSstIC0gLSstLS0rLS0tLS0tLS0tLS0tKy0gLSAtKwo+ID4gKyAg ICAqICAgICBeICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgXgo+ ID4gKyAgICAqICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgfAo+ID4gKyAgICAqICAgICBwdHIxICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgfAo+ID4gKyAgICAqICAgICBwdHIyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwo+ID4gKyAgICAqICAgICBwdHIzID0gTlVMTCAgICAgICAgICAgIHwK PiA+ICsgICAgKiAgICAgcHRyNCAtLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiArICAgICovCj4gPiAr Cj4gPiArICAgc3RydWN0IG5sYXR0ciAqdGJbRVhBTVBMRUFfTUFYKzFdOwo+ID4gKyAgIG5sYV9w YXJzZSh0YiwgRVhBTVBMRUFfTUFYLCAuLi4uKTsKPiA+ICsgICAvLyBBZnRlciB0aGUgcGFyc2Vy IHJldHVybnMsIHRoZSB0YiBjb250YWlucyB0aGUgZGF0YSBzaG93biBiZWxvdywKPiA+ICsgICAv LyB3aXRoIGVhY2ggcG9pbnRlciBob2xkaW5nIHRoZSB2YWx1ZSBpbmRpY2F0ZWQgaW4gdGhlIGFi b3ZlIGRpYWdyYW0uCj4gPiArICAgLy8gdGIgPT0gewo+ID4gKyAgIC8vICAgICAgcHRyMSwgLy8g RVhBTVBMRUFfMQo+ID4gKyAgIC8vICAgICAgcHRyMiwgLy8gRVhBTVBMRUFfMgo+ID4gKyAgIC8v ICAgICAgTlVMTCwgLy8gRVhBTVBMRUFfMwo+ID4gKyAgIC8vICAgICAgcHRyNCwgLy8gRVhBTVBM RUFfNAo+ID4gKyAgIC8vIH07Cj4gPiArCj4gPiArVGhlIExpbnV4IGtlcm5lbCdzIGF0dHJpYnV0 ZSBwYXJzaW5nIG1lY2hhbmlzbSBpcyBub3RhYmx5IGZsZXhpYmxlLCBlbmFibGluZwo+ID4gK2F0 dHJpYnV0ZXMgdG8gYmUgcHJlc2VudGVkIGluIGFueSBvcmRlciwgcmVnYXJkbGVzcyBvZiB0aGVp ciBzcGVjaWZpYyB0eXBlCj4gPiArKGUuZy4sIGBgRVhBTVBMRV80YGAgY2FuIHByZWNlZGUgYGBF WEFNUExFXzJgYCkuIFRoaXMgZmxleGliaWxpdHkgaXMgbm90IGFsd2F5cwo+ID4gK3RoZSBjYXNl IGluIG90aGVyIE5ldGxpbmsgaW1wbGVtZW50YXRpb25zLCBzdWNoIGFzIEZyZWVCU0QsIHdoZXJl IGF0dHJpYnV0ZXMKPiA+ICttYXkgYmUgcmVxdWlyZWQgdG8gZm9sbG93IGEgc3BlY2lmaWMgb3Jk ZXIuCj4gPiArCj4gPiArV2l0aCB0aGUgcGFyc2luZyBwcm9jZXNzIGNvbXBsZXRlLCB0aGUga2Vy bmVsIGNvZGUgY2FuIHJlYWRpbHkgYWNjZXNzIHRoZQo+ID4gK3BhcnNlZCBhdHRyaWJ1dGUgdXNp bmcgdGhlIGF0dHJpYnV0ZSBwb2ludGVyLiBUbyBpbGx1c3RyYXRlLCBsZXQncyBzYXkgd2UKPiA+ ICthbnRpY2lwYXRlIHRoZSBgYEVYQU1QTEVBXzJgYCBhdHRyaWJ1dGUgdG8gaG9sZCBhIGBgdTE2 YGAgdmFsdWUuIEluIHRoYXQgY2FzZSwKPiA+ICt3ZSBjYW4gZGVyaXZlIGl0IGluIHRoZSBmb2xs b3dpbmcgbWFubmVyOgo+ID4gKwo+ID4gKy4uIGNvZGUtYmxvY2s6OiBjCj4gPiArCj4gPiArICAg dTE2IHZhbDsKPiA+ICsgICBpZiAodGJbRVhBTVBMRUFfMl0pIC8vIGNoZWNrIGlmIHVzZXIgcHJv dmlkZXMgYXR0cmlidXRlIEVYQU1QTEVBXzIKPiA+ICsgICAgICAgdmFsID0gbmxhX2dldF91MTYo dGJbRVhBTVBMRUFfMl0pOyAvLyBkZXJlZmVyZW5jZSBpdAo+ID4gKwo+ID4gK1RoZXJlIGFyZSBt dWx0aXBsZSBoZWxwZXJzIGF2YWlsYWJsZSB0byBoZWxwIHVzIHRvIGRlcml2ZSB0aGUgYXR0cmli dXRlLCBzdWNoCj4gPiArYXMgYGBubGFfZ2V0X3U4LzE2LzMyLzY0YGBcICwgYGBubGFfZ2V0X3M4 LzE2LzMyLzY0YGBcICwgYGBubGFfZ2V0X2ZsYWdgYFwgLAo+ID4gK2BgbmxhX2dldF9tc2Vjc2Bg Lgo+ID4gKwo+ID4gK0xvb2tzIHByZXR0eSBnb29kLCByaWdodD8gSG93ZXZlciwgdGhlIGNvZGUg c3RpbGwgaGFzIGEgcG90ZW50aWFsIGZsYXcsIGFzIGl0Cj4gPiArbmFpdmVseSBhc3N1bWVzIHRo YXQgdGhlIHVzZXIgaGFzIGluZGVlZCBwbGFjZWQgYSBgYHUxNmBgIHZhbHVlIGluIHRoZSBwYXls b2FkLgo+ID4gK1dlJ2xsIGRpc2N1c3MgdGhpcyBpc3N1ZSBmdXJ0aGVyIGluIHRoZSAjMiBiZXN0 IHByYWN0aWNlLgo+ID4gKwo+ID4gK0ZPTyBleGFtcGxlCj4gPiArLS0tLS0tLS0tLS0KPiA+ICsK PiA+ICtJbiB0aGlzIHBhcnQgd2Ugd2lsbCBtYWtlIGEgaG9yaXpvbnRhbCBjb21wYXJpc29uIHRv IGhlbHAgcmVhZGVycyBiZXR0ZXIKPiA+ICt1bmRlcnN0YW5kIGhvdyB0byB3cml0ZSBhIE5ldGxp bmsgY29kZSB0byBwYXJzZSB0aGUgdXNlciBwcm92aWRlZCBkYXRhLiBUbwo+IAo+ICAgICAgICAg ICAgICAgZHJvcCB0aGUgJ2EnIF4KPiAKPiA+ICtiZWdpbiB3aXRoLCBsZXQncyB0YWtlIGEgbG9v ayBhdCBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQgaW4gYGBpb2N0bGBgLgo+ID4gKwo+ID4gKy4u IGNvZGUtYmxvY2s6OiBjCj4gPiArCj4gPiArICAgc3RydWN0IGZvb19kMSB7Cj4gPiArICAgICAg IHUzMiBhOwo+ID4gKyAgICAgICB1MzIgYjsKPiA+ICsgICB9Owo+ID4gKwo+ID4gKyAgIHN0cnVj dCBmb29fZDIgewo+ID4gKyAgICAgICB1MzIgYzsKPiA+ICsgICAgICAgdTMyIGQ7Cj4gPiArICAg ICAgIHU4ICBoYXNjaGlsZDsKPiA+ICsgICAgICAgc3RydWN0IGZvb19kMSBjaGlsZDsgLy8gb3B0 aW9uYWwKPiA+ICsgICB9Cj4gPiArCj4gPiArICAgc3RhdGljIGxvbmcgZm9vX2lvY3RsKAo+ID4g KyAgICAgICBzdHJ1Y3QgZmlsZSAqZmxpcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9u ZyBhcmcpCj4gPiArICAgewo+ID4gKyAgICAgICB1MzIgcyA9IG9mZnNldG9mKHN0cnVjdCBmb29f ZDIsIGNoaWxkKTsKPiA+ICsgICAgICAgc3RydWN0IGZvb19kMiAqZDIgPSBrbWFsbG9jKHNpemVv ZihzdHJ1Y3QgZm9vX2QyKSwgR0ZQX0tFUk5FTCk7Cj4gPiArICAgICAgIGlmICghZDIpIHJldHVy biAtRU5PTUVNOwo+ID4gKwo+ID4gKyAgICAgICBjb3B5X2Zyb21fdXNlcihkMiwgYXJnLCBzKTsK PiA+ICsgICAgICAgLy8gYWNjZXNzIGRhdGEgbGlrZSBkMi0+YywgZDItPmQKPiA+ICsKPiA+ICsg ICAgICAgaWYgKGQyLT5oYXNjaGlsZCkgewo+ID4gKyAgICAgICAgICAgY29weV9mcm9tX3VzZXIo JmQyLT5jaGlsZCwgYXJnICsgcywgc2l6ZW9mKHN0cnVjdCBmb29fZDEpKTsKPiA+ICsgICAgICAg ICAgIC8vIGFjY2VzcyBkYXRhIGxpa2UgZDItPmNoaWxkLmEsIGQyLT5jaGlsZC5iCj4gPiArICAg ICAgIH0KPiA+ICsgICAgICAgLy8gLi4uCj4gPiArICAgfQo+ID4gKwo+ID4gK1RoZSBgYGlvY3Rs YGAgY29kZSBhYm92ZSByZXZlYWxzIHRoYXQgdHdvIGNhbGxzIHRvIGBgY29weV9mcm9tX3VzZXJg YCBhcmUgbWFkZSwKPiA+ICtmYWNpbGl0YXRpbmcgdGhlIHRyYW5zZmVyIG9mIGRhdGEgZnJvbSB1 c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZS4gQWZ0ZXIgdGhlc2UKPiA+ICtjYWxscywgdGhlIGNv ZGUgY2FuIG1hbmlwdWxhdGUgdmFsdWVzIHVzaW5nIHBvaW50ZXJzLgo+ID4gKwo+ID4gK0luIGNv bnRyYXN0LCB0aGUgc2Vjb25kIHNuaXBwZXQgc2hvd2Nhc2VzIGEgc2ltaWxhciBzb2x1dGlvbiB3 aGVuIHV0aWxpemluZyB0aGUKPiA+ICtOZXRsaW5rIGludGVyZmFjZS4gVGhlcmUgYXJlIG11bHRp cGxlIHdheXMgdG8gdXNlIHRoZSBhdHRyaWJ1dGVzIHRvCj4gPiArYWNoaWV2ZSB0aGUgc2FtZSBv dXRjb21lLCB0aGUgc25pcHBldCBiZWxvdyBpbGx1c3RyYXRlcyBqdXN0IG9uZSBwb3NzaWJsZQo+ IAo+IHMvLC87LyAgICAgICAgICAgICAgICAgICAgIF4KPiAKPiA+ICthcHByb2FjaC4KPiA+ICsK PiA+ICsuLiBjb2RlLWJsb2NrOjogYwo+ID4gKwo+ID4gKwo+ID4gKyAgIGVudW0gewo+ID4gKyAg ICAgICBGT09DSElMRF9BLAo+ID4gKyAgICAgICBGT09DSElMRF9CLAo+ID4gKyAgICAgICBfX0ZP T0NISUxEX01BWCwKPiA+ICsKPiA+ICsgICAjZGVmaW5lIEZPT0NISUxEX01BWCAoX19GT09DSElM RF9NQVggLSAxKQo+ID4gKyAgIH07Cj4gPiArCj4gPiArICAgZW51bSB7Cj4gPiArICAgICAgIEZP T0FfQywKPiA+ICsgICAgICAgRk9PQV9ELAo+ID4gKyAgICAgICBGT09BX0NISUxELAo+ID4gKyAg ICAgICBfX0ZPT0FfTUFYLAo+ID4gKwo+ID4gKyAgICNkZWZpbmUgRk9PQV9NQVggKF9fRk9PQV9N QVggLSAxKQo+ID4gKyAgIH07Cj4gPiArCj4gPiArICAgLy8ganVzdCBhbiBleGFtcGxlLCBkaWZm ZXJlbnQgY29uc3VtZXJzIGhhdmUgZGlmZmVyZW50IGhhbmRsZXIgcHJvdG90eXBlCj4gPiArICAg c3RhdGljIGludCBmb29faGFuZGxlcihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5ldGxp bmtfZXh0X2FjayAqZXh0YWNrKQo+ID4gKyAgIHsKPiA+ICsgICAgICAgc3RydWN0IG5sYXR0ciAq YXR0cnNbRk9PQV9NQVgrMV07Cj4gPiArICAgICAgIGludCBlcnI7Cj4gPiArICAgICAgIC8vIC4u Lgo+ID4gKyAgICAgICBlcnIgPSBubG1zZ19wYXJzZShubGgsIEZPT0FfTUFYLCBhdHRycywgLi4u LCBleHRhY2spOwo+ID4gKyAgICAgICAvLyAuLi4KPiA+ICsgICAgICAgaWYgKCFhdHRyc1tGT09B X0NdIHx8ICFhdHRyc1tGT09BX0RdKQo+ID4gKyAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4g PiArICAgICAgIC8vIGFjY2VzcyBkYXRhIHZpYQo+ID4gKyAgICAgICAvLyBubGFfZ2V0X3UzMihh dHRyc1tGT09BX0NdKSBhbmQgbmxhX2dldF91MzIoYXR0cnNbRk9PQV9EXSkKPiA+ICsKPiA+ICsg ICAgICAgLy8gYWNjZXNzIGNoaWxkIGFzIG5lc3RlZAo+ID4gKyAgICAgICBpZiAoYXR0cnNbRk9P QV9DSElMRF0pCj4gPiArICAgICAgICAgICBlcnIgPSBmb29faGFuZGxlcl9pbnRlcm5hbChhdHRy c1tGT09BX0FSUkFZXSwgZXh0YWNrKTsKPiA+ICsgICB9Cj4gPiArCj4gPiArICAgc3RhdGljIGlu dCBmb29faGFuZGxlcl9pbnRlcm5hbChzdHJ1Y3QgbmxhdHRyICpubGEsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sp Cj4gPiArICAgewo+ID4gKyAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyc1tGT09DSElMRF9NQVgr MV07Cj4gPiArICAgICAgIGludCBlcnI7Cj4gPiArICAgICAgIC8vIC4uLgo+ID4gKyAgICAgICBl cnIgPSBubGFfcGFyc2VfbmVzdGVkKGF0dHJzLCBGT09DSElMRF9NQVgsIG5sYSwgLi4uLCBleHRh Y2spOwo+ID4gKyAgICAgICAvLyBhY2Nlc3MgZGF0YSB2aWEKPiA+ICsgICAgICAgLy8gbmxhX2dl dF91MzIoYXR0cnNbRk9PQ0hJTERfQV0pLCBubGFfZ2V0X3UzMihhdHRyc1tGT09DSElMRF9CXSkK PiA+ICsgICB9Cj4gPiArCj4gPiArQnkgY29udHJhc3QsIHRoZSBOZXRsaW5rIHZlcnNpb24gcHJv dmlkZXMgc2V2ZXJhbCBiZW5lZml0cywgaW5jbHVkaW5nIGltcHJvdmVkCj4gPiArcmVhZGFiaWxp dHksIHRoYW5rcyB0byB0aGUgdXNlIG9mIGVudW1zIHRoYXQgY2xlYXJseSBpZGVudGlmeSBlYWNo IHZhbHVlLCBhbmQKPiA+ICtzaW1wbGlmaWVkIHdyaXRpbmcsIGFzIHRoZSBpbnRlcmZhY2UgdGFr ZXMgY2FyZSBvZiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBrZXJuZWwKPiA+ICtzcGFjZSwgYWxsb3dp bmcgcHJvZ3JhbW1lcnMgdG8gZm9jdXMgb24gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgd2l0aG91 dAo+ID4gK3dvcnJ5aW5nIGFib3V0IGJ1Z3MgbGlrZSBkb3VibGUgZmV0Y2hpbmcuCj4gPiArCj4g PiArTm93IHRoYXQgd2UndmUgY292ZXJlZCB0aGUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQg YmFzaWMgZGF0YSBzdHJ1Y3R1cmUsCj4gPiAraXQncyB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8g dGhlIGJlc3QgcHJhY3RpY2VzIGZvciBoYW5kbGluZyBOZXRsaW5rCj4gPiArYXR0cmlidXRlcy4g SWYgeW91J3JlIGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgbW9yZSBhYm91dCB0aGUgdW5kZXJseWlu ZyBjb2RlLAo+ID4gK3dlIHJlY29tbWVuZCBjaGVja2luZyBvdXQgdGhlIGBgbGliL25sYXR0ci5j YGAgZmlsZSBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgo+ID4gK1dpdGggdGhhdCBzYWlkLCBsZXQn cyBtb3ZlIG9uIHRvIHRoZSB0aXBzIGFuZCB0cmlja3MgZm9yIHdvcmtpbmcgd2l0aCBOZXRsaW5r Cj4gPiArYXR0cmlidXRlcy4KPiA+ICsKPiA+ICtCZXN0IFByYWN0aWNlcwo+ID4gKz09PT09PT09 PT09PT09Cj4gPiArCj4gPiArIzEgVXNlIHByb3ZpZGVkIGhlbHBlcnMgdG8gcGFyc2UgYW5kIGFj Y2VzcyBubGF0dHIKPiA+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ID4gKwo+ID4gK0FzIG1lbnRpb25lZCBhYm92ZSwgdGhlIE5ldGxpbmsgYXR0 cmlidXRlcyBwYXJzaW5nIHByb2NlZHVyZSBvcGVyYXRlcyBvbgo+ID4gK3BvaW50ZXJzLCB3aGlj aCBpcyByYXRoZXIgZXJyb3ItcHJvbmUuIFRvIGF2b2lkIGludHJvZHVjaW5nIGJ1Z3MsIGFzIHdl bGwgYXMKPiA+ICtlbmhhbmNlIGNvZGUgbWFpbnRhaW5hYmlsaXR5LCBpdCdzIHJlY29tbWVuZGVk IHRvIHV0aWxpemUgdGhlIHByb3ZpZGVkIHBhcnNlcnMKPiA+ICthbmQgaGVscGVycyB3aGVuIHdv cmtpbmcgd2l0aCBOZXRsaW5rIGF0dHJpYnV0ZXMuCj4gPiArCj4gPiArV2hpbGUgaXQncyBnZW5l cmFsbHkgcmVjb21tZW5kZWQgdG8gdXNlIGV4aXN0aW5nIHBhcnNlcnMgdG8gcGFyc2UgTmV0bGlu awo+ID4gK2F0dHJpYnV0ZXMsIHRoZXJlIG1heSBiZSAob2xkKSBjYXNlcyB3aGVyZSBrZXJuZWwg Y29kZSBuZWVkcyB0byBtYW51YWxseSBwYXJzZQo+ID4gK3RoZSBhdHRyaWJ1dGVzLiBXZSdsbCBk aXNjdXNzIHRoaXMgZnVydGhlciBsYXRlciBvbi4gUmVnYXJkbGVzcywgaXQncyBzdWdnZXN0ZWQK PiA+ICt0byB1c2UgaGVscGVycyB0byBwZXJmb3JtIHRoZSBhY2Nlc3MgYWN0aW9uIGZvciBiZXR0 ZXIgY29kZSBtYWludGFpbmFiaWxpdHkgYW5kCj4gPiArcmVsaWFiaWxpdHkuCj4gPiArCj4gPiAr Rm9yIGV4YW1wbGUsIG9uZSBzaG91bGQgbmV2ZXIgYWRkIHRoZSBvZmZzZXQgdG8gdGhlIGF0dHJp YnV0ZSBwb2ludGVyIGhpbXNlbGYuCj4gCj4gcy9oaW1zZWxmL2l0c2VsZi8KPiAKPiA+ICsKPiA+ ICsuLiBjb2RlLWJsb2NrOjogYwo+ID4gKwo+ID4gKyAgIHN0cnVjdCBubGF0dHIgKm5sYSA9IC4u LjsKPiA+ICsgICB1OCAqcDsKPiA+ICsKPiA+ICsgICBwID0gKGNoYXIqKW5sYSArIHNpemVvZihz dHJ1Y3QgbmxhdHRyKTsgLy8gIENvcnJlY3QgYnV0IG5vdCBzdWdnZXN0ZWQKPiA+ICsgICBwID0g bmxhX2RhdGEobmxhKTsgIC8vIENvcnJlY3QgYXMgd2VsbCBhcyBjb25jaXNlCj4gPiArCj4gPiAr U2V2ZXJhbCBoZWxwZXJzIGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGJ1dCBvZnRlbiBvdmVybG9v a2VkLCBpbmNsdWRpbmcKPiA+ICtgYG5sYV9tZW1jcHlgYFwgLCBgYG5sYV9tZW1kdXBgYFwgLCBg YG5sYV9tZW1jbXBgYFwgLCBhbmQgYGBubGFfc3Ryc2NweWBgXCAsCj4gPiArYGBubGFfc3RyZHVw YGBcICwgYGBubGFfc3RyY21wYGAuIFRoZXNlIGhlbHBlcnMgY2FuIGdyZWF0bHkgc2ltcGxpZnkg dGhlCj4gPiArcHJvY2VzcyBvZiB3b3JraW5nIHdpdGggTmV0bGluayBhdHRyaWJ1dGVzIGFuZCBy ZWR1Y2UgdGhlIHJpc2sgb2YgZXJyb3JzLgo+ID4gKwo+ID4gKy4uIGNvZGUtYmxvY2s6OiBjCj4g PiArCj4gPiArICAgc3RydWN0IG5sYXR0ciAqbmxhID0gLi4uOwo+ID4gKyAgIHU4IGJ1ZmZlcltY WFhdOwo+ID4gKwo+ID4gKyAgIG1lbWNweShidWZmZXIsIG5sYV9kYXRhKG5sYSksIFhYWCk7ICAg IC8vIFdvcmR5IGFuZCBjb3VsZCBiZSBidWdneQo+ID4gKyAgIG5sYV9tZW1jcHkoYnVmZmVyLCBu bGEsIFhYWCk7ICAgLy8gQ29uY2lzZSBhbmQgYWxzbyBzYWZlCj4gPiArCj4gPiArV2hlbiB5b3Ug bmVlZCB0byBhY2Nlc3MgYSBOZXRsaW5rIGF0dHJpYnV0ZSwgaXQncyByZWNvbW1lbmRlZCB0byBj aGVjayBpZgo+ID4gK3RoZXJlJ3MgYWxyZWFkeSBhIGhlbHBlciBmdW5jdGlvbiBhdmFpbGFibGUg aW4gdGhlIGBgaW5jbHVkZS9uZXQvbmV0bGluay5oYGAKPiA+ICtoZWFkZXIgZmlsZS4gVGhpcyB3 aWxsIGhlbHAgeW91IGF2b2lkIGludHJvZHVjaW5nIGNvbXBsZXggYW5kIGVycm9yLXByb25lCj4g PiArcG9pbnRlciBhcml0aG1ldGljIGludG8geW91ciBjb2RlLgo+ID4gKwo+ID4gKwo+ID4gKyMy IE5ldmVyIGFjY2VzcyBubGF0dHIgd2l0aG91dCBjaGVja2luZwo+ID4gKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKwo+ID4gK0xldCdzIHRha2UgYW5vdGhlciBs b29rIGF0IHRoZSBleGFtcGxlIGNvZGUgZm9yIHV0aWxpemluZyBwYXJzZXJzLgo+ID4gKwo+ID4g Ky4uIGNvZGUtYmxvY2s6OiBjCj4gPiArCj4gPiArICAgdTE2IHZhbDsKPiA+ICsgICBpZiAodGJb RVhBTVBMRUFfMl0pCj4gPiArICAgICAgIHZhbCA9IG5sYV9nZXRfdTE2KHRiW0VYQU1QTEVBXzJd KTsKPiA+ICsKPiA+ICtSZWNhbGwgdGhhdCB3ZSBub3RlZCBlYXJsaWVyIHRoYXQgdGhpcyBhY2Nl c3MgY29kZSBoYXMgYSBidWcgc2luY2UgaXQgbmFpdmVseQo+ID4gK3RydXN0cyB0aGUgaW5wdXQg cHJvdmlkZWQgYW5kIGFzc3VtZXMgdGhhdCBhIGBgdTE2YGAgdmFsdWUgaXMgcHJlc2VudC4gTm93 LAo+ID4gK2ltYWdpbmUgYSBzY2VuYXJpbyB3aGVyZSBhIG1hbGljaW91cyB1c2VyIGRlbGliZXJh dGVseSBwcm92aWRlcyBhIG1hbGZvcm1lZAo+ID4gK2BgRVhBTVBMRUFfMmBgLCBhcyBzaG93biBi ZWxvdy4KPiA+ICsKPiA+ICsuLiBjb2RlLWJsb2NrOjoKPiA+ICsKPiA+ICsgICAgbmxhX2xlbiAg IG5sYV90eXBlCj4gPiArICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0gLSAtIC0gLSAtIC0gLSAt ICsKPiA+ICsgICB8ICAgMCAgIHwgRVhBTVBMRUFfMiB8ICBIZWFwIERpcnR5IERhdGEgfAo+ID4g KyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLSstIC0gLSAtIC0gLSAtIC0gLSArCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgXgo+ID4gKyAgICAgICAgICAgICBhdHRyaWJ1dGVzIGVuZCBsb2Nh dGlvbgo+ID4gKwo+ID4gK0luIHRoaXMgc2NlbmFyaW8sIHRoZSBhdHRyaWJ1dGUgYGBFWEFNUExF QV8yYGAgaXMgcG9zaXRpb25lZCBhcyB0aGUgZmluYWwKPiA+ICthdHRyaWJ1dGUsIHNpdHVhdGVk IGFkamFjZW50IHRvIHRoZSBoZWFwIGRpcnR5IGRhdGEgKHNpbmNlIHRoZSBubG1zZyBpcwo+ID4g K2FsbG9jYXRlZCB3aXRoIHRoZSBgYEdGUF9LRVJORUxgYCBmbGFnIHdpdGhvdXQgYGBHRlBfWkVS T2BgXCApLiBGdXJ0aGVybW9yZSwKPiA+ICthbHRob3VnaCB0aGUgbmxhX3R5cGUgaXMgYGBFWEFN UExFQV8yYGAgYXMgZXhwZWN0ZWQsIHRoZSBubGFfbGVuIGlzIGBgMGBgLAo+ID4gK3JhdGhlciB0 aGFuIHRoZSBleHBlY3RlZCBgYHNpemVvZih1MTYpYGAsIGluIHRoZSBtYWxmb3JtZWQgcGFja2V0 Lgo+ID4gKwo+ID4gK1RoZSBhY2Nlc3MgY29kZSBlcnJvbmVvdXNseSBiZWxpZXZlcyB0aGUgcGFy c2VkIGF0dHJpYnV0ZSBoYXMgYSB2YWxpZCBsZW5ndGgsCj4gPiArbGVhZGluZyB0byBvdXQtb2Yt YXR0cmlidXRlIGFjY2Vzcy4gVGhpcyBoYXMgc2VyaW91cyBjb25zZXF1ZW5jZXMsIGFzIGl0IGNh dXNlcwo+ID4gK3RoZSBoZWFwIG9mIGRpcnR5IGRhdGEgdG8gYmUgbG9hZGVkIGludG8gdGhlIHZh cmlhYmxlIGBgdmFsYGBcICwgd2hpY2ggY2FuIGJlCj4gPiArc3RvcmVkIGluIGEgZ2xvYmFsIHN0 YXRlIGFuZCBhY2Nlc3NlZCBmcm9tIHVzZXIgc3BhY2UuIFRoaXMgbGVha2FnZSBvZiBoZWFwCj4g PiAraW5mb3JtYXRpb24gY2FuIGJlIGV4cGxvaXRlZCBieSBhIHNraWxsZWQgYXR0YWNrZXIgdXNp bmcgSGVhcCBGZW5nIFNodWksIHRoZW4KPiA+ICtnYWluIHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8g c2Vuc2l0aXZlIGRhdGEsIHBvdGVudGlhbGx5IGFsbG93aW5nIHRoZW0gdG8gYnlwYXNzCj4gPiAr cHJvdGVjdGlvbnMgbGlrZSBLQVNMUiBvciBTTEFCX0hBUkRFTi4KPiA+ICsKPiA+ICtUbyBwcmV2 ZW50IHN1Y2ggYSBwcm9ibGVtIGZyb20gb2NjdXJyaW5nLCBpdCdzIGVzc2VudGlhbCB0byB2ZXJp ZnkgdGhlCj4gPiArYXR0cmlidXRlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFjY2VzcyBpdC4gRm9y IGluc3RhbmNlLCB3ZSBjYW4gbW9kaWZ5IHRoZQo+ID4gK2V4YW1wbGUgY29kZSBhcyBmb2xsb3dz Ogo+ID4gKwo+ID4gKy4uIGNvZGUtYmxvY2s6OiBjCj4gPiArCj4gPiArICAgdTE2IHZhbDsKPiA+ ICsgICBpZiAodGJbRVhBTVBMRUFfMl0gXAo+ID4gKyAgICAgICAmJiBubGFfbGVuKHRiW0VYQU1Q TEVBXzJdKSA+PSBzaXplb2YodTE2KSkgLy8gbGVuZ3RoIGNoZWNrCj4gPiArICAgICAgIHZhbCA9 IG5sYV9nZXRfdTE2KHRiW0VYQU1QTEVBXzJdKTsKPiA+ICsKPiA+ICtUaGUgc2ltaWxhciBjYXNl IGlzIHRoZSBleGFtcGxlIHVzaW5nIGBgbWVtY3B5YGAgdG8gYWNjZXNzIHRoZSBhdHRyaWJ1dGUu Cj4gPiArCj4gPiArLi4gY29kZS1ibG9jazo6IGMKPiA+ICsKPiA+ICsgICAgdTggYnVmZmVyW1hY WF07Cj4gPiArICAgIG1lbWNweShidWZmZXIsIG5sYV9kYXRhKG5sYSksIFhYWCk7Cj4gPiArCj4g PiArVGhlIGNvZGUgbWlzdGFrZW5seSBhc3N1bWVzIHRoYXQgdGhlIGBgbmxhYGAgaGFzIGEgbGVu Z3RoIG9mIGBgWFhYYGBcICwgbGVhZGluZwo+ID4gK3RvIG91dC1vZi1hdHRyaWJ1dGUgYWNjZXNz IHRoYXQgcG90ZW50aWFsbHkgY29waWVzIGRpcnR5IGRhdGEgdG8gdGhlCj4gPiArYGBidWZmZXJg YFwgLiBIb3dldmVyLCBgYG5sYV9tZW1jcHlgYCBpcyBpbW11bmUgdG8gc3VjaCBidWdzIGJlY2F1 c2UgaXQKPiA+ICtpbnRlcm5hbGx5IGNhbGxzIGBgbmxhX2xlbmBgIHRvIGVuc3VyZSB0aGF0IG9u bHkgZGF0YSB3aXRoaW4gdGhlIGJvdW5kYXJ5IGlzCj4gPiArY29waWVkLiBUaGlzIGFsc28gdW5k ZXJzY29yZXMgdGhlIGltcG9ydGFuY2Ugb2YgIzEgYmVzdCBwcmFjdGljZS4KPiA+ICsKPiA+ICtX aGlsZSB0aGUgbGVuZ3RoIGNoZWNrLCB3aGljaCBlbnN1cmVzIHRoZSBhdHRyaWJ1dGUgaGFzIGVu b3VnaCBkYXRhIHRvIGJlCj4gPiArYWNjZXNzZWQgYnkgYG5sYV9nZXRfdTE2YCwgaXMgYSBnb29k IHN0YXJ0aW5nIHBvaW50LCBpdCdzIG5vdCB0aGUgbW9zdAo+ID4gK2VmZmljaWVudCBhcHByb2Fj aCB0byBwZXJmb3JtIHN1Y2ggY2hlY2tzIGV4dGVuc2l2ZWx5IHRocm91Z2hvdXQgdGhlIGNvZGUu Cj4gPiArTW9yZW92ZXIsIHRoZXJlIGFyZSBvdGhlciBpbXBvcnRhbnQgZmFjdG9ycyB0byBjb25z aWRlciBiZXlvbmQgZGF0YSBsZW5ndGgsCj4gPiArc3VjaCBhcyB2YWx1ZSByYW5nZXMsIHdoZW4g ZGV0ZXJtaW5pbmcgdGhlIHZhbGlkaXR5IG9mIGFuIGF0dHJpYnV0ZS4gSW4KPiA+ICtwcmFjdGlj ZSwgZGF0YSBsZW5ndGggaXMganVzdCBvbmUgb2YgdGhlIGJhc2ljIGFzcGVjdHMgd2UgbmVlZCB0 byBleGFtaW5lLgo+ID4gKwo+ID4gK1RvIGFjaGlldmUgbW9yZSBjb252ZW5pZW50IGFuZCBmbGV4 aWJsZSB2YWxpZGF0aW9uLCBhIHZlcnkgaW1wb3J0YW50IGRhdGEKPiA+ICtzdHJ1Y3R1cmUgbmFt ZWQgYGBubGFfcG9saWN5YGAgaXMgZW1wbG95ZWQuCj4gPiArCj4gPiArLi4gY29kZS1ibG9jazo6 IGMKPiA+ICsKPiA+ICsgICBzdHJ1Y3QgbmxhX3BvbGljeSB7Cj4gPiArICAgICAgIHU4ICAgICAg dHlwZTsKPiA+ICsgICAgICAgdTggICAgICB2YWxpZGF0aW9uX3R5cGU7Cj4gPiArICAgICAgIHUx NiAgICAgbGVuOwo+ID4gKyAgICAgICB1bmlvbiB7Cj4gPiArICAgICAgICAgICAvKioKPiA+ICsg ICAgICAgICAgICAqIC4uLiBmaWVsZCBmb3IgYWR2YW5jZWQgdmFsaWRhdGlvbiAuLi4KPiA+ICsg ICAgICAgICAgICAqLwo+ID4gKyAgICAgICB9Owo+ID4gKyAgIH07Cj4gPiArCj4gPiArVGhlcmUg YXJlIHR3byB3YXlzIHRvIGVtcGxveSBgYG5sYV9wb2xpY3lgYDogcGFzcyB0aGUgcG9saWN5IHRv IHRoZSBwYXJzZXIsCj4gPiArd2hpY2ggd2lsbCB2YWxpZGF0ZSB0aGUgcGFyc2luZyBwcm9jZXNz IChzZWUgdGhlIGBgcG9saWN5YGAgcGFyYW1ldGVyIGluIHRob3NlCj4gPiArcGFyc2VycyksIG9y IGFjdGl2ZWx5IGNhbGwgdmFsaWRhdGlvbiBoZWxwZXJzIGxpa2UgYGBubG1zZ192YWxpZGF0ZWBg IGFuZAo+ID4gK2BgbmxhX3ZhbGlkYXRlYGAgdG8gY2hlY2sgdGhlIGF0dHJpYnV0ZXMuIFRoZSBm aXJzdCBvcHRpb24gaXMgZ2VuZXJhbGx5Cj4gPiArcHJlZmVycmVkIGJlY2F1c2UgaXQgZW5zdXJl cyB0aGF0IHRoZSBwb2ludGVyIGluIHRoZSBwYXJzZWQgZGVzdGluYXRpb24gYXJyYXkKPiA+ICtw b2ludHMgdG8gYSB2YWxpZCBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgc2FmZWx5IGFjY2Vzc2VkLCBl bGltaW5hdGluZyB0aGUgbmVlZAo+ID4gK2ZvciBhbiBhZGRpdGlvbmFsIGNoZWNrLiBIZXJlJ3Mg YW4gZXhhbXBsZToKPiA+ICsKPiA+ICsuLiBjb2RlLWJsb2NrOjogYwo+ID4gKwo+ID4gKyAgIHN0 cnVjdCBubGFfcG9saWN5IGV4YW1wbGVfcG9saWN5W0VYQU1QTEVBX01BWCArIDFdID0gewo+ID4g KyAgICAgICBbRVhBTVBMRUFfMl0gPSB7IC50eXBlID0gTkxBX1U4IH0sCj4gPiArICAgfTsKPiA+ ICsgICAvLyAuLi4KPiA+ICsgICBzdHJ1Y3QgbmxhdHRyICp0YltFWEFNUExFQV9NQVgrMV07Cj4g PiArICAgdTE2IHZhbHVlOwo+ID4gKyAgIG5sYV9wYXJzZSh0YiwgRVhBTVBMRUFfTUFYLCBubGEs IC4uLiwgZXhhbXBsZV9wb2xpY3ksIGV4dGFjayk7Cj4gPiArCj4gPiArICAgdTE2IHZhbDsKPiA+ ICsgICBpZiAodGJbRVhBTVBMRUFfMl0pIC8vIGlmIG5vdCBOVUxMLCBhbHJlYWR5IHBhc3MgdGhl IHBvbGljeSBsZW5ndGggY2hlY2sKPiA+ICsgICAgICAgdmFsID0gbmxhX2dldF91MTYodGJbRVhB TVBMRUFfMl0pOyAgLy8gc2FmZQo+ID4gKwo+ID4gK0luIGFkZGl0aW9uIHRvIGBgTkxBX1U4YGBc ICwgdGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgZGVmaW5lZCB0eXBlcywgc3VjaCBhcwo+ID4gK2Bg TkxBX0JJTkFSWWBgIGFuZCBgYE5MQV9TVFJJTkdgYCwgdGhhdCBjYW4gYmUgdXNlZCB0byBwcmVw YXJlIGEgbmxhX3BvbGljeS4KPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbgo+IAo+ID4gK0hvd2V2ZXIsIHR3byBh dHRyaWJ1dGVzIGRlc2VydmUgc3BlY2lhbCBhdHRlbnRpb246IGBgTkxBX05FU1RFRGBgIGFuZAo+ ID4gK2BgTkxBX05FU1RFRF9BUlJBWWBgLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSB1c2VkIHRvIHZh bGlkYXRlIGNvbXBsZXggc3RydWN0dXJlcwo+ID4gK3RoYXQgY29udGFpbiBuZXN0ZWQgZWxlbWVu dHMsIGFuZCB0aGV5IGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gZGVhbGluZwo+ID4gK3dp dGggaGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcy4gRm9yIGluc3RhbmNlLCB3ZSBjYW4gZGVm aW5lIGEgYGBubGFfcG9saWN5YGAKPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbgo+IAo+ID4gK2ZvciB0aGUgRm9v IGV4YW1wbGUgYWJvdmUgdXNpbmcgdGhlc2UgYXR0cmlidXRlcy4KPiA+ICsKPiA+ICsuLiBjb2Rl LWJsb2NrOjogYwo+ID4gKwo+ID4gKyAgIHN0cnVjdCBubGFfcG9saWN5IGZvb19wb2xpY3lfbmVz dGVkW0ZPT0NISUxEX01BWCArIDFdID0gewo+ID4gKyAgICAgICBbRk9PQ0hJTERfQV0gPSB7IC50 eXBlID0gTkxBX1UzMiB9LAo+ID4gKyAgICAgICBbRk9PQ0hJTERfQl0gPSB7IC50eXBlID0gTkxB X1UzMiB9LAo+ID4gKyAgIH07Cj4gPiArCj4gPiArICAgc3RydWN0IG5sYV9wb2xpY3kgZm9vX3Bv bGljeVtFWEFNUExFQV9NQVggKyAxXSA9IHsKPiA+ICsgICAgICAgW0ZPT0FfQ10gPSB7IC50eXBl ID0gTkxBX1UzMiB9LAo+ID4gKyAgICAgICBbRk9PQV9EXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0s Cj4gPiArICAgICAgIFtGT09BX0NISUxEXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKGZvb19wb2xpY3lf bmVzdGVkKSwKPiA+ICsgICB9Owo+ID4gKwo+ID4gK2BgbmxhX3BvbGljeWBgIGJ5IG5vIG1lYW5z IG1ha2VzIHRoZSB2YWxpZGF0aW9uIGNsZWFuIGFuZCBncmFjZWZ1bCBoZW5jZSBzaG91bGQKPiA+ ICtiZSBlbXBsb3llZCBmaXJzdCB0aGFuIG1hbnVhbCBjaGVja3MuIFRoZSBnZW5lcmFsIE5ldGxp bmsgaW50ZXJmYWNlIGFsbG93cyB0aGUKPiAKPiAgICAgICAgICAgICAgICBmaXJzdCByYXRoZXIg dGhhbiBtYW51YWwgY2hlY2tzLgo+IAo+ID4gK3VzZXIgdG8gc3BlY2lmeSB0aGUgcG9saWN5IGZv ciBlYWNoIGhhbmRsZXIgYW5kIGZpbmlzaCB0aGUgdmFsaWRhdGlvbiBiZWZvcmUKPiA+ICtjYWxs aW5nIGl0LCB3ZSB3aWxsIHRhbGsgbW9yZSBhYm91dCB0aGlzIG5leHQgc2VjdGlvbi4KPiAKPiAg ICAgICAgICAgIGl0LiBXZQo+IAo+ID4gKwo+ID4gK1doaWxlIHVzaW5nIGBgbmxhX3BvbGljeWBg IGlzIGdlbmVyYWxseSBzdHJhaWdodGZvcndhcmQgYW5kIHJlY29tbWVuZGVkLCB0aGVyZQo+ID4g K2FyZSBzb21lIGltcG9ydGFudCBjb25zaWRlcmF0aW9ucyB0byBrZWVwIGluIG1pbmQuCj4gPiAr Cj4gPiArRmlyc3QgYW5kIGZvcmVtb3N0LCAqKkRvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIG5s YV9wb2xpY3kgd2hlbiBhIG5ldwo+ID4gK2F0dHJpYnV0ZSB0eXBlIGlzIGludHJvZHVjZWQqKi4g VGhlcmUgYXJlIGNhc2VzIHdoZW4gZGV2ZWxvcGVycywgbm8gbWF0dGVyIGZvcgo+ID4gK2NsYXNz aWMgTmV0bGluayBvciBnZW5lcmFsIE5ldGxpbmsgaW50ZXJmYWNlcywgbWFrZSBzdWNoIG1pc3Rh a2VzLiBJZiB0aGUKPiA+ICtwYXJzaW5nIGRvZXMgbm90IGZvbGxvdyB0aGUgc3RyaWN0IG1vZGUg KHdoaWNoIHdpbGwgYmUgZGlzY3Vzc2VkIGluICMzKSwgc3VjaCBhCj4gPiArbWlzdGFrZSB3aWxs IHJlc3VsdCBpbiB0aGUgb3V0LW9mLWF0dHJpYnV0ZSBhY2Nlc3MgYnVnLgo+ID4gKwo+ID4gK1Nl Y29uZCwgKipQZXJmb3JtIG1hbnVhbCBjaGVja3MgZm9yIG1hbnVhbCBwYXJzaW5nKiouIEV4YW1p bmUgdGhlIGtlcm5lbCBjb2RlLAo+ID4gK3JlYWRlcnMgY2FuIGZpbmQgY2FzZXMgdGhhdCBwcmVw YXJlIGBgbmxhX3BvbGljeWBgIGluIGFuIHVuY29udmVudGlvbmFsIG1hbm5lcgo+ID4gK3N1Y2gg YXMgdGhlIGZvbGxvd2luZy4KPiA+ICsKPiA+ICsuLiBjb2RlLWJsb2NrOjogYwo+ID4gKwo+ID4g KyAgIC8vIGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMKPiA+ICsgICBzdGF0aWMg Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYm9uZF9wb2xpY3lbSUZMQV9CT05EX01BWCArIDFdID0g ewo+ID4gKyAgICAgICAvLyAuLi4KPiA+ICsgICAgICAgW0lGTEFfQk9ORF9BUlBfSVBfVEFSR0VU XSAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKPiA+ICsgICB9Owo+ID4gKwo+ID4gK1RoZSBh dHRyaWJ1dGUgYGBJRkxBX0JPTkRfQVJQX0lQX1RBUkdFVGBgIGlzIGRlZmluZWQgd2l0aCB0aGUg YGBOTEFfTkVTVEVEYGAKPiA+ICt0eXBlLCBidXQgd2l0aG91dCBhIG5lc3RlZCBgYG5sYV9wb2xp Y3lgYC4gV2hpbGUgaXQgbWF5IHNlZW0gbG9naWNhbCB0byBvbmUgdG8KPiA+ICthbGxvdyBuZXN0 ZWQgdmFsaWRhdGlvbiBmb3IgdGhpcyBhdHRyaWJ1dGUsIHVuZm9ydHVuYXRlbHksIGl0IGlzIG5v dC4KPiA+ICtUaGUgY29kZSBlbXBsb3lzIGFuIHVuZG9jdW1lbnRlZCBhbmQgc29waGlzdGljYXRl ZCBhcHByb2FjaCB0byBvcmdhbml6aW5nCj4gPiArYXR0cmlidXRlcywgd2hlcmUgdGhlIGFycmF5 IGluZGV4IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgYXR0cmlidXRlIHR5cGUuCj4gPiArQ3VycmVu dGx5LCB0aGVyZSBpcyBubyB2YWxpZGF0aW9uIG1lY2hhbmlzbSBhdmFpbGFibGUgdG8gaGFuZGxl IHN1Y2ggYSBjYXNlLgo+ID4gKwo+ID4gK0Jlc2lkZXMsIHRoZXJlIG1heSBiZSBvdGhlciBjYXNl cyB3aGVyZSB0aGUga2VybmVsIGNvZGUgYWxzbyBkZXZpYXRlcyBmcm9tIHRoZQo+ID4gK2NvbnZl bnRpb25hbCBhcHByb2FjaCBvZiB1c2luZyBwYXJzZXJzIGFuZCBpbnN0ZWFkIG1hbnVhbGx5IGl0 ZXJhdGVzIHRocm91Z2gKPiA+ICt0aGUgYXR0cmlidXRlcyBUTFYsIHBlcmZvcm1pbmcgbWFudWFs IHBhcnNpbmcuCj4gPiArCj4gPiArVG8gdmFsaWRhdGUgY2FzZXMgd2hlcmUgbWFudWFsIHBhcnNp bmcgaXMgdXNlZCwgbWFudWFsIGxlbmd0aCBjaGVja3MgYmFzZWQgb24KPiA+ICtgYG5sYV9sZW5g YCBhcmUgcmVxdWlyZWQsIGFzIGRlbW9uc3RyYXRlZCBpbiB0aGUgcGFyc2luZyBjb2RlIGZvcgo+ ID4gK2BgSUZMQV9CT05EX0FSUF9JUF9UQVJHRVRgYCBiZWxvdy4KPiA+ICsKPiA+ICsuLiBjb2Rl LWJsb2NrOjogYwo+ID4gKwo+ID4gKyAgIGlmIChkYXRhW0lGTEFfQk9ORF9BUlBfSVBfVEFSR0VU XSkgewo+ID4gKyAgICAgICAvLyAuLi4KPiA+ICsgICAgICAgbmxhX2Zvcl9lYWNoX25lc3RlZChh dHRyLCBkYXRhW0lGTEFfQk9ORF9BUlBfSVBfVEFSR0VUXSwgcmVtKSB7Cj4gPiArICAgICAgICAg ICBfX2JlMzIgdGFyZ2V0Owo+ID4gKwo+ID4gKyAgICAgICAgICAgLy8gbWFudWFsIGxlbmd0aCBj aGVjayBoZXJlCj4gPiArICAgICAgICAgICBpZiAobmxhX2xlbihhdHRyKSA8IHNpemVvZih0YXJn ZXQpKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKyAgICAg ICAgICAgdGFyZ2V0ID0gbmxhX2dldF9iZTMyKGF0dHIpOwo+ID4gKyAgICAgICAgICAgLy8gLi4u Cj4gPiArCj4gPiArYGBOTEFfUE9MSUNZX05FU1RFRGBgIGlzIGp1c3Qgb25lIG9mIG1hbnkgaGVs cGZ1bCB0b29scyBhdCB5b3VyIGRpc3Bvc2FsLiBJZgo+ID4gK3lvdSdyZSBsb29raW5nIHRvIHZh bGlkYXRlIHRoZSB2YWx1ZSByYW5nZSBvZiBhbiBhdHRyaWJ1dGUsIGNvbnNpZGVyIHVzaW5nCj4g PiArYGBOTEFfUE9MSUNZX1JBTkdFYGBcICwgYGBOTEFfUE9MSUNZX01JTmBgXCAsIGFuZCBgYE5M QV9QT0xJQ1lfTUFYYGBcIC4gQW5kIGlmCj4gPiAreW91IG5lZWQgdG8gcGVyZm9ybSBhIHN0cmlj dCBsZW5ndGggY2hlY2ssIGBgTkxBX1BPTElDWV9FWEFDVF9MRU5gYCBpcyB5b3VyCj4gPiArYmVz dCBiZXQuIFNpbXBseSBhc3NpZ25pbmcgYSB2YWx1ZSB0byBsZW4gaW4gbmxhX3BvbGljeSB3aWxs IGVuc3VyZSB0aGF0IHRoZQo+ID4gK2F0dHJpYnV0ZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIG9y IGVxdWFsIHRvIHlvdXIgZXhwZWN0ZWQgdmFsdWUsIHdpdGhvdXQKPiA+ICtzdHJpY3RseSBlcXVh bGluZyBpdC4KPiA+ICsKPiA+ICsjMyBFbWJyYWNlIGFuZCB0YWtlIGFkdmFudGFnZSBvZiB0aGUg c3RyaWN0bmVzcwo+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCj4gPiArCj4gPiArSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHdlIHRhbGtlZCBhYm91 dCAqKnN0cmljdCBtb2RlKiosIHdoaWNoIGlzIHJlbGF0ZWQgdG8KPiA+ICt0aGUgbGFzdCBiZXN0 IHByYWN0aWNlIHdlJ2xsIGRpc2N1c3MuIFdoaWxlIHJlYWRpbmcgdGhyb3VnaCB0aGUgaGVscGVy cwo+ID4gK2RlY2xhcmVkIGluIGBgaW5jbHVkZS9uZXQvbmV0bGluay5oYGBcICwgcmVhZGVycyBt YXkgaGF2ZSBub3RpY2VkIHNvbWUgb2YgdGhlbQo+ID4gK2hhdmUgdGhlIGBgX2RlcHJlY2F0ZWRg YCBzdWZmaXgsIHN1Y2ggYXMgYGBubGFfcGFyc2VfZGVwcmVjYXRlZGBgIGFuZAo+ID4gK2Bgbmxt c2dfcGFyc2VfZGVwcmVjYXRlZGBgLiBUaGVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucyBhcmUgc3Rp bGwgd2lkZWx5IHVzZWQgaW4KPiA+ICt0aGUga2VybmVsLCB3aXRoIG92ZXIgMzAwIGNhbGwgc2l0 ZXMuIFRoaXMgcmFpc2VzIHNvbWUgcXVlc3Rpb25zOiB3aHkgYXJlIHRoZXkKPiA+ICttYXJrZWQg YXMgZGVwcmVjYXRlZD8gV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBhbmQgdGhl IG5vbi1kZXByZWNhdGVkCj4gPiArdmVyc2lvbnM/IEFuZCBob3cgZG8gd2UgY2hvb3NlIGJldHdl ZW4gdGhlbT8KPiA+ICsKPiA+ICtUaGVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucyBpbiBxdWVzdGlv biB3ZXJlIGludHJvZHVjZWQgaW4gY29tbWl0Cj4gPiArKio4Y2IwODE3NDZjMDMgKCJuZXRsaW5r OiBtYWtlIHZhbGlkYXRpb24gbW9yZSBjb25maWd1cmFibGUgZm9yIGZ1dHVyZSBzdHJpY3RuZXNz IikqKiwKPiA+ICt3aGljaCBhaW1lZCB0byBlbmhhbmNlIHRoZSBjb25maWd1cmFiaWxpdHkgb2Yg cGFyc2luZyBzdHJpY3RuZXNzLiBUaGlzIGNvbW1pdAo+ID4gK3NwbGl0IHRoZSBwYXJzaW5nIHN0 cmljdG5lc3MgaW50byBzZXZlcmFsIG9wdGlvbnMsIGFzIGRldGFpbGVkIGluIHRoZSBjb21taXQK PiA+ICttZXNzYWdlLgo+ID4gKwo+ID4gKyogVFJBSUxJTkcgICAgIC0gY2hlY2sgdGhhdCB0aGVy ZSdzIG5vIHRyYWlsaW5nIGRhdGEgYWZ0ZXIgcGFyc2luZyBhdHRyaWJ1dGVzIChpbiBtZXNzYWdl IG9yIG5lc3RlZCkKPiA+ICsqIE1BWFRZUEUgICAgICAtIHJlamVjdCBhdHRycyBncmVhdGVyIHRo YW4gbWF4IGtub3duIHR5cGUKPiA+ICsqIFVOU1BFQyAgICAgICAtIHJlamVjdCBhdHRyaWJ1dGVz IHdpdGggYGBOTEFfVU5TUEVDYGAgcG9saWN5IGVudHJpZXMKPiA+ICsqIFNUUklDVF9BVFRSUyAt IHN0cmljdGx5IHZhbGlkYXRlIGF0dHJpYnV0ZSBzaXplCj4gPiArCj4gPiArYW5kIG9uZSBtb3Jl IG9wdGlvbiBmb2xsb3dzIHVwIGxhdGVyCj4gPiArCj4gPiArKiBORVNURUQgICAgICAgLSBzdHJp Y3RseSB2YWxpZGF0ZSBgYE5MQV9GX05FU1RFRGBgCj4gPiArCj4gPiArQWZ0ZXIgdGhlIGFmb3Jl bWVudGlvbmVkIGNvbW1pdCwgdGhlIGNvZGUgbm93IGZlYXR1cmVzIHRocmVlIGRpc3RpbmN0IGxl dmVscyBvZgo+ID4gK3N0cmljdG5lc3M6IExpYmVyYWwsIERlcHJlY2F0ZWQgU3RyaWN0LCBhbmQg U3RyaWN0LiBCeSBleGFtaW5pbmcgdGhlIGNvZGUsIGl0Cj4gPiArYmVjb21lcyByZWFkaWx5IGFw cGFyZW50IHdoaWNoIG9wdGlvbnMgYXJlIGVtcGxveWVkIGJ5IGVhY2ggbGV2ZWwuCj4gPiArCj4g PiArLi4gY29kZS1ibG9jazo6IGMKPiA+ICsKPiA+ICsgICBlbnVtIG5ldGxpbmtfdmFsaWRhdGlv biB7Cj4gPiArICAgICAgIE5MX1ZBTElEQVRFX0xJQkVSQUwgPSAwLAo+ID4gKyAgICAgICBOTF9W QUxJREFURV9UUkFJTElORyA9IEJJVCgwKSwKPiA+ICsgICAgICAgTkxfVkFMSURBVEVfTUFYVFlQ RSA9IEJJVCgxKSwKPiA+ICsgICAgICAgTkxfVkFMSURBVEVfVU5TUEVDID0gQklUKDIpLAo+ID4g KyAgICAgICBOTF9WQUxJREFURV9TVFJJQ1RfQVRUUlMgPSBCSVQoMyksCj4gPiArICAgICAgIE5M X1ZBTElEQVRFX05FU1RFRCA9IEJJVCg0KSwKPiA+ICsgICB9Owo+ID4gKwo+ID4gKyAgICNkZWZp bmUgTkxfVkFMSURBVEVfREVQUkVDQVRFRF9TVFJJQ1QgKE5MX1ZBTElEQVRFX1RSQUlMSU5HIHxc Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBOTF9WQUxJREFURV9NQVhUWVBFKQo+ID4g KyAgICNkZWZpbmUgTkxfVkFMSURBVEVfU1RSSUNUIChOTF9WQUxJREFURV9UUkFJTElORyB8XAo+ ID4gKyAgICAgICAgICAgICAgICAgICBOTF9WQUxJREFURV9NQVhUWVBFIHxcCj4gPiArICAgICAg ICAgICAgICAgICAgIE5MX1ZBTElEQVRFX1VOU1BFQyB8XAo+ID4gKyAgICAgICAgICAgICAgICAg ICBOTF9WQUxJREFURV9TVFJJQ1RfQVRUUlMgfFwKPiA+ICsgICAgICAgICAgICAgICAgICAgTkxf VkFMSURBVEVfTkVTVEVEKQo+ID4gKwo+ID4gK1RoZSBgYE5MX1ZBTElEQVRFX1VOU1BFQ2BgIGlz IGludGVyZXN0aW5nIGFuZCBkZXNlcnZlcyBhIG5vdGUuLiBJbiB0aGUKPiA+ICtwcmV2aW91cyBw YXJ0LCBhIGJ1Z2d5IGNhc2UgY2F1c2VkIGJ5IGZvcmdldHRpbmcgdG8gdXBkYXRlIHRoZSBwb2xp Y3kgaXMKPiA+ICttZW50aW9uZWQuIFNwZWNpZmljYWxseSwgc3VjaCBhIGNhc2Ugb25seSBvY2N1 cnMgd2hlbiB1c2luZyB0aGUgZGVwcmVjYXRlZAo+ID4gK2xldmVsLiBJZiBjaG9vc2luZyB0aGUg bGF0ZXN0IHN0cmljdCBsZXZlbCwgd2hpY2ggZW5hYmxlcyB0aGUKPiA+ICtgYE5MX1ZBTElEQVRF X1VOU1BFQ2BgIG9wdGlvbiwgc3VjaCBhIGNhc2UgY2FuIGJlIHByZXZlbnRlZCBhcyB0aGUgbmV3 bHkgYWRkZWQKPiA+ICthdHRyaWJ1dGUgdHlwZSB3aWxsIGJlIGRpcmVjdGx5IHJlamVjdGVkIGR1 ZSB0byB0aGUgYWJzZW5jZSBvZiB0aGUgcG9saWN5LiBUaGlzCj4gPiAraXMgYSBjb21wZWxsaW5n IHJlYXNvbiB0byB1c2UgdGhlIG1vZGVybiBzdHJpY3QgbGV2ZWwgaW5zdGVhZCBvZiB0aGUgb2xk ZXIgb25lcy4KPiA+ICsKPiA+ICtXaGlsZSB0aGUgYmVuZWZpdHMgb2YgdXNpbmcgYGBOTF9WQUxJ REFURV9TVFJJQ1RgYCBhcmUgY2xlYXIsIHNpbXBseSByZXBsYWNpbmcKPiA+ICthbGwgZGVwcmVj YXRlZCBwYXJzZXJzIHdpdGggdGhpcyBuZXcgb3B0aW9uIGNvdWxkIHJlc3VsdCBpbiBjb21wYXRp YmlsaXR5Cj4gPiAraXNzdWVzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IG9sZGVyIHVzZXIgc3BhY2Ug Y29kZSBtYXkgbm90IGZvbGxvdyBhIHN0cmljdAo+ID4gK2ltcGxlbWVudGF0aW9uLiBUbyBhZGRy ZXNzIHRoaXMgY29uY2VybiwgSm9oYW5uZXMgQmVyZywgdGhlIGF1dGhvciBvZiB0aGUKPiA+ICth Zm9yZW1lbnRpb25lZCBjb21taXQsIHByb3ZpZGVkIGEgc3Vic2VxdWVudCBjb21taXQKPiA+ICsq KjU2NzM4ZjQ2MDg0MSAoIm5ldGxpbms6IGFkZCBzdHJpY3QgcGFyc2luZyBmb3IgZnV0dXJlIGF0 dHJpYnV0ZXMiKSoqLAo+ID4gK3doaWNoIGludHJvZHVjZXMgYSBuZXcgZmllbGQsIGBgc3RyaWN0 X3N0YXJ0X3R5cGVgYCwgaW4gdGhlIHN0cnVjdCBubGFfcG9saWN5Cj4gPiArc3RydWN0dXJlLiBU aGlzIG5ldyBmaWVsZCBhbGxvd3MgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGEgImJvdW5kYXJ5IHR5 cGUiIGZvcgo+ID4gK2xlZ2FjeSBjb2RlIHRoYXQgdXRpbGl6ZXMgZGVwcmVjYXRlZCBwYXJzZXJz LCB0aGVyZWJ5IGVuc3VyaW5nIGNvbXBhdGliaWxpdHkKPiA+ICt3aXRoIG9sZGVyIGNvZGUgd2hp bGUgc3RpbGwgcHJvdmlkaW5nIHRoZSBiZW5lZml0cyBvZiBzdHJpY3QgcGFyc2luZy4KPiA+ICsK PiA+ICtMZXQncyBzZWUgYSBnb29kIGV4YW1wbGUsIHN1Y2ggYXMgY29tbWl0Cj4gPiArKioxYTQz MjAxOGMwY2QgKCJuZXQvc2NoZWQ6IGZsb3dlcjogQWxsb3cgbWF0Y2hpbmcgb24gbGF5ZXIgMiBt aXNzIikqKiwKPiA+ICt0byBzZWUgaG93IHRvIGFkZCBhIG5ldyBhdHRyaWJ1dGUgdHlwZSBhbmQg dXBkYXRlIHRoZSBwb2xpY3kgd2l0aAo+ID4gK2Bgc3RyaWN0X3N0YXJ0X3R5cGVgYC4KPiA+ICsK PiA+ICsuLiBjb2RlLWJsb2NrOjogZGlmZgo+ID4gKwo+ID4gKyAgICBAQCAtNTk0LDYgKzU5NCw4 IEBAIGVudW0gewo+ID4gKwo+ID4gKyAgICAgICAgICAgIFRDQV9GTE9XRVJfS0VZX0wyVFBWM19T SUQsICAgICAgLyogYmUzMiAqLwo+ID4gKwo+ID4gKyAgICArICAgICAgIFRDQV9GTE9XRVJfTDJf TUlTUywgICAgICAgICAgICAgLyogdTggKi8KPiA+ICsgICAgKwo+ID4gKyAgICAgICAgICAgIF9f VENBX0ZMT1dFUl9NQVgsCj4gPiArICAgIH07Cj4gPiArCj4gPiArICAgIHN0YXRpYyBjb25zdCBz dHJ1Y3QgbmxhX3BvbGljeSBmbF9wb2xpY3lbVENBX0ZMT1dFUl9NQVggKyAxXSA9IHsKPiA+ICsg ICAgLSAgICAgICBbVENBX0ZMT1dFUl9VTlNQRUNdICAgICAgICAgICAgID0geyAudHlwZSA9IE5M QV9VTlNQRUMgfSwKPiA+ICsgICAgKyAgICAgICBbVENBX0ZMT1dFUl9VTlNQRUNdICAgICAgICAg ICAgID0geyAuc3RyaWN0X3N0YXJ0X3R5cGUgPQo+ID4gKyAgICArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0FfRkxPV0VSX0wyX01JU1MgfSwKPiA+ICsg ICAgICAgICAgICBbVENBX0ZMT1dFUl9DTEFTU0lEXSAgICAgICAgICAgID0geyAudHlwZSA9IE5M QV9VMzIgfSwKPiA+ICsgICAgICAgICAgICBbVENBX0ZMT1dFUl9JTkRFVl0gICAgICAgICAgICAg ID0geyAudHlwZSA9IE5MQV9TVFJJTkcsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLmxlbiA9IElGTkFNU0laIH0sCj4gPiArICAgIEBAIC03MjAs NyArNzI0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsX3BvbGljeVtUQ0Ff RkxPV0VSX01BWCArIDFdID0gewo+ID4gKyAgICAgICAgICAgIFtUQ0FfRkxPV0VSX0tFWV9QUFBP RV9TSURdICAgICAgPSB7IC50eXBlID0gTkxBX1UxNiB9LAo+ID4gKyAgICAgICAgICAgIFtUQ0Ff RkxPV0VSX0tFWV9QUFBfUFJPVE9dICAgICAgPSB7IC50eXBlID0gTkxBX1UxNiB9LAo+ID4gKyAg ICAgICAgICAgIFtUQ0FfRkxPV0VSX0tFWV9MMlRQVjNfU0lEXSAgICAgPSB7IC50eXBlID0gTkxB X1UzMiB9LAo+ID4gKyAgICAtCj4gPiArICAgICsgICAgICAgW1RDQV9GTE9XRVJfTDJfTUlTU10g ICAgICAgICAgICA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksCj4gPiArICAgIH07Cj4gPiAr Cj4gPiArQmVjYXVzZSBlbmZvcmNpbmcgc3RyaWN0IHZhbGlkYXRpb24gdG8gdGhlIG5ld2x5IGFk ZGVkIGF0dHJpYnV0ZQo+ID4gK2BgVENBX0ZMT1dFUl9MMl9NSVNTYGAgcmFpc2VzIG5vIGNvbXBh dGliaWxpdHkgcHJvYmxlbXMsIHRoaXMgY29tbWl0IHNwZWNpZmllcwo+ID4gK3RoZSBgYHN0cmlj dF9zdGFydF90eXBlYGAgdG8gYGBmbF9wb2xpY3lgYCAoZm9yIGluZGV4IDAgYXR0cmlidXRlIG9u bHksIHNlZSB0aGUKPiA+ICtjb21tZW50IGluIGBgc3RydWN0IG5sYV9wb2xpY3lgYCkuICAgIFRo aXMgYXBwcm9hY2ggYWxsb3dzIHRoZSB2YWxpZGF0aW9uCj4gPiArcHJvY2VzcyB0byBlbXBsb3kg dGhlIGBgTkxfVkFMSURBVEVfU1RSSUNUYGAgc3RyaWN0bmVzcyBsZXZlbCBmb3IKPiA+ICtgYFRD QV9GTE9XRVJfTDJfTUlTU2BgIGFuZCBhbnkgZnV0dXJlIGF0dHJpYnV0ZSB0eXBlcyB3aGlsZSBr ZWVwaW5nIGxpYmVyYWwgZm9yCj4gPiArdGhlIG9sZCBhdHRyaWJ1dGVzLCB0aGVyZWJ5IGVuc3Vy aW5nIGNvbXBhdGliaWxpdHkgYW5kIGFkaGVyaW5nIHRvIHByYWN0aWNlICMzLgo+ID4gKwo+ID4g Kwo+ID4gK0Fib3V0IEdlbmVyYWwgTmV0bGluayBDYXNlCj4gPiArPT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiAKPiBJIHdvdWxkIHMvR2VuZXJhbCBOZXRsaW5rL0dlbmVyaWMgTmV0bGluay8g dGhyb3VnaG91dCB0aGUgZG9jdW1lbnQuCj4gCj4gPiArCj4gPiArVGhlIGFmb3JlbWVudGlvbmVk IGNvbnRlbnQgcHJpbWFyaWx5IHByZXNlbnRzIGJlc3QgcHJhY3RpY2VzIGJhc2VkIG9uIHRoZQo+ ID4gK2F1dGhvcidzIGV4cGVyaWVuY2Ugd2l0aCBjbGFzc2ljIE5ldGxpbmsuIEhvd2V2ZXIsIHRo ZXNlIHByYWN0aWNlcyBtYXkgbm90IGJlCj4gPiArcmVsZXZhbnQgb3IgY291bGQgcG90ZW50aWFs bHkgY2F1c2UgY29uZnVzaW9uIHdoZW4gd29ya2luZyB3aXRoIG5ldyBjb2RlIHRoYXQKPiA+ICtl bXBsb3lzIGdlbmVyYWwgTmV0bGluay4gSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLCB3ZSB3aWxs IGV4cGxvcmUgaG93IHVzZXJzIG9mCj4gPiArZ2VuZXJhbCBOZXRsaW5rIGNhbiBhZGRyZXNzIHRo ZXNlIGNvbmNlcm5zIGFuZCBpZGVudGlmeSBhZGRpdGlvbmFsCj4gPiArY29uc2lkZXJhdGlvbnMg dGhhdCBuZWVkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudC4KPiA+ICsKPiA+ICtMZXQncyByZXZp c2l0IHRoZSBGT08gZXhhbXBsZSwgd2hlcmUgdGhlIGdlbmVyYWwgTmV0bGluayBhbHRlcm5hdGl2 ZSB3b3VsZCBsb29rCj4gPiArc29tZXRoaW5nIGxpa2UgdGhpcy4KPiA+ICsKPiA+ICsuLiBjb2Rl LWJsb2NrOjogYwo+ID4gKwo+ID4gKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRf b3BzIGZvb19ubF9vcHNbXSA9IHsKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICAuY21k ICAgICAgICA9IEZPT19DTURfVEVTVCwKPiA+ICsgICAgICAgICAgICAuZG9pdCAgICAgICA9IGZv b19ubF90ZXN0X2RvaXQsCj4gPiArICAgICAgICAgICAgLnBvbGljeSAgICAgPSBmb29fcG9saWN5 LAo+ID4gKyAgICAgICAgICAgIC5tYXhhdHRyICAgID0gRVhBTVBMRUFfTUFYLAo+ID4gKyAgICAg ICAgICAgIC5mbGFncyAgICAgID0gR0VOTF9BRE1JTl9QRVJNLAo+ID4gKyAgICAgICAgICAgIC8v IC52YWxpZGF0ZSAgICA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QKPiA+ICsgICAgICAgIH0s Cj4gPiArICAgIH07Cj4gPiArCj4gPiArICAgIGludCBmb29fbmxfdGVzdF9kb2l0KHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCj4gPiArICAgIHsKPiA+ICsgICAg ICAgIHN0cnVjdCBubGF0dHIgKnRiX2NoaWxkW0ZPT0NISUxEX01BWCArIDFdOwo+ID4gKwo+ID4g KyAgICAgICAgLyogY2FuIGFjY2VzcyBwYXJzZWQgcmVzdWx0IGluIGluZm8tPmF0dHJzW10gKi8K PiA+ICsgICAgICAgIC8vIG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW0ZPT0FfQ10pCj4gPiArICAg ICAgICBpZiAoaW5mby0+YXR0cnNbRk9PQV9DSElMRF0pIHsKPiA+ICsgICAgICAgICAgICBpZiAo bmxhX3BhcnNlX25lc3RlZCh0Yl9jaGlsZCwgRk9PQ0hJTERfTUFYLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmF0dHJzW0ZPT0FfQ0hJTERdLCBmb29fcG9saWN5 X25lc3RlZCwgTlVMTCkpCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMCj4gPiAr ICAgICAgICAgICAgLyogY2FuIGFjY2VzcyBuZXN0ZWQgcGFyc2VkIHJlc3VsdCBpbiB0Yl9jaGls ZFtdICovCj4gPiArICAgICAgICAgICAgLy8gbmxhX2dldF91MzIodGJfY2hpbGRbRk9PQ0hJTERf QV0pCj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLyogb21pdCBhbmQg c3RydWN0IGdlbmxfZmFtaWx5IGFuZCBjYWxsIHRvIGdlbmxfcmVnaXN0ZXJfZmFtaWx5ICovCj4g PiArCj4gPiArSW4gY29udHJhc3QgdG8gdGhlIGNsYXNzaWMgaW1wbGVtZW50YXRpb24sIHdoaWNo IHByaW1hcmlseSBpbnZvbHZlcyByZWdpc3RlcmluZwo+ID4gK2EgY2FsbGJhY2sgZnVuY3Rpb24s IGdlbmVyYWwgTmV0bGluayB1dGlsaXplcyB0aGUgYGBnZW5sX3NwbGl0X29wc2BgIHN0cnVjdHVy ZQo+ID4gKyhvciBgYGdlbmxfb3BzYGAsIGBgZ2VubF9zbWFsbF9vcHNgYCBkZXBlbmRpbmcgb24g dGhlIHNpdHVhdGlvbikgdG8gcHJvdmlkZQo+ID4gK2FkZGl0aW9uYWwgZGV0YWlscyBzdWNoIGFz IHByaXZpbGVnZXMsIGNvbmN1cnJlbmN5LCBhbmQgbW9yZS4gSW4gdGhlIGV4YW1wbGUKPiA+ICtt ZW50aW9uZWQgYWJvdmUsIHdoZW4gdGhlIGBgcG9saWN5YGAgYW5kIGBgbWF4YXR0cmBgIGFyZSBr bm93biwgdGhlIE5ldGxpbmsKPiA+ICtjb3JlIHdpbGwgcGVyZm9ybSB2YWxpZGF0aW9uIGFuZCBw YXJzaW5nIHRhc2tzIGJlZm9yZSBpbnZva2luZyB0aGUgYGBkb2l0YGAKPiA+ICtjYWxsYmFjay4g Rm9yIG1vcmUgZGV0YWlscywgcmVmZXIgdG8gYEdlbmVyaWMgTmV0bGluayA8aHR0cHM6Ly9kb2Nz Lmtlcm5lbC5vcmcvbmV0d29ya2luZy9nZW5lcmljX25ldGxpbmsuaHRtbD5gXwo+ID4gKwo+ID4g K0FzIGEgcmVzdWx0LCB0aGUgZ2VuZXJhbCBOZXRsaW5rIHVzZXIgaW5hZHZlcnRlbnRseSBmb2xs b3dzIHRoZSBzZWNvbmQgYmVzdAo+ID4gK3ByYWN0aWNlIG9uY2UgdGhleSBzcGVjaWZ5IHRoZSBg YHBvbGljeWBgIGZpZWxkLiBGdXJ0aGVybW9yZSwgaW4gdGhlIGNhc2Ugb2YKPiA+ICttb2Rlcm4g ZmFtaWxpZXMgd2hlcmUgdGhlIHNwZWNpZmljYXRpb24gaXMgZ2VuZXJhdGVkCj4gPiArKHNlZSBg TmV0bGluayBzcGVjIEMgY29kZSBnZW5lcmF0aW9uIDxodHRwczovL2RvY3Mua2VybmVsLm9yZy91 c2Vyc3BhY2UtYXBpL25ldGxpbmsvYy1jb2RlLWdlbi5odG1sPmBfICksCj4gPiArdGhlIHByb2Js ZW0gb2YgZm9yZ2V0dGluZyB0byB1cGRhdGUgdGhlIGBgbmxhX3BvbGljeWBgIHNob3VsZCBuZXZl ciBvY2N1ci4KPiA+ICtUaGlzIGZlYXR1cmUgaXMgaW5jcmVkaWJseSBiZW5lZmljaWFsIGFzIGl0 IGVuaGFuY2VzIG1haW50YWluYWJpbGl0eS4gSXQgaXMKPiA+ICtoaWdobHkgcmVjb21tZW5kZWQg dG8gaW5jb3Jwb3JhdGUgaXQgaW50byB5b3VyIE5ldGxpbmsgY29kZS4KPiA+ICsKPiA+ICtIb3dl dmVyLCB0aGUgZ2VuZXJhbCBOZXRsaW5rIHVzZXIgc2hvdWxkIHN0aWxsIGNvbnNpZGVyIHRoZSAj MSBhbmQgIzMgYmVzdAo+ID4gK3ByYWN0aWNlcyBhcyBhcmVhcyBvZiBjb25jZXJuLgo+ID4gKwo+ ID4gK1JlZ2FyZGluZyB0aGUgZmlyc3QgYmVzdCBwcmFjdGljZSwgcmVnYXJkbGVzcyBvZiB0aGUg aW50ZXJmYWNlIHlvdSBhcmUgY3VycmVudGx5Cj4gPiArd29ya2luZyB3aXRoLCBpdCBpcyBlc3Nl bnRpYWwgdG8gaGFuZGxlIE5ldGxpbmsgYXR0cmlidXRlcyBhbmQgbWFrZSB1c2Ugb2YgdGhlCj4g PiArYXZhaWxhYmxlIGhlbHBlcnMuIEluIHBhcnRpY3VsYXIsIGRvbid0IGZvcmdldCB0aGUgYGBu bGFfbWVtY3B5YGAgaGVscGVyLgo+ID4gKwo+ID4gK1JlZ2FyZGluZyB0aGUgdGhpcmQgYmVzdCBw cmFjdGljZSwgZ2VuZXJhbCBOZXRsaW5rIGVtcGxveXMgYSBtb2Rlcm4gc3RyaWN0bmVzcwo+ID4g K2FwcHJvYWNoIGJ5IGRlZmF1bHQgZm9yIHBhcnNpbmcsIHV0aWxpemluZyB0aGUgdXNlci1wcm92 aWRlZCBwb2xpY3kgYW5kCj4gPiArbWF4YXR0ciwgd2hpY2ggaXMgcGVyZmVjdC4gSG93ZXZlciwg Zm9yIHRoZSBzYWtlIG9mIGZsZXhpYmlsaXR5IChhbmQKPiA+ICtjb21wYXRpYmlsaXR5KSwgdGhl IGludGVyZmFjZSBhbHNvIGFsbG93cyB1c2VycyB0byBzcGVjaWZ5Cj4gPiArYGBHRU5MX0RPTlRf VkFMSURBVEVfU1RSSUNUYGAgaWYgdGhleSBwcmVmZXIgYSBtb3JlIGxpYmVyYWwgc3RyaWN0bmVz cy4KPiA+ICtBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHZhbGlkYXRlIGZsYWdz IGF2YWlsYWJsZSwgc2VlCj4gPiArYGBnZW5sX3ZhbGlkYXRlX2ZsYWdzYGAgZW51bS4KPiA+ICsK PiA+ICsuLiBjb2RlLWJsb2NrOjogYwo+ID4gKwo+ID4gKyAgICBlbnVtIGdlbmxfdmFsaWRhdGVf ZmxhZ3Mgewo+ID4gKyAgICAgICAgR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVAkJPSBCSVQoMCks Cj4gPiArICAgICAgICBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUAkJCT0gQklUKDEpLAo+ID4gKyAg ICAgICAgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVBfU1RSSUNUCQk9IEJJVCgyKSwKPiA+ICsgICAg fTsKPiA+ICsKPiA+ICtUbyBiZSBob25lc3QsIHRoZSBkZXZlbG9wZXIgc2hvdWxkIGF2b2lkIHRo b3NlIGBgRE9OVGBgIGZsYWdzIGFzIHBvc3NpYmxlLgo+IAo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcG9zc2libGUu Cj4gb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhcyBtdWNoIGFzIHBvc3NpYmxlLgo+ID8/Cj4gCj4gPiArSG93ZXZlciwgdGhlIGBgR0VO TF9ET05UX1ZBTElEQVRFX1NUUklDVGBgIGZsYWcsIHdoaWNoIGVuYWJsZXMgbGliZXJhbAo+ID4g K3N0cmljdG5lc3MsIGlzIHVzZWQgb3ZlciA0MDAgdGltZXMgaW4gdGhlIExpbnV4IGtlcm5lbCBj b2RlLiBUaGlzIG9ic2VydmF0aW9uCj4gPiArc3VnZ2VzdHMgdGhhdCBhIHNpZ25pZmljYW50IHBv cnRpb24gb2YgdGhlIGNvZGViYXNlIGhhcyBub3QgZnVsbHkgYWRvcHRlZAo+ID4gK21vZGVybiBz dHJpY3RuZXNzIHByaW5jaXBsZXMgeWV0Lgo+ID4gKwo+ID4gK0FkZGl0aW9uYWxseSwgYWxzbyBp bGx1c3RyYXRlZCBieSB0aGUgRk9PIGV4YW1wbGUsIHRoZSB1c2VyIGhhcyB0byBkbyBsb2NhbAo+ ID4gK3BhcnNpbmcgd2hlbiBwcm9jZXNzaW5nIG5lc3RlZCBhdHRyaWJ1dGVzLiBJbiBzdWNoIHNj ZW5hcmlvcywgcGxlYXNlCj4gPiArCj4gPiArKiBsZXZlcmFnZSB0aGUgcGFyc2VycyBpbnN0ZWFk IG9mIG1hbnVhbCBwYXJzaW5nLgo+ID4gKyogbGV2ZXJhZ2UgdGhlIHBhcnNlcnMgd2hpY2ggYXJl IG5vdCBtYXJrZWQgYXMgZGVwcmVjYXRlZCB0byBhZGhlcmUgdG8gbW9kZXJuIHN0cmljdG5lc3Mu Cj4gPiArCj4gPiArU3VtbWFyeQo+ID4gKz09PT09PT0KPiA+ICsKPiA+ICtUaGlzIGRvY3VtZW50 IHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBkYXRhIHN0cnVjdHVyZSBhbmQgcGFyc2VycyBm b3IKPiA+ICtOZXRsaW5rIGF0dHJpYnV0ZXMsIGFsb25nIHdpdGggdGhyZWUgYmVzdCBwcmFjdGlj ZXMgZm9yIHBhcnNpbmcgdGhlc2UKPiA+ICthdHRyaWJ1dGVzLiBUaGUgcGFyc2luZyBkaXNjdXNz ZWQgaW4gdGhpcyBkb2N1bWVudCBvbmx5IGFwcGxpZXMgdG8gdGhlCj4gPiArIlJYIGNoYW5uZWwi IChtb3N0IGBgZG9pdGBgIGZ1bmN0aW9ucyksIHdoZXJlIHRoZSBrZXJuZWwgbmVlZHMgdG8gcGFy c2UgdXNlcgo+ID4gK3NwYWNlLXByb3ZpZGVkIE5ldGxpbmsgbWVzc2FnZXMuIFRoZSBvcHBvc2l0 ZSBjaGFubmVsLCB3aGVyZSB0aGUga2VybmVsCj4gPiArcHJlcGFyZXMgTmV0bGluayBtZXNzYWdl cyBmb3IgdXNlciBzcGFjZSAobW9zdCBgYGR1bXBpdGBgIGZ1bmN0aW9ucyksIGlzIG5vdAo+ID4g K2NvdmVyZWQgaW4gdGhpcyBkb2N1bWVudCBhcyBpdCBpcyBjb25zaWRlcmVkIGxlc3MgcHJvbmUg dG8gaW1wbGVtZW50YXRpb24KPiA+ICtlcnJvcnMuCj4gPiArCj4gPiArVGhlIGZpcnN0IGJlc3Qg cHJhY3RpY2UgaXMgInVzZSBwcm92aWRlZCBoZWxwZXIgdG8gcGFyc2UgYW5kIGFjY2VzcyBubGF0 dHIiLAo+ID4gK3doaWNoIGNhbiBtYWtlIHRoZSBwYXJzaW5nIGVhc2llciBhbmQgaW5jcmVhc2Ug dGhlIGNvZGUgbWFpbnRhaW5hYmlsaXR5Lgo+ID4gK1RoZSBzZWNvbmQgb25lIGlzICJuZXZlciBh Y2Nlc3MgbmxhdHRyIHdpdGhvdXQgY2hlY2tpbmciLCBvdGhlcndpc2UgYW4KPiA+ICtvdXQtb2Yt YXR0cmlidXRlIGFjY2VzcyBidWcgY291bGQgb2NjdXIuIFRoZSBsYXN0IG9uZSBpcyAiZW1icmFj ZSBhbmQgdGFrZQo+ID4gK2FkdmFudGFnZSBvZiB0aGUgc3RyaWN0bmVzcyIsIHdoaWNoIGhhcyBi ZWVuIGEgdG9waWMgb2YgZGlzY3Vzc2lvbiBzaW5jZQo+ID4gKzIwMTkgYnV0IGhhcyB5ZXQgdG8g YmUgZnVsbHkgYWRvcHRlZC4KPiA+ICsKPiA+ICtBbiBleHRyYSBzZWN0aW9uIGlzIHVzZWQgdG8g ZGlzY3VzcyB0aGUgZ2VuZXJhbCBOZXRsaW5rIGludGVyZmFjZSBjYXNlLgo+ID4gK0ZvcnR1bmF0 ZWx5LCB0aGlzIGludGVyZmFjZSBoYXMgZXZvbHZlZCByYXBpZGx5LCBiZWNvbWluZyBzYWZlciBh bmQgc2FmZXIuCj4gPiArVGhlIGxhdGVzdCBnZW5lcmFsIE5ldGxpbmsgYWxsb3dzIGZvciB0aGUg Z2VuZXJhdGlvbiBvZiBzcGVjaWZpY2F0aW9ucyBhbmQKPiA+ICtwb2xpY3kgYXV0b21hdGljYWxs eSBmcm9tIFlBTUwsIHdpdGggdGhlIGdlbmVyYXRlZCBwb2xpY3kgZGVmYXVsdGluZyB0byBtb2Rl cm4KPiA+ICtzdHJpY3RuZXNzLiBIb3dldmVyLCB1c2VycyBzdGlsbCBoYXZlIHRvIGNvbmNlcm4g YWJvdXQgdGhlICMxIGFuZCAjMyBwcmFjdGljZXMKPiA+ICt3aGVuIGRlYWxpbmcgd2l0aCB0aGUg YXR0cmlidXRlcy4KPiA+ICsKPiA+ICtJdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgY29ycmVj dGx5IHBhcnNpbmcgTmV0bGluayBhdHRyaWJ1dGVzIGlzIG9ubHkgdGhlCj4gPiArZmlyc3Qgc3Rl cCBidXQgZGVmaW5pdGVseSBub3QgdGhlIGxhc3Qgc3RlcCB0byBrZWVwIHlvdXIgY29kZSBhd2F5 IGZyb20gdGhlCj4gPiArYnVncy4KPiAKPiBUaGFua3MuCj4gLS0gCj4gflJhbmR5CgpUaGFua3Mg Zm9yIHBvaW50aW5nIHRoZW0gb3V0LiBOZWVkIHRvIGV4cHJlc3MgbXkgc2luY2VyZSBncmF0aXR1 ZGUgZm9yIHRha2luZyB0aGUKdGltZSB0byByZXZpZXcgYW5kIHByb3ZpZGUgZmVlZGJhY2sgb24g dGhpcyBkb2N1bWVudC4KCkkgd2lsbCBhZG9wdCB0aGVzZSBzdWdnZXN0aW9ucyBhbmQgcHJlcGFy ZSB0aGUgbmV4dCB2ZXJzaW9uLgoKVGhhbmtzCkxpbiBNYQo=