From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Foss Subject: [PATCH hwc v3 6/6] drm_hwcomposer: Remove threading Date: Thu, 28 Sep 2017 18:40:31 +0200 Message-ID: <20170928164031.29720-7-robert.foss@collabora.com> References: <20170928164031.29720-1-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id D81AB6E9A1 for ; Thu, 28 Sep 2017 16:40:42 +0000 (UTC) In-Reply-To: <20170928164031.29720-1-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, robh@kernel.org, salidoa@google.com, seanpaul@chromium.org, zachr@google.com Cc: Robert Foss List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+CgpTaW5jZSBIV0MyIGRvZXNu J3QgcmVxdWlyZSB0aGUgdXNlIG9mIHRocmVhZHMgdG8gaW1wbGVtZW50IGNvcnJlY3QKc3luY2hy b25pemF0aW9uLCByZW1vdmUgc29tZSBvZiB0aGVzZSB0aHJlYWRzLgoKU2lnbmVkLW9mZi1ieTog U2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IFJvYmVydCBG b3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tPgotLS0KCkNoYW5nZXMgc2luY2UgdjI6Cgog IEVtaWwgVmVsaWtvdjoKICAgLSBQYXRjaCB0byBiZSBsYXN0IGluIHRoZSBzZXJpZXMKCiBBbmRy b2lkLm1rICAgICAgICAgICAgICAgIHwgICAzIC0KIGRybWNvbXBvc2l0aW9uLmNwcCAgICAgICAg fCAxNjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJtY29tcG9z aXRpb24uaCAgICAgICAgICB8ICA3OSAtLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm1jb21wb3NpdG9y LmNwcCAgICAgICAgIHwgMTA2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm1jb21wb3Np dG9yLmggICAgICAgICAgIHwgIDU2IC0tLS0tLS0tLS0tLS0tCiBkcm1jb21wb3NpdG9yd29ya2Vy LmggICAgIHwgIDQxIC0tLS0tLS0tLS0KIGRybWRpc3BsYXljb21wb3NpdGlvbi5jcHAgfCAgIDEg KwogZHJtZGlzcGxheWNvbXBvc2l0aW9uLmggICB8ICAxMCArKysKIGRybWRpc3BsYXljb21wb3Np dG9yLmNwcCAgfCAxODkgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogZHJtZGlzcGxheWNvbXBvc2l0b3IuaCAgICB8ICAzNiArLS0tLS0tLS0KIGRybWV2ZW50 bGlzdGVuZXIuY3BwICAgICAgfCAgIDMgKwogZHJtaHdjdHdvLmNwcCAgICAgICAgICAgICB8ICAg NiArLQogZHJtcmVzb3VyY2VzLmNwcCAgICAgICAgICB8ICA1NCArLS0tLS0tLS0tLS0tCiBkcm1y ZXNvdXJjZXMuaCAgICAgICAgICAgIHwgICA1IC0tCiBnbHdvcmtlci5jcHAgICAgICAgICAgICAg IHwgIDUyICsrKysrKysrKysrLS0KIGdsd29ya2VyLmggICAgICAgICAgICAgICAgfCAgMTAgKysr CiAxNiBmaWxlcyBjaGFuZ2VkLCA5MyBpbnNlcnRpb25zKCspLCA3MjQgZGVsZXRpb25zKC0pCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJtY29tcG9zaXRpb24uY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJtY29tcG9zaXRpb24uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRybWNvbXBvc2l0b3IuY3BwCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJtY29tcG9zaXRvci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJt Y29tcG9zaXRvcndvcmtlci5oCgpkaWZmIC0tZ2l0IGEvQW5kcm9pZC5tayBiL0FuZHJvaWQubWsK aW5kZXggYWE5NWI0NC4uNWQxNmMyZiAxMDA2NDQKLS0tIGEvQW5kcm9pZC5taworKysgYi9BbmRy b2lkLm1rCkBAIC01Nyw5ICs1Nyw2IEBAIExPQ0FMX0NfSU5DTFVERVMgOj0gXAogTE9DQUxfU1JD X0ZJTEVTIDo9IFwKIAlhdXRvbG9jay5jcHAgXAogCWRybXJlc291cmNlcy5jcHAgXAotCWRybWNv bXBvc2l0aW9uLmNwcCBcCi0JZHJtY29tcG9zaXRvci5jcHAgXAotCWRybWNvbXBvc2l0b3J3b3Jr ZXIuY3BwIFwKIAlkcm1jb25uZWN0b3IuY3BwIFwKIAlkcm1jcnRjLmNwcCBcCiAJZHJtZGlzcGxh eWNvbXBvc2l0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9kcm1jb21wb3NpdGlvbi5jcHAgYi9kcm1j b21wb3NpdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWY5MjAuLjAw MDAwMDAKLS0tIGEvZHJtY29tcG9zaXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICsw LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2Ug UHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv biAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBj b3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv bGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1 bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICog V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy ZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUg TGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgImh3Yy1kcm0tY29tcG9zaXRpb24iCi0K LSNpbmNsdWRlICJkcm1jb21wb3NpdGlvbi5oIgotI2luY2x1ZGUgImRybWNydGMuaCIKLSNpbmNs dWRlICJkcm1wbGFuZS5oIgotI2luY2x1ZGUgImRybXJlc291cmNlcy5oIgotI2luY2x1ZGUgInBs YXRmb3JtLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGN1dGlscy9sb2cu aD4KLSNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHN3X3N5bmMuaD4K LSNpbmNsdWRlIDxzeW5jL3N5bmMuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1Ecm1Db21w b3NpdGlvbjo6RHJtQ29tcG9zaXRpb24oRHJtUmVzb3VyY2VzICpkcm0sIEltcG9ydGVyICppbXBv cnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGFubmVyICpwbGFubmVyKQot ICAgIDogZHJtXyhkcm0pLCBpbXBvcnRlcl8oaW1wb3J0ZXIpLCBwbGFubmVyXyhwbGFubmVyKSB7 Ci0gIGNoYXIgdXNlX292ZXJsYXlfcGxhbmVzX3Byb3BbUFJPUEVSVFlfVkFMVUVfTUFYXTsKLSAg cHJvcGVydHlfZ2V0KCJod2MuZHJtLnVzZV9vdmVybGF5X3BsYW5lcyIsIHVzZV9vdmVybGF5X3Bs YW5lc19wcm9wLCAiMSIpOwotICBib29sIHVzZV9vdmVybGF5X3BsYW5lcyA9IGF0b2kodXNlX292 ZXJsYXlfcGxhbmVzX3Byb3ApOwotCi0gIGZvciAoYXV0byAmcGxhbmUgOiBkcm0tPnBsYW5lcygp KSB7Ci0gICAgaWYgKHBsYW5lLT50eXBlKCkgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKLSAg ICAgIHByaW1hcnlfcGxhbmVzXy5wdXNoX2JhY2socGxhbmUuZ2V0KCkpOwotICAgIGVsc2UgaWYg KHVzZV9vdmVybGF5X3BsYW5lcyAmJiBwbGFuZS0+dHlwZSgpID09IERSTV9QTEFORV9UWVBFX09W RVJMQVkpCi0gICAgICBvdmVybGF5X3BsYW5lc18ucHVzaF9iYWNrKHBsYW5lLmdldCgpKTsKLSAg fQotfQotCi1pbnQgRHJtQ29tcG9zaXRpb246OkluaXQodWludDY0X3QgZnJhbWVfbm8pIHsKLSAg Zm9yIChhdXRvICZjb25uIDogZHJtXy0+Y29ubmVjdG9ycygpKSB7Ci0gICAgaW50IGRpc3BsYXkg PSBjb25uLT5kaXNwbGF5KCk7Ci0gICAgY29tcG9zaXRpb25fbWFwX1tkaXNwbGF5XS5yZXNldChu ZXcgRHJtRGlzcGxheUNvbXBvc2l0aW9uKCkpOwotICAgIGlmICghY29tcG9zaXRpb25fbWFwX1tk aXNwbGF5XSkgewotICAgICAgQUxPR0UoIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgZGlzcGxheSBj b21wb3NpdGlvblxuIik7Ci0gICAgICByZXR1cm4gLUVOT01FTTsKLSAgICB9Ci0KLSAgICAvLyBJ ZiB0aGUgZGlzcGxheSBoYXNuJ3QgYmVlbiBtb2Rlc2V0IHlldCwgdGhpcyB3aWxsIGJlIE5VTEwK LSAgICBEcm1DcnRjICpjcnRjID0gZHJtXy0+R2V0Q3J0Y0ZvckRpc3BsYXkoZGlzcGxheSk7Ci0K LSAgICBpbnQgcmV0ID0gY29tcG9zaXRpb25fbWFwX1tkaXNwbGF5XS0+SW5pdChkcm1fLCBjcnRj LCBpbXBvcnRlcl8sIHBsYW5uZXJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZyYW1lX25vKTsKLSAgICBpZiAocmV0KSB7Ci0gICAgICBBTE9HRSgiRmFp bGVkIHRvIGluaXQgZGlzcGxheSBjb21wb3NpdGlvbiBmb3IgJWQiLCBkaXNwbGF5KTsKLSAgICAg IHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgRHJtQ29tcG9z aXRpb246OlNldExheWVycyhzaXplX3QgbnVtX2Rpc3BsYXlzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRHJtQ29tcG9zaXRpb25EaXNwbGF5TGF5ZXJzTWFwICptYXBzKSB7Ci0gIGlu dCByZXQgPSAwOwotICBmb3IgKHNpemVfdCBkaXNwbGF5X2luZGV4ID0gMDsgZGlzcGxheV9pbmRl eCA8IG51bV9kaXNwbGF5czsKLSAgICAgICBkaXNwbGF5X2luZGV4KyspIHsKLSAgICBEcm1Db21w b3NpdGlvbkRpc3BsYXlMYXllcnNNYXAgJm1hcCA9IG1hcHNbZGlzcGxheV9pbmRleF07Ci0gICAg aW50IGRpc3BsYXkgPSBtYXAuZGlzcGxheTsKLQotICAgIGlmICghZHJtXy0+R2V0Q29ubmVjdG9y Rm9yRGlzcGxheShkaXNwbGF5KSkgewotICAgICAgQUxPR0UoIkludmFsaWQgZGlzcGxheSBnaXZl biB0byBTZXRMYXllcnMgJWQiLCBkaXNwbGF5KTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQot ICAgIHJldCA9IGNvbXBvc2l0aW9uX21hcF9bZGlzcGxheV0tPlNldExheWVycygKLSAgICAgICAg bWFwLmxheWVycy5kYXRhKCksIG1hcC5sYXllcnMuc2l6ZSgpLCBtYXAuZ2VvbWV0cnlfY2hhbmdl ZCk7Ci0gICAgaWYgKHJldCkKLSAgICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICByZXR1cm4gMDsK LX0KLQotaW50IERybUNvbXBvc2l0aW9uOjpTZXREcG1zTW9kZShpbnQgZGlzcGxheSwgdWludDMy X3QgZHBtc19tb2RlKSB7Ci0gIHJldHVybiBjb21wb3NpdGlvbl9tYXBfW2Rpc3BsYXldLT5TZXRE cG1zTW9kZShkcG1zX21vZGUpOwotfQotCi1pbnQgRHJtQ29tcG9zaXRpb246OlNldERpc3BsYXlN b2RlKGludCBkaXNwbGF5LCBjb25zdCBEcm1Nb2RlICZkaXNwbGF5X21vZGUpIHsKLSAgcmV0dXJu IGNvbXBvc2l0aW9uX21hcF9bZGlzcGxheV0tPlNldERpc3BsYXlNb2RlKGRpc3BsYXlfbW9kZSk7 Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+IERybUNvbXBvc2l0 aW9uOjpUYWtlRGlzcGxheUNvbXBvc2l0aW9uKAotICAgIGludCBkaXNwbGF5KSB7Ci0gIHJldHVy biBzdGQ6Om1vdmUoY29tcG9zaXRpb25fbWFwX1tkaXNwbGF5XSk7Ci19Ci0KLWludCBEcm1Db21w b3NpdGlvbjo6UGxhbihzdGQ6Om1hcDxpbnQsIERybURpc3BsYXlDb21wb3NpdG9yPiAmY29tcG9z aXRvcl9tYXApIHsKLSAgaW50IHJldCA9IDA7Ci0gIGZvciAoYXV0byAmY29ubiA6IGRybV8tPmNv bm5lY3RvcnMoKSkgewotICAgIGludCBkaXNwbGF5ID0gY29ubi0+ZGlzcGxheSgpOwotICAgIERy bURpc3BsYXlDb21wb3NpdGlvbiAqY29tcCA9IEdldERpc3BsYXlDb21wb3NpdGlvbihkaXNwbGF5 KTsKLSAgICByZXQgPSBjb21wLT5QbGFuKGNvbXBvc2l0b3JfbWFwW2Rpc3BsYXldLnNxdWFzaF9z dGF0ZSgpLCAmcHJpbWFyeV9wbGFuZXNfLAotICAgICAgICAgICAgICAgICAgICAgJm92ZXJsYXlf cGxhbmVzXyk7Ci0gICAgaWYgKHJldCkgewotICAgICAgQUxPR0UoIkZhaWxlZCB0byBwbGFuIGNv bXBvc2l0aW9uIGZvciBkaXNsYXkgJWQiLCBkaXNwbGF5KTsKLSAgICAgIHJldHVybiByZXQ7Ci0g ICAgfQotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBEcm1Db21wb3NpdGlvbjo6RGlzYWJs ZVVudXNlZFBsYW5lcygpIHsKLSAgZm9yIChhdXRvICZjb25uIDogZHJtXy0+Y29ubmVjdG9ycygp KSB7Ci0gICAgaW50IGRpc3BsYXkgPSBjb25uLT5kaXNwbGF5KCk7Ci0gICAgRHJtRGlzcGxheUNv bXBvc2l0aW9uICpjb21wID0gR2V0RGlzcGxheUNvbXBvc2l0aW9uKGRpc3BsYXkpOwotCi0gICAg LyoKLSAgICAgKiBMZWF2ZSBlbXB0eSBjb21wb3NpdGlvbnMgYWxvbmUKLSAgICAgKiBUT0RPOiBy ZS12aXNpdCB0aGlzIGFuZCBwb3RlbnRpYWxseSBkaXNhYmxlIGxlZnRvdmVyIHBsYW5lcyBhZnRl ciB0aGUKLSAgICAgKiAgICAgICBhY3RpdmUgY29tcG9zaXRpb25zIGhhdmUgZ29iYmxlZCB1cCBh bGwgdGhleSBjYW4KLSAgICAgKi8KLSAgICBpZiAoY29tcC0+dHlwZSgpID09IERSTV9DT01QT1NJ VElPTl9UWVBFX0VNUFRZIHx8Ci0gICAgICAgIGNvbXAtPnR5cGUoKSA9PSBEUk1fQ09NUE9TSVRJ T05fVFlQRV9NT0RFU0VUKQotICAgICAgY29udGludWU7Ci0KLSAgICBEcm1DcnRjICpjcnRjID0g ZHJtXy0+R2V0Q3J0Y0ZvckRpc3BsYXkoZGlzcGxheSk7Ci0gICAgaWYgKCFjcnRjKSB7Ci0gICAg ICBBTE9HRSgiRmFpbGVkIHRvIGZpbmQgY3J0YyBmb3IgZGlzcGxheSAlZCIsIGRpc3BsYXkpOwot ICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZm9yIChzdGQ6OnZlY3RvcjxEcm1QbGFuZSAq Pjo6aXRlcmF0b3IgaXRlciA9IHByaW1hcnlfcGxhbmVzXy5iZWdpbigpOwotICAgICAgICAgaXRl ciAhPSBwcmltYXJ5X3BsYW5lc18uZW5kKCk7ICsraXRlcikgewotICAgICAgaWYgKCgqaXRlcikt PkdldENydGNTdXBwb3J0ZWQoKmNydGMpKSB7Ci0gICAgICAgIGNvbXAtPkFkZFBsYW5lRGlzYWJs ZSgqaXRlcik7Ci0gICAgICAgIHByaW1hcnlfcGxhbmVzXy5lcmFzZShpdGVyKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGZvciAoc3RkOjp2ZWN0b3I8RHJtUGxhbmUgKj46 Oml0ZXJhdG9yIGl0ZXIgPSBvdmVybGF5X3BsYW5lc18uYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIg IT0gb3ZlcmxheV9wbGFuZXNfLmVuZCgpOykgewotICAgICAgaWYgKCgqaXRlciktPkdldENydGNT dXBwb3J0ZWQoKmNydGMpKSB7Ci0gICAgICAgIGNvbXAtPkFkZFBsYW5lRGlzYWJsZSgqaXRlcik7 Ci0gICAgICAgIGl0ZXIgPSBvdmVybGF5X3BsYW5lc18uZXJhc2UoaXRlcik7Ci0gICAgICB9IGVs c2UgewotICAgICAgICBpdGVyKys7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAwOwot fQotCi1Ecm1EaXNwbGF5Q29tcG9zaXRpb24gKkRybUNvbXBvc2l0aW9uOjpHZXREaXNwbGF5Q29t cG9zaXRpb24oaW50IGRpc3BsYXkpIHsKLSAgcmV0dXJuIGNvbXBvc2l0aW9uX21hcF9bZGlzcGxh eV0uZ2V0KCk7Ci19Ci19CmRpZmYgLS1naXQgYS9kcm1jb21wb3NpdGlvbi5oIGIvZHJtY29tcG9z aXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlOGNkZS4uMDAwMDAwMAot LS0gYS9kcm1jb21wb3NpdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoK LSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0g KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl IExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M SUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w bGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy bmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgot ICovCi0KLSNpZm5kZWYgQU5EUk9JRF9EUk1fQ09NUE9TSVRJT05fSF8KLSNkZWZpbmUgQU5EUk9J RF9EUk1fQ09NUE9TSVRJT05fSF8KLQotI2luY2x1ZGUgImRybWh3Y29tcG9zZXIuaCIKLSNpbmNs dWRlICJkcm1kaXNwbGF5Y29tcG9zaXRpb24uaCIKLSNpbmNsdWRlICJkcm1wbGFuZS5oIgotI2lu Y2x1ZGUgInBsYXRmb3JtLmgiCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8dmVjdG9yPgot Ci0jaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxoYXJkd2FyZS9od2Nv bXBvc2VyLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRHJtRGlzcGxheUNvbXBv c2l0b3I7Ci0KLXN0cnVjdCBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAgewotICBpbnQg ZGlzcGxheTsKLSAgYm9vbCBnZW9tZXRyeV9jaGFuZ2VkID0gdHJ1ZTsKLSAgc3RkOjp2ZWN0b3I8 RHJtSHdjTGF5ZXI+IGxheWVyczsKLQotICBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAo KSA9IGRlZmF1bHQ7Ci0gIERybUNvbXBvc2l0aW9uRGlzcGxheUxheWVyc01hcChEcm1Db21wb3Np dGlvbkRpc3BsYXlMYXllcnNNYXAgJiZyaHMpID0KLSAgICAgIGRlZmF1bHQ7Ci19OwotCi1jbGFz cyBEcm1Db21wb3NpdGlvbiB7Ci0gcHVibGljOgotICBEcm1Db21wb3NpdGlvbihEcm1SZXNvdXJj ZXMgKmRybSwgSW1wb3J0ZXIgKmltcG9ydGVyLCBQbGFubmVyICpwbGFubmVyKTsKLQotICBpbnQg SW5pdCh1aW50NjRfdCBmcmFtZV9ubyk7Ci0KLSAgaW50IFNldExheWVycyhzaXplX3QgbnVtX2Rp c3BsYXlzLCBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAgKm1hcHMpOwotICBpbnQgU2V0 RHBtc01vZGUoaW50IGRpc3BsYXksIHVpbnQzMl90IGRwbXNfbW9kZSk7Ci0gIGludCBTZXREaXNw bGF5TW9kZShpbnQgZGlzcGxheSwgY29uc3QgRHJtTW9kZSAmZGlzcGxheV9tb2RlKTsKLQotICBz dGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBUYWtlRGlzcGxheUNvbXBvc2l0 aW9uKGludCBkaXNwbGF5KTsKLSAgRHJtRGlzcGxheUNvbXBvc2l0aW9uICpHZXREaXNwbGF5Q29t cG9zaXRpb24oaW50IGRpc3BsYXkpOwotCi0gIGludCBQbGFuKHN0ZDo6bWFwPGludCwgRHJtRGlz cGxheUNvbXBvc2l0b3I+ICZjb21wb3NpdG9yX21hcCk7Ci0gIGludCBEaXNhYmxlVW51c2VkUGxh bmVzKCk7Ci0KLSBwcml2YXRlOgotICBEcm1Db21wb3NpdGlvbihjb25zdCBEcm1Db21wb3NpdGlv biAmKSA9IGRlbGV0ZTsKLQotICBEcm1SZXNvdXJjZXMgKmRybV87Ci0gIEltcG9ydGVyICppbXBv cnRlcl87Ci0gIFBsYW5uZXIgKnBsYW5uZXJfOwotCi0gIHN0ZDo6dmVjdG9yPERybVBsYW5lICo+ IHByaW1hcnlfcGxhbmVzXzsKLSAgc3RkOjp2ZWN0b3I8RHJtUGxhbmUgKj4gb3ZlcmxheV9wbGFu ZXNfOwotCi0gIC8qCi0gICAqIFRoaXMgX211c3RfIGJlIHJlYWQtb25seSBhZnRlciBpdCdzIHBh c3NlZCB0byBRdWV1ZUNvbXBvc2l0aW9uLiBPdGhlcndpc2UKLSAgICogbG9ja2luZyBpcyByZXF1 aXJlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIGNvbXBvc2l0b3IgdGhyZWFk cy4KLSAgICovCi0gIHN0ZDo6bWFwPGludCwgc3RkOjp1bmlxdWVfcHRyPERybURpc3BsYXlDb21w b3NpdGlvbj4+IGNvbXBvc2l0aW9uX21hcF87Ci19OwotfQotCi0jZW5kaWYgIC8vIEFORFJPSURf RFJNX0NPTVBPU0lUSU9OX0hfCmRpZmYgLS1naXQgYS9kcm1jb21wb3NpdG9yLmNwcCBiL2RybWNv bXBvc2l0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWYzZWQ4Li4wMDAw MDAwCi0tLSBhL2RybWNvbXBvc2l0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAg QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv amVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy LjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5 IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRl ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lU SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz IG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj ZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgImh3Yy1kcm0tY29tcG9zaXRvciIKLQotI2lu Y2x1ZGUgImRybWNvbXBvc2l0b3IuaCIKLSNpbmNsdWRlICJkcm1kaXNwbGF5Y29tcG9zaXRvci5o IgotI2luY2x1ZGUgImRybXJlc291cmNlcy5oIgotI2luY2x1ZGUgInBsYXRmb3JtLmgiCi0KLSNp bmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Y3V0aWxz L2xvZy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLURybUNvbXBvc2l0b3I6OkRybUNvbXBv c2l0b3IoRHJtUmVzb3VyY2VzICpkcm0pIDogZHJtXyhkcm0pLCBmcmFtZV9ub18oMCkgewotfQot Ci1Ecm1Db21wb3NpdG9yOjp+RHJtQ29tcG9zaXRvcigpIHsKLX0KLQotaW50IERybUNvbXBvc2l0 b3I6OkluaXQoKSB7Ci0gIGZvciAoYXV0byAmY29ubiA6IGRybV8tPmNvbm5lY3RvcnMoKSkgewot ICAgIGludCBkaXNwbGF5ID0gY29ubi0+ZGlzcGxheSgpOwotICAgIGludCByZXQgPSBjb21wb3Np dG9yX21hcF9bZGlzcGxheV0uSW5pdChkcm1fLCBkaXNwbGF5KTsKLSAgICBpZiAocmV0KSB7Ci0g ICAgICBBTE9HRSgiRmFpbGVkIHRvIGluaXRpYWxpemUgZGlzcGxheSBjb21wb3NpdG9yIGZvciAl ZCIsIGRpc3BsYXkpOwotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gIH0KLSAgcGxhbm5lcl8g PSBQbGFubmVyOjpDcmVhdGVJbnN0YW5jZShkcm1fKTsKLSAgaWYgKCFwbGFubmVyXykgewotICAg IEFMT0dFKCJGYWlsZWQgdG8gY3JlYXRlIHBsYW5uZXIgaW5zdGFuY2UgZm9yIGNvbXBvc2l0aW9u Iik7Ci0gICAgcmV0dXJuIC1FTk9NRU07Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotc3RkOjp1 bmlxdWVfcHRyPERybUNvbXBvc2l0aW9uPiBEcm1Db21wb3NpdG9yOjpDcmVhdGVDb21wb3NpdGlv bigKLSAgICBJbXBvcnRlciAqaW1wb3J0ZXIpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPERybUNvbXBv c2l0aW9uPiBjb21wb3NpdGlvbigKLSAgICAgIG5ldyBEcm1Db21wb3NpdGlvbihkcm1fLCBpbXBv cnRlciwgcGxhbm5lcl8uZ2V0KCkpKTsKLSAgaW50IHJldCA9IGNvbXBvc2l0aW9uLT5Jbml0KCsr ZnJhbWVfbm9fKTsKLSAgaWYgKHJldCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8gaW5pdGlhbGl6 ZSBkcm0gY29tcG9zaXRpb24gJWQiLCByZXQpOwotICAgIHJldHVybiBudWxscHRyOwotICB9Ci0g IHJldHVybiBjb21wb3NpdGlvbjsKLX0KLQotaW50IERybUNvbXBvc2l0b3I6OlF1ZXVlQ29tcG9z aXRpb24oCi0gICAgc3RkOjp1bmlxdWVfcHRyPERybUNvbXBvc2l0aW9uPiBjb21wb3NpdGlvbikg ewotICBpbnQgcmV0OwotCi0gIHJldCA9IGNvbXBvc2l0aW9uLT5QbGFuKGNvbXBvc2l0b3JfbWFw Xyk7Ci0gIGlmIChyZXQpCi0gICAgcmV0dXJuIHJldDsKLQotICByZXQgPSBjb21wb3NpdGlvbi0+ RGlzYWJsZVVudXNlZFBsYW5lcygpOwotICBpZiAocmV0KQotICAgIHJldHVybiByZXQ7Ci0KLSAg Zm9yIChhdXRvICZjb25uIDogZHJtXy0+Y29ubmVjdG9ycygpKSB7Ci0gICAgaW50IGRpc3BsYXkg PSBjb25uLT5kaXNwbGF5KCk7Ci0gICAgaW50IHJldCA9IGNvbXBvc2l0b3JfbWFwX1tkaXNwbGF5 XS5RdWV1ZUNvbXBvc2l0aW9uKAotICAgICAgICBjb21wb3NpdGlvbi0+VGFrZURpc3BsYXlDb21w b3NpdGlvbihkaXNwbGF5KSk7Ci0gICAgaWYgKHJldCkgewotICAgICAgQUxPR0UoIkZhaWxlZCB0 byBxdWV1ZSBjb21wb3NpdGlvbiBmb3IgZGlzcGxheSAlZCAoJWQpIiwgZGlzcGxheSwgcmV0KTsK LSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBE cm1Db21wb3NpdG9yOjpDb21wb3NpdGUoKSB7Ci0gIC8qCi0gICAqIFRoaXMgc2hvdWxkbid0IGJl IGNhbGxlZCwgd2Ugc2hvdWxkIGJlIGNhbGxpbmcgQ29tcG9zaXRlKCkgb24gdGhlIGRpc3BsYXkK LSAgICogY29tcG9zaXRvcnMgZGlyZWN0bHkuCi0gICAqLwotICBBTE9HRSgiQ2FsbGluZyBiYXNl IGRybSBjb21wb3NpdG9yIENvbXBvc2l0ZSgpIGZ1bmN0aW9uIik7Ci0gIHJldHVybiAtRUlOVkFM OwotfQotCi12b2lkIERybUNvbXBvc2l0b3I6OkR1bXAoc3RkOjpvc3RyaW5nc3RyZWFtICpvdXQp IGNvbnN0IHsKLSAgKm91dCA8PCAiRHJtQ29tcG9zaXRvciBzdGF0czpcbiI7Ci0gIGZvciAoYXV0 byAmY29ubiA6IGRybV8tPmNvbm5lY3RvcnMoKSkKLSAgICBjb21wb3NpdG9yX21hcF9bY29ubi0+ ZGlzcGxheSgpXS5EdW1wKG91dCk7Ci19Ci19CmRpZmYgLS1naXQgYS9kcm1jb21wb3NpdG9yLmgg Yi9kcm1jb21wb3NpdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MjcxYjUu LjAwMDAwMDAKLS0tIGEvZHJtY29tcG9zaXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ cm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u IDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNv cHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s aWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVu ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBX SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl c3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1 YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM aWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9EUk1fQ09NUE9TSVRPUl9IXwotI2RlZmlu ZSBBTkRST0lEX0RSTV9DT01QT1NJVE9SX0hfCi0KLSNpbmNsdWRlICJkcm1jb21wb3NpdGlvbi5o IgotI2luY2x1ZGUgImRybWRpc3BsYXljb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0u aCIKLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3N0cmVh bT4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBEcm1Db21wb3NpdG9yIHsKLSBwdWJs aWM6Ci0gIERybUNvbXBvc2l0b3IoRHJtUmVzb3VyY2VzICpkcm0pOwotICB+RHJtQ29tcG9zaXRv cigpOwotCi0gIGludCBJbml0KCk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPERybUNvbXBvc2l0aW9u PiBDcmVhdGVDb21wb3NpdGlvbihJbXBvcnRlciAqaW1wb3J0ZXIpOwotCi0gIGludCBRdWV1ZUNv bXBvc2l0aW9uKHN0ZDo6dW5pcXVlX3B0cjxEcm1Db21wb3NpdGlvbj4gY29tcG9zaXRpb24pOwot ICBpbnQgQ29tcG9zaXRlKCk7Ci0gIHZvaWQgRHVtcChzdGQ6Om9zdHJpbmdzdHJlYW0gKm91dCkg Y29uc3Q7Ci0KLSBwcml2YXRlOgotICBEcm1Db21wb3NpdG9yKGNvbnN0IERybUNvbXBvc2l0b3Ig JikgPSBkZWxldGU7Ci0KLSAgRHJtUmVzb3VyY2VzICpkcm1fOwotICBzdGQ6OnVuaXF1ZV9wdHI8 UGxhbm5lcj4gcGxhbm5lcl87Ci0KLSAgdWludDY0X3QgZnJhbWVfbm9fOwotCi0gIC8vIG11dGFi bGUgZm9yIER1bXAoKSBwcm9wYWdhdGlvbgotICBtdXRhYmxlIHN0ZDo6bWFwPGludCwgRHJtRGlz cGxheUNvbXBvc2l0b3I+IGNvbXBvc2l0b3JfbWFwXzsKLX07Ci19Ci0KLSNlbmRpZiAgLy8gQU5E Uk9JRF9EUk1fQ09NUE9TSVRPUl9IXwpkaWZmIC0tZ2l0IGEvZHJtY29tcG9zaXRvcndvcmtlci5o IGIvZHJtY29tcG9zaXRvcndvcmtlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3 MzFiYzY1Li4wMDAwMDAwCi0tLSBhL2RybWNvbXBvc2l0b3J3b3JrZXIuaAorKysgL2Rldi9udWxs CkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQg T3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRo aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1h eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3 LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBk aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi IEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9u cyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfRFJNX0NPTVBPU0lU T1JfV09SS0VSX0hfCi0jZGVmaW5lIEFORFJPSURfRFJNX0NPTVBPU0lUT1JfV09SS0VSX0hfCi0K LSNpbmNsdWRlICJ3b3JrZXIuaCIKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBEcm1E aXNwbGF5Q29tcG9zaXRvcjsKLQotY2xhc3MgRHJtQ29tcG9zaXRvcldvcmtlciA6IHB1YmxpYyBX b3JrZXIgewotIHB1YmxpYzoKLSAgRHJtQ29tcG9zaXRvcldvcmtlcihEcm1EaXNwbGF5Q29tcG9z aXRvciAqY29tcG9zaXRvcik7Ci0gIH5Ecm1Db21wb3NpdG9yV29ya2VyKCkgb3ZlcnJpZGU7Ci0K LSAgaW50IEluaXQoKTsKLQotIHByb3RlY3RlZDoKLSAgdm9pZCBSb3V0aW5lKCkgb3ZlcnJpZGU7 Ci0KLSAgRHJtRGlzcGxheUNvbXBvc2l0b3IgKmNvbXBvc2l0b3JfOwotICBib29sIGRpZF9zcXVh c2hfYWxsXyA9IGZhbHNlOwotfTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcm1kaXNwbGF5 Y29tcG9zaXRpb24uY3BwIGIvZHJtZGlzcGxheWNvbXBvc2l0aW9uLmNwcAppbmRleCAwZjgwODRi Li42NmU2N2E0IDEwMDY0NAotLS0gYS9kcm1kaXNwbGF5Y29tcG9zaXRpb24uY3BwCisrKyBiL2Ry bWRpc3BsYXljb21wb3NpdGlvbi5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNkZWZpbmUgTE9HX1RB RyAiaHdjLWRybS1kaXNwbGF5LWNvbXBvc2l0aW9uIgogCiAjaW5jbHVkZSAiZHJtZGlzcGxheWNv bXBvc2l0aW9uLmgiCisjaW5jbHVkZSAiZHJtZGlzcGxheWNvbXBvc2l0b3IuaCIKICNpbmNsdWRl ICJkcm1jcnRjLmgiCiAjaW5jbHVkZSAiZHJtcGxhbmUuaCIKICNpbmNsdWRlICJkcm1yZXNvdXJj ZXMuaCIKZGlmZiAtLWdpdCBhL2RybWRpc3BsYXljb21wb3NpdGlvbi5oIGIvZHJtZGlzcGxheWNv bXBvc2l0aW9uLmgKaW5kZXggNDcwYmY3ZS4uOTE4MzkyNSAxMDA2NDQKLS0tIGEvZHJtZGlzcGxh eWNvbXBvc2l0aW9uLmgKKysrIGIvZHJtZGlzcGxheWNvbXBvc2l0aW9uLmgKQEAgLTQyLDYgKzQy LDE2IEBAIGVudW0gRHJtQ29tcG9zaXRpb25UeXBlIHsKICAgRFJNX0NPTVBPU0lUSU9OX1RZUEVf TU9ERVNFVCwKIH07CiAKK3N0cnVjdCBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAgewor ICBpbnQgZGlzcGxheTsKKyAgYm9vbCBnZW9tZXRyeV9jaGFuZ2VkID0gdHJ1ZTsKKyAgc3RkOjp2 ZWN0b3I8RHJtSHdjTGF5ZXI+IGxheWVyczsKKworICBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXll cnNNYXAoKSA9IGRlZmF1bHQ7CisgIERybUNvbXBvc2l0aW9uRGlzcGxheUxheWVyc01hcChEcm1D b21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAgJiZyaHMpID0KKyAgICAgIGRlZmF1bHQ7Cit9Owor CiBzdHJ1Y3QgRHJtQ29tcG9zaXRpb25SZWdpb24gewogICBEcm1Id2NSZWN0PGludD4gZnJhbWU7 CiAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gc291cmNlX2xheWVyczsKZGlmZiAtLWdpdCBhL2RybWRp c3BsYXljb21wb3NpdG9yLmNwcCBiL2RybWRpc3BsYXljb21wb3NpdG9yLmNwcAppbmRleCA4OTM2 ZDA4Li5hMDdkMzU4IDEwMDY0NAotLS0gYS9kcm1kaXNwbGF5Y29tcG9zaXRvci5jcHAKKysrIGIv ZHJtZGlzcGxheWNvbXBvc2l0b3IuY3BwCkBAIC0zNyw4ICszNyw2IEBACiAjaW5jbHVkZSAiZHJt cmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAiZ2x3b3JrZXIuaCIKIAotI2RlZmluZSBEUk1fRElTUExB WV9DT01QT1NJVE9SX01BWF9RVUVVRV9ERVBUSCAyCi0KIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAog dm9pZCBTcXVhc2hTdGF0ZTo6SW5pdChEcm1Id2NMYXllciAqbGF5ZXJzLCBzaXplX3QgbnVtX2xh eWVycykgewpAQCAtMTc2LDU4ICsxNzQsOSBAQCBzdGF0aWMgYm9vbCBVc2VzU3F1YXNoKGNvbnN0 IHN0ZDo6dmVjdG9yPERybUNvbXBvc2l0aW9uUGxhbmU+ICZjb21wX3BsYW5lcykgewogICB9KTsK IH0KIAotRHJtRGlzcGxheUNvbXBvc2l0b3I6OkZyYW1lV29ya2VyOjpGcmFtZVdvcmtlcihEcm1E aXNwbGF5Q29tcG9zaXRvciAqY29tcG9zaXRvcikKLSAgICA6IFdvcmtlcigiZnJhbWUtd29ya2Vy IiwgSEFMX1BSSU9SSVRZX1VSR0VOVF9ESVNQTEFZKSwKLSAgICAgIGNvbXBvc2l0b3JfKGNvbXBv c2l0b3IpIHsKLX0KLQotRHJtRGlzcGxheUNvbXBvc2l0b3I6OkZyYW1lV29ya2VyOjp+RnJhbWVX b3JrZXIoKSB7Ci19Ci0KLWludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6RnJhbWVXb3JrZXI6Oklu aXQoKSB7Ci0gIHJldHVybiBJbml0V29ya2VyKCk7Ci19Ci0KLXZvaWQgRHJtRGlzcGxheUNvbXBv c2l0b3I6OkZyYW1lV29ya2VyOjpRdWV1ZUZyYW1lKAotICAgIHN0ZDo6dW5pcXVlX3B0cjxEcm1E aXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0aW9uLCBpbnQgc3RhdHVzKSB7Ci0gIExvY2soKTsK LSAgRnJhbWVTdGF0ZSBmcmFtZTsKLSAgZnJhbWUuY29tcG9zaXRpb24gPSBzdGQ6Om1vdmUoY29t cG9zaXRpb24pOwotICBmcmFtZS5zdGF0dXMgPSBzdGF0dXM7Ci0gIGZyYW1lX3F1ZXVlXy5wdXNo KHN0ZDo6bW92ZShmcmFtZSkpOwotICBVbmxvY2soKTsKLSAgU2lnbmFsKCk7Ci19Ci0KLXZvaWQg RHJtRGlzcGxheUNvbXBvc2l0b3I6OkZyYW1lV29ya2VyOjpSb3V0aW5lKCkgewotICBpbnQgd2Fp dF9yZXQgPSAwOwotCi0gIExvY2soKTsKLSAgaWYgKGZyYW1lX3F1ZXVlXy5lbXB0eSgpKSB7Ci0g ICAgd2FpdF9yZXQgPSBXYWl0Rm9yU2lnbmFsT3JFeGl0TG9ja2VkKCk7Ci0gIH0KLQotICBGcmFt ZVN0YXRlIGZyYW1lOwotICBpZiAoIWZyYW1lX3F1ZXVlXy5lbXB0eSgpKSB7Ci0gICAgZnJhbWUg PSBzdGQ6Om1vdmUoZnJhbWVfcXVldWVfLmZyb250KCkpOwotICAgIGZyYW1lX3F1ZXVlXy5wb3Ao KTsKLSAgfQotICBVbmxvY2soKTsKLQotICBpZiAod2FpdF9yZXQgPT0gLUVJTlRSKSB7Ci0gICAg cmV0dXJuOwotICB9IGVsc2UgaWYgKHdhaXRfcmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byB3 YWl0IGZvciBzaWduYWwsICVkIiwgd2FpdF9yZXQpOwotICAgIHJldHVybjsKLSAgfQotICBjb21w b3NpdG9yXy0+QXBwbHlGcmFtZShzdGQ6Om1vdmUoZnJhbWUuY29tcG9zaXRpb24pLCBmcmFtZS5z dGF0dXMpOwotfQotCiBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6RHJtRGlzcGxheUNvbXBvc2l0b3Io KQogICAgIDogZHJtXyhOVUxMKSwKICAgICAgIGRpc3BsYXlfKC0xKSwKLSAgICAgIHdvcmtlcl8o dGhpcyksCi0gICAgICBmcmFtZV93b3JrZXJfKHRoaXMpLAogICAgICAgaW5pdGlhbGl6ZWRfKGZh bHNlKSwKICAgICAgIGFjdGl2ZV8oZmFsc2UpLAogICAgICAgdXNlX2h3X292ZXJsYXlzXyh0cnVl KSwKQEAgLTI0NSw5ICsxOTQsNiBAQCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6fkRybURpc3BsYXlD b21wb3NpdG9yKCkgewogICBpZiAoIWluaXRpYWxpemVkXykKICAgICByZXR1cm47CiAKLSAgd29y a2VyXy5FeGl0KCk7Ci0gIGZyYW1lX3dvcmtlcl8uRXhpdCgpOwotCiAgIGludCByZXQgPSBwdGhy ZWFkX211dGV4X2xvY2soJmxvY2tfKTsKICAgaWYgKHJldCkKICAgICBBTE9HRSgiRmFpbGVkIHRv IGFjcXVpcmUgY29tcG9zaXRvciBsb2NrICVkIiwgcmV0KTsKQEAgLTI1NywxMCArMjAzLDYgQEAg RHJtRGlzcGxheUNvbXBvc2l0b3I6On5Ecm1EaXNwbGF5Q29tcG9zaXRvcigpIHsKICAgaWYgKG1v ZGVfLm9sZF9ibG9iX2lkKQogICAgIGRybV8tPkRlc3Ryb3lQcm9wZXJ0eUJsb2IobW9kZV8ub2xk X2Jsb2JfaWQpOwogCi0gIHdoaWxlICghY29tcG9zaXRlX3F1ZXVlXy5lbXB0eSgpKSB7Ci0gICAg Y29tcG9zaXRlX3F1ZXVlXy5mcm9udCgpLnJlc2V0KCk7Ci0gICAgY29tcG9zaXRlX3F1ZXVlXy5w b3AoKTsKLSAgfQogICBhY3RpdmVfY29tcG9zaXRpb25fLnJlc2V0KCk7CiAKICAgcmV0ID0gcHRo cmVhZF9tdXRleF91bmxvY2soJmxvY2tfKTsKQEAgLTI3OSwxOCArMjIxLDYgQEAgaW50IERybURp c3BsYXlDb21wb3NpdG9yOjpJbml0KERybVJlc291cmNlcyAqZHJtLCBpbnQgZGlzcGxheSkgewog ICAgIEFMT0dFKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcm0gY29tcG9zaXRvciBsb2NrICVkXG4i LCByZXQpOwogICAgIHJldHVybiByZXQ7CiAgIH0KLSAgcmV0ID0gd29ya2VyXy5Jbml0KCk7Ci0g IGlmIChyZXQpIHsKLSAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmxvY2tfKTsKLSAgICBBTE9H RSgiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9zaXRvciB3b3JrZXIgJWRcbiIsIHJldCk7Ci0g ICAgcmV0dXJuIHJldDsKLSAgfQotICByZXQgPSBmcmFtZV93b3JrZXJfLkluaXQoKTsKLSAgaWYg KHJldCkgewotICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbG9ja18pOwotICAgIEFMT0dFKCJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZSB3b3JrZXIgJWRcbiIsIHJldCk7Ci0gICAgcmV0dXJu IHJldDsKLSAgfQogCiAgIGluaXRpYWxpemVkXyA9IHRydWU7CiAgIHJldHVybiAwOwpAQCAtMzAx LDU1ICsyMzEsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBEcm1E aXNwbGF5Q29tcG9zaXRvcjo6Q3JlYXRlQ29tcG9zaXRpb24oKQogICByZXR1cm4gc3RkOjp1bmlx dWVfcHRyPERybURpc3BsYXlDb21wb3NpdGlvbj4obmV3IERybURpc3BsYXlDb21wb3NpdGlvbigp KTsKIH0KIAotaW50IERybURpc3BsYXlDb21wb3NpdG9yOjpRdWV1ZUNvbXBvc2l0aW9uKAotICAg IHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0aW9uKSB7Ci0g IHN3aXRjaCAoY29tcG9zaXRpb24tPnR5cGUoKSkgewotICAgIGNhc2UgRFJNX0NPTVBPU0lUSU9O X1RZUEVfRlJBTUU6Ci0gICAgICBpZiAoIWFjdGl2ZV8pCi0gICAgICAgIHJldHVybiAtRU5PREVW OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEUk1fQ09NUE9TSVRJT05fVFlQRV9EUE1TOgotICAg ICAgLyoKLSAgICAgICAqIFVwZGF0ZSB0aGUgc3RhdGUgYXMgc29vbiBhcyB3ZSBnZXQgaXQgc28g d2UgY2FuIHN0YXJ0L3N0b3AgcXVldWluZwotICAgICAgICogZnJhbWVzIGFzYXAuCi0gICAgICAg Ki8KLSAgICAgIGFjdGl2ZV8gPSAoY29tcG9zaXRpb24tPmRwbXNfbW9kZSgpID09IERSTV9NT0RF X0RQTVNfT04pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEUk1fQ09NUE9TSVRJT05fVFlQRV9N T0RFU0VUOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEUk1fQ09NUE9TSVRJT05fVFlQRV9FTVBU WToKLSAgICAgIHJldHVybiAwOwotICAgIGRlZmF1bHQ6Ci0gICAgICBBTE9HRSgiVW5rbm93biBj b21wb3NpdGlvbiB0eXBlICVkLyVkIiwgY29tcG9zaXRpb24tPnR5cGUoKSwgZGlzcGxheV8pOwot ICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0gIH0KLQotICBpbnQgcmV0ID0gcHRocmVhZF9tdXRleF9s b2NrKCZsb2NrXyk7Ci0gIGlmIChyZXQpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGFjcXVpcmUg Y29tcG9zaXRvciBsb2NrICVkIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLy8g QmxvY2sgdGhlIHF1ZXVlIGlmIGl0IGdldHMgdG9vIGxhcmdlLiBPdGhlcndpc2UsIFN1cmZhY2VG bGluZ2VyIHdpbGwgc3RhcnQKLSAgLy8gdG8gZWF0IG91ciBidWZmZXIgaGFuZGxlcyB3aGVuIHdl IGdldCBhYm91dCAxIHNlY29uZCBiZWhpbmQuCi0gIHdoaWxlIChjb21wb3NpdGVfcXVldWVfLnNp emUoKSA+PSBEUk1fRElTUExBWV9DT01QT1NJVE9SX01BWF9RVUVVRV9ERVBUSCkgewotICAgIHB0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrXyk7Ci0gICAgc2NoZWRfeWllbGQoKTsKLSAgICBwdGhy ZWFkX211dGV4X2xvY2soJmxvY2tfKTsKLSAgfQotCi0gIGNvbXBvc2l0ZV9xdWV1ZV8ucHVzaChz dGQ6Om1vdmUoY29tcG9zaXRpb24pKTsKLQotICByZXQgPSBwdGhyZWFkX211dGV4X3VubG9jaygm bG9ja18pOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byByZWxlYXNlIGNvbXBv c2l0b3IgbG9jayAlZCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdvcmtlcl8u U2lnbmFsKCk7Ci0gIHJldHVybiAwOwotfQotCiBzdGQ6OnR1cGxlPHVpbnQzMl90LCB1aW50MzJf dCwgaW50PgogRHJtRGlzcGxheUNvbXBvc2l0b3I6OkdldEFjdGl2ZU1vZGVSZXNvbHV0aW9uKCkg ewogICBEcm1Db25uZWN0b3IgKmNvbm5lY3RvciA9IGRybV8tPkdldENvbm5lY3RvckZvckRpc3Bs YXkoZGlzcGxheV8pOwpAQCAtNTE0LDYgKzM5NSwxNSBAQCBpbnQgRHJtRGlzcGxheUNvbXBvc2l0 b3I6OlByZXBhcmVGcmFtZShEcm1EaXNwbGF5Q29tcG9zaXRpb24gKmRpc3BsYXlfY29tcCkgewog ICBzdGQ6OnZlY3RvcjxEcm1Db21wb3NpdGlvblJlZ2lvbj4gJnByZV9jb21wX3JlZ2lvbnMgPQog ICAgICAgZGlzcGxheV9jb21wLT5wcmVfY29tcF9yZWdpb25zKCk7CiAKKyAgaWYgKCFwcmVfY29t cG9zaXRvcl8pIHsKKyAgICBwcmVfY29tcG9zaXRvcl8ucmVzZXQobmV3IEdMV29ya2VyQ29tcG9z aXRvcigpKTsKKyAgICBpbnQgcmV0ID0gcHJlX2NvbXBvc2l0b3JfLT5Jbml0KCk7CisgICAgaWYg KHJldCkgeworICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0aWFsaXplIE9wZW5HTCBjb21wb3Np dG9yICVkIiwgcmV0KTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICB9CisKICAgaW50IHNx dWFzaF9sYXllcl9pbmRleCA9IC0xOwogICBpZiAoc3F1YXNoX3JlZ2lvbnMuc2l6ZSgpID4gMCkg ewogICAgIHNxdWFzaF9mcmFtZWJ1ZmZlcl9pbmRleF8gPSAoc3F1YXNoX2ZyYW1lYnVmZmVyX2lu ZGV4XyArIDEpICUgMjsKQEAgLTkxOCw0MSArODA4LDkgQEAgdm9pZCBEcm1EaXNwbGF5Q29tcG9z aXRvcjo6QXBwbHlGcmFtZSgKICAgICBBTE9HRSgiRmFpbGVkIHRvIHJlbGVhc2UgbG9jayBmb3Ig YWN0aXZlX2NvbXBvc2l0aW9uIHN3YXAiKTsKIH0KIAotaW50IERybURpc3BsYXlDb21wb3NpdG9y OjpDb21wb3NpdGUoKSB7Ci0gIEFUUkFDRV9DQUxMKCk7Ci0KLSAgaWYgKCFwcmVfY29tcG9zaXRv cl8pIHsKLSAgICBwcmVfY29tcG9zaXRvcl8ucmVzZXQobmV3IEdMV29ya2VyQ29tcG9zaXRvcigp KTsKLSAgICBpbnQgcmV0ID0gcHJlX2NvbXBvc2l0b3JfLT5Jbml0KCk7Ci0gICAgaWYgKHJldCkg ewotICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0aWFsaXplIE9wZW5HTCBjb21wb3NpdG9yICVk IiwgcmV0KTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0KLSAgaW50IHJldCA9IHB0 aHJlYWRfbXV0ZXhfbG9jaygmbG9ja18pOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxl ZCB0byBhY3F1aXJlIGNvbXBvc2l0b3IgbG9jayAlZCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsK LSAgfQotICBpZiAoY29tcG9zaXRlX3F1ZXVlXy5lbXB0eSgpKSB7Ci0gICAgcmV0ID0gcHRocmVh ZF9tdXRleF91bmxvY2soJmxvY2tfKTsKLSAgICBpZiAocmV0KQotICAgICAgQUxPR0UoIkZhaWxl ZCB0byByZWxlYXNlIGNvbXBvc2l0b3IgbG9jayAlZCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsK LSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0 aW9uKAotICAgICAgc3RkOjptb3ZlKGNvbXBvc2l0ZV9xdWV1ZV8uZnJvbnQoKSkpOwotCi0gIGNv bXBvc2l0ZV9xdWV1ZV8ucG9wKCk7Ci0KLSAgcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJmxv Y2tfKTsKLSAgaWYgKHJldCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVsZWFzZSBjb21wb3Np dG9yIGxvY2sgJWQiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQoraW50IERybURpc3Bs YXlDb21wb3NpdG9yOjpBcHBseUNvbXBvc2l0aW9uKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxEcm1E aXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0aW9uKSB7CisgIGludCByZXQgPSAwOwogICBzd2l0 Y2ggKGNvbXBvc2l0aW9uLT50eXBlKCkpIHsKICAgICBjYXNlIERSTV9DT01QT1NJVElPTl9UWVBF X0ZSQU1FOgogICAgICAgcmV0ID0gUHJlcGFyZUZyYW1lKGNvbXBvc2l0aW9uLmdldCgpKTsKQEAg LTk3MSw3ICs4MjksNyBAQCBpbnQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkNvbXBvc2l0ZSgpIHsK ICAgICAgIH0KIAogICAgICAgLy8gSWYgdXNlX2h3X292ZXJsYXlzXyBpcyBmYWxzZSwgd2UgY2Fu J3QgdXNlIGhhcmR3YXJlIHRvIGNvbXBvc2l0ZSB0aGUKLSAgICAgIC8vIGZyYW1lLiBTbyBzcXVh c2ggYWxsIGxheWVycyBpbnRvIGEgc2luZ2xlIGNvbXBvc2l0aW9uIGFuZCBxdWV1ZSB0aGF0Cisg ICAgICAvLyBmcmFtZS4gU28gc3F1YXNoIGFsbCBsYXllcnMgaW50byBhIHNpbmdsZSBjb21wb3Np dGlvbiBhbmQgYXBwbHkgdGhhdAogICAgICAgLy8gaW5zdGVhZC4KICAgICAgIGlmICghdXNlX2h3 X292ZXJsYXlzXykgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0 aW9uPiBzcXVhc2hlZCA9IENyZWF0ZUNvbXBvc2l0aW9uKCk7CkBAIC05ODcsOSArODQ1LDEwIEBA IGludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6Q29tcG9zaXRlKCkgewogICAgICAgICAgIHJldHVy biByZXQ7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGZyYW1lX3dvcmtlcl8uUXVldWVGcmFt ZShzdGQ6Om1vdmUoY29tcG9zaXRpb24pLCByZXQpOworICAgICAgQXBwbHlGcmFtZShzdGQ6Om1v dmUoY29tcG9zaXRpb24pLCByZXQpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBEUk1fQ09NUE9T SVRJT05fVFlQRV9EUE1TOgorICAgICAgYWN0aXZlXyA9IChjb21wb3NpdGlvbi0+ZHBtc19tb2Rl KCkgPT0gRFJNX01PREVfRFBNU19PTik7CiAgICAgICByZXQgPSBBcHBseURwbXMoY29tcG9zaXRp b24uZ2V0KCkpOwogICAgICAgaWYgKHJldCkKICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBhcHBs eSBkcG1zIGZvciBkaXNwbGF5ICVkIiwgZGlzcGxheV8pOwpAQCAtMTAxMywyNCArODcyLDYgQEAg aW50IERybURpc3BsYXlDb21wb3NpdG9yOjpDb21wb3NpdGUoKSB7CiAgIHJldHVybiByZXQ7CiB9 CiAKLWJvb2wgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkhhdmVRdWV1ZWRDb21wb3NpdGVzKCkgY29u c3QgewotICBpbnQgcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZsb2NrXyk7Ci0gIGlmIChyZXQp IHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGFjcXVpcmUgY29tcG9zaXRvciBsb2NrICVkIiwgcmV0 KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBib29sIGVtcHR5X3JldCA9ICFjb21wb3Np dGVfcXVldWVfLmVtcHR5KCk7Ci0KLSAgcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2tf KTsKLSAgaWYgKHJldCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVsZWFzZSBjb21wb3NpdG9y IGxvY2sgJWQiLCByZXQpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiBlbXB0 eV9yZXQ7Ci19Ci0KIGludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6U3F1YXNoQWxsKCkgewogICBB dXRvTG9jayBsb2NrKCZsb2NrXywgImNvbXBvc2l0b3IiKTsKICAgaW50IHJldCA9IGxvY2suTG9j aygpOwpkaWZmIC0tZ2l0IGEvZHJtZGlzcGxheWNvbXBvc2l0b3IuaCBiL2RybWRpc3BsYXljb21w b3NpdG9yLmgKaW5kZXggOTQ4N2NhYy4uZjE5NjVmYiAxMDA2NDQKLS0tIGEvZHJtZGlzcGxheWNv bXBvc2l0b3IuaAorKysgYi9kcm1kaXNwbGF5Y29tcG9zaXRvci5oCkBAIC0xOCwxNCArMTgsMTIg QEAKICNkZWZpbmUgQU5EUk9JRF9EUk1fRElTUExBWV9DT01QT1NJVE9SX0hfCiAKICNpbmNsdWRl ICJkcm1od2NvbXBvc2VyLmgiCi0jaW5jbHVkZSAiZHJtY29tcG9zaXRpb24uaCIKLSNpbmNsdWRl ICJkcm1jb21wb3NpdG9yd29ya2VyLmgiCisjaW5jbHVkZSAiZHJtZGlzcGxheWNvbXBvc2l0aW9u LmgiCiAjaW5jbHVkZSAiZHJtZnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJzZXBhcmF0ZV9yZWN0 cy5oIgogCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl IDxxdWV1ZT4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHR1cGxlPgogCkBAIC04OSw0 MiArODcsMTggQEAgY2xhc3MgRHJtRGlzcGxheUNvbXBvc2l0b3IgewogICBpbnQgSW5pdChEcm1S ZXNvdXJjZXMgKmRybSwgaW50IGRpc3BsYXkpOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNw bGF5Q29tcG9zaXRpb24+IENyZWF0ZUNvbXBvc2l0aW9uKCkgY29uc3Q7Ci0gIGludCBRdWV1ZUNv bXBvc2l0aW9uKHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0 aW9uKTsKKyAgaW50IEFwcGx5Q29tcG9zaXRpb24oc3RkOjp1bmlxdWVfcHRyPERybURpc3BsYXlD b21wb3NpdGlvbj4gY29tcG9zaXRpb24pOwogICBpbnQgQ29tcG9zaXRlKCk7CiAgIGludCBTcXVh c2hBbGwoKTsKICAgdm9pZCBEdW1wKHN0ZDo6b3N0cmluZ3N0cmVhbSAqb3V0KSBjb25zdDsKIAog ICBzdGQ6OnR1cGxlPHVpbnQzMl90LCB1aW50MzJfdCwgaW50PiBHZXRBY3RpdmVNb2RlUmVzb2x1 dGlvbigpOwogCi0gIGJvb2wgSGF2ZVF1ZXVlZENvbXBvc2l0ZXMoKSBjb25zdDsKLQogICBTcXVh c2hTdGF0ZSAqc3F1YXNoX3N0YXRlKCkgewogICAgIHJldHVybiAmc3F1YXNoX3N0YXRlXzsKICAg fQogCiAgcHJpdmF0ZToKLSAgc3RydWN0IEZyYW1lU3RhdGUgewotICAgIHN0ZDo6dW5pcXVlX3B0 cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0aW9uOwotICAgIGludCBzdGF0dXMgPSAw OwotICB9OwotCi0gIGNsYXNzIEZyYW1lV29ya2VyIDogcHVibGljIFdvcmtlciB7Ci0gICBwdWJs aWM6Ci0gICAgRnJhbWVXb3JrZXIoRHJtRGlzcGxheUNvbXBvc2l0b3IgKmNvbXBvc2l0b3IpOwot ICAgIH5GcmFtZVdvcmtlcigpIG92ZXJyaWRlOwotCi0gICAgaW50IEluaXQoKTsKLSAgICB2b2lk IFF1ZXVlRnJhbWUoc3RkOjp1bmlxdWVfcHRyPERybURpc3BsYXlDb21wb3NpdGlvbj4gY29tcG9z aXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMpOwotCi0gICBwcm90ZWN0ZWQ6 Ci0gICAgdm9pZCBSb3V0aW5lKCkgb3ZlcnJpZGU7Ci0KLSAgIHByaXZhdGU6Ci0gICAgRHJtRGlz cGxheUNvbXBvc2l0b3IgKmNvbXBvc2l0b3JfOwotICAgIHN0ZDo6cXVldWU8RnJhbWVTdGF0ZT4g ZnJhbWVfcXVldWVfOwotICB9OwotCiAgIHN0cnVjdCBNb2RlU3RhdGUgewogICAgIGJvb2wgbmVl ZHNfbW9kZXNldCA9IGZhbHNlOwogICAgIERybU1vZGUgbW9kZTsKQEAgLTE1OCwxMCArMTMyLDYg QEAgY2xhc3MgRHJtRGlzcGxheUNvbXBvc2l0b3IgewogICBEcm1SZXNvdXJjZXMgKmRybV87CiAg IGludCBkaXNwbGF5XzsKIAotICBEcm1Db21wb3NpdG9yV29ya2VyIHdvcmtlcl87Ci0gIEZyYW1l V29ya2VyIGZyYW1lX3dvcmtlcl87Ci0KLSAgc3RkOjpxdWV1ZTxzdGQ6OnVuaXF1ZV9wdHI8RHJt RGlzcGxheUNvbXBvc2l0aW9uPj4gY29tcG9zaXRlX3F1ZXVlXzsKICAgc3RkOjp1bmlxdWVfcHRy PERybURpc3BsYXlDb21wb3NpdGlvbj4gYWN0aXZlX2NvbXBvc2l0aW9uXzsKIAogICBib29sIGlu aXRpYWxpemVkXzsKQEAgLTE3OCw3ICsxNDgsNyBAQCBjbGFzcyBEcm1EaXNwbGF5Q29tcG9zaXRv ciB7CiAgIGludCBzcXVhc2hfZnJhbWVidWZmZXJfaW5kZXhfOwogICBEcm1GcmFtZWJ1ZmZlciBz cXVhc2hfZnJhbWVidWZmZXJzX1syXTsKIAotICAvLyBtdXRhYmxlIHNpbmNlIHdlIG5lZWQgdG8g YWNxdWlyZSBpbiBIYXZlUXVldWVkQ29tcG9zaXRlcworICAvLyBtdXRhYmxlIHNpbmNlIHdlIG5l ZWQgdG8gYWNxdWlyZSBpbiBEdW1wKCkKICAgbXV0YWJsZSBwdGhyZWFkX211dGV4X3QgbG9ja187 CiAKICAgLy8gU3RhdGUgdHJhY2tpbmcgcHJvZ3Jlc3Mgc2luY2Ugb3VyIGxhc3QgRHVtcCgpLiBU aGVzZSBhcmUgbXV0YWJsZSBzaW5jZQpkaWZmIC0tZ2l0IGEvZHJtZXZlbnRsaXN0ZW5lci5jcHAg Yi9kcm1ldmVudGxpc3RlbmVyLmNwcAppbmRleCAwNTE0YWE2Li45ODRkMWRkIDEwMDY0NAotLS0g YS9kcm1ldmVudGxpc3RlbmVyLmNwcAorKysgYi9kcm1ldmVudGxpc3RlbmVyLmNwcApAQCAtMjAs MTAgKzIwLDEzIEBACiAjaW5jbHVkZSAiZHJtcmVzb3VyY2VzLmgiCiAKICNpbmNsdWRlIDxhc3Nl cnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNp bmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAKICNpbmNsdWRlIDxjdXRpbHMvbG9nLmg+CisjaW5jbHVk ZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxoYXJkd2FyZS9od2NvbXBvc2VyLmg+ CiAjaW5jbHVkZSA8eGY4NmRybS5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CmRpZmYgLS1naXQg YS9kcm1od2N0d28uY3BwIGIvZHJtaHdjdHdvLmNwcAppbmRleCAwMGJlZGQwLi44OTM5OWJmIDEw MDY0NAotLS0gYS9kcm1od2N0d28uY3BwCisrKyBiL2RybWh3Y3R3by5jcHAKQEAgLTU1OSw3ICs1 NTksNyBAQCBIV0MyOjpFcnJvciBEcm1Id2NUd286Okh3Y0Rpc3BsYXk6OlByZXNlbnREaXNwbGF5 KGludDMyX3QgKnJldGlyZV9mZW5jZSkgewogCiAgIEFkZEZlbmNlVG9SZXRpcmVGZW5jZShjb21w b3NpdGlvbi0+dGFrZV9vdXRfZmVuY2UoKSk7CiAKLSAgcmV0ID0gY29tcG9zaXRvcl8uUXVldWVD b21wb3NpdGlvbihzdGQ6Om1vdmUoY29tcG9zaXRpb24pKTsKKyAgcmV0ID0gY29tcG9zaXRvcl8u QXBwbHlDb21wb3NpdGlvbihzdGQ6Om1vdmUoY29tcG9zaXRpb24pKTsKICAgaWYgKHJldCkgewog ICAgIEFMT0dFKCJGYWlsZWQgdG8gYXBwbHkgdGhlIGZyYW1lIGNvbXBvc2l0aW9uIHJldD0lZCIs IHJldCk7CiAgICAgcmV0dXJuIEhXQzI6OkVycm9yOjpCYWRQYXJhbWV0ZXI7CkBAIC01ODgsNyAr NTg4LDcgQEAgSFdDMjo6RXJyb3IgRHJtSHdjVHdvOjpId2NEaXNwbGF5OjpTZXRBY3RpdmVDb25m aWcoaHdjMl9jb25maWdfdCBjb25maWcpIHsKICAgICAgIGNvbXBvc2l0b3JfLkNyZWF0ZUNvbXBv c2l0aW9uKCk7CiAgIGNvbXBvc2l0aW9uLT5Jbml0KGRybV8sIGNydGNfLCBpbXBvcnRlcl8uZ2V0 KCksIHBsYW5uZXJfLmdldCgpLCBmcmFtZV9ub18pOwogICBpbnQgcmV0ID0gY29tcG9zaXRpb24t PlNldERpc3BsYXlNb2RlKCptb2RlKTsKLSAgcmV0ID0gY29tcG9zaXRvcl8uUXVldWVDb21wb3Np dGlvbihzdGQ6Om1vdmUoY29tcG9zaXRpb24pKTsKKyAgcmV0ID0gY29tcG9zaXRvcl8uQXBwbHlD b21wb3NpdGlvbihzdGQ6Om1vdmUoY29tcG9zaXRpb24pKTsKICAgaWYgKHJldCkgewogICAgIEFM T0dFKCJGYWlsZWQgdG8gcXVldWUgZHBtcyBjb21wb3NpdGlvbiBvbiAlZCIsIHJldCk7CiAgICAg cmV0dXJuIEhXQzI6OkVycm9yOjpCYWRDb25maWc7CkBAIC02NjgsNyArNjY4LDcgQEAgSFdDMjo6 RXJyb3IgRHJtSHdjVHdvOjpId2NEaXNwbGF5OjpTZXRQb3dlck1vZGUoaW50MzJfdCBtb2RlX2lu KSB7CiAgICAgICBjb21wb3NpdG9yXy5DcmVhdGVDb21wb3NpdGlvbigpOwogICBjb21wb3NpdGlv bi0+SW5pdChkcm1fLCBjcnRjXywgaW1wb3J0ZXJfLmdldCgpLCBwbGFubmVyXy5nZXQoKSwgZnJh bWVfbm9fKTsKICAgY29tcG9zaXRpb24tPlNldERwbXNNb2RlKGRwbXNfdmFsdWUpOwotICBpbnQg cmV0ID0gY29tcG9zaXRvcl8uUXVldWVDb21wb3NpdGlvbihzdGQ6Om1vdmUoY29tcG9zaXRpb24p KTsKKyAgaW50IHJldCA9IGNvbXBvc2l0b3JfLkFwcGx5Q29tcG9zaXRpb24oc3RkOjptb3ZlKGNv bXBvc2l0aW9uKSk7CiAgIGlmIChyZXQpIHsKICAgICBBTE9HRSgiRmFpbGVkIHRvIGFwcGx5IHRo ZSBkcG1zIGNvbXBvc2l0aW9uIHJldD0lZCIsIHJldCk7CiAgICAgcmV0dXJuIEhXQzI6OkVycm9y OjpCYWRQYXJhbWV0ZXI7CmRpZmYgLS1naXQgYS9kcm1yZXNvdXJjZXMuY3BwIGIvZHJtcmVzb3Vy Y2VzLmNwcAppbmRleCBlYTIzY2NlLi42N2E4NTNjIDEwMDY0NAotLS0gYS9kcm1yZXNvdXJjZXMu Y3BwCisrKyBiL2RybXJlc291cmNlcy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl IGFuZHJvaWQgewogCi1Ecm1SZXNvdXJjZXM6OkRybVJlc291cmNlcygpIDogY29tcG9zaXRvcl8o dGhpcyksIGV2ZW50X2xpc3RlbmVyXyh0aGlzKSB7CitEcm1SZXNvdXJjZXM6OkRybVJlc291cmNl cygpIDogZXZlbnRfbGlzdGVuZXJfKHRoaXMpIHsKIH0KIAogRHJtUmVzb3VyY2VzOjp+RHJtUmVz b3VyY2VzKCkgewpAQCAtMjAxLDEwICsyMDEsNiBAQCBpbnQgRHJtUmVzb3VyY2VzOjpJbml0KCkg ewogICBpZiAocmV0KQogICAgIHJldHVybiByZXQ7CiAKLSAgcmV0ID0gY29tcG9zaXRvcl8uSW5p dCgpOwotICBpZiAocmV0KQotICAgIHJldHVybiByZXQ7Ci0KICAgcmV0ID0gZXZlbnRfbGlzdGVu ZXJfLkluaXQoKTsKICAgaWYgKHJldCkgewogICAgIEFMT0dFKCJDYW4ndCBpbml0aWFsaXplIGV2 ZW50IGxpc3RlbmVyICVkIiwgcmV0KTsKQEAgLTMzNyw1NCArMzMzLDYgQEAgaW50IERybVJlc291 cmNlczo6RGVzdHJveVByb3BlcnR5QmxvYih1aW50MzJfdCBibG9iX2lkKSB7CiAgIHJldHVybiAw OwogfQogCi1pbnQgRHJtUmVzb3VyY2VzOjpTZXREaXNwbGF5QWN0aXZlTW9kZShpbnQgZGlzcGxh eSwgY29uc3QgRHJtTW9kZSAmbW9kZSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8RHJtQ29tcG9zaXRp b24+IGNvbXAoY29tcG9zaXRvcl8uQ3JlYXRlQ29tcG9zaXRpb24oTlVMTCkpOwotICBpZiAoIWNv bXApIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGNyZWF0ZSBjb21wb3NpdGlvbiBmb3IgZHBtcyBv biAlZCIsIGRpc3BsYXkpOwotICAgIHJldHVybiAtRU5PTUVNOwotICB9Ci0gIGludCByZXQgPSBj b21wLT5TZXREaXNwbGF5TW9kZShkaXNwbGF5LCBtb2RlKTsKLSAgaWYgKHJldCkgewotICAgIEFM T0dFKCJGYWlsZWQgdG8gYWRkIG1vZGUgdG8gY29tcG9zaXRpb24gb24gJWQgJWQiLCBkaXNwbGF5 LCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLSAgcmV0ID0gY29tcG9zaXRvcl8uUXVldWVD b21wb3NpdGlvbihzdGQ6Om1vdmUoY29tcCkpOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZh aWxlZCB0byBxdWV1ZSBkcG1zIGNvbXBvc2l0aW9uIG9uICVkICVkIiwgZGlzcGxheSwgcmV0KTsK LSAgICByZXR1cm4gcmV0OwotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgRHJtUmVzb3VyY2Vz OjpTZXREcG1zTW9kZShpbnQgZGlzcGxheSwgdWludDY0X3QgbW9kZSkgewotICBpZiAobW9kZSAh PSBEUk1fTU9ERV9EUE1TX09OICYmIG1vZGUgIT0gRFJNX01PREVfRFBNU19PRkYpIHsKLSAgICBB TE9HRSgiSW52YWxpZCBkcG1zIG1vZGUgJSIgUFJJdTY0LCBtb2RlKTsKLSAgICByZXR1cm4gLUVJ TlZBTDsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxEcm1Db21wb3NpdGlvbj4gY29tcChjb21w b3NpdG9yXy5DcmVhdGVDb21wb3NpdGlvbihOVUxMKSk7Ci0gIGlmICghY29tcCkgewotICAgIEFM T0dFKCJGYWlsZWQgdG8gY3JlYXRlIGNvbXBvc2l0aW9uIGZvciBkcG1zIG9uICVkIiwgZGlzcGxh eSk7Ci0gICAgcmV0dXJuIC1FTk9NRU07Ci0gIH0KLSAgaW50IHJldCA9IGNvbXAtPlNldERwbXNN b2RlKGRpc3BsYXksIG1vZGUpOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBh ZGQgZHBtcyAlIiBQUkl1NjQgIiB0byBjb21wb3NpdGlvbiBvbiAlZCAlZCIsIG1vZGUsCi0gICAg ICAgICAgZGlzcGxheSwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0gIHJldCA9IGNvbXBv c2l0b3JfLlF1ZXVlQ29tcG9zaXRpb24oc3RkOjptb3ZlKGNvbXApKTsKLSAgaWYgKHJldCkgewot ICAgIEFMT0dFKCJGYWlsZWQgdG8gcXVldWUgZHBtcyBjb21wb3NpdGlvbiBvbiAlZCAlZCIsIGRp c3BsYXksIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotRHJt Q29tcG9zaXRvciAqRHJtUmVzb3VyY2VzOjpjb21wb3NpdG9yKCkgewotICByZXR1cm4gJmNvbXBv c2l0b3JfOwotfQotCiBEcm1FdmVudExpc3RlbmVyICpEcm1SZXNvdXJjZXM6OmV2ZW50X2xpc3Rl bmVyKCkgewogICByZXR1cm4gJmV2ZW50X2xpc3RlbmVyXzsKIH0KZGlmZiAtLWdpdCBhL2RybXJl c291cmNlcy5oIGIvZHJtcmVzb3VyY2VzLmgKaW5kZXggNWNjYTExYi4uNGNjYTQ4YyAxMDA2NDQK LS0tIGEvZHJtcmVzb3VyY2VzLmgKKysrIGIvZHJtcmVzb3VyY2VzLmgKQEAgLTE3LDcgKzE3LDYg QEAKICNpZm5kZWYgQU5EUk9JRF9EUk1fSF8KICNkZWZpbmUgQU5EUk9JRF9EUk1fSF8KIAotI2lu Y2x1ZGUgImRybWNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJkcm1jb25uZWN0b3IuaCIKICNpbmNs dWRlICJkcm1jcnRjLmgiCiAjaW5jbHVkZSAiZHJtZW5jb2Rlci5oIgpAQCAtNTgsNyArNTcsNiBA QCBjbGFzcyBEcm1SZXNvdXJjZXMgewogICBEcm1Db25uZWN0b3IgKkdldENvbm5lY3RvckZvckRp c3BsYXkoaW50IGRpc3BsYXkpIGNvbnN0OwogICBEcm1DcnRjICpHZXRDcnRjRm9yRGlzcGxheShp bnQgZGlzcGxheSkgY29uc3Q7CiAgIERybVBsYW5lICpHZXRQbGFuZSh1aW50MzJfdCBpZCkgY29u c3Q7Ci0gIERybUNvbXBvc2l0b3IgKmNvbXBvc2l0b3IoKTsKICAgRHJtRXZlbnRMaXN0ZW5lciAq ZXZlbnRfbGlzdGVuZXIoKTsKIAogICBpbnQgR2V0UGxhbmVQcm9wZXJ0eShjb25zdCBEcm1QbGFu ZSAmcGxhbmUsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSwKQEAgLTcwLDggKzY4LDYgQEAgY2xhc3Mg RHJtUmVzb3VyY2VzIHsKIAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RHJt Q3J0Yz4+ICZjcnRjcygpIGNvbnN0OwogICB1aW50MzJfdCBuZXh0X21vZGVfaWQoKTsKLSAgaW50 IFNldERpc3BsYXlBY3RpdmVNb2RlKGludCBkaXNwbGF5LCBjb25zdCBEcm1Nb2RlICZtb2RlKTsK LSAgaW50IFNldERwbXNNb2RlKGludCBkaXNwbGF5LCB1aW50NjRfdCBtb2RlKTsKIAogICBpbnQg Q3JlYXRlUHJvcGVydHlCbG9iKHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsIHVpbnQzMl90ICpi bG9iX2lkKTsKICAgaW50IERlc3Ryb3lQcm9wZXJ0eUJsb2IodWludDMyX3QgYmxvYl9pZCk7CkBA IC05MCw3ICs4Niw2IEBAIGNsYXNzIERybVJlc291cmNlcyB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6 dW5pcXVlX3B0cjxEcm1FbmNvZGVyPj4gZW5jb2RlcnNfOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnVu aXF1ZV9wdHI8RHJtQ3J0Yz4+IGNydGNzXzsKICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRy PERybVBsYW5lPj4gcGxhbmVzXzsKLSAgRHJtQ29tcG9zaXRvciBjb21wb3NpdG9yXzsKICAgRHJt RXZlbnRMaXN0ZW5lciBldmVudF9saXN0ZW5lcl87CiAKICAgc3RkOjpwYWlyPHVpbnQzMl90LCB1 aW50MzJfdD4gbWluX3Jlc29sdXRpb25fOwpkaWZmIC0tZ2l0IGEvZ2x3b3JrZXIuY3BwIGIvZ2x3 b3JrZXIuY3BwCmluZGV4IGUxMjk5NWUuLmU5MDU3NmEgMTAwNjQ0Ci0tLSBhL2dsd29ya2VyLmNw cAorKysgYi9nbHdvcmtlci5jcHAKQEAgLTE0Myw2ICsxNDMsMzggQEAgc3RhdGljIGJvb2wgSGFz RXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmV4dGVuc2lvbiwgY29uc3QgY2hhciAqZXh0ZW5zaW9ucykg ewogICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBHTFdvcmtlckNvbXBvc2l0b3I6OkJlZ2luQ29u dGV4dCgpIHsKKyAgcHJpdmF0ZV8uc2F2ZWRfZWdsX2Rpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlz cGxheSgpOworICBwcml2YXRlXy5zYXZlZF9lZ2xfY3R4ID0gZWdsR2V0Q3VycmVudENvbnRleHQo KTsKKworICBpZiAocHJpdmF0ZV8uc2F2ZWRfZWdsX2Rpc3BsYXkgIT0gZWdsX2Rpc3BsYXlfIHx8 CisgICAgICBwcml2YXRlXy5zYXZlZF9lZ2xfY3R4ICE9IGVnbF9jdHhfKSB7CisgICAgcHJpdmF0 ZV8uc2F2ZWRfZWdsX3JlYWQgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfUkVBRCk7CisgICAg cHJpdmF0ZV8uc2F2ZWRfZWdsX2RyYXcgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVyk7 CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIWVnbE1ha2VDdXJyZW50 KGVnbF9kaXNwbGF5XywgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBlZ2xfY3R4Xykp IHsKKyAgICBBTE9HRSgiQmVnaW5Db250ZXh0IGZhaWxlZDogJXMiLCBHZXRFR0xFcnJvcigpKTsK KyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IEdMV29ya2VyQ29tcG9z aXRvcjo6RW5kQ29udGV4dCgpIHsKKyAgaWYgKHByaXZhdGVfLnNhdmVkX2VnbF9kaXNwbGF5ICE9 IGVnbEdldEN1cnJlbnREaXNwbGF5KCkgfHwKKyAgICAgIHByaXZhdGVfLnNhdmVkX2VnbF9jdHgg IT0gZWdsR2V0Q3VycmVudENvbnRleHQoKSkgeworICAgIGlmICghZWdsTWFrZUN1cnJlbnQocHJp dmF0ZV8uc2F2ZWRfZWdsX2Rpc3BsYXksIHByaXZhdGVfLnNhdmVkX2VnbF9yZWFkLAorICAgICAg ICAgICAgICAgICAgICAgICAgcHJpdmF0ZV8uc2F2ZWRfZWdsX2RyYXcsIHByaXZhdGVfLnNhdmVk X2VnbF9jdHgpKSB7CisgICAgICBBTE9HRSgiRW5kQ29udGV4dCBmYWlsZWQ6ICVzIiwgR2V0RUdM RXJyb3IoKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30K Kwogc3RhdGljIEF1dG9HTFNoYWRlciBDb21waWxlQW5kQ2hlY2tTaGFkZXIoR0xlbnVtIHR5cGUs IHVuc2lnbmVkIHNvdXJjZV9jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEdMY2hhciAqKnNvdXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gKnNoYWRlcl9sb2cpIHsKQEAg LTUwOCwxMCArNTQwLDkgQEAgaW50IEdMV29ya2VyQ29tcG9zaXRvcjo6SW5pdCgpIHsKICAgICBy ZXR1cm4gMTsKICAgfQogCi0gIGlmICghZWdsTWFrZUN1cnJlbnQoZWdsX2Rpc3BsYXlfLCBFR0xf Tk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIGVnbF9jdHhfKSkgewotICAgIEFMT0dFKCJGYWls ZWQgdG8gbWFrZSB0aGUgT3BlbkdMIEVTIENvbnRleHQgY3VycmVudDogJXMiLCBHZXRFR0xFcnJv cigpKTsKLSAgICByZXR1cm4gMTsKLSAgfQorICByZXQgPSBCZWdpbkNvbnRleHQoKTsKKyAgaWYg KHJldCkKKyAgICByZXR1cm4gcmV0OwogCiAgIGdsX2V4dGVuc2lvbnMgPSAoY29uc3QgY2hhciAq KWdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpOwogCkBAIC01MzAsNiArNTYxLDkgQEAgaW50IEdM V29ya2VyQ29tcG9zaXRvcjo6SW5pdCgpIHsKIAogICBzdGQ6Om9zdHJpbmdzdHJlYW0gc2hhZGVy X2xvZzsKICAgYmxlbmRfcHJvZ3JhbXNfLmVtcGxhY2VfYmFjayhHZW5lcmF0ZVByb2dyYW0oMSwg JnNoYWRlcl9sb2cpKTsKKworICBFbmRDb250ZXh0KCk7CisKICAgaWYgKGJsZW5kX3Byb2dyYW1z Xy5iYWNrKCkuZ2V0KCkgPT0gMCkgewogICAgIEFMT0dFKCIlcyIsIHNoYWRlcl9sb2cuc3RyKCku Y19zdHIoKSk7CiAgICAgcmV0dXJuIDE7CkBAIC01NTgsMTIgKzU5MiwxNyBAQCBpbnQgR0xXb3Jr ZXJDb21wb3NpdG9yOjpDb21wb3NpdGUoRHJtSHdjTGF5ZXIgKmxheWVycywKICAgICByZXR1cm4g LUVBTFJFQURZOwogICB9CiAKKyAgcmV0ID0gQmVnaW5Db250ZXh0KCk7CisgIGlmIChyZXQpCisg ICAgcmV0dXJuIC0xOworCiAgIEdMaW50IGZyYW1lX3dpZHRoID0gZnJhbWVidWZmZXItPmdldFdp ZHRoKCk7CiAgIEdMaW50IGZyYW1lX2hlaWdodCA9IGZyYW1lYnVmZmVyLT5nZXRIZWlnaHQoKTsK ICAgQ2FjaGVkRnJhbWVidWZmZXIgKmNhY2hlZF9mcmFtZWJ1ZmZlciA9CiAgICAgICBQcmVwYXJl QW5kQ2FjaGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiAgIGlmIChjYWNoZWRfZnJhbWVidWZm ZXIgPT0gTlVMTCkgewogICAgIEFMT0dFKCJDb21wb3NpdGUgZmFpbGVkIGJlY2F1c2Ugb2YgZmFp bGVkIGZyYW1lYnVmZmVyIik7CisgICAgRW5kQ29udGV4dCgpOwogICAgIHJldHVybiAtRUlOVkFM OwogICB9CiAKQEAgLTU5Nyw4ICs2MzYsMTAgQEAgaW50IEdMV29ya2VyQ29tcG9zaXRvcjo6Q29t cG9zaXRlKERybUh3Y0xheWVyICpsYXllcnMsCiAgICAgfQogICB9CiAKLSAgaWYgKHJldCkKKyAg aWYgKHJldCkgeworICAgIEVuZENvbnRleHQoKTsKICAgICByZXR1cm4gcmV0OworICB9CiAKICAg Z2xWaWV3cG9ydCgwLCAwLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0KTsKIApAQCAtNjc2LDYg KzcxNyw3IEBAIGludCBHTFdvcmtlckNvbXBvc2l0b3I6OkNvbXBvc2l0ZShEcm1Id2NMYXllciAq bGF5ZXJzLAogCiAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKIAorICBF bmRDb250ZXh0KCk7CiAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2dsd29ya2VyLmgg Yi9nbHdvcmtlci5oCmluZGV4IDE1ODQ5MGMuLjI2ZGU1NWQgMTAwNjQ0Ci0tLSBhL2dsd29ya2Vy LmgKKysrIGIvZ2x3b3JrZXIuaApAQCAtNjQsNiArNjQsMTYgQEAgY2xhc3MgR0xXb3JrZXJDb21w b3NpdG9yIHsKICAgICBib29sIFByb21vdGUoKTsKICAgfTsKIAorICBzdHJ1Y3QgeworICAgIEVH TERpc3BsYXkgc2F2ZWRfZWdsX2Rpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICBFR0xDb250 ZXh0IHNhdmVkX2VnbF9jdHggPSBFR0xfTk9fQ09OVEVYVDsKKyAgICBFR0xTdXJmYWNlIHNhdmVk X2VnbF9yZWFkID0gRUdMX05PX1NVUkZBQ0U7CisgICAgRUdMU3VyZmFjZSBzYXZlZF9lZ2xfZHJh dyA9IEVHTF9OT19TVVJGQUNFOworICB9IHByaXZhdGVfOworCisgIGludCBCZWdpbkNvbnRleHQo KTsKKyAgaW50IEVuZENvbnRleHQoKTsKKwogICBDYWNoZWRGcmFtZWJ1ZmZlciAqRmluZENhY2hl ZEZyYW1lYnVmZmVyKAogICAgICAgY29uc3Qgc3A8R3JhcGhpY0J1ZmZlcj4gJmZyYW1lYnVmZmVy KTsKICAgQ2FjaGVkRnJhbWVidWZmZXIgKlByZXBhcmVBbmRDYWNoZUZyYW1lYnVmZmVyKAotLSAK Mi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK