From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t v3] lib/igt_core.c: Expand --run-subtest functionality. Date: Wed, 17 Feb 2016 18:18:21 +0100 Message-ID: <20160217171821.GQ32705@phenom.ffwll.local> References: <1454587617-33962-1-git-send-email-derek.j.morton@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 23C9F6EA5F for ; Wed, 17 Feb 2016 17:17:56 +0000 (UTC) Received: by mail-wm0-f53.google.com with SMTP id c200so224916348wme.0 for ; Wed, 17 Feb 2016 09:17:56 -0800 (PST) Content-Disposition: inline In-Reply-To: <1454587617-33962-1-git-send-email-derek.j.morton@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Derek Morton Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBGZWIgMDQsIDIwMTYgYXQgMTI6MDY6NTdQTSArMDAwMCwgRGVyZWsgTW9ydG9uIHdy b3RlOgo+IEFkZGVkIGV4dGVuZGVkIHdpbGRjYXJkIHN1cHBvcnQgd2hlbiBzcGVjaWZ5aW5nIC0t cnVuLXN1YnRlc3QuCj4gCj4gV2lsZGNhcmQgZm9ybWF0IGlzIGFzIHNwZWNpZmllZCBpbiByZmMz OTc3IGFuZCB0aGUgdXdpbGRtYXQoKSBpbXBsZW1lbnRhdGlvbgo+IGlzIHRha2VuIGZyb20gbGli aW5uLgo+IFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk3NyNzZWN0aW9uLTQg Zm9yIGEgZGVzY3JpcHRpb24gb2YKPiBhbGxvd2VkIHdpbGRjYXJkIGV4cHJlc3Npb25zLgo+IAo+ IHYyOiBVc2UgY29tbWEgYXMgbGlzdCBzZXBhcmF0b3IgKFZpbGxlIFN5cmphbGEpCj4gc3VwcG9y dCBib3RoIF4gYW5kICEgYXMgbm90IG9wZXJhdG9ycyAoRGF2ZSBHb3Jkb24pCj4gCj4gdjM6IFVw ZGF0ZWQgdG8gdXNlIHV3aWxkbWF0KCkgKERhdmUgR29yZG9uKQo+IAo+IFNpZ25lZC1vZmYtYnk6 IERlcmVrIE1vcnRvbiA8ZGVyZWsuai5tb3J0b25AaW50ZWwuY29tPgoKU28gcmVhbGx5IG5vdCBo YXBweSB0aGF0IHdlIHBlcnBldHVhdGUgdGhlIGludGVyZmFjZSBkaWZmZXJlbmNlcyBpbiBob3cK aWd0IGlzIHJ1biBiZXR3ZWVuIGFuZHJvaWQgYW5kIGxpbnV4LiBCdXQgb2ggd2VsbCwgbWF5YmUg dGhpcyBoZWxwcyBpbgpnZXR0aW5nIHRoZSBhbmRyb2lkIHRlYW0gbW9yZSBvbiBib2FyZCB3aXRo IHVwc3RyZWFtIGlndCB0ZXN0cyB0aGFuIGFsc28KcmVpbnZlbnRpbmcgdGhvc2Ugd2hlZWxzLgoK QXBwbGllZCwgdGhhbmtzIGZvciB0aGUgcGF0Y2guCi1EYW5pZWwKCj4gLS0tCj4gIENPUFlJTkcg ICAgICAgICAgICAgICAgIHwgIDIxICsrKwo+ICBsaWIvTWFrZWZpbGUuc291cmNlcyAgICB8ICAg MiArCj4gIGxpYi9pZ3RfY29yZS5jICAgICAgICAgIHwgIDE3ICstCj4gIGxpYi91d2lsZG1hdC91 d2lsZG1hdC5jIHwgNDc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICBsaWIvdXdpbGRtYXQvdXdpbGRtYXQuaCB8ICAyNCArKysKPiAgNSBmaWxlcyBj aGFuZ2VkLCA1MzYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYi91d2lsZG1hdC91d2lsZG1hdC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv dXdpbGRtYXQvdXdpbGRtYXQuaAo+IAo+IGRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwo+ IGluZGV4IGI4ZjY3NTMuLjE2Mzc1ZjIgMTAwNjQ0Cj4gLS0tIGEvQ09QWUlORwo+ICsrKyBiL0NP UFlJTkcKPiBAQCAtMTA2LDMgKzEwNiwyNCBAQCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gIElOIFRIRSBTT0ZUV0FSRS4KPiArCj4g K0NvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg MjAxMSwgMjAxMiwKPiArICAgIDIwMTMsIDIwMTQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0 aXVtLCBJbmMuICgiSVNDIikKPiArQ29weXJpZ2h0IChjKSAxOTkxLCAxOTk0LCAxOTk1LCAxOTk2 LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAo+ICsgICAgMjAwMiwgMjAwMyBieSBUaGUg SW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bSBhbmQgUmljaCBTYWx6Cj4gKwo+ICtUaGlzIGNv ZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIHRoZSBJbnRlcm5ldCBT b2Z0d2FyZQo+ICtDb25zb3J0aXVtIGJ5IFJpY2ggU2Fsei4KPiArCj4gK1Blcm1pc3Npb24gdG8g dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQo+ ICtwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVk IHRoYXQgdGhlIGFib3ZlCj4gK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCj4gKwo+ICtUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICj4gK1JFR0FS RCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCj4g K01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBM SUFCTEUgRk9SIEFOWQo+ICtTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKPiArV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBM T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCj4gK0FDVElPTiBPRiBD T05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VU IE9GCj4gK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRI SVMgU09GVFdBUkUuCj4gKwo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xp Yi9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggNDk5OTg2OC4uZTMzODYxZSAxMDA2NDQKPiAtLS0g YS9saWIvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gQEAg LTYwLDYgKzYwLDggQEAgbGliaW50ZWxfdG9vbHNfbGFfU09VUkNFUyA9IAlcCj4gIAlpZ3RfY29y ZS5oCQlcCj4gIAlpZ3RfZHJhdy5jCQlcCj4gIAlpZ3RfZHJhdy5oCQlcCj4gKwl1d2lsZG1hdC91 d2lsZG1hdC5oCVwKPiArCXV3aWxkbWF0L3V3aWxkbWF0LmMJXAo+ICAJJChOVUxMKQo+ICAKPiAg LlBIT05ZOiB2ZXJzaW9uLmgudG1wCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY29yZS5jIGIvbGli L2lndF9jb3JlLmMKPiBpbmRleCA2YjY5YmI3Li44ZTBiZDJlIDEwMDY0NAo+IC0tLSBhL2xpYi9p Z3RfY29yZS5jCj4gKysrIGIvbGliL2lndF9jb3JlLmMKPiBAQCAtNTYsNyArNTYsNyBAQAo+ICAj aW5jbHVkZSA8Y3R5cGUuaD4KPiAgI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICAjaW5jbHVkZSA8bG9j YWxlLmg+Cj4gLSNpbmNsdWRlIDxmbm1hdGNoLmg+Cj4gKyNpbmNsdWRlIDx1d2lsZG1hdC91d2ls ZG1hdC5oPgo+ICAKPiAgI2luY2x1ZGUgImRybXRlc3QuaCIKPiAgI2luY2x1ZGUgImludGVsX2No aXBzZXQuaCIKPiBAQCAtMjA5LDYgKzIwOSwxOSBAQAo+ICAgKiBpbnRlbCBncHUgdG8gYmUgcHJl c2VudCkuIFRoZW4gaW5kaXZpZHVhbCBzdWJ0ZXN0cyBjYW4gYmUgcnVuIHdpdGgKPiAgICogIi0t cnVuLXN1YnRlc3QiLiBVc2FnZSBoZWxwIGZvciB0ZXN0cyB3aXRoIHN1YnRlc3RzIGNhbiBiZSBv YnRhaW5lZCB3aXRoIHRoZQo+ICAgKiAiLS1oZWxwIiBjb21tYW5kIGxpbmUgb3B0aW9uLgo+ICsg Kgo+ICsgKiBBIHdpbGRjYXJkIGV4cHJlc3Npb24gY2FuIGJlIGdpdmVuIHRvIC0tcnVuLXN1YnRl c3QgdG8gc3BlY2lmeSBhIHN1YnNldCBvZgo+ICsgKiBzdWJ0ZXN0cyB0byBydW4uIFNlZSBodHRw czovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk3NyNzZWN0aW9uLTQgZm9yIGEKPiArICogZGVz Y3JpcHRpb24gb2YgYWxsb3dlZCB3aWxkY2FyZCBleHByZXNzaW9ucy4KPiArICogU29tZSBleGFt cGxlcyBvZiBhbGxvd2VkIHdpbGRjYXJkIGV4cHJlc3Npb25zIGFyZToKPiArICoKPiArICogLSAn KmJhc2ljKicgbWF0Y2ggYW55IHN1YnRlc3QgY29udGFpbmluZyBiYXNpYwo+ICsgKiAtICdiYXNp Yy0/Pz8nIG1hdGNoIGFueSBzdWJ0ZXN0IG5hbWVkIGJhc2ljLSB3aXRoIDMgY2hhcmFjdGVycyBh ZnRlciAtCj4gKyAqIC0gJ2Jhc2ljLVswLTldJyBtYXRjaCBhbnkgc3VidGVzdCBuYW1lZCBiYXNp Yy0gd2l0aCBhIHNpbmdsZSBudW1iZXIgYWZ0ZXIgLQo+ICsgKiAtICdiYXNpYy1bXjAtOV0nIG1h dGNoIGFueSBzdWJ0ZXN0IG5hbWVkIGJhc2ljLSB3aXRoIGEgc2luZ2xlIG5vbiBudW1lcmljYWwg Y2hhcmFjdGVyIGFmdGVyIC0KPiArICogLSAnYmFzaWMqLGFkdmFuY2VkKicgbWF0Y2ggYW55IHN1 YnRlc3Qgc3RhcnRpbmcgYmFzaWMgb3IgYWR2YW5jZWQKPiArICogLSAnKiwhYmFzaWMqJyBtYXRj aCBhbnkgc3VidGVzdCBub3Qgc3RhcnRpbmcgYmFzaWMKPiArICogLSAnYmFzaWMqLCFiYXNpYy1y ZW5kZXIqJyBtYXRjaCBhbnkgc3VidGVzdCBzdGFydGluZyBiYXNpYyBidXQgbm90IHN0YXJ0aW5n IGJhc2ljLXJlbmRlcgo+ICAgKi8KPiAgCj4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXhpdF9oYW5k bGVyX2NvdW50Owo+IEBAIC04MTQsNyArODI3LDcgQEAgYm9vbCBfX2lndF9ydW5fc3VidGVzdChj b25zdCBjaGFyICpzdWJ0ZXN0X25hbWUpCj4gIAl9Cj4gIAo+ICAJaWYgKHJ1bl9zaW5nbGVfc3Vi dGVzdCkgewo+IC0JCWlmIChmbm1hdGNoKHJ1bl9zaW5nbGVfc3VidGVzdCwgc3VidGVzdF9uYW1l LCAwKSAhPSAwKQo+ICsJCWlmICh1d2lsZG1hdChzdWJ0ZXN0X25hbWUsIHJ1bl9zaW5nbGVfc3Vi dGVzdCkgPT0gMCkKPiAgCQkJcmV0dXJuIGZhbHNlOwo+ICAJCWVsc2UKPiAgCQkJcnVuX3Npbmds ZV9zdWJ0ZXN0X2ZvdW5kID0gdHJ1ZTsKPiBkaWZmIC0tZ2l0IGEvbGliL3V3aWxkbWF0L3V3aWxk bWF0LmMgYi9saWIvdXdpbGRtYXQvdXdpbGRtYXQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uMmQzNDc0Mgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvdXdpbGRt YXQvdXdpbGRtYXQuYwo+IEBAIC0wLDAgKzEsNDc0IEBACj4gKy8qIHV3aWxkbWF0LmMgaXMgcmV1 c2VkIGZyb20gbGliaW5uIC0gaHR0cHM6Ly9sYXVuY2hwYWQubmV0L3VidW50dS8rc291cmNlL2lu bjIvMi41LjQtMQo+ICsKPiArVGhpcyBwcm92aWRlcyB3aWxkIGNhcmQgbWF0Y2hpbmcgb3JpZ2lu YWxseSB1c2VkIGluIEludGVyTmV0TmV3cyBhbmQgaXMKPiArZGVzY3JpYmVkIGluIGh0dHBzOi8v dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTc3I3NlY3Rpb24tNAo+ICsKPiArSU5OIGxpY2VuY2U6 Cj4gK0lOTiBhcyBhIHdob2xlIGFuZCBhbGwgY29kZSBjb250YWluZWQgaW4gaXQgbm90IG90aGVy d2lzZSBtYXJrZWQgd2l0aAo+ICtkaWZmZXJlbnQgbGljZW5zZXMgYW5kL29yIGNvcHlyaWdodHMg aXMgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAo+ICthbmQgbGljZW5zZToKPiAr Cj4gKyAgIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg MjAxMCwgMjAxMSwgMjAxMiwKPiArICAgICAgIDIwMTMsIDIwMTQgYnkgSW50ZXJuZXQgU3lzdGVt cyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKPiArICAgQ29weXJpZ2h0IChjKSAxOTkxLCAxOTk0 LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAo+ICsgICAgICAgMjAw MiwgMjAwMyBieSBUaGUgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bSBhbmQgUmljaCBTYWx6 Cj4gKwo+ICsgICBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVk IHRvIHRoZSBJbnRlcm5ldCBTb2Z0d2FyZQo+ICsgICBDb25zb3J0aXVtIGJ5IFJpY2ggU2Fsei4K PiArCj4gKyAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRl IHRoaXMgc29mdHdhcmUgZm9yIGFueQo+ICsgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUg aXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCj4gKyAgIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMu Cj4gKwo+ICsgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NM QUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICj4gKyAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElO Q0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCj4gKyAgIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SIEFOWQo+ICsg ICBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1Ig QU5ZIERBTUFHRVMKPiArICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCj4gKyAgIEFDVElPTiBPRiBDT05UUkFDVCwg TkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCj4gKyAg IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09G VFdBUkUuCj4gKwo+ICsqLwo+ICsKPiArLyogICRJZDogdXdpbGRtYXQuYyA4OTE4IDIwMTAtMDEt MjIgMjM6Mjg6MjhaIGl1bGl1cyAkCj4gKyoqCj4gKyoqICB3aWxkbWF0IHBhdHRlcm4gbWF0Y2hp bmcgd2l0aCBVbmljb2RlIFVURi04IGV4dGVuc2lvbnMuCj4gKyoqCj4gKyoqICBEbyBzaGVsbC1z dHlsZSBwYXR0ZXJuIG1hdGNoaW5nIGZvciA/LCBcLCBbXSwgYW5kICogY2hhcmFjdGVycy4gIE1p Z2h0IG5vdAo+ICsqKiAgYmUgcm9idXN0IGluIGZhY2Ugb2YgbWFsZm9ybWVkIHBhdHRlcm5zOyBl LmcuLCAiZm9vW2EtIiBjb3VsZCBjYXVzZSBhCj4gKyoqICBzZWdtZW50YXRpb24gdmlvbGF0aW9u LiAgSXQgaXMgOC1iaXQgY2xlYW4uICAoUm9idXN0bmVzcyBob3BlZnVsbHkgZml4ZWQKPiArKiog IEp1bHkgMjAwMDsgYWxsIG1hbGZvcm1lZCBwYXR0ZXJucyBzaG91bGQgbm93IGp1c3QgZmFpbCB0 byBtYXRjaCBhbnl0aGluZy4pCj4gKyoqCj4gKyoqICBPcmlnaW5hbCBieSBSaWNoICRhbHosIG1p cnJvciFycywgV2VkIE5vdiAyNiAxOTowMzoxNyBFU1QgMTk4Ni4KPiArKiogIFJpY2ggJGFseiBp cyBub3cgPHJzYWx6QG9zZi5vcmc+Lgo+ICsqKgo+ICsqKiAgQXByaWwsIDE5OTE6ICBSZXBsYWNl ZCBtdXR1YWxseS1yZWN1cnNpdmUgY2FsbHMgd2l0aCBpbi1saW5lIGNvZGUgZm9yIHRoZQo+ICsq KiAgc3RhciBjaGFyYWN0ZXIuCj4gKyoqCj4gKyoqICBTcGVjaWFsIHRoYW5rcyB0byBMYXJzIE1h dGhpZXNlbiA8dGhvcmlubkBkaWt1LmRrPiBmb3IgdGhlIEFCT1JUIGNvZGUuCj4gKyoqICBUaGlz IGNhbiBncmVhdGx5IHNwZWVkIHVwIGZhaWxpbmcgd2lsZGNhcmQgcGF0dGVybnMuICBGb3IgZXhh bXBsZToKPiArKioKPiArKioJcGF0dGVybjogLSotKi0qLSotKi0qLTEyLSotKi0qLW0tKi0qLSoK PiArKioJdGV4dCAxOgkgLWFkb2JlLWNvdXJpZXItYm9sZC1vLW5vcm1hbC0tMTItMTIwLTc1LTc1 LW0tNzAtaXNvODg1OS0xCj4gKyoqCXRleHQgMjoJIC1hZG9iZS1jb3VyaWVyLWJvbGQtby1ub3Jt YWwtLTEyLTEyMC03NS03NS1YLTcwLWlzbzg4NTktMQo+ICsqKgo+ICsqKiAgVGV4dCAxIG1hdGNo ZXMgd2l0aCA1MSBjYWxscywgd2hpbGUgdGV4dCAyIGZhaWxzIHdpdGggNTQgY2FsbHMuICBXaXRo b3V0Cj4gKyoqICB0aGUgQUJPUlQgY29kZSwgaXQgdGFrZXMgMjIzMTAgY2FsbHMgdG8gZmFpbC4g IFVnaC4gIFRoZSBmb2xsb3dpbmcKPiArKiogIGV4cGxhbmF0aW9uIGlzIGZyb20gTGFyczoKPiAr KioKPiArKiogIFRoZSBwcmVjb25kaXRpb24gdGhhdCBtdXN0IGJlIGZ1bGZpbGxlZCBpcyB0aGF0 IERvTWF0Y2ggd2lsbCBjb25zdW1lIGF0Cj4gKyoqICBsZWFzdCBvbmUgY2hhcmFjdGVyIGluIHRl eHQuICBUaGlzIGlzIHRydWUgaWYgKnAgaXMgbmVpdGhlciAnKicgbm9yICdcMCcuKQo+ICsqKiAg VGhlIGxhc3QgcmV0dXJuIGhhcyBBQk9SVCBpbnN0ZWFkIG9mIGZhbHNlIHRvIGF2b2lkIHF1YWRy YXRpYyBiZWhhdmlvdXIgaW4KPiArKiogIGNhc2VzIGxpa2UgcGF0dGVybiAiKmEqYipjKmQiIHdp dGggdGV4dCAiYWJjeHh4eHgiLiAgV2l0aCBmYWxzZSwgZWFjaAo+ICsqKiAgc3Rhci1sb29wIGhh cyB0byBydW4gdG8gdGhlIGVuZCBvZiB0aGUgdGV4dDsgd2l0aCBBQk9SVCBvbmx5IHRoZSBsYXN0 IG9uZQo+ICsqKiAgZG9lcy4KPiArKioKPiArKiogIE9uY2UgdGhlIGNvbnRyb2wgb2Ygb25lIGlu c3RhbmNlIG9mIERvTWF0Y2ggZW50ZXJzIHRoZSBzdGFyLWxvb3AsIHRoYXQKPiArKiogIGluc3Rh bmNlIHdpbGwgcmV0dXJuIGVpdGhlciB0cnVlIG9yIEFCT1JULCBhbmQgYW55IGNhbGxpbmcgaW5z dGFuY2Ugd2lsbAo+ICsqKiAgdGhlcmVmb3JlIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciAod2l0 aG91dCBjYWxsaW5nIHJlY3Vyc2l2ZWx5IGFnYWluKS4KPiArKiogIEluIGVmZmVjdCwgb25seSBv bmUgc3Rhci1sb29wIGlzIGV2ZXIgYWN0aXZlLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8KPiAr KiogIG1vZGlmeSB0aGUgY29kZSB0byBtYWludGFpbiB0aGlzIGNvbnRleHQgZXhwbGljaXRseSwg ZWxpbWluYXRpbmcgYWxsCj4gKyoqICByZWN1cnNpdmUgY2FsbHMgYXQgdGhlIGNvc3Qgb2Ygc29t ZSBjb21wbGljYXRpb24gYW5kIGxvc3Mgb2YgY2xhcml0eSAoYW5kCj4gKyoqICB0aGUgQUJPUlQg c3R1ZmYgc2VlbXMgdG8gYmUgdW5jbGVhciBlbm91Z2ggYnkgaXRzZWxmKS4gIEkgdGhpbmsgaXQg d291bGQKPiArKiogIGJlIHVud2lzZSB0byB0cnkgdG8gZ2V0IHRoaXMgaW50byBhIHJlbGVhc2Vk IHZlcnNpb24gdW5sZXNzIHlvdSBoYXZlIGEKPiArKiogIGdvb2QgdGVzdCBkYXRhIGJhc2UgdG8g dHJ5IGl0IG91dCBvbi4KPiArKioKPiArKiogIEp1bmUsIDE5OTE6ICBSb2JlcnQgRWx6IDxrcmVA bXVubmFyaS5vei5hdT4gYWRkZWQgbWludXMgYW5kIGNsb3NlIGJyYWNrZXQKPiArKiogIGhhbmRs aW5nIGZvciBjaGFyYWN0ZXIgc2V0cy4KPiArKioKPiArKiogIEp1bHksIDIwMDA6ICBMYXJnZWx5 IHJld3JpdHRlbiBieSBSdXNzIEFsbGJlcnkgPHJyYUBzdGFuZm9yZC5lZHU+IHRvIGFkZAo+ICsq KiAgc3VwcG9ydCBmb3IgJywnLCAnIScsIGFuZCBvcHRpb25hbGx5ICdAJyB0byB0aGUgY29yZSB3 aWxkbWF0IHJvdXRpbmUuCj4gKyoqICBCcm9rZSB0aGUgY2hhcmFjdGVyIGNsYXNzIG1hdGNoaW5n IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgY2xhcml0eQo+ICsqKiAgc2luY2UgaXQncyBp bmZyZXF1ZW50bHkgdXNlZCBpbiBwcmFjdGljZSwgYW5kIGFkZGVkIHNvbWUgc2ltcGxlIGxvb2th aGVhZAo+ICsqKiAgdG8gc2lnbmlmaWNhbnRseSBkZWNyZWFzZSB0aGUgcmVjdXJzaXZlIGNhbGxz IGluIHRoZSAnKicgbWF0Y2hpbmcgY29kZS4KPiArKiogIEFkZGVkIHN1cHBvcnQgZm9yIFVURi04 IGFzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgZm9yIGFueSBoaWdoLWJpdAo+ICsqKiAgY2hh cmFjdGVycy4KPiArKioKPiArKiogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVURi04LCBzZWUg UkZDIDM2MjkuCj4gKyoqCj4gKyoqICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZmlsZSBpcyBpbnRl bnRpb25hbGx5IHdyaXR0ZW4gc28gdGhhdCBjb25kaXRpb25hbGx5Cj4gKyoqICBleGVjdXRlZCBl eHByZXNzaW9ucyBhcmUgb24gc2VwYXJhdGUgbGluZXMgZnJvbSB0aGUgY29uZGl0aW9uIHRvCj4g KyoqICBmYWNpbGl0YXRlIGFuYWx5c2lzIG9mIHRoZSBjb3ZlcmFnZSBvZiB0aGUgdGVzdCBzdWl0 ZSB1c2luZyBwdXJlY292Lgo+ICsqKiAgUGxlYXNlIHByZXNlcnZlIHRoaXMuICBBcyBvZiBNYXJj aCAxMSwgMjAwMSwgcHVyZWNvdiByZXBvcnRzIHRoYXQgdGhlCj4gKyoqICBhY2NvbXBhbnlpbmcg dGVzdCBzdWl0ZSBhY2hpZXZlcyAxMDAlIGNvdmVyYWdlIG9mIHRoaXMgZmlsZS4KPiArKi8KPiAr Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgInV3aWxkbWF0LmgiCj4gKwo+ICsj ZGVmaW5lIEFCT1JUIC0xCj4gKwo+ICsvKiBXaGV0aGVyIG9yIG5vdCBhbiBvY3RldCBsb29rcyBs aWtlIHRoZSBzdGFydCBvZiBhIFVURi04IGNoYXJhY3Rlci4gKi8KPiArI2RlZmluZSBJU1VURjgo YykgICAgICAgKCgoYykgJiAweGMwKSA9PSAweGMwKQo+ICsKPiArCj4gKy8qCj4gKyoqICBEZXRl cm1pbmUgdGhlIGxlbmd0aCBvZiBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIgaW4gb2N0ZXRzIChmb3Ig YWR2YW5jaW5nCj4gKyoqICBwb2ludGVycyB3aGVuIHNraXBwaW5nIG92ZXIgY2hhcmFjdGVycyku ICBUYWtlcyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mCj4gKyoqICB0aGUgY2hhcmFjdGVyIGFu ZCB0byB0aGUgbGFzdCBvY3RldCBvZiB0aGUgc3RyaW5nLiAgSWYgZW5kIGlzIE5VTEwsIGV4cGVj dAo+ICsqKiAgdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IHN0YXJ0IHRvIGJlIG51bC10ZXJtaW5h dGVkLiAgSWYgdGhlIGNoYXJhY3RlciBpcwo+ICsqKiAgbWFsZm9ybWVkIFVURi04LCByZXR1cm4g MSB0byB0cmVhdCBpdCBsaWtlIGFuIGVpZ2h0LWJpdCBsb2NhbCBjaGFyYWN0ZXIuCj4gKyovCj4g K3N0YXRpYyBpbnQKPiArdXRmOF9sZW5ndGgoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhcnQsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmVuZCkKPiArewo+ICsgICAgdW5zaWduZWQgY2hhciBtYXNrID0g MHg4MDsKPiArICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7Cj4gKyAgICBpbnQgbGVuZ3RoID0g MDsKPiArICAgIGludCBsZWZ0Owo+ICsKPiArICAgIGZvciAoOyBtYXNrID4gMCAmJiAoKnN0YXJ0 ICYgbWFzaykgPT0gbWFzazsgbWFzayA+Pj0gMSkKPiArICAgICAgICBsZW5ndGgrKzsKPiArICAg IGlmIChsZW5ndGggPCAyIHx8IGxlbmd0aCA+IDYpCj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKyAg ICBpZiAoZW5kICE9IE5VTEwgJiYgKGVuZCAtIHN0YXJ0ICsgMSkgPCBsZW5ndGgpCj4gKyAgICAg ICAgcmV0dXJuIDE7Cj4gKyAgICBsZWZ0ID0gbGVuZ3RoIC0gMTsKPiArICAgIGZvciAocCA9IHN0 YXJ0ICsgMTsgbGVmdCA+IDAgJiYgKCpwICYgMHhjMCkgPT0gMHg4MDsgcCsrKQo+ICsgICAgICAg IGxlZnQtLTsKPiArICAgIHJldHVybiAobGVmdCA9PSAwKSA/IGxlbmd0aCA6IDE7Cj4gK30KPiAr Cj4gKwo+ICsvKgo+ICsqKiAgQ2hlY2sgd2hldGhlciBhIHN0cmluZyBjb250YWlucyBvbmx5IHZh bGlkIFVURi04IGNoYXJhY3RlcnMuCj4gKyovCj4gK2Jvb2wKPiAraXNfdmFsaWRfdXRmOChjb25z dCBjaGFyICp0ZXh0KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBjaGFyIG1hc2s7Cj4gKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpwOwo+ICsgICAgaW50IGxlbmd0aDsKPiArICAgIGludCBsZWZ0Owo+ ICsKPiArICAgIGZvciAocCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopdGV4dDsgKnAgIT0gJ1ww JzspIHsKPiArICAgICAgICBtYXNrID0gMHg4MDsKPiArICAgICAgICBsZW5ndGggPSAwOwo+ICsK PiArICAgICAgICAvKiBGaW5kIG91dCB0aGUgZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0 ZXIuICovCj4gKyAgICAgICAgZm9yICg7IG1hc2sgPiAwICYmICgqcCAmIG1hc2spID09IG1hc2s7 IG1hc2sgPj49IDEpCj4gKyAgICAgICAgICAgIGxlbmd0aCsrOwo+ICsKPiArICAgICAgICBwKys7 Cj4gKwo+ICsgICAgICAgIC8qIFZhbGlkIEFTQ0lJLiAqLwo+ICsgICAgICAgIGlmIChsZW5ndGgg PT0gMCkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgCj4gKyAgICAgICAgLyog SW52YWxpZCBsZW5ndGguICovCj4gKyAgICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgbGVuZ3RoID4g NikKPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgICAvKiBDaGVjayB0 aGF0IGVhY2ggYnl0ZSBsb29rcyBsaWtlIDEweHh4eHh4LCBleGNlcHQgZm9yIHRoZSBmaXJzdC4g Ki8KPiArICAgICAgICBsZWZ0ID0gbGVuZ3RoIC0gMTsKPiArICAgICAgICBmb3IgKDsgbGVmdCA+ IDAgJiYgKCpwICYgMHhjMCkgPT0gMHg4MDsgcCsrKQo+ICsgICAgICAgICAgICBsZWZ0LS07Cj4g Kwo+ICsgICAgICAgIGlmIChsZWZ0ID4gMCkKPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ ICsgICAgfQo+ICsKPiArICAgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsKPiArLyoKPiArKiog IENvbnZlcnQgYSBVVEYtOCBjaGFyYWN0ZXIgdG8gVUNTLTQuICBUYWtlcyBhIHBvaW50ZXIgdG8g dGhlIHN0YXJ0IG9mIHRoZQo+ICsqKiAgY2hhcmFjdGVyIGFuZCB0byB0aGUgbGFzdCBvY3RldCBv ZiB0aGUgc3RyaW5nLCBhbmQgdG8gYSB1aW50MzJfdCBpbnRvCj4gKyoqICB3aGljaCB0byBwdXQg dGhlIGRlY29kZWQgVUNTLTQgdmFsdWUuICBJZiBlbmQgaXMgTlVMTCwgZXhwZWN0IHRoZSBzdHJp bmcKPiArKiogIHBvaW50ZWQgdG8gYnkgc3RhcnQgdG8gYmUgbnVsLXRlcm1pbmF0ZWQuICBSZXR1 cm5zIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGluCj4gKyoqICB0aGUgVVRGLTggZW5jb2RpbmcuICBJ ZiB0aGUgVVRGLTggY2hhcmFjdGVyIGlzIG1hbGZvcm1lZCwgc2V0IHJlc3VsdCB0bwo+ICsqKiAg dGhlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIGZpcnN0IG9jdGV0OyB0aGlzIGlzIHdyb25nLCBidXQg aXQgd2lsbCBnZW5lcmFsbHkKPiArKiogIGNhdXNlIHRoZSByZXN0IG9mIHRoZSB3aWxkbWF0IG1h dGNoaW5nIHRvIGRvIHRoZSByaWdodCB0aGluZyBmb3Igbm9uLVVURi04Cj4gKyoqICBpbnB1dC4K PiArKi8KPiArc3RhdGljIGludAo+ICt1dGY4X2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpz dGFydCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAo+ICsgICAgICAgICAgICB1aW50MzJfdCAq cmVzdWx0KQo+ICt7Cj4gKyAgICB1aW50MzJfdCB2YWx1ZSA9IDA7Cj4gKyAgICBpbnQgbGVuZ3Ro LCBpOwo+ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHN0YXJ0Owo+ICsgICAgdW5zaWdu ZWQgY2hhciBtYXNrOwo+ICsKPiArICAgIGxlbmd0aCA9IHV0ZjhfbGVuZ3RoKHN0YXJ0LCBlbmQp Owo+ICsgICAgaWYgKGxlbmd0aCA8IDIpIHsKPiArICAgICAgICAqcmVzdWx0ID0gKnN0YXJ0Owo+ ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgfQo+ICsgICAgbWFzayA9ICgxIDw8ICg3IC0gbGVu Z3RoKSkgLSAxOwo+ICsgICAgdmFsdWUgPSAqcCAmIG1hc2s7Cj4gKyAgICBwKys7Cj4gKyAgICBm b3IgKGkgPSBsZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7Cj4gKyAgICAgICAgdmFsdWUgPSAodmFs dWUgPDwgNikgfCAoKnAgJiAweDNmKTsKPiArICAgICAgICBwKys7Cj4gKyAgICB9Cj4gKyAgICAq cmVzdWx0ID0gdmFsdWU7Cj4gKyAgICByZXR1cm4gbGVuZ3RoOwo+ICt9Cj4gKwo+ICsKPiArLyoK PiArKiogIE1hdGNoIGEgY2hhcmFjdGVyIGNsYXNzIGFnYWluc3QgdGV4dCwgYSBVQ1MtNCBjaGFy YWN0ZXIuICBzdGFydCBpcyBhCj4gKyoqICBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIg b2YgdGhlIGNoYXJhY3RlciBjbGFzcywgZW5kIGEgcG9pbnRlciB0bwo+ICsqKiAgdGhlIGxhc3Qu ICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIG1hdGNoZXMgdGhhdCBjaGFyYWN0ZXIuCj4gKyov Cj4gK3N0YXRpYyBib29sCj4gK21hdGNoX2NsYXNzKHVpbnQzMl90IHRleHQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnN0YXJ0LAo+ICsgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQp Cj4gK3sKPiArICAgIGJvb2wgcmV2ZXJzZWQsIGFsbG93cmFuZ2U7Cj4gKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyICpwID0gc3RhcnQ7Cj4gKyAgICB1aW50MzJfdCBmaXJzdCA9IDA7Cj4gKyAgICB1 aW50MzJfdCBsYXN0Owo+ICsKPiArICAgIC8qIENoZWNrIGZvciBhbiBpbnZlcnRlZCBjaGFyYWN0 ZXIgY2xhc3MgKHN0YXJ0aW5nIHdpdGggXikuICBJZiB0aGUKPiArICAgICAgIGNoYXJhY3RlciBt YXRjaGVzIHRoZSBjaGFyYWN0ZXIgY2xhc3MsIHdlIHJldHVybiAhcmV2ZXJzZWQ7IHRoYXQgd2F5 LAo+ICsgICAgICAgd2UgcmV0dXJuIHRydWUgaWYgaXQncyBhIHJlZ3VsYXIgY2hhcmFjdGVyIGNs YXNzIGFuZCBmYWxzZSBpZiBpdCdzIGEKPiArICAgICAgIHJldmVyc2VkIG9uZS4gIElmIHRoZSBj aGFyYWN0ZXIgZG9lc24ndCBtYXRjaCwgd2UgcmV0dXJuIHJldmVyc2VkLiAqLwo+ICsgICAgcmV2 ZXJzZWQgPSAoKnAgPT0gJ14nKTsKPiArICAgIGlmIChyZXZlcnNlZCkKPiArICAgICAgICBwKys7 Cj4gKwo+ICsgICAgLyogV2FsayB0aHJvdWdoIHRoZSBjaGFyYWN0ZXIgY2xhc3MgdW50aWwgd2Ug cmVhY2ggdGhlIGVuZCBvciBmaW5kIGEKPiArICAgICAgIG1hdGNoLCBoYW5kbGluZyBjaGFyYWN0 ZXIgcmFuZ2VzIGFzIHdlIGdvLiAgT25seSBwZXJtaXQgYSByYW5nZSB0bwo+ICsgICAgICAgc3Rh cnQgd2hlbiBhbGxvd3JhbmdlIGlzIHRydWU7IHRoaXMgYWxsb3dzIC0gdG8gYmUgdHJlYXRlZCBs aWtlIGEKPiArICAgICAgIG5vcm1hbCBjaGFyYWN0ZXIgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBv ZiB0aGUgY2xhc3MgYW5kIGNhdGNoZXMKPiArICAgICAgIG1hbGZvcm1lZCByYW5nZXMgbGlrZSBh LWUtbi4gIFdlIHRyZWF0IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZwo+ICsgICAgICAg b2YgYSByYW5nZSBhcyBib3RoIGEgcmVndWxhciBtZW1iZXIgb2YgdGhlIGNsYXNzIGFuZCB0aGUg YmVnaW5uaW5nIG9mCj4gKyAgICAgICB0aGUgcmFuZ2U7IHRoaXMgaXMgaGFybWxlc3MgKGFsdGhv dWdoIGl0IG1lYW5zIHRoYXQgbWFsZm9ybWVkIHJhbmdlcwo+ICsgICAgICAgbGlrZSBtLWEgd2ls bCBtYXRjaCBtIGFuZCBub3RoaW5nIGVsc2UpLiAqLwo+ICsgICAgYWxsb3dyYW5nZSA9IGZhbHNl Owo+ICsgICAgd2hpbGUgKHAgPD0gZW5kKSB7Cj4gKyAgICAgICAgaWYgKGFsbG93cmFuZ2UgJiYg KnAgPT0gJy0nICYmIHAgPCBlbmQpIHsKPiArICAgICAgICAgICAgcCsrOwo+ICsgICAgICAgICAg ICBwICs9IHV0ZjhfZGVjb2RlKHAsIGVuZCwgJmxhc3QpOwo+ICsgICAgICAgICAgICBpZiAodGV4 dCA+PSBmaXJzdCAmJiB0ZXh0IDw9IGxhc3QpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gIXJl dmVyc2VkOwo+ICsgICAgICAgICAgICBhbGxvd3JhbmdlID0gZmFsc2U7Cj4gKyAgICAgICAgfSBl bHNlIHsKPiArICAgICAgICAgICAgcCArPSB1dGY4X2RlY29kZShwLCBlbmQsICZmaXJzdCk7Cj4g KyAgICAgICAgICAgIGlmICh0ZXh0ID09IGZpcnN0KQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu ICFyZXZlcnNlZDsKPiArICAgICAgICAgICAgYWxsb3dyYW5nZSA9IHRydWU7Cj4gKyAgICAgICAg fQo+ICsgICAgfQo+ICsgICAgcmV0dXJuIHJldmVyc2VkOwo+ICt9Cj4gKwo+ICsKPiArLyoKPiAr KiogIE1hdGNoIHRoZSB0ZXh0IGFnYWluc3QgdGhlIHBhdHRlcm4gYmV0d2VlbiBzdGFydCBhbmQg ZW5kLiAgVGhpcyBpcyBhCj4gKyoqICBzaW5nbGUgcGF0dGVybjsgYSBsZWFkaW5nICEgb3IgQCBt dXN0IGFscmVhZHkgYmUgdGFrZW4gY2FyZSBvZiwgYW5kCj4gKyoqICBjb21tYXMgbXVzdCBiZSBk ZWFsdCB3aXRoIG91dHNpZGUgb2YgdGhpcyByb3V0aW5lLgo+ICsqLwo+ICtzdGF0aWMgaW50Cj4g K21hdGNoX3BhdHRlcm4oY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCwgY29uc3QgdW5zaWduZWQg Y2hhciAqc3RhcnQsCj4gKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kKQo+ ICt7Cj4gKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZW5kY2xhc3M7Cj4gKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpwID0gc3RhcnQ7Cj4gKyAgICBib29sIGlzbWV0YTsKPiArICAgIGlu dCBtYXRjaGVkLCB3aWR0aDsKPiArICAgIHVpbnQzMl90IGM7Cj4gKwo+ICsgICAgZm9yICg7IHAg PD0gZW5kOyBwKyspIHsKPiArICAgICAgICBpZiAoISp0ZXh0ICYmICpwICE9ICcqJykKPiArICAg ICAgICAgICAgcmV0dXJuIEFCT1JUOwo+ICsKPiArICAgICAgICBzd2l0Y2ggKCpwKSB7Cj4gKyAg ICAgICAgY2FzZSAnXFwnOgo+ICsgICAgICAgICAgICBpZiAoISorK3ApCj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gQUJPUlQ7Cj4gKyAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KPiAr Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgaWYgKCp0ZXh0KysgIT0gKnApCj4g KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsK PiArICAgICAgICBjYXNlICc/JzoKPiArICAgICAgICAgICAgdGV4dCArPSBJU1VURjgoKnRleHQp ID8gdXRmOF9sZW5ndGgodGV4dCwgTlVMTCkgOiAxOwo+ICsgICAgICAgICAgICBicmVhazsKPiAr Cj4gKyAgICAgICAgY2FzZSAnKic6Cj4gKyAgICAgICAgICAgIC8qIENvbnNlY3V0aXZlIHN0YXJz IGFyZSBlcXVpdmFsZW50IHRvIG9uZS4gIEFkdmFuY2UgcGF0dGVybiB0bwo+ICsgICAgICAgICAg ICAgICB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBzdGFyLiAqLwo+ICsgICAgICAgICAgICBmb3Ig KCsrcDsgKnAgPT0gJyonOyBwKyspCj4gKyAgICAgICAgICAgICAgICA7Cj4gKwo+ICsgICAgICAg ICAgICAvKiBBIHRyYWlsaW5nIHN0YXIgd2lsbCBtYXRjaCBhbnl0aGluZy4gKi8KPiArICAgICAg ICAgICAgaWYgKHAgPiBlbmQpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiArCj4g KyAgICAgICAgICAgIC8qIEJhc2ljIGFsZ29yaXRobTogUmVjdXJzZSBhdCBlYWNoIHBvaW50IHdo ZXJlIHRoZSAqIGNvdWxkCj4gKyAgICAgICAgICAgICAgIHBvc3NpYmx5IG1hdGNoLiAgSWYgdGhl IG1hdGNoIHN1Y2NlZWRzIG9yIGFib3J0cywgcmV0dXJuCj4gKyAgICAgICAgICAgICAgIGltbWVk aWF0ZWx5OyBvdGhlcndpc2UsIHRyeSB0aGUgbmV4dCBwb3NpdGlvbi4KPiArCj4gKyAgICAgICAg ICAgICAgIE9wdGltaXphdGlvbjogSWYgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgKiBpbiB0aGUg cGF0dGVybgo+ICsgICAgICAgICAgICAgICBpc24ndCBhIG1ldGFjaGFyYWN0ZXIgKHRoZSBjb21t b24gY2FzZSksIHRoZW4gdGhlICogaGFzIHRvCj4gKyAgICAgICAgICAgICAgIGNvbnN1bWUgY2hh cmFjdGVycyBhdCBsZWFzdCB1cCB0byB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoYXQKPiArICAg ICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZSB0ZXh0LiAgU2NhbiBmb3J3YXJkIGZvciB0aG9z ZSBwb2ludHMgcmF0aGVyCj4gKyAgICAgICAgICAgICAgIHRoYW4gcmVjdXJzaW5nIGF0IGV2ZXJ5 IHBvc3NpYmxlIHBvaW50IHRvIHNhdmUgdGhlIGV4dHJhCj4gKyAgICAgICAgICAgICAgIGZ1bmN0 aW9uIGNhbGwgb3ZlcmhlYWQuICovCj4gKyAgICAgICAgICAgIGlzbWV0YSA9ICgqcCA9PSAnWycg fHwgKnAgPT0gJz8nIHx8ICpwID09ICdcXCcpOwo+ICsgICAgICAgICAgICB3aGlsZSAoKnRleHQp IHsKPiArICAgICAgICAgICAgICAgIHdpZHRoID0gSVNVVEY4KCp0ZXh0KSA/IHV0ZjhfbGVuZ3Ro KHRleHQsIE5VTEwpIDogMTsKPiArICAgICAgICAgICAgICAgIGlmIChpc21ldGEpIHsKPiArICAg ICAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2hfcGF0dGVybih0ZXh0LCBwLCBlbmQpOwo+ ICsgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gd2lkdGg7Cj4gKyAgICAgICAgICAgICAgICB9 IGVsc2Ugewo+ICsgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqdGV4dCAmJiAqdGV4dCAhPSAq cCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHdpZHRoOwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICB3aWR0aCA9IElTVVRGOCgqdGV4dCkgPyB1dGY4X2xlbmd0aCh0ZXh0 LCBOVUxMKSA6IDE7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAg ICAgIGlmICghKnRleHQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBQk9SVDsK PiArICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2hfcGF0dGVybigrK3RleHQsIHAg KyAxLCBlbmQpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgaWYgKG1h dGNoZWQgIT0gZmFsc2UpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQ7Cj4g KyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgcmV0dXJuIEFCT1JUOwo+ICsKPiArICAgICAg ICBjYXNlICdbJzoKPiArICAgICAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0 ZXIgY2xhc3MsIG1ha2luZyBzdXJlIG5vdCB0byBwaWNrCj4gKyAgICAgICAgICAgICAgIHVwIGEg Y2xvc2UgYnJhY2tldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjbGFzcy4gKi8KPiArICAgICAg ICAgICAgcCsrOwo+ICsgICAgICAgICAgICBxID0gcCArICgqcCA9PSAnXicpICsgMTsKPiArICAg ICAgICAgICAgaWYgKHEgPiBlbmQpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQUJPUlQ7Cj4g KyAgICAgICAgICAgIGVuZGNsYXNzID0gbWVtY2hyKHEsICddJywgKHNpemVfdCkgKGVuZCAtIHEg KyAxKSk7Cj4gKyAgICAgICAgICAgIGlmICghZW5kY2xhc3MpCj4gKyAgICAgICAgICAgICAgICBy ZXR1cm4gQUJPUlQ7Cj4gKwo+ICsgICAgICAgICAgICAvKiBEbyB0aGUgaGVhdnkgbGlmdGluZyBp biBhbm90aGVyIGZ1bmN0aW9uIGZvciBjbGFyaXR5LCBzaW5jZQo+ICsgICAgICAgICAgICAgICBj aGFyYWN0ZXIgY2xhc3NlcyBhcmUgYW4gdW5jb21tb24gY2FzZS4gKi8KPiArICAgICAgICAgICAg dGV4dCArPSB1dGY4X2RlY29kZSh0ZXh0LCBOVUxMLCAmYyk7Cj4gKyAgICAgICAgICAgIGlmICgh bWF0Y2hfY2xhc3MoYywgcCwgZW5kY2xhc3MgLSAxKSkKPiArICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKPiArICAgICAgICAgICAgcCA9IGVuZGNsYXNzOwo+ICsgICAgICAgICAgICBicmVh azsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuICgqdGV4dCA9PSAnXDAn KTsKPiArfQo+ICsKPiArCj4gKy8qCj4gKyoqICBUYWtlcyB0ZXh0IGFuZCBhIHdpbGRtYXQgZXhw cmVzc2lvbjsgYSB3aWxkbWF0IGV4cHJlc3Npb24gaXMgYQo+ICsqKiAgY29tbWEtc2VwYXJhdGVk IGxpc3Qgb2Ygd2lsZG1hdCBwYXR0ZXJucywgb3B0aW9uYWxseSBwcmVjZWRlZCBieSAhIHRvCj4g KyoqICBpbnZlcnQgdGhlIHNlbnNlIG9mIHRoZSBleHByZXNzaW9uLiAgUmV0dXJucyBVV0lMRE1B VF9NQVRDSCBpZiB0aGF0Cj4gKyoqICBleHByZXNzaW9uIG1hdGNoZXMgdGhlIHRleHQsIFVXSUxE TUFUX0ZBSUwgb3RoZXJ3aXNlLiAgSWYgYWxsb3dwb2lzb24gaXMKPiArKiogIHNldCwgYWxsb3cg QCB0byBpbnRyb2R1Y2UgYSBwb2lzb24gZXhwcmVzc2lvbiAodGhlIHNhbWUgYXMgISwgYnV0IGlm IGl0Cj4gKyoqICB0cmlnZ2VycyB0aGUgZmFpbGVkIG1hdGNoIHRoZSByb3V0aW5lIHJldHVybnMg VVdJTERNQVRfUE9JU09OIGluc3RlYWQpLgo+ICsqLwo+ICtzdGF0aWMgZW51bSB1d2lsZG1hdAo+ ICttYXRjaF9leHByZXNzaW9uKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnN0YXJ0LAo+ICsgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dwb2lzb24pCj4g K3sKPiArICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwgKnNwbGl0Owo+ICsgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqcCA9IHN0YXJ0Owo+ICsgICAgYm9vbCByZXZlcnNlLCBlc2NhcGVkOwo+ ICsgICAgYm9vbCBtYXRjaCA9IGZhbHNlOwo+ICsgICAgYm9vbCBwb2lzb24gPSBmYWxzZTsKPiAr ICAgIGJvb2wgcG9pc29uZWQgPSBmYWxzZTsKPiArCj4gKyAgICAvKiBIYW5kbGUgdGhlIGVtcHR5 IGV4cHJlc3Npb24gc2VwYXJhdGVseSwgc2luY2Ugb3RoZXJ3aXNlIGVuZCB3aWxsIGJlCj4gKyAg ICAgICBzZXQgdG8gYW4gaW52YWxpZCBwb2ludGVyLiAqLwo+ICsgICAgaWYgKCEqcCkKPiArICAg ICAgICByZXR1cm4gISp0ZXh0ID8gVVdJTERNQVRfTUFUQ0ggOiBVV0lMRE1BVF9GQUlMOwo+ICsg ICAgZW5kID0gc3RhcnQgKyBzdHJsZW4oKGNvbnN0IGNoYXIgKikgc3RhcnQpIC0gMTsKPiArCj4g KyAgICAvKiBNYWluIG1hdGNoIGxvb3AuICBGaW5kIGVhY2ggY29tbWEgdGhhdCBzZXBhcmF0ZXMg cGF0dGVybnMsIGFuZCBhdHRlbXB0IAo+ICsgICAgICAgdG8gbWF0Y2ggdGhlIHRleHQgd2l0aCBl YWNoIHBhdHRlcm4gaW4gb3JkZXIuICBUaGUgbGFzdCBtYXRjaGluZwo+ICsgICAgICAgcGF0dGVy biBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHdob2xlIGV4cHJlc3Npb24gbWF0Y2hlcy4gKi8KPiAr ICAgIGZvciAoOyBwIDw9IGVuZCArIDE7IHAgPSBzcGxpdCArIDEpIHsKPiArICAgICAgICBpZiAo YWxsb3dwb2lzb24pCj4gKyAgICAgICAgICAgIHBvaXNvbiA9ICgqcCA9PSAnQCcpOwo+ICsgICAg ICAgIHJldmVyc2UgPSAoKnAgPT0gJyEnKSB8fCBwb2lzb247Cj4gKyAgICAgICAgaWYgKHJldmVy c2UpCj4gKyAgICAgICAgICAgIHArKzsKPiArCj4gKyAgICAgICAgLyogRmluZCB0aGUgZmlyc3Qg dW5lc2NhcGVkIGNvbW1hLCBpZiBhbnkuICBJZiB0aGVyZSBpcyBub25lLCBzcGxpdAo+ICsgICAg ICAgICAgIHdpbGwgYmUgb25lIGdyZWF0ZXIgdGhhbiBlbmQgYW5kIHBvaW50IGF0IHRoZSBudWwg YXQgdGhlIGVuZCBvZgo+ICsgICAgICAgICAgIHRoZSBzdHJpbmcuICovCj4gKyAgICAgICAgZm9y IChlc2NhcGVkID0gZmFsc2UsIHNwbGl0ID0gcDsgc3BsaXQgPD0gZW5kOyBzcGxpdCsrKSB7Cj4g KyAgICAgICAgICAgIGlmICgqc3BsaXQgPT0gJ1snKSB7Cj4gKyAgICAgICAgICAgICAgICBzcGxp dCsrOwo+ICsgICAgICAgICAgICAgICAgaWYgKCpzcGxpdCA9PSAnXScpCj4gKyAgICAgICAgICAg ICAgICAgICAgc3BsaXQrKzsKPiArICAgICAgICAgICAgICAgIHdoaWxlIChzcGxpdCA8PSBlbmQg JiYgKnNwbGl0ICE9ICddJykKPiArICAgICAgICAgICAgICAgICAgICBzcGxpdCsrOwo+ICsgICAg ICAgICAgICB9Cj4gKyAgICAgICAgICAgIGlmICgqc3BsaXQgPT0gJywnICYmICFlc2NhcGVkKQo+ ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGVzY2FwZWQgPSAoKnNwbGl0 ID09ICdcXCcpID8gIWVzY2FwZWQgOiBmYWxzZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IC8qIE9wdGltaXphdGlvbjogSWYgbWF0Y2ggPT0gIXJldmVyc2UgYW5kIHBvaXNvbiA9PSBwb2lz b25lZCwgdGhpcwo+ICsgICAgICAgICAgIHBhdHRlcm4gY2FuJ3QgY2hhbmdlIHRoZSByZXN1bHQs IHNvIGRvbid0IGRvIGFueSB3b3JrLiAqLwo+ICsgICAgICAgIGlmIChtYXRjaCA9PSAhcmV2ZXJz ZSAmJiBwb2lzb24gPT0gcG9pc29uZWQpCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAg ICAgIGlmIChtYXRjaF9wYXR0ZXJuKHRleHQsIHAsIHNwbGl0IC0gMSkgPT0gdHJ1ZSkgewo+ICsg ICAgICAgICAgICBwb2lzb25lZCA9IHBvaXNvbjsKPiArICAgICAgICAgICAgbWF0Y2ggPSAhcmV2 ZXJzZTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBpZiAocG9pc29uZWQpCj4gKyAgICAg ICAgcmV0dXJuIFVXSUxETUFUX1BPSVNPTjsKPiArICAgIHJldHVybiBtYXRjaCA/IFVXSUxETUFU X01BVENIIDogVVdJTERNQVRfRkFJTDsKPiArfQo+ICsKPiArCj4gKy8qCj4gKyoqICBVc2VyLWxl dmVsIHJvdXRpbmUgdXNlZCBmb3Igd2lsZG1hdHMgd2hlcmUgQCBzaG91bGQgYmUgdHJlYXRlZCBh cyBhCj4gKyoqICByZWd1bGFyIGNoYXJhY3Rlci4KPiArKi8KPiArYm9vbAo+ICt1d2lsZG1hdChj b25zdCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpwYXQpCj4gK3sKPiArICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnV0ZXh0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdGV4dDsKPiArICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnVwYXQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwYXQ7Cj4g Kwo+ICsgICAgaWYgKHVwYXRbMF0gPT0gJyonICYmIHVwYXRbMV0gPT0gJ1wwJykKPiArICAgICAg ICByZXR1cm4gdHJ1ZTsKPiArICAgIGVsc2UKPiArICAgICAgICByZXR1cm4gKG1hdGNoX2V4cHJl c3Npb24odXRleHQsIHVwYXQsIGZhbHNlKSA9PSBVV0lMRE1BVF9NQVRDSCk7Cj4gK30KPiArCj4g Kwo+ICsvKgo+ICsqKiAgVXNlci1sZXZlbCByb3V0aW5lIHVzZWQgZm9yIHdpbGRtYXRzIHRoYXQg c3VwcG9ydCBwb2lzb24gbWF0Y2hlcy4KPiArKi8KPiArZW51bSB1d2lsZG1hdAo+ICt1d2lsZG1h dF9wb2lzb24oY29uc3QgY2hhciAqdGV4dCwgY29uc3QgY2hhciAqcGF0KQo+ICt7Cj4gKyAgICBj b25zdCB1bnNpZ25lZCBjaGFyICp1dGV4dCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRleHQ7 Cj4gKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp1cGF0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIg KikgcGF0Owo+ICsKPiArICAgIGlmICh1cGF0WzBdID09ICcqJyAmJiB1cGF0WzFdID09ICdcMCcp Cj4gKyAgICAgICAgcmV0dXJuIFVXSUxETUFUX01BVENIOwo+ICsgICAgZWxzZQo+ICsgICAgICAg IHJldHVybiBtYXRjaF9leHByZXNzaW9uKHV0ZXh0LCB1cGF0LCB0cnVlKTsKPiArfQo+ICsKPiAr Cj4gKy8qCj4gKyoqICBVc2VyLWxldmVsIHJvdXRpbmUgZm9yIHNpbXBsZSBleHByZXNzaW9ucyAo bmVpdGhlciAsIG5vciAhIGFyZSBzcGVjaWFsKS4KPiArKi8KPiArYm9vbAo+ICt1d2lsZG1hdF9z aW1wbGUoY29uc3QgY2hhciAqdGV4dCwgY29uc3QgY2hhciAqcGF0KQo+ICt7Cj4gKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICp1dGV4dCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRleHQ7Cj4g KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp1cGF0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg cGF0Owo+ICsgICAgc2l6ZV90IGxlbmd0aDsKPiArCj4gKyAgICBpZiAodXBhdFswXSA9PSAnKicg JiYgdXBhdFsxXSA9PSAnXDAnKQo+ICsgICAgICAgIHJldHVybiB0cnVlOwo+ICsgICAgZWxzZSB7 Cj4gKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKHBhdCk7Cj4gKyAgICAgICAgcmV0dXJuIChtYXRj aF9wYXR0ZXJuKHV0ZXh0LCB1cGF0LCB1cGF0ICsgbGVuZ3RoIC0gMSkgPT0gdHJ1ZSk7Cj4gKyAg ICB9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliL3V3aWxkbWF0L3V3aWxkbWF0LmggYi9saWIvdXdp bGRtYXQvdXdpbGRtYXQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u MmU0NzE4OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvdXdpbGRtYXQvdXdpbGRtYXQuaAo+ IEBAIC0wLDAgKzEsMjQgQEAKPiArCj4gKyNpZm5kZWYgVVdJTERNQVRfSAo+ICsjZGVmaW5lIFVX SUxETUFUX0ggMQo+ICsKPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArCj4gKy8qCj4gKyoqICBXSUxETUFUIE1B VENISU5HCj4gKyovCj4gK2VudW0gdXdpbGRtYXQgewo+ICsgICAgVVdJTERNQVRfRkFJTCAgID0g MCwKPiArICAgIFVXSUxETUFUX01BVENIICA9IDEsCj4gKyAgICBVV0lMRE1BVF9QT0lTT04KPiAr fTsKPiArCj4gK2V4dGVybiBib29sICAgICAgICAgICAgIGlzX3ZhbGlkX3V0ZjgoY29uc3QgY2hh ciAqc3RhcnQpOwo+ICtleHRlcm4gYm9vbCAgICAgICAgICAgICB1d2lsZG1hdChjb25zdCBjaGFy ICp0ZXh0LCBjb25zdCBjaGFyICpwYXQpOwo+ICtleHRlcm4gYm9vbCAgICAgICAgICAgICB1d2ls ZG1hdF9zaW1wbGUoY29uc3QgY2hhciAqdGV4dCwgY29uc3QgY2hhciAqcGF0KTsKPiArZXh0ZXJu IGVudW0gdXdpbGRtYXQgICAgdXdpbGRtYXRfcG9pc29uKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0 IGNoYXIgKnBhdCk7Cj4gKwo+ICsKPiArI2VuZGlmIC8qIFVXSUxETUFUX0ggKi8KPiAtLSAKPiAx LjkuMQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBv cmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=