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 1rFIp9-009GFw-9S for pgsql-hackers@arkaria.postgresql.org; Mon, 18 Dec 2023 18:58:44 +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 1rFIp6-00BxRm-Ow for pgsql-hackers@arkaria.postgresql.org; Mon, 18 Dec 2023 18:58:40 +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 1rFIp6-00BxQb-11 for pgsql-hackers@lists.postgresql.org; Mon, 18 Dec 2023 18:58:40 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rFIox-00CfUn-Vq for pgsql-hackers@postgresql.org; Mon, 18 Dec 2023 18:58:39 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-a2339939573so240503566b.3 for ; Mon, 18 Dec 2023 10:58:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702925910; x=1703530710; darn=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=tnbvE2gDY//hjX9SaPJgbDk9uRRYgM9XoqLgHdQ+IfU=; b=Hzz4k+joTvkVvl07U3nZyMaH484C659c7uBxW2J/93UL+LRLgh6FBjc9Qi/K4XQwM2 W0KLYuXWK4hlpWm+XJCs7vHsTbdT4CWO3EJKD4aLIc5ugYD44G6NUWgOnOwXMWa2i2QD 4cxHAdYmG8wt0byp6jVdwGz8CEAQHZran5AxUG/k0PAFG24znUpDo1HIRZJtSeJ3tMUe V7JPniqwIqD78RV5pgmKqLbINLwjNgbZw1ossSUSCj5MNP3zPo4qAzpwDaV1FIMPwKpc IGC5xLqeebr4HGQLoNMo7mWiMiLJgPP/nZcgJ8ziKuZedJYD8gyWmfb97O1dO4rGet+L RVEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702925910; x=1703530710; 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=tnbvE2gDY//hjX9SaPJgbDk9uRRYgM9XoqLgHdQ+IfU=; b=QMf0ly3hngRqyphgPlzL1N4mnSetPnMqGwyODCbe7P6w4pyfxMRoNAW0zDfOOEqcB9 /dF5RLR/Ewg6RRggVDkmKg7hJVdktp1eiJgugtQ0iQNG7U4M5YNo1b2SX7OVDqOo1j5K TNGuKZ8tyW4z50lEomKnuVahNGhKpAm8rlNVh3YLhb5RHh6XRNQoVsdRlBcE9RJYarUI xVEahpaXiIhe7zR+wWtT31Icohy24xpO0A3reR9XBnPuaWWwIcptMfjd06pUA760pa92 Pb5qSjFXa8Uv/55O9UEnohVbqfS33LTW81OuwimyijNfM7+J9dJk8isL171eh/d2lzwF M6tQ== X-Gm-Message-State: AOJu0Yyx9JcewyYTNh5VZaAemHiDxzfamaBLGHsrl39MGPyncMjcPdCV FPPYwvMZyucF2Vp5cEQQIOvFwzpFUisBE0g68/A= X-Google-Smtp-Source: AGHT+IE6FBtxLqemBMomniqHSzrpnAIttH1jvAtOOTy3UVcJDYXJgOvktBh36mYOXFel+F1fZE6ta+vzerMRmDX+8K4= X-Received: by 2002:a17:907:9815:b0:a19:a19b:55f6 with SMTP id ji21-20020a170907981500b00a19a19b55f6mr10032722ejc.134.1702925910487; Mon, 18 Dec 2023 10:58:30 -0800 (PST) MIME-Version: 1.0 References: <202311131625.o7hzq3oukuyd@alvherre.pgsql> <1e3e7a09-5e3f-48b0-bd4a-5b9abda67ce2@eisentraut.org> In-Reply-To: <1e3e7a09-5e3f-48b0-bd4a-5b9abda67ce2@eisentraut.org> From: Robert Haas Date: Mon, 18 Dec 2023 13:58:17 -0500 Message-ID: Subject: Re: trying again to get incremental backup To: Peter Eisentraut Cc: Jakub Wartak , Alvaro Herrera , Andres Freund , Dilip Kumar , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="000000000000f974db060ccd558e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f974db060ccd558e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Dec 18, 2023 at 4:10=E2=80=AFAM Peter Eisentraut wrote: > Another set of comments, about the patch that adds pg_combinebackup: > > Make sure all the options are listed in a consistent order. We have > lately changed everything to be alphabetical. This includes: > > - reference page pg_combinebackup.sgml > > - long_options listing > > - getopt_long() argument > > - subsequent switch > > - (--help output, but it looks ok as is) > > Also, in pg_combinebackup.sgml, the option --sync-method is listed as if > it does not take an argument, but it does. I've attempted to clean this stuff up in the attached version. This version also includes a fix for the bug found by Jakub that caused things to not work properly for segment files beyond the first for any particular relation, which turns out to be a really stupid mistake in my earlier commit 025584a168a4b3002e193. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000f974db060ccd558e Content-Type: application/octet-stream; name="v15-0001-Fix-brown-paper-bag-bug-in-025584a168a4b3002e193.patch" Content-Disposition: attachment; filename="v15-0001-Fix-brown-paper-bag-bug-in-025584a168a4b3002e193.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqba3wz00 RnJvbSA2ZDc4ZmQwZDg1NDQyNWIwNDQyZjY5MzUwZDJmMjQxZWI5YmM3NjQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTggRGVjIDIwMjMgMTM6MTY6NTcgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSAx LzZdIEZpeCBicm93biBwYXBlciBiYWcgYnVnIGluCiAwMjU1ODRhMTY4YTRiMzAwMmUxOTM1MGJi OGRiMGViZjFmZDEwMjM1LgoKVGhlIHByZXZpb3VzIGxvZ2ljIGZhaWxlZCB0byB3b3JrIGZvciBh bnl0aGluZyBvdGhlciB0aGFuIHRoZSBmaXJzdApzZWdtZW50IG9mIGEgcmVsYXRpb24uCgpSZXBv cnQgYnkgSmFrdWIgV2FydGFrLiBQYXRjaCBieSBtZS4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdl L2ZpbGUvcmVpbml0LmMgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEg ZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvcmVpbml0 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvcmVpbml0LmMKaW5kZXggNWRmMjUxN2I0Ni4u NmU4ZWI3ODZkMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL3JlaW5pdC5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9yZWluaXQuYwpAQCAtNDMxLDcgKzQzMSw3 IEBAIHBhcnNlX2ZpbGVuYW1lX2Zvcl9ub250ZW1wX3JlbGF0aW9uKGNvbnN0IGNoYXIgKm5hbWUs IFJlbEZpbGVOdW1iZXIgKnJlbG51bWJlciwKIAllbHNlCiAJewogCQkvKiBSZWplY3QgbGVhZGlu ZyB6ZXJvZXMsIGp1c3QgbGlrZSB3ZSBkbyBmb3IgUmVsRmlsZU51bWJlci4gKi8KLQkJaWYgKG5h bWVbMF0gPCAnMScgfHwgbmFtZVswXSA+ICc5JykKKwkJaWYgKG5hbWVbMV0gPCAnMScgfHwgbmFt ZVsxXSA+ICc5JykKIAkJCXJldHVybiBmYWxzZTsKIAogCQllcnJubyA9IDA7Ci0tIAoyLjM5LjMg KEFwcGxlIEdpdC0xNDUpCgo= --000000000000f974db060ccd558e Content-Type: application/octet-stream; name="v15-0005-Add-new-pg_walsummary-tool.patch" Content-Disposition: attachment; filename="v15-0005-Add-new-pg_walsummary-tool.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqba3wzc4 RnJvbSA0NzMwYjM3NzA4ZjQxMTc0MDA1ZTIwMTZjOWIwMDkwYTFiZDMzNTcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjUgT2N0IDIwMjMgMTM6MDE6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNSA1 LzZdIEFkZCBuZXcgcGdfd2Fsc3VtbWFyeSB0b29sLgoKVGhpcyBjYW4gZHVtcCB0aGUgY29udGVu dHMgb2YgV0FMIHN1bW1hcnkgZmlsZXMsIGVpdGhlciB0aG9zZSBpbgpwZ193YWwvc3VtbWFyaWVz LCBvciB0aGUgSU5DUkVNRU5UQUxfQkFDS1VQIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YKYW4gaW5j cmVtZW50YWwgYmFja3VwIHByb3Blci4KClhYWC4gTmVlZHMgdGVzdHMuCi0tLQogZG9jL3NyYy9z Z21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3JlZi9w Z193YWxzdW1tYXJ5LnNnbWwgICAgfCAxMjIgKysrKysrKysrKysKIGRvYy9zcmMvc2dtbC9yZWZl cmVuY2Uuc2dtbCAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fs c3VtbWFyaXplci5jIHwgICA0ICstCiBzcmMvYmluL01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmluL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BnX3dhbHN1bW1hcnkvLmdpdGlnbm9yZSAgICAgICB8ICAgMSArCiBzcmMv YmluL3BnX3dhbHN1bW1hcnkvTWFrZWZpbGUgICAgICAgICB8ICA0MiArKysrCiBzcmMvYmluL3Bn X3dhbHN1bW1hcnkvbWVzb24uYnVpbGQgICAgICB8ICAyNCArKysKIHNyYy9iaW4vcGdfd2Fsc3Vt bWFyeS9ubHMubWsgICAgICAgICAgIHwgICA2ICsKIHNyYy9iaW4vcGdfd2Fsc3VtbWFyeS9wZ193 YWxzdW1tYXJ5LmMgIHwgMjgwICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAyICsKIDEyIGZpbGVzIGNoYW5nZWQsIDQ4 MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9z cmMvc2dtbC9yZWYvcGdfd2Fsc3VtbWFyeS5zZ21sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jp bi9wZ193YWxzdW1tYXJ5Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3Bn X3dhbHN1bW1hcnkvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3dhbHN1 bW1hcnkvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3dhbHN1bW1h cnkvbmxzLm1rCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L3BnX3dh bHN1bW1hcnkuYwoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCBmZGE0NjkwZWFiLi40YTQyOTk5 YjE4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCkBAIC0yMTksNiArMjE5LDcgQEAgQ29tcGxldGUg bGlzdCBvZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVO VElUWSBwZ3Rlc3R0aW1pbmcgICAgICAgU1lTVEVNICJwZ3Rlc3R0aW1pbmcuc2dtbCI+CiA8IUVO VElUWSBwZ3VwZ3JhZGUgICAgICAgICAgU1lTVEVNICJwZ3VwZ3JhZGUuc2dtbCI+CiA8IUVOVElU WSBwZ3dhbGR1bXAgICAgICAgICAgU1lTVEVNICJwZ193YWxkdW1wLnNnbWwiPgorPCFFTlRJVFkg cGd3YWxzdW1tYXJ5ICAgICAgIFNZU1RFTSAicGdfd2Fsc3VtbWFyeS5zZ21sIj4KIDwhRU5USVRZ IHBvc3RncmVzICAgICAgICAgICBTWVNURU0gInBvc3RncmVzLXJlZi5zZ21sIj4KIDwhRU5USVRZ IHBzcWxSZWYgICAgICAgICAgICBTWVNURU0gInBzcWwtcmVmLnNnbWwiPgogPCFFTlRJVFkgcmVp bmRleGRiICAgICAgICAgIFNZU1RFTSAicmVpbmRleGRiLnNnbWwiPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9wZ193YWxzdW1tYXJ5LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3dh bHN1bW1hcnkuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45M2Uy NjVlYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ193YWxzdW1tYXJ5 LnNnbWwKQEAgLTAsMCArMSwxMjIgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvcGdfd2Fsc3Vt bWFyeS5zZ21sCitQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9 ImFwcC1wZ3dhbHN1bW1hcnkiPgorIDxpbmRleHRlcm0gem9uZT0iYXBwLXBnd2Fsc3VtbWFyeSI+ CisgIDxwcmltYXJ5PnBnX3dhbHN1bW1hcnk8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8 cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+PGFwcGxpY2F0aW9uPnBnX3dhbHN1bW1hcnk8L2Fw cGxpY2F0aW9uPjwvcmVmZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT4xPC9tYW52b2xudW0+Cisg IDxyZWZtaXNjaW5mbz5BcHBsaWNhdGlvbjwvcmVmbWlzY2luZm8+CisgPC9yZWZtZXRhPgorCisg PHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPnBnX3dhbHN1bW1hcnk8L3JlZm5hbWU+CisgIDxyZWZw dXJwb3NlPnByaW50IGNvbnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZpbGVzPC9yZWZwdXJwb3NlPgor IDwvcmVmbmFtZWRpdj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKyAgPGNtZHN5bm9wc2lzPgorICAg PGNvbW1hbmQ+cGdfd2Fsc3VtbWFyeTwvY29tbWFuZD4KKyAgIDxhcmcgcmVwPSJyZXBlYXQiIGNo b2ljZT0ib3B0Ij48cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgIDxh cmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAg PC9jbWRzeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3QxPgorICA8dGl0 bGU+RGVzY3JpcHRpb248L3RpdGxlPgorICA8cGFyYT4KKyAgIDxhcHBsaWNhdGlvbj5wZ193YWxz dW1tYXJ5PC9hcHBsaWNhdGlvbj4gaXMgdXNlZCB0byBwcmludCB0aGUgY29udGVudHMgb2YKKyAg IFdBTCBzdW1tYXJ5IGZpbGVzLiBUaGVzZSBiaW5hcnkgZmlsZXMgYXJlIGZvdW5kIHdpdGggdGhl CisgICA8bGl0ZXJhbD5wZ193YWwvc3VtbWFyaWVzPC9saXRlcmFsPiBzdWJkaXJlY3Rvcnkgb2Yg dGhlIGRhdGEgZGlyZWN0b3J5LAorICAgYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gdGV4dCB1c2lu ZyB0aGlzIHRvb2wuIFRoaXMgaXMgbm90IG9yZGluYXJpbHkKKyAgIG5lY2Vzc2FyeSwgc2luY2Ug V0FMIHN1bW1hcnkgZmlsZXMgcHJpbWFyaWx5IGV4aXN0IHRvIHN1cHBvcnQKKyAgIDxsaW5rIGxp bmtlbmQ9ImJhY2t1cC1pbmNyZW1lbnRhbC1iYWNrdXAiPmluY3JlbWVudGFsIGJhY2t1cDwvbGlu az4sCisgICBidXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIFdBTCBzdW1tYXJ5IGZpbGUgaXMgaW5kZXhlZCBieSB0 YWJsZXNwYWNlIE9JRCwgcmVsYXRpb24gT0lELCBhbmQgcmVsYXRpb24KKyAgIGZvcmsuIEZvciBl YWNoIHJlbGF0aW9uIGZvcmssIGl0IHN0b3JlcyB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCB3ZXJl CisgICBtb2RpZmllZCBieSBXQUwgd2l0aGluIHRoZSByYW5nZSBzdW1tYXJpemVkIGluIHRoZSBm aWxlLiBJdCBjYW4gYWxzbworICAgc3RvcmUgYSAibGltaXQgYmxvY2ssIiB3aGljaCBpcyAwIGlm IHRoZSByZWxhdGlvbiBmb3JrIHdhcyBjcmVhdGVkIG9yCisgICB0cnVuY2F0ZWQgd2l0aGluIHRo ZSByZWxldmFudCBXQUwgcmFuZ2UsIGFuZCBvdGhlcndpc2UgdGhlIHNob3J0ZXN0IGxlbmd0aAor ICAgdG8gd2hpY2ggdGhlIHJlbGF0aW9uIGZvcmsgd2FzIHRydW5jYXRlZC4gSWYgdGhlIHJlbGF0 aW9uIGZvcmsgd2FzIG5vdAorICAgY3JlYXRlZCwgZGVsZXRlZCwgb3IgdHJ1bmNhdGVkIHdpdGhp biB0aGUgcmVsZXZhbnQgV0FMIHJhbmdlLCB0aGUgbGltaXQKKyAgIGJsb2NrIGlzIHVuZGVmaW5l ZCBvciBpbmZpbml0ZSBhbmQgd2lsbCBub3QgYmUgcHJpbnRlZCBieSB0aGlzIHRvb2wuCisgIDwv cGFyYT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+T3B0aW9uczwvdGl0 bGU+CisKKyAgIDxwYXJhPgorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT48b3B0aW9uPi1pPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9w dGlvbj4tLWluZGl2dWR1YWw8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIDxsaXRlcmFsPnBnX3dhbHN1bW1hcnk8L2xp dGVyYWw+IHByaW50cyBvbmUgbGluZSBvZiBvdXRwdXQKKyAgICAgICAgZm9yIGVhY2ggcmFuZ2Ug b2Ygb25lIG9yIG1vcmUgY29uc2VjdXRpdmUgbW9kaWZpZWQgYmxvY2tzLiBUaGlzIGNhbgorICAg ICAgICBtYWtlIHRoZSBvdXRwdXQgYSBsb3QgYnJpZWZlciwgc2luY2UgYSByZWxhdGlvbiB3aGVy ZSBhbGwgYmxvY2tzIGZyb20KKyAgICAgICAgMCB0aHJvdWdoIDk5OSB3ZXJlIG1vZGlmaWVkIHdp bGwgcHJvZHVjZSBvbmx5IG9uZSBsaW5lIG9mIG91dHB1dCByYXRoZXIKKyAgICAgICAgdGhhbiAx MDAwIHNlcGFyYXRlIGxpbmVzLiBUaGlzIG9wdGlvbiByZXF1ZXN0cyBhIHNlcGFyYXRlIGxpbmUg b2YKKyAgICAgICAgb3V0cHV0IGZvciBldmVyeSBtb2RpZmllZCBibG9jay4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tcTwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1xdWlldDwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHByaW50IGFueSBvdXRwdXQsIGV4Y2VwdCBm b3IgZXJyb3JzLiBUaGlzIGNhbiBiZSB1c2VmdWwKKyAgICAgICAgd2hlbiB5b3Ugd2FudCB0byBr bm93IHdoZXRoZXIgYSBXQUwgc3VtbWFyeSBmaWxlIGNhbiBiZSBzdWNjZXNzZnVsbHkKKyAgICAg ICAgcGFyc2VkIGJ1dCBkb24ndCBjYXJlIGFib3V0IHRoZSBjb250ZW50cy4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxvcHRpb24+LT88L29wdGlvbj48L3Rlcm0+CisgICAg ICAgPHRlcm0+PG9wdGlvbj4tLWhlbHA8L29wdGlvbj48L3Rlcm0+CisgICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgIFNob3dzIGhlbHAgYWJvdXQgPGFwcGxpY2F0aW9uPnBn X3dhbHN1bW1hcnk8L2FwcGxpY2F0aW9uPiBjb21tYW5kIGxpbmUKKyAgICAgICBhcmd1bWVudHMs IGFuZCBleGl0cy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvcGFyYT4KKworIDwvcmVm c2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5FbnZpcm9ubWVudDwvdGl0bGU+CisKKyAg PHBhcmE+CisgICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGVudmFyPlBHX0NPTE9SPC9lbnZh cj4gc3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlCisgICBjb2xvciBpbiBkaWFnbm9zdGljIG1lc3Nh Z2VzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisgICA8bGl0ZXJhbD5hbHdheXM8L2xpdGVyYWw+LCA8 bGl0ZXJhbD5hdXRvPC9saXRlcmFsPiBhbmQKKyAgIDxsaXRlcmFsPm5ldmVyPC9saXRlcmFsPi4K KyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxz bzwvdGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhy ZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPjwvbWVtYmVyPgorICAgPG1lbWJlcj48eHJl ZiBsaW5rZW5kPSJhcHAtcGdjb21iaW5lYmFja3VwIi8+PC9tZW1iZXI+CisgIDwvc2ltcGxlbGlz dD4KKyA8L3JlZnNlY3QxPgorCis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IGEwN2Qy YjVlMDEuLmFhOTRmNmFkZjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTI4OSw2ICsyODksNyBAQAog ICAgJnBndGVzdHRpbWluZzsKICAgICZwZ3VwZ3JhZGU7CiAgICAmcGd3YWxkdW1wOworICAgJnBn d2Fsc3VtbWFyeTsKICAgICZwb3N0Z3JlczsKIAogIDwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCA3Yzg0MGMzNmIzLi45ZmExNTUzNDllIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtMjkwLDcgKzI5MCw3IEBAIFdh bFN1bW1hcml6ZXJNYWluKHZvaWQpCiAJCUZsdXNoRXJyb3JTdGF0ZSgpOwogCiAJCS8qIEZsdXNo IGFueSBsZWFrZWQgZGF0YSBpbiB0aGUgdG9wLWxldmVsIGNvbnRleHQgKi8KLQkJTWVtb3J5Q29u dGV4dFJlc2V0QW5kRGVsZXRlQ2hpbGRyZW4oY29udGV4dCk7CisJCU1lbW9yeUNvbnRleHRSZXNl dChjb250ZXh0KTsKIAogCQkvKiBOb3cgd2UgY2FuIGFsbG93IGludGVycnVwdHMgYWdhaW4gKi8K IAkJUkVTVU1FX0lOVEVSUlVQVFMoKTsKQEAgLTM0Miw3ICszNDIsNyBAQCBXYWxTdW1tYXJpemVy TWFpbih2b2lkKQogCQlYTG9nUmVjUHRyCWVuZF9vZl9zdW1tYXJ5X2xzbjsKIAogCQkvKiBGbHVz aCBhbnkgbGVha2VkIGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250ZXh0ICovCi0JCU1lbW9yeUNv bnRleHRSZXNldEFuZERlbGV0ZUNoaWxkcmVuKGNvbnRleHQpOworCQlNZW1vcnlDb250ZXh0UmVz ZXQoY29udGV4dCk7CiAKIAkJLyogUHJvY2VzcyBhbnkgc2lnbmFscyByZWNlaXZlZCByZWNlbnRs eS4gKi8KIAkJSGFuZGxlV2FsU3VtbWFyaXplckludGVycnVwdHMoKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vTWFrZWZpbGUgYi9zcmMvYmluL01ha2VmaWxlCmluZGV4IGFhMjIxMDkyNWUuLmY5OGY1 OGQzOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9NYWtlZmls ZQpAQCAtMzEsNiArMzEsNyBAQCBTVUJESVJTID0gXAogCXBnX3VwZ3JhZGUgXAogCXBnX3Zlcmlm eWJhY2t1cCBcCiAJcGdfd2FsZHVtcCBcCisJcGdfd2Fsc3VtbWFyeSBcCiAJcGdiZW5jaCBcCiAJ cHNxbCBcCiAJc2NyaXB0cwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9tZXNvbi5idWlsZCBiL3NyYy9i aW4vbWVzb24uYnVpbGQKaW5kZXggNGNiNmZkNTliYi4uZDFlOWVmNDQwOSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsx Nyw3IEBAIHN1YmRpcigncGdfdGVzdF90aW1pbmcnKQogc3ViZGlyKCdwZ191cGdyYWRlJykKIHN1 YmRpcigncGdfdmVyaWZ5YmFja3VwJykKIHN1YmRpcigncGdfd2FsZHVtcCcpCitzdWJkaXIoJ3Bn X3dhbHN1bW1hcnknKQogc3ViZGlyKCdwZ2JlbmNoJykKIHN1YmRpcigncGdldmVudCcpCiBzdWJk aXIoJ3BzcWwnKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5Ly5naXRpZ25vcmUg Yi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5kNzFlYzE5MmZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z193YWxzdW1tYXJ5Ly5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorcGdfd2Fsc3VtbWFyeQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L01ha2VmaWxlIGIvc3JjL2Jpbi9wZ193YWxz dW1tYXJ5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg1 MmY3MjA4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvTWFrZWZp bGUKQEAgLTAsMCArMSw0MiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZpbGUgZm9y IHNyYy9iaW4vcGdfd2Fsc3VtbWFyeQorIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK KyMKKyMgc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCitQR0ZJTEVERVNDID0gInBnX3dhbHN1bW1hcnkgLSBwcmludCBjb250ZW50cyBvZiBXQUwg c3VtbWFyeSBmaWxlcyIKK1BHQVBQSUNPTj13aW4zMgorCitzdWJkaXIgPSBzcmMvYmluL3BnX3dh bHN1bW1hcnkKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGly KS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9z cmNkaXIpICQoQ1BQRkxBR1MpCitMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIp L3NyYy9mZV91dGlscyAtbHBnZmV1dGlscworCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlw Z193YWxzdW1tYXJ5Lm8KKworYWxsOiBwZ193YWxzdW1tYXJ5CisKK3BnX3dhbHN1bW1hcnk6ICQo T0JKUykgfCBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscworCSQoQ0MpICQo Q0ZMQUdTKSAkXiAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKKwor CitpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKKwkkKElOU1RBTExfUFJPR1JBTSkgcGdfd2Fsc3Vt bWFyeSQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcGdfd2Fsc3VtbWFyeSQoWCknCisKK2luc3Rh bGxkaXJzOgorCSQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknCisKK3VuaW5zdGFsbDoK KwlybSAtZiAnJChERVNURElSKSQoYmluZGlyKS9wZ193YWxzdW1tYXJ5JChYKScKKworY2xlYW4g ZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW46CisJcm0gLWYgcGdfd2Fsc3VtbWFyeSQoWCkgJChP QkpTKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L21lc29uLmJ1aWxkIGIvc3Jj L2Jpbi9wZ193YWxzdW1tYXJ5L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmMyMDkyOTYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dh bHN1bW1hcnkvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfd2Fsc3Vt bWFyeV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ193YWxzdW1tYXJ5LmMnLAorKQorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfd2Fsc3VtbWFyeV9zb3VyY2VzICs9IHJjX2Jpbl9n ZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdf d2Fsc3VtbWFyeScsCisgICAgJy0tRklMRURFU0MnLCAncGdfd2Fsc3VtbWFyeSAtIHByaW50IGNv bnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZpbGVzJyxdKQorZW5kaWYKKworcGdfd2Fsc3VtbWFyeSA9 IGV4ZWN1dGFibGUoJ3BnX3dhbHN1bW1hcnknLAorICBwZ193YWxzdW1tYXJ5X3NvdXJjZXMsCisg IGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGVdLAorICBrd2FyZ3M6IGRlZmF1bHRfYmluX2Fy Z3MsCispCitiaW5fdGFyZ2V0cyArPSBwZ193YWxzdW1tYXJ5CisKK3Rlc3RzICs9IHsKKyAgJ25h bWUnOiAncGdfd2Fsc3VtbWFyeScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rpcigp LAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpCit9CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3dhbHN1bW1hcnkvbmxzLm1rIGIvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L25scy5tawpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mNDExZGNmZTllCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L25scy5tawpAQCAtMCwwICsxLDYgQEAK KyMgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL25scy5taworQ0FUQUxPR19OQU1FICAgICA9IHBn X3dhbHN1bW1hcnkKK0dFVFRFWFRfRklMRVMgICAgPSAkKEZST05URU5EX0NPTU1PTl9HRVRURVhU X0ZJTEVTKSBcCisJCSAgIHBnX3dhbHN1bW1hcnkuYworR0VUVEVYVF9UUklHR0VSUyA9ICQoRlJP TlRFTkRfQ09NTU9OX0dFVFRFWFRfVFJJR0dFUlMpCitHRVRURVhUX0ZMQUdTICAgID0gJChGUk9O VEVORF9DT01NT05fR0VUVEVYVF9GTEFHUykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2Fsc3Vt bWFyeS9wZ193YWxzdW1tYXJ5LmMgYi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvcGdfd2Fsc3VtbWFy eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBjMDIyNWVlYjgKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvcGdfd2Fsc3VtbWFyeS5jCkBA IC0wLDAgKzEsMjgwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ193YWxzdW1tYXJ5 LmMKKyAqCQlQcmludHMgdGhlIGNvbnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZpbGVzLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNy0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iaW4vcGdfd2Fsc3VtbWFyeS9w Z193YWxzdW1tYXJ5LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor CisjaW5jbHVkZSAiY29tbW9uL2Jsa3JlZnRhYmxlLmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dp bmcuaCIKKyNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJsaWIv c3RyaW5naW5mby5oIgorI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisKK3R5cGVkZWYgc3RydWN0 IHdzX29wdGlvbnMKK3sKKwlib29sCQlpbmRpdmlkdWFsOworCWJvb2wJCXF1aWV0OworfSB3c19v cHRpb25zOworCit0eXBlZGVmIHN0cnVjdCB3c19maWxlX2luZm8KK3sKKwlpbnQJCQlmZDsKKwlj aGFyCSAgICpmaWxlbmFtZTsKK30gd3NfZmlsZV9pbmZvOworCitzdGF0aWMgQmxvY2tOdW1iZXIg KmJsb2NrX2J1ZmZlciA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgYmxvY2tfYnVmZmVyX3NpemUg PSA1MTI7CS8qIEluaXRpYWwgc2l6ZS4gKi8KKworc3RhdGljIHZvaWQgZHVtcF9vbmVfcmVsYXRp b24od3Nfb3B0aW9ucyAqb3B0LCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IsCisJCQkJCQkJICBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrLAorCQkJCQkJCSAgQmxv Y2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyKTsKK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAq cHJvZ25hbWUpOworc3RhdGljIGludAljb21wYXJlX2Jsb2NrX251bWJlcnMoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYik7CitzdGF0aWMgaW50CXdhbHN1bW1hcnlfcmVhZF9jYWxsYmFjayh2 b2lkICpjYWxsYmFja19hcmcsIHZvaWQgKmRhdGEsCisJCQkJCQkJCQkgaW50IGxlbmd0aCk7Citz dGF0aWMgdm9pZCB3YWxzdW1tYXJ5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmNhbGxiYWNrX2FyZywg Y2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKKworLyoKKyAqIE1haW4g cHJvZ3JhbS4KKyAqLworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3Rh dGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsiaW5kaXZpZHVhbCIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnaSd9LAorCQl7InF1aWV0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdx J30sCisJCXtOVUxMLCAwLCBOVUxMLCAwfQorCX07CisKKwljb25zdCBjaGFyICpwcm9nbmFtZTsK KwlpbnQJCQlvcHRpbmRleDsKKwlpbnQJCQljOworCXdzX29wdGlvbnMJb3B0OworCisJbWVtc2V0 KCZvcHQsIDAsIHNpemVvZih3c19vcHRpb25zKSk7CisKKwlwZ19sb2dnaW5nX2luaXQoYXJndlsw XSk7CisJcHJvZ25hbWUgPSBnZXRfcHJvZ25hbWUoYXJndlswXSk7CisJaGFuZGxlX2hlbHBfdmVy c2lvbl9vcHRzKGFyZ2MsIGFyZ3YsIHByb2duYW1lLCBoZWxwKTsKKworCS8qIHByb2Nlc3MgY29t bWFuZC1saW5lIG9wdGlvbnMgKi8KKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAiZjppcXc6IiwKKwkJCQkJCQlsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXsK KwkJc3dpdGNoIChjKQorCQl7CisJCQljYXNlICdpJzoKKwkJCQlvcHQuaW5kaXZpZHVhbCA9IHRy dWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdxJzoKKwkJCQlvcHQucXVpZXQgPSB0cnVlOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQg YSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9 CisKKwlpZiAob3B0aW5kID49IGFyZ2MpCisJeworCQlwZ19sb2dfZXJyb3IoIiVzOiBubyBpbnB1 dCBmaWxlcyBzcGVjaWZpZWQiLCBwcm9nbmFtZSk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXQo MSk7CisJfQorCisJd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJeworCQl3c19maWxlX2luZm8gd3M7 CisJCUJsb2NrUmVmVGFibGVSZWFkZXIgKnJlYWRlcjsKKwkJUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3I7CisJCUZvcmtOdW1iZXIJZm9ya251bTsKKwkJQmxvY2tOdW1iZXIgbGltaXRfYmxvY2s7CisK KwkJd3MuZmlsZW5hbWUgPSBhcmd2W29wdGluZCsrXTsKKwkJaWYgKCh3cy5mZCA9IG9wZW4od3Mu ZmlsZW5hbWUsIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKSkgPCAwKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHdzLmZpbGVuYW1lKTsKKworCQlyZWFkZXIg PSBDcmVhdGVCbG9ja1JlZlRhYmxlUmVhZGVyKHdhbHN1bW1hcnlfcmVhZF9jYWxsYmFjaywgJndz LAorCQkJCQkJCQkJCSAgIHdzLmZpbGVuYW1lLAorCQkJCQkJCQkJCSAgIHdhbHN1bW1hcnlfZXJy b3JfY2FsbGJhY2ssIE5VTEwpOworCQl3aGlsZSAoQmxvY2tSZWZUYWJsZVJlYWRlck5leHRSZWxh dGlvbihyZWFkZXIsICZybG9jYXRvciwgJmZvcmtudW0sCisJCQkJCQkJCQkJCSAgICZsaW1pdF9i bG9jaykpCisJCQlkdW1wX29uZV9yZWxhdGlvbigmb3B0LCAmcmxvY2F0b3IsIGZvcmtudW0sIGxp bWl0X2Jsb2NrLCByZWFkZXIpOworCisJCURlc3Ryb3lCbG9ja1JlZlRhYmxlUmVhZGVyKHJlYWRl cik7CisJCWNsb3NlKHdzLmZkKTsKKwl9CisKKwlleGl0KDApOworfQorCisvKgorICogRHVtcCBk ZXRhaWxzIGZvciBvbmUgcmVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitkdW1wX29uZV9yZWxh dGlvbih3c19vcHRpb25zICpvcHQsIFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwKKwkJCQkgIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbGltaXRfYmxvY2ssCisJCQkJICBCbG9ja1Jl ZlRhYmxlUmVhZGVyICpyZWFkZXIpCit7CisJdW5zaWduZWQJaSA9IDA7CisJdW5zaWduZWQJbmJs b2NrczsKKwlCbG9ja051bWJlciBzdGFydGJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCUJs b2NrTnVtYmVyIGVuZGJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJLyogRHVtcCBsaW1p dCBibG9jaywgaWYgYW55LiAqLworCWlmIChsaW1pdF9ibG9jayAhPSBJbnZhbGlkQmxvY2tOdW1i ZXIpCisJCXByaW50ZigiVFMgJXUsIERCICV1LCBSRUwgJXUsIEZPUksgJXM6IGxpbWl0ICV1XG4i LAorCQkJICAgcmxvY2F0b3ItPnNwY09pZCwgcmxvY2F0b3ItPmRiT2lkLCBybG9jYXRvci0+cmVs TnVtYmVyLAorCQkJICAgZm9ya05hbWVzW2ZvcmtudW1dLCBsaW1pdF9ibG9jayk7CisKKwkvKiBJ ZiB3ZSBoYXZlbid0IGFsbG9jYXRlZCBhIGJsb2NrIGJ1ZmZlciB5ZXQsIGRvIHRoYXQgbm93LiAq LworCWlmIChibG9ja19idWZmZXIgPT0gTlVMTCkKKwkJYmxvY2tfYnVmZmVyID0gcGFsbG9jX2Fy cmF5KEJsb2NrTnVtYmVyLCBibG9ja19idWZmZXJfc2l6ZSk7CisKKwkvKiBUcnkgdG8gZmlsbCB0 aGUgYmxvY2sgYnVmZmVyLiAqLworCW5ibG9ja3MgPSBCbG9ja1JlZlRhYmxlUmVhZGVyR2V0Qmxv Y2tzKHJlYWRlciwKKwkJCQkJCQkJCQkgICBibG9ja19idWZmZXIsCisJCQkJCQkJCQkJICAgYmxv Y2tfYnVmZmVyX3NpemUpOworCisJLyogSWYgd2UgZmlsbGVkIHRoZSBibG9jayBidWZmZXIgY29t cGxldGVseSwgd2UgbXVzdCBlbmxhcmdlIGl0LiAqLworCXdoaWxlIChuYmxvY2tzID49IGJsb2Nr X2J1ZmZlcl9zaXplKQorCXsKKwkJdW5zaWduZWQJbmV3X3NpemU7CisKKwkJLyogRG91YmxlIHRo ZSBzaXplLCBiZWluZyBjYXJlZnVsIGFib3V0IG92ZXJmbG93LiAqLworCQluZXdfc2l6ZSA9IGJs b2NrX2J1ZmZlcl9zaXplICogMjsKKwkJaWYgKG5ld19zaXplIDwgYmxvY2tfYnVmZmVyX3NpemUp CisJCQluZXdfc2l6ZSA9IFBHX1VJTlQzMl9NQVg7CisJCWJsb2NrX2J1ZmZlciA9IHJlcGFsbG9j X2FycmF5KGJsb2NrX2J1ZmZlciwgQmxvY2tOdW1iZXIsIG5ld19zaXplKTsKKworCQkvKiBUcnkg dG8gZmlsbCB0aGUgbmV3bHktYWxsb2NhdGVkIHNwYWNlLiAqLworCQluYmxvY2tzICs9CisJCQlC bG9ja1JlZlRhYmxlUmVhZGVyR2V0QmxvY2tzKHJlYWRlciwKKwkJCQkJCQkJCQkgYmxvY2tfYnVm ZmVyICsgYmxvY2tfYnVmZmVyX3NpemUsCisJCQkJCQkJCQkJIG5ld19zaXplIC0gYmxvY2tfYnVm ZmVyX3NpemUpOworCisJCS8qIFNhdmUgdGhlIG5ldyBzaXplIGZvciBsYXRlciBjYWxscy4gKi8K KwkJYmxvY2tfYnVmZmVyX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBJZiB3ZSBkb24ndCBu ZWVkIHRvIHByb2R1Y2UgYW55IG91dHB1dCwgc2tpcCB0aGUgcmVzdCBvZiB0aGlzLiAqLworCWlm IChvcHQtPnF1aWV0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNvcnQgdGhlIHJldHVybmVkIGJs b2NrIG51bWJlcnMuIElmIHRoZSBibG9jayByZWZlcmVuY2UgdGFibGUgd2FzIHVzaW5nCisJICog dGhlIGJpdG1hcCByZXByZXNlbnRhdGlvbiBmb3IgYSBnaXZlbiBjaHVuaywgdGhlIGJsb2NrIG51 bWJlcnMgaW4gdGhhdAorCSAqIGNodW5rIHdpbGwgYWxyZWFkeSBiZSBzb3J0ZWQsIGJ1dCB3aGVu IHRoZSBhcnJheS1vZi1vZmZzZXRzCisJICogcmVwcmVzZW50YXRpb24gaXMgdXNlZCwgd2UgY2Fu IHJlY2VpdmUgYmxvY2sgbnVtYmVycyBoZXJlIG91dCBvZiBvcmRlci4KKwkgKi8KKwlxc29ydChi bG9ja19idWZmZXIsIG5ibG9ja3MsIHNpemVvZihCbG9ja051bWJlciksIGNvbXBhcmVfYmxvY2tf bnVtYmVycyk7CisKKwkvKiBEdW1wIGJsb2NrIHJlZmVyZW5jZXMuICovCisJd2hpbGUgKGkgPCBu YmxvY2tzKQorCXsKKwkJLyoKKwkJICogRmluZCB0aGUgbmV4dCByYW5nZSBvZiBibG9ja3MgdG8g cHJpbnQsIGJ1dCBpZiAtLWluZGl2aWR1YWwgd2FzCisJCSAqIHNwZWNpZmllZCwgdGhlbiBjb25z aWRlciBlYWNoIGJsb2NrIGEgc2VwYXJhdGUgcmFuZ2UuCisJCSAqLworCQlzdGFydGJsb2NrID0g ZW5kYmxvY2sgPSBibG9ja19idWZmZXJbaSsrXTsKKwkJaWYgKCFvcHQtPmluZGl2aWR1YWwpCisJ CXsKKwkJCXdoaWxlIChpIDwgbmJsb2NrcyAmJiBibG9ja19idWZmZXJbaV0gPT0gZW5kYmxvY2sg KyAxKQorCQkJeworCQkJCWVuZGJsb2NrKys7CisJCQkJaSsrOworCQkJfQorCQl9CisKKwkJLyog Rm9ybWF0IHRoaXMgcmFuZ2Ugb2YgYmxvY2sgbnVtYmVycyBhcyBhIHN0cmluZy4gKi8KKwkJaWYg KHN0YXJ0YmxvY2sgPT0gZW5kYmxvY2spCisJCQlwcmludGYoIlRTICV1LCBEQiAldSwgUkVMICV1 LCBGT1JLICVzOiBibG9jayAldVxuIiwKKwkJCQkgICBybG9jYXRvci0+c3BjT2lkLCBybG9jYXRv ci0+ZGJPaWQsIHJsb2NhdG9yLT5yZWxOdW1iZXIsCisJCQkJICAgZm9ya05hbWVzW2ZvcmtudW1d LCBzdGFydGJsb2NrKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJUUyAldSwgREIgJXUsIFJFTCAldSwg Rk9SSyAlczogYmxvY2tzICV1Li4ldVxuIiwKKwkJCQkgICBybG9jYXRvci0+c3BjT2lkLCBybG9j YXRvci0+ZGJPaWQsIHJsb2NhdG9yLT5yZWxOdW1iZXIsCisJCQkJICAgZm9ya05hbWVzW2Zvcmtu dW1dLCBzdGFydGJsb2NrLCBlbmRibG9jayk7CisJfQorfQorCisvKgorICogUXVpY2tzb3J0IGNv bXBhcmF0b3IgZm9yIGJsb2NrIG51bWJlcnMuCisgKi8KK3N0YXRpYyBpbnQKK2NvbXBhcmVfYmxv Y2tfbnVtYmVycyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCUJsb2NrTnVtYmVy IGFhID0gKihCbG9ja051bWJlciAqKSBhOworCUJsb2NrTnVtYmVyIGJiID0gKihCbG9ja051bWJl ciAqKSBiOworCisJaWYgKGFhID4gYmIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGFhID09IGJi KQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoKKyAqIEVycm9yIGNh bGxiYWNrLgorICovCit2b2lkCit3YWxzdW1tYXJ5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmNhbGxi YWNrX2FyZywgY2hhciAqZm10LC4uLikKK3sKKwl2YV9saXN0CQlhcDsKKworCXZhX3N0YXJ0KGFw LCBmbXQpOworCXBnX2xvZ19nZW5lcmljX3YoUEdfTE9HX0VSUk9SLCBQR19MT0dfUFJJTUFSWSwg Zm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWV4aXQoMSk7Cit9CisKKy8qCisgKiBSZWFkIGNh bGxiYWNrLgorICovCitpbnQKK3dhbHN1bW1hcnlfcmVhZF9jYWxsYmFjayh2b2lkICpjYWxsYmFj a19hcmcsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJd3NfZmlsZV9pbmZvICp3cyA9IGNh bGxiYWNrX2FyZzsKKwlpbnQJCQlyYzsKKworCWlmICgocmMgPSByZWFkKHdzLT5mZCwgZGF0YSwg bGVuZ3RoKSkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVt Iiwgd3MtPmZpbGVuYW1lKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIGhlbHAKKyAqCisg KiBQcmludHMgaGVscCBwYWdlIGZvciB0aGUgcHJvZ3JhbQorICoKKyAqIHByb2duYW1lOiB0aGUg bmFtZSBvZiB0aGUgZXhlY3V0ZWQgcHJvZ3JhbSwgc3VjaCBhcyAicGdfd2Fsc3VtbWFyeSIKKyAq Lworc3RhdGljIHZvaWQKK2hlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJcHJpbnRmKF8o IiVzIHByaW50cyB0aGUgY29udGVudHMgb2YgYSBXQUwgc3VtbWFyeSBmaWxlLlxuXG4iKSwgcHJv Z25hbWUpOworCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKKwlwcmludGYoXygiICAlcyBbT1BUSU9O XS4uLiBGSUxFLi4uXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7 CisJcHJpbnRmKF8oIiAgLWksIC0taW5kaXZpZHVhbCAgICAgICAgICBsaXN0IGJsb2NrIG51bWJl cnMgaW5kaXZpZHVhbGx5LCBub3QgYXMgcmFuZ2VzXG4iKSk7CisJcHJpbnRmKF8oIiAgLXEsIC0t cXVpZXQgICAgICAgICAgICAgICBkb24ndCBwcmludCBhbnl0aGluZywganVzdCBwYXJzZSB0aGUg ZmlsZXNcbiIpKTsKKwlwcmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAgICAgICAgIHNob3cg dGhpcyBoZWxwLCB0aGVuIGV4aXRcbiIpKTsKKworCXByaW50ZihfKCJcblJlcG9ydCBidWdzIHRv IDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworCXByaW50ZihfKCIlcyBob21lIHBhZ2U6 IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggZTM3ZWY5YWE3Ni4uODZlMGE4NjUwMyAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTQwMzUsMyArNDAzNSw1IEBAIGNiX3RhYmxlc3BhY2VfbWFwcGluZwogbWFu aWZlc3RfZGF0YQogbWFuaWZlc3Rfd3JpdGVyCiByZmlsZQord3Nfb3B0aW9ucword3NfZmlsZV9p bmZvCi0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDUpCgo= --000000000000f974db060ccd558e Content-Type: application/octet-stream; name="v15-0003-Add-a-new-WAL-summarizer-process.patch" Content-Disposition: attachment; filename="v15-0003-Add-a-new-WAL-summarizer-process.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqba3wzb2 RnJvbSBkODgwMTRjZDJiZTNhY2UwMjI1MTFiZjcxNWYzMWYwNWRlNTAzYzc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjUgT2N0IDIwMjMgMTI6NTc6MjIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNSAz LzZdIEFkZCBhIG5ldyBXQUwgc3VtbWFyaXplciBwcm9jZXNzLgpNSU1FLVZlcnNpb246IDEuMApD b250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1F bmNvZGluZzogOGJpdAoKV2hlbiBhY3RpdmUsIHRoaXMgcHJvY2VzcyB3cml0ZXMgV0FMIHN1bW1h cnkgZmlsZXMgdG8KJFBHREFUQS9wZ193YWwvc3VtbWFyaWVzLiBFYWNoIHN1bW1hcnkgZmlsZSBj b250YWlucyBpbmZvcm1hdGlvbiBmb3IgYQpjZXJ0YWluIHJhbmdlIG9mIExTTnMgb24gYSBjZXJ0 YWluIFRMSS4gRm9yIGVhY2ggcmVsYXRpb24sIGl0IHN0b3JlcyBhCiJsaW1pdCBibG9jayIgd2hp Y2ggaXMgMCBpZiBhIHJlbGF0aW9uIGlzIGNyZWF0ZWQgb3IgZGVzdHJveWVkIHdpdGhpbgphIGNl cnRhaW4gcmFuZ2Ugb2YgV0FMIHJlY29yZHMsIG9yIG90aGVyd2lzZSB0aGUgc2hvcnRlc3QgbGVu Z3RoIHRvCndoaWNoIHRoZSByZWxhdGlvbiB3YXMgdHJ1bmNhdGVkIGR1cmluZyB0aGF0IHJhbmdl IG9mIFdBTCByZWNvcmRzLCBvcgpvdGhlcndpc2UgSW52YWxpZEJsb2NrTnVtYmVyLiBJbiBhZGRp dGlvbiwgaXQgc3RvcmVzIGEgbGlzdCBvZiBibG9ja3MKd2hpY2ggaGF2ZSBiZWVuIG1vZGlmaWVk IGR1cmluZyB0aGF0IHJhbmdlIG9mIFdBTCByZWNvcmRzLCBidXQKZXhjbHVkaW5nIGJsb2NrcyB3 aGljaCB3ZXJlIHJlbW92ZWQgYnkgdHJ1bmNhdGlvbiBhZnRlciB0aGV5IHdlcmUKbW9kaWZpZWQg YW5kIG5ldmVyIHN1YnNlcXVlbnRseSBtb2RpZmllZCBhZ2Fpbi4gSW4gb3RoZXIgd29yZHMsIGl0 CnRlbGxzIHVzIHdoaWNoIGJsb2NrcyBuZWVkIHRvIGNvcGllZCBpbiBjYXNlIG9mIGFuIGluY3Jl bWVudGFsIGJhY2t1cApjb3ZlcmluZyB0aGF0IHJhbmdlIG9mIFdBTCByZWNvcmRzLgoKQSBuZXcg cGFyYW1ldGVyIHN1bW1hcml6ZV93YWwgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIG5ldyBiYWNr Z3JvdW5kCnByb2Nlc3MuICBUaGUgYmFja2dyb3VuZCBwcm9jZXNzIGFsc28gYXV0b21hdGljYWxs eSBkZWxldGVzIHN1bW1hcnkKZmlsZXMgdGhhdCBhcmUgb2xkZXIgdGhhbiB3YWxfc3VtbWFyaXpl X2tlZXBfdGltZSwgaWYgdGhhdCBwYXJhbWV0ZXIKaGFzIGEgbm9uLXplcm8gdmFsdWUgYW5kIHRo ZSBzdW1tYXJpemVyIGlzIGNvbmZpZ3VyZWQgdG8gcnVuLgoKUGF0Y2ggYnkgbWUsIHdpdGggc29t ZSBkZXNpZ24gaGVscCBmcm9tIERpbGlwIEt1bWFyLiAgUmV2aWV3ZWQgYnkKTWF0dGhpYXMgdmFu IGRlIE1lZW50LCBEaWxpcCBLdW1hciwgSmFrdWIgV2FydGFrLCBQZXRlciBFaXNlbnRyYXV0LAph bmQgw4FsdmFybyBIZXJyZXJhLgotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAg ICAgICAgICAgICAgICB8ICAgNjEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j ICAgICAgICAgICAgIHwgIDEwMSArLQogc3JjL2JhY2tlbmQvYmFja3VwL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYmFja3VwL21lc29uLmJ1aWxkICAg ICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3VtbWFyeS5jICAg ICAgICAgICAgICAgfCAgMzU2ICsrKysrCiBzcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3VtbWFyeWZ1 bmNzLmMgICAgICAgICAgfCAgMTY5ICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxl ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vz cy5jICAgICAgICAgICB8ICAgIDggKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWls ZCAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YyAgICAgICAgICAgfCAgIDU2ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXpl ci5jICAgICAgICB8IDEzOTggKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9sd2xvY2tuYW1lcy50eHQgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvcGdzdGF0X2lvLmMgICAgICAgIHwgICAgNCArLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnRfbmFtZXMudHh0ICAgICAgIHwgICAgNSArCiBzcmMvYmFja2VuZC91dGlscy9pbml0 L21pc2Npbml0LmMgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMjYgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgNSArCiBzcmMvYmluL2luaXRkYi9pbml0ZGIuYyAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9jb21tb24vTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2NvbW1vbi9ibGtyZWZ0YWJsZS5jICAg ICAgICAgICAgICAgICAgICAgIHwgMTMwOCArKysrKysrKysrKysrKysKIHNyYy9jb21tb24vbWVz b24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9iYWNr dXAvd2Fsc3VtbWFyeS5oICAgICAgICAgICAgICAgfCAgIDQ5ICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgMTkgKwogc3JjL2luY2x1ZGUvY29tbW9u L2Jsa3JlZnRhYmxlLmggICAgICAgICAgICAgIHwgIDExNiArKwogc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9wb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuaCAgICAgICAgfCAgIDMzICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2d1 Y190YWJsZXMuaCAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxMSArCiAzMCBmaWxlcyBjaGFuZ2VkLCAzNzQz IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL2JhY2t1cC93YWxzdW1tYXJ5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9iYWNrdXAvd2Fsc3VtbWFyeWZ1bmNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21t b24vYmxrcmVmdGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2JhY2t1cC93 YWxzdW1tYXJ5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tb24vYmxrcmVm dGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5oCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDQ0Y2FkYTJiNDAuLmVlOTg1ODUwMjcgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKQEAgLTQxNTAsNiArNDE1MCw2NyBAQCByZXN0b3JlX2NvbW1hbmQgPSAnY29weSAiQzpcXHNl cnZlclxcYXJjaGl2ZWRpclxcJWYiICIlcCInICAjIFdpbmRvd3MKICAgICA8L3ZhcmlhYmxlbGlz dD4KICAgIDwvc2VjdDI+CiAKKyAgIDxzZWN0MiBpZD0icnVudGltZS1jb25maWctd2FsLXN1bW1h cml6YXRpb24iPgorICAgIDx0aXRsZT5XQUwgU3VtbWFyaXphdGlvbjwvdGl0bGU+CisKKyA8IS0t CisgICAgPHBhcmE+CisgICAgIFRoZXNlIHNldHRpbmdzIGNvbnRyb2wgV0FMIHN1bW1hcml6YXRp b24sIGEgZmVhdHVyZSB3aGljaCBtdXN0IGJlCisgICAgIGVuYWJsZWQgaW4gb3JkZXIgdG8gcGVy Zm9ybSBhbgorICAgICA8bGluayBsaW5rZW5kPSJiYWNrdXAtaW5jcmVtZW50YWwtYmFja3VwIj5p bmNyZW1lbnRhbCBiYWNrdXA8L2xpbms+LgorICAgIDwvcGFyYT4KKyAtLT4KKworICAgIDx2YXJp YWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1zdW1tYXJpemUtd2FsIiB4cmVm bGFiZWw9InN1bW1hcml6ZV93YWwiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+c3VtbWFyaXplX3dh bDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAg ICAgICA8cHJpbWFyeT48dmFybmFtZT5zdW1tYXJpemVfd2FsPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJt PgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBFbmFibGVzIHRoZSBXQUwg c3VtbWFyaXplciBwcm9jZXNzLiBOb3RlIHRoYXQgV0FMIHN1bW1hcml6YXRpb24gY2FuCisgICAg ICAgYmUgZW5hYmxlZCBlaXRoZXIgb24gYSBwcmltYXJ5IG9yIG9uIGEgc3RhbmRieS4gV0FMIHN1 bW1hcml6YXRpb24KKyAgICAgICBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIDx2YXJuYW1lPndhbF9s ZXZlbDwvdmFybmFtZT4gaXMgc2V0IHRvCisgICAgICAgPGxpdGVyYWw+bWluaW1hbDwvbGl0ZXJh bD4uICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgPGZpbGVu YW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21t YW5kIGxpbmUuCisgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPi4K KyAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy13YWwtc3VtbWFyeS1rZWVwLXRpbWUiIHhyZWZs YWJlbD0id2FsX3N1bW1hcnlfa2VlcF90aW1lIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPndhbF9z dW1tYXJ5X2tlZXBfdGltZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT53YWxfc3VtbWFyeV9rZWVwX3Rp bWU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9p bmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgor ICAgICAgIENvbmZpZ3VyZXMgdGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHdoaWNoIHRoZSBXQUwg c3VtbWFyaXplcgorICAgICAgIGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBvbGQgV0FMIHN1bW1hcmll cy4gVGhlIGZpbGUgdGltZXN0YW1wIGlzIHVzZWQgdG8KKyAgICAgICBkZXRlcm1pbmUgd2hpY2gg ZmlsZXMgYXJlIG9sZCBlbm91Z2ggdG8gcmVtb3ZlLiBUeXBpY2FsbHksIHlvdSBzaG91bGQgc2V0 CisgICAgICAgdGhpcyBjb21mb3J0YWJseSBoaWdoZXIgdGhhbiB0aGUgdGltZSB0aGF0IGNvdWxk IHBhc3MgYmV0d2VlbiBhIGJhY2t1cAorICAgICAgIGFuZCBhIGxhdGVyIGluY3JlbWVudGFsIGJh Y2t1cCB0aGF0IGRlcGVuZHMgb24gaXQuICBXQUwgc3VtbWFyaWVzIG11c3QKKyAgICAgICBiZSBh dmFpbGFibGUgZm9yIHRoZSBlbnRpcmUgcmFuZ2Ugb2YgV0FMIHJlY29yZHMgYmV0d2VlbiB0aGUg cHJlY2VkaW5nCisgICAgICAgYmFja3VwIGFuZCB0aGUgbmV3IG9uZSBiZWluZyB0YWtlbjsgaWYg bm90LCB0aGUgaW5jcmVtZW50YWwgYmFja3VwIHdpbGwKKyAgICAgICBmYWlsLiBJZiB0aGlzIHBh cmFtZXRlciBpcyBzZXQgdG8gemVybywgV0FMIHN1bW1hcmllcyB3aWxsIG5vdCBiZQorICAgICAg IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCwgYnV0IGl0IGlzIHNhZmUgdG8gbWFudWFsbHkgcmVtb3Zl IGZpbGVzIHRoYXQgeW91CisgICAgICAga25vdyB3aWxsIG5vdCBiZSByZXF1aXJlZCBmb3IgZnV0 dXJlIGluY3JlbWVudGFsIGJhY2t1cHMuCisgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkg YmUgc2V0IGluIHRoZQorICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1l PiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZCBsaW5lLgorICAgICAgIFRoZSBkZWZhdWx0 IGlzIDEwIGRheXMuIElmIDxsaXRlcmFsPnN1bW1hcml6ZV93YWwgPSBvZmY8L2xpdGVyYWw+LAor ICAgICAgIGV4aXN0aW5nIFdBTCBzdW1tYXJpZXMgd2lsbCBub3QgYmUgcmVtb3ZlZCByZWdhcmRs ZXNzIG9mIHRoZSB2YWx1ZSBvZgorICAgICAgIHRoaXMgcGFyYW1ldGVyLCBiZWNhdXNlIHRoZSBX QUwgc3VtbWFyaXplciB3aWxsIG5vdCBydW4uCisgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDwvdmFyaWFibGVsaXN0PgorCisgICA8 L3NlY3QyPgorCiAgICA8L3NlY3QxPgogCiAgICA8c2VjdDEgaWQ9InJ1bnRpbWUtY29uZmlnLXJl cGxpY2F0aW9uIj4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAwMWUwNDg0NTg0Li40 MjFhMDE2Y2ExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03Nyw2ICs3Nyw3IEBA CiAjaW5jbHVkZSAicG9ydC9wZ19pb3ZlYy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0 ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKKyNpbmNsdWRlICJwb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9v cmlnaW4uaCIKQEAgLTM1ODksNiArMzU5MCw0MyBAQCBYTG9nR2V0TGFzdFJlbW92ZWRTZWdubyh2 b2lkKQogCXJldHVybiBsYXN0UmVtb3ZlZFNlZ05vOwogfQogCisvKgorICogUmV0dXJuIHRoZSBv bGRlc3QgV0FMIHNlZ21lbnQgb24gdGhlIGdpdmVuIFRMSSB0aGF0IHN0aWxsIGV4aXN0cyBpbgor ICogWExPR0RJUiwgb3IgMCBpZiBub25lLgorICovCitYTG9nU2VnTm8KK1hMb2dHZXRPbGRlc3RT ZWdubyhUaW1lTGluZUlEIHRsaSkKK3sKKwlESVIJCSAgICp4bGRpcjsKKwlzdHJ1Y3QgZGlyZW50 ICp4bGRlOworCVhMb2dTZWdObwlvbGRlc3Rfc2Vnbm8gPSAwOworCisJeGxkaXIgPSBBbGxvY2F0 ZURpcihYTE9HRElSKTsKKwl3aGlsZSAoKHhsZGUgPSBSZWFkRGlyKHhsZGlyLCBYTE9HRElSKSkg IT0gTlVMTCkKKwl7CisJCVRpbWVMaW5lSUQJZmlsZV90bGk7CisJCVhMb2dTZWdObwlmaWxlX3Nl Z25vOworCisJCS8qIElnbm9yZSBmaWxlcyB0aGF0IGFyZSBub3QgWExPRyBzZWdtZW50cy4gKi8K KwkJaWYgKCFJc1hMb2dGaWxlTmFtZSh4bGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJ LyogUGFyc2UgZmlsZW5hbWUgdG8gZ2V0IFRMSSBhbmQgc2Vnbm8uICovCisJCVhMb2dGcm9tRmls ZU5hbWUoeGxkZS0+ZF9uYW1lLCAmZmlsZV90bGksICZmaWxlX3NlZ25vLAorCQkJCQkJIHdhbF9z ZWdtZW50X3NpemUpOworCisJCS8qIElnbm9yZSBhbnl0aGluZyB0aGF0J3Mgbm90IGZyb20gdGhl IFRMSSBvZiBpbnRlcmVzdC4gKi8KKwkJaWYgKHRsaSAhPSBmaWxlX3RsaSkKKwkJCWNvbnRpbnVl OworCisJCS8qIElmIGl0J3MgdGhlIG9sZGVzdCBzbyBmYXIsIHVwZGF0ZSBvbGRlc3Rfc2Vnbm8u ICovCisJCWlmIChvbGRlc3Rfc2Vnbm8gPT0gMCB8fCBmaWxlX3NlZ25vIDwgb2xkZXN0X3NlZ25v KQorCQkJb2xkZXN0X3NlZ25vID0gZmlsZV9zZWdubzsKKwl9CisKKwlGcmVlRGlyKHhsZGlyKTsK KwlyZXR1cm4gb2xkZXN0X3NlZ25vOworfQogCiAvKgogICogVXBkYXRlIHRoZSBsYXN0IHJlbW92 ZWQgc2Vnbm8gcG9pbnRlciBpbiBzaGFyZWQgbWVtb3J5LCB0byByZWZsZWN0IHRoYXQgdGhlCkBA IC0zODY5LDggKzM5MDcsOCBAQCBSZW1vdmVYbG9nRmlsZShjb25zdCBzdHJ1Y3QgZGlyZW50ICpz ZWdtZW50X2RlLAogfQogCiAvKgotICogVmVyaWZ5IHdoZXRoZXIgcGdfd2FsIGFuZCBwZ193YWwv YXJjaGl2ZV9zdGF0dXMgZXhpc3QuCi0gKiBJZiB0aGUgbGF0dGVyIGRvZXMgbm90IGV4aXN0LCBy ZWNyZWF0ZSBpdC4KKyAqIFZlcmlmeSB3aGV0aGVyIHBnX3dhbCwgcGdfd2FsL2FyY2hpdmVfc3Rh dHVzLCBhbmQgcGdfd2FsL3N1bW1hcmllcyBleGlzdC4KKyAqIElmIHRoZSBsYXR0ZXIgZG8gbm90 IGV4aXN0LCByZWNyZWF0ZSB0aGVtLgogICoKICAqIEl0IGlzIG5vdCB0aGUgZ29hbCBvZiB0aGlz IGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgY29udGVudHMgb2YgdGhlc2UKICAqIGRpcmVjdG9yaWVz LCBidXQgdG8gaGVscCBpbiBjYXNlcyB3aGVyZSBzb21lb25lIGhhcyBwZXJmb3JtZWQgYSBjbHVz dGVyCkBAIC0zOTEzLDYgKzM5NTEsMjYgQEAgVmFsaWRhdGVYTE9HRGlyZWN0b3J5U3RydWN0dXJl KHZvaWQpCiAJCQkJCShlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsCiAJCQkJCQkJcGF0aCkpKTsKIAl9CisKKwkvKiBDaGVjayBmb3Igc3VtbWFy aWVzICovCisJc25wcmludGYocGF0aCwgTUFYUEdQQVRILCBYTE9HRElSICIvc3VtbWFyaWVzIik7 CisJaWYgKHN0YXQocGF0aCwgJnN0YXRfYnVmKSA9PSAwKQorCXsKKwkJLyogQ2hlY2sgZm9yIHdl aXJkIGNhc2VzIHdoZXJlIGl0IGV4aXN0cyBidXQgaXNuJ3QgYSBkaXJlY3RvcnkgKi8KKwkJaWYg KCFTX0lTRElSKHN0YXRfYnVmLnN0X21vZGUpKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVy cm1zZygicmVxdWlyZWQgV0FMIGRpcmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJ CQkJCXBhdGgpKSk7CisJfQorCWVsc2UKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2co ImNyZWF0aW5nIG1pc3NpbmcgV0FMIGRpcmVjdG9yeSBcIiVzXCIiLCBwYXRoKSkpOworCQlpZiAo TWFrZVBHRGlyZWN0b3J5KHBhdGgpIDwgMCkKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJt c2coImNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJ CQkJcGF0aCkpKTsKKwl9CiB9CiAKIC8qCkBAIC01MjM3LDkgKzUyOTUsOSBAQCBTdGFydHVwWExP Ryh2b2lkKQogI2VuZGlmCiAKIAkvKgotCSAqIFZlcmlmeSB0aGF0IHBnX3dhbCBhbmQgcGdfd2Fs L2FyY2hpdmVfc3RhdHVzIGV4aXN0LiAgSW4gY2FzZXMgd2hlcmUKLQkgKiBzb21lb25lIGhhcyBw ZXJmb3JtZWQgYSBjb3B5IGZvciBQSVRSLCB0aGVzZSBkaXJlY3RvcmllcyBtYXkgaGF2ZSBiZWVu Ci0JICogZXhjbHVkZWQgYW5kIG5lZWQgdG8gYmUgcmUtY3JlYXRlZC4KKwkgKiBWZXJpZnkgdGhh dCBwZ193YWwsIHBnX3dhbC9hcmNoaXZlX3N0YXR1cywgYW5kIHBnX3dhbC9zdW1tYXJpZXMgZXhp c3QuCisJICogSW4gY2FzZXMgd2hlcmUgc29tZW9uZSBoYXMgcGVyZm9ybWVkIGEgY29weSBmb3Ig UElUUiwgdGhlc2UgZGlyZWN0b3JpZXMKKwkgKiBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGFuZCBu ZWVkIHRvIGJlIHJlLWNyZWF0ZWQuCiAJICovCiAJVmFsaWRhdGVYTE9HRGlyZWN0b3J5U3RydWN0 dXJlKCk7CiAKQEAgLTY5NTYsNiArNzAxNCwyNSBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFn cykKIAkgKi8KIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKKwkvKgorCSAqIFdBTCBzdW1tYXJpZXMg ZW5kIHdoZW4gdGhlIG5leHQgWExPR19DSEVDS1BPSU5UX1JFRE8gb3IKKwkgKiBYTE9HX0NIRUNL UE9JTlRfU0hVVERPV04gcmVjb3JkIGlzIHJlYWNoZWQuIFRoaXMgaXMgdGhlIGZpcnN0IHBvaW50 CisJICogd2hlcmUgKGEpIHdlJ3JlIG5vdCBpbnNpZGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIGFu ZCAoYikgd2UgY2FuIGJlCisJICogY2VydGFpbiB0aGF0IHRoZSByZWxldmFudCByZWNvcmQgaGFz IGJlZW4gZmx1c2hlZCB0byBkaXNrLCB3aGljaCBtdXN0CisJICogaGFwcGVuIGJlZm9yZSBpdCBj YW4gYmUgc3VtbWFyaXplZC4KKwkgKgorCSAqIElmIHRoaXMgaXMgYSBzaHV0ZG93biBjaGVja3Bv aW50LCB0aGVuIHRoaXMgaGFwcGVucyByZWFzb25hYmx5CisJICogcHJvbXB0bHk6IHdlJ3ZlIG9u bHkganVzdCBpbnNlcnRlZCBhbmQgZmx1c2hlZCB0aGUKKwkgKiBYTE9HX0NIRUNLUE9JTlRfU0hV VERPV04gcmVjb3JkLiBJZiB0aGlzIGlzIG5vdCBhIHNodXRkb3duIGNoZWNrcG9pbnQsCisJICog dGhlbiB0aGlzIG1pZ2h0IG5vdCBiZSB2ZXJ5IHByb21wdCBhdCBhbGw6IHRoZSBYTE9HX0NIRUNL UE9JTlRfUkVETworCSAqIHJlY29yZCB3YXMgd3JpdHRlbiBiZWZvcmUgd2UgYmVnYW4gZmx1c2hp bmcgZGF0YSB0byBkaXNrLCBhbmQgdGhhdAorCSAqIGNvdWxkIGJlIG1hbnkgbWludXRlcyBhZ28g YXQgdGhpcyBwb2ludC4gSG93ZXZlciwgd2UgZG9uJ3QgWExvZ0ZsdXNoKCkKKwkgKiBhZnRlciBp bnNlcnRpbmcgdGhhdCByZWNvcmQsIHNvIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRoYXQgaXQncyBv biBkaXNrCisJICogdW50aWwgYWZ0ZXIgdGhlIGFib3ZlIGNhbGwgdGhhdCBmbHVzaGVzIHRoZSBY TE9HX0NIRUNLUE9JTlRfT05MSU5FCisJICogcmVjb3JkLgorCSAqLworCVNldFdhbFN1bW1hcml6 ZXJMYXRjaCgpOworCiAJLyoKIAkgKiBMZXQgc21nciBkbyBwb3N0LWNoZWNrcG9pbnQgY2xlYW51 cCAoZWcsIGRlbGV0aW5nIG9sZCBmaWxlcykuCiAJICovCkBAIC03NjMwLDYgKzc3MDcsMjAgQEAg S2VlcExvZ1NlZyhYTG9nUmVjUHRyIHJlY3B0ciwgWExvZ1NlZ05vICpsb2dTZWdObykKIAkJfQog CX0KIAorCS8qCisJICogSWYgV0FMIHN1bW1hcml6YXRpb24gaXMgaW4gdXNlLCBkb24ndCByZW1v dmUgV0FMIHRoYXQgaGFzIHlldCB0byBiZQorCSAqIHN1bW1hcml6ZWQuCisJICovCisJa2VlcCA9 IEdldE9sZGVzdFVuc3VtbWFyaXplZExTTihOVUxMLCBOVUxMLCBmYWxzZSk7CisJaWYgKGtlZXAg IT0gSW52YWxpZFhMb2dSZWNQdHIpCisJeworCQlYTG9nU2VnTm8JdW5zdW1tYXJpemVkX3NlZ25v OworCisJCVhMQnl0ZVRvU2VnKGtlZXAsIHVuc3VtbWFyaXplZF9zZWdubywgd2FsX3NlZ21lbnRf c2l6ZSk7CisJCWlmICh1bnN1bW1hcml6ZWRfc2Vnbm8gPCBzZWdubykKKwkJCXNlZ25vID0gdW5z dW1tYXJpemVkX3NlZ25vOworCX0KKwogCS8qIGJ1dCwga2VlcCBhdCBsZWFzdCB3YWxfa2VlcF9z aXplIGlmIHRoYXQncyBzZXQgKi8KIAlpZiAod2FsX2tlZXBfc2l6ZV9tYiA+IDApCiAJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYmFja3VwL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYmFja3Vw L01ha2VmaWxlCmluZGV4IGIyMWJkOGZmNDMuLmE2N2IzYzU4ZDQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2JhY2t1cC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvTWFrZWZpbGUK QEAgLTI1LDYgKzI1LDggQEAgT0JKUyA9IFwKIAliYXNlYmFja3VwX3NlcnZlci5vIFwKIAliYXNl YmFja3VwX3NpbmsubyBcCiAJYmFzZWJhY2t1cF90YXJnZXQubyBcCi0JYmFzZWJhY2t1cF90aHJv dHRsZS5vCisJYmFzZWJhY2t1cF90aHJvdHRsZS5vIFwKKwl3YWxzdW1tYXJ5Lm8gXAorCXdhbHN1 bW1hcnlmdW5jcy5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24u bWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZCBiL3NyYy9iYWNr ZW5kL2JhY2t1cC9tZXNvbi5idWlsZAppbmRleCAxMWE3OWJiZjgwLi41ZDRlYmUzZWJlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQv YmFja3VwL21lc29uLmJ1aWxkCkBAIC0xMiw0ICsxMiw2IEBAIGJhY2tlbmRfc291cmNlcyArPSBm aWxlcygKICAgJ2Jhc2ViYWNrdXBfdGFyZ2V0LmMnLAogICAnYmFzZWJhY2t1cF90aHJvdHRsZS5j JywKICAgJ2Jhc2ViYWNrdXBfenN0ZC5jJywKKyAgJ3dhbHN1bW1hcnkuYycsCisgICd3YWxzdW1t YXJ5ZnVuY3MuYycsCiApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3VtbWFy eS5jIGIvc3JjL2JhY2tlbmQvYmFja3VwL3dhbHN1bW1hcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4yNzFkMTk5ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvYmFja3VwL3dhbHN1bW1hcnkuYwpAQCAtMCwwICsxLDM1NiBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogd2Fsc3VtbWFyeS5jCisgKgkgIEZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5n IGFuZCBtYW5hZ2luZyBXQUwgc3VtbWFyeSBkYXRhLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMjAxMC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIHNyYy9iYWNrZW5kL2JhY2t1cC93YWxzdW1tYXJ5LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5o IgorI2luY2x1ZGUgImJhY2t1cC93YWxzdW1tYXJ5LmgiCisjaW5jbHVkZSAidXRpbHMvd2FpdF9l dmVudC5oIgorCitzdGF0aWMgYm9vbCBJc1dhbFN1bW1hcnlGaWxlbmFtZShjaGFyICpmaWxlbmFt ZSk7CitzdGF0aWMgaW50CUxpc3RDb21wYXJhdG9yRm9yV2FsU3VtbWFyeUZpbGVzKGNvbnN0IExp c3RDZWxsICphLAorCQkJCQkJCQkJCQkgY29uc3QgTGlzdENlbGwgKmIpOworCisvKgorICogR2V0 IGEgbGlzdCBvZiBXQUwgc3VtbWFyaWVzLgorICoKKyAqIElmIHRsaSAhPSAwLCBvbmx5IFdBTCBz dW1tYXJpZXMgd2l0aCB0aGUgaW5kaWNhdGVkIFRMSSB3aWxsIGJlIGluY2x1ZGVkLgorICoKKyAq IElmIHN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciwgb25seSBzdW1tYXJpZXMgdGhhdCBl bmQgYWZ0ZXIgdGhlCisgKiBpbmRpY2F0ZWQgTFNOIHdpbGwgYmUgaW5jbHVkZWQuCisgKgorICog SWYgZW5kX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciwgb25seSBzdW1tYXJpZXMgdGhhdCBzdGFy dCBiZWZvcmUgdGhlCisgKiBpbmRpY2F0ZWQgTFNOIHdpbGwgYmUgaW5jbHVkZWQuCisgKgorICog VGhlIGludGVudCBpcyB0aGF0IHlvdSBjYW4gY2FsbCBHZXRXYWxTdW1tYXJpZXModGxpLCBzdGFy dF9sc24sIGVuZF9sc24pCisgKiB0byBnZXQgYWxsIFdBTCBzdW1tYXJpZXMgb24gdGhlIGluZGlj YXRlZCB0aW1lbGluZSB0aGF0IG92ZXJsYXAgdGhlCisgKiBzcGVjaWZpZWQgTFNOIHJhbmdlLgor ICovCitMaXN0ICoKK0dldFdhbFN1bW1hcmllcyhUaW1lTGluZUlEIHRsaSwgWExvZ1JlY1B0ciBz dGFydF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbikKK3sKKwlESVIJCSAgICpzZGlyOworCXN0cnVj dCBkaXJlbnQgKmRlbnQ7CisJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCisJc2RpciA9IEFsbG9j YXRlRGlyKFhMT0dESVIgIi9zdW1tYXJpZXMiKTsKKwl3aGlsZSAoKGRlbnQgPSBSZWFkRGlyKHNk aXIsIFhMT0dESVIgIi9zdW1tYXJpZXMiKSkgIT0gTlVMTCkKKwl7CisJCVdhbFN1bW1hcnlGaWxl ICp3czsKKwkJdWludDMyCQl0bXBbNV07CisJCVRpbWVMaW5lSUQJZmlsZV90bGk7CisJCVhMb2dS ZWNQdHIJZmlsZV9zdGFydF9sc247CisJCVhMb2dSZWNQdHIJZmlsZV9lbmRfbHNuOworCisJCS8q IERlY29kZSBmaWxlbmFtZSwgb3Igc2tpcCBpZiBpdCdzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgZm9y bWF0LiAqLworCQlpZiAoIUlzV2FsU3VtbWFyeUZpbGVuYW1lKGRlbnQtPmRfbmFtZSkpCisJCQlj b250aW51ZTsKKwkJc3NjYW5mKGRlbnQtPmRfbmFtZSwgIiUwOFglMDhYJTA4WCUwOFglMDhYIiwK KwkJCSAgICZ0bXBbMF0sICZ0bXBbMV0sICZ0bXBbMl0sICZ0bXBbM10sICZ0bXBbNF0pOworCQlm aWxlX3RsaSA9IHRtcFswXTsKKwkJZmlsZV9zdGFydF9sc24gPSAoKHVpbnQ2NCkgdG1wWzFdKSA8 PCAzMiB8IHRtcFsyXTsKKwkJZmlsZV9lbmRfbHNuID0gKCh1aW50NjQpIHRtcFszXSkgPDwgMzIg fCB0bXBbNF07CisKKwkJLyogU2tpcCBpZiBpdCBkb2Vzbid0IG1hdGNoIHRoZSBmaWx0ZXIgY3Jp dGVyaWEuICovCisJCWlmICh0bGkgIT0gMCAmJiB0bGkgIT0gZmlsZV90bGkpCisJCQljb250aW51 ZTsKKwkJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKHN0YXJ0X2xzbikgJiYgc3RhcnRfbHNuID49 IGZpbGVfZW5kX2xzbikKKwkJCWNvbnRpbnVlOworCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQo ZW5kX2xzbikgJiYgZW5kX2xzbiA8PSBmaWxlX3N0YXJ0X2xzbikKKwkJCWNvbnRpbnVlOworCisJ CS8qIEFkZCBpdCB0byB0aGUgbGlzdC4gKi8KKwkJd3MgPSBwYWxsb2Moc2l6ZW9mKFdhbFN1bW1h cnlGaWxlKSk7CisJCXdzLT50bGkgPSBmaWxlX3RsaTsKKwkJd3MtPnN0YXJ0X2xzbiA9IGZpbGVf c3RhcnRfbHNuOworCQl3cy0+ZW5kX2xzbiA9IGZpbGVfZW5kX2xzbjsKKwkJcmVzdWx0ID0gbGFw cGVuZChyZXN1bHQsIHdzKTsKKwl9CisJRnJlZURpcihzZGlyKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBCdWlsZCBhIG5ldyBsaXN0IG9mIFdBTCBzdW1tYXJpZXMgYmFzZWQgb24g YW4gZXhpc3RpbmcgbGlzdCwgYnV0IGZpbHRlcmluZworICogb3V0IHN1bW1hcmllcyB0aGF0IGRv bid0IG1hdGNoIHRoZSBzZWFyY2ggcGFyYW1ldGVycy4KKyAqCisgKiBJZiB0bGkgIT0gMCwgb25s eSBXQUwgc3VtbWFyaWVzIHdpdGggdGhlIGluZGljYXRlZCBUTEkgd2lsbCBiZSBpbmNsdWRlZC4K KyAqCisgKiBJZiBzdGFydF9sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIsIG9ubHkgc3VtbWFyaWVz IHRoYXQgZW5kIGFmdGVyIHRoZQorICogaW5kaWNhdGVkIExTTiB3aWxsIGJlIGluY2x1ZGVkLgor ICoKKyAqIElmIGVuZF9sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIsIG9ubHkgc3VtbWFyaWVzIHRo YXQgc3RhcnQgYmVmb3JlIHRoZQorICogaW5kaWNhdGVkIExTTiB3aWxsIGJlIGluY2x1ZGVkLgor ICovCitMaXN0ICoKK0ZpbHRlcldhbFN1bW1hcmllcyhMaXN0ICp3c2xpc3QsIFRpbWVMaW5lSUQg dGxpLAorCQkJCSAgIFhMb2dSZWNQdHIgc3RhcnRfbHNuLCBYTG9nUmVjUHRyIGVuZF9sc24pCit7 CisJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJLyogTG9vcCBv dmVyIGlucHV0LiAqLworCWZvcmVhY2gobGMsIHdzbGlzdCkKKwl7CisJCVdhbFN1bW1hcnlGaWxl ICp3cyA9IGxmaXJzdChsYyk7CisKKwkJLyogU2tpcCBpZiBpdCBkb2Vzbid0IG1hdGNoIHRoZSBm aWx0ZXIgY3JpdGVyaWEuICovCisJCWlmICh0bGkgIT0gMCAmJiB0bGkgIT0gd3MtPnRsaSkKKwkJ CWNvbnRpbnVlOworCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQoc3RhcnRfbHNuKSAmJiBzdGFy dF9sc24gPiB3cy0+ZW5kX2xzbikKKwkJCWNvbnRpbnVlOworCQlpZiAoIVhMb2dSZWNQdHJJc0lu dmFsaWQoZW5kX2xzbikgJiYgZW5kX2xzbiA8IHdzLT5zdGFydF9sc24pCisJCQljb250aW51ZTsK KworCQkvKiBBZGQgaXQgdG8gdGhlIHJlc3VsdCBsaXN0LiAqLworCQlyZXN1bHQgPSBsYXBwZW5k KHJlc3VsdCwgd3MpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayB3 aGV0aGVyIHRoZSBzdXBwbGllZCBsaXN0IG9mIFdhbFN1bW1hcnlGaWxlIG9iamVjdHMgY292ZXJz IHRoZQorICogd2hvbGUgcmFuZ2Ugb2YgTFNOcyBmcm9tIHN0YXJ0X2xzbiB0byBlbmRfbHNuLiBU aGlzIGZ1bmN0aW9uIGlnbm9yZXMKKyAqIHRpbWVsaW5lcywgc28gdGhlIGNhbGxlciBzaG91bGQg cHJvYmFibHkgZmlsdGVyIHVzaW5nIHRoZSBhcHByb3ByaWF0ZQorICogdGltZWxpbmUgYmVmb3Jl IGNhbGxpbmcgdGhpcy4KKyAqCisgKiBJZiB0aGUgd2hvbGUgcmFuZ2Ugb2YgTFNOcyBpcyBjb3Zl cmVkLCByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBmYWxzZS4KKyAqIElmIGZhbHNlIGlzIHJldHVy bmVkLCAqbWlzc2luZ19sc24gaXMgc2V0IGVpdGhlciB0byBJbnZhbGlkWExvZ1JlY1B0cgorICog aWYgdGhlcmUgYXJlIG5vIFdBTCBzdW1tYXJ5IGZpbGVzIGluIHRoZSBpbnB1dCBsaXN0LCBvciB0 byB0aGUgZmlyc3QgTFNOCisgKiBpbiB0aGUgcmFuZ2UgdGhhdCBpcyBub3QgY292ZXJlZCBieSBh IFdBTCBzdW1tYXJ5IGZpbGUgaW4gdGhlIGlucHV0IGxpc3QuCisgKi8KK2Jvb2wKK1dhbFN1bW1h cmllc0FyZUNvbXBsZXRlKExpc3QgKndzbGlzdCwgWExvZ1JlY1B0ciBzdGFydF9sc24sCisJCQkJ CQlYTG9nUmVjUHRyIGVuZF9sc24sIFhMb2dSZWNQdHIgKm1pc3NpbmdfbHNuKQoreworCVhMb2dS ZWNQdHIJY3VycmVudF9sc24gPSBzdGFydF9sc247CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBT cGVjaWFsIGNhc2UgZm9yIGVtcHR5IGxpc3QuICovCisJaWYgKHdzbGlzdCA9PSBOSUwpCisJewor CQkqbWlzc2luZ19sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCS8qIE1ha2UgYSBwcml2YXRlIGNvcHkgb2YgdGhlIGxpc3QgYW5kIHNvcnQgaXQgYnkgc3Rh cnQgTFNOLiAqLworCXdzbGlzdCA9IGxpc3RfY29weSh3c2xpc3QpOworCWxpc3Rfc29ydCh3c2xp c3QsIExpc3RDb21wYXJhdG9yRm9yV2FsU3VtbWFyeUZpbGVzKTsKKworCS8qCisJICogQ29uc2lk ZXIgc3VtbWFyeSBmaWxlcyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHN0YXJ0X2xzbiwgYWR2YW5j aW5nIHRoZQorCSAqIGtub3duLXN1bW1hcml6ZWQgcmFuZ2UgZnJvbSBzdGFydF9sc24gdG93YXJk IGVuZF9sc24uCisJICoKKwkgKiBOb3JtYWxseSwgdGhlIHN1bW1hcnkgZmlsZXMgc2hvdWxkIGNv dmVyIG5vbi1vdmVybGFwcGluZyBXQUwgcmFuZ2VzLAorCSAqIGJ1dCB0aGlzIGFsZ29yaXRobSBp cyBpbnRlbmRlZCB0byBiZSBjb3JyZWN0IGV2ZW4gaW4gY2FzZSBvZiBvdmVybGFwLgorCSAqLwor CWZvcmVhY2gobGMsIHdzbGlzdCkKKwl7CisJCVdhbFN1bW1hcnlGaWxlICp3cyA9IGxmaXJzdChs Yyk7CisKKwkJaWYgKHdzLT5zdGFydF9sc24gPiBjdXJyZW50X2xzbikKKwkJeworCQkJLyogV2Ug Zm91bmQgYSBnYXAuICovCisJCQlicmVhazsKKwkJfQorCQlpZiAod3MtPmVuZF9sc24gPiBjdXJy ZW50X2xzbikKKwkJeworCQkJLyoKKwkJCSAqIE5leHQgc3VtbWFyeSBleHRlbmRzIGJleW9uZCBl bmQgb2YgcHJldmlvdXMgc3VtbWFyeSwgc28gZXh0ZW5kCisJCQkgKiB0aGUgZW5kIG9mIHRoZSBy YW5nZSBrbm93biB0byBiZSBzdW1tYXJpemVkLgorCQkJICovCisJCQljdXJyZW50X2xzbiA9IHdz LT5lbmRfbHNuOworCisJCQkvKgorCQkJICogSWYgdGhlIHJhbmdlIHdlIGtub3cgdG8gYmUgc3Vt bWFyaXplZCBoYXMgcmVhY2hlZCB0aGUgcmVxdWlyZWQKKwkJCSAqIGVuZCBMU04sIHdlIGhhdmUg cHJvdmVkIGNvbXBsZXRlbmVzcy4KKwkJCSAqLworCQkJaWYgKGN1cnJlbnRfbHNuID49IGVuZF9s c24pCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGVpdGhlciByYW4g b3V0IG9mIHN1bW1hcnkgZmlsZXMgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kIExTTiwgb3Igd2UK KwkgKiBoaXQgYSBnYXAgaW4gdGhlIHNlcXVlbmNlIHRoYXQgcmVzdWx0ZWQgaW4gdXMgYmFpbGlu ZyBvdXQgb2YgdGhlIGxvb3AKKwkgKiBhYm92ZS4KKwkgKi8KKwkqbWlzc2luZ19sc24gPSBjdXJy ZW50X2xzbjsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBPcGVuIGEgV0FMIHN1bW1hcnkg ZmlsZS4KKyAqCisgKiBUaGlzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaW4gY2FzZSBvZiB0cm91Ymxl LiBBcyBhbiBleGNlcHRpb24sIGlmCisgKiBtaXNzaW5nX29rID0gdHJ1ZSBhbmQgdGhlIHRyb3Vi bGUgaXMgc3BlY2lmaWNhbGx5IHRoYXQgdGhlIGZpbGUgZG9lcworICogbm90IGV4aXN0LCBpdCB3 aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBhbmQgd2lsbCByZXR1cm4gYSB2YWx1ZSBsZXNzIHRoYW4g MC4KKyAqLworRmlsZQorT3BlbldhbFN1bW1hcnlGaWxlKFdhbFN1bW1hcnlGaWxlICp3cywgYm9v bCBtaXNzaW5nX29rKQoreworCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKKwlGaWxlCQlmaWxlOwor CisJc25wcmludGYocGF0aCwgTUFYUEdQQVRILAorCQkJIFhMT0dESVIgIi9zdW1tYXJpZXMvJTA4 WCUwOFglMDhYJTA4WCUwOFguc3VtbWFyeSIsCisJCQkgd3MtPnRsaSwKKwkJCSBMU05fRk9STUFU X0FSR1Mod3MtPnN0YXJ0X2xzbiksCisJCQkgTFNOX0ZPUk1BVF9BUkdTKHdzLT5lbmRfbHNuKSk7 CisKKwlmaWxlID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBPX1JET05MWSk7CisJaWYgKGZpbGUg PCAwICYmIChlcnJubyAhPSBFRVhJU1QgfHwgIW1pc3Npbmdfb2spKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5v dCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CisKKwlyZXR1cm4gZmlsZTsKK30KKwor LyoKKyAqIFJlbW92ZSBhIFdBTCBzdW1tYXJ5IGZpbGUgaWYgdGhlIGxhc3QgbW9kaWZpY2F0aW9u IHRpbWUgcHJlY2VkZXMgdGhlCisgKiBjdXRvZmYgdGltZS4KKyAqLwordm9pZAorUmVtb3ZlV2Fs U3VtbWFyeUlmT2xkZXJUaGFuKFdhbFN1bW1hcnlGaWxlICp3cywgdGltZV90IGN1dG9mZl90aW1l KQoreworCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJ c25wcmludGYocGF0aCwgTUFYUEdQQVRILAorCQkJIFhMT0dESVIgIi9zdW1tYXJpZXMvJTA4WCUw OFglMDhYJTA4WCUwOFguc3VtbWFyeSIsCisJCQkgd3MtPnRsaSwKKwkJCSBMU05fRk9STUFUX0FS R1Mod3MtPnN0YXJ0X2xzbiksCisJCQkgTFNOX0ZPUk1BVF9BUkdTKHdzLT5lbmRfbHNuKSk7CisK KwlpZiAobHN0YXQocGF0aCwgJnN0YXRidWYpICE9IDApCisJeworCQlpZiAoZXJybm8gPT0gRU5P RU5UKQorCQkJcmV0dXJuOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IGZpbGUgXCIlc1wiOiAlbSIs IHBhdGgpKSk7CisJfQorCWlmIChzdGF0YnVmLnN0X210aW1lID49IGN1dG9mZl90aW1lKQorCQly ZXR1cm47CisJaWYgKHVubGluayhwYXRoKSAhPSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IGZp bGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CisJZXJlcG9ydChERUJVRzIsCisJCQkoZXJybXNnX2lu dGVybmFsKCJyZW1vdmluZyBmaWxlIFwiJXNcIiIsIHBhdGgpKSk7Cit9CisKKy8qCisgKiBUZXN0 IHdoZXRoZXIgYSBmaWxlbmFtZSBsb29rcyBsaWtlIGEgV0FMIHN1bW1hcnkgZmlsZS4KKyAqLwor c3RhdGljIGJvb2wKK0lzV2FsU3VtbWFyeUZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lKQoreworCXJl dHVybiBzdHJzcG4oZmlsZW5hbWUsICIwMTIzNDU2Nzg5QUJDREVGIikgPT0gNDAgJiYKKwkJc3Ry Y21wKGZpbGVuYW1lICsgNDAsICIuc3VtbWFyeSIpID09IDA7Cit9CisKKy8qCisgKiBEYXRhIHJl YWQgY2FsbGJhY2sgZm9yIHVzZSB3aXRoIENyZWF0ZUJsb2NrUmVmVGFibGVSZWFkZXIuCisgKi8K K2ludAorUmVhZFdhbFN1bW1hcnkodm9pZCAqd2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGlu dCBsZW5ndGgpCit7CisJV2FsU3VtbWFyeUlPICppbyA9IHdhbF9zdW1tYXJ5X2lvOworCWludAkJ CW5ieXRlczsKKworCW5ieXRlcyA9IEZpbGVSZWFkKGlvLT5maWxlLCBkYXRhLCBsZW5ndGgsIGlv LT5maWxlcG9zLAorCQkJCQkgIFdBSVRfRVZFTlRfV0FMX1NVTU1BUllfUkVBRCk7CisJaWYgKG5i eXRlcyA8IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJ CUZpbGVQYXRoTmFtZShpby0+ZmlsZSkpKSk7CisKKwlpby0+ZmlsZXBvcyArPSBuYnl0ZXM7CisJ cmV0dXJuIG5ieXRlczsKK30KKworLyoKKyAqIERhdGEgd3JpdGUgY2FsbGJhY2sgZm9yIHVzZSB3 aXRoIFdyaXRlQmxvY2tSZWZUYWJsZS4KKyAqLworaW50CitXcml0ZVdhbFN1bW1hcnkodm9pZCAq d2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJV2FsU3VtbWFyeUlP ICppbyA9IHdhbF9zdW1tYXJ5X2lvOworCWludAkJCW5ieXRlczsKKworCW5ieXRlcyA9IEZpbGVX cml0ZShpby0+ZmlsZSwgZGF0YSwgbGVuZ3RoLCBpby0+ZmlsZXBvcywKKwkJCQkJICAgV0FJVF9F VkVOVF9XQUxfU1VNTUFSWV9XUklURSk7CisJaWYgKG5ieXRlcyA8IDApCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQg bm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQlGaWxlUGF0aE5hbWUoaW8tPmZpbGUp KSkpOworCWlmIChuYnl0ZXMgIT0gbGVuZ3RoKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBmaWxl IFwiJXNcIjogd3JvdGUgb25seSAlZCBvZiAlZCBieXRlcyBhdCBvZmZzZXQgJXUiLAorCQkJCQkJ RmlsZVBhdGhOYW1lKGlvLT5maWxlKSwgbmJ5dGVzLAorCQkJCQkJbGVuZ3RoLCAodW5zaWduZWQp IGlvLT5maWxlcG9zKSwKKwkJCQkgZXJyaGludCgiQ2hlY2sgZnJlZSBkaXNrIHNwYWNlLiIpKSk7 CisKKwlpby0+ZmlsZXBvcyArPSBuYnl0ZXM7CisJcmV0dXJuIG5ieXRlczsKK30KKworLyoKKyAq IEVycm9yLXJlcG9ydGluZyBjYWxsYmFjayBmb3IgdXNlIHdpdGggQ3JlYXRlQmxvY2tSZWZUYWJs ZVJlYWRlci4KKyAqLwordm9pZAorUmVwb3J0V2FsU3VtbWFyeUVycm9yKHZvaWQgKmNhbGxiYWNr X2FyZywgY2hhciAqZm10LC4uLikKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJdmFfbGlzdAkJ YXA7CisJaW50CQkJbmVlZGVkOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9yICg7OykK Kwl7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQluZWVkZWQgPSBhcHBlbmRTdHJpbmdJbmZvVkEo JmJ1ZiwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJCWlmIChuZWVkZWQgPT0gMCkKKwkJCWJy ZWFrOworCQllbmxhcmdlU3RyaW5nSW5mbygmYnVmLCBuZWVkZWQpOworCX0KKwllcmVwb3J0KEVS Uk9SLAorCQkJZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCWVycm1zZ19pbnRl cm5hbCgiJXMiLCBidWYuZGF0YSkpOworfQorCisvKgorICogQ29tcGFyYXRvciB0byBzb3J0IGEg TGlzdCBvZiBXYWxTdW1tYXJ5RmlsZSBvYmplY3RzIGJ5IHN0YXJ0X2xzbi4KKyAqLworc3RhdGlj IGludAorTGlzdENvbXBhcmF0b3JGb3JXYWxTdW1tYXJ5RmlsZXMoY29uc3QgTGlzdENlbGwgKmEs IGNvbnN0IExpc3RDZWxsICpiKQoreworCVdhbFN1bW1hcnlGaWxlICp3czEgPSBsZmlyc3QoYSk7 CisJV2FsU3VtbWFyeUZpbGUgKndzMiA9IGxmaXJzdChiKTsKKworCWlmICh3czEtPnN0YXJ0X2xz biA8IHdzMi0+c3RhcnRfbHNuKQorCQlyZXR1cm4gLTE7CisJaWYgKHdzMS0+c3RhcnRfbHNuID4g d3MyLT5zdGFydF9sc24pCisJCXJldHVybiAxOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYmFja3VwL3dhbHN1bW1hcnlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvYmFja3Vw L3dhbHN1bW1hcnlmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmExZjY5YWQ0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3Vt bWFyeWZ1bmNzLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHdhbHN1bW1hcnlmdW5jcy5jCisgKgkgIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMgZm9yIGFjY2Vz c2luZyBXQUwgc3VtbWFyeSBkYXRhLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx MC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9i YWNrZW5kL2JhY2t1cC93YWxzdW1tYXJ5ZnVuY3MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYmFja3VwL3dhbHN1bW1h cnkuaCIKKyNpbmNsdWRlICJjb21tb24vYmxrcmVmdGFibGUuaCIKKyNpbmNsdWRlICJmdW5jYXBp LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorCisjZGVmaW5lIE5VTV9XU19BVFRTCQkJMwor I2RlZmluZSBOVU1fU1VNTUFSWV9BVFRTCTYKKyNkZWZpbmUgTUFYX0JMT0NLU19QRVJfQ0FMTAky NTYKKworLyoKKyAqIExpc3QgdGhlIFdBTCBzdW1tYXJ5IGZpbGVzIGF2YWlsYWJsZSBpbiBwZ193 YWwvc3VtbWFyaWVzLgorICovCitEYXR1bQorcGdfYXZhaWxhYmxlX3dhbF9zdW1tYXJpZXMoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2k7CisJTGlzdAkgICAqd3NsaXN0 OworCUxpc3RDZWxsICAgKmxjOworCURhdHVtCQl2YWx1ZXNbTlVNX1dTX0FUVFNdOworCWJvb2wJ CW51bGxzW05VTV9XU19BVFRTXTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsK Kwlyc2kgPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisKKwltZW1zZXQo bnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJd3NsaXN0ID0gR2V0V2FsU3VtbWFyaWVzKDAs IEludmFsaWRYTG9nUmVjUHRyLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJZm9yZWFjaChsYywgd3Ns aXN0KQorCXsKKwkJV2FsU3VtbWFyeUZpbGUgKndzID0gKFdhbFN1bW1hcnlGaWxlICopIGxmaXJz dChsYyk7CisJCUhlYXBUdXBsZQl0dXBsZTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CisJCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0oKGludDY0KSB3cy0+dGxpKTsKKwkJdmFsdWVz WzFdID0gTFNOR2V0RGF0dW0od3MtPnN0YXJ0X2xzbik7CisJCXZhbHVlc1syXSA9IExTTkdldERh dHVtKHdzLT5lbmRfbHNuKTsKKworCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShyc2ktPnNldERl c2MsIHZhbHVlcywgbnVsbHMpOworCQl0dXBsZXN0b3JlX3B1dHR1cGxlKHJzaS0+c2V0UmVzdWx0 LCB0dXBsZSk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIExpc3QgdGhl IGNvbnRlbnRzIG9mIGEgV0FMIHN1bW1hcnkgZmlsZSBpZGVudGlmaWVkIGJ5IFRMSSwgc3RhcnQg TFNOLAorICogYW5kIGVuZCBMU04uCisgKi8KK0RhdHVtCitwZ193YWxfc3VtbWFyeV9jb250ZW50 cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaTsKKwlEYXR1bQkJdmFs dWVzW05VTV9TVU1NQVJZX0FUVFNdOworCWJvb2wJCW51bGxzW05VTV9TVU1NQVJZX0FUVFNdOwor CVdhbFN1bW1hcnlGaWxlIHdzOworCVdhbFN1bW1hcnlJTyBpbzsKKwlCbG9ja1JlZlRhYmxlUmVh ZGVyICpyZWFkZXI7CisJaW50NjQJCXJhd190bGk7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3I7 CisJRm9ya051bWJlcglmb3JrbnVtOworCUJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrOworCisJSW5p dE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCXJzaSA9IChSZXR1cm5TZXRJbmZvICopIGZj aW5mby0+cmVzdWx0aW5mbzsKKwltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJ LyoKKwkgKiBTaW5jZSB0aGUgdGltZWxpbmUgY291bGQgYXQgbGVhc3QgaW4gdGhlb3J5IGJlIG1v cmUgdGhhbiAyXjMxLCBhbmQKKwkgKiBzaW5jZSB3ZSBkb24ndCBoYXZlIHVuc2lnbmVkIHR5cGVz IGF0IHRoZSBTUUwgbGV2ZWwsIGl0IGlzIHBhc3NlZCBhcyBhCisJICogNjQtYml0IGludGVnZXIu IFRlc3Qgd2hldGhlciBpdCdzIG91dCBvZiByYW5nZS4KKwkgKi8KKwlyYXdfdGxpID0gUEdfR0VU QVJHX0lOVDY0KDApOworCWlmIChyYXdfdGxpIDwgMSB8fCByYXdfdGxpID4gUEdfSU5UMzJfTUFY KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJpbnZhbGlkIHRpbWVsaW5lICVsbGQiLCAobG9uZyBsb25n KSByYXdfdGxpKSk7CisKKwkvKiBQcmVwYXJlIHRvIHJlYWQgdGhlIHNwZWNpZmllZCBXQUwgc3Vt bXJ5IGZpbGUuICovCisJd3MudGxpID0gKFRpbWVMaW5lSUQpIHJhd190bGk7CisJd3Muc3RhcnRf bHNuID0gUEdfR0VUQVJHX0xTTigxKTsKKwl3cy5lbmRfbHNuID0gUEdfR0VUQVJHX0xTTigyKTsK Kwlpby5maWxlcG9zID0gMDsKKwlpby5maWxlID0gT3BlbldhbFN1bW1hcnlGaWxlKCZ3cywgZmFs c2UpOworCXJlYWRlciA9IENyZWF0ZUJsb2NrUmVmVGFibGVSZWFkZXIoUmVhZFdhbFN1bW1hcnks ICZpbywKKwkJCQkJCQkJCSAgIEZpbGVQYXRoTmFtZShpby5maWxlKSwKKwkJCQkJCQkJCSAgIFJl cG9ydFdhbFN1bW1hcnlFcnJvciwgTlVMTCk7CisKKwkvKiBMb29wIG92ZXIgcmVsYXRpb24gZm9y a3MuICovCisJd2hpbGUgKEJsb2NrUmVmVGFibGVSZWFkZXJOZXh0UmVsYXRpb24ocmVhZGVyLCAm cmxvY2F0b3IsICZmb3JrbnVtLAorCQkJCQkJCQkJCSAgICZsaW1pdF9ibG9jaykpCisJeworCQlC bG9ja051bWJlciBibG9ja3NbTUFYX0JMT0NLU19QRVJfQ0FMTF07CisJCUhlYXBUdXBsZQl0dXBs ZTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCXZhbHVlc1swXSA9IE9iamVjdElk R2V0RGF0dW0ocmxvY2F0b3IucmVsTnVtYmVyKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXRE YXR1bShybG9jYXRvci5zcGNPaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKHJs b2NhdG9yLmRiT2lkKTsKKwkJdmFsdWVzWzNdID0gSW50MTZHZXREYXR1bSgoaW50MTYpIGZvcmtu dW0pOworCisJCS8qIExvb3Agb3ZlciBibG9ja3Mgd2l0aGluIHRoZSBjdXJyZW50IHJlbGF0aW9u IGZvcmsuICovCisJCXdoaWxlICgxKQorCQl7CisJCQl1bnNpZ25lZAluYmxvY2tzOworCQkJdW5z aWduZWQJaTsKKworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJbmJsb2NrcyA9IEJs b2NrUmVmVGFibGVSZWFkZXJHZXRCbG9ja3MocmVhZGVyLCBibG9ja3MsCisJCQkJCQkJCQkJCQkg ICBNQVhfQkxPQ0tTX1BFUl9DQUxMKTsKKwkJCWlmIChuYmxvY2tzID09IDApCisJCQkJYnJlYWs7 CisKKwkJCS8qCisJCQkgKiBGb3IgZWFjaCBibG9jayB0aGF0IHdlIHNwZWNpZmljYWxseSBrbm93 IHRvIGhhdmUgYmVlbiBtb2RpZmllZCwKKwkJCSAqIGVtaXQgYSByb3cgd2l0aCB0aGF0IGJsb2Nr IG51bWJlciBhbmQgbGltaXRfYmxvY2sgPSBmYWxzZS4KKwkJCSAqLworCQkJdmFsdWVzWzVdID0g Qm9vbEdldERhdHVtKGZhbHNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuYmxvY2tzOyArK2kpCisJ CQl7CisJCQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bSgoaW50NjQpIGJsb2Nrc1tpXSk7CisK KwkJCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShyc2ktPnNldERlc2MsIHZhbHVlcywgbnVsbHMp OworCQkJCXR1cGxlc3RvcmVfcHV0dHVwbGUocnNpLT5zZXRSZXN1bHQsIHR1cGxlKTsKKwkJCX0K KworCQkJLyoKKwkJCSAqIElmIHRoZSBsaW1pdCBibG9jayBpcyBub3QgSW52YWxpZEJsb2NrTnVt YmVyLCBlbWl0IGFuIGV4dGEgcm93CisJCQkgKiB3aXRoIHRoYXQgYmxvY2sgbnVtYmVyIGFuZCBs aW1pdF9ibG9jayA9IHRydWUuCisJCQkgKgorCQkJICogVGhlcmUgaXMgbm8gcG9pbnQgaW4gZG9p bmcgdGhpcyB3aGVuIHRoZSBsaW1pdF9ibG9jayBpcworCQkJICogSW52YWxpZEJsb2NrTnVtYmVy LCBiZWNhdXNlIG5vIGJsb2NrIHdpdGggdGhhdCBudW1iZXIgb3IgYW55CisJCQkgKiBoaWdoZXIg bnVtYmVyIGNhbiBldmVyIGV4aXN0LgorCQkJICovCisJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlk KGxpbWl0X2Jsb2NrKSkKKwkJCXsKKwkJCQl2YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVtKChpbnQ2 NCkgbGltaXRfYmxvY2spOworCQkJCXZhbHVlc1s1XSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKwor CQkJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHJzaS0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7 CisJCQkJdHVwbGVzdG9yZV9wdXR0dXBsZShyc2ktPnNldFJlc3VsdCwgdHVwbGUpOworCQkJfQor CQl9CisJfQorCisJLyogQ2xlYW51cCAqLworCURlc3Ryb3lCbG9ja1JlZlRhYmxlUmVhZGVyKHJl YWRlcik7CisJRmlsZUNsb3NlKGlvLmZpbGUpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL01ha2VmaWxlCmluZGV4IDA0NzQ0OGIzNGUuLjM2N2E0NmM2MTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBPQkpTID0gXAogCXBvc3RtYXN0ZXIu byBcCiAJc3RhcnR1cC5vIFwKIAlzeXNsb2dnZXIubyBcCisJd2Fsc3VtbWFyaXplci5vIFwKIAl3 YWx3cml0ZXIubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1r CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCmluZGV4IGJhZTZmNjhjNDAuLjVmMjQ0MjE2 YTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCkBAIC0yMSw2ICsyMSw3IEBACiAj aW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9i Z3dyaXRlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5oIgorI2luY2x1ZGUgInBv c3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsd3JpdGVy LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgpAQCAtODAsNiArODEsOSBAQCBBdXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQ cm9jVHlwZSBhdXh0eXBlKQogCQljYXNlIFdhbFJlY2VpdmVyUHJvY2VzczoKIAkJCU15QmFja2Vu ZFR5cGUgPSBCX1dBTF9SRUNFSVZFUjsKIAkJCWJyZWFrOworCQljYXNlIFdhbFN1bW1hcml6ZXJQ cm9jZXNzOgorCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1NVTU1BUklaRVI7CisJCQlicmVhazsK IAkJZGVmYXVsdDoKIAkJCWVsb2coUEFOSUMsICJ1bnJlY29nbml6ZWQgcHJvY2VzcyB0eXBlOiAl ZCIsIChpbnQpIE15QXV4UHJvY1R5cGUpOwogCQkJTXlCYWNrZW5kVHlwZSA9IEJfSU5WQUxJRDsK QEAgLTE1OCw2ICsxNjIsMTAgQEAgQXV4aWxpYXJ5UHJvY2Vzc01haW4oQXV4UHJvY1R5cGUgYXV4 dHlwZSkKIAkJCVdhbFJlY2VpdmVyTWFpbigpOwogCQkJcHJvY19leGl0KDEpOwogCisJCWNhc2Ug V2FsU3VtbWFyaXplclByb2Nlc3M6CisJCQlXYWxTdW1tYXJpemVyTWFpbigpOworCQkJcHJvY19l eGl0KDEpOworCiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAidW5yZWNvZ25pemVkIHByb2Nl c3MgdHlwZTogJWQiLCAoaW50KSBNeUF1eFByb2NUeXBlKTsKIAkJCXByb2NfZXhpdCgxKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCmluZGV4IGNkYTkyMWZkMTAuLmEzMGViNjY5MmYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZApAQCAtMTIsNSArMTIsNiBAQCBiYWNrZW5kX3Nv dXJjZXMgKz0gZmlsZXMoCiAgICdwb3N0bWFzdGVyLmMnLAogICAnc3RhcnR1cC5jJywKICAgJ3N5 c2xvZ2dlci5jJywKKyAgJ3dhbHN1bW1hcml6ZXIuYycsCiAgICd3YWx3cml0ZXIuYycsCiApCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDY1MWI4NWVhNzQuLmIxNjNlODljYmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0xMTMsNiArMTEzLDcgQEAKICNp bmNsdWRlICJwb3N0bWFzdGVyL3BnYXJjaC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1h c3Rlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9mZC5oIgpAQCAtMjUwLDYgKzI1MSw3IEBAIHN0YXRpYyBwaWRfdCBTdGFydHVwUElE ID0gMCwKIAkJCUNoZWNrcG9pbnRlclBJRCA9IDAsCiAJCQlXYWxXcml0ZXJQSUQgPSAwLAogCQkJ V2FsUmVjZWl2ZXJQSUQgPSAwLAorCQkJV2FsU3VtbWFyaXplclBJRCA9IDAsCiAJCQlBdXRvVmFj UElEID0gMCwKIAkJCVBnQXJjaFBJRCA9IDAsCiAJCQlTeXNMb2dnZXJQSUQgPSAwOwpAQCAtNDQx LDYgKzQ0Myw3IEBAIHN0YXRpYyBib29sIENyZWF0ZU9wdHNGaWxlKGludCBhcmdjLCBjaGFyICph cmd2W10sIGNoYXIgKmZ1bGxwcm9nbmFtZSk7CiBzdGF0aWMgcGlkX3QgU3RhcnRDaGlsZFByb2Nl c3MoQXV4UHJvY1R5cGUgdHlwZSk7CiBzdGF0aWMgdm9pZCBTdGFydEF1dG92YWN1dW1Xb3JrZXIo dm9pZCk7CiBzdGF0aWMgdm9pZCBNYXliZVN0YXJ0V2FsUmVjZWl2ZXIodm9pZCk7CitzdGF0aWMg dm9pZCBNYXliZVN0YXJ0V2FsU3VtbWFyaXplcih2b2lkKTsKIHN0YXRpYyB2b2lkIEluaXRQb3N0 bWFzdGVyRGVhdGhXYXRjaEhhbmRsZSh2b2lkKTsKIAogLyoKQEAgLTU2NCw2ICs1NjcsNyBAQCBz dGF0aWMgdm9pZCBTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShCYWNrZW5kICpibik7CiAjZGVmaW5l IFN0YXJ0Q2hlY2twb2ludGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKENoZWNrcG9pbnRlclByb2Nl c3MpCiAjZGVmaW5lIFN0YXJ0V2FsV3JpdGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFdhbFdyaXRl clByb2Nlc3MpCiAjZGVmaW5lIFN0YXJ0V2FsUmVjZWl2ZXIoKQkJU3RhcnRDaGlsZFByb2Nlc3Mo V2FsUmVjZWl2ZXJQcm9jZXNzKQorI2RlZmluZSBTdGFydFdhbFN1bW1hcml6ZXIoKQlTdGFydENo aWxkUHJvY2VzcyhXYWxTdW1tYXJpemVyUHJvY2VzcykKIAogLyogTWFjcm9zIHRvIGNoZWNrIGV4 aXQgc3RhdHVzIG9mIGEgY2hpbGQgcHJvY2VzcyAqLwogI2RlZmluZSBFWElUX1NUQVRVU18wKHN0 KSAgKChzdCkgPT0gMCkKQEAgLTkzMyw2ICs5MzcsOSBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWlmIChtYXhfd2FsX3NlbmRlcnMgPiAwICYmIHdhbF9sZXZlbCA9 PSBXQUxfTEVWRUxfTUlOSU1BTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJXQUwg c3RyZWFtaW5nIChtYXhfd2FsX3NlbmRlcnMgPiAwKSByZXF1aXJlcyB3YWxfbGV2ZWwgXCJyZXBs aWNhXCIgb3IgXCJsb2dpY2FsXCIiKSkpOworCWlmIChzdW1tYXJpemVfd2FsICYmIHdhbF9sZXZl bCA9PSBXQUxfTEVWRUxfTUlOSU1BTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJX QUwgY2Fubm90IGJlIHN1bW1hcml6ZWQgd2hlbiB3YWxfbGV2ZWwgaXMgXCJtaW5pbWFsXCIiKSkp OwogCiAJLyoKIAkgKiBPdGhlciBvbmUtdGltZSBpbnRlcm5hbCBzYW5pdHkgY2hlY2tzIGNhbiBn byBoZXJlLCBpZiB0aGV5IGFyZSBmYXN0LgpAQCAtMTgzNSw2ICsxODQyLDkgQEAgU2VydmVyTG9v cCh2b2lkKQogCQlpZiAoV2FsUmVjZWl2ZXJSZXF1ZXN0ZWQpCiAJCQlNYXliZVN0YXJ0V2FsUmVj ZWl2ZXIoKTsKIAorCQkvKiBJZiB3ZSBuZWVkIHRvIHN0YXJ0IGEgV0FMIHN1bW1hcml6ZXIsIHRy eSB0byBkbyB0aGF0IG5vdyAqLworCQlNYXliZVN0YXJ0V2FsU3VtbWFyaXplcigpOworCiAJCS8q IEdldCBvdGhlciB3b3JrZXIgcHJvY2Vzc2VzIHJ1bm5pbmcsIGlmIG5lZWRlZCAqLwogCQlpZiAo U3RhcnRXb3JrZXJOZWVkZWQgfHwgSGF2ZUNyYXNoZWRXb3JrZXIpCiAJCQltYXliZV9zdGFydF9i Z3dvcmtlcnMoKTsKQEAgLTI2NTksNiArMjY2OSw4IEBAIHByb2Nlc3NfcG1fcmVsb2FkX3JlcXVl c3Qodm9pZCkKIAkJCXNpZ25hbF9jaGlsZChXYWxXcml0ZXJQSUQsIFNJR0hVUCk7CiAJCWlmIChX YWxSZWNlaXZlclBJRCAhPSAwKQogCQkJc2lnbmFsX2NoaWxkKFdhbFJlY2VpdmVyUElELCBTSUdI VVApOworCQlpZiAoV2FsU3VtbWFyaXplclBJRCAhPSAwKQorCQkJc2lnbmFsX2NoaWxkKFdhbFN1 bW1hcml6ZXJQSUQsIFNJR0hVUCk7CiAJCWlmIChBdXRvVmFjUElEICE9IDApCiAJCQlzaWduYWxf Y2hpbGQoQXV0b1ZhY1BJRCwgU0lHSFVQKTsKIAkJaWYgKFBnQXJjaFBJRCAhPSAwKQpAQCAtMzAx Miw2ICszMDI0LDcgQEAgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpCiAJCQkJQmdXcml0ZXJQ SUQgPSBTdGFydEJhY2tncm91bmRXcml0ZXIoKTsKIAkJCWlmIChXYWxXcml0ZXJQSUQgPT0gMCkK IAkJCQlXYWxXcml0ZXJQSUQgPSBTdGFydFdhbFdyaXRlcigpOworCQkJTWF5YmVTdGFydFdhbFN1 bW1hcml6ZXIoKTsKIAogCQkJLyoKIAkJCSAqIExpa2V3aXNlLCBzdGFydCBvdGhlciBzcGVjaWFs IGNoaWxkcmVuIGFzIG5lZWRlZC4gIEluIGEgcmVzdGFydApAQCAtMzEzMCw2ICszMTQzLDIwIEBA IHByb2Nlc3NfcG1fY2hpbGRfZXhpdCh2b2lkKQogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgor CQkgKiBXYXMgaXQgdGhlIHdhbCBzdW1tYXJpemVyPyBOb3JtYWwgZXhpdCBjYW4gYmUgaWdub3Jl ZDsgd2UnbGwgc3RhcnQKKwkJICogYSBuZXcgb25lIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0 aGUgcG9zdG1hc3RlcidzIG1haW4gbG9vcCwgaWYKKwkJICogbmVjZXNzYXJ5LiAgQW55IG90aGVy IGV4aXQgY29uZGl0aW9uIGlzIHRyZWF0ZWQgYXMgYSBjcmFzaC4KKwkJICovCisJCWlmIChwaWQg PT0gV2FsU3VtbWFyaXplclBJRCkKKwkJeworCQkJV2FsU3VtbWFyaXplclBJRCA9IDA7CisJCQlp ZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykpCisJCQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQs IGV4aXRzdGF0dXMsCisJCQkJCQkJCSBfKCJXQUwgc3VtbWFyaXplciBwcm9jZXNzIikpOworCQkJ Y29udGludWU7CisJCX0KKwogCQkvKgogCQkgKiBXYXMgaXQgdGhlIGF1dG92YWN1dW0gbGF1bmNo ZXI/CU5vcm1hbCBleGl0IGNhbiBiZSBpZ25vcmVkOyB3ZSdsbAogCQkgKiBzdGFydCBhIG5ldyBv bmUgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBwb3N0bWFzdGVyJ3MgbWFpbgpAQCAtMzUy NSw2ICszNTUyLDEyIEBAIEhhbmRsZUNoaWxkQ3Jhc2goaW50IHBpZCwgaW50IGV4aXRzdGF0dXMs IGNvbnN0IGNoYXIgKnByb2NuYW1lKQogCWVsc2UgaWYgKFdhbFJlY2VpdmVyUElEICE9IDAgJiYg dGFrZV9hY3Rpb24pCiAJCXNpZ3F1aXRfY2hpbGQoV2FsUmVjZWl2ZXJQSUQpOwogCisJLyogVGFr ZSBjYXJlIG9mIHRoZSB3YWxzdW1tYXJpemVyIHRvbyAqLworCWlmIChwaWQgPT0gV2FsU3VtbWFy aXplclBJRCkKKwkJV2FsU3VtbWFyaXplclBJRCA9IDA7CisJZWxzZSBpZiAoV2FsU3VtbWFyaXpl clBJRCAhPSAwICYmIHRha2VfYWN0aW9uKQorCQlzaWdxdWl0X2NoaWxkKFdhbFN1bW1hcml6ZXJQ SUQpOworCiAJLyogVGFrZSBjYXJlIG9mIHRoZSBhdXRvdmFjdXVtIGxhdW5jaGVyIHRvbyAqLwog CWlmIChwaWQgPT0gQXV0b1ZhY1BJRCkKIAkJQXV0b1ZhY1BJRCA9IDA7CkBAIC0zNjc1LDYgKzM3 MDgsOCBAQCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCQlzaWduYWxfY2hpbGQoU3Rh cnR1cFBJRCwgU0lHVEVSTSk7CiAJCWlmIChXYWxSZWNlaXZlclBJRCAhPSAwKQogCQkJc2lnbmFs X2NoaWxkKFdhbFJlY2VpdmVyUElELCBTSUdURVJNKTsKKwkJaWYgKFdhbFN1bW1hcml6ZXJQSUQg IT0gMCkKKwkJCXNpZ25hbF9jaGlsZChXYWxTdW1tYXJpemVyUElELCBTSUdURVJNKTsKIAkJLyog Y2hlY2twb2ludGVyLCBhcmNoaXZlciwgc3RhdHMsIGFuZCBzeXNsb2dnZXIgbWF5IGNvbnRpbnVl IGZvciBub3cgKi8KIAogCQkvKiBOb3cgdHJhbnNpdGlvbiB0byBQTV9XQUlUX0JBQ0tFTkRTIHN0 YXRlIHRvIHdhaXQgZm9yIHRoZW0gdG8gZGllICovCkBAIC0zNzAxLDYgKzM3MzYsNyBAQCBQb3N0 bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCWlmIChDb3VudENoaWxkcmVuKEJBQ0tFTkRfVFlQ RV9BTEwgLSBCQUNLRU5EX1RZUEVfV0FMU05EKSA9PSAwICYmCiAJCQlTdGFydHVwUElEID09IDAg JiYKIAkJCVdhbFJlY2VpdmVyUElEID09IDAgJiYKKwkJCVdhbFN1bW1hcml6ZXJQSUQgPT0gMCAm JgogCQkJQmdXcml0ZXJQSUQgPT0gMCAmJgogCQkJKENoZWNrcG9pbnRlclBJRCA9PSAwIHx8CiAJ CQkgKCFGYXRhbEVycm9yICYmIFNodXRkb3duIDwgSW1tZWRpYXRlU2h1dGRvd24pKSAmJgpAQCAt Mzc5OCw2ICszODM0LDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQkJLyogVGhl c2Ugb3RoZXIgZ3V5cyBzaG91bGQgYmUgZGVhZCBhbHJlYWR5ICovCiAJCQlBc3NlcnQoU3RhcnR1 cFBJRCA9PSAwKTsKIAkJCUFzc2VydChXYWxSZWNlaXZlclBJRCA9PSAwKTsKKwkJCUFzc2VydChX YWxTdW1tYXJpemVyUElEID09IDApOwogCQkJQXNzZXJ0KEJnV3JpdGVyUElEID09IDApOwogCQkJ QXNzZXJ0KENoZWNrcG9pbnRlclBJRCA9PSAwKTsKIAkJCUFzc2VydChXYWxXcml0ZXJQSUQgPT0g MCk7CkBAIC00MDE5LDYgKzQwNTYsOCBAQCBUZXJtaW5hdGVDaGlsZHJlbihpbnQgc2lnbmFsKQog CQlzaWduYWxfY2hpbGQoV2FsV3JpdGVyUElELCBzaWduYWwpOwogCWlmIChXYWxSZWNlaXZlclBJ RCAhPSAwKQogCQlzaWduYWxfY2hpbGQoV2FsUmVjZWl2ZXJQSUQsIHNpZ25hbCk7CisJaWYgKFdh bFN1bW1hcml6ZXJQSUQgIT0gMCkKKwkJc2lnbmFsX2NoaWxkKFdhbFN1bW1hcml6ZXJQSUQsIHNp Z25hbCk7CiAJaWYgKEF1dG9WYWNQSUQgIT0gMCkKIAkJc2lnbmFsX2NoaWxkKEF1dG9WYWNQSUQs IHNpZ25hbCk7CiAJaWYgKFBnQXJjaFBJRCAhPSAwKQpAQCAtNTMyNiw2ICs1MzY1LDEwIEBAIFN0 YXJ0Q2hpbGRQcm9jZXNzKEF1eFByb2NUeXBlIHR5cGUpCiAJCQkJZXJlcG9ydChMT0csCiAJCQkJ CQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBXQUwgcmVjZWl2ZXIgcHJvY2VzczogJW0iKSkpOwog CQkJCWJyZWFrOworCQkJY2FzZSBXYWxTdW1tYXJpemVyUHJvY2VzczoKKwkJCQllcmVwb3J0KExP RywKKwkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIFdBTCBzdW1tYXJpemVyIHByb2Nlc3M6 ICVtIikpKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZXJlcG9ydChMT0csCiAJCQkJ CQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBwcm9jZXNzOiAlbSIpKSk7CkBAIC01NDYyLDYgKzU1 MDUsMTkgQEAgTWF5YmVTdGFydFdhbFJlY2VpdmVyKHZvaWQpCiAJfQogfQogCisvKgorICogTWF5 YmVTdGFydFdhbFN1bW1hcml6ZXIKKyAqCQlTdGFydCB0aGUgV0FMIHN1bW1hcml6ZXIgcHJvY2Vz cywgaWYgbm90IHJ1bm5pbmcgYW5kIG91ciBzdGF0ZSBhbGxvd3MuCisgKi8KK3N0YXRpYyB2b2lk CitNYXliZVN0YXJ0V2FsU3VtbWFyaXplcih2b2lkKQoreworCWlmIChzdW1tYXJpemVfd2FsICYm IFdhbFN1bW1hcml6ZXJQSUQgPT0gMCAmJgorCQkocG1TdGF0ZSA9PSBQTV9SVU4gfHwgcG1TdGF0 ZSA9PSBQTV9IT1RfU1RBTkRCWSkgJiYKKwkJU2h1dGRvd24gPD0gU21hcnRTaHV0ZG93bikKKwkJ V2FsU3VtbWFyaXplclBJRCA9IFN0YXJ0V2FsU3VtbWFyaXplcigpOworfQorCiAKIC8qCiAgKiBD cmVhdGUgdGhlIG9wdHMgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93 YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43Yzg0MGMzNmIzCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKQEAgLTAs MCArMSwxMzk4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWxzdW1tYXJpemVyLmMK KyAqCisgKiBCYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcGVyZm9ybSBXQUwgc3VtbWFyaXphdGlvbiwg aWYgaXQgaXMgZW5hYmxlZC4KKyAqIEl0IGNvbnRpbnVvdXNseSBzY2FucyB0aGUgd3JpdGUtYWhl YWQgbG9nIGFuZCBwZXJpb2RpY2FsbHkgZW1pdHMgYQorICogc3VtbWFyeSBmaWxlIHdoaWNoIGlu ZGljYXRlcyB3aGljaCBibG9ja3MgaW4gd2hpY2ggcmVsYXRpb24gZm9ya3MKKyAqIHdlcmUgbW9k aWZpZWQgYnkgV0FMIHJlY29yZHMgaW4gdGhlIExTTiByYW5nZSBjb3ZlcmVkIGJ5IHRoZSBzdW1t YXJ5CisgKiBmaWxlLiBTZWUgd2Fsc3VtbWFyeS5jIGFuZCBibGtyZWZ0YWJsZS5jIGZvciBtb3Jl IGRldGFpbHMgb24gdGhlCisgKiBuYW1pbmcgYW5kIGNvbnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZp bGVzLgorICoKKyAqIElmIGNvbmZpZ3VyZWQgdG8gZG8sIHRoaXMgYmFja2dyb3VuZCBwcm9jZXNz IHdpbGwgYWxzbyByZW1vdmUgV0FMCisgKiBzdW1tYXJ5IGZpbGVzIHdoZW4gdGhlIGZpbGUgdGlt ZXN0YW1wIGlzIG9sZGVyIHRoYW4gYSBjb25maWd1cmFibGUKKyAqIHRocmVzaG9sZCAoYnV0IG9u bHkgaWYgdGhlIFdBTCBoYXMgYmVlbiByZW1vdmVkIGZpcnN0KS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHN1bW1hcml6ZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy90aW1lbGluZS5oIgorI2luY2x1ZGUgImFjY2Vz cy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgorI2lu Y2x1ZGUgImJhY2t1cC93YWxzdW1tYXJ5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlX3hs b2cuaCIKKyNpbmNsdWRlICJjb21tb24vYmxrcmVmdGFibGUuaCIKKyNpbmNsdWRlICJsaWJwcS9w cXNpZ25hbC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIv Ymd3cml0ZXIuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUg InBvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBj LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2ln bmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Bp bi5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgorCisvKgorICogRGF0YSBpbiBzaGFyZWQg bWVtb3J5IHJlbGF0ZWQgdG8gV0FMIHN1bW1hcml6YXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0 Cit7CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBXQUxTdW1tYXJpemVy TG9jay4KKwkgKgorCSAqIFVudGlsIHdlJ3ZlIGRpc2NvdmVyZWQgd2hhdCBzdW1tYXJ5IGZpbGVz IGFscmVhZHkgZXhpc3Qgb24gZGlzayBhbmQKKwkgKiBzdG9yZWQgdGhhdCBpbmZvcm1hdGlvbiBp biBzaGFyZWQgbWVtb3J5LCBpbml0aWFsaXplZCBpcyBmYWxzZSBhbmQgdGhlCisJICogb3RoZXIg ZmllbGRzIGhlcmUgY29udGFpbiBubyBtZWFuaW5nZnVsIGluZm9ybWF0aW9uLiBBZnRlciB0aGF0 IGhhcworCSAqIGJlZW4gZG9uZSwgaW5pdGlhbGl6ZWQgaXMgdHJ1ZS4KKwkgKgorCSAqIHN1bW1h cml6ZWRfdGxpIGFuZCBzdW1tYXJpemVkX2xzbiBpbmRpY2F0ZSB0aGUgbGFzdCBMU04gYW5kIFRM SSBhdAorCSAqIHdoaWNoIHRoZSBuZXh0IHN1bW1hcnkgZmlsZSB3aWxsIHN0YXJ0LiBOb3JtYWxs eSwgdGhlc2UgYXJlIHRoZSBMU04gYW5kCisJICogVExJIGF0IHdoaWNoIHRoZSBsYXN0IGZpbGUg ZW5kZWQ7IGluIHN1Y2ggY2FzZSwgbHNuX2lzX2V4YWN0IGlzIHRydWUuCisJICogSWYsIGhvd2V2 ZXIsIHRoZSBMU04gaXMganVzdCBhbiBhcHByb3hpbWF0aW9uLCB0aGVuIGxzbl9pc19leGFjdCBp cworCSAqIGZhbHNlLiBUaGlzIGNhbiBoYXBwZW4gaWYsIGZvciBleGFtcGxlLCB0aGVyZSBhcmUg bm8gZXhpc3RpbmcgV0FMCisJICogc3VtbWFyeSBmaWxlcyBhdCBzdGFydHVwLiBJbiB0aGF0IGNh c2UsIHdlIGhhdmUgdG8gZGVyaXZlIHRoZSBwb3NpdGlvbgorCSAqIGF0IHdoaWNoIHRvIHN0YXJ0 IHN1bW1hcml6aW5nIGZyb20gdGhlIFdBTCBmaWxlcyB0aGF0IGV4aXN0IG9uIGRpc2ssCisJICog YW5kIHNvIHRoZSBMU04gbWlnaHQgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZpbGUg ZXZlbiB0aG91Z2gKKwkgKiB0aGF0IG1pZ2h0IGhhcHBlbiB0byBiZSBpbiB0aGUgbWlkZGxlIG9m IGEgV0FMIHJlY29yZC4KKwkgKgorCSAqIHN1bW1hcml6ZXJfcGdwcm9jbm8gaXMgdGhlIHBncHJv Y25vIHZhbHVlIGZvciB0aGUgc3VtbWFyaXplciBwcm9jZXNzLAorCSAqIGlmIG9uZSBpcyBydW5u aW5nLCBvciBlbHNlIElOVkFMSURfUEdQUk9DTk8uCisJICoKKwkgKiBwZW5kaW5nX2xzbiBpcyB1 c2VkIGJ5IHRoZSBzdW1tYXJpemVyIHRvIGFkdmVydGlzZSB0aGUgZW5kaW5nIExTTiBvZiBhCisJ ICogcmVjb3JkIGl0IGhhcyByZWNlbnRseSByZWFkLiBJdCBzaG91bGRuJ3QgZXZlciBiZSBsZXNz IHRoYW4KKwkgKiBzdW1tYXJpemVkX2xzbiwgYnV0IG1pZ2h0IGJlIGdyZWF0ZXIsIGJlY2F1c2Ug dGhlIHN1bW1hcml6ZXIgYnVmZmVycworCSAqIGRhdGEgZm9yIGEgcmFuZ2Ugb2YgTFNOcyBpbiBt ZW1vcnkgYmVmb3JlIHdyaXRpbmcgb3V0IGEgbmV3IGZpbGUuCisJICovCisJYm9vbAkJaW5pdGlh bGl6ZWQ7CisJVGltZUxpbmVJRAlzdW1tYXJpemVkX3RsaTsKKwlYTG9nUmVjUHRyCXN1bW1hcml6 ZWRfbHNuOworCWJvb2wJCWxzbl9pc19leGFjdDsKKwlpbnQJCQlzdW1tYXJpemVyX3BncHJvY25v OworCVhMb2dSZWNQdHIJcGVuZGluZ19sc247CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaGFuZGxl cyBpdHMgb3duIHN5bmNocm9uaXphdG9uLgorCSAqLworCUNvbmRpdGlvblZhcmlhYmxlIHN1bW1h cnlfZmlsZV9jdjsKK30gV2FsU3VtbWFyaXplckRhdGE7CisKKy8qCisgKiBQcml2YXRlIGRhdGEg Zm9yIG91ciB4bG9ncmVhZGVyJ3MgcGFnZSByZWFkIGNhbGxiYWNrLgorICovCit0eXBlZGVmIHN0 cnVjdAoreworCVRpbWVMaW5lSUQJdGxpOworCWJvb2wJCWhpc3RvcmljOworCVhMb2dSZWNQdHIJ cmVhZF91cHRvOworCWJvb2wJCWVuZF9vZl93YWw7Cit9IFN1bW1hcml6ZXJSZWFkTG9jYWxYTG9n UHJpdmF0ZTsKKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0YXRlLiAqLworc3RhdGlj IFdhbFN1bW1hcml6ZXJEYXRhICpXYWxTdW1tYXJpemVyQ3RsOworCisvKgorICogV2hlbiB3ZSBy ZWFjaCBlbmQgb2YgV0FMIGFuZCBuZWVkIHRvIHJlYWQgbW9yZSwgd2Ugc2xlZXAgZm9yIGEgbnVt YmVyIG9mCisgKiBtaWxsaXNlY29uZHMgdGhhdCBpcyBhIGludGVnZXIgbXVsdGlwbGUgb2YgTVNf UEVSX1NMRUVQX1FVQU5UVU0uIFRoaXMgaXMKKyAqIHRoZSBtdWx0aXBsaWVyLiBJdCBzaG91bGQg dmFyeSBiZXR3ZWVuIDEgYW5kIE1BWF9TTEVFUF9RVUFOVEEsIGRlcGVuZGluZworICogb24gc3lz dGVtIGFjdGl2aXR5LiBTZWUgc3VtbWFyaXplcl93YWl0X2Zvcl93YWwoKSBmb3IgaG93IHdlIGFk anVzdCB0aGlzLgorICovCitzdGF0aWMgbG9uZyBzbGVlcF9xdWFudGEgPSAxOworCisvKgorICog VGhlIHNsZWVwIHRpbWUgd2lsbCBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZiAyMDBtcyBhbmQgd2ls bCBub3QgZXhjZWVkCisgKiB0aGlydHkgc2Vjb25kcyAoMTUwICogMjAwID0gMzAgKiAxMDAwKS4g Tm90ZSB0aGF0IHRoZSB0aW1lb3V0IGhlcmUgbmVlZHMKKyAqIHRvIGJlIHN1YnN0bnRpYWxseSBs ZXNzIHRoYW4gdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgZm9yIHdoaWNoIGFuCisgKiBpbmNy ZW1lbnRhbCBiYWNrdXAgd2lsbCB3YWl0IGZvciB0aGlzIHByb2Nlc3MgdG8gY2F0Y2ggdXAuIE90 aGVyd2lzZSwgYW4KKyAqIGluY3JlbWVudGFsIGJhY2t1cCBtaWdodCB0aW1lIG91dCBvbiBhbiBp ZGxlIHN5c3RlbSBqdXN0IGJlY2F1c2Ugd2Ugc2xlZXAKKyAqIGZvciB0b28gbG9uZy4KKyAqLwor I2RlZmluZSBNQVhfU0xFRVBfUVVBTlRBCQkxNTAKKyNkZWZpbmUgTVNfUEVSX1NMRUVQX1FVQU5U VU0JMjAwCisKKy8qCisgKiBUaGlzIGlzIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBwYWdlcyBv ZiBXQUwgdGhhdCB3ZSd2ZSByZWFkIHNpbmNlIHRoZQorICogbGFzdCB0aW1lIHdlIHdhaXRlZCBm b3IgbW9yZSBXQUwgdG8gYXBwZWFyLgorICovCitzdGF0aWMgbG9uZyBwYWdlc19yZWFkX3NpbmNl X2xhc3Rfc2xlZXAgPSAwOworCisvKgorICogTW9zdCByZWNlbnQgUmVkb1JlY1B0ciB2YWx1ZSBv YnNlcnZlZCBieSBNYXliZVJlbW92ZU9sZFdhbFN1bW1hcmllcy4KKyAqLworc3RhdGljIFhMb2dS ZWNQdHIgcmVkb19wb2ludGVyX2F0X2xhc3Rfc3VtbWFyeV9yZW1vdmFsID0gSW52YWxpZFhMb2dS ZWNQdHI7CisKKy8qCisgKiBHVUMgcGFyYW1ldGVycworICovCitib29sCQlzdW1tYXJpemVfd2Fs ID0gZmFsc2U7CitpbnQJCQl3YWxfc3VtbWFyeV9rZWVwX3RpbWUgPSAxMCAqIDI0ICogNjA7CisK K3N0YXRpYyBYTG9nUmVjUHRyIEdldExhdGVzdExTTihUaW1lTGluZUlEICp0bGkpOworc3RhdGlj IHZvaWQgSGFuZGxlV2FsU3VtbWFyaXplckludGVycnVwdHModm9pZCk7CitzdGF0aWMgWExvZ1Jl Y1B0ciBTdW1tYXJpemVXQUwoVGltZUxpbmVJRCB0bGksIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAor CQkJCQkJCSAgIGJvb2wgZXhhY3QsIFhMb2dSZWNQdHIgc3dpdGNoX2xzbiwKKwkJCQkJCQkgICBY TG9nUmVjUHRyIG1heGltdW1fbHNuKTsKK3N0YXRpYyB2b2lkIFN1bW1hcml6ZVNtZ3JSZWNvcmQo WExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLAorCQkJCQkJCQlCbG9ja1JlZlRhYmxlICpicnRh Yik7CitzdGF0aWMgdm9pZCBTdW1tYXJpemVYYWN0UmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxv Z3JlYWRlciwKKwkJCQkJCQkJQmxvY2tSZWZUYWJsZSAqYnJ0YWIpOworc3RhdGljIGJvb2wgU3Vt bWFyaXplWGxvZ1JlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIpOworc3RhdGljIGlu dAlzdW1tYXJpemVyX3JlYWRfbG9jYWxfeGxvZ19wYWdlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUs CisJCQkJCQkJCQkJCVhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwKKwkJCQkJCQkJCQkJaW50IHJl cUxlbiwKKwkJCQkJCQkJCQkJWExvZ1JlY1B0ciB0YXJnZXRSZWNQdHIsCisJCQkJCQkJCQkJCWNo YXIgKmN1cl9wYWdlKTsKK3N0YXRpYyB2b2lkIHN1bW1hcml6ZXJfd2FpdF9mb3Jfd2FsKHZvaWQp Oworc3RhdGljIHZvaWQgTWF5YmVSZW1vdmVPbGRXYWxTdW1tYXJpZXModm9pZCk7CisKKy8qCisg KiBBbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhpcyBtb2R1bGUuCisgKi8K K1NpemUKK1dhbFN1bW1hcml6ZXJTaG1lbVNpemUodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKFdh bFN1bW1hcml6ZXJEYXRhKTsKK30KKworLyoKKyAqIENyZWF0ZSBvciBhdHRhY2ggdG8gc2hhcmVk IG1lbW9yeSBzZWdtZW50IGZvciB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorV2FsU3VtbWFyaXpl clNobWVtSW5pdCh2b2lkKQoreworCWJvb2wJCWZvdW5kOworCisJV2FsU3VtbWFyaXplckN0bCA9 IChXYWxTdW1tYXJpemVyRGF0YSAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIldhbCBTdW1tYXJpemVy IEN0bCIsIFdhbFN1bW1hcml6ZXJTaG1lbVNpemUoKSwKKwkJCQkJCSZmb3VuZCk7CisKKwlpZiAo IWZvdW5kKQorCXsKKwkJLyoKKwkJICogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXpl LgorCQkgKgorCQkgKiBXZSdyZSBqdXN0IGZpbGxpbmcgaW4gZHVtbXkgdmFsdWVzIGhlcmUgLS0g dGhlIHJlYWwgaW5pdGlhbGl6YXRpb24KKwkJICogd2lsbCBoYXBwZW4gd2hlbiBHZXRPbGRlc3RV bnN1bW1hcml6ZWRMU04oKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdAorCQkgKiB0aW1lLgorCQkg Ki8KKwkJV2FsU3VtbWFyaXplckN0bC0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwkJV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF90bGkgPSAwOworCQlXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJp emVkX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlXYWxTdW1tYXJpemVyQ3RsLT5sc25faXNf ZXhhY3QgPSBmYWxzZTsKKwkJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9 IElOVkFMSURfUEdQUk9DTk87CisJCVdhbFN1bW1hcml6ZXJDdGwtPnBlbmRpbmdfbHNuID0gSW52 YWxpZFhMb2dSZWNQdHI7CisJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmV2FsU3VtbWFyaXplckN0 bC0+c3VtbWFyeV9maWxlX2N2KTsKKwl9Cit9CisKKy8qCisgKiBFbnRyeSBwb2ludCBmb3Igd2Fs c3VtbWFyaXplciBwcm9jZXNzLgorICovCit2b2lkCitXYWxTdW1tYXJpemVyTWFpbih2b2lkKQor eworCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7 CisKKwkvKgorCSAqIFdpdGhpbiB0aGlzIGZ1bmN0aW9uLCAnY3VycmVudF9sc24nIGFuZCAnY3Vy cmVudF90bGknIHJlZmVyIHRvIHRoZQorCSAqIHBvaW50IGZyb20gd2hpY2ggdGhlIG5leHQgV0FM IHN1bW1hcnkgZmlsZSBzaG91bGQgc3RhcnQuICdleGFjdCcgaXMKKwkgKiB0cnVlIGlmICdjdXJy ZW50X2xzbicgaXMga25vd24gdG8gYmUgdGhlIHN0YXJ0IG9mIGEgV0FMIHJlY29kIG9yIFdBTAor CSAqIHNlZ21lbnQsIGFuZCBmYWxzZSBpZiBpdCBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEg cmVjb3JkIHNvbWVwbGFjZS4KKwkgKgorCSAqICdzd2l0Y2hfbHNuJyBhbmQgJ3N3aXRjaF90bGkn LCBpZiBzZXQsIGFyZSB0aGUgTFNOIGF0IHdoaWNoIHdlIG5lZWQgdG8KKwkgKiBzd2l0Y2ggdG8g YSBuZXcgdGltZWxpbmUgYW5kIHRoZSB0aW1lbGluZSB0byB3aGljaCB3ZSBuZWVkIHRvIHN3aXRj aC4KKwkgKiBJZiBub3Qgc2V0LCB3ZSBlaXRoZXIgaGF2ZW4ndCBmaWd1cmVkIG91dCB0aGUgYW5z d2VycyB5ZXQgb3Igd2UncmUKKwkgKiBhbHJlYWR5IG9uIHRoZSBsYXRlc3QgdGltZWxpbmUuCisJ ICovCisJWExvZ1JlY1B0cgljdXJyZW50X2xzbjsKKwlUaW1lTGluZUlECWN1cnJlbnRfdGxpOwor CWJvb2wJCWV4YWN0OworCVhMb2dSZWNQdHIJc3dpdGNoX2xzbiA9IEludmFsaWRYTG9nUmVjUHRy OworCVRpbWVMaW5lSUQJc3dpdGNoX3RsaSA9IDA7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShl cnJtc2dfaW50ZXJuYWwoIldBTCBzdW1tYXJpemVyIHN0YXJ0ZWQiKSkpOworCisJLyoKKwkgKiBQ cm9wZXJseSBhY2NlcHQgb3IgaWdub3JlIHNpZ25hbHMgdGhlIHBvc3RtYXN0ZXIgbWlnaHQgc2Vu ZCB1cworCSAqCisJICogV2UgaGF2ZSBubyBwYXJ0aWN1bGFyIHVzZSBmb3IgU0lHSU5UIGF0IHRo ZSBtb21lbnQsIGJ1dCBzZWVtcworCSAqIHJlYXNvbmFibGUgdG8gdHJlYXQgbGlrZSBTSUdURVJN LgorCSAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7 CisJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwlw cXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwkvKiBT SUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQg Ki8KKwlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKKwlwcXNpZ25hbChTSUdQSVBFLCBTSUdf SUdOKTsKKwlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CisJ cHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7IC8qIG5vdCB1c2VkICovCisKKwkvKiBBZHZlcnRp c2Ugb3Vyc2VsdmVzLiAqLworCUxXTG9ja0FjcXVpcmUoV0FMU3VtbWFyaXplckxvY2ssIExXX0VY Q0xVU0lWRSk7CisJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9IE15UHJv Yy0+cGdwcm9jbm87CisJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CisKKwkvKiBD cmVhdGUgYW5kIHN3aXRjaCB0byBhIG1lbW9yeSBjb250ZXh0IHRoYXQgd2UgY2FuIHJlc2V0IG9u IGVycm9yLiAqLworCWNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJCSJXYWwgU3VtbWFyaXplciIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZB VUxUX1NJWkVTKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CisKKwkvKgorCSAq IFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBu b3QgaGVyZQorCSAqLworCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOworCisJLyoKKwkgKiBJ ZiBhbiBleGNlcHRpb24gaXMgZW5jb3VudGVyZWQsIHByb2Nlc3NpbmcgcmVzdW1lcyBoZXJlLgor CSAqLworCWlmIChzaWdzZXRqbXAobG9jYWxfc2lnam1wX2J1ZiwgMSkgIT0gMCkKKwl7CisJCS8q IFNpbmNlIG5vdCB1c2luZyBQR19UUlksIG11c3QgcmVzZXQgZXJyb3Igc3RhY2sgYnkgaGFuZCAq LworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworCQkvKiBQcmV2ZW50IGludGVycnVw dHMgd2hpbGUgY2xlYW5pbmcgdXAgKi8KKwkJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVw b3J0IHRoZSBlcnJvciB0byB0aGUgc2VydmVyIGxvZyAqLworCQlFbWl0RXJyb3JSZXBvcnQoKTsK KworCQkvKiBSZWxlYXNlIHJlc291cmNlcyB3ZSBtaWdodCBoYXZlIGFjcXVpcmVkLiAqLworCQlM V0xvY2tSZWxlYXNlQWxsKCk7CisJCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKKwkJ cGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOworCQlSZWxlYXNlQXV4UHJvY2Vzc1Jlc291cmNlcyhm YWxzZSk7CisJCUF0RU9YYWN0X0ZpbGVzKGZhbHNlKTsKKwkJQXRFT1hhY3RfSGFzaFRhYmxlcyhm YWxzZSk7CisKKwkJLyoKKwkJICogTm93IHJldHVybiB0byBub3JtYWwgdG9wLWxldmVsIGNvbnRl eHQgYW5kIGNsZWFyIEVycm9yQ29udGV4dCBmb3IKKwkJICogbmV4dCB0aW1lLgorCQkgKi8KKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHQpOworCQlGbHVzaEVycm9yU3RhdGUoKTsKKwor CQkvKiBGbHVzaCBhbnkgbGVha2VkIGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250ZXh0ICovCisJ CU1lbW9yeUNvbnRleHRSZXNldEFuZERlbGV0ZUNoaWxkcmVuKGNvbnRleHQpOworCisJCS8qIE5v dyB3ZSBjYW4gYWxsb3cgaW50ZXJydXB0cyBhZ2FpbiAqLworCQlSRVNVTUVfSU5URVJSVVBUUygp OworCisJCS8qCisJCSAqIFNsZWVwIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhdHRlbXB0aW5nIHRv IHJlc3VtZSBvcGVyYXRpb25zIGluCisJCSAqIG9yZGVyIHRvIGF2b2lkIGV4Y2Vzc2luZyBsb2dn aW5nLgorCQkgKgorCQkgKiBNYW55IG9mIHRoZSBsaWtlbHkgZXJyb3IgY29uZGl0aW9ucyBhcmUg dGhpbmdzIHRoYXQgd2lsbCByZXBlYXQKKwkJICogZXZlcnkgdGltZS4gRm9yIGV4YW1wbGUsIGlm IHRoZSBXQUwgY2FuJ3QgYmUgcmVhZCBvciB0aGUgc3VtbWFyeQorCQkgKiBjYW4ndCBiZSB3cml0 dGVuLCBvbmx5IGFkbWluaXN0cmF0b3IgYWN0aW9uIHdpbGwgY3VyZSB0aGUgcHJvYmxlbS4KKwkJ ICogU28gYSByZWFsbHkgZmFzdCByZXRyeSB0aW1lIGRvZXNuJ3Qgc2VlbSB0byBiZSBlc3BlY2lh bGx5CisJCSAqIGJlbmVmaWNpYWwsIGFuZCBpdCB3aWxsIGNsdXR0ZXIgdGhlIGxvZ3MuCisJCSAq LworCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkgV0xfVElNRU9VVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCisJCQkJCQkgMTAwMDAsCisJCQkJCQkgV0FJVF9FVkVOVF9XQUxfU1VN TUFSSVpFUl9FUlJPUik7CisJfQorCisJLyogV2UgY2FuIG5vdyBoYW5kbGUgZXJlcG9ydChFUlJP UikgKi8KKwlQR19leGNlcHRpb25fc3RhY2sgPSAmbG9jYWxfc2lnam1wX2J1ZjsKKworCS8qCisJ ICogVW5ibG9jayBzaWduYWxzICh0aGV5IHdlcmUgYmxvY2tlZCB3aGVuIHRoZSBwb3N0bWFzdGVy IGZvcmtlZCB1cykKKwkgKi8KKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcs IE5VTEwpOworCisJLyoKKwkgKiBGZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBwcmV2aW91cyBwcm9n cmVzcyBmcm9tIHNoYXJlZCBtZW1vcnksIGFuZCBhc2sKKwkgKiBHZXRPbGRlc3RVbnN1bW1hcml6 ZWRMU04gdG8gcmVzZXQgcGVuZGluZ19sc24gdG8gc3VtbWFyaXplZF9sc24uIFdlCisJICogbWln aHQgYmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCBhbmQgaWYgc28sIHBlbmRpbmdfbHNuIG1p Z2h0IGhhdmUKKwkgKiBhZHZhbmNlZCBwYXN0IHN1bW1hcml6ZWRfbHNuLCBidXQgYW55IFdBTCB3 ZSByZWFkIHByZXZpb3VzbHkgaGFzIGJlZW4KKwkgKiBsb3N0IGFuZCB3aWxsIG5lZWQgdG8gYmUg cmVyZWFkLgorCSAqCisJICogSWYgd2UgZGlzY292ZXIgdGhhdCBXQUwgc3VtbWFyaXphdGlvbiBp cyBub3QgZW5hYmxlZCwganVzdCBleGl0LgorCSAqLworCWN1cnJlbnRfbHNuID0gR2V0T2xkZXN0 VW5zdW1tYXJpemVkTFNOKCZjdXJyZW50X3RsaSwgJmV4YWN0LCB0cnVlKTsKKwlpZiAoWExvZ1Jl Y1B0cklzSW52YWxpZChjdXJyZW50X2xzbikpCisJCXByb2NfZXhpdCgwKTsKKworCS8qCisJICog TG9vcCBmb3JldmVyCisJICovCisJZm9yICg7OykKKwl7CisJCVhMb2dSZWNQdHIJbGF0ZXN0X2xz bjsKKwkJVGltZUxpbmVJRAlsYXRlc3RfdGxpOworCQlYTG9nUmVjUHRyCWVuZF9vZl9zdW1tYXJ5 X2xzbjsKKworCQkvKiBGbHVzaCBhbnkgbGVha2VkIGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250 ZXh0ICovCisJCU1lbW9yeUNvbnRleHRSZXNldEFuZERlbGV0ZUNoaWxkcmVuKGNvbnRleHQpOwor CisJCS8qIFByb2Nlc3MgYW55IHNpZ25hbHMgcmVjZWl2ZWQgcmVjZW50bHkuICovCisJCUhhbmRs ZVdhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7CisKKwkJLyogSWYgaXQncyB0aW1lIHRvIHJlbW92 ZSBhbnkgb2xkIFdBTCBzdW1tYXJpZXMsIGRvIHRoYXQgbm93LiAqLworCQlNYXliZVJlbW92ZU9s ZFdhbFN1bW1hcmllcygpOworCisJCS8qIEZpbmQgdGhlIExTTiBhbmQgVExJIHVwIHRvIHdoaWNo IHdlIGNhbiBzYWZlbHkgc3VtbWFyaXplLiAqLworCQlsYXRlc3RfbHNuID0gR2V0TGF0ZXN0TFNO KCZsYXRlc3RfdGxpKTsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBzdW1tYXJpemluZyBhIGhpc3Rv cmljIHRpbWVsaW5lIGFuZCB3ZSBoYXZlbid0IHlldAorCQkgKiBjb21wdXRlZCB0aGUgcG9pbnQg YXQgd2hpY2ggdG8gc3dpdGNoIHRvIHRoZSBuZXh0IHRpbWVsaW5lLCBkbyB0aGF0CisJCSAqIG5v dy4KKwkJICoKKwkJICogTm90ZSB0aGF0IGlmIHRoaXMgaXMgYSBzdGFuZGJ5LCB3aGF0IHdhcyBw cmV2aW91c2x5IHRoZSBjdXJyZW50CisJCSAqIHRpbWVsaW5lIGNvdWxkIGJlY29tZSBoaXN0b3Jp YyBhdCBhbnkgdGltZS4KKwkJICoKKwkJICogV2UgY291bGQgdHJ5IHRvIG1ha2UgdGhpcyBtb3Jl IGVmZmljaWVudCBieSBjYWNoaW5nIHRoZSByZXN1bHRzIG9mCisJCSAqIHJlYWRUaW1lTGluZUhp c3Rvcnkgd2hlbiBsYXRlc3RfdGxpIGhhcyBub3QgY2hhbmdlZCwgYnV0IHNpbmNlIHdlCisJCSAq IG9ubHkgaGF2ZSB0byBkbyB0aGlzIG9uY2UgcGVyIHRpbWVsaW5lIHN3aXRjaCwgd2UgcHJvYmFi bHkgd291bGRuJ3QKKwkJICogc2F2ZSBhbnkgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHdvcmsgaW4g cHJhY3RpY2UuCisJCSAqLworCQlpZiAoY3VycmVudF90bGkgIT0gbGF0ZXN0X3RsaSAmJiBYTG9n UmVjUHRySXNJbnZhbGlkKHN3aXRjaF9sc24pKQorCQl7CisJCQlMaXN0CSAgICp0bGVzID0gcmVh ZFRpbWVMaW5lSGlzdG9yeShsYXRlc3RfdGxpKTsKKworCQkJc3dpdGNoX2xzbiA9IHRsaVN3aXRj aFBvaW50KGN1cnJlbnRfdGxpLCB0bGVzLCAmc3dpdGNoX3RsaSk7CisJCQllcmVwb3J0KERFQlVH MSwKKwkJCQkJZXJybXNnKCJzd2l0Y2ggcG9pbnQgZnJvbSBUTEkgJXUgdG8gVExJICV1IGlzIGF0 ICVYLyVYIiwKKwkJCQkJCSAgIGN1cnJlbnRfdGxpLCBzd2l0Y2hfdGxpLCBMU05fRk9STUFUX0FS R1Moc3dpdGNoX2xzbikpKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlJ3ZlIHJlYWNoZWQgdGhl IHN3aXRjaCBMU04sIHdlIGNhbid0IHN1bW1hcml6ZSBhbnl0aGluZyBlbHNlCisJCSAqIG9uIHRo aXMgdGltZWxpbmUuIFN3aXRjaCB0byB0aGUgbmV4dCB0aW1lbGluZSBhbmQgZ28gYXJvdW5kIGFn YWluLgorCQkgKi8KKwkJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKHN3aXRjaF9sc24pICYmIGN1 cnJlbnRfbHNuID49IHN3aXRjaF9sc24pCisJCXsKKwkJCWN1cnJlbnRfdGxpID0gc3dpdGNoX3Rs aTsKKwkJCXN3aXRjaF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJCXN3aXRjaF90bGkgPSAw OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTdW1tYXJpemUgV0FMLiAqLworCQllbmRfb2Zf c3VtbWFyeV9sc24gPSBTdW1tYXJpemVXQUwoY3VycmVudF90bGksCisJCQkJCQkJCQkJICBjdXJy ZW50X2xzbiwgZXhhY3QsCisJCQkJCQkJCQkJICBzd2l0Y2hfbHNuLCBsYXRlc3RfbHNuKTsKKwkJ QXNzZXJ0KCFYTG9nUmVjUHRySXNJbnZhbGlkKGVuZF9vZl9zdW1tYXJ5X2xzbikpOworCQlBc3Nl cnQoZW5kX29mX3N1bW1hcnlfbHNuID49IGN1cnJlbnRfbHNuKTsKKworCQkvKgorCQkgKiBVcGRh dGUgc3RhdGUgZm9yIG5leHQgbG9vcCBpdGVyYXRpb24uCisJCSAqCisJCSAqIE5leHQgc3VtbWFy eSBmaWxlIHNob3VsZCBzdGFydCBmcm9tIGV4YWN0bHkgd2hlcmUgdGhpcyBvbmUgZW5kZWQuCisJ CSAqLworCQljdXJyZW50X2xzbiA9IGVuZF9vZl9zdW1tYXJ5X2xzbjsKKwkJZXhhY3QgPSB0cnVl OworCisJCS8qIFVwZGF0ZSBzdGF0ZSBpbiBzaGFyZWQgbWVtb3J5LiAqLworCQlMV0xvY2tBY3F1 aXJlKFdBTFN1bW1hcml6ZXJMb2NrLCBMV19FWENMVVNJVkUpOworCQlBc3NlcnQoV2FsU3VtbWFy aXplckN0bC0+cGVuZGluZ19sc24gPD0gZW5kX29mX3N1bW1hcnlfbHNuKTsKKwkJV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF9sc24gPSBlbmRfb2Zfc3VtbWFyeV9sc247CisJCVdhbFN1bW1h cml6ZXJDdGwtPnN1bW1hcml6ZWRfdGxpID0gY3VycmVudF90bGk7CisJCVdhbFN1bW1hcml6ZXJD dGwtPmxzbl9pc19leGFjdCA9IHRydWU7CisJCVdhbFN1bW1hcml6ZXJDdGwtPnBlbmRpbmdfbHNu ID0gZW5kX29mX3N1bW1hcnlfbHNuOworCQlMV0xvY2tSZWxlYXNlKFdBTFN1bW1hcml6ZXJMb2Nr KTsKKworCQkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIGZvciBtb3JlIHN1bW1hcnkgZmlsZXMg dG8gYmUgd3JpdHRlbi4gKi8KKwkJQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoJldhbFN1bW1h cml6ZXJDdGwtPnN1bW1hcnlfZmlsZV9jdik7CisJfQorfQorCisvKgorICogR2V0IHRoZSBvbGRl c3QgTFNOIGluIHRoaXMgc2VydmVyJ3MgdGltZWxpbmUgaGlzdG9yeSB0aGF0IGhhcyBub3QgeWV0 IGJlZW4KKyAqIHN1bW1hcml6ZWQuCisgKgorICogSWYgKnRsaSAhPSBOVUxMLCBpdCB3aWxsIGJl IHNldCB0byB0aGUgVExJIGZvciB0aGUgTFNOIHRoYXQgaXMgcmV0dXJuZWQuCisgKgorICogSWYg Kmxzbl9pc19leGFjdCAhPSBOVUxMLCBpdCB3aWxsIGJlIHNldCB0byB0cnVlIGlmIHRoZSByZXR1 cm5lZCBMU04gaXMKKyAqIG5lY2Vzc2FyaWx5IHRoZSBzdGFydCBvZiBhIFdBTCByZWNvcmQgYW5k IGZhbHNlIGlmIGl0J3MganVzdCB0aGUgYmVnaW5uaW5nCisgKiBvZiBhIFdBTCBzZWdtZW50Lgor ICoKKyAqIElmIHJlc2V0X3BlbmRpbmdfbHNuIGlzIHRydWUsIHJlc2V0cyB0aGUgcGVuZGluZ19s c24gaW4gc2hhcmVkIG1lbW9yeSB0bworICogYmUgZXF1YWwgdG8gdGhlIHN1bW1hcml6ZWRfbHNu LgorICovCitYTG9nUmVjUHRyCitHZXRPbGRlc3RVbnN1bW1hcml6ZWRMU04oVGltZUxpbmVJRCAq dGxpLCBib29sICpsc25faXNfZXhhY3QsCisJCQkJCQkgYm9vbCByZXNldF9wZW5kaW5nX2xzbikK K3sKKwlUaW1lTGluZUlECWxhdGVzdF90bGk7CisJTFdMb2NrTW9kZQltb2RlID0gcmVzZXRfcGVu ZGluZ19sc24gPyBMV19FWENMVVNJVkUgOiBMV19TSEFSRUQ7CisJaW50CQkJbjsKKwlMaXN0CSAg ICp0bGVzOworCVhMb2dSZWNQdHIJdW5zdW1tYXJpemVkX2xzbjsKKwlUaW1lTGluZUlECXVuc3Vt bWFyaXplZF90bGkgPSAwOworCWJvb2wJCXNob3VsZF9tYWtlX2V4YWN0ID0gZmFsc2U7CisJTGlz dAkgICAqZXhpc3Rpbmdfc3VtbWFyaWVzOworCUxpc3RDZWxsICAgKmxjOworCisJLyogSWYgbm90 IHN1bW1hcml6aW5nIFdBTCwgZG8gbm90aGluZy4gKi8KKwlpZiAoIXN1bW1hcml6ZV93YWwpCisJ CXJldHVybiBJbnZhbGlkWExvZ1JlY1B0cjsKKworCS8qCisJICogVW5sZXNzIHdlIG5lZWQgdG8g cmVzZXQgdGhlIHBlbmRpbmdfbHNuLCB3ZSBpbml0YWxseSBhY3F1aXJlIHRoZSBsb2NrCisJICog aW4gc2hhcmVkIG1vZGUgYW5kIHRyeSB0byBmZXRjaCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24u IElmIHdlIGFjcXVpcmUKKwkgKiBpbiBzaGFyZWQgbW9kZSBhbmQgZmluZCB0aGF0IHRoZSBkYXRh IHN0cnVjdHVyZSBoYXNuJ3QgYmVlbgorCSAqIGluaXRpYWxpemVkLCB3ZSByZWFjcXVpcmUgdGhl IGxvY2sgaW4gZXhjbHVzaXZlIG1vZGUgc28gdGhhdCB3ZSBjYW4KKwkgKiBpbml0aWFsaXplIGl0 LiBIb3dldmVyLCBpZiBzb21lb25lIGVsc2UgZG9lcyB0aGF0IGZpcnN0IGJlZm9yZSB3ZSBnZXQK KwkgKiB0aGUgbG9jaywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIHJlcXVlc3RlZCBpbmZv cm1hdGlvbiBhZnRlciBhbGwuCisJICovCisJd2hpbGUgKDEpCisJeworCQlMV0xvY2tBY3F1aXJl KFdBTFN1bW1hcml6ZXJMb2NrLCBtb2RlKTsKKworCQlpZiAoV2FsU3VtbWFyaXplckN0bC0+aW5p dGlhbGl6ZWQpCisJCXsKKwkJCXVuc3VtbWFyaXplZF9sc24gPSBXYWxTdW1tYXJpemVyQ3RsLT5z dW1tYXJpemVkX2xzbjsKKwkJCWlmICh0bGkgIT0gTlVMTCkKKwkJCQkqdGxpID0gV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF90bGk7CisJCQlpZiAobHNuX2lzX2V4YWN0ICE9IE5VTEwpCisJ CQkJKmxzbl9pc19leGFjdCA9IFdhbFN1bW1hcml6ZXJDdGwtPmxzbl9pc19leGFjdDsKKwkJCWlm IChyZXNldF9wZW5kaW5nX2xzbikKKwkJCQlXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xzbiA9 CisJCQkJCVdhbFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZWRfbHNuOworCQkJTFdMb2NrUmVsZWFz ZShXQUxTdW1tYXJpemVyTG9jayk7CisJCQlyZXR1cm4gdW5zdW1tYXJpemVkX2xzbjsKKwkJfQor CisJCWlmIChtb2RlID09IExXX0VYQ0xVU0lWRSkKKwkJCWJyZWFrOworCisJCUxXTG9ja1JlbGVh c2UoV0FMU3VtbWFyaXplckxvY2spOworCQltb2RlID0gTFdfRVhDTFVTSVZFOworCX0KKworCS8q CisJICogVGhlIGRhdGEgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLCBhbmQgd2Ug YXJlIHRoZSBmaXJzdCB0bworCSAqIG9idGFpbiB0aGUgbG9jayBpbiBleGNsdXNpdmUgbW9kZSwg c28gaXQncyBvdXIgam9iIHRvIGRvIHRoYXQKKwkgKiBpbml0aWFsaXphdGlvbi4KKwkgKgorCSAq IFNvLCBmaW5kIHRoZSBvbGRlc3QgdGltZWxpbmUgb24gd2hpY2ggV0FMIHN0aWxsIGV4aXN0cywg YW5kIHRoZQorCSAqIGVhcmxpZXN0IHNlZ21lbnQgZm9yIHdoaWNoIGl0IGV4aXN0cy4KKwkgKi8K Kwkodm9pZCkgR2V0TGF0ZXN0TFNOKCZsYXRlc3RfdGxpKTsKKwl0bGVzID0gcmVhZFRpbWVMaW5l SGlzdG9yeShsYXRlc3RfdGxpKTsKKwlmb3IgKG4gPSBsaXN0X2xlbmd0aCh0bGVzKSAtIDE7IG4g Pj0gMDsgLS1uKQorCXsKKwkJVGltZUxpbmVIaXN0b3J5RW50cnkgKnRsZSA9IGxpc3RfbnRoKHRs ZXMsIG4pOworCQlYTG9nU2VnTm8Jb2xkZXN0X3NlZ25vOworCisJCW9sZGVzdF9zZWdubyA9IFhM b2dHZXRPbGRlc3RTZWdubyh0bGUtPnRsaSk7CisJCWlmIChvbGRlc3Rfc2Vnbm8gIT0gMCkKKwkJ eworCQkJLyogQ29tcHV0ZSBvbGRlc3QgTFNOIHRoYXQgc3RpbGwgZXhpc3RzIG9uIGRpc2suICov CisJCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihvbGRlc3Rfc2Vnbm8sIDAsIHdhbF9zZWdtZW50 X3NpemUsCisJCQkJCQkJCQl1bnN1bW1hcml6ZWRfbHNuKTsKKworCQkJdW5zdW1tYXJpemVkX3Rs aSA9IHRsZS0+dGxpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBJdCByZWFsbHkgc2hvdWxk IG5vdCBiZSBwb3NzaWJsZSBmb3IgdXMgdG8gZmluZCBubyBXQUwuICovCisJaWYgKHVuc3VtbWFy aXplZF90bGkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5U RVJOQUxfRVJST1IpLAorCQkJCWVycm1zZ19pbnRlcm5hbCgibm8gV0FMIGZvdW5kIG9uIHRpbWVs aW5lICVkIiwgbGF0ZXN0X3RsaSkpOworCisJLyoKKwkgKiBEb24ndCB0cnkgdG8gc3VtbWFyaXpl IGFueXRoaW5nIG9sZGVyIHRoYW4gdGhlIGVuZCBMU04gb2YgdGhlIG5ld2VzdAorCSAqIHN1bW1h cnkgZmlsZSB0aGF0IGV4aXN0cyBmb3IgdGhpcyB0aW1lbGluZS4KKwkgKi8KKwlleGlzdGluZ19z dW1tYXJpZXMgPQorCQlHZXRXYWxTdW1tYXJpZXModW5zdW1tYXJpemVkX3RsaSwKKwkJCQkJCUlu dmFsaWRYTG9nUmVjUHRyLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJZm9yZWFjaChsYywgZXhpc3Rp bmdfc3VtbWFyaWVzKQorCXsKKwkJV2FsU3VtbWFyeUZpbGUgKndzID0gbGZpcnN0KGxjKTsKKwor CQlpZiAod3MtPmVuZF9sc24gPiB1bnN1bW1hcml6ZWRfbHNuKQorCQl7CisJCQl1bnN1bW1hcml6 ZWRfbHNuID0gd3MtPmVuZF9sc247CisJCQlzaG91bGRfbWFrZV9leGFjdCA9IHRydWU7CisJCX0K Kwl9CisKKwkvKiBVcGRhdGUgc2hhcmVkIG1lbW9yeSB3aXRoIHRoZSBkaXNjb3ZlcmVkIHZhbHVl cy4gKi8KKwlXYWxTdW1tYXJpemVyQ3RsLT5pbml0aWFsaXplZCA9IHRydWU7CisJV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF9sc24gPSB1bnN1bW1hcml6ZWRfbHNuOworCVdhbFN1bW1hcml6 ZXJDdGwtPnN1bW1hcml6ZWRfdGxpID0gdW5zdW1tYXJpemVkX3RsaTsKKwlXYWxTdW1tYXJpemVy Q3RsLT5sc25faXNfZXhhY3QgPSBzaG91bGRfbWFrZV9leGFjdDsKKwlXYWxTdW1tYXJpemVyQ3Rs LT5wZW5kaW5nX2xzbiA9IHVuc3VtbWFyaXplZF9sc247CisKKwkvKiBBbHNvIHJldHVybiB0aGUg dG8gdGhlIGNhbGxlciBhcyByZXF1aXJlZC4gKi8KKwlpZiAodGxpICE9IE5VTEwpCisJCSp0bGkg PSBXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJpemVkX3RsaTsKKwlpZiAobHNuX2lzX2V4YWN0ICE9 IE5VTEwpCisJCSpsc25faXNfZXhhY3QgPSBXYWxTdW1tYXJpemVyQ3RsLT5sc25faXNfZXhhY3Q7 CisJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CisKKwlyZXR1cm4gdW5zdW1tYXJp emVkX2xzbjsKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gc2V0IHRoZSBXQUwgc3VtbWFyaXplcidz IGxhdGNoLgorICoKKyAqIFRoaXMgbWlnaHQgbm90IHdvcmssIGJlY2F1c2UgdGhlcmUncyBubyBn dWFyYW50ZWUgdGhhdCB0aGUgV0FMIHN1bW1hcml6ZXIKKyAqIHByb2Nlc3Mgd2FzIHN1Y2Nlc3Nm dWxseSBzdGFydGVkLCBhbmQgaXQgYWxzbyBtaWdodCBoYXZlIHN0YXJ0ZWQgYnV0CisgKiBzdWJz ZXF1ZW50bHkgdGVybWluYXRlZC4gU28sIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGlz IHdpbGwgZ2V0IHRoZQorICogbGF0Y2ggc2V0LCBidXQgdGhlcmUncyBubyBndWFyYW50ZWUuCisg Ki8KK3ZvaWQKK1NldFdhbFN1bW1hcml6ZXJMYXRjaCh2b2lkKQoreworCWludAkJCXBncHJvY25v OworCisJaWYgKFdhbFN1bW1hcml6ZXJDdGwgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJTFdMb2Nr QWNxdWlyZShXQUxTdW1tYXJpemVyTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlwZ3Byb2NubyA9IFdh bFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZXJfcGdwcm9jbm87CisJTFdMb2NrUmVsZWFzZShXQUxT dW1tYXJpemVyTG9jayk7CisKKwlpZiAocGdwcm9jbm8gIT0gSU5WQUxJRF9QR1BST0NOTykKKwkJ U2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3BncHJvY25vXS5wcm9jTGF0Y2gpOworfQor CisvKgorICogV2FpdCB1bnRpbCBXQUwgc3VtbWFyaXphdGlvbiByZWFjaGVzIHRoZSBnaXZlbiBM U04sIGJ1dCBub3QgbG9uZ2VyIHRoYW4KKyAqIHRoZSBnaXZlbiB0aW1lb3V0LgorICoKKyAqIFRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIGZpcnN0IHN0aWxsLXVuc3VtbWFyaXplZCBMU04uIElmIGl0 J3MgZ3JlYXRlciB0aGFuCisgKiBvciBlcXVhbCB0byB0aGUgcGFzc2VkIExTTiwgdGhlbiB0aGF0 IExTTiB3YXMgcmVhY2hlZC4gSWYgbm90LCB3ZSB0aW1lZCBvdXQuCisgKgorICogRWl0aGVyIHdh eSwgKnBlbmRpbmdfbHNuIGlzIHNldCB0byB0aGUgdmFsdWUgdGFrZW4gZnJvbSBXYWxTdW1tYXJp emVyQ3RsLgorICovCitYTG9nUmVjUHRyCitXYWl0Rm9yV2FsU3VtbWFyaXphdGlvbihYTG9nUmVj UHRyIGxzbiwgbG9uZyB0aW1lb3V0LCBYTG9nUmVjUHRyICpwZW5kaW5nX2xzbikKK3sKKwlUaW1l c3RhbXBUeiBzdGFydF90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCVRpbWVzdGFtcFR6 IGRlYWRsaW5lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKHN0YXJ0X3RpbWUsIHRpbWVv dXQpOworCVhMb2dSZWNQdHIJc3VtbWFyaXplZF9sc247CisKKwlBc3NlcnQoIVhMb2dSZWNQdHJJ c0ludmFsaWQobHNuKSk7CisJQXNzZXJ0KHRpbWVvdXQgPiAwKTsKKworCXdoaWxlICgxKQorCXsK KwkJVGltZXN0YW1wVHogbm93OworCQlsb25nCQlyZW1haW5pbmdfdGltZW91dDsKKworCQkvKgor CQkgKiBJZiB0aGUgTFNOIHN1bW1hcml6ZWQgb24gZGlzayBoYXMgcmVhY2hlZCB0aGUgdGFyZ2V0 IHZhbHVlLCBzdG9wLgorCQkgKi8KKwkJTFdMb2NrQWNxdWlyZShXQUxTdW1tYXJpemVyTG9jaywg TFdfRVhDTFVTSVZFKTsKKwkJc3VtbWFyaXplZF9sc24gPSBXYWxTdW1tYXJpemVyQ3RsLT5zdW1t YXJpemVkX2xzbjsKKwkJKnBlbmRpbmdfbHNuID0gV2FsU3VtbWFyaXplckN0bC0+cGVuZGluZ19s c247CisJCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXplckxvY2spOworCQlpZiAoc3VtbWFyaXpl ZF9sc24gPj0gbHNuKQorCQkJYnJlYWs7CisKKwkJLyogVGltZW91dCByZWFjaGVkPyBJZiB5ZXMs IHN0b3AuICovCisJCW5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJcmVtYWluaW5nX3Rp bWVvdXQgPSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKG5vdywgZGVhZGxpbmUpOwor CQlpZiAocmVtYWluaW5nX3RpbWVvdXQgPD0gMCkKKwkJCWJyZWFrOworCisJCS8qIFdhaXQgYW5k IHNlZS4gKi8KKwkJQ29uZGl0aW9uVmFyaWFibGVUaW1lZFNsZWVwKCZXYWxTdW1tYXJpemVyQ3Rs LT5zdW1tYXJ5X2ZpbGVfY3YsCisJCQkJCQkJCQlyZW1haW5pbmdfdGltZW91dCwKKwkJCQkJCQkJ CVdBSVRfRVZFTlRfV0FMX1NVTU1BUllfUkVBRFkpOworCX0KKworCXJldHVybiBzdW1tYXJpemVk X2xzbjsKK30KKworLyoKKyAqIEdldCB0aGUgbGF0ZXN0IExTTiB0aGF0IGlzIGVsaWdpYmxlIHRv IGJlIHN1bW1hcml6ZWQsIGFuZCBzZXQgKnRsaSB0byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdGlt ZWxpbmUuCisgKi8KK3N0YXRpYyBYTG9nUmVjUHRyCitHZXRMYXRlc3RMU04oVGltZUxpbmVJRCAq dGxpKQoreworCWlmICghUmVjb3ZlcnlJblByb2dyZXNzKCkpCisJeworCQkvKiBEb24ndCBzdW1t YXJpemUgV0FMIGJlZm9yZSBpdCdzIGZsdXNoZWQuICovCisJCXJldHVybiBHZXRGbHVzaFJlY1B0 cih0bGkpOworCX0KKwllbHNlCisJeworCQlYTG9nUmVjUHRyCWZsdXNoX2xzbjsKKwkJVGltZUxp bmVJRAlmbHVzaF90bGk7CisJCVhMb2dSZWNQdHIJcmVwbGF5X2xzbjsKKwkJVGltZUxpbmVJRAly ZXBsYXlfdGxpOworCisJCS8qCisJCSAqIFdoYXQgd2UgcmVhbGx5IHdhbnQgdG8ga25vdyBpcyBo b3cgbXVjaCBXQUwgaGFzIGJlZW4gZmx1c2hlZCB0bworCQkgKiBkaXNrLCBidXQgdGhlIG9ubHkg Zmx1c2ggcG9zaXRpb24gYXZhaWxhYmxlIGlzIHRoZSBvbmUgcHJvdmlkZWQgYnkKKwkJICogdGhl IHdhbHJlY2VpdmVyLCB3aGljaCBtYXkgbm90IGJlIHJ1bm5pbmcsIGJlY2F1c2UgdGhpcyBjb3Vs ZCBiZQorCQkgKiBjcmFzaCByZWNvdmVyeSBvciByZWNvdmVyeSB2aWEgcmVzdG9yZV9jb21tYW5k LiBTbyB1c2UgZWl0aGVyIHRoZQorCQkgKiBXQUwgcmVjZWl2ZXIncyBmbHVzaCBwb3NpdGlvbiBv ciB0aGUgcmVwbGF5IHBvc2l0aW9uLCB3aGljaGV2ZXIgaXMKKwkJICogZnVydGhlciBhaGVhZCwg b24gdGhlIHRoZW9yeSB0aGF0IGlmIHRoZSBXQUwgaGFzIGJlZW4gcmVwbGF5ZWQgdGhlbgorCQkg KiBpdCBtdXN0IGFsc28gaGF2ZSBiZWVuIGZsdXNoZWQgdG8gZGlzay4KKwkJICovCisJCWZsdXNo X2xzbiA9IEdldFdhbFJjdkZsdXNoUmVjUHRyKE5VTEwsICZmbHVzaF90bGkpOworCQlyZXBsYXlf bHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cigmcmVwbGF5X3RsaSk7CisJCWlmIChmbHVzaF9sc24g PiByZXBsYXlfbHNuKQorCQl7CisJCQkqdGxpID0gZmx1c2hfdGxpOworCQkJcmV0dXJuIGZsdXNo X2xzbjsKKwkJfQorCQllbHNlCisJCXsKKwkJCSp0bGkgPSByZXBsYXlfdGxpOworCQkJcmV0dXJu IHJlcGxheV9sc247CisJCX0KKwl9Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3Ig bWFpbiBsb29wIG9mIFdBTCBzdW1tYXJpemVyIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkCitI YW5kbGVXYWxTdW1tYXJpemVySW50ZXJydXB0cyh2b2lkKQoreworCWlmIChQcm9jU2lnbmFsQmFy cmllclBlbmRpbmcpCisJCVByb2Nlc3NQcm9jU2lnbmFsQmFycmllcigpOworCisJaWYgKENvbmZp Z1JlbG9hZFBlbmRpbmcpCisJeworCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCVBy b2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCX0KKworCWlmIChTaHV0ZG93blJlcXVlc3RQ ZW5kaW5nIHx8ICFzdW1tYXJpemVfd2FsKQorCXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJZXJy bXNnX2ludGVybmFsKCJXQUwgc3VtbWFyaXplciBzaHV0dGluZyBkb3duIikpOworCQlwcm9jX2V4 aXQoMCk7CisJfQorCisJLyogUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0 aGlzIHByb2Nlc3MgKi8KKwlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCisJCVByb2Nlc3NM b2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7Cit9CisKKy8qCisgKiBTdW1tYXJpemUgYSByYW5n ZSBvZiBXQUwgcmVjb3JkcyBvbiBhIHNpbmdsZSB0aW1lbGluZS4KKyAqCisgKiAndGxpJyBpcyB0 aGUgdGltZWxpbmUgdG8gYmUgc3VtbWFyaXplZC4KKyAqCisgKiAnc3RhcnRfbHNuJyBpcyB0aGUg cG9pbnQgYXQgd2hpY2ggd2Ugc2hvdWxkIHN0YXJ0IHN1bW1hcml6aW5nLiBJZiB0aGlzCisgKiB2 YWx1ZSBjb21lcyBmcm9tIHRoZSBlbmQgTFNOIG9mIHRoZSBwcmV2aW91cyByZWNvcmQgYXMgcmV0 dXJuZWQgYnkgdGhlCisgKiB4bG9ncmFkZXIgbWFjaGluZXJ5LCAnZXhhY3QnIHNob3VsZCBiZSB0 cnVlOyBvdGhlcndpc2UsICdleGFjdCcgc2hvdWxkCisgKiBiZSBmYWxzZSwgYW5kIHRoaXMgZnVu Y3Rpb24gd2lsbCBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIHN0YXJ0IG9mIGEgdmFsaWQKKyAqIFdB TCByZWNvcmQuCisgKgorICogJ3N3aXRjaF9sc24nIGlzIHRoZSBwb2ludCBhdCB3aGljaCB3ZSBz aG91bGQgc3dpdGNoIHRvIGEgbGF0ZXIgdGltZWxpbmUsCisgKiBpZiB3ZSdyZSBzdW1tYXJpemlu ZyBhIGhpc3RvcmljIHRpbWVsaW5lLgorICoKKyAqICdtYXhpbXVtX2xzbicgaWRlbnRpZmllcyB0 aGUgcG9pbnQgYmV5b25kIHdoaWNoIHdlIGNhbid0IGNvdW50IG9uIGJlaW5nCisgKiBhYmxlIHRv IHJlYWQgYW55IG1vcmUgV0FMLiBJdCBzaG91bGQgYmUgdGhlIHN3aXRjaCBwb2ludCB3aGVuIHJl YWRpbmcgYQorICogaGlzdG9yaWMgdGltZWxpbmUsIG9yIHRoZSBtb3N0LXJlY2VudGx5LW1lYXN1 cmVkIGVuZCBvZiBXQUwgd2hlbiByZWFkaW5nCisgKiB0aGUgY3VycmVudCB0aW1lbGluZS4KKyAq CisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBMU04gYXQgd2hpY2ggdGhlIFdBTCBzdW1tYXJ5 IGFjdHVhbGx5IGVuZHMuIE1vc3QKKyAqIG9mdGVuLCBhIHN1bW1hcnkgZmlsZSBlbmRzIGJlY2F1 c2Ugd2Ugbm90aWNlIHRoYXQgYSBjaGVja3BvaW50IGhhcworICogb2NjdXJyZWQgYW5kIHJlYWNo IHRoZSByZWRvIHBvaW50ZXIgb2YgdGhhdCBjaGVja3BvaW50LCBidXQgc29tZXRpbWVzCisgKiB3 ZSBzdG9wIGZvciBvdGhlciByZWFzb25zLCBzdWNoIGFzIGEgdGltZWxpbmUgc3dpdGNoLgorICov CitzdGF0aWMgWExvZ1JlY1B0cgorU3VtbWFyaXplV0FMKFRpbWVMaW5lSUQgdGxpLCBYTG9nUmVj UHRyIHN0YXJ0X2xzbiwgYm9vbCBleGFjdCwKKwkJCSBYTG9nUmVjUHRyIHN3aXRjaF9sc24sIFhM b2dSZWNQdHIgbWF4aW11bV9sc24pCit7CisJU3VtbWFyaXplclJlYWRMb2NhbFhMb2dQcml2YXRl ICpwcml2YXRlX2RhdGE7CisJWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyOworCVhMb2dSZWNQ dHIJc3VtbWFyeV9zdGFydF9sc247CisJWExvZ1JlY1B0cglzdW1tYXJ5X2VuZF9sc24gPSBzd2l0 Y2hfbHNuOworCWNoYXIJCXRlbXBfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJCWZpbmFsX3BhdGhb TUFYUEdQQVRIXTsKKwlXYWxTdW1tYXJ5SU8gaW87CisJQmxvY2tSZWZUYWJsZSAqYnJ0YWIgPSBD cmVhdGVFbXB0eUJsb2NrUmVmVGFibGUoKTsKKworCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBkYXRh IGZvciB4bG9ncmVhZGVyLiAqLworCXByaXZhdGVfZGF0YSA9IChTdW1tYXJpemVyUmVhZExvY2Fs WExvZ1ByaXZhdGUgKikKKwkJcGFsbG9jMChzaXplb2YoU3VtbWFyaXplclJlYWRMb2NhbFhMb2dQ cml2YXRlKSk7CisJcHJpdmF0ZV9kYXRhLT50bGkgPSB0bGk7CisJcHJpdmF0ZV9kYXRhLT5oaXN0 b3JpYyA9ICFYTG9nUmVjUHRySXNJbnZhbGlkKHN3aXRjaF9sc24pOworCXByaXZhdGVfZGF0YS0+ cmVhZF91cHRvID0gbWF4aW11bV9sc247CisKKwkvKiBDcmVhdGUgeGxvZ3JlYWRlci4gKi8KKwl4 bG9ncmVhZGVyID0gWExvZ1JlYWRlckFsbG9jYXRlKHdhbF9zZWdtZW50X3NpemUsIE5VTEwsCisJ CQkJCQkJCQlYTF9ST1VUSU5FKC5wYWdlX3JlYWQgPSAmc3VtbWFyaXplcl9yZWFkX2xvY2FsX3hs b2dfcGFnZSwKKwkJCQkJCQkJCQkJICAgLnNlZ21lbnRfb3BlbiA9ICZ3YWxfc2VnbWVudF9vcGVu LAorCQkJCQkJCQkJCQkgICAuc2VnbWVudF9jbG9zZSA9ICZ3YWxfc2VnbWVudF9jbG9zZSksCisJ CQkJCQkJCQlwcml2YXRlX2RhdGEpOworCWlmICh4bG9ncmVhZGVyID09IE5VTEwpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJy bXNnKCJvdXQgb2YgbWVtb3J5IiksCisJCQkJIGVycmRldGFpbCgiRmFpbGVkIHdoaWxlIGFsbG9j YXRpbmcgYSBXQUwgcmVhZGluZyBwcm9jZXNzb3IuIikpKTsKKworCS8qCisJICogV2hlbiBleGFj dCA9IGZhbHNlLCB3ZSdyZSBzdGFydGluZyBmcm9tIGFuIGFyYml0cmFyeSBwb2ludCBpbiB0aGUg V0FMCisJICogYW5kIG11c3Qgc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBzdGFydCBvZiB0aGUgbmV4 dCByZWNvcmQuCisJICoKKwkgKiBXaGVuIGV4YWN0ID0gdHJ1ZSwgc3RhcnRfbHNuIHNob3VsZCBi ZSBlaXRoZXIgdGhlIExTTiB3aGVyZSBhIHJlY29yZAorCSAqIGJlZ2lucywgb3IgdGhlIExTTiBv ZiBhIHBhZ2Ugd2hlcmUgdGhlIHBhZ2UgaGVhZGVyIGlzIGltbWVkaWF0ZWx5CisJICogZm9sbG93 ZWQgYnkgdGhlIHN0YXJ0IG9mIGEgbmV3IHJlY29yZC4gWExvZ0JlZ2luUmVhZCBzaG91bGQgdG9s ZXJhdGUKKwkgKiBlaXRoZXIgY2FzZS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gYWxsb3cgZm9yIGJv dGggY2FzZXMgYmVjYXVzZSB0aGUgYmVoYXZpb3Igb2YgeGxvZ3JlYWRlcgorCSAqIHZhcmllcy4g V2hlbiBhIHJlY29yZCBzcGFucyB0d28gb3IgbW9yZSB4bG9nIHBhZ2VzLCB0aGUgZW5kaW5nIExT TgorCSAqIHJlcG9ydGVkIGJ5IHhsb2dyZWFkZXIgd2lsbCBiZSB0aGUgc3RhcnRpbmcgTFNOIG9m IHRoZSBmb2xsb3dpbmcKKwkgKiByZWNvcmQsIGJ1dCB3aGVuIGFuIHhsb2cgcGFnZSBib3VuZGFy eSBmYWxscyBiZXR3ZWVuIHR3byByZWNvcmRzLCB0aGUKKwkgKiBlbmQgTFNOIGZvciB0aGUgZmly c3Qgd2lsbCBiZSByZXBvcnRlZCBhcyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKKwkgKiBmb2xsb3dp bmcgcGFnZS4gV2UgY2FuJ3Qga25vdyB1bnRpbCB3ZSByZWFkIHRoYXQgcGFnZSBob3cgbGFyZ2Ug dGhlCisJICogaGVhZGVyIHdpbGwgYmUsIGJ1dCB3ZSdsbCBoYXZlIHRvIHNraXAgb3ZlciBpdCB0 byBmaW5kIHRoZSBuZXh0IHJlY29yZC4KKwkgKi8KKwlpZiAoZXhhY3QpCisJeworCQkvKgorCQkg KiBFdmVuIGlmIHN0YXJ0X2xzbiBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSByYXRoZXIgdGhh biB0aGUKKwkJICogYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCByZWNvcmQgb24gdGhhdCBwYWdlLCB3 ZSBzaG91bGQgc3RpbGwgdXNlIGl0CisJCSAqIGFzIHRoZSBzdGFydCBMU04gZm9yIHRoZSBzdW1t YXJ5IGZpbGUuIFRoYXQncyBiZWNhdXNlIHdlIGRldGVjdAorCQkgKiBtaXNzaW5nIHN1bW1hcnkg ZmlsZXMgYnkgbG9va2luZyBmb3IgY2FzZXMgd2hlcmUgdGhlIGVuZCBMU04gb2Ygb25lCisJCSAq IGZpbGUgaXMgbGVzcyB0aGFuIHRoZSBzdGFydCBMU04gb2YgdGhlIG5leHQgZmlsZS4gV2hlbiBv bmx5IGEgcGFnZQorCQkgKiBoZWFkZXIgaXMgc2tpcHBlZCwgbm90aGluZyBoYXMgYmVlbiBtaXNz ZWQuCisJCSAqLworCQlYTG9nQmVnaW5SZWFkKHhsb2dyZWFkZXIsIHN0YXJ0X2xzbik7CisJCXN1 bW1hcnlfc3RhcnRfbHNuID0gc3RhcnRfbHNuOworCX0KKwllbHNlCisJeworCQlzdW1tYXJ5X3N0 YXJ0X2xzbiA9IFhMb2dGaW5kTmV4dFJlY29yZCh4bG9ncmVhZGVyLCBzdGFydF9sc24pOworCQlp ZiAoWExvZ1JlY1B0cklzSW52YWxpZChzdW1tYXJ5X3N0YXJ0X2xzbikpCisJCXsKKwkJCS8qCisJ CQkgKiBJZiB3ZSBoaXQgZW5kLW9mLVdBTCB3aGlsZSB0cnlpbmcgdG8gZmluZCB0aGUgbmV4dCB2 YWxpZAorCQkJICogcmVjb3JkLCB3ZSBtdXN0IGJlIG9uIGEgaGlzdG9yaWMgdGltZWxpbmUgdGhh dCBoYXMgbm8gdmFsaWQKKwkJCSAqIHJlY29yZHMgdGhhdCBiZWdpbiBhZnRlciBzdGFydF9sc24g YW5kIGJlZm9yZSBlbmQgb2YgV0FMLgorCQkJICovCisJCQlpZiAocHJpdmF0ZV9kYXRhLT5lbmRf b2Zfd2FsKQorCQkJeworCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJZXJybXNnX2ludGVybmFs KCJjb3VsZCBub3QgcmVhZCBXQUwgZnJvbSB0aW1lbGluZSAldSBhdCAlWC8lWDogZW5kIG9mIFdB TCBhdCAlWC8lWCIsCisJCQkJCQkJCQkJdGxpLAorCQkJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhz dGFydF9sc24pLAorCQkJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhwcml2YXRlX2RhdGEtPnJlYWRf dXB0bykpKTsKKworCQkJCS8qCisJCQkJICogVGhlIHRpbWVsaW5lIGVuZHMgYXQgb3IgYWZ0ZXIg c3RhcnRfbHNuLCB3aXRob3V0IGNvbnRhaW5pbmcKKwkJCQkgKiBhbnkgcmVjb3Jkcy4gVGh1cywg d2UgbXVzdCBtYWtlIHN1cmUgdGhlIG1haW4gbG9vcCBkb2VzIG5vdAorCQkJCSAqIGl0ZXJhdGUu IElmIHN0YXJ0X2xzbiBpcyB0aGUgZW5kIG9mIHRoZSB0aW1lbGluZSwgdGhlbiB3ZQorCQkJCSAq IHdvbid0IGFjdHVhbGx5IGVtaXQgYW4gZW1wdHkgc3VtbWFyeSBmaWxlLCBidXQgb3RoZXJ3aXNl LAorCQkJCSAqIHdlIG11c3QsIHRvIGNhcHR1cmUgdGhlIGZhY3QgdGhhdCB0aGUgTFNOIHJhbmdl IGluIHF1ZXN0aW9uCisJCQkJICogY29udGFpbnMgbm8gaW50ZXJlc3RpbmcgV0FMIHJlY29yZHMu CisJCQkJICovCisJCQkJc3VtbWFyeV9zdGFydF9sc24gPSBzdGFydF9sc247CisJCQkJc3VtbWFy eV9lbmRfbHNuID0gcHJpdmF0ZV9kYXRhLT5yZWFkX3VwdG87CisJCQkJc3dpdGNoX2xzbiA9IHhs b2dyZWFkZXItPkVuZFJlY1B0cjsKKwkJCX0KKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycm1zZygiY291bGQgbm90IGZpbmQgYSB2YWxpZCByZWNvcmQgYWZ0ZXIgJVgvJVgi LAorCQkJCQkJCQlMU05fRk9STUFUX0FSR1Moc3RhcnRfbHNuKSkpKTsKKwkJfQorCisJCS8qIFdl IHNob3VsZG4ndCBnbyBiYWNrd2FyZC4gKi8KKwkJQXNzZXJ0KHN1bW1hcnlfc3RhcnRfbHNuID49 IHN0YXJ0X2xzbik7CisJfQorCisJLyoKKwkgKiBNYWluIGxvb3A6IHJlYWQgeGxvZyByZWNvcmRz IG9uZSBieSBvbmUuCisJICovCisJd2hpbGUgKDEpCisJeworCQlpbnQJCQlibG9ja19pZDsKKwkJ Y2hhcgkgICAqZXJyb3Jtc2c7CisJCVhMb2dSZWNvcmQgKnJlY29yZDsKKwkJYm9vbAkJc3RvcF9y ZXF1ZXN0ZWQgPSBmYWxzZTsKKworCQlIYW5kbGVXYWxTdW1tYXJpemVySW50ZXJydXB0cygpOwor CisJCS8qIFdlIHNob3VsZG4ndCBnbyBiYWNrd2FyZC4gKi8KKwkJQXNzZXJ0KHN1bW1hcnlfc3Rh cnRfbHNuIDw9IHhsb2dyZWFkZXItPkVuZFJlY1B0cik7CisKKwkJLyogTm93IHJlYWQgdGhlIG5l eHQgcmVjb3JkLiAqLworCQlyZWNvcmQgPSBYTG9nUmVhZFJlY29yZCh4bG9ncmVhZGVyLCAmZXJy b3Jtc2cpOworCQlpZiAocmVjb3JkID09IE5VTEwpCisJCXsKKwkJCWlmIChwcml2YXRlX2RhdGEt PmVuZF9vZl93YWwpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUaGlzIHRpbWVsaW5lIG11c3QgYmUg aGlzdG9yaWMgYW5kIG11c3QgZW5kIGJlZm9yZSB3ZSB3ZXJlCisJCQkJICogYWJsZSB0byByZWFk IGEgY29tcGxldGUgcmVjb3JkLgorCQkJCSAqLworCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJ ZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgcmVhZCBXQUwgZnJvbSB0aW1lbGluZSAlZCBhdCAl WC8lWDogZW5kIG9mIFdBTCBhdCAlWC8lWCIsCisJCQkJCQkJCQkJdGxpLAorCQkJCQkJCQkJCUxT Tl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5FbmRSZWNQdHIpLAorCQkJCQkJCQkJCUxTTl9GT1JN QVRfQVJHUyhwcml2YXRlX2RhdGEtPnJlYWRfdXB0bykpKTsKKwkJCQkvKiBTdW1tYXJ5IGVuZHMg YXQgZW5kIG9mIFdBTC4gKi8KKwkJCQlzdW1tYXJ5X2VuZF9sc24gPSBwcml2YXRlX2RhdGEtPnJl YWRfdXB0bzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnJvcm1zZykKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNn KCJjb3VsZCBub3QgcmVhZCBXQUwgZnJvbSB0aW1lbGluZSAldSBhdCAlWC8lWDogJXMiLAorCQkJ CQkJCQl0bGksIExTTl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5FbmRSZWNQdHIpLAorCQkJCQkJ CQllcnJvcm1zZykpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBXQUwg ZnJvbSB0aW1lbGluZSAldSBhdCAlWC8lWCIsCisJCQkJCQkJCXRsaSwgTFNOX0ZPUk1BVF9BUkdT KHhsb2dyZWFkZXItPkVuZFJlY1B0cikpKSk7CisJCX0KKworCQkvKiBXZSBzaG91bGRuJ3QgZ28g YmFja3dhcmQuICovCisJCUFzc2VydChzdW1tYXJ5X3N0YXJ0X2xzbiA8PSB4bG9ncmVhZGVyLT5F bmRSZWNQdHIpOworCisJCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChzd2l0Y2hfbHNuKSAmJgor CQkJeGxvZ3JlYWRlci0+UmVhZFJlY1B0ciA+PSBzd2l0Y2hfbHNuKQorCQl7CisJCQkvKgorCQkJ ICogV29vcHMhIFdlJ3ZlIHJlYWQgYSByZWNvcmQgdGhhdCAqc3RhcnRzKiBhZnRlciB0aGUgc3dp dGNoIExTTiwKKwkJCSAqIGNvbnRyYXJ5IHRvIG91ciBnb2FsIG9mIHJlYWRpbmcgb25seSB1bnRp bCB3ZSBoaXQgdGhlIGZpcnN0CisJCQkgKiByZWNvcmQgdGhhdCBlbmRzIGF0IG9yIGFmdGVyIHRo ZSBzd2l0Y2ggTFNOLiBQcmV0ZW5kIHdlIGRpZG4ndAorCQkJICogcmVhZCBpdCBhZnRlciBhbGwg YnkgYmFpbGluZyBvdXQgb2YgdGhpcyBsb29wIHJpZ2h0IGhlcmUsCisJCQkgKiBiZWZvcmUgd2Ug ZG8gYW55dGhpbmcgd2l0aCB0aGlzIHJlY29yZC4KKwkJCSAqCisJCQkgKiBUaGlzIGNhbiBoYXBw ZW4gYmVjYXVzZSB0aGUgbGFzdCByZWNvcmQgYmVmb3JlIHRoZSBzd2l0Y2ggTFNOCisJCQkgKiBt aWdodCBiZSBjb250aW51ZWQgYWNyb3NzIG11bHRpcGxlIHBhZ2VzLCBhbmQgdGhlbiB3ZSBtaWdo dAorCQkJICogY29tZSB0byBhIHBhZ2Ugd2l0aCBYTFBfRklSU1RfSVNfT1ZFUldSSVRFX0NPTlRS RUNPUkQgc2V0LiBJbgorCQkJICogdGhhdCBjYXNlLCB0aGUgcmVjb3JkIHRoYXQgd2FzIGNvbnRp bnVlZCBhY3Jvc3MgbXVsdGlwbGUgcGFnZXMKKwkJCSAqIGlzIGluY29tcGxldGUgYW5kIHdpbGwg YmUgZGlzcmVnYXJkZWQsIGFuZCB0aGUgcmVhZCB3aWxsCisJCQkgKiByZXN0YXJ0IGZyb20gdGhl IGJlZ2lubmluZyBvZiB0aGUgcGFnZSB0aGF0IGlzIGZsYWdnZWQKKwkJCSAqIFhMUF9GSVJTVF9J U19PVkVSV1JJVEVfQ09OVFJFQ09SRC4KKwkJCSAqCisJCQkgKiBJZiB0aGlzIGNhc2Ugb2NjdXJz LCB3ZSBjYW4gZmFpcmx5IHNheSB0aGF0IHRoZSBjdXJyZW50IHN1bW1hcnkKKwkJCSAqIGZpbGUg ZW5kcyBhdCB0aGUgc3dpdGNoIExTTiBleGFjdGx5LiBUaGUgZmlyc3QgcmVjb3JkIG9uIHRoZQor CQkJICogcGFnZSBtYXJrZWQgWExQX0ZJUlNUX0lTX09WRVJXUklURV9DT05UUkVDT1JEIHdpbGwg YmUKKwkJCSAqIGRpc2NvdmVyZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBuZXh0IHN1bW1hcnkgZmls ZS4KKwkJCSAqLworCQkJc3VtbWFyeV9lbmRfbHNuID0gc3dpdGNoX2xzbjsKKwkJCWJyZWFrOwor CQl9CisKKwkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgcGFydGljdWxhciB0eXBlcyBvZiBXQUwg cmVjb3Jkcy4gKi8KKwkJc3dpdGNoIChYTG9nUmVjR2V0Um1pZCh4bG9ncmVhZGVyKSkKKwkJewor CQkJY2FzZSBSTV9TTUdSX0lEOgorCQkJCVN1bW1hcml6ZVNtZ3JSZWNvcmQoeGxvZ3JlYWRlciwg YnJ0YWIpOworCQkJCWJyZWFrOworCQkJY2FzZSBSTV9YQUNUX0lEOgorCQkJCVN1bW1hcml6ZVhh Y3RSZWNvcmQoeGxvZ3JlYWRlciwgYnJ0YWIpOworCQkJCWJyZWFrOworCQkJY2FzZSBSTV9YTE9H X0lEOgorCQkJCXN0b3BfcmVxdWVzdGVkID0gU3VtbWFyaXplWGxvZ1JlY29yZCh4bG9ncmVhZGVy KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkg KiBJZiB3ZSd2ZSBiZWVuIHRvbGQgdGhhdCBpdCdzIHRpbWUgdG8gZW5kIHRoaXMgV0FMIHN1bW1h cnkgZmlsZSwgZG8KKwkJICogc28uIEFzIGFuIGV4Y2VwdGlvbiwgaWYgdGhlcmUncyBub3RoaW5n IGluY2x1ZGVkIGluIHRoaXMgV0FMCisJCSAqIHN1bW1hcnkgZmlsZSB5ZXQsIHRoZW4gc3RvcHBp bmcgZG9lc24ndCBtYWtlIGFueSBzZW5zZSwgYW5kIHdlCisJCSAqIHNob3VsZCB3YWl0IHVudGls IHRoZSBuZXh0IHN0b3AgcG9pbnQgaW5zdGVhZC4KKwkJICovCisJCWlmIChzdG9wX3JlcXVlc3Rl ZCAmJiB4bG9ncmVhZGVyLT5SZWFkUmVjUHRyID4gc3VtbWFyeV9zdGFydF9sc24pCisJCXsKKwkJ CXN1bW1hcnlfZW5kX2xzbiA9IHhsb2dyZWFkZXItPlJlYWRSZWNQdHI7CisJCQlicmVhazsKKwkJ fQorCisJCS8qIEZlZWQgYmxvY2sgcmVmZXJlbmNlcyBmcm9tIHhsb2cgcmVjb3JkIHRvIGJsb2Nr IHJlZmVyZW5jZSB0YWJsZS4gKi8KKwkJZm9yIChibG9ja19pZCA9IDA7IGJsb2NrX2lkIDw9IFhM b2dSZWNNYXhCbG9ja0lkKHhsb2dyZWFkZXIpOworCQkJIGJsb2NrX2lkKyspCisJCXsKKwkJCVJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yOworCQkJRm9ya051bWJlcglmb3JrbnVtOworCQkJQmxvY2tO dW1iZXIgYmxvY2tudW07CisKKwkJCWlmICghWExvZ1JlY0dldEJsb2NrVGFnRXh0ZW5kZWQoeGxv Z3JlYWRlciwgYmxvY2tfaWQsICZybG9jYXRvciwKKwkJCQkJCQkJCQkJJmZvcmtudW0sICZibG9j a251bSwgTlVMTCkpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBBcyB3ZSBkbyBlbHNl d2hlcmUsIGlnbm9yZSB0aGUgRlNNIGZvcmssIGJlY2F1c2UgaXQncyBub3QgZnVsbHkKKwkJCSAq IFdBTC1sb2dnZWQuCisJCQkgKi8KKwkJCWlmIChmb3JrbnVtICE9IEZTTV9GT1JLTlVNKQorCQkJ CUJsb2NrUmVmVGFibGVNYXJrQmxvY2tNb2RpZmllZChicnRhYiwgJnJsb2NhdG9yLCBmb3JrbnVt LAorCQkJCQkJCQkJCQkgICBibG9ja251bSk7CisJCX0KKworCQkvKiBVcGRhdGUgb3VyIG5vdGlv biBvZiB3aGVyZSB0aGlzIHN1bW1hcnkgZmlsZSBlbmRzLiAqLworCQlzdW1tYXJ5X2VuZF9sc24g PSB4bG9ncmVhZGVyLT5FbmRSZWNQdHI7CisKKwkJLyogQWxzbyB1cGRhdGUgc2hhcmVkIG1lbW9y eS4gKi8KKwkJTFdMb2NrQWNxdWlyZShXQUxTdW1tYXJpemVyTG9jaywgTFdfRVhDTFVTSVZFKTsK KwkJQXNzZXJ0KHN1bW1hcnlfZW5kX2xzbiA+PSBXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xz bik7CisJCUFzc2VydChzdW1tYXJ5X2VuZF9sc24gPj0gV2FsU3VtbWFyaXplckN0bC0+c3VtbWFy aXplZF9sc24pOworCQlXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xzbiA9IHN1bW1hcnlfZW5k X2xzbjsKKwkJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CisKKwkJLyoKKwkJICog SWYgd2UgaGF2ZSBhIHN3aXRjaCBMU04gYW5kIGhhdmUgcmVhY2hlZCBpdCwgc3RvcCBiZWZvcmUg cmVhZGluZworCQkgKiB0aGUgbmV4dCByZWNvcmQuCisJCSAqLworCQlpZiAoIVhMb2dSZWNQdHJJ c0ludmFsaWQoc3dpdGNoX2xzbikgJiYKKwkJCXhsb2dyZWFkZXItPkVuZFJlY1B0ciA+PSBzd2l0 Y2hfbHNuKQorCQkJYnJlYWs7CisJfQorCisJLyogRGVzdHJveSB4bG9ncmVhZGVyLiAqLworCXBm cmVlKHhsb2dyZWFkZXItPnByaXZhdGVfZGF0YSk7CisJWExvZ1JlYWRlckZyZWUoeGxvZ3JlYWRl cik7CisKKwkvKgorCSAqIElmIGEgdGltZWxpbmUgc3dpdGNoIG9jY3Vycywgd2UgbWF5IGZhaWwg dG8gbWFrZSBhbnkgcHJvZ3Jlc3MgYXQgYWxsCisJICogYmVmb3JlIGV4aXRpbmcgdGhlIGxvb3Ag YWJvdmUuIElmIHRoYXQgaGFwcGVucywgd2UgZG9uJ3Qgd3JpdGUgYSBXQUwKKwkgKiBzdW1tYXJ5 IGZpbGUgYXQgYWxsLgorCSAqLworCWlmIChzdW1tYXJ5X2VuZF9sc24gPiBzdW1tYXJ5X3N0YXJ0 X2xzbikKKwl7CisJCS8qIEdlbmVyYXRlIHRlbXBvcmFyeSBhbmQgZmluYWwgcGF0aCBuYW1lLiAq LworCQlzbnByaW50Zih0ZW1wX3BhdGgsIE1BWFBHUEFUSCwKKwkJCQkgWExPR0RJUiAiL3N1bW1h cmllcy90ZW1wLnN1bW1hcnkiKTsKKwkJc25wcmludGYoZmluYWxfcGF0aCwgTUFYUEdQQVRILAor CQkJCSBYTE9HRElSICIvc3VtbWFyaWVzLyUwOFglMDhYJTA4WCUwOFglMDhYLnN1bW1hcnkiLAor CQkJCSB0bGksCisJCQkJIExTTl9GT1JNQVRfQVJHUyhzdW1tYXJ5X3N0YXJ0X2xzbiksCisJCQkJ IExTTl9GT1JNQVRfQVJHUyhzdW1tYXJ5X2VuZF9sc24pKTsKKworCQkvKiBPcGVuIHRoZSB0ZW1w b3JhcnkgZmlsZSBmb3Igd3JpdGluZy4gKi8KKwkJaW8uZmlsZXBvcyA9IDA7CisJCWlvLmZpbGUg PSBQYXRoTmFtZU9wZW5GaWxlKHRlbXBfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVO Qyk7CisJCWlmIChpby5maWxlIDwgMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUg XCIlc1wiOiAlbSIsIHRlbXBfcGF0aCkpKTsKKworCQkvKiBXcml0ZSB0aGUgZGF0YS4gKi8KKwkJ V3JpdGVCbG9ja1JlZlRhYmxlKGJydGFiLCBXcml0ZVdhbFN1bW1hcnksICZpbyk7CisKKwkJLyog Q2xvc2UgdGVtcG9yYXJ5IGZpbGUgYW5kIHNodXQgZG93biB4bG9ncmVhZGVyLiAqLworCQlGaWxl Q2xvc2UoaW8uZmlsZSk7CisKKwkJLyogVGVsbCB0aGUgdXNlciB3aGF0IHdlIGRpZC4gKi8KKwkJ ZXJlcG9ydChERUJVRzEsCisJCQkJZXJybXNnKCJzdW1tYXJpemVkIFdBTCBvbiBUTEkgJWQgZnJv bSAlWC8lWCB0byAlWC8lWCIsCisJCQkJCSAgIHRsaSwKKwkJCQkJICAgTFNOX0ZPUk1BVF9BUkdT KHN1bW1hcnlfc3RhcnRfbHNuKSwKKwkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHN1bW1hcnlfZW5k X2xzbikpKTsKKworCQkvKiBEdXJhYmx5IHJlbmFtZSB0aGUgbmV3IHN1bW1hcnkgaW50byBwbGFj ZS4gKi8KKwkJZHVyYWJsZV9yZW5hbWUodGVtcF9wYXRoLCBmaW5hbF9wYXRoLCBFUlJPUik7CisJ fQorCisJcmV0dXJuIHN1bW1hcnlfZW5kX2xzbjsKK30KKworLyoKKyAqIFNwZWNpYWwgaGFuZGxp bmcgZm9yIFdBTCByZWNvcmRzIHdpdGggUk1fU01HUl9JRC4KKyAqLworc3RhdGljIHZvaWQKK1N1 bW1hcml6ZVNtZ3JSZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBCbG9ja1JlZlRh YmxlICpicnRhYikKK3sKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHhsb2dyZWFkZXIp ICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX1NNR1JfQ1JFQVRFKQorCXsK KwkJeGxfc21ncl9jcmVhdGUgKnhscmVjOworCisJCS8qCisJCSAqIElmIGEgbmV3IHJlbGF0aW9u IGZvcmsgaXMgY3JlYXRlZCBvbiBkaXNrLCB0aGVyZSBpcyBubyBwb2ludAorCQkgKiB0cmFja2lu ZyBhbnl0aGluZyBhYm91dCB3aGljaCBibG9ja3MgaGF2ZSBiZWVuIG1vZGlmaWVkLCBiZWNhdXNl CisJCSAqIHRoZSB3aG9sZSB0aGluZyB3aWxsIGJlIG5ldy4gSGVuY2UsIHNldCB0aGUgbGltaXQg YmxvY2sgZm9yIHRoaXMKKwkJICogZm9yayB0byAwLgorCQkgKgorCQkgKiBJZ25vcmUgdGhlIEZT TSBmb3JrLCB3aGljaCBpcyBub3QgZnVsbHkgV0FMLWxvZ2dlZC4KKwkJICovCisJCXhscmVjID0g KHhsX3NtZ3JfY3JlYXRlICopIFhMb2dSZWNHZXREYXRhKHhsb2dyZWFkZXIpOworCisJCWlmICh4 bHJlYy0+Zm9ya051bSAhPSBGU01fRk9SS05VTSkKKwkJCUJsb2NrUmVmVGFibGVTZXRMaW1pdEJs b2NrKGJydGFiLCAmeGxyZWMtPnJsb2NhdG9yLAorCQkJCQkJCQkJICAgeGxyZWMtPmZvcmtOdW0s IDApOworCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfU01HUl9UUlVOQ0FURSkKKwl7CisJCXhs X3NtZ3JfdHJ1bmNhdGUgKnhscmVjOworCisJCXhscmVjID0gKHhsX3NtZ3JfdHJ1bmNhdGUgKikg WExvZ1JlY0dldERhdGEoeGxvZ3JlYWRlcik7CisKKwkJLyoKKwkJICogSWYgYSByZWxhdGlvbiBm b3JrIGlzIHRydW5jYXRlZCBvbiBkaXNrLCB0aGVyZSBpcyBubyBwb2ludCBpbgorCQkgKiB0cmFj a2luZyBhbnl0aGluZyBhYm91dCBibG9jayBtb2RpZmljYXRpb25zIGJleW9uZCB0aGUgdHJ1bmNh dGlvbgorCQkgKiBwb2ludC4KKwkJICoKKwkJICogV2UgaWdub3JlIFNNR1JfVFJVTkNBVEVfRlNN IGhlcmUgYmVjYXVzZSB0aGUgRlNNIGlzbid0IGZ1bGx5CisJCSAqIFdBTC1sb2dnZWQgYW5kIHRo dXMgd2UgY2FuJ3QgdHJhY2sgbW9kaWZpZWQgYmxvY2tzIGZvciBpdCBhbnl3YXkuCisJCSAqLwor CQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfSEVBUCkgIT0gMCkKKwkJCUJsb2Nr UmVmVGFibGVTZXRMaW1pdEJsb2NrKGJydGFiLCAmeGxyZWMtPnJsb2NhdG9yLAorCQkJCQkJCQkJ ICAgTUFJTl9GT1JLTlVNLCB4bHJlYy0+Ymxrbm8pOworCQlpZiAoKHhscmVjLT5mbGFncyAmIFNN R1JfVFJVTkNBVEVfVk0pICE9IDApCisJCQlCbG9ja1JlZlRhYmxlU2V0TGltaXRCbG9jayhicnRh YiwgJnhscmVjLT5ybG9jYXRvciwKKwkJCQkJCQkJCSAgIFZJU0lCSUxJVFlNQVBfRk9SS05VTSwg eGxyZWMtPmJsa25vKTsKKwl9Cit9CisKKy8qCisgKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBXQUwg cmVjb2RzIHdpdGggUk1fWEFDVF9JRC4KKyAqLworc3RhdGljIHZvaWQKK1N1bW1hcml6ZVhhY3RS ZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBCbG9ja1JlZlRhYmxlICpicnRhYikK K3sKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHhsb2dyZWFkZXIpICYgflhMUl9JTkZP X01BU0s7CisJdWludDgJCXhhY3RfaW5mbyA9IGluZm8gJiBYTE9HX1hBQ1RfT1BNQVNLOworCisJ aWYgKHhhY3RfaW5mbyA9PSBYTE9HX1hBQ1RfQ09NTUlUIHx8CisJCXhhY3RfaW5mbyA9PSBYTE9H X1hBQ1RfQ09NTUlUX1BSRVBBUkVEKQorCXsKKwkJeGxfeGFjdF9jb21taXQgKnhscmVjID0gKHhs X3hhY3RfY29tbWl0ICopIFhMb2dSZWNHZXREYXRhKHhsb2dyZWFkZXIpOworCQl4bF94YWN0X3Bh cnNlZF9jb21taXQgcGFyc2VkOworCQlpbnQJCQlpOworCisJCS8qCisJCSAqIERvbid0IHRyYWNr IG1vZGlmaWVkIGJsb2NrcyBmb3IgYW55IHJlbGF0aW9ucyB0aGF0IHdlcmUgcmVtb3ZlZCBvbgor CQkgKiBjb21taXQuCisJCSAqLworCQlQYXJzZUNvbW1pdFJlY29yZChYTG9nUmVjR2V0SW5mbyh4 bG9ncmVhZGVyKSwgeGxyZWMsICZwYXJzZWQpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VkLm5y ZWxzOyArK2kpCisJCXsKKwkJCUZvcmtOdW1iZXIJZm9ya251bTsKKworCQkJZm9yIChmb3JrbnVt ID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgKytmb3JrbnVtKQorCQkJCWlmIChmb3JrbnVt ICE9IEZTTV9GT1JLTlVNKQorCQkJCQlCbG9ja1JlZlRhYmxlU2V0TGltaXRCbG9jayhicnRhYiwg JnBhcnNlZC54bG9jYXRvcnNbaV0sCisJCQkJCQkJCQkJCSAgIGZvcmtudW0sIDApOworCQl9CisJ fQorCWVsc2UgaWYgKHhhY3RfaW5mbyA9PSBYTE9HX1hBQ1RfQUJPUlQgfHwKKwkJCSB4YWN0X2lu Zm8gPT0gWExPR19YQUNUX0FCT1JUX1BSRVBBUkVEKQorCXsKKwkJeGxfeGFjdF9hYm9ydCAqeGxy ZWMgPSAoeGxfeGFjdF9hYm9ydCAqKSBYTG9nUmVjR2V0RGF0YSh4bG9ncmVhZGVyKTsKKwkJeGxf eGFjdF9wYXJzZWRfYWJvcnQgcGFyc2VkOworCQlpbnQJCQlpOworCisJCS8qCisJCSAqIERvbid0 IHRyYWNrIG1vZGlmaWVkIGJsb2NrcyBmb3IgYW55IHJlbGF0aW9ucyB0aGF0IHdlcmUgcmVtb3Zl ZCBvbgorCQkgKiBhYm9ydC4KKwkJICovCisJCVBhcnNlQWJvcnRSZWNvcmQoWExvZ1JlY0dldElu Zm8oeGxvZ3JlYWRlciksIHhscmVjLCAmcGFyc2VkKTsKKwkJZm9yIChpID0gMDsgaSA8IHBhcnNl ZC5ucmVsczsgKytpKQorCQl7CisJCQlGb3JrTnVtYmVyCWZvcmtudW07CisKKwkJCWZvciAoZm9y a251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07ICsrZm9ya251bSkKKwkJCQlpZiAoZm9y a251bSAhPSBGU01fRk9SS05VTSkKKwkJCQkJQmxvY2tSZWZUYWJsZVNldExpbWl0QmxvY2soYnJ0 YWIsICZwYXJzZWQueGxvY2F0b3JzW2ldLAorCQkJCQkJCQkJCQkgICBmb3JrbnVtLCAwKTsKKwkJ fQorCX0KK30KKworLyoKKyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIFdBTCByZWNvZHMgd2l0aCBS TV9YTE9HX0lELgorICovCitzdGF0aWMgYm9vbAorU3VtbWFyaXplWGxvZ1JlY29yZChYTG9nUmVh ZGVyU3RhdGUgKnhsb2dyZWFkZXIpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyh4 bG9ncmVhZGVyKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19DSEVDS1BP SU5UX1JFRE8gfHwgaW5mbyA9PSBYTE9HX0NIRUNLUE9JTlRfU0hVVERPV04pCisJeworCQkvKgor CQkgKiBUaGlzIGlzIGFuIExTTiBhdCB3aGljaCByZWRvIG1pZ2h0IGJlZ2luLCBzbyB3ZSdkIGxp a2UKKwkJICogc3VtbWFyaXphdGlvbiB0byBzdG9wIGp1c3QgYmVmb3JlIHRoaXMgV0FMIHJlY29y ZC4KKwkJICovCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIFNpbWlsYXIgdG8gcmVhZF9sb2NhbF94bG9nX3BhZ2UsIGJ1dCBsaW1pdGVkIHRvIHJlYWQg ZnJvbSBvbmUgcGFydGljdWxhcgorICogdGltZWxpbmUuIElmIHRoZSBlbmQgb2YgV0FMIGlzIHJl YWNoZWQsIGl0IHdpbGwgd2FpdCBmb3IgbW9yZSBpZiByZWFkaW5nCisgKiBmcm9tIHRoZSBjdXJy ZW50IHRpbWVsaW5lLCBvciBnaXZlIHVwIGlmIHJlYWRpbmcgZnJvbSBhIGhpc3RvcmljIHRpbWVs aW5lLgorICogSW4gdGhlIGxhdHRlciBjYXNlLCBpdCB3aWxsIGFsc28gc2V0IHByaXZhdGVfZGF0 YS0+ZW5kX29mX3dhbCA9IHRydWUuCisgKgorICogQ2FsbGVyIG11c3Qgc2V0IHByaXZhdGVfZGF0 YS0+dGxpIHRvIHRoZSBUTEkgb2YgaW50ZXJlc3QsCisgKiBwcml2YXRlX2RhdGEtPnJlYWRfdXB0 byB0byB0aGUgbG93ZXN0IExTTiB0aGF0IGlzIG5vdCBrbm93biB0byBiZSBzYWZlCisgKiB0byBy ZWFkIG9uIHRoYXQgdGltZWxpbmUsIGFuZCBwcml2YXRlX2RhdGEtPmhpc3RvcmljIHRvIHRydWUg aWYgYW5kIG9ubHkKKyAqIGlmIHRoZSB0aW1lbGluZSBpcyBub3QgdGhlIGN1cnJlbnQgdGltZWxp bmUuIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUKKyAqIHByaXZhdGVfZGF0YS0+cmVhZF91cHRv IGFuZCBwcml2YXRlX2RhdGEtPmhpc3RvcmljIGlmIG1vcmUgV0FMIGFwcGVhcnMKKyAqIG9uIHRo ZSBjdXJyZW50IHRpbWVsaW5lIG9yIGlmIHRoZSBjdXJyZW50IHRpbWVsaW5lIGJlY29tZXMgaGlz dG9yaWMuCisgKi8KK3N0YXRpYyBpbnQKK3N1bW1hcml6ZXJfcmVhZF9sb2NhbF94bG9nX3BhZ2Uo WExvZ1JlYWRlclN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRy LCBpbnQgcmVxTGVuLAorCQkJCQkJCQlYTG9nUmVjUHRyIHRhcmdldFJlY1B0ciwgY2hhciAqY3Vy X3BhZ2UpCit7CisJaW50CQkJY291bnQ7CisJV0FMUmVhZEVycm9yIGVycmluZm87CisJU3VtbWFy aXplclJlYWRMb2NhbFhMb2dQcml2YXRlICpwcml2YXRlX2RhdGE7CisKKwlIYW5kbGVXYWxTdW1t YXJpemVySW50ZXJydXB0cygpOworCisJcHJpdmF0ZV9kYXRhID0gKFN1bW1hcml6ZXJSZWFkTG9j YWxYTG9nUHJpdmF0ZSAqKQorCQlzdGF0ZS0+cHJpdmF0ZV9kYXRhOworCisJd2hpbGUgKDEpCisJ eworCQlpZiAodGFyZ2V0UGFnZVB0ciArIFhMT0dfQkxDS1NaIDw9IHByaXZhdGVfZGF0YS0+cmVh ZF91cHRvKQorCQl7CisJCQkvKgorCQkJICogbW9yZSB0aGFuIG9uZSBibG9jayBhdmFpbGFibGU7 IHJlYWQgb25seSB0aGF0IGJsb2NrLCBoYXZlCisJCQkgKiBjYWxsZXIgY29tZSBiYWNrIGlmIHRo ZXkgbmVlZCBtb3JlLgorCQkJICovCisJCQljb3VudCA9IFhMT0dfQkxDS1NaOworCQkJYnJlYWs7 CisJCX0KKwkJZWxzZSBpZiAodGFyZ2V0UGFnZVB0ciArIHJlcUxlbiA+IHByaXZhdGVfZGF0YS0+ cmVhZF91cHRvKQorCQl7CisJCQkvKiBXZSBkb24ndCBzZWVtIHRvIGhhdmUgZW5vdWdoIGRhdGEu ICovCisJCQlpZiAocHJpdmF0ZV9kYXRhLT5oaXN0b3JpYykKKwkJCXsKKwkJCQkvKgorCQkJCSAq IFRoaXMgaXMgYSBoaXN0b3JpYyB0aW1lbGluZSwgc28gdGhlcmUgd2lsbCBuZXZlciBiZSBhbnkK KwkJCQkgKiBtb3JlIGRhdGEgdGhhbiB3ZSBoYXZlIGN1cnJlbnRseS4KKwkJCQkgKi8KKwkJCQlw cml2YXRlX2RhdGEtPmVuZF9vZl93YWwgPSB0cnVlOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlYTG9nUmVjUHRyCWxhdGVzdF9sc247CisJCQkJVGltZUxpbmVJRAls YXRlc3RfdGxpOworCisJCQkJLyoKKwkJCQkgKiBUaGlzIGlzIC0gb3IgYXQgbGVhc3Qgd2FzIHVw IHVudGlsIHZlcnkgcmVjZW50bHkgLSB0aGUKKwkJCQkgKiBjdXJyZW50IHRpbWVsaW5lLCBzbyBt b3JlIGRhdGEgbWlnaHQgc2hvdyB1cC4gIERlbGF5IGhlcmUKKwkJCQkgKiBzbyB3ZSBkb24ndCB0 aWdodC1sb29wLgorCQkJCSAqLworCQkJCUhhbmRsZVdhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7 CisJCQkJc3VtbWFyaXplcl93YWl0X2Zvcl93YWwoKTsKKworCQkJCS8qIFJlY2hlY2sgZW5kLW9m LVdBTC4gKi8KKwkJCQlsYXRlc3RfbHNuID0gR2V0TGF0ZXN0TFNOKCZsYXRlc3RfdGxpKTsKKwkJ CQlpZiAocHJpdmF0ZV9kYXRhLT50bGkgPT0gbGF0ZXN0X3RsaSkKKwkJCQl7CisJCQkJCS8qIFN0 aWxsIHRoZSBjdXJyZW50IHRpbWVsaW5lLCB1cGRhdGUgbWF4IExTTi4gKi8KKwkJCQkJQXNzZXJ0 KGxhdGVzdF9sc24gPj0gcHJpdmF0ZV9kYXRhLT5yZWFkX3VwdG8pOworCQkJCQlwcml2YXRlX2Rh dGEtPnJlYWRfdXB0byA9IGxhdGVzdF9sc247CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJ CUxpc3QJICAgKnRsZXMgPSByZWFkVGltZUxpbmVIaXN0b3J5KGxhdGVzdF90bGkpOworCQkJCQlY TG9nUmVjUHRyCXN3aXRjaHBvaW50OworCisJCQkJCS8qCisJCQkJCSAqIFRoZSB0aW1lbGluZSB3 ZSdyZSBzY2FubmluZyBpcyBubyBsb25nZXIgdGhlIGxhdGVzdAorCQkJCQkgKiBvbmUuIEZpZ3Vy ZSBvdXQgd2hlbiBpdCBlbmRlZC4KKwkJCQkJICovCisJCQkJCXByaXZhdGVfZGF0YS0+aGlzdG9y aWMgPSB0cnVlOworCQkJCQlzd2l0Y2hwb2ludCA9IHRsaVN3aXRjaFBvaW50KHByaXZhdGVfZGF0 YS0+dGxpLCB0bGVzLAorCQkJCQkJCQkJCQkJIE5VTEwpOworCisJCQkJCS8qCisJCQkJCSAqIEFs bG93IHJlYWRzIHVwIHRvIGV4YWN0bHkgdGhlIHN3aXRjaCBwb2ludC4KKwkJCQkJICoKKwkJCQkJ ICogSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSByZWFkX3VwdG8gdG8gbW92ZQor CQkJCQkgKiBiYWNrd2FyZHMsIGJlY2F1c2Ugd2FscmVjZWl2ZXIgbWlnaHQgaGF2ZSByZWFkIGEK KwkJCQkJICogcGFydGlhbCByZWNvcmQgYW5kIGZsdXNoZWQgaXQgdG8gZGlzaywgYW5kIHdlJ2Qg dmlldworCQkJCQkgKiB0aGF0IGRhdGEgYXMgc2FmZSB0byByZWFkLiBIb3dldmVyLCB0aGUKKwkJ CQkJICogWExPR19FTkRfT0ZfUkVDT1ZFUlkgcmVjb3JkIHdpbGwgYmUgd3JpdHRlbiBhdCB0aGUg ZW5kCisJCQkJCSAqIG9mIHRoZSBsYXN0IGNvbXBsZXRlIFdBTCByZWNvcmQsIG5vdCBhdCB0aGUg ZW5kIG9mIHRoZQorCQkJCQkgKiBXQUwgdGhhdCB3ZSd2ZSBmbHVzaGVkIHRvIGRpc2suCisJCQkJ CSAqCisJCQkJCSAqIFNvIHN3aXRjaHBvaW50IDwgcHJpdmF0ZS0+cmVhZF91cHRvIGlzIHBvc3Np YmxlIGhlcmUsCisJCQkJCSAqIGJ1dCBzd2l0Y2hwb2ludCA8IHN0YXRlLT5FbmRSZWNQdHIgc2hv dWxkIG5vdCBiZS4KKwkJCQkJICovCisJCQkJCUFzc2VydChzd2l0Y2hwb2ludCA+PSBzdGF0ZS0+ RW5kUmVjUHRyKTsKKwkJCQkJcHJpdmF0ZV9kYXRhLT5yZWFkX3VwdG8gPSBzd2l0Y2hwb2ludDsK KworCQkJCQkvKiBEZWJ1Z2dpbmcgb3V0cHV0LiAqLworCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkJCQllcnJtc2coInRpbWVsaW5lICV1IGJlY2FtZSBoaXN0b3JpYywgY2FuIHJlYWQgdXAgdG8g JVgvJVgiLAorCQkJCQkJCQkgICBwcml2YXRlX2RhdGEtPnRsaSwgTFNOX0ZPUk1BVF9BUkdTKHBy aXZhdGVfZGF0YS0+cmVhZF91cHRvKSkpOworCQkJCX0KKworCQkJCS8qIEdvIGFyb3VuZCBhbmQg dHJ5IGFnYWluLiAqLworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogZW5vdWdoIGJ5dGVz IGF2YWlsYWJsZSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0ICovCisJCQljb3VudCA9IHByaXZhdGVf ZGF0YS0+cmVhZF91cHRvIC0gdGFyZ2V0UGFnZVB0cjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ LyoKKwkgKiBFdmVuIHRob3VnaCB3ZSBqdXN0IGRldGVybWluZWQgaG93IG11Y2ggb2YgdGhlIHBh Z2UgY2FuIGJlIHZhbGlkbHkgcmVhZAorCSAqIGFzICdjb3VudCcsIHJlYWQgdGhlIHdob2xlIHBh Z2UgYW55d2F5LiBJdCdzIGd1YXJhbnRlZWQgdG8gYmUKKwkgKiB6ZXJvLXBhZGRlZCB1cCB0byB0 aGUgcGFnZSBib3VuZGFyeSBpZiBpdCdzIGluY29tcGxldGUuCisJICovCisJaWYgKCFXQUxSZWFk KHN0YXRlLCBjdXJfcGFnZSwgdGFyZ2V0UGFnZVB0ciwgWExPR19CTENLU1osCisJCQkJIHByaXZh dGVfZGF0YS0+dGxpLCAmZXJyaW5mbykpCisJCVdBTFJlYWRSYWlzZUVycm9yKCZlcnJpbmZvKTsK KworCS8qIFRyYWNrIHRoYXQgd2UgcmVhZCBhIHBhZ2UsIGZvciBzbGVlcCB0aW1lIGNhbGN1bGF0 aW9uLiAqLworCSsrcGFnZXNfcmVhZF9zaW5jZV9sYXN0X3NsZWVwOworCisJLyogbnVtYmVyIG9m IHZhbGlkIGJ5dGVzIGluIHRoZSBidWZmZXIgKi8KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisg KiBTbGVlcCBmb3IgbG9uZyBlbm91Z2ggdGhhdCB3ZSBiZWxpZXZlIGl0J3MgbGlrZWx5IHRoYXQg bW9yZSBXQUwgd2lsbAorICogYmUgYXZhaWxhYmxlIGFmdGVyd2FyZHMuCisgKi8KK3N0YXRpYyB2 b2lkCitzdW1tYXJpemVyX3dhaXRfZm9yX3dhbCh2b2lkKQoreworCWlmIChwYWdlc19yZWFkX3Np bmNlX2xhc3Rfc2xlZXAgPT0gMCkKKwl7CisJCS8qCisJCSAqIE5vIHBhZ2VzIHdlcmUgcmVhZCBz aW5jZSB0aGUgbGFzdCBzbGVlcCwgc28gZG91YmxlIHRoZSBzbGVlcCB0aW1lLAorCQkgKiBidXQg bm90IGJleW9uZCB0aGUgbWF4aW11bSBhbGxvd2FibGUgdmFsdWUuCisJCSAqLworCQlzbGVlcF9x dWFudGEgPSBNaW4oc2xlZXBfcXVhbnRhICogMiwgTUFYX1NMRUVQX1FVQU5UQSk7CisJfQorCWVs c2UgaWYgKHBhZ2VzX3JlYWRfc2luY2VfbGFzdF9zbGVlcCA+IDEpCisJeworCQkvKgorCQkgKiBN dWx0aXBsZSBwYWdlcyB3ZXJlIHJlYWQgc2luY2UgdGhlIGxhc3Qgc2xlZXAsIHNvIHJlZHVjZSB0 aGUgc2xlZXAKKwkJICogdGltZS4KKwkJICoKKwkJICogQSBsYXJnZSBidXJzdCBvZiBhY3Rpdml0 eSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IHJlZHVjZSB0aGUKKwkJICogc2xlZXAgdGltZSB0 byB0aGUgbWluaW11bSwgYnV0IHdlIGRvbid0IHdhbnQgYSBoYW5kZnVsIG9mIGV4dHJhIFdBTAor CQkgKiByZWNvcmRzIHRvIHByb3Zva2UgYSBzdHJvbmcgcmVhY3Rpb24uIFdlIGNob29zZSB0byBy ZWR1Y2UgdGhlIHNsZWVwCisJCSAqIHRpbWUgYnkgMSBxdWFudHVtIGZvciBlYWNoIHBhZ2UgcmVh ZCBiZXlvbmQgdGhlIGZpcnN0LCB3aGljaCBpcyBhCisJCSAqIGZhaXJseSBhcmJpdHJhcnkgd2F5 IG9mIHRyeWluZyB0byBiZSByZWFjdGl2ZSB3aXRob3V0CisJCSAqIG92ZXJycmVhY3RpbmcuCisJ CSAqLworCQlpZiAocGFnZXNfcmVhZF9zaW5jZV9sYXN0X3NsZWVwID4gc2xlZXBfcXVhbnRhIC0g MSkKKwkJCXNsZWVwX3F1YW50YSA9IDE7CisJCWVsc2UKKwkJCXNsZWVwX3F1YW50YSAtPSBwYWdl c19yZWFkX3NpbmNlX2xhc3Rfc2xlZXA7CisJfQorCisJLyogT0ssIG5vdyBzbGVlcC4gKi8KKwko dm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJIHNsZWVwX3F1YW50YSAqIE1TX1BFUl9TTEVF UF9RVUFOVFVNLAorCQkJCQkgV0FJVF9FVkVOVF9XQUxfU1VNTUFSSVpFUl9XQUwpOworCVJlc2V0 TGF0Y2goTXlMYXRjaCk7CisKKwkvKiBSZXNldCBjb3VudCBvZiBwYWdlcyByZWFkLiAqLworCXBh Z2VzX3JlYWRfc2luY2VfbGFzdF9zbGVlcCA9IDA7Cit9CisKKy8qCisgKiBNb3N0IHJlY2VudCBS ZWRvUmVjUHRyIHZhbHVlIG9ic2VydmVkIGJ5IFJlbW92ZU9sZFdhbFN1bW1hcmllcy4KKyAqLwor c3RhdGljIHZvaWQKK01heWJlUmVtb3ZlT2xkV2FsU3VtbWFyaWVzKHZvaWQpCit7CisJWExvZ1Jl Y1B0cglyZWRvX3BvaW50ZXIgPSBHZXRSZWRvUmVjUHRyKCk7CisJTGlzdAkgICAqd3NsaXN0Owor CXRpbWVfdAkJY3V0b2ZmX3RpbWU7CisKKwkvKiBJZiBXQUwgc3VtbWFyeSByZW1vdmFsIGlzIGRp c2FibGVkLCBkb24ndCBkbyBhbnl0aGluZy4gKi8KKwlpZiAod2FsX3N1bW1hcnlfa2VlcF90aW1l ID09IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIHJlZG8gcG9pbnRlciBoYXMgbm90 IGFkdmFuY2VkLCBkb24ndCBkbyBhbnl0aGluZy4KKwkgKgorCSAqIFRoaXMgaGFzIHRoZSBlZmZl Y3QgdGhhdCB3ZSBvbmx5IHRyeSB0byByZW1vdmUgb2xkIFdBTCBzdW1tYXJ5IGZpbGVzCisJICog b25jZSBwZXIgY2hlY2twb2ludCBjeWNsZS4KKwkgKi8KKwlpZiAocmVkb19wb2ludGVyID09IHJl ZG9fcG9pbnRlcl9hdF9sYXN0X3N1bW1hcnlfcmVtb3ZhbCkKKwkJcmV0dXJuOworCXJlZG9fcG9p bnRlcl9hdF9sYXN0X3N1bW1hcnlfcmVtb3ZhbCA9IHJlZG9fcG9pbnRlcjsKKworCS8qCisJICog RmlsZXMgc2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGlt ZSBwcmVjZWRlcyB0aGUKKwkgKiBjdXRvZmYgdGltZSB3ZSBjb21wdXRlIGhlcmUuCisJICovCisJ Y3V0b2ZmX3RpbWUgPSB0aW1lKE5VTEwpIC0gNjAgKiB3YWxfc3VtbWFyeV9rZWVwX3RpbWU7CisK KwkvKiBHZXQgYWxsIHRoZSBzdW1tYXJpZXMgdGhhdCBjdXJyZW50bHkgZXhpc3QuICovCisJd3Ns aXN0ID0gR2V0V2FsU3VtbWFyaWVzKDAsIEludmFsaWRYTG9nUmVjUHRyLCBJbnZhbGlkWExvZ1Jl Y1B0cik7CisKKwkvKiBMb29wIHVudGlsIGFsbCBzdW1tYXJpZXMgaGF2ZSBiZWVuIGNvbnNpZGVy ZWQgZm9yIHJlbW92YWwuICovCisJd2hpbGUgKHdzbGlzdCAhPSBOSUwpCisJeworCQlMaXN0Q2Vs bCAgICpsYzsKKwkJWExvZ1NlZ05vCW9sZGVzdF9zZWdubzsKKwkJWExvZ1JlY1B0cglvbGRlc3Rf bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJCVRpbWVMaW5lSUQJc2VsZWN0ZWRfdGxpOworCisJ CUhhbmRsZVdhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7CisKKwkJLyoKKwkJICogUGljayBhIHRp bWVsaW5lIGZvciB3aGljaCBzb21lIHN1bW1hcnkgZmlsZXMgc3RpbGwgZXhpc3Qgb24gZGlzaywK KwkJICogYW5kIGZpbmQgdGhlIG9sZGVzdCBMU04gdGhhdCBzdGlsbCBleGlzdHMgb24gZGlzayBm b3IgdGhhdAorCQkgKiB0aW1lbGluZS4KKwkJICovCisJCXNlbGVjdGVkX3RsaSA9ICgoV2FsU3Vt bWFyeUZpbGUgKikgbGluaXRpYWwod3NsaXN0KSktPnRsaTsKKwkJb2xkZXN0X3NlZ25vID0gWExv Z0dldE9sZGVzdFNlZ25vKHNlbGVjdGVkX3RsaSk7CisJCWlmIChvbGRlc3Rfc2Vnbm8gIT0gMCkK KwkJCVhMb2dTZWdOb09mZnNldFRvUmVjUHRyKG9sZGVzdF9zZWdubywgMCwgd2FsX3NlZ21lbnRf c2l6ZSwKKwkJCQkJCQkJCW9sZGVzdF9sc24pOworCisKKwkJLyogQ29uc2lkZXIgZWFjaCBXQUwg ZmlsZSBvbiB0aGUgc2VsZWN0ZWQgdGltZWxpbmUgaW4gdHVybi4gKi8KKwkJZm9yZWFjaChsYywg d3NsaXN0KQorCQl7CisJCQlXYWxTdW1tYXJ5RmlsZSAqd3MgPSBsZmlyc3QobGMpOworCisJCQlI YW5kbGVXYWxTdW1tYXJpemVySW50ZXJydXB0cygpOworCisJCQkvKiBJZiBpdCdzIG5vdCBvbiB0 aGlzIHRpbWVsaW5lLCBpdCdzIG5vdCB0aW1lIHRvIGNvbnNpZGVyIGl0LiAqLworCQkJaWYgKHNl bGVjdGVkX3RsaSAhPSB3cy0+dGxpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogSWYg dGhlIFdBTCBkb2Vzbid0IGV4aXN0IGFueSBtb3JlLCB3ZSBjYW4gcmVtb3ZlIGl0IGlmIHRoZSBm aWxlCisJCQkgKiBtb2RpZmljYXRpb24gdGltZSBpcyBvbGQgZW5vdWdoLgorCQkJICovCisJCQlp ZiAoWExvZ1JlY1B0cklzSW52YWxpZChvbGRlc3RfbHNuKSB8fCB3cy0+ZW5kX2xzbiA8PSBvbGRl c3RfbHNuKQorCQkJCVJlbW92ZVdhbFN1bW1hcnlJZk9sZGVyVGhhbih3cywgY3V0b2ZmX3RpbWUp OworCisJCQkvKgorCQkJICogV2hldGhlciB3ZSByZW1vdmVkIHRoZSBmaWxlIG9yIG5vdCwgd2Ug bmVlZCBub3QgY29uc2lkZXIgaXQKKwkJCSAqIGFnYWluLgorCQkJICovCisJCQl3c2xpc3QgPSBm b3JlYWNoX2RlbGV0ZV9jdXJyZW50KHdzbGlzdCwgbGMpOworCQkJcGZyZWUod3MpOworCQl9CisJ fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQKaW5kZXggZjcyZjI5 MDZjZS4uZDYyMWY1NTA3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3 bG9ja25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMu dHh0CkBAIC01NCwzICs1NCw0IEBAIFhhY3RUcnVuY2F0aW9uTG9jawkJCQkJNDQKIFdyYXBMaW1p dHNWYWN1dW1Mb2NrCQkJCTQ2CiBOb3RpZnlRdWV1ZVRhaWxMb2NrCQkJCQk0NwogV2FpdEV2ZW50 RXh0ZW5zaW9uTG9jawkJCQk0OAorV0FMU3VtbWFyaXplckxvY2sJCQkJCTQ5CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCmluZGV4IGQ5OWVjZGQ0ZDguLjBkZDliOThiM2UgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCkBAIC0zMDYsNyArMzA2LDggQEAg cGdzdGF0X2lvX3NuYXBzaG90X2NiKHZvaWQpCiAqIC0gU3lzbG9nZ2VyIGJlY2F1c2UgaXQgaXMg bm90IGNvbm5lY3RlZCB0byBzaGFyZWQgbWVtb3J5CiAqIC0gQXJjaGl2ZXIgYmVjYXVzZSBtb3N0 IHJlbGV2YW50IGFyY2hpdmluZyBJTyBpcyBkZWxlZ2F0ZWQgdG8gYQogKiAgIHNwZWNpYWxpemVk IGNvbW1hbmQgb3IgbW9kdWxlCi0qIC0gV0FMIFJlY2VpdmVyIGFuZCBXQUwgV3JpdGVyIElPIGlz IG5vdCB0cmFja2VkIGluIHBnX3N0YXRfaW8gZm9yIG5vdworKiAtIFdBTCBSZWNlaXZlciwgV0FM IFdyaXRlciwgYW5kIFdBTCBTdW1tYXJpemVyIElPIGFyZSBub3QgdHJhY2tlZCBpbgorKiAgIHBn X3N0YXRfaW8gZm9yIG5vdwogKgogKiBGdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgQmFja2VuZFR5 cGUgcGFydGljaXBhdGVzIGluIHRoZSBjdW11bGF0aXZlIHN0YXRzCiAqIHN1YnN5c3RlbSBmb3Ig SU8gYW5kIGZhbHNlIGlmIGl0IGRvZXMgbm90LgpAQCAtMzI4LDYgKzMyOSw3IEBAIHBnc3RhdF90 cmFja3NfaW9fYmt0eXBlKEJhY2tlbmRUeXBlIGJrdHlwZSkKIAkJY2FzZSBCX0xPR0dFUjoKIAkJ Y2FzZSBCX1dBTF9SRUNFSVZFUjoKIAkJY2FzZSBCX1dBTF9XUklURVI6CisJCWNhc2UgQl9XQUxf U1VNTUFSSVpFUjoKIAkJCXJldHVybiBmYWxzZTsKIAogCQljYXNlIEJfQVVUT1ZBQ19MQVVOQ0hF UjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFt ZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQK aW5kZXggZDc5OTU5MzFiZC4uN2U3OTE2MzQ2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgUkVDT1ZFUllf V0FMX1NUUkVBTQkiV2FpdGluZyBpbiBtYWluIGxvb3Agb2Ygc3RhcnR1cCBwcm9jZXNzIGZvciBX QUwgdG8gYXJyaXZlLAogU1lTTE9HR0VSX01BSU4JIldhaXRpbmcgaW4gbWFpbiBsb29wIG9mIHN5 c2xvZ2dlciBwcm9jZXNzLiIKIFdBTF9SRUNFSVZFUl9NQUlOCSJXYWl0aW5nIGluIG1haW4gbG9v cCBvZiBXQUwgcmVjZWl2ZXIgcHJvY2Vzcy4iCiBXQUxfU0VOREVSX01BSU4JIldhaXRpbmcgaW4g bWFpbiBsb29wIG9mIFdBTCBzZW5kZXIgcHJvY2Vzcy4iCitXQUxfU1VNTUFSSVpFUl9XQUwJIldh aXRpbmcgaW4gV0FMIHN1bW1hcml6ZXIgZm9yIG1vcmUgV0FMIHRvIGJlIGdlbmVyYXRlZC4iCiBX QUxfV1JJVEVSX01BSU4JIldhaXRpbmcgaW4gbWFpbiBsb29wIG9mIFdBTCB3cml0ZXIgcHJvY2Vz cy4iCiAKIApAQCAtMTQyLDYgKzE0Myw3IEBAIFNBRkVfU05BUFNIT1QJIldhaXRpbmcgdG8gb2J0 YWluIGEgdmFsaWQgc25hcHNob3QgZm9yIGEgPGxpdGVyYWw+UkVBRCBPTkxZIERFRkVSCiBTWU5D X1JFUAkiV2FpdGluZyBmb3IgY29uZmlybWF0aW9uIGZyb20gYSByZW1vdGUgc2VydmVyIGR1cmlu ZyBzeW5jaHJvbm91cyByZXBsaWNhdGlvbi4iCiBXQUxfUkVDRUlWRVJfRVhJVAkiV2FpdGluZyBm b3IgdGhlIFdBTCByZWNlaXZlciB0byBleGl0LiIKIFdBTF9SRUNFSVZFUl9XQUlUX1NUQVJUCSJX YWl0aW5nIGZvciBzdGFydHVwIHByb2Nlc3MgdG8gc2VuZCBpbml0aWFsIGRhdGEgZm9yIHN0cmVh bWluZyByZXBsaWNhdGlvbi4iCitXQUxfU1VNTUFSWV9SRUFEWQkiV2FpdGluZyBmb3IgYSBuZXcg V0FMIHN1bW1hcnkgdG8gYmUgZ2VuZXJhdGVkLiIKIFhBQ1RfR1JPVVBfVVBEQVRFCSJXYWl0aW5n IGZvciB0aGUgZ3JvdXAgbGVhZGVyIHRvIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgYXQgZW5k IG9mIGEgcGFyYWxsZWwgb3BlcmF0aW9uLiIKIAogCkBAIC0xNjIsNiArMTY0LDcgQEAgUkVHSVNU RVJfU1lOQ19SRVFVRVNUCSJXYWl0aW5nIHdoaWxlIHNlbmRpbmcgc3luY2hyb25pemF0aW9uIHJl cXVlc3RzIHRvIHRoZSBjaGUKIFNQSU5fREVMQVkJIldhaXRpbmcgd2hpbGUgYWNxdWlyaW5nIGEg Y29udGVuZGVkIHNwaW5sb2NrLiIKIFZBQ1VVTV9ERUxBWQkiV2FpdGluZyBpbiBhIGNvc3QtYmFz ZWQgdmFjdXVtIGRlbGF5IHBvaW50LiIKIFZBQ1VVTV9UUlVOQ0FURQkiV2FpdGluZyB0byBhY3F1 aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIHRvIHRydW5jYXRlIG9mZiBhbnkgZW1wdHkgcGFnZXMgYXQg dGhlIGVuZCBvZiBhIHRhYmxlIHZhY3V1bWVkLiIKK1dBTF9TVU1NQVJJWkVSX0VSUk9SCSJXYWl0 aW5nIGFmdGVyIGEgV0FMIHN1bW1hcml6ZXIgZXJyb3IuIgogCiAKICMKQEAgLTI0Myw2ICsyNDYs OCBAQCBXQUxfQ09QWV9XUklURQkiV2FpdGluZyBmb3IgYSB3cml0ZSB3aGVuIGNyZWF0aW5nIGEg bmV3IFdBTCBzZWdtZW50IGJ5IGNvcHlpbmcgYQogV0FMX0lOSVRfU1lOQwkiV2FpdGluZyBmb3Ig YSBuZXdseSBpbml0aWFsaXplZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UuIgog V0FMX0lOSVRfV1JJVEUJIldhaXRpbmcgZm9yIGEgd3JpdGUgd2hpbGUgaW5pdGlhbGl6aW5nIGEg bmV3IFdBTCBmaWxlLiIKIFdBTF9SRUFECSJXYWl0aW5nIGZvciBhIHJlYWQgZnJvbSBhIFdBTCBm aWxlLiIKK1dBTF9TVU1NQVJZX1JFQUQJIldhaXRpbmcgZm9yIGEgcmVhZCBmcm9tIGEgV0FMIHN1 bW1hcnkgZmlsZS4iCitXQUxfU1VNTUFSWV9XUklURQkiV2FpdGluZyBmb3IgYSB3cml0ZSB0byBh IFdBTCBzdW1tYXJ5IGZpbGUuIgogV0FMX1NZTkMJIldhaXRpbmcgZm9yIGEgV0FMIGZpbGUgdG8g cmVhY2ggZHVyYWJsZSBzdG9yYWdlLiIKIFdBTF9TWU5DX01FVEhPRF9BU1NJR04JIldhaXRpbmcg Zm9yIGRhdGEgdG8gcmVhY2ggZHVyYWJsZSBzdG9yYWdlIHdoaWxlIGFzc2lnbmluZyBhIG5ldyBX QUwgc3luYyBtZXRob2QuIgogV0FMX1dSSVRFCSJXYWl0aW5nIGZvciBhIHdyaXRlIHRvIGEgV0FM IGZpbGUuIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDgxOTkzNmVjMDIuLjVjOWI2 Zjk5MWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTMwNSw2ICszMDUsOSBAQCBH ZXRCYWNrZW5kVHlwZURlc2MoQmFja2VuZFR5cGUgYmFja2VuZFR5cGUpCiAJCWNhc2UgQl9XQUxf U0VOREVSOgogCQkJYmFja2VuZERlc2MgPSAid2Fsc2VuZGVyIjsKIAkJCWJyZWFrOworCQljYXNl IEJfV0FMX1NVTU1BUklaRVI6CisJCQliYWNrZW5kRGVzYyA9ICJ3YWxzdW1tYXJpemVyIjsKKwkJ CWJyZWFrOwogCQljYXNlIEJfV0FMX1dSSVRFUjoKIAkJCWJhY2tlbmREZXNjID0gIndhbHdyaXRl ciI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggZjdjOTg4 MmY3Yy4uOWY1OTQ0MDUyNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTYz LDYgKzYzLDcgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5o IgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgogI2luY2x1ZGUgInBvc3Rt YXN0ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVy LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAtNzAzLDYgKzcwNCw4IEBAIGNv bnN0IGNoYXIgKmNvbnN0IGNvbmZpZ19ncm91cF9uYW1lc1tdID0KIAlnZXR0ZXh0X25vb3AoIldy aXRlLUFoZWFkIExvZyAvIEFyY2hpdmUgUmVjb3ZlcnkiKSwKIAkvKiBXQUxfUkVDT1ZFUllfVEFS R0VUICovCiAJZ2V0dGV4dF9ub29wKCJXcml0ZS1BaGVhZCBMb2cgLyBSZWNvdmVyeSBUYXJnZXQi KSwKKwkvKiBXQUxfU1VNTUFSSVpBVElPTiAqLworCWdldHRleHRfbm9vcCgiV3JpdGUtQWhlYWQg TG9nIC8gU3VtbWFyaXphdGlvbiIpLAogCS8qIFJFUExJQ0FUSU9OX1NFTkRJTkcgKi8KIAlnZXR0 ZXh0X25vb3AoIlJlcGxpY2F0aW9uIC8gU2VuZGluZyBTZXJ2ZXJzIiksCiAJLyogUkVQTElDQVRJ T05fUFJJTUFSWSAqLwpAQCAtMTc4Niw2ICsxNzg5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBD b25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7 InN1bW1hcml6ZV93YWwiLCBQR0NfU0lHSFVQLCBXQUxfU1VNTUFSSVpBVElPTiwKKwkJCWdldHRl eHRfbm9vcCgiU3RhcnRzIHRoZSBXQUwgc3VtbWFyaXplciBwcm9jZXNzIHRvIGVuYWJsZSBpbmNy ZW1lbnRhbCBiYWNrdXAuIiksCisJCQlOVUxMCisJCX0sCisJCSZzdW1tYXJpemVfd2FsLAorCQlm YWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiaG90X3N0YW5kYnkiLCBQ R0NfUE9TVE1BU1RFUiwgUkVQTElDQVRJT05fU1RBTkRCWSwKIAkJCWdldHRleHRfbm9vcCgiQWxs b3dzIGNvbm5lY3Rpb25zIGFuZCBxdWVyaWVzIGR1cmluZyByZWNvdmVyeS4iKSwKQEAgLTMyMDAs NiArMzIxMywxOSBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJ Y2hlY2tfd2FsX3NlZ21lbnRfc2l6ZSwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsid2FsX3N1 bW1hcnlfa2VlcF90aW1lIiwgUEdDX1NJR0hVUCwgV0FMX1NVTU1BUklaQVRJT04sCisJCQlnZXR0 ZXh0X25vb3AoIlRpbWUgZm9yIHdoaWNoIFdBTCBzdW1tYXJ5IGZpbGVzIHNob3VsZCBiZSBrZXB0 LiIpLAorCQkJTlVMTCwKKwkJCUdVQ19VTklUX01JTiwKKwkJfSwKKwkJJndhbF9zdW1tYXJ5X2tl ZXBfdGltZSwKKwkJMTAgKiAyNCAqIDYwLAkJCS8qIDEwIGRheXMgKi8KKwkJMCwKKwkJSU5UX01B WCwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiYXV0b3ZhY3V1bV9uYXB0aW1l IiwgUEdDX1NJR0hVUCwgQVVUT1ZBQ1VVTSwKIAkJCWdldHRleHRfbm9vcCgiVGltZSB0byBzbGVl cCBiZXR3ZWVuIGF1dG92YWN1dW0gcnVucy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBjZjlmMjgzY2ZlLi5iMjgwOWM3MTFhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zMDIs NiArMzAyLDExIEBACiAjcmVjb3ZlcnlfdGFyZ2V0X2FjdGlvbiA9ICdwYXVzZScJIyAncGF1c2Un LCAncHJvbW90ZScsICdzaHV0ZG93bicKIAkJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQp CiAKKyMgLSBXQUwgU3VtbWFyaXphdGlvbiAtCisKKyNzdW1tYXJpemVfd2FsID0gb2ZmCQkJICMg cnVuIFdBTCBzdW1tYXJpemVyIHByb2Nlc3M/Cisjd2FsX3N1bW1hcnlfa2VlcF90aW1lID0gJzEw ZCcgIyB3aGVuIHRvIHJlbW92ZSBvbGQgc3VtbWFyeSBmaWxlcywgMCA9IG5ldmVyCisKIAogIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSRVBMSUNBVElPTgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9p bml0ZGIvaW5pdGRiLmMgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIuYwppbmRleCAwYzZmNWNlYjBh Li5lNjhiNDBkMmI1IDEwMDY0NAotLS0gYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYworKysgYi9z cmMvYmluL2luaXRkYi9pbml0ZGIuYwpAQCAtMjI3LDYgKzIyNyw3IEBAIHN0YXRpYyBjaGFyICpl eHRyYV9vcHRpb25zID0gIiI7CiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGlyc1tdID0g ewogCSJnbG9iYWwiLAogCSJwZ193YWwvYXJjaGl2ZV9zdGF0dXMiLAorCSJwZ193YWwvc3VtbWFy aWVzIiwKIAkicGdfY29tbWl0X3RzIiwKIAkicGdfZHluc2htZW0iLAogCSJwZ19ub3RpZnkiLApk aWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBiL3NyYy9jb21tb24vTWFrZWZpbGUKaW5k ZXggMTA5MmRjNjNkZi4uMjNlNWEzZGI0NyAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmls ZQorKysgYi9zcmMvY29tbW9uL01ha2VmaWxlCkBAIC00OSw2ICs0OSw3IEBAIE9CSlNfQ09NTU9O ID0gXAogCWFyY2hpdmUubyBcCiAJYmFzZTY0Lm8gXAogCWJpbmFyeWhlYXAubyBcCisJYmxrcmVm dGFibGUubyBcCiAJY2hlY2tzdW1faGVscGVyLm8gXAogCWNvbXByZXNzaW9uLm8gXAogCWNvbmZp Z19pbmZvLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9ibGtyZWZ0YWJsZS5jIGIvc3JjL2Nv bW1vbi9ibGtyZWZ0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjIxZWU2ZjU5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tbW9uL2Jsa3JlZnRhYmxlLmMK QEAgLTAsMCArMSwxMzA4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBibGtyZWZ0YWJs ZS5jCisgKgkgIEJsb2NrIHJlZmVyZW5jZSB0YWJsZXMuCisgKgorICogQSBibG9jayByZWZlcmVu Y2UgdGFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGJsb2NrcyBoYXZlCisgKiBi ZWVuIG1vZGlmaWVkIGJ5IFdBTCByZWNvcmRzIHdpdGhpbiBhIGNlcnRhaW4gTFNOIHJhbmdlLgor ICoKKyAqIEZvciBlYWNoIHJlbGF0aW9uIGZvcmssIHdlIGtlZXAgdHJhY2sgb2YgYWxsIGJsb2Nr cyB0aGF0IGhhdmUgYXBwZWFyZWQKKyAqIGluIGJsb2NrIHJlZmVyZW5jZSBpbiB0aGUgV0FMLiBX ZSBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlICJsaW1pdCBibG9jayIsCisgKiB3aGljaCBpcyB0aGUg c21hbGxlc3QgcmVsYXRpb24gbGVuZ3RoIGluIGJsb2NrcyBrbm93biB0byBoYXZlIG9jY3VycmVk CisgKiBkdXJpbmcgdGhhdCByYW5nZSBvZiBXQUwgcmVjb3Jkcy4gIFRoaXMgc2hvdWxkIGJlIHNl dCB0byAwIGlmIHRoZSByZWxhdGlvbgorICogZm9yayBpcyBjcmVhdGVkIG9yIGRlc3Ryb3llZCwg YW5kIHRvIHRoZSBwb3N0LXRydW5jYXRpb24gbGVuZ3RoIGlmCisgKiB0cnVuY2F0ZWQuCisgKgor ICogV2hlbmV2ZXIgd2Ugc2V0IHRoZSBsaW1pdCBibG9jaywgd2UgYWxzbyBmb3JnZXQgYWJvdXQg YW55IG1vZGlmaWVkIGJsb2NrcworICogYmV5b25kIHRoYXQgcG9pbnQuIFRob3NlIGJsb2NrcyBk b24ndCBleGlzdCBhbnkgbW9yZS4gU3VjaCBibG9ja3MgY2FuCisgKiBsYXRlciBiZSBtYXJrZWQg YXMgbW9kaWZpZWQgYWdhaW47IGlmIHRoYXQgaGFwcGVucywgaXQgbWVhbnMgdGhlIHJlbGF0aW9u CisgKiB3YXMgcmUtZXh0ZW5kZWQuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2Nv bW1vbi9ibGtyZWZ0YWJsZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworCisjaWZu ZGVmIEZST05URU5ECisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNlbHNlCisjaW5jbHVkZSAicG9z dGdyZXNfZmUuaCIKKyNlbmRpZgorCisjaWZkZWYgRlJPTlRFTkQKKyNpbmNsdWRlICJjb21tb24v bG9nZ2luZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vYmxrcmVmdGFibGUuaCIKKyNp bmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAicG9ydC9wZ19jcmMzMmMuaCIKKwor LyoKKyAqIEEgYmxvY2sgcmVmZXJlbmNlIHRhYmxlIGtlZXBzIHRyYWNrIG9mIHRoZSBzdGF0dXMg b2YgZWFjaCByZWxhdGlvbgorICogZm9yayBpbmRpdmlkdWFsbHkuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEJsb2NrUmVmVGFibGVLZXkKK3sKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwlGb3Jr TnVtYmVyCWZvcmtudW07Cit9IEJsb2NrUmVmVGFibGVLZXk7CisKKy8qCisgKiBXZSBjb3VsZCBu ZWVkIHRvIHN0b3JlIGRhdGEgZWl0aGVyIGZvciBhIHJlbGF0aW9uIGluIHdoaWNoIG9ubHkgYQor ICogdGlueSBmcmFjdGlvbiBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBtb2RpZmllZCBvciBmb3Ig YSByZWxhdGlvbiBpbgorICogd2hpY2ggbmVhcmx5IGV2ZXJ5IGJsb2NrIGhhcyBiZWVuIG1vZGlm aWVkLCBhbmQgd2Ugd2FudCBhCisgKiBzcGFjZS1lZmZpY2llbnQgcmVwcmVzZW50YXRpb24gaW4g Ym90aCBjYXNlcy4gVG8gYWNjb21wbGlzaCB0aGlzLAorICogd2UgZGl2aWRlIHRoZSByZWxhdGlv biBpbnRvIGNodW5rcyBvZiAyXjE2IGJsb2NrcyBhbmQgY2hvb3NlIGJldHdlZW4KKyAqIGFuIGFy cmF5IHJlcHJlc2VudGF0aW9uIGFuZCBhIGJpdG1hcCByZXByZXNlbnRhdGlvbiBmb3IgZWFjaCBj aHVuay4KKyAqCisgKiBXaGVuIHRoZSBudW1iZXIgb2YgbW9kaWZpZWQgYmxvY2tzIGluIGEgZ2l2 ZW4gY2h1bmsgaXMgc21hbGwsIHdlCisgKiBlc3NlbnRpYWxseSBzdG9yZSBhbiBhcnJheSBvZiBi bG9jayBudW1iZXJzLCBidXQgd2UgbmVlZCBub3Qgc3RvcmUgdGhlCisgKiBlbnRpcmUgYmxvY2sg bnVtYmVyOiBpbnN0ZWFkLCB3ZSBzdG9yZSBlYWNoIGJsb2NrIG51bWJlciBhcyBhIDItYnl0ZQor ICogb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjaHVuay4KKyAqCisgKiBXaGVuIHRoZSBu dW1iZXIgb2YgbW9kaWZpZWQgYmxvY2tzIGluIGEgZ2l2ZW4gY2h1bmsgaXMgbGFyZ2UsIHdlIHN3 aXRjaAorICogdG8gYSBiaXRtYXAgcmVwcmVzZW50YXRpb24uCisgKgorICogVGhlc2Ugc2FtZSBi YXNpYyByZXByZXNlbnRhdGlvbmFsIGNob2ljZXMgYXJlIHVzZWQgYm90aCB3aGVuIGEgYmxvY2sK KyAqIHJlZmVyZW5jZSB0YWJsZSBpcyBzdG9yZWQgaW4gbWVtb3J5IGFuZCB3aGVuIGl0IGlzIHNl cmlhbGl6ZWQgdG8gZGlzay4KKyAqCisgKiBJbiB0aGUgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9u LCB3ZSBpbml0aWFsbHkgYWxsb2NhdGUgZWFjaCBjaHVuayB3aXRoCisgKiBzcGFjZSBmb3IgYSBu dW1iZXIgb2YgZW50cmllcyBnaXZlbiBieSBJTklUSUFMX0VOVFJJRVNfUEVSX0NIVU5LIGFuZAor ICogaW5jcmVhc2UgdGhhdCBhcyBuZWNlc3NhcnkgdW50aWwgd2UgcmVhY2ggTUFYX0VOVFJJRVNf UEVSX0NIVU5LLgorICogQW55IGNodW5rIHdob3NlIGFsbG9jYXRlZCBzaXplIHJlYWNoZXMgTUFY X0VOVFJJRVNfUEVSX0NIVU5LIGlzIGNvbnZlcnRlZAorICogdG8gYSBiaXRtYXAsIGFuZCB0aHVz IG5ldmVyIG5lZWRzIHRvIGdyb3cgZnVydGhlci4KKyAqLworI2RlZmluZSBCTE9DS1NfUEVSX0NI VU5LCQkoMSA8PCAxNikKKyNkZWZpbmUgQkxPQ0tTX1BFUl9FTlRSWQkJKEJJVFNfUEVSX0JZVEUg KiBzaXplb2YodWludDE2KSkKKyNkZWZpbmUgTUFYX0VOVFJJRVNfUEVSX0NIVU5LCShCTE9DS1Nf UEVSX0NIVU5LIC8gQkxPQ0tTX1BFUl9FTlRSWSkKKyNkZWZpbmUgSU5JVElBTF9FTlRSSUVTX1BF Ul9DSFVOSwkxNgordHlwZWRlZiB1aW50MTYgKkJsb2NrUmVmVGFibGVDaHVuazsKKworLyoKKyAq IFN0YXRlIGZvciBvbmUgcmVsYXRpb24gZm9yay4KKyAqCisgKiAncmxvY2F0b3InIGFuZCAnZm9y a251bScgaWRlbnRpZnkgdGhlIHJlbGF0aW9uIGZvcmsgdG8gd2hpY2ggdGhpcyBlbnRyeQorICog cGVydGFpbnMuCisgKgorICogJ2xpbWl0X2Jsb2NrJyBpcyB0aGUgc2hvcnRlc3Qga25vd24gbGVu Z3RoIG9mIHRoZSByZWxhdGlvbiBpbiBibG9ja3MKKyAqIHdpdGhpbiB0aGUgTFNOIHJhbmdlIGNv dmVyZWQgYnkgYSBwYXJ0aWN1bGFyIGJsb2NrIHJlZmVyZW5jZSB0YWJsZS4KKyAqIEl0IHNob3Vs ZCBiZSBzZXQgdG8gMCBpZiB0aGUgcmVsYXRpb24gZm9yayBpcyBjcmVhdGVkIG9yIGRyb3BwZWQu IElmIHRoZQorICogcmVsYXRpb24gZm9yayBpcyB0cnVuY2F0ZWQsIGl0IHNob3VsZCBiZSBzZXQg dG8gdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdAorICogcmVtYWluIGFmdGVyIHRydW5jYXRpb24u CisgKgorICogJ25jaHVua3MnIGlzIHRoZSBhbGxvY2F0ZWQgbGVuZ3RoIG9mIGVhY2ggb2YgdGhl IHRocmVlIGFycmF5cyB0aGF0IGZvbGxvdy4KKyAqIFdlIGNhbiBvbmx5IHJlcHJlc2VudCB0aGUg c3RhdHVzIG9mIGJsb2NrIG51bWJlcnMgbGVzcyB0aGFuIG5jaHVua3MgKgorICogQkxPQ0tTX1BF Ul9DSFVOSy4KKyAqCisgKiAnY2h1bmtfc2l6ZScgaXMgYW4gYXJyYXkgc3RvcmluZyB0aGUgYWxs b2NhdGVkIHNpemUgb2YgZWFjaCBjaHVuay4KKyAqCisgKiAnY2h1bmtfdXNhZ2UnIGlzIGFuIGFy cmF5IHN0b3JpbmcgdGhlIG51bWJlciBvZiBlbGVtZW50cyB1c2VkIGluIGVhY2gKKyAqIGNodW5r LiBJZiB0aGF0IHZhbHVlIGlzIGxlc3MgdGhhbiBNQVhfRU5UUklFU19QRVJfQ0hVTkssIHRoZSBj b3JyZXNvbmRpbmcKKyAqIGNodW5rIGlzIHVzZWQgYXMgYW4gYXJyYXk7IGVsc2UgdGhlIGNvcnJl c3BvbmRpbmcgY2h1bmsgaXMgdXNlZCBhcyBhIGJpdG1hcC4KKyAqIFdoZW4gdXNlZCBhcyBhIGJp dG1hcCwgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgZmlyc3QgYXJyYXkgZWxlbWVu dAorICogaXMgdGhlIHN0YXR1cyBvZiB0aGUgbG93ZXN0LW51bWJlcmVkIGJsb2NrIGNvdmVyZWQg YnkgdGhpcyBjaHVuay4KKyAqCisgKiAnY2h1bmtfZGF0YScgaXMgdGhlIGFycmF5IG9mIGNodW5r cy4KKyAqLworc3RydWN0IEJsb2NrUmVmVGFibGVFbnRyeQoreworCUJsb2NrUmVmVGFibGVLZXkg a2V5OworCUJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrOworCWNoYXIJCXN0YXR1czsKKwl1aW50MzIJ CW5jaHVua3M7CisJdWludDE2CSAgICpjaHVua19zaXplOworCXVpbnQxNgkgICAqY2h1bmtfdXNh Z2U7CisJQmxvY2tSZWZUYWJsZUNodW5rICpjaHVua19kYXRhOworfTsKKworLyogRGVjbGFyZSBh bmQgZGVmaW5lIGEgaGFzaCB0YWJsZSBvdmVyIHR5cGUgQmxvY2tSZWZUYWJsZUVudHJ5LiAqLwor I2RlZmluZSBTSF9QUkVGSVggYmxvY2tyZWZ0YWJsZQorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUg QmxvY2tSZWZUYWJsZUVudHJ5CisjZGVmaW5lIFNIX0tFWV9UWVBFIEJsb2NrUmVmVGFibGVLZXkK KyNkZWZpbmUgU0hfS0VZIGtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KSBcCisJaGFz aF9ieXRlcygoY29uc3QgdW5zaWduZWQgY2hhciAqKSAma2V5LCBzaXplb2YoQmxvY2tSZWZUYWJs ZUtleSkpCisjZGVmaW5lIFNIX0VRVUFMKHRiLCBhLCBiKSAobWVtY21wKCZhLCAmYiwgc2l6ZW9m KEJsb2NrUmVmVGFibGVLZXkpKSA9PSAwKQorI2RlZmluZSBTSF9TQ09QRSBzdGF0aWMgaW5saW5l CisjaWZkZWYgRlJPTlRFTkQKKyNkZWZpbmUgU0hfUkFXX0FMTE9DQVRPUiBwZ19tYWxsb2MwCisj ZW5kaWYKKyNkZWZpbmUgU0hfREVGSU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJs aWIvc2ltcGxlaGFzaC5oIgorCisvKgorICogQSBibG9jayByZWZlcmVuY2UgdGFibGUgaXMgYmFz aWNhbGx5IGp1c3QgdGhlIGhhc2ggdGFibGUsIGJ1dCB3ZSBkb24ndAorICogd2FudCB0byBleHBv c2UgdGhhdCB0byBvdXRzaWRlIGNhbGxlcnMuCisgKgorICogV2Uga2VlcCB0cmFjayBvZiB0aGUg bWVtb3J5IGNvbnRleHQgaW4gdXNlIGV4cGxpY2l0bHkgdG9vLCBzbyB0aGF0IGl0J3MKKyAqIGVh c3kgdG8gcGxhY2UgYWxsIG9mIG91ciBhbGxvY2F0aW9ucyBpbiB0aGUgc2FtZSBjb250ZXh0Lgor ICovCitzdHJ1Y3QgQmxvY2tSZWZUYWJsZQoreworCWJsb2NrcmVmdGFibGVfaGFzaCAqaGFzaDsK KyNpZm5kZWYgRlJPTlRFTkQKKwlNZW1vcnlDb250ZXh0IG1jeHQ7CisjZW5kaWYKK307CisKKy8q CisgKiBPbi1kaXNrIHNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciBibG9jayByZWZlcmVuY2UgdGFi bGUgZW50cmllcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRF bnRyeQoreworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOworCUZvcmtOdW1iZXIJZm9ya251bTsK KwlCbG9ja051bWJlciBsaW1pdF9ibG9jazsKKwl1aW50MzIJCW5jaHVua3M7Cit9IEJsb2NrUmVm VGFibGVTZXJpYWxpemVkRW50cnk7CisKKy8qCisgKiBCdWZmZXIgc2l6ZSwgc28gdGhhdCB3ZSBh dm9pZCBkb2luZyBtYW55IHNtYWxsIEkvT3MuCisgKi8KKyNkZWZpbmUgQlVGU0laRQkJCQkJNjU1 MzYKKworLyoKKyAqIEFkLWhvYyBidWZmZXIgZm9yIGZpbGUgSS9PLgorICovCit0eXBlZGVmIHN0 cnVjdCBCbG9ja1JlZlRhYmxlQnVmZmVyCit7CisJaW9fY2FsbGJhY2tfZm4gaW9fY2FsbGJhY2s7 CisJdm9pZAkgICAqaW9fY2FsbGJhY2tfYXJnOworCWNoYXIJCWRhdGFbQlVGU0laRV07CisJaW50 CQkJdXNlZDsKKwlpbnQJCQljdXJzb3I7CisJcGdfY3JjMzJjCWNyYzsKK30gQmxvY2tSZWZUYWJs ZUJ1ZmZlcjsKKworLyoKKyAqIFN0YXRlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHByb2dyZXNzIHdo aWxlIGluY3JlbWVudGFsbHkgcmVhZGluZyBhIGJsb2NrCisgKiB0YWJsZSByZWZlcmVuY2UgZmls ZSBmcm9tIGRpc2suCisgKgorICogdG90YWxfY2h1bmtzIG1lYW5zIHRoZSBudW1iZXIgb2YgY2h1 bmtzIGZvciB0aGUgUmVsRmlsZUxvY2F0b3IvRm9ya051bWJlcgorICogY29tYmluYXRpb24gdGhh dCBpcyBjdXJlbnRseSBiZWluZyByZWFkLCBhbmQgY29uc3VtZWRfY2h1bmtzIGlzIHRoZSBudW1i ZXIKKyAqIG9mIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHJlYWQuIChXZSBhbHdheXMgcmVhZCBhbGwg dGhlIGluZm9ybWF0aW9uIGZvcgorICogYSBzaW5nbGUgY2h1bmsgYXQgb25lIHRpbWUsIHNvIHdl IGRvbid0IG5lZWQgdG8gYmUgYWJsZSB0byByZXByZXNlbnQgdGhlCisgKiBzdGF0ZSB3aGVyZSBh IGNodW5rIGhhcyBiZWVuIHBhcnRpYWxseSByZWFkLikKKyAqCisgKiBjaHVua19zaXplIGlzIHRo ZSBhcnJheSBvZiBjaHVuayBzaXplcy4gVGhlIGxlbmd0aCBpcyBnaXZlbiBieSB0b3RhbF9jaHVu a3MuCisgKgorICogY2h1bmtfZGF0YSBob2xkcyB0aGUgY3VycmVudCBjaHVuay4KKyAqCisgKiBj aHVua19wb3NpdGlvbiBoZWxwcyB1cyBmaWd1cmUgb3V0IGhvdyBtdWNoIHByb2dyZXNzIHdlJ3Zl IG1hZGUgaW4gcmV0dXJuaW5nCisgKiB0aGUgYmxvY2sgbnVtYmVycyBmb3IgdGhlIGN1cnJlbnQg Y2h1bmsgdG8gdGhlIGNhbGxlci4gSWYgdGhlIGNodW5rIGlzIGEKKyAqIGJpdG1hcCwgaXQncyB0 aGUgbnVtYmVyIG9mIGJpdHMgd2UndmUgc2Nhbm5lZDsgb3RoZXJ3aXNlLCBpdCdzIHRoZSBudW1i ZXIKKyAqIG9mIGNodW5rIGVudHJpZXMgd2UndmUgc2Nhbm5lZC4KKyAqLworc3RydWN0IEJsb2Nr UmVmVGFibGVSZWFkZXIKK3sKKwlCbG9ja1JlZlRhYmxlQnVmZmVyIGJ1ZmZlcjsKKwljaGFyCSAg ICplcnJvcl9maWxlbmFtZTsKKwlyZXBvcnRfZXJyb3JfZm4gZXJyb3JfY2FsbGJhY2s7CisJdm9p ZAkgICAqZXJyb3JfY2FsbGJhY2tfYXJnOworCXVpbnQzMgkJdG90YWxfY2h1bmtzOworCXVpbnQz MgkJY29uc3VtZWRfY2h1bmtzOworCXVpbnQxNgkgICAqY2h1bmtfc2l6ZTsKKwl1aW50MTYJCWNo dW5rX2RhdGFbTUFYX0VOVFJJRVNfUEVSX0NIVU5LXTsKKwl1aW50MzIJCWNodW5rX3Bvc2l0aW9u OworfTsKKworLyoKKyAqIFN0YXRlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHByb2dyZXNzIHdoaWxl IGluY3JlbWVudGFsbHkgd3JpdGluZyBhIGJsb2NrCisgKiByZWZlcmVuY2UgdGFibGUgZmlsZSB0 byBkaXNrLgorICovCitzdHJ1Y3QgQmxvY2tSZWZUYWJsZVdyaXRlcgoreworCUJsb2NrUmVmVGFi bGVCdWZmZXIgYnVmZmVyOworfTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KK3N0YXRp YyBpbnQJQmxvY2tSZWZUYWJsZUNvbXBhcmF0b3IoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAq Yik7CitzdGF0aWMgdm9pZCBCbG9ja1JlZlRhYmxlRmx1c2goQmxvY2tSZWZUYWJsZUJ1ZmZlciAq YnVmZmVyKTsKK3N0YXRpYyB2b2lkIEJsb2NrUmVmVGFibGVSZWFkKEJsb2NrUmVmVGFibGVSZWFk ZXIgKnJlYWRlciwgdm9pZCAqZGF0YSwKKwkJCQkJCQkgIGludCBsZW5ndGgpOworc3RhdGljIHZv aWQgQmxvY2tSZWZUYWJsZVdyaXRlKEJsb2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlciwgdm9pZCAq ZGF0YSwKKwkJCQkJCQkgICBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIEJsb2NrUmVmVGFibGVG aWxlVGVybWluYXRlKEJsb2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlcik7CisKKy8qCisgKiBDcmVh dGUgYW4gZW1wdHkgYmxvY2sgcmVmZXJlbmNlIHRhYmxlLgorICovCitCbG9ja1JlZlRhYmxlICoK K0NyZWF0ZUVtcHR5QmxvY2tSZWZUYWJsZSh2b2lkKQoreworCUJsb2NrUmVmVGFibGUgKmJydGFi ID0gcGFsbG9jKHNpemVvZihCbG9ja1JlZlRhYmxlKSk7CisKKwkvKgorCSAqIEV2ZW4gY29tcGxl dGVseSBlbXB0eSBkYXRhYmFzZSBoYXMgYSBmZXcgaHVuZHJlZCByZWxhdGlvbiBmb3Jrcywgc28g aXQKKwkgKiBzZWVtcyBiZXN0IHRvIHNpemUgdGhlIGhhc2ggb24gdGhlIGFzc3VtcHRpb24gdGhh dCB3ZSdyZSBnb2luZyB0byBoYXZlCisJICogYXQgbGVhc3QgYSBmZXcgdGhvdXNhbmQgZW50cmll cy4KKwkgKi8KKyNpZmRlZiBGUk9OVEVORAorCWJydGFiLT5oYXNoID0gYmxvY2tyZWZ0YWJsZV9j cmVhdGUoNDA5NiwgTlVMTCk7CisjZWxzZQorCWJydGFiLT5tY3h0ID0gQ3VycmVudE1lbW9yeUNv bnRleHQ7CisJYnJ0YWItPmhhc2ggPSBibG9ja3JlZnRhYmxlX2NyZWF0ZShicnRhYi0+bWN4dCwg NDA5NiwgTlVMTCk7CisjZW5kaWYKKworCXJldHVybiBicnRhYjsKK30KKworLyoKKyAqIFNldCB0 aGUgImxpbWl0IGJsb2NrIiBmb3IgYSByZWxhdGlvbiBmb3JrIGFuZCBmb3JnZXQgYW55IG1vZGlm aWVkIGJsb2NrcworICogd2l0aCBlcXVhbCBvciBoaWdoZXIgYmxvY2sgbnVtYmVycy4KKyAqCisg KiBUaGUgImxpbWl0IGJsb2NrIiBpcyB0aGUgc2hvcnRlc3Qga25vd24gbGVuZ3RoIG9mIHRoZSBy ZWxhdGlvbiB3aXRoaW4gdGhlCisgKiByYW5nZSBvZiBXQUwgcmVjb3JkcyBjb3ZlcmVkIGJ5IHRo aXMgYmxvY2sgcmVmZXJlbmNlIHRhYmxlLgorICovCit2b2lkCitCbG9ja1JlZlRhYmxlU2V0TGlt aXRCbG9jayhCbG9ja1JlZlRhYmxlICpicnRhYiwKKwkJCQkJCSAgIGNvbnN0IFJlbEZpbGVMb2Nh dG9yICpybG9jYXRvciwKKwkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCSAgIEJs b2NrTnVtYmVyIGxpbWl0X2Jsb2NrKQoreworCUJsb2NrUmVmVGFibGVFbnRyeSAqYnJ0ZW50cnk7 CisJQmxvY2tSZWZUYWJsZUtleSBrZXkgPSB7MH07IC8qIG1ha2Ugc3VyZSBhbnkgcGFkZGluZyBp cyB6ZXJvICovCisJYm9vbAkJZm91bmQ7CisKKwltZW1jcHkoJmtleS5ybG9jYXRvciwgcmxvY2F0 b3IsIHNpemVvZihSZWxGaWxlTG9jYXRvcikpOworCWtleS5mb3JrbnVtID0gZm9ya251bTsKKwli cnRlbnRyeSA9IGJsb2NrcmVmdGFibGVfaW5zZXJ0KGJydGFiLT5oYXNoLCBrZXksICZmb3VuZCk7 CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJLyoKKwkJICogV2UgaGF2ZSBubyBleGlzdGluZyBkYXRh IGFib3V0IHRoaXMgcmVsYXRpb24gZm9yaywgc28ganVzdCByZWNvcmQKKwkJICogdGhlIGxpbWl0 X2Jsb2NrIHZhbHVlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIsIGFuZCBtYWtlIHN1cmUgb3RoZXIK KwkJICogcGFydHMgb2YgdGhlIGVudHJ5IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4KKwkJICov CisJCWJydGVudHJ5LT5saW1pdF9ibG9jayA9IGxpbWl0X2Jsb2NrOworCQlicnRlbnRyeS0+bmNo dW5rcyA9IDA7CisJCWJydGVudHJ5LT5jaHVua19zaXplID0gTlVMTDsKKwkJYnJ0ZW50cnktPmNo dW5rX3VzYWdlID0gTlVMTDsKKwkJYnJ0ZW50cnktPmNodW5rX2RhdGEgPSBOVUxMOworCQlyZXR1 cm47CisJfQorCisJQmxvY2tSZWZUYWJsZUVudHJ5U2V0TGltaXRCbG9jayhicnRlbnRyeSwgbGlt aXRfYmxvY2spOworfQorCisvKgorICogTWFyayBhIGJsb2NrIGluIGEgZ2l2ZW4gcmVsYXRpb24g Zm9yayBhcyBrbm93biB0byBoYXZlIGJlZW4gbW9kaWZpZWQuCisgKi8KK3ZvaWQKK0Jsb2NrUmVm VGFibGVNYXJrQmxvY2tNb2RpZmllZChCbG9ja1JlZlRhYmxlICpicnRhYiwKKwkJCQkJCQkgICBj b25zdCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IsCisJCQkJCQkJICAgRm9ya051bWJlciBmb3Jr bnVtLAorCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsa251bSkKK3sKKwlCbG9ja1JlZlRhYmxlRW50 cnkgKmJydGVudHJ5OworCUJsb2NrUmVmVGFibGVLZXkga2V5ID0gezB9OyAvKiBtYWtlIHN1cmUg YW55IHBhZGRpbmcgaXMgemVybyAqLworCWJvb2wJCWZvdW5kOworI2lmbmRlZiBGUk9OVEVORAor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhicnRhYi0+ bWN4dCk7CisjZW5kaWYKKworCW1lbWNweSgma2V5LnJsb2NhdG9yLCBybG9jYXRvciwgc2l6ZW9m KFJlbEZpbGVMb2NhdG9yKSk7CisJa2V5LmZvcmtudW0gPSBmb3JrbnVtOworCWJydGVudHJ5ID0g YmxvY2tyZWZ0YWJsZV9pbnNlcnQoYnJ0YWItPmhhc2gsIGtleSwgJmZvdW5kKTsKKworCWlmICgh Zm91bmQpCisJeworCQkvKgorCQkgKiBXZSB3YW50IHRvIHNldCB0aGUgaW5pdGlhbCBsaW1pdCBi bG9jayB2YWx1ZSB0byBzb21ldGhpbmcgaGlnaGVyCisJCSAqIHRoYW4gYW55IGxlZ2FsIGJsb2Nr IG51bWJlci4gSW52YWxpZEJsb2NrTnVtYmVyIGZpdHMgdGhlIGJpbGwuCisJCSAqLworCQlicnRl bnRyeS0+bGltaXRfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWJydGVudHJ5LT5uY2h1 bmtzID0gMDsKKwkJYnJ0ZW50cnktPmNodW5rX3NpemUgPSBOVUxMOworCQlicnRlbnRyeS0+Y2h1 bmtfdXNhZ2UgPSBOVUxMOworCQlicnRlbnRyeS0+Y2h1bmtfZGF0YSA9IE5VTEw7CisJfQorCisJ QmxvY2tSZWZUYWJsZUVudHJ5TWFya0Jsb2NrTW9kaWZpZWQoYnJ0ZW50cnksIGZvcmtudW0sIGJs a251bSk7CisKKyNpZm5kZWYgRlJPTlRFTkQKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisjZW5kaWYKK30KKworLyoKKyAqIEdldCBhbiBlbnRyeSBmcm9tIGEgYmxvY2sgcmVm ZXJlbmNlIHRhYmxlLgorICoKKyAqIElmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdCwgdGhpcyBm dW5jdGlvbiByZXR1cm5zIE5VTEwuIE90aGVyd2lzZSwgaXQKKyAqIHJldHVybnMgdGhlIGVudHJ5 IGFuZCBzZXRzICpsaW1pdF9ibG9jayB0byB0aGUgdmFsdWUgZnJvbSB0aGUgZW50cnkuCisgKi8K K0Jsb2NrUmVmVGFibGVFbnRyeSAqCitCbG9ja1JlZlRhYmxlR2V0RW50cnkoQmxvY2tSZWZUYWJs ZSAqYnJ0YWIsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwKKwkJCQkJICBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyICpsaW1pdF9ibG9jaykKK3sKKwlCbG9ja1JlZlRhYmxl S2V5IGtleSA9IHswfTsgLyogbWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIHplcm8gKi8KKwlCbG9j a1JlZlRhYmxlRW50cnkgKmVudHJ5OworCisJQXNzZXJ0KGxpbWl0X2Jsb2NrICE9IE5VTEwpOwor CisJbWVtY3B5KCZrZXkucmxvY2F0b3IsIHJsb2NhdG9yLCBzaXplb2YoUmVsRmlsZUxvY2F0b3Ip KTsKKwlrZXkuZm9ya251bSA9IGZvcmtudW07CisJZW50cnkgPSBibG9ja3JlZnRhYmxlX2xvb2t1 cChicnRhYi0+aGFzaCwga2V5KTsKKworCWlmIChlbnRyeSAhPSBOVUxMKQorCQkqbGltaXRfYmxv Y2sgPSBlbnRyeS0+bGltaXRfYmxvY2s7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKKy8qCisgKiBH ZXQgYmxvY2sgbnVtYmVycyBmcm9tIGEgdGFibGUgZW50cnkuCisgKgorICogJ2Jsb2NrcycgbXVz dCBwb2ludCB0byBlbm91Z2ggc3BhY2UgdG8gaG9sZCBhdCBsZWFzdCAnbmJsb2NrcycgYmxvY2sK KyAqIG51bWJlcnMsIGFuZCBhbnkgYmxvY2sgbnVtYmVycyB3ZSBtYW5hZ2UgdG8gZ2V0IHdpbGwg YmUgd3JpdHRlbiB0aGVyZS4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBi bG9jayBudW1iZXJzIGFjdHVhbGx5IHdyaXR0ZW4uCisgKgorICogV2UgZG8gbm90IHJldHVybiBi bG9jayBudW1iZXJzIHVubGVzcyB0aGV5IGFyZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAq IHN0YXJ0X2Jsa25vIGFuZCBzdHJpY3RseSBsZXNzIHRoYW4gc3RvcF9ibGtuby4KKyAqLworaW50 CitCbG9ja1JlZlRhYmxlRW50cnlHZXRCbG9ja3MoQmxvY2tSZWZUYWJsZUVudHJ5ICplbnRyeSwK KwkJCQkJCQlCbG9ja051bWJlciBzdGFydF9ibGtubywKKwkJCQkJCQlCbG9ja051bWJlciBzdG9w X2Jsa25vLAorCQkJCQkJCUJsb2NrTnVtYmVyICpibG9ja3MsCisJCQkJCQkJaW50IG5ibG9ja3Mp Cit7CisJdWludDMyCQlzdGFydF9jaHVua25vOworCXVpbnQzMgkJc3RvcF9jaHVua25vOworCXVp bnQzMgkJY2h1bmtubzsKKwlpbnQJCQlucmVzdWx0cyA9IDA7CisKKwlBc3NlcnQoZW50cnkgIT0g TlVMTCk7CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgd2hpY2ggY2h1bmtzIGNvdWxkIHBvdGVudGlh bGx5IGNvbnRhaW4gYmxvY2tzIG9mIGludGVyZXN0LgorCSAqCisJICogV2UgbmVlZCB0byBiZSBj YXJlZnVsIGFib3V0IG92ZXJmbG93IGhlcmUsIGJlY2F1c2Ugc3RvcF9ibGtubyBjb3VsZCBiZQor CSAqIEludmFsaWRCbG9ja051bWJlciBvciBzb21ldGhpbmcgdmVyeSBjbG9zZSB0byBpdC4KKwkg Ki8KKwlzdGFydF9jaHVua25vID0gc3RhcnRfYmxrbm8gLyBCTE9DS1NfUEVSX0NIVU5LOworCXN0 b3BfY2h1bmtubyA9IHN0b3BfYmxrbm8gLyBCTE9DS1NfUEVSX0NIVU5LOworCWlmICgoc3RvcF9i bGtubyAlIEJMT0NLU19QRVJfQ0hVTkspICE9IDApCisJCSsrc3RvcF9jaHVua25vOworCWlmIChz dG9wX2NodW5rbm8gPiBlbnRyeS0+bmNodW5rcykKKwkJc3RvcF9jaHVua25vID0gZW50cnktPm5j aHVua3M7CisKKwkvKgorCSAqIExvb3Agb3ZlciBjaHVua3MuCisJICovCisJZm9yIChjaHVua25v ID0gc3RhcnRfY2h1bmtubzsgY2h1bmtubyA8IHN0b3BfY2h1bmtubzsgKytjaHVua25vKQorCXsK KwkJdWludDE2CQljaHVua191c2FnZSA9IGVudHJ5LT5jaHVua191c2FnZVtjaHVua25vXTsKKwkJ QmxvY2tSZWZUYWJsZUNodW5rIGNodW5rX2RhdGEgPSBlbnRyeS0+Y2h1bmtfZGF0YVtjaHVua25v XTsKKwkJdW5zaWduZWQJc3RhcnRfb2Zmc2V0ID0gMDsKKwkJdW5zaWduZWQJc3RvcF9vZmZzZXQg PSBCTE9DS1NfUEVSX0NIVU5LOworCisJCS8qCisJCSAqIElmIHRoZSBzdGFydCBhbmQvb3Igc3Rv cCBibG9jayBudW1iZXIgZmFsbHMgd2l0aGluIHRoaXMgY2h1bmssIHRoZQorCQkgKiB3aG9sZSBj aHVuayBtYXkgbm90IGJlIG9mIGludGVyZXN0LiBGaWd1cmUgb3V0IHdoaWNoIHBvcnRpb24gd2UK KwkJICogY2FyZSBhYm91dCwgaWYgaXQncyBub3QgdGhlIHdob2xlIHRoaW5nLgorCQkgKi8KKwkJ aWYgKGNodW5rbm8gPT0gc3RhcnRfY2h1bmtubykKKwkJCXN0YXJ0X29mZnNldCA9IHN0YXJ0X2Js a25vICUgQkxPQ0tTX1BFUl9DSFVOSzsKKwkJaWYgKGNodW5rbm8gPT0gc3RvcF9jaHVua25vIC0g MSkKKwkJCXN0b3Bfb2Zmc2V0ID0gc3RvcF9ibGtubyAlIEJMT0NLU19QRVJfQ0hVTks7CisKKwkJ LyoKKwkJICogSGFuZGxpbmcgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGFu IGFycmF5IG9mIG9mZnNldHMKKwkJICogb3IgYSBiaXRtYXAuCisJCSAqLworCQlpZiAoY2h1bmtf dXNhZ2UgPT0gTUFYX0VOVFJJRVNfUEVSX0NIVU5LKQorCQl7CisJCQl1bnNpZ25lZAlpOworCisJ CQkvKiBJdCdzIGEgYml0bWFwLCBzbyB0ZXN0IGV2ZXJ5IHJlbGV2YW50IGJpdC4gKi8KKwkJCWZv ciAoaSA9IHN0YXJ0X29mZnNldDsgaSA8IHN0b3Bfb2Zmc2V0OyArK2kpCisJCQl7CisJCQkJdWlu dDE2CQl3ID0gY2h1bmtfZGF0YVtpIC8gQkxPQ0tTX1BFUl9FTlRSWV07CisKKwkJCQlpZiAoKHcg JiAoMSA8PCAoaSAlIEJMT0NLU19QRVJfRU5UUlkpKSkgIT0gMCkKKwkJCQl7CisJCQkJCUJsb2Nr TnVtYmVyIGJsa25vID0gY2h1bmtubyAqIEJMT0NLU19QRVJfQ0hVTksgKyBpOworCisJCQkJCWJs b2Nrc1tucmVzdWx0cysrXSA9IGJsa25vOworCisJCQkJCS8qIEVhcmx5IGV4aXQgaWYgd2UgcnVu IG91dCBvZiBvdXRwdXQgc3BhY2UuICovCisJCQkJCWlmIChucmVzdWx0cyA9PSBuYmxvY2tzKQor CQkJCQkJcmV0dXJuIG5yZXN1bHRzOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJ CXVuc2lnbmVkCWk7CisKKwkJCS8qIEl0J3MgYW4gYXJyYXkgb2Ygb2Zmc2V0cywgc28gY2hlY2sg ZWFjaCBvbmUuICovCisJCQlmb3IgKGkgPSAwOyBpIDwgY2h1bmtfdXNhZ2U7ICsraSkKKwkJCXsK KwkJCQl1aW50MTYJCW9mZnNldCA9IGNodW5rX2RhdGFbaV07CisKKwkJCQlpZiAob2Zmc2V0ID49 IHN0YXJ0X29mZnNldCAmJiBvZmZzZXQgPCBzdG9wX29mZnNldCkKKwkJCQl7CisJCQkJCUJsb2Nr TnVtYmVyIGJsa25vID0gY2h1bmtubyAqIEJMT0NLU19QRVJfQ0hVTksgKyBvZmZzZXQ7CisKKwkJ CQkJYmxvY2tzW25yZXN1bHRzKytdID0gYmxrbm87CisKKwkJCQkJLyogRWFybHkgZXhpdCBpZiB3 ZSBydW4gb3V0IG9mIG91dHB1dCBzcGFjZS4gKi8KKwkJCQkJaWYgKG5yZXN1bHRzID09IG5ibG9j a3MpCisJCQkJCQlyZXR1cm4gbnJlc3VsdHM7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0 dXJuIG5yZXN1bHRzOworfQorCisvKgorICogU2VyaWFsaXplIGEgYmxvY2sgcmVmZXJlbmNlIHRh YmxlIHRvIGEgZmlsZS4KKyAqLwordm9pZAorV3JpdGVCbG9ja1JlZlRhYmxlKEJsb2NrUmVmVGFi bGUgKmJydGFiLAorCQkJCSAgIGlvX2NhbGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCSAg IHZvaWQgKndyaXRlX2NhbGxiYWNrX2FyZykKK3sKKwlCbG9ja1JlZlRhYmxlU2VyaWFsaXplZEVu dHJ5ICpzZGF0YSA9IE5VTEw7CisJQmxvY2tSZWZUYWJsZUJ1ZmZlciBidWZmZXI7CisJdWludDMy CQltYWdpYyA9IEJMT0NLUkVGVEFCTEVfTUFHSUM7CisKKwkvKiBQcmVwYXJlIGJ1ZmZlci4gKi8K KwltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKEJsb2NrUmVmVGFibGVCdWZmZXIpKTsKKwlidWZm ZXIuaW9fY2FsbGJhY2sgPSB3cml0ZV9jYWxsYmFjazsKKwlidWZmZXIuaW9fY2FsbGJhY2tfYXJn ID0gd3JpdGVfY2FsbGJhY2tfYXJnOworCUlOSVRfQ1JDMzJDKGJ1ZmZlci5jcmMpOworCisJLyog V3JpdGUgbWFnaWMgbnVtYmVyLiAqLworCUJsb2NrUmVmVGFibGVXcml0ZSgmYnVmZmVyLCAmbWFn aWMsIHNpemVvZih1aW50MzIpKTsKKworCS8qIFdyaXRlIHRoZSBlbnRyaWVzLCBhc3N1bWluZyB0 aGVyZSBhcmUgc29tZS4gKi8KKwlpZiAoYnJ0YWItPmhhc2gtPm1lbWJlcnMgPiAwKQorCXsKKwkJ dW5zaWduZWQJaSA9IDA7CisJCWJsb2NrcmVmdGFibGVfaXRlcmF0b3IgaXQ7CisJCUJsb2NrUmVm VGFibGVFbnRyeSAqYnJ0ZW50cnk7CisKKwkJLyogRXh0cmFjdCBlbnRyaWVzIGludG8gc2VyaWFs aXphYmxlIGZvcm1hdCBhbmQgc29ydCB0aGVtLiAqLworCQlzZGF0YSA9CisJCQlwYWxsb2MoYnJ0 YWItPmhhc2gtPm1lbWJlcnMgKiBzaXplb2YoQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkp OworCQlibG9ja3JlZnRhYmxlX3N0YXJ0X2l0ZXJhdGUoYnJ0YWItPmhhc2gsICZpdCk7CisJCXdo aWxlICgoYnJ0ZW50cnkgPSBibG9ja3JlZnRhYmxlX2l0ZXJhdGUoYnJ0YWItPmhhc2gsICZpdCkp ICE9IE5VTEwpCisJCXsKKwkJCUJsb2NrUmVmVGFibGVTZXJpYWxpemVkRW50cnkgKnNlbnRyeSA9 ICZzZGF0YVtpKytdOworCisJCQlzZW50cnktPnJsb2NhdG9yID0gYnJ0ZW50cnktPmtleS5ybG9j YXRvcjsKKwkJCXNlbnRyeS0+Zm9ya251bSA9IGJydGVudHJ5LT5rZXkuZm9ya251bTsKKwkJCXNl bnRyeS0+bGltaXRfYmxvY2sgPSBicnRlbnRyeS0+bGltaXRfYmxvY2s7CisJCQlzZW50cnktPm5j aHVua3MgPSBicnRlbnRyeS0+bmNodW5rczsKKworCQkJLyogdHJpbSB0cmFpbGluZyB6ZXJvIGVu dHJpZXMgKi8KKwkJCXdoaWxlIChzZW50cnktPm5jaHVua3MgPiAwICYmCisJCQkJICAgYnJ0ZW50 cnktPmNodW5rX3VzYWdlW3NlbnRyeS0+bmNodW5rcyAtIDFdID09IDApCisJCQkJc2VudHJ5LT5u Y2h1bmtzLS07CisJCX0KKwkJQXNzZXJ0KGkgPT0gYnJ0YWItPmhhc2gtPm1lbWJlcnMpOworCQlx c29ydChzZGF0YSwgaSwgc2l6ZW9mKEJsb2NrUmVmVGFibGVTZXJpYWxpemVkRW50cnkpLAorCQkJ ICBCbG9ja1JlZlRhYmxlQ29tcGFyYXRvcik7CisKKwkJLyogTG9vcCBvdmVyIGVudHJpZXMgaW4g c29ydGVkIG9yZGVyIGFuZCBzZXJpYWxpemUgZWFjaCBvbmUuICovCisJCWZvciAoaSA9IDA7IGkg PCBicnRhYi0+aGFzaC0+bWVtYmVyczsgKytpKQorCQl7CisJCQlCbG9ja1JlZlRhYmxlU2VyaWFs aXplZEVudHJ5ICpzZW50cnkgPSAmc2RhdGFbaV07CisJCQlCbG9ja1JlZlRhYmxlS2V5IGtleSA9 IHswfTsgLyogbWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIHplcm8gKi8KKwkJCXVuc2lnbmVkCWo7 CisKKwkJCS8qIFdyaXRlIHRoZSBzZXJpYWxpemVkIGVudHJ5IGl0c2VsZi4gKi8KKwkJCUJsb2Nr UmVmVGFibGVXcml0ZSgmYnVmZmVyLCBzZW50cnksCisJCQkJCQkJICAgc2l6ZW9mKEJsb2NrUmVm VGFibGVTZXJpYWxpemVkRW50cnkpKTsKKworCQkJLyogTG9vayB1cCB0aGUgb3JpZ2luYWwgZW50 cnkgc28gd2UgY2FuIGFjY2VzcyB0aGUgY2h1bmtzLiAqLworCQkJbWVtY3B5KCZrZXkucmxvY2F0 b3IsICZzZW50cnktPnJsb2NhdG9yLCBzaXplb2YoUmVsRmlsZUxvY2F0b3IpKTsKKwkJCWtleS5m b3JrbnVtID0gc2VudHJ5LT5mb3JrbnVtOworCQkJYnJ0ZW50cnkgPSBibG9ja3JlZnRhYmxlX2xv b2t1cChicnRhYi0+aGFzaCwga2V5KTsKKwkJCUFzc2VydChicnRlbnRyeSAhPSBOVUxMKTsKKwor CQkJLyogV3JpdGUgdGhlIHVudHJ1bmNhdGVkIHBvcnRpb24gb2YgdGhlIGNodW5rIGxlbmd0aCBh cnJheS4gKi8KKwkJCWlmIChzZW50cnktPm5jaHVua3MgIT0gMCkKKwkJCQlCbG9ja1JlZlRhYmxl V3JpdGUoJmJ1ZmZlciwgYnJ0ZW50cnktPmNodW5rX3VzYWdlLAorCQkJCQkJCQkgICBzZW50cnkt Pm5jaHVua3MgKiBzaXplb2YodWludDE2KSk7CisKKwkJCS8qIFdyaXRlIHRoZSBjb250ZW50cyBv ZiBlYWNoIGNodW5rLiAqLworCQkJZm9yIChqID0gMDsgaiA8IGJydGVudHJ5LT5uY2h1bmtzOyAr K2opCisJCQl7CisJCQkJaWYgKGJydGVudHJ5LT5jaHVua191c2FnZVtqXSA9PSAwKQorCQkJCQlj b250aW51ZTsKKwkJCQlCbG9ja1JlZlRhYmxlV3JpdGUoJmJ1ZmZlciwgYnJ0ZW50cnktPmNodW5r X2RhdGFbal0sCisJCQkJCQkJCSAgIGJydGVudHJ5LT5jaHVua191c2FnZVtqXSAqIHNpemVvZih1 aW50MTYpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFdyaXRlIG91dCBhcHByb3ByaWF0ZSB0ZXJt aW5hdG9yIGFuZCBDUkMgYW5kIGZsdXNoIGJ1ZmZlci4gKi8KKwlCbG9ja1JlZlRhYmxlRmlsZVRl cm1pbmF0ZSgmYnVmZmVyKTsKK30KKworLyoKKyAqIFByZXBhcmUgdG8gaW5jcmVtZW50YWxseSBy ZWFkIGEgYmxvY2sgcmVmZXJlbmNlIHRhYmxlIGZpbGUuCisgKgorICogJ3JlYWRfY2FsbGJhY2sn IGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIHJlYWQgZGF0YSBmcm9tIHRoZQor ICogdW5kZXJseWluZyBmaWxlIChvciBvdGhlciBkYXRhIHNvdXJjZSkgaW50byBvdXIgaW50ZXJu YWwgYnVmZmVyLgorICoKKyAqICdyZWFkX2NhbGxiYWNrX2FyZycgaXMgYW4gb3BhcXVlIGFyZ3Vt ZW50IHRvIGJlIHBhc3NlZCB0byByZWFkX2NhbGxiYWNrLgorICoKKyAqICdlcnJvcl9maWxlbmFt ZScgaXMgdGhlIGZpbGVuYW1lIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGVycm9yIG1lc3Nh Z2VzCisgKiBpZiB0aGUgZmlsZSBpcyBmb3VuZCB0byBiZSBtYWxmb3JtZWQuIFRoZSB2YWx1ZSBp cyBub3QgY29waWVkLCBzbyB0aGUKKyAqIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQgaXQgcmVt YWlucyB2YWxpZCB1bnRpbCBkb25lIHdpdGggdGhpcworICogQmxvY2tSZWZUYWJsZVJlYWRlci4K KyAqCisgKiAnZXJyb3JfY2FsbGJhY2snIGlzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRo ZSBmaWxlIGlzIGZvdW5kIHRvIGJlCisgKiBtYWxmb3JtZWQuIFRoaXMgaXMgbm90IHVzZWQgZm9y IEkvTyBlcnJvcnMsIHdoaWNoIG11c3QgYmUgaGFuZGxlZCBpbnRlcm5hbGx5CisgKiBieSByZWFk X2NhbGxiYWNrLgorICoKKyAqICdlcnJvcl9jYWxsYmFja19hcmcnIGlzIGFuIG9wYXF1ZSBhcmd1 ZW50IHRvIGJlIHBhc3NlZCB0byBlcnJvcl9jYWxsYmFjay4KKyAqLworQmxvY2tSZWZUYWJsZVJl YWRlciAqCitDcmVhdGVCbG9ja1JlZlRhYmxlUmVhZGVyKGlvX2NhbGxiYWNrX2ZuIHJlYWRfY2Fs bGJhY2ssCisJCQkJCQkgIHZvaWQgKnJlYWRfY2FsbGJhY2tfYXJnLAorCQkJCQkJICBjaGFyICpl cnJvcl9maWxlbmFtZSwKKwkJCQkJCSAgcmVwb3J0X2Vycm9yX2ZuIGVycm9yX2NhbGxiYWNrLAor CQkJCQkJICB2b2lkICplcnJvcl9jYWxsYmFja19hcmcpCit7CisJQmxvY2tSZWZUYWJsZVJlYWRl ciAqcmVhZGVyOworCXVpbnQzMgkJbWFnaWM7CisKKwkvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0 dXJlLiAqLworCXJlYWRlciA9IHBhbGxvYzAoc2l6ZW9mKEJsb2NrUmVmVGFibGVSZWFkZXIpKTsK KwlyZWFkZXItPmJ1ZmZlci5pb19jYWxsYmFjayA9IHJlYWRfY2FsbGJhY2s7CisJcmVhZGVyLT5i dWZmZXIuaW9fY2FsbGJhY2tfYXJnID0gcmVhZF9jYWxsYmFja19hcmc7CisJcmVhZGVyLT5lcnJv cl9maWxlbmFtZSA9IGVycm9yX2ZpbGVuYW1lOworCXJlYWRlci0+ZXJyb3JfY2FsbGJhY2sgPSBl cnJvcl9jYWxsYmFjazsKKwlyZWFkZXItPmVycm9yX2NhbGxiYWNrX2FyZyA9IGVycm9yX2NhbGxi YWNrX2FyZzsKKwlJTklUX0NSQzMyQyhyZWFkZXItPmJ1ZmZlci5jcmMpOworCisJLyogVmVyaWZ5 IG1hZ2ljIG51bWJlci4gKi8KKwlCbG9ja1JlZlRhYmxlUmVhZChyZWFkZXIsICZtYWdpYywgc2l6 ZW9mKHVpbnQzMikpOworCWlmIChtYWdpYyAhPSBCTE9DS1JFRlRBQkxFX01BR0lDKQorCQllcnJv cl9jYWxsYmFjayhlcnJvcl9jYWxsYmFja19hcmcsCisJCQkJCSAgICJmaWxlIFwiJXNcIiBoYXMg d3JvbmcgbWFnaWMgbnVtYmVyOiBleHBlY3RlZCAldSwgZm91bmQgJXUiLAorCQkJCQkgICBlcnJv cl9maWxlbmFtZSwKKwkJCQkJICAgQkxPQ0tSRUZUQUJMRV9NQUdJQywgbWFnaWMpOworCisJcmV0 dXJuIHJlYWRlcjsKK30KKworLyoKKyAqIFJlYWQgbmV4dCByZWxhdGlvbiBmb3JrIGNvdmVyZWQg YnkgdGhpcyBibG9jayByZWZlcmVuY2UgdGFibGUgZmlsZS4KKyAqCisgKiBBZnRlciBjYWxsaW5n IHRoaXMgZnVuY3Rpb24sIHlvdSBtdXN0IGNhbGwgQmxvY2tSZWZUYWJsZVJlYWRlckdldEJsb2Nr cworICogdW50aWwgaXQgcmV0dXJucyAwIGJlZm9yZSBjYWxsaW5nIGl0IGFnYWluLgorICovCiti b29sCitCbG9ja1JlZlRhYmxlUmVhZGVyTmV4dFJlbGF0aW9uKEJsb2NrUmVmVGFibGVSZWFkZXIg KnJlYWRlciwKKwkJCQkJCQkJUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yLAorCQkJCQkJCQlGb3Jr TnVtYmVyICpmb3JrbnVtLAorCQkJCQkJCQlCbG9ja051bWJlciAqbGltaXRfYmxvY2spCit7CisJ QmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSBzZW50cnk7CisJQmxvY2tSZWZUYWJsZVNlcmlh bGl6ZWRFbnRyeSB6ZW50cnkgPSB7ezB9fTsKKworCS8qCisJICogU2FuaXR5IGNoZWNrOiBjYWxs ZXIgbXVzdCByZWFkIGFsbCBibG9ja3MgZnJvbSBhbGwgY2h1bmtzIGJlZm9yZSBtb3ZpbmcKKwkg KiBvbiB0byB0aGUgbmV4dCByZWxhdGlvbi4KKwkgKi8KKwlBc3NlcnQocmVhZGVyLT50b3RhbF9j aHVua3MgPT0gcmVhZGVyLT5jb25zdW1lZF9jaHVua3MpOworCisJLyogUmVhZCBzZXJpYWxpemVk IGVudHJ5LiAqLworCUJsb2NrUmVmVGFibGVSZWFkKHJlYWRlciwgJnNlbnRyeSwKKwkJCQkJICBz aXplb2YoQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkpOworCisJLyoKKwkgKiBJZiB3ZSBq dXN0IHJlYWQgdGhlIHNlbnRpbmVsIGVudHJ5IGluZGljYXRpbmcgdGhhdCB3ZSd2ZSByZWFjaGVk IHRoZQorCSAqIGVuZCwgcmVhZCBhbmQgY2hlY2sgdGhlIENSQy4KKwkgKi8KKwlpZiAobWVtY21w KCZzZW50cnksICZ6ZW50cnksIHNpemVvZihCbG9ja1JlZlRhYmxlU2VyaWFsaXplZEVudHJ5KSkg PT0gMCkKKwl7CisJCXBnX2NyYzMyYwlleHBlY3RlZF9jcmM7CisJCXBnX2NyYzMyYwlhY3R1YWxf Y3JjOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8ga25vdyB0aGUgQ1JDIG9mIHRoZSBmaWxlIGV4 Y2x1ZGluZyB0aGUgNC1ieXRlIENSQworCQkgKiBpdHNlbGYsIHNvIGNvcHkgdGhlIGN1cnJlbnQg dmFsdWUgb2YgdGhlIENSQyBhY2N1bXVsYXRvciBiZWZvcmUKKwkJICogcmVhZGluZyB0aG9zZSBi eXRlcywgYW5kIHVzZSB0aGUgY29weSB0byBmaW5hbGl6ZSB0aGUgY2FsY3VsYXRpb24uCisJCSAq LworCQlleHBlY3RlZF9jcmMgPSByZWFkZXItPmJ1ZmZlci5jcmM7CisJCUZJTl9DUkMzMkMoZXhw ZWN0ZWRfY3JjKTsKKworCQkvKiBOb3cgd2UgY2FuIHJlYWQgdGhlIGFjdHVhbCB2YWx1ZS4gKi8K KwkJQmxvY2tSZWZUYWJsZVJlYWQocmVhZGVyLCAmYWN0dWFsX2NyYywgc2l6ZW9mKHBnX2NyYzMy YykpOworCisJCS8qIFRocm93IGFuIGVycm9yIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2guICovCisJ CWlmICghRVFfQ1JDMzJDKGV4cGVjdGVkX2NyYywgYWN0dWFsX2NyYykpCisJCQlyZWFkZXItPmVy cm9yX2NhbGxiYWNrKHJlYWRlci0+ZXJyb3JfY2FsbGJhY2tfYXJnLAorCQkJCQkJCQkgICAiZmls ZSBcIiVzXCIgaGFzIHdyb25nIGNoZWNrc3VtOiBleHBlY3RlZCAlMDhYLCBmb3VuZCAlMDhYIiwK KwkJCQkJCQkJICAgcmVhZGVyLT5lcnJvcl9maWxlbmFtZSwgZXhwZWN0ZWRfY3JjLCBhY3R1YWxf Y3JjKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogUmVhZCBjaHVuayBzaXplIGFycmF5 LiAqLworCWlmIChyZWFkZXItPmNodW5rX3NpemUgIT0gTlVMTCkKKwkJcGZyZWUocmVhZGVyLT5j aHVua19zaXplKTsKKwlyZWFkZXItPmNodW5rX3NpemUgPSBwYWxsb2Moc2VudHJ5Lm5jaHVua3Mg KiBzaXplb2YodWludDE2KSk7CisJQmxvY2tSZWZUYWJsZVJlYWQocmVhZGVyLCByZWFkZXItPmNo dW5rX3NpemUsCisJCQkJCSAgc2VudHJ5Lm5jaHVua3MgKiBzaXplb2YodWludDE2KSk7CisKKwkv KiBTZXQgdXAgZm9yIGNodW5rIHNjYW4uICovCisJcmVhZGVyLT50b3RhbF9jaHVua3MgPSBzZW50 cnkubmNodW5rczsKKwlyZWFkZXItPmNvbnN1bWVkX2NodW5rcyA9IDA7CisKKwkvKiBSZXR1cm4g ZGF0YSB0byBjYWxsZXIuICovCisJbWVtY3B5KHJsb2NhdG9yLCAmc2VudHJ5LnJsb2NhdG9yLCBz aXplb2YoUmVsRmlsZUxvY2F0b3IpKTsKKwkqZm9ya251bSA9IHNlbnRyeS5mb3JrbnVtOworCSps aW1pdF9ibG9jayA9IHNlbnRyeS5saW1pdF9ibG9jazsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIEdldCBtb2RpZmllZCBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxhdGlvbiBmb3Jr IHJldHVybmVkIGJ5CisgKiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byBCbG9ja1JlZlRhYmxlUmVh ZGVyTmV4dFJlbGF0aW9uLgorICoKKyAqIE9uIHJldHVybiwgYmxvY2sgbnVtYmVycyB3aWxsIGJl IHdyaXR0ZW4gaW50byB0aGUgJ2Jsb2NrcycgYXJyYXksIHdob3NlCisgKiBsZW5ndGggc2hvdWxk IGJlIHBhc3NlZCB2aWEgJ25ibG9ja3MnLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIg b2YKKyAqIGVudHJpZXMgYWN0dWFsbHkgd3JpdHRlbiBpbnRvIHRoZSAnYmxvY2tzJyBhcnJheSwg d2hpY2ggbWF5IGJlIGxlc3MgdGhhbgorICogJ25ibG9ja3MnIGlmIHdlIHJ1biBvdXQgb2YgbW9k aWZpZWQgYmxvY2tzIGluIHRoZSByZWxhdGlvbiBmb3JrIGJlZm9yZQorICogd2UgcnVuIG91dCBv ZiByb29tIGluIHRoZSBhcnJheS4KKyAqLwordW5zaWduZWQKK0Jsb2NrUmVmVGFibGVSZWFkZXJH ZXRCbG9ja3MoQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyLAorCQkJCQkJCSBCbG9ja051bWJl ciAqYmxvY2tzLAorCQkJCQkJCSBpbnQgbmJsb2NrcykKK3sKKwl1bnNpZ25lZAlibG9ja3NfZm91 bmQgPSAwOworCisJLyogTXVzdCBwcm92aWRlIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgYmxvY2sg bnVtYmVyIHRvIGJlIHJldHVybmVkLiAqLworCUFzc2VydChuYmxvY2tzID4gMCk7CisKKwkvKiBM b29wIGNvbGxlY3RpbmcgYmxvY2tzIHRvIHJldHVybiB0byBjYWxsZXIuICovCisJZm9yICg7OykK Kwl7CisJCXVpbnQxNgkJbmV4dF9jaHVua19zaXplOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIHJl YWQgYXQgbGVhc3Qgb25lIGNodW5rLCBtYXliZSBpdCBjb250YWlucyBzb21lIGJsb2NrCisJCSAq IG51bWJlcnMgdGhhdCBjb3VsZCBzYXRpc2Z5IGNhbGxlcidzIHJlcXVlc3QuCisJCSAqLworCQlp ZiAocmVhZGVyLT5jb25zdW1lZF9jaHVua3MgPiAwKQorCQl7CisJCQl1aW50MzIJCWNodW5rbm8g PSByZWFkZXItPmNvbnN1bWVkX2NodW5rcyAtIDE7CisJCQl1aW50MTYJCWNodW5rX3NpemUgPSBy ZWFkZXItPmNodW5rX3NpemVbY2h1bmtub107CisKKwkJCWlmIChjaHVua19zaXplID09IE1BWF9F TlRSSUVTX1BFUl9DSFVOSykKKwkJCXsKKwkJCQkvKiBCaXRtYXAgZm9ybWF0LCBzbyBzZWFyY2gg Zm9yIGJpdHMgdGhhdCBhcmUgc2V0LiAqLworCQkJCXdoaWxlIChyZWFkZXItPmNodW5rX3Bvc2l0 aW9uIDwgQkxPQ0tTX1BFUl9DSFVOSyAmJgorCQkJCQkgICBibG9ja3NfZm91bmQgPCBuYmxvY2tz KQorCQkJCXsKKwkJCQkJdWludDE2CQljaHVua29mZnNldCA9IHJlYWRlci0+Y2h1bmtfcG9zaXRp b247CisJCQkJCXVpbnQxNgkJdzsKKworCQkJCQl3ID0gcmVhZGVyLT5jaHVua19kYXRhW2NodW5r b2Zmc2V0IC8gQkxPQ0tTX1BFUl9FTlRSWV07CisJCQkJCWlmICgodyAmICgxdSA8PCAoY2h1bmtv ZmZzZXQgJSBCTE9DS1NfUEVSX0VOVFJZKSkpICE9IDApCisJCQkJCQlibG9ja3NbYmxvY2tzX2Zv dW5kKytdID0KKwkJCQkJCQljaHVua25vICogQkxPQ0tTX1BFUl9DSFVOSyArIGNodW5rb2Zmc2V0 OworCQkJCQkrK3JlYWRlci0+Y2h1bmtfcG9zaXRpb247CisJCQkJfQorCQkJfQorCQkJZWxzZQor CQkJeworCQkJCS8qIE5vdCBpbiBiaXRtYXAgZm9ybWF0LCBzbyBlYWNoIGVudHJ5IGlzIGEgMi1i eXRlIG9mZnNldC4gKi8KKwkJCQl3aGlsZSAocmVhZGVyLT5jaHVua19wb3NpdGlvbiA8IGNodW5r X3NpemUgJiYKKwkJCQkJICAgYmxvY2tzX2ZvdW5kIDwgbmJsb2NrcykKKwkJCQl7CisJCQkJCWJs b2Nrc1tibG9ja3NfZm91bmQrK10gPSBjaHVua25vICogQkxPQ0tTX1BFUl9DSFVOSworCQkJCQkJ KyByZWFkZXItPmNodW5rX2RhdGFbcmVhZGVyLT5jaHVua19wb3NpdGlvbl07CisJCQkJCSsrcmVh ZGVyLT5jaHVua19wb3NpdGlvbjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBXZSBmb3VuZCBl bm91Z2ggYmxvY2tzLCBzbyB3ZSdyZSBkb25lLiAqLworCQlpZiAoYmxvY2tzX2ZvdW5kID49IG5i bG9ja3MpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBXZSBkaWRuJ3QgZmluZCBlbm91Z2ggYmxv Y2tzLCBzbyB3ZSBtdXN0IG5lZWQgdGhlIG5leHQgY2h1bmsuIElmCisJCSAqIHRoZXJlIGFyZSBu b25lIGxlZnQsIHRob3VnaCwgdGhlbiB3ZSdyZSBkb25lIGFueXdheS4KKwkJICovCisJCWlmIChy ZWFkZXItPmNvbnN1bWVkX2NodW5rcyA9PSByZWFkZXItPnRvdGFsX2NodW5rcykKKwkJCWJyZWFr OworCisJCS8qCisJCSAqIFJlYWQgZGF0YSBmb3IgbmV4dCBjaHVuayBhbmQgcmVzZXQgc2NhbiBw b3NpdGlvbiB0byBiZWdpbm5pbmcgb2YKKwkJICogY2h1bmsuIE5vdGUgdGhhdCB0aGUgbmV4dCBj aHVuayBtaWdodCBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZQorCQkgKiBjb25zdW1lIHRoZSBj aHVuayB3aXRob3V0IGFjdHVhbGx5IGNvbnN1bWluZyBhbnkgYnl0ZXMgZnJvbSB0aGUKKwkJICog dW5kZXJseWluZyBmaWxlLgorCQkgKi8KKwkJbmV4dF9jaHVua19zaXplID0gcmVhZGVyLT5jaHVu a19zaXplW3JlYWRlci0+Y29uc3VtZWRfY2h1bmtzXTsKKwkJaWYgKG5leHRfY2h1bmtfc2l6ZSA+ IDApCisJCQlCbG9ja1JlZlRhYmxlUmVhZChyZWFkZXIsIHJlYWRlci0+Y2h1bmtfZGF0YSwKKwkJ CQkJCQkgIG5leHRfY2h1bmtfc2l6ZSAqIHNpemVvZih1aW50MTYpKTsKKwkJKytyZWFkZXItPmNv bnN1bWVkX2NodW5rczsKKwkJcmVhZGVyLT5jaHVua19wb3NpdGlvbiA9IDA7CisJfQorCisJcmV0 dXJuIGJsb2Nrc19mb3VuZDsKK30KKworLyoKKyAqIFJlbGVhc2UgbWVtb3J5IHVzZWQgd2hpbGUg cmVhZGluZyBhIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBmcm9tIGEgZmlsZS4KKyAqLwordm9pZAor RGVzdHJveUJsb2NrUmVmVGFibGVSZWFkZXIoQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyKQor eworCWlmIChyZWFkZXItPmNodW5rX3NpemUgIT0gTlVMTCkKKwl7CisJCXBmcmVlKHJlYWRlci0+ Y2h1bmtfc2l6ZSk7CisJCXJlYWRlci0+Y2h1bmtfc2l6ZSA9IE5VTEw7CisJfQorCXBmcmVlKHJl YWRlcik7Cit9CisKKy8qCisgKiBQcmVwYXJlIHRvIHdyaXRlIGEgYmxvY2sgcmVmZXJlbmNlIHRh YmxlIGZpbGUgaW5jcmVtZW50YWxseS4KKyAqCisgKiBDYWxsZXIgbXVzdCBiZSBhYmxlIHRvIHN1 cHBseSBCbG9ja1JlZlRhYmxlRW50cnkgb2JqZWN0cyBzb3J0ZWQgaW4gdGhlCisgKiBhcHByb3By aWF0ZSBvcmRlci4KKyAqLworQmxvY2tSZWZUYWJsZVdyaXRlciAqCitDcmVhdGVCbG9ja1JlZlRh YmxlV3JpdGVyKGlvX2NhbGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCQkJICB2b2lkICp3 cml0ZV9jYWxsYmFja19hcmcpCit7CisJQmxvY2tSZWZUYWJsZVdyaXRlciAqd3JpdGVyOworCXVp bnQzMgkJbWFnaWMgPSBCTE9DS1JFRlRBQkxFX01BR0lDOworCisJLyogUHJlcGFyZSBidWZmZXIg YW5kIENSQyBjaGVjayBhbmQgc2F2ZSBjYWxsYmFja3MuICovCisJd3JpdGVyID0gcGFsbG9jMChz aXplb2YoQmxvY2tSZWZUYWJsZVdyaXRlcikpOworCXdyaXRlci0+YnVmZmVyLmlvX2NhbGxiYWNr ID0gd3JpdGVfY2FsbGJhY2s7CisJd3JpdGVyLT5idWZmZXIuaW9fY2FsbGJhY2tfYXJnID0gd3Jp dGVfY2FsbGJhY2tfYXJnOworCUlOSVRfQ1JDMzJDKHdyaXRlci0+YnVmZmVyLmNyYyk7CisKKwkv KiBXcml0ZSBtYWdpYyBudW1iZXIuICovCisJQmxvY2tSZWZUYWJsZVdyaXRlKCZ3cml0ZXItPmJ1 ZmZlciwgJm1hZ2ljLCBzaXplb2YodWludDMyKSk7CisKKwlyZXR1cm4gd3JpdGVyOworfQorCisv KgorICogQXBwZW5kIG9uZSBlbnRyeSB0byBhIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBmaWxlLgor ICoKKyAqIE5vdGUgdGhhdCBlbnRyaWVzIG11c3QgYmUgd3JpdHRlbiBpbiB0aGUgcHJvcGVyIG9y ZGVyLCB0aGF0IGlzLCBzb3J0ZWQgYnkKKyAqIHRhYmxlc3BhY2UsIHRoZW4gZGF0YWJhc2UsIHRo ZW4gcmVsZmlsZW51bWJlciwgdGhlbiBmb3JrIG51bWJlci4gQ2FsbGVyCisgKiBpcyByZXNwb25z aWJsZSBmb3Igc3VwcGx5aW5nIGRhdGEgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmIHRoYXQgc2Vl bXMgaGFyZCwKKyAqIHVzZSBhbiBpbi1tZW1vcnkgQmxvY2tSZWZUYWJsZSBpbnN0ZWFkLgorICov Cit2b2lkCitCbG9ja1JlZlRhYmxlV3JpdGVFbnRyeShCbG9ja1JlZlRhYmxlV3JpdGVyICp3cml0 ZXIsIEJsb2NrUmVmVGFibGVFbnRyeSAqZW50cnkpCit7CisJQmxvY2tSZWZUYWJsZVNlcmlhbGl6 ZWRFbnRyeSBzZW50cnk7CisJdW5zaWduZWQJajsKKworCS8qIENvbnZlcnQgdG8gc2VyaWFsaXpl ZCBlbnRyeSBmb3JtYXQuICovCisJc2VudHJ5LnJsb2NhdG9yID0gZW50cnktPmtleS5ybG9jYXRv cjsKKwlzZW50cnkuZm9ya251bSA9IGVudHJ5LT5rZXkuZm9ya251bTsKKwlzZW50cnkubGltaXRf YmxvY2sgPSBlbnRyeS0+bGltaXRfYmxvY2s7CisJc2VudHJ5Lm5jaHVua3MgPSBlbnRyeS0+bmNo dW5rczsKKworCS8qIFRyaW0gdHJhaWxpbmcgemVybyBlbnRyaWVzLiAqLworCXdoaWxlIChzZW50 cnkubmNodW5rcyA+IDAgJiYgZW50cnktPmNodW5rX3VzYWdlW3NlbnRyeS5uY2h1bmtzIC0gMV0g PT0gMCkKKwkJc2VudHJ5Lm5jaHVua3MtLTsKKworCS8qIFdyaXRlIHRoZSBzZXJpYWxpemVkIGVu dHJ5IGl0c2VsZi4gKi8KKwlCbG9ja1JlZlRhYmxlV3JpdGUoJndyaXRlci0+YnVmZmVyLCAmc2Vu dHJ5LAorCQkJCQkgICBzaXplb2YoQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkpOworCisJ LyogV3JpdGUgdGhlIHVudHJ1bmNhdGVkIHBvcnRpb24gb2YgdGhlIGNodW5rIGxlbmd0aCBhcnJh eS4gKi8KKwlpZiAoc2VudHJ5Lm5jaHVua3MgIT0gMCkKKwkJQmxvY2tSZWZUYWJsZVdyaXRlKCZ3 cml0ZXItPmJ1ZmZlciwgZW50cnktPmNodW5rX3VzYWdlLAorCQkJCQkJICAgc2VudHJ5Lm5jaHVu a3MgKiBzaXplb2YodWludDE2KSk7CisKKwkvKiBXcml0ZSB0aGUgY29udGVudHMgb2YgZWFjaCBj aHVuay4gKi8KKwlmb3IgKGogPSAwOyBqIDwgZW50cnktPm5jaHVua3M7ICsraikKKwl7CisJCWlm IChlbnRyeS0+Y2h1bmtfdXNhZ2Vbal0gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlCbG9ja1JlZlRh YmxlV3JpdGUoJndyaXRlci0+YnVmZmVyLCBlbnRyeS0+Y2h1bmtfZGF0YVtqXSwKKwkJCQkJCSAg IGVudHJ5LT5jaHVua191c2FnZVtqXSAqIHNpemVvZih1aW50MTYpKTsKKwl9Cit9CisKKy8qCisg KiBGaW5hbGl6ZSBhbiBpbmNyZW1lbnRhbCB3cml0ZSBvZiBhIGJsb2NrIHJlZmVyZW5jZSB0YWJs ZSBmaWxlLgorICovCit2b2lkCitEZXN0cm95QmxvY2tSZWZUYWJsZVdyaXRlcihCbG9ja1JlZlRh YmxlV3JpdGVyICp3cml0ZXIpCit7CisJQmxvY2tSZWZUYWJsZUZpbGVUZXJtaW5hdGUoJndyaXRl ci0+YnVmZmVyKTsKKwlwZnJlZSh3cml0ZXIpOworfQorCisvKgorICogQWxsb2NhdGUgYSBzdGFu ZGFsb25lIEJsb2NrUmVmVGFibGVFbnRyeS4KKyAqCisgKiBXaGVuIHdlJ3JlIG1hbmlwdWxhdGlu ZyBhIGZ1bGwgaW4tbWVtb3J5IEJsb2NrUmVmVGFibGUsIHRoZSBlbnRyaWVzIGFyZQorICogcGFy dCBvZiB0aGUgaGFzaCB0YWJsZSBhbmQgYXJlIGFsbG9jYXRlZCBieSBzaW1wbGVoYXNoLiBUaGlz IHJvdXRpbmUgaXMKKyAqIHVzZWQgYnkgY2FsbGVycyB0aGF0IHdhbnQgdG8gd3JpdGUgb3V0IGEg QmxvY2tSZWZUYWJsZSB0byBhIGZpbGUgd2l0aG91dAorICogbmVlZGluZyB0byBzdG9yZSB0aGUg d2hvbGUgdGhpbmcgaW4gbWVtb3J5IGF0IG9uY2UuCisgKgorICogRW50cmllcyBhbGxvY2F0ZWQg YnkgdGhpcyBmdW5jdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgdXNpbmcgdGhlIGZ1bmN0aW9ucwor ICogQmxvY2tSZWZUYWJsZUVudHJ5U2V0TGltaXRCbG9jayBhbmQgQmxvY2tSZWZUYWJsZUVudHJ5 TWFya0Jsb2NrTW9kaWZpZWQKKyAqIGFuZCB0aGVuIHdyaXR0ZW4gdXNpbmcgQmxvY2tSZWZUYWJs ZVdyaXRlRW50cnkgYW5kIGZyZWVkIHVzaW5nCisgKiBCbG9ja1JlZlRhYmxlRnJlZUVudHJ5Lgor ICovCitCbG9ja1JlZlRhYmxlRW50cnkgKgorQ3JlYXRlQmxvY2tSZWZUYWJsZUVudHJ5KFJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0pCit7CisJQmxvY2tSZWZUYWJs ZUVudHJ5ICplbnRyeSA9IHBhbGxvYzAoc2l6ZW9mKEJsb2NrUmVmVGFibGVFbnRyeSkpOworCisJ bWVtY3B5KCZlbnRyeS0+a2V5LnJsb2NhdG9yLCAmcmxvY2F0b3IsIHNpemVvZihSZWxGaWxlTG9j YXRvcikpOworCWVudHJ5LT5rZXkuZm9ya251bSA9IGZvcmtudW07CisJZW50cnktPmxpbWl0X2Js b2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJcmV0dXJuIGVudHJ5OworfQorCisvKgorICog VXBkYXRlIGEgQmxvY2tSZWZUYWJsZUVudHJ5IHdpdGggYSBuZXcgdmFsdWUgZm9yIHRoZSAibGlt aXQgYmxvY2siIGFuZAorICogZm9yZ2V0IGFueSBlcXVhbC1vci1oaWdoZXItbnVtYmVyZWQgbW9k aWZpZWQgYmxvY2tzLgorICoKKyAqIFRoZSAibGltaXQgYmxvY2siIGlzIHRoZSBzaG9ydGVzdCBr bm93biBsZW5ndGggb2YgdGhlIHJlbGF0aW9uIHdpdGhpbiB0aGUKKyAqIHJhbmdlIG9mIFdBTCBy ZWNvcmRzIGNvdmVyZWQgYnkgdGhpcyBibG9jayByZWZlcmVuY2UgdGFibGUuCisgKi8KK3ZvaWQK K0Jsb2NrUmVmVGFibGVFbnRyeVNldExpbWl0QmxvY2soQmxvY2tSZWZUYWJsZUVudHJ5ICplbnRy eSwKKwkJCQkJCQkJQmxvY2tOdW1iZXIgbGltaXRfYmxvY2spCit7CisJdW5zaWduZWQJY2h1bmtu bzsKKwl1bnNpZ25lZAlsaW1pdF9jaHVua25vOworCXVuc2lnbmVkCWxpbWl0X2NodW5rb2Zmc2V0 OworCUJsb2NrUmVmVGFibGVDaHVuayBsaW1pdF9jaHVuazsKKworCS8qIElmIHdlIGFscmVhZHkg aGF2ZSBhbiBlcXVhbCBvciBsb3dlciBsaW1pdCBibG9jaywgZG8gbm90aGluZy4gKi8KKwlpZiAo bGltaXRfYmxvY2sgPj0gZW50cnktPmxpbWl0X2Jsb2NrKQorCQlyZXR1cm47CisKKwkvKiBSZWNv cmQgdGhlIG5ldyBsaW1pdCBibG9jayB2YWx1ZS4gKi8KKwllbnRyeS0+bGltaXRfYmxvY2sgPSBs aW1pdF9ibG9jazsKKworCS8qCisJICogRmlndXJlIG91dCB3aGljaCBjaHVuayB3b3VsZCBzdG9y ZSB0aGUgc3RhdGUgb2YgdGhlIG5ldyBsaW1pdCBibG9jaywKKwkgKiBhbmQgd2hpY2ggb2Zmc2V0 IHdpdGhpbiB0aGF0IGNodW5rLgorCSAqLworCWxpbWl0X2NodW5rbm8gPSBsaW1pdF9ibG9jayAv IEJMT0NLU19QRVJfQ0hVTks7CisJbGltaXRfY2h1bmtvZmZzZXQgPSBsaW1pdF9ibG9jayAlIEJM T0NLU19QRVJfQ0hVTks7CisKKwkvKgorCSAqIElmIHRoZSBudW1iZXIgb2YgY2h1bmtzIGlzIG5v dCBsYXJnZSBlbm91Z2ggZm9yIGFueSBibG9ja3Mgd2l0aCBlcXVhbAorCSAqIG9yIGhpZ2hlciBi bG9jayBudW1iZXJzIHRvIGV4aXN0LCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgZnVydGhlciB0byBk by4KKwkgKi8KKwlpZiAobGltaXRfY2h1bmtubyA+PSBlbnRyeS0+bmNodW5rcykKKwkJcmV0dXJu OworCisJLyogRGlzY2FyZCBlbnRpcmUgY29udGVudHMgb2YgYW55IGhpZ2hlci1udW1iZXJlZCBj aHVua3MuICovCisJZm9yIChjaHVua25vID0gbGltaXRfY2h1bmtubyArIDE7IGNodW5rbm8gPCBl bnRyeS0+bmNodW5rczsgKytjaHVua25vKQorCQllbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtub10g PSAwOworCisJLyoKKwkgKiBOZXh0LCB3ZSBuZWVkIHRvIGRpc2NhcmQgYW55IG9mZnNldHMgd2l0 aGluIHRoZSBjaHVuayB0aGF0IHdvdWxkCisJICogY29udGFpbiB0aGUgbGltaXRfYmxvY2suIFdl IG11c3QgaGFuZGxlIHRoaXMgZGlmZmVyZW5seSBkZXBlbmRpbmcgb24KKwkgKiB3aGV0aGVyIHRo ZSBjaHVuayB0aGF0IHdvdWxkIGNvbnRhaW4gbGltaXRfYmxvY2sgaXMgYSBiaXRtYXAgb3IgYW4K KwkgKiBhcnJheSBvZiBvZmZzZXRzLgorCSAqLworCWxpbWl0X2NodW5rID0gZW50cnktPmNodW5r X2RhdGFbbGltaXRfY2h1bmtub107CisJaWYgKGVudHJ5LT5jaHVua191c2FnZVtsaW1pdF9jaHVu a25vXSA9PSBNQVhfRU5UUklFU19QRVJfQ0hVTkspCisJeworCQl1bnNpZ25lZAljaHVua29mZnNl dDsKKworCQkvKiBJdCdzIGEgYml0bWFwLiBVbnNldCBiaXRzLiAqLworCQlmb3IgKGNodW5rb2Zm c2V0ID0gbGltaXRfY2h1bmtvZmZzZXQ7IGNodW5rb2Zmc2V0IDwgQkxPQ0tTX1BFUl9DSFVOSzsK KwkJCSArK2NodW5rb2Zmc2V0KQorCQkJbGltaXRfY2h1bmtbY2h1bmtvZmZzZXQgLyBCTE9DS1Nf UEVSX0VOVFJZXSAmPQorCQkJCX4oMSA8PCAoY2h1bmtvZmZzZXQgJSBCTE9DS1NfUEVSX0VOVFJZ KSk7CisJfQorCWVsc2UKKwl7CisJCXVuc2lnbmVkCWksCisJCQkJCWogPSAwOworCisJCS8qIEl0 J3MgYW4gb2Zmc2V0IGFycmF5LiBGaWx0ZXIgb3V0IGxhcmdlIG9mZnNldHMuICovCisJCWZvciAo aSA9IDA7IGkgPCBlbnRyeS0+Y2h1bmtfdXNhZ2VbbGltaXRfY2h1bmtub107ICsraSkKKwkJewor CQkJQXNzZXJ0KGogPD0gaSk7CisJCQlpZiAobGltaXRfY2h1bmtbaV0gPCBsaW1pdF9jaHVua29m ZnNldCkKKwkJCQlsaW1pdF9jaHVua1tqKytdID0gbGltaXRfY2h1bmtbaV07CisJCX0KKwkJQXNz ZXJ0KGogPD0gZW50cnktPmNodW5rX3VzYWdlW2xpbWl0X2NodW5rbm9dKTsKKwkJZW50cnktPmNo dW5rX3VzYWdlW2xpbWl0X2NodW5rbm9dID0gajsKKwl9Cit9CisKKy8qCisgKiBNYXJrIGEgYmxv Y2sgaW4gYSBnaXZlbiBCbGtSZWZUYWJsZUVudHJ5IGFzIGtub3duIHRvIGhhdmUgYmVlbiBtb2Rp ZmllZC4KKyAqLwordm9pZAorQmxvY2tSZWZUYWJsZUVudHJ5TWFya0Jsb2NrTW9kaWZpZWQoQmxv Y2tSZWZUYWJsZUVudHJ5ICplbnRyeSwKKwkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSwKKwkJ CQkJCQkJCUJsb2NrTnVtYmVyIGJsa251bSkKK3sKKwl1bnNpZ25lZAljaHVua25vOworCXVuc2ln bmVkCWNodW5rb2Zmc2V0OworCXVuc2lnbmVkCWk7CisKKwkvKgorCSAqIFdoaWNoIGNodW5rIHNo b3VsZCBzdG9yZSB0aGUgc3RhdGUgb2YgdGhpcyBibG9jaz8gQW5kIHdoYXQgaXMgdGhlCisJICog b2Zmc2V0IG9mIHRoaXMgYmxvY2sgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoYXQgY2h1bms/ CisJICovCisJY2h1bmtubyA9IGJsa251bSAvIEJMT0NLU19QRVJfQ0hVTks7CisJY2h1bmtvZmZz ZXQgPSBibGtudW0gJSBCTE9DS1NfUEVSX0NIVU5LOworCisJLyoKKwkgKiBJZiAnbmNodW5rcycg aXNuJ3QgYmlnIGVub3VnaCBmb3IgdXMgdG8gYmUgYWJsZSB0byByZXByZXNlbnQgdGhlIHN0YXRl CisJICogb2YgdGhpcyBibG9jaywgd2UgbmVlZCB0byBlbmxhcmdlIG91ciBhcnJheXMuCisJICov CisJaWYgKGNodW5rbm8gPj0gZW50cnktPm5jaHVua3MpCisJeworCQl1bnNpZ25lZAltYXhfY2h1 bmtzOworCQl1bnNpZ25lZAlleHRyYV9jaHVua3M7CisKKwkJLyoKKwkJICogTmV3IGFycmF5IHNp emUgaXMgYSBwb3dlciBvZiAyLCBhdCBsZWFzdCAxNiwgYmlnIGVub3VnaCBzbyB0aGF0CisJCSAq IGNodW5rbm8gd2lsbCBiZSBhIHZhbGlkIGFycmF5IGluZGV4LgorCQkgKi8KKwkJbWF4X2NodW5r cyA9IE1heCgxNiwgZW50cnktPm5jaHVua3MpOworCQl3aGlsZSAobWF4X2NodW5rcyA8IGNodW5r bm8gKyAxKQorCQkJY2h1bmtubyAqPSAyOworCQlBc3NlcnQobWF4X2NodW5rcyA+IGNodW5rbm8p OworCQlleHRyYV9jaHVua3MgPSBtYXhfY2h1bmtzIC0gZW50cnktPm5jaHVua3M7CisKKwkJaWYg KGVudHJ5LT5uY2h1bmtzID09IDApCisJCXsKKwkJCWVudHJ5LT5jaHVua19zaXplID0gcGFsbG9j MChzaXplb2YodWludDE2KSAqIG1heF9jaHVua3MpOworCQkJZW50cnktPmNodW5rX3VzYWdlID0g cGFsbG9jMChzaXplb2YodWludDE2KSAqIG1heF9jaHVua3MpOworCQkJZW50cnktPmNodW5rX2Rh dGEgPQorCQkJCXBhbGxvYzAoc2l6ZW9mKEJsb2NrUmVmVGFibGVDaHVuaykgKiBtYXhfY2h1bmtz KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVudHJ5LT5jaHVua19zaXplID0gcmVwYWxsb2MoZW50 cnktPmNodW5rX3NpemUsCisJCQkJCQkJCQkJIHNpemVvZih1aW50MTYpICogbWF4X2NodW5rcyk7 CisJCQltZW1zZXQoJmVudHJ5LT5jaHVua19zaXplW2VudHJ5LT5uY2h1bmtzXSwgMCwKKwkJCQkg ICBleHRyYV9jaHVua3MgKiBzaXplb2YodWludDE2KSk7CisJCQllbnRyeS0+Y2h1bmtfdXNhZ2Ug PSByZXBhbGxvYyhlbnRyeS0+Y2h1bmtfdXNhZ2UsCisJCQkJCQkJCQkJICBzaXplb2YodWludDE2 KSAqIG1heF9jaHVua3MpOworCQkJbWVtc2V0KCZlbnRyeS0+Y2h1bmtfdXNhZ2VbZW50cnktPm5j aHVua3NdLCAwLAorCQkJCSAgIGV4dHJhX2NodW5rcyAqIHNpemVvZih1aW50MTYpKTsKKwkJCWVu dHJ5LT5jaHVua19kYXRhID0gcmVwYWxsb2MoZW50cnktPmNodW5rX2RhdGEsCisJCQkJCQkJCQkJ IHNpemVvZihCbG9ja1JlZlRhYmxlQ2h1bmspICogbWF4X2NodW5rcyk7CisJCQltZW1zZXQoJmVu dHJ5LT5jaHVua19kYXRhW2VudHJ5LT5uY2h1bmtzXSwgMCwKKwkJCQkgICBleHRyYV9jaHVua3Mg KiBzaXplb2YoQmxvY2tSZWZUYWJsZUNodW5rKSk7CisJCX0KKwkJZW50cnktPm5jaHVua3MgPSBt YXhfY2h1bmtzOworCX0KKworCS8qCisJICogSWYgdGhlIGNodW5rIHRoYXQgY292ZXJzIHRoaXMg YmxvY2sgbnVtYmVyIGRvZXNuJ3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQKKwkgKiBhcyBhbiBhcnJh eSBhbmQgYWRkIHRoZSBhcHByb3ByaWF0ZSBvZmZzZXQgdG8gaXQuIFdlIG1ha2UgaXQgcHJldHR5 CisJICogc21hbGwgaW5pdGlhbGx5LCBiZWNhdXNlIHRoZXJlIG1pZ2h0IG9ubHkgYmUgMSBvciBh IGZldyBibG9jaworCSAqIHJlZmVyZW5jZXMgaW4gdGhpcyBjaHVuayBhbmQgd2UgZG9uJ3Qgd2Fu dCB0byB1c2UgdXAgdG9vIG11Y2ggbWVtb3J5LgorCSAqLworCWlmIChlbnRyeS0+Y2h1bmtfc2l6 ZVtjaHVua25vXSA9PSAwKQorCXsKKwkJZW50cnktPmNodW5rX2RhdGFbY2h1bmtub10gPQorCQkJ cGFsbG9jKHNpemVvZih1aW50MTYpICogSU5JVElBTF9FTlRSSUVTX1BFUl9DSFVOSyk7CisJCWVu dHJ5LT5jaHVua19zaXplW2NodW5rbm9dID0gSU5JVElBTF9FTlRSSUVTX1BFUl9DSFVOSzsKKwkJ ZW50cnktPmNodW5rX2RhdGFbY2h1bmtub11bMF0gPSBjaHVua29mZnNldDsKKwkJZW50cnktPmNo dW5rX3VzYWdlW2NodW5rbm9dID0gMTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhl IG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgY2h1bmsgaXMgYWxyZWFkeSBtYXhpbXVtLCBpdCBt dXN0IGJlIGEKKwkgKiBiaXRtYXAuIEp1c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBiaXQuCisJICov CisJaWYgKGVudHJ5LT5jaHVua191c2FnZVtjaHVua25vXSA9PSBNQVhfRU5UUklFU19QRVJfQ0hV TkspCisJeworCQlCbG9ja1JlZlRhYmxlQ2h1bmsgY2h1bmsgPSBlbnRyeS0+Y2h1bmtfZGF0YVtj aHVua25vXTsKKworCQljaHVua1tjaHVua29mZnNldCAvIEJMT0NLU19QRVJfRU5UUlldIHw9CisJ CQkxIDw8IChjaHVua29mZnNldCAlIEJMT0NLU19QRVJfRU5UUlkpOworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBUaGVyZSBpcyBhbiBleGlzdGluZyBjaHVuayBhbmQgaXQncyBpbiBhcnJheSBm b3JtYXQuIExldCdzIGZpbmQgb3V0CisJICogd2hldGhlciBpdCBhbHJlYWR5IGhhcyBhbiBlbnRy eSBmb3IgdGhpcyBibG9jay4gSWYgc28sIHdlIGRvIG5vdCBuZWVkCisJICogdG8gZG8gYW55dGhp bmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5jaHVua191c2FnZVtjaHVua25vXTsg KytpKQorCXsKKwkJaWYgKGVudHJ5LT5jaHVua19kYXRhW2NodW5rbm9dW2ldID09IGNodW5rb2Zm c2V0KQorCQkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhlIG51bWJlciBvZiBlbnRyaWVz IGN1cnJlbnRseSB1c2VkIGlzIG9uZSBsZXNzIHRoYW4gdGhlIG1heGltdW0sCisJICogaXQncyB0 aW1lIHRvIGNvbnZlcnQgdG8gYml0bWFwIGZvcm1hdC4KKwkgKi8KKwlpZiAoZW50cnktPmNodW5r X3VzYWdlW2NodW5rbm9dID09IE1BWF9FTlRSSUVTX1BFUl9DSFVOSyAtIDEpCisJeworCQlCbG9j a1JlZlRhYmxlQ2h1bmsgbmV3Y2h1bms7CisJCXVuc2lnbmVkCWo7CisKKwkJLyogQWxsb2NhdGUg YSBuZXcgY2h1bmsuICovCisJCW5ld2NodW5rID0gcGFsbG9jMChNQVhfRU5UUklFU19QRVJfQ0hV TksgKiBzaXplb2YodWludDE2KSk7CisKKwkJLyogU2V0IHRoZSBiaXQgZm9yIGVhY2ggZXhpc3Rp bmcgZW50cnkuICovCisJCWZvciAoaiA9IDA7IGogPCBlbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtu b107ICsraikKKwkJeworCQkJdW5zaWduZWQJY29mZiA9IGVudHJ5LT5jaHVua19kYXRhW2NodW5r bm9dW2pdOworCisJCQluZXdjaHVua1tjb2ZmIC8gQkxPQ0tTX1BFUl9FTlRSWV0gfD0KKwkJCQkx IDw8IChjb2ZmICUgQkxPQ0tTX1BFUl9FTlRSWSk7CisJCX0KKworCQkvKiBTZXQgdGhlIGJpdCBm b3IgdGhlIG5ldyBlbnRyeS4gKi8KKwkJbmV3Y2h1bmtbY2h1bmtvZmZzZXQgLyBCTE9DS1NfUEVS X0VOVFJZXSB8PQorCQkJMSA8PCAoY2h1bmtvZmZzZXQgJSBCTE9DS1NfUEVSX0VOVFJZKTsKKwor CQkvKiBTd2FwIHRoZSBuZXcgY2h1bmsgaW50byBwbGFjZSBhbmQgdXBkYXRlIG1ldGFkYXRhLiAq LworCQlwZnJlZShlbnRyeS0+Y2h1bmtfZGF0YVtjaHVua25vXSk7CisJCWVudHJ5LT5jaHVua19k YXRhW2NodW5rbm9dID0gbmV3Y2h1bms7CisJCWVudHJ5LT5jaHVua19zaXplW2NodW5rbm9dID0g TUFYX0VOVFJJRVNfUEVSX0NIVU5LOworCQllbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtub10gPSBN QVhfRU5UUklFU19QRVJfQ0hVTks7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE9LLCB3ZSBj dXJyZW50bHkgaGF2ZSBhbiBhcnJheSwgYW5kIHdlIGRvbid0IG5lZWQgdG8gY29udmVydCB0byBh CisJICogYml0bWFwLCBidXQgd2UgZG8gbmVlZCB0byBhZGQgYSBuZXcgZWxlbWVudC4gSWYgdGhl cmUncyBub3QgZW5vdWdoCisJICogcm9vbSwgd2UnbGwgaGF2ZSB0byBleHBhbmQgdGhlIGFycmF5 LgorCSAqLworCWlmIChlbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtub10gPT0gZW50cnktPmNodW5r X3NpemVbY2h1bmtub10pCisJeworCQl1bnNpZ25lZAluZXdzaXplID0gZW50cnktPmNodW5rX3Np emVbY2h1bmtub10gKiAyOworCisJCUFzc2VydChuZXdzaXplIDw9IE1BWF9FTlRSSUVTX1BFUl9D SFVOSyk7CisJCWVudHJ5LT5jaHVua19kYXRhW2NodW5rbm9dID0gcmVwYWxsb2MoZW50cnktPmNo dW5rX2RhdGFbY2h1bmtub10sCisJCQkJCQkJCQkJCSAgbmV3c2l6ZSAqIHNpemVvZih1aW50MTYp KTsKKwkJZW50cnktPmNodW5rX3NpemVbY2h1bmtub10gPSBuZXdzaXplOworCX0KKworCS8qIE5v dyB3ZSBjYW4gYWRkIHRoZSBuZXcgZW50cnkuICovCisJZW50cnktPmNodW5rX2RhdGFbY2h1bmtu b11bZW50cnktPmNodW5rX3VzYWdlW2NodW5rbm9dXSA9CisJCWNodW5rb2Zmc2V0OworCWVudHJ5 LT5jaHVua191c2FnZVtjaHVua25vXSsrOworfQorCisvKgorICogUmVsZWFzZSBtZW1vcnkgZm9y IGEgQmxvY2tSZWZUYWJsRW50cnkgdGhhdCB3YXMgY3JlYXRlZCBieQorICogQ3JlYXRlQmxvY2tS ZWZUYWJsZUVudHJ5LgorICovCit2b2lkCitCbG9ja1JlZlRhYmxlRnJlZUVudHJ5KEJsb2NrUmVm VGFibGVFbnRyeSAqZW50cnkpCit7CisJaWYgKGVudHJ5LT5jaHVua19zaXplICE9IE5VTEwpCisJ eworCQlwZnJlZShlbnRyeS0+Y2h1bmtfc2l6ZSk7CisJCWVudHJ5LT5jaHVua19zaXplID0gTlVM TDsKKwl9CisKKwlpZiAoZW50cnktPmNodW5rX3VzYWdlICE9IE5VTEwpCisJeworCQlwZnJlZShl bnRyeS0+Y2h1bmtfdXNhZ2UpOworCQllbnRyeS0+Y2h1bmtfdXNhZ2UgPSBOVUxMOworCX0KKwor CWlmIChlbnRyeS0+Y2h1bmtfZGF0YSAhPSBOVUxMKQorCXsKKwkJcGZyZWUoZW50cnktPmNodW5r X2RhdGEpOworCQllbnRyeS0+Y2h1bmtfZGF0YSA9IE5VTEw7CisJfQorCisJcGZyZWUoZW50cnkp OworfQorCisvKgorICogQ29tcGFyYXRvciBmb3IgQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRy eSBvYmplY3RzLgorICoKKyAqIFdlIG1ha2UgdGhlIHRhYmxlc3BhY2UgT0lEIHRoZSBmaXJzdCBj b2x1bW4gb2YgdGhlIHNvcnQga2V5IHRvIG1hdGNoCisgKiB0aGUgb24tZGlzayB0cmVlIHN0cnVj dHVyZS4KKyAqLworc3RhdGljIGludAorQmxvY2tSZWZUYWJsZUNvbXBhcmF0b3IoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBCbG9ja1JlZlRhYmxlU2VyaWFsaXplZEVu dHJ5ICpzYSA9IGE7CisJY29uc3QgQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSAqc2IgPSBi OworCisJaWYgKHNhLT5ybG9jYXRvci5zcGNPaWQgPiBzYi0+cmxvY2F0b3Iuc3BjT2lkKQorCQly ZXR1cm4gMTsKKwlpZiAoc2EtPnJsb2NhdG9yLnNwY09pZCA8IHNiLT5ybG9jYXRvci5zcGNPaWQp CisJCXJldHVybiAtMTsKKworCWlmIChzYS0+cmxvY2F0b3IuZGJPaWQgPiBzYi0+cmxvY2F0b3Iu ZGJPaWQpCisJCXJldHVybiAxOworCWlmIChzYS0+cmxvY2F0b3IuZGJPaWQgPCBzYi0+cmxvY2F0 b3IuZGJPaWQpCisJCXJldHVybiAtMTsKKworCWlmIChzYS0+cmxvY2F0b3IucmVsTnVtYmVyID4g c2ItPnJsb2NhdG9yLnJlbE51bWJlcikKKwkJcmV0dXJuIDE7CisJaWYgKHNhLT5ybG9jYXRvci5y ZWxOdW1iZXIgPCBzYi0+cmxvY2F0b3IucmVsTnVtYmVyKQorCQlyZXR1cm4gLTE7CisKKwlpZiAo c2EtPmZvcmtudW0gPiBzYi0+Zm9ya251bSkKKwkJcmV0dXJuIDE7CisJaWYgKHNhLT5mb3JrbnVt IDwgc2ItPmZvcmtudW0pCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICog Rmx1c2ggYW55IGJ1ZmZlcmVkIGRhdGEgb3V0IG9mIGEgQmxvY2tSZWZUYWJsZUJ1ZmZlci4KKyAq Lworc3RhdGljIHZvaWQKK0Jsb2NrUmVmVGFibGVGbHVzaChCbG9ja1JlZlRhYmxlQnVmZmVyICpi dWZmZXIpCit7CisJYnVmZmVyLT5pb19jYWxsYmFjayhidWZmZXItPmlvX2NhbGxiYWNrX2FyZywg YnVmZmVyLT5kYXRhLCBidWZmZXItPnVzZWQpOworCWJ1ZmZlci0+dXNlZCA9IDA7Cit9CisKKy8q CisgKiBSZWFkIGRhdGEgZnJvbSBhIEJsb2NrUmVmVGFibGVCdWZmZXIsIGFuZCB1cGRhdGUgdGhl IHJ1bm5pbmcgQ1JDCisgKiBjYWxjdWxhdGlvbiBmb3IgdGhlIHJldHVybmVkIGRhdGEgKGJ1dCBu b3QgYW55IGRhdGEgdGhhdCB3ZSBtYXkgaGF2ZQorICogYnVmZmVyZWQgYnV0IG5vdCB5ZXQgYWN0 dWFsbHkgcmV0dXJuZWQpLgorICovCitzdGF0aWMgdm9pZAorQmxvY2tSZWZUYWJsZVJlYWQoQmxv Y2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyLCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCUJs b2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlciA9ICZyZWFkZXItPmJ1ZmZlcjsKKworCS8qIExvb3Ag dW50aWwgcmVhZCBpcyBmdWxseSBzYXRpc2ZpZWQuICovCisJd2hpbGUgKGxlbmd0aCA+IDApCisJ eworCQlpZiAoYnVmZmVyLT5jdXJzb3IgPCBidWZmZXItPnVzZWQpCisJCXsKKwkJCS8qCisJCQkg KiBJZiBhbnkgYnVmZmVyZWQgZGF0YSBpcyBhdmFpbGFibGUsIHVzZSB0aGF0IHRvIHNhdGlzZnkg YXMgbXVjaAorCQkJICogb2YgdGhlIHJlcXVlc3QgYXMgcG9zc2libGUuCisJCQkgKi8KKwkJCWlu dAkJCWJ5dGVzX3RvX2NvcHkgPSBNaW4obGVuZ3RoLCBidWZmZXItPnVzZWQgLSBidWZmZXItPmN1 cnNvcik7CisKKwkJCW1lbWNweShkYXRhLCAmYnVmZmVyLT5kYXRhW2J1ZmZlci0+Y3Vyc29yXSwg Ynl0ZXNfdG9fY29weSk7CisJCQlDT01QX0NSQzMyQyhidWZmZXItPmNyYywgJmJ1ZmZlci0+ZGF0 YVtidWZmZXItPmN1cnNvcl0sCisJCQkJCQlieXRlc190b19jb3B5KTsKKwkJCWJ1ZmZlci0+Y3Vy c29yICs9IGJ5dGVzX3RvX2NvcHk7CisJCQlkYXRhID0gKChjaGFyICopIGRhdGEpICsgYnl0ZXNf dG9fY29weTsKKwkJCWxlbmd0aCAtPSBieXRlc190b19jb3B5OworCQl9CisJCWVsc2UgaWYgKGxl bmd0aCA+PSBCVUZTSVpFKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlIHJlcXVlc3QgbGVuZ3Ro IGlzIGxvbmcsIHJlYWQgZGlyZWN0bHkgaW50byBjYWxsZXIncworCQkJICogYnVmZmVyLgorCQkJ ICovCisJCQlpbnQJCQlieXRlc19yZWFkOworCisJCQlieXRlc19yZWFkID0gYnVmZmVyLT5pb19j YWxsYmFjayhidWZmZXItPmlvX2NhbGxiYWNrX2FyZywKKwkJCQkJCQkJCQkJIGRhdGEsIGxlbmd0 aCk7CisJCQlDT01QX0NSQzMyQyhidWZmZXItPmNyYywgZGF0YSwgYnl0ZXNfcmVhZCk7CisJCQlk YXRhID0gKChjaGFyICopIGRhdGEpICsgYnl0ZXNfcmVhZDsKKwkJCWxlbmd0aCAtPSBieXRlc19y ZWFkOworCisJCQkvKiBJZiB3ZSBkaWRuJ3QgZ2V0IGFueXRoaW5nLCB0aGF0J3MgYmFkLiAqLwor CQkJaWYgKGJ5dGVzX3JlYWQgPT0gMCkKKwkJCQlyZWFkZXItPmVycm9yX2NhbGxiYWNrKHJlYWRl ci0+ZXJyb3JfY2FsbGJhY2tfYXJnLAorCQkJCQkJCQkJICAgImZpbGUgXCIlc1wiIGVuZHMgdW5l eHBlY3RlZGx5IiwKKwkJCQkJCQkJCSAgIHJlYWRlci0+ZXJyb3JfZmlsZW5hbWUpOworCQl9CisJ CWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFJlZmlsbCBvdXIgYnVmZmVyLgorCQkJICovCisJCQli dWZmZXItPnVzZWQgPSBidWZmZXItPmlvX2NhbGxiYWNrKGJ1ZmZlci0+aW9fY2FsbGJhY2tfYXJn LAorCQkJCQkJCQkJCQkgICBidWZmZXItPmRhdGEsIEJVRlNJWkUpOworCQkJYnVmZmVyLT5jdXJz b3IgPSAwOworCisJCQkvKiBJZiB3ZSBkaWRuJ3QgZ2V0IGFueXRoaW5nLCB0aGF0J3MgYmFkLiAq LworCQkJaWYgKGJ1ZmZlci0+dXNlZCA9PSAwKQorCQkJCXJlYWRlci0+ZXJyb3JfY2FsbGJhY2so cmVhZGVyLT5lcnJvcl9jYWxsYmFja19hcmcsCisJCQkJCQkJCQkgICAiZmlsZSBcIiVzXCIgZW5k cyB1bmV4cGVjdGVkbHkiLAorCQkJCQkJCQkJICAgcmVhZGVyLT5lcnJvcl9maWxlbmFtZSk7CisJ CX0KKwl9Cit9CisKKy8qCisgKiBTdXBwbHkgZGF0YSB0byBhIEJsb2NrUmVmVGFibGVCdWZmZXIg Zm9yIHdyaXRlIHRvIHRoZSB1bmRlcmx5aW5nIEZpbGUsCisgKiBhbmQgdXBkYXRlIHRoZSBydW5u aW5nIENSQyBjYWxjdWxhdGlvbiBmb3IgdGhhdCBkYXRhLgorICovCitzdGF0aWMgdm9pZAorQmxv Y2tSZWZUYWJsZVdyaXRlKEJsb2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlciwgdm9pZCAqZGF0YSwg aW50IGxlbmd0aCkKK3sKKwkvKiBVcGRhdGUgcnVubmluZyBDUkMgY2FsY3VsYXRpb24uICovCisJ Q09NUF9DUkMzMkMoYnVmZmVyLT5jcmMsIGRhdGEsIGxlbmd0aCk7CisKKwkvKiBJZiB0aGUgbmV3 IGRhdGEgY2FuJ3QgZml0IGludG8gdGhlIGJ1ZmZlciwgZmx1c2ggdGhlIGJ1ZmZlci4gKi8KKwlp ZiAoYnVmZmVyLT51c2VkICsgbGVuZ3RoID4gQlVGU0laRSkKKwl7CisJCWJ1ZmZlci0+aW9fY2Fs bGJhY2soYnVmZmVyLT5pb19jYWxsYmFja19hcmcsIGJ1ZmZlci0+ZGF0YSwKKwkJCQkJCQlidWZm ZXItPnVzZWQpOworCQlidWZmZXItPnVzZWQgPSAwOworCX0KKworCS8qIElmIHRoZSBuZXcgZGF0 YSB3b3VsZCBmaWxsIHRoZSBidWZmZXIsIG9yIG1vcmUsIHdyaXRlIGl0IGRpcmVjdGx5LiAqLwor CWlmIChsZW5ndGggPj0gQlVGU0laRSkKKwl7CisJCWJ1ZmZlci0+aW9fY2FsbGJhY2soYnVmZmVy LT5pb19jYWxsYmFja19hcmcsIGRhdGEsIGxlbmd0aCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBP dGhlcndpc2UsIGNvcHkgdGhlIG5ldyBkYXRhIGludG8gdGhlIGJ1ZmZlci4gKi8KKwltZW1jcHko JmJ1ZmZlci0+ZGF0YVtidWZmZXItPnVzZWRdLCBkYXRhLCBsZW5ndGgpOworCWJ1ZmZlci0+dXNl ZCArPSBsZW5ndGg7CisJQXNzZXJ0KGJ1ZmZlci0+dXNlZCA8PSBCVUZTSVpFKTsKK30KKworLyoK KyAqIEdlbmVyYXRlIHRoZSBzZW50aW5lbCBhbmQgQ1JDIHJlcXVpcmVkIGF0IHRoZSBlbmQgb2Yg YSBibG9jayByZWZlcmVuY2UKKyAqIHRhYmxlIGZpbGUgYW5kIGZsdXNoIHRoZW0gb3V0IG9mIG91 ciBpbnRlcm5hbCBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkCitCbG9ja1JlZlRhYmxlRmlsZVRl cm1pbmF0ZShCbG9ja1JlZlRhYmxlQnVmZmVyICpidWZmZXIpCit7CisJQmxvY2tSZWZUYWJsZVNl cmlhbGl6ZWRFbnRyeSB6ZW50cnkgPSB7ezB9fTsKKwlwZ19jcmMzMmMJY3JjOworCisJLyogV3Jp dGUgYSBzZW50aW5lbCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4g Ki8KKwlCbG9ja1JlZlRhYmxlV3JpdGUoYnVmZmVyLCAmemVudHJ5LAorCQkJCQkgICBzaXplb2Yo QmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkpOworCisJLyoKKwkgKiBXcml0aW5nIHRoZSBj aGVja3N1bSB3aWxsIHBlcnR1cmIgdGhlIG9uZ29pbmcgY2hlY2tzdW0gY2FsY3VsYXRpb24sIHNv CisJICogY29weSB0aGUgc3RhdGUgZmlyc3QgYW5kIGZpbmFsaXplIHRoZSBjb21wdXRhdGlvbiB1 c2luZyB0aGUgY29weS4KKwkgKi8KKwljcmMgPSBidWZmZXItPmNyYzsKKwlGSU5fQ1JDMzJDKGNy Yyk7CisJQmxvY2tSZWZUYWJsZVdyaXRlKGJ1ZmZlciwgJmNyYywgc2l6ZW9mKHBnX2NyYzMyYykp OworCisJLyogRmx1c2ggYW55IGxlZnRvdmVyIGRhdGEgb3V0IG9mIG91ciBidWZmZXIuICovCisJ QmxvY2tSZWZUYWJsZUZsdXNoKGJ1ZmZlcik7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL21l c29uLmJ1aWxkIGIvc3JjL2NvbW1vbi9tZXNvbi5idWlsZAppbmRleCBkNTJkZDEyYmM5Li43YWQ0 MjcwYTNhIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy9jb21t b24vbWVzb24uYnVpbGQKQEAgLTQsNiArNCw3IEBAIGNvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAg ICdhcmNoaXZlLmMnLAogICAnYmFzZTY0LmMnLAogICAnYmluYXJ5aGVhcC5jJywKKyAgJ2Jsa3Jl ZnRhYmxlLmMnLAogICAnY2hlY2tzdW1faGVscGVyLmMnLAogICAnY29tcHJlc3Npb24uYycsCiAg ICdjb250cm9sZGF0YV91dGlscy5jJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94 bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IGExNDEyNmQxNjQuLmRhNzE1 ODAzNjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2cuaApAQCAtMjA5LDYgKzIwOSw3IEBAIGV4dGVybiBpbnQJWExvZ0Zp bGVPcGVuKFhMb2dTZWdObyBzZWdubywgVGltZUxpbmVJRCB0bGkpOwogCiBleHRlcm4gdm9pZCBD aGVja1hMb2dSZW1vdmVkKFhMb2dTZWdObyBzZWdubywgVGltZUxpbmVJRCB0bGkpOwogZXh0ZXJu IFhMb2dTZWdObyBYTG9nR2V0TGFzdFJlbW92ZWRTZWdubyh2b2lkKTsKK2V4dGVybiBYTG9nU2Vn Tm8gWExvZ0dldE9sZGVzdFNlZ25vKFRpbWVMaW5lSUQgdGxpKTsKIGV4dGVybiB2b2lkIFhMb2dT ZXRBc3luY1hhY3RMU04oWExvZ1JlY1B0ciBhc3luY1hhY3RMU04pOwogZXh0ZXJuIHZvaWQgWExv Z1NldFJlcGxpY2F0aW9uU2xvdE1pbmltdW1MU04oWExvZ1JlY1B0ciBsc24pOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9iYWNrdXAvd2Fsc3VtbWFyeS5oIGIvc3JjL2luY2x1ZGUvYmFja3Vw L3dhbHN1bW1hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44ZTNk YzdiODM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYmFja3VwL3dhbHN1bW1hcnku aApAQCAtMCwwICsxLDQ5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWxzdW1tYXJ5 LmgKKyAqCSAgV0FMIHN1bW1hcnkgbWFuYWdlbWVudAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMjAxMC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIHNyYy9pbmNsdWRlL2JhY2t1cC93YWxzdW1tYXJ5LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2lmbmRlZiBXQUxTVU1NQVJZX0gKKyNkZWZpbmUgV0FMU1VNTUFSWV9ICisKKyNp bmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRl ICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorCit0eXBlZGVmIHN0 cnVjdCBXYWxTdW1tYXJ5SU8KK3sKKwlGaWxlCQlmaWxlOworCW9mZl90CQlmaWxlcG9zOworfSBX YWxTdW1tYXJ5SU87CisKK3R5cGVkZWYgc3RydWN0IFdhbFN1bW1hcnlGaWxlCit7CisJWExvZ1Jl Y1B0cglzdGFydF9sc247CisJWExvZ1JlY1B0cgllbmRfbHNuOworCVRpbWVMaW5lSUQJdGxpOwor fSBXYWxTdW1tYXJ5RmlsZTsKKworZXh0ZXJuIExpc3QgKkdldFdhbFN1bW1hcmllcyhUaW1lTGlu ZUlEIHRsaSwgWExvZ1JlY1B0ciBzdGFydF9sc24sCisJCQkJCQkJIFhMb2dSZWNQdHIgZW5kX2xz bik7CitleHRlcm4gTGlzdCAqRmlsdGVyV2FsU3VtbWFyaWVzKExpc3QgKndzbGlzdCwgVGltZUxp bmVJRCB0bGksCisJCQkJCQkJCVhMb2dSZWNQdHIgc3RhcnRfbHNuLCBYTG9nUmVjUHRyIGVuZF9s c24pOworZXh0ZXJuIGJvb2wgV2FsU3VtbWFyaWVzQXJlQ29tcGxldGUoTGlzdCAqd3NsaXN0LAor CQkJCQkJCQkJWExvZ1JlY1B0ciBzdGFydF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKKwkJCQkJ CQkJCVhMb2dSZWNQdHIgKm1pc3NpbmdfbHNuKTsKK2V4dGVybiBGaWxlIE9wZW5XYWxTdW1tYXJ5 RmlsZShXYWxTdW1tYXJ5RmlsZSAqd3MsIGJvb2wgbWlzc2luZ19vayk7CitleHRlcm4gdm9pZCBS ZW1vdmVXYWxTdW1tYXJ5SWZPbGRlclRoYW4oV2FsU3VtbWFyeUZpbGUgKndzLAorCQkJCQkJCQkJ CXRpbWVfdCBjdXRvZmZfdGltZSk7CisKK2V4dGVybiBpbnQJUmVhZFdhbFN1bW1hcnkodm9pZCAq d2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpOworZXh0ZXJuIGludAlXcml0 ZVdhbFN1bW1hcnkodm9pZCAqd2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGludCBsZW5ndGgp OworZXh0ZXJuIHZvaWQgUmVwb3J0V2FsU3VtbWFyeUVycm9yKHZvaWQgKmNhbGxiYWNrX2FyZywg Y2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKKworI2VuZGlmCQkJCQkJ CS8qIFdBTFNVTU1BUllfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNzdlOGIxMzc2 NC4uOTE2YzhlYzhkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjA5OSw0ICsxMjA5 OSwyMyBAQAogICBwcm9uYW1lID0+ICdhbnlfdmFsdWVfdHJhbnNmbicsIHByb3JldHR5cGUgPT4g J2FueWVsZW1lbnQnLAogICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCBhbnllbGVtZW50Jywg cHJvc3JjID0+ICdhbnlfdmFsdWVfdHJhbnNmbicgfSwKIAoreyBvaWQgPT4gJzg0MzYnLAorICBk ZXNjciA9PiAnbGlzdCBvZiBhdmFpbGFibGUgV0FMIHN1bW1hcnkgZmlsZXMnLAorICBwcm9uYW1l ID0+ICdwZ19hdmFpbGFibGVfd2FsX3N1bW1hcmllcycsIHByb3Jvd3MgPT4gJzEwMCcsCisgIHBy b3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3MnLAor ICBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnJywKKyAgcHJvYWxsYXJn dHlwZXMgPT4gJ3tpbnQ4LHBnX2xzbixwZ19sc259JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8s b30nLAorICBwcm9hcmduYW1lcyA9PiAne3RsaSxzdGFydF9sc24sZW5kX2xzbn0nLAorICBwcm9z cmMgPT4gJ3BnX2F2YWlsYWJsZV93YWxfc3VtbWFyaWVzJyB9LAoreyBvaWQgPT4gJzg0MzcnLAor ICBkZXNjciA9PiAnY29udGVudHMgb2YgYSBXQUwgc3VtYW1yeSBmaWxlJywKKyAgcHJvbmFtZSA9 PiAncGdfd2FsX3N1bW1hcnlfY29udGVudHMnLCBwcm9yb3dzID0+ICcxMDAnLAorICBwcm9yZXRz ZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdzJywKKyAgcHJv cmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ2ludDggcGdfbHNuIHBnX2xzbics CisgIHByb2FsbGFyZ3R5cGVzID0+ICd7aW50OCxwZ19sc24scGdfbHNuLG9pZCxvaWQsb2lkLGlu dDIsaW50OCxib29sfScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxpLGksbyxvLG8sbyxvLG99JywK KyAgcHJvYXJnbmFtZXMgPT4gJ3t0bGksc3RhcnRfbHNuLGVuZF9sc24scmVsZmlsZW5vZGUscmVs dGFibGVzcGFjZSxyZWxkYXRhYmFzZSxyZWxmb3JrbnVtYmVyLHJlbGJsb2NrbnVtYmVyLGlzX2xp bWl0X2Jsb2NrfScsCisgIHByb3NyYyA9PiAncGdfd2FsX3N1bW1hcnlfY29udGVudHMnIH0sCisK IF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9ibGtyZWZ0YWJsZS5oIGIvc3JjL2lu Y2x1ZGUvY29tbW9uL2Jsa3JlZnRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNTE0MWYzYWNkNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1v bi9ibGtyZWZ0YWJsZS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBibGtyZWZ0YWJsZS5oCisgKgkgIEJsb2NrIHJlZmVyZW5jZSB0YWJsZXMuCisgKgorICog QSBibG9jayByZWZlcmVuY2UgdGFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGJs b2NrcyBoYXZlCisgKiBiZWVuIG1vZGlmaWVkIGJ5IFdBTCByZWNvcmRzIHdpdGhpbiBhIGNlcnRh aW4gTFNOIHJhbmdlLgorICoKKyAqIEZvciBlYWNoIHJlbGF0aW9uIGZvcmssIHRoZXJlIGlzIGEg ImxpbWl0IGJsb2NrIG51bWJlciIuIEFsbCBleGlzdGluZworICogYmxvY2tzIGdyZWF0ZXIgdGhh biBvciBlcXVhbCB0byB0aGUgbGltaXQgYmxvY2sgbnVtYmVyIG11c3QgYmUKKyAqIGNvbnNpZGVy ZWQgbW9kaWZpZWQ7IGZvciB0aG9zZSBsZXNzIHRoYW4gdGhlIGxpbWl0IGJsb2NrIG51bWJlciwK KyAqIHdlIG1haW50YWluIGEgYml0bWFwLiBXaGVuIGEgcmVsYXRpb24gZm9yayBpcyBjcmVhdGVk IG9yIGRyb3BwZWQsCisgKiB0aGUgbGltaXQgYmxvY2sgbnVtYmVyIHNob3VsZCBiZSBzZXQgdG8g MC4gV2hlbiBpdCdzIHRydW5jYXRlZCwKKyAqIHRoZSBsaW1pdCBibG9jayBudW1iZXIgc2hvdWxk IGJlIHNldCB0byB0aGUgbGVuZ3RoIGluIGJsb2NrcyB0bworICogd2hpY2ggaXQgd2FzIHRydW5j YXRlZC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAyMiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tb24vYmxr cmVmdGFibGUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEJMS1JFRlRB QkxFX0gKKyNkZWZpbmUgQkxLUkVGVEFCTEVfSAorCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5o IgorI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKKworLyogTWFnaWMgbnVtYmVy IGZvciBzZXJpYWxpemF0aW9uIGZpbGUgZm9ybWF0LiAqLworI2RlZmluZSBCTE9DS1JFRlRBQkxF X01BR0lDCQkJMHg2NTJiMTM3YgorCit0eXBlZGVmIHN0cnVjdCBCbG9ja1JlZlRhYmxlIEJsb2Nr UmVmVGFibGU7Cit0eXBlZGVmIHN0cnVjdCBCbG9ja1JlZlRhYmxlRW50cnkgQmxvY2tSZWZUYWJs ZUVudHJ5OwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tSZWZUYWJsZVJlYWRlciBCbG9ja1JlZlRhYmxl UmVhZGVyOwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tSZWZUYWJsZVdyaXRlciBCbG9ja1JlZlRhYmxl V3JpdGVyOworCisvKgorICogVGhlIHJldHVybiB2YWx1ZSBvZiBpb19jYWxsYmFja19mbiBzaG91 bGQgYmUgdGhlIG51bWJlciBvZiBieXRlcyByZWFkCisgKiBvciB3cml0dGVuLiBJZiBhbiBlcnJv ciBvY2N1cnMsIHRoZSBmdW5jdGlvbnMgc2hvdWxkIHJlcG9ydCBpdCBhbmQKKyAqIG5vdCByZXR1 cm4uIFdoZW4gdXNlZCBhcyBhIHdyaXRlIGNhbGxiYWNrLCBzaG9ydCB3cml0ZXMgc2hvdWxkIGJl IHJldHJpZWQKKyAqIG9yIHRyZWF0ZWQgYXMgZXJyb3JzLCBzbyB0aGF0IGlmIHRoZSBjYWxsYmFj ayByZXR1cm5zLCB0aGUgcmV0dXJuIHZhbHVlCisgKiBpcyBhbHdheXMgdGhlIHJlcXVlc3QgbGVu Z3RoLgorICoKKyAqIHJlcG9ydF9lcnJvcl9mbiBzaG91bGQgbm90IHJldHVybi4KKyAqLwordHlw ZWRlZiBpbnQgKCppb19jYWxsYmFja19mbikgKHZvaWQgKmNhbGxiYWNrX2FyZywgdm9pZCAqZGF0 YSwgaW50IGxlbmd0aCk7Cit0eXBlZGVmIHZvaWQgKCpyZXBvcnRfZXJyb3JfZm4pICh2b2lkICpj YWxibGFja19hcmcsIGNoYXIgKm1zZywuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CisK KworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGFuIGVudGlyZSBpbi1tZW1vcnkg YmxvY2sgcmVmZXJlbmNlIHRhYmxlLgorICovCitleHRlcm4gQmxvY2tSZWZUYWJsZSAqQ3JlYXRl RW1wdHlCbG9ja1JlZlRhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgQmxvY2tSZWZUYWJsZVNldExp bWl0QmxvY2soQmxvY2tSZWZUYWJsZSAqYnJ0YWIsCisJCQkJCQkJCQkgICBjb25zdCBSZWxGaWxl TG9jYXRvciAqcmxvY2F0b3IsCisJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJ CQkJCQkgICBCbG9ja051bWJlciBsaW1pdF9ibG9jayk7CitleHRlcm4gdm9pZCBCbG9ja1JlZlRh YmxlTWFya0Jsb2NrTW9kaWZpZWQoQmxvY2tSZWZUYWJsZSAqYnJ0YWIsCisJCQkJCQkJCQkJICAg Y29uc3QgUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yLAorCQkJCQkJCQkJCSAgIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCQkgICBCbG9ja051bWJlciBibGtudW0pOworZXh0ZXJuIHZvaWQg V3JpdGVCbG9ja1JlZlRhYmxlKEJsb2NrUmVmVGFibGUgKmJydGFiLAorCQkJCQkJCSAgIGlvX2Nh bGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCQkJCSAgIHZvaWQgKndyaXRlX2NhbGxiYWNr X2FyZyk7CisKK2V4dGVybiBCbG9ja1JlZlRhYmxlRW50cnkgKkJsb2NrUmVmVGFibGVHZXRFbnRy eShCbG9ja1JlZlRhYmxlICpicnRhYiwKKwkJCQkJCQkJCQkJCSBjb25zdCBSZWxGaWxlTG9jYXRv ciAqcmxvY2F0b3IsCisJCQkJCQkJCQkJCQkgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQkJ CQkJIEJsb2NrTnVtYmVyICpsaW1pdF9ibG9jayk7CitleHRlcm4gaW50CUJsb2NrUmVmVGFibGVF bnRyeUdldEJsb2NrcyhCbG9ja1JlZlRhYmxlRW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCUJsb2Nr TnVtYmVyIHN0YXJ0X2Jsa25vLAorCQkJCQkJCQkJCUJsb2NrTnVtYmVyIHN0b3BfYmxrbm8sCisJ CQkJCQkJCQkJQmxvY2tOdW1iZXIgKmJsb2NrcywKKwkJCQkJCQkJCQlpbnQgbmJsb2Nrcyk7CisK Ky8qCisgKiBGdW5jdGlvbnMgZm9yIHJlYWRpbmcgYSBibG9jayByZWZlcmVuY2UgdGFibGUgaW5j cmVtZW50YWxseSBmcm9tIGRpc2suCisgKi8KK2V4dGVybiBCbG9ja1JlZlRhYmxlUmVhZGVyICpD cmVhdGVCbG9ja1JlZlRhYmxlUmVhZGVyKGlvX2NhbGxiYWNrX2ZuIHJlYWRfY2FsbGJhY2ssCisJ CQkJCQkJCQkJCQkJICB2b2lkICpyZWFkX2NhbGxiYWNrX2FyZywKKwkJCQkJCQkJCQkJCQkgIGNo YXIgKmVycm9yX2ZpbGVuYW1lLAorCQkJCQkJCQkJCQkJCSAgcmVwb3J0X2Vycm9yX2ZuIGVycm9y X2NhbGxiYWNrLAorCQkJCQkJCQkJCQkJCSAgdm9pZCAqZXJyb3JfY2FsbGJhY2tfYXJnKTsKK2V4 dGVybiBib29sIEJsb2NrUmVmVGFibGVSZWFkZXJOZXh0UmVsYXRpb24oQmxvY2tSZWZUYWJsZVJl YWRlciAqcmVhZGVyLAorCQkJCQkJCQkJCQlSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IsCisJCQkJ CQkJCQkJCUZvcmtOdW1iZXIgKmZvcmtudW0sCisJCQkJCQkJCQkJCUJsb2NrTnVtYmVyICpsaW1p dF9ibG9jayk7CitleHRlcm4gdW5zaWduZWQgQmxvY2tSZWZUYWJsZVJlYWRlckdldEJsb2NrcyhC bG9ja1JlZlRhYmxlUmVhZGVyICpyZWFkZXIsCisJCQkJCQkJCQkJCSBCbG9ja051bWJlciAqYmxv Y2tzLAorCQkJCQkJCQkJCQkgaW50IG5ibG9ja3MpOworZXh0ZXJuIHZvaWQgRGVzdHJveUJsb2Nr UmVmVGFibGVSZWFkZXIoQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyKTsKKworLyoKKyAqIEZ1 bmN0aW9ucyBmb3Igd3JpdGluZyBhIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBpbmNyZW1lbnRhbGx5 IHRvIGRpc2suCisgKgorICogTm90ZSB0aGF0IGVudHJpZXMgbXVzdCBiZSB3cml0dGVuIGluIHRo ZSBwcm9wZXIgb3JkZXIsIHRoYXQgaXMsIHNvcnRlZCBieQorICogZGF0YWJhc2UsIHRoZW4gdGFi bGVzcGFjZSwgdGhlbiByZWxmaWxlbnVtYmVyLCB0aGVuIGZvcmsgbnVtYmVyLiBDYWxsZXIKKyAq IGlzIHJlc3BvbnNpYmxlIGZvciBzdXBwbHlpbmcgZGF0YSBpbiB0aGUgY29ycmVjdCBvcmRlci4g SWYgdGhhdCBzZWVtcyBoYXJkLAorICogdXNlIGFuIGluLW1lbW9yeSBCbG9ja1JlZlRhYmxlIGlu c3RlYWQuCisgKi8KK2V4dGVybiBCbG9ja1JlZlRhYmxlV3JpdGVyICpDcmVhdGVCbG9ja1JlZlRh YmxlV3JpdGVyKGlvX2NhbGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCQkJCQkJCQkJCSAg dm9pZCAqd3JpdGVfY2FsbGJhY2tfYXJnKTsKK2V4dGVybiB2b2lkIEJsb2NrUmVmVGFibGVXcml0 ZUVudHJ5KEJsb2NrUmVmVGFibGVXcml0ZXIgKndyaXRlciwKKwkJCQkJCQkJCUJsb2NrUmVmVGFi bGVFbnRyeSAqZW50cnkpOworZXh0ZXJuIHZvaWQgRGVzdHJveUJsb2NrUmVmVGFibGVXcml0ZXIo QmxvY2tSZWZUYWJsZVdyaXRlciAqd3JpdGVyKTsKKworZXh0ZXJuIEJsb2NrUmVmVGFibGVFbnRy eSAqQ3JlYXRlQmxvY2tSZWZUYWJsZUVudHJ5KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJ CQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9pZCBCbG9ja1JlZlRhYmxl RW50cnlTZXRMaW1pdEJsb2NrKEJsb2NrUmVmVGFibGVFbnRyeSAqZW50cnksCisJCQkJCQkJCQkJ CUJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrKTsKK2V4dGVybiB2b2lkIEJsb2NrUmVmVGFibGVFbnRy eU1hcmtCbG9ja01vZGlmaWVkKEJsb2NrUmVmVGFibGVFbnRyeSAqZW50cnksCisJCQkJCQkJCQkJ CQlGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCQkJCQlCbG9ja051bWJlciBibGtudW0pOwor ZXh0ZXJuIHZvaWQgQmxvY2tSZWZUYWJsZUZyZWVFbnRyeShCbG9ja1JlZlRhYmxlRW50cnkgKmVu dHJ5KTsKKworI2VuZGlmCQkJCQkJCS8qIEJMS1JFRlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMTA0 M2E0ZDc4Mi4uNzRiYzJmOTdjYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK KysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTMzNiw2ICszMzYsNyBAQCB0eXBlZGVm IGVudW0gQmFja2VuZFR5cGUKIAlCX1NUQVJUVVAsCiAJQl9XQUxfUkVDRUlWRVIsCiAJQl9XQUxf U0VOREVSLAorCUJfV0FMX1NVTU1BUklaRVIsCiAJQl9XQUxfV1JJVEVSLAogfSBCYWNrZW5kVHlw ZTsKIApAQCAtNDQyLDYgKzQ0Myw3IEBAIHR5cGVkZWYgZW51bQogCUNoZWNrcG9pbnRlclByb2Nl c3MsCiAJV2FsV3JpdGVyUHJvY2VzcywKIAlXYWxSZWNlaXZlclByb2Nlc3MsCisJV2FsU3VtbWFy aXplclByb2Nlc3MsCiAKIAlOVU1fQVVYUFJPQ1RZUEVTCQkJLyogTXVzdCBiZSBsYXN0ISAqLwog fSBBdXhQcm9jVHlwZTsKQEAgLTQ1NCw2ICs0NTYsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgQXV4 UHJvY1R5cGUgTXlBdXhQcm9jVHlwZTsKICNkZWZpbmUgQW1DaGVja3BvaW50ZXJQcm9jZXNzKCkJ CShNeUF1eFByb2NUeXBlID09IENoZWNrcG9pbnRlclByb2Nlc3MpCiAjZGVmaW5lIEFtV2FsV3Jp dGVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxXcml0ZXJQcm9jZXNzKQogI2RlZmlu ZSBBbVdhbFJlY2VpdmVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxSZWNlaXZlclBy b2Nlc3MpCisjZGVmaW5lIEFtV2FsU3VtbWFyaXplclByb2Nlc3MoKQkoTXlBdXhQcm9jVHlwZSA9 PSBXYWxTdW1tYXJpemVyUHJvY2VzcykKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIGIvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMTgwZDNmMzRiOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Bv c3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHdhbHN1bW1hcml6ZXIuaAorICoKKyAqIEhlYWRlciBmaWxlIGZvciBiYWNr Z3JvdW5kIFdBTCBzdW1tYXJpemF0aW9uIHByb2Nlc3MuCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxzdW1t YXJpemVyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXQUxTVU1NQVJJ WkVSX0gKKyNkZWZpbmUgV0FMU1VNTUFSSVpFUl9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2Rl ZnMuaCIKKworZXh0ZXJuIGJvb2wgc3VtbWFyaXplX3dhbDsKK2V4dGVybiBpbnQJd2FsX3N1bW1h cnlfa2VlcF90aW1lOworCitleHRlcm4gU2l6ZSBXYWxTdW1tYXJpemVyU2htZW1TaXplKHZvaWQp OworZXh0ZXJuIHZvaWQgV2FsU3VtbWFyaXplclNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lk IFdhbFN1bW1hcml6ZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworCitleHRl cm4gWExvZ1JlY1B0ciBHZXRPbGRlc3RVbnN1bW1hcml6ZWRMU04oVGltZUxpbmVJRCAqdGxpLAor CQkJCQkJCQkJCSAgIGJvb2wgKmxzbl9pc19leGFjdCwKKwkJCQkJCQkJCQkgICBib29sIHJlc2V0 X3BlbmRpbmdfbHNuKTsKK2V4dGVybiB2b2lkIFNldFdhbFN1bW1hcml6ZXJMYXRjaCh2b2lkKTsK K2V4dGVybiBYTG9nUmVjUHRyIFdhaXRGb3JXYWxTdW1tYXJpemF0aW9uKFhMb2dSZWNQdHIgbHNu LCBsb25nIHRpbWVvdXQsCisJCQkJCQkJCQkJICBYTG9nUmVjUHRyICpwZW5kaW5nX2xzbik7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCA0YjI1OTYxMjQ5Li5lODdmZDI1ZDY0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaApAQCAtNDE3LDExICs0MTcsMTIgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAq UHJlcGFyZWRYYWN0UHJvY3M7CiAgKiBXZSBzZXQgYXNpZGUgc29tZSBleHRyYSBQR1BST0Mgc3Ry dWN0dXJlcyBmb3IgYXV4aWxpYXJ5IHByb2Nlc3NlcywKICAqIGllIHRoaW5ncyB0aGF0IGFyZW4n dCBmdWxsLWZsZWRnZWQgYmFja2VuZHMgYnV0IG5lZWQgc2htZW0gYWNjZXNzLgogICoKLSAqIEJh Y2tncm91bmQgd3JpdGVyLCBjaGVja3BvaW50ZXIsIFdBTCB3cml0ZXIgYW5kIGFyY2hpdmVyIHJ1 biBkdXJpbmcgbm9ybWFsCi0gKiBvcGVyYXRpb24uICBTdGFydHVwIHByb2Nlc3MgYW5kIFdBTCBy ZWNlaXZlciBhbHNvIGNvbnN1bWUgMiBzbG90cywgYnV0IFdBTAotICogd3JpdGVyIGlzIGxhdW5j aGVkIG9ubHkgYWZ0ZXIgc3RhcnR1cCBoYXMgZXhpdGVkLCBzbyB3ZSBvbmx5IG5lZWQgNSBzbG90 cy4KKyAqIEJhY2tncm91bmQgd3JpdGVyLCBjaGVja3BvaW50ZXIsIFdBTCB3cml0ZXIsIFdBTCBz dW1tYXJpemVyLCBhbmQgYXJjaGl2ZXIKKyAqIHJ1biBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4g IFN0YXJ0dXAgcHJvY2VzcyBhbmQgV0FMIHJlY2VpdmVyIGFsc28gY29uc3VtZQorICogMiBzbG90 cywgYnV0IFdBTCB3cml0ZXIgaXMgbGF1bmNoZWQgb25seSBhZnRlciBzdGFydHVwIGhhcyBleGl0 ZWQsIHNvIHdlCisgKiBvbmx5IG5lZWQgNiBzbG90cy4KICAqLwotI2RlZmluZSBOVU1fQVVYSUxJ QVJZX1BST0NTCQk1CisjZGVmaW5lIE5VTV9BVVhJTElBUllfUFJPQ1MJCTYKIAogLyogY29uZmln dXJhYmxlIG9wdGlvbnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgRGVhZGxvY2tUaW1lb3V0 OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX3RhYmxlcy5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvZ3VjX3RhYmxlcy5oCmluZGV4IDBjMzgyNTU5NjEuLmVhYThjNDZkZGEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y190YWJsZXMuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9ndWNfdGFibGVzLmgKQEAgLTcyLDYgKzcyLDcgQEAgZW51bSBjb25maWdfZ3JvdXAKIAlX QUxfUkVDT1ZFUlksCiAJV0FMX0FSQ0hJVkVfUkVDT1ZFUlksCiAJV0FMX1JFQ09WRVJZX1RBUkdF VCwKKwlXQUxfU1VNTUFSSVpBVElPTiwKIAlSRVBMSUNBVElPTl9TRU5ESU5HLAogCVJFUExJQ0FU SU9OX1BSSU1BUlksCiAJUkVQTElDQVRJT05fU1RBTkRCWSwKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggYmE0MTE0OWI4OC4uOTM5MDA0OTMxNCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTQwMTIsMyArNDAxMiwxNCBAQCB5eXNjYW5fdAogel9zdHJlYW0KIHpfc3RyZWFtcAog emljX3QKK0Jsb2NrUmVmVGFibGUKK0Jsb2NrUmVmVGFibGVCdWZmZXIKK0Jsb2NrUmVmVGFibGVF bnRyeQorQmxvY2tSZWZUYWJsZUtleQorQmxvY2tSZWZUYWJsZVJlYWRlcgorQmxvY2tSZWZUYWJs ZVNlcmlhbGl6ZWRFbnRyeQorQmxvY2tSZWZUYWJsZVdyaXRlcgorU3VtbWFyaXplclJlYWRMb2Nh bFhMb2dQcml2YXRlCitXYWxTdW1tYXJpemVyRGF0YQorV2FsU3VtbWFyeUZpbGUKK1dhbFN1bW1h cnlJTwotLSAKMi4zOS4zIChBcHBsZSBHaXQtMTQ1KQoK --000000000000f974db060ccd558e Content-Type: application/octet-stream; name="v15-0002-Move-src-bin-pg_verifybackup-parse_manifest.c-in.patch" Content-Disposition: attachment; filename="v15-0002-Move-src-bin-pg_verifybackup-parse_manifest.c-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqba3wza1 RnJvbSA0ZDA0ZTM3NTZiZWE4YjI0MjJmMTYxZTQ0NTZkZWZlMzM4YTJkMGFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMyBPY3QgMjAyMyAxMzozMjo0NSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDIv Nl0gTW92ZSBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wYXJzZV9tYW5pZmVzdC5jIGludG8KIHNy Yy9jb21tb24uCgpUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciB0aGUgY29kZSB0byBiZSBlYXNp bHkgcmV1c2VkIGJ5IG90aGVyCmNsaWVudC1zaWRlIHRvb2xzLCBhbmQvb3IgYnkgdGhlIHNlcnZl ci4KLS0tCiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAxIC0KIHNyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL21lc29uLmJ1aWxkICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDEgLQogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvbmxz Lm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCiBzcmMvYmluL3BnX3Zl cmlmeWJhY2t1cC9wZ192ZXJpZnliYWNrdXAuYyAgICAgICAgICAgICAgICAgICAgfCAyICstCiBz cmMvY29tbW9uL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAxICsKIHNyYy9jb21tb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDEgKwogc3JjL3tiaW4vcGdfdmVyaWZ5YmFja3VwID0+IGNvbW1vbn0v cGFyc2VfbWFuaWZlc3QuYyAgICAgICAgIHwgNCArKy0tCiBzcmMve2Jpbi9wZ192ZXJpZnliYWNr dXAgPT4gaW5jbHVkZS9jb21tb259L3BhcnNlX21hbmlmZXN0LmggfCAyICstCiA4IGZpbGVzIGNo YW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKIHJlbmFtZSBzcmMve2Jpbi9w Z192ZXJpZnliYWNrdXAgPT4gY29tbW9ufS9wYXJzZV9tYW5pZmVzdC5jICg5OSUpCiByZW5hbWUg c3JjL3tiaW4vcGdfdmVyaWZ5YmFja3VwID0+IGluY2x1ZGUvY29tbW9ufS9wYXJzZV9tYW5pZmVz dC5oICg5NyUpCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvTWFrZWZpbGUg Yi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9NYWtlZmlsZQppbmRleCBjOTYzMjNmYWE5Li43YzA0 NWYxNDJlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9NYWtlZmlsZQorKysg Yi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9NYWtlZmlsZQpAQCAtMjEsNyArMjEsNiBAQCBMREZM QUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGls cyAkKGxpYnBxX3BncG9ydCkKIAogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCi0JcGFyc2VfbWFu aWZlc3QubyBcCiAJcGdfdmVyaWZ5YmFja3VwLm8KIAogYWxsOiBwZ192ZXJpZnliYWNrdXAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvbWVzb24uYnVpbGQKaW5kZXggOTM2OWRhMWJjNi4uNThmNzgwZDFhNiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvbWVzb24uYnVpbGQKKysrIGIvc3Jj L2Jpbi9wZ192ZXJpZnliYWNrdXAvbWVzb24uYnVpbGQKQEAgLTEsNyArMSw2IEBACiAjIENvcHly aWdodCAoYykgMjAyMi0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAog CiBwZ192ZXJpZnliYWNrdXBfc291cmNlcyA9IGZpbGVzKAotICAncGFyc2VfbWFuaWZlc3QuYycs CiAgICdwZ192ZXJpZnliYWNrdXAuYycKICkKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJp ZnliYWNrdXAvbmxzLm1rIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvbmxzLm1rCmluZGV4IGVi YTczYTJjMDUuLjllNmE2MDQ5YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3Vw L25scy5taworKysgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9ubHMubWsKQEAgLTEsMTAgKzEs MTAgQEAKICMgc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvbmxzLm1rCiBDQVRBTE9HX05BTUUgICAg ID0gcGdfdmVyaWZ5YmFja3VwCiBHRVRURVhUX0ZJTEVTICAgID0gJChGUk9OVEVORF9DT01NT05f R0VUVEVYVF9GSUxFUykgXAotICAgICAgICAgICAgICAgICAgIHBhcnNlX21hbmlmZXN0LmMgXAog ICAgICAgICAgICAgICAgICAgIHBnX3ZlcmlmeWJhY2t1cC5jIFwKICAgICAgICAgICAgICAgICAg ICAuLi8uLi9jb21tb24vZmVfbWVtdXRpbHMuYyBcCi0gICAgICAgICAgICAgICAgICAgLi4vLi4v Y29tbW9uL2pzb25hcGkuYworICAgICAgICAgICAgICAgICAgIC4uLy4uL2NvbW1vbi9qc29uYXBp LmMgXAorICAgICAgICAgICAgICAgICAgIC4uLy4uL2NvbW1vbi9wYXJzZV9tYW5pZmVzdC5jCiBH RVRURVhUX1RSSUdHRVJTID0gJChGUk9OVEVORF9DT01NT05fR0VUVEVYVF9UUklHR0VSUykgXAog ICAgICAgICAgICAgICAgICAgIGpzb25fbWFuaWZlc3RfcGFyc2VfZmFpbHVyZToyIFwKICAgICAg ICAgICAgICAgICAgICBlcnJvcl9jYjoyIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5 YmFja3VwL3BnX3ZlcmlmeWJhY2t1cC5jIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVy aWZ5YmFja3VwLmMKaW5kZXggZDkyMWQwZjAwMy4uODgwODFmNjZmNyAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMKKysrIGIvc3JjL2Jpbi9wZ192 ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMKQEAgLTIwLDkgKzIwLDkgQEAKIAogI2luY2x1 ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1 ZGUgImNvbW1vbi9wYXJzZV9tYW5pZmVzdC5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9s aXN0LmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKLSNpbmNsdWRlICJwYXJzZV9tYW5pZmVz dC5oIgogI2luY2x1ZGUgInBndGltZS5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9N YWtlZmlsZSBiL3NyYy9jb21tb24vTWFrZWZpbGUKaW5kZXggY2U0NTM1ZDdmZS4uMTA5MmRjNjNk ZiAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmlsZQorKysgYi9zcmMvY29tbW9uL01ha2Vm aWxlCkBAIC02Niw2ICs2Niw3IEBAIE9CSlNfQ09NTU9OID0gXAogCWt3bG9va3VwLm8gXAogCWxp bmstY2FuYXJ5Lm8gXAogCW1kNV9jb21tb24ubyBcCisJcGFyc2VfbWFuaWZlc3QubyBcCiAJcGVy Y2VudHJlcGwubyBcCiAJcGdfZ2V0X2xpbmUubyBcCiAJcGdfbHpjb21wcmVzcy5vIFwKZGlmZiAt LWdpdCBhL3NyYy9jb21tb24vbWVzb24uYnVpbGQgYi9zcmMvY29tbW9uL21lc29uLmJ1aWxkCmlu ZGV4IDhiZTE0NWMwZmIuLmQ1MmRkMTJiYzkgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vbWVzb24u YnVpbGQKKysrIGIvc3JjL2NvbW1vbi9tZXNvbi5idWlsZApAQCAtMTgsNiArMTgsNyBAQCBjb21t b25fc291cmNlcyA9IGZpbGVzKAogICAna3dsb29rdXAuYycsCiAgICdsaW5rLWNhbmFyeS5jJywK ICAgJ21kNV9jb21tb24uYycsCisgICdwYXJzZV9tYW5pZmVzdC5jJywKICAgJ3BlcmNlbnRyZXBs LmMnLAogICAncGdfZ2V0X2xpbmUuYycsCiAgICdwZ19semNvbXByZXNzLmMnLApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2VfbWFuaWZlc3QuYyBiL3NyYy9jb21tb24v cGFyc2VfbWFuaWZlc3QuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvYmlu L3BnX3ZlcmlmeWJhY2t1cC9wYXJzZV9tYW5pZmVzdC5jCnJlbmFtZSB0byBzcmMvY29tbW9uL3Bh cnNlX21hbmlmZXN0LmMKaW5kZXggODUwYWRmOTBhOC4uOWY1MmJmYTgzYiAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2VfbWFuaWZlc3QuYworKysgYi9zcmMvY29tbW9u L3BhcnNlX21hbmlmZXN0LmMKQEAgLTYsMTUgKzYsMTUgQEAKICAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKICAqCi0gKiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wYXJzZV9tYW5pZmVz dC5jCisgKiBzcmMvY29tbW9uL3BhcnNlX21hbmlmZXN0LmMKICAqCiAgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqLwogCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAotI2luY2x1ZGUgInBhcnNlX21h bmlmZXN0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIKKyNpbmNsdWRlICJjb21tb24v cGFyc2VfbWFuaWZlc3QuaCIKIAogLyoKICAqIFNlbWFudGljIHN0YXRlcyBmb3IgSlNPTiBtYW5p ZmVzdCBwYXJzaW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2Vf bWFuaWZlc3QuaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi9wYXJzZV9tYW5pZmVzdC5oCnNpbWlsYXJp dHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHNyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BhcnNlX21h bmlmZXN0LmgKcmVuYW1lIHRvIHNyYy9pbmNsdWRlL2NvbW1vbi9wYXJzZV9tYW5pZmVzdC5oCmlu ZGV4IDAwMWI5YTZhMTEuLjgxMWM5MTQ5ZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdmVyaWZ5 YmFja3VwL3BhcnNlX21hbmlmZXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3BhcnNlX21h bmlmZXN0LmgKQEAgLTYsNyArNiw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CiAgKgotICogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGFyc2VfbWFuaWZlc3QuaAorICogc3Jj L2luY2x1ZGUvY29tbW9uL3BhcnNlX21hbmlmZXN0LmgKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqLwotLSAKMi4zOS4zIChBcHBsZSBHaXQtMTQ1KQoK --000000000000f974db060ccd558e Content-Type: application/octet-stream; name="v15-0004-Add-support-for-incremental-backup.patch" Content-Disposition: attachment; filename="v15-0004-Add-support-for-incremental-backup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqba3wzc3 RnJvbSA3YjFjNGM4YWYzMTgyZTE1ZTZjNGYzMWRiM2JkNjRiYTM4NjJkNjlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMTQgSnVuIDIwMjMgMTE6MzE6MjkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNSA0 LzZdIEFkZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBiYWNrdXAuCk1JTUUtVmVyc2lvbjogMS4w CkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiA4Yml0CgpUbyB0YWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgeW91IHVzZSB0 aGUgbmV3IHJlcGxpY2F0aW9uIGNvbW1hbmQKVVBMT0FEX01BTklGRVNUIHRvIHVwbG9hZCB0aGUg bWFuaWZlc3QgZm9yIHRoZSBwcmlvciBiYWNrdXAuIFRoaXMKcHJpb3IgYmFja3VwIGNvdWxkIGVp dGhlciBiZSBhIGZ1bGwgYmFja3VwIG9yIGFub3RoZXIgaW5jcmVtZW50YWwKYmFja3VwLiAgWW91 IHRoZW4gdXNlIEJBU0VfQkFDS1VQIHdpdGggdGhlIElOQ1JFTUVOVEFMIG9wdGlvbiB0byB0YWtl CnRoZSBiYWNrdXAuICBwZ19iYXNlYmFja3VwIG5vdyBoYXMgYW4gLS1pbmNyZW1lbnRhbD1QQVRI X1RPX01BTklGRVNUCm9wdGlvbiB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuCgpBbiBpbmNyZW1l bnRhbCBiYWNrdXAgaXMgbGlrZSBhIHJlZ3VsYXIgZnVsbCBiYWNrdXAgZXhjZXB0IHRoYXQKc29t ZSByZWxhdGlvbiBmaWxlcyBhcmUgcmVwbGFjZWQgd2l0aCBmaWxlcyB3aXRoIG5hbWVzIGxpa2UK SU5DUkVNRU5UQUwuJHtPUklHSU5BTF9OQU1FfSwgYW5kIHRoZSBiYWNrdXBfbGFiZWwgZmlsZSBj b250YWlucwphZGRpdGlvbmFsIGxpbmVzIGlkZW50aWZ5aW5nIGl0IGFzIGFuIGluY3JlbWVudGFs IGJhY2t1cC4gVGhlIG5ldwpwZ19jb21iaW5lYmFja3VwIHRvb2wgY2FuIGJlIHVzZWQgdG8gcmVj b25zdHJ1Y3QgYSBkYXRhIGRpcmVjdG9yeQpmcm9tIGEgZnVsbCBiYWNrdXAgYW5kIGEgc2VyaWVz IG9mIGluY3JlbWVudGFsIGJhY2t1cHMuCgpYWFguIEl0IHdvdWxkIGJlIG5pY2UgKGJ1dCBub3Qg ZXNzZW50aWFsKSB0byBkbyBzb21ldGhpbmcgYWJvdXQKaW5jcmVtZW50YWwgSlNPTiBwYXJzaW5n LgoKUGF0Y2ggYnkgbWUuIFRoYW5rcyB0byBEaWxpcCBLdW1hciwgQW5kcmVzIEZyZXVuZCwgYW5k IMOBbHZhcm8gSGVycmVyYQpmb3IgZGVzaWduIGRpc2N1c3Npb24gYW5kIHJldmlld3MsIGFuZCB0 byBKYWt1YiBXYXJ0YWsgZm9yIGluY3JlZGlibHkKaGVscGZ1bCBhbmQgZXh0ZW5zaXZlIHRlc3Rp bmcuCi0tLQogZG9jL3NyYy9zZ21sL2JhY2t1cC5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwg ICA4OSArLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMiAtCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCAgICAgICAgICAgICAgICAgICAgfCAg IDI0ICsKIGRvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCAgICAgICAgICAgICAgICB8ICAg IDEgKwogZG9jL3NyYy9zZ21sL3JlZi9wZ19iYXNlYmFja3VwLnNnbWwgICAgICAgICAgIHwgICAz NyArLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19jb21iaW5lYmFja3VwLnNnbWwgICAgICAgIHwgIDI0 MCArKysKIGRvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCAgICAgICAgICAgICAgICAgICB8ICAg IDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2JhY2t1cC5jICAgICAgIHwgICAx MCArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgICA2 ICsKIHNyYy9iYWNrZW5kL2JhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgIDEg Kwogc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyAgICAgICAgICAgICAgIHwgIDMxOSAr KystCiBzcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5jICAgfCAxMDAz ICsrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZCAgICAgICAgICAg ICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9ncmFtLnkgICAgICAg ICAgIHwgICAxNCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwgICAg ICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAg ICAgfCAgMTYyICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAg ICAgIHwgICAgMyArCiBzcmMvYmluL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIHNyYy9iaW4vbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Jic3RyZWFtZXJfZmlsZS5jICAgICAg IHwgICAgMSArCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jICAgICAgICAg fCAgMTEyICstCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbCAg fCAgICA0ICstCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvLmdpdGlnbm9yZSAgICAgICAgICAg fCAgICAxICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICB8 ICAgNTIgKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2JhY2t1cF9sYWJlbC5jICAgICAgIHwg IDI4MyArKysrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmggICAgICAg fCAgIDMwICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9jb3B5X2ZpbGUuYyAgICAgICAgICB8 ICAxNjkgKysrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmggICAgICAgICAg fCAgIDE5ICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9sb2FkX21hbmlmZXN0LmMgICAgICB8 ICAyNDUgKysrKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFuaWZlc3QuaCAgICAg IHwgICA2NyArCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbWVzb24uYnVpbGQgICAgICAgICAg fCAgIDM4ICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9ubHMubWsgICAgICAgICAgICAgICB8 ICAgMTEgKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3BnX2NvbWJpbmViYWNrdXAuYyAgIHwg MTI4NCArKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3JlY29uc3Ry dWN0LmMgICAgICAgIHwgIDY4NyArKysrKysrKysKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9y ZWNvbnN0cnVjdC5oICAgICAgICB8ICAgMzMgKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3Qv MDAxX2Jhc2ljLnBsICAgICAgIHwgICAyMyArCiAuLi4vcGdfY29tYmluZWJhY2t1cC90LzAwMl9j b21wYXJlX2JhY2t1cHMucGwgfCAgMTU0ICsrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8w MDNfdGltZWxpbmUucGwgICAgfCAgIDkwICsrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8w MDRfbWFuaWZlc3QucGwgICAgfCAgIDc1ICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAw NV9pbnRlZ3JpdHkucGwgICB8ICAxMjUgKysKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC93cml0 ZV9tYW5pZmVzdC5jICAgICB8ICAyOTMgKysrKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3dy aXRlX21hbmlmZXN0LmggICAgIHwgICAzMyArCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0 d2FsLmMgICAgICAgICAgICAgfCAgIDM2ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nYmFja3Vw LmggICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXAu aCAgICAgICAgICAgICAgIHwgICAgNSArLQogc3JjL2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXBf aW5jcmVtZW50YWwuaCAgIHwgICA1NSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaCAg ICAgICAgICAgICAgICAgfCAgICA5ICsKIHNyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0Ns dXN0ZXIucG0gICAgICB8ICAgMjEgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgICB8ICAgMTIgKwogNDkgZmlsZXMgY2hhbmdlZCwgNTgzNCBpbnNlcnRpb25z KCspLCA1MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvcmVm L3BnX2NvbWJpbmViYWNrdXAuc2dtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2Jh Y2t1cC9iYXNlYmFja3VwX2luY3JlbWVudGFsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmlu L3BnX2NvbWJpbmViYWNrdXAvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfY29tYmluZWJhY2t1cC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf Y29tYmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfY29tYmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9jb3B5X2ZpbGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9jb3B5X2ZpbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9sb2FkX21hbmlmZXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbG9hZF9tYW5pZmVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL25scy5tawogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iaW4vcGdfY29tYmluZWJhY2t1cC9wZ19jb21iaW5lYmFja3VwLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcmVjb25zdHJ1Y3QuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9yZWNvbnN0cnVjdC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDAyX2NvbXBhcmVfYmFja3Vw cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwM190 aW1lbGluZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90 LzAwNF9tYW5pZmVzdC5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJh Y2t1cC90LzAwNV9pbnRlZ3JpdHkucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2Nv bWJpbmViYWNrdXAvd3JpdGVfbWFuaWZlc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfY29tYmluZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaAoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9iYWNrdXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9iYWNrdXAuc2dtbAppbmRleCA4 Y2IyNGQ2YWU1Li5iMzQ2OGVlYTNjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvYmFja3VwLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2JhY2t1cC5zZ21sCkBAIC04NTcsMTIgKzg1Nyw3OSBAQCB0 ZXN0ICEgLWYgL21udC9zZXJ2ZXIvYXJjaGl2ZWRpci8wMDAwMDAwMTAwMDAwMEE5MDAwMDAwNjUg JmFtcDsmYW1wOyBjcCBwZ193YWwvMAogICAgPC9wYXJhPgogICA8L3NlY3QyPgogCisgIDxzZWN0 MiBpZD0iYmFja3VwLWluY3JlbWVudGFsLWJhY2t1cCI+CisgICA8dGl0bGU+TWFraW5nIGFuIElu Y3JlbWVudGFsIEJhY2t1cDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFlvdSBjYW4gdXNlIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wZ2Jhc2ViYWNrdXAiLz4gdG8gdGFrZSBhbiBpbmNyZW1lbnRhbAor ICAgIGJhY2t1cCBieSBzcGVjaWZ5aW5nIHRoZSA8bGl0ZXJhbD4tLWluY3JlbWVudGFsPC9saXRl cmFsPiBvcHRpb24uIFlvdSBtdXN0CisgICAgc3VwcGx5LCBhcyBhbiBhcmd1bWVudCB0byA8bGl0 ZXJhbD4tLWluY3JlbWVudGFsPC9saXRlcmFsPiwgdGhlIGJhY2t1cAorICAgIG1hbmlmZXN0IHRv IGFuIGVhcmxpZXIgYmFja3VwIGZyb20gdGhlIHNhbWUgc2VydmVyLiBJbiB0aGUgcmVzdWx0aW5n CisgICAgYmFja3VwLCBub24tcmVsYXRpb24gZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGVp ciBlbnRpcmV0eSwgYnV0IHNvbWUKKyAgICByZWxhdGlvbiBmaWxlcyBtYXkgYmUgcmVwbGFjZWQg Ynkgc21hbGxlciBpbmNyZW1lbnRhbCBmaWxlcyB3aGljaCBjb250YWluCisgICAgb25seSB0aGUg YmxvY2tzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBlYXJsaWVyIGJhY2t1cCBh bmQgZW5vdWdoCisgICAgbWV0YWRhdGEgdG8gcmVjb25zdHJ1Y3QgdGhlIGN1cnJlbnQgdmVyc2lv biBvZiB0aGUgZmlsZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVG8gZmlndXJlIG91 dCB3aGljaCBibG9ja3MgbmVlZCB0byBiZSBiYWNrZWQgdXAsIHRoZSBzZXJ2ZXIgdXNlcyBXQUwK KyAgICBzdW1tYXJpZXMsIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGRhdGEgZGlyZWN0b3J5LCBp bnNpZGUgdGhlIGRpcmVjdG9yeQorICAgIDxsaXRlcmFsPnBnX3dhbC9zdW1tYXJpZXM8L2xpdGVy YWw+LiBJZiB0aGUgcmVxdWlyZWQgc3VtbWFyeSBmaWxlcyBhcmUgbm90CisgICAgcHJlc2VudCwg YW4gYXR0ZW1wdCB0byB0YWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cCB3aWxsIGZhaWwuIFRoZSBz dW1tYXJpZXMKKyAgICBwcmVzZW50IGluIHRoaXMgZGlyZWN0b3J5IG11c3QgY292ZXIgYWxsIExT TnMgZnJvbSB0aGUgc3RhcnQgTFNOIG9mIHRoZQorICAgIHByaW9yIGJhY2t1cCB0byB0aGUgc3Rh cnQgTFNOIG9mIHRoZSBjdXJyZW50IGJhY2t1cC4gU2luY2UgdGhlIHNlcnZlciBsb29rcworICAg IGZvciBXQUwgc3VtbWFyaWVzIGp1c3QgYWZ0ZXIgZXN0YWJsaXNoaW5nIHRoZSBzdGFydCBMU04g b2YgdGhlIGN1cnJlbnQKKyAgICBiYWNrdXAsIHRoZSBuZWNlc3Nhcnkgc3VtbWFyeSBmaWxlcyBw cm9iYWJseSB3b24ndCBiZSBpbnN0YW50bHkgcHJlc2VudAorICAgIG9uIGRpc2ssIGJ1dCB0aGUg c2VydmVyIHdpbGwgd2FpdCBmb3IgYW55IG1pc3NpbmcgZmlsZXMgdG8gc2hvdyB1cC4KKyAgICBU aGlzIGFsc28gaGVscHMgaWYgdGhlIFdBTCBzdW1tYXJpemF0aW9uIHByb2Nlc3MgaGFzIGZhbGxl biBiZWhpbmQuCisgICAgSG93ZXZlciwgaWYgdGhlIG5lY2Vzc2FyeSBmaWxlcyBoYXZlIGFscmVh ZHkgYmVlbiByZW1vdmVkLCBvciBpZiB0aGUgV0FMCisgICAgc3VtbWFyaXplciBkb2Vzbid0IGNh dGNoIHVwIHF1aWNrbHkgZW5vdWdoLCB0aGUgaW5jcmVtZW50YWwgYmFja3VwIHdpbGwKKyAgICBm YWlsLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIHJlc3RvcmluZyBhbiBpbmNy ZW1lbnRhbCBiYWNrdXAsIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGhhdmUgbm90CisgICAgb25s eSB0aGUgaW5jcmVtZW50YWwgYmFja3VwIGl0c2VsZiBidXQgYWxzbyBhbGwgZWFybGllciBiYWNr dXBzIHRoYXQKKyAgICBhcmUgcmVxdWlyZWQgdG8gc3VwcGx5IHRoZSBibG9ja3Mgb21pdHRlZCBm cm9tIHRoZSBpbmNyZW1lbnRhbCBiYWNrdXAuCisgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2NvbWJpbmViYWNrdXAiLz4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQKKyAgICB0aGlz IHJlcXVpcmVtZW50LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBOb3RlIHRoYXQgYWxs IG9mIHRoZSByZXF1aXJlbWVudHMgZm9yIG1ha2luZyB1c2Ugb2YgYSBmdWxsIGJhY2t1cCBhbHNv CisgICAgYXBwbHkgdG8gYW4gaW5jcmVtZW50YWwgYmFja3VwLiBGb3IgaW5zdGFuY2UsIHlvdSBz dGlsbCBuZWVkIGFsbCBvZiB0aGUKKyAgICBXQUwgc2VnbWVudCBmaWxlcyBnZW5lcmF0ZWQgZHVy aW5nIGFuZCBhZnRlciB0aGUgZmlsZSBzeXN0ZW0gYmFja3VwLCBhbmQKKyAgICBhbnkgcmVsZXZh bnQgV0FMIGhpc3RvcnkgZmlsZXMuIEFuZCB5b3Ugc3RpbGwgbmVlZCB0byBjcmVhdGUgYQorICAg IDxsaXRlcmFsPnJlY292ZXJ5LnNpZ25hbDwvbGl0ZXJhbD4gKG9yIDxsaXRlcmFsPnN0YW5kYnku c2lnbmFsPC9saXRlcmFsPikKKyAgICBhbmQgcGVyZm9ybSByZWNvdmVyeSwgYXMgZGVzY3JpYmVk IGluCisgICAgPHhyZWYgbGlua2VuZD0iYmFja3VwLXBpdHItcmVjb3ZlcnkiIC8+LiBUaGUgcmVx dWlyZW1lbnQgdG8gaGF2ZSBlYXJsaWVyCisgICAgYmFja3VwcyBhdmFpbGFibGUgYXQgcmVzdG9y ZSB0aW1lIGFuZCB0byB1c2UKKyAgICA8bGl0ZXJhbD5wZ19jb21iaW5lYmFja3VwPC9saXRlcmFs PiBpcyBhbiBhZGRpdGlvbmFsIHJlcXVpcmVtZW50IG9uIHRvcCBvZgorICAgIGV2ZXJ5dGhpbmcg ZWxzZS4gS2VlcCBpbiBtaW5kIHRoYXQgPGFwcGxpY2F0aW9uPlBvc3RncmVTUUw8L2FwcGxpY2F0 aW9uPgorICAgIGhhcyBubyBidWlsdC1pbiBtZWNoYW5pc20gdG8gZmlndXJlIG91dCB3aGljaCBi YWNrdXBzIGFyZSBzdGlsbCBuZWVkZWQgYXMKKyAgICBhIGJhc2lzIGZvciByZXN0b3JpbmcgbGF0 ZXIgaW5jcmVtZW50YWwgYmFja3Vwcy4gWW91IG11c3Qga2VlcCB0cmFjayBvZgorICAgIHRoZSBy ZWxhdGlvbnNoaXBzIGJldHdlZW4geW91ciBmdWxsIGFuZCBpbmNyZW1lbnRhbCBiYWNrdXBzIG9u IHlvdXIgb3duLAorICAgIGFuZCBiZSBjZXJ0YWluIG5vdCB0byByZW1vdmUgZWFybGllciBiYWNr dXBzIGlmIHRoZXkgbWlnaHQgYmUgbmVlZGVkIHdoZW4KKyAgICByZXN0b3JpbmcgbGF0ZXIgaW5j cmVtZW50YWwgYmFja3Vwcy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSW5jcmVtZW50 YWwgYmFja3VwcyB0eXBpY2FsbHkgb25seSBtYWtlIHNlbnNlIGZvciByZWxhdGl2ZWx5IGxhcmdl CisgICAgZGF0YWJhc2VzIHdoZXJlIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgZGF0YSBk b2VzIG5vdCBjaGFuZ2UsIG9yIG9ubHkKKyAgICBjaGFuZ2VzIHNsb3dseS4gRm9yIGEgc21hbGwg ZGF0YWJhc2UsIGl0J3Mgc2ltcGxlciB0byBpZ25vcmUgdGhlIGV4aXN0ZW5jZQorICAgIG9mIGlu Y3JlbWVudGFsIGJhY2t1cHMgYW5kIHNpbXBseSB0YWtlIGZ1bGwgYmFja3Vwcywgd2hpY2ggYXJl IHNpbXBsZXIKKyAgICB0byBtYW5hZ2UuIEZvciBhIGxhcmdlIGRhdGFiYXNlIGFsbCBvZiB3aGlj aCBpcyBoZWF2aWx5IG1vZGlmaWVkLAorICAgIGluY3JlbWVudGFsIGJhY2t1cHMgd29uJ3QgYmUg bXVjaCBzbWFsbGVyIHRoYW4gZnVsbCBiYWNrdXBzLgorICAgPC9wYXJhPgorICA8L3NlY3QyPgor CiAgIDxzZWN0MiBpZD0iYmFja3VwLWxvd2xldmVsLWJhc2UtYmFja3VwIj4KICAgIDx0aXRsZT5N YWtpbmcgYSBCYXNlIEJhY2t1cCBVc2luZyB0aGUgTG93IExldmVsIEFQSTwvdGl0bGU+CiAgICA8 cGFyYT4KLSAgICBUaGUgcHJvY2VkdXJlIGZvciBtYWtpbmcgYSBiYXNlIGJhY2t1cCB1c2luZyB0 aGUgbG93IGxldmVsCi0gICAgQVBJcyBjb250YWlucyBhIGZldyBtb3JlIHN0ZXBzIHRoYW4KLSAg ICB0aGUgPHhyZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPiBtZXRob2QsIGJ1dCBpcyBy ZWxhdGl2ZWx5CisgICAgSW5zdGVhZCBvZiB0YWtpbmcgYSBmdWxsIG9yIGluY3JlbWVudGFsIGJh c2UgYmFja3VwIHVzaW5nCisgICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPiwg eW91IGNhbiB0YWtlIGEgYmFzZSBiYWNrdXAgdXNpbmcgdGhlCisgICAgbG93LWxldmVsIEFQSS4g VGhpcyBwcm9jZWR1cmUgY29udGFpbnMgYSBmZXcgbW9yZSBzdGVwcyB0aGFuCisgICAgdGhlIDxh cHBsaWNhdGlvbj5wZ19iYXNlYmFja3VwPC9hcHBsaWNhdGlvbj4gbWV0aG9kLCBidXQgaXMgcmVs YXRpdmVseQogICAgIHNpbXBsZS4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGVzZSBzdGVw cyBhcmUgZXhlY3V0ZWQgaW4KICAgICBzZXF1ZW5jZSwgYW5kIHRoYXQgdGhlIHN1Y2Nlc3Mgb2Yg YSBzdGVwIGlzIHZlcmlmaWVkIGJlZm9yZQogICAgIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgc3Rl cC4KQEAgLTExMTgsNyArMTE4NSw4IEBAIFNFTEVDVCAqIEZST00gcGdfYmFja3VwX3N0b3Aod2Fp dF9mb3JfYXJjaGl2ZSA9PiB0cnVlKTsKICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAg ICAgPHBhcmE+Ci0gICAgIFJlc3RvcmUgdGhlIGRhdGFiYXNlIGZpbGVzIGZyb20geW91ciBmaWxl IHN5c3RlbSBiYWNrdXAuICBCZSBzdXJlIHRoYXQgdGhleQorICAgICBJZiB5b3UncmUgcmVzdG9y aW5nIGEgZnVsbCBiYWNrdXAsIHlvdSBjYW4gcmVzdG9yZSB0aGUgZGF0YWJhc2UgZmlsZXMKKyAg ICAgZGlyZWN0bHkgaW50byB0aGUgdGFyZ2V0IGRpcmVjdG9yaWVzLiAgQmUgc3VyZSB0aGF0IHRo ZXkKICAgICAgYXJlIHJlc3RvcmVkIHdpdGggdGhlIHJpZ2h0IG93bmVyc2hpcCAodGhlIGRhdGFi YXNlIHN5c3RlbSB1c2VyLCBub3QKICAgICAgPGxpdGVyYWw+cm9vdDwvbGl0ZXJhbD4hKSBhbmQg d2l0aCB0aGUgcmlnaHQgcGVybWlzc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nCiAgICAgIHRhYmxl c3BhY2VzLApAQCAtMTEyNiw2ICsxMTk0LDE5IEBAIFNFTEVDVCAqIEZST00gcGdfYmFja3VwX3N0 b3Aod2FpdF9mb3JfYXJjaGl2ZSA9PiB0cnVlKTsKICAgICAgd2VyZSBjb3JyZWN0bHkgcmVzdG9y ZWQuCiAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFy YT4KKyAgICAgSWYgeW91J3JlIHJlc3RvcmluZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAsIHlvdSds bCBuZWVkIHRvIHJlc3RvcmUgdGhlCisgICAgIGluY3JlbWVudGFsIGJhY2t1cCBhbmQgYWxsIGVh cmxpZXIgYmFja3VwcyB1cG9uIHdoaWNoIGl0IGRpcmVjdGx5IG9yCisgICAgIGluZGlyZWN0bHkg ZGVwZW5kcyB0byB0aGUgbWFjaGluZSB3aGVyZSB5b3UgYXJlIHBlcmZvcm1pbmcgdGhlIHJlc3Rv cmUuCisgICAgIFRoZXNlIGJhY2t1cHMgd2lsbCBuZWVkIHRvIGJlIHBsYWNlZCBpbiBzZXBhcmF0 ZSBkaXJlY3Rvcmllcywgbm90IHRoZQorICAgICB0YXJnZXQgZGlyZWN0b3JpZXMgd2hlcmUgeW91 IHdhbnQgdGhlIHJ1bm5pbmcgc2VydmVyIHRvIGVuZCB1cC4KKyAgICAgT25jZSB0aGlzIGlzIGRv bmUsIHVzZSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdjb21iaW5lYmFja3VwIi8+IHRvIHB1bGwKKyAg ICAgZGF0YSBmcm9tIHRoZSBmdWxsIGJhY2t1cCBhbmQgYWxsIG9mIHRoZSBzdWJzZXF1ZW50IGlu Y3JlbWVudGFsIGJhY2t1cHMKKyAgICAgYW5kIHdyaXRlIG91dCBhIHN5bnRoZXRpYyBmdWxsIGJh Y2t1cCB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yaWVzLiBBcyBhYm92ZSwKKyAgICAgdmVyaWZ5IHRo YXQgcGVybWlzc2lvbnMgYW5kIHRhYmxlc3BhY2UgbGlua3MgYXJlIGNvcnJlY3QuCisgICAgPC9w YXJhPgorICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KICAgICA8cGFyYT4KICAgICAgUmVt b3ZlIGFueSBmaWxlcyBwcmVzZW50IGluIDxmaWxlbmFtZT5wZ193YWwvPC9maWxlbmFtZT47IHRo ZXNlIGNhbWUgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBi L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBlZTk4NTg1MDI3Li5iNTYyNGNhODg0IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCkBAIC00MTUzLDEzICs0MTUzLDExIEBAIHJlc3RvcmVfY29tbWFuZCA9ICdjb3B5 ICJDOlxcc2VydmVyXFxhcmNoaXZlZGlyXFwlZiIgIiVwIicgICMgV2luZG93cwogICAgPHNlY3Qy IGlkPSJydW50aW1lLWNvbmZpZy13YWwtc3VtbWFyaXphdGlvbiI+CiAgICAgPHRpdGxlPldBTCBT dW1tYXJpemF0aW9uPC90aXRsZT4KIAotIDwhLS0KICAgICA8cGFyYT4KICAgICAgVGhlc2Ugc2V0 dGluZ3MgY29udHJvbCBXQUwgc3VtbWFyaXphdGlvbiwgYSBmZWF0dXJlIHdoaWNoIG11c3QgYmUK ICAgICAgZW5hYmxlZCBpbiBvcmRlciB0byBwZXJmb3JtIGFuCiAgICAgIDxsaW5rIGxpbmtlbmQ9 ImJhY2t1cC1pbmNyZW1lbnRhbC1iYWNrdXAiPmluY3JlbWVudGFsIGJhY2t1cDwvbGluaz4uCiAg ICAgPC9wYXJhPgotIC0tPgogCiAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLXN1bW1hcml6ZS13YWwiIHhyZWZsYWJlbD0ic3VtbWFyaXplX3dhbCI+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dtbC9wcm90b2Nv bC5zZ21sCmluZGV4IGFmM2YwMTZmNzQuLjlhNjY5MTgxNzEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC0y NTk5LDYgKzI1OTksMTkgQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFi YXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgIDx2YXJsaXN0ZW50cnkgaWQ9InByb3RvY29sLXJlcGxpY2F0aW9uLXVw bG9hZC1tYW5pZmVzdCI+CisgICAgIDx0ZXJtPgorICAgICAgPGxpdGVyYWw+VVBMT0FEX01BTklG RVNUPC9saXRlcmFsPgorICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5VUExPQURfTUFOSUZFU1Q8 L3ByaW1hcnk+PC9pbmRleHRlcm0+CisgICAgIDwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAg ICAgPHBhcmE+CisgICAgICAgVXBsb2FkcyBhIGJhY2t1cCBtYW5pZmVzdCBpbiBwcmVwYXJhdGlv biBmb3IgdGFraW5nIGFuIGluY3JlbWVudGFsCisgICAgICAgYmFja3VwLgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgPHZhcmxpc3Rl bnRyeSBpZD0icHJvdG9jb2wtcmVwbGljYXRpb24tYmFzZS1iYWNrdXAiIHhyZWZsYWJlbD0iQkFT RV9CQUNLVVAiPgogICAgICA8dGVybT48bGl0ZXJhbD5CQVNFX0JBQ0tVUDwvbGl0ZXJhbD4gWyAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAu Li5dICkgXQogICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5CQVNFX0JBQ0tVUDwvcHJpbWFyeT48 L2luZGV4dGVybT4KQEAgLTI4MzgsNiArMjg1MSwxNyBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMg cmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgICAgIDwv cGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5JTkNSRU1FTlRB TDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgIFJlcXVlc3RzIGFuIGluY3JlbWVudGFsIGJhY2t1cC4gVGhlCisgICAgICAg ICAgIDxsaXRlcmFsPlVQTE9BRF9NQU5JRkVTVDwvbGl0ZXJhbD4gY29tbWFuZCBtdXN0IGJlIGV4 ZWN1dGVkCisgICAgICAgICAgIGJlZm9yZSBydW5uaW5nIGEgYmFzZSBiYWNrdXAgd2l0aCB0aGlz IG9wdGlvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgIDwvcGFyYT4K IApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9hbGxmaWxlcy5zZ21sCmluZGV4IDU0YjVmMjJkNmUuLmZkYTQ2OTBlYWIgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2FsbGZpbGVzLnNnbWwKQEAgLTIwMiw2ICsyMDIsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVz YWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIHBnQmFz ZWJhY2t1cCAgICAgICBTWVNURU0gInBnX2Jhc2ViYWNrdXAuc2dtbCI+CiA8IUVOVElUWSBwZ2Jl bmNoICAgICAgICAgICAgU1lTVEVNICJwZ2JlbmNoLnNnbWwiPgogPCFFTlRJVFkgcGdDaGVja3N1 bXMgICAgICAgIFNZU1RFTSAicGdfY2hlY2tzdW1zLnNnbWwiPgorPCFFTlRJVFkgcGdDb21iaW5l YmFja3VwICAgIFNZU1RFTSAicGdfY29tYmluZWJhY2t1cC5zZ21sIj4KIDwhRU5USVRZIHBnQ29u ZmlnICAgICAgICAgICBTWVNURU0gInBnX2NvbmZpZy1yZWYuc2dtbCI+CiA8IUVOVElUWSBwZ0Nv bnRyb2xkYXRhICAgICAgU1lTVEVNICJwZ19jb250cm9sZGF0YS5zZ21sIj4KIDwhRU5USVRZIHBn Q3RsICAgICAgICAgICAgICBTWVNURU0gInBnX2N0bC1yZWYuc2dtbCI+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL3BnX2Jhc2ViYWNrdXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdf YmFzZWJhY2t1cC5zZ21sCmluZGV4IDBiODdmZDJkNGQuLjdjMTgzYTVjZmQgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfYmFzZWJhY2t1cC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfYmFzZWJhY2t1cC5zZ21sCkBAIC0zOCwxMSArMzgsMjUgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIDxhcHBsaWNhdGlvbj5wZ19iYXNl YmFja3VwPC9hcHBsaWNhdGlvbj4gbWFrZXMgYW4gZXhhY3QgY29weSBvZiB0aGUgZGF0YWJhc2UK LSAgIGNsdXN0ZXIncyBmaWxlcywgd2hpbGUgbWFraW5nIHN1cmUgdGhlIHNlcnZlciBpcyBwdXQg aW50byBhbmQKLSAgIG91dCBvZiBiYWNrdXAgbW9kZSBhdXRvbWF0aWNhbGx5LiBCYWNrdXBzIGFy ZSBhbHdheXMgdGFrZW4gb2YgdGhlIGVudGlyZQotICAgZGF0YWJhc2UgY2x1c3RlcjsgaXQgaXMg bm90IHBvc3NpYmxlIHRvIGJhY2sgdXAgaW5kaXZpZHVhbCBkYXRhYmFzZXMgb3IKLSAgIGRhdGFi YXNlIG9iamVjdHMuIEZvciBzZWxlY3RpdmUgYmFja3VwcywgYW5vdGhlciB0b29sIHN1Y2ggYXMK KyAgIDxhcHBsaWNhdGlvbj5wZ19iYXNlYmFja3VwPC9hcHBsaWNhdGlvbj4gY2FuIHRha2UgYSBm dWxsIG9yIGluY3JlbWVudGFsCisgICBiYXNlIGJhY2t1cCBvZiB0aGUgZGF0YWJhc2UuIFdoZW4g dXNlZCB0byB0YWtlIGEgZnVsbCBiYWNrdXAsIGl0IG1ha2VzIGFuCisgICBleGFjdCBjb3B5IG9m IHRoZSBkYXRhYmFzZSBjbHVzdGVyJ3MgZmlsZXMuIFdoZW4gdXNlZCB0byB0YWtlIGFuIGluY3Jl bWVudGFsCisgICBiYWNrdXAsIHNvbWUgZmlsZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcGFydCBv ZiBhIGZ1bGwgYmFja3VwIG1heSBiZQorICAgcmVwbGFjZWQgd2l0aCBpbmNyZW1lbnRhbCB2ZXJz aW9ucyBvZiB0aGUgc2FtZSBmaWxlcywgY29udGFpbmluZyBvbmx5IHRob3NlCisgICBibG9ja3Mg dGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHJlZmVyZW5jZSBiYWNrdXAuIEFuIGlu Y3JlbWVudGFsCisgICBiYWNrdXAgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHk7IGluc3RlYWQsCisg ICA8eHJlZiBsaW5rZW5kPSJhcHAtcGdjb21iaW5lYmFja3VwIi8+IG11c3QgZmlyc3QKKyAgIGJl IHVzZWQgdG8gY29tYmluZSBpdCB3aXRoIHRoZSBwcmV2aW91cyBiYWNrdXBzIHVwb24gd2hpY2gg aXQgZGVwZW5kcy4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJiYWNrdXAtaW5jcmVtZW50YWwtYmFj a3VwIiAvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgYWJvdXQgaW5jcmVtZW50YWwgYmFja3Vw cywgYW5kIDx4cmVmIGxpbmtlbmQ9ImJhY2t1cC1waXRyLXJlY292ZXJ5IiAvPgorICAgZm9yIHN0 ZXBzIHRvIHJlY292ZXIgZnJvbSBhIGJhY2t1cC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg SW4gYW55IG1vZGUsIDxhcHBsaWNhdGlvbj5wZ19iYXNlYmFja3VwPC9hcHBsaWNhdGlvbj4gbWFr ZXMgc3VyZSB0aGUgc2VydmVyCisgICBpcyBwdXQgaW50byBhbmQgb3V0IG9mIGJhY2t1cCBtb2Rl IGF1dG9tYXRpY2FsbHkuIEJhY2t1cHMgYXJlIGFsd2F5cyB0YWtlbiBvZgorICAgdGhlIGVudGly ZSBkYXRhYmFzZSBjbHVzdGVyOyBpdCBpcyBub3QgcG9zc2libGUgdG8gYmFjayB1cCBpbmRpdmlk dWFsCisgICBkYXRhYmFzZXMgb3IgZGF0YWJhc2Ugb2JqZWN0cy4gRm9yIHNlbGVjdGl2ZSBiYWNr dXBzLCBhbm90aGVyIHRvb2wgc3VjaCBhcwogICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIv PiBtdXN0IGJlIHVzZWQuCiAgIDwvcGFyYT4KIApAQCAtMTk3LDYgKzIxMSwxOSBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1pIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vbGRfbWFuaWZlc3RfZmlsZTwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWluY3JlbWVudGFsPTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vbGRfbWVhbmlmZXN0X2ZpbGU8L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg UGVyZm9ybXMgYW4gPGxpbmsgbGlua2VuZD0iYmFja3VwLWluY3JlbWVudGFsLWJhY2t1cCI+aW5j cmVtZW50YWwKKyAgICAgICAgYmFja3VwPC9saW5rPi4gVGhlIGJhY2t1cCBtYW5pZmVzdCBmb3Ig dGhlIHJlZmVyZW5jZQorICAgICAgICBiYWNrdXAgbXVzdCBiZSBwcm92aWRlZCwgYW5kIHdpbGwg YmUgdXBsb2FkZWQgdG8gdGhlIHNlcnZlciwgd2hpY2ggd2lsbAorICAgICAgICByZXNwb25kIGJ5 IHNlbmRpbmcgdGhlIHJlcXVlc3RlZCBpbmNyZW1lbnRhbCBiYWNrdXAuCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LVI8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8 dGVybT48b3B0aW9uPi0td3JpdGUtcmVjb3ZlcnktY29uZjwvb3B0aW9uPjwvdGVybT4KZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfY29tYmluZWJhY2t1cC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ19jb21iaW5lYmFja3VwLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uZTE3Mjk2NzFhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfY29tYmluZWJhY2t1cC5zZ21sCkBAIC0wLDAgKzEsMjQwIEBACis8IS0tCitkb2Mvc3Jj L3NnbWwvcmVmL3BnX2NvbWJpbmViYWNrdXAuc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CistLT4KKworPHJlZmVudHJ5IGlkPSJhcHAtcGdjb21iaW5lYmFja3VwIj4KKyA8aW5kZXh0ZXJt IHpvbmU9ImFwcC1wZ2NvbWJpbmViYWNrdXAiPgorICA8cHJpbWFyeT5wZ19jb21iaW5lYmFja3Vw PC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxl PjxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9hcHBsaWNhdGlvbj48L3JlZmVudHJ5dGl0 bGU+CisgIDxtYW52b2xudW0+MTwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+QXBwbGljYXRp b248L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFt ZT5wZ19jb21iaW5lYmFja3VwPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5yZWNvbnN0cnVjdCBh IGZ1bGwgYmFja3VwIGZyb20gYW4gaW5jcmVtZW50YWwgYmFja3VwIGFuZCBkZXBlbmRlbnQgYmFj a3VwczwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lub3BzaXNkaXY+Cisg IDxjbWRzeW5vcHNpcz4KKyAgIDxjb21tYW5kPnBnX2NvbWJpbmViYWNrdXA8L2NvbW1hbmQ+Cisg ICA8YXJnIHJlcD0icmVwZWF0Ij48cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2Fy Zz4KKyAgIDxhcmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5iYWNrdXBfZGlyZWN0b3J5PC9y ZXBsYWNlYWJsZT48L2FyZz4KKyAgPC9jbWRzeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2Pgor CisgPHJlZnNlY3QxPgorICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorICA8cGFyYT4KKyAg IDxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9hcHBsaWNhdGlvbj4gaXMgdXNlZCB0byBy ZWNvbnN0cnVjdCBhCisgICBzeW50aGV0aWMgZnVsbCBiYWNrdXAgZnJvbSBhbgorICAgPGxpbmsg bGlua2VuZD0iYmFja3VwLWluY3JlbWVudGFsLWJhY2t1cCI+aW5jcmVtZW50YWwgYmFja3VwPC9s aW5rPiBhbmQgdGhlCisgICBlYXJsaWVyIGJhY2t1cHMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTcGVjaWZ5IGFsbCBvZiB0aGUgcmVxdWlyZWQgYmFj a3VwcyBvbiB0aGUgY29tbWFuZCBsaW5lIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKyAgIFRoYXQg aXMsIHRoZSBmaXJzdCBiYWNrdXAgZGlyZWN0b3J5IHNob3VsZCBiZSB0aGUgcGF0aCB0byB0aGUg ZnVsbCBiYWNrdXAsIGFuZAorICAgdGhlIGxhc3Qgc2hvdWxkIGJlIHRoZSBwYXRoIHRvIHRoZSBm aW5hbCBpbmNyZW1lbnRhbCBiYWNrdXAKKyAgIHRoYXQgeW91IHdpc2ggdG8gcmVzdG9yZS4gVGhl IHJlY29uc3RydWN0ZWQgYmFja3VwIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKKyAgIG91dHB1dCBk aXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSA8b3B0aW9uPi1vPC9vcHRpb24+IG9wdGlvbi4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgQWx0aG91Z2ggPGFwcGxpY2F0aW9uPnBnX2NvbWJpbmVi YWNrdXA8L2FwcGxpY2F0aW9uPiB3aWxsIGF0dGVtcHQgdG8gdmVyaWZ5CisgICB0aGF0IHRoZSBi YWNrdXBzIHlvdSBzcGVjaWZ5IGZvcm0gYSBsZWdhbCBiYWNrdXAgY2hhaW4gZnJvbSB3aGljaCBh IGNvcnJlY3QKKyAgIGZ1bGwgYmFja3VwIGNhbiBiZSByZWNvbnN0cnVjdGVkLCBpdCBpcyBub3Qg ZGVzaWduZWQgdG8gaGVscCB5b3Uga2VlcCB0cmFjaworICAgb2Ygd2hpY2ggYmFja3VwcyBkZXBl bmQgb24gd2hpY2ggb3RoZXIgYmFja3Vwcy4gSWYgeW91IHJlbW92ZSB0aGUgb25lIG9yCisgICBt b3JlIG9mIHRoZSBwcmV2aW91cyBiYWNrdXBzIHVwb24gd2hpY2ggeW91ciBpbmNyZW1lbnRhbAor ICAgYmFja3VwIHJlbGllcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcmVzdG9yZSBpdC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgU2luY2UgdGhlIG91dHB1dCBvZiA8YXBwbGljYXRpb24+ cGdfY29tYmluZWJhY2t1cDwvYXBwbGljYXRpb24+IGlzIGEKKyAgIHN5bnRoZXRpYyBmdWxsIGJh Y2t1cCwgaXQgY2FuIGJlIHVzZWQgYXMgYW4gaW5wdXQgdG8gYSBmdXR1cmUgaW52b2NhdGlvbiBv ZgorICAgPGFwcGxpY2F0aW9uPnBnX2NvbWJpbmViYWNrdXA8L2FwcGxpY2F0aW9uPi4gVGhlIHN5 bnRoZXRpYyBmdWxsIGJhY2t1cCB3b3VsZAorICAgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5k IGxpbmUgaW4gbGlldSBvZiB0aGUgY2hhaW4gb2YgYmFja3VwcyBmcm9tIHdoaWNoCisgICBpdCB3 YXMgcmVjb25zdHJ1Y3RlZC4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5PcHRpb25zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgPHZhcmlhYmxlbGlz dD4KKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWQ8L29wdGlvbj48 L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZGVidWc8L29wdGlvbj48L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFByaW50IGxvdHMgb2YgZGVidWcg bG9nZ2luZyBvdXRwdXQgb24gPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+LgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1uPC9vcHRpb24+PC90ZXJtPgorICAg ICAgPHRlcm0+PG9wdGlvbj4tLWRyeS1ydW48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8b3B0aW9uPi1uPC9vcHRpb24+LzxvcHRp b24+LS1kcnktcnVuPC9vcHRpb24+IG9wdGlvbiBpbnN0cnVjdHMKKyAgICAgICAgPGNvbW1hbmQ+ cGdfY29taW5lYmFja3VwPC9jb21tYW5kPiB0byBmaWd1cmUgb3V0IHdoYXQgd291bGQgYmUgZG9u ZQorICAgICAgICB3aXRob3V0IGFjdHVhbGx5IGNyZWF0aW5nIHRoZSB0YXJnZXQgZGlyZWN0b3J5 IG9yIGFueSBvdXRwdXQgZmlsZXMuCisgICAgICAgIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwg aW4gY29taW5hdGlvbiB3aXRoIDxvcHRpb24+LS1kZWJ1Zzwvb3B0aW9uPi4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tTjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1uby1zeW5jPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCA8Y29tbWFuZD5wZ19jb21iaW5l YmFja3VwPC9jb21tYW5kPiB3aWxsIHdhaXQgZm9yIGFsbCBmaWxlcworICAgICAgICB0byBiZSB3 cml0dGVuIHNhZmVseSB0byBkaXNrLiAgVGhpcyBvcHRpb24gY2F1c2VzCisgICAgICAgIDxjb21t YW5kPnBnX2NvbWJpbmViYWNrdXA8L2NvbW1hbmQ+IHRvIHJldHVybiB3aXRob3V0IHdhaXRpbmcs IHdoaWNoIGlzCisgICAgICAgIGZhc3RlciwgYnV0IG1lYW5zIHRoYXQgYSBzdWJzZXF1ZW50IG9w ZXJhdGluZyBzeXN0ZW0gY3Jhc2ggY2FuIGxlYXZlCisgICAgICAgIHRoZSBvdXRwdXQgYmFja3Vw IGNvcnJ1cHQuICBHZW5lcmFsbHksIHRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdGVzdGluZwor ICAgICAgICBidXQgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBwcm9kdWN0aW9u IGluc3RhbGxhdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlv bj4tbyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3V0cHV0ZGlyPC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tb3V0cHV0PTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vdXRwdXRkaXI8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVz IHRoZSBvdXRwdXQgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBzeW50aGV0aWMgZnVsbCBiYWNrdXAK KyAgICAgICAgc2hvdWxkIGJlIHdyaXR0ZW4uIEN1cnJlbnRseSwgdGhpcyBhcmd1bWVudCBpcyBy ZXF1aXJlZC4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tVCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b2xkZGlyPC9yZXBsYWNlYWJsZT49PHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5ld2RpcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLXRhYmxlc3BhY2UtbWFwcGluZz08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+b2xkZGlyPC9yZXBsYWNlYWJsZT49PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm5ld2RpcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWxvY2F0ZXMgdGhlIHRhYmxl c3BhY2UgaW4gZGlyZWN0b3J5IDxyZXBsYWNlYWJsZT5vbGRkaXI8L3JlcGxhY2VhYmxlPgorICAg ICAgICB0byA8cmVwbGFjZWFibGU+bmV3ZGlyPC9yZXBsYWNlYWJsZT4gZHVyaW5nIHRoZSBiYWNr dXAuCisgICAgICAgIDxyZXBsYWNlYWJsZT5vbGRkaXI8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWJz b2x1dGUgcGF0aCBvZiB0aGUgdGFibGVzcGFjZQorICAgICAgICBhcyBpdCBleGlzdHMgaW4gdGhl IGZpcnN0IGJhY2t1cCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAgICAgICAgYW5k IDxyZXBsYWNlYWJsZT5uZXdkaXI8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0 byB1c2UgZm9yIHRoZQorICAgICAgICB0YWJsZXNwYWNlIGluIHRoZSByZWNvbnN0cnVjdGVkIGJh Y2t1cC4gIElmIGVpdGhlciBwYXRoIG5lZWRzIHRvIGNvbnRhaW4KKyAgICAgICAgYW4gZXF1YWwg c2lnbiAoPGxpdGVyYWw+PTwvbGl0ZXJhbD4pLCBwcmVjZWRlIHRoYXQgd2l0aCBhIGJhY2tzbGFz aC4KKyAgICAgICAgVGhpcyBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyBm b3IgbXVsdGlwbGUgdGFibGVzcGFjZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LS1tYW5pZmVzdC1jaGVja3N1bXM9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmFsZ29yaXRobTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBMaWtlIDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2Jhc2ViYWNrdXAiLz4sCisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9h cHBsaWNhdGlvbj4gd3JpdGVzIGEgYmFja3VwIG1hbmlmZXN0CisgICAgICAgIGluIHRoZSBvdXRw dXQgZGlyZWN0b3J5LiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGNoZWNrc3VtIGFsZ29yaXRo bQorICAgICAgICB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIGVhY2ggZmlsZSBpbmNsdWRlZCBp biB0aGUgYmFja3VwIG1hbmlmZXN0LgorICAgICAgICBDdXJyZW50bHksIHRoZSBhdmFpbGFibGUg YWxnb3JpdGhtcyBhcmUgPGxpdGVyYWw+Tk9ORTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFs PkNSQzMyQzwvbGl0ZXJhbD4sIDxsaXRlcmFsPlNIQTIyNDwvbGl0ZXJhbD4sCisgICAgICAgIDxs aXRlcmFsPlNIQTI1NjwvbGl0ZXJhbD4sIDxsaXRlcmFsPlNIQTM4NDwvbGl0ZXJhbD4sCisgICAg ICAgIGFuZCA8bGl0ZXJhbD5TSEE1MTI8L2xpdGVyYWw+LiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVy YWw+Q1JDMzJDPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ PG9wdGlvbj4tLW5vLW1hbmlmZXN0PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBEaXNhYmxlcyBnZW5lcmF0aW9uIG9mIGEgYmFja3VwIG1h bmlmZXN0LiBJZiB0aGlzIG9wdGlvbiBpcyBub3QKKyAgICAgICAgc3BlY2lmaWVkLCBhIGJhY2t1 cCBtYW5pZmVzdCBmb3IgdGhlIHJlY29uc3RydWN0ZWQgYmFja3VwIHdpbGwgYmUKKyAgICAgICAg d3JpdHRlbiB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLXN5bmMtbWV0aG9kPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5tZXRob2Q8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBzZXQgdG8gPGxpdGVyYWw+ZnN5bmM8 L2xpdGVyYWw+LCB3aGljaCBpcyB0aGUgZGVmYXVsdCwKKyAgICAgICAgPGNvbW1hbmQ+cGdfY29t YmluZWJhY2t1cDwvY29tbWFuZD4gd2lsbCByZWN1cnNpdmVseSBvcGVuIGFuZCBzeW5jaHJvbml6 ZQorICAgICAgICBhbGwgZmlsZXMgaW4gdGhlIGJhY2t1cCBkaXJlY3RvcnkuICBXaGVuIHRoZSBw bGFpbiBmb3JtYXQgaXMgdXNlZCwgdGhlCisgICAgICAgIHNlYXJjaCBmb3IgZmlsZXMgd2lsbCBm b2xsb3cgc3ltYm9saWMgbGlua3MgZm9yIHRoZSBXQUwgZGlyZWN0b3J5IGFuZAorICAgICAgICBl YWNoIGNvbmZpZ3VyZWQgdGFibGVzcGFjZS4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+ CisgICAgICAgIE9uIExpbnV4LCA8bGl0ZXJhbD5zeW5jZnM8L2xpdGVyYWw+IG1heSBiZSB1c2Vk IGluc3RlYWQgdG8gYXNrIHRoZQorICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIHRvIHN5bmNocm9u aXplIHRoZSB3aG9sZSBmaWxlIHN5c3RlbSB0aGF0IGNvbnRhaW5zIHRoZQorICAgICAgICBiYWNr dXAgZGlyZWN0b3J5LiAgV2hlbiB0aGUgcGxhaW4gZm9ybWF0IGlzIHVzZWQsCisgICAgICAgIDxj b21tYW5kPnBnX2NvbWJpbmViYWNrdXA8L2NvbW1hbmQ+IHdpbGwgYWxzbyBzeW5jaHJvbml6ZSB0 aGUgZmlsZSBzeXN0ZW1zCisgICAgICAgIHRoYXQgY29udGFpbiB0aGUgV0FMIGZpbGVzIGFuZCBl YWNoIHRhYmxlc3BhY2UuICBTZWUKKyAgICAgICAgPHhyZWYgbGlua2VuZD0ic3luY2ZzIi8+IGZv ciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nCisgICAgICAgIDxmdW5jdGlvbj5zeW5jZnMo KTwvZnVuY3Rpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhp cyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGVuIDxvcHRpb24+LS1uby1zeW5jPC9vcHRpb24+IGlz IHVzZWQuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48b3B0aW9uPi1WPC9v cHRpb24+PC90ZXJtPgorICAgICAgIDx0ZXJtPjxvcHRpb24+LS12ZXJzaW9uPC9vcHRpb24+PC90 ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUHJpbnRzIHRo ZSA8YXBwbGljYXRpb24+cGdfY29tYmluZWJhY2t1cDwvYXBwbGljYXRpb24+IHZlcnNpb24gYW5k CisgICAgICAgIGV4aXRzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxv cHRpb24+LT88L29wdGlvbj48L3Rlcm0+CisgICAgICAgPHRlcm0+PG9wdGlvbj4tLWhlbHA8L29w dGlvbj48L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBT aG93cyBoZWxwIGFib3V0IDxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9hcHBsaWNhdGlv bj4gY29tbWFuZAorICAgICAgICBsaW5lIGFyZ3VtZW50cywgYW5kIGV4aXRzLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDwv dmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4K KyAgPHRpdGxlPkVudmlyb25tZW50PC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoaXMgdXRpbGl0 eSwgbGlrZSBtb3N0IG90aGVyIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g dXRpbGl0aWVzLAorICAgdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBvcnRlZCBi eSA8YXBwbGljYXRpb24+bGlicHE8L2FwcGxpY2F0aW9uPgorICAgKHNlZSA8eHJlZiBsaW5rZW5k PSJsaWJwcS1lbnZhcnMiLz4pLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgZW52aXJv bm1lbnQgdmFyaWFibGUgPGVudmFyPlBHX0NPTE9SPC9lbnZhcj4gc3BlY2lmaWVzIHdoZXRoZXIg dG8gdXNlCisgICBjb2xvciBpbiBkaWFnbm9zdGljIG1lc3NhZ2VzLiBQb3NzaWJsZSB2YWx1ZXMg YXJlCisgICA8bGl0ZXJhbD5hbHdheXM8L2xpdGVyYWw+LCA8bGl0ZXJhbD5hdXRvPC9saXRlcmFs PiBhbmQKKyAgIDxsaXRlcmFsPm5ldmVyPC9saXRlcmFsPi4KKyAgPC9wYXJhPgorIDwvcmVmc2Vj dDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNpbXBs ZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0iYXBwLXBnYmFz ZWJhY2t1cCIvPjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4KKworPC9y ZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAppbmRleCBlMTFiNGI2MTMwLi5hMDdkMmI1ZTAxIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl ZmVyZW5jZS5zZ21sCkBAIC0yNTAsNiArMjUwLDcgQEAKICAgICZwZ2FtY2hlY2s7CiAgICAmcGdC YXNlYmFja3VwOwogICAgJnBnYmVuY2g7CisgICAmcGdDb21iaW5lYmFja3VwOwogICAgJnBnQ29u ZmlnOwogICAgJnBnRHVtcDsKICAgICZwZ0R1bXBhbGw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nYmFja3VwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nYmFja3VwLmMKaW5kZXggMjFkNjgxMzNhZS4uZjUxZDQyODJiYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2JhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYwpAQCAtNzcsNiArNzcsMTYgQEAgYnVpbGRfYmFj a3VwX2NvbnRlbnQoQmFja3VwU3RhdGUgKnN0YXRlLCBib29sIGlzaGlzdG9yeWZpbGUpCiAJCWFw cGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBUSU1FTElORTogJXVcbiIsIHN0YXRlLT5zdG9w dGxpKTsKIAl9CiAKKwkvKiBlaXRoZXIgYm90aCBpc3RhcnRwb2ludCBhbmQgaXN0YXJ0dGxpIHNo b3VsZCBiZSBzZXQsIG9yIG5laXRoZXIgKi8KKwlBc3NlcnQoWExvZ1JlY1B0cklzSW52YWxpZChz dGF0ZS0+aXN0YXJ0cG9pbnQpID09IChzdGF0ZS0+aXN0YXJ0dGxpID09IDApKTsKKwlpZiAoIVhM b2dSZWNQdHJJc0ludmFsaWQoc3RhdGUtPmlzdGFydHBvaW50KSkKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm8ocmVzdWx0LCAiSU5DUkVNRU5UQUwgRlJPTSBMU046ICVYLyVYXG4iLAorCQkJCQkJIExT Tl9GT1JNQVRfQVJHUyhzdGF0ZS0+aXN0YXJ0cG9pbnQpKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhy ZXN1bHQsICJJTkNSRU1FTlRBTCBGUk9NIFRMSTogJXVcbiIsCisJCQkJCQkgc3RhdGUtPmlzdGFy dHRsaSk7CisJfQorCiAJZGF0YSA9IHJlc3VsdC0+ZGF0YTsKIAlwZnJlZShyZXN1bHQpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IGEyYzhmYTM5ODEu LjZmNGY4MWY5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dy ZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CkBAIC0xMjk1LDYgKzEyOTUsMTIgQEAgcmVhZF9iYWNrdXBfbGFiZWwoWExvZ1JlY1B0ciAqY2hl Y2tQb2ludExvYywgVGltZUxpbmVJRCAqYmFja3VwTGFiZWxUTEksCiAJCQkJCQkJCSB0bGlfZnJv bV9maWxlLCBCQUNLVVBfTEFCRUxfRklMRSkpKTsKIAl9CiAKKwlpZiAoZnNjYW5mKGxmcCwgIklO Q1JFTUVOVEFMIEZST00gTFNOOiAlWC8lWFxuIiwgJmhpLCAmbG8pID4gMCkKKwkJZXJlcG9ydChG QVRBTCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwKKwkJCQkgZXJybXNnKCJ0aGlzIGlzIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgbm90IGEg ZGF0YSBkaXJlY3RvcnkiKSwKKwkJCQkgZXJyaGludCgiVXNlIHBnX2NvbWJpbmViYWNrdXAgdG8g cmVjb25zdHJ1Y3QgYSB2YWxpZCBkYXRhIGRpcmVjdG9yeS4iKSkpOworCiAJaWYgKGZlcnJvcihs ZnApIHx8IEZyZWVGaWxlKGxmcCkpCiAJCWVyZXBvcnQoRkFUQUwsCiAJCQkJKGVycmNvZGVfZm9y X2ZpbGVfYWNjZXNzKCksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvTWFrZWZpbGUg Yi9zcmMvYmFja2VuZC9iYWNrdXAvTWFrZWZpbGUKaW5kZXggYTY3YjNjNThkNC4uNzUxZTZkM2Q1 ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYmFja3VwL01ha2VmaWxlCisrKyBiL3NyYy9iYWNr ZW5kL2JhY2t1cC9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQCBPQkpTID0gXAogCWJhc2ViYWNr dXAubyBcCiAJYmFzZWJhY2t1cF9jb3B5Lm8gXAogCWJhc2ViYWNrdXBfZ3ppcC5vIFwKKwliYXNl YmFja3VwX2luY3JlbWVudGFsLm8gXAogCWJhc2ViYWNrdXBfbHo0Lm8gXAogCWJhc2ViYWNrdXBf enN0ZC5vIFwKIAliYXNlYmFja3VwX3Byb2dyZXNzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYmFja3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMK aW5kZXggMzVkZDc5YmFiYy4uNWVlOTYyODQyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCkBA IC0yMCw4ICsyMCwxMCBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nYmFja3VwLmgiCiAjaW5jbHVk ZSAiYmFja3VwL2JhY2t1cF9tYW5pZmVzdC5oIgogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3Vw LmgiCisjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKICNpbmNsdWRl ICJiYWNrdXAvYmFzZWJhY2t1cF9zaW5rLmgiCiAjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBf dGFyZ2V0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlX2QuaCIKICNpbmNsdWRl ICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tb24vY29tcHJlc3Npb24uaCIKICNp bmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCkBAIC0zMyw2ICszNSw3IEBACiAjaW5jbHVkZSAi cGd0YXIuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNsb2dn ZXIuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXJf cHJpdmF0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNjQsNiArNjcsNyBA QCB0eXBlZGVmIHN0cnVjdAogCWJvb2wJCWZhc3RjaGVja3BvaW50OwogCWJvb2wJCW5vd2FpdDsK IAlib29sCQlpbmNsdWRld2FsOworCWJvb2wJCWluY3JlbWVudGFsOwogCXVpbnQzMgkJbWF4cmF0 ZTsKIAlib29sCQlzZW5kdGJsc3BjbWFwZmlsZTsKIAlib29sCQlzZW5kX3RvX2NsaWVudDsKQEAg LTc2LDIxICs4MCwyOCBAQCB0eXBlZGVmIHN0cnVjdAogfSBiYXNlYmFja3VwX29wdGlvbnM7CiAK IHN0YXRpYyBpbnQ2NCBzZW5kVGFibGVzcGFjZShiYnNpbmsgKnNpbmssIGNoYXIgKnBhdGgsIE9p ZCBzcGNvaWQsIGJvb2wgc2l6ZW9ubHksCi0JCQkJCQkJc3RydWN0IGJhY2t1cF9tYW5pZmVzdF9p bmZvICptYW5pZmVzdCk7CisJCQkJCQkJc3RydWN0IGJhY2t1cF9tYW5pZmVzdF9pbmZvICptYW5p ZmVzdCwKKwkJCQkJCQlJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliKTsKIHN0YXRpYyBpbnQ2NCBz ZW5kRGlyKGJic2luayAqc2luaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGJhc2VwYXRobGVuLCBi b29sIHNpemVvbmx5LAogCQkJCQkgTGlzdCAqdGFibGVzcGFjZXMsIGJvb2wgc2VuZHRibHNwY2xp bmtzLAotCQkJCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LCBPaWQgc3Bjb2lkKTsK KwkJCQkJIGJhY2t1cF9tYW5pZmVzdF9pbmZvICptYW5pZmVzdCwgT2lkIHNwY29pZCwKKwkJCQkJ IEluY3JlbWVudGFsQmFja3VwSW5mbyAqaWIpOwogc3RhdGljIGJvb2wgc2VuZEZpbGUoYmJzaW5r ICpzaW5rLCBjb25zdCBjaGFyICpyZWFkZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnRhcmZpbGVuYW1l LAogCQkJCQkgc3RydWN0IHN0YXQgKnN0YXRidWYsIGJvb2wgbWlzc2luZ19vaywKIAkJCQkJIE9p ZCBkYm9pZCwgT2lkIHNwY29pZCwgUmVsRmlsZU51bWJlciByZWxmaWxlbnVtYmVyLAogCQkJCQkg dW5zaWduZWQgc2Vnbm8sCi0JCQkJCSBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QpOwor CQkJCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LAorCQkJCQkgdW5zaWduZWQgbnVt X2luY3JlbWVudGFsX2Jsb2NrcywKKwkJCQkJIEJsb2NrTnVtYmVyICppbmNyZW1lbnRhbF9ibG9j a3MsCisJCQkJCSB1bnNpZ25lZCB0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCk7CiBzdGF0aWMgb2Zm X3QgcmVhZF9maWxlX2RhdGFfaW50b19idWZmZXIoYmJzaW5rICpzaW5rLAogCQkJCQkJCQkJCWNv bnN0IGNoYXIgKnJlYWRmaWxlbmFtZSwgaW50IGZkLAogCQkJCQkJCQkJCW9mZl90IG9mZnNldCwg c2l6ZV90IGxlbmd0aCwKIAkJCQkJCQkJCQlCbG9ja051bWJlciBibGtubywKIAkJCQkJCQkJCQli b29sIHZlcmlmeV9jaGVja3N1bSwKIAkJCQkJCQkJCQlpbnQgKmNoZWNrc3VtX2ZhaWx1cmVzKTsK K3N0YXRpYyB2b2lkIHB1c2hfdG9fc2luayhiYnNpbmsgKnNpbmssIHBnX2NoZWNrc3VtX2NvbnRl eHQgKmNoZWNrc3VtX2N0eCwKKwkJCQkJCSBzaXplX3QgKmJ5dGVzX2RvbmUsIHZvaWQgKmRhdGEs IHNpemVfdCBsZW5ndGgpOwogc3RhdGljIGJvb2wgdmVyaWZ5X3BhZ2VfY2hlY2tzdW0oUGFnZSBw YWdlLCBYTG9nUmVjUHRyIHN0YXJ0X2xzbiwKIAkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsa25vLAog CQkJCQkJCQkgdWludDE2ICpleHBlY3RlZF9jaGVja3N1bSk7CkBAIC0xMDIsNyArMTEzLDggQEAg c3RhdGljIGludDY0IF90YXJXcml0ZUhlYWRlcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCQkJCQkJCSBib29sIHNpemVvbmx5KTsKIHN0YXRpYyB2b2lkIF90YXJXcml0ZVBh ZGRpbmcoYmJzaW5rICpzaW5rLCBpbnQgbGVuKTsKIHN0YXRpYyB2b2lkIGNvbnZlcnRfbGlua190 b19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aGJ1Ziwgc3RydWN0IHN0YXQgKnN0YXRidWYpOwot c3RhdGljIHZvaWQgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9wdCwg YmJzaW5rICpzaW5rKTsKK3N0YXRpYyB2b2lkIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1 cF9vcHRpb25zICpvcHQsIGJic2luayAqc2luaywKKwkJCQkJCQkJSW5jcmVtZW50YWxCYWNrdXBJ bmZvICppYik7CiBzdGF0aWMgdm9pZCBwYXJzZV9iYXNlYmFja3VwX29wdGlvbnMoTGlzdCAqb3B0 aW9ucywgYmFzZWJhY2t1cF9vcHRpb25zICpvcHQpOwogc3RhdGljIGludAljb21wYXJlV2FsRmls ZU5hbWVzKGNvbnN0IExpc3RDZWxsICphLCBjb25zdCBMaXN0Q2VsbCAqYik7CiBzdGF0aWMgaW50 CWJhc2ViYWNrdXBfcmVhZF9maWxlKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBv ZmZfdCBvZmZzZXQsCkBAIC0yMjAsNyArMjMyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleGNs dWRlX2xpc3RfaXRlbSBleGNsdWRlRmlsZXNbXSA9CiAgKiBjbG9iYmVyZWQgYnkgbG9uZ2ptcCIg ZnJvbSBzdHVwaWRlciB2ZXJzaW9ucyBvZiBnY2MuCiAgKi8KIHN0YXRpYyB2b2lkCi1wZXJmb3Jt X2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCitwZXJm b3JtX2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmssCisJ CQkJCUluY3JlbWVudGFsQmFja3VwSW5mbyAqaWIpCiB7CiAJYmJzaW5rX3N0YXRlIHN0YXRlOwog CVhMb2dSZWNQdHIJZW5kcHRyOwpAQCAtMjcwLDYgKzI4MywxMCBAQCBwZXJmb3JtX2Jhc2VfYmFj a3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCiAJCUxpc3RDZWxsICAg KmxjOwogCQl0YWJsZXNwYWNlaW5mbyAqbmV3dGk7CiAKKwkJLyogSWYgdGhpcyBpcyBhbiBpbmNy ZW1lbnRhbCBiYWNrdXAsIGV4ZWN1dGUgcHJlcGFyYXRvcnkgc3RlcHMuICovCisJCWlmIChpYiAh PSBOVUxMKQorCQkJUHJlcGFyZUZvckluY3JlbWVudGFsQmFja3VwKGliLCBiYWNrdXBfc3RhdGUp OworCiAJCS8qIEFkZCBhIG5vZGUgZm9yIHRoZSBiYXNlIGRpcmVjdG9yeSBhdCB0aGUgZW5kICov CiAJCW5ld3RpID0gcGFsbG9jMChzaXplb2YodGFibGVzcGFjZWluZm8pKTsKIAkJbmV3dGktPnNp emUgPSAtMTsKQEAgLTI4OSwxMCArMzA2LDEwIEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJh Y2t1cF9vcHRpb25zICpvcHQsIGJic2luayAqc2luaykKIAogCQkJCWlmICh0bXAtPnBhdGggPT0g TlVMTCkKIAkJCQkJdG1wLT5zaXplID0gc2VuZERpcihzaW5rLCAiLiIsIDEsIHRydWUsIHN0YXRl LnRhYmxlc3BhY2VzLAotCQkJCQkJCQkJCXRydWUsIE5VTEwsIEludmFsaWRPaWQpOworCQkJCQkJ CQkJCXRydWUsIE5VTEwsIEludmFsaWRPaWQsIE5VTEwpOwogCQkJCWVsc2UKIAkJCQkJdG1wLT5z aXplID0gc2VuZFRhYmxlc3BhY2Uoc2luaywgdG1wLT5wYXRoLCB0bXAtPm9pZCwgdHJ1ZSwKLQkJ CQkJCQkJCQkJICAgTlVMTCk7CisJCQkJCQkJCQkJCSAgIE5VTEwsIE5VTEwpOwogCQkJCXN0YXRl LmJ5dGVzX3RvdGFsICs9IHRtcC0+c2l6ZTsKIAkJCX0KIAkJCXN0YXRlLmJ5dGVzX3RvdGFsX2lz X3ZhbGlkID0gdHJ1ZTsKQEAgLTMzMCw3ICszNDcsNyBAQCBwZXJmb3JtX2Jhc2VfYmFja3VwKGJh c2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCiAKIAkJCQkvKiBUaGVuIHRoZSBi dWxrIG9mIHRoZSBmaWxlcy4uLiAqLwogCQkJCXNlbmREaXIoc2luaywgIi4iLCAxLCBmYWxzZSwg c3RhdGUudGFibGVzcGFjZXMsCi0JCQkJCQlzZW5kdGJsc3BjbGlua3MsICZtYW5pZmVzdCwgSW52 YWxpZE9pZCk7CisJCQkJCQlzZW5kdGJsc3BjbGlua3MsICZtYW5pZmVzdCwgSW52YWxpZE9pZCwg aWIpOwogCiAJCQkJLyogLi4uIGFuZCBwZ19jb250cm9sIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4g Ki8KIAkJCQlpZiAobHN0YXQoWExPR19DT05UUk9MX0ZJTEUsICZzdGF0YnVmKSAhPSAwKQpAQCAt MzQwLDcgKzM1Nyw3IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpv cHQsIGJic2luayAqc2luaykKIAkJCQkJCQkJCVhMT0dfQ09OVFJPTF9GSUxFKSkpOwogCQkJCXNl bmRGaWxlKHNpbmssIFhMT0dfQ09OVFJPTF9GSUxFLCBYTE9HX0NPTlRST0xfRklMRSwgJnN0YXRi dWYsCiAJCQkJCQkgZmFsc2UsIEludmFsaWRPaWQsIEludmFsaWRPaWQsCi0JCQkJCQkgSW52YWxp ZFJlbEZpbGVOdW1iZXIsIDAsICZtYW5pZmVzdCk7CisJCQkJCQkgSW52YWxpZFJlbEZpbGVOdW1i ZXIsIDAsICZtYW5pZmVzdCwgMCwgTlVMTCwgMCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0z NDgsNyArMzY1LDcgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9w dCwgYmJzaW5rICpzaW5rKQogCiAJCQkJYmJzaW5rX2JlZ2luX2FyY2hpdmUoc2luaywgYXJjaGl2 ZV9uYW1lKTsKIAotCQkJCXNlbmRUYWJsZXNwYWNlKHNpbmssIHRpLT5wYXRoLCB0aS0+b2lkLCBm YWxzZSwgJm1hbmlmZXN0KTsKKwkJCQlzZW5kVGFibGVzcGFjZShzaW5rLCB0aS0+cGF0aCwgdGkt Pm9pZCwgZmFsc2UsICZtYW5pZmVzdCwgaWIpOwogCQkJfQogCiAJCQkvKgpAQCAtNjEwLDcgKzYy Nyw3IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpvcHQsIGJic2lu ayAqc2luaykKIAogCQkJc2VuZEZpbGUoc2luaywgcGF0aGJ1ZiwgcGF0aGJ1ZiwgJnN0YXRidWYs IGZhbHNlLAogCQkJCQkgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwgSW52YWxpZFJlbEZpbGVOdW1i ZXIsIDAsCi0JCQkJCSAmbWFuaWZlc3QpOworCQkJCQkgJm1hbmlmZXN0LCAwLCBOVUxMLCAwKTsK IAogCQkJLyogdW5jb25kaXRpb25hbGx5IG1hcmsgZmlsZSBhcyBhcmNoaXZlZCAqLwogCQkJU3Rh dHVzRmlsZVBhdGgocGF0aGJ1ZiwgZm5hbWUsICIuZG9uZSIpOwpAQCAtNjg2LDYgKzcwMyw3IEBA IHBhcnNlX2Jhc2ViYWNrdXBfb3B0aW9ucyhMaXN0ICpvcHRpb25zLCBiYXNlYmFja3VwX29wdGlv bnMgKm9wdCkKIAlib29sCQlvX2NoZWNrcG9pbnQgPSBmYWxzZTsKIAlib29sCQlvX25vd2FpdCA9 IGZhbHNlOwogCWJvb2wJCW9fd2FsID0gZmFsc2U7CisJYm9vbAkJb19pbmNyZW1lbnRhbCA9IGZh bHNlOwogCWJvb2wJCW9fbWF4cmF0ZSA9IGZhbHNlOwogCWJvb2wJCW9fdGFibGVzcGFjZV9tYXAg PSBmYWxzZTsKIAlib29sCQlvX25vdmVyaWZ5X2NoZWNrc3VtcyA9IGZhbHNlOwpAQCAtNzY0LDYg Kzc4MiwyMCBAQCBwYXJzZV9iYXNlYmFja3VwX29wdGlvbnMoTGlzdCAqb3B0aW9ucywgYmFzZWJh Y2t1cF9vcHRpb25zICpvcHQpCiAJCQlvcHQtPmluY2x1ZGV3YWwgPSBkZWZHZXRCb29sZWFuKGRl ZmVsKTsKIAkJCW9fd2FsID0gdHJ1ZTsKIAkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJpbmNyZW1lbnRhbCIpID09IDApCisJCXsKKwkJCWlmIChvX2luY3JlbWVudGFsKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CisJCQkJCQkgZXJybXNnKCJkdXBsaWNhdGUgb3B0aW9uIFwiJXNcIiIsIGRlZmVsLT5kZWZuYW1l KSkpOworCQkJb3B0LT5pbmNyZW1lbnRhbCA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJaWYg KG9wdC0+aW5jcmVtZW50YWwgJiYgIXN1bW1hcml6ZV93YWwpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCQkJIGVycm1zZygiaW5jcmVtZW50YWwgYmFja3VwcyBjYW5ub3QgYmUgdGFrZW4gdW5s ZXNzIFdBTCBzdW1tYXJpemF0aW9uIGlzIGVuYWJsZWQiKSkpOworCQkJb3B0LT5pbmNyZW1lbnRh bCA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJb19pbmNyZW1lbnRhbCA9IHRydWU7CisJCX0K IAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibWF4X3JhdGUiKSA9PSAwKQogCQl7 CiAJCQlpbnQ2NAkJbWF4cmF0ZTsKQEAgLTk1Niw3ICs5ODgsNyBAQCBwYXJzZV9iYXNlYmFja3Vw X29wdGlvbnMoTGlzdCAqb3B0aW9ucywgYmFzZWJhY2t1cF9vcHRpb25zICpvcHQpCiAgKiB0aGUg ZmlsZXN5c3RlbSwgYnlwYXNzaW5nIHRoZSBidWZmZXIgY2FjaGUuCiAgKi8KIHZvaWQKLVNlbmRC YXNlQmFja3VwKEJhc2VCYWNrdXBDbWQgKmNtZCkKK1NlbmRCYXNlQmFja3VwKEJhc2VCYWNrdXBD bWQgKmNtZCwgSW5jcmVtZW50YWxCYWNrdXBJbmZvICppYikKIHsKIAliYXNlYmFja3VwX29wdGlv bnMgb3B0OwogCWJic2luawkgICAqc2luazsKQEAgLTk4MCw2ICsxMDEyLDIwIEBAIFNlbmRCYXNl QmFja3VwKEJhc2VCYWNrdXBDbWQgKmNtZCkKIAkJc2V0X3BzX2Rpc3BsYXkoYWN0aXZpdHltc2cp OwogCX0KIAorCS8qCisJICogSWYgd2UncmUgYXNrZWQgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRh bCBiYWNrdXAgYW5kIHRoZSB1c2VyIGhhcyBub3QKKwkgKiBzdXBwbGllZCBhIG1hbmlmZXN0LCB0 aGF0J3MgYW4gRVJST1IuCisJICoKKwkgKiBJZiB3ZSdyZSBhc2tlZCB0byBwZXJmb3JtIGEgZnVs bCBiYWNrdXAgYW5kIHRoZSB1c2VyIGRpZCBzdXBwbHkgYQorCSAqIG1hbmlmZXN0LCBqdXN0IGln bm9yZSBpdC4KKwkgKi8KKwlpZiAoIW9wdC5pbmNyZW1lbnRhbCkKKwkJaWIgPSBOVUxMOworCWVs c2UgaWYgKGliID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygibXVzdCBV UExPQURfTUFOSUZFU1QgYmVmb3JlIHBlcmZvcm1pbmcgYW4gaW5jcmVtZW50YWwgQkFTRV9CQUNL VVAiKSkpOworCiAJLyoKIAkgKiBJZiB0aGUgdGFyZ2V0IGlzIHNwZWNpZmljYWxseSAnY2xpZW50 JyB0aGVuIHNldCB1cCB0byBzdHJlYW0gdGhlIGJhY2t1cAogCSAqIHRvIHRoZSBjbGllbnQ7IG90 aGVyd2lzZSwgaXQncyBiZWluZyBzZW50IHNvbWVwbGFjZSBlbHNlIGFuZCBzaG91bGQgbm90CkBA IC0xMDExLDcgKzEwNTcsNyBAQCBTZW5kQmFzZUJhY2t1cChCYXNlQmFja3VwQ21kICpjbWQpCiAJ ICovCiAJUEdfVFJZKCk7CiAJewotCQlwZXJmb3JtX2Jhc2VfYmFja3VwKCZvcHQsIHNpbmspOwor CQlwZXJmb3JtX2Jhc2VfYmFja3VwKCZvcHQsIHNpbmssIGliKTsKIAl9CiAJUEdfRklOQUxMWSgp OwogCXsKQEAgLTEwODksNyArMTEzNSw3IEBAIHNlbmRGaWxlV2l0aENvbnRlbnQoYmJzaW5rICpz aW5rLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqY29udGVudCwKICAqLwogc3Rh dGljIGludDY0CiBzZW5kVGFibGVzcGFjZShiYnNpbmsgKnNpbmssIGNoYXIgKnBhdGgsIE9pZCBz cGNvaWQsIGJvb2wgc2l6ZW9ubHksCi0JCQkgICBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZl c3QpCisJCQkgICBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QsIEluY3JlbWVudGFsQmFj a3VwSW5mbyAqaWIpCiB7CiAJaW50NjQJCXNpemU7CiAJY2hhcgkJcGF0aGJ1ZltNQVhQR1BBVEhd OwpAQCAtMTEyMyw3ICsxMTY5LDcgQEAgc2VuZFRhYmxlc3BhY2UoYmJzaW5rICpzaW5rLCBjaGFy ICpwYXRoLCBPaWQgc3Bjb2lkLCBib29sIHNpemVvbmx5LAogCiAJLyogU2VuZCBhbGwgdGhlIGZp bGVzIGluIHRoZSB0YWJsZXNwYWNlIHZlcnNpb24gZGlyZWN0b3J5ICovCiAJc2l6ZSArPSBzZW5k RGlyKHNpbmssIHBhdGhidWYsIHN0cmxlbihwYXRoKSwgc2l6ZW9ubHksIE5JTCwgdHJ1ZSwgbWFu aWZlc3QsCi0JCQkJCXNwY29pZCk7CisJCQkJCXNwY29pZCwgaWIpOwogCiAJcmV0dXJuIHNpemU7 CiB9CkBAIC0xMTQzLDcgKzExODksNyBAQCBzZW5kVGFibGVzcGFjZShiYnNpbmsgKnNpbmssIGNo YXIgKnBhdGgsIE9pZCBzcGNvaWQsIGJvb2wgc2l6ZW9ubHksCiBzdGF0aWMgaW50NjQKIHNlbmRE aXIoYmJzaW5rICpzaW5rLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgYmFzZXBhdGhsZW4sIGJvb2wg c2l6ZW9ubHksCiAJCUxpc3QgKnRhYmxlc3BhY2VzLCBib29sIHNlbmR0YmxzcGNsaW5rcywgYmFj a3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LAotCQlPaWQgc3Bjb2lkKQorCQlPaWQgc3Bjb2lk LCBJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliKQogewogCURJUgkJICAgKmRpcjsKIAlzdHJ1Y3Qg ZGlyZW50ICpkZTsKQEAgLTExNTIsNyArMTE5OCwxNiBAQCBzZW5kRGlyKGJic2luayAqc2luaywg Y29uc3QgY2hhciAqcGF0aCwgaW50IGJhc2VwYXRobGVuLCBib29sIHNpemVvbmx5LAogCWludDY0 CQlzaXplID0gMDsKIAljb25zdCBjaGFyICpsYXN0RGlyOwkJLyogU3BsaXQgbGFzdCBkaXIgZnJv bSBwYXJlbnQgcGF0aC4gKi8KIAlib29sCQlpc1JlbGF0aW9uRGlyID0gZmFsc2U7CS8qIERvZXMg ZGlyZWN0b3J5IGNvbnRhaW4gcmVsYXRpb25zPyAqLworCWJvb2wJCWlzR2xvYmFsRGlyID0gZmFs c2U7CiAJT2lkCQkJZGJvaWQgPSBJbnZhbGlkT2lkOworCUJsb2NrTnVtYmVyICpyZWxhdGl2ZV9i bG9ja19udW1iZXJzID0gTlVMTDsKKworCS8qCisJICogU2luY2UgdGhpcyBhcnJheSBpcyByZWxh dGl2ZWx5IGxhcmdlLCBhdm9pZCBwdXR0aW5nIGl0IG9uIHRoZSBzdGFjay4KKwkgKiBCdXQgd2Ug ZG9uJ3QgbmVlZCBpdCBhdCBhbGwgaWYgdGhpcyBpcyBub3QgYW4gaW5jcmVtZW50YWwgYmFja3Vw LgorCSAqLworCWlmIChpYiAhPSBOVUxMKQorCQlyZWxhdGl2ZV9ibG9ja19udW1iZXJzID0gcGFs bG9jKHNpemVvZihCbG9ja051bWJlcikgKiBSRUxTRUdfU0laRSk7CiAKIAkvKgogCSAqIERldGVy bWluZSBpZiB0aGUgY3VycmVudCBwYXRoIGlzIGEgZGF0YWJhc2UgZGlyZWN0b3J5IHRoYXQgY2Fu IGNvbnRhaW4KQEAgLTExODUsNyArMTI0MCwxMCBAQCBzZW5kRGlyKGJic2luayAqc2luaywgY29u c3QgY2hhciAqcGF0aCwgaW50IGJhc2VwYXRobGVuLCBib29sIHNpemVvbmx5LAogCQl9CiAJfQog CWVsc2UgaWYgKHN0cmNtcChwYXRoLCAiLi9nbG9iYWwiKSA9PSAwKQorCXsKIAkJaXNSZWxhdGlv bkRpciA9IHRydWU7CisJCWlzR2xvYmFsRGlyID0gdHJ1ZTsKKwl9CiAKIAlkaXIgPSBBbGxvY2F0 ZURpcihwYXRoKTsKIAl3aGlsZSAoKGRlID0gUmVhZERpcihkaXIsIHBhdGgpKSAhPSBOVUxMKQpA QCAtMTMzNCwxMSArMTM5MiwxMyBAQCBzZW5kRGlyKGJic2luayAqc2luaywgY29uc3QgY2hhciAq cGF0aCwgaW50IGJhc2VwYXRobGVuLCBib29sIHNpemVvbmx5LAogCQkJCQkJCQkJJnN0YXRidWYs IHNpemVvbmx5KTsKIAogCQkJLyoKLQkJCSAqIEFsc28gc2VuZCBhcmNoaXZlX3N0YXR1cyBkaXJl Y3RvcnkgKGJ5IGhhY2tpc2hseSByZXVzaW5nCi0JCQkgKiBzdGF0YnVmIGZyb20gYWJvdmUgLi4u KS4KKwkJCSAqIEFsc28gc2VuZCBhcmNoaXZlX3N0YXR1cyBhbmQgc3VtbWFyaWVzIGRpcmVjdG9y aWVzIChieQorCQkJICogaGFja2lzaGx5IHJldXNpbmcgc3RhdGJ1ZiBmcm9tIGFib3ZlIC4uLiku CiAJCQkgKi8KIAkJCXNpemUgKz0gX3RhcldyaXRlSGVhZGVyKHNpbmssICIuL3BnX3dhbC9hcmNo aXZlX3N0YXR1cyIsIE5VTEwsCiAJCQkJCQkJCQkmc3RhdGJ1Ziwgc2l6ZW9ubHkpOworCQkJc2l6 ZSArPSBfdGFyV3JpdGVIZWFkZXIoc2luaywgIi4vcGdfd2FsL3N1bW1hcmllcyIsIE5VTEwsCisJ CQkJCQkJCQkmc3RhdGJ1Ziwgc2l6ZW9ubHkpOwogCiAJCQljb250aW51ZTsJCQkvKiBkb24ndCBy ZWN1cnNlIGludG8gcGdfd2FsICovCiAJCX0KQEAgLTE0MDcsMTYgKzE0NjcsNjQgQEAgc2VuZERp cihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBiYXNlcGF0aGxlbiwgYm9vbCBz aXplb25seSwKIAogCQkJaWYgKCFza2lwX3RoaXNfZGlyKQogCQkJCXNpemUgKz0gc2VuZERpcihz aW5rLCBwYXRoYnVmLCBiYXNlcGF0aGxlbiwgc2l6ZW9ubHksIHRhYmxlc3BhY2VzLAotCQkJCQkJ CQlzZW5kdGJsc3BjbGlua3MsIG1hbmlmZXN0LCBzcGNvaWQpOworCQkJCQkJCQlzZW5kdGJsc3Bj bGlua3MsIG1hbmlmZXN0LCBzcGNvaWQsIGliKTsKIAkJfQogCQllbHNlIGlmIChTX0lTUkVHKHN0 YXRidWYuc3RfbW9kZSkpCiAJCXsKIAkJCWJvb2wJCXNlbnQgPSBmYWxzZTsKKwkJCXVuc2lnbmVk CW51bV9ibG9ja3NfcmVxdWlyZWQgPSAwOworCQkJdW5zaWduZWQJdHJ1bmNhdGlvbl9ibG9ja19s ZW5ndGggPSAwOworCQkJY2hhcgkJdGFyZmlsZW5hbWVidWZbTUFYUEdQQVRIICogMl07CisJCQlj aGFyCSAgICp0YXJmaWxlbmFtZSA9IHBhdGhidWYgKyBiYXNlcGF0aGxlbiArIDE7CisJCQlGaWxl QmFja3VwTWV0aG9kIG1ldGhvZCA9IEJBQ0tfVVBfRklMRV9GVUxMWTsKKworCQkJaWYgKGliICE9 IE5VTEwgJiYgaXNSZWxhdGlvbkZpbGUpCisJCQl7CisJCQkJT2lkCQkJcmVsc3Bjb2lkOworCQkJ CWNoYXIJICAgKmxvb2t1cF9wYXRoOworCisJCQkJaWYgKE9pZElzVmFsaWQoc3Bjb2lkKSkKKwkJ CQl7CisJCQkJCXJlbHNwY29pZCA9IHNwY29pZDsKKwkJCQkJbG9va3VwX3BhdGggPSBwc3ByaW50 ZigicGdfdGJsc3BjLyV1LyVzIiwgc3Bjb2lkLAorCQkJCQkJCQkJCSAgIHRhcmZpbGVuYW1lKTsK KwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKGlzR2xvYmFsRGlyKQorCQkJCQkJcmVs c3Bjb2lkID0gR0xPQkFMVEFCTEVTUEFDRV9PSUQ7CisJCQkJCWVsc2UKKwkJCQkJCXJlbHNwY29p ZCA9IERFRkFVTFRUQUJMRVNQQUNFX09JRDsKKwkJCQkJbG9va3VwX3BhdGggPSBwc3RyZHVwKHRh cmZpbGVuYW1lKTsKKwkJCQl9CisKKwkJCQltZXRob2QgPSBHZXRGaWxlQmFja3VwTWV0aG9kKGli LCBsb29rdXBfcGF0aCwgZGJvaWQsIHJlbHNwY29pZCwKKwkJCQkJCQkJCQkJIHJlbGZpbGVudW1i ZXIsIHJlbEZvcmtOdW0sCisJCQkJCQkJCQkJCSBzZWdubywgc3RhdGJ1Zi5zdF9zaXplLAorCQkJ CQkJCQkJCQkgJm51bV9ibG9ja3NfcmVxdWlyZWQsCisJCQkJCQkJCQkJCSByZWxhdGl2ZV9ibG9j a19udW1iZXJzLAorCQkJCQkJCQkJCQkgJnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoKTsKKwkJCQlp ZiAobWV0aG9kID09IEJBQ0tfVVBfRklMRV9JTkNSRU1FTlRBTExZKQorCQkJCXsKKwkJCQkJc3Rh dGJ1Zi5zdF9zaXplID0KKwkJCQkJCUdldEluY3JlbWVudGFsRmlsZVNpemUobnVtX2Jsb2Nrc19y ZXF1aXJlZCk7CisJCQkJCXNucHJpbnRmKHRhcmZpbGVuYW1lYnVmLCBzaXplb2YodGFyZmlsZW5h bWVidWYpLAorCQkJCQkJCSAiJXMvSU5DUkVNRU5UQUwuJXMiLAorCQkJCQkJCSBwYXRoICsgYmFz ZXBhdGhsZW4gKyAxLAorCQkJCQkJCSBkZS0+ZF9uYW1lKTsKKwkJCQkJdGFyZmlsZW5hbWUgPSB0 YXJmaWxlbmFtZWJ1ZjsKKwkJCQl9CisKKwkJCQlwZnJlZShsb29rdXBfcGF0aCk7CisJCQl9CiAK IAkJCWlmICghc2l6ZW9ubHkpCi0JCQkJc2VudCA9IHNlbmRGaWxlKHNpbmssIHBhdGhidWYsIHBh dGhidWYgKyBiYXNlcGF0aGxlbiArIDEsICZzdGF0YnVmLAorCQkJCXNlbnQgPSBzZW5kRmlsZShz aW5rLCBwYXRoYnVmLCB0YXJmaWxlbmFtZSwgJnN0YXRidWYsCiAJCQkJCQkJCXRydWUsIGRib2lk LCBzcGNvaWQsCi0JCQkJCQkJCXJlbGZpbGVudW1iZXIsIHNlZ25vLCBtYW5pZmVzdCk7CisJCQkJ CQkJCXJlbGZpbGVudW1iZXIsIHNlZ25vLCBtYW5pZmVzdCwKKwkJCQkJCQkJbnVtX2Jsb2Nrc19y ZXF1aXJlZCwKKwkJCQkJCQkJbWV0aG9kID09IEJBQ0tfVVBfRklMRV9JTkNSRU1FTlRBTExZID8g cmVsYXRpdmVfYmxvY2tfbnVtYmVycyA6IE5VTEwsCisJCQkJCQkJCXRydW5jYXRpb25fYmxvY2tf bGVuZ3RoKTsKIAogCQkJaWYgKHNlbnQgfHwgc2l6ZW9ubHkpCiAJCQl7CkBAIC0xNDM0LDYgKzE1 NDIsMTAgQEAgc2VuZERpcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBiYXNl cGF0aGxlbiwgYm9vbCBzaXplb25seSwKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJKGVycm1z Zygic2tpcHBpbmcgc3BlY2lhbCBmaWxlIFwiJXNcIiIsIHBhdGhidWYpKSk7CiAJfQorCisJaWYg KHJlbGF0aXZlX2Jsb2NrX251bWJlcnMgIT0gTlVMTCkKKwkJcGZyZWUocmVsYXRpdmVfYmxvY2tf bnVtYmVycyk7CisKIAlGcmVlRGlyKGRpcik7CiAJcmV0dXJuIHNpemU7CiB9CkBAIC0xNDQ2LDYg KzE1NTgsMTIgQEAgc2VuZERpcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBi YXNlcGF0aGxlbiwgYm9vbCBzaXplb25seSwKICAqIElmIGRib2lkIGlzIGFueXRoaW5nIG90aGVy IHRoYW4gSW52YWxpZE9pZCB0aGVuIGFueSBjaGVja3N1bSBmYWlsdXJlcwogICogZGV0ZWN0ZWQg d2lsbCBnZXQgcmVwb3J0ZWQgdG8gdGhlIGN1bXVsYXRpdmUgc3RhdHMgc3lzdGVtLgogICoKKyAq IElmIHRoZSBmaWxlIGlzIHRvIGJlIHNlbnQgaW5jcmVtZW50YWxseSwgdGhlbiBudW1faW5jcmVt ZW50YWxfYmxvY2tzCisgKiBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gYmUgc2Vu dCwgYW5kIGluY3JlbWVudGFsX2Jsb2NrcworICogYW4gYXJyYXkgb2YgYmxvY2sgbnVtYmVycyBy ZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc2VnbWVudC4KKyAqIElmIHRoZSB3 aG9sZSBmaWxlIGlzIHRvIGJlIHNlbnQsIHRoZW4gaW5jcmVtZW50YWxfYmxvY2tzIHNob3VsZCBi ZSBOVUxMLAorICogYW5kIG51bV9pbmNyZW1lbnRhbF9ibG9ja3MgY2FuIGhhdmUgYW55IHZhbHVl LCBhcyBpdCB3aWxsIGJlIGlnbm9yZWQuCisgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxl IHdhcyBzdWNjZXNzZnVsbHkgc2VudCwgZmFsc2UgaWYgJ21pc3Npbmdfb2snLAogICogYW5kIHRo ZSBmaWxlIGRpZCBub3QgZXhpc3QuCiAgKi8KQEAgLTE0NTMsNyArMTU3MSw4IEBAIHN0YXRpYyBi b29sCiBzZW5kRmlsZShiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnJlYWRmaWxlbmFtZSwgY29u c3QgY2hhciAqdGFyZmlsZW5hbWUsCiAJCSBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1ZiwgYm9vbCBtaXNz aW5nX29rLCBPaWQgZGJvaWQsIE9pZCBzcGNvaWQsCiAJCSBSZWxGaWxlTnVtYmVyIHJlbGZpbGVu dW1iZXIsIHVuc2lnbmVkIHNlZ25vLAotCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0 KQorCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LCB1bnNpZ25lZCBudW1faW5jcmVt ZW50YWxfYmxvY2tzLAorCQkgQmxvY2tOdW1iZXIgKmluY3JlbWVudGFsX2Jsb2NrcywgdW5zaWdu ZWQgdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGgpCiB7CiAJaW50CQkJZmQ7CiAJQmxvY2tOdW1iZXIg Ymxrbm8gPSAwOwpAQCAtMTQ2Miw2ICsxNTgxLDcgQEAgc2VuZEZpbGUoYmJzaW5rICpzaW5rLCBj b25zdCBjaGFyICpyZWFkZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnRhcmZpbGVuYW1lLAogCXBnb2Zm X3QJCWJ5dGVzX2RvbmUgPSAwOwogCWJvb2wJCXZlcmlmeV9jaGVja3N1bSA9IGZhbHNlOwogCXBn X2NoZWNrc3VtX2NvbnRleHQgY2hlY2tzdW1fY3R4OworCWludAkJCWliaW5kZXggPSAwOwogCiAJ aWYgKHBnX2NoZWNrc3VtX2luaXQoJmNoZWNrc3VtX2N0eCwgbWFuaWZlc3QtPmNoZWNrc3VtX3R5 cGUpIDwgMCkKIAkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBpbml0aWFsaXplIGNoZWNrc3VtIG9m IGZpbGUgXCIlc1wiIiwKQEAgLTE0OTQsMjIgKzE2MTQsMTExIEBAIHNlbmRGaWxlKGJic2luayAq c2luaywgY29uc3QgY2hhciAqcmVhZGZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJmaWxlbmFtZSwK IAkJUmVsRmlsZU51bWJlcklzVmFsaWQocmVsZmlsZW51bWJlcikpCiAJCXZlcmlmeV9jaGVja3N1 bSA9IHRydWU7CiAKKwkvKgorCSAqIElmIHdlJ3JlIHNlbmRpbmcgYW4gaW5jcmVtZW50YWwgZmls ZSwgd3JpdGUgdGhlIGZpbGUgaGVhZGVyLgorCSAqLworCWlmIChpbmNyZW1lbnRhbF9ibG9ja3Mg IT0gTlVMTCkKKwl7CisJCXVuc2lnbmVkCW1hZ2ljID0gSU5DUkVNRU5UQUxfTUFHSUM7CisJCXNp emVfdAkJaGVhZGVyX2J5dGVzX2RvbmUgPSAwOworCisJCS8qIEVtaXQgaGVhZGVyIGRhdGEuICov CisJCXB1c2hfdG9fc2luayhzaW5rLCAmY2hlY2tzdW1fY3R4LCAmaGVhZGVyX2J5dGVzX2RvbmUs CisJCQkJCSAmbWFnaWMsIHNpemVvZihtYWdpYykpOworCQlwdXNoX3RvX3Npbmsoc2luaywgJmNo ZWNrc3VtX2N0eCwgJmhlYWRlcl9ieXRlc19kb25lLAorCQkJCQkgJm51bV9pbmNyZW1lbnRhbF9i bG9ja3MsIHNpemVvZihudW1faW5jcmVtZW50YWxfYmxvY2tzKSk7CisJCXB1c2hfdG9fc2luayhz aW5rLCAmY2hlY2tzdW1fY3R4LCAmaGVhZGVyX2J5dGVzX2RvbmUsCisJCQkJCSAmdHJ1bmNhdGlv bl9ibG9ja19sZW5ndGgsIHNpemVvZih0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCkpOworCQlwdXNo X3RvX3Npbmsoc2luaywgJmNoZWNrc3VtX2N0eCwgJmhlYWRlcl9ieXRlc19kb25lLAorCQkJCQkg aW5jcmVtZW50YWxfYmxvY2tzLAorCQkJCQkgc2l6ZW9mKEJsb2NrTnVtYmVyKSAqIG51bV9pbmNy ZW1lbnRhbF9ibG9ja3MpOworCisJCS8qIEZsdXNoIG91dCBhbnkgZGF0YSBzdGlsbCBpbiB0aGUg YnVmZmVyIHNvIGl0J3MgYWdhaW4gZW1wdHkuICovCisJCWlmIChoZWFkZXJfYnl0ZXNfZG9uZSA+ IDApCisJCXsKKwkJCWJic2lua19hcmNoaXZlX2NvbnRlbnRzKHNpbmssIGhlYWRlcl9ieXRlc19k b25lKTsKKwkJCWlmIChwZ19jaGVja3N1bV91cGRhdGUoJmNoZWNrc3VtX2N0eCwKKwkJCQkJCQkJ ICAgKHVpbnQ4ICopIHNpbmstPmJic19idWZmZXIsCisJCQkJCQkJCSAgIGhlYWRlcl9ieXRlc19k b25lKSA8IDApCisJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCB1cGRhdGUgY2hlY2tzdW0gb2Yg YmFzZSBiYWNrdXAiKTsKKwkJfQorCisJCS8qIFVwZGF0ZSBvdXIgbm90aW9uIG9mIGZpbGUgcG9z aXRpb24uICovCisJCWJ5dGVzX2RvbmUgKz0gc2l6ZW9mKG1hZ2ljKTsKKwkJYnl0ZXNfZG9uZSAr PSBzaXplb2YobnVtX2luY3JlbWVudGFsX2Jsb2Nrcyk7CisJCWJ5dGVzX2RvbmUgKz0gc2l6ZW9m KHRydW5jYXRpb25fYmxvY2tfbGVuZ3RoKTsKKwkJYnl0ZXNfZG9uZSArPSBzaXplb2YoQmxvY2tO dW1iZXIpICogbnVtX2luY3JlbWVudGFsX2Jsb2NrczsKKwl9CisKIAkvKgogCSAqIExvb3AgdW50 aWwgd2UgcmVhZCB0aGUgYW1vdW50IG9mIGRhdGEgdGhlIGNhbGxlciB0b2xkIHVzIHRvIGV4cGVj dC4gVGhlCiAJICogZmlsZSBjb3VsZCBiZSBsb25nZXIsIGlmIGl0IHdhcyBleHRlbmRlZCB3aGls ZSB3ZSB3ZXJlIHNlbmRpbmcgaXQsIGJ1dAogCSAqIGZvciBhIGJhc2UgYmFja3VwIHdlIGNhbiBp Z25vcmUgc3VjaCBleHRlbmRlZCBkYXRhLiBJdCB3aWxsIGJlIHJlc3RvcmVkCiAJICogZnJvbSBX QUwuCiAJICovCi0Jd2hpbGUgKGJ5dGVzX2RvbmUgPCBzdGF0YnVmLT5zdF9zaXplKQorCXdoaWxl ICgxKQogCXsKLQkJc2l6ZV90CQlyZW1haW5pbmcgPSBzdGF0YnVmLT5zdF9zaXplIC0gYnl0ZXNf ZG9uZTsKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UndmUgcmVhZCBhbGwgdGhlIGRh dGEgdGhhdCB3ZSBuZWVkLCBhbmQgaWYgbm90LAorCQkgKiByZWFkIHNvbWUgbW9yZS4KKwkJICov CisJCWlmIChpbmNyZW1lbnRhbF9ibG9ja3MgPT0gTlVMTCkKKwkJeworCQkJc2l6ZV90CQlyZW1h aW5pbmcgPSBzdGF0YnVmLT5zdF9zaXplIC0gYnl0ZXNfZG9uZTsKKworCQkJLyoKKwkJCSAqIElm IHdlJ3ZlIHJlYWQgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcywgdGhlbiBpdCdzIHRpbWUg dG8KKwkJCSAqIHN0b3AuCisJCQkgKi8KKwkJCWlmIChieXRlc19kb25lID49IHN0YXRidWYtPnN0 X3NpemUpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBSZWFkIGFzIG1hbnkgYnl0ZXMgYXMg d2lsbCBmaXQgaW4gdGhlIGJ1ZmZlciwgb3IgaG93ZXZlciBtYW55CisJCQkgKiBhcmUgbGVmdCB0 byByZWFkLCB3aGljaGV2ZXIgaXMgbGVzcy4KKwkJCSAqLworCQkJY250ID0gcmVhZF9maWxlX2Rh dGFfaW50b19idWZmZXIoc2luaywgcmVhZGZpbGVuYW1lLCBmZCwKKwkJCQkJCQkJCQkJIGJ5dGVz X2RvbmUsIHJlbWFpbmluZywKKwkJCQkJCQkJCQkJIGJsa25vICsgc2Vnbm8gKiBSRUxTRUdfU0la RSwKKwkJCQkJCQkJCQkJIHZlcmlmeV9jaGVja3N1bSwKKwkJCQkJCQkJCQkJICZjaGVja3N1bV9m YWlsdXJlcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlCbG9ja051bWJlciByZWxhdGl2ZV9ibGtu bzsKIAotCQkvKiBUcnkgdG8gcmVhZCBzb21lIG1vcmUgZGF0YS4gKi8KLQkJY250ID0gcmVhZF9m aWxlX2RhdGFfaW50b19idWZmZXIoc2luaywgcmVhZGZpbGVuYW1lLCBmZCwgYnl0ZXNfZG9uZSwK LQkJCQkJCQkJCQkgcmVtYWluaW5nLAotCQkJCQkJCQkJCSBibGtubyArIHNlZ25vICogUkVMU0VH X1NJWkUsCi0JCQkJCQkJCQkJIHZlcmlmeV9jaGVja3N1bSwKLQkJCQkJCQkJCQkgJmNoZWNrc3Vt X2ZhaWx1cmVzKTsKKwkJCS8qCisJCQkgKiBJZiB3ZSd2ZSByZWFkIGFsbCB0aGUgYmxvY2tzLCB0 aGVuIGl0J3MgdGltZSB0byBzdG9wLgorCQkJICovCisJCQlpZiAoaWJpbmRleCA+PSBudW1faW5j cmVtZW50YWxfYmxvY2tzKQorCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogUmVhZCBqdXN0IG9u ZSBibG9jaywgd2hpY2hldmVyIG9uZSBpcyB0aGUgbmV4dCB0aGF0IHdlJ3JlCisJCQkgKiBzdXBw b3NlZCB0byBpbmNsdWRlLgorCQkJICovCisJCQlyZWxhdGl2ZV9ibGtubyA9IGluY3JlbWVudGFs X2Jsb2Nrc1tpYmluZGV4KytdOworCQkJY250ID0gcmVhZF9maWxlX2RhdGFfaW50b19idWZmZXIo c2luaywgcmVhZGZpbGVuYW1lLCBmZCwKKwkJCQkJCQkJCQkJIHJlbGF0aXZlX2Jsa25vICogQkxD S1NaLAorCQkJCQkJCQkJCQkgQkxDS1NaLAorCQkJCQkJCQkJCQkgcmVsYXRpdmVfYmxrbm8gKyBz ZWdubyAqIFJFTFNFR19TSVpFLAorCQkJCQkJCQkJCQkgdmVyaWZ5X2NoZWNrc3VtLAorCQkJCQkJ CQkJCQkgJmNoZWNrc3VtX2ZhaWx1cmVzKTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGdldCBhIHBh cnRpYWwgcmVhZCwgdGhhdCBtdXN0IG1lYW4gdGhhdCB0aGUgcmVsYXRpb24gaXMKKwkJCSAqIGJl aW5nIHRydW5jYXRlZC4gVWx0aW1hdGVseSwgaXQgc2hvdWxkIGJlIHRydW5jYXRlZCB0byBhCisJ CQkgKiBtdWx0aXBsZSBvZiBCTENLU1osIHNpbmNlIHRoaXMgcGF0aCBzaG91bGQgb25seSBiZSBy ZWFjaGVkIGZvcgorCQkJICogcmVsYXRpb24gZmlsZXMsIGJ1dCB3ZSBtaWdodCB0cmFuc2llbnRs eSBvYnNlcnZlIGFuCisJCQkgKiBpbnRlcm1lZGlhdGUgdmFsdWUuCisJCQkgKgorCQkJICogSXQg c2hvdWxkIGJlIGZpbmUgdG8gdHJlYXQgdGhpcyBqdXN0IGFzIGlmIHRoZSBlbnRpcmUgYmxvY2sg aGFkCisJCQkgKiBiZWVuIHRydW5jYXRlZCBhd2F5IC0gaS5lLiBmaWxsIHRoaXMgYW5kIGFsbCBs YXRlciBibG9ja3Mgd2l0aAorCQkJICogemVyb2VzLiBXQUwgcmVwbGF5IHdpbGwgZml4IHRoaW5n cyB1cC4KKwkJCSAqLworCQkJaWYgKGNudCA8IEJMQ0tTWikKKwkJCQlicmVhazsKKwkJfQogCiAJ CS8qCiAJCSAqIElmIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB3YXMg bm90IGEgbXVsdGlwbGUgb2YKQEAgLTE2OTIsNiArMTkwMSw1NiBAQCByZWFkX2ZpbGVfZGF0YV9p bnRvX2J1ZmZlcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnJlYWRmaWxlbmFtZSwgaW50IGZk LAogCXJldHVybiBjbnQ7CiB9CiAKKy8qCisgKiBQdXNoIGRhdGEgaW50byBhIGJic2luay4KKyAq CisgKiBJdCdzIGJldHRlciwgd2hlbiBwb3NzaWJsZSwgdG8gcmVhZCBkYXRhIGRpcmVjdGx5IGlu dG8gdGhlIGJic2luaydzIGJ1ZmZlciwKKyAqIHJhdGhlciB0aGFuIHVzaW5nIHRoaXMgZnVuY3Rp b24gdG8gY29weSBpdCBpbnRvIHRoZSBidWZmZXI7IHRoaXMgZnVuY3Rpb24gaXMKKyAqIGZvciBj YXNlcyB3aGVyZSB0aGF0IGFwcHJvYWNoIGlzIG5vdCBwcmFjdGljYWwuCisgKgorICogYnl0ZXNf ZG9uZSBzaG91bGQgcG9pbnQgdG8gYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQg YXJlCisgKiBjdXJyZW50bHkgdXNlZCBpbiB0aGUgYmJzaW5rJ3MgYnVmZmVyLiBVcG9uIHJldHVy biwgdGhlIGJ5dGVzIGlkZW50aWZpZWQgYnkKKyAqIGRhdGEgYW5kIGxlbmd0aCB3aWxsIGhhdmUg YmVlbiBjb3BpZWQgaW50byB0aGUgYmJzaW5rJ3MgYnVmZmVyLCBmbHVzaGluZworICogYXMgcmVx dWlyZWQsIGFuZCAqYnl0ZXNfZG9uZSB3aWxsIGhhdmUgYmVlbiB1cGRhdGVkIGFjY29yZGluZ2x5 LiBJZiB0aGUKKyAqIGJ1ZmZlciB3YXMgZmx1c2hlZCwgdGhlIHByZXZpb3VzIGNvbnRlbnRzIHdp bGwgYWxzbyBoYXZlIGJlZW4gZmVkIHRvCisgKiBjaGVja3N1bV9jdHguCisgKgorICogTm90ZSB0 aGF0IGFmdGVyIG9uZSBvciBtb3JlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gaXQgaXMgdGhlIGNh bGxlcidzCisgKiByZXNwb25zaWJpbGl0eSB0byBwZXJmb3JtIGFueSByZXF1aXJlZCBmaW5hbCBm bHVzaC4KKyAqLworc3RhdGljIHZvaWQKK3B1c2hfdG9fc2luayhiYnNpbmsgKnNpbmssIHBnX2No ZWNrc3VtX2NvbnRleHQgKmNoZWNrc3VtX2N0eCwKKwkJCSBzaXplX3QgKmJ5dGVzX2RvbmUsIHZv aWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJd2hpbGUgKGxlbmd0aCA+IDApCisJeworCQlz aXplX3QJCWJ5dGVzX3RvX2NvcHk7CisKKwkJLyoKKwkJICogV2UgdXNlIDwgaGVyZSByYXRoZXIg dGhhbiA8PSBzbyB0aGF0IGlmIHRoZSBkYXRhIGV4YWN0bHkgZmlsbHMgdGhlCisJCSAqIHJlbWFp bmluZyBidWZmZXIgc3BhY2UsIHdlIHRyaWdnZXIgYSBmbHVzaCBub3cuCisJCSAqLworCQlpZiAo bGVuZ3RoIDwgc2luay0+YmJzX2J1ZmZlcl9sZW5ndGggLSAqYnl0ZXNfZG9uZSkKKwkJeworCQkJ LyogQXBwZW5kIHJlbWFpbmluZyBkYXRhIHRvIGJ1ZmZlci4gKi8KKwkJCW1lbWNweShzaW5rLT5i YnNfYnVmZmVyICsgKmJ5dGVzX2RvbmUsIGRhdGEsIGxlbmd0aCk7CisJCQkqYnl0ZXNfZG9uZSAr PSBsZW5ndGg7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBDb3B5IHVudGlsIGJ1ZmZlciBpcyBm dWxsIGFuZCBmbHVzaCBpdC4gKi8KKwkJYnl0ZXNfdG9fY29weSA9IHNpbmstPmJic19idWZmZXJf bGVuZ3RoIC0gKmJ5dGVzX2RvbmU7CisJCW1lbWNweShzaW5rLT5iYnNfYnVmZmVyICsgKmJ5dGVz X2RvbmUsIGRhdGEsIGJ5dGVzX3RvX2NvcHkpOworCQlkYXRhID0gKChjaGFyICopIGRhdGEpICsg Ynl0ZXNfdG9fY29weTsKKwkJbGVuZ3RoIC09IGJ5dGVzX3RvX2NvcHk7CisJCWJic2lua19hcmNo aXZlX2NvbnRlbnRzKHNpbmssIHNpbmstPmJic19idWZmZXJfbGVuZ3RoKTsKKwkJaWYgKHBnX2No ZWNrc3VtX3VwZGF0ZShjaGVja3N1bV9jdHgsICh1aW50OCAqKSBzaW5rLT5iYnNfYnVmZmVyLAor CQkJCQkJCSAgIHNpbmstPmJic19idWZmZXJfbGVuZ3RoKSA8IDApCisJCQllbG9nKEVSUk9SLCAi Y291bGQgbm90IHVwZGF0ZSBjaGVja3N1bSIpOworCQkqYnl0ZXNfZG9uZSA9IDA7CisJfQorfQor CiAvKgogICogVHJ5IHRvIHZlcmlmeSB0aGUgY2hlY2tzdW0gZm9yIHRoZSBwcm92aWRlZCBwYWdl LCBpZiBpdCBzZWVtcyBhcHByb3ByaWF0ZQogICogdG8gZG8gc28uCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5jIGIvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4xZTVhNWFjMzNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuYwpAQCAtMCwwICsxLDEwMDMgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGJhc2ViYWNrdXBfaW5jcmVtZW50YWwuYworICoJICBjb2RlIGZv ciBpbmNyZW1lbnRhbCBiYWNrdXAgc3VwcG9ydAorICoKKyAqIFRoaXMgY29kZSBpc24ndCBhY3R1 YWxseSBpbiBjaGFyZ2Ugb2YgdGFraW5nIGFuIGluY3JlbWVudGFsIGJhY2t1cDsKKyAqIHRoZSBh Y3R1YWwgY29uc3RydWN0aW9uIG9mIHRoZSBpbmNyZW1lbnRhbCBiYWNrdXAgaGFwcGVucyBpbgor ICogYmFzZWJhY2t1cC5jLiBIZXJlLCB3ZSdyZSBjb25jZXJuZWQgd2l0aCBwcm92aWRpbmcgdGhl IG5lY2Vzc2FyeQorICogc3VwcG9ydHMgZm9yIHRoYXQgb3BlcmF0aW9uLiBJbiBwYXJ0aWN1bGFy LCB3ZSBuZWVkIHRvIHBhcnNlIHRoZQorICogYmFja3VwIG1hbmlmZXN0IHN1cHBsaWVkIGJ5IHRo ZSB1c2VyIHRha2luZyB0aGUgaW5jcmVtZW50YWwgYmFja3VwCisgKiBhbmQgZXh0cmFjdCB0aGUg cmVxdWlyZWQgaW5mb3JtYXRpb24gZnJvbSBpdC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDIwMTAtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9pbmNy ZW1lbnRhbC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3RpbWVsaW5lLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hs b2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisjaW5jbHVkZSAiYmFja3Vw L2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKKyNpbmNsdWRlICJiYWNrdXAvd2Fsc3VtbWFyeS5o IgorI2luY2x1ZGUgImNvbW1vbi9ibGtyZWZ0YWJsZS5oIgorI2luY2x1ZGUgImNvbW1vbi9wYXJz ZV9tYW5pZmVzdC5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJwb3N0 bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKKworI2RlZmluZQlCTE9DS1NfUEVSX1JFQUQJCQk1MTIK KworLyoKKyAqIERldGFpbHMgZXh0cmFjdGVkIGZyb20gdGhlIFdBTCByYW5nZXMgcHJlc2VudCBp biB0aGUgc3VwcGxpZWQgYmFja3VwIG1hbmlmZXN0LgorICovCit0eXBlZGVmIHN0cnVjdAorewor CVRpbWVMaW5lSUQJdGxpOworCVhMb2dSZWNQdHIJc3RhcnRfbHNuOworCVhMb2dSZWNQdHIJZW5k X2xzbjsKK30gYmFja3VwX3dhbF9yYW5nZTsKKworLyoKKyAqIERldGFpbHMgZXh0cmFjdGVkIGZy b20gdGhlIGZpbGUgbGlzdCBwcmVzZW50IGluIHRoZSBzdXBwbGllZCBiYWNrdXAgbWFuaWZlc3Qu CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJdWludDMyCQlzdGF0dXM7CisJY29uc3QgY2hhciAq cGF0aDsKKwlzaXplX3QJCXNpemU7Cit9IGJhY2t1cF9maWxlX2VudHJ5OworCitzdGF0aWMgdWlu dDMyIGhhc2hfc3RyaW5nX3BvaW50ZXIoY29uc3QgY2hhciAqcyk7CisjZGVmaW5lIFNIX1BSRUZJ WCAgICAgICAgICAgICAgIGJhY2t1cF9maWxlCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJCWJh Y2t1cF9maWxlX2VudHJ5CisjZGVmaW5lIFNIX0tFWV9UWVBFICAgICAgICAgICAgIGNvbnN0IGNo YXIgKgorI2RlZmluZSBTSF9LRVkgICAgICAgICAgICAgICAgICBwYXRoCisjZGVmaW5lIFNIX0hB U0hfS0VZKHRiLCBrZXkpICAgIGhhc2hfc3RyaW5nX3BvaW50ZXIoa2V5KQorI2RlZmluZSBTSF9F UVVBTCh0YiwgYSwgYikJCShzdHJjbXAoYSwgYikgPT0gMCkKKyNkZWZpbmUgU0hfU0NPUEUgICAg ICAgICAgICAgICAgc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNI X0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKK3N0cnVjdCBJbmNyZW1lbnRh bEJhY2t1cEluZm8KK3sKKwkvKiBNZW1vcnkgY29udGV4dCBmb3IgdGhpcyBvYmplY3QgYW5kIGl0 cyBzdWJzaWRpYXJ5IG9iamVjdHMuICovCisJTWVtb3J5Q29udGV4dCBtY3h0OworCisJLyogVGVt cG9yYXJ5IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgbWFuaWZlc3Qgd2hpbGUgcGFyc2luZyBpdC4g Ki8KKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkvKiBXQUwgcmFuZ2VzIGV4dHJhY3RlZCBmcm9t IHRoZSBiYWNrdXAgbWFuaWZlc3QuICovCisJTGlzdAkgICAqbWFuaWZlc3Rfd2FsX3JhbmdlczsK KworCS8qCisJICogRmlsZXMgZXh0cmFjdGVkIGZyb20gdGhlIGJhY2t1cCBtYW5pZmVzdC4KKwkg KgorCSAqIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMgaW5mb3JtYXRpb24sIGJlY2F1c2Ugd2Ug dXNlIFdBTCBzdW1tYXJpZXMgdG8KKwkgKiBmaWd1cmUgd2hhdCdzIGNoYW5nZWQuIEl0IHdvdWxk IGJlIHVuc2FmZSB0byBqdXN0IHJlbHkgb24gdGhlIGxpc3Qgb2YKKwkgKiBmaWxlcyB0aGF0IGV4 aXN0ZWQgYmVmb3JlLCBiZWNhdXNlIGl0J3MgcG9zc2libGUgZm9yIGEgZmlsZSB0byBiZQorCSAq IHJlbW92ZWQgYW5kIGEgbmV3IG9uZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgZGlm ZmVyZW50CisJICogY29udGVudHMuIEluIHN1Y2ggY2FzZXMsIHRoZSB3aG9sZSBmaWxlIG11c3Qg c3RpbGwgYmUgc2VudC4gV2UgY2FuIHRlbGwKKwkgKiBmcm9tIHRoZSBXQUwgc3VtbWFyaWVzIHdo ZXRoZXIgdGhhdCBoYXBwZW5lZCwgYnV0IG5vdCBmcm9tIHRoZSBmaWxlCisJICogbGlzdC4KKwkg KgorCSAqIE5vbmV0aGVsZXNzLCB0aGlzIGRhdGEgaXMgdXNlZnVsIGZvciBzYW5pdHkgY2hlY2tp bmcuIElmIGEgZmlsZSB0aGF0IHdlCisJICogdGhpbmsgd2Ugc2hvdWxkbid0IG5lZWQgdG8gc2Vu ZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZQorCSAqIHByaW9yIGJhY2t1 cCwgc29tZXRoaW5nIGhhcyBnb25lIHRlcnJpYmx5IHdyb25nLiBXZSByZXRhaW4gdGhlIGZpbGUK KwkgKiBuYW1lcyBhbmQgc2l6ZXMsIGJ1dCBub3QgdGhlIGNoZWNrc3VtcyBvciBsYXN0IG1vZGlm aWVkIHRpbWVzLCBmb3IKKwkgKiB3aGljaCB3ZSBoYXZlIG5vIHVzZS4KKwkgKgorCSAqIE9uZSBz aWduaWZpY2FudCBkb3duc2lkZSBvZiBzdG9yaW5nIHRoaXMgZGF0YSBpcyB0aGF0IGl0IGNvbnN1 bWVzCisJICogbWVtb3J5LiBJZiB0aGF0IHR1cm5zIG91dCB0byBiZSBhIHByb2JsZW0sIHdlIG1p Z2h0IGhhdmUgdG8gZGVjaWRlIG5vdAorCSAqIHRvIHJldGFpbiB0aGlzIGluZm9ybWF0aW9uLCBv ciB0byBtYWtlIGl0IG9wdGlvbmFsLgorCSAqLworCWJhY2t1cF9maWxlX2hhc2ggKm1hbmlmZXN0 X2ZpbGVzOworCisJLyoKKwkgKiBCbG9jay1yZWZlcmVuY2UgdGFibGUgZm9yIHRoZSBpbmNyZW1l bnRhbCBiYWNrdXAuCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgc3RvcmluZyB0aGUgZW50 aXJlIGJsb2NrLXJlZmVyZW5jZSB0YWJsZSBpbiBtZW1vcnkKKwkgKiB3aWxsIGJlIGEgcHJvYmxl bSBmb3Igc29tZSB1c2Vycy4gVGhlIGluLW1lbW9yeSBmb3JtYXQgdGhhdCB3ZSdyZSB1c2luZwor CSAqIGhlcmUgaXMgcHJldHR5IGVmZmljaWVudCwgY29udmVyZ2luZyB0byBsaXR0bGUgbW9yZSB0 aGFuIDEgYml0IHBlcgorCSAqIGJsb2NrIGZvciByZWxhdGlvbiBmb3JrcyB3aXRoIGxhcmdlIG51 bWJlcnMgb2YgbW9kaWZpZWQgYmxvY2tzLiBJdCdzCisJICogcG9zc2libGUsIGhvd2V2ZXIsIHRo YXQgaWYgeW91IHRyeSB0byBwZXJmb3JtIGFuIGluY3JlbWVudGFsIGJhY2t1cCBvZgorCSAqIGEg ZGF0YWJhc2Ugd2l0aCBhIHN1ZmZpY2llbnRseSBsYXJnZSBudW1iZXIgb2YgcmVsYXRpb25zIG9u IGEKKwkgKiBzdWZmaWNpZW50bHkgc21hbGwgbWFjaGluZSwgeW91IGNvdWxkIHJ1biBvdXQgb2Yg bWVtb3J5IGhlcmUuIElmIHRoYXQKKwkgKiB0dXJucyBvdXQgdG8gYmUgYSBwcm9ibGVtIGluIHBy YWN0aWNlLCB3ZSdsbCBuZWVkIHRvIGJlIG1vcmUgY2xldmVyLgorCSAqLworCUJsb2NrUmVmVGFi bGUgKmJydGFiOworfTsKKworc3RhdGljIHZvaWQgbWFuaWZlc3RfcHJvY2Vzc19maWxlKEpzb25N YW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBjaGFyICpwYXRobmFtZSwK KwkJCQkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJCQkJICBwZ19jaGVja3N1bV90eXBlIGNoZWNr c3VtX3R5cGUsCisJCQkJCQkJCSAgaW50IGNoZWNrc3VtX2xlbmd0aCwKKwkJCQkJCQkJICB1aW50 OCAqY2hlY2tzdW1fcGF5bG9hZCk7CitzdGF0aWMgdm9pZCBtYW5pZmVzdF9wcm9jZXNzX3dhbF9y YW5nZShKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgICBUaW1l TGluZUlEIHRsaSwKKwkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAorCQkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBlbmRfbHNuKTsKK3N0YXRpYyB2b2lkIG1hbmlmZXN0X3JlcG9ydF9lcnJv cihKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmliLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmZt dCwuLi4pCisJCQlwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMpIHBnX2F0dHJpYnV0ZV9ub3JldHVy bigpOworc3RhdGljIGludAljb21wYXJlX2Jsb2NrX251bWJlcnMoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYik7CisKKy8qCisgKiBDcmVhdGUgYSBuZXcgb2JqZWN0IGZvciBzdG9yaW5nIGlu Zm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIHRoZSBtYW5pZmVzdAorICogc3VwcGxpZWQgd2hlbiBj cmVhdGluZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAuCisgKi8KK0luY3JlbWVudGFsQmFja3VwSW5m byAqCitDcmVhdGVJbmNyZW1lbnRhbEJhY2t1cEluZm8oTWVtb3J5Q29udGV4dCBtY3h0KQorewor CUluY3JlbWVudGFsQmFja3VwSW5mbyAqaWI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhtY3h0KTsKKworCWliID0gcGFs bG9jMChzaXplb2YoSW5jcmVtZW50YWxCYWNrdXBJbmZvKSk7CisJaWItPm1jeHQgPSBtY3h0Owor CWluaXRTdHJpbmdJbmZvKCZpYi0+YnVmKTsKKworCS8qCisJICogSXQncyBoYXJkIHRvIGd1ZXNz IGhvdyBtYW55IGZpbGVzIGEgInR5cGljYWwiIGluc3RhbGxhdGlvbiB3aWxsIGhhdmUgaW4KKwkg KiB0aGUgZGF0YSBkaXJlY3RvcnksIGJ1dCBhIGZyZXNoIGluaXRkYiBjcmVhdGVzIGFsbW9zdCAx MDAwIGZpbGVzIGFzIG9mCisJICogdGhpcyB3cml0aW5nLCBzbyBpdCBzZWVtcyB0byBtYWtlIHNl bnNlIGZvciBvdXIgZXN0aW1hdGUgdG8KKwkgKiBzdWJzdGFudGlhbGx5IGhpZ2hlci4KKwkgKi8K KwlpYi0+bWFuaWZlc3RfZmlsZXMgPSBiYWNrdXBfZmlsZV9jcmVhdGUobWN4dCwgMTAwMDAsIE5V TEwpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIGli OworfQorCisvKgorICogQmVmb3JlIHRha2luZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAsIHRoZSBj YWxsZXIgbXVzdCBzdXBwbHkgdGhlIGJhY2t1cAorICogbWFuaWZlc3QgZnJvbSBhIHByaW9yIGJh Y2t1cC4gRWFjaCBjaHVuayBvZiBtYW5pZmVzdCBkYXRhIHJlY2lldmVkCisgKiBmcm9tIHRoZSBj bGllbnQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkCitBcHBl bmRJbmNyZW1lbnRhbE1hbmlmZXN0RGF0YShJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliLCBjb25z dCBjaGFyICpkYXRhLAorCQkJCQkJCSAgaW50IGxlbikKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisKKwkvKiBTd2l0Y2ggdG8gb3VyIG1lbW9yeSBjb250ZXh0LiAqLworCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaWItPm1jeHQpOworCisJLyoKKwkgKiBYWFguIE91 ciBqc29uIHBhcnNlciBpcyBhdCBwcmVzZW50IGluY2FwYWJsZSBvZiBwYXJzaW5nIGpzb24gYmxv YnMKKwkgKiBpbmNyZW1lbnRhbGx5LCBzbyB3ZSBoYXZlIHRvIGFjY3VtdWxhdGUgdGhlIGVudGly ZSBiYWNrdXAgbWFuaWZlc3QKKwkgKiBiZWZvcmUgd2UgY2FuIGRvIGFueXRoaW5nIHdpdGggaXQu IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBmaXhlZCwgc2luY2UKKwkgKiBzb21lIHVzZXJzIG1pZ2h0 IGhhdmUgdmVyeSBsYXJnZSBudW1iZXJzIG9mIGZpbGVzIGluIHRoZSBkYXRhCisJICogZGlyZWN0 b3J5LgorCSAqLworCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmliLT5idWYsIGRhdGEsIGxlbik7 CisKKwkvKiBTd2l0Y2ggYmFjayB0byBwcmV2aW91cyBtZW1vcnkgY29udGV4dC4gKi8KKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSBhbiBJ bmNyZW1lbnRhbEJhY2t1cEluZm8gb2JqZWN0IGFmdGVyIGFsbCBtYW5pZmVzdCBkYXRhIGhhcwor ICogYmVlbiBzdXBwbGllZCB2aWEgY2FsbHMgdG8gQXBwZW5kSW5jcmVtZW50YWxNYW5pZmVzdERh dGEuCisgKi8KK3ZvaWQKK0ZpbmFsaXplSW5jcmVtZW50YWxNYW5pZmVzdChJbmNyZW1lbnRhbEJh Y2t1cEluZm8gKmliKQoreworCUpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCBjb250ZXh0OworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFN3aXRjaCB0byBvdXIgbWVtb3J5IGNvbnRl eHQuICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhpYi0+bWN4dCk7CisK KwkvKiBQYXJzZSB0aGUgbWFuaWZlc3QuICovCisJY29udGV4dC5wcml2YXRlX2RhdGEgPSBpYjsK Kwljb250ZXh0LnBlcl9maWxlX2NiID0gbWFuaWZlc3RfcHJvY2Vzc19maWxlOworCWNvbnRleHQu cGVyX3dhbF9yYW5nZV9jYiA9IG1hbmlmZXN0X3Byb2Nlc3Nfd2FsX3JhbmdlOworCWNvbnRleHQu ZXJyb3JfY2IgPSBtYW5pZmVzdF9yZXBvcnRfZXJyb3I7CisJanNvbl9wYXJzZV9tYW5pZmVzdCgm Y29udGV4dCwgaWItPmJ1Zi5kYXRhLCBpYi0+YnVmLmxlbik7CisKKwkvKiBEb25lIHdpdGggdGhl IGJ1ZmZlciwgc28gcmVsZWFzZSBtZW1vcnkuICovCisJcGZyZWUoaWItPmJ1Zi5kYXRhKTsKKwlp Yi0+YnVmLmRhdGEgPSBOVUxMOworCisJLyogU3dpdGNoIGJhY2sgdG8gcHJldmlvdXMgbWVtb3J5 IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisv KgorICogUHJlcGFyZSB0byB0YWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cC4KKyAqCisgKiBCZWZv cmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIEFwcGVuZEluY3JlbWVudGFsTWFuaWZlc3REYXRh IGFuZAorICogRmluYWxpemVJbmNyZW1lbnRhbE1hbmlmZXN0IHNob3VsZCBoYXZlIGFscmVhZHkg YmVlbiBjYWxsZWQgdG8gcGFzcyBhbGwKKyAqIHRoZSBtYW5pZmVzdCBkYXRhIHRvIHRoaXMgb2Jq ZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgc2FuaXR5IGNoZWNrcyBvbiB0aGUg ZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUKKyAqIG1hbmlmZXN0IGFuZCBmaWd1cmVzIG91dCBmb3Ig d2hpY2ggV0FMIHJhbmdlcyB3ZSBuZWVkIHN1bW1hcmllcywgYW5kCisgKiB3aGV0aGVyIHRob3Nl IHN1bW1hcmllcyBhcmUgYXZhaWxhYmxlLiBUaGVuLCBpdCByZWFkcyBhbmQgY29tYmluZXMgdGhl CisgKiBkYXRhIGZyb20gdGhvc2Ugc3VtbWFyeSBmaWxlcy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBi YWNrdXBfc3RhdGUgd2l0aCB0aGUKKyAqIHJlZmVyZW5jZSBUTEkgYW5kIExTTiBmb3IgdGhlIHBy aW9yIGJhY2t1cC4KKyAqLwordm9pZAorUHJlcGFyZUZvckluY3JlbWVudGFsQmFja3VwKEluY3Jl bWVudGFsQmFja3VwSW5mbyAqaWIsCisJCQkJCQkJQmFja3VwU3RhdGUgKmJhY2t1cF9zdGF0ZSkK K3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJTGlzdAkgICAqZXhwZWN0ZWRUTEVzOwor CUxpc3QJICAgKmFsbF93c2xpc3QsCisJCQkgICAqcmVxdWlyZWRfd3NsaXN0ID0gTklMOworCUxp c3RDZWxsICAgKmxjOworCVRpbWVMaW5lSGlzdG9yeUVudHJ5ICoqdGxlcDsKKwlpbnQJCQludW1f d2FsX3JhbmdlczsKKwlpbnQJCQlpOworCWJvb2wJCWZvdW5kX2JhY2t1cF9zdGFydF90bGkgPSBm YWxzZTsKKwlUaW1lTGluZUlECWVhcmxpZXN0X3dhbF9yYW5nZV90bGkgPSAwOworCVhMb2dSZWNQ dHIJZWFybGllc3Rfd2FsX3JhbmdlX3N0YXJ0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCVRp bWVMaW5lSUQJbGF0ZXN0X3dhbF9yYW5nZV90bGkgPSAwOworCVhMb2dSZWNQdHIJc3VtbWFyaXpl ZF9sc247CisJWExvZ1JlY1B0cglwZW5kaW5nX2xzbjsKKwlYTG9nUmVjUHRyCXByaW9yX3BlbmRp bmdfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJaW50CQkJZGVhZGN5Y2xlcyA9IDA7CisJVGlt ZXN0YW1wVHogaW5pdGlhbF90aW1lLAorCQkJCWN1cnJlbnRfdGltZTsKKworCUFzc2VydChpYi0+ YnVmLmRhdGEgPT0gTlVMTCk7CisKKwkvKiBTd2l0Y2ggdG8gb3VyIG1lbW9yeSBjb250ZXh0LiAq LworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaWItPm1jeHQpOworCisJLyoK KwkgKiBBIHZhbGlkIGJhY2t1cCBtYW5pZmVzdCBtdXN0IGFsd2F5cyBjb250YWluIGF0IGxlYXN0 IG9uZSBXQUwgcmFuZ2UKKwkgKiAodXN1YWxseSBleGFjdGx5IG9uZSwgdW5sZXNzIHRoZSBiYWNr dXAgc3Bhbm5lZCBhIHRpbWVsaW5lIHN3aXRjaCkuCisJICovCisJbnVtX3dhbF9yYW5nZXMgPSBs aXN0X2xlbmd0aChpYi0+bWFuaWZlc3Rfd2FsX3Jhbmdlcyk7CisJaWYgKG51bV93YWxfcmFuZ2Vz ID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygibWFuaWZlc3QgY29udGFpbnMg bm8gcmVxdWlyZWQgV0FMIHJhbmdlcyIpKSk7CisKKwkvKgorCSAqIE1hdGNoIHVwIHRoZSBUTElz IHRoYXQgYXBwZWFyIGluIHRoZSBXQUwgcmFuZ2VzIG9mIHRoZSBiYWNrdXAgbWFuaWZlc3QKKwkg KiB3aXRoIHRob3NlIHRoYXQgYXBwZWFyIGluIHRoaXMgc2VydmVyJ3MgdGltZWxpbmUgaGlzdG9y eS4gV2UgZXhwZWN0CisJICogZXZlcnkgYmFja3VwX3dhbF9yYW5nZSB0byBtYXRjaCB0byBhIFRp bWVMaW5lSGlzdG9yeUVudHJ5OyBpZiBpdCBkb2VzCisJICogbm90LCB0aGF0J3MgYW4gZXJyb3Iu CisJICoKKwkgKiBUaGlzIGxvb3AgYWxzbyBkZWNpZGVzIHdoaWNoIG9mIHRoZSBXQUwgcmFuZ2Vz IGlzIHRoZSBtYW5pZmVzdCBpcyBtb3N0CisJICogYW5jaWVudCBhbmQgd2hpY2ggb25lIGlzIHRo ZSBuZXdlc3QsIGFjY29yZGluZyB0byB0aGUgdGltZWxpbmUgaGlzdG9yeQorCSAqIG9mIHRoaXMg c2VydmVyLCBhbmQgc3RvcmVzIFRMSXMgb2YgdGhvc2UgV0FMIHJhbmdlcyBpbnRvCisJICogZWFy bGllc3Rfd2FsX3JhbmdlX3RsaSBhbmQgbGF0ZXN0X3dhbF9yYW5nZV90bGkuIEl0IGFsc28gdXBk YXRlcworCSAqIGVhcmxpZXN0X3dhbF9yYW5nZV9zdGFydF9sc24gdG8gdGhlIHN0YXJ0IExTTiBv ZiB0aGUgV0FMIHJhbmdlIGZvcgorCSAqIGVhcmxpZXN0X3dhbF9yYW5nZV90bGkuCisJICoKKwkg KiBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiByZWFkVGltZUxpbmVIaXN0b3J5IHB1dHMg dGhlIGxhdGVzdAorCSAqIHRpbWVsaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QsIG5v dCB0aGUgZW5kLiBIZW5jZSwgdGhlIGVhcmxpZXN0CisJICogVExJIGlzIHRoZSBvbmUgdGhhdCBv Y2N1cnMgbmVhcmVzdCB0aGUgZW5kIG9mIHRoZSBsaXN0IHJldHVybmVkIGJ5CisJICogcmVhZFRp bWVMaW5lSGlzdG9yeSwgYW5kIHRoZSBsYXRlc3QgVExJIGlzIHRoZSBvbmUgdGhhdCBvY2N1cnMg Y2xvc2VzdAorCSAqIHRvIHRoZSBiZWdpbm5pbmcuCisJICovCisJZXhwZWN0ZWRUTEVzID0gcmVh ZFRpbWVMaW5lSGlzdG9yeShiYWNrdXBfc3RhdGUtPnN0YXJ0dGxpKTsKKwl0bGVwID0gcGFsbG9j MChudW1fd2FsX3JhbmdlcyAqIHNpemVvZihUaW1lTGluZUhpc3RvcnlFbnRyeSAqKSk7CisJZm9y IChpID0gMDsgaSA8IG51bV93YWxfcmFuZ2VzOyArK2kpCisJeworCQliYWNrdXBfd2FsX3Jhbmdl ICpyYW5nZSA9IGxpc3RfbnRoKGliLT5tYW5pZmVzdF93YWxfcmFuZ2VzLCBpKTsKKwkJYm9vbAkJ c2F3X2VhcmxpZXN0X3dhbF9yYW5nZV90bGkgPSBmYWxzZTsKKwkJYm9vbAkJc2F3X2xhdGVzdF93 YWxfcmFuZ2VfdGxpID0gZmFsc2U7CisKKwkJLyogU2VhcmNoIHRoaXMgc2VydmVyJ3MgaGlzdG9y eSBmb3IgdGhpcyBXQUwgcmFuZ2UncyBUTEkuICovCisJCWZvcmVhY2gobGMsIGV4cGVjdGVkVExF cykKKwkJeworCQkJVGltZUxpbmVIaXN0b3J5RW50cnkgKnRsZSA9IGxmaXJzdChsYyk7CisKKwkJ CWlmICh0bGUtPnRsaSA9PSByYW5nZS0+dGxpKQorCQkJeworCQkJCXRsZXBbaV0gPSB0bGU7CisJ CQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh0bGUtPnRsaSA9PSBlYXJsaWVzdF93YWxfcmFuZ2Vf dGxpKQorCQkJCXNhd19lYXJsaWVzdF93YWxfcmFuZ2VfdGxpID0gdHJ1ZTsKKwkJCWlmICh0bGUt PnRsaSA9PSBsYXRlc3Rfd2FsX3JhbmdlX3RsaSkKKwkJCQlzYXdfbGF0ZXN0X3dhbF9yYW5nZV90 bGkgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogQW4gaW5jcmVtZW50YWwgYmFja3VwIGNhbiBv bmx5IGJlIHRha2VuIHJlbGF0aXZlIHRvIGEgYmFja3VwIHRoYXQKKwkJICogcmVwcmVzZW50cyBh IHByZXZpb3VzIHN0YXRlIG9mIHRoaXMgc2VydmVyLiBJZiB0aGUgYmFja3VwIHJlcXVpcmVzCisJ CSAqIFdBTCBmcm9tIGEgdGltZWxpbmUgdGhhdCdzIG5vdCBpbiBvdXIgaGlzdG9yeSwgdGhhdCBk ZWZpbml0ZWx5CisJCSAqIGlzbid0IHRoZSBjYXNlLgorCQkgKi8KKwkJaWYgKHRsZXBbaV0gPT0g TlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05P VF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJ0aW1lbGluZSAldSBmb3Vu ZCBpbiBtYW5pZmVzdCwgYnV0IG5vdCBpbiB0aGlzIHNlcnZlcidzIGhpc3RvcnkiLAorCQkJCQkJ CXJhbmdlLT50bGkpKSk7CisKKwkJLyoKKwkJICogSWYgd2UgZm91bmQgdGhpcyBUTEkgaW4gdGhl IHNlcnZlcidzIGhpc3RvcnkgYmVmb3JlIGVuY291bnRlcmluZworCQkgKiB0aGUgbGF0ZXN0IFRM SSBzZWVuIHNvIGZhciBpbiB0aGUgc2VydmVyJ3MgaGlzdG9yeSwgdGhlbiB0aGlzIFRMSQorCQkg KiBpcyB0aGUgbGF0ZXN0IG9uZSBzZWVuIHNvIGZhci4KKwkJICoKKwkJICogSWYgb24gdGhlIG90 aGVyIGhhbmQgd2Ugc2F3IHRoZSBlYXJsaWVzdCBUTEkgc2VlbiBzbyBmYXIgYmVmb3JlCisJCSAq IGZpbmRpbmcgdGhpcyBUTEksIHRoaXMgVExJIGlzIGVhcmxpZXIgdGhhbiB0aGUgZWFybGllc3Qg b25lIHNlZW4gc28KKwkJICogZmFyLiBBbmQgaWYgdGhpcyBpcyB0aGUgZmlyc3QgVExJIGZvciB3 aGljaCB3ZSd2ZSBzZWFyY2hlZCwgaXQncworCQkgKiBhbHNvIHRoZSBlYXJsaWVzdCBvbmUgc2Vl biBzbyBmYXIuCisJCSAqCisJCSAqIE9uIHRoZSBmaXJzdCBsb29wIGl0ZXJhdGlvbiwgYm90aCB0 aGluZ3Mgc2hvdWxkIG5lY2Vzc2FyaWx5IGJlCisJCSAqIHRydWUuCisJCSAqLworCQlpZiAoIXNh d19sYXRlc3Rfd2FsX3JhbmdlX3RsaSkKKwkJCWxhdGVzdF93YWxfcmFuZ2VfdGxpID0gcmFuZ2Ut PnRsaTsKKwkJaWYgKGVhcmxpZXN0X3dhbF9yYW5nZV90bGkgPT0gMCB8fCBzYXdfZWFybGllc3Rf d2FsX3JhbmdlX3RsaSkKKwkJeworCQkJZWFybGllc3Rfd2FsX3JhbmdlX3RsaSA9IHJhbmdlLT50 bGk7CisJCQllYXJsaWVzdF93YWxfcmFuZ2Vfc3RhcnRfbHNuID0gcmFuZ2UtPnN0YXJ0X2xzbjsK KwkJfQorCX0KKworCS8qCisJICogUHJvcGFnYXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmlv ciBiYWNrdXAgaW50byB0aGUgYmFja3VwX2xhYmVsIHRoYXQKKwkgKiB3aWxsIGJlIGdlbmVyYXRl ZCBmb3IgdGhpcyBiYWNrdXAuCisJICovCisJYmFja3VwX3N0YXRlLT5pc3RhcnRwb2ludCA9IGVh cmxpZXN0X3dhbF9yYW5nZV9zdGFydF9sc247CisJYmFja3VwX3N0YXRlLT5pc3RhcnR0bGkgPSBl YXJsaWVzdF93YWxfcmFuZ2VfdGxpOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgc3RhcnQgYW5k IGVuZCBMU05zIGZvciB0aGUgV0FMIHJhbmdlcyBpbiB0aGUgbWFuaWZlc3QuCisJICoKKwkgKiBD b21tb25seSwgdGhlcmUgd29uJ3QgYmUgYW55IHRpbWVsaW5lIHN3aXRjaGVzIGR1cmluZyB0aGUg cHJpb3IgYmFja3VwCisJICogYXQgYWxsLCBidXQgaWYgdGhlcmUgYXJlLCB0aGV5IHNob3VsZCBo YXBwZW4gYXQgdGhlIHNhbWUgTFNOcyB0aGF0IHRoaXMKKwkgKiBzZXJ2ZXIgc3dpdGNoZWQgdGlt ZWxpbmVzLgorCSAqCisJICogV2hldGhlciB0aGVyZSBhcmUgYW55IHRpbWVsaW5lIHN3aXRjaGVz IGR1cmluZyB0aGUgcHJpb3IgYmFja3VwIG9yIG5vdCwKKwkgKiB0aGUgcHJpb3IgYmFja3VwIHNo b3VsZG4ndCByZXF1aXJlIGFueSBXQUwgZnJvbSBhIHRpbWVsaW5lIHByaW9yIHRvIHRoZQorCSAq IHN0YXJ0IG9mIHRoYXQgdGltZWxpbmUuIEl0IGFsc28gc2hvdWxkbid0IHJlcXVpcmUgYW55IFdB TCBmcm9tIGxhdGVyCisJICogdGhhbiB0aGUgc3RhcnQgb2YgdGhpcyBiYWNrdXAuCisJICoKKwkg KiBJZiBhbnkgb2YgdGhlc2Ugc2FuaXR5IGNoZWNrcyBmYWlsLCBvbmUgcG9zc2libGUgZXhwbGFu YXRpb24gaXMgdGhhdAorCSAqIHRoZSB1c2VyIGhhcyBnZW5lcmF0ZWQgV0FMIG9uIHRoZSBzYW1l IHRpbWVsaW5lIHdpdGggdGhlIHNhbWUgTFNOcyBtb3JlCisJICogdGhhbiBvbmNlLiBGb3IgaW5z dGFuY2UsIGlmIHR3byBzdGFuZGJ5cyBydW5uaW5nIG9uIHRpbWVsaW5lIDEgd2VyZQorCSAqIGJv dGggcHJvbW90ZWQgYW5kIChkdWUgdG8gYSBicm9rZW4gYXJjaGl2aW5nIHNldHVwKSBib3RoIHNl bGVjdGVkIG5ldworCSAqIHRpbWVsaW5lIElEIDIsIHRoZW4gaXQncyBwb3NzaWJsZSB0aGF0IG9u ZSBvZiB0aGVzZSBjaGVja3MgbWlnaHQgdHJpcC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVyZSBh cmUgbG90cyBvZiB3YXlzIGZvciB0aGUgdXNlciB0byBkbyBzb21ldGhpbmcgdmVyeSBiYWQKKwkg KiB3aXRob3V0IHRyaXBwaW5nIGFueSBvZiB0aGVzZSBjaGVja3MsIGFuZCB0aGV5IGFyZSBub3Qg aW50ZW5kZWQgdG8gYmUKKwkgKiBjb21wcmVoZW5zaXZlLiBJdCdzIHByZXR0eSBoYXJkIHRvIHNl ZSBob3cgd2UgY291bGQgYmUgY2VydGFpbiBvZgorCSAqIGFueXRoaW5nIGhlcmUuIEhvd2V2ZXIs IGlmIHRoZXJlJ3MgYSBwcm9ibGVtIHN0YXJpbmcgdXMgcmlnaHQgaW4gdGhlCisJICogZmFjZSwg aXQncyBiZXN0IHRvIHJlcG9ydCBpdCwgc28gd2UgZG8uCisJICovCisJZm9yIChpID0gMDsgaSA8 IG51bV93YWxfcmFuZ2VzOyArK2kpCisJeworCQliYWNrdXBfd2FsX3JhbmdlICpyYW5nZSA9IGxp c3RfbnRoKGliLT5tYW5pZmVzdF93YWxfcmFuZ2VzLCBpKTsKKworCQlpZiAocmFuZ2UtPnRsaSA9 PSBlYXJsaWVzdF93YWxfcmFuZ2VfdGxpKQorCQl7CisJCQlpZiAocmFuZ2UtPnN0YXJ0X2xzbiA8 IHRsZXBbaV0tPmJlZ2luKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJCSBlcnJtc2coIm1h bmlmZXN0IHJlcXVpcmVzIFdBTCBmcm9tIGluaXRpYWwgdGltZWxpbmUgJXUgc3RhcnRpbmcgYXQg JVgvJVgsIGJ1dCB0aGF0IHRpbWVsaW5lIGJlZ2lucyBhdCAlWC8lWCIsCisJCQkJCQkJCXJhbmdl LT50bGksCisJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhyYW5nZS0+c3RhcnRfbHNuKSwKKwkJCQkJ CQkJTFNOX0ZPUk1BVF9BUkdTKHRsZXBbaV0tPmJlZ2luKSkpKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCWlmIChyYW5nZS0+c3RhcnRfbHNuICE9IHRsZXBbaV0tPmJlZ2luKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQkJCSBlcnJtc2coIm1hbmlmZXN0IHJlcXVpcmVzIFdBTCBmcm9tIGNvbnRp bnVhdGlvbiB0aW1lbGluZSAldSBzdGFydGluZyBhdCAlWC8lWCwgYnV0IHRoYXQgdGltZWxpbmUg YmVnaW5zIGF0ICVYLyVYIiwKKwkJCQkJCQkJcmFuZ2UtPnRsaSwKKwkJCQkJCQkJTFNOX0ZPUk1B VF9BUkdTKHJhbmdlLT5zdGFydF9sc24pLAorCQkJCQkJCQlMU05fRk9STUFUX0FSR1ModGxlcFtp XS0+YmVnaW4pKSkpOworCQl9CisKKwkJaWYgKHJhbmdlLT50bGkgPT0gbGF0ZXN0X3dhbF9yYW5n ZV90bGkpCisJCXsKKwkJCWlmIChyYW5nZS0+ZW5kX2xzbiA+IGJhY2t1cF9zdGF0ZS0+c3RhcnRw b2ludCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCQkgZXJybXNnKCJtYW5pZmVzdCByZXF1 aXJlcyBXQUwgZnJvbSBmaW5hbCB0aW1lbGluZSAldSBlbmRpbmcgYXQgJVgvJVgsIGJ1dCB0aGlz IGJhY2t1cCBzdGFydHMgYXQgJVgvJVgiLAorCQkJCQkJCQlyYW5nZS0+dGxpLAorCQkJCQkJCQlM U05fRk9STUFUX0FSR1MocmFuZ2UtPmVuZF9sc24pLAorCQkJCQkJCQlMU05fRk9STUFUX0FSR1Mo YmFja3VwX3N0YXRlLT5zdGFydHBvaW50KSkpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChy YW5nZS0+ZW5kX2xzbiAhPSB0bGVwW2ldLT5lbmQpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CQkJIGVycm1zZygibWFuaWZlc3QgcmVxdWlyZXMgV0FMIGZyb20gbm9uLWZpbmFsIHRpbWVsaW5l ICV1IGVuZGluZyBhdCAlWC8lWCwgYnV0IHRoaXMgc2VydmVyIHN3aXRjaGVkIHRpbWVsaW5lcyBh dCAlWC8lWCIsCisJCQkJCQkJCXJhbmdlLT50bGksCisJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhy YW5nZS0+ZW5kX2xzbiksCisJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyh0bGVwW2ldLT5lbmQpKSkp OworCQl9CisKKwl9CisKKwkvKgorCSAqIFdhaXQgZm9yIFdBTCBzdW1tYXJpemF0aW9uIHRvIGNh dGNoIHVwIHRvIHRoZSBiYWNrdXAgc3RhcnQgTFNOIChidXQKKwkgKiB0aW1lIG91dCBpZiBpdCBk b2Vzbid0IGRvIHNvIHF1aWNrbHkgZW5vdWdoKS4KKwkgKi8KKwlpbml0aWFsX3RpbWUgPSBjdXJy ZW50X3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJd2hpbGUgKDEpCisJeworCQlsb25n CQl0aW1lb3V0X2luX21zID0gMTAwMDA7CisJCXVuc2lnbmVkCWVsYXBzZWRfc2Vjb25kczsKKwor CQkvKgorCQkgKiBBbGlnbiB0aGUgd2FpdCB0aW1lIHRvIHByZXZlbnQgZHJpZnQuIFRoaXMgZG9l c24ndCByZWFsbHkgbWF0dGVyLAorCQkgKiBidXQgd2UnZCBsaWtlIHRoZSB3YXJuaW5ncyBhYm91 dCBob3cgbG9uZyB3ZSd2ZSBiZWVuIHdhaXRpbmcgdG8gc2F5CisJCSAqIDEwIHNlY29uZHMsIDIw IHNlY29uZHMsIDMwIHNlY29uZHMsIDQwIHNlY29uZHMgLi4uIHdpdGhvdXQgZXZlcgorCQkgKiBk cmlmdGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0ZW4uCisJCSAq LworCQl0aW1lb3V0X2luX21zIC09CisJCQlUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRz KGN1cnJlbnRfdGltZSwgaW5pdGlhbF90aW1lKSAlCisJCQl0aW1lb3V0X2luX21zOworCisJCS8q IFdhaXQgZm9yIHVwIHRvIDEwIHNlY29uZHMuICovCisJCXN1bW1hcml6ZWRfbHNuID0gV2FpdEZv cldhbFN1bW1hcml6YXRpb24oYmFja3VwX3N0YXRlLT5zdGFydHBvaW50LAorCQkJCQkJCQkJCQkJ IDEwMDAwLCAmcGVuZGluZ19sc24pOworCisJCS8qIElmIFdBTCBzdW1tYXJpemF0aW9uIGhhcyBw cm9ncmVzc2VkIHN1ZmZpY2llbnRseSwgc3RvcCB3YWl0aW5nLiAqLworCQlpZiAoc3VtbWFyaXpl ZF9sc24gPj0gYmFja3VwX3N0YXRlLT5zdGFydHBvaW50KQorCQkJYnJlYWs7CisKKwkJLyoKKwkJ ICogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBkdXJpbmcgd2hpY2ggdGhlcmUg aGFzIGJlZW4gbm8KKwkJICogcHJvZ3Jlc3Npb24gb2YgcGVuZGluZ19sc24uIElmIHBlbmRpbmdf bHNuIGlzIG5vdCBhZHZhbmNpbmcsIHRoYXQKKwkJICogbWVhbnMgdGhhdCBub3Qgb25seSBhcmUg bm8gbmV3IGZpbGVzIGFwcGVhcmluZyBvbiBkaXNrLCBidXQgd2UncmUKKwkJICogbm90IGV2ZW4g aW5jb3Jwb3JhdGluZyBuZXcgcmVjb3JkcyBpbnRvIHRoZSBpbi1tZW1vcnkgc3RhdGUuCisJCSAq LworCQlpZiAocGVuZGluZ19sc24gPiBwcmlvcl9wZW5kaW5nX2xzbikKKwkJeworCQkJcHJpb3Jf cGVuZGluZ19sc24gPSBwZW5kaW5nX2xzbjsKKwkJCWRlYWRjeWNsZXMgPSAwOworCQl9CisJCWVs c2UKKwkJCSsrZGVhZGN5Y2xlczsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBtYW5hZ2VkIHRvIHdh aXQgZm9yIGFuIGVudGlyZSBtaW51dGUgd2l0aG90IHRoZSBXQUwKKwkJICogc3VtbWFyaXplciBh YnNvcmJpbmcgYSBzaW5nbGUgV0FMIHJlY29yZCwgZXJyb3Igb3V0OyBwcm9iYWJseQorCQkgKiBz b21ldGhpbmcgaXMgd3JvbmcuCisJCSAqCisJCSAqIFdlIGNvdWxkIGNvbnNpZGVyIGFsc28gZXJy b3Jpbmcgb3V0IGlmIHRoZSBzdW1tYXJpemVyIGlzIHRha2luZyB0b28KKwkJICogbG9uZyB0byBj YXRjaCB1cCwgYnV0IGl0J3Mgbm90IGNsZWFyIHdoYXQgcmF0ZSBvZiBwcm9ncmVzcyB3b3VsZCBi ZQorCQkgKiBhY2NlcHRhYmxlIGFuZCB3aGF0IHdvdWxkIGJlIHRvbyBzbG93LiBTbyBpbnN0ZWFk LCB3ZSBqdXN0IHRyeSB0bworCQkgKiBlcnJvciBvdXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUn cyBubyBwcm9ncmVzcyBhdCBhbGwuIFRoYXQgc2VlbXMKKwkJICogbGlrZWx5IHRvIGNhdGNoIGEg cmVhc29uYWJsZSBudW1iZXIgb2YgdGhlIHRoaW5ncyB0aGF0IGNhbiBnbyB3cm9uZworCQkgKiBp biBwcmFjdGljZSAoZS5nLiB0aGUgc3VtbWFyaXplciBwcm9jZXNzIGlzIGNvbXBsZXRlbHkgaHVu Zywgc2F5CisJCSAqIGJlY2F1c2Ugc29tZWJvZHkgaG9va2VkIHVwIGEgZGVidWdnZXIgdG8gaXQg b3Igc29tZXRoaW5nKSB3aXRob3V0CisJCSAqIGdpdmluZyB1cCB0b28gcXVpY2tseSB3aGVuIHRo ZSBzeXRlbSBpcyBqdXN0IHNsb3cuCisJCSAqLworCQlpZiAoZGVhZGN5Y2xlcyA+PSA2KQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coIldBTCBzdW1tYXJpemF0aW9uIGlzIG5vdCBw cm9ncmVzc2luZyIpLAorCQkJCQkgZXJyZGV0YWlsKCJTdW1tYXJpemF0aW9uIGlzIG5lZWRlZCB0 aHJvdWdoICVYLyVYLCBidXQgaXMgc3R1Y2sgYXQgJVgvJVggb24gZGlzayBhbmQgJVgvJVggaW4g bWVtb3J5LiIsCisJCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGJhY2t1cF9zdGF0ZS0+c3RhcnRw b2ludCksCisJCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHN1bW1hcml6ZWRfbHNuKSwKKwkJCQkJ CQkgICBMU05fRk9STUFUX0FSR1MocGVuZGluZ19sc24pKSkpOworCisJCS8qCisJCSAqIE90aGVy d2lzZSwganVzdCBsZXQgdGhlIHVzZXIga25vdyB3aGF0J3MgaGFwcGVuaW5nLgorCQkgKi8KKwkJ Y3VycmVudF90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQllbGFwc2VkX3NlY29uZHMg PQorCQkJVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcyhpbml0aWFsX3RpbWUsIGN1cnJl bnRfdGltZSkgLyAxMDAwOworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygic3RpbGwg d2FpdGluZyBmb3IgV0FMIHN1bW1hcml6YXRpb24gdGhyb3VnaCAlWC8lWCBhZnRlciAlZCBzZWNv bmRzIiwKKwkJCQkJCUxTTl9GT1JNQVRfQVJHUyhiYWNrdXBfc3RhdGUtPnN0YXJ0cG9pbnQpLAor CQkJCQkJZWxhcHNlZF9zZWNvbmRzKSwKKwkJCQkgZXJyZGV0YWlsKCJTdW1tYXJpemF0aW9uIGhh cyByZWFjaGVkICVYLyVYIG9uIGRpc2sgYW5kICVYLyVYIGluIG1lbW9yeS4iLAorCQkJCQkJICAg TFNOX0ZPUk1BVF9BUkdTKHN1bW1hcml6ZWRfbHNuKSwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJH UyhwZW5kaW5nX2xzbikpKSk7CisJfQorCisJLyoKKwkgKiBSZXRyaWV2ZSBhIGxpc3Qgb2YgYWxs IFdBTCBzdW1tYXJpZXMgb24gYW55IHRpbWVsaW5lIHRoYXQgb3ZlcmxhcCB3aXRoCisJICogdGhl IExTTiByYW5nZSBvZiBpbnRlcmVzdC4gV2UgY291bGQgaW5zdGVhZCBjYWxsIEdldFdhbFN1bW1h cmllcygpIG9uY2UKKwkgKiBwZXIgdGltZWxpbmUgaW4gdGhlIGxvb3AgdGhhdCBmb2xsb3dzLCBi dXQgdGhhdCB3b3VsZCBpbnZvbHZlIHJlYWRpbmcKKwkgKiB0aGUgZGlyZWN0b3J5IG11bHRpcGxl IHRpbWVzLiBJdCBzaG91bGQgYmUgbWlsZGx5IGZhc3RlciAtIGFuZCBwZXJoYXBzCisJICogYSBi aXQgc2FmZXIgLSB0byBkbyBpdCBqdXN0IG9uY2UuCisJICovCisJYWxsX3dzbGlzdCA9IEdldFdh bFN1bW1hcmllcygwLCBlYXJsaWVzdF93YWxfcmFuZ2Vfc3RhcnRfbHNuLAorCQkJCQkJCQkgYmFj a3VwX3N0YXRlLT5zdGFydHBvaW50KTsKKworCS8qCisJICogV2UgbmVlZCBXQUwgc3VtbWFyaWVz IGZvciBldmVyeXRoaW5nIHRoYXQgaGFwcGVuZWQgZHVyaW5nIHRoZSBwcmlvcgorCSAqIGJhY2t1 cCBhbmQgZXZlcnl0aGluZyB0aGF0IGhhcHBlbmVkIGFmdGVyd2FyZCB1cCB1bnRpbCB0aGUgcG9p bnQgd2hlcmUKKwkgKiB0aGUgY3VycmVudCBiYWNrdXAgc3RhcnRlZC4KKwkgKi8KKwlmb3JlYWNo KGxjLCBleHBlY3RlZFRMRXMpCisJeworCQlUaW1lTGluZUhpc3RvcnlFbnRyeSAqdGxlID0gbGZp cnN0KGxjKTsKKwkJWExvZ1JlY1B0cgl0bGlfc3RhcnRfbHNuID0gdGxlLT5iZWdpbjsKKwkJWExv Z1JlY1B0cgl0bGlfZW5kX2xzbiA9IHRsZS0+ZW5kOworCQlYTG9nUmVjUHRyCXRsaV9taXNzaW5n X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlMaXN0CSAgICp0bGlfd3NsaXN0OworCisJCS8q CisJCSAqIFdvcmtpbmcgdGhyb3VnaCB0aGUgaGlzdG9yeSBvZiB0aGlzIHNlcnZlciBmcm9tIHRo ZSBjdXJyZW50CisJCSAqIHRpbWVsaW5lIGJhY2t3YXJkcywgd2Ugc2tpcCBldmVyeXRoaW5nIHVu dGlsIHdlIGZpbmQgdGhlIHRpbWVsaW5lCisJCSAqIHdoZXJlIHRoaXMgYmFja3VwIHN0YXJ0ZWQu IE1vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgbWVhbnMgd2Ugd29uJ3QKKwkJICogc2tpcCBhbnl0aGlu ZyBhdCBhbGwsIGFzIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgdGltZWxpbmUgaGFzCisJCSAqIGNo YW5nZWQgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmFja3VwIG1vbWVudHMgYWdvLgorCQkg Ki8KKwkJaWYgKHRsZS0+dGxpID09IGJhY2t1cF9zdGF0ZS0+c3RhcnR0bGkpCisJCXsKKwkJCWZv dW5kX2JhY2t1cF9zdGFydF90bGkgPSB0cnVlOworCQkJdGxpX2VuZF9sc24gPSBiYWNrdXBfc3Rh dGUtPnN0YXJ0cG9pbnQ7CisJCX0KKwkJZWxzZSBpZiAoIWZvdW5kX2JhY2t1cF9zdGFydF90bGkp CisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGaW5kIHRoZSBzdW1tYXJpZXMgdGhhdCBvdmVy bGFwIHRoZSBMU04gcmFuZ2Ugb2YgaW50ZXJlc3QgZm9yIHRoaXMKKwkJICogdGltZWxpbmUuIElm IHRoaXMgaXMgdGhlIGVhcmxpZXN0IHRpbWVsaW5lIGludm9sdmVkLCB0aGUgcmFuZ2Ugb2YKKwkJ ICogaW50ZXJlc3QgYmVnaW5zIHdpdGggdGhlIHN0YXJ0IExTTiBvZiB0aGUgcHJpb3IgYmFja3Vw OyBvdGhlcndpc2UsCisJCSAqIGl0IGJlZ2lucyBhdCB0aGUgTFNOIGF0IHdoaWNoIHRoaXMgdGlt ZWxpbmUgY2FtZSBpbnRvIGV4aXN0ZW5jZS4gSWYKKwkJICogdGhpcyBpcyB0aGUgbGF0ZXN0IFRM SSBpbnZvbHZlZCwgdGhlIHJhbmdlIG9mIGludGVyZXN0IGVuZHMgYXQgdGhlCisJCSAqIHN0YXJ0 IExTTiBvZiB0aGUgY3VycmVudCBiYWNrdXA7IG90aGVyd2lzZSwgaXQgZW5kcyBhdCB0aGUgcG9p bnQKKwkJICogd2hlcmUgd2Ugc3dpdGNoZWQgZnJvbSB0aGlzIHRpbWVsaW5lIHRvIHRoZSBuZXh0 IG9uZS4KKwkJICovCisJCWlmICh0bGUtPnRsaSA9PSBlYXJsaWVzdF93YWxfcmFuZ2VfdGxpKQor CQkJdGxpX3N0YXJ0X2xzbiA9IGVhcmxpZXN0X3dhbF9yYW5nZV9zdGFydF9sc247CisJCXRsaV93 c2xpc3QgPSBGaWx0ZXJXYWxTdW1tYXJpZXMoYWxsX3dzbGlzdCwgdGxlLT50bGksCisJCQkJCQkJ CQkJdGxpX3N0YXJ0X2xzbiwgdGxpX2VuZF9sc24pOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5v IGd1YXJhbnRlZSB0aGF0IHRoZSBXQUwgc3VtbWFyaWVzIHdlIGZvdW5kIGNvdmVyIHRoZQorCQkg KiBlbnRpcmUgcmFuZ2Ugb2YgTFNOcyBmb3Igd2hpY2ggc3VtbWFyaWVzIGFyZSByZXF1aXJlZCwg b3IgaW5kZWVkCisJCSAqIHRoYXQgd2UgZm91bmQgYW55IFdBTCBzdW1tYXJpZXMgYXQgYWxsLiBD aGVjayB3aGV0aGVyIHdlIGhhdmUgYQorCQkgKiBwcm9ibGVtIG9mIHRoYXQgc29ydC4KKwkJICov CisJCWlmICghV2FsU3VtbWFyaWVzQXJlQ29tcGxldGUodGxpX3dzbGlzdCwgdGxpX3N0YXJ0X2xz biwgdGxpX2VuZF9sc24sCisJCQkJCQkJCQkgJnRsaV9taXNzaW5nX2xzbikpCisJCXsKKwkJCWlm IChYTG9nUmVjUHRySXNJbnZhbGlkKHRsaV9taXNzaW5nX2xzbikpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCQkJIGVycm1zZygiV0FMIHN1bW1hcmllcyBhcmUgcmVxdWlyZWQgb24gdGltZWxp bmUgJXUgZnJvbSAlWC8lWCB0byAlWC8lWCwgYnV0IG5vIHN1bW1hcmllcyBmb3IgdGhhdCB0aW1l bGluZSBhbmQgTFNOIHJhbmdlIGV4aXN0IiwKKwkJCQkJCQkJdGxlLT50bGksCisJCQkJCQkJCUxT Tl9GT1JNQVRfQVJHUyh0bGlfc3RhcnRfbHNuKSwKKwkJCQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHRs aV9lbmRfbHNuKSkpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCQkgZXJy bXNnKCJXQUwgc3VtbWFyaWVzIGFyZSByZXF1aXJlZCBvbiB0aW1lbGluZSAldSBmcm9tICVYLyVY IHRvICVYLyVYLCBidXQgdGhlIHN1bW1hcmllcyBmb3IgdGhhdCB0aW1lbGluZSBhbmQgTFNOIHJh bmdlIGFyZSBpbmNvbXBsZXRlIiwKKwkJCQkJCQkJdGxlLT50bGksCisJCQkJCQkJCUxTTl9GT1JN QVRfQVJHUyh0bGlfc3RhcnRfbHNuKSwKKwkJCQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHRsaV9lbmRf bHNuKSksCisJCQkJCQkgZXJyZGV0YWlsKCJUaGUgZmlyc3QgdW5zdW1tYXJpemVkIExTTiBpcyB0 aGlzIHJhbmdlIGlzICVYLyVYLiIsCisJCQkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyh0bGlfbWlz c2luZ19sc24pKSkpOworCQl9CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhhdCB3ZSBuZWVkIHRv IHJlYWQgdGhlc2Ugc3VtbWFyaWVzLgorCQkgKgorCQkgKiBUZWNobmljYWxseSwgaXQncyBwb3Nz aWJsZSB0aGF0IHRoaXMgY291bGQgcmVhZCBtb3JlIGZpbGVzIHRoYW4KKwkJICogcmVxdWlyZWQs IHNpbmNlIHRsaV93c2xpc3QgaW4gdGhlb3J5IGNvdWxkIGNvbnRhaW4gcmVkdW5kYW50CisJCSAq IHN1bW1hcmllcy4gRm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgc3VtbWFyeSBmcm9tIDAvMTAw MDAwMDAgdG8KKwkJICogMC8yMDAwMDAwMCBhbmQgYWxzbyBvbmUgZnJvbSAwLzAwMDAwMDAwIHRv IDAvMzAwMDAwMDAsIHRoZW4gdGhlCisJCSAqIGxhdHRlciBzdWJzdW1lcyB0aGUgZm9ybWVyIGFu ZCB0aGUgZm9ybWVyIGNvdWxkIGJlIGlnbm9yZWQuCisJCSAqCisJCSAqIFdlIGlnbm9yZSB0aGlz IHBvc3NpYmlsaXR5IGJlY2F1c2UgdGhlIFdBTCBzdW1tYXJpemVyIG9ubHkgdHJpZXMgdG8KKwkJ ICogZ2VuZXJhdGUgc3VtbWFyaWVzIHRoYXQgZG8gbm90IG92ZXJsYXAuIElmIHNvbWVob3cgdGhl eSBleGlzdCwKKwkJICogd2UnbGwgZG8gYSBiaXQgb2YgZXh0cmEgd29yayBidXQgdGhlIHJlc3Vs dHMgc2hvdWxkIHN0aWxsIGJlCisJCSAqIGNvcnJlY3QuCisJCSAqLworCQlyZXF1aXJlZF93c2xp c3QgPSBsaXN0X2NvbmNhdChyZXF1aXJlZF93c2xpc3QsIHRsaV93c2xpc3QpOworCisJCS8qCisJ CSAqIFRpbWVsaW5lcyBlYXJsaWVyIHRoYW4gdGhlIG9uZSBpbiB3aGljaCB0aGUgcHJpb3IgYmFj a3VwIGJlZ2FuIGFyZQorCQkgKiBub3QgcmVsZXZhbnQuCisJCSAqLworCQlpZiAodGxlLT50bGkg PT0gZWFybGllc3Rfd2FsX3JhbmdlX3RsaSkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogUmVh ZCBhbGwgb2YgdGhlIHJlcXVpcmVkIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBmaWxlcyBhbmQgbWVy Z2UgYWxsIG9mCisJICogdGhlIGRhdGEgaW50byBhIHNpbmdsZSBpbi1tZW1vcnkgYmxvY2sgcmVm ZXJlbmNlIHRhYmxlLgorCSAqCisJICogU2VlIHRoZSBjb21tZW50cyBmb3Igc3RydWN0IEluY3Jl bWVudGFsQmFja3VwSW5mbyBmb3Igc29tZSB0aG91Z2h0cyBvbgorCSAqIG1lbW9yeSB1c2FnZS4K KwkgKi8KKwlpYi0+YnJ0YWIgPSBDcmVhdGVFbXB0eUJsb2NrUmVmVGFibGUoKTsKKwlmb3JlYWNo KGxjLCByZXF1aXJlZF93c2xpc3QpCisJeworCQlXYWxTdW1tYXJ5RmlsZSAqd3MgPSBsZmlyc3Qo bGMpOworCQlXYWxTdW1tYXJ5SU8gd3NpbzsKKwkJQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVy OworCQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwkJRm9ya051bWJlcglmb3JrbnVtOworCQlC bG9ja051bWJlciBsaW1pdF9ibG9jazsKKwkJQmxvY2tOdW1iZXIgYmxvY2tzW0JMT0NLU19QRVJf UkVBRF07CisKKwkJd3Npby5maWxlID0gT3BlbldhbFN1bW1hcnlGaWxlKHdzLCBmYWxzZSk7CisJ CXdzaW8uZmlsZXBvcyA9IDA7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJu YWwoInJlYWRpbmcgV0FMIHN1bW1hcnkgZmlsZSBcIiVzXCIiLAorCQkJCQkJCQkgRmlsZVBhdGhO YW1lKHdzaW8uZmlsZSkpKSk7CisJCXJlYWRlciA9IENyZWF0ZUJsb2NrUmVmVGFibGVSZWFkZXIo UmVhZFdhbFN1bW1hcnksICZ3c2lvLAorCQkJCQkJCQkJCSAgIEZpbGVQYXRoTmFtZSh3c2lvLmZp bGUpLAorCQkJCQkJCQkJCSAgIFJlcG9ydFdhbFN1bW1hcnlFcnJvciwgTlVMTCk7CisJCXdoaWxl IChCbG9ja1JlZlRhYmxlUmVhZGVyTmV4dFJlbGF0aW9uKHJlYWRlciwgJnJsb2NhdG9yLCAmZm9y a251bSwKKwkJCQkJCQkJCQkJICAgJmxpbWl0X2Jsb2NrKSkKKwkJeworCQkJQmxvY2tSZWZUYWJs ZVNldExpbWl0QmxvY2soaWItPmJydGFiLCAmcmxvY2F0b3IsCisJCQkJCQkJCQkgICBmb3JrbnVt LCBsaW1pdF9ibG9jayk7CisKKwkJCXdoaWxlICgxKQorCQkJeworCQkJCXVuc2lnbmVkCW5ibG9j a3M7CisJCQkJdW5zaWduZWQJaTsKKworCQkJCW5ibG9ja3MgPSBCbG9ja1JlZlRhYmxlUmVhZGVy R2V0QmxvY2tzKHJlYWRlciwgYmxvY2tzLAorCQkJCQkJCQkJCQkJCSAgIEJMT0NLU19QRVJfUkVB RCk7CisJCQkJaWYgKG5ibG9ja3MgPT0gMCkKKwkJCQkJYnJlYWs7CisKKwkJCQlmb3IgKGkgPSAw OyBpIDwgbmJsb2NrczsgKytpKQorCQkJCQlCbG9ja1JlZlRhYmxlTWFya0Jsb2NrTW9kaWZpZWQo aWItPmJydGFiLCAmcmxvY2F0b3IsCisJCQkJCQkJCQkJCQkgICBmb3JrbnVtLCBibG9ja3NbaV0p OworCQkJfQorCQl9CisJCURlc3Ryb3lCbG9ja1JlZlRhYmxlUmVhZGVyKHJlYWRlcik7CisJCUZp bGVDbG9zZSh3c2lvLmZpbGUpOworCX0KKworCS8qIFN3aXRjaCBiYWNrIHRvIHByZXZpb3VzIG1l bW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30K KworLyoKKyAqIEdldCB0aGUgcGF0aG5hbWUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGEgZmls ZSBpcyBzZW50IGluY3JlbWVudGFsbHkuCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHBhbGxvYydk IHN0cmluZy4KKyAqLworY2hhciAqCitHZXRJbmNyZW1lbnRhbEZpbGVQYXRoKE9pZCBkYm9pZCwg T2lkIHNwY29pZCwgUmVsRmlsZU51bWJlciByZWxmaWxlbnVtYmVyLAorCQkJCQkgICBGb3JrTnVt YmVyIGZvcmtudW0sIHVuc2lnbmVkIHNlZ25vKQoreworCWNoYXIJICAgKnBhdGg7CisJY2hhcgkg ICAqbGFzdHNsYXNoOworCWNoYXIJICAgKmlwYXRoOworCisJcGF0aCA9IEdldFJlbGF0aW9uUGF0 aChkYm9pZCwgc3Bjb2lkLCByZWxmaWxlbnVtYmVyLCBJbnZhbGlkQmFja2VuZElkLAorCQkJCQkJ ICAgZm9ya251bSk7CisKKwlsYXN0c2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJyk7CisJQXNzZXJ0 KGxhc3RzbGFzaCAhPSBOVUxMKTsKKwkqbGFzdHNsYXNoID0gJ1wwJzsKKworCWlmIChzZWdubyA+ IDApCisJCWlwYXRoID0gcHNwcmludGYoIiVzL0lOQ1JFTUVOVEFMLiVzLiV1IiwgcGF0aCwgbGFz dHNsYXNoICsgMSwgc2Vnbm8pOworCWVsc2UKKwkJaXBhdGggPSBwc3ByaW50ZigiJXMvSU5DUkVN RU5UQUwuJXMiLCBwYXRoLCBsYXN0c2xhc2ggKyAxKTsKKworCXBmcmVlKHBhdGgpOworCisJcmV0 dXJuIGlwYXRoOworfQorCisvKgorICogSG93IHNob3VsZCB3ZSBiYWNrIHVwIGEgcGFydGljdWxh ciBmaWxlIGFzIHBhcnQgb2YgYW4gaW5jcmVtZW50YWwgYmFja3VwPworICoKKyAqIElmIHRoZSBy ZXR1cm4gdmFsdWUgaXMgQkFDS19VUF9GSUxFX0ZVTExZLCBjYWxsZXIgc2hvdWxkIGJhY2sgdXAg dGhlIHdob2xlCisgKiBmaWxlIGp1c3QgYXMgaWYgdGhpcyB3ZXJlIG5vdCBhbiBpbmNyZW1lbnRh bCBiYWNrdXAuCisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBCQUNLX1VQX0ZJTEVfSU5D UkVNRU5UQUxMWSwgY2FsbGVyIHNob3VsZCBpbmNsdWRlCisgKiBhbiBpbmNyZW1lbnRhbCBmaWxl IGluIHRoZSBiYWNrdXAgaW5zdGVhZCBvZiB0aGUgZW50aXJlIGZpbGUuIE9uIHJldHVybiwKKyAq ICpudW1fYmxvY2tzX3JlcXVpcmVkIHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgYmxvY2tz IHRoYXQgbmVlZCB0byBiZQorICogc2VudCwgYW5kIHRoZSBhY3R1YWwgYmxvY2sgbnVtYmVycyB3 aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4KKyAqIHJlbGF0aXZlX2Jsb2NrX251bWJlcnMsIHdoaWNo IHNob3VsZCBiZSBhbiBhcnJheSBvZiBhdCBsZWFzdCBSRUxTRUdfU0laRS4KKyAqIEluIGFkZGl0 aW9uLCAqdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIHRo YXQgc2hvdWxkCisgKiBiZSBpbmNsdWRlZCBpbiB0aGUgaW5jcmVtZW50YWwgZmlsZS4KKyAqLwor RmlsZUJhY2t1cE1ldGhvZAorR2V0RmlsZUJhY2t1cE1ldGhvZChJbmNyZW1lbnRhbEJhY2t1cElu Zm8gKmliLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCQlPaWQgZGJvaWQsIE9pZCBzcGNvaWQsCisJ CQkJCVJlbEZpbGVOdW1iZXIgcmVsZmlsZW51bWJlciwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJ CQl1bnNpZ25lZCBzZWdubywgc2l6ZV90IHNpemUsCisJCQkJCXVuc2lnbmVkICpudW1fYmxvY2tz X3JlcXVpcmVkLAorCQkJCQlCbG9ja051bWJlciAqcmVsYXRpdmVfYmxvY2tfbnVtYmVycywKKwkJ CQkJdW5zaWduZWQgKnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoKQoreworCUJsb2NrTnVtYmVyIGFi c29sdXRlX2Jsb2NrX251bWJlcnNbUkVMU0VHX1NJWkVdOworCUJsb2NrTnVtYmVyIGxpbWl0X2Js b2NrOworCUJsb2NrTnVtYmVyIHN0YXJ0X2Jsa25vOworCUJsb2NrTnVtYmVyIHN0b3BfYmxrbm87 CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3I7CisJQmxvY2tSZWZUYWJsZUVudHJ5ICpicnRlbnRy eTsKKwl1bnNpZ25lZAlpOworCXVuc2lnbmVkCW5ibG9ja3M7CisKKwkvKiBTaG91bGQgb25seSBi ZSBjYWxsZWQgYWZ0ZXIgUHJlcGFyZUZvckluY3JlbWVudGFsQmFja3VwLiAqLworCUFzc2VydChp Yi0+YnVmLmRhdGEgPT0gTlVMTCk7CisKKwkvKgorCSAqIGRib2lkIGNvdWxkIGJlIEludmFsaWRP aWQgaWYgc2hhcmVkIHJlbCwgYnV0IHNwY29pZCBhbmQgcmVsZmlsZW51bWJlcgorCSAqIHNob3Vs ZCBoYXZlIGxlZ2FsIHZhbHVlcy4KKwkgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChzcGNvaWQpKTsK KwlBc3NlcnQoUmVsRmlsZU51bWJlcklzVmFsaWQocmVsZmlsZW51bWJlcikpOworCisJLyoKKwkg KiBJZiB0aGUgZmlsZSBzaXplIGlzIHRvbyBsYXJnZSBvciBub3QgYSBtdWx0aXBsZSBvZiBCTENL U1osIHRoZW4KKwkgKiBzb21ldGhpbmcgd2VpcmQgaXMgaGFwcGVuaW5nLCBzbyBnaXZlIHVwIGFu ZCBzZW5kIHRoZSB3aG9sZSBmaWxlLgorCSAqLworCWlmICgoc2l6ZSAlIEJMQ0tTWikgIT0gMCB8 fCBzaXplIC8gQkxDS1NaID4gUkVMU0VHX1NJWkUpCisJCXJldHVybiBCQUNLX1VQX0ZJTEVfRlVM TFk7CisKKwkvKgorCSAqIFRoZSBmcmVlLXNwYWNlIG1hcCBmb3JrIGlzIG5vdCBwcm9wZXJseSBX QUwtbG9nZ2VkLCBzbyB3ZSBuZWVkIHRvCisJICogYmFja3VwIHRoZSBlbnRpcmUgZmlsZSBldmVy eSB0aW1lLgorCSAqLworCWlmIChmb3JrbnVtID09IEZTTV9GT1JLTlVNKQorCQlyZXR1cm4gQkFD S19VUF9GSUxFX0ZVTExZOworCisJLyoKKwkgKiBJZiB0aGlzIGZpbGUgd2FzIG5vdCBwYXJ0IG9m IHRoZSBwcmlvciBiYWNrdXAsIGJhY2sgaXQgdXAgZnVsbHkuCisJICoKKwkgKiBJZiB0aGlzIGZp bGUgd2FzIGNyZWF0ZWQgYWZ0ZXIgdGhlIHByaW9yIGJhY2t1cCBhbmQgYmVmb3JlIHRoZSBzdGFy dCBvZgorCSAqIHRoZSBjdXJyZW50IGJhY2t1cCwgdGhlbiB0aGUgV0FMIHN1bW1hcnkgaW5mb3Jt YXRpb24gd2lsbCB0ZWxsIHVzIHRvCisJICogYmFjayB1cCB0aGUgd2hvbGUgZmlsZS4gSG93ZXZl ciwgaWYgdGhpcyBmaWxlIHdhcyBjcmVhdGVkIGFmdGVyIHRoZQorCSAqIHN0YXJ0IG9mIHRoZSBj dXJyZW50IGJhY2t1cCwgdGhlbiB0aGUgV0FMIHN1bW1hcnkgd29uJ3Qga25vdyBhbnl0aGluZwor CSAqIGFib3V0IGl0LiBXaXRob3V0IHRoaXMgbG9naWMsIHdlIHdvdWxkIGVycm9uZW91c2x5IGNv bmNsdWRlIHRoYXQgaXQgd2FzCisJICogT0sgdG8gc2VuZCBpdCBpbmNyZW1lbnRhbGx5LgorCSAq CisJICogTm90ZSB0aGF0IHRoZSBmaWxlIGNvdWxkIGhhdmUgZXhpc3RlZCBhdCB0aGUgdGltZSBv ZiB0aGUgcHJpb3IgYmFja3VwLAorCSAqIGdvdHRlbiBkZWxldGVkLCBhbmQgdGhlbiBhIG5ldyBm aWxlIHdpdGggdGhlIHNhbWUgbmFtZSBjb3VsZCBoYXZlIGJlZW4KKwkgKiBjcmVhdGVkLiAgSW4g dGhhdCBjYXNlLCB0aGlzIGxvZ2ljIHdvbid0IHByZXZlbnQgdGhlIGZpbGUgZnJvbSBiZWluZwor CSAqIGJhY2tlZCB1cCBpbmNyZW1lbnRhbGx5LiBCdXQsIGlmIHRoZSBkZWxldGlvbiBoYXBwZW5l ZCBiZWZvcmUgdGhlIHN0YXJ0CisJICogb2YgdGhlIGN1cnJlbnQgYmFja3VwLCB0aGUgbGltaXQg YmxvY2sgd2lsbCBiZSAwLCBpbmR1Y2luZyBhIGZ1bGwKKwkgKiBiYWNrdXAuIElmIHRoZSBkZWxl dGlvbiBoYXBwZW5lZCBhZnRlciB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgYmFja3VwLAorCSAq IHJlY29uc3RydWN0aW9uIHdpbGwgZXJyb25lb3VzbHkgY29tYmluZSBibG9ja3MgZnJvbSB0aGUg Y3VycmVudAorCSAqIGxpZmVzcGFuIG9mIHRoZSBmaWxlIHdpdGggYmxvY2tzIGZyb20gdGhlIHBy ZXZpb3VzIGxpZmVzcGFuIC0tIGJ1dCBpbgorCSAqIHRoaXMgdHlwZSBvZiBjYXNlLCBXQUwgcmVw bGF5IHRvIHJlYWNoIGJhY2t1cCBjb25zaXN0ZW5jeSBzaG91bGQgcmVtb3ZlCisJICogYW5kIHJl Y3JlYXRlIHRoZSBmaWxlIGFueXdheSwgc28gdGhlIGluaXRpYWwgYm9ndXMgY29udGVudHMgc2hv dWxkIG5vdAorCSAqIG1hdHRlci4KKwkgKi8KKwlpZiAoYmFja3VwX2ZpbGVfbG9va3VwKGliLT5t YW5pZmVzdF9maWxlcywgcGF0aCkgPT0gTlVMTCkKKwl7CisJCWNoYXIJICAgKmlwYXRoOworCisJ CWlwYXRoID0gR2V0SW5jcmVtZW50YWxGaWxlUGF0aChkYm9pZCwgc3Bjb2lkLCByZWxmaWxlbnVt YmVyLAorCQkJCQkJCQkJICAgZm9ya251bSwgc2Vnbm8pOworCQlpZiAoYmFja3VwX2ZpbGVfbG9v a3VwKGliLT5tYW5pZmVzdF9maWxlcywgaXBhdGgpID09IE5VTEwpCisJCQlyZXR1cm4gQkFDS19V UF9GSUxFX0ZVTExZOworCX0KKworCS8qIExvb2sgdXAgdGhlIGJsb2NrIHJlZmVyZW5jZSB0YWJs ZSBlbnRyeS4gKi8KKwlybG9jYXRvci5zcGNPaWQgPSBzcGNvaWQ7CisJcmxvY2F0b3IuZGJPaWQg PSBkYm9pZDsKKwlybG9jYXRvci5yZWxOdW1iZXIgPSByZWxmaWxlbnVtYmVyOworCWJydGVudHJ5 ID0gQmxvY2tSZWZUYWJsZUdldEVudHJ5KGliLT5icnRhYiwgJnJsb2NhdG9yLCBmb3JrbnVtLAor CQkJCQkJCQkJICZsaW1pdF9ibG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGVudHJ5 LCB0aGVuIHRoZXJlIGhhdmUgYmVlbiBubyBXQUwtbG9nZ2VkIGNoYW5nZXMgdG8gdGhlCisJICog cmVsYXRpb24gc2luY2UgdGhlIHByZWRlY2Vzc29yIGJhY2t1cCB3YXMgdGFrZW4sIHNvIHdlIGNh biBiYWNrIGl0IHVwCisJICogaW5jcmVtZW50YWxseSBhbmQgbmVlZCBub3QgaW5jbHVkZSBhbnkg bW9kaWZpZWQgYmxvY2tzLgorCSAqCisJICogSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgemVyby1s ZW5ndGgsIHdlIHNob3VsZCBkbyBhIGZ1bGwgYmFja3VwLAorCSAqIGJlY2F1c2UgYW4gaW5jcmVt ZW50YWwgZmlsZSBpcyBhbHdheXMgbW9yZSB0aGFuIHplcm8gbGVuZ3RoLCBhbmQgaXQncworCSAq IHNpbGx5IHRvIHRha2UgYW4gaW5jcmVtZW50YWwgYmFja3VwIHdoZW4gYSBmdWxsIGJhY2t1cCB3 b3VsZCBiZQorCSAqIHNtYWxsZXIuCisJICovCisJaWYgKGJydGVudHJ5ID09IE5VTEwpCisJewor CQlpZiAoc2l6ZSA9PSAwKQorCQkJcmV0dXJuIEJBQ0tfVVBfRklMRV9GVUxMWTsKKwkJKm51bV9i bG9ja3NfcmVxdWlyZWQgPSAwOworCQkqdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggPSBzaXplIC8g QkxDS1NaOworCQlyZXR1cm4gQkFDS19VUF9GSUxFX0lOQ1JFTUVOVEFMTFk7CisJfQorCisJLyoK KwkgKiBJZiB0aGUgbGltaXRfYmxvY2sgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwb2lu dCB3aGVyZSB0aGlzCisJICogc2VnbWVudCBzdGFydHMsIHNlbmQgdGhlIHdob2xlIGZpbGUuCisJ ICovCisJaWYgKGxpbWl0X2Jsb2NrIDw9IHNlZ25vICogUkVMU0VHX1NJWkUpCisJCXJldHVybiBC QUNLX1VQX0ZJTEVfRlVMTFk7CisKKwkvKgorCSAqIEdldCByZWxldmFudCBlbnRyaWVzIGZyb20g dGhlIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBlbnRyeS4KKwkgKgorCSAqIFdlIHNob3VsZG4ndCBv dmVyZmxvdyBjb21wdXRpbmcgdGhlIHN0YXJ0IG9yIHN0b3AgYmxvY2sgbnVtYmVycywgYnV0IGlm CisJICogaXQgbWFuYWdlcyB0byBoYXBwZW4gc29tZWhvdywgZGV0ZWN0IGl0IGFuZCB0aHJvdyBh biBlcnJvci4KKwkgKi8KKwlzdGFydF9ibGtubyA9IHNlZ25vICogUkVMU0VHX1NJWkU7CisJc3Rv cF9ibGtubyA9IHN0YXJ0X2Jsa25vICsgKHNpemUgLyBCTENLU1opOworCWlmIChzdGFydF9ibGtu byAvIFJFTFNFR19TSVpFICE9IHNlZ25vIHx8IHN0b3BfYmxrbm8gPCBzdGFydF9ibGtubykKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAorCQkJ CWVycm1zZ19pbnRlcm5hbCgib3ZlcmZsb3cgY29tcHV0aW5nIGJsb2NrIG51bWJlciBib3VuZHMg Zm9yIHNlZ21lbnQgJXUgd2l0aCBzaXplICV6dSIsCisJCQkJCQkJCXNlZ25vLCBzaXplKSk7CisJ bmJsb2NrcyA9IEJsb2NrUmVmVGFibGVFbnRyeUdldEJsb2NrcyhicnRlbnRyeSwgc3RhcnRfYmxr bm8sIHN0b3BfYmxrbm8sCisJCQkJCQkJCQkJICBhYnNvbHV0ZV9ibG9ja19udW1iZXJzLCBSRUxT RUdfU0laRSk7CisJQXNzZXJ0KG5ibG9ja3MgPD0gUkVMU0VHX1NJWkUpOworCisJLyoKKwkgKiBJ ZiB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIHNlbmQgbmVhcmx5IGFsbCBvZiB0aGUgYmxvY2tzLCB0 aGVuIGp1c3Qgc2VuZAorCSAqIHRoZSB3aG9sZSBmaWxlLCBiZWNhdXNlIHRoYXQgd29uJ3QgcmVx dWlyZSBtdWNoIGV4dHJhIHN0b3JhZ2Ugb3IKKwkgKiB0cmFuc2ZlciBhbmQgd2lsbCBzcGVlZCB1 cCBhbmQgc2ltcGxpZnkgYmFja3VwIHJlc3RvcmF0aW9uLiBJdCdzIG5vdAorCSAqIGNsZWFyIHdo YXQgdGhyZXNob2xkIGlzIG1vc3QgYXBwcm9wcmlhdGUgaGVyZSBhbmQgcGVyaGFwcyBpdCBvdWdo dCB0bworCSAqIGJlIGNvbmZpZ3VyYWJsZSwgYnV0IGZvciBub3cgd2UncmUganVzdCBnb2luZyB0 byBzYXkgdGhhdCBpZiB3ZSdkIG5lZWQKKwkgKiB0byBzZW5kIDkwJSBvZiB0aGUgYmxvY2tzIGFu eXdheSwgZ2l2ZSB1cCBhbmQgc2VuZCB0aGUgd2hvbGUgZmlsZS4KKwkgKgorCSAqIE5COiBJZiB5 b3UgY2hhbmdlIHRoZSB0aHJlc2hvbGQgaGVyZSwgYXQgbGVhc3QgbWFrZSBzdXJlIHRvIGJhY2sg dXAgdGhlCisJICogZmlsZSBmdWxseSB3aGVuIGV2ZXJ5IHNpbmdsZSBibG9jayBtdXN0IGJlIHNl bnQsIGJlY2F1c2UgdGhlcmUncworCSAqIG5vdGhpbmcgZ29vZCBhYm91dCBzZW5kaW5nIGFuIGlu Y3JlbWVudGFsIGZpbGUgaW4gdGhhdCBjYXNlLgorCSAqLworCWlmIChuYmxvY2tzICogQkxDS1Na ID4gc2l6ZSAqIDAuOSkKKwkJcmV0dXJuIEJBQ0tfVVBfRklMRV9GVUxMWTsKKworCS8qCisJICog TG9va3MgbGlrZSB3ZSBjYW4gc2VuZCBhbiBpbmNyZW1lbnRhbCBmaWxlLCBzbyBzb3J0IHRoZSBh YnNvbHV0ZSB0aGUKKwkgKiBibG9jayBudW1iZXJzIGFuZCB0aGVuIHRyYW5zcG9zZSBhYnNvbHV0 ZSBibG9jayBudW1iZXJzIHRvIHJlbGF0aXZlCisJICogYmxvY2sgbnVtYmVycy4KKwkgKgorCSAq IE5COiBJZiB0aGUgYmxvY2sgcmVmZXJlbmNlIHRhYmxlIHdhcyB1c2luZyB0aGUgYml0bWFwIHJl cHJlc2VudGF0aW9uCisJICogZm9yIGEgZ2l2ZW4gY2h1bmssIHRoZSBibG9jayBudW1iZXJzIGlu IHRoYXQgY2h1bmsgd2lsbCBhbHJlYWR5IGJlCisJICogc29ydGVkLCBidXQgd2hlbiB0aGUgYXJy YXktb2Ytb2Zmc2V0cyByZXByZXNlbnRhdGlvbiBpcyB1c2VkLCB3ZSBjYW4KKwkgKiByZWNlaXZl IGJsb2NrIG51bWJlcnMgaGVyZSBvdXQgb2Ygb3JkZXIuCisJICovCisJcXNvcnQoYWJzb2x1dGVf YmxvY2tfbnVtYmVycywgbmJsb2Nrcywgc2l6ZW9mKEJsb2NrTnVtYmVyKSwKKwkJICBjb21wYXJl X2Jsb2NrX251bWJlcnMpOworCWZvciAoaSA9IDA7IGkgPCBuYmxvY2tzOyArK2kpCisJCXJlbGF0 aXZlX2Jsb2NrX251bWJlcnNbaV0gPSBhYnNvbHV0ZV9ibG9ja19udW1iZXJzW2ldIC0gc3RhcnRf Ymxrbm87CisJKm51bV9ibG9ja3NfcmVxdWlyZWQgPSBuYmxvY2tzOworCisJLyoKKwkgKiBUaGUg dHJ1bmNhdGlvbiBibG9jayBsZW5ndGggaXMgdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSByZWNv bnN0cnVjdGVkCisJICogZmlsZS4gQW55IGJsb2NrIG51bWJlcnMgYmVsb3cgdGhpcyB0aHJlc2hv bGQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4KKwkgKiB0aGUgYmFja3VwIG5lZWQgdG8gYmUgZmV0 Y2hlZCBmcm9tIHRoZSBwcmlvciBiYWNrdXAuIEF0IG9yIGFib3ZlIHRoaXMKKwkgKiB0aHJlc2hv bGQsIGJsb2NrcyBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IGlmIHRoZXkg YXJlCisJICogcHJlc2VudCBpbiB0aGUgYmFja3VwLiAoVGhpcyBtYXkgcmVxdWlyZSBpbnNlcnRp bmcgemVybyBibG9ja3MgaWYgdGhlCisJICogYmxvY2tzIGluY2x1ZGVkIGluIHRoZSBiYWNrdXAg YXJlIG5vbi1jb25zZWN1dGl2ZS4pCisJICovCisJKnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoID0g c2l6ZSAvIEJMQ0tTWjsKKwlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGxpbWl0X2Jsb2NrKSkKKwl7 CisJCXVuc2lnbmVkCXJlbGF0aXZlX2xpbWl0ID0gbGltaXRfYmxvY2sgLSBzZWdubyAqIFJFTFNF R19TSVpFOworCisJCWlmICgqdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggPCByZWxhdGl2ZV9saW1p dCkKKwkJCSp0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCA9IHJlbGF0aXZlX2xpbWl0OworCX0KKwor CS8qIFNlbmQgaXQgaW5jcmVtZW50YWxseS4gKi8KKwlyZXR1cm4gQkFDS19VUF9GSUxFX0lOQ1JF TUVOVEFMTFk7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBzaXplIGZvciBhbiBpbmNyZW1lbnRh bCBmaWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBudW1iZXIgb2YgYmxvY2tzLgorICovCitleHRlcm4g c2l6ZV90CitHZXRJbmNyZW1lbnRhbEZpbGVTaXplKHVuc2lnbmVkIG51bV9ibG9ja3NfcmVxdWly ZWQpCit7CisJc2l6ZV90CQlyZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgd2UncmUgbm90IGdvaW5n IHRvIG92ZXJmbG93LiAqLworCUFzc2VydChudW1fYmxvY2tzX3JlcXVpcmVkIDw9IFJFTFNFR19T SVpFKTsKKworCS8qCisJICogVGhyZWUgZm91ciBieXRlIHF1YW50aXRpZXMgKG1hZ2ljIG51bWJl ciwgdHJ1bmNhdGlvbiBibG9jayBsZW5ndGgsCisJICogYmxvY2sgY291bnQpIGZvbGxvd2VkIGJ5 IGJsb2NrIG51bWJlcnMgZm9sbG93ZWQgYnkgYmxvY2sgY29udGVudHMuCisJICovCisJcmVzdWx0 ID0gMyAqIHNpemVvZih1aW50MzIpOworCXJlc3VsdCArPSAoQkxDS1NaICsgc2l6ZW9mKEJsb2Nr TnVtYmVyKSkgKiBudW1fYmxvY2tzX3JlcXVpcmVkOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZmlsZW1hcCBoYXNoIHRhYmxlLgorICovCitzdGF0 aWMgdWludDMyCitoYXNoX3N0cmluZ19wb2ludGVyKGNvbnN0IGNoYXIgKnMpCit7CisJdW5zaWdu ZWQgY2hhciAqc3MgPSAodW5zaWduZWQgY2hhciAqKSBzOworCisJcmV0dXJuIGhhc2hfYnl0ZXMo c3MsIHN0cmxlbihzKSk7Cit9CisKKy8qCisgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgZm9y IGVhY2ggZmlsZSBtZW50aW9uZWQgaW4gdGhlIGJhY2t1cCBtYW5pZmVzdC4KKyAqCisgKiBXZSBz dG9yZSB0aGUgcGF0aCB0byBlYWNoIGZpbGUgYW5kIHRoZSBzaXplIG9mIGVhY2ggZmlsZSBmb3Ig c2FuaXR5LWNoZWNraW5nCisgKiBwdXJwb3Nlcy4gRm9yIGZ1cnRoZXIgZGV0YWlscywgc2VlIGNv bW1lbnRzIGZvciBJbmNyZW1lbnRhbEJhY2t1cEluZm8uCisgKi8KK3N0YXRpYyB2b2lkCittYW5p ZmVzdF9wcm9jZXNzX2ZpbGUoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJ CQkgIGNoYXIgKnBhdGhuYW1lLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICBwZ19jaGVja3N1bV90eXBl IGNoZWNrc3VtX3R5cGUsCisJCQkJCSAgaW50IGNoZWNrc3VtX2xlbmd0aCwKKwkJCQkJICB1aW50 OCAqY2hlY2tzdW1fcGF5bG9hZCkKK3sKKwlJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliID0gY29u dGV4dC0+cHJpdmF0ZV9kYXRhOworCWJhY2t1cF9maWxlX2VudHJ5ICplbnRyeTsKKwlib29sCQlm b3VuZDsKKworCWVudHJ5ID0gYmFja3VwX2ZpbGVfaW5zZXJ0KGliLT5tYW5pZmVzdF9maWxlcywg cGF0aG5hbWUsICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwl7CisJCWVudHJ5LT5wYXRoID0gTWVt b3J5Q29udGV4dFN0cmR1cChpYi0+bWFuaWZlc3RfZmlsZXMtPmN0eCwKKwkJCQkJCQkJCQkgIHBh dGhuYW1lKTsKKwkJZW50cnktPnNpemUgPSBzaXplOworCX0KK30KKworLyoKKyAqIFRoaXMgY2Fs bGJhY2sgaXMgaW52b2tlZCBmb3IgZWFjaCBXQUwgcmFuZ2UgbWVudGlvbmVkIGluIHRoZSBiYWNr dXAKKyAqIG1hbmlmZXN0LgorICoKKyAqIFdlJ3JlIGp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmlu ZyB0aGUgb2xkZXN0IExTTiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgVExJCisgKiB0aGF0IGFwcGVh ciBpbiBhbnkgV0FMIHJhbmdlLgorICovCitzdGF0aWMgdm9pZAorbWFuaWZlc3RfcHJvY2Vzc193 YWxfcmFuZ2UoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICAgVGlt ZUxpbmVJRCB0bGksIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAorCQkJCQkJICAgWExvZ1JlY1B0ciBl bmRfbHNuKQoreworCUluY3JlbWVudGFsQmFja3VwSW5mbyAqaWIgPSBjb250ZXh0LT5wcml2YXRl X2RhdGE7CisJYmFja3VwX3dhbF9yYW5nZSAqcmFuZ2UgPSBwYWxsb2Moc2l6ZW9mKGJhY2t1cF93 YWxfcmFuZ2UpKTsKKworCXJhbmdlLT50bGkgPSB0bGk7CisJcmFuZ2UtPnN0YXJ0X2xzbiA9IHN0 YXJ0X2xzbjsKKwlyYW5nZS0+ZW5kX2xzbiA9IGVuZF9sc247CisJaWItPm1hbmlmZXN0X3dhbF9y YW5nZXMgPSBsYXBwZW5kKGliLT5tYW5pZmVzdF93YWxfcmFuZ2VzLCByYW5nZSk7Cit9CisKKy8q CisgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHBh cnNpbmcgdGhlIGJhY2t1cAorICogbWFuaWZlc3QuCisgKi8KK3N0YXRpYyB2b2lkCittYW5pZmVz dF9yZXBvcnRfZXJyb3IoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBj aGFyICpmbXQsLi4uKQoreworCVN0cmluZ0luZm9EYXRhIGVycmJ1ZjsKKworCWluaXRTdHJpbmdJ bmZvKCZlcnJidWYpOworCisJZm9yICg7OykKKwl7CisJCXZhX2xpc3QJCWFwOworCQlpbnQJCQlu ZWVkZWQ7CisKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCW5lZWRlZCA9IGFwcGVuZFN0cmluZ0lu Zm9WQSgmZXJyYnVmLCBmbXQsIGFwKTsKKwkJdmFfZW5kKGFwKTsKKwkJaWYgKG5lZWRlZCA9PSAw KQorCQkJYnJlYWs7CisJCWVubGFyZ2VTdHJpbmdJbmZvKCZlcnJidWYsIG5lZWRlZCk7CisJfQor CisJZXJlcG9ydChFUlJPUiwKKwkJCWVycm1zZ19pbnRlcm5hbCgiJXMiLCBlcnJidWYuZGF0YSkp OworfQorCisvKgorICogUXVpY2tzb3J0IGNvbXBhcmF0b3IgZm9yIGJsb2NrIG51bWJlcnMuCisg Ki8KK3N0YXRpYyBpbnQKK2NvbXBhcmVfYmxvY2tfbnVtYmVycyhjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKQoreworCUJsb2NrTnVtYmVyIGFhID0gKihCbG9ja051bWJlciAqKSBhOworCUJs b2NrTnVtYmVyIGJiID0gKihCbG9ja051bWJlciAqKSBiOworCisJaWYgKGFhID4gYmIpCisJCXJl dHVybiAxOworCWVsc2UgaWYgKGFhID09IGJiKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVy biAtMTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZCBiL3Ny Yy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZAppbmRleCA1ZDRlYmUzZWJlLi4yYTZhMmRjN2Mw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jh Y2tlbmQvYmFja3VwL21lc29uLmJ1aWxkCkBAIC01LDYgKzUsNyBAQCBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdiYXNlYmFja3VwLmMnLAogICAnYmFzZWJhY2t1cF9jb3B5LmMnLAogICAn YmFzZWJhY2t1cF9nemlwLmMnLAorICAnYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5jJywKICAgJ2Jh c2ViYWNrdXBfbHo0LmMnLAogICAnYmFzZWJhY2t1cF9wcm9ncmVzcy5jJywKICAgJ2Jhc2ViYWNr dXBfc2VydmVyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9n cmFtLnkgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBsX2dyYW0ueQppbmRleCAwYzg3NGUz M2NmLi5hNWQxMThlZDY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBs X2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBsX2dyYW0ueQpAQCAtNzYs MTEgKzc2LDEyIEBAIE5vZGUgKnJlcGxpY2F0aW9uX3BhcnNlX3Jlc3VsdDsKICV0b2tlbiBLX0VY UE9SVF9TTkFQU0hPVAogJXRva2VuIEtfTk9FWFBPUlRfU05BUFNIT1QKICV0b2tlbiBLX1VTRV9T TkFQU0hPVAorJXRva2VuIEtfVVBMT0FEX01BTklGRVNUCiAKICV0eXBlIDxub2RlPgljb21tYW5k CiAldHlwZSA8bm9kZT4JYmFzZV9iYWNrdXAgc3RhcnRfcmVwbGljYXRpb24gc3RhcnRfbG9naWNh bF9yZXBsaWNhdGlvbgogCQkJCWNyZWF0ZV9yZXBsaWNhdGlvbl9zbG90IGRyb3BfcmVwbGljYXRp b25fc2xvdCBpZGVudGlmeV9zeXN0ZW0KLQkJCQlyZWFkX3JlcGxpY2F0aW9uX3Nsb3QgdGltZWxp bmVfaGlzdG9yeSBzaG93CisJCQkJcmVhZF9yZXBsaWNhdGlvbl9zbG90IHRpbWVsaW5lX2hpc3Rv cnkgc2hvdyB1cGxvYWRfbWFuaWZlc3QKICV0eXBlIDxsaXN0PglnZW5lcmljX29wdGlvbl9saXN0 CiAldHlwZSA8ZGVmZWx0PglnZW5lcmljX29wdGlvbgogJXR5cGUgPHVpbnR2YWw+CW9wdF90aW1l bGluZQpAQCAtMTE0LDYgKzExNSw3IEBAIGNvbW1hbmQ6CiAJCQl8IHJlYWRfcmVwbGljYXRpb25f c2xvdAogCQkJfCB0aW1lbGluZV9oaXN0b3J5CiAJCQl8IHNob3cKKwkJCXwgdXBsb2FkX21hbmlm ZXN0CiAJCQk7CiAKIC8qCkBAIC0zMDcsNiArMzA5LDE1IEBAIHRpbWVsaW5lX2hpc3Rvcnk6CiAJ CQkJfQogCQkJOwogCisvKiBVUExPQURfTUFOSUZFU1QgZG9lc24ndCBjdXJyZW50bHkgYWNjZXB0 IGFueSBhcmd1bWVudHMgKi8KK3VwbG9hZF9tYW5pZmVzdDoKKwkJCUtfVVBMT0FEX01BTklGRVNU CisJCQkJeworCQkJCQlVcGxvYWRNYW5pZmVzdENtZCAqY21kID0gbWFrZU5vZGUoVXBsb2FkTWFu aWZlc3RDbWQpOworCisJCQkJCSQkID0gKE5vZGUgKikgY21kOworCQkJCX0KKwogb3B0X3BoeXNp Y2FsOgogCQkJS19QSFlTSUNBTAogCQkJfCAvKiBFTVBUWSAqLwpAQCAtNDExLDYgKzQyMiw3IEBA IGlkZW50X29yX2tleXdvcmQ6CiAJCQl8IEtfRVhQT1JUX1NOQVBTSE9UCQkJCXsgJCQgPSAiZXhw b3J0X3NuYXBzaG90IjsgfQogCQkJfCBLX05PRVhQT1JUX1NOQVBTSE9UCQkJeyAkJCA9ICJub2V4 cG9ydF9zbmFwc2hvdCI7IH0KIAkJCXwgS19VU0VfU05BUFNIT1QJCQkJeyAkJCA9ICJ1c2Vfc25h cHNob3QiOyB9CisJCQl8IEtfVVBMT0FEX01BTklGRVNUCQkJCXsgJCQgPSAidXBsb2FkX21hbmlm ZXN0IjsgfQogCQk7CiAKICUlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9y ZXBsX3NjYW5uZXIubCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfc2Nhbm5lci5sCmlu ZGV4IDFjYzdmYjg1OGMuLjQ4MDVkYTA4ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3JlcGxfc2Nhbm5lci5sCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxf c2Nhbm5lci5sCkBAIC0xMzYsNiArMTM2LDcgQEAgRVhQT1JUX1NOQVBTSE9UCQl7IHJldHVybiBL X0VYUE9SVF9TTkFQU0hPVDsgfQogTk9FWFBPUlRfU05BUFNIT1QJeyByZXR1cm4gS19OT0VYUE9S VF9TTkFQU0hPVDsgfQogVVNFX1NOQVBTSE9UCQl7IHJldHVybiBLX1VTRV9TTkFQU0hPVDsgfQog V0FJVAkJCQl7IHJldHVybiBLX1dBSVQ7IH0KK1VQTE9BRF9NQU5JRkVTVAkJeyByZXR1cm4gS19V UExPQURfTUFOSUZFU1Q7IH0KIAoge3NwYWNlfSsJCXsgLyogZG8gbm90aGluZyAqLyB9CiAKQEAg LTMwMyw2ICszMDQsNyBAQCByZXBsaWNhdGlvbl9zY2FubmVyX2lzX3JlcGxpY2F0aW9uX2NvbW1h bmQodm9pZCkKIAkJY2FzZSBLX0RST1BfUkVQTElDQVRJT05fU0xPVDoKIAkJY2FzZSBLX1JFQURf UkVQTElDQVRJT05fU0xPVDoKIAkJY2FzZSBLX1RJTUVMSU5FX0hJU1RPUlk6CisJCWNhc2UgS19V UExPQURfTUFOSUZFU1Q6CiAJCWNhc2UgS19TSE9XOgogCQkJLyogWWVzOyBwdXNoIGJhY2sgdGhl IGZpcnN0IHRva2VuIHNvIHdlIGNhbiBwYXJzZSBsYXRlci4gKi8KIAkJCXJlcGxfcHVzaGVkX2Jh Y2tfdG9rZW4gPSBmaXJzdF90b2tlbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5k ZXggM2JjOWM4MjM4OS4uZGJjZGEzMjU1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3Vw LmgiCisjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2F1dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKQEAgLTEzNyw2ICsxMzgsMTcgQEAgYm9vbAkJ d2FrZV93YWxfc2VuZGVycyA9IGZhbHNlOwogICovCiBzdGF0aWMgWExvZ1JlYWRlclN0YXRlICp4 bG9ncmVhZGVyID0gTlVMTDsKIAorLyoKKyAqIElmIHRoZSBVUExPQURfTUFOSUZFU1QgY29tbWFu ZCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBiYWNrdXAgbWFuaWZlc3QgaW4KKyAqIHByZXBhcmF0aW9u IGZvciBhbiBpbmNyZW1lbnRhbCBiYWNrdXAsIHVwbG9hZGVkX21hbmlmZXN0IHdpbGwgYmUgcG9p bnQKKyAqIHRvIGFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGl0cyBjb250 ZXh0cywgYW5kCisgKiB1cGxvYWRlZF9tYW5pZmVzdF9tY3h0IHdpbGwgcG9pbnQgdG8gdGhlIG1l bW9yeSBjb250ZXh0IHRoYXQgY29udGFpbnMKKyAqIHRoYXQgb2JqZWN0IGFuZCBhbGwgb2YgaXRz IHN1Ym9yZGluYXRlIGRhdGEuIE90aGVyd2lzZSwgYm90aCB2YWx1ZXMgd2lsbAorICogYmUgTlVM TC4KKyAqLworc3RhdGljIEluY3JlbWVudGFsQmFja3VwSW5mbyAqdXBsb2FkZWRfbWFuaWZlc3Qg PSBOVUxMOworc3RhdGljIE1lbW9yeUNvbnRleHQgdXBsb2FkZWRfbWFuaWZlc3RfbWN4dCA9IE5V TEw7CisKIC8qCiAgKiBUaGVzZSB2YXJpYWJsZXMga2VlcCB0cmFjayBvZiB0aGUgc3RhdGUgb2Yg dGhlIHRpbWVsaW5lIHdlJ3JlIGN1cnJlbnRseQogICogc2VuZGluZy4gc2VuZFRpbWVMaW5lIGlk ZW50aWZpZXMgdGhlIHRpbWVsaW5lLiBJZiBzZW5kVGltZUxpbmVJc0hpc3RvcmljLApAQCAtMjMz LDYgKzI0NSw5IEBAIHN0YXRpYyB2b2lkIFhMb2dTZW5kTG9naWNhbCh2b2lkKTsKIHN0YXRpYyB2 b2lkIFdhbFNuZERvbmUoV2FsU25kU2VuZERhdGFDYWxsYmFjayBzZW5kX2RhdGEpOwogc3RhdGlj IFhMb2dSZWNQdHIgR2V0U3RhbmRieUZsdXNoUmVjUHRyKFRpbWVMaW5lSUQgKnRsaSk7CiBzdGF0 aWMgdm9pZCBJZGVudGlmeVN5c3RlbSh2b2lkKTsKK3N0YXRpYyB2b2lkIFVwbG9hZE1hbmlmZXN0 KHZvaWQpOworc3RhdGljIGJvb2wgSGFuZGxlVXBsb2FkTWFuaWZlc3RQYWNrZXQoU3RyaW5nSW5m byBidWYsIG9mZl90ICpvZmZzZXQsCisJCQkJCQkJCQkgICBJbmNyZW1lbnRhbEJhY2t1cEluZm8g KmliKTsKIHN0YXRpYyB2b2lkIFJlYWRSZXBsaWNhdGlvblNsb3QoUmVhZFJlcGxpY2F0aW9uU2xv dENtZCAqY21kKTsKIHN0YXRpYyB2b2lkIENyZWF0ZVJlcGxpY2F0aW9uU2xvdChDcmVhdGVSZXBs aWNhdGlvblNsb3RDbWQgKmNtZCk7CiBzdGF0aWMgdm9pZCBEcm9wUmVwbGljYXRpb25TbG90KERy b3BSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCk7CkBAIC02NjAsNiArNjc1LDE0MyBAQCBTZW5kVGlt ZUxpbmVIaXN0b3J5KFRpbWVMaW5lSGlzdG9yeUNtZCAqY21kKQogCXBxX2VuZG1lc3NhZ2UoJmJ1 Zik7CiB9CiAKKy8qCisgKiBIYW5kbGUgVVBMT0FEX01BTklGRVNUIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyB2b2lkCitVcGxvYWRNYW5pZmVzdCh2b2lkKQoreworCU1lbW9yeUNvbnRleHQgbWN4dDsK KwlJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliOworCW9mZl90CQlvZmZzZXQgPSAwOworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCS8qCisJICogcGFyc2luZyB0aGUgbWFuaWZlc3Qgd2lsbCB1c2Ug dGhlIGNyeXB0b2hhc2ggc3R1ZmYsIHdoaWNoIHJlcXVpcmVzIGEKKwkgKiByZXNvdXJjZSBvd25l cgorCSAqLworCUFzc2VydChDdXJyZW50UmVzb3VyY2VPd25lciA9PSBOVUxMKTsKKwlDdXJyZW50 UmVzb3VyY2VPd25lciA9IFJlc291cmNlT3duZXJDcmVhdGUoTlVMTCwgImJhc2UgYmFja3VwIik7 CisKKwkvKiBQcmVwYXJlIHRvIHJlYWQgbWFuaWZlc3QgZGF0YSBpbnRvIGEgdGVtcG9yYXJ5IGNv bnRleHQuICovCisJbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJICJpbmNyZW1lbnRhbCBiYWNrdXAgaW5mb3JtYXRpb24iLAorCQkJCQkJ CQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJaWIgPSBDcmVhdGVJbmNyZW1lbnRhbEJhY2t1 cEluZm8obWN4dCk7CisKKwkvKiBTZW5kIGEgQ29weUluUmVzcG9uc2UgbWVzc2FnZSAqLworCXBx X2JlZ2lubWVzc2FnZSgmYnVmLCAnRycpOworCXBxX3NlbmRieXRlKCZidWYsIDApOworCXBxX3Nl bmRpbnQxNigmYnVmLCAwKTsKKwlwcV9lbmRtZXNzYWdlX3JldXNlKCZidWYpOworCXBxX2ZsdXNo KCk7CisKKwkvKiBSZWNpZXZlIHBhY2tldHMgZnJvbSBjbGllbnQgdW50aWwgZG9uZS4gKi8KKwl3 aGlsZSAoSGFuZGxlVXBsb2FkTWFuaWZlc3RQYWNrZXQoJmJ1ZiwgJm9mZnNldCwgaWIpKQorCQk7 CisKKwkvKiBGaW5pc2ggdXAgbWFuaWZlc3QgcHJvY2Vzc2luZy4gKi8KKwlGaW5hbGl6ZUluY3Jl bWVudGFsTWFuaWZlc3QoaWIpOworCisJLyoKKwkgKiBEaXNjYXJkIGFueSBvbGQgbWFuaWZlc3Qg aW5mb3JtYXRpb24gYW5kIGFycmFuZ2UgdG8gcHJlc2VydmUgdGhlIG5ldworCSAqIGluZm9ybWF0 aW9uIHdlIGp1c3QgZ290LgorCSAqCisJICogV2UgYXNzdW1lIHRoYXQgTWVtb3J5Q29udGV4dERl bGV0ZSBhbmQgTWVtb3J5Q29udGV4dFNldFBhcmVudCB3b24ndAorCSAqIGZhaWwsIGFuZCB0aHVz IHdlIHNob3VsZG4ndCBlbmQgdXAgYmFpbGluZyBvdXQgb2YgaGVyZSBpbiBzdWNoIGEgd2F5IGFz CisJICogdG8gbGVhdmUgZGFuZ2xpbmcgcG9pbnRycy4KKwkgKi8KKwlpZiAodXBsb2FkZWRfbWFu aWZlc3RfbWN4dCAhPSBOVUxMKQorCQlNZW1vcnlDb250ZXh0RGVsZXRlKHVwbG9hZGVkX21hbmlm ZXN0X21jeHQpOworCU1lbW9yeUNvbnRleHRTZXRQYXJlbnQobWN4dCwgQ2FjaGVNZW1vcnlDb250 ZXh0KTsKKwl1cGxvYWRlZF9tYW5pZmVzdCA9IGliOworCXVwbG9hZGVkX21hbmlmZXN0X21jeHQg PSBtY3h0OworCisJLyogY2xlYW4gdXAgdGhlIHJlc291cmNlIG93bmVyIHdlIGNyZWF0ZWQgKi8K KwlXYWxTbmRSZXNvdXJjZUNsZWFudXAodHJ1ZSk7Cit9CisKKy8qCisgKiBQcm9jZXNzIG9uZSBw YWNrZXQgcmVjZWl2ZWQgZHVyaW5nIHRoZSBoYW5kbGluZyBvZiBhbiBVUExPQURfTUFOSUZFU1QK KyAqIG9wZXJhdGlvbi4KKyAqCisgKiAnYnVmJyBpcyBzY3JhdGNoIHNwYWNlLiBUaGlzIGZ1bmN0 aW9uIGV4cGVjdHMgaXQgdG8gYmUgaW5pdGlhbGl6ZWQsIGRvZXNuJ3QKKyAqIGNhcmUgd2hhdCB0 aGUgY3VycmVudCBjb250ZW50cyBhcmUsIGFuZCBtYXkgb3ZlcnJpZGUgdGhlbSB3aXRoIGNvbXBs ZXRlbHkKKyAqIG5ldyBjb250ZW50cy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUg aWYgdGhlIGNhbGxlciBzaG91bGQgY29udGludWUgcHJvY2Vzc2luZworICogYWRkaXRpb25hbCBw YWNrZXRzIGFuZCBmYWxzZSBpZiB0aGUgVVBMT0FEX01BTklGRVNUIG9wZXJhdGlvbiBpcyBjb21w bGV0ZS4KKyAqLworc3RhdGljIGJvb2wKK0hhbmRsZVVwbG9hZE1hbmlmZXN0UGFja2V0KFN0cmlu Z0luZm8gYnVmLCBvZmZfdCAqb2Zmc2V0LAorCQkJCQkJICAgSW5jcmVtZW50YWxCYWNrdXBJbmZv ICppYikKK3sKKwlpbnQJCQltdHlwZTsKKwlpbnQJCQltYXhtc2dsZW47CisKKwlIT0xEX0NBTkNF TF9JTlRFUlJVUFRTKCk7CisKKwlwcV9zdGFydG1zZ3JlYWQoKTsKKwltdHlwZSA9IHBxX2dldGJ5 dGUoKTsKKwlpZiAobXR5cGUgPT0gRU9GKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIEVP RiBvbiBjbGllbnQgY29ubmVjdGlvbiB3aXRoIGFuIG9wZW4gdHJhbnNhY3Rpb24iKSkpOworCisJ c3dpdGNoIChtdHlwZSkKKwl7CisJCWNhc2UgJ2QnOgkJCQkvKiBDb3B5RGF0YSAqLworCQkJbWF4 bXNnbGVuID0gUFFfTEFSR0VfTUVTU0FHRV9MSU1JVDsKKwkJCWJyZWFrOworCQljYXNlICdjJzoJ CQkJLyogQ29weURvbmUgKi8KKwkJY2FzZSAnZic6CQkJCS8qIENvcHlGYWlsICovCisJCWNhc2Ug J0gnOgkJCQkvKiBGbHVzaCAqLworCQljYXNlICdTJzoJCQkJLyogU3luYyAqLworCQkJbWF4bXNn bGVuID0gUFFfU01BTExfTUVTU0FHRV9MSU1JVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04p LAorCQkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIG1lc3NhZ2UgdHlwZSAweCUwMlggZHVyaW5nIENP UFkgZnJvbSBzdGRpbiIsCisJCQkJCQkJbXR5cGUpKSk7CisJCQltYXhtc2dsZW4gPSAwOwkJLyog a2VlcCBjb21waWxlciBxdWlldCAqLworCQkJYnJlYWs7CisJfQorCisJLyogTm93IGNvbGxlY3Qg dGhlIG1lc3NhZ2UgYm9keSAqLworCWlmIChwcV9nZXRtZXNzYWdlKGJ1ZiwgbWF4bXNnbGVuKSkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVS RSksCisJCQkJIGVycm1zZygidW5leHBlY3RlZCBFT0Ygb24gY2xpZW50IGNvbm5lY3Rpb24gd2l0 aCBhbiBvcGVuIHRyYW5zYWN0aW9uIikpKTsKKwlSRVNVTUVfQ0FOQ0VMX0lOVEVSUlVQVFMoKTsK KworCS8qIFByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KKwlzd2l0Y2ggKG10eXBlKQorCXsKKwkJY2Fz ZSAnZCc6CQkJCS8qIENvcHlEYXRhICovCisJCQlBcHBlbmRJbmNyZW1lbnRhbE1hbmlmZXN0RGF0 YShpYiwgYnVmLT5kYXRhLCBidWYtPmxlbik7CisJCQlyZXR1cm4gdHJ1ZTsKKworCQljYXNlICdj JzoJCQkJLyogQ29weURvbmUgKi8KKwkJCXJldHVybiBmYWxzZTsKKworCQljYXNlICdIJzoJCQkJ LyogU3luYyAqLworCQljYXNlICdTJzoJCQkJLyogRmx1c2ggKi8KKwkJCS8qIElnbm9yZSB0aGVz ZSB3aGlsZSBpbiBDb3B5T3V0IG1vZGUgYXMgd2UgZG8gZWxzZXdoZXJlLiAqLworCQkJcmV0dXJu IHRydWU7CisKKwkJY2FzZSAnZic6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX1FVRVJZX0NBTkNFTEVEKSwKKwkJCQkJIGVycm1zZygiQ09QWSBmcm9tIHN0ZGluIGZh aWxlZDogJXMiLAorCQkJCQkJCXBxX2dldG1zZ3N0cmluZyhidWYpKSkpOworCX0KKworCS8qIE5v dCByZWFjaGVkLiAqLworCUFzc2VydChmYWxzZSk7CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgog ICogSGFuZGxlIFNUQVJUX1JFUExJQ0FUSU9OIGNvbW1hbmQuCiAgKgpAQCAtMTgwMSw3ICsxOTUz LDcgQEAgZXhlY19yZXBsaWNhdGlvbl9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZF9zdHJpbmcpCiAJ CQljbWR0YWcgPSAiQkFTRV9CQUNLVVAiOwogCQkJc2V0X3BzX2Rpc3BsYXkoY21kdGFnKTsKIAkJ CVByZXZlbnRJblRyYW5zYWN0aW9uQmxvY2sodHJ1ZSwgY21kdGFnKTsKLQkJCVNlbmRCYXNlQmFj a3VwKChCYXNlQmFja3VwQ21kICopIGNtZF9ub2RlKTsKKwkJCVNlbmRCYXNlQmFja3VwKChCYXNl QmFja3VwQ21kICopIGNtZF9ub2RlLCB1cGxvYWRlZF9tYW5pZmVzdCk7CiAJCQlFbmRSZXBsaWNh dGlvbkNvbW1hbmQoY21kdGFnKTsKIAkJCWJyZWFrOwogCkBAIC0xODYzLDYgKzIwMTUsMTQgQEAg ZXhlY19yZXBsaWNhdGlvbl9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZF9zdHJpbmcpCiAJCQl9CiAJ CQlicmVhazsKIAorCQljYXNlIFRfVXBsb2FkTWFuaWZlc3RDbWQ6CisJCQljbWR0YWcgPSAiVVBM T0FEX01BTklGRVNUIjsKKwkJCXNldF9wc19kaXNwbGF5KGNtZHRhZyk7CisJCQlQcmV2ZW50SW5U cmFuc2FjdGlvbkJsb2NrKHRydWUsIGNtZHRhZyk7CisJCQlVcGxvYWRNYW5pZmVzdCgpOworCQkJ RW5kUmVwbGljYXRpb25Db21tYW5kKGNtZHRhZyk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCByZXBsaWNhdGlvbiBjb21tYW5kIG5vZGUgdGFn OiAldSIsCiAJCQkJIGNtZF9ub2RlLT50eXBlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCAw ZTBhYzIyYmRkLi43MDYxNDBlYjlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0zMiw2ICsz Miw3IEBACiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFz dGVyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3Jp Z2luLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAtMTQwLDYgKzE0MSw3IEBA IENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKQogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBSZXBsaWNhdGlvbk9yaWdpblNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgV2FsU25kU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWxSY3ZT aG1lbVNpemUoKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhbFN1bW1hcml6ZXJTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBnQXJjaFNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgQXBwbHlMYXVuY2hlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgQlRyZWVTaG1lbVNpemUoKSk7CkBAIC0zMzcsNiArMzM5LDcgQEAgQ3JlYXRl T3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlSZXBsaWNhdGlvbk9yaWdpblNobWVtSW5pdCgp OwogCVdhbFNuZFNobWVtSW5pdCgpOwogCVdhbFJjdlNobWVtSW5pdCgpOworCVdhbFN1bW1hcml6 ZXJTaG1lbUluaXQoKTsKIAlQZ0FyY2hTaG1lbUluaXQoKTsKIAlBcHBseUxhdW5jaGVyU2htZW1J bml0KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vTWFrZWZpbGUgYi9zcmMvYmluL01ha2VmaWxl CmluZGV4IDM3MzA3N2JmNTIuLmFhMjIxMDkyNWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vTWFrZWZp bGUKKysrIGIvc3JjL2Jpbi9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQCBTVUJESVJTID0gXAog CXBnX2FyY2hpdmVjbGVhbnVwIFwKIAlwZ19iYXNlYmFja3VwIFwKIAlwZ19jaGVja3N1bXMgXAor CXBnX2NvbWJpbmViYWNrdXAgXAogCXBnX2NvbmZpZyBcCiAJcGdfY29udHJvbGRhdGEgXAogCXBn X2N0bCBcCmRpZmYgLS1naXQgYS9zcmMvYmluL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9tZXNvbi5i dWlsZAppbmRleCA2N2NiNTA2MzBjLi40Y2I2ZmQ1OWJiIDEwMDY0NAotLS0gYS9zcmMvYmluL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vbWVzb24uYnVpbGQKQEAgLTUsNiArNSw3IEBAIHN1YmRp cigncGdfYW1jaGVjaycpCiBzdWJkaXIoJ3BnX2FyY2hpdmVjbGVhbnVwJykKIHN1YmRpcigncGdf YmFzZWJhY2t1cCcpCiBzdWJkaXIoJ3BnX2NoZWNrc3VtcycpCitzdWJkaXIoJ3BnX2NvbWJpbmVi YWNrdXAnKQogc3ViZGlyKCdwZ19jb25maWcnKQogc3ViZGlyKCdwZ19jb250cm9sZGF0YScpCiBz dWJkaXIoJ3BnX2N0bCcpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJl YW1lcl9maWxlLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9maWxlLmMKaW5k ZXggNDVmMzI5NzRmZi4uNmI3OGVlMjgzZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL2Jic3RyZWFtZXJfZmlsZS5jCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVh bWVyX2ZpbGUuYwpAQCAtMjk2LDYgKzI5Niw3IEBAIHNob3VsZF9hbGxvd19leGlzdGluZ19kaXJl Y3RvcnkoY29uc3QgY2hhciAqcGF0aG5hbWUpCiAJaWYgKHN0cmNtcChmaWxlbmFtZSwgInBnX3dh bCIpID09IDAgfHwKIAkJc3RyY21wKGZpbGVuYW1lLCAicGdfeGxvZyIpID09IDAgfHwKIAkJc3Ry Y21wKGZpbGVuYW1lLCAiYXJjaGl2ZV9zdGF0dXMiKSA9PSAwIHx8CisJCXN0cmNtcChmaWxlbmFt ZSwgInN1bW1hcmllcyIpID09IDAgfHwKIAkJc3RyY21wKGZpbGVuYW1lLCAicGdfdGJsc3BjIikg PT0gMCkKIAkJcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1 cC9wZ19iYXNlYmFja3VwLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5j CmluZGV4IGYzMjY4NGE4ZjIuLjU3OTViOTEyNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jh c2ViYWNrdXAuYwpAQCAtMTAxLDYgKzEwMSwxMSBAQCB0eXBlZGVmIHZvaWQgKCpXcml0ZURhdGFD YWxsYmFjaykgKHNpemVfdCBuYnl0ZXMsIGNoYXIgKmJ1ZiwKICAqLwogI2RlZmluZSBNSU5JTVVN X1ZFUlNJT05fRk9SX1RFUk1JTkFURURfVEFSRklMRSAxNTAwMDAKIAorLyoKKyAqIHBnX3dhbC9z dW1tYXJpZXMgZXhpc3RzIGJlZ2lubmluZyB3aXRoIHZlcnNpb24gMTcuCisgKi8KKyNkZWZpbmUg TUlOSU1VTV9WRVJTSU9OX0ZPUl9XQUxfU1VNTUFSSUVTIDE3MDAwMAorCiAvKgogICogRGlmZmVy ZW50IHdheXMgdG8gaW5jbHVkZSBXQUwKICAqLwpAQCAtMjE3LDcgKzIyMiw4IEBAIHN0YXRpYyB2 b2lkIFJlY2VpdmVCYWNrdXBNYW5pZmVzdEluTWVtb3J5Q2h1bmsoc2l6ZV90IHIsIGNoYXIgKmNv cHlidWYsCiAJCQkJCQkJCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogc3RhdGljIHZvaWQg QmFzZUJhY2t1cChjaGFyICpjb21wcmVzc2lvbl9hbGdvcml0aG0sIGNoYXIgKmNvbXByZXNzaW9u X2RldGFpbCwKIAkJCQkJICAgQ29tcHJlc3Npb25Mb2NhdGlvbiBjb21wcmVzc2xvYywKLQkJCQkJ ICAgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY2xpZW50X2NvbXByZXNzKTsKKwkJCQkJICAg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY2xpZW50X2NvbXByZXNzLAorCQkJCQkgICBjaGFy ICppbmNyZW1lbnRhbF9tYW5pZmVzdCk7CiAKIHN0YXRpYyBib29sIHJlYWNoZWRfZW5kX3Bvc2l0 aW9uKFhMb2dSZWNQdHIgc2VnZW5kcG9zLCB1aW50MzIgdGltZWxpbmUsCiAJCQkJCQkJCSBib29s IHNlZ21lbnRfZmluaXNoZWQpOwpAQCAtMzkwLDYgKzM5Niw4IEBAIHVzYWdlKHZvaWQpCiAJcHJp bnRmKF8oIlxuT3B0aW9ucyBjb250cm9sbGluZyB0aGUgb3V0cHV0OlxuIikpOwogCXByaW50Zihf KCIgIC1ELCAtLXBnZGF0YT1ESVJFQ1RPUlkgcmVjZWl2ZSBiYXNlIGJhY2t1cCBpbnRvIGRpcmVj dG9yeVxuIikpOwogCXByaW50ZihfKCIgIC1GLCAtLWZvcm1hdD1wfHQgICAgICAgb3V0cHV0IGZv cm1hdCAocGxhaW4gKGRlZmF1bHQpLCB0YXIpXG4iKSk7CisJcHJpbnRmKF8oIiAgLWksIC0taW5j cmVtZW50YWw9T0xETUFOSUZFU1RcbiIpKTsKKwlwcmludGYoXygiICAgICAgICAgICAgICAgICAg ICAgICAgIHRha2UgaW5jcmVtZW50YWwgYmFja3VwXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXIsIC0t bWF4LXJhdGU9UkFURSAgICBtYXhpbXVtIHRyYW5zZmVyIHJhdGUgdG8gdHJhbnNmZXIgZGF0YSBk aXJlY3RvcnlcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBrQi9zLCBvciB1 c2Ugc3VmZml4IFwia1wiIG9yIFwiTVwiKVxuIikpOwogCXByaW50ZihfKCIgIC1SLCAtLXdyaXRl LXJlY292ZXJ5LWNvbmZcbiIKQEAgLTY4OCw2ICs2OTYsMjMgQEAgU3RhcnRMb2dTdHJlYW1lcihj aGFyICpzdGFydHBvcywgdWludDMyIHRpbWVsaW5lLCBjaGFyICpzeXNpZGVudGlmaWVyLAogCiAJ CWlmIChwZ19ta2Rpcl9wKHN0YXR1c2RpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwICYmIGVy cm5vICE9IEVFWElTVCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBc IiVzXCI6ICVtIiwgc3RhdHVzZGlyKTsKKworCQkvKgorCQkgKiBGb3IgbmV3ZXIgc2VydmVyIHZl cnNpb25zLCBsaWtld2lzZSBjcmVhdGUgcGdfd2FsL3N1bW1hcmllcworCQkgKi8KKwkJaWYgKFBR c2VydmVyVmVyc2lvbihjb25uKSA8IE1JTklNVU1fVkVSU0lPTl9GT1JfV0FMX1NVTU1BUklFUykK KwkJeworCQkJY2hhcgkJc3VtbWFyeWRpcltNQVhQR1BBVEhdOworCisJCQlzbnByaW50ZihzdW1t YXJ5ZGlyLCBzaXplb2Yoc3VtbWFyeWRpciksICIlcy8lcy9zdW1tYXJpZXMiLAorCQkJCQkgYmFz ZWRpciwKKwkJCQkJIFBRc2VydmVyVmVyc2lvbihjb25uKSA8IE1JTklNVU1fVkVSU0lPTl9GT1Jf UEdfV0FMID8KKwkJCQkJICJwZ194bG9nIiA6ICJwZ193YWwiKTsKKworCQkJaWYgKHBnX21rZGly X3Aoc3RhdHVzZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDAgJiYKKwkJCQllcnJubyAhPSBF RVhJU1QpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjog JW0iLCBzdW1tYXJ5ZGlyKTsKKwkJfQogCX0KIAogCS8qCkBAIC0xNzI4LDcgKzE3NTMsOSBAQCBS ZWNlaXZlQmFja3VwTWFuaWZlc3RJbk1lbW9yeUNodW5rKHNpemVfdCByLCBjaGFyICpjb3B5YnVm LAogCiBzdGF0aWMgdm9pZAogQmFzZUJhY2t1cChjaGFyICpjb21wcmVzc2lvbl9hbGdvcml0aG0s IGNoYXIgKmNvbXByZXNzaW9uX2RldGFpbCwKLQkJICAgQ29tcHJlc3Npb25Mb2NhdGlvbiBjb21w cmVzc2xvYywgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY2xpZW50X2NvbXByZXNzKQorCQkg ICBDb21wcmVzc2lvbkxvY2F0aW9uIGNvbXByZXNzbG9jLAorCQkgICBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uICpjbGllbnRfY29tcHJlc3MsCisJCSAgIGNoYXIgKmluY3JlbWVudGFsX21hbmlm ZXN0KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAljaGFyCSAgICpzeXNpZGVudGlmaWVyOwpAQCAt MTc5NCw3ICsxODIxLDc2IEBAIEJhc2VCYWNrdXAoY2hhciAqY29tcHJlc3Npb25fYWxnb3JpdGht LCBjaGFyICpjb21wcmVzc2lvbl9kZXRhaWwsCiAJCWV4aXQoMSk7CiAKIAkvKgotCSAqIFN0YXJ0 IHRoZSBhY3R1YWwgYmFja3VwCisJICogSWYgdGhlIHVzZXIgd2FudHMgYW4gaW5jcmVtZW50YWwg YmFja3VwLCB3ZSBtdXN0IHVwbG9hZCB0aGUgbWFuaWZlc3QKKwkgKiBmb3IgdGhlIHByZXZpb3Vz IGJhY2t1cCB1cG9uIHdoaWNoIGl0IGlzIHRvIGJlIGJhc2VkLgorCSAqLworCWlmIChpbmNyZW1l bnRhbF9tYW5pZmVzdCAhPSBOVUxMKQorCXsKKwkJaW50CQkJZmQ7CisJCWNoYXIJCW1idWZbNjU1 MzZdOworCQlpbnQJCQluYnl0ZXM7CisKKwkJLyogUmVqZWN0IGlmIHNlcnZlciBpcyB0b28gb2xk LiAqLworCQlpZiAoc2VydmVyVmVyc2lvbiA8IE1JTklNVU1fVkVSU0lPTl9GT1JfV0FMX1NVTU1B UklFUykKKwkJCXBnX2ZhdGFsKCJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmNyZW1lbnRhbCBi YWNrdXAiKTsKKworCQkvKiBPcGVuIHRoZSBmaWxlLiAqLworCQlmZCA9IG9wZW4oaW5jcmVtZW50 YWxfbWFuaWZlc3QsIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBpbmNyZW1lbnRhbF9t YW5pZmVzdCk7CisKKwkJLyogVGVsbCB0aGUgc2VydmVyIHdoYXQgd2Ugd2FudCB0byBkby4gKi8K KwkJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJVUExPQURfTUFOSUZFU1QiKSA9PSAwKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBzZW5kIHJlcGxpY2F0aW9uIGNvbW1hbmQgXCIlc1wiOiAlcyIsCisJ CQkJCSAiVVBMT0FEX01BTklGRVNUIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlyZXMgPSBQ UWdldFJlc3VsdChjb25uKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09Q WV9JTikKKwkJeworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfRkFUQUxfRVJS T1IpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1cGxvYWQgbWFuaWZlc3Q6ICVzIiwKKwkJCQkJ CSBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCQllbHNlCisJCQkJcGdfZmF0YWwoImNvdWxkIG5v dCB1cGxvYWQgbWFuaWZlc3Q6IHVuZXhwZWN0ZWQgc3RhdHVzICVzIiwKKwkJCQkJCSBQUXJlc1N0 YXR1cyhQUXJlc3VsdFN0YXR1cyhyZXMpKSk7CisJCX0KKworCQkvKiBMb29wLCByZWFkaW5nIGZy b20gdGhlIGZpbGUgYW5kIHNlbmRpbmcgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4gKi8KKwkJd2hp bGUgKChuYnl0ZXMgPSByZWFkKGZkLCBtYnVmLCBzaXplb2YgbWJ1ZikpID4gMCkKKwkJeworCQkJ aWYgKFBRcHV0Q29weURhdGEoY29ubiwgbWJ1ZiwgbmJ5dGVzKSA8IDApCisJCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCBzZW5kIENPUFkgZGF0YTogJXMiLAorCQkJCQkJIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKKwkJfQorCisJCS8qIEJhaWwgb3V0IGlmIHdlIGV4aXRlZCB0aGUgbG9vcCBkdWUgdG8g YW4gZXJyb3IuICovCisJCWlmIChuYnl0ZXMgPCAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZpbGUgXCIlc1wiOiAlbSIsIGluY3JlbWVudGFsX21hbmlmZXN0KTsKKworCQkvKiBFbmQg dGhlIENPUFkgb3BlcmF0aW9uLiAqLworCQlpZiAoUFFwdXRDb3B5RW5kKGNvbm4sIE5VTEwpIDwg MCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc2VuZCBlbmQtb2YtQ09QWTogJXMiLAorCQkJCQkg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCS8qIFNlZSB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMg aGFwcHkgd2l0aCB3aGF0IHdlIHNlbnQuICovCisJCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4pOwor CQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19GQVRBTF9FUlJPUikKKwkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgdXBsb2FkIG1hbmlmZXN0OiAlcyIsCisJCQkJCSBQUWVycm9yTWVzc2Fn ZShjb25uKSk7CisJCWVsc2UgaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFO RF9PSykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdXBsb2FkIG1hbmlmZXN0OiB1bmV4cGVjdGVk IHN0YXR1cyAlcyIsCisJCQkJCSBQUXJlc1N0YXR1cyhQUXJlc3VsdFN0YXR1cyhyZXMpKSk7CisK KwkJLyogQ29uc3VtZSBSZWFkeUZvclF1ZXJ5IG1lc3NhZ2UgZnJvbSBzZXJ2ZXIuICovCisJCXJl cyA9IFBRZ2V0UmVzdWx0KGNvbm4pOworCQlpZiAocmVzICE9IE5VTEwpCisJCQlwZ19mYXRhbCgi dW5leHBlY3RlZCBleHRyYSByZXN1bHQgd2hpbGUgc2VuZGluZyBtYW5pZmVzdCIpOworCisJCS8q IEFkZCBJTkNSRU1FTlRBTCBvcHRpb24gdG8gQkFTRV9CQUNLVVAgY29tbWFuZC4gKi8KKwkJQXBw ZW5kUGxhaW5Db21tYW5kT3B0aW9uKCZidWYsIHVzZV9uZXdfb3B0aW9uX3N5bnRheCwgIklOQ1JF TUVOVEFMIik7CisJfQorCisJLyoKKwkgKiBDb250aW51ZSBidWlsZGluZyB1cCB0aGUgb3B0aW9u cyBsaXN0IGZvciB0aGUgQkFTRV9CQUNLVVAgY29tbWFuZC4KIAkgKi8KIAlBcHBlbmRTdHJpbmdD b21tYW5kT3B0aW9uKCZidWYsIHVzZV9uZXdfb3B0aW9uX3N5bnRheCwgIkxBQkVMIiwgbGFiZWwp OwogCWlmIChlc3RpbWF0ZXNpemUpCkBAIC0xOTAxLDYgKzE5OTcsNyBAQCBCYXNlQmFja3VwKGNo YXIgKmNvbXByZXNzaW9uX2FsZ29yaXRobSwgY2hhciAqY29tcHJlc3Npb25fZGV0YWlsLAogCWVs c2UKIAkJYmFzZWJrcCA9IHBzcHJpbnRmKCJCQVNFX0JBQ0tVUCAlcyIsIGJ1Zi5kYXRhKTsKIAor CS8qIE9LLCB0cnkgdG8gc3RhcnQgdGhlIGJhY2t1cC4gKi8KIAlpZiAoUFFzZW5kUXVlcnkoY29u biwgYmFzZWJrcCkgPT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBzZW5kIHJlcGxpY2F0aW9u IGNvbW1hbmQgXCIlc1wiOiAlcyIsCiAJCQkJICJCQVNFX0JBQ0tVUCIsIFBRZXJyb3JNZXNzYWdl KGNvbm4pKTsKQEAgLTIyNTYsNiArMjM1Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwgJ1YnfSwKIAkJeyJwZ2RhdGEiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0QnfSwKIAkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgJ0YnfSwKKwkJeyJpbmNyZW1lbnRhbCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnaSd9LAogCQl7ImNoZWNrcG9pbnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2Mn fSwKIAkJeyJjcmVhdGUtc2xvdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnQyd9LAogCQl7Im1heC1y YXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdyJ30sCkBAIC0yMjkzLDYgKzIzOTEsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQJCQlvcHRpb25faW5kZXg7CiAJY2hh cgkgICAqY29tcHJlc3Npb25fYWxnb3JpdGhtID0gIm5vbmUiOwogCWNoYXIJICAgKmNvbXByZXNz aW9uX2RldGFpbCA9IE5VTEw7CisJY2hhcgkgICAqaW5jcmVtZW50YWxfbWFuaWZlc3QgPSBOVUxM OwogCUNvbXByZXNzaW9uTG9jYXRpb24gY29tcHJlc3Nsb2MgPSBDT01QUkVTU19MT0NBVElPTl9V TlNQRUNJRklFRDsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNsaWVudF9jb21wcmVzczsK IApAQCAtMjMxNyw3ICsyNDE2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlh dGV4aXQoY2xlYW51cF9kaXJlY3Rvcmllc19hdGV4aXQpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImM6Q2Q6RDpGOmg6bDpuTnA6UHI6UnM6Uzp0OlQ6VTp2d1dYOnpa OiIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImM6Q2Q6RDpGOmg6aTps Om5OcDpQcjpSczpTOnQ6VDpVOnZ3V1g6elo6IiwKIAkJCQkJCQlsb25nX29wdGlvbnMsICZvcHRp b25faW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTIzNTIsNiArMjQ1MSw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJY2FzZSAnaCc6CiAJCQkJZGJob3N0ID0g cGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdpJzoKKwkJCQlpbmNyZW1l bnRhbF9tYW5pZmVzdCA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAn bCc6CiAJCQkJbGFiZWwgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKQEAgLTI3NjUs NyArMjg2Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCUJhc2VCYWNr dXAoY29tcHJlc3Npb25fYWxnb3JpdGhtLCBjb21wcmVzc2lvbl9kZXRhaWwsIGNvbXByZXNzbG9j LAotCQkJICAgJmNsaWVudF9jb21wcmVzcyk7CisJCQkgICAmY2xpZW50X2NvbXByZXNzLCBpbmNy ZW1lbnRhbF9tYW5pZmVzdCk7CiAKIAlzdWNjZXNzID0gdHJ1ZTsKIAlyZXR1cm4gMDsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsIGIvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwKaW5kZXggYjlmNWUxMjY2 Yi4uYmY3NjUyOTFlNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3Bn X2Jhc2ViYWNrdXAucGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2Vi YWNrdXAucGwKQEAgLTIyMywxMCArMjIzLDEwIEBAIFNLSVA6CiAJCSJjaGVjayBiYWNrdXAgZGly IHBlcm1pc3Npb25zIik7CiB9CiAKLSMgT25seSBhcmNoaXZlX3N0YXR1cyBkaXJlY3Rvcnkgc2hv dWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgorIyBPbmx5IGFyY2hpdmVfc3RhdHVzIGFuZCBzdW1t YXJpZXMgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgogaXNfZGVlcGx5 KAogCVsgc29ydChzbHVycF9kaXIoIiR0ZW1wZGlyL2JhY2t1cC9wZ193YWwvIikpIF0sCi0JWyBz b3J0IHF3KC4gLi4gYXJjaGl2ZV9zdGF0dXMpIF0sCisJWyBzb3J0IHF3KC4gLi4gYXJjaGl2ZV9z dGF0dXMgc3VtbWFyaWVzKSBdLAogCSdubyBXQUwgZmlsZXMgY29waWVkJyk7CiAKICMgQ29udGVu dHMgb2YgdGhlc2UgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQuCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvLmdpdGlnbm9yZSBiL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmQ3ZTYxNzQzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAv LmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitwZ19jb21iaW5lYmFja3VwCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2NvbWJpbmViYWNrdXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNr dXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzhiYTA1 ZTYyNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9NYWtlZmls ZQpAQCAtMCwwICsxLDUyIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZSBmb3Ig c3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwCisjCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorIworIyBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvTWFrZWZpbGUKKyMKKyMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisKK1BHRklMRURFU0MgPSAicGdfY29tYmluZWJhY2t1cCAtIGNvbWJpbmUgaW5jcmVt ZW50YWwgYmFja3VwcyIKK1BHQVBQSUNPTj13aW4zMgorCitzdWJkaXIgPSBzcmMvYmluL3BnX2Nv bWJpbmViYWNrdXAKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJw cV9zcmNkaXIpICQoQ1BQRkxBR1MpCitMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRk aXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGlscworCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwK KwlwZ19jb21iaW5lYmFja3VwLm8gXAorCWJhY2t1cF9sYWJlbC5vIFwKKwljb3B5X2ZpbGUubyBc CisJbG9hZF9tYW5pZmVzdC5vIFwKKwlyZWNvbnN0cnVjdC5vIFwKKwl3cml0ZV9tYW5pZmVzdC5v CisKK2FsbDogcGdfY29tYmluZWJhY2t1cAorCitwZ19jb21iaW5lYmFja3VwOiAkKE9CSlMpIHwg c3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykg JF4gJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCisKK2luc3RhbGw6 IGFsbCBpbnN0YWxsZGlycworCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19jb21iaW5lYmFja3VwJChY KSAnJChERVNURElSKSQoYmluZGlyKS9wZ19jb21iaW5lYmFja3VwJChYKScKKworaW5zdGFsbGRp cnM6CisJJChNS0RJUl9QKSAnJChERVNURElSKSQoYmluZGlyKScKKwordW5pbnN0YWxsOgorCXJt IC1mICckKERFU1RESVIpJChiaW5kaXIpL3BnX2NvbWJpbmViYWNrdXAkKFgpJworCitjbGVhbiBk aXN0Y2xlYW4gbWFpbnRhaW5lci1jbGVhbjoKKwlybSAtZiBwZ19jb21iaW5lYmFja3VwJChYKSAk KE9CSlMpCisKK2NoZWNrOgorCSQocHJvdmVfY2hlY2spCisKK2luc3RhbGxjaGVjazoKKwkkKHBy b3ZlX2luc3RhbGxjaGVjaykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9i YWNrdXBfbGFiZWwuYyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45MjJlMDA4NTRkCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2JhY2t1cF9sYWJlbC5jCkBAIC0w LDAgKzEsMjgzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZWFkIGFuZCBtYW5pcHVs YXRlIGJhY2t1cCBsYWJlbCBmaWxlcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUg ImJhY2t1cF9sYWJlbC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAi Y29tbW9uL2ZpbGVfcGVybS5oIgorI2luY2x1ZGUgIndyaXRlX21hbmlmZXN0LmgiCisKK3N0YXRp YyBpbnQJZ2V0X2VvbF9vZmZzZXQoU3RyaW5nSW5mbyBidWYpOworc3RhdGljIGJvb2wgbGluZV9z dGFydHNfd2l0aChjaGFyICpzLCBjaGFyICplLCBjaGFyICptYXRjaCwgY2hhciAqKnNvdXQpOwor c3RhdGljIGJvb2wgcGFyc2VfbHNuKGNoYXIgKnMsIGNoYXIgKmUsIFhMb2dSZWNQdHIgKmxzbiwg Y2hhciAqKmMpOworc3RhdGljIGJvb2wgcGFyc2VfdGxpKGNoYXIgKnMsIGNoYXIgKmUsIFRpbWVM aW5lSUQgKnRsaSk7CisKKy8qCisgKiBQYXJzZSBhIGJhY2t1cCBsYWJlbCBmaWxlLCBzdGFydGlu ZyBhdCBidWYtPmN1cnNvci4KKyAqCisgKiBXZSBleHBlY3QgdG8gZmluZCBhIFNUQVJUIFdBTCBM T0NBVElPTiBsaW5lLCBmb2xsb3dlZCBieSBhIExTTiwgZm9sbG93ZWQKKyAqIGJ5IGEgc3BhY2U7 IHRoZSByZXN1bHRpbmcgTFNOIGlzIHN0b3JlZCBpbnRvICpzdGFydF9sc24uCisgKgorICogV2Ug ZXhwZWN0IHRvIGZpbmQgYSBTVEFSVCBUSU1FTElORSBsaW5lLCBmb2xsb3dlZCBieSBhIFRMSSwg Zm9sbG93ZWQgYnkKKyAqIGEgbmV3bGluZTsgdGhlIHJlc3VsdGluZyBUTEkgaXMgc3RvcmVkIGlu dG8gKnN0YXJ0X3RsaS4KKyAqCisgKiBXZSBleHBlY3QgdG8gZmluZCBlaXRoZXIgYm90aCBJTkNS RU1FTlRBTCBGUk9NIExTTiBhbmQgSU5DUkVNRU5UQUwgRlJPTSBUTEkKKyAqIG9yIG5laXRoZXIu IElmIHRoZXNlIGFyZSBmb3VuZCwgdGhleSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYW4gTFNOIG9y IFRMSQorICogcmVzcGVjdGl2ZWx5IGFuZCB0aGVuIGJ5IGEgbmV3bGluZSwgYW5kIHRoZSB2YWx1 ZXMgd2lsbCBiZSBzdG9yZWQgaW50bworICogKnByZXZpb3VzX2xzbiBhbmQgKnByZXZpb3VzX3Rs aSwgcmVzcGVjdGl2ZWx5LgorICoKKyAqIE90aGVyIGxpbmVzIGluIHRoZSBwcm92aWRlZCBiYWNr dXBfbGFiZWwgZGF0YSBhcmUgaWdub3JlZC4gZmlsZW5hbWUgaXMgdXNlZAorICogZm9yIGVycm9y IHJlcG9ydGluZzsgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLwordm9pZAorcGFyc2VfYmFja3VwX2xh YmVsKGNoYXIgKmZpbGVuYW1lLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkgICBUaW1lTGluZUlEICpz dGFydF90bGksIFhMb2dSZWNQdHIgKnN0YXJ0X2xzbiwKKwkJCQkgICBUaW1lTGluZUlEICpwcmV2 aW91c190bGksIFhMb2dSZWNQdHIgKnByZXZpb3VzX2xzbikKK3sKKwlpbnQJCQlmb3VuZCA9IDA7 CisKKwkqc3RhcnRfdGxpID0gMDsKKwkqc3RhcnRfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJ KnByZXZpb3VzX3RsaSA9IDA7CisJKnByZXZpb3VzX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwor CisJd2hpbGUgKGJ1Zi0+Y3Vyc29yIDwgYnVmLT5sZW4pCisJeworCQljaGFyCSAgICpzID0gJmJ1 Zi0+ZGF0YVtidWYtPmN1cnNvcl07CisJCWludAkJCWVvID0gZ2V0X2VvbF9vZmZzZXQoYnVmKTsK KwkJY2hhcgkgICAqZSA9ICZidWYtPmRhdGFbZW9dOworCQljaGFyCSAgICpjOworCisJCWlmIChs aW5lX3N0YXJ0c193aXRoKHMsIGUsICJTVEFSVCBXQUwgTE9DQVRJT046ICIsICZzKSkKKwkJewor CQkJaWYgKCFwYXJzZV9sc24ocywgZSwgc3RhcnRfbHNuLCAmYykpCisJCQkJcGdfZmF0YWwoIiVz OiBjb3VsZCBub3QgcGFyc2UgJXMiLAorCQkJCQkJIGZpbGVuYW1lLCAiU1RBUlQgV0FMIExPQ0FU SU9OIik7CisJCQlpZiAoYyA+PSBlIHx8ICpjICE9ICcgJykKKwkJCQlwZ19mYXRhbCgiJXM6IGlt cHJvcGVyIHRlcm1pbmF0b3IgZm9yICVzIiwKKwkJCQkJCSBmaWxlbmFtZSwgIlNUQVJUIFdBTCBM T0NBVElPTiIpOworCQkJZm91bmQgfD0gMTsKKwkJfQorCQllbHNlIGlmIChsaW5lX3N0YXJ0c193 aXRoKHMsIGUsICJTVEFSVCBUSU1FTElORTogIiwgJnMpKQorCQl7CisJCQlpZiAoIXBhcnNlX3Rs aShzLCBlLCBzdGFydF90bGkpKQorCQkJCXBnX2ZhdGFsKCIlczogY291bGQgbm90IHBhcnNlIFRM SSBmb3IgJXMiLAorCQkJCQkJIGZpbGVuYW1lLCAiU1RBUlQgVElNRUxJTkUiKTsKKwkJCWlmICgq c3RhcnRfdGxpID09IDApCisJCQkJcGdfZmF0YWwoIiVzOiBpbnZhbGlkIFRMSSIsIGZpbGVuYW1l KTsKKwkJCWZvdW5kIHw9IDI7CisJCX0KKwkJZWxzZSBpZiAobGluZV9zdGFydHNfd2l0aChzLCBl LCAiSU5DUkVNRU5UQUwgRlJPTSBMU046ICIsICZzKSkKKwkJeworCQkJaWYgKCFwYXJzZV9sc24o cywgZSwgcHJldmlvdXNfbHNuLCAmYykpCisJCQkJcGdfZmF0YWwoIiVzOiBjb3VsZCBub3QgcGFy c2UgJXMiLAorCQkJCQkJIGZpbGVuYW1lLCAiSU5DUkVNRU5UQUwgRlJPTSBMU04iKTsKKwkJCWlm IChjID49IGUgfHwgKmMgIT0gJ1xuJykKKwkJCQlwZ19mYXRhbCgiJXM6IGltcHJvcGVyIHRlcm1p bmF0b3IgZm9yICVzIiwKKwkJCQkJCSBmaWxlbmFtZSwgIklOQ1JFTUVOVEFMIEZST00gTFNOIik7 CisJCQlmb3VuZCB8PSA0OworCQl9CisJCWVsc2UgaWYgKGxpbmVfc3RhcnRzX3dpdGgocywgZSwg IklOQ1JFTUVOVEFMIEZST00gVExJOiAiLCAmcykpCisJCXsKKwkJCWlmICghcGFyc2VfdGxpKHMs IGUsIHByZXZpb3VzX3RsaSkpCisJCQkJcGdfZmF0YWwoIiVzOiBjb3VsZCBub3QgcGFyc2UgJXMi LAorCQkJCQkJIGZpbGVuYW1lLCAiSU5DUkVNRU5UQUwgRlJPTSBUTEkiKTsKKwkJCWlmICgqcHJl dmlvdXNfdGxpID09IDApCisJCQkJcGdfZmF0YWwoIiVzOiBpbnZhbGlkIFRMSSIsIGZpbGVuYW1l KTsKKwkJCWZvdW5kIHw9IDg7CisJCX0KKworCQlidWYtPmN1cnNvciA9IGVvOworCX0KKworCWlm ICgoZm91bmQgJiAxKSA9PSAwKQorCQlwZ19mYXRhbCgiJXM6IGNvdWxkIG5vdCBmaW5kICVzIiwg ZmlsZW5hbWUsICJTVEFSVCBXQUwgTE9DQVRJT04iKTsKKwlpZiAoKGZvdW5kICYgMikgPT0gMCkK KwkJcGdfZmF0YWwoIiVzOiBjb3VsZCBub3QgZmluZCAlcyIsIGZpbGVuYW1lLCAiU1RBUlQgVElN RUxJTkUiKTsKKwlpZiAoKGZvdW5kICYgNCkgIT0gMCAmJiAoZm91bmQgJiA4KSA9PSAwKQorCQlw Z19mYXRhbCgiJXM6ICVzIHJlcXVpcmVzICVzIiwgZmlsZW5hbWUsCisJCQkJICJJTkNSRU1FTlRB TCBGUk9NIExTTiIsICJJTkNSRU1FTlRBTCBGUk9NIFRMSSIpOworCWlmICgoZm91bmQgJiA4KSAh PSAwICYmIChmb3VuZCAmIDQpID09IDApCisJCXBnX2ZhdGFsKCIlczogJXMgcmVxdWlyZXMgJXMi LCBmaWxlbmFtZSwKKwkJCQkgIklOQ1JFTUVOVEFMIEZST00gVExJIiwgIklOQ1JFTUVOVEFMIEZS T00gTFNOIik7Cit9CisKKy8qCisgKiBXcml0ZSBhIGJhY2t1cCBsYWJlbCBmaWxlIHRvIHRoZSBv dXRwdXQgZGlyZWN0b3J5LgorICoKKyAqIFRoaXMgd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlIHBy b3ZpZGVkIGJhY2t1cF9sYWJlbCBmaWxlLCBleGNlcHQgdGhhdCB0aGUKKyAqIElOQ1JFTUVOVEFM IEZST00gTFNOIGFuZCBJTkNSRU1FTlRBTCBGUk9NIFRMSSBsaW5lcyB3aWxsIGJlIG9taXR0ZWQu CisgKgorICogVGhlIG5ldyBmaWxlIHdpbGwgYmUgY2hlY2tzdW1tZWQgdXNpbmcgdGhlIHNwZWNp ZmllZCBhbGdvcml0aG0uIElmCisgKiBtd3JpdGVyICE9IE5VTEwsIGl0IHdpbGwgYmUgYWRkZWQg dG8gdGhlIG1hbmlmZXN0LgorICovCit2b2lkCit3cml0ZV9iYWNrdXBfbGFiZWwoY2hhciAqb3V0 cHV0X2RpcmVjdG9yeSwgU3RyaW5nSW5mbyBidWYsCisJCQkJICAgcGdfY2hlY2tzdW1fdHlwZSBj aGVja3N1bV90eXBlLCBtYW5pZmVzdF93cml0ZXIgKm13cml0ZXIpCit7CisJY2hhcgkJb3V0cHV0 X2ZpbGVuYW1lW01BWFBHUEFUSF07CisJaW50CQkJb3V0cHV0X2ZkOworCXBnX2NoZWNrc3VtX2Nv bnRleHQgY2hlY2tzdW1fY3R4OworCXVpbnQ4CQljaGVja3N1bV9wYXlsb2FkW1BHX0NIRUNLU1VN X01BWF9MRU5HVEhdOworCWludAkJCWNoZWNrc3VtX2xlbmd0aDsKKworCXBnX2NoZWNrc3VtX2lu aXQoJmNoZWNrc3VtX2N0eCwgY2hlY2tzdW1fdHlwZSk7CisKKwlzbnByaW50ZihvdXRwdXRfZmls ZW5hbWUsIE1BWFBHUEFUSCwgIiVzL2JhY2t1cF9sYWJlbCIsIG91dHB1dF9kaXJlY3RvcnkpOwor CisJaWYgKChvdXRwdXRfZmQgPSBvcGVuKG91dHB1dF9maWxlbmFtZSwKKwkJCQkJCSAgT19XUk9O TFkgfCBPX0NSRUFUIHwgT19FWENMIHwgUEdfQklOQVJZLAorCQkJCQkJICBwZ19maWxlX2NyZWF0 ZV9tb2RlKSkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVt Iiwgb3V0cHV0X2ZpbGVuYW1lKTsKKworCXdoaWxlIChidWYtPmN1cnNvciA8IGJ1Zi0+bGVuKQor CXsKKwkJY2hhcgkgICAqcyA9ICZidWYtPmRhdGFbYnVmLT5jdXJzb3JdOworCQlpbnQJCQllbyA9 IGdldF9lb2xfb2Zmc2V0KGJ1Zik7CisJCWNoYXIJICAgKmUgPSAmYnVmLT5kYXRhW2VvXTsKKwor CQlpZiAoIWxpbmVfc3RhcnRzX3dpdGgocywgZSwgIklOQ1JFTUVOVEFMIEZST00gTFNOOiAiLCBO VUxMKSAmJgorCQkJIWxpbmVfc3RhcnRzX3dpdGgocywgZSwgIklOQ1JFTUVOVEFMIEZST00gVExJ OiAiLCBOVUxMKSkKKwkJeworCQkJc3NpemVfdAkJd2I7CisKKwkJCXdiID0gd3JpdGUob3V0cHV0 X2ZkLCBzLCBlIC0gcyk7CisJCQlpZiAod2IgIT0gZSAtIHMpCisJCQl7CisJCQkJaWYgKHdiIDwg MCkKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBvdXRw dXRfZmlsZW5hbWUpOworCQkJCWVsc2UKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBm aWxlIFwiJXNcIjogd3JvdGUgb25seSAlZCBvZiAlZCBieXRlcyIsCisJCQkJCQkJIG91dHB1dF9m aWxlbmFtZSwgKGludCkgd2IsIChpbnQpIChlIC0gcykpOworCQkJfQorCQkJaWYgKHBnX2NoZWNr c3VtX3VwZGF0ZSgmY2hlY2tzdW1fY3R4LCAodWludDggKikgcywgZSAtIHMpIDwgMCkKKwkJCQlw Z19mYXRhbCgiY291bGQgbm90IHVwZGF0ZSBjaGVja3N1bSBvZiBmaWxlIFwiJXNcIiIsCisJCQkJ CQkgb3V0cHV0X2ZpbGVuYW1lKTsKKwkJfQorCisJCWJ1Zi0+Y3Vyc29yID0gZW87CisJfQorCisJ aWYgKGNsb3NlKG91dHB1dF9mZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBc IiVzXCI6ICVtIiwgb3V0cHV0X2ZpbGVuYW1lKTsKKworCWNoZWNrc3VtX2xlbmd0aCA9IHBnX2No ZWNrc3VtX2ZpbmFsKCZjaGVja3N1bV9jdHgsIGNoZWNrc3VtX3BheWxvYWQpOworCisJaWYgKG13 cml0ZXIgIT0gTlVMTCkKKwl7CisJCXN0cnVjdCBzdGF0IHNiOworCisJCS8qCisJCSAqIFdlIGNv dWxkIHRyYWNrIHRoZSBsZW5ndGggb3Vyc2VsdmVzLCBidXQgbXVzdCBzdGF0KCkgdG8gZ2V0IHRo ZQorCQkgKiBtdGltZS4KKwkJICovCisJCWlmIChzdGF0KG91dHB1dF9maWxlbmFtZSwgJnNiKSA8 IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHN0YXQgZmlsZSBcIiVzXCI6ICVtIiwgb3V0cHV0 X2ZpbGVuYW1lKTsKKwkJYWRkX2ZpbGVfdG9fbWFuaWZlc3QobXdyaXRlciwgImJhY2t1cF9sYWJl bCIsIHNiLnN0X3NpemUsCisJCQkJCQkJIHNiLnN0X210aW1lLCBjaGVja3N1bV90eXBlLAorCQkJ CQkJCSBjaGVja3N1bV9sZW5ndGgsIGNoZWNrc3VtX3BheWxvYWQpOworCX0KK30KKworLyoKKyAq IFJldHVybiB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGJ1ZmZlciBz dGFydHMsIG9yIHRoZXJlCisgKiBpcyBub25lLCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBidWZm ZXIgZW5kcy4KKyAqCisgKiBUaGUgc2VhcmNoIGJlZ2lucyBhdCBidWYtPmN1cnNvci4KKyAqLwor c3RhdGljIGludAorZ2V0X2VvbF9vZmZzZXQoU3RyaW5nSW5mbyBidWYpCit7CisJaW50CQkJZW8g PSBidWYtPmN1cnNvcjsKKworCXdoaWxlIChlbyA8IGJ1Zi0+bGVuKQorCXsKKwkJaWYgKGJ1Zi0+ ZGF0YVtlb10gPT0gJ1xuJykKKwkJCXJldHVybiBlbyArIDE7CisJCSsrZW87CisJfQorCisJcmV0 dXJuIGVvOworfQorCisvKgorICogVGVzdCB3aGV0aGVyIHRoZSBsaW5lIHRoYXQgcnVucyBmcm9t IHMgdG8gZSAoaW5jbHVzaXZlIG9mICpzLCBidXQgbm90CisgKiBpbmNsdXNpdmUgb2YgKmUpIHN0 YXJ0cyB3aXRoIHRoZSBtYXRjaCBzdHJpbmcgcHJvdmlkZWQsIGFuZCByZXR1cm4gdHJ1ZQorICog b3IgZmFsc2UgYWNjb3JkaW5nIHRvIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgdGhlIGNhc2UuCisg KgorICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBhbmQgaWYgKnNvdXQgIT0gTlVMTCwg c3RvcmVzIGEgcG9pbnRlciB0byB0aGUKKyAqIGJ5dGUgZm9sbG93aW5nIHRoZSBtYXRjaCBpbnRv ICpzb3V0LgorICovCitzdGF0aWMgYm9vbAorbGluZV9zdGFydHNfd2l0aChjaGFyICpzLCBjaGFy ICplLCBjaGFyICptYXRjaCwgY2hhciAqKnNvdXQpCit7CisJd2hpbGUgKHMgPCBlICYmICptYXRj aCAhPSAnXDAnICYmICpzID09ICptYXRjaCkKKwkJKytzLCArK21hdGNoOworCisJaWYgKCptYXRj aCA9PSAnXDAnICYmIHNvdXQgIT0gTlVMTCkKKwkJKnNvdXQgPSBzOworCisJcmV0dXJuICgqbWF0 Y2ggPT0gJ1wwJyk7Cit9CisKKy8qCisgKiBQYXJzZSBhbiBMU04gc3RhcnRpbmcgYXQgcyBhbmQg bm90IHN0b3BwaW5nIGF0IG9yIGJlZm9yZSBlLiBUaGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0cnVl IG9uIHN1Y2Nlc3MgYW5kIG90aGVyd2lzZSBmYWxzZS4gT24gc3VjY2Vzcywgc3RvcmVzIHRoZSBy ZXN1bHQgaW50bworICogKmxzbiBhbmQgc2V0cyAqYyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIHRo YXQgaXMgbm90IHBhcnQgb2YgdGhlIExTTi4KKyAqLworc3RhdGljIGJvb2wKK3BhcnNlX2xzbihj aGFyICpzLCBjaGFyICplLCBYTG9nUmVjUHRyICpsc24sIGNoYXIgKipjKQoreworCWNoYXIJCXNh dmUgPSAqZTsKKwlpbnQJCQluY2hhcnM7CisJYm9vbAkJc3VjY2VzczsKKwl1bnNpZ25lZAloaTsK Kwl1bnNpZ25lZAlsbzsKKworCSplID0gJ1wwJzsKKwlzdWNjZXNzID0gKHNzY2FuZihzLCAiJVgv JVglbiIsICZoaSwgJmxvLCAmbmNoYXJzKSA9PSAyKTsKKwkqZSA9IHNhdmU7CisKKwlpZiAoc3Vj Y2VzcykKKwl7CisJCSpsc24gPSAoKFhMb2dSZWNQdHIpIGhpKSA8PCAzMiB8IChYTG9nUmVjUHRy KSBsbzsKKwkJKmMgPSBzICsgbmNoYXJzOworCX0KKworCXJldHVybiBzdWNjZXNzOworfQorCisv KgorICogUGFyc2UgYSBUTEkgc3RhcnRpbmcgYXQgcyBhbmQgc3RvcHBpbmcgYXQgb3IgYmVmb3Jl IGUuIFRoZSByZXR1cm4gdmFsdWUgaXMKKyAqIHRydWUgb24gc3VjY2VzcyBhbmQgb3RoZXJ3aXNl IGZhbHNlLiBPbiBzdWNjZXNzLCBzdG9yZXMgdGhlIHJlc3VsdCBpbnRvCisgKiAqdGxpLiBJZiB0 aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIFRMSSBpcyBhbnl0aGlu ZyBvdGhlcgorICogdGhhbiBhIG5ld2xpbmUsIHRoYXQgaXMgZGVlbWVkIGEgZmFpbHVyZS4KKyAq Lworc3RhdGljIGJvb2wKK3BhcnNlX3RsaShjaGFyICpzLCBjaGFyICplLCBUaW1lTGluZUlEICp0 bGkpCit7CisJY2hhcgkJc2F2ZSA9ICplOworCWludAkJCW5jaGFyczsKKwlib29sCQlzdWNjZXNz OworCisJKmUgPSAnXDAnOworCXN1Y2Nlc3MgPSAoc3NjYW5mKHMsICIldSVuIiwgdGxpLCAmbmNo YXJzKSA9PSAxKTsKKwkqZSA9IHNhdmU7CisKKwlpZiAoc3VjY2VzcyAmJiBzW25jaGFyc10gIT0g J1xuJykKKwkJc3VjY2VzcyA9IGZhbHNlOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmggYi9zcmMvYmluL3Bn X2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uM2FmN2VhMjc0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29t YmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuaApAQCAtMCwwICsxLDMwIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBSZWFkIGFuZCBtYW5pcHVsYXRlIGJhY2t1cCBsYWJlbCBmaWxlcworICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvYmluL3BnX2NvbWJp bmViYWNrdXAvYmFja3VwX2xhYmVsLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lm bmRlZiBCQUNLVVBfTEFCRUxfSAorI2RlZmluZSBCQUNLVVBfTEFCRUxfSAorCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiY29tbW9uL2NoZWNrc3VtX2hlbHBlci5oIgor I2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisKK3N0cnVjdCBtYW5pZmVzdF93cml0ZXI7CisK K2V4dGVybiB2b2lkIHBhcnNlX2JhY2t1cF9sYWJlbChjaGFyICpmaWxlbmFtZSwgU3RyaW5nSW5m byBidWYsCisJCQkJCQkJICAgVGltZUxpbmVJRCAqc3RhcnRfdGxpLAorCQkJCQkJCSAgIFhMb2dS ZWNQdHIgKnN0YXJ0X2xzbiwKKwkJCQkJCQkgICBUaW1lTGluZUlEICpwcmV2aW91c190bGksCisJ CQkJCQkJICAgWExvZ1JlY1B0ciAqcHJldmlvdXNfbHNuKTsKK2V4dGVybiB2b2lkIHdyaXRlX2Jh Y2t1cF9sYWJlbChjaGFyICpvdXRwdXRfZGlyZWN0b3J5LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CQkgICBwZ19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGUsCisJCQkJCQkJICAgc3RydWN0IG1h bmlmZXN0X3dyaXRlciAqbXdyaXRlcik7CisKKyNlbmRpZgkJCQkJCQkvKiBCQUNLVVBfTEFCRUxf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5jIGIv c3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjQwYTU1ZTMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD b3B5IGVudGlyZSBmaWxlcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy MywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaWZkZWYgSEFWRV9D T1BZRklMRV9ICisjaW5jbHVkZSA8Y29weWZpbGUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1 ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2lu Y2x1ZGUgImNvcHlfZmlsZS5oIgorCitzdGF0aWMgdm9pZCBjb3B5X2ZpbGVfYmxvY2tzKGNvbnN0 IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LAorCQkJCQkJCSBwZ19jaGVja3N1bV9jb250ZXh0 ICpjaGVja3N1bV9jdHgpOworCisjaWZkZWYgV0lOMzIKK3N0YXRpYyB2b2lkIGNvcHlfZmlsZV9j b3B5ZmlsZShjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCk7CisjZW5kaWYKKworLyoK KyAqIENvcHkgYSByZWd1bGFyIGZpbGUsIG9wdGlvbmFsbHkgY29tcHV0aW5nIGEgY2hlY2tzdW0s IGFuZCBlbWl0dGluZworICogYXBwcm9wcmlhdGUgZGVidWcgbWVzc2FnZXMuIEJ1dCBpZiB3ZSdy ZSBpbiBkcnktcnVuIG1vZGUsIHRoZW4ganVzdCBlbWl0CisgKiB0aGUgbWVzc2FnZXMgYW5kIGRv bid0IGNvcHkgYW55dGhpbmcuCisgKi8KK3ZvaWQKK2NvcHlfZmlsZShjb25zdCBjaGFyICpzcmMs IGNvbnN0IGNoYXIgKmRzdCwKKwkJICBwZ19jaGVja3N1bV9jb250ZXh0ICpjaGVja3N1bV9jdHgs IGJvb2wgZHJ5X3J1bikKK3sKKwkvKgorCSAqIEluIGRyeS1ydW4gbW9kZSwgd2UgZG9uJ3QgYWN0 dWFsbHkgY29weSBhbnl0aGluZywgbm9yIGRvIHdlIHJlYWQgYW55CisJICogZGF0YSBmcm9tIHRo ZSBzb3VyY2UgZmlsZSwgYnV0IHdlIGRvIHZlcmlmeSB0aGF0IHdlIGNhbiBvcGVuIGl0LgorCSAq LworCWlmIChkcnlfcnVuKQorCXsKKwkJaW50CQkJZmQ7CisKKwkJaWYgKChmZCA9IG9wZW4oc3Jj LCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg b3BlbiBcIiVzXCI6ICVtIiwgc3JjKTsKKwkJaWYgKGNsb3NlKGZkKSA8IDApCisJCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIFwiJXNcIjogJW0iLCBzcmMpOworCX0KKworCS8qCisJICogSWYg d2UgZG9uJ3QgbmVlZCB0byBjb21wdXRlIGEgY2hlY2tzdW0sIHRoZW4gd2UgY2FuIHVzZSBhbnkg c3BlY2lhbAorCSAqIG9wZXJhdGluZyBzeXN0ZW0gcHJpbWl0aXZlcyB0aGF0IHdlIGtub3cgYWJv dXQgdG8gY29weSB0aGUgZmlsZTsgdGhpcworCSAqIG1heSBiZSBxdWlja2VyIHRoYW4gYSBuYWl2 ZSBibG9jayBjb3B5LgorCSAqLworCWlmIChjaGVja3N1bV9jdHgtPnR5cGUgPT0gQ0hFQ0tTVU1f VFlQRV9OT05FKQorCXsKKwkJY2hhcgkgICAqc3RyYXRlZ3lfbmFtZSA9IE5VTEw7CisJCXZvaWQJ CSgqc3RyYXRlZ3lfaW1wbGVtZW50YXRpb24pIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikg PSBOVUxMOworCisjaWZkZWYgV0lOMzIKKwkJc3RyYXRlZ3lfbmFtZSA9ICJDb3B5RmlsZSI7CisJ CXN0cmF0ZWd5X2ltcGxlbWVudGF0aW9uID0gY29weV9maWxlX2NvcHlmaWxlOworI2VuZGlmCisK KwkJaWYgKHN0cmF0ZWd5X25hbWUgIT0gTlVMTCkKKwkJeworCQkJaWYgKGRyeV9ydW4pCisJCQkJ cGdfbG9nX2RlYnVnKCJ3b3VsZCBjb3B5IFwiJXNcIiB0byBcIiVzXCIgdXNpbmcgc3RyYXRlZ3kg JXMiLAorCQkJCQkJCSBzcmMsIGRzdCwgc3RyYXRlZ3lfbmFtZSk7CisJCQllbHNlCisJCQl7CisJ CQkJcGdfbG9nX2RlYnVnKCJjb3B5aW5nIFwiJXNcIiB0byBcIiVzXCIgdXNpbmcgc3RyYXRlZ3kg JXMiLAorCQkJCQkJCSBzcmMsIGRzdCwgc3RyYXRlZ3lfbmFtZSk7CisJCQkJKCpzdHJhdGVneV9p bXBsZW1lbnRhdGlvbikgKHNyYywgZHN0KTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCX0KKwor CS8qCisJICogRmFsbCBiYWNrIHRvIHRoZSBzaW1wbGUgYXBwcm9hY2ggb2YgcmVhZGluZyBhbmQg d3JpdGluZyBhbGwgdGhlIGJsb2NrcywKKwkgKiBmZWVkaW5nIHRoZW0gaW50byB0aGUgY2hlY2tz dW0gY29udGV4dCBhcyB3ZSBnby4KKwkgKi8KKwlpZiAoZHJ5X3J1bikKKwl7CisJCWlmIChjaGVj a3N1bV9jdHgtPnR5cGUgPT0gQ0hFQ0tTVU1fVFlQRV9OT05FKQorCQkJcGdfbG9nX2RlYnVnKCJ3 b3VsZCBjb3B5IFwiJXNcIiB0byBcIiVzXCIiLAorCQkJCQkJIHNyYywgZHN0KTsKKwkJZWxzZQor CQkJcGdfbG9nX2RlYnVnKCJ3b3VsZCBjb3B5IFwiJXNcIiB0byBcIiVzXCIgYW5kIGNoZWNrc3Vt IHdpdGggJXMiLAorCQkJCQkJIHNyYywgZHN0LCBwZ19jaGVja3N1bV90eXBlX25hbWUoY2hlY2tz dW1fY3R4LT50eXBlKSk7CisJfQorCWVsc2UKKwl7CisJCWlmIChjaGVja3N1bV9jdHgtPnR5cGUg PT0gQ0hFQ0tTVU1fVFlQRV9OT05FKQorCQkJcGdfbG9nX2RlYnVnKCJjb3B5aW5nIFwiJXNcIiB0 byBcIiVzXCIiLAorCQkJCQkJIHNyYywgZHN0KTsKKwkJZWxzZQorCQkJcGdfbG9nX2RlYnVnKCJj b3B5aW5nIFwiJXNcIiB0byBcIiVzXCIgYW5kIGNoZWNrc3VtbWluZyB3aXRoICVzIiwKKwkJCQkJ CSBzcmMsIGRzdCwgcGdfY2hlY2tzdW1fdHlwZV9uYW1lKGNoZWNrc3VtX2N0eC0+dHlwZSkpOwor CQljb3B5X2ZpbGVfYmxvY2tzKHNyYywgZHN0LCBjaGVja3N1bV9jdHgpOworCX0KK30KKworLyoK KyAqIENvcHkgYSBmaWxlIGJsb2NrIGJ5IGJsb2NrLCBhbmQgb3B0aW9uYWxseSBjb21wdXRlIGEg Y2hlY2tzdW0gYXMgd2UgZ28uCisgKi8KK3N0YXRpYyB2b2lkCitjb3B5X2ZpbGVfYmxvY2tzKGNv bnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LAorCQkJCSBwZ19jaGVja3N1bV9jb250ZXh0 ICpjaGVja3N1bV9jdHgpCit7CisJaW50CQkJc3JjX2ZkOworCWludAkJCWRlc3RfZmQ7CisJdWlu dDgJICAgKmJ1ZmZlcjsKKwljb25zdCBpbnQJYnVmZmVyX3NpemUgPSA1MCAqIEJMQ0tTWjsKKwlz c2l6ZV90CQlyYjsKKwl1bnNpZ25lZAlvZmZzZXQgPSAwOworCisJaWYgKChzcmNfZmQgPSBvcGVu KHNyYywgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBzcmMpOworCisJaWYgKChkZXN0X2ZkID0gb3Blbihk c3QsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCB8IFBHX0JJTkFSWSwKKwkJCQkJCXBnX2Zp bGVfY3JlYXRlX21vZGUpKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwi JXNcIjogJW0iLCBkc3QpOworCisJYnVmZmVyID0gcGdfbWFsbG9jKGJ1ZmZlcl9zaXplKTsKKwor CXdoaWxlICgocmIgPSByZWFkKHNyY19mZCwgYnVmZmVyLCBidWZmZXJfc2l6ZSkpID4gMCkKKwl7 CisJCXNzaXplX3QJCXdiOworCisJCWlmICgod2IgPSB3cml0ZShkZXN0X2ZkLCBidWZmZXIsIHJi KSkgIT0gcmIpCisJCXsKKwkJCWlmICh3YiA8IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBkc3QpOworCQkJZWxzZQorCQkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6IHdyb3RlIG9ubHkgJWQgb2YgJWQgYnl0ZXMgYXQgb2Zm c2V0ICV1IiwKKwkJCQkJCSBkc3QsIChpbnQpIHdiLCAoaW50KSByYiwgb2Zmc2V0KTsKKwkJfQor CisJCWlmIChwZ19jaGVja3N1bV91cGRhdGUoY2hlY2tzdW1fY3R4LCBidWZmZXIsIHJiKSA8IDAp CisJCQlwZ19mYXRhbCgiY291bGQgbm90IHVwZGF0ZSBjaGVja3N1bSBvZiBmaWxlIFwiJXNcIiIs IGRzdCk7CisKKwkJb2Zmc2V0ICs9IHJiOworCX0KKworCWlmIChyYiA8IDApCisJCXBnX2ZhdGFs KCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBkc3QpOworCisJcGdfZnJlZShidWZm ZXIpOworCWNsb3NlKHNyY19mZCk7CisJY2xvc2UoZGVzdF9mZCk7Cit9CisKKyNpZmRlZiBXSU4z Mgorc3RhdGljIHZvaWQKK2NvcHlfZmlsZV9jb3B5ZmlsZShjb25zdCBjaGFyICpzcmMsIGNvbnN0 IGNoYXIgKmRzdCkKK3sKKwlpZiAoQ29weUZpbGUoc3JjLCBkc3QsIHRydWUpID09IDApCisJewor CQlfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb3B5 IFwiJXNcIiB0byBcIiVzXCI6ICVtIiwgc3JjLCBkc3QpOworCX0KK30KKyNlbmRpZgkJCQkJCQkv KiBXSU4zMiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmls ZS5oIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjAzMTAzMGJhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvYmluL3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmgKQEAgLTAsMCArMSwxOSBAQAorLyoK KyAqIENvcHkgZW50aXJlIGZpbGVzLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBDT1BZX0ZJTEVfSAorI2RlZmluZSBDT1BZX0ZJ TEVfSAorCisjaW5jbHVkZSAiY29tbW9uL2NoZWNrc3VtX2hlbHBlci5oIgorCitleHRlcm4gdm9p ZCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCisJCQkJCSAgcGdf Y2hlY2tzdW1fY29udGV4dCAqY2hlY2tzdW1fY3R4LCBib29sIGRyeV9ydW4pOworCisjZW5kaWYJ CQkJCQkJLyogQ09QWV9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJh Y2t1cC9sb2FkX21hbmlmZXN0LmMgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbG9hZF9tYW5p ZmVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFkMzIzMjNjOWMK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbG9hZF9tYW5pZmVz dC5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBMb2FkIGRh dGEgZnJvbSBhIGJhY2t1cCBtYW5pZmVzdCBpbnRvIG1lbW9yeS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRf bWFuaWZlc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K KworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5o IgorI2luY2x1ZGUgImNvbW1vbi9wYXJzZV9tYW5pZmVzdC5oIgorI2luY2x1ZGUgImxvYWRfbWFu aWZlc3QuaCIKKworLyoKKyAqIEZvciBlZmZpY2llbmN5LCB3ZSdkIGxpa2Ugb3VyIGhhc2ggdGFi bGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIG1hbmlmZXN0IHRvIHN0YXJ0 IG91dCB3aXRoIGFwcHJveGltYXRlbHkgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVudHJpZXMuCisg KiBUaGVyZSdzIG5vIHdheSB0byBrbm93IHRoZSBleGFjdCBudW1iZXIgb2YgZW50cmllcyB3aXRo b3V0IHJlYWRpbmcgdGhlIHdob2xlCisgKiBmaWxlLCBidXQgd2UgY2FuIGdldCBhbiBlc3RpbWF0 ZSBieSBkaXZpZGluZyB0aGUgZmlsZSBzaXplIGJ5IHRoZSBlc3RpbWF0ZWQKKyAqIG51bWJlciBv ZiBieXRlcyBwZXIgbGluZS4KKyAqCisgKiBUaGlzIGNvdWxkIGJlIG9mZiBieSBhYm91dCBhIGZh Y3RvciBvZiB0d28gaW4gZWl0aGVyIGRpcmVjdGlvbiwgYmVjYXVzZSB0aGUKKyAqIGNoZWNrc3Vt IGFsZ29yaXRobSBoYXMgYSBiaWcgaW1wYWN0IG9uIHRoZSBsaW5lIGxlbmd0aHM7IGUuZy4gYSBT SEE1MTIKKyAqIGNoZWNrc3VtIGlzIDEyOCBoZXggYnl0ZXMsIHdoZXJlYXMgYSBDUkMtMzJDIHZh bHVlIGlzIG9ubHkgOCwgYW5kIHRoZXJlCisgKiBtaWdodCBiZSBubyBjaGVja3N1bSBhdCBhbGwu CisgKi8KKyNkZWZpbmUgRVNUSU1BVEVEX0JZVEVTX1BFUl9NQU5JRkVTVF9MSU5FCTEwMAorCisv KgorICogRGVmaW5lIGEgaGFzaCB0YWJsZSB3aGljaCB3ZSBjYW4gdXNlIHRvIHN0b3JlIGluZm9y bWF0aW9uIGFib3V0IHRoZSBmaWxlcworICogbWVudGlvbmVkIGluIHRoZSBiYWNrdXAgbWFuaWZl c3QuCisgKi8KK3N0YXRpYyB1aW50MzIgaGFzaF9zdHJpbmdfcG9pbnRlcihjaGFyICpzKTsKKyNk ZWZpbmUgU0hfUFJFRklYCQltYW5pZmVzdF9maWxlcworI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJ bWFuaWZlc3RfZmlsZQorI2RlZmluZSBTSF9LRVlfVFlQRQkJY2hhciAqCisjZGVmaW5lCVNIX0tF WQkJCXBhdGhuYW1lCisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCWhhc2hfc3RyaW5nX3Bv aW50ZXIoa2V5KQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikJCShzdHJjbXAoYSwgYikgPT0g MCkKKyNkZWZpbmUJU0hfU0NPUEUJCWV4dGVybgorI2RlZmluZSBTSF9SQVdfQUxMT0NBVE9SCXBn X21hbGxvYzAKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIK Kworc3RhdGljIHZvaWQgY29tYmluZWJhY2t1cF9wZXJfZmlsZV9jYihKc29uTWFuaWZlc3RQYXJz ZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIGNoYXIgKnBhdGhuYW1lLCBzaXplX3Qgc2l6 ZSwKKwkJCQkJCQkJCSAgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAorCQkJCQkJCQkJ ICBpbnQgY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJCQkJICB1aW50OCAqY2hlY2tzdW1fcGF5bG9h ZCk7CitzdGF0aWMgdm9pZCBjb21iaW5lYmFja3VwX3Blcl93YWxfcmFuZ2VfY2IoSnNvbk1hbmlm ZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCSAgIFRpbWVMaW5lSUQgdGxpLAor CQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgZW5kX2xzbik7CitzdGF0aWMgdm9pZCByZXBvcnRfbWFuaWZlc3RfZXJyb3IoSnNvbk1hbmlm ZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwuLi4p CisJCQlwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwor CisvKgorICogTG9hZCBiYWNrdXBfbWFuaWZlc3QgZmlsZXMgZnJvbSBhbiBhcnJheSBvZiBiYWNr dXBzIGFuZCBwcm9kdWNlcyBhbiBhcnJheQorICogb2YgbWFuaWZlc3RfZGF0YSBvYmplY3RzLgor ICoKKyAqIE5COiBTaW5jZSBsb2FkX2JhY2t1cF9tYW5pZmVzdCgpIGNhbiByZXR1cm4gTlVMTCwg dGhlIHJlc3VsdGluZyBhcnJheSBjb3VsZAorICogY29udGFpbiBOVUxMIGVudHJpZXMuCisgKi8K K21hbmlmZXN0X2RhdGEgKioKK2xvYWRfYmFja3VwX21hbmlmZXN0cyhpbnQgbl9iYWNrdXBzLCBj aGFyICoqYmFja3VwX2RpcmVjdG9yaWVzKQoreworCW1hbmlmZXN0X2RhdGEgKipyZXN1bHQ7CisJ aW50CQkJaTsKKworCXJlc3VsdCA9IHBnX21hbGxvYyhzaXplb2YobWFuaWZlc3RfZGF0YSAqKSAq IG5fYmFja3Vwcyk7CisJZm9yIChpID0gMDsgaSA8IG5fYmFja3VwczsgKytpKQorCQlyZXN1bHRb aV0gPSBsb2FkX2JhY2t1cF9tYW5pZmVzdChiYWNrdXBfZGlyZWN0b3JpZXNbaV0pOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBiYWNrdXBfbWFuaWZlc3QgZmlsZSBp biB0aGUgbmFtZWQgYmFja3VwIGRpcmVjdG9yeS4gQ29uc3RydWN0IGEKKyAqIGhhc2ggdGFibGUg d2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGZpbGVzIGl0IG1lbnRpb25zLCBhbmQgYSBs aW5rZWQKKyAqIGxpc3Qgb2YgYWxsIHRoZSBXQUwgcmFuZ2VzIGl0IG1lbnRpb25zLgorICoKKyAq IElmIHRoZSBiYWNrdXBfbWFuaWZlc3QgZmlsZSBzaW1wbHkgZG9lc24ndCBleGlzdCwgbG9ncyBh IHdhcm5pbmcgYW5kIHJldHVybnMKKyAqIE5VTEwuIEFueSBvdGhlciBlcnJvciwgb3IgYW55IGVy cm9yIHBhcnNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCBpcworICogZmF0YWwuCisgKi8K K21hbmlmZXN0X2RhdGEgKgorbG9hZF9iYWNrdXBfbWFuaWZlc3QoY2hhciAqYmFja3VwX2RpcmVj dG9yeSkKK3sKKwljaGFyCQlwYXRobmFtZVtNQVhQR1BBVEhdOworCWludAkJCWZkOworCXN0cnVj dCBzdGF0IHN0YXRidWY7CisJb2ZmX3QJCWVzdGltYXRlOworCXVpbnQzMgkJaW5pdGlhbF9zaXpl OworCW1hbmlmZXN0X2ZpbGVzX2hhc2ggKmh0OworCWNoYXIJICAgKmJ1ZmZlcjsKKwlpbnQJCQly YzsKKwlKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgY29udGV4dDsKKwltYW5pZmVzdF9kYXRhICpy ZXN1bHQ7CisKKwkvKiBPcGVuIHRoZSBtYW5pZmVzdCBmaWxlLiAqLworCXNucHJpbnRmKHBhdGhu YW1lLCBNQVhQR1BBVEgsICIlcy9iYWNrdXBfbWFuaWZlc3QiLCBiYWNrdXBfZGlyZWN0b3J5KTsK KwlpZiAoKGZkID0gb3BlbihwYXRobmFtZSwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDAp CisJeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQl7CisJCQlwZ19sb2dfd2FybmluZygiXCIl c1wiIGRvZXMgbm90IGV4aXN0IiwgcGF0aG5hbWUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJ cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGhuYW1lKTsKKwl9 CisKKwkvKiBGaWd1cmUgb3V0IGhvdyBiaWcgdGhlIG1hbmlmZXN0IGlzLiAqLworCWlmIChmc3Rh dChmZCwgJnN0YXRidWYpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc3RhdCBmaWxlIFwi JXNcIjogJW0iLCBwYXRobmFtZSk7CisKKwkvKiBHdWVzcyBob3cgbGFyZ2UgdG8gbWFrZSB0aGUg aGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2l6ZS4gKi8KKwllc3RpbWF0ZSA9IHN0 YXRidWYuc3Rfc2l6ZSAvIEVTVElNQVRFRF9CWVRFU19QRVJfTUFOSUZFU1RfTElORTsKKwlpbml0 aWFsX3NpemUgPSBNaW4oUEdfVUlOVDMyX01BWCwgTWF4KGVzdGltYXRlLCAyNTYpKTsKKworCS8q IENyZWF0ZSB0aGUgaGFzaCB0YWJsZS4gKi8KKwlodCA9IG1hbmlmZXN0X2ZpbGVzX2NyZWF0ZShp bml0aWFsX3NpemUsIE5VTEwpOworCisJLyoKKwkgKiBTbHVycCBpbiB0aGUgd2hvbGUgZmlsZS4K KwkgKgorCSAqIFRoaXMgaXMgbm90IGlkZWFsLCBidXQgdGhlcmUncyBjdXJyZW50bHkgbm8gd2F5 IHRvIGdldCBwZ19wYXJzZV9qc29uKCkKKwkgKiB0byBwZXJmb3JtIGluY3JlbWVudGFsIHBhcnNp bmcuCisJICovCisJYnVmZmVyID0gcGdfbWFsbG9jKHN0YXRidWYuc3Rfc2l6ZSk7CisJcmMgPSBy ZWFkKGZkLCBidWZmZXIsIHN0YXRidWYuc3Rfc2l6ZSk7CisJaWYgKHJjICE9IHN0YXRidWYuc3Rf c2l6ZSkKKwl7CisJCWlmIChyYyA8IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmls ZSBcIiVzXCI6ICVtIiwgcGF0aG5hbWUpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZmlsZSBcIiVzXCI6IHJlYWQgJWQgb2YgJWxsZCIsCisJCQkJCSBwYXRobmFtZSwgcmMs IChsb25nIGxvbmcgaW50KSBzdGF0YnVmLnN0X3NpemUpOworCX0KKworCS8qIENsb3NlIHRoZSBt YW5pZmVzdCBmaWxlLiAqLworCWNsb3NlKGZkKTsKKworCS8qIFBhcnNlIHRoZSBtYW5pZmVzdC4g Ki8KKwlyZXN1bHQgPSBwZ19tYWxsb2MwKHNpemVvZihtYW5pZmVzdF9kYXRhKSk7CisJcmVzdWx0 LT5maWxlcyA9IGh0OworCWNvbnRleHQucHJpdmF0ZV9kYXRhID0gcmVzdWx0OworCWNvbnRleHQu cGVyX2ZpbGVfY2IgPSBjb21iaW5lYmFja3VwX3Blcl9maWxlX2NiOworCWNvbnRleHQucGVyX3dh bF9yYW5nZV9jYiA9IGNvbWJpbmViYWNrdXBfcGVyX3dhbF9yYW5nZV9jYjsKKwljb250ZXh0LmVy cm9yX2NiID0gcmVwb3J0X21hbmlmZXN0X2Vycm9yOworCWpzb25fcGFyc2VfbWFuaWZlc3QoJmNv bnRleHQsIGJ1ZmZlciwgc3RhdGJ1Zi5zdF9zaXplKTsKKworCS8qIEFsbCBkb25lLiAqLworCXBm cmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJlcG9ydCBhbiBlcnJv ciB3aGlsZSBwYXJzaW5nIHRoZSBtYW5pZmVzdC4KKyAqCisgKiBXZSBjb25zaWRlciBhbGwgc3Vj aCBlcnJvcnMgdG8gYmUgZmF0YWwgZXJyb3JzLiBUaGUgbWFuaWZlc3QgcGFyc2VyCisgKiBleHBl Y3RzIHRoaXMgZnVuY3Rpb24gbm90IHRvIHJldHVybi4KKyAqLworc3RhdGljIHZvaWQKK3JlcG9y dF9tYW5pZmVzdF9lcnJvcihKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0 IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsK KwlwZ19sb2dfZ2VuZXJpY192KFBHX0xPR19FUlJPUiwgUEdfTE9HX1BSSU1BUlksIGdldHRleHQo Zm10KSwgYXApOworCXZhX2VuZChhcCk7CisKKwlleGl0KDEpOworfQorCisvKgorICogUmVjb3Jk IGRldGFpbHMgZXh0cmFjdGVkIGZyb20gdGhlIGJhY2t1cCBtYW5pZmVzdCBmb3Igb25lIGZpbGUu CisgKi8KK3N0YXRpYyB2b2lkCitjb21iaW5lYmFja3VwX3Blcl9maWxlX2NiKEpzb25NYW5pZmVz dFBhcnNlQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgY2hhciAqcGF0aG5hbWUsIHNpemVfdCBz aXplLAorCQkJCQkJICBwZ19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGUsCisJCQkJCQkgIGlu dCBjaGVja3N1bV9sZW5ndGgsIHVpbnQ4ICpjaGVja3N1bV9wYXlsb2FkKQoreworCW1hbmlmZXN0 X2RhdGEgKm1hbmlmZXN0ID0gY29udGV4dC0+cHJpdmF0ZV9kYXRhOworCW1hbmlmZXN0X2ZpbGUg Km07CisJYm9vbAkJZm91bmQ7CisKKwkvKiBNYWtlIGEgbmV3IGVudHJ5IGluIHRoZSBoYXNoIHRh YmxlIGZvciB0aGlzIGZpbGUuICovCisJbSA9IG1hbmlmZXN0X2ZpbGVzX2luc2VydChtYW5pZmVz dC0+ZmlsZXMsIHBhdGhuYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJcGdfZmF0YWwoImR1 cGxpY2F0ZSBwYXRoIG5hbWUgaW4gYmFja3VwIG1hbmlmZXN0OiBcIiVzXCIiLCBwYXRobmFtZSk7 CisKKwkvKiBJbml0aWFsaXplIHRoZSBlbnRyeS4gKi8KKwltLT5zaXplID0gc2l6ZTsKKwltLT5j aGVja3N1bV90eXBlID0gY2hlY2tzdW1fdHlwZTsKKwltLT5jaGVja3N1bV9sZW5ndGggPSBjaGVj a3N1bV9sZW5ndGg7CisJbS0+Y2hlY2tzdW1fcGF5bG9hZCA9IGNoZWNrc3VtX3BheWxvYWQ7Cit9 CisKKy8qCisgKiBSZWNvcmQgZGV0YWlscyBleHRyYWN0ZWQgZnJvbSB0aGUgYmFja3VwIG1hbmlm ZXN0IGZvciBvbmUgV0FMIHJhbmdlLgorICovCitzdGF0aWMgdm9pZAorY29tYmluZWJhY2t1cF9w ZXJfd2FsX3JhbmdlX2NiKEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwKKwkJCQkJ CQkgICBUaW1lTGluZUlEIHRsaSwKKwkJCQkJCQkgICBYTG9nUmVjUHRyIHN0YXJ0X2xzbiwgWExv Z1JlY1B0ciBlbmRfbHNuKQoreworCW1hbmlmZXN0X2RhdGEgKm1hbmlmZXN0ID0gY29udGV4dC0+ cHJpdmF0ZV9kYXRhOworCW1hbmlmZXN0X3dhbF9yYW5nZSAqcmFuZ2U7CisKKwkvKiBBbGxvY2F0 ZSBhbmQgaW5pdGlhbGl6ZSBhIHN0cnVjdCBkZXNjcmliaW5nIHRoaXMgV0FMIHJhbmdlLiAqLwor CXJhbmdlID0gcGFsbG9jKHNpemVvZihtYW5pZmVzdF93YWxfcmFuZ2UpKTsKKwlyYW5nZS0+dGxp ID0gdGxpOworCXJhbmdlLT5zdGFydF9sc24gPSBzdGFydF9sc247CisJcmFuZ2UtPmVuZF9sc24g PSBlbmRfbHNuOworCXJhbmdlLT5wcmV2ID0gbWFuaWZlc3QtPmxhc3Rfd2FsX3JhbmdlOworCXJh bmdlLT5uZXh0ID0gTlVMTDsKKworCS8qIEFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiAq LworCWlmIChtYW5pZmVzdC0+Zmlyc3Rfd2FsX3JhbmdlID09IE5VTEwpCisJCW1hbmlmZXN0LT5m aXJzdF93YWxfcmFuZ2UgPSByYW5nZTsKKwllbHNlCisJCW1hbmlmZXN0LT5sYXN0X3dhbF9yYW5n ZS0+bmV4dCA9IHJhbmdlOworCW1hbmlmZXN0LT5sYXN0X3dhbF9yYW5nZSA9IHJhbmdlOworfQor CisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBtYW5pZmVzdF9maWxlcyBoYXNoIHRhYmxlLgor ICovCitzdGF0aWMgdWludDMyCitoYXNoX3N0cmluZ19wb2ludGVyKGNoYXIgKnMpCit7CisJdW5z aWduZWQgY2hhciAqc3MgPSAodW5zaWduZWQgY2hhciAqKSBzOworCisJcmV0dXJuIGhhc2hfYnl0 ZXMoc3MsIHN0cmxlbihzKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbWJpbmViYWNr dXAvbG9hZF9tYW5pZmVzdC5oIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFuaWZl c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yYmZlZWZmMTU2Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFuaWZlc3Qu aApAQCAtMCwwICsxLDY3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBMb2FkIGRhdGEg ZnJvbSBhIGJhY2t1cCBtYW5pZmVzdCBpbnRvIG1lbW9yeS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFu aWZlc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIExPQURfTUFOSUZF U1RfSAorI2RlZmluZSBMT0FEX01BTklGRVNUX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVm cy5oIgorI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxwZXIuaCIKKworLyoKKyAqIEVhY2gg ZmlsZSBkZXNjcmliZWQgYnkgdGhlIG1hbmlmZXN0IGZpbGUgaXMgcGFyc2VkIHRvIHByb2R1Y2Ug YW4gb2JqZWN0CisgKiBsaWtlIHRoaXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1hbmlmZXN0X2Zp bGUKK3sKKwl1aW50MzIJCXN0YXR1czsJCQkvKiBoYXNoIHN0YXR1cyAqLworCWNoYXIJICAgKnBh dGhuYW1lOworCXNpemVfdAkJc2l6ZTsKKwlwZ19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGU7 CisJaW50CQkJY2hlY2tzdW1fbGVuZ3RoOworCXVpbnQ4CSAgICpjaGVja3N1bV9wYXlsb2FkOwor fSBtYW5pZmVzdF9maWxlOworCisjZGVmaW5lIFNIX1BSRUZJWAkJbWFuaWZlc3RfZmlsZXMKKyNk ZWZpbmUgU0hfRUxFTUVOVF9UWVBFCW1hbmlmZXN0X2ZpbGUKKyNkZWZpbmUgU0hfS0VZX1RZUEUJ CWNoYXIgKgorI2RlZmluZQlTSF9TQ09QRQkJZXh0ZXJuCisjZGVmaW5lIFNIX1JBV19BTExPQ0FU T1IJcGdfbWFsbG9jMAorI2RlZmluZSBTSF9ERUNMQVJFCisjaW5jbHVkZSAibGliL3NpbXBsZWhh c2guaCIKKworLyoKKyAqIEVhY2ggV0FMIHJhbmdlIGRlc2NyaWJlZCBieSB0aGUgbWFuaWZlc3Qg ZmlsZSBpcyBwYXJzZWQgdG8gcHJvZHVjZSBhbgorICogb2JqZWN0IGxpa2UgdGhpcy4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgbWFuaWZlc3Rfd2FsX3JhbmdlCit7CisJVGltZUxpbmVJRAl0bGk7CisJ WExvZ1JlY1B0cglzdGFydF9sc247CisJWExvZ1JlY1B0cgllbmRfbHNuOworCXN0cnVjdCBtYW5p ZmVzdF93YWxfcmFuZ2UgKm5leHQ7CisJc3RydWN0IG1hbmlmZXN0X3dhbF9yYW5nZSAqcHJldjsK K30gbWFuaWZlc3Rfd2FsX3JhbmdlOworCisvKgorICogQWxsIHRoZSBkYXRhIHBhcnNlZCBmcm9t IGEgYmFja3VwX21hbmlmZXN0IGZpbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1hbmlmZXN0X2Rh dGEKK3sKKwltYW5pZmVzdF9maWxlc19oYXNoICpmaWxlczsKKwltYW5pZmVzdF93YWxfcmFuZ2Ug KmZpcnN0X3dhbF9yYW5nZTsKKwltYW5pZmVzdF93YWxfcmFuZ2UgKmxhc3Rfd2FsX3JhbmdlOwor fSBtYW5pZmVzdF9kYXRhOworCitleHRlcm4gbWFuaWZlc3RfZGF0YSAqbG9hZF9iYWNrdXBfbWFu aWZlc3QoY2hhciAqYmFja3VwX2RpcmVjdG9yeSk7CitleHRlcm4gbWFuaWZlc3RfZGF0YSAqKmxv YWRfYmFja3VwX21hbmlmZXN0cyhpbnQgbl9iYWNrdXBzLAorCQkJCQkJCQkJCQkgY2hhciAqKmJh Y2t1cF9kaXJlY3Rvcmllcyk7CisKKyNlbmRpZgkJCQkJCQkvKiBMT0FEX01BTklGRVNUX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5lNDAyZDZmNTBlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19j b21iaW5lYmFja3VwL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChj KSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX2Nv bWJpbmViYWNrdXBfc291cmNlcyA9IGZpbGVzKAorICAncGdfY29tYmluZWJhY2t1cC5jJywKKyAg J2JhY2t1cF9sYWJlbC5jJywKKyAgJ2NvcHlfZmlsZS5jJywKKyAgJ2xvYWRfbWFuaWZlc3QuYycs CisgICdyZWNvbnN0cnVjdC5jJywKKyAgJ3dyaXRlX21hbmlmZXN0LmMnLAorKQorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY29tYmluZWJhY2t1cF9zb3VyY2VzICs9IHJjX2Jp bl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAn cGdfY29tYmluZWJhY2t1cCcsCisgICAgJy0tRklMRURFU0MnLCAncGdfY29tYmluZWJhY2t1cCAt IGNvbWJpbmUgaW5jcmVtZW50YWwgYmFja3VwcycsXSkKK2VuZGlmCisKK3BnX2NvbWJpbmViYWNr dXAgPSBleGVjdXRhYmxlKCdwZ19jb21iaW5lYmFja3VwJywKKyAgcGdfY29tYmluZWJhY2t1cF9z b3VyY2VzLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlXSwKKyAga3dhcmdzOiBkZWZh dWx0X2Jpbl9hcmdzLAorKQorYmluX3RhcmdldHMgKz0gcGdfY29tYmluZWJhY2t1cAorCit0ZXN0 cyArPSB7CisgICduYW1lJzogJ3BnX2NvbWJpbmViYWNrdXAnLAorICAnc2QnOiBtZXNvbi5jdXJy ZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAg J3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfYmFzaWMucGwnLAorICAgICAg J3QvMDAyX2NvbXBhcmVfYmFja3Vwcy5wbCcsCisgICAgICAndC8wMDNfdGltZWxpbmUucGwnLAor ICAgICAgJ3QvMDA0X21hbmlmZXN0LnBsJywKKyAgICAgICd0LzAwNV9pbnRlZ3JpdHkucGwnLAor ICAgIF0sCisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9ubHMu bWsgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbmxzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmM4ZTU5ZDFkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2NvbWJpbmViYWNrdXAvbmxzLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMgc3JjL2Jpbi9wZ19j b21iaW5lYmFja3VwL25scy5taworQ0FUQUxPR19OQU1FICAgICA9IHBnX2NvbWJpbmViYWNrdXAK K0dFVFRFWFRfRklMRVMgICAgPSAkKEZST05URU5EX0NPTU1PTl9HRVRURVhUX0ZJTEVTKSBcCisJ CSAgIGJhY2t1cF9sYWJlbC5jIFwKKwkJICAgY29weV9maWxlLmMgXAorCQkgICBsb2FkX21hbmlm ZXN0LmMgXAorCQkgICBwZ19jb21iaW5lYmFja3VwLmMgXAorCQkgICByZWNvbnN0cnVjdC5jIFwK KwkJICAgd3JpdGVfbWFuaWZlc3QuYworR0VUVEVYVF9UUklHR0VSUyA9ICQoRlJPTlRFTkRfQ09N TU9OX0dFVFRFWFRfVFJJR0dFUlMpCitHRVRURVhUX0ZMQUdTICAgID0gJChGUk9OVEVORF9DT01N T05fR0VUVEVYVF9GTEFHUykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9w Z19jb21iaW5lYmFja3VwLmMgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcGdfY29tYmluZWJh Y2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg1ZDNmNGU1ZGUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcGdfY29tYmluZWJh Y2t1cC5jCkBAIC0wLDAgKzEsMTI4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdf Y29tYmluZWJhY2t1cC5jCisgKgkJQ29tYmluZSBpbmNyZW1lbnRhbCBiYWNrdXBzIHdpdGggcHJp b3IgYmFja3Vwcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMywgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmluL3BnX2NvbWJpbmViYWNrdXAvcGdfY29tYmluZWJhY2t1cC5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8ZGlyZW50 Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUg ImJhY2t1cF9sYWJlbC5oIgorI2luY2x1ZGUgImNvbW1vbi9ibGtyZWZ0YWJsZS5oIgorI2luY2x1 ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxwZXIuaCIKKyNpbmNsdWRlICJjb21tb24vY29udHJvbGRh dGFfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29t bW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUg ImNvcHlfZmlsZS5oIgorI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1 ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAibG9hZF9tYW5pZmVzdC5oIgorI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicmVjb25zdHJ1Y3QuaCIKKyNpbmNsdWRlICJ3 cml0ZV9tYW5pZmVzdC5oIgorCisvKiBJbmNyZW1lbnRhbCBmaWxlIG5hbWluZyBjb252ZW50aW9u LiAqLworI2RlZmluZSBJTkNSRU1FTlRBTF9QUkVGSVgJCQkiSU5DUkVNRU5UQUwuIgorI2RlZmlu ZSBJTkNSRU1FTlRBTF9QUkVGSVhfTEVOR1RICShzaXplb2YoSU5DUkVNRU5UQUxfUFJFRklYKSAt IDEpCisKKy8qCisgKiBUcmFja2luZyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBuZWVkIHRvIGJlIHJl bW92ZWQsIG9yIGhhdmUgdGhlaXIgY29udGVudHMKKyAqIHJlbW92ZWQsIGlmIHRoZSBvcGVyYXRp b24gZmFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNiX2NsZWFudXBfZGlyCit7CisJY2hhcgkg ICAqdGFyZ2V0X3BhdGg7CisJYm9vbAkJcm10b3BkaXI7CisJc3RydWN0IGNiX2NsZWFudXBfZGly ICpuZXh0OworfSBjYl9jbGVhbnVwX2RpcjsKKworLyoKKyAqIFN0b3JlcyBhIHRhYmxlc3BhY2Ug bWFwcGluZyBwcm92aWRlZCB1c2luZyAtVCwgLS10YWJsZXNwYWNlLW1hcHBpbmcuCisgKi8KK3R5 cGVkZWYgc3RydWN0IGNiX3RhYmxlc3BhY2VfbWFwcGluZworeworCWNoYXIJCW9sZF9kaXJbTUFY UEdQQVRIXTsKKwljaGFyCQluZXdfZGlyW01BWFBHUEFUSF07CisJc3RydWN0IGNiX3RhYmxlc3Bh Y2VfbWFwcGluZyAqbmV4dDsKK30gY2JfdGFibGVzcGFjZV9tYXBwaW5nOworCisvKgorICogU3Rv cmVzIGRhdGEgcGFyc2VkIGZyb20gYWxsIGNvbW1hbmQtbGluZSBvcHRpb25zLgorICovCit0eXBl ZGVmIHN0cnVjdCBjYl9vcHRpb25zCit7CisJYm9vbAkJZGVidWc7CisJY2hhcgkgICAqb3V0cHV0 OworCWJvb2wJCWRyeV9ydW47CisJYm9vbAkJbm9fc3luYzsKKwljYl90YWJsZXNwYWNlX21hcHBp bmcgKnRzbWFwcGluZ3M7CisJcGdfY2hlY2tzdW1fdHlwZSBtYW5pZmVzdF9jaGVja3N1bXM7CisJ Ym9vbAkJbm9fbWFuaWZlc3Q7CisJRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2Q7Cit9IGNi X29wdGlvbnM7CisKKy8qCisgKiBEYXRhIGFib3V0IGEgdGFibGVzcGFjZS4KKyAqCisgKiBFdmVy eSBub3JtYWwgdGFibGVzcGFjZSBuZWVkcyBhIHRhYmxlc3BhY2UgbWFwcGluZywgYnV0IGluLXBs YWNlIHRhYmxlc3BhY2VzCisgKiBkb24ndCwgc28gdGhlIGxpc3Qgb2YgdGFibGVzcGFjZXMgY2Fu IGNvbnRhaW4gbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGxpc3Qgb2YKKyAqIHRhYmxlc3BhY2UgbWFw cGluZ3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNiX3RhYmxlc3BhY2UKK3sKKwlPaWQJCQlvaWQ7 CisJYm9vbAkJaW5fcGxhY2U7CisJY2hhcgkJb2xkX2RpcltNQVhQR1BBVEhdOworCWNoYXIJCW5l d19kaXJbTUFYUEdQQVRIXTsKKwlzdHJ1Y3QgY2JfdGFibGVzcGFjZSAqbmV4dDsKK30gY2JfdGFi bGVzcGFjZTsKKworLyogRGlyZWN0b3JpZXMgdG8gYmUgcmVtb3ZlZCBpZiB3ZSBleGl0IHVuY2xl YW5seS4gKi8KK2NiX2NsZWFudXBfZGlyICpjbGVhbnVwX2Rpcl9saXN0ID0gTlVMTDsKKworc3Rh dGljIHZvaWQgYWRkX3RhYmxlc3BhY2VfbWFwcGluZyhjYl9vcHRpb25zICpvcHQsIGNoYXIgKmFy Zyk7CitzdGF0aWMgU3RyaW5nSW5mbyBjaGVja19iYWNrdXBfbGFiZWxfZmlsZXMoaW50IG5fYmFj a3VwcywgY2hhciAqKmJhY2t1cF9kaXJzKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2NvbnRyb2xfZmls ZXMoaW50IG5fYmFja3VwcywgY2hhciAqKmJhY2t1cF9kaXJzKTsKK3N0YXRpYyB2b2lkIGNoZWNr X2lucHV0X2Rpcl9wZXJtaXNzaW9ucyhjaGFyICpkaXIpOworc3RhdGljIHZvaWQgY2xlYW51cF9k aXJlY3Rvcmllc19hdGV4aXQodm9pZCk7CitzdGF0aWMgdm9pZCBjcmVhdGVfb3V0cHV0X2RpcmVj dG9yeShjaGFyICpkaXJuYW1lLCBjYl9vcHRpb25zICpvcHQpOworc3RhdGljIHZvaWQgaGVscChj b25zdCBjaGFyICpwcm9nbmFtZSk7CitzdGF0aWMgYm9vbCBwYXJzZV9vaWQoY2hhciAqcywgT2lk ICpyZXN1bHQpOworc3RhdGljIHZvaWQgcHJvY2Vzc19kaXJlY3RvcnlfcmVjdXJzaXZlbHkoT2lk IHRzb2lkLAorCQkJCQkJCQkJCSAgY2hhciAqaW5wdXRfZGlyZWN0b3J5LAorCQkJCQkJCQkJCSAg Y2hhciAqb3V0cHV0X2RpcmVjdG9yeSwKKwkJCQkJCQkJCQkgIGNoYXIgKnJlbGF0aXZlX3BhdGgs CisJCQkJCQkJCQkJICBpbnQgbl9wcmlvcl9iYWNrdXBzLAorCQkJCQkJCQkJCSAgY2hhciAqKnBy aW9yX2JhY2t1cF9kaXJzLAorCQkJCQkJCQkJCSAgbWFuaWZlc3RfZGF0YSAqKm1hbmlmZXN0cywK KwkJCQkJCQkJCQkgIG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkJCQkgIGNiX29w dGlvbnMgKm9wdCk7CitzdGF0aWMgaW50CXJlYWRfcGdfdmVyc2lvbl9maWxlKGNoYXIgKmRpcmVj dG9yeSk7CitzdGF0aWMgdm9pZCByZW1lbWJlcl90b19jbGVhbnVwX2RpcmVjdG9yeShjaGFyICp0 YXJnZXRfcGF0aCwgYm9vbCBybXRvcGRpcik7CitzdGF0aWMgdm9pZCByZXNldF9kaXJlY3Rvcnlf Y2xlYW51cF9saXN0KHZvaWQpOworc3RhdGljIGNiX3RhYmxlc3BhY2UgKnNjYW5fZm9yX2V4aXN0 aW5nX3RhYmxlc3BhY2VzKGNoYXIgKnBhdGhuYW1lLAorCQkJCQkJCQkJCQkJCWNiX29wdGlvbnMg Km9wdCk7CitzdGF0aWMgdm9pZCBzbHVycF9maWxlKGludCBmZCwgY2hhciAqZmlsZW5hbWUsIFN0 cmluZ0luZm8gYnVmLCBpbnQgbWF4bGVuKTsKKworLyoKKyAqIE1haW4gcHJvZ3JhbS4KKyAqLwor aW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RhdGljIHN0cnVjdCBvcHRp b24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsiZGVidWciLCBub19hcmd1bWVudCwgTlVMTCwgJ2Qn fSwKKwkJeyJkcnktcnVuIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30sCisJCXsibm8tc3luYyIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LAorCQl7Im91dHB1dCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnbyd9LAorCQl7InRhYmxlc3BhY2UtbWFwcGluZyIsIG5vX2FyZ3VtZW50LCBOVUxM LCAnVCd9LAorCQl7Im1hbmlmZXN0LWNoZWNrc3VtcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAxfSwKKwkJeyJuby1tYW5pZmVzdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAyfSwKKwkJeyJzeW5j LW1ldGhvZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAzfSwKKwkJe05VTEwsIDAsIE5VTEws IDB9CisJfTsKKworCWNvbnN0IGNoYXIgKnByb2duYW1lOworCWNoYXIJICAgKmxhc3RfaW5wdXRf ZGlyOworCWludAkJCW9wdGluZGV4OworCWludAkJCWM7CisJaW50CQkJbl9iYWNrdXBzOworCWlu dAkJCW5fcHJpb3JfYmFja3VwczsKKwlpbnQJCQl2ZXJzaW9uOworCWNoYXIJICAqKnByaW9yX2Jh Y2t1cF9kaXJzOworCWNiX29wdGlvbnMJb3B0OworCWNiX3RhYmxlc3BhY2UgKnRhYmxlc3BhY2Vz OworCWNiX3RhYmxlc3BhY2UgKnRzOworCVN0cmluZ0luZm8JbGFzdF9iYWNrdXBfbGFiZWw7CisJ bWFuaWZlc3RfZGF0YSAqKm1hbmlmZXN0czsKKwltYW5pZmVzdF93cml0ZXIgKm13cml0ZXI7CisK KwlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CisJcHJvZ25hbWUgPSBnZXRfcHJvZ25hbWUoYXJn dlswXSk7CisJaGFuZGxlX2hlbHBfdmVyc2lvbl9vcHRzKGFyZ2MsIGFyZ3YsIHByb2duYW1lLCBo ZWxwKTsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0Lm1hbmlmZXN0X2No ZWNrc3VtcyA9IENIRUNLU1VNX1RZUEVfQ1JDMzJDOworCW9wdC5zeW5jX21ldGhvZCA9IERBVEFf RElSX1NZTkNfTUVUSE9EX0ZTWU5DOworCisJLyogcHJvY2VzcyBjb21tYW5kLWxpbmUgb3B0aW9u cyAqLworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJkbk5QbzpUOiIsCisJ CQkJCQkJbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwl7CisJCXN3aXRjaCAoYykK KwkJeworCQkJY2FzZSAnZCc6CisJCQkJb3B0LmRlYnVnID0gdHJ1ZTsKKwkJCQlwZ19sb2dnaW5n X2luY3JlYXNlX3ZlcmJvc2l0eSgpOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJb3B0 LmRyeV9ydW4gPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAnTic6CisJCQkJb3B0Lm5vX3N5 bmMgPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAnbyc6CisJCQkJb3B0Lm91dHB1dCA9IG9w dGFyZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCWFkZF90YWJsZXNwYWNlX21hcHBp bmcoJm9wdCwgb3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlpZiAoIXBnX2No ZWNrc3VtX3BhcnNlX3R5cGUob3B0YXJnLAorCQkJCQkJCQkJCQkmb3B0Lm1hbmlmZXN0X2NoZWNr c3VtcykpCisJCQkJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgY2hlY2tzdW0gYWxnb3JpdGhtOiBc IiVzXCIiLAorCQkJCQkJCSBvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCW9w dC5ub19tYW5pZmVzdCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJaWYgKCFw YXJzZV9zeW5jX21ldGhvZChvcHRhcmcsICZvcHQuc3luY19tZXRob2QpKQorCQkJCQlleGl0KDEp OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVt aXR0ZWQgYSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCWV4aXQoMSk7CisJ CX0KKwl9CisKKwlpZiAob3B0aW5kID49IGFyZ2MpCisJeworCQlwZ19sb2dfZXJyb3IoIiVzOiBu byBpbnB1dCBkaXJlY3RvcmllcyBzcGVjaWZpZWQiLCBwcm9nbmFtZSk7CisJCXBnX2xvZ19lcnJv cl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFt ZSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKG9wdC5vdXRwdXQgPT0gTlVMTCkKKwkJcGdfZmF0 YWwoIm5vIG91dHB1dCBkaXJlY3Rvcnkgc3BlY2lmaWVkIik7CisKKwkvKiBJZiBubyBtYW5pZmVz dCBpcyBuZWVkZWQsIG5vIGNoZWNrc3VtcyBhcmUgbmVlZGVkLCBlaXRoZXIuICovCisJaWYgKG9w dC5ub19tYW5pZmVzdCkKKwkJb3B0Lm1hbmlmZXN0X2NoZWNrc3VtcyA9IENIRUNLU1VNX1RZUEVf Tk9ORTsKKworCS8qIFJlYWQgdGhlIHNlcnZlciB2ZXJzaW9uIGZyb20gdGhlIGZpbmFsIGJhY2t1 cC4gKi8KKwl2ZXJzaW9uID0gcmVhZF9wZ192ZXJzaW9uX2ZpbGUoYXJndlthcmdjIC0gMV0pOwor CisJLyogU2FuaXR5LWNoZWNrIGNvbnRyb2wgZmlsZXMuICovCisJbl9iYWNrdXBzID0gYXJnYyAt IG9wdGluZDsKKwljaGVja19jb250cm9sX2ZpbGVzKG5fYmFja3VwcywgYXJndiArIG9wdGluZCk7 CisKKwkvKiBTYW5pdHktY2hlY2sgYmFja3VwX2xhYmVsIGZpbGVzLCBhbmQgZ2V0IHRoZSBjb250 ZW50cyBvZiB0aGUgbGFzdCBvbmUuICovCisJbGFzdF9iYWNrdXBfbGFiZWwgPSBjaGVja19iYWNr dXBfbGFiZWxfZmlsZXMobl9iYWNrdXBzLCBhcmd2ICsgb3B0aW5kKTsKKworCS8qCisJICogV2Un bGwgbmVlZCB0aGUgcGF0aG5hbWVzIHRvIHRoZSBwcmlvciBiYWNrdXBzLiBCeSAicHJpb3IiIHdl IG1lYW4gYWxsCisJICogYnV0IHRoZSBsYXN0IG9uZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGlu ZS4KKwkgKi8KKwluX3ByaW9yX2JhY2t1cHMgPSBhcmdjIC0gb3B0aW5kIC0gMTsKKwlwcmlvcl9i YWNrdXBfZGlycyA9IGFyZ3YgKyBvcHRpbmQ7CisKKwkvKiBMb2FkIGJhY2t1cCBtYW5pZmVzdHMu ICovCisJbWFuaWZlc3RzID0gbG9hZF9iYWNrdXBfbWFuaWZlc3RzKG5fYmFja3VwcywgcHJpb3Jf YmFja3VwX2RpcnMpOworCisJLyogRmlndXJlIG91dCB3aGljaCB0YWJsZXNwYWNlcyBhcmUgZ29p bmcgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gKi8KKwlsYXN0X2lucHV0X2RpciA9IGFy Z3ZbYXJnYyAtIDFdOworCWNoZWNrX2lucHV0X2Rpcl9wZXJtaXNzaW9ucyhsYXN0X2lucHV0X2Rp cik7CisJdGFibGVzcGFjZXMgPSBzY2FuX2Zvcl9leGlzdGluZ190YWJsZXNwYWNlcyhsYXN0X2lu cHV0X2RpciwgJm9wdCk7CisKKwkvKgorCSAqIENyZWF0ZSBvdXRwdXQgZGlyZWN0b3JpZXMuCisJ ICoKKwkgKiBXZSBjcmVhdGUgb25lIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBtYWluIGRhdGEg ZGlyZWN0b3J5IHBsdXMgb25lIGZvcgorCSAqIGVhY2ggbm9uLWluLXBsYWNlIHRhYmxlc3BhY2Uu IGNyZWF0ZV9vdXRwdXRfZGlyZWN0b3J5KCkgd2lsbCBhcnJhbmdlCisJICogZm9yIHRob3NlIGRp cmVjdG9yaWVzIHRvIGJlIGNsZWFuZWQgdXAgb24gZmFpbHVyZS4gSW4tcGxhY2UgdGFibGVzcGFj ZXMKKwkgKiBhcmVuJ3QgaGFuZGxlZCBhdCB0aGlzIHN0YWdlIGJlY2F1c2UgdGhleSdyZSBsb2Nh dGVkIGJlbmVhdGggdGhlIG1haW4KKwkgKiBvdXRwdXQgZGlyZWN0b3J5LCBhbmQgdGh1cyB0aGUg Y2xlYW51cCBvZiB0aGF0IGRpcmVjdG9yeSB3aWxsIGdldCByaWQKKwkgKiBvZiB0aGVtLiBQbHVz LCB0aGUgcGdfdGJsc3BjIGRpcmVjdG9yeSB0aGF0IG5lZWRzIHRvIGNvbnRhaW4gdGhlbQorCSAq IGRvZXNuJ3QgZXhpc3QgeWV0LgorCSAqLworCWF0ZXhpdChjbGVhbnVwX2RpcmVjdG9yaWVzX2F0 ZXhpdCk7CisJY3JlYXRlX291dHB1dF9kaXJlY3Rvcnkob3B0Lm91dHB1dCwgJm9wdCk7CisJZm9y ICh0cyA9IHRhYmxlc3BhY2VzOyB0cyAhPSBOVUxMOyB0cyA9IHRzLT5uZXh0KQorCQlpZiAoIXRz LT5pbl9wbGFjZSkKKwkJCWNyZWF0ZV9vdXRwdXRfZGlyZWN0b3J5KHRzLT5uZXdfZGlyLCAmb3B0 KTsKKworCS8qIElmIHdlIG5lZWQgdG8gd3JpdGUgYSBiYWNrdXBfbWFuaWZlc3QsIHByZXBhcmUg dG8gZG8gc28uICovCisJaWYgKCFvcHQuZHJ5X3J1biAmJiAhb3B0Lm5vX21hbmlmZXN0KQorCXsK KwkJbXdyaXRlciA9IGNyZWF0ZV9tYW5pZmVzdF93cml0ZXIob3B0Lm91dHB1dCk7CisKKwkJLyoK KwkJICogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGJhY2t1cCBtYW5pZmVzdCBmb3IgdGhlIGZpbmFs IGJhY2t1cDsgZWxzZSB3ZQorCQkgKiB3b24ndCBoYXZlIHRoZSBXQUwgcmFuZ2VzIGZvciB0aGUg cmVzdWx0aW5nIG1hbmlmZXN0LgorCQkgKi8KKwkJaWYgKG1hbmlmZXN0c1tuX3ByaW9yX2JhY2t1 cHNdID09IE5VTEwpCisJCQlwZ19mYXRhbCgiY2FuJ3QgZ2VuZXJhdGUgYSBtYW5pZmVzdCBiZWNh dXNlIG5vIG1hbmlmZXN0IGlzIGF2YWlsYWJsZSBmb3IgdGhlIGZpbmFsIGlucHV0IGJhY2t1cCIp OworCX0KKwllbHNlCisJCW13cml0ZXIgPSBOVUxMOworCisJLyogV3JpdGUgYmFja3VwIGxhYmVs IGludG8gb3V0cHV0IGRpcmVjdG9yeS4gKi8KKwlpZiAob3B0LmRyeV9ydW4pCisJCXBnX2xvZ19k ZWJ1Zygid291bGQgZ2VuZXJhdGUgXCIlcy9iYWNrdXBfbGFiZWxcIiIsIG9wdC5vdXRwdXQpOwor CWVsc2UKKwl7CisJCXBnX2xvZ19kZWJ1ZygiZ2VuZXJhdGluZyBcIiVzL2JhY2t1cF9sYWJlbFwi Iiwgb3B0Lm91dHB1dCk7CisJCWxhc3RfYmFja3VwX2xhYmVsLT5jdXJzb3IgPSAwOworCQl3cml0 ZV9iYWNrdXBfbGFiZWwob3B0Lm91dHB1dCwgbGFzdF9iYWNrdXBfbGFiZWwsCisJCQkJCQkgICBv cHQubWFuaWZlc3RfY2hlY2tzdW1zLCBtd3JpdGVyKTsKKwl9CisKKwkvKiBQcm9jZXNzIGV2ZXJ5 dGhpbmcgdGhhdCdzIG5vdCBwYXJ0IG9mIGEgdXNlci1kZWZpbmVkIHRhYmxlc3BhY2UuICovCisJ cGdfbG9nX2RlYnVnKCJwcm9jZXNzaW5nIGJhY2t1cCBkaXJlY3RvcnkgXCIlc1wiIiwgbGFzdF9p bnB1dF9kaXIpOworCXByb2Nlc3NfZGlyZWN0b3J5X3JlY3Vyc2l2ZWx5KEludmFsaWRPaWQsIGxh c3RfaW5wdXRfZGlyLCBvcHQub3V0cHV0LAorCQkJCQkJCQkgIE5VTEwsIG5fcHJpb3JfYmFja3Vw cywgcHJpb3JfYmFja3VwX2RpcnMsCisJCQkJCQkJCSAgbWFuaWZlc3RzLCBtd3JpdGVyLCAmb3B0 KTsKKworCS8qIFByb2Nlc3MgdXNlci1kZWZpbmVkIHRhYmxlc3BhY2VzLiAqLworCWZvciAodHMg PSB0YWJsZXNwYWNlczsgdHMgIT0gTlVMTDsgdHMgPSB0cy0+bmV4dCkKKwl7CisJCXBnX2xvZ19k ZWJ1ZygicHJvY2Vzc2luZyB0YWJsZXNwYWNlIGRpcmVjdG9yeSBcIiVzXCIiLCB0cy0+b2xkX2Rp cik7CisKKwkJLyoKKwkJICogSWYgaXQncyBhIG5vcm1hbCB0YWJsZXNwYWNlLCB3ZSBuZWVkIHRv IHNldCB1cCBhIHN5bWJvbGljIGxpbmsgZnJvbQorCQkgKiBwZ190YmxzcGMvJHtPSUR9IHRvIHRo ZSB0YXJnZXQgZGlyZWN0b3J5OyBpZiBpdCdzIGFuIGluLXBsYWNlCisJCSAqIHRhYmxlc3BhY2Us IHdlIG5lZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGF0IHBnX3RibHNwYy8ke09JRH0uCisJCSAq LworCQlpZiAoIXRzLT5pbl9wbGFjZSkKKwkJeworCQkJY2hhcgkJbGlua3BhdGhbTUFYUEdQQVRI XTsKKworCQkJc25wcmludGYobGlua3BhdGgsIE1BWFBHUEFUSCwgIiVzL3BnX3RibHNwYy8ldSIs IG9wdC5vdXRwdXQsCisJCQkJCSB0cy0+b2lkKTsKKworCQkJaWYgKG9wdC5kcnlfcnVuKQorCQkJ CXBnX2xvZ19kZWJ1Zygid291bGQgY3JlYXRlIHN5bWJvbGljIGxpbmsgZnJvbSBcIiVzXCIgdG8g XCIlc1wiIiwKKwkJCQkJCQkgbGlua3BhdGgsIHRzLT5uZXdfZGlyKTsKKwkJCWVsc2UKKwkJCXsK KwkJCQlwZ19sb2dfZGVidWcoImNyZWF0aW5nIHN5bWJvbGljIGxpbmsgZnJvbSBcIiVzXCIgdG8g XCIlc1wiIiwKKwkJCQkJCQkgbGlua3BhdGgsIHRzLT5uZXdfZGlyKTsKKwkJCQlpZiAoc3ltbGlu ayh0cy0+bmV3X2RpciwgbGlua3BhdGgpICE9IDApCisJCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y3JlYXRlIHN5bWJvbGljIGxpbmsgZnJvbSBcIiVzXCIgdG8gXCIlc1wiOiAlbSIsCisJCQkJCQkJ IGxpbmtwYXRoLCB0cy0+bmV3X2Rpcik7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAo b3B0LmRyeV9ydW4pCisJCQkJcGdfbG9nX2RlYnVnKCJ3b3VsZCBjcmVhdGUgZGlyZWN0b3J5IFwi JXNcIiIsIHRzLT5uZXdfZGlyKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlwZ19sb2dfZGVidWcoImNy ZWF0aW5nIGRpcmVjdG9yeSBcIiVzXCIiLCB0cy0+bmV3X2Rpcik7CisJCQkJaWYgKHBnX21rZGly X3AodHMtPm5ld19kaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgPT0gLTEpCisJCQkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkgdHMtPm5l d19kaXIpOworCQkJfQorCQl9CisKKwkJLyogT0ssIG5vdyBoYW5kbGUgdGhlIGRpcmVjdG9yeSBj b250ZW50cy4gKi8KKwkJcHJvY2Vzc19kaXJlY3RvcnlfcmVjdXJzaXZlbHkodHMtPm9pZCwgdHMt Pm9sZF9kaXIsIHRzLT5uZXdfZGlyLAorCQkJCQkJCQkJICBOVUxMLCBuX3ByaW9yX2JhY2t1cHMs IHByaW9yX2JhY2t1cF9kaXJzLAorCQkJCQkJCQkJICBtYW5pZmVzdHMsIG13cml0ZXIsICZvcHQp OworCX0KKworCS8qIEZpbmFsaXplIHRoZSBiYWNrdXBfbWFuaWZlc3QsIGlmIHdlJ3JlIGdlbmVy YXRpbmcgb25lLiAqLworCWlmIChtd3JpdGVyICE9IE5VTEwpCisJCWZpbmFsaXplX21hbmlmZXN0 KG13cml0ZXIsCisJCQkJCQkgIG1hbmlmZXN0c1tuX3ByaW9yX2JhY2t1cHNdLT5maXJzdF93YWxf cmFuZ2UpOworCisJLyogZnN5bmMgdGhhdCBvdXRwdXQgZGlyZWN0b3J5IHVubGVzcyB3ZSd2ZSBi ZWVuIHRvbGQgbm90IHRvIGRvIHNvICovCisJaWYgKCFvcHQubm9fc3luYykKKwl7CisJCWlmIChv cHQuZHJ5X3J1bikKKwkJCXBnX2xvZ19kZWJ1Zygid291bGQgcmVjdXJzaXZlbHkgZnN5bmMgXCIl c1wiIiwgb3B0Lm91dHB1dCk7CisJCWVsc2UKKwkJeworCQkJcGdfbG9nX2RlYnVnKCJyZWN1cnNp dmVseSBmc3luY2luZyBcIiVzXCIiLCBvcHQub3V0cHV0KTsKKwkJCXN5bmNfcGdkYXRhKG9wdC5v dXRwdXQsIHZlcnNpb24gKiAxMDAwMCwgb3B0LnN5bmNfbWV0aG9kKTsKKwkJfQorCX0KKworCS8q IEl0J3MgYSBzdWNjZXNzLCBzbyBkb24ndCByZW1vdmUgdGhlIG91dHB1dCBkaXJlY3Rvcmllcy4g Ki8KKwlyZXNldF9kaXJlY3RvcnlfY2xlYW51cF9saXN0KCk7CisJZXhpdCgwKTsKK30KKworLyoK KyAqIFByb2Nlc3MgdGhlIG9wdGlvbiBhcmd1bWVudCBmb3IgdGhlIC1ULCAtLXRhYmxlc3BhY2Ut bWFwcGluZyBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkCithZGRfdGFibGVzcGFjZV9tYXBwaW5n KGNiX29wdGlvbnMgKm9wdCwgY2hhciAqYXJnKQoreworCWNiX3RhYmxlc3BhY2VfbWFwcGluZyAq dHNtYXAgPSBwZ19tYWxsb2MwKHNpemVvZihjYl90YWJsZXNwYWNlX21hcHBpbmcpKTsKKwljaGFy CSAgICpkc3Q7CisJY2hhcgkgICAqZHN0X3B0cjsKKwljaGFyCSAgICphcmdfcHRyOworCisJLyoK KwkgKiBCYXNpY2FsbHksIHdlIGp1c3Qgd2FudCB0byBjb3B5IGV2ZXJ5dGhpbmcgYmVmb3JlIHRo ZSBlcXVhbHMgc2lnbiB0bworCSAqIHRzbWFwLT5vbGRfZGlyIGFuZCBldmVyeXRoaW5nIGFmdGVy d2FyZHMgdG8gdHNtYXAtPm5ld19kaXIsIGJ1dCBpZgorCSAqIHRoZXJlJ3MgbW9yZSBvciBsZXNz IHRoYW4gb25lIGVxdWFscyBzaWduLCB0aGF0J3MgYW4gZXJyb3IsIGFuZCBpZgorCSAqIHRoZXJl J3MgYW4gZXF1YWxzIHNpZ24gcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2gsIGRvbid0IHRyZWF0IGl0 IGFzIGEKKwkgKiBmaWVsZCBzZXBhcmF0b3IgYnV0IGluc3RlYWQgY29weSBhIGxpdGVyYWwgZXF1 YWxzIHNpZ24uCisJICovCisJZHN0X3B0ciA9IGRzdCA9IHRzbWFwLT5vbGRfZGlyOworCWZvciAo YXJnX3B0ciA9IGFyZzsgKmFyZ19wdHIgIT0gJ1wwJzsgYXJnX3B0cisrKQorCXsKKwkJaWYgKGRz dF9wdHIgLSBkc3QgPj0gTUFYUEdQQVRIKQorCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRv byBsb25nIik7CisKKwkJaWYgKCphcmdfcHRyID09ICdcXCcgJiYgKihhcmdfcHRyICsgMSkgPT0g Jz0nKQorCQkJOwkJCQkJLyogc2tpcCBiYWNrc2xhc2ggZXNjYXBpbmcgPSAqLworCQllbHNlIGlm ICgqYXJnX3B0ciA9PSAnPScgJiYgKGFyZ19wdHIgPT0gYXJnIHx8ICooYXJnX3B0ciAtIDEpICE9 ICdcXCcpKQorCQl7CisJCQlpZiAodHNtYXAtPm5ld19kaXJbMF0gIT0gJ1wwJykKKwkJCQlwZ19m YXRhbCgibXVsdGlwbGUgXCI9XCIgc2lnbnMgaW4gdGFibGVzcGFjZSBtYXBwaW5nIik7CisJCQll bHNlCisJCQkJZHN0ID0gZHN0X3B0ciA9IHRzbWFwLT5uZXdfZGlyOworCQl9CisJCWVsc2UKKwkJ CSpkc3RfcHRyKysgPSAqYXJnX3B0cjsKKwl9CisJaWYgKCF0c21hcC0+b2xkX2RpclswXSB8fCAh dHNtYXAtPm5ld19kaXJbMF0pCisJCXBnX2ZhdGFsKCJpbnZhbGlkIHRhYmxlc3BhY2UgbWFwcGlu ZyBmb3JtYXQgXCIlc1wiLCBtdXN0IGJlIFwiT0xERElSPU5FV0RJUlwiIiwgYXJnKTsKKworCS8q CisJICogQWxsIHRhYmxlc3BhY2VzIGFyZSBjcmVhdGVkIHdpdGggYWJzb2x1dGUgZGlyZWN0b3Jp ZXMsIHNvIHNwZWNpZnlpbmcgYQorCSAqIG5vbi1hYnNvbHV0ZSBwYXRoIGhlcmUgd291bGQgbmV2 ZXIgbWF0Y2gsIHBvc3NpYmx5IGNvbmZ1c2luZyB1c2Vycy4KKwkgKgorCSAqIEluIGNvbnRyYXN0 IHRvIHBnX2Jhc2ViYWNrdXAsIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRpcmVjdG9yaWVzIGFyZSBv bgorCSAqIHRoZSBsb2NhbCBtYWNoaW5lLCBzbyB0aGUgbG9jYWwgbWFjaGluZSdzIGRlZmluaXRp b24gb2YgYW4gYWJzb2x1dGUKKwkgKiBwYXRoIGlzIHRoZSBvbmx5IHJlbGV2YW50IG9uZS4KKwkg Ki8KKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgodHNtYXAtPm9sZF9kaXIpKQorCQlwZ19mYXRhbCgi b2xkIGRpcmVjdG9yeSBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCBpbiB0YWJsZXNwYWNlIG1hcHBp bmc6ICVzIiwKKwkJCQkgdHNtYXAtPm9sZF9kaXIpOworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRo KHRzbWFwLT5uZXdfZGlyKSkKKwkJcGdfZmF0YWwoIm9sZCBkaXJlY3RvcnkgaXMgbm90IGFuIGFi c29sdXRlIHBhdGggaW4gdGFibGVzcGFjZSBtYXBwaW5nOiAlcyIsCisJCQkJIHRzbWFwLT5uZXdf ZGlyKTsKKworCS8qIENhbm9uaWNhbGl6ZSBwYXRocyB0byBhdm9pZCBzcHVyaW91cyBmYWlsdXJl cyB3aGVuIGNvbXBhcmluZy4gKi8KKwljYW5vbmljYWxpemVfcGF0aCh0c21hcC0+b2xkX2Rpcik7 CisJY2Fub25pY2FsaXplX3BhdGgodHNtYXAtPm5ld19kaXIpOworCisJLyogQWRkIGl0IHRvIHRo ZSBsaXN0LiAqLworCXRzbWFwLT5uZXh0ID0gb3B0LT50c21hcHBpbmdzOworCW9wdC0+dHNtYXBw aW5ncyA9IHRzbWFwOworfQorCisvKgorICogQ2hlY2sgdGhhdCB0aGUgYmFja3VwX2xhYmVsIGZp bGVzIGZvcm0gYSBjb2hlcmVudCBiYWNrdXAgY2hhaW4sIGFuZCByZXR1cm4KKyAqIHRoZSBjb250 ZW50cyBvZiB0aGUgYmFja3VwX2xhYmVsIGZpbGUgZnJvbSB0aGUgbGF0ZXN0IGJhY2t1cC4KKyAq Lworc3RhdGljIFN0cmluZ0luZm8KK2NoZWNrX2JhY2t1cF9sYWJlbF9maWxlcyhpbnQgbl9iYWNr dXBzLCBjaGFyICoqYmFja3VwX2RpcnMpCit7CisJU3RyaW5nSW5mbwlidWYgPSBtYWtlU3RyaW5n SW5mbygpOworCVN0cmluZ0luZm8JbGFzdGJ1ZiA9IGJ1ZjsKKwlpbnQJCQlpOworCVRpbWVMaW5l SUQJY2hlY2tfdGxpID0gMDsKKwlYTG9nUmVjUHRyCWNoZWNrX2xzbiA9IEludmFsaWRYTG9nUmVj UHRyOworCisJLyogVHJ5IHRvIHJlYWQgZWFjaCBiYWNrdXBfbGFiZWwgZmlsZSBpbiB0dXJuLCBs YXN0IHRvIGZpcnN0LiAqLworCWZvciAoaSA9IG5fYmFja3VwcyAtIDE7IGkgPj0gMDsgLS1pKQor CXsKKwkJY2hhcgkJcGF0aGJ1ZltNQVhQR1BBVEhdOworCQlpbnQJCQlmZDsKKwkJVGltZUxpbmVJ RAlzdGFydF90bGk7CisJCVRpbWVMaW5lSUQJcHJldmlvdXNfdGxpOworCQlYTG9nUmVjUHRyCXN0 YXJ0X2xzbjsKKwkJWExvZ1JlY1B0cglwcmV2aW91c19sc247CisKKwkJLyogT3BlbiB0aGUgYmFj a3VwX2xhYmVsIGZpbGUuICovCisJCXNucHJpbnRmKHBhdGhidWYsIE1BWFBHUEFUSCwgIiVzL2Jh Y2t1cF9sYWJlbCIsIGJhY2t1cF9kaXJzW2ldKTsKKwkJcGdfbG9nX2RlYnVnKCJyZWFkaW5nIFwi JXNcIiIsIHBhdGhidWYpOworCQlpZiAoKGZkID0gb3BlbihwYXRoYnVmLCBPX1JET05MWSwgMCkp IDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBwYXRo YnVmKTsKKworCQkvKgorCQkgKiBTbHVycCB0aGUgd2hvbGUgZmlsZSBpbnRvIG1lbW9yeS4KKwkJ ICoKKwkJICogVGhlIGV4YWN0IHNpemUgbGltaXQgdGhhdCB3ZSBpbXBvc2UgaGVyZSBkb2Vzbid0 IHJlYWxseSBtYXR0ZXIgLS0KKwkJICogbW9zdCBvZiB3aGF0J3Mgc3VwcG9zZWQgdG8gYmUgaW4g dGhlIGZpbGUgaXMgZml4ZWQgc2l6ZSBhbmQgcXVpdGUKKwkJICogc2hvcnQuIEhvd2V2ZXIsIHRo ZSBsZW5ndGggb2YgdGhlIGJhY2t1cF9sYWJlbCBpcyBsaW1pdGVkIChhdCBsZWFzdAorCQkgKiBi eSBzb21lIHBhcnRzIG9mIHRoZSBjb2RlKSB0byBNQVhHUEFUSCwgc28gaW5jbHVkZSB0aGF0IHZh bHVlIGluCisJCSAqIHRoZSBtYXhpbXVtIGxlbmd0aCB0aGF0IHdlIHRvbGVyYXRlLgorCQkgKi8K KwkJc2x1cnBfZmlsZShmZCwgcGF0aGJ1ZiwgYnVmLCAxMDAwMCArIE1BWFBHUEFUSCk7CisKKwkJ LyogQ2xvc2UgdGhlIGZpbGUuICovCisJCWlmIChjbG9zZShmZCkgIT0gMCkKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY2xvc2UgXCIlc1wiOiAlbSIsIHBhdGhidWYpOworCisJCS8qIFBhcnNlIHRo ZSBmaWxlIGNvbnRlbnRzLiAqLworCQlwYXJzZV9iYWNrdXBfbGFiZWwocGF0aGJ1ZiwgYnVmLCAm c3RhcnRfdGxpLCAmc3RhcnRfbHNuLAorCQkJCQkJICAgJnByZXZpb3VzX3RsaSwgJnByZXZpb3Vz X2xzbik7CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrcy4KKwkJICoKKwkJICogWFhYLiBJdCdz IGFjdHVhbGx5IG5vdCByZXF1aXJlZCB0aGF0IHN0YXJ0X2xzbiA9PSBjaGVja19sc24uIEl0CisJ CSAqIHdvdWxkIGJlIE9LIGlmIHN0YXJ0X2xzbiA+IGNoZWNrX2xzbiBwcm92aWRlZCB0aGF0IHN0 YXJ0X2xzbiBpcworCQkgKiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlbGV2YW50IHN3aXRj aHBvaW50LiBCdXQgYXQgdGhlIG1vbWVudAorCQkgKiB3ZSBkb24ndCBoYXZlIHRoYXQgaW5mb3Jt YXRpb24uCisJCSAqLworCQlpZiAoaSA+IDAgJiYgcHJldmlvdXNfdGxpID09IDApCisJCQlwZ19m YXRhbCgiYmFja3VwIGF0IFwiJXNcIiBpcyBhIGZ1bGwgYmFja3VwLCBidXQgb25seSB0aGUgZmly c3QgYmFja3VwIHNob3VsZCBiZSBhIGZ1bGwgYmFja3VwIiwKKwkJCQkJIGJhY2t1cF9kaXJzW2ld KTsKKwkJaWYgKGkgPT0gMCAmJiBwcmV2aW91c190bGkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJiYWNr dXAgYXQgXCIlc1wiIGlzIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgYnV0IHRoZSBmaXJzdCBiYWNr dXAgc2hvdWxkIGJlIGEgZnVsbCBiYWNrdXAiLAorCQkJCQkgYmFja3VwX2RpcnNbaV0pOworCQlp ZiAoaSA8IG5fYmFja3VwcyAtIDEgJiYgc3RhcnRfdGxpICE9IGNoZWNrX3RsaSkKKwkJCXBnX2Zh dGFsKCJiYWNrdXAgYXQgXCIlc1wiIHN0YXJ0cyBvbiB0aW1lbGluZSAldSwgYnV0IGV4cGVjdGVk ICV1IiwKKwkJCQkJIGJhY2t1cF9kaXJzW2ldLCBzdGFydF90bGksIGNoZWNrX3RsaSk7CisJCWlm IChpIDwgbl9iYWNrdXBzIC0gMSAmJiBzdGFydF9sc24gIT0gY2hlY2tfbHNuKQorCQkJcGdfZmF0 YWwoImJhY2t1cCBhdCBcIiVzXCIgc3RhcnRzIGF0IExTTiAlWC8lWCwgYnV0IGV4cGVjdGVkICVY LyVYIiwKKwkJCQkJIGJhY2t1cF9kaXJzW2ldLAorCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHN0YXJ0 X2xzbiksCisJCQkJCSBMU05fRk9STUFUX0FSR1MoY2hlY2tfbHNuKSk7CisJCWNoZWNrX3RsaSA9 IHByZXZpb3VzX3RsaTsKKwkJY2hlY2tfbHNuID0gcHJldmlvdXNfbHNuOworCisJCS8qCisJCSAq IFRoZSBsYXN0IGJhY2t1cCBsYWJlbCBpbiB0aGUgY2hhaW4gbmVlZHMgdG8gYmUgc2F2ZWQgZm9y IGxhdGVyIHVzZSwKKwkJICogd2hpbGUgdGhlIG90aGVycyBhcmUgb25seSBuZWVkZWQgd2l0aGlu IHRoaXMgbG9vcC4KKwkJICovCisJCWlmIChsYXN0YnVmID09IGJ1ZikKKwkJCWJ1ZiA9IG1ha2VT dHJpbmdJbmZvKCk7CisJCWVsc2UKKwkJCXJlc2V0U3RyaW5nSW5mbyhidWYpOworCX0KKworCS8q IEZyZWUgbWVtb3J5IHRoYXQgd2UgZG9uJ3QgbmVlZCBhbnkgbW9yZS4gKi8KKwlpZiAobGFzdGJ1 ZiAhPSBidWYpCisJeworCQlwZnJlZShidWYtPmRhdGEpOworCQlwZnJlZShidWYpOworCX0KKwor CS8qCisJICogUmV0dXJuIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IGJhY2t1cF9pbmZvIHRoYXQg d2UgcmVhZCAod2hpY2ggaXMgdGhlCisJICogYmFja3VwX2xhYmVsIGZyb20gdGhlIGxhc3QgZGly ZWN0b3J5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lKS4KKwkgKi8KKwlyZXR1cm4gbGFz dGJ1ZjsKK30KKworLyoKKyAqIFNhbml0eSBjaGVjayBjb250cm9sIGZpbGVzLgorICovCitzdGF0 aWMgdm9pZAorY2hlY2tfY29udHJvbF9maWxlcyhpbnQgbl9iYWNrdXBzLCBjaGFyICoqYmFja3Vw X2RpcnMpCit7CisJaW50CQkJaTsKKwl1aW50NjQJCXN5c3RlbV9pZGVudGlmaWVyID0gMDsJLyog cGxhY2F0ZSBjb21waWxlciAqLworCisJLyogVHJ5IHRvIHJlYWQgZWFjaCBjb250cm9sIGZpbGUg aW4gdHVybiwgbGFzdCB0byBmaXJzdC4gKi8KKwlmb3IgKGkgPSBuX2JhY2t1cHMgLSAxOyBpID49 IDA7IC0taSkKKwl7CisJCUNvbnRyb2xGaWxlRGF0YSAqY29udHJvbF9maWxlOworCQlib29sCQlj cmNfb2s7CisJCWNoYXIJICAgKmNvbnRyb2xwYXRoOworCisJCWNvbnRyb2xwYXRoID0gcHNwcmlu dGYoIiVzLyVzIiwgYmFja3VwX2RpcnNbaV0sICJnbG9iYWwvcGdfY29udHJvbCIpOworCQlwZ19s b2dfZGVidWcoInJlYWRpbmcgXCIlc1wiIiwgY29udHJvbHBhdGgpOworCQljb250cm9sX2ZpbGUg PSBnZXRfY29udHJvbGZpbGUoYmFja3VwX2RpcnNbaV0sICZjcmNfb2spOworCisJCS8qIENvbnRy b2wgZmlsZSBjb250ZW50cyBub3QgbWVhbmluZ2Z1bCBpZiBDUkMgaXMgYmFkLiAqLworCQlpZiAo IWNyY19vaykKKwkJCXBnX2ZhdGFsKCIlczogY3JjIGlzIGluY29ycmVjdCIsIGNvbnRyb2xwYXRo KTsKKworCQkvKiBDYW4ndCBpbnRlcnByZXQgY29udHJvbCBmaWxlIGlmIG5vdCBjdXJyZW50IHZl cnNpb24uICovCisJCWlmIChjb250cm9sX2ZpbGUtPnBnX2NvbnRyb2xfdmVyc2lvbiAhPSBQR19D T05UUk9MX1ZFUlNJT04pCisJCQlwZ19mYXRhbCgiJXM6IHVuZXhwZWN0ZWQgY29udHJvbCBmaWxl IHZlcnNpb24iLAorCQkJCQkgY29udHJvbHBhdGgpOworCisJCS8qIFN5c3RlbSBpZGVudGlmaWVy cyBzaG91bGQgYWxsIG1hdGNoLiAqLworCQlpZiAoaSA9PSBuX2JhY2t1cHMgLSAxKQorCQkJc3lz dGVtX2lkZW50aWZpZXIgPSBjb250cm9sX2ZpbGUtPnN5c3RlbV9pZGVudGlmaWVyOworCQllbHNl IGlmIChzeXN0ZW1faWRlbnRpZmllciAhPSBjb250cm9sX2ZpbGUtPnN5c3RlbV9pZGVudGlmaWVy KQorCQkJcGdfZmF0YWwoIiVzOiBleHBlY3RlZCBzeXN0ZW0gaWRlbnRpZmllciAlbGx1LCBidXQg Zm91bmQgJWxsdSIsCisJCQkJCSBjb250cm9scGF0aCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3lz dGVtX2lkZW50aWZpZXIsCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBjb250cm9sX2ZpbGUt PnN5c3RlbV9pZGVudGlmaWVyKTsKKworCQkvKiBSZWxlYXNlIG1lbW9yeS4gKi8KKwkJcGZyZWUo Y29udHJvbF9maWxlKTsKKwkJcGZyZWUoY29udHJvbHBhdGgpOworCX0KKworCS8qCisJICogSWYg ZGVidWcgb3V0cHV0IGlzIGVuYWJsZWQsIG1ha2UgYSBub3RlIG9mIHRoZSBzeXN0ZW0gaWRlbnRp ZmllciB0aGF0CisJICogd2UgZm91bmQgaW4gYWxsIG9mIHRoZSByZWxldmFudCBjb250cm9sIGZp bGVzLgorCSAqLworCXBnX2xvZ19kZWJ1Zygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSIsCisJ CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHN5c3RlbV9pZGVudGlmaWVyKTsKK30KKworLyoKKyAq IFNldCBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGJh c2VkIG9uIHRoZQorICogcGVybWlzc2lvbnMgb2YgdGhlIGdpdmVuIGRpcmVjdG9yeS4gVGhlIGlu dGVudCBoZXJlIGlzIHRoYXQgdGhlIG91dHB1dAorICogZGlyZWN0b3J5IHNob3VsZCB1c2UgdGhl IHNhbWUgcGVybWlzc2lvbnMgc2NoZW1lIGFzIHRoZSBmaW5hbCBpbnB1dAorICogZGlyZWN0b3J5 LgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfaW5wdXRfZGlyX3Blcm1pc3Npb25zKGNoYXIgKmRp cikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KGRpciwgJnN0KSAhPSAwKQorCQlw Z19mYXRhbCgiY291bGQgbm90IHN0YXQgXCIlc1wiOiAlbSIsIGRpcik7CisKKwlTZXREYXRhRGly ZWN0b3J5Q3JlYXRlUGVybShzdC5zdF9tb2RlKTsKK30KKworLyoKKyAqIENsZWFuIHVwIG91dHB1 dCBkaXJlY3RvcmllcyBiZWZvcmUgZXhpdGluZy4KKyAqLworc3RhdGljIHZvaWQKK2NsZWFudXBf ZGlyZWN0b3JpZXNfYXRleGl0KHZvaWQpCit7CisJd2hpbGUgKGNsZWFudXBfZGlyX2xpc3QgIT0g TlVMTCkKKwl7CisJCWNiX2NsZWFudXBfZGlyICpkaXIgPSBjbGVhbnVwX2Rpcl9saXN0OworCisJ CWlmIChkaXItPnJtdG9wZGlyKQorCQl7CisJCQlwZ19sb2dfaW5mbygicmVtb3Zpbmcgb3V0cHV0 IGRpcmVjdG9yeSBcIiVzXCIiLCBkaXItPnRhcmdldF9wYXRoKTsKKwkJCWlmICghcm10cmVlKGRp ci0+dGFyZ2V0X3BhdGgsIGRpci0+cm10b3BkaXIpKQorCQkJCXBnX2xvZ19lcnJvcigiZmFpbGVk IHRvIHJlbW92ZSBvdXRwdXQgZGlyZWN0b3J5Iik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ19s b2dfaW5mbygicmVtb3ZpbmcgY29udGVudHMgb2Ygb3V0cHV0IGRpcmVjdG9yeSBcIiVzXCIiLAor CQkJCQkJZGlyLT50YXJnZXRfcGF0aCk7CisJCQlpZiAoIXJtdHJlZShkaXItPnRhcmdldF9wYXRo LCBkaXItPnJtdG9wZGlyKSkKKwkJCQlwZ19sb2dfZXJyb3IoImZhaWxlZCB0byByZW1vdmUgY29u dGVudHMgb2Ygb3V0cHV0IGRpcmVjdG9yeSIpOworCQl9CisKKwkJY2xlYW51cF9kaXJfbGlzdCA9 IGNsZWFudXBfZGlyX2xpc3QtPm5leHQ7CisJCXBmcmVlKGRpcik7CisJfQorfQorCisvKgorICog Q3JlYXRlIHRoZSBuYW1lZCBvdXRwdXQgZGlyZWN0b3J5LCB1bmxlc3MgaXQgYWxyZWFkeSBleGlz dHMgb3Igd2UncmUgaW4KKyAqIGRyeS1ydW4gbW9kZS4gSWYgaXQgYWxyZWFkeSBleGlzdHMgYnV0 IGlzIG5vdCBlbXB0eSwgdGhhdCdzIGEgZmF0YWwgZXJyb3IuCisgKgorICogQWRkcyB0aGUgY3Jl YXRlZCBkaXJlY3RvcnkgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUgY2xlYW5lZCB1 cAorICogYXQgcHJvY2VzcyBleGl0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX291dHB1dF9k aXJlY3RvcnkoY2hhciAqZGlybmFtZSwgY2Jfb3B0aW9ucyAqb3B0KQoreworCXN3aXRjaCAocGdf Y2hlY2tfZGlyKGRpcm5hbWUpKQorCXsKKwkJY2FzZSAwOgorCQkJaWYgKG9wdC0+ZHJ5X3J1bikK KwkJCXsKKwkJCQlwZ19sb2dfZGVidWcoIndvdWxkIGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiIiwg ZGlybmFtZSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGdfbG9nX2RlYnVnKCJjcmVhdGluZyBk aXJlY3RvcnkgXCIlc1wiIiwgZGlybmFtZSk7CisJCQlpZiAocGdfbWtkaXJfcChkaXJuYW1lLCBw Z19kaXJfY3JlYXRlX21vZGUpID09IC0xKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRl IGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlybmFtZSk7CisJCQlyZW1lbWJlcl90b19jbGVhbnVw X2RpcmVjdG9yeShkaXJuYW1lLCB0cnVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMToKKwkJCXBn X2xvZ19kZWJ1ZygidXNpbmcgZXhpc3RpbmcgZGlyZWN0b3J5IFwiJXNcIiIsIGRpcm5hbWUpOwor CQkJcmVtZW1iZXJfdG9fY2xlYW51cF9kaXJlY3RvcnkoZGlybmFtZSwgZmFsc2UpOworCQkJYnJl YWs7CisKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisKKwkJY2Fz ZSAtMToKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgYWNjZXNzIGRpcmVjdG9yeSBcIiVzXCI6ICVt IiwgZGlybmFtZSk7CisJfQorfQorCisvKgorICogaGVscAorICoKKyAqIFByaW50cyBoZWxwIHBh Z2UgZm9yIHRoZSBwcm9ncmFtCisgKgorICogcHJvZ25hbWU6IHRoZSBuYW1lIG9mIHRoZSBleGVj dXRlZCBwcm9ncmFtLCBzdWNoIGFzICJwZ19jb21iaW5lYmFja3VwIgorICovCitzdGF0aWMgdm9p ZAoraGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwlwcmludGYoXygiJXMgcmVjb25zdHJ1 Y3RzIGZ1bGwgYmFja3VwcyBmcm9tIGluY3JlbWVudGFscy5cblxuIiksIHByb2duYW1lKTsKKwlw cmludGYoXygiVXNhZ2U6XG4iKSk7CisJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gRElSRUNU T1JZLi4uXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7CisJcHJp bnRmKF8oIiAgLWQsIC0tZGVidWcgICAgICAgICAgICAgICBnZW5lcmF0ZSBsb3RzIG9mIGRlYnVn Z2luZyBvdXRwdXRcbiIpKTsKKwlwcmludGYoXygiICAtbiwgLS1kcnktcnVuICAgICAgICAgICAg IGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nXG4iKSk7CisJcHJpbnRmKF8oIiAgLU4sIC0tbm8t c3luYyAgICAgICAgICAgICBkbyBub3Qgd2FpdCBmb3IgY2hhbmdlcyB0byBiZSB3cml0dGVuIHNh ZmVseSB0byBkaXNrXG4iKSk7CisJcHJpbnRmKF8oIiAgLW8sIC0tb3V0cHV0ICAgICAgICAgICAg ICBvdXRwdXQgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgLVQsIC0tdGFibGVzcGFjZS1t YXBwaW5nPU9MRERJUj1ORVdESVJcbiIpKTsKKwlwcmludGYoXygiICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlbG9jYXRlIHRhYmxlc3BhY2UgaW4gT0xERElSIHRvIE5FV0RJUlxuIikpOwor CXByaW50ZihfKCIgICAgICAtLW1hbmlmZXN0LWNoZWNrc3Vtcz1TSEF7MjI0LDI1NiwzODQsNTEy fXxDUkMzMkN8Tk9ORVxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGFs Z29yaXRobSBmb3IgbWFuaWZlc3QgY2hlY2tzdW1zXG4iKSk7CisJcHJpbnRmKF8oIiAgICAgIC0t bm8tbWFuaWZlc3QgICAgICAgICBzdXBwcmVzcyBnZW5lcmF0aW9uIG9mIGJhY2t1cCBtYW5pZmVz dFxuIikpOworCXByaW50ZihfKCIgICAgICAtLXN5bmMtbWV0aG9kPU1FVEhPRCAgc2V0IG1ldGhv ZCBmb3Igc3luY2luZyBmaWxlcyB0byBkaXNrXG4iKSk7CisJcHJpbnRmKF8oIiAgLT8sIC0taGVs cCAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CisKKwlwcmlu dGYoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKKwlw cmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VS TCk7Cit9CisKKy8qCisgKiBUcnkgdG8gcGFyc2UgYSBzdHJpbmcgYXMgYSBub24temVybyBPSUQg d2l0aG91dCBsZWFkaW5nIHplcm9lcy4KKyAqCisgKiBJZiBpdCB3b3JrcywgcmV0dXJuIHRydWUg YW5kIHNldCAqcmVzdWx0IHRvIHRoZSBhbnN3ZXIsIGVsc2UgcmV0dXJuIGZhbHNlLgorICovCitz dGF0aWMgYm9vbAorcGFyc2Vfb2lkKGNoYXIgKnMsIE9pZCAqcmVzdWx0KQoreworCU9pZAkJCW9p ZDsKKwljaGFyCSAgICplcDsKKworCWVycm5vID0gMDsKKwlvaWQgPSBzdHJ0b3VsKHMsICZlcCwg MTApOworCWlmIChlcnJubyAhPSAwIHx8ICplcCAhPSAnXDAnIHx8IG9pZCA8IDEgfHwgb2lkID4g UEdfVUlOVDMyX01BWCkKKwkJcmV0dXJuIGZhbHNlOworCisJKnJlc3VsdCA9IG9pZDsKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIENvcHkgZmlsZXMgZnJvbSB0aGUgaW5wdXQgZGlyZWN0b3J5 IHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LCByZWNvbnN0cnVjdGluZworICogZnVsbCBmaWxlcyBm cm9tIGluY3JlbWVudGFsIGZpbGVzIGFzIHJlcXVpcmVkLgorICoKKyAqIElmIHByb2Nlc3Npbmcg aXMgYSB1c2VyLWRlZmluZWQgdGFibGVzcGFjZSwgdGhlIHRzb2lkIHNob3VsZCBiZSB0aGUgT0lE CisgKiBvZiB0aGF0IHRhYmxlc3BhY2UgYW5kIGlucHV0X2RpcmVjdG9yeSBhbmQgb3V0cHV0X2Rp cmVjdG9yeSBzaG91bGQgYmUgdGhlCisgKiB0b3BsZXZlbCBpbnB1dCBhbmQgb3V0cHV0IGRpcmVj dG9yaWVzIGZvciB0aGF0IHRhYmxlc3BhY2UuIE90aGVyd2lzZSwKKyAqIHRzb2lkIHNob3VsZCBi ZSBJbnZhbGlkT2lkIGFuZCBpbnB1dF9kaXJlY3RvcnkgYW5kIG91dHB1dF9kaXJlY3Rvcnkgc2hv dWxkCisgKiBiZSB0aGUgbWFpbiBpbnB1dCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzLgorICoKKyAq IHJlbGF0aXZlX3BhdGggaXMgdGhlIHBhdGggYmVuZWF0aCB0aGUgZ2l2ZW4gaW5wdXQgYW5kIG91 dHB1dCBkaXJlY3RvcmllcworICogdGhhdCB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIElm IE5VTEwsIGl0IGluZGljYXRlcyB0aGF0IHdlJ3JlCisgKiBwcm9jZXNzaW5nIHRoZSBpbnB1dCBh bmQgb3V0cHV0IGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXMuCisgKgorICogbl9wcmlvcl9iYWNrdXBz IGlzIHRoZSBudW1iZXIgb2YgcHJpb3IgYmFja3VwcyB0aGF0IHdlIGhhdmUgYXZhaWxhYmxlLgor ICogVGhpcyBkb2Vzbid0IGNvdW50IHRoZSB2ZXJ5IGxhc3QgYmFja3VwLCB3aGljaCBpcyByZWZl cmVuY2VkIGJ5CisgKiBvdXRwdXRfZGlyZWN0b3J5LCBqdXN0IHRoZSBvbGRlciBvbmVzLiBwcmlv cl9iYWNrdXBfZGlycyBpcyBhbiBhcnJheSBvZgorICogdGhlIGxvY2F0aW9ucyBvZiB0aG9zZSBw cmV2aW91cyBiYWNrdXBzLgorICovCitzdGF0aWMgdm9pZAorcHJvY2Vzc19kaXJlY3RvcnlfcmVj dXJzaXZlbHkoT2lkIHRzb2lkLAorCQkJCQkJCSAgY2hhciAqaW5wdXRfZGlyZWN0b3J5LAorCQkJ CQkJCSAgY2hhciAqb3V0cHV0X2RpcmVjdG9yeSwKKwkJCQkJCQkgIGNoYXIgKnJlbGF0aXZlX3Bh dGgsCisJCQkJCQkJICBpbnQgbl9wcmlvcl9iYWNrdXBzLAorCQkJCQkJCSAgY2hhciAqKnByaW9y X2JhY2t1cF9kaXJzLAorCQkJCQkJCSAgbWFuaWZlc3RfZGF0YSAqKm1hbmlmZXN0cywKKwkJCQkJ CQkgIG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkgIGNiX29wdGlvbnMgKm9wdCkK K3sKKwljaGFyCQlpZnVsbGRpcltNQVhQR1BBVEhdOworCWNoYXIJCW9mdWxsZGlyW01BWFBHUEFU SF07CisJY2hhcgkJbWFuaWZlc3RfcHJlZml4W01BWFBHUEFUSF07CisJRElSCQkgICAqZGlyOwor CXN0cnVjdCBkaXJlbnQgKmRlOworCWJvb2wJCWlzX3BnX3RibHNwYzsKKwlib29sCQlpc19wZ193 YWw7CisJbWFuaWZlc3RfZGF0YSAqbGF0ZXN0X21hbmlmZXN0ID0gbWFuaWZlc3RzW25fcHJpb3Jf YmFja3Vwc107CisJcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlOworCisJLyoKKwkgKiBw Z190YmxzcGMgYW5kIHBnX3dhbCBhcmUgc3BlY2lhbCBjYXNlcywgc28gZGV0ZWN0IHRob3NlIGhl cmUuCisJICoKKwkgKiBwZ190YmxzcGMgaXMgb25seSBzcGVjaWFsIGF0IHRoZSB0b3AgbGV2ZWws IGJ1dCBzdWJkaXJlY3RvcmllcyBvZgorCSAqIHBnX3dhbCBhcmUganVzdCBhcyBzcGVjaWFsIGFz IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5LgorCSAqCisJICogU2luY2UgaW5jcmVtZW50YWwgYmFj a3VwIGRvZXMgbm90IGV4aXN0IGluIHByZS12MTAgdmVyc2lvbnMsIHdlIGRvbid0CisJICogaGF2 ZSB0byB3b3JyeSBhYm91dCB0aGUgb2xkIHBnX3hsb2cgbmFtaW5nLgorCSAqLworCWlzX3BnX3Ri bHNwYyA9ICFPaWRJc1ZhbGlkKHRzb2lkKSAmJiByZWxhdGl2ZV9wYXRoICE9IE5VTEwgJiYKKwkJ c3RyY21wKHJlbGF0aXZlX3BhdGgsICJwZ190YmxzcGMiKSA9PSAwOworCWlzX3BnX3dhbCA9ICFP aWRJc1ZhbGlkKHRzb2lkKSAmJiByZWxhdGl2ZV9wYXRoICE9IE5VTEwgJiYKKwkJKHN0cmNtcChy ZWxhdGl2ZV9wYXRoLCAicGdfd2FsIikgPT0gMCB8fAorCQkgc3RybmNtcChyZWxhdGl2ZV9wYXRo LCAicGdfd2FsLyIsIDcpID09IDApOworCisJLyoKKwkgKiBJZiB3ZSdyZSB1bmRlciBwZ193YWws IHRoZW4gd2UgZG9uJ3QgbmVlZCBjaGVja3N1bXMsIGJlY2F1c2UgdGhlc2UKKwkgKiBmaWxlcyBh cmVuJ3QgaW5jbHVkZWQgaW4gdGhlIGJhY2t1cCBtYW5pZmVzdC4gT3RoZXJ3aXNlIHVzZSB3aGF0 ZXZlcgorCSAqIHR5cGUgb2YgY2hlY2tzdW0gaXMgY29uZmlndXJlZC4KKwkgKi8KKwlpZiAoIWlz X3BnX3dhbCkKKwkJY2hlY2tzdW1fdHlwZSA9IG9wdC0+bWFuaWZlc3RfY2hlY2tzdW1zOworCWVs c2UKKwkJY2hlY2tzdW1fdHlwZSA9IENIRUNLU1VNX1RZUEVfTk9ORTsKKworCS8qCisJICogQXBw ZW5kIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVz LCBhbmQKKwkgKiBmaWd1cmUgb3V0IHRoZSBhcHByb3ByaWF0ZSBwcmVmaXggdG8gYWRkIHRvIGZp bGVzIGluIHRoaXMgZGlyZWN0b3J5CisJICogd2hlbiBsb29raW5nIHRoZW0gdXAgaW4gYSBiYWNr dXAgbWFuaWZlc3QuCisJICovCisJaWYgKHJlbGF0aXZlX3BhdGggPT0gTlVMTCkKKwl7CisJCXN0 cm5jcHkoaWZ1bGxkaXIsIGlucHV0X2RpcmVjdG9yeSwgTUFYUEdQQVRIKTsKKwkJc3RybmNweShv ZnVsbGRpciwgb3V0cHV0X2RpcmVjdG9yeSwgTUFYUEdQQVRIKTsKKwkJaWYgKE9pZElzVmFsaWQo dHNvaWQpKQorCQkJc25wcmludGYobWFuaWZlc3RfcHJlZml4LCBNQVhQR1BBVEgsICJwZ190Ymxz cGMvJXUvIiwgdHNvaWQpOworCQllbHNlCisJCQltYW5pZmVzdF9wcmVmaXhbMF0gPSAnXDAnOwor CX0KKwllbHNlCisJeworCQlzbnByaW50ZihpZnVsbGRpciwgTUFYUEdQQVRILCAiJXMvJXMiLCBp bnB1dF9kaXJlY3RvcnksCisJCQkJIHJlbGF0aXZlX3BhdGgpOworCQlzbnByaW50ZihvZnVsbGRp ciwgTUFYUEdQQVRILCAiJXMvJXMiLCBvdXRwdXRfZGlyZWN0b3J5LAorCQkJCSByZWxhdGl2ZV9w YXRoKTsKKwkJaWYgKE9pZElzVmFsaWQodHNvaWQpKQorCQkJc25wcmludGYobWFuaWZlc3RfcHJl Zml4LCBNQVhQR1BBVEgsICJwZ190YmxzcGMvJXUvJXMvIiwKKwkJCQkJIHRzb2lkLCByZWxhdGl2 ZV9wYXRoKTsKKwkJZWxzZQorCQkJc25wcmludGYobWFuaWZlc3RfcHJlZml4LCBNQVhQR1BBVEgs ICIlcy8iLCByZWxhdGl2ZV9wYXRoKTsKKwl9CisKKwkvKgorCSAqIFRvcGxldmVsIG91dHB1dCBk aXJlY3RvcmllcyBoYXZlIGFscmVhZHkgYmVlbiBjcmVhdGVkIGJ5IHRoZSB0aW1lIHRoaXMKKwkg KiBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dCBhbnkgc3ViZGlyZWN0b3JpZXMgYXJlIG91ciByZXNw b25zaWJpbGl0eS4KKwkgKi8KKwlpZiAocmVsYXRpdmVfcGF0aCAhPSBOVUxMKQorCXsKKwkJaWYg KG9wdC0+ZHJ5X3J1bikKKwkJCXBnX2xvZ19kZWJ1Zygid291bGQgY3JlYXRlIGRpcmVjdG9yeSBc IiVzXCIiLCBvZnVsbGRpcik7CisJCWVsc2UKKwkJeworCQkJcGdfbG9nX2RlYnVnKCJjcmVhdGlu ZyBkaXJlY3RvcnkgXCIlc1wiIiwgb2Z1bGxkaXIpOworCQkJaWYgKG1rZGlyKG9mdWxsZGlyLCBw Z19kaXJfY3JlYXRlX21vZGUpID09IC0xKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRl IGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgb2Z1bGxkaXIpOworCQl9CisJfQorCisJLyogSXQncyB0 aW1lIHRvIHNjYW4gdGhlIGRpcmVjdG9yeS4gKi8KKwlpZiAoKGRpciA9IG9wZW5kaXIoaWZ1bGxk aXIpKSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5IFwiJXNc IjogJW0iLCBpZnVsbGRpcik7CisJd2hpbGUgKGVycm5vID0gMCwgKGRlID0gcmVhZGRpcihkaXIp KSAhPSBOVUxMKQorCXsKKwkJUEdGaWxlVHlwZQl0eXBlOworCQljaGFyCQlpZnVsbHBhdGhbTUFY UEdQQVRIXTsKKwkJY2hhcgkJb2Z1bGxwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCW1hbmlmZXN0 X3BhdGhbTUFYUEdQQVRIXTsKKwkJT2lkCQkJb2lkID0gSW52YWxpZE9pZDsKKwkJaW50CQkJY2hl Y2tzdW1fbGVuZ3RoID0gMDsKKwkJdWludDgJICAgKmNoZWNrc3VtX3BheWxvYWQgPSBOVUxMOwor CQlwZ19jaGVja3N1bV9jb250ZXh0IGNoZWNrc3VtX2N0eDsKKworCQkvKiBJZ25vcmUgIi4iIGFu ZCAiLi4iIGVudHJpZXMuICovCisJCWlmIChzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSA9PSAwIHx8 CisJCQlzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8q IENvbnN0cnVjdCBpbnB1dCBwYXRoLiAqLworCQlzbnByaW50ZihpZnVsbHBhdGgsIE1BWFBHUEFU SCwgIiVzLyVzIiwgaWZ1bGxkaXIsIGRlLT5kX25hbWUpOworCisJCS8qIEZpZ3VyZSBvdXQgd2hh dCBraW5kIG9mIGRpcmVjdG9yeSBlbnRyeSB0aGlzIGlzLiAqLworCQl0eXBlID0gZ2V0X2RpcmVu dF90eXBlKGlmdWxscGF0aCwgZGUsIGZhbHNlLCBQR19MT0dfRVJST1IpOworCQlpZiAodHlwZSA9 PSBQR0ZJTEVUWVBFX0VSUk9SKQorCQkJZXhpdCgxKTsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBw cm9jZXNzaW5nIHBnX3RibHNwYywgdGhlbiBjaGVjayB3aGV0aGVyIHRoZSBmaWxlbmFtZQorCQkg KiBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgdGFibGVzcGFjZSBPSUQuIElmIHNvLCBhbmQgaWYg dGhlCisJCSAqIGRpcmVjdG9yeSBlbnRyeSBpcyBhIHN5bWJvbGljIGxpbmsgb3IgYSBkaXJlY3Rv cnksIHNraXAgaXQuCisJCSAqCisJCSAqIE91ciBnb2FsIGhlcmUgaXMgdG8gaWdub3JlIGFueXRo aW5nIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNvbnNpZGVyZWQKKwkJICogYnkgc2Nhbl9mb3JfZXhp c3RpbmdfdGFibGVzcGFjZXMgdG8gYmUgYSB0YWJsZXNwYWNlLgorCQkgKi8KKwkJaWYgKGlzX3Bn X3RibHNwYyAmJiBwYXJzZV9vaWQoZGUtPmRfbmFtZSwgJm9pZCkgJiYKKwkJCSh0eXBlID09IFBH RklMRVRZUEVfTE5LIHx8IHR5cGUgPT0gUEdGSUxFVFlQRV9ESVIpKQorCQkJY29udGludWU7CisK KwkJLyogSWYgaXQncyBhIGRpcmVjdG9yeSwgcmVjdXJzZS4gKi8KKwkJaWYgKHR5cGUgPT0gUEdG SUxFVFlQRV9ESVIpCisJCXsKKwkJCWNoYXIJCW5ld19yZWxhdGl2ZV9wYXRoW01BWFBHUEFUSF07 CisKKwkJCS8qIEFwcGVuZCBuZXcgcGF0aG5hbWUgY29tcG9uZW50IHRvIHJlbGF0aXZlIHBhdGgu ICovCisJCQlpZiAocmVsYXRpdmVfcGF0aCA9PSBOVUxMKQorCQkJCXN0cm5jcHkobmV3X3JlbGF0 aXZlX3BhdGgsIGRlLT5kX25hbWUsIE1BWFBHUEFUSCk7CisJCQllbHNlCisJCQkJc25wcmludGYo bmV3X3JlbGF0aXZlX3BhdGgsIE1BWFBHUEFUSCwgIiVzLyVzIiwgcmVsYXRpdmVfcGF0aCwKKwkJ CQkJCSBkZS0+ZF9uYW1lKTsKKworCQkJLyogQW5kIHJlY3Vyc2UuICovCisJCQlwcm9jZXNzX2Rp cmVjdG9yeV9yZWN1cnNpdmVseSh0c29pZCwKKwkJCQkJCQkJCQkgIGlucHV0X2RpcmVjdG9yeSwg b3V0cHV0X2RpcmVjdG9yeSwKKwkJCQkJCQkJCQkgIG5ld19yZWxhdGl2ZV9wYXRoLAorCQkJCQkJ CQkJCSAgbl9wcmlvcl9iYWNrdXBzLCBwcmlvcl9iYWNrdXBfZGlycywKKwkJCQkJCQkJCQkgIG1h bmlmZXN0cywgbXdyaXRlciwgb3B0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBh bnl0aGluZyB0aGF0J3Mgbm90IGEgcmVndWxhciBmaWxlLiAqLworCQlpZiAodHlwZSAhPSBQR0ZJ TEVUWVBFX1JFRykKKwkJeworCQkJaWYgKHR5cGUgPT0gUEdGSUxFVFlQRV9MTkspCisJCQkJcGdf bG9nX3dhcm5pbmcoInNraXBwaW5nIHN5bWJvbGljIGxpbmsgXCIlc1wiIiwgaWZ1bGxwYXRoKTsK KwkJCWVsc2UKKwkJCQlwZ19sb2dfd2FybmluZygic2tpcHBpbmcgc3BlY2lhbCBmaWxlIFwiJXNc IiIsIGlmdWxscGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNraXAgdGhl IGJhY2t1cF9sYWJlbCBhbmQgYmFja3VwX21hbmlmZXN0IGZpbGVzOyB0aGV5IHJlcXVpcmUKKwkJ ICogc3BlY2lhbCBoYW5kbGluZyBhbmQgYXJlIGhhbmRsZWQgZWxzZXdoZXJlLgorCQkgKi8KKwkJ aWYgKHJlbGF0aXZlX3BhdGggPT0gTlVMTCAmJgorCQkJKHN0cmNtcChkZS0+ZF9uYW1lLCAiYmFj a3VwX2xhYmVsIikgPT0gMCB8fAorCQkJIHN0cmNtcChkZS0+ZF9uYW1lLCAiYmFja3VwX21hbmlm ZXN0IikgPT0gMCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiBpdCdzIGFuIGluY3Jl bWVudGFsIGZpbGUsIGhhbmQgaXQgb2ZmIHRvIHRoZSByZWNvbnN0cnVjdGlvbgorCQkgKiBjb2Rl LCB3aGljaCB3aWxsIGZpZ3VyZSBvdXQgd2hhdCB0byBkby4KKwkJICovCisJCWlmIChzdHJuY21w KGRlLT5kX25hbWUsIElOQ1JFTUVOVEFMX1BSRUZJWCwKKwkJCQkJSU5DUkVNRU5UQUxfUFJFRklY X0xFTkdUSCkgPT0gMCkKKwkJeworCQkJLyogT3V0cHV0IHBhdGggc2hvdWxkIG5vdCBpbmNsdWRl ICJJTkNSRU1FTlRBTC4iIHByZWZpeC4gKi8KKwkJCXNucHJpbnRmKG9mdWxscGF0aCwgTUFYUEdQ QVRILCAiJXMvJXMiLCBvZnVsbGRpciwKKwkJCQkJIGRlLT5kX25hbWUgKyBJTkNSRU1FTlRBTF9Q UkVGSVhfTEVOR1RIKTsKKworCisJCQkvKiBNYW5pZmVzdCBwYXRoIGxpa2V3aXNlIG9taXRzIGlu Y3JlbWVudGFsIHByZWZpeC4gKi8KKwkJCXNucHJpbnRmKG1hbmlmZXN0X3BhdGgsIE1BWFBHUEFU SCwgIiVzJXMiLCBtYW5pZmVzdF9wcmVmaXgsCisJCQkJCSBkZS0+ZF9uYW1lICsgSU5DUkVNRU5U QUxfUFJFRklYX0xFTkdUSCk7CisKKwkJCS8qIFJlY29uc3RydWN0aW9uIGxvZ2ljIHdpbGwgZG8g dGhlIHJlc3QuICovCisJCQlyZWNvbnN0cnVjdF9mcm9tX2luY3JlbWVudGFsX2ZpbGUoaWZ1bGxw YXRoLCBvZnVsbHBhdGgsCisJCQkJCQkJCQkJCSAgcmVsYXRpdmVfcGF0aCwKKwkJCQkJCQkJCQkJ ICBkZS0+ZF9uYW1lICsgSU5DUkVNRU5UQUxfUFJFRklYX0xFTkdUSCwKKwkJCQkJCQkJCQkJICBu X3ByaW9yX2JhY2t1cHMsCisJCQkJCQkJCQkJCSAgcHJpb3JfYmFja3VwX2RpcnMsCisJCQkJCQkJ CQkJCSAgbWFuaWZlc3RzLAorCQkJCQkJCQkJCQkgIG1hbmlmZXN0X3BhdGgsCisJCQkJCQkJCQkJ CSAgY2hlY2tzdW1fdHlwZSwKKwkJCQkJCQkJCQkJICAmY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJ CQkJCQkgICZjaGVja3N1bV9wYXlsb2FkLAorCQkJCQkJCQkJCQkgIG9wdC0+ZGVidWcsCisJCQkJ CQkJCQkJCSAgb3B0LT5kcnlfcnVuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIENvbnN0cnVj dCB0aGUgcGF0aCB0aGF0IHRoZSBiYWNrdXBfbWFuaWZlc3Qgd2lsbCB1c2UuICovCisJCQlzbnBy aW50ZihtYW5pZmVzdF9wYXRoLCBNQVhQR1BBVEgsICIlcyVzIiwgbWFuaWZlc3RfcHJlZml4LAor CQkJCQkgZGUtPmRfbmFtZSk7CisKKwkJCS8qCisJCQkgKiBJdCdzIG5vdCBhbiBpbmNyZW1lbnRh bCBmaWxlLCBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGVudGlyZQorCQkJICogZmlsZSB0byB0aGUg b3V0cHV0IGRpcmVjdG9yeS4KKwkJCSAqCisJCQkgKiBJZiBhIGNoZWNrc3VtIG9mIHRoZSByZXF1 aXJlZCB0eXBlIGFscmVhZHkgZXhpc3RzIGluIHRoZQorCQkJICogYmFja3VwX21hbmlmZXN0IGZv ciB0aGUgZmluYWwgaW5wdXQgZGlyZWN0b3J5LCB3ZSBjYW4gc2F2ZSBzb21lCisJCQkgKiB3b3Jr IGJ5IHJldXNpbmcgdGhhdCBjaGVja3N1bSBpbnN0ZWFkIG9mIGNvbXB1dGluZyBhIG5ldyBvbmUu CisJCQkgKi8KKwkJCWlmIChjaGVja3N1bV90eXBlICE9IENIRUNLU1VNX1RZUEVfTk9ORSAmJgor CQkJCWxhdGVzdF9tYW5pZmVzdCAhPSBOVUxMKQorCQkJeworCQkJCW1hbmlmZXN0X2ZpbGUgKm1m aWxlOworCisJCQkJbWZpbGUgPSBtYW5pZmVzdF9maWxlc19sb29rdXAobGF0ZXN0X21hbmlmZXN0 LT5maWxlcywKKwkJCQkJCQkJCQkJICBtYW5pZmVzdF9wYXRoKTsKKwkJCQlpZiAobWZpbGUgPT0g TlVMTCkKKwkJCQl7CisJCQkJCWNoYXIJICAgKmJtcGF0aDsKKworCQkJCQkvKgorCQkJCQkgKiBU aGUgZGlyZWN0b3J5IGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGJhY2t1cF9tYW5pZmVzdCwKKwkJ CQkJICogc28gZW1pdCBhIHdhcm5pbmcuCisJCQkJCSAqLworCQkJCQlibXBhdGggPSBwc3ByaW50 ZigiJXMvJXMiLCBpbnB1dF9kaXJlY3RvcnksCisJCQkJCQkJCQkgICJiYWNrdXBfbWFuaWZlc3Qi KTsKKwkJCQkJcGdfbG9nX3dhcm5pbmcoIlwiJXNcIiBjb250YWlucyBubyBlbnRyeSBmb3IgXCIl c1wiIiwKKwkJCQkJCQkJICAgYm1wYXRoLCBtYW5pZmVzdF9wYXRoKTsKKwkJCQkJcGZyZWUoYm1w YXRoKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAobWZpbGUtPmNoZWNrc3VtX3R5cGUgPT0gY2hlY2tz dW1fdHlwZSkKKwkJCQl7CisJCQkJCWNoZWNrc3VtX2xlbmd0aCA9IG1maWxlLT5jaGVja3N1bV9s ZW5ndGg7CisJCQkJCWNoZWNrc3VtX3BheWxvYWQgPSBtZmlsZS0+Y2hlY2tzdW1fcGF5bG9hZDsK KwkJCQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBJZiB3ZSdyZSByZXVzaW5nIGEgY2hlY2tzdW0s IHRoZW4gd2UgZG9uJ3QgbmVlZCBjb3B5X2ZpbGUoKSB0bworCQkJICogY29tcHV0ZSBvbmUgZm9y IHVzLCBidXQgb3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBjb21wdXRlIHdoYXRldmVyCisJCQkgKiB0 eXBlIG9mIGNoZWNrc3VtIHdlIG5lZWQuCisJCQkgKi8KKwkJCWlmIChjaGVja3N1bV9sZW5ndGgg IT0gMCkKKwkJCQlwZ19jaGVja3N1bV9pbml0KCZjaGVja3N1bV9jdHgsIENIRUNLU1VNX1RZUEVf Tk9ORSk7CisJCQllbHNlCisJCQkJcGdfY2hlY2tzdW1faW5pdCgmY2hlY2tzdW1fY3R4LCBjaGVj a3N1bV90eXBlKTsKKworCQkJLyogQWN0dWFsbHkgY29weSB0aGUgZmlsZS4gKi8KKwkJCXNucHJp bnRmKG9mdWxscGF0aCwgTUFYUEdQQVRILCAiJXMvJXMiLCBvZnVsbGRpciwgZGUtPmRfbmFtZSk7 CisJCQljb3B5X2ZpbGUoaWZ1bGxwYXRoLCBvZnVsbHBhdGgsICZjaGVja3N1bV9jdHgsIG9wdC0+ ZHJ5X3J1bik7CisKKwkJCS8qCisJCQkgKiBJZiBjb3B5X2ZpbGUoKSBwZXJmb3JtZWQgYSBjaGVj a3N1bSBjYWxjdWxhdGlvbiBmb3IgdXMsIHRoZW4KKwkJCSAqIHNhdmUgdGhlIHJlc3VsdHMgKGV4 Y2VwdCBpbiBkcnktcnVuIG1vZGUsIHdoZW4gdGhlcmUncyBubworCQkJICogcG9pbnQpLgorCQkJ ICovCisJCQlpZiAoY2hlY2tzdW1fY3R4LnR5cGUgIT0gQ0hFQ0tTVU1fVFlQRV9OT05FICYmICFv cHQtPmRyeV9ydW4pCisJCQl7CisJCQkJY2hlY2tzdW1fcGF5bG9hZCA9IHBnX21hbGxvYyhQR19D SEVDS1NVTV9NQVhfTEVOR1RIKTsKKwkJCQljaGVja3N1bV9sZW5ndGggPSBwZ19jaGVja3N1bV9m aW5hbCgmY2hlY2tzdW1fY3R4LAorCQkJCQkJCQkJCQkJCWNoZWNrc3VtX3BheWxvYWQpOworCQkJ fQorCQl9CisKKwkJLyogR2VuZXJhdGUgbWFuaWZlc3QgZW50cnksIGlmIG5lZWRlZC4gKi8KKwkJ aWYgKG13cml0ZXIgIT0gTlVMTCkKKwkJeworCQkJc3RydWN0IHN0YXQgc2I7CisKKwkJCS8qCisJ CQkgKiBJbiBvcmRlciB0byBnZW5lcmF0ZSBhIG1hbmlmZXN0IGVudHJ5LCB3ZSBuZWVkIHRoZSBm aWxlIHNpemUKKwkJCSAqIGFuZCBtdGltZS4gV2UgaGF2ZSBubyB3YXkgdG8ga25vdyB0aGUgY29y cmVjdCBtdGltZSBleGNlcHQgdG8KKwkJCSAqIHN0YXQoKSB0aGUgZmlsZSwgc28ganVzdCBkbyB0 aGF0IGFuZCBnZXQgdGhlIHNpemUgYXMgd2VsbC4KKwkJCSAqCisJCQkgKiBJZiB3ZSBkaWRuJ3Qg bmVlZCB0aGUgbXRpbWUgaGVyZSwgd2UgY291bGQgdHJ5IHRvIG9idGFpbiB0aGUKKwkJCSAqIGZp bGUgc2l6ZSBmcm9tIHRoZSByZWNvbnN0cnVjdGlvbiBvciBmaWxlIGNvcHkgcHJvY2VzcyBhYm92 ZSwKKwkJCSAqIGFsdGhvdWdoIHRoYXQgaXMgYWN0dWFsbHkgbm90IGNvbnZlbmllbnQgaW4gYWxs IGNhc2VzLiBJZiB3ZQorCQkJICogd3JpdGUgdGhlIGZpbGUgb3Vyc2VsdmVzIHRoZW4gY2xlYXJs eSB3ZSBjYW4ga2VlcCBhIGNvdW50IG9mCisJCQkgKiBieXRlcywgYnV0IGlmIHdlIHVzZSBzb21l dGhpbmcgbGlrZSBDb3B5RmlsZSgpIHRoZW4gaXQncworCQkJICogdHJpY2tpZXIuIFNpbmNlIHdl IGhhdmUgdG8gc3RhdCgpIGFueXdheSB0byBnZXQgdGhlIG10aW1lLAorCQkJICogdGhlcmUncyBu byBwb2ludCBpbiB3b3JyeWluZyBhYm91dCBpdC4KKwkJCSAqLworCQkJaWYgKHN0YXQob2Z1bGxw YXRoLCAmc2IpIDwgMCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHN0YXQgZmlsZSBcIiVzXCI6 ICVtIiwgb2Z1bGxwYXRoKTsKKworCQkJLyogT0ssIG5vdyBkbyB0aGUgd29yay4gKi8KKwkJCWFk ZF9maWxlX3RvX21hbmlmZXN0KG13cml0ZXIsIG1hbmlmZXN0X3BhdGgsCisJCQkJCQkJCSBzYi5z dF9zaXplLCBzYi5zdF9tdGltZSwKKwkJCQkJCQkJIGNoZWNrc3VtX3R5cGUsIGNoZWNrc3VtX2xl bmd0aCwKKwkJCQkJCQkJIGNoZWNrc3VtX3BheWxvYWQpOworCQl9CisKKwkJLyogQXZvaWQgbGVh a2luZyBtZW1vcnkuICovCisJCWlmIChjaGVja3N1bV9wYXlsb2FkICE9IE5VTEwpCisJCQlwZnJl ZShjaGVja3N1bV9wYXlsb2FkKTsKKwl9CisKKwljbG9zZWRpcihkaXIpOworfQorCisvKgorICog UmVhZCB0aGUgdmVyc2lvbiBudW1iZXIgZnJvbSBQR19WRVJTSU9OIGFuZCBjb252ZXJ0IGl0IHRv IHRoZSB1c3VhbCBzZXJ2ZXIKKyAqIHZlcnNpb24gbnVtYmVyIGZvcm1hdC4gKGUuZy4gSWYgUEdf VkVSU0lPTiBjb250YWlucyAiMTRcbiIgdGhpcyBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gMTQw MDAwKQorICovCitzdGF0aWMgaW50CityZWFkX3BnX3ZlcnNpb25fZmlsZShjaGFyICpkaXJlY3Rv cnkpCit7CisJY2hhcgkJZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwlTdHJpbmdJbmZvRGF0YSBidWY7 CisJaW50CQkJZmQ7CisJaW50CQkJdmVyc2lvbjsKKwljaGFyCSAgICplcDsKKworCS8qIENvbnN0 cnVjdCBwYXRobmFtZS4gKi8KKwlzbnByaW50ZihmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvUEdf VkVSU0lPTiIsIGRpcmVjdG9yeSk7CisKKwkvKiBPcGVuIGZpbGUuICovCisJaWYgKChmZCA9IG9w ZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKSkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOworCisJLyogUmVhZCBpbnRvIG1lbW9yeS4g TGVuZ3RoIGxpbWl0IG9mIDEyOCBzaG91bGQgYmUgbW9yZSB0aGFuIGdlbmVyb3VzLiAqLworCWlu aXRTdHJpbmdJbmZvKCZidWYpOworCXNsdXJwX2ZpbGUoZmQsIGZpbGVuYW1lLCAmYnVmLCAxMjgp OworCisJLyogQ2xvc2UgdGhlIGZpbGUuICovCisJaWYgKGNsb3NlKGZkKSAhPSAwKQorCQlwZ19m YXRhbCgiY291bGQgbm90IGNsb3NlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CisKKwkvKiBDb252 ZXJ0IHRvIGludGVnZXIuICovCisJZXJybm8gPSAwOworCXZlcnNpb24gPSBzdHJ0b3VsKGJ1Zi5k YXRhLCAmZXAsIDEwKTsKKwlpZiAoZXJybm8gIT0gMCB8fCAqZXAgIT0gJ1xuJykKKwl7CisJCS8q CisJCSAqIEluY3JlbWVudGFsIGJhY2t1cCBpcyBub3QgcmVsZXZhbnQgdG8gdmVyeSBvbGQgc2Vy dmVyIHZlcnNpb25zIHRoYXQKKwkJICogdXNlZCBtdWx0aS1wYXJ0IHZlcnNpb24gbnVtYmVyIChl LmcuIDkuNiwgb3IgOC40KS4gU28gaWYgd2Ugc2VlCisJCSAqIHdoYXQgbG9va3MgbGlrZSB0aGUg YmVnaW5uaW5nIG9mIHN1Y2ggYSB2ZXJzaW9uIG51bWJlciwganVzdCBiYWlsCisJCSAqIG91dC4K KwkJICovCisJCWlmICh2ZXJzaW9uIDwgMTAgJiYgKmVwID09ICcuJykKKwkJCXBnX2ZhdGFsKCIl czogc2VydmVyIHZlcnNpb24gdG9vIG9sZFxuIiwgZmlsZW5hbWUpOworCQlwZ19mYXRhbCgiJXM6 IGNvdWxkIG5vdCBwYXJzZSB2ZXJzaW9uIG51bWJlclxuIiwgZmlsZW5hbWUpOworCX0KKworCS8q IERlYnVnZ2luZyBvdXRwdXQuICovCisJcGdfbG9nX2RlYnVnKCJyZWFkIHNlcnZlciB2ZXJzaW9u ICVkIGZyb20gXCIlc1wiIiwgdmVyc2lvbiwgZmlsZW5hbWUpOworCisJLyogUmVsZWFzZSBtZW1v cnkgYW5kIHJldHVybiByZXN1bHQuICovCisJcGZyZWUoYnVmLmRhdGEpOworCXJldHVybiB2ZXJz aW9uICogMTAwMDA7Cit9CisKKy8qCisgKiBBZGQgYSBkaXJlY3RvcnkgdG8gdGhlIGxpc3Qgb2Yg b3V0cHV0IGRpcmVjdG9yaWVzIHRvIGNsZWFuIHVwLgorICovCitzdGF0aWMgdm9pZAorcmVtZW1i ZXJfdG9fY2xlYW51cF9kaXJlY3RvcnkoY2hhciAqdGFyZ2V0X3BhdGgsIGJvb2wgcm10b3BkaXIp Cit7CisJY2JfY2xlYW51cF9kaXIgKmRpciA9IHBnX21hbGxvYyhzaXplb2YoY2JfY2xlYW51cF9k aXIpKTsKKworCWRpci0+dGFyZ2V0X3BhdGggPSB0YXJnZXRfcGF0aDsKKwlkaXItPnJtdG9wZGly ID0gcm10b3BkaXI7CisJZGlyLT5uZXh0ID0gY2xlYW51cF9kaXJfbGlzdDsKKwljbGVhbnVwX2Rp cl9saXN0ID0gZGlyOworfQorCisvKgorICogRW1wdHkgb3V0IHRoZSBsaXN0IG9mIGRpcmVjdG9y aWVzIHNjaGVkdWxlZCBmb3IgY2xlYW51cCBhIGV4aXQuCisgKgorICogV2Ugd2FudCB0byByZW1v dmUgdGhlIG91dHB1dCBkaXJlY3RvcmllcyBvbmx5IG9uIGEgZmFpbHVyZSwgc28gY2FsbCB0aGlz CisgKiBmdW5jdGlvbiB3aGVuIHdlIGtub3cgdGhhdCB0aGUgb3BlcmF0aW9uIGhhcyBzdWNjZWVk ZWQuCisgKgorICogU2luY2Ugd2Ugb25seSBleHBlY3QgdGhpcyB0byBiZSBjYWxsZWQgd2hlbiB3 ZSdyZSBhYm91dCB0byBleGl0LCB3ZSBjb3VsZAorICoganVzdCBzZXQgY2xlYW51cF9kaXJfbGlz dCB0byBOVUxMIGFuZCBiZSBkb25lIHdpdGggaXQsIGJ1dCB3ZSBmcmVlIHRoZQorICogbWVtb3J5 IHRvIGJlIHRpZHkuCisgKi8KK3N0YXRpYyB2b2lkCityZXNldF9kaXJlY3RvcnlfY2xlYW51cF9s aXN0KHZvaWQpCit7CisJd2hpbGUgKGNsZWFudXBfZGlyX2xpc3QgIT0gTlVMTCkKKwl7CisJCWNi X2NsZWFudXBfZGlyICpkaXIgPSBjbGVhbnVwX2Rpcl9saXN0OworCisJCWNsZWFudXBfZGlyX2xp c3QgPSBjbGVhbnVwX2Rpcl9saXN0LT5uZXh0OworCQlwZnJlZShkaXIpOworCX0KK30KKworLyoK KyAqIFNjYW4gdGhlIHBnX3RibHNwYyBkaXJlY3Rvcnkgb2YgdGhlIGZpbmFsIGlucHV0IGJhY2t1 cCB0byBnZXQgYSBjYW5vbmljYWwKKyAqIGxpc3Qgb2Ygd2hhdCB0YWJsZXNwYWNlcyBhcmUgcGFy dCBvZiB0aGUgYmFja3VwLgorICoKKyAqICdwYXRobmFtZScgc2hvdWxkIGJlIHRoZSBwYXRoIHRv IHRoZSB0b3BsZXZlbCBiYWNrdXAgZGlyZWN0b3J5IGZvciB0aGUKKyAqIGZpbmFsIGJhY2t1cCBp biB0aGUgYmFja3VwIGNoYWluLgorICovCitzdGF0aWMgY2JfdGFibGVzcGFjZSAqCitzY2FuX2Zv cl9leGlzdGluZ190YWJsZXNwYWNlcyhjaGFyICpwYXRobmFtZSwgY2Jfb3B0aW9ucyAqb3B0KQor eworCWNoYXIJCXBnX3RibHNwY1tNQVhQR1BBVEhdOworCURJUgkJICAgKmRpcjsKKwlzdHJ1Y3Qg ZGlyZW50ICpkZTsKKwljYl90YWJsZXNwYWNlICp0c2xpc3QgPSBOVUxMOworCisJc25wcmludGYo cGdfdGJsc3BjLCBNQVhQR1BBVEgsICIlcy9wZ190YmxzcGMiLCBwYXRobmFtZSk7CisJcGdfbG9n X2RlYnVnKCJzY2FubmluZyBcIiVzXCIiLCBwZ190YmxzcGMpOworCisJaWYgKChkaXIgPSBvcGVu ZGlyKHBnX3RibHNwYykpID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBkaXJl Y3RvcnkgXCIlc1wiOiAlbSIsIHBhdGhuYW1lKTsKKworCXdoaWxlIChlcnJubyA9IDAsIChkZSA9 IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwl7CisJCU9pZAkJCW9pZDsKKwkJY2hhcgkJdGJsc3Bj ZGlyW01BWFBHUEFUSF07CisJCWNoYXIJCWxpbmtfdGFyZ2V0W01BWFBHUEFUSF07CisJCWludAkJ CWxpbmtfbGVuZ3RoOworCQljYl90YWJsZXNwYWNlICp0czsKKwkJY2JfdGFibGVzcGFjZSAqb3Ro ZXJ0czsKKwkJUEdGaWxlVHlwZQl0eXBlOworCisJCS8qIFNpbGVudGx5IGlnbm9yZSAiLiIgYW5k ICIuLiIgZW50cmllcy4gKi8KKwkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpID09IDAgfHwg c3RyY21wKGRlLT5kX25hbWUsICIuLiIpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBDb25z dHJ1Y3QgZnVsbCBwYXRobmFtZS4gKi8KKwkJc25wcmludGYodGJsc3BjZGlyLCBNQVhQR1BBVEgs ICIlcy8lcyIsIHBnX3RibHNwYywgZGUtPmRfbmFtZSk7CisKKwkJLyogSWdub3JlIGFueSBmaWxl IG5hbWUgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHByb3BlciBPSUQuICovCisJCWlmICghcGFy c2Vfb2lkKGRlLT5kX25hbWUsICZvaWQpKQorCQl7CisJCQlwZ19sb2dfZGVidWcoInNraXBwaW5n IFwiJXNcIiBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyBub3QgYSBsZWdhbCB0YWJsZXNwYWNlIE9J RCIsCisJCQkJCQkgdGJsc3BjZGlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogT25seSBz eW1ib2xpYyBsaW5rcyBhbmQgZGlyZWN0b3JpZXMgYXJlIHRhYmxlc3BhY2VzLiAqLworCQl0eXBl ID0gZ2V0X2RpcmVudF90eXBlKHRibHNwY2RpciwgZGUsIGZhbHNlLCBQR19MT0dfRVJST1IpOwor CQlpZiAodHlwZSA9PSBQR0ZJTEVUWVBFX0VSUk9SKQorCQkJZXhpdCgxKTsKKwkJaWYgKHR5cGUg IT0gUEdGSUxFVFlQRV9MTksgJiYgdHlwZSAhPSBQR0ZJTEVUWVBFX0RJUikKKwkJeworCQkJcGdf bG9nX2RlYnVnKCJza2lwcGluZyBcIiVzXCIgYmVjYXVzZSBpdCBpcyBuZWl0aGVyIGEgc3ltYm9s aWMgbGluayBub3IgYSBkaXJlY3RvcnkiLAorCQkJCQkJIHRibHNwY2Rpcik7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIENyZWF0ZSBhIG5ldyB0YWJsZXNwYWNlIG9iamVjdC4gKi8KKwkJdHMg PSBwZ19tYWxsb2MwKHNpemVvZihjYl90YWJsZXNwYWNlKSk7CisJCXRzLT5vaWQgPSBvaWQ7CisK KwkJLyoKKwkJICogSWYgaXQncyBhIGxpbmssIGl0J3Mgbm90IGFuIGluLXBsYWNlIHRhYmxlc3Bh Y2UuIE90aGVyd2lzZSwgaXQgbXVzdAorCQkgKiBiZSBhIGRpcmVjdG9yeSwgYW5kIHRodXMgYW4g aW4tcGxhY2UgdGFibGVzcGFjZS4KKwkJICovCisJCWlmICh0eXBlID09IFBHRklMRVRZUEVfTE5L KQorCQl7CisJCQljYl90YWJsZXNwYWNlX21hcHBpbmcgKnRzbWFwOworCisJCQkvKiBSZWFkIHRo ZSBsaW5rIHRhcmdldC4gKi8KKwkJCWxpbmtfbGVuZ3RoID0gcmVhZGxpbmsodGJsc3BjZGlyLCBs aW5rX3RhcmdldCwgc2l6ZW9mKGxpbmtfdGFyZ2V0KSk7CisJCQlpZiAobGlua19sZW5ndGggPCAw KQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBzeW1ib2xpYyBsaW5rIFwiJXNcIjogJW0i LAorCQkJCQkJIHRibHNwY2Rpcik7CisJCQlpZiAobGlua19sZW5ndGggPj0gc2l6ZW9mKGxpbmtf dGFyZ2V0KSkKKwkJCQlwZ19mYXRhbCgic3ltYm9saWMgbGluayBcIiVzXCIgaXMgdG9vIGxvbmci LCB0YmxzcGNkaXIpOworCQkJbGlua190YXJnZXRbbGlua19sZW5ndGhdID0gJ1wwJzsKKwkJCWlm ICghaXNfYWJzb2x1dGVfcGF0aChsaW5rX3RhcmdldCkpCisJCQkJcGdfZmF0YWwoInN5bWJvbGlj IGxpbmsgXCIlc1wiIGlzIHJlbGF0aXZlIiwgdGJsc3BjZGlyKTsKKworCQkJLyogQ2FvbmljYWxp emUgdGhlIGxpbmsgdGFyZ2V0LiAqLworCQkJY2Fub25pY2FsaXplX3BhdGgobGlua190YXJnZXQp OworCisJCQkvKgorCQkJICogRmluZCB0aGUgY29ycmVzcG9uZGluZyB0YWJsZXNwYWNlIG1hcHBp bmcgYW5kIGNvcHkgdGhlIHJlbGV2YW50CisJCQkgKiBkZXRhaWxzIGludG8gdGhlIG5ldyB0YWJs ZXNwYWNlIGVudHJ5LgorCQkJICovCisJCQlmb3IgKHRzbWFwID0gb3B0LT50c21hcHBpbmdzOyB0 c21hcCAhPSBOVUxMOyB0c21hcCA9IHRzbWFwLT5uZXh0KQorCQkJeworCQkJCWlmIChzdHJjbXAo dHNtYXAtPm9sZF9kaXIsIGxpbmtfdGFyZ2V0KSA9PSAwKQorCQkJCXsKKwkJCQkJc3RybmNweSh0 cy0+b2xkX2RpciwgdHNtYXAtPm9sZF9kaXIsIE1BWFBHUEFUSCk7CisJCQkJCXN0cm5jcHkodHMt Pm5ld19kaXIsIHRzbWFwLT5uZXdfZGlyLCBNQVhQR1BBVEgpOworCQkJCQl0cy0+aW5fcGxhY2Ug PSBmYWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKiBFdmVyeSBub24taW4t cGxhY2UgdGFibGVzcGFjZSBtdXN0IGJlIG1hcHBlZC4gKi8KKwkJCWlmICh0c21hcCA9PSBOVUxM KQorCQkJCXBnX2ZhdGFsKCJ0YWJsZXNwYWNlIGF0IFwiJXNcIiBoYXMgbm8gdGFibGVzcGFjZSBt YXBwaW5nIiwKKwkJCQkJCSBsaW5rX3RhcmdldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogRm9yIGFuIGluLXBsYWNlIHRhYmxlc3BhY2UsIHRoZXJlJ3Mgbm8gc2VwYXJhdGUgZGly ZWN0b3J5LCBzbworCQkJICogd2UganVzdCByZWNvcmQgdGhlIHBhdGhzIHdpdGhpbiB0aGUgZGF0 YSBkaXJlY3Rvcmllcy4KKwkJCSAqLworCQkJc25wcmludGYodHMtPm9sZF9kaXIsIE1BWFBHUEFU SCwgIiVzLyVzIiwgcGdfdGJsc3BjLCBkZS0+ZF9uYW1lKTsKKwkJCXNucHJpbnRmKHRzLT5uZXdf ZGlyLCBNQVhQR1BBVEgsICIlcy9wZ190YmxwYy8lcyIsIG9wdC0+b3V0cHV0LAorCQkJCQkgZGUt PmRfbmFtZSk7CisJCQl0cy0+aW5fcGxhY2UgPSB0cnVlOworCQl9CisKKwkJLyogVGFibGVzcGFj ZXMgc2hvdWxkIG5vdCBzaGFyZSBhIGRpcmVjdG9yeS4gKi8KKwkJZm9yIChvdGhlcnRzID0gdHNs aXN0OyBvdGhlcnRzICE9IE5VTEw7IG90aGVydHMgPSBvdGhlcnRzLT5uZXh0KQorCQkJaWYgKHN0 cmNtcCh0cy0+bmV3X2Rpciwgb3RoZXJ0cy0+bmV3X2RpcikgPT0gMCkKKwkJCQlwZ19mYXRhbCgi dGFibGVzcGFjZXMgd2l0aCBPSURzICV1IGFuZCAldSBib3RoIHBvaW50IGF0IFwiJXNcIiIsCisJ CQkJCQkgb3RoZXJ0cy0+b2lkLCBvaWQsIHRzLT5uZXdfZGlyKTsKKworCQkvKiBBZGQgdGhpcyB0 YWJsZXNwYWNlIHRvIHRoZSBsaXN0LiAqLworCQl0cy0+bmV4dCA9IHRzbGlzdDsKKwkJdHNsaXN0 ID0gdHM7CisJfQorCisJcmV0dXJuIHRzbGlzdDsKK30KKworLyoKKyAqIFJlYWQgYSBmaWxlIGlu dG8gYSBTdHJpbmdJbmZvLgorICoKKyAqIGZkIGlzIHVzZWQgZm9yIHRoZSBhY3R1YWwgZmlsZSBJ L08sIGZpbGVuYW1lIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMuCisgKiBBIGZpbGUgbG9u Z2VyIHRoYW4gbWF4bGVuIGlzIGEgZmF0YWwgZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkCitzbHVy cF9maWxlKGludCBmZCwgY2hhciAqZmlsZW5hbWUsIFN0cmluZ0luZm8gYnVmLCBpbnQgbWF4bGVu KQoreworCXN0cnVjdCBzdGF0IHN0OworCXNzaXplX3QJCXJiOworCisJLyogQ2hlY2sgZmlsZSBz aXplLCBhbmQgY29tcGxhaW4gaWYgaXQncyB0b28gbGFyZ2UuICovCisJaWYgKGZzdGF0KGZkLCAm c3QpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc3RhdCBcIiVzXCI6ICVtIiwgZmlsZW5h bWUpOworCWlmIChzdC5zdF9zaXplID4gbWF4bGVuKQorCQlwZ19mYXRhbCgiZmlsZSBcIiVzXCIg aXMgdG9vIGxhcmdlIiwgZmlsZW5hbWUpOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdo IHNwYWNlLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1Ziwgc3Quc3Rfc2l6ZSk7CisKKwkvKiBS ZWFkIHRoZSBkYXRhLiAqLworCXJiID0gcmVhZChmZCwgJmJ1Zi0+ZGF0YVtidWYtPmxlbl0sIHN0 LnN0X3NpemUpOworCisJLyoKKwkgKiBXZSBkb24ndCBleHBlY3QgYW55IGNvbmN1cnJlbnQgY2hh bmdlcywgc28gd2Ugc2hvdWxkIHJlYWQgZXhhY3RseSB0aGUKKwkgKiBleHBlY3RlZCBudW1iZXIg b2YgYnl0ZXMuCisJICovCisJaWYgKHJiICE9IHN0LnN0X3NpemUpCisJeworCQlpZiAocmIgPCAw KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1l KTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiByZWFk IG9ubHkgJWQgb2YgJWQgYnl0ZXMiLAorCQkJCQkgZmlsZW5hbWUsIChpbnQpIHJiLCAoaW50KSBz dC5zdF9zaXplKTsKKwl9CisKKwkvKiBBZGp1c3QgYnVmZmVyIGxlbmd0aCBmb3IgbmV3IGRhdGEg YW5kIHJlc3RvcmUgdHJhaWxpbmctXDAgaW52YXJpYW50ICovCisJYnVmLT5sZW4gKz0gcmI7CisJ YnVmLT5kYXRhW2J1Zi0+bGVuXSA9ICdcMCc7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Nv bWJpbmViYWNrdXAvcmVjb25zdHJ1Y3QuYyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9yZWNv bnN0cnVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZkZWNkZDg5 MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcmVjb25zdHJ1 Y3QuYwpAQCAtMCwwICsxLDY4NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcmVjb25z dHJ1Y3QuYworICoJCVJlY29uc3RydWN0IGZ1bGwgZmlsZSBmcm9tIGluY3JlbWVudGFsIGZpbGUg YW5kIGJhY2t1cCBjaGFpbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMywgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcmVjb25zdHJ1Y3QuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPHVuaXN0 ZC5oPgorCisjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKKyNpbmNs dWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNp bmNsdWRlICJjb3B5X2ZpbGUuaCIKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1 ZGUgInJlY29uc3RydWN0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgorCisvKgorICog QW4gcmZpbGUgc3RvcmVzIHRoZSBkYXRhIHRoYXQgd2UgbmVlZCBpbiBvcmRlciB0byBiZSBhYmxl IHRvIHVzZSBzb21lIGZpbGUKKyAqIG9uIGRpc2sgZm9yIHJlY29uc3RydWN0aW9uLiBGb3IgYW55 IGdpdmVuIG91dHB1dCBmaWxlLCB3ZSBjcmVhdGUgb25lIHJmaWxlCisgKiBwZXIgYmFja3VwIHRo YXQgd2UgbmVlZCB0byBjb25zdWx0IHdoZW4gd2UgY29uc3RydWN0aW5nIHRoYXQgb3V0cHV0IGZp bGUuCisgKgorICogSWYgd2UgZmluZCBhIGZ1bGwgdmVyc2lvbiBvZiB0aGUgZmlsZSBpbiB0aGUg YmFja3VwIGNoYWluLCB0aGVuIG9ubHkKKyAqIGZpbGVuYW1lIGFuZCBmZCBhcmUgaW5pdGlhbGl6 ZWQ7IHRoZSByZW1haW5pbmcgZmllbGRzIGFyZSAwIG9yIE5VTEwuCisgKiBGb3IgYW4gaW5jcmVt ZW50YWwgZmlsZSwgaGVhZGVyX2xlbmd0aCwgbnVtX2Jsb2NrcywgcmVsYXRpdmVfYmxvY2tfbnVt YmVycywKKyAqIGFuZCB0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCBhcmUgYWxzbyBzZXQuCisgKgor ICogbnVtX2Jsb2Nrc19yZWFkIGFuZCBoaWdoZXN0X29mZnNldF9yZWFkIGFsd2F5cyBzdGFydCBv dXQgYXMgMC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmZpbGUKK3sKKwljaGFyCSAgICpmaWxlbmFt ZTsKKwlpbnQJCQlmZDsKKwlzaXplX3QJCWhlYWRlcl9sZW5ndGg7CisJdW5zaWduZWQJbnVtX2Js b2NrczsKKwlCbG9ja051bWJlciAqcmVsYXRpdmVfYmxvY2tfbnVtYmVyczsKKwl1bnNpZ25lZAl0 cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aDsKKwl1bnNpZ25lZAludW1fYmxvY2tzX3JlYWQ7CisJb2Zm X3QJCWhpZ2hlc3Rfb2Zmc2V0X3JlYWQ7Cit9IHJmaWxlOworCitzdGF0aWMgdm9pZCBkZWJ1Z19y ZWNvbnN0cnVjdGlvbihpbnQgbl9zb3VyY2UsCisJCQkJCQkJCSByZmlsZSAqKnNvdXJjZXMsCisJ CQkJCQkJCSBib29sIGRyeV9ydW4pOworc3RhdGljIHVuc2lnbmVkIGZpbmRfcmVjb25zdHJ1Y3Rl ZF9ibG9ja19sZW5ndGgocmZpbGUgKnMpOworc3RhdGljIHJmaWxlICptYWtlX2luY3JlbWVudGFs X3JmaWxlKGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyByZmlsZSAqbWFrZV9yZmlsZShjaGFyICpm aWxlbmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKK3N0YXRpYyB2b2lkIHdyaXRlX3JlY29uc3RydWN0 ZWRfZmlsZShjaGFyICppbnB1dF9maWxlbmFtZSwKKwkJCQkJCQkJCSBjaGFyICpvdXRwdXRfZmls ZW5hbWUsCisJCQkJCQkJCQkgdW5zaWduZWQgYmxvY2tfbGVuZ3RoLAorCQkJCQkJCQkJIHJmaWxl ICoqc291cmNlbWFwLAorCQkJCQkJCQkJIG9mZl90ICpvZmZzZXRtYXAsCisJCQkJCQkJCQkgcGdf Y2hlY2tzdW1fY29udGV4dCAqY2hlY2tzdW1fY3R4LAorCQkJCQkJCQkJIGJvb2wgZGVidWcsCisJ CQkJCQkJCQkgYm9vbCBkcnlfcnVuKTsKK3N0YXRpYyB2b2lkIHJlYWRfYnl0ZXMocmZpbGUgKnJm LCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCk7CisKKy8qCisgKiBSZWNvbnN0cnVjdCBh IGZ1bGwgZmlsZSBmcm9tIGFuIGluY3JlbWVudGFsIGZpbGUgYW5kIGEgY2hhaW4gb2YgcHJpb3IK KyAqIGJhY2t1cHMuCisgKgorICogaW5wdXRfZmlsZW5hbWUgc2hvdWxkIGJlIHRoZSBwYXRoIHRv IHRoZSBpbmNyZW1lbnRhbCBmaWxlLCBhbmQKKyAqIG91dHB1dF9maWxlbmFtZSBzaG91bGQgYmUg dGhlIHBhdGggd2hlcmUgdGhlIHJlY29uc3RydWN0ZWQgZmlsZSBpcyB0byBiZQorICogd3JpdHRl bi4KKyAqCisgKiByZWxhdGl2ZV9wYXRoIHNob3VsZCBiZSB0aGUgcmVsYXRpdmUgcGF0aCB0byB0 aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcworICogZmlsZS4gYmFyZV9maWxlX25hbWUgc2hv dWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwKKyAqIHdp dGhvdXQgIklOQ1JFTUVOVEFMLiIuCisgKgorICogbl9wcmlvcl9iYWNrdXBzIGlzIHRoZSBudW1i ZXIgb2YgcHJpb3IgYmFja3VwcywgYW5kIHByaW9yX2JhY2t1cF9kaXJzIGlzCisgKiBhbiBhcnJh eSBvZiBwYXRobmFtZXMgd2hlcmUgdGhvc2UgYmFja3VwcyBjYW4gYmUgZm91bmQuCisgKi8KK3Zv aWQKK3JlY29uc3RydWN0X2Zyb21faW5jcmVtZW50YWxfZmlsZShjaGFyICppbnB1dF9maWxlbmFt ZSwKKwkJCQkJCQkJICBjaGFyICpvdXRwdXRfZmlsZW5hbWUsCisJCQkJCQkJCSAgY2hhciAqcmVs YXRpdmVfcGF0aCwKKwkJCQkJCQkJICBjaGFyICpiYXJlX2ZpbGVfbmFtZSwKKwkJCQkJCQkJICBp bnQgbl9wcmlvcl9iYWNrdXBzLAorCQkJCQkJCQkgIGNoYXIgKipwcmlvcl9iYWNrdXBfZGlycywK KwkJCQkJCQkJICBtYW5pZmVzdF9kYXRhICoqbWFuaWZlc3RzLAorCQkJCQkJCQkgIGNoYXIgKm1h bmlmZXN0X3BhdGgsCisJCQkJCQkJCSAgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAor CQkJCQkJCQkgIGludCAqY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJCQkgIHVpbnQ4ICoqY2hlY2tz dW1fcGF5bG9hZCwKKwkJCQkJCQkJICBib29sIGRlYnVnLAorCQkJCQkJCQkgIGJvb2wgZHJ5X3J1 bikKK3sKKwlyZmlsZQkgICoqc291cmNlOworCXJmaWxlCSAgICpsYXRlc3Rfc291cmNlID0gTlVM TDsKKwlyZmlsZQkgICoqc291cmNlbWFwOworCW9mZl90CSAgICpvZmZzZXRtYXA7CisJdW5zaWdu ZWQJYmxvY2tfbGVuZ3RoOworCXVuc2lnbmVkCWk7CisJdW5zaWduZWQJc2lkeCA9IG5fcHJpb3Jf YmFja3VwczsKKwlib29sCQlmdWxsX2NvcHlfcG9zc2libGUgPSB0cnVlOworCWludAkJCWNvcHlf c291cmNlX2luZGV4ID0gLTE7CisJcmZpbGUJICAgKmNvcHlfc291cmNlID0gTlVMTDsKKwlwZ19j aGVja3N1bV9jb250ZXh0IGNoZWNrc3VtX2N0eDsKKworCS8qCisJICogRXZlcnkgYmxvY2sgbXVz dCBjb21lIGVpdGhlciBmcm9tIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZmlsZSBvcgorCSAq IGZyb20gb25lIG9mIHRoZSBwcmlvciBiYWNrdXBzLgorCSAqLworCXNvdXJjZSA9IHBnX21hbGxv YzAoc2l6ZW9mKHJmaWxlICopICogKDEgKyBuX3ByaW9yX2JhY2t1cHMpKTsKKworCS8qCisJICog VXNlIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsYXRlc3QgaW5jcmVtZW50YWwgZmlsZSB0byBm aWd1cmUgb3V0IGhvdworCSAqIGxvbmcgdGhlIHJlY29uc3RydWN0ZWQgZmlsZSBzaG91bGQgYmUu CisJICovCisJbGF0ZXN0X3NvdXJjZSA9IG1ha2VfaW5jcmVtZW50YWxfcmZpbGUoaW5wdXRfZmls ZW5hbWUpOworCXNvdXJjZVtuX3ByaW9yX2JhY2t1cHNdID0gbGF0ZXN0X3NvdXJjZTsKKwlibG9j a19sZW5ndGggPSBmaW5kX3JlY29uc3RydWN0ZWRfYmxvY2tfbGVuZ3RoKGxhdGVzdF9zb3VyY2Up OworCisJLyoKKwkgKiBGb3IgZWFjaCBibG9jayBpbiB0aGUgb3V0cHV0IGZpbGUsIHdlIG5lZWQg dG8ga25vdyBmcm9tIHdoaWNoIGZpbGUgd2UKKwkgKiBuZWVkIHRvIG9idGFpbiBpdCBhbmQgYXQg d2hhdCBvZmZzZXQgaW4gdGhhdCBmaWxlIGl0J3Mgc3RvcmVkLgorCSAqIHNvdXJjZW1hcCBnaXZl cyB1cyB0aGUgZmlyc3Qgb2YgdGhlc2UgdGhpbmdzLCBhbmQgb2Zmc2V0bWFwIHRoZSBsYXR0ZXIu CisJICovCisJc291cmNlbWFwID0gcGdfbWFsbG9jMChzaXplb2YocmZpbGUgKikgKiBibG9ja19s ZW5ndGgpOworCW9mZnNldG1hcCA9IHBnX21hbGxvYzAoc2l6ZW9mKG9mZl90KSAqIGJsb2NrX2xl bmd0aCk7CisKKwkvKgorCSAqIEV2ZXJ5IGJsb2NrIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgbmV3 ZXN0IGluY3JlbWVudGFsIGZpbGUgc2hvdWxkIGJlCisJICogc291cmNlZCBmcm9tIHRoYXQgZmls ZS4gSWYgaXQgcHJlY2VkZXMgdGhlIHRydW5jYXRpb25fYmxvY2tfbGVuZ3RoLAorCSAqIGl0J3Mg YSBibG9jayB0aGF0IHdlIHdvdWxkIG90aGVyd2lzZSBoYXZlIGhhZCB0byBmaW5kIGluIGFuIG9s ZGVyCisJICogYmFja3VwIGFuZCB0aHVzIHJlZHVjZXMgdGhlIG51bWJlciBvZiBibG9ja3MgcmVt YWluaW5nIHRvIGJlIGZvdW5kIGJ5CisJICogb25lOyBvdGhlcndpc2UsIGl0J3MgYW4gZXh0cmEg YmxvY2sgdGhhdCBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUKKwkgKiBvdXRwdXQgYnV0IHdv dWxkIG5vdCBoYXZlIG5lZWRlZCB0byBiZSBmb3VuZCBpbiBhbiBvbGRlciBiYWNrdXAgaWYgaXQK KwkgKiBoYWQgbm90IGJlZW4gcHJlc2VudC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGF0ZXN0 X3NvdXJjZS0+bnVtX2Jsb2NrczsgKytpKQorCXsKKwkJQmxvY2tOdW1iZXIgYiA9IGxhdGVzdF9z b3VyY2UtPnJlbGF0aXZlX2Jsb2NrX251bWJlcnNbaV07CisKKwkJQXNzZXJ0KGIgPCBibG9ja19s ZW5ndGgpOworCQlzb3VyY2VtYXBbYl0gPSBsYXRlc3Rfc291cmNlOworCQlvZmZzZXRtYXBbYl0g PSBsYXRlc3Rfc291cmNlLT5oZWFkZXJfbGVuZ3RoICsgKGkgKiBCTENLU1opOworCisJCS8qCisJ CSAqIEEgZnVsbCBjb3B5IG9mIGEgZmlsZSBmcm9tIGFuIGVhcmxpZXIgYmFja3VwIGlzIG9ubHkg cG9zc2libGUgaWYgbm8KKwkJICogYmxvY2tzIGFyZSBuZWVkZWQgZnJvbSBhbnkgbGF0ZXIgaW5j cmVtZW50YWwgZmlsZS4KKwkJICovCisJCWZ1bGxfY29weV9wb3NzaWJsZSA9IGZhbHNlOworCX0K KworCXdoaWxlICgxKQorCXsKKwkJY2hhcgkJc291cmNlX2ZpbGVuYW1lW01BWFBHUEFUSF07CisJ CXJmaWxlCSAgICpzOworCisJCS8qCisJCSAqIE1vdmUgdG8gdGhlIG5leHQgYmFja3VwIGluIHRo ZSBjaGFpbi4gSWYgdGhlcmUgYXJlIG5vIG1vcmUsIHRoZW4KKwkJICogd2UncmUgZG9uZS4KKwkJ ICovCisJCWlmIChzaWR4ID09IDApCisJCQlicmVhazsKKwkJLS1zaWR4OworCisJCS8qCisJCSAq IExvb2sgZm9yIHRoZSBmdWxsIGZpbGUgaW4gdGhlIHByZXZpb3VzIGJhY2t1cC4gSWYgbm90IGZv dW5kLCB0aGVuCisJCSAqIGxvb2sgZm9yIGFuIGluY3JlbWVudGFsIGZpbGUgaW5zdGVhZC4KKwkJ ICovCisJCXNucHJpbnRmKHNvdXJjZV9maWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvJXMvJXMiLAor CQkJCSBwcmlvcl9iYWNrdXBfZGlyc1tzaWR4XSwgcmVsYXRpdmVfcGF0aCwgYmFyZV9maWxlX25h bWUpOworCQlpZiAoKHMgPSBtYWtlX3JmaWxlKHNvdXJjZV9maWxlbmFtZSwgdHJ1ZSkpID09IE5V TEwpCisJCXsKKwkJCXNucHJpbnRmKHNvdXJjZV9maWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvJXMv SU5DUkVNRU5UQUwuJXMiLAorCQkJCQkgcHJpb3JfYmFja3VwX2RpcnNbc2lkeF0sIHJlbGF0aXZl X3BhdGgsIGJhcmVfZmlsZV9uYW1lKTsKKwkJCXMgPSBtYWtlX2luY3JlbWVudGFsX3JmaWxlKHNv dXJjZV9maWxlbmFtZSk7CisJCX0KKwkJc291cmNlW3NpZHhdID0gczsKKworCQkvKgorCQkgKiBJ ZiBzLT5oZWFkZXJfbGVuZ3RoID09IDAsIHRoZW4gdGhpcyBpcyBhIGZ1bGwgZmlsZTsgb3RoZXJ3 aXNlLCBpdCdzCisJCSAqIGFuIGluY3JlbWVudGFsIGZpbGUuCisJCSAqLworCQlpZiAocy0+aGVh ZGVyX2xlbmd0aCA9PSAwKQorCQl7CisJCQlzdHJ1Y3Qgc3RhdCBzYjsKKwkJCUJsb2NrTnVtYmVy IGI7CisJCQlCbG9ja051bWJlciBibG9ja2xlbmd0aDsKKworCQkJLyogV2UgbmVlZCB0byBrbm93 IHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuICovCisJCQlpZiAoZnN0YXQocy0+ZmQsICZzYikgPCAw KQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc3RhdCBcIiVzXCI6ICVtIiwgcy0+ZmlsZW5hbWUp OworCisJCQkvKgorCQkJICogU2luY2Ugd2UgZm91bmQgYSBmdWxsIGZpbGUsIHNvdXJjZSBhbGwg YmxvY2tzIGZyb20gaXQgdGhhdAorCQkJICogZXhpc3QgaW4gdGhlIGZpbGUuCisJCQkgKgorCQkJ ICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBibG9ja3MgdGhhdCBkb24ndCBleGlzdCBlaXRoZXIg aW4gdGhpcworCQkJICogZmlsZSBvciBpbiBhbnkgaW5jcmVtZW50YWwgZmlsZSBidXQgdGhhdCBw cmVjZWRlCisJCQkgKiB0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aC4gVGhlc2UgYXJlLCBwcmVzdW1h Ymx5LCB6ZXJvLWZpbGxlZAorCQkJICogYmxvY2tzIHRoYXQgcmVzdWx0IGZyb20gdGhlIHNlcnZl ciBleHRlbmRpbmcgdGhlIGZpbGUgYnV0CisJCQkgKiB0YWtpbmcgbm8gYWN0aW9uIG9uIHRob3Nl IGJsb2NrcyB0aGF0IGdlbmVyYXRlZCBhbnkgV0FMLgorCQkJICoKKwkJCSAqIFNhZGx5LCB3ZSBo YXZlIG5vIHdheSBvZiB2YWxpZGF0aW5nIHRoYXQgdGhpcyBpcyByZWFsbHkgd2hhdAorCQkJICog aGFwcGVuZWQsIGFuZCBuZWl0aGVyIGRvZXMgdGhlIHNlcnZlci4gRnJvbSBpdCdzIHBlcnNwZWN0 aXZlLAorCQkJICogYW4gdW5tb2RpZmllZCBibG9jayB0aGF0IGNvbnRhaW5zIGRhdGEgbG9va3Mg ZXhhY3RseSB0aGUgc2FtZQorCQkJICogYXMgYSB6ZXJvLWZpbGxlZCBibG9jayB0aGF0IG5ldmVy IGhhZCBhbnkgZGF0YTogZWl0aGVyIHdheSwKKwkJCSAqIGl0J3Mgbm90IG1lbnRpb25lZCBpbiBh bnkgV0FMIHN1bW1hcnkgYW5kIHRoZSBzZXJ2ZXIgaGFzIG5vCisJCQkgKiByZWFzb24gdG8gcmVh ZCBpdC4gRnJvbSBvdXIgcGVyc3BlY3RpdmUsIGFsbCB3ZSBrbm93IGlzIHRoYXQKKwkJCSAqIG5v Ym9keSBoYWQgYSByZWFzb24gdG8gYmFjayB1cCB0aGUgYmxvY2suIFRoYXQgY2VydGFpbmx5IG1l YW5zCisJCQkgKiB0aGF0IHRoZSBibG9jayBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgb2YgdGhl IGZ1bGwgYmFja3VwLCBidXQKKwkJCSAqIHRoZSBzdXBwb3NpdGlvbiB0aGF0IGl0IHdhcyBhbGwg emVyb2VzIGF0IHRoZSB0aW1lIG9mIGV2ZXJ5CisJCQkgKiBsYXRlciBiYWNrdXAgaXMgb25lIHRo YXQgd2UgY2FuJ3QgdmFsaWRhdGUuCisJCQkgKi8KKwkJCWJsb2NrbGVuZ3RoID0gc2Iuc3Rfc2l6 ZSAvIEJMQ0tTWjsKKwkJCWZvciAoYiA9IDA7IGIgPCBsYXRlc3Rfc291cmNlLT50cnVuY2F0aW9u X2Jsb2NrX2xlbmd0aDsgKytiKQorCQkJeworCQkJCWlmIChzb3VyY2VtYXBbYl0gPT0gTlVMTCAm JiBiIDwgYmxvY2tsZW5ndGgpCisJCQkJeworCQkJCQlzb3VyY2VtYXBbYl0gPSBzOworCQkJCQlv ZmZzZXRtYXBbYl0gPSBiICogQkxDS1NaOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIElm IGEgZnVsbCBjb3B5IGxvb2tzIHBvc3NpYmxlLCBjaGVjayB3aGV0aGVyIHRoZSByZXN1bHRpbmcg ZmlsZQorCQkJICogc2hvdWxkIGJlIGV4YWN0bHkgYXMgbG9uZyBhcyB0aGUgc291cmNlIGZpbGUg aXMuIElmIHNvLCBhIGZ1bGwKKwkJCSAqIGNvcHkgaXMgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIG5v dC4KKwkJCSAqLworCQkJaWYgKGZ1bGxfY29weV9wb3NzaWJsZSkKKwkJCXsKKwkJCQl1aW50NjQJ CWV4cGVjdGVkX2xlbmd0aDsKKworCQkJCWV4cGVjdGVkX2xlbmd0aCA9CisJCQkJCSh1aW50NjQp IGxhdGVzdF9zb3VyY2UtPnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoOworCQkJCWV4cGVjdGVkX2xl bmd0aCAqPSBCTENLU1o7CisJCQkJaWYgKGV4cGVjdGVkX2xlbmd0aCA9PSBzYi5zdF9zaXplKQor CQkJCXsKKwkJCQkJY29weV9zb3VyY2UgPSBzOworCQkJCQljb3B5X3NvdXJjZV9pbmRleCA9IHNp ZHg7CisJCQkJfQorCQkJfQorCisJCQkvKiBXZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueSBm dXJ0aGVyIHNvdXJjZXMuICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFNpbmNlIHdl IGZvdW5kIGFub3RoZXIgaW5jcmVtZW50YWwgZmlsZSwgc291cmNlIGFsbCBibG9ja3MgZnJvbSBp dAorCQkgKiB0aGF0IHdlIG5lZWQgYnV0IGRvbid0IHlldCBoYXZlLgorCQkgKi8KKwkJZm9yIChp ID0gMDsgaSA8IHMtPm51bV9ibG9ja3M7ICsraSkKKwkJeworCQkJQmxvY2tOdW1iZXIgYiA9IHMt PnJlbGF0aXZlX2Jsb2NrX251bWJlcnNbaV07CisKKwkJCWlmIChiIDwgbGF0ZXN0X3NvdXJjZS0+ dHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggJiYKKwkJCQlzb3VyY2VtYXBbYl0gPT0gTlVMTCkKKwkJ CXsKKwkJCQlzb3VyY2VtYXBbYl0gPSBzOworCQkJCW9mZnNldG1hcFtiXSA9IHMtPmhlYWRlcl9s ZW5ndGggKyAoaSAqIEJMQ0tTWik7CisKKwkJCQkvKgorCQkJCSAqIEEgZnVsbCBjb3B5IG9mIGEg ZmlsZSBmcm9tIGFuIGVhcmxpZXIgYmFja3VwIGlzIG9ubHkKKwkJCQkgKiBwb3NzaWJsZSBpZiBu byBibG9ja3MgYXJlIG5lZWRlZCBmcm9tIGFueSBsYXRlciBpbmNyZW1lbnRhbAorCQkJCSAqIGZp bGUuCisJCQkJICovCisJCQkJZnVsbF9jb3B5X3Bvc3NpYmxlID0gZmFsc2U7CisJCQl9CisJCX0K Kwl9CisKKwkvKgorCSAqIElmIGEgY2hlY2tzdW0gb2YgdGhlIHJlcXVpcmVkIHR5cGUgYWxyZWFk eSBleGlzdHMgaW4gdGhlCisJICogYmFja3VwX21hbmlmZXN0IGZvciB0aGUgcmVsZXZhbnQgaW5w dXQgZGlyZWN0b3J5LCB3ZSBjYW4gc2F2ZSBzb21lIHdvcmsKKwkgKiBieSByZXVzaW5nIHRoYXQg Y2hlY2tzdW0gaW5zdGVhZCBvZiBjb21wdXRpbmcgYSBuZXcgb25lLgorCSAqLworCWlmIChjb3B5 X3NvdXJjZV9pbmRleCA+PSAwICYmIG1hbmlmZXN0c1tjb3B5X3NvdXJjZV9pbmRleF0gIT0gTlVM TCAmJgorCQljaGVja3N1bV90eXBlICE9IENIRUNLU1VNX1RZUEVfTk9ORSkKKwl7CisJCW1hbmlm ZXN0X2ZpbGUgKm1maWxlOworCisJCW1maWxlID0gbWFuaWZlc3RfZmlsZXNfbG9va3VwKG1hbmlm ZXN0c1tjb3B5X3NvdXJjZV9pbmRleF0tPmZpbGVzLAorCQkJCQkJCQkJICBtYW5pZmVzdF9wYXRo KTsKKwkJaWYgKG1maWxlID09IE5VTEwpCisJCXsKKwkJCWNoYXIJICAgKnBhdGggPSBwc3ByaW50 ZigiJXMvYmFja3VwX21hbmlmZXN0IiwKKwkJCQkJCQkJCQlwcmlvcl9iYWNrdXBfZGlyc1tjb3B5 X3NvdXJjZV9pbmRleF0pOworCisJCQkvKgorCQkJICogVGhlIGRpcmVjdG9yeSBpcyBvdXQgb2Yg c3luYyB3aXRoIHRoZSBiYWNrdXBfbWFuaWZlc3QsIHNvIGVtaXQKKwkJCSAqIGEgd2FybmluZy4K KwkJCSAqLworCQkJLyotIHRyYW5zbGF0b3I6IHRoZSBmaXJzdCAlcyBpcyBhIGJhY2t1cCBtYW5p ZmVzdCBmaWxlLCB0aGUgc2Vjb25kIGlzIGEgZmlsZSBhYnNlbnQgdGhlcmVpbiAqLworCQkJcGdf bG9nX3dhcm5pbmcoIlwiJXNcIiBjb250YWlucyBubyBlbnRyeSBmb3IgXCIlc1wiIiwKKwkJCQkJ CSAgIHBhdGgsCisJCQkJCQkgICBtYW5pZmVzdF9wYXRoKTsKKwkJCXBmcmVlKHBhdGgpOworCQl9 CisJCWVsc2UgaWYgKG1maWxlLT5jaGVja3N1bV90eXBlID09IGNoZWNrc3VtX3R5cGUpCisJCXsK KwkJCSpjaGVja3N1bV9sZW5ndGggPSBtZmlsZS0+Y2hlY2tzdW1fbGVuZ3RoOworCQkJKmNoZWNr c3VtX3BheWxvYWQgPSBwZ19tYWxsb2MoKmNoZWNrc3VtX2xlbmd0aCk7CisJCQltZW1jcHkoKmNo ZWNrc3VtX3BheWxvYWQsIG1maWxlLT5jaGVja3N1bV9wYXlsb2FkLAorCQkJCSAgICpjaGVja3N1 bV9sZW5ndGgpOworCQkJY2hlY2tzdW1fdHlwZSA9IENIRUNLU1VNX1RZUEVfTk9ORTsKKwkJfQor CX0KKworCS8qIFByZXBhcmUgZm9yIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBpZiByZXF1aXJlZC4g Ki8KKwlwZ19jaGVja3N1bV9pbml0KCZjaGVja3N1bV9jdHgsIGNoZWNrc3VtX3R5cGUpOworCisJ LyoKKwkgKiBJZiB0aGUgZnVsbCBmaWxlIGNhbiBiZSBjcmVhdGVkIGJ5IGNvcHlpbmcgYSBmaWxl IGZyb20gYW4gb2xkZXIgYmFja3VwCisJICogaW4gdGhlIGNoYWluIHdpdGhvdXQgbmVlZGluZyB0 byBvdmVyd3JpdGUgYW55IGJsb2NrcyBvciB0cnVuY2F0ZSB0aGUKKwkgKiByZXN1bHQsIHRoZW4g Zm9yZ2V0IGFib3V0IHBlcmZvcm1pbmcgcmVjb25zdHJ1Y3Rpb24gYW5kIGp1c3QgY29weSB0aGF0 CisJICogZmlsZSBpbiBpdHMgZW50aXJldHkuCisJICoKKwkgKiBPdGhlcndpc2UsIHJlY29uc3Ry dWN0LgorCSAqLworCWlmIChjb3B5X3NvdXJjZSAhPSBOVUxMKQorCQljb3B5X2ZpbGUoY29weV9z b3VyY2UtPmZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUsCisJCQkJICAmY2hlY2tzdW1fY3R4LCBk cnlfcnVuKTsKKwllbHNlCisJeworCQl3cml0ZV9yZWNvbnN0cnVjdGVkX2ZpbGUoaW5wdXRfZmls ZW5hbWUsIG91dHB1dF9maWxlbmFtZSwKKwkJCQkJCQkJIGJsb2NrX2xlbmd0aCwgc291cmNlbWFw LCBvZmZzZXRtYXAsCisJCQkJCQkJCSAmY2hlY2tzdW1fY3R4LCBkZWJ1ZywgZHJ5X3J1bik7CisJ CWRlYnVnX3JlY29uc3RydWN0aW9uKG5fcHJpb3JfYmFja3VwcyArIDEsIHNvdXJjZSwgZHJ5X3J1 bik7CisJfQorCisJLyogU2F2ZSByZXN1bHRzIG9mIGNoZWNrc3VtIGNhbGN1bGF0aW9uLiAqLwor CWlmIChjaGVja3N1bV90eXBlICE9IENIRUNLU1VNX1RZUEVfTk9ORSkKKwl7CisJCSpjaGVja3N1 bV9wYXlsb2FkID0gcGdfbWFsbG9jKFBHX0NIRUNLU1VNX01BWF9MRU5HVEgpOworCQkqY2hlY2tz dW1fbGVuZ3RoID0gcGdfY2hlY2tzdW1fZmluYWwoJmNoZWNrc3VtX2N0eCwKKwkJCQkJCQkJCQkJ ICpjaGVja3N1bV9wYXlsb2FkKTsKKwl9CisKKwkvKgorCSAqIENsb3NlIGZpbGVzIGFuZCByZWxl YXNlIG1lbW9yeS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG5fcHJpb3JfYmFja3VwczsgKytp KQorCXsKKwkJcmZpbGUJICAgKnMgPSBzb3VyY2VbaV07CisKKwkJaWYgKHMgPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCQlpZiAoY2xvc2Uocy0+ZmQpICE9IDApCisJCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIFwiJXNcIjogJW0iLCBzLT5maWxlbmFtZSk7CisJCWlmIChzLT5yZWxhdGl2ZV9i bG9ja19udW1iZXJzICE9IE5VTEwpCisJCQlwZnJlZShzLT5yZWxhdGl2ZV9ibG9ja19udW1iZXJz KTsKKwkJcGdfZnJlZShzLT5maWxlbmFtZSk7CisJfQorCXBmcmVlKHNvdXJjZW1hcCk7CisJcGZy ZWUob2Zmc2V0bWFwKTsKKwlwZnJlZShzb3VyY2UpOworfQorCisvKgorICogUGVyZm9ybSBwb3N0 LXJlY29uc3RydWN0aW9uIGxvZ2dpbmcgYW5kIHNhbml0eSBjaGVja3MuCisgKi8KK3N0YXRpYyB2 b2lkCitkZWJ1Z19yZWNvbnN0cnVjdGlvbihpbnQgbl9zb3VyY2UsIHJmaWxlICoqc291cmNlcywg Ym9vbCBkcnlfcnVuKQoreworCXVuc2lnbmVkCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9zb3Vy Y2U7ICsraSkKKwl7CisJCXJmaWxlCSAgICpzID0gc291cmNlc1tpXTsKKworCQkvKiBJZ25vcmUg c291cmNlIGlmIG5vdCB1c2VkLiAqLworCQlpZiAocyA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJLyogSWYgbm8gZGF0YSBpcyBuZWVkZWQgZnJvbSB0aGlzIGZpbGUsIHdlIGNhbiBpZ25vcmUg aXQuICovCisJCWlmIChzLT5udW1fYmxvY2tzX3JlYWQgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJ CS8qIERlYnVnIGxvZ2dpbmcuICovCisJCWlmIChkcnlfcnVuKQorCQkJcGdfbG9nX2RlYnVnKCJ3 b3VsZCBoYXZlIHJlYWQgJXUgYmxvY2tzIGZyb20gXCIlc1wiIiwKKwkJCQkJCSBzLT5udW1fYmxv Y2tzX3JlYWQsIHMtPmZpbGVuYW1lKTsKKwkJZWxzZQorCQkJcGdfbG9nX2RlYnVnKCJyZWFkICV1 IGJsb2NrcyBmcm9tIFwiJXNcIiIsCisJCQkJCQkgcy0+bnVtX2Jsb2Nrc19yZWFkLCBzLT5maWxl bmFtZSk7CisKKwkJLyoKKwkJICogSW4gZHJ5LXJ1biBtb2RlLCB3ZSBkb24ndCBhY3R1YWxseSB0 cnkgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGZpbGUsCisJCSAqIGJ1dCB3ZSBkbyB0cnkgdG8gdmVy aWZ5IHRoYXQgdGhlIGZpbGUgaXMgbG9uZyBlbm91Z2ggdGhhdCB3ZSBjb3VsZAorCQkgKiBoYXZl IHJlYWQgdGhlIGRhdGEgaWYgd2UnZCB0cmllZC4KKwkJICoKKwkJICogSWYgdGhpcyBmYWlscywg dGhlbiBpdCBtZWFucyB0aGF0IGEgbm9uLWRyeS1ydW4gYXR0ZW1wdCB3b3VsZCBmYWlsLAorCQkg KiBjb21wbGFpbmluZyBvZiBub3QgYmVpbmcgYWJsZSB0byByZWFkIHRoZSByZXF1aXJlZCBieXRl cyBmcm9tIHRoZQorCQkgKiBmaWxlLgorCQkgKi8KKwkJaWYgKGRyeV9ydW4pCisJCXsKKwkJCXN0 cnVjdCBzdGF0IHNiOworCisJCQlpZiAoZnN0YXQocy0+ZmQsICZzYikgPCAwKQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgc3RhdCBcIiVzXCI6ICVtIiwgcy0+ZmlsZW5hbWUpOworCQkJaWYgKHNi LnN0X3NpemUgPCBzLT5oaWdoZXN0X29mZnNldF9yZWFkKQorCQkJCXBnX2ZhdGFsKCJmaWxlIFwi JXNcIiBpcyB0b28gc2hvcnQ6IGV4cGVjdGVkICVsbHUsIGZvdW5kICVsbHUiLAorCQkJCQkJIHMt PmZpbGVuYW1lLAorCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHMtPmhpZ2hlc3Rfb2Zmc2V0 X3JlYWQsCisJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2Iuc3Rfc2l6ZSk7CisJCX0KKwl9 Cit9CisKKy8qCisgKiBXaGVuIHdlIHBlcmZvcm0gcmVjb25zdHJ1Y3Rpb24gdXNpbmcgYW4gaW5j cmVtZW50YWwgZmlsZSwgdGhlIG91dHB1dCBmaWxlCisgKiBzaG91bGQgYmUgYXQgbGVhc3QgYXMg bG9uZyBhcyB0aGUgdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGguIEFueSBibG9ja3MKKyAqIHByZXNl bnQgaW4gdGhlIGluY3JlbWVudGFsIGZpbGUgaW5jcmVhc2UgdGhlIG91dHB1dCBsZW5ndGggYXMg ZmFyIGFzIGlzCisgKiBuZWNlc3NhcnkgdG8gaW5jbHVkZSB0aG9zZSBibG9ja3MuCisgKi8KK3N0 YXRpYyB1bnNpZ25lZAorZmluZF9yZWNvbnN0cnVjdGVkX2Jsb2NrX2xlbmd0aChyZmlsZSAqcykK K3sKKwl1bnNpZ25lZAlibG9ja19sZW5ndGggPSBzLT50cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aDsK Kwl1bnNpZ25lZAlpOworCisJZm9yIChpID0gMDsgaSA8IHMtPm51bV9ibG9ja3M7ICsraSkKKwkJ aWYgKHMtPnJlbGF0aXZlX2Jsb2NrX251bWJlcnNbaV0gPj0gYmxvY2tfbGVuZ3RoKQorCQkJYmxv Y2tfbGVuZ3RoID0gcy0+cmVsYXRpdmVfYmxvY2tfbnVtYmVyc1tpXSArIDE7CisKKwlyZXR1cm4g YmxvY2tfbGVuZ3RoOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhbiBpbmNyZW1lbnRhbCByZmls ZSwgcmVhZGluZyB0aGUgaGVhZGVyIHNvIHRoYXQgd2Uga25vdyB3aGljaAorICogYmxvY2tzIGl0 IGNvbnRhaW5zLgorICovCitzdGF0aWMgcmZpbGUgKgorbWFrZV9pbmNyZW1lbnRhbF9yZmlsZShj aGFyICpmaWxlbmFtZSkKK3sKKwlyZmlsZQkgICAqcmY7CisJdW5zaWduZWQJbWFnaWM7CisKKwly ZiA9IG1ha2VfcmZpbGUoZmlsZW5hbWUsIGZhbHNlKTsKKworCS8qIFJlYWQgYW5kIHZhbGlkYXRl IG1hZ2ljIG51bWJlci4gKi8KKwlyZWFkX2J5dGVzKHJmLCAmbWFnaWMsIHNpemVvZihtYWdpYykp OworCWlmIChtYWdpYyAhPSBJTkNSRU1FTlRBTF9NQUdJQykKKwkJcGdfZmF0YWwoImZpbGUgXCIl c1wiIGhhcyBiYWQgaW5jcmVtZW50YWwgbWFnaWMgbnVtYmVyICgweCV4IG5vdCAweCV4KSIsCisJ CQkJIGZpbGVuYW1lLCBtYWdpYywgSU5DUkVNRU5UQUxfTUFHSUMpOworCisJLyogUmVhZCBibG9j ayBjb3VudC4gKi8KKwlyZWFkX2J5dGVzKHJmLCAmcmYtPm51bV9ibG9ja3MsIHNpemVvZihyZi0+ bnVtX2Jsb2NrcykpOworCWlmIChyZi0+bnVtX2Jsb2NrcyA+IFJFTFNFR19TSVpFKQorCQlwZ19m YXRhbCgiZmlsZSBcIiVzXCIgaGFzIGJsb2NrIGNvdW50ICV1IGluIGV4Y2VzcyBvZiBzZWdtZW50 IHNpemUgJXUiLAorCQkJCSBmaWxlbmFtZSwgcmYtPm51bV9ibG9ja3MsIFJFTFNFR19TSVpFKTsK KworCS8qIFJlYWQgdHJ1bmNhdGlvbiBibG9jayBsZW5ndGguICovCisJcmVhZF9ieXRlcyhyZiwg JnJmLT50cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCwKKwkJCSAgIHNpemVvZihyZi0+dHJ1bmNhdGlv bl9ibG9ja19sZW5ndGgpKTsKKwlpZiAocmYtPnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoID4gUkVM U0VHX1NJWkUpCisJCXBnX2ZhdGFsKCJmaWxlIFwiJXNcIiBoYXMgdHJ1bmNhdGlvbiBibG9jayBs ZW5ndGggJXUgaW4gZXhjZXNzIG9mIHNlZ21lbnQgc2l6ZSAldSIsCisJCQkJIGZpbGVuYW1lLCBy Zi0+dHJ1bmNhdGlvbl9ibG9ja19sZW5ndGgsIFJFTFNFR19TSVpFKTsKKworCS8qIFJlYWQgYmxv Y2sgbnVtYmVycyBpZiB0aGVyZSBhcmUgYW55LiAqLworCWlmIChyZi0+bnVtX2Jsb2NrcyA+IDAp CisJeworCQlyZi0+cmVsYXRpdmVfYmxvY2tfbnVtYmVycyA9CisJCQlwZ19tYWxsb2MwKHNpemVv ZihCbG9ja051bWJlcikgKiByZi0+bnVtX2Jsb2Nrcyk7CisJCXJlYWRfYnl0ZXMocmYsIHJmLT5y ZWxhdGl2ZV9ibG9ja19udW1iZXJzLAorCQkJCSAgIHNpemVvZihCbG9ja051bWJlcikgKiByZi0+ bnVtX2Jsb2Nrcyk7CisJfQorCisJLyogUmVtZW1iZXIgbGVuZ3RoIG9mIGhlYWRlci4gKi8KKwly Zi0+aGVhZGVyX2xlbmd0aCA9IHNpemVvZihtYWdpYykgKyBzaXplb2YocmYtPm51bV9ibG9ja3Mp ICsKKwkJc2l6ZW9mKHJmLT50cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCkgKworCQlzaXplb2YoQmxv Y2tOdW1iZXIpICogcmYtPm51bV9ibG9ja3M7CisKKwlyZXR1cm4gcmY7Cit9CisKKy8qCisgKiBB bGxvY2F0ZSBhbmQgcGVyZm9ybSBiYXNpYyBpbml0aWFsaXphdGlvbiBvZiBhbiByZmlsZS4KKyAq Lworc3RhdGljIHJmaWxlICoKK21ha2VfcmZpbGUoY2hhciAqZmlsZW5hbWUsIGJvb2wgbWlzc2lu Z19vaykKK3sKKwlyZmlsZQkgICAqcmY7CisKKwlyZiA9IHBnX21hbGxvYzAoc2l6ZW9mKHJmaWxl KSk7CisJcmYtPmZpbGVuYW1lID0gcHN0cmR1cChmaWxlbmFtZSk7CisJaWYgKChyZi0+ZmQgPSBv cGVuKGZpbGVuYW1lLCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkKKwl7CisJCWlmICht aXNzaW5nX29rICYmIGVycm5vID09IEVOT0VOVCkKKwkJeworCQkJcGdfZnJlZShyZik7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6 ICVtIiwgZmlsZW5hbWUpOworCX0KKworCXJldHVybiByZjsKK30KKworLyoKKyAqIFJlYWQgdGhl IGluZGljYXRlZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSBhbiByZmlsZSBpbnRvIHRoZSBidWZmZXIu CisgKi8KK3N0YXRpYyB2b2lkCityZWFkX2J5dGVzKHJmaWxlICpyZiwgdm9pZCAqYnVmZmVyLCB1 bnNpZ25lZCBsZW5ndGgpCit7CisJdW5zaWduZWQJcmIgPSByZWFkKHJmLT5mZCwgYnVmZmVyLCBs ZW5ndGgpOworCisJaWYgKHJiICE9IGxlbmd0aCkKKwl7CisJCWlmIChyYiA8IDApCisJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgcmYtPmZpbGVuYW1lKTsKKwkJ ZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiByZWFkIG9ubHkg JWQgb2YgJWQgYnl0ZXMiLAorCQkJCQkgcmYtPmZpbGVuYW1lLCAoaW50KSByYiwgbGVuZ3RoKTsK Kwl9Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgYSByZWNvbnN0cnVjdGVkIGZpbGUuCisgKi8KK3N0 YXRpYyB2b2lkCit3cml0ZV9yZWNvbnN0cnVjdGVkX2ZpbGUoY2hhciAqaW5wdXRfZmlsZW5hbWUs CisJCQkJCQkgY2hhciAqb3V0cHV0X2ZpbGVuYW1lLAorCQkJCQkJIHVuc2lnbmVkIGJsb2NrX2xl bmd0aCwKKwkJCQkJCSByZmlsZSAqKnNvdXJjZW1hcCwKKwkJCQkJCSBvZmZfdCAqb2Zmc2V0bWFw LAorCQkJCQkJIHBnX2NoZWNrc3VtX2NvbnRleHQgKmNoZWNrc3VtX2N0eCwKKwkJCQkJCSBib29s IGRlYnVnLAorCQkJCQkJIGJvb2wgZHJ5X3J1bikKK3sKKwlpbnQJCQl3ZmQgPSAtMTsKKwl1bnNp Z25lZAlpOworCXVuc2lnbmVkCXplcm9fYmxvY2tzID0gMDsKKworCS8qIERlYnVnZ2luZyBvdXRw dXQuICovCisJaWYgKGRlYnVnKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgZGVidWdfYnVmOworCQl1 bnNpZ25lZAlzdGFydF9vZl9yYW5nZSA9IDA7CisJCXVuc2lnbmVkCWN1cnJlbnRfYmxvY2sgPSAw OworCisJCS8qIEJhc2ljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdXRwdXQgZmlsZSB0byBiZSBw cm9kdWNlZC4gKi8KKwkJaWYgKGRyeV9ydW4pCisJCQlwZ19sb2dfZGVidWcoIndvdWxkIHJlY29u c3RydWN0IFwiJXNcIiAoJXUgYmxvY2tzLCBjaGVja3N1bSAlcykiLAorCQkJCQkJIG91dHB1dF9m aWxlbmFtZSwgYmxvY2tfbGVuZ3RoLAorCQkJCQkJIHBnX2NoZWNrc3VtX3R5cGVfbmFtZShjaGVj a3N1bV9jdHgtPnR5cGUpKTsKKwkJZWxzZQorCQkJcGdfbG9nX2RlYnVnKCJyZWNvbnN0cnVjdGlu ZyBcIiVzXCIgKCV1IGJsb2NrcywgY2hlY2tzdW0gJXMpIiwKKwkJCQkJCSBvdXRwdXRfZmlsZW5h bWUsIGJsb2NrX2xlbmd0aCwKKwkJCQkJCSBwZ19jaGVja3N1bV90eXBlX25hbWUoY2hlY2tzdW1f Y3R4LT50eXBlKSk7CisKKwkJLyogUHJpbnQgb3V0IHRoZSBwbGFuIGZvciByZWNvbnN0cnVjdGlu ZyB0aGlzIGZpbGUuICovCisJCWluaXRTdHJpbmdJbmZvKCZkZWJ1Z19idWYpOworCQl3aGlsZSAo Y3VycmVudF9ibG9jayA8IGJsb2NrX2xlbmd0aCkKKwkJeworCQkJcmZpbGUJICAgKnMgPSBzb3Vy Y2VtYXBbY3VycmVudF9ibG9ja107CisKKwkJCS8qIEV4dGVuZCByYW5nZSwgaWYgcG9zc2libGUu ICovCisJCQlpZiAoY3VycmVudF9ibG9jayArIDEgPCBibG9ja19sZW5ndGggJiYKKwkJCQlzID09 IHNvdXJjZW1hcFtjdXJyZW50X2Jsb2NrICsgMV0pCisJCQl7CisJCQkJKytjdXJyZW50X2Jsb2Nr OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBBZGQgZGV0YWlscyBhYm91dCB0aGlzIHJh bmdlLiAqLworCQkJaWYgKHMgPT0gTlVMTCkKKwkJCXsKKwkJCQlpZiAoY3VycmVudF9ibG9jayA9 PSBzdGFydF9vZl9yYW5nZSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVidWdfYnVmLCAiICV1 Onplcm8iLCBjdXJyZW50X2Jsb2NrKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm8o JmRlYnVnX2J1ZiwgIiAldS0ldTp6ZXJvIiwKKwkJCQkJCQkJCSBzdGFydF9vZl9yYW5nZSwgY3Vy cmVudF9ibG9jayk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGN1cnJlbnRfYmxvY2sg PT0gc3RhcnRfb2ZfcmFuZ2UpCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlYnVnX2J1ZiwgIiAl dTolc0AiIFVJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkgY3VycmVudF9ibG9jaywKKwkJCQkJCQkJ CSBzID09IE5VTEwgPyAiWkVSTyIgOiBzLT5maWxlbmFtZSwKKwkJCQkJCQkJCSAodWludDY0KSBv ZmZzZXRtYXBbY3VycmVudF9ibG9ja10pOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5m bygmZGVidWdfYnVmLCAiICV1LSV1OiVzQCIgVUlOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCSBzdGFy dF9vZl9yYW5nZSwgY3VycmVudF9ibG9jaywKKwkJCQkJCQkJCSBzID09IE5VTEwgPyAiWkVSTyIg OiBzLT5maWxlbmFtZSwKKwkJCQkJCQkJCSAodWludDY0KSBvZmZzZXRtYXBbY3VycmVudF9ibG9j a10pOworCQkJfQorCisJCQkvKiBCZWdpbiBuZXcgcmFuZ2UuICovCisJCQlzdGFydF9vZl9yYW5n ZSA9ICsrY3VycmVudF9ibG9jazsKKworCQkJLyogSWYgdGhlIG91dHB1dCBpcyB2ZXJ5IGxvbmcg b3Igd2UgYXJlIGRvbmUsIGR1bXAgaXQgbm93LiAqLworCQkJaWYgKGN1cnJlbnRfYmxvY2sgPT0g YmxvY2tfbGVuZ3RoIHx8IGRlYnVnX2J1Zi5sZW4gPiAxMDI0KQorCQkJeworCQkJCXBnX2xvZ19k ZWJ1ZygicmVjb25zdHJ1Y3Rpb24gcGxhbjolcyIsIGRlYnVnX2J1Zi5kYXRhKTsKKwkJCQlyZXNl dFN0cmluZ0luZm8oJmRlYnVnX2J1Zik7CisJCQl9CisJCX0KKworCQkvKiBGcmVlIG1lbW9yeS4g Ki8KKwkJcGZyZWUoZGVidWdfYnVmLmRhdGEpOworCX0KKworCS8qIE9wZW4gdGhlIG91dHB1dCBm aWxlLCBleGNlcHQgaW4gZHJ5X3J1biBtb2RlLiAqLworCWlmICghZHJ5X3J1biAmJgorCQkod2Zk ID0gb3BlbihvdXRwdXRfZmlsZW5hbWUsCisJCQkJCU9fUkRXUiB8IFBHX0JJTkFSWSB8IE9fQ1JF QVQgfCBPX0VYQ0wsCisJCQkJCXBnX2ZpbGVfY3JlYXRlX21vZGUpKSA8IDApCisJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBvdXRwdXRfZmlsZW5hbWUpOworCisJ LyogUmVhZCBhbmQgd3JpdGUgdGhlIGJsb2NrcyBhcyByZXF1aXJlZC4gKi8KKwlmb3IgKGkgPSAw OyBpIDwgYmxvY2tfbGVuZ3RoOyArK2kpCisJeworCQl1aW50OAkJYnVmZmVyW0JMQ0tTWl07CisJ CXJmaWxlCSAgICpzID0gc291cmNlbWFwW2ldOworCQl1bnNpZ25lZAl3YjsKKworCQkvKiBVcGRh dGUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi4gKi8KKwkJaWYgKHMgPT0gTlVMTCkKKwkJCSsremVy b19ibG9ja3M7CisJCWVsc2UKKwkJeworCQkJcy0+bnVtX2Jsb2Nrc19yZWFkKys7CisJCQlzLT5o aWdoZXN0X29mZnNldF9yZWFkID0gTWF4KHMtPmhpZ2hlc3Rfb2Zmc2V0X3JlYWQsCisJCQkJCQkJ CQkJIG9mZnNldG1hcFtpXSArIEJMQ0tTWik7CisJCX0KKworCQkvKiBTa2lwIHRoZSByZXN0IG9m IHRoaXMgaW4gZHJ5LXJ1biBtb2RlLiAqLworCQlpZiAoZHJ5X3J1bikKKwkJCWNvbnRpbnVlOwor CisJCS8qIFJlYWQgb3IgemVyby1maWxsIHRoZSBibG9jayBhcyBhcHByb3ByaWF0ZS4gKi8KKwkJ aWYgKHMgPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIE5ldyBibG9jayBub3QgbWVudGlvbmVk IGluIHRoZSBXQUwgc3VtbWFyeS4gU2hvdWxkIGhhdmUgYmVlbiBhbgorCQkJICogdW5pbml0aWFs aXplZCBibG9jaywgc28ganVzdCB6ZXJvLWZpbGwgaXQuCisJCQkgKi8KKwkJCW1lbXNldChidWZm ZXIsIDAsIEJMQ0tTWik7CisJCX0KKwkJZWxzZQorCQl7CisJCQl1bnNpZ25lZAlyYjsKKworCQkJ LyogUmVhZCB0aGUgYmxvY2sgZnJvbSB0aGUgY29ycmVjdCBzb3VyY2UsIGV4Y2VwdCBpZiBkcnkt cnVuLiAqLworCQkJcmIgPSBwZ19wcmVhZChzLT5mZCwgYnVmZmVyLCBCTENLU1osIG9mZnNldG1h cFtpXSk7CisJCQlpZiAocmIgIT0gQkxDS1NaKQorCQkJeworCQkJCWlmIChyYiA8IDApCisJCQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBzLT5maWxlbmFtZSk7 CisJCQkJZWxzZQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6IHJl YWQgb25seSAlZCBvZiAlZCBieXRlcyBhdCBvZmZzZXQgJXUiLAorCQkJCQkJCSBzLT5maWxlbmFt ZSwgKGludCkgcmIsIEJMQ0tTWiwKKwkJCQkJCQkgKHVuc2lnbmVkKSBvZmZzZXRtYXBbaV0pOwor CQkJfQorCQl9CisKKwkJLyogV3JpdGUgb3V0IHRoZSBibG9jay4gKi8KKwkJaWYgKCh3YiA9IHdy aXRlKHdmZCwgYnVmZmVyLCBCTENLU1opKSAhPSBCTENLU1opCisJCXsKKwkJCWlmICh3YiA8IDAp CisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBvdXRwdXRf ZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBc IiVzXCI6IHdyb3RlIG9ubHkgJWQgb2YgJWQgYnl0ZXMiLAorCQkJCQkJIG91dHB1dF9maWxlbmFt ZSwgKGludCkgd2IsIEJMQ0tTWik7CisJCX0KKworCQkvKiBVcGRhdGUgdGhlIGNoZWNrc3VtIGNv bXB1dGF0aW9uLiAqLworCQlpZiAocGdfY2hlY2tzdW1fdXBkYXRlKGNoZWNrc3VtX2N0eCwgYnVm ZmVyLCBCTENLU1opIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdXBkYXRlIGNoZWNrc3Vt IG9mIGZpbGUgXCIlc1wiIiwKKwkJCQkJIG91dHB1dF9maWxlbmFtZSk7CisJfQorCisJLyogRGVi dWdnaW5nIG91dHB1dC4gKi8KKwlpZiAoemVyb19ibG9ja3MgPiAwKQorCXsKKwkJaWYgKGRyeV9y dW4pCisJCQlwZ19sb2dfZGVidWcoIndvdWxkIGhhdmUgemVyby1maWxsZWQgJXUgYmxvY2tzIiwg emVyb19ibG9ja3MpOworCQllbHNlCisJCQlwZ19sb2dfZGVidWcoInplcm8tZmlsbGVkICV1IGJs b2NrcyIsIHplcm9fYmxvY2tzKTsKKwl9CisKKwkvKiBDbG9zZSB0aGUgb3V0cHV0IGZpbGUuICov CisJaWYgKHdmZCA+PSAwICYmIGNsb3NlKHdmZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBcIiVzXCI6ICVtIiwgb3V0cHV0X2ZpbGVuYW1lKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfY29tYmluZWJhY2t1cC9yZWNvbnN0cnVjdC5oIGIvc3JjL2Jpbi9wZ19jb21iaW5l YmFja3VwL3JlY29uc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uZDY4OWFlYjVjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1 cC9yZWNvbnN0cnVjdC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHJlY29uc3RydWN0LmgKKyAqCQlSZWNvbnN0cnVjdCBmdWxsIGZpbGUgZnJvbSBpbmNyZW1l bnRhbCBmaWxlIGFuZCBiYWNrdXAgY2hhaW4uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCSAgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3JlY29uc3RydWN0LmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBSRUNPTlNUUlVDVF9ICisjZGVmaW5lIFJF Q09OU1RSVUNUX0gKKworI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxwZXIuaCIKKyNpbmNs dWRlICJsb2FkX21hbmlmZXN0LmgiCisKK2V4dGVybiB2b2lkIHJlY29uc3RydWN0X2Zyb21faW5j cmVtZW50YWxfZmlsZShjaGFyICppbnB1dF9maWxlbmFtZSwKKwkJCQkJCQkJCQkJICBjaGFyICpv dXRwdXRfZmlsZW5hbWUsCisJCQkJCQkJCQkJCSAgY2hhciAqcmVsYXRpdmVfcGF0aCwKKwkJCQkJ CQkJCQkJICBjaGFyICpiYXJlX2ZpbGVfbmFtZSwKKwkJCQkJCQkJCQkJICBpbnQgbl9wcmlvcl9i YWNrdXBzLAorCQkJCQkJCQkJCQkgIGNoYXIgKipwcmlvcl9iYWNrdXBfZGlycywKKwkJCQkJCQkJ CQkJICBtYW5pZmVzdF9kYXRhICoqbWFuaWZlc3RzLAorCQkJCQkJCQkJCQkgIGNoYXIgKm1hbmlm ZXN0X3BhdGgsCisJCQkJCQkJCQkJCSAgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAor CQkJCQkJCQkJCQkgIGludCAqY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHVpbnQ4ICoq Y2hlY2tzdW1fcGF5bG9hZCwKKwkJCQkJCQkJCQkJICBib29sIGRlYnVnLAorCQkJCQkJCQkJCQkg IGJvb2wgZHJ5X3J1bik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb21iaW5l YmFja3VwL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDAxX2Jh c2ljLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZiNjYwNzVkMWEK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8wMDFfYmFzaWMu cGwKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyMywgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkdGVt cGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCitwcm9ncmFtX2hlbHBf b2soJ3BnX2NvbWJpbmViYWNrdXAnKTsKK3Byb2dyYW1fdmVyc2lvbl9vaygncGdfY29tYmluZWJh Y2t1cCcpOworcHJvZ3JhbV9vcHRpb25zX2hhbmRsaW5nX29rKCdwZ19jb21iaW5lYmFja3VwJyk7 CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbJ3BnX2NvbWJpbmViYWNrdXAnXSwKKwlxci9ubyBp bnB1dCBkaXJlY3RvcmllcyBzcGVjaWZpZWQvLAorCSdpbnB1dCBkaXJlY3RvcmllcyBtdXN0IGJl IHNwZWNpZmllZCcpOworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2NvbWJpbmViYWNrdXAn LCAkdGVtcGRpciBdLAorCXFyL25vIG91dHB1dCBkaXJlY3Rvcnkgc3BlY2lmaWVkLywKKwknb3V0 cHV0IGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCcpOworCitkb25lX3Rlc3RpbmcoKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwMl9jb21wYXJlX2JhY2t1cHMu cGwgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8wMDJfY29tcGFyZV9iYWNrdXBzLnBsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBiODA0NTVhZmYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8wMDJfY29tcGFyZV9iYWNrdXBz LnBsCkBAIC0wLDAgKzEsMTU0IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDIzLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz OwordXNlIEZpbGU6OkNvbXBhcmU7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIFNldCB1cCBh IG5ldyBkYXRhYmFzZSBpbnN0YW5jZS4KK215ICRwcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChoYXNfYXJjaGl2aW5nID0+ IDEsIGFsbG93c19zdHJlYW1pbmcgPT4gMSk7CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsICdzdW1tYXJpemVfd2FsID0gb24nKTsKKyRwcmltYXJ5LT5zdGFydDsKKwor IyBDcmVhdGUgc29tZSB0ZXN0IHRhYmxlcywgZWFjaCBjb250YWluaW5nIG9uZSByb3cgb2YgZGF0 YSwgcGx1cyBhIHdob2xlCisjIGV4dHJhIGRhdGFiYXNlLgorJHByaW1hcnktPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitDUkVBVEUgVEFCTEUgd2lsbF9jaGFuZ2UgKGEgaW50LCBiIHRl eHQpOworSU5TRVJUIElOVE8gd2lsbF9jaGFuZ2UgVkFMVUVTICgxLCAnaW5pdGlhbCB0ZXN0IHJv dycpOworQ1JFQVRFIFRBQkxFIHdpbGxfZ3JvdyAoYSBpbnQsIGIgdGV4dCk7CitJTlNFUlQgSU5U TyB3aWxsX2dyb3cgVkFMVUVTICgxLCAnaW5pdGlhbCB0ZXN0IHJvdycpOworQ1JFQVRFIFRBQkxF IHdpbGxfc2hyaW5rIChhIGludCwgYiB0ZXh0KTsKK0lOU0VSVCBJTlRPIHdpbGxfc2hyaW5rIFZB TFVFUyAoMSwgJ2luaXRpYWwgdGVzdCByb3cnKTsKK0NSRUFURSBUQUJMRSB3aWxsX2dldF92YWN1 dW1lZCAoYSBpbnQsIGIgdGV4dCk7CitJTlNFUlQgSU5UTyB3aWxsX2dldF92YWN1dW1lZCBWQUxV RVMgKDEsICdpbml0aWFsIHRlc3Qgcm93Jyk7CitDUkVBVEUgVEFCTEUgd2lsbF9nZXRfZHJvcHBl ZCAoYSBpbnQsIGIgdGV4dCk7CitJTlNFUlQgSU5UTyB3aWxsX2dldF9kcm9wcGVkIFZBTFVFUyAo MSwgJ2luaXRpYWwgdGVzdCByb3cnKTsKK0NSRUFURSBUQUJMRSB3aWxsX2dldF9yZXdyaXR0ZW4g KGEgaW50LCBiIHRleHQpOworSU5TRVJUIElOVE8gd2lsbF9nZXRfcmV3cml0dGVuIFZBTFVFUyAo MSwgJ2luaXRpYWwgdGVzdCByb3cnKTsKK0NSRUFURSBEQVRBQkFTRSBkYl93aWxsX2dldF9kcm9w cGVkOworRU9NCisKKyMgVGFrZSBhIGZ1bGwgYmFja3VwLgorbXkgJGJhY2t1cDFwYXRoID0gJHBy aW1hcnktPmJhY2t1cF9kaXIgLiAnL2JhY2t1cDEnOworJHByaW1hcnktPmNvbW1hbmRfb2soCisJ WyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRiYWNrdXAxcGF0aCwgJy0tbm8tc3luYycsICctY2Zh c3QnIF0sCisJImZ1bGwgYmFja3VwIik7CisKKyMgTm93IG1ha2Ugc29tZSBkYXRhYmFzZSBjaGFu Z2VzLgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitVUERBVEUgd2ls bF9jaGFuZ2UgU0VUIGIgPSAnbW9kaWZpZWQgdmFsdWUnIFdIRVJFIGEgPSAxOworSU5TRVJUIElO VE8gd2lsbF9ncm93CisJU0VMRUNUIGcsICdhZGRpdGlvbmFsIHJvdycgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMiwgNTAwMCkgZzsKK1RSVU5DQVRFIHdpbGxfc2hyaW5rOworVkFDVVVNIHdpbGxfZ2V0 X3ZhY3V1bWVkOworRFJPUCBUQUJMRSB3aWxsX2dldF9kcm9wcGVkOworQ1JFQVRFIFRBQkxFIG5l d2x5X2NyZWF0ZWQgKGEgaW50LCBiIHRleHQpOworSU5TRVJUIElOVE8gbmV3bHlfY3JlYXRlZCBW QUxVRVMgKDEsICdyb3cgZm9yIG5ldyB0YWJsZScpOworVkFDVVVNIEZVTEwgd2lsbF9nZXRfcmV3 cml0dGVuOworRFJPUCBEQVRBQkFTRSBkYl93aWxsX2dldF9kcm9wcGVkOworQ1JFQVRFIERBVEFC QVNFIGRiX25ld2x5X2NyZWF0ZWQ7CitFT00KKworIyBUYWtlIGFuIGluY3JlbWVudGFsIGJhY2t1 cC4KK215ICRiYWNrdXAycGF0aCA9ICRwcmltYXJ5LT5iYWNrdXBfZGlyIC4gJy9iYWNrdXAyJzsK KyRwcmltYXJ5LT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAkYmFja3Vw MnBhdGgsICctLW5vLXN5bmMnLCAnLWNmYXN0JywKKwkgICctLWluY3JlbWVudGFsJywgJGJhY2t1 cDFwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImluY3JlbWVudGFsIGJhY2t1cCIpOwor CisjIEZpbmQgYW4gTFNOIHRvIHdoaWNoIGVpdGhlciBiYWNrdXAgY2FuIGJlIHJlY292ZXJlZC4K K215ICRsc24gPSAkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3Vy cmVudF93YWxfbHNuKCk7Iik7CisKKyMgTWFrZSBzdXJlIHRoYXQgdGhlIFdBTCBzZWdtZW50IGNv bnRhaW5pbmcgdGhhdCBMU04gaGFzIGJlZW4gYXJjaGl2ZWQuCisjIFBvc3RncmVTUUwgd29uJ3Qg aXNzdWUgdHdvIGNvbnNlY3V0aXZlIFhMT0dfU1dJVENIIHJlY29yZHMsIGFuZCB0aGUgYmFja3Vw CisjIGp1c3QgaXNzdWVkIG9uZSwgc28gY2FsbCB0eGlkX2N1cnJlbnQoKSB0byBnZW5lcmF0ZSBz b21lIFdBTCBhY3Rpdml0eQorIyBiZWZvcmUgY2FsbGluZyBwZ19zd2l0Y2hfd2FsKCkuCiskcHJp bWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgdHhpZF9jdXJyZW50KCk7Jyk7Cisk cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfc3dpdGNoX3dhbCgpJyk7 CisKKyMgTm93IHdhaXQgZm9yIHRoZSBMU04gd2UgY2hvc2UgYWJvdmUgdG8gYmUgYXJjaGl2ZWQu CitteSAkYXJjaGl2ZV93YWl0X3F1ZXJ5ID0KKyAgIlNFTEVDVCBwZ193YWxmaWxlX25hbWUoJyRs c24nKSA8PSBsYXN0X2FyY2hpdmVkX3dhbCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXI7IjsKKyRwcmlt YXJ5LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRhcmNoaXZlX3dhaXRfcXVlcnkpCisg IG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIFdBTCBzZWdtZW50IHRvIGJlIGFy Y2hpdmVkIjsKKworIyBQZXJmb3JtIFBJVFIgZnJvbSB0aGUgZnVsbCBiYWNrdXAuIERpc2FibGUg YXJjaGl2ZV9tb2RlIHNvIHRoYXQgdGhlIGFyY2hpdmUKKyMgZG9lc24ndCBmaW5kIG91dCBhYm91 dCB0aGUgbmV3IHRpbWVsaW5lOyB0aGF0IHdheSwgdGhlIGxhdGVyIFBJVFIgYmVsb3cgd2lsbAor IyBjaG9vc2UgdGhlIHNhbWUgdGltZWxpbmUuCitteSAkcGl0cjEgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3BpdHIxJyk7CiskcGl0cjEtPmluaXRfZnJvbV9iYWNrdXAoJHByaW1h cnksICdiYWNrdXAxJywKKwkJCQkJCSBzdGFuZGJ5ID0+IDEsIGhhc19yZXN0b3JpbmcgPT4gMSk7 CiskcGl0cjEtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK3JlY292ZXJ5X3Rh cmdldF9sc24gPSAnJGxzbicKK3JlY292ZXJ5X3RhcmdldF9hY3Rpb24gPSAncHJvbW90ZScKK2Fy Y2hpdmVfbW9kZSA9ICdvZmYnCit9KTsKKyRwaXRyMS0+c3RhcnQoKTsKKworIyBQZXJmb3JtIFBJ VFIgdG8gdGhlIHNhbWUgTFNOIGZyb20gdGhlIGluY3JlbWVudGFsIGJhY2t1cC4gVXNlIHRoZSBz YW1lCisjIGJhc2ljIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlLgorbXkgJHBpdHIyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwaXRyMicpOworJHBpdHIyLT5pbml0X2Zyb21fYmFj a3VwKCRwcmltYXJ5LCAnYmFja3VwMicsCisJCQkJCQkgc3RhbmRieSA9PiAxLCBoYXNfcmVzdG9y aW5nID0+IDEsCisJCQkJCQkgY29tYmluZV93aXRoX3ByaW9yID0+IFsgJ2JhY2t1cDEnIF0pOwor JHBpdHIyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CityZWNvdmVyeV90YXJn ZXRfbHNuID0gJyRsc24nCityZWNvdmVyeV90YXJnZXRfYWN0aW9uID0gJ3Byb21vdGUnCithcmNo aXZlX21vZGUgPSAnb2ZmJworfSk7CiskcGl0cjItPnN0YXJ0KCk7CisKKyMgV2FpdCB1bnRpbCBi b3RoIHNlcnZlcnMgZXhpdCByZWNvdmVyeS4KKyRwaXRyMS0+cG9sbF9xdWVyeV91bnRpbCgncG9z dGdyZXMnLAorCQkJCQkJICJTRUxFQ1QgTk9UIHBnX2lzX2luX3JlY292ZXJ5KCk7IikKKyAgb3Ig ZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBhcHBseSB0byByZWFjaCBMU04gJGxzbiI7Cisk cGl0cjItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJCQkJCSAiU0VMRUNUIE5PVCBw Z19pc19pbl9yZWNvdmVyeSgpOyIpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg YXBwbHkgdG8gcmVhY2ggTFNOICRsc24iOworCisjIFBlcmZvcm0gYSBsb2dpY2FsIGR1bXAgb2Yg ZWFjaCBzZXJ2ZXIsIGFuZCBjaGVjayB0aGF0IHRoZXkgbWF0Y2guCisjIEl0IHdvdWxkIGJlIG11 Y2ggbmljZXIgaWYgd2UgY291bGQgcGh5c2ljYWxseSBjb21wYXJlIHRoZSBkYXRhIGZpbGVzLCBi dXQKKyMgdGhhdCBkb2Vzbid0IHJlYWxseSB3b3JrLiBUaGUgY29udGVudHMgb2YgdGhlIHBhZ2Ug aG9sZSBhcmVuJ3QgZ3VhcmFudGVlZCB0bworIyBiZSBpZGVudGljYWwsIGFuZCB0aGVyZSBjYW4g YmUgb3RoZXIgZGlzY3JlcGFuY2llcyBhcyB3ZWxsLiBUbyBtYWtlIHRoaXMgd29yaworIyB3ZSdk IG5lZWQgdGhlIGVxdWl2YWxlbnQgb2YgZWFjaCBBTSdzIHJtX21hc2sgZnVuY3RvbiB3cml0dGVu IG9yIGF0IGxlYXN0CisjIGNhbGxhYmxlIGZyb20gUGVybCwgYW5kIHRoYXQgZG9lc24ndCBzZWVt IHByYWN0aWNhbC4KKyMKKyMgTkI6IFdlJ3JlIGp1c3QgdXNpbmcgdGhlIHByaW1hcnkncyBiYWNr dXAgZGlyZWN0b3J5IGZvciBzY3JhdGNoIHNwYWNlIGhlcmUuCisjIFRoaXMgY291bGQgZXF1YWxs eSB3ZWxsIGJlIGFueSBvdGhlciBkaXJlY3Rvcnkgd2Ugd2FudGVkIHRvIHBpY2suCitteSAkYmFj a3VwZGlyID0gJHByaW1hcnktPmJhY2t1cF9kaXI7CitteSAkZHVtcDEgPSAkYmFja3VwZGlyIC4g Jy9waXRyMS5kdW1wJzsKK215ICRkdW1wMiA9ICRiYWNrdXBkaXIgLiAnL3BpdHIyLmR1bXAnOwor JHBpdHIxLT5jb21tYW5kX29rKFsKKwkncGdfZHVtcGFsbCcsICctZicsICRkdW1wMSwgJy0tbm8t c3luYycsICctLW5vLXVubG9nZ2VkLXRhYmxlLWRhdGEnLAorCQknLWQnLCAkcGl0cjEtPmNvbm5z dHIoJ3Bvc3RncmVzJyksCisJXSwKKwknZHVtcCBmcm9tIFBJVFIgMScpOworJHBpdHIxLT5jb21t YW5kX29rKFsKKwkncGdfZHVtcGFsbCcsICctZicsICRkdW1wMiwgJy0tbm8tc3luYycsICctLW5v LXVubG9nZ2VkLXRhYmxlLWRhdGEnLAorCQknLWQnLCAkcGl0cjEtPmNvbm5zdHIoJ3Bvc3RncmVz JyksCisJXSwKKwknZHVtcCBmcm9tIFBJVFIgMicpOworCisjIENvbXBhcmUgdGhlIHR3byBkdW1w cywgdGhlcmUgc2hvdWxkIGJlIG5vIGRpZmZlcmVuY2VzLgorbXkgJGNvbXBhcmVfcmVzID0gY29t cGFyZSgkZHVtcDEsICRkdW1wMik7Citub3RlKCRkdW1wMSk7Citub3RlKCRkdW1wMik7Citpcygk Y29tcGFyZV9yZXMsIDAsICJkdW1wcyBhcmUgaWRlbnRpY2FsIik7CisKKyMgUHJvdmlkZSBtb3Jl IGNvbnRleHQgaWYgdGhlIGR1bXBzIGRvIG5vdCBtYXRjaC4KK2lmICgkY29tcGFyZV9yZXMgIT0g MCkKK3sKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPQorCQlydW5fY29tbWFuZChbICdkaWZmJywg Jy11JywgJGR1bXAxLCAkZHVtcDIgXSk7CisJcHJpbnQgIj09PSBkaWZmIG9mICRkdW1wMSBhbmQg JGR1bXAyXG4iOworCXByaW50ICI9PT0gc3Rkb3V0ID09PVxuIjsKKwlwcmludCAkc3Rkb3V0Owor CXByaW50ICI9PT0gc3RkZXJyID09PVxuIjsKKwlwcmludCAkc3RkZXJyOworCXByaW50ICI9PT0g RU9GID09PVxuIjsKK30KKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2NvbWJpbmViYWNrdXAvdC8wMDNfdGltZWxpbmUucGwgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNr dXAvdC8wMDNfdGltZWxpbmUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uYmMwNTNjYTVlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1 cC90LzAwM190aW1lbGluZS5wbApAQCAtMCwwICsxLDkwIEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIworIyBUaGlzIHRl c3QgYWltcyB0byB2YWxpZGF0ZSB0aGF0IHJlc3RvcmluZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAg d29ya3MKKyMgcHJvcGVybHkgZXZlbiB3aGVuIHRoZSByZWZlcmVuY2UgYmFja3VwIGlzIG9uIGEg ZGlmZmVyZW50IHRpbWVsaW5lLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZp bGU6OkNvbXBhcmU7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIFNldCB1cCBhIG5ldyBkYXRh YmFzZSBpbnN0YW5jZS4KK215ICRub2RlMSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygnbm9kZTEnKTsKKyRub2RlMS0+aW5pdChoYXNfYXJjaGl2aW5nID0+IDEsIGFsbG93c19zdHJl YW1pbmcgPT4gMSk7Ciskbm9kZTEtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3Vt bWFyaXplX3dhbCA9IG9uJyk7Ciskbm9kZTEtPnN0YXJ0OworCisjIENyZWF0ZSBhIHRhYmxlIGFu ZCBpbnNlcnQgYSB0ZXN0IHJvdyBpbnRvIGl0LgorJG5vZGUxLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgPDxFT00pOworQ1JFQVRFIFRBQkxFIG15dGFibGUgKGEgaW50LCBiIHRleHQpOworSU5TRVJU IElOVE8gbXl0YWJsZSBWQUxVRVMgKDEsICdhYXJkdmFyaycpOworRU9NCisKKyMgVGFrZSBhIGZ1 bGwgYmFja3VwLgorbXkgJGJhY2t1cDFwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9iYWNr dXAxJzsKKyRub2RlMS0+Y29tbWFuZF9vaygKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywgJGJh Y2t1cDFwYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcgXSwKKwkiZnVsbCBiYWNrdXAgZnJvbSBu b2RlMSIpOworCisjIEluc2VydCBhIHNlY29uZCByb3cgb24gdGhlIG9yaWdpbmFsIG5vZGUuCisk bm9kZTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitJTlNFUlQgSU5UTyBteXRhYmxl IFZBTFVFUyAoMiwgJ2JlZXRsZScpOworRU9NCisKKyMgTm93IHRha2UgYW4gaW5jcmVtZW50YWwg YmFja3VwLgorbXkgJGJhY2t1cDJwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9iYWNrdXAy JzsKKyRub2RlMS0+Y29tbWFuZF9vaygKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywgJGJhY2t1 cDJwYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcsCisJICAnLS1pbmNyZW1lbnRhbCcsICRiYWNr dXAxcGF0aCAuICcvYmFja3VwX21hbmlmZXN0JyBdLAorCSJpbmNyZW1lbnRhbCBiYWNrdXAgZnJv bSBub2RlMSIpOworCisjIFJlc3RvcmUgdGhlIGluY3JlbWVudGFsIGJhY2t1cCBhbmQgdXNlIGl0 IHRvIGNyZWF0ZSBhIG5ldyBub2RlLgorbXkgJG5vZGUyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCdub2RlMicpOworJG5vZGUyLT5pbml0X2Zyb21fYmFja3VwKCRub2RlMSwgJ2Jh Y2t1cDInLAorCQkJCQkJIGNvbWJpbmVfd2l0aF9wcmlvciA9PiBbICdiYWNrdXAxJyBdKTsKKyRu b2RlMi0+c3RhcnQoKTsKKworIyBJbnNlcnQgcm93cyBvbiBib3RoIG5vZGVzLgorJG5vZGUxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworSU5TRVJUIElOVE8gbXl0YWJsZSBWQUxVRVMg KDMsICdjcmFiJyk7CitFT00KKyRub2RlMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsK K0lOU0VSVCBJTlRPIG15dGFibGUgVkFMVUVTICg0LCAnZGluZ28nKTsKK0VPTQorCisjIFRha2Ug YW5vdGhlciBpbmNyZW1lbnRhbCBiYWNrdXAsIGZyb20gbm9kZTIsIGJhc2VkIG9uIGJhY2t1cDIg ZnJvbSBub2RlMS4KK215ICRiYWNrdXAzcGF0aCA9ICRub2RlMS0+YmFja3VwX2RpciAuICcvYmFj a3VwMyc7Ciskbm9kZTItPmNvbW1hbmRfb2soCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRi YWNrdXAzcGF0aCwgJy0tbm8tc3luYycsICctY2Zhc3QnLAorCSAgJy0taW5jcmVtZW50YWwnLCAk YmFja3VwMnBhdGggLiAnL2JhY2t1cF9tYW5pZmVzdCcgXSwKKwkiaW5jcmVtZW50YWwgYmFja3Vw IGZyb20gbm9kZTIiKTsKKworIyBSZXN0b3JlIHRoZSBpbmNyZW1lbnRhbCBiYWNrdXAgYW5kIHVz ZSBpdCB0byBjcmVhdGUgYSBuZXcgbm9kZS4KK215ICRub2RlMyA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnbm9kZTMnKTsKKyRub2RlMy0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZTEs ICdiYWNrdXAzJywKKwkJCQkJCSBjb21iaW5lX3dpdGhfcHJpb3IgPT4gWyAnYmFja3VwMScsICdi YWNrdXAyJyBdKTsKKyRub2RlMy0+c3RhcnQoKTsKKworIyBMZXQncyBpbnNlcnQgb25lIG1vcmUg cm93LgorJG5vZGUzLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworSU5TRVJUIElOVE8g bXl0YWJsZSBWQUxVRVMgKDUsICdlbGVwaGFudCcpOworRU9NCisKKyMgTm93IGNoZWNrIHRoYXQg d2UgaGF2ZSB0aGUgZXhwZWN0ZWQgcm93cy4KK215ICRyZXN1bHQgPSAkbm9kZTMtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCA8PEVPTSk7CitzZWxlY3Qgc3RyaW5nX2FnZyhhOjp0ZXh0LCAnOicpLCBz dHJpbmdfYWdnKGIsICc6JykgZnJvbSBteXRhYmxlOworRU9NCitpcygkcmVzdWx0LCAnMToyOjQ6 NXxhYXJkdmFyazpiZWV0bGU6ZGluZ286ZWxlcGhhbnQnKTsKKworIyBMZXQncyBhbHNvIHZlcmlm eSBhbGwgdGhlIGJhY2t1cHMuCitmb3IgbXkgJGJhY2t1cF9uYW1lIChxdyhiYWNrdXAxIGJhY2t1 cDIgYmFja3VwMykpCit7CisJJG5vZGUxLT5jb21tYW5kX29rKAorCQlbICdwZ192ZXJpZnliYWNr dXAnLCAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnLycgLiAkYmFja3VwX25hbWUgXSwKKwkJInZlcmlm eSBiYWNrdXAgJGJhY2t1cF9uYW1lIik7Cit9CisKKyMgT0ssIHRoYXQncyBhbGwuCitkb25lX3Rl c3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwNF9tYW5p ZmVzdC5wbCBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwNF9tYW5pZmVzdC5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zN2RlNjFhYzA2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDA0X21hbmlmZXN0LnBsCkBAIC0w LDAgKzEsNzUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisjCisjIFRoaXMgdGVzdCBhaW1zIHRvIHZhbGlkYXRlIHRoYXQg cGdfY29tYmluZWJhY2t1cCB3b3JrcyBpbiB0aGUgZGVnZW5lcmF0ZQorIyBjYXNlIHdoZXJlIGl0 IGlzIGludm9rZWQgb24gYSBzaW5nbGUgZnVsbCBiYWNrdXAgYW5kIHRoYXQgaXQgY2FuIHByb2R1 Y2UKKyMgYSBuZXcsIHZhbGlkIG1hbmlmZXN0IHdoZW4gaXQgZG9lcy4gU2Vjb25kYXJpbHksIGl0 IGNoZWNrcyB0aGF0CisjIHBnX2NvbWJpbmViYWNrdXAgZG9lcyBub3QgcHJvZHVjZSBhIG1hbmlm ZXN0IHdoZW4gcnVuIHdpdGggLS1uby1tYW5pZmVzdC4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBGaWxlOjpDb21wYXJlOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBTZXQg dXAgYSBuZXcgZGF0YWJhc2UgaW5zdGFuY2UuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmluaXQoaGFzX2FyY2hpdmluZyA9PiAxLCBh bGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGUtPnN0YXJ0OworCisjIFRha2UgYSBmdWxsIGJh Y2t1cC4KK215ICRvcmlnaW5hbF9iYWNrdXBfcGF0aCA9ICRub2RlLT5iYWNrdXBfZGlyIC4gJy9v cmlnaW5hbCc7Ciskbm9kZS0+Y29tbWFuZF9vaygKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywg JG9yaWdpbmFsX2JhY2t1cF9wYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcgXSwKKwkiZnVsbCBi YWNrdXAiKTsKKworIyBWZXJpZnkgdGhlIGZ1bGwgYmFja3VwLgorJG5vZGUtPmNvbW1hbmRfb2so WyAncGdfdmVyaWZ5YmFja3VwJywgJG9yaWdpbmFsX2JhY2t1cF9wYXRoIF0sCisJInZlcmlmeSBv cmlnaW5hbCBiYWNrdXAiKTsKKworIyBQcm9jZXNzIHRoZSBiYWNrdXAgd2l0aCBwZ19jb21iaW5l YmFja3VwIHVzaW5nIHZhcmlvdXMgbWFuaWZlc3Qgb3B0aW9ucy4KK3N1YiBjb21iaW5lX2FuZF90 ZXN0X29uZV9iYWNrdXAKK3sKKwlteSAoJGJhY2t1cF9uYW1lLCAkZmFpbHVyZV9wYXR0ZXJuLCBA ZXh0cmFfb3B0aW9ucykgPSBAXzsKKwlteSAkcmV2aXNlZF9iYWNrdXBfcGF0aCA9ICRub2RlLT5i YWNrdXBfZGlyIC4gJy8nIC4gJGJhY2t1cF9uYW1lOworCSRub2RlLT5jb21tYW5kX29rKAorCQlb ICdwZ19jb21iaW5lYmFja3VwJywgJG9yaWdpbmFsX2JhY2t1cF9wYXRoLCAnLW8nLCAkcmV2aXNl ZF9iYWNrdXBfcGF0aCwKKwkJCQknLS1uby1zeW5jJywgQGV4dHJhX29wdGlvbnMgXSwKKwkJInBn X2NvbWJpbmViYWNrdXAgd2l0aCBAZXh0cmFfb3B0aW9ucyIpOworCWlmIChkZWZpbmVkICRmYWls dXJlX3BhdHRlcm4pCisJeworCQkkbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCQkJWyAncGdf dmVyaWZ5YmFja3VwJywgJHJldmlzZWRfYmFja3VwX3BhdGggXSwKKwkJCSRmYWlsdXJlX3BhdHRl cm4sCisJCQkidW5hYmxlIHRvIHZlcmlmeSBiYWNrdXAgJGJhY2t1cF9uYW1lIik7CisJfQorCWVs c2UKKwl7CisJCSRub2RlLT5jb21tYW5kX29rKAorCQkJWyAncGdfdmVyaWZ5YmFja3VwJywgJHJl dmlzZWRfYmFja3VwX3BhdGggXSwKKwkJCSJ2ZXJpZnkgYmFja3VwICRiYWNrdXBfbmFtZSIpOwor CX0KK30KK2NvbWJpbmVfYW5kX3Rlc3Rfb25lX2JhY2t1cCgnbm9tYW5pZmVzdCcsCisJcXIvY291 bGQgbm90IG9wZW4gZmlsZS4qYmFja3VwX21hbmlmZXN0LywgJy0tbm8tbWFuaWZlc3QnKTsKK2Nv bWJpbmVfYW5kX3Rlc3Rfb25lX2JhY2t1cCgnY3N1bV9ub25lJywKKwl1bmRlZiwgJy0tbWFuaWZl c3QtY2hlY2tzdW1zPU5PTkUnKTsKK2NvbWJpbmVfYW5kX3Rlc3Rfb25lX2JhY2t1cCgnY3N1bV9z aGEyMjQnLAorCXVuZGVmLCAnLS1tYW5pZmVzdC1jaGVja3N1bXM9U0hBMjI0Jyk7CisKKyMgVmVy aWZ5IHRoYXQgU0hBMjI0IGlzIG1lbnRpb25lZCBpbiB0aGUgU0hBMjI0IG1hbmlmZXN0IGxvdHMg b2YgdGltZXMuCitteSAkc2hhMjI0X21hbmlmZXN0ID0KKwlzbHVycF9maWxlKCRub2RlLT5iYWNr dXBfZGlyIC4gJy9jc3VtX3NoYTIyNC9iYWNrdXBfbWFuaWZlc3QnKTsKK215ICRzaGEyMjRfY291 bnQgPSAoKCkgPSAkc2hhMjI0X21hbmlmZXN0ID1+IC9TSEEyMjQvbWlnKTsKK2NtcF9vaygkc2hh MjI0X2NvdW50LAorCSc+JywgMTAwLCAiU0hBMjI0IGlzIG1lbnRpb25lZCBtYW55IHRpbWVzIGlu IFNIQTIyNCBtYW5pZmVzdCIpOworCisjIFZlcmlmeSB0aGF0IFNIQTIyNCBpcyBtZW50aW9uZWQg aW4gdGhlIFNIQTIyNCBtYW5pZmVzdCBsb3RzIG9mIHRpbWVzLgorbXkgJG5vY3N1bV9tYW5pZmVz dCA9CisJc2x1cnBfZmlsZSgkbm9kZS0+YmFja3VwX2RpciAuICcvY3N1bV9ub25lL2JhY2t1cF9t YW5pZmVzdCcpOworbXkgJG5vY3N1bV9jb3VudCA9ICgoKSA9ICRub2NzdW1fbWFuaWZlc3QgPX4g L0NoZWNrc3VtLUFsZ29yaXRobS9taWcpOworaXMoJG5vY3N1bV9jb3VudCwgMCwKKwkiQ2hlY2tz dW1fQWxnb3JpdGhtIGlzIG5vdCBtZW50aW9uZWQgaW4gbm8tY2hlY2tzdW0gbWFuaWZlc3QiKTsK KworIyBPSywgdGhhdCdzIGFsbC4KK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19jb21iaW5lYmFja3VwL3QvMDA1X2ludGVncml0eS5wbCBiL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC90LzAwNV9pbnRlZ3JpdHkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYjFmNjNhNDNlMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC90LzAwNV9pbnRlZ3JpdHkucGwKQEAgLTAsMCArMSwxMjUgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDIxLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjCisj IFRoaXMgdGVzdCBhaW1zIHRvIHZhbGlkYXRlIHRoYXQgYW4gaW5jcmVtZW50YWwgYmFja3VwIGNh biBiZSBjb21iaW5lZAorIyB3aXRoIGEgdmFsaWQgcHJpb3IgYmFja3VwIGFuZCB0aGF0IGl0IGNh bm5vdCBiZSBjb21iaW5lZCB3aXRoIGFuIGludmFsaWQKKyMgcHJpb3IgYmFja3VwLgorCit1c2Ug c3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbGU6OkNvbXBhcmU7Cit1c2UgRmlsZTo6UGF0 aCBxdyhybXRyZWUpOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBTZXQgdXAgYSBuZXcgZGF0 YWJhc2UgaW5zdGFuY2UuCitteSAkbm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ25vZGUxJyk7Ciskbm9kZTEtPmluaXQoaGFzX2FyY2hpdmluZyA9PiAxLCBhbGxvd3Nfc3Ry ZWFtaW5nID0+IDEpOworJG5vZGUxLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N1 bW1hcml6ZV93YWwgPSBvbicpOworJG5vZGUxLT5zdGFydDsKKworIyBTZXQgdXAgYW5vdGhlciBu ZXcgZGF0YWJhc2UgaW5zdGFuY2UuIFdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBjYWNoZWQKKyMg SU5JVERCX1RFTVBMQVRFIGZvciB0aGlzLCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8gYmUgYSBzZXBh cmF0ZSBjbHVzdGVyCisjIHdpdGggYSBkaWZmZXJlbnQgc3lzdGVtIElELgorbXkgJG5vZGUyOwor eworCWxvY2FsICRFTlZ7J0lOSVREQl9URU1QTEFURSd9ID0gdW5kZWY7CisKKwkkbm9kZTIgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUyJyk7CisJJG5vZGUyLT5pbml0KGhh c19hcmNoaXZpbmcgPT4gMSwgYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKwkkbm9kZTItPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3VtbWFyaXplX3dhbCA9IG9uJyk7CisJJG5vZGUy LT5zdGFydDsKK30KKworIyBUYWtlIGEgZnVsbCBiYWNrdXAgZnJvbSBub2RlMS4KK215ICRiYWNr dXAxcGF0aCA9ICRub2RlMS0+YmFja3VwX2RpciAuICcvYmFja3VwMSc7Ciskbm9kZTEtPmNvbW1h bmRfb2soCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRiYWNrdXAxcGF0aCwgJy0tbm8tc3lu YycsICctY2Zhc3QnIF0sCisJImZ1bGwgYmFja3VwIGZyb20gbm9kZTEiKTsKKworIyBOb3cgdGFr ZSBhbiBpbmNyZW1lbnRhbCBiYWNrdXAuCitteSAkYmFja3VwMnBhdGggPSAkbm9kZTEtPmJhY2t1 cF9kaXIgLiAnL2JhY2t1cDInOworJG5vZGUxLT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNr dXAnLCAnLUQnLCAkYmFja3VwMnBhdGgsICctLW5vLXN5bmMnLCAnLWNmYXN0JywKKwkgICctLWlu Y3JlbWVudGFsJywgJGJhY2t1cDFwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImluY3Jl bWVudGFsIGJhY2t1cCBmcm9tIG5vZGUxIik7CisKKyMgTm93IHRha2UgYW5vdGhlciBpbmNyZW1l bnRhbCBiYWNrdXAuCitteSAkYmFja3VwM3BhdGggPSAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnL2Jh Y2t1cDMnOworJG5vZGUxLT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAk YmFja3VwM3BhdGgsICctLW5vLXN5bmMnLCAnLWNmYXN0JywKKwkgICctLWluY3JlbWVudGFsJywg JGJhY2t1cDJwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImFub3RoZXIgaW5jcmVtZW50 YWwgYmFja3VwIGZyb20gbm9kZTEiKTsKKworIyBUYWtlIGEgZnVsbCBiYWNrdXAgZnJvbSBub2Rl Mi4KK215ICRiYWNrdXBvdGhlcjFwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9iYWNrdXBv dGhlcjEnOworJG5vZGUyLT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAk YmFja3Vwb3RoZXIxcGF0aCwgJy0tbm8tc3luYycsICctY2Zhc3QnIF0sCisJImZ1bGwgYmFja3Vw IGZyb20gbm9kZTIiKTsKKworIyBUYWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cCBmcm9tIG5vZGUy LgorbXkgJGJhY2t1cG90aGVyMnBhdGggPSAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnL2JhY2t1cG90 aGVyMic7Ciskbm9kZTItPmNvbW1hbmRfb2soCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRi YWNrdXBvdGhlcjJwYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcsCisJICAnLS1pbmNyZW1lbnRh bCcsICRiYWNrdXBvdGhlcjFwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImluY3JlbWVu dGFsIGJhY2t1cCBmcm9tIG5vZGUyIik7CisKKyMgUmVzdWx0IGRpcmVjdG9yeS4KK215ICRyZXN1 bHRwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9yZXN1bHQnOworCisjIENhbid0IGNvbWJp bmUgMiBmdWxsIGJhY2t1cHMuCiskbm9kZTEtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19j b21iaW5lYmFja3VwJywgJGJhY2t1cDFwYXRoLCAkYmFja3VwMXBhdGgsICctbycsICRyZXN1bHRw YXRoIF0sCisJcXIvaXMgYSBmdWxsIGJhY2t1cCwgYnV0IG9ubHkgdGhlIGZpcnN0IGJhY2t1cCBz aG91bGQgYmUgYSBmdWxsIGJhY2t1cC8sCisJImNhbid0IGNvbWJpbmUgZnVsbCBiYWNrdXBzIik7 CisKKyMgQ2FuJ3QgY29tYmluZSAyIGluY3JlbWVudGFsIGJhY2t1cHMuCiskbm9kZTEtPmNvbW1h bmRfZmFpbHNfbGlrZSgKKwlbICdwZ19jb21iaW5lYmFja3VwJywgJGJhY2t1cDJwYXRoLCAkYmFj a3VwMnBhdGgsICctbycsICRyZXN1bHRwYXRoIF0sCisJcXIvaXMgYW4gaW5jcmVtZW50YWwgYmFj a3VwLCBidXQgdGhlIGZpcnN0IGJhY2t1cCBzaG91bGQgYmUgYSBmdWxsIGJhY2t1cC8sCisJImNh bid0IGNvbWJpbmUgZnVsbCBiYWNrdXBzIik7CisKKyMgQ2FuJ3QgY29tYmluZSBmdWxsIGJhY2t1 cCB3aXRoIGFuIGluY3JlbWVudGFsIGJhY2t1cCBmcm9tIGEgZGlmZmVyZW50IHN5c3RlbS4KKyRu b2RlMS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2NvbWJpbmViYWNrdXAnLCAkYmFja3Vw MXBhdGgsICRiYWNrdXBvdGhlcjJwYXRoLCAnLW8nLCAkcmVzdWx0cGF0aCBdLAorCXFyL2V4cGVj dGVkIHN5c3RlbSBpZGVudGlmaWVyLipidXQgZm91bmQvLAorCSJjYW4ndCBjb21iaW5lIGJhY2t1 cHMgZnJvbSBkaWZmZXJlbnQgbm9kZXMiKTsKKworIyBDYW4ndCBvbWl0IGEgcmVxdWlyZWQgYmFj a3VwLgorJG5vZGUxLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfY29tYmluZWJhY2t1cCcs ICRiYWNrdXAxcGF0aCwgJGJhY2t1cDNwYXRoLCAnLW8nLCAkcmVzdWx0cGF0aCBdLAorCXFyL3N0 YXJ0cyBhdCBMU04uKmJ1dCBleHBlY3RlZC8sCisJImNhbid0IG9taXQgYSByZXF1aXJlZCBiYWNr dXAiKTsKKworIyBDYW4ndCBjb21iaW5lIGJhY2t1cHMgaW4gdGhlIHdyb25nIG9yZGVyLgorJG5v ZGUxLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfY29tYmluZWJhY2t1cCcsICRiYWNrdXAx cGF0aCwgJGJhY2t1cDNwYXRoLCAkYmFja3VwMnBhdGgsICctbycsICRyZXN1bHRwYXRoIF0sCisJ cXIvc3RhcnRzIGF0IExTTi4qYnV0IGV4cGVjdGVkLywKKwkiY2FuJ3QgY29tYmluZSBiYWNrdXBz IGluIHRoZSB3cm9uZyBvcmRlciIpOworCisjIENhbiBjb21iaW5lIDMgYmFja3VwcyB0aGF0IG1h dGNoIHVwIHByb3Blcmx5LgorJG5vZGUxLT5jb21tYW5kX29rKAorCVsgJ3BnX2NvbWJpbmViYWNr dXAnLCAkYmFja3VwMXBhdGgsICRiYWNrdXAycGF0aCwgJGJhY2t1cDNwYXRoLCAnLW8nLCAkcmVz dWx0cGF0aCBdLAorCSJjYW4gY29tYmluZSAzIG1hdGNoaW5nIGJhY2t1cHMiKTsKK3JtdHJlZSgk cmVzdWx0cGF0aCk7CisKKyMgQ2FuIGNvbWJpbmUgZnVsbCBiYWNrdXAgd2l0aCBmaXJzdCBpbmNy ZW1lbnRhbC4KK215ICRzeW50aGV0aWMxMnBhdGggPSAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnL3N5 bnRoZXRpYzEyJzsKKyRub2RlMS0+Y29tbWFuZF9vaygKKwlbICdwZ19jb21iaW5lYmFja3VwJywg JGJhY2t1cDFwYXRoLCAkYmFja3VwMnBhdGgsICctbycsICRzeW50aGV0aWMxMnBhdGggXSwKKwki Y2FuIGNvbWJpbmUgMiBtYXRjaGluZyBiYWNrdXBzIik7CisKKyMgQ2FuIGNvbWJpbmUgcmVzdWx0 IG9mIHByZXZpb3VzIHN0ZXAgd2l0aCBzZWNvbmQgaW5jcmVtZW50YWwuCiskbm9kZTEtPmNvbW1h bmRfb2soCisJWyAncGdfY29tYmluZWJhY2t1cCcsICRzeW50aGV0aWMxMnBhdGgsICRiYWNrdXAz cGF0aCwgJy1vJywgJHJlc3VsdHBhdGggXSwKKwkiY2FuIGNvbWJpbmUgc3ludGhldGljIGJhY2t1 cCB3aXRoIGxhdGVyIGluY3JlbWVudGFsIik7CitybXRyZWUoJHJlc3VsdHBhdGgpOworCisjIENh bid0IGNvbWJpbmUgcmVzdWx0IG9mIDErMiB3aXRoIDIuCiskbm9kZTEtPmNvbW1hbmRfZmFpbHNf bGlrZSgKKwlbICdwZ19jb21iaW5lYmFja3VwJywgJHN5bnRoZXRpYzEycGF0aCwgJGJhY2t1cDJw YXRoLCAnLW8nLCAkcmVzdWx0cGF0aCBdLAorCXFyL3N0YXJ0cyBhdCBMU04uKmJ1dCBleHBlY3Rl ZC8sCisJImNhbid0IGNvbWJpbmUgc3ludGhldGljIGJhY2t1cCB3aXRoIGluY2x1ZGVkIGluY3Jl bWVudGFsIik7CisKKyMgT0ssIHRoYXQncyBhbGwuCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5jIGIvc3JjL2Jpbi9w Z19jb21iaW5lYmFja3VwL3dyaXRlX21hbmlmZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uODIxNjAxMzRkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdf Y29tYmluZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5jCkBAIC0wLDAgKzEsMjkzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBXcml0ZSBhIG5ldyBiYWNrdXAgbWFuaWZlc3QuCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9iaW4vcGdfY29tYmluZWJh Y2t1cC93cml0ZV9tYW5pZmVzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRp bWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9o ZWxwZXIuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9u L2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgImxvYWRf bWFuaWZlc3QuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIndyaXRlX21h bmlmZXN0LmgiCisKK3N0cnVjdCBtYW5pZmVzdF93cml0ZXIKK3sKKwljaGFyCQlwYXRobmFtZVtN QVhQR1BBVEhdOworCWludAkJCWZkOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlib29sCQlmaXJz dF9maWxlOworCWJvb2wJCXN0aWxsX2NoZWNrc3VtbWluZzsKKwlwZ19jaGVja3N1bV9jb250ZXh0 IG1hbmlmZXN0X2N0eDsKK307CisKK3N0YXRpYyB2b2lkIGVzY2FwZV9qc29uKFN0cmluZ0luZm8g YnVmLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIHZvaWQgZmx1c2hfbWFuaWZlc3QobWFuaWZl c3Rfd3JpdGVyICptd3JpdGVyKTsKK3N0YXRpYyBzaXplX3QgaGV4X2VuY29kZShjb25zdCB1aW50 OCAqc3JjLCBzaXplX3QgbGVuLCBjaGFyICpkc3QpOworCisvKgorICogQ3JlYXRlIGEgbmV3IGJh Y2t1cCBtYW5pZmVzdCB3cml0ZXIuCisgKgorICogVGhlIGJhY2t1cCBtYW5pZmVzdCB3aWxsIGJl IHdyaXR0ZW4gaW50byBhIGZpbGUgbmFtZWQgYmFja3VwX21hbmlmZXN0CisgKiBpbiB0aGUgc3Bl Y2lmaWVkIGRpcmVjdG9yeS4KKyAqLworbWFuaWZlc3Rfd3JpdGVyICoKK2NyZWF0ZV9tYW5pZmVz dF93cml0ZXIoY2hhciAqZGlyZWN0b3J5KQoreworCW1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciA9 IHBnX21hbGxvYyhzaXplb2YobWFuaWZlc3Rfd3JpdGVyKSk7CisKKwlzbnByaW50Zihtd3JpdGVy LT5wYXRobmFtZSwgTUFYUEdQQVRILCAiJXMvYmFja3VwX21hbmlmZXN0IiwgZGlyZWN0b3J5KTsK Kwltd3JpdGVyLT5mZCA9IC0xOworCWluaXRTdHJpbmdJbmZvKCZtd3JpdGVyLT5idWYpOworCW13 cml0ZXItPmZpcnN0X2ZpbGUgPSB0cnVlOworCW13cml0ZXItPnN0aWxsX2NoZWNrc3VtbWluZyA9 IHRydWU7CisJcGdfY2hlY2tzdW1faW5pdCgmbXdyaXRlci0+bWFuaWZlc3RfY3R4LCBDSEVDS1NV TV9UWVBFX1NIQTI1Nik7CisKKwlhcHBlbmRTdHJpbmdJbmZvKCZtd3JpdGVyLT5idWYsCisJCQkJ CSAieyBcIlBvc3RncmVTUUwtQmFja3VwLU1hbmlmZXN0LVZlcnNpb25cIjogMSxcbiIKKwkJCQkJ ICJcIkZpbGVzXCI6IFsiKTsKKworCXJldHVybiBtd3JpdGVyOworfQorCisvKgorICogQWRkIGFu IGVudHJ5IGZvciBhIGZpbGUgdG8gYSBiYWNrdXAgbWFuaWZlc3QuCisgKgorICogVGhpcyBpcyB2 ZXJ5IHNpbWlsYXIgdG8gdGhlIGJhY2tlbmQncyBBZGRGaWxlVG9CYWNrdXBNYW5pZmVzdCwgYnV0 CisgKiB2YXJpb3VzIGFkanVzdG1lbnRzIGFyZSByZXF1aXJlZCBkdWUgdG8gZnJvbnRlbmQvYmFj a2VuZCBkaWZmZXJlbmNlcworICogYW5kIG90aGVyIGRldGFpbHMuCisgKi8KK3ZvaWQKK2FkZF9m aWxlX3RvX21hbmlmZXN0KG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwgY29uc3QgY2hhciAqbWFu aWZlc3RfcGF0aCwKKwkJCQkJIHNpemVfdCBzaXplLCBwZ190aW1lX3QgbXRpbWUsCisJCQkJCSBw Z19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGUsCisJCQkJCSBpbnQgY2hlY2tzdW1fbGVuZ3Ro LAorCQkJCQkgdWludDggKmNoZWNrc3VtX3BheWxvYWQpCit7CisJaW50CQkJcGF0aGxlbiA9IHN0 cmxlbihtYW5pZmVzdF9wYXRoKTsKKworCWlmIChtd3JpdGVyLT5maXJzdF9maWxlKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJm13cml0ZXItPmJ1ZiwgJ1xuJyk7CisJCW13cml0ZXItPmZp cnN0X2ZpbGUgPSBmYWxzZTsKKwl9CisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZt d3JpdGVyLT5idWYsICIsXG4iKTsKKworCWlmIChwZ19lbmNvZGluZ192ZXJpZnltYnN0cihQR19V VEY4LCBtYW5pZmVzdF9wYXRoLCBwYXRobGVuKSA9PSBwYXRobGVuKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAieyBcIlBhdGhcIjogIik7CisJCWVzY2FwZV9q c29uKCZtd3JpdGVyLT5idWYsIG1hbmlmZXN0X3BhdGgpOworCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZtd3JpdGVyLT5idWYsICIsICIpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZtd3JpdGVyLT5idWYsICJ7IFwiRW5jb2RlZC1QYXRoXCI6IFwiIik7CisJCWVu bGFyZ2VTdHJpbmdJbmZvKCZtd3JpdGVyLT5idWYsIDIgKiBwYXRobGVuKTsKKwkJbXdyaXRlci0+ YnVmLmxlbiArPSBoZXhfZW5jb2RlKChjb25zdCB1aW50OCAqKSBtYW5pZmVzdF9wYXRoLCBwYXRo bGVuLAorCQkJCQkJCQkJICAgJm13cml0ZXItPmJ1Zi5kYXRhW213cml0ZXItPmJ1Zi5sZW5dKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAiXCIsICIpOworCX0KKwor CWFwcGVuZFN0cmluZ0luZm8oJm13cml0ZXItPmJ1ZiwgIlwiU2l6ZVwiOiAlenUsICIsIHNpemUp OworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAiXCJMYXN0LU1vZGlm aWVkXCI6IFwiIik7CisJZW5sYXJnZVN0cmluZ0luZm8oJm13cml0ZXItPmJ1ZiwgMTI4KTsKKwlt d3JpdGVyLT5idWYubGVuICs9IHN0cmZ0aW1lKCZtd3JpdGVyLT5idWYuZGF0YVttd3JpdGVyLT5i dWYubGVuXSwgMTI4LAorCQkJCQkJCQkgIiVZLSVtLSVkICVIOiVNOiVTICVaIiwKKwkJCQkJCQkJ IGdtdGltZSgmbXRpbWUpKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmbXdyaXRlci0+YnVmLCAn IicpOworCisJaWYgKG13cml0ZXItPmJ1Zi5sZW4gPiAxMjggKiAxMDI0KQorCQlmbHVzaF9tYW5p ZmVzdChtd3JpdGVyKTsKKworCWlmIChjaGVja3N1bV9sZW5ndGggPiAwKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mbygmbXdyaXRlci0+YnVmLAorCQkJCQkJICIsIFwiQ2hlY2tzdW0tQWxnb3JpdGht XCI6IFwiJXNcIiwgXCJDaGVja3N1bVwiOiBcIiIsCisJCQkJCQkgcGdfY2hlY2tzdW1fdHlwZV9u YW1lKGNoZWNrc3VtX3R5cGUpKTsKKworCQllbmxhcmdlU3RyaW5nSW5mbygmbXdyaXRlci0+YnVm LCAyICogY2hlY2tzdW1fbGVuZ3RoKTsKKwkJbXdyaXRlci0+YnVmLmxlbiArPSBoZXhfZW5jb2Rl KGNoZWNrc3VtX3BheWxvYWQsIGNoZWNrc3VtX2xlbmd0aCwKKwkJCQkJCQkJCSAgICZtd3JpdGVy LT5idWYuZGF0YVttd3JpdGVyLT5idWYubGVuXSk7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Jm13cml0ZXItPmJ1ZiwgJyInKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZtd3Jp dGVyLT5idWYsICIgfSIpOworCisJaWYgKG13cml0ZXItPmJ1Zi5sZW4gPiAxMjggKiAxMDI0KQor CQlmbHVzaF9tYW5pZmVzdChtd3JpdGVyKTsKK30KKworLyoKKyAqIEZpbmFsaXplIHRoZSBiYWNr dXBfbWFuaWZlc3QuCisgKi8KK3ZvaWQKK2ZpbmFsaXplX21hbmlmZXN0KG1hbmlmZXN0X3dyaXRl ciAqbXdyaXRlciwKKwkJCQkgIG1hbmlmZXN0X3dhbF9yYW5nZSAqZmlyc3Rfd2FsX3JhbmdlKQor eworCXVpbnQ4CQljaGVja3N1bWJ1ZltQR19TSEEyNTZfRElHRVNUX0xFTkdUSF07CisJaW50CQkJ bGVuOworCW1hbmlmZXN0X3dhbF9yYW5nZSAqd2FsX3JhbmdlOworCisJLyogVGVybWluYXRlIHRo ZSBsaXN0IG9mIGZpbGVzLiAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJm13cml0ZXItPmJ1 ZiwgIlxuXSxcbiIpOworCisJLyogU3RhcnQgYSBsaXN0IG9mIExTTiByYW5nZXMuICovCisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAiXCJXQUwtUmFuZ2VzXCI6IFtcbiIp OworCisJZm9yICh3YWxfcmFuZ2UgPSBmaXJzdF93YWxfcmFuZ2U7IHdhbF9yYW5nZSAhPSBOVUxM OworCQkgd2FsX3JhbmdlID0gd2FsX3JhbmdlLT5uZXh0KQorCQlhcHBlbmRTdHJpbmdJbmZvKCZt d3JpdGVyLT5idWYsCisJCQkJCQkgIiVzeyBcIlRpbWVsaW5lXCI6ICV1LCBcIlN0YXJ0LUxTTlwi OiBcIiVYLyVYXCIsIFwiRW5kLUxTTlwiOiBcIiVYLyVYXCIgfSIsCisJCQkJCQkgd2FsX3Jhbmdl ID09IGZpcnN0X3dhbF9yYW5nZSA/ICIiIDogIixcbiIsCisJCQkJCQkgd2FsX3JhbmdlLT50bGks CisJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHdhbF9yYW5nZS0+c3RhcnRfbHNuKSwKKwkJCQkJCSBM U05fRk9STUFUX0FSR1Mod2FsX3JhbmdlLT5lbmRfbHNuKSk7CisKKwkvKiBUZXJtaW5hdGUgdGhl IGxpc3Qgb2YgV0FMIHJhbmdlcy4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZtd3JpdGVy LT5idWYsICJcbl0sXG4iKTsKKworCS8qIEZsdXNoIGFjY3VtdWxhdGVkIGRhdGEgYW5kIHVwZGF0 ZSBjaGVja3N1bSBjYWxjdWxhdGlvbi4gKi8KKwlmbHVzaF9tYW5pZmVzdChtd3JpdGVyKTsKKwor CS8qIENoZWNrc3VtIG9ubHkgaW5jbHVkZXMgZGF0YSB1cCB0byB0aGlzIHBvaW50LiAqLworCW13 cml0ZXItPnN0aWxsX2NoZWNrc3VtbWluZyA9IGZhbHNlOworCisJLyogQ29tcHV0ZSBhbmQgaW5z ZXJ0IG1hbmlmZXN0IGNoZWNrc3VtLiAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJm13cml0 ZXItPmJ1ZiwgIlwiTWFuaWZlc3QtQ2hlY2tzdW1cIjogXCIiKTsKKwllbmxhcmdlU3RyaW5nSW5m bygmbXdyaXRlci0+YnVmLCAyICogUEdfU0hBMjU2X0RJR0VTVF9TVFJJTkdfTEVOR1RIKTsKKwls ZW4gPSBwZ19jaGVja3N1bV9maW5hbCgmbXdyaXRlci0+bWFuaWZlc3RfY3R4LCBjaGVja3N1bWJ1 Zik7CisJQXNzZXJ0KGxlbiA9PSBQR19TSEEyNTZfRElHRVNUX0xFTkdUSCk7CisJbXdyaXRlci0+ YnVmLmxlbiArPQorCQloZXhfZW5jb2RlKGNoZWNrc3VtYnVmLCBsZW4sICZtd3JpdGVyLT5idWYu ZGF0YVttd3JpdGVyLT5idWYubGVuXSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRl ci0+YnVmLCAiXCJ9XG4iKTsKKworCS8qIEZsdXNoIHRoZSBsYXN0IG1hbmlmZXN0IGNoZWNrc3Vt IGl0c2VsZi4gKi8KKwlmbHVzaF9tYW5pZmVzdChtd3JpdGVyKTsKKworCS8qIENsb3NlIHRoZSBm aWxlLiAqLworCWlmIChjbG9zZShtd3JpdGVyLT5mZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBcIiVzXCI6ICVtIiwgbXdyaXRlci0+cGF0aG5hbWUpOworCW13cml0ZXItPmZk ID0gLTE7Cit9CisKKy8qCisgKiBQcm9kdWNlIGEgSlNPTiBzdHJpbmcgbGl0ZXJhbCwgcHJvcGVy bHkgZXNjYXBpbmcgY2hhcmFjdGVycyBpbiB0aGUgdGV4dC4KKyAqLworc3RhdGljIHZvaWQKK2Vz Y2FwZV9qc29uKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hh ciAqcDsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAnIicpOworCWZvciAocCA9 IHN0cjsgKnA7IHArKykKKwl7CisJCXN3aXRjaCAoKnApCisJCXsKKwkJCWNhc2UgJ1xiJzoKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcYiIpOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnXGYnOgorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXFxmIik7CisJCQkJYnJl YWs7CisJCQljYXNlICdcbic6CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcXG4i KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1xyJzoKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIlxcciIpOworCQkJCWJyZWFrOworCQkJY2FzZSAnXHQnOgorCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCAiXFx0Iik7CisJCQkJYnJlYWs7CisJCQljYXNlICciJzoKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcXCIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J1xcJzoKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcXFwiKTsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKCh1bnNpZ25lZCBjaGFyKSAqcCA8ICcgJykKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICJcXHUlMDR4IiwgKGludCkgKnApOworCQkJCWVsc2UKKwkJ CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpwKTsKKwkJCQlicmVhazsKKwkJfQor CX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgJyInKTsKK30KKworLyoKKyAqIEZs dXNoIHdoYXRldmVyIHBvcnRpb24gb2YgdGhlIGJhY2t1cCBtYW5pZmVzdCB3ZSBoYXZlIGdlbmVy YXRlZCBhbmQKKyAqIGJ1ZmZlcmVkIGluIG1lbW9yeSBvdXQgdG8gYSBmaWxlIG9uIGRpc2suCisg KgorICogVGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgZmls ZS4gQWZ0ZXIgdGhhdCwgd2UKKyAqIGtlZXAgaXQgb3BlbiBhbmQganVzdCBhcHBlbmQgbW9yZSBk YXRhLgorICovCitzdGF0aWMgdm9pZAorZmx1c2hfbWFuaWZlc3QobWFuaWZlc3Rfd3JpdGVyICpt d3JpdGVyKQoreworCWNoYXIJCXBhdGhuYW1lW01BWFBHUEFUSF07CisKKwlpZiAobXdyaXRlci0+ ZmQgPT0gLTEgJiYKKwkJKG13cml0ZXItPmZkID0gb3Blbihtd3JpdGVyLT5wYXRobmFtZSwKKwkJ CQkJCQlPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBQR19CSU5BUlksCisJCQkJCQkJcGdf ZmlsZV9jcmVhdGVfbW9kZSkpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUg XCIlc1wiOiAlbSIsIG13cml0ZXItPnBhdGhuYW1lKTsKKworCWlmIChtd3JpdGVyLT5idWYubGVu ID4gMCkKKwl7CisJCXNzaXplX3QJCXdiOworCisJCXdiID0gd3JpdGUobXdyaXRlci0+ZmQsIG13 cml0ZXItPmJ1Zi5kYXRhLCBtd3JpdGVyLT5idWYubGVuKTsKKwkJaWYgKHdiICE9IG13cml0ZXIt PmJ1Zi5sZW4pCisJCXsKKwkJCWlmICh3YiA8IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSBcIiVzXCI6ICVtIiwgbXdyaXRlci0+cGF0aG5hbWUpOworCQkJZWxzZQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6IHdyb3RlIG9ubHkgJWQgb2YgJWQgYnl0 ZXMiLAorCQkJCQkJIHBhdGhuYW1lLCAoaW50KSB3YiwgbXdyaXRlci0+YnVmLmxlbik7CisJCX0K KworCQlpZiAobXdyaXRlci0+c3RpbGxfY2hlY2tzdW1taW5nKQorCQkJcGdfY2hlY2tzdW1fdXBk YXRlKCZtd3JpdGVyLT5tYW5pZmVzdF9jdHgsCisJCQkJCQkJICAgKHVpbnQ4ICopIG13cml0ZXIt PmJ1Zi5kYXRhLAorCQkJCQkJCSAgIG13cml0ZXItPmJ1Zi5sZW4pOworCQlyZXNldFN0cmluZ0lu Zm8oJm13cml0ZXItPmJ1Zik7CisJfQorfQorCisvKgorICogRW5jb2RlIGJ5dGVzIHVzaW5nIHR3 byBoZXhhZGVtaWNhbCBkaWdpdHMgZm9yIGVhY2ggb25lLgorICovCitzdGF0aWMgc2l6ZV90Cito ZXhfZW5jb2RlKGNvbnN0IHVpbnQ4ICpzcmMsIHNpemVfdCBsZW4sIGNoYXIgKmRzdCkKK3sKKwlj b25zdCB1aW50OCAqZW5kID0gc3JjICsgbGVuOworCisJd2hpbGUgKHNyYyA8IGVuZCkKKwl7CisJ CXVuc2lnbmVkCW4xID0gKCpzcmMgPj4gNCkgJiAweEY7CisJCXVuc2lnbmVkCW4yID0gKnNyYyAm IDB4RjsKKworCQkqZHN0KysgPSBuMSA8IDEwID8gJzAnICsgbjEgOiAnYScgKyBuMSAtIDEwOwor CQkqZHN0KysgPSBuMiA8IDEwID8gJzAnICsgbjIgOiAnYScgKyBuMiAtIDEwOworCQkrK3NyYzsK Kwl9CisKKwlyZXR1cm4gbGVuICogMjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5oIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3dyaXRl X21hbmlmZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOGZkN2Zl MDJjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC93cml0ZV9t YW5pZmVzdC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFdy aXRlIGEgbmV3IGJhY2t1cCBtYW5pZmVzdC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3dyaXRlX21hbmlmZXN0LmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXUklURV9NQU5JRkVTVF9ICisj ZGVmaW5lIFdSSVRFX01BTklGRVNUX0gKKworI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxw ZXIuaCIKKyNpbmNsdWRlICJwZ3RpbWUuaCIKKworc3RydWN0IG1hbmlmZXN0X3dhbF9yYW5nZTsK Kworc3RydWN0IG1hbmlmZXN0X3dyaXRlcjsKK3R5cGVkZWYgc3RydWN0IG1hbmlmZXN0X3dyaXRl ciBtYW5pZmVzdF93cml0ZXI7CisKK2V4dGVybiBtYW5pZmVzdF93cml0ZXIgKmNyZWF0ZV9tYW5p ZmVzdF93cml0ZXIoY2hhciAqZGlyZWN0b3J5KTsKK2V4dGVybiB2b2lkIGFkZF9maWxlX3RvX21h bmlmZXN0KG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKm1h bmlmZXN0X3BhdGgsCisJCQkJCQkJCSBzaXplX3Qgc2l6ZSwgcGdfdGltZV90IG10aW1lLAorCQkJ CQkJCQkgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAorCQkJCQkJCQkgaW50IGNoZWNr c3VtX2xlbmd0aCwKKwkJCQkJCQkJIHVpbnQ4ICpjaGVja3N1bV9wYXlsb2FkKTsKK2V4dGVybiB2 b2lkIGZpbmFsaXplX21hbmlmZXN0KG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkg IHN0cnVjdCBtYW5pZmVzdF93YWxfcmFuZ2UgKmZpcnN0X3dhbF9yYW5nZSk7CisKKyNlbmRpZgkJ CQkJCQkvKiBXUklURV9NQU5JRkVTVF9IICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0 d2FsL3BnX3Jlc2V0d2FsLmMgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKaW5k ZXggM2FlM2ZjMDZkZi4uNTQwN2Y1MWE0ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdh bC9wZ19yZXNldHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwpA QCAtODUsNiArODUsNyBAQCBzdGF0aWMgdm9pZCBSZXdyaXRlQ29udHJvbEZpbGUodm9pZCk7CiBz dGF0aWMgdm9pZCBGaW5kRW5kT2ZYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgS2lsbEV4aXN0aW5n WExPRyh2b2lkKTsKIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ0FyY2hpdmVTdGF0dXModm9pZCk7 CitzdGF0aWMgdm9pZCBLaWxsRXhpc3RpbmdXQUxTdW1tYXJpZXModm9pZCk7CiBzdGF0aWMgdm9p ZCBXcml0ZUVtcHR5WExPRyh2b2lkKTsKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOwogCkBAIC00 OTMsNiArNDk0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCVJld3JpdGVDb250 cm9sRmlsZSgpOwogCUtpbGxFeGlzdGluZ1hMT0coKTsKIAlLaWxsRXhpc3RpbmdBcmNoaXZlU3Rh dHVzKCk7CisJS2lsbEV4aXN0aW5nV0FMU3VtbWFyaWVzKCk7CiAJV3JpdGVFbXB0eVhMT0coKTsK IAogCXByaW50ZihfKCJXcml0ZS1haGVhZCBsb2cgcmVzZXRcbiIpKTsKQEAgLTEwMzQsNiArMTAz Niw0MCBAQCBLaWxsRXhpc3RpbmdBcmNoaXZlU3RhdHVzKHZvaWQpCiAJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBBUkNIU1RBVERJUik7CiB9CiAKKy8q CisgKiBSZW1vdmUgZXhpc3RpbmcgV0FMIHN1bW1hcnkgZmlsZXMKKyAqLworc3RhdGljIHZvaWQK K0tpbGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lkKQoreworI2RlZmluZSBXQUxTVU1NQVJZRElS IFhMT0dESVIJIi9zdW1tYXJpZXMiCisjZGVmaW5lIFdBTFNVTU1BUllfTkhFWENIQVJTCTQwCisK KwlESVIJCSAgICp4bGRpcjsKKwlzdHJ1Y3QgZGlyZW50ICp4bGRlOworCWNoYXIJCXBhdGhbTUFY UEdQQVRIICsgc2l6ZW9mKFdBTFNVTU1BUllESVIpXTsKKworCXhsZGlyID0gb3BlbmRpcihXQUxT VU1NQVJZRElSKTsKKwlpZiAoeGxkaXIgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgV0FMU1VNTUFSWURJUik7CisKKwl3aGlsZSAoZXJy bm8gPSAwLCAoeGxkZSA9IHJlYWRkaXIoeGxkaXIpKSAhPSBOVUxMKQorCXsKKwkJaWYgKHN0cnNw bih4bGRlLT5kX25hbWUsICIwMTIzNDU2Nzg5QUJDREVGIikgPT0gV0FMU1VNTUFSWV9OSEVYQ0hB UlMgJiYKKwkJCXN0cmNtcCh4bGRlLT5kX25hbWUgKyBXQUxTVU1NQVJZX05IRVhDSEFSUywgIi5z dW1tYXJ5IikgPT0gMCkKKwkJeworCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMv JXMiLCBXQUxTVU1NQVJZRElSLCB4bGRlLT5kX25hbWUpOworCQkJaWYgKHVubGluayhwYXRoKSA8 IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBkZWxldGUgZmlsZSBcIiVzXCI6ICVtIiwgcGF0 aCk7CisJCX0KKwl9CisKKwlpZiAoZXJybm8pCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBk aXJlY3RvcnkgXCIlc1wiOiAlbSIsIFdBTFNVTU1BUllESVIpOworCisJaWYgKGNsb3NlZGlyKHhs ZGlyKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs IEFSQ0hTVEFURElSKTsKK30KIAogLyoKICAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgZmlsZSwgY29u dGFpbmluZyBvbmx5IHRoZSBjaGVja3BvaW50IHJlY29yZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2diYWNrdXAuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nYmFja3VwLmgK aW5kZXggMTYxMTM1ODEzNy4uOTBlMDRjYWQ1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2diYWNrdXAuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2JhY2t1cC5oCkBA IC0yOCw2ICsyOCw4IEBAIHR5cGVkZWYgc3RydWN0IEJhY2t1cFN0YXRlCiAJWExvZ1JlY1B0cglj aGVja3BvaW50bG9jOwkvKiBsYXN0IGNoZWNrcG9pbnQgbG9jYXRpb24gKi8KIAlwZ190aW1lX3QJ c3RhcnR0aW1lOwkJLyogYmFja3VwIHN0YXJ0IHRpbWUgKi8KIAlib29sCQlzdGFydGVkX2luX3Jl Y292ZXJ5OwkvKiBiYWNrdXAgc3RhcnRlZCBpbiByZWNvdmVyeT8gKi8KKwlYTG9nUmVjUHRyCWlz dGFydHBvaW50OwkvKiBpbmNyZW1lbnRhbCBiYXNlZCBvbiBiYWNrdXAgYXQgdGhpcyBMU04gKi8K KwlUaW1lTGluZUlECWlzdGFydHRsaTsJCS8qIGluY3JlbWVudGFsIGJhc2VkIG9uIGJhY2t1cCBv biB0aGlzIFRMSSAqLwogCiAJLyogRmllbGRzIHNhdmVkIGF0IHRoZSBlbmQgb2YgYmFja3VwICov CiAJWExvZ1JlY1B0cglzdG9wcG9pbnQ7CQkvKiBiYWNrdXAgc3RvcCBXQUwgbG9jYXRpb24gKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwLmggYi9zcmMvaW5jbHVk ZS9iYWNrdXAvYmFzZWJhY2t1cC5oCmluZGV4IDE0MzJkOWMyMDYuLjM0NWJkMjI1MzQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwLmgKKysrIGIvc3JjL2luY2x1ZGUv YmFja3VwL2Jhc2ViYWNrdXAuaApAQCAtMzQsNiArMzQsOSBAQCB0eXBlZGVmIHN0cnVjdAogCWlu dDY0CQlzaXplOwkJCS8qIHRvdGFsIHNpemUgYXMgc2VudDsgLTEgaWYgbm90IGtub3duICovCiB9 IHRhYmxlc3BhY2VpbmZvOwogCi1leHRlcm4gdm9pZCBTZW5kQmFzZUJhY2t1cChCYXNlQmFja3Vw Q21kICpjbWQpOworc3RydWN0IEluY3JlbWVudGFsQmFja3VwSW5mbzsKKworZXh0ZXJuIHZvaWQg U2VuZEJhc2VCYWNrdXAoQmFzZUJhY2t1cENtZCAqY21kLAorCQkJCQkJICAgc3RydWN0IEluY3Jl bWVudGFsQmFja3VwSW5mbyAqaWIpOwogCiAjZW5kaWYJCQkJCQkJLyogX0JBU0VCQUNLVVBfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwu aCBiL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwX2luY3JlbWVudGFsLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZGU5OTExNzU5OQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwX2luY3JlbWVudGFsLmgKQEAgLTAsMCAr MSw1NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYmFzZWJhY2t1cF9pbmNyZW1lbnRh bC5oCisgKgkgIEFQSSBmb3IgaW5jcmVtZW50YWwgYmFja3VwIHN1cHBvcnQKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9iYWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRh bC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgQkFTRUJBQ0tVUF9JTkNS RU1FTlRBTF9ICisjZGVmaW5lIEJBU0VCQUNLVVBfSU5DUkVNRU5UQUxfSAorCisjaW5jbHVkZSAi YWNjZXNzL3hsb2diYWNrdXAuaCIKKyNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvYmxvY2suaCIKKyNpbmNsdWRlICJ1dGlscy9wYWxsb2MuaCIKKworI2RlZmlu ZSBJTkNSRU1FTlRBTF9NQUdJQwkJCTB4ZDNhZTFmMGQKKwordHlwZWRlZiBlbnVtCit7CisJQkFD S19VUF9GSUxFX0ZVTExZLAorCUJBQ0tfVVBfRklMRV9JTkNSRU1FTlRBTExZCit9IEZpbGVCYWNr dXBNZXRob2Q7CisKK3N0cnVjdCBJbmNyZW1lbnRhbEJhY2t1cEluZm87Cit0eXBlZGVmIHN0cnVj dCBJbmNyZW1lbnRhbEJhY2t1cEluZm8gSW5jcmVtZW50YWxCYWNrdXBJbmZvOworCitleHRlcm4g SW5jcmVtZW50YWxCYWNrdXBJbmZvICpDcmVhdGVJbmNyZW1lbnRhbEJhY2t1cEluZm8oTWVtb3J5 Q29udGV4dCk7CisKK2V4dGVybiB2b2lkIEFwcGVuZEluY3JlbWVudGFsTWFuaWZlc3REYXRhKElu Y3JlbWVudGFsQmFja3VwSW5mbyAqaWIsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICpkYXRhLAor CQkJCQkJCQkJCSAgaW50IGxlbik7CitleHRlcm4gdm9pZCBGaW5hbGl6ZUluY3JlbWVudGFsTWFu aWZlc3QoSW5jcmVtZW50YWxCYWNrdXBJbmZvICppYik7CisKK2V4dGVybiB2b2lkIFByZXBhcmVG b3JJbmNyZW1lbnRhbEJhY2t1cChJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliLAorCQkJCQkJCQkJ CUJhY2t1cFN0YXRlICpiYWNrdXBfc3RhdGUpOworCitleHRlcm4gY2hhciAqR2V0SW5jcmVtZW50 YWxGaWxlUGF0aChPaWQgZGJvaWQsIE9pZCBzcGNvaWQsCisJCQkJCQkJCQlSZWxGaWxlTnVtYmVy IHJlbGZpbGVudW1iZXIsCisJCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtudW0sIHVuc2lnbmVkIHNl Z25vKTsKK2V4dGVybiBGaWxlQmFja3VwTWV0aG9kIEdldEZpbGVCYWNrdXBNZXRob2QoSW5jcmVt ZW50YWxCYWNrdXBJbmZvICppYiwKKwkJCQkJCQkJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJ CQkJCQkJT2lkIGRib2lkLCBPaWQgc3Bjb2lkLAorCQkJCQkJCQkJCQlSZWxGaWxlTnVtYmVyIHJl bGZpbGVudW1iZXIsCisJCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJCQkJ dW5zaWduZWQgc2Vnbm8sIHNpemVfdCBzaXplLAorCQkJCQkJCQkJCQl1bnNpZ25lZCAqbnVtX2Js b2Nrc19yZXF1aXJlZCwKKwkJCQkJCQkJCQkJQmxvY2tOdW1iZXIgKnJlbGF0aXZlX2Jsb2NrX251 bWJlcnMsCisJCQkJCQkJCQkJCXVuc2lnbmVkICp0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCk7Citl eHRlcm4gc2l6ZV90IEdldEluY3JlbWVudGFsRmlsZVNpemUodW5zaWduZWQgbnVtX2Jsb2Nrc19y ZXF1aXJlZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVwbG5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaAppbmRleCA1MTQyYTA4NzI5Li5j OTg5NjFjMzI5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaApAQCAtMTA4LDQgKzEwOCwxMyBAQCB0eXBl ZGVmIHN0cnVjdCBUaW1lTGluZUhpc3RvcnlDbWQKIAlUaW1lTGluZUlECXRpbWVsaW5lOwogfSBU aW1lTGluZUhpc3RvcnlDbWQ7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlVUExP QURfTUFOSUZFU1QgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBl ZGVmIHN0cnVjdCBVcGxvYWRNYW5pZmVzdENtZAoreworCU5vZGVUYWcJCXR5cGU7Cit9IFVwbG9h ZE1hbmlmZXN0Q21kOworCiAjZW5kaWYJCQkJCQkJLyogUkVQTE5PREVTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gYi9zcmMvdGVzdC9w ZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCmluZGV4IGEwMjAzNzc3NjEuLjQ2Y2IyYTY1 NTAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0K KysrIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQpAQCAtNzc5LDYg Kzc3OSwxMCBAQCBhIHRhci1mb3JtYXQgYmFja3VwLCBwYXNzIHRoZSBuYW1lIG9mIHRoZSB0YXIg cHJvZ3JhbSB0byB1c2UgaW4gdGhlCiBrZXl3b3JkIHBhcmFtZXRlciB0YXJfcHJvZ3JhbS4gIE5v dGUgdGhhdCB0YWJsZXNwYWNlIHRhciBmaWxlcyBhcmVuJ3QKIGhhbmRsZWQgaGVyZS4KIAorVG8g cmVzdG9yZSBmcm9tIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgcGFzcyB0aGUgcGFyYW1ldGVyIGNv bWJpbmVfd2l0aF9wcmlvcgorYXMgYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgcHJpb3IgYmFj a3VwIG5hbWVzIHdpdGggd2hpY2ggdGhpcyBiYWNrdXAKK2lzIHRvIGJlIGNvbWJpbmVkIHVzaW5n IHBnX2NvbWJpbmViYWNrdXAuCisKIFN0cmVhbWluZyByZXBsaWNhdGlvbiBjYW4gYmUgZW5hYmxl ZCBvbiB0aGlzIG5vZGUgYnkgcGFzc2luZyB0aGUga2V5d29yZAogcGFyYW1ldGVyIGhhc19zdHJl YW1pbmcgPT4gMS4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgogCkBAIC04MTYsNyArODIw LDIyIEBAIHN1YiBpbml0X2Zyb21fYmFja3VwCiAJbWtkaXIgJHNlbGYtPmFyY2hpdmVfZGlyOwog CiAJbXkgJGRhdGFfcGF0aCA9ICRzZWxmLT5kYXRhX2RpcjsKLQlpZiAoZGVmaW5lZCAkcGFyYW1z e3Rhcl9wcm9ncmFtfSkKKwlpZiAoZGVmaW5lZCAkcGFyYW1ze2NvbWJpbmVfd2l0aF9wcmlvcn0p CisJeworCQlteSBAcHJpb3JfYmFja3VwcyA9IEB7JHBhcmFtc3tjb21iaW5lX3dpdGhfcHJpb3J9 fTsKKwkJbXkgQHByaW9yX2JhY2t1cF9wYXRoOworCisJCWZvciBteSAkcHJpb3JfYmFja3VwX25h bWUgKEBwcmlvcl9iYWNrdXBzKQorCQl7CisJCQlwdXNoIEBwcmlvcl9iYWNrdXBfcGF0aCwKKwkJ CQkkcm9vdF9ub2RlLT5iYWNrdXBfZGlyIC4gJy8nIC4gJHByaW9yX2JhY2t1cF9uYW1lOworCQl9 CisKKwkJbG9jYWwgJUVOViA9ICRzZWxmLT5fZ2V0X2VudigpOworCQlQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6c3lzdGVtX29yX2JhaWwoJ3BnX2NvbWJpbmViYWNrdXAnLCAnLWQnLAorCQkJQHBy aW9yX2JhY2t1cF9wYXRoLCAkYmFja3VwX3BhdGgsICctbycsICRkYXRhX3BhdGgpOworCX0KKwll bHNpZiAoZGVmaW5lZCAkcGFyYW1ze3Rhcl9wcm9ncmFtfSkKIAl7CiAJCW1rZGlyKCRkYXRhX3Bh dGgpOwogCQlQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6c3lzdGVtX29yX2JhaWwoJHBhcmFtc3t0 YXJfcHJvZ3JhbX0sICd4ZicsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDkzOTAwNDkz MTQuLmUzN2VmOWFhNzYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MDIzLDMgKzQw MjMsMTUgQEAgU3VtbWFyaXplclJlYWRMb2NhbFhMb2dQcml2YXRlCiBXYWxTdW1tYXJpemVyRGF0 YQogV2FsU3VtbWFyeUZpbGUKIFdhbFN1bW1hcnlJTworRmlsZUJhY2t1cE1ldGhvZAorSW5jcmVt ZW50YWxCYWNrdXBJbmZvCitVcGxvYWRNYW5pZmVzdENtZAorYmFja3VwX2ZpbGVfZW50cnkKK2Jh Y2t1cF93YWxfcmFuZ2UKK2NiX2NsZWFudXBfZGlyCitjYl9vcHRpb25zCitjYl90YWJsZXNwYWNl CitjYl90YWJsZXNwYWNlX21hcHBpbmcKK21hbmlmZXN0X2RhdGEKK21hbmlmZXN0X3dyaXRlcgor cmZpbGUKLS0gCjIuMzkuMyAoQXBwbGUgR2l0LTE0NSkKCg== --000000000000f974db060ccd558e Content-Type: application/octet-stream; name="v15-0006-Test-patch-Enable-summarize_wal-by-default.patch" Content-Disposition: attachment; filename="v15-0006-Test-patch-Enable-summarize_wal-by-default.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqba3wzd5 RnJvbSA5NjI0NzdmMTAwOWMwNGQzZTZmZTg1N2I1MzQxZWMzNmI1NDY2Yjk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTQgTm92IDIwMjMgMTM6NDk6MjggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSA2 LzZdIFRlc3QgcGF0Y2g6IEVuYWJsZSBzdW1tYXJpemVfd2FsIGJ5IGRlZmF1bHQuCgpUbyBhdm9p ZCB0ZXN0IGZhaWx1cmVzLCBtdXN0IHJlbW92ZSB0aGUgcHJvaGliaXRpb24gYWdhaW5zdCBydW5u aW5nCnN1bW1hcml6ZV93YWw9b2ZmIHdpdGggd2FsX2xldmVsPW1pbmltYWwsIGJlY2F1c2UgYSBi dW5jaCBvZiB0ZXN0cwpydW4gd2l0aCB3YWxfbGV2ZWw9bWluaW1hbC4KCk5vdCBmb3IgY29tbWl0 LgotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAgICAgICAg ICB8IDMgLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyAgICAgICAg ICAgICAgfCAyICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAg ICAgICAgICAgfCAyICstCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAwMV9zdHJlYW1fcmVwLnBsICAg ICAgICAgICAgICAgfCAyICsrCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1p dC5wbCAgICAgICAgICAgfCAzICsrKwogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjBfYXJjaGl2ZV9z dGF0dXMucGwgICAgICAgICAgIHwgMSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAzNV9zdGFuZGJ5 X2xvZ2ljYWxfZGVjb2RpbmcucGwgfCAxICsKIDcgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25z KCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXgg YjE2M2U4OWNiYi4uNTFkYzUxNzcxMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMK QEAgLTkzNyw5ICs5MzcsNiBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCWlmIChtYXhfd2FsX3NlbmRlcnMgPiAwICYmIHdhbF9sZXZlbCA9PSBXQUxfTEVWRUxfTUlO SU1BTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJXQUwgc3RyZWFtaW5nIChtYXhf d2FsX3NlbmRlcnMgPiAwKSByZXF1aXJlcyB3YWxfbGV2ZWwgXCJyZXBsaWNhXCIgb3IgXCJsb2dp Y2FsXCIiKSkpOwotCWlmIChzdW1tYXJpemVfd2FsICYmIHdhbF9sZXZlbCA9PSBXQUxfTEVWRUxf TUlOSU1BTCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJybXNnKCJXQUwgY2Fubm90IGJlIHN1 bW1hcml6ZWQgd2hlbiB3YWxfbGV2ZWwgaXMgXCJtaW5pbWFsXCIiKSkpOwogCiAJLyoKIAkgKiBP dGhlciBvbmUtdGltZSBpbnRlcm5hbCBzYW5pdHkgY2hlY2tzIGNhbiBnbyBoZXJlLCBpZiB0aGV5 IGFyZSBmYXN0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJp emVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCA5ZmEx NTUzNDllLi43MTAyNWI0M2I3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHN1bW1hcml6ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIu YwpAQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyBYTG9nUmVjUHRyIHJlZG9fcG9pbnRlcl9hdF9s YXN0X3N1bW1hcnlfcmVtb3ZhbCA9IEludmFsaWRYTG9nUmVjUHRyOwogLyoKICAqIEdVQyBwYXJh bWV0ZXJzCiAgKi8KLWJvb2wJCXN1bW1hcml6ZV93YWwgPSBmYWxzZTsKK2Jvb2wJCXN1bW1hcml6 ZV93YWwgPSB0cnVlOwogaW50CQkJd2FsX3N1bW1hcnlfa2VlcF90aW1lID0gMTAgKiAyNCAqIDYw OwogCiBzdGF0aWMgWExvZ1JlY1B0ciBHZXRMYXRlc3RMU04oVGltZUxpbmVJRCAqdGxpKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggOWY1OTQ0MDUyNi4uZjI0OWE5ZmFkNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTE3OTUsNyArMTc5NSw3IEBAIHN0 cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCQlOVUxMCiAJCX0sCiAJ CSZzdW1tYXJpemVfd2FsLAotCQlmYWxzZSwKKwkJdHJ1ZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAog CX0sCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDAxX3N0cmVhbV9yZXAucGwg Yi9zcmMvdGVzdC9yZWNvdmVyeS90LzAwMV9zdHJlYW1fcmVwLnBsCmluZGV4IDk1ZjliMGQ3NzIu LjBkMGU2M2I4ZGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDAxX3N0cmVhbV9y ZXAucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDFfc3RyZWFtX3JlcC5wbApAQCAtMTUs NiArMTUsOCBAQCBteSAkbm9kZV9wcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdwcmltYXJ5Jyk7CiAkbm9kZV9wcmltYXJ5LT5pbml0KAogCWFsbG93c19zdHJlYW1pbmcg PT4gMSwKIAlhdXRoX2V4dHJhID0+IFsgJy0tY3JlYXRlLXJvbGUnLCAncmVwbF9yb2xlJyBdKTsK KyMgV0FMIHN1bW1hcml6YXRpb24gY2FuIHBvc3Rwb25lIFdBTCByZWN5Y2xpbmcsIGxlYWRpbmcg dG8gdGVzdCBmYWlsdXJlcworJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJzdW1tYXJpemVfd2FsID0gb2ZmIik7CiAkbm9kZV9wcmltYXJ5LT5zdGFydDsKIG15 ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAnOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3Jl cGxzbG90X2xpbWl0LnBsCmluZGV4IDdkOTRmMTU3NzguLmE4YjM0MmJiOTggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCisrKyBiL3NyYy90ZXN0 L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCkBAIC0yMiw2ICsyMiw3IEBAICRub2Rl X3ByaW1hcnktPmFwcGVuZF9jb25mKAogbWluX3dhbF9zaXplID0gMk1CCiBtYXhfd2FsX3NpemUg PSA0TUIKIGxvZ19jaGVja3BvaW50cyA9IHllcworc3VtbWFyaXplX3dhbCA9IG9mZgogKSk7CiAk bm9kZV9wcmltYXJ5LT5zdGFydDsKICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LApAQCAtMjU2LDYgKzI1Nyw3IEBAICRub2RlX3ByaW1hcnkyLT5hcHBlbmRfY29uZigKIG1pbl93 YWxfc2l6ZSA9IDMyTUIKIG1heF93YWxfc2l6ZSA9IDMyTUIKIGxvZ19jaGVja3BvaW50cyA9IHll cworc3VtbWFyaXplX3dhbCA9IG9mZgogKSk7CiAkbm9kZV9wcmltYXJ5Mi0+c3RhcnQ7CiAkbm9k ZV9wcmltYXJ5Mi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCkBAIC0zMTAsNiArMzEyLDcgQEAgJG5v ZGVfcHJpbWFyeTMtPmFwcGVuZF9jb25mKAogCW1heF93YWxfc2l6ZSA9IDJNQgogCWxvZ19jaGVj a3BvaW50cyA9IHllcwogCW1heF9zbG90X3dhbF9rZWVwX3NpemUgPSAxTUIKKyAgICBzdW1tYXJp emVfd2FsID0gb2ZmCiAJKSk7CiAkbm9kZV9wcmltYXJ5My0+c3RhcnQ7CiAkbm9kZV9wcmltYXJ5 My0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90 LzAyMF9hcmNoaXZlX3N0YXR1cy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2FyY2hpdmVf c3RhdHVzLnBsCmluZGV4IGZhMjQxNTNkNGIuLmQwZDYyMjEzNjggMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlY292ZXJ5L3QvMDIwX2FyY2hpdmVfc3RhdHVzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDIwX2FyY2hpdmVfc3RhdHVzLnBsCkBAIC0xNSw2ICsxNSw3IEBAICRwcmltYXJ5LT5p bml0KAogCWhhc19hcmNoaXZpbmcgPT4gMSwKIAlhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOwogJHBy aW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnYXV0b3ZhY3V1bSA9IG9mZicp OworJHByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3VtbWFyaXplX3dh bCA9IG9mZicpOwogJHByaW1hcnktPnN0YXJ0OwogbXkgJHByaW1hcnlfZGF0YSA9ICRwcmltYXJ5 LT5kYXRhX2RpcjsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzVfc3RhbmRi eV9sb2dpY2FsX2RlY29kaW5nLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzVfc3RhbmRieV9s b2dpY2FsX2RlY29kaW5nLnBsCmluZGV4IDljMzRjMGQzNmMuLjQ4MmVkYzU3YTggMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDM1X3N0YW5kYnlfbG9naWNhbF9kZWNvZGluZy5wbAor KysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzNV9zdGFuZGJ5X2xvZ2ljYWxfZGVjb2RpbmcucGwK QEAgLTI1MCw2ICsyNTAsNyBAQCAkbm9kZV9wcmltYXJ5LT5hcHBlbmRfY29uZigKIHdhbF9sZXZl bCA9ICdsb2dpY2FsJwogbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gNAogbWF4X3dhbF9zZW5kZXJz ID0gNAorc3VtbWFyaXplX3dhbCA9IG9mZgogfSk7CiAkbm9kZV9wcmltYXJ5LT5kdW1wX2luZm87 CiAkbm9kZV9wcmltYXJ5LT5zdGFydDsKLS0gCjIuMzkuMyAoQXBwbGUgR2l0LTE0NSkKCg== --000000000000f974db060ccd558e--