From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3.1 01/15] drm: Move format-related helpers to drm_fourcc.c Date: Thu, 9 Jun 2016 12:03:22 +0200 Message-ID: <20160609100322.GN3363@phenom.ffwll.local> References: <20160609083618.GL3363@phenom.ffwll.local> <1465466048-2020-1-git-send-email-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 74CC96EB28 for ; Thu, 9 Jun 2016 10:03:27 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id m124so9286187wme.3 for ; Thu, 09 Jun 2016 03:03:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1465466048-2020-1-git-send-email-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Daniel Vetter , Tomi Valkeinen , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKdW4gMDksIDIwMTYgYXQgMTI6NTQ6MDhQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFy dCB3cm90ZToKPiBUaGUgZHJtX2NydGMuYyBmaWxlIGlzIGEgbWVzcywgbWFraW5nIHRoZSBBQkkg ZG9jdW1lbnRhdGlvbiBjb25mdXNpbmcKPiBzaW5jZSBhbGwgZnVuY3Rpb25zIGFyZSBpbiB0aGUg c2FtZSBiYWcuIFNwbGl0IHRoZSBmb3JtYXQtcmVsYXRlZAo+IGhlbHBlcnMgdG8gYSBuZXcgZHJt X2ZvdXJjYy5jIGZpbGUuCj4gCj4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1 cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgoKQXBwbGllZCB0byBkcm0tbWlzYywgdGhh bmtzLgoKPiAtLS0KPiAgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsIHwgICA1ICsKPiAg ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fY3J0Yy5jICAgICB8IDI4OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMgICB8IDMyMCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2RybS9kcm1QLmggICAgICAg ICAgICAgfCAgIDEgKwo+ICBpbmNsdWRlL2RybS9kcm1fY3J0Yy5oICAgICAgICAgfCAgIDkgLS0K PiAgaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oICAgICAgIHwgIDM3ICsrKysrCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMzY0IGluc2VydGlvbnMoKyksIDI5OSBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvZHJtL2RybV9mb3VyY2MuaAo+IAo+IENoYW5nZXMgc2luY2UgdjM6Cj4gCj4g LSBNb3ZlZCB0aGUgZG9jdW1lbnRhdGlvbiB0byBhIG5ldyBzdWJzZWN0aW9uIG9mIHRoZSBtb2Rl c2V0dGluZyBjaGFwdGVyCgpCaWtlc2hlZDogSSBrbm93IGl0J3MgYWdhaW5zdCBrZXJuZWwgc3Rh bmRhcmRzLCBidXQgSSBsaWtlIHRvIGluY2x1ZGUgdGhlCnBlci1wYXRjaCBjaGFuZ2Vsb2cgd2l0 aCB0aGUgbWVyZ2VkIGNvbW1pdC4gSSB0aGluayB0aGF0J3MgYSBiZXR0ZXIKdHJhZGVvZmYgb24g dGhlIGNsZWFuIGhpc3RvcnkgdnMuIGZ1bGwgaGlzdG9yeSB0cmFkZW9mZiBzY2FsZS4gU29tZSBs aW5rcwpmb3Igd2h5IGFuZCBhbGwgdGhhdDoKCmh0dHA6Ly9qYW1leS50aGVzaGFycHMudXMvMjAx Ni8wNS9wZXJzcGVjdGl2ZXMtb24tY29tbWl0LWhpc3RvcnkuaHRtbAoKd2l0aCBsaW5rcyB0byBt b3JlIGluIHRoZXJlLiB0bDtkcjsgQWxzbyBpbmNsdWRpbmcgdGhlIG1lc3N5IHdheSBuZWVkZWQg dG8KZ2V0IHRvIGEgY2xlYW4gZmluYWwgcGF0Y2ggaXMgdmFsdWFibGUuIFNhbWUgcmVhc29ucyB3 aHkgd2UgYWRkIGxpbmtzIHRvCmJ1Z3ppbGxhIGFuZCBvdGhlciBhdXhpbGlhcnkgaW5mb3JtYXRp b24uCgpDaGVlcnMsIERhbmllbAo+IAo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jv b2svZ3B1LnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwKPiBpbmRleCA3NTg2 YmY3NWY2MmUuLjcwNDNiMjcwY2Y1NCAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jv b2svZ3B1LnRtcGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwKPiBAQCAt MTAxOCw2ICsxMDE4LDExIEBAIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7PC9zeW5vcHNpcz4K PiAgICAgICAgPC9wYXJhPgo+ICAgICAgPC9zZWN0Mj4KPiAgICAgIDxzZWN0Mj4KPiArICAgICAg PHRpdGxlPkRSTSBGb3JtYXQgSGFuZGxpbmc8L3RpdGxlPgo+ICshSWluY2x1ZGUvZHJtL2RybV9m b3VyY2MuaAo+ICshRWRyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKPiArICAgIDwvc2VjdDI+ Cj4gKyAgICA8c2VjdDI+Cj4gICAgICAgIDx0aXRsZT5EdW1iIEJ1ZmZlciBPYmplY3RzPC90aXRs ZT4KPiAgICAgICAgPHBhcmE+Cj4gIAlUaGUgS01TIEFQSSBkb2Vzbid0IHN0YW5kYXJkaXplIGJh Y2tpbmcgc3RvcmFnZSBvYmplY3QgY3JlYXRpb24gYW5kCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGluZGV4IGJlNDNh ZmIwOGM2OS4uYWEyNGFmMzVjMDY4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC04LDcgKzgsNyBAQCBk cm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAo+ICAJCWRy bV9sb2NrLm8gZHJtX21lbW9yeS5vIGRybV9kcnYubyBkcm1fdm0ubyBcCj4gIAkJZHJtX3NjYXR0 ZXIubyBkcm1fcGNpLm8gXAo+ICAJCWRybV9wbGF0Zm9ybS5vIGRybV9zeXNmcy5vIGRybV9oYXNo dGFiLm8gZHJtX21tLm8gXAo+IC0JCWRybV9jcnRjLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubyBc Cj4gKwkJZHJtX2NydGMubyBkcm1fZm91cmNjLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubyBcCj4g IAkJZHJtX2luZm8ubyBkcm1fZGVidWdmcy5vIGRybV9lbmNvZGVyX3NsYXZlLm8gXAo+ICAJCWRy bV90cmFjZV9wb2ludHMubyBkcm1fZ2xvYmFsLm8gZHJtX3ByaW1lLm8gXAo+ICAJCWRybV9yZWN0 Lm8gZHJtX3ZtYV9tYW5hZ2VyLm8gZHJtX2ZsaXBfd29yay5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwo+IGlu ZGV4IDBlM2NjNjZhYThiNy4uZTUzNjk1MjlhZjA2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fY3J0Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKPiBAQCAt MjM5LDM3ICsyMzksNiBAQCBjb25zdCBjaGFyICpkcm1fZ2V0X3N1YnBpeGVsX29yZGVyX25hbWUo ZW51bSBzdWJwaXhlbF9vcmRlciBvcmRlcikKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9nZXRf c3VicGl4ZWxfb3JkZXJfbmFtZSk7Cj4gIAo+IC1zdGF0aWMgY2hhciBwcmludGFibGVfY2hhcihp bnQgYykKPiAtewo+IC0JcmV0dXJuIGlzYXNjaWkoYykgJiYgaXNwcmludChjKSA/IGMgOiAnPyc7 Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcm1fZ2V0X2Zvcm1hdF9uYW1lIC0gcmV0dXJuIGEgc3Ry aW5nIGZvciBkcm0gZm91cmNjIGZvcm1hdAo+IC0gKiBAZm9ybWF0OiBmb3JtYXQgdG8gY29tcHV0 ZSBuYW1lIG9mCj4gLSAqCj4gLSAqIE5vdGUgdGhhdCB0aGUgYnVmZmVyIHVzZWQgYnkgdGhpcyBm dW5jdGlvbiBpcyBnbG9iYWxseSBzaGFyZWQgYW5kIG93bmVkIGJ5Cj4gLSAqIHRoZSBmdW5jdGlv biBpdHNlbGYuCj4gLSAqCj4gLSAqIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBtdWx0aXRocmVh ZGluZyBzYWZlLgo+IC0gKi8KPiAtY29uc3QgY2hhciAqZHJtX2dldF9mb3JtYXRfbmFtZSh1aW50 MzJfdCBmb3JtYXQpCj4gLXsKPiAtCXN0YXRpYyBjaGFyIGJ1ZlszMl07Cj4gLQo+IC0Jc25wcmlu dGYoYnVmLCBzaXplb2YoYnVmKSwKPiAtCQkgIiVjJWMlYyVjICVzLWVuZGlhbiAoMHglMDh4KSIs Cj4gLQkJIHByaW50YWJsZV9jaGFyKGZvcm1hdCAmIDB4ZmYpLAo+IC0JCSBwcmludGFibGVfY2hh cigoZm9ybWF0ID4+IDgpICYgMHhmZiksCj4gLQkJIHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4g MTYpICYgMHhmZiksCj4gLQkJIHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4gMjQpICYgMHg3Ziks Cj4gLQkJIGZvcm1hdCAmIERSTV9GT1JNQVRfQklHX0VORElBTiA/ICJiaWciIDogImxpdHRsZSIs Cj4gLQkJIGZvcm1hdCk7Cj4gLQo+IC0JcmV0dXJuIGJ1ZjsKPiAtfQo+IC1FWFBPUlRfU1lNQk9M KGRybV9nZXRfZm9ybWF0X25hbWUpOwo+IC0KPiAgLyoKPiAgICogSW50ZXJuYWwgZnVuY3Rpb24g dG8gYXNzaWduIGEgc2xvdCBpbiB0aGUgb2JqZWN0IGlkciBhbmQgb3B0aW9uYWxseQo+ICAgKiBy ZWdpc3RlciB0aGUgb2JqZWN0IGludG8gdGhlIGlkci4KPiBAQCAtNTU0NCwyNjQgKzU1MTMsNiBA QCBpbnQgZHJtX21vZGVfZGVzdHJveV9kdW1iX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gIH0KPiAgCj4gIC8qKgo+IC0gKiBkcm1fZmJfZ2V0X2JwcF9kZXB0aCAtIGdldCB0aGUgYnBw L2RlcHRoIHZhbHVlcyBmb3IgZm9ybWF0Cj4gLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJN X0ZPUk1BVF8qKQo+IC0gKiBAZGVwdGg6IHN0b3JhZ2UgZm9yIHRoZSBkZXB0aCB2YWx1ZQo+IC0g KiBAYnBwOiBzdG9yYWdlIGZvciB0aGUgYnBwIHZhbHVlCj4gLSAqCj4gLSAqIFRoaXMgb25seSBz dXBwb3J0cyBSR0IgZm9ybWF0cyBoZXJlIGZvciBjb21wYXQgd2l0aCBjb2RlIHRoYXQgZG9lc24n dCB1c2UKPiAtICogcGl4ZWwgZm9ybWF0cyBkaXJlY3RseSB5ZXQuCj4gLSAqLwo+IC12b2lkIGRy bV9mYl9nZXRfYnBwX2RlcHRoKHVpbnQzMl90IGZvcm1hdCwgdW5zaWduZWQgaW50ICpkZXB0aCwK PiAtCQkJICBpbnQgKmJwcCkKPiAtewo+IC0Jc3dpdGNoIChmb3JtYXQpIHsKPiAtCWNhc2UgRFJN X0ZPUk1BVF9DODoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9SR0IzMzI6Cj4gLQljYXNlIERSTV9GT1JN QVRfQkdSMjMzOgo+IC0JCSpkZXB0aCA9IDg7Cj4gLQkJKmJwcCA9IDg7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6Cj4gLQljYXNlIERSTV9GT1JNQVRfWEJHUjE1NTU6 Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCWDU1NTE6Cj4gLQljYXNlIERSTV9GT1JNQVRfQkdSWDU1 NTE6Cj4gLQljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Cj4gLQljYXNlIERSTV9GT1JNQVRfQUJH UjE1NTU6Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Cj4gLQljYXNlIERSTV9GT1JNQVRf QkdSQTU1NTE6Cj4gLQkJKmRlcHRoID0gMTU7Cj4gLQkJKmJwcCA9IDE2Owo+IC0JCWJyZWFrOwo+ IC0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6Cj4g LQkJKmRlcHRoID0gMTY7Cj4gLQkJKmJwcCA9IDE2Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1f Rk9STUFUX1JHQjg4ODoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6Cj4gLQkJKmRlcHRoID0g MjQ7Cj4gLQkJKmJwcCA9IDI0Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1hSR0I4 ODg4Ogo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+IC0JY2FzZSBEUk1fRk9STUFUX1JH Qlg4ODg4Ogo+IC0JY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4Ogo+IC0JCSpkZXB0aCA9IDI0Owo+ IC0JCSpicHAgPSAzMjsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAx MDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9S R0JYMTAxMDEwMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKPiAtCWNhc2UgRFJN X0ZPUk1BVF9BUkdCMjEwMTAxMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKPiAt CWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1JBMTAx MDEwMjoKPiAtCQkqZGVwdGggPSAzMDsKPiAtCQkqYnBwID0gMzI7Cj4gLQkJYnJlYWs7Cj4gLQlj YXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4g LQljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gLQljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6 Cj4gLQkJKmRlcHRoID0gMzI7Cj4gLQkJKmJwcCA9IDMyOwo+IC0JCWJyZWFrOwo+IC0JZGVmYXVs dDoKPiAtCQlEUk1fREVCVUdfS01TKCJ1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQgJXNcbiIsCj4g LQkJCSAgICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZm9ybWF0KSk7Cj4gLQkJKmRlcHRoID0gMDsK PiAtCQkqYnBwID0gMDsKPiAtCQlicmVhazsKPiAtCX0KPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRy bV9mYl9nZXRfYnBwX2RlcHRoKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1fZm9ybWF0X251bV9wbGFu ZXMgLSBnZXQgdGhlIG51bWJlciBvZiBwbGFuZXMgZm9yIGZvcm1hdAo+IC0gKiBAZm9ybWF0OiBw aXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogVGhl IG51bWJlciBvZiBwbGFuZXMgdXNlZCBieSB0aGUgc3BlY2lmaWVkIHBpeGVsIGZvcm1hdC4KPiAt ICovCj4gLWludCBkcm1fZm9ybWF0X251bV9wbGFuZXModWludDMyX3QgZm9ybWF0KQo+IC17Cj4g LQlzd2l0Y2ggKGZvcm1hdCkgewo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMDoKPiAtCWNhc2Ug RFJNX0ZPUk1BVF9ZVlU0MTA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDExOgo+IC0JY2FzZSBE Uk1fRk9STUFUX1lWVTQxMToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Cj4gLQljYXNlIERS TV9GT1JNQVRfWVZVNDIwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoKPiAtCWNhc2UgRFJN X0ZPUk1BVF9ZVlU0MjI6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDQ0Ogo+IC0JY2FzZSBEUk1f Rk9STUFUX1lWVTQ0NDoKPiAtCQlyZXR1cm4gMzsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+ IC0JY2FzZSBEUk1fRk9STUFUX05WMjE6Cj4gLQljYXNlIERSTV9GT1JNQVRfTlYxNjoKPiAtCWNh c2UgRFJNX0ZPUk1BVF9OVjYxOgo+IC0JY2FzZSBEUk1fRk9STUFUX05WMjQ6Cj4gLQljYXNlIERS TV9GT1JNQVRfTlY0MjoKPiAtCQlyZXR1cm4gMjsKPiAtCWRlZmF1bHQ6Cj4gLQkJcmV0dXJuIDE7 Cj4gLQl9Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X251bV9wbGFuZXMpOwo+IC0K PiAtLyoqCj4gLSAqIGRybV9mb3JtYXRfcGxhbmVfY3BwIC0gZGV0ZXJtaW5lIHRoZSBieXRlcyBw ZXIgcGl4ZWwgdmFsdWUKPiAtICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyop Cj4gLSAqIEBwbGFuZTogcGxhbmUgaW5kZXgKPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogVGhl IGJ5dGVzIHBlciBwaXhlbCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBwbGFuZS4KPiAtICovCj4g LWludCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKPiAt ewo+IC0JdW5zaWduZWQgaW50IGRlcHRoOwo+IC0JaW50IGJwcDsKPiAtCj4gLQlpZiAocGxhbmUg Pj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0J c3dpdGNoIChmb3JtYXQpIHsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+IC0JY2FzZSBEUk1f Rk9STUFUX1lWWVU6Cj4gLQljYXNlIERSTV9GT1JNQVRfVVlWWToKPiAtCWNhc2UgRFJNX0ZPUk1B VF9WWVVZOgo+IC0JCXJldHVybiAyOwo+IC0JY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gLQljYXNl IERSTV9GT1JNQVRfTlYyMToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+IC0JY2FzZSBEUk1f Rk9STUFUX05WNjE6Cj4gLQljYXNlIERSTV9GT1JNQVRfTlYyNDoKPiAtCWNhc2UgRFJNX0ZPUk1B VF9OVjQyOgo+IC0JCXJldHVybiBwbGFuZSA/IDIgOiAxOwo+IC0JY2FzZSBEUk1fRk9STUFUX1lV VjQxMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVW NDExOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0 MjA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQy MjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDQ0 Ogo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKPiAtCQlyZXR1cm4gMTsKPiAtCWRlZmF1bHQ6 Cj4gLQkJZHJtX2ZiX2dldF9icHBfZGVwdGgoZm9ybWF0LCAmZGVwdGgsICZicHApOwo+IC0JCXJl dHVybiBicHAgPj4gMzsKPiAtCX0KPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfcGxh bmVfY3BwKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBs aW5nIC0gZ2V0IHRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IKPiAtICog QGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCj4gLSAqCj4gLSAqIFJldHVybnM6 Cj4gLSAqIFRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IgZm9yIHRoZQo+ IC0gKiBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+IC0gKi8KPiAtaW50IGRybV9mb3JtYXRfaG9y el9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KQo+IC17Cj4gLQlzd2l0Y2ggKGZv cm1hdCkgewo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9Z VlU0MTE6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lW VTQxMDoKPiAtCQlyZXR1cm4gNDsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+IC0JY2FzZSBE Uk1fRk9STUFUX1lWWVU6Cj4gLQljYXNlIERSTV9GT1JNQVRfVVlWWToKPiAtCWNhc2UgRFJNX0ZP Uk1BVF9WWVVZOgo+IC0JY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gLQljYXNlIERSTV9GT1JNQVRf TlYyMToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+IC0JY2FzZSBEUk1fRk9STUFUX05WNjE6 Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQyMjoK PiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+ IC0JCXJldHVybiAyOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gMTsKPiAtCX0KPiAtfQo+IC1F WFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcpOwo+IC0KPiAt LyoqCj4gLSAqIGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcgLSBnZXQgdGhlIHZl cnRpY2FsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IKPiAtICogQGZvcm1hdDogcGl4ZWwgZm9y bWF0IChEUk1fRk9STUFUXyopCj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAqIFRoZSB2ZXJ0aWNh bCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yIGZvciB0aGUKPiAtICogc3BlY2lmaWVkIHBpeGVs IGZvcm1hdC4KPiAtICovCj4gLWludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5n KHVpbnQzMl90IGZvcm1hdCkKPiAtewo+IC0Jc3dpdGNoIChmb3JtYXQpIHsKPiAtCWNhc2UgRFJN X0ZPUk1BVF9ZVVY0MTA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgo+IC0JCXJldHVybiA0 Owo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6 Cj4gLQljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+IC0J CXJldHVybiAyOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gMTsKPiAtCX0KPiAtfQo+IC1FWFBP UlRfU1lNQk9MKGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcpOwo+IC0KPiAtLyoq Cj4gLSAqIGRybV9mb3JtYXRfcGxhbmVfd2lkdGggLSB3aWR0aCBvZiB0aGUgcGxhbmUgZ2l2ZW4g dGhlIGZpcnN0IHBsYW5lCj4gLSAqIEB3aWR0aDogd2lkdGggb2YgdGhlIGZpcnN0IHBsYW5lCj4g LSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdAo+IC0gKiBAcGxhbmU6IHBsYW5lIGluZGV4Cj4gLSAq Cj4gLSAqIFJldHVybnM6Cj4gLSAqIFRoZSB3aWR0aCBvZiBAcGxhbmUsIGdpdmVuIHRoYXQgdGhl IHdpZHRoIG9mIHRoZSBmaXJzdCBwbGFuZSBpcyBAd2lkdGguCj4gLSAqLwo+IC1pbnQgZHJtX2Zv cm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKQo+ IC17Cj4gLQlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCkpCj4gLQkJ cmV0dXJuIDA7Cj4gLQo+IC0JaWYgKHBsYW5lID09IDApCj4gLQkJcmV0dXJuIHdpZHRoOwo+IC0K PiAtCXJldHVybiB3aWR0aCAvIGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm9y bWF0KTsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfcGxhbmVfd2lkdGgpOwo+IC0K PiAtLyoqCj4gLSAqIGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0IC0gaGVpZ2h0IG9mIHRoZSBwbGFu ZSBnaXZlbiB0aGUgZmlyc3QgcGxhbmUKPiAtICogQGhlaWdodDogaGVpZ2h0IG9mIHRoZSBmaXJz dCBwbGFuZQo+IC0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQKPiAtICogQHBsYW5lOiBwbGFuZSBp bmRleAo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBUaGUgaGVpZ2h0IG9mIEBwbGFuZSwgZ2l2 ZW4gdGhhdCB0aGUgaGVpZ2h0IG9mIHRoZSBmaXJzdCBwbGFuZSBpcyBAaGVpZ2h0Lgo+IC0gKi8K PiAtaW50IGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0KGludCBoZWlnaHQsIHVpbnQzMl90IGZvcm1h dCwgaW50IHBsYW5lKQo+IC17Cj4gLQlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVz KGZvcm1hdCkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JaWYgKHBsYW5lID09IDApCj4gLQkJcmV0 dXJuIGhlaWdodDsKPiAtCj4gLQlyZXR1cm4gaGVpZ2h0IC8gZHJtX2Zvcm1hdF92ZXJ0X2Nocm9t YV9zdWJzYW1wbGluZyhmb3JtYXQpOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9w bGFuZV9oZWlnaHQpOwo+IC0KPiAtLyoqCj4gICAqIGRybV9yb3RhdGlvbl9zaW1wbGlmeSgpIC0g VHJ5IHRvIHNpbXBsaWZ5IHRoZSByb3RhdGlvbgo+ICAgKiBAcm90YXRpb246IFJvdGF0aW9uIHRv IGJlIHNpbXBsaWZpZWQKPiAgICogQHN1cHBvcnRlZF9yb3RhdGlvbnM6IFN1cHBvcnRlZCByb3Rh dGlvbnMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uMDY0NWM4NWQ1Zjk1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZm91cmNjLmMKPiBAQCAtMCwwICsxLDMyMCBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTYgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29u Ym9hcmQuY29tPgo+ICsgKgo+ICsgKiBEUk0gY29yZSBmb3JtYXQgcmVsYXRlZCBmdW5jdGlvbnMK PiArICoKPiArICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwg YW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCj4gKyAqIGRvY3VtZW50YXRpb24gZm9yIGFu eSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Cj4g KyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0 aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKPiArICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAo+ICsgKiB0aGF0 IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRp c2luZyBvcgo+ICsgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhl IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCj4gKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lv bi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucwo+ICsgKiBh Ym91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJ dCBpcyBwcm92aWRlZCAiYXMKPiArICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdh cnJhbnR5Lgo+ICsgKgo+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdB UlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKPiArICogSU5DTFVESU5HIEFM TCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBO Two+ICsgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCj4gKyAqIERB VEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VO Q0UgT1IgT1RIRVIKPiArICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQo+ICsgKiBPRiBUSElTIFNPRlRX QVJFLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2N0eXBlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2ZvdXJjYy5oPgo+ICsKPiArc3RhdGljIGNoYXIgcHJpbnRhYmxlX2NoYXIoaW50IGMp Cj4gK3sKPiArCXJldHVybiBpc2FzY2lpKGMpICYmIGlzcHJpbnQoYykgPyBjIDogJz8nOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogZHJtX2dldF9mb3JtYXRfbmFtZSAtIHJldHVybiBhIHN0cmluZyBm b3IgZHJtIGZvdXJjYyBmb3JtYXQKPiArICogQGZvcm1hdDogZm9ybWF0IHRvIGNvbXB1dGUgbmFt ZSBvZgo+ICsgKgo+ICsgKiBOb3RlIHRoYXQgdGhlIGJ1ZmZlciB1c2VkIGJ5IHRoaXMgZnVuY3Rp b24gaXMgZ2xvYmFsbHkgc2hhcmVkIGFuZCBvd25lZCBieQo+ICsgKiB0aGUgZnVuY3Rpb24gaXRz ZWxmLgo+ICsgKgo+ICsgKiBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbXVsdGl0aHJlYWRpbmcg c2FmZS4KPiArICovCj4gK2NvbnN0IGNoYXIgKmRybV9nZXRfZm9ybWF0X25hbWUodWludDMyX3Qg Zm9ybWF0KQo+ICt7Cj4gKwlzdGF0aWMgY2hhciBidWZbMzJdOwo+ICsKPiArCXNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksCj4gKwkJICIlYyVjJWMlYyAlcy1lbmRpYW4gKDB4JTA4eCkiLAo+ICsJ CSBwcmludGFibGVfY2hhcihmb3JtYXQgJiAweGZmKSwKPiArCQkgcHJpbnRhYmxlX2NoYXIoKGZv cm1hdCA+PiA4KSAmIDB4ZmYpLAo+ICsJCSBwcmludGFibGVfY2hhcigoZm9ybWF0ID4+IDE2KSAm IDB4ZmYpLAo+ICsJCSBwcmludGFibGVfY2hhcigoZm9ybWF0ID4+IDI0KSAmIDB4N2YpLAo+ICsJ CSBmb3JtYXQgJiBEUk1fRk9STUFUX0JJR19FTkRJQU4gPyAiYmlnIiA6ICJsaXR0bGUiLAo+ICsJ CSBmb3JtYXQpOwo+ICsKPiArCXJldHVybiBidWY7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1f Z2V0X2Zvcm1hdF9uYW1lKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZmJfZ2V0X2JwcF9kZXB0aCAt IGdldCB0aGUgYnBwL2RlcHRoIHZhbHVlcyBmb3IgZm9ybWF0Cj4gKyAqIEBmb3JtYXQ6IHBpeGVs IGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQo+ICsgKiBAZGVwdGg6IHN0b3JhZ2UgZm9yIHRoZSBkZXB0 aCB2YWx1ZQo+ICsgKiBAYnBwOiBzdG9yYWdlIGZvciB0aGUgYnBwIHZhbHVlCj4gKyAqCj4gKyAq IFRoaXMgb25seSBzdXBwb3J0cyBSR0IgZm9ybWF0cyBoZXJlIGZvciBjb21wYXQgd2l0aCBjb2Rl IHRoYXQgZG9lc24ndCB1c2UKPiArICogcGl4ZWwgZm9ybWF0cyBkaXJlY3RseSB5ZXQuCj4gKyAq Lwo+ICt2b2lkIGRybV9mYl9nZXRfYnBwX2RlcHRoKHVpbnQzMl90IGZvcm1hdCwgdW5zaWduZWQg aW50ICpkZXB0aCwKPiArCQkJICBpbnQgKmJwcCkKPiArewo+ICsJc3dpdGNoIChmb3JtYXQpIHsK PiArCWNhc2UgRFJNX0ZPUk1BVF9DODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0IzMzI6Cj4gKwlj YXNlIERSTV9GT1JNQVRfQkdSMjMzOgo+ICsJCSpkZXB0aCA9IDg7Cj4gKwkJKmJwcCA9IDg7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6Cj4gKwljYXNlIERSTV9GT1JN QVRfWEJHUjE1NTU6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDU1NTE6Cj4gKwljYXNlIERSTV9G T1JNQVRfQkdSWDU1NTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Cj4gKwljYXNlIERS TV9GT1JNQVRfQUJHUjE1NTU6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Cj4gKwljYXNl IERSTV9GT1JNQVRfQkdSQTU1NTE6Cj4gKwkJKmRlcHRoID0gMTU7Cj4gKwkJKmJwcCA9IDE2Owo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCWNhc2UgRFJNX0ZPUk1B VF9CR1I1NjU6Cj4gKwkJKmRlcHRoID0gMTY7Cj4gKwkJKmJwcCA9IDE2Owo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6Cj4g KwkJKmRlcHRoID0gMjQ7Cj4gKwkJKmJwcCA9IDI0Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1f Rk9STUFUX1hSR0I4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ICsJY2FzZSBE Uk1fRk9STUFUX1JHQlg4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4Ogo+ICsJCSpk ZXB0aCA9IDI0Owo+ICsJCSpicHAgPSAzMjsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiArCWNhc2Ug RFJNX0ZPUk1BVF9SR0JYMTAxMDEwMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoK PiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdS MjEwMTAxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKPiArCWNhc2UgRFJNX0ZP Uk1BVF9CR1JBMTAxMDEwMjoKPiArCQkqZGVwdGggPSAzMDsKPiArCQkqYnBwID0gMzI7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRf QUJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gKwljYXNlIERSTV9GT1JN QVRfQkdSQTg4ODg6Cj4gKwkJKmRlcHRoID0gMzI7Cj4gKwkJKmJwcCA9IDMyOwo+ICsJCWJyZWFr Owo+ICsJZGVmYXVsdDoKPiArCQlEUk1fREVCVUdfS01TKCJ1bnN1cHBvcnRlZCBwaXhlbCBmb3Jt YXQgJXNcbiIsCj4gKwkJCSAgICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZm9ybWF0KSk7Cj4gKwkJ KmRlcHRoID0gMDsKPiArCQkqYnBwID0gMDsKPiArCQlicmVhazsKPiArCX0KPiArfQo+ICtFWFBP UlRfU1lNQk9MKGRybV9mYl9nZXRfYnBwX2RlcHRoKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZm9y bWF0X251bV9wbGFuZXMgLSBnZXQgdGhlIG51bWJlciBvZiBwbGFuZXMgZm9yIGZvcm1hdAo+ICsg KiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiArICoKPiArICogUmV0dXJu czoKPiArICogVGhlIG51bWJlciBvZiBwbGFuZXMgdXNlZCBieSB0aGUgc3BlY2lmaWVkIHBpeGVs IGZvcm1hdC4KPiArICovCj4gK2ludCBkcm1fZm9ybWF0X251bV9wbGFuZXModWludDMyX3QgZm9y bWF0KQo+ICt7Cj4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQx MDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDEx Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6 Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoK PiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDQ0Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKPiArCQlyZXR1cm4gMzsKPiArCWNhc2UgRFJNX0ZP Uk1BVF9OVjEyOgo+ICsJY2FzZSBEUk1fRk9STUFUX05WMjE6Cj4gKwljYXNlIERSTV9GT1JNQVRf TlYxNjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjYxOgo+ICsJY2FzZSBEUk1fRk9STUFUX05WMjQ6 Cj4gKwljYXNlIERSTV9GT1JNQVRfTlY0MjoKPiArCQlyZXR1cm4gMjsKPiArCWRlZmF1bHQ6Cj4g KwkJcmV0dXJuIDE7Cj4gKwl9Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X251bV9w bGFuZXMpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9mb3JtYXRfcGxhbmVfY3BwIC0gZGV0ZXJtaW5l IHRoZSBieXRlcyBwZXIgcGl4ZWwgdmFsdWUKPiArICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChE Uk1fRk9STUFUXyopCj4gKyAqIEBwbGFuZTogcGxhbmUgaW5kZXgKPiArICoKPiArICogUmV0dXJu czoKPiArICogVGhlIGJ5dGVzIHBlciBwaXhlbCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBwbGFu ZS4KPiArICovCj4gK2ludCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGlu dCBwbGFuZSkKPiArewo+ICsJdW5zaWduZWQgaW50IGRlcHRoOwo+ICsJaW50IGJwcDsKPiArCj4g KwlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCkpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJc3dpdGNoIChmb3JtYXQpIHsKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+ ICsJY2FzZSBEUk1fRk9STUFUX1lWWVU6Cj4gKwljYXNlIERSTV9GT1JNQVRfVVlWWToKPiArCWNh c2UgRFJNX0ZPUk1BVF9WWVVZOgo+ICsJCXJldHVybiAyOwo+ICsJY2FzZSBEUk1fRk9STUFUX05W MTI6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYyMToKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX05WNjE6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYyNDoKPiArCWNh c2UgRFJNX0ZPUk1BVF9OVjQyOgo+ICsJCXJldHVybiBwbGFuZSA/IDIgOiAxOwo+ICsJY2FzZSBE Uk1fRk9STUFUX1lVVjQxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6Cj4gKwljYXNlIERS TV9GT1JNQVRfWVVWNDExOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKPiArCWNhc2UgRFJN X0ZPUk1BVF9ZVVY0MjA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+ICsJY2FzZSBEUk1f Rk9STUFUX1lVVjQyMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6Cj4gKwljYXNlIERSTV9G T1JNQVRfWVVWNDQ0Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKPiArCQlyZXR1cm4gMTsK PiArCWRlZmF1bHQ6Cj4gKwkJZHJtX2ZiX2dldF9icHBfZGVwdGgoZm9ybWF0LCAmZGVwdGgsICZi cHApOwo+ICsJCXJldHVybiBicHAgPj4gMzsKPiArCX0KPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRy bV9mb3JtYXRfcGxhbmVfY3BwKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZm9ybWF0X2hvcnpfY2hy b21hX3N1YnNhbXBsaW5nIC0gZ2V0IHRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBm YWN0b3IKPiArICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCj4gKyAqCj4g KyAqIFJldHVybnM6Cj4gKyAqIFRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0 b3IgZm9yIHRoZQo+ICsgKiBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+ICsgKi8KPiAraW50IGRy bV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KQo+ICt7Cj4g Kwlzd2l0Y2ggKGZvcm1hdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKPiArCWNhc2Ug RFJNX0ZPUk1BVF9ZVlU0MTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+ICsJY2FzZSBE Uk1fRk9STUFUX1lWVTQxMDoKPiArCQlyZXR1cm4gNDsKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVlW Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1lWWVU6Cj4gKwljYXNlIERSTV9GT1JNQVRfVVlWWToKPiAr CWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgo+ICsJY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gKwljYXNl IERSTV9GT1JNQVRfTlYyMToKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+ICsJY2FzZSBEUk1f Rk9STUFUX05WNjE6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+ICsJY2FzZSBEUk1fRk9S TUFUX1lWVTQyMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Cj4gKwljYXNlIERSTV9GT1JN QVRfWVZVNDIwOgo+ICsJCXJldHVybiAyOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gMTsKPiAr CX0KPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxp bmcpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcg LSBnZXQgdGhlIHZlcnRpY2FsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IKPiArICogQGZvcm1h dDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAq IFRoZSB2ZXJ0aWNhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yIGZvciB0aGUKPiArICogc3Bl Y2lmaWVkIHBpeGVsIGZvcm1hdC4KPiArICovCj4gK2ludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21h X3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCkKPiArewo+ICsJc3dpdGNoIChmb3JtYXQpIHsK PiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgo+ ICsJCXJldHVybiA0Owo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiArCWNhc2UgRFJNX0ZP Uk1BVF9ZVlU0MjA6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiArCWNhc2UgRFJNX0ZPUk1B VF9OVjIxOgo+ICsJCXJldHVybiAyOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gMTsKPiArCX0K PiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcp Owo+ICsKPiArLyoqCj4gKyAqIGRybV9mb3JtYXRfcGxhbmVfd2lkdGggLSB3aWR0aCBvZiB0aGUg cGxhbmUgZ2l2ZW4gdGhlIGZpcnN0IHBsYW5lCj4gKyAqIEB3aWR0aDogd2lkdGggb2YgdGhlIGZp cnN0IHBsYW5lCj4gKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdAo+ICsgKiBAcGxhbmU6IHBsYW5l IGluZGV4Cj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRoZSB3aWR0aCBvZiBAcGxhbmUsIGdp dmVuIHRoYXQgdGhlIHdpZHRoIG9mIHRoZSBmaXJzdCBwbGFuZSBpcyBAd2lkdGguCj4gKyAqLwo+ ICtpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90IGZvcm1hdCwg aW50IHBsYW5lKQo+ICt7Cj4gKwlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZv cm1hdCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHBsYW5lID09IDApCj4gKwkJcmV0dXJu IHdpZHRoOwo+ICsKPiArCXJldHVybiB3aWR0aCAvIGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vi c2FtcGxpbmcoZm9ybWF0KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfcGxhbmVf d2lkdGgpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0IC0gaGVpZ2h0 IG9mIHRoZSBwbGFuZSBnaXZlbiB0aGUgZmlyc3QgcGxhbmUKPiArICogQGhlaWdodDogaGVpZ2h0 IG9mIHRoZSBmaXJzdCBwbGFuZQo+ICsgKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQKPiArICogQHBs YW5lOiBwbGFuZSBpbmRleAo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUaGUgaGVpZ2h0IG9m IEBwbGFuZSwgZ2l2ZW4gdGhhdCB0aGUgaGVpZ2h0IG9mIHRoZSBmaXJzdCBwbGFuZSBpcyBAaGVp Z2h0Lgo+ICsgKi8KPiAraW50IGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0KGludCBoZWlnaHQsIHVp bnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKQo+ICt7Cj4gKwlpZiAocGxhbmUgPj0gZHJtX2Zvcm1h dF9udW1fcGxhbmVzKGZvcm1hdCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHBsYW5lID09 IDApCj4gKwkJcmV0dXJuIGhlaWdodDsKPiArCj4gKwlyZXR1cm4gaGVpZ2h0IC8gZHJtX2Zvcm1h dF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1Q LmggYi9pbmNsdWRlL2RybS9kcm1QLmgKPiBpbmRleCA4NGYxYThlZWZiZGIuLmM4ODc5MDU3MDg0 ZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKPiArKysgYi9pbmNsdWRlL2RybS9k cm1QLmgKPiBAQCAtNjYsNiArNjYsNyBAQAo+ICAKPiAgI2luY2x1ZGUgPGRybS9kcm1fYWdwc3Vw cG9ydC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2ZvdXJjYy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9nbG9iYWwuaD4KPiAgI2luY2x1ZGUgPGRy bS9kcm1faGFzaHRhYi5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9tZW1fdXRpbC5oPgo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+ IGluZGV4IGQxNTU5Y2QwNGUzZC4uMWI4MGMwMjY4ZDhmIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybV9jcnRjLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gQEAgLTI1NDAs MTUgKzI1NDAsNiBAQCBleHRlcm4gaW50IGRybV9tb2RlX3BsYW5lX3NldF9vYmpfcHJvcChzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgZXh0ZXJuIGludCBkcm1fbW9kZV9hdG9taWNfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJCSB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7Cj4gIAo+IC1leHRlcm4gdm9pZCBkcm1fZmJfZ2V0X2JwcF9kZXB0aCh1 aW50MzJfdCBmb3JtYXQsIHVuc2lnbmVkIGludCAqZGVwdGgsCj4gLQkJCQkgaW50ICpicHApOwo+ IC1leHRlcm4gaW50IGRybV9mb3JtYXRfbnVtX3BsYW5lcyh1aW50MzJfdCBmb3JtYXQpOwo+IC1l eHRlcm4gaW50IGRybV9mb3JtYXRfcGxhbmVfY3BwKHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5l KTsKPiAtZXh0ZXJuIGludCBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQz Ml90IGZvcm1hdCk7Cj4gLWV4dGVybiBpbnQgZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1w bGluZyh1aW50MzJfdCBmb3JtYXQpOwo+IC1leHRlcm4gaW50IGRybV9mb3JtYXRfcGxhbmVfd2lk dGgoaW50IHdpZHRoLCB1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7Cj4gLWV4dGVybiBpbnQg ZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCBpbnQg cGxhbmUpOwo+IC1leHRlcm4gY29uc3QgY2hhciAqZHJtX2dldF9mb3JtYXRfbmFtZSh1aW50MzJf dCBmb3JtYXQpOwo+ICBleHRlcm4gc3RydWN0IGRybV9wcm9wZXJ0eSAqZHJtX21vZGVfY3JlYXRl X3JvdGF0aW9uX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCQkJCQkgICAg ICB1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9ucyk7Cj4gIGV4dGVybiB1bnNpZ25lZCBp bnQgZHJtX3JvdGF0aW9uX3NpbXBsaWZ5KHVuc2lnbmVkIGludCByb3RhdGlvbiwKPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdmOTBhMzk2Y2Yy Ygo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZm91cmNjLmgKPiBAQCAt MCwwICsxLDM3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNiBMYXVyZW50IFBpbmNo YXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29m dHdhcmUgYW5kIGl0cwo+ICsgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJl YnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAo+ICsgKiB0aGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29w eXJpZ2h0Cj4gKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4g c3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKPiArICogdGhhdCB0aGUgbmFtZSBvZiB0aGUg Y29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKPiArICogcHVi bGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0 IHNwZWNpZmljLAo+ICsgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0 IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKPiArICogYWJvdXQgdGhlIHN1aXRhYmls aXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFz Cj4gKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KPiArICoKPiAr ICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEggUkVH QVJEIFRPIFRISVMgU09GVFdBUkUsCj4gKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KPiArICogRVZFTlQgU0hB TEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElS RUNUIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09F VkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAo+ICsgKiBEQVRBIE9SIFBST0ZJVFMsIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCj4gKyAq IFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBVU0UgT1IgUEVSRk9STUFOQ0UKPiArICogT0YgVEhJUyBTT0ZUV0FSRS4KPiArICovCj4gKyNp Zm5kZWYgX19EUk1fRk9VUkNDX0hfXwo+ICsjZGVmaW5lIF9fRFJNX0ZPVVJDQ19IX18KPiArCj4g KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8dWFwaS9kcm0vZHJtX2ZvdXJj Yy5oPgo+ICsKPiArdm9pZCBkcm1fZmJfZ2V0X2JwcF9kZXB0aCh1aW50MzJfdCBmb3JtYXQsIHVu c2lnbmVkIGludCAqZGVwdGgsIGludCAqYnBwKTsKPiAraW50IGRybV9mb3JtYXRfbnVtX3BsYW5l cyh1aW50MzJfdCBmb3JtYXQpOwo+ICtpbnQgZHJtX2Zvcm1hdF9wbGFuZV9jcHAodWludDMyX3Qg Zm9ybWF0LCBpbnQgcGxhbmUpOwo+ICtpbnQgZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1w bGluZyh1aW50MzJfdCBmb3JtYXQpOwo+ICtpbnQgZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJz YW1wbGluZyh1aW50MzJfdCBmb3JtYXQpOwo+ICtpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChp bnQgd2lkdGgsIHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKTsKPiAraW50IGRybV9mb3JtYXRf cGxhbmVfaGVpZ2h0KGludCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKTsKPiAr Y29uc3QgY2hhciAqZHJtX2dldF9mb3JtYXRfbmFtZSh1aW50MzJfdCBmb3JtYXQpOwo+ICsKPiAr I2VuZGlmIC8qIF9fRFJNX0ZPVVJDQ19IX18gKi8KPiAtLSAKPiBSZWdhcmRzLAo+IAo+IExhdXJl bnQgUGluY2hhcnQKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK