Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8sSh-000y5f-0i for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Apr 2026 04:18:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8sRg-00FKGB-0R for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Apr 2026 04:17:16 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8sRe-00FKG2-2K for pgsql-hackers@lists.postgresql.org; Sat, 04 Apr 2026 04:17:16 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8sRZ-00000000T4M-44TZ for pgsql-hackers@lists.postgresql.org; Sat, 04 Apr 2026 04:17:13 +0000 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-43d02a71526so1419180f8f.3 for ; Fri, 03 Apr 2026 21:17:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775276227; cv=none; d=google.com; s=arc-20240605; b=OwFxlRCDbzfYw4Pbrylxv7ZVExnL70NbJLCxdXyZsVZX2FsLXuiBBqKsnrdjreysn6 YIrOlPMld+iXmjZNGcExtGTJAhRf4AcRpSpLcPmCHBSif2xpHZ4yprfOH95cdOy5Tb7C RFTCsc+idnHIYSqyZFaa9HjULVdVEYpEynljLrFtbCI/q4N03cpXIufJTRTcoXX10rDv /j9ywttn6jvIUew0i6fGtK4HmbVmf3QQ94SqMsnPdlKqTLC8Owm4Q7tbKhS+TbfuiskX ezGuT0ZTIlKBSXN+oQMuQjgXxk5qTT+YIlWA4k0aC88vwE+JG9lKvPA6Oxg+XK8AFF4n J64Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=HumzlbrMOQX+ohbQKxSGintOR+EqCBKr/lf1j6iqcEg=; fh=zYCqNQtPpWHQqTRPadJAtkZ8n+t8OPtZsU/Is7hsKpk=; b=Jhn5HOw6xDwvKa5p1fXPm9jaRj6C2luC5WLQUGkCQTdeysOGdQ0KWDH3lY6RYdxIIZ SOWay0Jmq0Jvmp3Gfq3z2hqxAv1I/OkdoIsS6QSNec8HoXTppucwGCMzF04vxGMu5Dow hjA2ln6EFg+HrrP8Ski4LYTtSgalq16y/OcxE8BhFV8cBUbKw3DF6FttOTLjp4VYrEQo lThT6AJjTtOPTrFxQHG8Bbut2oPC5BnMMofPvSizY7HL89xfsY54kVkZVUrf3Su7lyMb mgT6T0y4CxriqKamrIFmH0ZElLtMc76u2WJOvfS0h5IRYUWPy56axypSmV6Ga9jE6/Tu RUvg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1775276227; x=1775881027; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=HumzlbrMOQX+ohbQKxSGintOR+EqCBKr/lf1j6iqcEg=; b=iMa4xspuFb43XKhmCquS1cj0y4vhyY1k9kjmnE7Xu6KgorgCe0nrCvWaBp2Vj6Qv/m qczUzSr2/1/o6+Xmk2Sz8DCI1IIDUY+UWvbwfXV/E1NVwUG7OmMybotSWsCXiWVZ6Hwd shA4FBmk76kvE4BTYe44WaDU9P5gmc+7mhJjLI0Cv1abmiNoBUT1qR943uRfFsBo6IwO tTgUp6d+tPfYs4pKiJQsv10/fHzOCpxQAD3VQU4PZBX8oNqnUVs5gNgvD60p+YKkRziV gBkdg5BRHXtedsVwY/WUBsepEczJOFskJQvakg1VM6N5iMheRHUWpS+Vm2U5/S0SuBzk 7SdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775276227; x=1775881027; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=HumzlbrMOQX+ohbQKxSGintOR+EqCBKr/lf1j6iqcEg=; b=TTNZm9j3fXszCFVf3XieB3pJdu4l2Ugn4+Ba7t8bSJx01wJ7zViLlEnmxY/sezoytM Vssb03DaMkV3a7iY5DvYClQrD4EXyB1Aib0Nx8meXJd+4mdVBgUVqaF+VYIgmjpOLdn8 x6bKkraoSNS1IU85ub0OFuzPCFCMksqW51biWqs/v4HjXY+G63v3ReW/2kGk5ZWx1XCn x6YKCoJ2t878ixEN6GV2jbrqAt12HXFW2RM7VASr0r3l6bTIkrpGWag7YQolc8KcdUjE eEsLXi7TbefNQBb4favUtV/DhskPmP7qHMBM3hdTTJPMmWuRItR8d05BIJLj97gfjE+8 0cZg== X-Forwarded-Encrypted: i=1; AJvYcCWRkOvNYGD1C3lcLGccDhjmbSaTmo3v4Pfmgge8ctXUgIZUYK03jZ4n5AjqH4FhjMZ4+Eotn+Y+hh2V3lKk@lists.postgresql.org X-Gm-Message-State: AOJu0YytrxHBTZP2ubgTwdBVHUlFtHgZascQe1TDHvMJB5nmDBFD8J4b mAWLqwfIsDxDHzixCb74M8BVHsUE8HnOhBtoxuqKCgwaaBC9DoC4ADH+1iZ6P0eYCFdqt93AGtl zlSB1pKtvxxGxhrJRbUhwS2OxLAtUySa0zcaE4V+K2A== X-Gm-Gg: AeBDievz/PZaGmP4boS2pgdWuuLS0rqKLLKERqoi5vDdGs4ZnSvlTz84F6LQK005C75 cbwgoS5PHGjCdyV9M5G4KrbwpvMPnk/52vqKgC5x8+vYO6EyDqIs0ofN7UCElLq6kHxsWhLZwSA 9FxGqiCcIdMiA9h4LjQKeUsJP0QGWWbdTiabhUpHEPaY2FNFgd9iRa870HIQvJURsNUgnRUFxMc /c5Oruv6HsuHaLNc6Skwi+whtixuiAzCLH/ZUb6nQMPLLiRB7pYzZKgJn4cINxTb9MsdeUyK4Gu N8dpJrhUa21ri9QjYaWW+vw6xIz9W/uX87qfIplAHGugXMoet1j3tg== X-Received: by 2002:a5d:5f91:0:b0:43c:fc5c:a9fe with SMTP id ffacd0b85a97d-43d292c2a28mr8004048f8f.20.1775276226161; Fri, 03 Apr 2026 21:17:06 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Sat, 4 Apr 2026 00:16:37 -0400 X-Gm-Features: AQROBzBGLvU1ufqEjbsgImBPQsvYBhAEtjDSdGqQCrCgl3vgt0-wZGm2SeSQY8s Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000d73dc2064e9ab4fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d73dc2064e9ab4fb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 3, 2026 at 1:17=E2=80=AFAM Peter Geoghegan wrote: > Attached is v21, which advances things in the direction established in > v20. It also fixes bitrot -- we no longer carry certain read stream > related patches from Andres that were committed since I posted v20 a > couple of days ago. The patch bitrot again. Attached is v22 to fix that. Nothing terribly interesting here, compared to v21. I spent quite a lot of time on the documentation today. This involved general polishing, some of which focused on making the documentation better align with the changes from v20 and v21. --=20 Peter Geoghegan --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0014-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v22-0014-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg862 RnJvbSA2OGRhN2ZjMzMyNWEzMWM1NjQ4MjhmYjBmODJjZGRhNTA5NjJlMDE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAx NC8xNV0gYWlvOiBGaXggcGdhaW9faW9fd2FpdCgpIGZvciBzdGFnZWQgSU9zIChCKS4KClByZXZp b3VzbHksIHBnYWlvX2lvX3dhaXQoKSdzIGNhc2VzIGZvciBQR0FJT19IU19ERUZJTkVEIGFuZApQ R0FJT19IU19TVEFHRUQgZmVsbCB0aHJvdWdoIHRvIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICBU aGUgb3duZXIgb25seQpwcm9taXNlcyB0byBhZHZhbmNlIGl0IHRvIFBHQUlPX0hTX1NVQk1JVFRF RC4gIFRoZSB3YWl0ZXIgbmVlZHMgdG8gYmUKcHJlcGFyZWQgdG8gY2FsbCAtPndhaXRfb25lKCkg aXRzZWxmIG9uY2UgdGhlIElPIGlzIHN1Ym1pdHRlZCBpbiBvcmRlcgp0byBndWFyYW50ZWUgcHJv Z3Jlc3MgYW5kIGF2b2lkIGRlYWRsb2NrcyBvbiBJTyBtZXRob2RzIHRoYXQgcHJvdmlkZQotPndh aXRfb25lKCkuCgpJbnRyb2R1Y2UgYSBuZXcgcGVyLWJhY2tlbmQgY29uZGl0aW9uIHZhcmlhYmxl IHN1Ym1pdF9jdiwgd29rZW4gYnkgYnkKcGdhaW9fc3VibWl0X3N0YWdlKCksIGFuZCB1c2UgaXQg dG8gd2FpdCBmb3IgdGhlIHN0YXRlIHRvIGFkdmFuY2UuICBUaGUKbmV3IGJyb2FkY2FzdCBkb2Vz bid0IHNlZW0gdG8gY2F1c2UgYW55IG1lYXN1cmFibGUgc2xvd2Rvd24sIHNvIGlkZWFzCmZvciBv cHRpbWl6aW5nIHRoZSBjb21tb24gbm8td2FpdGVycyBjYXNlIHdlcmUgYWJhbmRvbmVkIGZvciBu b3cuCgpJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHJlYWNoIGFueSByZWFsIGRlYWRsb2NrIHdp dGggZXhpc3RpbmcgQUlPCnVzZXJzLCBidXQgdGhhdCBzaXR1YXRpb24gY291bGQgY2hhbmdlLiAg VGhlcmUncyBhbHNvIG5vIHJlYXNvbiB0aGUKd2FpdGVyIHNob3VsZG4ndCBiZWdpbiB0byB3YWl0 IHZpYSB0aGUgSU8gbWV0aG9kIGFzIHNvb24gYXMgcG9zc2libGUKZXZlbiB3aXRob3V0IGEgZGVh ZGxvY2suCgpQaWNrZWQgdXAgYnkgdGVzdGluZyBhIHByb3Bvc2VkIElPIG1ldGhvZCB0aGF0IGhh cyAtPndhaXRfb25lKCksIGxpa2UKaW9fbWV0aG9kPWlvX3VyaW5nLCBhbmQgY29kZSByZXZpZXcu CgpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0cl MkJtWllyU2RuaGstWHJCWU8xOEg4MjlLNzdTOWdNS1VzeWtPaVRKdHFCNDNnJTQwbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICAgICAg fCAgNyArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0 LmMgICAgICAgICAgICB8ICAxICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaAppbmRleCAzM2UxZTJkYzAu LmRlZWM4M2JkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCkBAIC0yMTQsNiArMjE0 LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvQmFja2VuZAogCXVpbnQxNgkJbnVtX3N0YWdlZF9p b3M7CiAJUGdBaW9IYW5kbGUgKnN0YWdlZF9pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwog CisJLyoKKwkgKiBPdGhlciBiYWNrZW5kcyBzb21ldGltZXMgbmVlZCB0byB3YWl0IGZvciB0aGUg b3duaW5nIGJhY2tlbmQgdG8gc3VibWl0LgorCSAqIFRoZSBwZXItSU8gQ1Ygd291bGQgd29yayBm b3IgdGhhdCBwdXJwb3NlLCBidXQgYSBwZXItYmFja2VuZCBDViBhbGxvd3MKKwkgKiBmb3IganVz dCBvbmUgYnJvYWRjYXN0IHBlciBzdWJtaXR0ZWQgYmF0Y2guCisJICovCisJQ29uZGl0aW9uVmFy aWFibGUgc3VibWl0X2N2OworCiAJLyoKIAkgKiBMaXN0IG9mIGluLWZsaWdodCBJT3MuIEFsc28g Y29udGFpbnMgSU9zIHRoYXQgYXJlbid0IHN0cmljdGx5IHNwZWFraW5nCiAJICogaW4tZmxpZ2h0 IGFueW1vcmUsIGJ1dCBoYXZlIGJlZW4gd2FpdGVkLWZvciBhbmQgY29tcGxldGVkIGJ5IGFub3Ro ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggMWE5NmE4YTlhLi5mMGI0YTY1MjIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpby5jCkBAIC01NzEsNiArNTcxLDE2IEBAIHBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3RhdGUK IAlyZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwogfQogCisvKgorICog V2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QuIERvbid0IGNoZWNrIHZp YSB0aGUgSU8gbWV0aG9kIGlmCisgKiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZyB0 aGUgSU8gc3luY2hyb25vdXNseS4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX2lvX25lZWRzX3dh aXRfb25lKFBnQWlvSGFuZGxlICppb2gpCit7CisJcmV0dXJuIHBnYWlvX21ldGhvZF9vcHMtPndh aXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKTsKK30KKwogLyoK ICAqIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBFeHRlcm5hbCBjb2RlIHNob3VsZCBuZXZlciB1 c2UgdGhpcywgb3V0c2lkZSBvZgogICogdGhlIEFJTyBzdWJzeXN0ZW0gd2FpdHMgYXJlIG9ubHkg YWxsb3dlZCB2aWEgcGdhaW9fd3JlZl93YWl0KCkuCkBAIC02MTAsMjMgKzYyMCwzOCBAQCBwZ2Fp b19pb193YWl0KFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQll bG9nKEVSUk9SLCAiSU8gaW4gd3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwogCQkJCWJyZWFrOwog Ci0JCQljYXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKKwkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoK KwkJCWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBuZWVkIHRv IHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRvIHNvIG5vdy4gRG9uJ3QKLQkJCQkgKiBjaGVjayB2 aWEgdGhlIElPIG1ldGhvZCBpZiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZwotCQkJ CSAqIHRoZSBJTyBzeW5jaHJvbm91c2x5LgorCQkJCSAqIFRoZSBvd25lciBoYXNuJ3Qgc3VibWl0 dGVkIHRoZSBJTyB5ZXQuIElmIHdlIG5lZWQgdG8gd2FpdAorCQkJCSAqIHZpYSB0aGUgSU8gbWV0 aG9kLCB3YWl0IGZvciBzdWJtaXNzaW9uLCBnaXZpbmcgdGhpcyBiYWNrZW5kCisJCQkJICogdGhl IGNoYW5jZSB0byBjYWxsIC0+d2FpdF9vbmUoKS4KIAkJCQkgKi8KLQkJCQlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gtPmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMp KQorCQkJCWlmIChwZ2Fpb19pb19uZWVkc193YWl0X29uZShpb2gpKQorCQkJCXsKKwkJCQkJUGdB aW9CYWNrZW5kICpiYWNrZW5kID0gJnBnYWlvX2N0bC0+YmFja2VuZF9zdGF0ZVtpb2gtPm93bmVy X3Byb2Nub107CisKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmYmFja2Vu ZC0+c3VibWl0X2N2KTsKKwkJCQkJd2hpbGUgKCFwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCBy ZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSAmJgorCQkJCQkJICAgKHN0YXRlID09IFBHQUlPX0hTX0RF RklORUQgfHwKKwkJCQkJCQlzdGF0ZSA9PSBQR0FJT19IU19TVEFHRUQpKQorCQkJCQkJQ29uZGl0 aW9uVmFyaWFibGVTbGVlcCgmYmFja2VuZC0+c3VibWl0X2N2LCBXQUlUX0VWRU5UX0FJT19JT19T VUJNSVQpOworCQkJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCQkJCWNvbnRp bnVlOworCQkJCX0KKwkJCQlwZ19mYWxsdGhyb3VnaDsKKworCQkJY2FzZSBQR0FJT19IU19TVUJN SVRURUQ6CisKKwkJCQkvKiBJZiB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRv IHNvIG5vdy4gKi8KKwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKIAkJCQl7 CiAJCQkJCXBnYWlvX21ldGhvZF9vcHMtPndhaXRfb25lKGlvaCwgcmVmX2dlbmVyYXRpb24pOwog CQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcGdfZmFsbHRocm91Z2g7CiAKLQkJCQkvKiB3YWl0 aW5nIGZvciBvd25lciB0byBzdWJtaXQgKi8KLQkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoKLQkJ CWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCQkJCS8qIHdhaXRpbmcgZm9yIHJlYXBlciB0byBjb21w bGV0ZSAqLwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRF RF9JTzoKQEAgLTExNzksNiArMTIwNCwxNSBAQCBwZ2Fpb19zdWJtaXRfc3RhZ2VkKHZvaWQpCiAK IAlwZ2Fpb19teV9iYWNrZW5kLT5udW1fc3RhZ2VkX2lvcyA9IDA7CiAKKwkvKgorCSAqIFdha2Ug YW55IGJhY2tlbmQgdGhhdCBzdGFydGVkIHdhaXRpbmcgZm9yIGFueSBvZiB0aGVzZSBJT3MgYmVm b3JlCisJICogc3VibWlzc2lvbiwgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgLT53YWl0X29u ZSgpIHRvIGd1YXJhbnRlZQorCSAqIHByb2dyZXNzIHdpdGggdGhlIGNvbmZpZ3VyZWQgSU8gbWV0 aG9kLiAgT24gaXRzIHNpZGUsIHBnYWlvX2lvX3dhaXQoKQorCSAqIG9ubHkgd2FpdHMgZm9yIHN1 Ym1pdF9jdiBvbiBJTyBtZXRob2RzIG5lZWRpbmcgdGhhdC4KKwkgKi8KKwlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUpCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZwZ2Fpb19t eV9iYWNrZW5kLT5zdWJtaXRfY3YpOworCiAJcGdhaW9fZGVidWcoREVCVUc0LAogCQkJCSJhaW86 IHN1Ym1pdHRlZCAlZCBJT3MiLAogCQkJCXRvdGFsX3N1Ym1pdHRlZCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkM2M2OGQ4YjAuLmMyMDk1ZWY3NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW9faW5pdC5jCkBAIC0xODQsNiArMTg0LDcgQEAgQWlvU2htZW1Jbml0KHZvaWQpCiAK IAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lvcywg MCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOworCQlD b25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgmYnMt PmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4 IDBhNmQxNmY4MS4uOTU4MzFjYjc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMTk5LDYgKzE5OSw3IEBAIEFCSV9jb21wYXRpYmls aXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBMRVRJ T04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9fSU9f U1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJT19J T19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5nLiIK IEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEgaW9f dXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byByZWFk IGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0001-Rename-heapam_index_fetch_tuple-argument-for-cla.patch" Content-Disposition: attachment; filename="v22-0001-Rename-heapam_index_fetch_tuple-argument-for-cla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg7u0 RnJvbSAxMzQ4YzlmYTM4ZTMzYWIyOWI5NWY4MjVkZmZhZDJiZmJkMzViOTM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMSBBcHIgMjAyNiAxNzo0NDo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIyIDAxLzE1XSBS ZW5hbWUgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGFyZ3VtZW50IGZvcgogY2xhcml0eS4KClJl bmFtZSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUncyBjYWxsX2FnYWluIGFyZ3VtZW50IHRvIGhl YXBfY29udGludWUsCmZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBwb2ludGVkLXRvIHZhcmlhYmxl IG5hbWUgKEluZGV4U2NhbkRlc2NEYXRhJ3MKeHNfaGVhcF9jb250aW51ZSBmaWVsZCkuCgpQcmVw YXJhdGlvbiBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBtb3ZlIGluZGV4IHNjYW4g cmVsYXRlZApoZWFwYW0gZnVuY3Rpb25zIGludG8gdGhlaXIgb3duIGZpbGUuCgpBdXRob3I6IFBl dGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFu ZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5 anhvYWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgK LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTAgKysrKyst LS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAxYmU4ZWE0ODQuLmRj N2RiNTg4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0x MjYsNyArMTI2LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCSBTbmFwc2hv dCBzbmFwc2hvdCwKIAkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCSBib29sICpj YWxsX2FnYWluLCBib29sICphbGxfZGVhZCkKKwkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBi b29sICphbGxfZGVhZCkKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0 Y2hIZWFwRGF0YSAqKSBzY2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAo QnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CkBAIC0xMzUsNyArMTM1LDcgQEAgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAog CUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCiAJLyogV2UgY2FuIHNraXAgdGhl IGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlp ZiAoISpjYWxsX2FnYWluKQorCWlmICghKmhlYXBfY29udGludWUpCiAJewogCQkvKiBTd2l0Y2gg dG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCiAJCUJ1ZmZl cgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsKQEAgLTE2MSw3ICsxNjEsNyBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCQkJ CQkJCQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0YSwKIAkJCQkJ CQkJCQkJYWxsX2RlYWQsCi0JCQkJCQkJCQkJCSEqY2FsbF9hZ2Fpbik7CisJCQkJCQkJCQkJCSEq aGVhcF9jb250aW51ZSk7CiAJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOwogCUxv Y2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKQEAgLTE3MSw3 ICsxNzEsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCiAJCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBjYW4gbW9yZSB0 aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAogCQkgKiBjaGFpbiBiZSB2aXNpYmxlLgogCQkgKi8K LQkJKmNhbGxfYWdhaW4gPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJKmhlYXBf Y29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKIAogCQlzbG90LT50dHNf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7CiAJCUV4ZWNTdG9yZUJ1ZmZl ckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOwpA QCAtMTc5LDcgKzE3OSw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAllbHNlCiAJewogCQkvKiBXZSd2ZSByZWFjaGVkIHRoZSBl bmQgb2YgdGhlIEhPVCBjaGFpbi4gKi8KLQkJKmNhbGxfYWdhaW4gPSBmYWxzZTsKKwkJKmhlYXBf Y29udGludWUgPSBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7Ci0tIAoyLjUz LjAKCg== --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0015-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v22-0015-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg821 RnJvbSBjOGQ4ZmI1YjFlZTRlOTg4N2VlNjQxMGVmNjBiN2MxYWZhY2ZhM2QyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAx NS8xNV0gV0lQOiBhaW86IGJ1Zm1ncjogRml4IHJhY2UgY29uZGl0aW9uIGxlYWRpbmcgdG8KIGRl YWRsb2NrcyB3aXRoIGlvX3VyaW5nCgpJZiBiYWNrZW5kIEEgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg c3RhcnRpbmcgSU8gZm9yIGEgYnVmZmVyLCB0aGVyZSBpcyBhIHNob3J0CnBlcmlvZCBpbiB3aGlj aCB0aGUgYnVmZmVyIGlzIG1hcmtlZCBhcyBJT19JTl9QUk9HUkVTUyB3aXRob3V0IGhhdmluZyBh bgphc3NvY2lhdGVkIEFJTyB3YWl0IHJlZmVyZW5jZS4gSWYgYSBiYWNrZW5kIEIgZG9lcyBXYWl0 SU8oKSBvbiB0aGF0IGJ1ZmZlciwKaXQnbGwgd2FpdCBmb3IgdGhlIGJ1ZmZlcidzIElPIGNvbmRp dGlvbiB2YXJpYWJsZSB0byBiZSBzZXQuIE1vc3Qgb2YgdGhlIHRpbWUKdGhhdCBpcyBPSywgd2hl biB0aGUgSU8gb24gdGhlIGJ1ZmZlciBmaW5pc2hlcywgdGhlIENWIHdpbGwgYmUgc2lnbmFsbGVk LgpIb3dldmVyLCB3aXRoIGlvX3VyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZXIg KEEpIG9mIHRoZSBJTyBuZXZlcgpnZXRzIGFyb3VuZCB0byBkb2luZyBzbywgZS5nLiBiZWNhdXNl IGl0IGlzIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBkb25lIGJ5IEIuCgpUbyBmaXggdGhhdCwgd2Ug bmVlZCB0byBzaWduYWwgdGhlIENWIHdoZW4gc3RhZ2luZyBJTy4gVGhhdCdzIGFubm95aW5nIGFz IENWCmJyb2FkY2FzdHMgYXJlIG5vdCBjaGVhcC4gU28gd2UgYXQgbGVhc3QgYXZvaWQgaXQgZm9y IHRoZSBjb21tb24gY2FzZSBvZiBJTwpiZWluZyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LgoKSSBo b3BlIHRoYXQgZXZlbnR1YWxseSB3ZSBjYW4gZ2V0IGF3YXkgZnJvbSBuZWVkaW5nIG11bHRpcGxl IHN5c3RlbXMgZm9yCnNpZ25hbGxpbmcgSU8gY29tcGxldGlvbiwgYnV0IHdlIGFyZSBjbGVhcmx5 IG5vdCB0aGVyZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAyMiArKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDNjYzBiMGJkZC4uODE1MTVkMTgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtODI3OCw3ICs4Mjc4LDcgQEAgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2RpcnRpZWQsCiAgKiByZXBsYWNlZCB3aGlsZSBJTyBpcyBvbmdvaW5nLgogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotYnVmZmVyX3N0YWdlX2NvbW1v bihQZ0Fpb0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCitidWZmZXJf c3RhZ2VfY29tbW9uKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ4IGNiX2RhdGEsIGJvb2wgaXNfd3Jp dGUsIGJvb2wgaXNfdGVtcCkKIHsKIAl1aW50NjQJICAgKmlvX2RhdGE7CiAJdWludDgJCWhhbmRs ZV9kYXRhX2xlbjsKQEAgLTgzNzcsNyArODM3NywyMyBAQCBidWZmZXJfc3RhZ2VfY29tbW9uKFBn QWlvSGFuZGxlICppb2gsIGJvb2wgaXNfd3JpdGUsIGJvb2wgaXNfdGVtcCkKIAkJICoga2VlcHMg dHJhY2suCiAJCSAqLwogCQlpZiAoIWlzX3RlbXApCisJCXsKIAkJCVJlc291cmNlT3duZXJGb3Jn ZXRCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKworCQkJLyoKKwkJCSAq IEEgYmFja2VuZCBtaWdodCBoYXZlIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIElPIHVzaW5nIHRo ZQorCQkJICogYnVmZmVyJ3MgY29uZGl0aW9uIHZhcmlhYmxlLCBidXQgb25jZSB0aGUgSU8gaXMg c3VibWl0dGVkLCBpdAorCQkJICogc2hvdWxkIHdhaXQgdmlhIHRoZSBBSU8gc3Vic3lzdGVtLCBh cyBhIHdhaXRlciBtaWdodCBuZWVkIHRvCisJCQkgKiBjb21wbGV0ZSB0aGUgSU8uCisJCQkgKgor CQkJICogSG93ZXZlciwgZG9pbmcgYnJvYWRjYXN0cyBpcyBub3QgZnJlZSwgc28gd2UgbGlrZSB0 byBhdm9pZCBpdAorCQkJICogd2hlbiBub3QgbmVjZXNzYXJ5LiBJZiB0aGUgSU8gaXMgYmVpbmcg ZXhlY3V0ZWQgc3luY2hyb25vdXNseSwKKwkJCSAqIHRoaXMgYmFja2VuZCB3aWxsIGFsd2F5cyBl bmQgdXAgc2lnbmFsbGluZyB0aGUgSU9DViB3aXRob3V0CisJCQkgKiBmdXJ0aGVyIHdhaXRpbmcs IHRoZXJlZm9yZSBhdm9pZCBkb2luZyBzbyBoZXJlLgorCQkJICovCisJCQlpZiAoIShjYl9kYXRh ICYgUkVBRF9CVUZGRVJTX1NZTkNIUk9OT1VTTFkpKQorCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NWKGJ1Zl9oZHIpKTsKKwkJfQogCX0KIH0KIApA QCAtODg3Myw3ICs4ODg5LDcgQEAgYnVmZmVyX3JlYWR2X3JlcG9ydChQZ0Fpb1Jlc3VsdCByZXN1 bHQsIGNvbnN0IFBnQWlvVGFyZ2V0RGF0YSAqdGQsCiBzdGF0aWMgdm9pZAogc2hhcmVkX2J1ZmZl cl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQogewotCWJ1ZmZl cl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgZmFsc2UpOworCWJ1ZmZlcl9zdGFnZV9jb21tb24o aW9oLCBjYl9kYXRhLCBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgUGdBaW9SZXN1bHQKQEAg LTg5MjQsNyArODk0MCw3IEBAIHNoYXJlZF9idWZmZXJfcmVhZHZfY29tcGxldGVfbG9jYWwoUGdB aW9IYW5kbGUgKmlvaCwgUGdBaW9SZXN1bHQgcHJpb3JfcmVzdWx0LAogc3RhdGljIHZvaWQKIGxv Y2FsX2J1ZmZlcl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQog ewotCWJ1ZmZlcl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgdHJ1ZSk7CisJYnVmZmVyX3N0YWdl X2NvbW1vbihpb2gsIGNiX2RhdGEsIGZhbHNlLCB0cnVlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVz dWx0Ci0tIAoyLjUzLjAKCg== --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0013-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Disposition: attachment; filename="v22-0013-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8a3 RnJvbSBjMTIwNGY0MjFkYmU1ZTg2YjMxNGYzYTU1MmE5NTgzMjkzZGJkMzQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTI6MjU6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAx My8xNV0gV0lQOiByZWFkIHN0cmVhbTogU3BsaXQgZGVjaXNpb24gYWJvdXQgbG9vayBhaGVhZAog Zm9yIEFJTyBhbmQgY29tYmluaW5nCgpQcmV2aW91cyBjb21taXRzIGNhdXNlZCBhIHJlZ3Jlc3Np b24gZHVlIHRvIHRoZSB0aGlzIGNvbmZsYXRpb24uIFRoaXMgaXMgYQpmaXJzdCBhdHRlbXB0IGF0 IGZpeGluZyB0aGUgcHJvYmxlbS4gIE5lZWRzIHNpZ25pZmljYW50IHJlb3JkZXJpbmcgYW5kCnNw bGl0dGluZyBpZiBpdCB3b3JrcyBvdXQuCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0MiArKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCBkMDVlNGZhZDQuLmFkYjU1NDI5OSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OCwxMCArOTgsMTQgQEAgc3Ry dWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJbWF4X3Bpbm5lZF9idWZmZXJzOwogCWludDE2CQlmb3J3 YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7Ci0JaW50MTYJCWRpc3RhbmNl OworCS8qIGxpbWl0IG9mIGhvdyBmYXIgdG8gcmVhZCBhaGVhZCBmb3IgSU8gY29tYmluaW5nICov CisJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CisJLyogbGltaXQgb2YgaG93IGZhciB0byByZWFk IGFoZWFkIGZvciBzdGFydGluZyBJTyBlYXJseSAqLworCWludDE2CQlyZWFkYWhlYWRfZGlzdGFu Y2U7CiAJdWludDE2CQlkaXN0YW5jZV9kZWNheV9ob2xkb2ZmOwogCWludDE2CQlpbml0aWFsaXpl ZF9idWZmZXJzOwotCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9yZWFk YWhlYWRfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogCWludAkJ CXJlYWRfYnVmZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRo b2Q9c3luYyAqLwogCWJvb2wJCWJhdGNoX21vZGU7CQkvKiBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJ TkcgKi8KQEAgLTMzMiw4ICszMzYsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQo UmVhZFN0cmVhbSAqc3RyZWFtKQogCiAJCS8qIFNocmluayBkaXN0YW5jZTogbm8gbW9yZSBsb29r LWFoZWFkIHVudGlsIGJ1ZmZlcnMgYXJlIHJlbGVhc2VkLiAqLwogCQluZXdfZGlzdGFuY2UgPSBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgYnVmZmVyX2xpbWl0OwotCQlpZiAoc3RyZWFtLT5kaXN0 YW5jZSA+IG5ld19kaXN0YW5jZSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2UgPSBuZXdfZGlzdGFuY2U7 CisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IG5ld19kaXN0YW5jZSkKKwkJCXN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwogCiAJCS8qIFVubGVzcyB3 ZSBoYXZlIG5vdGhpbmcgdG8gZ2l2ZSB0aGUgY29uc3VtZXIsIHN0b3AgaGVyZS4gKi8KIAkJaWYg KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPiAwKQpAQCAtMzc0LDEyICszNzgsMjMgQEAgcmVhZF9z dHJlYW1fc3RhcnRfcGVuZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJICogcGVyZm9y bSBJTyBhc3luY2hyb25vdXNseSB3aGVuIHN0YXJ0aW5nIG91dCB3aXRoIGEgc21hbGwgbG9vay1h aGVhZAogCQkgKiBkaXN0YW5jZS4KIAkJICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAm JiBzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKQorCQlpZiAoc3RyZWFtLT5pb3NfaW5fcHJv Z3Jlc3MgPT0gMCkKIAkJewotCQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9sZG9mZiA9 PSAwKQotCQkJCXN0cmVhbS0+ZGlzdGFuY2UtLTsKLQkJCWVsc2UKKwkJCWlmIChzdHJlYW0tPmRp c3RhbmNlX2RlY2F5X2hvbGRvZmYgPiAwKQogCQkJCXN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9s ZG9mZi0tOworCQkJZWxzZQorCQkJeworCQkJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA+IDEpCisJCQkJCXN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlLS07CisKKwkJCQkvKgorCQkJ CSAqIFhYWDogU2hvdWxkIHdlIGFjdHVhbGx5IHJlZHVjZSB0aGlzIGF0IGFueSB0aW1lIG90aGVy IHRoYW4KKwkJCQkgKiBhIHJlc2V0PyBGb3Igbm93IHdlIGhhdmUgdG8sIGFzIHRoaXMgaXMgYWxz byBhIGNvbmRpdGlvbgorCQkJCSAqIGZvciByZS1lbmFibGluZyBmYXN0X3BhdGguCisJCQkJICov CisJCQkJaWYgKHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA+IDEpCisJCQkJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZS0tOworCQkJfQogCQl9CiAJfQogCWVsc2UKQEAgLTQ0MCw2ICs0NTUsMTAx IEBAIHJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJ cmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBTaG91bGQgd2UgY29udGludWUgdG8gcGVyZm9ybSBs b29rIGFoZWFkPyAgVGhlIGxvb2sgYWhlYWQgbWF5IGFsbG93IHVzIHRvCisgKiBtYWtlIHRoZSBw ZW5kaW5nIElPIGxhcmdlciB2aWEgSU8gY29tYmluaW5nIG9yIHRvIGlzc3VlIG1vcmUgcmVhZCBh aGVhZC4KKyAqLworc3RhdGljIGJvb2wKK3JlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKFJl YWRTdHJlYW0gKnN0cmVhbSkKK3sKKwkvKiBuZXZlciBzdGFydCBtb3JlIElPcyB0aGFuIG91ciBj YXAgKi8KKwlpZiAoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPj0gc3RyZWFtLT5tYXhfaW9zKQor CQlyZXR1cm4gZmFsc2U7CisKKwkvKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1v Zi1zdHJlYW0sIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2Ug PD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogbmV2ZXIgcGluIG1vcmUgYnVmZmVycyB0aGFu IGFsbG93ZWQgKi8KKwlpZiAoc3RyZWFtLT5waW5uZWRfYnVmZmVycyArIHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogQWxsb3cgbG9va2luZyBmdXJ0aGVyIGFoZWFkIGlmIHdlIGhhdmUg YW4gdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYQorCSAqIGxhcmdlciBJTywgdGhlIElPIGlzIG5v dCB5ZXQgYmlnIGVub3VnaCBhbmQgd2UgZG9uJ3QgeWV0IGhhdmUgSU8gaW4KKwkgKiBmbGlnaHQu ICBOb3RlIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGV2ZW4gaWYgd2UgYXJlIHJlYWNoaW5nIHRoZQor CSAqIHJlYWRhaGVhZCBsaW1pdCAoYnV0IG5vdCB0aGUgYnVmZmVyIHBpbiBsaW1pdCkuCisJICoK KwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgY2FzZXMgd2hlcmUgZWl0aGVyIGVmZmVjdGl2ZV9p b19jb25jdXJyZW5jeSBpcworCSAqIGxvdyBvciB3ZSBuZXZlciBuZWVkIHRvIHdhaXQgZm9yIElP IGFuZCB0aHVzIGFyZSBub3QgaW5jcmVhc2luZyB0aGUKKwkgKiBkaXN0YW5jZS4gV2l0aG91dCB0 aGlzIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGxvdHMgb2Ygc21hbGwgSU9zLgorCSAqLworCWlmIChz dHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID4gMCAmJgorCQlzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDAgJiYKKwkJc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IG1v cmUgcmVhZGFoZWFkIGlmIHRoYXQnZCBwdXQgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGRvaW5nCisJ ICogcmVhZGFoZWFkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFt LT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA+PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIFdlIGRvbid0IHN0 YXJ0IHRoZSBwZW5kaW5nIHJlYWQganVzdCBiZWNhdXNlIHdlJ3ZlIGhpdCB0aGUgZGlzdGFuY2Ug bGltaXQsCisgKiBwcmVmZXJyaW5nIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0 byBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6ZQorICogb25jZSBtb3JlIGJ1ZmZlcnMgaGF2ZSBi ZWVuIGNvbnN1bWVkLiAgQnV0IHRoaXMgaXMgbm90IGRlc2lyYWJsZSBpbiBhbGwKKyAqIHNpdHVh dGlvbnMgLSBzZWUgYmVsb3cuCisgKi8KK3N0YXRpYyBib29sCityZWFkX3N0cmVhbV9zaG91bGRf aXNzdWVfbm93KFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlpbnQxNgkJcGVuZGluZ19yZWFkX25i bG9ja3MgPSBzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzOworCisJLyogbm8gSU8gdG8gaXNz dWUgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIgY2FwICovCisJaWYgKHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID49IHN0cmVhbS0+bWF4X2lvcykKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1vZi1zdHJlYW0sIHN0YXJ0 IHRoZSByZWFkCisJICogaW1tZWRpYXRlbHkuIFRoZXJlJ3Mgbm8gZGVmZXJyaW5nIGl0IGZvciBs YXRlci4KKwkgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBpb19jb21iaW5l X2xpbWl0LCB0aGVyZSdzIG5vIGNoYW5jZSBvZiBncm93aW5nCisJICogdGhlIHJlYWQgZnVydGhl ci4KKwkgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5pb19jb21iaW5l X2xpbWl0KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHNhbWUgaWYgY2FwcGVkIG5vdCBieSBpb19j b21iaW5lX2xpbWl0IGJ1dCBjb21iaW5lX2Rpc3RhbmNlICovCisJaWYgKHN0cmVhbS0+Y29tYmlu ZV9kaXN0YW5jZSA+IDAgJiYKKwkJcGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgd2UgY3VycmVudGx5 IGhhdmUgbm8gcmVhZHMgaW4gZmxpZ2h0IG9yIHByZXBhcmVkLCBpc3N1ZSB0aGUgSU8gb25jZQor CSAqIHdlIHN0b3BwZWQgbG9va2luZyBhaGVhZC4gVGhpcyBlbnN1cmVzIHRoZXJlJ3MgYWx3YXlz IGF0IGxlYXN0IG9uZSBJTworCSAqIHByZXBhcmVkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5l ZF9idWZmZXJzID09IDAgJiYKKwkJIXJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0cmVh bSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdm9pZAog cmVhZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7CkBAIC00NTIsMTQg KzU2MiwxMyBAQCByZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAlp ZiAoc3RyZWFtLT5iYXRjaF9tb2RlKQogCQlwZ2Fpb19lbnRlcl9iYXRjaG1vZGUoKTsKIAotCXdo aWxlIChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA8IHN0cmVhbS0+bWF4X2lvcyAmJgotCQkgICBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0 cmVhbS0+ZGlzdGFuY2UpCisJd2hpbGUgKHJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0 cmVhbSkpCiAJewogCQlCbG9ja051bWJlciBibG9ja251bTsKIAkJaW50MTYJCWJ1ZmZlcl9pbmRl eDsKIAkJdm9pZAkgICAqcGVyX2J1ZmZlcl9kYXRhOwogCi0JCWlmIChzdHJlYW0tPnBlbmRpbmdf cmVhZF9uYmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCkKKwkJaWYgKHJlYWRfc3Ry ZWFtX3Nob3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJewogCQkJcmVhZF9zdHJlYW1fc3RhcnRf cGVuZGluZ19yZWFkKHN0cmVhbSk7CiAJCQljb250aW51ZTsKQEAgLTQ3OSw3ICs1ODgsOCBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJaWYgKGJsb2NrbnVt ID09IEludmFsaWRCbG9ja051bWJlcikKIAkJewogCQkJLyogRW5kIG9mIHN0cmVhbS4gKi8KLQkJ CXN0cmVhbS0+ZGlzdGFuY2UgPSAwOworCQkJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAw OworCQkJc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKQEAg LTUxMSwyMSArNjIxLDEzIEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCX0KIAogCS8qCi0JICogV2UgZG9uJ3Qgc3RhcnQgdGhlIHBlbmRpbmcgcmVhZCBqdXN0 IGJlY2F1c2Ugd2UndmUgaGl0IHRoZSBkaXN0YW5jZQotCSAqIGxpbWl0LCBwcmVmZXJyaW5nIHRv IGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0byBmdWxsCi0JICogaW9fY29tYmluZV9s aW1pdCBzaXplIG9uY2UgbW9yZSBidWZmZXJzIGhhdmUgYmVlbiBjb25zdW1lZC4gIEhvd2V2ZXIs Ci0JICogaWYgd2UndmUgYWxyZWFkeSByZWFjaGVkIGlvX2NvbWJpbmVfbGltaXQsIG9yIHdlJ3Zl IHJlYWNoZWQgdGhlCi0JICogZGlzdGFuY2UgbGltaXQgYW5kIHRoZXJlIGlzbid0IGFueXRoaW5n IHBpbm5lZCB5ZXQsIG9yIHRoZSBjYWxsYmFjayBoYXMKLQkgKiBzaWduYWxlZCBlbmQtb2Ytc3Ry ZWFtLCB3ZSBzdGFydCB0aGUgcmVhZCBpbW1lZGlhdGVseS4gIE5vdGUgdGhhdCB0aGUKLQkgKiBw ZW5kaW5nIHJlYWQgY2FuIGV4Y2VlZCB0aGUgZGlzdGFuY2UgZ29hbCwgaWYgdGhlIGxhdHRlciB3 YXMgcmVkdWNlZAotCSAqIGFmdGVyIGhpdHRpbmcgdGhlIHBlci1iYWNrZW5kIGJ1ZmZlciBsaW1p dC4KKwkgKiBDaGVjayBpZiB0aGUgcGVuZGluZyByZWFkIHNob3VsZCBiZSBpc3N1ZWQgbm93LCBv ciBpZiB3ZSBzaG91bGQgZ2l2ZSBpdAorCSAqIGFub3RoZXIgY2hhbmNlIHRvIGdyb3cgdG8gdGhl IGZ1bGwgc2l6ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgcGVuZGluZyByZWFkIGNhbiBleGNl ZWQgdGhlIGRpc3RhbmNlIGdvYWwsIGlmIHRoZSBsYXR0ZXIKKwkgKiB3YXMgcmVkdWNlZCBhZnRl ciBoaXR0aW5nIHRoZSBwZXItYmFja2VuZCBidWZmZXIgbGltaXQuCiAJICovCi0JaWYgKHN0cmVh bS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPiAwICYmCi0JCShzdHJlYW0tPnBlbmRpbmdfcmVhZF9u YmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCB8fAotCQkgKHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5kaXN0YW5jZSAmJgotCQkgIHN0cmVhbS0+cGlubmVk X2J1ZmZlcnMgPT0gMCkgfHwKLQkJIHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkgJiYKLQkJc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPCBzdHJlYW0tPm1heF9pb3MpCisJaWYgKHJlYWRfc3RyZWFtX3No b3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJcmVhZF9zdHJlYW1fc3RhcnRfcGVuZGluZ19yZWFk KHN0cmVhbSk7CiAKIAkvKgpAQCAtNTM0LDcgKzYzNiw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhl YWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3b3JzdCBjYXNlIHdl IGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkgKiB0aW1lLgogCSAq LwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNl IDw9IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPnJl YWRhaGVhZF9kaXN0YW5jZSA8PSAwKTsKIAogCWlmIChzdHJlYW0tPmJhdGNoX21vZGUpCiAJCXBn YWlvX2V4aXRfYmF0Y2htb2RlKCk7CkBAIC03MjQsMTAgKzgyNiwxNyBAQCByZWFkX3N0cmVhbV9i ZWdpbl9pbXBsKGludCBmbGFncywKIAkgKiBkb2luZyBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6 ZWQgcmVhZHMuCiAJICovCiAJaWYgKGZsYWdzICYgUkVBRF9TVFJFQU1fRlVMTCkKLQkJc3RyZWFt LT5kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVkX2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9s aW1pdCk7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVk X2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCk7CisJCXN0cmVhbS0+Y29tYmluZV9k aXN0YW5jZSA9IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdDsKKwl9CiAJZWxzZQotCQlzdHJlYW0t PmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFu Y2U7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDE7CisJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJfQorCXN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVzdW1lX2NvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2U7CiAKIAkvKgogCSAqIFNpbmNlIHdl IGFsd2F5cyBhY2Nlc3MgdGhlIHNhbWUgcmVsYXRpb24sIHdlIGNhbiBpbml0aWFsaXplIHBhcnRz IG9mCkBAIC04MjYsNyArOTM1LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MgPT0gMCk7CiAJCUFzc2VydChzdHJlYW0tPmZvcndhcmRlZF9idWZmZXJzID09 IDApOwogCQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAxKTsKLQkJQXNzZXJ0KHN0 cmVhbS0+ZGlzdGFuY2UgPT0gMSk7CisJCUFzc2VydChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9PSAxKTsKIAkJQXNzZXJ0KHN0cmVhbS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCk7CiAJ CUFzc2VydChzdHJlYW0tPnBlcl9idWZmZXJfZGF0YV9zaXplID09IDApOwogCQlBc3NlcnQoc3Ry ZWFtLT5pbml0aWFsaXplZF9idWZmZXJzID4gc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4KTsK QEAgLTkwMCw3ICsxMDA5LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAq c3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQllbHNlCiAJCXsKIAkJCS8qIE5vIG1v cmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFtLiAqLwotCQkJc3RyZWFtLT5kaXN0YW5jZSA9IDA7CisJ CQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZm ZXJfaW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRf YnVmZmVycyA9IDA7CiAJCQlzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0gPSBJ bnZhbGlkQnVmZmVyOwpAQCAtOTE2LDcgKzEwMjUsNyBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCUFzc2VydChz dHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7 CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+ZGlzdGFu Y2UgPD0gMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1 cm4gSW52YWxpZEJ1ZmZlcjsKIAogCQkvKgpAQCAtOTMwLDcgKzEwMzksNyBAQCByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEp CiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hlZD8gKi8KIAkJaWYgKHN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMCkKIAkJewotCQkJQXNzZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CisJCQlB c3NlcnQoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxp ZEJ1ZmZlcjsKIAkJfQogCX0KQEAgLTk1MSw3ICsxMDYwLDYgQEAgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlzdHJl YW0tPmlvc1tzdHJlYW0tPm9sZGVzdF9pb19pbmRleF0uYnVmZmVyX2luZGV4ID09IG9sZGVzdF9i dWZmZXJfaW5kZXgpCiAJewogCQlpbnQxNgkJaW9faW5kZXggPSBzdHJlYW0tPm9sZGVzdF9pb19p bmRleDsKLQkJaW50MzIJCWRpc3RhbmNlOwkvKiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGNsYW1w ZWQgYmVsb3cgKi8KIAkJYm9vbAkJbmVlZGVkX3dhaXQ7CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRo YXQgd2Ugc3RpbGwgYWdyZWUgb24gdGhlIGJ1ZmZlcnMuICovCkBAIC05NjIsNyArMTA3MCw3IEBA IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9i dWZmZXJfZGF0YSkKIAkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiByZXNldCwgZG9uJ3QgZXZl biB3YWl0IGZvciB0aGUgSU8sIGp1c3QKIAkJICogZGlzY2FyZCBpdC4KIAkJICovCi0JCWlmIChz dHJlYW0tPmRpc3RhbmNlIDwgMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDwg MCkKIAkJewogCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5v cC5pb193cmVmKSAmJgogCQkJCSFzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuZm9yZWlnbl9pbykK QEAgLTEwMTEsMTEgKzExMTksMzggQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQkgKiB0aGUgc3RyZWFtLCBhcyBz dHJlYW0tPmRpc3RhbmNlID09IDAgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mCiAJCSAqIGhhdmlu ZyByZWFjaGVkIHRoZSBlbmQuCiAJCSAqLwotCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDAgJiYg bmVlZGVkX3dhaXQpCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IDAgJiYgbmVl ZGVkX3dhaXQpCiAJCXsKLQkJCWRpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZSAqIDI7Ci0JCQlk aXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOwotCQkJ c3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkJLyogd2lkZXIgdGVtcG9yYXJ5IHZhbHVl LCBkdWUgdG8gb3ZlZmxvdyByaXNrICovCisJCQlpbnQzMgkJcmVhZGFoZWFkX2Rpc3RhbmNlOwor CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSAqIDI7 CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBNaW4ocmVhZGFoZWFkX2Rpc3RhbmNlLCBzdHJlYW0t Pm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IHJl YWRhaGVhZF9kaXN0YW5jZTsKKwkJfQorCisJCS8qCisJCSAqIFdoZXRoZXIgd2UgbmVlZGVkIHRv IHdhaXQgb3Igbm90LCBhbGxvdyBmb3IgbW9yZSBJTyBjb21iaW5pbmcgaWYgd2UKKwkJICogbmVl ZGVkIHRvIGRvIElPLiBUaGUgcmVhc29uIHRvIGRvIHNvIGluZGVwZW5kZW50IG9mIG5lZWRpbmcg dG8gd2FpdAorCQkgKiBpcyB0aGF0IHdoZW4gdGhlIGRhdGEgaXMgcmVzaWRlbnQgaW4gdGhlIGtl cm5lbCBwYWdlIGNhY2hlLCBJTworCQkgKiBjb21iaW5pbmcgcmVkdWNlcyB0aGUgc3lzY2FsbCAv IGRpc3BhdGNoIG92ZXJoZWFkLCBtYWtpbmcgaXQKKwkJICogd29ydGh3aGlsZSByZWdhcmRsZXNz IG9mIG5lZWRpbmcgdG8gd2FpdC4KKwkJICoKKwkJICogSXQgaXMgYWxzbyBpbXBvcnRhbnQgd2l0 aCBpb191cmluZyBhcyBpdCB3aWxsIG5ldmVyIHNpZ25hbCB0aGUgbmVlZAorCQkgKiB0byB3YWl0 IGZvciByZWFkcyBpZiBhbGwgdGhlIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZXJlIGFy ZQorCQkgKiBoZXVyaXN0aWNzIHRvIGRlYWwgd2l0aCB0aGF0IGluIG1ldGhvZF9pb191cmluZy5j LCBidXQgdGhleSBvbmx5CisJCSAqIHdvcmsgd2hlbiB0aGUgSU8gZ2V0cyBsYXJnZSBlbm91Z2gu CisJCSAqLworCQlpZiAoc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID4gMCAmJgorCQkJc3RyZWFt LT5jb21iaW5lX2Rpc3RhbmNlIDwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KQorCQl7CisJCQkv KiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGR1ZSB0byBvdmVmbG93IHJpc2sgKi8KKwkJCWludDMy CQljb21iaW5lX2Rpc3RhbmNlOworCisJCQljb21iaW5lX2Rpc3RhbmNlID0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlICogMjsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBNaW4oY29tYmluZV9kaXN0 YW5jZSwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KTsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBN aW4oY29tYmluZV9kaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3Ry ZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gY29tYmluZV9kaXN0YW5jZTsKIAkJfQogCiAJCS8qCkBA IC0xMDk0LDEwICsxMjI5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0g KnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAogI2lmbmRlZiBSRUFEX1NUUkVBTV9E SVNBQkxFX0ZBU1RfUEFUSAogCS8qIFNlZSBpZiB3ZSBjYW4gdGFrZSB0aGUgZmFzdCBwYXRoIGZv ciBhbGwtY2FjaGVkIHNjYW5zIG5leHQgdGltZS4gKi8KKwkvKgorCSAqIEZJWE1FOiBJdCdzIHdh eSB0b28gZWFzeSB0byB3cm9uZ2x5IGZhc3QgcGF0aC4gSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MK KwkgKiBzZXZlcmFsIHByZS1leGlzdGluZyBjYXNlcyB3aGVyZSBpdCB0cmlnZ2VycyBiZWNhdXNl IHdlIGFyZSBub3QgaXNzdWluZworCSAqIGFkZGl0aW9uYWwgcHJlZmV0Y2hpbmcgKGUuZy4gYmVj YXVzZSBvZiBhIHNtYWxsCisJICogZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5KSBhbmQgdGh1cyBz dHJlYW0tPnBpbm5lZF9idWZmZXJzIHN0YXlzIGF0IDEKKwkgKiBhZnRlciByZWFkX3N0cmVhbV9s b29rX2FoZWFkKCkuCisJICovCiAJaWYgKHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDAgJiYK IAkJc3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA9PSAwICYmCiAJCXN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMSAmJgotCQlzdHJlYW0tPmRpc3RhbmNlID09IDEgJiYKKwkJc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPT0gMSAmJgorCQlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2UgPT0gMSAm JgogCQlzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID09IDAgJiYKIAkJc3RyZWFtLT5wZXJf YnVmZmVyX2RhdGFfc2l6ZSA9PSAwKQogCXsKQEAgLTExNDMsOCArMTI4Niw5IEBAIHJlYWRfc3Ry ZWFtX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSAq c3RyYXRlZ3kpCiBCbG9ja051bWJlcgogcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogewotCXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZTsKLQlz dHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPnJlc3VtZV9yZWFkYWhlYWRfZGlzdGFuY2Ug PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rp c3RhbmNlID0gc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlID0gMDsKIAlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCkBAIC0xMTU2LDcg KzEzMDAsOCBAQCByZWFkX3N0cmVhbV9wYXVzZShSZWFkU3RyZWFtICpzdHJlYW0pCiB2b2lkCiBy ZWFkX3N0cmVhbV9yZXN1bWUoUmVhZFN0cmVhbSAqc3RyZWFtKQogewotCXN0cmVhbS0+ZGlzdGFu Y2UgPSBzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPmNvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogfQogCiAvKgpAQCAt MTE3Miw3ICsxMzE3LDggQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQog CUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogU3RvcCBsb29raW5nIGFoZWFkLiAqLwotCXN0cmVhbS0+ ZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IC0xOworCXN0cmVh bS0+Y29tYmluZV9kaXN0YW5jZSA9IC0xOwogCiAJLyogRm9yZ2V0IGJ1ZmZlcmVkIGJsb2NrIG51 bWJlciBhbmQgZmFzdCBwYXRoIHN0YXRlLiAqLwogCXN0cmVhbS0+YnVmZmVyZWRfYmxvY2tudW0g PSBJbnZhbGlkQmxvY2tOdW1iZXI7CkBAIC0xMjA0LDggKzEzNTAsMTAgQEAgcmVhZF9zdHJlYW1f cmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9ncmVz cyA9PSAwKTsKIAogCS8qIFN0YXJ0IG9mZiBhc3N1bWluZyBkYXRhIGlzIGNhY2hlZC4gKi8KLQlz dHJlYW0tPmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ ZGlzdGFuY2U7CisJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAxOworCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJc3RyZWFtLT5yZXN1bWVfcmVhZGFoZWFkX2Rpc3RhbmNlID0g c3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2U7CisJc3RyZWFtLT5yZXN1bWVfY29tYmluZV9kaXN0 YW5jZSA9IHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZTsKIAlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSAwOwogfQogCi0tIAoyLjUzLjAKCg== --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0012-Hacky-implementation-of-making-read_stream_reset.patch" Content-Disposition: attachment; filename="v22-0012-Hacky-implementation-of-making-read_stream_reset.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8d4 RnJvbSA4ZDNmYjdjZDYyZDNjMWM0YzhjYTU3Y2VmM2I2YWJmNzY2ZWM1MDM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDY6NTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAx Mi8xNV0gSGFja3kgaW1wbGVtZW50YXRpb24gb2YgbWFraW5nCiByZWFkX3N0cmVhbV9yZXNldCgp L2VuZCgpIG5vdCB3YWl0IGZvciBJTwoKTm90IHdhaXRpbmcgZm9yIElPIGR1cmluZyByZWFkX3N0 cmVhbV9yZXNldCgpIGNhbiBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlCmluIGNhc2VzIHdo ZXJlIHJlYWQgc3RyZWFtcyBhcmUgZnJlcXVlbnRseSByZXNldCBiZWZvcmUgdGhlIGVuZCBpcwpy ZWFjaGVkLiBDdXJyZW50IHVzZXJzIGRvIG5vdCBjb21tb25seSBkbyB0aGF0LCBidXQgdGhlIHVw Y29taW5nIHdvcmsgdG8gdXNlIGEKcmVhZCBzdHJlYW0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tz IGFzIHBhcnQgb2YgaW5kZXggc2NhbnMgY2FuIGRvIHNvCmZyZXF1ZW50bHkgaW4gc29tZSBxdWVy eSBwYXR0ZXJucy4gRS5nLiBpZiB0aGVyZSBpcyBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lcgpz aWRlIG9mIGEgbmVzdGVkIGxvb3AuCgpGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBwcm9i bGVtYXRpYyB0aG91Z2gsIGFzIHRoZXJlIGlzIG5vdGhpbmcgZm9yY2luZwp0aGUgZGlzY2FyZGVk IElPcyB0byBldmVyIGJlIGNvbXBsZXRlZCBpZiB0aGUgYmFja2VuZCBnb2VzIGlkbGUuIFRoYXQn cyBhdCB0aGUKdmVyeSBsZWFzdCBwcm9ibGVtYXRpYyBiZWNhdXNlIGl0IGxlYWRzIHRvIHRoZSB1 bmRlcmx5aW5nIGJ1ZmZlcnMgY29udGludWluZwp0byBiZSBwaW5uZWQgYW5kIHRoZSBJT3Mgc2hv d2luZyB1cCBpbiB0aGUgcGdfYWlvcyB2aWV3LgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvLmggICAgICAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYyAgICAgICAgIHwgMjcgKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKystLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fp by5oCmluZGV4IGVjNTQzYjc4NC4uYzE4NGU5N2E5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2Fpby5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgKQEAgLTMyOCw2ICsz MjgsNyBAQCBleHRlcm4gaW50CXBnYWlvX3dyZWZfZ2V0X2lkKFBnQWlvV2FpdFJlZiAqaW93KTsK IGV4dGVybiB2b2lkIHBnYWlvX3dyZWZfd2FpdChQZ0Fpb1dhaXRSZWYgKmlvdyk7CiBleHRlcm4g Ym9vbCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpOwogCitleHRlcm4g dm9pZCBwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KTsKIAogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCA4ZjdlMjY2 MDcuLjFhOTZhOGE5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwNTAsNiArMTA1MCwzMyBA QCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAJcmV0dXJuIGZhbHNl OwogfQogCit2b2lkCitwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93 KQoreworCXVpbnQ2NAkJcmVmX2dlbmVyYXRpb247CisJYm9vbAkJYW1fb3duZXI7CisJUGdBaW9I YW5kbGUgKmlvaDsKKwlQZ0Fpb0hhbmRsZVN0YXRlIHN0YXRlOworCisJaW9oID0gcGdhaW9faW9f ZnJvbV93cmVmKGlvdywgJnJlZl9nZW5lcmF0aW9uKTsKKworCWFtX293bmVyID0gaW9oLT5vd25l cl9wcm9jbm8gPT0gTXlQcm9jTnVtYmVyOworCisJaWYgKCFhbV9vd25lcikKKwkJZWxvZyhFUlJP UiwgIm5vdCB5b3UiKTsKKworCWlmIChwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCByZWZfZ2Vu ZXJhdGlvbiwgJnN0YXRlKSkKKwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdfaW8oREVCVUcyLCBp b2gsCisJCQkJICAgImRpc2NhcmRpbmcgcmVzdWx0ICVwIiwKKwkJCQkgICBpb2gtPnJlcG9ydF9y ZXR1cm4pOworCisJaWYgKGlvaC0+cmVzb3duZXIpCisJCXBnYWlvX2lvX3JlbGVhc2VfcmVzb3du ZXIoJmlvaC0+cmVzb3duZXJfbm9kZSwgZmFsc2UpOworfQorCisKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9z dHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggNGI3 ZGI0YWIzLi5kMDVlNGZhZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpA QCAtNTI0LDcgKzUyNCw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCQkoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA9PSBzdHJlYW0tPmlvX2NvbWJp bmVfbGltaXQgfHwKIAkJIChzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID49IHN0cmVhbS0+ ZGlzdGFuY2UgJiYKIAkJICBzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApIHx8Ci0JCSBzdHJl YW0tPmRpc3RhbmNlID09IDApICYmCisJCSBzdHJlYW0tPmRpc3RhbmNlIDw9IDApICYmCiAJCXN0 cmVhbS0+aW9zX2luX3Byb2dyZXNzIDwgc3RyZWFtLT5tYXhfaW9zKQogCQlyZWFkX3N0cmVhbV9z dGFydF9wZW5kaW5nX3JlYWQoc3RyZWFtKTsKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHJlYWRfc3Ry ZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3 b3JzdCBjYXNlIHdlIGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkg KiB0aW1lLgogCSAqLwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJl YW0tPmRpc3RhbmNlID09IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8 fCBzdHJlYW0tPmRpc3RhbmNlIDw9IDApOwogCiAJaWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJ cGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTkxNiw3ICs5MTYsNyBAQCByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJ CUFzc2VydChzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZl cl9pbmRleCk7CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVh bS0+ZGlzdGFuY2UgPT0gMCkKKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkKIAkJCXJldHVy biBJbnZhbGlkQnVmZmVyOwogCiAJCS8qCkBAIC05MzAsNyArOTMwLDcgQEAgcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQog CQkvKiBFbmQgb2Ygc3RyZWFtIHJlYWNoZWQ/ICovCiAJCWlmIChzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDApCiAJCXsKLQkJCUFzc2VydChzdHJlYW0tPmRpc3RhbmNlID09IDApOworCQkJQXNz ZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAkJ fQogCX0KQEAgLTk1OCw3ICs5NTgsMjcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5p b3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAgICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0 X2J1ZmZlcl9pbmRleF0pOwogCi0JCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZzdHJl YW0tPmlvc1tpb19pbmRleF0ub3ApOworCQkvKgorCQkgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVu IHJlc2V0LCBkb24ndCBldmVuIHdhaXQgZm9yIHRoZSBJTywganVzdAorCQkgKiBkaXNjYXJkIGl0 LgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPCAwKQorCQl7CisJCQlpZiAocGdhaW9f d3JlZl92YWxpZCgmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmlvX3dyZWYpICYmCisJCQkJIXN0 cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mb3JlaWduX2lvKQorCQkJeworCQkJCXBnYWlvX3dyZWZf ZGlzY2FyZF9yZXN1bHQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5pb193cmVmKTsKKwkJCQlw Z2Fpb193cmVmX2NsZWFyKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuaW9fd3JlZik7CisJCQl9 CisJCQllbHNlCisJCQkJV2FpdFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3Ap OworCisJCQluZWVkZWRfd2FpdCA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmVlZGVk X3dhaXQgPSBXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCX0K IAogCQlBc3NlcnQoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MtLTsKQEAgLTExNTIsNyArMTE3Miw3IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJl YWRTdHJlYW0gKnN0cmVhbSkKIAlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIFN0b3AgbG9va2luZyBh aGVhZC4gKi8KLQlzdHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPmRpc3RhbmNlID0gLTE7 CiAKIAkvKiBGb3JnZXQgYnVmZmVyZWQgYmxvY2sgbnVtYmVyIGFuZCBmYXN0IHBhdGggc3RhdGUu ICovCiAJc3RyZWFtLT5idWZmZXJlZF9ibG9ja251bSA9IEludmFsaWRCbG9ja051bWJlcjsKLS0g CjIuNTMuMAoK --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0011-read_stream-Only-increase-distance-when-waiting-.patch" Content-Disposition: attachment; filename="v22-0011-read_stream-Only-increase-distance-when-waiting-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8g5 RnJvbSAxNzYwYmIzNjI5OTQ5ZWMwNDgwOTU2NjdmZWNlOTBhMGU0ZGU1ZDNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIyIDEx LzE1XSByZWFkX3N0cmVhbTogT25seSBpbmNyZWFzZSBkaXN0YW5jZSB3aGVuIHdhaXRpbmcKIGZv ciBJTwoKVGhpcyBhdm9pZHMgaW5jcmVhc2luZyB0aGUgZGlzdGFuY2UgdG8gdGhlIG1heGltdW0g aW4gY2FzZXMgd2hlcmUgdGhlIElPCnN1YnN5c3RlbSBpcyBhbHJlYWR5IGtlZXBpbmcgdXAuIFRo aXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IKcGVyZm9ybWFuY2UgZm9yIHR3byByZWFz b25zOgoKLSBQaW5uaW5nIGEgbG90IG9mIGJ1ZmZlcnMgaXMgbm90IGNoZWFwLiBJZiBhZGRpdGlv bmFsIHBpbnMgYWxsb3cgdXMgdG8gYXZvaWQKICBJTyB3YWl0cywgaXQncyBkZWZpbml0ZWx5IHdv cnRoIGl0LCBidXQgaWYgd2UgY2FuIGFscmVhZHkgZG8gYWxsIHRoZQogIG5lY2Vzc2FyeSByZWFk YWhlYWQgYXQgYSBkaXN0YW5jZSBvZiAxNiwgcmVhZGluZyBhaGVhZCA1MTIgYnVmZmVycyBjYW4K ICBpbmNyZWFzZSB0aGUgQ1BVIG92ZXJoZWFkIHN1YnN0YW50aWFsbHkuICBUaGlzIGlzIHBhcnRp Y3VsYXJseSBub3RpY2VhYmxlCiAgd2hlbiB0aGUgdG8tYmUtcmVhZCBibG9ja3MgYXJlIGFscmVh ZHkgaW4gdGhlIGtlcm5lbCBwYWdlIGNhY2hlLgoKLSBJZiB0aGUgcmVhZCBzdHJlYW0gaXMgcmVh ZCB0byBjb21wbGV0aW9uLCByZWFkaW5nIGluIGRhdGEgZWFybGllciB0aGFuCiAgbmVlZGVkIGlz IG9mIGxpbWl0ZWQgY29uc2VxdWVuY2VzLCBsZWF2aW5nIGFzaWRlIHRoZSBDUFUgY29zdHMgbWVu dGlvbmVkCiAgYWJvdmUuIEJ1dCBpZiB0aGUgcmVhZCBzdHJlYW0gd2lsbCBub3QgYmUgZnVsbHkg Y29uc3VtZWQsIGUuZy4gYmVjYXVzZSBpdCBpcwogIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVz dGVkIGxvb3Agam9pbiwgdGhlIGFkZGl0aW9uYWwgSU8gY2FuIGJlIGEgc2VyaW91cwogIHBlcmZv cm1hbmNlIGlzc3VlLiBUaGlzIGlzIG5vdCB0aGF0IGNvbW1vbmx5IGEgcHJvYmxlbSBmb3IgY3Vy cmVudCByZWFkCiAgc3RyZWFtIHVzZXJzLCBidXQgdGhlIHVwY29taW5nIHdvcmssIHRvIHVzZSBh IHJlYWQgc3RyZWFtIHRvIGZldGNoIHRhYmxlCiAgcGFnZXMgYXMgcGFydCBvZiBhbiBpbmRleCBz Y2FuLCBmcmVxdWVudGx5IGVuY291bnRlcnMgdGhpcy4KCk5vdGUgdGhhdCB0aGlzIGNvbW1pdCB3 b3VsZCBoYXZlIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIGRvd25zaWRlcyB3aXRob3V0CmVhcmxp ZXIgY29tbWl0cy4gSW4gcGFydGljdWxhciB0aGUgZWFybGllciBjb21taXQgdG8gYXZvaWQgZGVj cmVhc2luZyB0aGUKcmVhZGFoZWFkIGRpc3RhbmNlIHdoZW4gdGhlcmUgd2FzIHJlY2VudCBJTyBp cyBjcnVjaWFsLCBhcyBvdGhlcndpc2Ugd2UgdmVyeQpvZnRlbiB3b3VsZCBlbmQgdXAgbm90IHJl YWRpbmcgYWhlYWQgYWdncmVzc2l2ZWx5IGVub3VnaCBhbnltb3JlIHdpdGggdGhpcwpjb21taXQs IGR1ZSB0byBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSBsZXNzIG9mdGVuLgoKQXV0aG9yOgpSZXZp ZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgfCAzOSArKysrKysrKysrKysr KysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCA1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IDMxZjllMzVk ZS4uNGI3ZGI0YWIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0 cmVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk1 MiwyMiArOTUyLDUxIEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCWludDE2CQlpb19pbmRleCA9IHN0cmVh bS0+b2xkZXN0X2lvX2luZGV4OwogCQlpbnQzMgkJZGlzdGFuY2U7CS8qIHdpZGVyIHRlbXBvcmFy eSB2YWx1ZSwgY2xhbXBlZCBiZWxvdyAqLworCQlib29sCQluZWVkZWRfd2FpdDsKIAogCQkvKiBT YW5pdHkgY2hlY2sgdGhhdCB3ZSBzdGlsbCBhZ3JlZSBvbiB0aGUgYnVmZmVycy4gKi8KIAkJQXNz ZXJ0KHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5i dWZmZXJzW29sZGVzdF9idWZmZXJfaW5kZXhdKTsKIAotCQlXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVh bS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZz dHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOwogCiAJCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA+IDApOwogCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcy0tOwogCQlpZiAoKytzdHJlYW0t Pm9sZGVzdF9pb19pbmRleCA9PSBzdHJlYW0tPm1heF9pb3MpCiAJCQlzdHJlYW0tPm9sZGVzdF9p b19pbmRleCA9IDA7CiAKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSByYW1wcyB1cCByYXBpZGx5 IGFmdGVyIHdlIGRvIEkvTy4gKi8KLQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsK LQkJZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2UsIHN0cmVhbS0+bWF4X3Bpbm5lZF9idWZmZXJzKTsK LQkJc3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkvKgorCQkgKiBJZiB0aGUgSU8gd2Fz IGV4ZWN1dGVkIHN5bmNocm9ub3VzbHksIHdlIHdpbGwgbmV2ZXIgc2VlCisJCSAqIFdhaXRSZWFk QnVmZmVycygpIGJsb2NrLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBjcnVjaWFsIHdoZW4KKwkJICog ZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTAgaXMgdXNlZCwgYXMgYWxsIElPIHdpbGwgYmUKKwkJ ICogc3luY2hyb25vdXMuIFdpdGhvdXQgdHJlYXRpbmcgc3luY2hyb25vdXMgSU8gYXMgaGF2aW5n IHdhaXRlZCwgd2UnZAorCQkgKiBuZXZlciBhbGxvdyB0aGUgZGlzdGFuY2UgdG8gZ2V0IGxhcmdl IGVub3VnaCB0byBhbGxvdyBmb3IgSU8KKwkJICogY29tYmluaW5nLCByZXN1bHRpbmcgaW4gYmFk IHBlcmZvcm1hbmNlLgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mbGFn cyAmIFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKQorCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwor CisJCS8qCisJCSAqIEhhdmUgdGhlIGxvb2stYWhlYWQgZGlzdGFuY2UgcmFtcCB1cCByYXBpZGx5 IGFmdGVyIHdlIG5lZWRlZCB0bworCQkgKiB3YWl0IGZvciBJTy4gV2Ugb25seSBpbmNyZWFzZSB0 aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwKKwkJICogdG8gYXZvaWQgaW5jcmVh c2luZyB0aGUgZGlzdGFuY2UgZnVydGhlciB0aGFuIG5lY2Vzc2FyeSwgYXMgbG9va2luZworCQkg KiBhaGVhZCB0b28gZmFyIGNhbiBiZSBjb3N0bHksIGJvdGggZHVlIHRvIHRoZSBjb3N0IG9mIHVu bmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1ZmZlcnMgYW5kIGR1ZSB0byBkb2luZyBJ T3MgdGhhdCBtYXkgbmV2ZXIgYmUKKwkJICogY29uc3VtZWQgaWYgdGhlIHN0cmVhbSBpcyBlbmRl ZC9yZXNldCBiZWZvcmUgY29tcGxldGlvbi4KKwkJICoKKwkJICogSWYgd2UgZGlkIG5vdCBuZWVk IHRvIHdhaXQsIHRoZSBjdXJyZW50IGRpc3RhbmNlIHdhcyBldmlkZW50bHkKKwkJICogc3VmZmlj aWVudC4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIGlmIHdl IGFscmVhZHkgcmVhY2hlZCB0aGUgZW5kIG9mCisJCSAqIHRoZSBzdHJlYW0sIGFzIHN0cmVhbS0+ ZGlzdGFuY2UgPT0gMCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YKKwkJICogaGF2aW5nIHJlYWNo ZWQgdGhlIGVuZC4KKwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMCAmJiBuZWVkZWRf d2FpdCkKKwkJeworCQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsKKwkJCWRpc3Rh bmNlID0gTWluKGRpc3RhbmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJl YW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCX0KIAogCQkvKgogCQkgKiBBcyB3ZSBuZWVkZWQg SU8sIHByZXZlbnQgZGlzdGFuY2UgZnJvbSBiZWluZyByZWR1Y2VkIHdpdGhpbiBvdXIKLS0gCjIu NTMuMAoK --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0010-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Disposition: attachment; filename="v22-0010-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8h6 RnJvbSAzNzc0Mzc4YTMzNGZhMzRiODk2ODZjNWFhMWVlMmUzZDM3Y2NjYWZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIyIDEw LzE1XSBhaW86IGlvX3VyaW5nOiBUcmlnZ2VyIGFzeW5jIHByb2Nlc3NpbmcgZm9yIGxhcmdlCiBJ T3MKCmlvX21ldGhvZD1pb191cmluZyBoYXMgYSBoZXVyaXN0aWMgdG8gdHJpZ2dlciBhc3luY2hy b25vdXMgcHJvY2Vzc2luZyBvZiBJT3MKb25jZSB0aGUgSU8gZGVwdGguIFRoYXQgaGV1cmlzdGlj IGlzIGltcG9ydGFudCB3aGVuIGRvaW5nIGJ1ZmZlcmVkIElPIGZyb20gdGhlCmtlcm5lbCBwYWdl IGNhY2hlLCB0byBhbGxvdyBwYXJhbGxlbGl6aW5nIG9mIHRoZSBtZW1vcnkgY29weSwgYXMgb3Ro ZXJ3aXNlCmlvX21ldGhvZD1pb191cmluZyB3b3VsZCBiZSBhIGxvdCBzbG93ZXIgdGhhbiBpb19t ZXRob2Q9d29ya2VyIGluIHRoYXQgY2FzZS4KCkFuIHVwY29taW5nIGNvbW1pdCB3aWxsIG1ha2Ug cmVhZF9zdHJlYW0uYyBvbmx5IGluY3JlYXNlIHRoZSByZWFkYWhlYWQKZGlzdGFuY2UgaWYgd2Ug bmVlZGVkIHRvIHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBJZiB0by1iZS1yZWFkIGRhdGEgaXMg aW4gdGhlCmtlcm5lbCBwYWdlIGNhY2hlLCBpb191cmluZyB3aWxsIHN5bmNocm9ub3VzbHkgZXhl Y3V0ZSBJTywgdW5sZXNzIHRoZSBJTyBpcwpmbGFnZ2VkIGFzIGFzeW5jLiAgVGhlcmVmb3JlIHRo ZSBhZm9yZW1lbnRpb25lZCBjaGFuZ2UgaW4gcmVhZF9zdHJlYW0uYwpoZXVyaXN0aWMgd291bGQg bGVhZCB0byBhIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aCBpb191cmlu Zwp3aGVuIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUsIGFzIHdlIHdvdWxkIG5ldmVyIHJlYWNo IGEgZGVlcCBlbm91Z2ggcXVldWUgdG8KYWN0dWFsbHkgdHJpZ2dlciB0aGUgZXhpc3RpbmcgaGV1 cmlzdGljLgoKUGFyYWxsZWxpemluZyB0aGUgY29weSBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzIG1h aW5seSBpbXBvcnRhbnQgd2hlbiBkb2luZyBhCmxvdCBvZiBJTywgd2hpY2ggY29tbW9ubHkgaXMg b25seSBwb3NzaWJsZSB3aGVuIGRvaW5nIGxhcmdlbHkgc2VxdWVudGlhbCBJTy4KClRoZSByZWFz b24gd2UgZG9uJ3QganVzdCBtYXJrIGFsbCBpb191cmluZyBJT3MgYXMgYXN5bmNocm9ub3VzIGlz IHRoYXQgdGhlCmRpc3BhdGNoIHRvIGEga2VybmVsIHRocmVhZCBoYXMgb3ZlcmhlYWQuIFRoaXMg b3ZlcmhlYWQgaXMgbW9zdGx5IG5vdGljZWFibGUKd2l0aCBzbWFsbCByYW5kb20gSU9zIHdpdGgg YSBsb3cgcXVldWUgZGVwdGgsIGFzIGluIHRoYXQgY2FzZSB0aGUgZ2FpbiBmcm9tCnBhcmFsbGVs aXppbmcgdGhlIG1lbW9yeSBjb3B5IGlzIHNtYWxsIGFuZCB0aGUgbGF0ZW5jeSBjb3N0IGhpZ2gu CgpUaGUgZmFjdHMgZnJvbSB0aGUgdHdvIHByaW9yIHBhcmFncmFwaHMgc2hvdyBhIHdheSBvdXQ6 IFVzZSB0aGUgc2l6ZSBvZiB0aGUgSU8KaW4gYWRkaXRpb24gdG8gdGhlIGRlcHRoIG9mIHRoZSBx dWV1ZSB0byB0cmlnZ2VyIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLgoKT25lIG1pZ2h0IHRoaW5r IHRoYXQganVzdCB1c2luZyB0aGUgSU8gc2l6ZSBtaWdodCBiZSBlbm91Z2gsIGJ1dApleHBlcmlt ZW50YXRpb24gaGFzIHNob3duIHRoYXQgbm90IHRvIGJlIHRoZSBjYXNlIC0gd2l0aCBkZWVwIGxv b2stYWhlYWQKZGlzdGFuY2VzIGJlaW5nIGFibGUgdG8gcGFyYWxsZWxpemUgdGhlIG1lbW9yeSBj b3B5IGlzIGltcG9ydGFudCBldmVuIHdpdGgKc21hbGxlciBJT3MuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA5MCArKysrKysrKysrKysr KysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmlu Zy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggMzk5 ODRkZjMxLi4wYzhmZTQ1OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF9pb191cmluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191 cmluZy5jCkBAIC00MDksNyArNDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0 KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0 cnVjdCBpb191cmluZyAqdXJpbmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+ aW9fdXJpbmdfcmluZzsKLQlpbnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZw Z2Fpb19teV9iYWNrZW5kLT5pbl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lv cyA8PSBQR0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdh aW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFn ZWRfaW9zKQogCiAJCXBnYWlvX2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5n X3NxX2Zyb21faW8oaW9oLCBzcWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElP IGluIHByb2Nlc3MgY29udGV4dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBn b29kLCBhcyBpdCByZWR1Y2VzIGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQot CQkgKiBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBw YWdlIGNhY2hlIGFuZAotCQkgKiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVn cm91bmQsIGFzIGl0IGNhbid0IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMg aXMgcG9zc2libGUgd2hlbiB1c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEg bG90IG9mIGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkg KiB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlp bmcuIGlvX3VyaW5nCi0JCSAqIGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIg dGhyZWFkcyBpbnN0ZWFkLgotCQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQg d2UgYWxyZWFkeSBoYXZlIElPcyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBi ZWluZyBzdWJtaXR0ZWQsIHdlIHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRo ZSBJTyBpbiB0aGUgYmFja2dyb3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcg SU9zCi0JCSAqIGJlaW5nIHN1Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBj b250ZXh0IGhhcyBsb3dlcgotCQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9i ZWZvcmUgPiA0ICYmIChpb2gtPmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJp bmdfc3FlX3NldF9mbGFncyhzcWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3Jl Kys7CiAJfQogCiAJd2hpbGUgKHRydWUpCkBAIC03MDEsMTAgKzY3OSw2NCBAQCBwZ2Fpb191cmlu Z19jaGVja19vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKQogCUxX TG9ja1JlbGVhc2UoJm93bmVyX2NvbnRleHQtPmNvbXBsZXRpb25fbG9jayk7CiB9CiAKKy8qCisg KiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNzIGNvbnRleHQgaWYgcG9zc2libGUuIFRo YXQncyBnZW5lcmFsbHkgZ29vZCwKKyAqIGFzIGl0IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcu IFdoZW4gcGVyZm9ybWluZyBhIGxvdCBvZiBidWZmZXJlZCBJTyB0aGF0CisgKiBtZWFucyB0aGF0 IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZCB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMg aW4gdGhlCisgKiBmb3JlZ3JvdW5kLCBhcyBpdCBjYW4ndCBiZSBvZmZsb2FkZWQgdG8gRE1BIGhh cmR3YXJlIGFzIGlzIHBvc3NpYmxlIHdoZW4KKyAqIHVzaW5nIGRpcmVjdCBJTy4gV2hlbiBleGVj dXRpbmcgYSBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhpcyBjYXVzZXMgaW9fdXJpbmcKKyAqIHRvIGJl IHNsb3dlciB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhl CisgKiBjb3B5aW5nLiBpb191cmluZyBjYW4gYmUgdG9sZCB0byBvZmZsb2FkIHdvcmsgdG8gd29y a2VyIHRocmVhZHMgaW5zdGVhZC4KKyAqCisgKiBJZiB0aGUgSU9zIGFyZSBzbWFsbCwgd2Ugb25s eSBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MgaW50byB0aGUKKyAqIGJhY2tncm91bmQgaWYg dGhlcmUgaXMgYSBsb3Qgb2YgSU8sIGFzIG90aGVyd2lzZSB0aGUgb3ZlcmhlYWQgZnJvbSBjb250 ZXh0CisgKiBzd2l0Y2hpbmcgaXMgaGlnaGVyIHRoYW4gdGhlIGdhaW4uCisgKgorICogSWYgSU9z IGFyZSBsYXJnZSwgdGhlcmUgaXMgYmVuZWZpdCBmcm9tIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5n IGF0IGxvd2VyCisgKiBxdWV1ZSBkZXB0aHMsIGFzIElPIGxhdGVuY3kgaXMgbGVzcyBvZiBhIGNy dWNpYWwgZmFjdG9yIGFuZCBwYXJhbGxlbGl6aW5nCisgKiBtZW1vcnkgY29waWVzIGlzIG1vcmUg aW1wb3J0YW50LiAgSW4gYWRkaXRpb24sIGl0IGlzIGltcG9ydGFudCB0byB0cmlnZ2VyCisgKiBh c3luY2hyb25vdXMgcHJvY2Vzc2luZyBldmVuIGF0IGxvdyBxdWV1ZSBkZXB0aCwgYXMgd2l0aCBm b3JlZ3JvdW5kCisgKiBwcm9jZXNzaW5nIHdlIG1pZ2h0IG5ldmVyIGFjdHVhbGx5IHJlYWNoIGRl ZXAgZW5vdWdoIElPIGRlcHRocyB0byB0cmlnZ2VyCisgKiBhc3luY2hyb25vdXMgcHJvY2Vzc2lu Zywgd2hpY2ggaW4gdHVybiB3b3VsZCBkZXByaXZlIHJlYWRhaGVhZCBjb250cm9sCisgKiBsb2dp YyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgZGVlcGVyIGxvb2stYWhlYWQgZGlzdGFu Y2Ugd291bGQgYmUKKyAqIGFkdmFudGFnZW91cy4KKyAqCisgKiBXZSBoYXZlIGRvbmUgc29tZSBi YXNpYyBiZW5jaG1hcmtpbmcgdG8gdmFsaWRhdGUgdGhlIHRocmVzaG9sZHMgdXNlZCwgYnV0Cisg KiBpdCdzIHF1aXRlIHBsYXVzaWJsZSB0aGF0IHRoZXJlIGFyZSBiZXR0ZXIgdmFsdWVzLgorICov CitzdGF0aWMgYm9vbAorcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYyhQZ0Fpb0hhbmRsZSAq aW9oLCBzaXplX3QgaW9fc2l6ZSkKK3sKKwkvKgorCSAqIFdpdGggRElPIHRoZXJlJ3Mgbm8gYmVu ZWZpdCBmcm9tIGZvcmNpbmcgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIGFzCisJICogaW9fdXJp bmcgd2lsbCBuZXZlciBwcm9jZXNzIElPIGNvbXBsZXRpb25zIGluIHRoZSBmb3JlZ3JvdW5kLiBU aGUKKwkgKiBrZXJuZWwgd2lsbCB1c2Ugd29ya2VyIHRocmVhZHMgd2hlcmUgYXBwcm9wcmlhdGUu CisJICovCisJaWYgKCEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBPbmNlIHRoZSBJTyBxdWV1ZSBkZXB0aCBpcyBub3QgdGhhdCBz aGFsbG93IGFueW1vcmUsIHRoZSBvdmVyaGVhZCBvZgorCSAqIGRpc3BhdGNoaW5nIHRvIHRoZSBi YWNrZ3JvdW5kIGlzIGEgbGVzcyBzaWduaWZpY2FudCBmYWN0b3IuCisJICovCisJaWYgKGRjbGlz dF9jb3VudCgmcGdhaW9fbXlfYmFja2VuZC0+aW5fZmxpZ2h0X2lvcykgPiA0KQorCQlyZXR1cm4g dHJ1ZTsKKworCS8qCisJICogSWYgdGhlIElPIGlzIGxhcmdlciwgdGhlIGdhaW5zIGZyb20gcGFy YWxsZWxpemluZyB0aGUgbWVtb3J5IGNvcHkgYXJlCisJICogbGFyZ2VyIGFuZCB0eXBpY2FsbHkg dGhlIGltcGFjdCBvZiB0aGUgbGF0ZW5jeSBpcyBzbWFsbGVyLgorCSAqLworCWlmIChpb19zaXpl ID49IChCTENLU1ogKiA0KSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK IHN0YXRpYyB2b2lkCiBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0 cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHsKIAlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzaXplX3QJ CWlvX3NpemUgPSAwOwogCiAJc3dpdGNoICgoUGdBaW9PcCkgaW9oLT5vcCkKIAl7CkBAIC03MTcs NiArNzQ5LDggQEAgcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1 Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJCQkJCSAgIGlvdi0+aW92X2Jhc2UsCiAJCQkJCQkJ CSAgIGlvdi0+aW92X2xlbiwKIAkJCQkJCQkJICAgaW9oLT5vcF9kYXRhLnJlYWQub2Zmc2V0KTsK KworCQkJCWlvX3NpemUgPSBpb3YtPmlvdl9sZW47CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MjYsNyArNzYwLDEzIEBAIHBnYWlvX3VyaW5nX3NxX2Zyb21faW8oUGdBaW9IYW5kbGUgKmlvaCwg c3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogCQkJCQkJCQkJaW9oLT5vcF9kYXRhLnJlYWQuaW92 X2xlbmd0aCwKIAkJCQkJCQkJCWlvaC0+b3BfZGF0YS5yZWFkLm9mZnNldCk7CiAKKwkJCQlmb3Ig KGludCBpID0gMDsgaSA8IGlvaC0+b3BfZGF0YS5yZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92Kysp CisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVuOwogCQkJfQorCisJCQlpZiAocGdhaW9fdXJp bmdfc2hvdWxkX3VzZV9hc3luYyhpb2gsIGlvX3NpemUpKQorCQkJCWlvX3VyaW5nX3NxZV9zZXRf ZmxhZ3Moc3FlLCBJT1NRRV9BU1lOQyk7CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgUEdBSU9fT1Bf V1JJVEVWOgpAQCAtNzQ3LDYgKzc4NywxMiBAQCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlv SGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJCSBpb2gtPm9w X2RhdGEud3JpdGUuaW92X2xlbmd0aCwKIAkJCQkJCQkJCSBpb2gtPm9wX2RhdGEud3JpdGUub2Zm c2V0KTsKIAkJCX0KKworCQkJLyoKKwkJCSAqIEZvciBub3cgZG9uJ3QgdHJpZ2dlciB1c2Ugb2Yg SU9TUUVfQVNZTkMgZm9yIHdyaXRlcywgaXQncyBub3QKKwkJCSAqIGNsZWFyIHRoZXJlIGlzIGEg cGVyZm9ybWFuY2UgYmVuZWZpdCBpbiBkb2luZyBzby4KKwkJCSAqLworCiAJCQlicmVhazsKIAog CQljYXNlIFBHQUlPX09QX0lOVkFMSUQ6Ci0tIAoyLjUzLjAKCg== --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v22-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8j7 RnJvbSAzODc4OGVmMDUzMjMyNTZmMTk0NWU3YTQ2OGFhYTRjMWExN2IxNzAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMiAwOS8xNV0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRS4gIFBsYWlu IGluZGV4IHNjYW5zIG9mCmhhc2ggaW5kZXhlcyBub3cgcmV0dXJuIG1hdGNoaW5nIGl0ZW1zIGlu IGJhdGNoZXMgY29uc2lzdGluZyBvZiBhbGwgb2YKdGhlIG1hdGNoZXMgZnJvbSBhIGdpdmVuIGJ1 Y2tldCBvciBvdmVyZmxvdyBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUKQU0gdGhlIGFiaWxp dHkgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5n Cmhhc2ggaW5kZXggc2NhbnMuCgpiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgYWx3YXlzIHRydWUg ZHVyaW5nIGhhc2ggaW5kZXggc2NhbnMgKHNpbmNlIGhhc2gKZG9lc24ndCBzdXBwb3J0IGluZGV4 LW9ubHkgc2NhbnMgYW5kIGFsd2F5cyB1c2VzIGFuIE1WQ0Mgc25hcHNob3QpLCBzbwp0aGUgYnVm ZmVyIHBpbiBpbnRlcmxvY2sgaGVsZCBvbiBlYWNoIGJhdGNoIGlzIGFsd2F5cyBkcm9wcGVkIGF0 IHVubG9jawp0aW1lIC0tIGJlZm9yZSB0aGUgYmF0Y2ggaXMgZXZlbiByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0uICBUaGlzIGRpZmZlcnMKZnJvbSBoYXNoJ3MgcHJldmlvdXMgYXBwcm9hY2ggb2Yg aG9sZGluZyBvbiB0byBhIHBpbiBmb3IgYXQgbGVhc3QgYXMKbG9uZyBhcyB0aGUgc2NhbiB3YXMg c3RvcHBlZCBvbiB0aGUgcGlubmVkIGluZGV4IHBhZ2UuCgpHdWFyYW50ZWVpbmcgdGhhdCByZXR1 cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMKZ3JlYXRseSBz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLCB3 aGVyZQp0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55IHBpbnMgb24gaGVh cCBwYWdlcy4gIFRoZQphbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4IEFN cyB0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZAphcHByb2FjaCB0byBwaW4gbWFuYWdlbWVudCBm b3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvIHByZXZlbnQgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4KbXVs dGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZCBzdHJlYW0pLiAgTm90 ZSwgaG93ZXZlciwKdGhhdCBoYXNoIHN0aWxsIGhvbGRzIG9uIHRvIHBpbnMgbmVlZGVkIGZvciBp dHMgb3duIGludGVybmFsIHB1cnBvc2VzCihlLmcuLCBpdCdsbCBzdGlsbCBob2xkIG9udG8gYSBw aW4gZHVyaW5nIGEgYnVja2V0IHNwbGl0KS4KCmhhc2hraWxsaXRlbXNiYXRjaCAodGhlIGhhc2gg aW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoCmludGVyZmFjZSkgcGVy Zm9ybXMgTFBfREVBRCBtYXJraW5nIG9mIGRlYWQgaW5kZXggZW50cmllcywgd2hpbGUKZm9sbG93 aW5nIHNsaWdodGx5IGRpZmZlcmVudCBydWxlcyB0byB0aGUgb2xkIGFwcHJvYWNoLiAgSXQgcmVs aWVzIG9uCmNvbXBhcmluZyB0aGUgYmF0Y2gncyBzYXZlZCBMU04gYWdhaW5zdCB0aGUgY3VycmVu dCBwYWdlIExTTiB0byBkZXRlY3QKY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMsIHdoaWNo IGluIHR1cm4gcmVxdWlyZXMgZmFrZSBMU04gc3VwcG9ydApmb3IgdW5sb2dnZWQgcmVsYXRpb25z LiAgUHJlcGFyYXRvcnkgY29tbWl0IGU1ODM2ZjdiIGFkZGVkIHRoYXQgc3VwcG9ydAp0byB0aGUg aGFzaCBpbmRleCBBTS4KCmhhc2h1bmd1YXJkYmF0Y2ggaXMgYWxzbyBwcm92aWRlZCwgZXZlbiB0 aG91Z2ggaXQgaXMgbm90IGN1cnJlbnRseQpleGVyY2lzZWQ6IGhhc2ggZG9lcyBub3Qgc3VwcG9y dCBpbmRleC1vbmx5IHNjYW5zIChhbmQgYWx3YXlzIHVzZXMgYW4KTVZDQyBzbmFwc2hvdCksIHNv IGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBhbHdheXMgdHJ1ZSBmb3IgaGFzaCBpbmRleApzY2Fu cyB3aXRoIGhlYXBhbSAoYXMgbm90ZWQgYWxyZWFkeSwgaW4gcHJhY3RpY2UgZXZlcnkgYmF0Y2gn cyBsb2NrIGFuZApwaW4gYXJlIHJlbGVhc2VkIGF0IHVubG9jayB0aW1lIGR1cmluZyBoYXNoIHNj YW5zKS4gIFRoZSBjYWxsYmFjayBpcyBhCnJlcXVpcmVtZW50IGZvciBhbWdldGJhdGNoIGluZGV4 IEFNcy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTog VG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5k IDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FI Mi1Xem1ZcWhhY0JIMTYxcGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21h aWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDgxICsr LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSAgICAgICB8ICAzMSArLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8IDIxMCArKysrKysrKysrLS0tLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jIHwgMzQ1ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICB8ICAyOCArKy0KIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAgMyArLQogOSBmaWxlcyBjaGFuZ2VkLCAzNDMgaW5z ZXJ0aW9ucygrKSwgNTA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oYXNoLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IGE4NzAyZjBlNS4u MWEyZTAyZjllIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNkZWZpbmUgSEFTSF9I CiAKICNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRj aC5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKQEAgLTEwMCw1NyArMTAxLDE4IEBAIHR5cGVk ZWYgSGFzaFBhZ2VPcGFxdWVEYXRhICpIYXNoUGFnZU9wYXF1ZTsKICAqLwogI2RlZmluZSBIQVNI T19QQUdFX0lECQkweEZGODAKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NJdGVtCS8qIHdo YXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLworLyogUGVyLWJhdGNoIGRhdGEgcHJp dmF0ZSB0byB0aGUgaGFzaCBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEJhdGNoRGF0 YQogewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFw IGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2Nh dGlvbiB3aXRoaW4gcGFnZSAqLwotfSBIYXNoU2NhblBvc0l0ZW07CisJQnVmZmVyCQlidWY7CQkJ LyogaW5kZXggcGFnZSdzIGJ1ZmZlciBwaW4gKi8KKwlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8q IGluZGV4IHBhZ2UncyBibG9jayBudW1iZXIgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8q IGluZGV4IHBhZ2UncyBsZWZ0IHNpYmxpbmcgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8q IGluZGV4IHBhZ2UncyByaWdodCBzaWJsaW5nICovCit9IEhhc2hCYXRjaERhdGE7CiAKLXR5cGVk ZWYgc3RydWN0IEhhc2hTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGlmIHZhbGlk LCB0aGUgYnVmZmVyIGlzIHBpbm5lZCAqLwotCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogY3Vy cmVudCBoYXNoIGluZGV4IHBhZ2UgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIG5leHQg b3ZlcmZsb3cgcGFnZSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogcHJldiBvdmVyZmxv dyBvciBidWNrZXQgcGFnZSAqLwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlz IG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5kZXhvZmZzZXQp LiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQot CSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5k IGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVu dHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5kZXggaXMgYSBj dXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBjYWxsZXIuCi0J ICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAq LwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0J aW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCi0KLQlIYXNo U2NhblBvc0l0ZW0gaXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJLyogTVVTVCBCRSBMQVNU ICovCi19IEhhc2hTY2FuUG9zRGF0YTsKLQotI2RlZmluZSBIYXNoU2NhblBvc0lzUGlubmVkKHNj YW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcyku Y3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLQotI2RlZmluZSBIYXNoU2NhblBvc0lz VmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChz Y2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYp KSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkKLQotI2Rl ZmluZSBIYXNoU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsgXAotCQkoc2NhbnBv cykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVy OyBcCi0JCShzY2FucG9zKS5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2Nh bnBvcykuZmlyc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcykubGFzdEl0ZW0gPSAwOyBcCi0JCShz Y2FucG9zKS5pdGVtSW5kZXggPSAwOyBcCi0JfSB3aGlsZSAoMCkKKy8qIEFjY2VzcyB0aGUgaGFz aC1wcml2YXRlIHBlci1iYXRjaCBkYXRhIGZyb20gYW4gSW5kZXhTY2FuQmF0Y2ggcG9pbnRlciAq LworI2RlZmluZSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJaW5kZXhhbV91dGls X2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEhhc2hCYXRjaERhdGEpCiAKIC8qCiAgKglI YXNoU2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4u CkBAIC0xNzgsMTUgKzE0MCw2IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVlRGF0YQog CSAqIHJlZmVycmVkIG9ubHkgd2hlbiBoYXNoc29fYnVjX3BvcHVsYXRlZCBpcyB0cnVlLgogCSAq LwogCWJvb2wJCWhhc2hzb19idWNfc3BsaXQ7Ci0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMg aWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAq a2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8K LQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAq LwotCi0JLyoKLQkgKiBJZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFnZSBh bmQgc2F2ZSB0aGVtIGluCi0JICogSGFzaFNjYW5Qb3NEYXRhCi0JICovCi0JSGFzaFNjYW5Qb3NE YXRhIGN1cnJQb3M7CS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwogfSBIYXNoU2Nhbk9wYXF1 ZURhdGE7CiAKIHR5cGVkZWYgSGFzaFNjYW5PcGFxdWVEYXRhICpIYXNoU2Nhbk9wYXF1ZTsKQEAg LTM2OCwxMSArMzIxLDE1IEBAIGV4dGVybiBib29sIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCSAgIEluZGV4VW5pcXVlQ2hlY2sgY2hl Y2tVbmlxdWUsCiAJCQkJCSAgIGJvb2wgaW5kZXhVbmNoYW5nZWQsCiAJCQkJCSAgIHN0cnVjdCBJ bmRleEluZm8gKmluZGV4SW5mbyk7Ci1leHRlcm4gYm9vbCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaGFz aGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0 IGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRl cm4gSW5kZXhTY2FuRGVzYyBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSAgIFNjYW5LZXkgb3JkZXJi eXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgaGFzaHVuZ3VhcmRiYXRjaChJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGhhc2hraWxs aXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4 dGVybiB2b2lkIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpoYXNoYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJ CQkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLApAQCAtNDQ1LDggKzQwMiw5 IEBAIGV4dGVybiB2b2lkIF9oYXNoX2ZpbmlzaF9zcGxpdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBt ZXRhYnVmLCBCdWZmZXIgb2J1ZiwKIAkJCQkJCQkgICB1aW50MzIgbG93bWFzayk7CiAKIC8qIGhh c2hzZWFyY2guYyAqLwotZXh0ZXJuIGJvb2wgX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9oYXNo X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJIElu ZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9oYXNoX2Zp cnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogCiAvKiBoYXNoc29y dC5jICovCiB0eXBlZGVmIHN0cnVjdCBIU3Bvb2wgSFNwb29sOwkvKiBvcGFxdWUgc3RydWN0IGlu IGhhc2hzb3J0LmMgKi8KQEAgLTQ3Niw3ICs0MzQsNiBAQCBleHRlcm4gQmxvY2tOdW1iZXIgX2hh c2hfZ2V0X29sZGJsb2NrX2Zyb21fbmV3YnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG5ld19i dQogZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9uZXdibG9ja19mcm9tX29sZGJ1Y2tldChS ZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0KTsKIGV4dGVybiBCdWNrZXQgX2hhc2hfZ2V0 X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0 LAogCQkJCQkJCQkJCQkJIHVpbnQzMiBsb3dtYXNrLCB1aW50MzIgbWF4YnVja2V0KTsKLWV4dGVy biB2b2lkIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogLyogaGFzaC5j ICovCiBleHRlcm4gdm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBj dXJfYnVja2V0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCmluZGV4IGZjOTAzMTExNy4uOTcyYmI2NjZi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCkBAIC0yNTUsMjggKzI1NSwyOSBAQCBUaGUgcmVhZGVy IGFsZ29yaXRobSBpczoKIAkJcmV0YWtlIHRoZSBidWZmZXIgY29udGVudCBsb2NrIG9uIG5ldyBi dWNrZXQKIAkJYXJyYW5nZSB0byBzY2FuIHRoZSBvbGQgYnVja2V0IG5vcm1hbGx5IGFuZCB0aGUg bmV3IGJ1Y2tldCBmb3IKICAgICAgICAgIHR1cGxlcyB3aGljaCBhcmUgbm90IG1vdmVkLWJ5LXNw bGl0Ci0tLSB0aGVuLCBwZXIgcmVhZCByZXF1ZXN0OgorLS0gdGhlbiwgcGVyIGJhdGNoIChwYWdl KSByZXF1ZXN0OgogCXJlYWNxdWlyZSBjb250ZW50IGxvY2sgb24gY3VycmVudCBwYWdlCiAJc3Rl cCB0byBuZXh0IHBhZ2UgaWYgbmVjZXNzYXJ5IChubyBjaGFpbmluZyBvZiBjb250ZW50IGxvY2tz LCBidXQga2VlcAogCXRoZSBwaW4gb24gdGhlIHByaW1hcnkgYnVja2V0IHRocm91Z2hvdXQgdGhl IHNjYW4pCi0Jc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXgg cGFnZSBpbnRvIGFuIGl0ZW1zIGFycmF5Ci0JcmVsZWFzZSBwaW4gYW5kIGNvbnRlbnQgbG9jayAo YnV0IGlmIGl0IGlzIHByaW1hcnkgYnVja2V0IHBhZ2UgcmV0YWluCi0JaXRzIHBpbiB0aWxsIHRo ZSBlbmQgb2YgdGhlIHNjYW4pCi0JZ2V0IHR1cGxlIGZyb20gYW4gaXRlbSBhcnJheQorCXNhdmUg YWxsIHRoZSBtYXRjaGluZyB0dXBsZXMgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBhIGJh dGNoCisJcmVsZWFzZSBjb250ZW50IGxvY2sgb24gY3VycmVudCBwYWdlIHJldHVybiBiYXRjaCB0 byB0YWJsZSBBTSAodGFibGUgQU0KKwl3aWxsIGRyb3AgYmF0Y2gncyBidWZmZXIgcGluLCB0aG91 Z2ggcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4gaXMga2VwdAorCXVudGlsIHRoZSBlbmQgb2YgdGhl IHNjYW4pCiAtLSBhdCBzY2FuIHNodXRkb3duOgotCXJlbGVhc2UgYWxsIHBpbnMgc3RpbGwgaGVs ZAorCXJlbGVhc2Ugc2Nhbi1vd25lZCBwaW5zIChlLmcuLCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBp bikgYXMgbmVlZGVkCiAKIEhvbGRpbmcgdGhlIGJ1ZmZlciBwaW4gb24gdGhlIHByaW1hcnkgYnVj a2V0IHBhZ2UgZm9yIHRoZSB3aG9sZSBzY2FuIHByZXZlbnRzCi10aGUgcmVhZGVyJ3MgY3VycmVu dC10dXBsZSBwb2ludGVyIGZyb20gYmVpbmcgaW52YWxpZGF0ZWQgYnkgc3BsaXRzIG9yCi1jb21w YWN0aW9ucy4gIChPZiBjb3Vyc2UsIG90aGVyIGJ1Y2tldHMgY2FuIHN0aWxsIGJlIHNwbGl0IG9y IGNvbXBhY3RlZC4pCit0aGUgYnVja2V0IGZyb20gYmVpbmcgcmVvcmdhbml6ZWQgYnkgc3BsaXRz IG9yIGNvbXBhY3Rpb25zIHdoaWxlIHRoZSBzY2FuIGlzCitpbiBwcm9ncmVzcy4gIChPZiBjb3Vy c2UsIG90aGVyIGJ1Y2tldHMgY2FuIHN0aWxsIGJlIHNwbGl0IG9yIGNvbXBhY3RlZC4pCiAKLVRv IG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZmaWMsIGhhc2ggaW5kZXggc2NhbiBhbHdheXMgc2Vh cmNoZXMgdGhlIGVudGlyZQotaGFzaCBwYWdlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcg aXRlbXMgYXQgb25jZSwgY29weWluZyB0aGVpciBoZWFwIHR1cGxlCi1JRHMgaW50byBiYWNrZW5k LWxvY2FsIHN0b3JhZ2UuIFRoZSBoZWFwIHR1cGxlIElEcyBhcmUgdGhlbiBwcm9jZXNzZWQgd2hp bGUgbm90Ci1ob2xkaW5nIGFueSBwYWdlIGxvY2sgd2l0aGluIHRoZSBpbmRleCB0aGVyZWJ5LCBh bGxvd2luZyBjb25jdXJyZW50IGluc2VydGlvbgotdG8gaGFwcGVuIG9uIHRoZSBzYW1lIGluZGV4 IHBhZ2Ugd2l0aG91dCBhbnkgcmVxdWlyZW1lbnQgb2YgcmUtZmluZGluZyB0aGUKLWN1cnJlbnQg c2NhbiBwb3NpdGlvbiBmb3IgdGhlIHJlYWRlci4gV2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBp biBvbiB0aGUKLWJ1Y2tldCBwYWdlLCB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBkZWxl dGlvbnMgYW5kIGJ1Y2tldCBzcGxpdC4KK1RvIG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZmaWMs IGhhc2ggaW5kZXggc2NhbnMgYWx3YXlzIHNlYXJjaCB0aGUgZW50aXJlCitoYXNoIHBhZ2UgdG8g aWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCByZXR1cm5pbmcgdGhlbSBp bgorYmF0Y2hlcyB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gcHJvY2Vzc2VzIGJhdGNo ZXMgd2hpbGUgbm8gcGFnZSBsb2NrCitpcyBoZWxkIHdpdGhpbiB0aGUgaW5kZXgsIGFsbG93aW5n IGNvbmN1cnJlbnQgaW5zZXJ0aW9uIHRvIGhhcHBlbiBvbiB0aGUKK3NhbWUgaW5kZXggcGFnZSB3 aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZSBjdXJyZW50IHNjYW4KK3Bv c2l0aW9uIGZvciB0aGUgcmVhZGVyLiAgVGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gYmF0Y2gg YnVmZmVyIHBpbnMgYXJlCitkcm9wcGVkLiAgV2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBv biB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSwgdG8KK3Byb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50 IGJ1Y2tldCBzcGxpdHMuCiAKIFRvIGFsbG93IGZvciBzY2FucyBkdXJpbmcgYSBidWNrZXQgc3Bs aXQsIGlmIGF0IHRoZSBzdGFydCBvZiB0aGUgc2NhbiwgdGhlCiBidWNrZXQgaXMgbWFya2VkIGFz IGJ1Y2tldC1iZWluZy1wb3B1bGF0ZWQsIGl0IHNjYW4gYWxsIHRoZSB0dXBsZXMgaW4gdGhhdApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDlhZTlmMDQ0OC4uOGNjMjRmOTM5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCkBAIC0xMTMsMTAgKzExMywxMCBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJzID0gaGFzaGFkanVzdG1lbWJlcnMsCiAJCS5hbWJl Z2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCi0JCS5h bWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAotCQkuYW1nZXRiYXRjaCA9IE5VTEwsCi0JCS5hbXVu Z3VhcmRiYXRjaCA9IE5VTEwsCi0JCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtZ2V0 dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IGhhc2hnZXRiYXRjaCwKKwkJLmFtdW5ndWFy ZGJhdGNoID0gaGFzaHVuZ3VhcmRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBoYXNoa2ls bGl0ZW1zYmF0Y2gsCiAJCS5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNj YW4gPSBoYXNoZW5kc2NhbiwKIAkJLmFtcG9zcmVzZXQgPSBOVUxMLApAQCAtMjk5LDUzICsyOTks MjggQEAgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVs bCwKIAogCiAvKgotICoJaGFzaGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRo ZSBzY2FuLgorICoJaGFzaGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNo IG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29sCi1oYXNoZ2V0dHVwbGUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitoYXNoZ2V0YmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGly ZWN0aW9uIGRpcikKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwotCWJvb2wJCXJlczsKIAogCS8qIEhhc2ggaW5kZXhlcyBhcmUgYWx3YXlzIGxv c3N5IHNpbmNlIHdlIHN0b3JlIG9ubHkgdGhlIGhhc2ggY29kZSAqLwogCXNjYW4tPnhzX3JlY2hl Y2sgPSB0cnVlOwogCi0JLyoKLQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMg c2Nhbiwgd2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbiB0aGUKLQkgKiBhcHByb3ByaWF0ZSBkaXJl Y3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwot CSAqIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KLQkgKi8KLQlpZiAoIUhhc2hTY2Fu UG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7 Ci0JZWxzZQorCWlmIChwcmlvcmJhdGNoID09IE5VTEwpCiAJewotCQkvKgotCQkgKiBDaGVjayB0 byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJ ICovCi0JCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQl7Ci0JCQkvKgotCQkJICogWWVz LCBzbyByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2ggdHVw bGVzCi0JCQkgKiBhdCBvbmNlIHJpZ2h0IGFmdGVyIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2Ugb3Ig YXQgZW5kIG9mIHNjYW4uKQotCQkJICogSW4gY2FzZSBpZiBjYWxsZXIgcmV2ZXJzZXMgdGhlIGlu ZGV4c2NhbiBkaXJlY3Rpb24gaXQgaXMgcXVpdGUKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhlIHNh bWUgaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4KLQkJCSAqIEJ1dCwgd2Ug ZG9uJ3QgZGV0ZWN0IHRoYXQ7IGluc3RlYWQsIHdlIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MKLQkJ CSAqIGVudHJpZXMuCi0JCQkgKi8KLQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJ CQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhJbmRleFR1cGxlc1BlclBh Z2UpOworCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JCQlpZiAoc28t Pm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRlbXNb c28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJfQorCQlfaGFzaF9k cm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCQkvKgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4u Ci0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUg dGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJ cmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBS ZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRlciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9u ICdkaXInKSAqLworCXJldHVybiBfaGFzaF9uZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9 CiAKIApAQCAtMzU1LDI2ICszMzAsMjYgQEAgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNj IHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNo OwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKIAotCXJl cyA9IF9oYXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9o YXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJ d2hpbGUgKGJhdGNoICE9IE5VTEwpCiAJewotCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOworCQlmb3IgKGludCBpdGVtSW5kZXggPSBiYXRjaC0+ Zmlyc3RJdGVtOworCQkJIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUlu ZGV4KyspCisJCXsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdLnRhYmxlVGlkLCAxLCB0cnVlKTsKKwkJCW50aWRzKys7CisJCX0KIAogCQkvKgotCQkgKiBf aGFzaF9maXJzdCBhbmQgX2hhc2hfbmV4dCBoYW5kbGUgZWxpbWluYXRlIGRlYWQgaW5kZXggZW50 cmllcwotCQkgKiB3aGVuZXZlciBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlcyBpcyB0cnVlLiAg VGhlcmVmb3JlLCB0aGVyZSdzCi0JCSAqIG5vdGhpbmcgdG8gZG8gaGVyZSBleGNlcHQgYWRkIHRo ZSByZXN1bHRzIHRvIHRoZSBUSURCaXRtYXAuCisJCSAqIF9oYXNoX25leHQgcmVsZWFzZXMgdGhl IHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycyBiZWZvcmUKKwkJICogYWxsb2NhdGluZyB0 aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlzIGV2ZXIgdXNlZCBhdCBhIHRpbWUKIAkJ ICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUp OwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zOTYsMTcgKzM3MSwxNiBAQCBoYXNo YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4g PSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAo SGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNo U2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1 ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29f YnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1L aWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9 IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9 IE1BWEFMSUdOKHNpemVvZihIYXNoQmF0Y2hEYXRhKSk7CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dv cmtzcGFjZSA9IDA7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTQyMSwxOCArMzk1LDggQEAgaGFz aHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5 cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1Zihy ZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlvbiBpbnZhbGlkICh0aGlzIHdpbGwgY2F1c2UgX2hh c2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwot CiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUgaXMgZ2l2ZW4gKi8KIAlpZiAoc2Nh bmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwg c2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CkBAIC00 NDEsNiArNDA1LDExMSBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz Y2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiB9 CiAKKy8qCisgKgloYXNodW5ndWFyZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdzIFRJRCByZWN5Y2xp bmcgaW50ZXJsb2NrIChidWZmZXIgcGluKQorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0g d2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRvCisgKiBwcmV2ZW50 IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0uCisgKi8KK3ZvaWQKK2hhc2h1bmd1 YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlI YXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsK KworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVV bmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2Vy dChiYXRjaC0+aXNHdWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoaGFzaGJhdGNoLT5idWYpOwor fQorCisvKgorICoJaGFzaGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRl eCB0dXBsZXMgTFBfREVBRAorICovCit2b2lkCitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdl dERhdGEoc2NhbiwgYmF0Y2gpOworCUJ1ZmZlcgkJYnVmOworCVBhZ2UJCXBhZ2U7CisJSGFzaFBh Z2VPcGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJlciBvZmZudW0sCisJCQkJbWF4b2ZmOworCWJv b2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJ QXNzZXJ0KGJhdGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBo YXNoYmF0Y2gtPmN1cnJQYWdlLCBIQVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwg TEhfT1ZFUkZMT1dfUEFHRSk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVm KTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9 IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJ X2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1Zik7CisJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWF4b2Zm ID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBi YXRjaC0+ZGVhZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAw OyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNo LT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+ aXRlbXNbaXRlbUluZGV4XTsKKworCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CisK KwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5k ZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJ eworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRl eFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJ CQlpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+dGFibGVU aWQpKQorCQkJeworCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogVXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4K KwkJCQkJICogdXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2su IElmIHdlCisJCQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51 aW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJ CQkJCQlnb3RvIHVubG9ja19wYWdlOworCQkJCX0KKworCQkJCS8qIGZvdW5kIHRoZSBpdGVtICov CisJCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwor CQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2Zm bnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5j ZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQu IFdoZW5ldmVyCisJICogd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUg cGFnZSdzCisJICogTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdp c2UganVzdCBhIGhpbnQuCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1 ZS0+aGFzaG9fZmxhZyB8PSBMSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKKwkJQnVmZmVyRmluaXNo U2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9oYXNo X3JlbGJ1ZihyZWwsIGJ1Zik7Cit9CisKIC8qCiAgKgloYXNoZW5kc2NhbigpIC0tIGNsb3NlIGRv d24gYSBzY2FuCiAgKi8KQEAgLTQ1MCwxNyArNTE5LDggQEAgaGFzaGVuZHNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuKQogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNo U2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3Vy cmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtp bGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3Bz Y2FuYnVmKHJlbCwgc28pOwogCi0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJl ZShzby0+a2lsbGVkSXRlbXMpOwogCXBmcmVlKHNvKTsKIAlzY2FuLT5vcGFxdWUgPSBOVUxMOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaF94bG9nLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwppbmRleCAyMDYwNjIwYzcuLmUyNmVlOGJi OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKQEAgLTExNDEsMTQgKzExNDEsMTQg QEAgaGFzaF9tYXNrKGNoYXIgKnBhZ2VkYXRhLCBCbG9ja051bWJlciBibGtubykKIAkJLyoKIAkJ ICogSW4gaGFzaCBidWNrZXQgYW5kIG92ZXJmbG93IHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBt b2RpZnkgdGhlCiAJCSAqIExQX0ZMQUdTIHdpdGhvdXQgZW1pdHRpbmcgYW55IFdBTCByZWNvcmQu IEhlbmNlLCBtYXNrIHRoZSBsaW5lCi0JCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoZ2V0dHVw bGUoKSwgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRhaWxzLgorCQkgKiBwb2ludGVyIGZsYWdz LiBTZWUgaGFzaGtpbGxpdGVtc2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xw X2ZsYWdzKHBhZ2UpOwogCX0KIAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaGlu dCBiaXQgTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgbWF5IHJlbWFpbgotCSAqIHVubG9nZ2VkLiBT bywgbWFzayBpdC4gU2VlIF9oYXNoX2tpbGxfaXRlbXMoKSBmb3IgZGV0YWlscy4KKwkgKiB1bmxv Z2dlZC4gU28sIG1hc2sgaXQuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4K IAkgKi8KIAlvcGFxdWUtPmhhc2hvX2ZsYWcgJj0gfkxIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKaW5kZXggODA5OWIwZDAyLi4xMWUzZGI0NzIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpAQCAtMjgwLDMxICsyODAsMjQgQEAgX2hh c2hfZHJvcGJ1ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiB9CiAKIC8qCi0gKglfaGFzaF9k cm9wc2NhbmJ1ZigpIC0tIHJlbGVhc2UgYnVmZmVycyB1c2VkIGluIHNjYW4uCisgKglfaGFzaF9k cm9wc2NhbmJ1ZigpIC0tIHJlbGVhc2UgYnVmZmVycyBvd25lZCBieSBzY2FuLgogICoKLSAqIFRo aXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgdXNlZCBkdXJpbmcgc2NhbiBvbiB3aGljaCB3 ZQotICogaG9sZCBubyBsb2NrLgorICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyBm b3IgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgYW5kIGZvciB0aGUKKyAqIGJ1Y2tldCBwYWdlIG9m IGEgYnVja2V0IGJlaW5nIHNwbGl0IGFzIG5lZWRlZC4KICAqLwogdm9pZAogX2hhc2hfZHJvcHNj YW5idWYoUmVsYXRpb24gcmVsLCBIYXNoU2Nhbk9wYXF1ZSBzbykKIHsKLQkvKiByZWxlYXNlIHBp biB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChz by0+aGFzaHNvX2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fYnVja2V0X2J1ZiAhPSBzby0+ Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdl ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSkKIAkJX2hhc2hf ZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29fYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19idWNrZXRf YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFy eSBidWNrZXQgcGFnZSAgb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCi0JaWYgKEJ1ZmZlcklzVmFs aWQoc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCS8qIHJlbGVhc2UgcGluIGhlbGQgb24gcHJp bWFyeSBidWNrZXQgcGFnZSBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KKwlpZiAoQnVmZmVySXNW YWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwg c28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBhbnkgcGluIHdlIHN0aWxsIGhvbGQg Ki8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQotCQlfaGFzaF9kcm9wYnVm KHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVy OwotCiAJLyogcmVzZXQgc3BsaXQgc2NhbiAqLwogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9 IGZhbHNlOwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoc2VhcmNoLmMKaW5kZXggODlkMWM1YmM2Li5hNjgxMmM2YTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoc2VhcmNoLmMKQEAgLTIyLDEwNSArMjIsOTQgQEAKICNpbmNsdWRlICJzdG9y YWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCi1zdGF0aWMgYm9vbCBf aGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwKLQkJCQkJCSAg IFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkgICBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CiBzdGF0aWMgaW50CV9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1z KEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVy IG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3Nh dmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkJICAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCQkgICBJbmRleFNj YW5CYXRjaCBiYXRjaCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyB2b2lkIF9oYXNoX3JlYWRuZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZwLAogCQkJCQkJICAgUGFnZSAqcGFnZXAsIEhhc2hQ YWdlT3BhcXVlICpvcGFxdWVwKTsKIAogLyoKLSAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5l eHQgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGJhdGNo IG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2Ny aWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkKLSAqCQliZSBwaW5uZWQgYnV0IG5vdCBs b2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcwotICoJCXdoaWNoIGl0 ZW0gd2FzIHByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVz Y3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UgYmF0Y2ggd2l0aCBpdGVtcworICoJCWFscmVhZHkgcmV0 dXJuZWQuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgc2Nhbi0+eHNfaGVhcHRpZCBpcyBz ZXQgdG8gdGhlIFRJRCBvZiB0aGUgbmV4dAotICoJCWhlYXAgdHVwbGUuICBzby0+Y3VyclBvcyBp cyB1cGRhdGVkIGFzIG5lZWRlZC4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBi YXRjaCBjb250YWluaW5nIG1hdGNoaW5nIGl0ZW1zIGZyb20KKyAqCQluZXh0IHBhZ2UuICBPdGhl cndpc2UgcmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vCisgKgkJZnVy dGhlciBtYXRjaGVzLiAgTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAq Ci0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSB3 aXRoIHBpbgotICoJCWhlbGQgb24gYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVs ZCBvbiBvdmVyZmxvdwotICoJCXBhZ2UuCisgKgkJUmV0YWlucyBwaW5zIGFjY29yZGluZyB0byB0 aGUgc2FtZSBydWxlcyBhcyBfaGFzaF9maXJzdC4KICAqLwotYm9vbAotX2hhc2hfbmV4dChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19oYXNo X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0 Y2ggcHJpb3JiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwog CUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JSGFz aFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlIYXNoQmF0Y2hEYXRhICpoYXNocHJpb3JiYXRjaCA9 IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgcHJpb3JiYXRjaCk7CiAJQmxvY2tOdW1iZXIgYmxrbm87 CiAJQnVmZmVyCQlidWY7Ci0JYm9vbAkJZW5kX29mX3NjYW4gPSBmYWxzZTsKKwlJbmRleFNjYW5C YXRjaCBiYXRjaDsKIAogCS8qCi0JICogQWR2YW5jZSB0byB0aGUgbmV4dCB0dXBsZSBvbiB0aGUg Y3VycmVudCBwYWdlOyBvciBpZiBkb25lLCB0cnkgdG8gcmVhZAotCSAqIGRhdGEgZnJvbSB0aGUg bmV4dCBvciBwcmV2aW91cyBwYWdlIGJhc2VkIG9uIHRoZSBzY2FuIGRpcmVjdGlvbi4gQmVmb3Jl Ci0JICogbW92aW5nIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgbWFrZSBzdXJlIHRoYXQg d2UgZGVhbCB3aXRoIGFsbCB0aGUKLQkgKiBraWxsZWQgaXRlbXMuCisJICogVGhlIGNvcmUgY29k ZSBtdXN0IGRlYWwgd2l0aCBjcm9zcy1iYXRjaCBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGZvciB1 cy4KKwkgKiBBIGJhdGNoIG1hbmFnZW1lbnQgcm91dGluZSB0aGF0IGZsaXBzIHByaW9yYmF0Y2gn cyBzY2FuIGRpcmVjdGlvbiBpcworCSAqIHVzZWQgZm9yIHRoaXMuCisJICovCisJQXNzZXJ0KHBy aW9yYmF0Y2gtPmRpciA9PSBkaXIpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hpY2ggcGFnZSB0 byByZWFkIG5leHQgYmFzZWQgb24gc2NhbiBkaXJlY3Rpb24gYW5kIGRldGFpbHMKKwkgKiB0YWtl biBmcm9tIHRoZSBwcmlvciBiYXRjaAogCSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5s YXN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxf aXRlbXMoc2Nhbik7CisJCWJsa25vID0gaGFzaHByaW9yYmF0Y2gtPm5leHRQYWdlOworCWVsc2UK KwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+cHJldlBhZ2U7CiAKLQkJCWJsa25vID0gc28tPmN1 cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsK LQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxP V19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJ CWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRy dWU7Ci0JCX0KLQl9CisJLyoKKwkgKiBGb3IgYml0bWFwIHNjYW4gY2FsbGVycywgcmVsZWFzZSB0 aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQgdGhlCisJICogYWxsb2NhdGlvbiBiZWxvdyBjYW4g cmV1c2UgaXRzIG1lbW9yeS4gIFRoYXQgd2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQg bW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxvY2F0aW9uLgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0 Y2hyaW5nKQorCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBwcmlvcmJhdGNoKTsK KworCWlmICghQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkv KiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV4dCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGls X2JhdGNoX2FsbG9jKHNjYW4pOworCisJLyogR2V0IHRoZSBidWZmZXIgZm9yIG5leHQgYmF0Y2gg Ki8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKIAllbHNlCiAJewot CQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0J CXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4p OworCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAorCQkJCQkJICAg TEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKIAotCQkJYmxrbm8gPSBzby0+Y3Vy clBvcy5wcmV2UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewot CQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCi0JCQkJCQkJCSAg IExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7Ci0KLQkJCQkvKgotCQkJCSAqIFdl IGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuCi0J CQkJICogb3BlcmF0aW9uLCBzbyByZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUg YWNxdWlyZWQKLQkJCQkgKiBoZXJlLgotCQkJCSAqLwotCQkJCWlmIChidWYgPT0gc28tPmhhc2hz b19idWNrZXRfYnVmIHx8Ci0JCQkJCWJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYp Ci0JCQkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwotCi0JCQkJaWYgKCFfaGFzaF9yZWFkcGFn ZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQll bHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQl9CisJCS8qCisJCSAqIFdlIGFsd2F5cyBt YWludGFpbiB0aGUgcGluIG9uIGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwK KwkJICogc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhl cmUuCisJCSAqLworCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJYnVm ID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkJCV9oYXNoX2Ryb3BidWYocmVsLCBi dWYpOwogCX0KIAotCWlmIChlbmRfb2Zfc2NhbikKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5k IGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdl KHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCiAJewotCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNv KTsKLQkJSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJcmV0dXJuIGZhbHNl OworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBO VUxMOwogCX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1 cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nh bi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCi0JcmV0dXJuIHRydWU7CisJLyog UmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2Ug Ki8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yNzAsMjIgKzI1OSwyMCBAQCBfaGFzaF9y ZWFkcHJldihJbmRleFNjYW5EZXNjIHNjYW4sCiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0t IEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5k IHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhl IGZpcnN0IGl0ZW0gKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUK LSAqCQlpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdp dGggdGhlIHNjYW4KLSAqCQlkZXNjcmlwdG9yLgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNo IG9mIGl0ZW1zIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4g dGhlIGluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0 aAorICoJCXRoZSBzY2FuIGRlc2NyaXB0b3IuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwg aWYgdGhlIHBhZ2UgY29udGFpbmluZyBjdXJyZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3Zl cmZsb3cgcGFnZSwgYm90aCBwaW4gYW5kIGxvY2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQg aXMgYSBidWNrZXQKLSAqCQlwYWdlIHRoZW4gaXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFu ZCBkYXRhIGFib3V0IHRoZSBtYXRjaGluZwotICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBi ZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0 IHRvIHRoZSBoZWFwIFRJRCBvZiB0aGUgY3VycmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVs IGV4aXQsIHJldHVybnMgYSBiYXRjaCBjb250YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90 aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhl ciBtYXRjaGVzLgorICoJCU5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAg KgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Us IHdpdGggcGluIGhlbGQgb24KLSAqCQlidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBo ZWxkIG9uIG92ZXJmbG93IHBhZ2UuCisgKgkJV2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBv biB0aGUgYnVja2V0IHBhZ2UuICBXaGVuIHdlIHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1 Y2tldCBwYWdlLCBpdCB3aWxsIHJldGFpbiBpdHMgb3duIHJlZmVyZW5jZSBwaW4uCiAgKi8KLWJv b2wKK0luZGV4U2NhbkJhdGNoCiBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBA IC0yOTYsNyArMjgzLDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVl IG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUluZGV4U2NhbkJhdGNoIGJh dGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1 bWVudCkKQEAgLTMyNiw3ICszMTMsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAo Y3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVM TDsKIAogCS8qCiAJICogT2theSB0byBjb21wdXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQgdG8g ZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFueQpAQCAtNDE5LDE5MSArNDA2LDE1MiBAQCBfaGFz aF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJX2hhc2hf cmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwogCX0KIAotCS8qIHJlbWVtYmVy IHdoaWNoIGJ1ZmZlciB3ZSBoYXZlIHBpbm5lZCwgaWYgYW55ICovCi0JQXNzZXJ0KEJ1ZmZlcklz SW52YWxpZChzby0+Y3VyclBvcy5idWYpKTsKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJLyog QWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxf YmF0Y2hfYWxsb2Moc2Nhbik7CiAKLQkvKiBOb3cgZmluZCBhbGwgdGhlIHR1cGxlcyBzYXRpc2Z5 aW5nIHRoZSBxdWFsaWZpY2F0aW9uIGZyb20gYSBwYWdlICovCi0JaWYgKCFfaGFzaF9yZWFkcGFn ZShzY2FuLCAmYnVmLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogUmVhZCB0aGUgZmlyc3Qg cGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hf cmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JLyogT0ssIGl0 ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3Mu aXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0 ZW0tPmhlYXBUaWQ7Ci0KLQkvKiBpZiB3ZSdyZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBmb3VuZCBh IHZhbGlkIHR1cGxlcyAqLwotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29u dGFpbmluZyBtYXRjaGVkIGl0ZW1zICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgotICoJX2hh c2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBz by0+Y3VyclBvcworICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50 IGluZGV4IHBhZ2UgaW50byBiYXRjaAogICoKICAqCVdlIHNjYW4gYWxsIHRoZSBpdGVtcyBpbiB0 aGUgY3VycmVudCBpbmRleCBwYWdlIGFuZCBzYXZlIHRoZW0gaW50bwotICoJc28tPmN1cnJQb3Mg aWYgaXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwor ICoJdGhlIGJhdGNoIGlmIHRoZXkgc2F0aXNmeSB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0 Y2hpbmcgaXRlbXMKICAqCWFyZSBmb3VuZCBpbiB0aGUgY3VycmVudCBwYWdlLCB3ZSBtb3ZlIHRv IHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UKICAqCWluIGEgYnVja2V0IGNoYWluIGFzIGluZGlj YXRlZCBieSB0aGUgZGlyZWN0aW9uLgogICoKICAqCVJldHVybiB0cnVlIGlmIGFueSBtYXRjaGlu ZyBpdGVtcyBhcmUgZm91bmQgZWxzZSByZXR1cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCi1f aGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVj dGlvbiBkaXIpCitfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYs IFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChI YXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUJ1ZmZlcgkJYnVmOworCUhhc2hCYXRjaERh dGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOwogCVBhZ2UJCXBh Z2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBvZmZudW07CiAJdWlu dDE2CQlpdGVtSW5kZXg7CiAKLQlidWYgPSAqYnVmUDsKIAlBc3NlcnQoQnVmZmVySXNWYWxpZChi dWYpKTsKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYsIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZF UkZMT1dfUEFHRSk7CiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNo UGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3Vy clBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJaGFzaGJhdGNoLT5i dWYgPSBidWY7CisJaGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 Zik7CisJYmF0Y2gtPmRpciA9IGRpcjsKIAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCiAJewotCQlCbG9ja051bWJlciBwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwot CiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRp b24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoKHBhZ2Us IHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlm aWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJ CQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IDApCiAJCQkJYnJlYWs7CiAKIAkJ CS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJy ZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRo ZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkKLQkJCSAqIGtpbGxlZCBpdGVtcy4KKwkJCSAq IENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwg dHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBuZXh0IHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5u dW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCS8qCi0JCQkg KiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFnZSwgaGFzaG9fcHJldmJsa25vIGlzIG5v dCBhIHJlYWwKLQkJCSAqIGJsb2NrIG51bWJlci4KLQkJCSAqLwotCQkJaWYgKHNvLT5jdXJyUG9z LmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0g c28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCXByZXZfYmxrbm8gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCQllbHNlCi0JCQkJcHJldl9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fcHJldmJs a25vOwotCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0J CQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7 Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBw cmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBr bm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGlu ZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICog ZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9o YXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwot CQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBh Z2UgPSBwcmV2X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2Nr TnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxp ZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBi dWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsK IAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJ dGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJYmF0 Y2gtPmZpcnN0SXRlbSA9IDA7CisJCWJhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJ fQogCWVsc2UKIAl7Ci0JCUJsb2NrTnVtYmVyIG5leHRfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1i ZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBw b3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2hf bGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9s b2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5k ZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwK KwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJbmRleFR1 cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBh bnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRo ZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdp dGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0 Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIHRyeSB0bworCQkJICogbW92ZSB0byB0 aGUgcHJldmlvdXMgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJ X2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+ aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19z cGxpdF9idWNrZXRfYnVmKQotCQkJCW5leHRfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX25leHRibGtu bzsKLQogCQkJX2hhc2hfcmVhZHByZXYoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJ aWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7 Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwot CQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJl dmlvdXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25v dyB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcg dGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRv bid0IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFz aF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJ CQkgKiBmdW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdl ID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gbmV4dF9i bGtubzsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQo YnVmKSkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisKKwkJCWhhc2hiYXRjaC0+YnVmID0gYnVm OworCQkJaGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJ CX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9z Lmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRl bUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9 IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0g MTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8 fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8q CisJICogU2F2ZWQgYXQgbGVhc3Qgb25lIG1hdGNoIGluIGJhdGNoLml0ZW1zW10uICBQcmVwYXJl IGZvciBoYXNoZ2V0YmF0Y2ggdG8KKwkgKiByZXR1cm4gaXQgYnkgaW5pdGlhbGl6aW5nIHJlbWFp bmluZyB1bmluaXRpYWxpemVkIGZpZWxkcy4KKwkgKi8KKwlpZiAoaGFzaGJhdGNoLT5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWhhc2hiYXRjaC0+YnVmID09IHNvLT5oYXNoc29f c3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJs b2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJs a25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsK KwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0aGVyIHRoZSBwcmltYXJ5IGJ1Y2tldCwg b3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVkIGR1ZSB0byBhIHNwbGl0LgorCQkgKgor CQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNvdW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBh biBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVmZXJlbmNlIHRoYXQgY2FuIGJlIHJlbGVhc2Vk IChieSB0aGUgY29yZSBjb2RlL3RhYmxlIEFNKQorCQkgKiBiZWZvcmUgdGhlIGhhc2hzb19idWNr ZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJlZmVyZW5jZXMgYXJlCisJCSAqIHJlbGVh c2VkLgorCQkgKi8KKwkJSW5jckJ1ZmZlclJlZkNvdW50KGhhc2hiYXRjaC0+YnVmKTsKKworCQkv KiBDYW4gb25seSB1c2Ugb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJaGFzaGJhdGNoLT5w cmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJaGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9w YXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5wcmV2 UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9 IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlfaGFzaF9yZWxidWYocmVsLCBzby0+Y3VyclBv cy5idWYpOwotCQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOworCQkvKiBDYW4gdXNl IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vIGFuZCBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLwor CQloYXNoYmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CisJCWhhc2hi YXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKIAl9CiAKLQlBc3NlcnQo c28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkvKiB3ZSBz YXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGJhdGNoLml0ZW1zW10gKi8KKwlpbmRleGFtX3V0 aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJhdGNoLCBoYXNoYmF0Y2gtPmJ1Zik7CisKKwlBc3NlcnQo YmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQog CiAvKgogICogTG9hZCBhbGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRl eCBwYWdlCi0gKiBpbnRvIHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3Jl YWRwYWdlLgorICogaW50byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFn ZS4KICAqLwogc3RhdGljIGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcikKKwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7 CkBAIC02NDAsNyArNTg4LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQog CQkJewogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlf aGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3Nh dmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7 CiAJCQl9CiAJCQllbHNlCkBAIC02ODcsNyArNjM1LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRf aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4 LS07CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9o YXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2 ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJ CXsKQEAgLTcwNiwxMyArNjU0LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4 U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAot X2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9z YXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNl dE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1 cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0 ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhl YXBUaWQgPSBpdHVwLT50X3RpZDsKKwljdXJySXRlbS0+dGFibGVUaWQgPSBpdHVwLT50X3RpZDsK IAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0 ID0gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCmluZGV4IDA4MWFkYmM4OC4uMzMx ZDVmNGRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKQEAgLTE2LDcgKzE2LDYgQEAK IAogI2luY2x1ZGUgImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMu aCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRp bHMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKQEAgLTMzLDcgKzMyLDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkg b2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBoYXZlIHRoZSBvcmln aW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwot CSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQg dGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0 YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1ha2UgdGhlIG1haW4g aW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQKQEAgLTUwNSwxMjkg KzUwNCwzIEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVs LCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBuZXdfYnVja2V0OwogfQotCi0vKgotICog X2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNj YW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KLSAqCi0gKiBzY2FuLT5vcGFx dWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBh Ym91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5l cmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4g MCkuCi0gKgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgcGFnZSBh bmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGluIGEgYnVmZmVyLiAg Tm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFE IHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBo YXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAq IG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQo c28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBh c3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRo ZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZB Q1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0 aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4g Y2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAq IGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2 ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQg cGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAg VGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICog a2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxl LgotICovCi12b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87Ci0JQnVm ZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtp bGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCWJvb2wJ CWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0 KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28g d2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBhZ2VzLgotCSAqLwot CXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlp ZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JewotCQkvKgotCQkgKiBXZSBh bHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBzbywgYWxsIHdlIG5lZWQgdG8gZG8gaXMK LQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8KLQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1 ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJF KTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFE LCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3Bh cXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9mZnNl dE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0J CWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVt ICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCi0JCW9mZm51bSA9 IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJy UG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVt KTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRlbUlkCQlpaWQgPSBQ YWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCi0JCQlpZiAoSXRlbVBvaW50ZXJFcXVh bHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCi0JCQl7Ci0JCQkJaWYgKCFr aWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0 IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBh Z2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5v dCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlp ZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7 Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChp aWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9m IGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0 KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBs YXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKLQkgKiB3ZSBtYXJr IGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkgKiBMSF9QQUdFX0hB U19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4KLQkgKi8K LQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5oYXNob19mbGFnIHw9IExIX1BB R0VfSEFTX0RFQURfVFVQTEVTOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUs IHRydWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKHNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBv cy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9yZWxidWYocmVsLCBi dWYpOwotfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwKaW5kZXggMTNlMGY3NDQ5Li5lNzAyOWZkYjcgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bApAQCAtODQ4LDcgKzg0OCw4IEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAg IDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfZnJlZV9iYXRjaDwvZnVuY3Rpb24+KS4gIE5vdGUgYWxz byB0aGF0CiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBtdXN0 IG5ldmVyIG1vZGlmeSB0aGUKICAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9zdHJ1Y3RmaWVs ZD4gcGFyYW1ldGVyLiAgVGhlIGNvcmUKLSAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEKKyAgIDxmaWxlbmFt ZT5zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGFuZAorICAgPGZpbGVuYW1l PnNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9ucyBwcm92 aWRlCiAgICByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW50ZXJmYWNlLgogICA8L3BhcmE+CiAKQEAgLTkyMCwxMiArOTIxLDEyIEBAIGFt dW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBsZWFmIHBhZ2UsIHdoaWNoIHBy ZXZlbnRzIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQogICAgPGNvbW1hbmQ+VkFDVVVNPC9j b21tYW5kPi4KICAgIEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRpZmZlcmVudCBr aW5kIG9mIGludGVybG9jaywgb3IgbXVsdGlwbGUKLSAgIGludGVybG9ja3MsIGluIGl0cyBwZXIt YmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQtaW4KLSAgIGluZGV4 IEFNIHRoYXQgc3VwcG9ydHMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7 IEItdHJlZQotICAgJm1kYXNoOyBob2xkcyBhIHNpbmdsZSBidWZmZXIgcGluLiAgU2VlIDx4cmVm IGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yCi0gICBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4g bWFuYWdlbWVudCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUKLSAg IGNhbGxlZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggZ3VhcmRlZCBiYXRjaDsgaXQgaXMgbm90IGNh bGxlZCB3aGVuIHRoZSBpbmRleAotICAgQU0gaGFzIGFscmVhZHkgdW5ndWFyZGVkIHRoZSBiYXRj aCBpdHNlbGYgKGFzIGl0IGRvZXMgd2hlbgorICAgaW50ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRj aCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIGJvdGggYnVpbHQtaW4KKyAgIGluZGV4IEFN cyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEIt dHJlZSBhbmQKKyAgIGhhc2ggJm1kYXNoOyBob2xkIGEgc2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUg PHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgorICAgZm9yIGRldGFpbHMgb24gYnVmZmVy IHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fucy4gIFRoaXMgZnVuY3Rpb24KKyAgIHdp bGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkIGJhdGNoOyBpdCBpcyBu b3QgY2FsbGVkIHdoZW4KKyAgIHRoZSBpbmRleCBBTSBoYXMgYWxyZWFkeSB1bmd1YXJkZWQgdGhl IGJhdGNoIGl0c2VsZiAoYXMgaXQgZG9lcyB3aGVuCiAgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1l ZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlCiAgICBjb21t b24gY2FzZSkuCiAgIDwvcGFyYT4KQEAgLTk2Nyw4ICs5NjgsOCBAQCBhbWtpbGxpdGVtc2JhdGNo IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGluZGV4IEFNcyAodGhvc2UgdGhhdCBkb24ndCBjYW4gbGVhdmUKICAgIHRoZSBmaWVsZCBzZXQg dG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4pLCBidXQgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQg Zm9yCiAgICBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVyZSBzY2FucyB0byBza2lwIGtu b3duLWRlYWQgaW5kZXggZW50cmllcy4KLSAgIFRoZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2Qg dGhhdCBjdXJyZW50bHkgc3VwcG9ydHMKLSAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gKEItdHJlZSkgaW1wbGVtZW50cworICAgQm90aCBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2Rz IHRoYXQgY3VycmVudGx5IHN1cHBvcnQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gKEItdHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CiAgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRl cmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKICAg IGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuICBU aGUgdGFibGUgQU0gbWF5CiAgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19r aWxsaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcwpAQCAtMTAwOSw3ICsxMDEw LDggQEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGNvbW1hbmQ+ VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7IHNvIGl0IHdvdWxk IGJlCiAgICB1bnNhZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBzdGlsbCBwb2ludCB0 byB0aGUgc2FtZSBoZWFwL3RhYmxlCiAgICB0dXBsZXMuICBTaW5jZSA8bGl0ZXJhbD5MUF9ERUFE PC9saXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCi0gICBoaW50LCBpdCBp cyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBhcHByb2FjaC4KKyAg IGhpbnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCb3RoIEItdHJlZSBhbmQgaGFz aCB1c2UgdGhpcworICAgYXBwcm9hY2guCiAgIDwvcGFyYT4KIAogICA8d2FybmluZz4KQEAgLTEw MTcsNyArMTAxOSw3IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAg ICBUaGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJlcyB0aGUgaW5kZXggQU0gdG8g dXNlIGZha2UKICAgICAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdl cyBmb3IgcmVsYXRpb25zIHdoZXJlIFdBTCBpcwogICAgIG5vdCBnZW5lcmF0ZWQsIHNpbmNlIHJl YWwgTFNOcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGF0IGNhc2UuICBTZWUgdGhlCi0gICAgQi10 cmVlIGluZGV4IGltcGxlbWVudGF0aW9uIGZvciByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhpcwor ICAgIEItdHJlZSBhbmQgaGFzaCBpbmRleCBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlZmVyZW5jZSBl eGFtcGxlcyBvZiB0aGlzCiAgICAgdGVjaG5pcXVlLiAgQW4gaW5kZXggQU0gdGhhdCBkb2VzIG5v dCBpbXBsZW1lbnQgZmFrZSBMU05zIGNhbiBzdGlsbAogICAgIHByb3ZpZGUgPGZ1bmN0aW9uPmFt a2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IHNob3VsZCBzaW1wbHkgZG8KICAgICBub3Ro aW5nIHdoZW4gdGhlIHJlbGF0aW9uIGRvZXMgbm90IGdlbmVyYXRlIFdBTCAoaS5lLiwgd2hlbgpA QCAtMTA5OSw4ICsxMTAxLDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAg IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNjYW5zOyBkdXJpbmcKICAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgdGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8 L2xpdGVyYWw+CiAgICBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgY2FsbGVyICh0aGUgdGFibGUg QU0pLCBhbmQgdGhlIGluZGV4IEFNIG11c3QKLSAgIG5ldmVyIHJlbGVhc2UgaXQuICBTZWUgPGZ1 bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEgcmVmZXJlbmNlCi0gICBleGFtcGxlLgor ICAgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZSA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBh bmQKKyAgIDxmdW5jdGlvbj5faGFzaF9uZXh0PC9mdW5jdGlvbj4gZm9yIHJlZmVyZW5jZSBleGFt cGxlcy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCBlM2M4ZWQ2ODQuLjkxZDFmZTUwOCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEy MTgsNiArMTIxOCw3IEBAIEhhc2gKIEhhc2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBIYXNoQWxs b2NGdW5jCitIYXNoQmF0Y2hEYXRhCiBIYXNoQnVpbGRTdGF0ZQogSGFzaEJ1bGtEZWxldGVTdHJl YW1Qcml2YXRlCiBIYXNoQ29tcGFyZUZ1bmMKQEAgLTEyMzksOCArMTI0MCw2IEBAIEhhc2hQYWdl U3RhdAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hT Y2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBI YXNoVmFsdWVGdW5jCi0tIAoyLjUzLjAKCg== --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v22-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8l8 RnJvbSA3MWM3MTMxODMxNDJkYzkxN2UyZjU3Yzc4MmZmZDYyZDg1NTc5MWY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwOC8xNV0g aGVhcGFtOiBBZGQgaW5kZXggc2NhbiBJL08gcHJlZmV0Y2hpbmcuCgpUaGlzIGNvbW1pdCBpbXBs ZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5CnNj YW5zIHRoYXQgcmVxdWlyZSBoZWFwIGZldGNoZXMpLiBUaGlzIHdhcyBtYWRlIHBvc3NpYmxlIGJ5 IHRoZSByZWNlbnQKYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNlcyB0byBib3RoIHRoZSB0 YWJsZSBBTSBhbmQgaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVy ZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJhdGhlciB0aGFuIG9uZSB0 dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFrZW4gZnJvbQppbmRleCB0 dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5kZXggcGFnZS4gIFRoaXMg YWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNpbXVsdGFuZW91c2x5LiAg R2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5kaW5nIG9mIGluZGV4IEFN IGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQgdG8gY29uc2lkZXIgYWxs IG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVmZXRjaGluZyBpcyBpbXBs ZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVyIHRoZQpjb250cm9sIG9m IHRoZSB0YWJsZSBBTSBhbmQgY29yZSBjb2RlLiAgVGhpcyBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8g dGhlCnNjYW4gcG9zaXRpb24gYWRkZWQgYnkgY29tbWl0IEZJWE1FLCB3aGljaCBpbnRyb2R1Y2Vk IHRoZSBhbWdldGJhdGNoCmludGVyZmFjZS4gIEEgcmVhZCBzdHJlYW0gY2FsbGJhY2sgYWR2YW5j ZXMgdGhlIHJlYWQgc3RyZWFtIGFzIG5lZWRlZCB0bwpwcm92aWRlIHN1ZmZpY2llbnRseSBtYW55 IGhlYXAgYmxvY2sgbnVtYmVycyB0byBtYWludGFpbiB0aGUgcmVhZApzdHJlYW0ncyB0YXJnZXQg cHJlZmV0Y2ggZGlzdGFuY2UuCgpUZXN0aW5nIGhhcyBzaG93biB0aGF0IGluZGV4IHByZWZldGNo aW5nIGNhbiBtYWtlIGluZGV4IHNjYW5zIG11Y2gKZmFzdGVyLiAgTGFyZ2UgcmFuZ2Ugc2NhbnMg dGhhdCByZXR1cm4gbWFueSB0dXBsZXMgY2FuIGJlIGFzIG11Y2ggYXMgMzB4CmZhc3RlciB3aXRo IGxvY2FsIFNTRHMgd2hlbiBidWZmZXJlZCBJL08gaXMgdXNlZCwgYW5kIDUweCBmYXN0ZXIgb3Ig bW9yZQp3aXRoIGhpZ2hlci1sYXRlbmN5IHN0b3JhZ2Ugc3VjaCBhcyBuZXR3b3JrLWF0dGFjaGVk IGJsb2NrIGRldmljZXMsCndoZXJlIHRoZSBiZW5lZml0IG9mIGhpZGluZyBJL08gbGF0ZW5jeSB0 aHJvdWdoIHByZWZldGNoaW5nIGlzIGV2ZW4KZ3JlYXRlci4KCkEgbmV3IEdVQyAoZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCkgY29udHJvbHMgdGhlIHVzZSBvZiBpbmRleApwcmVmZXRjaGluZy4g IFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgJ29uJywgc28gYWxsIHBsYWluIGluZGV4IHNjYW5zIHVz ZQpwcmVmZXRjaGluZyB3aGVyZSBzdXBwb3J0IGV4aXN0cy4gIEFsbCBpbmRleC1vbmx5IHNjYW5z IHdpbGwgYWxzbyB1c2UKcHJlZmV0Y2hpbmcgYXV0b21hdGljYWxseSB3aGVyZSBzdXBwb3J0ZWQg KG9uY2UgdGhlIHNjYW4gc3RhcnRzIHRvCnJlcXVpcmUgYSBzaWduaWZpY2FudCBudW1iZXIgb2Yg aGVhcCBmZXRjaGVzKS4KCkFuIGltcG9ydGFudCBnb2FsIG9mIHRoZSBhbWdldGJhdGNoIGRlc2ln biBpcyB0byBlbmFibGUgdGhlIHRhYmxlIEFNJ3MKcmVhZCBzdHJlYW0gY2FsbGJhY2sgdG8gYWR2 YW5jZSBpdHMgcHJlZmV0Y2ggcG9zaXRpb24gdXNpbmcgVElEcyB0aGF0CmFwcGVhciBvbiBhIGxl YWYgcGFnZSB0aGF0J3MgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGxlYWYK cGFnZS4gIFRoaXMgaXMgY3J1Y2lhbCB3aXRoIHNjYW5zIG9mIGluZGV4ZXMgd2hlcmUgZWFjaCBs ZWFmIHBhZ2UKaGFwcGVucyB0byBoYXZlIHJlbGF0aXZlbHkgZmV3IGRpc3RpbmN0IGhlYXAgYmxv Y2tzIGFtb25nIGl0cyBtYXRjaGluZwpUSURzIChhcyB3ZWxsIGFzIHdpdGggc2NhbnMgd2l0aCBs ZWFmIHBhZ2VzIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGZldwp0b3RhbCBtYXRjaGluZyBpdGVtcyku ICBJbmRleCBzY2FucyBjYW4gaGF2ZSBhcyBtYW55IGFzIDY0IG9wZW4gYmF0Y2hlcywKd2hpY2gg dGVzdGluZyBoYXMgc2hvd24gdG8gYmUgYWJvdXQgdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2Fu IGV2ZXIgYmUKdXNlZnVsLiAgQmF0Y2hlcyBhcmUgbWFpbnRhaW5lZCBpbiBzY2FuIG9yZGVyIHVz aW5nIGEgc2ltcGxlIHJpbmcgYnVmZmVyCmRhdGEgc3RydWN0dXJlLgoKSW4gcmFyZSBjYXNlcyB3 aGVyZSB0aGUgc2NhbiBleGNlZWRzIHRoaXMgcXVhc2ktYXJiaXRyYXJ5IGxpbWl0IG9mIDY0LAp0 aGUgcmVhZCBzdHJlYW0gaXMgdGVtcG9yYXJpbHkgcGF1c2VkIHVzaW5nIHRoZSByZWFkIHN0cmVh bSBwYXVzaW5nCm1lY2hhbmlzbSBhZGRlZCBieSBjb21taXQgMzgyMjljYjkuICBQcmVmZXRjaGlu ZyAodmlhIHRoZSByZWFkIHN0cmVhbSkKaXMgcmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBv c2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMgY3VycmVudCBvcGVuCmJhdGNoIGFuZCB0aGVuIGZy ZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBmcm9tIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZwpidWZm ZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvciBzY2Fu cyB0byBob2xkCm9wZW4gbW9yZSB0aGFuIGFib3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNp cmVkIEkvTyBwcmVmZXRjaApkaXN0YW5jZS4KClRoZSBoZXVyaXN0aWMgdXNlZCB0byBkZWNpZGUg d2hlbiB0byBiZWdpbiBwcmVmZXRjaGluZyBkZWxheXMKaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNj YW4ncyByZWFkIHN0cmVhbSB1bnRpbCB0aGUgc2NhbiB0cmFuc2l0aW9ucyBmcm9tCml0cyBmaXJz dCBiYXRjaCB0byBpdHMgc2Vjb25kIGJhdGNoLiAgRWFjaCBiYXRjaCBjb3JyZXNwb25kcyB0byBt YXRjaGluZwpUSURzIGZyb20gYSBzaW5nbGUgaW5kZXggbGVhZiBwYWdlLCBzbyBwcmVmZXRjaGlu ZyBvbmx5IGJlZ2lucyBvbmNlIHRoZQpzY2FuIHJlYWRzIGZyb20gaXRzIHNlY29uZCBsZWFmIHBh Z2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcKaXRlbS4gIEEgc2VsZWN0aXZlIGlu ZGV4IHNjYW4gdGhhdCB0b3VjaGVzIG9ubHkgb25lIGxlYWYgcGFnZSBuZXZlcgpyZWFjaGVzIHRo ZSBzZWNvbmQgYmF0Y2gsIHNvIHRoZSBoZXVyaXN0aWMgY29ycmVjdGx5IGF2b2lkcyBwcmVmZXRj aGluZwpvdmVyaGVhZC4gIFRoZSBwaWN0dXJlIGZvciBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzIGlz IG1peGVkLgoKVGhlIHNhbWUgcHJpbmNpcGxlIGFwcGxpZXMgdG8gbmVzdGxvb3AgaW5uZXIgaW5k ZXggc2NhbnMgd2l0aCB2ZXJ5IHRpZ2h0CmxpbWl0cyAoZS5nLiwgYSBjb3JyZWxhdGVkIHN1YnF1 ZXJ5IHdpdGggTElNSVQgMSksIHdoZXJlIGVhY2ggcmVzY2FuCnJlYWRzIGZyb20gb25seSBhIHNp bmdsZSBsZWFmIHBhZ2U6IHRoZSBoZXVyaXN0aWMgYXZvaWRzIHRoZSBjb3N0IG9mCnJlcGVhdGVk bHkgcmVzZXR0aW5nIGEgcmVhZCBzdHJlYW0gYWNyb3NzIG1hbnkgcmVzY2Fucy4gIE9uIHRoZSBv dGhlcgpoYW5kLCBzb21lIHNlbGVjdGl2ZSBzY2FucyB0aGF0IGFjY2VzcyByYW5kb21seS1vcmRl cmVkIGhlYXAgcGFnZXMgd291bGQKZ2VudWluZWx5IGJlbmVmaXQgZnJvbSBwcmVmZXRjaGluZywg YnV0IG5ldmVyIGdldCBhcyBmYXIgYXMgcmVhY2hpbmcKdGhlaXIgc2Vjb25kIGJhdGNoIC0tIGEg bWlzc2VkIG9wcG9ydHVuaXR5LCB3aGVyZSB0aGUgaGV1cmlzdGljIGlzCm92ZXJseSBjYXV0aW91 cy4KCkNvbnZlcnNlbHksIHRoZSBoZXVyaXN0aWMgaXMgbm90IGNhdXRpb3VzIGVub3VnaCB3aXRo IHNsaWdodGx5IGxlc3MKc2VsZWN0aXZlIG5lc3Rsb29wIGlubmVyIHNjYW5zIChlLmcuLCBMSU1J VCAzIHdpdGhpbiBhIExBVEVSQUwgam9pbikuClRoZXNlIHJlc2NhbnMgbWF5IHNwYW4gdHdvIGxl YWYgcGFnZXMsIGp1c3QgYmFyZWx5IGNyb3NzaW5nIHRoZQpzZWNvbmQtYmF0Y2ggdGhyZXNob2xk LCB3aGlsZSBzdGlsbCBvbmx5IG5lZWRpbmcgdG8gZmV0Y2ggdHdvIG9yIHRocmVlCmhlYXAgcGFn ZXMgLS0gbm90IGVub3VnaCBmb3IgcHJlZmV0Y2hpbmcgdG8gcmVhbGlzdGljYWxseSBoZWxwIG9y IHBheQpmb3IgaXRzZWxmIG9uIGFueSBpbmRpdmlkdWFsIHJlc2Nhbi4gIFN1Y2ggcXVlcmllcyBh cmUgcmVncmVzc2VkIGJ5IHRoZQp3b3JrIGZyb20gdGhpcyBjb21taXQgKHJlbGF0aXZlIHRvIFBv c3RncmVTUUwgMTgpLCB0aG91Z2ggb25seSB3aGVuIHRoZQpzY2FuIGhhcyB0byByZWFkIGhlYXAg cGFnZXMgZnJvbSBzdG9yYWdlLgoKQWRkaW5nIGEgc21hcnRlciBoZXVyaXN0aWMgdGhhdCBhZGRy ZXNzZXMgYm90aCBzaG9ydGNvbWluZ3MgcmVtYWlucyBhcwp3b3JrIGZvciBhIGZ1dHVyZSByZWxl YXNlLiAgUGFzc2luZyBkb3duIGFuIEV4ZWNTZXRUdXBsZUJvdW5kIHN0eWxlIGhpbnQKYW5kIHVz aW5nIHRoYXQgaGludCB0byBpbmZsdWVuY2UgaG93IHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBp dHMKZGlzdGFuY2Ugc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcHByb2FjaC4KCkF1dGhvcjogVG9t YXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bi b3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpS ZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0 ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgg ICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDM4ICsrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jICAgIHwgNDU4ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDM2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgMTYgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAg ICAgICAgICAgICAgICAgIHwgIDg0ICsrKy0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgICAg ICAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDY1OSBpbnNlcnRpb25z KCspLCAxNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMTgwNTM3NjAwLi43N2Qz Y2FlMjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEzNCw2ICsxMzQsMTkgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhGZXRjaEhlYXBEYXRhCiAKIAkvKiBQbGFpbiBpbmRleCBzY2FuIHhzX2xhc3RpbmJs b2NrIG9wdGltaXphdGlvbiAqLwogCWJvb2wJCXhzX2xhc3RpbmJsb2NrOyAvKiBsYXN0IFRJRCBv biB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCisKKwkvKgorCSAqIFJlYWQgc3RyZWFt IHN0YXRlIGZvciBwcmVmZXRjaGluZyAob25seSB1c2VkIGR1cmluZyBhbWdldGJhdGNoIHNjYW5z KS4KKwkgKgorCSAqIFRoZSByZWFkIHN0cmVhbSBtb3ZlcyBhaGVhZCBvZiB0aGUgc2NhbidzIGN1 cnJlbnQgcG9zaXRpb24gdXNpbmcgaXRzCisJICogb3duIHByZWZldGNoaW5nIHBvc2l0aW9uIChw ZXIgY29udmVudGlvbnMgc3VwcG9ydGVkIGJ5IGluZGV4YmF0Y2guYykuCisJICogVGhlIHJlYWQg c3RyZWFtIGlzIGFsbG9jYXRlZCBlYXJseSBpbiB0aGUgc2NhbiwgYW5kIHJlc2V0IG9uIHJlc2Nh bgorCSAqIChhbmQgd2hlbiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcykuCisJICovCisJYm9v bAkJeHNfcGF1c2VkOwkJLyogcGF1c2VkIHVudGlsIG5leHQgYmF0Y2ggaXMgcmVhZD8gKi8KKwlT Y2FuRGlyZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2RpcjsJLyogaW5kZXggc2NhbiBkaXJlY3Rpb24g Ki8KKwlCbG9ja051bWJlciB4c19wcmVmZXRjaF9ibG9jazsJLyogbGFzdCBibG9jayByZXR1cm5l ZCB0byB4c19yZWFkX3N0cmVhbSAqLworCVJlYWRTdHJlYW0gKnhzX3JlYWRfc3RyZWFtOyAvKiBw cmVmZXRjaGluZyByZWFkIHN0cmVhbSAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2luZGV4YmF0Y2guaAppbmRleCA1NTcwODllZDkuLjcyMDM4NDFmNyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaW5kZXhiYXRjaC5oCkBAIC00Myw2ICs0Myw3IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5f aW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Q b3MudmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQg PSBmYWxzZTsKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNlOwogCiAJ c2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CkBAIC02NCwxNiArNjUsMTYgQEAg ZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIC8qCiAgKiBGZXRjaCB0aGUgbmV4dCBiYXRjaCBvZiBt YXRjaGluZyBpdGVtcyBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCiAgKgotICogQ2FsbGVk IHdoZW4gY2FsbGVyJ3MgY3VycmVudCBiYXRjaCAocGFzc2VkIHRvIHVzIGFzIHByaW9yQmF0Y2gp IGhhcyBubyBtb3JlCi0gKiBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rp b24uICBDYWxsZXIgcGFzc2VzIGEgTlVMTAotICogcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2Fs bCBoZXJlIGZvciB0aGUgc2Nhbi4KKyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgc2Nh bkJhdGNoL3ByZWZldGNoQmF0Y2ggKHBhc3NlZCB0byB1cyBhcworICogcHJpb3JCYXRjaCkgaGFz IG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2Fs bGVyCisgKiBwYXNzZXMgYSBOVUxMIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBm b3IgdGhlIHNjYW4uCiAgKgogICogUmV0dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNz ZWQgYnkgY2FsbGVyIGluIHRoZSBnaXZlbiBzY2FuCiAgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hl biB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoYXQgZGlyZWN0aW9uLgogICoKICAqIFRo aXMgaXMgd2hlcmUgYmF0Y2hlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1ZmZl ci4gIFdlIGRvbid0CiAgKiBmcmVlIGFueSBiYXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBpcyBs ZWZ0IHVwIHRvIHRoZSBjYWxsZXIuICBUaGUgY2FsbGVyCi0gKiBpcyBhbHNvIHJlc3BvbnNpYmxl IGZvciBhZHZhbmNpbmcgdGhlaXIgcG9zaXRpb24uCisgKiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZv ciBhZHZhbmNpbmcgdGhlaXIgc2NhblBvcy9wcmVmZXRjaFBvcyBwb3NpdGlvbi4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4U2NhbkJhdGNoCiB0YWJsZWFtX3V0 aWxfZmV0Y2hfbmV4dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggYTQzZjViMTllLi4xOGE3ZDlmYjQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3JlbHNjYW4uaApAQCAtMjE1LDYgKzIxNSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNj YW5CYXRjaERhdGEKIAkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZvaWQgcmVkdW5kYW50 IGFtZ2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQogCSAqIHByaW9yYmF0Y2ggLS0gdGhlIGlu ZGV4IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzIHRvCiAJICog ZGV0ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJleW9uZCBjYWxsZXIn cyBwcmlvcmJhdGNoLgorCSAqIEluIHBhcnRpY3VsYXIsIGR1cmluZyBwcmVmZXRjaGluZyB0aGUg cmVhZCBzdHJlYW0gY2FsbGJhY2sgZGlzY292ZXJzCisJICogdGhlIGVuZC1vZi1zY2FuIHZpYSBw cmVmZXRjaEJhdGNoLiAgdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goKQorCSAqIGNoZWNr cyB0aGVzZSBmbGFncyBzbyB0aGF0IHRoZSBzY2FuIHNpZGUgZG9lc24ndCByZXBlYXQgdGhlIHNh bWUKKwkgKiBhbWdldGJhdGNoIGNhbGwgd2hlbiBpdCBsYXRlciByZWFjaGVzIHRoYXQgYmF0Y2gg YXMgc2NhbkJhdGNoLgogCSAqLwogCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7CiAJYm9vbAkJa25v d25FbmRGb3J3YXJkOwpAQCAtMjY2LDExICsyNzAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKICAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBi eSBfbXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKICAqIHRo ZSB0YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUg aW50byB0aGUgZnV0dXJlLgogICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8gcmVv cmRlciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICogSW5kZXggc2NhbnMgc29t ZXRpbWVzIG5lZWQgdG8gcmVhZGFoZWFkIGJ5IHNldmVyYWwgZG96ZW4gYmF0Y2hlcyBpbiBvcmRl cgorICogdG8gbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgKGZvciBy ZWFkaW5nIHRhYmxlIGJsb2NrcykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZl cgogewogCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVm W10gZm9yIHNjYW4gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFk IHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hp bmcgcG9zaXRpb24gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9y ZSBwb3NpdGlvbiAqLwogCiAJLyogbWFya1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBidWZmZXIg d2hlbiBtYXJrQmF0Y2ggIT0gc2NhbkJhdGNoKSAqLwpAQCAtNTA4LDYgKzUxNSwzNyBAQCBpbmRl eF9zY2FuX2JhdGNoX2Jhc2UoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKQogCXJldHVybiAoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3RhYmxlX29mZnNl dDsKIH0KIAorLyoKKyAqIENvbXBhcmUgdHdvIGJhdGNoIHJpbmcgcG9zaXRpb25zIGluIHRoZSBn aXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGlmIHBvczEgaXMg YmVoaW5kIHBvczIsIDAgaWYgZXF1YWwsIHBvc2l0aXZlIGlmIHBvczEgaXMKKyAqIGFoZWFkIG9m IHBvczIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpbmRleF9zY2FuX3Bvc19jbXAoQmF0Y2hS aW5nSXRlbVBvcyAqcG9zMSwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zMiwKKwkJCQkgICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpbnQ4CQliYXRjaGRpZmY7CisKKwlBc3NlcnQocG9zMS0+ dmFsaWQgJiYgcG9zMi0+dmFsaWQpOworCisJYmF0Y2hkaWZmID0gKGludDgpIChwb3MxLT5iYXRj aCAtIHBvczItPmJhdGNoKTsKKwlpZiAoYmF0Y2hkaWZmICE9IDApCisJeworCQkvKiBSZXNvbHZl IGNvbXBhcmlzb24gdXNpbmcgZGlmZmVyaW5nIGJhdGNoIG9mZnNldHMgKi8KKwkJcmV0dXJuIGJh dGNoZGlmZjsKKwl9CisKKwkvKgorCSAqIFJlc29sdmUgY29tcGFyaXNvbiB1c2luZyBpdGVtc1td LXdpc2UgaW5kZXhlcyBmcm9tIGNhbGxlcidzIHBvc2l0aW9ucywKKwkgKiBzaW5jZSBib3RoIHBv c2l0aW9ucyBwb2ludCB0byB0aGUgc2FtZSByaW5nIGJ1ZmZlciBiYXRjaAorCSAqLworCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXJldHVybiBwb3MxLT5pdGVtIC0g cG9zMi0+aXRlbTsKKwllbHNlCisJCXJldHVybiBwb3MyLT5pdGVtIC0gcG9zMS0+aXRlbTsKK30K KwogLyoKICAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2gu CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNs dWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1Li40MTkzMDBhNmIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaApAQCAtNTIsNiArNTIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFi bGVfc2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKK2V4dGVybiBQR0RM TElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g7CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NvcnQ7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggYjQ5NDA1NGViLi5jZDZi ZjAxMjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAg LTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRjaC5oIgogI2luY2x1ZGUg ImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgi CiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKQEAgLTY3LDYgKzY4LDE0IEBA IHN0YXRpYyB2b2lkIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5E ZXNjIHNjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCiAJCQkJCQkJCQkJ CSAgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAogCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3Mg KnBvcyk7CitzdGF0aWMgcGdfbm9pbmxpbmUgdm9pZCBoZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jl c2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSBCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1 Zik7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBoZWFwYW1faW5kZXhf Y29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkJ CQkJIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4pOworc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBh bV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJ CQkJCQl2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCQkJdm9pZCAqcGVy X2J1ZmZlcl9kYXRhKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRleCBTY2FuIENhbGxi YWNrcyBmb3IgaGVhcCBBTQpAQCAtOTMsNiArMTAyLDEwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9i ZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIAkvKiB4c19sYXN0aW5ibG9j ayBvcHRpbWl6YXRpb24gc3RhdGUgKi8KIAlBc3NlcnQoIWhzY2FuLT54c19sYXN0aW5ibG9jayk7 CiAKKwkvKiBSZWFkIHN0cmVhbSBzdGF0ZSAob3RoZXIgZmllbGRzIGluaXRpYWxpemVkIGJ5IGNh bGxiYWNrKSAqLworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1l bnRTY2FuRGlyZWN0aW9uKTsKKwlBc3NlcnQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtID09IE5VTEwp OworCiAJLyogUmVzb2x2ZSB3aGljaCB4c19nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8g dXNlIGZvciB0aGlzIHNjYW4gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtZ2V0YmF0Y2ggIT0gTlVMTCkKIAl7CkBAIC0xNjIsNiArMTc1LDE1IEBAIGhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogUmVzY2FucyBzaG91bGQgYXZv aWQgYW4gZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCiAJaHNjYW4tPnhzX3ZtX2l0 ZW1zID0gMTsKIAorCS8qIERlZmVuc2l2ZWx5IGRvIGFuIHVuY29uZGl0aW9uYWwgcmVhZCBzdHJl YW0gZGlyZWN0aW9uIHJlc2V0ICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5vTW92 ZW1lbnRTY2FuRGlyZWN0aW9uOworCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwl7CisJ CWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhz X3JlYWRfc3RyZWFtKTsKKwl9CisKIAkvKiBSZXNldCBiYXRjaCByaW5nIGJ1ZmZlciBzdGF0ZSAq LwogCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCiAJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVz ZXQoc2NhbiwgZmFsc2UpOwpAQCAtMTg2LDYgKzIwOCw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9l bmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCWlmIChoc2Nh bi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX2VuZChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pOworCiAJLyogRnJlZSBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMgKi8KIAlpZiAoc2Nh bi0+dXNlYmF0Y2hyaW5nKQogCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChzY2FuKTsKQEAg LTIxMCw4ICsyMzUsMTYgQEAgaGVhcGFtX2luZGV4X2ZldGNoX21hcmtwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQogdm9pZAogaGVhcGFtX2luZGV4X2ZldGNoX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKIHsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0 YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisKIAlBc3NlcnQoc2Nhbi0+dXNlYmF0Y2hyaW5nKTsK IAorCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQloc2Nhbi0+eHNfcGF1c2VkID0g ZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJfQor CiAJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIH0KIApAQCAtNDk1 LDcgKzUyOCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChSZWxhdGlvbiByZWws CiAJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhz Y2FuLT54c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBz dHJlYW0gd2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5l eHQgKHRob3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICov CisJCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRf c3RyZWFtX25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UK KwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOwogCiAJ CS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1l CkBAIC03NzIsNiArODEyLDEyIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJQXNzZXJ0KHNj YW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMCk7CiAJQXNz ZXJ0KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAorCS8qIEhh bmRsZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdoZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdl cyAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGly ZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJz dCBjYWxsICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciAh PSBkaXJlY3Rpb24pKQorCQloZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KGhzY2FuLCBkaXJl Y3Rpb24sIGJhdGNocmluZ2J1Zik7CisKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhp c3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0CiAJICogbWF0 Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0dXBsZSBmcm9tCkBAIC03ODEsNyArODI3LDcgQEAgaGVh cGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAl7CiAJCS8qCiAJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNv IHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKLQkJICogYnVm ZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhh dCBoZXJlIChjYW4ndCBkbyB0aGlzIHdpdGggcHJlZmV0Y2hCYXRjaCkuCiAJCSAqLwogCQlwZ19h c3N1bWUoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCkBAIC04 MTIsNiArODU4LDE3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCXJldHVybiBOVUxMOwog CX0KIAorCWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCAmJiAhaHNjYW4tPnhzX3JlYWRfc3RyZWFt KQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOwor CisJCS8qCisJCSAqIE5vdCB1c2luZyBhIHJlYWQgc3RyZWFtIHRvIGRvIGluZGV4IHByZWZldGNo aW5nLiAgRGVjaWRlIHdoZXRoZXIgdG8KKwkJICogc3RhcnQgb25lIG5vdy4KKwkJICovCisJCWhl YXBhbV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2Nhbik7CisJfQorCiAJLyoK IAkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3Rh cnQgb2YgbmV3CiAJICogc2NhbkJhdGNoLgpAQCAtODI3LDYgKzg4NCw3IEBAIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuCiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sCiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlC YXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9z OwogCiAJCUFzc2VydChoZWFkQmF0Y2ggIT0gc2NhbkJhdGNoKTsKIAkJQXNzZXJ0KGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKTsKQEAgLTgzNCwxMiArODkyLDQ3IEBA IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRj aCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUgYWJvdXQgdG8g cmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkKKwkJICogcG9pbnRz IHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBTZWUgdGhlIGNvbW1lbnRzIGFib3V0 CisJCSAqIHByZWZldGNoUG9zL3NjYW5Qb3Mgd2l0aGluIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9u ZXh0X2Jsb2NrIGZvciBhbgorCQkgKiBleHBsYW5hdGlvbi4KKwkJICoKKwkJICogVGhpcyBoYW5k bGluZyBpcyBhcHByb3hpbWF0ZWx5IHRoZSBvcHBvc2l0ZSBvZiByZXN1bWluZyBhIHBhdXNlZAor CQkgKiByZWFkIHN0cmVhbTogdGhpcyBoZWxwcyB0aGUgc2NhbiBkZWFsIHdpdGggcHJlZmV0Y2hQ b3MgZmFsbGluZworCQkgKiBiZWhpbmQgc2NhblBvcywgd2hlcmVhcyBwYXVzaW5nIGlzIHVzZWQg d2hlbiBzY2FuUG9zIGhhcyBmYWxsZW4KKwkJICogYmVoaW5kICh2ZXJ5IGZhciBiZWhpbmQpIHBy ZWZldGNoUG9zLgorCQkgKi8KKwkJaWYgKHByZWZldGNoUG9zLT52YWxpZCAmJgorCQkJcHJlZmV0 Y2hQb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQorCQkJcHJlZmV0Y2hQb3Mt PnZhbGlkID0gZmFsc2U7CisKIAkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1 ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8KIAkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2grKzsKKworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhzX3BhdXNlZCkpCisJCXsKKwkJCS8qCisJ CQkgKiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBwYXVzZWQgdGhlIHNjYW4ncyBy ZWFkIHN0cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5uaW5nIG91dCBvZiBmcmVlIGJhdGNoIHNs b3RzLiAgTm93IHRoYXQgd2UndmUKKwkJCSAqIGZyZWVkIHVwIG9uZSBzdWNoIHNsb3QsIHdlIGNh biByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIChzaW5jZQorCQkJICogdGhlcmUncyBub3cgc3BhY2Ug Zm9yIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHRvIHN0b3JlCisJCQkgKiBvbmUg bW9yZSBiYXRjaCkuCisJCQkgKi8KKwkJCUFzc2VydChwcmVmZXRjaFBvcy0+YmF0Y2ggIT0gc2Nh blBvcy0+YmF0Y2gpOworCQkJQXNzZXJ0KHByZWZldGNoUG9zLT52YWxpZCAmJgorCQkJCSAgIGlu ZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkpOworCQkJQXNz ZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywgc2NhblBvcywgZGlyZWN0aW9uKSA+ IDApOworCQkJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJCQlyZWFk X3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhzY2FuLT54c19wYXVz ZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFs d2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCghaHNjYW4tPnhzX3Bh dXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBo c2NhbiwgZGlyZWN0aW9uLAogCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywgYWxsX3Zp c2libGUpOwpAQCAtOTQ2LDYgKzEwMzksMTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9z X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAgKiAo aW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpv aW5zKSwgYW5kIHRoZQogICogbmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCiAgKgor ICogSW4gbm8gZXZlbnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2VkIHRvIGd1YXJkIG1vcmUgdGhh biBvbmUgYmF0Y2ggYXQgYQorICogdGltZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyBy ZXN0cmljdGlvbiBpcyB0byBhdm9pZCB1bmludGVuZGVkCisgKiBpbnRlcmFjdGlvbnMgd2l0aCB0 aGUgcmVhZCBzdHJlYW0sIHdoaWNoIGhhcyBpdHMgb3duIHN0cmF0ZWd5IGZvciBrZWVwaW5nCisg KiB0aGUgbnVtYmVyIG9mIHBpbnMgaGVsZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250cm9sLiAg KFVuZ3VhcmRpbmcgdmlhCisgKiB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgb2Z0ZW4gbWVh bnMgcmVsZWFzaW5nIGEgYnVmZmVyIHBpbiBvbiBhbgorICogaW5kZXggcGFnZSwgd2hpY2ggY291 bnRzIGFnYWluc3QgdGhlIHNhbWUgc2hhcmVkIHBpbiBsaW1pdC4pCisgKgogICogT25jZSB3ZSd2 ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNh ZmVseQogICogdW5ndWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBz YWZlIHdpdGggcmVzcGVjdCB0bwogICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0 Y2gncyBndWFyZCAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKQEAgLTEwODIsMyArMTE4 MiwzNTcgQEAgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJZWxzZQogCQloc2Nhbi0+eHNfdm1faXRl bXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwogfQorCisvKgorICogSGFuZGxlIGEgY2hhbmdlIGlu IGluZGV4IHNjYW4gZGlyZWN0aW9uIChhdCB0aGUgdHVwbGUgZ3JhbnVsYXJpdHkpLgorICoKKyAq IFJlc2V0cyB0aGUgcmVhZCBzdHJlYW0sIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gc2NhblBvcyBj b250aW51aW5nIHRvIGFncmVlCisgKiB3aXRoIHRoZSBibG9ja3MgdGhhdCByZWFkIHN0cmVhbSBh bHJlYWR5IGNvbnN1bWVkIHVzaW5nIHByZWZldGNoUG9zLgorICoKKyAqIE5vdGU6IGlmZiB0aGUg c2NhbiBfY29udGludWVzXyBpbiB0aGlzIG5ldyBkaXJlY3Rpb24sIGFuZCBhY3R1YWxseSBzdGVw cworICogb2ZmIHNjYW5CYXRjaCB0byBhbiBlYXJsaWVyIGluZGV4IHBhZ2UsIHRhYmxlYW1fdXRp bF9mZXRjaF9uZXh0X2JhdGNoIHdpbGwKKyAqIGRlYWwgd2l0aCBpdC4gIEJ1dCB0aGF0IG1pZ2h0 IG5ldmVyIGhhcHBlbjsgdGhlIHNjYW4gbWlnaHQgeWV0IGNoYW5nZQorICogZGlyZWN0aW9uIGFn YWluIChvciBqdXN0IGVuZCBiZWZvcmUgcmV0dXJuaW5nIG1vcmUgaXRlbXMpLgorICovCitzdGF0 aWMgcGdfbm9pbmxpbmUgdm9pZAoraGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkgQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYpCit7CisJLyogUmVzZXQgcmVhZCBz dHJlYW0gc3RhdGUgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7 CisJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIg PSBkaXJlY3Rpb247CisKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYgKi8KKwlpZiAoaHNj YW4tPnhzX3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9z dHJlYW0pOworfQorCisvKgorICogRGVjaWRlIHdoZXRoZXIgdG8gc3RhcnQgYSByZWFkIHN0cmVh bSBmb3IgaGVhcCBibG9jayBwcmVmZXRjaGluZyBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uCisg KgorICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBiYXRjaCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBp bmRleCBBTSwgYmFycmluZyB0aGUKKyAqIGZpcnN0IHRpbWUgdGhhdCBoYXBwZW5zLiAgV2UgZGVs YXkgaW5pdGlhbGl6aW5nIHRoZSBzdHJlYW0gdW50aWwgcmVhZGluZworICogZnJvbSB0aGUgc2Nh bidzIHNlY29uZCBiYXRjaC4gIFRoaXMgaGV1cmlzdGljIGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBv bgorICogc3RhcnRpbmcgYSByZWFkIHN0cmVhbSBmb3IgdmVyeSBzZWxlY3RpdmUgaW5kZXggc2Nh bnMuCisgKgorICogV2UgYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdlJ3Jl IHVuYWJsZSB0byB1bmd1YXJkICh1bnBpbikKKyAqIGVhY2ggYmF0Y2gncyBidWZmZXJzIHJpZ2h0 IGF3YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZSBub3QKKyAqIHByZXBhcmVk IHRvIHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZCAo cmVhZAorICogc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciB1 cywgYW5kIGtub3dzIG5vdGhpbmcKKyAqIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdlcy93 aXRoaW4gYmF0Y2hlcykuCisgKgorICogV2UgYWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3Ry ZWFtIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgaGF2ZW4ndAorICogZG9uZSBhbnkgaGVh cCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55IGN5Y2xlcyBvbgorICog YWxsb2NhdGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0ZWQgbmVl ZCB0byBwZXJmb3JtCisgKiBoZWFwIGZldGNoZXMuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4pCit7 CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCUFzc2VydCghc2Nhbi0+YmF0Y2hy aW5nYnVmLnByZWZldGNoUG9zLnZhbGlkKTsKKworCWlmIChzY2FuLT5NVkNDU2NhbiAmJiBlbmFi bGVfaW5kZXhzY2FuX3ByZWZldGNoICYmCisJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2Nr TnVtYmVyKQkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQloc2Nhbi0+eHNfcmVhZF9zdHJl YW0gPQorCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwg TlVMTCwKKwkJCQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJ CQkJCQkJICAgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2ssCisJCQkJCQkJCQkgICBz Y2FuLCAwKTsKKwkvKiBlbHNlIGRvbid0IHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNo aW5nIChub3QgeWV0LCBhdCBsZWFzdCkgKi8KK30KKworLyoKKyAqIFJldHVybiB0aGUgbmV4dCBi bG9jayB0byB0aGUgcmVhZCBzdHJlYW0gd2hlbiBwZXJmb3JtaW5nIGluZGV4IHByZWZldGNoaW5n LgorICoKKyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFtX2lu ZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bvcy4KKyAqIFdlIGRvbid0IGdldCBjYWxsZWQgdW50aWwg dGhlIGZpcnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGNhbGwsIHdoZW4gYQorICogaGVhcCBi bG9jayBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRp bWUuCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4g cHJlZmV0Y2hQb3MuICBJdCBpcyB0eXBpY2FsCisgKiBmb3IgcHJlZmV0Y2hQb3MgdG8gY29uc2lz dGVudGx5IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzCisgKiB1c2Vk IHRvIHRyYWNrIHRoZSBuZXh0IFRJRCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9z IHdpbGwgcmV0dXJuCisgKiB0byB0aGUgc2NhbiAoYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0 IGNhbGxlZCkuICBIb3dldmVyLCB0aGF0IGlzbid0IGEKKyAqIHN0cmljdCBwcmVjb25kaXRpb24g KHRob3VnaCBhcyBleHBsYWluZWQgYmVsb3cgd2UgaW1wbGVtZW50IGEgc2NoZW1lCisgKiBlc3Nl bnRpYWxseSBlcXVpdmFsZW50IHRvIG1ha2luZyBpdCBhIHN0cmljdCBwcmVjb25kaXRpb24pLiAg VGhlcmUgaXMgYQorICogdHJ1ZSBzdHJpY3QgcG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdl IHJldHVybiB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MuCisg Ki8KK3N0YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2so UmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCQkgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2Nh biA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNo OworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsK KwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlC YXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9z OworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtX2RpcjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2Fu UG9zID0gZmFsc2U7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hl biBwcmVmZXRjaGluZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0 IG9uZSBiYXRjaCwgbG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rpb24K KwkgKiBtdXN0IGJlIGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5f YmF0Y2hfY291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgJiYgaW5kZXhf c2Nhbl9iYXRjaF9sb2FkZWQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKKwlBc3NlcnQoc2Nhbi0+ TVZDQ1NjYW4pOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNzZXJ0KHhzX3JlYWRf c3RyZWFtX2RpciAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkvKgorCSAqIEhhbmRs ZSBpbml0aWFsaXphdGlvbiBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLCB3aGVuIHByZWZldGNoUG9z IGlzbid0CisJICogeWV0IHZhbGlkIChhbHNvIGhhbmRsZXMgdGhlIHByZWZldGNoUG9zIDwgc2Nh blBvcyBlZGdlIGNhc2UpLgorCSAqCisJICogSWYgcHJlZmV0Y2hQb3MgaGFzIG5vdCBiZWVuIGlu aXRpYWxpemVkIHlldCwgdGhhdCB0eXBpY2FsbHkgaW5kaWNhdGVzCisJICogdGhhdCB0aGlzIGlz IHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2Nhbi4gIFdlIGluaXRpYWxpemUK KwkgKiBwcmVmZXRjaFBvcyB1c2luZyB0aGUgY3VycmVudCBzY2FuUG9zLCBzaW5jZSB0aGUgY3Vy cmVudCBzY2FuQmF0Y2gKKwkgKiBpdGVtJ3MgVElEIHNob3VsZCBoYXZlIGl0cyBibG9jayBudW1i ZXIgcmV0dXJuZWQgYnkgdGhlIHJlYWQgc3RyZWFtCisJICogZmlyc3QuICBXaGVuIHRoaXMgaGFw cGVucywgaXQncyBsaWtlbHkgdGhhdCBwcmVmZXRjaFBvcyB3aWxsIGdldCBhaGVhZAorCSAqIG9m IHNjYW5Qb3MgdmVyeSBzb29uLCBhZnRlciB0aGUgX25leHRfIGNhbGwgaGVyZSByZXR1cm5zLgor CSAqCisJICogVGhlcmUncyBhbHNvIGFuIGVkZ2UgY2FzZSB0aGF0IHdlIGhhbmRsZSB1c2luZyBl eGFjdGx5IHRoZSBzYW1lIHN0ZXBzLgorCSAqIEl0J3MgcG9zc2libGUgZm9yIHByZWZldGNoUG9z IHRvICJmYWxsIGJlaGluZCIgc2NhblBvcywgYXQgbGVhc3QgaW4gYQorCSAqIHRyaXZpYWwgc2Vu c2U6IGlmIG1hbnkgYWRqYWNlbnQgbWF0Y2hpbmcgaXRlbXMgY29udGFpbiBUSURzIHRoYXQgYWxs CisJICogcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkg b3ZlcnRha2UgcHJlZmV0Y2hQb3MKKwkgKiAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRp bCB3ZSdyZSBhY3R1YWxseSBjYWxsZWQpLiAgQSBzaW1pbGFyCisJICogaXNzdWUgYXJpc2VzIGR1 cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmVxdWlyZSBvbmx5IGEgZmV3IGhlYXAKKwkgKiBm ZXRjaGVzOiB3ZSdsbCB0ZW5kIHRvIGJlIGNhbGxlZCBmYXIgbGVzcyBvZnRlbiB0aGFuIHdlJ2Qg YmUgY2FsbGVkCisJICogZHVyaW5nIGFuIGVxdWl2YWxlbnQgcGxhaW4gaW5kZXggc2NhbiBkdWUg dG8gYWxsLXZpc2libGUgaXRlbXMuICBBbgorCSAqIGFsbC12aXNpYmxlIGl0ZW0gd2lsbCBhZHZh bmNlIHNjYW5Qb3MsIGJ1dCBjYW4ndCB0cmlnZ2VyIGEgY2FsbCB0byBoZXJlCisJICogKGp1c3Qg bGlrZSBhbiBpdGVtIHRoYXQgcG9pbnRzIHRvIHRoZSBzYW1lIGhlYXAgYmxvY2sgdGhhdCB0aGUg cHJldmlvdXMKKwkgKiBpdGVtIGFsc28gcG9pbnRlZCB0bykuCisJICoKKwkgKiBUaGlzIHNjaGVt ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIGJsb2NrIHByZWZldGNoIHJlcXVlc3RzIGFzIGEK KwkgKiBzY2hlbWUgdGhhdCByZXF1aXJlcyBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hf cG9zIHRvIGFjdGl2ZWx5CisJICogZW5zdXJlIHRoYXQgInByZWZldGNoUG9zIDwgc2NhblBvcyIg Y2FuIG5ldmVyIGhhcHBlbi4gIFRoYXQgaXNuJ3QgYQorCSAqIHN0cmljdCBwcmVjb25kaXRpb24g Zm9yIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBtYWtpbmcgaXQgZXhwbGljaXQgd291bGQKKwkgKiBp bXBvc2UgYSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9uIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MuCisJICoKKwkgKiBOb3RlOiB3aGVuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MgZnJlZXMgYSBiYXRjaCB0aGF0CisJICogcHJlZmV0Y2hQb3MgcG9pbnRzIHRvLCBp dCdsbCBhdCBsZWFzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIGZvciB1cy4KKwkgKiBUaGlzIHJl bW92ZXMgYW55IGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBiZWhp bmQKKwkgKiBzY2FuUG9zLmJhdGNoIHRoYXQgaXQgd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFycyB0 byBiZSBhaGVhZCBvZiBzY2FuUG9zCisJICogaW5zdGVhZCBvZiBiZWhpbmQgaXQpLiAgSW4gb3Ro ZXIgd29yZHMsIGluIGEgY2VydGFpbiBzZW5zZSB3ZSBhY3R1YWxseQorCSAqIF9jYW5fIHRydXN0 IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgdG8gbm90IGxldCBwcmVmZXRjaFBv cworCSAqIGZhbGwgYmVoaW5kIHNjYW5Qb3M6IGl0IGNhbid0IGhhcHBlbiBhdCB0aGUgYmF0Y2gg Z3JhbnVsYXJpdHkgKG9ubHkgYXQKKwkgKiB0aGUgaXRlbS90dXBsZSBncmFudWxhcml0eSwgd2hp Y2ggd2UgY2FuIGFsd2F5cyBjb3BlIHdpdGggaGVyZSkuCisJICovCisJaWYgKCFwcmVmZXRjaFBv cy0+dmFsaWQgfHwKKwkJaW5kZXhfc2Nhbl9wb3NfY21wKHByZWZldGNoUG9zLCBzY2FuUG9zLCB4 c19yZWFkX3N0cmVhbV9kaXIpIDwgMCkKKwl7CisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJKnByZWZldGNoUG9zID0gKnNjYW5Qb3M7CisJCWZyb21T Y2FuUG9zID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBtdXN0IGF2b2lkIGtlZXBpbmcgYW55IGJh dGNoIGd1YXJkZWQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50LAorCQkgKiB0byBhdm9pZCB1bmRl c2lyYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtLiBTZWUKKwkJ ICogY29tbWVudCBhbmQgYXNzZXJ0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYmVsb3cuCisJ CSAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKgorCQkJICogTWFrZSBo ZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMKKwkJCSAq IGVhZ2VybHkKKwkJCSAqLworCQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNi YXRjaDsKKworCQkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBpcyB1 bmd1YXJkZWQgKi8KKwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBy ZWZldGNoUG9zLT5iYXRjaCk7CisJCQlpZiAocHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJ eworCQkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShzY2FuLCBwcmVm ZXRjaEJhdGNoKTsKKworCQkJCS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdo IHNjYW5CYXRjaCAqLworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2Fu LCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRj aCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9CisJfQorCisJcHJlZmV0 Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwor CS8qCisJICogSWYgcHJlZmV0Y2hQb3Mgd2Fzbid0IGp1c3QgaW5pdGlhbGl6ZWQgdXNpbmcgc2Nh blBvcywgd2UncmUgZGlyZWN0bHkKKwkgKiBwaWNraW5nIHVwIHByZWZldGNoaW5nIHdoZXJlIHRo ZSBsYXN0IGNhbGwgaGVyZSBsZWZ0IG9mZi4gIEFzc2VydCB0aGF0CisJICogeHNfcHJlZmV0Y2hf YmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBpdGVtIHdlIHJldHVybmVkIGFzIGV4cGVjdGVkLgorCSAq CisJICogTm90ZTogd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBhIHhzX3ByZWZldGNoX2Jsb2NrIGZp ZWxkIGF0IGFsbDsgd2UgY291bGQKKwkgKiBqdXN0IHRha2UgdGhlIGxhc3QgYmxvY2sgd2UgcmV0 dXJuZWQgZnJvbSBwcmVmZXRjaFBvcyBkaXJlY3RseSBpbnN0ZWFkLgorCSAqIEJ1dCBtYWludGFp bmluZyB4c19wcmVmZXRjaF9ibG9jayBleHBsaWNpdGx5IGlzIHNsaWdodGx5IG1vcmUgcm9idXN0 LgorCSAqIEl0IGdpdmVzIHVzIGEgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IGNhbGwg aGVyZSBsZWZ0IHByZWZldGNoUG9zCisJICogaW4gYSBjb25zaXN0ZW50IHN0YXRlIChlLmcuLCB3 aGVuIHRoZSByZWFkIHN0cmVhbSBoYWQgdG8gYmUgcGF1c2VkKS4KKwkgKi8KKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCisJaWYgKCFmcm9tU2NhblBvcykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJ dGVtICpsYXN0aXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07 CisJCUJsb2NrTnVtYmVyIGxhc3RfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZs YXN0aXRlbS0+dGFibGVUaWQpOworCisJCUFzc2VydChsYXN0X2Jsb2NrID09IGhzY2FuLT54c19w cmVmZXRjaF9ibG9jayk7CisJfQorI2VuZGlmCisKKwlmb3IgKDs7KQorCXsKKwkJQmF0Y2hNYXRj aGluZ0l0ZW0gKml0ZW07CisJCUJsb2NrTnVtYmVyIHByZWZldGNoX2Jsb2NrOworCisJCS8qCisJ CSAqIFdlIG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRob3V0IGltbWVkaWF0ZWx5IHVuZ3VhcmRp bmcgdGhlIGJhdGNoLAorCQkgKiBlaXRoZXIgd2l0aGluIHRoZSBpbmRleCBBTSBvciBoZXJlICh3 aGVuIHdlIGVhZ2VybHkgbG9hZCBhbGwgb2YgdGhlCisJCSAqIGJhdGNoJ3MgdmlzaWJpbGl0eSBp bmZvcm1hdGlvbiBkdXJpbmcgYW4gaW5kZXgtb25seSBzY2FuKS4gIFRoZQorCQkgKiBpbmRleCBB TSB3b24ndCBob2xkIG9udG8gVElEIGludGVybG9jayBidWZmZXIgcGlucywga2VlcGluZyB0aGUK KwkJICogYWJzb2x1dGUgbnVtYmVyIG9mIHBpbnMgaGVsZCB0byBhIG1pbmltdW0uCisJCSAqCisJ CSAqIFRoaXMgaXMgZGVmZW5zaXZlLiAgVGhlIHJlYWQgc3RyZWFtIHRyaWVzIHRvIGJlIGNhcmVm dWwgYWJvdXQgbm90CisJCSAqIHBpbm5pbmcgdG9vIG1hbnkgYnVmZmVycywgYW5kIHRoYXQncyBo YXJkZXIgdG8gZG8gcmVsaWFibHkgaWYgdGhlcmUKKwkJICogYXJlIHZhcmlhYmxlIG51bWJlcnMg b2YgcGlucyB0YWtlbiB3aXRob3V0IHN1Y2ggY2FyZS4KKwkJICovCisJCUFzc2VydCghcHJlZmV0 Y2hCYXRjaC0+aXNHdWFyZGVkKTsKKwkJaWYgKGZyb21TY2FuUG9zKQorCQl7CisJCQkvKgorCQkJ ICogRG9uJ3QgaW5jcmVtZW50IGl0ZW0gd2hlbiBwcmVmZXRjaFBvcyB3YXMganVzdCBpbml0aWFs aXplZAorCQkJICogdXNpbmcgc2NhblBvcy4gIFdlJ2xsIHJldHVybiB0aGUgc2NhblBvcyBpdGVt J3MgaGVhcCBibG9jaworCQkJICogZGlyZWN0bHkgb24gdGhlIGZpcnN0IGNhbGwgaGVyZS4gIElu IG90aGVyIHdvcmRzLCB3ZSdsbCByZXR1cm4KKwkJCSAqIHRoZSBoZWFwIGJsb2NrIGZyb20gVElE IHBhc3NlZCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbAorCQkJICogYXQgdGhlIHBv aW50IHdoZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkg KiBmaXJzdCB0aW1lIGR1cmluZyB0aGUgc2Nhbi4gKEFzIGV4cGxhaW5lZCBhYm92ZSwgd2UgYWxz byBlbmQgdXAKKwkJCSAqIGhlcmUgZHVyaW5nIHRoZSBmaXJzdCBjYWxsIHRvIHJlYWRfc3RyZWFt X25leHRfYnVmZmVyIGZvbGxvd2luZworCQkJICogcHJlZmV0Y2hQb3MgZmFsbGluZyBiZWhpbmQg c2NhblBvcy9iZWluZyBpbnZhbGlkYXRlZCBmb3IgdXMuKQorCQkJICovCisJCQlmcm9tU2NhblBv cyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bvc19hZHZhbmNlKHhzX3Jl YWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpKQor CQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHByZWZldGNoQmF0Y2guICBU cnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJhdGNoLgorCQkJICovCisJ CQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKSkKKwkJCXsKKwkJCQkv KgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNhdXNlIGFsbCBhdmFpbGFi bGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1c2Uu CisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBwYXVzaW5nIHRo ZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9z IHdpbGwgcmVzdW1lIHRoZSByZWFkCisJCQkJICogc3RyZWFtIGxhdGVyLCB0aG91Z2ggb25seSBh ZnRlciBzY2FuUG9zIGhhcyBjb25zdW1lZCBhbGwKKwkJCQkgKiByZW1haW5pbmcgaXRlbXMgZnJv bSBzY2FuQmF0Y2ggKGF0IHdoaWNoIHBvaW50IHRoZSBjdXJyZW50CisJCQkJICogaGVhZCBiYXRj aCB3aWxsIGJlIGZyZWVkLCBtYWtpbmcgYSBzbG90IGF2YWlsYWJsZSBmb3IgcmV1c2UKKwkJCQkg KiBoZXJlIGJ5IHVzKS4KKwkJCQkgKgorCQkJCSAqIEluIHByYWN0aWNlIHdlIGhhcmRseSBldmVy IG5lZWQgdG8gZG8gdGhpcy4gIEl0IHdvdWxkIGJlCisJCQkJICogcG9zc2libGUgdG8gYXZvaWQg dGhlIG5lZWQgdG8gcGF1c2UgdGhlIHJlYWQgc3RyZWFtIGJ5CisJCQkJICogZHluYW1pY2FsbHkg YWxsb2NhdGluZyBzbG90cywgYnV0IHRoYXQgd291bGQgYWRkIGNvbXBsZXhpdHkKKwkJCQkgKiBm b3Igbm8gcmVhbCBiZW5lZml0LiAgSXQgYWxzbyBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvCisJ CQkJICogaW1wb3NlIHNvbWUgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgdGhh dAorCQkJCSAqIHByZWZldGNoUG9zIGNhbiBnZXQgYWhlYWQgb2Ygc2NhblBvcyBieSAoZXNwZWNp YWxseSBpbiB0aGUKKwkJCQkgKiBjYXNlIG9mIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIHdlIG9m dGVuIHdvbid0IGhhdmUgYW55CisJCQkJICogaGVhcCBibG9jayB0byByZXR1cm4gZnJvbSBtb3N0 IG9mIHRoZSBzY2FuJ3MgYmF0Y2hlcykuCisJCQkJICovCisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9 IHRydWU7CisKKwkJCQkvKgorCQkJCSAqIEJlZm9yZSByZXR1cm5pbmcsIGFkdmFuY2UgcHJlZmV0 Y2hQb3MgaW4gdGhlIG9wcG9zaXRlCisJCQkJICogZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCBi eSB0aGUgc2Nhbi4gIFRoaXMgdW5kb2VzIHRoZQorCQkJCSAqIGVmZmVjdHMgb2YgdGhlIG1vc3Qg cmVjZW50IGFkdmFuY2UuICBXZSdyZSBub3QgZ29pbmcgdG8KKwkJCQkgKiByZXR1cm4gYW55IGJs b2NrLCBzbyBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIGxlYXZlCisJCQkJICogcHJlZmV0 Y2hQb3MgaW4gYSBzdGF0ZSBjb25zaXN0ZW50IHdpdGggdGhhdC4KKwkJCQkgKi8KKwkJCQlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZCh4c19yZWFkX3N0cmVhbV9kaXIpKQorCQkJCXsKKwkJCQkJ QXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID09IHByZWZldGNoQmF0Y2gtPmxhc3RJdGVtICsgMSk7 CisJCQkJCXByZWZldGNoUG9zLT5pdGVtID0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW07CisJCQkJ fQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSBwcmVm ZXRjaEJhdGNoLT5maXJzdEl0ZW0gLSAxKTsKKwkJCQkJcHJlZmV0Y2hQb3MtPml0ZW0gPSBwcmVm ZXRjaEJhdGNoLT5maXJzdEl0ZW07CisJCQkJfQorCisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3Bh dXNlKHN0cmVhbSk7CisJCQl9CisKKwkJCXByZWZldGNoQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0 Y2hfbmV4dF9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCQkgIHhzX3JlYWRfc3RyZWFtX2RpciwK KwkJCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNo UG9zKTsKKwkJCWlmICghcHJlZmV0Y2hCYXRjaCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE5vIG1v cmUgYmF0Y2hlcyBpbiB0aGlzIGRpcmVjdGlvbiwgc28gYWxsIHRoZSBiYXRjaGVzIHRoYXQKKwkJ CQkgKiB0aGUgc2NhbiB3aWxsIGV2ZXIgcmVxdWlyZSBoYXZlIG5vdyBiZWVuIHJldHVybmVkCisJ CQkJICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJLyogUG9z aXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJ CQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJ IHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1 cCkKKwkJCXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoc2Nh biwgcHJlZmV0Y2hCYXRjaCk7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5 IGluZm8gZm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoaHNjYW4tPnhzX3ZtX2l0 ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3Nf dmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZl dGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9 CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdo b3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0 Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3Mt PmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49 IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0g cHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVm ZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNj YW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChz Y2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBf YmF0Y2hfZGF0YShzY2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCQkJQXNzZXJ0KGhiYXRjaC0+dmlz SW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKwkJCWlm IChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQUxM X1ZJU0lCTEUpCisJCQl7CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBhbGwtdmlzaWJsZSAt LSBkb24ndCBwcmVmZXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaXRlbSA9 ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXByZWZldGNoX2Js b2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQpOworCisJCWlm IChwcmVmZXRjaF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsKKwkJCS8q CisJCQkgKiBwcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0n cyBUSUQncyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUg c2FtZSBwcmVmZXRjaF9ibG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nlc3Npb24pCisJ CQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFwIGJsb2Nr IG51bWJlciB0byByZXR1cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNo X2Jsb2NrID0gcHJlZmV0Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9jazsKKwl9CisK KwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMKaW5kZXggNTA3MzBkNjk4Li40ZGJkY2U4ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYwpAQCAtNSwxNSArNSwyMiBAQAogICoKICAqIFRoaXMgbW9kdWxlIHBy b3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRjaC1iYXNlZCBpbmRleCBzY2Fu cywKICAqIHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4gbXVsdGlwbGUgbWF0Y2hpbmcg VElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQotICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZl ciBpcyBvd25lZCBieSB0aGUgdGFibGUgQU0uCisgKiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVm ZmVyIGlzIG93bmVkIGJ5IHRoZSB0YWJsZSBBTSwgdHlwaWNhbGx5IG1haW50YWluZWQKKyAqIGFs b25nc2lkZSBhIHJlYWQgc3RyZWFtIHVzZWQgZm9yIHByZWZldGNoaW5nIHRhYmxlIGJsb2Nrcy4K ICAqCi0gKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2Uv aW5kZXggc2NhbiBvcmRlci4KKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGlu ZGV4IGtleSBzcGFjZS9pbmRleCBzY2FuIG9yZGVyLiAgVGhpcworICogYWxsb3dzIHRoZSB0YWJs ZSBBTSB0byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRzIHJlYWQK KyAqIHN0cmVhbSBjYWxsYmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJsZSBibG9j a3MgcmVmZXJlbmNlZCBieSBpbmRleAorICogcGFnZXMgdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0 aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBNb3N0IGZ1bmN0 aW9ucyBoZXJlIGFyZSB0YWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKSwgY2FsbGVk IGJ5CiAgKiB0YWJsZSBBTXMgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBt YW5hZ2UgdGhlIGJhdGNoIHJpbmcKICAqIGJ1ZmZlcidzIGxpZmVjeWNsZSBhbmQgcG9zaXRpb25h bCBzdGF0ZSwgYW5kIGhlbHAgd2l0aCBjZXJ0YWluIGFzcGVjdHMgb2YKICAqIHJlc291cmNlIG1h bmFnZW1lbnQuICBUaGUgdGFibGUgQU0gdXNlcyBzY2FuUG9zIChhbmQgaXRzIHNjYW5CYXRjaCBi YXRjaCkKLSAqIHRvIHJldHVybiBpdGVtcyBmcm9tIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRi YXRjaC4KKyAqIHRvIHJldHVybiBpdGVtcyBmcm9tIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRi YXRjaC4gIFRhYmxlIEFNcyB0aGF0CisgKiBzdXBwb3J0IGluZGV4IEkvTyBwcmVmZXRjaGluZyB1 c2UgcHJlZmV0Y2hQb3MgKGFuZCBpdHMgcHJlZmV0Y2hCYXRjaCBiYXRjaCkKKyAqIGJ5IGltcGxl bWVudGluZyBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrIHRoYXQgY29uc3VtZXMgaXRlbXMgd2VsbCBh aGVhZCBvZgorICogc2NhblBvcy4KICAqCiAgKiBUaGVyZSBhcmUgYWxzbyBzb21lIGluZGV4IEFN IHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQgYnkgaW5kZXgKICAqIEFNcyB0aGF0 IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UsIHRvIGhlbHAgbWFuYWdlIHJlc291 cmNlcyBsaWtlCkBAIC01NSw2ICs2Miw3IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQo SW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pCiAJYm9vbAkJbWFya0JhdGNoRnJlZWQg PSBmYWxzZTsKIAogCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOworCWJhdGNo cmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAliYXRjaHJpbmdidWYtPm1hcmtQ b3MudmFsaWQgPSBmYWxzZTsKIAogCS8qIEVuc3VyZSBiYXRjaF9mcmVlIHdvbid0IHNraXAgdGhl IG9sZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AgYmVsb3cgKi8KQEAgLTE3MCw3ICsxNzgsMTIgQEAg dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0 aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICogV2UganVzdCBkaXNjYXJk IGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAot ICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNj YW5CYXRjaC4KKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3Mg Y3VycmVudCBzY2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJlZmV0Y2hQb3Mu ICBUaGUgcmVhZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUgYXJlCisgKiBy ZXNldCBieSB0aGUgY2FsbGVyICh3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uIGFzIGl0IHJlc2V0 cyB0aGF0IHN0YXRlKS4KKyAqIFRoaXMgYXBwcm9hY2gga2VlcHMgdGhpbmdzIHNpbXBsZSBmb3Ig dGFibGUgQU1zOiBtb3N0IGNvZGUgdGhhdCBkZWFscyB3aXRoCisgKiBiYXRjaGVzIGlzIHRoZXJl YnkgYWJsZSB0byBhc3N1bWUgdGhhdCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2NhbiBkaXJlY3Rp b24KKyAqIG5ldmVyIGNoYW5nZXMgaXMgdGhlIG9ubHkgY2FzZS4KICAqLwogdm9pZAogdGFibGVh bV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCkBAIC0xODUs NiArMTk4LDE0IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOwogCUFzc2VydChtYXJrUG9z LT52YWxpZCk7CiAKKwkvKgorCSAqIFJlc3RvcmluZyBhIG1hcmsgYWx3YXlzIHJlcXVpcmVzIHN0 b3BwaW5nIHByZWZldGNoaW5nLiAgVGhpcyBpcyBzaW1pbGFyCisJICogdG8gdGhlIGhhbmRsaW5n IHRhYmxlIEFNcyBpbXBsZW1lbnQgdG8gZGVhbCB3aXRoIGEgdHVwbGUtbGV2ZWwgY2hhbmdlCisJ ICogaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uICBUaGUgcmVhZCBzdHJlYW0gbXVzdCBoYXZlIGFs cmVhZHkgYmVlbiByZXNldAorCSAqIGJ5IHRoZSBjYWxsZXIgKHZpYSB0YWJsZV9pbmRleF9mZXRj aF9yZXNldCkuCisJICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNl OworCiAJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCiAJewogCQkvKiBtYXJrQmF0Y2ggaXMg YWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLwpAQCAtMjQ5 LDYgKzI3MCwxMyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2Nh bkRlc2Mgc2NhbikKICAqIHRvIGRldGVybWluZSB3aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRo ZSBuZXcgc2NhbiBkaXJlY3Rpb24uICBUaGlzCiAgKiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFy bHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yIHdoYXQKICAqIG91Z2h0 IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKgorICogQ2FsbGVyIG11c3Qg aGF2ZSByZXNldCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBU aGF0CisgKiBuZWVkcyB0byBoYXBwZW4gYXMgc29vbiBhcyB0aGUgc2NhbiByZXF1ZXN0cyBhIHR1 cGxlIGluIHdoYXRldmVyIHNjYW4KKyAqIGRpcmVjdGlvbiBpcyBvcHBvc2l0ZS10by1jdXJyZW50 LiAgV2Ugb25seSBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlCisgKiBzY2FuIGJhY2tzIHVw IGJ5IGVub3VnaCBpdGVtcyB0byBjcm9zcyBhIGJhdGNoIGJvdW5kYXJ5ICh3aGVuIHRoZSBzY2Fu CisgKiByZXN1bWVzIHNjYW5uaW5nIGluIGl0cyBvcmlnaW5hbCBkaXJlY3Rpb24vZW5kcyBiZWZv cmUgY3Jvc3NpbmcgYSBib3VuZGFyeSwKKyAqIHRoZXJlIGlzbid0IGFueSBuZWVkIHRvIGNhbGwg aGVyZSkuCiAgKi8KIHZvaWQKIHRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4 U2NhbkRlc2Mgc2NhbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nv c3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDFj NTc1ZTU2Zi4uNmZjYjgxNWY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMK QEAgLTE0Niw2ICsxNDYsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMjsKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNj YW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVlOworYm9vbAkJZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29sCQllbmFibGVfYml0bWFwc2NhbiA9 IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfc29ydCA9 IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IGEz MTVjNGFiOC4uNDhlYjFiNmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdApAQCAtOTMyLDYgKzkzMiwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAog Cit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywg Y29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcs CisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFu ZCBpbmRleC1vbmx5IHNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlh YmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUn LAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29u dGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAg IHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXph dGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDZkMDMzNzg1My4uNTc3NTU1NTE4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00 MjAsNiArNDIwLDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2lu ZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNj YW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUg PSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGQzZmVhNzM4Yy4uMTdk YWVhZWQ0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NzEyLDYgKzU3MTIsMjIgQEAgQU5ZIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxl IGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhzY2FuLXByZWZldGNoIiB4cmVmbGFi ZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQor ICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHByZWZldGNoaW5nIGZvciBp bmRleCBzY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4KKyAgICAgICAgcGxhbiB0eXBlcy4gIFByZWZl dGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlYWRpbmcgdGFibGUgQU0KKyAgICAg ICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVkZWQgZHVyaW5nIGluZGV4IHNjYW5z LiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwiIHhyZWZsYWJlbD0iZW5hYmxl X21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9tYXRlcmlhbDwvdmFybmFt ZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmlu ZGV4IGFjMjllZDNjNC4uMTNlMGY3NDQ5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTgxMCw5ICs4MTAsMTIg QEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8cGFyYT4KICAgIFRoZSA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0 bwogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hp bmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCi0gICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1l LiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQotICAgc2lu Z2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGlu dG8gd2hpY2ggdGFibGUKLSAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1 cmUuCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBUaGlzIGVuYWJsZXMgdGhlIHRhYmxl IGFjY2VzcyBtZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJu cyBhbmQgcGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBCeSByZXR1cm5pbmcgYWxsIG1hdGNo aW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLAorICAg dGhlIHRhYmxlIEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0aGUgaW5kZXggYW5kIGlkZW50aWZ5 IHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQsIGFsbG93aW5nIHByZWZldGNo aW5nIG9mIHRhYmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3JkZXJlZCBpbmRleCBzY2Fucy4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtOTM2LDcgKzkzOSw5IEBAIGFtdW5ndWFyZGJhdGNoIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAgICAgdG8gZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUg cG9pbnQgKGF0IGEgbWluaW11bSB3aGVuZXZlcgogICAgIDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1 bmN0aW9uPiBpcyBjYWxsZWQsIGFuZCB0eXBpY2FsbHkgd2hlbgogICAgIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2VlcCB0aGUgbnVtYmVy IG9mCi0gICAgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21hbGwuCisgICAgcmV0YWluZWQgcGlu cyBmaXhlZCBhbmQgc21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncyBidWZm ZXIKKyAgICBwaW4gbGltaXQgKHdoaWNoIGlzIHNoYXJlZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJl YWQgc3RyZWFtIGZvciBpbmRleCBzY2FuCisgICAgcHJlZmV0Y2hpbmcpLgogICAgPC9wYXJhPgog ICA8L25vdGU+CiAKQEAgLTE0MjQsNiArMTQyOSw2MCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENv bXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBvciB2 aWNlIHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8g b25lIEFQSSBvciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4KIAorICA8c2VjdDIgaWQ9ImluZGV4LXNj YW5uaW5nLWJhdGNoZXMiPgorICAgPHRpdGxlPlRhYmxlIEFNIENvbnNpZGVyYXRpb25zIGZvciBC YXRjaCBTY2FubmluZzwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgc2VjdGlvbiBpcyBw cmltYXJpbHkgcmVsZXZhbnQgdG8gPGxpbmsgbGlua2VuZD0idGFibGVhbSI+dGFibGUgYWNjZXNz CisgICAgIG1ldGhvZDwvbGluaz4gYXV0aG9ycy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+Cisg ICAgV2hlbiBhbiBpbmRleCBzY2FuIHVzZXMgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlLCB0aGUKKyAgICB0YWJsZSBBTSBoYXMgc29sZSBjb250cm9sIG92ZXIg dGhlIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+J3MKKyAgICA8c3RydWN0 ZmllbGQ+YmF0Y2hyaW5nYnVmPC9zdHJ1Y3RmaWVsZD4sIGluY2x1ZGluZyBjcmVhdGluZywgcmVz ZXR0aW5nLAorICAgIGFuZCBlbmRpbmcgdGhlIGJhdGNoIHJpbmcgYnVmZmVyIHdpdGhpbiB0aGUg YXBwcm9wcmlhdGUgdGFibGUgQU0KKyAgICBjYWxsYmFja3MsIGFuZCBtYW5hZ2luZyBwb3NpdGlv bmFsIHN0YXRlIGFuZCBUSUQgcmVjeWNsaW5nIGludGVybG9ja2luZworICAgICh0aGF0IGlzLCBk ZXRlcm1pbmluZyB3aGVuIHRvIHVuZ3VhcmQgZWFjaCBiYXRjaCwgd2hpY2ggd2lsbCB0eXBpY2Fs bHkKKyAgICByZWxlYXNlIGFuIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhc3NvY2lhdGVkIHdpdGgg dGhlIGJhdGNoKS4gIEluZGV4IGFjY2VzcworICAgIG1ldGhvZHMgc2hvdWxkIG5vdCBhY2Nlc3Mg b3IgbWFuaXB1bGF0ZSB0aGVzZSBmaWVsZHMuICBTZWUgdGhlCisgICAgPGZpbGVuYW1lPnNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYzwvZmlsZW5hbWU+CisgICAgaW1w bGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlIGV4YW1wbGUuCisgICA8L3BhcmE+CisKKyAgIDxw YXJhPgorICAgIFRoZSA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHdp dGhpbgorICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiB0cmFja3Mg d2hpY2ggYmF0Y2ggYW5kIGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3aWxsIGJlIHJldHVy bmVkIG5leHQgdG8gdGhlIGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3QgYWR2YW5jZQorICAg IDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5l ZCBieQorICAgIDxmdW5jdGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPiwg YW5kIG11c3QgYWxzbyBtb2RpZnkgdGhpcworICAgIGZpZWxkIHdoZW4gcmVzdG9yaW5nIGEgc2F2 ZWQgbWFyay4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5w cmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcyB0aGUgcG9zaXRpb24gdXNlZAor ICAgIGZvciBJL08gcHJlZmV0Y2hpbmcuICBJdCBpcyBnZW5lcmFsbHkgYWR2YW5jZWQgYnkgaW5p dGlhbGl6aW5nIGl0IGZyb20KKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+ IHdpdGhpbiBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrLCBhbGxvd2luZworICAgIHRoZSB0YWJsZSBB TSB0byBwcmVmZXRjaCB0YWJsZSBibG9ja3MgcG9pbnRlZCB0byBieSBpdGVtcyB0aGF0IGFyZSB3 ZWxsCisgICAgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIEluaXRpYWxseQor ICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IHN0YXJ0cyBhdAorICAg IDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4sIGJ1dCBhcyB0aGUgcmVhZCBzdHJl YW0gcmFtcHMgdXAgaXQgY2FuCisgICAgZ2V0IGZhciBhaGVhZCAmbWRhc2g7IHNwYW5uaW5nIG11 bHRpcGxlIGluZGV4IHBhZ2VzIGlmIG5lY2Vzc2FyeSB0bworICAgIG1haW50YWluIGFuIG9wdGlt YWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIGZvciB0YWJsZSBibG9jayByZWFkcy4gIEEgbWFqb3IK KyAgICBnb2FsIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFj ZSBpcyB0byBhbGxvdyB0aGUKKyAgICB0YWJsZSBBTSB0byBwcmVmZXRjaCB3aXRob3V0IGJlaW5n IGxpbWl0ZWQgdG8gaXRlbXMgZnJvbSB0aGUgY3VycmVudAorICAgIDxzdHJ1Y3RmaWVsZD5zY2Fu UG9zPC9zdHJ1Y3RmaWVsZD4gYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2UuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIEZvciBkZXRhaWxzIG9uIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9j ayBkdXJpbmcgYmF0Y2ggc2NhbnMsIGluY2x1ZGluZworICAgIHRoZSA8c3RydWN0ZmllbGQ+YmF0 Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gcG9saWN5IGFuZCB0aGUKKyAgICA8ZnVu Y3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjaywgc2VlCisgICAgPHhyZWYg bGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAg PC9zZWN0MT4KIAogIDxzZWN0MSBpZD0iaW5kZXgtbG9ja2luZyI+CkBAIC0xNTI0LDcgKzE1ODMs MjIgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1p bHksIE9pZCBvcGNpbnR5cGUpOwogICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNv cnJlc3BvbmRpbmcgaW5kZXggZW50cnkuICBUaGlzIGlzCiAgICBleHBlbnNpdmUgZm9yIGEgbnVt YmVyIG9mIHJlYXNvbnMuICBUaGUKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlLCBieSBjb250cmFzdCwgd2FzIGRlc2lnbmVkIHRvCi0gICBhbGxvdyBzY2FucyB0 byBiZSA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90ZT4uCisgICBhbGxvdyBzY2FucyB0byBiZSA8 cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90ZT46IGJ5IGNvbGxlY3RpbmcgYmF0Y2hlcyBvZgorICAg VElEcyBmcm9tIG11bHRpcGxlIGluZGV4IHBhZ2VzLCB0aGUgdGFibGUgQU0gY2FuIHByZWZldGNo IHRoZSBjb3JyZXNwb25kaW5nCisgICB0YWJsZSBibG9ja3Mgd2VsbCBhaGVhZCBvZiB0aGUgY3Vy cmVudCBzY2FuIHBvc2l0aW9uICh1c2luZyBhc3luY2hyb25vdXMKKyAgIEkvTyB3aGVuIGF2YWls YWJsZSksIGFsbG93aW5nIGEgbW9yZSBlZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4gIE5v dAorICAgYWxsIHNjYW5zIGVuZCB1cCBiZWluZyBhc3luY2hyb25vdXMgaW4gcHJhY3RpY2UsIGJ1 dCB0aGUgaW50ZXJmYWNlIGlzCisgICBkZXNpZ25lZCB0byBhbGxvdyBpdC4gIFBlciB0aGUgYWJv dmUgYW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cworICAgYXBwcm9hY2ggZm9y IG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBp cworICAgd29ya2FibGUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25h cHNob3QuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEJlY2F1c2UgdGhlIHRhYmxlIEFNIHJl YWRzIG11bHRpcGxlIGluZGV4IGxlYWYgcGFnZXMgYWhlYWQgdmlhCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IHRvIGZhY2lsaXRhdGUgdGhpcyBwcmVmZXRjaGluZywgaXQgY2Fu bm90CisgICBwcmFjdGljYWxseSBob2xkIHBpbnMgb24gYWxsIHRob3NlIHBhZ2VzIHNpbXVsdGFu ZW91c2x5LiAgVGhlcmVmb3JlLCBJL08KKyAgIHByZWZldGNoaW5nIHdpdGggPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4KKyAgIE1WQ0MtY29t cGxpYW50IHNuYXBzaG90IGlzIGluIHVzZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNn bWwKaW5kZXggOWNjZjViNzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90 YWJsZWFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEy OSwxNCBAQCBteV90YWJsZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwp LCB0aGUgYmxvY2sgbnVtYmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgog CisgPHBhcmE+CisgIFRhYmxlIGFjY2VzcyBtZXRob2RzIGNhbiBzdXBwb3J0IG9yZGVyZWQgaW5k ZXggc2NhbnMgdXNpbmcgdGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlLiBTZWUgYWxzbworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVz Ii8+IGZvciBkZXRhaWxzIG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBpbmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBz Y2FuJ3MgcG9zaXRpb24uCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHks IGFuIEFNIGNhbiB1c2UgcG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+ V0FMPC9hY3JvbnltPjwvbGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBA QCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAn ZW5hYmxlJSc7CiAgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVf aW5kZXhvbmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAg ICAgICB8IG9uCisgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVf bWF0ZXJpYWwgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3 ICsxODEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5h bWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24K ICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAg ICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUg YWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0 aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rv cnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v22-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8n9 RnJvbSA0OGUwNjUxMGVhMzY1MTk5NDJlZGQ2NjNmMDY2ZmE2ODZlNmRmMGM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwNy8xNV0g aGVhcGFtOiBPcHRpbWl6ZSBwaW4gdHJhbnNmZXJzIGR1cmluZyBpbmRleCBzY2Fucy4KCkFkZCBh biB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4RmV0Y2hIZWFwRGF0YSB0aGF0IHRyYWNrcyB3 aGV0aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24gaXRzIGhlYXAgYmxvY2sg d2l0aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUgY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpzbG90ICh2aWEgRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKcGlu IGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVy IGNhbGxzLgpUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fu cyBiZWNhdXNlIGFsbC12aXNpYmxlCml0ZW1zIGNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBi cmVhayBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5CmJldHdlZW4gdGhlIHNjYW4gYW5kIHRo ZSByZWFkIHN0cmVhbSAoYmVzaWRlcywgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMKY29kZSBwYXRo IGNhbiBvbmx5IG1hdHRlciB3aGVuIG1hbnkgaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZCwgd2hp Y2ggaXMKaG9wZWZ1bGx5IHJhcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLgoKQWxzbyBhZGQg YW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgdG8gdGhlIGJsb2NrLXN3aXRjaCBwYXRoIGluCmhl YXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsIHRvIHJlbGVhc2UgdGhlIHBpbiB0cmFuc2ZlcnJl ZCB0byB0aGUgc2xvdApvbiB0aGUgcHJldmlvdXMgY2FsbCAoanVzdCBiZWZvcmUgY2FsbGluZyBS ZWxlYXNlQnVmZmVyIGFzIHBhcnQgb2YKbW92aW5nIG9uIHRvIHRoZSBzY2FuJ3MgbmV4dCBibG9j aykuICBUaGlzIGZpeGVzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbQp3aGVyZSB0aGUgY29kZSBwYXRo IGluIHF1ZXN0aW9uIHRyaWdnZXJzIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdwpjYWxscyBt b3JlIG9mdGVuIHRoYW4gb25lIHdvdWxkIGhvcGUuICBUaGUgdW5kZXJseWluZyBpc3N1ZSBoYXMg YmVlbgp0aWVkIHRvIHRoZSBwaW4gaW4gdGhlIHNsb3QgYmVpbmcgaGVsZCwgZXZlbiBpZiB3ZSBk ZWNpZGUgdG8gcmVsZWFzZSB0aGUKYnVmZmVyIGFuZCBtb3ZlIG9uOiBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUgd2lsbCBmaXJzdCBmYWlsIHRvIGhpdCB0aGUKYmFja2VuZC1sb2NhbCBjYWNoZSBm b3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4gKGJlY2F1c2Ugd2UganVzdApwaW5uZWQgYW5k IGxvY2tlZCB0aGUgbmV3IGJ1ZmZlciksIGNhdXNpbmcgYSBjYWNoZSBtaXNzIGluc2lkZQpJbmNy QnVmZmVyUmVmQ291bnQuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KU3Vn Z2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5 OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vQ0FIMi1Xej1ENExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZG VHR6X3Z3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgIHwgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jIHwgNzMgKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA3NCBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1ZDMzMTVl YzcuLjE4MDUzNzYwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTMxLDYgKzEzMSw5IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCS8qIEZvciB2aXNpYmlsaXR5IG1hcCBjaGVj a3MgKGluZGV4LW9ubHkgc2NhbnMgYW5kIG9uLWFjY2VzcyBwcnVuaW5nKSAqLwogCUJ1ZmZlcgkJ eHNfdm1idWZmZXI7CS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0 ZW1zOwkvKiAjIGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLworCisJLyog UGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8KKwlib29sCQl4 c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNo PyAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggNDE3ZWE3NjYyLi5iNDk0MDU0ZWIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTkwLDYgKzkwLDkgQEAg aGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdz KQogCUFzc2VydChoc2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlcik7CiAJaHNjYW4t PnhzX3ZtX2l0ZW1zID0gMTsKIAorCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGltaXphdGlvbiBzdGF0 ZSAqLworCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKKwogCS8qIFJlc29sdmUgd2hp Y2ggeHNfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICov CiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp CiAJewpAQCAtNDgxLDYgKzQ4NCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChS ZWxhdGlvbiByZWwsCiAJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZv ciBuZXh0IHRpbWUgKi8KIAkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIodGlkKTsKIAorCQkvKgorCQkgKiBEcm9wIHRoZSB4c19ibGsgcGluIGluZGVwZW5kZW50bHkg aGVsZCBvbiBieSBzbG90IChpZiBhbnkpIG5vdywKKwkJICogYmVmb3JlIGNhbGxpbmcgUmVsZWFz ZUJ1ZmZlci4gIFRoaXMgYXZvaWRzIGV4cGVuc2l2ZSBjYWxscyB0bworCQkgKiBHZXRQcml2YXRl UmVmQ291bnRFbnRyeVNsb3cgY2F1c2VkIGJ5IEV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZQorCQkg KiBmYWlsaW5nIHRvIGhpdCB0aGUgYmFja2VuZCdzIGNhY2hlIGZvciB0aGUgcmVsZWFzZSBvZiB0 aGUgb2xkIHBpbi4KKwkJICovCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCiAJCWlmIChCdWZm ZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2Ni dWYpOwogCkBAIC01MTgsNyArNTI5LDMzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBs KFJlbGF0aW9uIHJlbCwKIAkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNu YXBzaG90KTsKIAogCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7 Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwg aHNjYW4tPnhzX2NidWYpOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgVElEIG9u IHRoZSBjdXJyZW50IGhlYXAgYmxvY2sgd2l0aGluIHRoZSBiYXRjaCwKKwkJICogdHJhbnNmZXIg b3VyIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgcmF0aGVyIHRoYW4gaGF2aW5nIHRoZSBzbG90CisJ CSAqIGluY3JlbWVudCB0aGUgcGluIGNvdW50LiAgVGhpcyBzYXZlcyBhIHBhaXIgb2YgSW5jckJ1 ZmZlclJlZkNvdW50CisJCSAqIGFuZCBSZWxlYXNlQnVmZmVyIGNhbGxzLCBzaW5jZSB0aGUgY2Fs bGVyIHdvdWxkIGp1c3QgcmVsZWFzZSBpdHMKKwkJICogcGluIG9uIHhzX2NidWYgd2hlbiBzd2l0 Y2hpbmcgdG8gdGhlIG5leHQgYmxvY2sgYW55d2F5LgorCQkgKgorCQkgKiBXZSBjYW4gb25seSBk byB0aGlzIHdoZW4gaGVhcF9jb250aW51ZSBpcyBmYWxzZSwgc2luY2Ugb3RoZXJ3aXNlCisJCSAq IHRoZSBjYWxsZXIgd2lsbCBuZWVkIHhzX2NidWYgdG8gcmVtYWluIHZhbGlkIGZvciB0aGUgbmV4 dCBjYWxsLgorCQkgKi8KKwkJaWYgKGhzY2FuLT54c19sYXN0aW5ibG9jayAmJiAhKmhlYXBfY29u dGludWUpCisJCXsKKwkJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJh c2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCQkgICBoc2Nhbi0+eHNfY2J1Zik7CisJCQloc2Nh bi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJs b2NrTnVtYmVyOworCisJCQkvKgorCQkJICogTm90ZTogdGhlIHBpbiBub3cgb3duZWQgYnkgdGhl IHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQKKwkJCSAqIG9uIHRoZSBuZXh0IGNhbGwg aGVyZSwgdmlhIGFuIGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxlLiAgVGhpcworCQkJICogYXZvaWRz IGNodXJuIGluIHRoZSBiYWNrZW5kJ3MgcHJpdmF0ZSByZWZjb3VudCBjYWNoZS4KKwkJCSAqLwor CQl9CisJCWVsc2UKKwkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVw ZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCWVsc2UKIAl7CkBA IC04MzEsMTAgKzg2OCw0MiBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAogCWlmIChhbGxfdmlz aWJsZSA9PSBOVUxMKQogCXsKKwkJaW50CQkJbmV4dEl0ZW07CisJCWJvb2wJCWhhc05leHQ7CisK IAkJLyoKIAkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICoKKwkJICogRGV0ZXJtaW5lIGlmIHRo ZSBuZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gaXMgb24gYQorCQkgKiBk aWZmZXJlbnQgaGVhcCBibG9jay4gIFdoZW4gaXQgaXMsIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZV9pbXBsCisJCSAqIGNhbiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCBpbnN0 ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKKwkJICogcGluIGNvdW50LCBzYXZpbmcgYSBwYWlyIG9m IEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVyIGNhbGxzLgorCQkgKgorCQkgKiBOb3Rl OiBXZSBjYW5ub3QgZG8gdGhpcyBmb3IgaW5kZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12aXNp YmxlCisJCSAqIGl0ZW1zIGFyZSBza2lwcGVkIGJ5IGJvdGggdGhlIHNjYW4gYW5kIHRoZSByZWFk IHN0cmVhbSBjYWxsYmFjay4gSXQKKwkJICogZG9lc24ndCBzZWVtIHdvcnRoIHRoZSB0cm91Ymxl IG9mIHJlYXNvbmluZyBhYm91dCB0aGVzZSBpc3N1ZXMsCisJCSAqIHNpbmNlIHRoZSBvcHRpbWl6 YXRpb24gb25seSBoZWxwcyB3aGVuIGhlYXAgZmV0Y2hlcyBhcmUgcmVxdWlyZWQuCisJCSAqCisJ CSAqIE5vdGU6IFdlIGRlbGliZXJhdGVseSBkb24ndCBjb25zaWRlciB0aGUgYmF0Y2ggYWZ0ZXIg c2NhbkJhdGNoLAorCQkgKiBiZWNhdXNlIGRvaW5nIHNvIHdvdWxkIGFkZCBjb21wbGV4aXR5IGZv ciBsaXR0bGUgYmVuZWZpdC4gIEl0J3MKKwkJICogb2theSBpZiB4c19sYXN0aW5ibG9jayBpcyBz cHVyaW91c2x5IHNldCB0byBmYWxzZS4KIAkJICovCiAJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9p dHVwKTsKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJ bmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtICsgMTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0g c2NhbkJhdGNoLT5sYXN0SXRlbSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNj YW5Qb3MtPml0ZW0gLSAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZp cnN0SXRlbSk7CisJCX0KKworCQloc2Nhbi0+eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJ CQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50 YWJsZVRpZCkgIT0KKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0 aWQpOworCiAJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIAl9CiAKQEAgLTg0Myw3ICs5MTIs NyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkgKgogCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdo aWNoIGNhbGxlciBhbHNvIG5lZWRzLgogCSAqLwotCUFzc2VydChzY2FuLT54c193YW50X2l0dXAp OworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAgJiYgIWhzY2FuLT54c19sYXN0aW5ibG9jayk7 CiAJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsK IAkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsK IAotLSAKMi41My4wCgo= --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0004-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Disposition: attachment; filename="v22-0004-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8s12 RnJvbSBjZTNiZmI1MTYwNmQ0MjAyYmVhYjg2ZWYyN2E4ZWI3YTg1MWU5ODU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwNC8xNV0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YS4KCkFkZCBhbiBl eHBsaWNpdCBCbG9ja051bWJlciBmaWVsZCAoeHNfYmxrKSB0byBJbmRleEZldGNoSGVhcERhdGEg dGhhdAp0cmFja3Mgd2hpY2ggaGVhcCBibG9jayBpcyBjdXJyZW50bHkgcGlubmVkIGluIHhzX2Ni dWYuCgpoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUgbm93IHVzZXMgeHNfYmxrIHRvIGRldGVybWlu ZSB3aGVuIGJ1ZmZlcgpzd2l0Y2hpbmcgaXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlIHByZXZpb3Vz IGFwcHJvYWNoIHRoYXQgY29tcGFyZWQKYnVmZmVyIGlkZW50aXRpZXMgdmlhIFJlbGVhc2VBbmRS ZWFkQnVmZmVyIG9uIGV2ZXJ5IG5vbi1IT1QtY2hhaW4gY2FsbC4KClRoaXMgaXMgcHJlcGFyYXRv cnkgd29yayBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXgKcHJlZmV0 Y2hpbmcgdXNpbmcgYSByZWFkIHN0cmVhbS4gIERlbGVnYXRpbmcgdGhlIHJlbGVhc2Ugb2YgYSBj dXJyZW50bHkKcGlubmVkIGJ1ZmZlciB0byBSZWxlYXNlQW5kUmVhZEJ1ZmZlciB3b24ndCB3b3Jr IGFueW1vcmUgLS0gYXQgbGVhc3Qgbm90CndoZW4gdGhlIG5leHQgYnVmZmVyIHRoYXQgdGhlIHNj YW4gbmVlZHMgdG8gcGluIGlzIG9uZSByZXR1cm5lZCBieQpyZWFkX3N0cmVhbV9uZXh0X2J1ZmZl ciAobm90IGEgYnVmZmVyIHJldHVybmVkIGJ5IFJlYWRCdWZmZXIpLgoKQXV0aG9yOiBQZXRlciBH ZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1nPUpU U3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29tCi0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwgIDUgKystLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMzUgKysrKysrKysr KysrKystLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggOTUwYzQ0ZWMyLi5hNTNkZjg1NjEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKQEAgLTEyMiwxMCArMTIyLDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5kZXBlbmRl bnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJLyoKLQkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4sIGlmIGFueS4gTkI6IGlmIHhzX2NidWYgaXMgbm90Ci0JICogSW52YWxpZEJ1 ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlci4KKwkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwgaWYgYW55LiAgTkI6IGlmCisJICog eHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdlIGhvbGQgYSBwaW4gaW4geHNfY2J1 Zi4KIAkgKi8KIAlCdWZmZXIJCXhzX2NidWY7CisJQmxvY2tOdW1iZXIgeHNfYmxrOwogCiAJLyog Rm9yIHZpc2liaWxpdHkgbWFwIGNoZWNrcyAoaW5kZXgtb25seSBzY2FucyBhbmQgb24tYWNjZXNz IHBydW5pbmcpICovCiAJQnVmZmVyCQl4c192bWJ1ZmZlcjsJLyogdmlzaWJpbGl0eSBtYXAgYnVm ZmVyICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhz Y2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXgg M2QyMDVkM2EwLi5mZmZjODkzNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aW5kZXhzY2FuLmMKQEAgLTU2LDYgKzU2LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKElu ZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCiAJaHNjYW4tPnhzX2Jhc2UuZmxhZ3Mg PSBmbGFnczsKIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJaHNjYW4tPnhzX2Js ayA9IEludmFsaWRCbG9ja051bWJlcjsKIAloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVm ZmVyOwogCiAJLyogUmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8g dXNlIGZvciB0aGlzIHNjYW4gKi8KQEAgLTc2LDYgKzc3LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNo X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhz X2NidWYpOwogCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19i bGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJfQogCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX3ZtYnVmZmVyKSkKQEAgLTMzMiwyMyArMzM0LDMwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZV9pbXBsKFJlbGF0aW9uIHJlbCwKIAogCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xv dCkpOwogCi0JLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2Un cmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlpZiAoISpoZWFwX2NvbnRpbnVlKQorCS8qIFdlIGNh biBza2lwIHRoZSBidWZmZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIG9uIHRoZSBzYW1lIHBh Z2UuICovCisJaWYgKGhzY2FuLT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0 aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUg aXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CisJCUFz c2VydCghKmhlYXBfY29udGludWUpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJl YWRCdWZmZXIoaHNjYW4tPnhzX2NidWYsIHJlbCwKLQkJCQkJCQkJCQkJICBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCkpOworCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51 bWJlciBmb3IgbmV4dCB0aW1lICovCisJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCk7CisKKwkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQor CQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisKKwkJaHNjYW4tPnhzX2NidWYgPSBS ZWFkQnVmZmVyKHJlbCwgaHNjYW4tPnhzX2Jsayk7CiAKIAkJLyoKLQkJICogUHJ1bmUgcGFnZSwg YnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9uIHRoaXMgcGFnZQorCQkgKiBQcnVuZSBw YWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQogCQkgKi8KLQkJaWYgKHBy ZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQotCQkJaGVhcF9wYWdlX3BydW5lX29wdChyZWwsIGhz Y2FuLT54c19jYnVmLCAmaHNjYW4tPnhzX3ZtYnVmZmVyLAotCQkJCQkJCQloc2Nhbi0+eHNfYmFz ZS5mbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05MWSk7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQo cmVsLCBoc2Nhbi0+eHNfY2J1ZiwKKwkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVmZmVyLAorCQkJCQkJ CWhzY2FuLT54c19iYXNlLmZsYWdzICYgU09fSElOVF9SRUxfUkVBRF9PTkxZKTsKIAl9CiAKKwlB c3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhzY2FuLT54c19i bGspOworCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKSk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBl eGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJf TE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRp ZCwKQEAgLTQ1MSwxMSArNDYwLDExIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJICovCiAJCQkJCWlm ICh1bmxpa2VseShzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCiAJCQkJCXsKLQkJ CQkJCUJsb2NrTnVtYmVyIGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJ CQkJCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KSk7CiAKLQkJCQkJCWlmIChibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2NrKQorCQkJCQkJaWYgKGhz Y2FuLT54c19ibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2NrKQogCQkJCQkJewotCQkJCQkJCWxhc3Rf dmlzaXRlZF9ibG9jayA9IGJsazsKKwkJCQkJCQlsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBoc2Nhbi0+ eHNfYmxrOwogCQkJCQkJCWlmICgrK25fdmlzaXRlZF9wYWdlcyA+IHNjYW4tPnhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQpCiAJCQkJCQkJCXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAqLwogCQkJCQkJ fQotLSAKMi41My4wCgo= --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0005-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Disposition: attachment; filename="v22-0005-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8r11 RnJvbSAyNGMwMWZhY2M0Y2NmYmJkNDA5NjA2NjkwZWI5NzY4YzI3OWMwZGFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjYgTWFyIDIwMjYgMTg6NDU6MjcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwNS8xNV0g aGVhcGFtOiBLZWVwIGJ1ZmZlciBwaW5zIGFjcm9zcyBpbmRleCByZXNjYW5zLgoKQXZvaWQgZHJv cHBpbmcgdGhlIGhlYXAgcGFnZSBwaW4gKHhzX2NidWYpIGFuZCB2aXNpYmlsaXR5IG1hcCBwaW4K KHhzX3ZtYnVmZmVyKSBkdXJpbmcgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LiAgUmV0YWluaW5n IHRoZXNlIHBpbnMKc2F2ZXMgY3ljbGVzIGR1cmluZyB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucyBh bmQgbWVyZ2Ugam9pbnMgdGhhdApmcmVxdWVudGx5IHJlc3RvcmUgYSBzYXZlZCBtYXJrLCBzaW5j ZSB0aGUgbmV4dCB0dXBsZSBmZXRjaGVkIGFmdGVyIGEKcmVzY2FuIG9mdGVuIGZhbGxzIG9uIHRo ZSBzYW1lIGhlYXAgcGFnZS4gIEl0IGNhbiBhbHNvIGF2b2lkIHJlcGVhdGVkCnBpbm5pbmcgYW5k IHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgd2hlbiByZXNjYW5zIGhhcHBlbiB0byByZXZp c2l0CnRoZSBzYW1lIHBhZ2UuCgpOb3RlIHRoYXQgbm90IGRyb3BwaW5nIHhzX3ZtYnVmZmVyIG9u IGEgcmVzY2FuIGlzbid0IGEgbmV3IGJlaGF2aW9yCihpdCdzIGFsd2F5cyB3b3JrZWQgdGhpcyB3 YXkpLiAgUmVjZW50IGNvbW1pdCBYWFgsIHdoaWNoIGFkZGVkIGEgbmV3CnNsb3QtYmFzZWQgaW50 ZXJmYWNlLCBjaGFuZ2VkIHRoYXQgYmVoYXZpb3Igd2hlbiBpdCBtb3ZlZCBWTSBwaW4KbWFuYWdl bWVudCBvdXQgb2YgdGhlIGNvcmUgZXhlY3V0b3IuICBUaGlzIGNvbW1pdCByZXN0b3JlcyB0aGF0 IGJlaGF2aW9yCihhbmQgaGFzIGhlYXBhbSB0cmVhdCBoZWFwIHBhZ2UgcGlucyBpbiB0aGUgc2Ft ZSB3YXksIHdoaWNoIF9pc18gYSBuZXcKYmVoYXZpb3IpLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVw Y29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlIHRvIGVu YWJsZSBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgSS9PIHByZWZldGNoaW5nLgoKQXV0aG9yOiBQZXRl ciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRy ZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1n PUpUU3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjkgKysr KysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAg ICAgICAgIHwgIDggKysrLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDE5 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4u YwppbmRleCBmZmZjODkzNjYuLmQ3NjNhMzM5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtNzEsMjAgKzcxLDEzIEBAIGhlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIHZvaWQKIGhlYXBhbV9p bmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0JSW5kZXhGZXRjaEhlYXBE YXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwot Ci0JaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQotCXsKLQkJUmVsZWFzZUJ1ZmZl cihoc2Nhbi0+eHNfY2J1Zik7Ci0JCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQkJ aHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKLQl9Ci0KLQlpZiAoQnVmZmVySXNW YWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNf dm1idWZmZXIpOwotCQloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KKwkv KgorCSAqIFJlc2V0cyBhcmUgYSBuby1vcC4KKwkgKgorCSAqIERlbGliZXJhdGVseSBhdm9pZCBk cm9wcGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgorCSAqIFRo aXMgc2F2ZXMgY3ljbGVzIGR1cmluZyBjZXJ0YWluIHRpZ2h0IG5lc3RlZCBsb29wIGpvaW5zIChp dCBjYW4gYXZvaWQKKwkgKiByZXBlYXRlZCBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgdGhlIHNh bWUgYnVmZmVyIGFjcm9zcyByZXNjYW5zKS4KKwkgKi8KIH0KIAogdm9pZApAQCAtOTIsNyArODUs MTMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNf aGVhcGZldGNoOwogCi0JaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCS8qIGRyb3Ag cGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFsaWQo aHNjYW4tPnhzX2NidWYpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKworCS8q IGRyb3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgdmlzaWJpbGl0eSBtYXAgcGFnZSAqLworCWlm IChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIoaHNj YW4tPnhzX3ZtYnVmZmVyKTsKIAogCXBmcmVlKGhzY2FuKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhhbS5jCmluZGV4IDAwN2JlMzBhMy4uMTMwYWEyMDVlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMKQEAgLTM4NCw3ICszODQsNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLAogCUFzc2VydChua2V5cyA9PSBzY2FuLT5udW1iZXJPZktleXMpOwogCUFzc2VydChu b3JkZXJieXMgPT0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAKLQkvKiBSZWxlYXNlIHJlc291 cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJlc2V0 IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIApAQCAtNDYxLDcgKzQ2MSw3IEBAIGlu ZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19T Q0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtl IGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUgQU0g c3RhdGUgZm9yIHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICovCiAJaWYgKHNjYW4tPnhz X2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKQEAgLTU4Nyw3 ICs1ODcsNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJ U0NBTl9DSEVDS1M7CiAKLQkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykg ZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNj YW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNl dChzY2FuKTsKIApAQCAtNjYxLDcgKzY2MSw3IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KIAlpZiAoIWZvdW5kKQogCXsKLQkJLyogcmVs ZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8K KwkJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgKi8KIAkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAkJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCi0tIAoyLjUzLjAKCg== --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v22-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8p10 RnJvbSAxOTdmY2EyM2QyNWExMjUxZTIwNjhiOTk4ZGMzYjk2MWNhNjBmMThjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwNi8xNV0g QWRkIGludGVyZmFjZXMgdGhhdCBlbmFibGUgaW5kZXggcHJlZmV0Y2hpbmcuCgpBZGQgYSBuZXcg YW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNzIG1l dGhvZHMKdG8gaW1wbGVtZW50IHBsYWluIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5z IHRoYXQgcmV0dXJuIGluZGV4CmVudHJpZXMgaW4gYmF0Y2hlcyBjb21wcmlzaW5nIGFsbCBtYXRj aGluZyBpdGVtcyBmcm9tIGFuIGluZGV4IHBhZ2UsCnJhdGhlciB0aGFuIG9uZSBtYXRjaCBhdCBh IHRpbWUuICBBbHNvIHN3aXRjaCBuYnRyZWUgb3ZlciBmcm9tCmFtZ2V0dHVwbGUgdG8gdGhlIG5l dyBhbWdldGJhdGNoIGludGVyZmFjZS4KClRoaXMgZXhwYW5kcyB0aGUgc2xvdC1iYXNlZCB0YWJs ZSBBTSBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IEZJWE1FCmZyb20gdHdvIGNhbGxiYWNrcyAo Zm9yIGFtZ2V0dHVwbGUgcGxhaW4gYW5kIGluZGV4LW9ubHkgc2NhbnMpIHRvIGZvdXIsCmFkZGlu ZyBhbWdldGJhdGNoIHZhcmlhbnRzIGZvciBib3RoIHNjYW4gdHlwZXMuICBUaGUgYW1nZXRiYXRj aAppbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhpcyBhcHByb2FjaCB0byBpbmRl eCBzY2FuczogdGhlCnRhYmxlIEFNIGNhbiBhcHBseSBrbm93bGVkZ2Ugb2Ygd2hpY2ggVElEcyB3 aWxsIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuCmluIHRoZSBuZWFyIGZ1dHVyZSB0byBwZXJmb3Jt IEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIHdpbGwgYmUKYWRkZWQgYnkgYW4gdXBjb21p bmcgY29tbWl0LgoKV2l0aCBhbWdldGJhdGNoLCBhIHNjYW4tbGV2ZWwgcG9saWN5IGRldGVybWlu ZXMgd2hldGhlciBlYWNoIGJhdGNoJ3MKaW5kZXggcGFnZSBidWZmZXIgcGluIGlzIGRyb3BwZWQg ZWFnZXJseSBieSB0aGUgaW5kZXggQU0gKGZvciBwbGFpbgpzY2FucyB3aXRoIGFuIE1WQ0Mgc25h cHNob3QsIHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNlbGYgcHJldmVudHMgVElECnJlY3ljbGluZyBw cm9ibGVtcykgb3IgcmV0YWluZWQgYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBU SUQKcmVjeWNsaW5nIGJ5IFZBQ1VVTS4gIFRoZSBpbnRlcmxvY2sgaXMgcmV0YWluZWQgZm9yIG5v bi1NVkNDIHNjYW5zIGFuZApmb3IgaW5kZXgtb25seSBzY2FucywgYW5kIGlzIGRyb3BwZWQgYnkg dGhlIHRhYmxlIEFNIHZpYSB0aGUgbmV3CmFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIHdoZW4gaXQg aXMgc2FmZSB0byBkbyBzby4gKEFjdHVhbGx5LCBpbmRleCBBTXMKYXJlIHVzdWFsbHkgYWJsZSB0 byBkcm9wIHRoZSBwaW4gYXQgdGhlIHNhbWUgdGltZSB0aGF0IHRoZXkgcmVsZWFzZSB0aGUKbG9j ay4gIEluIHByYWN0aWNlLCB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgaXMgb25seSByZWFs bHkgbmVlZGVkCmR1cmluZyBpbmRleC1vbmx5IHNjYW5zLCB3aGVyZSBkcm9wcGluZyB0aGUgcGlu IGludGVybG9jayBtaWdodCBuZWVkIHRvCmJlIGRlbGF5ZWQgZXZlciBzbyBzbGlnaHRseSwgYXMg ZXhwbGFpbmVkIGJlbG93LikKClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRk ZWQgdG8gbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdv cmsgd2l0aCBhbGwgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50 ZXJmYWNlIChMUF9ERUFEIG1hcmtpbmcgb2YgaW5kZXggZW50cmllcyBtdXN0IGJlIHBlcmZvcm1l ZApieSBpbXBsZW1lbnRpbmcgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3aGlj aCBoYXMgYQpkb2N1bWVudGVkIGNvbnRyYWN0IGRlc2NyaWJpbmcgaG93IGluZGV4IEFNcyBtdXN0 IHJlYXNvbiBhYm91dApjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcpLiAgU2NhbnMgY2FuIGFsd2F5 cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQgdGhlIHNjYW4g dXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGluIG9wdGltaXph dGlvbiwgd2hpY2ggaGFkIG5vIHdheSBvZiBkb2luZyB0aGlzIHNhZmVseSBkdXJpbmcKaW5kZXgt b25seSBzY2FucyBkdWUgdG8gaG93IGFtZ2V0dHVwbGUgd29ya3MsIGFuZCBvbmx5IGdhaW5lZCBz dXBwb3J0CmZvciBzY2FucyBvZiB1bmxvZ2dlZCByZWxhdGlvbnMgaW4gcmVjZW50IGNvbW1pdCA4 YTg3OTExOSkuCgpUaGUgb2xkIGFtbWFya3BvcyBhbmQgYW1yZXN0cnBvcyBpbmRleCBBTSBjYWxs YmFja3MgYXJlIHJlbW92ZWQuICBXaXRoCmFtZ2V0YmF0Y2gsIG1hcmsvcmVzdG9yZSBvZiBzY2Fu IHBvc2l0aW9ucyBpcyBtYW5hZ2VkIGJ5IHRoZSB0YWJsZSBBTSwKd2l0aCBoZWxwIGZyb20gaW5k ZXhiYXRjaC5jIHV0aWxpdHkgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBiZWluZwpkZWxlZ2F0ZWQg dG8gdGhlIGluZGV4IEFNLiAgQWxsIGFtZ2V0YmF0Y2gtY2FwYWJsZSBpbmRleCBBTXMgaW5oZXJl bnRseQpzdXBwb3J0IG1hcmsvcmVzdG9yZSB3aXRob3V0IG5lZWRpbmcgdG8gaW1wbGVtZW50IGl0 IHRoZW1zZWx2ZXMuICBUYWJsZQpBTXMgbXVzdCBwcm92aWRlIHRoZSBuZXcgaW5kZXhfZmV0Y2hf bWFya3BvcyBhbmQgaW5kZXhfZmV0Y2hfcmVzdHJwb3MKY2FsbGJhY2tzIHRvIG1ha2UgYWxsIHRo aXMgd29yay4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNo aW5nIHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRl eCBzY2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdz IGl0IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFu eSBidWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2Ug YnVmZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGlu ZGV4IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlv bnMgYmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNp ZGUgaXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhh dCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4K CkluIHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdl IGJ1ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGlu ZGV4LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3Ag YW50aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0 aGUgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVz LgpUaGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9y aXR5IHRvIGRlY2lkZQp3aGVuIHRvIGRyb3AgaW5kZXggcGFnZSBwaW5zL3VuZ3VhcmQgYmF0Y2hl cywgc28gdGhpcyBjYW4gYmUgY29uc2lkZXJlZAphIGhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRh aWwgKGluZGV4IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBz dGlsbCBhbGxvd3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9y ZQp0aGFuIG9uZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBp bmRleC1vbmx5IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xk cyBvcGVuIHNldmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWlu IGFuIGFkZXF1YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCBzdXBwb3J0IHBsYWluIGluZGV4IHNjYW5zIG11c3Qgbm93IGltcGxlbWVudAplaXRoZXIgdGhl IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIG9yIHRoZSBhbWdldHR1cGxlIGludGVyZmFjZSAobm90IGJv dGgpLgpBbiB1cGNvbWluZyBwYXRjaCB3aWxsIGFkZCBzdXBwb3J0IGZvciBhbWdldGJhdGNoIHRv IHRoZSBoYXNoIGluZGV4IEFNLgpCdXQgdGhlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3Rp bGwgYmUgdXNlZCBieSB0aGUgR2lTVCBhbmQgU1AtR2lTVAppbmRleCBBTXMgZm9yIG5vdy4gIEJv dGggc2hhcmUgYSBzZXQgb2YgcHJvYmxlbXMgdGhhdCBtYWtlIGl0IHVuY2xlYXIKaG93IHRvIGdv IGFib3V0IGFkZGluZyBzdXBwb3J0LgoKQm90aCBBTXMgcmVjb25zdHJ1Y3QgaW5kZXggZGF0YSBh cyBIZWFwVHVwbGVzIHZpYSBoZWFwX2Zvcm1fdHVwbGUgZHVyaW5nCmluZGV4LW9ubHkgc2NhbnMs IHBlcmZvcm1pbmcgcmV0YWlsIHBhbGxvYyBhbGxvY2F0aW9ucyB0aGF0IGFyZQppbmNvbXBhdGli bGUgd2l0aCB0aGUgZmxhdCwgZml4ZWQtc2l6ZSwgcmVjeWNsYWJsZSBwZXItYmF0Y2ggbWVtb3J5 Cm1vZGVsIHRoYXQgYW1nZXRiYXRjaCdzIGN1cnJUdXBsZXMgd29ya3NwYWNlIHJlcXVpcmVzLiAg TW9yZW92ZXIsIGJvdGgKQU1zIGhhdmUga25vd24gYnVncyBpbnZvbHZpbmcgYnVmZmVyIHBpbiBt YW5hZ2VtZW50IGR1cmluZyBpbmRleC1vbmx5CnNjYW5zOiB0aGV5IHJlbGVhc2UgaW5kZXggbGVh ZiBwYWdlIHBpbnMgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuCmhvbGRpbmcgdGhlbSBhcyBhbiBp bnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLApjcmVh dGluZyBhIHJhY2UgY29uZGl0aW9uIGluIHdoaWNoIFZBQ1VVTSBjYW4gcmVtb3ZlIGEgaGVhcCB0 dXBsZSBhbmQKdGhlbiBtYXJrIGl0cyBwYWdlIGFsbC12aXNpYmxlIHdoaWxlIHRoZSBpbmRleC1v bmx5IHNjYW4gc3RpbGwgaG9sZHMgYQpyZWZlcmVuY2UgdG8gdGhlIG5vdy1yZWN5Y2xlZCBUSUQg WzFdLiAgVGhlc2UgaW5kZXggQU1zIGNhbm5vdCBhZG9wdAphbWdldGJhdGNoIHdpdGhvdXQgZmly c3QgZml4aW5nIHRoZSBwaW4taGFuZGxpbmcgZGVmaWNpZW5jeSB0aGF0IHRoZXkKYWxyZWFkeSBo YXZlIHVuZGVyIGFtZ2V0dHVwbGUgKGl0J3Mgbm90IGNsZWFyIGhvdyB0byBmaXggdGhlIHByb2Js ZW0Kd2l0aGluIHRoZSBjb25maW5lcyBvZiB0aGUgY3VycmVudCBhbWdldHR1cGxlIGRlc2lnbiwg bGV0IGFsb25lIGluIGEgd2F5CnRoYXQncyBjb21wYXRpYmxlIHdpdGggYW1nZXRiYXRjaCkuCgpb MV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6JTNEamppTkw5RkNoOEMxTC1HVUgxNWY0V0ZU V3ViMnglMkJfTnVjbmdjRERjSEt3JTQwbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogVG9tYXMgVm9u ZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0Lmll PgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdl ZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBl bnRlcnByaXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZWZhYzMyMzgt NmYzNC00MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJhLm1lCi0tLQogc3JjL2luY2x1ZGUv YWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDM0ICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy9pbmRleGJhdGNoLmggICAgICAgICAgICAgICB8IDIwMiArKysrKwogc3JjL2luY2x1ZGUvYWNj ZXNzL25idHJlZS5oICAgICAgICAgICAgICAgICAgIHwgMTkwICsrLS0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAzNDUgKysrKysrKystCiBzcmMvaW5j bHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgNzcgKy0KIHNyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCA1MjEgKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYyAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8ICA1NCArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgNzI2ICsrKysrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICA3NCArLQog c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAgICAgfCAyMDcgKysrLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8IDQ2OSArKysr Ky0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyAgICAgICAgIHwg NTY3ICsrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMg ICAgICAgICAgfCAyNDUgLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cu YyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMu YyAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGku YyAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAg ICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAgICAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgICAg ICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAg ICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAg ICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMg ICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgICAgICAgICAgICAg ICB8ICAgOCArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAg IHwgICA2ICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAg fCA1NzMgKysrKysrKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwg ICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5k ZXhfYW0uYyAgIHwgICA2ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg ICAgICAgICAgfCAgMTIgKy0KIDQyIGZpbGVzIGNoYW5nZWQsIDMxNjkgaW5zZXJ0aW9ucygrKSwg MTMwMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3Mv aW5kZXhiYXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdkLi5mZGZkOGQ2MDAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE5IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2Fu X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBs ZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVm IEluZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJ ICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBkcm9wIFRJRCByZWN5Y2xpbmcgaW50 ZXJsb2NrIGhlbGQgdG8gcHJldmVudCBjb25jdXJyZW50IFZBQ1VVTSByZWN5Y2xpbmcgKi8KK3R5 cGVkZWYgdm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qIG1hcmsgZGVhZCBpdGVt cyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVmIHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFt Z2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElE Qml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTgsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRi aXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAq LwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFt bWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFy a2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0 IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgq YW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVz IC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMjAsMTIgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2Nh bjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFt Z2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJh dGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFy ZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1r aWxsaXRlbXNiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBh bWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRz Y2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0J YW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9z cmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVy ZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0 aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2Fu IGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggZGI2MmUwY2ExLi5hZTU4N2Y4ZGUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCkBAIC05Niw2ICs5Niw3IEBAIHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0 ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1 Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5C YXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRh ICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0 YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGE1M2RmODU2MS4u NWQzMzE1ZWM3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzAsOCArMTMwLDM3IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJLyogRm9yIHZpc2liaWxpdHkgbWFwIGNoZWNr cyAoaW5kZXgtb25seSBzY2FucyBhbmQgb24tYWNjZXNzIHBydW5pbmcpICovCiAJQnVmZmVyCQl4 c192bWJ1ZmZlcjsJLyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCisJaW50CQkJeHNfdm1faXRl bXM7CS8qICMgaXRlbXMgdG8gcmVzb2x2ZSB2aXNpYmlsaXR5IGluZm8gZm9yICovCiB9IEluZGV4 RmV0Y2hIZWFwRGF0YTsKIAorLyoKKyAqIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGhl YXAgdGFibGUgQU0uCisgKgorICogU3RvcmVkIGF0IGEgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhl IEluZGV4U2NhbkJhdGNoIHBvaW50ZXIsIGluIHRoZQorICogZml4ZWQtc2l6ZSB0YWJsZSBBTSBv cGFxdWUgYXJlYSBvZiBlYWNoIGJhdGNoIGFsbG9jYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0 IEhlYXBCYXRjaERhdGEKK3sKKwl1aW50OAkgICAqdmlzSW5mbzsJCS8qIHBlci1pdGVtIHZpc2li aWxpdHkgZmxhZ3MsIG9yIE5VTEwgKi8KK30gSGVhcEJhdGNoRGF0YTsKKworLyoKKyAqIFBlci1p dGVtIHZpc2liaWxpdHkgZmxhZ3Mgc3RvcmVkIGluIEhlYXBCYXRjaERhdGEudmlzSW5mbyBhcnJh eQorICovCisjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQJCTB4MDEJLyogY2hlY2tlZCBp dGVtIGluIFZNPyAqLworI2RlZmluZSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRQkweDAyCS8q IGJsb2NrIGlzIGtub3duIGFsbC12aXNpYmxlPyAqLworCisvKgorICogQWNjZXNzIHRoZSBoZWFw LXByaXZhdGUgZml4ZWQtc2l6ZSBkYXRhIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhbiBhbGxvY2F0 ZWQKKyAqIEluZGV4U2NhbkJhdGNoLCB1c2luZyBjYWxsZXIncyBJbmRleFNjYW5CYXRjaCBwb2lu dGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgSGVhcEJhdGNoRGF0YSAqCitoZWFwX2JhdGNoX2RhdGEo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBoZWFwYW0n cyBmaXhlZC1zaXplIHNwYWNlIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFsbG9jJ2QgYXJlYSAq LworCXJldHVybiAoSGVhcEJhdGNoRGF0YSAqKSBpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2Nhbiwg YmF0Y2gpOworfQorCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1 bSAqLwogdHlwZWRlZiBlbnVtCiB7CkBAIC00MzIsOCArNDYxLDEzIEBAIGV4dGVybiBUcmFuc2Fj dGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAvKiBpbiBoZWFw L2hlYXBhbV9pbmRleHNjYW4uYyAqLwogZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBh bV9pbmRleF9mZXRjaF9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkJICB1 aW50MzIgZmxhZ3MpOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX2JhdGNoX2luaXQo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJ CQkJCQkJCQkJICBib29sIG5ld19hbGxvYyk7CiBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0 Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9m ZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9m ZXRjaF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5k ZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBib29sIGhlYXBf aG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJ CQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwgU25hcHNob3Qgc25hcHNob3QsIEhlYXBUdXBsZSBoZWFw VHVwbGUsCiAJCQkJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZpcnN0X2NhbGwpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9pbmRleGJhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi41 NTcwODllZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRj aC5oCkBAIC0wLDAgKzEsMjAyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRleGJh dGNoLmgKKyAqCSAgQmF0Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3IgdGhl IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoKKyAqIFByb3ZpZGVzIGZ1bmN0aW9ucyB1c2VkIGJ5 IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5kZXggc2NhbidzIHBvc2l0aW9uYWwKKyAqIHN0YXRl IChzdG9yZWQgaW4gSW5kZXhTY2FuRGVzYy5iYXRjaHJpbmdidWYpLCBhbmQgdG8gbWFuYWdlIHVu ZGVybHlpbmcKKyAqIHJlc291cmNlcyBzdWNoIGFzIG1lbW9yeSBhbmQgYnVmZmVyIHBpbnMuICBB bHNvIHByb3ZpZGVzIHZhcmlvdXMgdXRpbGl0eQorICogZnVuY3Rpb25zIHVzZWQgYnkgaW5kZXgg QU1zIGZvciBiYXRjaCByZXNvdXJjZSBtYW5hZ2VtZW50LgorICoKKyAqIFRoaXMgbW9kdWxlIGRv ZXMgbm90IHByb3ZpZGUgZWxlbWVudGFyeSBvcGVyYXRpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhl CisgKiBzY2FuJ3MgcmluZyBidWZmZXIgKGUuZy4sIGZvciBhcHBlbmRpbmcgYSBiYXRjaCkuICBU aG9zZSBhcmUgaW1wbGVtZW50ZWQgYXMKKyAqIGlubGluZSBmdW5jdGlvbnMgZGVmaW5lZCBiZXNp ZGUgSW5kZXhTY2FuRGVzYyBhbmQgSW5kZXhTY2FuQmF0Y2guCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBJTkRFWEJBVENIX0gKKyNkZWZp bmUgSU5ERVhCQVRDSF9ICisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJh Y2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisKKy8qCisgKiB1dGlsaXRpZXMg Y2FsbGVkIGJ5IHRhYmxlIEFNcworICovCisKKy8qCisgKiBTZXRzIHVwIHRoZSBiYXRjaCByaW5n IGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHVzZSBieSBhbiBpbmRleCBzY2FuLgorICoKKyAqIENhbGxl ZCBmcm9tIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfYmVnaW4gY2FsbGJhY2sgZHVyaW5nIGFtZ2V0 YmF0Y2ggc2NhbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVhbV91dGlsX2JhdGNo c2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdi dWYuc2NhblBvcy52YWxpZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZh bGlkID0gZmFsc2U7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlz Y2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoID0gMDsKKwlzY2FuLT5iYXRjaHJpbmdidWYubmV4 dEJhdGNoID0gMDsKKworCXNjYW4tPnVzZWJhdGNocmluZyA9IHRydWU7Cit9CisKK2V4dGVybiB2 b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29s IGVuZHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19w b3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNj YW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1f dXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9p ZCB0YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAqIEZl dGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3IgdGhl IGZpcnN0KS4KKyAqCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChwYXNz ZWQgdG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKKyAqIG1hdGNoaW5nIGl0ZW1zIGlu IHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCisgKiBwcmlv ckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICoKKyAqIFJldHVy bnMgdGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBpbiB0aGUgZ2l2ZW4g c2NhbgorICogZGlyZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hl cyBpbiB0aGF0IGRpcmVjdGlvbi4KKyAqCisgKiBUaGlzIGlzIHdoZXJlIGJhdGNoZXMgYXJlIGFw cGVuZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAorICogZnJlZSBhbnkg YmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2FsbGVyLiAgVGhl IGNhbGxlcgorICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWlyIHBvc2l0 aW9uLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuQmF0 Y2gKK3RhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNo LCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxM OworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05M WSA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisKKwlpZiAoIXByaW9yQmF0Y2gpCisJeworCQkvKiBG aXJzdCBjYWxsIGZvciB0aGUgc2NhbiAqLworCQlBc3NlcnQocG9zID09ICZiYXRjaHJpbmdidWYt PnNjYW5Qb3MpOworCX0KKwllbHNlIGlmICh1bmxpa2VseShwcmlvckJhdGNoLT5kaXIgIT0gZGly ZWN0aW9uKSkKKwl7CisJCS8qCisJCSAqIFdlIGRldGVjdGVkIGEgY2hhbmdlIGluIHNjYW4gZGly ZWN0aW9uIGFjcm9zcyBiYXRjaGVzLiAgUHJlcGFyZQorCQkgKiBzY2FuJ3MgYmF0Y2hyaW5nYnVm IHN0YXRlIGZvciB1cyB0byBnZXQgdGhlIG5leHQgYmF0Y2ggZm9yIHRoZQorCQkgKiBvcHBvc2l0 ZSBzY2FuIGRpcmVjdGlvbiB0byB0aGUgb25lIHVzZWQgd2hlbiBwcmlvckJhdGNoIHdhcworCQkg KiByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX3NjYW5iYXRj aF9kaXJjaGFuZ2Uoc2Nhbik7CisKKwkJLyogcHJpb3JCYXRjaCBpcyBub3cgYmF0Y2hyaW5nYnVm J3Mgb25seSBiYXRjaCAqLworCQlBc3NlcnQocG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdidWYtPmhl YWRCYXRjaCk7CisJCUFzc2VydChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDEpOwor CX0KKwllbHNlIGlmIChpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBwb3MtPmJhdGNoICsg MSkpCisJeworCQkvKiBOZXh0IGJhdGNoIGFscmVhZHkgbG9hZGVkIGZvciB1cyAqLworCQliYXRj aCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcG9zLT5iYXRjaCArIDEpOworCisJCUFzc2VydChw cmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGly ZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsK KwkJcmV0dXJuIGJhdGNoOworCX0KKworCS8qCisJICogQXNzZXJ0IHByZWNvbmRpdGlvbnMgZm9y IGNhbGxpbmcgYW1nZXRiYXRjaC4KKwkgKgorCSAqIHByaW9yQmF0Y2ggaGFkIGJldHRlciBiZSBm b3IgdGhlIGxhc3QgdmFsaWQgYmF0Y2ggY3VycmVudGx5IGluIHRoZSByaW5nCisJICogYnVmZmVy IChiYXRjaGVzIG11c3Qgc3RheSBpbiBzY2FuIG9yZGVyKS4gIElmIGl0IGlzbid0IHRoZW4gd2Ug c2hvdWxkCisJICogaGF2ZSBhbHJlYWR5IHJldHVybmVkIHNvbWUgZXhpc3RpbmcgbG9hZGVkIGJh dGNoIGVhcmxpZXIuCisJICovCisJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2Nhbikp OworCUFzc2VydCghcHJpb3JCYXRjaCB8fAorCQkgICAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChz Y2FuKSA+IDAgJiYgcHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbiAmJgorCQkJaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIDEpID09IHByaW9yQmF0Y2gp KTsKKworCS8qCisJICogQmVmb3JlIHdlIGNhbGwgYW1nZXRiYXRjaCBhZ2FpbiwgY2hlY2sgaWYg cHJpb3JCYXRjaCBpcyBhbHJlYWR5IGtub3duCisJICogdG8gYmUgdGhlIGxhc3QgYmF0Y2ggd2l0 aCBtYXRjaGluZyBpdGVtcyBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uCisJICovCisJaWYgKHByaW9y QmF0Y2ggJiYKKwkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSA/CisJCSBwcmlv ckJhdGNoLT5rbm93bkVuZEZvcndhcmQgOgorCQkgcHJpb3JCYXRjaC0+a25vd25FbmRCYWNrd2Fy ZCkpCisJCXJldHVybiBOVUxMOworCisJYmF0Y2ggPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1nZXRiYXRjaChzY2FuLCBwcmlvckJhdGNoLAorCQkJCQkJCQkJCQkJCSAgZGlyZWN0 aW9uKTsKKwlpZiAoYmF0Y2gpCisJeworCQkvKiBXZSBnb3QgdGhlIGJhdGNoIGZyb20gdGhlIGlu ZGV4IEFNICovCisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChi YXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwkJLyogQXBwZW5kIGJhdGNo IHRvIHRoZSBlbmQgb2YgcmluZyBidWZmZXIvd3JpdGUgaXQgdG8gYnVmZmVyIGluZGV4ICovCisJ CWluZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKHNjYW4sIGJhdGNoKTsKKworCQkvKgorCQkgKiBUaGVv cmV0aWNhbGx5IHdlIHNob3VsZCBzZXQga25vd25FbmRGb3J3YXJkL2tub3duRW5kQmFja3dhcmQg dG8KKwkJICogZmFsc2UgKHdoaWNoZXZlciBpcyB1c2VkIHdoZW4gbW92aW5nIGluIHRoZSBvcHBv c2l0ZSBkaXJlY3Rpb24pCisJCSAqIHdoZW4gdGhpcyBpcyB0aGUgc2NhbidzIGZpcnN0IHJldHVy bmVkIGJhdGNoLiAgV2UgZG9uJ3QgYm90aGVyCisJCSAqIGJlY2F1c2UgdGhlIGluZGV4IEFNIHNo b3VsZCBhbHdheXMgcmVjb3JkIHRoYXQgZmFjdCBpbiBpdHMgb3duCisJCSAqIG9wYXF1ZSBhcmVh LiAgKFRoZXNlIGZpZWxkcyBvbmx5IGV4aXN0IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBpbmRleAor CQkgKiBBTXMgc2V0dGluZyBfYW55XyBmaWVsZCBmcm9tIGFueSBwcmlvcmJhdGNoIHRoYXQgd2Ug cGFzcyB0byB0aGVtLgorCQkgKiBCZXNpZGVzLCBpdCB3b3VsZCBiZSBjdW1iZXJzb21lIGZvciBp bmRleCBBTXMgdG8ga2VlcCB0cmFjayBvZgorCQkgKiB3aGljaCBiYXRjaCBpcyB0aGUgY3VycmVu dCBhbWdldGJhdGNoIGNhbGwncyBvcmlnaW5hbCBwcmlvcmJhdGNoLikKKwkJICovCisJfQorCWVs c2UKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJuZWQgTlVMTCAqLworCQlpZiAocHJpb3JCYXRj aCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMgdG8gYmUg Zm91bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJICogZGlyZWN0aW9uLCBmb2xsb3dpbmcgcHJp b3JCYXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JCYXRjaCBpcworCQkJICogdGhlIGxhc3QgYmF0 Y2ggd2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAqLworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEZvcndhcmQgPSB0cnVl OworCQkJZWxzZQorCQkJCXByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSB0cnVlOworCQl9 CisJfQorCisJLyogeHNfaGl0dXAgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBhbWdldGJh dGNoIHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisKKwlyZXR1cm4gYmF0Y2g7 Cit9CisKKy8qCisgKiB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICovCitleHRlcm4g dm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0ZXJuIEluZGV4U2Nh bkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1hY3JvIGZvciBhY2Nlc3Np bmcgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBkYXRhLgorICoKKyAqIEVhY2ggYmF0 Y2ggYWxsb2NhdGlvbiBwbGFjZXMgdGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGF0IGEgZml4ZWQg bmVnYXRpdmUKKyAqIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVyIChzZWUg aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKS4KKyAqIFRoaXMgbWFjcm8gcmV0dXJucyBhIHR5cGVk IHBvaW50ZXIgdG8gdGhhdCBhcmVhLCBhc3NlcnRpbmcgdGhhdCBldmVyeWJvZHkKKyAqIGhhcyB0 aGUgc2FtZSBpZGVhIGFib3V0IHdoZXJlIHRoZSBpbmRleCBBTSBvcGFxdWUgYXJlYSBpcyBpbiBw YXNzaW5nLgorICovCisjZGVmaW5lIGluZGV4YW1fdXRpbF9iYXRjaF9nZXRfYW1kYXRhKHNjYW4s IGJhdGNoLCB0eXBlKSBcCisJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hfaW5kZXhfb3BhcXVl X3NpemUgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBlICopICgoY2hhciAq KSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisjZW5kaWYJCQkJCQkJLyog SU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAzYzU3Li42OTdjZDdhNTQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgTkJUUkVFX0gKIAog I2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMiArOTI1LDYgQEAgdHlwZWRlZiBz dHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGluZ0RhdGEg KkJUVmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVl LXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNvbnNpc3Rz IG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9y Ci0gKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJvdXQgdGhl IGN1cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQg dGhlIG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9zRGF0YSB0 byByZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5kIG1hcmtl ZAotICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUga25vd24t a2lsbGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3JlIHdlIGNh biBtb3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdvcmsgYSBw YWdlIGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50aWZ5Ci0g KiBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4gQlRT Y2FuUG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJldHVybmlu ZyB0aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlzIGFwcHJv YWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMKLSAqIGRy b3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0aGUgcmV0 dXJuZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNlIHRoZSBw aW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBpbiAod2hl biBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVNCi0gKiAo c2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVj eWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQg dGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRvIGl0cyBz aWJsaW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwg d2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQgaXRlbSwg b3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMg Z28KLSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRl bSBzdG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3Rp bmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93aW5nIHRo ZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlz dAotICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0 IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVh cFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGlu ZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLQlMb2Nh dGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFj ZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBv c0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMg dW5waW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBvc2l0aW9u J3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIHBh Z2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJ LyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1 cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQYWdlJ3Mg TFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9yIHRoZSBz YXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVjdGlvbiBk aXI7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIG5leHRU dXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBhc3NvY2lh dGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBsZU9mZnNl dDsKLQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRo aW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQg YW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8KLQlib29s CQltb3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJh eSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBp bmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRv IGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxh c3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmly c3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1J bmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRv IGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBp biBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0 ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10g Ki8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8qIE1VU1Qg QkUgTEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0RhdGEgKkJU U2NhblBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0oIFwKLQlB c3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0J CQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxpZCgoc2Nh bnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwKLQlkbyB7 IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcykuYnVmID0g SW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1VucGluSWZQ aW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBv cykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2Rl ZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2Nr TnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsg XAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBuZWVkIG9u ZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNjYW4ga2V5 ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5NDUsNDMg QEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2NvbXBhcmU7 CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5mbzsKIAor LyogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgYnRyZWUgaW5kZXggQU0gKi8KK3R5cGVk ZWYgc3RydWN0IEJUQmF0Y2hEYXRhCit7CisJQnVmZmVyCQlidWY7CQkJLyogbGVhZiBwYWdlJ3Mg YnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogbGVhZiBwYWdlJ3MgYmxv Y2sgbnVtYmVyICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBsZWFmIHBhZ2UncyBsZWZ0 IHNpYmxpbmcgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGxlYWYgcGFnZSdzIHJpZ2h0 IHNpYmxpbmcgKi8KKwlib29sCQltb3JlTGVmdDsJCS8qIG1vcmUgcGFnZXMgb2YgaW50ZXJlc3Qg dG8gdGhlIGxlZnQ/ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJLyogbW9yZSBwYWdlcyBvZiBpbnRl cmVzdCB0byB0aGUgcmlnaHQ/ICovCit9IEJUQmF0Y2hEYXRhOworCisvKiBBY2Nlc3MgdGhlIGJ0 cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVy ICovCisjZGVmaW5lIEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJaW5kZXhhbV91dGls X2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEJUQmF0Y2hEYXRhKQorCisvKgorICogQlRT Y2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGlu ZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2Vl IF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3Np bmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtleXMuICBU aGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtleXMgdHJh Y2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBpbmRleCdz IGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZSwKKyAqIGJ0cG9zcmVzZXQsIGFuZCBfYnRfYWR2 YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IHRyYWNrIGFueXRoaW5nIGFib3V0CisgKiB0 aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uL2JhdGNoIGluIHRoaXMgb3BhcXVlIHN0cnVjdC4KKyAq CisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVkIGJ5IHRo ZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2Us IGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFuZCByZXR1 cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFzZSB0aGUg cmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBUaGlzIGFw cHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gIF9idF9uZXh0IGlzIHBh c3NlZCBwcmlvcmJhdGNoLCB3aGljaCBoYXMgYSBCVEJhdGNoRGF0YSBhcmVhIHRoYXQKKyAqIHRl bGxzIHVzIHdoaWNoIHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgaW4gdGhlIGdpdmVu IHNjYW4gZGlyZWN0aW9uCisgKiAodGhpcyBpcyBvZnRlbiB0aGUgc2FtZSBwcmlvcmJhdGNoIHBh c3NlZCB0byBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJlIGRvaW5n IGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVh Y2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIHRhYmxlIFRJRCBhbmQgb2Zm c2V0LiAgUG9zdGluZyBsaXN0IHR1cGxlcworICogc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwg YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHVzZWQgZm9yIGVhY2ggVElEIGluCisgKiB0aGUg cG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJ LyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA2NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJy YXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFy cmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3Ig cmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAv KiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJv dXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2Vk KSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yg a2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRs eSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZv cmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4g aW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3Bh Y2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxl IHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUg c3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9u IGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1 c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRl bUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFy ayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmss IGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICov Ci0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQg Ki8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlC VFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNj YW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNj YW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsK QEAgLTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4g U2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQp OwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3Jk ZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBidGtpbGxp dGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0 ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZv aWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1hcmtwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtk ZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2Fs bGJhY2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19r ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJu IHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9y ZGVycHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRp ciwKQEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxh dGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1 ZmZlciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5zdGFjayk7CiBleHRlcm4gT2Zmc2V0 TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5z ZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2Fu SW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29s IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVy biBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor ZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHBy aW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwg dWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBm dW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3Nj YW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwotZXh0ZXJuIHZvaWQgX2J0X2tp bGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVt X2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1 bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVs KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDk4NmI0ZjVmMy4uYTQzZjViMTllIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmgKQEAgLTEyNiw2ICsxMjYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9j a1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiAgKi8K IHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKKwkvKiBUYWJsZSBBTSBwZXIt YmF0Y2ggb3BhcXVlIGFyZWEgc2l6ZSAoTUFYQUxJR04nZCksIHNldCBieSBBTSAqLworCXVpbnQx NgkJYmF0Y2hfb3BhcXVlX3NpemU7CisKKwkvKiBQZXItaXRlbSB0cmFpbGluZyBkYXRhIHNpemUg aW4gZWFjaCBiYXRjaCAqLworCXVpbnQxNgkJYmF0Y2hfcGVyX2l0ZW1fc2l6ZTsKKwogCS8qCiAJ ICogQml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdGhlIHJlbGF0aW9uLiBObyBTT19J TlRFUk5BTF9GTEFHUyBhcmUKIAkgKiBwZXJtaXR0ZWQuCkBAIC0xMzMsMTMgKzEzOSwxODQgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCXVpbnQzMgkJZmxhZ3M7CiB9IElu ZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJ dGVtIHdpdGhpbiB0aGUgc2NhbidzIHJpbmcgYnVmZmVyCisgKi8KK3R5cGVkZWYgc3RydWN0IEJh dGNoUmluZ0l0ZW1Qb3MKK3sKKwkvKiBQb3NpdGlvbiByZWZlcmVuY2VzIGEgdmFsaWQgSW5kZXhT Y2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBlbnRyeT8gKi8KKwlib29sCQl2YWxpZDsKKworCS8qIElu ZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10td2lzZSBpbmRleCB0byByZWxldmFudCBJbmRleFNj YW5CYXRjaCAqLworCXVpbnQ4CQliYXRjaDsKKworCS8qIEluZGV4U2NhbkJhdGNoLml0ZW1zW10t d2lzZSBpbmRleCB0byByZWxldmFudCBCYXRjaE1hdGNoaW5nSXRlbSAqLworCWludAkJCWl0ZW07 CisKK30gQmF0Y2hSaW5nSXRlbVBvczsKKworLyoKKyAqIE1hdGNoaW5nIGl0ZW0gcmV0dXJuZWQg YnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJuZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmluZyBhbgorICog aW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFibGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50IG1hdGNoaW5n IHRhYmxlIHR1cGxlLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5nSXRlbQorewor CUl0ZW1Qb2ludGVyRGF0YSB0YWJsZVRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgdGFibGUgaXRl bSAqLworCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9u IHdpdGhpbiBwYWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogaW5kZXggdHVw bGUncyBjdXJyVHVwbGVzIG9mZnNldCwgaWYgYW55ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOwor CisvKgorICogRGF0YSBhYm91dCBvbmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgKGFuZCBw YXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVyaW5nCisgKiBpbmRleCBzY2Fucy4KKyAqCisgKiBFYWNo IGJhdGNoIGFsbG9jYXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgbWVtb3J5IGxheW91dDoKKyAqCisg KiAgIFt0YWJsZSBBTSBvcGFxdWUgYXJlYV0gICAgPC0gZml4ZWQtc2l6ZSwgLShiYXRjaF90YWJs ZV9vZmZzZXQpIGZyb20gYmFzZQorICogICBbaW5kZXggQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0 IC0oYmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUpIGZyb20gYmFzZQorICogICBbSW5kZXhTY2FuQmF0 Y2hEYXRhXSAgICAgIDwtIGJhc2UgcG9pbnRlciwgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaAorICog ICBbaXRlbXNbbWF4aXRlbXNiYXRjaF1dCisgKiAgIFt0YWJsZSBBTSB0cmFpbGluZyBkYXRhXSAg PC0gcGVyLWl0ZW0gYXJlYSAoZS5nLiwgZm9yIHZpc2liaWxpdHkgaW5mbykKKyAqICAgW2N1cnJU dXBsZXMgd29ya3NwYWNlXSAgICA8LSBpbmRleCBBTSBzdG9yZXMgaW5kZXggdHVwbGVzIGhlcmUg Zm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtb25seSBzY2FucyAo YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkKKyAqCisgKiBiYXRjaF90YWJsZV9vZmZzZXQgY29tYmlu ZXMgYm90aCBBTSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmdsZSBvZmZzZXQgZnJvbQorICogdGhl IGJhdGNoIHBvaW50ZXIgdG8gdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlLiAgVGhlIGluZGV4YmF0 Y2guYyB1dGlsaXRpZXMKKyAqIHBmcmVlIGEgYmF0Y2ggYnkgcGFzc2luZyBwZnJlZSBhIHBvaW50 ZXIgcmV0dXJuZWQgYnkgaW5kZXhfc2Nhbl9iYXRjaF9iYXNlLgorICogV2UgcmVseSBvbiB0aGUg YXNzdW1wdGlvbiB0aGF0IGJhdGNoZXMgaGF2ZSBhIGZpeGVkIGxheW91dCBmb3IgdGhlIGR1cmF0 aW9uCisgKiBvZiBhbiBpbmRleCBzY2FuIChiYXRjaGVzIGFyZSBjYWNoZWQgZm9yIHJldXNlIHRv IGF2b2lkIHBhbGxvYyBjaHVybikuCisgKgorICogVGhlIHRhYmxlIEFNIGNhbiBvdmVybGF5IGEg c21hbGwgZml4ZWQtc2l6ZSBzdHJ1Y3QgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICogYWxsb2NhdGVk IHNwYWNlLCB3aGljaCBpdCBhY2Nlc3NlcyB1c2luZyBhIGluZGV4X3NjYW5fYmF0Y2hfYmFzZSBz aGltCisgKiBhY2Nlc3NvciBmdW5jdGlvbi4gIENvbnZlbnRpb24gZm9yIHRhYmxlIEFNcyBpcyB0 byBzdG9yZSBhIHBvaW50ZXIgdG8gaXRzCisgKiBwZXItaXRlbSBhcmVhIGluIHRoaXMgZml4ZWQt c2l6ZSBhcmVhIChlLmcuLCBoZWFwYW0gc3RvcmVzIGEgdmlzSW5mbworICogcG9pbnRlciBoZXJl KSwgaW4gYWRkaXRpb24gdG8gb3RoZXIgaW5mb3JtYXRpb24gdHJhY2tlZCBhdCB0aGUgYmF0Y2gg bGV2ZWwuCisgKgorICogVGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGlzIGFjY2Vzc2VkIHZpYSBh IGN1c3RvbSBhY2Nlc3NvciB0aGF0IHVzZXMgYQorICogZml4ZWQgY29tcGlsZS10aW1lIGNvbnN0 YW50IG9mZnNldCBmb3IgZWZmaWNpZW5jeSAoYSBjb25zdGFudCB0aGF0IGlzCisgKiB0cmFja2Vk IGluIHRoZSBzY2FuIGRlc2NyaXB0b3IgYXMgYmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUpLgorICov Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEKK3sKKwkvKiBJbmRleCBwYWdlJ3Mg TFNOLCBvcHRpb25hbGx5IHVzZWQgYnkgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lcyAqLworCVhM b2dSZWNQdHIJbHNuOworCisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3 YXMgcmVhZCAqLworCVNjYW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBrbm93bkVuZEJhY2t3 YXJkIGFuZCBrbm93bkVuZEZvcndhcmQgaW5kaWNhdGUgdGhhdCB0aGlzIGJhdGNoIGlzIHRoZQor CSAqIGxhc3Qgb25lIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIHJlbGV2YW50IHNjYW4gZGly ZWN0aW9uLiAgV2hlbgorCSAqIGFtZ2V0YmF0Y2ggcmV0dXJucyBOVUxMIGZvciBhIGdpdmVuIGRp cmVjdGlvbiwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworCSAqIGlzIHNldCBvbiB0aGUgcHJpb3Ji YXRjaCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhhdCBjYWxsLiAgV2UgY2Fubm90IGtub3cKKwkgKiB0 aGlzIHdoZW4gYSBiYXRjaCBpcyBmaXJzdCByZXR1cm5lZCBieSBhbWdldGJhdGNoOyBpdCBvbmx5 IGJlY29tZXMKKwkgKiBhcHBhcmVudCB3aGVuIHdlIHRyeSBhbmQgZmFpbCB0byBjb250aW51ZSB0 aGUgc2NhbiBwYXN0IGl0LgorCSAqCisJICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lk IHJlZHVuZGFudCBhbWdldGJhdGNoIGNhbGxzIHdpdGggdGhlIHNhbWUKKwkgKiBwcmlvcmJhdGNo IC0tIHRoZSBpbmRleCBBTSBtaWdodCBuZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdl cyB0bworCSAqIGRldGVybWluZSB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlv bmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4KKwkgKi8KKwlib29sCQlrbm93bkVuZEJhY2t3YXJkOwor CWJvb2wJCWtub3duRW5kRm9yd2FyZDsKKworCS8qCisJICogQmF0Y2ggc3RpbGwgaG9sZHMgVElE IHJlY3ljbGluZyBpbnRlcmxvY2s/CisJICovCisJYm9vbAkJaXNHdWFyZGVkOworCisJLyoKKwkg KiBNYXRjaGluZyBpdGVtcyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4gIE91dHB1dCBieSBpbmRleCBB TSBmb3IgdGFibGUgQU0uCisJICoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVy ZWQgaW4gaW5kZXggb3JkZXIgKGllLCBieSBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAg V2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zCisJ ICogdG8gZmlsbCB0aGUgYXJyYXkgYmFjay10by1mcm9udCwgc3RhcnRpbmcgYXQgdGhlIGxhc3Qg aXRlbSBzbG90IGFuZAorCSAqIGZpbGxpbmcgZG93bndhcmRzLiAgVGhpcyBpcyB3aHkgd2UgbmVl ZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEKKwkgKiBsYXN0LXZhbGlkLWVudHJ5IGNv dW50ZXIuCisJICoKKwkgKiBOb3RlOiB0aGVzZSBhcmUgc2lnbmVkIGJlY2F1c2UgaXQncyBzb21l dGltZXMgY29udmVuaWVudCB0byB1c2UgLTEgdG8KKwkgKiByZXByZXNlbnQgYW4gb3V0LW9mLWJv dW5kcyBzcGFjZSBqdXN0IGJlZm9yZSBmaXJzdEl0ZW0gKHdoZW4gaXQncyAwKS4KKwkgKi8KKwlp bnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50 CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGlu Zm8gYWJvdXQgZGVhZCBpdGVtcywgaWYgYW55IChwYWxsb2MnZCBzZXBhcmF0ZWx5LCBOVUxMIGlm IHVudXNlZCkgKi8KKwlpbnQJCQludW1EZWFkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9y ZWQgaXRlbXMgKi8KKwlpbnQJCSAgICpkZWFkSXRlbXM7CQkvKiBpdGVtc1tdLXdpc2UgaW5kZXhl cyBvZiBkZWFkIGl0ZW1zICovCisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1v bmx5IHNjYW4sIHRoaXMgaXMgdGhlIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlCisJICogZm9yIHRo ZSBtYXRjaGluZyB0dXBsZXMgKHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiAgVGhlIHdv cmtzcGFjZQorCSAqIHNpemUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggQU0gKGJhdGNoX3R1 cGxlc193b3Jrc3BhY2UpLgorCSAqCisJICogY3VyclR1cGxlcyBwb2ludHMgaW50byB0aGUgdHJh aWxpbmcgcG9ydGlvbiBvZiB0aGlzIGFsbG9jYXRpb24sIHBhc3QKKwkgKiBpdGVtc1tdIGFuZCBh bnkgdGFibGUgQU0gdHJhaWxpbmcgZGF0YS4gIEl0IGlzIE5VTEwgZm9yIHBsYWluIGluZGV4CisJ ICogc2NhbnMuCisJICovCisJY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2Ug Zm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1hdGNoaW5nSXRlbSBpdGVtc1tGTEVYSUJMRV9BUlJBWV9N RU1CRVJdOyAvKiBtYXRjaGluZyBpdGVtcyAqLworfSBJbmRleFNjYW5CYXRjaERhdGE7CisKK3R5 cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8qCisg KiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5kZXggc2NhbiB0aGF0IHVz ZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVyZmFjZS4gIFNjYW5zIHVzZSBhIHJpbmcgYnVmZmVy IG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBUaGlzIGRhdGEgc3Ry dWN0dXJlIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhl CisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBh Z2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0 aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5 IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMg ZGVzaXJlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVyCit7CisJLyogY3Vy cmVudCBwb3NpdGlvbnMgaW4gSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBmb3Igc2NhbiAq LworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8K KwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLwor CisJLyogbWFya1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBidWZmZXIgd2hlbiBtYXJrQmF0Y2gg IT0gc2NhbkJhdGNoKSAqLworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaDsKKworCS8qCisJICog aGVhZEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBlYXJsaWVzdCBzdGlsbC12YWxpZCByaW5nIGJ1 ZmZlciBiYXRjaAorCSAqIHNsb3QgaW4gYmF0Y2hidWZbXS4gIFRoZSBhY3R1YWwgYXJyYXkgcG9z aXRpb24gZm9yIGl0cyBJbmRleFNjYW5CYXRjaAorCSAqIGlzIGhlYWRCYXRjaCAmIChJTkRFWF9T Q0FOX01BWF9CQVRDSEVTIC0gMSksIHNpbmNlIHRoZXNlIGluZGV4ZXMgdXNlCisJICogdW5zaWdu ZWQgd3JhcHBpbmcgYXJpdGhtZXRpYy4gIGhlYWRCYXRjaCBtdXN0IGJlIHRoZSBzY2FuJ3MgY3Vy cmVudAorCSAqIHNjYW5CYXRjaCAoaS5lLiB0aGUgY3VycmVudCBzY2FuUG9zIGJhdGNoKS4KKwkg Ki8KKwl1aW50OAkJaGVhZEJhdGNoOworCisJLyoKKwkgKiBuZXh0QmF0Y2ggaXMgYW4gaW5kZXgg dG8gdGhlIG5leHQgX2VtcHR5XyByaW5nIGJ1ZmZlciBiYXRjaCBzbG90IGluCisJICogYmF0Y2hi dWZbXS4gIEFzIHdpdGggaGVhZEJhdGNoLCB0aGUgYWN0dWFsIGJhdGNoYnVmW10gYXJyYXkgcG9z aXRpb24gaXMKKwkgKiBuZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpLiAg QSBuZXcgYmF0Y2ggY2FuIG9ubHkgYmUKKwkgKiBhcHBlbmRlZCB0byB0aGlzIHBvc2l0aW9uL3Ns b3Qgd2hlbiAhaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKCkuCisJICoKKwkgKiBOb3RlOiB0aGUgc2Nh bidzIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQgYmF0Y2ggKGl0cyB0YWlsIGJhdGNoKSBpcworCSAq IGFsd2F5cyBsb2NhdGVkIGF0IChuZXh0QmF0Y2ggLSAxKSAmIChJTkRFWF9TQ0FOX01BWF9CQVRD SEVTIC0gMSkuCisJICovCisJdWludDgJCW5leHRCYXRjaDsKK30gQmF0Y2hSaW5nQnVmZmVyOwor CiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgogICogV2UgdXNlIHRoZSBz YW1lIEluZGV4U2NhbkRlc2NEYXRhIHN0cnVjdHVyZSBmb3IgYm90aCBhbWdldHR1cGxlLWJhc2Vk CiAgKiBhbmQgYW1nZXRiaXRtYXAtYmFzZWQgaW5kZXggc2NhbnMuICBTb21lIGZpZWxkcyBhcmUg b25seSByZWxldmFudCBpbgotICogYW1nZXR0dXBsZS1iYXNlZCBzY2Fucy4KKyAqIGFtZ2V0dHVw bGUtYmFzZWQgc2NhbnMuICBPdGhlcnMgYXJlIG9ubHkgdXNlZCBpbiBhbWdldGJhdGNoLWJhc2Vk IHNjYW5zLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciB1c2VkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMg aXMgc3RvcmVkIGhlcmUgYXMgYSBmaXhlZCBhcnJheSBvZgorICogcG9pbnRlcnMgdG8gYmF0Y2hl cy4gIFdlIG5lZWQgYSBtaW5pbXVtIG9mIHR3byByaW5nIGJ1ZmZlciBiYXRjaGVzIChidXQgdXNl CisgKiBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKSwgc2luY2UgdGFibGUgQU1zIG9ubHkgcmVtb3Zl IGEgYmF0Y2ggYWZ0ZXIgdGhleSd2ZQorICogYWxyZWFkeSBjYWxsZWQgYW1nZXRiYXRjaCBhZ2Fp biBhbmQgYXBwZW5kZWQgdGhlIHJldHVybmVkIGJhdGNoLgogICovCisjZGVmaW5lIElOREVYX1ND QU5fQ0FDSEVfQkFUQ0hFUwkyCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTY0CisK K1N0YXRpY0Fzc2VydERlY2woSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyA8PSBQR19VSU5UOF9NQVgg KyAxLAorCQkJCSAiSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBtdXN0IGZpdCBpbiB1aW50OCByaW5n IGJ1ZmZlciBpbmRleGVzIik7CitTdGF0aWNBc3NlcnREZWNsKChJTkRFWF9TQ0FOX01BWF9CQVRD SEVTICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSkgPT0gMCwKKwkJCQkgIklOREVYX1ND QU5fTUFYX0JBVENIRVMgbXVzdCBiZSBhIHBvd2VyIG9mIDIiKTsKKwogdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuRGVzY0RhdGEKIHsKIAkvKiBzY2FuIHBhcmFtZXRlcnMgKi8KQEAgLTE1MCw2ICsz MjcsMjYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlpbnQJCQludW1iZXJP Zk9yZGVyQnlzOwkvKiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3JzICovCiAJc3RydWN0IFNj YW5LZXlEYXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRv cnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRl cmluZyBvcCBkZXNjcmlwdG9ycyAqLworCisJLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZh dGUgc3RhdGUgKi8KKwl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZp YyBpbmZvICovCisKKwkvKiBzY2FuJ3MgYW1nZXRiYXRjaCBzdGF0ZSAob25seSB1c2VkIGJ5IGFt Z2V0YmF0Y2gvdXNlYmF0Y2hyaW5nIHNjYW5zKSAqLworCUJhdGNoUmluZ0J1ZmZlciBiYXRjaHJp bmdidWY7CisKKwkvKgorCSAqIEFycmF5IG9mIHBvaW50ZXJzIHRvIHJlY3ljbGFibGUgYmF0Y2hl cywgdXNlZCBieSBhbGwgYW1nZXRiYXRjaCBzY2FucworCSAqIGFuZCBieSBhbWdldGJpdG1hcCBz Y2FucyBvZiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIGFtZ2V0YmF0Y2gKKwkgKi8KKwlJbmRl eFNjYW5CYXRjaCBiYXRjaGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBB cnJheSBvZiBwb2ludGVycyB0byBiYXRjaGVzLCByZWZlcmVuY2VkIHdpdGhpbiBiYXRjaHJpbmdi dWYgKi8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGJ1ZltJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXTsK KworCWJvb2wJCXVzZWJhdGNocmluZzsJLyogc2NhbiB1c2VzIGFtZ2V0YmF0Y2gvYmF0Y2hyaW5n YnVmPyAqLworCWJvb2wJCWJhdGNoSW1tZWRpYXRlVW5ndWFyZDsJLyogZWFnZXJseSBkcm9wIFRJ RCByZWN5Y2xpbmcKKwkJCQkJCQkJCQkgKiBpbnRlcmxvY2s/ICovCisKIAlib29sCQl4c193YW50 X2l0dXA7CS8qIGNhbGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMgKi8KIAlib29sCQl4c190ZW1w X3NuYXA7CS8qIHVucmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBlbmQ/ICovCiAKQEAgLTE1OCw5 ICszNTUsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJCWlnbm9y ZV9raWxsZWRfdHVwbGVzOwkvKiBkbyBub3QgcmV0dXJuIGtpbGxlZCBlbnRyaWVzICovCiAJYm9v bAkJeGFjdFN0YXJ0ZWRJblJlY292ZXJ5OwkvKiBwcmV2ZW50cyBraWxsaW5nL3NlZWluZyBraWxs ZWQKIAkJCQkJCQkJCQkgKiB0dXBsZXMgKi8KLQotCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBw cml2YXRlIHN0YXRlICovCi0Jdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3Bl Y2lmaWMgaW5mbyAqLworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4gTVZDQyBzbmFwc2hvdD8gKi8K Kwlib29sCQlNVkNDU2NhbjsKIAogCS8qCiAJICogSW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1h aW50YWluZWQgYnkgYWxsIGluZGV4IEFNcyBkdXJpbmcgYm90aApAQCAtMTg2LDcgKzM4Miw3IEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAkvKgogCSAqIFJlc29sdmVkIHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjaywgd2hpY2ggaXMgc2V0IGJ5Ci0JICogdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4gYXQgdGhlIHN0YXJ0IG9mIGFtZ2V0dHVwbGUgc2NhbnMKKwkg KiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXRiYXRjaC9hbWdl dHR1cGxlIHNjYW5zCiAJICovCiAJYm9vbAkJKCp4c19nZXRuZXh0X3Nsb3QpIChzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEgKnNjYW4sCiAJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK QEAgLTE5NCw2ICszOTAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAog CWJvb2wJCXhzX3JlY2hlY2s7CQkvKiBUIG1lYW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tl ZCAqLwogCisJLyogYmF0Y2ggc2l6ZSBpbmZvcm1hdGlvbiwgc2V0IG9uY2UgYnkgaW5kZXggQU0g aW4gYW1iZWdpbnNjYW4gKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNpemUgb2YgZWFj aCBiYXRjaCdzIGl0ZW1zW10gYXJyYXkgKi8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9z aXplOwkvKiBNQVhBTElHTidkIGluZGV4IEFNIG9wYXF1ZSBzaXplICovCisJdWludDE2CQliYXRj aF90dXBsZXNfd29ya3NwYWNlOyAvKiBjdXJyVHVwbGVzIHdvcmtzcGFjZSBzaXplICovCisKKwkv KiBDb21wdXRlZCBvZmZzZXQsIHVzZWQgdG8gZ2V0IHRhYmxlIEFNJ3Mgb3BhcXVlIGFyZWEgZnJv bSBhIGJhdGNoICovCisJdWludDE2CQliYXRjaF90YWJsZV9vZmZzZXQ7CisKIAkvKgogCSAqIFdo ZW4gZmV0Y2hpbmcgd2l0aCBhbiBvcmRlcmluZyBvcGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUg T1JERVIgQlkKIAkgKiBleHByZXNzaW9ucyBvZiB0aGUgbGFzdCByZXR1cm5lZCB0dXBsZSwgYWNj b3JkaW5nIHRvIHRoZSBpbmRleC4gIElmCkBAIC0yMzcsNCArNDQxLDEzNSBAQCB0eXBlZGVmIHN0 cnVjdCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiB9IFN5 c1NjYW5EZXNjRGF0YTsKIAorLyoKKyAqIEhvdyBtYW55IGJhdGNoZXMgYXJlIGN1cnJlbnRseSBs b2FkZWQgaW4gdGhlIHJpbmcgYnVmZmVyPworICovCitzdGF0aWMgaW5saW5lIHVpbnQ4CitpbmRl eF9zY2FuX2JhdGNoX2NvdW50KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiAo dWludDgpIChzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+YmF0Y2hy aW5nYnVmLmhlYWRCYXRjaCk7Cit9CisKKy8qCisgKiBEbyB3ZSBhbHJlYWR5IGhhdmUgYSBiYXRj aCBsb2FkZWQgYXQgJ2lkeCcgb2Zmc2V0IGluIHNjYW4ncyByaW5nIGJ1ZmZlcj8KKyAqCisgKiBO T1RFOiBhIHN0YWxlIGJhdGNoIGlkeCBjYW4gYWxpYXMgYSBjdXJyZW50bHktbG9hZGVkIHJhbmdl IGFmdGVyIHVpbnQ4CisgKiBvdmVyZmxvdywgcHJvZHVjaW5nIGEgZmFsc2UgcG9zaXRpdmUuICBG YWxzZSBuZWdhdGl2ZXMgYXJlIG5vdCBwb3NzaWJsZS4KKyAqLworc3RhdGljIGlubGluZSBib29s CitpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDgg aWR4KQoreworCXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0 Y2gpID49IDAgJiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNo KSA8IDA7Cit9CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2Yg YmF0Y2hlcz8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2Z1bGwo SW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfY291 bnQoc2NhbikgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30KKworLyoKKyAqIFJldHVybiBi YXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LgorICovCitzdGF0aWMgaW5saW5lIEluZGV4U2Nh bkJhdGNoCitpbmRleF9zY2FuX2JhdGNoKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBp ZHgpCit7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIGlkeCkpOworCisJ cmV0dXJuIHNjYW4tPmJhdGNoYnVmW2lkeCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSld OworfQorCisvKgorICogQXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNjYW4ncyBiYXRjaCByaW5nIGJ1 ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJ bmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQmF0Y2hS aW5nQnVmZmVyICpyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwl1aW50OAkJbmV4dEJh dGNoID0gcmluZ2J1Zi0+bmV4dEJhdGNoOworCisJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1 bGwoc2NhbikpOworCisJc2Nhbi0+YmF0Y2hidWZbbmV4dEJhdGNoICYgKElOREVYX1NDQU5fTUFY X0JBVENIRVMgLSAxKV0gPSBiYXRjaDsKKwlyaW5nYnVmLT5uZXh0QmF0Y2grKzsKK30KKworLyoK KyAqIFJldHVybiB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJhc2Ugb2YgYSBiYXRjaCAodXNlZCB0byBw ZnJlZSBiYXRjaGVzKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgoraW5kZXhfc2Nhbl9iYXRj aF9iYXNlKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sK KwlyZXR1cm4gKGNoYXIgKikgYmF0Y2ggLSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7Cit9CisK Ky8qCisgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgor ICoKKyAqIEFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbSB3aXRoaW4gdGhlIHByb3ZpZGVkIGJhdGNo IChvciB0byB0aGUgcHJldmlvdXMgaXRlbSwKKyAqIHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4K KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIGFkdmFuY2VkLiAg UmV0dXJucyBmYWxzZSB3aGVuIHRoZXJlCisgKiBhcmUgbm8gbW9yZSBpdGVtcyBmcm9tIHRoZSBi YXRjaCByZW1haW5pbmcgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICovCitzdGF0aWMg aW5saW5lIGJvb2wKK2luZGV4X3NjYW5fcG9zX2FkdmFuY2UoU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sCisJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3Mp Cit7CisJQXNzZXJ0KHBvcy0+dmFsaWQpOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bvcy0+aXRlbSA+IGJhdGNoLT5sYXN0SXRlbSkKKwkJ CXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQkJCQkJCS8qIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJk ICovCisJeworCQlpZiAoLS1wb3MtPml0ZW0gPCBiYXRjaC0+Zmlyc3RJdGVtKQorCQkJcmV0dXJu IGZhbHNlOworCX0KKworCS8qIEFkdmFuY2VkIHdpdGhpbiBiYXRjaCAqLworCXJldHVybiB0cnVl OworfQorCisvKgorICogQWR2YW5jZSBiYXRjaCBwb3NpdGlvbiB0byB0aGUgc3RhcnQgb2YgaXRz IG5ldyBiYXRjaC4KKyAqCisgKiBXaGVuIHdlJ3JlIGNhbGxlZCwgdGhpcyBwb3NpdGlvbiBzaG91 bGQgcG9pbnQgdG8gYSBiYXRjaCB0aGF0IGNhbGxlciBqdXN0CisgKiBmaW5pc2hlZCBjb25zdW1p bmcgZnJvbS4gIFdoZW4gd2UgcmV0dXJuLCB0aGlzIHBvc2l0aW9uIHdpbGwgcG9pbnQgdG8KKyAq IG5leHRCYXRjaCwgdGhlIG5leHQgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIuICBXZSdsbCBo YXZlIGFsc28gc2V0IHRoZQorICogcG9zaXRpb24ncyBpdGVtIG9mZnNldCB0byBuZXh0QmF0Y2gn cyBmaXJzdCBpdGVtIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24KKyAqICh3aGljaCBpcyBhY3R1YWxs eSBuZXh0QmF0Y2gncyBfbGFzdF8gaXRlbSB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgor ICogbmV4dEJhdGNoIGRvZXNuJ3QgaGF2ZSB0byBiZSAoYW5kIG9mdGVuIGlzbid0KSB0aGUgbW9z dCByZWNlbnRseSBhcHBlbmRlZAorICogYmF0Y2ggaW4gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4g IEl0IGlzIG1lcmVseSB0aGUgbmV4dCBiYXRjaCBpbiBsaW5lIHRvIGJlCisgKiBjb25zdW1lZCBm cm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIG91ciBjYWxsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAoraW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkJIEluZGV4U2NhbkJhdGNoIG5leHRCYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQor eworCUFzc2VydChuZXh0QmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCUFzc2VydChuZXh0QmF0 Y2gtPmZpcnN0SXRlbSA8PSBuZXh0QmF0Y2gtPmxhc3RJdGVtKTsKKworCS8qIEluY3JlbWVudCBi YXRjaCAobWlnaHQgd3JhcCksIG9yIGluaXRpYWxpemUgaXQgdG8gemVybyAqLworCWlmIChwb3Mt PnZhbGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQorCQlwb3MtPmJhdGNoID0gMDsKKworCXBv cy0+dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9u KSkKKwkJcG9zLT5pdGVtID0gbmV4dEJhdGNoLT5maXJzdEl0ZW07CisJZWxzZQorCQlwb3MtPml0 ZW0gPSBuZXh0QmF0Y2gtPmxhc3RJdGVtOworfQorCiAjZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9I ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBlMDVjMDlmZGIuLmRmZGJjOTNlNiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oCkBAIC00NTIsMTAgKzQ1MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91 dGluZQogCSAqIGZsYWdzIGlzIGEgYml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdW5k ZXJseWluZyB0YWJsZSBzY2FuCiAJICogYmVoYXZpb3IuIFNlZSBzY2FuX2JlZ2luKCkgZm9yIG1v cmUgaW5mb3JtYXRpb24gb24gcGFzc2luZyB0aGVzZS4KIAkgKgotCSAqIENhbGxiYWNrIGlzIHJl c3BvbnNpYmxlIGZvciBzZXR0aW5nIEluZGV4U2NhbkRlc2MueHNfZ2V0bmV4dF9zbG90IHRvCi0J ICogdGhlIGFwcHJvcHJpYXRlIHNsb3QtYmFzZWQgY2FsbGJhY2suICBUdXBsZXMgY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEKLQkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4gIE5vIHNlcGFy YXRlIHNsb3QtYmFzZWQgY2FsbGJhY2sgZXhpc3RzIGluCi0JICogdGhpcyBzdHJ1Y3QhCisJICog Q2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgc2NhbidzIGJhdGNo IHJpbmcgYnVmZmVyCisJICogKHdoZW4gdGhlIHNjYW4ncyBpbmRleCBBTSBzdXBwb3J0cyB0aGUg YW1nZXRiYXRjaCBpbnRlcmZhY2UpLCBhbmQgZm9yCisJICogc2V0dGluZyBJbmRleFNjYW5EZXNj LnhzX2dldG5leHRfc2xvdCB0byB0aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZAorCSAqIGNhbGxi YWNrLiAgVHVwbGVzIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdCgpLgorCSAqIE5vIHNlcGFyYXRlIHNsb3QtYmFzZWQgY2FsbGJhY2sgZXhpc3RzIGluIHRo aXMgc3RydWN0IQogCSAqCiAJICogSW4gcHJpbmNpcGxlIGEgc2luZ2xlIGdlbmVyYWwtcHVycG9z ZSBjYWxsYmFjayAoc3RvcmVkIGhlcmUpIHdvdWxkCiAJICogc3VmZmljZSwgYnV0IHVzaW5nIHNw ZWNpYWxpemVkIHZhcmlhbnRzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gcHJvdmlkZQpAQCAtNDY3 LDEwICs0NjgsMzEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKiBjb2x1bW5z IGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lv biBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVu IGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCiAJICogb2xkZXIgdmVyc2lvbiBvZiB0aGUgdHVwbGUu CisJICoKKwkgKiBDYWxsYmFjayBhbHNvIGluaXRpYWxpemVzIHRoZSBiYXRjaF9vcGFxdWVfc2l6 ZSBhbmQgYmF0Y2hfcGVyX2l0ZW1fc2l6ZQorCSAqIGZpZWxkcyBpbiB0aGUgcmV0dXJuZWQgc3Ry dWN0LCB0byBsZXQgdGhlIGNvcmUgY29kZSBrbm93IGhvdyBtdWNoCisJICogbWVtb3J5IHdpbGwg YmUgcmVxdWlyZWQgaW4gdGhlIG9wYXF1ZSB0YWJsZSBBTSBwb3J0aW9ucyBvZiBlYWNoIGJhdGNo CisJICogYWxsb2NhdGlvbiAoZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMpLiAgVGFibGUg QU1zIGNhbiBzdG9yZSB0aGluZ3MKKwkgKiBsaWtlIHBlci1pdGVtIHZpc2liaWxpdHkgaW5mb3Jt YXRpb24gaW4gZWFjaCBhbGxvY2F0ZWQgYmF0Y2guICBTZWUKKwkgKiByZWxzY2FuLmggZm9yIGRl dGFpbHMuCiAJICovCiAJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hf YmVnaW4pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkJICB1aW50MzIgZmxhZ3Mp OwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVh IHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisJICoKKwkgKiBDYWxsZWQgYnkgaW5kZXhhbV91 dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKwkgKiBUYWJs ZSBBTXMgc2hvdWxkIHNldCB1cCBpdHMgb3BhcXVlIGFyZWEgKGF0IGEgbmVnYXRpdmUgb2Zmc2V0 IGZyb20gdGhlCisJICogYmF0Y2ggcG9pbnRlcikgYW5kIGFueSB0cmFpbGluZyBwZXItaXRlbSBk YXRhIChlLmcuIHZpc2liaWxpdHkgZmxhZ3MpLgorCSAqCisJICogJ25ld19hbGxvYycgaXMgdHJ1 ZSBmb3IgZnJlc2hseSBwYWxsb2MnZCBiYXRjaGVzLCBmYWxzZSBmb3IgYmF0Y2hlcworCSAqIHJl Y3ljbGVkIGZyb20gdGhlIGNhY2hlLgorCSAqLworCXZvaWQJCSgqaW5kZXhfZmV0Y2hfYmF0Y2hf aW5pdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBi YXRjaCwKKwkJCQkJCQkJCQkgICBib29sIG5ld19hbGxvYyk7CisKIAkvKgogCSAqIFJlc2V0IGlu ZGV4IHNjYW4gZm9yIGEgcmVzY2FuLiAgUmVzZXRzIHRhYmxlLW93bmVkIHJlc291cmNlcy4KIAkg Ki8KQEAgLTQ4MSw2ICs1MDMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkg Ki8KIAl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKwkv KgorCSAqIE1hcmsgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBzbyBpdCBjYW4gYmUgcmVzdG9y ZWQgbGF0ZXIKKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX21hcmtwb3MpIChJbmRleFNjYW5E ZXNjIHNjYW4pOworCisJLyoKKwkgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBtYXJrZWQgc2NhbiBw b3NpdGlvbgorCSAqLworCXZvaWQJCSgqaW5kZXhfZmV0Y2hfcmVzdHJwb3MpIChJbmRleFNjYW5E ZXNjIHNjYW4pOworCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogQ2FsbGJhY2tzIGZvciBub24t bW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKIAkgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTEyNzQsNiArMTMwNiwyOCBAQCB0YWJsZV9pbmRleF9mZXRjaF9yZXNldChJbmRl eFNjYW5EZXNjIHNjYW4pCiAJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9m ZXRjaF9yZXNldChzY2FuKTsKIH0KIAorLyoKKyAqIE1hcmsgdGhlIGN1cnJlbnQgc2NhbiBwb3Np dGlvbiBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lk Cit0YWJsZV9pbmRleF9mZXRjaF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3Nl cnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVh bS0+aW5kZXhfZmV0Y2hfbWFya3BvcyhzY2FuKTsKK30KKworLyoKKyAqIFJlc3RvcmUgYSBwcmV2 aW91c2x5IG1hcmtlZCBzY2FuIHBvc2l0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFi bGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChz Y2FuLT54c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5p bmRleF9mZXRjaF9yZXN0cnBvcyhzY2FuKTsKK30KKwogLyoKICAqIFJlbGVhc2UgcmVzb3VyY2Vz IGFuZCBkZWFsbG9jYXRlIGluZGV4IGZldGNoIGhlbGQgaW4gdGhlIHNjYW4ncyB1bmRlcmx5aW5n CiAgKiBJbmRleEZldGNoVGFibGVEYXRhLgpAQCAtMTI4Niw2ICsxMzQwLDIxIEBAIHRhYmxlX2lu ZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiAJc2Nhbi0+aGVhcFJlbGF0aW9uLT5y ZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7CiB9CiAKKy8qCisgKiBJbml0aWFsaXpl IHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRp b24uCisgKgorICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBu ZXcgb3IgcmVjeWNsZWQgYmF0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfaW5k ZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoLAorCQkJCQkJCSBib29sIG5ld19hbGxvYykKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZl dGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfYmF0 Y2hfaW5pdChzY2FuLCBiYXRjaCwKKwkJCQkJCQkJCQkJCQkJICAgbmV3X2FsbG9jKTsKK30KKwog LyoKICAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90 YCwgc2Nhbm5pbmcgaW4gdGhlCiAgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVl IGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aAppbmRleCA2OTNiODc5ZjcuLjg1OTkxZDQ0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE0 MzcsMTIgKzE0MzcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJYW1v cHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJCWFtc2VhcmNobnVsbHM7 Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAqLwotCWJvb2wJCWFtaGFz Z2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9yIGdldHR1cGxlKSBpbnRl cmZhY2U/ICovCisJYm9vbAkJYW1jYW5wbGFpbnNjYW47CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0 Yml0bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNh bnBhcmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8q IGlzIEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNh bm1hcmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGlu Y2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGJkYjMwNzUyZS4uOWY0NGNmMzFlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbi5jCkBAIC0yOTgsMTAgKzI5OCwxMiBAQCBicmluaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4g PSBicmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVM TCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxM LAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnJpbmVu ZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5h bXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQku YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlhLi44ZjcwMzNkNjIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkgQEAgZ2luZ2V0Yml0bWFwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICogaW50byB0aGUgbWFpbiBpbmRleCwg YW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRpbWUgZHVyaW5nIHRoZQogCSAqIG1h aW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xsIGp1c3QgcmUtc2V0IHRoZSBzYW1l IGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3NpYmlsaXR5IG9mIGR1cGxpY2F0ZSB2 aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAqIGNhbid0IHN1cHBvcnQgdGhlIGFt Z2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0IHdvdWxkIG5vdCBkbwotCSAqIHRv IHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlIGNvbmN1 cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJl bHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRj aCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3QgZG8gdG8gc2NhbiB0aGUgbWFpbiBp bmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UKKwkgKiBjb25jdXJyZW50IGNsZWFu dXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KIAkgKi8KIAlzY2Fu UGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGls LmMKaW5kZXggZmU3Yjk4NGZmLi4zMjQyMjg2NWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j CkBAIC04MiwxMCArODIsMTIgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1i ZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpbnJlc2NhbiwKIAkJLmFt Z2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRj aCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g Z2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9 IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQku YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBO VUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5k ZXggODU2NWUyMjViLi5hNThjNTIyMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEwMywx MCArMTAzLDEyIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpc3RyZXNjYW4sCiAJCS5hbWdldHR1 cGxlID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRi YXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFw ID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpc3RlbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEws CiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2gu YwppbmRleCA4ZDhjZDMwZGMuLjlhZTlmMDQ0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAt MTE0LDEwICsxMTQsMTIgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKIAkJLmFt Z2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5n dWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCi0JCS5h bW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0g TlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggNjU3YWU0NDE0Li4xZjk3YjZlMTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjU1NSw4ICsyNTU1 LDExIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAku cGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZSA9IHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9yZWlu aXRpYWxpemUsCiAKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4sCisJLmluZGV4X2ZldGNoX2JhdGNoX2luaXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hf aW5pdCwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJ LmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X2ZldGNo X21hcmtwb3MgPSBoZWFwYW1faW5kZXhfZmV0Y2hfbWFya3BvcywKKwkuaW5kZXhfZmV0Y2hfcmVz dHJwb3MgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3MsCiAKIAkudHVwbGVfaW5zZXJ0ID0g aGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFt X3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9pbmRleHNjYW4uYwppbmRleCBkNzYzYTMzOWMuLjQxN2VhNzY2MiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtMTYsMTIgKzE2LDE5IEBACiAKICNp bmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5j bHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgog I2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIAogCitzdGF0aWMg Ym9vbCBoZWFwYW1faW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRleF9vbmx5 X2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Owogc3RhdGljIGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAog CQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CkBAIC0zOCwxMSArNDUsMjggQEAg c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNo X3R1cGxlX2ltcGwoUmVsYXRpb24gcmUKIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGlu ZSBib29sIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJ CQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkJCQkJCQkg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkJCQkJCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seSk7 CisJCQkJCQkJCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJCQkgYm9v bCBhbWdldGJhdGNoKTsKIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhl YXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJCQkJ CSAgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkJCQkJCQkJCQkgICBUdXBsZVRh YmxlU2xvdCAqc2xvdCwKLQkJCQkJCQkJCQkJCQkJCSAgIGJvb2wgKmhlYXBfY29udGludWUpOwor CQkJCQkJCQkJCQkJCQkJICAgYm9vbCAqaGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQkJCQkJCSAg IGJvb2wgYW1nZXRiYXRjaCk7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRl bVBvaW50ZXIgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNj IHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAor CQkJCQkJCQkJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJ CQkJCQkJCQkJCSBib29sICphbGxfdmlzaWJsZSk7CitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVy IGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJCSAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2gg c2NhbkJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJ CQkJCQkJCQkJCQkJCSAgYm9vbCAqYWxsX3Zpc2libGUpOworc3RhdGljIHZvaWQgaGVhcGFtX2lu ZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBi YXRjaCwKKwkJCQkJCQkJCQkJICBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCQkJCSAg QmF0Y2hSaW5nSXRlbVBvcyAqcG9zKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRleCBT Y2FuIENhbGxiYWNrcyBmb3IgaGVhcCBBTQpAQCAtNTQsMjYgKzc4LDkyIEBAIGhlYXBhbV9pbmRl eF9mZXRjaF9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIHsKIAlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRh KTsKIAorCWhzY2FuLT54c19iYXNlLmJhdGNoX29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9m KEhlYXBCYXRjaERhdGEpKTsKKwloc2Nhbi0+eHNfYmFzZS5iYXRjaF9wZXJfaXRlbV9zaXplID0g c2l6ZW9mKHVpbnQ4KTsgLyogdmlzSW5mbyBlbGVtZW50IHNpemUgKi8KIAloc2Nhbi0+eHNfYmFz ZS5mbGFncyA9IGZsYWdzOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQloc2Nh bi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWhzY2FuLT54c192bWJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7CiAKLQkvKiBSZXNvbHZlIHdoaWNoIGdldG5leHRfc2xvdCBpbXBsZW1lbnRh dGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAqLwotCWlmIChzY2FuLT54c193YW50X2l0dXApCi0J CXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRf c2xvdDsKKwkvKiBDdXJyZW50IGhlYXAgYmxvY2sgc3RhdGUgKi8KKwlBc3NlcnQoaHNjYW4tPnhz X2NidWYgPT0gSW52YWxpZEJ1ZmZlcik7CisJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051 bWJlcjsKKworCS8qIFZNIHJlbGF0ZWQgc3RhdGUgKi8KKwlBc3NlcnQoaHNjYW4tPnhzX3ZtYnVm ZmVyID09IEludmFsaWRCdWZmZXIpOworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CisKKwkvKiBS ZXNvbHZlIHdoaWNoIHhzX2dldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRo aXMgc2NhbiAqLworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRj aCAhPSBOVUxMKQorCXsKKwkJLyogYW1nZXRiYXRjaCBpbmRleCBBTSAqLworCQlpZiAoc2Nhbi0+ eHNfd2FudF9pdHVwKQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29u bHlfYmF0Y2hfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3Qg PSBoZWFwYW1faW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90OworCisJCS8qIFNldCB1cCBz Y2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIgaW4gcGFzc2luZyAqLworCQl0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX2luaXQoc2Nhbik7CisJfQogCWVsc2UKLQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0g aGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdDsKKwl7CisJCS8qIGFtZ2V0dHVw bGUgaW5kZXggQU0gKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXNjYW4tPnhzX2dl dG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdDsKKwkJZWxz ZQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dl dG5leHRfc2xvdDsKKwl9CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQogCisvKgorICog SW5pdGlhbGl6ZSB0aGUgaGVhcCB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSAoSGVh cEJhdGNoRGF0YSkuCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBl YWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqLwordm9pZAoraGVhcGFtX2luZGV4X2ZldGNo X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJ CQkJCQkgIGJvb2wgbmV3X2FsbG9jKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBf YmF0Y2hfZGF0YShzY2FuLCBiYXRjaCk7CisKKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCXsK KwkJaWYgKG5ld19hbGxvYykKKwkJeworCQkJLyoKKwkJCSAqIFRoZSB2aXNJbmZvIHBvaW50ZXIg aXMgc3RvcmVkIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBwYWxsb2MnZAorCQkJICogc3BhY2Us IGluIHRoZSBmaXhlZC1zaXplZCB0YWJsZSBBTSBvcGFxdWUgYXJlYS4gIHZpc0luZm8gcG9pbnRz CisJCQkgKiB0byBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUtc2l6ZWQgaXRlbXNb bWF4aXRlbXNiYXRjaF0KKwkJCSAqIGFycmF5ICh0byBhIHNwYWNlIHRoYXQgaXMgYWxzbyBzaXpl ZCBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIgdGhlCisJCQkgKiBpbmRleCBBTSBzZXQgbWF4aXRlbXNi YXRjaCB0bykuCisJCQkgKi8KKwkJCVNpemUJCWl0ZW1zRW5kOworCisJCQlpdGVtc0VuZCA9IE1B WEFMSUdOKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCQkJCQkJc2l6 ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJaGJhdGNo LT52aXNJbmZvID0gKHVpbnQ4ICopICgoY2hhciAqKSBiYXRjaCArIGl0ZW1zRW5kKTsKKwkJfQor CisJCS8qIENsZWFyIHZpc2liaWxpdHkgZmxhZ3MgKG5lZWRlZCBmb3IgYm90aCBuZXcgYW5kIHJl Y3ljbGVkIGJhdGNoZXMpICovCisJCW1lbXNldChoYmF0Y2gtPnZpc0luZm8sIDAsIHNjYW4tPm1h eGl0ZW1zYmF0Y2gpOworCX0KKwllbHNlCisJeworCQloYmF0Y2gtPnZpc0luZm8gPSBOVUxMOwor CX0KK30KKwogdm9pZAogaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nh bikKIHsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAq KSBzY2FuLT54c19oZWFwZmV0Y2g7CisKKwkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNl c3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwor CisJLyogUmVzZXQgYmF0Y2ggcmluZyBidWZmZXIgc3RhdGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0 Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNlKTsKKwog CS8qCi0JICogUmVzZXRzIGFyZSBhIG5vLW9wLgotCSAqCiAJICogRGVsaWJlcmF0ZWx5IGF2b2lk IGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQgeHNfdm1idWZmZXIuCiAJICog VGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4gdGlnaHQgbmVzdGVkIGxvb3Agam9pbnMg KGl0IGNhbiBhdm9pZAogCSAqIHJlcGVhdGVkIHBpbm5pbmcgYW5kIHVucGlubmluZyBvZiB0aGUg c2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMpLgpAQCAtOTMsOSArMTgzLDM1IEBAIGhlYXBhbV9p bmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhz Y2FuLT54c192bWJ1ZmZlcikpCiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsK IAorCS8qIEZyZWUgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzICovCisJaWYgKHNjYW4tPnVz ZWJhdGNocmluZykKKwkJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisKIAlwZnJl ZShoc2Nhbik7CiB9CiAKKy8qCisgKiBTYXZlIGJhdGNoIHJpbmcgYnVmZmVyJ3MgY3VycmVudCBz Y2FuUG9zIGFzIGl0cyBtYXJrUG9zCisgKi8KK3ZvaWQKK2hlYXBhbV9pbmRleF9mZXRjaF9tYXJr cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+dXNlYmF0Y2hyaW5nKTsK KworCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3Moc2Nhbik7Cit9CisKKy8qCisgKiBS ZXN0b3JlIGJhdGNoIHJpbmcgYnVmZmVyJ3MgbWFya1BvcyBpbnRvIGl0cyBzY2FuUG9zCisgKi8K K3ZvaWQKK2hlYXBhbV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7 CisJQXNzZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CisKKwl0YWJsZWFtX3V0aWxfYmF0Y2hzY2Fu X3Jlc3RvcmVfcG9zKHNjYW4pOworfQorCiAvKgogICoJaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcgkt IHNlYXJjaCBIT1QgY2hhaW4gZm9yIHR1cGxlIHNhdGlzZnlpbmcgc25hcHNob3QKICAqCkBAIC0y OTYsMTYgKzQxMiw0MCBAQCBoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50 ZXIgdGlkLCBTbmFwc2hvdCBzbmFwc2hvdCwKIAlyZXR1cm4gZm91bmQ7CiB9CiAKKy8qIHhzX2dl dG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXRiYXRjaCwgcGxhaW4gaW5kZXggc2NhbiAqLworc3Rh dGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X3BsYWluX2JhdGNoX2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAorCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoIXNj YW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXJldHVybiBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UsIHRy dWUpOworfQorCisvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0YmF0Y2gsIGluZGV4 LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4 X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkK K3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp OworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBz bG90LCB0cnVlLCB0cnVlKTsKK30KKwogLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdl dHR1cGxlLCBwbGFpbiBpbmRleCBzY2FuICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29s CiBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nh biwKIAkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkgIFR1cGxl VGFibGVTbG90ICpzbG90KQogewotCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3Nl cnQoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJiAhc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAlBc3NlcnQo c2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAKLQly ZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZh bHNlKTsKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24s IHNsb3QsIGZhbHNlLCBmYWxzZSk7CiB9CiAKIC8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazog YW1nZXR0dXBsZSwgaW5kZXgtb25seSBzY2FuICovCkBAIC0zMTQsMTAgKzQ1NCwxMCBAQCBoZWFw YW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJ CQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90 ICpzbG90KQogewotCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54 c193YW50X2l0dXAgJiYgIXNjYW4tPnVzZWJhdGNocmluZyk7CiAJQXNzZXJ0KHNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCi0JcmV0dXJuIGhlYXBh bV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlKTsKKwlyZXR1 cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUs IGZhbHNlKTsKIH0KIAogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKQEAg LTM5MCw3ICs1MzAsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChSZWxhdGlvbiBy ZWwsCiB9CiAKIC8qCi0gKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGJvdGggaGVhcGFtX2lu ZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgorICogQ29tbW9uIGltcGxlbWVudGF0aW9uIGZv ciBhbGwgZm91ciBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCiAgKgogICog VGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFu ZCB0aGUgc25hcHNob3Qgd2FzCiAgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxl IGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCkBAIC0zOTksMTIgKzUzOSwxMyBAQCBo ZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChSZWxhdGlvbiByZWwsCiAgKiBkcm9wcGVkIGJ5 IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGhlYXBhbV9pbmRleF9m ZXRjaF9lbmQKICAqIHRocm91Z2ggaW5kZXhfZW5kc2NhbikuCiAgKgotICogVGhlIGluZGV4X29u bHkgcGFyYW1ldGVyIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGF0IGVhY2ggY2FsbCBzaXRl LAotICogYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVh Y2ggdmFyaWFudC4KKyAqIFRoZSBpbmRleF9vbmx5IGFuZCBhbWdldGJhdGNoIHBhcmFtZXRlcnMg YXJlIGNvbXBpbGUtdGltZSBjb25zdGFudHMgYXQgZWFjaAorICogY2FsbCBzaXRlLCBhbGxvd2lu ZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50Lgog ICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAogaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAotCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5KQorCQkJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJICBib29sIGFt Z2V0YmF0Y2gpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVh cERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCWJvb2wJICAgKmhlYXBfY29udGludWUgPSAm c2Nhbi0+eHNfaGVhcF9jb250aW51ZTsKQEAgLTQxOCwxNCArNTU5LDIwIEBAIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJaWYgKCEqaGVhcF9jb250aW51ZSkKIAkJewogCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBm cm9tIHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0 aW9uKTsKKwkJCWlmIChhbWdldGJhdGNoKQorCQkJCXRpZCA9IGhlYXBhbV9pbmRleF9nZXRuZXh0 X3NjYW5iYXRjaF9wb3Moc2NhbiwgaHNjYW4sCisJCQkJCQkJCQkJCQkJCSBkaXJlY3Rpb24sCisJ CQkJCQkJCQkJCQkJCSBpbmRleF9vbmx5ID8KKwkJCQkJCQkJCQkJCQkJICZhbGxfdmlzaWJsZSA6 IE5VTEwpOworCQkJZWxzZQorCQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVj dGlvbik7CiAKIAkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25l ICovCiAJCQlpZiAodGlkID09IE5VTEwpCiAJCQkJYnJlYWs7CiAKLQkJCS8qIEZvciBpbmRleC1v bmx5IHNjYW5zLCBjaGVjayB0aGUgdmlzaWJpbGl0eSBtYXAgKi8KLQkJCWlmIChpbmRleF9vbmx5 KQorCQkJLyogRm9yIG5vbi1iYXRjaCBpbmRleC1vbmx5IHNjYW5zLCBjaGVjayB0aGUgdmlzaWJp bGl0eSBtYXAgKi8KKwkJCWlmIChpbmRleF9vbmx5ICYmICFhbWdldGJhdGNoKQogCQkJCWFsbF92 aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJCQkg SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAogCQkJCQkJCQkJCQkgJmhzY2FuLT54c192 bWJ1ZmZlcik7CkBAIC00NTAsNyArNTk3LDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQlzY2FuLT5p bnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMrKzsKIAogCQkJCWlmICghaGVhcGFtX2luZGV4 X2ZldGNoX2hlYXAoc2NhbiwgaHNjYW4sIHNsb3QsCi0JCQkJCQkJCQkJCSBoZWFwX2NvbnRpbnVl KSkKKwkJCQkJCQkJCQkJIGhlYXBfY29udGludWUsIGFtZ2V0YmF0Y2gpKQogCQkJCXsKIAkJCQkJ LyoKIAkJCQkJICogTm8gdmlzaWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQgYSB2aXNpdGVkLXBh Z2VzIGxpbWl0CkBAIC00ODIsNyArNjI5LDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSAqIHdhbnQg dXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlCiAJ CQkJICogaG90IGNoYWluIGlzIGFsd2F5cyBnb29kIGVub3VnaC4KIAkJCQkgKi8KLQkJCQlBc3Nl cnQoISgqaGVhcF9jb250aW51ZSAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkp KTsKKwkJCQlBc3NlcnQoISgqaGVhcF9jb250aW51ZSAmJiBzY2FuLT5NVkNDU2NhbikpOwogCQkJ fQogCQkJZWxzZQogCQkJewpAQCAtNTA5LDcgKzY1Niw4IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0 X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCSAq IGVudHJ5LiAgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIg dGhlCiAJCQkgKiBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleC4KIAkJCSAqLwotCQkJaWYgKGhlYXBh bV9pbmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLCBzbG90LCBoZWFwX2NvbnRpbnVlKSkKKwkJ CWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBoc2Nhbiwgc2xvdCwgaGVhcF9jb250 aW51ZSwKKwkJCQkJCQkJCQlhbWdldGJhdGNoKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0K QEAgLTUzMSw3ICs2NzksOCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBib29sCiBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCi0JCQkJCQlUdXBsZVRhYmxlU2xv dCAqc2xvdCwgYm9vbCAqaGVhcF9jb250aW51ZSkKKwkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90 LCBib29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJYm9vbCBhbWdldGJhdGNoKQogewogCWJvb2wJ CWFsbF9kZWFkID0gZmFsc2U7CiAJYm9vbAkJZm91bmQ7CkBAIC01NDUsMTQgKzY5NCwzMjIgQEAg aGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuLAogCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0 aW9uKTsKIAogCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91 bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5 IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0Ci0JICogYW1n ZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3 aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNv LiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkgKiBJZiB3 ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCBy ZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4gcmVj b3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0MgdG8gZG8gc28uICBTZWUgY29t bWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KIAkgKi8KIAlpZiAoIXNjYW4tPnhhY3RT dGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwor CXsKKwkJaWYgKGFtZ2V0YmF0Y2gpCisJCXsKKwkJCWlmIChhbGxfZGVhZCkKKwkJCQl0YWJsZWFt X3V0aWxfc2NhbnBvc19raWxsaXRlbShzY2FuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJ CQkgKiBUZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9y IHRoYXQgVElECisJCQkgKiAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0IGNhbGws IGluIGluZGV4X2dldG5leHRfdGlkKQorCQkJICovCisJCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gYWxsX2RlYWQ7CisJCX0KKwl9CiAKIAlyZXR1cm4gZm91bmQ7CiB9CisKKy8qCisgKiBHZXQg bmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2Fu IGRpcmVjdGlvbi4KKyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBjYWxs ZXIgcGFzc2VzIGEgbm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5 c19pbmxpbmUgSXRlbVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJQmF0Y2hS aW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmlu Z0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUluZGV4U2NhbkJh dGNoIHNjYW5CYXRjaCA9IE5VTEw7CisJYm9vbAkJaGFkRXhpc3RpbmdTY2FuQmF0Y2g7CisKKwlB c3NlcnQoIXNjYW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Q b3MtPmJhdGNoKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9j b3VudChzY2FuKSA9PSAwKTsKKwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54 c193YW50X2l0dXApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxv YWRlZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0 ZW0ncyBUSUQvaW5kZXggdHVwbGUgZnJvbQorCSAqLworCWhhZEV4aXN0aW5nU2NhbkJhdGNoID0g c2NhblBvcy0+dmFsaWQ7CisJaWYgKHNjYW5Qb3MtPnZhbGlkKQorCXsKKwkJLyoKKwkJICogc2Nh blBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0 Y2ggcmluZworCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICovCisJCXBn X2Fzc3VtZShiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJ c2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJ aWYgKGluZGV4X3NjYW5fcG9zX2FkdmFuY2UoZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3Mp KQorCQkJcmV0dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4s IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywKKwkJCQkJCQkJ CQkJCSAgIGFsbF92aXNpYmxlKTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciByYW4gb3V0IG9mIGl0 ZW1zIGZyb20gb3VyIGV4aXN0aW5nIHNjYW5CYXRjaCwgb3IgaXQgaGFzbid0IGJlZW4KKwkgKiBs b2FkZWQgeWV0IChiZWNhdXNlIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVu dGlyZSBzY2FuKS4KKwkgKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0 Y2ggKG9yIGdldCB0aGUgZmlyc3QgYmF0Y2gpLgorCSAqLworCXNjYW5CYXRjaCA9IHRhYmxlYW1f dXRpbF9mZXRjaF9uZXh0X2JhdGNoKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBzY2Fu QmF0Y2gsIHNjYW5Qb3MpOworCisJaWYgKCFzY2FuQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSdy ZSBkb25lOyBubyBtb3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJ CSAqCisJCSAqIE5vdGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5IHN0aWxsIHZhbGlkIGF0IHRoaXMg cG9pbnQuICBUaGUgc2NhbgorCQkgKiBtaWdodCBzdGlsbCBiYWNrIHVwIGluIHRoZSBvdGhlciBk aXJlY3Rpb24uCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEFkdmFuY2Vk IHNjYW5CYXRjaC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcKKwkg KiBzY2FuQmF0Y2guCisJICovCisJaW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKGRpcmVjdGlvbiwg c2NhbkJhdGNoLCBzY2FuUG9zKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2Fu UG9zLT5iYXRjaCkgPT0gc2NhbkJhdGNoKTsKKworCS8qCisJICogUmVtb3ZlIHRoZSBoZWFkIGJh dGNoIGZyb20gdGhlIGJhdGNoIHJpbmcgYnVmZmVyIChleGNlcHQgd2hlbiB0aGlzIG5ldworCSAq IHNjYW5CYXRjaCBpcyBvdXIgb25seSBvbmUpCisJICovCisJaWYgKGhhZEV4aXN0aW5nU2NhbkJh dGNoKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChz Y2FuLAorCQkJCQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKworCQlBc3NlcnQo aGVhZEJhdGNoICE9IHNjYW5CYXRjaCk7CisJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRj aCAhPSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJLyogZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNo ICh1bmxlc3MgaXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVf YmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsKKworCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhl IHJpbmcgYnVmZmVyIChldmVuIGlmIGl0J3MgbWFya0JhdGNoKSAqLworCQliYXRjaHJpbmdidWYt PmhlYWRCYXRjaCsrOworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5 cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVm LT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9y ZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgICBz Y2FuQmF0Y2gsIHNjYW5Qb3MsIGFsbF92aXNpYmxlKTsKK30KKworLyoKKyAqIFNhdmUgdGhlIGN1 cnJlbnQgc2NhblBvcy9zY2FuQmF0Y2ggaXRlbSdzIFRJRCBpbiBzY2FuJ3MgeHNfaGVhcHRpZCwg YW5kCisgKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQgVElELiAgV2hlbiBhbGxfdmlzaWJsZSBp c24ndCBOVUxMIChkdXJpbmcgYW4KKyAqIGluZGV4LW9ubHkgc2NhbiksIGFsc28gc2V0cyBpdGVt J3MgdmlzaWJpbGl0eSBzdGF0dXMgaW4gKmFsbF92aXNpYmxlLgorICoKKyAqIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgaGVscGVyIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwKKwkJCQkJ CQkJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywKKwkJCQkJCQkJYm9vbCAqYWxsX3Zpc2libGUp Cit7CisJSGVhcEJhdGNoRGF0YSAqaGJhdGNoOworCisJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxl cyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKworCS8qIFNldCB4c19oZWFwdGlkLCB3aGljaCBj YWxsZXIgKGFuZCBjb3JlIGV4ZWN1dG9yKSB3aWxsIG5lZWQgKi8KKwlzY2FuLT54c19oZWFwdGlk ID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKKworCWlmIChhbGxf dmlzaWJsZSA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICov CisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJcmV0dXJuICZzY2FuLT54c19oZWFw dGlkOworCX0KKworCS8qCisJICogSW5kZXgtb25seSBzY2FuLgorCSAqCisJICogQWxzbyBzZXQg eHNfaXR1cCwgd2hpY2ggY2FsbGVyIGFsc28gbmVlZHMuCisJICovCisJQXNzZXJ0KHNjYW4tPnhz X3dhbnRfaXR1cCk7CisJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5j dXJyVHVwbGVzICsKKwkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1 cGxlT2Zmc2V0KTsKKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJl bnQgc2NhblBvcyBpdGVtIChwbHVzIHBvc3NpYmx5IHNvbWUKKwkgKiBhZGRpdGlvbmFsIGl0ZW1z IGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSBhcyBuZWVkZWQKKwkgKi8KKwloYmF0Y2gg PSBoZWFwX2JhdGNoX2RhdGEoc2Nhbiwgc2NhbkJhdGNoKTsKKwlpZiAoIShoYmF0Y2gtPnZpc0lu Zm9bc2NhblBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSkKKwkJaGVhcGFtX2lu ZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBoYmF0 Y2gsCisJCQkJCQkJCQkJICBzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNldCBhbGxfdmlzaWJs ZSBmb3IgY2FsbGVyICovCisJKmFsbF92aXNpYmxlID0KKwkJKGhiYXRjaC0+dmlzSW5mb1tzY2Fu UG9zLT5pdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFKSAhPSAwOworCisJcmV0dXJu ICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKgorICogT2J0YWluIHZpc2liaWxpdHkgaW5mb3Jt YXRpb24gZm9yIGEgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2guCisgKgorICogQ2FsbGVkIGR1cmlu ZyBhbWdldGJhdGNoIGluZGV4LW9ubHkgc2NhbnMuICBXZSBhbHdheXMgY2hlY2sgdGhlIHZpc2li aWxpdHkKKyAqIG9mIGNhbGxlcidzIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNo LT5pdGVtc1tdIGFycmF5KS4gIFdlIG1pZ2h0CisgKiBhbHNvIHNldCB2aXNpYmlsaXR5IGluZm8g Zm9yIG90aGVyIGl0ZW1zIGZyb20gY2FsbGVyJ3MgYmF0Y2ggbW9yZQorICogcHJvYWN0aXZlbHkg d2hlbiB0aGF0IG1ha2VzIHNlbnNlLgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25z aWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hl Y2sgYWRkaXRpb25hbCBpdGVtczogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmls aXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2 ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5l ciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICog bmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCisgKgorICogT25jZSB3ZSd2ZSByZXNv bHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQor ICogdW5ndWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdp dGggcmVzcGVjdCB0bworICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBn dWFyZCAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKKyAqIG9yaWdpbmF0aW5nIGluZGV4 IHBhZ2UpIGJsb2NrcyBWQUNVVU0gZnJvbSBhY3F1aXJpbmcgYSBjb25mbGljdGluZyBjbGVhbnVw CisgKiBsb2NrIG9uIHRoYXQgcGFnZS4gIENvcHlpbmcgdGhlIHJlbGV2YW50IHZpc2liaWxpdHkg bWFwIGRhdGEgaW50byBvdXIgbG9jYWwKKyAqIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5z YWZlIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZzogaWYgYW55IG9mIHRoZXNlCisgKiBUSURzIHBv aW50IHRvIGRlYWQgaGVhcCB0dXBsZXMsIFZBQ1VVTSBjYW5ub3QgcG9zc2libHkgcmV0dXJuIGZy b20KKyAqIGFtYnVsa2RlbGV0ZSBhbmQgbWFyayB0aGUgcG9pbnRlZC10byBoZWFwIHBhZ2VzIGFz IGFsbC12aXNpYmxlLiAgVkFDVVVNCisgKiBfY2FuXyBkbyBzbyBvbmNlIHRoZSBiYXRjaCBpcyB1 bmd1YXJkZWQsIGJ1dCB0aGF0J3Mgb2theTsgd2UnbGwgYmUgd29ya2luZworICogb2ZmIG9mIGNh Y2hlZCB2aXNpYmlsaXR5IGluZm8gdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVhZCBUSURzIGFy ZSBOT1QKKyAqIGFsbC12aXNpYmxlLgorICoKKyAqIFdoYXQgYWJvdXQgdGhlIG9wcG9zaXRlIGNh c2UsIHdoZXJlIGEgcGFnZSB3YXMgYWxsLXZpc2libGUgd2hlbiB3ZSBjYWNoZWQKKyAqIHRoZSBW TSBiaXRzIGJ1dCB0dXBsZXMgb24gaXQgYXJlIGRlbGV0ZWQgYWZ0ZXJ3YXJkcz8gIFRoYXQgaXMg c2FmZSB0b286IGFueQorICogdHVwbGUgdGhhdCB3YXMgdmlzaWJsZSB0byBhbGwgd2hlbiB3ZSBy ZWFkIHRoZSBWTSBtdXN0IGFsc28gYmUgdmlzaWJsZSB0bworICogb3VyIE1WQ0Mgc25hcHNob3Qs IHNvIGl0IGlzIGNvcnJlY3QgdG8gc2tpcCB0aGUgaGVhcCBmZXRjaCBmb3IgdGhvc2UgVElEcy4K KyAqLworc3RhdGljIHZvaWQKK2hlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgIEluZGV4 U2NhbkJhdGNoIGJhdGNoLCBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCSAgQmF0Y2hS aW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhG ZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlpbnQJCQlwb3NJdGVtID0gcG9z LT5pdGVtOworCWJvb2wJCWFsbGJhdGNoaXRlbXN2aXNpYmxlOworCUJsb2NrTnVtYmVyIGN1cnZt aGVhcGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4CQljdXJ2bWhlYXBibGtmbGFn cyA9IDA7CisKKwlBc3NlcnQoaGJhdGNoID09IGhlYXBfYmF0Y2hfZGF0YShzY2FuLCBiYXRjaCkp OworCisJLyoKKwkgKiBUaGUgYmF0Y2ggbXVzdCBzdGlsbCBiZSBndWFyZGVkIHdoZW5ldmVyIHdl J3JlIGNhbGxlZC4KKwkgKgorCSAqIGFtdW5ndWFyZGJhdGNoIGNhbid0IGJlIGNhbGxlZCB1bnRp bCB3ZSd2ZSBhbHJlYWR5IHNldCBfZXZlcnlfIGJhdGNoCisJICogaXRlbSdzIHZpc0luZm9bXSBz dGF0dXMsIGJ1dCBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28gZm9yIHRoaXMgYmF0Y2gKKwkgKiB0 aGVuIGl0IHNob3VsZG4ndCBldmVyIGdldCBwYXNzZWQgdG8gdXMgYWdhaW4gYnkgc29tZSBzdWJz ZXF1ZW50IGNhbGwuCisJICogKFRoaXMgcmVsaWVzIG9uIGluZGV4LW9ubHkgc2NhbnMgYWx3YXlz IGJlaW5nICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQuKQorCSAqLworCUFzc2VydChiYXRjaC0+aXNH dWFyZGVkICYmICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJLyoKKwkgKiBTZXQg dmlzaWJpbGl0eSBpbmZvIGZvciBhIHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2FuIG9yZGVyLgorCSAq CisJICogTm90ZTogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sgdGhlIHZp c2liaWxpdHkgbWFwIGJ1ZmZlciwKKwkgKiBzbyB0aGUgcmVzdWx0IGNvdWxkIGJlIHNsaWdodGx5 IHN0YWxlLiAgU2VlIHRoZSAiTWVtb3J5IG9yZGVyaW5nCisJICogZWZmZWN0cyIgZGlzY3Vzc2lv biBhYm92ZSB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZm9yIGFuIGV4cGxhbmF0aW9uCisJICog b2Ygd2h5IHRoaXMgaXMgb2theS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXJlY3Rpb24pKQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVt LAorCQkJCQkJCQkJICBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zIC0gMSk7CisKKwkJZm9y IChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPD0gbGFzdFNldEl0ZW07IHNldEl0ZW0r KykKKwkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJs ZVRpZDsKKwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIodGlkKTsKKwkJCXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhl YXBibGtubykKKwkJCXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBi bGtmbGFnczsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJ U19DSEVDS0VEOworCQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVh cGJsa25vLCAmaHNjYW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJ U19BTExfVklTSUJMRTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFw YmxrZmxhZ3MgPSBmbGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisK KwkJYWxsYmF0Y2hpdGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA+PSBiYXRjaC0+bGFzdEl0ZW0g JiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5maXJzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJ bmZvW2JhdGNoLT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpOworCX0KKwll bHNlCisJeworCQlpbnQJCQlsYXN0U2V0SXRlbSA9IE1heChiYXRjaC0+Zmlyc3RJdGVtLAorCQkJ CQkJCQkJICBwb3NJdGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zICsgMSk7CisKKwkJZm9yIChpbnQg c2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPj0gbGFzdFNldEl0ZW07IHNldEl0ZW0tLSkKKwkJ eworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsK KwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KTsKKwkJCXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhlYXBibGtu bykKKwkJCXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFn czsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJU19DSEVD S0VEOworCQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25v LCAmaHNjYW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJU19BTExf VklTSUJMRTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxh Z3MgPSBmbGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisKKwkJYWxs YmF0Y2hpdGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA8PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJ CQkocG9zSXRlbSA9PSBiYXRjaC0+bGFzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJbmZvW2Jh dGNoLT5sYXN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSk7CisJfQorCisJLyoKKwkg KiBJdCdzIHNhZmUgdG8gdW5ndWFyZCB0aGUgYmF0Y2ggKHZpYSBhbXVuZ3VhcmRiYXRjaCkgYXMg c29vbiBhcyB3ZSd2ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiBhbGwg b2YgaXRzIGl0ZW1zICh1bmxlc3MgdGhpcyBpcyBhCisJICogbm9uLU1WQ0Mgc2NhbikKKwkgKi8K KwlpZiAoYWxsYmF0Y2hpdGVtc3Zpc2libGUpCisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZv W2JhdGNoLT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCUFzc2VydCho YmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQp OworCisJCS8qCisJCSAqIE5vdGU6IG5vZGVJbmRleG9ubHlzY2FuLmMgb25seSBzdXBwb3J0cyBN VkNDIHNuYXBzaG90cywgYnV0IHdlCisJCSAqIHN0aWxsIGNvcGUgd2l0aCBpbmRleC1vbmx5IHNj YW4gY2FsbGVycyB3aXRoIG90aGVyIHNuYXBzaG90IHR5cGVzLgorCQkgKiBUaGlzIGlzIGNlcnRh aW5seSBub3QgdW5leHBlY3RlZDsgc2VsZnVuY3MuYyBwZXJmb3JtcyBpbmRleC1vbmx5CisJCSAq IHNjYW5zIHRoYXQgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZS4KKwkJICovCisJCWlmIChzY2Fu LT5NVkNDU2NhbikKKwkJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsK Kwl9CisKKwkvKgorCSAqIEVsc2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBp dGVtcyBuZXh0IHRpbWUsIG9yIGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4g b25lIGdvIG9uY2Ugd2UncmUgcGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJ ZWxzZSBpZiAoaHNjYW4tPnhzX3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5m aXJzdEl0ZW0pKQorCQloc2Nhbi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54 c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFr ZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFr ZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRl Lm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5v CiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMwLi5kNGFkYmJlYjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShPaWQgYW1o YW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91 dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBo YXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0KChyb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5lLT5hbXVuZ3VhcmRiYXRjaCAhPSBO VUxMKSk7CisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5hbWdldGJhdGNoICE9 IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5l OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IGFjYzlmM2U2YS4uMTdlYTkzYjRk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksOCBAQCBSZWxhdGlvbkdl dEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0 IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4t Pm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gZmFs c2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJbWVtc2V0KCZzY2Fu LT5iYXRjaGNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hjYWNoZSkpOwogCiAJLyoKIAkgKiBX ZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVu dGlsIGFtcmVzY2FuLgpAQCAtMTI2LDYgKzEyOCw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54 c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPmJh dGNoX2luZGV4X29wYXF1ZV9zaXplID0gMDsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNl ID0gMDsKKwlzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPSAwOwogCXNjYW4tPnhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQgPSAwOwogCiAJcmV0dXJuIHNjYW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYwppbmRleCAxMzBhYTIwNWUuLmI5M2U0YTcxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhhbS5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKiBJTlRFUkZBQ0UgUk9VVElORVMKICAqCQlpbmRl eF9vcGVuCQktIG9wZW4gYW4gaW5kZXggcmVsYXRpb24gYnkgcmVsYXRpb24gT0lECiAgKgkJaW5k ZXhfY2xvc2UJCS0gY2xvc2UgYW4gaW5kZXggcmVsYXRpb24KLSAqCQlpbmRleF9iZWdpbnNjYW4g LSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldHR1cGxlCisgKgkJaW5kZXhfYmVn aW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiYXRjaC9hbWdldHR1 cGxlCiAgKgkJaW5kZXhfYmVnaW5zY2FuX2JpdG1hcCAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRl eCB3aXRoIGFtZ2V0Yml0bWFwCiAgKgkJaW5kZXhfcmVzY2FuCS0gcmVzdGFydCBhIHNjYW4gb2Yg YW4gaW5kZXgKICAqCQlpbmRleF9lbmRzY2FuCS0gZW5kIGEgc2NhbgpAQCAtMjU0LDcgKzI1NCw3 IEBAIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiB9CiAKIC8q Ci0gKiBpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdl dHR1cGxlCisgKiBpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0 aCBhbWdldGJhdGNoL2FtZ2V0dHVwbGUKICAqCiAgKiBDYWxsZXIgbXVzdCBiZSBob2xkaW5nIHN1 aXRhYmxlIGxvY2tzIG9uIHRoZSBoZWFwIGFuZCB0aGUgaW5kZXguCiAgKi8KQEAgLTMzOSw2ICsz MzksNyBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwg UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXNjYW4tPnhzX3RlbXBfc25hcCA9IHRlbXBfc25hcDsK IAogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01W Q0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50 OwogCiAJLyoKQEAgLTM1MCw2ICszNTEsNyBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVs YXRpb24gaW5kZXhSZWxhdGlvbiwgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlzY2FuLT5oZWFw UmVsYXRpb24gPSBoZWFwUmVsYXRpb247CiAJCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGluZGV4X29u bHlfc2NhbjsKIAkJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCQlzY2FuLT5iYXRj aEltbWVkaWF0ZVVuZ3VhcmQgPSAoc2Nhbi0+TVZDQ1NjYW4gJiYgIWluZGV4X29ubHlfc2Nhbik7 CiAKIAkJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KIAkJ c2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oc2NhbiwgZmxhZ3Mp OwpAQCAtMzU4LDYgKzM2MCwxNCBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlBc3NlcnQoc2Nhbi0+eHNf Z2V0bmV4dF9zbG90ICE9IE5VTEwpOwogCX0KIAorCS8qCisJICogQml0bWFwIGluZGV4IHNjYW5z IHNob3VsZCBuZXZlciB1c2UgYSBiYXRjaCByaW5nIGJ1ZmZlciAodGhvdWdoIGNhbiB1c2UKKwkg KiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlKS4gIFBsYWluIGluZGV4IHNjYW5zIChhbmQgaW5kZXgt b25seSBzY2FucykKKwkgKiBzaG91bGQgb25seSB1c2UgYSBiYXRjaCByaW5nIGJ1ZmZlciB3aXRo IGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0uCisJICovCisJQXNzZXJ0KCFzY2FuLT54c19oZWFwZmV0 Y2ggPyAhc2Nhbi0+dXNlYmF0Y2hyaW5nIDoKKwkJICAgKGluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWdldGJhdGNoICE9IE5VTEwpID09IHNjYW4tPnVzZWJhdGNocmluZyk7CisKIAlyZXR1cm4g c2NhbjsKIH0KIApAQCAtNDA1LDcgKzQxNSwyMSBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWVuZHNjYW4p OwogCi0JLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUg YWNjZXNzZXMgKi8KKwkvKgorCSAqIGFtZ2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRo YXQgc3VwcG9ydHMgYW1nZXRiYXRjaCBtYWtlIGxpbWl0ZWQKKwkgKiB1c2Ugb2YgdGhlIHNjYW4n cyBiYXRjaCBjYWNoZS4gIENoZWNrIGZvciB0aGF0LgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0 Y2hyaW5nICYmIHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCUFzc2VydChzY2Fu LT54c19oZWFwZmV0Y2ggPT0gTlVMTCk7CisJCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwkJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9i YXNlKHNjYW4sIHNjYW4tPmJhdGNoY2FjaGVbMF0pKTsKKwl9CisKKwkvKgorCSAqIFJlbGVhc2Ug cmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zIGFuZCBiYXRjaCByaW5nIGJ1ZmZlcikgaGVsZCBi eQorCSAqIHRhYmxlIEFNIGZvciBpbmRleCBzY2FuCisJICovCiAJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaCkKIAl7CiAJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKQEAgLTQzMywyNCArNDU3 LDI0IEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5f Q0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9Q Uk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1tYXJrcG9zKHNjYW4pOworCXRhYmxlX2luZGV4X2ZldGNoX21hcmtwb3Moc2Nhbik7CiB9CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRleF9yZXN0cnBvcwktIHJlc3RvcmUgYSBzY2Fu IHBvc2l0aW9uCiAgKgotICogTk9URTogdGhpcyBvbmx5IHJlc3RvcmVzIHRoZSBpbnRlcm5hbCBz Y2FuIHN0YXRlIG9mIHRoZSBpbmRleCBBTS4gIFNlZQorICogTk9URTogdGhpcyBvbmx5IHJlc3Rv cmVzIHRoZSBiYXRjaCBwb3NpdGlvbmFsIHN0YXRlIG9mIHRoZSB0YWJsZSBBTS4gIFNlZQogICog Y29tbWVudHMgZm9yIEV4ZWNSZXN0clBvcygpLgogICoKICAqIE5PVEU6IEZvciBoZWFwLCBpbiB0 aGUgcHJlc2VuY2Ugb2YgSE9UIGNoYWlucywgbWFyay9yZXN0b3JlIG9ubHkgd29ya3MKICAqIGNv cnJlY3RseSBpZiB0aGUgc2NhbidzIHNuYXBzaG90IGlzIE1WQ0Mtc2FmZTsgdGhhdCBlbnN1cmVz IHRoYXQgdGhlcmUncyBhdAogICogbW9zdCBvbmUgcmV0dXJuYWJsZSB0dXBsZSBpbiBlYWNoIEhP VCBjaGFpbiwgYW5kIHNvIHJlc3RvcmluZyB0aGUgcHJpb3IKLSAqIHN0YXRlIGF0IHRoZSBncmFu dWxhcml0eSBvZiB0aGUgaW5kZXggQU0gaXMgc3VmZmljaWVudC4gIFNpbmNlIHRoZSBvbmx5Ci0g KiBjdXJyZW50IHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0aW9uYWxpdHkgaXMgbm9kZU1lcmdl am9pbi5jLCB0aGlzCi0gKiBlZmZlY3RpdmVseSBtZWFucyB0aGF0IG1lcmdlLWpvaW4gcGxhbnMg b25seSB3b3JrIGZvciBNVkNDIHNuYXBzaG90cy4gIFRoaXMKLSAqIGNvdWxkIGJlIGZpeGVkIGlm IG5lY2Vzc2FyeSwgYnV0IGZvciBub3cgaXQgc2VlbXMgdW5pbXBvcnRhbnQuCisgKiBzdGF0ZSBh dCB0aGUgc2NhbiBpdGVtIGdyYW51bGFyaXR5IGlzIHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25s eSBjdXJyZW50CisgKiB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVN ZXJnZWpvaW4uYywgdGhpcyBlZmZlY3RpdmVseQorICogbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBs YW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzIGNvdWxkIGJlCisgKiBmaXhl ZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0YW50LgogICogLS0t LS0tLS0tLS0tLS0tLQogICovCiB2b2lkCkBAIC00NTksMTYgKzQ4MywxMSBAQCBpbmRleF9yZXN0 cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KElzTVZDQ0xpa2VTbmFwc2hvdChzY2Fu LT54c19zbmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1yZXN0cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQkvKiBy ZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzdG9yaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24gKi8K LQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2Fu KTsKLQotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwog CXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCXRhYmxlX2luZGV4X2ZldGNoX3Jlc3RycG9z KHNjYW4pOwogfQogCiAvKgpAQCAtNjQyLDYgKzY2MSw3IEBAIGluZGV4X2dldG5leHRfdGlkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIAlTQ0FOX0NIRUNL UzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldHR1cGxlKTsKKwlBc3NlcnQoIXNjYW4tPnVz ZWJhdGNocmluZyk7CiAKIAkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90 IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KFJlY2VudFhtaW4pKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNTA3MzBkNjk4Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDcyNiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIEJhdGNoLWJh c2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFj ZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBm b3IgYmF0Y2gtYmFzZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMgdG8g cmV0dXJuIG11bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKKyAqIGNh bGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkgdGhlIHRhYmxlIEFNLgorICoK KyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZS9pbmRl eCBzY2FuIG9yZGVyLgorICoKKyAqIE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJlIHRhYmxlIEFNIHV0 aWxpdGllcyAodGFibGVhbV91dGlsXyopLCBjYWxsZWQgYnkKKyAqIHRhYmxlIEFNcyBkdXJpbmcg YW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0Y2ggcmluZworICog YnVmZmVyJ3MgbGlmZWN5Y2xlIGFuZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgaGVscCB3aXRoIGNl cnRhaW4gYXNwZWN0cyBvZgorICogcmVzb3VyY2UgbWFuYWdlbWVudC4gIFRoZSB0YWJsZSBBTSB1 c2VzIHNjYW5Qb3MgKGFuZCBpdHMgc2NhbkJhdGNoIGJhdGNoKQorICogdG8gcmV0dXJuIGl0ZW1z IGZyb20gYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoKKyAqIFRoZXJlIGFyZSBh bHNvIHNvbWUgaW5kZXggQU0gdXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKiksIGNhbGxlZCBieSBp bmRleAorICogQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSwgdG8g aGVscCBtYW5hZ2UgcmVzb3VyY2VzIGxpa2UKKyAqIG1lbW9yeSwgbG9ja3MsIGFuZCBidWZmZXIg cGlucy4gIEluZGV4IEFNcyBmcmVlIGFuZCB1bmxvY2sgYmF0Y2hlcyBhcworICogZGVzY3JpYmVk IGluIGluZGV4YW0uc2dtbC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy NiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9p bmRleGJhdGNoLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjb21t b24vaW50LmgiCisjaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKKworc3RhdGljIHZvaWQgYmF0Y2hf ZnJlZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkgICBi b29sIGFsbG93X2NhY2hlKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBiYXRjaF9jYWNoZV9zdG9yZShJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbnQJYmF0 Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKKworLyoKKyAq IFJlc2V0IHJpbmcgYnVmZmVyIGFuZCByZWxhdGVkIHBvc2l0aW9uYWwgc3RhdGUgdXNlZCBkdXJp bmcgYW4gYW1nZXRiYXRjaAorICogaW5kZXggc2NhbgorICovCit2b2lkCit0YWJsZWFtX3V0aWxf YmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBlbmRzY2FuKQoreworCUJh dGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRl eFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQlt YXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLnZhbGlkID0g ZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisKKwkvKiBFbnN1 cmUgYmF0Y2hfZnJlZSB3b24ndCBza2lwIHRoZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wIGJl bG93ICovCisJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxMOworCisJZm9yICh1aW50OCBp ID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7 IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2Fu LCBpKTsKKworCQlpZiAoYmF0Y2ggPT0gbWFya0JhdGNoKQorCQkJbWFya0JhdGNoRnJlZWQgPSB0 cnVlOworCisJCWJhdGNoX2ZyZWUoc2NhbiwgYmF0Y2gsICFlbmRzY2FuKTsKKwl9CisKKwlpZiAo IW1hcmtCYXRjaEZyZWVkICYmIHVubGlrZWx5KG1hcmtCYXRjaCkpCisJCWJhdGNoX2ZyZWUoc2Nh biwgbWFya0JhdGNoLCAhZW5kc2Nhbik7CisKKwliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IDA7 CisJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggPSAwOworfQorCisvKgorICogRnJlZSByZXNvdXJj ZXMgYXQgZW5kIG9mIGEgYmF0Y2ggaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUg QU0gd2hlbiBhbiBpbmRleCBzY2FuIGlzIGVuZGluZywgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcK KyAqIHNjYW4gZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0 ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJLyogRnJlZSBhbGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVz IChldmVuIG1hcmtCYXRjaCksIGJ5cGFzc2luZyBjYWNoZSAqLworCXRhYmxlYW1fdXRpbF9iYXRj aHNjYW5fcmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1ND QU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nh bi0+YmF0Y2hjYWNoZVtpXTsKKworCQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsK KworCQlpZiAoY2FjaGVkLT5kZWFkSXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7 CisJCXBmcmVlKGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBjYWNoZWQpKTsKKwl9Cit9CisK Ky8qCisgKiBTZXQgYSBtYXJrIGZyb20gc2NhblBvcyBwb3NpdGlvbgorICoKKyAqIENhbGxlZCBm cm9tIHRoZSB0YWJsZSBBTSdzIGluZGV4X2ZldGNoX21hcmtwb3MgY2FsbGJhY2suICBTYXZlcyB0 aGUgY3VycmVudAorICogc2NhbiBwb3NpdGlvbiBhbmQgYXNzb2NpYXRlZCBiYXRjaCBzbyB0aGF0 IHRoZSBzY2FuIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzCisgKiBwb2ludCBsYXRlciwgdmlhIHRh YmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzCisg KiByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1hcmsgaXMgc2V0IG9yIHRoZSBz Y2FuIGVuZHMgKG9yIHVudGlsCisgKiB0aGUgbWFyayBpcyByZXN0b3JlZCkuCisgKi8KK3ZvaWQK K3RhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorewor CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlC YXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUlu ZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+ YmF0Y2gpOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0Jh dGNoOworCWJvb2wJCWZyZWVNYXJrQmF0Y2g7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOwor CisJLyoKKwkgKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpIC0tIGJ1dCBv bmx5IGlmIGl0IGlzbid0IG91cgorCSAqIHNjYW5CYXRjaCAoZGVmZW5zaXZlbHkgbWFrZSBzdXJl IHRoYXQgbWFya0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIKKwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gs IHRvbykKKwkgKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQor CXsKKwkJLyogRGVmaW5pdGVseSBubyBtYXJrQmF0Y2ggdGhhdCB3ZSBzaG91bGQgZnJlZSBub3cg Ki8KKwkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCX0KKwllbHNlIGlmIChsaWtlbHkoIWluZGV4 X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSkpCisJeworCQkvKiBEZWZp bml0ZWx5IGhhdmUgYSBuby1sb25nZXItbG9hZGVkIG1hcmtCYXRjaCB0byBmcmVlICovCisJCWZy ZWVNYXJrQmF0Y2ggPSB0cnVlOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBpbmRleF9zY2Fu X2JhdGNoX2xvYWRlZCBpbmRpY2F0ZXMgdGhhdCBtYXJrUG9zLT5iYXRjaCBpcyBsb2FkZWQsCisJ CSAqIGJ1dCBhZnRlciB1aW50OCBvdmVyZmxvdyBhIHN0YWxlIGJhdGNoIG9mZnNldCBjYW4gYWxp YXMgYQorCQkgKiBjdXJyZW50bHktbG9hZGVkIHJhbmdlIChmYWxzZSBwb3NpdGl2ZSkuICBDb25m aXJtIGJ5IGNoZWNraW5nCisJCSAqIHdoZXRoZXIgdGhlIGJhdGNoIHBvaW50ZXIgaW4gbWFya1Bv cy0+YmF0Y2gncyBzbG90IHN0aWxsIG1hdGNoZXMuCisJCSAqLworCQlmcmVlTWFya0JhdGNoID0g KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgbWFya1Bvcy0+YmF0Y2gpICE9IG1hcmtCYXRjaCk7CisJ fQorCisJaWYgKGZyZWVNYXJrQmF0Y2gpCisJeworCQkvKiBGcmVlIG1hcmtCYXRjaCwgc2luY2Ug aXQgaXNuJ3QgbG9hZGVkL25lZWRlZCBmb3IgYmF0Y2hyaW5nYnVmICovCisJCWJhdGNocmluZ2J1 Zi0+bWFya0JhdGNoID0gTlVMTDsgLyogZWxzZSBjYWxsIHdvbid0IGZyZWUgbWFya0JhdGNoICov CisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIG1hcmtCYXRjaCk7CisJfQorCisJLyog Y29weSB0aGUgc2NhbidzIHBvc2l0aW9uICovCisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zID0gKnNj YW5Qb3M7CisJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBzY2FuQmF0Y2g7Cit9CisKKy8qCisg KiBSZXN0b3JlIG1hcmsgdG8gc2NhblBvcyBwb3NpdGlvbgorICoKKyAqIENhbGxlZCBmcm9tIHRo ZSB0YWJsZSBBTSdzIGluZGV4X2ZldGNoX3Jlc3RycG9zIGNhbGxiYWNrLiAgUmVzdG9yZXMgdGhl CisgKiBzY2FuIHRvIGEgcG9zaXRpb24gc2F2ZWQgdXNpbmcgdGFibGVhbV91dGlsX2JhdGNoc2Nh bl9tYXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9zIGJlY29tZXMgaXRzIHNj YW5Qb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisgKiB0aGUgY3VycmVudCBz Y2FuQmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVz IChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAorICogZXhjZXB0IHdo ZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAq Lwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNj IHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hy aW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm LnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYtPm1h cmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0 Y2g7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBz Y2FuUG9zLT5iYXRjaCk7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFzc2VydChzY2Fu LT54c19oZWFwZmV0Y2gpOworCUFzc2VydChtYXJrUG9zLT52YWxpZCk7CisKKwlpZiAoc2NhbkJh dGNoID09IG1hcmtCYXRjaCkKKwl7CisJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRj aDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCisJCUFzc2VydChzY2FuUG9zLT5iYXRj aCA9PSBtYXJrUG9zLT5iYXRjaCk7CisKKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07 CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIG1hcmtCYXRjaCBpcyBiZWhpbmQgc2NhbkJhdGNo LCBhbmQgc28gbXVzdCBub3QgYmUgc2F2ZWQgaW4gcmluZyBidWZmZXIKKwkgKiBhbnltb3JlLiAg V2UgaGF2ZSB0byBkZWFsIHdpdGggcmVzdG9yaW5nIHRoZSBtYXJrIHRoZSBoYXJkIHdheTogYnkK KwkgKiBpbnZhbGlkYXRpbmcgYWxsIG90aGVyIGxvYWRlZCBiYXRjaGVzLiAgVGhpcyBpcyBzaW1p bGFyIHRvIHRoZSBjYXNlCisJICogd2hlcmUgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgYW5k IHRoZSBzY2FuIGFjdHVhbGx5IGNyb3NzZXMKKwkgKiBiYXRjaC9pbmRleCBwYWdlIGJvdW5kYXJp ZXMgKHNlZSB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZSkuCisJICoKKwkgKiBGaXJz dCwgZnJlZSBhbGwgYmF0Y2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcmluZyBidWZmZXIuCisJ ICovCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hy aW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gaW5k ZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlBc3NlcnQoYmF0Y2ggIT0gbWFya0JhdGNoKTsK KworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkg KiBOZXh0ICJhcHBlbmQiIHN0YW5kYWxvbmUgbWFya0JhdGNoLCB3aGljaCB3aWxsIGJlY29tZSBz Y2FuQmF0Y2gKKwkgKiAoc2NhbkJhdGNoIGlzIGFsd2F5cyB0aGUgcmluZyBidWZmZXIncyBoZWFk QmF0Y2gpCisJICovCisJbWFya1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+c2NhblBv cyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2Fu LCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1 Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNoKTsKKworCS8qCisJICogRmluYWxseSwgY2Fs bCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55IHByaXZh dGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jl c3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQp CisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtC YXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRlbXNbXSBtaWdodCBhbHJl YWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1pZ2h0CisJICogeWV0IGhhdmUgbW9yZSBkZWFk IGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggaXMgcHJlcGFyZWQKKwkgKiBm b3IgdGhhdC4KKwkgKi8KK30KKworLyoKKyAqIEhhbmRsZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4g c2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hlbiBpdHMgc2NhbiBj aGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0CisgKiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0 aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdpbmFsbHkgYXNzb2NpYXRlZAorICogd2l0 aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVuIHdlIHJldHVybiwgYmF0Y2hyaW5nYnVm IHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhlIGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9z Y2FuQmF0Y2gpIGFuZCB3aWxsIGxvb2sgYXMgaWYgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbiBoYWQg YmVlbgorICogdXNlZCBmcm9tIHRoZSBzdGFydC4gIENhbGxlciBjYW4gdGhlbiBzYWZlbHkgcGFz cyB0aGlzIGJhdGNoIHRvIGFtZ2V0YmF0Y2gKKyAqIHRvIGRldGVybWluZSB3aGljaCBiYXRjaCBj b21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24uICBUaGlzCisgKiBhcHByb2FjaCBp c24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9y IHdoYXQKKyAqIG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8K K3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdi dWY7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoOworCisJLyoKKwkgKiBSZWxlYXNlIGJhdGNo ZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAidGFpbCIgYmF0Y2gsIHdvcmtpbmcKKwkgKiBi YWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRjaCAod2hpY2ggaXMgYWxzbyB0aGUg Y3VycmVudAorCSAqIHNjYW5CYXRjaCkgaXMgdGhlIG9ubHkgYmF0Y2ggaGFzbid0IGJlZW4gZnJl ZWQKKwkgKi8KKwl3aGlsZSAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDEpCisJewor CQl1aW50OAkJdGFpbGlkeCA9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMTsKKwkJSW5kZXhT Y2FuQmF0Y2ggdGFpbCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgdGFpbGlkeCk7CisKKwkJQXNz ZXJ0KHRhaWxpZHggIT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKworCQl0YWJsZWFt X3V0aWxfZnJlZV9iYXRjaChzY2FuLCB0YWlsKTsKKwkJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gt LTsKKwl9CisKKwkvKiBzY2FuQmF0Y2ggaXMgbm93IHRoZSBvbmx5IGJhdGNoIHN0aWxsIGxvYWRl ZCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBiYXRjaHJpbmdidWYtPnNj YW5Qb3MuYmF0Y2gpOworCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2gpOworCisJLyoKKwkgKiBGbGlwIHNjYW5CYXRjaCdzIHNjYW4gZGly ZWN0aW9uIHRvIHJlZmxlY3QgdGhlIHJldmVyc2FsLiAgQWxzbyByZXNldAorCSAqIGFueSBpbmRl eCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4gcHJvZ3Jlc3MuCisJICov CisJc2NhbkJhdGNoLT5kaXIgPSAtc2NhbkJhdGNoLT5kaXI7CisJaWYgKHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1wb3NyZXNldChzY2FuLCBzY2FuQmF0Y2gpOworfQorCisvKgorICogUmVjb3JkIHRo YXQgc2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisgKiBSZWNvcmRzIGFuIG9mZnNldCB0byB0aGUg Y3VycmVudCBzY2FuQmF0Y2gvc2NhblBvcyBpdGVtLCBzYXZpbmcgaXQgaW4KKyAqIHNjYW5CYXRj aCdzIGRlYWRJdGVtcyBhcnJheS4gIFRoZSBpdGVtcycgaW5kZXggdHVwbGVzIHdpbGwgbGF0ZXIg YmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3VycmVudCBzY2FuQmF0Y2ggaXMgZnJlZWQuCisg Ki8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5z Y2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNjYW5CYXRjaC0+ZGVhZEl0ZW1zID09IE5VTEwp CisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgc2Nhbi0+bWF4aXRl bXNiYXRjaCk7CisJaWYgKHNjYW5CYXRjaC0+bnVtRGVhZCA8IHNjYW4tPm1heGl0ZW1zYmF0Y2gp CisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zW3NjYW5CYXRjaC0+bnVtRGVhZCsrXSA9IHNjYW5Qb3Mt Pml0ZW07Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBi YXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBs ZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkCisgKiB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hl cyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisgKgorICogV2UgY2FsbCBhbXVuZ3VhcmRiYXRj aCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoZS5nLiBidWZmZXIKKyAqIHBp bikgd2hlbiBpdCBoYXNuJ3QgYmVlbiBkcm9wcGVkIHlldC4gIEZvciBwbGFpbiBNVkNDIHNjYW5z ICh3aGVyZQorICogYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIHNldCksIHRoZSBpbnRlcmxvY2sg d2FzIGFscmVhZHkgZHJvcHBlZCBlYWdlcmx5CisgKiBpbiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrLCBzbyB3ZSBza2lwIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsIGhlcmUuCisgKiBJbmRleC1v bmx5IHNjYW5zIG11c3QgZGVsYXkgZHJvcHBpbmcgdGhlIGludGVybG9jayB1bnRpbCB2aXNpYmls aXR5IGlzCisgKiByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBiYXRjaCwgc28gYW11bmd1 YXJkYmF0Y2ggbWF5IHN0aWxsIG5lZWQgdG8KKyAqIGFjdCBoZXJlLiAgRm9yIG5vbi1NVkNDIHNu YXBzaG90IHNjYW5zLCB0aGUgaW50ZXJsb2NrIGlzIGFsd2F5cyBoZWxkCisgKiB1bnRpbCBhbXVu Z3VhcmRiYXRjaCBkcm9wcyBpdCBoZXJlIC0tIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2lsbGlu ZyB0bworICogdW5ndWFyZCBhIG5vbi1NVkNDIHNjYW4ncyBiYXRjaC4KKyAqCisgKiBXaGVuIHRo ZSBiYXRjaCBoYXMgZGVhZCBpdGVtcyAobnVtRGVhZCA+IDApIGFuZCB0aGUgaW5kZXggQU0gcHJv dmlkZXMgYW4KKyAqIGFta2lsbGl0ZW1zYmF0Y2ggY2FsbGJhY2ssIHdlIGNhbGwgaXQgdG8gc2V0 IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgKKyAqIHBhZ2UuICBXZSBhbHdheXMgcmVjeWNsZSB0 aGUgYmF0Y2ggbWVtb3J5IHZpYSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBO b3RlOiBDYWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gnIGlzIGFsc28gYmF0Y2hyaW5nYnVmLm1hcmtC YXRjaCBpcyBhIG5vLW9wLgorICogQ2FsbGVycyB0aGF0IGRvbid0IHdhbnQgdGhpcyBzaG91bGQg c2V0IGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8gTlVMTAorICogYmVmb3JlIGNhbGxpbmcgdXMu ICBOb3RlIHRoYXQgbWFya0JhdGNoIGhhcyB0byBiZSBleHBsaWNpdGx5IGZyZWVkLgorICovCit2 b2lkCit0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQoreworCS8qIFBhc3MgdGhyb3VnaCB0byBpbXBsZW1lbnRhdGlvbiBmdW5j dGlvbiwgd2l0aCBhbGxvd19jYWNoZT10cnVlICovCisJYmF0Y2hfZnJlZShzY2FuLCBiYXRjaCwg dHJ1ZSk7Cit9CisKKy8qCisgKiBGcmVlIGEgYmF0Y2gsIG9wdGlvbmFsbHkgY2FjaGluZyBpdCBm b3IgcmV1c2UuCisgKgorICogdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggaW1wbGVtZW50YXRpb24g ZnVuY3Rpb24uICBXZSBzcGxpdCBvdXQgdGhlCisgKiBpbXBsZW1lbnRhdGlvbiBsaWtlIHRoaXMg YmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGdpdmUgZXh0ZXJuYWwgdGFibGUgQU0KKyAqIGNhbGxl cnMgdGhlIG9wdGlvbiBvZiBwYXNzaW5nIGFsbG93X2NhY2hlPWZhbHNlLgorICoKKyAqIFdoZW4g YWxsb3dfY2FjaGUgaXMgdHJ1ZSwgd2UgdHJ5IHRvIHN0b3JlIHRoZSBiYXRjaCBpbiB0aGUgc2Nh bidzIGJhdGNoCisgKiBjYWNoZSBmb3IgbGF0ZXIgcmV1c2UuICBXaGVuIGFsbG93X2NhY2hlIGlz IGZhbHNlICh0eXBpY2FsbHkgYmVjYXVzZSB0aGUKKyAqIHNjYW4gaXMgc2h1dHRpbmcgZG93biks IHdlIHBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCB1bmNvbmRpdGlvbmFsbHkuCisgKi8KK3N0YXRp YyB2b2lkCitiYXRjaF9mcmVlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gsIGJvb2wgYWxsb3dfY2FjaGUpCit7CisJQXNzZXJ0KCEoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVV bmd1YXJkICYmIGJhdGNoLT5pc0d1YXJkZWQpKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCB8 fCBzY2FuLT5NVkNDU2Nhbik7CisKKwkvKiBkb24ndCBmcmVlIGNhbGxlcidzIGJhdGNoIGlmIGl0 IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAqLworCWlmIChiYXRjaCA9PSBzY2FuLT5iYXRj aHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47CisKKwkvKiBEcm9wIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrIHZpYSBhbXVuZ3VhcmRiYXRjaCBhcyBuZWVkZWQgKi8KKwlpZiAoIXNjYW4tPmJh dGNoSW1tZWRpYXRlVW5ndWFyZCAmJiBiYXRjaC0+aXNHdWFyZGVkKQorCQl0YWJsZWFtX3V0aWxf dW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCk7CisKKwkvKgorCSAqIExldCB0aGUgaW5kZXggQU0g c2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXggcGFnZSwgaWYgYXBwbGljYWJsZS4KKwkgKgor CSAqIGJhdGNoLmRlYWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiBy ZXR1cm5lZCBpdGVtcyBpbi4KKwkgKiBXZSBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUg aXRlbS9USUQgdHdpY2UuCisJICoKKwkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IGRlYWRJdGVtc1td LiAgVGhhdCB3YXkgdGhlIGluZGV4IEFNIGNhbiBzYWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVt cyB3aWxsIGFsd2F5cyBiZSBpbiB0aGVpciBvcmlnaW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAq LworCWlmIChiYXRjaC0+bnVtRGVhZCA+IDAgJiYKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2ggIT0gTlVMTCkKKwl7CisJCWlmIChiYXRjaC0+bnVtRGVh ZCA+IDEpCisJCXsKKwkJCXFzb3J0KGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLCBz aXplb2YoaW50KSwKKwkJCQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJCWJhdGNoLT5udW1EZWFk ID0gcXVuaXF1ZShiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVhZCwKKwkJCQkJCQkJCSBz aXplb2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQpOworCQl9CisKKwkJc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8q CisJICogVHJ5IHRvIHN0b3JlIGNhbGxlcidzIGJhdGNoIGluIHRoaXMgYW1nZXRiYXRjaCBzY2Fu J3MgY2FjaGUgb2YKKwkgKiBwcmV2aW91c2x5IHJlbGVhc2VkIGJhdGNoZXMgZmlyc3QgKHdoZW4g Y2FsbGVyIHJlcXVlc3RzIGl0KQorCSAqLworCWlmIChhbGxvd19jYWNoZSAmJiBiYXRjaF9jYWNo ZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIGp1c3QgcGZyZWUgdGhlIGNh bGxlcidzIGJhdGNoIChwbHVzIGJhdGNoJ3MgZGVhZEl0ZW1zLCBpZiBhbnkpICovCisJaWYgKGJh dGNoLT5kZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNoLT5kZWFkSXRlbXMpOworCXBmcmVlKGluZGV4 X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCkpOworfQorCisvKgorICogRHJvcCB0aGUgYmF0 Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJkYmF0Y2gKKyAqCisgKiBD YWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Agd2hhdGV2ZXIgaW50 ZXJsb2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMgdG8gcHJldmVudCB1bnNhZmUgY29uY3VycmVu dCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlwaWNhbGx5IGEKKyAqIGJ1ZmZlciBwaW4gb24g dGhlIGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRjaCdzIG9wYXF1ZSBhcmVhKS4KKyAqLwordm9p ZAordGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBpZmYg IWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVV bmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW11bmd1YXJkYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJYmF0Y2gtPmlz R3VhcmRlZCA9IGZhbHNlOworfQorCisvKgorICogVW5sb2NrIGJhdGNoJ3MgaW5kZXggcGFnZSBi dWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgdGhlIGdpdmVuIGJ1ZmZlciBpbiBwcmVwYXJhdGlv biBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAqIHNhdmVkIGluIHRoYXQgYmF0Y2gu ICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJlZCBieSBhbWdldGJhdGNoIGNhbGxlcnMKKyAq IGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxsIGhlcmUgd2hlbiBhIGJhdGNoIGhhcyBvbmUg b3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNpbmcKKyAqIGFtZ2V0YmF0Y2ggKG9y IGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJpdG1hcCBvZiBtYXRjaGluZyBUSURz KS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0Y2hlcywgaXQncyBhbHdheXMgc2Fm ZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gZm9y IHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1z IHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRjaCBhbmQKKyAqIGFtZ2V0Yml0bWFwIHRvIGNv bnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2ggbWFuYWdlbWVudCBhcHByb2FjaCwgc2luY2UK KyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNwZWNpYWwgY2FzZXMgdG8gbG93ZXItbGV2ZWwg Y29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gYmF0Y2gncyBw YWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICoKKyAqIEZvciBhbWdldGJh dGNoIGNhbGxlcnMsIHdoZW4gYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIHNldCAocGxhaW4gTVZD QworICogc2NhbnMpLCB3ZSBhbHNvIHJlbGVhc2UgdGhlIHBpbiBoZXJlICh0aGUgVElEIHJlY3lj bGluZyBpbnRlcmxvY2spLCBzbworICogdGhhdCBubyBsYXRlciBhbXVuZ3VhcmRiYXRjaCBjYWxs YmFjayB3aWxsIGJlIG5lZWRlZC4gIE90aGVyd2lzZSB0aGUgdGFibGUKKyAqIEFNIHdpbGwgY2Fs bCBhbXVuZ3VhcmRiYXRjaCBsYXRlciB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBpbnRlcmxv Y2suCisgKgorICogSW5kZXggQU1zIHdob3NlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGlzIG5v dCBqdXN0IGEgYnVmZmVyIHBpbiwgb3Igd2hvc2UKKyAqIGFtdW5ndWFyZGJhdGNoIGRvZXMgbm90 IHNpbXBseSByZWxlYXNlIGEgcGluLCBhcmUgbm90IG9ibGlnYXRlZCB0byB1c2UgdGhpcworICog ZnVuY3Rpb24uICBUaGV5IGNhbiBpbXBsZW1lbnQgdGhlaXIgb3duIGVxdWl2YWxlbnQuICBTdWNo IGluZGV4IEFNcyBhcmUgYWxzbworICogZnJlZSB0byB1c2UgdGhlIGJhdGNoIExTTiBmaWVsZCB0 aGVtc2VsdmVzOyB0aGVpciBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUKKyAqIGNhbiB1c2UgdGhh dCBMU04gaW4gdGhlIHVzdWFsIHdheSwgb3IgaW4gd2hhdGV2ZXIgd2F5IHRoZSBBTSBkZWVtcyBu ZWNlc3NhcnkKKyAqIChjb3JlIGNvZGUgd2lsbCBub3QgdXNlIGl0IGZvciBhbnkgb3RoZXIgcHVy cG9zZSkuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKK3sKKwkvKiBiYXRjaCBt dXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0g Ki8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0g YmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKiBh bWdldGJhdGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVh cFJlbGF0aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUgdG8gc2V0IGJhdGNoLT5sc24g c28gdGhhdCBhbWtpbGxpdGVtc2JhdGNoIGhhcyBhIHdheSB0byBkZXRlY3QKKwkJICogd2hlbiBj b25jdXJyZW50IHRhYmxlIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4K KwkJICogcGxhY2UuICBJdCdsbCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBM UF9ERUFEIGJpdHMgd2hlbgorCQkgKiB0aGUgcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkg KgorCQkgKiBQbGFpbiBNVkNDIHNjYW5zIChiYXRjaEltbWVkaWF0ZVVuZ3VhcmQpIGFsc28gcmVs ZWFzZSB0aGUgcGluIG5vdywKKwkJICogZHJvcHBpbmcgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJs b2NrIHNvIHRoYXQgbm8gYW11bmd1YXJkYmF0Y2gKKwkJICogY2FsbGJhY2sgd2lsbCBiZSBuZWVk ZWQgbGF0ZXIuICBUaGUgaW5kZXggQU0gY2FsbGVyIG11c3QgY2xlYXIgaXRzCisJCSAqIG93biBv cGFxdWUgYnVmIGZpZWxkIGFmdGVyIHdlIHJldHVybi4KKwkJICoKKwkJICogTm9uLWltbWVkaWF0 ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0aGUgcGluOyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCisJ CSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhlIGludGVybG9jayB3aGVuIHJlYWR5LgorCQkg Ki8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCQlpZiAoc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQorCQl7CisJCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5k IHRoZSBwaW4gKi8KKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qIGp1c3QgZHJvcCB0aGUgbG9jayAoaG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAq LworCQkJVW5sb2NrQnVmZmVyKGJ1Zik7CisJCX0KKworCQkvKiBJZiB3ZSByZWxlYXNlZCBidWZm ZXIgcGluLCBiYXRjaCBpcyBub3cgdW5ndWFyZGVkICovCisJCWJhdGNoLT5pc0d1YXJkZWQgPSAh c2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkOworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJp dG1hcCAobm90IGFtZ2V0YmF0Y2gpIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uID09IE5VTEwpOworCisJCS8qIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLwor CQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYSBu ZXcgYmF0Y2gKKyAqCisgKiBVc2VkIGJ5IGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgYW1nZXRiYXRj aCBpbnRlcmZhY2UgKGJvdGggZHVyaW5nIGFtZ2V0YmF0Y2gKKyAqIGFuZCBhbWdldGJpdG1hcCBz Y2FucykuCisgKgorICogUmV0dXJucyBJbmRleFNjYW5CYXRjaCB3aXRoIHNwYWNlIHRvIGZpdCBz Y2FuLT5tYXhpdGVtc2JhdGNoLW1hbnkKKyAqIEJhdGNoTWF0Y2hpbmdJdGVtIGVudHJpZXMuICBU aGlzIHdpbGwgZWl0aGVyIGJlIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLCBvcgorICogYSBiYXRj aCByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZSBtYW5hZ2VkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlLiAgU2VlCisgKiBjb21tZW50cyBhYm92ZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZS4KKyAqCisgKiBIb3VzZWtlZXBpbmcgZmllbGRzIChidWYsIGtub3duRW5kQmFja3dhcmQvRm9y d2FyZCwgZmlyc3RJdGVtLCBsYXN0SXRlbSwKKyAqIG51bURlYWQsIGRlYWRJdGVtcywgY3VyclR1 cGxlcykgYXJlIGluaXRpYWxpemVkIGhlcmUuICBUaGUgdGFibGUgQU0ncworICogYmF0Y2hfaW5p dCBjYWxsYmFjayBpcyBpbnZva2VkIGhlcmUgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGUgQU0gb3Bh cXVlIGFyZWEuCisgKiBUaGUgaW5kZXggQU0gY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxs aW5nIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlCisgKiBmaWVsZHMgYW5kIHRoZSBtYXRjaGluZyBp dGVtc1tdIGFycmF5LgorICoKKyAqIE9uY2UgdGhlIGJhdGNoIGhhcyB0aGUgcmVxdWlyZWQgbWF0 Y2hpbmcgaXRlbXMsIGNhbGxlciBzaG91bGQgZ2VuZXJhbGx5CisgKiBwYXNzIGl0IHRvIGluZGV4 YW1fdXRpbF9iYXRjaF91bmxvY2ssIGFoZWFkIG9mIGl0IGJlaW5nIHJldHVybmVkIHRocm91Z2gK KyAqIGluZGV4IEFNJ3MgYW1nZXRiYXRjaCByb3V0aW5lLiAgSWYgaXQgdHVybnMgb3V0IHRoYXQg dGhlIGJhdGNoIHdvbid0IG5lZWQKKyAqIHRvIGJlIHJldHVybmVkIGxpa2UgdGhpcyAoZS5nLiwg ZHVlIHRvIHRoZSBzY2FuIGhhdmluZyBubyBtb3JlIG1hdGNoZXMpLAorICogY2FsbGVyIHNob3Vs ZCBwYXNzIGl0cyBlbXB0eS91bnVzZWQgYmF0Y2ggdG8gaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2UuCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlib29sCQlu ZXdfYWxsb2MgPSBmYWxzZTsKKworCS8qCisJICogTGF6aWx5IGNvbXB1dGUgYmF0Y2hfdGFibGVf b2Zmc2V0IG9uIGZpcnN0IGFsbG9jYXRpb24uICBUaGlzIGNvbWJpbmVzCisJICogdGhlIHRhYmxl IEFNIGFuZCBpbmRleCBBTSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmdsZSBvZmZzZXQgdGhhdCBj YW4gYmUKKwkgKiB1c2VkIHRvIGZpbmQgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIChhbmQgdGhl IHRydWUgYWxsb2NhdGlvbiBiYXNlKQorCSAqIGZyb20gdGhlIGJhdGNoIHBvaW50ZXIuCisJICov CisJaWYgKHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9PSAwICYmCisJCShzY2FuLT5iYXRjaF9p bmRleF9vcGFxdWVfc2l6ZSA+IDAgfHwKKwkJIChzY2FuLT54c19oZWFwZmV0Y2ggJiYgc2Nhbi0+ eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA+IDApKSkKKwl7CisJCXVpbnQxNgkJdGFi bGVfb3BhcXVlID0gc2Nhbi0+eHNfaGVhcGZldGNoID8KKwkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+ YmF0Y2hfb3BhcXVlX3NpemUgOiAwOworCisJCXNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9IHRh YmxlX29wYXF1ZSArCisJCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsKKwl9CisKKwkv KiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHRoZSBjYWNoZSAqLworCWlm IChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1ND QU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSAh PSBOVUxMKQorCQkJeworCQkJCS8qIFJldHVybiBjYWNoZWQgdW5yZWZlcmVuY2VkIGJhdGNoICov CisJCQkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNoY2FjaGVb aV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKHNjYW4tPmJh dGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFJldXNlIGNhY2hlZCBiYXRjaCBm cm9tIHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0aCBpcworCQkgKiBoaXQg b24gZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJ CSAqLworCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVbMF07CisJCXNjYW4tPmJhdGNoY2FjaGVb MF0gPSBOVUxMOworCX0KKworCWlmICghYmF0Y2gpCisJeworCQlTaXplCQlwcmVmaXhfc3o7CisJ CVNpemUJCWJhc2Vfc3o7CisJCVNpemUJCXRyYWlsaW5nX3N6OworCQlTaXplCQlhbGxvY3N6Owor CQljaGFyCSAgICpyYXc7CisKKwkJLyogQU0gb3BhcXVlIGFyZWFzIGJlZm9yZSB0aGUgYmF0Y2gg cG9pbnRlciAqLworCQlwcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CisKKwkJ LyogSW5kZXhTY2FuQmF0Y2hEYXRhIGhlYWRlciArIGl0ZW1zW10gKi8KKwkJYmFzZV9zeiA9IG9m ZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCXNpemVvZihCYXRjaE1hdGNo aW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoOworCisJCS8qCisJCSAqIFRyYWlsaW5nIGRh dGEgYWZ0ZXIgaXRlbXNbXTogcGVyLWl0ZW0gZGF0YSAob3duZWQgYnkgdGFibGUgQU0pLAorCQkg KiB0aGVuIGN1cnJUdXBsZXMgd29ya3NwYWNlIChvd25lZCBieSBpbmRleCBBTSwgcmVhZCBieSB0 YWJsZSBBTSkKKwkJICovCisJCXRyYWlsaW5nX3N6ID0gMDsKKwkJaWYgKHNjYW4tPnhzX3dhbnRf aXR1cCkKKwkJeworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgorCQkJCXNjYW4tPnhzX2hl YXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdHJhaWxpbmdfc3ogKz0gTUFY QUxJR04oc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJ CQlzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCXRyYWlsaW5nX3N6ICs9IHNjYW4tPmJhdGNoX3R1 cGxlc193b3Jrc3BhY2U7CisJCX0KKworCQlhbGxvY3N6ID0gcHJlZml4X3N6ICsgTUFYQUxJR04o YmFzZV9zeikgKyB0cmFpbGluZ19zejsKKwkJcmF3ID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRj aCA9IChJbmRleFNjYW5CYXRjaCkgKHJhdyArIHByZWZpeF9zeik7CisKKwkJLyogU2V0IHVwIGN1 cnJUdXBsZXMgcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQlpZiAoc2Nhbi0+eHNf d2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwKQorCQl7CisJCQlT aXplCQlpdGVtc0VuZCA9IE1BWEFMSUdOKGJhc2Vfc3opOworCQkJU2l6ZQkJdGFibGVUcmFpbGlu ZyA9IDA7CisKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFw ZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKQorCQkJCXRhYmxlVHJhaWxpbmcgPSBNQVhB TElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgKgorCQkJCQkJCQkJ CSBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gKGNoYXIgKikg YmF0Y2ggKyBpdGVtc0VuZCArIHRhYmxlVHJhaWxpbmc7CisJCX0KKwkJZWxzZQorCQkJYmF0Y2gt PmN1cnJUdXBsZXMgPSBOVUxMOworCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUgZGVhZEl0 ZW1zIGxhemlseSAodGhvdWdoIG5vdGUgdGhhdCBjYWNoZWQgYmF0Y2hlcworCQkgKiBrZWVwIHRo ZWlyIGRlYWRJdGVtcyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+ ZGVhZEl0ZW1zID0gTlVMTDsKKwkJbmV3X2FsbG9jID0gdHJ1ZTsKKwl9CisKKwkvKiB4c193YW50 X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nh bi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwICYmCisJ CQkgYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpOworCisJLyogTGV0IHRoZSB0YWJsZSBBTSBp bml0aWFsaXplIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQorCQl0YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdf YWxsb2MpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmtub3duRW5k QmFja3dhcmQgPSBmYWxzZTsKKwliYXRjaC0+a25vd25FbmRGb3J3YXJkID0gZmFsc2U7CisJYmF0 Y2gtPmlzR3VhcmRlZCA9IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+ bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9 CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5Cisg KiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3Ig cmV1c2UgdG8gcmVkdWNlCisgKiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBz YWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJl YWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRj aGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGlu ZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBt dXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoLCB3aGljaCBjYWxscyBo ZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlm IGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0 byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisg KiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIg c2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBk b2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisg Ki8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJewor CQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRt YXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJ ICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJ ICovCisJCUFzc2VydChzY2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nh bi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBO VUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCisJCXNjYW4tPmJh dGNoY2FjaGVbMF0gPSBiYXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIGFtZ2V0YmF0Y2ggc2Nh biBjYWxsZXIgKi8KKwlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJLyoK KwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNjYW4n cyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdAorCSAqLwor CWlmIChiYXRjaF9jYWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIENh Y2hlIGZ1bGw7IGp1c3QgZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8KKwlpZiAoYmF0Y2gtPmRl YWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoaW5kZXhfc2Nhbl9i YXRjaF9iYXNlKHNjYW4sIGJhdGNoKSk7Cit9CisKKy8qCisgKiBUcnkgdG8gc3RvcmUgYSBiYXRj aCBpbiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIGZy ZWUgc2xvdCB3YXMgZm91bmQsIGZhbHNlIGlmIHRoZSBjYWNoZSBpcyBmdWxsLgorICovCitzdGF0 aWMgaW5saW5lIGJvb2wKK2JhdGNoX2NhY2hlX3N0b3JlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NB Q0hFX0JBVENIRVM7IGkrKykKKwl7CisJCWlmIChzY2FuLT5iYXRjaGNhY2hlW2ldID09IE5VTEwp CisJCXsKKwkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJldHVybiB0cnVlOwor CQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogcXNvcnQgY29tcGFyaXNvbiBm dW5jdGlvbiBmb3IgaW50IGFycmF5cworICovCitzdGF0aWMgaW50CitiYXRjaF9jb21wYXJlX2lu dChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50CQkJYSA9ICooKGNvbnN0 IGludCAqKSB2YSk7CisJaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7CisKKwlyZXR1cm4g cGdfY21wX3MzMihhLCBiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAppbmRl eCBkYTY0Y2I1OTUuLjgzZGZhM2YyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWls ZApAQCAtNSw0ICs1LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYW12YWxpZGF0 ZS5jJywKICAgJ2dlbmFtLmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4YmF0Y2guYycsCiAp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCmluZGV4IGNiOTIxY2EyZS4uYTM3ODY5YjcxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQpAQCAtMTc5LDE4ICsxNzksMTUgQEAgaG9sZCBvbiB0byB0 aGUgcGluICh1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBsZWFmIHBhZ2UpIHVudGlsIF9hZnRl cl8KIHRoZXkncmUgZG9uZSB2aXNpdGluZyB0aGUgaGVhcCAoZm9yIFRJRHMgZnJvbSBwaW5uZWQg bGVhZiBwYWdlKSBwcmV2ZW50cwogY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgVkFDVVVNIGNh bm5vdCBnZXQgYSBjb25mbGljdGluZyBjbGVhbnVwIGxvY2sKIHVudGlsIHRoZSBpbmRleCBzY2Fu IGlzIHRvdGFsbHkgZmluaXNoZWQgcHJvY2Vzc2luZyBpdHMgbGVhZiBwYWdlLgorVGhpcyBpcyBy ZXF1aXJlZCBieSBhbnkgaW5kZXggQU0gdGhhdCBpbXBsZW1lbnRzIHRoZSBhbWdldGJhdGNoCitp bnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwpLgogCi1UaGlz IGFwcHJvYWNoIGlzIGZhaXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lkIGl0IHdoZW5ldmVyIHBvc3Np YmxlLiAgSW4KLXByYWN0aWNlIG1vc3QgaW5kZXggc2NhbnMgd29uJ3QgaG9sZCBvbnRvIHRoZWly IHBpbiwgYW5kIHNvIHdvbid0IGJsb2NrCi1WQUNVVU0uICBUaGVzZSBpbmRleCBzY2FucyBtdXN0 IGRlYWwgd2l0aCBUSUQgcmVjeWNsaW5nIGRpcmVjdGx5LCB3aGljaCBpcwotbW9yZSBjb21wbGlj YXRlZCBhbmQgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRlciBzZWN0aW9uIG9uIG1ha2lu ZwotY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0KLU9wcG9ydHVuaXN0aWMgaW5kZXgg dHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgYWxtb3N0IHRoZSBzYW1lIHBhZ2UtbGV2ZWwKLW1vZGlm aWNhdGlvbnMgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcyBz YWZlIGJlY2F1c2UKLXRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5n IHBsYWNlIGxhdGVyIG9uIC0tIG9ubHkgVkFDVVVNCi1jYW4gbWFrZSBUSURzIHJlY3ljbGFibGUu ICBTZWUgYWxzbyBzaW1wbGUgZGVsZXRpb24gYW5kIGJvdHRvbS11cAotZGVsZXRpb24sIGJlbG93 LgorT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBw YWdlLWxldmVsCittb2RpZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUgb25seSBob2xkaW5nIGFu IGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcworc2FmZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHF1ZXN0 aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIC0tIG9ubHkKK1ZBQ1VVTSBjYW4gbWFr ZSBUSURzIHJlY3ljbGFibGUuICBJbiBvdGhlciB3b3JkcywgVkFDVVVNJ3MgY2xlYW51cCBsb2Nr CitzZXJ2ZXMgdG8gcHJvdGVjdCBub24tTVZDQyBzbmFwc2hvdCBzY2FucyBmcm9tIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZworaGF6YXJkczsgaXQgZG9lc24ndCBwcm90ZWN0IHRoZSBCLVRyZWUg c3RydWN0dXJlIGl0c2VsZi4KIAogQmVjYXVzZSBhIHBpbiBpcyBub3QgYWx3YXlzIGhlbGQsIGFu ZCBhIHBhZ2UgY2FuIGJlIHNwbGl0IGV2ZW4gd2hpbGUKIHNvbWVvbmUgZG9lcyBob2xkIGEgcGlu IG9uIGl0LCBpdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGluZGV4c2NhbiB3aWxsCkBAIC00NDAsNTQg KzQzNyw2IEBAIHdoZW5ldmVyIGl0IGlzIHN1YnNlcXVlbnRseSB0YWtlbiBmcm9tIHRoZSBGU00g Zm9yIHJldXNlLiAgVGhlIGRlbGV0ZWQKIHBhZ2UncyBjb250ZW50cyB3aWxsIGJlIG92ZXJ3cml0 dGVuIGJ5IHRoZSBzcGxpdCBvcGVyYXRpb24gKGl0IHdpbGwgYmVjb21lCiB0aGUgbmV3IHJpZ2h0 IHNpYmxpbmcgcGFnZSkuCiAKLU1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFzIGV4cGxhaW5lZCBpbiB0 aGUgZWFybGllciBzZWN0aW9uIGFib3V0IGRlbGV0aW5nIGluZGV4IHR1cGxlcyBkdXJpbmcKLVZB Q1VVTSwgd2UgaW1wbGVtZW50IGEgbG9ja2luZyBwcm90b2NvbCB0aGF0IGFsbG93cyBpbmRpdmlk dWFsIGluZGV4IHNjYW5zCi10byBhdm9pZCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBJbmRl eCBzY2FucyBvcHQtb3V0IChhbmQgc28gZHJvcCB0aGVpcgotbGVhZiBwYWdlIHBpbiB3aGVuIHZp c2l0aW5nIHRoZSBoZWFwKSB3aGVuZXZlciBpdCdzIHNhZmUgdG8gZG8gc28sIHRob3VnaC4KLURy b3BwaW5nIHRoZSBwaW4gZWFybHkgaXMgdXNlZnVsIGJlY2F1c2UgaXQgYXZvaWRzIGJsb2NraW5n IHByb2dyZXNzIGJ5Ci1WQUNVVU0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2l0 aCBpbmRleCBzY2FucyB1c2VkIGJ5IGN1cnNvcnMsCi1zaW5jZSBpZGxlIGN1cnNvcnMgc29tZXRp bWVzIHN0b3AgZm9yIHJlbGF0aXZlbHkgbG9uZyBwZXJpb2RzIG9mIHRpbWUuICBJbgotZXh0cmVt ZSBjYXNlcywgYSBjbGllbnQgYXBwbGljYXRpb24gbWF5IGhvbGQgb24gdG8gYW4gaWRsZSBjdXJz b3JzIGZvcgotaG91cnMgb3IgZXZlbiBkYXlzLiAgQmxvY2tpbmcgVkFDVVVNIGZvciB0aGF0IGxv bmcgY291bGQgYmUgZGlzYXN0cm91cy4KLQotSW5kZXggc2NhbnMgdGhhdCBkb24ndCBob2xkIG9u IHRvIGEgYnVmZmVyIHBpbiBhcmUgcHJvdGVjdGVkIGJ5IGhvbGRpbmcgYW4KLU1WQ0Mgc25hcHNo b3QgaW5zdGVhZC4gIFRoaXMgbW9yZSBsaW1pdGVkIGludGVybG9jayBwcmV2ZW50cyB3cm9uZyBh bnN3ZXJzCi10byBxdWVyaWVzLCBidXQgaXQgZG9lcyBub3QgcHJldmVudCBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcgaXRzZWxmIChvbmx5Ci1ob2xkaW5nIG9udG8gdGhlIGxlYWYgcGFnZSBwaW4g d2hpbGUgYWNjZXNzaW5nIHRoZSBoZWFwIGVuc3VyZXMgdGhhdCkuCi0KLUluZGV4LW9ubHkgc2Nh bnMgY2FuIG5ldmVyIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiwgc2luY2UgdGhleSBhcmUgdW5hYmxl IHRvCi10b2xlcmF0ZSBoYXZpbmcgYSByZWZlcmVuY2VkIFRJRCBiZWNvbWUgcmVjeWNsYWJsZS4g IEluZGV4LW9ubHkgc2NhbnMKLXR5cGljYWxseSBqdXN0IHZpc2l0IHRoZSB2aXNpYmlsaXR5IG1h cCAobm90IHRoZSBoZWFwIHByb3BlciksIGFuZCBzbyB3aWxsCi1ub3QgcmVsaWFibHkgbm90aWNl IHRoYXQgYW55IHN0YWxlIFRJRCByZWZlcmVuY2UgKGZvciBhIFRJRCB0aGF0IHBvaW50ZWQKLXRv IGEgZGVhZC10by1hbGwgaGVhcCBpdGVtIGF0IGZpcnN0KSB3YXMgY29uY3VycmVudGx5IG1hcmtl ZCBMUF9VTlVTRUQgaW4KLXRoZSBoZWFwIGJ5IFZBQ1VVTS4gIFRoaXMgY291bGQgZWFzaWx5IGFs bG93IFZBQ1VVTSB0byBzZXQgdGhlIHdob2xlIGhlYXAKLXBhZ2UgdG8gYWxsLXZpc2libGUgaW4g dGhlIHZpc2liaWxpdHkgbWFwIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuICBBbiBNVkNDCi1zbmFw c2hvdCBpcyBvbmx5IHN1ZmZpY2llbnQgdG8gYXZvaWQgcHJvYmxlbXMgZHVyaW5nIHBsYWluIGlu ZGV4IHNjYW5zCi1iZWNhdXNlIHRoZXkgbXVzdCBhY2Nlc3MgZ3JhbnVsYXIgdmlzaWJpbGl0eSBp bmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFwCi1wcm9wZXIuICBBIHBsYWluIGluZGV4IHNjYW4gd2ls bCBldmVuIHJlY29nbml6ZSBMUF9VTlVTRUQgaXRlbXMgaW4gdGhlCi1oZWFwIChpdGVtcyB0aGF0 IGNvdWxkIGJlIHJlY3ljbGVkIGJ1dCBoYXZlbid0IGJlZW4ganVzdCB5ZXQpIGFzICJub3QKLXZp c2libGUiIC0tIGV2ZW4gd2hlbiB0aGUgaGVhcCBwYWdlIGlzIGdlbmVyYWxseSBjb25zaWRlcmVk IGFsbC12aXNpYmxlLgotCi1MUF9ERUFEIHNldHRpbmcgb2YgaW5kZXggdHVwbGVzIGJ5IHRoZSBr aWxsX3ByaW9yX3R1cGxlIG9wdGltaXphdGlvbgotKGRlc2NyaWJlZCBpbiBmdWxsIGluIHNpbXBs ZSBkZWxldGlvbiwgYmVsb3cpIGlzIGFsc28gbW9yZSBjb21wbGljYXRlZCBmb3IKLWluZGV4IHNj YW5zIHRoYXQgZHJvcCB0aGVpciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11c3QgYmUgY2FyZWZ1bCB0 byBhdm9pZAotTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBs aWtlIGEga25vd24tZGVhZCBpbmRleAotdHVwbGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJl IHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nIGNvbmN1cnJlbnQgVElECi1yZWN5Y2xpbmcuICBJdCdz IGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24gaW5zZXJ0ZWQgYQot bmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2gg aGFzIHRoZSBzYW1lCi1vcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRv IExQX0RFQUQtc2V0IHRoaXMgbmV3LAotdW5yZWxhdGVkIGluZGV4IHR1cGxlLgotCi1XZSBoYW5k bGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3Rl ZCBpbmRleAotc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55IGNoYW5nZSB0byB0 aGUgbGVhZiBwYWdlIGF0IGFsbAotaW1wbGllcyB0aGF0IGl0IHdhcyByZWFjaGVkIGJ5IGJ0YnVs a2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwotYnVmZmVyIHBpbiB3YXMgaGVs ZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQX0RFQUQgYml0cwot b24gdGhlIGxlYWYgcGFnZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdzIExTTiBoYXMgY2hhbmdlZC4g IChUaGlzIGlzIHdoeSB3ZQotaW1wbGVtZW50ICJmYWtlIiBMU05zIGZvciB1bmxvZ2dlZCBpbmRl eCByZWxhdGlvbnMuKQotCiBGYXN0cGF0aCBGb3IgSW5kZXggSW5zZXJ0aW9uCiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTczNCw3ICs2ODMsNyBAQCBvZiByZWFkZXJzIGNvdWxk IHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxl dmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVy aW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVw bGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhp cyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBs ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNl cnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNl cnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4g dGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cg dHVwbGUgTFBfREVBRCBiaXRzLCBidXQKQEAgLTc1Niw5ICs3MDUsOCBAQCBub24tTVZDQyBzY2Fu cyBpcyBub3QgcmVxdWlyZWQgb24gc3RhbmRieSBub2Rlcy4gV2Ugc3RpbGwgZ2V0IGEgZnVsbAog Y2xlYW51cCBsb2NrIHdoZW4gcmVwbGF5aW5nIFZBQ1VVTSByZWNvcmRzIGR1cmluZyByZWNvdmVy eSwgYnV0IHJlY292ZXJ5CiBkb2VzIG5vdCBuZWVkIHRvIGxvY2sgZXZlcnkgbGVhZiBwYWdlIChv bmx5IHRob3NlIGxlYWYgcGFnZXMgdGhhdCBoYXZlCiBpdGVtcyB0byBkZWxldGUpIC0tIHRoYXQn cyBzdWZmaWNpZW50IHRvIGF2b2lkIGJyZWFraW5nIGluZGV4LW9ubHkgc2NhbnMKLWR1cmluZyBy ZWNvdmVyeSAoc2VlIHNlY3Rpb24gYWJvdmUgYWJvdXQgbWFraW5nIFRJRCByZWN5Y2xpbmcgc2Fm ZSkuIFRoYXQKLWxlYXZlcyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLiAoWFhY OiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5Ci10aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVy aW5nIHJlY292ZXJ5LikKK2R1cmluZyByZWNvdmVyeS4gVGhhdCBsZWF2ZXMgY29uY2VybiBvbmx5 IGZvciBwbGFpbiBpbmRleCBzY2Fucy4KKyhYWFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkgdGhp cyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4pCiAKIE1WQ0Mgc25hcHNo b3QgcGxhaW4gaW5kZXggc2NhbnMgYXJlIGFsd2F5cyBzYWZlLCBmb3IgdGhlIHNhbWUgcmVhc29u cyB0aGF0CiB0aGV5J3JlIHNhZmUgZHVyaW5nIG9yaWdpbmFsIGV4ZWN1dGlvbi4gIEhlYXBUdXBs ZVNhdGlzZmllc1RvYXN0KCkgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpp bmRleCAwNTQ3MDM4NjEuLjAwNDZjODRkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMKQEAgLTEwNjAsNiArMTA2MCw5IEBAIF9idF9yZWxidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIg YnVmKQogICogTG9jayBpcyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmluZyBhbm90aGVyIHBpbi4g IFRoaXMgaXMgbGlrZSBhIHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGwsIGJ1dCBwZXJmb3JtcyBl eHRyYSBzdGVwcyBuZWVkZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90ZTogX2J0X2JhdGNoX3Vu bG9jayBpbiBuYnRzZWFyY2guYyAoaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayB3cmFwcGVyCisg KiBmdW5jdGlvbikgaGFzIG1hdGNoaW5nIFZhbGdyaW5kIGJ1ZmZlciBsb2NrIGluc3RydW1lbnRh dGlvbi4KKyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdl KCkgd2l0aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJl ZCBpbiBfYnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICovCkBAIC0xMTAxLDEz ICsxMTA0LDE5IEBAIF9idF91bmxvY2tidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogCSAq IEJ1ZmZlciBpcyBwaW5uZWQgYW5kIGxvY2tlZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBleHBl Y3RlZCB0byBiZQogCSAqIGRlZmluZWQgYW5kIGFkZHJlc3NhYmxlLiAgQ2hlY2sgdGhhdCBwcm9h Y3RpdmVseS4KIAkgKi8KLQlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChCdWZmZXJHZXRQ YWdlKGJ1ZiksIEJMQ0tTWik7CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFn ZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKworCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVE KHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKIAogCS8qIExvY2tCdWZmZXIoKSBhc3NlcnRzIHRoYXQg cGluIGlzIGhlbGQgYnkgdGhpcyBiYWNrZW5kICovCiAJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CiAKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKIAlpZiAoIVJlbGF0aW9u VXNlc0xvY2FsQnVmZmVycyhyZWwpKQotCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZm ZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBh Z2UsIEJMQ0tTWik7CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVhZHBhZ2UuYwppbmRleCAyYmExY2E2NjAuLjM5YzY2MTQ5OCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBC VFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRw YWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVu dCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBw YWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1w aXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0 IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBO ZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3Rh dGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMg Ym9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9i dF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9z dGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCi0JCQkJCQkJ CSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3Rpbmdp dGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVP ZmZzZXQpOworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNo LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVt cyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkJ CQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZv aWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1J bmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIHRhYmxl VGlkLCBpbnQgYmFzZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJ CQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2No ZWNrX2NvbXBhcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEx MSwxNSArMTExLDE1IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5 cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2Fk IGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3Jl YWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0 Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5j dXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAg QWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0 aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+ Y3VyclBvcyBhcmUKKyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBu ZXdiYXRjaC5idWY7IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4g IEFsc28sIG5ld2JhdGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwor ICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Yg bmV3YmF0Y2ggYXJlCiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBX ZSBzY2FuIHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4g dGhlIGluZGljYXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2Fu IGtleXMgYXJlIGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwg aXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMu CiAgKiBtb3JlTGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlm IF9idF9jaGVja2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRj aGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0 IGJlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFy cmF5cykuCkBAIC0xMzEsMTEgKzEzMSwxMiBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNf d2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJldHVybnMgdHJ1ZSBpZiBh bnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8K IGJvb2wKLV9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdlKQorX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKQogewogCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoID0gQlRC YXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVl IG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwpAQCAtMTQ0LDIzICsxNDUsMjAgQEAgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51 bWJlciBvZmZudW0sCiAJYm9vbAkJYXJyYXlLZXlzLAogCQkJCWlnbm9yZV9raWxsZWRfdHVwbGVz ID0gc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXM7CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1 cGxlT2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVy IGJsb2NrIG51bWJlciwgYWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRu ZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0Jc28tPmN1 cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOwot CXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0Jc28tPmN1cnJQb3Mu bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0aW5nIHNvLT5jdXJy UG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8KLQlwc3RhdGUuZGly ID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCA9 IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRC bG9ja051bWJlcihidG5ld2JhdGNoLT5idWYpOworCWJ0bmV3YmF0Y2gtPnByZXZQYWdlID0gb3Bh cXVlLT5idHBvX3ByZXY7CisJYnRuZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4 dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3Jl UmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikg Ki8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9y ZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcikgPyBidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiBidG5ld2JhdGNoLT5t b3JlTGVmdCk7CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJ LyogaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg2LDE0IEBAIF9i dF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXRO dW1iZXIgb2ZmbnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBi eSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4 dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxf cmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5uZXh0UGFnZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gt PmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1 cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRf cGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5wcmV2UGFnZSwKKwkJCQkJCQkJIGJ0 bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5j dXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2Uo cmVsLCBwc3RhdGUuY3VycnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAogCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewpAQCAtMjEyLDExICsyMTAsMTEgQEAgX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBv ZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUu ZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5k ZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7 CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1T Y2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlfYnRfcGFy YWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBv cy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJ CQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzgsMjYgQEAgX2J0X3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJ CQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQll bHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNl dDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgZmly c3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9z ZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJ CSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOwor CQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCiAJ CQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8K IAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkr KykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZu dW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51 bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJ CQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4 Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzNywxMSBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVS aWdodCA9IGZhbHNlOworCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAKIAkJQXNz ZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJc28tPmN1cnJQb3MuZmly c3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJ bmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKQEAgLTM2 MSwxMSArMzU4LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hl Y2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVk dWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5j dXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFs c2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbikKIAkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJ CQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5l d2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00 NjYsMjcgKzQ2MywyNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVy IGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRl eCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgs IG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJ CQkJdWludDE2CQluaXRlbXMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWlu dAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1 cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRl bUluZGV4LS07Ci0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVt cyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3Nl dHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJ ICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAg aXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1l bWJlciBhbGwgcHJpb3IgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAo aW50IGkgPSBuaXRlbXMgLSAyOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4 LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJ CQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJ CQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxl T2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBA IC01MDIsMTIgKzQ5OSwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUK IAkJICovCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVM ZWZ0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2Vy dChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsK LQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28t PmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNo LT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQ ZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBAIC01MjQsNyArNTIwLDcgQEAgX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBv ZmZudW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1 cm4gKHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0 dXJuIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKIC8q CkBAIC0xMDI3LDkwICsxMDIzLDkxIEBAIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCXJldHVybiB0cnVlOwogfQogCi0vKiBTYXZl IGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBT YXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0 aWMgdm9pZAotX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJ CSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2F2ZWl0ZW0oSW5k ZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0s CisJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0 ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KIAlBc3NlcnQo IUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApICYmICFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsK IAotCWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zm c2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwluZXdiYXRjaC0+aXRlbXNbaXRl bUluZGV4XS50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQog CXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0t PnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28t PmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7 Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQlu ZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJ bWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3op OworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBT ZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3Qg dHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1z W2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAg U2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUg c2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRl eCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0 dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBw b3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGlu Z2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3Bh Y2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJu cyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFp biB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIElu ZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdi YXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwog Ci0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQg PSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxl VGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJy VHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRydW5jYXRlIHBvc3Rpbmcg bGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXplCQlpdHVwc3ogPSBCVHJlZVR1cGxl R2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3ogPSBNQVhBTElHTihpdHVwc3opOwot CQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0J CWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1 cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCWJhc2Ug PSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0KTsKIAkJ bWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERlZmVuc2l2ZWx5IHJlZHVjZSB3b3Jr IGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+dF9pbmZvICY9IH5JTkRF WF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0JCXNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9mZnNldCArPSBpdHVwc3o7CiAKLQkJ cmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0 OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCisgKiBTYXZl IGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50 IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5n aXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3VycmVudAotICogcG9zdGluZyBs aXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0 LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVl IGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3NhdmVwb3N0aW5n aXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0s Ci0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNldCkKK19idF9zYXZlcG9z dGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51 bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCkK IHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5k ZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhP ZmZzZXQgPSBvZmZudW07CisJaXRlbS0+dGFibGVUaWQgPSAqdGFibGVUaWQ7CisJaXRlbS0+aW5k ZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25seSBzY2FucyByZXR1 cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdp bmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAoc28tPmN1cnJUdXBs ZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0OworCWlmIChuZXdiYXRj aC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAj ZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAgLTI4MjEsMTQgKzI4MTgs MTUgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKgogCSAqIE5vdGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3Vt cHRpb24gdGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJICogYWxzbyBiZSB1 c2VkIHdpdGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVwIG9mZiB0aGlzIHBh Z2UuCi0JICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMgc2NoZWR1bGVkIHBy aW1pdGl2ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRo ZSBkaXJlY3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIuCisJICogVGhlIHNjYW4gZGlyZWN0aW9u IG1pZ2h0IGJlIHJldmVyc2VkIGR1cmluZyB0aGUgbmV4dCBhbWdldGJhdGNoIGNhbGwsCisJICog YnV0IG5vdCBiZWZvcmUgYSBjYWxsIHRvIGJ0cG9zcmVzZXQgdGhhdCByZXNldHMgdGhlIGFycmF5 IGtleXMgdG8gdGhlCisJICogZmlyc3QgcG9zaXRpb25zL2VsZW1lbnRzIHVzZWQgd2hlbiBzY2Fu bmluZyBpbiB0aGlzIG90aGVyIGRpcmVjdGlvbi4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2Nh biA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5l ZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwogCiAJ aWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9z Y2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxlIGRv ZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjg0MSw5ICsy ODM5LDggQEAgZW5kX3RvcGxldmVsX3NjYW46CiAJICogVGhpcyBlbmRzIHRoZSBlbnRpcmUgdG9w LWxldmVsIHNjYW4gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCiAJICoKIAkgKiBOb3Rl OiBUaGUgc2NhbidzIGFycmF5cyAoaW5jbHVkaW5nIGFueSBub24tcmVxdWlyZWQgYXJyYXlzKSBh cmUgbm93IGluCi0JICogdGhlaXIgZmluYWwgcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBzY2Fu IGRpcmVjdGlvbi4gIElmIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGhhcHBlbnMgdG8gY2hhbmdl LCB0aGVuIHRoZSBhcnJheXMgd2lsbCBhbHJlYWR5IGJlIGluIHRoZWlyCi0JICogZmlyc3QgcG9z aXRpb25zIGZvciB3aGF0IHdpbGwgdGhlbiBiZSB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4K KwkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9u LiAgVGhpcyBpcyBqdXN0CisJICogZGVmZW5zaXZlLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVz Y2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+ bmVlZFByaW1TY2FuID0gZmFsc2U7CS8qIC4uLmFuZCBkb24ndCBjYWxsIF9idF9maXJzdCBhZ2Fp biAqLwpAQCAtMjkxMCwxNyArMjkwNyw5IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVt ZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJLyoKIAkgKiBUaGUg YXJyYXkga2V5cyBhcmUgbm93IGV4aGF1c3RlZC4KIAkgKgotCSAqIFJlc3RvcmUgdGhlIGFycmF5 IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UKLQkg KiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVyIHJh dGNoZXQgaW4gdGhlCi0JICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdpdGhv dXQgdGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhlIHNj YW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxlIHJ1 bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVhZHBh Z2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBwYWdl IGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwotCSAq IHR5cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0dHVw bGUgZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGludmFs aWRhdGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVkIHll dCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCisJICogRGVm ZW5zaXZlbHkgcmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgcG9zaXRpb25zIHRoZXkgd2Vy ZSBpbgorCSAqIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZSB3ZXJlIGNhbGxlZCAoaS5lLiB0byB0aGVp ciBmaW5hbCBwb3NpdGlvbnMgZm9yCisJICogdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLgog CSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWUuYwppbmRleCA2ZDg3MGU0ZWIuLmUwODdjYjgyNCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCkBAIC0xNjEsMTEgKzE2MSwxMyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJ T05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVn aW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLAotCQkuYW1nZXR0 dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2gg PSBidGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBidHVuZ3VhcmRiYXRjaCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBidGdl dGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IGJ0bWFy a3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9IGJ0cG9z cmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2Nh biwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDEzICsyMjYsMTMgQEAgYnRp bnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8q Ci0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJ YnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4g dGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlC VFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVz OworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5o ZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKQEAgLTI0Myw0NSArMjQ1LDIwIEBAIGJ0Z2V0dHVwbGUo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICogSWYgd2Un dmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQg aW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBz byB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGlu IHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNoIGluIHRo ZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJ CXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJh dGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENo ZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxl LgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgot CQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBz dWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4 IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1 c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4g dGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJl ZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1p emUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3Qg Zm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0 ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1h eFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJU cmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3Vy clBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0 Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQly ZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxl LCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwg cmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVy d2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3 aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4pKTsKIAot CXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjkxLDM4ICsyNjgsNDMg QEAgaW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0p CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUlu ZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSXRlbVBvaW50ZXIgaGVh cFRpZDsKKwlJdGVtUG9pbnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRp b24gPT0gTlVMTCk7CiAKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIg cHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBh Z2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u KSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmly c3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJ RCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0 aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCWludAkJ CWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCXRh YmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJdGJtX2FkZF90 dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7 OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFn ZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0 KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQ b3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXpl ZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7 Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAo IV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJLyoKKwkJCQkJICog X2J0X25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycworCQkJ CQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlz CisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleCA9 IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJh dGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCS8qIFNh dmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQgPSAmc28t PmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOwotCQkJCXRibV9h ZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRhYmxlVGlkID0gJmJhdGNo LT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFi bGVUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9CkBAIC0zNDksOCArMzMx LDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVj dChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZL ZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9m S2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2NCwxOSArMzQ0LDExIEBA IGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNv LT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVMTDsKIAotCXNvLT5r aWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0g MDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJl IGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3Bh Y2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0JICogc2Nhbi0+ eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2luY2UgdGhhdCdzIHNv IGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBsZXMgPSBOVUxMOwot Ci0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0KIAlzY2FuLT5v cGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFnZTsKKwlzY2FuLT5iYXRj aF9pbmRleF9vcGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpOworCXNj YW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2NhbjsKIH0K QEAgLTM5MCw2NCArMzYyLDE4NSBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBs b2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9i dF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3Mp OwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdl IHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUg cmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBh IGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJv cCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJh Y2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBp biB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhh dCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9w cGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlu cyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBz Y2FucyBlaXRoZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBj eWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1F IHNlY3Rpb24gb24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0J ICogTm90ZTogc28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4K LQkgKi8KLQlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNN VkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQ cmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRl RGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsK LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUg dHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4g YW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8g c2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0 ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5k c2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3Vy clR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2Mo QkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7 Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkg JiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5r ZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVk UHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0 ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRf cHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRp dHRvICovCiB9CiAKKy8qCisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQg cmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRh YmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICog cHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgorICovCit2b2lkCiti dHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQor eworCUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOwor CisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVu Z3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0 KGJhdGNoLT5pc0d1YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5idWYpOworfQor CisvKgorICoJYnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVw bGVzIExQX0RFQUQKKyAqLwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBi YXRjaCk7CisJUGFnZQkJcGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJl ciBtaW5vZmY7CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcg PSBmYWxzZTsKKwlCdWZmZXIJCWJ1ZjsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCS8qIFRh YmxlIEFNIHNob3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0Y2ggcGFnZSdzIHBpbiBieSBu b3cgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9idF9nZXRidWYo cmVsLCBidGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJH ZXRMU05BdG9taWMoYnVmKTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlm IChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9u IGhpbnRpbmcgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdl KTsKKwltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBhZ2VHZXRN YXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJ dGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gt Pm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNb aV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4 XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3Nl cnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5s YXN0SXRlbSk7CisJCUFzc2VydChpID09IDAgfHwKKwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRl bXNbYmF0Y2gtPmRlYWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKKworCQlpZiAob2ZmbnVt IDwgbWlub2ZmKQorCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLworCQl3aGlsZSAo b2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBh Z2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0 SXRlbShwYWdlLCBpaWQpOworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7CisKKwkJCWlmIChC VHJlZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50CQkJcGkgPSBpICsgMTsK KwkJCQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOworCQkJ CWludAkJCWo7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCQl7CisJ CQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsK KworCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQor CQkJCQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJCUFzc2Vy dChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKworCQkJCQkvKgorCQkJCQkgKiBSZWFk LWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkgKgorCQkJCQkgKiBXZSByZWx5IG9u IHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJlCisJCQkJCSAqIHdp bGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJ CQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4 dAorCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSWYsIG9uIHRoZSBv dGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgorCQkJCQkgKiB0aGUgcG9z dGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCisJCQkJCSAqIHJlZ2FyZGxl c3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0CisJCQkJCSAqIGtpdGVt IGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKKwkJCQkJ ICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgorCQkJCQkg Ki8KKwkJCQkJaWYgKHBpIDwgYmF0Y2gtPm51bURlYWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+ aXRlbXNbYmF0Y2gtPmRlYWRJdGVtc1twaSsrXV07CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBE b24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0 bworCQkJCSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUg c2FtZQorCQkJCSAqIG9mZm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGlt aXphdGlvbiBoYXJkbHkKKwkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlv bnMgb2YgdGhlIG91dGVybW9zdCBsb29wCisJCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRo aXMgc2FtZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBoZWFwCisJCQkJICogVElEIGluc3RlYWQsIHNv IHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4CisJCQkJICogdHVwbGUgcHJl dHR5IHF1aWNrbHkuKQorCQkJCSAqLworCQkJCWlmIChqID09IG5wb3N0aW5nKQorCQkJCQlraWxs dHVwbGUgPSB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBs ZS0+dF90aWQsICZraXRlbS0+dGFibGVUaWQpKQorCQkJCWtpbGx0dXBsZSA9IHRydWU7CisKKwkJ CS8qCisJCQkgKiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4g IFNpbmNlIHRoaXMKKwkJCSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIg bG9jaywgaXQncyBwb3NzaWJsZSB0aGF0CisJCQkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1w dCB0byBkbyB0aGlzIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nCisJCQkgKiB0byBtdWx0aXBsZSBm dWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQgdG8gV0FMIChpZgorCQkJICogd2FsX2xvZ19oaW50 cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlzCisJCQkgKiB1bmRlc2ly YWJsZS4KKwkJCSAqLworCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJ CQl7CisJCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBV c2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkg KiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UK KwkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJ CQkJCSAqLworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdv dG8gdW5sb2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3Rp bmcgbGlzdCBpdGVtcyAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29t ZXRoaW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3Ag Ki8KKwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0K KworCS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFy ayBhcyBkaXJ0eSBoaW50LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9E RUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdo aWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQorCSAqIG9ubHkgcmVs eSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCisJICov CisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBf SEFTX0dBUkJBR0U7CisJCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7 CisJfQorCit1bmxvY2tfcGFnZToKKwlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKK30KKwogLyoKICAq CWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NiwxMTYgKzU0OSw2 MyBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFu eSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+ Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3Np dGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0 b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEp OwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRl eHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVs ZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJ cGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJ cGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUg cGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJr cG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSBy ZXNldCBhcnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisgKgorICogQ2Fs bGVkIGJ5IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBwb3NpdGlvbiBp cyBhYm91dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMgb3VyIGFycmF5 IGtleSBzdGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBtYXJrZWQgcG9z aXRpb24sIG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5CisgKiB3aGls ZSBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9yaWdpbmFsbHkg dXNlZC4KKyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5c3RlbSB3aWxs IGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQgYmVmb3JlIGNh bGxpbmcgaGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgorICogcmVzZXR0 aW5nIG91ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBiYXRjaCdzIGRp ciB3aWxsCisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4gYnRnZXRiYXRj aCByZXR1cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p CitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0 Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOwogCi0JLyogVGhl cmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMp CisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4 LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRo ZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAq IHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRo ZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBo YXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRvIGluaXRpYWwgc3Rh dGUgZm9yIHRoZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAqIGNsZWFyIG5lZWRQ cmltU2NhbiBhbmQgcmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBz b2Z0CisJICogYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5cyBwcm9jZWVkIGlu IHRoZSBzYW1lIGRpcmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRo ZSBzb2Z0IGFzc3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2Nh biB0byBzdGVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0aGUgYXJyYXlzIHJl Y292ZXIuCisJICogV2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdp bGwgcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2NhbiByZWFsbHkgaXMg bmVlZGVkIGJhc2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUncworCSAqIGEgcHJp bWl0aXZlIHNjYW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkg dmFsdWVzCisJICogKGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFn ZSB3ZSdsbCBzdGVwIG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5 IGtleSBzdGF0ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAorCSAqIHdlIHdvbid0 IGdldCBjb25mdXNlZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGluZCB0aGUga2V5IHNw YWNlCisJICogZm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChiZWhpbmQgaW4gdGVy bXMgb2YgdGhlIHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAgYXV0b21hdGljYWxs eS4gIEJ1dCB3aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2UncyBrZXkgc3BhY2Us IHRoZSBzY2FuIGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwotCWlmIChCVFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBv cy5pdGVtSW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJ0YmF0Y2gtPm1vcmVS aWdodCA9IHRydWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bv cyk7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgotICoJYnRyZXN0cnBv cygpIC0tIHJlc3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0 cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQot CXsKLQkJLyoKLQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2lu Y2UgdGhlIGxhc3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRlbUluZGV4LgotCQkg KgotCQkgKiBOQjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFueXRoaW5nIGluIHNv LT5tYXJrUG9zIHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28tPmN1cnJQb3MuaXRl bUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRo ZSBzY2FuIG1vdmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFu ZCB3ZSBhcmUKLQkJICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVu J3QgaG9sZGluZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRp bmcgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdlIG11c3QgZHJvcCBp dC4KLQkJICovCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJewotCQkJ LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7 Ci0JCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJfQotCi0JCWlmIChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVtcCBwaW4gb24gbWFy ayBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8KLQkJCWlmIChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5t YXJrUG9zLmJ1Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJ ICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkgICBzby0+bWFya1Bv cy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBs ZXMpCi0JCQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxlcywKLQkJCQkJICAg c28tPm1hcmtQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJy YXkga2V5cyAoc2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYgKHNvLT5udW1BcnJh eUtleXMpCi0JCQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwgc28tPmN1cnJQb3Mu ZGlyKTsKLQkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQot CQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQlidGJhdGNoLT5tb3Jl TGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5k ID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTg4 MSwxNSArOTIxLDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxv Y2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgot CSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQg c3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0 aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBz IGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkg KiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBh Z2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3Mp OwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsK LQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM5LDggKzEwNzAsNiBAQCBfYnRfcGFyYWxs ZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsK IAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNj YW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi5jMDg5ZWMzOGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMgKzIzLDQ5IEBACiAjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2Fu ZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOworc3RhdGljIGlubGlu ZSB2b2lkIF9idF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCwKKwkJCQkJCQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1ZmZlciBfYnRfbW92ZXJp Z2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJ CQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJCQkJCQlp bnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVs LCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2JpbnNyY2hf cG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNldE51bWJl ciBvZmZudW0pOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRl c2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFk Zmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJ CQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIg bGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsK K3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9m Zm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFk bmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJCQkJ CSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFsaWRh dGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkgQmxv Y2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gg X2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJ CQkJCSAgIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwogCiAKIC8qCi0gKglfYnRfZHJvcF9s b2NrX2FuZF9tYXliZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygpIC0tIG5idHJlZSB3cmFw cGVyIGZvciBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrLgogICoKLSAqIFVubG9jayBzby0+Y3Vy clBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KLSAq IERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWly aW5nIGEgY2xlYW51cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUgVmFsZ3JpbmQgaW5zdHJ1 bWVudGF0aW9uIGFzIF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQor X2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo LCBCdWZmZXIgYnVmKQogewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3Ag dGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQ b3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQYWdl CQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBEcm9wIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28g dGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkgKiB3aGVuIGNvbmN1cnJl bnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgot CSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3VyclBvcy5i dWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQocGFnZSwg QkxDS1NaKTsKKyNlbmRpZgorCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRj aCwgYnVmKTsKKworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlmICghUmVsYXRpb25Vc2Vz TG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxHUklORF9NQUtFX01FTV9O T0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBAIC04NjAsMjYgKzg1Niwy NSBAQCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglfYnRfZmlyc3QoKSAt LSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJzdCgpIC0tIEZpbmQg dGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0byBiZSBjbGV2ZXIg YWJvdXQgdGhlIGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJY29uZGl0aW9ucywg YW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCi0gKgkJ aWYgYmFja3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0aXNm aWVzIHRoZQotICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nlc3Mg ZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBo YXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwgbG9j a3MgYW5kIGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5nCi0g KgkJc28tPmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUg cGluLgotICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8g c2NhbiBvbiBzdWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVy aW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRoZSBsYXN0IGxlYWYg cGFnZSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdpdGggYXQgbGVhc3QK KyAqCQlvbmUgdHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb25zIGluIHRoZSBz Y2FuIGtleS4gIE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBuZXcgYmF0Y2ggd2l0 aCB0aGF0IHBhZ2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0 Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBp bnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJ ZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChpbiB0aGUgZ2l2ZW4g c2NhbiBkaXJlY3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1 cm5pbmcgTlVMTCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlCisgKiBlbmQgb2YgdGhlIHRv cC1sZXZlbCBzY2FuOyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8KKyAq IGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlzIHJlcXVpcmVkLgog ICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURhdGFbXSBz Y2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fua2V5cyAo c2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4gdGhpcyBy b3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRvIHVz ZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJvb2wKK0lu ZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtODkyLDgg Kzg4NywxMiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJhdGVneTsKIAlCbG9j a051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0Y3VycmJsa25vOwor CUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaDsK IAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRl IHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0 Y2hfYWxsb2Moc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmly c3RiYXRjaCk7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBhbmQgZWxpbWluYXRl IGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA5LDcgKzkwOCw4IEBAIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJQXNz ZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCXJl dHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRj aCk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCkBAIC05MTgsNyArOTE4LDEwIEBAIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmIChz Y2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2Fu LCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJuIGZhbHNlOworCXsKKwkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBO VUxMOwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2NhbiBpcyB1bnNldCkgKi8K Kwl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9y IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05MzgsMTEgKzk0MSw5IEBAIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlBc3NlcnQoIXNvLT5u ZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9y ZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQly ZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0 Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCXJl dHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRy dWUpOwogCX0KIAogCS8qCkBAIC0xMjQyLDcgKzEyNDMsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3RlOiBjYWxscyBfYnRfcmVhZGZp cnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJhbGxlbCBzY2FuLgogCSAqLwog CWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNjYW4sIGRpcik7CisJCXJl dHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNoKTsKIAogCS8qCiAJICogV2Ug d2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRoZSBpbmRleC4gIFNldCB1 cCBhbgpAQCAtMTUwMiw3ICsxNTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0 IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgc3Ry YXRfdG90YWw6ICVkIiwgKGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJ cmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKQEAgLTE1MTAsOSArMTUxMSw5IEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNl bHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCV9idF9zZWFyY2gocmVsLCBO VUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFELCBmYWxzZSk7CisJX2J0X3Nl YXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCwgZmFs c2UpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKHVubGlr ZWx5KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkpCiAJewogCQlBc3NlcnQoIXNv LT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI4LDIyICsxNTI5LDIzIEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAoSXNvbGF0aW9uSXNTZXJp YWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNf c25hcHNob3QpOwotCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBv cy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwkJCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5 LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAkJfQogCi0JCWlmICghQnVm ZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnRmaXJz dGJhdGNoLT5idWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCXJldHVy biBmYWxzZTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gp OworCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJlY2lz ZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5 LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwg YnRmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZp cnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4g c28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAq CiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFs c2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBs ZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYxLDE2NCArMTU2Myw3MiBAQCBfYnRfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2Uu ICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdo CiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwg YmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2Zm bnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7 Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0 Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0 IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggaW4g YSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJy ZW50IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5k IHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJl dmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhl IGJhdGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwg dXNlIHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVj aWRlIHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhp dCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQot ICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBv cyByZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVz KSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwgYmUgcG9zc2li bGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGlyZWN0aW9uLAot ICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4gdGhhdCBvdGhl ciBkaXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRoZSBuZXh0IGJhdGNo LiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0dXBsZSBvbiBhbnkg cmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4KKyAqCQlOb3RlIHRo YXQgcmV0dXJuaW5nIE5VTEwgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhl CisgKgkJdG9wLWxldmVsIHNjYW47IGNhbGxlciBzaG91bGQgY2hlY2sgc28tPm5lZWRQcmltU2Nh biB0byBkZXRlcm1pbmUKKyAqCQlpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlzIHJl cXVpcmVkLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7Ci0JQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JQXNzZXJ0KEJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5jZSB0byBuZXh0IHR1 cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0cnkgdG8KLQkgKiBz dGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+ Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkK LQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKC0tc28tPmN1cnJQ b3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9z dGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCV9idF9y ZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJldHVybiB0 aGUgaW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRl eF0gdG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyBp biBjYWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGljIGlubGluZSB2b2lk Ci1fYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbykKLXsK LQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBv cy5pdGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIG11c3QgaGF2ZSBz dWNjZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFz c2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtKTsKLQlB c3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQot CS8qIFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0ICovCi0Jc2Nhbi0+ eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJ c2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+ dHVwbGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0gU3RlcCB0byBuZXh0 IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICogV3JhcHBlciBvbiBf YnRfcmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9yIHRoZSBjdXJyZW50 IHBhZ2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgdmFsaWQuICBJdHMg YnVmZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tlZC4gKEFjdHVhbGx5 LCB3aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4gaGVsZCwKLSAqIHRo b3VnaCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0byBhIHZhbGlkIGJs b2NrIG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0cHJpb3JiYXRjaCA9IEJUQmF0 Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxh c3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwot Ci0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBp dGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsK Kwlib29sCQltb3JlSW5EaXI7CiAKIAkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywg bWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9z aXRpb24gdGhhdCBuZWVkcyBpdC4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3aXRoIGNy b3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0Y2ggbWFu YWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0aW9uIChh bmQKKwkgKiBjYWxscyBidHBvc3Jlc2V0IHRvIGRlYWwgd2l0aCB0aGUgc2NhbidzIGFycmF5IGtl eXMpIGlzIHVzZWQgZm9yIHRoaXMuCiAJICovCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDAp Ci0JewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBt YXJrIGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCQkJ SW5jckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQ b3MsICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFd KSArCi0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7 Ci0JCWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1 cnJUdXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1h cmtQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4 ID0gLTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVzdCBhYm91dCB0byBzdGFydCB0aGUgbmV4 dCBwcmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9zc2libGUgd2l0aCBhIHNjYW4gdGhhdCBo YXMgYXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lwIHRvCi0JCSAqIGNvbnRpbnVlIGluIHRo ZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxlZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICog aW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2Nhbi4gIFRo ZXkgbXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2 ZWwgaW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRoYXQgd291bGQgYmUgd3JvbmcpLgotCQkg KgotCQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNlIGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50 IGFycmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhl IGN1cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0JCSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5 LiAgSW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9zJ3MgY29weSBvZgotCQkgKiBtb3JlUmln aHQgb3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBiZSBhZmZlY3RlZCksIHdoaWxlIG1ha2lu ZwotCQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRvIHRoZWlyIGluaXRp YWwgc2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVjdCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2 YW5jaW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxs ICh0aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyByZXN0b3JlZCBtYXJrUG9zKS4KLQkJICov Ci0JCWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0JCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5tYXJrUG9zLm1vcmVSaWdodCA9IHRydWU7 Ci0JCQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxlZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyog bWFyay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0 KCFzY2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNv LT5jdXJyUG9zKTsKKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRpcik7CiAKIAkvKiBXYWxr IHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxrbm8gPSBidHBy aW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFn ZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJCWJsa25vID0gYnRw cmlvcmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRwcmlvcmJhdGNoLT5jdXJy UGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQlidHBy aW9yYmF0Y2gtPm1vcmVSaWdodCA6IGJ0cHJpb3JiYXRjaC0+bW9yZUxlZnQ7CiAKIAkvKgotCSAq IENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRo ZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVkIHRvIHVzZSB0 aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3JlIHN0ZXBwaW5n IGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQotCSAqIGtleXMg YXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCisJ ICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9yIGJhdGNoIG5vdyBz byB0aGF0CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRoYXQg d2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxv Y2F0aW9uLgogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQotCQlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9O RSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCdzIHBhZ2UgaXMga25v d24gdG8gYmUgdGhlIGZpbmFsIGxlYWYgcGFnZSB3aXRoIG1hdGNoZXMKKwkJICogaW4gdGhpcyBz Y2FuIGRpcmVjdGlvbiAoaXRzIF9idF9yZWFkcGFnZSBjYWxsIGZpZ3VyZWQgdGhhdCBvdXQpLgor CQkgKgorCQkgKiBOb3RlOiBpZiBzby0+bmVlZFByaW1TY2FuIGlzIHNldCwgdGhlbiBwcmlvcmJh dGNoJ3MgbGVhZiBwYWdlIGlzCisJCSAqIGFjdHVhbGx5IGp1c3QgdGhlIGZpbmFsIHBhZ2UgZm9y IHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuCisJCSAqIGluIHRoaXMgc2NhbiBkaXJl Y3Rpb24gKHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KS4KKwkJICovCisJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2Nhbiwg JmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25l IGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KIAogCXJldHVybiBfYnRfcmVhZG5l eHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KQEAgLTE3 MzIsMTc4ICsxNjQyLDE2OSBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhpcyBwYWdlIGJ5IGNhbGxp bmcgX2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXkuICBTZWUgX2J0X3JlYWRw YWdlIGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3Qg YmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCisgKiBPbiBlbnRy eSwgZmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMg dmFsaWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNj YW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0 ZWQgc28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCi0gKiBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2Ug ZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRh aW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBt YXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorICog Z2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0 dXJuaW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgZW5kIG9mIHRoZSB0 b3AtbGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0bWFwIGNoZWNrIHNvLT5u ZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4CisgKiBz Y2FuIGlzIHJlcXVpcmVkLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBh IHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1 cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4K ICAqLwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg T2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2Fu QmF0Y2gKK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggZmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24g ZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3Ri YXRjaCk7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJibGtubzsKKwlib29sCQlt b3JlSW5EaXI7CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0J c28tPm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNv LT5jdXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICov CisJLyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdl ICovCiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5 cyk7CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3Jl UmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJz dGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJ fQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJy UG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJ CWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmln aHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVM ZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkv KgogCSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFn ZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6 aW5nIHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3 aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9y ZWFkcGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5z IGZhbHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVl KSkKKwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVl KSkKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJ ICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUg cGluKSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVw bGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChz by0+Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0J CXJldHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hl cyBpbiBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBmaXJz dGJhdGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAot CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+ Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5j dXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRo ZSBwYWdlIHJldHVybmVkIGJ5IF9idF9zZWFyY2ggKi8KKwlfYnRfcmVsYnVmKHNjYW4tPmluZGV4 UmVsYXRpb24sIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAotCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFn ZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9z dGVwcGFnZShzY2FuLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogV2FsayB0byB0aGUgbmV4 dCBwYWdlIHdpdGggZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJ CWJsa25vID0gYnRmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gYnRmaXJz dGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRmaXJzdGJhdGNoLT5jdXJyUGFn ZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQlidGZpcnN0 YmF0Y2gtPm1vcmVSaWdodCA6IGJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQ7CiAKLQkvKiBfYnRfcmVh ZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8K LQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZWxlYXNlIGZpcnN0YmF0Y2ggKHdpbGwgYmUgcmVjeWNsZWQg aWYgd2UgcmVhY2ggX2J0X3JlYWRuZXh0cGFnZSkgKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwgIW1vcmVJ bkRpcikKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQg c2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4g d2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2Nhbiwg JmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25l IGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJldHVybiBfYnRfcmVhZG5l eHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KIAogLyoK ICAqCV9idF9yZWFkbmV4dHBhZ2UoKSAtLSBSZWFkIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlk IGRhdGEgZm9yIF9idF9uZXh0CiAgKgotICogQ2FsbGVyJ3MgYmxrbm8gaXMgdGhlIG5leHQgaW50 ZXJlc3RpbmcgcGFnZSdzIGxpbmssIHRha2VuIGZyb20gZWl0aGVyIHRoZQotICogcHJldmlvdXNs eS1zYXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBh Z2UgdGhhdAotICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5r IHdhcyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCi0gKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBw YWdlIHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4g dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5j dXJyUG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJy Ymxrbm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBDYWxsZXIncyBibGtubyBpcyB0aGUg cHJpb3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5kaW5nIG9uIHRoZQorICog Y3VycmVudCBzY2FuIGRpcmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25vIGlzIHRoZSBwcmlvciBi YXRjaCdzIGN1cnJQYWdlLgorICogV2UgdXNlIGxhc3RjdXJyYmxrbm8gdG8gcmVhc29uIGFib3V0 IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMKKyAqIGR1cmluZyBiYWNrd2Fy ZHMgc2NhbnMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2Nr ZWQgYnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIv dW5waW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAq IHdvbid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFs bGVsIHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcg aGVyZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBh bmQgbGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAq IHNlaXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtu byB0YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28t PmN1cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6 ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBh Z2UKLSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhv dWdoLiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBz ZWl6aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVh ZHkgYmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFy YWxsZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3Vy clBvcy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBv cy5tb3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBP biBlbnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBz dWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20g dGhlIG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhv bGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5n IHNvLT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJs eSB0byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5z IHVubG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRo YXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hpbmcgaXRlbXMKKyAqIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2UganVzdCBy ZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9lc24ndCBuZWNlc3Nh cmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdldGJhdGNoIGFuZAor ICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUgaWYgYW5v dGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAgKgotICogSWYgdGhl cmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCB3 ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcgaXQgcmV0YWlucyBu byBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBXZSBhbHdheXMgcmVs ZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgot ICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFz IHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBzZWl6ZSB0 aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBsYXN0Y3VycmJsa25v IHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVsZWFzZSB0aGUgc2Nh biBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyBJbmRl eFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5E aXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRj aDsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vIHx8IHNl aXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkpOwotCUFzc2VydCgh QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3Ig bmV3IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7 CisJYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIG5ld2JhdGNoKTsKIAogCS8qCi0J ICogUmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBw YWdlIHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdl IHRvIHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJl IHRoZSBiYXRjaCBmb3IgYmxrbm8sIGEgcGFnZSB0byB0aGUgcmlnaHQgb2YKKwkgKiBsYXN0Y3Vy cmJsa25vIChvciB0byB0aGUgbGVmdCwgd2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRz KS4KKwkgKgorCSAqIE5vdGU6IGNhbGxlcidzIGJsa25vIGlzIHRlbnRhdGl2ZS4gIG5ld2JhdGNo IGFjdHVhbGx5IHN0b3JlcyBtYXRjaGVzCisJICogZnJvbSB0aGUgbmV4dCBsZWFmIHBhZ2UgaW4g dGhpcyBzY2FuIGRpcmVjdGlvbiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUKKwkgKiBtYXRjaGluZyBp dGVtLiAgVGhpcyBpcyB1c3VhbGx5IGNhbGxlcidzIGJsa25vIHBhZ2UsIGJ1dCBtaWdodCBiZSBz b21lCisJICogb3RoZXIgcGFnZSB0byBpdHMgcmlnaHQgKG9yIHRvIGl0cyBsZWZ0KSBpbnN0ZWFk LgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7 CisJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOwkvKiBmb3IgbGFzdGN1cnJibGtubyAob3Ig dGVudGF0aXZlKSAqLworCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CS8qIHRlbnRhdGl2 ZSAob3IgZm9yIGxhc3RjdXJyYmxrbm8pICovCiAKIAlmb3IgKDs7KQogCXsKIAkJUGFnZQkJcGFn ZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8Ci0J CQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQb3MubW9yZVJp Z2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCByZWNlbnQgX2J0 X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICovCi0JCQlBc3Nl cnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2VpemVkKTsKLQkJ CUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxlbCBzY2FuIG11 c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJaWYgKCFzZWl6 ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3BhcmFsbGVsX3Nl aXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewotCQkJLyogd2hv bGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiByZXF1aXJlZCkg Ki8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0dXJuIGZhbHNl OwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmlt U2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtubyAhPSBQX05P TkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsKIAkJCS8qIHJl YWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtu bywgQlRfUkVBRCk7CisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8s IEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtubywgYXZvaWRpbmcg cmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+Y3VyclBvcy5idWYg PSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKKwkJCWJ0bmV3YmF0Y2gt PmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAogCQkJCQkJCQkJ CQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IEludmFsaWRC dWZmZXIpCisJCQlpZiAoYnRuZXdiYXRjaC0+YnVmID09IEludmFsaWRCdWZmZXIpCiAJCQl7CiAJ CQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRlbGV0aW9uIG9mIGxlZnRtb3N0IHBh Z2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAkJCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJaW5kZXhhbV91dGlsX2Jh dGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9 CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVl KHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JF KG9wYXF1ZSkpKQpAQCAtMTkxMSwxNyArMTgxMiwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJl IGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdo dCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJ UlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nhbiwg bmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFn ZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJ Ymxrbm8gPSBidG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkv KiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0IGlmIHdlIGNhbiBzdG9wICovCi0J CQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFn ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAor CQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgZmlyc3RwYWdlKSkKIAkJCQkJ YnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKKwkJCQlibGtubyA9IGJ0 bmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVsc2UKQEAgLTE5MzYsMTkgKzE4Mzcs MzggQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJs a25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVzIG9uIHRoaXMgcGFnZSAqLwotCQlf YnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc2VpemVkID0gZmFsc2U7CQkJLyog cmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykgKi8KKwkJX2J0X3JlbGJ1ZihyZWws IGJ0bmV3YmF0Y2gtPmJ1Zik7CisKKwkJLyogQ29udGludWUgdGhlIHNjYW4gaW4gdGhpcyBkaXJl Y3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJCShTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikgPworCQkJICFidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiAhYnRuZXdiYXRjaC0+ bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwgZW5k ZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBzby0+bmVlZFByaW1T Y2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkgKi8K KwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwkJaWYgKHNj YW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2Fu LCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOwkJLyogZG9uZSBp ZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKworCQlmaXJzdHBhZ2UgPSBm YWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAKLQkvKgotCSAqIF9i dF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikg b24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0 dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gYmxr bm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJQXNzZXJ0KGJ0bmV3YmF0 Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIG5ld2JhdGNo LCBidG5ld2JhdGNoLT5idWYpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIG5ld2JhdGNoOwog fQogCiAvKgpAQCAtMjE3NCwyNSArMjA5NCwyNCBAQCBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9u IHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFsbGVsIHNjYW4gY2Fs bGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKiBF eGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3QoKS4KICAqLwotc3Rh dGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCkKIHsKIAlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0g QlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VP cGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNz ZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKIAogCS8q CiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1vc3QgbGVhZiBwYWdlLiAg VGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9zZWFyY2goKS4KIAkgKi8K LQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSk7CisJYnRmaXJzdGJhdGNoLT5idWYgPSBfYnRfZ2V0X2VuZHBvaW50 KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAKLQlpZiAoIUJ1ZmZlcklz VmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFsaWQoYnRmaXJzdGJhdGNo LT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0 aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDAsMTAgKzIxMTksMTAgQEAgX2J0 X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqLwog CQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7CiAJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCX0K IAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnRmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShw YWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjksOSArMjE0OCw1IEBA IF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8q CiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAq LwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBm YWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1 cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggNzMyYmM3NTBjLi40MTVlMmExYzAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5LDEwICsxOSw3IEBACiAK ICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMu aCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dy ZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2ludC5oIgotI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKICNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgpAQCAtMzAsNyArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBj b25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJlbGF0aW9uIHJlbCwg SW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRT Y2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ1LDI0NyArMTQxLDYgQEAgX2J0X21rc2Nhbmtl eShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1cm4ga2V5OwogfQogCi0vKgot ICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwotICovCi1zdGF0aWMg aW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQotewot CWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAqKChjb25zdCBpbnQg KikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KLS8qCi0gKiBfYnRfa2ls bGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIg aGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVu Y2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0g KiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlz IHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgotICoKLSAq IENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3VyclBvcyBwYWdlLCBi dXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQaW4uICBXaGVuIHdl IHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwgY29udGludWUgdG8g aG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgotICoKLSAq IFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUg cmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBo b2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250aW51b3VzbHkgZnJv bSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlv bgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUg ZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMgY2Fu J3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawotICogdGhhdCB3 ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSByZWN5 Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJRCAo dGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBjYW4ndCByZWx5IG9u IHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAoc28t PmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBf REVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJh Y2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90YWxseSBnaXZlIHVw IG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0gKgot ICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2Fucywg YnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMg aGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhhcyBt b3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBm aW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12b2lkCi1fYnRfa2lsbGl0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG1pbm9m ZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxs ZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVmZmVyCQlidWY7Ci0KLQlB c3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBiZSBh IGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxpZGF0ZSBzby0+a2lsbGVk SXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5udW1LaWxsZWQgPSAw OwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNb XSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhwZWN0cyB0aGlzICh3 aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgotCSAqIHNvLT5raWxs ZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVt cyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQg dGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IHNv LT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8KLQlpZiAobnVtS2ls bGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2Yo aW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1ZShzby0+a2lsbGVk SXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2NvbXBhcmVfaW50KTsK LQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICogV2UgaGF2ZSBoZWxkIHRo ZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywKLQkJICog c28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZlIHByZXZl bnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRoZSBU SURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0X2xvY2tidWYocmVsLCBi dWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKLQot CQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IF9idF9n ZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0bHNu ID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0g bGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsKLQkJ CS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9idF9yZWxidWYocmVsLCBi dWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBzYWZl ICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFxdWUgPSBCVFBhZ2VH ZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKLQltYXhv ZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyogSXRlcmF0ZSB0aHJvdWdo IHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZvciAoaW50IGkgPSAw OyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVk SXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0 ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7Ci0K LQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0 ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2VydChpID09IDAgfHwKLQkJ CSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbaSAtIDFdXS5p bmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJCWNvbnRpbnVlOwkJCS8q IHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0 ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlp dHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQkJCWJvb2wJCWtp bGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQot CQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1 cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0JCQkJLyoKLQkJCQkgKiBO b3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhbG1vc3QgYW55IHdh eQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28tPmRyb3BQaW4gY2Fz ZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1cGxl IHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5jb3Vu dGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rp bmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9z dGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZr aXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29w ICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51bSB3 aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBj YXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkg bW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2Zm bnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVhZC1haGVhZCB0byBs YXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1w dGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkgKiB3aWxsIHByZXZlbnQg dXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCi0JCQkJCSAqIGZ1bGx5 IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5leHQKLQkJCQkJICog bG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwg dGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0 dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdl IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRo ZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0JCQkJCSAqIGNvcnJlY3Rs eSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJCQkJICovCi0JCQkJCWlm IChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5r aWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBEb24ndCBib3RoZXIg YWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bwotCQkJCSAqIGF2 b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCi0JCQkJ ICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhh cmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUg b3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBv c3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2 YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2ts eS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJCWtpbGx0dXBsZSA9IHRy dWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwg JmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCi0JCQkvKgotCQkJICog TWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlz Ci0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9jayBwb3NzaWJseSBpbiBz aGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMg YXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwgbGVhZGluZyB0byBtdWx0 aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRvIFdBTCAoaWYgd2FsX2xv Z19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoCi0JCQkgKiBpcyB1 bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlp ZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJ CQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgot CQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4g SWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVp bmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJ CQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxs IHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2ls bGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNo IGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJ fQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRl ZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGlu ZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogQlRQX0hBU19HQVJCQUdFIGZs YWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQotCSAqIG9u bHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4p Ci0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+YnRwb19mbGFncyB8 PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwg dHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5kcm9wUGluKQotCQlfYnRfdW5s b2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVsLCBidWYpOwotfQotCi0K IC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNoYXJlZC1tZW1vcnkgYXJl YSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAidmFjdXVtIGN5Y2xlIElEcyIg dG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0cmVlX21hc2soY2hhciAqcGFn ZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBidHJlZSBsZWFmIHBhZ2Vz LCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdTIHdpdGhvdXQKIAkJICogZW1p dHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBsaW5lIHBvaW50ZXIgZmxhZ3Mu IFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWls cy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFp bHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0KIAogCS8qCiAJICogQlRQX0hB U19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0LiBTbywgbWFzayBpdC4gU2Vl Ci0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBfYnRfa2lsbGl0ZW1zKCksIGFu ZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4KKwkgKiBfYnRfZGVsZXRlX29y X2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgYW5kCisJICogX2J0X2NoZWNr X3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFxLT5idHBvX2ZsYWdzICY9IH5C VFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBm MmVlMzMzZjYuLjFmNDUyMzEwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpA QCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5hbWdl dHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFy ZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEws CiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jCmluZGV4IGMwOTQ3M2I5Ny4uMGZmZjgwMWE0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTUzLDYgKzUzLDkgQEAgR2V0VGFibGVBbVJvdXRp bmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfYmVnaW4gIT0g TlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jlc2V0ICE9IE5VTEwpOwogCUFz c2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9lbmQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUt PmluZGV4X2ZldGNoX2JhdGNoX2luaXQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4 X2ZldGNoX21hcmtwb3MgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jl c3RycG9zICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRpbmUtPmZldGNoX3RpZCAhPSBOVUxMKTsK IAlBc3NlcnQocm91dGluZS0+dHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24gIT0gTlVMTCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDM3M2U4MjM0Ny4uODQyMmU2NWIwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYwpAQCAtODg1LDcgKzg4NSw3IEBAIERlZmluZUluZGV4KFBhcnNlU3Rh dGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0 aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1 c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYm IGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9 PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5v dCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5k ZXggMzdmZTAzZmRjLi45NzlhODUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOSw3 ICs0MjksNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2Fz ZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1 cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJl c3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0 aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uNmU4ZmUwN2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1J3MiLiBU aGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJdG8gcG9p bnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0aGUK ICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBi ZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1l dGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3Jl IHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSB0YWJsZSBBTSBp bnRlcmZhY2UgcHJvdmlkZXMKKyAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEg dHVwbGUgZHVyaW5nIGluZGV4IHNjYW5zLgogICoKICAqCiAgKgkJRXNzZW50aWFsIG9wZXJhdGlv biBvZiB0aGUgbWVyZ2Ugam9pbiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDY3ZDlkYzM1Zi4uZWRjN2U0NzM2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIFdoZXRo ZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9yIGVp dGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBv cnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0 dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1BUFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9y dCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJCQkvKiBlaXRoZXIgaXMgb2theSAqLwog fSBTY2FuVHlwZUNvbnRyb2w7CkBAIC03NDcsNyArNzQ3LDcgQEAgZ2V0X2luZGV4X3BhdGhzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlJbmRleFBhdGggICppcGF0 aCA9IChJbmRleFBhdGggKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoaW5kZXgtPmFtaGFzZ2V0dHVw bGUpCisJCWlmIChpbmRleC0+YW1jYW5wbGFpbnNjYW4pCiAJCQlhZGRfcGF0aChyZWwsIChQYXRo ICopIGlwYXRoKTsKIAogCQlpZiAoaW5kZXgtPmFtaGFzZ2V0Yml0bWFwICYmCkBAIC04MzUsNyAr ODM1LDcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAlzd2l0Y2ggKHNjYW50eXBlKQogCXsKIAkJY2FzZSBTVF9JTkRFWFNDQU46Ci0JCQlp ZiAoIWluZGV4LT5hbWhhc2dldHR1cGxlKQorCQkJaWYgKCFpbmRleC0+YW1jYW5wbGFpbnNjYW4p CiAJCQkJcmV0dXJuIE5JTDsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0JJVE1BUFNDQU46CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggN2M0YmUxNzQ4Li4wNmEyZTk0OWQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMCwxMSArMzEwLDExIEBAIGdl dF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwg Ym9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1z ZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJj aG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxs ZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0g TlVMTCk7CisJCQkJaW5mby0+YW1jYW5wbGFpbnNjYW4gPSAoYW1yb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwgfHwKKwkJCQkJCQkJCQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAJ CQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwg JiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFwX25leHRfdHVwbGUgIT0g TlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5lLT5hbW1hcmtwb3MgIT0g TlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3MgIT0gTlVMTCk7CisJCQkJ aW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEw7CiAJCQkJ aW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlOwogCQkJCUFz c2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApAQCAtNDExLDcgKzQxMSw3IEBA IGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJ ZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGZhbHNlOwogCQkJ CWluZm8tPmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0g ZmFsc2U7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IGZhbHNlOworCQkJCWluZm8tPmFtY2Fu cGxhaW5zY2FuID0gZmFsc2U7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBmYWxzZTsKIAkJ CQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9 IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0 aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXgg MGIxZDgwYjViLi4wZDBiZDQ2OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3JlbGF0aW9uLmMKQEAgLTgzNiw2ICs4MzYsNyBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlk ZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiB7CiAJQXR0ck51 bWJlcglrZXljb2w7CiAJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJY29uc3QgSW5kZXhBbVJvdXRp bmUgKmFtcm91dGluZTsKIAogCS8qIFRoZSBpbmRleCBtdXN0IG5vdCBiZSBhIHBhcnRpYWwgaW5k ZXggKi8KIAlpZiAoIWhlYXBfYXR0aXNudWxsKGlkeHJlbC0+cmRfaW5kZXh0dXBsZSwgQW51bV9w Z19pbmRleF9pbmRwcmVkLCBOVUxMKSkKQEAgLTg4NywxMCArODg4LDEyIEBAIElzSW5kZXhVc2Fi bGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1h cCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1l dGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwKLQkgKiBiZSB1c2Vk IGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJ bmRleCgpLgorCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaW1wbGVtZW50 ICJhbWdldHR1cGxlIiBvcgorCSAqICJhbWdldGJhdGNoIiwgd2hpY2ggd2lsbCBiZSB1c2VkIGxh dGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUKKwkgKiBSZWxhdGlvbkZpbmRSZXBsVHVwbGVC eUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRf cmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJYW1yb3V0aW5lID0gR2V0 SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSk7CisJaWYg KGFtcm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtcm91dGluZS0+YW1nZXRiYXRjaCA9 PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11 dGlscy5jCmluZGV4IGM4MWZiNjFhMC4uZGRmZDFiNTVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxz LmMKQEAgLTM2MywxMCArMzYzLDExIEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jbHVzdGVyYWJsZSk7CiAK IAkJCWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+ YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+ YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBO VUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wo cm91dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09M KHJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CQUNLV0FS RF9TQ0FOOgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuYmFja3dhcmQpOwpAQCAt MzkyLDcgKzM5Myw4IEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbm11bHRpY29sKTsKIAogCQljYXNlIEFN UFJPUF9DQU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUg PyB0cnVlIDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAh PSBOVUxMIHx8CisJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJCWNh c2UgQU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5p bmNsdWRlKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9i bG9vbS9ibHV0aWxzLmMKaW5kZXggNTExMWNkYzZkLi42MTM5ZmI5NTkgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0x NDYsMTAgKzE0NiwxMiBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5z Y2FuID0gYmxiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVM TCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJp dG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0J CS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQku YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLmFjMjll ZDNjNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0xNjcsMTAgKzE2NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAg IGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1n ZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBh bWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9u IGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFta2lsbGl0ZW1zYmF0Y2hf ZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJp dG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5k c2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3Bv czsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVz dHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1w b3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMg dG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxl bHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwg Ki8KQEAgLTY3Niw4ICs2NzgsMzggQEAgYW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCiAgICA8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IGNyZWF0ZSB0aGlzIHN0cnVjdCBieSBj YWxsaW5nCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25HZXRJbmRleFNjYW4oKTwvZnVuY3Rpb24+LiAg SW4gbW9zdCBjYXNlcwogICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4gZG9lcyBs aXR0bGUgYmV5b25kIG1ha2luZyB0aGF0IGNhbGwgYW5kIHBlcmhhcHMKLSAgIGFjcXVpcmluZyBs b2NrczsKKyAgIGFjcXVpcmluZyBsb2NrcyBhbmQgaW5pdGlhbGl6aW5nIHN0YW5kYXJkIDxzdHJ1 Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+IGZpZWxkczsKICAgIHRoZSBpbnRlcmVz dGluZyBwYXJ0cyBvZiBpbmRleC1zY2FuIHN0YXJ0dXAgYXJlIGluIDxmdW5jdGlvbj5hbXJlc2Nh bjwvZnVuY3Rpb24+LgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICBtdXN0IGFsc28gc2V0IHRo ZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBzY2FuIGRlc2NyaXB0b3I6CisgICA8aXRlbWl6ZWRs aXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZn dDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPjogdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zCisg ICAgICB0aGF0IGNhbiBhcHBlYXIgaW4gYSBzaW5nbGUgYmF0Y2ggKHR5cGljYWxseSBkZXJpdmVk IGZyb20gdGhlIGluZGV4IHBhZ2UKKyAgICAgIHNpemUsIGUuZy4sIDxsaXRlcmFsPk1heEluZGV4 VHVwbGVzUGVyUGFnZTwvbGl0ZXJhbD4pLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0 Y2hfaW5kZXhfb3BhcXVlX3NpemU8L2xpdGVyYWw+OiB0aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhB TElHTjwvZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVl CisgICAgICBhcmVhLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBz cGFjZSBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgIHRoZSA8c3RydWN0bmFtZT5JbmRleFNjYW5C YXRjaERhdGE8L3N0cnVjdG5hbWU+IHBvaW50ZXIsIGZvciB1c2UgYnkgdGhlCisgICAgICBpbmRl eCBBTSB0byBzdG9yZSBwZXItcGFnZSBuYXZpZ2F0aW9uIHN0YXRlIChlLmcuLCBiYXRjaCBpbmRl eCBwYWdlJ3MKKyAgICAgIGJ1ZmZlciBwaW4gYW5kIHNpYmxpbmcgcGFnZSBsaW5rcykuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjog dGhlIHNpemUgaW4gYnl0ZXMKKyAgICAgIG9mIHRoZSBwZXItYmF0Y2ggdHVwbGUgc3RvcmFnZSB3 b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucworICAgICAgKHR5cGljYWxseSA8bGl0 ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9lcyBub3QKKyAg ICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRoZSB3b3Jrc3BhY2UgaXMgYWNjZXNzaWJs ZSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7Y3VyclR1cGxlczwvc3RydWN0Zmll bGQ+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0Pgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiArNzgxLDI2NCBAQCBhbWdldHR1cGxlIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0Zmll bGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4K ICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAg PHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2 ZXJzaW9uIDE5LCBtYXJrL3Jlc3RvcmUgb2YKKyAgICBzY2FuIHBvc2l0aW9ucyBpcyBvbmx5IHN1 cHBvcnRlZCBmb3Igc2NhbnMgdGhhdCB1c2UgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBzY2FucyBkbyBub3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuICBUaGUKKyAgICBtYXJrL3Jlc3Rv cmUgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIHRhYmxlIEFNLCB0aHJvdWdoIGl0cworICAg IDxmdW5jdGlvbj50YWJsZV9pbmRleF9mZXRjaF9tYXJrcG9zPC9mdW5jdGlvbj4gYW5kCisgICAg PGZ1bmN0aW9uPnRhYmxlX2luZGV4X2ZldGNoX3Jlc3RycG9zPC9mdW5jdGlvbj4gaW1wbGVtZW50 YXRpb25zLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rp bmc+CitJbmRleFNjYW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAg ICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAgICAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4gdGhlIG5leHQg YmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3ZpbmcgaW4gdGhlCisg ICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGluZGV4KS4gIFJl dHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB3aXRo IGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBpZiB0 aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisgICBzY2FuIGRpcmVj dGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisgICA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRyaWVz IGluIGJhdGNoZXMKKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSByZXR1cm5pbmcg YWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCisgICBzaW5nbGUgaW5kZXggcGFnZSB0 b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJsZQor ICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIHRhYmxlIEFNIHBhc3NlcyA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9s aXRlcmFsPiB0byBpbmRpY2F0ZSB3aGVyZSB0aGUKKyAgIGluZGV4IEFNIHNob3VsZCBjb250aW51 ZSBzY2FubmluZyBmcm9tIChvciA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUKKyAgIGZp cnN0IGNhbGwgZm9yIHRoZSBzY2FuKS4gIFRoZSBpbmRleCBBTSB1c2VzIGluZm9ybWF0aW9uIGZy b20KKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRldGVybWluZSB3aGljaCBp bmRleCBwYWdlIHRvIHJlYWQgbmV4dC4KKyAgIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+LCB3aGVyZSB0aGUgaW5kZXggQU0gbWFpbnRhaW5zIGl0cworICAgb3duIHNjYW4g cG9zaXRpb24sIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpdCBpcyB0aGUg Y2FsbGVyCisgICB0aGF0IGNvbnRyb2xzIHRoZSBwcm9ncmVzcyBvZiB0aGUgc2NhbiB0aHJvdWdo IHRoZSBpbmRleC4gIFRoZSBjYWxsZXIKKyAgIHdpbGwgdHlwaWNhbGx5IHBhc3MgdGhlIG1vc3Qg cmVjZW50bHkgcmV0dXJuZWQgYmF0Y2gsIGJ1dCB0aGlzIGlzIG5vdAorICAgZ3VhcmFudGVlZCAm bWRhc2g7IGZvciBleGFtcGxlLCBmb2xsb3dpbmcgdGhlIHJlc3RvcmF0aW9uIG9mIGEgbWFya2Vk CisgICBwb3NpdGlvbiwgYW4gZWFybGllciBiYXRjaCBtYXkgYmUgcGFzc2VkIGluc3RlYWQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGggYW4KKyAgIGluZGV4IHBhZ2Ug Y29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90dXBsZS4gIEEgYnVmZmVyCisg ICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUgdGFibGUgQU0gYXMgYW4gaW50ZXJsb2NrIGFn YWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGluZyBieSA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+LiAgVGhlIHRhYmxlIEFNIGRyb3BzIHRoaXMgaW50ZXJsb2NrCisgICBieSBjYWxsaW5n IDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IHdoZW4gaXQgaXMgc2FmZSB0byBk byBzby4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvciBkZXRhaWxz IG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudAorICAgZHVyaW5nIGluZGV4IHNjYW5zLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB0aGF0IGlz IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG5vIGxv bmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQgaXMgdXAgdG8gdGhlIHRh YmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUgZnJlZWQgKHZpYQorICAg PGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5jdGlvbj4pLiAgTm90ZSBhbHNv IHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb25zIG11c3Qg bmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxk PiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYQorICAgcmVmZXJlbmNl IGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFj ZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQg Zm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYXBwbHkgaGVyZQorICAgdG9vOiBh biBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBpbmRleCBj b250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0 IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAgZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdp bGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJh bD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNraW5nIG9mCisgICBzY2FuIGtleXMgaXMgcmVx dWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFs PiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAgIGZvciBhbiBlbnRpcmUgc2NhbiByYXRoZXIg dGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJhc2lzLiBUaGlzIGlzIGEga2V5CisgICBkaWZm ZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgd2hpY2ggY2FuIHNl dAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gaW5kZXBlbmRlbnRs eSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3ZlcgorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNf cmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9mIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgdGhlIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGRvZXMgbm90IGN1cnJlbnRseQorICAg c3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuIGRhdGEgaW4gdGhlIGZvcm0gb2Yg YQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLiAgSW5kZXgt b25seSBzY2FucyB3b3JrIGJ5CisgICBjb3B5aW5nIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0 cnVjdG5hbWU+IHJlY29yZHMgZnJvbSBpbmRleCBwYWdlcyBpbnRvIGEKKyAgIGxvY2FsIGJ1ZmZl ciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaC4gIDxsaXRlcmFsPnhzX2l0dXBkZXNjPC9saXRl cmFsPgorICAgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIGFscmVhZHkgZGVzY3JpYmVkIGZvciA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRo b2QgbXVzdCBub3Qgc2V0IHRoZSA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPgor ICAgZmllbGQgaXRzZWxmLgorICAgV2l0aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ LCB0aGUgaW5kZXggQU0gc2V0cworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVy YWw+IHRvIHBvaW50IHRvIGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxl PC9zdHJ1Y3RuYW1lPiB3aG9zZSBsaWZldGltZSBleHRlbmRzIHVudGlsIHRoZSBuZXh0CisgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGwgJm1kYXNoOyBvbmx5IG9uZSB0dXBs ZSBpcyB2YWxpZCBhdCBhCisgICB0aW1lLiAgV2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+LCBtdWx0aXBsZSBiYXRjaGVzIGFyZSBoZWxkIG9wZW4KKyAgIHNpbXVsdGFuZW91c2x5 IGFuZCBpdGVtcyBhcmUgY29uc3VtZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIHRhYmxlIEFNLCBz bworICAgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBzaW5nbGUtdHVwbGUgbGlmZXRpbWUgZm9yIHBl ci1pdGVtCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXJzLiAg VGhlIGJhdGNoIGluZnJhc3RydWN0dXJlCisgICBwcm92aWRlcyBwZXItYmF0Y2ggc3RvcmFnZSBm b3IgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gY29waWVzLAorICAgYnV0IGhh cyBubyBhbmFsb2dvdXMgbWVjaGFuaXNtIGZvciA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVj dG5hbWU+IGRhdGEKKyAgICh1c2VkIGJ5IHNvbWUgaW5kZXggQU1zIGZvciByZWNvbnN0cnVjdGVk IHR1cGxlcyB0aGF0IG1pZ2h0IG5vdCBmaXQgaW4KKyAgIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8 L3N0cnVjdG5hbWU+IGZvcm1hdCkuICBUaGlzIGxpbWl0YXRpb24gY291bGQgYmUKKyAgIGFkZHJl c3NlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBhY2Nlc3MgbWV0 aG9kIG11c3QgcHJvdmlkZSBlaXRoZXIgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgor ICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IG5vdCBib3RoLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9k IHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9lc24n dCwKKyAgIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0cwor ICAgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0IGJl IHNldCB0byBOVUxMLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2 b2lkCithbXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgICAg IEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkg dGhlIHRhYmxlIEFNICh2aWEKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRj aDwvZnVuY3Rpb24+KSB3aGVuIGl0IGlzIHNhZmUgdG8gZHJvcAorICAgdGhlIFRJRCByZWN5Y2xp bmcgaW50ZXJsb2NrIHRoYXQgdGhlIGluZGV4IEFNIGhvbGRzIG9uIHRoZSBiYXRjaCdzIGluZGV4 CisgICBsZWFmIHBhZ2UsIHdoaWNoIHByZXZlbnRzIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBi eQorICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4KKyAgIEZvcm1hbGx5LCBhbiBpbmRleCBB TSBtYXkgaG9sZCBhIGRpZmZlcmVudCBraW5kIG9mIGludGVybG9jaywgb3IgbXVsdGlwbGUKKyAg IGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGlj ZSB0aGUgYnVpbHQtaW4KKyAgIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZQorICAgJm1kYXNoOyBob2xkcyBhIHNpbmds ZSBidWZmZXIgcGluLiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yCisg ICBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcgaW5kZXggc2NhbnMuICBU aGlzIGZ1bmN0aW9uIHdpbGwgYmUKKyAgIGNhbGxlZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggZ3Vh cmRlZCBiYXRjaDsgaXQgaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBpbmRleAorICAgQU0gaGFzIGFs cmVhZHkgdW5ndWFyZGVkIHRoZSBiYXRjaCBpdHNlbGYgKGFzIGl0IGRvZXMgd2hlbgorICAgPHN0 cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHdo aWNoIGlzIHRoZQorICAgY29tbW9uIGNhc2UpLgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8 cGFyYT4KKyAgICBUaGUgaW5kZXggQU0gbWF5IGNob29zZSB0byByZXRhaW4gaXRzIG93biBidWZm ZXIgcGlucyB3aGVuIHRoaXMgc2VydmVzIGFuCisgICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4 YW1wbGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgICBw YWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2Fs bHMpLiAgSG93ZXZlciwKKyAgICBhbnkgc2NoZW1lIHRoYXQgcmV0YWlucyBidWZmZXIgcGlucyBt YW5hZ2VkIGJ5IHRoZSBpbmRleCBBTSBtdXN0IGJlIHN1cmUKKyAgICB0byBmcmVlIHRoZSBwaW5z IGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBtaW5pbXVtIHdoZW5ldmVyCisgICAgPGZ1bmN0 aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgYW5kIHR5cGljYWxseSB3aGVuCisg ICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gaXMgY2FsbGVkKS4gIEl0IG11c3QgYWxz byBrZWVwIHRoZSBudW1iZXIgb2YKKyAgICByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbC4K KyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbXVu Z3VhcmRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBhbnkgaW5kZXgK KyAgIGFjY2VzcyBtZXRob2QgdGhhdCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCith bWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICAgICAgICBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRo ZSB0YWJsZSBBTSB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgYmF0Y2ggdGhhdAor ICAgY29udGFpbnMgZGVhZCBpdGVtcywgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+ IGJpdHMgaW4gdGhlIGJhdGNoJ3MKKyAgIGluZGV4IHBhZ2UuICBUaGUgYmF0Y2gncyBpbmRleCBw YWdlIHdpbGwgbm90IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyOyB0aGUKKyAgIGluZGV4IEFNIG11 c3QgYWNxdWlyZSBhbmQgcmVsZWFzZSBpdHMgb3duIGxvY2sgKGFuZCBwaW4pIG9uIHRoZSBpbmRl eCBwYWdlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbXBsZW1lbnRpbmcgPGZ1bmN0aW9u PmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBvcHRpb25hbCBmb3IKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW5kZXggQU1zICh0aG9zZSB0aGF0IGRvbid0IGNhbiBs ZWF2ZQorICAgdGhlIGZpZWxkIHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiksIGJ1dCBk b2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3Mg ZnV0dXJlIHNjYW5zIHRvIHNraXAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLgorICAgVGhlIGNv cmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseSBzdXBwb3J0cworICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICA8bGl0ZXJh bD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNj ZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0 aGlzIGZlYXR1cmUuICBUaGUgdGFibGUgQU0gbWF5CisgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFt X3V0aWxfc2NhbnBvc19raWxsaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcwor ICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBk ZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0 ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBi ZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdp dGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBlYXJpbmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlz LCBpbiBpbmRleCBwYWdlIG9yZGVyLAorICAgd2hpY2ggaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5k IG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9uY2UuICBJbmRleAorICAgYWNjZXNzIG1l dGhvZHMgY2FuIHJlbHkgb24gdGhpcyBvcmRlcmluZyB3aGVuIHByb2Nlc3NpbmcgZGVhZCBpdGVt czogdGhlCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2Fu IGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisgICB0aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9p bnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFzY2VuZGluZyBwYWdlIG9mZnNldAorICAgbnVtYmVy IG9yZGVyLiAgVGhpcyBhbHNvIG1lYW5zIHRoZSB0YWJsZSBBTSBuZWVkIG5vdCBjYWxsCisgICA8 ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW08L2Z1bmN0aW9uPiBpbiBhbnkg cGFydGljdWxhciBvcmRlci4KKyAgPC9wYXJhPgorCisgIDxub3RlPgorICAgPHBhcmE+CisgICAg SW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiByZWx5IG9uIHRoZQorICAgIDxzdHJ1Y3RmaWVsZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3Rm aWVsZD4gbWVjaGFuaXNtIGluc3RlYWQgdG8gbWFyayBkZWFkCisgICAgdHVwbGVzOyB0aGUgPGZp bGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0LzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9u CisgICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwvcGFyYT4KKyAgPC9ub3Rl PgorCisgIDxwYXJhPgorICAgV2hlbiBpbXBsZW1lbnRpbmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1z YmF0Y2g8L2Z1bmN0aW9uPiwgdGhlIGluZGV4IEFNCisgICBtdXN0IHZlcmlmeSB0aGF0IHRoZSBp bmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgYmF0Y2ggd2FzCisgICBv cmlnaW5hbGx5IHJlYWQuICBUaGUgc3RhbmRhcmQgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY2FsbAor ICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiBkdXJpbmcK KyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIHdoaWNoIHJlbGVhc2VzIHRoZSBp bmRleCBwYWdlIGxvY2sgYW5kCisgICBzYXZlcyB0aGUgcGFnZSBMU04gaW4KKyAgIHRoZSBiYXRj aCdzIDxzdHJ1Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZC4gIExhdGVyLCB3aXRoaW4K KyAgIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTSBy ZS1yZWFkcyB0aGUgcGFnZSwKKyAgIGNvbXBhcmVzIHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFnYWlu c3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3RmaWVsZD4sIGFuZCBnaXZl cyB1cCBvbiBzZXR0aW5nCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGlmIHRo ZSBMU04gaGFzIGFkdmFuY2VkLiAgQW4gYWR2YW5jZWQgTFNOCisgICBpbmRpY2F0ZXMgdGhhdCB0 aGUgcGFnZSB3YXMgbW9kaWZpZWQgJm1kYXNoOyBwb3NzaWJseSBieQorICAgPGNvbW1hbmQ+VkFD VVVNPC9jb21tYW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7IHNvIGl0IHdvdWxkIGJl CisgICB1bnNhZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBzdGlsbCBwb2ludCB0byB0 aGUgc2FtZSBoZWFwL3RhYmxlCisgICB0dXBsZXMuICBTaW5jZSA8bGl0ZXJhbD5MUF9ERUFEPC9s aXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCisgICBoaW50LCBpdCBpcyBh bHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBhcHByb2FjaC4KKyAgPC9w YXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+CisgICAgVGhpcyBMU04gY29tcGFyaXNvbiB0 ZWNobmlxdWUgcmVxdWlyZXMgdGhlIGluZGV4IEFNIHRvIHVzZSBmYWtlCisgICAgKG1vbm90b25p Y2FsbHkgaW5jcmVhc2luZykgTFNOcyBvbiBpdHMgcGFnZXMgZm9yIHJlbGF0aW9ucyB3aGVyZSBX QUwgaXMKKyAgICBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExTTnMgYXJlIG5vdCBhdmFpbGFi bGUgaW4gdGhhdCBjYXNlLiAgU2VlIHRoZQorICAgIEItdHJlZSBpbmRleCBpbXBsZW1lbnRhdGlv biBmb3IgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoaXMKKyAgICB0ZWNobmlxdWUuICBBbiBpbmRl eCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExTTnMgY2FuIHN0aWxsCisgICAgcHJv dmlkZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCBidXQgc2hvdWxkIHNp bXBseSBkbworICAgIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUg V0FMIChpLmUuLCB3aGVuCisgICAgPGZ1bmN0aW9uPlJlbGF0aW9uTmVlZHNXQUwoKTwvZnVuY3Rp b24+IGlzIGZhbHNlKSwgc2luY2UgdGhlIExTTgorICAgIGNvbXBhcmlzb24gd291bGQgYmUgdW5y ZWxpYWJsZS4KKyAgIDwvcGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx0aXA+CisgICA8cGFyYT4K KyAgICBJbmRleCBBTXMgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlCisgICAgPGZ1bmN0aW9uPmlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiAmbWRhc2g7IHRoZXkgY2FuIGltcGxl bWVudAorICAgIHRoZWlyIG93biBlcXVpdmFsZW50LCBhbmQgYXJlIGZyZWUgdG8gdXNlIHRoZSBi YXRjaAorICAgIDxzdHJ1Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB3aGF0ZXZl ciB3YXkgdGhleSBkZWVtIG5lY2Vzc2FyeQorICAgPC9wYXJhPgorICA8L3RpcD4KKworICA8cGFy YT4KKyAgIFRoaXMgTFNOLWJhc2VkIHZlcmlmaWNhdGlvbiBtZWFucyB0aGF0IHRoZSB0YWJsZSBB TSBuZWVkIG5vdCBjb25zaWRlcgorICAgd2hldGhlciB1bmd1YXJkaW5nIGEgYmF0Y2ggY291bGQg aW50cm9kdWNlIFRJRCByZWN5Y2xpbmcgaGF6YXJkcyBmb3IgYQorICAgc3Vic2VxdWVudCA8ZnVu Y3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGNhbGwuICBUaGUgaGF6YXJkcyBhcmUg dGhlCisgICBzYW1lIGluIGJvdGggY2FzZXMsIGJ1dCBzaW5jZSA8ZnVuY3Rpb24+YW1raWxsaXRl bXNiYXRjaDwvZnVuY3Rpb24+CisgICBpbmRlcGVuZGVudGx5IHZlcmlmaWVzIHRoZSBwYWdlIExT TiBhbmQgY2FuIGFsd2F5cyBzYWZlbHkgZ2l2ZSB1cCBvbgorICAgc2V0dGluZyA8bGl0ZXJhbD5M UF9ERUFEPC9saXRlcmFsPiBiaXRzLCBjb3JyZWN0bmVzcyBpcyBvYnZpb3VzIHdpdGhvdXQgYW55 CisgICBjb3VwbGluZyBiZXR3ZWVuIHRoZSB0d28uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxw cm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICsxMDU4LDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90 aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRl IChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3 YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9u PiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQg aW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAor ICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkg Z2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdo ZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAog ICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4 MSw2ICsxMDcxLDM5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBzdHJ1 Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gd2lsbAorICAgdHlwaWNhbGx5IGFsc28gc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8 L2Z1bmN0aW9uPiwgYW5kIGFsbW9zdCBhbGwgb2YKKyAgIHRoZSBpbmRleCBBTSdzIGludGVybmFs IHNjYW5uaW5nIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3byBwYXRocy4gIFRoZQorICAg bWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IG9ubHkgb25lCisgICBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lICh2aWEgPGZ1 bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+KSwKKyAgIHVubGlrZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHRoZSB0YWJsZSBBTSBtYW5hZ2Vz IHNldmVyYWwKKyAgIGJhdGNoZXMgaW4gYSBkZWRpY2F0ZWQgYmF0Y2ggcmluZyBidWZmZXIgZGF0 YSBzdHJ1Y3R1cmUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBvbmx5IGNoYW5nZSBu ZWVkZWQgdG8gbWFpbnRhaW4gdGhpcyBpbnZhcmlhbnQgaXMgYSBzaW5nbGUgY2FsbCB0bworICAg PGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4gYXQgdGhlIHBv aW50IHdoZXJlIHRoZQorICAgc2NhbiBtb3ZlcyBiZXR3ZWVuIGluZGV4IHBhZ2VzLCBjb25kaXRp b25hbCBvbiB0aGUgc2NhbidzCisgICA8c3RydWN0ZmllbGQ+dXNlYmF0Y2hyaW5nPC9zdHJ1Y3Rm aWVsZD4gZmllbGQgYmVpbmcgZmFsc2UgKGluZGljYXRpbmcgYQorICAgYml0bWFwIGluZGV4IHNj YW4pLiAgVGhlIGluZGV4IEFNIHJlbGVhc2VzIGl0cyBwcmlvciBiYXRjaAorICAganVzdCBhcyBp dCBpcyBhYm91dCB0byBnZW5lcmF0ZSB0aGUgbmV4dCBiYXRjaCAmbWRhc2g7IHRoZSBzYW1lIHBv aW50CisgICB3aGVyZSBpdCBleHRyYWN0cyBuYXZpZ2F0aW9uIHN0YXRlIChzdWNoIGFzIHNpYmxp bmctcGFnZSBsaW5rcykgZnJvbQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4uICBO byBvdGhlciBjaGFuZ2VzIHRvIHRoZSBpbmRleCBBTSdzCisgICBzY2FubmluZyBsb2dpYyBhcmUg bmVlZGVkLiAgVGhpcyBlYXJseSByZWxlYXNlIGlzIHNwZWNpZmljIHRvCisgICA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nCisgICA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPgor ICAgaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIGNhbGxlciAodGhlIHRhYmxlIEFNKSwgYW5kIHRo ZSBpbmRleCBBTSBtdXN0CisgICBuZXZlciByZWxlYXNlIGl0LiAgU2VlIDxmdW5jdGlvbj5fYnRf bmV4dDwvZnVuY3Rpb24+IGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZS4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFu ZCByZXVzZWQgYnkgdGhlIG5leHQKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2M8L2Z1bmN0aW9uPiBjYWxsLCBhdm9pZGluZyByZXBlYXRlZAorICAgbWVtb3J5IGFsbG9jYXRp b24gZHVyaW5nIHRoZSBiaXRtYXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dy YW1saXN0aW5nPgogdm9pZApAQCAtNzk1LDMyICsxMTE4LDUyIEBAIGFtZW5kc2NhbiAoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtw b3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4s CisgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgot ICAgTWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9u bHkgc3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAg IE5vdGlmeSB0aGUgaW5kZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdl IHRoZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCBtYXkgaW52YWxp ZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0CisgICBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2Nh bidzIHByb2dyZXNzLiAgVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJs ZSBBTSBpcyBhYm91dCB0byBwcm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9u IHRoYW4KKyAgIHdhcyB1c2VkIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVk IGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEg bWFya2VkIHNjYW4gcG9zaXRpb24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLiAgU29tZSBp bmRleCBBTXMgbWFpbnRhaW4gaW50ZXJuYWwgc3RhdGUgdGhhdAorICAgYWR2YW5jZXMgaW4gbG9j a3N0ZXAgd2l0aCB0aGUgc2NhbiB1bmRlciB0aGUgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIHNj YW4KKyAgIGRpcmVjdGlvbiB3aWxsIG5vdCBjaGFuZ2UuICBTdWNoIHN0YXRlIG1heSBmYWxsIGJl aGluZCB0aGUgc2NhbidzIHRydWUKKyAgIHBvc2l0aW9uIHdpdGhvdXQgaGFybSAoc2ltcGx5IHJl YWRpbmcgdGhlIG5leHQgaW5kZXggcGFnZSB3aWxsIGFsbG93IHRoZQorICAgc3RhdGUgdG8gPHF1 b3RlPmNhdGNoIHVwPC9xdW90ZT4pLCBidXQgbXVzdCBuZXZlciBnZXQgYWhlYWQgb2YgaXQuICBX aGVuCisgICB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBvciBhIG1hcmtlZCBwb3NpdGlvbiBp cyByZXN0b3JlZCwgdGhlIGFzc3VtcHRpb24KKyAgIGlzIHZpb2xhdGVkLCBzbyB0aGUgaW5kZXgg QU0gbXVzdCByZXNldCB0aGUgc3RhdGUgdG8gYSBzYWZlIHN0YXJ0aW5nIHBvaW50CisgICBmb3Ig dGhlIG5ldyBkaXJlY3Rpb24uICBGb3IgZXhhbXBsZSwgQi10cmVlIHVzZXMgdGhpcyBjYWxsYmFj ayB0byByZXNldCBpdHMKKyAgIDxsaXRlcmFsPlNjYWxhckFycmF5T3BFeHByPC9saXRlcmFsPiBh cnJheSBrZXlzIHRvIHRoZWlyIGluaXRpYWwgcG9zaXRpb25zCisgICBmb3IgdGhlIG5ldyBzY2Fu IGRpcmVjdGlvbi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbW1h cmtwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFj Y2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAot ICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbW1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMg PHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJl IHNldCB0byBOVUxMLgorICAgV2hlbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlz IGNhbGxlZCBkdWUgdG8gYSBjcm9zcy1iYXRjaAorICAgZGlyZWN0aW9uIGNoYW5nZSwgdGhlIGNv cmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1 Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byByZWZsZWN0IHRoZSBuZXcgc2NhbiBk aXJlY3Rpb24KKyAgIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuICBUaGUgaW5kZXggQU0gc2hvdWxk IHVzZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uCisgICB3aGVuIHJlc2V0dGluZyBhbnkgc3RhdGUg dGhhdCBkZXBlbmRzIG9uIGtub3dpbmcgd2hpY2ggd2F5IHRoZSBzY2FuIGlzCisgICBwcm9jZWVk aW5nLiAgV2hlbiBjYWxsZWQgdG8gcmVzdG9yZSBhIG1hcmtlZCBwb3NpdGlvbiwgdGhlIGJhdGNo J3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBpcyBub3QgbW9kaWZpZWQ7IGl0 IHJldGFpbnMgdGhlIGRpcmVjdGlvbgorICAgZnJvbSB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2lu YWxseSByZXR1cm5lZC4gIEluIGJvdGggY2FzZXMsIHRoZSBiYXRjaAorICAgcGFzc2VkIHRvIDxm dW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgdGhlIGJhdGNoIHRoYXQgd2lsbCBuZXh0 IGJlCisgICBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhcyBpdHMK KyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LiAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRo YXQgdGhlCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi48c3RydWN0ZmllbGQ+ZGly PC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMKKyAgIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgc2FtZSBz Y2FuIGRpcmVjdGlvbiBhcyB3aGVuCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+ IHdhcyBjYWxsZWQuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZv aWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgot ICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24u Ci0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVu Y3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBt ZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0 cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5h bWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBO VUxMLgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIHByaXZhdGUgc3RhdGUgd2hp Y2ggbXVzdCBiZSByZXNldCB3aGVuIHRoZQorICAgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzIG11c3Qg cHJvdmlkZSBhbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpbXBsZW1lbnRh dGlvbi4gIEluZGV4IEFNcyB3aXRoIG5vIHN1Y2ggc3RhdGUgbWF5IHNldAorICAgPHN0cnVjdGZp ZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiB0byBOVUxMLiAgVGhlCisgICA8ZnVuY3Rpb24+ YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdoZW4g dGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUK KyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgogICA8L3BhcmE+ CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTMxOCw4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgICAgICBB Y2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0aGUgbmF0dXJhbCBv cmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUpIHNob3VsZCBzZXQK ICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuCisg ICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0aGlzIGNhcGFiaWxp dHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11c3QgdXNlIGJ0cmVl LWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVpciBlcXVhbGl0eSBh bmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTk0LDM0ICsxMzM5LDQx IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5 LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9u PC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAorICAgb3JkZXJpbmcgb3Bl cmF0b3JzLiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2YWxzPC9zdHJ1Y3Rm aWVsZD4gZm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhlcmUgaXMgY3VycmVudGx5 IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJpbmcgdmFsdWVzCisgICB3 aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlzIHdvdWxkIHJlcXVpcmUg YW4gYWRkaXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCBkb2VzIG5vdCB5ZXQg ZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUgdmVyc2lvbiBvZiA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8 bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2FuIGJlIGVp dGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBub3JtYWwg Y2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LiAg SWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+ IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCB0aGVu IHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nhbm5lZCBi YWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sg ZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgcmV0dXJu Ci0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0aGFuIHRo ZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBvbmx5IG9j Y3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3Jk ZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2FsbCwgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2Ug dGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhlIGJhdGNoIGNvbnRhaW5p bmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0aGFuIHRoZSBiYXRjaCBj b250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4K ICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRy eS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4g aXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGly ZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nl c3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3Rl Pm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVy bmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0 IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24g bmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3Bv czwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9z aXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0g ICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBh bmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRv IE5VTEwKLSAgIGluc3RlYWQuCisgICBBbGwgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBpbmRleCBBTXMgaW5oZXJlbnRseSBzdXBwb3J0CisgICBtYXJrL3Jlc3RvcmUgb2Ygc2NhbiBw b3NpdGlvbnMgKDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW5kZXggQU1zCisgICBk byBub3QpLiAgVGhlIG1hcmsvcmVzdG9yZSBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0aGUgdGFi bGUgQU0gYW5kIHdvcmtzCisgICB3aXRoIGFueSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGltcGxlbWVudGF0aW9uLiAgSW5kZXggQU1zIHRoYXQKKyAgIG1haW50YWluIGludGVybmFs IHN0YXRlIHdoaWNoIHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzIG11c3QgcHJvdmlkZSBhbgor ICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjayB0byBiZSBub3RpZmll ZCB3aGVuIHRoZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gY2hhbmdlcyB1bmV4cGVjdGVk bHksIHN1Y2ggYXMgZHVyaW5nIG1hcmsvcmVzdG9yZTsgc2VlCisgICA8eHJlZiBsaW5rZW5kPSJp bmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAg IEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11 c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBt YWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBp biB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQog ICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJl dHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBp dCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0MCwxNiAr MTM5MiwxOCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBv cGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICB3aGljaCB0aGUgaW5kZXggcmV0dXJucyB0aGUg YWN0dWFsIGRhdGEgbm90IGp1c3QgdGhlIFRJRCBvZiB0aGUgaGVhcCB0dXBsZS4KICAgIFRoaXMg d2lsbCBvbmx5IGF2b2lkIEkvTyBpZiB0aGUgdmlzaWJpbGl0eSBtYXAgc2hvd3MgdGhhdCB0aGUg VElEIGlzIG9uIGFuCiAgICBhbGwtdmlzaWJsZSBwYWdlOyBlbHNlIHRoZSBoZWFwIHR1cGxlIG11 c3QgYmUgdmlzaXRlZCBhbnl3YXkgdG8gY2hlY2sKLSAgIE1WQ0MgdmlzaWJpbGl0eS4gIEJ1dCB0 aGF0IGlzIG5vIGNvbmNlcm4gb2YgdGhlIGFjY2VzcyBtZXRob2Qncy4KKyAgIE1WQ0MgdmlzaWJp bGl0eS4gIEJ1dCB0aGF0IGlzIG5vIGNvbmNlcm4gb2YgdGhlIGluZGV4IGFjY2VzcyBtZXRob2Qn cy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAg IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4g b25lIGNhbGwuICBUaGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFu IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2 b2lkaW5nIGxvY2svdW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBw cmluY2lwbGUKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZl IHRoZSBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KKyAg IEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9u ZSB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwg dHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZp Y2llbnQgdGhhbiB3aXRoIGFuIDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVz ZSBpdCBhbGxvd3MgZWZmaWNpZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2Vz IGNvbnRhaW5pbmcKKyAgIG1hdGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4gc2hvdWxkIGhhdmUgdGhlCisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0 ZWQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9u cyB0bwogICAgc2ltcGxpZnkgbWF0dGVycy4gIEZpcnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gcmV0dXJucyBhbGwKICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJr aW5nIG9yIHJlc3RvcmluZyBzY2FuIHBvc2l0aW9ucyBpc24ndAogICAgc3VwcG9ydGVkLiBTZWNv bmRseSwgdGhlIHR1cGxlcyBhcmUgcmV0dXJuZWQgaW4gYSBiaXRtYXAgd2hpY2ggZG9lc24ndApA QCAtMTA1OSwxNSArMTQxMywxNSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNt cHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBBbHNvLCB0aGVyZSBpcyBu byBwcm92aXNpb24gZm9yIGluZGV4LW9ubHkgc2NhbnMgd2l0aAogICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4sIHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byByZXR1cm4gdGhlIGNv bnRlbnRzIG9mCiAgICBpbmRleCB0dXBsZXMuCi0gICBGaW5hbGx5LCA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPgotICAgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBsb2NraW5nIG9mIHRo ZSByZXR1cm5lZCB0dXBsZXMsIHdpdGggaW1wbGljYXRpb25zCi0gICBzcGVsbGVkIG91dCBpbiA8 eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgorICAgRmluYWxseSwgPGZ1bmN0aW9uPmFt Z2V0Yml0bWFwPC9mdW5jdGlvbj4gZG9lcyBub3QgaG9sZCBhbnkgaW5kZXggcGFnZSBwaW5zCisg ICBhZnRlciBpdCByZXR1cm5zIChzaW1pbGFybHkgdG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBzY2FucyB3aXRoCisgICBhbiBNVkNDIHNuYXBzaG90KSwgYXMgZGVzY3JpYmVkIGlu IDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4K ICAgIE5vdGUgdGhhdCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFuIGFjY2VzcyBtZXRob2QgdG8gaW1w bGVtZW50IG9ubHkKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3Qg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3IgdmljZSB2ZXJzYSwKLSAgIGlmIGl0 cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBv dGhlci4KKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ LAorICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVu c3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKICA8L3NlY3QxPgpA QCAtMTEyMywxMSArMTQ3NywxNyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNt cHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNjYW4gbXVzdCBt YWludGFpbiBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcgdGhlIGl0ZW0g bGFzdCByZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4s IGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZQotICAg ICAgIGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMu ICBUaGUgbmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgorICAg ICAgIEEgcGluIG11c3QgYmUgaGVsZCBvbiBhbnkgaW5kZXggcGFnZSB3aG9zZSBpdGVtcyBtaWdo dCBzdGlsbCBuZWVkIHRvCisgICAgICAgYmUgZm9sbG93ZWQsIGFuZCA8ZnVuY3Rpb24+YW1idWxr ZGVsZXRlPC9mdW5jdGlvbj4gbXVzdCBhY3F1aXJlIGEKKyAgICAgICBjbGVhbnVwIGxvY2sgb24g ZWFjaCBpbmRleCBwYWdlLCB3aGljaCB3aWxsIGJsb2NrIGlmIGFueSBvdGhlcgorICAgICAgIGJh Y2tlbmQgaG9sZHMgYSBwaW4gb24gdGhhdCBwYWdlLgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgICAg IG1hbmFnZXMgdGhpcyBwaW4gZGlyZWN0bHkuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSBpbmRleCBBTSBob2xkcyBhIGJ1ZmZlcgorICAgICAg IHBpbiBvbiBlYWNoIGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdlIChpbiBpdHMgcGVyLWJhdGNoIG9w YXF1ZSBhcmVhKSwKKyAgICAgICB3aGlsZSB0aGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiB0aGUg aW50ZXJsb2NrIGlzIGRyb3BwZWQgdmlhCisgICAgICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNo PC9mdW5jdGlvbj4uCisgICAgICAgVGhlIG5lZWQgZm9yIHRoaXMgcnVsZSBpcyBleHBsYWluZWQg YmVsb3cuCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC9pdGVtaXplZGxp c3Q+CkBAIC0xMTM4LDM5ICsxNDk4LDk0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5 cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIDxjb21tYW5kPlZB Q1VVTTwvY29tbWFuZD4uCiAgICBUaGlzIGNyZWF0ZXMgbm8gc2VyaW91cyBwcm9ibGVtcyBpZiB0 aGF0IGl0ZW0KICAgIG51bWJlciBpcyBzdGlsbCB1bnVzZWQgd2hlbiB0aGUgcmVhZGVyIHJlYWNo ZXMgaXQsIHNpbmNlIGFuIGVtcHR5Ci0gICBpdGVtIHNsb3Qgd2lsbCBiZSBpZ25vcmVkIGJ5IDxm dW5jdGlvbj5oZWFwX2ZldGNoKCk8L2Z1bmN0aW9uPi4gIEJ1dCB3aGF0IGlmIGEKKyAgIGl0ZW0g c2xvdCB3aWxsIHNpbXBseSBiZSB0cmVhdGVkIGFzIG5vdC12aXNpYmxlLiAgQnV0IHdoYXQgaWYg YQogICAgdGhpcmQgYmFja2VuZCBoYXMgYWxyZWFkeSByZS11c2VkIHRoZSBpdGVtIHNsb3QgZm9y IHNvbWV0aGluZyBlbHNlPwogICAgV2hlbiB1c2luZyBhbiBNVkNDLWNvbXBsaWFudCBzbmFwc2hv dCwgdGhlcmUgaXMgbm8gcHJvYmxlbSBiZWNhdXNlCiAgICB0aGUgbmV3IG9jY3VwYW50IG9mIHRo ZSBzbG90IGlzIGNlcnRhaW4gdG8gYmUgdG9vIG5ldyB0byBwYXNzIHRoZQogICAgc25hcHNob3Qg dGVzdC4gIEhvd2V2ZXIsIHdpdGggYSBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3QgKHN1Y2gg YXMKICAgIDxsaXRlcmFsPlNuYXBzaG90QW55PC9saXRlcmFsPiksIGl0IHdvdWxkIGJlIHBvc3Np YmxlIHRvIGFjY2VwdCBhbmQgcmV0dXJuCi0gICBhIHJvdyB0aGF0IGRvZXMgbm90IGluIGZhY3Qg bWF0Y2ggdGhlIHNjYW4ga2V5cy4gIFdlIGNvdWxkIGRlZmVuZAotICAgYWdhaW5zdCB0aGlzIHNj ZW5hcmlvIGJ5IHJlcXVpcmluZyB0aGUgc2NhbiBrZXlzIHRvIGJlIHJlY2hlY2tlZAotICAgYWdh aW5zdCB0aGUgaGVhcCByb3cgaW4gYWxsIGNhc2VzLCBidXQgdGhhdCBpcyB0b28gZXhwZW5zaXZl LiAgSW5zdGVhZCwKLSAgIHdlIHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkg dG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVhZGVyCi0gICBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4g ZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXggZW50cnkgdG8gdGhlIG1hdGNoaW5nCi0gICBo ZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPiBibG9j ayBvbiBzdWNoIGEgcGluIGVuc3VyZXMKLSAgIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5k PiBjYW5ub3QgZGVsZXRlIHRoZSBoZWFwIGVudHJ5IGJlZm9yZSB0aGUgcmVhZGVyCi0gICBpcyBk b25lIHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzIGxpdHRsZSBpbiBydW4gdGltZSwgYW5k IGFkZHMgYmxvY2tpbmcKLSAgIG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUg dGhlcmUgYWN0dWFsbHkgaXMgYSBjb25mbGljdC4KKyAgIGEgd2hvbGx5IHVucmVsYXRlZCByb3cg KG9uZSB0aGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHNhdGlzZnkgdGhlIHNjYW4KKyAgIGtleXMp LiAgV2UgY2FuIG9wdGlvbmFsbHkgdXNlIGEgcGluIG9uIGFuIGluZGV4IHBhZ2UgYXMgYSBwcm94 eSB0byBpbmRpY2F0ZQorICAgdGhhdCB0aGUgcmVhZGVyIG1pZ2h0IHN0aWxsIGJlIDxxdW90ZT5p biBmbGlnaHQ8L3F1b3RlPiBmcm9tIHRoZSBpbmRleAorICAgZW50cnkgdG8gdGhlIG1hdGNoaW5n IGhlYXAgZW50cnkuICBNYWtpbmcgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+Cisg ICBibG9jayBvbiBzdWNoIGEgcGluIGVuc3VyZXMgdGhhdCA8Y29tbWFuZD5WQUNVVU08L2NvbW1h bmQ+IGNhbm5vdCBkZWxldGUKKyAgIHRoZSBoZWFwIGVudHJ5IGJlZm9yZSB0aGUgcmVhZGVyIGlz IGRvbmUgd2l0aCBpdC4gIFRoaXMgc29sdXRpb24gY29zdHMKKyAgIGxpdHRsZSBpbiBydW4gdGlt ZSwgYW5kIGFkZHMgYmxvY2tpbmcgb3ZlcmhlYWQgb25seSBpbiB0aGUgcmFyZSBjYXNlcyB3aGVy ZQorICAgdGhlcmUgYWN0dWFsbHkgaXMgYSBjb25mbGljdC4gIEZvciBwbGFpbiBpbmRleCBzY2Fu cyB0aGF0IHVzZSBhbgorICAgTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIGhvbGRpbmcgdGhlIHBp biBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBzY2FuCisgICB3aWxsIGFsd2F5cyB2aXNpdCB0 aGUgaGVhcCBwYWdlLCB3aGVyZSB0aGUgc25hcHNob3QgaXRzZWxmIHdpbGwgcmVqZWN0IGFueQor ICAgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50LiAgKEluZGV4LW9ubHkgc2NhbnMgYXJlIGEg c3BlY2lhbCBjYXNlLCBhcworICAgZGlzY3Vzc2VkIGJlbG93LikKICAgPC9wYXJhPgogCiAgIDxw YXJhPgotICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IGluZGV4IHNjYW5zIGJlIDxxdW90 ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB3ZSBoYXZlCi0gICB0byBmZXRjaCBlYWNoIGhlYXAgdHVw bGUgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXgKLSAg IGVudHJ5LiAgVGhpcyBpcyBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuICBBbgot ICAgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+IHNjYW4gaW4gd2hpY2ggd2UgY29sbGVjdCBt YW55IFRJRHMgZnJvbSB0aGUgaW5kZXgsCi0gICBhbmQgb25seSB2aXNpdCB0aGUgaGVhcCB0dXBs ZXMgc29tZXRpbWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2ggbGVzcyBpbmRleAotICAgbG9ja2luZyBv dmVyaGVhZCBhbmQgY2FuIGFsbG93IGEgbW9yZSBlZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVy bi4KLSAgIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91 cyBhcHByb2FjaCBmb3IKLSAgIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBh c3luY2hyb25vdXMgc2NhbiBpcyB3b3JrYWJsZQotICAgZm9yIGEgcXVlcnkgdXNpbmcgYW4gTVZD QyBzbmFwc2hvdC4KKyAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+IGluZGV4IHNjYW5zIGJlCisgICA8cXVvdGU+c3luY2hyb25vdXM8 L3F1b3RlPjogdGhlIHRhYmxlIEFNIG11c3QgZmV0Y2ggZWFjaCBoZWFwIHR1cGxlCisgICBpbW1l ZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBlbnRyeS4gIFRo aXMgaXMKKyAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZQorICAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsIGJ5IGNvbnRyYXN0LCB3YXMg ZGVzaWduZWQgdG8KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5hc3luY2hyb25vdXM8L3F1 b3RlPi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW4gYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiwgdGhlIGFjY2VzcyBtZXRob2QgZG9lcyBub3QKLSAg IGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLiAgVGhlcmVm b3JlCi0gICBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2ggc2NhbnMgd2l0aCBNVkNDLWNvbXBs aWFudCBzbmFwc2hvdHMuCisgICBXaGV0aGVyIGEgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVy bG9jayAodHlwaWNhbGx5IGFuIGluZGV4IHBhZ2UgYnVmZmVyCisgICBwaW4pIGlzIGRyb3BwZWQg aW1tZWRpYXRlbHkgb3IgZGVmZXJyZWQgaXMgY29udHJvbGxlZCBieSBhIGdlbmVyaWMsCisgICBz Y2FuLWxldmVsIHBvbGljeSB0aGF0IGlzIGRldGVybWluZWQgd2hlbiB0aGUgc2NhbiBpcyBvcGVu ZWQgJm1kYXNoOyBpdCBpcworICAgbm90IHVuZGVyIHRoZSBjb250cm9sIG9mIGVpdGhlciB0aGUg aW5kZXggQU0gb3IgdGhlIHRhYmxlIEFNLiAgVGhlIHNjYW4ncworICAgPHN0cnVjdGZpZWxkPmJh dGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGZsYWcgZW5jb2RlcyB0aGlzIHBvbGlj eS4KKyAgIEl0IGlzIHNldCBiYXNlZCBvbiB0d28gY3JpdGVyaWEgdGhhdCBhcmUga25vd24gdG8g dGhlIGNvcmUgc2NhbiBtYWNoaW5lcnk6CisgICB3aGV0aGVyIHRoZSBzY2FuIHVzZXMgYW4gTVZD Qy1jb21wbGlhbnQgc25hcHNob3QsIGFuZCB3aGV0aGVyIGl0IGlzIGFuCisgICBpbmRleC1vbmx5 IHNjYW4uICBTcGVjaWZpY2FsbHksCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1 YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSB3aGVuIHRoZSBzY2FuIHVzZXMKKyAgIGFuIE1WQ0Mg c25hcHNob3QgYW5kIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBhbiBpbmRleC1vbmx5IHNj YW4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gPHN0cnVjdGZpZWxkPmJhdGNoSW1t ZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRoZQorICAgaW50ZXJsb2NrIGlz IGRyb3BwZWQgaW5zaWRlCisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jazwv ZnVuY3Rpb24+IChiZWZvcmUgdGhlIGJhdGNoIGlzIGV2ZW4KKyAgIHJldHVybmVkIHRvIHRoZSB0 YWJsZSBBTSksIGJlY2F1c2UgYSBwbGFpbiBpbmRleCBzY2FuIHdpdGggYW4gTVZDQworICAgc25h cHNob3Qgd2lsbCBhbHdheXMgdmlzaXQgdGhlIGhlYXAgcGFnZSwgd2hlcmUgdGhlIE1WQ0Mgdmlz aWJpbGl0eSBjaGVjaworICAgaXMgYXV0aG9yaXRhdGl2ZSAmbWRhc2g7IGV2ZW4gaWYgPGNvbW1h bmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xlcyBhIFRJRCwKKyAgIHRoZSBuZXcgb2NjdXBhbnQg Y2Fubm90IHBhc3MgdGhlIHNuYXBzaG90IHRlc3QuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFdoZW4gPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlz IGZhbHNlLCB0aGUKKyAgIGludGVybG9jayBpcyByZXRhaW5lZCB1bnRpbCB0aGUgdGFibGUgQU0g ZXhwbGljaXRseSBjYWxscworICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4s IGJlY2F1c2UgdGhlIHNjYW4gY2Fubm90IHJlbHkgb24gdGhhdAorICAgaGVhcCBwYWdlIE1WQ0Mg YmFja3N0b3AuICBGb3Igbm9uLU1WQ0Mgc2NhbnMsIHRoZXJlIGlzIG5vIE1WQ0Mgc25hcHNob3Qg dG8KKyAgIHJlamVjdCBhIHJlY3ljbGVkIFRJRCdzIG5ldyBvY2N1cGFudCBhdCBhbGwuICBGb3Ig aW5kZXgtb25seSBzY2FucywgZXZlbgorICAgd2l0aCBhbiBNVkNDIHNuYXBzaG90LCB0aGUgc2Nh biB0eXBpY2FsbHkgYXZvaWRzIHZpc2l0aW5nIHRoZSBoZWFwIHBhZ2UKKyAgIGFsdG9nZXRoZXIg KHVzaW5nIHRoZSB2aXNpYmlsaXR5IG1hcCBpbnN0ZWFkKSwgc28gdGhlIE1WQ0MgY2hlY2sgdGhh dCB3b3VsZAorICAgY2F0Y2ggYSByZWN5Y2xlZCBUSUQgdXN1YWxseSBuZXZlciBydW5zLiAgSW4g Ym90aCBjYXNlcyB0aGUgaW50ZXJsb2NrIG9uCisgICB0aGUgaW5kZXggcGFnZSBpcyB3aGF0IHBy ZXZlbnRzIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJvbSByZWN5Y2xpbmcKKyAgIFRJRHMg d2hpbGUgdGhlIHNjYW4gaXMgc3RpbGwgaW4gZmxpZ2h0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxk PiBpcyBmYWxzZSwgdGhlIHRhYmxlCisgICBBTSBkZWNpZGVzIDxlbXBoYXNpcz53aGVuPC9lbXBo YXNpcz4gdG8gY2FsbAorICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj47IHRo ZSBpbmRleCBBTSBkZWNpZGVzCisgICA8ZW1waGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVh c2UuICBXaGVuCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3Rm aWVsZD4gaXMgdHJ1ZSwgdGhlIGluZGV4IEFNCisgICBkcm9wcyB0aGUgaW50ZXJsb2NrIGl0c2Vs ZiAoaW5zaWRlCisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jazwvZnVuY3Rp b24+KSwgYW5kCisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBpcyBuZXZl ciBjYWxsZWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgYW4gPGZ1bmN0 aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiBpcyBpbmhlcmVudGx5CisgICBh c3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURzIGFyZSBjb2xsZWN0ZWQgaW50byBhIGJpdG1h cCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBiZWdpbnMuICBTdWNoIHNjYW5zIHRoZXJlZm9y ZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LAorICAgYW5kIHRoZXJlIGlzIG5v IG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRvIGhvbGQgaW5kZXggcGFnZSBwaW5zLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgbWFuYWdlCisgICBwaW4gbGlmZXRpbWUg dGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8gdGFibGUgQU0gaW50ZXJtZWRpYXJ5ICh1bmxp a2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPikuICBUaGUgaW5kZXgg QU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAgY3VycmVudCBpbmRleCBwYWdlIHVudGlsIHRo ZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBhZ2Ugb3IgZW5kcy4KICAgPC9wYXJhPgogCiAg IDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggODA4MjliMjM5Li5jZjBi YTViMGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE3MywxMiArMTE3Mywx MyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJp Y19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+ Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBs ZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHBy ZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUg dXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVz aW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0 cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkg dW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGlj ZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3Jvbnlt PiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJh bD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0 ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQg dGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91 Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEIt dHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQs IGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVl IGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAg IGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IK ICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBi L3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCAz MWY4ZDJiODEuLmE5NzU2ZjY1ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5k ZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0LDEwICszMzQsMTIgQEAgZGloYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGRpYmVnaW5zY2FuLAogCQkuYW1yZXNj YW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5V TEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVM TCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFtZW5kc2NhbiA9IGRpZW5kc2NhbiwKLQkJ LmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQg PSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IGM3MmY2YzU5NS4uZTNjOGVkNjg0IDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtMjA4LDYgKzIwOCw3IEBAIEJPT0wKIEJPT0xFQU4KIEJPWAogQlRBcnJh eUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxkU3RhdGUKIEJUQ2FsbGJhY2tTdGF0ZQogQlRD eWNsZUlkCkBAIC0yMzUsOCArMjM2LDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJl cHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNj YW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBAIC0yNjUs NiArMjY0LDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJhY2t1cFRhcmdldEhhbmRsZQogQmFzZUJh Y2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hS aW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlmeV9mdW5jdGlvbgog QmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24K QEAgLTEyNDYsNiArMTI0OCw3IEBAIEhiYUxpbmUKIEhlYWRsaW5lSnNvblN0YXRlCiBIZWFkbGlu ZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CitIZWFwQmF0Y2hEYXRhCiBIZWFwQ2hlY2tD b250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0YQogSGVhcFBhZ2VGcmVlemUKQEAgLTEzMjUs NiArMTMyOCw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGlt ZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQog SW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlv bgpAQCAtMzU0MCwxOCArMzU0NSwxNyBAQCBhbWNhbnJldHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0 aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlvbgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh bl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFt Z2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxs ZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0 aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJl c2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFt cmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNs YXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTMu MAoK --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0002-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Disposition: attachment; filename="v22-0002-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8w14 RnJvbSBlNDI4ZTI3OTZhZjE4OGIyNzc2MDk3MDhhNzNhOTI1YjM3ODM4YjYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMDA6MjI6MTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwMi8xNV0g TW92ZSBoZWFwYW1faGFuZGxlci5jIGluZGV4IHNjYW4gY29kZSB0byBuZXcgZmlsZS4KCk1vdmUg dGhlIGhlYXBhbSBpbmRleCBmZXRjaCBjYWxsYmFja3MgKGluZGV4X2ZldGNoX2JlZ2luLAppbmRl eF9mZXRjaF9yZXNldCwgaW5kZXhfZmV0Y2hfZW5kLCBhbmQgaW5kZXhfZmV0Y2hfdHVwbGUpIGlu dG8gYSBuZXcKZGVkaWNhdGVkIGZpbGUuICBBbHNvIG1vdmUgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl ciBvdmVyLiAgVGhpcyBpcyBhCnB1cmVseSBtZWNoYW5pY2FsIG1vdmUgd2l0aCBubyBmdW5jdGlv bmFsIGltcGFjdC4KClVwY29taW5nIHdvcmsgdG8gYWRkIGEgc2xvdC1iYXNlZCB0YWJsZSBBTSBp bnRlcmZhY2UgZm9yIGluZGV4IHNjYW5zCndpbGwgc3Vic3RhbnRpYWxseSBleHBhbmQgdGhpcyBj b2RlLiAgS2VlcGluZyBpdCBpbiBoZWFwYW1faGFuZGxlci5jCndvdWxkIGNsdXR0ZXIgYSBmaWxl IHdob3NlIHByaW1hcnkgcm9sZSBpcyB0byB3aXJlIHVwIHRoZSBUYWJsZUFtUm91dGluZQpjYWxs YmFja3MuICBCaXRtYXAgaGVhcCBzY2FucyBhbmQgc2VxdWVudGlhbCBzY2FucyB3b3VsZCBiZW5l Zml0IGZyb20Kc2ltaWxhciBzZXBhcmF0aW9uIGluIHRoZSBmdXR1cmUuCgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5anhv YWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgICAgfCAxNjEgLS0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgfCAxMTEgLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyB8IDI5MiArKysrKysr KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL21lc29uLmJ1aWxkICAgICAg ICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDMwNiBpbnNlcnRpb25zKCspLCAyNzUgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDU0MDY3YjgyOC4uY2M5MGM4MjFiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCkBAIC0zNjYsOSArMzY2LDYgQEAgZXh0ZXJuIGJvb2wgaGVhcF9nZXRu ZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLAogCQkJCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gYm9vbCBoZWFwX2ZldGNoKFJlbGF0aW9uIHJlbGF0aW9u LCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJICAgSGVhcFR1cGxlIHR1cGxlLCBCdWZmZXIgKnVz ZXJidWYsIGJvb2wga2VlcF9idWYpOwotZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl cihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCQkJCQkgICBCdWZmZXIg YnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKLQkJCQkJCQkJ ICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CiAKIGV4dGVybiB2b2lkIGhlYXBf Z2V0X2xhdGVzdF90aWQoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIApA QCAtNDMxLDYgKzQyOCwxOCBAQCBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKIGV4dGVybiBUcmFuc2Fj dGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJ CSAgVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogCisvKiBpbiBoZWFwL2hlYXBhbV9pbmRl eHNjYW4uYyAqLworZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0 ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9u IHJlbGF0aW9uLAorCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwg SGVhcFR1cGxlIGhlYXBUdXBsZSwKKwkJCQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmly c3RfY2FsbCk7CitleHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCisJCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLCBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVh cF9jb250aW51ZSwKKwkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CisKIC8qIGluIGhlYXAvcHJ1 bmVoZWFwLmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfcGFnZV9wcnVuZV9vcHQoUmVsYXRpb24gcmVs YXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJCUJ1ZmZlciAqdm1idWZmZXIsIGJvb2wgcmVs X3JlYWRfb25seSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlCmluZGV4IDM5NDUzNDE3Mi4uMWQy N2NjYjkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWhlYXBh bS5vIFwKIAloZWFwYW1faGFuZGxlci5vIFwKKwloZWFwYW1faW5kZXhzY2FuLm8gXAogCWhlYXBh bV92aXNpYmlsaXR5Lm8gXAogCWhlYXBhbV94bG9nLm8gXAogCWhlYXB0b2FzdC5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggNmJmZjAwMzJkLi5lMDZjZTJkYjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCkBAIC0xNzY0LDE2NyArMTc2NCw2IEBAIGhlYXBfZmV0Y2goUmVsYXRp b24gcmVsYXRpb24sCiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICoJaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcgktIHNlYXJjaCBIT1QgY2hhaW4gZm9yIHR1cGxlIHNhdGlzZnlpbmcgc25hcHNob3QK LSAqCi0gKiBPbiBlbnRyeSwgKnRpZCBpcyB0aGUgVElEIG9mIGEgdHVwbGUgKGVpdGhlciBhIHNp bXBsZSB0dXBsZSwgb3IgdGhlIHJvb3QKLSAqIG9mIGEgSE9UIGNoYWluKSwgYW5kIGJ1ZmZlciBp cyB0aGUgYnVmZmVyIGhvbGRpbmcgdGhpcyB0dXBsZS4gIFdlIHNlYXJjaAotICogZm9yIHRoZSBm aXJzdCBjaGFpbiBtZW1iZXIgc2F0aXNmeWluZyB0aGUgZ2l2ZW4gc25hcHNob3QuICBJZiBvbmUg aXMKLSAqIGZvdW5kLCB3ZSB1cGRhdGUgKnRpZCB0byByZWZlcmVuY2UgdGhhdCB0dXBsZSdzIG9m ZnNldCBudW1iZXIsIGFuZAotICogcmV0dXJuIHRydWUuICBJZiBubyBtYXRjaCwgcmV0dXJuIGZh bHNlIHdpdGhvdXQgbW9kaWZ5aW5nICp0aWQuCi0gKgotICogaGVhcFR1cGxlIGlzIGEgY2FsbGVy LXN1cHBsaWVkIGJ1ZmZlci4gIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgd2UgcmV0dXJuCi0gKiB0 aGUgdHVwbGUgaGVyZSwgaW4gYWRkaXRpb24gdG8gdXBkYXRpbmcgKnRpZC4gIElmIG5vIG1hdGNo IGlzIGZvdW5kLCB0aGUKLSAqIGNvbnRlbnRzIG9mIHRoaXMgYnVmZmVyIG9uIHJldHVybiBhcmUg dW5kZWZpbmVkLgotICoKLSAqIElmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCB3ZSBjaGVjayBub24t dmlzaWJsZSB0dXBsZXMgdG8gc2VlIGlmIHRoZXkgYXJlCi0gKiBnbG9iYWxseSBkZWFkOyAqYWxs X2RlYWQgaXMgc2V0IHRydWUgaWYgYWxsIG1lbWJlcnMgb2YgdGhlIEhPVCBjaGFpbgotICogYXJl IHZhY3V1bWFibGUsIGZhbHNlIGlmIG5vdC4KLSAqCi0gKiBVbmxpa2UgaGVhcF9mZXRjaCwgdGhl IGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBwaW4gYW5kIChhdCBsZWFzdCkgc2hhcmUKLSAqIGxv Y2sgb24gdGhlIGJ1ZmZlcjsgaXQgaXMgc3RpbGwgcGlubmVkL2xvY2tlZCBhdCBleGl0LgotICov Ci1ib29sCi1oZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24g cmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCi0JCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LCBIZWFw VHVwbGUgaGVhcFR1cGxlLAotCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxs KQotewotCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0JVHJhbnNhY3Rpb25J ZCBwcmV2X3htYXggPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQlCbG9ja051bWJlciBibGtubzsK LQlPZmZzZXROdW1iZXIgb2ZmbnVtOwotCWJvb2wJCWF0X2NoYWluX3N0YXJ0OwotCWJvb2wJCXZh bGlkOwotCWJvb2wJCXNraXA7Ci0JR2xvYmFsVmlzU3RhdGUgKnZpc3Rlc3QgPSBOVUxMOwotCi0J LyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGNhbGwsIHByZXZpb3VzIGNhbGwgcmV0dXJuZWQg YSAobGl2ZSEpIHR1cGxlICovCi0JaWYgKGFsbF9kZWFkKQotCQkqYWxsX2RlYWQgPSBmaXJzdF9j YWxsOwotCi0JYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0Jb2ZmbnVt ID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKTsKLQlhdF9jaGFpbl9zdGFydCA9IGZp cnN0X2NhbGw7Ci0Jc2tpcCA9ICFmaXJzdF9jYWxsOwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNz ZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7Ci0JQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1ZmZlcikgPT0gYmxrbm8pOwotCi0JLyogU2NhbiB0aHJvdWdoIHBvc3NpYmxlIG11 bHRpcGxlIG1lbWJlcnMgb2YgSE9ULWNoYWluICovCi0JZm9yICg7OykKLQl7Ci0JCUl0ZW1JZAkJ bHA7Ci0KLQkJLyogY2hlY2sgZm9yIGJvZ3VzIFRJRCAqLwotCQlpZiAob2ZmbnVtIDwgRmlyc3RP ZmZzZXROdW1iZXIgfHwgb2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSkKLQkJ CWJyZWFrOwotCi0JCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCi0JCS8qIGNo ZWNrIGZvciB1bnVzZWQsIGRlYWQsIG9yIHJlZGlyZWN0ZWQgaXRlbXMgKi8KLQkJaWYgKCFJdGVt SWRJc05vcm1hbChscCkpCi0JCXsKLQkJCS8qIFdlIHNob3VsZCBvbmx5IHNlZSBhIHJlZGlyZWN0 IGF0IHN0YXJ0IG9mIGNoYWluICovCi0JCQlpZiAoSXRlbUlkSXNSZWRpcmVjdGVkKGxwKSAmJiBh dF9jaGFpbl9zdGFydCkKLQkJCXsKLQkJCQkvKiBGb2xsb3cgdGhlIHJlZGlyZWN0ICovCi0JCQkJ b2ZmbnVtID0gSXRlbUlkR2V0UmVkaXJlY3QobHApOwotCQkJCWF0X2NoYWluX3N0YXJ0ID0gZmFs c2U7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBlbHNlIG11c3QgYmUgZW5kIG9mIGNoYWlu ICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFVwZGF0ZSBoZWFwVHVwbGUgdG8gcG9p bnQgdG8gdGhlIGVsZW1lbnQgb2YgdGhlIEhPVCBjaGFpbiB3ZSdyZQotCQkgKiBjdXJyZW50bHkg aW52ZXN0aWdhdGluZy4gSGF2aW5nIHRfc2VsZiBzZXQgY29ycmVjdGx5IGlzIGltcG9ydGFudAot CQkgKiBiZWNhdXNlIHRoZSBTU0kgY2hlY2tzIGFuZCB0aGUgKlNhdGlzZmllcyByb3V0aW5lIGZv ciBoaXN0b3JpY2FsCi0JCSAqIE1WQ0Mgc25hcHNob3RzIG5lZWQgdGhlIGNvcnJlY3QgdGlkIHRv IGRlY2lkZSBhYm91dCB0aGUgdmlzaWJpbGl0eS4KLQkJICovCi0JCWhlYXBUdXBsZS0+dF9kYXRh ID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCQloZWFwVHVwbGUt PnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKLQkJaGVhcFR1cGxlLT50X3RhYmxlT2lkID0g UmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7Ci0JCUl0ZW1Qb2ludGVyU2V0KCZoZWFwVHVwbGUt PnRfc2VsZiwgYmxrbm8sIG9mZm51bSk7Ci0KLQkJLyoKLQkJICogU2hvdWxkbid0IHNlZSBhIEhF QVBfT05MWSB0dXBsZSBhdCBjaGFpbiBzdGFydC4KLQkJICovCi0JCWlmIChhdF9jaGFpbl9zdGFy dCAmJiBIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkpCi0JCQlicmVhazsKLQotCQkvKgot CQkgKiBUaGUgeG1pbiBzaG91bGQgbWF0Y2ggdGhlIHByZXZpb3VzIHhtYXggdmFsdWUsIGVsc2Ug Y2hhaW4gaXMKLQkJICogYnJva2VuLgotCQkgKi8KLQkJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHByZXZfeG1heCkgJiYKLQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHByZXZfeG1heCwKLQkJCQkJ CQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKSkKLQkJCWJyZWFr OwotCi0JCS8qCi0JCSAqIFdoZW4gZmlyc3RfY2FsbCBpcyB0cnVlIChhbmQgdGh1cywgc2tpcCBp cyBpbml0aWFsbHkgZmFsc2UpIHdlJ2xsCi0JCSAqIHJldHVybiB0aGUgZmlyc3QgdHVwbGUgd2Ug ZmluZC4gIEJ1dCBvbiBsYXRlciBwYXNzZXMsIGhlYXBUdXBsZQotCQkgKiB3aWxsIGluaXRpYWxs eSBiZSBwb2ludGluZyB0byB0aGUgdHVwbGUgd2UgcmV0dXJuZWQgbGFzdCB0aW1lLgotCQkgKiBS ZXR1cm5pbmcgaXQgYWdhaW4gd291bGQgYmUgaW5jb3JyZWN0IChhbmQgd291bGQgbG9vcCBmb3Jl dmVyKSwgc28KLQkJICogd2Ugc2tpcCBpdCBhbmQgcmV0dXJuIHRoZSBuZXh0IG1hdGNoIHdlIGZp bmQuCi0JCSAqLwotCQlpZiAoIXNraXApCi0JCXsKLQkJCS8qIElmIGl0J3MgdmlzaWJsZSBwZXIg dGhlIHNuYXBzaG90LCB3ZSBtdXN0IHJldHVybiBpdCAqLwotCQkJdmFsaWQgPSBIZWFwVHVwbGVT YXRpc2ZpZXNWaXNpYmlsaXR5KGhlYXBUdXBsZSwgc25hcHNob3QsIGJ1ZmZlcik7Ci0JCQlIZWFw Q2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdE91dCh2YWxpZCwgcmVsYXRpb24sIGhlYXBUdXBs ZSwKLQkJCQkJCQkJCQkJCWJ1ZmZlciwgc25hcHNob3QpOwotCi0JCQlpZiAodmFsaWQpCi0JCQl7 Ci0JCQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIodGlkLCBvZmZudW0pOwotCQkJCVByZWRp Y2F0ZUxvY2tUSUQocmVsYXRpb24sICZoZWFwVHVwbGUtPnRfc2VsZiwgc25hcHNob3QsCi0JCQkJ CQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRYbWluKGhlYXBUdXBsZS0+dF9kYXRhKSk7Ci0JCQkJaWYg KGFsbF9kZWFkKQotCQkJCQkqYWxsX2RlYWQgPSBmYWxzZTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CX0KLQkJfQotCQlza2lwID0gZmFsc2U7Ci0KLQkJLyoKLQkJICogSWYgd2UgY2FuJ3Qgc2VlIGl0 LCBtYXliZSBubyBvbmUgZWxzZSBjYW4gZWl0aGVyLiAgQXQgY2FsbGVyCi0JCSAqIHJlcXVlc3Qs IGNoZWNrIHdoZXRoZXIgYWxsIGNoYWluIG1lbWJlcnMgYXJlIGRlYWQgdG8gYWxsCi0JCSAqIHRy YW5zYWN0aW9ucy4KLQkJICoKLQkJICogTm90ZTogaWYgeW91IGNoYW5nZSB0aGUgY3JpdGVyaW9u IGhlcmUgZm9yIHdoYXQgaXMgImRlYWQiLCBmaXggdGhlCi0JCSAqIHBsYW5uZXIncyBnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlKCkgZnVuY3Rpb24gdG8gbWF0Y2guCi0JCSAqLwotCQlpZiAoYWxs X2RlYWQgJiYgKmFsbF9kZWFkKQotCQl7Ci0JCQlpZiAoIXZpc3Rlc3QpCi0JCQkJdmlzdGVzdCA9 IEdsb2JhbFZpc1Rlc3RGb3IocmVsYXRpb24pOwotCi0JCQlpZiAoIUhlYXBUdXBsZUlzU3VyZWx5 RGVhZChoZWFwVHVwbGUsIHZpc3Rlc3QpKQotCQkJCSphbGxfZGVhZCA9IGZhbHNlOwotCQl9Ci0K LQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIEhPVCBjaGFpbiBjb250aW51ZXMgcGFzdCB0aGlz IHR1cGxlOyBpZiBzbyBmZXRjaAotCQkgKiB0aGUgbmV4dCBvZmZudW0gYW5kIGxvb3AgYXJvdW5k LgotCQkgKi8KLQkJaWYgKEhlYXBUdXBsZUlzSG90VXBkYXRlZChoZWFwVHVwbGUpKQotCQl7Ci0J CQlBc3NlcnQoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRf Y3RpZCkgPT0KLQkJCQkgICBibGtubyk7Ci0JCQlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNl dE51bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRfY3RpZCk7Ci0JCQlhdF9jaGFpbl9zdGFydCA9 IGZhbHNlOwotCQkJcHJldl94bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKGhlYXBU dXBsZS0+dF9kYXRhKTsKLQkJfQotCQllbHNlCi0JCQlicmVhazsJCQkJLyogZW5kIG9mIGNoYWlu ICovCi0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICoJaGVhcF9nZXRfbGF0ZXN0X3Rp ZCAtICBnZXQgdGhlIGxhdGVzdCB0aWQgb2YgYSBzcGVjaWZpZWQgdHVwbGUKICAqCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBkYzdkYjU4ODUuLjA3ZjA3MTg4 ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC03NSwxMTcg Kzc1LDYgQEAgaGVhcGFtX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKQogfQogCiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0K LSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0YXRpYyBJbmRleEZldGNoVGFibGVEYXRhICoK LWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKLXsK LQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhl YXBEYXRhKTsKLQotCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfYmFzZS5m bGFncyA9IGZsYWdzOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQloc2Nhbi0+ eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCi0JcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsK LX0KLQotc3RhdGljIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW47Ci0KLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp Ci0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYg PSBJbnZhbGlkQnVmZmVyOwotCX0KLQotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7Ci0JCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQotewotCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0KLQlo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7Ci0KLQlwZnJlZShoc2Nhbik7Ci19Ci0KLXN0 YXRpYyBib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmhlYXBf Y29udGludWUsIGJvb2wgKmFsbF9kZWFkKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVTbG90 ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKLQlib29sCQlnb3Rf aGVhcF90dXBsZTsKLQotCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwotCi0JLyog V2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhP VCBjaGFpbi4gKi8KLQlpZiAoISpoZWFwX2NvbnRpbnVlKQotCXsKLQkJLyogU3dpdGNoIHRvIGNv cnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXBy ZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7Ci0KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKLQotCQkv KgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhp cyBwYWdlCi0JCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFw X3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJ CQkJCSZoc2Nhbi0+eHNfdm1idWZmZXIsCi0JCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYg U09fSElOVF9SRUxfUkVBRF9PTkxZKTsKLQl9Ci0KLQkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KLQlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAot CQkJCQkJCQkJCQloc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJc25hcHNob3QsCi0JCQkJCQkJ CQkJCSZic2xvdC0+YmFzZS50dXBkYXRhLAotCQkJCQkJCQkJCQlhbGxfZGVhZCwKLQkJCQkJCQkJ CQkJISpoZWFwX2NvbnRpbnVlKTsKLQlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7 Ci0JTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCWlm IChnb3RfaGVhcF90dXBsZSkKLQl7Ci0JCS8qCi0JCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFw c2hvdCBjYW4gbW9yZSB0aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAotCQkgKiBjaGFpbiBiZSB2 aXNpYmxlLgotCQkgKi8KLQkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNu YXBzaG90KTsKLQotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4t PnJlbCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwg c2xvdCwgaHNjYW4tPnhzX2NidWYpOwotCX0KLQllbHNlCi0JewotCQkvKiBXZSd2ZSByZWFjaGVk IHRoZSBlbmQgb2YgdGhlIEhPVCBjaGFpbi4gKi8KLQkJKmhlYXBfY29udGludWUgPSBmYWxzZTsK LQl9Ci0KLQlyZXR1cm4gZ290X2hlYXBfdHVwbGU7Ci19Ci0KLQogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFs IHR1cGxlcyBmb3IgaGVhcCBBTQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5jMzZiODA0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGhlYXBhbV9pbmRleHNjYW4uYworICoJICBoZWFwIHRhYmxlIHBsYWluIGlu ZGV4IHNjYW4gYW5kIGluZGV4LW9ubHkgc2NhbiBjb2RlCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgi CisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9y IGhlYXAgQU0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK0luZGV4RmV0Y2hUYWJsZURhdGEg KgoraGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQor eworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNo SGVhcERhdGEpOworCisJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOworCWhzY2FuLT54c19iYXNl LmZsYWdzID0gZmxhZ3M7CisJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisKKwlyZXR1cm4gJmhzY2FuLT54c19iYXNl OworfQorCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFw RGF0YSAqKSBzY2FuOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCXsK KwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisJCWhzY2FuLT54c19jYnVmID0gSW52 YWxpZEJ1ZmZlcjsKKwl9CisKKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIp KQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOworCQloc2Nhbi0+eHNf dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwordm9pZAoraGVhcGFtX2luZGV4X2Zl dGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoreworCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CisKKwloZWFwYW1faW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbik7CisKKwlwZnJlZShoc2Nhbik7Cit9CisKKy8qCisgKgloZWFwX2hv dF9zZWFyY2hfYnVmZmVyCS0gc2VhcmNoIEhPVCBjaGFpbiBmb3IgdHVwbGUgc2F0aXNmeWluZyBz bmFwc2hvdAorICoKKyAqIE9uIGVudHJ5LCAqdGlkIGlzIHRoZSBUSUQgb2YgYSB0dXBsZSAoZWl0 aGVyIGEgc2ltcGxlIHR1cGxlLCBvciB0aGUgcm9vdAorICogb2YgYSBIT1QgY2hhaW4pLCBhbmQg YnVmZmVyIGlzIHRoZSBidWZmZXIgaG9sZGluZyB0aGlzIHR1cGxlLiAgV2Ugc2VhcmNoCisgKiBm b3IgdGhlIGZpcnN0IGNoYWluIG1lbWJlciBzYXRpc2Z5aW5nIHRoZSBnaXZlbiBzbmFwc2hvdC4g IElmIG9uZSBpcworICogZm91bmQsIHdlIHVwZGF0ZSAqdGlkIHRvIHJlZmVyZW5jZSB0aGF0IHR1 cGxlJ3Mgb2Zmc2V0IG51bWJlciwgYW5kCisgKiByZXR1cm4gdHJ1ZS4gIElmIG5vIG1hdGNoLCBy ZXR1cm4gZmFsc2Ugd2l0aG91dCBtb2RpZnlpbmcgKnRpZC4KKyAqCisgKiBoZWFwVHVwbGUgaXMg YSBjYWxsZXItc3VwcGxpZWQgYnVmZmVyLiAgV2hlbiBhIG1hdGNoIGlzIGZvdW5kLCB3ZSByZXR1 cm4KKyAqIHRoZSB0dXBsZSBoZXJlLCBpbiBhZGRpdGlvbiB0byB1cGRhdGluZyAqdGlkLiAgSWYg bm8gbWF0Y2ggaXMgZm91bmQsIHRoZQorICogY29udGVudHMgb2YgdGhpcyBidWZmZXIgb24gcmV0 dXJuIGFyZSB1bmRlZmluZWQuCisgKgorICogSWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHdlIGNo ZWNrIG5vbi12aXNpYmxlIHR1cGxlcyB0byBzZWUgaWYgdGhleSBhcmUKKyAqIGdsb2JhbGx5IGRl YWQ7ICphbGxfZGVhZCBpcyBzZXQgdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGUgSE9UIGNoYWlu CisgKiBhcmUgdmFjdXVtYWJsZSwgZmFsc2UgaWYgbm90LgorICoKKyAqIFVubGlrZSBoZWFwX2Zl dGNoLCB0aGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIHBpbiBhbmQgKGF0IGxlYXN0KSBzaGFy ZQorICogbG9jayBvbiB0aGUgYnVmZmVyOyBpdCBpcyBzdGlsbCBwaW5uZWQvbG9ja2VkIGF0IGV4 aXQuCisgKi8KK2Jvb2wKK2hlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBS ZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKKwkJCQkJICAgU25hcHNob3Qgc25hcHNo b3QsIEhlYXBUdXBsZSBoZWFwVHVwbGUsCisJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZp cnN0X2NhbGwpCit7CisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlUcmFu c2FjdGlvbklkIHByZXZfeG1heCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUJsb2NrTnVtYmVy IGJsa25vOworCU9mZnNldE51bWJlciBvZmZudW07CisJYm9vbAkJYXRfY2hhaW5fc3RhcnQ7CisJ Ym9vbAkJdmFsaWQ7CisJYm9vbAkJc2tpcDsKKwlHbG9iYWxWaXNTdGF0ZSAqdmlzdGVzdCA9IE5V TEw7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgY2FsbCwgcHJldmlvdXMgY2FsbCBy ZXR1cm5lZCBhIChsaXZlISkgdHVwbGUgKi8KKwlpZiAoYWxsX2RlYWQpCisJCSphbGxfZGVhZCA9 IGZpcnN0X2NhbGw7CisKKwlibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsK KwlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcih0aWQpOworCWF0X2NoYWluX3N0 YXJ0ID0gZmlyc3RfY2FsbDsKKwlza2lwID0gIWZpcnN0X2NhbGw7CisKKwkvKiBYWFg6IHdlIHNo b3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwlBc3NlcnQoQnVmZmVy R2V0QmxvY2tOdW1iZXIoYnVmZmVyKSA9PSBibGtubyk7CisKKwkvKiBTY2FuIHRocm91Z2ggcG9z c2libGUgbXVsdGlwbGUgbWVtYmVycyBvZiBIT1QtY2hhaW4gKi8KKwlmb3IgKDs7KQorCXsKKwkJ SXRlbUlkCQlscDsKKworCQkvKiBjaGVjayBmb3IgYm9ndXMgVElEICovCisJCWlmIChvZmZudW0g PCBGaXJzdE9mZnNldE51bWJlciB8fCBvZmZudW0gPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpKQorCQkJYnJlYWs7CisKKwkJbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisK KwkJLyogY2hlY2sgZm9yIHVudXNlZCwgZGVhZCwgb3IgcmVkaXJlY3RlZCBpdGVtcyAqLworCQlp ZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKKwkJeworCQkJLyogV2Ugc2hvdWxkIG9ubHkgc2VlIGEg cmVkaXJlY3QgYXQgc3RhcnQgb2YgY2hhaW4gKi8KKwkJCWlmIChJdGVtSWRJc1JlZGlyZWN0ZWQo bHApICYmIGF0X2NoYWluX3N0YXJ0KQorCQkJeworCQkJCS8qIEZvbGxvdyB0aGUgcmVkaXJlY3Qg Ki8KKwkJCQlvZmZudW0gPSBJdGVtSWRHZXRSZWRpcmVjdChscCk7CisJCQkJYXRfY2hhaW5fc3Rh cnQgPSBmYWxzZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGVsc2UgbXVzdCBiZSBlbmQg b2YgY2hhaW4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIGhlYXBUdXBs ZSB0byBwb2ludCB0byB0aGUgZWxlbWVudCBvZiB0aGUgSE9UIGNoYWluIHdlJ3JlCisJCSAqIGN1 cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIYXZpbmcgdF9zZWxmIHNldCBjb3JyZWN0bHkgaXMgaW1w b3J0YW50CisJCSAqIGJlY2F1c2UgdGhlIFNTSSBjaGVja3MgYW5kIHRoZSAqU2F0aXNmaWVzIHJv dXRpbmUgZm9yIGhpc3RvcmljYWwKKwkJICogTVZDQyBzbmFwc2hvdHMgbmVlZCB0aGUgY29ycmVj dCB0aWQgdG8gZGVjaWRlIGFib3V0IHRoZSB2aXNpYmlsaXR5LgorCQkgKi8KKwkJaGVhcFR1cGxl LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJCWhl YXBUdXBsZS0+dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCQloZWFwVHVwbGUtPnRfdGFi bGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwkJSXRlbVBvaW50ZXJTZXQoJmhl YXBUdXBsZS0+dF9zZWxmLCBibGtubywgb2ZmbnVtKTsKKworCQkvKgorCQkgKiBTaG91bGRuJ3Qg c2VlIGEgSEVBUF9PTkxZIHR1cGxlIGF0IGNoYWluIHN0YXJ0LgorCQkgKi8KKwkJaWYgKGF0X2No YWluX3N0YXJ0ICYmIEhlYXBUdXBsZUlzSGVhcE9ubHkoaGVhcFR1cGxlKSkKKwkJCWJyZWFrOwor CisJCS8qCisJCSAqIFRoZSB4bWluIHNob3VsZCBtYXRjaCB0aGUgcHJldmlvdXMgeG1heCB2YWx1 ZSwgZWxzZSBjaGFpbiBpcworCQkgKiBicm9rZW4uCisJCSAqLworCQlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQocHJldl94bWF4KSAmJgorCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMocHJldl94bWF4 LAorCQkJCQkJCQkgSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihoZWFwVHVwbGUtPnRfZGF0YSkpKQor CQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2hlbiBmaXJzdF9jYWxsIGlzIHRydWUgKGFuZCB0aHVz LCBza2lwIGlzIGluaXRpYWxseSBmYWxzZSkgd2UnbGwKKwkJICogcmV0dXJuIHRoZSBmaXJzdCB0 dXBsZSB3ZSBmaW5kLiAgQnV0IG9uIGxhdGVyIHBhc3NlcywgaGVhcFR1cGxlCisJCSAqIHdpbGwg aW5pdGlhbGx5IGJlIHBvaW50aW5nIHRvIHRoZSB0dXBsZSB3ZSByZXR1cm5lZCBsYXN0IHRpbWUu CisJCSAqIFJldHVybmluZyBpdCBhZ2FpbiB3b3VsZCBiZSBpbmNvcnJlY3QgKGFuZCB3b3VsZCBs b29wIGZvcmV2ZXIpLCBzbworCQkgKiB3ZSBza2lwIGl0IGFuZCByZXR1cm4gdGhlIG5leHQgbWF0 Y2ggd2UgZmluZC4KKwkJICovCisJCWlmICghc2tpcCkKKwkJeworCQkJLyogSWYgaXQncyB2aXNp YmxlIHBlciB0aGUgc25hcHNob3QsIHdlIG11c3QgcmV0dXJuIGl0ICovCisJCQl2YWxpZCA9IEhl YXBUdXBsZVNhdGlzZmllc1Zpc2liaWxpdHkoaGVhcFR1cGxlLCBzbmFwc2hvdCwgYnVmZmVyKTsK KwkJCUhlYXBDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZsaWN0T3V0KHZhbGlkLCByZWxhdGlvbiwg aGVhcFR1cGxlLAorCQkJCQkJCQkJCQkJYnVmZmVyLCBzbmFwc2hvdCk7CisKKwkJCWlmICh2YWxp ZCkKKwkJCXsKKwkJCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcih0aWQsIG9mZm51bSk7CisJ CQkJUHJlZGljYXRlTG9ja1RJRChyZWxhdGlvbiwgJmhlYXBUdXBsZS0+dF9zZWxmLCBzbmFwc2hv dCwKKwkJCQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKTsK KwkJCQlpZiAoYWxsX2RlYWQpCisJCQkJCSphbGxfZGVhZCA9IGZhbHNlOworCQkJCXJldHVybiB0 cnVlOworCQkJfQorCQl9CisJCXNraXAgPSBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB3ZSBjYW4n dCBzZWUgaXQsIG1heWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKKwkJICog cmVxdWVzdCwgY2hlY2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBhbGwK KwkJICogdHJhbnNhY3Rpb25zLgorCQkgKgorCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBj cml0ZXJpb24gaGVyZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKKwkJICogcGxhbm5lcidz IGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KKwkJICovCisJ CWlmIChhbGxfZGVhZCAmJiAqYWxsX2RlYWQpCisJCXsKKwkJCWlmICghdmlzdGVzdCkKKwkJCQl2 aXN0ZXN0ID0gR2xvYmFsVmlzVGVzdEZvcihyZWxhdGlvbik7CisKKwkJCWlmICghSGVhcFR1cGxl SXNTdXJlbHlEZWFkKGhlYXBUdXBsZSwgdmlzdGVzdCkpCisJCQkJKmFsbF9kZWFkID0gZmFsc2U7 CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB0byBzZWUgaWYgSE9UIGNoYWluIGNvbnRpbnVlcyBw YXN0IHRoaXMgdHVwbGU7IGlmIHNvIGZldGNoCisJCSAqIHRoZSBuZXh0IG9mZm51bSBhbmQgbG9v cCBhcm91bmQuCisJCSAqLworCQlpZiAoSGVhcFR1cGxlSXNIb3RVcGRhdGVkKGhlYXBUdXBsZSkp CisJCXsKKwkJCUFzc2VydChJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZoZWFwVHVwbGUtPnRf ZGF0YS0+dF9jdGlkKSA9PQorCQkJCSAgIGJsa25vKTsKKwkJCW9mZm51bSA9IEl0ZW1Qb2ludGVy R2V0T2Zmc2V0TnVtYmVyKCZoZWFwVHVwbGUtPnRfZGF0YS0+dF9jdGlkKTsKKwkJCWF0X2NoYWlu X3N0YXJ0ID0gZmFsc2U7CisJCQlwcmV2X3htYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRVcGRhdGVY aWQoaGVhcFR1cGxlLT50X2RhdGEpOworCQl9CisJCWVsc2UKKwkJCWJyZWFrOwkJCQkvKiBlbmQg b2YgY2hhaW4gKi8KKworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbAoraGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAorCQkJCQkJ IEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxf ZGVhZCkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0 YSAqKSBzY2FuOworCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVh cFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CisJYm9vbAkJZ290X2hlYXBfdHVwbGU7CisKKwlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKworCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCisJaWYgKCEq aGVhcF9jb250aW51ZSkKKwl7CisJCS8qIFN3aXRjaCB0byBjb3JyZWN0IGJ1ZmZlciBpZiB3ZSBk b24ndCBoYXZlIGl0IGFscmVhZHkgKi8KKwkJQnVmZmVyCQlwcmV2X2J1ZiA9IGhzY2FuLT54c19j YnVmOworCisJCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhz X2NidWYsCisJCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwkJLyoKKwkJICogUHJ1bmUgcGFnZSwg YnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9uIHRoaXMgcGFnZQorCQkgKi8KKwkJaWYg KHByZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQorCQkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nh bi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmLAorCQkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVm ZmVyLAorCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5mbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05M WSk7CisJfQorCisJLyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4g ZXhhbWluZSB2aXNpYmlsaXR5ICovCisJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVS X0xPQ0tfU0hBUkUpOworCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0 aWQsCisJCQkJCQkJCQkJCWhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJCQkJaHNjYW4tPnhz X2NidWYsCisJCQkJCQkJCQkJCXNuYXBzaG90LAorCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVw ZGF0YSwKKwkJCQkJCQkJCQkJYWxsX2RlYWQsCisJCQkJCQkJCQkJCSEqaGVhcF9jb250aW51ZSk7 CisJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOworCUxvY2tCdWZmZXIoaHNjYW4t PnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZ290X2hlYXBfdHVwbGUpCisJ eworCQkvKgorCQkgKiBPbmx5IGluIGEgbm9uLU1WQ0Mgc25hcHNob3QgY2FuIG1vcmUgdGhhbiBv bmUgbWVtYmVyIG9mIHRoZSBIT1QKKwkJICogY2hhaW4gYmUgdmlzaWJsZS4KKwkJICovCisJCSpo ZWFwX2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJc2xvdC0+ dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOworCQlFeGVjU3RvcmVC dWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVm KTsKKwl9CisJZWxzZQorCXsKKwkJLyogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBIT1Qg Y2hhaW4uICovCisJCSpoZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGdvdF9o ZWFwX3R1cGxlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9tZXNvbi5idWlsZAppbmRleCA5MmFiOGJl M2QuLjAwZWMwN2Q3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24u YnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVpbGQKQEAgLTMsNiAr Myw3IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdoZWFwYW0uYycsCiAgICdoZWFw YW1faGFuZGxlci5jJywKKyAgJ2hlYXBhbV9pbmRleHNjYW4uYycsCiAgICdoZWFwYW1fdmlzaWJp bGl0eS5jJywKICAgJ2hlYXBhbV94bG9nLmMnLAogICAnaGVhcHRvYXN0LmMnLAotLSAKMi41My4w Cgo= --000000000000d73dc2064e9ab4fb Content-Type: application/octet-stream; name="v22-0003-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v22-0003-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnjtbg8u13 RnJvbSBhYjdiMjI0ZmVjY2E3NDUyMzBhYWI0Njg0MzJiODFmYTZiNjAwOWY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAwMy8xNV0g QWRkIHNsb3QtYmFzZWQgdGFibGUgQU0gaW5kZXggc2NhbiBpbnRlcmZhY2UuCgpBZGQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90LCBhIG5ldyB0YWJsZSBBTSBjYWxsYmFjayB0aGF0IHdyYXBzIGJv dGgKcGxhaW4gYW5kIGluZGV4LW9ubHkgaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4g IFR3byBuZXcKVGFibGVBbVJvdXRpbmUgY2FsbGJhY2tzIGFyZSBpbnRyb2R1Y2VkIC0tIG9uZSBm b3IgcGxhaW4gc2NhbnMgYW5kIG9uZQpmb3IgaW5kZXgtb25seSBzY2FucyAtLSB3aGljaCBhbiB1 cGNvbWluZyBjb21taXQgdGhhdCBhZGRzIHRoZQphbWdldGJhdGNoIGludGVyZmFjZSB3aWxsIGV4 cGFuZCB0byBmb3VyLiAgVGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIGlzCnJlc29sdmVkIG9uY2Ug aW4gaW5kZXhfYmVnaW5zY2FuLCBhbmQgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVy Cih4c19nZXRuZXh0X3Nsb3QpIG9uIHRoZSBJbmRleFNjYW5EZXNjIHdoZW4gdGhlIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdApzaGltIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4ZWN1dG9yIG5v ZGVzLgoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9ubHkgc2NhbnMgb3V0IG9mIHRo ZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJhdGNoaW5nIG9mIHZpc2liaWxp dHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRpbnVlIHRvIGp1c3QgcGVyZm9y bSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hlciBsZXZlbApzbG90LWJhc2Vk IGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywgd2hpY2gg bm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxpdHkgbWFwIGRpcmVjdGx5LiAg TW9yZSBpbXBvcnRhbnRseSwKdGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgaW1w cm92ZW1lbnQ6IHRhYmxlIEFNcyBjYW4gbm93CmltcGxlbWVudCBpbmRleC1vbmx5IHNjYW5zIHRo YXQgYXJlIG5vdCB0aWVkIHRvIGhlYXBhbSdzIHZpc2liaWxpdHkgbWFwLgoKQSBzbWFsbCBtaW5v cml0eSBvZiBjYWxsZXJzICgyIGNhbGxlcnMgaW4gdG90YWwpIGZ1bmRhbWVudGFsbHkgbmVlZCB0 bwpwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBBTSAoYm90aCBwZXJmb3JtIGNvbnN0cmFpbnQgZW5m b3JjZW1lbnQpLiAgVGhlc2UKY2FsbGVycyBkb24ndCBhY3R1YWxseSBwZXJmb3JtIGluZGV4IHNj YW5zIChldmVuIGlmIHRoZWlyIFRJRHMgYXJlIHRha2VuCmZyb20gYW4gaW5kZXgpLCBhbmQgaGF2 ZSBubyBuZWVkIGZvciBtb3N0IG9mIHRoZSBpbmRleCBzY2FuIG1hY2hpbmVyeS4KU3dpdGNoIHRo ZXNlIGNhbGxlcnMgb3ZlciB0byB0aGUgbmV3IGZldGNoX3RpZCBpbnRlcmZhY2UgKHdoaWNoIHJl cGxhY2VzCnRoZSBwcmV2aW91cyBUSUQtYmFzZWQgaW5kZXhfZmV0Y2hfdHVwbGUgaW50ZXJmYWNl KS4gIEFsbCBpbmRleCBzY2FuCmNhbGxlcnMgbm93IHVzZSB0aGUgbmV3IHNsb3QtYmFzZWQgaW50 ZXJmYWNlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QpLgoKSW5kZXgtb25seSBzY2FuIGNhbGxl cnMgcGFzcyB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgYSBUdXBsZVRhYmxlU2xvdAood2hpY2gg dGhlIHRhYmxlIEFNIG5lZWRzIGludGVybmFsbHkgZm9yIGhlYXAgZmV0Y2hlcyksIGJ1dCBjb250 aW51ZSB0bwpyZWFkIHRoZWlyIHJlc3VsdHMgZnJvbSBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMg c3VjaCBhcyB4c19pdHVwIChyYXRoZXIKdGhhbiBmcm9tIHRoZSBzbG90IGl0c2VsZikuICBBbGwg Y2FsbGVycyBjYW4gY29udGludWUgdG8gcmVseSBvbiB0aGUKc2NhbiBkZXNjcmlwdG9yJ3MgeHNf aGVhcHRpZCBmaWVsZCBiZWluZyBzZXQgb24gZWFjaCBjYWxsLgoKVGhlIFZJU0lURURfUEFHRVNf TElNSVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpjYXAg c2NhbiBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3VnaCBh IG5ldyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0KSwg cmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGluZyB0 aGUgc2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBiZWNh dXNlIGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwpsb25n ZXIgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hlZCBi eSB0aGUgdGFibGUKQU0uICBTaW1pbGFybHksIG5vZGVJbmRleG9ubHlzY2FuLmMgY2FuIG5vIGxv bmdlciB1c2UgSW5zdHJDb3VudFR1cGxlczIKdG8gY291bnQgaGVhcCBmZXRjaGVzIGR1cmluZyBh biBFWFBMQUlOIEFOQUxZWkUuICBJbnN0ZWFkIGl0IHJlbGllcyBvbgpoZWFwYW0gbWFpbnRhaW5p bmcgYSBuZXcgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uLm50YWJsZWZldGNoZXMgZmllbGQuCgpU aG91Z2ggaW5kZXBlbmRlbnRseSB1c2VmdWwsIHRoaXMgY29tbWl0IGlzIHByZXBhcmF0b3J5IHdv cmsgZm9yIGFuCnVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGFuIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlLCB3aGVyZQp0aGUgdGFibGUgQU0gdGFrZXMgZnVsbCByZXNwb25zaWJp bGl0eSBmb3IgbWFuYWdpbmcgdGhlIHByb2dyZXNzIG9mCmluZGV4IHNjYW5zLiAgVGhhdCB3aWxs IG1vdmUgbW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2Nyb2xsYWJsZQpjdXJzb3JzIG91 dCBvZiBpbmRleCBBTXMgYW5kIGludG8gdGFibGUgQU1zLCBtYWtpbmcgaXQgZXNzZW50aWFsIHRo YXQKZXhlY3V0b3Igbm9kZXMgcGFzcyB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiBkb3duIHRv IHRoZSB0YWJsZSBBTS4KClRoZSBoZWFwYW0gaW1wbGVtZW50YXRpb25zIG1ha2UgYWdncmVzc2l2 ZSB1c2Ugb2YgZm9yY2VkIGlubGluaW5nIHRvCmVuc3VyZSB0aGF0IHBsYWluIGFuZCBpbmRleC1v bmx5IGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHNwZWNpYWxpemVkIGF0CmNvbXBpbGUgdGltZSBkZXNw aXRlIHNoYXJpbmcgYSBjb21tb24gaW1wbGVtZW50YXRpb24uICBUZXN0aW5nIGhhcyBzaG93bgp0 aGlzIGlzIG5lY2Vzc2FyeSB0byBrZWVwIGljYWNoZSBtaXNzZXMgdG8gYSBtaW5pbXVtLCBhdCBs ZWFzdCB3aXRoIHRoZQp0d28gdXBjb21pbmcgYW1nZXRiYXRjaCB2YXJpYW50cy4KCkF1dGhvcjog UGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8 YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25k cmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xem1ZcWhhY0JIMTYx cGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICB8ICAzNCArKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8IDIwOCArKysrKysrKystLS0tLS0KIHNyYy9p bmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oICAgICB8ICAgMyArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgfCAyOTQgKysrKysrKysrKysrKysrKysrKy0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgICAgfCAgMjcgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgIHwgMjA5ICsrKysrLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyAgICAgIHwgIDEwICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvY29uc3RyYWludC5jICAgICAgICAgIHwgIDI4ICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFw SW5kZXhzY2FuLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYyAgIHwgMTA5ICstLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAg ICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAg IHwgIDYxICstLS0tCiAyMyBmaWxlcyBjaGFuZ2VkLCA2MDcgaW5zZXJ0aW9ucygrKSwgNTA2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggYjY5MzIwYTdmLi5kYjYyZTBjYTEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCkBAIC0xNTYsNiArMTU2LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2Ns ZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCQkJCQkJ IFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCkBAIC0xODMs MTUgKzE4NCwxMyBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhy ZWwsCisJCQkJCQkJCQkJCSAgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNj YW4sCiAJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRl eF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNj IHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaAppbmRleCBjYzkwYzgyMWIuLjk1MGM0NGVjMiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0u aApAQCAtMTI3LDggKzEyNyw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQog CSAqLwogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAotCS8qIEN1cnJlbnQgaGVhcCBibG9jaydzIGNvcnJl c3BvbmRpbmcgcGFnZSBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgKi8KLQlCdWZmZXIJCXhzX3ZtYnVm ZmVyOworCS8qIEZvciB2aXNpYmlsaXR5IG1hcCBjaGVja3MgKGluZGV4LW9ubHkgc2NhbnMgYW5k IG9uLWFjY2VzcyBwcnVuaW5nKSAqLworCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZpc2liaWxp dHkgbWFwIGJ1ZmZlciAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qIFJlc3VsdCBjb2Rl cyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCkBAIC00MjksMTYgKzQyOSwxNSBAQCBl eHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRpb24gcmVs LAogCQkJCQkJCQkJCQkgIFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKIAogLyogaW4gaGVh cC9oZWFwYW1faW5kZXhzY2FuLmMgKi8KLWV4dGVybiBJbmRleEZldGNoVGFibGVEYXRhICpoZWFw YW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpOwotZXh0ZXJu IHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4p OwotZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuKTsKK2V4dGVybiBJbmRleEZldGNoVGFibGVEYXRhICpoZWFwYW1faW5kZXhfZmV0Y2hf YmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsK K2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4p OworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4p OwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJl bGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFw c2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJCQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJv b2wgZmlyc3RfY2FsbCk7Ci1leHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlk LCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9v bCAqaGVhcF9jb250aW51ZSwKLQkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CitleHRlcm4gYm9v bCBoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFwc2hv dCBzbmFwc2hvdCwKKwkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9kZWFk KTsKIAogLyogaW4gaGVhcC9wcnVuZWhlYXAuYyAqLwogZXh0ZXJuIHZvaWQgaGVhcF9wYWdlX3By dW5lX29wdChSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o CmluZGV4IDk2MGFiZjZjMi4uOTg2YjRmNWYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE2LDYg KzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJh Y2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMv dGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9yZWxmaWxlbG9jYXRvci5oIgpAQCAtMjQsNiArMjUsNyBAQAogCiAKIHN0cnVjdCBQYXJhbGxl bFRhYmxlU2NhbkRlc2NEYXRhOworc3RydWN0IFR1cGxlVGFibGVTbG90OwogCiAvKgogICogR2Vu ZXJpYyBkZXNjcmlwdG9yIGZvciB0YWJsZSBzY2Fucy4gVGhpcyBpcyB0aGUgYmFzZS1jbGFzcyBm b3IgdGFibGUgc2NhbnMsCkBAIC0xMTcsMTIgKzExOSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJh bGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2Nhbldvcmtl cjsKIC8qCiAgKiBCYXNlIGNsYXNzIGZvciBmZXRjaGVzIGZyb20gYSB0YWJsZSB2aWEgYW4gaW5k ZXguIFRoaXMgaXMgdGhlIGJhc2UtY2xhc3MKICAqIGZvciBzdWNoIHNjYW5zLCB3aGljaCBuZWVk cyB0byBiZSBlbWJlZGRlZCBpbiB0aGUgcmVzcGVjdGl2ZSBzdHJ1Y3QgZm9yCi0gKiBpbmRpdmlk dWFsIEFNcy4KKyAqIGluZGl2aWR1YWwgdGFibGUgQU1zLgorICoKKyAqIFRoaXMgaXMgZXNzZW50 aWFsbHkgdGhlIHRhYmxlIEFNIHNwZWNpZmljIHBvcnRpb24gb2YgSW5kZXhTY2FuRGVzY0RhdGEs CisgKiBhY2Nlc3NlZCB0aHJvdWdoIGl0cyB4c19oZWFwZmV0Y2ggZmllbGQuCiAgKi8KIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKLQlSZWxhdGlvbglyZWw7Ci0KIAkvKgog CSAqIEJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHRoZSByZWxhdGlvbi4gTm8gU09f SU5URVJOQUxfRkxBR1MgYXJlCiAJICogcGVybWl0dGVkLgpAQCAtMTY2LDEwICsxNjksMTAgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4s IGEgc3VjY2Vzc2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0 dXAgKGFuZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHBy b3ZpZGUgdGhlCi0JICogZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJv dGgsIGluIHdoaWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAq IEluIGFuIGluZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdCBjYWxsIG11c3QKKwkgKiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2Mp IG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEg cmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJ ICogdGhlIGhlYXAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0 dXA7CQkvKiBpbmRleCB0dXBsZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NE YXRhICp4c19pdHVwZGVzYzsJLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAg LTE4MSw2ICsxODQsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAkJCQkJ CQkJCSAqIGZ1cnRoZXIgcmVzdWx0cyAqLwogCUluZGV4RmV0Y2hUYWJsZURhdGEgKnhzX2hlYXBm ZXRjaDsKIAorCS8qCisJICogUmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxi YWNrLCB3aGljaCBpcyBzZXQgYnkKKwkgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBhdCB0aGUg c3RhcnQgb2YgYW1nZXR0dXBsZSBzY2FucworCSAqLworCWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90 KSAoc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLAorCQkJCQkJCQkJU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCQlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAJ Ym9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2Vk ICovCiAKIAkvKgpAQCAtMTk0LDYgKzIwNSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5E ZXNjRGF0YQogCWJvb2wJICAgKnhzX29yZGVyYnludWxsczsKIAlib29sCQl4c19yZWNoZWNrb3Jk ZXJieTsKIAorCS8qCisJICogQW4gYXBwcm94aW1hdGUgbGltaXQgb24gdGhlIGFtb3VudCBvZiB3 b3JrLCBtZWFzdXJlZCBpbiBwYWdlcyB0b3VjaGVkLAorCSAqIGltcG9zZWQgb24gdGhlIGluZGV4 IHNjYW4uICBUaGUgZGVmYXVsdCwgMCwgbWVhbnMgbm8gbGltaXQuICBVc2VkIGJ5CisJICogc2Vs ZnVuY3MuYyB0byBib3VuZCB0aGUgY29zdCBvZiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50 KCkuCisJICovCisJdWludDgJCXhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQ7CisKIAkvKiBwYXJhbGxl bCBpbmRleCBzY2FuIGluZm9ybWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBh cmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKnBhcmFsbGVsX3NjYW47CiB9IEluZGV4U2NhbkRlc2NE YXRhOwpAQCAtMjA4LDggKzIyNiw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2Fu RGVzY0RhdGEKIAljaGFyCQlwc19zbmFwc2hvdF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07 CiB9CQkJUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YTsKIAotc3RydWN0IFR1cGxlVGFibGVTbG90 OwotCiAvKiBTdHJ1Y3QgZm9yIHN0b3JhZ2Utb3ItaW5kZXggc2NhbnMgb2Ygc3lzdGVtIHRhYmxl cyAqLwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiB7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApp bmRleCA0NjQ3Nzg1ZmQuLmUwNWMwOWZkYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC0xNyw2ICsx Nyw3IEBACiAjaWZuZGVmIFRBQkxFQU1fSAogI2RlZmluZSBUQUJMRUFNX0gKIAorI2luY2x1ZGUg ImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgpAQCAtNDQyLDYwICs0NDMs NjYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKi8KIAogCS8qCi0JICogUHJl cGFyZSB0byBmZXRjaCB0dXBsZXMgZnJvbSB0aGUgcmVsYXRpb24sIGFzIG5lZWRlZCB3aGVuIGZl dGNoaW5nCi0JICogdHVwbGVzIGZvciBhbiBpbmRleCBzY2FuLiAgVGhlIGNhbGxiYWNrIGhhcyB0 byByZXR1cm4gYW4KLQkgKiBJbmRleEZldGNoVGFibGVEYXRhLCB3aGljaCB0aGUgQU0gd2lsbCB0 eXBpY2FsbHkgZW1iZWQgaW4gYSBsYXJnZXIKLQkgKiBzdHJ1Y3R1cmUgd2l0aCBhZGRpdGlvbmFs IGluZm9ybWF0aW9uLgorCSAqIFByZXBhcmUgdG8gZmV0Y2ggdHVwbGVzLCBhcyBuZWVkZWQgd2hl biBmZXRjaGluZyB0dXBsZXMgZm9yIGFuIGluZGV4CisJICogc2Nhbi4gIFRoZSBjYWxsYmFjayBo YXMgdG8gcmV0dXJuIGFuIEluZGV4RmV0Y2hUYWJsZURhdGEsIHdoaWNoIHRoZSBBTQorCSAqIHdp bGwgdHlwaWNhbGx5IGVtYmVkIGluIGEgbGFyZ2VyIHN0cnVjdHVyZSB3aXRoIGFkZGl0aW9uYWwg aW5mb3JtYXRpb24uCisJICogQSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgc3Rv cmVkIGluIHBhc3NlZCBpbmRleCBzY2FuCisJICogZGVzY3JpcHRvcidzIHhzX2hlYXBmZXRjaCBm aWVsZCBieSB0aGUgY2FsbGVyIChjb3JlIGV4ZWN1dG9yIGNvZGUpLgogCSAqCiAJICogZmxhZ3Mg aXMgYSBiaXRtYXNrIG9mIFNjYW5PcHRpb25zIGFmZmVjdGluZyB1bmRlcmx5aW5nIHRhYmxlIHNj YW4KIAkgKiBiZWhhdmlvci4gU2VlIHNjYW5fYmVnaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBv biBwYXNzaW5nIHRoZXNlLgogCSAqCi0JICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0 aGVuIGJlIGZldGNoZWQgdmlhIGluZGV4X2ZldGNoX3R1cGxlLgorCSAqIENhbGxiYWNrIGlzIHJl c3BvbnNpYmxlIGZvciBzZXR0aW5nIEluZGV4U2NhbkRlc2MueHNfZ2V0bmV4dF9zbG90IHRvCisJ ICogdGhlIGFwcHJvcHJpYXRlIHNsb3QtYmFzZWQgY2FsbGJhY2suICBUdXBsZXMgY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEKKwkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4gIE5vIHNlcGFy YXRlIHNsb3QtYmFzZWQgY2FsbGJhY2sgZXhpc3RzIGluCisJICogdGhpcyBzdHJ1Y3QhCisJICoK KwkgKiBJbiBwcmluY2lwbGUgYSBzaW5nbGUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIChzdG9y ZWQgaGVyZSkgd291bGQKKwkgKiBzdWZmaWNlLCBidXQgdXNpbmcgc3BlY2lhbGl6ZWQgdmFyaWFu dHMgYWxsb3dzIHRoZSB0YWJsZSBBTSB0byBwcm92aWRlCisJICogbWluaW1hbCBjb2RlIGJhc2Vk IG9uIGNvbmRpdGlvbnMgdGhhdCBhcmUgZml4ZWQgZm9yIHRoZSB3aG9sZSBzY2FuIGFzCisJICog YW4gb3B0aW1pemF0aW9uIChlLmcuLCB2YXJpYW50cyBmb3IgcGxhaW4gaW5kZXggc2NhbnMgYW5k IGluZGV4LW9ubHkKKwkgKiBzY2FucywgZWFjaCB3aXRoIGZld2VyIGJyYW5jaGVzKS4KKwkgKgor CSAqIE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBub3QgbmVjZXNzYXJpbHkgdXBkYXRlIGluZGV4ZXMg d2hlbiBpbmRleGVkCisJICogY29sdW1ucyBkbyBub3QgY2hhbmdlLCBuZWVkIHRvIHJldHVybiB0 aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKKwkgKiB0aGUgdHVwbGUgdGhhdCBpcyB2aXNp YmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBvaW50cyB0byBhbgorCSAqIG9s ZGVyIHZlcnNpb24gb2YgdGhlIHR1cGxlLgogCSAqLwotCXN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAoUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpOwor CXN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsKIAogCS8qCi0JICog UmVzZXQgaW5kZXggZmV0Y2guIFR5cGljYWxseSB0aGlzIHdpbGwgcmVsZWFzZSBjcm9zcyBpbmRl eCBmZXRjaAotCSAqIHJlc291cmNlcyBoZWxkIGluIEluZGV4RmV0Y2hUYWJsZURhdGEuCisJICog UmVzZXQgaW5kZXggc2NhbiBmb3IgYSByZXNjYW4uICBSZXNldHMgdGFibGUtb3duZWQgcmVzb3Vy Y2VzLgogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfcmVzZXQpIChzdHJ1Y3QgSW5kZXhGZXRj aFRhYmxlRGF0YSAqZGF0YSk7CisJdm9pZAkJKCppbmRleF9mZXRjaF9yZXNldCkgKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CiAKIAkvKgotCSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRl IGluZGV4IGZldGNoLgorCSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4 IHNjYW4gc3RhdGUuCisJICovCisJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChJbmRleFNjYW5E ZXNjIHNjYW4pOworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogQ2FsbGJhY2tzIGZvciBub24t bW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKKwkgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIAkgKi8KLQl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpkYXRhKTsKIAogCS8qCiAJICogRmV0Y2ggdHVwbGUgYXQgYHRpZGAgaW50byBg c2xvdGAsIGFmdGVyIGRvaW5nIGEgdmlzaWJpbGl0eSB0ZXN0CiAJICogYWNjb3JkaW5nIHRvIGBz bmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2liaWxpdHkK IAkgKiB0ZXN0LCByZXR1cm4gdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgogCSAqCi0JICogTm90ZSB0 aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4 ZWQKLQkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50 L2NvcnJlY3QgdmVyc2lvbiBvZgotCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhl IHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCi0JICogb2xkZXIgdmVyc2lv biBvZiB0aGUgdHVwbGUuCisJICogVGhpcyBpcyBhIGxvd2VyLWxldmVsIGNhbGxiYWNrIGZvciBz aW5nbGUtc2hvdCBUSUQgbG9va3VwcyB1c2VkIGJ5CisJICogY29uc3RyYWludCBlbmZvcmNlbWVu dCBjb2RlICh1bmlxdWUgY2hlY2tzIGFuZCBzaW1pbGFyKS4KIAkgKgotCSAqICpjYWxsX2FnYWlu IGlzIGZhbHNlIG9uIHRoZSBmaXJzdCBjYWxsIHRvIGluZGV4X2ZldGNoX3R1cGxlIGZvciBhIHRp ZC4KLQkgKiBJZiB0aGVyZSBwb3RlbnRpYWxseSBpcyBhbm90aGVyIHR1cGxlIG1hdGNoaW5nIHRo ZSB0aWQsICpjYWxsX2FnYWluCi0JICogbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgYnkgaW5kZXhf ZmV0Y2hfdHVwbGUsIHNpZ25hbGluZyB0byB0aGUgY2FsbGVyCi0JICogdGhhdCBpbmRleF9mZXRj aF90dXBsZSBzaG91bGQgYmUgY2FsbGVkIGFnYWluIGZvciB0aGUgc2FtZSB0aWQuCi0JICoKLQkg KiAqYWxsX2RlYWQsIGlmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCBzaG91bGQgYmUgc2V0IHRvIHRy dWUgYnkKLQkgKiBpbmRleF9mZXRjaF90dXBsZSBpZmYgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5v IGJhY2tlbmQgbmVlZHMgdG8gc2VlCi0JICogdGhhdCB0dXBsZS4gSW5kZXggQU1zIGNhbiB1c2Ug dGhhdCB0byBhdm9pZCByZXR1cm5pbmcgdGhhdCB0aWQgaW4KLQkgKiBmdXR1cmUgc2VhcmNoZXMu Ci0JICovCi0JYm9vbAkJKCppbmRleF9mZXRjaF90dXBsZSkgKHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuLAotCQkJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQkJCQkgIFNu YXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJ CQkJCSAgYm9vbCAqY2FsbF9hZ2FpbiwgYm9vbCAqYWxsX2RlYWQpOwotCi0KLQkvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLQkgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBp bmRpdmlkdWFsIHR1cGxlcwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICphbGxfZGVhZCwgaWYg YWxsX2RlYWQgaXMgbm90IE5VTEwsIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieSBmZXRjaF90aWQK KwkgKiBpZmYgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIGJhY2tlbmQgbmVlZHMgdG8gc2VlIHRo YXQgdHVwbGUuIEluZGV4IEFNcworCSAqIGNhbiB1c2UgdGhhdCB0byBhdm9pZCByZXR1cm5pbmcg dGhhdCB0aWQgaW4gZnV0dXJlIHNlYXJjaGVzLgogCSAqLworCWJvb2wJCSgqZmV0Y2hfdGlkKSAo UmVsYXRpb24gcmVsLAorCQkJCQkJCSAgSXRlbVBvaW50ZXIgdGlkLAorCQkJCQkJCSAgU25hcHNo b3Qgc25hcHNob3QsCisJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkgIGJv b2wgKmFsbF9kZWFkKTsKIAogCS8qCiAJICogRmV0Y2ggdHVwbGUgYXQgYHRpZGAgaW50byBgc2xv dGAsIGFmdGVyIGRvaW5nIGEgdmlzaWJpbGl0eSB0ZXN0CkBAIC0xMjMxLDE1ICsxMjM4LDE4IEBA IHRhYmxlX3BhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUoUmVsYXRpb24gcmVsLCBQYXJhbGxlbFRh YmxlU2NhbkRlc2MgcHNjYW4pCiAKIC8qCiAgKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9t IHRoZSByZWxhdGlvbiwgYXMgbmVlZGVkIHdoZW4gZmV0Y2hpbmcgdHVwbGVzCi0gKiBmb3IgYW4g aW5kZXggc2Nhbi4KKyAqIGZvciBhbiBpbmRleCBzY2FuLiAgQ2FsbGVyIHB1dHMgdGhpcyBpbiB0 aGUgcGFzc2VkIGluZGV4IHNjYW4gZGVzY3JpcHRvcidzCisgKiB4c19oZWFwZmV0Y2ggZmllbGQu CisgKgorICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlh IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCgpLgogICoKICAqIGZsYWdzIGlzIGEgYml0bWFzayBv ZiBTY2FuT3B0aW9ucy4gTm8gU09fSU5URVJOQUxfRkxBR1MgYXJlIHBlcm1pdHRlZC4KLSAqCi0g KiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgdGFibGVf aW5kZXhfZmV0Y2hfdHVwbGUoKS4KICAqLwogc3RhdGljIGlubGluZSBJbmRleEZldGNoVGFibGVE YXRhICoKLXRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdz KQordGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxh Z3MpCiB7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aGVhcFJlbGF0aW9uOworCiAJQXNzZXJ0KChm bGFncyAmIFNPX0lOVEVSTkFMX0ZMQUdTKSA9PSAwKTsKIAogCS8qCkBAIC0xMjUwLDc0ICsxMjYw LDEwMyBAQCB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFn cykKIAlpZiAodW5saWtlbHkoVHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRBbGl2ZSkgJiYg IWJzeXNzY2FuKSkKIAkJZWxvZyhFUlJPUiwgInNjYW4gc3RhcnRlZCBkdXJpbmcgbG9naWNhbCBk ZWNvZGluZyIpOwogCi0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfYmVnaW4o cmVsLCBmbGFncyk7CisJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfYmVnaW4o c2NhbiwgZmxhZ3MpOwogfQogCiAvKgotICogUmVzZXQgaW5kZXggZmV0Y2guIFR5cGljYWxseSB0 aGlzIHdpbGwgcmVsZWFzZSBjcm9zcyBpbmRleCBmZXRjaCByZXNvdXJjZXMKLSAqIGhlbGQgaW4g SW5kZXhGZXRjaFRhYmxlRGF0YS4KKyAqIFJlc2V0IGluZGV4IHNjYW4sIGZvciBhIHJlc2Nhbi4g UmVzZXRzIHRhYmxlLW93bmVkIHJlc291cmNlcy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi10 YWJsZV9pbmRleF9mZXRjaF9yZXNldChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK K3RhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKLQlzY2FuLT5y ZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCUFzc2VydChzY2FuLT54 c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9m ZXRjaF9yZXNldChzY2FuKTsKIH0KIAogLyoKLSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFs bG9jYXRlIGluZGV4IGZldGNoLgorICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUg aW5kZXggZmV0Y2ggaGVsZCBpbiB0aGUgc2NhbidzIHVuZGVybHlpbmcKKyAqIEluZGV4RmV0Y2hU YWJsZURhdGEuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdGFibGVfaW5kZXhfZmV0Y2hfZW5k KHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQordGFibGVfaW5kZXhfZmV0Y2hfZW5k KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKLQlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2Zl dGNoX2VuZChzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCXNjYW4tPmhl YXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCiAvKgot ICogRmV0Y2hlcywgYXMgcGFydCBvZiBhbiBpbmRleCBzY2FuLCB0dXBsZSBhdCBgdGlkYCBpbnRv IGBzbG90YCwgYWZ0ZXIgZG9pbmcKLSAqIGEgdmlzaWJpbGl0eSB0ZXN0IGFjY29yZGluZyB0byBg c25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkCi0gKiB0aGUgdmlzaWJp bGl0eSB0ZXN0LCByZXR1cm5zIHRydWUsIGZhbHNlIG90aGVyd2lzZS4gTm90ZSB0aGF0ICp0aWQg bWF5IGJlCi0gKiBtb2RpZmllZCB3aGVuIHdlIHJldHVybiB0cnVlIChzZWUgbGF0ZXIgcmVtYXJr cyBvbiBtdWx0aXBsZSByb3cgdmVyc2lvbnMKLSAqIHJlYWNoYWJsZSB2aWEgYSBzaW5nbGUgaW5k ZXggZW50cnkpLgorICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGlu dG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKKyAqIHNwZWNpZmllZCBkaXJlY3Rpb24uICBSZXR1 cm5zIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kCisgKiB0aGUg c25hcHNob3Qgd2FzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVk IGluIHRoZQorICogc3BlY2lmaWVkIHNsb3QuCiAgKgotICogKmNhbGxfYWdhaW4gbmVlZHMgdG8g YmUgZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBm b3IKLSAqIGEgdGlkLiBJZiB0aGVyZSBwb3RlbnRpYWxseSBpcyBhbm90aGVyIHR1cGxlIG1hdGNo aW5nIHRoZSB0aWQsICpjYWxsX2FnYWluCi0gKiB3aWxsIGJlIHNldCB0byB0cnVlLCBzaWduYWxp bmcgdGhhdCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpIHNob3VsZCBiZSBjYWxsZWQKLSAqIGFn YWluIGZvciB0aGUgc2FtZSB0aWQuCisgKiBEaXNwYXRjaGVzIHRocm91Z2ggc2Nhbi0+eHNfZ2V0 bmV4dF9zbG90LCB3aGljaCBpcyByZXNvbHZlZCBvbmNlIGJ5CisgKiB0aGUgdGFibGUgQU0ncyBp bmRleF9mZXRjaF9iZWdpbiBjYWxsYmFjay4KICAqCi0gKiAqYWxsX2RlYWQsIGlmIGFsbF9kZWFk IGlzIG5vdCBOVUxMLCB3aWxsIGJlIHNldCB0byB0cnVlIGJ5Ci0gKiB0YWJsZV9pbmRleF9mZXRj aF90dXBsZSgpIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBz ZWUKLSAqIHRoYXQgdHVwbGUuIEluZGV4IEFNcyBjYW4gdXNlIHRoYXQgdG8gYXZvaWQgcmV0dXJu aW5nIHRoYXQgdGlkIGluIGZ1dHVyZQotICogc2VhcmNoZXMuCisgKiBPbiBzdWNjZXNzLCByZXNv dXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwg YmUKKyAqIHJlbGVhc2VkIGJ5IGEgZnV0dXJlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBvciBp bmRleF9lbmRzY2FuIGNhbGwuCiAgKgotICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGZ1 bmN0aW9uIGFuZCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpCi0gKiBpcyB0aGF0IHRo aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudGx5IHZpc2libGUgdmVyc2lvbiBvZiBhIHJv dyBpZgotICogdGhlIEFNIHN1cHBvcnRzIHN0b3JpbmcgbXVsdGlwbGUgcm93IHZlcnNpb25zIHJl YWNoYWJsZSB2aWEgYSBzaW5nbGUgaW5kZXgKLSAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBX aGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQotICogZXZhbHVhdGVz IHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFi bGUgdHVwbGUKLSAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMg d2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+ eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKKyAqIHNjYW4ga2V5cyBp ZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZl CisgKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVy YWwgY2FzZS4KKyAqCisgKiBGb3IgaW5kZXgtb25seSBzY2FucywgdGhlIGNhbGxiYWNrIGFsc28g ZmlsbHMgeHNfaXR1cC94c19pdHVwZGVzYyBvcgorICogeHNfaGl0dXAveHNfaGl0dXBkZXNjIChv ciBib3RoKSBzbyB0aGF0IGluZGV4IGRhdGEgY2FuIGJlIHJldHVybmVkIHdpdGhvdXQKKyAqIGEg aGVhcCBmZXRjaC4KICAqLwogc3RhdGljIGlubGluZSBib29sCi10YWJsZV9pbmRleF9mZXRjaF90 dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCUl0ZW1Qb2ludGVy IHRpZCwKLQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNs b3QsCi0JCQkJCQlib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCkKK3RhYmxlX2luZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQogewotCXJldHVybiBzY2FuLT5yZWwtPnJk X3RhYmxlYW0tPmluZGV4X2ZldGNoX3R1cGxlKHNjYW4sIHRpZCwgc25hcHNob3QsCi0JCQkJCQkJ CQkJCQkJc2xvdCwgY2FsbF9hZ2FpbiwKLQkJCQkJCQkJCQkJCQlhbGxfZGVhZCk7CisJQXNzZXJ0 KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlyZXR1cm4gc2Nhbi0+eHNfZ2V0bmV4dF9zbG90KHNj YW4sIGRpcmVjdGlvbiwgc2xvdCk7CiB9CiAKIC8qCi0gKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ug d3JhcHBlciBhcm91bmQgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSB3aGljaAotICogcmV0dXJu cyB3aGV0aGVyIHRoZXJlIGFyZSB0YWJsZSB0dXBsZSBpdGVtcyBjb3JyZXNwb25kaW5nIHRvIGFu IGluZGV4Ci0gKiBlbnRyeS4gIFRoaXMgbGlrZWx5IGlzIG9ubHkgdXNlZnVsIHRvIHZlcmlmeSBp ZiB0aGVyZSdzIGEgY29uZmxpY3QgaW4gYQotICogdW5pcXVlIGluZGV4LgorICogRmV0Y2ggdHVw bGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5nIGEgdmlzaWJpbGl0eSB0ZXN0IGFj Y29yZGluZworICogdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3Nl ZCB0aGUgdmlzaWJpbGl0eSB0ZXN0LCByZXR1cm5zCisgKiB0cnVlLCBmYWxzZSBvdGhlcndpc2Uu ICBUaGlzIGlzIGEgbG93LWxldmVsIGludGVyZmFjZSBkZXNpZ25lZCBmb3IgdXNlIGJ5CisgKiBj b25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUsIHdoZXJlIHBhc3NpbmcgYSBUSUQgY2FuJ3QgYmUg YXZvaWRlZC4KKyAqCisgKiBOb3RlIHRoYXQgKnRpZCBtYXkgYmUgbW9kaWZpZWQgd2hlbiB3ZSBy ZXR1cm4gdHJ1ZSAoZS5nLiBkdWUgdG8gZm9sbG93aW5nIGEKKyAqIEhPVCBjaGFpbiBpbiBhIGhl YXBhbSB0YWJsZSkuICBDYWxsZXIgc2hvdWxkIGNvbnNpZGVyIHBhc3NpbmcgYSBwb2ludGVyIHRv CisgKiBhIG11dGFibGUgY29weSBvZiB0aGVpciBvcmlnaW5hbCBUSUQgdG8gYXZvaWQgdW53YW50 ZWQgc2lkZS1lZmZlY3RzLgorICoKKyAqIElmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCAqYWxsX2Rl YWQgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBoZXJlIGlmZiBpdCBpcworICogZ3VhcmFudGVlZCB0aGF0 IG5vIGJhY2tlbmQgbmVlZHMgdG8gc2VlIGFueSB0dXBsZSByZWFjaGFibGUgdGhyb3VnaAorICog Y2FsbGVyJ3MgVElELiAgVGhpcyBtZWFucyB0aGF0IGl0IGlzIHNhZmUgdG8gbWFyayBhbiBpbmRl eCB0dXBsZSBjb250YWluaW5nCisgKiB0aGlzIFRJRCBhcyBMUF9ERUFELgorICoKKyAqIFRoZSBt YWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGFu ZCB0aGlzCisgKiBmdW5jdGlvbiBpcyB0aGF0IHdlIHJldHVybiB0aGUgY3VycmVudGx5IHZpc2li bGUgdmVyc2lvbiBvZiBhIHJvdywgd2hpY2gKKyAqIG1hdHRlcnMgd2l0aCBBTXMgdGhhdCBzdXBw b3J0IHN0b3JpbmcgbXVsdGlwbGUgcm93IHZlcnNpb25zIHJlYWNoYWJsZSB2aWEgYQorICogc2lu Z2xlIFRJRCAoZS5nLiwgZHVlIHRvIGhlYXBhbSdzIEhPVCBjaGFpbnMpLiAgVG8gcmVsaWFibHkg ZXZhbHVhdGUKKyAqIGV4YWN0bHkgdGhlIHR1cGxlIGF0IGB0aWRgLCBjYWxsIHRhYmxlX3R1cGxl X2ZldGNoX3Jvd192ZXJzaW9uKCkgaW5zdGVhZC4KICAqLwotZXh0ZXJuIGJvb2wgdGFibGVfaW5k ZXhfZmV0Y2hfdHVwbGVfY2hlY2soUmVsYXRpb24gcmVsLAotCQkJCQkJCQkJCSAgSXRlbVBvaW50 ZXIgdGlkLAotCQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkJICBib29s ICphbGxfZGVhZCk7CitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2ZldGNoX3RpZChSZWxhdGlv biByZWwsCisJCQkJSXRlbVBvaW50ZXIgdGlkLAorCQkJCVNuYXBzaG90IHNuYXBzaG90LAorCQkJ CVR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCWJvb2wgKmFsbF9kZWFkKQoreworCXJldHVybiBy ZWwtPnJkX3RhYmxlYW0tPmZldGNoX3RpZChyZWwsIHRpZCwgc25hcHNob3QsIHNsb3QsIGFsbF9k ZWFkKTsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRhYmxlX2ZldGNo X3RpZCgpIGZvciBjYWxsZXJzIHRoYXQgZG9uJ3Qgd2FudCB0bworICogcHJvdmlkZSB0aGVpciBv d24gc2xvdC4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIG5vdGUgdGhlIHRhYmxlX2ZldGNoX3RpZCB3 YXJuaW5nIGFib3V0ICp0aWQgYmVpbmcgbW9kaWZpZWQKKyAqIHdoZW4gd2UgcmV0dXJuIHRydWUg aW4gc29tZSBjYXNlcy4KKyAqLworZXh0ZXJuIGJvb2wgdGFibGVfZmV0Y2hfdGlkX2NoZWNrKFJl bGF0aW9uIHJlbCwKKwkJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJCSAgU25hcHNo b3Qgc25hcHNob3QsCisJCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOwogCiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtMTMzMSw5ICsxMzcwLDggQEAgZXh0ZXJuIGJvb2wgdGFibGVfaW5kZXhfZmV0 Y2hfdHVwbGVfY2hlY2soUmVsYXRpb24gcmVsLAogICogYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3 YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eSB0ZXN0LCByZXR1cm5zCiAgKiB0cnVl LCBmYWxzZSBvdGhlcndpc2UuCiAgKgotICogU2VlIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlJ3Mg Y29tbWVudCBhYm91dCB3aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAqIHRoZXNlIGZ1bmN0 aW9ucyBpcy4gSXQgaXMgY29ycmVjdCB0byB1c2UgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIG9mIGlu ZGV4Ci0gKiBlbnRyeS0+dGFibGUgdHVwbGUgbG9va3Vwcy4KKyAqIFNlZSB0YWJsZV9mZXRjaF90 aWQncyBjb21tZW50IGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZQorICog ZnVuY3Rpb25zIGlzLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wKIHRhYmxlX3R1cGxlX2ZldGNo X3Jvd192ZXJzaW9uKFJlbGF0aW9uIHJlbCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2luc3RydW1lbnRfbm9kZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9u b2RlLmgKaW5kZXggMmEwZmYzNzdhLi43OGY4MTBhYWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2lu c3RydW1lbnRfbm9kZS5oCkBAIC00OCw2ICs0OCw5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbgogewogCS8qIEluZGV4IHNlYXJjaCBjb3VudCAoaW5jcmVtZW50ZWQg d2l0aCBwZ3N0YXRfY291bnRfaW5kZXhfc2NhbiBjYWxsKSAqLwogCXVpbnQ2NAkJbnNlYXJjaGVz OworCisJLyogVGFibGUgdHVwbGVzIGZldGNoZWQgY291bnQgKGluY3JlbWVudGVkIGR1cmluZyBp bmRleC1vbmx5IHNjYW5zKSAqLworCXVpbnQ2NAkJbnRhYmxldHVwbGVmZXRjaGVzOwogfSBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDA5MGNm Y2NmNi4uMGIxOGU3NGNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc4NSw3ICsxNzg1LDYg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50CQkgICBsb2Nh bCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVs IHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlUYWJsZVNsb3QJ CSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFibGUKLSAqCQlW TUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVzdGluZywgaWYg YW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2FuIGRl c2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVkIGNv bHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3VudCAgIG51bWJl ciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBAIC0xODA4LDcg KzE4MDcsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVt ZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNs b3Q7Ci0JQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0 ck51bWJlciAqaW9zc19OYW1lQ1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmlu Z0NvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMDdm MDcxODhkLi42NTdhZTQ0MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtNjU3LDggKzY1Nyw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVy KFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVM TDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xk SGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwLAotCQkJCQkJCQkJU09fTk9O RSk7CisJCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgZmFs c2UsCisJCQkJCQkJCQlTbmFwc2hvdEFueSwgTlVMTCwgMCwgMCwgU09fTk9ORSk7CiAJCWluZGV4 X3Jlc2NhbihpbmRleFNjYW4sIE5VTEwsIDAsIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC02OTYs NyArNjk2LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xk SGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsK LQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIHNsb3QpKQorCQkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgIHNsb3QpKQogCQkJCWJyZWFrOwogCiAJ CQkvKiBTaW5jZSB3ZSB1c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVj aGVjayAqLwpAQCAtMjU1Niw3ICsyNTU3LDYgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5l IGhlYXBhbV9tZXRob2RzID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9m ZXRjaF9iZWdpbiwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVz ZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCi0JLmluZGV4 X2ZldGNoX3R1cGxlID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1cGxlX2luc2Vy dCA9IGhlYXBhbV90dXBsZV9pbnNlcnQsCiAJLnR1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSA9IGhl YXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCkBAIC0yNTY2LDYgKzI1NjYsNyBAQCBzdGF0 aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR1cGxlX3VwZGF0 ZSA9IGhlYXBhbV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFwYW1fdHVwbGVfbG9j aywKIAorCS5mZXRjaF90aWQgPSBoZWFwYW1fZmV0Y2hfdGlkLAogCS50dXBsZV9mZXRjaF9yb3df dmVyc2lvbiA9IGhlYXBhbV9mZXRjaF9yb3dfdmVyc2lvbiwKIAkudHVwbGVfZ2V0X2xhdGVzdF90 aWQgPSBoZWFwX2dldF9sYXRlc3RfdGlkLAogCS50dXBsZV90aWRfdmFsaWQgPSBoZWFwYW1fdHVw bGVfdGlkX3ZhbGlkLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5j CmluZGV4IGMzNmI4MDRkMS4uM2QyMDVkM2EwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xNCwzMyArMTQsNjMgQEAKICAqLwogI2luY2x1ZGUgInBv c3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3Mv aGVhcGFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mv dmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVk ZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKIAorc3RhdGljIGJvb2wgaGVhcGFtX2luZGV4 X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ CQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xv dCAqc2xvdCk7CitzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Ns b3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLAorCQkJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK3N0YXRpYyBwZ19hdHRy aWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKFJl bGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCQkJCQkJIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4s CisJCQkJCQkJCQkJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJCQkJCQkJCQkJCSBT bmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90 LAorCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCAqaGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQkJCQkJ CQkJIGJvb2wgKmFsbF9kZWFkKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBi b29sIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJ CQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJCQkgVHVw bGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seSk7Citz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hf aGVhcChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkgICBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJ CQkJCQkJCQkJCQkJCQkgICBib29sICpoZWFwX2NvbnRpbnVlKTsKKwogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKiBJbmRleCBTY2FuIENhbGxiYWNrcyBmb3IgaGVhcCBBTQogICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKi8KIAogSW5kZXhGZXRjaFRhYmxlRGF0YSAqCi1oZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCitoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4o SW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKLQloc2Nhbi0+ eHNfYmFzZS5yZWwgPSByZWw7CiAJaHNjYW4tPnhzX2Jhc2UuZmxhZ3MgPSBmbGFnczsKIAloc2Nh bi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxp ZEJ1ZmZlcjsKIAorCS8qIFJlc29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9u IHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJc2Nh bi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90 OworCWVsc2UKKwkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1 cGxlX2dldG5leHRfc2xvdDsKKwogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CiAKIHZvaWQK LWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoraGVh cGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKLQlJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOworCUluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBm ZXRjaDsKIAogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CkBAIC01Niw5 ICs4Niw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpz Y2FuKQogfQogCiB2b2lkCi1oZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4pCitoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsK LQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2Fu OworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNj YW4tPnhzX2hlYXBmZXRjaDsKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIApA QCAtMjI3LDE0ICsyNTcsNzYgQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0 aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCXJldHVybiBmYWxzZTsKIH0K IAorLyoKKyAqIFNpbXBsZSwgc2luZ2xlLXNob3QgVElEIGxvb2t1cCBmb3IgY29uc3RyYWludCBl bmZvcmNlbWVudCBjb2RlICh1bmlxdWUKKyAqIGNoZWNrcyBhbmQgc2ltaWxhcikuICBUaGlzIGlz IGVzc2VudGlhbGx5IGp1c3QgYSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyCisgKiB3cmFwcGVyLgor ICoKKyAqIFRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsYXRlZCB0byBpbmRleCBzY2FucywgYnV0IGtl ZXBpbmcgaXQgbmVhcgorICogaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlciBtYXkgaGVscCB0aGUgY29t cGlsZXIgZ2VuZXJhdGUgYmV0dGVyIGNvZGUuCisgKi8KIGJvb2wKLWhlYXBhbV9pbmRleF9mZXRj aF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCSBJdGVtUG9p bnRlciB0aWQsCi0JCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCi0JCQkJCQkgYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCito ZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFwc2hvdCBz bmFwc2hvdCwKKwkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9kZWFkKQorewor CUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVhcFR1cGxlVGFibGVT bG90ICopIHNsb3Q7CisJQnVmZmVyCQlidWY7CisJYm9vbAkJZm91bmQ7CisKKwlBc3NlcnQoVFRT X0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKworCWJ1ZiA9IFJlYWRCdWZmZXIocmVsLCBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCisJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NL X1NIQVJFKTsKKwlmb3VuZCA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLCByZWwsIGJ1Ziwg c25hcHNob3QsCisJCQkJCQkJCSAgICZic2xvdC0+YmFzZS50dXBkYXRhLCBhbGxfZGVhZCwgdHJ1 ZSk7CisJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOworCUxvY2tCdWZmZXIoYnVm LCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJaWYgKGZvdW5kKQorCXsKKwkJc2xvdC0+dHRzX3Rh YmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCQlFeGVjU3RvcmVQaW5uZWRCdWZmZXJI ZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJCQkJCQkJCQkgICBidWYpOwor CX0KKwllbHNlCisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKworCXJldHVybiBmb3VuZDsKK30KKwor LyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBwbGFpbiBpbmRleCBzY2Fu ICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfcGxhaW5fdHVw bGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUFz c2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dl dG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlKTsKK30KKworLyogeHNfZ2V0 bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBpbmRleC1vbmx5IHNjYW4gKi8KK3N0YXRp YyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KHNjYW4tPnhz X3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdl dHR1cGxlICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgZGlyZWN0aW9uLCBzbG90LCB0cnVlKTsKK30KKworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdh eXNfaW5saW5lIGJvb2wKK2hlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKFJlbGF0aW9uIHJl bCwKKwkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJICBJdGVtUG9p bnRlciB0aWQsCisJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90LAorCQkJCQkJCSAgYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2Rl YWQpCiB7Ci0JSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEg Kikgc2NhbjsKIAlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBU dXBsZVRhYmxlU2xvdCAqKSBzbG90OwogCWJvb2wJCWdvdF9oZWFwX3R1cGxlOwogCkBAIC0yNDYs MjMgKzMzOCwyMSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hU YWJsZURhdGEgKnNjYW4sCiAJCS8qIFN3aXRjaCB0byBjb3JyZWN0IGJ1ZmZlciBpZiB3ZSBkb24n dCBoYXZlIGl0IGFscmVhZHkgKi8KIAkJQnVmZmVyCQlwcmV2X2J1ZiA9IGhzY2FuLT54c19jYnVm OwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Ni dWYsCi0JCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAorCQloc2Nhbi0+eHNfY2J1ZiA9 IFJlbGVhc2VBbmRSZWFkQnVmZmVyKGhzY2FuLT54c19jYnVmLCByZWwsCiAJCQkJCQkJCQkJCSAg SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdl LCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdlCiAJCSAqLwogCQlp ZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhz Y2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCSZoc2Nhbi0+eHNfdm1i dWZmZXIsCisJCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KHJlbCwgaHNjYW4tPnhzX2NidWYsICZoc2Nh bi0+eHNfdm1idWZmZXIsCiAJCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYgU09fSElOVF9S RUxfUkVBRF9PTkxZKTsKIAl9CiAKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVy IHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19j YnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFy Y2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkJ CQlyZWwsCiAJCQkJCQkJCQkJCWhzY2FuLT54c19jYnVmLAogCQkJCQkJCQkJCQlzbmFwc2hvdCwK IAkJCQkJCQkJCQkJJmJzbG90LT5iYXNlLnR1cGRhdGEsCkBAIC0yNzksNyArMzY5LDcgQEAgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAog CQkgKi8KIAkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsK IAotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7CisJ CXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKIAkJRXhlY1N0b3Jl QnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1 Zik7CiAJfQogCWVsc2UKQEAgLTI5MCwzICszODAsMTcxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCXJldHVybiBnb3RfaGVh cF90dXBsZTsKIH0KKworLyoKKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90aCBoZWFw YW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKgorICogVGhlIHJlc3VsdCBpcyB0 cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qg d2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0 aGUgc3BlY2lmaWVkIHNsb3QuCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1 ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiBkcm9wcGVk IGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGhlYXBhbV9pbmRl eF9mZXRjaF9lbmQKKyAqIHRocm91Z2ggaW5kZXhfZW5kc2NhbikuCisgKgorICogVGhlIGluZGV4 X29ubHkgcGFyYW1ldGVyIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGF0IGVhY2ggY2FsbCBz aXRlLAorICogYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNwZWNpYWxpemUgdGhlIGNvZGUgZm9y IGVhY2ggdmFyaWFudC4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJv b2wKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5k ZXhfb25seSkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFw RGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisJYm9vbAkgICAqaGVhcF9jb250aW51ZSA9ICZz Y2FuLT54c19oZWFwX2NvbnRpbnVlOworCWJvb2wJCWFsbF92aXNpYmxlID0gZmFsc2U7CisJQmxv Y2tOdW1iZXIgbGFzdF92aXNpdGVkX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4 CQluX3Zpc2l0ZWRfcGFnZXMgPSAwOworCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7CisKKwlmb3Ig KDs7KQorCXsKKwkJaWYgKCEqaGVhcF9jb250aW51ZSkKKwkJeworCQkJLyogR2V0IHRoZSBuZXh0 IFRJRCBmcm9tIHRoZSBpbmRleCAqLworCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2Nhbiwg ZGlyZWN0aW9uKTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3Jl IGRvbmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJLyogRm9yIGlu ZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGluZGV4 X29ubHkpCisJCQkJYWxsX3Zpc2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRp b24sCisJCQkJCQkJCQkJCSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJ CQkJCSAmaHNjYW4tPnhzX3ZtYnVmZmVyKTsKKwkJfQorCisJCUFzc2VydChJdGVtUG9pbnRlcklz VmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKKworCQlpZiAoaW5kZXhfb25seSkKKwkJeworCQkJ LyoKKwkJCSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNl cyBhIGhlYXAgcGFnZSBvbgorCQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJs ZSB0byBldmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXgg dHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkg Ki8KKwkJCWlmICghYWxsX3Zpc2libGUpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBSYXRzLCB3ZSBo YXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCisJCQkJICovCisJCQkJ aWYgKHNjYW4tPmluc3RydW1lbnQpCisJCQkJCXNjYW4tPmluc3RydW1lbnQtPm50YWJsZXR1cGxl ZmV0Y2hlcysrOworCisJCQkJaWYgKCFoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBoc2Nh biwgc2xvdCwKKwkJCQkJCQkJCQkJIGhlYXBfY29udGludWUpKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogTm8gdmlzaWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQgYSB2aXNpdGVkLXBhZ2VzIGxp bWl0CisJCQkJCSAqIChvbmx5IHNlbGZ1bmNzLmMgZG9lcyB0aGlzKSwgY291bnQgZGlzdGluY3Qg aGVhcCBwYWdlcworCQkJCQkgKiBhbmQgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHZpc2l0ZWQgdG9vIG1h bnkuCisJCQkJCSAqLworCQkJCQlpZiAodW5saWtlbHkoc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19s aW1pdCA+IDApKQorCQkJCQl7CisJCQkJCQlCbG9ja051bWJlciBibGsgPSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJCQkJCWlmIChibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2Nr KQorCQkJCQkJeworCQkJCQkJCWxhc3RfdmlzaXRlZF9ibG9jayA9IGJsazsKKwkJCQkJCQlpZiAo KytuX3Zpc2l0ZWRfcGFnZXMgPiBzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0KQorCQkJCQkJ CQlyZXR1cm4gZmFsc2U7CS8qIGdpdmUgdXAgKi8KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQljb250 aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KKwkJCQl9 CisKKwkJCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0 aGluZyAqLworCQkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJCQkJLyoKKwkJCQkgKiBPbmx5 IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgd2l0aCBzdGFuZGFyZCBpbmRleC1vbmx5CisJ CQkJICogc2NhbnMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGtlZXAgZm9sbG93aW5n IHRoZSBIT1QKKwkJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMgYmVlbiBmb3Vu ZC4gIE90aGVyIGNhbGxlcnMKKwkJCQkgKiAoY3VycmVudGx5IG9ubHkgc2VsZnVuY3MuYykgdXNl IFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgYW5kCisJCQkJICogd2FudCB1cyB0byBhc3N1bWUgdGhh dCBqdXN0IGhhdmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUKKwkJCQkgKiBob3QgY2hhaW4g aXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJCSAqLworCQkJCUFzc2VydCghKCpoZWFwX2NvbnRp bnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgc28gd2Un bGwgbmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBp ZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBhdCBwYWdlIGxldmVsLgorCQkJ CSAqLworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJ ICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCSAgc2Nhbi0+eHNfc25h cHNob3QpOworCQkJfQorCisJCQkvKgorCQkJICogUmV0dXJuIG1hdGNoaW5nIGluZGV4IHR1cGxl IG5vdyBzZXQgaW4gc2Nhbi0+eHNfaXR1cCAob3IgcmV0dXJuCisJCQkgKiBtYXRjaGluZyBoZWFw IHR1cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaGl0dXApCisJCQkgKi8KKwkJCXJldHVybiB0cnVl OworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5 KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXgKKwkJCSAqIGVudHJ5LiAgSWYgd2Ug ZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlCisJCQkgKiBuZXh0 IFRJRCBmcm9tIHRoZSBpbmRleC4KKwkJCSAqLworCQkJaWYgKGhlYXBhbV9pbmRleF9mZXRjaF9o ZWFwKHNjYW4sIGhzY2FuLCBzbG90LCBoZWFwX2NvbnRpbnVlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsK KwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIEdldCB0aGUgc2NhbidzIG5l eHQgaGVhcCB0dXBsZS4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxl IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQg Ynkgb3VyIGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAq IG1hdGNoaW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRj aGluZyB0dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5n IGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRo YW4gb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZm ZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisg KiBkcm9wcGVkIGVsc2V3aGVyZS4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5s aW5lIGJvb2wKK2hlYXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90LCBib29s ICpoZWFwX2NvbnRpbnVlKQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJZm91 bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKHNjYW4tPmhlYXBS ZWxhdGlvbiwgaHNjYW4sCisJCQkJCQkJCQkJICAmc2Nhbi0+eHNfaGVhcHRpZCwKKwkJCQkJCQkJ CQkgIHNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJCSAgaGVhcF9jb250aW51ZSwg JmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nh bi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1Qg Y2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKKwkgKiBBTSB0byBr aWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUg bmV4dAorCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8g bm90IGRvIHRoaXMgd2hlbiBpbgorCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUg TVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2Fu KCkuCisJICovCisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJCXNjYW4tPmtp bGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKworCXJldHVybiBmb3VuZDsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCA0ZmQ0NzA3MDIuLjRiYTlmNDhlOSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwpAQCAtMzEzLDcgKzMxMywz MiBAQCB2aXNpYmlsaXR5bWFwX3NldChCbG9ja051bWJlciBoZWFwQmxrLAogICogc2luY2Ugd2Ug ZG9uJ3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBlaXRoZXIsIGl0J3MgZXZlbiBwb3Nz aWJsZSB0aGF0CiAgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBiaXQganVz dCBiZWZvcmUgd2UgbG9vayBhdCBpdCwgYnV0IHlldAogICogd2UgbWlnaHQgc2VlIHRoZSBvbGQg dmFsdWUuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZGVhbCB3aXRoCi0g KiBhbGwgY29uY3VycmVuY3kgaXNzdWVzIQorICogYWxsIGNvbmN1cnJlbmN5IGlzc3VlcyEgIElu IHByYWN0aWNlIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0byBtYXR0ZXIgZm9yCisgKiB0aGUg cHJpbWFyeSB1c2UgY2FzZTogaW5kZXgtb25seSBzY2FucyB0aGF0IGNoZWNrIHdoZXRoZXIgYSBo ZWFwIGZldGNoIGNhbgorICogYmUgc2tpcHBlZC4KKyAqCisgKiBUaGUgYXJndW1lbnQgZm9yIHdo eSBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyIGZvciB0aGUgcHJpbWFyeSB1c2UK KyAqIGNhc2UgaXMgYXMgZm9sbG93czoKKyAqCisgKiBJbnNlcnRzOiB3ZSBuZWVkIHRvIGRldGVj dCB0aGF0IGEgVk0gYml0IHdhcyBjbGVhcmVkIGJ5IGFuIGluc2VydCByaWdodAorICogYXdheSwg YmVjYXVzZSB0aGUgbmV3IHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IGJ1dCBub3QgeWV0 IHZpc2libGUuCisgKiBSZWFkaW5nIHRoZSBUSUQgZnJvbSB0aGUgaW5kZXggcGFnZSAodW5kZXIg YSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKKyAqIGJ1ZmZlcikgaXMgc2VyaWFsaXplZCB3aXRo IHRoZSBpbnNlcnRpb24gb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleCAodW5kZXIKKyAqIGFuIGV4 Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1lIGluZGV4IGJ1ZmZlcikuICBCZWNhdXNlIHRoZSBWTSBi aXQgaXMgY2xlYXJlZAorICogYmVmb3JlIHRoZSBpbmRleCBpcyB1cGRhdGVkLCBhbmQgbG9ja2lu Zy91bmxvY2tpbmcgb2YgdGhlIGluZGV4IHBhZ2UgYWN0cworICogYXMgYSBmdWxsIG1lbW9yeSBi YXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlIGNsZWFyZWQgYml0IHdoZW5ldmVyIHdlCisg KiBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVsZXRlczogdGhlIGNsZWFy aW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgTk9UIHNlcmlhbGl6ZWQgd2l0aCB0aGUK KyAqIGluZGV4IHBhZ2UgYWNjZXNzLCBiZWNhdXNlIGRlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUg aW5kZXggcGFnZSAob25seQorICogVkFDVVVNIHJlbW92ZXMgdGhlIGluZGV4IFRJRCkuICBTbyB3 ZSBtYXkgc2VlIGEgc2lnbmlmaWNhbnRseSBzdGFsZSB2YWx1ZS4KKyAqIEhvd2V2ZXIsIHdlIGRv bid0IG5lZWQgdG8gZGV0ZWN0IHRoZSBkZWxldGUgcmlnaHQgYXdheSwgYmVjYXVzZSB0aGUgdHVw bGUKKyAqIHJlbWFpbnMgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29t bWl0cyBvciB0aGUgc3RhdGVtZW50CisgKiBlbmRzIChpZiBpdCdzIG91ciBvd24gdHJhbnNhY3Rp b24pLiAgSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTQorICogYnVmZmVyIHdpbGwg aGF2ZSBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVh cmluZworICogdGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5j bHVkZXMgdGhlIGRlbGV0aW5nCisgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZp c2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKKyAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhh dCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCiAgKi8KIHVpbnQ4CiB2aXNpYmlsaXR5 bWFwX2dldF9zdGF0dXMoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBoZWFwQmxrLCBCdWZmZXIg KnZtYnVmKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAxNDA4OTg5YzUuLmFjYzlmM2U2 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsOCBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVzYyA9IE5V TEw7CiAKKwlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gMDsKKwogCXJldHVybiBzY2Fu OwogfQogCkBAIC00NTQsNyArNDU2LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuKFJlbGF0aW9uIGhl YXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwog CQl9CiAKLQkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBp cmVsLAorCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGly ZWwsIGZhbHNlLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDAsCiAJCQkJCQkJ CQkJIFNPX05PTkUpOwogCQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtl eXMsIE5VTEwsIDApOwpAQCAtNTE4LDcgKzUyMCw4IEBAIHN5c3RhYmxlX2dldG5leHQoU3lzU2Nh bkRlc2Mgc3lzc2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQogCXsKLQkJaWYgKGluZGV4X2dl dG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHN5c3NjYW4t PnNsb3QpKQorCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2FuLT5zbG90KSkKIAkJewogCQkJ Ym9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzE2LDcgKzcxOSw3IEBAIHN5c3RhYmxlX2JlZ2luc2Nh bl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoVHJhbnNhY3Rpb25JZElzVmFs aWQoQ2hlY2tYaWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsKIAotCXN5c3NjYW4tPmlzY2Fu ID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlzeXNzY2Fu LT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sIGZh bHNlLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCwKIAkJCQkJCQkJCSBTT19O T05FKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEws IDApOwpAQCAtNzM2LDcgKzczOSw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChTeXNTY2Fu RGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJaHR1cCA9 IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xv dChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAodGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNs b3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90LCBmYWxz ZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNDQ0OTZhZTA5Li4wMDdiZTMwYTMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4X3BhcmFs bGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhf cGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAog ICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXggc2Nhbgot ICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgotICoJ CWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgkJ aW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgkJ aW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAg KgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRl eF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhf dmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTEw NSw5ICsxMDMsMTYgQEAgZG8geyBcCiAJCQkgQ3BwQXNTdHJpbmcocG5hbWUpLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShzY2FuLT5pbmRleFJlbGF0aW9uKSk7IFwKIH0gd2hpbGUoMCkKIAotc3Rh dGljIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCi0JCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hv dCBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJv b2wgdGVtcF9zbmFwKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNj YW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAor CQkJCQkJCQkJCQkJCQkJCQkJIFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkJ CQkJCSBpbnQgbmtleXMsCisJCQkJCQkJCQkJCQkJCQkJCQkgaW50IG5vcmRlcmJ5cywKKwkJCQkJ CQkJCQkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBQYXJh bGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAorCQkJCQkJCQkJCQkJCQkJCQkJIGJvb2wgaW5kZXhf b25seV9zY2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJIGJvb2wgdGVtcF9zbmFwLAorCQkJCQkJCQkJ CQkJCQkJCQkJIHVpbnQzMiBmbGFncyk7CiBzdGF0aWMgaW5saW5lIHZvaWQgdmFsaWRhdGVfcmVs YXRpb25fYXNfaW5kZXgoUmVsYXRpb24gcik7CiAKIApAQCAtMjU2LDEzICsyNjEsMTIgQEAgaW5k ZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIEluZGV4U2NhbkRlc2MK IGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKKwkJCQlib29sIGluZGV4X29ubHlfc2NhbiwKIAkJCQlTbmFwc2hvdCBzbmFw c2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCXVpbnQzMiBmbGFncykKIHsKLQlJbmRleFNjYW5E ZXNjIHNjYW47Ci0KIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKIAogCS8q IENoZWNrIHRoYXQgYSBoaXN0b3JpYyBzbmFwc2hvdCBpcyBub3QgdXNlZCBmb3Igbm9uLWNhdGFs b2cgdGFibGVzICovCkBAIC0yNzUsMjAgKzI3OSwxMCBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0 aW9uKSkpKTsKIAl9CiAKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVs YXRpb24sIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LCBOVUxMLCBmYWxzZSk7Ci0KLQkvKgot CSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0 aGluZyBlbHNlIHdhcyBzZXQKLQkgKiB1cCBieSBSZWxhdGlvbkdldEluZGV4U2Nhbi4KLQkgKi8K LQlzY2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwUmVsYXRpb247Ci0Jc2Nhbi0+eHNfc25hcHNob3Qg PSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBh cmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZl dGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uLCBmbGFncyk7Ci0KLQly ZXR1cm4gc2NhbjsKKwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRp b24sIGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCW5rZXlzLCBub3JkZXJieXMsCisJCQkJCQkJCQlz bmFwc2hvdCwgTlVMTCwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2NhbiwgZmFs c2UsIGZsYWdzKTsKIH0KIAogLyoKQEAgLTMwMywyOSArMjk3LDI0IEBAIGluZGV4X2JlZ2luc2Nh bl9iaXRtYXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJICAgSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkgICBpbnQgbmtleXMpCiB7Ci0JSW5kZXhTY2Fu RGVzYyBzY2FuOwotCiAJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CisJQXNz ZXJ0KElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCkpOwogCi0Jc2NhbiA9IGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwgc25hcHNob3QsIE5VTEwsIGZh bHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2Nh bmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5k ZXhTY2FuLgotCSAqLwotCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5z dHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQlyZXR1cm4gc2NhbjsKKwlyZXR1cm4gaW5kZXhfYmVn aW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIE5VTEwsIG5rZXlzLCAwLCBzbmFwc2hvdCwK KwkJCQkJCQkJCU5VTEwsIGluc3RydW1lbnQsIGZhbHNlLCBmYWxzZSwgU09fTk9ORSk7CiB9CiAK IC8qCiAgKiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwgLS0tIGNvbW1vbiBjb2RlIGZvciBpbmRl eF9iZWdpbnNjYW4gdmFyaWFudHMKKyAqCisgKiBXaGVuIGhlYXBSZWxhdGlvbiBpcyBub3QgTlVM TCwgYWxzbyBpbml0aWFsaXplcyB0YWJsZSBBTSBpbmRleCBzY2FuIHN0YXRlLgogICovCi1zdGF0 aWMgSW5kZXhTY2FuRGVzYwotaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuRGVz YworaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNuYXBz aG90IHNuYXBzaG90LAotCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0 ZW1wX3NuYXApCisJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAorCQkJCQkJIElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKKwkJCQkJCSBib29sIGluZGV4X29u bHlfc2NhbiwgYm9vbCB0ZW1wX3NuYXAsIHVpbnQzMiBmbGFncykKIHsKIAlJbmRleFNjYW5EZXNj IHNjYW47CiAKQEAgLTM0OSw2ICszMzgsMjYgQEAgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiAJc2Nhbi0+cGFyYWxsZWxfc2NhbiA9IHBzY2FuOwogCXNj YW4tPnhzX3RlbXBfc25hcCA9IHRlbXBfc25hcDsKIAorCXNjYW4tPnhzX3NuYXBzaG90ID0gc25h cHNob3Q7CisJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisKKwkvKgorCSAqIEluaXRp YWxpemUgaGVhcC1zaWRlIHNjYW4gc3RhdGUgd2hlbiBhIGhlYXAgcmVsYXRpb24gaXMgcHJvdmlk ZWQuCisJICogQml0bWFwIGluZGV4IHNjYW5zIGRvbid0IHByb3ZpZGUgb25lLgorCSAqLworCWlm IChoZWFwUmVsYXRpb24gIT0gTlVMTCkKKwl7CisJCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBS ZWxhdGlvbjsKKwkJc2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhfb25seV9zY2FuOworCQlzY2Fu LT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CisKKwkJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRl eCBtYXRjaGVzIGZyb20gdGFibGUgKi8KKwkJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5k ZXhfZmV0Y2hfYmVnaW4oc2NhbiwgZmxhZ3MpOworCisJCS8qIHRhYmxlIEFNIG11c3Qgc2V0IHhz X2dldG5leHRfc2xvdCBjYWxsYmFjayBmb3IgdXMgKi8KKwkJQXNzZXJ0KHNjYW4tPnhzX2dldG5l eHRfc2xvdCAhPSBOVUxMKTsKKwl9CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtMzc3LDcgKzM4 Niw3IEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAKIAkvKiBSZWxlYXNlIHJl c291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChz Y2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hl YXBmZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2ls bF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9j b250aW51ZSA9IGZhbHNlOwpAQCAtMzk5LDcgKzQwOCw3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKQogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBm cm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7Ci0JCXRh YmxlX2luZGV4X2ZldGNoX2VuZChzY2FuLT54c19oZWFwZmV0Y2gpOworCQl0YWJsZV9pbmRleF9m ZXRjaF9lbmQoc2Nhbik7CiAJCXNjYW4tPnhzX2hlYXBmZXRjaCA9IE5VTEw7CiAJfQogCkBAIC00 NTQsNyArNDYzLDcgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJLyog cmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMg Ki8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChz Y2FuLT54c19oZWFwZmV0Y2gpOworCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAog CXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4t PnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKQEAgLTU3OCw4ICs1ODcsOSBAQCBpbmRleF9wYXJh bGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJU0NBTl9DSEVDS1M7CiAKKwkvKiBS ZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAq LwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNj YW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJ LyogYW1wYXJhbGxlbHJlc2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92 aWRlZCBieSBBTSAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJh bGxlbHJlc2NhbiAhPSBOVUxMKQpAQCAtNTk2LDQxICs2MDYsMzMgQEAgaW5kZXhfcGFyYWxsZWxy ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdp bnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJ CQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppbnN0cnVtZW50LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkgdWludDMyIGZsYWdzKQogewogCVNu YXBzaG90CXNuYXBzaG90OwotCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAogCUFzc2VydChSZWxGaWxl TG9jYXRvckVxdWFscyhoZWFwcmVsLT5yZF9sb2NhdG9yLCBwc2Nhbi0+cHNfbG9jYXRvcikpOwog CUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhpbmRleHJlbC0+cmRfbG9jYXRvciwgcHNjYW4t PnBzX2luZGV4bG9jYXRvcikpOwogCiAJc25hcHNob3QgPSBSZXN0b3JlU25hcHNob3QocHNjYW4t PnBzX3NuYXBzaG90X2RhdGEpOwogCVJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwotCXNjYW4g PSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNu YXBzaG90LAotCQkJCQkJCQkJcHNjYW4sIHRydWUpOwogCi0JLyoKLQkgKiBTYXZlIGFkZGl0aW9u YWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0 Ci0JICogdXAgYnkgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsLgotCSAqLwotCXNjYW4tPmhlYXBS ZWxhdGlvbiA9IGhlYXByZWw7Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2Fu LT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXgg bWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhf ZmV0Y2hfYmVnaW4oaGVhcHJlbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGlu ZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwgaGVhcHJlbCwgbmtleXMsIG5vcmRlcmJ5 cywKKwkJCQkJCQkJCXNuYXBzaG90LCBwc2NhbiwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4 X29ubHlfc2NhbiwgdHJ1ZSwgZmxhZ3MpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBp bmRleF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4 X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlz IHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5v IG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUg Y2FsbGVkIGJ5IHRhYmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgorICogY2FsbGJh Y2tzLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjYxLDcgKzY2 Myw3IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24pCiAJewogCQkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlu cykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQotCQkJ dGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJCXRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTY3Myw5NyAr Njc1LDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9CiAKLS8qIC0tLS0t LS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBo ZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3Nv Y2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBmZXRjaGVkIGJ5IGlu ZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzCi0gKiBl eGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNl IG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3Qg aXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25lIHN1Y2ggdHVwbGUg dG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUg aGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3BwZWQgaW4gYSBmdXR1 cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2Nhbgot ICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVj aywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJl ZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91 Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4K LSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNj YW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJCWFsbF9kZWFkID0g ZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxl KHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJCQkJCQlzY2FuLT54 c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxs X2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5p bmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFp biBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFNIHRvIGtpbGwg aXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0 Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3Qg ZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkND IHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4K LQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9w cmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0vKiAtLS0tLS0t LS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZy b20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWlu ZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3VuZCwgZmFsc2Ugb3Ro ZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCi0gKgot ICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRv IGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGluZGV4X2dldG5l eHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoK LSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3Jt IHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3Qg ZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9u IHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0t LS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlmb3Ig KDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7Ci0JCQlJdGVtUG9p bnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGlu ZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOwotCi0J CQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLwotCQkJaWYg KHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHMo dGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmV0Y2ggdGhlIG5l eHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeS4KLQkJ ICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlIG5l eHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0KEl0ZW1Qb2ludGVy SXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2Fu LCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQogLyog LS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0 IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5z ZXJ0LmMKaW5kZXggYzhhZjk3ZGQyLi5mMWI1NWZiMjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRpbnNlcnQuYwpAQCAtNTYwLDkgKzU2MCw5IEBAIF9idF9jaGVja191bmlxdWUoUmVsYXRp b24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBoZWFwUmVsLAogCQkJ CSAqIHdpdGggb3B0aW1pemF0aW9ucyBsaWtlIGhlYXAncyBIT1QsIHdlIGhhdmUganVzdCBhIHNp bmdsZQogCQkJCSAqIGluZGV4IGVudHJ5IGZvciB0aGUgZW50aXJlIGNoYWluLgogCQkJCSAqLwot CQkJCWVsc2UgaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBSZWwsICZodGlk LAotCQkJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERpcnR5LAotCQkJCQkJCQkJCQkJCSAgICZhbGxf ZGVhZCkpCisJCQkJZWxzZSBpZiAodGFibGVfZmV0Y2hfdGlkX2NoZWNrKGhlYXBSZWwsICZodGlk LAorCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0eSwKKwkJCQkJCQkJCQkJICAgJmFsbF9kZWFk KSkKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAKQEAgLTYxOCw4ICs2MTgsOCBA QCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0 ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJICogZW50cnkuCiAJCQkJCSAqLwogCQkJCQlodGlk ID0gaXR1cC0+dF90aWQ7Ci0JCQkJCWlmICh0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayho ZWFwUmVsLCAmaHRpZCwKLQkJCQkJCQkJCQkJCQkgIFNuYXBzaG90U2VsZiwgTlVMTCkpCisJCQkJ CWlmICh0YWJsZV9mZXRjaF90aWRfY2hlY2soaGVhcFJlbCwgJmh0aWQsCisJCQkJCQkJCQkJCSAg U25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewogCQkJCQkJLyogTm9ybWFsIGNhc2UgLS0tIGl0 J3Mgc3RpbGwgbGl2ZSAqLwogCQkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRl eCA2OGZmMDk2NmYuLjBhYzlmMDE0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBA IC0yMjgsMzIgKzIyOCwyMCBAQCB0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWxfdGlkcmFuZ2UoUmVs YXRpb24gcmVsYXRpb24sCiAgKi8KIAogLyoKLSAqIFRvIHBlcmZvcm0gdGhhdCBjaGVjayBzaW1w bHkgc3RhcnQgYW4gaW5kZXggc2NhbiwgY3JlYXRlIHRoZSBuZWNlc3NhcnkKLSAqIHNsb3QsIGRv IHRoZSBoZWFwIGxvb2t1cCwgYW5kIHNodXQgZXZlcnl0aGluZyBkb3duIGFnYWluLiBUaGlzIGNv dWxkIGJlCi0gKiBvcHRpbWl6ZWQsIGJ1dCBpcyB1bmxpa2VseSB0byBtYXR0ZXIgZnJvbSBhIHBl cmZvcm1hbmNlIFBPVi4gSWYgdGhlcmUKLSAqIGZyZXF1ZW50bHkgYXJlIGxpdmUgaW5kZXggcG9p bnRlcnMgYWxzbyBtYXRjaGluZyBhIHVuaXF1ZSBpbmRleCBrZXksIHRoZQotICogQ1BVIG92ZXJo ZWFkIG9mIHRoaXMgcm91dGluZSBpcyB1bmxpa2VseSB0byBtYXR0ZXIuCi0gKgotICogTm90ZSB0 aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgaWYgdGhlIEFNIHN1 cHBvcnRzCi0gKiBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEg c2luZ2xlIGluZGV4IGVudHJ5IChsaWtlCi0gKiBoZWFwJ3MgSE9UKS4KKyAqIENhbGxlciBzaG91 bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBiZWluZyBtb2Rp ZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzCiAgKi8KIGJvb2wKLXRh YmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJCQkJCQkgIEl0ZW1Q b2ludGVyIHRpZCwKLQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCSAgYm9vbCAq YWxsX2RlYWQpCit0YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAorCQkJCQkgIEl0 ZW1Qb2ludGVyIHRpZCwKKwkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJICBib29sICph bGxfZGVhZCkKIHsKLQlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuOwogCVR1cGxlVGFibGVTbG90 ICpzbG90OwotCWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxzZTsKIAlib29sCQlmb3VuZDsKIAogCXNs b3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZWwsIE5VTEwpOwotCXNjYW4gPSB0YWJsZV9pbmRleF9m ZXRjaF9iZWdpbihyZWwsIFNPX05PTkUpOwotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgJmNhbGxfYWdhaW4sCi0JCQkJCQkJCQlhbGxf ZGVhZCk7Ci0JdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCWZvdW5kID0gdGFibGVfZmV0 Y2hfdGlkKHJlbCwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgYWxsX2RlYWQpOwogCUV4ZWNEcm9wU2lu Z2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAKIAlyZXR1cm4gZm91bmQ7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA1NDUwYTI3ZmEuLmMwOTQ3M2I5NyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC01Myw4ICs1Myw4IEBAIEdldFRhYmxlQW1S b3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX2JlZ2lu ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXNldCAhPSBOVUxMKTsK IAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfZW5kICE9IE5VTEwpOwotCUFzc2VydChyb3V0 aW5lLT5pbmRleF9mZXRjaF90dXBsZSAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0aW5lLT5mZXRj aF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9u ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV90aWRfdmFsaWQgIT0gTlVMTCk7CiAJ QXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2dldF9sYXRlc3RfdGlkICE9IE5VTEwpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29uc3RyYWludC5jCmluZGV4IDQyMWQ4YzM1OS4uN2FmZjQ4MTI0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29uc3RyYWludC5jCkBAIC0xMDUsMjMgKzEwNSwxNCBAQCB1bmlxdWVfa2V5X3JlY2hlY2so UEdfRlVOQ1RJT05fQVJHUykKIAkgKiByZW1vdmVkLgogCSAqLwogCXRtcHRpZCA9IGNoZWNrdGlk OworCWlmICghdGFibGVfZmV0Y2hfdGlkKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwgJnRtcHRpZCwg U25hcHNob3RTZWxmLAorCQkJCQkJIHNsb3QsIE5VTEwpKQogCXsKLQkJSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50Z19yZWxhdGlv biwKLQkJCQkJCQkJCQkJCQkJCVNPX05PTkUpOwotCQlib29sCQljYWxsX2FnYWluID0gZmFsc2U7 Ci0KLQkJaWYgKCF0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCAmdG1wdGlkLCBTbmFwc2hv dFNlbGYsIHNsb3QsCi0JCQkJCQkJCQkgJmNhbGxfYWdhaW4sIE5VTEwpKQotCQl7Ci0JCQkvKgot CQkJICogQWxsIHJvd3MgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXggZW50cnkgYXJlIGRlYWQsIHNv IHNraXAgdGhlCi0JCQkgKiBjaGVjay4KLQkJCSAqLwotCQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRh YmxlU2xvdChzbG90KTsKLQkJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKLQkJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Ci0JCX0KLQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNj YW4pOworCQkvKgorCQkgKiBBbGwgcm93cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCBlbnRyeSBh cmUgZGVhZCwgc28gc2tpcCB0aGUgY2hlY2sKKwkJICovCisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3Qoc2xvdCk7CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJfQogCiAJ LyoKQEAgLTE2OCw5ICsxNTksOCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJH UykKIAkJLyoKIAkJICogTm90ZTogdGhpcyBpcyBub3QgYSByZWFsIGluc2VydDsgaXQgaXMgYSBj aGVjayB0aGF0IHRoZSBpbmRleCBlbnRyeQogCQkgKiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5z ZXJ0ZWQgaXMgdW5pcXVlLiAgUGFzc2luZyB0aGUgdHVwbGUncyB0aWQKLQkJICogKGkuZS4gdW5t b2RpZmllZCBieSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpKSBpcyBjb3JyZWN0IGV2ZW4gaWYK LQkJICogdGhlIHJvdyBpcyBub3cgZGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBUSUQgdGhlIGlu ZGV4IHdpbGwga25vdwotCQkgKiBhYm91dC4KKwkJICogKGkuZS4gdW5tb2RpZmllZCBieSB0YWJs ZV9mZXRjaF90aWQoKSkgaXMgY29ycmVjdCBldmVuIGlmIHRoZSByb3cKKwkJICogaXMgbm93IGRl YWQsIGJlY2F1c2UgdGhhdCBpcyB0aGUgVElEIHRoZSBpbmRleCB3aWxsIGtub3cgYWJvdXQuCiAJ CSAqLwogCQlpbmRleF9pbnNlcnQoaW5kZXhSZWwsIHZhbHVlcywgaXNudWxsLCAmY2hlY2t0aWQs CiAJCQkJCSB0cmlnZGF0YS0+dGdfcmVsYXRpb24sIFVOSVFVRV9DSEVDS19FWElTVElORywKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYwppbmRleCBlNGI3MDE2NmIuLjE4Y2Y0MjJhZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYwpAQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJzaXZl X3VuaW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQgc2hv d19tZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ CQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8o QWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNob3df aW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVz KTsKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhCaXRt YXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOwog c3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAqcWxhYmVs LCBpbnQgd2hpY2gsCkBAIC0xOTc0LDcgKzE5NzQsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxh bnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJ YnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJbmRl eE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg4LDE1ICsxOTg4LDEyIEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAo cGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVk IGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAoZXMt PmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5VTEws Ci0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwotCQkJ c2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nh bl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNj YW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhx dWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVz KTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19p bmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFw SGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4pLT5i aXRtYXBxdWFsb3JpZywKQEAgLTM4NjAsMTUgKzM4NTcsMTYgQEAgc2hvd19oYXNoYWdnX2luZm8o QWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hvdyB0 aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4IHNj YW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nhbi9J bmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93 X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICpl cykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNlYXJj aGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbnRhYmxldHVwbGVmZXRjaGVz ID0gMDsKIAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODksNiArMzg4Nyw3 IEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5kZXhP bmx5U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0YXRl LT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQludGFibGV0dXBsZWZldGNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJCQlTaGFy ZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpA QCAtMzkxMiw5ICszOTExLDEzIEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53aW5zdHJ1bWVudFtpXTsKIAogCQkJbnNlYXJj aGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCQludGFibGV0dXBsZWZldGNoZXMgKz0g d2luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJfQogCX0KIAorCWlmIChub2RlVGFn KHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3BlcnR5VUludGVnZXIoIkhl YXAgRmV0Y2hlcyIsIE5VTEwsIG50YWJsZXR1cGxlZmV0Y2hlcywgZXMpOworCiAJRXhwbGFpblBy b3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVzLCBlcyk7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggNDM2M2UxNTRjLi44NGM4YzM0 MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTUsMTIgKzgxNSwxMyBA QCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVs YXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5kX3NlbGYgPSBm YWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LAorCWluZGV4 X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLAogCQkJCQkJCQkgJkRp cnR5U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwLAogCQkJCQkJCQkgU09fTk9ORSk7CiAJ aW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7 CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJZXhpc3Rpbmdfc2xv dCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGIyY2E1Y2JmMS4uZmQ5 ZWZkOTQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMjA1LDcg KzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQg aWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5KHNrZXksIHJl bCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4IHNjYW4uICovCi0J c2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwKKwlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwKIAkJCQkJCSAgICZzbmFwLCBOVUxMLCBza2V5X2F0dG9m ZiwgMCwgU09fTk9ORSk7CiAKIHJldHJ5OgpAQCAtMjE0LDcgKzIxNCw3IEBAIHJldHJ5OgogCWlu ZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkg dG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CiAJCS8qCiAJ CSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFy eSBrZXkgb3IKQEAgLTY2OSwxMyArNjY5LDEzIEBAIFJlbGF0aW9uRmluZERlbGV0ZWRUdXBsZUlu Zm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0IGNvbW1pdHRl ZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUKIAkgKiBleGNs dWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAqLwotCXNjYW4g PSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsCisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbihy ZWwsIGlkeHJlbCwgZmFsc2UsCiAJCQkJCQkgICBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRv ZmYsIDAsIFNPX05PTkUpOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2Zm LCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKKwl3 aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hl Y2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNzBjNTVlZTZkLi5hOWEzZDJmYjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwNCw2ICsyMDQsNyBA QCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpub2RlKQogCQkg KiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5kIHplcm9lZCBz dGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0 cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1lbnQtPm50YWJs ZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMKaW5kZXggZGU2MTU0ZmQ1Li44YWMzZmEwNzAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg ImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRl ICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3Iu aCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCkBAIC00Miw3ICs0MSw2IEBACiAj aW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgogCkBAIC02Niw3ICs2NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7 CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBl eHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTEs NyArODgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICog cGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICAgZXN0 YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLApAQCAtMTAwLDExICs5Nyw3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBTT19ISU5UX1JF TF9SRUFEX09OTFkgOiBTT19OT05FKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRl c2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlub2RlLT5p b3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3Ig dGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTIxLDc4ICsxMTQsMTEgQEAgSW5kZXhP bmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93IHRoYXQg d2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxl ICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwp CisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLAor CQkJCQkJCQkJbm9kZS0+aW9zc19UYWJsZVNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVfZnJvbV9o ZWFwID0gZmFsc2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgotCQkgKiBX ZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBh Z2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJv ZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhl IGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9y eSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJ ICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1 bHQgd2UgcmVhZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwg aXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2Ug bmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBh d2F5LAotCQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdl IGJ1dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNj YW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMgc2Vy aWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAotCQkgKiAo dXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1c2UgdGhl IFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsIGFuZCBs b2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBt ZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVkIGJpdCBp ZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJ ICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlz IG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNl ZSBhIHZhbHVlIHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2Ug ZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0 aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFu c2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwg aGF2ZQotCQkgKiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRl ciBjbGVhcmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0 aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0 dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5TG9j ayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoKLQkJICog SXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5n IHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNh bnQgY29udGVudGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhl YXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJ CQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywgd2UgaGF2 ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0JCQlJbnN0 ckNvdW50VHVwbGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVz Yywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0 dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+ aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUg c3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVw IGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICog YmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBr ZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5l eHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRp bnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0 ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBw b2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVj b3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5v dywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28u ICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRo ZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwot CQl9Ci0KIAkJLyoKIAkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9t IHRoZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKIAkJICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBU dXBsZSBvciBJbmRleFR1cGxlIGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCkBAIC0yNDEsMTYgKzE2 Nyw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAog CQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQg aW4gaW5kZXgtb25seSBzY2FucyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2Vz cyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9j ayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBs ZXZlbC4KLQkJICovCi0JCWlmICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1Bh Z2Uoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKLQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBz bG90OwogCX0KIApAQCAtNDEwLDEzICszMjYsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRl eE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1Jl bGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8q IFJlbGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVm ZmVyICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1C dWZmZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkv KgogCSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNz IGdhdGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0 aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzNiw2ICszNDUsNyBAQCBF eGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNo IHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJ ICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5u c2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMgKz0gbm9kZS0+aW9z c19JbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc5MiwxNSAr NzAyLDE0IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3Nf UmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNj YW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBp c2NhbiwKIAkJCQkJCQkJIFNjYW5SZWxJc1JlYWRPbmx5KCZub2RlLT5zcykgPwogCQkJCQkJCQkg U09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9ORSk7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+ eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZl cjsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJ ICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdv IGFoZWFkIGFuZCBwYXNzCkBAIC04NjAsMTQgKzc2OSwxNCBAQCBFeGVjSW5kZXhPbmx5U2Nhbklu aXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19T Y2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50 UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5v ZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVt ZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4sCiAJCQkJCQkJCSBTY2FuUmVsSXNS ZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNPX0hJTlRfUkVMX1JFQURfT05MWSA6IFNP X05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNz ZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5v IHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBh bmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDE2MjBkMTQ2MC4u NTVmYTJkNDIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMDksNyAr MTA5LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBl eGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgog CQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBu b2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFw c2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUt Pmlzc19OdW1TY2FuS2V5cywKQEAgLTEzMiw3ICsxMzIsNyBAQCBJbmRleE5leHQoSW5kZXhTY2Fu U3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQs IGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRf c2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CiAKQEAgLTIwNyw3ICsyMDcsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNj YW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhh dCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhf YmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+ aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFs c2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlz c19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjYs NyArMjY2LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJ CSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1 cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0 dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAg LTgxOCw2ICs4MTgsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQog CQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQg c3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0 cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnRhYmxl dHVwbGVmZXRjaGVzID09IDApOwogCX0KIAogCS8qCkBAIC0xNzMwLDcgKzE3MzEsNyBAQCBFeGVj SW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlz c19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkg bm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1 bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlz c19OdW1PcmRlckJ5S2V5cywKQEAgLTE3OTYsNyArMTc5Nyw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0 aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNj ID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlv biwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3Nf UmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVy QnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA4NGY5ZmVjZGIuLmZj ZWI1NjM4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTI4MDMsNyArMjgw Myw3IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywK IAlpZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFyZUxvY2sp OwogCiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7Ci0Jc2NhbmRlc2Mg PSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCXNjYW5kZXNjID0gaW5kZXhfYmVn aW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsCiAJCQkJCQkJICAgc25hcHNob3QsIE5VTEws CiAJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwKIAkJCQkJCQkgICBTT19OT05FKTsKQEAgLTI5 MTgsNyArMjkxOCw3IEBAIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpm cGVudHJ5LCBSZWxhdGlvbiBma19yZWwsCiAJICovCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CiAKLQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nh bihwa19yZWwsIGlkeF9yZWwsIHNuYXBzaG90LCBOVUxMLAorCXNjYW5kZXNjID0gaW5kZXhfYmVn aW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsIHNuYXBzaG90LCBOVUxMLAogCQkJCQkJCSAg IHJpaW5mby0+bmtleXMsIDAsIFNPX05PTkUpOwogCiAJR2V0VXNlcklkQW5kU2VjQ29udGV4dCgm c2F2ZWRfdXNlcmlkLCAmc2F2ZWRfc2VjX2NvbnRleHQpOwpAQCAtMzExMiw3ICszMTEyLDcgQEAg cmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFi bGVTbG90ICpma19zbG90LAogCSAqIFdhbGsgYWxsIG1hdGNoZXMuICBUaGUgaW5kZXggQU0gcmV0 dXJucyB0aGVtIGluIGluZGV4IG9yZGVyLiAgRm9yIGVhY2gKIAkgKiBtYXRjaCwgZmluZCB3aGlj aCBiYXRjaCBpdGVtKHMpIGl0IHNhdGlzZmllcy4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xvdCkpCisJd2hpbGUg KHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IHBrX3Nsb3QpKQogCXsKIAkJRGF0dW0JCWZvdW5kX3ZhbDsKIAkJYm9vbAkJZm91bmRfbnVsbDsK QEAgLTMxODUsNyArMzE4NSw3IEBAIHJpX0Zhc3RQYXRoUHJvYmVPbmUoUmVsYXRpb24gcGtfcmVs LCBSZWxhdGlvbiBpZHhfcmVsLAogCiAJaW5kZXhfcmVzY2FuKHNjYW5kZXNjLCBza2V5LCBua2V5 cywgTlVMTCwgMCk7CiAKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2Fu ZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJYm9vbAkJY29uY3VycmVu dGx5X3VwZGF0ZWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5j cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggNDE2MGQyZDZlLi42 YTFkZmFiNTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAK ICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MTIx LDEwICs3MTIwLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFw UmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5v blZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZm ZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFs aWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBv aW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVs bFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtNzE3Miw2 MiArNzE2NywyNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBS ZWwsCiAJICogYSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3 ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhh dCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRy ZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoKKwkgKiBXZSBzZXQg eHNfdmlzaXRlZF9wYWdlc19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0 aW5jdAorCSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBn aXZlIHVwIGFmdGVyIHRoZSBsaW1pdAorCSAqIGlzIGV4Y2VlZGVkLgogCSAqLworI2RlZmluZSBW SVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNo b3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAK LQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAorCWluZGV4 X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJ CSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwgMCwKIAkJCQkJCQkJ IFNPX05PTkUpOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhf c2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9p dHVwKTsKKwlpbmRleF9zY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gVklTSVRFRF9QQUdF U19MSU1JVDsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDAp OwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICov Ci0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5k aXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2Nh biwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0KLQkJaWYgKCFWTV9BTExfVklTSUJMRSho ZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJh dHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJ aWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJ LyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBu ZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBz bywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBk b25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRj aCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0 dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90 aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGlsbCBpbgotCQkJCSAq IGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0J CQkJICovCi0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCi0KLQkJCQlpZiAoYmxvY2sg IT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7 Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9w YWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlj b250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0J CQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFu eXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0JCQkvKgotCQkJICog V2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxl IGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUsIHRoYXQncyBnb29k IGVub3VnaC4KLQkJCSAqLwotCQl9Ci0KIAkJLyoKIAkJICogV2UgZXhwZWN0IHRoYXQgdGhlIGlu ZGV4IHdpbGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKIAkJICogSGVhcFR1cGxlIGZv cm1hdC4KQEAgLTcyNTksOCArNzIxOCw2IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQo UmVsYXRpb24gaGVhcFJlbCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZtYnVmZmVyICE9IEludmFs aWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOwogCWluZGV4X2VuZHNjYW4oaW5k ZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2ZV9kYXRhOwotLSAKMi41My4wCgo= --000000000000d73dc2064e9ab4fb--