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 1vGN7R-00DaoM-Lp for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Nov 2025 19:55:05 +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 1vGN7Q-00GTGv-Kz for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Nov 2025 19:55:03 +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 1vGN7P-00GTGm-MY for pgsql-hackers@lists.postgresql.org; Tue, 04 Nov 2025 19:55:03 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vGN7L-005zK6-1T for pgsql-hackers@lists.postgresql.org; Tue, 04 Nov 2025 19:55:02 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b710601e659so389048366b.1 for ; Tue, 04 Nov 2025 11:54:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762286098; x=1762890898; 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=eh8eH1+0yKhKV1R14gHV89cp1TeKMab95VQYzREXpBM=; b=Oe3YvhiZ2ND8+fuEzdFfUGpZHnJ3sjbq8dvoa0qLhOP4tFsyk5/Y3Q2fbCfMPAypvV KFutyMDbMyKBbiuXX0591CJqHbvoiexSVLB5j4Ro3qOIOyAVc3OYLSnsBBBma9VxqU5O IgMe0R4nCLqMiPuZAyGk3A0L2iGv+mOCZVZKABTidy3ULR4Dd/RhYwNLsMMZvTqM7wPG 6GQUe9PmuA5cGBPYUF8k1KDhfYlNeHq5sOh6EO9ly8UBhFMx5zZi6szqICfktpJH+y3w EjRWILtzQ5NljcEb3rQFZipVvFMMv1cfFGXzdZjV3NA8oKVqSMhBz54xSqU7u1mCBfP3 chDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762286098; x=1762890898; 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=eh8eH1+0yKhKV1R14gHV89cp1TeKMab95VQYzREXpBM=; b=WvFqfTVMFSuUVqsrYo7vr/OCAPMXFZtXChr1lJ3kawGjQBvdviXR/8ge92Jarr84wE 7r4zk4hvrLS/OdNY3qu0zvbirNDSKPiMs3hJUhPapgI+w/kr1Edm1L3pjm10eJ1U6GFD AQOSLVMnLoODx3nIS25KDHdfmkJBOd08P66jWU5qkthdq/M2O2kd77YakdK0gBWUf7i/ qvy+ZRnl9yQvseMjFQdWWuWVsqi8M45MnGvNCl15d7qyJ5KNkw/bknCgHjhoDXxjxz4d SI/GjiJMeMpFl9mfsxR3x+H85wPYD8LDhNnn0+ABgHSlao+OvIZ7DpX/10iAKDRAyfFS pjXg== X-Gm-Message-State: AOJu0YwJLQgWxNgfLBg8wHR0KC0QUb4+Hd6dkdnCuRxE17uhIGiibP3T SmgaBDhwOFwgUWMVDARl3le5A20VsNbSr+s3dnt8lsl4+aISkgUD74PlheyJHyfPo5cQ6N0/dFM txDB2hw04A+XGUw9bHlbvbtzna3YBeZw= X-Gm-Gg: ASbGncslyLA/j3FqH2wBORSX+Shd1jmk7mpSMyp9cDSD4ucTL+KrF6PTO+d5Cwy6yxZ v4vwmcsUtXBsMK7nE3YtzTIi4LMib/wlsOi4URBkAKSTuVl5f2+pwRNIS89kzmWnvMnqVdJ4L++ XpBw/zJL4GekhqZ5sPnpU+lMiDpThNAwrOgQ7/tf1VNz8vGNzyV5enKBMH6p8R7gPck8pW25K2X Uk41Aq+anAPKITqav0JoEx0eGW+ylQcgiYHu503EZuN66D9LtMHaRXDTnUV X-Google-Smtp-Source: AGHT+IFKSA1Mnup5gzvnNtl9vRJ0ih9q4jzpA0Ha7DNdNo6/1J//J+XNP7OshUg79fl0M8Y32KP+0458o0DMpnGuzXE= X-Received: by 2002:a17:907:60cd:b0:b71:5064:be0d with SMTP id a640c23a62f3a-b72654d7646mr35703066b.41.1762286097531; Tue, 04 Nov 2025 11:54:57 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Tue, 4 Nov 2025 14:54:44 -0500 X-Gm-Features: AWmQ_bmQHNMiYhoE22FQcXLW09_5HQiuCvHmu_BGl8gbccemTOXFdGGgCbWJ0Qw Message-ID: Subject: Re: pg_plan_advice To: Jakub Wartak Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d660ae0642ca34ae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d660ae0642ca34ae Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Oct 31, 2025 at 5:59=E2=80=AFAM Jakub Wartak wrote: > My gcc-13 was nitpicking a little bit (see > compilation_warnings_v1.txt), so attached is just a tiny diff to fix > some of those issues. After that, clang-20 run was clean too. Here's v2. Change log: - Attempted to fix the compiler warnings. I didn't add elog() before pg_unreachable() as you suggested; instead, I added a dummy return afterwards. Let's see if that works. Also, I decided after reading the comment for list_truncate() that what I'd done there was not going to be acceptable, so I rewrote the code slightly. It now copies the list when adding to it, instead of relying on the ability to use list_truncate() to recreate the prior tstate. - Deleted the SQL-callable pg_parse_advice function and related code. That was useful to me early in development but I don't think anyone will need it at this point; if you want to test whether an advice string can be parsed, just try setting pg_plan_advice.advice. - Fixed a couple of dumb bugs in pgpa_trove.c. - Added a few more regression test scenarios. - Fixed a couple of typos/thinkos. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000d660ae0642ca34ae Content-Type: application/octet-stream; name="v2-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v2-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkzmey44 RnJvbSA3NWNmZjc0NDUzNzEwZjY4MDE5ODViNGRiNzc4N2Y0NzYyOTRjN2UyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDUv Nl0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMSArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg4ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICAxICsKIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8ICA1NCArKysrKysKIHNyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3JlbG5vZGUuYyAgICB8ICA0MyArKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgIHwgIDgyICsrKysrKysrLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3Qu aCAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAg ICAgICAgfCAgMTEgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oICAgICAgICAgICB8 ICAgOSArLQogMTQgZmlsZXMgY2hhbmdlZCwgNDUxIGluc2VydGlvbnMoKyksIDk3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDM0OTg2M2ZiMTk0 Li4wNzQ4MDI4MjUxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC05 NTQsNyArOTU0LDcgQEAgc2V0X3RhYmxlc2FtcGxlX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBSYW5nZVRibEVudHJ5ICoKIAkJIGJtc19tZW1iZXJzaGlw KHJvb3QtPmFsbF9xdWVyeV9yZWxzKSAhPSBCTVNfU0lOR0xFVE9OKSAmJgogCQkhKEdldFRzbVJv dXRpbmUocnRlLT50YWJsZXNhbXBsZS0+dHNtaGFuZGxlciktPnJlcGVhdGFibGVfYWNyb3NzX3Nj YW5zKSkKIAl7Ci0JCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHBh dGgpOworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBwYXRoLCB0 cnVlKTsKIAl9CiAKIAlhZGRfcGF0aChyZWwsIHBhdGgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKaW5kZXggODMzNWNmNWI1YzUuLjVlODMzMmFhODgxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTI3NSw2ICsyNzUsNyBAQCBjb3N0X3NlcXNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlzcGNfc2VxX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSBQR1NfU0VRU0NBTjsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAg LTMyNyw4ICszMjgsMTEgQEAgY29zdF9zZXFzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCQkgKi8KIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfc2Vxc2NhbiA/ IDAgOiAxOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYg ZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3RhcnR1cF9jb3N0 ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBjcHVf cnVuX2Nvc3QgKyBkaXNrX3J1bl9jb3N0OwogfQpAQCAtMzU0LDYgKzM1OCw3IEBAIGNvc3Rfc2Ft cGxlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQlzcGNfcGFnZV9jb3N0 OwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0 CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2Ug cmVsYXRpb25zIHdpdGggdGFibGVzYW1wbGUgY2xhdXNlcyAqLwogCUFzc2VydChiYXNlcmVsLT5y ZWxpZCA+IDApOwpAQCAtNDAxLDcgKzQwNiwxMSBAQCBjb3N0X3NhbXBsZXNjYW4oUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQt PmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90 dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBh dGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CisKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3Nf bWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0 dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0 ICsgcnVuX2Nvc3Q7CiB9CkBAIC00NDAsNyArNDQ5LDggQEAgY29zdF9nYXRoZXIoR2F0aGVyUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3Nl dHVwX2Nvc3Q7CiAJcnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgu cm93czsKIAotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNh YmxlZF9ub2RlczsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKHJlbC0+cGdzX21hc2sgJiBQR1NfR0FUSEVSKSAhPSAwID8g MCA6IDEpOwogCXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgt PnBhdGgudG90YWxfY29zdCA9IChzdGFydHVwX2Nvc3QgKyBydW5fY29zdCk7CiB9CkBAIC01MDYs OCArNTE2LDggQEAgY29zdF9nYXRoZXJfbWVyZ2UoR2F0aGVyTWVyZ2VQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGFyYWxsZWxfc2V0dXBfY29zdDsKIAly dW5fY29zdCArPSBwYXJhbGxlbF90dXBsZV9jb3N0ICogcGF0aC0+cGF0aC5yb3dzICogMS4wNTsK IAotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcwotCQkr IChlbmFibGVfZ2F0aGVybWVyZ2UgPyAwIDogMSk7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2Rl cyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYg UEdTX0dBVEhFUl9NRVJHRSkgIT0gMCA/IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdCArIGlucHV0X3N0YXJ0dXBfY29zdDsKIAlwYXRoLT5wYXRoLnRvdGFs X2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QgKyBpbnB1dF90b3RhbF9jb3N0KTsKIH0K QEAgLTU1Nyw2ICs1NjcsNyBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsIGRvdWJsZSBsb29wX2NvdW50LAogCWRvdWJsZQkJcGFnZXNfZmV0Y2hlZDsKIAlk b3VibGUJCXJhbmRfaGVhcF9wYWdlczsKIAlkb3VibGUJCWluZGV4X3BhZ2VzOworCXVpbnQ2NAkJ ZW5hYmxlX21hc2s7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSAmJgpAQCAtNTg4LDggKzU5 OSwxMSBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIGRv dWJsZSBsb29wX2NvdW50LAogCQkJCQkJCQkJCQkgIHBhdGgtPmluZGV4Y2xhdXNlcyk7CiAJfQog Ci0JLyogd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlbmFibGVfaW5kZXhvbmx5c2NhbjsgaW5keHBh dGguYyBkb2VzIHRoYXQgKi8KLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gZW5hYmxlX2lu ZGV4c2NhbiA/IDAgOiAxOworCS8qIGlzIHRoaXMgc2NhbiB0eXBlIGRpc2FibGVkPyAqLworCWVu YWJsZV9tYXNrID0gKGluZGV4b25seSA/IFBHU19JTkRFWE9OTFlTQ0FOIDogUEdTX0lOREVYU0NB TikKKwkJfCAocGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDAgPyBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTCA6IDApOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAogCS8q CiAJICogQ2FsbCBpbmRleC1hY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUg dGhlIHByb2Nlc3NpbmcgY29zdApAQCAtMTAxMCw2ICsxMDI0LDcgQEAgY29zdF9iaXRtYXBfaGVh cF9zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVs LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3QsCiAJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7 CiAJZG91YmxlCQlUOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQklUTUFQU0NBTjsKIAog CS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQo SXNBKGJhc2VyZWwsIFJlbE9wdEluZm8pKTsKQEAgLTEwNzUsNiArMTA5MCw4IEBAIGNvc3RfYml0 bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8gcGFy YWxsZWxfZGl2aXNvcik7CiAJfQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CiAKIAogCXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKQEAgLTEwODMsNyAr MTEwMCw4IEBAIGNvc3RfYml0bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRh cmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Qu cGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxl X2JpdG1hcHNjYW4gPyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgt PnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1 cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xMjQwLDYgKzEyNTgsNyBAQCBjb3N0X3RpZHNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQludHVwbGVzOwogCUxpc3RD ZWxsICAgKmw7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKKwl1aW50NjQJCWVuYWJs ZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlv bnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTEyNjEsMTAgKzEyODAsMTAg QEAgY29zdF90aWRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJCS8qCiAJ CSAqIFdlIG11c3QgdXNlIGEgVElEIHNjYW4gZm9yIEN1cnJlbnRPZkV4cHI7IGluIGFueSBvdGhl ciBjYXNlLCB3ZQotCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkgaWYg ZW5hYmxlX3RpZHNjYW49dHJ1ZS4gQWxzbywKLQkJICogaWYgQ3VycmVudE9mRXhwciBpcyB0aGUg cXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgorCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGlu ZyBhIFRJRCBzY2FuIG9ubHkgaWYgVElEIHNjYW5zIGFyZSBhbGxvd2VkLgorCQkgKiBBbHNvLCBp ZiBDdXJyZW50T2ZFeHByIGlzIHRoZSBxdWFsLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUuCiAJ CSAqLwotCQlBc3NlcnQoZW5hYmxlX3RpZHNjYW4gfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIp KTsKKwkJQXNzZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwIHx8IElz QShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAJCUFzc2VydChsaXN0X2xlbmd0aCh0aWRxdWFscykg PT0gMSB8fCAhSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIpKTsKIAogCQlpZiAoSXNBKHF1YWwsIFNj YWxhckFycmF5T3BFeHByKSkKQEAgLTEzMTYsMTAgKzEzMzUsMTQgQEAgY29zdF90aWRzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiBUaGVyZSBhcmUgYXNzZXJ0 aW9ucyBhYm92ZSB2ZXJpZnlpbmcgdGhhdCB3ZSBvbmx5IHJlYWNoIHRoaXMgZnVuY3Rpb24KLQkg KiBlaXRoZXIgd2hlbiBlbmFibGVfdGlkc2Nhbj10cnVlIG9yIHdoZW4gdGhlIFRJRCBzY2FuIGlz IHRoZSBvbmx5IGxlZ2FsCi0JICogcGF0aCwgc28gaXQncyBzYWZlIHRvIHNldCBkaXNhYmxlZF9u b2RlcyB0byB6ZXJvIGhlcmUuCisJICogZWl0aGVyIHdoZW4gYmFzZXJlbC0+cGdzX21hc2sgaW5j bHVkZXMgUEdTX1RJRFNDQU4gb3Igd2hlbiB0aGUgVElEIHNjYW4KKwkgKiBpcyB0aGUgb25seSBs ZWdhbCBwYXRoLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29uc2lkZXIgdGhlIGVmZmVjdHMgb2YKKwkg KiBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJlLgogCSAqLwotCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJ CShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0 ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xMzQ5LDYgKzEzNzIsNyBAQCBjb3N0 X3RpZHJhbmdlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCW5z ZXFwYWdlczsKIAlkb3VibGUJCXNwY19yYW5kb21fcGFnZV9jb3N0OwogCWRvdWJsZQkJc3BjX3Nl cV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19USURTQ0FOOwogCiAJLyog U2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNl cmVsLT5yZWxpZCA+IDApOwpAQCAtMTQxMiw4ICsxNDM2LDE1IEBAIGNvc3RfdGlkcmFuZ2VzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+ Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0 ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVuYWJsZV90aWRzY2FuPWZhbHNlICovCi0JQXNzZXJ0KGVu YWJsZV90aWRzY2FuKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRo IHR5cGUgd2hlbiBQR1NfVElEU0NBTiBpcyB1bnNldCwgYnV0IHdlCisJICogbWlnaHQgbmVlZCB0 byBkaXNhYmxlIHRoaXMgcGF0aCBkdWUgdG8gUEdTX0NPTlNJREVSX05PTlBBUlRJQUwuCisJICov CisJQXNzZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwKTsKKwlpZiAo cGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3Nf bWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPmRpc2Fi bGVkX25vZGVzID0gMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwpAQCAtMTQzNyw2ICsxNDY4 LDcgQEAgY29zdF9zdWJxdWVyeXNjYW4oU3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJTGlzdAkgICAqcXBxdWFsczsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlD b3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hv dWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBzdWJxdWVyaWVz ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNDY3LDcgKzE0OTksMTAgQEAg Y29zdF9zdWJxdWVyeXNjYW4oU3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJv b3QsCiAJICogU3VicXVlcnlTY2FuIG5vZGUsIHBsdXMgY3B1X3R1cGxlX2Nvc3QgdG8gYWNjb3Vu dCBmb3Igc2VsZWN0aW9uIGFuZAogCSAqIHByb2plY3Rpb24gb3ZlcmhlYWQuCiAJICovCi0JcGF0 aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzOwor CWlmIChwYXRoLT5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0g UEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBh dGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzCisJCSsgKCgoYmFzZXJlbC0+cGdzX21hc2sgJiBl bmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spID8gMSA6IDApOwogCXBhdGgtPnBhdGguc3RhcnR1 cF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+c3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90YWxf Y29zdCA9IHBhdGgtPnN1YnBhdGgtPnRvdGFsX2Nvc3Q7CiAKQEAgLTE1MTgsNiArMTU1Myw3IEBA IGNvc3RfZnVuY3Rpb25zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VUYmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0 OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGll ZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE1NTgsNyArMTU5NCwxMCBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0 aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNv c3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsK KwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgt PnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1 cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNTgwLDYgKzE2MTksNyBAQCBjb3N0X3RhYmxlZnVu Y3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBs ZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7CiAJUXVhbENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQll bmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVs YXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDAp OwpAQCAtMTYxNSw3ICsxNjU1LDEwIEBAIGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29z dC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxl ICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVu X2Nvc3Q7CiB9CkBAIC0xNjM1LDYgKzE2NzgsNyBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFw cXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQg YXJlIHZhbHVlcyBsaXN0cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTY2 Myw3ICsxNzA3LDEwIEBAIGNvc3RfdmFsdWVzc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwog CXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93 czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBf Y29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBA IC0xNjg2LDYgKzE3MzMsNyBAQCBjb3N0X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNv c3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91 bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIENURXMgKi8KIAlB c3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE3MTEsNyArMTc1OSwxMCBAQCBjb3N0X2N0 ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBh dGgtPnBhdGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFy Z2V0LT5jb3N0LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9 IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTcyOCw2ICsxNzc5LDcgQEAgY29zdF9u YW1lZHR1cGxlc3RvcmVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1 cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBUdXBsZXN0b3JlcyAqLwogCUFzc2VydChi YXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTc0OSw3ICsxODAxLDEwIEBAIGNvc3RfbmFtZWR0dXBs ZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxl ICs9IGNwdV90dXBsZV9jb3N0ICsgcXBxdWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9 IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVsLT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9 IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTc2Niw2ICsxODIxLDcgQEAgY29zdF9y ZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0 ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBS VEVfUkVTVUxUIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7 CkBAIC0xNzg0LDcgKzE4NDAsMTAgQEAgY29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9j b3N0LnBlcl90dXBsZTsKIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVw bGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93 b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOwor CXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21h c2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0K QEAgLTE4MDIsNiArMTg2MSw3IEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwg UGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJ dG90YWxfY29zdDsKIAlkb3VibGUJCXRvdGFsX3Jvd3M7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBXZSBwcm9iYWJseSBoYXZlIGRlY2VudCBlc3RpbWF0ZXMgZm9yIHRoZSBub24t cmVjdXJzaXZlIHRlcm0gKi8KIAlzdGFydHVwX2Nvc3QgPSBucnRlcm0tPnN0YXJ0dXBfY29zdDsK QEAgLTE4MjQsNyArMTg4NCwxMCBAQCBjb3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24s IFBhdGggKm5ydGVybSwgUGF0aCAqcnRlcm0pCiAJICovCiAJdG90YWxfY29zdCArPSBjcHVfdHVw bGVfY29zdCAqIHRvdGFsX3Jvd3M7CiAKLQlydW5pb24tPmRpc2FibGVkX25vZGVzID0gbnJ0ZXJt LT5kaXNhYmxlZF9ub2RlcyArIHJ0ZXJtLT5kaXNhYmxlZF9ub2RlczsKKwlpZiAocnVuaW9uLT5w YXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05Q QVJUSUFMOworCXJ1bmlvbi0+ZGlzYWJsZWRfbm9kZXMgPQorCQkocnVuaW9uLT5wYXJlbnQtPnBn c19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcnVuaW9uLT5z dGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcnVuaW9uLT50b3RhbF9jb3N0ID0gdG90YWxf Y29zdDsKIAlydW5pb24tPnJvd3MgPSB0b3RhbF9yb3dzOwpAQCAtMjA5NCw3ICsyMTU3LDExIEBA IGNvc3RfaW5jcmVtZW50YWxfc29ydChQYXRoICpwYXRoLAogCiAJcGF0aC0+cm93cyA9IGlucHV0 X3R1cGxlczsKIAotCS8qIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFi bGVfaW5jcmVtZW50YWxfc29ydD1mYWxzZSAqLworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5l cmF0ZSB0aGVzZSBwYXRocyB3aGVuIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlLgorCSAq IFdlIGNhbiBpZ25vcmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBp dCdzIHJlbGV2YW50LAorCSAqIGl0IHdpbGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1 dCBwYXRoLgorCSAqLwogCUFzc2VydChlbmFibGVfaW5jcmVtZW50YWxfc29ydCk7CiAJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKIApAQCAtMjEzMiw2ICsyMTk5 LDEwIEBAIGNvc3Rfc29ydChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXN0YXJ0 dXBfY29zdCArPSBpbnB1dF9jb3N0OwogCisJLyoKKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05T SURFUl9OT05QQVJUSUFMIGhlcmUsIGJlY2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3 aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3RlZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlwYXRoLT5y b3dzID0gdHVwbGVzOwogCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9k ZXMgKyAoZW5hYmxlX3NvcnQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwpAQCAtMjIyMyw5ICsyMjk0LDE1IEBAIGFwcGVuZF9ub25wYXJ0aWFsX2Nvc3QoTGlz dCAqc3VicGF0aHMsIGludCBudW1wYXRocywgaW50IHBhcmFsbGVsX3dvcmtlcnMpCiB2b2lkCiBj b3N0X2FwcGVuZChBcHBlbmRQYXRoICphcGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CisJUmVs T3B0SW5mbyAqcmVsID0gYXBhdGgtPnBhdGgucGFyZW50OwogCUxpc3RDZWxsICAgKmw7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19BUFBFTkQ7CisKKwlpZiAoYXBhdGgtPnBhdGgucGFyYWxs ZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElB TDsKIAotCWFwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gMDsKKwlhcGF0aC0+cGF0aC5kaXNh YmxlZF9ub2RlcyA9CisJCShyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9t YXNrID8gMCA6IDE7CiAJYXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0 aC50b3RhbF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0aC5yb3dzID0gMDsKQEAgLTI0MzUsMTEgKzI1 MTIsMTYgQEAgY29zdF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAog CQkJCSAgZG91YmxlIHR1cGxlcykKIHsKKwlSZWxPcHRJbmZvICpyZWwgPSBwYXRoLT5wYXJlbnQ7 CiAJQ29zdAkJc3RhcnR1cF9jb3N0ID0gMDsKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJQ29zdAkJ Y29tcGFyaXNvbl9jb3N0OwogCWRvdWJsZQkJTjsKIAlkb3VibGUJCWxvZ047CisJdWludDY0CQll bmFibGVfbWFzayA9IFBHU19NRVJHRV9BUFBFTkQ7CisKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAog CS8qCiAJICogQXZvaWQgbG9nKDApLi4uCkBAIC0yNDYyLDcgKzI1NDQsOSBAQCBjb3N0X21lcmdl X2FwcGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlydW5fY29zdCAr PSBjcHVfdHVwbGVfY29zdCAqIEFQUEVORF9DUFVfQ09TVF9NVUxUSVBMSUVSICogdHVwbGVzOwog Ci0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKKwlwYXRoLT5k aXNhYmxlZF9ub2RlcyA9CisJCShyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJs ZV9tYXNrID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgKz0gaW5wdXRfZGlzYWJsZWRf bm9kZXM7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlu cHV0X3RvdGFsX2Nvc3Q7CiB9CkBAIC0yNDgxLDcgKzI1NjUsNyBAQCBjb3N0X21lcmdlX2FwcGVu ZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKICAqLwogdm9pZAogY29zdF9tYXRlcmlh bChQYXRoICpwYXRoLAotCQkJICBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkgIGJvb2wg ZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVkX25vZGVzLAogCQkJICBDb3N0IGlucHV0X3N0YXJ0 dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJICBkb3VibGUgdHVwbGVzLCBpbnQg d2lkdGgpCiB7CkBAIC0yNDkwLDYgKzI1NzQsMTAgQEAgY29zdF9tYXRlcmlhbChQYXRoICpwYXRo LAogCWRvdWJsZQkJbmJ5dGVzID0gcmVsYXRpb25fYnl0ZV9zaXplKHR1cGxlcywgd2lkdGgpOwog CWRvdWJsZQkJd29ya19tZW1fYnl0ZXMgPSB3b3JrX21lbSAqIChTaXplKSAxMDI0OwogCisJaWYg KHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCAmJgorCQkocGF0aC0+cGFyZW50LT5wZ3NfbWFz ayAmIFBHU19DT05TSURFUl9OT05QQVJUSUFMKSA9PSAwKQorCQllbmFibGVkID0gZmFsc2U7CisK IAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCiAJLyoKQEAgLTI1MTksNyArMjYwNyw3IEBAIGNvc3Rf bWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAkJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29zdCAqIG5wYWdl czsKIAl9CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzICsg KGVuYWJsZV9tYXRlcmlhbCA/IDAgOiAxKTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0 X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZWQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0 ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5f Y29zdDsKIH0KQEAgLTMyNzEsNyArMzM1OSw3IEBAIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFubmVy SW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKLQkJCQkJICBKb2luVHlw ZSBqb2ludHlwZSwKKwkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9tYXNr LAogCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCSAgSm9p blBhdGhFeHRyYURhdGEgKmV4dHJhKQogewpAQCAtMzI4NSw3ICszMzczLDcgQEAgaW5pdGlhbF9j b3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3Nw YWNlLAogCUNvc3QJCWlubmVyX3Jlc2Nhbl9ydW5fY29zdDsKIAogCS8qIENvdW50IHVwIGRpc2Fi bGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVzID0gZW5hYmxlX25lc3Rsb29wID8gMCA6IDE7 CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVu YWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJs ZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7 CiAKQEAgLTM2ODUsNyArMzc3MywxOSBAQCBpbml0aWFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJ bmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCUFzc2VydChvdXRlcnN0 YXJ0c2VsIDw9IG91dGVyZW5kc2VsKTsKIAlBc3NlcnQoaW5uZXJzdGFydHNlbCA8PSBpbm5lcmVu ZHNlbCk7CiAKLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9tZXJnZWpvaW4gPyAwIDogMTsKKwkv KgorCSAqIFdlIGRvbid0IGRlY2lkZSB3aGV0aGVyIHRvIG1hdGVyaWFsaXplIHRoZSBpbm5lciBw YXRoIHVudGlsIHdlIGdldCB0bworCSAqIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCksIHNvIHdlIGRv bid0IGtub3cgd2hldGhlciB0byBjaGVjayB0aGUgcGdzX21hc2sKKwkgKiBhZ2FpbiBQR1NfTUVS R0VKT0lOX1BMQUlOIG9yIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUuIEluc3RlYWQsIHdlCisJ ICoganVzdCBhY2NvdW50IGZvciBhbnkgY2hpbGQgbm9kZXMgaGVyZSBhbmQgYXNzdW1lIHRoYXQg dGhpcyBub2RlIGlzIG5vdAorCSAqIGl0c2xlZiBkaXNhYmxlZDsgd2UgY2FuIHNvcnQgb3V0IHRo ZSBkZXRhaWxzIGluIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCkuCisJICoKKwkgKiAoV2UgY291bGQg YmUgbW9yZSBwcmVjaXNlIGhlcmUgYnkgc2V0dGluZyBkaXNhYmxlZF9ub2RlcyB0byAxIGF0IHRo aXMKKwkgKiBzdGFnZSBpZiBib3RoIFBHU19NRVJHRUpPSU5fUExBSU4gYW5kIFBHU19NRVJHRUpP SU5fTUFURVJJQUxJWkUgYXJlCisJICogZGlzYWJsZWQsIGJ1dCB0aGF0IHNlZW1zIHRvIGFnYWlu c3QgdGhlIGlkZWEgb2YgbWFraW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBwcm9kdWNlIGEgcXVpY2ss IG9wdGltaXN0aWMgYXBwcm94aW1hdGlvbiBvZiB0aGUgZmluYWwgY29zdC4pCisJICovCisJZGlz YWJsZWRfbm9kZXMgPSAwOwogCiAJLyogY29zdCBvZiBzb3VyY2UgZGF0YSAqLwogCkBAIC0zODY0 LDkgKzM5NjQsNyBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVy Z2VQYXRoICpwYXRoLAogCWRvdWJsZQkJbWVyZ2Vqb2ludHVwbGVzLAogCQkJCXJlc2Nhbm5lZHR1 cGxlczsKIAlkb3VibGUJCXJlc2NhbnJhdGlvOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2YgZGlz YWJsZWQgbm9kZXMuICovCi0JcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtz cGFjZS0+ZGlzYWJsZWRfbm9kZXM7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBQ cm90ZWN0IHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cgdGhhdCByb3djb3VudHMgYXJlbid0IHplcm8g Ki8KIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCkBAIC0zOTk2LDE2ICs0MDk0LDIwIEBAIGZp bmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJ CXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKIAkvKgotCSAqIFByZWZlciBtYXRl cmlhbGl6aW5nIGlmIGl0IGxvb2tzIGNoZWFwZXIsIHVubGVzcyB0aGUgdXNlciBoYXMgYXNrZWQg dG8KLQkgKiBzdXBwcmVzcyBtYXRlcmlhbGl6YXRpb24uCisJICogSWYgbWVyZ2Ugam9pbnMgd2l0 aCBtYXRlcmlhbGl6YXRpb24gYXJlIGVuYWJsZWQsIHRoZW4gY2hvb3NlCisJICogbWF0ZXJpYWxp emF0aW9uIGlmIGVpdGhlciAoYSkgaXQgbG9va3MgY2hlYXBlciBvciAoYikgbWVyZ2Ugam9pbnMK KwkgKiB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBhcmUgZGlzYWJsZWQuCiAJICovCi0JZWxzZSBp ZiAoZW5hYmxlX21hdGVyaWFsICYmIG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0KQor CWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKSAh PSAwICYmCisJCQkgKG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0IHx8CisJCQkgIChl eHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX1BMQUlOKSA9PSAwKSkKIAkJcGF0aC0+bWF0 ZXJpYWxpemVfaW5uZXIgPSB0cnVlOwogCiAJLyoKLQkgKiBFdmVuIGlmIG1hdGVyaWFsaXppbmcg ZG9lc24ndCBsb29rIGNoZWFwZXIsIHdlICptdXN0KiBkbyBpdCBpZiB0aGUKLQkgKiBpbm5lciBw YXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgc29ydGluZykgYW5kIGl0IGRvZXNu J3QKLQkgKiBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkgKiBSZWdhcmRsZXNzIG9mIHdoYXQgcGxh biBzaGFwZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIGNvc3RzIHNlZW0gdG8KKwkgKiBiZSwg d2UgKm11c3QqIG1hdGVyaWFsaXplIGl0IGlmIHRoZSBpbm5lciBwYXRoIGlzIHRvIGJlIHVzZWQg ZGlyZWN0bHkKKwkgKiAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndCBzdXBwb3J0IG1h cmsvcmVzdG9yZS4gUGxhbm5lciBmYWlsdXJlCisJICogaXMgbm90IGFuIG9wdGlvbiEKIAkgKgog CSAqIFNpbmNlIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgb3JkZXJlZCwgYW5kIG9ubHkgU29ydHMg YW5kIEluZGV4U2NhbnMgY2FuCiAJICogY3JlYXRlIG9yZGVyIHRvIGJlZ2luIHdpdGgsIGFuZCB0 aGV5IGJvdGggc3VwcG9ydCBtYXJrL3Jlc3RvcmUsIHlvdQpAQCAtNDAxMywxMCArNDExNSw2IEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJICogbWVyZ2Ugam9pbnMgY2FuICpwcmVzZXJ2ZSogdGhlIG9yZGVyIG9mIHRoZWlyIGlucHV0 cywgc28gdGhleSBjYW4gYmUKIAkgKiBzZWxlY3RlZCBhcyB0aGUgaW5wdXQgb2YgYSBtZXJnZWpv aW4sIGFuZCB0aGV5IGRvbid0IHN1cHBvcnQKIAkgKiBtYXJrL3Jlc3RvcmUgYXQgcHJlc2VudC4K LQkgKgotCSAqIFdlIGRvbid0IHRlc3QgdGhlIHZhbHVlIG9mIGVuYWJsZV9tYXRlcmlhbCBoZXJl LCBiZWNhdXNlCi0JICogbWF0ZXJpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVz cyBpbiB0aGlzIGNhc2UsIGFuZCB0dXJuaW5nCi0JICogaXQgb2ZmIGRvZXMgbm90IGVudGl0bGUg dXMgdG8gZGVsaXZlciBhbiBpbnZhbGlkIHBsYW4uCiAJICovCiAJZWxzZSBpZiAoaW5uZXJzb3J0 a2V5cyA9PSBOSUwgJiYKIAkJCSAhRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoaW5uZXJfcGF0aCkp CkBAIC00MDMwLDEwICs0MTI4LDExIEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZv ICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICogdGhvdWdoLgogCSAqCiAJICogU2luY2UgbWF0 ZXJpYWxpemF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoaXMgY2FzZSwK LQkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlm IGVuYWJsZV9tYXRlcmlhbCBpcwotCSAqIG9mZi4KKwkgKiByYXRoZXIgdGhhbiBuZWNlc3Nhcnkg Zm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlmIG1hdGVyaWFsaXphdGlvbiBpcworCSAqIHN3 aXRjaGVkIG9mZi4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJzb3J0 a2V5cyAhPSBOSUwgJiYKKwllbHNlIGlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX01FUkdFSk9J Tl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIGlubmVyc29ydGtleXMgIT0gTklMICYmCiAJCQkg cmVsYXRpb25fYnl0ZV9zaXplKGlubmVyX3BhdGhfcm93cywKIAkJCQkJCQkJaW5uZXJfcGF0aC0+ cGF0aHRhcmdldC0+d2lkdGgpID4KIAkJCSB3b3JrX21lbSAqIChTaXplKSAxMDI0KQpAQCAtNDA0 MSwxMSArNDE0MCwyOSBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VQYXRoICpwYXRoLAogCWVsc2UKIAkJcGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSBmYWxz ZTsKIAotCS8qIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29zdCBmb3IgdGhlIGNob3Nl biBjYXNlICovCisJLyogR2V0IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMsIG5vdCB5ZXQg aW5jbHVkaW5nIHRoaXMgb25lLiAqLworCXBhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9kZXMg PSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOworCisJLyoKKwkgKiBDaGFyZ2UgdGhlIHJpZ2h0 IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSwgYW5kIHVwZGF0ZQorCSAqIGVu YWJsZV9tYXNrIGFzIGFwcHJvcHJpYXRlLgorCSAqLwogCWlmIChwYXRoLT5tYXRlcmlhbGl6ZV9p bm5lcikKKwl7CiAJCXJ1bl9jb3N0ICs9IG1hdF9pbm5lcl9jb3N0OworCQllbmFibGVfbWFzayB8 PSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCX0KIAllbHNlCisJewogCQlydW5fY29zdCAr PSBiYXJlX2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExBSU47 CisJfQorCisJLyogSW5jcmVtZW50YWwgY291bnQgb2YgZGlzYWJsZWQgbm9kZXMgaWYgdGhpcyBu b2RlIGlzIGRpc2FibGVkLiAqLworCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dvcmtl cnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJaWYg KChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spCisJCSsrcGF0 aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlczsKIAogCS8qIENQVSBjb3N0cyAqLwogCkBAIC00 MTgzLDkgKzQzMDAsMTMgQEAgaW5pdGlhbF9jb3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpyb290 LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCWludAkJCW51bWJhdGNoZXM7CiAJaW50 CQkJbnVtX3NrZXdfbWN2czsKIAlzaXplX3QJCXNwYWNlX2FsbG93ZWQ7CS8qIHVudXNlZCAqLwor CXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfSEFTSEpPSU47CisKKwlpZiAob3V0ZXJfcGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKIAogCS8qIENvdW50IHVwIGRpc2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25v ZGVzID0gZW5hYmxlX2hhc2hqb2luID8gMCA6IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEt PnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJs ZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMg Kz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jCmluZGV4IGVkYzZkMmFjMWQzLi5hNzAxYzg0N2NiNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0yMjMzLDggKzIyMzMsOCBAQCBjaGVja19pbmRleF9v bmx5KFJlbE9wdEluZm8gKnJlbCwgSW5kZXhPcHRJbmZvICppbmRleCkKIAlMaXN0Q2VsbCAgICps YzsKIAlpbnQJCQlpOwogCi0JLyogSW5kZXgtb25seSBzY2FucyBtdXN0IGJlIGVuYWJsZWQgKi8K LQlpZiAoIWVuYWJsZV9pbmRleG9ubHlzY2FuKQorCS8qIElmIHdlJ3JlIG5vdCBhbGxvd2VkIHRv IGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGdpdmUgdXAgbm93ICovCisJaWYgKChyZWwtPnBn c19tYXNrICYgUEdTX0NPTlNJREVSX0lOREVYT05MWSkgPT0gMCkKIAkJcmV0dXJuIGZhbHNlOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGVhNWI2NDE1MTg2 Li4zODhkODQ1NmZmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9p bnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0y OSw4ICsyOSw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvdHlwY2FjaGUuaCIKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBh ZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCiBzZXRfam9pbl9wYXRobGlzdF9ob29r X3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9IE5VTEw7Citqb2luX3BhdGhfc2V0dXBfaG9v a190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29rID0gTlVMTDsKIAogLyoKICAqIFBhdGhzIHBhcmFt ZXRlcml6ZWQgYnkgYSBwYXJlbnQgcmVsIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHBhcmFtZXRl cml6ZWQKQEAgLTE1MSw2ICsxNTIsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5m byAqcm9vdCwKIAlleHRyYS5tZXJnZWNsYXVzZV9saXN0ID0gTklMOwogCWV4dHJhLnNqaW5mbyA9 IHNqaW5mbzsKIAlleHRyYS5wYXJhbV9zb3VyY2VfcmVscyA9IE5VTEw7CisJZXh0cmEucGdzX21h c2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBpbm5lciByZWxh dGlvbiBpcyBwcm92YWJseSB1bmlxdWUgZm9yIHRoaXMgb3V0ZXIgcmVsLgpAQCAtMjA3LDEzICsy MDksMzggQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJaWYgKGpv aW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lO TkVSKQogCQlqb2ludHlwZSA9IEpPSU5fSU5ORVI7CiAKKwkvKgorCSAqIEdpdmUgZXh0ZW5zaW9u cyBhIGNoYW5jZSB0byB0YWtlIGNvbnRyb2wuIEluIHBhcnRpY3VsYXIsIGFuIGV4dGVuc2lvbgor CSAqIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGV4dHJhLnBnc19tYXNrLiBJdCdzIHBvc3NpYmxlIHRv IG92ZXJyaWRlIHBnc19tYXNrCisJICogb24gYSBxdWVyeS13aWRlIGJhc2lzIHVzaW5nIGpvaW5f c2VhcmNoX2hvb2ssIG9yIGZvciBhIHBhcnRpY3VsYXIKKwkgKiByZWxhdGlvbiB1c2luZyBqb2lu cmVsX3NldHVwX2hvb2ssIGJ1dCBleHRlbnNpb25zIHRoYXQgd2FudCB0byBwcm92aWRlCisJICog ZGlmZmVyZW50IGFkdmljZSBmb3IgdGhlIHNhbWUgam9pbnJlbCBiYXNlZCBvbiB0aGUgY2hvaWNl IG9mIGlubmVycmVsCisJICogYW5kIG91dGVycmVsIHdpbGwgbmVlZCB0byB1c2UgdGhpcyBob29r LgorCSAqCisJICogQSB2ZXJ5IHNpbXBsZSB3YXkgZm9yIGFuIGV4dGVuc2lvbiB0byB1c2UgdGhp cyBob29rIGlzIHRvIHNldAorCSAqIGV4dHJhLnBnc19tYXNrID0gMCwgaWYgaXQgc2ltcGx5IGRv ZXNuJ3Qgd2FudCBhbnkgb2YgdGhlIHBhdGhzCisJICogZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbCB0 byBhZGRfcGF0aHNfdG9fam9pbnJlbCgpIHRvIGJlIHNlbGVjdGVkLiBBbgorCSAqIGV4dGVuc2lv biBjb3VsZCB1c2UgdGhpcyB0ZWNobmlxdWUgdG8gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLCBz aW5jZQorCSAqIGl0IGNvdWxkIHRoZXJlYnkgYXJyYW5nZSB0byByZWplY3QgYWxsIHBhdGhzIGZy b20gam9pbiBvcmRlcnMgdGhhdCBpdAorCSAqIGRvZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lvbiBj YW4gYWxzbyBzZWxlY3RpdmVseSBjbGVhciBiaXRzIGZyb20KKwkgKiBleHRyYS5wZ3NfbWFzayB0 byBydWxlIG91dCBzcGVjaWZpYyB0ZWNobmlxdWVzIGZvciBzcGVjaWZpYyBqb2lucywgb3IKKwkg KiBldmVuIHJlcGxhY2UgdGhlIG1hc2sgZW50aXJlbHkuCisJICoKKwkgKiBOQjogQmVsb3cgdGhp cyBwb2ludCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FyZWZ1bCB0byByZWZlcmVuY2UKKwkg KiBleHRyYS5wZ3NfbWFzayByYXRoZXIgdGhhbiByZWwtPnBnc19tYXNrIHRvIGF2b2lkIGRpc3Jl Z2FyZGluZyBhbnkKKwkgKiBjaGFuZ2VzIG1hZGUgYnkgdGhlIGhvb2sgd2UncmUgYWJvdXQgdG8g Y2FsbC4KKwkgKi8KKwlpZiAoam9pbl9wYXRoX3NldHVwX2hvb2spCisJCWpvaW5fcGF0aF9zZXR1 cF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgam9pbnR5 cGUsICZleHRyYSk7CisKIAkvKgogCSAqIEZpbmQgcG90ZW50aWFsIG1lcmdlam9pbiBjbGF1c2Vz LiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUgbm90CiAJICogaW50ZXJlc3RlZCBpbiBkb2lu ZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdlam9pbiBtYXkgYmUgb3VyIG9ubHkKLQkgKiB3 YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBvdmVycmlkZSBlbmFibGVf bWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwgam9pbi4KKwkgKiB3YXkgb2YgaW1wbGVtZW50 aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3QgY2FyZQorCSAq IHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJsZWQuCiAJICovCi0JaWYgKGVuYWJsZV9tZXJn ZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEucGdzX21hc2sgJiBQ R1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWV4dHJh Lm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMocm9vdCwKIAkJCQkJ CQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJCQkJCQkgIG91dGVycmVsLApAQCAtMzIxLDEw ICszNDgsMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkv KgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJlIGJvdGggb3V0ZXIgYW5kIGlubmVyIHJlbGF0 aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9yZSBiZWluZyBqb2luZWQuICBBcyBhYm92ZSwg ZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3IgZnVsbAotCSAqIGpvaW5zLCBiZWNhdXNlIHRo ZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2ZS4KKwkgKiBiZWZvcmUgYmVpbmcgam9pbmVk LiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwgam9pbiwgd2UgbXVzdCB0cnkgdGhpcworCSAq IGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRpc2FibGVkLCBiZWNhdXNlIGl0IG1heSBiZSBv dXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVuYWJsZV9oYXNoam9pbiB8fCBqb2ludHlwZSA9 PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19IQVNISk9JTikgIT0gMCB8 fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhhc2hfaW5uZXJfYW5kX291dGVyKHJvb3QsIGpv aW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkgam9pbnR5cGUsICZleHRyYSk7CiAK QEAgLTMzMyw3ICszNjAsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9v dCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5kIGFzc2lnbmVkIHRvIHRoZSBzYW1lIHVzZXIg dG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lvbnMgYXMsIGdpdmUgdGhlIEZEVyBhIGNoYW5j ZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0JaWYgKGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYK KwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZPUkVJR05KT0lOKSAhPSAwICYmIGpvaW5yZWwt PmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRo cykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRocyhyb290LCBqb2lu cmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTM0Miw4ICszNjksMTMg QEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJLyoKIAkgKiA2LiBG aW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gbWFuaXB1bGF0ZSB0aGUgcGF0aCBs aXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMgQ3VzdG9tUGF0aHMp IGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkgKiBhZGRfcGFydGlhbF9wYXRoKCkgaWYgcGFy YWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28gZGVsZXRlIG9yIG1vZGlmeQotCSAqIHBhdGhz IGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICogYWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBhcmFs bGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5LCBleHRlbnNpb25zIGNvdWxkIGFsc28gdXNl IHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5CisJICogcGF0aHMgYWRkZWQgYnkgdGhlIGNv cmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgZGlmZmljdWx0IHRvIG1ha2UKKwkgKiB3 b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdldCBiYWNrIGFueSBwYXRocyB0aGF0IGhhdmUg YWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5IGFkZF9wYXRoKCkgb3IgYWRkX3BhcnRpYWxf cGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJICogc3VwcHJlc3MgcGF0aHMsIGNvbnNpZGVy IHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGluc3RlYWQuCiAJICovCiAJaWYgKHNldF9qb2lu X3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3BhdGhsaXN0X2hvb2socm9vdCwgam9pbnJlbCwg b3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjkwLDcgKzcyMiw3IEBAIGdldF9tZW1vaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxpc3QJICAgKnBoX2xh dGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNhYmxlZCAqLwotCWlm ICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTkVTVExPT1Bf TUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtODQ1LDYgKzg3Nyw3IEBA IHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAgUGF0aCAqaW5uZXJf cGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJ CQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpl eHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291dGVyOwpAQCAtOTI3LDYgKzk2MCw3IEBAIHRy eV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG1ldGhvZG9sb2d5IHdvcnRo d2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpv aW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0eXBlIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJ QUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsKIAogCWlmIChhZGRf cGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCkBAIC05NjQs NiArOTk4LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCSAgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwK IAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCUpvaW5Db3N0V29ya3NwYWNl IHdvcmtzcGFjZTsKQEAgLTEwMTEsNyArMTA0Niw3IEBAIHRyeV9wYXJ0aWFsX25lc3Rsb29wX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVmb3JlIGNyZWF0aW5nIGEgcGF0aCwgZ2V0IGEg cXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBpcyBsaWtlbHkgdG8KIAkgKiBjb3N0LiAgQmFp bCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0ZXJyaWJsZS4KIAkgKi8KLQlpbml0aWFsX2Nv c3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsCisJaW5pdGlhbF9jb3N0X25l c3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLCBuZXN0bG9vcF9zdWJ0eXBlLAogCQkJ CQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRyYSk7CiAJaWYgKCFhZGRfcGFydGlhbF9w YXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2RlcywKIAkJCQkJCQkJ ICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKQEAgLTE4NTksMTQgKzE4OTQsMTQg QEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJaWYgKG5lc3Rqb2lu T0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiBvciB0aGUgcGF0 aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzCi0JCSAqIG91dHB1dCBhbnl3YXkuCisJCSAq IENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlubmVyIHBhdGgsIHVubGVzcyB0 aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9uIG1hdGVyaWFsaXpl cyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0JCWlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5u ZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgorCQlpZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBH U19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJaW5uZXJfY2hlYXBlc3RfdG90YWwg IT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJfY2hlYXBlc3RfdG90 YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJCWNyZWF0ZV9tYXRlcmlh bF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQkJY3JlYXRlX21hdGVy aWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsLCB0cnVlKTsKIAl9CiAKIAlm b3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0KQpAQCAtMTkwOSw2ICsxOTQ0LDcgQEAgbWF0 Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgaW5uZXJwYXRo LAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50eXBlLAorCQkJCQkJ CQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJCQkJICBleHRyYSk7CiAKIAkJCQkvKgpAQCAt MTkyNSw2ICsxOTYxLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJICBtZXJnZV9wYXRoa2V5cywKIAkJCQkJCQkJ CSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLAogCQkJCQkJCQkJ ICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzYsNiArMTk3Myw3IEBAIG1hdGNoX3Vuc29ydGVkX291 dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIG1hdHBhdGgsCiAJCQkJCQkJCSAgbWVy Z2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCSAgUEdTX05FU1RMT09Q X01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJhKTsKIAkJfQogCkBAIC0yMDUyLDE2ICsyMDkw LDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAogCiAJ LyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1 bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiwgMikgdGhlIGNoZWFwZXN0IGlu bmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxpemF0aW9uIGlzIGRpc2FibGVkIGhlcmUsIDIp IHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAogCSAqIHBhcmFsbGVsLXNhZmUsIDMpIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQgYnkgdGhlIG91dGVyCiAJICog cmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1 dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5lcl9jaGVhcGVzdF90 b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX05FU1RM T09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXJhbGxl bF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9jaGVhcGVzdF90b3RhbCwgb3V0 ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVzT3V0cHV0KGlubmVyX2NoZWFwZXN0X3RvdGFs LT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0gKFBhdGggKikKLQkJCWNyZWF0ZV9tYXRlcmlh bF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQljcmVhdGVfbWF0ZXJp YWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUpOwogCQlBc3NlcnQo bWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQogCkBAIC0yMDkxLDcgKzIxMzAsOCBAQCBjb25z aWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQljb250aW51ZTsK IAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgs IGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJ CQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX1BMQUlO LCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkgZ2VuZXJhdGluZyBhIG1lbW9pemUgcGF0aCBh bmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3RlZApAQCAtMjEwMiwxMyArMjE0MiwxNSBAQCBj b25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBl eHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkKIAkJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9w YXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbXBhdGgsCi0JCQkJCQkJCQkJICBwYXRoa2V5 cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJ CQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLCBleHRyYSk7CiAJCX0KIAogCQkvKiBBbHNv IGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9mIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoICov CiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKHJv b3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpv aW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJ CSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBleHRyYSk7CiAJfQogfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggMmJmYjMzOGI4MWMuLjYzOWEwZDNjYWRiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCkBAIC01MDAsMTggKzUwMCwxOSBAQCBjcmVh dGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCUxp c3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRpZHJhbmdlcXVhbHM7CiAJYm9vbAkJaXNDdXJy ZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwtPnBnc19tYXNrICYgUEdTX1RJRFNDQU4pICE9 IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJsZSBxdWFscyBleGlzdCBpbiB0aGUgcmVsJ3Mg YmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEKIAkgKiBwbGFpbiAodW5wYXJhbWV0ZXJpemVk KSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAqIFdlIHNraXAgdGhpcyB3aGVuIGVuYWJsZV90 aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCisJICogV2Ugc2tpcCB0aGlz IHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwgZXhjZXB0IHdoZW4gdGhlIHF1YWwgaXMKIAkg KiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2UsIGEgVElEIHNjYW4gaXMgdGhlIG9ubHkgY29y cmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0gVGlkUXVhbEZyb21SZXN0cmljdEluZm9MaXN0 KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgcmVsLAogCQkJCQkJCQkJCSAgICZpc0N1cnJl bnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVfdGlkc2NhbiB8fCBpc0N1 cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5JTCAmJiAoZW5hYmxlZCB8fCBpc0N1cnJlbnRP ZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGggdXNlcyBubyBqb2luIGNsYXVzZXMsIGJ1dCBp dCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBAIC01MzMsNyArNTM0LDcgQEAgY3JlYXRlX3Rp ZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAl9CiAKIAkv KiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQuICovCi0JaWYgKCFlbmFi bGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggODhiNGM1OTAxYjAuLmY0N2Y5 YWFiNDdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC02NTI2 LDYgKzY1MjYsNyBAQCBtYXRlcmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiAK IAkvKiBTZXQgY29zdCBkYXRhICovCiAJY29zdF9tYXRlcmlhbCgmbWF0cGF0aCwKKwkJCQkgIGVu YWJsZV9tYXRlcmlhbCwKIAkJCQkgIHN1YnBsYW4tPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3Vi cGxhbi0+c3RhcnR1cF9jb3N0LAogCQkJCSAgc3VicGxhbi0+dG90YWxfY29zdCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA4YjFhYjg0N2YzOS4uZTI2ODNiMjQ4MWYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTQ2Miw2ICs0NjIsNTMgQEAgc3Rh bmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50 IGN1cnNvck9wdGlvbnMsCiAJCXR1cGxlX2ZyYWN0aW9uID0gMC4wOwogCX0KIAorCS8qCisJICog Q29tcHV0ZSB0aGUgaW5pdGlhbCBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4KKwkgKgor CSAqIFNvbWUgc3RyYXRlZ2llcywgc3VjaCBhcyBQR1NfRk9SRUlHTkpPSU4sIGhhdmUgbm8gY29y cmVzcG9uZGluZyBlbmFibGVfKgorCSAqIEdVQywgYW5kIHNvIHRoZSBjb3JyZXNwb25kaW5nIGJp dHMgYXJlIGFsd2F5cyBzZXQgaW4gdGhlIGRlZmF1bHQKKwkgKiBzdHJhdGVneSBtYXNrLgorCSAq CisJICogSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0aGF0IGVuYWJsZV9pbmRleHNjYW4gc2V0cyBi b3RoIFBHU19JTkRFWFNDQU4KKwkgKiBhbmQgUEdTX0lOREVYT05MWVNDQU4uIEhvd2V2ZXIsIHRo ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIHRoaXMgR1VDCisJICogY29ycmVzcG9uZHMgdG8gdGhp cyBleGFjdGx5OiBlbmFibGVfaW5kZXhzY2FuPW9mZiBkaXNhYmxlcyBib3RoCisJICogaW5kZXgt c2NhbiBhbmQgaW5kZXgtb25seSBzY2FuIHBhdGhzLCB3aGVyZWFzIGVuYWJsZV9pbmRleG9ubHlz Y2FuPW9mZgorCSAqIGNvbnZlcnRzIHRoZSBpbmRleC1vbmx5IHNjYW4gcGF0aHMgdGhhdCB3ZSB3 b3VsZCBoYXZlIGNvbnNpZGVyZWQgaW50bworCSAqIGluZGV4IHNjYW4gcGF0aHMuCisJICovCisJ Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EIHwg UEdTX0ZPUkVJR05KT0lOIHwKKwkJUEdTX0dBVEhFUiB8IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCWlmIChlbmFibGVfdGlkc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1Nf VElEU0NBTjsKKwlpZiAoZW5hYmxlX3NlcXNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sg fD0gUEdTX1NFUVNDQU47CisJaWYgKGVuYWJsZV9pbmRleHNjYW4pCisJCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgfD0gUEdTX0lOREVYU0NBTiB8IFBHU19JTkRFWE9OTFlTQ0FOOworCWlmIChlbmFi bGVfaW5kZXhvbmx5c2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfQ09OU0lE RVJfSU5ERVhPTkxZOworCWlmIChlbmFibGVfYml0bWFwc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9w Z3NfbWFzayB8PSBQR1NfQklUTUFQU0NBTjsKKwlpZiAoZW5hYmxlX21lcmdlam9pbikKKwl7CisJ CWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJaWYgKGVu YWJsZV9tYXRlcmlhbCkKKwkJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX01FUkdFSk9J Tl9NQVRFUklBTElaRTsKKwl9CisJaWYgKGVuYWJsZV9uZXN0bG9vcCkKKwl7CisJCWdsb2ItPmRl ZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX1BMQUlOOworCQlpZiAoZW5hYmxlX21hdGVy aWFsKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTkVTVExPT1BfTUFURVJJQUxJ WkU7CisJCWlmIChlbmFibGVfbWVtb2l6ZSkKKwkJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0g UEdTX05FU1RMT09QX01FTU9JWkU7CisJfQorCWlmIChlbmFibGVfaGFzaGpvaW4pCisJCWdsb2It PmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0hBU0hKT0lOOworCWlmIChlbmFibGVfZ2F0aGVybWVy Z2UpCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0dBVEhFUl9NRVJHRTsKKwlpZiAo ZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQ R1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRTsKKwogCS8qIEFsbG93IHBsdWdpbnMgdG8gdGFrZSBj b250cm9sIGFmdGVyIHdlJ3ZlIGluaXRpYWxpemVkICJnbG9iIiAqLwogCWlmIChwbGFubmVyX3Nl dHVwX2hvb2spCiAJCSgqcGxhbm5lcl9zZXR1cF9ob29rKSAoZ2xvYiwgcGFyc2UsIHF1ZXJ5X3N0 cmluZywgJnR1cGxlX2ZyYWN0aW9uLCBlcyk7CkBAIC0zOTU0LDYgKzQwMDEsOSBAQCBtYWtlX2dy b3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQlp c19wYXJhbGxlbF9zYWZlKHJvb3QsIChOb2RlICopIGhhdmluZ1F1YWwpKQogCQlncm91cGVkX3Jl bC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJLyogQXNzdW1lIHRoYXQgdGhlIHNhbWUg cGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJlIGFsbG93ZWQgKi8KKwlncm91cGVkX3JlbC0+ cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBnc19tYXNrOworCiAJLyoKIAkgKiBJZiB0aGUgaW5wdXQg cmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUgRkRXLCBzbyBkb2VzIHRoZSBncm91cGVkIHJlbC4KIAkg Ki8KQEAgLTUzNDgsNiArNTM5OCw5IEBAIGNyZWF0ZV9vcmRlcmVkX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LAogCWlmIChpbnB1dF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmIHRhcmdldF9wYXJh bGxlbF9zYWZlKQogCQlvcmRlcmVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJ LyogQXNzdW1lIHRoYXQgdGhlIHNhbWUgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJlIGFs bG93ZWQuICovCisJb3JkZXJlZF9yZWwtPnBnc19tYXNrID0gaW5wdXRfcmVsLT5wZ3NfbWFzazsK KwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xlIEZEVywgc28g ZG9lcyB0aGUgb3JkZXJlZF9yZWwuCiAJICovCkBAIC03NDI4LDYgKzc0ODEsNyBAQCBjcmVhdGVf cGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJZ3Jv dXBlZF9yZWwtPnJlbGlkcyk7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJh bGxlbCA9CiAJCWdyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKKwlwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnBnc19tYXNrID0gZ3JvdXBlZF9yZWwtPnBnc19tYXNrOwogCXBhcnRpYWxseV9n cm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdyb3VwZWRfcmVsLT5yZWxvcHRraW5kOwogCXBhcnRp YWxseV9ncm91cGVkX3JlbC0+c2VydmVyaWQgPSBncm91cGVkX3JlbC0+c2VydmVyaWQ7CiAJcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT51c2VyaWQgPSBncm91cGVkX3JlbC0+dXNlcmlkOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggYzBhOTgxMWIxMzAuLmViNTdmMDUzOGJh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTE2NTgsNyArMTY1OCw3 IEBAIGNyZWF0ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogICoJICBwYXRobm9kZS4KICAqLwogTWF0ZXJpYWxQYXRoICoKLWNyZWF0ZV9tYXRl cmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCkKK2NyZWF0ZV9tYXRlcmlh bF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwgYm9vbCBlbmFibGVkKQogewog CU1hdGVyaWFsUGF0aCAqcGF0aG5vZGUgPSBtYWtlTm9kZShNYXRlcmlhbFBhdGgpOwogCkBAIC0x Njc3LDYgKzE2NzcsNyBAQCBjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBh dGggKnN1YnBhdGgpCiAJcGF0aG5vZGUtPnN1YnBhdGggPSBzdWJwYXRoOwogCiAJY29zdF9tYXRl cmlhbCgmcGF0aG5vZGUtPnBhdGgsCisJCQkJICBlbmFibGVkLAogCQkJCSAgc3VicGF0aC0+ZGlz YWJsZWRfbm9kZXMsCiAJCQkJICBzdWJwYXRoLT5zdGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwYXRo LT50b3RhbF9jb3N0LApAQCAtMTcyOSw4ICsxNzMwLDE1IEBAIGNyZWF0ZV9tZW1vaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwKIAlwYXRo bm9kZS0+ZXN0X3VuaXF1ZV9rZXlzID0gMC4wOwogCXBhdGhub2RlLT5lc3RfaGl0X3JhdGlvID0g MC4wOwogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVu YWJsZV9tZW1vaXplPWZhbHNlICovCi0JQXNzZXJ0KGVuYWJsZV9tZW1vaXplKTsKKwkvKgorCSAq IFdlIHNob3VsZCBub3QgYmUgYXNrZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBt ZW1vaXphdGlvbiBpcworCSAqIGRpc2FibGVkLCBzbyBzZXQgb3VyIGNvdW50IG9mIGRpc2FibGVk IG5vZGVzIGVxdWFsIHRvIHRoZSBzdWJwYXRoJ3MKKwkgKiBjb3VudC4KKwkgKgorCSAqIEl0IHdv dWxkIGJlIG5pY2UgdG8gYWxzbyBBc3NlcnQgdGhhdCBtZW1vaXphdGlvbiBpcyBlbmFibGVkLCBi dXQgdGhlCisJICogdmFsdWUgb2YgZW5hYmxlX21lbW9pemUgaXMgbm90IGNvbnRyb2xsaW5nOiB3 aGF0IHdlIHdvdWxkIG5lZWQgdG8gY2hlY2sKKwkgKiBpcyB0aGF0IHRoZSBKb2luUGF0aEV4dHJh RGF0YSdzIHBnc19tYXNrIGluY2x1ZGVkIFBHU19ORVNUTE9PUF9NRU1PSVpFLgorCSAqLwogCXBh dGhub2RlLT5wYXRoLmRpc2FibGVkX25vZGVzID0gc3VicGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAK IAkvKgpAQCAtMzk2NCwxMyArMzk3MiwxNiBAQCByZXBhcmFtZXRlcml6ZV9wYXRoKFBsYW5uZXJJ bmZvICpyb290LCBQYXRoICpwYXRoLAogCQkJewogCQkJCU1hdGVyaWFsUGF0aCAqbXBhdGggPSAo TWF0ZXJpYWxQYXRoICopIHBhdGg7CiAJCQkJUGF0aAkgICAqc3BhdGggPSBtcGF0aC0+c3VicGF0 aDsKKwkJCQlib29sCQllbmFibGVkOwogCiAJCQkJc3BhdGggPSByZXBhcmFtZXRlcml6ZV9wYXRo KHJvb3QsIHNwYXRoLAogCQkJCQkJCQkJCQlyZXF1aXJlZF9vdXRlciwKIAkJCQkJCQkJCQkJbG9v cF9jb3VudCk7CisJCQkJZW5hYmxlZCA9CisJCQkJCShtcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2Rl cyA8PSBzcGF0aC0+ZGlzYWJsZWRfbm9kZXMpOwogCQkJCWlmIChzcGF0aCA9PSBOVUxMKQogCQkJ CQlyZXR1cm4gTlVMTDsKLQkJCQlyZXR1cm4gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgo cmVsLCBzcGF0aCk7CisJCQkJcmV0dXJuIChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJl bCwgc3BhdGgsIGVuYWJsZWQpOwogCQkJfQogCQljYXNlIFRfTWVtb2l6ZToKIAkJCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBkOTUwYmQ5MzAwMi4uZmZkN2JiM2IyMjEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTU1Nyw2ICs1NTcsOSBAQCBn ZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs IGJvb2wgaW5ocGFyZW50LAogCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0 aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9tIHRoZQogCSAqIGNhdGFsb2dzLiAgQWN0aW9ucyBtaWdo dCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBhc3N1bWVkIHJlbGF0aW9uIHNpemUsCiAJICogcmVtb3Zp bmcgYW4gaW5kZXgsIG9yIGFkZGluZyBhIGh5cG90aGV0aWNhbCBpbmRleCB0byB0aGUgaW5kZXhs aXN0LgorCSAqCisJICogQW4gZXh0ZW5zaW9uIGNhbiBhbHNvIG1vZGlmeSByZWwtPnBnc19tYXNr IGhlcmUgdG8gY29udHJvbCBwYXRoCisJICogZ2VuZXJhdGlvbi4KIAkgKi8KIAlpZiAoZ2V0X3Jl bGF0aW9uX2luZm9faG9vaykKIAkJKCpnZXRfcmVsYXRpb25faW5mb19ob29rKSAocm9vdCwgcmVs YXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVs bm9kZS5jCmluZGV4IDExNThiYzE5NGMzLi4wMzRkMGM5Yzg3YSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3JlbG5vZGUuYwpAQCAtNDcsNiArNDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBKb2luSGFz aEVudHJ5CiAJUmVsT3B0SW5mbyAqam9pbl9yZWw7CiB9IEpvaW5IYXNoRW50cnk7CiAKKy8qIEhv b2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK2pv aW5yZWxfc2V0dXBfaG9va190eXBlIGpvaW5yZWxfc2V0dXBfaG9vayA9IE5VTEw7CisKIHN0YXRp YyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJU3BlY2lh bEpvaW5JbmZvICpzamluZm8sCkBAIC0yMjUsNiArMjI4LDcgQEAgYnVpbGRfc2ltcGxlX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmVsLT5j b25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAJcmVsLT5jb25z aWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CS8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICov CiAJcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGZhbHNlOyAvKiBtaWdodCBnZXQgY2hhbmdlZCBs YXRlciAqLworCXJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwog CXJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlyZWwtPnBhdGhs aXN0ID0gTklMOwogCXJlbC0+cHBpbGlzdCA9IE5JTDsKQEAgLTgyMiw2ICs4MjYsNyBAQCBidWls ZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAlqb2lucmVsLT5jb25zaWRlcl9zdGFydHVw ID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYW1f c3RhcnR1cCA9IGZhbHNlOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7CisJ am9pbnJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCWpvaW5y ZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CiAJam9pbnJlbC0+cGF0 aGxpc3QgPSBOSUw7CiAJam9pbnJlbC0+cHBpbGlzdCA9IE5JTDsKQEAgLTkzNCwxMCArOTM5LDYg QEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJam9pbnJlbC0+aGFz X2VjbGFzc19qb2lucyA9IGhhc19yZWxldmFudF9lY2xhc3Nfam9pbmNsYXVzZShyb290LCBqb2lu cmVsKTsKIAotCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24uICovCi0JYnVpbGRf am9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3Jl bCwgc2ppbmZvLAotCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKLQogCS8qCiAJICogU2V0IGVzdGlt YXRlcyBvZiB0aGUgam9pbnJlbCdzIHNpemUuCiAJICovCkBAIC05NjMsNiArOTY0LDE4IEBAIGJ1 aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCQlpc19wYXJhbGxlbF9zYWZlKHJvb3Qs IChOb2RlICopIGpvaW5yZWwtPnJlbHRhcmdldC0+ZXhwcnMpKQogCQlqb2lucmVsLT5jb25zaWRl cl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlh bGl6ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQg aW5jbHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSBvciBjbGVhcmluZyBjb25zaWRlcl9w YXJhbGxlbC4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1cF9ob29rKQorCQkoKmpvaW5yZWxfc2V0 dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJ CQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5mb3Jt YXRpb24uICovCisJYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBv dXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwog CS8qIEFkZCB0aGUgam9pbnJlbCB0byB0aGUgUGxhbm5lckluZm8uICovCiAJYWRkX2pvaW5fcmVs KHJvb3QsIGpvaW5yZWwpOwogCkBAIC0xMDE5LDYgKzEwMzIsNyBAQCBidWlsZF9jaGlsZF9qb2lu X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5yZWwt PmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lucmVs LT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFy YWxsZWwgPSBmYWxzZTsKKwlqb2lucmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRf cGdzX21hc2s7CiAJam9pbnJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQo KTsKIAlqb2lucmVsLT5wYXRobGlzdCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklMOwpA QCAtMTEwMiwxMCArMTExNiw2IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFzc19q b2lucyA9IHBhcmVudF9qb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5zOwogCi0JLyogSXMgdGhlIGpv aW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KLQlidWlsZF9qb2lu cmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBz amluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyogQ2hpbGQgam9pbnJlbCBpcyBw YXJhbGxlbCBzYWZlIGlmIHBhcmVudCBpcyBwYXJhbGxlbCBzYWZlLiAqLwogCWpvaW5yZWwtPmNv bnNpZGVyX3BhcmFsbGVsID0gcGFyZW50X2pvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCkBA IC0xMTEzLDYgKzExMjMsMjAgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRlcyhy b290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwKIAkJCQkJCQkgICBzamluZm8sIHJl c3RyaWN0bGlzdCk7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBv biB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5jbHVk ZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSBvciBjbGVhcmluZyBjb25zaWRlcl9wYXJhbGxl bCwKKwkgKiBhbHRob3VnaCB0aGUgbGF0dGVyIHdvdWxkIGJlIGJldHRlciBkb25lIGluIHRoZSBw YXJlbnQgam9pbnJlbCByYXRoZXIKKwkgKiB0aGFuIGhlcmUuCisJICovCisJaWYgKGpvaW5yZWxf c2V0dXBfaG9vaykKKwkJKCpqb2lucmVsX3NldHVwX2hvb2spIChyb290LCBqb2lucmVsLCBvdXRl cl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCSAgIHJlc3RyaWN0bGlzdCk7CisKKwkv KiBJcyB0aGUgam9pbiBiZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLwor CWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBp bm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7CisKIAkvKiBXZSBidWls ZCB0aGUgam9pbiBvbmx5IG9uY2UuICovCiAJQXNzZXJ0KCFmaW5kX2pvaW5fcmVsKHJvb3QsIGpv aW5yZWwtPnJlbGlkcykpOwogCkBAIC0xNjAyLDYgKzE2MjYsNyBAQCBmZXRjaF91cHBlcl9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFVwcGVyUmVsYXRpb25LaW5kIGtpbmQsIFJlbGlkcyByZWxpZHMp CiAJdXBwZXJyZWwgPSBtYWtlTm9kZShSZWxPcHRJbmZvKTsKIAl1cHBlcnJlbC0+cmVsb3B0a2lu ZCA9IFJFTE9QVF9VUFBFUl9SRUw7CiAJdXBwZXJyZWwtPnJlbGlkcyA9IGJtc19jb3B5KHJlbGlk cyk7CisJdXBwZXJyZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsK IAogCS8qIGNoZWFwIHN0YXJ0dXAgY29zdCBpcyBpbnRlcmVzdGluZyBpZmYgbm90IGFsbCB0dXBs ZXMgdG8gYmUgcmV0cmlldmVkICovCiAJdXBwZXJyZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9v dC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKQEAgLTIxMTgsNyArMjE0Myw3IEBAIGJ1aWxkX2pvaW5y ZWxfcGFydGl0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsCiAJUGFydGl0aW9uU2NoZW1lIHBh cnRfc2NoZW1lOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBwYXJ0aXRpb253aXNlIGpvaW4gdGVj aG5pcXVlIGlzIGRpc2FibGVkLiAqLwotCWlmICghZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikK KwlpZiAoKGpvaW5yZWwtPnBnc19tYXNrICYgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UpID09 IDApCiAJewogCQlBc3NlcnQoIUlTX1BBUlRJVElPTkVEX1JFTChqb2lucmVsKSk7CiAJCXJldHVy bjsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNzVhNzA0ODllNWEuLjQ3NDZkM2M0M2M0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaApAQCAtMjIsNiArMjIsNzkgQEAKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCisvKgorICogUGF0aCBnZW5l cmF0aW9uIHN0cmF0ZWdpZXMuCisgKgorICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIHRvIHNw ZWNpZnkgdGhlIHNldCBvZiBzdHJhdGVnaWVzIHRoYXQgdGhlIHBsYW5uZXIKKyAqIHNob3VsZCB1 c2UsIGVpdGhlciBmb3IgdGhlIHF1ZXJ5IGFzIGEgd2hvbGUgb3IgZm9yIGEgc3BlY2lmaWMgYmFz ZXJlbCBvcgorICogam9pbnJlbC4gVGhlIHZhcmlvdXMgcGxhbm5lci1yZWxhdGVkIGVuYWJsZV8q IEdVQ3MgYXJlIHVzZWQgdG8gc2V0IHRoZQorICogUGxhbm5lckdsb2JhbCdzIGRlZmF1bHRfcGdz X21hc2ssIGFuZCB0aGF0IGluIHR1cm4gaXMgdXNlZCB0byBzZXQgZWFjaAorICogUmVsT3B0SW5m bydzIHBnc19tYXNrLiBJbiBib3RoIGNhc2VzLCBleHRlbnNpb25zIGNhbiB1c2UgaG9va3MgdG8g bW9kaWZ5IHRoZQorICogZGVmYXVsdCB2YWx1ZS4gIE5vdCBldmVyeSBzdHJhdGVneSBsaXN0ZWQg aGVyZSBoYXMgYSBjb3JyZXNwb25kaW5nIGVuYWJsZV8qCisgKiBHVUM7IHRob3NlIHRoYXQgZG9u J3QgYXJlIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBkaXNhYmxlZCBieSBhbiBleHRlbnNpb24uCisg KiBOb3QgYWxsIHN0cmF0ZWdpZXMgYXJlIHJlbGV2YW50IGZvciBldmVyeSBSZWxPcHRJbmZvOyBl LmcuIFBHU19TRVFTQ0FOCisgKiBkb2Vzbid0IGFmZmVjdCBqb2lucmVscyBvbmUgd2F5IG9yIHRo ZSBvdGhlci4KKyAqCisgKiBJbiBtb3N0IGNhc2VzLCBkaXNhYmxpbmcgYSBwYXRoIGdlbmVyYXRp b24gc3RyYXRlZ3kgbWVyZWx5IG1lYW5zIHRoYXQgYW55CisgKiBwYXRocyBnZW5lcmF0ZWQgdXNp bmcgdGhhdCBzdHJhdGVneSBhcmUgbWFya2VkIGFzIGRpc2FibGVkLCBidXQgaW4gc29tZQorICog Y2FzZXMsIHBhdGggZ2VuZXJhdGlvbiBpcyBza2lwcGVkIGFsdG9nZXRoZXIuIFRoZSBsYXR0ZXIg c3RyYXRlZ3kgaXMgb25seQorICogcGVybWlzc2libGUgd2hlbiBpdCBjYW4ndCByZXN1bHQgaW4g cGxhbm5lciBmYWlsdXJlIC0tIGZvciBpbnN0YW5jZSwgd2UKKyAqIGNvdWxkbid0IGRvIHRoaXMg Zm9yIHNlcXVlbnRpYWwgc2NhbnMgb24gYSBwbGFpbiByZWwsIGJlY2F1c2UgdGhlcmUgbWlnaHQK KyAqIG5vdCBiZSBhbnkgb3RoZXIgcG9zc2libGUgcGF0aC4gTmV2ZXJ0aGVsZXNzLCB0aGUgYmVo YXZpb3JzIGluIGVhY2gKKyAqIGluZGl2aWR1YWwgY2FzZSBhcmUgdG8gc29tZSBleHRlbnQgdGhl IHJlc3VsdCBvZiBoaXN0b3JpY2FsIGFjY2lkZW50LAorICogY2hvc2VuIHRvIG1hdGNoIHRoZSBw cmVleGlzdGluZyBiZWhhdmlvcnMgb2YgdGhlIGVuYWJsZV8qIEdVQ3MuCisgKgorICogSW4gYSBm ZXcgY2FzZXMsIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBiaXQgZm9yIHRoZSBzYW1lIHN0cmF0ZWd5 LCBjb250cm9sbGluZworICogZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIHBsYW5uZXIgYmVoYXZp b3IuIFdoZW4gUEdTX0NPTlNJREVSX0lOREVYT05MWSBpcworICogdW5zZXQsIHdlIGRvbid0IGV2 ZW4gY29uc2lkZXIgaW5kZXgtb25seSBzY2FucywgYW5kIGFueSBzdWNoIHNjYW5zIHRoYXQKKyAq IHdvdWxkIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYmVjb21lIGluZGV4IHNjYW5zIGluc3RlYWQuIE9u IHRoZSBvdGhlciBoYW5kLAorICogdW5zZXR0aW5nIFBHU19JTkRFWFNDQU4gb3IgUEdTX0lOREVY T05MWVNDQU4gY2F1c2VzIGdlbmVyYXRlZCBwYXRocyBvZiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcg dHlwZXMgdG8gYmUgbWFya2VkIGFzIGRpc2FibGVkLiBTaW1pbGFybHksIHVuc2V0dGluZworICog UEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UgcHJldmVudHMgYW55IHNvcnQgb2YgdGhpbmtpbmcg YWJvdXQgcGFydGl0aW9ud2lzZQorICogam9pbnMgZm9yIHRoZSBjdXJyZW50IHJlbCwgd2hpY2gg aW5jaWRlbnRhbGx5IHdpbGwgcHJlY2x1ZGUgaGlnaGVyLWxldmVsCisgKiBqb2lucmVscyBmcm9t IGJ1aWxkaW5nIHBhcml0aXRvbndpc2UgcGF0aHMgdXNpbmcgcGF0aHMgdGFrZW4gZnJvbSB0aGUK KyAqIGN1cnJlbnQgcmVsJ3MgY2hpbGRyZW4uIE9uIHRoZSBvdGhlciBoYW5kLCB1bnNldHRpbmcg UEdTX0FQUEVORCBvcgorICogUEdTX01FUkdFX0FQUEVORCB3aWxsIG9ubHkgYXJyYW5nZSB0byBk aXNhYmxlIHBhdGhzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiB0eXBlcyBpZiB0aGV5IGFyZSBn ZW5lcmF0ZWQgYXQgdGhlIGxldmVsIG9mIHRoZSBjdXJyZW50IHJlbC4KKyAqCisgKiBGaW5hbGx5 LCB1bnNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgZGlzYWJsZXMgYWxsIG5vbi1wYXJ0 aWFsIHBhdGhzCisgKiBleGNlcHQgdGhvc2UgdGhhdCB1c2UgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZS4gSW4gbW9zdCBvdGhlciBjYXNlcywgYQorICogcGx1Z2luIGNhbiBudWRnZSB0aGUgcGxhbm5l ciB0b3dhcmQgYSBwYXJ0aWN1bGFyIHN0cmF0ZWd5IGJ5IGRpc2FibGluZworICogYWxsIG9mIHRo ZSBvdGhlcnMsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBoZXJlOiB1bnNldHRpbmcgUEdTX1NFUVND QU4sCisgKiBmb3IgaW5zdGFuY2UsIHdvdWxkIGRpc2FibGUgYm90aCBwYXJ0aWFsIGFuZCBub24t cGFydGlhbCBzZXF1ZW50aWFsIHNjYW5zLgorICovCisjZGVmaW5lIFBHU19TRVFTQ0FOCQkJCQkw eDAwMDAwMDAxCisjZGVmaW5lIFBHU19JTkRFWFNDQU4JCQkJMHgwMDAwMDAwMgorI2RlZmluZSBQ R1NfSU5ERVhPTkxZU0NBTgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUEdTX0JJVE1BUFNDQU4JCQkJ MHgwMDAwMDAwOAorI2RlZmluZSBQR1NfVElEU0NBTgkJCQkJMHgwMDAwMDAxMAorI2RlZmluZSBQ R1NfRk9SRUlHTkpPSU4JCQkJMHgwMDAwMDAyMAorI2RlZmluZSBQR1NfTUVSR0VKT0lOX1BMQUlO CQkJMHgwMDAwMDA0MAorI2RlZmluZSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFCTB4MDAwMDAw ODAKKyNkZWZpbmUgUEdTX05FU1RMT09QX1BMQUlOCQkJMHgwMDAwMDEwMAorI2RlZmluZSBQR1Nf TkVTVExPT1BfTUFURVJJQUxJWkUJMHgwMDAwMDIwMAorI2RlZmluZSBQR1NfTkVTVExPT1BfTUVN T0laRQkJMHgwMDAwMDQwMAorI2RlZmluZSBQR1NfSEFTSEpPSU4JCQkJMHgwMDAwMDgwMAorI2Rl ZmluZSBQR1NfQVBQRU5ECQkJCQkweDAwMDAxMDAwCisjZGVmaW5lIFBHU19NRVJHRV9BUFBFTkQJ CQkweDAwMDAyMDAwCisjZGVmaW5lIFBHU19HQVRIRVIJCQkJCTB4MDAwMDQwMDAKKyNkZWZpbmUg UEdTX0dBVEhFUl9NRVJHRQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX0lOREVY T05MWQkJMHgwMDAxMDAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRQkweDAw MDIwMDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9OT05QQVJUSUFMCQkweDAwMDQwMDAwCisKKy8q CisgKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIHVzZWZ1bCBjb21iaW5hdGlvbiBvZiB0aGUgYml0 cyBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5lIFBHU19TQ0FOX0FOWQkJXAorCShQR1NfU0VR U0NBTiB8IFBHU19JTkRFWFNDQU4gfCBQR1NfSU5ERVhPTkxZU0NBTiB8IFBHU19CSVRNQVBTQ0FO IHwgXAorCSBQR1NfVElEU0NBTikKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9BTlkJXAorCShQR1Nf TUVSR0VKT0lOX1BMQUlOIHwgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSkKKyNkZWZpbmUgUEdT X05FU1RMT09QX0FOWQlcCisJKFBHU19ORVNUTE9PUF9QTEFJTiB8IFBHU19ORVNUTE9PUF9NQVRF UklBTElaRSB8IFBHU19ORVNUTE9PUF9NRU1PSVpFKQorI2RlZmluZSBQR1NfSk9JTl9BTlkJCVwK KwkoUEdTX0ZPUkVJR05KT0lOIHwgUEdTX01FUkdFSk9JTl9BTlkgfCBQR1NfTkVTVExPT1BfQU5Z IHwgUEdTX0hBU0hKT0lOKQogCiAvKgogICogUmVsaWRzCkBAIC0xODYsNiArMjU5LDkgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qIHdvcnN0IFBST1BBUkFMTEVMIGhhemFyZCBs ZXZlbCAqLwogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwogCisJLyogbWFzayBvZiBhbGxvd2Vk IHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzICovCisJdWludDY0CQlkZWZhdWx0X3Bnc19tYXNr OworCiAJLyogcGFydGl0aW9uIGRlc2NyaXB0b3JzICovCiAJUGFydGl0aW9uRGlyZWN0b3J5IHBh cnRpdGlvbl9kaXJlY3RvcnkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIApAQCAt OTM5LDcgKzEwMTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJQ2FyZGluYWxpdHkg cm93czsKIAogCS8qCi0JICogcGVyLXJlbGF0aW9uIHBsYW5uZXIgY29udHJvbCBmbGFncworCSAq IHBlci1yZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wKIAkgKi8KIAkvKiBrZWVwIGNoZWFwLXN0YXJ0 dXAtY29zdCBwYXRocz8gKi8KIAlib29sCQljb25zaWRlcl9zdGFydHVwOwpAQCAtOTQ3LDYgKzEw MjMsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJYm9vbAkJY29uc2lkZXJfcGFyYW1f c3RhcnR1cDsKIAkvKiBjb25zaWRlciBwYXJhbGxlbCBwYXRocz8gKi8KIAlib29sCQljb25zaWRl cl9wYXJhbGxlbDsKKwkvKiBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzayAqLworCXVpbnQ2 NAkJcGdzX21hc2s7CiAKIAkvKgogCSAqIGRlZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBh dGhzIHNjYW5uaW5nIHRoaXMgcmVsYXRpb247IGxpc3Qgb2YKQEAgLTM1MDUsNiArMzU4Myw3IEBA IHR5cGVkZWYgc3RydWN0IFNlbWlBbnRpSm9pbkZhY3RvcnMKICAqIHNqaW5mbyBpcyBleHRyYSBp bmZvIGFib3V0IHNwZWNpYWwgam9pbnMgZm9yIHNlbGVjdGl2aXR5IGVzdGltYXRpb24KICAqIHNl bWlmYWN0b3JzIGlzIGFzIHNob3duIGFib3ZlIChvbmx5IHZhbGlkIGZvciBTRU1JL0FOVEkvaW5u ZXJfdW5pcXVlIGpvaW5zKQogICogcGFyYW1fc291cmNlX3JlbHMgYXJlIE9LIHRhcmdldHMgZm9y IHBhcmFtZXRlcml6YXRpb24gb2YgcmVzdWx0IHBhdGhzCisgKiBwZ3NfbWFzayBpcyBhIGJpdG1h c2sgb2YgUEdTXyogY29uc3RhbnRzIHRvIGxpbWl0IHRoZSBqb2luIHN0cmF0ZWd5CiAgKi8KIHR5 cGVkZWYgc3RydWN0IEpvaW5QYXRoRXh0cmFEYXRhCiB7CkBAIC0zNTE0LDYgKzM1OTMsNyBAQCB0 eXBlZGVmIHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQogCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZv OwogCVNlbWlBbnRpSm9pbkZhY3RvcnMgc2VtaWZhY3RvcnM7CiAJUmVsaWRzCQlwYXJhbV9zb3Vy Y2VfcmVsczsKKwl1aW50NjQJCXBnc19tYXNrOwogfSBKb2luUGF0aEV4dHJhRGF0YTsKIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvY29zdC5oCmluZGV4IGI1MjNiY2RhOGYzLi4yZDgwNDYyYmVjZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oCkBAIC0xMjUsNyArMTI1LDcgQEAgZXh0ZXJuIHZvaWQgY29zdF9tZXJnZV9hcHBl bmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJICBDb3N0IGlucHV0X3N0 YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCQkJCSAgZG91YmxlIHR1cGxl cyk7CiBleHRlcm4gdm9pZCBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCi0JCQkJCQkgIGludCBp bnB1dF9kaXNhYmxlZF9ub2RlcywKKwkJCQkJCSAgYm9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlz YWJsZWRfbm9kZXMsCiAJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0 X3RvdGFsX2Nvc3QsCiAJCQkJCQkgIGRvdWJsZSB0dXBsZXMsIGludCB3aWR0aCk7CiBleHRlcm4g dm9pZCBjb3N0X2FnZyhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKQEAgLTE0OCw3ICsx NDgsNyBAQCBleHRlcm4gdm9pZCBjb3N0X2dyb3VwKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkgICBkb3VibGUgaW5wdXRfdHVwbGVzKTsKIGV4dGVybiB2b2lkIGluaXRpYWxf Y29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJICBKb2luQ29zdFdvcmtz cGFjZSAqd29ya3NwYWNlLAotCQkJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkg IEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgZW5hYmxlX21hc2ssCiAJCQkJCQkJCSAgUGF0aCAq b3V0ZXJfcGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCQkJICBKb2luUGF0aEV4dHJhRGF0 YSAqZXh0cmEpOwogZXh0ZXJuIHZvaWQgZmluYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAq cm9vdCwgTmVzdFBhdGggKnBhdGgsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDQ0Mzcy NDhjYjY3Li4yNzRjZDQxYmFiMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYg KzE3LDE0IEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMv cGF0aG5vZGVzLmgiCiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5n IGpvaW5yZWwgc2V0dXAgKi8KK3R5cGVkZWYgdm9pZCAoKmpvaW5yZWxfc2V0dXBfaG9va190eXBl KSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJ CQkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAq aW5uZXJfcmVsLAorCQkJCQkJCQkJCSBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkJ CQkgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK2V4dGVybiBQR0RMTElNUE9SVCBqb2lucmVsX3NldHVw X2hvb2tfdHlwZSBqb2lucmVsX3NldHVwX2hvb2s7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBw YXRobm9kZS5jCkBAIC04NCw3ICs5Miw4IEBAIGV4dGVybiBHcm91cFJlc3VsdFBhdGggKmNyZWF0 ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxP cHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCQkgUGF0aFRhcmdldCAqdGFyZ2V0LAogCQkJCQkJCQkJ CQkJIExpc3QgKmhhdmluZ3F1YWwpOwotZXh0ZXJuIE1hdGVyaWFsUGF0aCAqY3JlYXRlX21hdGVy aWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKTsKK2V4dGVybiBNYXRlcmlh bFBhdGggKmNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0 aCwKKwkJCQkJCQkJCQkgIGJvb2wgZW5hYmxlZCk7CiBleHRlcm4gTWVtb2l6ZVBhdGggKmNyZWF0 ZV9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAq cmVsLAogCQkJCQkJCQkJCVBhdGggKnN1YnBhdGgsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IGY2 YTYyZGYwYjQzLi42MWMxNjA3Zjg3MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTI4LDcgKzI4 LDE0IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6 ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWluX3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZTsK IGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nOwogCi0v KiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAq LworLyogSG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlz dCgpICovCit0eXBlZGVmIHZvaWQgKCpqb2luX3BhdGhfc2V0dXBfaG9va190eXBlKSAoUGxhbm5l ckluZm8gKnJvb3QsCisJCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJ CQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5l cnJlbCwKKwkJCQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkgICBKb2lu UGF0aEV4dHJhRGF0YSAqZXh0cmEpOworZXh0ZXJuIFBHRExMSU1QT1JUIGpvaW5fcGF0aF9zZXR1 cF9ob29rX3R5cGUgam9pbl9wYXRoX3NldHVwX2hvb2s7CiB0eXBlZGVmIHZvaWQgKCpzZXRfcmVs X3BhdGhsaXN0X2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlSZWxP cHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCUluZGV4IHJ0aSwKLS0gCjIuNTEuMAoK --000000000000d660ae0642ca34ae Content-Type: application/octet-stream; name="v2-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v2-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkzmey22 RnJvbSBmYWYxNjEyYzEyNzhjNmQxZmQwYWE2ZjE3YzkwODYxYTMzYWEyODkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDMv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGZhOTA3ZmE0NzJl Li42NTM4ZmZjYWZiMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA5YzY0MzZlYjcyZi4uMzQ5ODYzZmIxOTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzIsOCArMTg4OSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCW1hdGNoX3BhcnRpdGlvbl9vcmRlcjsKIAkJYm9vbAkJbWF0 Y2hfcGFydGl0aW9uX29yZGVyX2Rlc2M7CkBAIC0yMDI1LDE2ICsyMDQ1LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA0 NCwxMyArMjA3MSwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA2Miw2 ICsyMDkyLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwNzIsNiArMjEwMyw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDgzLDYgKzIxMTUsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIwOTUsMTIgKzIxMjgsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMDgsNiArMjE0Myw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIxMCw3ICsyMjQ2 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjE5LDYgKzIyNTYsOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjIzMyw2 ICsyMjcyLDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNDEsNiArMjI4Miw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjUyLDEwICsyMjk1LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI2NCwxNCArMjMxMiwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MDAsNyArMjM1Niw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggNWQxZmMzODk5ZGEuLmMxZWQwZDM4NzBmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IDhhZjA5MWJhNjQ3Li44OGI0YzU5MDFiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDlkNTI2MjY1MWU3Li5lYjYy Nzk0YWVjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IDU1NjY1ODI0MTc5Li5iN2M0YzA2ODZkMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTgzOSw3ICs4MzksNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4NSw3ICs4ODUsNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTEsNiArMTAxMSw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMTcsOCArMTIxOCwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IGU0ZmQ2OTUw ZmFkLi5jMGE5ODExYjEzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMzAwLDYgKzEzMDAsNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMDksNiArMTMxMCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3MSw2ICsxNDczLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Niw2ICsxNDg5LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NTAsNiArMzk1NCw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGNmM2ExNmI4YjBl Li43NWE3MDQ4OWU1YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzEsNiArMjE3MSwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBhcmUgY29uc29saWRhdGVkIGRvd24gdG8gb25lLCB3ZSBzdG9yZSB0aGUgUlRJCisgKiBz ZXRzIGZvciB0aGUgb21pdHRlZCBwYXRocyBpbiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cy4gVGhp cyBpcyBub3QgbmVjZXNzYXJ5CisgKiBmb3IgcGxhbm5pbmcgb3IgZXhlY3V0aW9uOyB3ZSBkbyBp dCBmb3IgdGhlIGJlbmVmaXQgb2YgY29kZSB0aGF0IHdhbnRzCisgKiB0byBpbnNwZWN0IHRoZSBm aW5hbCBwbGFuIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBjYW1lIHRvIGJlLgorICoKICAqIE5vdGU6 IGl0IGlzIHBvc3NpYmxlIGZvciAic3VicGF0aHMiIHRvIGNvbnRhaW4gb25seSBvbmUsIG9yIGV2 ZW4gbm8sCiAgKiBlbGVtZW50cy4gIFRoZXNlIGNhc2VzIGFyZSBvcHRpbWl6ZWQgZHVyaW5nIGNy ZWF0ZV9hcHBlbmRfcGxhbi4KICAqIEluIHBhcnRpY3VsYXIsIGFuIEFwcGVuZFBhdGggd2l0aCBu byBzdWJwYXRocyBpcyBhICJkdW1teSIgcGF0aCB0aGF0CkBAIC0yMTg2LDYgKzIxOTIsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcHBlbmRQYXRoCiAJLyogSW5kZXggb2YgZmlyc3QgcGFydGlhbCBwYXRo IGluIHN1YnBhdGhzOyBsaXN0X2xlbmd0aChzdWJwYXRocykgaWYgbm9uZSAqLwogCWludAkJCWZp cnN0X3BhcnRpYWxfcGF0aDsKIAlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGlt aXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIH0gQXBwZW5kUGF0aDsKIAogI2RlZmluZSBJU19EVU1NWV9BUFBFTkQocCkgXApA QCAtMjIwMiwxMiArMjIwOSwxNSBAQCBleHRlcm4gYm9vbCBpc19kdW1teV9yZWwoUmVsT3B0SW5m byAqcmVsKTsKIC8qCiAgKiBNZXJnZUFwcGVuZFBhdGggcmVwcmVzZW50cyBhIE1lcmdlQXBwZW5k IHBsYW4sIGllLCB0aGUgbWVyZ2luZyBvZiBzb3J0ZWQKICAqIHJlc3VsdHMgZnJvbSBzZXZlcmFs IG1lbWJlciBwbGFucyB0byBwcm9kdWNlIHNpbWlsYXJseS1zb3J0ZWQgb3V0cHV0LgorICoKKyAq IGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgZm9y IEFwcGVuZFBhdGguCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kUGF0aAogewogCVBh dGgJCXBhdGg7CiAJTGlzdAkgICAqc3VicGF0aHM7CQkvKiBsaXN0IG9mIGNvbXBvbmVudCBQYXRo cyAqLwogCUNhcmRpbmFsaXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQg dHVwbGVzLCBvciAtMSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogfSBN ZXJnZUFwcGVuZFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDVkMDUyMGQ1ZTU4 Li4wNDViN2VlODRhNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTM5NCw5ICszOTQsMTYgQEAg c3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIHN0cnVj dCBiZWxvdyAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7CiAJUGxhbgkJcGxhbjsKKwogCS8q IFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQg ICphcHByZWxpZHM7CisKKwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0 ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK KworCS8qIHBsYW5zIHRvIHJ1biAqLwogCUxpc3QJICAgKmFwcGVuZHBsYW5zOworCiAJLyogIyBv ZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQluYXN5bmNwbGFuczsKIApAQCAtNDI2LDYg KzQzMywxMCBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCS8qIFJUSXMgb2YgYXBwZW5k cmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQgICphcHByZWxpZHM7CiAK KwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5v ZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKworCS8qIHBsYW5zIHRv IHJ1biAqLwogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1 c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBzdHJ1Y3QgU29ydDogKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhub2RlLmgKaW5kZXggOTU1ZTkwNTY4NTguLjQ0MzcyNDhjYjY3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtNzAsMTIgKzcwLDE0IEBAIGV4dGVybiBUaWRSYW5nZVBhdGggKmNy ZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBlbmRf cGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICBMaXN0 ICpzdWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMg cmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBh cmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBl bmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJ IExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBl eHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCi0tIAoyLjUxLjAKCg== --000000000000d660ae0642ca34ae Content-Type: application/octet-stream; name="v2-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v2-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkzmey11 RnJvbSA5YWVlOGQzMmQ4MDc3YzExYTkzOTg4MzNiMTlmZjlkM2U4ODc2OWEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDIv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCA1ZGM3MDdkNjllMy4uZmE5MDdmYTQ3MmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDBlNmIzZjYw ZjMxLi45ZDUyNjI2NTFlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBhZGFiYWUwOWEyMy4uMjNhMDBkNDUyYjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNpbmcsIGZvciB0aGUgYmVu ZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucworICog ZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25vZGVf aWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ RWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2RlX2lk ID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+cmVs aWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVsaWRl ZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYTNhODAwODY5ZGYuLmNmM2Ex NmI4YjBlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFyYW1z ICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVzIGVs aWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0CSAg ICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWduZWQg Ki8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMTUyNmRkMmVj NmIuLjVkMDUyMGQ1ZTU4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5IEBA IHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1dGls aXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQgbm9k ZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLworCUxp c3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQgYnkg ZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAtMTgz OCw0ICsxODQxLDE4IEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlkdW1t eTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZvcm1h dGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2aWFs IHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIG5vZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5P REVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNGY4MWZiN2RmMmQuLmJmZTlm ZjBkOTJjIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNjk3LDYgKzY5Nyw3IEBAIEVh Y2hTdGF0ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWRO b2RlCiBFbmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5 X2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --000000000000d660ae0642ca34ae Content-Type: application/octet-stream; name="v2-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v2-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkzmexu0 RnJvbSBmYmYzYTdhNWY1ZjZjY2RjMjU1YzU4NjkwYWZlY2U4ZjBmNDQ5MjkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDEv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ2UgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggYmQ3MGI2ZDlk NWUuLjVkYzcwN2Q2OWUzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBjNGZkNjQ2 Yjk5OS4uMGU2YjNmNjBmMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2NkYzliYzI2NGEuLmFkYWJhZTA5YTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDMwZDg4OWI1NGM1Li5hM2E4MDA4NjlkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMTUy NmRkMmVjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwli b29sCQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDAxOGI1OTE5Y2Y2Li40ZjgxZmI3 ZGYyZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4ODcsNiArMjg4Nyw3IEBAIFN1 YkxpbmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQ bGFuU3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000d660ae0642ca34ae Content-Type: application/octet-stream; name="v2-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Disposition: attachment; filename="v2-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkzmey33 RnJvbSBhM2NjYTY4MWU2M2Y4NjIwYTcyMTUyZGFiODFjNGFkMmZlMDFmODRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6MTc6NDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDQv Nl0gVGVtcG9yYXJ5IGhhY2sgdG8gdW5icmVhayBwYXJ0aXRpb253aXNlIGpvaW4gY29udHJvbC4K ClJlc2V0dGluZyB0aGUgcGF0aGxpc3QgYW5kIHBhcnRpYWwgcGF0aGxpc3QgdG8gTklMIHdoZW4g dGhlCnRvcG1vc3Qgc2Nhbi9qb2luIHJlbCBpcyBhIHBhcnRpdGlvbmVkIGpvaW5yZWwgaXMgaW5j b3JyZWN0LiBUaGUgaXNzdWUKd2FzIG9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkgQXNodXRvc2ggQmFw YXQgaGVyZToKCmh0dHA6Ly9wb3N0Z3IuZXMvbS9DQUV4SFc1dG96ZTU4K2pMLTQ1NEozdHkxMXNx SnlVMTNTejVySlBRWkRtQVN3WmdXaUFAbWFpbC5nbWFpbC5jb20KCkkgZmFpbGVkIHRvIHVuZGVy c3RhbmQgQXNodXRvc2gncyBleHBsYW5hdGlvbiB1bnRpbCBJIGhpdCB0aGUgcHJvYmxlbQpteXNl bGYsIHNvIGhlcmUncyBteSBhdHRlbXB0IHRvIHJlLWV4cGxhaW4gd2hhdCBoZSBoYWQgc2FpZCwg anVzdCBpbgpjYXNlIHlvdSBmaW5kIG15IGV4cGxhbmF0aW9uIGFueSBjbGVhcmVyOgoKaHR0cDov L3Bvc3Rnci5lcy9tL0NBJTJCVGdtb1p2QkQlMkI1dnlRcnVYQlZYVzc0Rk1nV3hFJTNETzRLNHJD ckN0RUVMV05qLU1MQSU0MG1haWwuZ21haWwuY29tCgpBcyBzdWJzZXF1ZW50IGRpc2N1c3Npb24g b24gdGhhdCB0aHJlYWQgaW5kaWNhdGVzLCBpdCBpcyB1bmNsZWFyCmV4YWN0bHkgd2hhdCB0aGUg cmlnaHQgZml4IGZvciB0aGlzIHByb2JsZW0gaXMsIGFuZCBhdCBsZWFzdCBhcyBvZgp0aGlzIHdy aXRpbmcsIGl0IGlzIGV2ZW4gbW9yZSB1bmNsZWFyIGhvdyB0byBhZGp1c3QgdGhlIHRlc3QgY2Fz ZXMKdGhhdCBicmVhay4gV2hhdCBJJ3ZlIGRvbmUgaGVyZSBpcyBqdXN0IGFjY2VwdCBhbGwgdGhl IGNoYW5nZXMgdG8gdGhlCnJlZ3Jlc3Npb24gdGVzdCBvdXRwdXRzLCB3aGljaCBpcyBhbG1vc3Qg Y2VydGFpbmx5IHRoZSB3cm9uZyBpZGVhLAplc3BlY2lhbGx5IHNpbmNlIEkndmUgYWxzbyBhZGRl ZCBubyBjb21tZW50cy4KClRoaXMgaXMganVzdCBhIHRlbXBvcmFyeSBoYWNrIHRvIG1ha2UgaXQg cG9zc2libGUgdG8gdGVzdCB0aGlzIHBhdGNoCnNldCwgYmVjYXVzZSB3aXRob3V0IHRoaXMsIFBB UlRJVElPTldJU0UoKSBhZHZpY2UgY2FuJ3QgYmUgdXNlZCB0bwpzdXBwcmVzcyBhIHBhcnRpdGlv bndpc2Ugam9pbiwgYmVjYXVzZSBhbGwgb2YgdGhlIGFsdGVybmF0aXZlcyBnZXQKZWxpbWluYXRl ZCByZWdhcmRsZXNzIG9mIGNvc3QuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jICAgICAgICAgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0 aW9uX2pvaW4ub3V0IHwgMTcyICsrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCAgICAgIHwgIDQxICsrLS0tCiAzIGZpbGVzIGNoYW5nZWQs IDkxIGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKaW5kZXggZWI2Mjc5NGFlY2QuLjhiMWFiODQ3ZjM5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC03OTI3LDcgKzc5MjcsNyBAQCBhcHBseV9zY2Fuam9p bl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogZ2VuZXJhdGVfdXNlZnVs X2dhdGhlcl9wYXRocyB0byBhZGQgcGF0aChzKSB0byB0aGUgbWFpbiBsaXN0LCBhbmQKIAkgKiBm aW5hbGx5IHphcCB0aGUgcGFydGlhbCBwYXRobGlzdC4KIAkgKi8KLQlpZiAocmVsX2lzX3BhcnRp dGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQog CQlyZWwtPnBhdGhsaXN0ID0gTklMOwogCiAJLyoKQEAgLTc5NTMsNyArNzk1Myw3IEBAIGFwcGx5 X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAl9CiAKIAkvKiBG aW5pc2ggZHJvcHBpbmcgb2xkIHBhdGhzIGZvciBhIHBhcnRpdGlvbmVkIHJlbCwgcGVyIGNvbW1l bnQgYWJvdmUgKi8KLQlpZiAocmVsX2lzX3BhcnRpdGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0 aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQogCQlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBO SUw7CiAKIAkvKiBFeHRyYWN0IFNSRi1mcmVlIHNjYW4vam9pbiB0YXJnZXQuICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IDcxMzgyOGJlMzM1 Li4zZTM0ZjA1YmE2MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f am9pbi5vdXQKQEAgLTY1LDMxICs2NSwyNCBAQCBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIu YyBGUk9NIHBydDEgdDEsIHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmIgQU5EIHQxLmIgPQogLS0g aW5uZXIgam9pbiB3aXRoIHBhcnRpYWxseS1yZWR1bmRhbnQgam9pbiBjbGF1c2VzCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIuYyBGUk9NIHBydDEgdDEs IHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmEgQU5EIHQxLmEgPSB0Mi5iIE9SREVSIEJZIHQxLmEs IHQyLmI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNvcnQKLSAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICh0MS5hID0gdDIuYSkKICAgIC0+ICBBcHBlbmQKLSAg ICAgICAgIC0+ICBNZXJnZSBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfMS5h ID0gdDJfMS5hKQotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaXBydDFfcDFf YSBvbiBwcnQxX3AxIHQxXzEKLSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHJ0Ml9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChh ID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzIuYSA9IHQyXzIuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX3Ay IHQxXzIKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHJ0Ml9wMiB0Ml8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6IChhID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQxXzMuYSA9IHQyXzMuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw cnQxX3AzIHQxXzMKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMyB0Ml8zCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6IChhID0gYikKLSgyMiByb3dzKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgaXBydDFfcDFfYSBvbiBwcnQxX3AxIHQxXzEKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGlwcnQxX3AyX2Egb24gcHJ0MV9wMiB0MV8yCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBpcHJ0MV9wM19hIG9uIHBydDFfcDMgdDFfMworICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiB0Mi5iCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHJ0Ml9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0g YikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AyIHQyXzIKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKGEgPSBiKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydDJfcDMgdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA9IGIpCiso MTUgcm93cykKIAogU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMgRlJPTSBwcnQxIHQxLCBw cnQyIHQyIFdIRVJFIHQxLmEgPSB0Mi5hIEFORCB0MS5hID0gdDIuYiBPUkRFUiBCWSB0MS5hLCB0 Mi5iOwogIGEgIHwgIGMgICB8IGIgIHwgIGMgICAKQEAgLTEyNDksNTYgKzEyNDIsNTAgQEAgU0VU IGVuYWJsZV9oYXNoam9pbiBUTyBvZmY7CiBTRVQgZW5hYmxlX25lc3Rsb29wIFRPIG9mZjsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElO IChTRUxFQ1QgdDEuYiBGUk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsg dDEuYikvMiBGUk9NIHBydDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRF UiBCWSB0MS5hOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQg S2V5OiB0MS5hCi0gICAtPiAgTWVyZ2UgU2VtaSBKb2luCi0gICAgICAgICBNZXJnZSBDb25kOiAo dDFfMy5hID0gdDFfNi5iKQotICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgIFNvcnQg S2V5OiB0MV8zLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKHQxLmEgPSB0MV8xLmIpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBBcHBlbmQKICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwcnQxX3AxIHQxXzMKICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGIg PSAwKQotICAgICAgICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2Ug Q29uZDogKHQxXzYuYiA9ICgoKHQxXzkuYSArIHQxXzkuYikgLyAyKSkpCi0gICAgICAgICAgICAg ICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzYuYgotICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDEgdDFfNgotICAgICAgICAgICAg ICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV85LmEgKyB0 MV85LmIpIC8gMikpCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9l X3AxIHQxXzkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotICAg LT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVyZ2UgQ29uZDogKHQxXzQuYSA9IHQxXzcu YikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogdDFfNC5hCiAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMiB0MV80CiAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAg ICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV83LmIgPSAoKCh0MV8xMC5hICsgdDFfMTAuYikg LyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHQxXzcuYgotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJf cDIgdDFfNwotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKCh0MV8xMC5hICsgdDFfMTAuYikgLyAyKSkKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDIgdDFfMTAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKGMgPSAwKQotICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVy Z2UgQ29uZDogKHQxXzUuYSA9IHQxXzguYikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAg ICAgICBTb3J0IEtleTogdDFfNS5hCiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 MV9wMyB0MV81CiAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAg IC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV84LmIg PSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAot ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzguYgotICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDMgdDFfOAotICAgICAgICAgICAgICAgLT4gIFNvcnQK LSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAy KSkKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotKDQ3IHJvd3MpCisg ICAtPiAgVW5pcXVlCisgICAgICAgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICAgICAgICBT b3J0IEtleTogdDFfMS5iCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAg ICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfNi5iID0gKCgodDFfOS5hICsgdDFfOS5i KSAvIDIpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3J0IEtleTogdDFfNi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSB0MV82CisgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoKHQxXzkuYSArIHQxXzku YikgLyAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQx X2VfcDEgdDFfOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYyA9 IDApCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAgICAgICAgICAgICAg ICAgICBNZXJnZSBDb25kOiAodDFfNy5iID0gKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikpKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiB0MV83LmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwcnQyX3AyIHQxXzcKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9lX3AyIHQx XzEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChjID0gMCkKKyAg ICAgICAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1l cmdlIENvbmQ6ICh0MV84LmIgPSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IHQxXzguYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBy dDJfcDMgdDFfOAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQorKDQxIHJvd3Mp CiAKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElOIChTRUxFQ1QgdDEuYiBG Uk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsgdDEuYikvMiBGUk9NIHBy dDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRFUiBCWSB0MS5hOwogICBh ICB8IGIgfCAgYyAgIApAQCAtNDkyMywzMiArNDkxMCwyNyBAQCBBTkFMWVpFIHBsdDNfYWR2Owog LS0gJzAwMDEnIG9mIHRoYXQgcGFydGl0aW9uCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg dDEuYSwgdDEuYywgdDIuYSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZU IEpPSU4gcGx0Ml9hZHYgdDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQz IE9OICh0MS5jID0gdDMuYykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNv YWxlc2NlKHQxLmEsIDApICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb3J0CiAgICBTb3J0IEtleTogdDEuYywgdDEu YSwgdDIuYSwgdDMuYQotICAgLT4gIEFwcGVuZAotICAgICAgICAgLT4gIEhhc2ggRnVsbCBKb2lu Ci0gICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLmMgPSB0M18xLmMpCi0gICAgICAgICAg ICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxXzEuYSwgMCkgJSA1KSA8PiAzKSBBTkQgKChDT0FM RVNDRSh0MV8xLmEsIDApICUgNSkgPD4gNCkpCi0gICAgICAgICAgICAgICAtPiAgSGFzaCBMZWZ0 IEpvaW4KLSAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEuYyA9IHQyXzEuYykK KyAgIC0+ICBIYXNoIEZ1bGwgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQzLmMp CisgICAgICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxLmEsIDApICUgNSkgPD4gMykgQU5EICgo Q09BTEVTQ0UodDEuYSwgMCkgJSA1KSA8PiA0KSkKKyAgICAgICAgIC0+ICBIYXNoIExlZnQgSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQyLmMpCisgICAgICAgICAgICAg ICAtPiAgQXBwZW5kCiAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9h ZHZfcDEgdDFfMQotICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQyX2Fkdl9wMSB0Ml8xCi0gICAgICAgICAg ICAgICAtPiAgSGFzaAotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKLSAgICAgICAgIC0+ICBIYXNoIEZ1bGwgSm9pbgotICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDFfMi5jID0gdDNfMi5jKQotICAgICAgICAgICAgICAgRmlsdGVyOiAoKChD T0FMRVNDRSh0MV8yLmEsIDApICUgNSkgPD4gMykgQU5EICgoQ09BTEVTQ0UodDFfMi5hLCAwKSAl IDUpIDw+IDQpKQotICAgICAgICAgICAgICAgLT4gIEhhc2ggTGVmdCBKb2luCi0gICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLmMgPSB0Ml8yLmMpCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9hZHZfcDIgdDFfMgotICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw bHQyX2Fkdl9wMiB0Ml8yCiAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBsdDJfYWR2X3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwbHQyX2Fkdl9wMiB0Ml8yCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQzX2Fk dl9wMiB0M18yCi0oMjMgcm93cykKKygxOCByb3dzKQogCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIu YSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZUIEpPSU4gcGx0Ml9hZHYg dDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQzIE9OICh0MS5jID0gdDMu YykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNvYWxlc2NlKHQxLmEsIDAp ICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7CiAgYSAgfCAgYyAgIHwg YSAgfCAgYyAgIHwgYSAgfCAgYyAgIApAQCAtNTI0MCwxNyArNTIyMiwxNSBAQCBTRUxFQ1QgeC5p ZCwgeS5pZCBGUk9NIGZyYWN0X3QgeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JE RVIgQlkgeC5pZCBBUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAg IC0+ICBNZXJnZSBBcHBlbmQKLSAgICAgICAgIFNvcnQgS2V5OiB4LmlkCi0gICAgICAgICAtPiAg TWVyZ2UgTGVmdCBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoeF8xLmlkID0geV8x LmlkKQorICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKHguaWQg PSB5LmlkKQorICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHhfMQotICAgICAgICAgICAg ICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHlf MQotICAgICAgICAgLT4gIE1lcmdlIExlZnQgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2UgQ29u ZDogKHhfMi5pZCA9IHlfMi5pZCkKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4g dXNpbmcgZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB4XzIKKyAgICAgICAgIC0+ICBBcHBlbmQK KyAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZnJhY3RfdDBfcGtleSBv biBmcmFjdF90MCB5XzEKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg ZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB5XzIKLSgxMSByb3dzKQorKDkgcm93cykKIAogRVhQ TEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIHguaWQsIHkuaWQgRlJPTSBmcmFjdF90IHggTEVGVCBK T0lOIGZyYWN0X3QgeSBVU0lORyAoaWQpIE9SREVSIEJZIHguaWQgREVTQyBMSU1JVCAxMDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAppbmRleCBjZjZiMzJkMTE3My4uODU0 OTYwMWUzYmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTg1 MCwxMCArODUwLDExIEBAIHdoZXJlICh0MS5hLCB0Mi5hKSBpbiAoc2VsZWN0IGEsIGEgZnJvbSB1 bmlxdWVfdGJsX3AgdDMpCiBvcmRlciBieSB0MS5hLCB0Mi5hOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQgS2V5OiB0MS5hCi0gICAtPiAgTmVzdGVkIExv b3AKLSAgICAgICAgIE91dHB1dDogdDFfMS5hLCB0MV8xLmIsIHQyXzEuYSwgdDJfMS5iCisgTWVy Z2UgSm9pbgorICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0Mi5hLCB0Mi5iCisgICBNZXJnZSBDb25k OiAodDEuYSA9IHQyLmEpCisgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICBTb3J0IEtleTog dDEuYQogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzEuYSwgdDFfMS5iLCB0M18xLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTg2Mywx NSArODY0LDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsKICAgICAgICAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDFfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDEg dDFfMQogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLmEsIHQxXzEuYgogICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzEuYSA9IHQzXzEuYSkKLSAgICAgICAgIC0+ ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAg ICAgICAgICBDYWNoZSBLZXk6IHQxXzEuYQotICAgICAgICAgICAgICAgQ2FjaGUgTW9kZTogbG9n aWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wMV9h X2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo dDJfMS5hID0gdDFfMS5hKQotICAgLT4gIE5lc3RlZCBMb29wCi0gICAgICAgICBPdXRwdXQ6IHQx XzIuYSwgdDFfMi5iLCB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIuYSwgdDFfMi5iLCB0M18yLmEKICAgICAgICAgICAg ICAgIC0+ICBVbmlxdWUKQEAgLTg4MSwxNSArODczLDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsK ICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHgg b24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDFfMgogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLmEsIHQxXzIuYgogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzIu YSA9IHQzXzIuYSkKLSAgICAgICAgIC0+ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAgICAgICBDYWNoZSBLZXk6IHQxXzIuYQotICAgICAg ICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgdW5pcXVlX3RibF9wMl9hX2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMiB0Ml8y Ci0gICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMi5hID0gdDFfMi5hKQotICAgLT4gIE5lc3RlZCBM b29wCi0gICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFfMy5iLCB0Ml8zLmEsIHQyXzMuYgogICAg ICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFf My5iLCB0M18zLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTkwMiwxNCArODg1LDE2 IEBAIG9yZGVyIGJ5IHQxLmEsIHQyLmE7CiAgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyB1bmlxdWVfdGJsX3AzX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AzIHQxXzMKICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy5hLCB0MV8zLmIKICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh0MV8zLmEgPSB0M18zLmEpCi0gICAgICAgICAtPiAgTWVtb2l6 ZQotICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLmEsIHQyXzMuYgotICAgICAgICAgICAgICAg Q2FjaGUgS2V5OiB0MV8zLmEKLSAgICAgICAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iCisgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB1bmlxdWVfdGJs X3AxX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS5hLCB0Ml8xLmIKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDJfMgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wM19hX2lkeCBvbiBwdWJsaWMudW5p cXVlX3RibF9wMyB0Ml8zCiAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMuYSwgdDJf My5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMy5hID0gdDFfMy5hKQot KDU5IHJvd3MpCisoNDQgcm93cykKIAogcmVzZXQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsK IGRyb3AgdGFibGUgdW5pcXVlX3RibF9wOwotLSAKMi41MS4wCgo= --000000000000d660ae0642ca34ae Content-Type: application/octet-stream; name="v2-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v2-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkzmey55 RnJvbSBkNzI1N2QyNzVhYTdkZjMyNmJlN2VlMDdiNjRiZGQ1YzhkNDZiMzFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgNCBOb3YgMjAyNSAxNDo0NTozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIgNi82 XSBXSVA6IEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNp bGl0eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2lj ZXMKc28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRo b3JpemF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBp bnNpc3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgYmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1 c2VycyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNv bnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7 IG5ldmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNp bHkgc29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KCldlIHRh a2UgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJvZHVjZSB0 ZXh0dWFsCm91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRlc2NyaWJl cyBrZXkgZGVjaXNpb25zIG1hZGUKZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZpY2UgaXMg cHJvdmlkZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwpjeWNsZXMsIGl0IHdpbGwgZm9yY2UgdGhv c2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluIHRoZSBzYW1lIHdheS4KTm90IGFsbCBwbGFu bmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7IGZvciBleGFtcGxl LApkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJlIGN1cnJlbnRs eSBvdXQgb2Ygc2NvcGUsCmFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFuIGFkdmljZSBj YW4gYWxzbyBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIsCm9yIGV2ZW4gd3JpdHRlbiBmcm9tIHNjcmF0 Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8KZ2VuZXJhdGUgb3V0Y29t ZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4gUGFydGlhbAphZHZp Y2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNvbWVzIGJ1dCBu b3Qgb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9ubHkgb24gc3Bl Y2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0ZXMgdGhhdCBt aWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9zc2libHktaW5j b3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1c2VmdWwgdG8K dXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZmZWN0cyBzZWxl Y3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0aGF0IGlzIG91 dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMganVzdCBhIHByb29m IG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5kIGEgbG90IG9mIHRo ZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50YXRpb24KYW5kIG5v dCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5nIHRlc3QgY2FzZXMg ZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJlIGNhbGxlZCBvdXQg YnkgWFhYLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAg fCAgICAzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwg IDI3NSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8 ICAzMTkgKysrCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgICAg fCAgMjkyICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0 IHwgIDI5NyArKysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91 dCB8ICAyNDMgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0ICAg ICAgfCAgNzU3ICsrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkICAg ICAgICAgICAgfCAgIDYzICsKIC4uLi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4w LnNxbCAgICB8ICAgNDIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5j ICAgICAgIHwgIDQ1NCArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fkdmlj ZS5jb250cm9sIHwgICAgNSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmggICAgICAgfCAgIDM3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYyAgICAg ICAgICAgICB8ICAzOTIgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oICAg ICAgICAgICAgIHwgIDIwNCArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rv ci5jICAgICAgIHwgIDYyNiArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xs ZWN0b3IuaCAgICAgICB8ICAgMTggKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50 aWZpZXIuYyAgICAgIHwgIDQ3NiArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lk ZW50aWZpZXIuaCAgICAgIHwgICA1MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5jICAgICAgICAgICAgfCAgNjE1ICsrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X2pvaW4uaCAgICAgICAgICAgIHwgIDEwNSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf b3V0cHV0LmMgICAgICAgICAgfCAgNjI4ICsrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX291dHB1dC5oICAgICAgICAgIHwgICAyMiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGFyc2VyLnkgICAgICAgICAgfCAgMzM3ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmMgICAgICAgICB8IDE3MDYgKysrKysrKysrKysrKysrKysKIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmggICAgICAgICB8ICAgMTcgKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyAgICAgICAgICAgIHwgIDI3OCArKysKIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmggICAgICAgICAgICB8ICAgODYgKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubCAgICAgICAgIHwgIDI5OSArKysKIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jICAgICAgICAgICB8ICA0OTAgKysrKysKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oICAgICAgICAgICB8ICAxMTMgKysKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYyAgICAgICAgICB8ICA4NjIgKysrKysrKysr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmggICAgICAgICAgfCAgMTIxICsr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsICAgICAgICAgfCAgIDc1ICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsICAgICB8ICAgOTYgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwgIHwgICA3NiArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCAgfCAgIDc4ICsKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsICAgICAgICAgICB8ICAxOTUgKysKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMzcgKwogNDEg ZmlsZXMgY2hhbmdlZCwgMTA4MzggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNl Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv c2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29u LmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKCmRp ZmYgLS1naXQgYS9jb250cmliL01ha2VmaWxlIGIvY29udHJpYi9NYWtlZmlsZQppbmRleCAyZjBh ODhkM2Y3Ny4uZGQwNGMyMGFjZDIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQCBTVUJESVJTID0gXAogCQlwZ19mcmVl c3BhY2VtYXAgXAogCQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJCXBnX292ZXJleHBsYWluIFwKKwkJ cGdfcGxhbl9hZHZpY2UgXAogCQlwZ19wcmV3YXJtCVwKIAkJcGdfc3RhdF9zdGF0ZW1lbnRzIFwK IAkJcGdfc3VyZ2VyeQlcCmRpZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxkIGIvY29udHJp Yi9tZXNvbi5idWlsZAppbmRleCBlZDMwZWU3ZDYzOS4uY2I3MThkYmRhYzAgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9tZXNvbi5idWlsZApAQCAtNDgsNiAr NDgsNyBAQCBzdWJkaXIoJ3BnY3J5cHRvJykKIHN1YmRpcigncGdfZnJlZXNwYWNlbWFwJykKIHN1 YmRpcigncGdfbG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVyZXhwbGFpbicpCitzdWJk aXIoJ3BnX3BsYW5fYWR2aWNlJykKIHN1YmRpcigncGdfcHJld2FybScpCiBzdWJkaXIoJ3Bncm93 bG9ja3MnKQogc3ViZGlyKCdwZ19zdGF0X3N0YXRlbWVudHMnKQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0 aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOWExNDI1MzAx OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQpA QCAtMCwwICsxLDMgQEAKKy9wZ3BhX3BhcnNlci5oCisvcGdwYV9wYXJzZXIuYworL3BncGFfc2Nh bm5lci5jCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMjdkMzQ1MWQ1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsNDUgQEAKKyMgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfcGxhbl9hZHZpY2UKK09CSlMgPSBcCisJ JChXSU4zMlJFUykgXAorCXBnX3BsYW5fYWR2aWNlLm8gXAorCXBncGFfYXN0Lm8gXAorCXBncGFf Y29sbGVjdG9yLm8gXAorCXBncGFfaWRlbnRpZmllci5vIFwKKwlwZ3BhX2pvaW4ubyBcCisJcGdw YV9vdXRwdXQubyBcCisJcGdwYV9wYXJzZXIubyBcCisJcGdwYV9wbGFubmVyLm8gXAorCXBncGFf c2Nhbi5vIFwKKwlwZ3BhX3NjYW5uZXIubyBcCisJcGdwYV90cm92ZS5vIFwKKwlwZ3BhX3dhbGtl ci5vCisKK0VYVEVOU0lPTiA9IHBnX3BsYW5fYWR2aWNlCitEQVRBID0gcGdfcGxhbl9hZHZpY2Ut LTEuMC5zcWwKK1BHRklMRURFU0MgPSAicGdfcGxhbl9hZHZpY2UgLSBoZWxwIHRoZSBwbGFubmVy IGdldCB0aGUgcmlnaHQgcGxhbiIKKworUkVHUkVTUyA9IGdhdGhlciBqb2luX29yZGVyIGpvaW5f c3RyYXRlZ3kgcGFydGl0aW9ud2lzZSBzY2FuCisKK0VYVFJBX0NMRUFOID0gcGdwYV9wYXJzZXIu aCBwZ3BhX3BhcnNlci5jIHBncGFfc2Nhbm5lci5jCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05G SUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5j bHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL3BnX3BsYW5fYWR2aWNlCit0b3Bf YnVpbGRkaXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2Vu ZGlmCisKKyMgU2VlIG5vdGVzIGluIHNyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZSBhYm91dCB0 aGUgZm9sbG93aW5nIHR3byBydWxlcworcGdwYV9wYXJzZXIuaDogcGdwYV9wYXJzZXIuYworCXRv dWNoICRACisKK3BncGFfcGFyc2VyLmM6IEJJU09ORkxBR1MgKz0gLWQKKworIyBGb3JjZSB0aGVz ZSBkZXBlbmRlbmNpZXMgdG8gYmUga25vd24gZXZlbiB3aXRob3V0IGRlcGVuZGVuY3kgaW5mbyBi dWlsdDoKK3BncGFfcGFyc2VyLm8gcGdwYV9zY2FubmVyLm86IHBncGFfcGFyc2VyLmgKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1OTBj ZDAzY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUK QEAgLTAsMCArMSwyNzUgQEAKK2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FCisKK1BsYW4g QWR2aWNlCis9PT09PT09PT09PQorCitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbWluaS1sYW5n dWFnZSBmb3IgInBsYW4gYWR2aWNlIiB0aGF0IGFsbG93cyBmb3IKK2NvbnRyb2wgb2YgY2VydGFp biBrZXkgcGxhbm5lciBkZWNpc2lvbnMuIEdvYWxzIGluY2x1ZGUgKDEpIGVuZm9yY2luZyBwbGFu CitzdGFiaWxpdHkgKG15IHByZXZpb3VzIHBsYW4gd2FzIGdvb2QgYW5kIEkgd291bGQgbGlrZSB0 byBrZWVwIGdldHRpbmcgYQorc2ltaWxhciBvbmUpIGFuZCAoMikgYWxsb3dpbmcgdXNlcnMgdG8g ZXhwZXJpbWVudCB3aXRoIHBsYW5zIG90aGVyIHRoYW4KK3RoZSBvbmUgcHJlZmVycmVkIGJ5IHRo ZSBvcHRpbWl6ZXIuIE5vbi1nb2FscyBpbmNsdWRlICgxKSBjb250cm9sbGluZworZXZlcnkgcG9z c2libGUgcGxhbm5lciBkZWNpc2lvbiBhbmQgKDIpIGZvcmNpbmcgY29uc2lkZXJhdGlvbiBvZiBw bGFucwordGhhdCB0aGUgb3B0aW1pemVyIHJlamVjdHMgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiBj b3N0LiAoVGhlcmUgaXMgc29tZQorcm9vbSBmb3IgYmlrZXNoZWRkaW5nIGFib3V0IHdoYXQgZXhh Y3RseSB0aGlzIG5vbi1nb2FsIG1lYW5zOiB3aGF0IGlmCit3ZSBza2lwIHBhdGggZ2VuZXJhdGlv biBlbnRpcmVseSBmb3IgYSBjZXJ0YWluIGNhc2Ugb24gdGhlIHRoZW9yeSB0aGF0Cit3ZSBrbm93 IGl0IGNhbm5vdCB3aW4gb24gY29zdD8gRG9lcyB0aGF0IGNvdW50IGFzIGEgY29zdC1iYXNlZCBy ZWplY3Rpb24KK2V2ZW4gdGhvdWdoIG5vIGNvc3Qgd2FzIGV2ZXIgY29tcHV0ZWQ/KQorCitHZW5l cmFsbHksIHBsYW4gYWR2aWNlIGlzIGEgc2VyaWVzIG9mIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGFk dmljZSBpdGVtcywKK2VhY2ggb2Ygd2hpY2ggYXBwbGllcyBhbiBhZHZpY2UgdGFnIHRvIGEgbGlz dCBvZiBhZHZpY2UgdGFyZ2V0cy4gRm9yCitleGFtcGxlLCAiU0VRX1NDQU4oZm9vKSBIQVNIX0pP SU4oYmFyQHNzKSIgY29udGFpbnMgdHdvIGl0ZW1zIG9mIGFkdmljZSwKK3RoZSBmaXJzdCBvZiB3 aGljaCBhcHBsaWVzIHRoZSBTRVFfU0NBTiB0YWcgdG8gImZvbyIgYW5kIHRoZSBzZWNvbmQgb2YK K3doaWNoIGFwcGxpZXMgdGhlIEhBU0hfSk9JTiB0YWcgdG8gImJhckBzcyIuIEluIHRoaXMgc2lt cGxlIGV4YW1wbGUsIGVhY2gKK3RhcmdldCBpZGVudGlmaWVzIGEgc2luZ2xlIHJlbGF0aW9uOyBz ZWUgIlJlbGF0aW9uIElkZW50aWZpZXJzIiwgYmVsb3cuCitBZHZpY2UgdGFncyBjYW4gYWxzbyBi ZSBhcHBsaWVkIHRvIGdyb3VwcyBvZiByZWxhdGlvbnM7IGZvciBleGFtcGxlLAorIkhBU0hfSk9J TihiYXogKGJsZXRjaCBxdXV4KSkiIGFwcGxpZXMgdGhlIEhBU0hfSk9JTiB0YWcgdG8gdGhlIHNp bmdsZQorcmVsYXRpb24gaWRlbnRpZmllciAiYmF6IiBhcyB3ZWxsIGFzIHRvIHRoZSAyLWl0ZW0g bGlzdCBjb250YWluaW5nCisiYmxldGNoIiBhbmQgInF1dXgiLgorCitDcml0aWNhbGx5LCB0aGlz IG1vZHVsZSBrbm93cyBib3RoIGhvdyB0byBnZW5lcmF0ZSBwbGFuIGFkdmljZSBmcm9tIGFuCith bHJlYWR5LWV4aXN0aW5nIHBsYW4sIGFuZCBhbHNvIGhvdyB0byBlbmZvcmNlIGl0IGR1cmluZyBm dXR1cmUgcGxhbm5pbmcKK2N5Y2xlcy4gRXZlcnl0aGluZyBpdCBkb2VzIGlzIGludGVuZGVkIHRv IGJlICJyb3VuZC10cmlwIHNhZmUiOiBpZiB5b3UKK2dlbmVyYXRlIGFkdmljZSBmcm9tIGEgcGxh biBhbmQgdGhlbiBmZWVkIHRoYXQgYmFjayBpbnRvIGEgZnV0dXJlIHBsYW5pbmcKK2N5Y2xlLCBl YWNoIHBpZWNlIG9mIGFkdmljZSBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBhcHBseSB0byB0aGUg ZXhhY3RseSB0aGUKK3NhbWUgcGFydCBvZiB0aGUgcXVlcnkgZnJvbSB3aGljaCBpdCB3YXMgZ2Vu ZXJhdGVkIHdpdGhvdXQgYW1iaWd1aXR5IG9yCitndWVzc3dvcmssIGFuZCBpdCBzaG91bGQgc3Vj Y2VzZnVsbHkgZW5mb3JjZSB0aGUgc2FtZSBwbGFubmluZyBkZWNpc2lvbiB0aGF0CitsZWQgdG8g aXQgYmVpbmcgZ2VuZXJhdGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTm90ZSB0aGF0IHRoZXJlIGlz IG5vCitpbnRlbnRpb24gdGhhdCB0aGVzZSBndWFyYW50ZWVzIGhvbGQgaW4gdGhlIHByZXNlbmNl IG9mIGludGVydmVuaW5nIERETDsKK2UuZy4gaWYgeW91IGNoYW5nZSB0aGUgcHJvcGVydGllcyBv ZiBhIGZ1bmN0aW9uIHNvIHRoYXQgYSBzdWJxdWVyeSBpcyBubworbG9uZ2VyIGlubGluZWQsIG9y IGlmIHlvdSBkcm9wIGFuIGluZGV4IG5hbWVkIGluIHRoZSBwbGFuIGFkdmljZSwgdGhlIGFkdmlj ZQoraXNuJ3QgZ29pbmcgdG8gd29yayBhbnkgbW9yZS4gVGhhdCdzIGV4cGVjdGVkLgorCitUaGlz IG1vZHVsZSBhaW1zIHRvIGZvcmNlIHRoZSBwbGFubmVyIHRvIGZvbGxvdyBhbnkgcHJvdmlkZWQg YWR2aWNlIHdpdGhvdXQKK3JlZ2FyZCB0byB3aGV0aGVyIGl0IGlzIGFwcGVhcnMgdG8gYmUgZ29v ZCBhZHZpY2Ugb3IgYmFkIGFkdmljZS4gIElmIHRoZQordXNlciBwcm92aWRlcyBiYWQgYWR2aWNl LCB3aGV0aGVyIGRlcml2ZWQgZnJvbSBhIHByZXZpb3VzbHktZ2VuZXJhdGVkIHBsYW4KK29yIG1h bnVhbGx5IHdyaXR0ZW4sIHRoZXkgbWF5IGdldCBhIGJhZCBwbGFuLiBXZSByZWdhcmQgdGhpcyBh cyB1c2VyIGVycm9yLAorbm90IGEgZGVmZWN0IGluIHRoaXMgbW9kdWxlLiBJdCBzZWVtcyBsaWtl bHkgdGhhdCBhcHBseWluZyBhZHZpY2UKK2p1ZGljaW91c2x5IGFuZCBvbmx5IHdoZW4gdHJ1bHkg cmVxdWlyZWQgdG8gYXZvaWQgcHJvYmxlbXMgd2lsbCBiZSBhIG1vcmUKK3N1Y2Nlc3NmdWwgc3Ry YXRlZ3kgdGhhbiBhcHBseWluZyBpdCB3aXRoIGEgYnJvYWQgYnJ1c2gsIGJ1dCB1c2VycyBhcmUg ZnJlZQordG8gZXhwZXJpbWVudCB3aXRoIHdoYXRldmVyIHN0cmF0ZWdpZXMgdGhleSB0aGluayBi ZXN0LgorCitSZWxhdGlvbiBJZGVudGlmaWVycworPT09PT09PT09PT09PT09PT09PT0KKworVW5p cXVlbHkgaWRlbnRpZnlpbmcgdGhlIHBhcnQgb2YgYSBxdWVyeSB0byB3aGljaCBhIGNlcnRhaW4g cGllY2Ugb2YKK2FkdmljZSBhcHBsaWVzIGlzIGhhcmRlciB0aGFuIGl0IHNvdW5kcy4gT3VyIGJh c2ljIGFwcHJvYWNoIGlzIHRvIHVzZQorcmVsYXRpb24gYWxpYXNlcyBhcyBhIHN0YXJ0aW5nIHBv aW50LCBhbmQgdGhlbiBkaXNhbWJpZ3VhdGUuIFRoZXJlIGFyZQordGhyZWUgd2F5cyB0aGF0IHNh bWUgcmVsYXRpb24gYWxpYXMgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzOgorCisxLiBJdCBjYW4g YXBwZWFyIGluIG1vcmUgdGhhbiBvbmUgc3VicXVlcnkuCisKKzIuIEl0IGNhbiBhcHBlYXIgbW9y ZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc3VicXVlcnksCisgICBlLmcuIChmb28gSk9JTiBiYXIp IHggSk9JTiBmb28uCisKKzMuIFRoZSB0YWJsZSBjYW4gYmUgcGFydGl0aW9uZWQuCisKK0FueSBj b21iaW5hdGlvbiBvZiB0aGVzZSB0aGluZ3MgY2FuIG9jY3VyIHNpbXVsdGFuZW91c2x5LiAgVGhl cmVmb3JlLCBvdXIKK2dlbmVyYWwgc3ludGF4IGZvciBhIHJlbGF0aW9uIGlkZW50aWZpZXIgaXM6 CisKK2FsaWFzX25hbWUjb2NjdXJyZW5jZV9udW1iZXIvcGFydGl0aW9uX3NjaGVtYS5wYXJ0aXRp b25fbmFtZUBwbGFuX25hbWUKKworQWxsIGNvbXBvbmVudHMgZXhjZXB0IGZvciB0aGUgYWxpYXNf bmFtZSBhcmUgb3B0aW9uYWwgYW5kIGluY2x1ZGVkIG9ubHkKK3doZW4gcmVxdWlyZWQuIFdoZW4g YSBjb21wb25lbnQgaXMgb21pdHRlZCwgdGhlIGFzc29jaWF0ZWQgcHVuY3R1YXRpb24KK211c3Qg YWxzbyBiZSBvbWl0dGVkLiBPY2N1cnJlbmNlIG51bWJlcnMgYXJlIGNvdW50ZWQgaWdub3Jpbmcg Y2hpbGRyZW4gb2YKK3BhcnRpdGlvbmVkIHRhYmxlcy4gIFdoZW4gdGhlIGdlbmVyYXRlZCBvY2N1 cnJlbmNlIG51bWJlciBpcyAxLCB3ZSBvbWl0Cit0aGUgb2NjdXJyZW5jZSBudW1iZXIuIFRoZSBw YXJ0aXRpb24gc2NoZW1hIGFuZCBwYXJ0aXRpb24gbmFtZSBhcmUgaW5jbHVkZWQKK29ubHkgZm9y IGNoaWxkcmVuIG9mIHBhcnRpdGlvbmVkIHRhYmxlcy4gSW4gZ2VuZXJhdGVkIGFkdmljZSwgdGhl CitwYXJ0aXRpb25fc2NoZW1hIGlzIGFsd2F5cyBpbmNsdWRlZCB3aGVuZXZlciB0aGVyZSBpcyBh IHBhcnRpdGlvbl9uYW1lLAorYnV0IHVzZXItd3JpdHRlbiBhZHZpY2UgbWF5IG1lbnRpb24gdGhl IG5hbWUgYW5kIG9taXQgdGhlIHNjaGVtYS4gVGhlCitwbGFuX25hbWUgaXMgb21pdHRlZCBmb3Ig dGhlIHRvcC1sZXZlbCBQbGFubmVySW5mby4KKworU2NhbiBBZHZpY2UKKz09PT09PT09PT09CisK K0ZvciBtYW55IHR5cGVzIG9mIHNjYW4sIG5vIGFkdmljZSBpcyBnZW5lcmF0ZWQgb3IgcG9zc2li bGU7IGZvciBpbnN0YW5jZSwKK2Egc3VicXVlcnkgaXMgYWx3YXlzIHNjYW5uZWQgdXNpbmcgYSBz dWJxdWVyeSBzY2FuLiBXaGlsZSB0aGF0IHNjYW4gbWF5IGJlCitlbGlkZWQgdmlhIHNldHJlZnMg cHJvY2Vzc2luZywgdGhpcyBkb2Vzbid0IGNoYW5nZSB0aGUgZmFjdCB0aGF0IG9ubHkgb25lCiti YXNpYyBhcHByb2FjaCBleGlzdHMuIEhlbmNlLCBzY2FuIGFkdmljZSBhcHBsaWVzIG1vc3RseSB0 byByZWxhdGlvbnMsIHdoaWNoCitjYW4gYmUgc2Nhbm5lZCBpbiBtdWx0aXBsZSB3YXlzLgorCitX ZSB0ZW5kIHRvIHRoaW5rIG9mIGEgc2NhbiBhcyB0YXJnZXRpbmcgYSBzaW5nbGUgcmVsYXRpb24s IGFuZCB0aGF0J3MKK25vcm1hbGx5IHRoZSBjYXNlLCBidXQgaXQgZG9lc24ndCBoYXZlIHRvIGJl LiBGb3IgaW5zdGFuY2UsIGlmIGEgam9pbiBpcworcHJvdmVuIGVtcHR5LCB0aGUgd2hvbGUgdGhp bmcgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgUmVzdWx0IG5vZGUKK3doaWNoLCBpbiBl ZmZlY3QsIGlzIGEgZGVnZW5lcmF0ZSBzY2FuIG9mIGV2ZXJ5IHJlbGF0aW9uIGluIHRoZSBjb2xs YXBzZWQKK3BvcnRpb24gb2YgdGhlIGpvaW4gdHJlZS4gU2ltaWxhcmx5LCBpdCdzIHBvc3NpYmxl IHRvIGluamVjdCBhIGN1c3RvbSBzY2FuCitpbiBzdWNoIGEgd2F5IHRoYXQgaXQgcmVwbGFjZXMg YW4gZW50aXJlIGpvaW4uIElmIHdlIGV2ZXIgZW1pdCBhZHZpY2UKK2ZvciB0aGVzZSBjYXNlcywg aXQgd291bGQgdGFyZ2V0IHNldHMgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgc3Vycm91bmRlZAor YnkgY3VybHkgYnJhbmNlcywgZS5nLiBTT01FX1NPUlRfT0ZfU0NBTihmb28gKGJhciBiYXopKSB3 b3VsZCBtZWFuIHRoYXQgdGhlCit0aGUgZ2l2ZW4gc2NhbiB0eXBlIHdvdWxkIGJlIHVzZWQgZm9y IGZvbyBhcyBhIHNpbmdsZSByZWxhdGlvbiBhbmQgYWxzbyB0aGUKK2NvbWJpbmF0aW9uIG9mIGJh ciBhbmQgYmF6IGFzIGEgam9pbiBwcm9kdWN0LiBXZSBoYXZlIG5vIHN1Y2ggY2FzZXMgYXQKK3By ZXNlbnQuCisKK0ZvciBpbmRleCBhbmQgaW5kZXgtb25seSBzY2FucywgYm90aCB0aGUgcmVsYXRp b24gYmVpbmcgc2Nhbm5lZCBhbmQgdGhlCitpbmRleCBvciBpbmRleGVzIGJlaW5nIHVzZWQgbXVz dCBiZSBzcGVjaWZpZWQuIEZvciBleGFtcGxlLCBJTkRFWF9TQ0FOKGZvbworZm9vX2FfaWR4IGJh ciBiYXJfYl9pZHgpIGluZGljYXRlcyB0aGF0IGFuIGluZGV4IHNjYW4gKG5vdCBhbiBpbmRleC1v bmx5CitzY2FuKSBzaG91bGQgYmUgdXNlZCBvbiBmb29fYV9pZHggd2hlbiBzY2FubmluZyBmb28s IGFuZCB0aGF0IGFuIGluZGV4IHNjYW4KK3Nob3VsZCBiZSB1c2VkIG9uIGJhcl9iX2lkeCB3aGVu IHNjYW5uaW5nIGJhci4KKworQml0bWFwIGhlYXAgc2NhbnMgYWxsb3cgZm9yIGEgbW9yZSBjb21w bGljYXRlZCBpbmRleCBzcGVjaWZpY2F0aW9uLiBGb3IKK2V4YW1wbGUsIEJJVE1BUF9IRUFQX1ND QU4oZm9vICYmKGZvb19hX2lkeCB8fChmb29fYl9pZHggZm9vX2NfaWR4KSkpIHNheXMKK3RoYXQg Zm9vIHNob3VsZCBiZSBzY2FubmVkIHVzaW5nIGEgQml0bWFwSGVhcFNjYW4gb3ZlciBhIEJpdG1h cEFuZCBiZXR3ZWVuCitmb29fYV9pZHggYW5kIHRoZSByZXN1bHQgb2YgYSBCaXRtYXBPciBiZXR3 ZWVuIGZvb19iX2lkeCBhbmQgZm9vX2NfaWR4LgorCitYWFg6IEN1cnJlbnRseSwgQklUTUFQX0hF QVBfU0NBTiBkb2VzIG5vdCBlbmZvcmNlIHRoZSBpbmRleCBzcGVjaWZpY2F0aW9uLAorYmVjYXVz ZSB0aGUgYXZhaWxhYmxlIGhvb2tzIGFyZSBpbnN1ZmZpY2llbnQgdG8gZG8gc28uIEl0J3MgcG9z c2libGUgdGhhdAordGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBleGNsdWRlIHRoZSBpbmRleCBz cGVjaWZpY2F0aW9uIGFsdG9nZXRoZXIgYW5kCitzaW1wbHkgaW5zaXN0IHRoYXQgc29tZSBzb3J0 IG9mIGJpdG1hcCBoZWFwIHNjYW4gaXMgdXNlZDsgYWx0ZXJuYXRpdmVseSwKK3dlIG5lZWQgYmV0 dGVyIGhvb2tzLgorCitKb2luIE9yZGVyIEFkdmljZQorPT09PT09PT09PT09PT09PT0KKworVGhl IEpPSU5fT1JERVIgdGFnIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggc2V2ZXJhbCB0YWJs ZXMgdGhhdCBhcmUKK3BhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtIHNob3VsZCBiZSBqb2lu ZWQuIEVhY2ggc3VicXVlcnkgKGV4Y2VwdCBmb3IKK3Rob3NlIHRoYXQgYXJlIGlubGluZWQpIGlz IGEgc2VwYXJhdGUgam9pbiBwcm9ibGVtLiBXaXRoaW4gYSBzdWJxdWVyeSwKK3BhcnRpdGlvbndp c2Ugam9pbnMgY2FuIGNyZWF0ZSBhZGRpdGlvbmFsLCBzZXBhcmF0ZSBqb2luIHByb2JsZW1zLiBI ZW5jZSwKK3F1ZXJpZXMgaW52b2x2aW5nIHBhcnRpdGlvbndpc2Ugam9pbnMgbWF5IHVzZSBKT0lO X09SREVSKCkgbWFueSB0aW1lcy4KKworV2UgdGFrZSB0aGUgY2Fub25pY2FsIGpvaW4gc3RydWN0 dXJlIHRvIGJlIGFuIG91dGVyLWRlZXAgdHJlZSwgc28KK0pPSU5fT1JERVIodDEgdDIgdDMpIHNh eXMgdGhhdCB0MSBpcyB0aGUgZHJpdmluZyB0YWJsZSBhbmQgc2hvdWxkIGJlIGpvaW5lZAorZmly c3QgdG8gdDIgYW5kIHRoZW4gdG8gdDMuIElmIHRoZSBqb2luIHByb2JsZW0gaW52b2x2ZXMgYWRk aXRpb25hbCB0YWJsZXMsCit0aGV5IGNhbiBiZSBqb2luZWQgaW4gYW55IG9yZGVyIGFmdGVyIHRo ZSBqb2luIGJldHdlZW4gdDEsIHQyLCBhbmQgdDMgaGFzCitiZWVuIGNvbnN0cnVjdHVyZWQuIEdl bmVyYXRlZCBqb2luIGFkdmljZSBhbHdheXMgbWVudGlvbnMgYWxsIHRhYmxlcworaW4gdGhlIGpv aW4gcHJvYmxlbSwgYnV0IG1hbnVhbGx5IHdyaXR0ZW4gam9pbiBhZHZpY2UgbmVlZCBub3QgZG8g c28uCisKK0ZvciB0cmVlcyB3aGljaCBhcmUgbm90IG91dGVyLWRlZXAsIHBhcmVudGhlc2VzIGNh biBiZSB1c2VkLiBGb3IgZXhhbXBsZSwKK0pPSU5fT1JERVIodDEgKHQyIHQzKSkgc2F5cyB0aGF0 IHRoZSB0b3AtbGV2ZWwgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0aGUKK291dGVyIHNpZGUgYW5k IGEgam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIgc2lkZS4gVGhhdCBqb2luIHNo b3VsZAorYmUgY29uc3RydWN0ZWQgc28gdGhhdCB0MiBpcyBvbiB0aGUgb3V0ZXIgc2lkZSBhbmQg dDMgaXMgb24gdGhlIGlubmVyIHNpZGUuCisKK0luIHNvbWUgY2FzZXMsIGl0J3Mgbm90IHBvc3Np YmxlIHRvIGZ1bGx5IHNwZWNpZnkgdGhlIGpvaW4gb3JkZXIgaW4gdGhpcyB3YXkuCitGb3IgZXhh bXBsZSwgaWYgdDIgYW5kIHQzIGFyZSBiZWluZyBzY2FubmVkIGJ5IGEgc2luZ2xlIGN1c3RvbSBz Y2FuIG9yIGZvcmVpZ24KK3NjYW4sIG9yIGlmIGEgcGFydGl0aW9ud2lzZSBqb2luIGlzIGJlaW5n IHBlcmZvcm1lZCBiZXR3ZWVuIHRob3NlIHRhYmxlcywgdGhlbgoraXQncyBpbXBvc3NpYmxlIHRv IHNheSB0aGF0IHQyIGlzIHRoZSBvdXRlciB0YWJsZSBhbmQgdDMgaXMgdGhlIGlubmVyIHRhYmxl LAorb3IgdGhlIG90aGVyIHdheSBhcm91bmQ7IGl0J3MganVzdCB1bmRlZmluZWQuIEluIHN1Y2gg Y2FzZXMsIHdlIGdlbmVyYXRlCitqb2luIGFkdmljZSB0aGF0IHVzZXMgY3VybHkgYnJhY2VzLCBp bnRlbmRpbmcgdG8gaW5kaWNhdGUgYSBsYWNrIG9mIG9yZGVyaW5nOgorSk9JTl9PUkRFUih0MSB7 dDIgdDN9KSBzYXlzIHRoYXQgdGhlIHVwcGVybW9zdCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRo ZSBvdXRlcgorc2lkZSBhbmQgc29tZSBraW5kIG9mIGpvaW4gYmV0d2VlbiB0MiBhbmQgdDMgb24g dGhlIGlubmVyIHNpZGUsIGJ1dCB3aXRob3V0CitzYXlpbmcgaG93IHRoYXQgam9pbiBtdXN0IGJl IHBlcmZvcm1lZCBvciBhbnl0aGluZyBhYm91dCB3aGljaCByZWxhdGlvbiBzaG91bGQKK2FwcGVh ciBvbiB3aGljaCBzaWRlIG9mIHRoZSBqb2luLCBvciBldmVuIHdoZXRoZXIgdGhpcyBraW5kIG9m IGpvaW4gaGFzIHNpZGVzLgorCitKb2luIFN0cmF0ZWd5IEFkdmljZQorPT09PT09PT09PT09PT09 PT09PT0KKworVGFncyBzdWNoIGFzIE5FU1RFRF9MT09QX1BMQUlOIHNwZWNpZnkgdGhlIG1ldGhv ZCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvCitwZXJmb3JtIGEgY2VydGFpbiBqb2luLiBNb3JlIHNw ZWNpZmljYWxseSwgTkVTVEVEX0xPT1BfUExBSU4oeCAoeSB6KSkgc2F5cwordGhhdCB0aGUgcGxh biBzaG91bGQgcHV0IHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ4IiBvbiB0aGUg aW5uZXIKK3NpZGUgb2YgYSBwbGFpbiBuZXN0ZWQgbG9vcCAob25lIHdpdGhvdXQgbWF0ZXJpYWxp emF0aW9uIG9yIG1lbW9pemF0aW9uKQorYW5kIHRoYXQgaXQgc2hvdWxkIGFsc28gcHV0IGEgam9p biBiZXR3ZWVuIHRoZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzCisieSIgYW5kIHRoZSBy ZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ6IiBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIG5l c3RlZAorbG9vcC4gSGVuY2UsIGZvciBhbiBOLXRhYmxlIGpvaW4gcHJvYmxlbSwgdGhlcmUgd2ls bCBiZSBOLTEgcGllY2VzIG9mIGpvaW4KK3N0cmF0ZWd5IGFkdmljZTsgbm8gam9pbiBzdHJhdGVn eSBhZHZpY2UgaXMgcmVxdWlyZWQgZm9yIHRoZSBvdXRlcm1vc3QKK3RhYmxlIGluIHRoZSBqb2lu IHByb2JsZW0uCisKK0NvbnNpZGVyaW5nIHRoYXQgd2UgaGF2ZSBib3RoIGpvaW4gb3JkZXIgYWR2 aWNlIGFuZCBqb2luIHN0cmF0ZWd5IGFkdmljZSwKK2l0IG1pZ2h0IHNlZW0gbmF0dXJhbCB0byBz YXkgdGhhdCBORVNURURfTE9PUF9QTEFJTih4KSBzaG91bGQgYmUgcmVkZWZpbmVkCit0byBtZWFu IHRoYXQgeCBzaG91bGQgYXBwZWFyIGJ5IGl0c2VsZiBvbiBvbmUgc2lkZSBvciB0aGUgb3RoZXIg b2YgYSBuZXN0ZWQKK2xvb3AsIHJhdGhlciB0aGFuIHNwZWNpZmljYWxseSBvbiB0aGUgaW5uZXIg c2lkZSwgYnV0IHRoaXMgZGVmaW5pdGlvbiBhcHBlYXJzCit1c2VsZXNzIGluIHByYWN0aWNlLiBJ dCBnaXZlcyB0aGUgcGxhbm5lciB0b28gbXVjaCBmcmVlZG9tIHRvIGRvIHRoaW5ncyB0aGF0Citi ZWFyIGxpdHRsZSByZXNlbWJsYW5jZSB0byB3aGF0IHRoZSB1c2VyIHByb2JhYmx5IGhhZCBpbiBt aW5kLiBUaGlzIG1ha2VzCitvbmx5IGEgbGltaXRlZCBhbW91bnQgb2YgcHJhY3RpY2FsIGRpZmZl cmVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBtZXJnZSBqb2luIG9yCit1bnBhcmFtZXRlcml6ZWQgbmVz dGVkIGxvb3AsIGJ1dCBmb3IgYSBwYXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wIG9yIGEgaGFzaAor am9pbiwgdGhlIHR3byBzaWRlcyBhcmUgdHJlYXRlZCB2ZXJ5IGRpZmZlcmVudGx5IGFuZCBzYXlp bmcgdGhhdCBhIGNlcnRhaW4KK3JlbGF0aW9uIHNob3VsZCBiZSBpbnZvbHZlZCBpbiBvbmUgb2Yg dGhvc2Ugb3BlcmF0aW9ucyB3aXRob3V0IHNheWluZyB3aGljaAorcm9sZSBpdCBzaG91bGQgdGFr ZSBpc24ndCBzYXlpbmcgbXVjaC4KKworVGhpcyBjaG9pY2Ugb2YgZGVmaW5pdGlvbiBpbXBsaWVz IHRoYXQgam9pbiBzdHJhdGVneSBhZHZpY2UgYWxzbyBpbXBvc2VzIHNvbWUKK2pvaW4gb3JkZXIg Y29uc3RyYWludHMuIEZvciBleGFtcGxlLCBnaXZlbiBhIGpvaW4gYmV0d2VlbiBmb28gYW5kIGJh ciwKK0hBU0hfSk9JTihiYXIpIGltcGxpZXMgdGhhdCBmb28gaXMgdGhlIGRyaXZpbmcgdGFibGUu IE90aGVyd2lzZSwgaXQgd291bGQKK2JlIGltcG9zc2libGUgdG8gcHV0IGJhciBiZW5lYXRoIHRo ZSBpbm5lciBzaWRlIG9mIGEgSGFzaCBKb2luLgorCitOb3RlIHRoYXQsIGdpdmVuIHRoaXMgZGVm aW5pdGlvbiwgaXQncyByZWFzb25hYmxlIHRvIGNvbnNpZGVyIGRlbGV0aW5nIHRoZQoram9pbiBv cmRlciBhZHZpY2UgYnV0IGFwcGx5aW5nIHRoZSBqb2luIHN0cmF0ZWd5IGFkdmljZS4gRm9yIGV4 YW1wbGUsCitjb25zaWRlciBhIHN0YXIgc2NoZW1hIHdpdGggdGFibGVzIGZhY3QsIGRpbTEsIGRp bTIsIGRpbTMsIGRpbTQsIGFuZCBkaW01LgorVGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFk dmljZSBtaWdodCBzcGVjaWZ5IEpPSU5fT1JERVIoZmFjdCBkaW0xIGRpbTMKK2RpbTQgZGltMiBk aW01KSBIQVNIX0pPSU4oZGltMiBkaW00KSBORVNURURfTE9PUF9QTEFJTihkaW0xIGRpbTMgZGlt NSkuCitEZWxldGluZyB0aGUgSk9JTl9PUkRFUiBhZHZpY2UgYWxsb3dzIHRoZSBwbGFubmVyIHRv IHJlb3JkZXIgdGhlIGpvaW5zCitob3dldmVyIGl0IGxpa2VzIHdoaWxlIHN0aWxsIGZvcmNpbmcg dGhlIHNhbWUgY2hvaWNlIG9mIGpvaW4gbWV0aG9kLiBUaGlzCitzZWVtcyBwb3RlbnRpYWxseSB1 c2VmdWwsIGFuZCBpcyBvbmUgcmVhc29uIHdoeSBhIHVuaWZpZWQgc3ludGF4IHRoYXQgY29udHJv bHMKK2JvdGggam9pbiBvcmRlciBhbmQgam9pbiBtZXRob2QgaW4gYSBzaW5nbGUgbG9jdXRpb24g d2FzIG5vdCBjaG9zZW4uCisKK0FkdmljZSBDb21wbGV0ZW5lc3MKKz09PT09PT09PT09PT09PT09 PT0KKworQW4gZXNzZW50aWFsIGd1aWRpbmcgcHJpbmNpcGxlIGlzIHRoYXQgbm8gaW5mZXJlbmNl IG1heSBtYWRlIG9uIHRoZSBiYXNpcworb2YgdGhlIGFic2VuY2Ugb2YgYWR2aWNlLiBUaGUgdXNl ciBpcyBlbnRpdGxlZCB0byByZW1vdmUgYW55IHBvcnRpb24gb2YgdGhlCitnZW5lcmF0ZWQgYWR2 aWNlIHdoaWNoIHRoZXkgZGVlbSB1bnN1aXRhYmxlIG9yIGNvdW50ZXJwcm9kdWN0aXZlIGFuZCB0 aGUKK3Jlc3VsdCBzaG91bGQgb25seSBiZSB0byBpbmNyZWFzZSB0aGUgZmxleGliaWxpdHkgYWZm b3JkZWQgdG8gdGhlIHBsYW5uZXIuCitUaGlzIG1lYW5zIHRoYXQgaWYgYWR2aWNlIGNhbiBzYXkg dGhhdCBhIGNlcnRhaW4gb3B0aW1pemF0aW9uIG9yIHRlY2huaXF1ZQorc2hvdWxkIGJlIHVzZWQs IGl0IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIG9wdGltaXphdGlvbiBvcgor dGVjaG5pcXVlIHNob3VsZCBub3QgYmUgdXNlZC4gV2Ugc2hvdWxkIG5ldmVyIGFzc3VtZSB0aGF0 IHRoZSBhYnNlbmNlIG9mIGFuCitpbnN0cnVjdGlvbiB0byBkbyBhIGNlcnRhaW4gdGhpbmcgbWVh bnMgdGhhdCBpdCBzaG91bGQgbm90IGJlIGRvbmU7IGFsbAoraW5zdHJ1Y3Rpb25zIG11c3QgYmUg ZXhwbGljaXQuCisKK1NlbWlqb2luIFVuaXF1ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0KKwor RmFjZWQgd2l0aCBhIHNlbWlqb2luLCB0aGUgcGxhbm5lciBjb25zaWRlcnMgYm90aCBhIGRpcmVj dCBpbXBsZW1lbnRhdGlvbgorYW5kIGEgcGxhbiB3aGVyZSB0aGUgb25lIHNpZGUgaXMgbWFkZSB1 bmlxdWUgYW5kIHRoZW4gYW4gaW5uZXIgam9pbiBpcworcGVyZm9ybWVkLiBXZSBlbWl0IFNFTUlK T0lOX1VOSVFVRSgpIGFkdmljZSB3aGVuIHRoaXMgdHJhbnNmb3JtYXRpb24gb2NjdXJzCithbmQg U0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSB3aGVuIGl0IGRvZXNuJ3QuIFRoZXNlIGl0ZW1z IHdvcmsgbGlrZQoram9pbiBzdHJhdGVneSBhZHZpY2U6IHRoZSBpbm5lciBzaWRlIG9mIHRoZSBy ZWxldmFudCBqb2luIGlzIG5hbWVkLCBhbmQgdGhlCitjaG9zZW4gam9pbiBvcmRlciBtdXN0IGJl IGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNlIGhhdmluZyBzb21lIGVmZmVjdC4KKworWFhYOiBD dXJyZW50bHksIFNFTUlKT0lOX05PTl9VTklRVUUoKSBhZHZpY2UgaXMgZW1pdHRlZCBpbiBzb21l IHNpdHVhdGlvbnMKK3doZXJlIHRoZSBTRU1JSk9JTl9VTklRVUUoKSBhcHByb2FjaCB3YXMgZGV0 ZXJtaW5lZCB0byBiZSBub24tdmlhYmxlOyBpZGVhbGx5LAord2Ugc2hvdWxkIGF2b2lkIHRoYXQu CisKK1hYWDogUmlnaHQgc2VtaWpvaW5zIGhhdmVuJ3QgYmVlbiBwcm9wZXJseSB0aG91Z2h0IHRo cm91Z2guIFRoZSBhc3NvY2lhdGVkCitjb2RlIHByb2JhYmx5IGp1c3QgZG9lc24ndCB3b3JrLgor CitYWFg6IFNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlIGhhcyBubyBhdXRvbWF0ZWQgdGVzdHMg YW5kIG5lZWQgc3Vic3RhbnRpYWxseQorbW9yZSBtYW51YWwgdGVzdGluZy4KKworUGFydGl0aW9u d2lzZQorPT09PT09PT09PT09PQorCitQQVJUSVRJT05XSVNFKCkgYWR2aXNlIGNhbiBiZSB1c2Vk IHRvIHNwZWNpZnkgYm90aCB0aG9zZSBwYXJ0aXRpb253aXNlIGpvaW5zCit3aGljaCBzaG91bGQg YmUgcGVyZm9ybWVkIGFuZCB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIHBlcmZvcm1lZDsgdGhl IGlkZWEKK2lzIHRoYXQgZWFjaCBhcmd1bWVudCB0byBQQVJUSVRJT05XSVNFIHNwZWNpZmllcyBh IHNldCBvZiByZWxhdGlvbnMgdGhhdAorc2hvdWxkIGJlIHNjYW5uZWQgcGFydGl0aW9ud2lzZSBh ZnRlciBiZWluZyBqb2luZWQgdG8gZWFjaCBvdGhlciBhbmQgbm90aGluZworZWxzZS4gSGVuY2Us IGZvciBleGFtcGxlLCBQQVJUSVRJT05XSVNFKCh0MSB0MikgdDMpIHNwZWNpZmllcyB0aGF0IHRo ZQorcXVlcnkgc2hvdWxkIGNvbnRhaW4gYSBwYXJ0aXRpb253aXNlIGpvaW4gYmV0d2VlbiB0MSBh bmQgdDIgYW5kIHRoYXQgdDMKK3Nob3VsZCBub3QgYmUgcGFydCBvZiBhbnkgcGFydGl0aW9ud2lz ZSBqb2luLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcmVscworaW4gdGhlIHF1ZXJ5LCBzcGVjaWZ5 aW5nIGp1c3QgUEFSVElUSU9OV0lTRSgodDEgdDIpKSB3b3VsZCBoYXZlIHRoZSBzYW1lCitlZmZl Y3QsIHNpbmNlIHRoZXJlIHdvdWxkIGJlIG5vIG90aGVyIHJlbHMgdG8gd2hpY2ggdDMgY291bGQg YmUgam9pbmVkIGluCithIHBhcnRpdGlvbndpc2UgZmFzaGlvbi4KKworUGFyYWxsZWwgUXVlcnkg KEdhdGhlciwgZXRjLikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VhY2ggYXJn dW1lbnQgdG8gR0FUSEVSKCkgb3IgR0FUSEVSX01FUkdFKCkgaXMgYSBzaW5nbGUgcmVsYXRpb24g b3IgYW4KK2V4YWN0IHNldCBvZiByZWxhdGlvbnMgb24gdG9wIG9mIHdoaWNoIGEgR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBub2RlLAorcmVzcGVjdGl2ZWx5LCBzaG91bGQgYmUgcGxhY2VkLiBFYWNo IGFyZ3VtZW50IHRvIE5PX0dBVEhFUigpIGlzIGEgc2luZ2xlCityZWxhdGlvbiB0aGF0IHNob3Vs ZCBub3QgYXBwZWFyIGJlbmVhdGggYW55IEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZTsKK3Ro YXQgaXMsIHBhcmFsbGVsaXNtIHNob3VsZCBub3QgYmUgdXNlZC4KKworSW1wbGljaXQgSm9pbiBP cmRlciBDb25zdHJhaW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVu IEpPSU5fT1JERVIoKSBhZHZpY2UgaXMgbm90IHByb3ZpZGVkIGZvciBhIHBhcnRpY3VsYXIgam9p biBwcm9ibGVtLAorb3RoZXIgcGllY2VzIG9mIGFkdmljZSBtYXkgc3RpbGwgaW5jaWRlbnRhbGx5 IGNvbnN0cmFpbnQgdGhlIGpvaW4gb3JkZXIuCitGb3IgZXhhbXBsZSwgYSB1c2VyIHdobyBzcGVj aWZpZXMgSEFTSF9KT0lOKChmb28gYmFyKSkgaXMgZXhwbGljaXRseSBzYXlpbmcKK3RoYXQgdGhl cmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGggZXhhY3RseSBmb28gYW5kIGJhciBvbiB0aGUg b3V0ZXIKK3NpZGUgb2YgaXQsIGJ1dCB0aGF0IGFsc28gaW1wbGllcyB0aGF0IGZvbyBhbmQgYmFy IG11c3QgYmUgam9pbmVkIHRvCitlYWNoIG90aGVyIGJlZm9yZSBlaXRoZXIgb2YgdGhlbSBpcyBq b2luZWQgdG8gYW55dGhpbmcgZWxzZS4gT3RoZXJ3aXNlLAordGhlIGpvaW4gdGhlIHVzZXIgaXMg YXR0ZW1wdGluZyB0byBjb25zdHJhaW50IHdvbid0IGFjdHVhbGx5IG9jY3VyIGluIHRoZQorcXVl cnksIHdoaWNoIGVuZHMgdXAgbG9va2luZyBsaWtlIHRoZSBzeXN0ZW0gaGFzIGp1c3QgZGVjaWRl ZCB0byBpZ25vcmUKK3RoZSBhZHZpY2UgYWx0b2dldGhlci4KKworRnV0dXJlIFdvcmsKKz09PT09 PT09PT09CisKK1dlIGRvbid0IGhhbmRsZSBjaG9pY2Ugb2YgYWdncmVnYXRpb246IGl0IHdvdWxk IGJlIG5pY2UgdG8gYmUgYWJsZSB0byBmb3JjZQorc29ydGVkIG9yIGdyb3VwZWQgYWdncmVnYXRp b24uIEknbSBndWVzc2luZyB0aGlzIGNhbiBiZSBsZWZ0IHRvIGZ1dHVyZSB3b3JrLgorCitNb3Jl IHNlcmlvdXNseSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCBlYWdlciBhZ2dyZWdhdGlv biwgd2hpY2ggY291bGQKK2hhdmUgYSBsYXJnZSBpbXBhY3Qgb24gdGhlIHNoYXBlIG9mIHRoZSBw bGFuIHRyZWUuIFhYWDogVGhpcyBuZWVkcyBzb21lIHN0dWR5Cit0byBkZXRlcm1pbmUgaG93IGxh cmdlIGEgcHJvYmxlbSBpdCBpcywgYW5kIG1pZ2h0IG5lZWQgdG8gYmUgZml4ZWQgc29vbmVyCity YXRoZXIgdGhhbiBsYXRlci4KKworV2UgZG9uJ3Qgb2ZmZXIgYW55IGNvbnRyb2wgb3ZlciBlc3Rp bWF0ZXMsIG9ubHkgb3V0Y29tZXMuIEl0IHNlZW1zIGxpa2UgYQorZ29vZCBpZGVhIHRvIGluY29y cG9yYXRlIHRoYXQgYWJpbGl0eSBhdCBzb21lIGZ1dHVyZSBwb2ludCwgYXMgcGdfaGludF9wbGFu Citkb2VzLiBIb3dldmVyLCBzaW5jZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGluaXRpYWwgZGV2ZWxv cG1lbnQgd29yayBpcyB0byBiZQorYWJsZSB0byBpbmR1Y2UgdGhlIHBsYW5uZXIgdG8gcmVjcmVh dGUgYSBkZXNpcmVkIHBsYW4gdGhhdCB3b3JrZWQgd2VsbCBpbgordGhlIHBhc3QsIHRoaXMgaGFz IG5vdCBiZWVuIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IGVmZm9ydC4KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDVjNDRhZmY4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKQEAgLTAsMCArMSwzMTkg QEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90 dXBsZV9jb3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK0NS RUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0p IFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGd0X2RpbTsKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQgbm90 IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlkKQor KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9mYWN0 CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitW QUNVVU0gQU5BTFlaRSBndF9mYWN0OworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhlciBN ZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAg ICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3Rf ZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNCByb3dzKQorCistLSBGb3JjZSBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhl ciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29y dCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoKGYgZCkpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkK KyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChmIGQp KQorKDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy KChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU29ydAorICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAtPiAgR2F0aGVyCisgICAgICAg ICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCisoMTYg cm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5k aW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGlt X2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisg ICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAgICAg LT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgR0FUSEVSX01FUkdFKGQpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkK KyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJH RShmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdn YXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBN ZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAg ICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQu aWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDog MQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgR0FUSEVS KGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhF UihmIGQpCisoMjAgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5v X2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBN ZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhl ciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9k aW1fcGtleSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01F UkdFKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BM QUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtl eSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVy KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2lu CisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAg IFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgor ICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgR0FUSEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisg ICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0Uo ZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9 IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGlt IGQKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBN RVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1Ymxp Yy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVy KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2lu CisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAg IFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgor ICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVy CisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg R0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lO X1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dBVEhFUihm KQorKDE5IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIgTWVy Z2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3Qg ZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8K KyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihm KQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTUgcm93cykKKworQ09NTUlUOworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhv dXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVlCisgICBX b3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9mYWN0IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAg IFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBHYXRoZXIKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0g ZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pP SU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dzKQorCitD T01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5f b3JkZXIub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTg3NjUyMzcwYzMKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3Jk ZXIub3V0CkBAIC0wLDAgKzEsMjkyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9fZGltMSAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGltMSwg dmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQor CSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0x OworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4 dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0 ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQg aW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpv X2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0y IChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g am9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CistLSBXZSBleHBlY3Qg dG8gam9pbiB0byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBk MgorLS0gaXMgbW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4o ZDIgZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTYg cm93cykKKworLS0gRm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRo ZXNlIGFyZSB2ZXJ5IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0 aGVtIGFsbCB2aWFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIEhBU0hf Sk9JTihkMSBkMikKKyAgIFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikK KygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEp CisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhh c2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg SGFzaCBDb25kOiAoZDEuaWQgPSBmLmRpbTFfaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZDEgZiBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZDEgZiBkMikKKyAgIEhBU0hfSk9JTihmIGQyKQorICAgU0VRX1NDQU4oZDEgZiBk MikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBq b19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04g Zi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoKGYuZGltMV9pZCA9IGQxLmlkKSBBTkQgKGYu ZGltMl9pZCA9IGQyLmlkKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChk MSBkMikpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgKGQxIGQyKSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQyKQorICAgSEFTSF9K T0lOKGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4 IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVl cnkgaXMgaW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1 Y2luZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCist LSBjYW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSBy ZW9yZGVyZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1Ig Zi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4g IE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAo KGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRp bTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9K T0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FO KGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygxOCByb3dzKQorCistLSBXZSBzaG91 bGQgbm90IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0 LCBiZWNhdXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91 bGQgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3Ig ZiB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworLS0gWFhYOiBUaGUgYWR2aWNlIGZlZWRiYWNr IHNheXMgJ3BhcnRpYWxseSBtYXRjaGVkJyBoZXJlIHdoaWNoIGlzbid0IGV4YWN0bHkKKy0tIHdy b25nIGdpdmVuIHRoZSB3YXkgdGhhdCBmbGFnIGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUsIGJ1dCBp dCdzIGF0IHRoZSB2ZXJ5CistLSBsZWFzdCBjb25mdXNpbmcuIFNvbWV0aGluZyBzaG91bGQgcHJv YmFibHkgYmUgaW1wcm92ZWQgaGVyZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQg PSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9p ZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAg ICAgIERpc2FibGVkOiB0cnVlCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9 ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYu ZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgor ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkMSBkMikgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlO KGYpCisgICBORVNURURfTE9PUF9QTEFJTihkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBO T19HQVRIRVIoZDEgZiBkMikKKygyMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3Qg ZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9O IGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGlt MV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENv bmQ6ICgoKGYuZGltMl9pZCArIDApKSA9ICgoZDIuaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0yIGQyCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZDIgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQyKQorICAgTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGQxIGYg ZDIpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg Sm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkp CisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCAr IDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5 OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Zh Y3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQx KQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEp CisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93cykK KworQ09NTUlUOworLS0gWFhYOiBhZGQgdGVzdHMgZm9yIGpvaW4gb3JkZXIgcHJlZml4IG1hdGNo aW5nCistLSBYWFg6IGpvaW5fb3JkZXIoanVzdG9uZXJlbCkgc2hvdWxkbid0IHJlcG9ydCBwYXJ0 aWFsbHkgbWF0Y2hlZApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3Rl ZC9qb2luX3N0cmF0ZWd5Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9p bl9zdHJhdGVneS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcx ZWUyNmEzMzdhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCwwICsxLDI5NyBAQAorTE9BRCAncGdfcGxhbl9h ZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRF IFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0p IFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGpvaW5fZGltOworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50 IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9k aW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGlt X2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFjdDsKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9p biBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBk LmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0 aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0aGUgaW5uZXIgdGFibGUuCistLSBBbGwgb2Yg dGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBNRVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0 IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBsYW5uZXIga25vd3MgdGhhdCBqb2luX2RpbSAo aWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJlZnVzZSB0byBhZGQgbWFyay9yZXN0b3JlIG92 ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hf Sk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQp CisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFT SF9KT0lOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FU SEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgRGlzYWJsZWQ6 IHRydWUKKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lO X1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQgZCBwdWJs aWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQor ICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGlt X3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4g am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQp CisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFM SVpFKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShk KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgTWVtb2l6ZQor ICAgICAgICAgQ2FjaGUgS2V5OiBmLmRpbV9pZAorICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNh bAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2Rp bSBkCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xP T1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9p bl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9u IGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpv aW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1Bf UExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGlt X3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIE5vdyB0 cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhl IGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEpvaW4KKyAgIEhhc2ggQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBv biBqb2luX2RpbSBkCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgSEFT SF9KT0lOKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklB TElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lk KQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisg ICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFj dF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdF X0pPSU5fTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKQorICAg SU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1f aWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBN ZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2Zh Y3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJH RV9KT0lOX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4o ZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9P UF9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKQorICAgU0VR X1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4g am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNZW1vaXplCisgICAgICAg ICBDYWNoZSBLZXk6IGQuaWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9NRU1P SVpFKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3Rf ZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2Nh biBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lk IG9uIGpvaW5fZmFjdCBmCisgICAgICAgICBJbmRleCBDb25kOiAoZGltX2lkID0gZC5pZCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RF RF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5q b2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7 CistLSBXZSBjYW4ndCBmb3JjZSBhIGZvcmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywg YmVjYXVzZSB0aGV5CistLSBhcmVuJ3QgZm9yZWlnbiB0YWJsZXMuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRy dWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEZPUkVJR05fSk9JTigoZiBk KSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAg IElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCiso MTMgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9l eHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvcGFydGl0aW9ud2lzZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmRmMGYwNTUzMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApAQCAtMCwwICsxLDI0MyBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwor U0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworQ1JFQVRFIFRBQkxFIHB0MSAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZB TFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAo MTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0MWMgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRv ICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwg ZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VV TSBBTkFMWVpFIHB0MTsKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUg VEFCTEUgcHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmIg UEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBBUlRJVElP TiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2YWwyKQor CVNFTEVDVCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MjsKK0NSRUFURSBU QUJMRSBwdDMgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQpCisJ UEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQzYSBQQVJUSVRJT04gT0Yg cHQzIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFM VUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKK0NSRUFURSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9N ICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBwdDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVDVCBnLCAnYSB0aGlyZCByYW5k b20gdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQg aW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkg UkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNt YXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBP RiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChp ZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAl IDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgcHRtaXNtYXRjaDsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBw dDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFw cGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDJfMS5pZCA9IHB0M18xLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtl eSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5p ZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJf Mi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQy XzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0 M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMu cHQzYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMv cHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlO KHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFT SF9KT0lOKHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQor ICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0 MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykK KyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1Ymxp Yy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNf cGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEv cHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0 MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBw dDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisKKy0tIFN1cHByZXNz IHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0 MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQx LCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAg QU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisg ICBIYXNoIENvbmQ6IChwdDEuaWQgPSBwdDIuaWQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMwor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyLmlkID0gcHQzLmlk KQorICAgICAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQy XzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0Uo cHQxKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MikgLyogbWF0Y2hlZCAqLwor ICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKHB0MSAocHQyIHB0MykpCisgICBIQVNIX0pPSU4ocHQzIHB0MykK KyAgIFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMg cHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYgorICAgIHB0My9wdWJsaWMucHQzYykKKyAg IFBBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFh IHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQy L3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5w dDNiIHB0My9wdWJsaWMucHQzYykKKyg0MCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExB Tl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBw dDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2 YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChwdDEu aWQgPSBwdDMuaWQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0MV8yLmlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAocHQxXzMuaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDMgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0 MikpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWEgcHQy L3B1YmxpYy5wdDJhKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5w dDJiKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJjKQorICAg Sk9JTl9PUkRFUih7cHQxIHB0Mn0gcHQzKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBw dDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0MykKKyAgIFNFUV9TQ0FOKHB0MS9wdWJs aWMucHQxYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMucHQyYgor ICAgIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9w dWJsaWMucHQzYgorICAgIHB0My9wdWJsaWMucHQzYykKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBw dDIpIHB0MykKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0 MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1 YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNj KQorKDQ3IHJvd3MpCisKK0NPTU1JVDsKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9ud2lzZSBq b2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOworRVhQTEFJ TiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1pc21hdGNo IFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIEFw cGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFf MworICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHRtaXNtYXRj aGFfcGtleSBvbiBwdG1pc21hdGNoYSBwdG1pc21hdGNoXzEKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHB0MS5pZCkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlz bWF0Y2hiX3BrZXkgb24gcHRtaXNtYXRjaGIgcHRtaXNtYXRjaF8yCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJU SVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQxIHB0bWlzbWF0Y2gpCisgICBORVNU RURfTE9PUF9QTEFJTihwdG1pc21hdGNoKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0 MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMpCisgICBJTkRFWF9TQ0FOKHB0bWlzbWF0Y2gv cHVibGljLnB0bWlzbWF0Y2hhIHB1YmxpYy5wdG1pc21hdGNoYV9wa2V5CisgICAgcHRtaXNtYXRj aC9wdWJsaWMucHRtaXNtYXRjaGIgcHVibGljLnB0bWlzbWF0Y2hiX3BrZXkpCisgICBQQVJUSVRJ T05XSVNFKHB0MSBwdG1pc21hdGNoKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEv cHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjCisgICAgcHRtaXNtYXRjaC9wdWJsaWMucHRtaXNt YXRjaGEgcHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGIpCisoMjIgcm93cykKKworQ09NTUlU OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYxZjM2MWZjZjljCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApAQCAtMCwwICsxLDc1NyBA QAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXIgPSAwOworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgcmFuZG9tX3BhZ2VfY29z dCA9IDAuMTsKK1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQgY3B1X2luZGV4X3R1cGxlX2Nv c3QgPSAwOworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRl eHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nh bl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUg VVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworLS0gU2VxdWVudGlh bCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg0IHJv d3MpCisKKy0tIEluZGV4IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtl eSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEluZGV4LW9ubHkgc2Nh bgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9u IHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBCaXRtYXAgaGVhcCBz Y2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFi bGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5kZXggQ29uZDogKGIg PiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1B UF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9iKQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBUSUQgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAs MSknOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENv bmQ6IChjdGlkID0gJygwLDEpJzo6dGlkKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJ RF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisK Ky0tIFRJRCByYW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICco MiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9uIHNjYW5fdGFibGUKKyAg IFRJRCBDb25kOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRp ZCkpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBv ZiBvdXIgdGVzdCBxdWVyaWVzIHRvIHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRlZCB0 byB1c2UgYW55d2F5LiBUaGlzIHNob3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4 IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcg c2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorICAg LT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5kZXggQ29u ZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg QklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9iKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOSByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBT Y2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEp JyBBTkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9u IHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3Rp ZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihz Y2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElE X1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKwor Q09NTUlUOworLS0gVHJ5IHRvIGZvcmNlIGEgZnVsbCBzY2FuIG9mIHRoZSB0YWJsZSB0byB1c2Ug c29tZSBvdGhlciBzY2FuIHR5cGUuIEFsbAorLS0gb2YgdGhlc2Ugd2lsbCBmYWlsLiBBbiBpbmRl eCBzY2FuIG9yIGJpdG1hcCBoZWFwIHNjYW4gY291bGQgcG90ZW50aWFsbHkKKy0tIGdlbmVyYXRl IHRoZSBjb3JyZWN0IGFuc3dlciwgYnV0IHRoZSBwbGFubmVyIGRvZXMgbm90IGV2ZW4gY29uc2lk ZXIgdGhlc2UKKy0tIHBvc3NpYmlsaXRpZXMgZHVlIHRvIHRoZSBsYWNrIG9mIGEgV0hFUkUgY2xh dXNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hl ZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90 YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5f dGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUK KyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihz Y2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyBy b3dzKQorCitDT01NSVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlzIHNo b3VsZCBub3cgc3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVBUF9T Q0FOLCBidXQgdGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0aGUK Ky0tIHF1ZXJ5IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4LgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID4gMCkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAv KiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1h cCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYSA+IDApCisgICAt PiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9wa2V5CisgICAgICAgICBJbmRleCBD b25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK0NPTU1JVDsK Ky0tIFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFs IHNjYW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2Nh biAoZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUg YWJzZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChhID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxl KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDog dHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBm YWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDgg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dz KQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkg c2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2Yg YW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcg c2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90 YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgRmlsdGVyOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwg c2NhbiBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFpbiBpbmRl eCBzY2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgYiA+ICdzb21lIHRleHQgOCc7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDog dHJ1ZQorICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgdGhl IHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCistLSBU SUQgcmFuZ2Ugc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChjdGlk ID0gJygwLDEpJzo6dGlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQor CVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkg QU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyBy b3dzKQorCitDT01NSVQ7CistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0aCBpbmRl eCBzY2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlvbiB0aGUg c2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxl CisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCist LSBCdXQgbm90IGlmIHdlIG1lbnRpb24gdGhlIHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk LCBpbmFwcGxpY2FibGUgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworLS0gSXQncyBPSyB0byByZXBlYXQgdGhlIHNhbWUgYWR2aWNlLgor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisg ICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKKy0tIEJ1dCBpdCBk b2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRhcmdldCBpcyBldmVuIG5vdGlvbmFsbHkgZGlmZmVy ZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hl ZCwgY29uZmxpY3RpbmcgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gVGVzdCBhc3NvcnRlZCBpbmNvcnJlY3QgYWR2 aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KG5vdGhpbmcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihub3RoaW5nKSAvKiBub3QgbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihub3RoaW5nIHdo YXRzb2V2ZXIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikgLyogbm90IG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZ X1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9u bHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKG5v dGhpbmcgd2hhdHNvZXZlcikgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcg c2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3Vz KSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IG91ciBh YmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4K K0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBn CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAg SW5kZXggQ29uZDogKGEgPSBnLmcpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihnIHMgcyMyKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocyBzIzIpCisgICBJTkRFWF9TQ0FO KHMgcHVibGljLnNjYW5fdGFibGVfcGtleSBzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihnIHMgcyMyKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2Fu X3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9 IHMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBIYXNoIExlZnQgSm9p bgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6 IChhID0gZy5nKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikK KyAgIE5FU1RFRF9MT09QX1BMQUlOKHMjMikKKyAgIEhBU0hfSk9JTihzKQorICAgU0VRX1NDQU4o cykKKyAgIElOREVYX1NDQU4ocyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoZyBzIHMjMikKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxl IHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEu YSkKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBT Y2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoYSA9IGcuZykKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZSBzXzEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikK KyAgIE5FU1RFRF9MT09QX1BMQUlOKHMpCisgICBIQVNIX0pPSU4ocyMyKQorICAgU0VRX1NDQU4o cyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoZyBzIHMjMikKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9J TiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMg T04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SGFzaCBMZWZ0IEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNfMS5hKQorICAgLT4gIEhhc2gg TGVmdCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAtPiAg RnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBIYXNoCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyAgIFNFUV9TQ0FOKHMjMikgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMj MikKKyAgIEhBU0hfSk9JTihzIHMjMikKKyAgIFNFUV9TQ0FOKHMgcyMyKQorICAgTk9fR0FUSEVS KGcgcyBzIzIpCisoMTcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byBy ZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVS RSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFi bGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoeCBz QHgpCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp OworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMK KyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHVubmFtZWRfc3VicXVlcnkgc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDUgcm93cykKKwor QkVHSU47CistLSBTaG91bGQgbm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZG U0VUIDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMp IC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzQHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih4IHNAeCkKKyg3IHJv d3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyog bm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNA dW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHVu bmFtZWRfc3VicXVlcnkgc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxk IG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKSB4OworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAo YSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpCisgICBOT19H QVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNAeCkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHVubmFtZWRfc3VicXVlcnkgc0B1bm5hbWVkX3N1YnF1ZXJ5KQor KDcgcm93cykKKworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nh bl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBu b3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4 IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoeCBzQHgpCisoNyByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZSBzCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNAdW5uYW1lZF9zdWJxdWVyeSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyAgIE5PX0dBVEhFUih1bm5h bWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5kYWZiM2ZjZTliNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw2MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIt MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZp Y2Vfc291cmNlcyA9IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5j JywKKyAgJ3BncGFfY29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdw YV9qb2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdw Z3BhX3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisK K3BncGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAn cGdwYV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6 IGZsZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFu X2FkdmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90 YXJnZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdz OiBiaXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3Qo KQorcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnBy b2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5f YWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBs YW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2UgPSBz aGFyZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMs CisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAga3dh cmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3BsYW5fYWR2 aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywKKyAgJ3Bn X3BsYW5fYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQor Cit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24u Y3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCks CisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdq b2luX29yZGVyJywKKyAgICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdwYXJ0aXRpb253aXNl JywKKyAgICAgICdzY2FuJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjI5ZjRmMjI0ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQyIEBACisvKiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsICovCisKKy0tIGNv bXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVB VEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2Ui IHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUn LCAncGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOwor CitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorUkVU VVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRf Y29sbGVjdGVkX2xvY2FsX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lk LAorCU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25f dGltZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykK K1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xs ZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQg dXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBj b2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmlj ZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdw Z19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworUkVW T0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9N IFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjMyZThiN2EwZDMKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKQEAgLTAsMCArMSw0 NTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmMKKyAqCSAg bWFpbiBlbnRyeXBvaW50cyBmb3IgZ2VuZXJhdGluZyBhbmQgYXBwbHlpbmcgcGxhbm5lciBhZHZp Y2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9h ZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9hc3QuaCIK KyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5o IgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisj aW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNs dWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3JtYXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9l eHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXpl ci9wbGFubmVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRl ICJ1dGlscy9ndWMuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitzdGF0aWMgcGdwYV9zaGFyZWRf c3RhdGUgKnBncGFfc3RhdGUgPSBOVUxMOworc3RhdGljIGRzYV9hcmVhICpwZ3BhX2RzYV9hcmVh ID0gTlVMTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworY2hhcgkgICAqcGdfcGxhbl9hZHZpY2Vf YWR2aWNlID0gTlVMTDsKK3N0YXRpYyBib29sIHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWlu X3N1cHBsaWVkX2FkdmljZSA9IHRydWU7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xs ZWN0aW9uX2xpbWl0ID0gMDsKK2ludAkJCXBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9u X2xpbWl0ID0gMDsKKworLyogU2F2ZWQgaG9vayB2YWx1ZSAqLworc3RhdGljIGV4cGxhaW5fcGVy X3BsYW5faG9va190eXBlIHByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IE5VTEw7CisKKy8qIE90aGVy IGZpbGUtbGV2ZWwgZ2xvYmFscyAqLworc3RhdGljIGludAllc19leHRlbnNpb25faWQ7CitzdGF0 aWMgTWVtb3J5Q29udGV4dCBwZ3BhX21lbW9yeV9jb250ZXh0ID0gTlVMTDsKKworc3RhdGljIHZv aWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVz LAorCQkJCQkJCQkJCQkJICBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBhcnNlU3RhdGUg KnBzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hv b2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9DbGF1c2UgKmlu dG8sCisJCQkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJ CQkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgYm9vbCBwZ19w bGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEs CisJCQkJCQkJCQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2Rl ZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAq IEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJ RGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJ CQkJICAgImFkdmljZSB0byBhcHBseSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAorCQkJCQkJCSAg IE5VTEwsCisJCQkJCQkJICAgJnBnX3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJCQkgICBOVUxM LAorCQkJCQkJCSAgIFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdfcGxh bl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBO VUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0cHV0IGluY2x1 ZGVzIHN1cHBsaWVkIGFkdmljZSBldmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIiwK KwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1 cHBsaWVkX2FkdmljZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJ CQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJ RGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25f bGltaXQiLAorCQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXItYmFj a2VuZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX2xvY2Fs X2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJ CVBHQ19VU0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLnNo YXJlZF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byBy ZXRhaW4gaW4gc2hhcmVkIG1lbW9yeSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmcGdfcGxhbl9h ZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRf TUFYLAorCQkJCQkJCVBHQ19TVVNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJ TlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgicGdfcGxhbl9h ZHZpY2UiKTsKKworCS8qIEdldCBhbiBJRCB0aGF0IHdlIGNhbiB1c2UgdG8gY2FjaGUgZGF0YSBp biBhbiBFeHBsYWluU3RhdGUuICovCisJZXNfZXh0ZW5zaW9uX2lkID0gR2V0RXhwbGFpbkV4dGVu c2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyogUmVnaXN0ZXIgdGhlIG5ldyBFWFBMQUlO IG9wdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBtb2R1bGUuICovCisJUmVnaXN0ZXJFeHRlbnNp b25FeHBsYWluT3B0aW9uKCJwbGFuX2FkdmljZSIsCisJCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIpOworCisJLyogSW5zdGFsbCBob29rcyAqLworCXBncGFf cGxhbm5lcl9pbnN0YWxsX2hvb2tzKCk7CisJcHJldl9leHBsYWluX3Blcl9wbGFuID0gZXhwbGFp bl9wZXJfcGxhbl9ob29rOworCWV4cGxhaW5fcGVyX3BsYW5faG9vayA9IHBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fcGVyX3BsYW5faG9vazsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0 YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfaW5pdF9zaGFy ZWRfc3RhdGUodm9pZCAqcHRyKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IChwZ3Bh X3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xvY2tJbml0aWFsaXplKCZzdGF0ZS0+bG9jaywg TFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9sb2NrIikpOworCXN0YXRlLT5kc2Ff dHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfZHNhIik7CisJc3Rh dGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3Ig PSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gYSBt ZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBieSB0aGlzCisgKiBt b2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdfcGxhbl9hZHZpY2Vf Z2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdwYV9tZW1vcnlfY29udGV4dCA9PSBOVUxMKQorCQlw Z3BhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRl eHQsCisJCQkJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQlBTExPQ1NF VF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ3BhX21lbW9yeV9jb250ZXh0OworfQorCisv KgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVkIHN0YXRlLgorICoKKyAqIElmIG5vIHNo YXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gSWYgaXQgZG9lcyBl eGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90IHlldCBhY2Nlc3NlZCBpdCwgYXR0YWNo IHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisgKiBvdXIgY2FjaGVkIHBvaW50ZXIuCisg KgorICogQWxvbmcgdGhlIHdheSwgbWFrZSBzdXJlIHRoZSByZWxldmFudCBMV0xvY2sgdHJhbmNo ZXMgYXJlIHJlZ2lzdGVyZWQuCisgKi8KK3BncGFfc2hhcmVkX3N0YXRlICoKK3BnX3BsYW5fYWR2 aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ3BhX3N0YXRlID09IE5VTEwpCisJeworCQlib29s CQlmb3VuZDsKKworCQlwZ3BhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVudCgicGdfcGxh bl9hZHZpY2UiLCBzaXplb2YocGdwYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAgIHBncGFfaW5p dF9zaGFyZWRfc3RhdGUsICZmb3VuZCk7CisJfQorCisJcmV0dXJuIHBncGFfc3RhdGU7Cit9CisK Ky8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX3BsYW5fYWR2aWNlJ3MgRFNBIGFyZWEsIGNy ZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgorcGdfcGxhbl9hZHZpY2VfZHNh X2FyZWEodm9pZCkKK3sKKwlpZiAocGdwYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsKKwkJcGdwYV9z aGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJCWRzYV9oYW5k bGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KCkpOwor CisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hh bmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJlYV9oYW5kbGUgPT0gRFNBX0hBTkRMRV9JTlZB TElEKQorCQl7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2NyZWF0ZShzdGF0ZS0+ZHNhX3RyYW5j aGUpOworCQkJZHNhX3BpbihwZ3BhX2RzYV9hcmVhKTsKKwkJCXN0YXRlLT5hcmVhID0gZHNhX2dl dF9oYW5kbGUocGdwYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlw Z3BhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRsZSk7CisJCX0KKworCQlkc2FfcGlu X21hcHBpbmcocGdwYV9kc2FfYXJlYSk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCX0KKworCXJldHVybiBwZ3BhX2RzYV9hcmVhOworfQorCisvKgorICogSGFuZGxl ciBmb3IgRVhQTEFJTiAoUExBTl9BRFZJQ0UpLgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9h ZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVzLCBEZWZFbGVtICpv cHQsCisJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSkKK3sKKwlib29sCSAgICpwbGFuX2Fk dmljZTsKKworCXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19l eHRlbnNpb25faWQpOworCisJaWYgKHBsYW5fYWR2aWNlID09IE5VTEwpCisJeworCQlwbGFuX2Fk dmljZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wpOworCQlTZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUo ZXMsIGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9hZHZpY2UpOworCX0KKworCSpwbGFuX2FkdmljZSA9 IGRlZkdldEJvb2xlYW4ob3B0KTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBzdHJpbmcgdGhhdCBp cyBsaWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0aXBsZSBsaW5lcyBpbiBFWFBMQUlOCisgKiBvdXRw dXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX3RleHRfbXVsdGls aW5lKEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIgKnFsYWJlbCwKKwkJCQkJCQkJCSAgY2hhciAqdmFs dWUpCit7CisJY2hhcgkgICAqczsKKworCS8qIEZvciBub24tdGV4dCBmb3JtYXRzLCBpdCdzIGJl c3Qgbm90IHRvIGFkZCBhbnkgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlpZiAoZXMtPmZvcm1hdCAh PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCXsKKwkJRXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWws IHZhbHVlLCBlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbiB0ZXh0IGZvcm1hdCwgaWYgdGhl cmUgaXMgbm8gZGF0YSwgZGlzcGxheSBub3RoaW5nLiAqLworCWlmICgqcWxhYmVsID09ICdcMCcp CisJCXJldHVybjsKKworCS8qCisJICogSXQgbG9va3MgbmljZXN0IHRvIGluZGVudCBlYWNoIGxp bmUgb2YgdGhlIGFkdmljZSBzZXBhcmF0ZWx5LCBiZWdpbm5pbmcKKwkgKiBvbiB0aGUgbGluZSBi ZWxvdyB0aGUgbGFiZWwuCisJICovCisJRXhwbGFpbkluZGVudFRleHQoZXMpOworCWFwcGVuZFN0 cmluZ0luZm8oZXMtPnN0ciwgIiVzOlxuIiwgcWxhYmVsKTsKKwllcy0+aW5kZW50Kys7CisJd2hp bGUgKChzID0gc3RyY2hyKHZhbHVlLCAnXG4nKSkgIT0gTlVMTCkKKwl7CisJCUV4cGxhaW5JbmRl bnRUZXh0KGVzKTsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhlcy0+c3RyLCB2YWx1ZSwgKHMg LSB2YWx1ZSkgKyAxKTsKKwkJdmFsdWUgPSBzICsgMTsKKwl9CisKKwkvKiBEb24ndCBpbnRlcnBy ZXQgYSB0ZXJtaW5hbCBuZXdsaW5lIGFzIGEgcmVxdWVzdCBmb3IgYW4gZW1wdHkgbGluZS4gKi8K KwlpZiAoKnZhbHVlICE9ICdcMCcpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFw cGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzXG4iLCB2YWx1ZSk7CisJfQorCisJZXMtPmluZGVu dC0tOworfQorCisvKgorICogQWRkIGFkdmljZSBmZWVkYmFjayB0byB0aGUgRVhQTEFJTiBvdXRw dXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKEV4 cGxhaW5TdGF0ZSAqZXMsIExpc3QgKmZlZWRiYWNrKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsK KworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcmVhY2hfbm9kZShEZWZFbGVtLCBpdGVtLCBm ZWVkYmFjaykKKwl7CisJCWludAkJCWZsYWdzID0gZGVmR2V0SW50MzIoaXRlbSk7CisKKwkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiJXMgLyogIiwgaXRlbS0+ZGVmbmFtZSk7CisJCWlmICgoZmxh Z3MgJiBQR1BBX1RFX01BVENIX0ZVTEwpICE9IDApCisJCXsKKwkJCUFzc2VydCgoZmxhZ3MgJiBQ R1BBX1RFX01BVENIX1BBUlRJQUwpICE9IDApOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAi bWF0Y2hlZCIpOworCQl9CisJCWVsc2UgaWYgKChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElB TCkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgInBhcnRpYWxseSBtYXRjaGVkIik7 CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm5vdCBtYXRjaGVkIik7CisJCWlm ICgoZmxhZ3MgJiBQR1BBX1RFX0lOQVBQTElDQUJMRSkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiwgaW5hcHBsaWNhYmxlIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0NPTkZM SUNUSU5HKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBjb25mbGljdGluZyIp OworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9GQUlMRUQpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICIsIGZhaWxlZCIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIgKi9cbiIp OworCX0KKworCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJTdXBw bGllZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJICBidWYuZGF0YSk7Cit9CisKKy8qCisgKiBB ZGQgcmVsZXZhbnQgZGV0YWlscywgaWYgYW55LCB0byB0aGUgRVhQTEFJTiBvdXRwdXQgZm9yIGEg c2luZ2xlIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX3Bl cl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJIEludG9DbGF1 c2UgKmludG8sCisJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCSBjb25zdCBj aGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJ CQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKK3sKKwlib29sCSAgICpwbGFuX2Fkdmlj ZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKwlEZWZF bGVtICAgICpwZ3BhX2l0ZW07CisJTGlzdAkgICAqcGdwYV9saXN0OworCisJaWYgKHByZXZfZXhw bGFpbl9wZXJfcGxhbikKKwkJcHJldl9leHBsYWluX3Blcl9wbGFuKHBsYW5uZWRzdG10LCBpbnRv LCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywKKwkJCQkJCQkgIHF1ZXJ5RW52KTsKKworCS8qIEZp bmQgYW55IGRhdGEgcGdwYV9wbGFubmVyX3NodXRkb3duIHN0YXNoZWQgaW4gdGhlIFBsYW5uZWRT dG10LiAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBsYW5uZWRzdG10 LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIik7CisJcGdwYV9s aXN0ID0gcGdwYV9pdGVtID09IE5VTEwgPyBOVUxMIDogKExpc3QgKikgcGdwYV9pdGVtLT5hcmc7 CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIGlmIHRoZXJlIGlzIGEgcmVjb3JkIG9mIGF0dGVtcHRp bmcgdG8gYXBwbHkgYWR2aWNlIGR1cmluZworCSAqIHF1ZXJ5IHBsYW5uaW5nLCB3ZSBhbHdheXMg b3V0cHV0IHRoYXQgaW5mb3JtYXRpb24sIGJ1dCB0aGUgdXNlciBjYW4gc2V0CisJICogcGdfcGxh bl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlID0gZmFsc2UgdG8gc3VwcHJl c3MgdGhhdAorCSAqIGJlaGF2aW9yLiBJZiB0aGV5IGRvLCB3ZSdsbCBvbmx5IGRpc3BsYXkgaXQg d2hlbiB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uCisJICogd2FzIHNwZWNpZmllZCBhbmQgbm90IHNl dCB0byBmYWxzZS4KKwkgKgorCSAqIE5COiBJZiB3ZSdyZSBleHBsYWluaW5nIGEgcXVlcnkgcGxh bm5lZCBiZWZvcmVoYW5kIC0tIGkuZS4gYSBwcmVwYXJlZAorCSAqIHN0YXRlbWVudCAtLSB0aGUg YXBwbGljYXRpb24gb2YgcXVlcnkgYWR2aWNlIG1heSBub3QgaGF2ZSBiZWVuCisJICogcmVjb3Jk ZWQsIGFuZCB0aGVyZWZvcmUgdGhpcyB3b24ndCBiZSBhYmxlIHRvIHNob3cgYW55dGhpbmcuCisJ ICovCisJaWYgKHBncGFfbGlzdCAhPSBOVUxMICYmIChwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhw bGFpbl9zdXBwbGllZF9hZHZpY2UgfHwKKwkJCQkJCQkgIChwbGFuX2FkdmljZSAhPSBOVUxMICYm ICpwbGFuX2FkdmljZSkpKQorCXsKKwkJRGVmRWxlbSAgICAqZmVlZGJhY2s7CisKKwkJZmVlZGJh Y2sgPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJmZWVkYmFjayIpOworCQlp ZiAoZmVlZGJhY2sgIT0gTlVMTCkKKwkJCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fZmVlZGJhY2so ZXMsIChMaXN0ICopIGZlZWRiYWNrLT5hcmcpOworCX0KKworCS8qCisJICogSWYgdGhlIFBMQU5f QURWSUNFIG9wdGlvbiB3YXMgc3BlY2lmaWVkIC0tIGFuZCBub3Qgc2VudCB0byBGQUxTRSAtLQor CSAqIHNob3cgZ2VuZXJhdGVkIGFkdmljZS4KKwkgKi8KKwlpZiAocGxhbl9hZHZpY2UgIT0gTlVM TCAmJiAqcGxhbl9hZHZpY2UpCisJeworCQlEZWZFbGVtICAgICphZHZpY2Vfc3RyaW5nX2l0ZW07 CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisKKwkJYWR2aWNlX3N0cmluZ19pdGVtID0KKwkJ CWZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlzdCwgImFkdmljZV9zdHJpbmciKTsKKwkJ aWYgKGFkdmljZV9zdHJpbmdfaXRlbSAhPSBOVUxMKQorCQl7CisJCQkvKiBBZHZpY2UgaGFzIGFs cmVhZHkgYmVlbiBnZW5lcmF0ZWQ7IHdlIGNhbiByZXVzZSBpdC4gKi8KKwkJCWFkdmljZV9zdHJp bmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5hcmcpOworCQl9CisJCWVsc2UKKwkJewor CQkJcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHdhbGtlcjsKKwkJCVN0cmluZ0luZm9EYXRhIGJ1 ZjsKKwkJCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnM7CisKKwkJCS8qIEFkdmljZSBu b3QgeWV0IGdlbmVyYXRlZDsgZG8gdGhhdCBub3cuICovCisJCQlwZ3BhX3BsYW5fd2Fsa2VyKCZ3 YWxrZXIsIHBsYW5uZWRzdG10KTsKKwkJCXJ0X2lkZW50aWZpZXJzID0KKwkJCQlwZ3BhX2NyZWF0 ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBsYW5uZWRzdG10KTsKKwkJCWluaXRTdHJp bmdJbmZvKCZidWYpOworCQkJcGdwYV9vdXRwdXRfYWR2aWNlKCZidWYsICZ3YWxrZXIsIHJ0X2lk ZW50aWZpZXJzKTsKKwkJCWFkdmljZV9zdHJpbmcgPSBidWYuZGF0YTsKKwkJfQorCisJCWlmIChh ZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX3RleHRf bXVsdGlsaW5lKGVzLCAiR2VuZXJhdGVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJCQkJCSAgYWR2 aWNlX3N0cmluZyk7CisJfQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlCisgKi8KK3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tf aG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwlj aGFyCSAgICplcnJvcjsKKworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVybiB0cnVlOwor CisJdG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCQkJICAgQUxM T0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byh0bXBjb250ZXh0KTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBzYXZlIHRoZSBw YXJzZSB0cmVlIHRoYXQgd2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1YWwgdXNlIHdo ZW4gcGxhbm5pbmcgd2l0aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25seSBwb2ludAor CSAqIHRvIGEgc2luZ2xlIGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJzZSB0cmVlIGlu dm9sdmVzIGFuCisJICogYXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMuCisJ ICovCisJKHZvaWQpIHBncGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlmIChlcnJvciAh PSBOVUxMKQorCXsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogJXMiLCBlcnJvcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0KTsKKwor CXJldHVybiB0cnVlOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVj dHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZl bGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNo X25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVm bmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxM OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5j b250cm9sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTZmZGM5ZTdiMgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJv bApAQCAtMCwwICsxLDUgQEAKKyMgcGdfcGxhbl9hZHZpY2UgZXh0ZW5zaW9uCitjb21tZW50ID0g J2hlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJworZGVmYXVsdF92ZXJzaW9uID0g JzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3BsYW5fYWR2aWNlJworcmVsb2Nh dGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5f YWR2aWNlLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2ZWZiM2I2MTEzCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCkBAIC0wLDAg KzEsMzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNlLmgKKyAq CSAgbWFpbiBoZWFkZXIgZmlsZSBmb3IgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBtb2R1bGUKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1BMQU5fQURWSUNFX0gK KyNkZWZpbmUgUEdfUExBTl9BRFZJQ0VfSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgi CisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJ1dGlscy9kc2EuaCIKKwor dHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfc3RhdGUKK3sKKwlMV0xvY2sJCWxvY2s7CisJaW50 CQkJZHNhX3RyYW5jaGU7CisJZHNhX2hhbmRsZQlhcmVhOworCWRzYV9wb2ludGVyIHNoYXJlZF9j b2xsZWN0b3I7Cit9IHBncGFfc2hhcmVkX3N0YXRlOworCisvKiBHVUMgdmFyaWFibGVzICovCitl eHRlcm4gaW50CXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQ7CitleHRlcm4g aW50CXBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGNoYXIg KnBnX3BsYW5fYWR2aWNlX2FkdmljZTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworZXh0 ZXJuIE1lbW9yeUNvbnRleHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRlcm4g cGdwYV9zaGFyZWRfc3RhdGUgKnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsKK2V4dGVybiBk c2FfYXJlYSAqcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4wMmZmYmZhMzc2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9hc3QuYwpAQCAtMCwwICsxLDM5MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog cGdwYV9hc3QuYworICoJICBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZSByZWxhdGVkIHRvIHBs YW4gYWR2aWNlIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9hc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgImZ1bmNh cGkuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisKK3N0YXRpYyBib29sIHBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlk cywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQsCisJCQkJCQkJCQkJICBib29sICpyaWRzX3VzZWQpOworCisvKgorICogR2V0IGEg QyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGFkdmljZSB0YWcuCisg Ki8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUg YWR2aWNlX3RhZykKK3sKKwlzd2l0Y2ggKGFkdmljZV90YWcpCisJeworCQljYXNlIFBHUEFfVEFH X0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNl IFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2Fz ZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdf R0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNlIFBHUEFfVEFH X0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19JTkRF WF9PTkxZX1NDQU46CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9U QUdfSU5ERVhfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdf Sk9JTl9PUkRFUjoKKwkJCXJldHVybiAiSk9JTl9PUkRFUiI7CisJCWNhc2UgUEdQQV9UQUdfTUVS R0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9NQVRFUklBTElaRSI7 CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0VfSk9J Tl9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQly ZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4i OworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKwkJCXJldHVybiAiTk9fR0FUSEVSIjsKKwkJ Y2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsK KwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9J Tl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1 cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQlyZXR1 cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiAiVElE X1NDQU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8q CisgKiBDb252ZXJ0IGFuIGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBhIHN0cmluZyB0aGF0IGhh cyBhbHJlYWR5IGJlZW4KKyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0ZSwgdG8gYSBwZ3BhX2Fk dmljZV90YWdfdHlwZS4KKyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQgKmZhaWwgPSBmYWxzZSBh bmQgcmV0dXJuIHRoZSByZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQgKmZhaWwgPSB0cnVlIGFu ZCByZXVybiBhbiBhcmJpdHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3RhZ190eXBlCitw Z3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQoreworCSpm YWlsID0gZmFsc2U7CisKKwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2InOgorCQkJaWYg KHN0cmNtcCh0YWcsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChzdHJj bXAodGFnLCAiZm9yZWlnbl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRk9SRUlH Tl9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRo ZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAoc3RyY21wKHRh ZywgImdhdGhlcl9tZXJnZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUl9NRVJH RTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaGFzaF9qb2lu IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJlYWs7CisJCWNh c2UgJ2knOgorCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfb25seV9z Y2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJYnJl YWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVyIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoK KwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRh ZywgIm1lcmdlX2pvaW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJHRV9K T0lOX1BMQUlOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJu ZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RF RF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tZW1v aXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJ CWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fZ2F0aGVy IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJlYWs7CisJCWNh c2UgJ3AnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfUEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJ CWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNlbWlq b2luX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRTsK KwkJCWlmIChzdHJjbXAodGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RB R19TRVFfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJjbXAodGFnLCAi dGlkX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsKKwkJCWJyZWFr OworCX0KKworCS8qIGRpZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsKKworCS8qIHJl dHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNrICovCisJcmV0 dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9hZHZpY2Vf dGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAq Lwordm9pZAorcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJH RVRfSURFTlRJRklFUikKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJY2hhcgkgICAqZGVs aW1zOworCisJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNU KQorCQkJZGVsaW1zID0gInt9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0gIigpIjsKKworCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2 aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAo Zmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KHN0ciwgY2hpbGRf dGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1sxXSk7CisJ fQorCWVsc2UKKwl7CisJCWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7CisKKwkJcnRfaWRlbnRp ZmllciA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlkKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhzdHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30KKworLyoKKyAqIEZvcm1h dCBhIHBncGFfaW5kZXhfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEg U3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0lu Zm8gc3RyLCBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlpZiAoaXRhcmdldC0+aXR5 cGUgIT0gUEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJCWlm IChpdGFyZ2V0LT5pdHlwZSA9PSBQR1BBX0lOREVYX0FORCkKKwkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoc3RyLCAiJiYoIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3Ry LCAifHwoIik7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9pbmRleF90YXJnZXQsIGNoaWxkX3Rhcmdl dCwgaXRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZh bHNlOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAnKTsKKwkJCXBn cGFfZm9ybWF0X2luZGV4X3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJCX0KKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoc3RyLCAnKScpOworCX0KKwllbHNlCisJeworCQlpZiAoaXRhcmdldC0+ aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKHN0ciwgIiVzLiIsCisJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNwYWNlKSk7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWUp KTsKKwl9Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0d28gcGdwYV9pbmRleF90YXJn ZXQgb2JqZWN0cyBhcmUgZXhhY3RseSBpZGVudGljYWwuCisgKi8KK2Jvb2wKK3BncGFfaW5kZXhf dGFyZ2V0c19lcXVhbChwZ3BhX2luZGV4X3RhcmdldCAqaTEsIHBncGFfaW5kZXhfdGFyZ2V0ICpp MikKK3sKKwlpZiAoaTEtPml0eXBlICE9IGkyLT5pdHlwZSkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKGkxLT5pdHlwZSA9PSBQR1BBX0lOREVYX05BTUUpCisJeworCQkvKiBpbmRuYW1lc3BhY2Ug Y2FuIGJlIE5VTEwsIGFuZCB0d28gTlVMTCB2YWx1ZXMgYXJlIGVxdWFsICovCisJCWlmICgoaTEt PmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkgJiYKKwkJ CShpMS0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8 CisJCQkgc3RyY21wKGkxLT5pbmRuYW1lc3BhY2UsIGkyLT5pbmRuYW1lc3BhY2UpICE9IDApKQor CQkJcmV0dXJuIGZhbHNlOworCQlpZiAoc3RyY21wKGkxLT5pbmRuYW1lLCBpMi0+aW5kbmFtZSkg IT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJaTFfbGVuZ3Ro ID0gbGlzdF9sZW5ndGgoaTEtPmNoaWxkcmVuKTsKKworCQlpZiAoaTFfbGVuZ3RoICE9IGxpc3Rf bGVuZ3RoKGkyLT5jaGlsZHJlbikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWZvciAoaW50IG4gPSAw OyBuIDwgaTFfbGVuZ3RoOyArK24pCisJCXsKKwkJCXBncGFfaW5kZXhfdGFyZ2V0ICpjMSA9IGxp c3RfbnRoKGkxLT5jaGlsZHJlbiwgbik7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzIgPSBsaXN0 X250aChpMi0+Y2hpbGRyZW4sIG4pOworCisJCQlpZiAoIXBncGFfaW5kZXhfdGFyZ2V0c19lcXVh bChjMSwgYzIpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVyIG1hdGNoZXMgYW4gYW55IHBh cnQgb2YgYW4gYWR2aWNlIHRhcmdldC4KKyAqLworYm9vbAorcGdwYV9pZGVudGlmaWVyX21hdGNo ZXNfdGFyZ2V0KHBncGFfaWRlbnRpZmllciAqcmlkLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCkKK3sKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBjaGVjayBhbGwgZGVzY2VuZGVudHMuICov CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCWZv cmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHJpZCwgY2hp bGRfdGFyZ2V0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQor CisJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHRhcmdldC0+cmlkLmFsaWFzX25hbWUpICE9 IDApCisJCXJldHVybiBmYWxzZTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlICE9IHRhcmdldC0+cmlk Lm9jY3VycmVuY2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogVGhlIGlkZW50aWZpZXIg bXVzdCBzcGVjaWZ5IGEgc2NoZW1hLCBidXQgdGhlIHRhcmdldCBtYXkgbGVhdmUgdGhlCisJICog c2NoZW1hIE5VTEwgdG8gbWF0Y2ggYW55dGhpbmcuCisJICovCisJaWYgKHRhcmdldC0+cmlkLnBh cnRuc3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5wYXJ0bnNwLCB0YXJnZXQtPnJpZC5wYXJ0 bnNwKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKworCS8qCisJICogVGhlc2UgZmllbGRzIGNh biBiZSBOVUxMIG9uIGVpdGhlciBzaWRlLCBidXQgTlVMTCBvbmx5IG1hdGNoZXMgYW5vdGhlcgor CSAqIE5VTEwuCisJICovCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBh cnRyZWwsIHRhcmdldC0+cmlkLnBhcnRyZWwpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzdHJp bmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBsYW5fbmFtZSwgdGFyZ2V0LT5yaWQucGxhbl9u YW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBNYXRj aCBpZGVudGlmaWVycyB0byBhZHZpY2UgdGFyZ2V0cyBhbmQgcmV0dXJuIGFuIGVudW0gdmFsdWUg aW5kaWNhdGluZworICogdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzZXQgb2Yga2V5cyBh bmQgdGhlIHNldCBvZiB0YXJnZXRzLgorICoKKyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIHBncGFf aXRtX3R5cGUuCisgKi8KK3BncGFfaXRtX3R5cGUKK3BncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJYm9vbAkJYWxsX3JpZHNfdXNlZCA9IHRydWU7CisJYm9v bAkJYW55X3JpZHNfdXNlZCA9IGZhbHNlOworCWJvb2wJCWFsbF90YXJnZXRzX3VzZWQ7CisJYm9v bAkgICAqcmlkc191c2VkID0gcGFsbG9jMF9hcnJheShib29sLCBucmlkcyk7CisKKwlhbGxfdGFy Z2V0c191c2VkID0KKwkJcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMs IHRhcmdldCwgcmlkc191c2VkKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkK Kwl7CisJCWlmIChyaWRzX3VzZWRbaV0pCisJCQlhbnlfcmlkc191c2VkID0gdHJ1ZTsKKwkJZWxz ZQorCQkJYWxsX3JpZHNfdXNlZCA9IGZhbHNlOworCX0KKworCWlmIChhbGxfcmlkc191c2VkKQor CXsKKwkJaWYgKGFsbF90YXJnZXRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fRVFVQUw7CisJ CWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQ7CisJfQorCWVsc2UKKwl7 CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVDsKKwkJZWxzZSBpZiAoYW55X3JpZHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9J TlRFUlNFQ1RJTkc7CisJCWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9ESVNKT0lOVDsKKwl9Cit9 CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgZXZlcnkgdGFyZ2V0IG9yIHN1Yi10YXJnZXQgaXMg bWF0Y2hlZCBieSBhdCBsZWFzdCBvbmUKKyAqIGlkZW50aWZpZXIsIGFuZCBvdGhlcndpc2UgZmFs c2UuCisgKgorICogQWxzbyBzZXRzIHJpZHNfdXNlZFtpXSA9IHRydWUgZm9yIGVhY2ggaWRlbmlm aWVyIHRoYXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUKKyAqIHRhcmdldC4KKyAqLworc3RhdGljIGJv b2wKK3BncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsIGJvb2wgKnJp ZHNfdXNlZCkKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCWlmICh0YXJnZXQtPnR0eXBl ICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlyZXN1bHQgPSB0cnVlOworCisJCWZv cmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlpZiAoIXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCBy aWRzLCBjaGlsZF90YXJnZXQsCisJCQkJCQkJCQkJCSAgIHJpZHNfdXNlZCkpCisJCQkJcmVzdWx0 ID0gZmFsc2U7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlk czsgKytpKQorCQl7CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KCZyaWRz W2ldLCB0YXJnZXQpKQorCQkJeworCQkJCXJpZHNfdXNlZFtpXSA9IHRydWU7CisJCQkJcmVzdWx0 ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfYXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2 ZmU3MzBhNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X2FzdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X2FzdC5oCisgKgkgIGFic3RyYWN0IHN5bnRheCB0cmVlcyBmb3IgcGxhbiBhZHZpY2UsIHBsdXMg cGFyc2VyL3NjYW5uZXIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2FzdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgUEdQQV9BU1RfSAorI2RlZmluZSBQR1BBX0FTVF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50 aWZpZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKworLyoKKyAqIEFkdmljZSBp dGVtcyBnZW5lcmFsbHkgdGFrZSB0aGUgZm9ybSBTT01FX1RBRyhpdGVtIFsuLi5dKSwgd2hlcmUg YW4gaXRlbQorICogY2FuIHRha2UgdmFyaW91cyBmb3Jtcy4gVGhlIHNpbXBsZXN0IGNhc2UgaXMg YSByZWxhdGlvbiBpZGVudGlmaWVyLCBidXQKKyAqIHNvbWUgdGFncyBhbGxvdyBzdWJsaXN0cywg YW5kIEpPSU5fT1JERVIoKSBhbGxvd3MgYm90aCBvcmRlcmVkIGFuZCB1bm9yZGVyZWQKKyAqIHN1 Ymxpc3RzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX1RBUkdFVF9JREVOVElGSUVSLAkJ LyogcmVsYXRpb24gaWRlbnRpZmllciAqLworCVBHUEFfVEFSR0VUX09SREVSRURfTElTVCwJLyog KGl0ZW0gLi4uKSAqLworCVBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUCS8qIHtpdGVtIC4uLn0g Ki8KK30gcGdwYV90YXJnZXRfdHlwZTsKKworLyoKKyAqIFdoZW4gYW4gYWR2aWNlIGl0ZW0gZGVz Y3JpYmVzIGEgYml0bWFwIGluZGV4IHNjYW4sIGl0IG1heSBuZWVkIHRvIGRlc2NyaWJlCisgKiB0 aGUgdXNlIG9mIG11bHRpcGxlIGluZGV4ZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFf SU5ERVhfTkFNRSwJCQkvKiBpbmRleCBzY2hlbWEgKyBuYW1lICovCisJUEdQQV9JTkRFWF9BTkQs CQkJCS8qICYmKGl0ZW0gLi4uKSAqLworCVBHUEFfSU5ERVhfT1IJCQkJLyogfHwoaXRlbSAuLi4p ICovCit9IHBncGFfaW5kZXhfdHlwZTsKKworLyoKKyAqIEFuIGluZGV4IHNwZWNpZmljYXRpb24u IFdlIHVzZSB0aGlzIGZvciBJTkRFWF9TQ0FOLCBJTkRFWF9PTkxZX1NDQU4sCisgKiBhbmQgQklU TUFQX0hFQVBfU0NBTiBhZHZpY2UsIGJ1dCBpbiB0aGUgZm9ybWVyIHR3byBjYXNlcywgdGhlIHRh cmdldCBtdXN0CisgKiBiZSBvZiB0eXBlIFBHUEFfSU5ERVhfTkFNRS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9pbmRleF90YXJnZXQKK3sKKwlwZ3BhX2luZGV4X3R5cGUgaXR5cGU7CisKKwkv KiBJbmRleCBzY2hlbSBhbmQgbmFtZSwgd2hlbiBpdHlwZSA9PSBQR1BBX0lOREVYX05BTUUgKi8K KwljaGFyCSAgICppbmRuYW1lc3BhY2U7CisJY2hhcgkgICAqaW5kbmFtZTsKKworCS8qIExpc3Qg b2YgcGdwYV9pbmRleF90YXJnZXQgb2JqZWN0cywgd2hlbiBpdHlwZSAhPSBQR1BBX0lOREVYX05B TUUgKi8KKwlMaXN0CSAgICpjaGlsZHJlbjsKK30gcGdwYV9pbmRleF90YXJnZXQ7CisKKy8qCisg KiBBIHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWluZyBnaXZlbiwgd2hpY2gg Y291bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgdGhhdCB3ZSB3YW50IHRv IGJyZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisgKiBvciBhIHN1Ymxpc3Qg b2Ygc29tZSBraW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV90YXJnZXQKK3sK KwlwZ3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlzIGZpZWxkIGlzIG1lYW5p bmdmdWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSLgorCSAqCisJICogQWxs IGlkZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBhbiBvY2N1cnJlbmNlIG51 bWJlcjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVMTC4gTm90ZSB0aGF0IGl0 J3MgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5hbWUgd2l0aG91dCBhIHBh cnRpdGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICovCisJcGdwYV9pZGVudGlm aWVyIHJpZDsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiB0dHlwZSBpcyBQUEdB X1RBUkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFnIGlzIFBHUEFfVEFHX0lO REVYX1NDQU4sIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwgb3IKKwkgKiBQR1BBX1RBR19CSVRN QVBfSEVBUF9TQ0FOLgorCSAqLworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworCisJLyoK KwkgKiBXaGVuIHRoZSB0dHlwZSBpcyBQR1BBX1RBUkdFVF88YW55dGhpbmc+X0xJU1QsIHRoaXMg ZmllbGQgY29udGFpbnMgYQorCSAqIGxpc3Qgb2YgYWRkaXRpb25hbCBwZ3BhX2FkdmljZV90YXJn ZXQgb2JqZWN0cy4gT3RoZXJ3aXNlLCBpdCBpcyB1bnVzZWQuCisJICovCisJTGlzdAkgICAqY2hp bGRyZW47Cit9IHBncGFfYWR2aWNlX3RhcmdldDsKKworLyoKKyAqIFRoZXNlIGFyZSBhbGwgdGhl IGtpbmRzIG9mIGFkdmljZSB0aGF0IHdlIGtub3cgaG93IHRvIHBhcnNlLiBJZiBhIGtleXdvcmQK KyAqIGlzIGZvdW5kIGF0IHRoZSB0b3AgbGV2ZWwsIGl0IG11c3QgYmUgaW4gdGhpcyBsaXN0Lgor ICoKKyAqIElmIHlvdSBjaGFuZ2UgYW55dGhpbmcgaGVyZSwgYWxzbyB1cGRhdGUgcGdwYV9wYXJz ZV9hZHZpY2VfdGFnIGFuZAorICogcGdwYV9jc3RyaW5nX2FkdmljZV90YWcuCisgKi8KK3R5cGVk ZWYgZW51bSBwZ3BhX2FkdmljZV90YWdfdHlwZQoreworCVBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU4sCisJUEdQQV9UQUdfRk9SRUlHTl9KT0lOLAorCVBHUEFfVEFHX0dBVEhFUiwKKwlQR1BBX1RB R19HQVRIRVJfTUVSR0UsCisJUEdQQV9UQUdfSEFTSF9KT0lOLAorCVBHUEFfVEFHX0lOREVYX09O TFlfU0NBTiwKKwlQR1BBX1RBR19JTkRFWF9TQ0FOLAorCVBHUEFfVEFHX0pPSU5fT1JERVIsCisJ UEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX1BM QUlOLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX05FU1RF RF9MT09QX01FTU9JWkUsCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU4sCisJUEdQQV9UQUdf Tk9fR0FUSEVSLAorCVBHUEFfVEFHX1BBUlRJVElPTldJU0UsCisJUEdQQV9UQUdfU0VNSUpPSU5f Tk9OX1VOSVFVRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUsCisJUEdQQV9UQUdfU0VRX1ND QU4sCisJUEdQQV9UQUdfVElEX1NDQU4KK30gcGdwYV9hZHZpY2VfdGFnX3R5cGU7CisKKy8qCisg KiBBbiBpdGVtIG9mIGFkdmljZSwgbWVhbmluZyBhIHRhZyBhbmQgdGhlIGxpc3Qgb2YgYWxsIHRh cmdldHMgdG8gd2hpY2gKKyAqIGl0IGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICogInRhcmdldHMi IGlzIGEgbGlzdCBvZiBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4KKyAqCisgKiBUaGUgTGlz dCByZXR1cm5lZCBmcm9tIHBncGFfeXlwYXJzZSBpcyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0g b2JqZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfaXRlbQoreworCXBncGFf YWR2aWNlX3RhZ190eXBlIHRhZzsKKwlMaXN0CSAgICp0YXJnZXRzOworfSBwZ3BhX2FkdmljZV9p dGVtOworCisvKgorICogUmVzdWx0IG9mIGNvbXBhcmluZyBhbiBhcnJheSBvZiBwZ3BhX3JlbGF0 aW9uX2lkZW50aWZpZXIgb2JqZWN0cyB0byBhCisgKiBwZ3BhX2FkdmljZV90YXJnZXQuCisgKgor ICogUEdQQV9JVE1fRVFVQUwgbWVhbnMgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgc29tZSBp ZGVudGlmaWVyLCBhbmQKKyAqIGFsbCBpZGVudGlmaWVycyB3ZXJlIG1hdGNoZWQgdG8gYSB0YXJn ZXQuCisgKgorICogUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQgYWxsIGlkZW50 aWZpZXJzIG1hdGNoZWQgdG8gYSB0YXJnZXQsCisgKiBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciB0 YXJnZXRzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGlzCisgKiBsb29r aW5nIHRvIGFwcGx5IHRvIGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlIHBsdXMgc29tZSBhZGRpdGlv bmFsIG9uZXMgdGhhdAorICogd2UgZG9uJ3QgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9UQVJHRVRT X0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBhbgorICog aWRlbnRpZmllcnMsIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIGlkZW50aWZpZXJzLiBHZW5lcmFs bHksIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGFkdmljZSBpcyBsb29raW5nIHRvIGFwcGx5IHRv IHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9J TlRFUlNFQ1RJTkcgbWVhbnMgdGhhdCBzb21lIGlkZW50aWZlaXJzIGFuZCB0YXJnZXRzIHdlcmUg bWF0Y2hlZCwKKyAqIGJ1dCBuZWl0aGVyIGFsbCBpZGVudGlmaWVycyBub3IgYWxsIHRhcmdldHMg Y291bGQgYmUgbWF0Y2hlZCB0byBpdGVtcyBpbgorICogdGhlIG90aGVyIHNldC4KKyAqCisgKiBQ R1BBX0lUTV9ESVNKT0lOVCBtZWFucyB0aGF0IG5vIG1hdGNoZXMgYmV0d2VlbiBpZGVudGlmZWly cyBhbmQgdGFyZ2V0cyB3ZXJlCisgKiBmb3VuZC4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQ QV9JVE1fRVFVQUwsCisJUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULAorCVBHUEFfSVRNX1RBUkdF VFNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9JTlRFUlNFQ1RJTkcsCisJUEdQQV9JVE1fRElTSk9J TlQKK30gcGdwYV9pdG1fdHlwZTsKKworLyogZm9yIHBncGFfc2Nhbm5lci5sIGFuZCBwZ3BhX3Bh cnNlci55ICovCit1bmlvbiBZWVNUWVBFOworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJf VAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkICp5eXNjYW5f dDsKKyNlbmRpZgorCisvKiBpbiBwZ3BhX3NjYW5uZXIubCAqLworZXh0ZXJuIGludAlwZ3BhX3l5 bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwKKwkJCQkJICAg Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIHZv aWQgcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwK KwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90 ICp5eXNjYW5uZXJwKTsKK2V4dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3Qg eXlzY2FubmVyKTsKKworLyogaW4gcGdwYV9wYXJzZXIueSAqLworZXh0ZXJuIGludAlwZ3BhX3l5 cGFyc2UoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5 c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gTGlzdCAqcGdwYV9wYXJzZShjb25zdCBjaGFyICph ZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCk7CisKKy8qIGluIHBncGFfYXN0LmMgKi8KK2V4 dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBh ZHZpY2VfdGFnKTsKK2V4dGVybiBib29sIHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChw Z3BhX2lkZW50aWZpZXIgKnJpZCwKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCk7CitleHRlcm4gcGdwYV9pdG1fdHlwZSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rhcmdl dChpbnQgbnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJ CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gYm9vbCBwZ3Bh X2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLAorCQkJCQkJCQkJIHBn cGFfaW5kZXhfdGFyZ2V0ICppMik7CitleHRlcm4gcGdwYV9hZHZpY2VfdGFnX3R5cGUgcGdwYV9w YXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCk7CitleHRlcm4gdm9p ZCBwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9pbmRl eF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKml0 YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2ZhMDQ1YTBiM2MKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKQEAg LTAsMCArMSw2MjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfY29sbGVjdG9y LmMKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1v cnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xs ZWN0b3IuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxl Y3Rvci5oIgorCisjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVu Y2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3Qu aCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2Ns ZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVh cl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlKTsKKworI2RlZmluZSBBRFZJQ0VfQ0hVTktfU0laRQkJMTAyNAor I2RlZmluZSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRQk2NAorCisjZGVmaW5lCVBHX0dFVF9BRFZJ Q0VfQ09MVU1OUwk3CisKKy8qCisgKiBBZHZpY2UgZXh0cmFjdGVkIGZyb20gb25lIHF1ZXJ5IHBs YW4sIHRvZ2V0aGVyIHdpdGggdGhlIHF1ZXJ5IHN0cmluZworICogYW5kIHZhcmlvdXMgb3RoZXIg aWRlbnRpZnlpbmcgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9jb2xsZWN0ZWRf YWR2aWNlCit7CisJT2lkCQkJdXNlcmlkOwkJCS8qIHVzZXIgT0lEICovCisJT2lkCQkJZGJpZDsJ CQkvKiBkYXRhYmFzZSBPSUQgKi8KKwl1aW50NjQJCXF1ZXJ5aWQ7CQkvKiBxdWVyeSBpZGVudGlm aWVyICovCisJVGltZXN0YW1wVHogdGltZXN0YW1wOwkJLyogcXVlcnkgdGltZXN0YW1wICovCisJ aW50CQkJYWR2aWNlX29mZnNldDsJLyogc3RhcnQgb2YgYWR2aWNlIGluIHRleHR1YWwgZGF0YSAq LworCWNoYXIJCXRleHR1YWxfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBwZ3BhX2Nv bGxlY3RlZF9hZHZpY2U7CisKKy8qCisgKiBBIGJ1bmNoIG9mIHBvaW50ZXJzIHRvIHBncGFfY29s bGVjdGVkX2FkdmljZSBvYmplY3RzLCBzdG9yZWQgaW4KKyAqIGJhY2tlbmQtbG9jYWwgbWVtb3J5 LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworeworCXBncGFf Y29sbGVjdGVkX2FkdmljZSAqZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfbG9j YWxfYWR2aWNlX2NodW5rOworCisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSBw Z3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cyB0aGF0IHdlJ3JlCisgKiBzdG9yaW5nIGluIGxv Y2FsIG1lbW9yeS4KKyAqCisgKiBXZSBhc3NpZ24gY29uc2VjdXRpdmUgSURzLCBzdGFydGluZyBm cm9tIDAsIHRvIGVhY2ggcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCisgKiBvYmplY3QgdGhhdCB3ZSBz dG9yZS4gVGhlIGFjdHVhbCBzdG9yYWdlIGlzIGFuIGFycmF5IG9mIGNodW5rcywgd2hpY2gKKyAq IGhlbHBzIGtlZXAgbWVtY3B5KCkgb3ZlcmhlYWQgbG93IHdoZW4gd2Ugc3RhcnQgZGlzY2FyZGlu ZyBvbGRlciBkYXRhLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZQorewor CXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7 CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJcGdwYV9sb2NhbF9hZHZpY2Vf Y2h1bmsgKipjaHVua3M7Cit9IHBncGFfbG9jYWxfYWR2aWNlOworCisvKgorICogSnVzdCBsaWtl IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQg YXJlYSwKKyAqIHNvIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBv aW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3sK Kwlkc2FfcG9pbnRlciBlbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9zaGFyZWRf YWR2aWNlX2NodW5rOworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlLCBidXQg c3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwgc28KKyAqIHdlIG11c3QgdXNlIGRzYV9w b2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3NoYXJlZF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3Rf aWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXpl OworCWRzYV9wb2ludGVyIGNodW5rczsKK30gcGdwYV9zaGFyZWRfYWR2aWNlOworCisvKiBQb2lu dGVycyB0byBsb2NhbCBhbmQgc2hhcmVkIGNvbGxlY3RvcnMgKi8KK3N0YXRpYyBwZ3BhX2xvY2Fs X2FkdmljZSAqbG9jYWxfY29sbGVjdG9yID0gTlVMTDsKK3N0YXRpYyBwZ3BhX3NoYXJlZF9hZHZp Y2UgKnNoYXJlZF9jb2xsZWN0b3IgPSBOVUxMOworCisvKiBTdGF0aWMgZnVuY3Rpb25zICovCitz dGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZShP aWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCQkgT2lkIGRiaWQsCisJCQkJCQkJCQkJCQkJCSB1aW50 NjQgcXVlcnlJZCwKKwkJCQkJCQkJCQkJCQkJIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJ CQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBkc2FfYXJlYSAqYXJlYSwKKwkJ CQkJCQkJCQkJCQkJIGRzYV9wb2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9y ZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSk7CitzdGF0aWMgdm9pZCBw Z3BhX3RyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3Jl X3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMgdm9pZCBwZ3Bh X3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KTsKKworLyogSGVs cGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHBncGFfY29sbGVj dGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK3F1ZXJ5X3N0cmluZyhw Z3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9kYXRhOwor fQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgYWR2aWNlIHN0cmluZyBmcm9t IHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2Fk dmljZV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRl eHR1YWxfZGF0YSArIGNhLT5hZHZpY2Vfb2Zmc2V0OworfQorCisvKgorICogU3RvcmUgY29sbGVj dGVkIHF1ZXJ5IGFkdmljZSBpbnRvIHRoZSBsb2NhbCBvciBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rv ciwKKyAqIGFzIGFwcHJvcHJpYXRlLgorICovCit2b2lkCitwZ3BhX2NvbGxlY3RfYWR2aWNlKHVp bnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCWNvbnN0IGNoYXIg KmFkdmljZV9zdHJpbmcpCit7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisJT2lkCQkJ ZGJpZCA9IE15RGF0YWJhc2VJZDsKKwlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7CisKKwlpZiAocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDAp CisJeworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2Fk dmljZV9nZXRfbWN4dCgpKTsKKwkJY2EgPSBwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2Vy aWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJCQlxdWVyeV9zdHJpbmcsIGFkdmljZV9z dHJpbmcsCisJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisJCXBncGFfc3RvcmVfbG9jYWxfYWR2aWNl KGNhKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWlmIChw Z19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlkc2FfYXJl YSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2Ff cG9pbnRlcjsKKworCQlwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1 ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLCBhcmVh LAorCQkJCQkJCQkgICAmY2FfcG9pbnRlcik7CisJCXBncGFfc3RvcmVfc2hhcmVkX2FkdmljZShj YV9wb2ludGVyKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZmlsbCBhIG5ldyBwZ3Bh X2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0LgorICoKKyAqIElmIGFyZWEgIT0gTlVMTCwgaXQgaXMg dXNlZCB0byBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZSByZXN1bHRpbmcKKyAqIGRz YV9wb2ludGVyIGlzIHJldHVybmVkIHZpYSAqcmVzdWx0LgorICoKKyAqIElmIGFyZWEgPT0gTlVM TCwgdGhlIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkIGluIHRoZSBjdXJyZW50IG1lbW9yeSBjb250 ZXh0LAorICogYW5kIHJlc3VsdCBpcyBub3QgZXhhbWluZWQgb3IgbW9kaWZpZWQuCisgKi8KK3N0 YXRpYyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKgorcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2Uo T2lkIHVzZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJICAgVGltZXN0YW1w VHogdGltZXN0YW1wLAorCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJ ICAgY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCSAgIGRzYV9hcmVhICphcmVhLCBk c2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVlcnlfc3RyaW5nX2xlbmd0aCA9IHN0 cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFkdmljZV9zdHJpbmdfbGVuZ3RoID0g c3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCXRvdGFsX2xlbmd0aDsKKwlwZ3Bh X2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVuZ3RoID0gb2Zmc2V0b2YocGdwYV9j b2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsgcXVlcnlfc3RyaW5nX2xlbmd0aCAr IGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEgPT0gTlVMTCkKKwkJY2EgPSBwYWxs b2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVzdWx0ID0gZHNhX2FsbG9jYXRlKGFy ZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsICpyZXN1bHQp OworCX0KKworCWNhLT51c2VyaWQgPSBHZXRVc2VySWQoKTsKKwljYS0+ZGJpZCA9IE15RGF0YWJh c2VJZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5SWQ7CisJY2EtPnRpbWVzdGFtcCA9IHRpbWVzdGFt cDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1ZXJ5X3N0cmluZ19sZW5ndGg7CisKKwltZW1jcHko Y2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3RyaW5nLCBxdWVyeV9zdHJpbmdfbGVuZ3RoKTsKKwlt ZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2EtPmFkdmljZV9vZmZzZXRdLAorCQkgICBhZHZpY2Vf c3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0aCk7CisKKwlyZXR1cm4gY2E7Cit9CisKKy8qCisg KiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byBvdXIgYmFja2VuZC1sb2NhbCBh ZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHN3aXRj aGluZyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNvbnRleHQ7CisgKiB0aGUgcHJvdmlkZWQg b2JqZWN0IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHRoYXQgc2FtZSBjb250ZXh0Lgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRf YWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1aW50NjQJCWNodW5rX29m ZnNldDsKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7CisKKwkvKiBJ ZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBpc24ndCBpbml0aWFsaXplZCB5ZXQsIGRvIHRo YXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQorCXsKKwkJbGEgPSBwYWxsb2MwKHNpemVvZihw Z3BhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBB RFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHBhbGxvYzBfYXJyYXkocGdw YV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJICAgbGEtPmNodW5rX2FycmF5X2FsbG9j YXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9yID0gbGE7CisJfQorCisJLyogQ29tcHV0ZSBj aHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNlLiAqLworCWNodW5r X251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpF OworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9D SFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5rIGFycmF5LCBpZiBuZWVkZWQuICovCisJaWYg KGNodW5rX251bWJlciA+IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJCWlu dAkJCW5ld19zaXplOworCisJCW5ld19zaXplID0gbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9z aXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSByZXBhbGxvYzBf YXJyYXkobGEtPmNodW5rcywKKwkJCQkJCQkJCSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayAqLAor CQkJCQkJCQkJIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSwKKwkJCQkJCQkJCSBuZXdf c2l6ZSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXplOworCX0K KworCS8qIEFsbG9jYXRlIG5ldyBjaHVuaywgaWYgbmVlZGVkLiAqLworCWlmIChsYS0+Y2h1bmtz W2NodW5rX251bWJlcl0gPT0gTlVMTCkKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJdID0gcGFs bG9jMF9vYmplY3QocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmspOworCisJLyogU2F2ZSBwb2ludGVy IGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQobGEtPmNodW5rc1tjaHVua19u dW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gTlVMTCk7CisJbGEtPmNodW5rc1tjaHVu a19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYTsKKwkrK2xhLT5uZXh0X2lkOwor CisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRh dGEuICovCisJcGdwYV90cmltX2xvY2FsX2FkdmljZShwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xs ZWN0aW9uX2xpbWl0KTsKK30KKworLyoKKyAqIEFkZCBhIHBnX2NvbGxlY3RlZF9hZHZpY2Ugb2Jq ZWN0IHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogJ2NhX3BvaW50ZXIn IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIHBnX3BsYW5fYWR2aWNlIERTQSBh cmVhCisgKiBhbmQgc2hvdWxkIHBvaW50IHRvIGFuIG9iamVjdCBvZiB0eXBlIHBncGFfY29sbGVj dGVkX2FkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfc3RvcmVfc2hhcmVkX2FkdmljZShk c2FfcG9pbnRlciBjYV9wb2ludGVyKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2 NAkJY2h1bmtfb2Zmc2V0OworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2 aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJl YSgpOworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCWRzYV9w b2ludGVyICpjaHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOwor CisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5s b2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8g dGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93LgorCSAqIElmIHdl J3JlIHRoZSBmaXJzdCBvbmVzIHRvIGF0dGFjaCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIHRoZSBv YmplY3QuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9j b2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCQlzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rv ciA9CisJCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlKSk7 CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+ c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgc29t ZSBvdGhlciBiYWNrZW5kIG1heSBoYXZlIHN1Y2NlZWRlZCBpbiBjcmVhdGluZworCSAqIHRoZSBt YWluIGNvbGxlY3RvciBvYmplY3QgYnV0IGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBpbml0aWFsIGNo dW5rCisJICogYXJyYXksIHNvIHdlIG11c3QgYmUgcHJlcGFyZWQgdG8gYWxsb2NhdGUgdGhlIGNo dW5rIGFycmF5IGhlcmUgd2hldGhlcgorCSAqIG9yIG5vdCB3ZSBjcmVhdGVkIHRoZSBjb2xsZWN0 b3Igb2JqZWN0LgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yLT5jaHVua19hcnJheV9hbGxv Y2F0ZWRfc2l6ZSA9PSAwKQorCXsKKwkJc2EtPmNodW5rcyA9CisJCQlkc2FfYWxsb2NhdGUwKGFy ZWEsCisJCQkJCQkgIHNpemVvZihkc2FfcG9pbnRlcikgKiBBRFZJQ0VfQ0hVTktfQVJSQVlfU0la RSk7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVOS19BUlJB WV9TSVpFOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBhdCB3aGljaCB0byBz dG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAoc2EtPm5leHRfaWQgLSBzYS0+ YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQgPSAoc2EtPm5leHRf aWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8qIEdldCB0aGUgYWRk cmVzcyBvZiB0aGUgY2h1bmsgYXJyYXkgYW5kLCBpZiBuZWVkZWQsIGV4dGVuZCBpdC4gKi8KKwlp ZiAoY2h1bmtfbnVtYmVyID49IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJ CWludAkJCW5ld19zaXplOworCQlkc2FfcG9pbnRlciBuZXdfY2h1bmtzOworCisJCS8qCisJCSAq IERTQSBjYW4ndCBlbmxhcmdlIGFuIGV4aXN0aW5nIGFsbG9jYXRpb24sIHNvIHdlIG11c3QgbWFr ZSBhIG5ldworCQkgKiBhbGxvY2F0aW9uIGFuZCBjb3B5IGRhdGEgb3Zlci4KKwkJICovCisJCW5l d19zaXplID0gc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FS UkFZX1NJWkU7CisJCW5ld19jaHVua3MgPSBkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihkc2Ff cG9pbnRlcikgKiBuZXdfc2l6ZSk7CisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFy ZWEsIG5ld19jaHVua3MpOworCQltZW1jcHkoY2h1bmtfYXJyYXksIGRzYV9nZXRfYWRkcmVzcyhh cmVhLCBzYS0+Y2h1bmtzKSwKKwkJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiBzYS0+Y2h1bmtf YXJyYXlfYWxsb2NhdGVkX3NpemUpOworCQlkc2FfZnJlZShhcmVhLCBzYS0+Y2h1bmtzKTsKKwkJ c2EtPmNodW5rcyA9IG5ld19jaHVua3M7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6 ZSA9IG5ld19zaXplOworCX0KKwllbHNlCisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNz KGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNpcmVk IGNodW5rLCBhbGxvY2F0aW5nIGl0IGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfYXJyYXlbY2h1 bmtfbnVtYmVyXSA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJY2h1bmtfYXJyYXlbY2h1bmtfbnVt YmVyXSA9CisJCQlkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2Vf Y2h1bmspKTsKKwljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVu a19udW1iZXJdKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIu ICovCisJQXNzZXJ0KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gSW52YWxpZERzYVBv aW50ZXIpOworCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYV9wb2ludGVyOworCSsr c2EtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwg ZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVhLCBwZ19w bGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCk7CisKKwkvKiBSZWxlYXNlIGxvY2sg b24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKK30KKwor LyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQgaW4gYmFja2VuZC1sb2NhbCBt ZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMg dm9pZAorcGdwYV90cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpCit7CisJcGdwYV9sb2NhbF9h ZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsKKwl1 aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50NjQJ CXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisKKwkv KiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5nIHRv IGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBsYS0+bmV4dF9pZCAtIGxhLT5vbGRlc3RfaWQ7CisJ aWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEZyZWUgZW5vdWdo IGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3Vu dCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJewor CQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisKKwkJY2h1 bmtfbnVtYmVyID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktf U0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgJSBB RFZJQ0VfQ0hVTktfU0laRTsKKworCQlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5l bnRyaWVzW2NodW5rX29mZnNldF0gIT0gTlVMTCk7CisJCXBmcmVlKGxhLT5jaHVua3NbY2h1bmtf bnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJbGEtPmNodW5rc1tjaHVua19udW1i ZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBOVUxMOworCQkrK2xhLT5vbGRlc3RfaWQ7CisJ CS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVu dGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKGxhLT5vbGRlc3RfaWQgLSBs YS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8 IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJcGZyZWUobGEtPmNodW5rc1tuXSk7CisKKwkvKiBT bGlkZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhl IGFycmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2Vf aWQgKworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsK KwlyZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1bmtf Y291bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmxhLT5j aHVua3NbMF0sICZsYS0+Y2h1bmtzW3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihwZ3Bh X2xvY2FsX2FkdmljZV9jaHVuayAqKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisKKwkvKiBB ZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFzZV9pZCArPSB0cmlt X2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNv bGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQor ICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cmltX3NoYXJlZF9h ZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCkKK3sKKwlwZ3BhX3NoYXJlZF9hZHZpY2Ug KnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0 CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmlt X2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2lu dGVyICpjaHVua19hcnJheTsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxp bWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0 X2lkIC0gc2EtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0 dXJuOworCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtf YXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVu b3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1f Y291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+ b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29m ZnNldCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7 CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVt YmVyXSk7CisJCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWRE c2FQb2ludGVyKTsKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0 XSk7CisJCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsK KwkJKytzYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkg Y2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3Vu dCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJ Zm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVl KGFyZWEsIGNodW5rX2FycmF5W25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2lu dGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtf Y291bnQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5L X1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9 IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2No dW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0 cmltX2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2No dW5rX2NvdW50KTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVlIGFjY29yZGluZ2x5LiAqLwor CXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktfU0laRTsKK30K KworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0 ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlwZ3BhX3RyaW1fbG9jYWxfYWR2 aWNlKDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBm dW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1v cnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2Vf YXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7 CisKKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJ ICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5 ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4g ZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuCisJ ICovCisJaWYgKHNoYXJlZF9jb2xsZWN0b3IgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hh cmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJeworCQkJTFdMb2NrUmVsZWFz ZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQorCQlzaGFyZWRfY29s bGVjdG9yID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsK Kwl9CisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrICovCisJcGdwYV90cmltX3NoYXJlZF9hZHZpY2Uo YXJlYSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlQR19SRVRVUk5f Vk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNv bGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpy c2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJ ZCgpOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJaWYgKGxhID09IE5V TEwpCisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICov CisJZm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxhLT5uZXh0X2lkOyArK2lk KQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0Owor CQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJ Q0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07 CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJ WkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19T SVpFOworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29m ZnNldF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkp CisJCQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZh bHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9i amVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShj YS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcEdldERhdHVtKGNhLT50aW1lc3Rh bXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHF1ZXJ5X3N0cmluZyhjYSkp OworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcoY2EpKTsK KworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXRE ZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1cm4gKERhdHVtKSAwOwor fQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxlY3RlZCBp biBzaGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZp Y2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJu U2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRl ID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5f YWR2aWNlX2RzYV9hcmVhKCk7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBncGFfc2hh cmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCisJSW5pdE1hdGVyaWFsaXplZFNS RihmY2luZm8sIDApOworCisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0Fj cXVpcmUoJnN0YXRlLT5sb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qg YXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93 OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwgd2UgY2FuIHJl dHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlpZiAoc2EgPT0g TlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChE YXR1bSkgMDsKKwkJfQorCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3Mo YXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qIEdldCBhIHBvaW50ZXIg dG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFy ZWEsIHNhLT5jaHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAo dWludDY0IGlkID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJ CXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9z aGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsK KwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQ R19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIHNh LT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBz YS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJY2EgPSBkc2FfZ2V0X2Fk ZHJlc3MoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisKKwkJdmFsdWVzWzBd ID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNh LT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJ dmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBU aW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dl dFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRl eHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNp bmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7 CisJfQorCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxl YXNlKCZzdGF0ZS0+bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iNmU3NDZhMDZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApAQCAtMCwwICsxLDE4IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5oCisgKgkgIGNvbGxlY3QgYWR2aWNlIGludG8gYmFj a2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBQR1BBX0NPTExFQ1RPUl9ICisjZGVmaW5lIFBHUEFfQ09MTEVDVE9SX0gK KworZXh0ZXJuIHZvaWQgcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJZCwgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmZhODA3NWQ2NmUKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCkBAIC0wLDAg KzEsNDc2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuYwor ICoJICBjcmVhdGUgYXBwcm9wcmlhdGUgaWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJp ZXMKKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBiZSBhYmxlIHRvIHByb2R1 Y2UgaWRlbnRpZmllcnMgZm9yIHJhbmdlCisgKiB0YWJsZSBlbnRyaWVzIHRoYXQgYXJlIHVuaXF1 ZSwgdW5kZXJzdGFuZGFibGUgdG8gaHVtYW4gYmVpbmdzLCBhbmQKKyAqIGFibGUgdG8gYmUgcmVj b25zdHJ1Y3RlZCBkdXJpbmcgZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcy4gQXMgYW4KKyAqIGV4Y2Vw dGlvbiwgd2UgZG8gbm90IGNhcmUgYWJvdXQsIG9yIHdhbnQgdG8gcHJvZHVjZSwgaWRlbnRpZmll cnMgZm9yCisgKiBSVEVfSk9JTiBlbnRyaWVzLiBUaGlzIGlzIGJlY2F1c2UgKDEpIHdlIHdvdWxk IGVuZCB1cCB3aXRoIGEgdG9uIG9mCisgKiBSVEVzIHdpdGggdW5oZWxwZnVsIG5hbWVzIGxpa2Ug dW5uYW1lZF9qb2luXzE3OyAoMikgbm90IGFsbCBqb2lucyBoYXZlCisgKiBSVEVzOyBhbmQgKDMp IHdlIGludGVuZCB0byByZWZlciB0byBqb2lucyBieSB0aGVpciBjb25zdGl0dWVudCBtZW1iZXJz CisgKiByYXRoZXIgdGhhbiBieSByZWZlcmVuY2UgdG8gdGhlIGpvaW4gUlRFLgorICoKKyAqIElu IGdlbmVyYWwsIHdlIGNvbnN0cnVjdCBpZGVudGlmaWVycyBvZiB0aGUgZm9sbG93aW5nIGZvcm06 CisgKgorICogYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9jaGlsZF90YWJsZV9uYW1lQHN1 YnF1ZXJ5X25hbWUKKyAqCisgKiBIb3dldmVyLCBvY2N1cnJlbmNlX251bWJlciBpcyBvbWl0dGVk IHdoZW4gaXQgaXMgdGhlIGZpcnN0IG9jY3VycmVuY2UKKyAqIHdpdGhpbiB0aGUgc2FtZSBzdWJx dWVyeSwgY2hpbGRfdGFibGVfbmFtZSBpcyBvbWl0dGVkIGZvciByZWxhdGlvbnMgdGhhdAorICog YXJlIG5vdCBjaGlsZCB0YWJsZXMsIGFuZCBzdWJxdWVyeV9uYW1lIGlzIG9taXR0ZWQgZm9yIHRo ZSB0b3Btb3N0CisgKiBxdWVyeSBsZXZlbC4gV2hlbmV2ZXIgYW4gaXRlbSBpcyBvbWl0dGVkLCB0 aGUgcHJlY2VkaW5nIHB1bmN0dWF0aW9uIG1hcmsKKyAqIGlzIGFsc28gb21pdHRlZC4gIElkZW50 aWZpZXItc3R5bGUgZXNjYXBpbmcgaXMgYXBwbGllZCB0byBhbGlhc19uYW1lIGFuZAorICogc3Vi cXVlcnlfbmFtZS4gIFdoZW5ldmVyIHdlIGluY2x1ZGUgY2hpbGRfdGFibGVfbmFtZSwgd2UgYWx3 YXlzCisgKiBzY2hlbWEtcXVhbGlmaWVkIG5hbWUsIGJ1dCB3cml0aW5nIHRoZWlyIG93biBwbGFu IGFkdmljZSBhcmUgbm90IHJlcXVpcmVkCisgKiB0byBkbyBzby4gIElkZW50aWZpZXItc3R5bGUg ZXNjYXBpbmcgaXMgYXBwbGllZCB0byB0aGUgc2NoZW1hIGFuZCB0byB0aGUKKyAqIHJlbGF0aW9u IG5hbWVzIHNlcGFyYXRlbHkuCisgKgorICogVGhlIHVwc2hvdCBvZiBhbGwgb2YgdGhlc2UgcnVs ZXMgaXMgdGhhdCBpbiBzaW1wbGUgY2FzZXMsIHRoZSByZWxhdGlvbgorICogaWRlbnRpZmllciBp cyB0ZXh0dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBhbGlhcyBuYW1lLCBtYWtpbmcgbGlmZSBlYXNp ZXIKKyAqIGZvciB1c2Vycy4gSG93ZXZlciwgZXZlbiBpbiBjb21wbGV4IGNhc2VzLCBldmVyeSBy ZWxhdGlvbiBpZGVudGlmaWVyCisgKiBmb3IgYSBnaXZlbiBxdWVyeSB3aWxsIGJlIHVuaXF1ZSAo b3IgYXQgbGVhc3Qgd2UgaG9wZSBzbzogaWYgbm90LCB0aGlzCisgKiBjb2RlIGlzIGJ1Z2d5IGFu ZCB0aGUgaWRlbnRpZmllciBmb3JtYXQgbWlnaHQgbmVlZCB0byBiZSByZXRob3VnaHQpLgorICoK KyAqIEEga2V5IGdvYWwgb2YgdGhpcyBzeXN0ZW0gaXMgdGhhdCB3ZSB3YW50IHRvIGJlIGFibGUg dG8gcmVjb25zdHJ1Y3QgdGhlCisgKiBzYW1lIGlkZW50aWZpZXJzIGR1cmluZyBhIGZ1dHVyZSBw bGFubmluZyBjeWNsZSBmb3IgdGhlIHNhbWUgcXVlcnksIHNvCisgKiB0aGF0IGlmIGEgY2VydGFp biBiZWhhdmlvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2VydGFpbiBpZGVudGlmaWVyLCB3ZSBjYW4K KyAqIHByb3Blcmx5IGlkZW50aWZ5IHRoZSBSVEkgZm9yIHdoaWNoIHRoYXQgYmVoYXZpb3IgaXMg bWFuZGF0ZWQuIEluIG9yZGVyCisgKiBmb3IgdGhpcyB0byB3b3JrLCBzdWJxdWVyeSBuYW1lcyBt dXN0IGJlIHVuaXF1ZSBhbmQga25vd24gYmVmb3JlIHRoZQorICogc3VicXVlcnkgaXMgcGxhbm5l ZCwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGlkZW50aWZpZXIgbXVzdCBub3QgZGVwZW5kCisg KiBvbiBhbnkgcGFydCBvZiB0aGUgcXVlcnkgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBzdWJxdWVy eSBsZXZlbC4gSW4KKyAqIHBhcnRpY3VsYXIsIG9jY3VycmVuY2VfbnVtYmVyIG11c3QgYmUgY2Fs Y3VsYXRlZCByZWxhdGl2ZSB0byB0aGUgcmFuZ2UKKyAqIHRhYmxlIGZvciB0aGUgcmVsZXZhbnQg c3VicXVlcnksIG5vdCB0aGUgZmluYWwgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLgorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKworc3RhdGljIEluZGV4ICpwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVf bGVuZ3RoLCBMaXN0ICpydGFibGUsCisJCQkJCQkJCQkgIExpc3QgKmFwcGluZm9zKTsKK3N0YXRp YyBpbnQJcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIEluZGV4ICp0b3BfcnRp X21hcCwKKwkJCQkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBydGkpOworCisv KgorICogQ3JlYXRlIGEgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmcm9tIHNjcmF0Y2guCisgKgor ICogVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGNhbGxlciB0byBkbyBhbGwgdGhlIGhlYXZ5IGxp ZnRpbmcsIHNvIGl0J3MKKyAqIGdlbmVyYWxseSBiZXR0ZXIgdG8gdXNlIG9uZSBvZiB0aGUgZnVu Y3Rpb25zIGJlbG93IGluc3RlYWQuCisgKgorICogU2VlIHRoZSBmaWxlIGhlYWRlciBjb21tZW50 cyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgYW4KKyAqIGlkZW50aWZpZXIuCisg Ki8KK2NvbnN0IGNoYXIgKgorcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25zdCBwZ3BhX2lkZW50 aWZpZXIgKnJpZCkKK3sKKwljb25zdCBjaGFyICpyZXN1bHQ7CisKKwlBc3NlcnQocmlkLT5hbGlh c19uYW1lICE9IE5VTEwpOworCXJlc3VsdCA9IHF1b3RlX2lkZW50aWZpZXIocmlkLT5hbGlhc19u YW1lKTsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMCk7CisJaWYgKHJpZC0+b2NjdXJy ZW5jZSA+IDEpCisJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcyMlZCIsIHJlc3VsdCwgcmlkLT5vY2N1 cnJlbmNlKTsKKworCWlmIChyaWQtPnBhcnRyZWwgIT0gTlVMTCkKKwl7CisJCWlmIChyaWQtPnBh cnRuc3AgPT0gTlVMTCkKKwkJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcy8lcyIsIHJlc3VsdCwKKwkJ CQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0bnNwKSk7CisJCWVsc2UKKwkJCXJlc3Vs dCA9IHBzcHJpbnRmKCIlcy8lcy4lcyIsIHJlc3VsdCwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZp ZXIocmlkLT5wYXJ0bnNwKSwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVs KSk7CisJfQorCisJaWYgKHJpZC0+cGxhbl9uYW1lICE9IE5VTEwpCisJCXJlc3VsdCA9IHBzcHJp bnRmKCIlc0AlcyIsIHJlc3VsdCwgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBsYW5fbmFtZSkpOwor CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbXB1dGUgYSByZWxhdGlvbiBpZGVudGlm aWVyIGZvciBhIHBhcnRpY3VsYXIgUlRJLgorICoKKyAqIFRoZSBjYWxsZXIgcHJvdmlkZXMgcm9v dCBhbmQgcnRpLCBhbmQgZ2V0cyB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgYmFjayB2aWEKKyAqIHRo ZSByZW1haW5pbmcgcGFyYW1ldGVycy4KKyAqLwordm9pZAorcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJICAgcGdwYV9p ZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXRvcF9ydGkgPSBydGk7CisJaW50CQkJb2NjdXJy ZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJsRW50cnkgKnRvcF9ydGU7 CisJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisK KwkvKgorCSAqIElmIHRoaXMgaXMgYSBjaGlsZCBSVEUsIGZpbmQgdGhlIHRvcG1vc3QgcGFyZW50 IHRoYXQgaXMgc3RpbGwgb2YgdHlwZQorCSAqIFJURV9SRUxBVElPTi4gV2UgZG8gdGhpcyBiZWNh dXNlIHdlIGlkZW50aWZ5IGNoaWxkcmVuIG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzIGJ5IHRo ZSBuYW1lIG9mIHRoZSBjaGlsZCB0YWJsZSwgYnV0IHN1YnF1ZXJpZXMgY2FuIGFsc28gaGF2ZQor CSAqIGNoaWxkIHJlbHMgYW5kIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhvc2UgaGVyZS4KKwkgKi8K Kwlmb3IgKDs7KQorCXsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsKKwkJUmFuZ2VUYmxFbnRy eSAqcGFyZW50X3J0ZTsKKworCQkvKiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlmIHRo ZXJlIGFyZSBubyBjaGlsZHJlbiAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9PSBO VUxMIHx8CisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbdG9wX3J0aV0pID09 IE5VTEwpCisJCQlicmVhazsKKworCQlwYXJlbnRfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChhcHBp bmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCQlicmVhazsKKworCQl0b3BfcnRpID0gYXBwaW5mby0+cGFyZW50X3Jl bGlkOworCX0KKworCS8qIEdldCB0aGUgcmFuZ2UgdGFibGUgZW50cmllcyBmb3IgdGhlIFJUSSBh bmQgdG9wIFJUSS4gKi8KKwlydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0aSwgcm9vdCk7CisJdG9w X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2godG9wX3J0aSwgcm9vdCk7CisJQXNzZXJ0KHJ0ZS0+cnRl a2luZCAhPSBSVEVfSk9JTik7CisJQXNzZXJ0KHRvcF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4p OworCisJLyogV29yayBvdXQgdGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJZm9y IChJbmRleCBwcmlvcl9ydGkgPSAxOyBwcmlvcl9ydGkgPCB0b3BfcnRpOyArK3ByaW9yX3J0aSkK Kwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5m bzsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQg aXMgYSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRy aWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQg bmFtZSBvZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3Vy cmVuY2VzCisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKgorCQkgKiBOQjogYXBwZW5kX3Jl bF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4KKwkJICovCisJCWlm IChyb290LT5hcHBlbmRfcmVsX2FycmF5ICE9IE5VTEwgJiYKKwkJCShhcHBpbmZvID0gcm9vdC0+ YXBwZW5kX3JlbF9hcnJheVtwcmlvcl9ydGldKSAhPSBOVUxMKQorCQl7CisJCQlSYW5nZVRibEVu dHJ5ICpwYXJlbnRfcnRlOworCisJCQlwYXJlbnRfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChhcHBp bmZvLT5wYXJlbnRfcmVsaWQsIHJvb3QpOworCQkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgPT0g UlRFX1JFTEFUSU9OKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBOVUxMIGVudHJp ZXMgYW5kIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHByaW9yX3J0 aSwgcm9vdCk7CisJCWlmIChwcmlvcl9ydGUgPT0gTlVMTCB8fCBwcmlvcl9ydGUtPnJ0ZWtpbmQg PT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1l IGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3JfcnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0 ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJLyogTG9va3MgbGlr ZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3VycmVuY2U7CisJfQorCisJLyogSWYgdGhp cyBpcyBhIGNoaWxkIHRhYmxlLCBnZXQgdGhlIHNjaGVtYSBhbmQgcmVsYXRpb24gbmFtZXMuICov CisJaWYgKHJ0aSAhPSB0b3BfcnRpKQorCXsKKwkJcGFydG5zcCA9IGdldF9uYW1lc3BhY2VfbmFt ZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJcGFydHJlbCA9IGdl dF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwl9CisKKwkvKiBPSywgd2UgaGF2ZSBhbGwgdGhlIGFu c3dlcnMgd2UgbmVlZC4gUmV0dXJuIHRoZW0gdG8gdGhlIGNhbGxlci4gKi8KKwlyaWQtPmFsaWFz X25hbWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7CisJcmlkLT5vY2N1cnJlbmNlID0gb2Nj dXJyZW5jZTsKKwlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCXJpZC0+cGFydHJlbCA9IHBhcnRy ZWw7CisJcmlkLT5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7Cit9CisKKy8qCisgKiBDb21w dXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBzZXQgb2YgUlRJcywgZXhjZXB0IGZvciBh bnkgUlRFX0pPSU4KKyAqIFJUSXMgdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAqCisgKiBSVEVfSk9J TiBlbnRyaWVzIGFyZSBleGNsdWRlZCBiZWNhdXNlIHRoZXkgY2Fubm90IGJlIG1lbnRpb25lZCBi eSBwbGFuCisgKiBhZHZpY2UuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Ig bWFraW5nIHN1cmUgdGhhdCB0aGUgdGtleXMgYXJyYXkgaXMgbGFyZ2UKKyAqIGVub3VnaCB0byBz dG9yZSB0aGUgcmVzdWx0cy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIg b2YgaWRlbnRpZmllcnMgY29tcHV0ZWQuCisgKi8KK2ludAorcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJzX2J5X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJ CQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcykKK3sKKwlpbnQJCQljb3VudCA9IDA7CisJaW50 CQkJcnRpID0gLTE7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0 aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBwbGFubmVyX3J0X2ZldGNoKHJ0 aSwgcm9vdCk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVl OworCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcnRpLCAmcmlkc1tjb3Vu dCsrXSk7CisJfQorCisJQXNzZXJ0KGNvdW50ID4gMCk7CisJcmV0dXJuIGNvdW50OworfQorCisv KgorICogQ3JlYXRlIGFuIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIGZvciBhbGwg dGhlIG5vbi1OVUxMLAorICogbm9uLVJURV9KT0lOIGVudHJpZXMgaW4gdGhlIFBsYW5uZWRTdG10 J3MgcmFuZ2UgdGFibGUuCisgKi8KK3BncGFfaWRlbnRpZmllciAqCitwZ3BhX2NyZWF0ZV9pZGVu dGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlJbmRleAkJ cnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpOworCXBncGFfaWRlbnRp ZmllciAqcmVzdWx0ID0gcGFsbG9jMF9hcnJheShwZ3BhX2lkZW50aWZpZXIsIHJ0YWJsZV9sZW5n dGgpOworCUluZGV4CSAgICp0b3BfcnRpX21hcDsKKwlpbnQJCQlydGluZm9pbmRleCA9IDA7CisJ U3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKKwlTdWJQbGFuUlRJbmZvICpuZXh0cnRpbmZv ID0gTlVMTDsKKworCS8qCisJICogQWNjb3VudCBmb3IgcmVsYXRpb25zIGFkZGRlZCBieSBpbmhl cml0YW5jZSBleHBhbnNpb24gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMuCisJICovCisJdG9w X3J0aV9tYXAgPSBwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChydGFibGVfbGVuZ3RoLCBwc3RtdC0+ cnRhYmxlLAorCQkJCQkJCQkJCSAgcHN0bXQtPmFwcGVuZFJlbGF0aW9ucyk7CisKKwkvKgorCSAq IFdoZW4gd2UgYmVnaW4gaXRlcmF0aW5nLCB3ZSdyZSBwcm9jZXNzaW5nIHRoZSBwb3J0aW9uIG9m IHRoZSByYW5nZQorCSAqIHRhYmxlIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwg UGxhbm5lckluZm8sIHNvIHN1YnJ0aW5mbyBpcworCSAqIE5VTEwuIExhdGVyLCBzdWJydGluZm8g d2lsbCBiZSB0aGUgU3ViUGxhblJUSW5mbyBmb3IgdGhlIHN1YnF1ZXJ5IHdob3NlCisJICogcG9y dGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUgd2UgYXJlIHByb2Nlc3NpbmcuIG5leHRydGluZm8gaXMg YWx3YXlzIHRoZQorCSAqIFN1YlBsYW5SVEluZm8gdGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50IG9u ZSwgaWYgYW55LCBzbyB3aGVuIHdlJ3JlCisJICogcHJvY2Vzc2luZyB0aGUgdG9wLWxldmVsIHF1 ZXJ5J3MgcG9ydGlvbiBvZiB0aGUgcmFuZ2UgdGFibGUsIHRoZSBuZXh0CisJICogU3ViUGxhblJU SW5mbyBpcyB0aGUgdmVyeSBmaXJzdCBvbmUuCisJICovCisJaWYgKHBzdG10LT5zdWJydGluZm9z ICE9IE5VTEwpCisJCW5leHRydGluZm8gPSBsaW5pdGlhbChwc3RtdC0+c3VicnRpbmZvcyk7CisK KwkvKiBNYWluIGxvb3Agb3ZlciB0aGUgcmFuZ2UgdGFibGUuICovCisJZm9yIChJbmRleCBydGkg PSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgcnRpKyspCisJeworCQljb25zdCBjaGFyICpwbGFu X25hbWU7CisJCUluZGV4CQl0b3BfcnRpOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisJCVJhbmdl VGJsRW50cnkgKnRvcF9ydGU7CisJCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxMOworCQljaGFyCSAg ICpwYXJ0cmVsID0gTlVMTDsKKwkJaW50CQkJb2NjdXJyZW5jZTsKKwkJcGdwYV9pZGVudGlmaWVy ICpyaWQ7CisKKwkJLyoKKwkJICogQWR2YW5jZSB0byB0aGUgbmV4dCBTdWJQbGFuUlRJbmZvLCBp ZiBpdCdzIHRpbWUgdG8gZG8gdGhhdC4KKwkJICoKKwkJICogVGhpcyBsb29wIHByb2JhYmx5IHNo b3VsZG4ndCBldmVyIGl0ZXJhdGUgbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UKKwkJICogdGhhdCB3 b3VsZCBpbXBseSB0aGF0IGEgc3VicXVlcnkgd2FzIHBsYW5uZWQgYnV0IGFkZGVkIG5vdGhpbmcg dG8KKwkJICogdGhlIHJhbmdlIHRhYmxlOyBidXQgbGV0J3MgYmUgZGVmZW5zaXZlIGFuZCBhc3N1 bWUgaXQgY2FuIGhhcHBlbi4KKwkJICovCisJCXdoaWxlIChuZXh0cnRpbmZvICE9IE5VTEwgJiYg cnRpID4gbmV4dHJ0aW5mby0+cnRvZmZzZXQpCisJCXsKKwkJCXJ0aW5mbyA9IG5leHRydGluZm87 CisJCQlpZiAoKytydGluZm9pbmRleCA+PSBsaXN0X2xlbmd0aChwc3RtdC0+c3VicnRpbmZvcykp CisJCQkJbmV4dHJ0aW5mbyA9IE5VTEw7CisJCQllbHNlCisJCQkJbmV4dHJ0aW5mbyA9IGxpc3Rf bnRoKHBzdG10LT5zdWJydGluZm9zLCBydGluZm9pbmRleCk7CisJCX0KKworCQkvKiBGZXRjaCB0 aGUgcmFuZ2UgdGFibGUgZW50cnksIGlmIGFueS4gKi8KKwkJcnRlID0gcnRfZmV0Y2gocnRpLCBw c3RtdC0+cnRhYmxlKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBhbmQgZG9uJ3QgbmVlZCB0byBp ZGVudGlmeSBudWxsIGVudHJpZXMsIGFuZCB3ZSBkb24ndCB3YW50CisJCSAqIHRvIGlkZW50aWZ5 IGpvaW4gZW50cmllcy4KKwkJICovCisJCWlmIChydGUgPT0gTlVMTCB8fCBydGUtPnJ0ZWtpbmQg PT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBh IHJlbGF0aW9uIGFkZGVkIGJ5IHBhcnRpdGlvbmVkIHRhYmxlIGV4cGFuc2lvbiwKKwkJICogdGhl biB0aGUgdG9wIFJUSS9SVEUgYXJlIGp1c3QgdGhlIHNhbWUgYXMgdGhpcyBSVEkvUlRFLiBPdGhl cndpc2UsCisJCSAqIHdlIG5lZWQgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgdG9wIFJUSS9SVEUs IGFuZCBtdXN0IGFsc28gZmV0Y2gKKwkJICogdGhlIHBhcnRpdGlvbiBzY2hlbWEgYW5kIG5hbWUu CisJCSAqLworCQl0b3BfcnRpID0gdG9wX3J0aV9tYXBbcnRpIC0gMV07CisJCWlmIChydGkgPT0g dG9wX3J0aSkKKwkJCXRvcF9ydGUgPSBydGU7CisJCWVsc2UKKwkJeworCQkJdG9wX3J0ZSA9IHJ0 X2ZldGNoKHRvcF9ydGksIHBzdG10LT5ydGFibGUpOworCQkJcGFydG5zcCA9CisJCQkJZ2V0X25h bWVzcGFjZV9uYW1lX29yX3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQkJ cGFydHJlbCA9IGdldF9yZWxfbmFtZShydGUtPnJlbGlkKTsKKwkJfQorCisJCS8qIENvbXB1dGUg dGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBudW1iZXIuICovCisJCW9jY3VycmVuY2UgPSBwZ3BhX29j Y3VycmVuY2VfbnVtYmVyKHBzdG10LT5ydGFibGUsIHRvcF9ydGlfbWFwLAorCQkJCQkJCQkJCQly dGluZm8sIHRvcF9ydGkpOworCisJCS8qIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwbGFu IChOVUxMIGZvciB0b3BsZXZlbCBxdWVyeSkuICovCisJCXBsYW5fbmFtZSA9IHJ0aW5mbyA9PSBO VUxMID8gTlVMTCA6IHJ0aW5mby0+cGxhbl9uYW1lOworCisJCS8qIFNhdmUgYWxsIHRoZSBkZXRh aWxzIHdlJ3ZlIGRlcml2ZWQuICovCisJCXJpZCA9ICZyZXN1bHRbcnRpIC0gMV07CisJCXJpZC0+ YWxpYXNfbmFtZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwkJcmlkLT5vY2N1cnJlbmNl ID0gb2NjdXJyZW5jZTsKKwkJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsKKwkJcmlkLT5wYXJ0cmVs ID0gcGFydHJlbDsKKwkJcmlkLT5wbGFuX25hbWUgPSBwbGFuX25hbWU7CisJfQorCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBwZ3BhX2lkZW50aWZpZXIgaW4gdGhl IGFycmF5IG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkIGZvciB0aGUKKyAqIHJhbmdlIHRhYmxlLiBJ ZiBleGFjdGx5IG9uZSBtYXRjaCBpcyBmb3VuZCwgcmV0dXJuIHRoZSBtYXRjaGluZyBSVEk7IGVs c2UKKyAqIHJldHVybiAwLgorICovCitJbmRleAorcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50 aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXJl c3VsdCA9IDA7CisKKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyAr K3J0aSkKKwl7CisJCXBncGFfaWRlbnRpZmllciAqcnRpX3JpZCA9ICZydF9pZGVudGlmaWVyc1ty dGkgLSAxXTsKKworCQkvKiBJZiB0aGVyZSdzIG5vIGlkZW50aWZpZXIgZm9yIHRoaXMgUlRJLCBz a2lwIGl0LiAqLworCQlpZiAocnRpX3JpZC0+YWxpYXNfbmFtZSA9PSBOVUxMKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogSWYgaXQgbWF0Y2hlcywgcmV0dXJuIHRoaXMgUlRJLiBBcyB1c3Vh bCwgYW4gb21pdHRlZCBwYXJ0aXRpb24KKwkJICogc2NoZW1hIG1hdGNoZXMgYW55dGhpbmcsIGJ1 dCBwYXJ0aXRpb24gYW5kIHBsYW4gbmFtZXMgbXVzdCBlaXRoZXIKKwkJICogbWF0Y2ggZXhhY3Rs eSBvciBiZSBvbWl0dGVkIG9uIGJvdGggc2lkZXMuCisJCSAqLworCQlpZiAoc3RyY21wKHJpZC0+ YWxpYXNfbmFtZSwgcnRpX3JpZC0+YWxpYXNfbmFtZSkgPT0gMCAmJgorCQkJcmlkLT5vY2N1cnJl bmNlID09IHJ0aV9yaWQtPm9jY3VycmVuY2UgJiYKKwkJCShyaWQtPnBhcnRuc3AgPT0gTlVMTCB8 fCBydGlfcmlkLT5wYXJ0bnNwID09IE5VTEwgfHwKKwkJCSBzdHJjbXAocmlkLT5wYXJ0bnNwLCBy dGlfcmlkLT5wYXJ0bnNwKSA9PSAwKSAmJgorCQkJc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwo cmlkLT5wYXJ0cmVsLCBydGlfcmlkLT5wYXJ0cmVsKSAmJgorCQkJc3RyaW5nc19lcXVhbF9vcl9i b3RoX251bGwocmlkLT5wbGFuX25hbWUsIHJ0aV9yaWQtPnBsYW5fbmFtZSkpCisJCXsKKwkJCWlm IChyZXN1bHQgIT0gMCkKKwkJCXsKKwkJCQkvKiBNdWx0aXBsZSBtYXRjaGVzIHdlcmUgZm91bmQu ICovCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXN1bHQgPSBydGk7CisJCX0KKwl9CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQnVpbGQgYSBtYXBwaW5nIGZyb20gZWFjaCBSVEkg dG8gdGhlIFJUSSB3aG9zZSBhbGlhc19uYW1lIHdpbGwgYmUgdXNlZCB0bworICogY29uc3RydWN0 IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyLgorICoKKyAqIEZvciBjaGlsZCByZWxhdGlvbnMs IHRoaXMgaXMgdGhlIHRvcG1vc3QgcGFyZW50IHRoYXQgaXMgc3RpbGwgb2YgdHlwZQorICogUlRF X1JFTEFUSU9OLiBGb3Igb3RoZXIgcmVsYXRpb25zLCBpdCdzIGp1c3QgdGhlIG9yaWdpbmFsIFJU SS4KKyAqCisgKiBTaW5jZSB3ZSdyZSBldmVudHVhbGx5IGdvaW5nIHRvIG5lZWQgdGhpcyBpbmZv cm1hdGlvbiBmb3IgZXZlcnkgUlRJIGluCisgKiB0aGUgcmFuZ2UgdGFibGUsIGl0J3MgYmVzdCB0 byBjb21wdXRlIGFsbCB0aGUgYW5zd2VycyBpbiBhIHNpbmdsZSBwYXNzIG92ZXIKKyAqIHRoZSBB cHBlbmRSZWxJbmZvIGxpc3QuIE90aGVyd2lzZSwgd2UgbWlnaHQgZW5kIHVwIHNlYXJjaGluZyB0 aHJvdWdoIHRoYXQKKyAqIGxpc3QgcmVwZWF0ZWRseSBmb3IgZW50cmllcyBvZiBpbnRlcmVzdC4K KyAqCisgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IGlzIHVzZXMgemVyby1iYXNlZCBp bmRleGluZywgd2hpbGUgUlRJcyB1c2UKKyAqIDEtYmFzZWQgaW5kZXhpbmcsIHNvIHN1YnRyYWN0 IDEgZnJvbSB0aGUgUlRJIGJlZm9yZSBsb29raW5nIGl0IHVwIGluIHRoZQorICogYXJyYXkuCisg Ki8KK3N0YXRpYyBJbmRleCAqCitwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVf bGVuZ3RoLCBMaXN0ICpydGFibGUsIExpc3QgKmFwcGluZm9zKQoreworCUluZGV4CSAgICp0b3Bf cnRpX21hcCA9IHBhbGxvYzBfYXJyYXkoSW5kZXgsIHJ0YWJsZV9sZW5ndGgpOworCisJLyogSW5p dGlhbGx5LCBtYWtlIGV2ZXJ5IFJUSSBwb2ludCB0byBpdHNlbGYuICovCisJZm9yIChJbmRleCBy dGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJCXRvcF9ydGlfbWFwW3J0aSAt IDFdID0gcnRpOworCisJLyogVXBkYXRlIHRoZSBtYXAgZm9yIGVhY2ggQXBwZW5kUmVsSW5mbyBv YmplY3QuICovCisJZm9yZWFjaF9ub2RlKEFwcGVuZFJlbEluZm8sIGFwcGluZm8sIGFwcGluZm9z KQorCXsKKwkJSW5kZXgJCXBhcmVudF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7CisJCVJh bmdlVGJsRW50cnkgKnBhcmVudF9ydGUgPSBydF9mZXRjaChwYXJlbnRfcnRpLCBydGFibGUpOwor CisJCS8qIElmIHRoZSBwYXJlbnQgaXMgbm90IFJURV9SRUxBVElPTiwgaWdub3JlIHRoaXMgZW50 cnkuICovCisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCWNv bnRpbnVlOworCisJCS8qCisJCSAqIE1hcCB0aGUgY2hpbGQgdG8gd2hlcmV2ZXIgd2UgbWFwcGVk IHRoZSBwYXJlbnQuIFBhcmVudHMgYWx3YXlzCisJCSAqIHByZWNlZGUgdGhlaXIgY2hpbGRyZW4g aW4gdGhlIEFwcGVuZFJlbEluZm8gbGlzdCwgc28gdGhpcyBzaG91bGQKKwkJICogd29yayBvdXQu CisJCSAqLworCQl0b3BfcnRpX21hcFthcHBpbmZvLT5jaGlsZF9yZWxpZCAtIDFdID0gdG9wX3J0 aV9tYXBbcGFyZW50X3J0aSAtIDFdOworCX0KKworCXJldHVybiB0b3BfcnRpX21hcDsKK30KKwor LyoKKyAqIEZpbmQgdGhlIG9jY3VyZW5jZSBudW1iZXIgb2YgYSBjZXJ0YWluIHJlbGF0aW9uIHdp dGhpbiBhIGNlcnRhaW4gc3VicXVlcnkuCisgKgorICogVGhlIHNhbWUgYWxpYXMgbmFtZSBjYW4g b2NjdXIgbXVsdGlwbGUgdGltZXMgd2l0aGluIGEgc3VicXVlcnksIGJ1dCB3ZSB3YW50CisgKiB0 byBkaXNhbWJpZ3VhdGUgYnkgZ2l2aW5nIGRpZmZlcmVudCBvY2N1cnJlbmNlcyBkaWZmZXJlbnQg aW50ZWdlciBpbmRleGVzLgorICogSG93ZXZlciwgY2hpbGQgdGFibGVzIGFyZSBkaXNhbWJpZ3Vh dGVkIGJ5IGluY2x1ZGluZyB0aGUgdGFibGUgbmFtZSByYXRoZXIKKyAqIHRoYW4gYnkgaW5jcmVt ZW50aW5nIHRoZSBvY2N1cnJlbmNlIG51bWJlcjsgYW5kIGpvaW5zIGFyZSBub3QgbmFtZWQgYW5k IHNvCisgKiBzaG91bGRuJ3QgaW5jcmVtZW50IHRoZSBvY2N1cmVuY2UgbnVtYmVyIGVpdGhlci4K KyAqLworc3RhdGljIGludAorcGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIElu ZGV4ICp0b3BfcnRpX21hcCwKKwkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBy dGkpCit7CisJSW5kZXgJCXJ0b2Zmc2V0ID0gKHJ0aW5mbyA9PSBOVUxMKSA/IDAgOiBydGluZm8t PnJ0b2Zmc2V0OworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0ZSA9 IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gcnRvZmZz ZXQgKyAxOyBwcmlvcl9ydGkgPCBydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRy eSAqcHJpb3JfcnRlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBw YXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdl IHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1h CisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2Vw YXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqLworCQlpZiAo dG9wX3J0aV9tYXBbcHJpb3JfcnRpIC0gMV0gIT0gcHJpb3JfcnRpKQorCQkJYnJlYWs7CisKKwkJ LyogU2tpcCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcnRfZmV0Y2gocHJpb3JfcnRpLCBydGFi bGUpOworCQlpZiAocHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7 CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3RyY21w KHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0gMCkK KwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8KKwkJ KytvY2N1cnJlbmNlOworCX0KKworCXJldHVybiBvY2N1cnJlbmNlOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmIwMDBkMmI3MDgxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX2lkZW50aWZpZXIuaAorICoJICBjcmVhdGUgYXBwcm9wcmlhdGUg aWRlbnRpZmllcnMgZm9yIHJhbmdlIHRhYmxlIGVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaWZuZGVmIFBHUEFfSURFTlRJRklFUl9ICisjZGVmaW5lIFBHUEFf SURFTlRJRklFUl9ICisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJu b2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9pZGVudGlmaWVyCit7CisJ Y29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwlpbnQJCQlvY2N1cnJlbmNlOworCWNvbnN0IGNoYXIg KnBhcnRuc3A7CisJY29uc3QgY2hhciAqcGFydHJlbDsKKwljb25zdCBjaGFyICpwbGFuX25hbWU7 Cit9IHBncGFfaWRlbnRpZmllcjsKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNvbXBh cmluZyBwb3NzaWJseS1OVUxMIHN0cmluZ3MuICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3N0cmlu Z3NfZXF1YWxfb3JfYm90aF9udWxsKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJ aWYgKGEgPT0gYikKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoYSA9PSBOVUxMIHx8IGIgPT0g TlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChhLCBiKSA9PSAw OworfQorCitleHRlcm4gY29uc3QgY2hhciAqcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25zdCBw Z3BhX2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gdm9pZCBwZ3BhX2NvbXB1dGVfaWRlbnRpZmll cl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkJCQkgICBwZ3Bh X2lkZW50aWZpZXIgKnJpZCk7CitleHRlcm4gaW50CXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19i eV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVs aWRzLAorCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMpOworZXh0ZXJuIHBncGFf aWRlbnRpZmllciAqcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQbGFu bmVkU3RtdCAqcHN0bXQpOworCitleHRlcm4gSW5kZXggcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lk ZW50aWZpZXIoaW50IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVy ICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjI4NjE4NzY0ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpAQCAtMCwwICsxLDYxNSBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV9qb2luLmMKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMgaW4g UGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2pvaW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgi CisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5o IgorI2luY2x1ZGUgIm5vZGVzL3ByaW50LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5o IgorCisvKgorICogVGVtcG9yYXJ5IG9iamVjdCB1c2VkIHdoZW4gdW5yb2xsaW5nIGEgam9pbiB0 cmVlLgorICovCitzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyCit7CisJdW5zaWduZWQJbmFsbG9j YXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlQbGFuCSAgICpvdXRlcl9zdWJwbGFuOworCUVsaWRl ZE5vZGUgKm91dGVyX2VsaWRlZF9ub2RlOworCWJvb2wJCW91dGVyX2JlbmVhdGhfYW55X2dhdGhl cjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCVBsYW4JICAqKmlubmVyX3N1YnBs YW5zOworCUVsaWRlZE5vZGUgKippbm5lcl9lbGlkZWRfbm9kZXM7CisJcGdwYV9qb2luX3Vucm9s bGVyICoqaW5uZXJfdW5yb2xsZXJzOworCWJvb2wJICAgKmlubmVyX2JlbmVhdGhfYW55X2dhdGhl cjsKK307CisKK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kgcGdwYV9kZWNvbXBvc2Vfam9pbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJICBQbGFuICpwbGFu LAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsb3V0ZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqKnJl YWxpbm5lciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLAorCQkJ CQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAgYm9v bCAqZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJCQkJICBib29sICpmb3VuZF9hbnlf aW5uZXJfZ2F0aGVyKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rlc2NlbmRfbm9kZShQbGFu bmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKTsKK3N0YXRpYyBFbGlkZWROb2RlICpwZ3BhX2Rl c2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJ CQkJCSAgIGJvb2wgKmZvdW5kX2FueV9nYXRoZXIpOworc3RhdGljIGJvb2wgcGdwYV9kZXNjZW5k X2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCUVs aWRlZE5vZGUgKiplbGlkZWRfbm9kZSk7CisKK3N0YXRpYyBib29sIGlzX3Jlc3VsdF9ub2RlX3dp dGhfY2hpbGQoUGxhbiAqcGxhbik7CitzdGF0aWMgYm9vbCBpc19zb3J0aW5nX3BsYW4oUGxhbiAq cGxhbik7CisKKy8qCisgKiBDcmVhdGUgYW4gaW5pdGlhbGx5LWVtcHR5IG9iamVjdCBmb3IgdW5y b2xsaW5nIGpvaW5zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGhlbHBlciBvYmpl Y3QgdGhhdCBjYW4gbGF0ZXIgYmUgdXNlZCB0byBjcmVhdGUgYQorICogcGdwYV91bnJvbGxlZF9q b2luLCBhZnRlciBmaXJzdCBjYWxsaW5nIHBncGFfdW5yb2xsX2pvaW4gb25lIG9yIG1vcmUgdGlt ZXMuCisgKi8KK3BncGFfam9pbl91bnJvbGxlciAqCitwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVy KHZvaWQpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyOworCisJam9pbl91 bnJvbGxlciA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl91bnJvbGxlcik7CisJam9pbl91bnJv bGxlci0+bmFsbG9jYXRlZCA9IDQ7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQlwYWxs b2NfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsK Kwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCXBhbGxvY19hcnJheShQbGFuICos IGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRl ZF9ub2RlcyA9CisJCXBhbGxvY19hcnJheShFbGlkZWROb2RlICosIGpvaW5fdW5yb2xsZXItPm5h bGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCXBhbGxvY19h cnJheShwZ3BhX2pvaW5fdW5yb2xsZXIgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJ am9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJcGFsbG9jX2FycmF5 KGJvb2wsIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCisJcmV0dXJuIGpvaW5fdW5yb2xs ZXI7Cit9CisKKy8qCisgKiBVbnJvbGwgb25lIGxldmVsIG9mIGFuIHVucm9sbGFibGUgam9pbiB0 cmVlLgorICoKKyAqIE91ciBiYXNpYyBnb2FsIGhlcmUgaXMgdG8gdW5yb2xsIGpvaW4gdHJlZXMg YXMgdGhleSBvY2N1ciBpbiB0aGUgUGxhbgorICogdHJlZSBpbnRvIGEgc2ltcGxlciBhbmQgbW9y ZSByZWd1bGFyIHN0cnVjdHVyZSB0aGF0IHdlIGNhbiBtb3JlIGVhc2lseQorICogdXNlIGZvciBm dXJ0aGVyIHByb2Nlc3NpbmcuIFVucm9sbGluZyBpcyBvdXRlci1kZWVwLCBzbyBpZiB0aGUgcGxh biB0cmVlCisgKiBoYXMgSm9pbjEoSm9pbjIoQSxCKSxKb2luMyhDLEQpKSwgdGhlIHNhbWUgam9p biB1bnJvbGxlciBvYmplY3Qgc2hvdWxkIGJlCisgKiB1c2VkIGZvciBKb2luMSBhbmQgSm9pbjIs IGJ1dCBhIGRpZmZlcmVudCBvbmUgd2lsbCBiZSBuZWVkZWQgZm9yIEpvaW4zLAorICogc2luY2Ug dGhhdCBpbnZvbHZlcyBhIGpvaW4gd2l0aGluIHRoZSAqaW5uZXIqIHNpZGUgb2YgYW5vdGhlciBq b2luLgorICoKKyAqIHBncGFfcGxhbl93YWxrZXIgY3JlYXRlcyBhICJ0b3AgbGV2ZWwiIGpvaW4g dW5yb2xsZXIgb2JqZWN0IHdoZW4gaXQKKyAqIGVuY291bnRlcnMgYSBqb2luIGluIGEgcG9ydGlv biBvZiB0aGUgcGxhbiB0cmVlIGluIHdoaWNoIG5vIGpvaW4gdW5yb2xsZXIKKyAqIGlzIGFscmVh ZHkgYWN0aXZlLiBGcm9tIHRoZXJlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBk ZXRlcm1pbmcKKyAqIHRvIHdoYXQgcG9ydGlvbiBvZiB0aGUgcGxhbiB0cmVlIHRoYXQgam9pbiB1 bnJvbGxlciBhcHBsaWVzLCBhbmQgZm9yCisgKiBjcmVhdGluZyBhbnkgc3Vib3JkaW5hdGUgam9p biB1bnJvbGxlciBvYmplY3RzIHRoYXQgYXJlIG5lZWRlZCBhcyBhIHJlc3VsdAorICogb2Ygbm9u LW91dGVyLWRlZXAgam9pbiB0cmVlcy4gV2UgZG8gdGhpcyBieSByZXR1cm5pbmcgdGhlIGpvaW4g dW5yb2xsZXIKKyAqIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZnVydGhlciB0cmF2 ZXJzYWwgb2YgdGhlIG91dGVyIGFuZCBpbm5lcgorICogc3VidHJlZXMgb2YgdGhlIGN1cnJlbnQg cGxhbiBub2RlIHZpYSAqb3V0ZXJfam9pbl91bnJvbGxlciBhbmQKKyAqICppbm5lcl9qb2luX3Vu cm9sbGVyLCByZXNwZWN0aXZlbHkuCisgKi8KK3ZvaWQKK3BncGFfdW5yb2xsX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJIGJvb2wgYmVuZWF0 aF9hbnlfZ2F0aGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJ CQkJIHBncGFfam9pbl91bnJvbGxlciAqKm91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJIHBncGFf am9pbl91bnJvbGxlciAqKmlubmVyX2pvaW5fdW5yb2xsZXIpCit7CisJcGdwYV9qb2luX3N0cmF0 ZWd5IHN0cmF0ZWd5OworCVBsYW4JICAgKnJlYWxpbm5lciwKKwkJCSAgICpyZWFsb3V0ZXI7CisJ RWxpZGVkTm9kZSAqZWxpZGVkaW5uZXIsCisJCQkgICAqZWxpZGVkb3V0ZXI7CisJaW50CQkJbjsK Kwlib29sCQlmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJYm9vbAkJZm91bmRfYW55 X2lubmVyX2dhdGhlciA9IGZhbHNlOworCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXIgIT0gTlVMTCk7 CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcGFzcyB0aGUgam9pbl91bnJvbGxlciBvYmplY3QgZG93 biB0aHJvdWdoIGNlcnRhaW4gdHlwZXMgb2YKKwkgKiBwbGFuIG5vZGVzIC0tIGFueXRoaW5nIHRo YXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3ksIGFuZAorCSAqIGFueSBv dGhlciBub2RlcyB0aGF0IGNhbiBvY2N1ciBpbiBhIGpvaW4gdHJlZSBkZXNwaXRlIG5vdCBiZWlu ZyBzY2FucworCSAqIG9yIGpvaW5zLgorCSAqCisJICogVGhpcyBpbmNsdWRlczoKKwkgKgorCSAq ICgxKSBNYXRlcmlhbGl6ZSwgTWVtb2l6ZSwgYW5kIEhhc2ggbm9kZXMsIHdoaWNoIGFyZSBwYXJ0 IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksCisJICoKKwkgKiAoMikgR2F0aGVyIGFuZCBHYXRo ZXIgTWVyZ2Ugbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciBhdCBhbnkgcG9pbnQgaW4gdGhlCisJICog am9pbiB0cmVlIHdoZXJlIHRoZSBwbGFubmVyIGRlY2lkZWQgdG8gaW5pdGlhdGUgcGFyYWxsZWxp c20sCisJICoKKwkgKiAoMykgU29ydCBhbmQgSW5jcmVtZW50YWxTb3J0IG5vZGVzLCB3aGljaCBj YW4gb2NjdXIgYmVuZWF0aCBNZXJnZUpvaW4KKwkgKiBvciBHYXRoZXJNZXJnZSwKKwkgKgorCSAq ICg0KSBBZ2cgYW5kIFVuaXF1ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIHdoZW4gd2UgZGVjaWRl IHRvIG1ha2UgdGhlCisJICogbnVsbGFibGUgc2lkZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSBhbmQg dGhlbiBqb2luIHRoZSByZXN1bHQsIGFuZAorCSAqCisJICogKDUpIFJlc3VsdCBub2RlcyB3aXRo IGNoaWxkcmVuLCB3aGljaCBjYW4gYmUgYWRkZWQgZWl0aGVyIHRvIHByb2plY3QgdG8KKwkgKiBl bmZvcmNlIGEgb25lLXRpbWUgZmlsdGVyIChidXQgUmVzdWx0IG5vZGVzIHdpdGhvdXQgY2hpbGRy ZW4gYXJlCisJICogZGVnZW5lcmF0ZSBzY2FucyBvciBqb2lucykuCisJICovCisJaWYgKElzQShw bGFuLCBNYXRlcmlhbCkgfHwgSXNBKHBsYW4sIE1lbW9pemUpIHx8IElzQShwbGFuLCBIYXNoKQor CQl8fCBJc0EocGxhbiwgR2F0aGVyKSB8fCBJc0EocGxhbiwgR2F0aGVyTWVyZ2UpCisJCXx8IGlz X3NvcnRpbmdfcGxhbihwbGFuKSB8fCBJc0EocGxhbiwgQWdnKSB8fCBJc0EocGxhbiwgVW5pcXVl KQorCQl8fCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKHBsYW4pKQorCXsKKwkJKm91dGVyX2pv aW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBT aW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgbm9kZXMgdGhhdCByZXF1aXJlIHBhc3MtdGhyb3Vn aCB0cmVhdG1lbnQsCisJICogdGhpcyBzaG91bGQgYmUgYW4gdW5yb2xsYWJsZSBqb2luLgorCSAq LworCXN0cmF0ZWd5ID0gcGdwYV9kZWNvbXBvc2Vfam9pbih3YWxrZXIsIHBsYW4sCisJCQkJCQkJ CSAgICZyZWFsb3V0ZXIsICZyZWFsaW5uZXIsCisJCQkJCQkJCSAgICZlbGlkZWRvdXRlciwgJmVs aWRlZGlubmVyLAorCQkJCQkJCQkgICAmZm91bmRfYW55X291dGVyX2dhdGhlciwKKwkJCQkJCQkJ ICAgJmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCisJLyogSWYgb3VyIHdvcmtzcGFjZSBpcyBm dWxsLCBleHBhbmQgaXQuICovCisJaWYgKGpvaW5fdW5yb2xsZXItPm51c2VkID49IGpvaW5fdW5y b2xsZXItPm5hbGxvY2F0ZWQpCisJeworCQlqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkICo9IDI7 CisJCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5y b2xsZXItPnN0cmF0ZWd5LAorCQkJCQkJICAgcGdwYV9qb2luX3N0cmF0ZWd5LAorCQkJCQkJICAg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBs YW5zID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zLAor CQkJCQkJICAgUGxhbiAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJ CWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcyA9CisJCQlyZXBhbGxvY19hcnJheShq b2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMsCisJCQkJCQkgICBFbGlkZWROb2RlICos CisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+ aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xs ZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCSAgIGJvb2wsCisJCQkJCQkgICBq b2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xs ZXJzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycywK KwkJCQkJCSAgIHBncGFfam9pbl91bnJvbGxlciAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSBmbGF0dGVuaW5nIG91dGVy LWRlZXAgam9pbiB0cmVlcywgaXQgZm9sbG93cyB0aGF0IGlmIHRoZQorCSAqIG91dGVyIHNpZGUg aXMgc3RpbGwgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0 aGlzCisJICogc2FtZSBvYmplY3QuIE90aGVyd2lzZSwgd2UndmUgcmVhY2hlZCB0aGUgbGltaXQg b2Ygd2hhdCB3ZSBjYW4gdW5yb2xsCisJICogaW50byB0aGlzIG9iamVjdCBhbmQgbXVzdCByZW1l bWJlciB0aGUgb3V0ZXIgc2lkZSBhcyB0aGUgZmluYWwgb3V0ZXIKKwkgKiBzdWJwbGFuLgorCSAq LworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsb3V0ZXIpKQor CQkqb3V0ZXJfam9pbl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJZWxzZQorCXsKKwkJam9p bl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbiA9IHJlYWxvdXRlcjsKKwkJam9pbl91bnJvbGxlci0+ b3V0ZXJfZWxpZGVkX25vZGUgPSBlbGlkZWRvdXRlcjsKKwkJam9pbl91bnJvbGxlci0+b3V0ZXJf YmVuZWF0aF9hbnlfZ2F0aGVyID0KKwkJCWJlbmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlf b3V0ZXJfZ2F0aGVyOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGlubmVyIHN1YnBsYW4uIElm IGl0J3MgYW4gdW5yb2xsYWJsZSBqb2luLCBpdCBuZWVkcyB0byBiZQorCSAqIGZsYXR0ZW5lZCBp biB0dXJuLCBidXQgaW50byBhIG5ldyB1bnJvbGxlciBvYmplY3QsIG5vdCB0aGlzIG9uZS4KKwkg Ki8KKwluID0gam9pbl91bnJvbGxlci0+bnVzZWQrKzsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVn eVtuXSA9IHN0cmF0ZWd5OworCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW25dID0gcmVh bGlubmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlc1tuXSA9IGVsaWRlZGlu bmVyOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltuXSA9CisJCWJl bmVhdGhfYW55X2dhdGhlciB8fCBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyOworCWlmIChlbGlkZWRp bm5lciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihyZWFsaW5uZXIpKQorCQkqaW5uZXJfam9pbl91 bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwllbHNlCisJCSppbm5lcl9q b2luX3Vucm9sbGVyID0gTlVMTDsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNbbl0g PSAqaW5uZXJfam9pbl91bnJvbGxlcjsKK30KKworLyoKKyAqIFVzZSB0aGUgZGF0YSB3ZSd2ZSBh Y2N1bXVsYXRlZCBpbiBhIHBncGFfam9pbl91bnJvbGxlciBvYmplY3QgdG8gY29uc3RydWN0Cisg KiBhIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqLworcGdwYV91bnJvbGxlZF9qb2luICoKK3BncGFf YnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGdwYV91bnJvbGxl ZF9qb2luICp1am9pbjsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgaGF2ZSBn b25lIGV2ZW4gc28gZmFyIGFzIHRvIGNyZWF0ZSBhIGpvaW4gdW5yb2xsZXIgdW5sZXNzCisJICog d2UgZm91bmQgYXQgbGVhc3Qgb25lIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlBc3NlcnQoam9p bl91bnJvbGxlci0+bnVzZWQgPiAwKTsKKworCS8qIEFsbG9jYXRlIHJlc3VsdCBzdHJ1Y3R1cmVz LiAqLworCXVqb2luID0gcGFsbG9jMF9vYmplY3QocGdwYV91bnJvbGxlZF9qb2luKTsKKwl1am9p bi0+bmlubmVyID0gam9pbl91bnJvbGxlci0+bnVzZWQ7CisJdWpvaW4tPnN0cmF0ZWd5ID0gcGFs bG9jMF9hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm51c2VkKTsKKwl1 am9pbi0+aW5uZXIgPSBwYWxsb2MwX2FycmF5KHBncGFfam9pbl9tZW1iZXIsIGpvaW5fdW5yb2xs ZXItPm51c2VkKTsKKworCS8qIEhhbmRsZSB0aGUgb3V0ZXJtb3N0IGpvaW4uICovCisJdWpvaW4t Pm91dGVyLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFuOworCXVqb2luLT5vdXRl ci5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlOworCXVqb2lu LT5vdXRlci5zY2FuID0KKwkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgdWpvaW4tPm91dGVyLnBs YW4sCisJCQkJCQl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUsCisJCQkJCQlqb2luX3Vucm9sbGVy LT5vdXRlcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQl0cnVlKTsKKworCS8qCisJICogV2Ug d2FudCB0aGUgam9pbnMgZnJvbSB0aGUgZGVlcGVzdCBwYXJ0IG9mIHRoZSBwbGFuIHRyZWUgdG8g YXBwZWFyCisJICogZmlyc3QgaW4gdGhlIHJlc3VsdCBvYmplY3QsIGJ1dCB0aGUgam9pbiB1bnJv bGxlciBhZGRzIHRoZW0gaW4gZXhhY3RseQorCSAqIHRoZSByZXZlcnNlIG9mIHRoYXQgb3JkZXIs IHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgb3JkZXIgb2YgdGhlIGFycmF5cworCSAqIHdoZW4gY29u c3RydWN0aW5nIHRoZSBmaW5hbCByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGpvaW5f dW5yb2xsZXItPm51c2VkOyArK2kpCisJeworCQlpbnQJCQlrID0gam9pbl91bnJvbGxlci0+bnVz ZWQgLSBpIC0gMTsKKworCQkvKiBDb3B5IHN0cmF0ZWd5LCBQbGFuLCBhbmQgRWxpZGVkTm9kZS4g Ki8KKwkJdWpvaW4tPnN0cmF0ZWd5W2ldID0gam9pbl91bnJvbGxlci0+c3RyYXRlZ3lba107CisJ CXVqb2luLT5pbm5lcltpXS5wbGFuID0gam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNba107 CisJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSA9IGpvaW5fdW5yb2xsZXItPmlubmVyX2Vs aWRlZF9ub2Rlc1trXTsKKworCQkvKgorCQkgKiBGaWxsIGluIHJlbWFpbmluZyBkZXRhaWxzLCB1 c2luZyBlaXRoZXIgdGhlIG5lc3RlZCBqb2luIHVucm9sbGVyLAorCQkgKiBvciBieSBkZXJpdmlu ZyB0aGVtIGZyb20gdGhlIHBsYW4gYW5kIGVsaWRlZCBub2Rlcy4KKwkJICovCisJCWlmIChqb2lu X3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10gIT0gTlVMTCkKKwkJCXVqb2luLT5pbm5lcltp XS51bnJvbGxlZF9qb2luID0KKwkJCQlwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLAor CQkJCQkJCQkJCSBqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnNba10pOworCQllbHNlCisJ CQl1am9pbi0+aW5uZXJbaV0uc2NhbiA9CisJCQkJcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgdWpv aW4tPmlubmVyW2ldLnBsYW4sCisJCQkJCQkJCXVqb2luLT5pbm5lcltpXS5lbGlkZWRfbm9kZSwK KwkJCQkJCQkJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW2ldLAorCQkJ CQkJCQl0cnVlKTsKKwl9CisKKwlyZXR1cm4gdWpvaW47Cit9CisKKy8qCisgKiBGcmVlIG1lbW9y eSBhbGxvY2F0ZWQgZm9yIHBncGFfam9pbl91bnJvbGxlci4KKyAqLwordm9pZAorcGdwYV9kZXN0 cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKQorewor CXBmcmVlKGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5KTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5p bm5lcl9zdWJwbGFucyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVz KTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMpOworCXBmcmVlKGpvaW5f dW5yb2xsZXIpOworfQorCisvKgorICogSWRlbnRpZnkgdGhlIGpvaW4gc3RyYXRlZ3kgdXNlZCBi eSBhIGpvaW4gYW5kIHRoZSAicmVhbCIgaW5uZXIgYW5kIG91dGVyCisgKiBwbGFucy4KKyAqCisg KiBGb3IgZXhhbXBsZSwgYSBIYXNoIEpvaW4gYWx3YXlzIGhhcyBhIEhhc2ggbm9kZSBvbiB0aGUg aW5uZXIgc2lkZSwgYnV0CisgKiBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzIHRoZSByZWFs IGlubmVyIGlucHV0IGlzIHRoZSBIYXNoIG5vZGUncyBjaGlsZCwKKyAqIG5vdCB0aGUgSGFzaCBu b2RlIGl0c2VsZi4KKyAqCisgKiBMaWtld2lzZSwgYSBNZXJnZSBKb2luIG1heSBoYXZlIFNvcnQg bm90ZSBvbiB0aGUgaW5uZXIgb3Igb3V0ZXIgc2lkZTsgaWYKKyAqIGl0IGRvZXMsIHRoZSByZWFs IGlucHV0IHRvIHRoZSBqb2luIGlzIHRoZSBTb3J0IG5vZGUncyBjaGlsZCwgbm90IHRoZQorICog U29ydCBub2RlIGl0c2VsZi4KKyAqCisgKiBJbiBhZGRpdGlvbiwgd2l0aCBhIE1lcmdlIEpvaW4g b3IgYSBOZXN0ZWQgTG9vcCwgdGhlIGpvaW4gcGxhbm5pbmcgY29kZQorICogbWF5IGFkZCBhZGRp dGlvbmFsIG5vZGVzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgb3IgTWVtb2l6ZS4gV2UgcmVnYXJkIHRo ZXNlCisgKiBhcyBhbiBhc3BlY3Qgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuIEFzIGluIHRoZSBwcmV2 aW91cyBjYXNlcywgdGhlIHRydWUgaW5wdXQKKyAqIHRvIHRoZSBqb2luIGlzIHRoZSB1bmRlcmx5 aW5nIG5vZGUuCisgKgorICogSG93ZXZlciwgaWYgYW55IGludm9sdmVkIGNoaWxkIG5vZGUgcHJl dmlvdXNseSBoYWQgYSBub3ctZWxpZGVkIG5vZGUgc3RhY2tlZAorICogb24gdG9wLCB0aGVuIHdl IGNhbid0ICJsb29rIHRocm91Z2giIHRoYXQgbm9kZSAtLSBpbmRlZWQsIHdoYXQncyBnb2luZyB0 byBiZQorICogcmVsZXZhbnQgZm9yIG91ciBwdXJwb3NlcyBpcyB0aGUgRWxpZGVkTm9kZSBvbiB0 b3Agb2YgdGhhdCBwbGFuIG5vZGUsIHJhdGhlcgorICogdGhhbiB0aGUgcGxhbiBub2RlIGl0c2Vs Zi4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxpZGVkIG5vZGVzLCB3ZSB3YW50IHRo YXQgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuCisgKiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4gdHJl ZSBwcmlvciB0byBzZXRyZWZzIHByb2Nlc3Npbmc7IHdlIGV4cGVjdCB0byBmaW5kCisgKiB0aGF0 IG9uZSBsYXN0IGluIHRoZSBsaXN0IG9mIGVsaWRlZCBub2Rlcy4KKyAqCisgKiBPbiByZXR1cm4g KnJlYWxvdXRlciBhbmQgKnJlYWxpbm5lciB3aWxsIGhhdmUgYmVlbiBzZXQgdG8gdGhlIHJlYWwg aW5uZXIKKyAqIGFuZCByZWFsIG91dGVyIHBsYW5zIHRoYXQgd2UgaWRlbnRpZmllZCwgYW5kICpl bGlkZWRyZWFsb3V0ZXIgYW5kCisgKiAqZWxpZGVkcmVhbGlubmVyIHRvIHRoZSBsYXN0IG9mIGFu eSBjb3JyZXNwb2RpbmcgZWxpZGVkIG5vZGVzLgorICogQWRkaXRpb25hbGx5LCAqZm91bmRfYW55 X291dGVyX2dhdGhlciBhbmQgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgd2lsbAorICogYmUgc2V0 IHRvIHRydWUgaWYgd2UgbG9va2VkIHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5v ZGUgb24KKyAqIHRoYXQgc2lkZSBvZiB0aGUgam9pbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneQorcGdwYV9kZWNvbXBvc2Vfam9pbihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJUGxhbiAqKnJlYWxv dXRlciwgUGxhbiAqKnJlYWxpbm5lciwKKwkJCQkJRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRl ciwgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJYm9vbCAqZm91bmRfYW55X291 dGVyX2dhdGhlciwgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcikKK3sKKwlQbGFubmVkU3Rt dCAqcHN0bXQgPSB3YWxrZXItPnBzdG10OworCUpvaW5UeXBlCWpvaW50eXBlID0gKChKb2luICop IHBsYW4pLT5qb2ludHlwZTsKKwlQbGFuCSAgICpvdXRlcnBsYW4gPSBwbGFuLT5sZWZ0dHJlZTsK KwlQbGFuCSAgICppbm5lcnBsYW4gPSBwbGFuLT5yaWdodHRyZWU7CisJRWxpZGVkTm9kZSAqZWxp ZGVkb3V0ZXI7CisJRWxpZGVkTm9kZSAqZWxpZGVkaW5uZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5 IHN0cmF0ZWd5OworCWJvb2wJCXVuaXF1ZW91dGVyOworCWJvb2wJCXVuaXF1ZWlubmVyOworCisJ ZWxpZGVkb3V0ZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIG91dGVycGxhbik7CisJ ZWxpZGVkaW5uZXIgPSBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsIGlubmVycGxhbik7CisJ KmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwkqZm91bmRfYW55X2lubmVyX2dhdGhl ciA9IGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX01lcmdl Sm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFj ZSBhIE1hdGVyaWFsIG5vZGUgb24gdGhlCisJCQkgKiBpbm5lciBzaWRlIG9mIHRoZSBNZXJnZUpv aW47IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UgcmVjb3JkIGl0CisJCQkgKiBhcyBwYXJ0IG9mIHRo ZSBqb2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJ c0EoaW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVS R0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJhdGVneSA9IEpTVFJB VF9NRVJHRV9KT0lOX1BMQUlOOworCisJCQkvKgorCQkJICogRm9yIGEgTWVyZ2VKb2luLCBlaXRo ZXIgdGhlIG91dGVyIG9yIHRoZSBpbm5lciBzdWJwbGFuLCBvcgorCQkJICogYm90aCwgbWF5IGhh dmUgbmVlZGVkIHRvIGJlIHNvcnRlZDsgd2UgbXVzdCBkaXNyZWdhcmQgYW55IFNvcnQKKwkJCSAq IG9yIEluY3JlbWVudGFsU29ydCBub2RlIHRvIGZpbmQgdGhlIHJlYWwgaW5uZXIgb3Igb3V0ZXIK KwkJCSAqIHN1YnBsYW4uCisJCQkgKi8KKwkJCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYmIGlz X3NvcnRpbmdfcGxhbihvdXRlcnBsYW4pKQorCQkJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5k X25vZGUocHN0bXQsICZvdXRlcnBsYW4pOworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYg aXNfc29ydGluZ19wbGFuKGlubmVycGxhbikpCisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2Nl bmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlicmVhazsKKworCQljYXNlIFRfTmVzdExv b3A6CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2Ug YSBNYXRlcmlhbCBvciBNZW1vaXplIG5vZGUKKwkJCSAqIG9uIHRoZSBpbm5lciBzaWRlIG9mIHRo ZSBOZXN0TG9vcDsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZQorCQkJICogcmVjb3JkIGl0IGFzIHBh cnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBO VUxMICYmIElzQShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpT VFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRTsKKwkJCX0KKwkJCWVsc2UgaWYgKGVsaWRlZGlu bmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWVtb2l6ZSkpCisJCQl7CisJCQkJZWxpZGVk aW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRl Z3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzdHJh dGVneSA9IEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9I YXNoSm9pbjoKKworCQkJLyoKKwkJCSAqIFRoZSBpbm5lciBzdWJwbGFuIG9mIGEgSGFzaEpvaW4g aXMgYWx3YXlzIGEgSGFzaCBub2RlOyB0aGUgcmVhbAorCQkJICogaW5uZXIgc3VicGxhbiBpcyB0 aGUgSGFzaCBub2RlJ3MgY2hpbGQuCisJCQkgKi8KKwkJCUFzc2VydChJc0EoaW5uZXJwbGFuLCBI YXNoKSk7CisJCQlBc3NlcnQoZWxpZGVkaW5uZXIgPT0gTlVMTCk7CisJCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCXN0cmF0ZWd5ID0gSlNU UkFUX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwl9CisK KwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGEgc2Vt aWpvaW4gYnkgZmlyc3QgbWFraW5nCisJICogdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlIHBsYW4g dW5pcXVlLCBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4KKwkgKiBhZ2FpbnN0IHRo ZSByZXN1bHQuIFRoZXJlZm9yZSwgd2UgbWlnaHQgbmVlZCB0byBkZXNjZW5kIHRocm91Z2ggYQor CSAqIHVuaXF1ZSBub2RlIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBwbGFuLgorCSAqLworCXVuaXF1 ZW91dGVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlk ZWRvdXRlcik7CisJdW5pcXVlaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwg JmlubmVycGxhbiwgJmVsaWRlZGlubmVyKTsKKworCS8qCisJICogVGhlIHBsYW5uZXIgbWF5IGhh dmUgZGVjaWRlZCB0byBwYXJhbGxlbGl6ZSBwYXJ0IG9mIHRoZSBqb2luIHRyZWUsIHNvCisJICog d2UgY291bGQgZmluZCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBoZXJlLiBOb3RlIHRo YXQsIGlmCisJICogcHJlc2VudCwgdGhpcyB3aWxsIGFwcGVhciBiZWxvdyBub2RlcyB3ZSBjb25z aWRlcmVkIGFzIHBhcnQgb2YgdGhlIGpvaW4KKwkgKiBzdHJhdGVneSwgYnV0IHdlIGNvdWxkIGZp bmQgYW5vdGhlciB1bmlxdWVuZXNzLWVuZm9yY2luZyBub2RlIGJlbG93IHRoZQorCSAqIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UsIGlmIHByZXNlbnQuCisJICovCisJaWYgKGVsaWRlZG91dGVyID09 IE5VTEwpCisJeworCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKHBzdG10 LCAmb3V0ZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9vdXRlcl9nYXRoZXIpOworCQlp ZiAoZm91bmRfYW55X291dGVyX2dhdGhlciAmJgorCQkJcGdwYV9kZXNjZW5kX2FueV91bmlxdWUo cHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRvdXRlcikpCisJCQl1bmlxdWVvdXRlciA9IHRydWU7 CisJfQorCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkaW5uZXIgPSBwZ3Bh X2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJmlubmVycGxhbiwKKwkJCQkJCQkJCQkJICBmb3Vu ZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9pbm5lcl9nYXRoZXIgJiYKKwkJ CXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJwbGFuLCAmZWxpZGVkaW5uZXIp KQorCQkJdW5pcXVlaW5uZXIgPSB0cnVlOworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSB0 aGF0IFJlc3VsdCBub2RlIGhhcyBiZWVuIGluc2VydGVkIGVpdGhlciB0byBwcm9qZWN0IGEKKwkg KiB0YXJnZXQgbGlzdCBvciB0byBpbXBsZW1lbnQgYSBvbmUtdGltZSBmaWx0ZXIuIElmIHNvLCB3 ZSBjYW4gZGVzY2VuZAorCSAqIHRocm91Z2h0IGl0LiBOb3RlIHRoYXQgYSByZXN1bHQgbm9kZSB3 aXRob3V0IGEgY2hpbGQgd291bGQgYmUgYQorCSAqIGRlZ2VuZXJhdGUgc2NhbiBvciBqb2luLCBh bmQgbm90IHNvbWV0aGluZyB3ZSBjb3VsZCBkZXNjZW5kIHRocm91Z2guCisJICoKKwkgKiBYWFgu IEkgc3VzcGVjdCBpdCdzIHBvc3NpYmxlIGZvciB0aGlzIHRvIGhhcHBlbiBhYm92ZSB0aGUgR2F0 aGVyIG9yCisJICogR2F0aGVyIE1lcmdlIG5vZGUsIHRvbywgYnV0IGFwcGFyZW50bHkgd2UgaGF2 ZSBubyB0ZXN0IGNhc2UgZm9yIHRoYXQKKwkgKiBzY2VuYXJpby4KKwkgKi8KKwlpZiAoZWxpZGVk b3V0ZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKG91dGVycGxhbikpCisJ CWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZvdXRlcnBsYW4pOworCWlm IChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoaW5uZXJw bGFuKSkKKwkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxh bik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBzZW1pam9pbiB0aGF0IHdhcyBjb252ZXJ0ZWQg dG8gYW4gaW5uZXIgam9pbiBieSBtYWtpbmcgb25lCisJICogc2lkZSBvciB0aGUgb3RoZXIgdW5p cXVlLCBtYWtlIGEgbm90ZSB0aGF0IHRoZSBpbm5lciBvciBvdXRlciBzdWJwbGFuLAorCSAqIGFz IGFwcHJvcHJpYXRlLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IHBsYW4gZmVhdHVyZSB3 aGVuIHRoZSBtYWluCisJICogdHJlZSB0cmF2ZXJzYWwgcmVhY2hlcyBpdC4KKwkgKgorCSAqIENv bnZlcnNlbHksIGlmIHRoZSBwbGFubmVyIGNvdWxkIGhhdmUgbWFkZSBvbmUgc2lkZSBvZiB0aGUg am9pbiB1bmlxdWUKKwkgKiBhbmQgdGhlcmVieSBjb252ZXJ0ZWQgaXQgdG8gYW4gaW5uZXIgam9p biwgYW5kIGNob3NlIG5vdCB0byBkbyBzbywgdGhhdAorCSAqIGlzIGFsc28gd29ydGggbm90aW5n LgorCSAqCisJICogWFhYOiBXZSBhZG1pdCB0b28gbXVjaCBub24tdW5pcXVlIGFkdmljZSwgYXMg aW4gdGhlIGZvbGxvd2luZyBleGFtcGxlCisJICogZnJvbSB0aGUgcmVncmVzc2lvbiB0ZXN0czog RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikgREVMRVRFIEZST00KKwkgKiBwcnQxX2wg V0hFUkUgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIGludDRfdGJsLCBMQVRFUkFMIChTRUxFQ1QKKwkg KiBpbnQ0X3RibC5mMSBGUk9NIGludDhfdGJsIExJTUlUIDIpIHNzIFdIRVJFIHBydDFfbC5jIElT IE5VTEwpLiBXZSBlbWl0CisJICogU0VNSUpPSU5fTk9OX1VOSVFVRSgoaW50NF90Ymwgc3MpKSBi dXQgY3JlYXRlX3VuaXF1ZV9wYXRoKCkgZmFpbHMgaW4KKwkgKiB0aGlzIGNhc2UsIHNvIHRoZXJl J3Mgbm8gc2otdW5pcXVlIHZlcnNpb24gcG9zc2libGUuCisJICoKKwkgKiBOQjogVGhpcyBjb2Rl IGNvdWxkIGFwcGVhciBzbGlnaHRseSBoaWdoZXIgdXAgaW4gaW4gdGhpcyBmdW5jdGlvbiwgYnV0 CisJICogbm9uZSBvZiB0aGUgbm9kZXMgdGhyb3VnaCB3aGljaCB3ZSBqdXN0IGRlc2NlbmRlZCBz aG91bGQgYmUgaGF2ZQorCSAqIGFzc29jaWF0ZWQgUlRJcy4KKwkgKgorCSAqIE5COiBUaGlzIHNl ZW1zIGxpa2UgYSBzb21ld2hhdCBoYWNreSB3YXkgb2YgcGFzc2luZyBpbmZvcm1hdGlvbiB1cCB0 bworCSAqIHRoZSBtYWluIHRyZWUgd2FsaywgYnV0IEkgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBi ZXR0ZXIgaWRlYS4KKwkgKi8KKwlpZiAodW5pcXVlb3V0ZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9m ZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwllbHNl IGlmIChqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0 dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsIG91dGVycGxhbik7CisJaWYg KHVuaXF1ZWlubmVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9T RU1JSk9JTl9VTklRVUUsIGlubmVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9T RU1JKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9O T05fVU5JUVVFLCBpbm5lcnBsYW4pOworCisJLyogU2V0IG91dHB1dCBwYXJhbWV0ZXJzLiAqLwor CSpyZWFsb3V0ZXIgPSBvdXRlcnBsYW47CisJKnJlYWxpbm5lciA9IGlubmVycGxhbjsKKwkqZWxp ZGVkcmVhbG91dGVyID0gZWxpZGVkb3V0ZXI7CisJKmVsaWRlZHJlYWxpbm5lciA9IGVsaWRlZGlu bmVyOworCXJldHVybiBzdHJhdGVneTsKK30KKworLyoKKyAqIERlc2NlbmQgdGhyb3VnaCBhIFBs YW4gbm9kZSBpbiBhIGpvaW4gdHJlZSB0aGF0IHRoZSBjYWxsZXIgaGFzIGRldGVybWluZWQKKyAq IHRvIGJlIGlycmVsZXZhbnQuCisgKgorICogVXBkYXRlcyAqcGxhbiwgYW5kIHJldHVybnMgdGhl IGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5nIHRvIHRoZQorICogbmV3IHBsYW4g bm9kZS4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5l ZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbikKK3sKKwkqcGxhbiA9ICgqcGxhbiktPmxlZnR0cmVl OworCXJldHVybiBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsICpwbGFuKTsKK30KKworLyoK KyAqIERlc2NlbmQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwgaWYgcHJl c2VudCwgYW5kIGFueSBTb3J0CisgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9kZSBvY2N1cnJpbmcg dW5kZXIgYSBHYXRoZXIgTWVyZ2UuCisgKgorICogQ2FsbGVyIHNob3VsZCBoYXZlIHZlcmlmaWVk IHRoYXQgdGhlcmUgaXMgbm8gRWxpZGVkTm9kZSBwZXJ0YWluaW5nIHRvCisgKiB0aGUgaW5pdGlh bCB2YWx1ZSBvZiAqcGxhbi4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUg bGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBu b2RlLiBTZXRzICpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZSBpZiBlaXRoZXIgR2F0aGVyIG9yCisg KiBHYXRoZXIgTWVyZ2Ugd2FzIGZvdW5kLCBhbmQgb3RoZXJ3aXNlIGxlYXZlcyBpdCB1bmNoYW5n ZWQuCisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoKK3BncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKFBs YW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQlib29sICpmb3VuZF9hbnlfZ2F0 aGVyKQoreworCWlmIChJc0EoKnBsYW4sIEdhdGhlcikpCisJeworCQkqZm91bmRfYW55X2dhdGhl ciA9IHRydWU7CisJCXJldHVybiBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisJfQor CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsKKwkJRWxpZGVkTm9kZSAqZWxpZGVk ID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCWlmIChlbGlkZWQgPT0gTlVM TCAmJiBpc19zb3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJZWxpZGVkID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsIHBsYW4pOworCisJCSpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwkJcmV0dXJu IGVsaWRlZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIElmICpwbGFuIGlzIGFu IEFnZyBvciBVbmlxdWUgbm9kZSwgd2Ugd2FudCB0byBkZXNjZW5kIHRocm91Z2ggaXQsIHVubGVz cworICogaXQgaGFzIGEgY29ycmVzcG9uZGluZyBlbGlkZWQgbm9kZS4gSWYgaXRzIGltbWVkaWF0 ZSBjaGlsZCBpcyBhIFNvcnQgb3IKKyAqIEluY3JlbWVudGFsU29ydCwgd2UgYWxzbyB3YW50IHRv IGRlc2NlbmQgdGhyb3VnaCB0aGF0LCB1bmxlc3MgaXQgaGFzIGEKKyAqIGNvcnJlc3BvbmRpbmcg ZWxpZGVkIG5vZGUuCisgKgorICogT24gZW50cnksICplbGlkZWRfbm9kZSBtdXN0IGJlIHRoZSBs YXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgY29ycmVzcG9uZGluZworICogdG8gKnBsYW47IG9uIGV4 aXQsIHRoaXMgd2lsbCBzdGlsbCBiZSB0cnVlLCBidXQgKnBsYW4gbWF5IGhhdmUgYmVlbiB1cGRh dGVkLgorICoKKyAqIFRoZSByZWFzb24gd2UgZG9uJ3Qgd2FudCB0byBkZXNjZW5kIHRocm91Z2gg ZWxpZGVkIG5vZGVzIGlzIHRoYXQgYSBzaW5nbGUKKyAqIGpvaW4gdHJlZSBjYW4ndCBjcm9zcyB0 aHJvdWdoIGFueSBzb3J0IG9mIGVsaWRlZCBub2RlOiBzdWJxdWVyaWVzIGFyZQorICogcGxhbm5l ZCBzZXBhcmF0ZWx5LCBhbmQgcGxhbm5pbmcgaW5zaWRlIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVu ZCBpcworICogc2VwYXJhdGUgZnJvbSBwbGFubmluZyBvdXRzaWRlIG9mIGl0LgorICoKKyAqIFRo ZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiB3ZSBkZXNjZW5kIHRocm91Z2ggYXQgbGVhc3Qgb25l IG5vZGUsIGFuZAorICogb3RoZXJ3aXNlIGZhbHNlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9k ZXNjZW5kX2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJ CUVsaWRlZE5vZGUgKiplbGlkZWRfbm9kZSkKK3sKKwlpZiAoKmVsaWRlZF9ub2RlICE9IE5VTEwp CisJCXJldHVybiBmYWxzZTsKKworCWlmIChJc0EoKnBsYW4sIEFnZykgfHwgSXNBKCpwbGFuLCBV bmlxdWUpKQorCXsKKwkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBs YW4pOworCisJCWlmICgqZWxpZGVkX25vZGUgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4oKnBs YW4pKQorCQkJKmVsaWRlZF9ub2RlID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOwor CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIElzIHRo aXMgYSBSZXN1bHQgbm9kZSB0aGF0IGhhcyBhIGNoaWxkPworICovCitzdGF0aWMgYm9vbAoraXNf cmVzdWx0X25vZGVfd2l0aF9jaGlsZChQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxhbiwg UmVzdWx0KSAmJiBwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMOworfQorCisvKgorICogSXMgdGhpcyBh IFBsYW4gbm9kZSB3aG9zZSBwdXJwb3NlIGlzIHB1dCB0aGUgZGF0YSBpbiBhIGNlcnRhaW4gb3Jk ZXI/CisgKi8KK3N0YXRpYyBib29sCitpc19zb3J0aW5nX3BsYW4oUGxhbiAqcGxhbikKK3sKKwly ZXR1cm4gSXNBKHBsYW4sIFNvcnQpIHx8IElzQShwbGFuLCBJbmNyZW1lbnRhbFNvcnQpOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjRkYzcyOTg2YTcwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2pvaW4uaApAQCAtMCwwICsxLDEwNSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV9qb2luLmgKKyAqCSAgYW5hbHlzaXMgb2Ygam9pbnMgaW4gUGxhbiB0cmVl cworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4u aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfSk9JTl9ICisjZGVm aW5lIFBHUEFfSk9JTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29udGV4 dDsKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl91bnJvbGxlciBwZ3BhX2pvaW5fdW5yb2xsZXI7 Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4gcGdwYV91bnJvbGxlZF9qb2luOwor CisvKgorICogQWx0aG91Z2ggdGhlcmUgYXJlIHRocmVlIG1haW4gam9pbiBzdHJhdGVnaWVzLCB3 ZSB0cnkgdG8gY2xhc3NpZnkgdGhpbmdzCisgKiBtb3JlIHByZWNpc2VseSBoZXJlOiBtZXJnZSBq b2lucyBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgbWF0ZXJpYWxpemF0aW9uCisgKiBvbiB0aGUg aW5uZXIgc2lkZSwgYW5kIG5lc3RlZCBsb29wcyBjYW4gdXNlIGVpdGhlciBtYXRlcmlhbGl6YXRp b24gb3IKKyAqIG1lbW9pemF0aW9uLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlKU1RSQVRfTUVS R0VfSk9JTl9QTEFJTiA9IDAsCisJSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJSlNU UkFUX05FU1RFRF9MT09QX1BMQUlOLAorCUpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwK KwlKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwlKU1RSQVRfSEFTSF9KT0lOCisJLyogdXBk YXRlIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9 IHBncGFfam9pbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZCQko KGludCkgSlNUUkFUX0hBU0hfSk9JTiArIDEpCisKKy8qCisgKiBJbiBhbiBvdXRlci1kZWVwIGpv aW4gdHJlZSwgZXZlcnkgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gd2lsbCBiZSBhIHNjYW4s CisgKiBidXQgam9pbiB0cmVlcyB3aXRoIG90aGVyIHNoYXBlcyBjYW4gY29udGFpbiB1bnJvbGxl ZCBqb2lucy4KKyAqCisgKiBUaGUgcGxhbiBub2RlIHdlIHN0b3JlIGhlcmUgd2lsbCBiZSB0aGUg aW5uZXIgb3Igb3V0ZXIgY2hpbGQgb2YgdGhlIGpvaW4KKyAqIG5vZGUsIGFzIGFwcHJvcHJpYXRl LCBleGNlcHQgdGhhdCB3ZSBsb29rIHRocm91Z2ggc3Vibm9kZXMgdGhhdCB3ZSByZWdhcmQgYXMK KyAqIHBhcnQgb2YgdGhlIGpvaW4gbWV0aG9kIGl0c2VsZi4gRm9yIGluc3RhbmNlLCBmb3IgYSBO ZXN0ZWQgTG9vcCB0aGF0CisgKiBtYXRlcmlhbGl6ZXMgdGhlIGlubmVyIGlucHV0LCB3ZSdsbCBz dG9yZSB0aGUgY2hpbGQgb2YgdGhlIE1hdGVyaWFsaXplIG5vZGUsCisgKiBub3QgdGhlIE1hdGVy aWFsaXplIG5vZGUgaXRzZWxmLgorICoKKyAqIElmIHNldHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQg b25lIG9yIG1vcmUgbm9kZXMgZnJvbSB0aGUgcGxhbiB0cmVlLCB0aGVuCisgKiB3ZSdsbCBzdG9y ZSBkZXRhaWxzIGFib3V0IHRoZSB0b3Btb3N0IG9mIHRob3NlIGluIGVsaWRlZF9ub2RlOyBvdGhl cndpc2UsCisgKiBpdCB3aWxsIGJlIE5VTEwuCisgKgorICogRXhhY3RseSBvbmUgb2Ygc2NhbiBh bmQgdW5yb2xsZWRfam9pbiB3aWxsIGJlIG5vbi1OVUxMLgorICovCit0eXBlZGVmIHN0cnVjdAor eworCVBsYW4JICAgKnBsYW47CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGU7CisJc3RydWN0IHBn cGFfc2NhbiAqc2NhbjsKKwlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVucm9sbGVkX2pvaW47Cit9IHBn cGFfam9pbl9tZW1iZXI7CisKKy8qCisgKiBXZSBjb252ZXJ0IG91dGVyLWRlZXAgam9pbiB0cmVl cyB0byBhIGZsYXQgc3RydWN0dXJlOyB0aGF0IGlzLCAoKEEgSk9JTiBCKQorICogSk9JTiBDKSBK T0lOIEQgZ2V0cyBjb252ZXJ0ZWQgdG8gb3V0ZXIgPSBBLCBpbm5lciA9IDxCIEMgRD4uICBXaGVu IGpvaW5zCisgKiBhcmVuJ3Qgb3V0ZXItZGVlcCwgc3Vic3RydWN0dXJlIGlzIHJlcXVpcmVkLCBl LmcuIChBIEpPSU4gQikgSk9JTiAoQyBKT0lOIEQpCisgKiBpcyByZXByZXNlbnRlZCBhcyBvdXRl ciA9IEEsIGlubmVyID0gPEIgWD4sIHdoZXJlIFggaXMgYSBwZ3BhX3Vucm9sbGVkX2pvaW4KKyAq IGNvdmVyaW5nIEMtRC4KKyAqLworc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbgoreworCS8qIE91 dGVybW9zdCBtZW1iZXI7IG11c3Qgbm90IGl0c2VsZiBiZSBhbiB1bnJvbGxlZCBqb2luLiAqLwor CXBncGFfam9pbl9tZW1iZXIgb3V0ZXI7CisKKwkvKiBOdW1iZXIgb2YgaW5uZXIgbWVtYmVycy4g TGVuZ3RoIG9mIHRoZSBzdHJhdGVneSBhbmQgaW5uZXIgYXJyYXlzLiAqLworCXVuc2lnbmVkCW5p bm5lcjsKKworCS8qIEFycmF5IG9mIHN0cmF0ZWdpZXMsIG9uZSBwZXIgbm9uLW91dGVybW9zdCBt ZW1iZXIuICovCisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVneTsKKworCS8qIEFycmF5IG9m IG1lbWJlcnMsIGV4Y2x1ZGluZyB0aGUgb3V0ZXJtb3N0LiBEZWVwZXN0IGZpcnN0LiAqLworCXBn cGFfam9pbl9tZW1iZXIgKmlubmVyOworfTsKKworLyoKKyAqIERvZXMgdGhpcyBwbGFuIG5vZGUg aW5oZXJpdCBmcm9tIEpvaW4/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV9pc19qb2lu KFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBOZXN0TG9vcCkgfHwgSXNBKHBsYW4s IE1lcmdlSm9pbikgfHwgSXNBKHBsYW4sIEhhc2hKb2luKTsKK30KKworZXh0ZXJuIHBncGFfam9p bl91bnJvbGxlciAqcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKTsKK2V4dGVybiB2b2lk IHBncGFfdW5yb2xsX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJIFBsYW4gKnBsYW4sIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCSBwZ3BhX2pv aW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAq Km91dGVyX2pvaW5fdW5yb2xsZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqKmlubmVy X2pvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHBncGFfdW5yb2xsZWRfam9pbiAqcGdwYV9idWlsZF91 bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJ CQkJCXBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CitleHRlcm4gdm9pZCBwZ3Bh X2Rlc3Ryb3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIp OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRw dXQuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODlhNjc1ZmY5M2UKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKQEAgLTAsMCArMSw2MjggQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmMKKyAqCSAgcHJvZHVjZSB0 ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVlIHdhbGsKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworI2luY2x1ZGUg Im5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKwor LyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciB0ZXh0dWFsIGFkdmljZSBnZW5lcmF0aW9uLgorICoK KyAqIHJ0X2lkZW50aWZpZXJzIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgYXJyYXkgb2YgcmFuZ2Ug dGFibGUgaWRlbnRpZmllcnMuCisgKiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgcGdw YV9pZGVudGlmaWVyLmMgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBidWYgaXMgdGhlIGNhbGxl ci1wcm92aWRlZCBvdXRwdXQgYnVmZmVyLgorICoKKyAqIHdyYXBfY29sdW1uIGlzIHRoZSB3cmFw IGNvbHVtbiwgc28gdGhhdCB3ZSBkb24ndCBjcmVhdGUgb3V0cHV0IHRoYXQgaXMKKyAqIHRvbyB3 aWRlLiBTZWUgcGdwYV9tYXliZV9saW5lYnJlYWsoKSBhbmQgY29tbWVudHMgaW4gcGdwYV9vdXRw dXRfYWR2aWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX291dHB1dF9jb250ZXh0Cit7CisJ Y29uc3QgY2hhciAqKnJpZF9zdHJpbmdzOworCVN0cmluZ0luZm8JYnVmOworCWludAkJCXdyYXBf Y29sdW1uOworfSBwZ3BhX291dHB1dF9jb250ZXh0OworCitzdGF0aWMgdm9pZCBwZ3BhX291dHB1 dF91bnJvbGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkg IHBncGFfdW5yb2xsZWRfam9pbiAqam9pbik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9qb2lu X21lbWJlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJcGdwYV9qb2lu X21lbWJlciAqbWVtYmVyKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3ko cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0 ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBMaXN0ICpzY2Fucyk7CitzdGF0aWMgdm9pZCBwZ3Bh X291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0 LAorCQkJCQkJCQkJCQkgUGxhbiAqcGxhbik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxh dGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9pZCByZWxpZCk7CitzdGF0 aWMgdm9pZCBwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0cHV0X2NvbnRleHQgKmNv bnRleHQsCisJCQkJCQkJCQkgIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJICBMaXN0ICpx dWVyeV9mZWF0dXJlcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3ko cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQljaGFyICpzdHJhdGVneSwK KwkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X25v X2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkgIEJpdG1hcHNl dCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0aW9ucyhwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkJICBCaXRtYXBzZXQg KnJlbGlkcyk7CisKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShwZ3Bh X2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19zY2Fu X3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSk7CitzdGF0aWMgY2hhciAqcGdw YV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUgdHlwZSk7CisKK3N0YXRp YyB2b2lkIHBncGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1 bW4pOworCisvKgorICogQXBwZW5kIHF1ZXJ5IGFkdmljZSB0byB0aGUgcHJvdmlkZWQgYnVmZmVy LgorICoKKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sICd3YWxrZXInIG11c3QgYmUg dXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlCisgKiBtYWluIHBsYW4gdHJlZSBhbmQgYWxsIHN1YnBs YW5zIGZyb20gdGhlIFBsYW5uZWRTdG10LgorICoKKyAqICdydF9pZGVudGlmaWVycycgaXMgYSB0 YWJsZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIG9uZSBmb3IgZWFjaCBSVEkuCisgKiBTZWUgcGdw YV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdCgpLgorICoKKyAqIFJlc3VsdHMg d2lsbCBiZSBhcHBlbmRlZCB0byAnYnVmJy4KKyAqLwordm9pZAorcGdwYV9vdXRwdXRfYWR2aWNl KFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkg ICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzKQoreworCUluZGV4CQlydGFibGVfbGVu Z3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwlMaXN0Q2VsbCAgICps YzsKKwlwZ3BhX291dHB1dF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKiBCYXNpYyBpbml0aWFsaXph dGlvbi4gKi8KKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihwZ3BhX291dHB1dF9jb250ZXh0 KSk7CisJY29udGV4dC5idWYgPSBidWY7CisKKwkvKgorCSAqIENvbnZlcnQgaWRlbnRpZmllcnMg dG8gc3RyaW5nIGZvcm0uIE5vdGUgdGhhdCB0aGUgbG9vcCB2YXJpYWJsZSBoZXJlIGlzCisJICog bm90IGFuIFJUSSwgYmVjYXVzZSBSVElzIGFyZSAxLWJhc2VkLiBTb21lIFJUSXMgd2lsbCBoYXZl IG5vCisJICogaWRlbnRpZmllciwgZWl0aGVyIGJlY2F1c2UgdGhlIHJlbG9wdGtpbmQgaXMgUlRF X0pPSU4gb3IgYmVjYXVzZSB0aGF0CisJICogcG9ydGlvbiBvZiB0aGUgcXVlcnkgZGlkbid0IG1h a2UgaXQgaW50byB0aGUgZmluYWwgcGxhbi4KKwkgKi8KKwljb250ZXh0LnJpZF9zdHJpbmdzID0g cGFsbG9jMF9hcnJheShjb25zdCBjaGFyICosIHJ0YWJsZV9sZW5ndGgpOworCWZvciAoaW50IGkg PSAwOyBpIDwgcnRhYmxlX2xlbmd0aDsgKytpKQorCQlpZiAocnRfaWRlbnRpZmllcnNbaV0uYWxp YXNfbmFtZSAhPSBOVUxMKQorCQkJY29udGV4dC5yaWRfc3RyaW5nc1tpXSA9IHBncGFfaWRlbnRp Zmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ldKTsKKworCS8qCisJICogSWYgdGhlIHVzZXIg Y2hvb3NlcyB0byB1c2UgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIGluIGFuIDgwLWNvbHVtbiB3aW5k b3cKKwkgKiBmcm9tIGEgcHNxbCBjbGllbnQgd2l0aCBkZWZhdWx0IHNldHRpbmdzLCBwc3FsIHdp bGwgYWRkIG9uZSBzcGFjZSB0bworCSAqIHRoZSBsZWZ0IG9mIHRoZSBvdXRwdXQgYW5kIEVYUExB SU4gd2lsbCBhZGQgdHdvIG1vcmUgdG8gdGhlIGxlZnQgb2YgdGhlCisJICogYWR2aWNlLiBUaHVz LCBsaW5lcyBvZiBtb3JlIHRoYW4gNzcgY2hhcmFjdGVycyB3aWxsIHdyYXAuIFdlIHNldCB0aGUK KwkgKiB3cmFwIGxpbWl0IHRvIDc2IGhlcmUgc28gdGhhdCB0aGUgb3V0cHV0IHdvbid0IHJlYWNo IGFsbCB0aGUgd2F5IHRvIHRoZQorCSAqIHZlcnkgbGFzdCBjb2x1bW4gb2YgdGhlIHRlcm1pbmFs LgorCSAqCisJICogT2YgY291cnNlLCB0aGlzIGlzIGZhaXJseSBhcmJpdHJhcnkgc2V0IG9mIGFz c3VtcHRpb25zLCBhbmQgb25lIGNvdWxkCisJICogd2VsbCBtYWtlIGFuIGFyZ3VtZW50IGZvciBh IGRpZmZlcmVudCB3cmFwIGxpbWl0LCBvciBmb3IgYSBjb25maWd1cmFibGUKKwkgKiBvbmUuCisJ ICovCisJY29udGV4dC53cmFwX2NvbHVtbiA9IDc2OworCisJLyoKKwkgKiBFYWNoIHBpZWNlIG9m IEpPSU5fT1JERVIoKSBhZHZpY2UgZnVsbHkgZGVzY3JpYmVzIHRoZSBqb2luIG9yZGVyIGZvciBh CisJICogYSBzaW5nbGUgdW5yb2xsZWQgam9pbi4gTWVyZ2luZyBpcyBub3QgcGVybWl0dGVkLCBi ZWNhdXNlIHRoYXQgd291bGQKKwkgKiBjaGFuZ2UgdGhlIG1lYW5pbmcsIGUuZy4gU0VRX1NDQU4o YSBiIGMgZCkgbWVhbnMgc2ltcGx5IHRoYXQgc2VxdWVudGlhbAorCSAqIHNjYW5zIHNob3VsZCBi ZSB1c2VkIGZvciBhbGwgb2YgdGhvc2UgcmVsYXRpb25zLCBhbmQgaXMgdGh1cyBlcXVpdmFsZW50 CisJICogdG8gU0VRX1NDQU4oYSBiKSBTRVFfU0NBTihjIGQpLCBidXQgSk9JTl9PUkRFUihhIGIg YyBkKSBtZWFucyB0aGF0ICJhIgorCSAqIGlzIHRoZSBkcml2aW5nIHRhYmxlIHdoaWNoIGlzIHRo ZW4gam9pbmVkIHRvICJiIiB0aGVuICJjIiB0aGVuICJkIiwKKwkgKiB3aGljaCBpcyB0b3RhbGx5 IGRpZmZlcmVudCBmcm9tIEpPSU5fT1JERVIoYSBiKSBhbmQgSk9JTl9PUkRFUihjIGQpLgorCSAq LworCWZvcmVhY2gobGMsIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJeworCQlw Z3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luID0gbGZpcnN0KGxjKTsKKworCQlpZiAoYnVmLT5sZW4g PiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJYXBwZW5kU3RyaW5n SW5mbyhjb250ZXh0LmJ1ZiwgIkpPSU5fT1JERVIoIik7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVk X2pvaW4oJmNvbnRleHQsIHVqb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC5i dWYsICcpJyk7CisJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQuYnVmLCBjb250ZXh0Lndy YXBfY29sdW1uKTsKKwl9CisKKwkvKiBFbWl0IGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiAqLworCWZv ciAoaW50IHMgPSAwOyBzIDwgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWTsgKytzKQorCXsKKwkJY2hh cgkgICAqc3RyYXRlZ3kgPSBwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShzKTsKKworCQlwZ3Bh X291dHB1dF9zaW1wbGVfc3RyYXRlZ3koJmNvbnRleHQsCisJCQkJCQkJCQlzdHJhdGVneSwKKwkJ CQkJCQkJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3NdKTsKKwl9CisKKwkvKgorCSAqIEVtaXQg c2NhbiBzdHJhdGVneSBhZHZpY2UgKGJ1dCBub3QgZm9yIG9yZGluYXJ5IHNjYW5zLCB3aGljaCBh cmUKKwkgKiBkZWZpbml0aW9uYWxseSB1bmludGVyZXN0aW5nKS4KKwkgKi8KKwlmb3IgKGludCBj ID0gMDsgYyA8IE5VTV9QR1BBX1NDQU5fU1RSQVRFR1k7ICsrYykKKwkJaWYgKGMgIT0gUEdQQV9T Q0FOX09SRElOQVJZKQorCQkJcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneSgmY29udGV4dCwgYywg d2Fsa2VyLT5zY2Fuc1tjXSk7CisKKwkvKiBFbWl0IHF1ZXJ5IGZlYXR1cmUgYWR2aWNlLiAqLwor CWZvciAoaW50IHQgPSAwOyB0IDwgTlVNX1BHUEFfUUZfVFlQRVM7ICsrdCkKKwkJcGdwYV9vdXRw dXRfcXVlcnlfZmVhdHVyZSgmY29udGV4dCwgdCwgd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0XSk7 CisKKwkvKiBFbWl0IE5PX0dBVEhFUiBhZHZpY2UuICovCisJcGdwYV9vdXRwdXRfbm9fZ2F0aGVy KCZjb250ZXh0LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisKKy8qCisgKiBPdXRwdXQg dGhlIG1lbWJlcnMgb2YgYW4gdW5yb2xsZWQgam9pbiwgZmlyc3QgdGhlIG91dGVybW9zdCBtZW1i ZXIsIGFuZAorICogdGhlbiB0aGUgaW5uZXIgbWVtYmVycyBvbmUgYnkgb25lLCBhcyBwYXJ0IG9m IEpPSU5fT1JERVIoKSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF91bnJv bGxlZF9qb2luKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkgIHBncGFfdW5y b2xsZWRfam9pbiAqam9pbikKK3sKKwlwZ3BhX291dHB1dF9qb2luX21lbWJlcihjb250ZXh0LCAm am9pbi0+b3V0ZXIpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCBqb2luLT5uaW5uZXI7ICsraykK Kwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZqb2luLT5pbm5lcltrXTsKKworCQlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQlwZ3BhX291dHB1 dF9qb2luX21lbWJlcihjb250ZXh0LCBtZW1iZXIpOworCX0KK30KKworLyoKKyAqIE91dHB1dCBh IHNpbmdsZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBhcyBwYXJ0IG9mIEpPSU5fT1JERVIo KSBhZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9qb2luX21lbWJlcihwZ3Bh X291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJcGdwYV9qb2luX21lbWJlciAqbWVtYmVy KQoreworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJcGdwYV9vdXRwdXRfdW5yb2xsZWRf am9pbihjb250ZXh0LCBtZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJfQorCWVsc2UKKwl7CisJCXBncGFfc2NhbiAgKnNj YW4gPSBtZW1iZXItPnNjYW47CisKKwkJQXNzZXJ0KHNjYW4gIT0gTlVMTCk7CisJCWlmIChibXNf bWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1 dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQllbHNl CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ3snKTsKKwkJCXBn cGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd9Jyk7CisJCX0KKwl9Cit9 CisKKy8qCisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdwYV9zY2FuIG9iamVjdHMu CisgKgorICogQWxsIHRoZSBzY2FucyBtdXN0IHVzZSB0aGUgc3RyYXRlZ3kgc3BlY2lmaWVkIGJ5 IHRoZSAic3RyYXRlZ3kiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRf c2Nhbl9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3Bh X3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIExpc3QgKnNjYW5zKQoreworCWJvb2wJ CWZpcnN0ID0gdHJ1ZTsKKworCWlmIChzY2FucyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChj b250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLAorCQkJCQkg cGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3koc3RyYXRlZ3kpKTsKKworCWZvcmVhY2hfcHRyKHBn cGFfc2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQlQbGFuCSAgICpwbGFuID0gc2Nhbi0+cGxhbjsK KworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFf bWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJLyogT3V0 cHV0IHRoZSByZWxhdGlvbiBpZGVudGlmaWVycy4gKi8KKwkJaWYgKGJtc19tZW1iZXJzaGlwKHNj YW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhj b250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVs YXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCisJCS8qIEZvciBzY2FucyBp bnZvbHZpbmcgaW5kZXhlcywgb3V0cHV0IGluZGV4IGluZm9ybWF0aW9uLiAqLworCQlpZiAoc3Ry YXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4 U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7 CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsICgoSW5kZXhTY2FuICopIHBs YW4pLT5pbmRleGlkKTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5E RVhfT05MWSkKKwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSk7CisJCQlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0 cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwKKwkJCQkJCQkJCSAgKChJbmRleE9ubHlTY2FuICop IHBsYW4pLT5pbmRleGlkKTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5f QklUTUFQX0hFQVApCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1Ziwg Y29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+ YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFpbHMoY29udGV4dCwg cGxhbi0+bGVmdHRyZWUpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4 dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IGluZm9ybWF0aW9uIGFib3V0IHdo aWNoIGluZGV4IG9yIGluZGV4ZXMgcG93ZXIgYSBCaXRtYXBIZWFwU2Nhbi4KKyAqCisgKiBXZSBl bWl0ICYmKGkxIGkyIGkzKSBmb3IgYSBCaXRtYXBBbmQgYmV0d2VlbiBpbmRleGVzIGkxLCBpMiwg YW5kIGkzOworICogYW5kIGxpa2V3aXNlIHx8KGkxIGkyIGkzKSBmb3IgYSBzaW1pbGFyIEJpdG1h cE9yIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X2JpdG1hcF9pbmRl eF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFBsYW4gKnBsYW4pCit7CisJ Y2hhcgkgICAqb3BlcmF0b3I7CisJTGlzdAkgICAqYml0bWFwcGxhbnM7CisJYm9vbAkJZmlyc3Qg PSB0cnVlOworCisJaWYgKElzQShwbGFuLCBCaXRtYXBJbmRleFNjYW4pKQorCXsKKwkJQml0bWFw SW5kZXhTY2FuICpiaXRtYXBpbmRleHNjYW4gPSAoQml0bWFwSW5kZXhTY2FuICopIHBsYW47CisK KwkJcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LCBiaXRtYXBpbmRleHNjYW4tPmlu ZGV4aWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKElzQShwbGFuLCBCaXRtYXBPcikpCisJewor CQlvcGVyYXRvciA9ICJ8fCI7CisJCWJpdG1hcHBsYW5zID0gKChCaXRtYXBPciAqKSBwbGFuKS0+ Yml0bWFwcGxhbnM7CisJfQorCWVsc2UgaWYgKElzQShwbGFuLCBCaXRtYXBBbmQpKQorCXsKKwkJ b3BlcmF0b3IgPSAiJiYiOworCQliaXRtYXBwbGFucyA9ICgoQml0bWFwQW5kICopIHBsYW4pLT5i aXRtYXBwbGFuczsKKwl9CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBub2RlIHR5 cGU6ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRl eHQtPmJ1ZiwgIiVzKCIsIG9wZXJhdG9yKTsKKwlmb3JlYWNoX3B0cihQbGFuLCBjaGlsZF9wbGFu LCBiaXRtYXBwbGFucykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVs c2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7 CisJCX0KKwkJcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFpbHMoY29udGV4dCwgY2hpbGRf cGxhbik7CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKK30K KworLyoKKyAqIE91dHB1dCBhIHNjaGVtYS1xdWFsaWZpZWQgcmVsYXRpb24gbmFtZS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwgT2lkIHJlbGlkKQoreworCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNw YWNlKHJlbGlkKTsKKwljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVf b3JfdGVtcChuc3BvaWQpOworCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUocmVsaWQp OworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZp ZXIocmVsbmFtZXNwYWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn LicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlm aWVyKHJlbG5hbWUpKTsKK30KKworLyoKKyAqIE91dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBw Z3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cy4KKyAqCisgKiBBbGwgZmVhdHVyZXMgbXVzdCBiZSBv ZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlICJ0eXBlIiBhcmd1bWVudC4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4dCAqY29u dGV4dCwgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkgIExpc3QgKnF1ZXJ5X2ZlYXR1cmVzKQor eworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChxdWVyeV9mZWF0dXJlcyA9PSBOSUwpCisJ CXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5i dWYsICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZSh0eXBlKSk7 CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJlcykK Kwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdw YV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQlpZiAo Ym1zX21lbWJlcnNoaXAocWYtPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0 cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5yZWxpZHMpOworCQllbHNl CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBn cGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5yZWxpZHMpOwor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGlu ZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICog T3V0cHV0ICJzaW1wbGUiIGFkdmljZSBmb3IgYSBMaXN0IG9mIEJpdG1hcHNldCBvYmplY3RzIGVh Y2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIG9uZSBvciBtb3JlIFJUSXMuCisgKgorICogQnkgc2lt cGxlLCB3ZSBqdXN0IG1lYW4gdGhhdCB0aGUgYWR2aWNlIGVtaXR0ZWQgZm9sbG93cyB0aGUgbW9z dAorICogc3RyYWlnaHRmb3J3YXJkIHBhdHRlcm46IHRoZSBzdHJhdGVneSBuYW1lLCBmb2xsb3dl ZCBieSBhIGxpc3Qgb2YgaXRlbXMKKyAqIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIHN1cnJvdW5k ZWQgYnkgcGFyZW50aGVzZXMuIEluZGl2aWR1YWwgaXRlbXMgaW4KKyAqIHRoZSBsaXN0IGFyZSBh IHNpbmdsZSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIEJpdG1hcHNldCB0aGF0IGNvbnRhaW5z CisgKiBqdXN0IG9uZSBtZW1iZXIsIG9yIGEgc3ViLWxpc3QgYWdhaW4gc2VwYXJhdGVkIGJ5IHNw YWNlcyBhbmQgc3Vycm91bmRlZAorICogYnkgcGFyZW50aGVzZXMgZm9yIGEgQml0bWFwc2V0IHdp dGggbXVsdGlwbGUgbWVtYmVycy4gQml0bWFwc2V0cyB3aXRoCisgKiBubyBtZW1iZXJzIHByb2Jh Ymx5IHNob3VsZG4ndCBvY2N1ciBoZXJlLCBidXQgaWYgdGhleSBkbyB0aGV5J2xsIGJlCisgKiBy ZW5kZXJlZCBhcyBhbiBlbXB0eSBzdWItbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0 cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICpz dHJhdGVneSwKKwkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1 ZTsKKworCWlmIChyZWxpZF9zZXRzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQt PmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4n KTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsIHN0cmF0ZWd5KTsKKwor CWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIHJlbGlkcywgcmVsaWRfc2V0cykKKwl7CisJCWlmIChm aXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5l YnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQlpZiAoYm1zX21lbWJlcnNo aXAocmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNv bnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMo Y29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29u dGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IE5PX0dBVEhFUiBhZHZpY2Ug Zm9yIGFsbCByZWxhdGlvbnMgbm90IGFwcGVhcmluZyBiZW5lYXRoIGFueQorICogR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfbm9fZ2F0 aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJpdG1hcHNldCAqcmVsaWRzKQorewor CWlmIChyZWxpZHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+ IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsICJOT19HQVRIRVIoIik7CisJcGdwYV9vdXRw dXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBPdXRwdXQgdGhlIGlk ZW50aWZpZXJzIGZvciBlYWNoIFJUSSBpbiB0aGUgcHJvdmlkZWQgc2V0LgorICoKKyAqIElkZW50 aWZpZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBhbmQgYSBsaW5lIGJyZWFrIGlzIHBvc3Np YmxlIGFmdGVyCisgKiBlYWNoIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3Jl bGF0aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJ CQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJz dCA9IHRydWU7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkp ID49IDApCisJeworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nID0gY29udGV4dC0+cmlkX3N0cmlu Z3NbcnRpIC0gMV07CisKKwkJaWYgKHJpZF9zdHJpbmcgPT0gTlVMTCkKKwkJCWVsb2coRVJST1Is ICJubyBpZGVudGlmaWVyIGZvciBSVEkgJWQiLCBydGkpOworCisJCWlmIChmaXJzdCkKKwkJewor CQkJZmlyc3QgPSBmYWxzZTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCByaWRfc3Ry aW5nKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGJ1ZiwgY29u dGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXMiLCByaWRf c3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVz cG9uZHMgdG8gdGhlIHNwZWNpZmllZCBqb2luIHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAq CitwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3kp Cit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fUExB SU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNlIEpTVFJBVF9NRVJHRV9K T0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsKKwkJ Y2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX1BM QUlOIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4g Ik5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVN T0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgSlNUUkFUX0hB U0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgp OworCXJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNw b25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoK K3BncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSkK K3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBQR1BBX1NDQU5fT1JESU5BUlk6CisJ CQlyZXR1cm4gIk9SRElOQVJZX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9TRVE6CisJCQlyZXR1 cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fQklUTUFQX0hFQVA6CisJCQlyZXR1cm4g IkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9GT1JFSUdOOgorCQkJcmV0dXJu ICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfU0NBTl9JTkRFWDoKKwkJCXJldHVybiAiSU5E RVhfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYX09OTFk6CisJCQlyZXR1cm4gIklOREVY X09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4g IlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfU0NBTl9USUQ6CisJCQlyZXR1cm4gIlRJRF9T Q0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgor ICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4g c3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJl X3R5cGUocGdwYV9xZl90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKQorCXsKKwkJY2FzZSBQ R1BBUUZfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIiOworCQljYXNlIFBHUEFRRl9HQVRIRVJf TUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2UgUEdQQVFGX1NFTUlKT0lO X05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05PTl9VTklRVUUiOworCQljYXNlIFBH UEFRRl9TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJfQor CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogSW5zZXJ0 IGEgbGluZSBicmVhayBpbnRvIHRoZSBTdHJpbmdJbmZvRGF0YSwgaWYgbmVlZGVkLgorICoKKyAq IElmIHdyYXBfY29sdW1uIGlzIHplcm8gb3IgbmVnYXRpdmUsIHRoaXMgZG9lcyBub3RoaW5nLiBP dGhlcndpc2UsIHdlCisgKiBjb25zaWRlciBpbnNlcnRpbmcgYSBuZXdsaW5lLiBXZSBvbmx5IGlu c2VydCBhIG5ld2xpbmUgaWYgdGhlIGxlbmd0aCBvZgorICogdGhlIGxhc3QgbGluZSBpbiB0aGUg YnVmZmVyIGV4Y2VlZHMgd3JhcF9jb2x1bW4sIGFuZCBub3QgaWYgd2UnZCBiZQorICogaW5zZXJ0 aW5nIGEgbmV3bGluZSBhdCBvciBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBs aW5lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGUgbmV3bGluZSBpcyBpbnNlcnRl ZCBpcyBzaW1wbHkgd2hlcmV2ZXIgdGhlCisgKiBidWZmZXIgZW5kZWQgdGhlIGxhc3QgdGltZSB0 aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIEluIG90aGVyIHdvcmRzLAorICogdGhlIGNhbGxlciBp cyBleHBlY3RlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZXZlcnkgdGltZSB3ZSByZWFjaCBhIGdv b2QKKyAqIHBsYWNlIGZvciBhIGxpbmUgYnJlYWsuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX21h eWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKQoreworCWNoYXIJ ICAgKnRyYWlsaW5nX25sOworCWludAkJCWxpbmVfc3RhcnQ7CisJaW50CQkJc2F2ZV9jdXJzb3I7 CisKKwkvKiBJZiBsaW5lIHdyYXBwaW5nIGlzIGRpc2FibGVkLCBleGl0IHF1aWNrbHkuICovCisJ aWYgKHdyYXBfY29sdW1uIDw9IDApCisJCXJldHVybjsKKworCS8qCisJICogU2V0IGxpbmVfc3Rh cnQgdG8gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBidWYtPmRhdGEgb2YgdGhlIGZpcnN0CisJICog Y2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsIHdoZXJlIHRoZSBjdXJyZW50IGxpbmUgbWVh bnMgdGhlIGxhc3QKKwkgKiBvbmUgaW4gdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IGxpbmVfc3RhcnQg Y291bGQgYmUgdGhlIG9mZnNldCBvZiB0aGUKKwkgKiB0cmFpbGluZyAnXDAnIGlmIHRoZSBsYXN0 IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIGEgbGluZSBicmVhay4KKwkgKi8KKwl0cmFpbGlu Z19ubCA9IHN0cnJjaHIoYnVmLT5kYXRhLCAnXG4nKTsKKwlpZiAodHJhaWxpbmdfbmwgPT0gTlVM TCkKKwkJbGluZV9zdGFydCA9IDA7CisJZWxzZQorCQlsaW5lX3N0YXJ0ID0gKHRyYWlsaW5nX25s IC0gYnVmLT5kYXRhKSArIDE7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoYXQgdGhlIGN1cnJlbnQg ZW5kIG9mIHRoZSBidWZmZXIgaXMgYSBwb3RlbnRpYWwgbG9jYXRpb24gdG8KKwkgKiBpbnNlcnQg YSBsaW5lIGJyZWFrIG9uIGEgZnV0dXJlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKwkgKi8KKwlz YXZlX2N1cnNvciA9IGJ1Zi0+Y3Vyc29yOworCWJ1Zi0+Y3Vyc29yID0gYnVmLT5sZW47CisKKwkv KiBJZiB3ZSBoYXZlbid0IHBhc3NlZCB0aGUgd3JhcCBjb2x1bW4sIHdlIGRvbid0IG5lZWQgYSBu ZXdsaW5lLiAqLworCWlmIChidWYtPmxlbiAtIGxpbmVfc3RhcnQgPD0gd3JhcF9jb2x1bW4pCisJ CXJldHVybjsKKworCS8qCisJICogSXQgb25seSBtYWtlcyBzZW5zZSB0byBpbnNlcnQgYSBuZXds aW5lIGF0IGEgcG9zaXRpb24gbGF0ZXIgdGhhbiB0aGUKKwkgKiBiZWdpbm5pbmcgb2YgdGhlIGN1 cnJlbnQgbGluZS4KKwkgKi8KKwlpZiAoYnVmLT5jdXJzb3IgPD0gbGluZV9zdGFydCkKKwkJcmV0 dXJuOworCisJLyogSW5zZXJ0IGEgbmV3bGluZSBhdCB0aGUgcHJldmlvdXMgY3Vyc29yIGxvY2F0 aW9uLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1ZiwgMSk7CisJbWVtbW92ZSgmYnVmLT5kYXRh W3NhdmVfY3Vyc29yXSArIDEsICZidWYtPmRhdGFbc2F2ZV9jdXJzb3JdLAorCQkJYnVmLT5sZW4g LSBzYXZlX2N1cnNvcik7CisJKytidWYtPmN1cnNvcjsKKwlidWYtPmRhdGFbKytidWYtPmxlbl0g PSAnXDAnOworCWJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gPSAnXG4nOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX291dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40NzQ5NmQ3NmY1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9vdXRwdXQuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX291dHB1dC5oCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVz dWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR1BBX09VVFBVVF9ICisjZGVmaW5lIFBHUEFfT1VUUFVUX0gKKworI2luY2x1ZGUg InBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKK2V4dGVybiB2 b2lkIHBncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0 X2lkZW50aWZpZXJzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2MTdlN2YyZjY0Ci0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CkBAIC0w LDAgKzEsMzM3IEBACisleworLyoKKyAqIFBhcnNlciBmb3IgcGxhbiBhZHZpY2UKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0 aC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgor I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKKwor I2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJzZXIuaCIKKworLyoKKyAq IEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBsaXZlIGFjcm9z cyBwYXJzZXIgY2FsbHMsCisgKiBzbyB3ZSBjYW4gZWFzaWx5IGhhdmUgaXQgdXNlIHBhbGxvYyBp bnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVudHMKKyAqIG1lbW9yeSBsZWFrcyBpZiB3ZSBl cnJvciBvdXQgZHVyaW5nIHBhcnNpbmcuCisgKi8KKyNkZWZpbmUgWVlNQUxMT0MgcGFsbG9jCisj ZGVmaW5lIFlZRlJFRSAgIHBmcmVlCislfQorCisvKiBCSVNPTiBEZWNsYXJhdGlvbnMgKi8KKyVw YXJzZS1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVwYXJzZS1wYXJhbSB7Y2hhciAqKnBhcnNlX2Vy cm9yX21zZ19wfQorJXBhcnNlLXBhcmFtIHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislbGV4LXBhcmFt IHtMaXN0ICoqcmVzdWx0fQorJWxleC1wYXJhbSB7Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wfQor JWxleC1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVyfQorJXB1cmUtcGFyc2VyCislZXhwZWN0IDAK KyVuYW1lLXByZWZpeD0icGdwYV95eSIKKworJXVuaW9uCit7CisJY2hhcgkgICAqc3RyOworCWlu dAkJCWludGVnZXI7CisJTGlzdAkgICAqbGlzdDsKKwlwZ3BhX2FkdmljZV9pdGVtICppdGVtOwor CXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0 OworfQorJXRva2VuIDxzdHI+IFRPS19JREVOVCBUT0tfVEFHX0pPSU5fT1JERVIgVE9LX1RBR19C SVRNQVAgVE9LX1RBR19JTkRFWAorJXRva2VuIDxzdHI+IFRPS19UQUdfU0lNUExFIFRPS19UQUdf R0VORVJJQworJXRva2VuIDxpbnRlZ2VyPiBUT0tfSU5URUdFUgorJXRva2VuIFRPS19PUiBUT0tf QU5ECisKKyV0eXBlIDxpbnRlZ2VyPiBvcHRfcmlfb2NjdXJyZW5jZQorJXR5cGUgPGl0ZW0+IGFk dmljZV9pdGVtCisldHlwZSA8bGlzdD4gYWR2aWNlX2l0ZW1fbGlzdCBiaXRtYXBfc3VibGlzdCBi aXRtYXBfdGFyZ2V0X2xpc3QgZ2VuZXJpY190YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IGluZGV4 X3RhcmdldF9saXN0IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0PiBvcHRfcGFy dGl0aW9uIHNpbXBsZV90YXJnZXRfbGlzdAorJXR5cGUgPHN0cj4gaWRlbnRpZmllciBvcHRfcGxh bl9uYW1lCisldHlwZSA8dGFyZ2V0PiBnZW5lcmljX3N1Ymxpc3Qgam9pbl9vcmRlcl9zdWJsaXN0 CisldHlwZSA8dGFyZ2V0PiByZWxhdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aXRhcmdldD4gYml0 bWFwX3RhcmdldF9pdGVtIGluZGV4X25hbWUKKworJXN0YXJ0IHBhcnNlX3RvcGxldmVsCisKKy8q IEdyYW1tYXIgZm9sbG93cyAqLworJSUKKworcGFyc2VfdG9wbGV2ZWw6IGFkdmljZV9pdGVtX2xp c3QKKwkJeworCQkJKHZvaWQpIHl5bmVycnM7CQkJCS8qIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5p bmcgKi8KKwkJCSpyZXN1bHQgPSAkMTsKKwkJfQorCTsKKworYWR2aWNlX2l0ZW1fbGlzdDogYWR2 aWNlX2l0ZW1fbGlzdCBhZHZpY2VfaXRlbQorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJ fAorCQl7ICQkID0gTklMOyB9CisJOworCithZHZpY2VfaXRlbTogVE9LX1RBR19KT0lOX09SREVS ICcoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0pPSU5fT1JERVI7 CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0lOREVYICcoJyBpbmRleF90 YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9p dGVtKTsKKwkJCWlmIChzdHJjbXAoJDEsICJpbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCSQk LT50YWcgPSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEs ICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfSU5ERVhfU0NBTjsK KwkJCWVsc2UKKwkJCQllbG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsK KwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfQklUTUFQICcoJyBiaXRtYXBf dGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2Vf aXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCSQkLT50 YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfU0lNUExFICcoJyBzaW1wbGVfdGFyZ2V0X2xp c3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJ CQlpZiAoc3RyY21wKCQxLCAibm9fZ2F0aGVyIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9U QUdfTk9fR0FUSEVSOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAic2VxX3NjYW4iKSA9PSAwKQor CQkJCSQkLT50YWcgPSBQR1BBX1RBR19TRVFfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwg InRpZF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfVElEX1NDQU47CisJCQll bHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZhaWxlZDogJXMiLCAkMSk7CisJCQkk JC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0dFTkVSSUMgJygnIGdlbmVyaWNfdGFy Z2V0X2xpc3QgJyknCisJCXsKKwkJCWJvb2wJZmFpbDsKKworCQkJJCQgPSBwYWxsb2MwX29iamVj dChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWco JDEsICZmYWlsKTsKKwkJCWlmIChmYWlsKQorCQkJeworCQkJCXBncGFfeXllcnJvcihyZXN1bHQs IHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJ1bnJlY29nbml6ZWQgYWR2 aWNlIHRhZyIpOworCQkJfQorCisJCQlpZiAoJCQtPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pP SU4pCisJCQl7CisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsICQz KQorCQkJCXsKKwkJCQkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklF UiB8fAorCQkJCQkJbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbikgPT0gMSkKKwkJCQkJCQlw Z3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJ CQkJCSAiRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVs YXRpb24gaWRlbnRpZmllciIpOworCQkJCX0KKwkJCX0KKworCQkJJCQtPnRhcmdldHMgPSAkMzsK KwkJfQorCTsKKworcmVsYXRpb25faWRlbnRpZmllcjogaWRlbnRpZmllciBvcHRfcmlfb2NjdXJy ZW5jZSBvcHRfcGFydGl0aW9uIG9wdF9wbGFuX25hbWUKKwkJeworCQkJJCQgPSBwYWxsb2MwX29i amVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfSURF TlRJRklFUjsKKwkJCSQkLT5yaWQuYWxpYXNfbmFtZSA9ICQxOworCQkJJCQtPnJpZC5vY2N1cnJl bmNlID0gJDI7CisJCQlpZiAobGlzdF9sZW5ndGgoJDMpID09IDIpCisJCQl7CisJCQkJJCQtPnJp ZC5wYXJ0bnNwID0gbGluaXRpYWwoJDMpOworCQkJCSQkLT5yaWQucGFydHJlbCA9IGxzZWNvbmQo JDMpOworCQkJfQorCQkJZWxzZSBpZiAoJDMgIT0gTklMKQorCQkJCSQkLT5yaWQucGFydHJlbCA9 IGxpbml0aWFsKCQzKTsKKwkJCSQkLT5yaWQucGxhbl9uYW1lID0gJDQ7CisJCX0KKwk7CisKK2lu ZGV4X25hbWU6IGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2lu ZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX05BTUU7CisJCQkkJC0+aW5k bmFtZSA9ICQxOworCQl9CisJfCBpZGVudGlmaWVyICcuJyBpZGVudGlmaWVyCisJCXsKKwkJCSQk ID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQ QV9JTkRFWF9OQU1FOworCQkJJCQtPmluZG5hbWVzcGFjZSA9ICQxOworCQkJJCQtPmluZG5hbWUg PSAkMzsKKwkJfQorCTsKKworb3B0X3JpX29jY3VycmVuY2U6CisJJyMnIFRPS19JTlRFR0VSCisJ CXsKKwkJCWlmICgkMiA8PSAwKQorCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9y X21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJvbmx5IHBvc2l0aXZlIG9jY3VycmVuY2UgbnVt YmVycyBhcmUgcGVybWl0dGVkIik7CisJCQkkJCA9ICQyOworCQl9CisJfAorCQl7CisJCQkvKiBU aGUgZGVmYXVsdCBvY2N1cnJlbmNlIG51bWJlciBpcyAxLiAqLworCQkJJCQgPSAxOworCQl9CisJ OworCitpZGVudGlmaWVyOiBUT0tfSURFTlQKKwl8IFRPS19UQUdfSk9JTl9PUkRFUgorCXwgVE9L X1RBR19JTkRFWAorCXwgVE9LX1RBR19CSVRNQVAKKwl8IFRPS19UQUdfU0lNUExFCisJfCBUT0tf VEFHX0dFTkVSSUMKKwk7CisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3ZSBhbHdh eXMgc2NoZW1hLXF1YWxpZnkgdGhlIHBhcnRpdGlvbiBuYW1lLCBidXQKKyAqIHdoZW4gcGFyc2lu ZyBhZHZpY2UsIHdlIGFjY2VwdCBhIHNwZWNpZmljYXRpb24gdGhhdCBsYWNrcyBvbmUuCisgKi8K K29wdF9wYXJ0aXRpb246CisJJy8nIFRPS19JREVOVCAnLicgVE9LX0lERU5UCisJCXsgJCQgPSBs aXN0X21ha2UyKCQyLCAkNCk7IH0KKwl8ICcvJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFr ZTEoJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitvcHRfcGxhbl9uYW1lOgorCSdA JyBUT0tfSURFTlQKKwkJeyAkJCA9ICQyOyB9CisJfAorCQl7ICQkID0gTlVMTDsgfQorCTsKKwor Yml0bWFwX3RhcmdldF9saXN0OiBiaXRtYXBfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmll ciBiaXRtYXBfdGFyZ2V0X2l0ZW0KKwkJeworCQkJJDItPml0YXJnZXQgPSAkMzsKKwkJCSQkID0g bGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitiaXRtYXBf dGFyZ2V0X2l0ZW06IGluZGV4X25hbWUKKwkJeyAkJCA9ICQxOyB9CisJfCBUT0tfT1IgJygnIGJp dG1hcF9zdWJsaXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhf dGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfT1I7CisJCQkkJC0+Y2hpbGRyZW4g PSAkMzsKKwkJfQorCXwgVE9LX0FORCAnKCcgYml0bWFwX3N1Ymxpc3QgJyknCisJCXsKKwkJCSQk ID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQ QV9JTkRFWF9BTkQ7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMzsKKwkJfQorCTsKKworYml0bWFwX3N1 Ymxpc3Q6IGJpdG1hcF9zdWJsaXN0IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGFwcGVu ZCgkMSwgJDIpOyB9CisJfCBiaXRtYXBfdGFyZ2V0X2l0ZW0KKwkJeyAkJCA9IGxpc3RfbWFrZTEo JDEpOyB9CisJOworCitnZW5lcmljX3RhcmdldF9saXN0OiBnZW5lcmljX3RhcmdldF9saXN0IHJl bGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgZ2VuZXJp Y190YXJnZXRfbGlzdCBnZW5lcmljX3N1Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsg fQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworZ2VuZXJpY19zdWJsaXN0OiAnKCcgZ2VuZXJp Y190YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2Fkdmlj ZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJ JCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK2luZGV4X3RhcmdldF9saXN0OgorCSAgaW5k ZXhfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllciBpbmRleF9uYW1lCisJCXsKKwkJCSQy LT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQorCXwKKwkJeyAk JCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl90YXJnZXRfbGlzdDogam9pbl9vcmRlcl90YXJn ZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0K Kwl8IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisJCXsgJCQgPSBs YXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3JkZXJf c3VibGlzdDoKKwknKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBw YWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwl8ICd7JyBz aW1wbGVfdGFyZ2V0X2xpc3QgJ30nCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNU OworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwk7CisKK3NpbXBsZV90YXJnZXRfbGlzdDog c2ltcGxlX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQo JDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworJSUKKworLyoKKyAqIFBhcnNl IGFuIGFkdmljZV9zdHJpbmcgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgcGdwYV9h ZHZpY2VfaXRlbQorICogb2JqZWN0cy4gSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMsIGluc3RlYWQg cmV0dXJuIE5VTEwuCisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLCAqZXJyb3Jf cCB3aWxsIGJlIHNldCB0byB0aGUgZXJyb3IgbWVzc2FnZTsKKyAqIG90aGVyd2lzZSwgKmVycm9y X3Agd2lsbCBiZSBzZXQgdG8gTlVMTC4KKyAqLworTGlzdCAqCitwZ3BhX3BhcnNlKGNvbnN0IGNo YXIgKmFkdmljZV9zdHJpbmcsIGNoYXIgKiplcnJvcl9wKQoreworCXl5c2Nhbl90CXNjYW5uZXI7 CisJTGlzdAkgICAqcmVzdWx0OworCWNoYXIJICAgKmVycm9yID0gTlVMTDsKKworCXBncGFfc2Nh bm5lcl9pbml0KGFkdmljZV9zdHJpbmcsICZzY2FubmVyKTsKKwlwZ3BhX3l5cGFyc2UoJnJlc3Vs dCwgJmVycm9yLCBzY2FubmVyKTsKKwlwZ3BhX3NjYW5uZXJfZmluaXNoKHNjYW5uZXIpOworCisJ aWYgKGVycm9yICE9IE5VTEwpCisJeworCQkqZXJyb3JfcCA9IGVycm9yOworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwkqZXJyb3JfcCA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi43NjdmYWNjZDhkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9wbGFubmVyLmMKQEAgLTAsMCArMSwxNzA2IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuYworICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi cGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUg InBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAi cGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFf d2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisjaW5jbHVk ZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2V4dGVuZHBsYW4uaCIK KyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0 aHMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGltaXpl ci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisvKgorICog V2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCB3ZSB0cnkgZ2VuZXJhdGluZyByZWxhdGlvbiBp ZGVudGlmaWVycyBkdXJpbmcKKyAqIHBsYW5uaW5nLCBzYXZpbmcgdGhlbSBpbiBhIGhhc2ggdGFi bGUsIGFuZCB0aGVuIGNyb3NzLWNoZWNraW5nIHRoZW0gYWdhaW5zdAorICogdGhlIG9uZXMgZ2Vu ZXJhdGVkIGFmdGVyIHBsYW5uaW5nIGlzIGNvbXBsZXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3JpX2NoZWNrZXJfa2V5Cit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydGk7 Cit9IHBncGFfcmlfY2hlY2tlcl9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hlY2tl cgoreworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXVpbnQzMgkJc3RhdHVzOworCWNvbnN0 IGNoYXIgKnJpZF9zdHJpbmc7Cit9IHBncGFfcmlfY2hlY2tlcjsKKworc3RhdGljIHVpbnQzMiBw Z3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpOworCitzdGF0 aWMgaW5saW5lIGJvb2wKK3BncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShwZ3BhX3JpX2NoZWNr ZXJfa2V5IGEsIHBncGFfcmlfY2hlY2tlcl9rZXkgYikKK3sKKwlpZiAoYS5ydGkgIT0gYi5ydGkp CisJCXJldHVybiBmYWxzZTsKKwlpZiAoYS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIChi LnBsYW5fbmFtZSA9PSBOVUxMKTsKKwlpZiAoYi5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJu IGZhbHNlOworCXJldHVybiBzdHJjbXAoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSA9PSAwOwor fQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfcmlfY2hlY2sKKyNkZWZpbmUgU0hfRUxFTUVO VF9UWVBFCQlwZ3BhX3JpX2NoZWNrZXIKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3JpX2No ZWNrZXJfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIs IGtleSkJcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwodGIs IGEsIGIpCXBncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09Q RQkJCXN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUK KyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9wbGFubmVyX3N0YXRlCit7CisJRXhwbGFpblN0YXRlICpleHBsYWluX3N0YXRlOworCXBn cGFfdHJvdmUgKnRyb3ZlOworCU1lbW9yeUNvbnRleHQgdHJvdmVfY3h0OworCisjaWZkZWYgVVNF X0FTU0VSVF9DSEVDS0lORworCXBncGFfcmlfY2hlY2tfaGFzaCAqcmlfY2hlY2tfaGFzaDsKKyNl bmRpZgorfSBwZ3BhX3BsYW5uZXJfc3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl9z dGF0ZQoreworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBvdXRlciByZWwuICovCisJUmVs T3B0SW5mbyAqb3V0ZXJyZWw7CisKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgaW5uZXIg cmVsLiAqLworCVJlbE9wdEluZm8gKmlubmVycmVsOworCisJLyoKKwkgKiBBcnJheSBvZiByZWxh dGlvbiBpZGVudGlmaWVycyBmb3IgYWxsIG1lbWJlcnMgb2YgdGhpcyBqb2lucmVsLCB3aXRoCisJ ICogb3V0ZXJyZWwgaWRlbmlmaWVycyBiZWZvcmUgaW5uZXJyZWwgaWRlbnRpZmllcnMuCisJICov CisJcGdwYV9pZGVudGlmaWVyICpyaWRzOworCisJLyogTnVtYmVyIG9mIG91dGVyIHJlbCBpZGVu dGlmaWVycy4gKi8KKwlpbnQJCQlvdXRlcl9jb3VudDsKKworCS8qIE51bWJlciBvZiBpbm5lciBy ZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJaW5uZXJfY291bnQ7CisKKwkvKgorCSAqIFRyb3Zl IGxvb2t1cCByZXN1bHRzLgorCSAqCisJICogam9pbl9lbnRyaWVzIGFuZCByZWxfZW50cmllcyBh cmUgYXJyYXlzIG9mIGVudHJpZXMsIGFuZCBqb2luX2luZGV4ZXMKKwkgKiBhbmQgcmVsX2luZGV4 ZXMgYXJlIHRoZSBpbnRlZ2VyIG9mZnNldHMgd2l0aGluIHRob3NlIGFycmF5cyBvZiBlbnRyaWVz CisJICogcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdXMuIFRoZSAiam9pbiIgZmllbGRzIGNvcnJl c3BvbmQgdG8gYSBsb29rdXAKKwkgKiB1c2luZyBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIGFuZCB0 aGUgInJlbCIgZmllbGRzIHRvIGEgbG9va3VwIHVzaW5nCisJICogUEdQQV9UUk9WRV9MT09LVVBf UkVMLgorCSAqLworCXBncGFfdHJvdmVfZW50cnkgKmpvaW5fZW50cmllczsKKwlCaXRtYXBzZXQg ICpqb2luX2luZGV4ZXM7CisJcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXM7CisJQml0bWFw c2V0ICAqcmVsX2luZGV4ZXM7Cit9IHBncGFfam9pbl9zdGF0ZTsKKworLyogU2F2ZWQgaG9vayB2 YWx1ZXMgKi8KK3N0YXRpYyBnZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUgcHJldl9nZXRfcmVs YXRpb25faW5mbyA9IE5VTEw7CitzdGF0aWMgam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBwcmV2 X2pvaW5fcGF0aF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgam9pbnJlbF9zZXR1cF9ob29rX3R5cGUg cHJldl9qb2lucmVsX3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NldHVwX2hvb2tfdHlw ZSBwcmV2X3BsYW5uZXJfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRvd25faG9v a190eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7CisKKy8qIE90aGVyIGdsb2JhbCB2 YXJpYWJlcyAqLworc3RhdGljIGludAlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IC0xOworCisvKiBG dW5jdGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHZvaWQgcGdwYV9nZXRfcmVsYXRpb25faW5m byhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAgT2lkIHJlbGF0aW9uT2JqZWN0SWQsCisJ CQkJCQkJCSAgIGJvb2wgaW5ocGFyZW50LAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpyZWwpOwor c3RhdGljIHZvaWQgcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJ CSAgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWws CisJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJICAgU3BlY2lhbEpvaW5J bmZvICpzamluZm8sCisJCQkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK3N0YXRpYyB2b2lk IHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkgUmVsT3B0 SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCQkg UmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJ CQkJIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJf c2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCSAgIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkgICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLAor CQkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3No dXRkb3duKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJICBjb25z dCBjaGFyICpxdWVyeV9zdHJpbmcsIFBsYW5uZWRTdG10ICpwc3RtdCk7CitzdGF0aWMgdm9pZCBw Z3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UodWludDY0ICpwZ3NfbWFza19wLAorCQkJ CQkJCQkJCQkgIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUg KnBqcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShK b2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkJCXVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJ CQkJCQkJCWNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpz KTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZv ICpyZWwsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9lbnRyaWVzLAorCQkJ CQkJCQkJCSAgIEJpdG1hcHNldCAqc2Nhbl9pbmRleGVzLAorCQkJCQkJCQkJCSAgIHBncGFfdHJv dmVfZW50cnkgKnJlbF9lbnRyaWVzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsX2luZGV4 ZXMpOworc3RhdGljIHVpbnQ2NCBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90 YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKTsKK3N0YXRpYyBib29sIHBncGFfam9pbl9vcmRl cl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJ CQkJIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgcGdwYV90cm92ZV9lbnRyeSAq ZW50cnkpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4oaW50IG91 dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIg KnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkg IGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0aWMgYm9vbCBwZ3BhX29wYXF1ZV9qb2luX3Bl cm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkg IHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVu dHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKKworc3RhdGljIExpc3Qg KnBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAqdHJv dmUsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJCQkJ ICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgcGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGdwYV9yaV9j aGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJCQkJUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIHBncGFf cmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywKKwkJCQkJCQkJCSBQ bGFubmVkU3RtdCAqcHN0bXQpOworCisvKgorICogSW5zdGFsbCBwbGFubmVyLXJlbGF0ZWQgaG9v a3MuCisgKi8KK3ZvaWQKK3BncGFfcGxhbm5lcl9pbnN0YWxsX2hvb2tzKHZvaWQpCit7CisJcGxh bm5lcl9leHRlbnNpb25faWQgPSBHZXRQbGFubmVyRXh0ZW5zaW9uSWQoInBnX3BsYW5fYWR2aWNl Iik7CisJcHJldl9nZXRfcmVsYXRpb25faW5mbyA9IGdldF9yZWxhdGlvbl9pbmZvX2hvb2s7CisJ Z2V0X3JlbGF0aW9uX2luZm9faG9vayA9IHBncGFfZ2V0X3JlbGF0aW9uX2luZm87CisJcHJldl9q b2lucmVsX3NldHVwID0gam9pbnJlbF9zZXR1cF9ob29rOworCWpvaW5yZWxfc2V0dXBfaG9vayA9 IHBncGFfam9pbnJlbF9zZXR1cDsKKwlwcmV2X2pvaW5fcGF0aF9zZXR1cCA9IGpvaW5fcGF0aF9z ZXR1cF9ob29rOworCWpvaW5fcGF0aF9zZXR1cF9ob29rID0gcGdwYV9qb2luX3BhdGhfc2V0dXA7 CisJcHJldl9wbGFubmVyX3NldHVwID0gcGxhbm5lcl9zZXR1cF9ob29rOworCXBsYW5uZXJfc2V0 dXBfaG9vayA9IHBncGFfcGxhbm5lcl9zZXR1cDsKKwlwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBw bGFubmVyX3NodXRkb3duX2hvb2s7CisJcGxhbm5lcl9zaHV0ZG93bl9ob29rID0gcGdwYV9wbGFu bmVyX3NodXRkb3duOworfQorCisvKgorICogSG9vayBmdW5jdGlvbiBmb3IgZ2V0X3JlbGF0aW9u X2luZm8oKS4KKyAqCisgKiBXZSBjYW4gYXBwbHkgc2NhbiBhZHZpY2UgYXQgdGhpcyBvcGludCwg YW5kIHdlIGFsc28gdXNlZSB0aGlzIGFzIGFuCisgKiBvcHBvcnR1bml0eSB0byBkbyByYW5nZS10 YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCisgKiBidWls ZHMuCisgKgorICogWFhYOiBXZSBjdXJyZW50bHkgZW1pdCB1c2VsZXNzIGFkdmljZSBsaWtlIE5P X0dBVEhFUigiKlJFU1VMVCoiKSBmb3IgdHJpdmlhbAorICogcXVlcmllcy4gVGhlIGFkdmljZSBp cyB1c2VsZXNzIGJlY2F1c2UgZ2V0X3JlbGF0aW9uX2luZm8gaXNuJ3QgY2FsbGVkIGZvcgorICog bm9uLXJlbGF0aW9uIFJURXMuIFdlIHNob3VsZCBlaXRoZXIgc3VwcHJlc3MgdGhlIGFkdmljZSBp biBzdWNoIGNhc2VzLCBvcgorICogYWRkIGEgaG9vayB0aGF0IGNhbiBhcHBseSBpdC4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9p ZCByZWxhdGlvbk9iamVjdElkLAorCQkJCQkgICBib29sIGluaHBhcmVudCwgUmVsT3B0SW5mbyAq cmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCisJLyogRmV0Y2ggb3VyIHByaXZh dGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQ bGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25f aWQpOworCisJLyogU2F2ZSBkZXRhaWxzIG5lZWRlZCBmb3IgcmFuZ2UgdGFibGUgaWRlbnRpZmll ciBjcm9zcy1jaGVja2luZy4gKi8KKwlpZiAocHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tl cl9zYXZlKHBwcywgcm9vdCwgcmVsKTsKKworCS8qIElmIHF1ZXJ5IGFkdmljZSB3YXMgcHJvdmlk ZWQsIHNlYXJjaCBmb3IgcmVsZXZhbnQgZW50cmllcy4gKi8KKwlpZiAocHBzICE9IE5VTEwgJiYg cHBzLT50cm92ZSAhPSBOVUxMKQorCXsKKwkJcGdwYV9pZGVudGlmaWVyIHJpZDsKKwkJcGdwYV90 cm92ZV9yZXN1bHQgdHJlc3VsdF9zY2FuOworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3Jl bDsKKworCQkvKiBTZWFyY2ggZm9yIHNjYW4gYWR2aWNlIGFuZCBnZW5lcmFsIHJlbCBhZHZpY2Uu ICovCisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCByZWwtPnJlbGlkLCAm cmlkKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBf U0NBTiwgMSwgJnJpZCwKKwkJCQkJCSAgJnRyZXN1bHRfc2Nhbik7CisJCXBncGFfdHJvdmVfbG9v a3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwgMSwgJnJpZCwKKwkJCQkJCSAg JnRyZXN1bHRfcmVsKTsKKworCQkvKiBJZiByZWxldmFudCBlbnRyaWVzIHdlcmUgZm91bmQsIGFw cGx5IHRoZW0uICovCisJCWlmICh0cmVzdWx0X3NjYW4uaW5kZXhlcyAhPSBOVUxMIHx8IHRyZXN1 bHRfcmVsLmluZGV4ZXMgIT0gTlVMTCkKKwkJCXBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2Fkdmlj ZShyZWwsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9zY2FuLmVudHJpZXMsCisJCQkJCQkJCQkJICAg dHJlc3VsdF9zY2FuLmluZGV4ZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwuZW50cmllcywK KwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5pbmRleGVzKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwg dG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9nZXRfcmVsYXRpb25faW5mbykKKwkJKCpw cmV2X2dldF9yZWxhdGlvbl9pbmZvKSAocm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50 LCByZWwpOworfQorCisvKgorICogU2VhcmNoIGZvciBhZHZpY2UgcGVydGFpbmluZyB0byBhIHBy b3Bvc2VkIGpvaW4uCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RhdGUgKgorcGdwYV9nZXRfam9p bl9zdGF0ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJUmVs T3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsKQoreworCXBncGFfcGxhbm5l cl9zdGF0ZSAqcHBzOworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCWJvb2wJCW5ld19wanMgPSBm YWxzZTsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFu bmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJv b3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzID09IE5VTEwgfHwgcHBz LT50cm92ZSA9PSBOVUxMKQorCXsKKwkJLyogTm8gYWR2aWNlIGFwcGxpZXMgdG8gdGhpcyBxdWVy eSwgaGVuY2Ugbm9uZSB0byB0aGlzIGpvaW5yZWwuICovCisJCXJldHVybiBOVUxMOworCX0KKwor CS8qCisJICogU2VlIHdoZXRoZXIgd2UndmUgcHJldmlvdXNseSBhc3NvY2lhdGVkIGEgcGdwYV9q b2luX3N0YXRlIHdpdGggdGhpcworCSAqIGpvaW5yZWwuIElmIHdlIGhhdmUgbm90LCB3ZSBuZWVk IHRvIHRyeSB0byBjb25zdHJ1Y3Qgb25lLiBJZiB3ZSBoYXZlLAorCSAqIHRoZW4gdGhlcmUgYXJl IHR3byBjYXNlczogKGEpIGlmIGlubmVycmVsIGFuZCBvdXRlcnJlbCBhcmUgdW5jaGFuZ2VkLAor CSAqIHdlIGNhbiBzaW1wbHkgdXNlIGl0LCBhbmQgKGIpIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLCB3 ZSBuZWVkIHRvIHJlamlnZ2VyCisJICogdGhlIGFycmF5IG9mIGlkZW50aWZpZXJzIGJ1dCBjYW4g c3RpbGwgc2tpcCB0aGUgdHJvdmUgbG9va3VwLgorCSAqLworCXBqcyA9IEdldFJlbE9wdEluZm9F eHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBqcyAh PSBOVUxMKQorCXsKKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxf aW5kZXhlcyA9PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBubyBwb3RlbnRp YWxseSByZWxldmFudCBhZHZpY2UsIHRoZW4gdGhlIHByZXNlbmNlIG9mCisJCQkgKiB0aGlzIHBn cGFfam9pbl9zdGF0ZSBhY3RzIGxpa2UgYSBuZWdhdGl2ZSBjYWNoZSBlbnRyeTogaXQgdGVsbHMK KwkJCSAqIHVzIG5vdCB0byBib3RoZXIgc2VhcmNoaW5nIHRoZSB0cm92ZSBmb3IgYWR2aWNlLCBi ZWNhdXNlIHdlCisJCQkgKiB3aWxsIG5vdCBmaW5kIGFueS4KKwkJCSAqLworCQkJcmV0dXJuIE5V TEw7CisJCX0KKworCQlpZiAocGpzLT5vdXRlcnJlbCA9PSBvdXRlcnJlbCAmJiBwanMtPmlubmVy cmVsID09IGlubmVycmVsKQorCQl7CisJCQkvKiBObyB1cGRhdGVzIHJlcXVpcmVkLCBzbyBqdXN0 IHJldHVybi4gKi8KKwkJCS8qIFhYWC4gRG9lcyB0aGlzIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRp ZmZlcmVudCB1bmRlciBHRVFPPyAqLworCQkJcmV0dXJuIHBqczsKKwkJfQorCX0KKworCS8qCisJ ICogSWYgdGhlcmUncyBubyBwZ3BhX2pvaW5fc3RhdGUgeWV0LCB3ZSBuZWVkIHRvIGFsbG9jYXRl IG9uZS4gVHJvdmUga2V5cworCSAqIHdpbGwgbm90IGdldCBidWlsdCBmb3IgUlRFX0pPSU4gUlRF cywgc28gdGhlIGFycmF5IG1heSBlbmQgdXAgYmVpbmcKKwkgKiBsYXJnZXIgdGhhbiBuZWVkZWQu IEl0J3Mgbm90IHdvcnRoIHRyeWluZyB0byBjb21wdXRlIGEgcGVyZmVjdGx5CisJICogYWNjdXJh dGUgY291bnQgaGVyZS4KKwkgKi8KKwlpZiAocGpzID09IE5VTEwpCisJeworCQlpbnQJCQlwZXNz aW1pc3RpY19jb3VudCA9IGJtc19udW1fbWVtYmVycyhqb2lucmVsLT5yZWxpZHMpOworCisJCXBq cyA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl9zdGF0ZSk7CisJCXBqcy0+cmlkcyA9IHBhbGxv Y19hcnJheShwZ3BhX2lkZW50aWZpZXIsIHBlc3NpbWlzdGljX2NvdW50KTsKKwkJbmV3X3BqcyA9 IHRydWU7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgd2UganVzdCBhbGxvY2F0ZWQgYSBuZXcgcGdw YV9qb2luX3N0YXRlLCBvciB0aGUgZXhpc3Rpbmcgb25lCisJICogbmVlZHMgcmVjb25maWd1cmlu ZyBmb3IgYSBuZXcgaW5uZXJyZWwgYW5kIG91dGVycmVsLiBUaGUgcmVxdWlyZWQgYXJyYXkKKwkg KiBzaXplIGNhbid0IGNoYW5nZSwgc28gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgb25l LgorCSAqLworCXBqcy0+b3V0ZXJyZWwgPSBvdXRlcnJlbDsKKwlwanMtPmlubmVycmVsID0gaW5u ZXJyZWw7CisJcGpzLT5vdXRlcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19i eV9yZWxpZHMocm9vdCwgb3V0ZXJyZWwtPnJlbGlkcywgcGpzLT5yaWRzKTsKKwlwanMtPmlubmVy X2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBpbm5l cnJlbC0+cmVsaWRzLAorCQkJCQkJCQkJCSAgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQp OworCisJLyoKKwkgKiBJZiB3ZSBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBzZWFy Y2ggb3VyIHRyb3ZlIG9mIGFkdmljZSBmb3IKKwkgKiByZWxldmFudCBlbnRyaWVzLiBUaGUgdHJv dmUgbG9va3VwIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdHMgZm9yCisJICogZXZlcnkgb3V0 ZXJyZWwvaW5uZXJyZWwgY29tYmluYXRpb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IHRo YXQKKwkgKiB3b3JrIGV2ZXJ5IHRpbWUuCisJICovCisJaWYgKG5ld19wanMpCisJeworCQlwZ3Bh X3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0OworCisJCS8qIEZpbmQgam9pbiBlbnRyaWVzLiAqLworCQlw Z3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJ CQkJICBwanMtPm91dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5y aWRzLCAmdHJlc3VsdCk7CisJCXBqcy0+am9pbl9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOwor CQlwanMtPmpvaW5faW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBGaW5kIHJlbCBl bnRyaWVzLiAqLworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xP T0tVUF9SRUwsCisJCQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAor CQkJCQkJICBwanMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5yZWxfZW50cmllcyA9IHRyZXN1 bHQuZW50cmllczsKKwkJcGpzLT5yZWxfaW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkv KiBOb3cgdGhhdCB0aGUgbmV3IHBncGFfam9pbl9zdGF0ZSBpcyBmdWxseSB2YWxpZCwgc2F2ZSBh IHBvaW50ZXIuICovCisJCVNldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFu bmVyX2V4dGVuc2lvbl9pZCwgcGpzKTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgbm8gcmVs ZXZhbnQgYWR2aWNlIGZvdW5kLCBqdXN0IHJldHVybiBOVUxMLiBUaGlzCisJCSAqIHBncGFfam9p bl9zdGF0ZSB3aWxsIHN0aWNrIGFyb3VuZCBhcyBhIHNvcnQgb2YgbmVnYXRpdmUgY2FjaGUKKwkJ ICogZW50cnksIHNvIHRoYXQgZnV0dXJlIGNhbGxzIGZvciB0aGlzIHNhbWUgam9pbnJlbCBxdWlj a2x5IHJldHVybgorCQkgKiBOVUxMLgorCQkgKi8KKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09 IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJfQor CisJcmV0dXJuIHBqczsKK30KKworLyoKKyAqIEVuZm9yY2UgYW55IHByb3ZpZGVkIGFkdmljZSB0 aGF0IGlzIHJlbGV2YW50IHRvIGFueSBtZXRob2Qgb2YgaW1wbGVtZW50aW5nCisgKiB0aGlzIGpv aW4uCisgKgorICogQWx0aG91Z2ggd2UncmUgcGFzc2VkIHRoZSBvdXRlcnJlbCBhbmQgaW5uZXJy ZWwgaGVyZSwgdGhvc2UgYXJlIGp1c3QKKyAqIHdoYXRldmVyIHZhbHVlcyBoYXBwZW5lZCB0byBw cm9tcHQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgam9pbnJlbDsgdGhleQorICogc2hvdWxkbid0IHJl YWxseSBpbmZsdWVuY2Ugb3VyIGNob2ljZSBvZiB3aGF0IGFkdmljZSB0byBhcHBseS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfam9pbnJlbF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqam9pbnJlbCwKKwkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAq aW5uZXJyZWwsCisJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0 bGlzdCkKK3sKKwlwZ3BhX2pvaW5fc3RhdGUgKnBqczsKKworCUFzc2VydChibXNfbWVtYmVyc2hp cChqb2lucmVsLT5yZWxpZHMpID09IEJNU19NVUxUSVBMRSk7CisKKwkvKiBHZXQgb3VyIHByaXZh dGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9pbi4gKi8KKwlwanMgPSBwZ3BhX2dldF9q b2luX3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCk7CisKKwkvKiBJZiB0 aGVyZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXBwbHkg aXQuICovCisJaWYgKHBqcyAhPSBOVUxMKQorCQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9h ZHZpY2UoJmpvaW5yZWwtPnBnc19tYXNrLAorCQkJCQkJCQkJCSAgcm9vdC0+cGxhbl9uYW1lLAor CQkJCQkJCQkJCSAgcGpzKTsKKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLwor CWlmIChwcmV2X2pvaW5yZWxfc2V0dXApCisJCSgqcHJldl9qb2lucmVsX3NldHVwKSAocm9vdCwg am9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3Rs aXN0KTsKK30KKworLyoKKyAqIEVuZm9yY2UgYW55IHByb3ZpZGVkIGFkdmljZSB0aGF0IGlzIHJl bGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBtZXRob2Qgb2YKKyAqIGltcGxlbWVudGluZyB0aGlz IHBhcnRpY3VsYXIgam9pbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfam9pbl9wYXRoX3NldHVw KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkgUmVsT3B0SW5m byAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkgSm9pblR5cGUgam9pbnR5 cGUsIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSkKK3sKKwlwZ3BhX2pvaW5fc3RhdGUgKnBqczsK KworCUFzc2VydChibXNfbWVtYmVyc2hpcChqb2lucmVsLT5yZWxpZHMpID09IEJNU19NVUxUSVBM RSk7CisKKwkvKiBHZXQgb3VyIHByaXZhdGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9p bi4gKi8KKwlwanMgPSBwZ3BhX2dldF9qb2luX3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVs LCBpbm5lcnJlbCk7CisKKwkvKiBJZiB0aGVyZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBo ZWxwZXIgZnVuY3Rpb24gdG8gYXBwbHkgaXQuICovCisJaWYgKHBqcyAhPSBOVUxMKQorCQlwZ3Bh X3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShqb2ludHlwZSwKKwkJCQkJCQkJCQkJJmV4 dHJhLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkJcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCQlw anMpOworCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9p bl9wYXRoX3NldHVwKQorCQkoKnByZXZfam9pbl9wYXRoX3NldHVwKSAocm9vdCwgam9pbnJlbCwg b3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJCQkgam9pbnR5cGUsIGV4dHJhKTsKK30KKworLyoK KyAqIFByZXBhcmUgYWR2aWNlIGZvciB1c2UgYnkgYSBxdWVyeS4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfcGxhbm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkgICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLCBF eHBsYWluU3RhdGUgKmVzKQoreworCXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3Bs YW5uZXJfc3RhdGUgKnBwczsKKwljaGFyCSAgICplcnJvcjsKKwlib29sCQluZWVkc19wcHMgPSBm YWxzZTsKKworCS8qCisJICogSWYgYW55IGFkdmljZSB3YXMgcHJvdmlkZWQsIGJ1aWxkIGEgdHJv dmUgb2YgYWR2aWNlIGZvciB1c2UgZHVyaW5nCisJICogcGxhbm5pbmcuCisJICovCisJaWYgKHBn X3BsYW5fYWR2aWNlX2FkdmljZSAhPSBOVUxMICYmIHBnX3BsYW5fYWR2aWNlX2FkdmljZVswXSAh PSAnXDAnKQorCXsKKwkJTGlzdAkgICAqYWR2aWNlX2l0ZW1zOworCisJCS8qCisJCSAqIFBhcnNp bmcgc2hvdWxkbid0IGZhaWwgaGVyZSwgYmVjYXVzZSB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBw YXJzZWQKKwkJICogc3VjY2Vzc2Z1bGx5IGluIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19o b29rLCBidXQgaWYgaXQgZG9lcywKKwkJICogZW1pdCBhIHdhcm5pbmcuCisJCSAqLworCQlhZHZp Y2VfaXRlbXMgPSBwZ3BhX3BhcnNlKHBnX3BsYW5fYWR2aWNlX2FkdmljZSwgJmVycm9yKTsKKwkJ aWYgKGVycm9yKQorCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHBhcnNlIGFkdmljZTogJXMi LCBlcnJvcik7CisKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBhZHZpY2Ugc3Ry aW5nIHdhcyBub24tZW1wdHkgYnV0IGNvbnRhaW5lZCBubworCQkgKiBhY3R1YWwgYWR2aWNlLCBl LmcuIGl0IHdhcyBhbGwgd2hpdGVzcGFjZS4KKwkJICovCisJCWlmIChhZHZpY2VfaXRlbXMgIT0g TklMKQorCQl7CisJCQl0cm92ZSA9IHBncGFfYnVpbGRfdHJvdmUoYWR2aWNlX2l0ZW1zKTsKKwkJ CW5lZWRzX3BwcyA9IHRydWU7CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisKKwkvKgorCSAqIElmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZh dGUgc3RhdGUgb2JqZWN0IGZvcgorCSAqIGNyb3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMg PSB0cnVlOworI2VuZGlmCisKKwkvKiBJbml0aWFsaXplIGFuZCBzdG9yZSBwcml2YXRlIHN0YXRl LCBpZiByZXF1aXJlZC4gKi8KKwlpZiAobmVlZHNfcHBzKQorCXsKKwkJcHBzID0gcGFsbG9jMF9v YmplY3QocGdwYV9wbGFubmVyX3N0YXRlKTsKKwkJcHBzLT5leHBsYWluX3N0YXRlID0gZXM7CisJ CXBwcy0+dHJvdmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+ cmlfY2hlY2tfaGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29u dGV4dCwgMTAyNCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0 YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKworLyoKKyAqIENh cnJ5IG91dCB3aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMgY29t cGxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckds b2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBn cGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlFeHBsYWluU3RhdGUgKmVzID0gTlVMTDsKKwlwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgd2Fsa2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICov CisJYm9vbAkJZG9fYWR2aWNlX2ZlZWRiYWNrOworCWJvb2wJCWRvX2NvbGxlY3RfYWR2aWNlOwor CUxpc3QJICAgKnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlm aWVycyA9IE5VTEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBn cGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25T dGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyAhPSBOVUxMKQorCXsK KwkJdHJvdmUgPSBwcHMtPnRyb3ZlOworCQllcyA9IHBwcy0+ZXhwbGFpbl9zdGF0ZTsKKwl9CisK KwkvKiBJZiBhdCBsZWFzdCBvbmUgY29sbGVjdG9yIGlzIGVuYWJsZWQsIGdlbmVyYXRlIGFkdmlj ZS4gKi8KKwlkb19jb2xsZWN0X2FkdmljZSA9IChwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0ID4gMCB8fAorCQkJCQkJIHBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9u X2xpbWl0ID4gMCk7CisKKwkvKiBJZiB3ZSBhcHBsaWVkIGFkdmljZSwgZ2VuZXJhdGUgZmVlZGJh Y2suICovCisJZG9fYWR2aWNlX2ZlZWRiYWNrID0gKHRyb3ZlICE9IE5VTEwgJiYgZXMgIT0gTlVM TCk7CisKKwkvKiBJZiBlaXRoZXIgb2YgdGhlIGFib3ZlIGFwcGx5LCBhbmFseXplIHRoZSByZXN1 bHRpbmcgUGxhbm5lZFN0bXQuICovCisJaWYgKGRvX2NvbGxlY3RfYWR2aWNlIHx8IGRvX2Fkdmlj ZV9mZWVkYmFjaykKKwl7CisJCXBncGFfcGxhbl93YWxrZXIoJndhbGtlciwgcHN0bXQpOworCQly dF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQo cHN0bXQpOworCX0KKworCS8qCisJICogSWYgYWR2aWNlIGNvbGxlY3Rpb24gaXMgZW5hYmxlZCwg cHV0IHRoZSBhZHZpY2UgaW4gc3RyaW5nIGZvcm0gYW5kIHNlbmQKKwkgKiBpdCB0byB0aGUgY29s bGVjdG9yLgorCSAqLworCWlmIChkb19jb2xsZWN0X2FkdmljZSkKKwl7CisJCWNoYXIJICAgKmFk dmljZV9zdHJpbmc7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRl eHR1YWwgYWR2aWNlIHN0cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFf b3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9z dHJpbmcgPSBidWYuZGF0YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwg ZG9uJ3QgYm90aGVyIGNvbGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9 ICdcMCcpCisJCQlwZ3BhX2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJp bmcsIGFkdmljZV9zdHJpbmcpOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIGdvbmUgdG8gdGhlIHRy b3VibGUgb2YgZ2VuZXJhdGluZyBhbiBhZHZpY2Ugc3RyaW5nLCBhbmQgaWYKKwkJICogd2UncmUg aW5zaWRlIEVYUExBSU4sIHNhdmUgdGhlIHN0cmluZyBzbyB3ZSBkb24ndCBuZWVkIHRvCisJCSAq IHJlZ2VuZXJhdGUgaXQuCisJCSAqLworCQlpZiAoZXMgIT0gTlVMTCkKKwkJCXBncGFfaXRlbXMg PSBsYXBwZW5kKHBncGFfaXRlbXMsCisJCQkJCQkJCSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmlu ZyIsCisJCQkJCQkJCQkJCSAoTm9kZSAqKSBtYWtlU3RyaW5nKGFkdmljZV9zdHJpbmcpLAorCQkJ CQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBwbGFubmluZyB3aXRoaW4g RVhQTEFJTiwgbWFrZSBhcnJhbmdlbWVudHMgdG8gYWxsb3cgRVhQTEFJTgorCSAqIHRvIHRlbGwg dGhlIHVzZXIgd2hhdCBoYXMgaGFwcGVuZWQgd2l0aCB0aGUgcHJvdmlkZWQgYWR2aWNlLgorCSAq CisJICogTkI6IElmIEVYUExBSU4gaXMgdXNlZCBvbiBhIHByZXBhcmVkIGlzIGEgcHJlcGFyZWQg c3RhdGVtZW50LCBwbGFubmluZworCSAqIHdpbGwgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGhhcHBl bmVkIHdpdGhvdXQgcmVjb3JkaW5nIHRoZXNlIGRldGFpbHMuIFdlCisJICogY291bGQgY29uc2lk ZXIgYWRkaW5nIGEgR1VDIHRvIGNhdGVyIHRvIHRoYXQgc2NlbmFyaW87IG9yIHdlIGNvdWxkIGRv CisJICogdGhpcyB3b3JrIGFsbCB0aGUgdGltZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSB0b28gbXVj aCBvdmVyaGVhZC4KKwkgKi8KKwlpZiAoZG9fYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJTGlzdAkg ICAqZmVlZGJhY2sgPSBOSUw7CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJl c2VudGF0aW9uIG9mIGFsbCB0aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxh bm5lZFN0bXQuCisJCSAqLworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJh Y2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVf TE9PS1VQX1NDQU4sCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZl ZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJ CQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJ CQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJf YXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJ CQlQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndh bGtlcik7CisKKwkJcGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0o ImZlZWRiYWNrIiwKKwkJCQkJCQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssCisJCQkJCQkJCQkJ CQkJIC0xKSk7CisJfQorCisJLyogUHVzaCB3aGF0ZXZlciBkYXRhIHdlJ3JlIHNhdmluZyBpbnRv IHRoZSBQbGFubmVkU3RtdC4gKi8KKwlpZiAocGdwYV9pdGVtcyAhPSBOSUwpCisJCXBzdG10LT5l eHRlbnNpb25fc3RhdGUgPQorCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJ CQltYWtlRGVmRWxlbSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkp OworCisJLyoKKwkgKiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUg Z2VuZXJhdGVkIHJhbmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKHBwcyAh PSBOVUxMKQorCQlwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Cit9CisKKy8q CisgKiBFbmZvcmNlIG92ZXJhbGwgcmVzdHJpY3Rpb25zIG9uIGEgam9pbiByZWxhdGlvbiB0aGF0 IGFwcGx5IHVuaWZvcm1seQorICogcmVnYXJkbGVzcyBvZiB0aGUgY2hvaWNlIG9mIGlubmVyIGFu ZCBvdXRlciByZWwuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJl bF9hZHZpY2UodWludDY0ICpwZ3NfbWFza19wLCBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCSAg cGdwYV9qb2luX3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCWludAkJCWZsYWdzOwor CWJvb2wJCWdhdGhlcl9jb25mbGljdCA9IGZhbHNlOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAw OworCUJpdG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQg ICpnYXRoZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJYm9vbAkJcGFydGl0aW9ud2lzZV9jb25mbGlj dCA9IGZhbHNlOworCWludAkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CisJQml0bWFwc2V0 ICAqcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpwYXJ0 aXRpb253aXNlX2Z1bGxfbWF0Y2ggPSBOVUxMOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3Nz aWJseS1yZWxldmFudCBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBq cy0+cmVsX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkg PSAmcGpzLT5yZWxfZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisJCWJvb2wJCWZ1 bGxfbWF0Y2ggPSBmYWxzZTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWludAkJ CW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CS8qID4wIHllcywgPDAgbm8gKi8KKworCQkv KgorCQkgKiBGb3IgR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UsIGlmIHRoZSBzcGVjaWZpZWQgcmVs YXRpb25zIGV4YWN0bHkKKwkJICogbWF0Y2ggdGhpcyBqb2lucmVsLCBkbyB3aGF0ZXZlciB0aGUg YWR2aWNlIHNheXM7IG90aGVyd2lzZSwgZG9uJ3QKKwkJICogYWxsb3cgR2F0aGVyIG9yIEdhdGhl ciBNZXJnZSBhdCB0aGlzIGxldmVsLiBGb3IgTk9fR0FUSEVSLCB0aGVyZQorCQkgKiBtdXN0IGJl IGEgc2luZ2xlIHRhcmdldCByZWxhdGlvbiB3aGljaCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoaXMK KwkJICogam9pbnJlbCwgc28ganVzdCBkb24ndCBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IGhlcmUsIGZ1bGwKKwkJICogc3RvcC4KKwkJICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFf VEFHX05PX0dBVEhFUikKKwkJeworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50 CQkJdG90YWxfY291bnQ7CisKKwkJCXRvdGFsX2NvdW50ID0gcGpzLT5vdXRlcl9jb3VudCArIHBq cy0+aW5uZXJfY291bnQ7CisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldCh0 b3RhbF9jb3VudCwgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJZW50cnktPnRhcmdldCk7CisJCQlB c3NlcnQoaXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKworCQkJaWYgKGl0bSA9PSBQR1BBX0lU TV9FUVVBTCkKKwkJCXsKKwkJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJCQlpZiAoZW50cnktPnRh ZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNv bWUgPSAxOworCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJ CQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9 PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhF Ul9NRVJHRTsKKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0 YWc6ICVkIiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsK KwkJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCXsKKwkJ CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15X2dhdGhlcl9tYXNrID0g UEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcg PT0gUEdQQV9UQUdfR0FUSEVSIHx8CisJCQkJCQkgZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRI RVJfTUVSR0UpCisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJ CQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJ ZWxzZQorCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJ CQkgKGludCkgZW50cnktPnRhZyk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQg bXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQor CQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQg KDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0 Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhl cl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVy X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlp ZiAoZnVsbF9tYXRjaCkKKwkJCQlnYXRoZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdh dGhlcl9mdWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9 IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCisJCS8qCisJ CSAqIExpa2V3aXNlLCBpZiB3ZSBzZXQgbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lIHVwIGFib3Zl LCB0aGVuIHdlICgxKQorCQkgKiBtYWtlIGEgbm90ZSBpZiB0aGUgYWR2aWNlIGNvbmZsaWN0ZWQs ICgyKSByZW1lbWJlciB3aGF0IHRoZSBkZXNpcmVkCisJCSAqIG91dGNvbWUgd2FzLCBhbmQgKDMp IHJlbWVtYmVyIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwKKwkJICogbWF0Y2gu CisJCSAqLworCQlpZiAobXlfcGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDApCisJCXsKKwkJCWlm IChwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCAmJgorCQkJCXBhcnRpdGlvbndpc2Vfb3V0Y29t ZSAhPSBteV9wYXJ0aXRpb253aXNlX291dGNvbWUpCisJCQkJcGFydGl0aW9ud2lzZV9jb25mbGlj dCA9IHRydWU7CisJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSBteV9wYXJ0aXRpb253aXNlX291 dGNvbWU7CisJCQlpZiAoZnVsbF9tYXRjaCkKKwkJCQlwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gg PQorCQkJCQlibXNfYWRkX21lbWJlcihwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGkpOworCQkJ ZWxzZQorCQkJCXBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVt YmVyKHBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKgorCSAq IE1hcmsgZXZlcnkgR2F0aGVyLXJlbGF0ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBt YXRjaGVkLCBhbmQgaWYKKwkgKiB0aGUgc2V0IG9mIHRhcmdldHMgZXhhY3RseSBtYXRjaGVkIHRo aXMgcmVsYXRpb24sIGZ1bGx5IG1hdGNoZWQuIElmCisJICogdGhlcmUgd2FzIGEgY29uZmxpY3Qs IG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01B VENIX1BBUlRJQUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9D T05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRo ZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsK KwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRj aCwgZmxhZ3MpOworCisJLyogTGlrZXdpc2UgZm9yIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLwor CWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChwYXJ0aXRpb253aXNlX2NvbmZs aWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHBqcy0+cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgZmxhZ3Mp OworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhw anMtPnJlbF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8q IElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIGdhdGhlciBzcGVjaWZpY2F0aW9uLCBlbmZv cmNlIGl0LiAqLworCWlmIChnYXRoZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJ eworCQkqcGdzX21hc2tfcCAmPQorCQkJfihQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8 IFBHU19DT05TSURFUl9OT05QQVJUSUFMKTsKKwkJKnBnc19tYXNrX3AgfD0gZ2F0aGVyX21hc2s7 CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBwYXJ0aXRpb253 aXNlIHNwZWNpZmljYXRpb24sIGVuZm9yY2UuCisJICoKKwkgKiBUbyBmb3JjZSBhIHBhcnRpdGlv bndpc2Ugam9pbiwgd2UgZGlzYWJsZSBhbGwgdGhlIG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVy Zm9ybWluZyBhIGpvaW4sIGFuZCBpbnN0ZWFkIG9ubHkgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBw YXRocyBoZXJlLgorCSAqIFRvIHByZXZlbnQgb25lLCB3ZSBqdXN0IGRpc2FibGUgQXBwZW5kIGFu ZCBNZXJnZUFwcGVuZC4gIE5vdGUgdGhhdCB3ZQorCSAqIG11c3Qgbm90IHVuc2V0IFBHU19DT05T SURFUl9QQVJUSVRJT05XSVNFIGV2ZW4gd2hlbiB3ZSBkb24ndCB3YW50IGEKKwkgKiBwYXJ0aXRp b253aXNlIGpvaW4gaGVyZSwgYmVjYXVzZSB3ZSBtaWdodCB3YW50IG9uZSBhdCBhIGhpZ2hlciBs ZXZlbAorCSAqIHRoYXQgaXMgY29uc3RydWN0aW5nIHVzaW5nIHBhdGhzIGZyb20gdGhpcyBsZXZl bC4KKwkgKi8KKwlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYgIXBhcnRpdGlvbndp c2VfY29uZmxpY3QpCisJeworCQlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lID4gMCkKKwkJCSpw Z3NfbWFza19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfAorCQkJCVBHU19BUFBF TkQgfCBQR1NfTUVSR0VfQVBQRU5EIHwgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0U7CisJCWVs c2UKKwkJCSpwZ3NfbWFza19wICY9IH4oUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQpOwor CX0KK30KKworLyoKKyAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBqb2luIG9yZGVyIG9y IGpvaW4gbWV0aG9kLgorICoKKyAqIE5vdGUgdGhhdCwgYWx0aG91Z2ggaXQgaXMgcG9zc2libGUg dG8gdmlldyBQQVJUSVRJT05XSVNFIGFkdmljZSBhcworICogY29udHJvbGxpbmcgdGhlIGpvaW4g bWV0aG9kLCB3ZSBjYW4ndCBlbmZvcmNlIGl0IGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUKKyAqIHBh dGggd2hlcmUgdGhpcyBleGVjdXRlcyBvbmx5IGRlYWxzIHdpdGggam9pbiBwYXRocyB0aGF0IGFy ZSBidWlsdCBkaXJlY3RseQorICogZnJvbSBhIHNpbmdsZSBvdXRlciBwYXRoIGFuZCBhIHNpbmds ZSBpbm5lciBwYXRoLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5f cGF0aF9hZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJ CQkJCWNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKQorewor CWludAkJCWkgPSAtMTsKKwlCaXRtYXBzZXQgICpqb19wZXJtaXRfaW5kZXhlcyA9IE5VTEw7CisJ Qml0bWFwc2V0ICAqam9fZGVueV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqbV9pbmRl eGVzID0gTlVMTDsKKwlib29sCQlqbV9jb25mbGljdCA9IGZhbHNlOworCXVpbnQzMgkJam9pbl9t YXNrID0gMDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHktcmVsZXZhbnQgYWR2aWNl LiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPmpvaW5faW5kZXhlcywgaSkp ID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPmpvaW5fZW50cmll c1tpXTsKKwkJdWludDMyCQlteV9qb2luX21hc2s7CisKKwkJLyogSGFuZGxlIGpvaW4gb3JkZXIg YWR2aWNlLiAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQl7 CisJCQlpZiAocGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAor CQkJCQkJCQkJCQkgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHBqcy0+cmlkcywKKwkJ CQkJCQkJCQkJIGVudHJ5KSkKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVy KGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCWVsc2UKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJY29udGludWU7CisJCX0KKwor CQkvKiBIYW5kbGUgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJCW15X2pvaW5fbWFzayA9IHBn cGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsKKwkJaWYg KG15X2pvaW5fbWFzayAhPSAwKQorCQl7CisJCQlib29sCQlwZXJtaXQ7CisJCQlib29sCQlyZXN0 cmljdF9tZXRob2Q7CisKKwkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9J TikKKwkJCQlwZXJtaXQgPSBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihwanMtPm91dGVy X2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJ ICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZy ZXN0cmljdF9tZXRob2QpOworCQkJZWxzZQorCQkJCXBlcm1pdCA9IHBncGFfam9pbl9tZXRob2Rf cGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5l cl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50 cnksCisJCQkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQlpZiAoIXBlcm1pdCkK KwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkp OworCQkJZWxzZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWpvX3Blcm1pdF9pbmRl eGVzID0gYm1zX2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJCWptX2luZGV4 ZXMgPSBibXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJaWYgKGpvaW5f bWFzayAhPSAwICYmIGpvaW5fbWFzayAhPSBteV9qb2luX21hc2spCisJCQkJCWptX2NvbmZsaWN0 ID0gdHJ1ZTsKKwkJCQlqb2luX21hc2sgPSBteV9qb2luX21hc2s7CisJCQl9CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZS4gKi8KKwkJ aWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFIHx8CisJCQllbnRyeS0+ dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUpCisJCXsKKwkJCWJvb2wJCWFkdmlj ZV91bmlxdWU7CisJCQlib29sCQlqdF91bmlxdWU7CisJCQlib29sCQlqdF9ub25fdW5pcXVlOwor CQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQkvKiBBZHZpY2Ugd2FudHMgdG8gdW5pcXVl LWlmeSBhbmQgdXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJYWR2aWNlX3VuaXF1ZSA9IChlbnRy eS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSk7CisKKwkJCS8qIFBsYW5uZXIgaXMg dHJ5aW5nIHRvIHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWp0X3Vu aXF1ZSA9IChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9JTk5FUiB8fAorCQkJCQkJIGpvaW50eXBl ID09IEpPSU5fVU5JUVVFX09VVEVSKTsKKworCQkJLyogUGxhbm5lciBpcyB0cnlpbmcgYSBzZW1p LWpvaW4sIHdpdGhvdXQgdW5pcXVlLWlmeWluZz8gKi8KKwkJCWp0X25vbl91bmlxdWUgPSAoam9p bnR5cGUgPT0gSk9JTl9TRU1JIHx8CisJCQkJCQkJIGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VN SSk7CisKKwkJCS8qCisJCQkgKiBUaGVzZSBhZHZpY2UgdGFncyBiZWhhdmUgdmVyeSBtdWNoIGxp a2Ugam9pbiBtZXRob2QgYWR2aWNlLCBpbgorCQkJICogdGhhdCB0aGV5IHdhbnQgdGhlIGlubmVy IHNpZGUgb2YgdGhlIHNlbWlqb2luIHRvIG1hdGNoIHRoZQorCQkJICogcmVsYXRpb25zIGxpc3Rl ZCBpbiB0aGUgYWR2aWNlLiBIZW5jZSwgd2UgdGVzdCB3aGV0aGVyIGpvaW4KKwkJCSAqIG1ldGhv ZCBhZHZpY2Ugd291bGQgZW5mb3JjZSBhIGpvaW4gb3JkZXIgcmVzdHJpY3Rpb24gaGVyZSwgYW5k CisJCQkgKiBkaXNhbGxvdyB0aGUgam9pbiBpZiBub3QuCisJCQkgKgorCQkJICogWFhYLiBUaGlu ayBoYXJkZXIgYWJvdXQgcmlnaHQgc2VtaWpvaW5zLgorCQkJICovCisJCQlpZiAoIXBncGFfam9p bl9tZXRob2RfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgIHBq cy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJICAg ZW50cnksCisJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpKQorCQkJCWpvX2RlbnlfaW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChy ZXN0cmljdF9tZXRob2QpCisJCQl7CisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21l bWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJaWYgKCFqdF91bmlxdWUgJiYgIWp0X25v bl91bmlxdWUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBi ZSBhIHNlbWlqb2luIHRvIHdoaWNoIFNKX1VOSVFVRQorCQkJCQkgKiBvciBTSl9OT05fVU5JUVVF IGNhbiBiZSBhcHBsaWVkLgorCQkJCQkgKi8KKwkJCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVf SU5BUFBMSUNBQkxFOworCQkJCX0KKwkJCQllbHNlIGlmIChhZHZpY2VfdW5pcXVlICE9IGp0X3Vu aXF1ZSkKKwkJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRl eGVzLCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUg YWR2aWNlIGluZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBlcm1pc3NpYmxl IGFuZAorCSAqIGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSByZWxhdGVkIHRv IHRoZSBqb2luIG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJaWYgKGpvX3Blcm1p dF9pbmRleGVzICE9IE5VTEwgJiYgam9fZGVueV9pbmRleGVzICE9IE5VTEwpCisJeworCQlwZ3Bh X3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMsCisJ CQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMt PmpvaW5fZW50cmllcywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNU SU5HKTsKKwl9CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBtZXRob2Qgc3BlY2lm aWNhdGlvbiBpcyByZWxldmFudCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVyLCBtYXJrIHRoZW0g YWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqbV9jb25mbGljdCkKKwkJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFf VEVfQ09ORkxJQ1RJTkcpOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQgdG8gZGVueSB0 aGlzIGpvaW4gb3JkZXIsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmIHdlCisJICogd2VyZSBhbHNv IGFkdmlzZWQgdG8gcGVybWl0IGl0LCB0aGVuIGRvIG5vdGhpbmcsIHNpbmNlIHRoZSBhZHZpY2UK KwkgKiBjb25mbGljdHMuCisJICovCisJaWYgKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMICYmIGpv X3Blcm1pdF9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gMDsKKworCS8qCisJICog SWYgd2Ugd2VyZSBhZHZpc2VkIHRvIHJlc3RyaWN0IHRoZSBqb2luIG1ldGhvZCwgdGhlbiBkbyBz by4gSG93ZXZlciwgaWYKKwkgKiB3ZSBnb3QgY29uZmxpY3Rpbmcgam9pbiBtZXRob2QgYWR2aWNl IG9yIHdlcmUgYWxzbyBhZHZpc2VkIHRvIHJlamVjdAorCSAqIHRoaXMgam9pbiBvcmRlciBjb21w bGV0ZWx5LCB0aGVuIGluc3RlYWQgZG8gbm90aGluZy4KKwkgKi8KKwlpZiAoam9pbl9tYXNrICE9 IDAgJiYgIWptX2NvbmZsaWN0ICYmIGpvX2RlbnlfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21h c2tfcCA9ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwgam9pbl9tYXNrOworfQorCisv KgorICogVHJhbnNsYXRlIGFuIGFkdmljZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBzdHJh dGVneSBtYXNrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0 eXBlcyB0aGF0IGRvbid0IHJlcHJlc2VudCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNh c2VzLCB3ZSBqdXN0IHJldHVybiAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisgKiBh IHZhbGlkIG1hc2suCisgKi8KK3N0YXRpYyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9tYXNr X2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0 YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1NfRk9S RUlHTkpPSU47CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBQ R1NfTUVSR0VKT0lOX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJ WkU6CisJCQlyZXR1cm4gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RB R19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWNh c2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RM T09QX01BVEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJ CQlyZXR1cm4gUEdTX05FU1RMT09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lO OgorCQkJcmV0dXJuIFBHU19IQVNISk9JTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0K K30KKworLyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2UgcGVy bWl0IGEgY2VydGFpbiBqb2luPworICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX29yZGVyX3Bl cm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgcGdw YV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sK Kwlib29sCQlsb29wID0gdHJ1ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJbGVu Z3RoOworCWludAkJCW91dGVyX2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9 IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0OworCisJ LyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0 cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOwor CisJLyoKKwkgKiBGaW5kIHRoZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBr ZXlzOyBpZiBubyBzdWJsaXN0IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5nIHdp dGggdGhlIHRvcGxldmVsIGxpc3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmlj ZSBzYXlzIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91bGQg ZXZhbHVhdGUgam9pbnMgdGhhdCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdhaW5z dCB0aGUKKwkgKiAodDMgdDQgdDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUgZnVs bCBsaXN0LgorCSAqCisJICogTm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBhbHdh eXMgb3JkZXJlZCBhbmQgKDIpIHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3JkZXJl ZCBzdWJsaXN0LCB3ZSBpbnN0YW50bHkgYWNjZXB0IHRoZSBwcm9wb3NlZCBqb2luLgorCSAqIElm IHRoZSBhZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyIHt0MyB0NCB0NX0pLCBhbnkgYXBwcm9h Y2ggdG8KKwkgKiBqb2luaW5nIHQzLCB0NCwgYW5kL29yIHQ1IGlzIGFjY2VwdGFibGUuCisJICov CisJd2hpbGUgKGxvb3ApCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdF VF9PUkRFUkVEX0xJU1QpOworCisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9h ZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBn cGFfaXRtX3R5cGUgaXRtOworCisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9JREVOVElGSUVSKQorCQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50aWZp ZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJ cmlkcywgY2hpbGRfdGFyZ2V0KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwgaXRt ID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFyZ2V0 LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJnZXQg PSBjaGlsZF90YXJnZXQ7CisJCQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1ZTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGlsZF90 YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0dXJu IHRydWU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBhIHBy ZWZpeCBvZiB0aGUgc2VsZWN0ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQorCSAq IGVxdWFsIHRvIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLworCWxl bmd0aCA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQgPSBw YWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0eXBl ID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsgb3V0 ZXJfbGVuZ3RoIDw9IGxlbmd0aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90eXBl IGl0bTsKKworCQkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJhdGlv bi4gKi8KKwkJaWYgKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0X2Zy ZWUocHJlZml4X3RhcmdldC0+Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiA9 IGxpc3RfY29weV9oZWFkKHRhcmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJfbGVu Z3RoKTsKKworCQkvKiBTZWFyY2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAqLwor CQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlkcywg cHJlZml4X3RhcmdldCk7CisJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVhazsK KworCQkvKgorCQkgKiBJZiB0aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhhdCB3 ZSdyZSBjb25zaWRlcmluZworCQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBv dXRlciByZWxzLCB3ZSBjYW4gbWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5kIGFu IGV4YWN0IG1hdGNoLiBCdXQgdGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2ZXJ5 dGhpbmcgdGhhdCdzIHBhcnQgb2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlvbmVk CisJCSAqIHRoaW5ncyB0aGF0IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0Y2gg dGhlIGpvaW4gb3JkZXIKKwkJICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9JVE1f VEFSR0VUU19BUkVfU1VCU0VUKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSWYg dGhlIHByZXZpb3VzIGxvb3BlZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBpbmNs dWRlZCB0aGUKKwkgKiBlbnRpcmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1lbWJl ciBvZiB0aGUgam9pbiBvcmRlciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBpbm5l ciBzaWRlIG9mIHRoZSBqb2luLgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0 MSB0MiAodDMgdDQgdDUpKSwgaWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVudCBq b2luIGluY2x1ZGVzIG9ubHkgdDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFjdGx5 IHQyOworCSAqIGlmIHRoZSBvdXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0aGVu IHRoZSBpbm5lciBzaWRlIG11c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQgdDUu CisJICovCisJaWYgKG91dGVyX2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNlX3Rh cmdldCAqaW5uZXJfdGFyZ2V0OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90YXJn ZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0bSA9 IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVmb3JlIHJl dHVybmluZywgY29uc2lkZXIgd2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBhcwor CQkgKiBmdWxseSBtYXRjaGVkLiBJZiB3ZSBmb3VuZCBldmVyeSBpdGVtIGJ1dCBvbmUgb24gdGhl IGxlZnRoYW5kIHNpZGUKKwkJICogb2YgdGhlIGpvaW4gYW5kIHRoZSBsYXN0IGl0ZW0gb24gdGhl IHJpZ2h0aGFuZCBzaWRlIG9mIHRoZSBqb2luLAorCQkgKiB0aGVuIHRoZSBhbnN3ZXIgaXMgeWVz LgorCQkgKi8KKwkJaWYgKG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQR1BB X0lUTV9FUVVBTCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisKKwkJ cmV0dXJuIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpOworCX0KKworCS8qCisJICogSWYgd2UgZ2V0 IGhlcmUsIHRoZW4gdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gaW5jbHVkZXMgdGhlIGVudGly ZXR5CisJICogb2YgdGhlIGpvaW4gb3JkZXIgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBiZWhhdmUg ZGlmZmVyZW50bHkgZGVwZW5kaW5nCisJICogb24gd2hldGhlciB3ZSdyZSBsb29raW5nIGF0IHRo ZSB0b3AtbGV2ZWwgam9pbiBvcmRlciBsaXN0IG9yIHN1Ymxpc3QuCisJICogQXQgdGhlIHRvcC1s ZXZlbCwgd2UgdHJlYXQgdGhlIHNwZWNpZmllZCBsaXN0IGFzIG1hbmRhdGluZyB0aGF0IHRoZQor CSAqIGFjdHVhbCBqb2luIG9yZGVyIGhhcyB0aGUgZ2l2ZW4gbGlzdCBhcyBhIHByZWZpeCwgYnV0 IGEgc3VibGlzdAorCSAqIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLgorCSAqCisJICogRXhtYXBs ZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgd2UgbXVzdCBzdGFydCBieSBq b2luaW5nCisJICogYWxsIGZpdmUgb2YgdGhvc2UgcmVsYXRpb25zIGFuZCBpbiB0aGF0IHNlcXVl bmNlLCBidXQgb25jZSB0aGF0IGlzCisJICogZG9uZSwgaXQncyBPSyB0byBqb2luIGFueSBvdGhl ciByZWxzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbS4KKwkgKiBUaGlzIGFsbG93 cyBhIHVzZXIgdG8gc3BlY2lmeSB0aGUgZHJpdmluZyB0YWJsZSBhbmQgcGVyaGFwcyB0aGUgZmly c3QKKwkgKiBmZXcgdGhpbmdzIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgd2hpbGUgbGVh dmluZyB0aGUgcmVzdCBvZiB0aGUKKwkgKiBqb2luIG9yZGVyIHVwIHRoZSBvcHRpbWl6ZXIuIEJ1 dCBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcsCisJICogZ2l2ZW4gdGhhdCBz cGVjaWZpY2F0aW9uLCBpZiB0aGUgdXNlciBjb3VsZCBhZGQgdDYgdG8gdGhlICh0MyB0NCB0NSkK KwkgKiBzdWItam9pbiwgc28gd2UgZG9uJ3QgYWxsb3cgdGhhdC4gSWYgd2UgZGlkIHdhbnQgdG8g YWxsb3cgaXQsIHRoZSBsb2dpYworCSAqIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiB3b3VsZCBy ZXF1aXJlIHN1YnN0YW50aWFsIGFkanVzdG1lbnQ6IHdlIGNvdWxkCisJICogYWxsb3cgdGhlIHQz LXQ0LXQ1LXQ2IGpvaW4gdG8gYmUgYnVpbHQgaGVyZSwgYnV0IHRoZSBuZXh0IHN0ZXAgb2YKKwkg KiBqb2luaW5nIHQxLXQyIHRvIHRoZSByZXN1bHQgd291bGQgc3RpbGwgYmUgcmVqZWN0ZWQuCisJ ICovCisJcmV0dXJuICFzdWJsaXN0OworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBv ZiBqb2luIG1ldGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFkdmlj ZSBzdWNoIGFzIEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBo YXNoIGpvaW4gd2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBPYnZp b3VzbHksIHRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9pbiB3 aXRoIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9yY2UK KyAqIHRoZSB1c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhhdCB3 ZSBtdXN0IHJlamVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJlbHku ICBGb3IgZXhhbXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUgb3V0 ZXIgc2lkZSBzaG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0IHdp bgorICogb3ZlciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8gYWNj b21tb2RhdGUgdGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBp ZiB0aGUgam9pbgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3VsZCBu b3QuIEZ1cnRoZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBpZiB0 aGUgam9pbiBtZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisgKi8K K3N0YXRpYyBib29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291 bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJ CQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3Rf bWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsK KwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKwlw Z3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0 IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOwor CisJLyoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUgcmVs YXRpb25zIGFzIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBlbmZv cmNlIHRoZSBqb2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5lciBy ZWwgbWVudGlvbnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cgdGhl CisJICogam9pbi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFj ZSwgYW5kIHRoaXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4K KwkgKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9j b3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFy Z2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZs YWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJ CXJldHVybiB0cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VU U19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVyIHJl bCBtZW50aW9ucyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZpY2UKKwkg KiB0YXJnZXQsIG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBoYXMgYWxy ZWFkeSB0YWtlbgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBmdXJ0aGVy IHJlc3RyaWN0aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIgb3V0ZXIg cmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBpbiB0aGUg YWR2aWNlIHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhlCisJICog c2lkZXMgb2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRjb21lLiBS ZWplY3QgdGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rh cmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlmIChvdXRl cl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKwll bHNlIGlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxzZTsKKwor CS8qCisJICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmdsZSByZWxh dGlvbiwgdGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZlIHNvbWUg d29yayBieSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9JREVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2ZXJ5dGhp bmcgaW4gdGhlIGpvaW5yZWwgaXMgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2UncmUK KwkgKiBiZWxvdyB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgorCSAq CisJICogRm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmljdCBob3cg eCBhbmQgeSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBzaG91bGRu J3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmljZQorCSAq IHNob3VsZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRoZSBmaXJz dCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOwor CUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5faXRtID09 IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVB TCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0dGVkIGFs bCBhbGxvd2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYgd2UgcmVhY2gg dGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2luIGJ1dAor CSAqIGlzbid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFuZCB0aGVy ZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUgam9pbiB0 aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGluc3RhbmNl LCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBoZXJlIGlm IHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhlciwgYW5k IGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBzb21lIG90 aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0aGlzIGpv aW4gd291bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJICogbm9uLWRp c2FibGVkIHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBh IGhhc2gKKwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0aGluZyBs aWtlICh4IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2VydGFpbiBq b2luPworICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0aGUgZXhh Y3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMgbm90IHZp c2libGUgdG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNlIG9ubHkg Zm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0IHgsIHks IGFuZAorICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtub3cgbm90 aGluZyBhYm91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVzZWQgb3ZlciB0 aGVyZS4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKGlu dCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVy ICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29s ICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRy eS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5 IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLwor CWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0 aG9kID0gZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0 KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOwor CWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdlIGhhdmUg YW4gZXhhY3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2luIGFuZAor CQkgKiBlbmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1ldGhvZC4K KwkJICovCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpyZXN0cmlj dF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9pdG0gPT0g UEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdF VFNfQVJFX1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRNX1RB UkdFVFNfQVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0IGhhcyBh bHJlYWR5IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBseS4KKwkJ ICoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3ZSdyZSBz dGlsbCBidWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFuZCBoYXZl IG5vdCBpbnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3QgbmFtZWQg aW4gdGhlIGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkgKiBqb2lu cyBhcmUgYnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlpbmcgam9p bnMgYW5kCisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9pbiB3aGVu IGNvbnNpZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0aW1hdGVs eSB3YW50LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUgYWR2aWNl IG92ZXJsYXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHByZXNlbnQg aW4KKwkgKiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLiBXZSB3 YW50IHRvIGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkgcHVzaCBk b3duIHRoZSBqb2luIGFzIGludGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIEFwcGx5IHNjYW4gYWR2aWNlIHRvIGEgUmVsT3B0SW5mby4KKyAqCisgKiBYWFguIEZvciBi aXRtYXAgaGVhcCBzY2Fucywgd2UncmUganVzdCBpZ25vcmluZyB0aGUgaW5kZXggaW5mb3JtYXRp b24gZnJvbQorICogdGhlIGFkdmljZS4gVGhhdCdzIG5vdCBjb29sLgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJ CQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0 ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMs CisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRoZXJfY29u ZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7 CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkgPSAtMTsK KwlwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFnczsKKwli b29sCQlzY2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVf aW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVzID0gTlVM TDsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IDA7CisK KwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBi bXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVf ZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9zY2FuX3R5 cGUgPSAwOworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0 ZWd5IGFkdmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfQklU TUFQX0hFQVBfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOOworCQllbHNl IGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15X3Nj YW5fdHlwZSA9IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJ ZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlfc2Nh bl90eXBlID0gUEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BB X1RBR19TRVFfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNlIGlm IChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0g UEdTX1RJRFNDQU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBzY2Fu IGFkdmljZSwgaGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2FuIHR5 cGUgdHlwZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoKKwkJICog QWxzbyBtYWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFkdmljZS4g Tm90ZSB0aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMgYXMgY29u ZmxpY3RpbmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5LCBwZXJo YXBzIHdlIGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVYX1NDQU4o YSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKKwkJ ICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0 aCB0aGUgY29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJeworCQkJaWYg KHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJc2Nhbl90 eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYmIHNjYW5f ZW50cnkgIT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAm JgorCQkJCXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJIXBncGFf aW5kZXhfdGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJCQkJCQkJ CQkJICBteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3Qg PSB0cnVlOworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0gbXlfc2Nh bl90eXBlOworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5cGVf aW5kZXhlcywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRoZXIt cmVsYXRlZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ry b3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9nYXRo ZXJfbWFzayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9yZWwgPSBt eV9lbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJCQl8fCBs aXN0X2xlbmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkvKgorCQkg KiBQQVJUSVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRoYXQgaWYg dGhlcmUncyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBoYXMgbm8g ZWZmZWN0IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BB X1RBR19QQVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJeworCQkJ CWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVO RDsKKworCQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBl KQorCQkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkgPSBteV9l bnRyeTsKKwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBlX3JlbF9p bmRleGVzID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBpKTsK KwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBHQVRIRVJf TUVSR0UgYXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAorCQkgKiB1 c2UgdGhlIGNvcnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVpdGhl ciB0byBtb3JlCisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0aG9z ZSBzdHJhdGVnaWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRoZSBq b2lucmVsIHRoYXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBOT19H QVRIRVIgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICogTm90 ZSB0aGF0IHNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21hc2sg aXMKKwkJICogZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIgZm9y bSBvZiBHYXRoZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFH X0dBVEhFUiB8fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJ CXsKKwkJCWlmICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dB VEhFUikKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlf Z2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5 LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVs KTsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKwor CQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEp IG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVy IHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMg YSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0g MCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0 aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0g bXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21h dGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJ CWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0 Y2gsIGkpOworCQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYg KHNjYW5fZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2Vu dHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09 IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRh cmdldCA9IHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRj aGVkX2luZGV4ID0gTlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQQV9JTkRF WF9OQU1FKTsKKworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRl eGxpc3QpCisJCXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmlu ZGV4b2lkKTsKKwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRl eG9pZCk7CisJCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNw b2lkKTsKKworCQkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9PSAwICYm CisJCQkJKGl0YXJnZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNtcChpdGFy Z2V0LT5pbmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJbWF0Y2hl ZF9pbmRleCA9IGluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNoZWRf aW5kZXggPT0gTlVMTCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlwZSBpZiB0 aGUgaW5kZXggZG9lc24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJCS8qIE1h cmsgYWR2aWNlIGFzIGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNj YW5fZW50cmllcywgc2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lOQVBQTElD QUJMRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBhbmQgZGlz Y2FyZCB0aGUgcmVzdC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMShtYXRjaGVk X2luZGV4KTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9kIGVu dHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZlcmVu dCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQ R1BBX1RFX01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5fdHlw ZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3Zl X3NldF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJcGdw YV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgZmxh Z3MpOworCisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmlj ZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQg dGhpcyByZWxhdGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRjaGVk LiBJZiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4K KwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZs aWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9 IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywg Z2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZs aWN0aW5nIHNjYW4gc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nhbl90eXBl ICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJ CX4oUEdTX1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJICBQ R1NfQ09OU0lERVJfSU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5cGU7CisJ fQorCisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRp b24sIGVuZm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25m bGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRI RVJfTUVSR0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21hc2sgfD0g Z2F0aGVyX21hc2s7CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMgdG8gZm9y IG9uZSB0cm92ZSBzbGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVybiB0aGUg cmVzdWx0aW5nIGxpc3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJhdGVkIGZy b20gdGhlIHRyb3ZlIGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0aGUgY2Fs bGVyIGhhcyBhbHJlYWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhjZXB0aW9u IG9mCisgKiBQR1BBX1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFwcHJvcHJp YXRlLgorICovCitzdGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExp c3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xvb2t1cF90 eXBlIHR5cGUsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJvdmVfZW50 cnkgKmVudHJpZXM7CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0eXBl LCAmZW50cmllcywgJm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVzOyAr K2kpCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlEZWZF bGVtICAgICppdGVtOworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1hdGNo ZWQsIGNoZWNrIHdoZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBsYW4g d291bGQgcHJvZHVjZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQorCQkg KiBhcyBmYWlsZWQuCisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFUQ0hf RlVMTCkgIT0gMCAmJgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCWVu dHJ5LT5mbGFncyB8PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0ocGdw YV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJbnRl Z2VyKGVudHJ5LT5mbGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7CisJ fQorCisJcmV0dXJuIGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8q CisgKiBGYXN0IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4gUlRJIGFu ZCBwbGFuIG5hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9oYXNoX2tl eShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlpbnQJ CQlzcF9sZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9IGtleS5y dGk7CisJZmFzdGhhc2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBiZSBOVUxM ICovCisJaWYgKGtleS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwllbHNlCisJ CXNwX2xlbiA9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKwor CS8qIGhhc2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0 d2VhayAqLworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworI2Vu ZGlmCisKKy8qCisgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVs YXRpb24gZm9yIGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf cmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJIFJlbE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJcGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKwlw Z3BhX2lkZW50aWZpZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9vbAkJZm91 bmQ7CisKKwlrZXkucnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMpOworCWtl eS5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJf YnlfcnRpKHJvb3QsIGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZp ZXJfc3RyaW5nKCZyaWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBzLT5yaV9j aGVja19oYXNoLCBrZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAoY2hlY2st PnJpZF9zdHJpbmcsIHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5nID0gcmlk X3N0cmluZzsKKyNlbmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFuZ2UgdGFi bGUgaWRlbnRpZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICogcGxhbm5p bmcgbWF0Y2ggdGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4uCisgKi8K K3N0YXRpYyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRl ICpwcHMsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNrX2l0ZXJh dG9yIGl0OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRlbnRpZmll cnMgZnJvbSB0aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMgPSBwZ3Bh X2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8qIEl0ZXJh dGUgb3ZlciBpZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2UgY2FuIGNv bXBhcmUuICovCisJcGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFz aCwgJml0KTsKKwl3aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBwcy0+cmlf Y2hlY2tfaGFzaCwgJml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJ Y29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8qCisJCSAq IElmIHRoZXJlJ3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5LCB0aGVu IHRoZQorCQkgKiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2ggdGhlIFN1 YlBsYW5SVEluZm8gbGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICovCisJCWlm IChjaGVjay0+a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3Vi UGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIElmIHJ0aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJhbmdlIHRh YmxlCisJCQkJICogd2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRvIHRoZSBm aW5hbCByYW5nZQorCQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JFTEFUSU9O IGVudHJpZXMgYW5kCisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJlIG9uY2Ug UlRFX1JFTEFUSU9OIGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVyIGFkZF9y dGVzX3RvX2ZsYXRfcnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBmaXhlZCBy dG9mZnNldCB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQgZHVyaW5n IHBsYW5uaW5nIHRvIGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJCQkgKiBp biB0aGUgZmluYWwgcnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBsZXggbG9n aWMsIHdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJlbWVtYmVy aW5nIHRoZSB3aG9sZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJCQkgKiBk dXJpbmcgcGxhbm5pbmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhhdmUgYmVl bgorCQkJCSAqIGNvcGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcgdGhlbSB1 cC4gQnV0IGl0CisJCQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVuZGVhdm9y IGZvciByaWdodCBub3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJxdWVyaWVz IHdvbid0IGFwcGVhciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0IGluIHRo ZSByYW5nZSB0YWJsZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJhdGUgbm9y IGFjY2VwdCBhZHZpY2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjaGVjay0+ a2V5LnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0aW5mby0+ ZHVtbXkpCisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCUFz c2VydChydG9mZnNldCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qCisJ CQkgKiBJdCdzIG5vdCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5hbWU6IHRo YXQganVzdAorCQkJICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0aGlzIG5h bWUgYnV0IGl0IGVuZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5kIHNvIHdh c24ndCBpbmNsdWRlZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAqLworCQkJ aWYgKHJ0b2Zmc2V0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBjaGVj ay0+a2V5LnJ0aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxlCisJ CSAqIGZsYXR0ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZzZXQg dG8gZ2V0IHRoZQorCQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNoZWNrLT5r ZXkucnRpICsgcnRvZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChwc3Rt dC0+cnRhYmxlKSk7CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21wdXRlIG5v dyBtYXRjaGVzIHRoZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50 aWZpZXJfc3RyaW5nKCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNzZXJ0KHN0 cmNtcChyaWRfc3RyaW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2VuZGlmCit9 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uN2Q0MGI5MTBiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5oCisgKgkgIHBsYW5uZXIgaG9va3MKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1BMQU5ORVJfSAorI2Rl ZmluZSBQR1BBX1BMQU5ORVJfSAorCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9o b29rcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGJkN2M5OWU0YzIKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEsMjc4 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uYworICoJICBhbmFseXNp cyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAi cGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRl ICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKK3N0YXRpYyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9zY2Fu KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkg cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMs CisJCQkJCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CisKKworc3RhdGljIEJpdG1hcHNl dCAqZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxl KTsKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxp ZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBncGFfc2NhbiBvYmplY3QgZm9y IGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2VyCisgKiBjb250ZXh0IGFzIGFw cG9wcmlhdGUuICBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBzY2FuLCBhbHNv CisgKiBidWlsZCBwZ3BhX3NjYW4gZm9yIGFueSBzY2FucyB0aGF0IHdlcmUgY29uc29saWRhdGVk IGludG8gdGhpcyBvbmUgYnkKKyAqIEFwcGVuZC9NZXJnZUFwcGVuZCBwdWxsLXVwLgorICoKKyAq IElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBFbGlkZWROb2RlIGZvciB0aGlzIHBsYW4gbm9kZSwg cGFzcyB0aGUgdXBwZXJtb3N0CisgKiBvbmUgYXMgZWxpZGVkX25vZGUsIGVsc2UgcGFzcyBOVUxM LgorICoKKyAqIFNldCB0aGUgJ2JlbmVhdGhfYW55X2dhdGhlcicgbm9kZSBpZiB3ZSBhcmUgdW5k ZXJuZWF0aCBhIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogU2V0IHRo ZSAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUgb2YgYSBqb2luIHBy b2JsZW0gYW5kCisgKiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4gKgorcGdwYV9idWls ZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJ CUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLCBi b29sIHdpdGhpbl9qb2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisJaW50 CQkJcnRpID0gLTE7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBOSUw7CisK KwlpZiAoZWxpZGVkX25vZGUgIT0gTlVMTCkKKwl7CisJCU5vZGVUYWcJCWVsaWRlZF90eXBlID0g ZWxpZGVkX25vZGUtPmVsaWRlZF90eXBlOworCisJCS8qCisJCSAqIElmIHNldHJlZnMgcHJvY2Vz c2luZyBlbGlkZWQgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgdGhhdCBoYWQKKwkJICog b25seSBvbmUgc3Vydml2aW5nIGNoaWxkLCB0aGVuIHRoaXMgaXMgYSBwYXJ0aXRpb253aXNlICJz Y2FuIiAtLQorCQkgKiB3aGljaCBtYXkgcmVhbGx5IGJlIGEgcGFydGl0aW9ud2lzZSBqb2luLCBi dXQgdGhlcmUncyBubyBuZWVkIHRvCisJCSAqIGRpc3Rpbmd1aXNoLgorCQkgKgorCQkgKiBJZiBp dCdzIGEgdHJpdmlhbCBTdWJxdWVyeVNjYW4gdGhhdCB3YXMgZWxpZGVkLCB0aGVuIHRoaXMgaXMg YW4KKwkJICogIm9yZGluYXJ5IiBzY2FuIGkuZS4gb25lIGZvciB3aGljaCB3ZSBuZWVkIHRvIGdl bmVyYXRlIGFkdmljZQorCQkgKiBiZWNhdXNlIHRoZSBwbGFubmVyIGhhcyBub3QgbWFkZSBhbnkg bWVhbmluZ2Z1bCBjaG9pY2UuCisJCSAqLworCQlyZWxpZHMgPSBlbGlkZWRfbm9kZS0+cmVsaWRz OworCQlpZiAoZWxpZGVkX3R5cGUgPT0gVF9BcHBlbmQgfHwgZWxpZGVkX3R5cGUgPT0gVF9NZXJn ZUFwcGVuZCkKKwkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVsc2UK KwkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8qIEpvaW4gUlRJcyBjYW4g YmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRz ID0gZmlsdGVyX291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJfQorCWVsc2UgaWYgKChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwl7CisJ CXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCisJCXN3aXRjaCAobm9kZVRhZyhw bGFuKSkKKwkJeworCQkJY2FzZSBUX1NlcVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5f U0VROworCQkJCWJyZWFrOworCQkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQkJCXN0cmF0ZWd5 ID0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4U2Nh bjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWDsKKwkJCQlicmVhazsKKwkJCWNhc2Ug VF9JbmRleE9ubHlTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYX09OTFk7CisJ CQkJYnJlYWs7CisJCQljYXNlIFRfVGlkU2NhbjoKKwkJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJ CQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fVElEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwor CQkJCS8qCisJCQkJICogVGhpcyBjYXNlIGluY2x1ZGVzIGEgRm9yZWlnblNjYW4gdGFyZ2V0aW5n IGEgc2luZ2xlCisJCQkJICogcmVsYXRpb247IG5vIG90aGVyIHN0cmF0ZWd5IGlzIHBvc3NpYmxl IGluIHRoYXQgY2FzZSwgYnV0CisJCQkJICogc2VlIGJlbG93LCB3aGVyZSB0aGluZ3MgYXJlIGRp ZmZlcmVudCBpbiBtdWx0aS1yZWxhdGlvbgorCQkJCSAqIGNhc2VzLgorCQkJCSAqLworCQkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2Ug aWYgKChyZWxpZHMgPSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXN3aXRjaCAo bm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCisJCQkJLyoKKwkJ CQkgKiBJZiBtdWx0aXBsZSByZWxhdGlvbnMgYXJlIGJlaW5nIHRhcmdldGVkIGJ5IGEgc2luZ2xl CisJCQkJICogZm9yZWlnbiBzY2FuLCB0aGVuIHRoZSBmb3JlaWduIGpvaW4gaGFzIGJlZW4gcHVz aGVkIHRvIHRoZQorCQkJCSAqIHJlbW90ZSBzaWRlLCBhbmQgd2Ugd2FudCB0aGF0IHRvIGJlIHJl ZmxlY3RlZCBpbiB0aGUKKwkJCQkgKiBnZW5lcmF0ZWQgYWR2aWNlLgorCQkJCSAqLworCQkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX0ZPUkVJR047CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQXBwZW5k OgorCisJCQkJLyoKKwkJCQkgKiBBcHBlbmQgbm9kZXMgY2FuIHJlcHJlc2VudCBwYXJ0aXRpb253 aXNlIHNjYW5zIG9mIGEgYQorCQkJCSAqIHJlbGF0aW9uLCBidXQgd2hlbiB0aGV5IGltcGxlbWVu dCBhIHNldCBvcGVyYXRpb24sIHRoZXkgYXJlCisJCQkJICoganVzdCBvcmRpbmFyeSBzY2Fucy4K KwkJCQkgKi8KKwkJCQlpZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+ cHN0bXQtPnJ0YWJsZSkKKwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBH UEFfU0NBTl9QQVJUSVRJT05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1ND QU5fT1JESU5BUlk7CisJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKEFwcGVu ZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7CisJCQljYXNl IFRfTWVyZ2VBcHBlbmQ6CisJCQkJLyogU29tZSBsb2dpYyBoZXJlIGFzIGZvciBBcHBlbmQsIGFi b3ZlLiAqLworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5w c3RtdC0+cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NB Tl9PUkRJTkFSWTsKKwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoTWVyZ2VB cHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwkJCQlicmVhazsK KwkJfQorCisKKwkJLyogSm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVy IHJlZmVycyB0byB0aGVtLiAqLworCQlyZWxpZHMgPSBmaWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJl bGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMg YW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgaW50byB3aGljaCBzdWJvcmRpbmF0ZSBBcHBl bmQKKwkgKiBvciBNZXJnZUFwcGVuZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFjaCBvZiB0aG9zZSBt ZXJnZWQgcGF0aHMgaXMKKwkgKiBlZmZlY3RpdmVseSBhbm90aGVyIHNjYW4gZm9yIHdoaWNoIHdl IG5lZWQgdG8gYWNjb3VudC4KKwkgKi8KKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBjaGlsZF9y ZWxpZHMsIGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKQorCXsKKwkJQml0bWFwc2V0ICAqY2hpbGRf bm9uam9pbl9yZWxpZHM7CisKKwkJY2hpbGRfbm9uam9pbl9yZWxpZHMgPSBmaWx0ZXJfb3V0X2pv aW5fcmVsaWRzKGNoaWxkX3JlbGlkcywKKwkJCQkJCQkJCQkJCQkgIHdhbGtlci0+cHN0bXQtPnJ0 YWJsZSk7CisJCSh2b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LAor CQkJCQkJCSAgY2hpbGRfbm9uam9pbl9yZWxpZHMsCisJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRo ZXIpOworCX0KKworCS8qCisJICogSWYgdGhpcyBwbGFuIG5vZGUgaGFzIG5vIGFzc29jaWF0ZWQg UlRJcywgaXQncyBub3QgYSBzY2FuLiBXaGVuIHRoZQorCSAqICd3aXRoaW5fam9pbl9wcm9ibGVt JyBmbGFnIGlzIHNldCwgdGhhdCdzIHVuZXhwZWN0ZWQsIHNvIHRocm93IGFuCisJICogZXJyb3Is IGVsc2UgcmV0dXJuIHF1aWV0bHkuCisJICovCisJaWYgKHJlbGlkcyA9PSBOVUxMKQorCXsKKwkJ aWYgKHdpdGhpbl9qb2luX3Byb2JsZW0pCisJCQllbG9nKEVSUk9SLCAicGxhbiBub2RlIGhhcyBu byBSVElzOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlyZXR1cm4gcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwgcmVsaWRzLCBi ZW5lYXRoX2FueV9nYXRoZXIpOworfQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIHBncGFfc2Nh biBvYmplY3QgYW5kIHVwZGF0ZSB0aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0LgorICovCitz dGF0aWMgcGdwYV9zY2FuICoKK3BncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCSAgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQorewor CXBncGFfc2NhbiAgKnNjYW47CisKKwkvKiBDcmVhdGUgdGhlIHNjYW4gb2JqZWN0LiAqLworCXNj YW4gPSBwYWxsb2Moc2l6ZW9mKHBncGFfc2NhbikpOworCXNjYW4tPnBsYW4gPSBwbGFuOworCXNj YW4tPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisJc2Nhbi0+cmVsaWRzID0gcmVsaWRzOworCXNjYW4t PmJlbmVhdGhfYW55X2dhdGhlciA9IGJlbmVhdGhfYW55X2dhdGhlcjsKKworCS8qIEFkZCBpdCB0 byB0aGUgYXBwcm9wcmlhdGUgbGlzdC4gKi8KKwl3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5 XSA9IGxhcHBlbmQod2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNj YW4pOworCisJLyoKKwkgKiBXZSBpbnRlbmQgdG8gZW1pdCBOT19HQVRIRVIoKSBhZHZpY2UgZm9y IGVhY2ggc2NhbiB0aGF0IGRvZXNuJ3QgYXBwZWFyCisJICogYmVuZWF0aCBhIEdhdGhlciBvciBH YXRoZXIgTWVyZ2Ugbm9kZSwgYnV0IHdlIG5lZWQgbm90IGRvIHRoaXMgZm9yCisJICogcGFydGl0 aW9ud2lzZSBzY2FucywgYmVjYXVzZSBlbWl0dGluZyBOT19HQVRIRVIoKSBmb3IgdGhlIGNoaWxk IHNjYW5zCisJICogc3VmZmljZXMuCisJICovCisJaWYgKCFzY2FuLT5iZW5lYXRoX2FueV9nYXRo ZXIgJiYgc2Nhbi0+c3RyYXRlZ3kgIT0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UpCisJCXdhbGtl ci0+bm9fZ2F0aGVyX3NjYW5zID0gYm1zX2FkZF9tZW1iZXJzKHdhbGtlci0+bm9fZ2F0aGVyX3Nj YW5zLAorCQkJCQkJCQkJCQkJICBzY2FuLT5yZWxpZHMpOworCisJcmV0dXJuIHNjYW47Cit9CisK Ky8qCisgKiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBydGVraW5kIG9mIGEgc2V0IG9mIHJlbGlkcy4K KyAqLworc3RhdGljIFJURUtpbmQKK3VuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpy ZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9 IHRydWU7CisJUlRFS2luZAkJcnRla2luZDsKKworCUFzc2VydChyZWxpZHMgIT0gTlVMTCk7CisK Kwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJewor CQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0 ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJ eworCQkJcnRla2luZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKwkJ ZWxzZSBpZiAocnRla2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJCQllbG9nKEVSUk9SLCAicnRla2lu ZCBtaXNtYXRjaDogJWQgdnMuICVkIiwKKwkJCQkgcnRla2luZCwgcnRlLT5ydGVraW5kKTsKKwl9 CisKKwlpZiAoZmlyc3QpCisJCWVsb2coRVJST1IsICJubyBub24tUlRFX0pPSU4gUlRFcyBmb3Vu ZCIpOworCisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBuZXcgQml0 bWFwc2V0IGNvbnRhaW5pbmcgbm9uLVJURV9KT0lOIG1lbWJlcnMgb2YgJ3JlbGlkcycuCisgKi8K K3N0YXRpYyBCaXRtYXBzZXQgKgorZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJl bGlkcywgTGlzdCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJl c3VsdCA9IE5VTEw7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0 aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJs ZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19h ZGRfbWVtYmVyKHJlc3VsdCwgcnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjkwYTA4YjQxYzViCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uaApAQCAtMCwwICsxLDg2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX3NjYW4uaAorICoJICBhbmFseXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgor ICogRm9yIHB1cnBvc2VzIG9mIHRoaXMgbW9kdWxlLCBhICJzY2FuIiBpbmNsdWRlcyAoMSkgc2lu Z2xlIHBsYW4gbm9kZXMgdGhhdAorICogc2NhbiBtdWx0aXBsZSBSVElzLCBzdWNoIGFzIGEgZGVn ZW5lcmF0ZSBSZXN1bHQgbm9kZSB0aGF0IHJlcGxhY2VzIHdoYXQKKyAqIHdvdWxkIG90aGVyd2lz ZSBoYXZlIGJlZW4gYSBqb2luLCBhbmQgKDIpIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMK KyAqIGltcGxlbWVudGluZyBhIHBhcnRpdGlvbndpc2Ugc2NhbiBvciBhIHBhcnRpdGlvbndpc2Ug am9pbi4gU2FpZAorICogZGlmZmVyZW50bHksIHNjYW5zIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSBq b2luIHRyZWUgZm9yIGEgc2luZ2xlIGpvaW4KKyAqIHByb2JsZW0uCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9TQ0FOX0gKKyNkZWZpbmUgUEdQQV9TQ0FOX0gKKwor I2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0OworCisvKgorICogU2NhbiBz dHJhdGVnaWVzLgorICoKKyAqIFBHUEFfU0NBTl9PUkRJTkFSWSBpcyBhbnkgc2NhbiBzdHJhdGVn eSB0aGF0IGlzbid0IGludGVyZXN0aW5nIHRvIHVzCisgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIG1l YW5pbmdmdWwgcGxhbm5lciBkZWNpc2lvbiBpbnZvbHZlZC4gRm9yIGV4YW1wbGUsCisgKiB0aGUg b25seSB3YXkgdG8gc2NhbiBhIHN1YnF1ZXJ5IGlzIGEgU3VicXVlcnlTY2FuLCBhbmQgdGhlIG9u bHkgd2F5IHRvCisgKiBzY2FuIGEgVkFMVUVTIGNvbnN0cnVjdCBpcyBhIFZhbHVlc1NjYW4uIFdl IG5lZWQgbm90IGNhcmUgZXhhY3RseSB3aGljaAorICogdHlwZSBvZiBwbGFubmVyIG5vZGUgd2Fz IHVzZWQgaW4gc3VjaCBjYXNlcywgYmVjYXVzZSB0aGUgc2FtZSB0aGluZyB3aWxsCisgKiBoYXBw ZW4gd2hlbiByZXBsYW5uaW5nLgorICoKKyAqIFBHUEFfU0NBTl9PUkRJTkFSWSBhbHNvIGluY2x1 ZGVzIFJlc3VsdCBub2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc2NhbnMKKyAqIG9yIGV2ZW4gam9p bnMgdGhhdCBhcmUgcHJvdmVkIGVtcHR5LiBXZSBkb24ndCBrbm93IHdoZXRoZXIgb3Igbm90IHRo ZSBzY2FuCisgKiBvciBqb2luIHdpbGwgc3RpbGwgYmUgcHJvdmFibHkgZW1wdHkgYXQgcmVwbGFu bmluZyB0aW1lLCBidXQgaWYgaXQgaXMsCisgKiB0aGVuIG5vIHNjYW4tdHlwZSBhZHZpY2UgaXMg bmVlZGVkLCBhbmQgaWYgaXQncyBub3QsIHdlIGNhbid0IHJlY29tbWVuZAorICogYSBzY2FuIHR5 cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGxhbi4KKyAqCisgKiBQR1BBX1NDQU5fUEFSVElUSU9O V0lTRSBhbHNvIGx1bXBzIHRvZ2V0aGVyIHNjYW5zIGFuZCBqb2luczogdGhpcyBjYW4KKyAqIGJl IGVpdGhlciBhIHBhcnRpdGlvbndpc2Ugc2NhbiBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIG9yIGEg cGFydGl0aW9ud2lzZQorICogam9pbiBiZXR3ZWVuIHNldmVyYWwgcGFydGl0aW9uZWQgdGFibGVz LiBOb3RlIHRoYXQgYWxsIGRlY2lzaW9ucyBhYm91dAorICogd2hldGhlciBvciBub3QgdG8gdXNl IHBhcnRpdGlvbndpc2Ugam9pbiBhcmUgbWVhbmluZ2Z1bDogbm8gbWF0dGVyIHdoYXQKKyAqIHdl IGRlY2lkZWQgdGhpcyB0aW1lLCB3ZSBjb3VsZCBkbyBtb3JlIG9yIGZld2VyIHRoaW5ncyBwYXJ0 aXRpb253aXNlIHRoZQorICogbmV4dCB0aW1lLgorICoKKyAqIFBHUEFfU0NBTl9GT1JFSUdOIGlz IG9ubHkgdXNlZCB3aGVuIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpbnZvbHZlZDsK KyAqIGEgc2luZ2xlLXRhYmxlIGZvcmVpZ24gc2NhbiBpcyBjbGFzc2lmaWVkIGFzIG9yZGluYXJ5 LCBzaW5jZSB0aGVyZSBpcyBubworICogZGVjaXNpb24gdG8gbWFrZSBpbiB0aGF0IGNhc2UuCisg KgorICogT3RoZXIgc2NhbiBzdHJhdGVnaWVzIG1hcCBvbmUtdG8tb25lIHRvIHBsYW4gbm9kZXMu CisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfU0NBTl9PUkRJTkFSWSA9IDAsCisJUEdQQV9T Q0FOX1NFUSwKKwlQR1BBX1NDQU5fQklUTUFQX0hFQVAsCisJUEdQQV9TQ0FOX0ZPUkVJR04sCisJ UEdQQV9TQ0FOX0lOREVYLAorCVBHUEFfU0NBTl9JTkRFWF9PTkxZLAorCVBHUEFfU0NBTl9QQVJU SVRJT05XSVNFLAorCVBHUEFfU0NBTl9USUQKKwkvKiB1cGRhdGUgTlVNX1BHUEFfU0NBTl9TVFJB VEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9zY2FuX3N0cmF0ZWd5Owor CisjZGVmaW5lIE5VTV9QR1BBX1NDQU5fU1RSQVRFR1kJKChpbnQpIFBHUEFfU0NBTl9USUQgKyAx KQorCisvKgorICogQWxsIG9mIHRoZSBkZXRhaWxzIHdlIG5lZWQgcmVnYXJkaW5nIGEgc2Nhbi4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zY2FuCit7CisJUGxhbgkgICAqcGxhbjsKKwlwZ3Bh X3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJQml0bWFwc2V0ICAqcmVsaWRzOworCWJvb2wJCWJl bmVhdGhfYW55X2dhdGhlcjsKK30gcGdwYV9zY2FuOworCitleHRlcm4gcGdwYV9zY2FuICpwZ3Bh X2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4s CisJCQkJCQkJCSAgRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgYm9vbCBiZW5l YXRoX2FueV9nYXRoZXIsCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5s IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmU3ZDdiYTEzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCkBAIC0wLDAgKzEsMjk5IEBACisl dG9weworLyoKKyAqIFNjYW5uZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChj KSAyMDAwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJub2Rlcy9t aXNjbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvc2NhbnN1cC5oIgorCisjaW5jbHVkZSAicGdw YV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogRXh0cmEgZGF0YSB0 aGF0IHdlIHBhc3MgYXJvdW5kIHdoZW4gZHVyaW5nIHNjYW5uaW5nLgorICoKKyAqICdsaXRidWYn IGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSA8eGQ+IGV4Y2x1c2l2ZSBzdGF0ZSwgd2hpY2ggaGFu ZGxlcworICogZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV95eV9leHRyYV90eXBlCit7CisJU3RyaW5nSW5mb0RhdGEJbGl0YnVmOworfSBwZ3BhX3l5 X2V4dHJhX3R5cGU7CisKK30KKworJXsKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLworCisjZGVmaW5l IFlZX0RFQ0wgXAorCWV4dGVybiBpbnQgcGdwYV95eWxleCh1bmlvbiBZWVNUWVBFICp5eWx2YWxf cGFyYW0sIExpc3QgKipyZXN1bHQsIFwKKwkJCQkJCSAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19w LCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKKy8qIE5vIHJlYXNvbiB0byBjb25zdHJhaW4gYW1vdW50 IG9mIGRhdGEgc2x1cnBlZCAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Nzc3MjE2CisK Ky8qIEF2b2lkIGV4aXQoKSBvbiBmYXRhbCBzY2FubmVyIGVycm9ycyAoYSBiaXQgdWdseSAtLSBz ZWUgeXlfZmF0YWxfZXJyb3IpICovCisjdW5kZWYgZnByaW50ZgorI2RlZmluZSBmcHJpbnRmKGZp bGUsIGZtdCwgbXNnKSAgZnByaW50Zl90b19lcmVwb3J0KGZtdCwgbXNnKQorCitzdGF0aWMgdm9p ZAorZnByaW50Zl90b19lcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqbXNnKQor eworCWVyZXBvcnQoRVJST1IsIChlcnJtc2dfaW50ZXJuYWwoIiVzIiwgbXNnKSkpOworfQorJX0K KworJW9wdGlvbiByZWVudHJhbnQKKyVvcHRpb24gYmlzb24tYnJpZGdlCislb3B0aW9uIDhiaXQK KyVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gbm9kZWZhdWx0Cislb3B0aW9uIG5v aW5wdXQKKyVvcHRpb24gbm91bnB1dAorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiBub3l5YWxs b2MKKyVvcHRpb24gbm95eXJlYWxsb2MKKyVvcHRpb24gbm95eWZyZWUKKyVvcHRpb24gd2Fybgor JW9wdGlvbiBwcmVmaXg9InBncGFfeXkiCislb3B0aW9uIGV4dHJhLXR5cGU9InBncGFfeXlfZXh0 cmFfdHlwZSAqIgorCisvKgorICogV2hhdCBmb2xsb3dzIGlzIGEgc2V2ZXJlbHkgc3RyaXBwZWQt ZG93biB2ZXJzaW9uIG9mIHRoZSBjb3JlIHNjYW5uZXIuIFdlCisgKiBvbmx5IGNhcmUgYWJvdXQg cmVjb2duaXppbmcgaWRlbnRpZmllcnMgd2l0aCBvciB3aXRob3V0IGlkZW50aWZpZXIgcXVvdGlu ZworICogKGkuZS4gZG91YmxlLXF1b3RpbmcpLCBkZWNpbWFsIGludGVnZXJzLCBhbmQgYSBzbWFs bCBoYW5kZnVsIG9mIG90aGVyCisgKiB0aGluZ3MuIEtlZXAgdGhlc2UgcnVsZXMgaW4gc3luYyB3 aXRoIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwuIEFzIGluIHRoYXQKKyAqIGZpbGUsIHdlIHVz ZSBhbiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4YycgZm9yIEMtc3R5bGUgY29tbWVudHMsIGFu ZCBhbgorICogZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGQnIGZvciBkb3VibGUtcXVvdGVkIGlk ZW50aWZpZXJzLgorICovCisleCB4YworJXggeGQKKworaWRlbnRfc3RhcnQJCVtBLVphLXpcMjAw LVwzNzdfXQoraWRlbnRfY29udAkJW0EtWmEtelwyMDAtXDM3N18wLTlcJF0KKworaWRlbnRpZmll cgkJe2lkZW50X3N0YXJ0fXtpZGVudF9jb250fSoKKworZGVjZGlnaXQJCVswLTldCitkZWNpbnRl Z2VyCQl7ZGVjZGlnaXR9KF8/e2RlY2RpZ2l0fSkqCisKK3NwYWNlCQkJWyBcdFxuXHJcZlx2XQor d2hpdGVzcGFjZQkJe3NwYWNlfSsKKworZHF1b3RlCQkJXCIKK3hkc3RhcnQJCQl7ZHF1b3RlfQor eGRzdG9wCQkJe2RxdW90ZX0KK3hkZG91YmxlCQl7ZHF1b3RlfXtkcXVvdGV9Cit4ZGluc2lkZQkJ W14iXSsKKworeGNzdGFydAkJCVwvXCoKK3hjc3RvcAkJCVwqK1wvCit4Y2luc2lkZQkJW14qL10r CisKKyUlCisKK3t3aGl0ZXNwYWNlfQl7IC8qIGlnbm9yZSAqLyB9CisKK3tpZGVudGlmaWVyfQl7 CisJCQkJCWNoYXIgICAqc3RyOworCQkJCQlib29sCWZhaWw7CisJCQkJCXBncGFfYWR2aWNlX3Rh Z190eXBlCXRhZzsKKworCQkJCQkvKgorCQkJCQkgKiBVbmxpa2UgdGhlIGNvcmUgc2Nhbm5lciwg d2UgZG9uJ3QgdHJ1bmNhdGUgaWRlbnRpZmllcnMKKwkJCQkJICogaGVyZS4gVGhlcmUgaXMgbm8g b2J2aW91cyByZWFzb24gdG8gZG8gc28uCisJCQkJCSAqLworCQkJCQlzdHIgPSBkb3duY2FzZV9p ZGVudGlmaWVyKHl5dGV4dCwgeXlsZW5nLCBmYWxzZSwgZmFsc2UpOworCQkJCQl5eWx2YWwtPnN0 ciA9IHN0cjsKKworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCdzIG5vdCBhIHRhZywganVzdCByZXR1 cm4gVE9LX0lERU5UOyBlbHNlLCByZXR1cm4KKwkJCQkJICogYSB0b2tlbiB0eXBlIGJhc2VkIG9u IGhvdyBmdXJ0aGVyIHBhcnNpbmcgc2hvdWxkCisJCQkJCSAqIHByb2NlZWQuCisJCQkJCSAqLwor CQkJCQl0YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoc3RyLCAmZmFpbCk7CisJCQkJCWlmIChm YWlsKQorCQkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFf VEFHX0pPSU5fT1JERVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19KT0lOX09SREVSOworCQkJCQll bHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQ QV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSU5ERVg7CisJCQkJ CWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQkJCQkJcmV0dXJu IFRPS19UQUdfQklUTUFQOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfU0VRX1NDQU4g fHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQ R1BBX1RBR19OT19HQVRIRVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19TSU1QTEU7CisJCQkJCWVs c2UKKwkJCQkJCXJldHVybiBUT0tfVEFHX0dFTkVSSUM7CisJCQkJfQorCit7ZGVjaW50ZWdlcn0J eworCQkJCQljaGFyICAgKmVuZHB0cjsKKworCQkJCQllcnJubyA9IDA7CisJCQkJCXl5bHZhbC0+ aW50ZWdlciA9IHN0cnRvaW50KHl5dGV4dCwgJmVuZHB0ciwgMTApOworCQkJCQlpZiAoKmVuZHB0 ciAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQs IHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkgImludGVnZXIgb3V0IG9m IHJhbmdlIik7CisJCQkJCXJldHVybiBUT0tfSU5URUdFUjsKKwkJCQl9CisKK3t4Y3N0YXJ0fQkJ eworCQkJCQlCRUdJTih4Yyk7CisJCQkJfQorCit7eGRzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGQp OworCQkJCQlyZXNldFN0cmluZ0luZm8oJnl5ZXh0cmEtPmxpdGJ1Zik7CisJCQkJfQorCisifHwi CQkJeyByZXR1cm4gVE9LX09SOyB9CisKKyImJiIJCQl7IHJldHVybiBUT0tfQU5EOyB9CisKKy4J CQkJeyByZXR1cm4geXl0ZXh0WzBdOyB9CisKKzx4Yz57eGNzdG9wfQl7CisJCQkJCUJFR0lOKElO SVRJQUwpOworCQkJCX0KKworPHhjPnt4Y2luc2lkZX0JeworCQkJCQkvKiBkaXNjYXJkIG11bHRp cGxlIGNoYXJhY3RlcnMgd2l0aG91dCBzbGFzaCBvciBhc3RlcmlzayAqLworCQkJCX0KKworPHhj Pi4JCQl7CisJCQkJCS8qCisJCQkJCSAqIERpc2NhcmQgYW55IHNpbmdsZSBjaGFyYWN0ZXIuIGZs ZXggcHJlZmVycyBsb25nZXIKKwkJCQkJICogbWF0Y2hlcywgc28gdGhpcyBydWxlIHdpbGwgbmV2 ZXIgYmUgcGlja2VkIHdoZW4gd2UgY291bGQKKwkJCQkJICogaGF2ZSBtYXRjaGVkIHhjc3RvcC4K KwkJCQkJICoKKwkJCQkJICogTkI6IEF0IHByZXNlbnQsIHdlIGRvbid0IGJvdGhlciB0byBzdXBw b3J0IG5lc3RlZAorCQkJCQkgKiBDLXN0eWxlIGNvbW1lbnRzIGhlcmUsIGJ1dCB0aGlzIGxvZ2lj IGNvdWxkIGJlIGV4dGVuZGVkCisJCQkJCSAqIGlmIHRoYXQgcmVzdHJpY3Rpb24gcG9zZXMgYSBw cm9ibGVtLgorCQkJCQkgKi8KKwkJCQl9CisKKzx4Yz48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElO SVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlz Y2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBjb21tZW50Iik7CisJCQkJfQorCis8eGQ+ e3hkc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBwc3Ry ZHVwKHl5ZXh0cmEtPmxpdGJ1Zi5kYXRhKTsKKwkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQl9 CisKKzx4ZD57eGRkb3VibGV9CXsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnl5ZXh0cmEt PmxpdGJ1ZiwgJyInKTsKKwkJCQl9CisKKzx4ZD57eGRpbnNpZGV9CXsKKwkJCQkJYXBwZW5kQmlu YXJ5U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmLCB5eXRleHQsIHl5bGVuZyk7CisJCQkJfQor Cis8eGQ+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9y KHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1p bmF0ZWQgcXVvdGVkIGlkZW50aWZpZXIiKTsKKwkJCQl9CisKKyUlCisKKy8qIExDT1ZfRVhDTF9T VE9QICovCisKKy8qCisgKiBIYW5kbGVyIGZvciBlcnJvcnMgd2hpbGUgc2Nhbm5pbmcgb3IgcGFy c2luZyBhZHZpY2UuCisgKgorICogYmlzb24gcGFzc2VzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHVz IHZpYSAnbWVzc2FnZScsIGFuZCB0aGUgY29udGV4dCBpcworICogYXZhaWxhYmxlIHZpYSB0aGUg J3l5dGV4dCcgbWFjcm8uIFdlIGFzc2VtYmxlIHRob3NlIHZhbHVlcyBpbnRvIGEgZmluYWwKKyAq IGVycm9yIHRleHQgYW5kIHRoZW4gYXJyYW5nZSB0byBwYXNzIGl0IGJhY2sgdG8gdGhlIGNhbGxl ciBvZiBwZ3BhX3l5cGFyc2UoKQorICogYnkgc3RvcmluZyBpdCBpbnRvICpwYXJzZV9lcnJvcl9t c2dfcC4KKyAqLwordm9pZAorcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJz ZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyLAorCQkJIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpCit7CisJc3RydWN0IHl5Z3V0c190ICp5eWcgPSAoc3RydWN0IHl5Z3V0c190ICopIHl5c2Nh bm5lcjsJLyogbmVlZGVkIGZvciB5eXRleHQKKwkJCQkJCQkJCQkJCQkJCSAqIG1hY3JvICovCisK KworCS8qIHJlcG9ydCBvbmx5IHRoZSBmaXJzdCBlcnJvciBpbiBhIHBhcnNlIG9wZXJhdGlvbiAq LworCWlmICgqcGFyc2VfZXJyb3JfbXNnX3ApCisJCXJldHVybjsKKworCWlmICh5eXRleHRbMF0p CisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRmKCIlcyBhdCBvciBuZWFyIFwiJXNcIiIs IG1lc3NhZ2UsIHl5dGV4dCk7CisJZWxzZQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50 ZigiJXMgYXQgZW5kIG9mIGlucHV0IiwgbWVzc2FnZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXpl IHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3Jl IHBhcnNpbmcgYmVnaW5zLgorICovCit2b2lkCitwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFy ICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKQoreworCXl5c2Nhbl90CXl5c2Nhbm5lcjsKKwlw Z3BhX3l5X2V4dHJhX3R5cGUJKnl5ZXh0ID0gcGFsbG9jMF9vYmplY3QocGdwYV95eV9leHRyYV90 eXBlKTsKKworCWlmICh5eWxleF9pbml0KHl5c2Nhbm5lcnApICE9IDApCisJCWVsb2coRVJST1Is ICJ5eWxleF9pbml0KCkgZmFpbGVkOiAlbSIpOworCisJeXlzY2FubmVyID0gKnl5c2Nhbm5lcnA7 CisKKwlpbml0U3RyaW5nSW5mbygmeXlleHQtPmxpdGJ1Zik7CisJcGdwYV95eXNldF9leHRyYSh5 eWV4dCwgeXlzY2FubmVyKTsKKworCXl5X3NjYW5fc3RyaW5nKHN0ciwgeXlzY2FubmVyKTsKK30K KworCisvKgorICogU2h1dCBkb3duIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNo b3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcGFyc2luZyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZAorcGdw YV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJeXlsZXhfZGVzdHJveSh5 eXNjYW5uZXIpOworfQorCisvKgorICogSW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBtYWtlIGZsZXgg dXNlIHBhbGxvYygpIGluc3RlYWQgb2YgbWFsbG9jKCkuCisgKiBJdCdkIGJlIGJldHRlciB0byBt YWtlIHRoZXNlIHN0YXRpYywgYnV0IGZsZXggaW5zaXN0cyBvdGhlcndpc2UuCisgKi8KKwordm9p ZCAqCit5eWFsbG9jKHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0 dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZCAqCit5eXJlYWxsb2Modm9pZCAqcHRyLCB5eV9z aXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXJldHVybiBy ZXBhbGxvYyhwdHIsIHNpemUpOworCWVsc2UKKwkJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwor dm9pZAoreXlmcmVlKHZvaWQgKnB0ciwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIp CisJCXBmcmVlKHB0cik7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfdHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOTIxMjFmZWIxZAotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCkBAIC0wLDAgKzEsNDkw IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmMKKyAqCSAgQWxsIG9m IHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQor ICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisgKiBUaGlzIG5hbWUg Y29tZXMgZnJvbSB0aGUgRW5nbGlzaCBleHByZXNzaW9uICJ0cm92ZSBvZiBhZHZpY2UiLCB3aGlj aAorICogbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHdpc2RvbS4gVGhpcyBzbGlnaHRseSB1bnVzdWFs IHRlcm0gaXMgY2hvc2VuIHRvCisgKiBhdm9pZCBuYW1pbmcgY29uZnVzaW9uOyBmb3IgZXhhbXBs ZSwgImNvbGxlY3Rpb24gb2YgYWR2aWNlIiB3b3VsZAorICogaW52aXRlIGNvbmZ1c2lvbiB3aXRo IHBncGFfY29sbGVjdG9yLmMuIE5vdGUgdGhhdCwgd2hpbGUgd2UgZG9uJ3Qga25vdworICogd2hl dGhlciB0aGUgcHJvdmlkZWQgYWR2aWNlIGlzIGFjdHVhbGx5IHdpc2UsIGl0J3Mgbm90IG91ciBq b2IgdG8KKyAqIHF1ZXN0aW9uIHRoZSB1c2VyJ3MgY2hvaWNlcy4KKyAqCisgKiBUaGUgZ29hbCBv ZiB0aGlzIG1vZHVsZSBpcyB0byBtYWtlIGl0IGVhc3kgdG8gbG9jYXRlIHRoZSBzcGVjaWZpYwor ICogYml0cyBvZiBhZHZpY2UgdGhhdCBwZXJ0YWluIHRvIGFueSBnaXZlbiBwYXJ0IG9mIGEgcXVl cnksIG9yIHRvCisgKiBkZXRlcm1pbmUgdGhhdCB0aGVyZSBhcmUgbm9uZS4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdw YV90cm92ZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorCisvKgor ICogQW4gYWR2aWNlIHRyb3ZlIGlzIG9yZ2FuaXplZCBpbnRvIGEgc2VyaWVzIG9mICJzbGljZXMi LCBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgdG9waWMg ZS5nLiBzY2FuIG1ldGhvZHMuIEVhY2ggc2xpY2UgY29uc2lzdHMKKyAqIG9mIGFuIGFycmF5IG9m IHRyb3ZlIGVudHJpZXMgcGx1cyBhIGhhc2ggdGFibGUgdGhhdCB3ZSBjYW4gdXNlIHRvIGRldGVy bWluZQorICogd2hpY2ggb25lcyBhcmUgcmVsZXZhbnQgdG8gYSBwYXJ0aWN1bGFyIHBhcnQgb2Yg dGhlIHF1ZXJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3NsaWNlCit7CisJdW5z aWduZWQJbmFsbG9jYXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyaWVzOworCXN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2g7Cit9IHBncGFfdHJv dmVfc2xpY2U7CisKKy8qCisgKiBTY2FuIGFkdmljZSBpcyBzdG9yZWQgaW50byAnc2Nhbic7IGpv aW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdqb2luJzsgYW5kCisgKiBhZHZpY2UgdGhhdCBjYW4g YXBwbHkgdG8gYm90aCBjYXNlcyBpcyBzdG9yZWQgaW50byAncmVsJy4gVGhpcyBsZXRzIGNhbGxl cnMKKyAqIGFzayBqdXN0IGZvciB3aGF0J3MgcmVsZXZhbnQuIFRoZXNlIHNsaWNlcyBjb3JyZXNw b25kIHRvIHRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAqIG9mIHBncGFfdHJvdmVfbG9va3VwX3R5cGUu CisgKi8KK3N0cnVjdCBwZ3BhX3Ryb3ZlCit7CisJcGdwYV90cm92ZV9zbGljZSBqb2luOworCXBn cGFfdHJvdmVfc2xpY2UgcmVsOworCXBncGFfdHJvdmVfc2xpY2Ugc2NhbjsKK307CisKKy8qCisg KiBXZSdyZSBnb2luZyB0byBidWlsZCBhIGhhc2ggdGFibGUgdG8gYWxsb3cgY2xpZW50cyBvZiB0 aGlzIG1vZHVsZSB0byBmaW5kCisgKiByZWxldmFudCBhZHZpY2UgZm9yIGEgZ2l2ZW4gcGFydCBv ZiB0aGUgcXVlcnkgcXVpY2tseS4gSG93ZXZlciwgd2UncmUgZ29pbmcKKyAqIHRvIHVzZSBvbmx5 IHRocmVlIG9mIHRoZSBmaXZlIGtleSBmaWVsZHMgYXMgaGFzaCBrZXlzLiBUaGVyZSBhcmUgdHdv IHJlYXNvbnMKKyAqIGZvciB0aGlzLgorICoKKyAqIEZpcnN0LCBpdCdzIGFsbG93YWJsZSB0byBz ZXQgcGFydGl0aW9uX3NjaGVtYSB0byBOVUxMIHRvIG1hdGNoIGEgcGFydGl0aW9uCisgKiB3aXRo IHRoZSBjb3JyZWN0IG5hbWUgaW4gYW55IHNjaGVtYS4KKyAqCisgKiBTZWNvbmQsIHdlIGV4cGVj dCB0aGUgIm9jY3VycmVuY2UiIGFuZCAicGFydGl0aW9uX3NjaGVtYSIgcG9ydGlvbnMgb2YgdGhl CisgKiByZWxhdGlvbiBpZGVudGlmaWVycyB0byBiZSBtb3N0bHkgdW5pbnRlcmVzdGluZy4gTW9z dCBvZiB0aGUgdGltZSwgdGhlCisgKiBvY2N1cnJlbmNlIGZpZWxkIHdpbGwgYmUgMSBhbmQgdGhl IHBhcnRpdGlvbl9zY2hlbWEgdmFsdWVzIHdpbGwgYWxsIGJlIHRoZQorICogc2FtZS4gRXZlbiB3 aGVuIHRoZXJlIGlzIHNvbWUgdmFyaWF0aW9uLCB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mIGVudHJp ZXMKKyAqIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIGFsbCB0aHJlZSBvZiB0aGVzZSBr ZXkgZmllbGRzIHNob3VsZCBiZQorICogcXVpdGUgc21hbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0 Cit7CisJY29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwljb25zdCBjaGFyICpwYXJ0aXRpb25fbmFt ZTsKKwljb25zdCBjaGFyICpwbGFuX25hbWU7Cit9IHBncGFfdHJvdmVfZW50cnlfa2V5OworCit0 eXBlZGVmIHN0cnVjdAoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGF0 dXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50Owor CitzdGF0aWMgdWludDMyIHBncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRy eV9rZXkga2V5KTsKKworc3RhdGljIGlubGluZSBib29sCitwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBh cmVfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGEsIHBncGFfdHJvdmVfZW50cnlfa2V5IGIpCit7 CisJaWYgKHN0cmNtcChhLmFsaWFzX25hbWUsIGIuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBhcnRpdGlvbl9u YW1lLCBiLnBhcnRpdGlvbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdz X2VxdWFsX29yX2JvdGhfbnVsbChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3Ry b3ZlX2VudHJ5CisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJcGdwYV90cm92ZV9lbnRyeV9lbGVt ZW50CisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV90cm92ZV9lbnRyeV9rZXkKKyNkZWZpbmUg U0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3Ryb3ZlX2Vu dHJ5X2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwodGIsIGEsIGIpCXBncGFfdHJvdmVf ZW50cnlfY29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5l CisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3Np bXBsZWhhc2guaCIKKworc3RhdGljIHZvaWQgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJv dmVfc2xpY2UgKnRzbGljZSk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShw Z3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0 YWcsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitzdGF0aWMgdm9pZCBw Z3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwKKwkJCQkJ CQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCSAgIGludCBpbmRleCk7 CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3Ns aWNlICp0c2xpY2UsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisKKy8qCisg KiBCdWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmcm9tIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMuCisg KgorICogQ2FsbGVyIGNhbiBvYnRhaW4gYSBsaXN0IG9mIGFkdmljZSBpdGVtcyB0byBwYXNzIHRv IHRoaXMgZnVuY3Rpb24gYnkKKyAqIGNhbGxpbmcgcGdwYV9wYXJzZSgpLgorICovCitwZ3BhX3Ry b3ZlICoKK3BncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKQoreworCXBncGFfdHJv dmUgKnRyb3ZlID0gcGFsbG9jX29iamVjdChwZ3BhX3Ryb3ZlKTsKKworCXBncGFfaW5pdF90cm92 ZV9zbGljZSgmdHJvdmUtPmpvaW4pOworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPnJl bCk7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+c2Nhbik7CisKKwlmb3JlYWNoX3B0 cihwZ3BhX2FkdmljZV9pdGVtLCBpdGVtLCBhZHZpY2VfaXRlbXMpCisJeworCQlzd2l0Y2ggKGl0 ZW0tPnRhZykKKwkJeworCQkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJCXsKKwkJCQkJ cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogRm9yIG1vc3Qg YWR2aWNlIHR5cGVzLCBlYWNoIGVsZW1lbnQgaW4gdGhlIHRvcC1sZXZlbAorCQkJCQkgKiBsaXN0 IGlzIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgaXQncyBtb3N0IGNvbnZlbmllbnQgdG8KKwkJCQkJ ICogcmVnYXJkIHRoZSBlbnRpcmV0eSBvZiBhIEpPSU5fT1JERVIgc3BlY2lmaWNhdGlvbiBhcyBh CisJCQkJCSAqIHNpbmdsZSB0YXJnZXQuIFNpbmNlIGl0IHdhc24ndCByZXByZXNlbnRlZCB0aGF0 IHdheQorCQkJCQkgKiBkdXJpbmcgcGFyc2luZywgYnVpbGQgYSBzdXJyb2dhdGUgb2JqZWN0IG5v dy4KKwkJCQkJICovCisJCQkJCXRhcmdldCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3Rh cmdldCk7CisJCQkJCXRhcmdldC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJ CQkJCXRhcmdldC0+Y2hpbGRyZW4gPSBpdGVtLT50YXJnZXRzOworCisJCQkJCXBncGFfdHJvdmVf YWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQp OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FO OgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lO REVYX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19U SURfU0NBTjoKKworCQkJCS8qCisJCQkJICogU2NhbiBhZHZpY2UuCisJCQkJICovCisJCQkJZm9y ZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJ eworCQkJCQkvKgorCQkJCQkgKiBGb3Igbm93LCBhbGwgb2Ygb3VyIHNjYW4gdHlwZXMgdGFyZ2V0 IHNpbmdsZSByZWxhdGlvbnMsCisJCQkJCSAqIGJ1dCBpbiB0aGUgZnV0dXJlIHRoaXMgbWlnaHQg bm90IGJlIHRydWUsIGUuZy4gYSBjdXN0b20KKwkJCQkJICogc2NhbiBjb3VsZCByZXBsYWNlIGEg am9pbi4KKwkJCQkJICovCisJCQkJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X0lERU5USUZJRVIpOworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnNjYW4s CisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46 CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFf VEFHX01FUkdFX0pPSU5fUExBSU46CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVS SUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9O X1VOSVFVRToKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCisJCQkJLyoKKwkJ CQkgKiBKb2luIHN0cmF0ZWd5IGFkdmljZS4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3Bh X2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFf dHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0 YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05X SVNFOgorCQkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9N RVJHRToKKwkJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCisJCQkJLyoKKwkJCQkgKiBBZHZp Y2UgYWJvdXQgYSBSZWxPcHRJbmZvIHJlbGV2YW50IHRvIGJvdGggc2NhbnMgYW5kIGpvaW5zLgor CQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVt LT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5y ZWwsCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlyZXR1cm4gdHJvdmU7Cit9CisKKy8qCisgKiBTZWFyY2ggYSB0cm92ZSBvZiBh ZHZpY2UgZm9yIHJlbGV2YW50IGVudHJpZXMuCisgKgorICogQWxsIHBhcmFtZXRlcnMgYXJlIGlu cHV0IHBhcmFtZXRlcnMgZXhjZXB0IGZvciAqcmVzdWx0LCB3aGljaCBpcyBhbiBvdXRwdXQKKyAq IHBhcmFtZXRlciB1c2VkIHRvIHJldHVybiByZXN1bHRzIHRvIHRoZSBjYWxsZXIuCisgKi8KK3Zv aWQKK3BncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlIHR5cGUsCisJCQkJICBpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywgcGdw YV90cm92ZV9yZXN1bHQgKnJlc3VsdCkKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisJ Qml0bWFwc2V0ICAqaW5kZXhlczsKKworCUFzc2VydChucmlkcyA+IDApOworCisJaWYgKHR5cGUg PT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVs c2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3Zl LT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5yZWw7CisKKwlpbmRleGVzID0gcGdw YV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNlLCAmcmlkc1swXSk7CisJZm9yIChpbnQgaSA9IDE7 IGkgPCBucmlkczsgKytpKQorCXsKKwkJQml0bWFwc2V0ICAqb3RoZXJfaW5kZXhlczsKKworCQkv KgorCQkgKiBJZiB0aGUgY2FsbGVyIGlzIGFza2luZyBhYm91dCB0d28gcmVsYXRpb25zIHRoYXQg YXJlbid0IHBhcnQgb2YgdGhlCisJCSAqIHNhbWUgc3VicXVlcnksIHRoZXkndmUgbWVzc2VkIHVw LgorCQkgKi8KKwkJQXNzZXJ0KHN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZHNbMF0ucGxh bl9uYW1lLAorCQkJCQkJCQkJCSAgcmlkc1tpXS5wbGFuX25hbWUpKTsKKworCQlvdGhlcl9pbmRl eGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNlLCAmcmlkc1tpXSk7CisJCWluZGV4 ZXMgPSBibXNfdW5pb24oaW5kZXhlcywgb3RoZXJfaW5kZXhlcyk7CisJfQorCisJcmVzdWx0LT5l bnRyaWVzID0gdHNsaWNlLT5lbnRyaWVzOworCXJlc3VsdC0+aW5kZXhlcyA9IGluZGV4ZXM7Cit9 CisKKy8qCisgKiBSZXR1cm4gYWxsIGVudHJpZXMgaW4gYSB0cm92ZSBzbGljZSB0byB0aGUgY2Fs bGVyLgorICoKKyAqIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzIGFyZSBpbnB1dCBhcmd1bWVudHMs IGFuZCB0aGUgcmVtYWluZGVyIGFyZSBvdXRwdXQKKyAqIGFyZ3VtZW50cy4KKyAqLwordm9pZAor cGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlIHR5cGUsCisJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqKmVudHJpZXMsIGludCAqbmVu dHJpZXMpCit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNsaWNlOworCisJaWYgKHR5cGUgPT0gUEdQ QV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYg KHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2lu OworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5yZWw7CisKKwkqZW50cmllcyA9IHRzbGljZS0+ ZW50cmllczsKKwkqbmVudHJpZXMgPSB0c2xpY2UtPm51c2VkOworfQorCisvKgorICogQ29udmVy dCBhIHRyb3ZlIGVudHJ5IHRvIGFuIGl0ZW0gb2YgcGxhbiBhZHZpY2UgdGhhdCB3b3VsZCBwcm9k dWNlIGl0LgorICovCitjaGFyICoKK3BncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcyIsIHBncGFfY3N0cmluZ19hZHZp Y2VfdGFnKGVudHJ5LT50YWcpKTsKKworCS8qIEpPSU5fT1JERVIgdGFncyBhcmUgdHJhbnNmb3Jt ZWQgYnkgcGdwYV9idWlsZF90cm92ZTsgdW5kbyB0aGF0IGhlcmUgKi8KKwlpZiAoZW50cnktPnRh ZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAn KCcpOworCWVsc2UKKwkJQXNzZXJ0KGVudHJ5LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X09SREVSRURfTElTVCk7CisKKwlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KCZidWYsIGVudHJ5 LT50YXJnZXQpOworCisJaWYgKGVudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCkKKwl7CisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJCXBncGFfZm9ybWF0X2luZGV4X3Rh cmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KTsKKwl9CisKKwlpZiAoZW50cnktPnRh ZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAn KScpOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCisvKgorICogU2V0IFBHUEFfVEVfKiBmbGFn cyBvbiBhIHNldCBvZiB0cm92ZSBlbnRyaWVzLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX3NldF9m bGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLCBCaXRtYXBzZXQgKmluZGV4ZXMsIGludCBm bGFncykKK3sKKwlpbnQJCQlpID0gLTE7CisKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo aW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRy aWVzW2ldOworCisJCWVudHJ5LT5mbGFncyB8PSBmbGFnczsKKwl9Cit9CisKKy8qCisgKiBBZGQg YSBuZXcgYWR2aWNlIHRhcmdldCB0byBhbiBleGlzdGluZyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVj dC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVfYWRkX3RvX3NsaWNlKHBncGFfdHJvdmVf c2xpY2UgKnRzbGljZSwKKwkJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCXBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5Owor CisJaWYgKHRzbGljZS0+bnVzZWQgPj0gdHNsaWNlLT5uYWxsb2NhdGVkKQorCXsKKwkJaW50CQkJ bmV3X2FsbG9jYXRlZDsKKworCQluZXdfYWxsb2NhdGVkID0gdHNsaWNlLT5uYWxsb2NhdGVkICog MjsKKwkJdHNsaWNlLT5lbnRyaWVzID0gcmVwYWxsb2NfYXJyYXkodHNsaWNlLT5lbnRyaWVzLCBw Z3BhX3Ryb3ZlX2VudHJ5LAorCQkJCQkJCQkJCSBuZXdfYWxsb2NhdGVkKTsKKwkJdHNsaWNlLT5u YWxsb2NhdGVkID0gbmV3X2FsbG9jYXRlZDsKKwl9CisKKwllbnRyeSA9ICZ0c2xpY2UtPmVudHJp ZXNbdHNsaWNlLT5udXNlZF07CisJZW50cnktPnRhZyA9IHRhZzsKKwllbnRyeS0+dGFyZ2V0ID0g dGFyZ2V0OworCWVudHJ5LT5mbGFncyA9IDA7CisKKwlwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHRz bGljZS0+aGFzaCwgdGFyZ2V0LCB0c2xpY2UtPm51c2VkKTsKKworCXRzbGljZS0+bnVzZWQrKzsK K30KKworLyoKKyAqIFVwZGF0ZSB0aGUgaGFzaCB0YWJsZSBmb3IgYSBuZXdseS1hZGRlZCBhZHZp Y2UgdGFyZ2V0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cm92ZV9hZGRfdG9faGFzaChwZ3Bh X3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJ CQkgICBpbnQgaW5kZXgpCit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCXBncGFfdHJv dmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlib29sCQlmb3VuZDsKKworCS8qIEZvciBub24t aWRlbnRpZmllcnMsIGFkZCBlbnRyaWVzIGZvciBhbGwgZGVzY2VuZGVudHMuICovCisJaWYgKHRh cmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7 CisJCQlwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKGhhc2gsIGNoaWxkX3RhcmdldCwgaW5kZXgpOwor CQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBTYW5pdHkgY2hlY2tzLiAqLworCUFzc2VydCh0YXJn ZXQtPnJpZC5vY2N1cnJlbmNlID4gMCk7CisJQXNzZXJ0KHRhcmdldC0+cmlkLmFsaWFzX25hbWUg IT0gTlVMTCk7CisKKwkvKiBBZGQgYW4gZW50cnkgZm9yIHRoaXMgcmVsYXRpb24gaWRlbnRpZmll ci4gKi8KKwlrZXkuYWxpYXNfbmFtZSA9IHRhcmdldC0+cmlkLmFsaWFzX25hbWU7CisJa2V5LnBh cnRpdGlvbl9uYW1lID0gdGFyZ2V0LT5yaWQucGFydHJlbDsKKwlrZXkucGxhbl9uYW1lID0gdGFy Z2V0LT5yaWQucGxhbl9uYW1lOworCWVsZW1lbnQgPSBwZ3BhX3Ryb3ZlX2VudHJ5X2luc2VydCho YXNoLCBrZXksICZmb3VuZCk7CisJZWxlbWVudC0+aW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGVs ZW1lbnQtPmluZGV4ZXMsIGluZGV4KTsKK30KKworLyoKKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6 ZSBhIG5ldyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf aW5pdF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UpCit7CisJLyoKKwkgKiBJ biBhbiBpZGVhbCB3b3JsZCwgd2UnbGwgbWFrZSB0c2xpY2UtPm5hbGxvY2F0ZWQgYmlnIGVub3Vn aCB0aGF0IHRoZQorCSAqIGFycmF5IGFuZCBoYXNoIHRhYmxlIHdpbGwgYmUgbGFyZ2UgZW5vdWdo IHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZgorCSAqIGFkdmljZSBpdGVtcyBpbiB0aGlzIHRyb3Zl IHNsaWNlLCBidXQgYSBnZW5lcm91cyBkZWZhdWx0IHZhbHVlIGlzIG5vdAorCSAqIGdvb2QgZm9y IHBlcmZvcm1hbmNlLCBiZWNhdXNlIHBncGFfaW5pdF90cm92ZV9zbGljZSgpIGhhcyB0byB6ZXJv IGFuCisJICogYW1vdW50IG9mIG1lbW9yeSBwcm9wb3J0aW9uYWwgdG8gdHNsaWNlLT5uYWxsb2Nh dGVkLiBIZW5jZSwgd2Uga2VlcCB0aGUKKwkgKiBzdGFydGluZyB2YWx1ZSBxdWl0ZSBzbWFsbCwg b24gdGhlIHRoZW9yeSB0aGF0IGFkdmljZSBzdHJpbmdzIHdpbGwKKwkgKiBvZnRlbiBiZSByZWxh dGl2ZWx5IHNob3J0LgorCSAqLworCXRzbGljZS0+bmFsbG9jYXRlZCA9IDE2OworCXRzbGljZS0+ bnVzZWQgPSAwOworCXRzbGljZS0+ZW50cmllcyA9IHBhbGxvY19hcnJheShwZ3BhX3Ryb3ZlX2Vu dHJ5LCB0c2xpY2UtPm5hbGxvY2F0ZWQpOworCXRzbGljZS0+aGFzaCA9IHBncGFfdHJvdmVfZW50 cnlfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCSAgIHRzbGljZS0+bmFs bG9jYXRlZCwgTlVMTCk7Cit9CisKKy8qCisgKiBGYXN0IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5 IGNvbnNpc3Rpbmcgb2YgYWxpYXNfbmFtZSwgcGFydGl0aW9uX25hbWUsCisgKiBhbmQgcGxhbl9u YW1lLgorICovCitzdGF0aWMgdWludDMyCitwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KHBncGFf dHJvdmVfZW50cnlfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlpbnQJCQlzcF9s ZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwkvKiBhbGlhc19uYW1lIG1heSBub3Qg YmUgTlVMTCAqLworCXNwX2xlbiA9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkuYWxp YXNfbmFtZSk7CisKKwkvKiBwYXJ0aXRpb25fbmFtZSBhbmQgcGxhbl9uYW1lLCBob3dldmVyLCBj YW4gYmUgTlVMTCAqLworCWlmIChrZXkucGFydGl0aW9uX25hbWUgIT0gTlVMTCkKKwkJc3BfbGVu ICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGFydGl0aW9uX25hbWUpOworCWlm IChrZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXNwX2xlbiArPSBmYXN0aGFzaF9hY2N1bV9jc3Ry aW5nKCZocywga2V5LnBsYW5fbmFtZSk7CisKKwkvKgorCSAqIGhhc2hmbl91bnN0YWJsZS5oIHJl Y29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2Vhay4gSXQncyBub3QKKwkgKiBjbGVh ciB0byBtZSB3aGF0IHRvIGRvIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdHJpbmdzLCBzbyBmb3Ig bm93IEknbQorCSAqIGp1c3QgdXNpbmcgdGhlIHRvdGFsIG9mIGFsbCBvZiB0aGUgbGVuZ3Rocy4K KwkgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwzMigmaHMsIHNwX2xlbik7Cit9CisKKy8qCisg KiBMb29rIGZvciBtYXRjaGluZyBlbnRyaWVzLgorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK3Bn cGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwgcGdwYV9pZGVu dGlmaWVyICpyaWQpCit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCXBncGFfdHJvdmVf ZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCisJ QXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAxKTsKKworCWtleS5hbGlhc19uYW1lID0gcmlkLT5h bGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHJpZC0+cGFydHJlbDsKKwlrZXkucGxh bl9uYW1lID0gcmlkLT5wbGFuX25hbWU7CisKKwllbGVtZW50ID0gcGdwYV90cm92ZV9lbnRyeV9s b29rdXAodHNsaWNlLT5oYXNoLCBrZXkpOworCisJaWYgKGVsZW1lbnQgIT0gTlVMTCkKKwl7CisJ CWludAkJCWkgPSAtMTsKKworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoZWxlbWVudC0+ aW5kZXhlcywgaSkpID49IDApCisJCXsKKwkJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnRz bGljZS0+ZW50cmllc1tpXTsKKworCQkJLyoKKwkJCSAqIFdlIGtub3cgdGhhdCB0aGlzIHRhcmdl dCBvciBvbmUgb2YgaXRzIGRlc2NlbmRlbnRzIG1hdGNoZXMgdGhlCisJCQkgKiBpZGVudGlmaWVy IG9uIHRoZSB0aHJlZSBrZXkgZmllbGRzIGFib3ZlLCBidXQgd2UgZG9uJ3Qga25vdworCQkJICog d2hpY2ggZGVzY2VuZGVudCBvciB3aGV0aGVyIHRoZSBvY2N1cmVuY2UgYW5kIHNjaGVtYSBhbHNv CisJCQkgKiBtYXRjaC4KKwkJCSAqLworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3Rh cmdldChyaWQsIGVudHJ5LT50YXJnZXQpKQorCQkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJl c3VsdCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfdHJvdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDc5 YzNmNzU3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf dHJvdmUuaApAQCAtMCwwICsxLDExMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdw YV90cm92ZS5oCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdpdmVuIGZvciBhIHBhcnRpY3VsYXIg cXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXplZCBmb3IgY29udmVuaWVudCBhY2Nl c3MuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJv dmUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfVFJPVkVfSAor I2RlZmluZSBQR1BBX1RST1ZFX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisKKyNpbmNsdWRl ICJub2Rlcy9iaXRtYXBzZXQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZSBwZ3BhX3Ry b3ZlOworCisvKgorICogRmxhZ3MgdGhhdCBjYW4gYmUgc2V0IG9uIGEgcGdwYV90cm92ZV9lbnRy eSB0byBpbmRpY2F0ZSB3aGF0IGhhcHBlbmVkIHdoZW4KKyAqIHRyeWluZyB0byBwbGFuIHVzaW5n IGFkdmljZS4KKyAqCisgKiBQR1BBX1RFX01BVENIX1BBUlRJQUwgbWVhbnMgdGhhdCB3ZSBmb3Vu ZCBzb21lIHBhcnQgb2YgdGhlIHF1ZXJ5IHRoYXQgYXQKKyAqIGxlYXN0IHBhcnRpYWxseSBtYXRj aGVkIHRoZSB0YXJnZXQ7IGUuZy4gZ2l2ZW4gSk9JTl9PUkRFUihhIGIpLCB0aGlzIHdvdWxkCisg KiBiZSBzZXQgaWYgd2UgZXZlciBzYXcgYW55IGpvaW5yZWwgaW5jbHVkaW5nIGVpdGhlciAiYSIg b3IgImIiLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfRlVMTCBtZWFucyB0aGF0IHdlIGZvdW5kIGFu IGV4YWN0IG1hdGNoIGZvciB0aGUgdGFyZ2V0OyBlLmcuCisgKiBnaXZlbiBKT0lOX09SREVSKGEg YiksIHRoaXMgd291bGQgYmUgc2V0IGlmIHdlIHNhdyBhIGpvaW5yZWwgY29udGFpbmluZworICog ZXhhY3RseSAiYSIgYW5kICJiIiBhbmQgbm90aGluZyBlbHNlLgorICoKKyAqIFBHUEFfVEVfSU5B UFBMSUNBQkxFIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBkb2Vzbid0IHByb3Blcmx5IGFwcGx5IHRv IHRoZQorICogdGFyZ2V0OyBlLmcuIElOREVYX1NDQU4oZm9vIGJhcl9pZHgpIHdvdWxkIGJlIHNv IG1hcmtlZCBpZiBiYXJfaWR4IGRvZXMgbm90CisgKiBleGlzdCBvbiBmb28uIFRoZSBmYWN0IHRo YXQgdGhpcyBiaXQgaGFzIGJlZW4gc2V0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUKKyAqIGFkdmlj ZSBoYWQgbm8gZWZmZWN0LgorICoKKyAqIFBHUEFfVEVfQ09ORkxJQ1RJTkcgbWVhbnMgdGhhdCBh IGNvbmZsaWN0IHdhcyBkZXRlY3RlZCBiZXR3ZWVuIHdoYXQgdGhpcworICogYWR2aWNlIHdhbnRz IGFuZCB3aGF0IHNvbWUgb3RoZXIgcGxhbiBhZHZpY2Ugd2FudHM7IGUuZy4gSk9JTl9PUkRFUihh IGIpCisgKiB3b3VsZCBjb25mbGljdCB3aXRoIEhBU0hfSk9JTihhKSwgYmVjYXVzZSB0aGUgZm9y bWVyIHJlcXVpcmVzICJhIiB0byBiZSB0aGUKKyAqIG91dGVyIHRhYmxlIHdoaWxlIHRoZSBsYXR0 ZXIgcmVxdWlyZXMgaXQgdG8gYmUgdGhlIGlubmVyIHRhYmxlLgorICoKKyAqIFBHUEFfVEVfRkFJ TEVEIG1lYW5zIHRoYXQgdGhlIHJlc3VsdGluZyBwbGFuIGRpZCBub3QgY29uZm9ybSB0byB0aGUg YWR2aWNlLgorICovCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hfUEFSVElBTAkJMHgwMDAxCisjZGVm aW5lIFBHUEFfVEVfTUFUQ0hfRlVMTAkJCTB4MDAwMgorI2RlZmluZSBQR1BBX1RFX0lOQVBQTElD QUJMRQkJMHgwMDA0CisjZGVmaW5lIFBHUEFfVEVfQ09ORkxJQ1RJTkcJCQkweDAwMDgKKyNkZWZp bmUgUEdQQV9URV9GQUlMRUQJCQkJMHgwMDEwCisKKy8qCisgKiBFYWNoIGVudHJ5IGluIGEgdHJv dmUgb2YgYWR2aWNlIHJlcHJlc2VudHMgdGhlIGFwcGxpY2F0aW9uIG9mIGEgdGFnIHRvCisgKiBh IHNpbmdsZSB0YXJnZXQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfZW50cnkKK3sK KwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWc7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7 CisJaW50CQkJZmxhZ3M7Cit9IHBncGFfdHJvdmVfZW50cnk7CisKKy8qCisgKiBXaGF0IGtpbmQg b2YgaW5mb3JtYXRpb24gZG9lcyB0aGUgY2FsbGVyIHdhbnQgdG8gZmluZCBpbiBhIHRyb3ZlPwor ICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4gbWVhbnMgd2UncmUgbG9va2luZyBmb3Igc2Nh biBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfSk9JTiBtZWFucyB3ZSdyZSBsb29r aW5nIGZvciBqb2luLXJlbGF0ZWQgYWR2aWNlLgorICogVGhpcyBpbmNsdWRlcyBqb2luIG9yZGVy IGFkdmljZSwgam9pbiBtZXRob2QgYWR2aWNlLCBhbmQgc2VtaWpvaW4tdW5pcXVlbmVzcworICog YWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCBtZWFucyB3ZSdyZSBsb29raW5n IGZvciBnZW5lcmFsIGFkdmljZSBhYm91dCB0aGlzCisgKiBhIFJlbE9wdEluZm8gdGhhdCBtYXkg Y29ycmVzcG9uZCB0byBlaXRoZXIgYSBzY2FuIG9yIGEgam9pbi4gVGhpcyBpbmNsdWRlcworICog Z2F0aGVyLXJlbGF0ZWQgYWR2aWNlIGFuZCBwYXJ0aXRpb253aXNlIGFkdmljZS4gTm90ZSB0aGF0 IHBhcnRpdGlvbndpc2UKKyAqIGFkdmljZSBtaWdodCBzZWVtIGxpa2Ugam9pbiBhZHZpY2UsIGJ1 dCB0aGF0J3Mgbm90IGEgaGVscGZ1bCB3YXkgb2Ygdmlld2luZworICogdGhlIG1hdHRlciBiZWNh dXNlICgxKSBwYXJ0aXRpb253aXNlIGFkdmljZSBpcyBhbHNvIHJlbGV2YW50IGF0IHRoZSBzY2Fu CisgKiBsZXZlbCBhbmQgKDIpIG90aGVyIHR5cGVzIG9mIGpvaW4gYWR2aWNlIGFmZmVjdCBvbmx5 IHdoYXQgdG8gZG8gZnJvbQorICogam9pbl9wYXRoX3NldHVwX2hvb2ssIGJ1dCBwYXJ0aXRpb253 aXNlIGFkdmljZSBhZmZlY3RzIHdoYXQgdG8gZG8gaW4KKyAqIGpvaW5yZWxfc2V0dXBfaG9vay4K KyAqLwordHlwZWRlZiBlbnVtIHBncGFfdHJvdmVfbG9va3VwX3R5cGUKK3sKKwlQR1BBX1RST1ZF X0xPT0tVUF9KT0lOLAorCVBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwlQR1BBX1RST1ZFX0xPT0tV UF9TQ0FOCit9IHBncGFfdHJvdmVfbG9va3VwX3R5cGU7CisKKy8qCisgKiBUaGlzIHN0cnVjdCBp cyB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgYSB0cm92ZSBsb29rdXAuIEZvciBlYWNoIG1l bWJlcgorICogb2YgImluZGV4ZXMiLCB0aGUgZW50cnkgYXQgdGhlIGNvcnJlc3BvbmRpbmcgb2Zm c2V0IHdpdGhpbiAiZW50cmllcyIgaXMgb25lCisgKiBvZiB0aGUgcmVzdWx0cy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9yZXN1bHQKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy aWVzOworCUJpdG1hcHNldCAgKmluZGV4ZXM7Cit9IHBncGFfdHJvdmVfcmVzdWx0OworCitleHRl cm4gcGdwYV90cm92ZSAqcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpOworZXh0 ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJICBw Z3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJICBpbnQgbnJpZHMsCisJCQkJCQkJ ICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVz dWx0KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwX2FsbChwZ3BhX3Ryb3ZlICp0cm92 ZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJCSAgcGdw YV90cm92ZV9lbnRyeSAqKmVudHJpZXMsCisJCQkJCQkJCSAgaW50ICpuZW50cmllcyk7CitleHRl cm4gY2hhciAqcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJvdmVfZW50cnkgKmVudHJ5 KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfc2V0X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVu dHJpZXMsCisJCQkJCQkJCSBCaXRtYXBzZXQgKmluZGV4ZXMsIGludCBmbGFncyk7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi43ZTRlMzg4NjAzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtMCwwICsxLDg2MiBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuYworICoJICBQbGFuIHRyZWUgaXRlcmF0aW9u CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNsdWRl ICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3N0YXRp YyB2b2lkIHBncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJ CQkJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCQkgIExp c3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBib29sIGJlbmVhdGhfYW55X2dh dGhlcik7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJIHBncGFfdW5yb2xsZWRf am9pbiAqdWpvaW4pOworCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICpwZ3BhX2FkZF9mZWF0 dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQlwZ3BhX3Fm X3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK3N0YXRpYyB2b2lkIHBncGFf cWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSk7CitzdGF0 aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0 bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcGxhbl9ydGlzKExpc3Qg KmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbik7CisKK3N0YXRpYyBib29sIHBncGFf d2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJ CQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCwKKwkJCQkJCQkJCQkgICBib29sIHRvcGxldmVsKTsKK3N0YXRpYyBib29sIHBncGFfd2Fs a2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAor CQkJCQkJCQkJCQkJICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICBwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJn ZXQgKnRhcmdldCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29s IHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCisJCQkJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSBCaXRtYXBz ZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29s IHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgSW5kZXgg cGdwYV93YWxrZXJfZ2V0X3J0aShJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkgcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlk KTsKKworLyoKKyAqIFRvcC1sZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxhbiB0cmVlIHdhbGsu CisgKgorICogUG9wdWxhdGVzIHdhbGtlciBiYXNlZCBvbiBhIHRyYXZlcnNhbCBvZiB0aGUgUGxh biB0cmVlcyBpbiBwc3RtdC4KKyAqLwordm9pZAorcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUxpc3RDZWxs ICAgKmxjOworCisJLyogSW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0KHdhbGtlciwgMCwgc2l6 ZW9mKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCkpOworCXdhbGtlci0+cHN0bXQgPSBwc3RtdDsK KworCS8qIFdhbGsgdGhlIG1haW4gcGxhbiB0cmVlLiAqLworCXBncGFfd2Fsa19yZWN1cnNpdmVs eSh3YWxrZXIsIHBzdG10LT5wbGFuVHJlZSwgMCwgTlVMTCwgTklMLCBmYWxzZSk7CisKKwkvKiBN YWluIHBsYW4gdHJlZSB3YWxrIHdvbid0IHJlYWNoIHN1YnBsYW5zLCBzbyB3YWxrIHRob3NlLiAq LworCWZvcmVhY2gobGMsIHBzdG10LT5zdWJwbGFucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBs Zmlyc3QobGMpOworCisJCWlmIChwbGFuICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZl bHkod2Fsa2VyLCBwbGFuLCAwLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwl9Cit9CisKKy8qCisgKiBN YWluIHdvcmtob3JzZSBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIElmIHdpdGhpbl9q b2luX3Byb2JsZW0gaXMgdHJ1ZSwgd2UgZW5jb3VudGVyZWQgYSBqb2luIGF0IHNvbWUgaGlnaGVy IGxldmVsCisgKiBvZiB0aGUgdHJlZSB3YWxrIGFuZCBoYXZlbid0IHlldCBkZXNjZW5kZWQgb3V0 IG9mIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0aGF0 IHNhbWUgam9pbiBwcm9ibGVtLiBXZSdyZSBubyBsb25nZXIgaW4gdGhlIHNhbWUKKyAqIGpvaW4g cHJvYmxlbSBpZiAoMSkgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBzdWJxdWVyeSBvciAoMikg d2UgZGVzY2VuZAorICogdGhyb3VnaCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgYmVs b3cgd2hpY2ggYW55IGZ1cnRoZXIgam9pbnMgd291bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ugam9p bnMgcGxhbm5lZCBzZXBhcmF0ZWx5IGZyb20gdGhlIG91dGVyIGpvaW4gcHJvYmxlbS4KKyAqCisg KiBJZiBqb2luX3Vucm9sbGVyICE9IE5VTEwsIHRoZSBqb2luIHVucm9sbGVyIGNvZGUgZXhwZWN0 cyB1cyB0byBmaW5kIGEgam9pbgorICogdGhhdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0aGF0 IG9iamVjdC4gVGhpcyBpbXBsaWVzIHRoYXQgd2UncmUgd2l0aGluIGEKKyAqIGpvaW4gcHJvYmxl bSwgYnV0IHRoZSByZXZlcnNlIGlzIG5vdCB0cnVlOiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBhbGwg dGhlCisgKiBqb2lucyBidXQgYXJlIHN0aWxsIGxvb2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQgaXMg dGhlIGxlYWYgb2YgdGhlIGpvaW4gdHJlZSwKKyAqIGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBOVUxM IGJ1dCB3aXRoaW5fam9pbl9wcm9ibGVtIHdpbGwgYmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVsZW1l bnQgb2YgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGNvcnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBvZiBh ZHZpY2UKKyAqIHRoYXQgbmVlZHMgdG8gZW51bWVyYXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0IGFm ZmVjdHMuIFdlIGFkZCBSVElzIHdlIGZpbmQKKyAqIGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0byBl YWNoIG9mIHRoZXNlIHF1ZXJ5IGZlYXR1cmVzLgorICoKKyAqIElmIGJlbmVhdGhfYW55X2dhdGhl ciA9PSB0cnVlLCBzb21lIGhpZ2hlciBsZXZlbCBvZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91bmQK KyAqIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdw YV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFu ICpwbGFuLAorCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJICBwZ3BhX2pv aW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzLAorCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQoreworCXBncGFfam9pbl91 bnJvbGxlciAqb3V0ZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJcGdwYV9qb2luX3Vucm9sbGVy ICppbm5lcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlib29sCQlqb2luX3Vucm9sbGVyX3RvcGxl dmVsID0gZmFsc2U7CisJTGlzdAkgICAqcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisJ TGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXh0cmFwbGFucyA9IE5JTDsKKwlMaXN0CSAgICpl bGlkZWRfbm9kZXMgPSBOSUw7CisKKwlBc3NlcnQod2l0aGluX2pvaW5fcHJvYmxlbSB8fCBqb2lu X3Vucm9sbGVyID09IE5VTEwpOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9yIEdh dGhlciBNZXJnZSBub2RlLCBkaXJlY3RseSBhZGQgaXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBjdXJy ZW50bHktYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzLgorCSAqCisJICogT3RoZXJ3aXNlLCBjaGVjayB0 aGUgZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGxpc3QgdG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMKKwkg KiBwcmV2aW91c2x5IGlkZW50aWZpZWQgYXMgYSBwbGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0 cmVhdGVkIGFzIGEKKwkgKiBxdWVyeSBmZWF0dXJlLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBj YWxsZXIgYWxzbyBoYXMgYSBjb3B5IHRvIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgc28gd2UKKwkg KiBjYW4ndCBkZXN0cnVjdGl2ZWx5IG1vZGlmeSBpdCB3aXRob3V0IG1ha2luZyBhIGNvcHkuCisJ ICovCisJaWYgKElzQShwbGFuLCBHYXRoZXIpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz ID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBn cGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSLCBwbGFuKSk7CisJCWJlbmVhdGhf YW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2UgaWYgKElzQShwbGFuLCBHYXRoZXJNZXJnZSkp CisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFR Rl9HQVRIRVJfTUVSR0UsIHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9 CisJZWxzZQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgd2Fsa2Vy LT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMpCisJCXsKKwkJCWlmIChxZi0+cGxhbiA9PSBwbGFuKQor CQkJeworCQkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxpc3RfY29weShhY3RpdmVfcXVlcnlf ZmVhdHVyZXMpOworCQkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxhcHBlbmQoYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQkJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQor CQkJCQlsaXN0X2RlbGV0ZV9wdHIod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMsIHBsYW4p OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBGaW5kIGFsbCBlbGlkZWQg bm9kZXMgZm9yIHRoaXMgUGxhbiBub2RlLgorCSAqLworCWZvcmVhY2hfbm9kZShFbGlkZWROb2Rl LCBuLCB3YWxrZXItPnBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVf aWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGVzID0gbGFwcGVuZChlbGlk ZWRfbm9kZXMsIG4pOworCX0KKworCS8qIElmIHdlIGZvdW5kIGFueSBlbGlkZWRfbm9kZXMsIGhh bmRsZSB0aGVtLiAqLworCWlmIChlbGlkZWRfbm9kZXMgIT0gTklMKQorCXsKKwkJaW50CQkJbnVt X2VsaWRlZF9ub2RlcyA9IGxpc3RfbGVuZ3RoKGVsaWRlZF9ub2Rlcyk7CisJCUVsaWRlZE5vZGUg Kmxhc3RfZWxpZGVkX25vZGU7CisKKwkJLyoKKwkJICogUlRJcyBmb3IgdGhlIGZpbmFsIC0tIGFu ZCB0aHVzIGxvZ2ljYWxseSB1cHBlcm1vc3QgLS0gZWxpZGVkIG5vZGUKKwkJICogc2hvdWxkIGJl IGNvbGxlY3RlZCBmb3IgcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24gYnkgdGhlIGNhbGxlci4K KwkJICogSG93ZXZlciwgZWxpZGVkIG5vZGVzIGFjdCBhcyBiYXJyaWVycyB0byBxdWVyeSBmZWF0 dXJlcywgd2hpY2gKKwkJICogbWVhbnMgdGhhdCAoMSkgdGhlIHJlbWFpbmluZyBlbGlkZWQgbm9k ZXMsIGlmIGFueSwgc2hvdWxkIGJlCisJCSAqIGlnbm9yZWQgZm9yIHB1cnBvc2VzIG9mIHF1ZXJ5 IGZlYXR1cmVzIGFuZCAoMikgdGhlIGxpc3Qgb2YgYWN0aXZlCisJCSAqIHF1ZXJ5IGZlYXR1cmVz IHNob3VsZCBiZSByZXNldCB0byBlbXB0eSBzbyB0aGF0IHdlIGRvIG5vdCBhZGQgUlRJcworCQkg KiBmcm9tIHRoZSBwbGFuIG5vZGUgdGhhdCBpcyBsb2dpY2FsbHkgYmVuZWF0aCB0aGUgZWxpZGVk IG5vZGUgdG8gdGhlCisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHBhc3NlZCBkb3duIGZyb20gdGhlIGNh bGxlci4KKwkJICovCisJCWxhc3RfZWxpZGVkX25vZGUgPSBsaXN0X250aChlbGlkZWRfbm9kZXMs IG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlf ZmVhdHVyZXMsIGxhc3RfZWxpZGVkX25vZGUtPnJlbGlkcyk7CisJCWFjdGl2ZV9xdWVyeV9mZWF0 dXJlcyA9IE5JTDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHByb2JsZW0s IHRoZSBqb2luX3Vucm9sbGVyIGlzIHJlc3BvbnNpYmxlCisJCSAqIGZvciBidWlsZGluZyB0aGUg c2NhbiBmb3IgdGhlIGZpbmFsIGVsaWRlZCBub2RlLCBzbyB0aHJvdyBpdCBvdXQuCisJCSAqLwor CQlpZiAod2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVsaWRlZF9ub2RlcyA9IGxpc3RfdHJ1bmNh dGUoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisKKwkJLyogQnVpbGQgc2Nh bnMgZm9yIGFsbCAob3IgdGhlIHJlbWFpbmluZykgZWxpZGVkIG5vZGVzLiAqLworCQlmb3JlYWNo X25vZGUoRWxpZGVkTm9kZSwgZWxpZGVkX25vZGUsIGVsaWRlZF9ub2RlcykKKwkJeworCQkJKHZv aWQpIHBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHBsYW4sIGVsaWRlZF9ub2RlLAorCQkJCQkJCQkg ICBiZW5lYXRoX2FueV9nYXRoZXIsIHdpdGhpbl9qb2luX3Byb2JsZW0pOworCQl9CisKKwkJLyoK KwkJICogSWYgdGhlcmUgd2VyZSBhbnkgZWxpZGVkIG5vZGVzLCB0aGVuIGV2ZXJ5dGhpbmcgYmVu ZWF0aCB0aG9zZSBub2RlcworCQkgKiBpcyBub3QgcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2Js ZW0uCisJCSAqCisJCSAqIEluIG1vcmUgZGV0YWlsLCBpZiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQgd2FzIGVsaWRlZCwgdGhlbiBhCisJCSAqIHBhcnRpdGlvbndpc2Ugam9pbiB3YXMgY2hvc2Vu IGFuZCBvbmx5IGEgc2luZ2xlIGNoaWxkIHN1cnZpdmVkOyBpZgorCQkgKiBhIFN1YnF1ZXJ5U2Nh biB3YXMgZWxpZGVkLCB0aGUgc3VicXVlcnkgd2FzIHBsYW5uZWQgd2l0aG91dAorCQkgKiBmbGF0 dGVuaW5nIGl0IGludG8gdGhlIHBhcmVudC4KKwkJICovCisJCXdpdGhpbl9qb2luX3Byb2JsZW0g PSBmYWxzZTsKKwkJam9pbl91bnJvbGxlciA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdy ZSB3aXRoaW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2luIHVucm9sbGVyIGlzIHJlc3BvbnNpYmxl IGZvcgorCSAqIGJ1aWxkaW5nIGFueSByZXF1aXJlZCBzY2FuIGZvciB0aGlzIG5vZGUuIElmIG5v dCwgd2UgZG8gaXQgaGVyZS4KKwkgKi8KKwlpZiAoIXdpdGhpbl9qb2luX3Byb2JsZW0pCisJCSh2 b2lkKSBwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBOVUxMLCBiZW5lYXRoX2FueV9nYXRo ZXIsIGZhbHNlKTsKKworCS8qCisJICogSWYgdGhpcyBqb2luIG5lZWRzIHRvIHVucm9sbGVkIGJ1 dCB0aGVyZSdzIG5vIGpvaW4gdW5yb2xsZXIgYWxyZWFkeQorCSAqIGF2YWlsYWJsZSwgY3JlYXRl IG9uZS4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihw bGFuKSkKKwl7CisJCWpvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7 CisJCWpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwgPSB0cnVlOworCQl3aXRoaW5fam9pbl9wcm9ibGVt ID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBpcyB0byBiZSB1bnJvbGxlZCwg cGdwYV91bnJvbGxfam9pbigpIHdpbGwgcmV0dXJuIHRoZSBqb2luCisJICogdW5yb2xsZXIgb2Jq ZWN0IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBkb3duIHdoZW4gd2UgcmVjdXJzZSBpbnRvIHRoZQor CSAqIG91dGVyIGFuZCBpbm5lciBzaWRlcyBvZiB0aGUgcGxhbi4KKwkgKi8KKwlpZiAoam9pbl91 bnJvbGxlciAhPSBOVUxMKQorCQlwZ3BhX3Vucm9sbF9qb2luKHdhbGtlciwgcGxhbiwgYmVuZWF0 aF9hbnlfZ2F0aGVyLCBqb2luX3Vucm9sbGVyLAorCQkJCQkJICZvdXRlcl9qb2luX3Vucm9sbGVy LCAmaW5uZXJfam9pbl91bnJvbGxlcik7CisKKwkvKiBBZGQgUlRJcyBmcm9tIHRoZSBwbGFuIG5v ZGUgdG8gYWxsIGFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4gKi8KKwlwZ3BhX3FmX2FkZF9wbGFuX3J0 aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuKTsKKworCS8qCisJICogUmVjdXJzZSBpbnRv IHRoZSBvdXRlciBhbmQgaW5uZXIgc3VidHJlZXMuCisJICoKKwkgKiBBcyBhbiBleGNlcHRpb24s IGlmIHRoaXMgaXMgYSBGb3JlaWduU2NhbiwgZG9uJ3QgcmVjdXJzZS4gcG9zdGdyZXNfZmR3CisJ ICogc29tZXRpbWVzIHN0b3JlcyBhbiBFUFEgcmVjaGVjayBwbGFuIGluIHBsYW4tPmxlZnRyZWUs IGJ1dCB0aGF0J3MgZ29pbmcKKwkgKiB0byBtZW50aW9uIHRoZSBzYW1lIHNldCBvZiByZWxhdGlv bnMgYXMgdGhlIEZvcmVpZ25TY2FuIGl0c2VsZiwgYW5kIHdlCisJICogaGF2ZSBubyB3YXkgdG8g ZW1pdCBhZHZpY2UgdGFyZ2V0aW5nIHRoZSBFUFEgY2FzZSB2cy4gdGhlIG5vbi1FUFEgY2FzZS4K KwkgKiBNb3Jlb3ZlciwgaXQncyBub3QgZW50aXJlbHkgY2xlYXIgd2hhdCBvdGhlciBGRFdzIG1p Z2h0IGRvIHdpdGggdGhlCisJICogbGVmdCBhbmQgcmlnaHQgc3VidHJlZXMuIE1heWJlIHNvbWUg YmV0dGVyIGhhbmRsaW5nIGlzIG5lZWRlZCBoZXJlLCBidXQKKwkgKiBmb3Igbm93LCB3ZSBqdXN0 IHB1bnQuCisJICovCisJaWYgKCFJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCXsKKwkJaWYgKHBs YW4tPmxlZnR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBw bGFuLT5sZWZ0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBvdXRlcl9qb2lu X3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlf Z2F0aGVyKTsKKwkJaWYgKHBsYW4tPnJpZ2h0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3Jl Y3Vyc2l2ZWx5KHdhbGtlciwgcGxhbi0+cmlnaHR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAor CQkJCQkJCQkgIGlubmVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJ CQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KKworCS8qCisJICogSWYgd2UgY3JlYXRl ZCBhIGpvaW4gdW5yb2xsZXIgdXAgYWJvdmUsIHRoZW4gaXQncyBhbHNvIG91ciBqb2luIHRvIHVz ZQorCSAqIGl0IHRvIGJ1aWxkIHRoZSBmaW5hbCBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFuZCB0byBk ZXN0cm95IHRoZSBvYmplY3QuCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwpCisJ eworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luOworCisJCXVqb2luID0gcGdwYV9idWlsZF91 bnJvbGxlZF9qb2luKHdhbGtlciwgam9pbl91bnJvbGxlcik7CisJCXdhbGtlci0+dG9wbGV2ZWxf dW5yb2xsZWRfam9pbnMgPQorCQkJbGFwcGVuZCh3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pv aW5zLCB1am9pbik7CisJCXBncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKGpvaW5fdW5yb2xsZXIp OworCQkodm9pZCkgcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCB1am9pbik7CisJ fQorCisJLyoKKwkgKiBTb21lIHBsYW4gdHlwZXMgY2FuIGhhdmUgYWRkaXRpb25hbCBjaGlsZHJl bi4gTm9kZXMgbGlrZSBBcHBlbmQgdGhhdAorCSAqIGNhbiBoYXZlIGFueSBudW1iZXIgb2YgY2hp bGRyZW4gc3RvcmUgdGhlbSBpbiBhIExpc3Q7IGEgU3VicXVlcnlTY2FuCisJICoganVzdCBoYXMg YSBmaWVsZCBmb3IgYSBzaW5nbGUgYWRkaXRpb25hbCBQbGFuLgorCSAqLworCXN3aXRjaCAobm9k ZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQl7CisJCQkJQXBwZW5kCSAgICph cGxhbiA9IChBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBhcGxhbi0+YXBwZW5k cGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShhcGxhbi0+YXBwcmVsaWRzKSkKKwkJCQkJcHVz aGRvd25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJCQl9CisJCQli cmVhazsKKwkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJeworCQkJCU1lcmdlQXBwZW5kICptYXBs YW4gPSAoTWVyZ2VBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBtYXBsYW4tPm1l cmdlcGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShtYXBsYW4tPmFwcHJlbGlkcykpCisJCQkJ CXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBB bmQgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoK KwkJCWV4dHJhcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJy ZWFrOworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCisJCQkvKgorCQkJICogV2UgZG9uJ3QgcGFz cyBkb3duIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVjYXVzZQorCQkJICog dGhvc2UgYXJlIHNwZWNpZmljIHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkgKi8KKwkJCXBncGFf d2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFu LAorCQkJCQkJCQkgIDAsIE5VTEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJCWJyZWFr OworCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1c3RvbVNjYW4gKikg cGxhbiktPmN1c3RvbV9wbGFuczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ fQorCisJLyogSWYgd2UgZm91bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVuLCBpdGVyYXRlIG92 ZXIgaXQuICovCisJZm9yZWFjaChsYywgZXh0cmFwbGFucykKKwl7CisJCVBsYW4JICAgKnN1YnBs YW4gPSBsZmlyc3QobGMpOworCisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHN1YnBs YW4sIDAsIE5VTEwsIHB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCSAgYmVuZWF0aF9h bnlfZ2F0aGVyKTsKKwl9Cit9CisKKy8qCisgKiBQZXJmb3JtIGZpbmFsIHByb2Nlc3Npbmcgb2Yg YSBuZXdseS1jb25zdHJ1Y3RlZCBwZ3BhX3Vucm9sbGVkX2pvaW4uIFRoaXMKKyAqIG9ubHkgbmVl ZHMgdG8gYmUgY2FsbGVkIGZvciB0b3BsZXZlbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cywg c2luY2UgaXQKKyAqIHJlY3Vyc2VzIHRvIHN1Yi1qb2lucyBhcyBuZWVkZWQuCisgKgorICogT3Vy IGdvYWwgaXMgdG8gYWRkIHRoZSBzZXQgb2YgaW5uZXIgcmVsaWRzIHRvIHRoZSByZWxldmFudCBq b2luX3N0cmF0ZWdpZXMKKyAqIGxpc3QsIGFuZCB0byBkbyB0aGUgc2FtZSBmb3IgYW55IHN1Yi1q b2lucy4gVG8gdGhhdCBlbmQsIHRoZSByZXR1cm4gdmFsdWUKKyAqIGlzIHRoZSBzZXQgb2YgcmVs aWRzIGZvdW5kIGJlbmVhdGggdGhlIGlubmVyIHNpZGUgb2YgdGhlIGpvaW4sIGJ1dCBpdCBpcwor ICogZXhwZWN0ZWQgdGhhdCB0aGUgdG9wbGV2ZWwgY2FsbGVyIHdpbGwgaWdub3JlIHRoaXMuCisg Ki8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgICBwZ3BhX3Vucm9sbGVkX2pvaW4g KnVqb2luKQoreworCUJpdG1hcHNldCAgKmFsbF9yZWxpZHMgPSBOVUxMOworCisJZm9yIChpbnQg ayA9IDA7IGsgPCB1am9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pvaW5fbWVtYmVyICpt ZW1iZXIgPSAmdWpvaW4tPmlubmVyW2tdOworCQlCaXRtYXBzZXQgICpyZWxpZHM7CisKKwkJaWYg KG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCQkJcmVsaWRzID0gcGdwYV9wcm9jZXNz X3Vucm9sbGVkX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkJbWVtYmVyLT51bnJvbGxlZF9qb2lu KTsKKwkJZWxzZQorCQl7CisJCQlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCQkJcmVs aWRzID0gbWVtYmVyLT5zY2FuLT5yZWxpZHM7CisJCX0KKwkJd2Fsa2VyLT5qb2luX3N0cmF0ZWdp ZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSA9CisJCQlsYXBwZW5kKHdhbGtlci0+am9pbl9zdHJhdGVn aWVzW3Vqb2luLT5zdHJhdGVneVtrXV0sIHJlbGlkcyk7CisJCWFsbF9yZWxpZHMgPSBibXNfYWRk X21lbWJlcnMoYWxsX3JlbGlkcywgcmVsaWRzKTsKKwl9CisKKwlyZXR1cm4gYWxsX3JlbGlkczsK K30KKworLyoKKyAqIEFycmFuZ2UgZm9yIHRoZSBnaXZlbiBwbGFuIG5vZGUgdG8gYmUgdHJlYXRl ZCBhcyBhIHF1ZXJ5IGZlYXR1cmUgd2hlbiB0aGUKKyAqIHRyZWUgd2FsayByZWFjaGVzIGl0Lgor ICoKKyAqIE1ha2Ugc3VyZSB0byBvbmx5IHVzZSB0aGlzIGZvciBub2RlcyB0aGF0IHRoZSB0cmVl IHdhbGsgY2FuJ3QgaGF2ZSByZWFjaGVkCisgKiB5ZXQhCisgKi8KK3ZvaWQKK3BncGFfYWRkX2Z1 dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJcGdw YV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdwYV9xdWVyeV9mZWF0dXJlICpxZiA9 IHBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCB0eXBlLCBwbGFuKTsKKworCXdhbGtlci0+ZnV0dXJl X3F1ZXJ5X2ZlYXR1cmVzID0KKwkJbGFwcGVuZCh3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJl cywgcWYpOworfQorCisvKgorICogUmV0dXJuIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMg YXNzb2NpYXRlZCB3aXRoIHRoaXMgcGxhbiBub2RlIElELgorICoKKyAqIFRoZSBsYXN0IGVsaWRl ZCBub2RlIGlzIHRoZSBvbmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gdXBwZXJtb3N0IGluIHRoZSBw bGFuCisgKiB0cmVlIGhhZCBpdCBub3QgYmVlbiByZW1vdmVkIGR1cmluZyBzZXRyZWZzIHByb2Nl c3NpZy4KKyAqLworRWxpZGVkTm9kZSAqCitwZ3BhX2xhc3RfZWxpZGVkX25vZGUoUGxhbm5lZFN0 bXQgKnBzdG10LCBQbGFuICpwbGFuKQoreworCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlID0gTlVM TDsKKworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBwc3RtdC0+ZWxpZGVkTm9kZXMpCisJ eworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCWVsaWRl ZF9ub2RlID0gbjsKKwl9CisKKwlyZXR1cm4gZWxpZGVkX25vZGU7Cit9CisKKy8qCisgKiBDZXJ0 YWluIHBsYW4gbm9kZXMgY2FuIHJlZmVyIHRvIGEgc2V0IG9mIFJUSXMuIEV4dHJhY3QgYW5kIHJl dHVybiB0aGUgc2V0LgorICovCitCaXRtYXBzZXQgKgorcGdwYV9yZWxpZHMoUGxhbiAqcGxhbikK K3sKKwlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCXJldHVybiAoKFJlc3VsdCAqKSBwbGFuKS0+ cmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBGb3JlaWduU2NhbikpCisJCXJldHVybiAoKEZv cmVpZ25TY2FuICopIHBsYW4pLT5mc19yZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIEFwcGVu ZCkpCisJCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCWVsc2UgaWYgKElz QShwbGFuLCBNZXJnZUFwcGVuZCkpCisJCXJldHVybiAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5h cHByZWxpZHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEV4dHJhY3QgdGhlIHNjYW5u ZWQgUlRJIGZyb20gYSBwbGFuIG5vZGUuCisgKgorICogUmV0dXJucyAwIGlmIHRoZXJlIGlzbid0 IG9uZS4KKyAqLworSW5kZXgKK3BncGFfc2NhbnJlbGlkKFBsYW4gKnBsYW4pCit7CisJc3dpdGNo IChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX1NlcVNjYW46CisJCWNhc2UgVF9TYW1wbGVT Y2FuOgorCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCWNhc2UgVF9UaWRTY2FuOgorCQljYXNl IFRfVGlkUmFuZ2VTY2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQljYXNlIFRfRnVuY3Rp b25TY2FuOgorCQljYXNlIFRfVGFibGVGdW5jU2NhbjoKKwkJY2FzZSBUX1ZhbHVlc1NjYW46CisJ CWNhc2UgVF9DdGVTY2FuOgorCQljYXNlIFRfTmFtZWRUdXBsZXN0b3JlU2NhbjoKKwkJY2FzZSBU X1dvcmtUYWJsZVNjYW46CisJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJY2FzZSBUX0N1c3RvbVNj YW46CisJCWNhc2UgVF9JbmRleFNjYW46CisJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgorCQkJcmV0 dXJuICgoU2NhbiAqKSBwbGFuKS0+c2NhbnJlbGlkOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7 CisJfQorfQorCisvKgorICogQ3JlYXRlIGEgcGdwYV9xdWVyeV9mZWF0dXJlIGFuZCBhZGQgaXQg dG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5IGZlYXR1cmVzCisgKiBmb3IgdGhpcyBwbGFuLgorICov CitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICoKK3BncGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJIHBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpw bGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYgPSBwYWxsb2MwX29iamVjdChwZ3BhX3F1 ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5cGUgPSB0eXBlOworCXFmLT5wbGFuID0gcGxhbjsKKwor CXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVdID0KKwkJbGFwcGVuZCh3YWxrZXItPnF1 ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwgcWYpOworCisJcmV0dXJuIHFmOworfQorCisvKgorICog QWRkIGEgc2luZ2xlIFJUSSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5k ZXggcnRpKQoreworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9x dWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihxZi0+cmVs aWRzLCBydGkpOworCX0KK30KKworLyoKKyAqIEFkZCBhIHNldCBvZiBSVElzIHRvIGVhY2ggYWN0 aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGlzKExp c3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJZm9yZWFj aF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsK KwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhxZi0+cmVsaWRzLCByZWxpZHMpOworCX0K K30KKworLyoKKyAqIEFkZCBSVElzIGRpcmVjdGx5IGNvbnRhaW5lZCBpbiBhIHBsYW4gbm9kZSB0 byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9h ZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbikKK3sK KwlCaXRtYXBzZXQgICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0gcGdw YV9yZWxpZHMocGxhbikpICE9IE5VTEwpCisJCXBncGFfcWZfYWRkX3J0aXMoYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzLCByZWxpZHMpOworCWVsc2UgaWYgKChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFu KSkgIT0gMCkKKwkJcGdwYV9xZl9hZGRfcnRpKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcnRpKTsK K30KKworLyoKKyAqIElmIHdlIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB1c2luZyB0aGUgcHJvdmlk ZWQgd2Fsa2VyIG9iamVjdCBhbmQgYXJyYXkKKyAqIG9mIGlkZW50aWZpZXJzLCB3b3VsZCB3ZSBn ZW5lcmF0ZSB0aGUgc3BlY2lmaWVkIHRhZy90YXJnZXQgY29tYmluYXRpb24/CisgKgorICogSWYg eWVzLCB0aGUgcGxhbiBjb25mb3JtcyB0byB0aGUgYWR2aWNlOyBpZiBubywgaXQgZG9lcyBub3Qu IE5vdGUgdGhhdAorICogd2UgaGF2ZSBrbm93IHdheSBvZiBrbm93aW5nIHdoZXRoZXIgdGhlIHBs YW5uZXIgd2FzIGZvcmNlZCB0byBlbWl0IGEgcGxhbgorICogdGhhdCBjb25mb3JtZWQgdG8gdGhl IGFkdmljZSBvciBqdXN0IGhhcHBlbmVkIHRvIGRvIHNvLgorICovCitib29sCitwZ3BhX3dhbGtl cl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkg cGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YWdf dHlwZSB0YWcsCisJCQkJCQkgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJSW5kZXgJ CXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUJp dG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JE RVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3Vucm9sbGVkX2pvaW4sIHVqb2luLCB3YWxrZXIt PnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCQl7CisJCQlpZiAocGdwYV93YWxrZXJfam9pbl9v cmRlcl9tYXRjaGVzKHVqb2luLCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgICBydF9pZGVu dGlmaWVycywgdGFyZ2V0LCB0cnVlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElG SUVSKQorCXsKKwkJSW5kZXgJCXJ0aTsKKworCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0 YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLCAmdGFyZ2V0LT5yaWQpOworCQlyZWxpZHMgPSBi bXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+ dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9h ZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCUlu ZGV4CQlydGk7CisKKwkJCUFzc2VydChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X0lERU5USUZJRVIpOworCQkJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIo cnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJ CQkJICAgJmNoaWxkX3RhcmdldC0+cmlkKTsKKwkJCWlmIChydGkgPT0gMCkKKwkJCQllbG9nKEVS Uk9SLCAiY2Fubm90IGRldGVybWluZSBSVEkgZm9yIGFkdmljZSB0YXJnZXQiKTsKKwkJCXJlbGlk cyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRpKTsKKwkJfQorCX0KKworCXN3aXRjaCAodGFn KQorCXsKKwkJY2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJLyogc2hvdWxkIGhhdmUgYmVl biBoYW5kbGVkIGFib3ZlICovCisJCQlwZ191bnJlYWNoYWJsZSgpOworCQkJYnJlYWs7CisJCWNh c2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250 YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwkJ CQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0 dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9T Q0FOX0ZPUkVJR04sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0lOREVY X09OTFlfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwK KwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9JTkRFWF9PTkxZLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsK KwkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRh aW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYLAorCQkJCQkJCQkJ CQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX1BB UlRJVElPTldJU0UsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFUV9T Q0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgUEdQQV9TQ0FOX1NFUSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9U QUdfVElEX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIs CisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fVElELAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2Fz ZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVy ZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSLAorCQkJCQkJCQkJCQkJcmVsaWRz KTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJf Y29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSX01FUkdF LAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5J UVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJ CQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMp OworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9JTl9V TklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJ IEpTVFJBVF9IQVNIX0pPSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFH X01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNf am9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwK KwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJ IEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9j b250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NQVRF UklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfTUVNT0laRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwK KwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCQkgcmVs aWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBwZ3Bh X3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURf TE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FU SEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcih3YWxrZXIsIHJl bGlkcyk7CisJfQorCisJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCXJldHVybiBmYWxzZTsK K30KKworLyoKKyAqIERvZXMgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCB0aGUgam9pbiBvcmRlciBz cGVjaWZpZWQgYnkgYW4gYWR2aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fs a2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJCQkJ CSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9p ZGVudGlmaWVycywKKwkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJ CQkgICBib29sIHRvcGxldmVsKQoreworCWludAkJbmNoaWxkcmVuID0gbGlzdF9sZW5ndGgodGFy Z2V0LT5jaGlsZHJlbik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9P UkRFUkVEX0xJU1QpOworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEgcHJlZml4IG1hdGNo LiAqLworCWlmICh0b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1am9pbi0+bmlubmVy ICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG5jaGlsZHJlbiAh PSB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBPdXRlcm1v c3QgcmVsIG11c3QgbWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNo ZXNfbWVtYmVyKCZ1am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJ CQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBsaW5pdGlhbCh0YXJn ZXQtPmNoaWxkcmVuKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVhY2ggaW5uZXIgcmVsIG11 c3QgbWF0Y2guICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4gLSAxOyArK24pCisJ eworCQlwZ3BhX2FkdmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+ Y2hpbGRyZW4sIG4gKyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hl c19tZW1iZXIoJnVqb2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgs CisJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgIGNoaWxkX3Rh cmdldCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisg KiBEb2VzIG9uZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBhbiBhZHZpY2UgdGFy Z2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21l bWJlcihwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9s ZW5ndGgsCisJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1hcHNldCAgKnJlbGlk cyA9IE5VTEw7CisKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlp ZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQlyZXR1cm4g ZmFsc2U7CisJCXJldHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMobWVtYmVyLT51 bnJvbGxlZF9qb2luLAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAg cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJCQkJCQkgIGZhbHNl KTsKKwl9CisKKwlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3aXRjaCAodGFyZ2V0 LT50dHlwZSkKKwl7CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOgorCQkJLyogQ291 bGQgb25seSBtYXRjaCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ Y2FzZSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJCQl7 CisJCQkJCUluZGV4CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFi bGVfbGVuZ3RoLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICAmY2hpbGRfdGFyZ2V0LT5y aWQpOworCQkJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aSk7CisJCQkJfQor CQkJCWJyZWFrOworCQkJfQorCisJCWNhc2UgUEdQQV9UQVJHRVRfSURFTlRJRklFUjoKKwkJCXsK KwkJCQlJbmRleAkJcnRpOworCisJCQkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFibGVf bGVuZ3RoLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICZ0YXJnZXQtPnJpZCk7CisJCQkJ cmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQor CisJcmV0dXJuIGJtc19lcXVhbChtZW1iZXItPnNjYW4tPnJlbGlkcywgcmVsaWRzKTsKK30KKwor LyoKKyAqIERvZXMgdGhpcyB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHNjYW4gc3RyYXRlZ3kg c2hvdWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2ZW4gcmVsaWQgc2V0PworICovCitzdGF0aWMg Ym9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBC aXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpzY2FucyA9IHdhbGtlci0+c2NhbnNbc3Ry YXRlZ3ldOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBzY2FuLCBzY2FucykKKwl7CisJCS8q CisJCSAqIFhYWC4gSWYgdGhpcyBpcyBpbmRleC1yZWxhdGVkIGFkdmljZSwgd2Ugc2hvdWxkIGFs c28gdmFsaWRhdGUgdGhhdAorCQkgKiB0aGUgYWR2aWNlIHRhcmdldCdzIGluZGV4IHRhcmdldCBt YXRjaGVzIHRoZSBQbGFuIHRyZWUuCisJCSAqLworCQlpZiAoYm1zX2VxdWFsKHNjYW4tPnJlbGlk cywgcmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwor LyoKKyAqIERvZXMgdGhpcyB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGZlYXR1cmUg YXBwbGllcyB0byB0aGUgZ2l2ZW4KKyAqIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3Bn cGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsCisJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlk cykKK3sKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlcyA9IHdhbGtlci0+cXVlcnlfZmVhdHVyZXNb dHlwZV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0 dXJlcykKKwl7CisJCWlmIChibXNfZXF1YWwocWYtPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVy biB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtl ciBzYXkgdGhhdCB0aGUgZ2l2ZW4gam9pbiBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhl CisgKiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250 YWluc19qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3Bh X2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQorewor CUxpc3QJICAgKmpvaW5fc3RyYXRlZ2llcyA9IHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3N0cmF0 ZWd5XTsKKworCWZvcmVhY2hfcHRyKEJpdG1hcHNldCwganNyZWxpZHMsIGpvaW5fc3RyYXRlZ2ll cykKKwl7CisJCWlmIChibXNfZXF1YWwoanNyZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5 IHRoYXQgdGhlIGdpdmVuIHJlbGlkcyBzaG91bGQgYmUgbWFya2VkIGFzIE5PX0dBVEhFUj8KKyAq Lworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcykKK3sK KwlyZXR1cm4gYm1zX2lzX3N1YnNldChyZWxpZHMsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsK K30KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSByZWxhdGlvbiBp ZGVudGlmaWVyIHRvIGFuIFJUSS4KKyAqCisgKiBXZSB0aHJvdyBhbiBlcnJvciBoZXJlIGJlY2F1 c2Ugd2UgZXhwZWN0IHRoaXMgdG8gYmUgdXNlZCBvbiBzeXN0ZW0tZ2VuZXJhdGVkCisgKiBhZHZp Y2UuIEhlbmNlLCBmYWlsdXJlIGhlcmUgaW5kaWNhdGVzIGFuIGFkdmljZSBnZW5lcmF0aW9uIGJ1 Zy4KKyAqLworc3RhdGljIEluZGV4CitwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9s ZW5ndGgsCisJCQkJCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCXBncGFf aWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQlydGk7CisKKwlydGkgPSBwZ3BhX2NvbXB1dGVf cnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCQkJCSAgIHJpZCk7CisJaWYgKHJ0aSA9PSAwKQorCQllbG9nKEVSUk9S LCAiY2Fubm90IGRldGVybWluZSBSVEkgZm9yIGFkdmljZSB0YXJnZXQiKTsKKwlyZXR1cm4gcnRp OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5kNjU4NGMwMTRiOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApAQCAtMCwwICsxLDEyMSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuaAorICoJICBQbGFuIHRyZWUgaXRlcmF0 aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fs a2VyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9I CisjZGVmaW5lIFBHUEFfV0FMS0VSX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVk ZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXZSB1c2Ug dGhlIHRlcm0gInF1ZXJ5IGZlYXR1cmUiIHRvIHJlZmVyIHRvIHBsYW4gbm9kZXMgdGhhdCBhcmUg aW50ZXJlc3RpbmcKKyAqIGluIHRoZSBmb2xsb3dpbmcgd2F5OiB0byBnZW5lcmF0ZSBhZHZpY2Us IHdlJ2xsIG5lZWQgdG8ga25vdyB0aGUgc2V0IG9mCisgKiBzYW1lLXN1YnF1ZXJ5LCBub24tam9p biBSVElzIG9jY3VyaW5nIGF0IG9yIGJlbG93IHRoYXQgcGxhbiBub2RlLCB3aXRob3V0CisgKiBh ZG1peHR1cmUgb2YgcGFyZW50IGFuZCBjaGlsZCBSVElzLgorICoKKyAqIEZvciBleGFtcGxlLCBH YXRoZXIgbm9kZXMsIGRlc2lnaW5hdGVkIGJ5IFBHUEFRRl9HQVRIRVIsIGFuZCBHYXRoZXIgTWVy Z2UKKyAqIG5vZGVzLCBkZXNpZ25hdGVkIGJ5IFBHUEFRRl9HQVRIRVJfTUVSR0UsIGFyZSBxdWVy eSBmZWF0dXJlcywgYmVjYXVzZSB3ZSdsbAorICogd2FudCB0byBhZG1pdCBzb21lIGtpbmQgb2Yg YWR2aWNlIHRoYXQgZGVzY3JpYmVzIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRo YXQgYXBwZWFycyBiZW5lYXRoIHRob3NlIG5vZGVzLgorICoKKyAqIEVhY2ggc2VtaWpvaW4gY2Fu IGJlIGltcGxlbWVudGVkIGVpdGhlciBieSBkaXJlY3RseSBwZXJmb3JtaW5nIGEgc2VtaWpvaW4s CisgKiBvciBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBu b3JtYWwgam9pbi4gRWl0aGVyIHdheSwKKyAqIHdlIHVzZSBhIHF1ZXJ5IGZlYXR1cmUgdG8gbm90 aWNlIHdoYXQgZGVjaXNpb24gd2FzIG1hZGUsIHNvIHRoYXQgd2UgY2FuCisgKiBkZXNjcmliZSBp dCBieSBlbnVtZXJhdGluZyB0aGUgUlRJcyBvbiB0aGF0IHNpZGUgb2YgdGhlIGpvaW4uCisgKgor ICogVG8gZWxhYm9yYXRlIG9uIHRoZSAibm8gYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQg UlRJcyIgcnVsZSwgaW4gYWxsIG9mCisgKiB0aGVzZSBjYXNlcywgaWYgdGhlIGVudGlyZXR5IG9m IGFuIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBhcHBlYXJzIGJlbmVhdGgKKyAqIHRoZSBxdWVyeSBm ZWF0dXJlLCB3ZSBvbmx5IHdhbnQgdG8gbmFtZSB0aGUgcGFyZW50IHRhYmxlLiBCdXQgaXQncyBh bHNvCisgKiBwb3NzaWJsZSB0byBoYXZlIGNhc2VzIHdoZXJlIHdlIG11c3QgbmFtZSBjaGlsZCB0 YWJsZXMuIFRoaXMgaXMgcGFydGljdWxhcmx5CisgKiBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGFy dGl0aW9ud2lzZSBqb2luIGlzIGluIHVzZSwgYnV0IGNvdWxkIGhhcHBlbiBmb3IKKyAqIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UgZXZlbiB3aXRob3V0IHRoYXQsIGlmIG9uZSBvZiB0aG9zZSBhcHBl YXJzIGJlbG93CisgKiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBmb3IgYSBzaW5nbGUg dGFibGUuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3FmX3R5cGUKK3sKKwlQR1BBUUZfR0FUSEVS LAorCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJ UEdQQVFGX1NFTUlKT0lOX1VOSVFVRQorCS8qIHVwZGF0ZSBOVU1fUEdQQV9RRl9UWVBFUyBpZiB5 b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9xZl90eXBlOworCisjZGVmaW5lIE5VTV9Q R1BBX1FGX1RZUEVTICgoaW50KSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFICsgMSkKKworLyoKKyAq IEZvciBlYWNoIHF1ZXJ5IGZlYXR1cmUsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGZlYXR1cmUgdHlw ZSBhbmQgdGhlIHNldCBvZgorICogcmVsaWRzIHRoYXQgd2UgZm91bmQgdW5kZXJuZWF0aCB0aGUg cmVsZXZhbnQgcGxhbiBub2RlLiBTZWUgdGhlIGNvbW1lbnRzCisgKiBvbiBwZ3BhX3FmX3R5cGUs IGFib3ZlLCBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X3F1ZXJ5X2ZlYXR1cmUKK3sKKwlwZ3BhX3FmX3R5cGUgdHlwZTsKKwlQbGFuCSAgICpwbGFuOwor CUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9xdWVyeV9mZWF0dXJlOworCisvKgorICogQ29u dGV4dCBvYmplY3QgZm9yIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIHBzdG10IGlzIHRoZSBQbGFu bmVkU3RtdCB3ZSdyZSBzdHVkeWluZy4KKyAqCisgKiBzY2FucyBpcyBhbiBhcnJheSBvZiBsaXN0 cyBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHRoZSBz Y2FuJ3MgcGdwYV9zY2FuX3N0cmF0ZWd5LgorICoKKyAqIG5vX2dhdGhlcl9zY2FucyBpcyB0aGUg c2V0IG9mIHNjYW4gUlRJcyB0aGF0IGRvIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkKKyAqIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiB0b3BsZXZlbF91bnJvbGxlZF9qb2lucyBp cyBhIGxpc3Qgb2YgYWxsIHBncGFfdW5yb2xsZWRfam9pbiBvYmplY3RzIHRoYXQKKyAqIGFyZSBu b3QgYSBjaGlsZCBvZiBzb21lIG90aGVyIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqCisgKiBqb2lu X3N0cmF0ZWd5IGlzIGFuIGFycmF5IG9mIGxpc3RzIG9mIEJpdG1hcHNldCBvYmplY3RzLiBFYWNo IEJpdG1hcHNldAorICogaXMgdGhlIHNldCBvZiByZWxpZHMgdGhhdCBhcHBlYXJzIG9uIHRoZSBp bm5lciBzaWRlIG9mIHNvbWUgam9pbiAoZXhjbHVkaW5nCisgKiBSVElzIGZyb20gcGFydGl0aW9u IGNoaWxkcmVuIGFuZCBzdWJxdWVyaWVzKS4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHBn cGFfam9pbl9zdHJhdGVneS4KKyAqCisgKiBxdWVyeV9mZWF0dXJlcyBpcyBhbiBhcnJheSBsaXN0 cyBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cywgaW5kZXhlZAorICogYnkgcGdwYV9xZl90 eXBlLgorICoKKyAqIGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBpcyBvbmx5IHVzZWQgZHVyaW5nIHRo ZSBwbGFuIHRyZWUgd2FsayBhbmQgc2hvdWxkCisgKiBiZSBlbXB0eSB3aGVuIHRoZSB0cmVlIHdh bGsgY29uY2x1ZGVzLiBJdCBpcyBhIGxpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlCisgKiBvYmpl Y3RzIGZvciBQbGFuIG5vZGVzIHRoYXQgdGhlIHBsYW4gdHJlZSB3YWxrIGhhcyBub3QgeWV0IGVu Y291bnRlcmVkOworICogd2hlbiBlbmNvdW50ZXJlZCwgdGhleSB3aWxsIGJlIG1vdmVkIHRvIHRo ZSBsaXN0IG9mIGFjdGl2ZSBxdWVyeSBmZWF0dXJlcworICogdGhhdCBpcyBwcm9wYWdhdGVkIHZp YSB0aGUgY2FsbCBzdGFjay4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0Cit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCUxpc3QJICAgKnNjYW5zW05VTV9QR1BB X1NDQU5fU1RSQVRFR1ldOworCUJpdG1hcHNldCAgKm5vX2dhdGhlcl9zY2FuczsKKwlMaXN0CSAg ICp0b3BsZXZlbF91bnJvbGxlZF9qb2luczsKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXNbTlVN X1BHUEFfSk9JTl9TVFJBVEVHWV07CisJTGlzdAkgICAqcXVlcnlfZmVhdHVyZXNbTlVNX1BHUEFf UUZfVFlQRVNdOworCUxpc3QJICAgKmZ1dHVyZV9xdWVyeV9mZWF0dXJlczsKK30gcGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0OworCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQpOwor CitleHRlcm4gdm9pZCBwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCQkJCXBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJUGxh biAqcGxhbik7CisKK2V4dGVybiBFbGlkZWROb2RlICpwZ3BhX2xhc3RfZWxpZGVkX25vZGUoUGxh bm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKTsKK2V4dGVybiBCaXRtYXBzZXQgKnBncGFfcmVs aWRzKFBsYW4gKnBsYW4pOworZXh0ZXJuIEluZGV4IHBncGFfc2NhbnJlbGlkKFBsYW4gKnBsYW4p OworCitleHRlcm4gYm9vbCBwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlm aWVycywKKwkJCQkJCQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQkgcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9nYXRoZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YjE1 ZTE4ZTk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dh dGhlci5zcWwKQEAgLTAsMCArMSw3NSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nv c3QgPSAwOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90 YWJsZV9zY2FuX3NpemUgPSAwOworCitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBzZXJpYWwgcHJp bWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CisKK0NSRUFURSBU QUJMRSBndF9mYWN0ICgKKwlpZCBpbnQgbm90IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51 bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBndF9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9mYWN0OworCistLSBC eSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdpdGggYSBwYXJhbGxlbCBoYXNoIGpv aW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3Rf ZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisK Ky0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2YgYm90aCByZWxhdGlvbnMgdG9nZXRo ZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21l cmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09N TUlUOworCistLSBGb3JjZSBhIHNlcGFyYXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0 aW9uIGZvciBlYWNoIHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ug b24gb25lIHJlbGF0aW9uIGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVy KGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGQpIG5vX2dh dGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmKSBub19nYXRo ZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVy KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK K0NPTU1JVDsKKworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxs LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihm IGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK K0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhlIE9SREVS IEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRl ci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWFhMmZjNjJkMzQKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbApAQCAtMCww ICsxLDk2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVD VCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVBVEUgVEFC TEUgam9fZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0y IChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAo ZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFO QUxZWkUgam9fZGltMjsKKworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5 IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0xIChpZCks CisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQpCispIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2ZhY3QKKwlT RUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworCistLSBXZSBleHBlY3QgdG8gam9pbiB0 byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgorLS0gaXMg bW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBk MS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUg dmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQgam9pbiBv cmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQgdGhlIHBs YW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBq b19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04g Zi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVG VCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0 IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9J TiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZh bDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYg KGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQK KwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEg PSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24g b2YgdGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5l ciBmcm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNv IHRoYXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQg Y2Fubm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYu ZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxl IHRvIGZvcmNlIHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0g dGhhdCBpcyBub3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8g Zm9yY2UgdGhlIHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcg dGFibGUuCitCRUdJTjsKKy0tIFhYWDogVGhlIGFkdmljZSBmZWVkYmFjayBzYXlzICdwYXJ0aWFs bHkgbWF0Y2hlZCcgaGVyZSB3aGljaCBpc24ndCBleGFjdGx5CistLSB3cm9uZyBnaXZlbiB0aGUg d2F5IHRoYXQgZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBjb2RlLCBidXQgaXQncyBhdCB0aGUgdmVy eQorLS0gbGVhc3QgY29uZnVzaW5nLiBTb21ldGhpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGltcHJv dmVkIGhlcmUuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBk MiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9S IGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdq b2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYu ZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnam9pbl9vcmRlcihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBm IEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04g ZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitDT01NSVQ7CisKKy0tIFhY WDogYWRkIHRlc3RzIGZvciBqb2luIG9yZGVyIHByZWZpeCBtYXRjaGluZworLS0gWFhYOiBqb2lu X29yZGVyKGp1c3RvbmVyZWwpIHNob3VsZG4ndCByZXBvcnQgcGFydGlhbGx5IG1hdGNoZWQKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhlYjgyM2YxYzBlCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKQEAgLTAsMCAr MSw3NiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmlt YXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CisKK0NSRUFU RSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdl ciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMp KzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggam9pbl9m YWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBqb2luX2Zh Y3Q7CisKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBt ZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBv ZiB0aGVzZSBzaG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRo YXQgd2lsbAorLS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGlt IChpZCkgaXMgdW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUg b3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFT SF9KT0lOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf UExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01N SVQ7CisKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBq b2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3Jr LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihm KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYg Sk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9M T09QX01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCist LSBXZSBjYW4ndCBmb3JjZSBhIGZvcmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywgYmVj YXVzZSB0aGV5CistLSBhcmVuJ3QgZm9yZWlnbiB0YWJsZXMuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmU0MmMwNjExNzYwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwKQEAgLTAsMCArMSw3OCBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworCitDUkVBVEUgVEFCTEUg cHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJ VElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBG T1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBG Uk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAw MSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQg JyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOwor VkFDVVVNIEFOQUxZWkUgcHQxOworCitDUkVBVEUgVEFCTEUgcHQyIChpZCBpbnRlZ2VyIHByaW1h cnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEpIHRv ICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJM RSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQ QVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQyIChpZCwgZGltMiwg dmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChnICUgNSkgKyAxCisJ ICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CisK K0NSRUFURSBUQUJMRSBwdDMgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMgdGV4dCwgdmFs MyBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQzYSBQQVJU SVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElUSU9OIE9GIHB0 MyBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZB TFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBwdDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVDVCBnLCAnYSB0 aGlyZCByYW5kb20gdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CisKK0NSRUFURSBUQUJMRSBwdG1p c21hdGNoIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0gaW50KQorCVBB UlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hhIFBBUlRJVElP TiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUwMSkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGIg UEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1MDEpIHRvICgz MDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0 bWlzbWF0Y2ggKGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3RoZXIgdGV4dCAn IHx8IGcsIChnICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitW QUNVVU0gQU5BTFlaRSBwdG1pc21hdGNoOworCitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKKworLS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0IHBh cnRpYWxseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJU SVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQg cHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0g MTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQx IHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQz LmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsK KworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQg dGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElU SU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNt YXRjaC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L3NjYW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI1NDE2YTc1ZjQ2Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKQEAgLTAsMCArMSwxOTUg QEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nv c3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9j b3N0ID0gMDsKKworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBi IHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g c2Nhbl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFi bGUgVVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworCistLSBTZXF1 ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZTsKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBJbmRl eC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgYiA+ICdzb21lIHRleHQgOCc7CisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwx KSc7CisKKy0tIFRJRCByYW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3Rp ZCA8ICcoMiwxKSc7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0 byB1c2UgdGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBz aG91bGQgc3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9 ICcoMCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitD T01NSVQ7CisKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNl IHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5k ZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0 ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNp ZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNs YXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK0NPTU1JVDsKKworLS0g VHJ5IGFnYWluIHRvIGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9y IHRoZSBJTkRFWF9TQ0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9P TkxZX1NDQU4gY2FuJ3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNv bHVtbnMgbm90IGluY2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA+IDA7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAw OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitDT01NSVQ7CisKKy0t IFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAo ZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJz ZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisK Ky0tIFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGlu ZGV4IHNjYW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0 IHRoZSBwbGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdl IGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0 bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4 IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9y Y2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9y CistLSBUSUQgcmFuZ2Ugc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUK KwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0t IFRlc3QgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47Cist LSBTaG91bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBCdXQgbm90IGlmIHdlIG1lbnRpb24g dGhlIHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IGl0 IGRvZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxseSBkaWZm ZXJlbnQuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0 IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg YSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJs ZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2Fu X3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg YSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFi aWxpdHkgdG8gcmVmZXIgdG8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgor QkVHSU47CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo Z2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5h KSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVG VCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFi bGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMjMiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRl X3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAg IExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK0NPTU1JVDsKKworLS0gVGVzdCBv dXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBX SEVSRSBhID0gMSBPRkZTRVQgMCk7CitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVS RSBhID0gMSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25seS4KK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B4KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMg V0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5 LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRf c3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitDT01NSVQ7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGJmZTlmZjBkOTJjLi43OWRlODJkMzlmYyAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM5MjEsNiArMzkyMSw0MyBAQCBwZ193Y19wcm9iZWZ1 bmMKIHBnX3djaGFyCiBwZ193Y2hhcl90YmwKIHBncF9hcm1vcl9oZWFkZXJzX3N0YXRlCitwZ3Bh X2NvbGxlY3RlZF9hZHZpY2UKK3BncGFfYWR2aWNlX2l0ZW0KK3BncGFfYWR2aWNlX3RhZ190eXBl CitwZ3BhX2FkdmljZV90YXJnZXQKK3BncGFfaWRlbnRpZmllcgorcGdwYV9pbmRleF90YXJnZXQK K3BncGFfaW5kZXhfdHlwZQorcGdwYV9pdG1fdHlwZQorcGdwYV9qb2luX2NsYXNzCitwZ3BhX2pv aW5fbWVtYmVyCitwZ3BhX2pvaW5fc3RhdGUKK3BncGFfam9pbl9zdHJhdGVneQorcGdwYV9qb2lu X3Vucm9sbGVyCitwZ3BhX2xvY2FsX2FkdmljZQorcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3Bn cGFfb3V0cHV0X2NvbnRleHQKK3BncGFfcGxhbl93YWxrZXJfY29udGV4dAorcGdwYV9wbGFubmVy X3N0YXRlCitwZ3BhX3FmX3R5cGUKK3BncGFfcXVlcnlfZmVhdHVyZQorcGdwYV9yaV9jaGVja2Vy CitwZ3BhX3JpX2NoZWNrZXJfa2V5CitwZ3BhX3NjYW4KK3BncGFfc2Nhbl9zdHJhdGVneQorcGdw YV9zaGFyZWRfYWR2aWNlCitwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3BncGFfc2hhcmVkX3N0 YXRlCitwZ3BhX3RhcmdldF90eXBlCitwZ3BhX3Ryb3ZlCitwZ3BhX3Ryb3ZlX2VudHJ5CitwZ3Bh X3Ryb3ZlX2VudHJ5X2VsZW1lbnQKK3BncGFfdHJvdmVfZW50cnlfaGFzaAorcGdwYV90cm92ZV9l bnRyeV9rZXkKK3BncGFfdHJvdmVfbG9va3VwX3R5cGUKK3BncGFfdHJvdmVfcmVzdWx0CitwZ3Bh X3Ryb3ZlX3NsaWNlCitwZ3BhX3Vucm9sbGVkX2pvaW4KIHBnc29ja2V0CiBwZ3NxbF90aGluZ190 CiBwZ3NzRW50cnkKLS0gCjIuNTEuMAoK --000000000000d660ae0642ca34ae--