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 X-Spam-Level: X-Spam-Status: No, score=-10.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8671CC433C1 for ; Fri, 26 Mar 2021 06:59:56 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2BFF0619CB for ; Fri, 26 Mar 2021 06:59:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2BFF0619CB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=leemhuis.info Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=ksummit-discuss-bounces@lists.linuxfoundation.org Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id BDD0284BEA; Fri, 26 Mar 2021 06:59:55 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bL0HxP6IdKVu; Fri, 26 Mar 2021 06:59:53 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTP id 871D684AD5; Fri, 26 Mar 2021 06:59:52 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4225DC000E; Fri, 26 Mar 2021 06:59:52 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 71C24C000A for ; Fri, 26 Mar 2021 06:59:50 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 6CF5E84AD5 for ; Fri, 26 Mar 2021 06:59:50 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id M6nuRh0Sffpt for ; Fri, 26 Mar 2021 06:59:48 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 Received: from wp530.webpack.hosteurope.de (wp530.webpack.hosteurope.de [IPv6:2a01:488:42:1000:50ed:8234::]) by smtp1.osuosl.org (Postfix) with ESMTPS id C205A84B8F for ; Fri, 26 Mar 2021 06:59:47 +0000 (UTC) Received: from ip4d142c50.dynamic.kabel-deutschland.de ([77.20.44.80] helo=[192.168.66.200]); authenticated by wp530.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) id 1lPgRe-0003On-5C; Fri, 26 Mar 2021 07:59:46 +0100 From: Thorsten Leemhuis To: ksummit References: Message-ID: <21a84be3-d64f-e539-5495-8727d301daf8@leemhuis.info> Date: Fri, 26 Mar 2021 07:59:45 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-BS X-bounce-key: webpack.hosteurope.de;linux@leemhuis.info;1616741987;fd143f22; X-HE-SMSGID: 1lPgRe-0003On-5C Subject: [Ksummit-discuss] [3b/5] reporting-issues: reference section, main guide X-BeenThere: ksummit-discuss@lists.linuxfoundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ksummit-discuss-bounces@lists.linuxfoundation.org Sender: "Ksummit-discuss" T24gMjYuMDMuMjEgMDc6MTMsIFRob3JzdGVuIExlZW1odWlzIHdyb3RlOgo+IAo+IExvISBTaW5j ZSBhIGZldyBtb250aHMgbWFpbmxpbmUgaW4KPiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3Jl cG9ydGluZy1pc3N1ZXMucnN0IGNvbnRhaW5zIGEgdGV4dCB3cml0dGVuCj4gdG8gb2Jzb2xldGUg dGhlIGdvb2Qgb2xkIHJlcG9ydGluZy1idWdzIHRleHQuIEZvciBub3csIHRoZSBuZXcgZG9jdW1l bnQKPiBzdGlsbCBjb250YWlucyBhIHdhcm5pbmcgYXQgdGhlIHRvcCB0aGF0IGJhc2ljYWxseSBz YXlzICJ0aGlzIGlzIFdJUCIuCj4gQnV0IEknZCBsaWtlIHRvIHJlbW92ZSB0aGF0IHdhcm5pbmcg YW5kIGRlbGV0ZSByZXBvcnRpbmctYnVncy5yc3QgaW4gdGhlCj4gbmV4dCBtZXJnZSB3aW5kb3cg dG8gbWFrZSByZXBvcnRpbmctaXNzdWVzLnJzdCBmdWxseSBvZmZpY2lhbC4gV2l0aCB0aGlzCj4g bWFpbCBJIHdhbnQgdG8gZ2l2ZSBldmVyeW9uZSBhIGNoYW5jZSB0byB0YWtlIGEgbG9vayBhdCB0 aGUgdGV4dCBhbmQKPiBzcGVhayB1cCBpZiB5b3UgZG9uJ3Qgd2FudCBtZSB0byBtb3ZlIGFoZWFk IGZvciBub3cuCj4gCj4gRm9yIGVhc2llciByZXZpZXcgSSdsbCBwb3N0IHRoZSB0ZXh0IG9mIHJl cG9ydGluZy1pc3N1ZXMucnN0IGluIHJlcGx5IHRvCj4gdGhpcyBtYWlsLiBJJ2xsIGRvIHRoYXQg aW4gYSBmZXcgY2h1bmtzLCBhcyBpZiB0aGlzIHdhcyBhIGNvdmVyIGxldHRlcgo+IGZvciBhIHBh dGNoLXNldC4gCgpQYXJ0IDMgd2FzIHRvIGJpZyBmb3Iga3N1bW1pdC1kaXNjdXNzLCBzbyBoZXJl IGl0IGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBpdDoKCgpIb3cgdG8gb2J0YWluIGEgZnJlc2ggTGlu dXgga2VybmVsCgp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgoKCioqVXNpbmcg YSBwcmUtY29tcGlsZWQga2VybmVsKio6IFRoaXMgaXMgb2Z0ZW4gdGhlIHF1aWNrZXN0LCBlYXNp ZXN0LCBhbmQgc2FmZXN0Cgp3YXkgZm9yIHRlc3Rpbmcg4oCUIGVzcGVjaWFsbHkgaXMgeW91IGFy ZSB1bmZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbC4gVGhlCgpwcm9ibGVtOiBtb3N0IG9m IHRob3NlIHNoaXBwZWQgYnkgZGlzdHJpYnV0b3JzIG9yIGFkZC1vbiByZXBvc2l0b3JpZXMgYXJl IGJ1aWxkCgpmcm9tIG1vZGlmaWVkIExpbnV4IHNvdXJjZXMuIFRoZXkgYXJlIHRodXMgbm90IHZh bmlsbGEgYW5kIHRoZXJlZm9yZSBvZnRlbgoKdW5zdWl0YWJsZSBmb3IgdGVzdGluZyBhbmQgaXNz dWUgcmVwb3J0aW5nOiB0aGUgY2hhbmdlcyBtaWdodCBjYXVzZSB0aGUgaXNzdWUKCnlvdSBmYWNl IG9yIGluZmx1ZW5jZSBpdCBzb21laG93LgoKCgpCdXQgeW91IGFyZSBpbiBsdWNrIGlmIHlvdSBh cmUgdXNpbmcgYSBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbjogZm9yIHF1aXRlIGEKCmZldyBv ZiB0aGVtIHlvdSdsbCBmaW5kIHJlcG9zaXRvcmllcyBvbiB0aGUgbmV0IHRoYXQgY29udGFpbiBw YWNrYWdlcyB3aXRoIHRoZQoKbGF0ZXN0IG1haW5saW5lIG9yIHN0YWJsZSBMaW51eCBidWlsdCBh cyB2YW5pbGxhIGtlcm5lbC4gSXQncyB0b3RhbGx5IG9rYXkgdG8KCnVzZSB0aGVzZSwganVzdCBt YWtlIHN1cmUgZnJvbSB0aGUgcmVwb3NpdG9yeSdzIGRlc2NyaXB0aW9uIHRoZXkgYXJlIHZhbmls bGEgb3IKCmF0IGxlYXN0IGNsb3NlIHRvIGl0LiBBZGRpdGlvbmFsbHkgZW5zdXJlIHRoZSBwYWNr YWdlcyBjb250YWluIHRoZSBsYXRlc3QKCnZlcnNpb25zIGFzIG9mZmVyZWQgb24ga2VybmVsLm9y Zy4gVGhlIHBhY2thZ2VzIGFyZSBsaWtlbHkgdW5zdWl0YWJsZSBpZiB0aGV5CgphcmUgb2xkZXIg dGhhbiBhIHdlZWssIGFzIG5ldyBtYWlubGluZSBhbmQgc3RhYmxlIGtlcm5lbHMgdHlwaWNhbGx5 IGdldCByZWxlYXNlZAoKYXQgbGVhc3Qgb25jZSBhIHdlZWsuCgoKClBsZWFzZSBub3RlIHRoYXQg eW91IG1pZ2h0IG5lZWQgdG8gYnVpbGQgeW91ciBvd24ga2VybmVsIG1hbnVhbGx5IGxhdGVyOiB0 aGF0J3MKCnNvbWV0aW1lcyBuZWVkZWQgZm9yIGRlYnVnZ2luZyBvciB0ZXN0aW5nIGZpeGVzLCBh cyBkZXNjcmliZWQgbGF0ZXIgaW4gdGhpcwoKZG9jdW1lbnQuIEFsc28gYmUgYXdhcmUgdGhhdCBw cmUtY29tcGlsZWQga2VybmVscyBtaWdodCBsYWNrIGRlYnVnIHN5bWJvbHMgdGhhdAoKYXJlIG5l ZWRlZCB0byBkZWNvZGUgbWVzc2FnZXMgdGhlIGtlcm5lbCBwcmludHMgd2hlbiBhIHBhbmljLCBP b3BzLCB3YXJuaW5nLCBvcgoKQlVHIG9jY3VyczsgaWYgeW91IHBsYW4gdG8gZGVjb2RlIHRob3Nl LCB5b3UgbWlnaHQgYmUgYmV0dGVyIG9mZiBjb21waWxpbmcgYQoKa2VybmVsIHlvdXJzZWxmIChz ZWUgdGhlIGVuZCBvZiB0aGlzIHN1YnNlY3Rpb24gYW5kIHRoZSBzZWN0aW9uIHRpdGxlZCAnRGVj b2RlCgpmYWlsdXJlIG1lc3NhZ2VzJyBmb3IgZGV0YWlscykuCgoKCioqVXNpbmcgZ2l0Kio6IERl dmVsb3BlcnMgYW5kIGV4cGVyaWVuY2VkIExpbnV4IHVzZXJzIGZhbWlsaWFyIHdpdGggZ2l0IGFy ZQoKb2Z0ZW4gYmVzdCBzZXJ2ZWQgYnkgb2J0YWluaW5nIHRoZSBsYXRlc3QgTGludXgga2VybmVs IHNvdXJjZXMgc3RyYWlnaHQgZnJvbSB0aGUKCmBvZmZpY2lhbCBkZXZlbG9wbWVudCByZXBvc2l0 b3J5IG9uIGtlcm5lbC5vcmcKCjxodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgv a2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS8+YF8uCgpUaG9zZSBhcmUgbGlrZWx5 IGEgYml0IGFoZWFkIG9mIHRoZSBsYXRlc3QgbWFpbmxpbmUgcHJlLXJlbGVhc2UuIERvbid0IHdv cnJ5CgphYm91dCBpdDogdGhleSBhcmUgYXMgcmVsaWFibGUgYXMgYSBwcm9wZXIgcHJlLXJlbGVh c2UsIHVubGVzcyB0aGUga2VybmVsJ3MKCmRldmVsb3BtZW50IGN5Y2xlIGlzIGN1cnJlbnRseSBp biB0aGUgbWlkZGxlIG9mIGEgbWVyZ2Ugd2luZG93LiBCdXQgZXZlbiB0aGVuCgp0aGV5IGFyZSBx dWl0ZSByZWxpYWJsZS4KCgoKKipDb252ZW50aW9uYWwqKjogUGVvcGxlIHVuZmFtaWxpYXIgd2l0 aCBnaXQgYXJlIG9mdGVuIGJlc3Qgc2VydmVkIGJ5Cgpkb3dubG9hZGluZyB0aGUgc291cmNlcyBh cyB0YXJiYWxsIGZyb20gYGtlcm5lbC5vcmcgPGh0dHBzOi8va2VybmVsLm9yZy8+YF8uCgoKCkhv dyB0byBhY3R1YWxseSBidWlsZCBhIGtlcm5lbCBpcyBub3QgZGVzY3JpYmVkIGhlcmUsIGFzIG1h bnkgd2Vic2l0ZXMgZXhwbGFpbgoKdGhlIG5lY2Vzc2FyeSBzdGVwcyBhbHJlYWR5LiBJZiB5b3Ug YXJlIG5ldyB0byBpdCwgY29uc2lkZXIgZm9sbG93aW5nIG9uZSBvZgoKdGhvc2UgaG93LXRvJ3Mg dGhhdCBzdWdnZXN0IHRvIHVzZSBgYG1ha2UgbG9jYWxtb2Rjb25maWdgYCwgYXMgdGhhdCB0cmll cyB0bwoKcGljayB1cCB0aGUgY29uZmlndXJhdGlvbiBvZiB5b3VyIGN1cnJlbnQga2VybmVsIGFu ZCB0aGVuIHRyaWVzIHRvIGFkanVzdCBpdAoKc29tZXdoYXQgZm9yIHlvdXIgc3lzdGVtLiBUaGF0 IGRvZXMgbm90IG1ha2UgdGhlIHJlc3VsdGluZyBrZXJuZWwgYW55IGJldHRlciwKCmJ1dCBxdWlj a2VyIHRvIGNvbXBpbGUuCgoKCk5vdGU6IElmIHlvdSBhcmUgZGVhbGluZyB3aXRoIGEgcGFuaWMs IE9vcHMsIHdhcm5pbmcsIG9yIEJVRyBmcm9tIHRoZSBrZXJuZWwsCgpwbGVhc2UgdHJ5IHRvIGVu YWJsZSBDT05GSUdfS0FMTFNZTVMgd2hlbiBjb25maWd1cmluZyB5b3VyIGtlcm5lbC4KCkFkZGl0 aW9uYWxseSwgZW5hYmxlIENPTkZJR19ERUJVR19LRVJORUwgYW5kIENPTkZJR19ERUJVR19JTkZP LCB0b287IHRoZQoKbGF0dGVyIGlzIHRoZSByZWxldmFudCBvbmUgb2YgdGhvc2UgdHdvLCBidXQg Y2FuIG9ubHkgYmUgcmVhY2hlZCBpZiB5b3UgZW5hYmxlCgp0aGUgZm9ybWVyLiBCZSBhd2FyZSBD T05GSUdfREVCVUdfSU5GTyBpbmNyZWFzZXMgdGhlIHN0b3JhZ2Ugc3BhY2UgcmVxdWlyZWQgdG8K CmJ1aWxkIGEga2VybmVsIGJ5IHF1aXRlIGEgYml0LiBCdXQgdGhhdCdzIHdvcnRoIGl0LCBhcyB0 aGVzZSBvcHRpb25zIHdpbGwgYWxsb3cKCnlvdSBsYXRlciB0byBwaW5wb2ludCB0aGUgZXhhY3Qg bGluZSBvZiBjb2RlIHRoYXQgdHJpZ2dlcnMgeW91ciBpc3N1ZS4gVGhlCgpzZWN0aW9uICdEZWNv ZGUgZmFpbHVyZSBtZXNzYWdlcycgYmVsb3cgZXhwbGFpbnMgdGhpcyBpbiBtb3JlIGRldGFpbC4K CgoKQnV0IGtlZXAgaW4gbWluZDogQWx3YXlzIGtlZXAgYSByZWNvcmQgb2YgdGhlIGlzc3VlIGVu Y291bnRlcmVkIGluIGNhc2UgaXQgaXMKCmhhcmQgdG8gcmVwcm9kdWNlLiBTZW5kaW5nIGFuIHVu ZGVjb2RlZCByZXBvcnQgaXMgYmV0dGVyIHRoYW4gbm90IHJlcG9ydGluZwoKdGhlIGlzc3VlIGF0 IGFsbC4KCgoKCgpDaGVjayAndGFpbnQnIGZsYWcKCi0tLS0tLS0tLS0tLS0tLS0tLQoKCgogICAg KkVuc3VyZSB0aGUga2VybmVsIHlvdSBqdXN0IGluc3RhbGxlZCBkb2VzIG5vdCAndGFpbnQnIGl0 c2VsZiB3aGVuCgogICAgcnVubmluZy4qCgoKCkFzIG91dGxpbmVkIGFib3ZlIGluIG1vcmUgZGV0 YWlsIGFscmVhZHk6IHRoZSBrZXJuZWwgc2V0cyBhICd0YWludCcgZmxhZyB3aGVuCgpzb21ldGhp bmcgaGFwcGVucyB0aGF0IGNhbiBsZWFkIHRvIGZvbGxvdy11cCBlcnJvcnMgdGhhdCBsb29rIHRv dGFsbHkKCnVucmVsYXRlZC4gVGhhdCdzIHdoeSB5b3UgbmVlZCB0byBjaGVjayBpZiB0aGUga2Vy bmVsIHlvdSBqdXN0IGluc3RhbGxlZCBkb2VzCgpub3Qgc2V0IHRoaXMgZmxhZy4gQW5kIGlmIGl0 IGRvZXMsIHlvdSBpbiBhbG1vc3QgYWxsIHRoZSBjYXNlcyBuZWVkcyB0bwoKZWxpbWluYXRlIHRo ZSByZWFzb24gZm9yIGl0IGJlZm9yZSB5b3UgcmVwb3J0aW5nIGlzc3VlcyB0aGF0IG9jY3VyIHdp dGggaXQuIFNlZQoKdGhlIHNlY3Rpb24gYWJvdmUgZm9yIGRldGFpbHMgaG93IHRvIGRvIHRoYXQu CgoKCgoKUmVwcm9kdWNlIGlzc3VlIHdpdGggdGhlIGZyZXNoIGtlcm5lbAoKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgogICAgKlJlcHJvZHVjZSB0aGUgaXNzdWUgd2l0 aCB0aGUga2VybmVsIHlvdSBqdXN0IGluc3RhbGxlZC4gSWYgaXQgZG9lc24ndCBzaG93CgogICAg dXAgdGhlcmUsIHNjcm9sbCBkb3duIHRvIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGlzc3VlcyBvbmx5 IGhhcHBlbmluZyB3aXRoCgogICAgc3RhYmxlIGFuZCBsb25ndGVybSBrZXJuZWxzLioKCgoKQ2hl Y2sgaWYgdGhlIGlzc3VlIG9jY3VycyB3aXRoIHRoZSBmcmVzaCBMaW51eCBrZXJuZWwgdmVyc2lv biB5b3UganVzdAoKaW5zdGFsbGVkLiBJZiBpdCB3YXMgZml4ZWQgdGhlcmUgYWxyZWFkeSwgY29u c2lkZXIgc3RpY2tpbmcgd2l0aCB0aGlzIHZlcnNpb24KCmxpbmUgYW5kIGFiYW5kb25pbmcgeW91 ciBwbGFuIHRvIHJlcG9ydCB0aGUgaXNzdWUuIEJ1dCBrZWVwIGluIG1pbmQgdGhhdCBvdGhlcgoK dXNlcnMgbWlnaHQgc3RpbGwgYmUgcGxhZ3VlZCBieSBpdCwgYXMgbG9uZyBhcyBpdCdzIG5vdCBm aXhlZCBpbiBlaXRoZXIgc3RhYmxlCgphbmQgbG9uZ3Rlcm0gdmVyc2lvbiBmcm9tIGtlcm5lbC5v cmcgKGFuZCB0aHVzIHZlbmRvciBrZXJuZWxzIGRlcml2ZWQgZnJvbQoKdGhvc2UpLiBJZiB5b3Ug cHJlZmVyIHRvIHVzZSBvbmUgb2YgdGhvc2Ugb3IganVzdCB3YW50IHRvIGhlbHAgdGhlaXIgdXNl cnMsCgpoZWFkIG92ZXIgdG8gdGhlIHNlY3Rpb24gIkRldGFpbHMgYWJvdXQgcmVwb3J0aW5nIGlz c3VlcyBvbmx5IG9jY3VycmluZyBpbgoKb2xkZXIga2VybmVsIHZlcnNpb24gbGluZXMiIGJlbG93 LgoKCgoKCk9wdGltaXplIGRlc2NyaXB0aW9uIHRvIHJlcHJvZHVjZSBpc3N1ZQoKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCiAgICAqT3B0aW1pemUgeW91ciBub3Rl czogdHJ5IHRvIGZpbmQgYW5kIHdyaXRlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8K CiAgICByZXByb2R1Y2UgeW91ciBpc3N1ZS4gTWFrZSBzdXJlIHRoZSBlbmQgcmVzdWx0IGhhcyBh bGwgdGhlIGltcG9ydGFudAoKICAgIGRldGFpbHMsIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGlzIGVh c3kgdG8gcmVhZCBhbmQgdW5kZXJzdGFuZCBmb3Igb3RoZXJzCgogICAgdGhhdCBoZWFyIGFib3V0 IGl0IGZvciB0aGUgZmlyc3QgdGltZS4gQW5kIGlmIHlvdSBsZWFybmVkIHNvbWV0aGluZyBpbiB0 aGlzCgogICAgcHJvY2VzcywgY29uc2lkZXIgc2VhcmNoaW5nIGFnYWluIGZvciBleGlzdGluZyBy ZXBvcnRzIGFib3V0IHRoZSBpc3N1ZS4qCgoKCkFuIHVubmVjZXNzYXJpbHkgY29tcGxleCByZXBv cnQgd2lsbCBtYWtlIGl0IGhhcmQgZm9yIG90aGVycyB0byB1bmRlcnN0YW5kIHlvdXIKCnJlcG9y dC4gVGh1cyB0cnkgdG8gZmluZCBhIHJlcHJvZHVjZXIgdGhhdCdzIHN0cmFpZ2h0IGZvcndhcmQg dG8gZGVzY3JpYmUgYW5kCgp0aHVzIGVhc3kgdG8gdW5kZXJzdGFuZCBpbiB3cml0dGVuIGZvcm0u IEluY2x1ZGUgYWxsIGltcG9ydGFudCBkZXRhaWxzLCBidXQgYXQKCnRoZSBzYW1lIHRpbWUgdHJ5 IHRvIGtlZXAgaXQgYXMgc2hvcnQgYXMgcG9zc2libGUuCgoKCkluIHRoaXMgaW4gdGhlIHByZXZp b3VzIHN0ZXBzIHlvdSBsaWtlbHkgaGF2ZSBsZWFybmVkIGEgdGhpbmcgb3IgdHdvIGFib3V0IHRo ZQoKaXNzdWUgeW91IGZhY2UuIFVzZSB0aGlzIGtub3dsZWRnZSBhbmQgc2VhcmNoIGFnYWluIGZv ciBleGlzdGluZyByZXBvcnRzCgppbnN0ZWFkIHlvdSBjYW4gam9pbi4KCgoKCgpEZWNvZGUgZmFp bHVyZSBtZXNzYWdlcwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKICAgICpJZiB5b3VyIGZh aWx1cmUgaW52b2x2ZXMgYSAncGFuaWMnLCAnT29wcycsICd3YXJuaW5nJywgb3IgJ0JVRycsIGNv bnNpZGVyCgogICAgZGVjb2RpbmcgdGhlIGtlcm5lbCBsb2cgdG8gZmluZCB0aGUgbGluZSBvZiBj b2RlIHRoYXQgdHJpZ2dlcmVkIHRoZSBlcnJvci4qCgoKCldoZW4gdGhlIGtlcm5lbCBkZXRlY3Rz IGFuIGludGVybmFsIHByb2JsZW0sIGl0IHdpbGwgbG9nIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQK CnRoZSBleGVjdXRlZCBjb2RlLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHBpbnBvaW50IHRo ZSBleGFjdCBsaW5lIGluIHRoZQoKc291cmNlIGNvZGUgdGhhdCB0cmlnZ2VyZWQgdGhlIGlzc3Vl IGFuZCBzaG93cyBob3cgaXQgd2FzIGNhbGxlZC4gQnV0IHRoYXQgb25seQoKd29ya3MgaWYgeW91 IGVuYWJsZWQgQ09ORklHX0RFQlVHX0lORk8gYW5kIENPTkZJR19LQUxMU1lNUyB3aGVuIGNvbmZp Z3VyaW5nCgp5b3VyIGtlcm5lbC4gSWYgeW91IGRpZCBzbywgY29uc2lkZXIgdG8gZGVjb2RlIHRo ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQoKa2VybmVsJ3MgbG9nLiBUaGF0IHdpbGwgbWFrZSBpdCBh IGxvdCBlYXNpZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGxlYWQgdG8gdGhlCgoncGFuaWMnLCAnT29w cycsICd3YXJuaW5nJywgb3IgJ0JVRycsIHdoaWNoIGluY3JlYXNlcyB0aGUgY2hhbmNlcyB0aGF0 IHNvbWVvbmUKCmNhbiBwcm92aWRlIGEgZml4LgoKCgpEZWNvZGluZyBjYW4gYmUgZG9uZSB3aXRo IGEgc2NyaXB0IHlvdSBmaW5kIGluIHRoZSBMaW51eCBzb3VyY2UgdHJlZS4gSWYgeW91CgphcmUg cnVubmluZyBhIGtlcm5lbCB5b3UgY29tcGlsZWQgeW91cnNlbGYgZWFybGllciwgY2FsbCBpdCBs aWtlIHRoaXM6OgoKCgogICAgICAgW3VzZXJAc29tZXRoaW5nIH5dJCBzdWRvIGRtZXNnIHwgLi9s aW51eC01LjEwLjUvc2NyaXB0cy9kZWNvZGVfc3RhY2t0cmFjZS5zaCAuL2xpbnV4LTUuMTAuNS92 bWxpbnV4CgoKCklmIHlvdSBhcmUgcnVubmluZyBhIHBhY2thZ2VkIHZhbmlsbGEga2VybmVsLCB5 b3Ugd2lsbCBsaWtlbHkgaGF2ZSB0byBpbnN0YWxsCgp0aGUgY29ycmVzcG9uZGluZyBwYWNrYWdl cyB3aXRoIGRlYnVnIHN5bWJvbHMuIFRoZW4gY2FsbCB0aGUgc2NyaXB0ICh3aGljaCB5b3UKCm1p Z2h0IG5lZWQgdG8gZ2V0IGZyb20gdGhlIExpbnV4IHNvdXJjZXMgaWYgeW91ciBkaXN0cm8gZG9l cyBub3QgcGFja2FnZSBpdCkKCmxpa2UgdGhpczo6CgoKCiAgICAgICBbdXNlckBzb21ldGhpbmcg fl0kIHN1ZG8gZG1lc2cgfCAuL2xpbnV4LTUuMTAuNS9zY3JpcHRzL2RlY29kZV9zdGFja3RyYWNl LnNoIFwKCiAgICAgICAgL3Vzci9saWIvZGVidWcvbGliL21vZHVsZXMvNS4xMC4xMC00LjEueDg2 XzY0L3ZtbGludXggL3Vzci9zcmMva2VybmVscy81LjEwLjEwLTQuMS54ODZfNjQvCgoKClRoZSBz Y3JpcHQgd2lsbCB3b3JrIG9uIGxvZyBsaW5lcyBsaWtlIHRoZSBmb2xsb3dpbmcsIHdoaWNoIHNo b3cgdGhlIGFkZHJlc3Mgb2YKCnRoZSBjb2RlIHRoZSBrZXJuZWwgd2FzIGV4ZWN1dGluZyB3aGVu IHRoZSBlcnJvciBvY2N1cnJlZDo6CgoKCiAgICAgICBbICAgNjguMzg3MzAxXSBSSVA6IDAwMTA6 dGVzdF9tb2R1bGVfaW5pdCsweDUvMHhmZmEgW3Rlc3RfbW9kdWxlXQoKCgpPbmNlIGRlY29kZWQs IHRoZXNlIGxpbmVzIHdpbGwgbG9vayBsaWtlIHRoaXM6OgoKCgogICAgICAgWyAgIDY4LjM4NzMw MV0gUklQOiAwMDEwOnRlc3RfbW9kdWxlX2luaXQgKC9ob21lL3VzZXJuYW1lL2xpbnV4LTUuMTAu NS90ZXN0LW1vZHVsZS90ZXN0LW1vZHVsZS5jOjE2KSB0ZXN0X21vZHVsZQoKCgpJbiB0aGlzIGNh c2UgdGhlIGV4ZWN1dGVkIGNvZGUgd2FzIGJ1aWx0IGZyb20gdGhlIGZpbGUKCid+L2xpbnV4LTUu MTAuNS90ZXN0LW1vZHVsZS90ZXN0LW1vZHVsZS5jJyBhbmQgdGhlIGVycm9yIG9jY3VycmVkIGJ5 IHRoZQoKaW5zdHJ1Y3Rpb25zIGZvdW5kIGluIGxpbmUgJzE2Jy4KCgoKVGhlIHNjcmlwdCB3aWxs IHNpbWlsYXJseSBkZWNvZGUgdGhlIGFkZHJlc3NlcyBtZW50aW9uZWQgaW4gdGhlIHNlY3Rpb24K CnN0YXJ0aW5nIHdpdGggJ0NhbGwgdHJhY2UnLCB3aGljaCBzaG93IHRoZSBwYXRoIHRvIHRoZSBm dW5jdGlvbiB3aGVyZSB0aGUKCnByb2JsZW0gb2NjdXJyZWQuIEFkZGl0aW9uYWxseSwgdGhlIHNj cmlwdCB3aWxsIHNob3cgdGhlIGFzc2VtYmxlciBvdXRwdXQgZm9yCgp0aGUgY29kZSBzZWN0aW9u IHRoZSBrZXJuZWwgd2FzIGV4ZWN1dGluZy4KCgoKTm90ZSwgaWYgeW91IGNhbid0IGdldCB0aGlz IHRvIHdvcmssIHNpbXBseSBza2lwIHRoaXMgc3RlcCBhbmQgbWVudGlvbiB0aGUKCnJlYXNvbiBm b3IgaXQgaW4gdGhlIHJlcG9ydC4gSWYgeW91J3JlIGx1Y2t5LCBpdCBtaWdodCBub3QgYmUgbmVl ZGVkLiBBbmQgaWYgaXQKCmlzLCBzb21lb25lIG1pZ2h0IGhlbHAgeW91IHRvIGdldCB0aGluZ3Mg Z29pbmcuIEFsc28gYmUgYXdhcmUgdGhpcyBpcyBqdXN0IG9uZQoKb2Ygc2V2ZXJhbCB3YXlzIHRv IGRlY29kZSBrZXJuZWwgc3RhY2sgdHJhY2VzLiBTb21ldGltZXMgZGlmZmVyZW50IHN0ZXBzIHdp bGwKCmJlIHJlcXVpcmVkIHRvIHJldHJpZXZlIHRoZSByZWxldmFudCBkZXRhaWxzLiBEb24ndCB3 b3JyeSBhYm91dCB0aGF0LCBpZiB0aGF0J3MKCm5lZWRlZCBpbiB5b3VyIGNhc2UsIGRldmVsb3Bl cnMgd2lsbCB0ZWxsIHlvdSB3aGF0IHRvIGRvLgoKCgoKClNwZWNpYWwgY2FyZSBmb3IgcmVncmVz c2lvbnMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKICAgICpJZiB5b3VyIHByb2Js ZW0gaXMgYSByZWdyZXNzaW9uLCB0cnkgdG8gbmFycm93IGRvd24gd2hlbiB0aGUgaXNzdWUgd2Fz CgogICAgaW50cm9kdWNlZCBhcyBtdWNoIGFzIHBvc3NpYmxlLioKCgoKTGludXggbGVhZCBkZXZl bG9wZXIgTGludXMgVG9ydmFsZHMgaW5zaXN0cyB0aGF0IHRoZSBMaW51eCBrZXJuZWwgbmV2ZXIK CndvcnNlbnMsIHRoYXQncyB3aHkgaGUgZGVlbXMgcmVncmVzc2lvbnMgYXMgdW5hY2NlcHRhYmxl IGFuZCB3YW50cyB0byBzZWUgdGhlbQoKZml4ZWQgcXVpY2tseS4gVGhhdCdzIHdoeSBjaGFuZ2Vz IHRoYXQgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gYXJlIG9mdGVuCgpwcm9tcHRseSByZXZlcnRl ZCBpZiB0aGUgaXNzdWUgdGhleSBjYXVzZSBjYW4ndCBnZXQgc29sdmVkIHF1aWNrbHkgYW55IG90 aGVyCgp3YXkuIFJlcG9ydGluZyBhIHJlZ3Jlc3Npb24gaXMgdGh1cyBhIGJpdCBsaWtlIHBsYXlp bmcgYSBraW5kIG9mIHRydW1wIGNhcmQgdG8KCmdldCBzb21ldGhpbmcgcXVpY2tseSBmaXhlZC4g QnV0IGZvciB0aGF0IHRvIGhhcHBlbiB0aGUgY2hhbmdlIHRoYXQncyBjYXVzaW5nCgp0aGUgcmVn cmVzc2lvbiBuZWVkcyB0byBiZSBrbm93bi4gTm9ybWFsbHkgaXQncyB1cCB0byB0aGUgcmVwb3J0 ZXIgdG8gdHJhY2sKCmRvd24gdGhlIGN1bHByaXQsIGFzIG1haW50YWluZXJzIG9mdGVuIHdvbid0 IGhhdmUgdGhlIHRpbWUgb3Igc2V0dXAgYXQgaGFuZCB0bwoKcmVwcm9kdWNlIGl0IHRoZW1zZWx2 ZXMuCgoKClRvIGZpbmQgdGhlIGNoYW5nZSB0aGVyZSBpcyBhIHByb2Nlc3MgY2FsbGVkICdiaXNl Y3Rpb24nIHdoaWNoIHRoZSBkb2N1bWVudAoKJ0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYnVn LWJpc2VjdC5yc3QnIGRlc2NyaWJlcyBpbiBkZXRhaWwuIFRoYXQgcHJvY2VzcwoKd2lsbCBvZnRl biByZXF1aXJlIHlvdSB0byBidWlsZCBhYm91dCB0ZW4gdG8gdHdlbnR5IGtlcm5lbCBpbWFnZXMs IHRyeWluZyB0bwoKcmVwcm9kdWNlIHRoZSBpc3N1ZSB3aXRoIGVhY2ggb2YgdGhlbSBiZWZvcmUg YnVpbGRpbmcgdGhlIG5leHQuIFllcywgdGhhdCB0YWtlcwoKc29tZSB0aW1lLCBidXQgZG9uJ3Qg d29ycnksIGl0IHdvcmtzIGEgbG90IHF1aWNrZXIgdGhhbiBtb3N0IHBlb3BsZSBhc3N1bWUuCgpU aGFua3MgdG8gYSAnYmluYXJ5IHNlYXJjaCcgdGhpcyB3aWxsIGxlYWQgeW91IHRvIHRoZSBvbmUg Y29tbWl0IGluIHRoZSBzb3VyY2UKCmNvZGUgbWFuYWdlbWVudCBzeXN0ZW0gdGhhdCdzIGNhdXNp bmcgdGhlIHJlZ3Jlc3Npb24uIE9uY2UgeW91IGZpbmQgaXQsIHNlYXJjaAoKdGhlIG5ldCBmb3Ig dGhlIHN1YmplY3Qgb2YgdGhlIGNoYW5nZSwgaXRzIGNvbW1pdCBpZCBhbmQgdGhlIHNob3J0ZW5l ZCBjb21taXQgaWQKCih0aGUgZmlyc3QgMTIgY2hhcmFjdGVycyBvZiB0aGUgY29tbWl0IGlkKS4g VGhpcyB3aWxsIGxlYWQgeW91IHRvIGV4aXN0aW5nCgpyZXBvcnRzIGFib3V0IGl0LCBpZiB0aGVy ZSBhcmUgYW55LgoKCgpOb3RlLCBhIGJpc2VjdGlvbiBuZWVkcyBhIGJpdCBvZiBrbm93LWhvdywg d2hpY2ggbm90IGV2ZXJ5b25lIGhhcywgYW5kIHF1aXRlIGEKCmJpdCBvZiBlZmZvcnQsIHdoaWNo IG5vdCBldmVyeW9uZSBpcyB3aWxsaW5nIHRvIGludmVzdC4gTmV2ZXJ0aGVsZXNzLCBpdCdzCgpo aWdobHkgcmVjb21tZW5kZWQgcGVyZm9ybWluZyBhIGJpc2VjdGlvbiB5b3Vyc2VsZi4gSWYgeW91 IHJlYWxseSBjYW4ndCBvcgoKZG9uJ3Qgd2FudCB0byBnbyBkb3duIHRoYXQgcm91dGUgYXQgbGVh c3QgZmluZCBvdXQgd2hpY2ggbWFpbmxpbmUga2VybmVsCgppbnRyb2R1Y2VkIHRoZSByZWdyZXNz aW9uLiBJZiBzb21ldGhpbmcgZm9yIGV4YW1wbGUgYnJlYWtzIHdoZW4gc3dpdGNoaW5nIGZyb20K CjUuNS4xNSB0byA1LjguNCwgdGhlbiB0cnkgYXQgbGVhc3QgYWxsIHRoZSBtYWlubGluZSByZWxl YXNlcyBpbiB0aGF0IGFyZWEgKDUuNiwKCjUuNyBhbmQgNS44KSB0byBjaGVjayB3aGVuIGl0IGZp cnN0IHNob3dlZCB1cC4gVW5sZXNzIHlvdSdyZSB0cnlpbmcgdG8gZmluZCBhCgpyZWdyZXNzaW9u IGluIGEgc3RhYmxlIG9yIGxvbmd0ZXJtIGtlcm5lbCwgYXZvaWQgdGVzdGluZyB2ZXJzaW9ucyB3 aGljaCBudW1iZXIKCmhhcyB0aHJlZSBzZWN0aW9ucyAoNS42LjEyLCA1LjcuOCksIGFzIHRoYXQg bWFrZXMgdGhlIG91dGNvbWUgaGFyZCB0bwoKaW50ZXJwcmV0LCB3aGljaCBtaWdodCByZW5kZXIg eW91ciB0ZXN0aW5nIHVzZWxlc3MuIE9uY2UgeW91IGZvdW5kIHRoZSBtYWpvcgoKdmVyc2lvbiB3 aGljaCBpbnRyb2R1Y2VkIHRoZSByZWdyZXNzaW9uLCBmZWVsIGZyZWUgdG8gbW92ZSBvbiBpbiB0 aGUgcmVwb3J0aW5nCgpwcm9jZXNzLiBCdXQga2VlcCBpbiBtaW5kOiBpdCBkZXBlbmRzIG9uIHRo ZSBpc3N1ZSBhdCBoYW5kIGlmIHRoZSBkZXZlbG9wZXJzCgp3aWxsIGJlIGFibGUgdG8gaGVscCB3 aXRob3V0IGtub3dpbmcgdGhlIGN1bHByaXQuIFNvbWV0aW1lcyB0aGV5IG1pZ2h0CgpyZWNvZ25p emUgZnJvbSB0aGUgcmVwb3J0IHdhbnQgd2VudCB3cm9uZyBhbmQgY2FuIGZpeCBpdDsgb3RoZXIg dGltZXMgdGhleSB3aWxsCgpiZSB1bmFibGUgdG8gaGVscCB1bmxlc3MgeW91IHBlcmZvcm0gYSBi aXNlY3Rpb24uCgoKCldoZW4gZGVhbGluZyB3aXRoIHJlZ3Jlc3Npb25zIG1ha2Ugc3VyZSB0aGUg aXNzdWUgeW91IGZhY2UgaXMgcmVhbGx5IGNhdXNlZCBieQoKdGhlIGtlcm5lbCBhbmQgbm90IGJ5 IHNvbWV0aGluZyBlbHNlLCBhcyBvdXRsaW5lZCBhYm92ZSBhbHJlYWR5LgoKCgpJbiB0aGUgd2hv bGUgcHJvY2VzcyBrZWVwIGluIG1pbmQ6IGFuIGlzc3VlIG9ubHkgcXVhbGlmaWVzIGFzIHJlZ3Jl c3Npb24gaWYgdGhlCgpvbGRlciBhbmQgdGhlIG5ld2VyIGtlcm5lbCBnb3QgYnVpbHQgd2l0aCBh IHNpbWlsYXIgY29uZmlndXJhdGlvbi4gVGhlIGJlc3Qgd2F5Cgp0byBhcmNoaXZlIHRoaXM6IGNv cHkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoYGAuY29uZmlnYGApIGZyb20gdGhlIG9sZCB3b3Jr aW5nCgprZXJuZWwgZnJlc2hseSB0byBlYWNoIG5ld2VyIGtlcm5lbCB2ZXJzaW9uIHlvdSB0cnku IEFmdGVyd2FyZHMgcnVuIGBgbWFrZQoKb2xkbm9jb25maWdgYCB0byBhZGp1c3QgaXQgZm9yIHRo ZSBuZWVkcyBvZiB0aGUgbmV3IHZlcnNpb24gd2l0aG91dCBlbmFibGluZwoKYW55IG5ldyBmZWF0 dXJlLCBhcyB0aG9zZSBhcmUgYWxsb3dlZCB0byBjYXVzZSByZWdyZXNzaW9ucy4KCgoKCgpXcml0 ZSBhbmQgc2VuZCB0aGUgcmVwb3J0CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCiAgICAq U3RhcnQgdG8gY29tcGlsZSB0aGUgcmVwb3J0IGJ5IHdyaXRpbmcgYSBkZXRhaWxlZCBkZXNjcmlw dGlvbiBhYm91dCB0aGUKCiAgICBpc3N1ZS4gQWx3YXlzIG1lbnRpb24gYSBmZXcgdGhpbmdzOiB0 aGUgbGF0ZXN0IGtlcm5lbCB2ZXJzaW9uIHlvdSBpbnN0YWxsZWQKCiAgICBmb3IgcmVwcm9kdWNp bmcsIHRoZSBMaW51eCBEaXN0cmlidXRpb24gdXNlZCwgYW5kIHlvdXIgbm90ZXMgb24gaG93IHRv CgogICAgcmVwcm9kdWNlIHRoZSBpc3N1ZS4gSWRlYWxseSwgbWFrZSB0aGUga2VybmVsJ3MgYnVp bGQgY29uZmlndXJhdGlvbgoKICAgICguY29uZmlnKSBhbmQgdGhlIG91dHB1dCBmcm9tIGBgZG1l c2dgYCBhdmFpbGFibGUgc29tZXdoZXJlIG9uIHRoZSBuZXQgYW5kCgogICAgbGluayB0byBpdC4g SW5jbHVkZSBvciB1cGxvYWQgYWxsIG90aGVyIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgYmUgcmVs ZXZhbnQsCgogICAgbGlrZSB0aGUgb3V0cHV0L3NjcmVlbnNob3Qgb2YgYW4gT29wcyBvciB0aGUg b3V0cHV0IGZyb20gYGBsc3BjaWBgLiBPbmNlCgogICAgeW91IHdyb3RlIHRoaXMgbWFpbiBwYXJ0 LCBpbnNlcnQgYSBub3JtYWwgbGVuZ3RoIHBhcmFncmFwaCBvbiB0b3Agb2YgaXQKCiAgICBvdXRs aW5pbmcgdGhlIGlzc3VlIGFuZCB0aGUgaW1wYWN0IHF1aWNrbHkuIE9uIHRvcCBvZiB0aGlzIGFk ZCBvbmUgc2VudGVuY2UKCiAgICB0aGF0IGJyaWVmbHkgZGVzY3JpYmVzIHRoZSBwcm9ibGVtIGFu ZCBnZXRzIHBlb3BsZSB0byByZWFkIG9uLiBOb3cgZ2l2ZSB0aGUKCiAgICB0aGluZyBhIGRlc2Ny aXB0aXZlIHRpdGxlIG9yIHN1YmplY3QgdGhhdCB5ZXQgYWdhaW4gaXMgc2hvcnRlci4gVGhlbiB5 b3UncmUKCiAgICByZWFkeSB0byBzZW5kIG9yIGZpbGUgdGhlIHJlcG9ydCBsaWtlIHRoZSBNQUlO VEFJTkVSUyBmaWxlIHRvbGQgeW91LCB1bmxlc3MKCiAgICB5b3UgYXJlIGRlYWxpbmcgd2l0aCBv bmUgb2YgdGhvc2UgJ2lzc3VlcyBvZiBoaWdoIHByaW9yaXR5JzogdGhleSBuZWVkCgogICAgc3Bl Y2lhbCBjYXJlIHdoaWNoIGlzIGV4cGxhaW5lZCBpbiAnU3BlY2lhbCBoYW5kbGluZyBmb3IgaGln aCBwcmlvcml0eQoKICAgIGlzc3VlcycgYmVsb3cuKgoKCgpOb3cgdGhhdCB5b3UgaGF2ZSBwcmVw YXJlZCBldmVyeXRoaW5nIGl0J3MgdGltZSB0byB3cml0ZSB5b3VyIHJlcG9ydC4gSG93IHRvIGRv Cgp0aGF0IGlzIHBhcnRseSBleHBsYWluZWQgYnkgdGhlIHRocmVlIGRvY3VtZW50cyBsaW5rZWQg dG8gaW4gdGhlIHByZWZhY2UgYWJvdmUuCgpUaGF0J3Mgd2h5IHRoaXMgdGV4dCB3aWxsIG9ubHkg bWVudGlvbiBhIGZldyBvZiB0aGUgZXNzZW50aWFscyBhcyB3ZWxsIGFzCgp0aGluZ3Mgc3BlY2lm aWMgdG8gdGhlIExpbnV4IGtlcm5lbC4KCgoKVGhlcmUgaXMgb25lIHRoaW5nIHRoYXQgZml0cyBi b3RoIGNhdGVnb3JpZXM6IHRoZSBtb3N0IGNydWNpYWwgcGFydHMgb2YgeW91cgoKcmVwb3J0IGFy ZSB0aGUgdGl0bGUvc3ViamVjdCwgdGhlIGZpcnN0IHNlbnRlbmNlLCBhbmQgdGhlIGZpcnN0IHBh cmFncmFwaC4KCkRldmVsb3BlcnMgb2Z0ZW4gZ2V0IHF1aXRlIGEgbG90IG9mIG1haWwuIFRoZXkg dGh1cyBvZnRlbiBqdXN0IHRha2UgYSBmZXcKCnNlY29uZHMgdG8gc2tpbSBhIG1haWwgYmVmb3Jl IGRlY2lkaW5nIHRvIG1vdmUgb24gb3IgbG9vayBjbG9zZXIuIFRodXM6IHRoZQoKYmV0dGVyIHRo ZSB0b3Agc2VjdGlvbiBvZiB5b3VyIHJlcG9ydCwgdGhlIGhpZ2hlciBhcmUgdGhlIGNoYW5jZXMg dGhhdCBzb21lb25lCgp3aWxsIGxvb2sgaW50byBpdCBhbmQgaGVscCB5b3UuIEFuZCB0aGF0IGlz IHdoeSB5b3Ugc2hvdWxkIGlnbm9yZSB0aGVtIGZvciBub3cKCmFuZCB3cml0ZSB0aGUgZGV0YWls ZWQgcmVwb3J0IGZpcnN0LiA7LSkKCgoKVGhpbmdzIGVhY2ggcmVwb3J0IHNob3VsZCBtZW50aW9u Cgp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCgoKRGVzY3JpYmUgaW4gZGV0YWls IGhvdyB5b3VyIGlzc3VlIGhhcHBlbnMgd2l0aCB0aGUgZnJlc2ggdmFuaWxsYSBrZXJuZWwgeW91 CgppbnN0YWxsZWQuIFRyeSB0byBpbmNsdWRlIHRoZSBzdGVwLWJ5LXN0ZXAgaW5zdHJ1Y3Rpb25z IHlvdSB3cm90ZSBhbmQgb3B0aW1pemVkCgplYXJsaWVyIHRoYXQgb3V0bGluZSBob3cgeW91IGFu ZCBpZGVhbGx5IG90aGVycyBjYW4gcmVwcm9kdWNlIHRoZSBpc3N1ZTsgaW4KCnRob3NlIHJhcmUg Y2FzZXMgd2hlcmUgdGhhdCdzIGltcG9zc2libGUgdHJ5IHRvIGRlc2NyaWJlIHdoYXQgeW91IGRp ZCB0bwoKdHJpZ2dlciBpdC4KCgoKQWxzbyBpbmNsdWRlIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3Jt YXRpb24gb3RoZXJzIG1pZ2h0IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUKCmlzc3VlIGFuZCBpdHMg ZW52aXJvbm1lbnQuIFdoYXQncyBhY3R1YWxseSBuZWVkZWQgZGVwZW5kcyBhIGxvdCBvbiB0aGUg aXNzdWUsCgpidXQgdGhlcmUgYXJlIHNvbWUgdGhpbmdzIHlvdSBzaG91bGQgaW5jbHVkZSBhbHdh eXM6CgoKCiAqIHRoZSBvdXRwdXQgZnJvbSBgYGNhdCAvcHJvYy92ZXJzaW9uYGAsIHdoaWNoIGNv bnRhaW5zIHRoZSBMaW51eCBrZXJuZWwKCiAgIHZlcnNpb24gbnVtYmVyIGFuZCB0aGUgY29tcGls ZXIgaXQgd2FzIGJ1aWx0IHdpdGguCgoKCiAqIHRoZSBMaW51eCBkaXN0cmlidXRpb24gdGhlIG1h Y2hpbmUgaXMgcnVubmluZyAoYGBob3N0bmFtZWN0bCB8IGdyZXAKCiAgICJPcGVyYXRpbmcgU3lz dGVtImBgKQoKCgogKiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBDUFUgYW5kIHRoZSBvcGVyYXRp bmcgc3lzdGVtIChgYHVuYW1lIC1taWBgKQoKCgogKiBpZiB5b3UgYXJlIGRlYWxpbmcgd2l0aCBh IHJlZ3Jlc3Npb24gYW5kIHBlcmZvcm1lZCBhIGJpc2VjdGlvbiwgbWVudGlvbiB0aGUKCiAgIHN1 YmplY3QgYW5kIHRoZSBjb21taXQtaWQgb2YgdGhlIGNoYW5nZSB0aGF0IGlzIGNhdXNpbmcgaXQu CgoKCkluIGEgbG90IG9mIGNhc2VzIGl0J3MgYWxzbyB3aXNlIHRvIG1ha2UgdHdvIG1vcmUgdGhp bmdzIGF2YWlsYWJsZSB0byB0aG9zZQoKdGhhdCByZWFkIHlvdXIgcmVwb3J0OgoKCgogKiB0aGUg Y29uZmlndXJhdGlvbiB1c2VkIGZvciBidWlsZGluZyB5b3VyIExpbnV4IGtlcm5lbCAodGhlICcu Y29uZmlnJyBmaWxlKQoKCgogKiB0aGUga2VybmVsJ3MgbWVzc2FnZXMgdGhhdCB5b3UgZ2V0IGZy b20gYGBkbWVzZ2BgIHdyaXR0ZW4gdG8gYSBmaWxlLiBNYWtlCgogICBzdXJlIHRoYXQgaXQgc3Rh cnRzIHdpdGggYSBsaW5lIGxpa2UgJ0xpbnV4IHZlcnNpb24gNS44LTEKCiAgIChmb29iYXJAZXhh bXBsZS5jb20pIChnY2MgKEdDQykgMTAuMi4xLCBHTlUgbGQgdmVyc2lvbiAyLjM0KSAjMSBTTVAg TW9uIEF1ZwoKICAgMyAxNDo1NDozNyBVVEMgMjAyMCcgSWYgaXQncyBtaXNzaW5nLCB0aGVuIGlt cG9ydGFudCBtZXNzYWdlcyBmcm9tIHRoZSBmaXJzdAoKICAgYm9vdCBwaGFzZSBhbHJlYWR5IGdv dCBkaXNjYXJkZWQuIEluIHRoaXMgY2FzZSBpbnN0ZWFkIGNvbnNpZGVyIHVzaW5nCgogICBgYGpv dXJuYWxjdGwgLWIgMCAta2BgOyBhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gYWxzbyByZWJvb3QsIHJl cHJvZHVjZSB0aGUKCiAgIGlzc3VlIGFuZCBjYWxsIGBgZG1lc2dgYCByaWdodCBhZnRlcndhcmRz LgoKCgpUaGVzZSB0d28gZmlsZXMgYXJlIGJpZywgdGhhdCdzIHdoeSBpdCdzIGEgYmFkIGlkZWEg dG8gcHV0IHRoZW0gZGlyZWN0bHkgaW50bwoKeW91ciByZXBvcnQuIElmIHlvdSBhcmUgZmlsaW5n IHRoZSBpc3N1ZSBpbiBhIGJ1ZyB0cmFja2VyIHRoZW4gYXR0YWNoIHRoZW0gdG8KCnRoZSB0aWNr ZXQuIElmIHlvdSByZXBvcnQgdGhlIGlzc3VlIGJ5IG1haWwgZG8gbm90IGF0dGFjaCB0aGVtLCBh cyB0aGF0IG1ha2VzCgp0aGUgbWFpbCB0b28gbGFyZ2U7IGluc3RlYWQgZG8gb25lIG9mIHRoZXNl IHRoaW5nczoKCgoKICogVXBsb2FkIHRoZSBmaWxlcyBzb21ld2hlcmUgcHVibGljICh5b3VyIHdl YnNpdGUsIGEgcHVibGljIGZpbGUgcGFzdGUKCiAgIHNlcnZpY2UsIGEgdGlja2V0IGNyZWF0ZWQg anVzdCBmb3IgdGhpcyBwdXJwb3NlIG9uIGBidWd6aWxsYS5rZXJuZWwub3JnCgogICA8aHR0cHM6 Ly9idWd6aWxsYS5rZXJuZWwub3JnLz5gXywgLi4uKSBhbmQgaW5jbHVkZSBhIGxpbmsgdG8gdGhl bSBpbiB5b3VyCgogICByZXBvcnQuIElkZWFsbHkgdXNlIHNvbWV0aGluZyB3aGVyZSB0aGUgZmls ZXMgc3RheSBhdmFpbGFibGUgZm9yIHllYXJzLCBhcwoKICAgdGhleSBjb3VsZCBiZSB1c2VmdWwg dG8gc29tZW9uZSBtYW55IHllYXJzIGZyb20gbm93OyB0aGlzIGZvciBleGFtcGxlIGNhbgoKICAg aGFwcGVuIGlmIGZpdmUgb3IgdGVuIHllYXJzIGZyb20gbm93IGEgZGV2ZWxvcGVyIHdvcmtzIG9u IHNvbWUgY29kZSB0aGF0IHdhcwoKICAgY2hhbmdlZCBqdXN0IHRvIGZpeCB5b3VyIGlzc3VlLgoK CgogKiBQdXQgdGhlIGZpbGVzIGFzaWRlIGFuZCBtZW50aW9uIHlvdSB3aWxsIHNlbmQgdGhlbSBs YXRlciBpbiBpbmRpdmlkdWFsCgogICByZXBsaWVzIHRvIHlvdXIgb3duIG1haWwuIEp1c3QgcmVt ZW1iZXIgdG8gYWN0dWFsbHkgZG8gdGhhdCBvbmNlIHRoZSByZXBvcnQKCiAgIHdlbnQgb3V0LiA7 LSkKCgoKVGhpbmdzIHRoYXQgbWlnaHQgYmUgd2lzZSB0byBwcm92aWRlCgp+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCgoKRGVwZW5kaW5nIG9uIHRoZSBpc3N1ZSB5b3UgbWln aHQgbmVlZCB0byBhZGQgbW9yZSBiYWNrZ3JvdW5kIGRhdGEuIEhlcmUgYXJlIGEKCmZldyBzdWdn ZXN0aW9ucyB3aGF0IG9mdGVuIGlzIGdvb2QgdG8gcHJvdmlkZToKCgoKICogSWYgeW91IGFyZSBk ZWFsaW5nIHdpdGggYSAnd2FybmluZycsIGFuICdPT1BTJyBvciBhICdwYW5pYycgZnJvbSB0aGUg a2VybmVsLAoKICAgaW5jbHVkZSBpdC4gSWYgeW91IGNhbid0IGNvcHknbidwYXN0ZSBpdCwgdHJ5 IHRvIGNhcHR1cmUgYSBuZXRjb25zb2xlIHRyYWNlCgogICBvciBhdCBsZWFzdCB0YWtlIGEgcGlj dHVyZSBvZiB0aGUgc2NyZWVuLgoKCgogKiBJZiB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0 byB5b3VyIGNvbXB1dGVyIGhhcmR3YXJlLCBtZW50aW9uIHdoYXQga2luZAoKICAgb2Ygc3lzdGVt IHlvdSB1c2UuIElmIHlvdSBmb3IgZXhhbXBsZSBoYXZlIHByb2JsZW1zIHdpdGggeW91ciBncmFw aGljcyBjYXJkLAoKICAgbWVudGlvbiBpdHMgbWFudWZhY3R1cmVyLCB0aGUgY2FyZCdzIG1vZGVs LCBhbmQgd2hhdCBjaGlwIGlzIHVzZXMuIElmIGl0J3MgYQoKICAgbGFwdG9wIG1lbnRpb24gaXRz IG5hbWUsIGJ1dCB0cnkgdG8gbWFrZSBzdXJlIGl0J3MgbWVhbmluZ2Z1bC4gJ0RlbGwgWFBTIDEz JwoKICAgZm9yIGV4YW1wbGUgaXMgbm90LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIHRoZSBvbmUgZnJv bSAyMDEyOyB0aGF0IG9uZSBsb29rcwoKICAgbm90IHRoYXQgZGlmZmVyZW50IGZyb20gdGhlIG9u ZSBzb2xkIHRvZGF5LCBidXQgYXBhcnQgZnJvbSB0aGF0IHRoZSB0d28gaGF2ZQoKICAgbm90aGlu ZyBpbiBjb21tb24uIEhlbmNlLCBpbiBzdWNoIGNhc2VzIGFkZCB0aGUgZXhhY3QgbW9kZWwgbnVt YmVyLCB3aGljaAoKICAgZm9yIGV4YW1wbGUgYXJlICc5MzgwJyBvciAnNzM5MCcgZm9yIFhQUyAx MyBtb2RlbHMgaW50cm9kdWNlZCBkdXJpbmcgMjAxOS4KCiAgIE5hbWVzIGxpa2UgJ0xlbm92byBU aGlua3BhZCBUNTkwJyBhcmUgYWxzbyBzb21ld2hhdCBhbWJpZ3VvdXM6IHRoZXJlIGFyZQoKICAg dmFyaWFudHMgb2YgdGhpcyBsYXB0b3Agd2l0aCBhbmQgd2l0aG91dCBhIGRlZGljYXRlZCBncmFw aGljcyBjaGlwLCBzbyB0cnkKCiAgIHRvIGZpbmQgdGhlIGV4YWN0IG1vZGVsIG5hbWUgb3Igc3Bl Y2lmeSB0aGUgbWFpbiBjb21wb25lbnRzLgoKCgogKiBNZW50aW9uIHRoZSByZWxldmFudCBzb2Z0 d2FyZSBpbiB1c2UuIElmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggbG9hZGluZwoKICAgbW9kdWxl cywgeW91IHdhbnQgdG8gbWVudGlvbiB0aGUgdmVyc2lvbnMgb2Yga21vZCwgc3lzdGVtZCwgYW5k IHVkZXYgaW4gdXNlLgoKICAgSWYgb25lIG9mIHRoZSBEUk0gZHJpdmVycyBtaXNiZWhhdmVzLCB5 b3Ugd2FudCB0byBzdGF0ZSB0aGUgdmVyc2lvbnMgb2YKCiAgIGxpYmRybSBhbmQgTWVzYTsgYWxz byBzcGVjaWZ5IHlvdXIgV2F5bGFuZCBjb21wb3NpdG9yIG9yIHRoZSBYLVNlcnZlciBhbmQKCiAg IGl0cyBkcml2ZXIuIElmIHlvdSBoYXZlIGEgZmlsZXN5c3RlbSBpc3N1ZSwgbWVudGlvbiB0aGUg dmVyc2lvbiBvZgoKICAgY29ycmVzcG9uZGluZyBmaWxlc3lzdGVtIHV0aWxpdGllcyAoZTJmc3By b2dzLCBidHJmcy1wcm9ncywgeGZzcHJvZ3MsIC4uLikuCgoKCiAqIEdhdGhlciBhZGRpdGlvbmFs IGluZm9ybWF0aW9uIGZyb20gdGhlIGtlcm5lbCB0aGF0IG1pZ2h0IGJlIG9mIGludGVyZXN0LiBU aGUKCiAgIG91dHB1dCBmcm9tIGBgbHNwY2kgLW5uYGAgd2lsbCBmb3IgZXhhbXBsZSBoZWxwIG90 aGVycyB0byBpZGVudGlmeSB3aGF0CgogICBoYXJkd2FyZSB5b3UgdXNlLiBJZiB5b3UgaGF2ZSBh IHByb2JsZW0gd2l0aCBoYXJkd2FyZSB5b3UgZXZlbiBtaWdodCB3YW50IHRvCgogICBtYWtlIHRo ZSBvdXRwdXQgZnJvbSBgYHN1ZG8gbHNwY2kgLXZ2dmBgIGF2YWlsYWJsZSwgYXMgdGhhdCBwcm92 aWRlcwoKICAgaW5zaWdodHMgaG93IHRoZSBjb21wb25lbnRzIHdlcmUgY29uZmlndXJlZC4gRm9y IHNvbWUgaXNzdWVzIGl0IG1pZ2h0IGJlCgogICBnb29kIHRvIGluY2x1ZGUgdGhlIGNvbnRlbnRz IG9mIGZpbGVzIGxpa2UgYGAvcHJvYy9jcHVpbmZvYGAsCgogICBgYC9wcm9jL2lvcG9ydHNgYCwg YGAvcHJvYy9pb21lbWBgLCBgYC9wcm9jL21vZHVsZXNgYCwgb3IKCiAgIGBgL3Byb2Mvc2NzaS9z Y3NpYGAuIFNvbWUgc3Vic3lzdGVtIGFsc28gb2ZmZXIgdG9vbHMgdG8gY29sbGVjdCByZWxldmFu dAoKICAgaW5mb3JtYXRpb24uIE9uZSBzdWNoIHRvb2wgaXMgYGBhbHNhLWluZm8uc2hgYCBgd2hp Y2ggdGhlIGF1ZGlvL3NvdW5kCgogICBzdWJzeXN0ZW0gZGV2ZWxvcGVycyBwcm92aWRlIDxodHRw czovL3d3dy5hbHNhLXByb2plY3Qub3JnL3dpa2kvQWxzYUluZm8+YF8uCgoKClRob3NlIGV4YW1w bGVzIHNob3VsZCBnaXZlIHlvdXIgc29tZSBpZGVhcyBvZiB3aGF0IGRhdGEgbWlnaHQgYmUgd2lz ZSB0bwoKYXR0YWNoLCBidXQgeW91IGhhdmUgdG8gdGhpbmsgeW91cnNlbGYgd2hhdCB3aWxsIGJl IGhlbHBmdWwgZm9yIG90aGVycyB0byBrbm93LgoKRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQg Zm9yZ2V0dGluZyBzb21ldGhpbmcsIGFzIGRldmVsb3BlcnMgd2lsbCBhc2sgZm9yCgphZGRpdGlv bmFsIGRldGFpbHMgdGhleSBuZWVkLiBCdXQgbWFraW5nIGV2ZXJ5dGhpbmcgaW1wb3J0YW50IGF2 YWlsYWJsZSBmcm9tCgp0aGUgc3RhcnQgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugc29tZW9uZSB3aWxs IHRha2UgYSBjbG9zZXIgbG9vay4KCgoKCgpUaGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBoZWFkIG9m IHlvdXIgcmVwb3J0Cgp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ CgoKCk5vdyB0aGF0IHlvdSBoYXZlIHRoZSBkZXRhaWxlZCBwYXJ0IG9mIHRoZSByZXBvcnQgcHJl cGFyZWQgbGV0J3MgZ2V0IHRvIHRoZQoKbW9zdCBpbXBvcnRhbnQgc2VjdGlvbjogdGhlIGZpcnN0 IGZldyBzZW50ZW5jZXMuIFRodXMgZ28gdG8gdGhlIHRvcCwgYWRkCgpzb21ldGhpbmcgbGlrZSAn VGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uOicgYmVmb3JlIHRoZSBwYXJ0IHlvdSBqdXN0IHdyb3Rl IGFuZAoKaW5zZXJ0IHR3byBuZXdsaW5lcyBhdCB0aGUgdG9wLiBOb3cgd3JpdGUgb25lIG5vcm1h bCBsZW5ndGggcGFyYWdyYXBoIHRoYXQKCmRlc2NyaWJlcyB0aGUgaXNzdWUgcm91Z2hseS4gTGVh dmUgb3V0IGFsbCBib3JpbmcgZGV0YWlscyBhbmQgZm9jdXMgb24gdGhlCgpjcnVjaWFsIHBhcnRz IHJlYWRlcnMgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGlzIGFsbCBhYm91 dDsgaWYgeW91Cgp0aGluayB0aGlzIGJ1ZyBhZmZlY3RzIGEgbG90IG9mIHVzZXJzLCBtZW50aW9u IHRoaXMgdG8gZ2V0IHBlb3BsZSBpbnRlcmVzdGVkLgoKCgpPbmNlIHlvdSBkaWQgdGhhdCBpbnNl cnQgdHdvIG1vcmUgbGluZXMgYXQgdGhlIHRvcCBhbmQgd3JpdGUgYSBvbmUgc2VudGVuY2UKCnN1 bW1hcnkgdGhhdCBleHBsYWlucyBxdWlja2x5IHdoYXQgdGhlIHJlcG9ydCBpcyBhYm91dC4gQWZ0 ZXIgdGhhdCB5b3UgaGF2ZSB0bwoKZ2V0IGV2ZW4gbW9yZSBhYnN0cmFjdCBhbmQgd3JpdGUgYW4g ZXZlbiBzaG9ydGVyIHN1YmplY3QvdGl0bGUgZm9yIHRoZSByZXBvcnQuCgoKCk5vdyB0aGF0IHlv dSBoYXZlIHdyaXR0ZW4gdGhpcyBwYXJ0IHRha2Ugc29tZSB0aW1lIHRvIG9wdGltaXplIGl0LCBh cyBpdCBpcyB0aGUKCm1vc3QgaW1wb3J0YW50IHBhcnRzIG9mIHlvdXIgcmVwb3J0OiBhIGxvdCBv ZiBwZW9wbGUgd2lsbCBvbmx5IHJlYWQgdGhpcyBiZWZvcmUKCnRoZXkgZGVjaWRlIGlmIHJlYWRp bmcgdGhlIHJlc3QgaXMgdGltZSB3ZWxsIHNwZW50LgoKCgpOb3cgc2VuZCBvciBmaWxlIHRoZSBy ZXBvcnQgbGlrZSB0aGUgOnJlZjpgTUFJTlRBSU5FUlMgPG1haW50YWluZXJzPmAgZmlsZSB0b2xk Cgp5b3UsIHVubGVzcyBpdCdzIG9uZSBvZiB0aG9zZSAnaXNzdWVzIG9mIGhpZ2ggcHJpb3JpdHkn IG91dGxpbmVkIGVhcmxpZXI6IGluCgp0aGF0IGNhc2UgcGxlYXNlIHJlYWQgdGhlIG5leHQgc3Vi c2VjdGlvbiBmaXJzdCBiZWZvcmUgc2VuZGluZyB0aGUgcmVwb3J0IG9uCgppdHMgd2F5LgoKCgpT cGVjaWFsIGhhbmRsaW5nIGZvciBoaWdoIHByaW9yaXR5IGlzc3VlcwoKfn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCgoKUmVwb3J0cyBmb3IgaGlnaCBwcmlvcml0eSBp c3N1ZXMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLgoKCgoqKlNldmVyZSBidWdzKio6IG1ha2Ugc3Vy ZSB0aGUgc3ViamVjdCBvciB0aWNrZXQgdGl0bGUgYXMgd2VsbCBhcyB0aGUgZmlyc3QKCnBhcmFn cmFwaCBtYWtlcyB0aGUgc2V2ZXJlbmVzcyBvYnZpb3VzLgoKCgoqKlJlZ3Jlc3Npb25zKio6IElm IHRoZSBpc3N1ZSBpcyBhIHJlZ3Jlc3Npb24gYWRkIFtSRUdSRVNTSU9OXSB0byB0aGUgbWFpbCdz CgpzdWJqZWN0IG9yIHRoZSB0aXRsZSBpbiB0aGUgYnVnLXRyYWNrZXIuIElmIHlvdSBkaWQgbm90 IHBlcmZvcm0gYSBiaXNlY3Rpb24KCm1lbnRpb24gYXQgbGVhc3QgdGhlIGxhdGVzdCBtYWlubGlu ZSB2ZXJzaW9uIHlvdSB0ZXN0ZWQgdGhhdCB3b3JrZWQgZmluZSAoc2F5Cgo1LjcpIGFuZCB0aGUg b2xkZXN0IHdoZXJlIHRoZSBpc3N1ZSBvY2N1cnMgKHNheSA1LjgpLiBJZiB5b3UgZGlkIGEgc3Vj Y2Vzc2Z1bAoKYmlzZWN0aW9uIG1lbnRpb24gdGhlIGNvbW1pdMKgaWQgYW5kIHN1YmplY3Qgb2Yg dGhlIGNoYW5nZSB0aGF0IGNhdXNlcyB0aGUKCnJlZ3Jlc3Npb24uIEFsc28gbWFrZSBzdXJlIHRv IGFkZCB0aGUgYXV0aG9yIG9mIHRoYXQgY2hhbmdlIHRvIHlvdXIgcmVwb3J0OyBpZgoKeW91IG5l ZWQgdG8gZmlsZSB5b3VyIGJ1ZyBpbiBhIGJ1Zy10cmFja2VyIGZvcndhcmQgdGhlIHJlcG9ydCB0 byBoaW0gaW4gYQoKcHJpdmF0ZSBtYWlsIGFuZCBtZW50aW9uIHdoZXJlIHlvdXIgZmlsZWQgaXQu CgoKCioqU2VjdXJpdHkgaXNzdWVzKio6IGZvciB0aGVzZSBpc3N1ZXMgeW91ciB3aWxsIGhhdmUg dG8gZXZhbHVhdGUgaWYgYQoKc2hvcnQtdGVybSByaXNrIHRvIG90aGVyIHVzZXJzIHdvdWxkIGFy aXNlIGlmIGRldGFpbHMgd2VyZSBwdWJsaWNseSBkaXNjbG9zZWQuCgpJZiB0aGF0J3Mgbm90IHRo ZSBjYXNlIHNpbXBseSBwcm9jZWVkIHdpdGggcmVwb3J0aW5nIHRoZSBpc3N1ZSBhcyBkZXNjcmli ZWQuCgpGb3IgaXNzdWVzIHRoYXQgYmVhciBzdWNoIGEgcmlzayB5b3Ugd2lsbCBuZWVkIHRvIGFk anVzdCB0aGUgcmVwb3J0aW5nIHByb2Nlc3MKCnNsaWdodGx5OgoKCgogKiBJZiB0aGUgTUFJTlRB SU5FUlMgZmlsZSBpbnN0cnVjdGVkIHlvdSB0byByZXBvcnQgdGhlIGlzc3VlIGJ5IG1haWwsIGRv IG5vdAoKICAgQ0MgYW55IHB1YmxpYyBtYWlsaW5nIGxpc3RzLgoKCgogKiBJZiB5b3Ugd2VyZSBz dXBwb3NlZCB0byBmaWxlIHRoZSBpc3N1ZSBpbiBhIGJ1ZyB0cmFja2VyIG1ha2Ugc3VyZSB0byBt YXJrCgogICB0aGUgdGlja2V0IGFzICdwcml2YXRlJyBvciAnc2VjdXJpdHkgaXNzdWUnLiBJZiB0 aGUgYnVnIHRyYWNrZXIgZG9lcyBub3QKCiAgIG9mZmVyIGEgd2F5IHRvIGtlZXAgcmVwb3J0cyBw cml2YXRlLCBmb3JnZXQgYWJvdXQgaXQgYW5kIHNlbmQgeW91ciByZXBvcnQgYXMKCiAgIGEgcHJp dmF0ZSBtYWlsIHRvIHRoZSBtYWludGFpbmVycyBpbnN0ZWFkLgoKCgpJbiBib3RoIGNhc2VzIG1h a2Ugc3VyZSB0byBhbHNvIG1haWwgeW91ciByZXBvcnQgdG8gdGhlIGFkZHJlc3NlcyB0aGUKCk1B SU5UQUlORVJTIGZpbGUgbGlzdHMgaW4gdGhlIHNlY3Rpb24gJ3NlY3VyaXR5IGNvbnRhY3QnLiBJ ZGVhbGx5IGRpcmVjdGx5IENDCgp0aGVtIHdoZW4gc2VuZGluZyB0aGUgcmVwb3J0IGJ5IG1haWwu IElmIHlvdSBmaWxlZCBpdCBpbiBhIGJ1ZyB0cmFja2VyLCBmb3J3YXJkCgp0aGUgcmVwb3J0J3Mg dGV4dCB0byB0aGVzZSBhZGRyZXNzZXM7IGJ1dCBvbiB0b3Agb2YgaXQgcHV0IGEgc21hbGwgbm90 ZSB3aGVyZQoKeW91IG1lbnRpb24gdGhhdCB5b3UgZmlsZWQgaXQgd2l0aCBhIGxpbmsgdG8gdGhl IHRpY2tldC4KCgoKU2VlICdEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3NlY3VyaXR5LWJ1Z3Mu cnN0JyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgoKCgpEdXRpZXMgYWZ0ZXIgdGhlIHJlcG9ydCB3 ZW50IG91dAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKICAgICpXYWl0IGZv ciByZWFjdGlvbnMgYW5kIGtlZXAgdGhlIHRoaW5nIHJvbGxpbmcgdW50aWwgeW91IGNhbiBhY2Nl cHQgdGhlCgogICAgb3V0Y29tZSBpbiBvbmUgd2F5IG9yIHRoZSBvdGhlci4gVGh1cyByZWFjdCBw dWJsaWNseSBhbmQgaW4gYSB0aW1lbHkgbWFubmVyCgogICAgdG8gYW55IGlucXVpcmllcy4gVGVz dCBwcm9wb3NlZCBmaXhlcy4gRG8gcHJvYWN0aXZlIHRlc3Rpbmc6IHJldGVzdCB3aXRoIGF0Cgog ICAgbGVhc3QgZXZlcnkgZmlyc3QgcmVsZWFzZSBjYW5kaWRhdGUgKFJDKSBvZiBhIG5ldyBtYWlu bGluZSB2ZXJzaW9uIGFuZAoKICAgIHJlcG9ydCB5b3VyIHJlc3VsdHMuIFNlbmQgZnJpZW5kbHkg cmVtaW5kZXJzIGlmIHRoaW5ncyBzdGFsbC4gQW5kIHRyeSB0bwoKICAgIGhlbHAgeW91cnNlbGYs IGlmIHlvdSBkb24ndCBnZXQgYW55IGhlbHAgb3IgaWYgaXQncyB1bnNhdGlzZnlpbmcuKgoKCgpJ ZiB5b3VyIHJlcG9ydCB3YXMgZ29vZCBhbmQgeW91IGFyZSByZWFsbHkgbHVja3kgdGhlbiBvbmUg b2YgdGhlIGRldmVsb3BlcnMKCm1pZ2h0IGltbWVkaWF0ZWx5IHNwb3Qgd2hhdCdzIGNhdXNpbmcg dGhlIGlzc3VlOyB0aGV5IHRoZW4gbWlnaHQgd3JpdGUgYSBwYXRjaAoKdG8gZml4IGl0LCB0ZXN0 IGl0LCBhbmQgc2VuZCBpdCBzdHJhaWdodCBmb3IgaW50ZWdyYXRpb24gaW4gbWFpbmxpbmUgd2hp bGUKCnRhZ2dpbmcgaXQgZm9yIGxhdGVyIGJhY2twb3J0IHRvIHN0YWJsZSBhbmQgbG9uZ3Rlcm0g a2VybmVscyB0aGF0IG5lZWQgaXQuIFRoZW4KCmFsbCB5b3UgbmVlZCB0byBkbyBpcyByZXBseSB3 aXRoIGEgJ1RoYW5rIHlvdSB2ZXJ5IG11Y2gnIGFuZCBzd2l0Y2ggdG8gYSB2ZXJzaW9uCgp3aXRo IHRoZSBmaXggb25jZSBpdCBnZXRzIHJlbGVhc2VkLgoKCgpCdXQgdGhpcyBpZGVhbCBzY2VuYXJp byByYXJlbHkgaGFwcGVucy4gVGhhdCdzIHdoeSB0aGUgam9iIGlzIG9ubHkgc3RhcnRpbmcKCm9u Y2UgeW91IGdvdCB0aGUgcmVwb3J0IG91dC4gV2hhdCB5b3UnbGwgaGF2ZSB0byBkbyBkZXBlbmRz IG9uIHRoZSBzaXR1YXRpb25zLAoKYnV0IG9mdGVuIGl0IHdpbGwgYmUgdGhlIHRoaW5ncyBsaXN0 ZWQgYmVsb3cuIEJ1dCBiZWZvcmUgZGlnZ2luZyBpbnRvIHRoZQoKZGV0YWlscywgaGVyZSBhcmUg YSBmZXcgaW1wb3J0YW50IHRoaW5ncyB5b3UgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHRoaXMg cGFydAoKb2YgdGhlIHByb2Nlc3MuCgoKCgoKR2VuZXJhbCBhZHZpY2UgZm9yIGZ1cnRoZXIgaW50 ZXJhY3Rpb25zCgp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCgoKKipB bHdheXMgcmVwbHkgaW4gcHVibGljKio6IFdoZW4geW91IGZpbGVkIHRoZSBpc3N1ZSBpbiBhIGJ1 ZyB0cmFja2VyLCBhbHdheXMKCnJlcGx5IHRoZXJlIGFuZCBkbyBub3QgY29udGFjdCBhbnkgb2Yg dGhlIGRldmVsb3BlcnMgcHJpdmF0ZWx5IGFib3V0IGl0LiBGb3IKCm1haWxlZCByZXBvcnRzIGFs d2F5cyB1c2UgdGhlICdSZXBseS1hbGwnIGZ1bmN0aW9uIHdoZW4gcmVwbHlpbmcgdG8gYW55IG1h aWxzCgp5b3UgcmVjZWl2ZS4gVGhhdCBpbmNsdWRlcyBtYWlscyB3aXRoIGFueSBhZGRpdGlvbmFs IGRhdGEgeW91IG1pZ2h0IHdhbnQgdG8gYWRkCgp0byB5b3VyIHJlcG9ydDogZ28gdG8geW91ciBt YWlsIGFwcGxpY2F0aW9ucyAnU2VudCcgZm9sZGVyIGFuZCB1c2UgJ3JlcGx5LWFsbCcKCm9uIHlv dXIgbWFpbCB3aXRoIHRoZSByZXBvcnQuIFRoaXMgYXBwcm9hY2ggd2lsbCBtYWtlIHN1cmUgdGhl IHB1YmxpYyBtYWlsaW5nCgpsaXN0KHMpIGFuZCBldmVyeW9uZSBlbHNlIHRoYXQgZ2V0cyBpbnZv bHZlZCBvdmVyIHRpbWUgc3RheXMgaW4gdGhlIGxvb3A7IGl0CgphbHNvIGtlZXBzIHRoZSBtYWls IHRocmVhZCBpbnRhY3QsIHdoaWNoIGFtb25nIG90aGVycyBpcyByZWFsbHkgaW1wb3J0YW50IGZv cgoKbWFpbGluZyBsaXN0cyB0byBncm91cCBhbGwgcmVsYXRlZCBtYWlscyB0b2dldGhlci4KCgoK VGhlcmUgYXJlIGp1c3QgdHdvIHNpdHVhdGlvbnMgd2hlcmUgYSBjb21tZW50IGluIGEgYnVnIHRy YWNrZXIgb3IgYSAnUmVwbHktYWxsJwoKaXMgdW5zdWl0YWJsZToKCgoKICogU29tZW9uZSB0ZWxs cyB5b3UgdG8gc2VuZCBzb21ldGhpbmcgcHJpdmF0ZWx5LgoKCgogKiBZb3Ugd2VyZSB0b2xkIHRv IHNlbmQgc29tZXRoaW5nLCBidXQgbm90aWNlZCBpdCBjb250YWlucyBzZW5zaXRpdmUKCiAgIGlu Zm9ybWF0aW9uIHRoYXQgbmVlZHMgdG8gYmUga2VwdCBwcml2YXRlLiBJbiB0aGF0IGNhc2UgaXQn cyBva2F5IHRvIHNlbmQgaXQKCiAgIGluIHByaXZhdGUgdG8gdGhlIGRldmVsb3BlciB0aGF0IGFz a2VkIGZvciBpdC4gQnV0IG5vdGUgaW4gdGhlIHRpY2tldCBvciBhCgogICBtYWlsIHRoYXQgeW91 IGRpZCB0aGF0LCBzbyBldmVyeW9uZSBlbHNlIGtub3dzIHlvdSBob25vcmVkIHRoZSByZXF1ZXN0 LgoKCgoqKkRvIHJlc2VhcmNoIGJlZm9yZSBhc2tpbmcgZm9yIGNsYXJpZmljYXRpb25zIG9yIGhl bHAqKjogSW4gdGhpcyBwYXJ0IG9mIHRoZQoKcHJvY2VzcyBzb21lb25lIG1pZ2h0IHRlbGwgeW91 IHRvIGRvIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2tpbGwgeW91IG1pZ2h0Cgpub3QgaGF2 ZSBtYXN0ZXJlZCB5ZXQuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgYmUgYXNrZWQgdG8gdXNlIHNv bWUgdGVzdCB0b29scwoKeW91IG5ldmVyIGhhdmUgaGVhcmQgb2YgeWV0OyBvciB5b3UgbWlnaHQg YmUgYXNrZWQgdG8gYXBwbHkgYSBwYXRjaCB0byB0aGUKCkxpbnV4IGtlcm5lbCBzb3VyY2VzIHRv IHRlc3QgaWYgaXQgaGVscHMuIEluIHNvbWUgY2FzZXMgaXQgd2lsbCBiZSBmaW5lIHNlbmRpbmcK CmEgcmVwbHkgYXNraW5nIGZvciBpbnN0cnVjdGlvbnMgaG93IHRvIGRvIHRoYXQuIEJ1dCBiZWZv cmUgZ29pbmcgdGhhdCByb3V0ZSB0cnkKCnRvIGZpbmQgdGhlIGFuc3dlciBvd24geW91ciBvd24g Ynkgc2VhcmNoaW5nIHRoZSBpbnRlcm5ldDsgYWx0ZXJuYXRpdmVseQoKY29uc2lkZXIgYXNraW5n IGluIG90aGVyIHBsYWNlcyBmb3IgYWR2aWNlLiBGb3IgZXhhbXBsZSBhc2sgYSBmcmllbmQgb3Ig cG9zdAoKYWJvdXQgaXQgdG8gYSBjaGF0cm9vbSBvciBmb3J1bSB5b3Ugbm9ybWFsbHkgaGFuZyBv dXQuCgoKCioqQmUgcGF0aWVudCoqOiBJZiB5b3UgYXJlIHJlYWxseSBsdWNreSB5b3UgbWlnaHQg Z2V0IGEgcmVwbHkgdG8geW91ciByZXBvcnQKCndpdGhpbiBhIGZldyBob3Vycy4gQnV0IG1vc3Qg b2YgdGhlIHRpbWUgaXQgd2lsbCB0YWtlIGxvbmdlciwgYXMgbWFpbnRhaW5lcnMKCmFyZSBzY2F0 dGVyZWQgYXJvdW5kIHRoZSBnbG9iZSBhbmQgdGh1cyBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCB0 aW1lIHpvbmUg4oCTIG9uZQoKd2hlcmUgdGhleSBhbHJlYWR5IGVuam95IHRoZWlyIG5pZ2h0IGF3 YXkgZnJvbSBrZXlib2FyZC4KCgoKSW4gZ2VuZXJhbCwga2VybmVsIGRldmVsb3BlcnMgd2lsbCB0 YWtlIG9uZSB0byBmaXZlIGJ1c2luZXNzIGRheXMgdG8gcmVzcG9uZCB0bwoKcmVwb3J0cy4gU29t ZXRpbWVzIGl0IHdpbGwgdGFrZSBsb25nZXIsIGFzIHRoZXkgbWlnaHQgYmUgYnVzeSB3aXRoIHRo ZSBtZXJnZQoKd2luZG93cywgb3RoZXIgd29yaywgdmlzaXRpbmcgZGV2ZWxvcGVyIGNvbmZlcmVu Y2VzLCBvciBzaW1wbHkgZW5qb3lpbmcgYSBsb25nCgpzdW1tZXIgaG9saWRheS4KCgoKVGhlICdp c3N1ZXMgb2YgaGlnaCBwcmlvcml0eScgKHNlZSBhYm92ZSBmb3IgYW4gZXhwbGFuYXRpb24pIGFy ZSBhbiBleGNlcHRpb24KCmhlcmU6IG1haW50YWluZXJzIHNob3VsZCBhZGRyZXNzIHRoZW0gYXMg c29vbiBhcyBwb3NzaWJsZTsgdGhhdCdzIHdoeSB5b3UKCnNob3VsZCB3YWl0IGEgd2VlayBhdCBt YXhpbXVtIChvciBqdXN0IHR3byBkYXlzIGlmIGl0J3Mgc29tZXRoaW5nIHVyZ2VudCkKCmJlZm9y ZSBzZW5kaW5nIGEgZnJpZW5kbHkgcmVtaW5kZXIuCgoKClNvbWV0aW1lcyB0aGUgbWFpbnRhaW5l ciBtaWdodCBub3QgYmUgcmVzcG9uZGluZyBpbiBhIHRpbWVseSBtYW5uZXI7IG90aGVyCgp0aW1l cyB0aGVyZSBtaWdodCBiZSBkaXNhZ3JlZW1lbnRzLCBmb3IgZXhhbXBsZSBpZiBhbiBpc3N1ZSBx dWFsaWZpZXMgYXMKCnJlZ3Jlc3Npb24gb3Igbm90LiBJbiBzdWNoIGNhc2VzIHJhaXNlIHlvdXIg Y29uY2VybnMgb24gdGhlIG1haWxpbmcgbGlzdCBhbmQKCmFzayBvdGhlcnMgZm9yIHB1YmxpYyBv ciBwcml2YXRlIHJlcGxpZXMgaG93IHRvIG1vdmUgb24uIElmIHRoYXQgZmFpbHMsIGl0CgptaWdo dCBiZSBhcHByb3ByaWF0ZSB0byBnZXQgYSBoaWdoZXIgYXV0aG9yaXR5IGludm9sdmVkLiBJbiBj YXNlIG9mIGEgV2lGaQoKZHJpdmVyIHRoYXQgd291bGQgYmUgdGhlIHdpcmVsZXNzIG1haW50YWlu ZXJzOyBpZiB0aGVyZSBhcmUgbm8gaGlnaGVyIGxldmVsCgptYWludGFpbmVycyBvciBhbGwgZWxz ZSBmYWlscywgaXQgbWlnaHQgYmUgb25lIG9mIHRob3NlIHJhcmUgc2l0dWF0aW9ucyB3aGVyZQoK aXQncyBva2F5IHRvIGdldCBMaW51cyBUb3J2YWxkcyBpbnZvbHZlZC4KCgoKKipQcm9hY3RpdmUg dGVzdGluZyoqOiBFdmVyeSB0aW1lIHRoZSBmaXJzdCBwcmUtcmVsZWFzZSAodGhlICdyYzEnKSBv ZiBhIG5ldwoKbWFpbmxpbmUga2VybmVsIHZlcnNpb24gZ2V0cyByZWxlYXNlZCwgZ28gYW5kIGNo ZWNrIGlmIHRoZSBpc3N1ZSBpcyBmaXhlZCB0aGVyZQoKb3IgaWYgYW55dGhpbmcgb2YgaW1wb3J0 YW5jZSBjaGFuZ2VkLiBNZW50aW9uIHRoZSBvdXRjb21lIGluIHRoZSB0aWNrZXQgb3IgaW4gYQoK bWFpbCB5b3Ugc2VudCBhcyByZXBseSB0byB5b3VyIHJlcG9ydCAobWFrZSBzdXJlIGl0IGhhcyBh bGwgdGhvc2UgaW4gdGhlIENDCgp0aGF0IHVwIHRvIHRoYXQgcG9pbnQgcGFydGljaXBhdGVkIGlu IHRoZSBkaXNjdXNzaW9uKS4gVGhpcyB3aWxsIHNob3cgeW91cgoKY29tbWl0bWVudCBhbmQgdGhh dCB5b3UgYXJlIHdpbGxpbmcgdG8gaGVscC4gSXQgYWxzbyB0ZWxscyBkZXZlbG9wZXJzIGlmIHRo ZQoKaXNzdWUgcGVyc2lzdHMgYW5kIG1ha2VzIHN1cmUgdGhleSBkbyBub3QgZm9yZ2V0IGFib3V0 IGl0LiBBIGZldyBvdGhlcgoKb2NjYXNpb25hbCByZXRlc3RzIChmb3IgZXhhbXBsZSB3aXRoIHJj MywgcmM1IGFuZCB0aGUgZmluYWwpIGFyZSBhbHNvIGEgZ29vZAoKaWRlYSwgYnV0IG9ubHkgcmVw b3J0IHlvdXIgcmVzdWx0cyBpZiBzb21ldGhpbmcgcmVsZXZhbnQgY2hhbmdlZCBvciBpZiB5b3Ug YXJlCgp3cml0aW5nIHNvbWV0aGluZyBhbnl3YXkuCgoKCldpdGggYWxsIHRoZXNlIGdlbmVyYWwg dGhpbmdzIG9mZiB0aGUgdGFibGUgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgaG93Cgp0 byBoZWxwIHRvIGdldCBpc3N1ZXMgcmVzb2x2ZWQgb25jZSB0aGV5IHdlcmUgcmVwb3J0ZWQuCgoK CklucXVpcmVzIGFuZCB0ZXN0aW5nIHJlcXVlc3QKCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn4KCgoKSGVyZSBhcmUgeW91ciBkdXRpZXMgaW4gY2FzZSB5b3UgZ290IHJlcGxpZXMgdG8geW91 ciByZXBvcnQ6CgoKCioqQ2hlY2sgd2hvIHlvdSBkZWFsIHdpdGgqKjogTW9zdCBvZiB0aGUgdGlt ZSBpdCB3aWxsIGJlIHRoZSBtYWludGFpbmVyIG9yIGEKCmRldmVsb3BlciBvZiB0aGUgcGFydGlj dWxhciBjb2RlIGFyZWEgdGhhdCB3aWxsIHJlc3BvbmQgdG8geW91ciByZXBvcnQuIEJ1dCBhcwoK aXNzdWVzIGFyZSBub3JtYWxseSByZXBvcnRlZCBpbiBwdWJsaWMgaXQgY291bGQgYmUgYW55b25l IHRoYXQncyByZXBseWluZyDigJQKCmluY2x1ZGluZyBwZW9wbGUgdGhhdCB3YW50IHRvIGhlbHAs IGJ1dCBpbiB0aGUgZW5kIG1pZ2h0IGd1aWRlIHlvdSB0b3RhbGx5IG9mZgoKdHJhY2sgd2l0aCB0 aGVpciBxdWVzdGlvbnMgb3IgcmVxdWVzdHMuIFRoYXQgcmFyZWx5IGhhcHBlbnMsIGJ1dCBpdCdz IG9uZSBvZgoKbWFueSByZWFzb25zIHdoeSBpdCdzIHdpc2UgdG8gcXVpY2tseSBydW4gYW4gaW50 ZXJuZXQgc2VhcmNoIHRvIHNlZSB3aG8geW91J3JlCgppbnRlcmFjdGluZyB3aXRoLiBCeSBkb2lu ZyB0aGlzIHlvdSBhbHNvIGdldCBhd2FyZSBpZiB5b3VyIHJlcG9ydCB3YXMgaGVhcmQgYnkKCnRo ZSByaWdodCBwZW9wbGUsIGFzIGEgcmVtaW5kZXIgdG8gdGhlIG1haW50YWluZXIgKHNlZSBiZWxv dykgbWlnaHQgYmUgaW4gb3JkZXIKCmxhdGVyIGlmIGRpc2N1c3Npb24gZmFkZXMgb3V0IHdpdGhv dXQgbGVhZGluZyB0byBhIHNhdGlzZnlpbmcgc29sdXRpb24gZm9yIHRoZQoKaXNzdWUuCgoKCioq SW5xdWlyaWVzIGZvciBkYXRhKio6IE9mdGVuIHlvdSB3aWxsIGJlIGFza2VkIHRvIHRlc3Qgc29t ZXRoaW5nIG9yIHByb3ZpZGUKCmFkZGl0aW9uYWwgZGV0YWlscy4gVHJ5IHRvIHByb3ZpZGUgdGhl IHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBzb29uLCBhcyB5b3UgaGF2ZQoKdGhlIGF0dGVudGlvbiBv ZiBzb21lb25lIHRoYXQgbWlnaHQgaGVscCBhbmQgcmlzayBsb3NpbmcgaXQgdGhlIGxvbmdlciB5 b3UKCndhaXQ7IHRoYXQgb3V0Y29tZSBpcyBldmVuIGxpa2VseSBpZiB5b3UgZG8gbm90IHByb3Zp ZGUgdGhlIGluZm9ybWF0aW9uIHdpdGhpbgoKYSBmZXcgYnVzaW5lc3MgZGF5cy4KCgoKKipSZXF1 ZXN0cyBmb3IgdGVzdGluZyoqOiBXaGVuIHlvdSBhcmUgYXNrZWQgdG8gdGVzdCBhIGRpYWdub3N0 aWMgcGF0Y2ggb3IgYQoKcG9zc2libGUgZml4LCB0cnkgdG8gdGVzdCBpdCBpbiB0aW1lbHkgbWFu bmVyLCB0b28uIEJ1dCBkbyBpdCBwcm9wZXJseSBhbmQgbWFrZQoKc3VyZSB0byBub3QgcnVzaCBp dDogbWl4aW5nIHRoaW5ncyB1cCBjYW4gaGFwcGVuIGVhc2lseSBhbmQgY2FuIGxlYWQgdG8gYSBs b3QKCm9mIGNvbmZ1c2lvbiBmb3IgZXZlcnlvbmUgaW52b2x2ZWQuIEEgY29tbW9uIG1pc3Rha2Ug Zm9yIGV4YW1wbGUgaXMgdGhpbmtpbmcgYQoKcHJvcG9zZWQgcGF0Y2ggd2l0aCBhIGZpeCB3YXMg YXBwbGllZCwgYnV0IGluIGZhY3Qgd2Fzbid0LiBUaGluZ3MgbGlrZSB0aGF0CgpoYXBwZW4gZXZl biB0byBleHBlcmllbmNlZCB0ZXN0ZXJzIG9jY2FzaW9uYWxseSwgYnV0IHRoZXkgbW9zdCBvZiB0 aGUgdGltZSB3aWxsCgpub3RpY2Ugd2hlbiB0aGUga2VybmVsIHdpdGggdGhlIGZpeCBiZWhhdmVz IGp1c3QgYXMgb25lIHdpdGhvdXQgaXQuCgoKCldoYXQgdG8gZG8gd2hlbiBub3RoaW5nIG9mIHN1 YnN0YW5jZSBoYXBwZW5zCgp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgoKCgpTb21lIHJlcG9ydHMgd2lsbCBub3QgZ2V0IGFueSByZWFjdGlvbiBmcm9tIHRoZSBy ZXNwb25zaWJsZSBMaW51eCBrZXJuZWwKCmRldmVsb3BlcnM7IG9yIGEgZGlzY3Vzc2lvbiBhcm91 bmQgdGhlIGlzc3VlIGV2b2x2ZWQsIGJ1dCBmYWRlZCBvdXQgd2l0aAoKbm90aGluZyBvZiBzdWJz dGFuY2UgY29taW5nIG91dCBvZiBpdC4KCgoKSW4gdGhlc2UgY2FzZXMgd2FpdCB0d28gKGJldHRl cjogdGhyZWUpIHdlZWtzIGJlZm9yZSBzZW5kaW5nIGEgZnJpZW5kbHkKCnJlbWluZGVyOiBtYXli ZSB0aGUgbWFpbnRhaW5lciB3YXMganVzdCBhd2F5IGZyb20ga2V5Ym9hcmQgZm9yIGEgd2hpbGUg d2hlbgoKeW91ciByZXBvcnQgYXJyaXZlZCBvciBoYWQgc29tZXRoaW5nIG1vcmUgaW1wb3J0YW50 IHRvIHRha2UgY2FyZSBvZi4gV2hlbgoKd3JpdGluZyB0aGUgcmVtaW5kZXIsIGtpbmRseSBhc2sg aWYgYW55dGhpbmcgZWxzZSBmcm9tIHlvdXIgc2lkZSBpcyBuZWVkZWQgdG8KCmdldCB0aGUgYmFs bCBydW5uaW5nIHNvbWVob3cuIElmIHRoZSByZXBvcnQgZ290IG91dCBieSBtYWlsLCBkbyB0aGF0 IGluIHRoZQoKZmlyc3QgbGluZXMgb2YgYSBtYWlsIHRoYXQgaXMgYSByZXBseSB0byB5b3VyIGlu aXRpYWwgbWFpbCAoc2VlIGFib3ZlKSB3aGljaAoKaW5jbHVkZXMgYSBmdWxsIHF1b3RlIG9mIHRo ZSBvcmlnaW5hbCByZXBvcnQgYmVsb3c6IHRoYXQncyBvbiBvZiB0aG9zZSBmZXcKCnNpdHVhdGlv bnMgd2hlcmUgc3VjaCBhICdUT0ZVJyAoVGV4dCBPdmVyLCBGdWxscXVvdGUgVW5kZXIpIGlzIHRo ZSByaWdodAoKYXBwcm9hY2gsIGFzIHRoZW4gYWxsIHRoZSByZWNpcGllbnRzIHdpbGwgaGF2ZSB0 aGUgZGV0YWlscyBhdCBoYW5kIGltbWVkaWF0ZWx5CgppbiB0aGUgcHJvcGVyIG9yZGVyLgoKCgpB ZnRlciB0aGUgcmVtaW5kZXIgd2FpdCB0aHJlZSBtb3JlIHdlZWtzIGZvciByZXBsaWVzLiBJZiB5 b3Ugc3RpbGwgZG9uJ3QgZ2V0IGEKCnByb3BlciByZWFjdGlvbiwgeW91IGZpcnN0IHNob3VsZCBy ZWNvbnNpZGVyIHlvdXIgYXBwcm9hY2guIERpZCB5b3UgbWF5YmUgdHJ5Cgp0byByZWFjaCBvdXQg dG8gdGhlIHdyb25nIHBlb3BsZT8gV2FzIHRoZSByZXBvcnQgbWF5YmUgb2ZmZW5zaXZlIG9yIHNv Cgpjb25mdXNpbmcgdGhhdCBwZW9wbGUgZGVjaWRlZCB0byBjb21wbGV0ZWx5IHN0YXkgYXdheSBm cm9tIGl0PyBUaGUgYmVzdCB3YXkgdG8KCnJ1bGUgb3V0IHN1Y2ggZmFjdG9yczogc2hvdyB0aGUg cmVwb3J0IHRvIG9uZSBvciB0d28gcGVvcGxlIGZhbWlsaWFyIHdpdGggRkxPU1MKCmlzc3VlIHJl cG9ydGluZyBhbmQgYXNrIGZvciB0aGVpciBvcGluaW9uLiBBbHNvIGFzayB0aGVtIGZvciB0aGVp ciBhZHZpY2UgaG93Cgp0byBtb3ZlIGZvcndhcmQuIFRoYXQgbWlnaHQgbWVhbjogcHJlcGFyZSBh IGJldHRlciByZXBvcnQgYW5kIG1ha2UgdGhvc2UgcGVvcGxlCgpyZXZpZXcgaXQgYmVmb3JlIHlv dSBzZW5kIGl0IG91dC4gU3VjaCBhbiBhcHByb2FjaCBpcyB0b3RhbGx5IGZpbmU7IGp1c3QKCm1l bnRpb24gdGhhdCB0aGlzIGlzIHRoZSBzZWNvbmQgYW5kIGltcHJvdmVkIHJlcG9ydCBvbiB0aGUg aXNzdWUgYW5kIGluY2x1ZGUgYQoKbGluayB0byB0aGUgZmlyc3QgcmVwb3J0LgoKCgpJZiB0aGUg cmVwb3J0IHdhcyBwcm9wZXIgeW91IGNhbiBzZW5kIGEgc2Vjb25kIHJlbWluZGVyOyBpbiBpdCBh c2sgZm9yIGFkdmljZQoKd2h5IHRoZSByZXBvcnQgZGlkIG5vdCBnZXQgYW55IHJlcGxpZXMuIEEg Z29vZCBtb21lbnQgZm9yIHRoaXMgc2Vjb25kIHJlbWluZGVyCgptYWlsIGlzIHNob3J0bHkgYWZ0 ZXIgdGhlIGZpcnN0IHByZS1yZWxlYXNlICh0aGUgJ3JjMScpIG9mIGEgbmV3IExpbnV4IGtlcm5l bAoKdmVyc2lvbiBnb3QgcHVibGlzaGVkLCBhcyB5b3Ugc2hvdWxkIHJldGVzdCBhbmQgcHJvdmlk ZSBhIHN0YXR1cyB1cGRhdGUgYXQgdGhhdAoKcG9pbnQgYW55d2F5IChzZWUgYWJvdmUpLgoKCgpJ ZiB0aGUgc2Vjb25kIHJlbWluZGVyIGFnYWluIHJlc3VsdHMgaW4gbm8gcmVhY3Rpb24gd2l0aGlu IGEgd2VlaywgdHJ5IHRvCgpjb250YWN0IGEgaGlnaGVyLWxldmVsIG1haW50YWluZXIgYXNraW5n IGZvciBhZHZpY2U6IGV2ZW4gYnVzeSBtYWludGFpbmVycyBieQoKdGhlbiBzaG91bGQgYXQgbGVh c3QgaGF2ZSBzZW50IHNvbWUga2luZCBvZiBhY2tub3dsZWRnbWVudC4KCgoKUmVtZW1iZXIgdG8g cHJlcGFyZSB5b3Vyc2VsZiBmb3IgYSBkaXNhcHBvaW50bWVudDogbWFpbnRhaW5lcnMgaWRlYWxs eSBzaG91bGQKCnJlYWN0IHNvbWVob3cgdG8gZXZlcnkgaXNzdWUgcmVwb3J0LCBidXQgdGhleSBh cmUgb25seSBvYmxpZ2VkIHRvIGZpeCB0aG9zZQoKJ2lzc3VlcyBvZiBoaWdoIHByaW9yaXR5JyBv dXRsaW5lZCBlYXJsaWVyLiBTbyBkb24ndCBiZSB0b28gZGV2YXN0YXRpbmcgaWYgeW91CgpnZXQg YSByZXBseSBhbG9uZyB0aGUgbGluZXMgb2YgJ3RoYW5rcyBmb3IgdGhlIHJlcG9ydCwgSSBoYXZl IG1vcmUgaW1wb3J0YW50Cgppc3N1ZXMgdG8gZGVhbCB3aXRoIGN1cnJlbnRseSBhbmQgd29uJ3Qg aGF2ZSB0aW1lIHRvIGxvb2sgaW50byB0aGlzIGZvciB0aGUKCmZvcmVzZWVhYmxlIGZ1dHVyZScu CgoKCkl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IGFmdGVyIHNvbWUgZGlzY3Vzc2lvbiBpbiB0aGUg YnVnIHRyYWNrZXIgb3Igb24gYSBsaXN0Cgpub3RoaW5nIGhhcHBlbnMgYW55bW9yZSBhbmQgcmVt aW5kZXJzIGRvbid0IGhlbHAgdG8gbW90aXZhdGUgYW55b25lIHRvIHdvcmsgb3V0CgphIGZpeC4g U3VjaCBzaXR1YXRpb25zIGNhbiBiZSBkZXZhc3RhdGluZywgYnV0IGlzIHdpdGhpbiB0aGUgY2Fy ZHMgd2hlbiBpdAoKY29tZXMgdG8gTGludXgga2VybmVsIGRldmVsb3BtZW50LiBUaGlzIGFuZCBz ZXZlcmFsIG90aGVyIHJlYXNvbnMgZm9yIG5vdAoKZ2V0dGluZyBoZWxwIGFyZSBleHBsYWluZWQg aW4gJ1doeSBzb21lIGlzc3VlcyB3b24ndCBnZXQgYW55IHJlYWN0aW9uIG9yIHJlbWFpbgoKdW5m aXhlZCBhZnRlciBiZWluZyByZXBvcnRlZCcgbmVhciB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQu CgoKCkRvbid0IGdldCBkZXZhc3RhdGVkIGlmIHlvdSBkb24ndCBmaW5kIGFueSBoZWxwIG9yIGlm IHRoZSBpc3N1ZSBpbiB0aGUgZW5kIGRvZXMKCm5vdCBnZXQgc29sdmVkOiB0aGUgTGludXgga2Vy bmVsIGlzIEZMT1NTIGFuZCB0aHVzIHlvdSBjYW4gc3RpbGwgaGVscCB5b3Vyc2VsZi4KCllvdSBm b3IgZXhhbXBsZSBjb3VsZCB0cnkgdG8gZmluZCBvdGhlcnMgdGhhdCBhcmUgYWZmZWN0ZWQgYW5k IHRlYW0gdXAgd2l0aAoKdGhlbSB0byBnZXQgdGhlIGlzc3VlIHJlc29sdmVkLiBTdWNoIGEgdGVh bSBjb3VsZCBwcmVwYXJlIGEgZnJlc2ggcmVwb3J0Cgp0b2dldGhlciB0aGF0IG1lbnRpb25zIGhv dyBtYW55IHlvdSBhcmUgYW5kIHdoeSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGluIHlvdXIKCm9w dGlvbiBzaG91bGQgZ2V0IGZpeGVkLiBNYXliZSB0b2dldGhlciB5b3UgY2FuIGFsc28gbmFycm93 IGRvd24gdGhlIHJvb3QgY2F1c2UKCm9yIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgcmVn cmVzc2lvbiwgd2hpY2ggb2Z0ZW4gbWFrZXMgZGV2ZWxvcGluZyBhIGZpeAoKZWFzaWVyLiBBbmQg d2l0aCBhIGJpdCBvZiBsdWNrIHRoZXJlIG1pZ2h0IGJlIHNvbWVvbmUgaW4gdGhlIHRlYW0gdGhh dCBrbm93cyBhCgpiaXQgYWJvdXQgcHJvZ3JhbW1pbmcgYW5kIG1pZ2h0IGJlIGFibGUgdG8gd3Jp dGUgYSBmaXguCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpLc3VtbWl0LWRpc2N1c3MgbWFpbGluZyBsaXN0CktzdW1taXQtZGlzY3Vzc0BsaXN0cy5saW51 eGZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2tzdW1taXQtZGlzY3Vzcwo=