From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 01/12] locking/lockdep: restore cross-release checks Date: Fri, 2 Nov 2018 10:15:20 +0100 Message-ID: <20181102091531.7775-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9C3466E544 for ; Fri, 2 Nov 2018 09:15:42 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id n19-v6so1261349edq.11 for ; Fri, 02 Nov 2018 02:15:42 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id p19-v6sm5658103ejw.69.2018.11.02.02.15.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Nov 2018 02:15:38 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org VGhpcyByZXZlcnRzIHRoZSBmb2xsb3dpbmcgY29tbWl0czoKCjUyNzE4N2QyODU2OSAoImxvY2tp bmcvbG9ja2RlcDogUmVtb3ZlIGNyb3NzLXJlbGVhc2UgbGVmdG92ZXJzIikKZGJhMDRlYjc2ZGY5 ICgibG9ja2luZy9Eb2N1bWVudGF0aW9uOiBSZW1vdmUgc3RhbGUgY3Jvc3NyZWxlYXNlX2Z1bGxz dGFjayBwYXJhbWV0ZXIiKQplOTY2ZWFlZWI2MjMgKCJsb2NraW5nL2xvY2tkZXA6IFJlbW92ZSB0 aGUgY3Jvc3MtcmVsZWFzZSBsb2NraW5nIGNoZWNrcyIpCgpTaW5jZSB0aGUgZmlyc3QgdHdvIGFy ZSBqdXN0IGZpeHVwcyBmb3IgdGhlIGNyb3NzLXJlbGVhc2UgcmVtb3ZhbCBJCmZpZ3VyZWQgSSds bCBzcXVhc2ggdGhlbSBhbGwgaW50byBvbmUuCgpDYzogQnl1bmdjaHVsIFBhcmsgPGJ5dW5nY2h1 bC5wYXJrQGxnZS5jb20+CkNjOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRh dGlvbi5vcmc+CkNjOiBQZXRlciBaaWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+CkNjOiBU aG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6IGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmcKQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgpDYzogV2lsbCBE ZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+CkNjOiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBs d24ubmV0PgpDYzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4KQ2M6IEdyZWcg S3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBNYXJjIFp5bmdp ZXIgPG1hcmMuenluZ2llckBhcm0uY29tPgpDYzogS2FpLUhlbmcgRmVuZyA8a2FpLmhlbmcuZmVu Z0BjYW5vbmljYWwuY29tPgpDYzogVGh5bW8gdmFuIEJlZXJzIDx0aHltb3ZhbmJlZXJzQGdtYWls LmNvbT4KQ2M6IEppcmkgS29zaW5hIDxqa29zaW5hQHN1c2UuY3o+CkNjOiBLb25yYWQgUnplc3p1 dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CkNjOiBMb2dhbiBHdW50aG9ycGUgPGxv Z2FuZ0BkZWx0YXRlZS5jb20+CkNjOiBEYXZpZCBSaWVudGplcyA8cmllbnRqZXNAZ29vZ2xlLmNv bT4KQ2M6IEthdGUgU3Rld2FydCA8a3N0ZXdhcnRAbGludXhmb3VuZGF0aW9uLm9yZz4KQ2M6IFBo aWxpcHBlIE9tYnJlZGFubmUgPHBvbWJyZWRhbm5lQG5leGIuY29tPgpDYzogRGFuaWVsIFZldHRl ciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KQ2M6ICJKb2VsIEZlcm5hbmRlcyAoR29vZ2xlKSIg PGpvZWxAam9lbGZlcm5hbmRlcy5vcmc+CkNjOiAiU3RldmVuIFJvc3RlZHQgKFZNd2FyZSkiIDxy b3N0ZWR0QGdvb2RtaXMub3JnPgpDYzogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNv bT4KQ2M6IE5hbWh5dW5nIEtpbSA8bmFtaHl1bmdAa2VybmVsLm9yZz4KQ2M6IEFuZHJldyBNb3J0 b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+CkNjOiBNYXNhaGlybyBZYW1hZGEgPHlhbWFk YS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPgpDYzogUmFuZHkgRHVubGFwIDxyZHVubGFwQGluZnJh ZGVhZC5vcmc+CkNjOiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgpDYzogV2FpbWFuIExv bmcgPGxvbmdtYW5AcmVkaGF0LmNvbT4KQ2M6IE1hc2FtaSBIaXJhbWF0c3UgPG1oaXJhbWF0QGtl cm5lbC5vcmc+CkNjOiBZdXJ5IE5vcm92IDx5bm9yb3ZAY2F2aXVtbmV0d29ya3MuY29tPgpDYzog TWlrdWxhcyBQYXRvY2thIDxtcGF0b2NrYUByZWRoYXQuY29tPgpDYzogUm9iaW4gTXVycGh5IDxy b2Jpbi5tdXJwaHlAYXJtLmNvbT4KQ2M6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtv QGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBp bnRlbC5jb20+Ci0tLQogLi4uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCAgICAg ICAgIHwgICAzICsKIERvY3VtZW50YXRpb24vbG9ja2luZy9jcm9zc3JlbGVhc2UudHh0ICAgICAg ICB8IDg3NCArKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvY29tcGxldGlvbi5oICAg ICAgICAgICAgICAgICAgICB8ICA0NiArCiBpbmNsdWRlL2xpbnV4L2lycWZsYWdzLmggICAgICAg ICAgICAgICAgICAgICAgfCAgIDQgKwogaW5jbHVkZS9saW51eC9sb2NrZGVwLmggICAgICAgICAg ICAgICAgICAgICAgIHwgMTI3ICsrKwogaW5jbHVkZS9saW51eC9zY2hlZC5oICAgICAgICAgICAg ICAgICAgICAgICAgIHwgIDExICsKIGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyAgICAgICAgICAg ICAgICAgICAgICB8IDY1MiArKysrKysrKysrKystCiBrZXJuZWwvc2NoZWQvY29tcGxldGlvbi5j ICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogbGliL0tjb25maWcuZGVidWcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDMzICsKIDkgZmlsZXMgY2hhbmdlZCwgMTcyMCBpbnNlcnRp b25zKCspLCAzNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9u L2xvY2tpbmcvY3Jvc3NyZWxlYXNlLnR4dAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRt aW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlk ZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggOTJlYjFmNDIyNDBkLi42YWIzYWQxODhjMDEg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMu dHh0CisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0 CkBAIC03MjQsNiArNzI0LDkgQEAKIAkJCUl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIGNyYXNoa2Vy bmVsPVgsaGlnaCBpcyBub3QgdXNlZAogCQkJb3IgbWVtb3J5IHJlc2VydmVkIGlzIGJlbG93IDRH LgogCisJY3Jvc3NyZWxlYXNlX2Z1bGxzdGFjaworCQkJW0tOTF0gQWxsb3cgdG8gcmVjb3JkIGZ1 bGwgc3RhY2sgdHJhY2UgaW4gY3Jvc3MtcmVsZWFzZQorCiAJY3J5cHRvbWdyLm5vdGVzdHMKIAkJ CVtLTkxdIERpc2FibGUgY3J5cHRvIHNlbGYtdGVzdHMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRh dGlvbi9sb2NraW5nL2Nyb3NzcmVsZWFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvY3Jv c3NyZWxlYXNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJk ZjE0MjNkNWY5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbG9ja2luZy9jcm9z c3JlbGVhc2UudHh0CkBAIC0wLDAgKzEsODc0IEBACitDcm9zc3JlbGVhc2UKKz09PT09PT09PT09 PQorCitTdGFydGVkIGJ5IEJ5dW5nY2h1bCBQYXJrIDxieXVuZ2NodWwucGFya0BsZ2UuY29tPgor CitDb250ZW50czoKKworICgqKSBCYWNrZ3JvdW5kCisKKyAgICAgLSBXaGF0IGNhdXNlcyBkZWFk bG9jaworICAgICAtIEhvdyBsb2NrZGVwIHdvcmtzCisKKyAoKikgTGltaXRhdGlvbgorCisgICAg IC0gTGltaXQgbG9ja2RlcAorICAgICAtIFByb3MgZnJvbSB0aGUgbGltaXRhdGlvbgorICAgICAt IENvbnMgZnJvbSB0aGUgbGltaXRhdGlvbgorICAgICAtIFJlbGF4IHRoZSBsaW1pdGF0aW9uCisK KyAoKikgQ3Jvc3NyZWxlYXNlCisKKyAgICAgLSBJbnRyb2R1Y2UgY3Jvc3NyZWxlYXNlCisgICAg IC0gSW50cm9kdWNlIGNvbW1pdAorCisgKCopIEltcGxlbWVudGF0aW9uCisKKyAgICAgLSBEYXRh IHN0cnVjdHVyZXMKKyAgICAgLSBIb3cgY3Jvc3NyZWxlYXNlIHdvcmtzCisKKyAoKikgT3B0aW1p emF0aW9ucworCisgICAgIC0gQXZvaWQgZHVwbGljYXRpb24KKyAgICAgLSBMb2NrbGVzcyBmb3Ig aG90IHBhdGhzCisKKyAoKikgQVBQRU5ESVggQTogV2hhdCBsb2NrZGVwIGRvZXMgdG8gd29yayBh Z2dyZXNpdmVseQorCisgKCopIEFQUEVORElYIEI6IEhvdyB0byBhdm9pZCBhZGRpbmcgZmFsc2Ug ZGVwZW5kZW5jaWVzCisKKworPT09PT09PT09PQorQmFja2dyb3VuZAorPT09PT09PT09PQorCitX aGF0IGNhdXNlcyBkZWFkbG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBkZWFkbG9jayBv Y2N1cnMgd2hlbiBhIGNvbnRleHQgaXMgd2FpdGluZyBmb3IgYW4gZXZlbnQgdG8gaGFwcGVuLAor d2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGFub3RoZXIgKG9yIHRoZSkgY29udGV4dCB3aG8g Y2FuIHRyaWdnZXIgdGhlCitldmVudCBpcyBhbHNvIHdhaXRpbmcgZm9yIGFub3RoZXIgKG9yIHRo ZSkgZXZlbnQgdG8gaGFwcGVuLCB3aGljaCBpcworYWxzbyBpbXBvc3NpYmxlIGR1ZSB0byB0aGUg c2FtZSByZWFzb24uCisKK0ZvciBleGFtcGxlOgorCisgICBBIGNvbnRleHQgZ29pbmcgdG8gdHJp Z2dlciBldmVudCBDIGlzIHdhaXRpbmcgZm9yIGV2ZW50IEEgdG8gaGFwcGVuLgorICAgQSBjb250 ZXh0IGdvaW5nIHRvIHRyaWdnZXIgZXZlbnQgQSBpcyB3YWl0aW5nIGZvciBldmVudCBCIHRvIGhh cHBlbi4KKyAgIEEgY29udGV4dCBnb2luZyB0byB0cmlnZ2VyIGV2ZW50IEIgaXMgd2FpdGluZyBm b3IgZXZlbnQgQyB0byBoYXBwZW4uCisKK0EgZGVhZGxvY2sgb2NjdXJzIHdoZW4gdGhlc2UgdGhy ZWUgd2FpdCBvcGVyYXRpb25zIHJ1biBhdCB0aGUgc2FtZSB0aW1lLAorYmVjYXVzZSBldmVudCBD IGNhbm5vdCBiZSB0cmlnZ2VyZWQgaWYgZXZlbnQgQSBkb2VzIG5vdCBoYXBwZW4sIHdoaWNoIGlu Cit0dXJuIGNhbm5vdCBiZSB0cmlnZ2VyZWQgaWYgZXZlbnQgQiBkb2VzIG5vdCBoYXBwZW4sIHdo aWNoIGluIHR1cm4KK2Nhbm5vdCBiZSB0cmlnZ2VyZWQgaWYgZXZlbnQgQyBkb2VzIG5vdCBoYXBw ZW4uIEFmdGVyIGFsbCwgbm8gZXZlbnQgY2FuCitiZSB0cmlnZ2VyZWQgc2luY2UgYW55IG9mIHRo ZW0gbmV2ZXIgbWVldHMgaXRzIGNvbmRpdGlvbiB0byB3YWtlIHVwLgorCitBIGRlcGVuZGVuY3kg bWlnaHQgZXhpc3QgYmV0d2VlbiB0d28gd2FpdGVycyBhbmQgYSBkZWFkbG9jayBtaWdodCBoYXBw ZW4KK2R1ZSB0byBhbiBpbmNvcnJlY3QgcmVsZWF0aW9uc2hpcCBiZXR3ZWVuIGRlcGVuZGVuY2ll cy4gVGh1cywgd2UgbXVzdAorZGVmaW5lIHdoYXQgYSBkZXBlbmRlbmN5IGlzIGZpcnN0LiBBIGRl cGVuZGVuY3kgZXhpc3RzIGJldHdlZW4gdGhlbSBpZjoKKworICAgMS4gVGhlcmUgYXJlIHR3byB3 YWl0ZXJzIHdhaXRpbmcgZm9yIGVhY2ggZXZlbnQgYXQgYSBnaXZlbiB0aW1lLgorICAgMi4gVGhl IG9ubHkgd2F5IHRvIHdha2UgdXAgZWFjaCB3YWl0ZXIgaXMgdG8gdHJpZ2dlciBpdHMgZXZlbnQu CisgICAzLiBXaGV0aGVyIG9uZSBjYW4gYmUgd29rZW4gdXAgZGVwZW5kcyBvbiB3aGV0aGVyIHRo ZSBvdGhlciBjYW4uCisKK0VhY2ggd2FpdCBpbiB0aGUgZXhhbXBsZSBjcmVhdGVzIGl0cyBkZXBl bmRlbmN5IGxpa2U6CisKKyAgIEV2ZW50IEMgZGVwZW5kcyBvbiBldmVudCBBLgorICAgRXZlbnQg QSBkZXBlbmRzIG9uIGV2ZW50IEIuCisgICBFdmVudCBCIGRlcGVuZHMgb24gZXZlbnQgQy4KKwor ICAgTk9URTogUHJlY2lzZWx5IHNwZWFraW5nLCBhIGRlcGVuZGVuY3kgaXMgb25lIGJldHdlZW4g d2hldGhlciBhCisgICB3YWl0ZXIgZm9yIGFuIGV2ZW50IGNhbiBiZSB3b2tlbiB1cCBhbmQgd2hl dGhlciBhbm90aGVyIHdhaXRlciBmb3IKKyAgIGFub3RoZXIgZXZlbnQgY2FuIGJlIHdva2VuIHVw LiBIb3dldmVyIGZyb20gbm93IG9uLCB3ZSB3aWxsIGRlc2NyaWJlCisgICBhIGRlcGVuZGVuY3kg YXMgaWYgaXQncyBvbmUgYmV0d2VlbiBhbiBldmVudCBhbmQgYW5vdGhlciBldmVudCBmb3IKKyAg IHNpbXBsaWNpdHkuCisKK0FuZCB0aGV5IGZvcm0gY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGxpa2U6 CisKKyAgICAtPiBDIC0+IEEgLT4gQiAtCisgICAvICAgICAgICAgICAgICAgIFwKKyAgIFwgICAg ICAgICAgICAgICAgLworICAgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgd2hlcmUgJ0EgLT4gQicg bWVhbnMgdGhhdCBldmVudCBBIGRlcGVuZHMgb24gZXZlbnQgQi4KKworU3VjaCBjaXJjdWxhciBk ZXBlbmRlbmNpZXMgbGVhZCB0byBhIGRlYWRsb2NrIHNpbmNlIG5vIHdhaXRlciBjYW4gbWVldAor aXRzIGNvbmRpdGlvbiB0byB3YWtlIHVwIGFzIGRlc2NyaWJlZC4KKworQ09OQ0xVU0lPTgorCitD aXJjdWxhciBkZXBlbmRlbmNpZXMgY2F1c2UgYSBkZWFkbG9jay4KKworCitIb3cgbG9ja2RlcCB3 b3JrcworLS0tLS0tLS0tLS0tLS0tLS0KKworTG9ja2RlcCB0cmllcyB0byBkZXRlY3QgYSBkZWFk bG9jayBieSBjaGVja2luZyBkZXBlbmRlbmNpZXMgY3JlYXRlZCBieQorbG9jayBvcGVyYXRpb25z LCBhY3F1aXJlIGFuZCByZWxlYXNlLiBXYWl0aW5nIGZvciBhIGxvY2sgY29ycmVzcG9uZHMgdG8K K3dhaXRpbmcgZm9yIGFuIGV2ZW50LCBhbmQgcmVsZWFzaW5nIGEgbG9jayBjb3JyZXNwb25kcyB0 byB0cmlnZ2VyaW5nIGFuCitldmVudCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKworSW4gc2hv cnQsIGxvY2tkZXAgZG9lczoKKworICAgMS4gRGV0ZWN0IGEgbmV3IGRlcGVuZGVuY3kuCisgICAy LiBBZGQgdGhlIGRlcGVuZGVuY3kgaW50byBhIGdsb2JhbCBncmFwaC4KKyAgIDMuIENoZWNrIGlm IHRoYXQgbWFrZXMgZGVwZW5kZW5jaWVzIGNpcmN1bGFyLgorICAgNC4gUmVwb3J0IGEgZGVhZGxv Y2sgb3IgaXRzIHBvc3NpYmlsaXR5IGlmIHNvLgorCitGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBn cmFwaCBidWlsdCBieSBsb2NrZGVwIHRoYXQgbG9va3MgbGlrZToKKworICAgQSAtPiBCIC0KKyAg ICAgICAgICAgXAorICAgICAgICAgICAgLT4gRQorICAgICAgICAgICAvCisgICBDIC0+IEQgLQor CisgICB3aGVyZSBBLCBCLC4uLiwgRSBhcmUgZGlmZmVyZW50IGxvY2sgY2xhc3Nlcy4KKworTG9j a2RlcCB3aWxsIGFkZCBhIGRlcGVuZGVuY3kgaW50byB0aGUgZ3JhcGggb24gZGV0ZWN0aW9uIG9m IGEgbmV3CitkZXBlbmRlbmN5LiBGb3IgZXhhbXBsZSwgaXQgd2lsbCBhZGQgYSBkZXBlbmRlbmN5 ICdFIC0+IEMnIHdoZW4gYSBuZXcKK2RlcGVuZGVuY3kgYmV0d2VlbiBsb2NrIEUgYW5kIGxvY2sg QyBpcyBkZXRlY3RlZC4gVGhlbiB0aGUgZ3JhcGggd2lsbCBiZToKKworICAgICAgIEEgLT4gQiAt CisgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLT4gRSAtCisgICAgICAgICAgICAg ICAvICAgICAgXAorICAgIC0+IEMgLT4gRCAtICAgICAgICBcCisgICAvICAgICAgICAgICAgICAg ICAgIC8KKyAgIFwgICAgICAgICAgICAgICAgICAvCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisK KyAgIHdoZXJlIEEsIEIsLi4uLCBFIGFyZSBkaWZmZXJlbnQgbG9jayBjbGFzc2VzLgorCitUaGlz IGdyYXBoIGNvbnRhaW5zIGEgc3ViZ3JhcGggd2hpY2ggZGVtb25zdHJhdGVzIGNpcmN1bGFyIGRl cGVuZGVuY2llczoKKworICAgICAgICAgICAgICAgIC0+IEUgLQorICAgICAgICAgICAgICAgLyAg ICAgIFwKKyAgICAtPiBDIC0+IEQgLSAgICAgICAgXAorICAgLyAgICAgICAgICAgICAgICAgICAv CisgICBcICAgICAgICAgICAgICAgICAgLworICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3 aGVyZSBDLCBEIGFuZCBFIGFyZSBkaWZmZXJlbnQgbG9jayBjbGFzc2VzLgorCitUaGlzIGlzIHRo ZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYSBkZWFkbG9jayBtaWdodCBvY2N1ci4gTG9ja2RlcAor cmVwb3J0cyBpdCBvbiBkZXRlY3Rpb24gYWZ0ZXIgYWRkaW5nIGEgbmV3IGRlcGVuZGVuY3kuIFRo aXMgaXMgdGhlIHdheQoraG93IGxvY2tkZXAgd29ya3MuCisKK0NPTkNMVVNJT04KKworTG9ja2Rl cCBkZXRlY3RzIGEgZGVhZGxvY2sgb3IgaXRzIHBvc3NpYmlsaXR5IGJ5IGNoZWNraW5nIGlmIGNp cmN1bGFyCitkZXBlbmRlbmNpZXMgd2VyZSBjcmVhdGVkIGFmdGVyIGFkZGluZyBlYWNoIG5ldyBk ZXBlbmRlbmN5LgorCisKKz09PT09PT09PT0KK0xpbWl0YXRpb24KKz09PT09PT09PT0KKworTGlt aXQgbG9ja2RlcAorLS0tLS0tLS0tLS0tLQorCitMaW1pdGluZyBsb2NrZGVwIHRvIHdvcmsgb24g b25seSB0eXBpY2FsIGxvY2tzIGUuZy4gc3BpbiBsb2NrcyBhbmQKK211dGV4ZXMsIHdoaWNoIGFy ZSByZWxlYXNlZCB3aXRoaW4gdGhlIGFjcXVpcmUgY29udGV4dCwgdGhlCitpbXBsZW1lbnRhdGlv biBiZWNvbWVzIHNpbXBsZSBidXQgaXRzIGNhcGFjaXR5IGZvciBkZXRlY3Rpb24gYmVjb21lcwor bGltaXRlZC4gTGV0J3MgY2hlY2sgcHJvcyBhbmQgY29ucyBpbiBuZXh0IHNlY3Rpb24uCisKKwor UHJvcyBmcm9tIHRoZSBsaW1pdGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l2 ZW4gdGhlIGxpbWl0YXRpb24sIHdoZW4gYWNxdWlyaW5nIGEgbG9jaywgbG9ja3MgaW4gYSBoZWxk X2xvY2tzCitjYW5ub3QgYmUgcmVsZWFzZWQgaWYgdGhlIGNvbnRleHQgY2Fubm90IGFjcXVpcmUg aXQgc28gaGFzIHRvIHdhaXQgdG8KK2FjcXVpcmUgaXQsIHdoaWNoIG1lYW5zIGFsbCB3YWl0ZXJz IGZvciB0aGUgbG9ja3MgaW4gdGhlIGhlbGRfbG9ja3MgYXJlCitzdHVjay4gSXQncyBhbiBleGFj dCBjYXNlIHRvIGNyZWF0ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBlYWNoIGxvY2sgaW4KK3RoZSBo ZWxkX2xvY2tzIGFuZCB0aGUgbG9jayB0byBhY3F1aXJlLgorCitGb3IgZXhhbXBsZToKKworICAg Q09OVEVYVCBYCisgICAtLS0tLS0tLS0KKyAgIGFjcXVpcmUgQQorICAgYWNxdWlyZSBCIC8qIEFk ZCBhIGRlcGVuZGVuY3kgJ0EgLT4gQicgKi8KKyAgIHJlbGVhc2UgQgorICAgcmVsZWFzZSBBCisK KyAgIHdoZXJlIEEgYW5kIEIgYXJlIGRpZmZlcmVudCBsb2NrIGNsYXNzZXMuCisKK1doZW4gYWNx dWlyaW5nIGxvY2sgQSwgdGhlIGhlbGRfbG9ja3Mgb2YgQ09OVEVYVCBYIGlzIGVtcHR5IHRodXMg bm8KK2RlcGVuZGVuY3kgaXMgYWRkZWQuIEJ1dCB3aGVuIGFjcXVpcmluZyBsb2NrIEIsIGxvY2tk ZXAgZGV0ZWN0cyBhbmQgYWRkcworYSBuZXcgZGVwZW5kZW5jeSAnQSAtPiBCJyBiZXR3ZWVuIGxv Y2sgQSBpbiB0aGUgaGVsZF9sb2NrcyBhbmQgbG9jayBCLgorVGhleSBjYW4gYmUgc2ltcGx5IGFk ZGVkIHdoZW5ldmVyIGFjcXVpcmluZyBlYWNoIGxvY2suCisKK0FuZCBkYXRhIHJlcXVpcmVkIGJ5 IGxvY2tkZXAgZXhpc3RzIGluIGEgbG9jYWwgc3RydWN0dXJlLCBoZWxkX2xvY2tzCitlbWJlZGRl ZCBpbiB0YXNrX3N0cnVjdC4gRm9yY2luZyB0byBhY2Nlc3MgdGhlIGRhdGEgd2l0aGluIHRoZSBj b250ZXh0LAorbG9ja2RlcCBjYW4gYXZvaWQgcmFjeSBwcm9ibGVtcyB3aXRob3V0IGV4cGxpY2l0 IGxvY2tzIHdoaWxlIGhhbmRsaW5nCit0aGUgbG9jYWwgZGF0YS4KKworTGFzdGx5LCBsb2NrZGVw IG9ubHkgbmVlZHMgdG8ga2VlcCBsb2NrcyBjdXJyZW50bHkgYmVpbmcgaGVsZCwgdG8gYnVpbGQK K2EgZGVwZW5kZW5jeSBncmFwaC4gSG93ZXZlciwgcmVsYXhpbmcgdGhlIGxpbWl0YXRpb24sIGl0 IG5lZWRzIHRvIGtlZXAKK2V2ZW4gbG9ja3MgYWxyZWFkeSByZWxlYXNlZCwgYmVjYXVzZSBhIGRl Y2lzaW9uIHdoZXRoZXIgdGhleSBjcmVhdGVkCitkZXBlbmRlbmNpZXMgbWlnaHQgYmUgbG9uZy1k ZWZlcnJlZC4KKworVG8gc3VtIHVwLCB3ZSBjYW4gZXhwZWN0IHNldmVyYWwgYWR2YW50YWdlcyBm cm9tIHRoZSBsaW1pdGF0aW9uOgorCisgICAxLiBMb2NrZGVwIGNhbiBlYXNpbHkgaWRlbnRpZnkg YSBkZXBlbmRlbmN5IHdoZW4gYWNxdWlyaW5nIGEgbG9jay4KKyAgIDIuIFJhY2VzIGFyZSBhdm9p ZGFibGUgd2hpbGUgYWNjZXNzaW5nIGxvY2FsIGxvY2tzIGluIGEgaGVsZF9sb2Nrcy4KKyAgIDMu IExvY2tkZXAgb25seSBuZWVkcyB0byBrZWVwIGxvY2tzIGN1cnJlbnRseSBiZWluZyBoZWxkLgor CitDT05DTFVTSU9OCisKK0dpdmVuIHRoZSBsaW1pdGF0aW9uLCB0aGUgaW1wbGVtZW50YXRpb24g YmVjb21lcyBzaW1wbGUgYW5kIGVmZmljaWVudC4KKworCitDb25zIGZyb20gdGhlIGxpbWl0YXRp b24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXZlbiB0aGUgbGltaXRhdGlvbiwgbG9j a2RlcCBpcyBhcHBsaWNhYmxlIG9ubHkgdG8gdHlwaWNhbCBsb2Nrcy4gRm9yCitleGFtcGxlLCBw YWdlIGxvY2tzIGZvciBwYWdlIGFjY2VzcyBvciBjb21wbGV0aW9ucyBmb3Igc3luY2hyb25pemF0 aW9uCitjYW5ub3Qgd29yayB3aXRoIGxvY2tkZXAuCisKK0NhbiB3ZSBkZXRlY3QgZGVhZGxvY2tz IGJlbG93LCB1bmRlciB0aGUgbGltaXRhdGlvbj8KKworRXhhbXBsZSAxOgorCisgICBDT05URVhU IFgJICAgQ09OVEVYVCBZCSAgIENPTlRFWFQgWgorICAgLS0tLS0tLS0tCSAgIC0tLS0tLS0tLQkg ICAtLS0tLS0tLS0tCisJCSAgIG11dGV4X2xvY2sgQQorICAgbG9ja19wYWdlIEIKKwkJICAgbG9j a19wYWdlIEIKKwkJCQkgICBtdXRleF9sb2NrIEEgLyogREVBRExPQ0sgKi8KKwkJCQkgICB1bmxv Y2tfcGFnZSBCIGhlbGQgYnkgWAorCQkgICB1bmxvY2tfcGFnZSBCCisJCSAgIG11dGV4X3VubG9j ayBBCisJCQkJICAgbXV0ZXhfdW5sb2NrIEEKKworICAgd2hlcmUgQSBhbmQgQiBhcmUgZGlmZmVy ZW50IGxvY2sgY2xhc3Nlcy4KKworTm8sIHdlIGNhbm5vdC4KKworRXhhbXBsZSAyOgorCisgICBD T05URVhUIFgJCSAgIENPTlRFWFQgWQorICAgLS0tLS0tLS0tCQkgICAtLS0tLS0tLS0KKwkJCSAg IG11dGV4X2xvY2sgQQorICAgbXV0ZXhfbG9jayBBCisJCQkgICB3YWl0X2Zvcl9jb21wbGV0ZSBC IC8qIERFQURMT0NLICovCisgICBjb21wbGV0ZSBCCisJCQkgICBtdXRleF91bmxvY2sgQQorICAg bXV0ZXhfdW5sb2NrIEEKKworICAgd2hlcmUgQSBpcyBhIGxvY2sgY2xhc3MgYW5kIEIgaXMgYSBj b21wbGV0aW9uIHZhcmlhYmxlLgorCitObywgd2UgY2Fubm90LgorCitDT05DTFVTSU9OCisKK0dp dmVuIHRoZSBsaW1pdGF0aW9uLCBsb2NrZGVwIGNhbm5vdCBkZXRlY3QgYSBkZWFkbG9jayBvciBp dHMKK3Bvc3NpYmlsaXR5IGNhdXNlZCBieSBwYWdlIGxvY2tzIG9yIGNvbXBsZXRpb25zLgorCisK K1JlbGF4IHRoZSBsaW1pdGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmRlciB0aGUg bGltaXRhdGlvbiwgdGhpbmdzIHRvIGNyZWF0ZSBkZXBlbmRlbmNpZXMgYXJlIGxpbWl0ZWQgdG8K K3R5cGljYWwgbG9ja3MuIEhvd2V2ZXIsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGxpa2Ug cGFnZSBsb2NrcyBhbmQKK2NvbXBsZXRpb25zLCB3aGljaCBhcmUgYWxsb3dlZCB0byBiZSByZWxl YXNlZCBpbiBhbnkgY29udGV4dCwgYWxzbworY3JlYXRlIGRlcGVuZGVuY2llcyBhbmQgY2FuIGNh dXNlIGEgZGVhZGxvY2suIFNvIGxvY2tkZXAgc2hvdWxkIHRyYWNrCit0aGVzZSBsb2NrcyB0byBk byBhIGJldHRlciBqb2IuIFdlIGhhdmUgdG8gcmVsYXggdGhlIGxpbWl0YXRpb24gZm9yCit0aGVz ZSBsb2NrcyB0byB3b3JrIHdpdGggbG9ja2RlcC4KKworRGV0ZWN0aW5nIGRlcGVuZGVuY2llcyBp cyB2ZXJ5IGltcG9ydGFudCBmb3IgbG9ja2RlcCB0byB3b3JrIGJlY2F1c2UKK2FkZGluZyBhIGRl cGVuZGVuY3kgbWVhbnMgYWRkaW5nIGFuIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHdoZXRoZXIgaXQK K2NhdXNlcyBhIGRlYWRsb2NrLiBUaGUgbW9yZSBsb2NrZGVwIGFkZHMgZGVwZW5kZW5jaWVzLCB0 aGUgbW9yZSBpdAordGhvcm91Z2hseSB3b3Jrcy4gVGh1cyBMb2NrZGVwIGhhcyB0byBkbyBpdHMg YmVzdCB0byBkZXRlY3QgYW5kIGFkZCBhcworbWFueSB0cnVlIGRlcGVuZGVuY2llcyBpbnRvIGEg Z3JhcGggYXMgcG9zc2libGUuCisKK0ZvciBleGFtcGxlLCBjb25zaWRlcmluZyBvbmx5IHR5cGlj YWwgbG9ja3MsIGxvY2tkZXAgYnVpbGRzIGEgZ3JhcGggbGlrZToKKworICAgQSAtPiBCIC0KKyAg ICAgICAgICAgXAorICAgICAgICAgICAgLT4gRQorICAgICAgICAgICAvCisgICBDIC0+IEQgLQor CisgICB3aGVyZSBBLCBCLC4uLiwgRSBhcmUgZGlmZmVyZW50IGxvY2sgY2xhc3Nlcy4KKworT24g dGhlIG90aGVyIGhhbmQsIHVuZGVyIHRoZSByZWxheGF0aW9uLCBhZGRpdGlvbmFsIGRlcGVuZGVu Y2llcyBtaWdodAorYmUgY3JlYXRlZCBhbmQgYWRkZWQuIEFzc3VtaW5nIGFkZGl0aW9uYWwgJ0ZY IC0+IEMnIGFuZCAnRSAtPiBHWCcgYXJlCithZGRlZCB0aGFua3MgdG8gdGhlIHJlbGF4YXRpb24s IHRoZSBncmFwaCB3aWxsIGJlOgorCisgICAgICAgICBBIC0+IEIgLQorICAgICAgICAgICAgICAg ICBcCisgICAgICAgICAgICAgICAgICAtPiBFIC0+IEdYCisgICAgICAgICAgICAgICAgIC8KKyAg IEZYIC0+IEMgLT4gRCAtCisKKyAgIHdoZXJlIEEsIEIsLi4uLCBFLCBGWCBhbmQgR1ggYXJlIGRp ZmZlcmVudCBsb2NrIGNsYXNzZXMsIGFuZCBhIHN1ZmZpeAorICAgJ1gnIGlzIGFkZGVkIG9uIG5v bi10eXBpY2FsIGxvY2tzLgorCitUaGUgbGF0dGVyIGdyYXBoIGdpdmVzIHVzIG1vcmUgY2hhbmNl cyB0byBjaGVjayBjaXJjdWxhciBkZXBlbmRlbmNpZXMKK3RoYW4gdGhlIGZvcm1lci4gSG93ZXZl ciwgaXQgbWlnaHQgc3VmZmVyIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIHNpbmNlCityZWxheGlu ZyB0aGUgbGltaXRhdGlvbiwgd2l0aCB3aGljaCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9m IGxvY2tkZXAKK2NhbiBiZSBlZmZpY2llbnQsIG1pZ2h0IGludHJvZHVjZSBpbmVmZmljaWVuY3kg aW5ldml0YWJseS4gU28gbG9ja2RlcAorc2hvdWxkIHByb3ZpZGUgdHdvIG9wdGlvbnMsIHN0cm9u ZyBkZXRlY3Rpb24gYW5kIGVmZmljaWVudCBkZXRlY3Rpb24uCisKK0Nob29zaW5nIGVmZmljaWVu dCBkZXRlY3Rpb246CisKKyAgIExvY2tkZXAgd29ya3Mgd2l0aCBvbmx5IGxvY2tzIHJlc3RyaWN0 ZWQgdG8gYmUgcmVsZWFzZWQgd2l0aGluIHRoZQorICAgYWNxdWlyZSBjb250ZXh0LiBIb3dldmVy LCBsb2NrZGVwIHdvcmtzIGVmZmljaWVudGx5LgorCitDaG9vc2luZyBzdHJvbmcgZGV0ZWN0aW9u OgorCisgICBMb2NrZGVwIHdvcmtzIHdpdGggYWxsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVz LiBIb3dldmVyLCBsb2NrZGVwCisgICBzdWZmZXJzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLgor CitDT05DTFVTSU9OCisKK1JlbGF4aW5nIHRoZSBsaW1pdGF0aW9uLCBsb2NrZGVwIGNhbiBhZGQg YWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZ2l2aW5nCithZGRpdGlvbmFsIG9wcG9ydHVuaXRpZXMg dG8gY2hlY2sgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgorCisKKz09PT09PT09PT09PQorQ3Jvc3Ny ZWxlYXNlCis9PT09PT09PT09PT0KKworSW50cm9kdWNlIGNyb3NzcmVsZWFzZQorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBhbGxvdyBsb2NrZGVwIHRvIGhhbmRsZSBhZGRp dGlvbmFsIGRlcGVuZGVuY2llcyBieSB3aGF0CittaWdodCBiZSByZWxlYXNlZCBpbiBhbnkgY29u dGV4dCwgbmFtZWx5ICdjcm9zc2xvY2snLCB3ZSBoYXZlIHRvIGJlIGFibGUKK3RvIGlkZW50aWZ5 IHRob3NlIGNyZWF0ZWQgYnkgY3Jvc3Nsb2Nrcy4gVGhlIHByb3Bvc2VkICdjcm9zc3JlbGVhc2Un CitmZWF0dXJlIHByb3ZvaWRlcyBhIHdheSB0byBkbyB0aGF0LgorCitDcm9zc3JlbGVhc2UgZmVh dHVyZSBoYXMgdG8gZG86CisKKyAgIDEuIElkZW50aWZ5IGRlcGVuZGVuY2llcyBjcmVhdGVkIGJ5 IGNyb3NzbG9ja3MuCisgICAyLiBBZGQgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGEgZGVwZW5kZW5j eSBncmFwaC4KKworVGhhdCdzIGFsbC4gT25jZSBhIG1lYW5pbmdmdWwgZGVwZW5kZW5jeSBpcyBh ZGRlZCBpbnRvIGdyYXBoLCB0aGVuCitsb2NrZGVwIHdvdWxkIHdvcmsgd2l0aCB0aGUgZ3JhcGgg YXMgaXQgZGlkLiBUaGUgbW9zdCBpbXBvcnRhbnQgdGhpbmcKK2Nyb3NzcmVsZWFzZSBmZWF0dXJl IGhhcyB0byBkbyBpcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIGFkZCB0cnVlCitkZXBlbmRl bmNpZXMgaW50byB0aGUgZ2xvYmFsIGdyYXBoLgorCitBIGRlcGVuZGVuY3kgZS5nLiAnQSAtPiBC JyBjYW4gYmUgaWRlbnRpZmllZCBvbmx5IGluIHRoZSBBJ3MgcmVsZWFzZQorY29udGV4dCBiZWNh dXNlIGEgZGVjaXNpb24gcmVxdWlyZWQgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY3kgY2FuIGJl CittYWRlIG9ubHkgaW4gdGhlIHJlbGVhc2UgY29udGV4dC4gVGhhdCBpcyB0byBkZWNpZGUgd2hl dGhlciBBIGNhbiBiZQorcmVsZWFzZWQgc28gdGhhdCBhIHdhaXRlciBmb3IgQSBjYW4gYmUgd29r ZW4gdXAuIEl0IGNhbm5vdCBiZSBtYWRlIGluCitvdGhlciB0aGFuIHRoZSBBJ3MgcmVsZWFzZSBj b250ZXh0LgorCitJdCdzIG5vIG1hdHRlciBmb3IgdHlwaWNhbCBsb2NrcyBiZWNhdXNlIGVhY2gg YWNxdWlyZSBjb250ZXh0IGlzIHNhbWUgYXMKK2l0cyByZWxlYXNlIGNvbnRleHQsIHRodXMgbG9j a2RlcCBjYW4gZGVjaWRlIHdoZXRoZXIgYSBsb2NrIGNhbiBiZQorcmVsZWFzZWQgaW4gdGhlIGFj cXVpcmUgY29udGV4dC4gSG93ZXZlciBmb3IgY3Jvc3Nsb2NrcywgbG9ja2RlcCBjYW5ub3QKK21h a2UgdGhlIGRlY2lzaW9uIGluIHRoZSBhY3F1aXJlIGNvbnRleHQgYnV0IGhhcyB0byB3YWl0IHVu dGlsIHRoZQorcmVsZWFzZSBjb250ZXh0IGlzIGlkZW50aWZpZWQuCisKK1RoZXJlZm9yZSwgZGVh ZGxvY2tzIGJ5IGNyb3NzbG9ja3MgY2Fubm90IGJlIGRldGVjdGVkIGp1c3Qgd2hlbiBpdAoraGFw cGVucywgYmVjYXVzZSB0aG9zZSBjYW5ub3QgYmUgaWRlbnRpZmllZCB1bnRpbCB0aGUgY3Jvc3Ns b2NrcyBhcmUKK3JlbGVhc2VkLiBIb3dldmVyLCBkZWFkbG9jayBwb3NzaWJpbGl0aWVzIGNhbiBi ZSBkZXRlY3RlZCBhbmQgaXQncyB2ZXJ5Cit3b3J0aC4gU2VlICdBUFBFTkRJWCBBJyBzZWN0aW9u IHRvIGNoZWNrIHdoeS4KKworQ09OQ0xVU0lPTgorCitVc2luZyBjcm9zc3JlbGVhc2UgZmVhdHVy ZSwgbG9ja2RlcCBjYW4gd29yayB3aXRoIHdoYXQgbWlnaHQgYmUgcmVsZWFzZWQKK2luIGFueSBj b250ZXh0LCBuYW1lbHkgY3Jvc3Nsb2NrLgorCisKK0ludHJvZHVjZSBjb21taXQKKy0tLS0tLS0t LS0tLS0tLS0KKworU2luY2UgY3Jvc3NyZWxlYXNlIGRlZmVycyB0aGUgd29yayBhZGRpbmcgdHJ1 ZSBkZXBlbmRlbmNpZXMgb2YKK2Nyb3NzbG9ja3MgdW50aWwgdGhleSBhcmUgYWN0dWFsbHkgcmVs ZWFzZWQsIGNyb3NzcmVsZWFzZSBoYXMgdG8gcXVldWUKK2FsbCBhY3F1aXNpdGlvbnMgd2hpY2gg bWlnaHQgY3JlYXRlIGRlcGVuZGVuY2llcyB3aXRoIHRoZSBjcm9zc2xvY2tzLgorVGhlbiBpdCBp ZGVudGlmaWVzIGRlcGVuZGVuY2llcyB1c2luZyB0aGUgcXVldWVkIGRhdGEgaW4gYmF0Y2hlcyBh dCBhCitwcm9wZXIgdGltZS4gV2UgY2FsbCBpdCAnY29tbWl0Jy4KKworVGhlcmUgYXJlIGZvdXIg dHlwZXMgb2YgZGVwZW5kZW5jaWVzOgorCisxLiBUVCB0eXBlOiAndHlwaWNhbCBsb2NrIEEgLT4g dHlwaWNhbCBsb2NrIEInCisKKyAgIEp1c3Qgd2hlbiBhY3F1aXJpbmcgQiwgbG9ja2RlcCBjYW4g c2VlIGl0J3MgaW4gdGhlIEEncyByZWxlYXNlCisgICBjb250ZXh0LiBTbyB0aGUgZGVwZW5kZW5j eSBiZXR3ZWVuIEEgYW5kIEIgY2FuIGJlIGlkZW50aWZpZWQKKyAgIGltbWVkaWF0ZWx5LiBDb21t aXQgaXMgdW5uZWNlc3NhcnkuCisKKzIuIFRDIHR5cGU6ICd0eXBpY2FsIGxvY2sgQSAtPiBjcm9z c2xvY2sgQlgnCisKKyAgIEp1c3Qgd2hlbiBhY3F1aXJpbmcgQlgsIGxvY2tkZXAgY2FuIHNlZSBp dCdzIGluIHRoZSBBJ3MgcmVsZWFzZQorICAgY29udGV4dC4gU28gdGhlIGRlcGVuZGVuY3kgYmV0 d2VlbiBBIGFuZCBCWCBjYW4gYmUgaWRlbnRpZmllZAorICAgaW1tZWRpYXRlbHkuIENvbW1pdCBp cyB1bm5lY2Vzc2FyeSwgdG9vLgorCiszLiBDVCB0eXBlOiAnY3Jvc3Nsb2NrIEFYIC0+IHR5cGlj YWwgbG9jayBCJworCisgICBXaGVuIGFjcXVpcmluZyBCLCBsb2NrZGVwIGNhbm5vdCBpZGVudGlm eSB0aGUgZGVwZW5kZW5jeSBiZWNhdXNlCisgICB0aGVyZSdzIG5vIHdheSB0byBrbm93IGlmIGl0 J3MgaW4gdGhlIEFYJ3MgcmVsZWFzZSBjb250ZXh0LiBJdCBoYXMKKyAgIHRvIHdhaXQgdW50aWwg dGhlIGRlY2lzaW9uIGNhbiBiZSBtYWRlLiBDb21taXQgaXMgbmVjZXNzYXJ5LgorCis0LiBDQyB0 eXBlOiAnY3Jvc3Nsb2NrIEFYIC0+IGNyb3NzbG9jayBCWCcKKworICAgV2hlbiBhY3F1aXJpbmcg QlgsIGxvY2tkZXAgY2Fubm90IGlkZW50aWZ5IHRoZSBkZXBlbmRlbmN5IGJlY2F1c2UKKyAgIHRo ZXJlJ3Mgbm8gd2F5IHRvIGtub3cgaWYgaXQncyBpbiB0aGUgQVgncyByZWxlYXNlIGNvbnRleHQu IEl0IGhhcworICAgdG8gd2FpdCB1bnRpbCB0aGUgZGVjaXNpb24gY2FuIGJlIG1hZGUuIENvbW1p dCBpcyBuZWNlc3NhcnkuCisgICBCdXQsIGhhbmRsaW5nIENDIHR5cGUgaXMgbm90IGltcGxlbWVu dGVkIHlldC4gSXQncyBhIGZ1dHVyZSB3b3JrLgorCitMb2NrZGVwIGNhbiB3b3JrIHdpdGhvdXQg Y29tbWl0IGZvciB0eXBpY2FsIGxvY2tzLCBidXQgY29tbWl0IHN0ZXAgaXMKK25lY2Vzc2FyeSBv bmNlIGNyb3NzbG9ja3MgYXJlIGludm9sdmVkLiBJbnRyb2R1Y2luZyBjb21taXQsIGxvY2tkZXAK K3BlcmZvcm1zIHRocmVlIHN0ZXBzLiBXaGF0IGxvY2tkZXAgZG9lcyBpbiBlYWNoIHN0ZXAgaXM6 CisKKzEuIEFjcXVpc2l0aW9uOiBGb3IgdHlwaWNhbCBsb2NrcywgbG9ja2RlcCBkb2VzIHdoYXQg aXQgb3JpZ2luYWxseSBkaWQKKyAgIGFuZCBxdWV1ZXMgdGhlIGxvY2sgc28gdGhhdCBDVCB0eXBl IGRlcGVuZGVuY2llcyBjYW4gYmUgY2hlY2tlZCB1c2luZworICAgaXQgYXQgdGhlIGNvbW1pdCBz dGVwLiBGb3IgY3Jvc3Nsb2NrcywgaXQgc2F2ZXMgZGF0YSB3aGljaCB3aWxsIGJlCisgICB1c2Vk IGF0IHRoZSBjb21taXQgc3RlcCBhbmQgaW5jcmVhc2VzIGEgcmVmZXJlbmNlIGNvdW50IGZvciBp dC4KKworMi4gQ29tbWl0OiBObyBhY3Rpb24gaXMgcmVhdWlyZWQgZm9yIHR5cGljYWwgbG9ja3Mu IEZvciBjcm9zc2xvY2tzLAorICAgbG9ja2RlcCBhZGRzIENUIHR5cGUgZGVwZW5kZW5jaWVzIHVz aW5nIHRoZSBkYXRhIHNhdmVkIGF0IHRoZQorICAgYWNxdWlzaXRpb24gc3RlcC4KKworMy4gUmVs ZWFzZTogTm8gY2hhbmdlcyBhcmUgcmVxdWlyZWQgZm9yIHR5cGljYWwgbG9ja3MuIFdoZW4gYSBj cm9zc2xvY2sKKyAgIGlzIHJlbGVhc2VkLCBpdCBkZWNyZWFzZXMgYSByZWZlcmVuY2UgY291bnQg Zm9yIGl0LgorCitDT05DTFVTSU9OCisKK0Nyb3NzcmVsZWFzZSBpbnRyb2R1Y2VzIGNvbW1pdCBz dGVwIHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMgb2YgY3Jvc3Nsb2NrcworaW4gYmF0Y2hlcyBhdCBh IHByb3BlciB0aW1lLgorCisKKz09PT09PT09PT09PT09CitJbXBsZW1lbnRhdGlvbgorPT09PT09 PT09PT09PT0KKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworQ3Jvc3NyZWxl YXNlIGludHJvZHVjZXMgdHdvIG1haW4gZGF0YSBzdHJ1Y3R1cmVzLgorCisxLiBoaXN0X2xvY2sK KworICAgVGhpcyBpcyBhbiBhcnJheSBlbWJlZGRlZCBpbiB0YXNrX3N0cnVjdCwgZm9yIGtlZXBp bmcgbG9jayBoaXN0b3J5IHNvCisgICB0aGF0IGRlcGVuZGVuY2llcyBjYW4gYmUgYWRkZWQgdXNp bmcgdGhlbSBhdCB0aGUgY29tbWl0IHN0ZXAuIFNpbmNlCisgICBpdCdzIGxvY2FsIGRhdGEsIGl0 IGNhbiBiZSBhY2Nlc3NlZCBsb2NrbGVzc2x5IGluIHRoZSBvd25lciBjb250ZXh0LgorICAgVGhl IGFycmF5IGlzIGZpbGxlZCBhdCB0aGUgYWNxdWlzaXRpb24gc3RlcCBhbmQgY29uc3VtZWQgYXQg dGhlCisgICBjb21taXQgc3RlcC4gQW5kIGl0J3MgbWFuYWdlZCBpbiBjaXJjdWxhciBtYW5uZXIu CisKKzIuIGNyb3NzX2xvY2sKKworICAgT25lIHBlciBsb2NrZGVwX21hcCBleGlzdHMuIFRoaXMg aXMgZm9yIGtlZXBpbmcgZGF0YSBvZiBjcm9zc2xvY2tzCisgICBhbmQgdXNlZCBhdCB0aGUgY29t bWl0IHN0ZXAuCisKKworSG93IGNyb3NzcmVsZWFzZSB3b3JrcworLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCitJdCdzIHRoZSBrZXkgb2YgaG93IGNyb3NzcmVsZWFzZSB3b3JrcywgdG8gZGVmZXIg bmVjZXNzYXJ5IHdvcmtzIHRvIGFuCithcHByb3ByaWF0ZSBwb2ludCBpbiB0aW1lIGFuZCBwZXJm b3JtIGluIGF0IG9uY2UgYXQgdGhlIGNvbW1pdCBzdGVwLgorTGV0J3MgdGFrZSBhIGxvb2sgd2l0 aCBleGFtcGxlcyBzdGVwIGJ5IHN0ZXAsIHN0YXJ0aW5nIGZyb20gaG93IGxvY2tkZXAKK3dvcmtz IHdpdGhvdXQgY3Jvc3NyZWxlYXNlIGZvciB0eXBpY2FsIGxvY2tzLgorCisgICBhY3F1aXJlIEEg LyogUHVzaCBBIG9udG8gaGVsZF9sb2NrcyAqLworICAgYWNxdWlyZSBCIC8qIFB1c2ggQiBvbnRv IGhlbGRfbG9ja3MgYW5kIGFkZCAnQSAtPiBCJyAqLworICAgYWNxdWlyZSBDIC8qIFB1c2ggQyBv bnRvIGhlbGRfbG9ja3MgYW5kIGFkZCAnQiAtPiBDJyAqLworICAgcmVsZWFzZSBDIC8qIFBvcCBD IGZyb20gaGVsZF9sb2NrcyAqLworICAgcmVsZWFzZSBCIC8qIFBvcCBCIGZyb20gaGVsZF9sb2Nr cyAqLworICAgcmVsZWFzZSBBIC8qIFBvcCBBIGZyb20gaGVsZF9sb2NrcyAqLworCisgICB3aGVy ZSBBLCBCIGFuZCBDIGFyZSBkaWZmZXJlbnQgbG9jayBjbGFzc2VzLgorCisgICBOT1RFOiBUaGlz IGRvY3VtZW50IGFzc3VtZXMgdGhhdCByZWFkZXJzIGFscmVhZHkgdW5kZXJzdGFuZCBob3cKKyAg IGxvY2tkZXAgd29ya3Mgd2l0aG91dCBjcm9zc3JlbGVhc2UgdGh1cyBvbWl0cyBkZXRhaWxzLiBC dXQgdGhlcmUncworICAgb25lIHRoaW5nIHRvIG5vdGUuIExvY2tkZXAgcHJldGVuZHMgdG8gcG9w IGEgbG9jayBmcm9tIGhlbGRfbG9ja3MKKyAgIHdoZW4gcmVsZWFzaW5nIGl0LiBCdXQgaXQncyBz dWJ0bHkgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHBvcAorICAgb3BlcmF0aW9uIGJlY2F1 c2UgbG9ja2RlcCBhbGxvd3Mgb3RoZXIgdGhhbiB0aGUgdG9wIHRvIGJlIHBvcGVkLgorCitJbiB0 aGlzIGNhc2UsIGxvY2tkZXAgYWRkcyAndGhlIHRvcCBvZiBoZWxkX2xvY2tzIC0+IHRoZSBsb2Nr IHRvIGFjcXVpcmUnCitkZXBlbmRlbmN5IGV2ZXJ5IHRpbWUgYWNxdWlyaW5nIGEgbG9jay4KKwor QWZ0ZXIgYWRkaW5nICdBIC0+IEInLCBhIGRlcGVuZGVuY3kgZ3JhcGggd2lsbCBiZToKKworICAg QSAtPiBCCisKKyAgIHdoZXJlIEEgYW5kIEIgYXJlIGRpZmZlcmVudCBsb2NrIGNsYXNzZXMuCisK K0FuZCBhZnRlciBhZGRpbmcgJ0IgLT4gQycsIHRoZSBncmFwaCB3aWxsIGJlOgorCisgICBBIC0+ IEIgLT4gQworCisgICB3aGVyZSBBLCBCIGFuZCBDIGFyZSBkaWZmZXJlbnQgbG9jayBjbGFzc2Vz LgorCitMZXQncyBwZXJmb3JtcyBjb21taXQgc3RlcCBldmVuIGZvciB0eXBpY2FsIGxvY2tzIHRv IGFkZCBkZXBlbmRlbmNpZXMuCitPZiBjb3Vyc2UsIGNvbW1pdCBzdGVwIGlzIG5vdCBuZWNlc3Nh cnkgZm9yIHRoZW0sIGhvd2V2ZXIsIGl0IHdvdWxkIHdvcmsKK3dlbGwgYmVjYXVzZSB0aGlzIGlz IGEgbW9yZSBnZW5lcmFsIHdheS4KKworICAgYWNxdWlyZSBBCisgICAvKgorICAgICogUXVldWUg QSBpbnRvIGhpc3RfbG9ja3MKKyAgICAqCisgICAgKiBJbiBoaXN0X2xvY2tzOiBBCisgICAgKiBJ biBncmFwaDogRW1wdHkKKyAgICAqLworCisgICBhY3F1aXJlIEIKKyAgIC8qCisgICAgKiBRdWV1 ZSBCIGludG8gaGlzdF9sb2NrcworICAgICoKKyAgICAqIEluIGhpc3RfbG9ja3M6IEEsIEIKKyAg ICAqIEluIGdyYXBoOiBFbXB0eQorICAgICovCisKKyAgIGFjcXVpcmUgQworICAgLyoKKyAgICAq IFF1ZXVlIEMgaW50byBoaXN0X2xvY2tzCisgICAgKgorICAgICogSW4gaGlzdF9sb2NrczogQSwg QiwgQworICAgICogSW4gZ3JhcGg6IEVtcHR5CisgICAgKi8KKworICAgY29tbWl0IEMKKyAgIC8q CisgICAgKiBBZGQgJ0MgLT4gPycKKyAgICAqIEFuc3dlciB0aGUgZm9sbG93aW5nIHRvIGRlY2lk ZSAnPycKKyAgICAqIFdoYXQgaGFzIGJlZW4gcXVldWVkIHNpbmNlIGFjcXVpcmUgQzogTm90aGlu ZworICAgICoKKyAgICAqIEluIGhpc3RfbG9ja3M6IEEsIEIsIEMKKyAgICAqIEluIGdyYXBoOiBF bXB0eQorICAgICovCisKKyAgIHJlbGVhc2UgQworCisgICBjb21taXQgQgorICAgLyoKKyAgICAq IEFkZCAnQiAtPiA/JworICAgICogQW5zd2VyIHRoZSBmb2xsb3dpbmcgdG8gZGVjaWRlICc/Jwor ICAgICogV2hhdCBoYXMgYmVlbiBxdWV1ZWQgc2luY2UgYWNxdWlyZSBCOiBDCisgICAgKgorICAg ICogSW4gaGlzdF9sb2NrczogQSwgQiwgQworICAgICogSW4gZ3JhcGg6ICdCIC0+IEMnCisgICAg Ki8KKworICAgcmVsZWFzZSBCCisKKyAgIGNvbW1pdCBBCisgICAvKgorICAgICogQWRkICdBIC0+ ID8nCisgICAgKiBBbnN3ZXIgdGhlIGZvbGxvd2luZyB0byBkZWNpZGUgJz8nCisgICAgKiBXaGF0 IGhhcyBiZWVuIHF1ZXVlZCBzaW5jZSBhY3F1aXJlIEE6IEIsIEMKKyAgICAqCisgICAgKiBJbiBo aXN0X2xvY2tzOiBBLCBCLCBDCisgICAgKiBJbiBncmFwaDogJ0IgLT4gQycsICdBIC0+IEInLCAn QSAtPiBDJworICAgICovCisKKyAgIHJlbGVhc2UgQQorCisgICB3aGVyZSBBLCBCIGFuZCBDIGFy ZSBkaWZmZXJlbnQgbG9jayBjbGFzc2VzLgorCitJbiB0aGlzIGNhc2UsIGRlcGVuZGVuY2llcyBh cmUgYWRkZWQgYXQgdGhlIGNvbW1pdCBzdGVwIGFzIGRlc2NyaWJlZC4KKworQWZ0ZXIgY29tbWl0 cyBmb3IgQSwgQiBhbmQgQywgdGhlIGdyYXBoIHdpbGwgYmU6CisKKyAgIEEgLT4gQiAtPiBDCisK KyAgIHdoZXJlIEEsIEIgYW5kIEMgYXJlIGRpZmZlcmVudCBsb2NrIGNsYXNzZXMuCisKKyAgIE5P VEU6IEEgZGVwZW5kZW5jeSAnQSAtPiBDJyBpcyBvcHRpbWl6ZWQgb3V0LgorCitXZSBjYW4gc2Vl IHRoZSBmb3JtZXIgZ3JhcGggYnVpbHQgd2l0aG91dCBjb21taXQgc3RlcCBpcyBzYW1lIGFzIHRo ZQorbGF0dGVyIGdyYXBoIGJ1aWx0IHVzaW5nIGNvbW1pdCBzdGVwcy4gT2YgY291cnNlIHRoZSBm b3JtZXIgd2F5IGxlYWRzIHRvCitlYXJsaWVyIGZpbmlzaCBmb3IgYnVpbGRpbmcgdGhlIGdyYXBo LCB3aGljaCBtZWFucyB3ZSBjYW4gZGV0ZWN0IGEKK2RlYWRsb2NrIG9yIGl0cyBwb3NzaWJpbGl0 eSBzb29uZXIuIFNvIHRoZSBmb3JtZXIgd2F5IHdvdWxkIGJlIHByZWZlcmVkCit3aGVuIHBvc3Np YmxlLiBCdXQgd2UgY2Fubm90IGF2b2lkIHVzaW5nIHRoZSBsYXR0ZXIgd2F5IGZvciBjcm9zc2xv Y2tzLgorCitMZXQncyBsb29rIGF0IGhvdyBjb21taXQgc3RlcHMgd29yayBmb3IgY3Jvc3Nsb2Nr cy4gSW4gdGhpcyBjYXNlLCB0aGUKK2NvbW1pdCBzdGVwIGlzIHBlcmZvcm1lZCBvbmx5IG9uIGNy b3NzbG9jayBBWCBhcyByZWFsLiBBbmQgaXQgYXNzdW1lcwordGhhdCB0aGUgQVggcmVsZWFzZSBj b250ZXh0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBBWCBhY3F1aXJlIGNvbnRleHQuCisKKyAgIEJY IFJFTEVBU0UgQ09OVEVYVAkJICAgQlggQUNRVUlSRSBDT05URVhUCisgICAtLS0tLS0tLS0tLS0t LS0tLS0JCSAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCSAgIGFjcXVpcmUgQQorCQkJCSAgIC8q CisJCQkJICAgICogUHVzaCBBIG9udG8gaGVsZF9sb2NrcworCQkJCSAgICAqIFF1ZXVlIEEgaW50 byBoaXN0X2xvY2tzCisJCQkJICAgICoKKwkJCQkgICAgKiBJbiBoZWxkX2xvY2tzOiBBCisJCQkJ ICAgICogSW4gaGlzdF9sb2NrczogQQorCQkJCSAgICAqIEluIGdyYXBoOiBFbXB0eQorCQkJCSAg ICAqLworCisJCQkJICAgYWNxdWlyZSBCWAorCQkJCSAgIC8qCisJCQkJICAgICogQWRkICd0aGUg dG9wIG9mIGhlbGRfbG9ja3MgLT4gQlgnCisJCQkJICAgICoKKwkJCQkgICAgKiBJbiBoZWxkX2xv Y2tzOiBBCisJCQkJICAgICogSW4gaGlzdF9sb2NrczogQQorCQkJCSAgICAqIEluIGdyYXBoOiAn QSAtPiBCWCcKKwkJCQkgICAgKi8KKworICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgICBJdCBtdXN0IGJlIGd1 YXJhbnRlZWQgdGhhdCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHNlZW4gYWZ0ZXIKKyAg IGFjcXVpcmluZyBCWCBnbG9iYWxseS4gSXQgY2FuIGJlIGRvbmUgYnkgdGhpbmdzIGxpa2UgYmFy cmllci4KKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgICBhY3F1aXJlIEMKKyAgIC8qCisgICAgKiBQdXNo IEMgb250byBoZWxkX2xvY2tzCisgICAgKiBRdWV1ZSBDIGludG8gaGlzdF9sb2NrcworICAgICoK KyAgICAqIEluIGhlbGRfbG9ja3M6IEMKKyAgICAqIEluIGhpc3RfbG9ja3M6IEMKKyAgICAqIElu IGdyYXBoOiAnQSAtPiBCWCcKKyAgICAqLworCisgICByZWxlYXNlIEMKKyAgIC8qCisgICAgKiBQ b3AgQyBmcm9tIGhlbGRfbG9ja3MKKyAgICAqCisgICAgKiBJbiBoZWxkX2xvY2tzOiBFbXB0eQor ICAgICogSW4gaGlzdF9sb2NrczogQworICAgICogSW4gZ3JhcGg6ICdBIC0+IEJYJworICAgICov CisJCQkJICAgYWNxdWlyZSBECisJCQkJICAgLyoKKwkJCQkgICAgKiBQdXNoIEQgb250byBoZWxk X2xvY2tzCisJCQkJICAgICogUXVldWUgRCBpbnRvIGhpc3RfbG9ja3MKKwkJCQkgICAgKiBBZGQg J3RoZSB0b3Agb2YgaGVsZF9sb2NrcyAtPiBEJworCQkJCSAgICAqCisJCQkJICAgICogSW4gaGVs ZF9sb2NrczogQSwgRAorCQkJCSAgICAqIEluIGhpc3RfbG9ja3M6IEEsIEQKKwkJCQkgICAgKiBJ biBncmFwaDogJ0EgLT4gQlgnLCAnQSAtPiBEJworCQkJCSAgICAqLworICAgYWNxdWlyZSBFCisg ICAvKgorICAgICogUHVzaCBFIG9udG8gaGVsZF9sb2NrcworICAgICogUXVldWUgRSBpbnRvIGhp c3RfbG9ja3MKKyAgICAqCisgICAgKiBJbiBoZWxkX2xvY2tzOiBFCisgICAgKiBJbiBoaXN0X2xv Y2tzOiBDLCBFCisgICAgKiBJbiBncmFwaDogJ0EgLT4gQlgnLCAnQSAtPiBEJworICAgICovCisK KyAgIHJlbGVhc2UgRQorICAgLyoKKyAgICAqIFBvcCBFIGZyb20gaGVsZF9sb2NrcworICAgICoK KyAgICAqIEluIGhlbGRfbG9ja3M6IEVtcHR5CisgICAgKiBJbiBoaXN0X2xvY2tzOiBELCBFCisg ICAgKiBJbiBncmFwaDogJ0EgLT4gQlgnLCAnQSAtPiBEJworICAgICovCisJCQkJICAgcmVsZWFz ZSBECisJCQkJICAgLyoKKwkJCQkgICAgKiBQb3AgRCBmcm9tIGhlbGRfbG9ja3MKKwkJCQkgICAg KgorCQkJCSAgICAqIEluIGhlbGRfbG9ja3M6IEEKKwkJCQkgICAgKiBJbiBoaXN0X2xvY2tzOiBB LCBECisJCQkJICAgICogSW4gZ3JhcGg6ICdBIC0+IEJYJywgJ0EgLT4gRCcKKwkJCQkgICAgKi8K KyAgIGNvbW1pdCBCWAorICAgLyoKKyAgICAqIEFkZCAnQlggLT4gPycKKyAgICAqIFdoYXQgaGFz IGJlZW4gcXVldWVkIHNpbmNlIGFjcXVpcmUgQlg6IEMsIEUKKyAgICAqCisgICAgKiBJbiBoZWxk X2xvY2tzOiBFbXB0eQorICAgICogSW4gaGlzdF9sb2NrczogRCwgRQorICAgICogSW4gZ3JhcGg6 ICdBIC0+IEJYJywgJ0EgLT4gRCcsCisgICAgKiAgICAgICAgICAgJ0JYIC0+IEMnLCAnQlggLT4g RScKKyAgICAqLworCisgICByZWxlYXNlIEJYCisgICAvKgorICAgICogSW4gaGVsZF9sb2Nrczog RW1wdHkKKyAgICAqIEluIGhpc3RfbG9ja3M6IEQsIEUKKyAgICAqIEluIGdyYXBoOiAnQSAtPiBC WCcsICdBIC0+IEQnLAorICAgICogICAgICAgICAgICdCWCAtPiBDJywgJ0JYIC0+IEUnCisgICAg Ki8KKwkJCQkgICByZWxlYXNlIEEKKwkJCQkgICAvKgorCQkJCSAgICAqIFBvcCBBIGZyb20gaGVs ZF9sb2NrcworCQkJCSAgICAqCisJCQkJICAgICogSW4gaGVsZF9sb2NrczogRW1wdHkKKwkJCQkg ICAgKiBJbiBoaXN0X2xvY2tzOiBBLCBECisJCQkJICAgICogSW4gZ3JhcGg6ICdBIC0+IEJYJywg J0EgLT4gRCcsCisJCQkJICAgICogICAgICAgICAgICdCWCAtPiBDJywgJ0JYIC0+IEUnCisJCQkJ ICAgICovCisKKyAgIHdoZXJlIEEsIEJYLCBDLC4uLiwgRSBhcmUgZGlmZmVyZW50IGxvY2sgY2xh c3NlcywgYW5kIGEgc3VmZml4ICdYJyBpcworICAgYWRkZWQgb24gY3Jvc3Nsb2Nrcy4KKworQ3Jv c3NyZWxlYXNlIGNvbnNpZGVycyBhbGwgYWNxdWlzaXRpb25zIGFmdGVyIGFjcWl1cmluZyBCWCBh cmUKK2NhbmRpZGF0ZXMgd2hpY2ggbWlnaHQgY3JlYXRlIGRlcGVuZGVuY2llcyB3aXRoIEJYLiBU cnVlIGRlcGVuZGVuY2llcword2lsbCBiZSBkZXRlcm1pbmVkIHdoZW4gaWRlbnRpZnlpbmcgdGhl IHJlbGVhc2UgY29udGV4dCBvZiBCWC4gTWVhbndoaWxlLAorYWxsIHR5cGljYWwgbG9ja3MgYXJl IHF1ZXVlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgYXQgdGhlIGNvbW1pdCBzdGVwLgorQW5k IHRoZW4gdHdvIGRlcGVuZGVuY2llcyAnQlggLT4gQycgYW5kICdCWCAtPiBFJyBhcmUgYWRkZWQg YXQgdGhlCitjb21taXQgc3RlcCB3aGVuIGlkZW50aWZ5aW5nIHRoZSByZWxlYXNlIGNvbnRleHQu CisKK1RoZSBmaW5hbCBncmFwaCB3aWxsIGJlLCB3aXRoIGNyb3NzcmVsZWFzZToKKworICAgICAg ICAgICAgICAgLT4gQworICAgICAgICAgICAgICAvCisgICAgICAgLT4gQlggLQorICAgICAgLyAg ICAgICBcCisgICBBIC0gICAgICAgICAtPiBFCisgICAgICBcCisgICAgICAgLT4gRAorCisgICB3 aGVyZSBBLCBCWCwgQywuLi4sIEUgYXJlIGRpZmZlcmVudCBsb2NrIGNsYXNzZXMsIGFuZCBhIHN1 ZmZpeCAnWCcgaXMKKyAgIGFkZGVkIG9uIGNyb3NzbG9ja3MuCisKK0hvd2V2ZXIsIHRoZSBmaW5h bCBncmFwaCB3aWxsIGJlLCB3aXRob3V0IGNyb3NzcmVsZWFzZToKKworICAgQSAtPiBECisKKyAg IHdoZXJlIEEgYW5kIEQgYXJlIGRpZmZlcmVudCBsb2NrIGNsYXNzZXMuCisKK1RoZSBmb3JtZXIg Z3JhcGggaGFzIHRocmVlIG1vcmUgZGVwZW5kZW5jaWVzLCAnQSAtPiBCWCcsICdCWCAtPiBDJyBh bmQKKydCWCAtPiBFJyBnaXZpbmcgYWRkaXRpb25hbCBvcHBvcnR1bml0aWVzIHRvIGNoZWNrIGlm IHRoZXkgY2F1c2UKK2RlYWRsb2Nrcy4gVGhpcyB3YXkgbG9ja2RlcCBjYW4gZGV0ZWN0IGEgZGVh ZGxvY2sgb3IgaXRzIHBvc3NpYmlsaXR5CitjYXVzZWQgYnkgY3Jvc3Nsb2Nrcy4KKworQ09OQ0xV U0lPTgorCitXZSBjaGVja2VkIGhvdyBjcm9zc3JlbGVhc2Ugd29ya3Mgd2l0aCBzZXZlcmFsIGV4 YW1wbGVzLgorCisKKz09PT09PT09PT09PT0KK09wdGltaXphdGlvbnMKKz09PT09PT09PT09PT0K KworQXZvaWQgZHVwbGljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0Nyb3NzcmVsZWFzZSBm ZWF0dXJlIHVzZXMgYSBjYWNoZSBsaWtlIHdoYXQgbG9ja2RlcCBhbHJlYWR5IHVzZXMgZm9yCitk ZXBlbmRlbmN5IGNoYWlucywgYnV0IHRoaXMgdGltZSBpdCdzIGZvciBjYWNoaW5nIENUIHR5cGUg ZGVwZW5kZW5jaWVzLgorT25jZSB0aGF0IGRlcGVuZGVuY3kgaXMgY2FjaGVkLCB0aGUgc2FtZSB3 aWxsIG5ldmVyIGJlIGFkZGVkIGFnYWluLgorCisKK0xvY2tsZXNzIGZvciBob3QgcGF0aHMKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8ga2VlcCBhbGwgbG9ja3MgZm9yIGxhdGVyIHVzZSBh dCB0aGUgY29tbWl0IHN0ZXAsIGNyb3NzcmVsZWFzZSBhZG9wdHMKK2EgbG9jYWwgYXJyYXkgZW1i ZWRkZWQgaW4gdGFza19zdHJ1Y3QsIHdoaWNoIG1ha2VzIGFjY2VzcyB0byB0aGUgZGF0YQorbG9j a2xlc3MgYnkgZm9yY2luZyBpdCB0byBoYXBwZW4gb25seSB3aXRoaW4gdGhlIG93bmVyIGNvbnRl eHQuIEl0J3MKK2xpa2UgaG93IGxvY2tkZXAgaGFuZGxlcyBoZWxkX2xvY2tzLiBMb2NrbGVzcyBp bXBsbWVudGF0aW9uIGlzIGltcG9ydGFudAorc2luY2UgdHlwaWNhbCBsb2NrcyBhcmUgdmVyeSBm cmVxdWVudGx5IGFjcXVpcmVkIGFuZCByZWxlYXNlZC4KKworCis9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBUFBFTkRJWCBBOiBXaGF0IGxvY2tkZXAg ZG9lcyB0byB3b3JrIGFnZ3Jlc2l2ZWx5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK0EgZGVhZGxvY2sgYWN0dWFsbHkgb2NjdXJzIHdoZW4gYWxs IHdhaXQgb3BlcmF0aW9ucyBjcmVhdGluZyBjaXJjdWxhcgorZGVwZW5kZW5jaWVzIHJ1biBhdCB0 aGUgc2FtZSB0aW1lLiBFdmVuIHRob3VnaCB0aGV5IGRvbid0LCBhIHBvdGVudGlhbAorZGVhZGxv Y2sgZXhpc3RzIGlmIHRoZSBwcm9ibGVtYXRpYyBkZXBlbmRlbmNpZXMgZXhpc3QuIFRodXMgaXQn cworbWVhbmluZ2Z1bCB0byBkZXRlY3Qgbm90IG9ubHkgYW4gYWN0dWFsIGRlYWRsb2NrIGJ1dCBh bHNvIGl0cyBwb3RlbnRpYWwKK3Bvc3NpYmlsaXR5LiBUaGUgbGF0dGVyIGlzIHJhdGhlciB2YWx1 YWJsZS4gV2hlbiBhIGRlYWRsb2NrIG9jY3VycworYWN0dWFsbHksIHdlIGNhbiBpZGVudGlmeSB3 aGF0IGhhcHBlbnMgaW4gdGhlIHN5c3RlbSBieSBzb21lIG1lYW5zIG9yCitvdGhlciBldmVuIHdp dGhvdXQgbG9ja2RlcC4gSG93ZXZlciwgdGhlcmUncyBubyB3YXkgdG8gZGV0ZWN0IHBvc3NpYmxp dHkKK3dpdGhvdXQgbG9ja2RlcCB1bmxlc3MgdGhlIHdob2xlIGNvZGUgaXMgcGFyc2VkIGluIGhl YWQuIEl0J3MgdGVycmlibGUuCitMb2NrZGVwIGRvZXMgdGhlIGJvdGgsIGFuZCBjcm9zc3JlbGVh c2Ugb25seSBmb2N1c2VzIG9uIHRoZSBsYXR0ZXIuCisKK1doZXRoZXIgb3Igbm90IGEgZGVhZGxv Y2sgYWN0dWFsbHkgb2NjdXJzIGRlcGVuZHMgb24gc2V2ZXJhbCBmYWN0b3JzLgorRm9yIGV4YW1w bGUsIHdoYXQgb3JkZXIgY29udGV4dHMgYXJlIHN3aXRjaGVkIGluIGlzIGEgZmFjdG9yLiBBc3N1 bWluZworY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGV4aXN0LCBhIGRlYWRsb2NrIHdvdWxkIG9jY3Vy IHdoZW4gY29udGV4dHMgYXJlCitzd2l0Y2hlZCBzbyB0aGF0IGFsbCB3YWl0IG9wZXJhdGlvbnMg Y3JlYXRpbmcgdGhlIGRlcGVuZGVuY2llcyBydW4KK3NpbXVsdGFuZW91c2x5LiBUaHVzIHRvIGRl dGVjdCBhIGRlYWRsb2NrIHBvc3NpYmlsaXR5IGV2ZW4gaW4gdGhlIGNhc2UKK3RoYXQgaXQgaGFz IG5vdCBvY2N1cmVkIHlldCwgbG9ja2RlcCBzaG91bGQgY29uc2lkZXIgYWxsIHBvc3NpYmxlCitj b21iaW5hdGlvbnMgb2YgZGVwZW5kZW5jaWVzLCB0cnlpbmcgdG86CisKKzEuIFVzZSBhIGdsb2Jh bCBkZXBlbmRlbmN5IGdyYXBoLgorCisgICBMb2NrZGVwIGNvbWJpbmVzIGFsbCBkZXBlbmRlbmNp ZXMgaW50byBvbmUgZ2xvYmFsIGdyYXBoIGFuZCB1c2VzIHRoZW0sCisgICByZWdhcmRsZXNzIG9m IHdoaWNoIGNvbnRleHQgZ2VuZXJhdGVzIHRoZW0gb3Igd2hhdCBvcmRlciBjb250ZXh0cyBhcmUK KyAgIHN3aXRjaGVkIGluLiBBZ2dyZWdhdGVkIGRlcGVuZGVuY2llcyBhcmUgb25seSBjb25zaWRl cmVkIHNvIHRoZXkgYXJlCisgICBwcm9uZSB0byBiZSBjaXJjdWxhciBpZiBhIHByb2JsZW0gZXhp c3RzLgorCisyLiBDaGVjayBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjbGFzc2VzIGluc3RlYWQgb2Yg aW5zdGFuY2VzLgorCisgICBXaGF0IGFjdHVhbGx5IGNhdXNlcyBhIGRlYWRsb2NrIGFyZSBpbnN0 YW5jZXMgb2YgbG9jay4gSG93ZXZlciwKKyAgIGxvY2tkZXAgY2hlY2tzIGRlcGVuZGVuY2llcyBi ZXR3ZWVuIGNsYXNzZXMgaW5zdGVhZCBvZiBpbnN0YW5jZXMuCisgICBUaGlzIHdheSBsb2NrZGVw IGNhbiBkZXRlY3QgYSBkZWFkbG9jayB3aGljaCBoYXMgbm90IGhhcHBlbmVkIGJ1dAorICAgbWln aHQgaGFwcGVuIGluIGZ1dHVyZSBieSBvdGhlcnMgYnV0IHRoZSBzYW1lIGNsYXNzLgorCiszLiBB c3N1bWUgYWxsIGFjcXVpc2l0aW9ucyBsZWFkIHRvIHdhaXRpbmcuCisKKyAgIEFsdGhvdWdoIGxv Y2tzIG1pZ2h0IGJlIGFjcXVpcmVkIHdpdGhvdXQgd2FpdGluZyB3aGljaCBpcyBlc3NlbnRpYWwK KyAgIHRvIGNyZWF0ZSBkZXBlbmRlbmNpZXMsIGxvY2tkZXAgYXNzdW1lcyBhbGwgYWNxdWlzaXRp b25zIGxlYWQgdG8KKyAgIHdhaXRpbmcgc2luY2UgaXQgbWlnaHQgYmUgdHJ1ZSBzb21lIHRpbWUg b3IgYW5vdGhlci4KKworQ09OQ0xVU0lPTgorCitMb2NrZGVwIGRldGVjdHMgbm90IG9ubHkgYW4g YWN0dWFsIGRlYWRsb2NrIGJ1dCBhbHNvIGl0cyBwb3NzaWJpbGl0eSwKK2FuZCB0aGUgbGF0dGVy IGlzIG1vcmUgdmFsdWFibGUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK0FQUEVORElYIEI6IEhvdyB0byBhdm9pZCBhZGRpbmcgZmFsc2Ug ZGVwZW5kZW5jaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCitSZW1pbmQgd2hhdCBhIGRlcGVuZGVuY3kgaXMuIEEgZGVwZW5kZW5jeSBleGlz dHMgaWY6CisKKyAgIDEuIFRoZXJlIGFyZSB0d28gd2FpdGVycyB3YWl0aW5nIGZvciBlYWNoIGV2 ZW50IGF0IGEgZ2l2ZW4gdGltZS4KKyAgIDIuIFRoZSBvbmx5IHdheSB0byB3YWtlIHVwIGVhY2gg d2FpdGVyIGlzIHRvIHRyaWdnZXIgaXRzIGV2ZW50LgorICAgMy4gV2hldGhlciBvbmUgY2FuIGJl IHdva2VuIHVwIGRlcGVuZHMgb24gd2hldGhlciB0aGUgb3RoZXIgY2FuLgorCitGb3IgZXhhbXBs ZToKKworICAgYWNxdWlyZSBBCisgICBhY3F1aXJlIEIgLyogQSBkZXBlbmRlbmN5ICdBIC0+IEIn IGV4aXN0cyAqLworICAgcmVsZWFzZSBCCisgICByZWxlYXNlIEEKKworICAgd2hlcmUgQSBhbmQg QiBhcmUgZGlmZmVyZW50IGxvY2sgY2xhc3Nlcy4KKworQSBkZXBlZGVuY3kgJ0EgLT4gQicgZXhp c3RzIHNpbmNlOgorCisgICAxLiBBIHdhaXRlciBmb3IgQSBhbmQgYSB3YWl0ZXIgZm9yIEIgbWln aHQgZXhpc3Qgd2hlbiBhY3F1aXJpbmcgQi4KKyAgIDIuIE9ubHkgd2F5IHRvIHdha2UgdXAgZWFj aCBpcyB0byByZWxlYXNlIHdoYXQgaXQgd2FpdHMgZm9yLgorICAgMy4gV2hldGhlciB0aGUgd2Fp dGVyIGZvciBBIGNhbiBiZSB3b2tlbiB1cCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlCisgICAgICBv dGhlciBjYW4uIElPVywgVEFTSyBYIGNhbm5vdCByZWxlYXNlIEEgaWYgaXQgZmFpbHMgdG8gYWNx dWlyZSBCLgorCitGb3IgYW5vdGhlciBleGFtcGxlOgorCisgICBUQVNLIFgJCQkgICBUQVNLIFkK KyAgIC0tLS0tLQkJCSAgIC0tLS0tLQorCQkJCSAgIGFjcXVpcmUgQVgKKyAgIGFjcXVpcmUgQiAv KiBBIGRlcGVuZGVuY3kgJ0FYIC0+IEInIGV4aXN0cyAqLworICAgcmVsZWFzZSBCCisgICByZWxl YXNlIEFYIGhlbGQgYnkgWQorCisgICB3aGVyZSBBWCBhbmQgQiBhcmUgZGlmZmVyZW50IGxvY2sg Y2xhc3NlcywgYW5kIGEgc3VmZml4ICdYJyBpcyBhZGRlZAorICAgb24gY3Jvc3Nsb2Nrcy4KKwor RXZlbiBpbiB0aGlzIGNhc2UgaW52b2x2aW5nIGNyb3NzbG9ja3MsIHRoZSBzYW1lIHJ1bGUgY2Fu IGJlIGFwcGxpZWQuIEEKK2RlcGVkZW5jeSAnQVggLT4gQicgZXhpc3RzIHNpbmNlOgorCisgICAx LiBBIHdhaXRlciBmb3IgQVggYW5kIGEgd2FpdGVyIGZvciBCIG1pZ2h0IGV4aXN0IHdoZW4gYWNx dWlyaW5nIEIuCisgICAyLiBPbmx5IHdheSB0byB3YWtlIHVwIGVhY2ggaXMgdG8gcmVsZWFzZSB3 aGF0IGl0IHdhaXRzIGZvci4KKyAgIDMuIFdoZXRoZXIgdGhlIHdhaXRlciBmb3IgQVggY2FuIGJl IHdva2VuIHVwIGRlcGVuZHMgb24gd2hldGhlciB0aGUKKyAgICAgIG90aGVyIGNhbi4gSU9XLCBU QVNLIFggY2Fubm90IHJlbGVhc2UgQVggaWYgaXQgZmFpbHMgdG8gYWNxdWlyZSBCLgorCitMZXQn cyB0YWtlIGEgbG9vayBhdCBtb3JlIGNvbXBsaWNhdGVkIGV4YW1wbGU6CisKKyAgIFRBU0sgWAkJ CSAgIFRBU0sgWQorICAgLS0tLS0tCQkJICAgLS0tLS0tCisgICBhY3F1aXJlIEIKKyAgIHJlbGVh c2UgQgorICAgZm9yayBZCisJCQkJICAgYWNxdWlyZSBBWAorICAgYWNxdWlyZSBDIC8qIEEgZGVw ZW5kZW5jeSAnQVggLT4gQycgZXhpc3RzICovCisgICByZWxlYXNlIEMKKyAgIHJlbGVhc2UgQVgg aGVsZCBieSBZCisKKyAgIHdoZXJlIEFYLCBCIGFuZCBDIGFyZSBkaWZmZXJlbnQgbG9jayBjbGFz c2VzLCBhbmQgYSBzdWZmaXggJ1gnIGlzCisgICBhZGRlZCBvbiBjcm9zc2xvY2tzLgorCitEb2Vz IGEgZGVwZW5kZW5jeSAnQVggLT4gQicgZXhpc3Q/IE5vcGUuCisKK1R3byB3YWl0ZXJzIGFyZSBl c3NlbnRpYWwgdG8gY3JlYXRlIGEgZGVwZW5kZW5jeS4gSG93ZXZlciwgd2FpdGVycyBmb3IKK0FY IGFuZCBCIHRvIGNyZWF0ZSAnQVggLT4gQicgY2Fubm90IGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUg aW4gdGhpcworZXhhbXBsZS4gVGh1cyB0aGUgZGVwZW5kZW5jeSAnQVggLT4gQicgY2Fubm90IGJl IGNyZWF0ZWQuCisKK0l0IHdvdWxkIGJlIGlkZWFsIGlmIHRoZSBmdWxsIHNldCBvZiB0cnVlIG9u ZXMgY2FuIGJlIGNvbnNpZGVyZWQuIEJ1dAord2UgY2FuIGVuc3VyZSBub3RoaW5nIGJ1dCB3aGF0 IGFjdHVhbGx5IGhhcHBlbmVkLiBSZWx5aW5nIG9uIHdoYXQKK2FjdHVhbGx5IGhhcHBlbnMgYXQg cnVudGltZSwgd2UgY2FuIGFueXdheSBhZGQgb25seSB0cnVlIG9uZXMsIHRob3VnaAordGhleSBt aWdodCBiZSBhIHN1YnNldCBvZiB0cnVlIG9uZXMuIEl0J3Mgc2ltaWxhciB0byBob3cgbG9ja2Rl cCB3b3JrcworZm9yIHR5cGljYWwgbG9ja3MuIFRoZXJlIG1pZ2h0IGJlIG1vcmUgdHJ1ZSBkZXBl bmRlbmNpZXMgdGhhbiB3aGF0Citsb2NrZGVwIGhhcyBkZXRlY3RlZCBpbiBydW50aW1lLiBMb2Nr ZGVwIGhhcyBubyBjaG9pY2UgYnV0IHRvIHJlbHkgb24KK3doYXQgYWN0dWFsbHkgaGFwcGVucy4g Q3Jvc3NyZWxlYXNlIGFsc28gcmVsaWVzIG9uIGl0LgorCitDT05DTFVTSU9OCisKK1JlbHlpbmcg b24gd2hhdCBhY3R1YWxseSBoYXBwZW5zLCBsb2NrZGVwIGNhbiBhdm9pZCBhZGRpbmcgZmFsc2UK K2RlcGVuZGVuY2llcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oIGIv aW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgKaW5kZXggNTE5ZTk0OTE1ZDE4Li4wNjYyYTQxN2Zl YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCisrKyBiL2luY2x1ZGUv bGludXgvY29tcGxldGlvbi5oCkBAIC0xMCw2ICsxMCw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxp bnV4L3dhaXQuaD4KKyNpZmRlZiBDT05GSUdfTE9DS0RFUF9DT01QTEVUSU9OUworI2luY2x1ZGUg PGxpbnV4L2xvY2tkZXAuaD4KKyNlbmRpZgogCiAvKgogICogc3RydWN0IGNvbXBsZXRpb24gLSBz dHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiBzdGF0ZSBmb3IgYSAiY29tcGxldGlvbiIKQEAgLTI2 LDE1ICsyOSw1OCBAQAogc3RydWN0IGNvbXBsZXRpb24gewogCXVuc2lnbmVkIGludCBkb25lOwog CXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisjaWZkZWYgQ09ORklHX0xPQ0tERVBfQ09NUExFVElP TlMKKwlzdHJ1Y3QgbG9ja2RlcF9tYXBfY3Jvc3MgbWFwOworI2VuZGlmCiB9OwogCisjaWZkZWYg Q09ORklHX0xPQ0tERVBfQ09NUExFVElPTlMKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9h Y3F1aXJlKHN0cnVjdCBjb21wbGV0aW9uICp4KQoreworCWxvY2tfYWNxdWlyZV9leGNsdXNpdmUo KHN0cnVjdCBsb2NrZGVwX21hcCAqKSZ4LT5tYXAsIDAsIDAsIE5VTEwsIF9SRVRfSVBfKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIGNvbXBsZXRlX3JlbGVhc2Uoc3RydWN0IGNvbXBsZXRpb24g KngpCit7CisJbG9ja19yZWxlYXNlKChzdHJ1Y3QgbG9ja2RlcF9tYXAgKikmeC0+bWFwLCAwLCBf UkVUX0lQXyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9yZWxlYXNlX2NvbW1p dChzdHJ1Y3QgY29tcGxldGlvbiAqeCkKK3sKKwlsb2NrX2NvbW1pdF9jcm9zc2xvY2soKHN0cnVj dCBsb2NrZGVwX21hcCAqKSZ4LT5tYXApOworfQorCisjZGVmaW5lIGluaXRfY29tcGxldGlvbl9t YXAoeCwgbSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJbG9ja2RlcF9pbml0X21hcF9jcm9zc2xv Y2soKHN0cnVjdCBsb2NrZGVwX21hcCAqKSYoeCktPm1hcCwJXAorCQkJKG0pLT5uYW1lLCAobSkt PmtleSwgMCk7CQkJCVwKKwlfX2luaXRfY29tcGxldGlvbih4KTsJCQkJCQlcCit9IHdoaWxlICgw KQorCisjZGVmaW5lIGluaXRfY29tcGxldGlvbih4KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJ c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQkJXAorCWxvY2tkZXBfaW5pdF9t YXBfY3Jvc3Nsb2NrKChzdHJ1Y3QgbG9ja2RlcF9tYXAgKikmKHgpLT5tYXAsCVwKKwkJCSIoY29t cGxldGlvbikiICN4LAkJCQlcCisJCQkmX19rZXksIDApOwkJCQkJXAorCV9faW5pdF9jb21wbGV0 aW9uKHgpOwkJCQkJCVwKK30gd2hpbGUgKDApCisjZWxzZQogI2RlZmluZSBpbml0X2NvbXBsZXRp b25fbWFwKHgsIG0pIF9faW5pdF9jb21wbGV0aW9uKHgpCiAjZGVmaW5lIGluaXRfY29tcGxldGlv bih4KSBfX2luaXRfY29tcGxldGlvbih4KQogc3RhdGljIGlubGluZSB2b2lkIGNvbXBsZXRlX2Fj cXVpcmUoc3RydWN0IGNvbXBsZXRpb24gKngpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgY29tcGxl dGVfcmVsZWFzZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBj b21wbGV0ZV9yZWxlYXNlX2NvbW1pdChzdHJ1Y3QgY29tcGxldGlvbiAqeCkge30KKyNlbmRpZgog CisjaWZkZWYgQ09ORklHX0xPQ0tERVBfQ09NUExFVElPTlMKKyNkZWZpbmUgQ09NUExFVElPTl9J TklUSUFMSVpFUih3b3JrKSBcCisJeyAwLCBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigo d29yaykud2FpdCksIFwKKwlTVEFUSUNfQ1JPU1NfTE9DS0RFUF9NQVBfSU5JVCgiKGNvbXBsZXRp b24pIiAjd29yaywgJih3b3JrKSkgfQorI2Vsc2UKICNkZWZpbmUgQ09NUExFVElPTl9JTklUSUFM SVpFUih3b3JrKSBcCiAJeyAwLCBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigod29yayku d2FpdCkgfQorI2VuZGlmCiAKICNkZWZpbmUgQ09NUExFVElPTl9JTklUSUFMSVpFUl9PTlNUQUNL X01BUCh3b3JrLCBtYXApIFwKIAkoKih7IGluaXRfY29tcGxldGlvbl9tYXAoJih3b3JrKSwgJiht YXApKTsgJih3b3JrKTsgfSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgg Yi9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgKaW5kZXggMjE2MTljOTJjMzc3Li5iZDFiZGE3MjQ4 YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xp bnV4L2lycWZsYWdzLmgKQEAgLTM4LDE4ICszOCwyMiBAQAogIyBkZWZpbmUgdHJhY2VfaGFyZGly cV9lbnRlcigpCQkJXAogZG8gewkJCQkJCVwKIAljdXJyZW50LT5oYXJkaXJxX2NvbnRleHQrKzsJ CVwKKwljcm9zc3JlbGVhc2VfaGlzdF9zdGFydChYSExPQ0tfSEFSRCk7CVwKIH0gd2hpbGUgKDAp CiAjIGRlZmluZSB0cmFjZV9oYXJkaXJxX2V4aXQoKQkJCVwKIGRvIHsJCQkJCQlcCiAJY3VycmVu dC0+aGFyZGlycV9jb250ZXh0LS07CQlcCisJY3Jvc3NyZWxlYXNlX2hpc3RfZW5kKFhITE9DS19I QVJEKTsJXAogfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfc29mdGlycV9lbnRlcigpCQlc CiBkbyB7CQkJCQkJXAogCWN1cnJlbnQtPnNvZnRpcnFfY29udGV4dCsrOwkJXAorCWNyb3NzcmVs ZWFzZV9oaXN0X3N0YXJ0KFhITE9DS19TT0ZUKTsJXAogfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxv Y2tkZXBfc29mdGlycV9leGl0KCkJCQlcCiBkbyB7CQkJCQkJXAogCWN1cnJlbnQtPnNvZnRpcnFf Y29udGV4dC0tOwkJXAorCWNyb3NzcmVsZWFzZV9oaXN0X2VuZChYSExPQ0tfU09GVCk7CVwKIH0g d2hpbGUgKDApCiAjZWxzZQogIyBkZWZpbmUgdHJhY2VfaGFyZGlycXNfb24oKQkJZG8geyB9IHdo aWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xp bnV4L2xvY2tkZXAuaAppbmRleCBiMGQwYjUxYzRkODUuLjU5Yjk3M2VlNGNlNSAxMDA2NDQKLS0t IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgK QEAgLTE1OCw2ICsxNTgsMTIgQEAgc3RydWN0IGxvY2tkZXBfbWFwIHsKIAlpbnQJCQkJY3B1Owog CXVuc2lnbmVkIGxvbmcJCQlpcDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19MT0NLREVQX0NST1NT UkVMRUFTRQorCS8qCisJICogV2hldGhlciBpdCdzIGEgY3Jvc3Nsb2NrLgorCSAqLworCWludAkJ CQljcm9zczsKKyNlbmRpZgogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfY29weV9t YXAoc3RydWN0IGxvY2tkZXBfbWFwICp0bywKQEAgLTI2MSw4ICsyNjcsOTUgQEAgc3RydWN0IGhl bGRfbG9jayB7CiAJdW5zaWduZWQgaW50IGhhcmRpcnFzX29mZjoxOwogCXVuc2lnbmVkIGludCBy ZWZlcmVuY2VzOjEyOwkJCQkJLyogMzIgYml0cyAqLwogCXVuc2lnbmVkIGludCBwaW5fY291bnQ7 CisjaWZkZWYgQ09ORklHX0xPQ0tERVBfQ1JPU1NSRUxFQVNFCisJLyoKKwkgKiBHZW5lcmF0aW9u IGlkLgorCSAqCisJICogQSB2YWx1ZSBvZiBjcm9zc19nZW5faWQgd2lsbCBiZSBzdG9yZWQgd2hl biBob2xkaW5nIHRoaXMsCisJICogd2hpY2ggaXMgZ2xvYmFsbHkgaW5jcmVhc2VkIHdoZW5ldmVy IGVhY2ggY3Jvc3Nsb2NrIGlzIGhlbGQuCisJICovCisJdW5zaWduZWQgaW50IGdlbl9pZDsKKyNl bmRpZgorfTsKKworI2lmZGVmIENPTkZJR19MT0NLREVQX0NST1NTUkVMRUFTRQorI2RlZmluZSBN QVhfWEhMT0NLX1RSQUNFX0VOVFJJRVMgNQorCisvKgorICogVGhpcyBpcyBmb3Iga2VlcGluZyBs b2NrcyB3YWl0aW5nIGZvciBjb21taXQgc28gdGhhdCB0cnVlIGRlcGVuZGVuY2llcworICogY2Fu IGJlIGFkZGVkIGF0IGNvbW1pdCBzdGVwLgorICovCitzdHJ1Y3QgaGlzdF9sb2NrIHsKKwkvKgor CSAqIElkIGZvciBlYWNoIGVudHJ5IGluIHRoZSByaW5nIGJ1ZmZlci4gVGhpcyBpcyB1c2VkIHRv CisJICogZGVjaWRlIHdoZXRoZXIgdGhlIHJpbmcgYnVmZmVyIHdhcyBvdmVyd3JpdHRlbiBvciBu b3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwKKwkgKgorCSAqICAgICAgICAgICB8PC0tLS0tLS0t LS0tIGhpc3RfbG9jayByaW5nIGJ1ZmZlciBzaXplIC0tLS0tLS0+fAorCSAqICAgICAgICAgICBw cHBwcHBwcHBwcHBwcHBwcHBwcHBpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaQorCSAqIHdy YXBwZWQgPiBpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWkuLi4uLi4uLi4uLi4uLi4uLi4uLi4u LgorCSAqCisJICogICAgICAgICAgIHdoZXJlICdwJyByZXByZXNlbnRzIGFuIGFjcXVpc2l0aW9u IGluIHByb2Nlc3MKKwkgKiAgICAgICAgICAgY29udGV4dCwgJ2knIHJlcHJlc2VudHMgYW4gYWNx dWlzaXRpb24gaW4gaXJxCisJICogICAgICAgICAgIGNvbnRleHQuCisJICoKKwkgKiBJbiB0aGlz IGV4YW1wbGUsIHRoZSByaW5nIGJ1ZmZlciB3YXMgb3ZlcndyaXR0ZW4gYnkKKwkgKiBhY3F1aXNp dGlvbnMgaW4gaXJxIGNvbnRleHQsIHRoYXQgc2hvdWxkIGJlIGRldGVjdGVkIG9uCisJICogcm9s bGJhY2sgb3IgY29tbWl0LgorCSAqLworCXVuc2lnbmVkIGludCBoaXN0X2lkOworCisJLyoKKwkg KiBTZXBlcmF0ZSBzdGFja190cmFjZSBkYXRhLiBUaGlzIHdpbGwgYmUgdXNlZCBhdCBjb21taXQg c3RlcC4KKwkgKi8KKwlzdHJ1Y3Qgc3RhY2tfdHJhY2UJdHJhY2U7CisJdW5zaWduZWQgbG9uZwkJ dHJhY2VfZW50cmllc1tNQVhfWEhMT0NLX1RSQUNFX0VOVFJJRVNdOworCisJLyoKKwkgKiBTZXBl cmF0ZSBobG9jayBpbnN0YW5jZS4gVGhpcyB3aWxsIGJlIHVzZWQgYXQgY29tbWl0IHN0ZXAuCisJ ICoKKwkgKiBUT0RPOiBVc2UgYSBzbWFsbGVyIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgb25s eSBuZWNlc3NhcnkKKwkgKiBkYXRhLiBIb3dldmVyLCB3ZSBzaG91bGQgbWFrZSBsb2NrZGVwIGNv ZGUgYWJsZSB0byBoYW5kbGUgdGhlCisJICogc21hbGxlciBvbmUgZmlyc3QuCisJICovCisJc3Ry dWN0IGhlbGRfbG9jawlobG9jazsKIH07CiAKKy8qCisgKiBUbyBpbml0aWFsaXplIGEgbG9jayBh cyBjcm9zc2xvY2ssIGxvY2tkZXBfaW5pdF9tYXBfY3Jvc3Nsb2NrKCkgc2hvdWxkCisgKiBiZSBj YWxsZWQgaW5zdGVhZCBvZiBsb2NrZGVwX2luaXRfbWFwKCkuCisgKi8KK3N0cnVjdCBjcm9zc19s b2NrIHsKKwkvKgorCSAqIFdoZW4gbW9yZSB0aGFuIG9uZSBhY3F1aXNpdGlvbiBvZiBjcm9zc2xv Y2tzIGFyZSBvdmVybGFwcGVkLAorCSAqIHdlIGhhdmUgdG8gcGVyZm9ybSBjb21taXQgZm9yIHRo ZW0gYmFzZWQgb24gY3Jvc3NfZ2VuX2lkIG9mCisJICogdGhlIGZpcnN0IGFjcXVpc2l0aW9uLCB3 aGljaCBhbGxvd3MgdXMgdG8gYWRkIG1vcmUgdHJ1ZQorCSAqIGRlcGVuZGVuY2llcy4KKwkgKgor CSAqIE1vcmVvdmVyLCB3aGVuIG5vIGFjcXVpc2l0aW9uIG9mIGEgY3Jvc3Nsb2NrIGlzIGluIHBy b2dyZXNzLAorCSAqIHdlIHNob3VsZCBub3QgcGVyZm9ybSBjb21taXQgYmVjYXVzZSB0aGUgbG9j ayBtaWdodCBub3QgZXhpc3QKKwkgKiBhbnkgbW9yZSwgd2hpY2ggbWlnaHQgY2F1c2UgaW5jb3Jy ZWN0IG1lbW9yeSBhY2Nlc3MuIFNvIHdlCisJICogaGF2ZSB0byB0cmFjayB0aGUgbnVtYmVyIG9m IGFjcXVpc2l0aW9ucyBvZiBhIGNyb3NzbG9jay4KKwkgKi8KKwlpbnQgbnJfYWNxdWlyZTsKKwor CS8qCisJICogU2VwZXJhdGUgaGxvY2sgaW5zdGFuY2UuIFRoaXMgd2lsbCBiZSB1c2VkIGF0IGNv bW1pdCBzdGVwLgorCSAqCisJICogVE9ETzogVXNlIGEgc21hbGxlciBkYXRhIHN0cnVjdHVyZSBj b250YWluaW5nIG9ubHkgbmVjZXNzYXJ5CisJICogZGF0YS4gSG93ZXZlciwgd2Ugc2hvdWxkIG1h a2UgbG9ja2RlcCBjb2RlIGFibGUgdG8gaGFuZGxlIHRoZQorCSAqIHNtYWxsZXIgb25lIGZpcnN0 LgorCSAqLworCXN0cnVjdCBoZWxkX2xvY2sJaGxvY2s7Cit9OworCitzdHJ1Y3QgbG9ja2RlcF9t YXBfY3Jvc3MgeworCXN0cnVjdCBsb2NrZGVwX21hcCBtYXA7CisJc3RydWN0IGNyb3NzX2xvY2sg eGxvY2s7Cit9OworI2VuZGlmCisKIC8qCiAgKiBJbml0aWFsaXphdGlvbiwgc2VsZi10ZXN0IGFu ZCBkZWJ1Z2dpbmctb3V0cHV0IG1ldGhvZHM6CiAgKi8KQEAgLTQ2NCw2ICs1NTcsMzcgQEAgZW51 bSB4aGxvY2tfY29udGV4dF90IHsKIAlYSExPQ0tfQ1RYX05SLAogfTsKIAorI2lmZGVmIENPTkZJ R19MT0NLREVQX0NST1NTUkVMRUFTRQorZXh0ZXJuIHZvaWQgbG9ja2RlcF9pbml0X21hcF9jcm9z c2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpu YW1lLAorCQkJCSAgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKKwkJCQkgICAgICAg aW50IHN1YmNsYXNzKTsKK2V4dGVybiB2b2lkIGxvY2tfY29tbWl0X2Nyb3NzbG9jayhzdHJ1Y3Qg bG9ja2RlcF9tYXAgKmxvY2spOworCisvKgorICogV2hhdCB3ZSBlc3NlbmNpYWxseSBoYXZlIHRv IGluaXRpYWxpemUgaXMgJ25yX2FjcXVpcmUnLiBPdGhlciBtZW1iZXJzCisgKiB3aWxsIGJlIGlu aXRpYWxpemVkIGluIGFkZF94bG9jaygpLgorICovCisjZGVmaW5lIFNUQVRJQ19DUk9TU19MT0NL X0lOSVQoKSBcCisJeyAubnJfYWNxdWlyZSA9IDAsfQorCisjZGVmaW5lIFNUQVRJQ19DUk9TU19M T0NLREVQX01BUF9JTklUKF9uYW1lLCBfa2V5KSBcCisJeyAubWFwLm5hbWUgPSAoX25hbWUpLCAu bWFwLmtleSA9ICh2b2lkICopKF9rZXkpLCBcCisJICAubWFwLmNyb3NzID0gMSwgLnhsb2NrID0g U1RBVElDX0NST1NTX0xPQ0tfSU5JVCgpLCB9CisKKy8qCisgKiBUbyBpbml0aWFsaXplIGEgbG9j a2RlcF9tYXAgc3RhdGljYWxseSB1c2UgdGhpcyBtYWNyby4KKyAqIE5vdGUgdGhhdCBfbmFtZSBt dXN0IG5vdCBiZSBOVUxMLgorICovCisjZGVmaW5lIFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9u YW1lLCBfa2V5KSBcCisJeyAubmFtZSA9IChfbmFtZSksIC5rZXkgPSAodm9pZCAqKShfa2V5KSwg LmNyb3NzID0gMCwgfQorCitleHRlcm4gdm9pZCBjcm9zc3JlbGVhc2VfaGlzdF9zdGFydChlbnVt IHhobG9ja19jb250ZXh0X3QgYyk7CitleHRlcm4gdm9pZCBjcm9zc3JlbGVhc2VfaGlzdF9lbmQo ZW51bSB4aGxvY2tfY29udGV4dF90IGMpOworZXh0ZXJuIHZvaWQgbG9ja2RlcF9pbnZhcmlhbnRf c3RhdGUoYm9vbCBmb3JjZSk7CitleHRlcm4gdm9pZCBsb2NrZGVwX2luaXRfdGFzayhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHZvaWQgbG9ja2RlcF9mcmVlX3Rhc2soc3RydWN0 IHRhc2tfc3RydWN0ICp0YXNrKTsKKyNlbHNlIC8qICFDUk9TU1JFTEVBU0UgKi8KICNkZWZpbmUg bG9ja2RlcF9pbml0X21hcF9jcm9zc2xvY2sobSwgbiwgaywgcykgZG8ge30gd2hpbGUgKDApCiAv KgogICogVG8gaW5pdGlhbGl6ZSBhIGxvY2tkZXBfbWFwIHN0YXRpY2FsbHkgdXNlIHRoaXMgbWFj cm8uCkBAIC00NzIsOSArNTk2LDEyIEBAIGVudW0geGhsb2NrX2NvbnRleHRfdCB7CiAjZGVmaW5l IFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9uYW1lLCBfa2V5KSBcCiAJeyAubmFtZSA9IChfbmFt ZSksIC5rZXkgPSAodm9pZCAqKShfa2V5KSwgfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY3Jvc3Ny ZWxlYXNlX2hpc3Rfc3RhcnQoZW51bSB4aGxvY2tfY29udGV4dF90IGMpIHt9CitzdGF0aWMgaW5s aW5lIHZvaWQgY3Jvc3NyZWxlYXNlX2hpc3RfZW5kKGVudW0geGhsb2NrX2NvbnRleHRfdCBjKSB7 fQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfaW52YXJpYW50X3N0YXRlKGJvb2wgZm9yY2Up IHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3Ry dWN0ICp0YXNrKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfZnJlZV90YXNrKHN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzaykge30KKyNlbmRpZiAvKiBDUk9TU1JFTEVBU0UgKi8KIAogI2lm ZGVmIENPTkZJR19MT0NLX1NUQVQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5o IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDk3N2NiNTdkN2JjOS4uMTU1Yzc2OTBlYjE1 IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9z Y2hlZC5oCkBAIC05MzYsNiArOTM2LDE3IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7CiAJc3RydWN0 IGhlbGRfbG9jawkJaGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07CiAjZW5kaWYKIAorI2lmZGVm IENPTkZJR19MT0NLREVQX0NST1NTUkVMRUFTRQorI2RlZmluZSBNQVhfWEhMT0NLU19OUiA2NFVM CisJc3RydWN0IGhpc3RfbG9jayAqeGhsb2NrczsgLyogQ3Jvc3NyZWxlYXNlIGhpc3RvcnkgbG9j a3MgKi8KKwl1bnNpZ25lZCBpbnQgeGhsb2NrX2lkeDsKKwkvKiBGb3IgcmVzdG9yaW5nIGF0IGhp c3RvcnkgYm91bmRhcmllcyAqLworCXVuc2lnbmVkIGludCB4aGxvY2tfaWR4X2hpc3RbWEhMT0NL X0NUWF9OUl07CisJdW5zaWduZWQgaW50IGhpc3RfaWQ7CisJLyogRm9yIG92ZXJ3cml0ZSBjaGVj ayBhdCBlYWNoIGNvbnRleHQgZXhpdCAqLworCXVuc2lnbmVkIGludCBoaXN0X2lkX3NhdmVbWEhM T0NLX0NUWF9OUl07CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19VQlNBTgogCXVuc2lnbmVkIGlu dAkJCWluX3Vic2FuOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVw LmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggZGQxM2Y4NjVhZDQwLi5jNGQwZmUz NTM4ZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYworKysgYi9rZXJuZWwv bG9ja2luZy9sb2NrZGVwLmMKQEAgLTU4LDYgKzU4LDEwIEBACiAjZGVmaW5lIENSRUFURV9UUkFD RV9QT0lOVFMKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvbG9jay5oPgogCisjaWZkZWYgQ09ORklH X0xPQ0tERVBfQ1JPU1NSRUxFQVNFCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2VuZGlmCisK ICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwogaW50IHByb3ZlX2xvY2tpbmcgPSAxOwogbW9k dWxlX3BhcmFtKHByb3ZlX2xvY2tpbmcsIGludCwgMDY0NCk7CkBAIC03Miw2ICs3NiwxOSBAQCBt b2R1bGVfcGFyYW0obG9ja19zdGF0LCBpbnQsIDA2NDQpOwogI2RlZmluZSBsb2NrX3N0YXQgMAog I2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQk9PVFBBUkFNX0xPQ0tERVBfQ1JPU1NSRUxFQVNFX0ZV TExTVEFDSworc3RhdGljIGludCBjcm9zc3JlbGVhc2VfZnVsbHN0YWNrID0gMTsKKyNlbHNlCitz dGF0aWMgaW50IGNyb3NzcmVsZWFzZV9mdWxsc3RhY2s7CisjZW5kaWYKK3N0YXRpYyBpbnQgX19p bml0IGFsbG93X2Nyb3NzcmVsZWFzZV9mdWxsc3RhY2soY2hhciAqc3RyKQoreworCWNyb3NzcmVs ZWFzZV9mdWxsc3RhY2sgPSAxOworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgiY3Jvc3Ny ZWxlYXNlX2Z1bGxzdGFjayIsIGFsbG93X2Nyb3NzcmVsZWFzZV9mdWxsc3RhY2spOworCiAvKgog ICogbG9ja2RlcF9sb2NrOiBwcm90ZWN0cyB0aGUgbG9ja2RlcCBncmFwaCwgdGhlIGhhc2hlcyBh bmQgdGhlCiAgKiAgICAgICAgICAgICAgIGNsYXNzL2xpc3QvaGFzaCBhbGxvY2F0b3JzLgpAQCAt NzMxLDYgKzc0OCwxOCBAQCBzdGF0aWMgYm9vbCBhc3NpZ25fbG9ja19rZXkoc3RydWN0IGxvY2tk ZXBfbWFwICpsb2NrKQogCXJldHVybiB0cnVlOwogfQogCisjaWZkZWYgQ09ORklHX0xPQ0tERVBf Q1JPU1NSRUxFQVNFCitzdGF0aWMgdm9pZCBjcm9zc19pbml0KHN0cnVjdCBsb2NrZGVwX21hcCAq bG9jaywgaW50IGNyb3NzKTsKK3N0YXRpYyBpbnQgY3Jvc3NfbG9jayhzdHJ1Y3QgbG9ja2RlcF9t YXAgKmxvY2spOworc3RhdGljIGludCBsb2NrX2FjcXVpcmVfY3Jvc3Nsb2NrKHN0cnVjdCBoZWxk X2xvY2sgKmhsb2NrKTsKK3N0YXRpYyBpbnQgbG9ja19yZWxlYXNlX2Nyb3NzbG9jayhzdHJ1Y3Qg bG9ja2RlcF9tYXAgKmxvY2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcm9zc19pbml0 KHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IGNyb3NzKSB7fQorc3RhdGljIGlubGluZSBp bnQgY3Jvc3NfbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spIHsgcmV0dXJuIDA7IH0KK3N0 YXRpYyBpbmxpbmUgaW50IGxvY2tfYWNxdWlyZV9jcm9zc2xvY2soc3RydWN0IGhlbGRfbG9jayAq aGxvY2spIHsgcmV0dXJuIDI7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tfcmVsZWFzZV9jcm9z c2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKSB7IHJldHVybiAyOyB9CisjZW5kaWYKKwog LyoKICAqIFJlZ2lzdGVyIGEgbG9jaydzIGNsYXNzIGluIHRoZSBoYXNoLXRhYmxlLCBpZiB0aGUg Y2xhc3MgaXMgbm90IHByZXNlbnQKICAqIHlldC4gT3RoZXJ3aXNlIHdlIGxvb2sgaXQgdXAuIFdl IGNhY2hlIHRoZSByZXN1bHQgaW4gdGhlIGxvY2sgb2JqZWN0CkBAIC0xMTI1LDIyICsxMTU0LDQx IEBAIHByaW50X2NpcmN1bGFyX2xvY2tfc2NlbmFyaW8oc3RydWN0IGhlbGRfbG9jayAqc3JjLAog CQlwcmludGsoS0VSTl9DT05UICJcblxuIik7CiAJfQogCi0JcHJpbnRrKCIgUG9zc2libGUgdW5z YWZlIGxvY2tpbmcgc2NlbmFyaW86XG5cbiIpOwotCXByaW50aygiICAgICAgIENQVTAgICAgICAg ICAgICAgICAgICAgIENQVTFcbiIpOwotCXByaW50aygiICAgICAgIC0tLS0gICAgICAgICAgICAg ICAgICAgIC0tLS1cbiIpOwotCXByaW50aygiICBsb2NrKCIpOwotCV9fcHJpbnRfbG9ja19uYW1l KHRhcmdldCk7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiKTtcbiIpOwotCXByaW50aygiICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxvY2soIik7Ci0JX19wcmludF9sb2NrX25hbWUocGFyZW50 KTsKLQlwcmludGsoS0VSTl9DT05UICIpO1xuIik7Ci0JcHJpbnRrKCIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbG9jaygiKTsKLQlfX3ByaW50X2xvY2tfbmFtZSh0YXJnZXQpOwotCXBy aW50ayhLRVJOX0NPTlQgIik7XG4iKTsKLQlwcmludGsoIiAgbG9jaygiKTsKLQlfX3ByaW50X2xv Y2tfbmFtZShzb3VyY2UpOwotCXByaW50ayhLRVJOX0NPTlQgIik7XG4iKTsKLQlwcmludGsoIlxu ICoqKiBERUFETE9DSyAqKipcblxuIik7CisJaWYgKGNyb3NzX2xvY2sodGd0LT5pbnN0YW5jZSkp IHsKKwkJcHJpbnRrKCIgUG9zc2libGUgdW5zYWZlIGxvY2tpbmcgc2NlbmFyaW8gYnkgY3Jvc3Ns b2NrOlxuXG4iKTsKKwkJcHJpbnRrKCIgICAgICAgQ1BVMCAgICAgICAgICAgICAgICAgICAgQ1BV MVxuIik7CisJCXByaW50aygiICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS1cbiIp OworCQlwcmludGsoIiAgbG9jaygiKTsKKwkJX19wcmludF9sb2NrX25hbWUocGFyZW50KTsKKwkJ cHJpbnRrKEtFUk5fQ09OVCAiKTtcbiIpOworCQlwcmludGsoIiAgbG9jaygiKTsKKwkJX19wcmlu dF9sb2NrX25hbWUodGFyZ2V0KTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKTtcbiIpOworCQlwcmlu dGsoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKCIpOworCQlfX3ByaW50X2xv Y2tfbmFtZShzb3VyY2UpOworCQlwcmludGsoS0VSTl9DT05UICIpO1xuIik7CisJCXByaW50aygi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubG9jaygiKTsKKwkJX19wcmludF9sb2Nr X25hbWUodGFyZ2V0KTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKTtcbiIpOworCQlwcmludGsoIlxu ICoqKiBERUFETE9DSyAqKipcblxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgUG9zc2libGUg dW5zYWZlIGxvY2tpbmcgc2NlbmFyaW86XG5cbiIpOworCQlwcmludGsoIiAgICAgICBDUFUwICAg ICAgICAgICAgICAgICAgICBDUFUxXG4iKTsKKwkJcHJpbnRrKCIgICAgICAgLS0tLSAgICAgICAg ICAgICAgICAgICAgLS0tLVxuIik7CisJCXByaW50aygiICBsb2NrKCIpOworCQlfX3ByaW50X2xv Y2tfbmFtZSh0YXJnZXQpOworCQlwcmludGsoS0VSTl9DT05UICIpO1xuIik7CisJCXByaW50aygi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2soIik7CisJCV9fcHJpbnRfbG9ja19u YW1lKHBhcmVudCk7CisJCXByaW50ayhLRVJOX0NPTlQgIik7XG4iKTsKKwkJcHJpbnRrKCIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygiKTsKKwkJX19wcmludF9sb2NrX25hbWUo dGFyZ2V0KTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKTtcbiIpOworCQlwcmludGsoIiAgbG9jaygi KTsKKwkJX19wcmludF9sb2NrX25hbWUoc291cmNlKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKTtc biIpOworCQlwcmludGsoIlxuICoqKiBERUFETE9DSyAqKipcblxuIik7CisJfQogfQogCiAvKgpA QCAtMTE2Niw3ICsxMjE0LDEwIEBAIHByaW50X2NpcmN1bGFyX2J1Z19oZWFkZXIoc3RydWN0IGxv Y2tfbGlzdCAqZW50cnksIHVuc2lnbmVkIGludCBkZXB0aCwKIAkJY3Vyci0+Y29tbSwgdGFza19w aWRfbnIoY3VycikpOwogCXByaW50X2xvY2soY2hlY2tfc3JjKTsKIAotCXByX3dhcm4oIlxuYnV0 IHRhc2sgaXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6XG4iKTsKKwlpZiAoY3Jvc3NfbG9jayhjaGVj a190Z3QtPmluc3RhbmNlKSkKKwkJcHJfd2FybigiXG5idXQgbm93IGluIHJlbGVhc2UgY29udGV4 dCBvZiBhIGNyb3NzbG9jayBhY3F1aXJlZCBhdCB0aGUgZm9sbG93aW5nOlxuIik7CisJZWxzZQor CQlwcl93YXJuKCJcbmJ1dCB0YXNrIGlzIGFscmVhZHkgaG9sZGluZyBsb2NrOlxuIik7CiAKIAlw cmludF9sb2NrKGNoZWNrX3RndCk7CiAJcHJfd2FybigiXG53aGljaCBsb2NrIGFscmVhZHkgZGVw ZW5kcyBvbiB0aGUgbmV3IGxvY2suXG5cbiIpOwpAQCAtMTE5Niw3ICsxMjQ3LDkgQEAgc3RhdGlj IG5vaW5saW5lIGludCBwcmludF9jaXJjdWxhcl9idWcoc3RydWN0IGxvY2tfbGlzdCAqdGhpcywK IAlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSB8fCBkZWJ1Z19sb2Nrc19zaWxl bnQpCiAJCXJldHVybiAwOwogCi0JaWYgKCFzYXZlX3RyYWNlKCZ0aGlzLT50cmFjZSkpCisJaWYg KGNyb3NzX2xvY2soY2hlY2tfdGd0LT5pbnN0YW5jZSkpCisJCXRoaXMtPnRyYWNlID0gKnRyYWNl OworCWVsc2UgaWYgKCFzYXZlX3RyYWNlKCZ0aGlzLT50cmFjZSkpCiAJCXJldHVybiAwOwogCiAJ ZGVwdGggPSBnZXRfbG9ja19kZXB0aCh0YXJnZXQpOwpAQCAtMTgwMCw2ICsxODUzLDkgQEAgY2hl Y2tfZGVhZGxvY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICpu ZXh0LAogCQlpZiAobmVzdCkKIAkJCXJldHVybiAyOwogCisJCWlmIChjcm9zc19sb2NrKHByZXYt Pmluc3RhbmNlKSkKKwkJCWNvbnRpbnVlOworCiAJCXJldHVybiBwcmludF9kZWFkbG9ja19idWco Y3VyciwgcHJldiwgbmV4dCk7CiAJfQogCXJldHVybiAxOwpAQCAtMTk2NSwyNiArMjAyMSwzMSBA QCBjaGVja19wcmV2c19hZGQoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9s b2NrICpuZXh0KQogCWZvciAoOzspIHsKIAkJaW50IGRpc3RhbmNlID0gY3Vyci0+bG9ja2RlcF9k ZXB0aCAtIGRlcHRoICsgMTsKIAkJaGxvY2sgPSBjdXJyLT5oZWxkX2xvY2tzICsgZGVwdGggLSAx OwotCiAJCS8qCi0JCSAqIE9ubHkgbm9uLXJlY3Vyc2l2ZS1yZWFkIGVudHJpZXMgZ2V0IG5ldyBk ZXBlbmRlbmNpZXMKLQkJICogYWRkZWQ6CisJCSAqIE9ubHkgbm9uLWNyb3NzbG9jayBlbnRyaWVz IGdldCBuZXcgZGVwZW5kZW5jaWVzIGFkZGVkLgorCQkgKiBDcm9zc2xvY2sgZW50cmllcyB3aWxs IGJlIGFkZGVkIGJ5IGNvbW1pdCBsYXRlcjoKIAkJICovCi0JCWlmIChobG9jay0+cmVhZCAhPSAy ICYmIGhsb2NrLT5jaGVjaykgewotCQkJaW50IHJldCA9IGNoZWNrX3ByZXZfYWRkKGN1cnIsIGhs b2NrLCBuZXh0LCBkaXN0YW5jZSwgJnRyYWNlLCBzYXZlX3RyYWNlKTsKLQkJCWlmICghcmV0KQot CQkJCXJldHVybiAwOwotCisJCWlmICghY3Jvc3NfbG9jayhobG9jay0+aW5zdGFuY2UpKSB7CiAJ CQkvKgotCQkJICogU3RvcCBhZnRlciB0aGUgZmlyc3Qgbm9uLXRyeWxvY2sgZW50cnksCi0JCQkg KiBhcyBub24tdHJ5bG9jayBlbnRyaWVzIGhhdmUgYWRkZWQgdGhlaXIKLQkJCSAqIG93biBkaXJl Y3QgZGVwZW5kZW5jaWVzIGFscmVhZHksIHNvIHRoaXMKLQkJCSAqIGxvY2sgaXMgY29ubmVjdGVk IHRvIHRoZW0gaW5kaXJlY3RseToKKwkJCSAqIE9ubHkgbm9uLXJlY3Vyc2l2ZS1yZWFkIGVudHJp ZXMgZ2V0IG5ldyBkZXBlbmRlbmNpZXMKKwkJCSAqIGFkZGVkOgogCQkJICovCi0JCQlpZiAoIWhs b2NrLT50cnlsb2NrKQotCQkJCWJyZWFrOwotCQl9CisJCQlpZiAoaGxvY2stPnJlYWQgIT0gMiAm JiBobG9jay0+Y2hlY2spIHsKKwkJCQlpbnQgcmV0ID0gY2hlY2tfcHJldl9hZGQoY3VyciwgaGxv Y2ssIG5leHQsCisJCQkJCQkJIGRpc3RhbmNlLCAmdHJhY2UsIHNhdmVfdHJhY2UpOworCQkJCWlm ICghcmV0KQorCQkJCQlyZXR1cm4gMDsKIAorCQkJCS8qCisJCQkJICogU3RvcCBhZnRlciB0aGUg Zmlyc3Qgbm9uLXRyeWxvY2sgZW50cnksCisJCQkJICogYXMgbm9uLXRyeWxvY2sgZW50cmllcyBo YXZlIGFkZGVkIHRoZWlyCisJCQkJICogb3duIGRpcmVjdCBkZXBlbmRlbmNpZXMgYWxyZWFkeSwg c28gdGhpcworCQkJCSAqIGxvY2sgaXMgY29ubmVjdGVkIHRvIHRoZW0gaW5kaXJlY3RseToKKwkJ CQkgKi8KKwkJCQlpZiAoIWhsb2NrLT50cnlsb2NrKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQog CQlkZXB0aC0tOwogCQkvKgogCQkgKiBFbmQgb2YgbG9jay1zdGFjaz8KQEAgLTMyMTYsMTAgKzMy NzcsMjEgQEAgc3RhdGljIHZvaWQgX19sb2NrZGVwX2luaXRfbWFwKHN0cnVjdCBsb2NrZGVwX21h cCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKIHZvaWQgbG9ja2RlcF9pbml0X21hcChzdHJ1Y3Qg bG9ja2RlcF9tYXAgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgIHN0cnVjdCBsb2Nr X2NsYXNzX2tleSAqa2V5LCBpbnQgc3ViY2xhc3MpCiB7CisJY3Jvc3NfaW5pdChsb2NrLCAwKTsK IAlfX2xvY2tkZXBfaW5pdF9tYXAobG9jaywgbmFtZSwga2V5LCBzdWJjbGFzcyk7CiB9CiBFWFBP UlRfU1lNQk9MX0dQTChsb2NrZGVwX2luaXRfbWFwKTsKIAorI2lmZGVmIENPTkZJR19MT0NLREVQ X0NST1NTUkVMRUFTRQordm9pZCBsb2NrZGVwX2luaXRfbWFwX2Nyb3NzbG9jayhzdHJ1Y3QgbG9j a2RlcF9tYXAgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIHN0cnVjdCBsb2NrX2Ns YXNzX2tleSAqa2V5LCBpbnQgc3ViY2xhc3MpCit7CisJY3Jvc3NfaW5pdChsb2NrLCAxKTsKKwlf X2xvY2tkZXBfaW5pdF9tYXAobG9jaywgbmFtZSwga2V5LCBzdWJjbGFzcyk7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChsb2NrZGVwX2luaXRfbWFwX2Nyb3NzbG9jayk7CisjZW5kaWYKKwogc3RydWN0 IGxvY2tfY2xhc3Nfa2V5IF9fbG9ja2RlcF9ub192YWxpZGF0ZV9fOwogRVhQT1JUX1NZTUJPTF9H UEwoX19sb2NrZGVwX25vX3ZhbGlkYXRlX18pOwogCkBAIC0zMjc1LDYgKzMzNDcsNyBAQCBzdGF0 aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQg aW50IHN1YmNsYXNzLAogCWludCBjaGFpbl9oZWFkID0gMDsKIAlpbnQgY2xhc3NfaWR4OwogCXU2 NCBjaGFpbl9rZXk7CisJaW50IHJldDsKIAogCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKQog CQlyZXR1cm4gMDsKQEAgLTMzMjMsNyArMzM5Niw4IEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVp cmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCiAKIAlj bGFzc19pZHggPSBjbGFzcyAtIGxvY2tfY2xhc3NlcyArIDE7CiAKLQlpZiAoZGVwdGgpIHsKKwkv KiBUT0RPOiBuZXN0X2xvY2sgaXMgbm90IGltcGxlbWVudGVkIGZvciBjcm9zc2xvY2sgeWV0LiAq LworCWlmIChkZXB0aCAmJiAhY3Jvc3NfbG9jayhsb2NrKSkgewogCQlobG9jayA9IGN1cnItPmhl bGRfbG9ja3MgKyBkZXB0aCAtIDE7CiAJCWlmIChobG9jay0+Y2xhc3NfaWR4ID09IGNsYXNzX2lk eCAmJiBuZXN0X2xvY2spIHsKIAkJCWlmIChobG9jay0+cmVmZXJlbmNlcykgewpAQCAtMzQxMSw2 ICszNDg1LDE0IEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFw ICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCiAJaWYgKCF2YWxpZGF0ZV9jaGFpbihjdXJy LCBsb2NrLCBobG9jaywgY2hhaW5faGVhZCwgY2hhaW5fa2V5KSkKIAkJcmV0dXJuIDA7CiAKKwly ZXQgPSBsb2NrX2FjcXVpcmVfY3Jvc3Nsb2NrKGhsb2NrKTsKKwkvKgorCSAqIDIgbWVhbnMgbm9y bWFsIGFjcXVpcmUgb3BlcmF0aW9ucyBhcmUgbmVlZGVkLiBPdGhlcndpc2UsIGl0J3MKKwkgKiBv ayBqdXN0IHRvIHJldHVybiB3aXRoICcwOmZhaWwsIDE6c3VjY2VzcycuCisJICovCisJaWYgKHJl dCAhPSAyKQorCQlyZXR1cm4gcmV0OworCiAJY3Vyci0+Y3Vycl9jaGFpbl9rZXkgPSBjaGFpbl9r ZXk7CiAJY3Vyci0+bG9ja2RlcF9kZXB0aCsrOwogCWNoZWNrX2NoYWluX2tleShjdXJyKTsKQEAg LTM2NDksMTEgKzM3MzEsMTkgQEAgX19sb2NrX3JlbGVhc2Uoc3RydWN0IGxvY2tkZXBfbWFwICps b2NrLCBpbnQgbmVzdGVkLCB1bnNpZ25lZCBsb25nIGlwKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAq Y3VyciA9IGN1cnJlbnQ7CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2s7CiAJdW5zaWduZWQgaW50 IGRlcHRoOwotCWludCBpOworCWludCByZXQsIGk7CiAKIAlpZiAodW5saWtlbHkoIWRlYnVnX2xv Y2tzKSkKIAkJcmV0dXJuIDA7CiAKKwlyZXQgPSBsb2NrX3JlbGVhc2VfY3Jvc3Nsb2NrKGxvY2sp OworCS8qCisJICogMiBtZWFucyBub3JtYWwgcmVsZWFzZSBvcGVyYXRpb25zIGFyZSBuZWVkZWQu IE90aGVyd2lzZSwgaXQncworCSAqIG9rIGp1c3QgdG8gcmV0dXJuIHdpdGggJzA6ZmFpbCwgMTpz dWNjZXNzJy4KKwkgKi8KKwlpZiAocmV0ICE9IDIpCisJCXJldHVybiByZXQ7CisKIAlkZXB0aCA9 IGN1cnItPmxvY2tkZXBfZGVwdGg7CiAJLyoKIAkgKiBTbyB3ZSdyZSBhbGwgc2V0IHRvIHJlbGVh c2UgdGhpcyBsb2NrLi4gd2FpdCB3aGF0IGxvY2s/IFdlIGRvbid0CkBAIC00NTM2LDMgKzQ2MjYs NDk1IEBAIHZvaWQgbG9ja2RlcF9yY3Vfc3VzcGljaW91cyhjb25zdCBjaGFyICpmaWxlLCBjb25z dCBpbnQgbGluZSwgY29uc3QgY2hhciAqcykKIAlkdW1wX3N0YWNrKCk7CiB9CiBFWFBPUlRfU1lN Qk9MX0dQTChsb2NrZGVwX3JjdV9zdXNwaWNpb3VzKTsKKworI2lmZGVmIENPTkZJR19MT0NLREVQ X0NST1NTUkVMRUFTRQorCisvKgorICogQ3Jvc3NyZWxlYXNlIHdvcmtzIGJ5IHJlY29yZGluZyBh IGxvY2sgaGlzdG9yeSBmb3IgZWFjaCB0aHJlYWQgYW5kCisgKiBjb25uZWN0aW5nIHRob3NlIGhp c3RvcmljIGxvY2tzIHRoYXQgd2VyZSB0YWtlbiBhZnRlciB0aGUKKyAqIHdhaXRfZm9yX2NvbXBs ZXRpb24oKSBpbiB0aGUgY29tcGxldGUoKSBjb250ZXh0LgorICoKKyAqIFRhc2stQQkJCQlUYXNr LUIKKyAqCisgKgkJCQkJbXV0ZXhfbG9jaygmQSk7CisgKgkJCQkJbXV0ZXhfdW5sb2NrKCZBKTsK KyAqCisgKiB3YWl0X2Zvcl9jb21wbGV0aW9uKCZDKTsKKyAqICAgbG9ja19hY3F1aXJlX2Nyb3Nz bG9jaygpOworICogICAgIGF0b21pY19pbmNfcmV0dXJuKCZjcm9zc19nZW5faWQpOworICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCQkJCSAgfAltdXRleF9sb2NrKCZCKTsK KyAqCQkJCSAgfAltdXRleF91bmxvY2soJkIpOworICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKyAqCQkJCSAgfAljb21wbGV0ZSgmQyk7CisgKgkJCQkgIGAtLQkgIGxvY2tfY29t bWl0X2Nyb3NzbG9jaygpOworICoKKyAqIFdoaWNoIHdpbGwgdGhlbiBhZGQgYSBkZXBlbmRlbmN5 IGJldHdlZW4gQiBhbmQgQy4KKyAqLworCisjZGVmaW5lIHhobG9jayhpKSAgICAgICAgIChjdXJy ZW50LT54aGxvY2tzWyhpKSAlIE1BWF9YSExPQ0tTX05SXSkKKworLyoKKyAqIFdoZW5ldmVyIGEg Y3Jvc3Nsb2NrIGlzIGhlbGQsIGNyb3NzX2dlbl9pZCB3aWxsIGJlIGluY3JlYXNlZC4KKyAqLwor c3RhdGljIGF0b21pY190IGNyb3NzX2dlbl9pZDsgLyogQ2FuIGJlIHdyYXBwZWQgKi8KKworLyoK KyAqIE1ha2UgYW4gZW50cnkgb2YgdGhlIHJpbmcgYnVmZmVyIGludmFsaWQuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX3hobG9jayhzdHJ1Y3QgaGlzdF9sb2NrICp4aGxvY2sp Cit7CisJLyoKKwkgKiBOb3JtYWxseSwgeGhsb2NrLT5obG9jay5pbnN0YW5jZSBtdXN0IGJlICFO VUxMLgorCSAqLworCXhobG9jay0+aGxvY2suaW5zdGFuY2UgPSBOVUxMOworfQorCisvKgorICog TG9jayBoaXN0b3J5IHN0YWNrczsgd2UgaGF2ZSAyIG5lc3RlZCBsb2NrIGhpc3Rvcnkgc3RhY2tz OgorICoKKyAqICAgSEFSRChJUlEpCisgKiAgIFNPRlQoSVJRKQorICoKKyAqIFRoZSB0aGluZyBp cyB0aGF0IG9uY2Ugd2UgY29tcGxldGUgYSBIQVJEL1NPRlQgSVJRIHRoZSBmdXR1cmUgdGFzayBs b2NrcworICogc2hvdWxkIG5vdCBkZXBlbmQgb24gYW55IG9mIHRoZSBsb2NrcyBvYnNlcnZlZCB3 aGlsZSBydW5uaW5nIHRoZSBJUlEuICBTbworICogd2hhdCB3ZSBkbyBpcyByZXdpbmQgdGhlIGhp c3RvcnkgYnVmZmVyIGFuZCBlcmFzZSBhbGwgb3VyIGtub3dsZWRnZSBvZiB0aGF0CisgKiB0ZW1w b3JhbCBldmVudC4KKyAqLworCit2b2lkIGNyb3NzcmVsZWFzZV9oaXN0X3N0YXJ0KGVudW0geGhs b2NrX2NvbnRleHRfdCBjKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyID0gY3VycmVudDsK KworCWlmICghY3VyLT54aGxvY2tzKQorCQlyZXR1cm47CisKKwljdXItPnhobG9ja19pZHhfaGlz dFtjXSA9IGN1ci0+eGhsb2NrX2lkeDsKKwljdXItPmhpc3RfaWRfc2F2ZVtjXSAgICA9IGN1ci0+ aGlzdF9pZDsKK30KKwordm9pZCBjcm9zc3JlbGVhc2VfaGlzdF9lbmQoZW51bSB4aGxvY2tfY29u dGV4dF90IGMpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIgPSBjdXJyZW50OworCisJaWYg KGN1ci0+eGhsb2NrcykgeworCQl1bnNpZ25lZCBpbnQgaWR4ID0gY3VyLT54aGxvY2tfaWR4X2hp c3RbY107CisJCXN0cnVjdCBoaXN0X2xvY2sgKmggPSAmeGhsb2NrKGlkeCk7CisKKwkJY3VyLT54 aGxvY2tfaWR4ID0gaWR4OworCisJCS8qIENoZWNrIGlmIHRoZSByaW5nIHdhcyBvdmVyd3JpdHRl bi4gKi8KKwkJaWYgKGgtPmhpc3RfaWQgIT0gY3VyLT5oaXN0X2lkX3NhdmVbY10pCisJCQlpbnZh bGlkYXRlX3hobG9jayhoKTsKKwl9Cit9CisKKy8qCisgKiBsb2NrZGVwX2ludmFyaWFudF9zdGF0 ZSgpIGlzIHVzZWQgdG8gYW5ub3RhdGUgaW5kZXBlbmRlbmNlIGluc2lkZSBhIHRhc2ssIHRvCisg KiBtYWtlIG9uZSB0YXNrIGxvb2sgbGlrZSBtdWx0aXBsZSBpbmRlcGVuZGVudCAndGFza3MnLgor ICoKKyAqIFRha2UgZm9yIGluc3RhbmNlIHdvcmtxdWV1ZXM7IGVhY2ggd29yayBpcyBpbmRlcGVu ZGVudCBvZiB0aGUgbGFzdC4gVGhlCisgKiBjb21wbGV0aW9uIG9mIGEgZnV0dXJlIHdvcmsgZG9l cyBub3QgZGVwZW5kIG9uIHRoZSBjb21wbGV0aW9uIG9mIGEgcGFzdCB3b3JrCisgKiAoaW4gZ2Vu ZXJhbCkuIFRoZXJlZm9yZSB3ZSBtdXN0IG5vdCBjYXJyeSB0aGF0IChsb2NrKSBkZXBlbmRlbmN5 IGFjcm9zcworICogd29ya3MuCisgKgorICogVGhpcyBpcyB0cnVlIGZvciBtYW55IHRoaW5nczsg cHJldHR5IG11Y2ggYWxsIGt0aHJlYWRzIGZhbGwgaW50byB0aGlzCisgKiBwYXR0ZXJuLCB3aGVy ZSB0aGV5IGhhdmUgYW4gaW52YXJpYW50IHN0YXRlIGFuZCBmdXR1cmUgY29tcGxldGlvbnMgZG8g bm90CisgKiBkZXBlbmQgb24gcGFzdCBjb21wbGV0aW9ucy4gSXRzIGp1c3QgdGhhdCBzaW5jZSB0 aGV5IGFsbCBoYXZlIHRoZSAnc2FtZScKKyAqIGZvcm0gLS0gdGhlIGt0aHJlYWQgZG9lcyB0aGUg c2FtZSBvdmVyIGFuZCBvdmVyIC0tIGl0IGRvZXNuJ3QgdHlwaWNhbGx5CisgKiBtYXR0ZXIuCisg KgorICogVGhlIHNhbWUgaXMgdHJ1ZSBmb3Igc3lzdGVtLWNhbGxzLCBvbmNlIGEgc3lzdGVtIGNh bGwgaXMgY29tcGxldGVkICh3ZSd2ZQorICogcmV0dXJuZWQgdG8gdXNlcnNwYWNlKSB0aGUgbmV4 dCBzeXN0ZW0gY2FsbCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGxvY2sKKyAqIGhpc3Rvcnkgb2Yg dGhlIHByZXZpb3VzIHN5c3RlbSBjYWxsLgorICoKKyAqIFRoZXkga2V5IHByb3BlcnR5IGZvciBp bmRlcGVuZGVuY2UsIHRoaXMgaW52YXJpYW50IHN0YXRlLCBpcyB0aGF0IGl0IG11c3QgYmUKKyAq IGEgcG9pbnQgd2hlcmUgd2UgaG9sZCBubyBsb2NrcyBhbmQgaGF2ZSBubyBoaXN0b3J5LiBCZWNh dXNlIGlmIHdlIHdlcmUgdG8KKyAqIGhvbGQgbG9ja3MsIHRoZSByZXN0b3JlIGF0IF9lbmQoKSB3 b3VsZCBub3QgbmVjZXNzYXJpbHkgcmVjb3ZlciBpdCdzIGhpc3RvcnkKKyAqIGVudHJ5LiBTaW1p bGFybHksIGluZGVwZW5kZW5jZSBwZXItZGVmaW5pdGlvbiBtZWFucyBpdCBkb2VzIG5vdCBkZXBl bmQgb24KKyAqIHByaW9yIHN0YXRlLgorICovCit2b2lkIGxvY2tkZXBfaW52YXJpYW50X3N0YXRl KGJvb2wgZm9yY2UpCit7CisJLyoKKwkgKiBXZSBjYWxsIHRoaXMgYXQgYW4gaW52YXJpYW50IHBv aW50LCBubyBjdXJyZW50IHN0YXRlLCBubyBoaXN0b3J5LgorCSAqIFZlcmlmeSB0aGUgZm9ybWVy LCBlbmZvcmNlIHRoZSBsYXR0ZXIuCisJICovCisJV0FSTl9PTl9PTkNFKCFmb3JjZSAmJiBjdXJy ZW50LT5sb2NrZGVwX2RlcHRoKTsKKwlpZiAoY3VycmVudC0+eGhsb2NrcykKKwkJaW52YWxpZGF0 ZV94aGxvY2soJnhobG9jayhjdXJyZW50LT54aGxvY2tfaWR4KSk7Cit9CisKK3N0YXRpYyBpbnQg Y3Jvc3NfbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spCit7CisJcmV0dXJuIGxvY2sgPyBs b2NrLT5jcm9zcyA6IDA7Cit9CisKKy8qCisgKiBUaGlzIGlzIG5lZWRlZCB0byBkZWNpZGUgdGhl IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHdyYXBhYmxlIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGlu bGluZSBpbnQgYmVmb3JlKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKwlyZXR1 cm4gKGludCkoYSAtIGIpIDwgMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9ja19jbGFz cyAqeGhsb2NrX2NsYXNzKHN0cnVjdCBoaXN0X2xvY2sgKnhobG9jaykKK3sKKwlyZXR1cm4gaGxv Y2tfY2xhc3MoJnhobG9jay0+aGxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsb2Nr X2NsYXNzICp4bG9ja19jbGFzcyhzdHJ1Y3QgY3Jvc3NfbG9jayAqeGxvY2spCit7CisJcmV0dXJu IGhsb2NrX2NsYXNzKCZ4bG9jay0+aGxvY2spOworfQorCisvKgorICogU2hvdWxkIHdlIGNoZWNr IGEgZGVwZW5kZW5jeSB3aXRoIHByZXZpb3VzIG9uZT8KKyAqLworc3RhdGljIGlubGluZSBpbnQg ZGVwZW5kX2JlZm9yZShzdHJ1Y3QgaGVsZF9sb2NrICpobG9jaykKK3sKKwlyZXR1cm4gaGxvY2st PnJlYWQgIT0gMiAmJiBobG9jay0+Y2hlY2sgJiYgIWhsb2NrLT50cnlsb2NrOworfQorCisvKgor ICogU2hvdWxkIHdlIGNoZWNrIGEgZGVwZW5kZW5jeSB3aXRoIG5leHQgb25lPworICovCitzdGF0 aWMgaW5saW5lIGludCBkZXBlbmRfYWZ0ZXIoc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCit7CisJ cmV0dXJuIGhsb2NrLT5yZWFkICE9IDIgJiYgaGxvY2stPmNoZWNrOworfQorCisvKgorICogQ2hl Y2sgaWYgdGhlIHhobG9jayBpcyB2YWxpZCwgd2hpY2ggd291bGQgYmUgZmFsc2UgaWYsCisgKgor ICogICAgMS4gSGFzIG5vdCB1c2VkIGFmdGVyIGluaXRpYWxpemFpb24geWV0LgorICogICAgMi4g R290IGludmFsaWRhdGVkLgorICoKKyAqIFJlbWluZCBoaXN0X2xvY2sgaXMgaW1wbGVtZW50ZWQg YXMgYSByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgeGhsb2NrX3ZhbGlkKHN0 cnVjdCBoaXN0X2xvY2sgKnhobG9jaykKK3sKKwkvKgorCSAqIHhobG9jay0+aGxvY2suaW5zdGFu Y2UgbXVzdCBiZSAhTlVMTC4KKwkgKi8KKwlyZXR1cm4gISF4aGxvY2stPmhsb2NrLmluc3RhbmNl OworfQorCisvKgorICogUmVjb3JkIGEgaGlzdF9sb2NrIGVudHJ5LgorICoKKyAqIElycSBkaXNh YmxlIGlzIG9ubHkgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF94aGxvY2soc3RydWN0 IGhlbGRfbG9jayAqaGxvY2spCit7CisJdW5zaWduZWQgaW50IGlkeCA9ICsrY3VycmVudC0+eGhs b2NrX2lkeDsKKwlzdHJ1Y3QgaGlzdF9sb2NrICp4aGxvY2sgPSAmeGhsb2NrKGlkeCk7CisKKyNp ZmRlZiBDT05GSUdfREVCVUdfTE9DS0RFUAorCS8qCisJICogVGhpcyBjYW4gYmUgZG9uZSBsb2Nr bGVzc2x5IGJlY2F1c2UgdGhleSBhcmUgYWxsIHRhc2stbG9jYWwKKwkgKiBzdGF0ZSwgd2UgbXVz dCBob3dldmVyIGVuc3VyZSBJUlFzIGFyZSBkaXNhYmxlZC4KKwkgKi8KKwlXQVJOX09OX09OQ0Uo IWlycXNfZGlzYWJsZWQoKSk7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgaGlzdF9sb2NrJ3Mg bWVtYmVycyAqLworCXhobG9jay0+aGxvY2sgPSAqaGxvY2s7CisJeGhsb2NrLT5oaXN0X2lkID0g KytjdXJyZW50LT5oaXN0X2lkOworCisJeGhsb2NrLT50cmFjZS5ucl9lbnRyaWVzID0gMDsKKwl4 aGxvY2stPnRyYWNlLm1heF9lbnRyaWVzID0gTUFYX1hITE9DS19UUkFDRV9FTlRSSUVTOworCXho bG9jay0+dHJhY2UuZW50cmllcyA9IHhobG9jay0+dHJhY2VfZW50cmllczsKKworCWlmIChjcm9z c3JlbGVhc2VfZnVsbHN0YWNrKSB7CisJCXhobG9jay0+dHJhY2Uuc2tpcCA9IDM7CisJCXNhdmVf c3RhY2tfdHJhY2UoJnhobG9jay0+dHJhY2UpOworCX0gZWxzZSB7CisJCXhobG9jay0+dHJhY2Uu bnJfZW50cmllcyA9IDE7CisJCXhobG9jay0+dHJhY2UuZW50cmllc1swXSA9IGhsb2NrLT5hY3F1 aXJlX2lwOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgc2FtZV9jb250ZXh0X3hobG9jayhz dHJ1Y3QgaGlzdF9sb2NrICp4aGxvY2spCit7CisJcmV0dXJuIHhobG9jay0+aGxvY2suaXJxX2Nv bnRleHQgPT0gdGFza19pcnFfY29udGV4dChjdXJyZW50KTsKK30KKworLyoKKyAqIFRoaXMgc2hv dWxkIGJlIGxvY2tsZXNzIGFzIGZhciBhcyBwb3NzaWJsZSBiZWNhdXNlIHRoaXMgd291bGQgYmUK KyAqIGNhbGxlZCB2ZXJ5IGZyZXF1ZW50bHkuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2FkZF94 aGxvY2soc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCit7CisJLyoKKwkgKiBSZWNvcmQgYSBoaXN0 X2xvY2ssIG9ubHkgaW4gY2FzZSB0aGF0IGFjcXVpc2l0aW9ucyBhaGVhZAorCSAqIGNvdWxkIGRl cGVuZCBvbiB0aGUgaGVsZF9sb2NrLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGhlbGRfbG9jaworCSAq IGlzIHRyeWxvY2sgdGhlbiBhY3F1aXNpdGlvbnMgYWhlYWQgbmV2ZXIgZGVwZW5kcyBvbiB0aGF0 LgorCSAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byByZWNvcmQgaXQuIEp1c3QgcmV0 dXJuLgorCSAqLworCWlmICghY3VycmVudC0+eGhsb2NrcyB8fCAhZGVwZW5kX2JlZm9yZShobG9j aykpCisJCXJldHVybjsKKworCWFkZF94aGxvY2soaGxvY2spOworfQorCisvKgorICogRm9yIGNy b3NzbG9jay4KKyAqLworc3RhdGljIGludCBhZGRfeGxvY2soc3RydWN0IGhlbGRfbG9jayAqaGxv Y2spCit7CisJc3RydWN0IGNyb3NzX2xvY2sgKnhsb2NrOworCXVuc2lnbmVkIGludCBnZW5faWQ7 CisKKwlpZiAoIWdyYXBoX2xvY2soKSkKKwkJcmV0dXJuIDA7CisKKwl4bG9jayA9ICYoKHN0cnVj dCBsb2NrZGVwX21hcF9jcm9zcyAqKWhsb2NrLT5pbnN0YW5jZSktPnhsb2NrOworCisJLyoKKwkg KiBXaGVuIGFjcXVpc2l0aW9ucyBmb3IgYSBjcm9zc2xvY2sgYXJlIG92ZXJsYXBwZWQsIHdlIHVz ZQorCSAqIG5yX2FjcXVpcmUgdG8gcGVyZm9ybSBjb21taXQgZm9yIHRoZW0sIGJhc2VkIG9uIGNy b3NzX2dlbl9pZAorCSAqIG9mIHRoZSBmaXJzdCBhY3F1aXNpdGlvbiwgd2hpY2ggYWxsb3dzIHRv IGFkZCBhZGRpdGlvbmFsCisJICogZGVwZW5kZW5jaWVzLgorCSAqCisJICogTW9yZW92ZXIsIHdo ZW4gbm8gYWNxdWlzaXRpb24gb2YgYSBjcm9zc2xvY2sgaXMgaW4gcHJvZ3Jlc3MsCisJICogd2Ug c2hvdWxkIG5vdCBwZXJmb3JtIGNvbW1pdCBiZWNhdXNlIHRoZSBsb2NrIG1pZ2h0IG5vdCBleGlz dAorCSAqIGFueSBtb3JlLCB3aGljaCBtaWdodCBjYXVzZSBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vz cy4gU28gd2UKKwkgKiBoYXZlIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgYWNxdWlzaXRpb25zIG9m IGEgY3Jvc3Nsb2NrLgorCSAqCisJICogZGVwZW5kX2FmdGVyKCkgaXMgbmVjZXNzYXJ5IHRvIGlu aXRpYWxpemUgb25seSB0aGUgZmlyc3QKKwkgKiB2YWxpZCB4bG9jayBzbyB0aGF0IHRoZSB4bG9j ayBjYW4gYmUgdXNlZCBvbiBpdHMgY29tbWl0LgorCSAqLworCWlmICh4bG9jay0+bnJfYWNxdWly ZSsrICYmIGRlcGVuZF9hZnRlcigmeGxvY2stPmhsb2NrKSkKKwkJZ290byB1bmxvY2s7CisKKwln ZW5faWQgPSAodW5zaWduZWQgaW50KWF0b21pY19pbmNfcmV0dXJuKCZjcm9zc19nZW5faWQpOwor CXhsb2NrLT5obG9jayA9ICpobG9jazsKKwl4bG9jay0+aGxvY2suZ2VuX2lkID0gZ2VuX2lkOwor dW5sb2NrOgorCWdyYXBoX3VubG9jaygpOworCXJldHVybiAxOworfQorCisvKgorICogQ2FsbGVk IGZvciBib3RoIG5vcm1hbCBhbmQgY3Jvc3Nsb2NrIGFjcXVpcmVzLiBOb3JtYWwgbG9ja3Mgd2ls bCBiZQorICogcHVzaGVkIG9uIHRoZSBoaXN0X2xvY2sgcXVldWUuIENyb3NzIGxvY2tzIHdpbGwg cmVjb3JkIHN0YXRlIGFuZAorICogc3RvcCByZWd1bGFyIGxvY2tfYWNxdWlyZSgpIHRvIGF2b2lk IGJlaW5nIHBsYWNlZCBvbiB0aGUgaGVsZF9sb2NrCisgKiBzdGFjay4KKyAqCisgKiBSZXR1cm46 IDAgLSBmYWlsdXJlOworICogICAgICAgICAxIC0gY3Jvc3Nsb2NrLCBkb25lOworICogICAgICAg ICAyIC0gbm9ybWFsIGxvY2ssIGNvbnRpbnVlIHRvIGhlbGRfbG9ja1tdIG9wcy4KKyAqLworc3Rh dGljIGludCBsb2NrX2FjcXVpcmVfY3Jvc3Nsb2NrKHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQor eworCS8qCisJICoJQ09OVEVYVCAxCQlDT05URVhUIDIKKwkgKgktLS0tLS0tLS0JCS0tLS0tLS0t LQorCSAqCWxvY2sgQSAoY3Jvc3MpCisJICoJWCA9IGF0b21pY19pbmNfcmV0dXJuKCZjcm9zc19n ZW5faWQpCisJICoJfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICoJCQkJWSA9 IGF0b21pY19yZWFkX2FjcXVpcmUoJmNyb3NzX2dlbl9pZCkKKwkgKgkJCQlsb2NrIEIKKwkgKgor CSAqIGF0b21pY19yZWFkX2FjcXVpcmUoKSBpcyBmb3Igb3JkZXJpbmcgYmV0d2VlbiBBIGFuZCBC LAorCSAqIElPVywgQSBoYXBwZW5zIGJlZm9yZSBCLCB3aGVuIENPTlRFWFQgMiBzZWUgWSA+PSBY LgorCSAqCisJICogUGFpcnMgd2l0aCBhdG9taWNfaW5jX3JldHVybigpIGluIGFkZF94bG9jaygp LgorCSAqLworCWhsb2NrLT5nZW5faWQgPSAodW5zaWduZWQgaW50KWF0b21pY19yZWFkX2FjcXVp cmUoJmNyb3NzX2dlbl9pZCk7CisKKwlpZiAoY3Jvc3NfbG9jayhobG9jay0+aW5zdGFuY2UpKQor CQlyZXR1cm4gYWRkX3hsb2NrKGhsb2NrKTsKKworCWNoZWNrX2FkZF94aGxvY2soaGxvY2spOwor CXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGNvcHlfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNl ICp0cmFjZSkKK3sKKwl1bnNpZ25lZCBsb25nICpidWYgPSBzdGFja190cmFjZSArIG5yX3N0YWNr X3RyYWNlX2VudHJpZXM7CisJdW5zaWduZWQgaW50IG1heF9uciA9IE1BWF9TVEFDS19UUkFDRV9F TlRSSUVTIC0gbnJfc3RhY2tfdHJhY2VfZW50cmllczsKKwl1bnNpZ25lZCBpbnQgbnIgPSBtaW4o bWF4X25yLCB0cmFjZS0+bnJfZW50cmllcyk7CisKKwl0cmFjZS0+bnJfZW50cmllcyA9IG5yOwor CW1lbWNweShidWYsIHRyYWNlLT5lbnRyaWVzLCBuciAqIHNpemVvZih0cmFjZS0+ZW50cmllc1sw XSkpOworCXRyYWNlLT5lbnRyaWVzID0gYnVmOworCW5yX3N0YWNrX3RyYWNlX2VudHJpZXMgKz0g bnI7CisKKwlpZiAobnJfc3RhY2tfdHJhY2VfZW50cmllcyA+PSBNQVhfU1RBQ0tfVFJBQ0VfRU5U UklFUy0xKSB7CisJCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpKQorCQkJcmV0 dXJuIDA7CisKKwkJcHJpbnRfbG9ja2RlcF9vZmYoIkJVRzogTUFYX1NUQUNLX1RSQUNFX0VOVFJJ RVMgdG9vIGxvdyEiKTsKKwkJZHVtcF9zdGFjaygpOworCisJCXJldHVybiAwOworCX0KKworCXJl dHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbW1pdF94aGxvY2soc3RydWN0IGNyb3NzX2xvY2sg Knhsb2NrLCBzdHJ1Y3QgaGlzdF9sb2NrICp4aGxvY2spCit7CisJdW5zaWduZWQgaW50IHhpZCwg cGlkOworCXU2NCBjaGFpbl9rZXk7CisKKwl4aWQgPSB4bG9ja19jbGFzcyh4bG9jaykgLSBsb2Nr X2NsYXNzZXM7CisJY2hhaW5fa2V5ID0gaXRlcmF0ZV9jaGFpbl9rZXkoKHU2NCkwLCB4aWQpOwor CXBpZCA9IHhobG9ja19jbGFzcyh4aGxvY2spIC0gbG9ja19jbGFzc2VzOworCWNoYWluX2tleSA9 IGl0ZXJhdGVfY2hhaW5fa2V5KGNoYWluX2tleSwgcGlkKTsKKworCWlmIChsb29rdXBfY2hhaW5f Y2FjaGUoY2hhaW5fa2V5KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWFkZF9jaGFpbl9jYWNoZV9j bGFzc2VzKHhpZCwgcGlkLCB4aGxvY2stPmhsb2NrLmlycV9jb250ZXh0LAorCQkJCWNoYWluX2tl eSkpCisJCXJldHVybiAwOworCisJaWYgKCFjaGVja19wcmV2X2FkZChjdXJyZW50LCAmeGxvY2st Pmhsb2NrLCAmeGhsb2NrLT5obG9jaywgMSwKKwkJCSAgICAmeGhsb2NrLT50cmFjZSwgY29weV90 cmFjZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1p dF94aGxvY2tzKHN0cnVjdCBjcm9zc19sb2NrICp4bG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgY3Vy ID0gY3VycmVudC0+eGhsb2NrX2lkeDsKKwl1bnNpZ25lZCBpbnQgcHJldl9oaXN0X2lkID0geGhs b2NrKGN1cikuaGlzdF9pZDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghZ3JhcGhfbG9jaygp KQorCQlyZXR1cm47CisKKwlpZiAoeGxvY2stPm5yX2FjcXVpcmUpIHsKKwkJZm9yIChpID0gMDsg aSA8IE1BWF9YSExPQ0tTX05SOyBpKyspIHsKKwkJCXN0cnVjdCBoaXN0X2xvY2sgKnhobG9jayA9 ICZ4aGxvY2soY3VyIC0gaSk7CisKKwkJCWlmICgheGhsb2NrX3ZhbGlkKHhobG9jaykpCisJCQkJ YnJlYWs7CisKKwkJCWlmIChiZWZvcmUoeGhsb2NrLT5obG9jay5nZW5faWQsIHhsb2NrLT5obG9j ay5nZW5faWQpKQorCQkJCWJyZWFrOworCisJCQlpZiAoIXNhbWVfY29udGV4dF94aGxvY2soeGhs b2NrKSkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIEZpbHRlciBvdXQgdGhlIGNhc2VzIHdo ZXJlIHRoZSByaW5nIGJ1ZmZlciB3YXMKKwkJCSAqIG92ZXJ3cml0dGVuIGFuZCB0aGUgY3VycmVu dCBlbnRyeSBoYXMgYSBiaWdnZXIKKwkJCSAqIGhpc3RfaWQgdGhhbiB0aGUgcHJldmlvdXMgb25l LCB3aGljaCBpcyBpbXBvc3NpYmxlCisJCQkgKiBvdGhlcndpc2U6CisJCQkgKi8KKwkJCWlmICh1 bmxpa2VseShiZWZvcmUocHJldl9oaXN0X2lkLCB4aGxvY2stPmhpc3RfaWQpKSkKKwkJCQlicmVh azsKKworCQkJcHJldl9oaXN0X2lkID0geGhsb2NrLT5oaXN0X2lkOworCisJCQkvKgorCQkJICog Y29tbWl0X3hobG9jaygpIHJldHVybnMgMCB3aXRoIGdyYXBoX2xvY2sgYWxyZWFkeQorCQkJICog cmVsZWFzZWQgaWYgZmFpbC4KKwkJCSAqLworCQkJaWYgKCFjb21taXRfeGhsb2NrKHhsb2NrLCB4 aGxvY2spKQorCQkJCXJldHVybjsKKwkJfQorCX0KKworCWdyYXBoX3VubG9jaygpOworfQorCit2 b2lkIGxvY2tfY29tbWl0X2Nyb3NzbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spCit7CisJ c3RydWN0IGNyb3NzX2xvY2sgKnhsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAo dW5saWtlbHkoIWRlYnVnX2xvY2tzIHx8IGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKKwkJ cmV0dXJuOworCisJaWYgKCFjdXJyZW50LT54aGxvY2tzKQorCQlyZXR1cm47CisKKwkvKgorCSAq IERvIGNvbW1pdCBoaXN0X2xvY2tzIHdpdGggdGhlIGNyb3NzX2xvY2ssIG9ubHkgaW4gY2FzZSB0 aGF0CisJICogdGhlIGNyb3NzX2xvY2sgY291bGQgZGVwZW5kIG9uIGFjcXVpc2l0aW9ucyBhZnRl ciB0aGF0LgorCSAqCisJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBjcm9zc19sb2NrIGRvZXMgbm90 IGhhdmUgdGhlICdjaGVjaycgZmxhZworCSAqIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBk ZXBlbmRlbmNpZXMgYW5kIGNvbW1pdCBmb3IgdGhhdC4KKwkgKiBKdXN0IHNraXAgaXQuIEluIHRo YXQgY2FzZSwgb2YgY291cnNlLCB0aGUgY3Jvc3NfbG9jayBkb2VzCisJICogbm90IGRlcGVuZCBv biBhY3F1aXNpdGlvbnMgYWhlYWQsIGVpdGhlci4KKwkgKgorCSAqIFdBUk5JTkc6IERvbid0IGRv IHRoYXQgaW4gYWRkX3hsb2NrKCkgaW4gYWR2YW5jZS4gV2hlbiBhbgorCSAqIGFjcXVpc2l0aW9u IGNvbnRleHQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvbW1pdCBjb250ZXh0LAorCSAqIGludmFs aWQoc2tpcHBlZCkgY3Jvc3NfbG9jayBtaWdodCBiZSBhY2Nlc3NlZC4KKwkgKi8KKwlpZiAoIWRl cGVuZF9hZnRlcigmKChzdHJ1Y3QgbG9ja2RlcF9tYXBfY3Jvc3MgKilsb2NrKS0+eGxvY2suaGxv Y2spKQorCQlyZXR1cm47CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNoZWNrX2Zs YWdzKGZsYWdzKTsKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7CisJeGxvY2sgPSAm KChzdHJ1Y3QgbG9ja2RlcF9tYXBfY3Jvc3MgKilsb2NrKS0+eGxvY2s7CisJY29tbWl0X3hobG9j a3MoeGxvY2spOworCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMDsKKwlyYXdfbG9jYWxf aXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja19jb21taXRfY3Jv c3Nsb2NrKTsKKworLyoKKyAqIFJldHVybjogMCAtIGZhaWx1cmU7CisgKiAgICAgICAgIDEgLSBj cm9zc2xvY2ssIGRvbmU7CisgKiAgICAgICAgIDIgLSBub3JtYWwgbG9jaywgY29udGludWUgdG8g aGVsZF9sb2NrW10gb3BzLgorICovCitzdGF0aWMgaW50IGxvY2tfcmVsZWFzZV9jcm9zc2xvY2so c3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKQoreworCWlmIChjcm9zc19sb2NrKGxvY2spKSB7CisJ CWlmICghZ3JhcGhfbG9jaygpKQorCQkJcmV0dXJuIDA7CisJCSgoc3RydWN0IGxvY2tkZXBfbWFw X2Nyb3NzICopbG9jayktPnhsb2NrLm5yX2FjcXVpcmUtLTsKKwkJZ3JhcGhfdW5sb2NrKCk7CisJ CXJldHVybiAxOworCX0KKwlyZXR1cm4gMjsKK30KKworc3RhdGljIHZvaWQgY3Jvc3NfaW5pdChz dHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGludCBjcm9zcykKK3sKKwlpZiAoY3Jvc3MpCisJCSgo c3RydWN0IGxvY2tkZXBfbWFwX2Nyb3NzICopbG9jayktPnhsb2NrLm5yX2FjcXVpcmUgPSAwOwor CisJbG9jay0+Y3Jvc3MgPSBjcm9zczsKKworCS8qCisJICogQ3Jvc3NyZWxlYXNlIGFzc3VtZXMg dGhhdCB0aGUgcmluZyBidWZmZXIgc2l6ZSBvZiB4aGxvY2tzCisJICogaXMgYWxpZ25lZCB3aXRo IHBvd2VyIG9mIDIuIFNvIGZvcmNlIGl0IG9uIGJ1aWxkLgorCSAqLworCUJVSUxEX0JVR19PTihN QVhfWEhMT0NLU19OUiAmIChNQVhfWEhMT0NLU19OUiAtIDEpKTsKK30KKwordm9pZCBsb2NrZGVw X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJaW50IGk7CisKKwl0YXNr LT54aGxvY2tfaWR4ID0gVUlOVF9NQVg7CisJdGFzay0+aGlzdF9pZCA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgWEhMT0NLX0NUWF9OUjsgaSsrKSB7CisJCXRhc2stPnhobG9ja19pZHhfaGlzdFtp XSA9IFVJTlRfTUFYOworCQl0YXNrLT5oaXN0X2lkX3NhdmVbaV0gPSAwOworCX0KKworCXRhc2st PnhobG9ja3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlzdF9sb2NrKSAqIE1BWF9YSExPQ0tT X05SLAorCQkJCUdGUF9LRVJORUwpOworfQorCit2b2lkIGxvY2tkZXBfZnJlZV90YXNrKHN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlpZiAodGFzay0+eGhsb2NrcykgeworCQl2b2lkICp0 bXAgPSB0YXNrLT54aGxvY2tzOworCQkvKiBEaWFibGUgY3Jvc3NyZWxlYXNlIGZvciBjdXJyZW50 ICovCisJCXRhc2stPnhobG9ja3MgPSBOVUxMOworCQlrZnJlZSh0bXApOworCX0KK30KKyNlbmRp ZgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYyBiL2tlcm5lbC9zY2hlZC9j b21wbGV0aW9uLmMKaW5kZXggYTFhZDViN2Q1NTIxLi4wZjdjNDQyZjlkZDcgMTAwNjQ0Ci0tLSBh L2tlcm5lbC9zY2hlZC9jb21wbGV0aW9uLmMKKysrIGIva2VybmVsL3NjaGVkL2NvbXBsZXRpb24u YwpAQCAtMzEsNiArMzEsMTEgQEAgdm9pZCBjb21wbGV0ZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkK IAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsKIAorCS8qCisJICog UGVyZm9ybSBjb21taXQgb2YgY3Jvc3NyZWxlYXNlIGhlcmUuCisJICovCisJY29tcGxldGVfcmVs ZWFzZV9jb21taXQoeCk7CisKIAlpZiAoeC0+ZG9uZSAhPSBVSU5UX01BWCkKIAkJeC0+ZG9uZSsr OwogCV9fd2FrZV91cF9sb2NrZWQoJngtPndhaXQsIFRBU0tfTk9STUFMLCAxKTsKZGlmZiAtLWdp dCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMWVhZDA2ODI5 ZmRiLi5mYmZkZjdjMjYzZDIgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xp Yi9LY29uZmlnLmRlYnVnCkBAIC0xMDU1LDYgKzEwNTUsOCBAQCBjb25maWcgUFJPVkVfTE9DS0lO RwogCXNlbGVjdCBERUJVR19SV1NFTVMgaWYgUldTRU1fU1BJTl9PTl9PV05FUgogCXNlbGVjdCBE RUJVR19XV19NVVRFWF9TTE9XUEFUSAogCXNlbGVjdCBERUJVR19MT0NLX0FMTE9DCisJc2VsZWN0 IExPQ0tERVBfQ1JPU1NSRUxFQVNFCisJc2VsZWN0IExPQ0tERVBfQ09NUExFVElPTlMKIAlzZWxl Y3QgVFJBQ0VfSVJRRkxBR1MKIAlkZWZhdWx0IG4KIAloZWxwCkBAIC0xMTg3LDYgKzExODksMzcg QEAgY29uZmlnIExPQ0tERVAKIGNvbmZpZyBMT0NLREVQX1NNQUxMCiAJYm9vbAogCitjb25maWcg TE9DS0RFUF9DUk9TU1JFTEVBU0UKKwlib29sCisJaGVscAorCSBUaGlzIG1ha2VzIGxvY2tkZXAg d29yayBmb3IgY3Jvc3Nsb2NrIHdoaWNoIGlzIGEgbG9jayBhbGxvd2VkIHRvCisJIGJlIHJlbGVh c2VkIGluIGEgZGlmZmVyZW50IGNvbnRleHQgZnJvbSB0aGUgYWNxdWlzaXRpb24gY29udGV4dC4K KwkgTm9ybWFsbHkgYSBsb2NrIG11c3QgYmUgcmVsZWFzZWQgaW4gdGhlIGNvbnRleHQgYWNxdWly aW5nIHRoZSBsb2NrLgorCSBIb3dldmVyLCByZWxleGluZyB0aGlzIGNvbnN0cmFpbnQgaGVscHMg c3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMKKwkgc3VjaCBhcyBwYWdlIGxvY2tzIG9yIGNvbXBs ZXRpb25zIGNhbiB1c2UgdGhlIGxvY2sgY29ycmVjdG5lc3MKKwkgZGV0ZWN0b3IsIGxvY2tkZXAu CisKK2NvbmZpZyBMT0NLREVQX0NPTVBMRVRJT05TCisJYm9vbAorCWhlbHAKKwkgQSBkZWFkbG9j ayBjYXVzZWQgYnkgd2FpdF9mb3JfY29tcGxldGlvbigpIGFuZCBjb21wbGV0ZSgpIGNhbiBiZQor CSBkZXRlY3RlZCBieSBsb2NrZGVwIHVzaW5nIGNyb3NzcmVsZWFzZSBmZWF0dXJlLgorCitjb25m aWcgQk9PVFBBUkFNX0xPQ0tERVBfQ1JPU1NSRUxFQVNFX0ZVTExTVEFDSworCWJvb2wgIkVuYWJs ZSB0aGUgYm9vdCBwYXJhbWV0ZXIsIGNyb3NzcmVsZWFzZV9mdWxsc3RhY2siCisJZGVwZW5kcyBv biBMT0NLREVQX0NST1NTUkVMRUFTRQorCWRlZmF1bHQgbgorCWhlbHAKKwkgVGhlIGxvY2tkZXAg ImNyb3NzLXJlbGVhc2UiIGZlYXR1cmUgbmVlZHMgdG8gcmVjb3JkIHN0YWNrIHRyYWNlcworCSAo b2YgY2FsbGluZyBmdW5jdGlvbnMpIGZvciBhbGwgYWNxdWlzaXRpb25zLCBmb3IgZXZlbnR1YWwg bGF0ZXIKKwkgdXNlIGR1cmluZyBhbmFseXNpcy4gQnkgZGVmYXVsdCBvbmx5IGEgc2luZ2xlIGNh bGxlciBpcyByZWNvcmRlZCwKKwkgYmVjYXVzZSB0aGUgdW53aW5kIG9wZXJhdGlvbiBjYW4gYmUg dmVyeSBleHBlbnNpdmUgd2l0aCBkZWVwZXIKKwkgc3RhY2sgY2hhaW5zLgorCisJIEhvd2V2ZXIg YSBib290IHBhcmFtZXRlciwgY3Jvc3NyZWxlYXNlX2Z1bGxzdGFjaywgd2FzCisJIGludHJvZHVj ZWQgc2luY2Ugc29tZXRpbWVzIGRlZXBlciB0cmFjZXMgYXJlIHJlcXVpcmVkIGZvciBmdWxsCisJ IGFuYWx5c2lzLiBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgYm9vdCBwYXJhbWV0ZXIuCisKIGNv bmZpZyBERUJVR19MT0NLREVQCiAJYm9vbCAiTG9jayBkZXBlbmRlbmN5IGVuZ2luZSBkZWJ1Z2dp bmciCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgTE9DS0RFUAotLSAKMi4xOS4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK