From: Luke Kenneth Casson Leighton Date: Tue, 24 Mar 2020 16:05:16 +0000 (+0000) Subject: [libre-riscv-dev] Fwd: multi-way LOAD/STORE buffers and misalignment X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=37ea30b1cfc0eb3389e6b5aaf32ad75f86ac2d59;p=libre-riscv-dev.git [libre-riscv-dev] Fwd: multi-way LOAD/STORE buffers and misalignment --- diff --git a/aa/4e696ee3391c2bf3c379e79ed973da67eb310e b/aa/4e696ee3391c2bf3c379e79ed973da67eb310e new file mode 100644 index 0000000..1730318 --- /dev/null +++ b/aa/4e696ee3391c2bf3c379e79ed973da67eb310e @@ -0,0 +1,182 @@ +Return-path: +Envelope-to: publicinbox@libre-riscv.org +Delivery-date: Tue, 24 Mar 2020 16:05:50 +0000 +Received: from localhost ([::1] helo=libre-riscv.org) + by libre-riscv.org with esmtp (Exim 4.89) + (envelope-from ) + id 1jGm3q-0004U7-CT; Tue, 24 Mar 2020 16:05:50 +0000 +Received: from lkcl.net ([217.147.94.29]) + by libre-riscv.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) + (Exim 4.89) (envelope-from ) id 1jGm3o-0004U1-P2 + for libre-riscv-dev@lists.libre-riscv.org; Tue, 24 Mar 2020 16:05:48 +0000 +DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lkcl.net; + s=201607131; + h=Content-Type:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version; + bh=/vYjM3WcKB2HS/8yHM9GETPVFDNFRNIGM+qcBIrFEds=; + b=Ji3SODVzzk0qn/aFdUdMNRSUI3oU0k6rmlNHDMm6qNNjZc/Vd/rKZj7o2hxCdi/5DzzLnahP7BjOH7a5OpDzYESoGwUNVlnLbD/xSlJZIxjXVtLX1TFWgKkYA67VxCf8bSftPnPrd3rbJ0n7+rvGwPPZrt18ilO1zILdjGWR0Iw=; +Received: from mail-lf1-f54.google.com ([209.85.167.54]) + by lkcl.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) + (Exim 4.84_2) (envelope-from ) id 1jGm3o-0006TX-DL + for libre-riscv-dev@lists.libre-riscv.org; Tue, 24 Mar 2020 16:05:48 +0000 +Received: by mail-lf1-f54.google.com with SMTP id j17so13694249lfe.7 + for ; + Tue, 24 Mar 2020 09:05:32 -0700 (PDT) +X-Gm-Message-State: ANhLgQ3Ov2xf7rr1dKB9/7fnXxTn4WZyFCg6zPTLC/25+DDUg5lKu3lg + ZtNEECD6E8ot93rftSpZznxfN9uTkfIVD90ApK4= +X-Google-Smtp-Source: ADFU+vsS5Ckwa/lzQKHAaLArjLrcyDQz7dRHOenZfsmceuq1KEr2aaCcSqQq+AlabsiYGb5A5ASGVHs3NzM8ZoTcpas= +X-Received: by 2002:a19:a93:: with SMTP id 141mr8176743lfk.107.1585065927308; + Tue, 24 Mar 2020 09:05:27 -0700 (PDT) +MIME-Version: 1.0 +References: <69ea9c9d-431c-4b76-ad86-a8eec897ab44@googlegroups.com> + <7dcb89ad-c6b2-43dc-8ea9-e72342a2719b@googlegroups.com> +In-Reply-To: <7dcb89ad-c6b2-43dc-8ea9-e72342a2719b@googlegroups.com> +From: Luke Kenneth Casson Leighton +Date: Tue, 24 Mar 2020 16:05:16 +0000 +X-Gmail-Original-Message-ID: +Message-ID: +To: Libre-RISCV General Development , + Staf Verhaegen +Subject: [libre-riscv-dev] Fwd: multi-way LOAD/STORE buffers and misalignment +X-BeenThere: libre-riscv-dev@lists.libre-riscv.org +X-Mailman-Version: 2.1.23 +Precedence: list +List-Id: Libre-RISCV General Development + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Reply-To: Libre-RISCV General Development + +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: base64 +Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org +Sender: "libre-riscv-dev" + +c3RhZiwgaGksIHRoaXMgY2FtZSBpbiBmcm9tIG1pdGNoIGFsc3VwLCBmcm9tIGNvbXAuYXJjaC4K +CnRoZSBMMSBjYWNoZSBtZW1vcnkgU1JBTSB0aGF0IHlvdSBhcmUgZG9pbmc6IGlzIGl0LCBhcyBN +aXRjaCBzdWdnZXN0cywKMVIgKm9yKiAxVywgYW5kIHRodXMgc2luZ2xlLWNsb2NrLWN5Y2xlPyAg +aSBnYXRoZXIgZnJvbSB3aGF0IGhlJ3MKc2F5aW5nIHRoYXQgaWYgeW91IGhhdmUgYSAxUjFXIFNS +QU0sIHRoYXQgZWZmZWN0aXZlbHkgbmVlZHMgMiBjbG9jawpjeWNsZXMgdG8gYWNjZXNzLgoKbC4K +Ci0tLQpjcm93ZC1mdW5kZWQgZWNvLWNvbnNjaW91cyBoYXJkd2FyZTogaHR0cHM6Ly93d3cuY3Jv +d2RzdXBwbHkuY29tL2VvbWE2OAoKCi0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0t +LS0tCkZyb206ICdNaXRjaEFsc3VwJyB2aWEgY29tcC5hcmNoIDxjb21wLmFyY2hAZ29vZ2xlZ3Jv +dXBzLmNvbT4KRGF0ZTogVHVlLCBNYXIgMjQsIDIwMjAgYXQgMzoyNyBQTQpTdWJqZWN0OiBSZTog +bXVsdGktd2F5IExPQUQvU1RPUkUgYnVmZmVycyBhbmQgbWlzYWxpZ25tZW50ClRvOgoKCk9uIFR1 +ZXNkYXksIE1hcmNoIDI0LCAyMDIwIGF0IDY6NTM6MjkgQU0gVVRDLTUsIGxrY2wgd3JvdGU6Cj4g +d2UncmUgZG9pbmcgYSBMRC9TVCBidWZmZXIgYXQgdGhlIG1vbWVudCwgYW5kIHNvbWUgZGVzaWdu +IHJldmlldyBhbmQKPiBjb25zdHJ1Y3RpdmUgZmVlZGJhY2sgYW5kIGFkdmljZSB3b3VsZCBiZSBn +cmVhdGx5IGFwcHJlY2lhdGVkLgo+IHVubGlrZSBtYW55ICJmaXJzdCB0aW1lIHByb2Nlc3NvcnMi +LCB3ZSBjYW5ub3QgcG9zc2libHkgZ2V0IGF3YXkKPiB3aXRoIGEgc2ltcGxlIHNpbmdsZS1pc3N1 +ZSBMRC9TVCBkZXNpZ24gYXMgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlCj4gb2YgdGhlIHZl +Y3RvciBlbmdpbmUgYmVpbmcgZWZmZWN0aXZlbHkgYSBtdWx0aS1pc3N1ZSBtdWx0aXBsaWVyIHRo +YXQsCj4gZnJvbSBhIHNpbmdsZSBpbnN0cnVjdGlvbiwgaGFtbWVycyB0aGUgaW50ZXJuYWwgZW5n +aW5lIHdpdGggYSAqYmF0Y2gqCj4gb2YgYWN0dWFsIG9wZXJhdGlvbnMuCj4KPiB0aGlzIGluY2x1 +ZGVzIExEL1NUIGFuZCBzbyBjb25zZXF1ZW50bHkgd2UgbmVlZCBhIG11bHRpLWlzc3VlLWNhcGFi +bGUKPiBMRC9TVCBidWZmZXIgcmlnaHQgZnJvbSB0aGUgc3RhcnQuICBpdCBpcyBiZWluZyBkb2N1 +bWVudGVkLCBoZXJlOgo+Cj4gaHR0cHM6Ly9saWJyZS1yaXNjdi5vcmcvM2RfZ3B1L2FyY2hpdGVj +dHVyZS82NjAwc2NvcmVib2FyZC8KPgo+IHdpdGggTWl0Y2gncyBoZWxwIGkgYWxyZWFkeSBoYXZl +IGEgUkFXIC8gV0FSIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1hdHJpeAo+IGluIHBsYWNlLCB3aGlj +aCBkZXRlY3RzIChpbi1vcmRlcikgKmJhdGNoZXMqIG9mIExEcywgKmJhdGNoZXMqIG9mIFNUcywK +PiBhbmQgKmJhdGNoZXMqIG9mIGF0b21pYyBvcGVyYXRpb25zIChkZWZpbmVkIGJ5IGhhdmluZyBM +RC9TVCBib3RoIHNldCkuCj4KPiBhZGRpdGlvbmFsbHksIHdlIGhhdmUgKGFnYWluLCB0aGFua3Mg +dG8gTWl0Y2gpLCBhbiAiYWRkcmVzcyBjbGFzaCBkZXRlY3Rpb24iCj4gTWF0cml4LCB3aGVyZSB0 +aGUgb3JpZ2luYWwgZGVzaWduIGNvbmNlcHQgZnJvbSBNaXRjaCB1c2VzIGJpdHMgNCB0aHJ1IDEx +Cj4gKHN0b3BwaW5nIGF0IGEgVk0gcGFnZSkgdG8gc2F5ICJ0aGlzIExEL1NUIGRlZmluaXRlbHkg +ZG9lc24ndCBvdmVybGFwIHdpdGgKPiBhbnkgb3RoZXJzLCBidXQgaXQgbWlnaHQgaGF2ZSBwaWNr +ZWQgdXAgYSBmZXcgdGhhdCAqcG90ZW50aWFsbHkqIGRvbid0Cj4gb3ZlcmxhcCwgYnV0IGhleSBi +ZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5Ii4KPgo+IHRoaXMgaXMgcXVpdGUgZWZmaWNpZW50IGJlY2F1 +c2UgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gZGV0ZWN0IGEgY2xhc2gKPiBpcyBkcmFzdGlj +YWxseSByZWR1Y2VkLCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gdGhhdCBpdCdzIGFuIE54Ti8y +IHNldCBvZgo+IGJpbmFyeS1hZGRyZXNzIGNvbXBhcmF0b3JzIGludm9sdmVkLgo+Cj4gaG93ZXZl +ciB3ZSAqbW9kaWZpZWQqIHRoaXMgaWRlYSwgYnkgdHVybmluZyB0aGUgYWRkcitsZW4gKGxlbj0x +LzIvNC84IGJ5dGUpCj4gaW50byBhICpieXRlLW1hc2sqLCB3aGVyZSB0aGUgYnl0ZS1tYXNrIGlz +IGVmZmVjdGl2ZWx5IG5vdGhpbmcgbW9yZSB0aGFuCj4gKG9yLCAiY2FuIGJlIHVzZWQgYXMiKSBi +eXRlLWVuYWJsZSBsaW5lcyBvbiB0aGUgTDEgY2FjaGUgbWVtb3J5IHJlYWQvd3JpdGUuCj4KPiB0 +aGlzIG1lYW5zIHR1cm5pbmcgbGVuPTEgaW50byAwYjEsIGxlbj0yIGludG8gMGIxMSwgbGVuPTQg +aW50byAwYjExMTEKPiBvciBsZW49OCBpbnRvIDBiMTExMSAxMTExIGFuZCB0aGVuIHNoaWZ0aW5n +IGl0IGJ5IHRoZSBMU0JzIG9mIHRoZSBhZGRyZXNzCj4gKGJpdHMgMC0zKS4KPgo+IGhvd2V2ZXIg +b2YgY291cnNlLCB0aGF0IGNvdWxkICJ3cmFwIG92ZXIiIHRvIGEgc2Vjb25kIGNhY2hlIGxpbmUs +IHRoZXJlZm9yZQo+IHdlIHNwbGl0IGl0IGludG8gdHdvOgo+Cj4gKiAxc3QgY2FjaGUgbGluZSwg +dGFrZSBiaXRzIDAuLjE1IG9mIHRoZSBtYXNrLCB1c2UgYWRkcls0Ol0gYXMgdGhlIGFkZHJlc3MK +PiAqIDFuZCBjYWNoZSBsaW5lLCB0YWtlIGJpdHMgMTUuLjI3IG9mIHRoZSBtYXNrLCB1c2UgYWRk +cls0Ol0gUExVUyBPTkUgYXMgYWRkcmVzcwo+Cj4gbm93IGFsbCBMRHMgYXJlIHBvdGVudGlhbGx5 +ICp0d28qIExEcywgYW5kIGFsbCBTVHMgYXJlIHBvdGVudGlhbGx5ICp0d28qIFNUcywKPiByZXF1 +aXJpbmcgc3luY2hyb25pc2F0aW9uLgo+Cj4gdGhpcyBkb2VzIGludGVyZXN0aW5nbHkgbWVhbiB0 +aGF0IHRoZSAiYWRkcmVzcyBjbGFzaCBkZXRlY3Rpb24iIE1hdHJpeCBpcwo+IG5vdyBkb3VibGVk +IGluIHNpemUsIGJlY2F1c2UgZWFjaCBMRC9TVCBDb21wdXRhdGlvbiBVbml0IGNhbiBub3cgaXNz +dWUgKnR3byoKPiBMRHMvU1RzLCBub3Qgb25lLgo+Cj4gdGhlcmUgaXMgYSBiaWcgYWR2YW50YWdl +IHRvIHBhcnRpYWwtY29udmVyc2lvbiBvZiB0aGUgTEQvU1RzIHRvIHVuYXJ5LW1hc2tlZAo+IGZv +cm1hdDoKPgo+IDEpIHRob3NlICJtYXNrcyIgd2UgY2FuIG5vdyBkZXRlY3QgaW4gdGhlIGFkZHJl +c3MtY2xhc2ggdW5pdCwgd2hldGhlciB0aGVyZQo+ICAgIGFyZSBvdmVybGFwcywgYnkgc2ltcGxl +ICJ1bmFyeSIgKEFORGluZykuCj4KPiAyKSBvbmNlIGEgYmF0Y2ggb2YgZ3VhcmFudGVlZC1ub24t +b3ZlcmxhcHBpbmcgTERzIChvciBTVHMsIGJ1dCBub3QgYm90aCBhdAo+ICAgIG9uY2UpIGhhdmUg +YmVlbiBpZGVudGlmaWVkLCB0aGUgT1Jpbmcgb2YgdGhvc2UgbWFza3MgKnByZS1pZGVudGlmaWVz +KiwKPiAgICB3aGVyZSB0aGUgcmVtYWluaW5nIE1TQnMgYXJlIGlkZW50aWNhbCwgd2hpY2ggTERz +IGFuZCB3aGljaCBTVHMgYXJlCj4gICAgKnBhcnQgb2YgdGhlIHNhbWUgY2FjaGUgbGluZSouCj4K +PiAzKSB0aGUgT1JlZCBtYXNrcyBjYW4gYmUgZHJvcHBlZCAtIGFzLWlzIC0gZGlyZWN0bHkgb250 +byBieXRlLWxldmVsCj4gICAgcmVhZC93cml0ZS1lbmFibGUgbGluZXMgb24gdGhlIEwxIENhY2hl +IHVuZGVybHlpbmcgbWVtb3J5IC0gd2l0aCB6ZXJvCj4gICAgc2hpZnRpbmcgb3Igb3RoZXIgbWVz +c2luZyBhYm91dC4KPgo+IHNvIHRoYXQncyB0aGUgYml0cyB0aGF0IHdlICJrbm93Ii4KPgo+IHRo +ZSBiaXRzIHRoYXQgd2UgKmRvbid0KiBrbm93IGFyZSB3aGF0IGlzIHRoZSBiZXN0IEwxIGNhY2hl +IGFycmFuZ2VtZW50Cj4gdG8gdXNlLiAgd2UgZGlzY3Vzc2VkIHRoZSBwb3NzaWJpbGl0eSBvZiBh +biA4LXdheSBzZXQtYXNzb2NpYXRpdmUgY2FjaGUKPiB3aXRoIDUxMi1iaXQgd2lkZSBkYXRhICgh +ISEpIC0geWVzLCByZWFsbHksIGJlY2F1c2Ugd2Ugd2lsbCBoYXZlIGEgbWluaW11bQo+IG9mIDQg +TEQvU1Qgb3BlcmF0aW9ucyBAIDY0LWJpdCBvY2N1cnJpbmcgZXZlcnkgY3ljbGUgKGluIHRoZSBm +aXJzdCB2ZXJzaW9uCj4gb2YgdGhlIHByb2Nlc3NvcjogdGhpcyAqd2lsbCogZ28gdXAgaW4gbGF0 +ZXIgaXRlcmF0aW9ucykuCj4KPiBvbmUgdGhpbmcgdGhhdCB3b3VsZCBiZSBwYXJ0aWN1bGFybHkg +bmljZSB0byBhdm9pZCB3b3VsZCBiZSBtdWx0aS1wb3J0ZWQKPiBTUkFNIG9uIHRoZSBMMSBDYWNo +ZSBNZW1vcmllcy4gIGkgdGhvdWdodCB0aGVyZSBpdCBtYXkgYmUgcG9zc2libGUgdG8KPiAic3Ry +aXBlIiB0aGUgTDEgQ2FjaGUsIHN1Y2ggdGhhdCBiaXRzIDQtNSBvZiBldmVyeSBhZGRyZXNzIGdv +IHRocm91Z2ggdG8sCj4gZWZmZWN0aXZlbHksIGEgY29tcGxldGVseSBzZXBhcmF0ZSAoaXNvbGF0 +ZWQsIGluZGVwZW5kZW50KSBMMSBDYWNoZS4KPgo+ICogQWRkciBiaXRzIFswOjNdIGFscmVhZHkg +dHVybmVkIGludG8gYnl0ZS1tYXAgbWFzayAoZW5hYmxlIGxpbmVzKQo+ICogQWRkciBiaXRzIFs0 +OjVdIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiBmb3VyIElOREVQRU5ERU5UIGNhY2hlcwo+ICogQWRk +ciBiaXRzIFs2OmVuZF0gdXNlZCAiYXMgbm9ybWFsIgo+Cj4gdGhlIG9ubHkgZG93bnNpZGUgb2Yg +dGhpcyBiZWluZzogTEQvU1RzIHRoYXQgaGFwcGVuIHRvIGJlIG9uIHRoZSBzYW1lCj4gNjQtYnl0 +ZSBib3VuZGFyeSB3b3VsZCBiZSAicGVuYWxpc2VkIiBieSBiZWluZyBvbmx5IHNpbmdsZS1pc3N1 +ZS1jYXBhYmxlLgo+Cj4gZG8gd2UgY2FyZT8gIGknbSBub3Qgc3VyZSB0aGF0IHdlIGRvIQoKWWVz +LCB5b3UgZG8gd2FudCB0byBjYXJlOjogeW91IHdhbnQgdG8gY2FyZSB0byAiZ2V0IGl0IGNvcnJl +Y3QiIGV2ZW4KYXQgc29tZSBtaW5vciBjb3N0IGluIHBlcmYuCj4KPiBfc2hvdWxkXyB3ZSBjYXJl +PyAgdGhhdCdzIHRoZSBxdWVzdGlvbiBpJ2QgbGlrZSB0byBrbm93IHRoZSBhbnN3ZXIgdG8gOikK +PiBhbiBhbHRlcm5hdGl2ZSBpcyB0aGF0IHdlIGhhdmUgdG8gbXVsdGktcG9ydCB0aGUgTDEgQ2Fj +aGUgbWVtb3J5LCB3aGljaAo+IHdvdWxkIGJlIHF1aXRlIGV4cGVuc2l2ZS4KPgo+IHdoYXQgYWx0 +ZXJuYXRpdmVzIGFyZSB0aGVyZT8gIGlzIHRoZXJlIGEgd2F5IHRvLCBmb3IgZXhhbXBsZSwgaGF2 +ZSBhbgo+IDgtd2F5IHNldC1hc3NvY2lhdGl2ZSBjYWNoZSB3aXRoIDggaW5kZXBlbmRlbnQgaW5w +dXQvb3V0cHV0IGRhdGEgcGF0aHMsCj4geWV0IHRoZXkgZG8gbm90IHJlcXVpcmUgdGhlIHRyaWNr +IG9mIGEgZnVsbCBzcGxpdCB1c2luZyBhZGRyIGJpdHMgWzQ6NV0sCj4gYnV0IGF0IHRoZSBzYW1l +IHRpbWUgZG8gbm90IHJlcXVpcmUgNFI0VyBTUkFNcz8KCldoYXQgeW91IHdhbnQgdG8ga25vdyBh +cmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFNSQU0gbWFjcm9zLiBHaXZlbiB0aGVzZQpkaW1lbnNp +b25zIHlvdSBhcmUgaW4gYSBwb3NpdGlvbiB0byBzdGFydCBtYWtpbmcgZ29vZCBjaG9pY2VzLCB3 +aXRob3V0CnlvdSBhcmUgbm90LiBBIHR5cGljYWwgU1JBTSBkaW1lbnNpb24gbWlnaHQgYmUgMjU2 +LWJpdHMgd2lkZSBhbmQgNjQtd29yZHMKZGVhcCAoMktCeXRlcykuCgpTaW5jZSB5b3Ugd2FudCB0 +byByZWFkL3dyaXRlIDUxMi1iaXRzIHBlciBwb3J0LCB5b3Ugd2lsbCBuZWVkIDIgU1JBTQptYWNy +b3MgcGVyIHBvcnQgKHBlciBjeWNsZSkuIFNvIGlmIHlvdSBhcmUgbWFraW5nIDgtd2F5IFNBIGNh +Y2hlLCB5b3UKd2lsbCBuZWVkIGF0IGxlYXN0IDE2IFNSQU0gbWFjcm9zICgzMktCeXRlcyktLWFu +ZCAoQSBOIEQpIHlvdSBzdGlsbApoYXZlIGJ1dCBhIHNpbmdsZSBwb3J0IQoKT24gdGhlIG90aGVy +IGhhbmQsIGRyb3BwaW5nIGJhY2sgdG8gNC13YXkgc2V0LCBhbmQgdGhhdCBzYW1lIFNSQU0gYXJy +YXkKY2FuIG5vdyBzdXBwb3J0IDItcG9ydHMgb2YgNC13YXkgU0EgZWFjaC4gSW4gdGhpcyBvcmdh +bml6YXRpb24geW91IHdpbGwKYmUgdXNpbmcgbW9yZSBsb3dlci1hZGRyZXNzIGJpdHMgdG8gY2hv +b3NlIHBvcnRbMF0gdmVyc3VzIHBvcnRbMV0uIEFuZAp5b3Ugd2lsbCBzZWUgNDAlIGNvbmZsaWN0 +cyBpZiB5b3UgYXJlIHJlYWxseSBydW5uaW5nIDIgcmVxdWVzdCBwZXIgY3ljbGUuCgpIb3dldmVy +LCBpZiB5b3Uga25vdyB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgImRlbnNlIiwgdGhlbiB5b3Uga25v +dyB0aGF0CkxEW2ldW2suLmsrM10gYXJlIGFsbCBpbiB0aGUgc2FtZSBsaW5lLCBhbmQgeW91IGNh +biBUSEVOIG1ha2Ugb25lIGFjY2Vzcwpmb3IgZXZlcnkgNCBhY3R1YWwgTERzIGFuIHRoZW4gc29y +dCBpdCBvdXQgd2l0aCBtdWx0aXBsZXhlcnMuIEFuZCBOT1cgd2UKaGF2ZSBlbm91Z2ggcG9ydHMg +YW5kIHdpZHRoIHRvIHVzZSAxMDI0IGJpdHMgcGVyIGN5Y2xlIHRocm91Z2hwdXQgaW4gdGhlCmNh +Y2hlLiB7WW91IGNhbiBkZXRlcm1pbmUgYW4gYWNjZXNzIHBhdHRlcm4gd2lsbCBiZSBkZW5zZSB3 +aGVuIHRoZSBsb29wCmluY3JlbWVudCBpcyArMSAob3IgLTEpIGFuZCB0aGUgbG9vcCBpbmRleCBp +cyB1c2VkIGluIHNjYWxlZCBmb3JtIGluCm1lbXJlZiBpbnN0cnVjdGlvbnM6CgogICAgIExEICAg +UngsW1JiK1JpPDxzY2FsZStESVNQXQoKfSBPdGhlciBmb3JtcyBvZiBkZW5zZSBhY2Nlc3MgYXJl +IGhhcmRlciBmb3IgSFcgdG8gZGV0ZWN0IGFuZCB1dGlsaXplLgo+Cj4gaSAqdGhpbmsqIHRoaXMg +aXMgZG9hYmxlLCB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgd2FpdCBjeWNsZXMgaWYKPiBv +bmUgb2YgdGhlIDggd2F5cyBoYXBwZW5zIHRvIGhhdmUgcmVxdWVzdCBjb250ZW50aW9uLiAgaG9u +ZXN0bHkgaSBkb24ndCBrbm93Cj4gd2hhdCdzIGJlc3QgaGVyZS4KPgo+IGFkdmljZSBhbmQgZGlz +Y3Vzc2lvbiBhcHByZWNpYXRlZCBhcyBhbHdheXMsCj4KPiBsLgoKX19fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlicmUtcmlzY3YtZGV2IG1haWxpbmcgbGlz +dApsaWJyZS1yaXNjdi1kZXZAbGlzdHMubGlicmUtcmlzY3Yub3JnCmh0dHA6Ly9saXN0cy5saWJy +ZS1yaXNjdi5vcmcvbWFpbG1hbi9saXN0aW5mby9saWJyZS1yaXNjdi1kZXYK +