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=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 1FD7BC433DF for ; Thu, 11 Jun 2020 14:29:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 EE4D72065C for ; Thu, 11 Jun 2020 14:29:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EE4D72065C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8CEE66E848; Thu, 11 Jun 2020 14:29:28 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D7946E848; Thu, 11 Jun 2020 14:29:27 +0000 (UTC) IronPort-SDR: j1CIvtoZkOTlPMBmc3c3UgY00IrY5An0a2bXHvNmDNobi5RI885AUMd2U3HTAfdTAi0LMev3ub o41EE46tiNHg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:26 -0700 IronPort-SDR: /OQuU5Pl16dhKAQ8MPr5NunLJJHsE69DTemvtYctQTSHF8XNlyfq34qfyk7OXe4eIYIwNaYMfB 30OgsFGnvRFA== X-IronPort-AV: E=Sophos;i="5.73,499,1583222400"; d="scan'208";a="419117978" Received: from osides-mobl1.ger.corp.intel.com (HELO [10.214.204.82]) ([10.214.204.82]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:21 -0700 Subject: Re: [Intel-gfx] [PATCH 03/18] dma-fence: basic lockdep annotations To: Daniel Vetter References: <20200604081224.863494-1-daniel.vetter@ffwll.ch> <20200604081224.863494-4-daniel.vetter@ffwll.ch> <19c6fe47-50ff-869e-d3f0-703b8165d577@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <28c18eed-6d03-aeb2-9e0f-39bae84dfb8c@linux.intel.com> Date: Thu, 11 Jun 2020 15:29:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rdma , Intel Graphics Development , LKML , amd-gfx list , Chris Wilson , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Thomas Hellstrom , DRI Development , Daniel Vetter , Mika Kuoppala , =?UTF-8?Q?Christian_K=c3=b6nig?= , "open list:DMA BUFFER SHARING FRAMEWORK" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Ck9uIDExLzA2LzIwMjAgMTI6MjksIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gVGh1LCBKdW4g MTEsIDIwMjAgYXQgMTI6MzYgUE0gVHZydGtvIFVyc3VsaW4KPiA8dHZydGtvLnVyc3VsaW5AbGlu dXguaW50ZWwuY29tPiB3cm90ZToKPj4gT24gMTAvMDYvMjAyMCAxNjoxNywgRGFuaWVsIFZldHRl ciB3cm90ZToKPj4+IE9uIFdlZCwgSnVuIDEwLCAyMDIwIGF0IDQ6MjIgUE0gVHZydGtvIFVyc3Vs aW4KPj4+IDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pj4+Cj4+Pj4K Pj4+PiBPbiAwNC8wNi8yMDIwIDA5OjEyLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+PiBEZXNp Z24gaXMgc2ltaWxhciB0byB0aGUgbG9ja2RlcCBhbm5vdGF0aW9ucyBmb3Igd29ya2VycywgYnV0 IHdpdGgKPj4+Pj4gc29tZSB0d2lzdHM6Cj4+Pj4+Cj4+Pj4+IC0gV2UgdXNlIGEgcmVhZC1sb2Nr IGZvciB0aGUgZXhlY3V0aW9uL3dvcmtlci9jb21wbGV0aW9uIHNpZGUsIHNvIHRoYXQKPj4+Pj4g ICAgICB0aGlzIGV4cGxpY2l0IGFubm90YXRpb24gY2FuIGJlIG1vcmUgbGliZXJhbGx5IHNwcmlu a2xlZCBhcm91bmQuCj4+Pj4+ICAgICAgV2l0aCByZWFkIGxvY2tzIGxvY2tkZXAgaXNuJ3QgZ29p bmcgdG8gY29tcGxhaW4gaWYgdGhlIHJlYWQtc2lkZQo+Pj4+PiAgICAgIGlzbid0IG5lc3RlZCB0 aGUgc2FtZSB3YXkgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMsIHNvIEFCQkEgZGVhZGxvY2tzCj4+ Pj4+ICAgICAgYXJlIG9rLiBXaGljaCB0aGV5IGFyZSwgc2luY2UgdGhpcyBpcyBhbiBhbm5vdGF0 aW9uIG9ubHkuCj4+Pj4+Cj4+Pj4+IC0gV2UncmUgdXNpbmcgbm9uLXJlY3Vyc2l2ZSBsb2NrZGVw IHJlYWQgbG9jayBtb2RlLCBzaW5jZSBpbiByZWN1cnNpdmUKPj4+Pj4gICAgICByZWFkIGxvY2sg bW9kZSBsb2NrZGVwIGRvZXMgbm90IGNhdGNoIHJlYWQgc2lkZSBoYXphcmRzLiBBbmQgd2UKPj4+ Pj4gICAgICBfdmVyeV8gbXVjaCB3YW50IHJlYWQgc2lkZSBoYXphcmRzIHRvIGJlIGNhdWdodC4g Rm9yIGZ1bGwgZGV0YWlscyBvZgo+Pj4+PiAgICAgIHRoaXMgbGltaXRhdGlvbiBzZWUKPj4+Pj4K Pj4+Pj4gICAgICBjb21taXQgZTkxNDk4NTg5NzQ2MDY1ZTNhZTk1ZDlhMDBiMDY4ZTUyNWVlYzM0 Zgo+Pj4+PiAgICAgIEF1dGhvcjogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3Jn Pgo+Pj4+PiAgICAgIERhdGU6ICAgV2VkIEF1ZyAyMyAxMzoxMzoxMSAyMDE3ICswMjAwCj4+Pj4+ Cj4+Pj4+ICAgICAgICAgIGxvY2tpbmcvbG9ja2RlcC9zZWxmdGVzdHM6IEFkZCBtaXhlZCByZWFk LXdyaXRlIEFCQkEgdGVzdHMKPj4+Pj4KPj4+Pj4gLSBUbyBhbGxvdyBuZXN0aW5nIG9mIHRoZSBy ZWFkLXNpZGUgZXhwbGljaXQgYW5ub3RhdGlvbnMgd2UgZXhwbGljaXRseQo+Pj4+PiAgICAgIGtl ZXAgdHJhY2sgb2YgdGhlIG5lc3RpbmcuIGxvY2tfaXNfaGVsZCgpIGFsbG93cyB1cyB0byBkbyB0 aGF0Lgo+Pj4+Pgo+Pj4+PiAtIFRoZSB3YWl0LXNpZGUgYW5ub3RhdGlvbiBpcyBhIHdyaXRlIGxv Y2ssIGFuZCBlbnRpcmVseSBkb25lIHdpdGhpbgo+Pj4+PiAgICAgIGRtYV9mZW5jZV93YWl0KCkg Zm9yIGV2ZXJ5b25lIGJ5IGRlZmF1bHQuCj4+Pj4+Cj4+Pj4+IC0gVG8gYmUgYWJsZSB0byBmcmVl bHkgYW5ub3RhdGUgaGVscGVyIGZ1bmN0aW9ucyBJIHdhbnQgdG8gbWFrZSBpdCBvawo+Pj4+PiAg ICAgIHRvIGNhbGwgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIGZyb20gc29mdC9oYXJk aXJxIGNvbnRleHQuCj4+Pj4+ICAgICAgRmlyc3QgYXR0ZW1wdCB3YXMgdXNpbmcgdGhlIGhhcmRp cnEgbG9ja2luZyBjb250ZXh0IGZvciB0aGUgd3JpdGUKPj4+Pj4gICAgICBzaWRlIGluIGxvY2tk ZXAsIGJ1dCB0aGlzIGZvcmNlcyBhbGwgbm9ybWFsIHNwaW5sb2NrcyBuZXN0ZWQgd2l0aGluCj4+ Pj4+ICAgICAgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIHRvIGJlIHNwaW5sb2Nrcy4g VGhhdCBib2xsb2Nrcy4KPj4+Pj4KPj4+Pj4gICAgICBUaGUgYXBwcm9hY2ggbm93IGlzIHRvIHNp bXBsZSBjaGVjayBpbl9hdG9taWMoKSwgYW5kIGZvciB0aGVzZSBjYXNlcwo+Pj4+PiAgICAgIGVu dGlyZWx5IHJlbHkgb24gdGhlIG1pZ2h0X3NsZWVwKCkgY2hlY2sgaW4gZG1hX2ZlbmNlX3dhaXQo KS4gVGhhdAo+Pj4+PiAgICAgIHdpbGwgY2F0Y2ggYW55IHdyb25nIG5lc3RpbmcgYWdhaW5zdCBz cGlubG9ja3MgZnJvbSBzb2Z0L2hhcmRpcnEKPj4+Pj4gICAgICBjb250ZXh0cy4KPj4+Pj4KPj4+ Pj4gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGV2ZXJ5IGNvZGUgcGF0aCB0aGF0J3MgY3JpdGljYWwg Zm9yIGV2ZW50dWFsbHkKPj4+Pj4gc2lnbmFsbGluZyBhIGRtYV9mZW5jZSBzaG91bGQgYmUgYW5u b3RhdGVkIHdpdGgKPj4+Pj4gZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nLiBUaGUgYW5u b3RhdGlvbiBpZGVhbGx5IHN0YXJ0cyByaWdodAo+Pj4+PiBhZnRlciBhIGRtYV9mZW5jZSBpcyBw dWJsaXNoZWQgKGFkZGVkIHRvIGEgZG1hX3Jlc3YsIGV4cG9zZWQgYXMgYQo+Pj4+PiBzeW5jX2Zp bGUgZmQsIGF0dGFjaGVkIHRvIGEgZHJtX3N5bmNvYmogZmQsIG9yIGFueXRoaW5nIGVsc2UgdGhh dAo+Pj4+PiBtYWtlcyB0aGUgZG1hX2ZlbmNlIHZpc2libGUgdG8gb3RoZXIga2VybmVsIHRocmVh ZHMpLCB1cCB0byBhbmQKPj4+Pj4gaW5jbHVkaW5nIHRoZSBkbWFfZmVuY2Vfd2FpdCgpLiBFeGFt cGxlcyBhcmUgaXJxIGhhbmRsZXJzLCB0aGUKPj4+Pj4gc2NoZWR1bGVyIHJ0IHRocmVhZHMsIHRo ZSB0YWlsIG9mIGV4ZWNidWYgKGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nCj4+Pj4+IGZlbmNlcyBh cmUgdmlzaWJsZSksIGFueSB3b3JrZXJzIHRoYXQgZW5kIHVwIHNpZ25hbGxpbmcgZG1hX2ZlbmNl cyBhbmQKPj4+Pj4gcmVhbGx5IGFueXRoaW5nIGVsc2UuIE5vdCBhbm5vdGF0ZWQgc2hvdWxkIGJl IGNvZGUgcGF0aHMgdGhhdCBvbmx5Cj4+Pj4+IGNvbXBsZXRlIGZlbmNlcyBvcHBvcnR1bmlzdGlj YWxseSBhcyB0aGUgZ3B1IHByb2dyZXNzZXMsIGxpa2UgZS5nLgo+Pj4+PiBzaHJpbmtlci9ldmlj dGlvbiBjb2RlLgo+Pj4+Pgo+Pj4+PiBUaGUgbWFpbiBjbGFzcyBvZiBkZWFkbG9ja3MgdGhpcyBp cyBzdXBwb3NlZCB0byBjYXRjaCBhcmU6Cj4+Pj4+Cj4+Pj4+IFRocmVhZCBBOgo+Pj4+Pgo+Pj4+ PiAgICAgICAgIG11dGV4X2xvY2soQSk7Cj4+Pj4+ICAgICAgICAgbXV0ZXhfdW5sb2NrKEEpOwo+ Pj4+Pgo+Pj4+PiAgICAgICAgIGRtYV9mZW5jZV9zaWduYWwoKTsKPj4+Pj4KPj4+Pj4gVGhyZWFk IEI6Cj4+Pj4+Cj4+Pj4+ICAgICAgICAgbXV0ZXhfbG9jayhBKTsKPj4+Pj4gICAgICAgICBkbWFf ZmVuY2Vfd2FpdCgpOwo+Pj4+PiAgICAgICAgIG11dGV4X3VubG9jayhBKTsKPj4+Pj4KPj4+Pj4g VGhyZWFkIEIgaXMgYmxvY2tlZCBvbiBBIHNpZ25hbGxpbmcgdGhlIGZlbmNlLCBidXQgQSBuZXZl ciBnZXRzIGFyb3VuZAo+Pj4+PiB0byB0aGF0IGJlY2F1c2UgaXQgY2Fubm90IGFjcXVpcmUgdGhl IGxvY2sgQS4KPj4+Pj4KPj4+Pj4gTm90ZSB0aGF0IGRtYV9mZW5jZV93YWl0KCkgaXMgYWxsb3dl ZCB0byBiZSBuZXN0ZWQgd2l0aGluCj4+Pj4+IGRtYV9mZW5jZV9iZWdpbi9lbmRfc2lnbmFsbGlu ZyBzZWN0aW9ucy4gVG8gYWxsb3cgdGhpcyB0byBoYXBwZW4gdGhlCj4+Pj4+IHJlYWQgbG9jayBu ZWVkcyB0byBiZSB1cGdyYWRlZCB0byBhIHdyaXRlIGxvY2ssIHdoaWNoIG1lYW5zIHRoYXQgYW55 Cj4+Pj4+IG90aGVyIGxvY2sgaXMgYWNxdWlyZWQgYmV0d2VlbiB0aGUgZG1hX2ZlbmNlX2JlZ2lu X3NpZ25hbGxpbmcoKSBjYWxsIGFuZAo+Pj4+PiB0aGUgY2FsbCB0byBkbWFfZmVuY2Vfd2FpdCgp LCBhbmQgc3RpbGwgaGVsZCwgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbgo+Pj4+PiBpbW1lZGlhdGUg bG9ja2RlcCBjb21wbGFpbnQuIFRoZSBvbmx5IG90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBub3QK Pj4+Pj4gYW5ub3RhdGUgc3VjaCBjYWxscywgZGVmZWF0aW5nIHRoZSBwb2ludC4gVGhlcmVmb3Jl IHRoZXNlIGFubm90YXRpb25zCj4+Pj4+IGNhbm5vdCBiZSBzcHJpbmtsZWQgb3ZlciB0aGUgY29k ZSBlbnRpcmVseSBtaW5kbGVzcyB0byBhdm9pZCBmYWxzZQo+Pj4+PiBwb3NpdGl2ZXMuCj4+Pj4+ Cj4+Pj4+IHYyOiBoYW5kbGUgc29mdC9oYXJkaXJxIGN0eCBiZXR0ZXIgYWdhaW5zdCB3cml0ZSBz aWRlIGFuZCBkb250IGZvcmdldAo+Pj4+PiBFWFBPUlRfU1lNQk9MLCBkcml2ZXJzIGNhbid0IHVz ZSB0aGlzIG90aGVyd2lzZS4KPj4+Pj4KPj4+Pj4gdjM6IEtlcm5lbGRvYy4KPj4+Pj4KPj4+Pj4g djQ6IFNvbWUgc3BlbGxpbmcgZml4ZXMgZnJvbSBNaWthCj4+Pj4+Cj4+Pj4+IENjOiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPj4+Pj4gQ2M6IFRob21hcyBIZWxsc3Ry b20gPHRob21hcy5oZWxsc3Ryb21AaW50ZWwuY29tPgo+Pj4+PiBDYzogbGludXgtbWVkaWFAdmdl ci5rZXJuZWwub3JnCj4+Pj4+IENjOiBsaW5hcm8tbW0tc2lnQGxpc3RzLmxpbmFyby5vcmcKPj4+ Pj4gQ2M6IGxpbnV4LXJkbWFAdmdlci5rZXJuZWwub3JnCj4+Pj4+IENjOiBhbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+Pj4+PiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+Pj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Pj4+ IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t Pgo+Pj4+PiBDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPj4+Pj4gLS0tCj4+Pj4+ICAgICBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5y c3QgfCAgMTIgKy0KPj4+Pj4gICAgIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYyAgICAgICAg ICB8IDE2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4gICAgIGluY2x1ZGUvbGlu dXgvZG1hLWZlbmNlLmggICAgICAgICAgICB8ICAxMiArKwo+Pj4+PiAgICAgMyBmaWxlcyBjaGFu Z2VkLCAxODIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdCBiL0RvY3VtZW50YXRp b24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+Pj4+PiBpbmRleCA2M2RlYzc2ZDFkOGQuLjA1ZDg1 NjEzMTE0MCAxMDA2NDQKPj4+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1i dWYucnN0Cj4+Pj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+ Pj4+PiBAQCAtMTAwLDExICsxMDAsMTEgQEAgQ1BVIEFjY2VzcyB0byBETUEgQnVmZmVyIE9iamVj dHMKPj4+Pj4gICAgIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+ Pj4+ICAgICAgICA6ZG9jOiBjcHUgYWNjZXNzCj4+Pj4+Cj4+Pj4+IC1GZW5jZSBQb2xsIFN1cHBv cnQKPj4+Pj4gLX5+fn5+fn5+fn5+fn5+fn5+fgo+Pj4+PiArSW1wbGljaXQgRmVuY2UgUG9sbCBT dXBwb3J0Cj4+Pj4+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4KPj4+Pj4gICAg IC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+Pj4+IC0gICA6ZG9j OiBmZW5jZSBwb2xsaW5nCj4+Pj4+ICsgICA6ZG9jOiBpbXBsaWNpdCBmZW5jZSBwb2xsaW5nCj4+ Pj4+Cj4+Pj4+ICAgICBLZXJuZWwgRnVuY3Rpb25zIGFuZCBTdHJ1Y3R1cmVzIFJlZmVyZW5jZQo+ Pj4+PiAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4g QEAgLTEzMyw2ICsxMzMsMTIgQEAgRE1BIEZlbmNlcwo+Pj4+PiAgICAgLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYwo+Pj4+PiAgICAgICAgOmRvYzogRE1BIGZlbmNl cyBvdmVydmlldwo+Pj4+Pgo+Pj4+PiArRE1BIEZlbmNlIFNpZ25hbGxpbmcgQW5ub3RhdGlvbnMK Pj4+Pj4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4+Pj4+ICsKPj4+Pj4gKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMKPj4+Pj4gKyAgIDpkb2M6 IGZlbmNlIHNpZ25hbGxpbmcgYW5ub3RhdGlvbgo+Pj4+PiArCj4+Pj4+ICAgICBETUEgRmVuY2Vz IEZ1bmN0aW9ucyBSZWZlcmVuY2UKPj4+Pj4gICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5j IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IGluZGV4IDY1NmU5YWMyZDAyOC4u MDAwNWJjMDAyNTI5IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNl LmMKPj4+Pj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IEBAIC0xMTAs NiArMTEwLDE2MCBAQCB1NjQgZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2ModW5zaWduZWQgbnVtKQo+ Pj4+PiAgICAgfQo+Pj4+PiAgICAgRVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY29udGV4dF9hbGxv Yyk7Cj4+Pj4+Cj4+Pj4+ICsvKioKPj4+Pj4gKyAqIERPQzogZmVuY2Ugc2lnbmFsbGluZyBhbm5v dGF0aW9uCj4+Pj4+ICsgKgo+Pj4+PiArICogUHJvdmluZyBjb3JyZWN0bmVzcyBvZiBhbGwgdGhl IGtlcm5lbCBjb2RlIGFyb3VuZCAmZG1hX2ZlbmNlIHRocm91Z2ggY29kZQo+Pj4+PiArICogcmV2 aWV3IGFuZCB0ZXN0aW5nIGlzIHRyaWNreSBmb3IgYSBmZXcgcmVhc29uczoKPj4+Pj4gKyAqCj4+ Pj4+ICsgKiAqIEl0IGlzIGEgY3Jvc3MtZHJpdmVyIGNvbnRyYWN0LCBhbmQgdGhlcmVmb3JlIGFs bCBkcml2ZXJzIG11c3QgZm9sbG93IHRoZQo+Pj4+PiArICogICBzYW1lIHJ1bGVzIGZvciBsb2Nr IG5lc3Rpbmcgb3JkZXIsIGNhbGxpbmcgY29udGV4dHMgZm9yIHZhcmlvdXMgZnVuY3Rpb25zCj4+ Pj4+ICsgKiAgIGFuZCBhbnl0aGluZyBlbHNlIHNpZ25pZmljYW50IGZvciBpbi1rZXJuZWwgaW50 ZXJmYWNlcy4gQnV0IGl0IGlzIGFsc28KPj4+Pj4gKyAqICAgaW1wb3NzaWJsZSB0byB0ZXN0IGFs bCBkcml2ZXJzIGluIGEgc2luZ2xlIG1hY2hpbmUsIGhlbmNlIGJydXRlLWZvcmNlIE4gdnMuCj4+ Pj4+ICsgKiAgIE4gdGVzdGluZyBvZiBhbGwgY29tYmluYXRpb25zIGlzIGltcG9zc2libGUuIEV2 ZW4ganVzdCBsaW1pdGluZyB0byB0aGUKPj4+Pj4gKyAqICAgcG9zc2libGUgY29tYmluYXRpb25z IGlzIGluZmVhc2libGUuCj4+Pj4+ICsgKgo+Pj4+PiArICogKiBUaGVyZSBpcyBhbiBlbm9ybW91 cyBhbW91bnQgb2YgZHJpdmVyIGNvZGUgaW52b2x2ZWQuIEZvciByZW5kZXIgZHJpdmVycwo+Pj4+ PiArICogICB0aGVyZSdzIHRoZSB0YWlsIG9mIGNvbW1hbmQgc3VibWlzc2lvbiwgYWZ0ZXIgZmVu Y2VzIGFyZSBwdWJsaXNoZWQsCj4+Pj4+ICsgKiAgIHNjaGVkdWxlciBjb2RlLCBpbnRlcnJ1cHQg YW5kIHdvcmtlcnMgdG8gcHJvY2VzcyBqb2IgY29tcGxldGlvbiwKPj4+Pj4gKyAqICAgYW5kIHRp bWVvdXQsIGdwdSByZXNldCBhbmQgZ3B1IGhhbmcgcmVjb3ZlcnkgY29kZS4gUGx1cyBmb3IgaW50 ZWdyYXRpb24KPj4+Pj4gKyAqICAgd2l0aCBjb3JlIG1tIHdpdGggaGF2ZSAmbW11X25vdGlmaWVy LCByZXNwZWN0aXZlbHkgJm1tdV9pbnRlcnZhbF9ub3RpZmllciwKPj4+Pj4gKyAqICAgYW5kICZz aHJpbmtlci4gRm9yIG1vZGVzZXR0aW5nIGRyaXZlcnMgdGhlcmUncyB0aGUgY29tbWl0IHRhaWwg ZnVuY3Rpb25zCj4+Pj4+ICsgKiAgIGJldHdlZW4gd2hlbiBmZW5jZXMgZm9yIGFuIGF0b21pYyBt b2Rlc2V0IGFyZSBwdWJsaXNoZWQsIGFuZCB3aGVuIHRoZQo+Pj4+PiArICogICBjb3JyZXNwb25k aW5nIHZibGFuayBjb21wbGV0ZXMsIGluY2x1ZGluZyBhbnkgaW50ZXJydXB0IHByb2Nlc3Npbmcg YW5kCj4+Pj4+ICsgKiAgIHJlbGF0ZWQgd29ya2Vycy4gQXVkaXRpbmcgYWxsIHRoYXQgY29kZSwg YWNyb3NzIGFsbCBkcml2ZXJzLCBpcyBub3QKPj4+Pj4gKyAqICAgZmVhc2libGUuCj4+Pj4+ICsg Kgo+Pj4+PiArICogKiBEdWUgdG8gaG93IG1hbnkgb3RoZXIgc3Vic3lzdGVtcyBhcmUgaW52b2x2 ZWQgYW5kIHRoZSBsb2NraW5nIGhpZXJhcmNoaWVzCj4+Pj4+ICsgKiAgIHRoaXMgcHVsbHMgaW4g dGhlcmUgaXMgZXh0cmVtZWx5IHRoaW4gd2lnZ2xlLXJvb20gZm9yIGRyaXZlci1zcGVjaWZpYwo+ Pj4+PiArICogICBkaWZmZXJlbmNlcy4gJmRtYV9mZW5jZSBpbnRlcmFjdHMgd2l0aCBhbG1vc3Qg YWxsIG9mIHRoZSBjb3JlIG1lbW9yeQo+Pj4+PiArICogICBoYW5kbGluZyB0aHJvdWdoIHBhZ2Ug ZmF1bHQgaGFuZGxlcnMgdmlhICZkbWFfcmVzdiwgZG1hX3Jlc3ZfbG9jaygpIGFuZAo+Pj4+PiAr ICogICBkbWFfcmVzdl91bmxvY2soKS4gT24gdGhlIG90aGVyIHNpZGUgaXQgYWxzbyBpbnRlcmFj dHMgdGhyb3VnaCBhbGwKPj4+Pj4gKyAqICAgYWxsb2NhdGlvbiBzaXRlcyB0aHJvdWdoICZtbXVf bm90aWZpZXIgYW5kICZzaHJpbmtlci4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBGdXJ0aGVybW9yZSBs b2NrZGVwIGRvZXMgbm90IGhhbmRsZSBjcm9zcy1yZWxlYXNlIGRlcGVuZGVuY2llcywgd2hpY2gg bWVhbnMKPj4+Pj4gKyAqIGFueSBkZWFkbG9ja3MgYmV0d2VlbiBkbWFfZmVuY2Vfd2FpdCgpIGFu ZCBkbWFfZmVuY2Vfc2lnbmFsKCkgY2FuJ3QgYmUgY2F1Z2h0Cj4+Pj4+ICsgKiBhdCBydW50aW1l IHdpdGggc29tZSBxdWljayB0ZXN0aW5nLiBUaGUgc2ltcGxlc3QgZXhhbXBsZSBpcyBvbmUgdGhy ZWFkCj4+Pj4+ICsgKiB3YWl0aW5nIG9uIGEgJmRtYV9mZW5jZSB3aGlsZSBob2xkaW5nIGEgbG9j azo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgZG1hX2Zl bmNlX3dhaXQoQik7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEpOwo+Pj4+PiArICoKPj4+Pj4gKyAq IHdoaWxlIHRoZSBvdGhlciB0aHJlYWQgaXMgc3R1Y2sgdHJ5aW5nIHRvIGFjcXVpcmUgdGhlIHNh bWUgbG9jaywgd2hpY2gKPj4+Pj4gKyAqIHByZXZlbnRzIGl0IGZyb20gc2lnbmFsbGluZyB0aGUg ZmVuY2UgdGhlIHByZXZpb3VzIHRocmVhZCBpcyBzdHVjayB3YWl0aW5nCj4+Pj4+ICsgKiBvbjo6 Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEp Owo+Pj4+PiArICogICAgIGRtYV9mZW5jZV9zaWduYWwoQik7Cj4+Pj4+ICsgKgo+Pj4+PiArICog QnkgbWFudWFsbHkgYW5ub3RhdGluZyBhbGwgY29kZSByZWxldmFudCB0byBzaWduYWxsaW5nIGEg JmRtYV9mZW5jZSB3ZSBjYW4KPj4+Pj4gKyAqIHRlYWNoIGxvY2tkZXAgYWJvdXQgdGhlc2UgZGVw ZW5kZW5jaWVzLCB3aGljaCBhbHNvIGhlbHBzIHdpdGggdGhlIHZhbGlkYXRpb24KPj4+Pj4gKyAq IGhlYWRhY2hlIHNpbmNlIG5vdyBsb2NrZGVwIGNhbiBjaGVjayBhbGwgdGhlIHJ1bGVzIGZvciB1 czo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgY29va2llID0gZG1hX2ZlbmNlX2JlZ2luX3NpZ25h bGxpbmcoKTsKPj4+Pj4gKyAqICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICB1bmxvY2soQSk7Cj4+ Pj4+ICsgKiAgICBkbWFfZmVuY2Vfc2lnbmFsKEIpOwo+Pj4+PiArICogICAgZG1hX2ZlbmNlX2Vu ZF9zaWduYWxsaW5nKGNvb2tpZSk7Cj4+Pj4+ICsgKgo+Pj4+PiArICogRm9yIHVzaW5nIGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgYW5kIGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZygpIHRv Cj4+Pj4+ICsgKiBhbm5vdGF0ZSBjcml0aWNhbCBzZWN0aW9ucyB0aGUgZm9sbG93aW5nIHJ1bGVz IG5lZWQgdG8gYmUgb2JzZXJ2ZWQ6Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBBbGwgY29kZSBuZWNl c3NhcnkgdG8gY29tcGxldGUgYSAmZG1hX2ZlbmNlIG11c3QgYmUgYW5ub3RhdGVkLCBmcm9tIHRo ZQo+Pj4+PiArICogICBwb2ludCB3aGVyZSBhIGZlbmNlIGlzIGFjY2Vzc2libGUgdG8gb3RoZXIg dGhyZWFkcywgdG8gdGhlIHBvaW50IHdoZXJlCj4+Pj4+ICsgKiAgIGRtYV9mZW5jZV9zaWduYWwo KSBpcyBjYWxsZWQuIFVuLWFubm90YXRlZCBjb2RlIGNhbiBjb250YWluIGRlYWRsb2NrIGlzc3Vl cywKPj4+Pj4gKyAqICAgYW5kIGR1ZSB0byB0aGUgdmVyeSBzdHJpY3QgcnVsZXMgYW5kIG1hbnkg Y29ybmVyIGNhc2VzIGl0IGlzIGluZmVhc2libGUgdG8KPj4+Pj4gKyAqICAgY2F0Y2ggdGhlc2Ug anVzdCB3aXRoIHJldmlldyBvciBub3JtYWwgc3RyZXNzIHRlc3RpbmcuCj4+Pj4+ICsgKgo+Pj4+ PiArICogKiAmc3RydWN0IGRtYV9yZXN2IGRlc2VydmVzIGEgc3BlY2lhbCBub3RlLCBzaW5jZSB0 aGUgcmVhZGVycyBhcmUgb25seQo+Pj4+PiArICogICBwcm90ZWN0ZWQgYnkgcmN1LiBUaGlzIG1l YW5zIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24gc3RhcnRzIGFzIHNvb24KPj4+Pj4g KyAqICAgYXMgdGhlIG5ldyBmZW5jZXMgYXJlIGluc3RhbGxlZCwgZXZlbiBiZWZvcmUgZG1hX3Jl c3ZfdW5sb2NrKCkgaXMgY2FsbGVkLgo+Pj4+PiArICoKPj4+Pj4gKyAqICogVGhlIG9ubHkgZXhj ZXB0aW9uIGFyZSBmYXN0IHBhdGhzIGFuZCBvcHBvcnR1bmlzdGljIHNpZ25hbGxpbmcgY29kZSwg d2hpY2gKPj4+Pj4gKyAqICAgY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpIHB1cmVseSBhcyBhbiBv cHRpbWl6YXRpb24sIGJ1dCBpcyBub3QgcmVxdWlyZWQgdG8KPj4+Pj4gKyAqICAgZ3VhcmFudGVl IGNvbXBsZXRpb24gb2YgYSAmZG1hX2ZlbmNlLiBUaGUgdXN1YWwgZXhhbXBsZSBpcyBhIHdhaXQg SU9DVEwKPj4+Pj4gKyAqICAgd2hpY2ggY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpLCB3aGlsZSB0 aGUgbWFuZGF0b3J5IGNvbXBsZXRpb24gcGF0aCBnb2VzCj4+Pj4+ICsgKiAgIHRocm91Z2ggYSBo YXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHBvc3NpYmxlIGpvYiBjb21wbGV0aW9uIHdvcmtlci4KPj4+ Pj4gKyAqCj4+Pj4+ICsgKiAqIFRvIGFpZCBjb21wb3NhYmlsaXR5IG9mIGNvZGUsIHRoZSBhbm5v dGF0aW9ucyBjYW4gYmUgZnJlZWx5IG5lc3RlZCwgYXMgbG9uZwo+Pj4+PiArICogICBhcyB0aGUg b3ZlcmFsbCBsb2NraW5nIGhpZXJhcmNoeSBpcyBjb25zaXN0ZW50LiBUaGUgYW5ub3RhdGlvbnMg YWxzbyB3b3JrCj4+Pj4+ICsgKiAgIGJvdGggaW4gaW50ZXJydXB0IGFuZCBwcm9jZXNzIGNvbnRl eHQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoaXMKPj4+Pj4gKyAqICAgcmVxdWly ZXMgdGhhdCBjYWxsZXJzIHBhc3MgYW4gb3BhcXVlIGNvb2tpZSBmcm9tCj4+Pj4+ICsgKiAgIGRt YV9mZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgdG8gZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCku Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBWYWxpZGF0aW9uIGFnYWluc3QgdGhlIGNyb3NzIGRyaXZl ciBjb250cmFjdCBpcyBpbXBsZW1lbnRlZCBieSBwcmltaW5nCj4+Pj4+ICsgKiAgIGxvY2tkZXAg d2l0aCB0aGUgcmVsZXZhbnQgaGllcmFyY2h5IGF0IGJvb3QtdXAuIFRoaXMgbWVhbnMgZXZlbiBq dXN0Cj4+Pj4+ICsgKiAgIHRlc3Rpbmcgd2l0aCBhIHNpbmdsZSBkZXZpY2UgaXMgZW5vdWdoIHRv IHZhbGlkYXRlIGEgZHJpdmVyLCBhdCBsZWFzdCBhcwo+Pj4+PiArICogICBmYXIgYXMgZGVhZGxv Y2tzIHdpdGggZG1hX2ZlbmNlX3dhaXQoKSBhZ2FpbnN0IGRtYV9mZW5jZV9zaWduYWwoKSBhcmUK Pj4+Pj4gKyAqICAgY29uY2VybmVkLgo+Pj4+PiArICovCj4+Pj4+ICsjaWZkZWYgQ09ORklHX0xP Q0tERVAKPj4+Pj4gK3N0cnVjdCBsb2NrZGVwX21hcCAgIGRtYV9mZW5jZV9sb2NrZGVwX21hcCA9 IHsKPj4+Pj4gKyAgICAgLm5hbWUgPSAiZG1hX2ZlbmNlX21hcCIKPj4+Pj4gK307Cj4+Pj4KPj4+ PiBNYXliZSBhIHN0dXBpZCBxdWVzdGlvbiBiZWNhdXNlIHRoaXMgaXMgZGVmaW5pdGVseSBjb21w bGljYXRlZCwgYnV0Li4gSWYKPj4+PiB5b3UgaGF2ZSBhIHNpbmdsZS9zdGF0aWMvZ2xvYmFsIGxv Y2tkZXAgbWFwLCBkb2Vzbid0IHRoaXMgbWVhbiBfYWxsXwo+Pj4+IGxvY2tzLCBmcm9tIF9hbGxf IGRyaXZlcnMgaGFwcGVuaW5nIHRvIHVzZSBkbWEtZmVuY2VzIHdpbGwgZ2V0IHJlY29yZGVkCj4+ Pj4gaW4gaXQuIFdpbGwgdGhpcyB3b3JrIGFuZCBub3QgY2F1c2UgZmFsc2UgcG9zaXRpdmVzPwo+ Pj4+Cj4+Pj4gU291bmRzIGxpa2UgaXQgY291bGQgY3JlYXRlIGEgY29tbW9uIGxpbmsgYmV0d2Vl biB0d28gY29tcGxldGVseQo+Pj4+IHVuY29ubmVjdGVkIHVzYWdlcy4gQmVjYXVzZSBiZWxvdyB5 b3UgZG8gYWRkIGFubm90YXRpb25zIHRvIGdlbmVyaWMKPj4+PiBkbWFfZmVuY2Vfc2lnbmFsIGFu ZCBkbWFfZmVuY2Vfd2FpdC4KPj4+Cj4+PiBUaGlzIGlzIGZ1bGx5IGludGVudGlvbmFsLiBkbWEt ZmVuY2UgaXMgYSBjcm9zcy1kcml2ZXIgaW50ZXJmYWNlLCBpZgo+Pj4gZXZlcnkgZHJpdmVyIGlu dmVudHMgaXRzIG93biBydWxlcyBhYm91dCBob3cgdGhpcyBzaG91bGQgd29yayB3ZSBoYXZlCj4+ PiBhbiB1bm1haW50YWluYWJsZSBhbmQgdW5yZXZpZXdhYmxlIG1lc3MuCj4+Pgo+Pj4gSSd2ZSB0 eXBlZCB1cCB0aGUgZnVsbCBsZW5ndGggcmFudCBhbHJlYWR5IGhlcmU6Cj4+Pgo+Pj4gaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvZHJpLWRldmVsL0NBS01LN3VHbkZoYnB1dXJSc25aNGR2UlY5Z1Ff My1ybVNKYW9xU0ZZPStLdmVwel9DQUBtYWlsLmdtYWlsLmNvbS8KPj4KPj4gQnV0ICJwZXJmZWN0 IHN0b3JtIiBvZjoKPj4KPj4gICArIGdsb2JhbCBmZW5jZSBsb2NrbWFwCj4+ICAgKyBtbXUgbm90 aWZpZXJzCj4+ICAgKyBmcyByZWNsYWltCj4+ICAgKyBkZWZhdWx0IGFubm90YXRpb25zIGluIGRt YV9mZW5jZV9zaWduYWwgLyBkbWFfZmVuY2Vfd2FpdAo+Pgo+PiBFcXVhbHMgdG8gYW55dGhpbmcg ZXZlciB1c2luZyBkbWFfZmVuY2Ugd2lsbCBiZSBpbiBpbXBvc3NpYmxlIGNoYWlucyB3aXRoIHJh bmRvbSBvdGhlciBkcml2ZXJzLCBldmVuIGlmIG5laXRoZXIgZHJpdmVyIGhhcyBjb2RlIHRvIGV4 cG9ydC9zaGFyZSB0aGF0IGZlbmNlLgo+Pgo+PiBFeGFtcGxlIGZyb20gdGhlIENJIHJ1bjoKPj4K Pj4gICBbMjUuOTE4Nzg4XSBDaGFpbiBleGlzdHMgb2Y6Cj4+ICAgIGZzX3JlY2xhaW0gLS0+IG1t dV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IC0tPiBkbWFfZmVuY2VfbWFwCj4+ICAg WzI1LjkxODc5NF0gIFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOgo+PiAgIFsyNS45 MTg3OTddICAgICAgICBDUFUwICAgICAgICAgICAgICAgICAgICBDUFUxCj4+ICAgWzI1LjkxODc5 OV0gICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0KPj4gICBbMjUuOTE4ODAxXSAg IGxvY2soZG1hX2ZlbmNlX21hcCk7Cj4+ICAgWzI1LjkxODgwM10gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvY2sobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpOwo+ PiAgIFsyNS45MTg4MDddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKGRtYV9m ZW5jZV9tYXApOwo+PiAgIFsyNS45MTg4MDldICAgbG9jayhmc19yZWNsYWltKTsKPj4KPj4gV2hh dCBhYm91dCBhIGRtYV9mZW5jZV9leHBvcnQgaGVscGVyIHdoaWNoIHdvdWxkICJhcm0iIHRoZSBh bm5vdGF0aW9ucz8gSXQgd291bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIGZlbmNlIGlzIGV4 cG9ydGVkLiBNYXliZSB3aGVuIGFkZGVkIHRvIGRtYV9yZXN2LCBvciBleHBvcnRlZCB2aWEgc3lu Y19maWxlLCBldGMuIEJlZm9yZSB0aGF0IHBvaW50IGJlZ2luL2VuZF9zaWduYWxpbmcgYW5kIHNv IHdvdWxkIGJlIG5vLW9wcy4KPiAKPiBSdW4gQ0kgd2l0aG91dCB0aGUgaTkxNSBhbm5vdGF0aW9u IHBhdGNoLCBub3RoaW5nIGJyZWFrcy4KCkkgdGhpbmsgc29tZSBwYXJ0cyBvZiBpOTE1IHdvdWxk IHN0aWxsIGJyZWFrIHdpdGggbXkgaWRlYSB0byBvbmx5IGFwcGx5IGFubm90YXRpb25zIG9uIGV4 cG9ydGVkIGZlbmNlcy4gV2hhdCBkbyB5b3UgZGlzbGlrZSBhYm91dCB0aGF0IGlkZWE/IEkgdGhv dWdodCB0aGUgcG9pbnQgaXMgdG8gZW5mb3JjZSBydWxlcyBmb3IgX2V4cG9ydGVkXyBmZW5jZXMu CgpIb3cgeW91IGhhdmUgYW5ub3RhdGVkIGRtYV9mZW5jZV93b3JrIHlvdSBjYW4ndCBzYXksIG1h eWJlIGl0IGlzIGV4cG9ydGVkIG1heWJlIGl0IGlzbid0LiBJIHRoaW5rIGl0IGlzIGJ0dywgc28g c3BsYXRzIHdvdWxkIHN0aWxsIGJlIHRoZXJlLCBidXQgSSBhbSBub3Qgc3VyZSBpdCBpcyBjb25j ZXB0dWFsbHkgY29ycmVjdC4KCkF0IGxlYXN0IG15IHVuZGVyc3RhbmRpbmcgaXMgR0ZQX0tFUk5F TCBhbGxvY2F0aW9ucyBhcmUgb25seSBkaXNhbGxvd2VkIGJ5IHRoZSB2aXJ0dWUgb2YgdGhlIGds b2JhbCBkbWEtZmVuY2UgY29udHJhY3QuIElmIHlvdSB3YW50IHRvIGVuZm9yY2UgdGhleSBhcmUg bmV2ZXIgdXNlZCBmb3IgYW55dGhpbmcgYnV0IGV4cG9ydGluZywgdGhlbiB0aGF0IHdvdWxkIGJl IGEgYml0IGhhcnNoLCBubz8KCkFub3RoZXIgZXhhbXBsZSBmcm9tIHRoZSBDSSBydW46CgogWzI2 LjU4NTM1N10gICAgICAgIENQVTAgICAgICAgICAgICAgICAgICAgIENQVTEKIFsyNi41ODUzNTld ICAgICAgICAtLS0tICAgICAgICAgICAgICAgICAgICAtLS0tCiBbMjYuNTg1MzYwXSAgIGxvY2so ZG1hX2ZlbmNlX21hcCk7CiBbMjYuNTg1MzYyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9jayhtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCk7CiBbMjYuNTg1MzY1 XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jayhkbWFfZmVuY2VfbWFwKTsKIFsy Ni41ODUzNjddICAgbG9jayhpOTE1X2dlbV9vYmplY3RfaW50ZXJuYWwvMSk7CiBbMjYuNTg1MzY5 XSAKICoqKiBERUFETE9DSyAqKioKCkxldHMgc2F5IHNvbWVvbmUgc3VibWl0dGVkIGFuIGV4ZWNi dWYgdXNpbmcgdXNlcnB0ciBhcyBhIGJhdGNoIGFuZCB0aGVuIHVubWFwcGVkIGl0IGltbWVkaWF0 ZWx5LiBUaGF0IHdvdWxkIGV4cGxhaW4gQ1BVMSBnZXR0aW5nIGludG8gdGhlIG1tdSBub3RpZmll ciBhbmQgd2FpdGluZyBvbiB0aGlzIGJhdGNoIHRvIHVuYmluZCB0aGUgb2JqZWN0LgoKTWVhbndo aWxlIENQVTAgaXMgdGhlIGFzeW5jIGNvbW1hbmQgcGFyc2VyIGZvciB0aGlzIHJlcXVlc3QgdHJ5 aW5nIHRvIGxvY2sgdGhlIHNoYWRvdyBiYXRjaCBidWZmZXIuIEJlY2F1c2UgaXQgdXNlcyB0aGUg ZG1hX2ZlbmNlX3dvcmsgdGhpcyBpcyBiZXR3ZWVuIHRoZSBiZWdpbi9lbmQgc2lnbmFsbGluZyBt YXJrZXJzLgoKSXQgY2FuIGJlIHRoZSBzYW1lIGRtYS1mZW5jZSBJIHRoaW5rLCBzaW5jZSB3ZSBp bnN0YWxsIHRoZSBhc3luYyBwYXJzZXIgZmVuY2Ugb24gdGhlIHJlYWwgYmF0Y2ggZG1hLXJlc3Ys IGJ1dCBkbWFfZmVuY2VfbWFwIGlzIG5vdCBhIHJlYWwgbG9jaywgc28gd2hhdCBpcyBhY3R1YWxs eSBwcmV2ZW50aW5nIHByb2dyZXNzIGluIHRoaXMgY2FzZT8KCkNQVTEgaXMgd2FpdGluZyBvbiBh IGZlbmNlLCBidXQgQ1BVMCBjYW4gb2J0YWluIHRoZSBsb2NrKGk5MTVfZ2VtX29iamVjdF9pbnRl cm5hbC8xKSwgcHJvY2VlZCB0byBwYXJzZSB0aGUgYmF0Y2gsIGFuZCBleGl0IHRoZSBzaWduYWxs aW5nIHNlY3Rpb24uIEF0IHdoaWNoIHBvaW50IENQVTEgaXMgc3RpbGwgYmxvY2tlZCwgd2FpdGlu ZyB1bnRpbCB0aGUgZXhlY2J1ZiBmaW5pc2hlcyBhbmQgdGhlbiBtbXUgbm90aWZpZXIgY2FuIGZp bmlzaCBhbmQgaW52YWxpZGF0ZSB0aGUgcGFnZXMuCgpNYXliZSBJIGFtIG1pc3Npbmcgc29tZXRo aW5nIGJ1dCBJIGRvbid0IHNlZSBob3cgdGhpcyBvbmUgaXMgcmVhbC4KCj4gU28gd2UgY2FuIGdy YWR1YWxseSBmaXggdXAgZXhpc3RpbmcgY29kZSB0aGF0IGRvZXNuJ3QgcXVpdGUgZ2V0IGl0Cj4g cmlnaHQgYW5kIG1vdmUgb24uCj4KPj4+Pj4gKwo+Pj4+PiArLyoqCj4+Pj4+ICsgKiBkbWFfZmVu Y2VfYmVnaW5fc2lnbmFsbGluZyAtIGJlZ2luIGEgY3JpdGljYWwgRE1BIGZlbmNlIHNpZ25hbGxp bmcgc2VjdGlvbgo+Pj4+PiArICoKPj4+Pj4gKyAqIERyaXZlcnMgc2hvdWxkIHVzZSB0aGlzIHRv IGFubm90YXRlIHRoZSBiZWdpbm5pbmcgb2YgYW55IGNvZGUgc2VjdGlvbgo+Pj4+PiArICogcmVx dWlyZWQgdG8gZXZlbnR1YWxseSBjb21wbGV0ZSAmZG1hX2ZlbmNlIGJ5IGNhbGxpbmcgZG1hX2Zl bmNlX3NpZ25hbCgpLgo+Pj4+PiArICoKPj4+Pj4gKyAqIFRoZSBlbmQgb2YgdGhlc2UgY3JpdGlj YWwgc2VjdGlvbnMgYXJlIGFubm90YXRlZCB3aXRoCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3Np Z25hbGxpbmcoKS4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+PiArICoKPj4+Pj4g KyAqIE9wYXF1ZSBjb29raWUgbmVlZGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggbmVl ZHMgdG8gYmUgcGFzc2VkIHRvCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoKS4K Pj4+Pj4gKyAqLwo+Pj4+PiArYm9vbCBkbWFfZmVuY2VfYmVnaW5fc2lnbmFsbGluZyh2b2lkKQo+ Pj4+PiArewo+Pj4+PiArICAgICAvKiBleHBsaWNpdGx5IG5lc3RpbmcgLi4uICovCj4+Pj4+ICsg ICAgIGlmIChsb2NrX2lzX2hlbGRfdHlwZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAxKSkKPj4+ Pj4gKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+Pj4gKwo+Pj4+PiArICAgICAvKiByZWx5 IG9uIG1pZ2h0X3NsZWVwIGNoZWNrIGZvciBzb2Z0L2hhcmRpcnEgbG9ja3MgKi8KPj4+Pj4gKyAg ICAgaWYgKGluX2F0b21pYygpKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+Pj4+ PiArCj4+Pj4+ICsgICAgIC8qIC4uLiBhbmQgbm9uLXJlY3Vyc2l2ZSByZWFkbG9jayAqLwo+Pj4+ PiArICAgICBsb2NrX2FjcXVpcmUoJmRtYV9mZW5jZV9sb2NrZGVwX21hcCwgMCwgMCwgMSwgMSwg TlVMTCwgX1JFVF9JUF8pOwo+Pj4+Cj4+Pj4gV291bGQgaXQgd29yayBpZiBzaWduYWxsaW5nIHBh dGggd291bGQgbWFyayBpdHNlbGYgYXMgYSB3cml0ZSBsb2NrPyBJIGFtCj4+Pj4gdGhpbmtpbmcg aXQgd291bGQgYmUgbmljZSB0byBzZWUgaW4gbG9ja2RlcCBzcGxhdHMgd2hhdCBhcmUgc2lnbmFs cyBhbmQKPj4+PiB3aGF0IGFyZSB3YWl0cy4KPj4+Cj4+PiBZZWFoIGl0J2QgYmUgbmljZSB0byBo YXZlIGEgcmVhZCB2cyB3cml0ZSBuYW1lIGZvciB0aGUgbG9jay4gQnV0IHdlCj4+PiBhbHJlYWR5 IGhhdmUgdGhpcyBwcm9ibGVtIGZvciBlLmcuIGZsdXNoX3dvcmsoKSwgZnJvbSB3aGljaCBJJ3Zl Cj4+PiBzdG9sZW4gdGhpcyBpZGVhLiBTbyBpdCdzIG5vdCByZWFsbHkgbmV3LiBFc3NlbnRpYWxs eSBsb29rIGF0IHRoZQo+Pj4gYmFja3RyYWNlcyBsb2NrZGVwIGdpdmVzIHlvdSwgYW5kIHJlY29u c3RydWN0IHRoZSBkZWFkbG9jay4gSSdtIGhvcGluZwo+Pj4gdGhhdCBwZW9wbGUgd2lsbCBub3Rp Y2UgdGhlIHNwZWNpYWwgZnVuY3Rpb25zIG9uIHRoZSBiYWNrdHJhY2UsIGUuZy4KPj4+IGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nIHdpbGwgYmUgbGlzdGVkIGFzIG9mZmVuZGluZyBmdW5jdGlv bi9sb2NrCj4+PiBob2xkZXIsIGFuZCB0aGVuIHJlYWQgdGhlIGtlcm5lbGRvYy4KPj4+Cj4+Pj4g VGhlIHJlY3Vyc2l2ZSB1c2FnZSB3b3VsZG4ndCB3b3JrIHRoZW4gcmlnaHQ/IFdvdWxkIHdyaXRl IGFubm90YXRpb24gb24KPj4+PiB0aGUgd2FpdCBwYXRoIHdvcms/Cj4+Pgo+Pj4gV2FpdCBwYXRo IGlzIHdyaXRlIGFubm90YXRpb25zIGFscmVhZHksIGJ1dCB5ZWFoIGFubm90YXRpbmcgdGhlCj4+ PiBzaWduYWxsaW5nIHNpZGUgYXMgd3JpdGUgd291bGQgY2F1c2UgZW5kbGVzcyBhbW91bnRzIG9m IGFsc2UKPj4+IHBvc2l0aXZlcy4gQWxzbyBpdCBtYWtlcyBjb21wb3NhYmlsaXR5IG9mIHRoZXNl IGUuZy4gd2hhdCBJJ3ZlIGRvbmUgaW4KPj4+IGFtZGdwdSB3aXRoIGFubm90YXRpb25zIGluIHRk ciB3b3JrIGluIGRybS9zY2hlZHVsZXIsIGFubm90YXRpb25zIGluCj4+PiB0aGUgYW1kZ3B1IGdw dSByZXNldCBjb2RlIGFuZCB0aGVuIGFsc28gYW5ub3RhdGlvbnMgaW4gYXRvbWljIGNvZGUsCj4+ PiB3aGljaCBhbGwgbmVzdCB3aXRoaW4gZWFjaCBvdGhlciBpbiBzb21lIGNhbGwgY2hhaW5zLCBi dXQgbm90IG90aGVycy4KPj4+IERyb3BwaW5nIHRoZSByZWN1cnNpb24gd291bGQgYnJlYWsgdGhh dCBhbmQgbWFrZSBpdCByZWFsbHkgYXdrd2FyZCB0bwo+Pj4gYW5ub3RhdGUgc3VjaCBjYXNlcyBj b3JyZWN0bHkuCj4+Pgo+Pj4gQW5kIHRoZSByZWN1cnNpb24gb25seSB3b3JrcyBpZiBpdCdzIHJl YWQgbG9ja3MsIG90aGVyd2lzZSBsb2NrZGVwCj4+PiBjb21wbGFpbnMgaWYgeW91IGhhdmUgaW5j b25zaXN0ZW50IGFubm90YXRpb25zIG9uIHRoZSBzaWduYWxsaW5nIHNpZGUKPj4+ICh3aGljaCBh Z2FpbiB3b3VsZCBtYWtlIGl0IG1vcmUgb3IgbGVzcyBpbXBvc3NpYmxlIHRvIGFubm90YXRlIHRo ZQo+Pj4gYWJvdmUgY2FzZSBmdWxseSkuCj4+Cj4+IEhvdyBkbyBJIHNlZSBpbiBsb2NrZGVwIHNw bGF0cyBpZiBpdCB3YXMgYSByZWFkIG9yIHdyaXRlIHVzZXI/IFlvdXIgcGF0Y2ggYXBwZWFycyB0 byBoYXZlOgo+Pgo+PiBkbWFfZmVuY2Vfc2lnbmFsOgo+PiArICAgICAgIGxvY2tfYWNxdWlyZSgm ZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfUkVUX0lQXyk7Cj4+Cj4+ IF9fZG1hX2ZlbmNlX21pZ2h0X3dhaXQ6Cj4+ICsgICAgICAgbG9ja19hY3F1aXJlKCZkbWFfZmVu Y2VfbG9ja2RlcF9tYXAsIDAsIDAsIDEsIDEsIE5VTEwsIF9USElTX0lQXyk7Cj4+Cj4+IFdoaWNo IGJvdGggc2VlbSBsaWtlIHJlYWQgbG9jay4gSSBkb24ndCBmdWxseSB1bmRlcnN0YW5kIHRoZSBs b2NrZGVwIEFQSSBzbyBJIG1pZ2h0IGJlIHdyb25nLCBub3Qgc3VyZS4gQnV0IG5laXRoZXIgSSBz ZWUgYSBkaWZmZXJlbmNlIGluIHNwbGF0cyB0ZWxsaW5nIG1lIHdoaWNoIHBhdGggaXMgd2hpY2gu Cj4gCj4gSSB0aGluayB5b3UgZ290IHRyaWNrZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLCB0aGlz IGlzbid0IHF1aXRlIHdoYXQncwo+IGdvaW5nIG9uLiBUaGVyZSdzIHR3byB0aGluZ3Mgd2hpY2gg bWFrZSB0aGUgYW5ub3RhdGlvbnMgc3BlY2lhbDoKPiAKPiAtIHdlIHdhbnQgYSByZWN1cnNpdmUg cmVhZCBsb2NrIG9uIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24uCj4gVGhlIHByb2Js ZW0gaXMgdGhhdCBsb2NrZGVwIGRvZXNuJ3QgaW1wbGVtZW50IGZ1bGwgdmFsaWRhdGlvbiBmb3IK PiByZWN1cnNpdmUgcmVhZCBsb2Nrcywgb25seSBub24tcmVjdXJzaXZlIHJlYWQvd3JpdGUgbG9j a3MgZnVsbHkKPiB2YWxpZGF0ZWQuIFRoZXJlJ3Mgc29tZSBjaGVja3MgZm9yIHJlY3Vyc2l2ZSBy ZWFkIGxvY2tzLCBidXQgZXhhY3RseQo+IHRoZSBjaGVja3Mgd2UgbmVlZCB0byBjYXRjaCBjb21t b24gZG1hX2ZlbmNlX3dhaXQgZGVhZGxvY2tzIGFyZW4ndAo+IGRvbmUuIFRoYXQncyB3aHkgd2Ug bmVlZCB0byBpbXBsZW1lbnQgbWFudWFsIGxvY2sgcmVjdXJzaW9uIG9uIHRoZQo+IHJlYWRlciBz aWRlCj4gCj4gLSBub3cgb24gdGhlIHdyaXRlIHNpZGUgd2UgYWRkaXRpb25hbGx5IG5lZWQgdG8g aW1wbGVtZW50IGFuCj4gcmVhZDJ3cml0ZSB1cGdyYWRlLCBhbmQgYSB3cml0ZTJyZWFkIGRvd25n cmFkZS4gTG9ja2RlcCBkb2Vzbid0Cj4gaW1wbGVtZW50IHRoYXQsIHNvIGFnYWluIHdlIGhhdmUg dG8gaGFuZC1yb2xsIHRoaXMuCj4gCj4gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY29kZSBsaW5lLWJ5 LWxpbmU6Cj4gCj4gICAgICBib29sIHRtcDsKPiAKPiAgICAgIHRtcCA9IGxvY2tfaXNfaGVsZF90 eXBlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXAsIDEpOwo+IAo+IFdlIGNoZWNrIHdoZXRoZXIgc29t ZW9uZSBpcyBob2xkaW5nIHRoZSBub24tcmVjdXJzaXZlIHJlYWQgbG9jayBhbHJlYWR5Lgo+IAo+ ICAgICAgaWYgKHRtcCkKPiAgICAgICAgICBsb2NrX3JlbGVhc2UoJmRtYV9mZW5jZV9sb2NrZGVw X21hcCwgX1RISVNfSVBfKTsKPiAKPiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlIGRyb3AgdGhhdCBy ZWFkIGxvY2suCj4gCj4gICAgICBsb2NrX21hcF9hY3F1aXJlKCZkbWFfZmVuY2VfbG9ja2RlcF9t YXApOwo+IAo+IFRoZW4gd2UgZG8gdGhlIGFjdHVhbCBtaWdodF93YWl0IGFubm90YXRpb24sIHRo ZSBhYm92ZSB0YWtlcyB0aGUgZnVsbAo+IHdyaXRlIGxvY2sgLi4uCj4gCj4gICAgICBsb2NrX21h cF9yZWxlYXNlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXApOwo+IAo+IC4uLiBhbmQgbm93IHdlIHJl bGVhc2UgdGhlIHdyaXRlIGxvY2sgYWdhaW4uCj4gCj4gCj4gICAgICBpZiAodG1wKQo+ICAgICAg ICAgIGxvY2tfYWNxdWlyZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxM LCBfVEhJU19JUF8pOwo+IAo+IEZpbmFsbHkgd2UgbmVlZCB0byByZS1hY3F1aXJlIHRoZSByZWFk IGxvY2ssIGlmIHdlJ3ZlIGhlbGQgdGhhdCB3aGVuCj4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4g VGhpcyBhbm5vdGF0aW9uIG5hdHVyYWxseSBoYXMgdG8gZXhhY3RseSBtYXRjaAo+IHdoYXQgYmVn aW5fc2lnbmFsbGluZyB3b3VsZCBkbywgb3RoZXJ3aXNlIHRoZSBoYW5kLXJvbGxlZCBuZXN0aW5n Cj4gd291bGQgZmFsbCBhcGFydC4KPiAKPiBJIGhvcGUgdGhhdCBleHBsYWlucyB3aGF0J3MgZ29p bmcgb24gaGVyZSwgYW5kIGFzc3VyZXMgeW91IHRoYXQKPiBtaWdodF93YWl0KCkgaXMgaW5kZWVk IGEgd3JpdGUgbG9jayBhbm5vdGF0aW9uLCBidXQgd2l0aCBhIGJpZyBwaWxlIG9mCj4gY29tcGxp Y2F0aW9ucy4KCkkgYW0gY2VydGFpbmx5IGNvbmZ1c2VkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gbG9ja19tYXBfYWNxdWlyZS9yZWxlYXNlIGFuZCBsb2NrX2FjcXVpcmUvcmVsZWFzZS4gV2hh dCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28/CgpSZWdhcmRzLAoKVHZydGtvCgoK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdm eCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==