From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Mon, 29 Oct 2018 09:41:36 +0100 Message-ID: <20181029094136.1b11b427@bbrezillon> References: <20181023095508.21a9cabd@bbrezillon> <20181023134443.GQ324@phenom.ffwll.local> <20181025100931.50fddf7e@bbrezillon> <20181025093314.GB21967@phenom.ffwll.local> <20181025114114.42caf97d@bbrezillon> <20181026133026.GM21967@phenom.ffwll.local> <20181026155748.70b9a6bd@bbrezillon> <20181026165233.7ebaf6c7@bbrezillon> <20181026151003.GY9144@intel.com> <20181029080640.GQ21967@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 8F92089BFF for ; Mon, 29 Oct 2018 08:41:39 +0000 (UTC) In-Reply-To: <20181029080640.GQ21967@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: "Hollingworth, Gordon" , dri-devel , Eben Upton List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCAyOSBPY3QgMjAxOCAwOTowNjo0MCArMDEwMApEYW5pZWwgVmV0dGVyIDxkYW5pZWxA ZmZ3bGwuY2g+IHdyb3RlOgoKPiBPbiBGcmksIE9jdCAyNiwgMjAxOCBhdCAwNjoxMDowM1BNICsw MzAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBGcmksIE9jdCAyNiwgMjAxOCBhdCAw NDo1MjozM1BNICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6ICAKPiA+ID4gT24gRnJpLCAy NiBPY3QgMjAxOCAxNjoyNjowMyArMDIwMAo+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3 bGwuY2g+IHdyb3RlOgo+ID4gPiAgIAo+ID4gPiA+IE9uIEZyaSwgT2N0IDI2LCAyMDE4IGF0IDM6 NTcgUE0gQm9yaXMgQnJlemlsbG9uCj4gPiA+ID4gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNv bT4gd3JvdGU6ICAKPiA+ID4gPiA+Cj4gPiA+ID4gPiBPbiBGcmksIDI2IE9jdCAyMDE4IDE1OjMw OjI2ICswMjAwCj4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3Rl Ogo+ID4gPiA+ID4gICAgCj4gPiA+ID4gPiA+IE9uIFRodSwgT2N0IDI1LCAyMDE4IGF0IDExOjQx OjE0QU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZTogICAgCj4gPiA+ID4gPiA+ID4gT24g VGh1LCAyNSBPY3QgMjAxOCAxMTozMzoxNCArMDIwMAo+ID4gPiA+ID4gPiA+IERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gICAgCj4gPiA+ID4gPiA+ ID4gPiBPbiBUaHUsIE9jdCAyNSwgMjAxOCBhdCAxMDowOTozMUFNICswMjAwLCBCb3JpcyBCcmV6 aWxsb24gd3JvdGU6ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDIzIE9jdCAyMDE4IDE1 OjQ0OjQzICswMjAwCj4gPiA+ID4gPiA+ID4gPiA+IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZnds bC5jaD4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+IE9u IFR1ZSwgT2N0IDIzLCAyMDE4IGF0IDA5OjU1OjA4QU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3 cm90ZTogICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBIaSBEYW5pZWwsCj4gPiA+ID4gPiA+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gT24gVHVlLCAxNiBPY3QgMjAxOCAxNDo1Nzo0 MyArMDIwMAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xs LmNoPiB3cm90ZToKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiBPbiBUdWUsIE9jdCAxNiwgMjAxOCBhdCAxMTo0MDo0NUFNICswMjAwLCBCb3JpcyBCcmV6 aWxsb24gd3JvdGU6ICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRoZSBIVlMgYmxvY2sg aXMgc3VwcG9zZWQgdG8gZmlsbCB0aGUgcGl4ZWx2YWx2ZSBGSUZPcyBmYXN0IGVub3VnaCB0bwo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IG1lZXQgdGhlIHJlcXVlc3RlZCBmcmFtZXJhdGUuIFRo ZSBwcm9ibGVtIGlzLCB0aGUgSFZTIGFuZCBtZW1vcnkgYnVzCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gYmFuZHdpZHRocyBhcmUgbGltaXRlZCwgYW5kIGlmIHdlIGRvbid0IHRha2UgdGhlc2Ug bGltaXRhdGlvbnMgaW50bwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGFjY291bnQgd2UgbWln aHQgZW5kIHVwIHdpdGggSFZTIHVuZGVyZmxvdyBlcnJvcnMuCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlzIHBhdGNoIGlzIHRyeWluZyB0byBt b2RlbCB0aGUgcGVyLXBsYW5lIEhWUyBhbmQgbWVtb3J5IGJ1cyBiYW5kd2lkdGgKPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBjb25zdW1wdGlvbiBhbmQgdGFrZSBhIGRlY2lzaW9uIGF0IGF0b21p Y19jaGVjaygpIHRpbWUgd2hldGhlciB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBlc3Rp bWF0ZWQgbG9hZCB3aWxsIGZpdCBpbiB0aGUgSFZTIGFuZCBtZW1idXMgYnVkZ2V0Lgo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gTm90ZSB0aGF0IHdl IHRha2UgYW4gZXh0cmEgbWFyZ2luIG9uIHRoZSBtZW1vcnkgYnVzIGNvbnN1bXB0aW9uIHRvIGxl dAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRoZSBzeXN0ZW0gcnVuIHNtb290aGx5IHdoZW4g b3RoZXIgYmxvY2tzIGFyZSBkb2luZyBoZWF2eSB1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gbWVtb3J5IGJ1cy4gU2FtZSBnb2VzIGZvciB0aGUgSFZTIGxpbWl0LCBleGNlcHQg dGhlIG1hcmdpbiBpcyBzbWFsbGVyIGluCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdGhpcyBj YXNlLCBzaW5jZSB0aGUgSFZTIGlzIG5vdCB1c2VkIGJ5IGV4dGVybmFsIGNvbXBvbmVudHMuCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQt b2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlz IGxvZ2ljIGhhcyBiZWVuIHZhbGlkYXRlZCB1c2luZyBhIHNpbXBsZSBzaGVsbCBzY3JpcHQgYW5k Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc29tZSBpbnN0cnVtZW50YXRpb24gaW4gdGhlIFZD NCBkcml2ZXI6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiAtIGNhcHR1cmUgdW5kZXJmbG93IGVycm9ycyBhdCB0aGUgSFZTIGxldmVsIGFuZCBleHBv c2UgYSBkZWJ1Z2ZzIGZpbGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgIHJlcG9ydGluZyB0 aG9zZSBlcnJvcnMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtIGFkZCBkZWJ1Z2ZzIGZpbGVz IHRvIGV4cG9zZSB3aGVuIGF0b21pY19jaGVjayBmYWlscyBiZWNhdXNlIG9mIHRoZQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ICAgSFZTIG9yIG1lbWJ1cyBsb2FkIGxpbWl0YXRpb24gb3Igd2hl biBpdCBmYWlscyBmb3Igb3RoZXIgcmVhc29ucwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVGhlIGJyYW5jaCBjb250YWluaW5nIHRob3NlIG1vZGlm aWNhdGlvbiBpcyBhdmFpbGFibGUgaGVyZSBbMV0sIGFuZCB0aGUKPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiBzY3JpcHQgKHdoaWNoIGlzIGludGVybmFsbHkgdXNpbmcgbW9kZXRlc3QpIGlzIGhl cmUgWzJdIChwbGVhc2Ugbm90ZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRoYXQgSSdtIGJh ZCBhdCB3cml0aW5nIHNoZWxsIHNjcmlwdHMgOi0pKS4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IE5vdGUgdGhhdCB0aG9zZSBtb2RpZmljYXRpb24g dGVuZCB0byBvdmVyLWVzdGltYXRlIHRoZSBsb2FkLCBhbmQgdGh1cwo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiA+IHJlamVjdCBzZXR1cHMgdGhhdCBtaWdodCBoYXZlIHByZXZpb3VzbHkgd29ya2Vk LCBzbyB3ZSBtaWdodCB3YW50IHRvCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYWRqdXN0IHRo ZSBsaW1pdHMgdG8gYXZvaWQgdGhhdC4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+IFsxXWh0dHBzOi8vZ2l0aHViLmNvbS9iYnJlemlsbG9uL2xpbnV4 L3RyZWUvdmM0L2h2cy1iYW5kd2lkdGgtZXZhbAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFsy XWh0dHBzOi8vZ2l0aHViLmNvbS9iYnJlemlsbG9uL3ZjNC1odnMtYmFuZHdpZHRoLXRlc3QgICAg Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEFueSBpbnRl cmVzdCBpbiB1c2luZyBpZ3QgdG8gdGVzdCB0aGlzIHN0dWZmPyBXZSBoYXZlIGF0IGxlYXN0IGEg YnVuY2ggb2YKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdGVzdHMgYWxyZWFkeSBpbiB0aGVyZSB0 aGF0IHRyeSBhbGwga2luZHMgb2YgcGxhbmUgc2V0dXBzLiBBbmQgd2UgdXNlCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IHRob3NlIHRvIGh1bnQgZm9yIHVuZGVycnVucyBvbiBpOTE1IGh3Lgo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBXcnQgdW5kZXJydW4g cmVwb3J0aW5nOiBPbiBpOTE1IHdlIGp1c3QgZHVtcCB0aGVtIGludG8gZG1lc2cgYXQgdGhlIGVy cm9yCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGxldmVsLCB1c2luZyBEUk1fRVJST1IsICAgIAo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEFyZSB5b3UgbWFza2lu ZyB0aGUgdW5kZXJydW4gaW50ZXJydXB0IGFmdGVyIGl0J3MgYmVlbiByZXBvcnRlZD8gSWYgd2UK PiA+ID4gPiA+ID4gPiA+ID4gPiA+IGRvbid0IGRvIHRoYXQgb24gVkM0IHdlIGp1c3QgZW5kIHVw IGZsb29kaW5nIHRoZSBrZXJuZWwtbG9nIGJ1ZmZlciB1bnRpbAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gc29tZW9uZSBjb21lcyBhbmQgdXBkYXRlIHRoZSBjb25maWcuICAgIAo+ID4gPiA+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gWWVhaCB3ZSBkbyB0aGF0IHRvby4gUnVsZSBpcyB0 aGF0IGEgZnVsbCBtb2Rlc2V0IHdpbGwgY2xlYXIgYW55IHVuZGVycnVuCj4gPiA+ID4gPiA+ID4g PiA+ID4gbWFza2luZyAoc28gdGVzdHMgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBzdGFydCB3aXRo IGEgbW9kZXNldCwgb3IgaXQnbGwgYmUKPiA+ID4gPiA+ID4gPiA+ID4gPiBmb3Igbm90aGluZyku Cj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAKPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gcGx1cyBhIHRyYWNlcG9pbnQuIFNlZSBlLmcuCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IGludGVsX3BjaF9maWZvX3VuZGVycnVuX2lycV9oYW5kbGVyKCkuIElmIHRo ZXJlJ3MgaW50ZXJlc3Qgd2UgY291bGQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcGVyaGFwcyBl eHRyYWN0IHRoaXMgaW50byBzb21ldGhpbmcgY29tbW9uLCBzaW1pbGFyIHRvIHdoYXQgd2FzIGRv bmUgd2l0aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBjcmMgc3VwcG9ydCBhbHJlYWR5Lgo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiBJJ20gbm90IGEgYmlnIGZhbiBvZiBoYXJkY29kZWQgdHJhY2UgcG9pbnRzIGlu IGdlbmVyYWwgKGJlY2F1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiB3aG9sZSAiaXQn cyBwYXJ0IG9mIHRoZSBzdGFibGUgQUJJIiB0aGluZyksIGFuZCBpbiB0aGlzIGNhc2UsIG1ha2lu ZyB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRyYWNlcG9pbnQgZ2VuZXJpYyBzb3VuZHMgZXZl biBtb3JlIHJpc2t5IHRvIG1lLiBJbmRlZWQsIGhvdyBjYW4gd2Uga25vdwo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gYWJvdXQgYWxsIHRoZSBIVyBzcGVjaWZpYyBiaXRzIG9uZSBtaWdodCB3YW50IHRv IGV4cG9zZS4gRm9yIGluc3RhbmNlLAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gSSBzZWUgdGhlIGlu dGVsIHVuZGVycnVuIHRyYWNlcG9pbnQgZXhwb3NlcyBhIHN0cnVjdCB3aXRoIGEgZnJhbWUgYW5k Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBzY2FubGluZSBmaWVsZCwgYW5kIEFGQUlDVCwgd2UgZG9u J3QgaGF2ZSBzdWNoIGluZm9ybWF0aW9uIGluIHRoZSBWQzQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ IGNhc2UuCj4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQW55IG9w aW5pb24gb24gdGhhdD8gICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4g PiBJdCdzIG9ubHkgYWJpIGlmIHlvdSdyZSB1bmx1Y2t5LiBJZiBpdCdzIGp1c3QgZm9yIGRlYnVn Z2luZyBhbmQKPiA+ID4gPiA+ID4gPiA+ID4gPiB2YWxpZGF0aW9uLCB5b3UgY2FuIGNoYW5nZSBp dCBhZ2Fpbi4gVGJoLCBubyBpZGVhIHdoeSB3ZSBldmVuIGhhdmUgdGhlc2UKPiA+ID4gPiA+ID4g PiA+ID4gPiB0cmFjZXBvaW50cywgdGhleSdyZSBmYWlybHkgdXNlbGVzcyBpbW8uIENJIG9ubHkg cmVsaWVzIHVwb24gdGhlIGRtZXNnCj4gPiA+ID4gPiA+ID4gPiA+ID4gb3V0cHV0LiBNYXliZSBy dW4gZ2l0IGJsYW1lIGFuZCBhc2sgdGhlIG9yaWdpbmFsIGF1dGhvciwgd2UgY2FuIHByb2JhYmx5 Cj4gPiA+ID4gPiA+ID4gPiA+ID4gdXBkYXRlIHRoZW0gdG8gc3VpdCBvdXIgbmVlZHMuICAgIAo+ ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBPa2F5LCBJIHRoaW5rIEknbGwgZ28g Zm9yIGEgZ2VuZXJpYyBkZWJ1Z2ZzIGVudHJ5IHRoYXQgcmV0dXJucyB0cnVlCj4gPiA+ID4gPiA+ ID4gPiA+IHdoZW4gYW4gdW5kZXJydW4gZXJyb3IgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgbW9k ZXNldCwgZmFsc2Ugb3RoZXJ3aXNlLgo+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4g PiBOZXh0IHF1ZXN0aW9uIGlzOiBzaG91bGQgSSBhdHRhY2ggdGhlIHVuZGVycnVuIHN0YXR1cyB0 byB0aGUgZHJtX2RldmljZQo+ID4gPiA+ID4gPiA+ID4gPiBvciBoYXZlIG9uZSBwZXIgQ1JUQz8g SW4gbXkgY2FzZSwgSSBvbmx5IGNhcmUgYWJvdXQgdGhlICJoYXMgYW4KPiA+ID4gPiA+ID4gPiA+ ID4gdW5kZXJydW4gZXJyb3Igb2NjdXJyZWQgb24gYW55IG9mIHRoZSBhY3RpdmUgQ1JUQyIgY2Fz ZSwgc28gSSdkIHZvdGUgZm9yCj4gPiA+ID4gPiA+ID4gPiA+IGEgcGVyLWRldmljZSB1bmRlcnJ1 biBzdGF0dXMuICAgIAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFllYWggcHJvYmFi bHkgZ29vZCBlbm91Z2guIEZvciBvdXIgQ0kgYWxsIHdlIGNhcmUgYWJvdXQgaXMgdGhlIHdhcm4v ZXJyb3IKPiA+ID4gPiA+ID4gPiA+IGxldmVsIGRtZXNnIG91dHB1dC4gQW55dGhpbmcgYXQgdGhh dCBsZXZlbCBpcyBjb25zaWRlcmVkIGEgQ0kgZmFpbHVyZS4gICAgCj4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiBTbyBpZ3QgaXMgZ3JlcHBpbmcgZG1lc2cgdG8gZGV0ZWN0IHdoZW4gYW4gdW5k ZXJydW4gaGFwcGVucz8gICAgCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IE5vLCBidXQgdGhlIENJ IHJ1bm5lciBpcyBhbHNvIG9ic2VydmluZyBkbWVzZy4gQW55dGhpbmcgaW4gdGhlcmUgYXQKPiA+ ID4gPiA+ID4gd2FybmluZyBvciBoaWdoZXIgbGV2ZWwgaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUu ICAgIAo+ID4gPiA+ID4KPiA+ID4gPiA+IEVyaWMsIGRvIHlvdSBkbyB0aGUgc2FtZSB3aGVuIHlv dSBsYXVuY2ggdGhlIElHVCB0ZXN0c3VpdGU/Cj4gPiA+ID4gPiAgICAKPiA+ID4gPiA+ID4gICAg Cj4gPiA+ID4gPiA+ID4gPiBXaGF0IGRvIHlvdSBuZWVkIHRoZSBkZWJ1Z2ZzIGZpbGUgZm9yPyAg ICAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IEkganVzdCB0aG91Z2h0IGhhdmluZyBhIGRl YnVnZnMgZmlsZSB0byBleHBvc2UgdGhlIHVuZGVycnVuIGluZm9ybWF0aW9uCj4gPiA+ID4gPiA+ ID4gd291bGQgYmUgY2xlYW5lciB0aGFuIGhhdmluZyB0byBncmVwIGluIGRtZXNnIHRvIGRldGVj dCBzdWNoIGZhaWx1cmVzLiAgICAKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVGhlIGlzc3VlIGlz IHRoYXQgeW91IHdhbnQgdG8gZGV0ZWN0IHVuZGVycnVucyBldmVyeXdoZXJlLCBub3QganVzdCBp biB0aGUKPiA+ID4gPiA+ID4gc3BlY2lmaWMgdGVzdHMgeW91J3JlIGNoZWNraW5nIGZvciBpdC4g QW55dGhpbmcgdGhhdCBkb2VzIGEgbW9kZXNldCBjb3VsZAo+ID4gPiA+ID4gPiBjYXVzZSBhbiB1 bmRlcnJ1biAoYXQgbGVhc3Qgd2UndmUgbWFuYWdlZCB0byBkbyBzbyBwcmV0dHkgbXVjaCBldmVy eXdoZXJlCj4gPiA+ID4gPiA+IG9uIGk5MTUgaHcsIGlmIHlvdSBtaXNwcm9ncmFtIGlzIHN1ZmZp Y2llbnRseSkuICAgIAo+ID4gPiA+ID4KPiA+ID4gPiA+IEluIG15IHNwZWNpZmljIGNhc2UsIEkg d2FudCB0byBoYXZlIHRoZSBJR1QgdGVzdCBjaGVjayB0aGUgdW5kZXJydW4KPiA+ID4gPiA+IHZh bHVlIHdoaWxlIHRoZSB0ZXN0IGlzIGJlaW5nIGV4ZWN1dGVkIHNvIHRoYXQgSSBrbm93IHdoaWNo IGV4YWN0Cj4gPiA+ID4gPiBjb25maWd1cmF0aW9uIHRyaWdnZXJzIHRoZSB1bmRlcnJ1biBzaXR1 YXRpb24uIEF0IGxlYXN0IHRoYXQncyBob3cgSQo+ID4gPiA+ID4gZGlkIHRvIGFkanVzdC9kZWJ1 ZyB0aGUgSFZTIGxvYWQgdHJhY2tpbmcgY29kZS4gTWF5YmUgaXQncyBub3QgcmVhbGx5IGEKPiA+ ID4gPiA+IHByb2JsZW0gd2hlbiBhbGwgd2UgZG8gaXMgdHJhY2tpbmcgcmVncmVzc2lvbnMuICAg IAo+ID4gPiA+IAo+ID4gPiA+IE9rLCB0aGF0IG1ha2VzIHNlbnNlLCBhbmQgZXhwbGFpbnMgd2h5 IHlvdSB3YW50IHRoZSBvdmVyYWxsIHVuZGVycnVuCj4gPiA+ID4gY291bnRlciBleHBvc2VkIGlu IGRlYnVnZnMuICAKPiA+ID4gCj4gPiA+IEp1c3Qgb25lIHRpbnkgZGV0YWlsIHdoaWNoIGlzIG5v dCBleGFjdGx5IHJlbGF0ZWQgdG8gdGhpcyBkaXNjdXNzaW9uCj4gPiA+IGJ1dCBJIHRob3VnaHQg SSdkIG1lbnRpb24gaXQgaGVyZTogdW5kZXJydW4gaXMgYWN0dWFsbHkgbm90IGEgY291bnRlciwK PiA+ID4gaXQncyBqdXN0IGEgYm9vbGVhbi4gSSB1c2VkIGFuIGF0b21pY190IHR5cGUgdG8gYXZv aWQgaGF2aW5nIHRvIGFkZCBhCj4gPiA+IHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIHZhcmlhYmxl ICh0aGUgdmFyaWFibGUgaXMgbW9kaWZpZWQgZnJvbQo+ID4gPiBhbiBpbnRlcnJ1cHQgY29udGV4 dCBhbmQgcmVhZCBmcm9tIGEgbm9uLWF0b21pYyBjb250ZXh0KS4gU28sIHRoZQo+ID4gPiBhY2Nl cHRhYmxlIHZhbHVlcyBmb3IgdW5kZXJydW4gYXJlIGN1cnJlbnRseSAwIG9yIDEuIEkgY2FuIG1h a2UgaXQgYQo+ID4gPiBjb3VudGVyIGlmIHJlcXVpcmVkLiAgCj4gPiAKPiA+IE9uZSBpZGVhIEkg aGFkIGEgd2hpbGUgYmFjayBmb3IgaTkxNSB3b3VsZCBiZSB0byBjb3VudCB0aGUgbnVtYmVyIG9m Cj4gPiBmcmFtZXMgdGhhdCBoYWQgYW4gdW5kZXJydW4uIFNvIGJhc2ljYWxseSBzb21ldGhpbmcg bGlrZSB0aGlzOgo+ID4gCj4gPiB1bmRlcnJ1bl9pcnEoKSB7Cj4gPiAJdW5kZXJydW5fZnJhbWVz PTEKPiA+IAlkaXNhYmxlX3VuZGVycnVuX2lycSgpOwo+ID4gCXZibGFua19nZXQoKTsKPiA+IH0K PiA+IHZibGFua19pcnEoKSB7Cj4gPiAJaWYgKHVuZGVycnVuKSB7Cj4gPiAJCXVuZGVycnVuX2Zy YW1lcysrOwo+ID4gCX0gZWxzZSBpZiAodW5kZXJydW5fZnJhbWVzKSB7Cj4gPiAJCXZibGFua19w dXQoKTsKPiA+IAkJZW5hYmxlX3VuZGVycnVuX2lycSgpOwo+ID4gCQlERUJVRygiJWQgZnJhbWVz IGhhZCBhbiB1bmRlcnJ1blxuIiwgdW5kZXJydW5fZnJhbWVzKTsKPiA+IAkJdW5kZXJydW5fZnJh bWVzPTA7Cj4gPiAJfQo+ID4gfQo+ID4gCj4gPiBUaGlzIGF2b2lkcyBkcm93bmluZyBpbiB1bmRl cnJ1biBpbnRlcnJ1cHRzIHdoaWxlIHN0aWxsCj4gPiByZXBvcnRpbmcgYXQgbGVhc3QgaG93IG1h bnkgZnJhbWVzIGhhZCBwcm9ibGVtcy4KPiA+IAo+ID4gQnV0IEkgaGF2ZW4ndCBoYWQgdGltZSB0 byBpbXBsZW1lbnQgdGhhdCB5ZXQuICAKCk1heSBJIGFzayB3aHkgeW91IG5lZWQgdG8ga25vdyBo b3cgbWFueSBmcmFtZXMgaGFkIHVuZGVycnVuIGlzc3Vlcz8KCj4gCj4gVGhlIG90aGVyIHVwc2hv dCBvZiBhIGNvdW50ZXIgaXMgdGhhdCB0aGVyZSdzIG5vIHByb2JsZW0gd2l0aCByZXNldHRpbmcu Cj4gVXNlcnNwYWNlIHNpbXBseSBncmFicyB0aGUgY291bnRlciBiZWZvcmUgYW5kIGFmdGVyIHRo ZSB0ZXN0IGFuZCBjb21wYXJlcy4KPiBJZiB5b3Ugb25seSBoYXZlIDAvMSB5b3UgbmVlZCBzb21l IHdheSB0byByZXNldCwgb3Igb3RoZXJ3aXNlIGF1dG9tYXRlZAo+IHJ1bm5pbmcgaW4gYSBDSSBm YXJtIGlzbid0IHBvc3NpYmxlLgoKVGhlIHJlc2V0IHdhcyBkb25lIGR1cmluZyBhdG9taWMgY29t bWl0IGluIG15IHByb3Bvc2FsLCBzbyBubyBhY3Rpb24Kd2FzIHJlcXVpcmVkIG9uIHRoZSB1c2Vy IHNpZGUgYXBhcnQgZnJvbSBhcHBseWluZyBhIG5ldyBjb25maWcuCkFueXdheSwgSSdsbCBjaGFu Z2UgdGhhdCBmb3IgYSByZWFsIGNvdW50ZXIuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=