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.94.2) (envelope-from ) id 1v81BX-00BSSi-M5 for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Oct 2025 18:52:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v81BU-002E8o-7D for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Oct 2025 18:52:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v81BT-002E7o-Bv for pgsql-hackers@lists.postgresql.org; Sun, 12 Oct 2025 18:52:44 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v81BQ-001nEb-2z for pgsql-hackers@lists.postgresql.org; Sun, 12 Oct 2025 18:52:43 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-46b303f7469so21651055e9.1 for ; Sun, 12 Oct 2025 11:52:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1760295158; x=1760899958; 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=DxkgCHweBVHRPnxtYetzuYNYtN4istkgGURC3j3eoZQ=; b=oTAA+FYBCwsMnoRqWZjujmQAph49sqvulmB1eD352zaIjjS01x7usrwTNJafCd3Jk4 BpDXH48BfcbPZYZKP9AoZ8E6pAZ8jUy8i9Ubtm+mF+gkmgPn3ESUsItEidKFUsyFpDml e/iYnuh/nL+SyGmBg/f84P9JDA62/RF7+McQymJ/ggwnOKDN1cQpfL3wVD3dJwrq/JM0 LvjUYB4E8Cy3BYHTAlHNYSZpoiCiWZJB1/HXxEykTdygcQLbF1V0n/6sNX1etedm3p1J v7LaVJFhDo2yCisdiafEBK1w9KLBkT9Hm0Ng16Bow5KM14NqVZZ+VZG/gLgrrZ2D8aEY Z1LA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760295158; x=1760899958; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=DxkgCHweBVHRPnxtYetzuYNYtN4istkgGURC3j3eoZQ=; b=dWoedjbvFSuYTMNGLWH56FrQsdKMvRfOsU/wE83WPccIElVlT51B84nnWsfCSIsHqJ Co8Ou53gN7Rnb4zdFZV0ogsHzVAf2snq2wlN/TYv5tAisD8t9+KB5lqFwvkt2/BpkGso RBSyAQHhDGhk1g2FC61N57Oy4yut/rvqKio4qUqZu8Ehc4ap7/4V2eJ2RlIgIBQw666Z sqlTehA6piYZfVhcsI6t7dsb2wXm76kSKpK6Gk1xK4UBVnChKF27dk8Zz/WEelV4VKxy au36eP7jBlyII5jt6Pdmfw4dqN4xaTChNFy2hfezpaNkHhBEczMEWOpuvNOYcS0iFXR8 shIA== X-Forwarded-Encrypted: i=1; AJvYcCXkX9bma1LAmzSW1MwsqHx4KWCqAwvyROO6ARqnelW+resvw+62GpftebGT9s9vqxke66/0mNvzsDN1BQ13@lists.postgresql.org X-Gm-Message-State: AOJu0Yx3iM4EdowG0cZLG5HOYSd8MrnUQB64/OeRsOfafktPGRL6l4cd vHgec00YJTnM3ZkVuT1U41hF1JXtCt6wJtCcJNlqPLl9IoJh1tZqRxBfrC0TngonOxOtlvfSzbY pZVPT8uzk4rdzNysjvquBhqtSKEGagi9OuHZXwzvPXg== X-Gm-Gg: ASbGncuvxUUf7Br+zTF0C9x5Uq0KHOIAvNvMyIaO9DhmfOW1ORQJgvAHL+6U6KCWmia DyrfDqBbFhDHSmspf1pga+89kDCuhToyy91Kwwayz7/ZTCEiTkZNrI7FaFQY8i4Lx4++X82Aebg sONhj5G7Nr0X36B/mwHWnYiDUwIzKY/c3s6AV+4+l8oPcCSi9KqP+T3L+PWL6hnc8yo0Ggsp0yG UlCvd34C0zs5QttQ0GaedrjUm7OlKXsQD4flqRQ1NYfx1M= X-Google-Smtp-Source: AGHT+IF2/7VF5ilMehhOBJjk/oKd0Vo97kihh0krUPQBFMPJSKdV3rNNKqe3cslmLnDZ3Asv5yq1jWtkV6r3iNZ72JI= X-Received: by 2002:a05:600c:1389:b0:46e:41b0:f0cb with SMTP id 5b1f17b1804b1-46fa9affe50mr120077115e9.25.1760295157976; Sun, 12 Oct 2025 11:52:37 -0700 (PDT) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Sun, 12 Oct 2025 14:52:11 -0400 X-Gm-Features: AS18NWDZ7s2B-1EAY-5C18it79YiuENusuRpK4HWMYUf7e3OOy5lV8kx1tgj8WU Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000097ed2a0640faa7ed" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000097ed2a0640faa7ed Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Sep 10, 2025 at 6:24=E2=80=AFPM Peter Geoghegan wrote: > Attached is the latest revision of the prefetching patch, taken from > the shared branch that Tomas and I have been working on for some > weeks. Attached in a new revision, mostly just to keep CFBot happy following a recent trivial conflict introduced on master. The only other change in this revision is that it now carries the latest version of Andres' patch to prevent the scan from waiting for already-in-progress IO [1]. [1] https://postgr.es/m/zljergweqti7x67lg5ije2rzjusie37nslsnkjkkby4laqqbfw@= 3p3zu522yykv --=20 Peter Geoghegan --00000000000097ed2a0640faa7ed Content-Type: application/octet-stream; name="v20251012-0002-Add-amgetbatch-interface-for-index-scan-pr.patch" Content-Disposition: attachment; filename="v20251012-0002-Add-amgetbatch-interface-for-index-scan-pr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgo29k8n2 RnJvbSBkMjFiNzM2Y2FlZjA1ZWIxMTY2ZTIwZmVhYjgwOWI1NzkxODRhZjI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIwMjUxMDEyIDIv M10gQWRkIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGZvciBpbmRleCBzY2FuCiBwcmVmZXRjaGluZy4K CkFsbG93cyB0aGUgaW5kZXggQU0gdG8gcHJvdmlkZSBpdGVtcyAoVElEcyBhbmQgdHVwbGVzKSBp biBiYXRjaGVzLCB3aGljaAppcyB0aGVuIHVzZWQgdG8gaW1wbGVtZW50IHByZWZldGNoaW5nIG9m IGhlYXAgdHVwbGVzIGluIGluZGV4IHNjYW5zCihpbmNsdWRpbmcgaW5kZXgtb25seSBzY2Fucyku IFRoaXMgaXMgc2ltaWxhciB0byBwcmVmZXRjaGluZyBhbHJlYWR5CmRvbmUgaW4gYml0bWFwIHNj YW5zLCBhbmQgY2FuIHJlc3VsdCBpbiBzaWduaWZpY2FudCBzcGVlZHVwcy4KClRoZSBpbmRleCBB TSBtYXkgaW1wbGVtZW50IGFuIG9wdGlvbmFsICJhbWdldGJhdGNoIiBjYWxsYmFjaywgcmV0dXJu aW5nCmEgYmF0Y2ggb2YgaXRlbXMuIFRoZSBpbmRleGFtLmMgY29kZSB0aGVuIGhhbmRsZXMgdGhp cyB0cmFuc3BhcmVudGx5CnRocm91Z2ggdGhlIGV4aXN0aW5nICJnZXRuZXh0IiBpbnRlcmZhY2Uu Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgICAy MiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgICAg NCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8ICAxMDAg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAxNTAg KysKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgICA0MyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgICAgMSAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAxMzI4ICsr KysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAg ICAgICAgfCAgMzIxICsrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg ICAgICAgICB8ICA3MTcgKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMgICAgICAgICAgfCAgIDcxICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YyAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMg ICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jICAgICAgfCAgMTAxICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYyAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVsYXRpb24uYyAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3Ry ZWFtLmMgICAgICAgICB8ICAgMTQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMg ICAgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0ICAgICB8ICAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlIHwgICAgMSArCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAzICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAg ICAgICAgICAgICAgfCAgIDQwICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9p bmRleF9hbS5jICAgfCAgICAzICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dCAgICAgICAgfCAgICAzICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgICA4ICstCiAzMyBmaWxlcyBjaGFuZ2VkLCAyMTA5IGluc2VydGlvbnMo KyksIDg2NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1h cGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDYzZGQ0MWMxZi4uM2E2NTE3 NDRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk4LDYgKzE5OCwxNSBAQCB0eXBlZGVmIHZvaWQgKCph bXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFt Z2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwor dHlwZWRlZiBJbmRleFNjYW5CYXRjaCgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CisKKy8qIHJlbGVhc2UgYmF0Y2ggb2YgdmFsaWQg dHVwbGVzICovCit0eXBlZGVmIHZvaWQgKCphbWZyZWViYXRjaF9mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAvKiBmZXRj aCBhbGwgdmFsaWQgdHVwbGVzICovCiB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgICBUSURCaXRtYXAgKnRibSk7CkBA IC0yMDUsMTEgKzIxNCw5IEBAIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2NhbiwKIC8qIGVuZCBpbmRleCBzY2FuICovCiB0eXBlZGVmIHZvaWQg KCphbWVuZHNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCi0vKiBtYXJrIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1tYXJrcG9zX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLQotLyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlv biAqLwotdHlwZWRlZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mg c2Nhbik7CisvKiBpbnZhbGlkYXRlIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0 cmFja3Mgc2NhbidzIHBvc2l0aW9uICovCit0eXBlZGVmIHZvaWQgKCphbXBvc3Jlc2V0X2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKIAogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwg aW5kZXggc2NhbnMuCkBAIC0zMDksMTAgKzMxNiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVzY2FuX2Z1 bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgLyogY2Fu IGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBO VUxMICovCisJYW1mcmVlYmF0Y2hfZnVuY3Rpb24gYW1mcmVlYmF0Y2g7CS8qIGNhbiBiZSBOVUxM ICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNhbiBiZSBOVUxMICov CiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLQlhbW1hcmtwb3NfZnVuY3Rpb24gYW1t YXJrcG9zOwkvKiBjYW4gYmUgTlVMTCAqLwotCWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBv czsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8q IGNhbiBiZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFy YWxsZWwgaW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFt ZXN0aW1hdGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4 IDkyMDBhMjJiZC4uNzY3NTAzYmI2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2Vu YW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtMTUsNiArMTUsNyBAQAog I2RlZmluZSBHRU5BTV9ICiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cC5oIgorI2luY2x1ZGUgImFj Y2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJhY2Nlc3Mv c2tleS5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgpAQCAtMTE1LDYgKzExNiw3IEBA IHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRl bXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJl bHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRl c2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwog dHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBz dHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpA QCAtMjI4LDYgKzIzMCw4IEBAIGV4dGVybiB2b2lkIGluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5 X2Rpc3RhbmNlcyhJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkgYm9vbCByZWNoZWNr T3JkZXJCeSk7CiBleHRlcm4gYnl0ZWEgKmluZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBp bmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLAogCQkJCQkJCQkJRGF0dW0gYXR0b3B0aW9ucywgYm9v bCB2YWxpZGF0ZSk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5kZXhfYmF0Y2hfYWxsb2MoaW50 IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCk7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaF91bmxv Y2soUmVsYXRpb24gcmVsLCBib29sIGRyb3BQaW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGU2MGQzNGRhZC4uYmFlODZjOGU3IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oCkBAIC0xMTcsNiArMTE3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaEhlYXBE YXRhCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSB4c19iYXNlOwkvKiBBTSBpbmRlcGVuZGVudCBwYXJ0 IG9mIHRoZSBkZXNjcmlwdG9yICovCiAKIAlCdWZmZXIJCXhzX2NidWY7CQkvKiBjdXJyZW50IGhl YXAgYnVmZmVyIGluIHNjYW4sIGlmIGFueSAqLworCUJsb2NrTnVtYmVyIHhzX2JsazsJCQkvKiB4 c19jYnVmJ3MgYmxvY2sgbnVtYmVyLCBpZiBhbnkgKi8KIAkvKiBOQjogaWYgeHNfY2J1ZiBpcyBu b3QgSW52YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlciAqLwogfSBJbmRl eEZldGNoSGVhcERhdGE7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCBkYjEzNDVmNTQuLmY0MTBlMzM2 NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTM5LDEwICs5MzksMTAgQEAgdHlwZWRlZiBCVFZhY3V1 bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAgKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHBy b2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCiAgKiBk cm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJl dHVybmVkIGl0ZW1zLgogICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUg cGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdo ZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICog KHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5k IHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMg c2libGluZyBwYWdlLgorICogV2UgZHJvcCB0aGUgcGluICh3aGVuIGRyb3BQaW4gaXMgc2V0IGlu IGJhdGNoIHN0YXRlKSB0byBhdm9pZCBibG9ja2luZworICogcHJvZ3Jlc3MgYnkgVkFDVVVNIChz ZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJyZW50IFRJRAorICog cmVjeWNsaW5nIHNhZmUpLiAgV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQg dGhlIHBpbiBvbiB0aGUKKyAqIGN1cnJlbnQgcGFnZSBiZWZvcmUgbW92aW5nIG9uIHRvIGl0cyBz aWJsaW5nIHBhZ2UuCiAgKgogICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwg d2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKICAqIG1hdGNoZWQgaXRlbSwg b3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMg Z28KQEAgLTk2MSw3NCArOTYxLDI1IEBAIHR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0JLyog d2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCiAKIHR5cGVkZWYgc3RydWN0IEJU U2NhblBvc0RhdGEKIHsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQg bWVhbnMgdW5waW5uZWQpICovCi0KIAkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KIAlCbG9ja051bWJlciBjdXJyUGFnZTsJ CS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwogCUJsb2NrTnVtYmVyIHByZXZQ YWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KIAlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwogCiAJLyogc2NhbiBkaXJlY3Rpb24gZm9y IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCiAJU2NhbkRpcmVj dGlvbiBkaXI7CiAKLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBh c3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBs ZU9mZnNldDsKLQogCS8qCiAJICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVy IHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwogCSAqIGluZGV4IGVudHJpZXMgdG8gdGhl IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KIAkgKi8K IAlib29sCQltb3JlTGVmdDsKIAlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK LQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQg dGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3Ro IGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAq IGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVy bmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBp bmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4 IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0 ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8q IE1VU1QgQkUgTEFTVCAqLwogfSBCVFNjYW5Qb3NEYXRhOwogCiB0eXBlZGVmIEJUU2NhblBvc0Rh dGEgKkJUU2NhblBvczsKIAotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0o IFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8 fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcyku YnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkK LQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAot CWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcyku Y3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBC VFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3Vy clBhZ2UpCiAKIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUg U0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZv CkBAIC0xMDY2LDMyICsxMDE3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQog CUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10 eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9j cyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250 ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGlu Zm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZl ciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4 ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1 cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBp biBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9p bmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3 b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNo IGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxs IHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8q IHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBv c2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBk b24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBt YXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0 aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBh IG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3Mu Ci0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3Qg dmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kg Ki8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8K LQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwor CUJUU2NhblBvcwlwb3M7CiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3Bh cXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE5MSwxNCArMTExNywxNSBAQCBleHRlcm4gYm9v bCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFy YWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0 Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJ CQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgU2Nh bktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGZyZWViYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2b2lkIGJ0 cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0ZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4U2NhbkRl c2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg bWFya2JhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJ bmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0 ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywK QEAgLTEzMDYsOCArMTIzMyw5IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24g cmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIg KmJ1ZlAsIGludCBhY2Nlc3MpOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNl cnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQz MiBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwg T2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g SW5kZXhTY2FuQmF0Y2ggX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZm ZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdo dG1vc3QpOwogCiAvKgpAQCAtMTMyNyw3ICsxMjU1LDcgQEAgZXh0ZXJuIGJvb2wgX2J0X2NoZWNr a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFy cmEKIGV4dGVybiBib29sIF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwog ZXh0ZXJuIHZvaWQgX2J0X3NldF9zdGFydGlrZXkoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQ YWdlU3RhdGUgKnBzdGF0ZSk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRl c2Mgc2Nhbik7CitleHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xl aWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxh dGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCmluZGV4IGI1ZTBmYjM4Ni4uNTU0OTViMGUzIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKQEAgLTE2LDkgKzE2LDExIEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2lu Y2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Nw aW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtMTIxLDEwICsxMjMsMTU2IEBA IHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxl bEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0 YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3RyZWFtICpyczsKIH0gSW5kZXhGZXRjaFRhYmxl RGF0YTsKIAogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAorLyogRm9yd2FyZCBk ZWNsYXJhdGlvbiwgdGhlIHByZWZldGNoIGNhbGxiYWNrIG5lZWRzIEluZGV4U2NhbkRlc2NEYXRh LiAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhIEluZGV4U2NhbkJhdGNoRGF0 YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hQb3NJdGVtCS8qIHdoYXQgd2UgcmVt ZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLworeworCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkv KiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KKwlPZmZzZXROdW1iZXIgaW5kZXhPZmZz ZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLworCUxvY2F0aW9uSW5k ZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBh bnkgKi8KK30gSW5kZXhTY2FuQmF0Y2hQb3NJdGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUg YmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGluZGV4IEFNCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkJhdGNoRGF0YQoreworCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1 ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJy UGFnZSdzIExTTiAod2hlbiBkcm9wUGluKSAqLworCisJLyoKKwkgKiBBTS1zcGVjaWZpYyBzdGF0 ZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHNjYW4gd2l0aGluCisJ ICogdGhlIGluZGV4CisJICovCisJdm9pZAkgICAqcG9zOworCisJLyoKKwkgKiBUaGUgaXRlbXMg YXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCisJ ICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVu dCB0byBmaWxsIHRoZQorCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRo ZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgorCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBh IGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKi8K KwlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJ aW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8q IGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBu ZXZlciB1c2VkKSAqLworCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBpbmRleGVzIG9mIGtpbGxl ZCBpdGVtcyAqLworCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3Rv cmVkIGl0ZW1zICovCisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNj YW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQorCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBt YXRjaGluZyB0dXBsZXMgKHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiBFYWNoCisJICog aXMgb2Ygc2l6ZSBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZgorCSAqIHR1cGxlcy4KKwkgKgorCSAqIFhYWCBtYXliZSBjdXJyVHVwbGVzIHNo b3VsZCBiZSBwYXJ0IG9mIHRoZSBhbS1zcGVjaWZpYyBwZXItYmF0Y2ggc3RhdGUKKwkgKiBzdG9y ZWQgaW4gInBvc2l0aW9uIiBmaWVsZD8KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCisJLyoKKwkgKiBiYXRjaCBjb250ZW50cyAo VElEcywgaW5kZXggdHVwbGVzLCBraWxsIGJpdG1hcCwgLi4uKQorCSAqCisJICogWFhYIFNob3Vs ZG4ndCB0aGlzIGJlIHBhcnQgb2YgdGhlICJJbmRleFNjYW5CYXRjaFBvc0l0ZW0iIHN0cnVjdD8g VG8KKwkgKiBrZWVwIGV2ZXJ5dGhpbmcgaW4gb25lIHBsYWNlPyBPciB3aHkgc2hvdWxkIHdlIGhh dmUgc2VwYXJhdGUgYXJyYXlzPworCSAqIE9uZSBhZHZhbnRhZ2UgaXMgdGhhdCB3ZSBkb24ndCBu ZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQKKwkgKiB3ZSBkb24ndCBuZWVk IC4uLiBlLmcuIGlmIHdlIGRvbid0IG5lZWQgaGVhcCB0dXBsZXMsIHdlIGRvbid0IGFsbG9jYXRl CisJICogdGhhdC4gV2UgY291bGRuJ3QgZG8gdGhhdCB3aXRoIGV2ZXJ5dGhpbmcgaW4gb25lIHN0 cnVjdC4KKwkgKi8KKwljaGFyCSAgICppdGVtc3Zpc2liaWxpdHk7CS8qIEluZGV4LW9ubHkgc2Nh biB2aXNpYmlsaXR5IGNhY2hlICovCisKKwlJbmRleFNjYW5CYXRjaFBvc0l0ZW0gaXRlbXNbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKK30gSW5kZXhTY2FuQmF0Y2hEYXRhOworCisvKgorICogUG9z aXRpb24gaW4gdGhlIHF1ZXVlIG9mIGJhdGNoZXMgLSBpbmRleCBvZiBhIGJhdGNoLCBpbmRleCBv ZiBpdGVtIGluIGEgYmF0Y2guCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoUG9z Cit7CisJaW50CQkJYmF0Y2g7CisJaW50CQkJaW5kZXg7Cit9IEluZGV4U2NhbkJhdGNoUG9zOwor Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSBJbmRleFNjYW5EZXNjRGF0YTsKK3R5 cGVkZWYgYm9vbCAoKkluZGV4UHJlZmV0Y2hDYWxsYmFjaykgKEluZGV4U2NhbkRlc2NEYXRhICog c2NhbiwKKwkJCQkJCQkJCSAgIHZvaWQgKmFyZywKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNo UG9zICpwb3MpOworCisvKgorICogU3RhdGUgdXNlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcywg d2hpY2ggbWFuYWdlIHBlci1wYWdlIGJhdGNoZXMgb2YgaXRlbXMKKyAqIHdpdGggbWF0Y2hpbmcg aW5kZXggdHVwbGVzIHVzaW5nIGEgY2lyY3VsYXIgYnVmZmVyCisgKi8KK3R5cGVkZWYgc3RydWN0 IEluZGV4U2NhbkJhdGNoU3RhdGUKK3sKKwkvKiBJbmRleCBBTSBkcm9wcyBsZWFmIHBpbiBiZWZv cmUgYW1nZXRiYXRjaCByZXR1cm5zPyAqLworCWJvb2wJCWRyb3BQaW47CisKKwkvKgorCSAqIERp ZCB3ZSByZWFkIHRoZSBmaW5hbCBiYXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPyBUaGUgYmF0 Y2hlcyBtYXkgYmUKKwkgKiBsb2FkZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGFuZCB3ZSBuZWVk IHRvIHJlbWVtYmVyIHdoZW4gd2UgZmFpbCB0bworCSAqIGxvYWQgdGhlIG5leHQgYmF0Y2ggaW4g YSBnaXZlbiBzY2FuICh3aGljaCBtZWFucyAibm8gbW9yZSBiYXRjaGVzIikuCisJICogYW1nZXRi YXRjaCBtYXkgcmVzdGFydCB0aGUgc2NhbiBvbiB0aGUgZ2V0IGNhbGwsIHNvIHdlIG5lZWQgdG8g cmVtZW1iZXIKKwkgKiBpdCdzIG92ZXIuCisJICovCisJYm9vbAkJZmluaXNoZWQ7CisJYm9vbAkJ cmVzZXQ7CisKKwkvKgorCSAqIERpZCB3ZSBkaXNhYmxlIHByZWZldGNoaW5nL3VzZSBvZiBhIHJl YWQgc3RyZWFtIGJlY2F1c2UgaXQgZGlkbid0IHBheQorCSAqIGZvciBpdHNlbGY/CisJICovCisJ Ym9vbAkJcHJlZmV0Y2hpbmdMb2NrZWRJbjsKKwlib29sCQlkaXNhYmxlZDsKKworCS8qCisJICog RHVyaW5nIHByZWZldGNoaW5nLCBjdXJyZW50UHJlZmV0Y2hCbG9jayBpcyB0aGUgdGFibGUgQU0g YmxvY2sgbnVtYmVyCisJICogdGhhdCB3YXMgcmV0dXJuZWQgYnkgb3VyIHJlYWQgc3RyZWFtIGNh bGxiYWNrIG1vc3QgcmVjZW50bHkuICBVc2VkIHRvCisJICogc3VwcHJlc3MgZHVwbGljYXRlIHN1 Y2Nlc3NpdmUgcmVhZCBzdHJlYW0gYmxvY2sgcmVxdWVzdHMuCisJICoKKwkgKiBQcmVmZXRjaGlu ZyBjYW4gc3RpbGwgcGVyZm9ybSBub24tc3VjY2Vzc2l2ZSByZXF1ZXN0cyBmb3IgdGhlIHNhbWUK KwkgKiBibG9jayBudW1iZXIgKGluIGdlbmVyYWwgd2UncmUgcHJlZmV0Y2hpbmcgaW4gZXhhY3Rs eSB0aGUgc2FtZSBvcmRlcgorCSAqIHRoYXQgdGhlIHNjYW4gd2lsbCByZXR1cm4gdGFibGUgQU0g VElEcyBpbikuICBXZSBuZWVkIHRvIGF2b2lkCisJICogZHVwbGljYXRlIHN1Y2Nlc3NpdmUgcmVx dWVzdHMgYmVjYXVzZSB0YWJsZSBBTXMgZXhwZWN0IHRvIGJlIGFibGUgdG8KKwkgKiBoYW5nIG9u IHRvIGJ1ZmZlciBwaW5zIGFjcm9zcyB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSBjYWxscy4KKwkg Ki8KKwlCbG9ja051bWJlciBjdXJyZW50UHJlZmV0Y2hCbG9jazsKKworCS8qCisJICogQ3VycmVu dCBzY2FuIGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMuIFRoaXMg aXMgdXNlZAorCSAqIHRvIGxvYWQgZGF0YSBpbiB0aGUgcmVhZCBzdHJlYW0gQVBJIGNhbGxiYWNr LCBldGMuCisJICovCisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CisKKwkvKiBwb3NpdGlvbnMg aW4gdGhlIHF1ZXVlIG9mIGJhdGNoZXMgKGJhdGNoICsgaXRlbSkgKi8KKwlJbmRleFNjYW5CYXRj aFBvcyByZWFkUG9zOwkvKiByZWFkIHBvc2l0aW9uICovCisJSW5kZXhTY2FuQmF0Y2hQb3Mgc3Ry ZWFtUG9zOwkvKiBwcmVmZXRjaCBwb3NpdGlvbiAoZm9yIHJlYWQgc3RyZWFtIEFQSSkgKi8KKwlJ bmRleFNjYW5CYXRjaFBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKwor CUluZGV4U2NhbkJhdGNoRGF0YSAqbWFya0JhdGNoOworCisJLyoKKwkgKiBBcnJheSBvZiBiYXRj aGVzIHJldHVybmVkIGJ5IHRoZSBBTS4gVGhlIGFycmF5IGhhcyBhIGNhcGFjaXR5IChidXQgY2Fu CisJICogYmUgcmVzaXplZCBpZiBuZWVkZWQpLiBUaGUgZmlyc3RCYXRjaCBpcyBhbiBpbmRleCBv ZiB0aGUgZmlyc3QgYmF0Y2gsCisJICogYnV0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYnkgKG1v ZHVsbyBtYXhCYXRjaGVzKSBpbnRvIGluZGV4IGluIHRoZQorCSAqIGJhdGNoZXMgYXJyYXkuCisJ ICovCisJaW50CQkJbWF4QmF0Y2hlczsJCS8qIHNpemUgb2YgdGhlIGJhdGNoZXMgYXJyYXkgKi8K KwlpbnQJCQlmaXJzdEJhdGNoOwkJLyogZmlyc3QgdXNlZCBiYXRjaCBzbG90ICovCisJaW50CQkJ bmV4dEJhdGNoOwkJLyogbmV4dCBlbXB0eSBiYXRjaCBzbG90ICovCisKKwlJbmRleFNjYW5CYXRj aERhdGEgKipiYXRjaGVzOworCisJLyogY2FsbGJhY2sgdG8gc2tpcCBwcmVmZXRjaGluZyBpbiBJ T1MgZXRjLiAqLworCUluZGV4UHJlZmV0Y2hDYWxsYmFjayBwcmVmZXRjaDsKKwl2b2lkCSAgICpw cmVmZXRjaEFyZzsKK30JCQlJbmRleFNjYW5CYXRjaFN0YXRlOworCiAvKgogICogV2UgdXNlIHRo ZSBzYW1lIEluZGV4U2NhbkRlc2NEYXRhIHN0cnVjdHVyZSBmb3IgYm90aCBhbWdldHR1cGxlLWJh c2VkCiAgKiBhbmQgYW1nZXRiaXRtYXAtYmFzZWQgaW5kZXggc2NhbnMuICBTb21lIGZpZWxkcyBh cmUgb25seSByZWxldmFudCBpbgpAQCAtMTM4LDYgKzI4Niw4IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IFNuYXBzaG90RGF0YSAqeHNfc25hcHNob3Q7CS8qIHNu YXBzaG90IHRvIHNlZSAqLwogCWludAkJCW51bWJlck9mS2V5czsJLyogbnVtYmVyIG9mIGluZGV4 IHF1YWxpZmllciBjb25kaXRpb25zICovCiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVt YmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNo U3RhdGU7CS8qIGFtZ2V0YmF0Y2ggcmVsYXRlZCBzdGF0ZSAqLworCiAJc3RydWN0IFNjYW5LZXlE YXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRvcnMgKi8K IAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRlcmluZyBv cCBkZXNjcmlwdG9ycyAqLwogCWJvb2wJCXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3Rz IGluZGV4IHR1cGxlcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA3OTQwODc0MzEuLjNmZTQ2 NTZjNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzNDYsNyArMTM0Niw3IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4T3B0SW5mbwogCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZh Y2U/ICovCiAJYm9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9vbAkJYW1jYW5wYXJhbGxlbDsKLQkv KiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8gKi8KKwkvKiBpcyBBTSBwcmVwYXJl ZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9vbAkJYW1jYW5tYXJrcG9zOwogCS8q IEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFtYXBpLmgg aGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oCmluZGV4IGI1MjNiY2RhOC4uMDBmNGMzZDAwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUx LDYgKzUxLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIENvc3QgZGlzYWJsZV9jb3N0OwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfaW5kZXhzY2FuOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4 c2Nhbl9wcmVmZXRjaDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleG9ubHlz Y2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRl eCA3ZmY3NDY3ZTQuLjNjYTQ2YjkxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk2LDgg KzI5Niw3IEBAIGJyaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdl dHR1cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcDsK IAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGJyaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJr cG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXgg NzhmN2I3YTI0Li5jOWRlM2QxMjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC04NCw4 ICs4NCw3IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtZ2V0 dHVwbGUgPSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXA7CiAJ YW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9z ID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1w b3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVM TDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5h bXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCBhOTY3OTZk NWMuLjkxMGQ3MzZhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTA1LDggKzEwNSw3IEBA IGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0g Z2lzdGdldHR1cGxlOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBnaXN0Z2V0Yml0bWFwOwog CWFtcm91dGluZS0+YW1lbmRzY2FuID0gZ2lzdGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtw b3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBO VUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUt PmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDUzMDYx YzgxOS4uYjNkN2Y4MjVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMDQsOCArMTA0LDcg QEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUg PSBoYXNoZ2V0dHVwbGU7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXA7 CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFy a3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtcG9zcmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGlu ZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwppbmRleCBiY2JhYzg0NGIuLjZjNDFiMzExOSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC04NCw3ICs4NCw5IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBh bGxvYzAoc2l6ZW9mKEluZGV4RmV0Y2hIZWFwRGF0YSkpOwogCiAJaHNjYW4tPnhzX2Jhc2UucmVs ID0gcmVsOworCWhzY2FuLT54c19iYXNlLnJzID0gTlVMTDsKIAloc2Nhbi0+eHNfY2J1ZiA9IElu dmFsaWRCdWZmZXI7CisJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAogCXJl dHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CkBAIC05NCwxMCArOTYsMTQgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAorCWlmIChzY2Fu LT5ycykKKwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+cnMpOworCiAJaWYgKEJ1ZmZlcklzVmFs aWQoaHNjYW4tPnhzX2NidWYpKQogCXsKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7 CiAJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJaHNjYW4tPnhzX2JsayA9IElu dmFsaWRCbG9ja051bWJlcjsKIAl9CiB9CiAKQEAgLTEwOCw2ICsxMTQsOSBAQCBoZWFwYW1faW5k ZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAKIAloZWFwYW1faW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbik7CiAKKwlpZiAoc2Nhbi0+cnMpCisJCXJlYWRfc3RyZWFtX2VuZChz Y2FuLT5ycyk7CisKIAlwZnJlZShoc2Nhbik7CiB9CiAKQEAgLTEyNCwyMyArMTMzLDM3IEBAIGhl YXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwK IAogCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2FuIHNraXAg dGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8K LQlpZiAoISpjYWxsX2FnYWluKQorCS8qCisJICogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlm IHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAod2UgY2FuIHNraXAgdGhpcworCSAqIGlmIHdlJ3Jl IGluIG1pZC1IT1QgY2hhaW4pCisJICovCisJaWYgKCEqY2FsbF9hZ2FpbiAmJiBoc2Nhbi0+eHNf YmxrICE9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKIAl7Ci0JCS8qIFN3aXRjaCB0 byBjb3JyZWN0IGJ1ZmZlciBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHkgKi8KLQkJQnVmZmVy CQlwcmV2X2J1ZiA9IGhzY2FuLT54c19jYnVmOworCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidz IGJsb2NrIG51bWJlciBmb3IgbmV4dCB0aW1lICovCisJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJaWYg KEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+ eHNfY2J1Zik7CiAKIAkJLyoKLQkJICogUHJ1bmUgcGFnZSwgYnV0IG9ubHkgaWYgd2Ugd2VyZW4n dCBhbHJlYWR5IG9uIHRoaXMgcGFnZQorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRo ZSBzdHJlYW0gd2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVz IG5leHQgKHRob3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKIAkJ ICovCi0JCWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVu ZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWlmIChzY2FuLT5y cykKKwkJCWhzY2FuLT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc2Nhbi0+cnMs IE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhz X2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKworCQkvKgorCQkgKiBQcnVuZSBwYWdlIHdoZW4g aXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQorCQkgKi8KKwkJaGVhcF9wYWdlX3BydW5l X29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsKIAl9CiAKKwkvKiBBc3Nl cnQgdGhhdCB0aGUgVElEJ3MgYmxvY2sgbnVtYmVyJ3MgYnVmZmVyIGlzIG5vdyBwaW5uZWQgKi8K KwlBc3NlcnQoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpOworCUFzc2VydChCdWZmZXJH ZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhzX2Jsayk7CisKIAkvKiBP YnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxp dHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJ Z290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2dlbmFtLmMKaW5kZXggMGNiMjdhZjEzLi41NWU2MGM5ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9nZW5hbS5jCkBAIC04OSw2ICs4OSw3IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9u IGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19zbmFw c2hvdCA9IEludmFsaWRTbmFwc2hvdDsJLyogY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICov CiAJc2Nhbi0+bnVtYmVyT2ZLZXlzID0gbmtleXM7CiAJc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA9 IG5vcmRlcmJ5czsKKwlzY2FuLT5iYXRjaFN0YXRlID0gTlVMTDsJLyogdXNlZCBieSBhbWdldGJh dGNoIGluZGV4IEFNcyAqLwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhl cmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGFtLmMKaW5kZXggMDQ5MmQ5MmQyLi5jYmE1MTI4NjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKICNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgi CQkvKiBYWFggZm9yIE1heFRJRHNQZXJCVHJlZVBhZ2UgKHNob3VsZCByZW1vdmUpICovCiAjaW5j bHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIK ICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgpAQCAtNTEsOSArNTIsMTEgQEAKICNpbmNsdWRl ICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVk ZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9y YWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAi dXRpbHMvcnVsZXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCkBAIC0xMDcsOCArMTEwLDE0NiBAQCBkbyB7IFwKIHN0YXRpYyBJ bmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25h cHNob3QsCiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRl bXBfc25hcCk7CitzdGF0aWMgSXRlbVBvaW50ZXIgaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgSXRlbVBv aW50ZXIgaW5kZXhfcmV0YWlsX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pOwogc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX3JlbGF0aW9u X2tpbmQoUmVsYXRpb24gcik7CiAKKy8qIGluZGV4IGJhdGNoaW5nICovCitzdGF0aWMgdm9pZCBp bmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitzdGF0aWMgdm9pZCBpbmRleF9i YXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpOworc3RhdGljIHZv aWQgaW5kZXhfYmF0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitzdGF0aWMgYm9vbCBpbmRl eF9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pOworc3RhdGljIHZvaWQgaW5kZXhfYmF0Y2hfZnJlZShJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworc3RhdGljIEJsb2NrTnVtYmVyIGluZGV4X3NjYW5fc3Ry ZWFtX3JlYWRfbmV4dChSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCQkJCSAgIHZvaWQgKmNh bGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJCQkJICAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRh KTsKKworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaW5kZXhfYmF0Y2hf cG9zX2FkdmFuY2UoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkJICAgSW5kZXhT Y2FuQmF0Y2hQb3MgKnBvcywKKwkJCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX3Bvc19yZXNldChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoUG9zICpwb3MpOworc3RhdGljIHZvaWQgaW5kZXhfYmF0Y2hfa2ls bF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKK3N0YXRpYyB2b2lkIEFzc2VydENoZWNrQmF0 Y2hQb3NWYWxpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoUG9zICpwb3MpOwor c3RhdGljIHZvaWQgQXNzZXJ0Q2hlY2tCYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKTsKK3N0YXRpYyB2b2lkIEFzc2VydENoZWNrQmF0Y2hlcyhJbmRleFNjYW5E ZXNjIHNjYW4pOworCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzIChsZWFmIHBh Z2VzKSB3ZSBjYW4ga2VlcCBpbiBtZW1vcnkuCisgKgorICogVGhlIHZhbHVlIDY0IHZhbHVlIGlz IGFyYml0cmFyeSwgaXQncyBhYm91dCAxTUIgb2YgZGF0YSB3aXRoIDhLQiBwYWdlcworICogKDUx MmtCIGZvciBwYWdlcywgYW5kIHRoZW4gYSBiaXQgb2Ygb3ZlcmhlYWQpLiBXZSBzaG91bGQgbm90 IHJlYWxseSBuZWVkCisgKiB0aGlzIG1hbnkgYmF0Y2hlcyBpbiBtb3N0IGNhc2VzLCB0aG91Z2gu IFRoZSByZWFkIHN0cmVhbSBsb29rcyBhaGVhZCBqdXN0CisgKiBlbm91Z2ggdG8gcXVldWUgZW5v dWdoIElPcywgYWRqdXN0aW5nIHRoZSBkaXN0YW5jZSAoVElEcywgYnV0IHVsdGltYXRlbHkKKyAq IHRoZSBudW1iZXIgb2YgZnV0dXJlIGJhdGNoZXMpIHRvIG1lZXQgdGhhdC4KKyAqCisgKiBJbiBt b3N0IGNhc2VzIGFuIGluZGV4IGxlYWYgcGFnZSBoYXMgbWFueSAoaHVuZHJlZHMpIGluZGV4IHR1 cGxlcywgYW5kCisgKiBpdCdzIGVub3VnaCB0byByZWFkIG9uZSBvciBtYXliZSB0d28gbGVhZiBw YWdlcyBhaGVhZCB0byBzYXRpc2Z5IHRoZQorICogZGlzdGFuY2UuCisgKgorICogQnV0IHRoZXJl IGFyZSBjYXNlcyB3aGVyZSB0aGlzIG1heSBub3QgcXVpdGUgd29yaywgZm9yIGV4YW1wbGU6Cisg KgorICogYSkgYmxvYXRlZCBpbmRleCAtIG1hbnkgcGFnZXMgb25seSBoYXZlIGEgc2luZ2xlIGlu ZGV4IGl0ZW0sIHNvIHRoYXQKKyAqICAgIGFjaGlldmluZyB0aGUgZGlzdGFuY2UgcmVxdWlyZXMg dG9vIG1hbnkgbGVhZiBwYWdlcworICoKKyAqIGIpIGNvcnJlbGF0ZWQgaW5kZXggLSBkdXBsaWNh dGUgYmxvY2tzIGFyZSBza2lwcGVkICh0aGUgY2FsbGJhY2sgZG9lcyBub3QKKyAqICAgIGV2ZW4g cmV0dXJuIHRob3NlLCB0aGFua3MgdG8gY3VycmVudFByZWZldGNoQmxvY2sgb3B0aW1pemF0aW9u KSwgYW5kIGFyZQorICogICAgbW9zdGx5IGlnbm9yZWQgaW4gdGhlIGRpc3RhbmNlIGhldXJpc3Rp Y3MgKHJlYWQgc3RyZWFtIGRvZXMgbm90IGV2ZW4gc2VlCisgKiAgICB0aG9zZSBUSURzLCBhbmQg dGhlcmUncyBubyBJL08gZWl0aGVyKQorICoKKyAqIGMpIGluZGV4LW9ubHkgc2NhbiAtIHRoZSBj YWxsYmFjayBza2lwcyBUSURzIGZyb20gYWxsLXZpc2libGUgYmxvY2tzIChub3QKKyAqICAgIHJl YWRpbmcgdGhvc2UgaXMgdGhlIHdob2xlIHBvaW50IG9mIGluZGV4LW9ubHkgc2NhbnMpLCBhbmQg c28gaXQncworICogICAgaW52aXNpYmxlIHRvIHRoZSBkaXN0YW5jZSAvIElPIGhldXJpc3RpY3Mg KHNpbWlsYXJseSB0byBkdXBsaWNhdGVzKQorICoKKyAqIEluIHRoZXNlIGNhc2VzIHdlIG1pZ2h0 IG5lZWQgdG8gcmVhZCBhIHNpZ25pZmljYW50IG51bWJlciBvZiBiYXRjaGVzIHRvCisgKiBmaW5k IHRoZSBmaXJzdCBibG9jayB0byByZXR1cm4gdG8gdGhlIHJlYWQgc3RyZWFtLiBJdCdzIG5vdCBj bGVhciBpZgorICogbG9va2luZyB0aGlzIGZhciBhaGVhZCBpcyB3b3J0aCBpdCAtIGl0J3MgYSBs b3Qgb2Ygd29yayAvIHN5bmNocm9ub3VzCisgKiBJL08sIGFuZCB0aGUgcXVlcnkgbWF5IHRlcm1p bmF0ZSBiZWZvcmUgcmVhY2hpbmcgdGhvc2UgVElEcyAoZS5nLiBkdWUgdG8KKyAqIGEgTElNSVQg Y2xhdXNlKS4KKyAqCisgKiBDdXJyZW50bHksIHRoZXJlJ3Mgbm8gd2F5IHRvICJwYXVzZSIgYSBy ZWFkIHN0cmVhbSAtIHN0b3AgbG9va2luZyBhaGVhZAorICogZm9yIGEgd2hpbGUsIGJ1dCB0aGVu IHJlc3VtZSB0aGUgd29yayB3aGVuIGEgYmF0Y2ggZ2V0cyBmcmVlZC4gVG8gc2ltdWxhdGUKKyAq IHRoaXMsIHRoZSByZWFkIHN0cmVhbSBpcyB0ZXJtaW5hdGVkIChhcyBpZiB0aGVyZSB3ZXJlIG5v IG1vcmUgZGF0YSksIGFuZAorICogdGhlbiByZXNldCBhZnRlciBkcmFpbmluZyBhbGwgdGhlIHF1 ZXVlZCBibG9ja3MgaW4gb3JkZXIgdG8gcmVzdW1lIHdvcmsuCisgKiBUaGlzIHdvcmtzLCBidXQg aXQgInN0YWxscyIgdGhlIEkvTyBxdWV1ZS4gSWYgaXQgaGFwcGVucyB2ZXJ5IG9mdGVuLCBpdAor ICogY2FuIGJlIGEgc2VyaW91cyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLgorCisgKiBYWFggTWF5 YmUgNjQgaXMgdG9vIGhpZ2g/IEl0IGFsc28gZGVmaW5lcyB0aGUgbWF4aW11bSBhbW91bnQgb2Yg b3ZlcmhlYWQKKyAqIGFsbG93ZWQuIEluIHRoZSB3b3JzdCBjYXNlLCByZWFkaW5nIGEgc2luZ2xl IHJvdyBtaWdodCB0cmlnZ2VyIHJlYWRpbmcgdGhpcworICogbWFueSBsZWFmIHBhZ2VzIChlLmcu IHdpdGggSU9TLCBpZiBtb3N0IHBhZ2VzIGFyZSBhbGwtdmlzaWJsZSkuIFdoaWNoIG1pZ2h0Cisg KiBiZSBhbiBpc3N1ZSB3aXRoIExJTUlUIHF1ZXJpZXMsIHdoZW4gd2UgYWN0dWFsbHkgd29uJ3Qg Z2V0IHRoYXQgZmFyLgorICovCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJNjQKKwor LyoKKyAqIFRocmVzaG9sZHMgY29udHJvbGxpbmcgd2hlbiB3ZSBjYW5jZWwgdXNlIG9mIGEgcmVh ZCBzdHJlYW0gdG8gZG8KKyAqIHByZWZldGNoaW5nCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9N SU5fRElTVEFOQ0VfTkJBVENIRVMJMjAKKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5fVFVQTEVfRElT VEFOQ0UJCTcKKworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pIFwKKwkoKHNj YW4pLT5iYXRjaFN0YXRlLT5uZXh0QmF0Y2ggLSAoc2NhbiktPmJhdGNoU3RhdGUtPmZpcnN0QmF0 Y2gpCisKKy8qIERpZCB3ZSBhbHJlYWR5IGxvYWQgYmF0Y2ggd2l0aCB0aGUgcmVxdWVzdGVkIGlu ZGV4PyAqLworLyogWFhYIHNob3VsZG4ndCB0aGlzIGFsc28gY29tcGFyZSBmaXJzdEJhdGNoPyBt YXliZSB0aGUgYmF0Y2ggd2FzIGZyZWVkPyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0xP QURFRChzY2FuLCBpZHgpIFwKKwkoKGlkeCkgPCAoc2NhbiktPmJhdGNoU3RhdGUtPm5leHRCYXRj aCkKKworLyogSGF2ZSB3ZSBsb2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXM/ICov CisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2FuKSBcCisJKElOREVYX1NDQU5fQkFU Q0hfQ09VTlQoc2NhbikgPT0gc2Nhbi0+YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcykKKworLyogUmV0 dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguICovCisvKiBYWFggU2hvdWxkIHRoaXMg aGF2ZSBhbiBhc3NlcnQgdG8gZW5mb3JjZSB0aGUgYmF0Y2ggaXMgbG9hZGVkPyBNYXliZSB0aGUK KyAqIGluZGV4IGlzIHRvbyBmYXIgYmFjaywgYnV0IHRoZXJlIGhhcHBlbnMgdG8gYmUgYSBiYXRj aCBpbiB0aGUgcmlnaHQgc2xvdD8KKyAqIENvdWxkIGVhc2lseSBoYXBwZW4gaWYgd2UgaGF2ZSB0 byBrZWVwIG1hbnkgYmF0Y2hlcyBhcm91bmQuCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRD SChzY2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc1soaWR4KSAlIElO REVYX1NDQU5fTUFYX0JBVENIRVNdKQorCisvKiBJcyB0aGUgcG9zaXRpb24gaW52YWxpZC91bmRl ZmluZWQ/ICovCisjZGVmaW5lIElOREVYX1NDQU5fUE9TX0lOVkFMSUQocG9zKSBcCisJCSgoKHBv cyktPmJhdGNoID09IC0xKSAmJiAoKHBvcyktPmluZGV4ID09IC0xKSkKKworI2lmZGVmIElOREVY QU1fREVCVUcKKyNkZWZpbmUgREVCVUdfTE9HKC4uLikgZWxvZyhBbVJlZ3VsYXJCYWNrZW5kUHJv Y2VzcygpID8gTk9USUNFIDogREVCVUcyLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIERF QlVHX0xPRyguLi4pCisjZW5kaWYKKworLyogZGVidWc6IHByaW50IGluZm8gYWJvdXQgY3VycmVu dCBiYXRjaGVzICovCitzdGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfcHJpbnQoY29uc3QgY2hhciAq bGFiZWwsIEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKyNpZmRlZiBJTkRFWEFNX0RFQlVHCisJSW5k ZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hlcyA9IHNjYW4tPmJhdGNoU3RhdGU7CisKKwlpZiAoIXNj YW4tPmJhdGNoU3RhdGUpCisJCXJldHVybjsKKworCWlmICghQW1SZWd1bGFyQmFja2VuZFByb2Nl c3MoKSkKKwkJcmV0dXJuOworCWlmIChJc0NhdGFsb2dSZWxhdGlvbihzY2FuLT5pbmRleFJlbGF0 aW9uKSkKKwkJcmV0dXJuOworCisJREVCVUdfTE9HKCIlczogYmF0Y2hlcyBmaXJzdEJhdGNoICVk IG5leHRCYXRjaCAlZCBtYXhCYXRjaGVzICVkIiwKKwkJCSAgbGFiZWwsCisJCQkgIGJhdGNoZXMt PmZpcnN0QmF0Y2gsIGJhdGNoZXMtPm5leHRCYXRjaCwgYmF0Y2hlcy0+bWF4QmF0Y2hlcyk7CisK Kwlmb3IgKGludCBpID0gYmF0Y2hlcy0+Zmlyc3RCYXRjaDsgaSA8IGJhdGNoZXMtPm5leHRCYXRj aDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2hEYXRhICpiYXRjaCA9IElOREVYX1NDQU5fQkFU Q0goc2NhbiwgaSk7CisJCUJUU2NhblBvcwlwb3MgPSAoQlRTY2FuUG9zKSBiYXRjaC0+cG9zOwor CisJCURFQlVHX0xPRygiICAgIGJhdGNoICVkIGN1cnJQYWdlICV1ICVwIGZpcnN0ICVkIGxhc3Qg JWQga2lsbGVkICVkIiwKKwkJCQkgIGksIHBvcy0+Y3VyclBhZ2UsIGJhdGNoLCBiYXRjaC0+Zmly c3RJdGVtLCBiYXRjaC0+bGFzdEl0ZW0sCisJCQkJICBiYXRjaC0+bnVtS2lsbGVkKTsKKwl9Cisj ZW5kaWYKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCQkJICAgaW5kZXhfIGludGVyZmFjZSBmdW5jdGlv bnMKQEAgLTI4Myw2ICs0MjQsOSBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9 IGluc3RydW1lbnQ7CiAKKwlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2gg IT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hfaW5pdChzY2FuKTsKKwogCS8qIHByZXBhcmUgdG8gZmV0 Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uKTsKIApAQCAtMzgwLDYgKzUyNCwxMiBA QCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCXNjYW4tPmtpbGxfcHJpb3JfdHVw bGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBm YWxzZTsKIAorCS8qCisJICogUmVzZXQgdGhlIGJhdGNoaW5nLiBUaGlzIG1ha2VzIGl0IGxvb2sg bGlrZSB0aGVyZSBhcmUgbm8gYmF0Y2hlcywKKwkgKiBkaXNjYXJkcyByZWFkcyBhbHJlYWR5IHNj aGVkdWxlZCB3aXRoaW4gdGhlIHJlYWQgc3RyZWFtLCBldGMuCisJICovCisJaW5kZXhfYmF0Y2hf cmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1y ZXNjYW4oc2Nhbiwga2V5cywgbmtleXMsCiAJCQkJCQkJCQkJCW9yZGVyYnlzLCBub3JkZXJieXMp OwogfQpAQCAtMzk0LDYgKzU0NCw5IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu KQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKKwkv KiBDbGVhbnVwIGJhdGNoaW5nLCBzbyB0aGF0IHRoZSBBTSBjYW4gcmVsZWFzZSBwaW5zIGFuZCBz byBvbi4gKi8KKwlpbmRleF9iYXRjaF9lbmQoc2Nhbik7CisKIAkvKiBSZWxlYXNlIHJlc291cmNl cyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54 c19oZWFwZmV0Y2gpCiAJewpAQCAtNDIxLDEwICs1NzQsNDMgQEAgaW5kZXhfZW5kc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4pCiB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikK IHsKLQlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1hcmtwb3MpOworCUlu ZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGUgPSBzY2FuLT5iYXRjaFN0YXRlOworCUluZGV4 U2NhbkJhdGNoUG9zICptYXJrUG9zID0gJmJhdGNoU3RhdGUtPm1hcmtQb3M7CisJSW5kZXhTY2Fu QmF0Y2hEYXRhICptYXJrQmF0Y2ggPSBiYXRjaFN0YXRlLT5tYXJrQmF0Y2g7CiAKLQlzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCVNDQU5fQ0hFQ0tTOwor CisJLyoKKwkgKiBGSVhNRSB0aGlzIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGVyZSBhY3R1YWxs eSBpcyBhIGJhdGNoIHN0YXRlLiBGb3IKKwkgKiBub3cgaXQgd29ya3MgdGhlIG9ubHkgQU0gd2l0 aCBtYXJrL3Jlc3RvcmUgc3VwcG9ydCBpcyBidHJlZSwgYW5kIHRoYXQKKwkgKiBoYXMgYmF0Y2hp bmcuIEJ1dCB3ZSBzaG91bGQgbm90IHJlbHkgb24gdGhhdCwgcmlnaHQ/CisJICovCisKKwkvKgor CSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsgYmF0Y2ggKGlmIGFueSksIGJ1dCBvbmx5IGlmIHRo ZSBiYXRjaCBpcyBubworCSAqIGxvbmdlciB2YWxpZCAoaW4gdGhlIGN1cnJlbnQgZmlyc3QvbmV4 dCByYW5nZSkuIFRoaXMgbWVhbnMgdGhhdCBpZgorCSAqIHdlJ3JlIG1hcmtpbmcgdGhlIHNhbWUg YmF0Y2ggKGRpZmZlcmVudCBpdGVtKSwgd2UgZG9uJ3QgcmVhbGx5IGRvCisJICogYW55dGhpbmcu CisJICoKKwkgKiBYWFggU2hvdWxkIGhhdmUgc29tZSBtYWNybyBmb3IgdGhpcyBjaGVjaywgSSBn dWVzcy4KKwkgKi8KKwlpZiAobWFya0JhdGNoICE9IE5VTEwgJiYgKG1hcmtQb3MtPmJhdGNoIDwg YmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCB8fAorCQkJCQkJCSAgbWFya1Bvcy0+YmF0Y2ggPj0gYmF0 Y2hTdGF0ZS0+bmV4dEJhdGNoKSkKKwl7CisJCWJhdGNoU3RhdGUtPm1hcmtCYXRjaCA9IE5VTEw7 CisJCWluZGV4X2JhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNoKTsKKwl9CisKKwkvKiBqdXN0IGNv cHkgdGhlIHJlYWQgcG9zaXRpb24gKHdoaWNoIGhhcyB0byBiZSB2YWxpZCkgKi8KKwliYXRjaFN0 YXRlLT5tYXJrUG9zID0gYmF0Y2hTdGF0ZS0+cmVhZFBvczsKKwliYXRjaFN0YXRlLT5tYXJrQmF0 Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNoU3RhdGUtPm1hcmtQb3MuYmF0Y2gpOwor CisJLyoKKwkgKiBGSVhNRSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYmF0Y2ggZG9lcyBub3Qg Z2V0IGZyZWVkIGR1cmluZyB0aGUKKwkgKiByZWd1bGFyIGFkdmFuY2VzLgorCSAqLworCisJQXNz ZXJ0Q2hlY2tCYXRjaFBvc1ZhbGlkKHNjYW4sICZiYXRjaFN0YXRlLT5tYXJrUG9zKTsKIH0KIAog LyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQ1LDE5ICs2MzEsNjAgQEAgaW5kZXhfbWFya3BvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiB2b2lkCiBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNj YW4pCiB7CisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hTdGF0ZTsKKwlJbmRleFNjYW5CYXRj aFBvcyAqbWFya1BvczsKKwlJbmRleFNjYW5CYXRjaERhdGEgKm1hcmtCYXRjaDsKKwogCUFzc2Vy dChJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0J Q0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1nZXRiYXRjaCk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQkvKiBy ZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAq LworCS8qCisJICogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFi bGUgYWNjZXNzZXMKKwkgKgorCSAqIFhYWDogQ3VycmVudGx5LCB0aGUgZGlzdGFuY2UgaXMgYWx3 YXlzIHJlbWVtYmVyZWQgYWNyb3NzIGFueQorCSAqIHJlYWRfc3RyZWFtX3Jlc2V0IGNhbGxzICh0 byB3b3JrIGFyb3VuZCB0aGUgc2Nhbi0+YmF0Y2hTdGF0ZS0+cmVzZXQKKwkgKiBiZWhhdmlvciBv ZiByZXNldHRpbmcgdGhlIHN0cmVhbSB0byBkZWFsIHdpdGggcnVubmluZyBvdXQgb2YgYmF0Y2hl cykuCisJICogV2UgcHJvYmFibHkgX3Nob3VsZF8gYmUgZm9yZ2V0dGluZyB0aGUgZGlzdGFuY2Ug d2hlbiB3ZSByZXNldCB0aGUKKwkgKiBzdHJlYW0gaGVyZSAodGhyb3VnaCBvdXIgdGFibGVfaW5k ZXhfZmV0Y2hfcmVzZXQgY2FsbCksIHRob3VnaC4KKwkgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCiAJ c2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+ eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtcmVzdHJwb3Moc2Nhbik7CisJLyoKKwkgKiBGSVhNRSB0aGlzIHNob3VsZCBwcm9iYWJs eSBjaGVjayB0aGVyZSBhY3R1YWxseSBpcyBhIGJhdGNoIHN0YXRlLiBGb3IKKwkgKiBub3cgaXQg d29ya3MgdGhlIG9ubHkgQU0gd2l0aCBtYXJrL3Jlc3RvcmUgc3VwcG9ydCBpcyBidHJlZSwgYW5k IHRoYXQKKwkgKiBoYXMgYmF0Y2hpbmcuIEJ1dCB3ZSBzaG91bGQgbm90IHJlbHkgb24gdGhhdCwg cmlnaHQ/CisJICovCisKKwliYXRjaFN0YXRlID0gc2Nhbi0+YmF0Y2hTdGF0ZTsKKwltYXJrUG9z ID0gJmJhdGNoU3RhdGUtPm1hcmtQb3M7CisJbWFya0JhdGNoID0gc2Nhbi0+YmF0Y2hTdGF0ZS0+ bWFya0JhdGNoOworCisJLyoKKwkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtu b3cgdG8gaW52YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorCSAqIHRoYXQgaW5kZXBlbmRlbnRs eSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcworCSAqLworCXNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIFJlc2V0 IHRoZSBiYXRjaGluZyBzdGF0ZSwgZXhjZXB0IGZvciB0aGUgbWFya2VkIGJhdGNoLCBhbmQgbWFr ZSBpdCBsb29rCisJICogbGlrZSB3ZSBoYXZlIGEgc2luZ2xlIGJhdGNoIC0tIHRoZSBtYXJrZWQg b25lLgorCSAqLworCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4sIGZhbHNlKTsKKworCWJhdGNoU3Rh dGUtPm1hcmtQb3MgPSAqbWFya1BvczsKKwliYXRjaFN0YXRlLT5yZWFkUG9zID0gKm1hcmtQb3M7 CisJYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCA9IG1hcmtQb3MtPmJhdGNoOworCWJhdGNoU3RhdGUt Pm5leHRCYXRjaCA9IChiYXRjaFN0YXRlLT5maXJzdEJhdGNoICsgMSk7CisKKwlJTkRFWF9TQ0FO X0JBVENIKHNjYW4sIGJhdGNoU3RhdGUtPm1hcmtQb3MuYmF0Y2gpID0gbWFya0JhdGNoOworCWJh dGNoU3RhdGUtPm1hcmtCYXRjaCA9IG1hcmtCYXRjaDsJLyogYWxzbyByZW1lbWJlciB0aGlzICov CiB9CiAKIC8qCkBAIC01NzksNiArODA2LDE3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9m ZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJLyoKKwkgKiBSZXNldCB0aGUgYmF0 Y2hpbmcuIFRoaXMgbWFrZXMgaXQgbG9vayBsaWtlIHRoZXJlIGFyZSBubyBiYXRjaGVzLAorCSAq IGRpc2NhcmRzIHJlYWRzIGFscmVhZHkgc2NoZWR1bGVkIHRvIHRoZSByZWFkIHN0cmVhbSwgZXRj LgorCSAqCisJICogWFhYIFdlIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcgYW1wYXJhbGxlbHJlc2Nh biwgc28gdGhhdCBpdCBjb3VsZAorCSAqIHJlaW5pdGlhbGl6ZSBldmVyeXRoaW5nICh0aGlzIHBy b2JhYmx5IGRvZXMgbm90IG1hdHRlciB2ZXJ5IG11Y2gsIG5vdworCSAqIHRoYXQgd2UndmUgbW92 ZWQgYWxsIHRoZSBiYXRjaGluZyBsb2dpYyB0byBpbmRleGFtLmMsIGl0IHdhcyBtb3JlCisJICog aW1wb3J0YW50IHdoZW4gdGhlIGluZGV4IEFNIHdhcyByZXNwb25zaWJsZSBmb3IgbW9yZSBvZiBp dCkuCisJICovCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAkvKiBhbXBhcmFs bGVscmVzY2FuIGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFN ICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2Fu ICE9IE5VTEwpCiAJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVz Y2FuKHNjYW4pOwpAQCAtNjE0LDYgKzg1Miw5IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChS ZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIAlzY2FuLT54c19zbmFwc2hvdCA9 IHNuYXBzaG90OwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwogCisJaWYgKGluZGV4 cmVsLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaF9pbml0KHNj YW4pOworCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8K IAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwcmVsKTsK IApAQCAtNjMwLDE0ICs4NzEsMjg2IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlv biBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIEl0ZW1Qb2ludGVyCiBpbmRleF9nZXRuZXh0 X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCWJv b2wJCWZvdW5kOwotCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXR0 dXBsZSk7CiAKIAkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1 c2hlZCBvciByZWdpc3RlcmVkICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2Vu dFhtaW4pKTsKIAorCS8qCisJICogSW5kZXggQU1zIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBz Y2FucyBtdXN0IHByb3ZpZGUgZXhhY3RseSBvbmUgb2YKKwkgKiBlaXRoZXIgdGhlIGFtZ2V0YmF0 Y2ggb3IgYW1nZXR0dXBsZSBjYWxsYmFja3MKKwkgKi8KKwlBc3NlcnQoIShzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMICYmCisJCQkgc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkpOworCisJaWYgKHNjYW4tPmJh dGNoU3RhdGUgIT0gTlVMTCkKKwkJcmV0dXJuIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKHNjYW4s IGRpcmVjdGlvbik7CisJZWxzZQorCQlyZXR1cm4gaW5kZXhfcmV0YWlsX2dldG5leHRfdGlkKHNj YW4sIGRpcmVjdGlvbik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9nZXRu ZXh0X2JhdGNoX3RpZCAtIGFtYmF0Y2ggaW5kZXhfZ2V0bmV4dF90aWQgaW1wbGVtZW50YXRpb24K KyAqCisgKiBJZiB3ZSBhZHZhbmNlIHRvIHRoZSBuZXh0IGJhdGNoLCB3ZSByZWxlYXNlIHRoZSBw cmV2aW91cyBvbmUgKHVubGVzcyBpdCdzCisgKiB0cmFja2VkIGZvciBtYXJrL3Jlc3RvcmUpLgor ICoKKyAqIElmIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzLCB3ZSByZWxlYXNlIGFsbCBiYXRj aGVzIGV4Y2VwdCB0aGUgY3VycmVudAorICogb25lIChwZXIgcmVhZFBvcyksIHRvIG1ha2UgaXQg bG9vayBpdCdzIHRoZSBvbmx5IGJhdGNoIHdlIGxvYWRlZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBm aXJzdC9uZXh0IFRJRCwgb3IgTlVMTCBpZiBubyBtb3JlIGl0ZW1zLgorICoKKyAqIEZJWE1FIFRo aXMgb25seSBzZXRzIHhzX2hlYXB0aWQgYW5kIHhzX2l0dXAgKGlmIHJlcXVlc3RlZCkuIE5vdCBz dXJlIGlmCisgKiB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyB3aXRoIHhzX2hpdHVwLiBTaG91bGQg dGhpcyBzZXQgeHNfaGl0dXA/CisgKgorICogWFhYIE1heWJlIGlmIHdlIGFkdmFuY2UgdGhlIHBv c2l0aW9uIHRvIHRoZSBuZXh0IGJhdGNoLCB3ZSBjb3VsZCBrZWVwIHRoZQorICogYmF0Y2ggZm9y IGEgYml0IG1vcmUsIGluIGNhc2UgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgKGFzIGxvbmcg YXMgaXQKKyAqIGZpdHMgaW50byBtYXhCYXRjaGVzKT8gQnV0IG1heWJlIHRoYXQncyB1bm5lY2Vz c2FyeSBjb21wbGV4aXR5IGZvciB0b28KKyAqIGxpdHRsZSBnYWluLCB3ZSdkIG5lZWQgdG8gYmUg Y2FyZWZ1bCBhYm91dCByZWxlYXNpbmcgdGhlIGJhdGNoZXMgbGF6aWx5LgorICogLS0tLS0tLS0t LS0tLS0tLQorICovCitzdGF0aWMgSXRlbVBvaW50ZXIKK2luZGV4X2JhdGNoX2dldG5leHRfdGlk KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJSW5kZXhT Y2FuQmF0Y2hTdGF0ZSAqYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisJSW5kZXhTY2Fu QmF0Y2hQb3MgKnJlYWRQb3M7CisKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldGJhdGNoKTsK KworCS8qIHNob3VsZG4ndCBnZXQgaGVyZSB3aXRob3V0IGJhdGNoaW5nICovCisJQXNzZXJ0Q2hl Y2tCYXRjaGVzKHNjYW4pOworCisJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2Fs bCAqLworCWlmIChiYXRjaFN0YXRlLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rp b24pCisJCWJhdGNoU3RhdGUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKworCS8qCisJICogSGFu ZGxlIGNhbmNlbGxpbmcgdGhlIHVzZSBvZiB0aGUgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNoaW5n CisJICovCisJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hTdGF0ZS0+ZGlzYWJsZWQgJiYgc2Nhbi0+ eHNfaGVhcGZldGNoLT5ycykpCisJeworCQlpbmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJmJh dGNoU3RhdGUtPnN0cmVhbVBvcyk7CisKKwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVh cGZldGNoLT5ycyk7CisJCXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgPSBOVUxMOworCX0KKworCS8q CisJICogSGFuZGxlIGNoYW5nZSBvZiBzY2FuIGRpcmVjdGlvbiAocmVzZXQgc3RyZWFtLCAuLi4p LgorCSAqCisJICogUmVsZWFzZSBmdXR1cmUgYmF0Y2hlcyBwcm9wZXJseSwgdG8gbWFrZSBpdCBs b29rIGxpa2UgdGhlIGN1cnJlbnQgYmF0Y2gKKwkgKiBpcyB0aGUgb25seSBvbmUgd2UgbG9hZGVk LiBBbHNvIHJlc2V0IHRoZSBzdHJlYW0gcG9zaXRpb24sIGFzIGlmIHdlIGFyZQorCSAqIGp1c3Qg c3RhcnRpbmcgdGhlIHNjYW4uCisJICovCisJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hTdGF0ZS0+ ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCisJeworCQkvKiByZWxlYXNlICJmdXR1cmUiIGJhdGNo ZXMgaW4gdGhlIHdyb25nIGRpcmVjdGlvbiAqLworCQl3aGlsZSAoYmF0Y2hTdGF0ZS0+bmV4dEJh dGNoID4gYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCArIDEpCisJCXsKKwkJCUluZGV4U2NhbkJhdGNo IGZiYXRjaDsKKworCQkJYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoLS07CisJCQlmYmF0Y2ggPSBJTkRF WF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNoU3RhdGUtPm5leHRCYXRjaCk7CisJCQlpbmRleF9iYXRj aF9mcmVlKHNjYW4sIGZiYXRjaCk7CisJCX0KKworCQkvKgorCQkgKiBSZW1lbWJlciB0aGUgbmV3 IGRpcmVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgc2NhbiBpcyBub3QgbWFya2VkIGFzCisJCSAq ICJmaW5pc2hlZCIgKHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSByZWFkIHRoZSBsYXN0IGJhdGNoLCBi dXQgbm93IHdlCisJCSAqIG5lZWQgdG8gc3RhcnQgb3ZlcikuIERvIHRoaXMgYmVmb3JlIHJlc2V0 dGluZyB0aGUgc3RyZWFtIC0gaXQKKwkJICogc2hvdWxkIG5vdCBpbnZva2UgdGhlIGNhbGxiYWNr IHVudGlsIHRoZSBmaXJzdCByZWFkLCBidXQgaXQgbWF5CisJCSAqIHNlZW0gYSBiaXQgY29uZnVz aW5nIG90aGVyd2lzZS4KKwkJICovCisJCWJhdGNoU3RhdGUtPmRpcmVjdGlvbiA9IGRpcmVjdGlv bjsKKwkJYmF0Y2hTdGF0ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwkJYmF0Y2hTdGF0ZS0+Y3VycmVu dFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJaW5kZXhfYmF0Y2hfcG9z X3Jlc2V0KHNjYW4sICZiYXRjaFN0YXRlLT5zdHJlYW1Qb3MpOworCQlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoLT5ycykKKwkJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMp OworCX0KKworCS8qIHNob3J0Y3V0IGZvciB0aGUgcmVhZCBwb3NpdGlvbiwgZm9yIGNvbnZlbmll bmNlICovCisJcmVhZFBvcyA9ICZiYXRjaFN0YXRlLT5yZWFkUG9zOworCisJREVCVUdfTE9HKCJp bmRleF9iYXRjaF9nZXRuZXh0X3RpZCByZWFkUG9zICVkICVkIGRpcmVjdGlvbiAlZCIsCisJCQkg IHJlYWRQb3MtPmJhdGNoLCByZWFkUG9zLT5pbmRleCwgZGlyZWN0aW9uKTsKKworCS8qCisJICog VHJ5IGFkdmFuY2luZyB0aGUgYmF0Y2ggcG9zaXRpb24uIElmIHRoYXQgZG9lc24ndCBzdWNjZWVk LCBpdCBtZWFucyB3ZQorCSAqIGRvbid0IGhhdmUgbW9yZSBpdGVtcyBpbiB0aGUgY3VycmVudCBi YXRjaCwgYW5kIHRoZXJlJ3Mgbm8gZnV0dXJlIGJhdGNoCisJICogbG9hZGVkLiBTbyB0cnkgbG9h ZGluZyBhbm90aGVyIGJhdGNoLCBhbmQgbWF5YmUgcmV0cnkuCisJICoKKwkgKiBGSVhNRSBUaGlz IGxvb3Agc2hvdWxkbid0IGhhcHBlbiBtb3JlIHRoYW4gdHdpY2UuIE1heWJlIHdlIHNob3VsZCBo YXZlCisJICogc29tZSBwcm90ZWN0aW9uIGFnYWluc3QgaW5maW5pdGUgbG9vcHM/IFRvIGRldGVj dCBjYXNlcyB3aGVuIHRoZQorCSAqIGFkdmFuY2UvZ2V0bmV4dCBmdW5jdGlvbnMgZ2V0IHRvIGRp c2FncmVlPworCSAqLworCXdoaWxlICh0cnVlKQorCXsKKwkJLyoKKwkJICogSWYgd2UgbWFuYWdl IHRvIGFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbXMsIHJldHVybiBpdCBhbmQgd2UncmUKKwkJICog ZG9uZS4gT3RoZXJ3aXNlIHRyeSBsb2FkaW5nIGFub3RoZXIgYmF0Y2guCisJCSAqLworCQlpZiAo aW5kZXhfYmF0Y2hfcG9zX2FkdmFuY2Uoc2NhbiwgcmVhZFBvcywgZGlyZWN0aW9uKSkKKwkJewor CQkJSW5kZXhTY2FuQmF0Y2hEYXRhICpyZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4s IHJlYWRQb3MtPmJhdGNoKTsKKworCQkJLyogc2V0IHRoZSBUSUQgLyBpdHVwIGZvciB0aGUgc2Nh biAqLworCQkJc2Nhbi0+eHNfaGVhcHRpZCA9IHJlYWRCYXRjaC0+aXRlbXNbcmVhZFBvcy0+aW5k ZXhdLmhlYXBUaWQ7CisJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJCXNjYW4tPnhzX2l0 dXAgPQorCQkJCQkoSW5kZXhUdXBsZSkgKHJlYWRCYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJ CSAgcmVhZEJhdGNoLT5pdGVtc1tyZWFkUG9zLT5pbmRleF0udHVwbGVPZmZzZXQpOworCisJCQlE RUJVR19MT0coInJlYWRCYXRjaCAlcCBmaXJzdCAlZCBsYXN0ICVkIHJlYWRQb3MgJWQvJWQgVElE ICgldSwldSkiLAorCQkJCQkgIHJlYWRCYXRjaCwgcmVhZEJhdGNoLT5maXJzdEl0ZW0sIHJlYWRC YXRjaC0+bGFzdEl0ZW0sCisJCQkJCSAgcmVhZFBvcy0+YmF0Y2gsIHJlYWRQb3MtPmluZGV4LAor CQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpLAorCQkJ CQkgIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZzY2FuLT54c19oZWFwdGlkKSk7CisKKwkJ CS8qCisJCQkgKiBJZiB3ZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBiYXRjaCwgcmVsZWFzZSB0aGUg YmF0Y2ggd2Ugbm8KKwkJCSAqIGxvbmdlciBuZWVkLiBUaGUgcG9zaXRpb25zIGlzIHRoZSAicmVh ZCIgcG9zaXRpb24sIGFuZCB3ZSBjYW4KKwkJCSAqIGNvbXBhcmUgaXQgdG8gZmlyc3RCYXRjaC4K KwkJCSAqLworCQkJaWYgKHVubGlrZWx5KHJlYWRQb3MtPmJhdGNoICE9IGJhdGNoU3RhdGUtPmZp cnN0QmF0Y2gpKQorCQkJeworCQkJCUluZGV4U2NhbkJhdGNoRGF0YSAqZmlyc3RCYXRjaCA9IElO REVYX1NDQU5fQkFUQ0goc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkgIGJhdGNoU3RhdGUtPmZpcnN0 QmF0Y2gpOworCisJCQkJLyoKKwkJCQkgKiBYWFggV2hlbiBhZHZhbmNpbmcgcmVhZFBvcywgdGhl IHN0cmVhbVBvcyBtYXkgZ2V0IGJlaGluZCBhcworCQkJCSAqIHdlJ3JlIG9ubHkgYWR2YW5jaW5n IGl0IHdoZW4gYWN0dWFsbHkgcmVxdWVzdGluZyBoZWFwCisJCQkJICogYmxvY2tzLiBCdXQgd2Ug bWF5IG5vdCBkbyB0aGF0IG9mdGVuIGVub3VnaCAtIGUuZy4gSU9TIG1heQorCQkJCSAqIG5vdCBu ZWVkIHRvIGFjY2VzcyBhbGwtdmlzaWJsZSBoZWFwIGJsb2Nrcywgc28gdGhlCisJCQkJICogcmVh ZF9uZXh0IGNhbGxiYWNrIGRvZXMgbm90IGdldCBpbnZva2VkIGZvciBhIGxvbmcgdGltZS4KKwkJ CQkgKiBJdCdzIHBvc3NpYmxlIHRoZSBzdHJlYW0gZ2V0cyBzbyBtdWN1IGJlaGluZCB0aGUgcG9z aXRpb24KKwkJCQkgKiBnZXRzIGludmFsaWQsIGFzIHdlIGFscmVhZHkgcmVtb3ZlZCB0aGUgYmF0 Y2guIEJ1dCB0aGF0CisJCQkJICogbWVhbnMgd2UgZG9uJ3QgbmVlZCBhbnkgaGVhcCBibG9ja3Mg dW50aWwgdGhlIGN1cnJlbnQgcmVhZAorCQkJCSAqIHBvc2l0aW9uIC0gaWYgd2UgZGlkLCB3ZSB3 b3VsZCBub3QgYmUgaW4gdGhpcyBzaXR1YXRpb24gKG9yCisJCQkJICogaXQncyBhIHNpZ24gb2Yg YSBidWcsIGFzIHRob3NlIHR3byBwbGFjZXMgYXJlIGV4cGVjdGVkIHRvCisJCQkJICogYmUgaW4g c3luYykuIFNvIGlmIHRoZSBzdHJlYW1Qb3Mgc3RpbGwgcG9pbnRzIGF0IHRoZSBiYXRjaAorCQkJ CSAqIHdlJ3JlIGFib3V0IHRvIGZyZWUsIGp1c3QgcmVzZXQgdGhlIHBvc2l0aW9uIC0gd2UnbGwg c2V0IGl0CisJCQkJICogdG8gcmVhZFBvcyBpbiB0aGUgcmVhZF9uZXh0IGNhbGxiYWNrIGxhdGVy LgorCQkJCSAqCisJCQkJICogWFhYIFRoaXMgY2FuIGhhcHBlbiBhZnRlciB0aGUgcXVldWUgZ2V0 cyBmdWxsLCB3ZSAicGF1c2UiCisJCQkJICogdGhlIHN0cmVhbSwgYW5kIHRoZW4gcmVzZXQgaXQg dG8gY29udGludWUuIEJ1dCBJIHRoaW5rIHRoYXQKKwkJCQkgKiBqdXN0IGluY3JlYXNlcyB0aGUg cHJvYmFiaWxpdHkgb2YgaGl0dGluZyB0aGUgaXNzdWUsIGl0J3MKKwkJCQkgKiBqdXN0IG1vcmUg Y2hhbmNlIHRvIHRvIG5vdCBhZHZhbmNlIHRoZSBzdHJlYW1Qb3MsIHdoaWNoCisJCQkJICogZGVw ZW5kcyBvbiB3aGVuIHdlIHRyeSB0byBmZXRjaCB0aGUgZmlyc3QgaGVhcCBibG9jayBhZnRlcgor CQkJCSAqIGNhbGxpbmcgcmVhZF9zdHJlYW1fcmVzZXQoKS4KKwkJCQkgKgorCQkJCSAqIEZJWE1F IFNpbXBsaWZ5L2NsYXJpZnkvc2hvcnRlbiB0aGlzIGNvbW1lbnQuIENhbiBpdAorCQkJCSAqIGFj dHVhbGx5IGhhcHBlbiwgaWYgd2UgbmV2ZXIgcHVsbCBmcm9tIHRoZSBzdHJlYW0gaW4gSU9TPwor CQkJCSAqIFdlIHByb2JhYmx5IGRvbid0IGxvb2sgYWhlYWQgZm9yIHRoZSBmaXJzdCBjYWxsLgor CQkJCSAqLworCQkJCWlmICh1bmxpa2VseShiYXRjaFN0YXRlLT5zdHJlYW1Qb3MuYmF0Y2ggPT0g YmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCkpCisJCQkJeworCQkJCQlERUJVR19MT0coImluZGV4X2Jh dGNoX3Bvc19yZXNldCBjYWxsZWQgZWFybHkgKHN0cmVhbVBvcy5iYXRjaCA9PSBmaXJzdEJhdGNo KSIpOworCQkJCQlpbmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJmJhdGNoU3RhdGUtPnN0cmVh bVBvcyk7CisJCQkJfQorCisJCQkJREVCVUdfTE9HKCJpbmRleF9iYXRjaF9nZXRuZXh0X3RpZCBm cmVlIGZpcnN0QmF0Y2ggJXAgZmlyc3RCYXRjaCAlZCBuZXh0QmF0Y2ggJWQiLAorCQkJCQkJICBm aXJzdEJhdGNoLCBiYXRjaFN0YXRlLT5maXJzdEJhdGNoLCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gp OworCisJCQkJLyogRnJlZSB0aGUgZmlyc3QgYmF0Y2ggKGV4Y2VwdCB3aGVuIGl0J3MgbWFya0Jh dGNoKSAqLworCQkJCWluZGV4X2JhdGNoX2ZyZWUoc2NhbiwgZmlyc3RCYXRjaCk7CisKKwkJCQkv KgorCQkJCSAqIEluIGFueSBjYXNlLCByZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJlZ3VsYXIg cXVldWUsIGV2ZW4KKwkJCQkgKiBpZiB3ZSBrZXB0IGl0IGZvciBtYXIvcmVzdG9yZS4KKwkJCQkg Ki8KKwkJCQliYXRjaFN0YXRlLT5maXJzdEJhdGNoKys7CisKKwkJCQlERUJVR19MT0coImluZGV4 X2JhdGNoX2dldG5leHRfdGlkIGJhdGNoIGZyZWVkIGZpcnN0QmF0Y2ggJWQgbmV4dEJhdGNoICVk IiwKKwkJCQkJCSAgYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCwgYmF0Y2hTdGF0ZS0+bmV4dEJhdGNo KTsKKworCQkJCWluZGV4X2JhdGNoX3ByaW50KCJpbmRleF9iYXRjaF9nZXRuZXh0X3RpZCAvIGZy ZWUgb2xkIGJhdGNoIiwgc2Nhbik7CisKKwkJCQkvKiB3ZSBjYW4ndCBza2lwIGFueSBiYXRjaGVz ICovCisJCQkJQXNzZXJ0KGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2ggPT0gcmVhZFBvcy0+YmF0Y2gp OworCQkJfQorCisJCQlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRp b24sIDEpOworCQkJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworCQl9CisKKwkJLyoKKwkJICog V2UgZmFpbGVkIHRvIGFkdmFuY2UsIGkuZS4gd2UgcmFuIG91dCBvZiBjdXJyZW50bHkgbG9hZGVk IGJhdGNoZXMuCisJCSAqIFNvIGlmIHdlIGZpbGxlZCB0aGUgcXVldWUsIHRoaXMgaXMgYSBnb29k IHRpbWUgdG8gcmVzZXQgdGhlIHN0cmVhbQorCQkgKiAoYmVmb3JlIHdlIHRyeSBsb2FkaW5nIHRo ZSBuZXh0IGJhdGNoKS4KKwkJICovCisJCWlmICh1bmxpa2VseShiYXRjaFN0YXRlLT5yZXNldCkp CisJCXsKKwkJCURFQlVHX0xPRygicmVzZXR0aW5nIHJlYWQgc3RyZWFtIHJlYWRQb3MgJWQsJWQi LAorCQkJCQkgIHJlYWRQb3MtPmJhdGNoLCByZWFkUG9zLT5pbmRleCk7CisKKwkJCWJhdGNoU3Rh dGUtPnJlc2V0ID0gZmFsc2U7CisJCQliYXRjaFN0YXRlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9 IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJLyoKKwkJCSAqIE5lZWQgdG8gcmVzZXQgdGhlIHN0 cmVhbSBwb3NpdGlvbiwgaXQgbWlnaHQgYmUgdG9vIGZhciBiZWhpbmQuCisJCQkgKiBVbHRpbWF0 ZWx5IHdlIHdhbnQgdG8gc2V0IGl0IHRvIHJlYWRQb3MsIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0CisJ CQkgKiB5ZXQgLSByZWFkUG9zIHN0aWxsIHBvaW50IHNhdCB0aGUgb2xkIGJhdGNoLCBzbyBqdXN0 IHJlc2V0IGl0CisJCQkgKiBhbmQgd2UnbGwgaW5pdCBpdCB0byByZWFkUG9zIGxhdGVyIGluIHRo ZSBjYWxsYmFjay4KKwkJCSAqLworCQkJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZiYXRj aFN0YXRlLT5zdHJlYW1Qb3MpOworCisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJ CQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwkJfQorCisJCS8q CisJCSAqIEZhaWxlZCB0byBhZHZhbmNlIHRoZSByZWFkIHBvc2l0aW9uLCBzbyB0cnkgcmVhZGlu ZyB0aGUgbmV4dCBiYXRjaC4KKwkJICogSWYgdGhpcyBmYWlscywgd2UncmUgZG9uZSAtIHRoZXJl J3Mgbm90aGluZyBtb3JlIHRvIGxvYWQuCisJCSAqCisJCSAqIE1vc3Qgb2YgdGhlIGJhdGNoZXMg c2hvdWxkIGJlIGxvYWRlZCBmcm9tIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyLAorCQkgKiBidXQg d2UgbmVlZCB0byBjYWxsIGluZGV4X2JhdGNoX2dldG5leHQgaGVyZSB0b28sIGZvciB0d28gcmVh c29ucy4KKwkJICogRmlyc3QsIHRoZSByZWFkX3N0cmVhbSBvbmx5IGdldHMgd29ya2luZyBhZnRl ciB3ZSB0cnkgZmV0Y2hpbmcgdGhlCisJCSAqIGZpcnN0IGhlYXAgdHVwbGUsIHNvIHdlIG5lZWQg dG8gbG9hZCB0aGUgZmlyc3QgYmF0Y2ggZnJvbSBoZXJlLgorCQkgKiBTZWNvbmQsIHdoaWxlIG1v c3QgYmF0Y2hlcyB3aWxsIGJlIHByZWxvYWRlZCBieSB0aGUgc3RyZWFtIHRoYW5rcworCQkgKiB0 byBwcmVmZXRjaGluZywgaXQncyBwb3NzaWJsZSB0byBzZXQgZWZmZWN0aXZlX2lvX2NvbmN1cnJl bmN5PTAsCisJCSAqIGFuZCBpbiB0aGF0IGNhc2UgYWxsIHRoZSBiYXRjaGVzIGdldCBsb2FkZWQg ZnJvbSBoZXJlLgorCQkgKi8KKwkJaWYgKCFpbmRleF9iYXRjaF9nZXRuZXh0KHNjYW4sIGRpcmVj dGlvbikpCisJCQlicmVhazsKKworCQlERUJVR19MT0coImxvYWRlZCBuZXh0IGJhdGNoLCByZXRy eSB0byBhZHZhbmNlIHBvc2l0aW9uIik7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgaGVyZSwg d2UgZmFpbGVkIHRvIGFkdmFuY2UgdGhlIHBvc2l0aW9uIGFuZCB0aGVyZSBhcmUgbm8gbW9yZQor CSAqIGJhdGNoZXMsIHNvIHdlJ3JlIGRvbmUuCisJICovCisJREVCVUdfTE9HKCJubyBtb3JlIGJh dGNoZXMgdG8gcHJvY2VzcyIpOworCisJLyoKKwkgKiBSZXNldCB0aGUgcG9zaXRpb24gLSB3ZSBt dXN0IG5vdCBrZWVwIHRoZSBsYXN0IHZhbGlkIHBvc2l0aW9uLCBpbiBjYXNlCisJICogd2UgY2hh bmdlIGRpcmVjdGlvbiBvZiB0aGUgc2NhbiBhbmQgc3RhcnQgc2Nhbm5pbmcgYWdhaW4uIElmIHdl IGtlcHQKKwkgKiB0aGUgcG9zaXRpb24sIHdlJ2Qgc2tpcCB0aGUgZmlyc3QgaXRlbS4KKwkgKgor CSAqIFhYWCBUaGlzIGlzIGEgYml0IHN0cmFuZ2UuIERvIHdlIHJlYWxseSBuZWVkIHRvIHJlc2V0 IHRoZSBwb3NpdGlvbgorCSAqIGFmdGVyIHJldHVybmluZyB0aGUgbGFzdCBpdGVtPyBJIHdvbmRl ciBpZiBpdCBtZWFucyB0aGUgQVBJIGlzIG5vdAorCSAqIHF1aXRlIHJpZ2h0LgorCSAqLworCWlu ZGV4X2JhdGNoX3Bvc19yZXNldChzY2FuLCByZWFkUG9zKTsKKworCXJldHVybiBOVUxMOworfQor CisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfcmV0YWlsX2dldG5leHRfdGlkIC0gYW1n ZXR0dXBsZSBpbmRleF9nZXRuZXh0X3RpZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFJldHVybnMg dGhlIGZpcnN0L25leHQgVElELCBvciBOVUxMIGlmIG5vIG1vcmUgaXRlbXMuCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRlcgoraW5kZXhfcmV0YWlsX2dldG5leHRf dGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJYm9v bAkJZm91bmQ7CisKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldHR1cGxlKTsKKwogCS8qCiAJ ICogVGhlIEFNJ3MgYW1nZXR0dXBsZSBwcm9jIGZpbmRzIHRoZSBuZXh0IGluZGV4IGVudHJ5IG1h dGNoaW5nIHRoZSBzY2FuCiAJICoga2V5cywgYW5kIHB1dHMgdGhlIFRJRCBpbnRvIHNjYW4tPnhz X2hlYXB0aWQuICBJdCBzaG91bGQgYWxzbyBzZXQKQEAgLTcwNCw5ICsxMjE3LDE4IEBAIGluZGV4 X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIAkg KiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0 aGlzIHdoZW4gaW4KIAkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8g ZG8gc28uICBTZWUgY29tbWVudHMgaW4KIAkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAq CisJICogWFhYIEZvciBzY2FucyB1c2luZyBiYXRjaGluZywgcmVjb3JkIHRoZSBmbGFnIGluIHRo ZSBiYXRjaCAod2Ugd2lsbAorCSAqIHBhc3MgaXQgdG8gdGhlIEFNIGxhdGVyLCB3aGVuIGZyZWVp bmcgaXQpLiBPdGhlcndpc2UganVzdCBwYXNzIGl0IHRvCisJICogdGhlIEFNIHVzaW5nIHRoZSBr aWxsX3ByaW9yX3R1cGxlIGZpZWxkLgogCSAqLwogCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJl Y292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJeworCQlpZiAo c2Nhbi0+YmF0Y2hTdGF0ZSA9PSBOVUxMKQorCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFs bF9kZWFkOworCQllbHNlIGlmIChhbGxfZGVhZCkKKwkJCWluZGV4X2JhdGNoX2tpbGxfaXRlbShz Y2FuKTsKKwl9CiAKIAlyZXR1cm4gZm91bmQ7CiB9CkBAIC0xMDg5LDMgKzE2MTEsNzg5IEBAIGlu ZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBpbmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBE YXR1bSBhdHRvcHRpb25zLAogCiAJcmV0dXJuIGJ1aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9w dHMsIGF0dG9wdGlvbnMsIHZhbGlkYXRlKTsKIH0KKworLyoKKyAqIENoZWNrIHRoYXQgYSBwb3Np dGlvbiAoYmF0Y2gsaXRlbSkgaXMgdmFsaWQgd2l0aCByZXNwZWN0IHRvIHRoZSBiYXRjaGVzIHdl CisgKiBoYXZlIGN1cnJlbnRseSBsb2FkZWQuCisgKgorICogWFhYIFRoZSAibWFya2VkIiBiYXRj aCBpcyBhbiBleGNlcHRpb24uIFRoZSBtYXJrZWQgYmF0Y2ggbWF5IGdldCBvdXRzaWRlCisgKiB0 aGUgcmFuZ2Ugb2YgY3VycmVudCBiYXRjaGVzLCBzbyBtYWtlIHN1cmUgdG8gbmV2ZXIgY2hlY2sg dGhlIHBvc2l0aW9uCisgKiBmb3IgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNr QmF0Y2hQb3NWYWxpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoUG9zICpwb3Mp Cit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJh dGNoU3RhdGUgPSBzY2FuLT5iYXRjaFN0YXRlOworCisJLyogbWFrZSBzdXJlIHRoZSBwb3NpdGlv biBpcyB2YWxpZCBmb3IgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICovCisJQXNzZXJ0KHBvcy0+ YmF0Y2ggPj0gYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCk7CisJQXNzZXJ0KHBvcy0+YmF0Y2ggPCBi YXRjaFN0YXRlLT5uZXh0QmF0Y2gpOworI2VuZGlmCit9CisKKy8qCisgKiBDaGVjayBhIHNpbmds ZSBiYXRjaCBpcyB2YWxpZC4KKyAqLworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNrQmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKyNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCisJLyogdGhlcmUgbXVzdCBiZSB2YWxpZCByYW5nZSBvZiBpdGVtcyAqLwor CUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJQXNzZXJ0KGJh dGNoLT5maXJzdEl0ZW0gPj0gMCk7CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBpdGVtcyAoYnVmZmVy IGFuZCBwb2ludGVycykgKi8KKwlBc3NlcnQoYmF0Y2gtPml0ZW1zICE9IE5VTEwpOworCisJLyoK KwkgKiBUaGUgbnVtYmVyIG9mIGtpbGxlZCBpdGVtcyBtdXN0IGJlIHZhbGlkLCBhbmQgdGhlcmUg bXVzdCBiZSBhbiBhcnJheSBvZgorCSAqIGluZGV4ZXMgaWYgdGhlcmUgYXJlIGl0ZW1zLgorCSAq LworCUFzc2VydChiYXRjaC0+bnVtS2lsbGVkID49IDApOworCUFzc2VydCghKGJhdGNoLT5udW1L aWxsZWQgPiAwICYmIGJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKSk7CisKKwkvKiBYWFggY2Fu IHdlIGNoZWNrIHNvbWUgb2YgdGhlIG90aGVyIGJhdGNoIGZpZWxkcz8gKi8KKyNlbmRpZgorfQor CisvKgorICogQ2hlY2sgaW52YXJpYW50cyBvbiBjdXJyZW50IGJhdGNoZXMKKyAqCisgKiBNYWtl cyBzdXJlIHRoZSBpbmRleGVzIGFyZSBzZXQgYXMgZXhwZWN0ZWQsIHRoZSBidWZmZXIgc2l6ZSBp cyB3aXRoaW4KKyAqIGxpbWl0cywgYW5kIHNvIG9uLgorICovCitzdGF0aWMgdm9pZAorQXNzZXJ0 Q2hlY2tCYXRjaGVzKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3Rh dGU7CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBiYXRjaGVzIGluaXRpYWxpemVkICovCisJQXNzZXJ0 KGJhdGNoU3RhdGUgIT0gTlVMTCk7CisKKwkvKiBXZSBzaG91bGQgbm90IGhhdmUgdG9vIG1hbnkg YmF0Y2hlcy4gKi8KKwlBc3NlcnQoYmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcyA+IDAgJiYKKwkJICAg YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcyA8PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKTsKKworCS8q CisJICogVGhlIGZpcnN0L25leHQgaW5kZXhlcyBzaG91bGQgZGVmaW5lIGEgdmFsaWQgcmFuZ2Ug KGluIHRoZSBjeWNsaWMKKwkgKiBidWZmZXIsIGFuZCBzaG91bGQgbm90IG92ZXJmbG93IG1heEJh dGNoZXMuCisJICovCisJQXNzZXJ0KGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2ggPj0gMCAmJgorCQkg ICBiYXRjaFN0YXRlLT5maXJzdEJhdGNoIDw9IGJhdGNoU3RhdGUtPm5leHRCYXRjaCk7CisJQXNz ZXJ0KGJhdGNoU3RhdGUtPm5leHRCYXRjaCAtIGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2ggPD0KKwkJ ICAgYmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcyk7CisKKwkvKiBDaGVjayBhbGwgY3VycmVudCBiYXRj aGVzICovCisJZm9yIChpbnQgaSA9IGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2g7IGkgPCBiYXRjaFN0 YXRlLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gSU5ERVhf U0NBTl9CQVRDSChzY2FuLCBpKTsKKworCQlBc3NlcnRDaGVja0JhdGNoKHNjYW4sIGJhdGNoKTsK Kwl9CisjZW5kaWYKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX3Bvc19hZHZhbmNlCisgKgkJQWR2 YW5jZSB0aGUgcG9zaXRpb24gdG8gdGhlIG5leHQgaXRlbSwgZGVwZW5kaW5nIG9uIHNjYW4gZGly ZWN0aW9uLgorICoKKyAqIEFkdmFuY2UgdGhlIHBvc2l0aW9uIHRvIHRoZSBuZXh0IGl0ZW0sIGVp dGhlciBpbiB0aGUgc2FtZSBiYXRjaCBvciB0aGUKKyAqIGZvbGxvd2luZyBvbmUgKGlmIGFscmVh ZHkgYXZhaWxhYmxlKS4KKyAqCisgKiBXZSBjYW4gYWR2YW5jZSBvbmx5IGlmIHdlIGFscmVhZHkg aGF2ZSBzb21lIGJhdGNoZXMgbG9hZGVkLCBhbmQgdGhlcmUncworICogZWl0aGVyIGVub3VnaCBp dGVtcyBpbiB0aGUgY3VycmVudCBiYXRjaCwgb3Igc29tZSBtb3JlIGl0ZW1zIGluIHRoZQorICog c3Vic2VxdWVudCBiYXRjaGVzLgorICoKKyAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFkdmFuY2Us IHJpZ2h0IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGJhdGNoLCB0aGUKKyAqIHBvc2l0aW9uIGlz IHN0aWxsIHVuZGVmaW5lZC4gT3RoZXJ3aXNlIHdlIGV4cGVjdCB0aGUgcG9zaXRpb24gdG8gYmUK KyAqIHZhbGlkLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gd2FzIGFkdmFu Y2VkLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIHBvc2l0aW9uIGlzIGd1YXJhbnRlZWQg dG8gYmUgdmFsaWQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwgYWR2YW5jZS4KKyAqIElmIGFuIGFk dmFuY2UgZmFpbHMgKGZhbHNlIHJldHVybmVkKSwgdGhlIHBvc2l0aW9uIGNhbiBiZSBpbnZhbGlk LgorICoKKyAqIFhYWCBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGVuZm9yY2Ugc29t ZSAiaW52YXJpYW50cyIsIGUuZy4KKyAqIHRoYXQgdGhlIHBvc2l0aW9ucyBhcmUgYWx3YXlzIHZh bGlkLiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgd2l0aAorICogaW52YWxpZCBwb3NpdGlvbiAo c28gcHJvYmFibHkgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIHBhcnQgb2YgbG9hZGluZworICog dGhlIGZpcnN0IGJhdGNoKSwgYW5kIHRoZW4gaW52YWxpZGF0ZWQgaWYgYWR2YW5jZSBmYWlscy4g Q291bGQgYmUgdHJpY2t5CisgKiBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbiwgdGhvdWdoLCBiZWNh dXNlIGl0IGNhbiBnZXQgImxhZyIgZm9yIElPUyBldGMuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBib29sCitpbmRleF9iYXRjaF9wb3NfYWR2YW5jZShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoUG9zICpwb3MsCisJCQkJCQlTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKK3sKKwlJbmRleFNjYW5CYXRjaERhdGEgKmJhdGNoOworCisJLyogbWFrZSBzdXJl IHdlIGhhdmUgYmF0Y2hpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbnNpc3RlbnQgKi8KKwlBc3NlcnRD aGVja0JhdGNoZXMoc2Nhbik7CisKKwkvKiBzaG91bGQga25vdyBkaXJlY3Rpb24gYnkgbm93ICov CisJQXNzZXJ0KGRpcmVjdGlvbiA9PSBzY2FuLT5iYXRjaFN0YXRlLT5kaXJlY3Rpb24pOworCUFz c2VydChkaXJlY3Rpb24gIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJLyogV2UgY2Fu J3QgYWR2YW5jZSBpZiB0aGVyZSBhcmUgbm8gYmF0Y2hlcyBhdmFpbGFibGUuICovCisJaWYgKElO REVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBJZiB0aGUgcG9zaXRpb24gaGFzIG5vdCBiZWVuIGFkdmFuY2VkIHlldCwgaXQgaGFzIHRv IGJlIHJpZ2h0IGFmdGVyIHdlCisJICogbG9hZGVkIHRoZSBmaXJzdCBiYXRjaC4gSW4gdGhhdCBj YXNlIGp1c3QgaW5pdGlhbGl6ZSBpdCB0byB0aGUgZmlyc3QKKwkgKiBpdGVtIGluIHRoZSBiYXRj aCAob3IgbGFzdCBpdGVtLCBpZiBpdCdzIGEgYmFja3dhcmRzIHNjYW4pLgorCSAqCisJICogWFhY IE1heWJlIHdlIHNob3VsZCBqdXN0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGUgcG9zdGl0aW9u IGFmdGVyCisJICogbG9hZGluZyB0aGUgZmlyc3QgYmF0Y2gsIHdpdGhvdXQgaGF2aW5nIHRvIGdv IHRocm91Z2ggdGhlIGFkdmFuY2UuCisJICovCisJaWYgKElOREVYX1NDQU5fUE9TX0lOVkFMSUQo cG9zKSkKKwl7CisJCS8qCisJCSAqIFdlIHNob3VsZCBoYXZlIGxvYWRlZCB0aGUgdmVyeSBmaXJz dCBiYXRjaCwgb3IgbWF5YmUgd2UgaGF2ZQorCQkgKiBjaGFuZ2VkIHRoZSBkaXJlY3Rpb24gb2Yg dGhlIHNjYW4gYWZ0ZXIgc2Nhbm5pbmcgYWxsIHRoZSB3YXkgdG8gdGhlCisJCSAqIGVuZCAoaW4g d2hpY2ggY2FzZSB0aGUgcG9zaXRpb24gaXMgaW52YWxpZCwgYW5kIHdlIG1ha2UgaXQgbG9vawor CQkgKiBsaWtlIHRoZXJlIGlzIGp1c3Qgb25lIGJhdGNoKS4gV2Ugc2hvdWxkIGhhdmUganVzdCBv bmUgYmF0Y2gsCisJCSAqIHRob3VnaC4KKwkJICoKKwkJICogWFhYIEFjdHVhbGx5LCBjb3VsZCB0 aGVyZSBiZSBtb3JlIGJhdGNoZXM/IE1heWJlIHdlIHByZWZldGNoZWQgbW9yZQorCQkgKiBiYXRj aGVzIHJpZ2h0IGF3YXk/IEl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN1YnN0YW50aWFsIGludmFy aWFudC4KKwkJICovCisJCUFzc2VydChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IDEp OworCisJCS8qCisJCSAqIEdldCB0aGUgZmlyc3QgYmF0Y2gsIGFuZCBpbml0aWFsaXplIHRoZSBw b3NpdGlvbiB0byB0aGUgZmlyc3QvbGFzdAorCQkgKiBpdGVtIGluIHRoZSBiYXRjaCwgZGVwZW5k aW5nIG9uIHRoZSBzY2FuIGRpcmVjdGlvbi4KKwkJICovCisJCWJhdGNoID0gSU5ERVhfU0NBTl9C QVRDSChzY2FuLCBzY2FuLT5iYXRjaFN0YXRlLT5maXJzdEJhdGNoKTsKKworCQlwb3MtPmJhdGNo ID0gc2Nhbi0+YmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaDsKKworCQlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pKQorCQkJcG9zLT5pbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJ CWVsc2UKKwkJCXBvcy0+aW5kZXggPSBiYXRjaC0+bGFzdEl0ZW07CisKKwkJQXNzZXJ0Q2hlY2tC YXRjaFBvc1ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkg KiBUaGUgcG9zaXRpb24gaXMgYWxyZWFkeSBkZWZpbmVkLCBzbyB3ZSBzaG91bGQgaGF2ZSBzb21l IGJhdGNoZXMgbG9hZGVkCisJICogYW5kIHRoZSBwb3NpdGlvbiBoYXMgdG8gYmUgdmFsaWQgd2l0 aCByZXNwZWN0IHRvIHRob3NlLgorCSAqLworCUFzc2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2Fu LCBwb3MpOworCisJLyoKKwkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHNhbWUg YmF0Y2gsIGlmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zLiBJZgorCSAqIHdlJ3JlIGF0IHRoZSBsYXN0 IGl0ZW0sIHdlJ2xsIHRyeSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgYmF0Y2ggbGF0ZXIuCisJICov CisJYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHBvcy0+YmF0Y2gpOworCisJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bvcy0+aW5kZXgg PD0gYmF0Y2gtPmxhc3RJdGVtKQorCQl7CisJCQlBc3NlcnRDaGVja0JhdGNoUG9zVmFsaWQoc2Nh biwgcG9zKTsKKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJZWxzZQkJCQkJCS8qIFNjYW5E aXJlY3Rpb25Jc0JhY2t3YXJkICovCisJeworCQlpZiAoLS1wb3MtPmluZGV4ID49IGJhdGNoLT5m aXJzdEl0ZW0pCisJCXsKKwkJCUFzc2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2FuLCBwb3MpOwor CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCS8qCisJICogV2UgY291bGRuJ3QgYWR2YW5j ZSB3aXRoaW4gdGhlIHNhbWUgYmF0Y2gsIHRyeSBhZHZhbmNpbmcgdG8gdGhlIG5leHQKKwkgKiBi YXRjaCwgaWYgaXQncyBhbHJlYWR5IGxvYWRlZC4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9CQVRD SF9MT0FERUQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogYWR2YW5jZSB0byB0aGUg bmV4dCBiYXRjaCAqLworCQlwb3MtPmJhdGNoKys7CisKKwkJYmF0Y2ggPSBJTkRFWF9TQ0FOX0JB VENIKHNjYW4sIHBvcy0+YmF0Y2gpOworCQlBc3NlcnQoYmF0Y2ggIT0gTlVMTCk7CisKKwkJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXBvcy0+aW5kZXggPSBiYXRj aC0+Zmlyc3RJdGVtOworCQllbHNlCisJCQlwb3MtPmluZGV4ID0gYmF0Y2gtPmxhc3RJdGVtOwor CisJCUFzc2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2FuLCBwb3MpOworCisJCXJldHVybiB0cnVl OworCX0KKworCS8qIGNhbid0IGFkdmFuY2UgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisg KiBpbmRleF9iYXRjaF9wb3NfcmVzZXQKKyAqCQlSZXNldCB0aGUgcG9zaXRpb24sIHNvIHRoYXQg aXQgbG9va3MgYXMgaWYgbmV2ZXIgYWR2YW5jZWQuCisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9i YXRjaF9wb3NfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaFBvcyAqcG9z KQoreworCXBvcy0+YmF0Y2ggPSAtMTsKKwlwb3MtPmluZGV4ID0gLTE7Cit9CisKKy8qCisgKiBp bmRleF9zY2FuX3N0cmVhbV9yZWFkX25leHQKKyAqCQlyZXR1cm4gdGhlIG5leHQgYmxvY2sgdG8g cGFzcyB0byB0aGUgcmVhZCBzdHJlYW0KKyAqCisgKiBUaGlzIGFzc3VtZXMgdGhlICJjdXJyZW50 IiBzY2FuIGRpcmVjdGlvbiwgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogSWYgdGhl IGRpcmVjdGlvbiBjaGFuZ2VzIGJlZm9yZSBjb25zdW1pbmcgYWxsIGJsb2Nrcywgd2UnbGwgcmVz ZXQgdGhlIHN0cmVhbQorICogYW5kIHN0YXJ0IGZyb20gc2NyYXRjaC4gVGhlIHNjYW4gZGlyZWN0 aW9uIGNoYW5nZSBpcyBoYW5kbGVkIGVsc2V3aGVyZS4gSGVyZQorICogd2UgcmVseSBvbiBoYXZp bmcgdGhlIGNvcnJlY3QgdmFsdWUgaW4gYmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uLgorICoKKyAqIFRo ZSBwb3NpdGlvbiBvZiB0aGUgcmVhZF9zdHJlYW0gaXMgc3RvcmVkIGluIHN0cmVhbVBvcywgd2hp Y2ggbWF5IGJlIGFoZWFkIG9mCisgKiB0aGUgY3VycmVudCByZWFkUG9zICh3aGljaCBpcyB3aGF0 IGdvdCBjb25zdW1lZCBieSB0aGUgc2NhbikuCisgKgorICogVGhlIHN0cmVhbVBvcyBjYW4gaG93 ZXZlciBhbHNvIGdldCBiZWhpbmQgcmVhZFBvcyB0b28sIHdoZW4gc29tZSBibG9ja3MgYXJlCisg KiBza2lwcGVkIGFuZCBub3QgcmV0dXJuZWQgdG8gdGhlIHJlYWRfc3RyZWFtLiBBbiBleGFtcGxl IGlzIGFuIGluZGV4IHNjYW4gb24KKyAqIGEgY29ycmVsYXRlZCBpbmRleCwgd2l0aCBtYW55IGR1 cGxpY2F0ZSBibG9ja3MgYXJlIHNraXBwZWQsIG9yIGFuIElPUyB3aGVyZQorICogYWxsLXZpc2li bGUgYmxvY2tzIGFyZSBza2lwcGVkLgorICoKKyAqIFRoZSBmaXJzdCBiYXRjaCBpcyBhbHdheXMg bG9hZGVkIGZyb20gaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQoKS4gV2UgZG9uJ3QgZ2V0CisgKiBo ZXJlIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigpIGNhbGwsIHdoZW4g cHVsbGluZyB0aGUgZmlyc3QKKyAqIGhlYXAgdHVwbGUgZnJvbSB0aGUgc3RyZWFtLiBBZnRlciB0 aGF0LCBtb3N0IGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZCBieSB0aGlzCisgKiBjYWxsYmFjaywg ZHJpdmVuIGJ5IHRoZSByZWFkX3N0cmVhbSBsb29rLWFoZWFkIGRpc3RhbmNlLiBIb3dldmVyLCB3 aXRoCisgKiBkaXNhYmxlZCBwcmVmZXRjaGluZyAodGhhdCBpcywgd2l0aCBlZmZlY3RpdmVfaW9f Y29uY3VycmVuY3k9MCksIGFsbCBiYXRjaGVzCisgKiB3aWxsIGJlIGxvYWRlZCBpbiBpbmRleF9i YXRjaF9nZXRuZXh0X3RpZC4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHdlIGdvdCBoZXJlIG9ubHkg ZmFpcmx5IGxhdGUgaW4gdGhlIHNjYW4sIGUuZy4gaWYgbWFueSB0dXBsZXMKKyAqIGdvdCBza2lw cGVkIGluIHRoZSBpbmRleC1vbmx5IHNjYW4sIGV0Yy4gSW4gdGhpcyBjYXNlIGp1c3QgdXNlIHRo ZSByZWFkCisgKiBwb3NpdGlvbiBhcyBhIHN0cmVhbVBvcyBzdGFydGluZyBwb2ludC4KKyAqCisg KiBYWFggSXQgc2VlbXMgdGhlIHJlYWRQb3Mvc3RyZWFtUG9zIGNvbW1lbnRzIHNob3VsZCBiZSBw bGFjZWQgZWxzZXdoZXJlLiBUaGUKKyAqIHJlYWRfc3RyZWFtIGNhbGxiYWNrIGRvZXMgbm90IHNl ZW0gbGlrZSB0aGUgcmlnaHQgcGxhY2UuCisgKi8KK3N0YXRpYyBCbG9ja051bWJlcgoraW5kZXhf c2Nhbl9zdHJlYW1fcmVhZF9uZXh0KFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQl2b2lkICpj YWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQorewor CUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2Rh dGE7CisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7 CisJSW5kZXhTY2FuQmF0Y2hQb3MgKnN0cmVhbVBvcyA9ICZiYXRjaFN0YXRlLT5zdHJlYW1Qb3M7 CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaFN0YXRlLT5kaXJlY3Rpb247CisKKwkv KiBCeSBub3cgd2Ugc2hvdWxkIGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nhbi4gKi8KKwlB c3NlcnQoZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qCisJICog VGhlIHJlYWQgcG9zaXRpb24gKHJlYWRQb3MpIGhhcyB0byBiZSB2YWxpZC4KKwkgKgorCSAqIFdl IGluaXRpYWxpemUvYWR2YW5jZSBpdCBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRvIHJlYWQgdGhl IGhlYXAgdHVwbGUsCisJICogYW5kIGl0IGdldHMgaW52YWxpZGF0ZWQgd2hlbiB3ZSByZWFjaCB0 aGUgZW5kIG9mIHRoZSBzY2FuIChidXQgdGhlbiB3ZQorCSAqIGRvbid0IGludm9rZSB0aGUgY2Fs bGJhY2sgYWdhaW4pLgorCSAqCisJICogWFhYIFRoaXMgYXBwbGllcyB0byB0aGUgcmVhZFBvcy4g V2UnbGwgdXNlIHN0cmVhbVBvcyB0byBkZXRlcm1pbmUgd2hpY2gKKwkgKiBibG9ja3MgdG8gcGFz cyB0byB0aGUgc3RyZWFtLCBhbmQgcmVhZFBvcyBtYXkgYmUgdXNlZCB0byBpbml0aWFsaXplIGl0 LgorCSAqLworCUFzc2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2FuLCAmYmF0Y2hTdGF0ZS0+cmVh ZFBvcyk7CisKKwkvKgorCSAqIFRyeSB0byBhZHZhbmNlIHRoZSBzdHJlYW1Qb3MgdG8gdGhlIG5l eHQgaXRlbSwgYW5kIGlmIHRoYXQgZG9lc24ndAorCSAqIHN1Y2NlZWQgKGlmIHRoZXJlIGFyZSBu byBtb3JlIGl0ZW1zIGluIGxvYWRlZCBiYXRjaGVzKSwgdHJ5IGxvYWRpbmcgdGhlCisJICogbmV4 dCBvbmUuCisJICoKKwkgKiBGSVhNRSBVbmxpa2UgaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQsIHRo aXMgY2FuIGxvb3AgbW9yZSB0aGFuIHR3aWNlLiBJZgorCSAqIG1hbnkgYmxvY2tzIGdldCBza2lw cGVkIGR1ZSB0byBjdXJyZW50UHJlZmV0Y2hCbG9jayBvciBhbGwtdmlzaWJpbGl0eQorCSAqIChw ZXIgdGhlICJwcmVmZXRjaCIgY2FsbGJhY2spLCB3ZSBnZXQgdG8gbG9hZCBhZGRpdGlvbmFsIGJh dGNoZXMuIEluCisJICogdGhlIHdvcnN0IGNhc2Ugd2UgaGl0IHRoZSBJTkRFWF9TQ0FOX01BWF9C QVRDSEVTIGxpbWl0IGFuZCBoYXZlIHRvCisJICogInBhdXNlIiB0aGUgc3RyZWFtLgorCSAqLwor CXdoaWxlICh0cnVlKQorCXsKKwkJYm9vbAkJYWR2YW5jZWQgPSBmYWxzZTsKKworCQkvKgorCQkg KiBJZiB0aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQsIHNl dCBpdCB0byB0aGUKKwkJICogY3VycmVudCByZWFkIHBvc2l0aW9uLiBUaGlzIGlzIHRoZSBpdGVt IHRoZSBjYWxsZXIgaXMgdHJpbmcgdG8KKwkJICogcmVhZCwgc28gaXQncyB3aGF0IHdlIHNob3Vs ZCByZXR1cm4gdG8gdGhlIHN0cmVhbS4KKwkJICovCisJCWlmIChJTkRFWF9TQ0FOX1BPU19JTlZB TElEKHN0cmVhbVBvcykpCisJCXsKKwkJCSpzdHJlYW1Qb3MgPSBiYXRjaFN0YXRlLT5yZWFkUG9z OworCQkJYWR2YW5jZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKGluZGV4X2JhdGNoX3Bvc19h ZHZhbmNlKHNjYW4sIHN0cmVhbVBvcywgZGlyZWN0aW9uKSkKKwkJeworCQkJYWR2YW5jZWQgPSB0 cnVlOworCQl9CisKKwkJLyoKKwkJICogRklYTUUgTWF5YmUgY2hlY2sgdGhlIHN0cmVhbVBvcyBp cyBub3QgYmVoaW5kIHJlYWRQb3M/CisJCSAqCisJCSAqIEZJWE1FIEFjdHVhbGx5LCBjb3VsZCBz dHJlYW1Qb3MgZ2V0IHN0YWxlL2xhZ2dpbmcgYmVoaW5kIHJlYWRQb3MsCisJCSAqIGFuZCBpZiB5 ZXMgaG93IG11Y2guIENvdWxkIGl0IGdldCBzbyBmYXIgYmVoaW5kIHRvIG5vdCBiZSB2YWxpZCwK KwkJICogcG9pbnRpbmcgYXQgYSBmcmVlZCBiYXRjaD8gSW4gdGhhdCBjYXNlIHdlIGNhbid0IGV2 ZW4gYWR2YW5jZSBpdCwKKwkJICogYW5kIHdlIHNob3VsZCBqdXN0IGluaXRpYWxpemUgaXQgdG8g cmVhZFBvcy4gV2UgbWlnaHQgZG8gdGhhdAorCQkgKiBhbnl3YXksIEkgZ3Vlc3MsIGp1c3QgdG8g c2F2ZSBvbiAicG9pbnRsZXNzIiBhZHZhbmNlcyAoaXQgbXVzdAorCQkgKiBhZ3JlZSB3aXRoIHJl YWRQb3MsIHdlIGNhbid0IGFsbG93ICJyZXRyb2FjdGl2ZWx5IiBjaGFuZ2luZyB0aGUKKwkJICog YmxvY2sgc2VxdWVuY2UpLgorCQkgKi8KKworCQkvKgorCQkgKiBJZiB3ZSBhZHZhbmNlZCB0aGUg cG9zaXRpb24sIGVpdGhlciByZXR1cm4gdGhlIGJsb2NrIGZvciB0aGUgVElELAorCQkgKiBvciBz a2lwIGl0IChhbmQgdGhlbiB0cnkgYWR2YW5jaW5nIGFnYWluKS4KKwkJICoKKwkJICogVGhlIGJs b2NrIG1heSBiZSAic2tpcHBlZCIgZm9yIHR3byByZWFzb25zLiBGaXJzdCwgdGhlIGNhbGxlciBt YXkKKwkJICogZGVmaW5lIGEgInByZWZldGNoIiBjYWxsYmFjayB0aGF0IHRlbGxzIHVzIHRvIHNr aXAgaXRlbXMgKElPUyBkb2VzCisJCSAqIHRoaXMgdG8gc2tpcCBhbGwtdmlzaWJsZSBwYWdlcyku IFNlY29uZCwgY3VycmVudFByZWZldGNoQmxvY2sgaXMKKwkJICogdXNlZCB0byBza2lwIGR1cGxp Y2F0ZSBibG9jayBudW1iZXJzIChhIHNlcXVlbmNlIG9mIFRJRFMgZm9yIHRoZQorCQkgKiBzYW1l IGJsb2NrKS4KKwkJICovCisJCWlmIChhZHZhbmNlZCkKKwkJeworCQkJSW5kZXhTY2FuQmF0Y2gg c3RyZWFtQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHN0cmVhbVBvcy0+YmF0Y2gpOwor CQkJSXRlbVBvaW50ZXIgdGlkID0gJnN0cmVhbUJhdGNoLT5pdGVtc1tzdHJlYW1Qb3MtPmluZGV4 XS5oZWFwVGlkOworCisJCQlERUJVR19MT0coImluZGV4X3NjYW5fc3RyZWFtX3JlYWRfbmV4dDog aW5kZXggJWQgVElEICgldSwldSkiLAorCQkJCQkgIHN0cmVhbVBvcy0+aW5kZXgsCisJCQkJCSAg SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkgIEl0ZW1Qb2ludGVyR2V0T2Zm c2V0TnVtYmVyKHRpZCkpOworCisJCQkvKgorCQkJICogSWYgdGhlcmUncyBhIHByZWZldGNoIGNh bGxiYWNrLCB1c2UgaXQgdG8gZGVjaWRlIGlmIHdlIG5lZWQgdG8KKwkJCSAqIHJlYWQgdGhlIG5l eHQgYmxvY2suCisJCQkgKgorCQkJICogV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBjaGVja2lu ZyBjdXJyZW50UHJlZmV0Y2hCbG9jazsgaXQncworCQkJICogZXNzZW50aWFsIHRoYXQgdGhlIFZN IGNhY2hlIHVzZWQgYnkgaW5kZXgtb25seSBzY2FucyBpcworCQkJICogaW50aWFsaXplZCBoZXJl LgorCQkJICovCisJCQlpZiAoYmF0Y2hTdGF0ZS0+cHJlZmV0Y2ggJiYKKwkJCQkhYmF0Y2hTdGF0 ZS0+cHJlZmV0Y2goc2NhbiwgYmF0Y2hTdGF0ZS0+cHJlZmV0Y2hBcmcsIHN0cmVhbVBvcykpCisJ CQl7CisJCQkJREVCVUdfTE9HKCJpbmRleF9zY2FuX3N0cmVhbV9yZWFkX25leHQ6IHNraXAgYmxv Y2sgKGNhbGxiYWNrKSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBzYW1lIGJsb2Nr IGFzIGJlZm9yZSwgZG9uJ3QgbmVlZCB0byByZWFkIGl0ICovCisJCQlpZiAoYmF0Y2hTdGF0ZS0+ Y3VycmVudFByZWZldGNoQmxvY2sgPT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQor CQkJeworCQkJCURFQlVHX0xPRygiaW5kZXhfc2Nhbl9zdHJlYW1fcmVhZF9uZXh0OiBza2lwIGJs b2NrIChjdXJyZW50UHJlZmV0Y2hCbG9jaykiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJ YmF0Y2hTdGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKHRpZCk7CisKKwkJCXJldHVybiBiYXRjaFN0YXRlLT5jdXJyZW50UHJlZmV0Y2hCbG9jazsK KwkJfQorCisJCS8qCisJCSAqIENvdWxkbid0IGFkdmFuY2UgdGhlIHBvc2l0aW9uLCBubyBtb3Jl IGl0ZW1zIGluIHRoZSBsb2FkZWQgYmF0Y2hlcy4KKwkJICogVHJ5IGxvYWRpbmcgdGhlIG5leHQg YmF0Y2ggLSBpZiB0aGF0IHN1Y2NlZWRzLCB0cnkgYWR2YW5jaW5nIGFnYWluCisJCSAqICh0aGlz IHRpbWUgdGhlIGFkdmFuY2Ugc2hvdWxkIHdvcmssIGJ1dCB3ZSBtYXkgc2tpcCBhbGwgdGhlIGl0 ZW1zKS4KKwkJICoKKwkJICogSWYgd2UgZmFpbCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoLCB3ZSdy ZSBkb25lLgorCQkgKi8KKwkJaWYgKCFpbmRleF9iYXRjaF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlv bikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDb25zaWRlciBkaXNhYmxpbmcgcHJlZmV0Y2hp bmcgd2hlbiB3ZSBjYW4ndCBrZWVwIGEgc3VmZmljaWVudGx5CisJCSAqIGxhcmdlICJpbmRleCB0 dXBsZSBkaXN0YW5jZSIgYmV0d2VlbiByZWFkUG9zIGFuZCBzdHJlYW1Qb3MuCisJCSAqCisJCSAq IE9ubHkgY29uc2lkZXIgZG9pbmcgdGhpcyB3aGVuIHdlJ3JlIG5vdCBvbiB0aGUgdmVyeSBmaXJz dCBiYXRjaCwKKwkJICogd2hlbiByZWFkUG9zIGFuZCBzdHJlYW1Qb3Mgc2hhcmUgdGhlIHNhbWUg YmF0Y2guCisJCSAqLworCQlpZiAoIWJhdGNoU3RhdGUtPmZpbmlzaGVkICYmICFiYXRjaFN0YXRl LT5wcmVmZXRjaGluZ0xvY2tlZEluKQorCQl7CisJCQlpbnQJCQlpbmRleGRpZmY7CisKKwkJCWlm IChzdHJlYW1Qb3MtPmJhdGNoIDw9IElOREVYX1NDQU5fTUlOX0RJU1RBTkNFX05CQVRDSEVTKQor CQkJeworCQkJCS8qIFRvbyBlYXJseSB0byBjaGVjayBpZiBwcmVmZXRjaGluZyBzaG91bGQgYmUg ZGlzYWJsZWQgKi8KKwkJCX0KKwkJCWVsc2UgaWYgKGJhdGNoU3RhdGUtPnJlYWRQb3MuYmF0Y2gg PT0gc3RyZWFtUG9zLT5iYXRjaCkKKwkJCXsKKwkJCQlJbmRleFNjYW5CYXRjaFBvcyAqcmVhZFBv cyA9ICZiYXRjaFN0YXRlLT5yZWFkUG9zOworCisJCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyZWN0aW9uKSkKKwkJCQkJaW5kZXhkaWZmID0gc3RyZWFtUG9zLT5pbmRleCAtIHJlYWRQ b3MtPmluZGV4OworCQkJCWVsc2UKKwkJCQl7CisJCQkJCUluZGV4U2NhbkJhdGNoIHJlYWRCYXRj aCA9CisJCQkJCQlJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCQkJ CQlpbmRleGRpZmYgPSAocmVhZFBvcy0+aW5kZXggLSByZWFkQmF0Y2gtPmZpcnN0SXRlbSkgLQor CQkJCQkJKHN0cmVhbVBvcy0+aW5kZXggLSByZWFkQmF0Y2gtPmZpcnN0SXRlbSk7CisJCQkJfQor CisJCQkJaWYgKGluZGV4ZGlmZiA8IElOREVYX1NDQU5fTUlOX1RVUExFX0RJU1RBTkNFKQorCQkJ CXsKKwkJCQkJYmF0Y2hTdGF0ZS0+ZGlzYWJsZWQgPSB0cnVlOworCQkJCQlyZXR1cm4gSW52YWxp ZEJsb2NrTnVtYmVyOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQliYXRjaFN0YXRlLT5w cmVmZXRjaGluZ0xvY2tlZEluID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQkJYmF0 Y2hTdGF0ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IHRydWU7CisJCX0KKwl9CisKKwkvKiBubyBt b3JlIGl0ZW1zIGluIHRoaXMgc2NhbiAqLworCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9nZXRuZXh0IC0gZ2V0IHRo ZSBuZXh0IGJhdGNoIG9mIFRJRHMgZnJvbSBhIHNjYW4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYg d2UgbWFuYWdlZCB0byByZWFkIGEgYmF0Y2ggb2YgVElEcywgb3IgZmFsc2UgaWYgdGhlcmUgYXJl IG5vCisgKiBtb3JlIFRJRHMgaW4gdGhlIHNjYW4uIFRoZSBsb2FkIG1heSBhbHNvIHJldHVybiBm YWxzZSBpZiB3ZSB1c2VkIHRoZSBtYXhpbXVtCisgKiBudW1iZXIgb2YgYmF0Y2hlcyAoSU5ERVhf U0NBTl9NQVhfQkFUQ0hFUyksIGluIHdoaWNoIGNhc2Ugd2UnbGwgcmVzZXQgdGhlCisgKiBzdHJl YW0gYW5kIGNvbnRpbnVlIHRoZSBzY2FuIGxhdGVyLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUgYmF0Y2ggd2FzIGxvYWRlZCBzdWNjZXNzZnVsbHksIGZhbHNlIG90aGVyd2lzZS4KKyAqCisg KiBUaGlzIG9ubHkgbG9hZHMgdGhlIFRJRHMgYW5kIHJlc2V0cyB0aGUgdmFyaW91cyBiYXRjaCBm aWVsZHMgdG8gZnJlc2gKKyAqIHN0YXRlLiBJdCBkb2VzIG5vdCBzZXQgeHNfaGVhcHRpZC94c19p dHVwL3hzX2hpdHVwLCB0aGF0J3MgdGhlCisgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZm9sbG93 aW5nIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKCkgY2FsbHMuCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KK3N0YXRpYyBib29sCitpbmRleF9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0 Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisJSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCA9 IE5VTEwsCisJCQkJYmF0Y2ggPSBOVUxMOworCisJU0NBTl9DSEVDS1M7CisJQ0hFQ0tfU0NBTl9Q Uk9DRURVUkUoYW1nZXRiYXRjaCk7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBh IHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKworCS8qIERpZCB3ZSBhbHJlYWR5IHJlYWQgdGhlIGxh c3QgYmF0Y2ggZm9yIHRoaXMgc2Nhbj8gKi8KKwlpZiAoYmF0Y2hTdGF0ZS0+ZmluaXNoZWQpCisJ CXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJZiB3ZSBhbHJlYWR5IHVzZWQgdGhlIG1heGltdW0g bnVtYmVyIG9mIGJhdGNoIHNsb3RzIGF2YWlsYWJsZSwgaXQncworCSAqIHBvaW50bGVzcyB0byB0 cnkgbG9hZGluZyBhbm90aGVyIG9uZS4gVGhpcyBjYW4gaGFwcGVuIGZvciB2YXJpb3VzCisJICog cmVhc29ucywgZS5nLiBmb3IgaW5kZXgtb25seSBzY2FucyBvbiBhbGwtdmlzaWJsZSB0YWJsZSwg b3Igc2tpcHBpbmcKKwkgKiBkdXBsaWNhdGUgYmxvY2tzIG9uIHBlcmZlY3RseSBjb3JyZWxhdGVk IGluZGV4ZXMsIGV0Yy4KKwkgKgorCSAqIFdlIGNvdWxkIGVubGFyZ2UgdGhlIGFycmF5IHRvIGFs bG93IG1vcmUgYmF0Y2hlcywgYnV0IHRoYXQncyBmdXRpbGUsIHdlCisJICogY2FuIGFsd2F5cyBj b25zdHJ1Y3QgYSBjYXNlIHVzaW5nIG1vcmUgbWVtb3J5LiBOb3Qgb25seSBpdCB3b3VsZCByaXNr CisJICogT09NLCBpdCdkIGFsc28gYmUgaW5lZmZpY2llbnQgYmVjYXVzZSB0aGlzIGhhcHBlbnMg ZWFybHkgaW4gdGhlIHNjYW4KKwkgKiAoc28gaXQnZCBpbnRlcmZlcmUgd2l0aCBMSU1JVCBxdWVy aWVzKS4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKQorCXsKKwkJREVC VUdfTE9HKCJpbmRleF9iYXRjaF9nZXRuZXh0OiByYW4gb3V0IG9mIHNwYWNlIGZvciBiYXRjaGVz Iik7CisJCXNjYW4tPmJhdGNoU3RhdGUtPnJlc2V0ID0gdHJ1ZTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaW5kZXhfYmF0Y2hfcHJpbnQoImluZGV4X2JhdGNoX2dldG5leHQgLyBzdGFydCIsIHNj YW4pOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGJhdGNoIHRoYXQg YW1nZXRiYXRjaCBoYXMgdG8gcGljayB0aGluZ3MKKwkgKiB1cCBmcm9tCisJICovCisJaWYgKGJh dGNoU3RhdGUtPmZpcnN0QmF0Y2ggPCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gpCisJCXByaW9yYmF0 Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNoU3RhdGUtPm5leHRCYXRjaCAtIDEpOwor CisJYmF0Y2ggPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaChzY2Fu LCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkJCSAgZGlyZWN0aW9uKTsKKwlpZiAoYmF0Y2ggIT0g TlVMTCkKKwl7CisJCS8qCisJCSAqIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgQU0sIGJ1dCB3 ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgcXVldWUuCisJCSAqIE1heWJlIHRoYXQgc2hvdWxkIGJl IHBhcnQgb2YgdGhlICJiYXRjaCBhbGxvY2F0aW9uIiB0aGF0IGhhcHBlbnMgaW4KKwkJICogdGhl IEFNPworCQkgKi8KKwkJaW50CQkJYmF0Y2hJbmRleCA9IGJhdGNoU3RhdGUtPm5leHRCYXRjaDsK KworCQlJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNoSW5kZXgpID0gYmF0Y2g7CisKKwkJYmF0 Y2hTdGF0ZS0+bmV4dEJhdGNoKys7CisKKwkJREVCVUdfTE9HKCJpbmRleF9iYXRjaF9nZXRuZXh0 IGZpcnN0QmF0Y2ggJWQgbmV4dEJhdGNoICVkIGJhdGNoICVwIiwKKwkJCQkgIGJhdGNoU3RhdGUt PmZpcnN0QmF0Y2gsIGJhdGNoU3RhdGUtPm5leHRCYXRjaCwgYmF0Y2gpOworCisJCS8qIERlbGF5 IGluaXRpYWxpemluZyBzdHJlYW0gdW50aWwgcmVhZGluZyBmcm9tIHNjYW4ncyBzZWNvbmQgYmF0 Y2ggKi8KKwkJaWYgKHByaW9yYmF0Y2ggJiYgIXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgJiYgIWJh dGNoU3RhdGUtPmRpc2FibGVkICYmCisJCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQkJ c2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24o UkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRp b24sIE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQkgICBpbmRleF9zY2FuX3N0cmVhbV9yZWFkX25l eHQsIHNjYW4sIDApOworCX0KKwllbHNlCisJCWJhdGNoU3RhdGUtPmZpbmlzaGVkID0gdHJ1ZTsK KworCUFzc2VydENoZWNrQmF0Y2hlcyhzY2FuKTsKKworCWluZGV4X2JhdGNoX3ByaW50KCJpbmRl eF9iYXRjaF9nZXRuZXh0IC8gZW5kIiwgc2Nhbik7CisKKwlyZXR1cm4gKGJhdGNoICE9IE5VTEwp OworfQorCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxpemUgdmFyaW91cyBm aWVsZHMgLyBhcnJheXMgbmVlZGVkIGJ5IGJhdGNoaW5nLgorICoKKyAqIEZJWE1FIFRoaXMgaXMg YSBiaXQgYWQtaG9jIGhvZGdlIHBvZGdlLCBkdWUgdG8gaG93IEkgd2FzIGFkZGluZyBtb3JlIGFu ZAorICogbW9yZSBwaWVjZXMuIFNvbWUgb2YgdGhlIGZpZWxkcyBtYXkgYmUgbm90IHF1aXRlIG5l Y2Vzc2FyeSwgbmVlZHMgY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2luZGV4X2JhdGNoX2lu aXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIGluaXQgYmF0Y2hpbmcgaW5mbyAqLworCUFz c2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsK KwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJhdGNoICE9IE5V TEwpOworCisJc2Nhbi0+YmF0Y2hTdGF0ZSA9IHBhbGxvYyhzaXplb2YoSW5kZXhTY2FuQmF0Y2hT dGF0ZSkpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBiYXRjaC4KKwkgKgorCSAqIFdlIHBy ZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGFtZ2V0YmF0Y2ggcmV0 dXJucy4KKwkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNs ZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KKwkgKgorCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBs ZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQorCSAqIHJhY2Ug Y29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0 aGUgVk0uCisJICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KKwkgKgorCSAqIFdoZW4gd2UgZHJvcCBwaW5zIGVhZ2Vy bHksIHRoZSBtZWNoYW5pc20gdGhhdCBtYXJrcyBpbmRleCB0dXBsZXMgYXMKKwkgKiBMUF9ERUFE IGhhcyB0byBkZWFsIHdpdGggY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHJhY2VzLiAgVGhlIHNj aGVtZQorCSAqIHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsg d2hlbiBzY2FubmluZyB1bmxvZ2dlZAorCSAqIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMg c2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBMU04pLiAgT3B0IG91dAorCSAqIG9mIGVhZ2VyIHBp biBkcm9wcGluZyBkdXJpbmcgdW5sb2dnZWQgcmVsYXRpb24gc2NhbnMgZm9yIG5vdy4KKwkgKi8K KwlzY2FuLT5iYXRjaFN0YXRlLT5kcm9wUGluID0KKwkJKCFzY2FuLT54c193YW50X2l0dXAgJiYg SXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCisJCSBSZWxhdGlvbk5lZWRzV0FM KHNjYW4tPmluZGV4UmVsYXRpb24pKTsKKwlzY2FuLT5iYXRjaFN0YXRlLT5maW5pc2hlZCA9IGZh bHNlOworCXNjYW4tPmJhdGNoU3RhdGUtPnJlc2V0ID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hTdGF0 ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IGZhbHNlOworCXNjYW4tPmJhdGNoU3RhdGUtPmRpc2Fi bGVkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hTdGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CisJc2Nhbi0+YmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uID0gTm9Nb3Zl bWVudFNjYW5EaXJlY3Rpb247CisJLyogcG9zaXRpb25zIGluIHRoZSBxdWV1ZSBvZiBiYXRjaGVz ICovCisJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZzY2FuLT5iYXRjaFN0YXRlLT5yZWFk UG9zKTsKKwlpbmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJnNjYW4tPmJhdGNoU3RhdGUtPnN0 cmVhbVBvcyk7CisJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZzY2FuLT5iYXRjaFN0YXRl LT5tYXJrUG9zKTsKKworCXNjYW4tPmJhdGNoU3RhdGUtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nh bi0+YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcyA9IElOREVYX1NDQU5fTUFYX0JBVENIRVM7CisJc2Nh bi0+YmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCA9IDA7CS8qIGZpcnN0IGJhdGNoICovCisJc2Nhbi0+ YmF0Y2hTdGF0ZS0+bmV4dEJhdGNoID0gMDsJLyogZmlyc3QgYmF0Y2ggaXMgZW1wdHkgKi8KKwor CXNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXMgPQorCQlwYWxsb2Moc2l6ZW9mKEluZGV4U2NhbkJh dGNoRGF0YSAqKSAqIHNjYW4tPmJhdGNoU3RhdGUtPm1heEJhdGNoZXMpOworCisJc2Nhbi0+YmF0 Y2hTdGF0ZS0+cHJlZmV0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNoU3RhdGUtPnByZWZldGNoQXJn ID0gTlVMTDsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX3Jlc2V0CisgKgkJUmVzZXQgdGhlIGJh dGNoIGJlZm9yZSByZWFkaW5nIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEuCisgKgorICogY29tcGxl dGUgLSB0cnVlIG1lYW5zIHdlIHJlc2V0IGV2ZW4gbWFya2VkIGJhdGNoCisgKgorICAqIFhYWCBT aG91bGQgdGhpcyByZXNldCB0aGUgYmF0Y2ggbWVtb3J5IGNvbnRleHQsIHhzX2l0dXAsIHhzX2hp dHVwLCBldGM/CisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9yZXNldChJbmRleFNjYW5E ZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCit7CisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hT dGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisKKwkvKiBiYWlsIG91dCBpZiBiYXRjaGluZyBub3Qg ZW5hYmxlZCAqLworCWlmICghYmF0Y2hTdGF0ZSkKKwkJcmV0dXJuOworCisJQXNzZXJ0Q2hlY2tC YXRjaGVzKHNjYW4pOworCisJaW5kZXhfYmF0Y2hfcHJpbnQoImluZGV4X2JhdGNoX3Jlc2V0Iiwg c2Nhbik7CisKKwkvKiBXaXRoIGJhdGNoaW5nIGVuYWJsZWQsIHdlIHNob3VsZCBoYXZlIGEgcmVh ZCBzdHJlYW0uIFJlc2V0IGl0LiAqLworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCWlm IChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19o ZWFwZmV0Y2gtPnJzKTsKKworCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMgKi8KKwlpbmRleF9iYXRj aF9wb3NfcmVzZXQoc2NhbiwgJmJhdGNoU3RhdGUtPnJlYWRQb3MpOworCWluZGV4X2JhdGNoX3Bv c19yZXNldChzY2FuLCAmYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zKTsKKworCS8qCisJICogV2l0aCAi Y29tcGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0Y2gs IGVpdGhlcgorCSAqIGJ5IGp1c3QgZm9yZ2V0dGluZyBpdCAoaWYgaXQncyBzdGlsbCBpbiB0aGUg cXVldWUpLCBvciBieSBleHBsaWNpdGx5CisJICogZnJlZWluZyBpdC4KKwkgKgorCSAqIFhYWCBE byB0aGlzIGJlZm9yZSB0aGUgbG9vcCwgc28gdGhhdCBpdCBjYWxscyB0aGUgYW1mcmVlYmF0Y2go KS4KKwkgKi8KKwlpZiAoY29tcGxldGUgJiYgdW5saWtlbHkoYmF0Y2hTdGF0ZS0+bWFya0JhdGNo ICE9IE5VTEwpKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2hQb3MgKm1hcmtQb3MgPSAmYmF0Y2hTdGF0 ZS0+bWFya1BvczsKKwkJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hTdGF0ZS0+bWFy a0JhdGNoOworCisJCS8qIGFsd2F5cyByZXNldCB0aGUgcG9zaXRpb24sIGZvcmdldCB0aGUgbWFy a2VkIGJhdGNoICovCisJCWJhdGNoU3RhdGUtPm1hcmtCYXRjaCA9IE5VTEw7CisKKwkJLyoKKwkJ ICogSWYgd2UndmUgYWxyZWFkeSBtb3ZlZCBwYXN0IHRoZSBtYXJrZWQgYmF0Y2ggKGl0J3Mgbm90 IGluIHRoZQorCQkgKiBjdXJyZW50IHF1ZXVlKSwgZnJlZSBpdCBleHBsaWNpdGx5LiBPdGhlcndp c2UgaXQnbGwgYmUgaW4gdGhlIGZyZWVkCisJCSAqIGxhdGVyLgorCQkgKi8KKwkJaWYgKG1hcmtQ b3MtPmJhdGNoIDwgYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCB8fAorCQkJbWFya1Bvcy0+YmF0Y2gg Pj0gYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoKQorCQkJaW5kZXhfYmF0Y2hfZnJlZShzY2FuLCBtYXJr QmF0Y2gpOworCisJCS8qIHJlc2V0IHBvc2l0aW9uIG9ubHkgYWZ0ZXIgdGhlIHF1ZXVlIHJhbmdl IGNoZWNrICovCisJCWluZGV4X2JhdGNoX3Bvc19yZXNldChzY2FuLCAmYmF0Y2hTdGF0ZS0+bWFy a1Bvcyk7CisJfQorCisJLyogcmVsZWFzZSBhbGwgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICov CisJd2hpbGUgKGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2ggPCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gp CisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0 Y2hTdGF0ZS0+Zmlyc3RCYXRjaCk7CisKKwkJREVCVUdfTE9HKCJmcmVlaW5nIGJhdGNoICVkICVw IiwgYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCwgYmF0Y2gpOworCisJCWluZGV4X2JhdGNoX2ZyZWUo c2NhbiwgYmF0Y2gpOworCisJCS8qIHVwZGF0ZSB0aGUgdmFsaWQgcmFuZ2UsIHNvIHRoYXQgYXNz ZXJ0cyAvIGRlYnVnZ2luZyB3b3JrcyAqLworCQliYXRjaFN0YXRlLT5maXJzdEJhdGNoKys7CisJ fQorCisJLyogcmVzZXQgcmVsZXZhbnQgYmF0Y2ggc3RhdGUgZmllbGRzICovCisJQXNzZXJ0KGJh dGNoU3RhdGUtPm1heEJhdGNoZXMgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyk7CisJYmF0Y2hT dGF0ZS0+Zmlyc3RCYXRjaCA9IDA7IC8qIGZpcnN0IGJhdGNoICovCisJYmF0Y2hTdGF0ZS0+bmV4 dEJhdGNoID0gMDsJLyogZmlyc3QgYmF0Y2ggaXMgZW1wdHkgKi8KKworCWJhdGNoU3RhdGUtPmZp bmlzaGVkID0gZmFsc2U7CisJYmF0Y2hTdGF0ZS0+cmVzZXQgPSBmYWxzZTsKKwliYXRjaFN0YXRl LT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCUFzc2VydENo ZWNrQmF0Y2hlcyhzY2FuKTsKK30KKworc3RhdGljIHZvaWQKK2luZGV4X2JhdGNoX2tpbGxfaXRl bShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSW5kZXhTY2FuQmF0Y2hQb3MgKnJlYWRQb3MgPSAm c2Nhbi0+YmF0Y2hTdGF0ZS0+cmVhZFBvczsKKwlJbmRleFNjYW5CYXRjaERhdGEgKnJlYWRCYXRj aCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgcmVhZFBvcy0+YmF0Y2gpOworCisJQXNzZXJ0Q2hl Y2tCYXRjaFBvc1ZhbGlkKHNjYW4sIHJlYWRQb3MpOworCisJLyoKKwkgKiBYWFggTWF5YmUgd2Ug Y2FuIG1vdmUgdGhlIHN0YXRlIHRoYXQgaW5kaWNhdGVzIGlmIGFuIGl0ZW0gaGFzIGJlZW4KKwkg KiBraWxsZWQgaW50byBJbmRleFNjYW5CYXRjaERhdGEuaXRlbXNbXSBhcnJheS4KKwkgKgorCSAq IFNlZToKKwkgKiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3puTE43UDBpMi1ZRW52M1FHbWVB NUFNamRjamtyYU9fbnozSDJWYTFWMVdPQUBtYWlsLmdtYWlsLmNvbQorCSAqLworCWlmIChyZWFk QmF0Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJCXJlYWRCYXRjaC0+a2lsbGVkSXRlbXMgPSAo aW50ICopCisJCQlwYWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSAqIHNpemVvZihpbnQpKTsKKwlp ZiAocmVhZEJhdGNoLT5udW1LaWxsZWQgPCBNYXhUSURzUGVyQlRyZWVQYWdlKQorCQlyZWFkQmF0 Y2gtPmtpbGxlZEl0ZW1zW3JlYWRCYXRjaC0+bnVtS2lsbGVkKytdID0gcmVhZFBvcy0+aW5kZXg7 Cit9CisKK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9mcmVlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJU0NBTl9DSEVDS1M7CisJQ0hFQ0tfU0NBTl9QUk9D RURVUkUoYW1mcmVlYmF0Y2gpOworCisJQXNzZXJ0Q2hlY2tCYXRjaChzY2FuLCBiYXRjaCk7CisK KwkvKiBkb24ndCBmcmVlIHRoZSBiYXRjaCB0aGF0IGlzIG1hcmtlZCAqLworCWlmIChiYXRjaCA9 PSBzY2FuLT5iYXRjaFN0YXRlLT5tYXJrQmF0Y2gpCisJCXJldHVybjsKKworCXNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbWZyZWViYXRjaChzY2FuLCBiYXRjaCk7Cit9CisKKy8qICov CitzdGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlp bmRleF9iYXRjaF9yZXNldChzY2FuLCB0cnVlKTsKK30KKworLyoKKyAqIFhYWCBCb3RoIGluZGV4 X2JhdGNoX2FsbG9jKCkgY2FsbHMgaW4gYnRyZWUgdXNlIE1heFRJRHNQZXJCVHJlZVBhZ2UsCisg KiB3aGljaCBzZWVtcyB1bmZvcnR1bmF0ZSAtIGl0IGluY3JlYXNlcyB0aGUgYWxsb2NhdGlvbiBz aXplcywgZXZlbiBpZgorICogdGhlIGluZGV4IHdvdWxkIGJlIGZpbmUgd2l0aCBzbWFsbGVyIGFy cmF5cy4gVGhpcyBtZWFucyBhbGwgYmF0Y2hlcyBleGNlZWQKKyAqIEFMTE9DX0NIVU5LX0xJTUlU LCBmb3JjaW5nIGEgc2VwYXJhdGUgbWFsbG9jIChleHBlbnNpdmUpLgorICovCitJbmRleFNjYW5C YXRjaAoraW5kZXhfYmF0Y2hfYWxsb2MoaW50IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCkKK3sK KwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IHBhbGxvYyhvZmZzZXRvZihJbmRleFNjYW5CYXRjaERh dGEsIGl0ZW1zKSArCisJCQkJCQkJCSAgc2l6ZW9mKEluZGV4U2NhbkJhdGNoUG9zSXRlbSkgKiBt YXhpdGVtcyk7CisKKwliYXRjaC0+Zmlyc3RJdGVtID0gLTE7CisJYmF0Y2gtPmxhc3RJdGVtID0g LTE7CisJYmF0Y2gtPmtpbGxlZEl0ZW1zID0gTlVMTDsKKwliYXRjaC0+bnVtS2lsbGVkID0gMDsK KworCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBh IHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgorCSAqIFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhp cywgd2hpY2ggc2hvdWxkIGFsd2F5cyBnaXZlIHRoZSBpbmRleCBBTQorCSAqIGVub3VnaCBzcGFj ZSB0byBmaXQgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCisJICovCisJYmF0Y2gtPmN1 cnJUdXBsZXMgPSBOVUxMOworCWlmICh3YW50X2l0dXApCisJCWJhdGNoLT5jdXJyVHVwbGVzID0g cGFsbG9jKEJMQ0tTWik7CisKKwliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwliYXRjaC0+ cG9zID0gTlVMTDsKKwliYXRjaC0+aXRlbXN2aXNpYmlsaXR5ID0gTlVMTDsJLyogcGVyLWJhdGNo IElPUyB2aXNpYmlsaXR5ICovCisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBVbmxvY2sg YmF0Y2gtPmJ1Zi4gIElmIGJhdGNoIHNjYW4gaXMgZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28u ICBEcm9wcGluZworICogdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBh Y3F1aXJpbmcgYSBjbGVhbnVwIGxvY2suCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX3VubG9jayhS ZWxhdGlvbiByZWwsIGJvb2wgZHJvcFBpbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYg KCFkcm9wUGluKQorCXsKKwkJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJ CVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKEJ1ZmZlckdldFBhZ2UoYmF0Y2gtPmJ1ZiksIEJM Q0tTWik7CisKKwkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhlIHBpbikgKi8KKwkJTG9j a0J1ZmZlcihiYXRjaC0+YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBEcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCisJICoKKwkgKiBIYXZl IHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1mcmVlYmF0Y2ggaGFzIGEgd2F5IHRvIGRldGVj dCB3aGVuCisJICogY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0 IGhhdmUgdGFrZW4gcGxhY2UuICBJdCdsbAorCSAqIG9ubHkgYmUgc2FmZSB0byBzZXQgYW55IGlu ZGV4IHR1cGxlIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTgorCSAqIGhhc24ndCBhZHZh bmNlZC4KKwkgKi8KKwlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKKwliYXRjaC0+bHNu ID0gQnVmZmVyR2V0TFNOQXRvbWljKGJhdGNoLT5idWYpOworCUxvY2tCdWZmZXIoYmF0Y2gtPmJ1 ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhy ZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5i dWYpLCBCTENLU1opOworCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJYmF0Y2gtPmJ1ZiA9 IEludmFsaWRCdWZmZXI7IC8qIGRlZmVuc2l2ZSAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMKaW5kZXggZmRmZjk2MGMxLi5mYmE1NjJkZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYwpAQCAtMTU4LDExICsxNTgsMTIgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0 aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBi dHJlc2NhbjsKLQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlOworCWFtcm91dGlu ZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gYnRnZXRiYXRj aDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gYnRmcmVlYmF0Y2g7CiAJYW1yb3V0aW5lLT5h bWdldGJpdG1hcCA9IGJ0Z2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYnRlbmRz Y2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gYnRtYXJrcG9zOwotCWFtcm91dGluZS0+YW1y ZXN0cnBvcyA9IGJ0cmVzdHJwb3M7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gYnRwb3NyZXNl dDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBidGVzdGltYXRlcGFyYWxs ZWxzY2FuOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gYnRpbml0cGFyYWxsZWxz Y2FuOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IGJ0cGFyYWxsZWxyZXNjYW47CkBA IC0yMjAsMTMgKzIyMSwxMiBAQCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKIH0KIAogLyoKLSAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQg dHVwbGUgaW4gdGhlIHNjYW4uCisgKglidGdldGJhdGNoKCkgLS0gR2V0IHRoZSBuZXh0IGJhdGNo IG9mIHR1cGxlcyBpbiB0aGUgc2Nhbi4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwot CWJvb2wJCXJlczsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKQEAg LTI0MSw0NCArMjQxLDE4IEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVu J3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKIAkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJz dCBpdGVtIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0g TlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJ LyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1m ZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJ CXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVh bCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZp bmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJy dW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBk aXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdo dCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlp bmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAot CQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAo c28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IChpbnQgKikK LQkJCQkJCXBhbGxvYyhNYXhUSURzUGVyQlRyZWVQYWdlICogc2l6ZW9mKGludCkpOwotCQkJCWlm IChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0 ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQli YXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNv bnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwot CQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChy ZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0 Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVy IHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBf YnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4sIGRpcikpOwogCi0JcmV0dXJuIHJlczsKKwlyZXR1cm4g YmF0Y2g7CiB9CiAKIC8qCkBAIC0yODgsNiArMjYyLDcgQEAgaW50NjQKIGJ0Z2V0Yml0bWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWlu dDY0CQludGlkcyA9IDA7CiAJSXRlbVBvaW50ZXIgaGVhcFRpZDsKIApAQCAtMjk2LDI5ICsyNzEs MzMgQEAgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkv KiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNj YW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlp ZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhl IGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNj YW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7CisJCQlpbnQJCQlpdGVt SW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQloZWFwVGlk ID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJCQl0Ym1fYWRkX3R1cGxlcyh0 Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7 Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlz IGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJ CSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJ dGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2gg Ki8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJeworCQkJCQkv KiBidGZyZWViYXRjaCB3b24ndCBiZSBjYWxsZWQgKi8KKwkJCQkJUmVsZWFzZUJ1ZmZlcihiYXRj aC0+YnVmKTsKKwogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8K LQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCWl0 ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAog CQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBU aWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOwor CQkJCWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCQl0Ym1f YWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQpA QCAtMzQ2LDggKzMyNSw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9 IChCVFNjYW5PcGFxdWUpIHBhbGxvYyhzaXplb2YoQlRTY2FuT3BhcXVlRGF0YSkpOwotCUJUU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1h cmtQb3MpOwogCWlmIChzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQlzby0+a2V5RGF0YSA9IChT Y2FuS2V5KSBwYWxsb2Moc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7 CiAJZWxzZQpAQCAtMzYxLDE2ICszMzgsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFy cmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwg bmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGtub3cg eWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKLQkg KiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhv d2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRoZXIgd2UnbGwgbmVl ZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlzby0+Y3VyclR1cGxl cyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQogCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOwogCiAJc2Nhbi0+b3BhcXVlID0gc287CkBAIC0zODcsODIgKzM1NCw1 MSBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5z Y2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRy b3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0Jewot CQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0 ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7 Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdlcmx5 IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlz IGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0 aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBk dXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGludm9s dmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICogSXQn cyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBz bmFwc2hvdC4KLQkgKgotCSAqIFdoZW4gd2UgZHJvcCBwaW5zIGVhZ2VybHksIHRoZSBtZWNoYW5p c20gdGhhdCBtYXJrcyBzby0+a2lsbGVkSXRlbXNbXQotCSAqIGluZGV4IHR1cGxlcyBMUF9ERUFE IGhhcyB0byBkZWFsIHdpdGggY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHJhY2VzLgotCSAqIFRo ZSBzY2hlbWUgdXNlZCB0byBkZXRlY3QgdW5zYWZlIFRJRCByZWN5Y2xpbmcgd29uJ3Qgd29yayB3 aGVuIHNjYW5uaW5nCi0JICogdW5sb2dnZWQgcmVsYXRpb25zIChzaW5jZSBpdCBpbnZvbHZlcyBz YXZpbmcgYW4gYWZmZWN0ZWQgcGFnZSdzIExTTikuCi0JICogT3B0IG91dCBvZiBlYWdlciBwaW4g ZHJvcHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0aW9uIHNjYW5zIGZvciBub3cKLQkgKiAodGhp cyBpcyBwcmVmZXJhYmxlIHRvIG9wdGluZyBvdXQgb2Yga2lsbF9wcmlvcl90dXBsZSBMUF9ERUFE IHNldHRpbmcpLgotCSAqCi0JICogQWxzbyBvcHQgb3V0IG9mIGRyb3BwaW5nIGxlYWYgcGFnZSBw aW5zIGVhZ2VybHkgZHVyaW5nIGJpdG1hcCBzY2Fucy4KLQkgKiBQaW5zIGNhbm5vdCBiZSBoZWxk IGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCBkdXJpbmcgYml0bWFwIHNjYW5zIGVpdGhlcgotCSAq IHdheSwgc28gd2UgbWlnaHQgYXMgd2VsbCBhdm9pZCB3YXN0aW5nIGN5Y2xlcyBvbiBhY3F1aXJp bmcgcGFnZSBMU05zLgotCSAqCi0JICogU2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBvbiBtYWtp bmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0JICoKLQkgKiBOb3RlOiBzby0+ZHJv cFBpbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFjcm9zcyByZXNjYW5zLgotCSAqLwotCXNvLT5kcm9w UGluID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYKLQkJCQkgICBJc01WQ0NTbmFwc2hvdChzY2Fu LT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBSZWxhdGlvbk5lZWRzV0FMKHNjYW4tPmluZGV4UmVs YXRpb24pICYmCi0JCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwotCi0Jc28tPm1h cmtJdGVtSW5kZXggPSAtMTsKLQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0Jc28tPnNjYW5C ZWhpbmQgPSBmYWxzZTsKLQlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwotCUJUU2NhblBv c1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1h cmtQb3MpOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzLCBpZiBu ZWVkZWQgZm9yIGFuIGluZGV4LW9ubHkgc2NhbiBhbmQKLQkgKiBub3QgYWxyZWFkeSBkb25lIGlu IGEgcHJldmlvdXMgcmVzY2FuIGNhbGwuICBUbyBzYXZlIG9uIHBhbGxvYwotCSAqIG92ZXJoZWFk LCBib3RoIHdvcmtzcGFjZXMgYXJlIGFsbG9jYXRlZCBhcyBvbmUgcGFsbG9jIGJsb2NrOyBvbmx5 IHRoaXMKLQkgKiBmdW5jdGlvbiBhbmQgYnRlbmRzY2FuIGtub3cgdGhhdC4KLQkgKgotCSAqIE5P VEU6IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgYWxzbyBtYWtlcyBpdCBzYWZlIHRvIHJldHVybiBkYXRh IGZyb20gYQotCSAqICJuYW1lIiBjb2x1bW4sIGV2ZW4gdGhvdWdoIGJ0cmVlIG5hbWVfb3BzIHVz ZXMgYW4gdW5kZXJseWluZyBzdG9yYWdlCi0JICogZGF0YXR5cGUgb2YgY3N0cmluZy4gIFRoZSBy aXNrIHRoZXJlIGlzIHRoYXQgIm5hbWUiIGlzIHN1cHBvc2VkIHRvIGJlCi0JICogcGFkZGVkIHRv IE5BTUVEQVRBTEVOLCBidXQgdGhlIGFjdHVhbCBpbmRleCB0dXBsZSBpcyBwcm9iYWJseSBzaG9y dGVyLgotCSAqIEhvd2V2ZXIsIHNpbmNlIHdlIG9ubHkgcmV0dXJuIGRhdGEgb3V0IG9mIHR1cGxl cyBzaXR0aW5nIGluIHRoZQotCSAqIGN1cnJUdXBsZXMgYXJyYXksIGEgZmV0Y2ggb2YgTkFNRURB VEFMRU4gYnl0ZXMgY2FuIGF0IHdvcnN0IHB1bGwgc29tZQotCSAqIGRhdGEgb3V0IG9mIHRoZSBt YXJrVHVwbGVzIGFycmF5IC0tLSBydW5uaW5nIG9mZiB0aGUgZW5kIG9mIG1lbW9yeSBmb3IKLQkg KiBhIFNJR1NFR1YgaXMgbm90IHBvc3NpYmxlLiAgWWVhaCwgdGhpcyBpcyB1Z2x5IGFzIHNpbiwg YnV0IGl0IGJlYXRzCi0JICogYWRkaW5nIHNwZWNpYWwtY2FzZSB0cmVhdG1lbnQgZm9yIG5hbWVf b3BzIGVsc2V3aGVyZS4KLQkgKi8KLQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNvLT5jdXJy VHVwbGVzID09IE5VTEwpCi0JewotCQlzby0+Y3VyclR1cGxlcyA9IChjaGFyICopIHBhbGxvYyhC TENLU1ogKiAyKTsKLQkJc28tPm1hcmtUdXBsZXMgPSBzby0+Y3VyclR1cGxlcyArIEJMQ0tTWjsK LQl9Ci0KIAkvKgogCSAqIFJlc2V0IHRoZSBzY2FuIGtleXMKIAkgKi8KIAlpZiAoc2NhbmtleSAm JiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2Nhbmtl eSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJc28tPm5lZWRQ cmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRl RGlyQ2hlY2sgPSBmYWxzZTsKIAlzby0+bnVtYmVyT2ZLZXlzID0gMDsJCS8qIHVudGlsIF9idF9w cmVwcm9jZXNzX2tleXMgc2V0cyBpdCAqLwogCXNvLT5udW1BcnJheUtleXMgPSAwOwkJLyogZGl0 dG8gKi8KIH0KIAorLyoKKyAqCWJ0ZnJlZWJhdGNoKCkgLS0gRnJlZSBiYXRjaCwgcmVsZWFzaW5n IGl0cyBidWZmZXIgcGluCisgKgorICogWFhYIFNob3VsZCB3ZSByZWFsbHkgYmUgZnJlZWluZyBt ZW1vcnkgbGlrZSB0aGlzPyBXaGF0IGlmIHdlIHdlcmUgdG8ganVzdAorICogcmV1c2UgbW9zdCBt ZW1vcnkgYWNyb3NzIGRpc3RpbmN0IHBhZ2VzLCBhdm9pZGluZyBwZnJlZS9wYWxsb2MgY3ljbGVz PworICovCit2b2lkCitidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCS8qCisJICogQ2hlY2sgaWYgdGhlcmUgYXJlIHR1cGxlcyB0byBraWxs IGZyb20gdGhpcyBiYXRjaCAodGhhdCB3ZXJlbid0IGFscmVhZHkKKwkgKiBraWxsZWQgZWFybGll ciBvbikKKwkgKi8KKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+IDApCisJCV9idF9raWxsaXRlbXMo c2NhbiwgYmF0Y2gpOworCisJaWYgKGJhdGNoLT5pdGVtc3Zpc2liaWxpdHkpCisJCXBmcmVlKGJh dGNoLT5pdGVtc3Zpc2liaWxpdHkpOworCisJaWYgKGJhdGNoLT5jdXJyVHVwbGVzKQorCQlwZnJl ZShiYXRjaC0+Y3VyclR1cGxlcyk7CisKKwlpZiAoYmF0Y2gtPnBvcykKKwl7CisJCWlmICghc2Nh bi0+YmF0Y2hTdGF0ZSB8fCAhc2Nhbi0+YmF0Y2hTdGF0ZS0+ZHJvcFBpbikKKwkJCVJlbGVhc2VC dWZmZXIoYmF0Y2gtPmJ1Zik7CisKKwkJcGZyZWUoYmF0Y2gtPnBvcyk7CisJfQorCisJcGZyZWUo YmF0Y2gpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAq LwpAQCAtNDcxLDExNiArNDA3LDUwIEBAIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyog d2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5z ICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Q b3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9 IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCi0JLyogTm8gbmVl ZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBpcyBhYm91dCB0byBiZSBmcmVlZC4g Ki8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChzby0+a2V5RGF0YSAhPSBOVUxMKQog CQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5S2V5cyBhbmQgc28tPm9yZGVyUHJv Y3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+YXJyYXlDb250ZXh0ICE9IE5VTEwp CiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29udGV4dCk7Ci0JaWYgKHNvLT5raWxs ZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMpOwotCWlmIChzby0+Y3Vy clR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1cGxlcyk7Ci0JLyogc28tPm1hcmtU dXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRyZXNjYW4gKi8KIAlwZnJlZShzbyk7 CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbgor ICoJYnRwb3NyZXNldCgpIC0tIGludmFsaWRhdGUgc2NhbidzIGFycmF5IGtleXMKICAqLwogdm9p ZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0cG9zcmVzZXQoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBtYXJrYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUU2NhblBvcwlwb3M7CiAKLQkvKiBUaGVy ZSBtYXkgYmUgYW4gb2xkIG1hcmsgd2l0aCBhIHBpbiAoYnV0IG5vIGxvY2spLiAqLwotCUJUU2Nh blBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOworCWlmICghc28tPm51bUFycmF5S2V5cykK KwkJcmV0dXJuOwogCiAJLyoKLQkgKiBKdXN0IHJlY29yZCB0aGUgY3VycmVudCBpdGVtSW5kZXgu ICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5leHQgcGFnZQotCSAqIGJlZm9yZSByZWxlYXNpbmcgdGhl IG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0ZXBwYWdlIG1ha2VzIGEgZnVsbCBjb3B5IG9mCi0JICog dGhlIGN1cnJQb3Mgc3RydWN0IGluIG1hcmtQb3MuICBJZiAoYXMgb2Z0ZW4gaGFwcGVucykgdGhl IG1hcmsgaXMgbW92ZWQKLQkgKiBiZWZvcmUgd2UgbGVhdmUgdGhlIHBhZ2UsIHdlIGRvbid0IGhh dmUgdG8gZG8gdGhhdCB3b3JrLgorCSAqIENvcmUgc3lzdGVtIGlzIGFib3V0IHRvIHJlc3RvcmUg YSBtYXJrIGFzc29jaWF0ZWQgd2l0aCBhIHByZXZpb3VzbHkKKwkgKiByZXR1cm5lZCBiYXRjaC4g IFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRvIG1ha2UgYWxsIHRoaXMgc2FmZS4KIAkgKi8KLQlp ZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXNvLT5tYXJrSXRlbUluZGV4ID0g c28tPmN1cnJQb3MuaXRlbUluZGV4OworCXBvcyA9IChCVFNjYW5Qb3MpIG1hcmtiYXRjaC0+cG9z OworCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHBvcy0+ZGlyKTsKKworCS8qCisJICogQ29y ZSBzeXN0ZW0gd2lsbCBpbnZhbGlkYXRlIGFsbCBvdGhlciBiYXRjaGVzLgorCSAqCisJICogRGVh bCB3aXRoIHRoaXMgYnkgdW5zZXR0aW5nIG5lZWRQcmltU2NhbiBhcyB3ZWxsIGFzIG1vcmVSaWdo dCAob3IgYXMKKwkgKiB3ZWxsIGFzIG1vcmVMZWZ0LCB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcyku ICBUaGF0IHdheSwgdGhlIG5leHQgdGltZQorCSAqIF9idF9uZXh0IGlzIGNhbGxlZCBpdCB3aWxs IHN0ZXAgdG8gdGhlIHJpZ2h0IChvciB0byB0aGUgbGVmdCkuICBBdCB0aGF0CisJICogcG9pbnQg X2J0X3JlYWRwYWdlIHdpbGwgcmVzdG9yZSB0aGUgc2NhbidzIGFycmF5cyB0byBlbGVtZW50cyB0 aGF0CisJICogY29ycmVjdGx5IHRyYWNrIHRoZSBuZXh0IHBhZ2UncyBwb3NpdGlvbiBpbiB0aGUg aW5kZXgncyBrZXkgc3BhY2UuCisJICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocG9z LT5kaXIpKQorCQlwb3MtPm1vcmVSaWdodCA9IHRydWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQot fQotCi0vKgotICoJYnRyZXN0cnBvcygpIC0tIHJlc3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBv c2l0aW9uCi0gKi8KLXZvaWQKLWJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+ bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1v dmVkIHRvIGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxhc3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9y ZSB0aGUgaXRlbUluZGV4LgotCQkgKgotCQkgKiBOQjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNv dW50IG9uIGFueXRoaW5nIGluIHNvLT5tYXJrUG9zIHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkg Ki8KLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVs c2UKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1vdmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFz dCBtYXJrIG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUKLQkJICogbm93IHJlc3RvcmluZyB0byB0aGUg bWFya2VkIHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0 IGlmIHdlJ3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24s Ci0JCSAqIHdlIG11c3QgZHJvcCBpdC4KLQkJICovCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJewotCQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFs IHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJ CV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJy UG9zKTsKLQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewot CQkJLyogYnVtcCBwaW4gb24gbWFyayBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBi dWZmZXIgKi8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5j ckJ1ZmZlclJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9z LCAmc28tPm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0p ICsKLQkJCQkgICBzby0+bWFya1Bvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7 Ci0JCQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+ bWFya1R1cGxlcywKLQkJCQkJICAgc28tPm1hcmtQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8q IFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAoc2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAq LwotCQkJaWYgKHNvLT5udW1BcnJheUtleXMpCi0JCQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tl eXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKLQkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7 Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7 Ci0JfQorCQlwb3MtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7 CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNl OwogfQogCiAvKgpAQCAtODI3LDE1ICs2OTcsNiBAQCBfYnRfcGFyYWxsZWxfc2VpemUoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciAqbmV4dF9zY2FuX3BhZ2UsCiAJKm5leHRfc2Nhbl9w YWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCSpsYXN0X2N1cnJfcGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsKIAotCS8qCi0JICogUmVzZXQgc28tPmN1cnJQb3MsIGFuZCBpbml0aWFsaXplIG1v cmVMZWZ0L21vcmVSaWdodCBzdWNoIHRoYXQgdGhlIG5leHQKLQkgKiBjYWxsIHRvIF9idF9yZWFk bmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFja2VuZCBzaW1pbGFybHkgdG8gYSBzZXJpYWwKLQkgKiBi YWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAqbGFzdF9jdXJyX3BhZ2UgdG8gKm5leHRfc2Nhbl9wYWdl ICh1bmxlc3MgdGhpcwotCSAqIGJhY2tlbmQncyBzby0+Y3VyclBvcyBpcyBpbml0aWFsaXplZCBi eSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZvcmUgdGhlbikuCi0JICovCi0JQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28tPmN1cnJQb3MubW9yZUxlZnQgPSBzby0+Y3VyclBvcy5t b3JlUmlnaHQgPSB0cnVlOwotCiAJaWYgKGZpcnN0KQogCXsKIAkJLyoKQEAgLTk4NSw4ICs4NDYs NiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNj YW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0 KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Ig bm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0 dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggZDY5Nzk4Nzk1Li42 MjExZTk1NDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjUsNjIg KzI1LDMzIEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGlubGluZSB2b2lk IF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBz byk7CiBzdGF0aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJvb2wgZm9ydXBk YXRlLCBCVFN0YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGljIE9mZnNldE51 bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciBi dWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2VydCBrZXksIFBh Z2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMgYm9vbCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2 ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJl ciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3Rpbmdp dGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitzdGF0aWMgYm9vbCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZp cnN0cGFnZSk7CitzdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0 Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBs ZSBpdHVwLAorCQkJCQkJIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBw b3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJ CQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSXRlbVBvaW50ZXIgaGVhcFRpZCwKLQkJCQkJCQkJ ICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0 ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkgIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0 aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJ CSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlk LCBpbnQgdHVwbGVPZmZzZXQpOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVw cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29s IF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKLQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4 dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxv Y2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wg c2VpemVkKTsKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCBiYXNlT2Zmc2V0 KTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVy IG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9y ZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJ CQkJCSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0 aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFs aWRhdGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci0KLQotLyoKLSAqCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbigpCi0gKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElm IHNjYW4gaXMgc28tPmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhl IHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVw IGxvY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVf cGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQotewotCWlmICghc28tPmRyb3BQaW4p Ci0JewotCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5s b2NrYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICog RHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotCSAqCi0JICogSGF2ZSB0byBzZXQgc28t PmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0J ICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2 ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKLQlz by0+Y3VyclBvcy5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlf YnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZh bGlkQnVmZmVyOwotfQorc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2ludChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRj aCBmaXJzdGJhdGNoKTsKIAogLyoKICAqCV9idF9zZWFyY2goKSAtLSBTZWFyY2ggdGhlIHRyZWUg Zm9yIGEgcGFydGljdWxhciBzY2Fua2V5LApAQCAtODcwLDIwICs4NDEsMTYgQEAgX2J0X2NvbXBh cmUoUmVsYXRpb24gcmVsLAogICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4g IFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAogICoJCWlmIGJhY2t3YXJkcyBzY2FuLCB0aGUg bGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKICAqCQlxdWFsaWZpY2F0 aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQgdGhlCi0g KgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28t PmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8gYSBwaW4g b24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNjYW5zLCB3 aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0dXJuaXRl bSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBleGl0Lgor ICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHRo ZSByZXR1cm5lZCBiYXRjaC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMg aW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBpbnMgb3IgbG9ja3Mg aGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJZiB0aGVyZSBhcmUg bm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoK ICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURhdGFbXSBzY2Fu a2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fua2V5cyAoc2Vl IG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4gdGhpcyByb3V0 aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRvIHVzZQog ICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJvb2wKK0luZGV4 U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtODk3LDggKzg2 NCw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CVN0cmF0ZWd5TnVtYmVyIHN0cmF0X3RvdGFsID0gSW52YWxpZFN0cmF0ZWd5OwogCUJsb2NrTnVt YmVyIGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyLAogCQkJCWxhc3RjdXJyYmxrbm87Ci0KLQlB c3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlJbmRleFNjYW5CYXRjaCBm aXJzdGJhdGNoOwogCiAJLyoKIAkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0 ZSBhbnkgcmVkdW5kYW50IGtleXM7IGFsc28gbWFyayB0aGUKQEAgLTkyMyw3ICs4ODksNyBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8KIAlp ZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2VpemUo c2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsKKwkJ cmV0dXJuIGZhbHNlOwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltc2NhbiBpcyB1 bnNldCkgKi8KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2NhbidzIGFycmF5cyAoaWYgYW55 KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTk0MCwxNCArOTA2LDggQEAgX2J0 X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIF9idF9y ZWFkbmV4dHBhZ2UgcmVsZWFzZXMgdGhlIHNjYW4gZm9yIHVzIChub3QgX2J0X3JlYWRmaXJzdHBh Z2UpLgogCQkgKi8KIAkJQXNzZXJ0KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCk7Ci0JCUFz c2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0JCUFzc2VydChibGtubyAhPSBQX05PTkUpOwogCi0J CWlmICghX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0 cnVlKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0J CXJldHVybiB0cnVlOworCQlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFz dGN1cnJibGtubywgZGlyLCB0cnVlKTsKIAl9CiAKIAkvKgpAQCAtMTIzOSw2ICsxMTk5LDEwIEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQl9CiAJ fQogCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCisJZmlyc3RiYXRjaCA9 IGluZGV4X2JhdGNoX2FsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRfaXR1 cCk7CisJZmlyc3RiYXRjaC0+cG9zID0gcGFsbG9jKHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7CisK IAkvKgogCSAqIElmIHdlIGZvdW5kIG5vIHVzYWJsZSBib3VuZGFyeSBrZXlzLCB3ZSBoYXZlIHRv IHN0YXJ0IGZyb20gb25lIGVuZCBvZgogCSAqIHRoZSB0cmVlLiAgV2FsayBkb3duIHRoYXQgZWRn ZSB0byB0aGUgZmlyc3Qgb3IgbGFzdCBrZXksIGFuZCBzY2FuIGZyb20KQEAgLTEyNDcsNyArMTIx MSw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CSAqIE5vdGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMg dGhlIHBhcmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRf ZW5kcG9pbnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZp cnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVy ZSB3aXRoaW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTEzLDEyICsxNDc3LDEyIEBAIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0 aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2Nh bkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0g X2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQp OworCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5i dWYsIEJUX1JFQUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQu Li4gKi8KIAlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+ Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsK IAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIApAQCAtMTUzNCwxMSArMTQ5OCwxMSBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElz b2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihy ZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsKLQkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEws ICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCQkJc3RhY2sgPSBfYnRfc2Vh cmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAJCQlf YnRfZnJlZXN0YWNrKHN0YWNrKTsKIAkJfQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3Vy clBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAkJewog CQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xNTQ2LDEx ICsxNTEwLDExIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2Ug Ki8KLQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7 CisJb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBmaXJzdGJhdGNoLT5idWYpOwog CiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4g KHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkg KiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRr ZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBv c2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMu CkBAIC0xNTY4LDY5ICsxNTMyLDc5IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGlu c2tleSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9m IGl0cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICov Ci0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBm YWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1 cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQog CiAvKgogICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCiAgKgot ICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hp Y2ggbWF5IGJlIHBpbm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3Mu aXRlbUluZGV4IGlkZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVy bmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3 YXMgbGFzdCByZXR1cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9y IGJhdGNoJ3MgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggcGFn ZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMg dXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQg aXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgor ICoJCU9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0aGUgbmV4dCBiYXRjaC4gIFRoZXJlIG11c3Qg YmUgYXQgbGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcgdHVwbGUgb24gYW55IHJldHVybmVkIGJhdGNo IChlbHNlIHdlJ2QganVzdCByZXR1cm4gTlVMTCkuCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAo bm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJyUG9zLiAgSXQnbGwKLSAqCQlz dGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2lu ZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5l dyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUg dHVwbGVzKSwgd2UgcmV0dXJuIE5VTEwuICBJdCdsbCBzdGlsbCBiZQorICoJCXBvc3NpYmxlIGZv ciB0aGUgc2NhbiB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwgdGhvdWdo CisgKgkJd2UnbGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGly ZWN0aW9uLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJsb2NrTnVtYmVyIGJs a25vLAorCQkJCWxhc3RjdXJyYmxrbm87CisJQlRTY2FuUG9zCXByaW9ycG9zID0gKEJUU2NhblBv cykgcHJpb3JiYXRjaC0+cG9zOwogCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKTsKKwlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZCgqcHJpb3Jwb3MpKTsKKworCS8qIFdhbGsg dG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQorCQlibGtubyA9IHByaW9ycG9zLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0g cHJpb3Jwb3MtPnByZXZQYWdlOworCWxhc3RjdXJyYmxrbm8gPSBwcmlvcnBvcy0+Y3VyclBhZ2U7 CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlm IHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGgg ZGF0YS4KKwkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVs ZWQgd2hlbiB0aGUgY2FsbCB0bworCSAqIF9idF9yZWFkcGFnZSBmb3IgcG9zIGhhcHBlbmVkIHRv IHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUKKwkgKiB0aGF0IHdlJ3JlIHN0 ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheSBrZXlz CisJICogYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhl bS4pCiAJICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwlpZiAocHJpb3Jw b3MtPmRpciAhPSBkaXIpCisJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKworCWlmIChibGtu byA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCSAhcHJp b3Jwb3MtPm1vcmVSaWdodCA6ICFwcmlvcnBvcy0+bW9yZUxlZnQpKQogCXsKLQkJaWYgKCsrc28t PmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJCWlmICgh X2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCWVs c2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0 SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KKwkJLyoKKwkJICogcHJpb3Jwb3MgX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQg c2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCSAqIHNvLT5uZWVkUHJpbVNjYW4g d2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNl aXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3Nj YW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3Rj dXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQ cmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBi bGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCi0gKglfYnRfcmVhZHBh Z2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBv cworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdl IGludG8gbmV3YmF0Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQt bG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hh bmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUg dmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZp ZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKLSAqIGluaXRpYWxpemVkIGZyb20gc2NyYXRjaCBoZXJl LgorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIG5ld2JhdGNoLmJ1 ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisgKiBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgcG9z Lm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsgdGhleSBhcmUKKyAqIHVwZGF0 ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZSBpbml0 aWFsaXplZCBmcm9tCisgKiBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVu dCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAq IGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQg aW50byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRo ZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3Ig bW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJl cG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRo ZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJl bnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTY0Miw4 ICsxNjE2LDggQEAgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhlIHBh Z2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KIHN0YXRpYyBib29sCi1fYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJ CSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZzZXROdW1iZXIg b2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK QEAgLTE2NTQsMzcgKzE2MjgsMzUgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJQlRSZWFkUGFnZVN0YXRl IHBzdGF0ZTsKIAlib29sCQlhcnJheUtleXM7CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1cGxl T2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKKwlCVFNjYW5Qb3MJcG9zID0gbmV3YmF0Y2gtPnBv czsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVyIGJsb2NrIG51bWJlciwgYWxvbmcgd2l0aCBp dHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1 Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQ YWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1 ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7 Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50aWwgX2J0X2Ryb3BfbG9ja19h bmRfbWF5YmVfcGluICovCi0Jc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCA9IDA7CisJcG9zLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KG5ld2JhdGNoLT5idWYpOworCXBvcy0+cHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwlw b3MtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcG9zLT5kaXIgPSBkaXI7CisKKwlz by0+cG9zID0gcG9zOwkJCQkvKiBfYnRfY2hlY2trZXlzIG5lZWRzIHRoaXMgKi8KIAogCS8qIGVp dGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNl dCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1 cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBwb3MtPm1vcmVSaWdodCA6IHBvcy0+bW9yZUxl ZnQpOwogCUFzc2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlu bmVkKHNvLT5jdXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCWlmIChz Y2FuLT5wYXJhbGxlbF9zY2FuKQogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUg cmVhZCBieSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQ b3MubmV4dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFy YWxsZWxfcmVsZWFzZShzY2FuLCBwb3MtPm5leHRQYWdlLCBwb3MtPmN1cnJQYWdlKTsKIAkJZWxz ZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0J CQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShz Y2FuLCBwb3MtPnByZXZQYWdlLCBwb3MtPmN1cnJQYWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2Nr UGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJl ZGljYXRlTG9ja1BhZ2UocmVsLCBwb3MtPmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAK IAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwogCWluZG5hdHRzID0gSW5kZXhSZWxh dGlvbkdldE51bWJlck9mQXR0cmlidXRlcyhyZWwpOwpAQCAtMTcyMiwxMSArMTY5NCwxMCBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIs IHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1p dGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQg PSBmYWxzZTsKKwkJCQkJcG9zLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmlt U2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3Bh cmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQ b3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4s IHBvcy0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMTc5 MCwyOCArMTc2MSwyOCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bv c3RpbmcoaXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2 ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5l d2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRl bUluZGV4Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0 OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qCiAJCQkJCSAqIFNldCB1cCBzdGF0 ZSB0byByZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIgZmlyc3QKIAkJCQkJICogVElE CiAJCQkJCSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9z ZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJ CSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOwor CQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJ CQkvKiBSZW1lbWJlciBhZGRpdGlvbmFsIFRJRHMgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkg PCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3Nh dmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3Rp bmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBs ZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJ CQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0x ODUxLDEyICsxODIyLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQl9CiAKIAkJaWYgKCFwc3RhdGUu Y29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQlwb3Mt Pm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJU cmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxh c3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJ bmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRl eCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0xODczLDExICsxODQzLDEwIEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZp bmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4 IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJ CQkJCXBvcy0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7 CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2Up OworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBvcy0+Y3VyclBh Z2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMTk3OCwxMSArMTk0Nywx MSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJ CWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBp dHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1 cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaW50CQkJdHVw bGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyoKIAkJCQkJICogU2V0 IHVwIHN0YXRlIHRvIHJldHVybiBwb3N0aW5nIGxpc3QsIGFuZCByZW1lbWJlciBmaXJzdApAQCAt MTk5NSwxNyArMTk2NCwxNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJICogYXNzb2NpYXRlZCB3 aXRoIHRoZSBzYW1lIHBvc3RpbmcgbGlzdCB0dXBsZS4KIAkJCQkJICovCiAJCQkJCWl0ZW1JbmRl eC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28s IGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBv c3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRy ZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJ CQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCS8qIFJlbWVtYmVyIGFkZGl0aW9uYWwg VElEcyAqLwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhp dHVwKTsgaSsrKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9z dGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRl bShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQ b3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQli YXNlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTIwMjEsMTIgKzE5OTAsMTEgQEAg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNl dE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBzdGF0 ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJcG9z LT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBN YXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElE c1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJ CW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8q CkBAIC0yMDQzLDIwMiArMjAxMSw5NSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQo IXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsKIAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJ dGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0 ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGlu dG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZl aXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2Jh dGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZv dChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVh cFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlp ZiAoc28tPmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0 ZW1zIGFycmF5ICovCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0dXAt PnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVt OworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5k ZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQ b3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBv cy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBs ZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4 XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVw bGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFY QUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMv aXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4g aW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0 IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElE cyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2 ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRl bXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3Qu ICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNh dmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5z IGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0 b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQg aW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0 IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nh bk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBJ dGVtUG9pbnRlciBoZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5naXRl bXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBv ZmZudW0sCisJCQkJCSAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgSW5kZXhUdXBsZSBpdHVwLCBpbnQg KnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF07CisJSW5kZXhTY2FuQmF0Y2hQb3NJdGVtICppdGVtID0gJm5ld2Jh dGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1 cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhP ZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhlIHBvcHVs YXRlZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRp ZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1 cGxlcykKIAl7CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxp c3QpICovCiAJCUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdl dFBvc3RpbmdPZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJ Y3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQli YXNlID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBs ZU9mZnNldCk7CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0g KEluZGV4VHVwbGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1l bWNweShiYXNlLCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBh cmVhIGluZGV4IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhf U0laRV9NQVNLOwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJl dHVybiBjdXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsK IAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBh biBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBw b3N0aW5nCiAgKiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlz dCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4K KyAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBh cyBiYXNlT2Zmc2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0 ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAot CQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3Rp bmdpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1i ZXIgb2ZmbnVtLAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsK LQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhd OworCUluZGV4U2NhbkJhdGNoUG9zSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4 T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKKwlpdGVtLT5pbmRl eE9mZnNldCA9IG9mZm51bTsKIAogCS8qCiAJICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJldHVy biB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3JpZ2lu YXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1cGxl cykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7Ci19Ci0KLS8qCi0gKiBS ZXR1cm4gdGhlIGluZGV4IGl0ZW0gZnJvbSBzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5p dGVtSW5kZXhdIHRvIHRoZQotICogaW5kZXggc2NhbiBieSBzZXR0aW5nIHRoZSByZWxldmFudCBm aWVsZHMgaW4gY2FsbGVyJ3MgaW5kZXggc2NhbiBkZXNjcmlwdG9yCi0gKi8KLXN0YXRpYyBpbmxp bmUgdm9pZAotX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUg c28pCi17Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28t PmN1cnJQb3MuaXRlbUluZGV4XTsKLQotCS8qIE1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBtdXN0 IGhhdmUgc3VjY2VlZGVkICovCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRl bSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRl bSk7Ci0KLQkvKiBSZXR1cm4gbmV4dCBpdGVtLCBwZXIgYW1nZXR0dXBsZSBjb250cmFjdCAqLwot CXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQlpZiAoc28tPmN1cnJUdXBs ZXMpCi0JCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vy ckl0ZW0tPnR1cGxlT2Zmc2V0KTsKLX0KLQotLyoKLSAqCV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAg dG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3Igc2NhbgotICoKLSAqIFdyYXBw ZXIgb24gX2J0X3JlYWRuZXh0cGFnZSB0aGF0IHBlcmZvcm1zIGZpbmFsIHN0ZXBzIGZvciB0aGUg Y3VycmVudCBwYWdlLgotICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHZhbGlk LiAgSXRzIGJ1ZmZlciB3aWxsIGJlIHBpbm5lZCwgdGhvdWdoCi0gKiBuZXZlciBsb2NrZWQuIChB Y3R1YWxseSwgd2hlbiBzby0+ZHJvcFBpbiB0aGVyZSB3b24ndCBldmVuIGJlIGEgcGluIGhlbGQs Ci0gKiB0aG91Z2ggc28tPmN1cnJQb3MuY3VyclBhZ2UgbXVzdCBzdGlsbCBiZSBzZXQgdG8gYSB2 YWxpZCBibG9jayBudW1iZXIuKQotICovCi1zdGF0aWMgYm9vbAotX2J0X3N0ZXBwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUJsb2NrTnVtYmVyIGJsa25vLAotCQkJCWxh c3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwot Ci0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBp dGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsK LQotCS8qCi0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUg cGFnZSBkYXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0 LgotCSAqLwotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4g b24gY3VycmVudCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYg KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChz by0+Y3VyclBvcy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0J CQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQ b3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBs ZXMpCi0JCQltZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNv LT5tYXJrSXRlbUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAq IElmIHdlJ3JlIGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNj YW4KLQkJICogKHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQg bmVlZHMgdG8gc2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbiksIG1vcmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2Yg dGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIg YmUgdGFrZW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVu ZGVkCi0JCSAqICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFu ZGxlIHRoaXMgY2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAq IG1hcmtQb3Mgc3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRl IGxpa2UgdGhpcwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3Qg dW5zZXQgbWFya1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGlj aGV2ZXIgbWlnaHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyBy ZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgot CQkgKiBJbiBlZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVw IHRvIHRoZSBmaXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBh ZnRlciBpdCBoYXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmlt U2NhbikKLQkJewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGly KSkKLQkJCQlzby0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5t YXJrUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3Vw cG9ydGVkIGJ5IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nh bik7Ci0JfQotCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0KLQkvKiBX YWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKLQllbHNlCi0JCWJs a25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JbGFzdGN1cnJibGtubyA9IHNvLT5jdXJyUG9z LmN1cnJQYWdlOwotCi0JLyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQg d2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9yZWFkcGFnZSBmb3IgY3Vy clBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUKLQkgKiBv bmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBz Y2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ug d2lsbCBhZHZhbmNlIHRoZW0uKQotCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQot CQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0KLQlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShz Y2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CisJaWYgKG5ld2JhdGNoLT5j dXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAKIC8qCkBA IC0yMjUzLDczICsyMTE0LDk2IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogICogdGhlIHNjYW4gb24gdGhpcyBwYWdlIGJ5IGNhbGxpbmcgX2J0 X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoIGtleS4gIFNlZQogICogX2J0X3JlYWRwYWdlIGZv ciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgcGlu bmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCisgKiBPbiBlbnRyeSwgZmly c3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQp LgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVm b3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0ZWQgc28t PmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCisgKiBPbiBleGl0LCB3ZSdsbCBo YXZlIHVwZGF0ZWQgZmlyc3RiYXRjaCBhbmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMKICAqIGFj Y29yZGluZyB0byB0aGUgc2FtZSBydWxlcyBhcyB0aG9zZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRu ZXh0cGFnZSBleGl0LgotICogTGlrZSBfYnRfcmVhZG5leHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVl IGluZGljYXRlcyBpZiB0aGVyZSBhcmUgYW55IG1hdGNoaW5nCi0gKiByZWNvcmRzIGluIHRoZSBn aXZlbiBkaXJlY3Rpb24uCiAgKgogICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEg cGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVy ZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgog ICovCi1zdGF0aWMgYm9vbAotX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5C YXRjaAorX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBmaXJzdGJhdGNoLAorCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwor CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQmxvY2tOdW1iZXIgYmxrbm8s CisJCQkJbGFzdGN1cnJibGtubzsKKwlCVFNjYW5Qb3MJZmlyc3Rwb3MgPSBmaXJzdGJhdGNoLT5w b3M7CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0Jc28tPm1h cmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNvLT5jdXJy UG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICovCisJLyog SW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdlICovCiAJ aWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5cyk7CiAK LQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQg PSB0cnVlOworCQlmaXJzdHBvcy0+bW9yZUxlZnQgPSB0cnVlOworCQlmaXJzdHBvcy0+bW9yZVJp Z2h0ID0gdHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCX0KIAllbHNlIGlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9 IGZhbHNlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlmaXJzdHBvcy0+bW9y ZUxlZnQgPSBmYWxzZTsKKwkJZmlyc3Rwb3MtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UK IAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJp Z2h0ID0gZmFsc2U7CisJCWZpcnN0cG9zLT5tb3JlTGVmdCA9IHRydWU7CisJCWZpcnN0cG9zLT5t b3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGlu ZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFnZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVh ZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJ ICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZp cnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9yZWFkcGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVs IHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5zIGZhbHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRw YWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVlKSkKKwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZp cnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVlKSkKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4t PmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERy b3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYg aW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0J CUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2Nr X2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBh Z2Ugc3VjY2VlZGVkICovCisJCWluZGV4X2JhdGNoX3VubG9jayhyZWwsIHNjYW4tPmJhdGNoU3Rh dGUgJiYgc2Nhbi0+YmF0Y2hTdGF0ZS0+ZHJvcFBpbiwKKwkJCQkJCSAgIGZpcnN0YmF0Y2gpOwor CQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNo aW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmICovCi0JX2J0X3VubG9ja2J1 ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOworCS8qIFRoZXJlJ3Mgbm8g YWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBmaXJzdGJhdGNoLT5idWYgKi8K KwlfYnRfcmVsYnVmKHJlbCwgZmlyc3RiYXRjaC0+YnVmKTsKKwlmaXJzdGJhdGNoLT5idWYgPSBJ bnZhbGlkQnVmZmVyOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRf c3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRp cikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRh ICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBmaXJzdHBv cy0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGZpcnN0cG9zLT5wcmV2UGFnZTsKKwlsYXN0 Y3VycmJsa25vID0gZmlyc3Rwb3MtPmN1cnJQYWdlOwogCi0JLyogX2J0X3JlYWRwYWdlIGZvciBh IGxhdGVyIHBhZ2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2VlZGVkICovCi0JcmV0dXJuIHRy dWU7CisJQXNzZXJ0KGZpcnN0cG9zLT5kaXIgPT0gZGlyKTsKKworCS8qIGZpcnN0YmF0Y2ggd2ls bCBuZXZlciBiZSByZXR1cm5lZCB0byBzY2FuLCBzbyBmcmVlIGl0IG91dHNlbHZlcyAqLworCXBm cmVlKGZpcnN0YmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFmaXJzdHBvcy0+bW9yZVJpZ2h0IDogIWZpcnN0cG9z LT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxs IGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFBy aW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAq LworCQlwZnJlZShmaXJzdHBvcyk7CisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwlwZnJlZShmaXJzdHBvcyk7CisKKwkvKiBwYXJhbGxlbCBzY2FuIG11 c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAm bGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlmZiBzby0+ bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNj YW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTIzMjks MTAyICsyMjEzLDcwIEBAIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiBwcmV2aW91c2x5LXNhdmVk IHJpZ2h0IGxpbmsgb3IgbGVmdCBsaW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0 CiAgKiB3YXMgY3VycmVudCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNh dmVkLCB3aGljaCB3ZSB1c2UgdG8KICAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3Bs aXRzL3BhZ2UgZGVsZXRpb25zIGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29t bW9uIGNhc2Ugd2hlcmUgc2VpemVkPWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3Mu bmV4dFBhZ2UKLSAqIG9yIHNvLT5jdXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBp cyBzby0+Y3VyclBvcy5jdXJyUGFnZS4KKyAqIGJsa25vIGlzIHRoZSBwcmlvciBzY2FuIHBvc2l0 aW9uJ3MgbmV4dFBhZ2Ugb3IgcHJldlBhZ2UgKGRlcGVuZGluZyBvbiBzY2FuCisgKiBkaXJlY3Rp b24pLCBhbmQgbGFzdGN1cnJibGtubyBpcyB0aGUgcHJpb3IgcG9zaXRpb24ncyBjdXJyUGFnZS4K ICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxs ZXIuICBzby0+Y3VyclBvcy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBh cyBuZWVkZWQgYnkgY2FsbGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVl ZCB0byBiZSByZWFkIGFnYWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBj YWxsZXJzCi0gKiB0aGF0IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3Vs ZCBwYXNzIHNlaXplZD10cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3Vy cmJsa25vIGFyZ3VtZW50cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZh bHNlIGNhbGxlcnMganVzdCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZy b20gdGhlaXIKLSAqIHNvLT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBp dHNlbGYpIGNhbiBiZSB1c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBj YWxsZXIncyBibGtubyBjYW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhh dCBtdXN0IGJlIHJlYWQgbmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBt dXN0IGZpZ3VyZSB0aGF0Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhl IHNjYW4gKHRoZSBjb3JyZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlv bmQgdGhlIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2Fu LAotICogdW5sZXNzIGJsa25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQ YWdlIGlzIGFscmVhZHkgUF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdo dC9zby0+Y3VyclBvcy5tb3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBu byBwYWdlIHNob3VsZCBiZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhp dCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAot ICogaW50ZXJlc3RpbmcgcGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBv biB0aGUgYnVmZmVyIG9uCi0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQ aW4gaW5kZXggc2NhbnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lk IGJsb2NraW5nIFZBQ1VVTSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgc2NhbiBiYXRj aCBjb250YWluaW5nIGRhdGEgZnJvbSB0aGUgbmV4dAorICogaW50ZXJlc3RpbmcgcGFnZS4gIFdl IGhvbGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbiBzdWNjZXNzIGV4aXQgKGV4Y2VwdAorICogZHVy aW5nIGRyb3BQaW4gcGxhaW4gaW5kZXggc2NhbnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluIGVhZ2Vy bHkgdG8gYXZvaWQKKyAqIGJsb2NraW5nIFZBQ1VVTSkuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBt YXRjaGluZyByZWNvcmRzIGluIHRoZSBnaXZlbgorICogZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVy biBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4g dGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxpZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxl IGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mgb3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2Uu Ci0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBj YWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBf YnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2Nh biBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25v IGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4g IFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAqIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0 YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1 cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJl ciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2g7CisJ QlRTY2FuUG9zCW5ld3BvczsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0 Y3VycmJsa25vIHx8IHNlaXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXpl ZCkpOwotCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxv Y2F0ZSBzcGFjZSBmb3IgbmV4dCBiYXRjaCAqLworCW5ld2JhdGNoID0gaW5kZXhfYmF0Y2hfYWxs b2MoTWF4VElEc1BlckJUcmVlUGFnZSwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwluZXdiYXRjaC0+ cG9zID0gcGFsbG9jKHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7CisJbmV3cG9zID0gbmV3YmF0Y2gt PnBvczsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFz dGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVy IHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBw b3MgaXMgdGhlIGZpcnN0IHZhbGlkIHBhZ2UgdG8gdGhlIHJpZ2h0IChvciB0byB0aGUgbGVmdCkg b2YKKwkgKiBsYXN0Y3VycmJsa25vLiAgQWxzbyBwcm92aXNpb25hbGx5IGFzc3VtZSB0aGF0IHRo ZXJlJ2xsIGJlIGFub3RoZXIgcGFnZQorCSAqIHdlJ2xsIG5lZWQgdG8gdGhlIHJpZ2h0IChvciB0 byB0aGUgbGVmdCkgYWhlYWQgb2YgX2J0X3JlYWRwYWdlIGNhbGwuCiAJICovCi0JaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwot CWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwluZXdwb3MtPm1vcmVMZWZ0 ID0gdHJ1ZTsKKwluZXdwb3MtPm1vcmVSaWdodCA9IHRydWU7CiAKIAlmb3IgKDs7KQogCXsKIAkJ UGFnZQkJcGFnZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9O T05FIHx8Ci0JCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQ b3MubW9yZVJpZ2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCBy ZWNlbnQgX2J0X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICov Ci0JCQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2Vp emVkKTsKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFs bGVsX2RvbmUoc2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZh bHNlOwotCQl9Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxl bCBzY2FuIG11c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJ aWYgKCFzZWl6ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3Bh cmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewot CQkJLyogd2hvbGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiBy ZXF1aXJlZCkgKi8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0 dXJuIGZhbHNlOwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSkt Pm5lZWRQcmltU2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtu byAhPSBQX05PTkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsK IAkJCS8qIHJlYWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYo cmVsLCBibGtubywgQlRfUkVBRCk7CisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWws IGJsa25vLCBCVF9SRUFEKTsKIAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2 b2lkaW5nIHJhY2UgKGFsc28gY2hlY2tzIGZvciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQ b3MuYnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCi0JCQkJCQkJ CQkJCQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxp ZEJ1ZmZlcikKKwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChy ZWwsICZibGtubywKKwkJCQkJCQkJCQkJCQkgICBsYXN0Y3VycmJsa25vKTsKKwkJCWlmIChuZXdi YXRjaC0+YnVmID09IEludmFsaWRCdWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4g YSBjb25jdXJyZW50IGRlbGV0aW9uIG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJ CQlyZXR1cm4gZmFsc2U7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0g QnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShu ZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0 Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAt MjQzMiwxNyArMjI4NCwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9u IHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsK LQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3Rv cCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFx dWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwK KwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFr OwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBuZXdwb3Mt Pm5leHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdp bGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdl KHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlp ZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9 IHNvLT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25vID0gbmV3cG9zLT5wcmV2UGFnZTsKIAkJ CX0KIAkJfQogCQllbHNlCkBAIC0yNDU3LDE5ICsyMzA5LDM2IEBAIF9idF9yZWFkbmV4dHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJfQogCiAJCS8qIG5vIG1h dGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KLQkJX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJy UG9zLmJ1Zik7Ci0JCXNlaXplZCA9IGZhbHNlOwkJCS8qIHJlbGVhc2VkIGJ5IF9idF9yZWFkcGFn ZSAob3IgYnkgdXMpICovCisJCV9idF9yZWxidWYocmVsLCBuZXdiYXRjaC0+YnVmKTsKKwkJbmV3 YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisKKwkJLyogQ29udGludWUgdGhlIHNjYW4gaW4g dGhpcyBkaXJlY3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJCShTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkJICFuZXdwb3MtPm1vcmVSaWdodCA6ICFuZXdwb3Mt Pm1vcmVMZWZ0KSkKKwkJeworCQkJLyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVu ZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmlt U2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICov CisJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJ LyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICov CisJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxf c2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQkJcmV0dXJuIE5V TEw7CQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCQlmaXJz dHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAKLQkv KgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUg dGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0 dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBh Z2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwot CV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBhZ2Ug c3VjY2VlZGVkICovCisJQXNzZXJ0KG5ld3Bvcy0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCWluZGV4 X2JhdGNoX3VubG9jayhyZWwsIHNjYW4tPmJhdGNoU3RhdGUgJiYgc2Nhbi0+YmF0Y2hTdGF0ZS0+ ZHJvcFBpbiwKKwkJCQkJICAgbmV3YmF0Y2gpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIG5l d2JhdGNoOwogfQogCiAvKgpAQCAtMjY5MiwyNSArMjU2MSwyMyBAQCBfYnRfZ2V0X2VuZHBvaW50 KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFsbGVs IHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhl cmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3QoKS4K ICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRj aCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFn ZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFCVFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwlB c3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOwogCiAJ LyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxlZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2Uu ICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAqIHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAq LwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0 aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlmaXJzdGJhdGNoLT5idWYgPSBfYnRfZ2V0X2VuZHBvaW50 KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAKLQlpZiAoIUJ1ZmZlcklz VmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+ YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlv biwgYXMgbm90aGluZyBmaW5lciB0byBsb2NrCkBAIC0yNzIxLDcgKzI1ODgsNyBAQCBfYnRfZW5k cG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJcmV0dXJuIGZh bHNlOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFn ZSA9IEJ1ZmZlckdldFBhZ2UoZmlyc3RiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRP cGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNMRUFGKG9wYXF1ZSkpOwogCkBAIC0yNzQ3LDkgKzI2 MTQsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nh bi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7 CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIp OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IDI4OGRhOGI2OC4uZTIy YmY4MWRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xMDIyLDE0ICsx MDIyLDYgQEAgX2J0X2FkdmFuY2VfYXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRo ZSBzdGF0ZSB0aGV5IHdlcmUgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCiAJICogd2VyZSBjYWxs ZWQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRo ZQogCSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNj YW5zIGNvdWxkIG92ZXJsb29rIG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGly ZWN0aW9uIGdldHMgcmV2ZXJzZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBp dGVtcyB0bwotCSAqIHJldHVybiwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVz IGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3Vy clBvcy4gIFdoZW4gd2UncmUgb24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZv ciBzby0+Y3VyclBvcyB0byBnZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkK LQkgKiByZXR1cm5zIGZhbHNlLCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBz Y2FuJ3MgYXJyYXkga2V5cy4KLQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAt LSBhbmQgaW4gZ2VuZXJhbCBpdCBtYXkgbmV2ZXIgaGFwcGVuLgogCSAqLwogCV9idF9zdGFydF9h cnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCkBAIC0xMzk2LDcgKzEzODgsNyBAQCBfYnRfYWR2YW5j ZV9hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUs CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JU2NhbkRpcmVjdGlvbiBkaXIgPSBz by0+Y3VyclBvcy5kaXI7CisJU2NhbkRpcmVjdGlvbiBkaXIgPSBzby0+cG9zLT5kaXI7CiAJaW50 CQkJYXJyYXlpZHggPSAwOwogCWJvb2wJCWJleW9uZF9lbmRfYWR2YW5jZSA9IGZhbHNlLAogCQkJ CXNraXBfYXJyYXlfYWR2YW5jZWQgPSBmYWxzZSwKQEAgLTIwMzMsMTMgKzIwMjUsMTMgQEAgbmV3 X3ByaW1fc2NhbjoKIAkgKiBOb3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhl IGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0 X25leHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlz IHVwIHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXgg c2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9w cG9zaXRlIGN1cnJQb3MuZGlyLgorCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0 aGUgZGlyZWN0aW9uIG9wcG9zaXRlIHBvcy0+ZGlyLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVz Y2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+ bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAK IAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVk dWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2Fu X3NjaGVkdWxlKHNjYW4sIHNvLT5wb3MtPmN1cnJQYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxl IGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjE1Miw3 ICsyMTQ0LDcgQEAgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VT dGF0ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIHsKIAlUdXBsZURlc2MJdHVwZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3Ioc2Nhbi0+aW5kZXhSZWxhdGlvbik7CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVNjYW5EaXJlY3Rpb24gZGlyID0gc28tPmN1 cnJQb3MuZGlyOworCVNjYW5EaXJlY3Rpb24gZGlyID0gc28tPnBvcy0+ZGlyOwogCWludAkJCWlr ZXkgPSBwc3RhdGUtPnN0YXJ0aWtleTsKIAlib29sCQlyZXM7CiAKQEAgLTMyNjAsNyArMzI1Miw3 IEBAIF9idF9jaGVja2tleXNfbG9va19haGVhZChJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBh Z2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJIGludCB0dXBuYXR0cywgVHVwbGVEZXNjIHR1cGRlc2Mp CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVNj YW5EaXJlY3Rpb24gZGlyID0gc28tPmN1cnJQb3MuZGlyOworCVNjYW5EaXJlY3Rpb24gZGlyID0g c28tPnBvcy0+ZGlyOwogCU9mZnNldE51bWJlciBhaGVhZG9mZm51bTsKIAlJbmRleFR1cGxlCWFo ZWFkOwogCkBAIC0zMzM0LDY5ICszMzI2LDY3IEBAIF9idF9jaGVja2tleXNfbG9va19haGVhZChJ bmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLAogICogY3VycmVudCBw YWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25s eSBiZQogICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KICAqCi0gKiBDYWxsZXIgc2hv dWxkIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgc28tPmN1cnJQb3MgcGFnZSwgYnV0IG11c3QgaG9s ZCBhCi0gKiBidWZmZXIgcGluIHdoZW4gIXNvLT5kcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0 IHN0aWxsIHdvbid0IGJlIGxvY2tlZC4KLSAqIEl0J2xsIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2 ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KKyAqIENhbGxlciBzaG91bGQg bm90IGhhdmUgYSBsb2NrIG9uIHRoZSBiYXRjaCBwb3NpdGlvbidzIHBhZ2UsIGJ1dCBtdXN0IGhv bGQgYQorICogYnVmZmVyIHBpbiB3aGVuICFkcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0 aWxsIHdvbid0IGJlIGxvY2tlZC4gIEl0J2xsCisgKiBjb250aW51ZSB0byBob2xkIHdoYXRldmVy IHBpbnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgogICogV2UgbWF0Y2ggaXRl bXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRv IHNldAogICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRzIGEgYnVmZmVy IHBpbiBvbiB0aGUgdGFyZ2V0IHBhZ2UKICAqIGNvbnRpbnVvdXNseSBmcm9tIGluaXRpYWxseSBy ZWFkaW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCi0gKiAoaWYgaXQg aXMgYSAhc28tPmRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBp dGVtcyBvbiB0aGUKKyAqIChpZiBpdCBpcyBhICFkcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90 IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCiAgKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJ RHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawogICog dGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2Ug YSByZWN5Y2xlZCBUSUQKICAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1l IFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQogICogcGFnZSkuICBXZSBjYW4ndCBy ZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0g KiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRp bmcgTFBfREVBRCBiaXRzIG9uCisgKiAoaS5lLiBkcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3 ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgogICogdGhlIHBhZ2UgTFNO IGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRwYWdlIHNhdyB0aGUg cGFnZS4KICAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVu IHRoZSBwYWdlIExTTiBjaGFuZ2VkLgogICoKLSAqIFdlIGdpdmUgdXAgbXVjaCBsZXNzIG9mdGVu IGR1cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgorICogV2Ug dGVuZCB0byBnaXZlIHVwIGxlc3Mgb2Z0ZW4gZHVyaW5nICFkcm9wUGluIHNjYW5zLCBidXQgaXQg c3RpbGwgaGFwcGVucy4KICAqIFdlIGNvcGUgd2l0aCBjYXNlcyB3aGVyZSBpdGVtcyBoYXZlIG1v dmVkIHJpZ2h0IGR1ZSB0byBpbnNlcnRpb25zLiAgSWYgYW4KICAqIGl0ZW0gaGFzIG1vdmVkIG9m ZiB0aGUgY3VycmVudCBwYWdlIGR1ZSB0byBhIHNwbGl0LCB3ZSdsbCBmYWlsIHRvIGZpbmQgaXQK ICAqIGFuZCBqdXN0IGdpdmUgdXAgb24gaXQuCiAgKi8KIHZvaWQKLV9idF9raWxsaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuKQorX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUU2Nh blBvcwlwb3MgPSAoQlRTY2FuUG9zKSBiYXRjaC0+cG9zOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdl T3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwogCU9mZnNldE51bWJlciBtYXhv ZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKKwlpbnQJCQludW1LaWxsZWQg PSBiYXRjaC0+bnVtS2lsbGVkOwogCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwogCUJ1 ZmZlcgkJYnVmOwogCiAJQXNzZXJ0KG51bUtpbGxlZCA+IDApOwotCUFzc2VydChCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoKnBvcykpOwog CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0bWFw IGluZGV4IHNjYW4gKi8KIAotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVtc1td IGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7CisJLyog QWx3YXlzIGludmFsaWRhdGUgYmF0Y2gtPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGZyZWVpbmcgYmF0 Y2ggKi8KKwliYXRjaC0+bnVtS2lsbGVkID0gMDsKIAotCWlmICghc28tPmRyb3BQaW4pCisJaWYg KCFzY2FuLT5iYXRjaFN0YXRlLT5kcm9wUGluKQogCXsKIAkJLyoKIAkJICogV2UgaGF2ZSBoZWxk IHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywKIAkJ ICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZlIHBy ZXZlbnRlZAogCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRo ZSBUSURzIG9uIHRoZSBwYWdlLgogCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKKwkJYnVmID0gYmF0Y2gtPmJ1 ZjsKIAkJX2J0X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwogCX0KIAllbHNlCiAJewogCQlY TG9nUmVjUHRyCWxhdGVzdGxzbjsKIAotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSk7CiAJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOwotCQlidWYgPSBfYnRf Z2V0YnVmKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOworCQlidWYgPSBfYnRf Z2V0YnVmKHJlbCwgcG9zLT5jdXJyUGFnZSwgQlRfUkVBRCk7CiAKIAkJbGF0ZXN0bHNuID0gQnVm ZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0 bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCisJCUFzc2VydChiYXRj aC0+bHNuIDw9IGxhdGVzdGxzbik7CisJCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKIAkJ ewogCQkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLwogCQkJX2J0X3JlbGJ1Zihy ZWwsIGJ1Zik7CkBAIC0zNDEzLDEyICszNDAzLDEyIEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKIAl7Ci0J CWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJQlRTY2FuUG9zSXRlbSAq a2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwkJaW50CQkJaXRlbUluZGV4 ID0gYmF0Y2gtPmtpbGxlZEl0ZW1zW2ldOworCQlJbmRleFNjYW5CYXRjaFBvc0l0ZW0gKmtpdGVt ID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0 ZW0tPmluZGV4T2Zmc2V0OwogCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmly c3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlB c3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8 PSBiYXRjaC0+bGFzdEl0ZW0pOwogCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQogCQkJY29udGludWU7 CQkJLyogcHVyZSBwYXJhbm9pYSAqLwogCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKQEAgLTM0 NDMsNyArMzQzMyw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCSAq IGNvcnJlY3RuZXNzLgogCQkJCSAqCiAJCQkJICogTm90ZSB0aGF0IHRoZSBwYWdlIG1heSBoYXZl IGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBmaXJzdCBy ZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGluIGNhc2UpLCBzbyBpdCdzCisJCQkJICogc2luY2Ug d2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFkcm9wUGluIGNhc2UpLCBzbyBpdCdzCiAJCQkJICog cG9zc2libGUgdGhhdCB0aGlzIHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxp c3QKIAkJCQkgKiB0dXBsZSB3aGVuIHdlIGZpcnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMu CiAJCQkJICovCkBAIC0zNDU5LDcgKzM0NDksOCBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbikKIAkJCQkJICogdGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRo ZSBwYWdlIGNhbid0CiAJCQkJCSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKIAkJ CQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ ZHJvcFBpbik7CisJCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8CisJ CQkJCQkgICAhc2Nhbi0+YmF0Y2hTdGF0ZS0+ZHJvcFBpbik7CiAKIAkJCQkJLyoKIAkJCQkJICog UmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KQEAgLTM0NzYsNyArMzQ2Nyw3IEBAIF9i dF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9z dGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxlZCkuCiAJCQkJCSAqLwogCQkJCQlpZiAocGkgPCBu dW1LaWxsZWQpCi0JCQkJCQlraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRl bXNbcGkrK11dOworCQkJCQkJa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5raWxsZWRJdGVt c1twaSsrXV07CiAJCQkJfQogCiAJCQkJLyoKQEAgLTM1MjYsNyArMzUxNyw3IEBAIF9idF9raWxs aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1 ZSk7CiAJfQogCi0JaWYgKCFzby0+ZHJvcFBpbikKKwlpZiAoIXNjYW4tPmJhdGNoU3RhdGUtPmRy b3BQaW4pCiAJCV9idF91bmxvY2tidWYocmVsLCBidWYpOwogCWVsc2UKIAkJX2J0X3JlbGJ1Zihy ZWwsIGJ1Zik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggOWI4NmMwMTZh Li5jNmFhOTljYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTkwLDgg KzkwLDcgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1nZXR0 dXBsZSA9IHNwZ2dldHR1cGxlOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRt YXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuOwotCWFtcm91dGluZS0+YW1t YXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGlu ZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2Fu ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0 aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5k ZXggY2EyYmRlNjJlLi43MTQxMjQzYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04 ODAsNyArODgwLDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2Qg XCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIsCiAJCQkJCQlhY2Nl c3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxl ID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVM TCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygi YWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWlu dHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDFkMGU4YWQ1Ny4uYWMzMzdkOTAwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjgsNyArNDI4LDcgQEAgRXhlY1N1cHBvcnRzTWFya1Jl c3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCiAJCQkvKgot CQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkJCSAqIE5v dCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJCQkgKi8KIAkJCXJl dHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZvLT5hbWNhbm1hcmtw b3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2Fu LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IGY0NjRj Y2E5NS4uNWU3YmFmZTA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2Fu LmMKQEAgLTQ5LDcgKzQ5LDEzIEBACiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkluZGV4T25seU5l eHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKTsKIHN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBs ZShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJ CUluZGV4VHVwbGUgaXR1cCwgVHVwbGVEZXNjIGl0dXBkZXNjKTsKK3N0YXRpYyBib29sIGlvc19w cmVmZXRjaF9ibG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIHZvaWQgKmFyZywKKwkJCQkJCQkgICBJ bmRleFNjYW5CYXRjaFBvcyAqcG9zKTsKIAorLyogdmFsdWVzIHN0b3JlZCBpbiBpb3NfcHJlZmV0 Y2hfYmxvY2sgaW4gdGhlIGJhdGNoIGNhY2hlICovCisjZGVmaW5lCQlJT1NfVU5LTk9XTl9WSVNJ QklMSVRZCQkwCS8qIGRlZmF1bHQgdmFsdWUgKi8KKyNkZWZpbmUJCUlPU19BTExfVklTSUJMRQkJ CQkxCisjZGVmaW5lCQlJT1NfTk9UX0FMTF9WSVNJQkxFCQkJMgogCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJ SW5kZXhPbmx5TmV4dApAQCAtMTAzLDYgKzEwOSwxNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSkKIAkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0g dHJ1ZTsKIAkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKKwkJLyoKKwkJ ICogU2V0IHRoZSBwcmVmZXRjaCBjYWxsYmFjayBpbmZvLCBpZiB0aGUgc2NhbiBoYXMgYmF0Y2hp bmcgZW5hYmxlZAorCQkgKiAod2Ugb25seSBrbm93IHdoYXQgYWZ0ZXIgaW5kZXhfYmVnaW5zY2Fu LCB3aGljaCBhbHNvIGNoZWNrcyB3aGljaAorCQkgKiBjYWxsYmFja3MgYXJlIGRlZmluZWQgZm9y IHRoZSBBTS4KKwkJICovCisJCWlmIChzY2FuZGVzYy0+YmF0Y2hTdGF0ZSAhPSBOVUxMKQorCQl7 CisJCQlzY2FuZGVzYy0+YmF0Y2hTdGF0ZS0+cHJlZmV0Y2ggPSBpb3NfcHJlZmV0Y2hfYmxvY2s7 CisJCQlzY2FuZGVzYy0+YmF0Y2hTdGF0ZS0+cHJlZmV0Y2hBcmcgPSAodm9pZCAqKSBub2RlOwor CQl9CisKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhl eSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZAogCQkgKiBwYXNzIHRoZSBzY2Fua2V5cyB0byB0aGUg aW5kZXggQU0uCkBAIC0xMjAsMTAgKzEzNyw0MiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkgKi8KIAl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNj YW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQogCXsKKwkJYm9vbAkJYWxsX3Zpc2libGU7CiAJ CWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CiAKKwkJLyoKKwkJICogV2l0aG91dCBiYXRjaGluZywgaW5zcGVjdCB0aGUgVk0gZGlyZWN0 bHkuIFdpdGggYmF0Y2hpbmcsIHdlIG5lZWQKKwkJICogdG8gcmV0cmlldmUgdGhlIHZpc2liaWxp dHkgaW5mb3JtYXRpb24gc2VlbiBieSB0aGUgcmVhZF9zdHJlYW0KKwkJICogY2FsbGJhY2sgKG9y IHJhdGhlciBieSBpb3NfcHJlZmV0Y2hfYmxvY2spLCBvdGhlcndpc2UgdGhlCisJCSAqIHJlYWRf c3RyZWFtIG1pZ2h0IGdldCBvdXQgb2Ygc3luYyAoaWYgdGhlIFZNIGdvdCB1cGRhdGVkIHNpbmNl CisJCSAqIHRoZW4pLgorCQkgKi8KKwkJaWYgKHNjYW5kZXNjLT5iYXRjaFN0YXRlID09IE5VTEwp CisJCXsKKwkJCWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxh dGlvbiwKKwkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJ CQkJCSAmbm9kZS0+aW9zc19WTUJ1ZmZlcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogUmV1c2UgdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBwYWdlIHZpc2liaWxpdHkgaW5mbywg b3IKKwkJCSAqIGNhbGN1bGF0ZSBpdCBub3cuIElmIHdlIGRlY2lkZWQgbm90IHRvIHByZWZldGNo IHRoZSBibG9jaywgdGhlCisJCQkgKiBwYWdlIGhhZCB0byBiZSBhbGwtdmlzaWJsZSBhdCB0aGF0 IHBvaW50LiBUaGUgVk0gYml0IG1pZ2h0IGhhdmUKKwkJCSAqIGNoYW5nZWQgc2luY2UgdGhlbiwg YnV0IHRoZSB0dXBsZSB2aXNpYmlsaXR5IGNvdWxkIG5vdCBoYXZlLgorCQkJICoKKwkJCSAqIFhY WCBJdCdzIGEgYml0IHdlaXJkIHdlIHVzZSB0aGUgdmlzaWJpbGl0eSB0byBkZWNpZGUgaWYgd2UK KwkJCSAqIHNob3VsZCBza2lwIHByZWZldGNoaW5nIHRoZSBibG9jaywgYW5kIHRoZW4gZGVkdWNl IHRoZQorCQkJICogdmlzaWJpbGl0eSBmcm9tIHRoYXQgKGV2ZW4gaWYgaXQgbWF0Y2hlcyBwcmV0 dHkgY2xlYXJseSkuIEJ1dAorCQkJICogbWF5YmUgd2UgY291bGQvc2hvdWxkIGhhdmUgYSBtb3Jl IGRpcmVjdCB3YXkgdG8gcmVhZCB0aGUKKwkJCSAqIHByaXZhdGUgc3RhdGU/CisJCQkgKi8KKwkJ CWFsbF92aXNpYmxlID0gIWlvc19wcmVmZXRjaF9ibG9jayhzY2FuZGVzYywgbm9kZSwKKwkJCQkJ CQkJCQkJICAmc2NhbmRlc2MtPmJhdGNoU3RhdGUtPnJlYWRQb3MpOworCQl9CisKIAkJLyoKIAkJ ICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVh cCBwYWdlIG9uCiAJCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZl cnlib2R5LiAgSW4gYW55IGNhc2UsCkBAIC0xNTgsOSArMjA3LDcgQEAgSW5kZXhPbmx5TmV4dChJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0 aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCiAJCSAqIHRoZSBWTSBidWZm ZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCiAJCSAqLwotCQlp ZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkK KwkJaWYgKCFhbGxfdmlzaWJsZSkKIAkJewogCQkJLyoKIAkJCSAqIFJhdHMsIHdlIGhhdmUgdG8g dmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KQEAgLTg4OSwzICs5MzYsNTEgQEAg RXhlY0luZGV4T25seVNjYW5SZXRyaWV2ZUluc3RydW1lbnRhdGlvbihJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpCiAJbm9kZS0+aW9zc19TaGFyZWRJbmZvID0gcGFsbG9jKHNpemUpOwogCW1lbWNw eShub2RlLT5pb3NzX1NoYXJlZEluZm8sIFNoYXJlZEluZm8sIHNpemUpOwogfQorCisvKiBGSVhN RSBkdXBsaWNhdGUgZnJvbSBpbmRleGFtLmMgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSChz Y2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc1soaWR4KSAlIChzY2Fu KS0+YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlc10pCisKKy8qCisgKiBpb3NfcHJlZmV0Y2hfYmxvY2sK KyAqCQlDYWxsYmFjayB0byBvbmx5IHByZWZldGNoIGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZp c2libGUuCisgKgorICogV2UgZG9uJ3Qgd2FudCB0byBpbnNwZWN0IHRoZSB2aXNpYmlsaXR5IG1h cCByZXBlYXRlZGx5LCBzbyB0aGUgcmVzdWx0IG9mCisgKiBWTV9BTExfVklTSUJMRSBpcyBzdG9y ZWQgaW4gdGhlIGJhdGNoIHByaXZhdGUgZGF0YS4gVGhlIHZhbHVlcyBhcmUgc2V0CisgKiB0byAw IGJ5IGRlZmF1bHQsIHNvIHdlIHVzZSB0d28gY29uc3RhbnRzIHRvIHJlbWVtYmVyIGlmIGFsbC12 aXNpYmxlIG9yCisgKiBub3QgYWxsLXZpc2libGUuCisgKgorICogSG93ZXZlciwgdGhpcyBpcyBu b3QgbWVyZWx5IGEgcXVlc3Rpb24gb2YgcGVyZm9ybWFuY2UuIFRoZSBWTSBtYXkgZ2V0CisgKiBt b2RpZmllZCBkdXJpbmcgdGhlIHNjYW4sIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHdv IHBsYWNlcyAodGhlCisgKiByZWFkX25leHQgY2FsbGJhY2sgYW5kIHRoZSBpbmRleF9mZXRjaF9o ZWFwIGhlcmUpIG1ha2UgdGhlIHNhbWUgZGVjaXNpb24sCisgKiBvdGhlcndpc2Ugd2UgbWlnaHQg Z2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIHN0cmVhbS4gRm9yIGV4YW1wbGUsIHRoZQorICogY2Fs bGJhY2sgbWlnaHQgZmluZCBhIHBhZ2UgaXMgYWxsLXZpc2libGUgKGFuZCBza2lwcyByZWFkaW5n IHRoZSBibG9jayksCisgKiBhbmQgdGhlbiBzb21lb25lIG1pZ2h0IHVwZGF0ZSB0aGUgcGFnZSwg cmVzZXR0aW5nIHRoZSBWTSBiaXQuIElmIHRoaXMKKyAqIHBsYWNlIGF0dGVtcHRzIHRvIHJlYWQg dGhlIHBhZ2UgZnJvbSB0aGUgc3RyZWFtLCBpdCdsbCBmYWlsIGJlY2F1c2UgaXQKKyAqIHdpbGwg cHJvYmFibHkgcmVjZWl2ZSBhbiBlbnRpcmVseSBkaWZmZXJlbnQgcGFnZS4KKyAqLworc3RhdGlj IGJvb2wKK2lvc19wcmVmZXRjaF9ibG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIHZvaWQgKmFyZywg SW5kZXhTY2FuQmF0Y2hQb3MgKnBvcykKK3sKKwlJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUgPSAo SW5kZXhPbmx5U2NhblN0YXRlICopIGFyZzsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IElOREVY X1NDQU5fQkFUQ0goc2NhbiwgcG9zLT5iYXRjaCk7CisKKwlpZiAoYmF0Y2gtPml0ZW1zdmlzaWJp bGl0eSA9PSBOVUxMKQorCQliYXRjaC0+aXRlbXN2aXNpYmlsaXR5ID0gcGFsbG9jMChzaXplb2Yo Y2hhcikgKiAoYmF0Y2gtPmxhc3RJdGVtICsgMSkpOworCisJaWYgKGJhdGNoLT5pdGVtc3Zpc2li aWxpdHlbcG9zLT5pbmRleF0gPT0gSU9TX1VOS05PV05fVklTSUJJTElUWSkKKwl7CisJCWJvb2wJ CWFsbF92aXNpYmxlOworCQlJdGVtUG9pbnRlciB0aWQgPSAmYmF0Y2gtPml0ZW1zW3Bvcy0+aW5k ZXhdLmhlYXBUaWQ7CisKKwkJYWxsX3Zpc2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFw UmVsYXRpb24sCisJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJ CQkJCQkJICZub2RlLT5pb3NzX1ZNQnVmZmVyKTsKKworCQliYXRjaC0+aXRlbXN2aXNpYmlsaXR5 W3Bvcy0+aW5kZXhdID0KKwkJCWFsbF92aXNpYmxlID8gSU9TX0FMTF9WSVNJQkxFIDogSU9TX05P VF9BTExfVklTSUJMRTsKKwl9CisKKwkvKiBwcmVmZXRjaCBvbmx5IGJsb2NrcyB0aGF0IGFyZSBu b3QgYWxsLXZpc2libGUgKi8KKwlyZXR1cm4gKGJhdGNoLT5pdGVtc3Zpc2liaWxpdHlbcG9zLT5p bmRleF0gPT0gSU9TX05PVF9BTExfVklTSUJMRSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYwppbmRleCA5NDA3N2U2YTAuLmFiMjc1NmQ0NyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDQsNiArMTQ0LDcgQEAgaW50CQkJbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiAKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9w cmVmZXRjaCA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7CiBib29s CQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggZGE1ZDkwMWVjLi5mNDBlZWVh ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMywxMSArMzEzLDEx IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmpl Y3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGlu ZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5h bXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2Fu cGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVw bGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0 dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCQkJICAgYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5V TEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAh PSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1 cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJr cG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwp OworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1wb3NyZXNldCAhPSBOVUxM OwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsK IAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCBmNTkwNDZhZDYuLjlmZWE2OGE5 YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODc2 LDcgKzg3Niw4IEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9u IGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1l dGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwKIAkgKiBiZSB1c2Vk IGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJ bmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3Jl bC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlmIChHZXRJbmRleEFtUm91 dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBO VUxMICYmCisJCUdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwg ZmFsc2UpLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0 cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggMDMxZmRlOWY0Li5l MzRlNjAwNjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiAr OTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWludDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlp bnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJCWRpc3RhbmNlOworCWludDE2CQlkaXN0YW5j ZV9vbGQ7CiAJaW50MTYJCWluaXRpYWxpemVkX2J1ZmZlcnM7CiAJaW50CQkJcmVhZF9idWZmZXJz X2ZsYWdzOwogCWJvb2wJCXN5bmNfbW9kZTsJCS8qIHVzaW5nIGlvX21ldGhvZD1zeW5jICovCkBA IC00NjQsNiArNDY1LDcgQEAgcmVhZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJl YW0pCiAJCWlmIChibG9ja251bSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXsKIAkJCS8qIEVu ZCBvZiBzdHJlYW0uICovCisJCQlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IHN0cmVhbS0+ZGlzdGFu Y2U7CiAJCQlzdHJlYW0tPmRpc3RhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC04NjIsNiAr ODY0LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lk ICoqcGVyX2J1ZmZlcl9kYXRhKQogCQllbHNlCiAJCXsKIAkJCS8qIE5vIG1vcmUgYmxvY2tzLCBl bmQgb2Ygc3RyZWFtLiAqLworCQkJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3Rh bmNlOwogCQkJc3RyZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZmZXJf aW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRfYnVm ZmVycyA9IDA7CkBAIC0xMDQ2LDYgKzEwNDksOSBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3Ry ZWFtICpzdHJlYW0pCiAJaW50MTYJCWluZGV4OwogCUJ1ZmZlcgkJYnVmZmVyOwogCisJLyogcmVt ZW1iZXIgdGhlIG9sZCBkaXN0YW5jZSAoaWYgd2UgcmVzZXQgYmVmb3JlIGVuZCBvZiB0aGUgc3Ry ZWFtKSAqLworCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gTWF4KHN0cmVhbS0+ZGlzdGFuY2UsIHN0 cmVhbS0+ZGlzdGFuY2Vfb2xkKTsKKwogCS8qIFN0b3AgbG9va2luZyBhaGVhZC4gKi8KIAlzdHJl YW0tPmRpc3RhbmNlID0gMDsKIApAQCAtMTA3OCw4ICsxMDg0LDEyIEBAIHJlYWRfc3RyZWFtX3Jl c2V0KFJlYWRTdHJlYW0gKnN0cmVhbSkKIAlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9 PSAwKTsKIAlBc3NlcnQoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPT0gMCk7CiAKLQkvKiBTdGFy dCBvZmYgYXNzdW1pbmcgZGF0YSBpcyBjYWNoZWQuICovCi0Jc3RyZWFtLT5kaXN0YW5jZSA9IDE7 CisJLyoKKwkgKiBSZXN0b3JlIHRoZSBvbGQgZGlzdGFuY2UsIGlmIHdlIGhhdmUgb25lLiBPdGhl cndpc2Ugc3RhcnQgYXNzdW1pbmcgZGF0YQorCSAqIGlzIGNhY2hlZC4KKwkgKi8KKwlzdHJlYW0t PmRpc3RhbmNlID0gTWF4KDEsIHN0cmVhbS0+ZGlzdGFuY2Vfb2xkKTsKKwlzdHJlYW0tPmRpc3Rh bmNlX29sZCA9IDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv YW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCAwYWYyNmQ2 YWMuLjFlYmUwYTc2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsNyArMzYzLDcg QEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQR19SRVRV Uk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJhYmxlKTsKIAogCQkJY2FzZSBBTVBST1BfSU5ERVhf U0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZh bHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlIHx8IHJvdXRpbmUt PmFtZ2V0YmF0Y2ggPyB0cnVlIDogZmFsc2UpOwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NB TjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxz ZSk7CkBAIC0zOTIsNyArMzkyLDcgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJ CWNhc2UgQU1QUk9QX0NBTl9FWENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1n ZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdl dHR1cGxlIHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggPyB0cnVlIDogZmFsc2UpOwogCiAJCWNhc2Ug QU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNs dWRlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYjE3 NmQ1MTMwLi4xNGIzOGQ5M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0CkBAIC01NCw2ICs1NCwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7 IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29u dGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisg IHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBp bmRleC1vbmx5LXNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxl ID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAor fSwKKwogeyBuYW1lID0+ICdlbmFibGVfYml0bWFwc2NhbicsIHR5cGUgPT4gJ2Jvb2wnLCBjb250 ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAg c2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgYml0bWFwLXNjYW4g cGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBjNWQ2MTJhYjUuLjRiZjAwMzJkNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAt NDEyLDYgKzQxMiw3IEBACiAjZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9p bmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXpl ID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20v Ymx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggMmMwZTcxZWVkLi4zZTAw MTQ5MzAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIv Ymxvb20vYmx1dGlscy5jCkBAIC0xNDgsOCArMTQ4LDcgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0 Yml0bWFwID0gYmxnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBibGVuZHNjYW47 Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9 IE5VTEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0 aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2Fu ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK aW5kZXggNjNkN2UzNzZmLi5lMzY1MTlhYjcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRl eGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTYzLDggKzE2Myw3 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1nZXR0dXBsZV9mdW5jdGlv biBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5j dGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5j dGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAg LyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAg ICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsg LyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9y dCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVu Y3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTc4 OSwzMiArNzg4LDI1IEBAIGFtZW5kc2NhbiAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+ CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4pOwogPC9wcm9ncmFtbGlzdGluZz4KLSAg IE1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgVGhlIGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5 IHN1cHBvcnQgb25lCi0gICByZW1lbWJlcmVkIHNjYW4gcG9zaXRpb24gcGVyIHNjYW4uCisgICBO b3RpZnkgaW5kZXggQU0gdGhhdCBjb3JlIGNvZGUgd2lsbCBjaGFuZ2UgdGhlIHNjYW4ncyBwb3Np dGlvbiB0byBhbiBpdGVtCisgICByZXR1cm5lZCBhcyBwYXJ0IG9mIGFuIGVhcmxpZXIgYmF0Y2gu ICBUaGUgaW5kZXggQU0gbXVzdCB0aGVyZWZvcmUKKyAgIGludmFsaWRhdGUgYW55IHN0YXRlIHRo YXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcworICAgKGUuZy4sIGFy cmF5IGtleXMgdXNlZCB3aXRoIGEgU2NhbGFyQXJyYXlPcEV4cHIgcXVhbCkuICBDYWxsZWQgYnkg dGhlIGNvcmUKKyAgIHN5c3RlbSB3aGVuIGl0IGlzIGFib3V0IHRvIHJlc3RvcmUgYSBtYXJrLgog ICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rp b24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRo b2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVj dGZpZWxkPmFtbWFya3Bvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5J bmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwu Ci0gIDwvcGFyYT4KLQotICA8cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJw b3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0 aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4K LQotICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0 aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9y dHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFt cmVzdHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJv dXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgVGhl IDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHBy b3ZpZGVkIGlmIHRoZSBhY2Nlc3MKKyAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zIHRo cm91Z2ggdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZS4g IElmIGl0IGRvZXNuJ3QsIHRoZSA8c3RydWN0ZmllbGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+ IGZpZWxkCisgICBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+ IHN0cnVjdCBzaG91bGQgYmUgc2V0IHRvCisgICBOVUxMLiAgSW5kZXggQU1zIHRoYXQgZG9uJ3Qg aGF2ZSBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUKKyAgIGludmFsaWRh dGVkIG1pZ2h0IHN0aWxsIGZpbmQgaXQgdXNlZnVsIHRvIHByb3ZpZGUgYW4gZW1wdHkKKyAgIDxz dHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb247IGlmIDxmdW5jdGlv bj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAgIGlzIHNldCB0byBOVUxMLCB0aGUgY29yZSBzeXN0 ZW0gd2lsbCBhc3N1bWUgdGhhdCBpdCBpcyB1bnNhZmUgdG8gcmVzdG9yZSBhCisgICBtYXJrZWQg cG9zaXRpb24uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMv ZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCA5NGVmNjM5YjYuLmJlMWIwZjU1 YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRl eF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhf YW0uYwpAQCAtMzE5LDggKzMxOSw3IEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBkaWVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1h cmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5l LT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4g PSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dAppbmRleCAzYjM3ZmFmYTYuLjk3MDJlMzEwMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1OSw2ICsxNTksNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2lu Y3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21l cmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE3Myw3ICsxNzQsNyBAQCBzZWxlY3QgbmFt ZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAg ZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAg ICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0o MjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVz Y3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBw cmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFz dGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MjkwYjkxZTguLmI4ZTZm MjVhMyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE5Myw2ICsxOTMsOCBAQCBCT09M CiBCT09MRUFOCiBCT1gKIEJUQXJyYXlLZXlJbmZvCitCVEJhdGNoSW5mbworQlRCYXRjaFNjYW5Q b3NEYXRhCiBCVEJ1aWxkU3RhdGUKIEJUQ2FsbGJhY2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0xMjY3 LDYgKzEyNjksMTAgQEAgSW5kZXhPcmRlckJ5RGlzdGFuY2UKIEluZGV4UGF0aAogSW5kZXhSdW50 aW1lS2V5SW5mbwogSW5kZXhTY2FuCitJbmRleFNjYW5CYXRjaERhdGEKK0luZGV4U2NhbkJhdGNo UG9zCitJbmRleFNjYW5CYXRjaFBvc0l0ZW0KK0luZGV4U2NhbkJhdGNoZXMKIEluZGV4U2NhbkRl c2MKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgogSW5kZXhTY2FuU3RhdGUKQEAgLTM0MjMsMTAg KzM0MjksMTAgQEAgYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1nZXRiaXRtYXBf ZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgor YW1nZXRiYXRjaF9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2Vy dF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24K IGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0 eV9mdW5jdGlvbgotLSAKMi41MS4wCgo= --00000000000097ed2a0640faa7ed Content-Type: application/octet-stream; name="v20251012-0001-bufmgr-aio-Prototype-for-not-waiting-for-a.patch" Content-Disposition: attachment; filename="v20251012-0001-bufmgr-aio-Prototype-for-not-waiting-for-a.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgo29k8f0 RnJvbSA0YWMzNzA3YzA0YjZiYjY2NmVmOGU4ZjY4MzFmOTM4NDYwZmM1NjRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMDI1 MTAxMiAxLzNdIGJ1Zm1ncjogYWlvOiBQcm90b3R5cGUgZm9yIG5vdCB3YWl0aW5nIGZvcgogYWxy ZWFkeS1pbi1wcm9ncmVzcyBJTwoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS96bGplcmd3ZXF0aTd4NjdsZzVpamUycnpqdXNpZTM3bnNsc25ramtr Ynk0bGFxcWJmd0AzcDN6dTUyMnl5a3YKQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmggICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jIHwgMTUwICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMTQyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5k ZXggM2YzN2IyOTRhLi4wNmEyMjA4YTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQwLDYgKzE0 MCw3IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2 CQluYmxvY2tzOwogCWludDE2CQluYmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQ Z0Fpb1dhaXRSZWYgaW9fd3JlZjsKIAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBlZGYxN2NlM2UuLmU4ZDVmNzVlNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE1NDQsNiArMTU0NCw0NiBAQCBSZWFkQnVm ZmVyc0NhblN0YXJ0SU9PbmNlKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0KQogCQlyZXR1cm4g U3RhcnRCdWZmZXJJTyhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dh aXQpOwogfQogCisvKgorICogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IHVuZGVyZ29p bmcgcmVhZCBBSU8uIElmIGl0IGlzLCBhc3NpZ24gdGhlCisgKiBJTydzIHdhaXQgcmVmZXJlbmNl IHRvIG9wZXJhdGlvbi0+aW9fd3JlZiwgdGhlcmVieSBhbGxvd2luZyB0aGUgY2FsbGVyIHRvCisg KiB3YWl0IGZvciB0aGF0IElPLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1JlYWRCdWZmZXJz SU9BbHJlYWR5SW5Qcm9ncmVzcyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBCdWZm ZXIgYnVmZmVyKQoreworCUJ1ZmZlckRlc2MgKmRlc2M7CisJdWludDMyCQlidWZfc3RhdGU7CisJ UGdBaW9XYWl0UmVmIGlvdzsKKworCXBnYWlvX3dyZWZfY2xlYXIoJmlvdyk7CisKKwlpZiAoQnVm ZmVySXNMb2NhbChidWZmZXIpKQorCXsKKwkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRv cigtYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+ c3RhdGUpOworCQlpZiAoKGJ1Zl9zdGF0ZSAmIEJNX0lPX0lOX1BST0dSRVNTKSAmJiAhKGJ1Zl9z dGF0ZSAmIEJNX1ZBTElEKSkKKwkJCWlvdyA9IGRlc2MtPmlvX3dyZWY7CisJfQorCWVsc2UKKwl7 CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQlidWZfc3RhdGUg PSBMb2NrQnVmSGRyKGRlc2MpOworCisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JF U1MpICYmICEoYnVmX3N0YXRlICYgQk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsK KwkJVW5sb2NrQnVmSGRyKGRlc2MsIGJ1Zl9zdGF0ZSk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZf dmFsaWQoJmlvdykpCisJeworCQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0 cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNS ZWFkQnVmZmVycyB0aGF0IHRyaWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAq LwpAQCAtMTY3Niw3ICsxNzE2LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0 aW9uICpvcGVyYXRpb24pCiAJCQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFk eSBrbm93IHRoZSBJTyBpcyBjb21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3Vs dC5zdGF0dXMgPT0gUEdBSU9fUlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVp Z25faW8gfHwgYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgog CQkJCSFwZ2Fpb193cmVmX2NoZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJ CQkJaW5zdHJfdGltZQlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9f dGltaW5nKTsKQEAgLTE2OTUsMTEgKzE3MzUsNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZm ZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9u ZSgmb3BlcmF0aW9uLT5pb193cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJl IHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGlu Y2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJ CVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9w ZXJhdGlvbi0+Zm9yZWlnbl9pbykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRp b24tPmJ1ZmZlcnNbb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRl c2M7CisJCQkJdWludDMyCQlidWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZm ZXIpKQorCQkJCXsKKwkJCQkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVy IC0gMSk7CisJCQkJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUp OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRv cihidWZmZXIgLSAxKTsKKwkJCQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJ VW5sb2NrQnVmSGRyKGRlc2MsIGJ1Zl9zdGF0ZSk7CisJCQkJfQorCisJCQkJaWYgKGJ1Zl9zdGF0 ZSAmIEJNX1ZBTElEKQorCQkJCXsKKwkJCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsK KwkJCQkJQXNzZXJ0KG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIDw9IG9wZXJhdGlvbi0+bmJsb2Nr cyk7CisKKwkJCQkJLyoKKwkJCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcg Zm9yIHRoaXMgYmFja2VuZCwgZXZlbgorCQkJCQkgKiB0aG91Z2ggaXQgbXVzdCBoYXZlIHN0YXJ0 ZWQgb3V0IGFzIGEgbWlzcyBpbgorCQkJCQkgKiBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3Ro ZXIgYmFja2VuZCAob3Igb3Vyc2VsdmVzLAorCQkJCQkgKiBhcyBwYXJ0IG9mIGEgcmVhZCBzdGFy dGVkIGVhcmxpZXIpIHdpbGwgdHJhY2sgdGhpcyBhcyBhCisJCQkJCSAqICdyZWFkJy4KKwkJCQkJ ICovCisJCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShvcGVyYXRpb24tPmZv cmtudW0sCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPmJsb2NrbnVtICsgb3BlcmF0aW9uLT5u YmxvY2tzX2RvbmUsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCQkJCQkgIG9wZXJhdGlv bi0+c21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCQkJCQkJCQkJCQkJCSAgdHJ1ZSk7CisK KwkJCQkJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJCQkJCXBnQnVmZmVyVXNhZ2UubG9j YWxfYmxrc19oaXQgKz0gMTsKKwkJCQkJZWxzZQorCQkJCQkJcGdCdWZmZXJVc2FnZS5zaGFyZWRf Ymxrc19oaXQgKz0gMTsKKworCQkJCQlpZiAob3BlcmF0aW9uLT5yZWwpCisJCQkJCQlwZ3N0YXRf Y291bnRfYnVmZmVyX2hpdChvcGVyYXRpb24tPnJlbCk7CisKKwkJCQkJcGdzdGF0X2NvdW50X2lv X29wKGlvX29iamVjdCwgaW9fY29udGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJCQkJCWlmIChW YWN1dW1Db3N0QWN0aXZlKQorCQkJCQkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VIaXQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2Ugbm93 IGFyZSBzdXJlIHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSByZXN1bHRzLiBUaGlzCisJCQkJ ICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVyZSB3ZXJlIGFueS4KKwkJCQkg Ki8KKwkJCQlQcm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9uKTsKKwkJCX0KIAkJfQog CiAJCS8qCkBAIC0xNzg1LDYgKzE4ODAsNDMgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJCWlvX29iamVj dCA9IElPT0JKRUNUX1JFTEFUSU9OOwogCX0KIAorCS8qCisJICogSWYgQUlPIGlzIGluIHByb2dy ZXNzLCBiZSBpdCBpbiB0aGlzIGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZQorCSAqIGp1 c3QgYXNzb2NpYXRlIHRoZSB3YWl0IHJlZmVyZW5jZSB3aXRoIHRoZSBvcGVyYXRpb24gYW5kIHdh aXQgaW4KKwkgKiBXYWl0UmVhZEJ1ZmZlcnMoKS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgaW1wb3J0 YW50IGZvciBwZXJmb3JtYW5jZSBpbgorCSAqIHR3byB3b3JrbG9hZHM6CisJICoKKwkgKiAxKSBB IHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJlYWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGlt ZXMgd2l0aGluCisJICogdGhlIHJlYWRhaGVhZCBkaXN0YW5jZS4gVGhpcyBjYW4gaGFwcGVuIGUu Zy4gZm9yIHRoZSB0YWJsZSBhY2Nlc3NlcyBvZgorCSAqIGFuIGluZGV4IHNjYW4uCisJICoKKwkg KiAyKSBDb25jdXJyZW50IHNjYW5zIGJ5IG11bHRpcGxlIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHJl bGF0aW9uLgorCSAqCisJICogSWYgd2Ugd2VyZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRo ZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3QgYmUKKwkgKiBhYmxlIHRvIGtlZXAgZW5vdWdoIEkv TyBpbiBmbGlnaHQuCisJICoKKwkgKiBJZiB3ZSBkbyBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9P IGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAxLWJsb2NrCisJICogUmVhZEJ1ZmZlcnNPcGVy YXRpb24gdGhhdCBXYWl0UmVhZEJ1ZmZlcnMgdGhlbiBjYW4gd2FpdCBvbi4KKwkgKgorCSAqIEl0 J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQgc3RhcnRzIElPIG9uIHRoZSBidWZmZXIg YmV0d2VlbiB0aGlzCisJICogY2hlY2sgYW5kIHRoZSBSZWFkQnVmZmVyc0NhblN0YXJ0SU8obm93 YWl0ID0gZmFsc2UpIGJlbG93LiBJbiB0aGF0IGNhc2UKKwkgKiB3ZSB3aWxsIHN5bmNocm9ub3Vz bHkgd2FpdCBmb3IgdGhlIElPIGJlbG93LCBidXQgdGhlIHdpbmRvdyBmb3IgdGhhdCBpcworCSAq IHNtYWxsIGVub3VnaCB0aGF0IGl0IHdvbid0IGhhcHBlbiBvZnRlbiBlbm91Z2ggdG8gaGF2ZSBh IHNpZ25pZmljYW50CisJICogcGVyZm9ybWFuY2UgaW1wYWN0LgorCSAqLworCWlmIChSZWFkQnVm ZmVyc0lPQWxyZWFkeUluUHJvZ3Jlc3Mob3BlcmF0aW9uLCBidWZmZXJzW25ibG9ja3NfZG9uZV0p KQorCXsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOworCQlvcGVyYXRpb24tPmZvcmVpZ25faW8g PSB0cnVlOworCisJCUNoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24ob3BlcmF0aW9uLCBmYWxzZSk7 CisKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxz ZTsKKwogCS8qCiAJICogSWYgemVyb19kYW1hZ2VkX3BhZ2VzIGlzIGVuYWJsZWQsIGFkZCB0aGUg UkVBRF9CVUZGRVJTX1pFUk9fT05fRVJST1IKIAkgKiBmbGFnLiBUaGUgcmVhc29uIGZvciB0aGF0 IGlzIHRoYXQsIGhvcGVmdWxseSwgemVyb19kYW1hZ2VkX3BhZ2VzIGlzbid0CkBAIC0xODQyLDkg KzE5NzQsOSBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRp b24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAkvKgogCSAqIENoZWNrIGlmIHdlIGNhbiBzdGFy dCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBidWZmZXIuCiAJICoKLQkgKiBJZiBhbiBJL08g aXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBpbiBhbm90aGVyIGJhY2tlbmQsIHdlIHdhbnQgdG8gd2Fp dAotCSAqIGZvciB0aGUgb3V0Y29tZTogZWl0aGVyIGRvbmUsIG9yIHNvbWV0aGluZyB3ZW50IHdy b25nIGFuZCB3ZSB3aWxsCi0JICogcmV0cnkuCisJICogSWYgYSBzeW5jaHJvbm91cyBJL08gaXMg aW4gcHJvZ3Jlc3MgaW4gYW5vdGhlciBiYWNrZW5kIChpdCBjYW4ndCBiZQorCSAqIHRoaXMgYmFj a2VuZCksIHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhlIG91dGNvbWU6IGVpdGhlciBkb25lLCBvcgor CSAqIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3aWxsIHJldHJ5LgogCSAqLwogCWlmICgh UmVhZEJ1ZmZlcnNDYW5TdGFydElPKGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSwgZmFsc2UpKQogCXsK LS0gCjIuNTEuMAoK --00000000000097ed2a0640faa7ed Content-Type: application/octet-stream; name="v20251012-0003-Reduce-malloc-free-traffic-by-caching-batc.patch" Content-Disposition: attachment; filename="v20251012-0003-Reduce-malloc-free-traffic-by-caching-batc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgo29k8l1 RnJvbSBmNmZlY2NkMzg0NzIxMDdmMWI1MzhhODc4NWJiYTI1MmZiN2E2ZDI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMTAgU2VwIDIwMjUgMTY6NTQ6NTAgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMDI1MTAxMiAz LzNdIFJlZHVjZSBtYWxsb2MvZnJlZSB0cmFmZmljIGJ5IGNhY2hpbmcgYmF0Y2hlcwoKSW5zdGVh ZCBvZiBpbW1lZGlhdGVseSBmcmVlaW5nIGEgYmF0Y2gsIHN0YXNoIGl0IGluIGEgY2FjaGUgKGEg c21hbGwKZml4ZWQtc2l6ZSBhcnJheSksIGZvciByZXVzZSBieSB0aGUgc2FtZSBzY2FuLgoKVGhl cmUncyByb29tIGZvciBpbXByb3ZlbWVudDoKCi0gS2VlcGluZyBzb21lIG9mIHRoZSBiYXRjaCBw aWVjZXMgKGtpbGxJdGVtcywgaXRlbXN2aXNpYmlsaXR5LCAuLi4pCiAgaW5zdGVhZCBvZiBmcmVl aW5nIHRoZW0gaW4gaW5kZXhfYmF0Y2hfcmVsZWFzZS4KCi0gQWxsb2NhdGluZyBvbmx5IHNwYWNl IHdlIG5lZWQgKGJvdGggaW5kZXhfYmF0Y2hfYWxsb2MgY2FsbHMgdXNlCiAgTWF4VElEc1BlckJU cmVlUGFnZSwgYW5kIHRodXMgbWFsbG9jIC0gYmVjYXVzZSBvZiBBTExPQ19DSFVOS19MSU1JVCku Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgIHwgMTczICsrKysrKysrKysrKysrKysrKysrKysrLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgIHwgIDE1ICstLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAgNCArLQogNSBmaWxlcyBjaGFuZ2Vk LCAxNzYgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCA3 Njc1MDNiYjYuLjkxMzk0NWM0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTIzMCw3ICsyMzAsOCBAQCBl eHRlcm4gdm9pZCBpbmRleF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5jZXMoSW5kZXhTY2Fu RGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJIGJvb2wgcmVjaGVja09yZGVyQnkpOwogZXh0ZXJuIGJ5 dGVhICppbmRleF9vcGNsYXNzX29wdGlvbnMoUmVsYXRpb24gaW5kcmVsLCBBdHRyTnVtYmVyIGF0 dG51bSwKIAkJCQkJCQkJCURhdHVtIGF0dG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOwotZXh0ZXJu IEluZGV4U2NhbkJhdGNoIGluZGV4X2JhdGNoX2FsbG9jKGludCBtYXhpdGVtcywgYm9vbCB3YW50 X2l0dXApOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4X2JhdGNoX2FsbG9jKEluZGV4U2Nh bkRlc2Mgc2NhbiwgaW50IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCk7CitleHRlcm4gdm9pZCBp bmRleF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpOwogZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfdW5sb2NrKFJlbGF0aW9uIHJlbCwgYm9vbCBk cm9wUGluLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXgg NTU0OTViMGUzLi42ZTUxMWYxYzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTg3LDYgKzE4Nyw3 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqLwogCWNoYXIJICAgKml0 ZW1zdmlzaWJpbGl0eTsJLyogSW5kZXgtb25seSBzY2FuIHZpc2liaWxpdHkgY2FjaGUgKi8KIAor CWludAkJCW1heGl0ZW1zOwogCUluZGV4U2NhbkJhdGNoUG9zSXRlbSBpdGVtc1tGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOwogfSBJbmRleFNjYW5CYXRjaERhdGE7CiAKQEAgLTI2Niw2ICsyNjcsMTAg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hTdGF0ZQogCWludAkJCWZpcnN0QmF0Y2g7 CQkvKiBmaXJzdCB1c2VkIGJhdGNoIHNsb3QgKi8KIAlpbnQJCQluZXh0QmF0Y2g7CQkvKiBuZXh0 IGVtcHR5IGJhdGNoIHNsb3QgKi8KIAorCS8qIHNtYWxsIGNhY2hlIG9mIHVudXNlZCBiYXRjaGVz LCB0byByZWR1Y2UgbWFsbG9jL2ZyZWUgdHJhZmZpYyAqLworCWludAkJCWJhdGNoZXNDYWNoZVNp emU7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICoqYmF0Y2hlc0NhY2hlOworCiAJSW5kZXhTY2FuQmF0 Y2hEYXRhICoqYmF0Y2hlczsKIAogCS8qIGNhbGxiYWNrIHRvIHNraXAgcHJlZmV0Y2hpbmcgaW4g SU9TIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFt LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IGNiYTUxMjg2OS4u MTg5MmVlZGQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTIxOTcsNiArMjE5 NywxMCBAQCBpbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5iYXRj aFN0YXRlLT5maXJzdEJhdGNoID0gMDsJLyogZmlyc3QgYmF0Y2ggKi8KIAlzY2FuLT5iYXRjaFN0 YXRlLT5uZXh0QmF0Y2ggPSAwOwkvKiBmaXJzdCBiYXRjaCBpcyBlbXB0eSAqLwogCisJLyogWFhY IGluaXQgdGhlIGNhY2hlIG9mIGJhdGNoZXMsIGNhcGFjaXR5IDE2IGlzIGFyYml0cmFyeSAqLwor CXNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVNpemUgPSAxNjsKKwlzY2FuLT5iYXRjaFN0 YXRlLT5iYXRjaGVzQ2FjaGUgPSBOVUxMOworCiAJc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlcyA9 CiAJCXBhbGxvYyhzaXplb2YoSW5kZXhTY2FuQmF0Y2hEYXRhICopICogc2Nhbi0+YmF0Y2hTdGF0 ZS0+bWF4QmF0Y2hlcyk7CiAKQEAgLTIzMjksMzQgKzIzMzMsMTAyIEBAIHN0YXRpYyB2b2lkCiBp bmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCWluZGV4X2JhdGNoX3Jlc2V0 KHNjYW4sIHRydWUpOworCisJaWYgKHNjYW4tPmJhdGNoU3RhdGUpCisJeworCQlpZiAoc2Nhbi0+ YmF0Y2hTdGF0ZS0+YmF0Y2hlcykKKwkJCXBmcmVlKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXMp OworCisJCWlmIChzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGUpCisJCXsKKwkJCWZvciAo aW50IGkgPSAwOyBpIDwgc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlU2l6ZTsgaSsrKQor CQkJeworCQkJCWlmIChzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVbaV0gPT0gTlVMTCkK KwkJCQkJY29udGludWU7CisKKwkJCQlwZnJlZShzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2Fj aGVbaV0pOworCQkJfQorCisJCQlwZnJlZShzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGUp OworCQl9CisJCXBmcmVlKHNjYW4tPmJhdGNoU3RhdGUpOworCX0KIH0KIAogLyoKICAqIFhYWCBC b3RoIGluZGV4X2JhdGNoX2FsbG9jKCkgY2FsbHMgaW4gYnRyZWUgdXNlIE1heFRJRHNQZXJCVHJl ZVBhZ2UsCiAgKiB3aGljaCBzZWVtcyB1bmZvcnR1bmF0ZSAtIGl0IGluY3JlYXNlcyB0aGUgYWxs b2NhdGlvbiBzaXplcywgZXZlbiBpZgotICogdGhlIGluZGV4IHdvdWxkIGJlIGZpbmUgd2l0aCBz bWFsbGVyIGFycmF5cy4gVGhpcyBtZWFucyBhbGwgYmF0Y2hlcyBleGNlZWQKLSAqIEFMTE9DX0NI VU5LX0xJTUlULCBmb3JjaW5nIGEgc2VwYXJhdGUgbWFsbG9jIChleHBlbnNpdmUpLgorICogdGhl IGluZGV4IHdvdWxkIGJlIGZpbmUgd2l0aCBzbWFsbGVyIGFycmF5cy4gVGhpcyBtZWFucyBhbGwg YmF0Y2hlcworICogZXhjZWVkIEFMTE9DX0NIVU5LX0xJTUlULCBmb3JjaW5nIGEgc2VwYXJhdGUg bWFsbG9jIChleHBlbnNpdmUpLiBUaGUKKyAqIGNhY2hlIGhlbHBzIGZvciBsb25nZXIgcXVlcmll cywgbm90IGZvciBxdWVyaWVzIHRoYXQgb25seSBjcmVhdGUgYQorICogc2luZ2xlIGJhdGNoLCBl dGMuCiAgKi8KIEluZGV4U2NhbkJhdGNoCi1pbmRleF9iYXRjaF9hbGxvYyhpbnQgbWF4aXRlbXMs IGJvb2wgd2FudF9pdHVwKQoraW5kZXhfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuLCBp bnQgbWF4aXRlbXMsIGJvb2wgd2FudF9pdHVwKQogewotCUluZGV4U2NhbkJhdGNoIGJhdGNoID0g cGFsbG9jKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKLQkJCQkJCQkJICBz aXplb2YoSW5kZXhTY2FuQmF0Y2hQb3NJdGVtKSAqIG1heGl0ZW1zKTsKKwlJbmRleFNjYW5CYXRj aCBiYXRjaCA9IE5VTEw7CiAKKwkvKgorCSAqIHRyeSB0byBmaW5kIGEgYmF0Y2ggaW4gdGhlIGNh Y2hlCisJICoKKwkgKiBYWFggV2UgY2FuIGdldCBoZXJlIHdpdGggYmF0Y2hTdGF0ZT09TlVMTCBm b3IgYml0bWFwc2NhbnMuIENvdWxkIHRoYXQKKwkgKiBtZWFuIGJpdG1hcHNjYW5zIGhhdmUgaXNz dWVzIHdpdGggbWFsbG9jL2ZyZWUgb24gYmF0Y2hlcyB0b28/IEJ1dCB0aGUKKwkgKiBjYWNoZSBj YW4ndCBoZWxwIHdpdGggdGhhdCwgd2hlbiBpdCdzIGluIGJhdGNoU3RhdGUuCisJICovCisJaWYg KChzY2FuLT5iYXRjaFN0YXRlICE9IE5VTEwpICYmCisJCShzY2FuLT5iYXRjaFN0YXRlLT5iYXRj aGVzQ2FjaGUgIT0gTlVMTCkpCisJeworCQkvKgorCQkgKiB0cnkgdG8gZmluZCBhIGJhdGNoIGlu IHRoZSBjYWNoZSwgd2l0aCBtYXhpdGVtcyBoaWdoIGVub3VnaAorCQkgKgorCQkgKiBYWFggTWF5 YmUgc2hvdWxkIGxvb2sgZm9yIGEgYmF0Y2ggd2l0aCBsb3dlc3QgbWF4aXRlbXM/IFRoYXQgc2hv dWxkCisJCSAqIGluY3JlYXNlIHByb2JhYmlsaXR5IG9mIGNhY2hlIGhpdHMgaW4gdGhlIGZ1dHVy ZT8KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hl c0NhY2hlU2l6ZTsgaSsrKQorCQl7CisJCQlpZiAoKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXND YWNoZVtpXSAhPSBOVUxMKSAmJgorCQkJCShzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVb aV0tPm1heGl0ZW1zID49IG1heGl0ZW1zKSkKKwkJCXsKKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNo U3RhdGUtPmJhdGNoZXNDYWNoZVtpXTsKKwkJCQlzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2Fj aGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogZm91bmQgYSBi YXRjaCBpbiB0aGUgY2FjaGU/ICovCisJaWYgKGJhdGNoKQorCXsKKwkJLyogZm9yIElPUywgd2Ug ZXhwZWN0IHRvIGFscmVhZHkgaGF2ZSB0aGUgY3VyclR1cGxlcyAqLworCQlBc3NlcnQoISh3YW50 X2l0dXAgJiYgKGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpKSk7CisKKwkJLyogWFhYIG1heWJl IHdlIGNvdWxkIGtlZXAgdGhlc2UgYWxsb2NhdGlvbnMgdG9vICovCisJCUFzc2VydChiYXRjaC0+ cG9zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eSA9PSBOVUxMKTsK Kwl9CisJZWxzZQorCXsKKwkJYmF0Y2ggPSBwYWxsb2Mob2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hE YXRhLCBpdGVtcykgKworCQkJCQkgICBzaXplb2YoSW5kZXhTY2FuQmF0Y2hQb3NJdGVtKSAqIG1h eGl0ZW1zKTsKKworCQliYXRjaC0+bWF4aXRlbXMgPSBtYXhpdGVtczsKKworCQkvKgorCQkgKiBJ ZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBuZWVkIGEgdHVwbGUgc3RvcmFn ZQorCQkgKiB3b3Jrc3BhY2UuIFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhpcywgd2hpY2ggc2hv dWxkIGFsd2F5cyBnaXZlCisJCSAqIHRoZSBpbmRleCBBTSBlbm91Z2ggc3BhY2UgdG8gZml0IGEg ZnVsbCBwYWdlJ3Mgd29ydGggb2YgdHVwbGVzLgorCQkgKi8KKwkJYmF0Y2gtPmN1cnJUdXBsZXMg PSBOVUxMOworCQlpZiAod2FudF9pdHVwKQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBwYWxsb2Mo QkxDS1NaKTsKKwl9CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24gKi8KIAliYXRjaC0+Zmly c3RJdGVtID0gLTE7CiAJYmF0Y2gtPmxhc3RJdGVtID0gLTE7CiAJYmF0Y2gtPmtpbGxlZEl0ZW1z ID0gTlVMTDsKIAliYXRjaC0+bnVtS2lsbGVkID0gMDsKIAotCS8qCi0JICogSWYgd2UgYXJlIGRv aW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBhIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNl LgotCSAqIFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhpcywgd2hpY2ggc2hvdWxkIGFsd2F5cyBn aXZlIHRoZSBpbmRleCBBTQotCSAqIGVub3VnaCBzcGFjZSB0byBmaXQgYSBmdWxsIHBhZ2UncyB3 b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JYmF0Y2gtPmN1cnJUdXBsZXMgPSBOVUxMOwotCWlmICh3 YW50X2l0dXApCi0JCWJhdGNoLT5jdXJyVHVwbGVzID0gcGFsbG9jKEJMQ0tTWik7Ci0KIAliYXRj aC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAliYXRjaC0+cG9zID0gTlVMTDsKIAliYXRjaC0+aXRl bXN2aXNpYmlsaXR5ID0gTlVMTDsJLyogcGVyLWJhdGNoIElPUyB2aXNpYmlsaXR5ICovCkBAIC0y Mzk3LDMgKzI0NjksNzYgQEAgaW5kZXhfYmF0Y2hfdW5sb2NrKFJlbGF0aW9uIHJlbCwgYm9vbCBk cm9wUGluLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIAlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYp OwogCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOyAvKiBkZWZlbnNpdmUgKi8KIH0KKworLyog YWRkIHRoZSBidWZmZXIgdG8gdGhlIGNhY2hlLCBvciBmcmVlIGl0ICovCit2b2lkCitpbmRleF9i YXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7 CisJLyoKKwkgKiBmaXJzdCBmcmVlIHNvbWUgYWxsb2NhdGlvbnMKKwkgKgorCSAqIFhYWCBXZSBj b3VsZCBrZWVwL3JldXNlIHNvbWUgb2YgdGhvc2UuCisJICovCisKKwlpZiAoYmF0Y2gtPmtpbGxl ZEl0ZW1zICE9IE5VTEwpCisJeworCQlwZnJlZShiYXRjaC0+a2lsbGVkSXRlbXMpOworCQliYXRj aC0+a2lsbGVkSXRlbXMgPSBOVUxMOworCX0KKworCWlmIChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5 ICE9IE5VTEwpCisJeworCQlwZnJlZShiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KTsKKwkJYmF0Y2gt Pml0ZW1zdmlzaWJpbGl0eSA9IE5VTEw7CisJfQorCisJLyogWFhYIGEgYml0IHVuY2xlYXIgd2hh dCdzIHJlbGVhc2UgYnkgQU0gdnMuIGluZGV4YW0gKi8KKwlBc3NlcnQoYmF0Y2gtPnBvcyA9PSBO VUxMKTsKKworCS8qCisJICogdHJ5IGFkZGluZyBpdCB0byB0aGUgY2FjaGUgLSBmaW5kcyBhIHNs b3QgdGhhdCdzIGVpdGhlciBlbXB0eSBvciBoYXMgYQorCSAqIGxvd2VyIG1heGl0ZW1zIHZhbHVl IChhbmQgcmVwbGFjZSB0aGF0IGJhdGNoKQorCSAqCisJICogWFhYIG1heWJlIHdlIHNob3VsZCB0 cmFjayB0aGUgbnVtYmVyIG9mIGVtcHR5IHNsb3RzLCBhbmQgbWluaW11bSB2YWx1ZQorCSAqIG9m IG1heGl0ZW1zLCBzbyB0aGF0IHdlIGNhbiBza2lwIHBvaW50bGVzcyBzZWFyY2hlcz8KKwkgKgor CSAqIFhYWCBpZ25vcmVzIGNhc2VzIHdpdGggYmF0Y2hTdGF0ZT1OVUxMIChjYW4gd2UgZ2V0IGhl cmUgd2l0aCBiaXRtYXAKKwkgKiBzY2Fucz8pCisJICovCisJaWYgKHNjYW4tPmJhdGNoU3RhdGUg IT0gTlVMTCkKKwl7CisJCS8qIGxvd2VzdCBtYXhpdGVtcyB3ZSBmb3VuZCBpbiB0aGUgY2FjaGUg KHRvIHJlcGxhY2Ugd2l0aCBiYXRjaCkgKi8KKwkJaW50CQkJbWF4aXRlbXMgPSBiYXRjaC0+bWF4 aXRlbXM7CisJCWludAkJCXNsb3QgPSBzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVTaXpl OworCisJCS8qIGZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgKi8KKwkJ aWYgKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZSA9PSBOVUxMKQorCQkJc2Nhbi0+YmF0 Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlCisJCQkJPSBwYWxsb2MwX2FycmF5KEluZGV4U2NhbkJhdGNo LAorCQkJCQkJCQlzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVTaXplKTsKKworCQlmb3Ig KGludCBpID0gMDsgaSA8IHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVNpemU7IGkrKykK KwkJeworCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUgZG9uZSAqLworCQkJaWYgKHNjYW4t PmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtpXSA9PSBOVUxMKQorCQkJeworCQkJCXNjYW4tPmJh dGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtpXSA9IGJhdGNoOworCQkJCXJldHVybjsKKwkJCX0KKwor CQkJLyogdXBkYXRlIGxvd2VzdCBtYXhpdGVtcz8gKi8KKwkJCWlmIChzY2FuLT5iYXRjaFN0YXRl LT5iYXRjaGVzQ2FjaGVbaV0tPm1heGl0ZW1zIDwgbWF4aXRlbXMpCisJCQl7CisJCQkJbWF4aXRl bXMgPSBzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVbaV0tPm1heGl0ZW1zOworCQkJCXNs b3QgPSBpOworCQkJfQorCQl9CisKKwkJLyogZm91bmQgYSBiYXRjaCB0byByZXBsYWNlPyAqLwor CQlpZiAobWF4aXRlbXMgPCBiYXRjaC0+bWF4aXRlbXMpCisJCXsKKwkJCXBmcmVlKHNjYW4tPmJh dGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtzbG90XSk7CisJCQlzY2FuLT5iYXRjaFN0YXRlLT5iYXRj aGVzQ2FjaGVbc2xvdF0gPSBiYXRjaDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHJlZS5jCmluZGV4IGZiYTU2MmRmOC4uMThjNzM0YzRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKQEAgLTM4MiwyMSArMzgyLDIyIEBAIGJ0ZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQog CQlfYnRfa2lsbGl0ZW1zKHNjYW4sIGJhdGNoKTsKIAotCWlmIChiYXRjaC0+aXRlbXN2aXNpYmls aXR5KQotCQlwZnJlZShiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KTsKLQotCWlmIChiYXRjaC0+Y3Vy clR1cGxlcykKLQkJcGZyZWUoYmF0Y2gtPmN1cnJUdXBsZXMpOwotCiAJaWYgKGJhdGNoLT5wb3Mp CiAJewogCQlpZiAoIXNjYW4tPmJhdGNoU3RhdGUgfHwgIXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQ aW4pCiAJCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOwogCiAJCXBmcmVlKGJhdGNoLT5wb3Mp OworCisJCS8qIFhYWCBtYXliZSBzaG91bGQgYmUgZG9uZSBpbiBpbmRleF9iYXRjaF9mcmVlPyAq LworCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJYmF0Y2gtPnBvcyA9IE5VTEw7CiAJ fQogCi0JcGZyZWUoYmF0Y2gpOworCS8qIFhYWCBrZWVwIGl0ZW1zdmlzaWJpbGl0eSwga2lsbEl0 ZW1zIGFuZCBjdXJyVHVwbGVzICovCisKKwkvKiBmcmVlIHRoZSBiYXRjaCAob3IgY2FjaGUgaXQg Zm9yIHJldXNlKSAqLworCWluZGV4X2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggNjIxMWU5NTQ4Li4wZTlm OGJkYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMTIwMCw3ICsx MjAwLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJfQogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCi0JZmlyc3RiYXRj aCA9IGluZGV4X2JhdGNoX2FsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRf aXR1cCk7CisJZmlyc3RiYXRjaCA9IGluZGV4X2JhdGNoX2FsbG9jKHNjYW4sIE1heFRJRHNQZXJC VHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAJZmlyc3RiYXRjaC0+cG9zID0gcGFsbG9j KHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7CiAKIAkvKgpAQCAtMjIzNyw3ICsyMjM3LDcgQEAgX2J0 X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCUJU U2NhblBvcwluZXdwb3M7CiAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV4dCBiYXRjaCAqLwot CW5ld2JhdGNoID0gaW5kZXhfYmF0Y2hfYWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSwgc2Nhbi0+ eHNfd2FudF9pdHVwKTsKKwluZXdiYXRjaCA9IGluZGV4X2JhdGNoX2FsbG9jKHNjYW4sIE1heFRJ RHNQZXJCVHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAJbmV3YmF0Y2gtPnBvcyA9IHBh bGxvYyhzaXplb2YoQlRTY2FuUG9zRGF0YSkpOwogCW5ld3BvcyA9IG5ld2JhdGNoLT5wb3M7CiAK LS0gCjIuNTEuMAoK --00000000000097ed2a0640faa7ed--