From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ste-pvt-msa1.bahnhof.se (ste-pvt-msa1.bahnhof.se [213.80.101.70]) by sourceware.org (Postfix) with ESMTPS id 282863858CD1 for ; Sun, 26 Nov 2023 23:15:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 282863858CD1 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=bahnhof.se Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bahnhof.se ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 282863858CD1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=213.80.101.70 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701040543; cv=none; b=wr348oIR6G7LF455ufuHd5SNdImBsn4czuCYqzWn+LAYrEOzLhXVjWhhr/Ub+AayB+u8UMafT9EsB2AcCrapZESpsJXgfV+1BbBbirJT2c4rByjlGQxlf7cJBvJbLzGT1sn4RwpgWGvrU3JOvVu7NiEooKQhv7maSHdZM7t3E/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701040543; c=relaxed/simple; bh=xlBTGyz9vE0XszkjB2uS+VgpWWCQb1OZjxFrthzy1xE=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=fhqtywMQJmVEj+899Rvqm1zHeuWCmXp1ib7pyhoAMb5Izp9zWRbZtbRApgwIChj+KzX1iw3jHE1af5CXe0CmhdYEYHYKDrlAFs0HEeHQoLqBDdqIrT4MnyvXhsL+TV1U7dWJ5mNnfjSN9dF465dyk1dsoIBTakdjNDjuPtqpPIs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost (localhost [127.0.0.1]) by ste-pvt-msa1.bahnhof.se (Postfix) with ESMTP id 2C9A23F97F; Mon, 27 Nov 2023 00:15:37 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at bahnhof.se X-Spam-Score: -2.111 X-Spam-Level: X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 Authentication-Results: ste-pvt-msa1.bahnhof.se (amavisd-new); dkim=pass (2048-bit key) header.d=bahnhof.se Received: from ste-pvt-msa1.bahnhof.se ([127.0.0.1]) by localhost (ste-pvt-msa1.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KJx3A-F16qpJ; Mon, 27 Nov 2023 00:15:35 +0100 (CET) Received: by ste-pvt-msa1.bahnhof.se (Postfix) with ESMTPA id 5088E3F8F3; Mon, 27 Nov 2023 00:15:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=bahnhof.se; s=default; t=1701040535; bh=xlBTGyz9vE0XszkjB2uS+VgpWWCQb1OZjxFrthzy1xE=; h=Date:Subject:To:References:From:In-Reply-To:From; b=IfGHC7ok5R2TR31OX4casA8C3jjne8VEqOGpr2xOmHkde5zVkEw/pmZw/yh4HwKsp gjHt+33UnUumTFonUpzKcvMARAWQxMaLvlGsYJ+DG/iNUEKS57mQFYnXlRoRUihZjP OfKCCRSdrHLrioKInpw+43dgXoBLStMlh6jAoDZ5Fc8pE55SlJsa5sGtJm2YYIW/Fq U5JzJ6HjQnHirfM4OLt0n0crg6U01eSyrwAmqGlt0PCT/pDBNngOTeLA607gRCvJ8L 0gbgTxVli5O6vWpsMkUDAAn2rKxhOuwnuuqOzycqHlfbrv13BpLaWA1n84l39djliI 26MGhH7K2tXzQ== Content-Type: multipart/mixed; boundary="------------T24Uu0F7g2eKDJ4XpRFvi0nW" Message-ID: Date: Mon, 27 Nov 2023 00:15:34 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] jit: Complex types and loong constants Content-Language: en-US To: David Malcolm , jit@gcc.gnu.org References: <697d6d25-c8fb-452b-8997-7ea28b6eb659@bahnhof.se> <6dee747a8195d1381fcd7c2455633cdaf53a1c32.camel@redhat.com> From: Petter Tomner In-Reply-To: <6dee747a8195d1381fcd7c2455633cdaf53a1c32.camel@redhat.com> X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------T24Uu0F7g2eKDJ4XpRFvi0nW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > Or we could simply require the user to use C99/C++11 for generated > reproducers. That's probably simplest. I think that is fine. It's a debugging and test tool anyway. I added the following include guards for long long (in the first patch of the series): +#ifdef __GNUC__ + +/* Include entrypoints with long long parameter types. */ +# define LIBGCCJIT_INCLUDE_LONGLONGS + +#else + +# if __STDC_VERSION__ >= 199901L +# define LIBGCCJIT_INCLUDE_LONGLONGS +# elif __cplusplus >= 201103L +# define LIBGCCJIT_INCLUDE_LONGLONGS +# endif + +#endif + > "arr" should probably be const, and "len" be a size_t. +reproducer_write_arr (reproducer &r, const unsigned char *arr, size_t len) > FWIW "LIBGCCJIT_HAVE_LONGLONG_CONSTANTS" doesn't seem quite like the > right name here, but I wasn't able to come up with a better one. I changed it to LIBGCCJIT_HAVE_LOONG_CONSTANTS. I think it better conveys it is long long, _Complex long double and long double. > Is this a typo for "typepunning"... +/* For typepunning NaNs. */ make check-jit runs fine. --------------T24Uu0F7g2eKDJ4XpRFvi0nW Content-Type: text/x-patch; charset=UTF-8; name="0002-long-long.patch" Content-Disposition: attachment; filename="0002-long-long.patch" Content-Transfer-Encoding: base64 RnJvbSBjYzdmODk0MjY4ZGRiM2RiYjlkMTJiN2IwYjk5YjU2MzA3ZDA1ZDNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAYmFobmhvZi5z ZT4KRGF0ZTogU2F0LCAxNiBPY3QgMjAyMSAyMTo1NToyMCArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBsb25nIGxvbmcKCkpJVDogQWRkIGxvbmcgbG9uZywgbG9uZyBkb3VibGUgYW5k IGNvbXBsZXggbG9uZyBkb3VibGUgY29uc3RhbnRzCgpUaGlzIHBhdGNoIGFkZHMgZW50cnlw b2ludHMgdG8gbWFrZSBjb25zdGFudHMgKGxpdGVyYWxzKSBmb3IgbG9uZyBsb25nLApsb25n IGRvdWJsZSBhbmQgY29tcGxleCBsb25nIGRvdWJsZSB0eXBlcy4KCmxvbmcgbG9uZyBlbnRy eXBvaW50IG9ubHkgaW5jbHVkZWQgZm9yIGNvbXBpbGVycyB0aGF0IGNsYWltIHRvIGJlIGdj Ywpjb21wYXRpYmxlIG9yIGNsYWltIHByb3BlciBDIG9yIEMrKyBzdGQgdmVyc2lvbnMgZm9y IHRoZSBsb25nIGxvbmcgdHlwZS4KCkFsc28sIGl0IGZpeGVzIHByb2JsZW1zIHdpdGggYWxs IGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaW4gd3JpdGVfcmVwcm9kdWNlci4KSS5lLiBzdXBw b3J0IE5BTiBhbmQgSU5GIHZhbHVlcywgYXN3ZWxsIGFzIHByb3BlciBwcmVjaXNpb24gZm9y IGRvdWJsZQphbmQgbG9uZyBkb3VibGUuIFdoaWNoIGlzIG5lZWRlZCBmb3IgdGVzdGluZyB0 aGlzIHBhdGNoLgoKU2lnbmVkLW9mZi1ieToKMjAyMS0xMC0yMSAgUGV0dGVyIFRvbW5lciAg PHRvbW5lckBiYWhuaG9mLnNlPgoKZ2NjL2ppdC8KCSogaml0LXBsYXliYWNrLmMgOgoJKG5l d19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPik6IE5ldwoJKG5ld19ydmFsdWVfZnJv bV9jb25zdCA8bG9uZz4pOiBVc2VzIGxvbmcgbG9uZyBpbnN0ZWFkCgkobmV3X3J2YWx1ZV9m cm9tX2NvbnN0IDxsb25nIGRvdWJsZT4pOiBOZXcKCShuZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGhvc3RfcGFpcjxsb25nIGRvdWJsZT4+KSA6IE5ldwoJKiBqaXQtcmVjb3JkaW5nLmMgOgoJ KGR1bXBfcmVwcm9kdWNlcl90b19maWxlKSA6IFR5cGUgcHVubmluZyBOQU5zCgkocmVwcm9k dWNlcl93cml0ZV9hcnIpIDogYXJyIC0+ICJjaGFyIGFycmF5IGxpdGVyYWwiLXN0cmluZwoJ KG1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+KSA6IE5ldwoJ KG1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT4pIDogTmV3 CgkobWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGhvc3RfcGFpcjxsb25nIGRv dWJsZT4+KSA6IE5ldwoJKG1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3Vi bGU+OjptYWtlX2RlYnVnX3N0cmluZyk6CgklZyBpbnN0ZWFkIG9mICVmCgkobWVtZW50b19v Zl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT46OndyaXRlX3JlcHJvZHVjZXIpOgoJ JWEgaW5zdGVhZCBvZiAlZiwgaGFuZGxlIE5BTiBhbmQgSU5GCgkobWVtZW50b19vZl9uZXdf cnZhbHVlX2Zyb21fY29uc3Q8aG9zdF9wYWlyPGRvdWJsZT4+Ojp3cml0ZV9yZXByb2R1Y2Vy KToKCSVhIGluc3RlYWQgb2YgJWYsIGhhbmRsZSBOQU4gYW5kIElORi4gVXNlIENNUExYIG1h Y3JvLgoJKiBsaWJnY2NqaXQuYyA6CgkqIGxpYmdjY2ppdC5oIDoKCShMSUJHQ0NKSVRfSEFW RV9MT05HTE9OR19DT05TVEFOVFMpIDogTmV3CgkoZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9sb25nX2xvbmcpIDogTmV3CgkoZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9sb25nX2RvdWJsZSkgOiBOZXcKCShnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2NvbXBsZXhfbG9uZ19kb3VibGUpIDogTmV3CgkqIGxpYmdjY2ppdCsrLmggOiBOZXcg ZW50cnlwb2ludHMKCSogbGliZ2Njaml0Lm1hcDogTmV3IGVudHJ5cG9pbnRzIGFkZGVkIHRv IEFCSSAyNgoKZ2NjL3Rlc3RzdWl0ZS8KCSogaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0 cy5oOiBBZGRlZCB0ZXN0LWxvbmctbGl0ZXJhbHMuYwoJKiBqaXQuZGcvdGVzdC1sb25nLWxp dGVyYWxzLmM6IE5ldwoKZ2NjL2ppdC9kb2NzL3RvcGljcy8KCSogY29tcGF0aWJpbGl0eS5y c3QgOiBVcGRhdGVkIGRvY3MKCSogZXhwcmVzc2lvbnMucnN0Ci0tLQogZ2NjL2ppdC9kb2Nz L3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCAgICAgICAgfCAgIDYgKy0KIGdjYy9qaXQvZG9j cy90b3BpY3MvZXhwcmVzc2lvbnMucnN0ICAgICAgICAgIHwgIDQ4ICsrLQogZ2NjL2ppdC9q aXQtcGxheWJhY2suY2MgICAgICAgICAgICAgICAgICAgICAgfCAxNDQgKysrKysrLQogZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAgICAgICAgfCAzOTEgKysrKysr KysrKysrKysrKysrLQogZ2NjL2ppdC9saWJnY2NqaXQrKy5oICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMjggKysKIGdjYy9qaXQvbGliZ2Njaml0LmNjICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDQ4ICsrKwogZ2NjL2ppdC9saWJnY2NqaXQuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMzggKy0KIGdjYy9qaXQvbGliZ2Njaml0Lm1hcCAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA0ICsKIGdjYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGlu Zy10ZXN0cy5oIHwgICA3ICsKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9uZy1saXRl cmFscy5jICAgIHwgMjc0ICsrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDk2OCBp bnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvbmctbGl0ZXJhbHMuYwoKZGlmZiAtLWdpdCBhL2dj Yy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QgYi9nY2Mvaml0L2RvY3MvdG9w aWNzL2NvbXBhdGliaWxpdHkucnN0CmluZGV4IDY5MjJhMmY2N2U5Li5lOGIxNjkyNjMzMCAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdAorKysg Yi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CkBAIC0zODQsMTMgKzM4 NCwxNSBAQCBhbGlnbm1lbnQgb2YgYSB2YXJpYWJsZToKIGBgTElCR0NDSklUX0FCSV8yNmBg CiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogYGBMSUJHQ0NKSVRfQUJJXzI2YGAgY292ZXJzIHRo ZSBhZGRpdGlvbiBvZiBzdXBwb3J0IGZvciBjb21wbGV4IHR5cGVzLAotbGl0ZXJhbHMgZm9y IGNvbXBsZXggdHlwZXMgYXMgd2VsbCBhcyB0aGUKK2xpdGVyYWxzIGZvciBsb25nIGxvbmcs IGxvbmcgZG91YmxlIGFuZCBjb21wbGV4IHR5cGVzIGFzIHdlbGwgYXMgdGhlCiBjb21wbGV4 IGJpbmFyeSBvcGVyYXRvci4KIAogTm90ZSB0aGF0IDpjOm1hY3JvOmBHQ0NfSklUX1RZUEVf Q09NUExFWF9GTE9BVGAgZXRjLiBleGlzdGVkIGluIGVhcmxpZXIKIEFCSTpzLCBidXQgd2Vy ZSBub3QgZnVuY3Rpb25hbC4KIAogICAqICA6ZnVuYzpgZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZWAKKyAgKiAgOmZ1bmM6YGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZWAKKyAgKiAgOmZ1bmM6YGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGVgCisgICogIDpmdW5j OmBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZ2AKICAgKiAgOmZ1 bmM6YGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlc2AKICAg KiAgOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVhgCi0KZGlmZiAtLWdpdCBh L2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIvZ2NjL2ppdC9kb2NzL3Rv cGljcy9leHByZXNzaW9ucy5yc3QKaW5kZXggODljOTllYzJmMTAuLjAzNjJiOGFjYWNhIDEw MDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAorKysgYi9n Y2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdApAQCAtNzAsNiArNzAsMjEgQEAg U2ltcGxlIGV4cHJlc3Npb25zCiAgICBHaXZlbiBhIG51bWVyaWMgdHlwZSAoaW50ZWdlciBv ciBmbG9hdGluZyBwb2ludCksIGJ1aWxkIGFuIHJ2YWx1ZSBmb3IKICAgIHRoZSBnaXZlbiBj b25zdGFudCA6ZXhwcjpgbG9uZ2AgdmFsdWUuCiAKKy4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9y dmFsdWUgKlwKKyAgICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9sb25nX2xvbmcgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NjX2ppdF90eXBl ICpudW1lcmljX3R5cGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyB2YWx1ZSkKKworICAgR2l2ZW4gYSBu dW1lcmljIHR5cGUgKGludGVnZXIgb3IgZmxvYXRpbmcgcG9pbnQpLCBidWlsZCBhbiBydmFs dWUgZm9yCisgICB0aGUgZ2l2ZW4gY29uc3RhbnQgOmV4cHI6YGxvbmcgbG9uZ2AgdmFsdWUu CisKKyAgIFRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGFzZCBpbiA6cmVmOmBMSUJHQ0NKSVRf QUJJXzI2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNlIHVzaW5nCisKKyAg IC4uIGNvZGUtYmxvY2s6OiBjCisKKyAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT09O R19DT05TVEFOVFMKKwogLi4gZnVuY3Rpb246OiAgZ2NjX2ppdF9ydmFsdWUgKmdjY19qaXRf Y29udGV4dF96ZXJvIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NjX2ppdF90eXBlICpu dW1lcmljX3R5cGUpCiAKQEAgLTk4LDYgKzExMywyMSBAQCBTaW1wbGUgZXhwcmVzc2lvbnMK ICAgIEdpdmVuIGEgbnVtZXJpYyB0eXBlIChpbnRlZ2VyIG9yIGZsb2F0aW5nIHBvaW50KSwg YnVpbGQgYW4gcnZhbHVlIGZvcgogICAgdGhlIGdpdmVuIGNvbnN0YW50IDpleHByOmBkb3Vi bGVgIHZhbHVlLgogCisuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZhbHVlICpcCisgICAgICAg ICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlw ZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb25nIGRvdWJsZSB2YWx1ZSkKKworICAgR2l2ZW4gYSBmbG9hdGluZyBw b2ludCB0eXBlLCBidWlsZCBhbiBydmFsdWUgZm9yCisgICB0aGUgZ2l2ZW4gY29uc3RhbnQg OmV4cHI6YGxvbmcgZG91YmxlYC4KKworICAgVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4g OnJlZjpgTElCR0NDSklUX0FCSV8yNmA7CisgICB5b3UgY2FuIHRlc3QgZm9yIGl0cyBwcmVz ZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElC R0NDSklUX0hBVkVfTE9PTkdfQ09OU1RBTlRTCisKIC4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9y dmFsdWUgKlwKICAgICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9jb21wbGV4X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBcCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdj Y19qaXRfdHlwZSAqbnVtZXJpY190eXBlLCBcCkBAIC0xMTQsNiArMTQ0LDIyIEBAIFNpbXBs ZSBleHByZXNzaW9ucwogCiAgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExFWAog CisuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZhbHVlICpcCisgICAgICAgICAgICAgIGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZSAoZ2NjX2pp dF9jb250ZXh0ICpjdHh0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNf dHlwZSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgcmVhbCwgbG9uZyBkb3VibGUgaW1h Zyk7CisKKyAgIEdpdmVuIGEgZmxvYXRpbmcgcG9pbnQgdHlwZSwgYnVpbGQgYW4gcnZhbHVl IGZvcgorICAgdGhlIGdpdmVuIGNvbnN0YW50IDpleHByOmBfQ29tcGxleCBsb25nIGRvdWJs ZWAgc3BsaXQgaW50byBpdHMgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQuIFdoZW4gdGhlIHJl c3VsdCB0eXBlIGlzCisgICBub24tY29tcGxleCwgdGhlIGltYWdpbmFyeSBwYXJ0IGlzIGRp c2NhcmRlZC4KKworICAgVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0ND SklUX0FCSV8yNmA7CisgICB5b3UgY2FuIHRlc3QgZm9yIGl0cyBwcmVzZW5jZSB1c2luZwor CisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVf TE9PTkdfQ09OU1RBTlRTCisKIC4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKICAg ICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9wdHIgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2NjX2ppdF90eXBlICpwb2ludGVyX3R5cGUsIFwKQEAgLTU1 OCw3ICs2MDQsNyBAQCBCaW5hcnkgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAg ICBDIGVxdWl2YWxlbnQgICAgU3VwcG9ydGVkIG9wZXJhbmQgdHlwZQogICAgdGhlIGltYWdp bmFyeS4gTmVnYXRpdmUgemVyb2VzIGFyZSBwcmVzZXJ2ZWQKICAgIGFuZCBJbmY6cyBkbyBu b3QgbGVhZCB0byBOYU5zLgogCi0gICBUaGlzIG9wZXJhdG9yICB3YXMgYWRkZWQgaW4gTElC R0NDSklUX0FCSV8yNjsKKyAgIFRoaXMgb3BlcmF0b3IgIHdhcyBhZGRlZCBpbiA6cmVmOmBM SUJHQ0NKSVRfQUJJXzI2YDsKICAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNlIHVz aW5nCiAKICAgIC4uIGNvZGUtYmxvY2s6OiBjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1w bGF5YmFjay5jYyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmNjCmluZGV4IDZjNGM4ZWQ1ZTM5 Li5mZDYwZDcyM2JiYiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKKysr IGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKQEAgLTE5LDYgKzE5LDcgQEAgYWxvbmcgd2l0 aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs dWRlIDxjc3RkaW50PgogI2RlZmluZSBJTkNMVURFX01VVEVYCiAjaW5jbHVkZSAic3lzdGVt LmgiCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiCkBAIC02MCw2ICs2MSwxMyBAQCBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2RlZmluZSBT RVRfREVDTF9KSVRfQklUX0ZJRUxEKE5PREUpIFwKICAgKERFQ0xfTEFOR19GTEFHXzQgKEZJ RUxEX0RFQ0xfQ0hFQ0sgKE5PREUpKSA9IDEpCiAKKy8qICJUaGVyZSBhcmUgYWx3YXlzIFth dGxlYXN0XSAzMiBiaXRzIGluIGVhY2ggbG9uZywgbm8gbWF0dGVyIHRoZQorICAgIHNpemUg b2YgdGhlIGhvc3RzIGxvbmcuICBXZSBoYW5kbGUgZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50 YXRpb25zCisgICAgd2l0aCB1cCB0byAxOTIgYml0cyIsIHNheXMgbmF0aXZlX2ludGVycHJl dF9yZWFsKCkgaW4gZm9sZC1jb25zdC5jLgorCisgICAgQSBkZWZpbmUgZm9yIHRoZSBhbW91 bnQgb2YgdGhlc2UgbG9uZ3MgbmVlZGVkIHBlciBsb25nIGRvdWJsZS4gKi8KKyNkZWZpbmUg Tl9MT05HU19MRE9VQkxFIChzaXplb2YgKGxvbmcgZG91YmxlKSAvIHNpemVvZiAodWludDMy X3QpICsgKChzaXplb2YgKGxvbmcgZG91YmxlKSAlIHNpemVvZiAodWludDMyX3QpKSA/IDEg OiAwKSkKKwogLyogZ2NjOjpqaXQ6OnBsYXliYWNrOjpjb250ZXh0OjpidWlsZF9jYXN0IHVz ZXMgdGhlIGNvbnZlcnQuaCBBUEksCiAgICB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIHRoZSBm cm9udGVuZCB0byBwcm92aWRlIGEgImNvbnZlcnQiCiAgICBmdW5jdGlvbiwgYXBwYXJlbnRs eSBhcyBhIGZhbGxiYWNrIGZvciBjYXN0cyB0aGF0IGNhbiBiZSBzaW1wbGlmaWVkCkBAIC05 MzcsMTUgKzk0NSwxNCBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGludD4gKHR5cGUgKnR5 cGUsCiAgICAgfQogfQogCi0vKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVl IGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPGxvbmc+LiAgKi8KKy8qIFNwZWNpYWxpemF0aW9u IG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8bG9uZyBsb25n Pi4gKi8KIAogdGVtcGxhdGUgPD4KIHJ2YWx1ZSAqCiBjb250ZXh0OjoKLW5ld19ydmFsdWVf ZnJvbV9jb25zdCA8bG9uZz4gKHR5cGUgKnR5cGUsCi0JCQkgICAgICBsb25nIHZhbHVlKQor bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+ICh0eXBlICp0eXBlLAorCQkJCSAg IGxvbmcgbG9uZyB2YWx1ZSkKIHsKLSAgLy8gRklYTUU6IHR5cGUtY2hlY2tpbmcsIG9yIGNv ZXJjaW9uPwogICB0cmVlIGlubmVyX3R5cGUgPSB0eXBlLT5hc190cmVlICgpOwogICBpZiAo SU5URUdSQUxfVFlQRV9QIChpbm5lcl90eXBlKSkKICAgICB7CkBAIC05ODAsNiArOTg3LDE3 IEBAIG5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz4gKHR5cGUgKnR5cGUsCiAgICAgfQog fQogCisvKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25z dCwgZm9yIGhvc3QgPGxvbmc+LiAgKi8KKwordGVtcGxhdGUgPD4KK3J2YWx1ZSAqCitjb250 ZXh0OjoKK25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz4gKHR5cGUgKnR5cGUsCisJCQkg ICAgICBsb25nIHZhbHVlKQoreworICByZXR1cm4gbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxs b25nIGxvbmc+ICh0eXBlLCB2YWx1ZSk7Cit9CisKIC8qIFNwZWNpYWxpemF0aW9uIG9mIG1h a2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8ZG91YmxlPi4gICovCiAK IHRlbXBsYXRlIDw+CkBAIC0xMDQxLDYgKzEwNTksNjUgQEAgbmV3X3J2YWx1ZV9mcm9tX2Nv bnN0IDxkb3VibGU+ICh0eXBlICp0eXBlLAogICAgIH0KIH0KIAorLyogU3BlY2lhbGl6YXRp b24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29uc3QsIGZvciBob3N0IDxsb25nIGRv dWJsZT4uICAqLworCit0ZW1wbGF0ZSA8PgorcnZhbHVlICoKK2NvbnRleHQ6OgorbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT4gKHR5cGUgKnR5cGUsCisJCQkJICAgICBs b25nIGRvdWJsZSB2YWx1ZSkKK3sKKyAgdHJlZSBpbm5lcl90eXBlID0gdHlwZS0+YXNfdHJl ZSAoKTsKKworICBzY2FsYXJfZmxvYXRfbW9kZSBtb2RlID0gU0NBTEFSX0ZMT0FUX1RZUEVf TU9ERSAobG9uZ19kb3VibGVfdHlwZV9ub2RlKTsKKworICB1bmlvbgorICB7CisgICAgbG9u ZyBkb3VibGUgYXNfbG9uZ19kb3VibGU7CisgICAgdWludDMyX3QgYXNfdWludDMyc1tOX0xP TkdTX0xET1VCTEVdOworICB9IHVfcmVhbCwgdV9pbWFnOworCisgIHVfcmVhbC5hc19sb25n X2RvdWJsZSA9IHZhbHVlOworCisgIGxvbmcgaW50IGFzX2xvbmdfaW50c1tOX0xPTkdTX0xE T1VCTEVdOworCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VCTEU7 IGkrKykKKyAgICBhc19sb25nX2ludHNbaV0gPSB1X3JlYWwuYXNfdWludDMyc1tpXTsKKwor ICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAgcmVhbF9mcm9tX3RhcmdldCAoJnJl YWxfdmFsdWUsIGFzX2xvbmdfaW50cywgbW9kZSk7CisKKyAgaWYgKENPTVBMRVhfRkxPQVRf VFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVhbDsKKyAg ICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisKKyAgICAgIFJF QUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVlOworCisgICAgICBsb25nIGludCB6ZXJvX2FzX2xv bmdfaW50c1tOX0xPTkdTX0xET1VCTEVdOworICAgICAgdV9pbWFnLmFzX2xvbmdfZG91Ymxl ID0gMC47CisKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VC TEU7IGkrKykKKwl6ZXJvX2FzX2xvbmdfaW50c1tpXSA9IHVfaW1hZy5hc191aW50MzJzW2ld OworCisgICAgICByZWFsX2Zyb21fdGFyZ2V0ICgmaW1hZ192YWx1ZSwgemVyb19hc19sb25n X2ludHMsIG1vZGUpOworCisgICAgICByZWFsX3R5cGUgPSBjb21wbGV4X3JlYWxfdG9fcmVh bCAoaW5uZXJfdHlwZSk7CisKKyAgICAgIHRyZWVfcmVhbCA9IGJ1aWxkX3JlYWwgKHJlYWxf dHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICB0cmVlX2ltYWcgPSBidWlsZF9yZWFsIChyZWFs X3R5cGUsIGltYWdfdmFsdWUpOworCisgICAgICB0cmVlIGlubmVyID0gYnVpbGRfY29tcGxl eCAoaW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0cmVlX2ltYWcpOworICAgICAgcmV0dXJuIG5l dyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0 cmVlIGlubmVyID0gYnVpbGRfcmVhbCAoaW5uZXJfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAg ICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOworICAgIH0KK30KKwogLyogU3Bl Y2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29uc3QsCiAgICBmb3Ig aG9zdCBjb21wbGV4IGRvdWJsZS4gKi8KIApAQCAtMTA5Niw2ICsxMTczLDY1IEBAIG5ld19y dmFsdWVfZnJvbV9jb25zdCA8aG9zdF9wYWlyPGRvdWJsZT4+ICh0eXBlICp0eXBlLAogICAg IH0KIH0KIAorLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEg Y29uc3QsCisgICBmb3IgaG9zdCBjb21wbGV4IGxvbmcgZG9idWxlLiAqLworCit0ZW1wbGF0 ZSA8PgorcnZhbHVlICoKK2NvbnRleHQ6OgorbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxob3N0 X3BhaXI8bG9uZyBkb3VibGU+PiAodHlwZSAqdHlwZSwKKwkJCQkJCWhvc3RfcGFpcjxsb25n IGRvdWJsZT4gdmFsdWUpCit7CisgIHRyZWUgaW5uZXJfdHlwZSA9IHR5cGUtPmFzX3RyZWUg KCk7CisKKyAgc2NhbGFyX2Zsb2F0X21vZGUgbW9kZSA9IFNDQUxBUl9GTE9BVF9UWVBFX01P REUgKGxvbmdfZG91YmxlX3R5cGVfbm9kZSk7CisKKyAgdW5pb24KKyAgeworICAgIGxvbmcg ZG91YmxlIGFzX2xvbmdfZG91YmxlOworICAgIHVpbnQzMl90IGFzX3VpbnQzMnNbTl9MT05H U19MRE9VQkxFXTsKKyAgfSB1X3JlYWwsIHVfaW1hZzsKKworICB1X3JlYWwuYXNfbG9uZ19k b3VibGUgPSB2YWx1ZS5tX2E7CisgIGxvbmcgaW50IGFzX2xvbmdfaW50c1tOX0xPTkdTX0xE T1VCTEVdOworCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VCTEU7 IGkrKykKKyAgICBhc19sb25nX2ludHNbaV0gPSB1X3JlYWwuYXNfdWludDMyc1tpXTsKKwor ICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAgcmVhbF9mcm9tX3RhcmdldCAoJnJl YWxfdmFsdWUsIGFzX2xvbmdfaW50cywgbW9kZSk7CisKKyAgaWYgKENPTVBMRVhfRkxPQVRf VFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVhbDsKKyAg ICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisKKyAgICAgIFJF QUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVlOworCisgICAgICBsb25nIGludCB2YWx1ZV9hc19s b25nX2ludHNbTl9MT05HU19MRE9VQkxFXTsKKyAgICAgIHVfaW1hZy5hc19sb25nX2RvdWJs ZSA9IHZhbHVlLm1fYjsKKworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE5fTE9O R1NfTERPVUJMRTsgaSsrKQorCXZhbHVlX2FzX2xvbmdfaW50c1tpXSA9IHVfaW1hZy5hc191 aW50MzJzW2ldOworCisgICAgICByZWFsX2Zyb21fdGFyZ2V0ICgmaW1hZ192YWx1ZSwgdmFs dWVfYXNfbG9uZ19pbnRzLCBtb2RlKTsKKworICAgICAgcmVhbF90eXBlID0gY29tcGxleF9y ZWFsX3RvX3JlYWwgKGlubmVyX3R5cGUpOworCisgICAgICB0cmVlX3JlYWwgPSBidWlsZF9y ZWFsIChyZWFsX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAgdHJlZV9pbWFnID0gYnVpbGRf cmVhbCAocmVhbF90eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAgdHJlZSBpbm5lciA9IGJ1 aWxkX2NvbXBsZXggKGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJlZV9pbWFnKTsKKyAgICAg IHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUsIHJlYWxfdmFs dWUpOworICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9Cit9 CisKIC8qIFNwZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0 LCBmb3IgaG9zdCA8dm9pZCAqPi4gICovCiAKIHRlbXBsYXRlIDw+CmRpZmYgLS1naXQgYS9n Y2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MKaW5k ZXggYWExMWVkNTE3MWEuLmJjYjRhNGUzYThiIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuY2MKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCkBAIC0yNSw2ICsy NSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAjaW5jbHVkZSAicHJldHR5LXByaW50LmgiCiAjaW5jbHVkZSAidG9wbGV2LmgiCiAK KwogI2luY2x1ZGUgPG1hdGguaD4KIAogI2luY2x1ZGUgImppdC1idWlsdGlucy5oIgpAQCAt MTgzNiw4ICsxODM3LDQ4IEBAIHJlY29yZGluZzo6Y29udGV4dDo6ZHVtcF9yZXByb2R1Y2Vy X3RvX2ZpbGUgKGNvbnN0IGNoYXIgKnBhdGgpCiAJICAgIiBnY2Nfaml0X2NvbnRleHRfZHVt cF9yZXByb2R1Y2VyX3RvX2ZpbGUuXG5cbiIpOwogICBwcmludF92ZXJzaW9uIChyLmdldF9m aWxlICgpLCAiICAiLCBmYWxzZSk7CiAgIHIud3JpdGUgKCIqL1xuIik7Ci0gIHIud3JpdGUg KCIjaW5jbHVkZSA8bGliZ2Njaml0Lmg+XG5cbiIpOwotICByLndyaXRlICgiI3ByYWdtYSBH Q0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdmFyaWFibGVcIlxuXG4iKTsKKyAg ci53cml0ZSAoCisgICAgIiNpbmNsdWRlIDxsaWJnY2NqaXQuaD5cbiIKKyAgICAiI2luY2x1 ZGUgPG1hdGguaD5cbiIKKyAgICAiI2luY2x1ZGUgPGNvbXBsZXguaD5cbiIKKyAgICAiI2lu Y2x1ZGUgPHN0cmluZy5oPlxuXG4iKTsKKyAgci53cml0ZSAoIiNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLXZhcmlhYmxlXCJcbiIpOworICByLndyaXRlICgi I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtZnVuY3Rpb25cIlxu XG4iKTsKKyAgLyogVHlwZSBwdW5uaW5nIHVuaW9ucyAqLworICByLndyaXRlICgidW5pb24g ZHVsbCB7IGRvdWJsZSBkOyB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOyB9O1xuXG4iKTsKKyAg ci53cml0ZSAoCisgICAgInVuaW9uIGxkYXJyIHsgbG9uZyBkb3VibGUgbGQ7IHVuc2lnbmVk IGFycltzaXplb2YgKGxvbmcgZG91YmxlKV07fTtcblxuIik7CisKKyAgLyogRnVuY3Rpb25z IGZvciB0eXBlIHB1bm5pbmcgbmFuOnMsIGtlZXBpbmcgYml0IHJlcHJlc2VudGF0aW9uICov CisgIHIud3JpdGUgKAorICAgICIvKiBDb252ZXJ0IHR5cGUgcHVubmVkIHVpbnQgNjQgdG8g ZG91YmxlIE5hTi5cbiIKKyAgICAiICAgTWlnaHQgbG9zZS9jb3JydXB0IHBheWxvYWQgYmV0 d2VlbiBhcmNoaXRlY3R1cmVzLiAqL1xuIgorICAgICJzdGF0aWMgZG91YmxlXG4iCisgICAg InVsbF90b19kICh1bnNpZ25lZCBsb25nIGxvbmcgdWxsKVxuIgorICAgICJ7XG4iCisgICAg IiAgdW5pb24gZHVsbCB1OyB1LnVsbCA9IHVsbDtcbiIKKyAgICAiICAvKiBQYXJhbm9pYSBj aGVjayBmb3IgZm9yZWlnbiBOYU4gcmVwcmVzZW50YXRpb24uICovXG4iCisgICAgIiAgaWYg KCFpc25hbiAodS5kKSkgcmV0dXJuIE5BTjtcbiIKKyAgICAiICByZXR1cm4gdS5kO1xuIgor ICAgICJ9XG5cbiIpOworICByLndyaXRlICgKKyAgICAiLyogQ29udmVydCBhcnJheSB0byBs b25nIGRvdWJsZSBOYU4uXG4iCisgICAgIiAgIE1pZ2h0IGxvc2UvY29ycnVwdCBwYXlsb2Fk IGJldHdlZW4gYXJjaGl0ZWN0dXJlcy4gKi9cbiIKKyAgICAic3RhdGljIGxvbmcgZG91Ymxl XG4iCisgICAgImFycl90b19sZCAodW5zaWduZWQgY2hhciAqYXJyLCBpbnQgbGVuKVxuIgor ICAgICJ7XG4iCisgICAgIiAgdW5pb24gbGRhcnIgdTtcbiIKKyAgICAvKiBTaW5jZSBsb25n IGRvdWJsZSBzaXplcyBjYW4gdmFyeSBiZXR3ZWVuIGFyY2hpdGVjdHVyZXMsCisgICAgICAg d2UgbmVlZCB0byBoYW5kbGUgdGhhdC4gKi8KKyAgICAiICAvKiBGb3IgZm9yZWlnbiBsb25n IGRvdWJsZSBzaXplcyAqL1xuIgorICAgICIgIGlmIChzaXplb2YgdS5hcnIgIT0gbGVuKSBy ZXR1cm4gTkFOO1xuIgorICAgICIgIG1lbWNweSAodS5hcnIsIGFyciwgbGVuKTtcbiIKKyAg ICAvKiBUaGUgc2l6ZSBtaWdodCBmb29sIHVzIGJlY291c2Ugb2YgcGFkZGluZywgc28gY2hl Y2sgaXQgaXMgYSBuYW4uICovCisgICAgIiAgLyogSGFuZGxlIGZvcmVpZ24gcmVwcmVzZW50 YXRpb25zIHRoYXQgaXMgbm90IE5hTiBvbiB0aGlzIG1hY2hpbmUuICovXG4iCisgICAgIiAg aWYgKCFpc25hbiAodS5sZCkpIHJldHVybiBOQU47XG4iCisgICAgIiAgcmV0dXJuIHUubGQ7 XG4iCisgICAgIn1cblxuIik7CisKICAgci53cml0ZSAoInN0YXRpYyB2b2lkXG5zZXRfb3B0 aW9ucyAoIik7CiAgIHIud3JpdGVfcGFyYW1zIChjb250ZXh0cyk7CiAgIHIud3JpdGUgKCIp O1xuXG4iKTsKQEAgLTUxMzUsMTEgKzUxNzYsMTIgQEAgcmVjb3JkaW5nOjpnbG9iYWw6Ondy aXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAvKiBFeHBsaWNpdCBzcGVjaWFsaXph dGlvbiBvZiB0aGUgdmFyaW91cyBtZW1lbnRvcyB3ZSdyZSBpbnRlcmVzdGVkIGluLiAgKi8K IHRlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21f Y29uc3QgPGludD47CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3 X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nPjsKK3RlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6 bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgbG9uZz47CiB0ZW1wbGF0 ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxk b3VibGU+OwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFs dWVfZnJvbV9jb25zdCA8bG9uZyBkb3VibGU+OwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5n OjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8aG9zdF9wYWlyPGRvdWJsZT4+ OwogdGVtcGxhdGUgY2xhc3MKLXJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zy b21fY29uc3QgPGxvbmcgZG91YmxlWzJdPjsKK3JlY29yZGluZzo6bWVtZW50b19vZl9uZXdf cnZhbHVlX2Zyb21fY29uc3QgPGhvc3RfcGFpcjxsb25nIGRvdWJsZT4+OwogdGVtcGxhdGUg Y2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8dm9p ZCAqPjsKIAogLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHB1cmUgdmlydHVhbCBob29rIHJl Y29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KQEAgLTUyNzYsNiArNTMxOCw3MCBAQCBy ZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nPjo6d3Jp dGVfcmVwcm9kdWNlciAocmVwcm9kdWNlcgogCSAgIG1fdmFsdWUpOwogCSAgIH0KIAorLyog VGhlIG1ha2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZvciA8bG9uZyBsb25nPiwg cmVuZGVyaW5nIGl0IGFzCisgICAgIChUQVJHRVRfVFlQRSlMSVRFUkFMCisgICBlLmcuCisg ICAgICIobG9uZyBsb25nKTQyIi4gKi8KKwordGVtcGxhdGUgPD4KK3N0cmluZyAqCittZW1l bnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPjo6bWFrZV9kZWJ1Z19z dHJpbmcgKCkKK3sKKyAgcmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJ CSAgICAgICIoJXMpJWxsaSIsCisJCQkgICAgICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcg KCksCisJCQkgICAgICBtX3ZhbHVlKTsKK30KKworLyogVGhlIGdldF93aWRlX2ludCBzcGVj aWFsaXphdGlvbiBmb3IgPGxvbmcgbG9uZz4uICovCisKK3RlbXBsYXRlIDw+Citib29sCitt ZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPjo6Z2V0X3dpZGVf aW50ICh3aWRlX2ludCAqb3V0KSBjb25zdAoreworICAqb3V0ID0gd2k6OnNod2kgKG1fdmFs dWUsIHNpemVvZiAobV92YWx1ZSkgKiA4KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFRo ZSB3cml0ZV9yZXByb2R1Y2VyIHNwZWNpYWxpemF0aW9uIGZvciA8bG9uZyBsb25nPi4gKi8K KwordGVtcGxhdGUgPD4KK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVl X2Zyb21fY29uc3QgPGxvbmcgbG9uZz46Ogord3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNl ciAmcikKK3sKKyAgY29uc3QgY2hhciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywg InJ2YWx1ZSIpOworCisgIC8qIFNhbWUgc3BlY2lhbCBjYXNlIGFzIGluIGxvbmcgKi8KKyAg aWYgKG1fdmFsdWUgPT0gTE9OR19MT05HX01JTikKKyAgICB7CisgICAgICByLndyaXRlICgK KwkiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxuIgorCSIgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKFxuIgorCSIgICAgICAlcywgLyogZ2NjX2ppdF9j b250ZXh0ICpjdHh0ICovXG4iCisJIiAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVy aWNfdHlwZSAqL1xuIgorCSIgICAgICAlbGxkTEwgLSAxKTsgLyogbG9uZyBsb25nIHZhbHVl ICovXG4iLAorCWlkLAorCXIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwly LmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisJbV92YWx1ZSArIDEpOworICAg ICAgcmV0dXJuOworICAgIH0KKworICByLndyaXRlICgKKyAgICAiICBnY2Nfaml0X3J2YWx1 ZSAqJXMgPVxuIgorICAgICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9s b25nX2xvbmcgKFxuIgorICAgICIgICAgICAlcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0 ICovXG4iCisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAq L1xuIgorICAgICIgICAgICAlbGxkTEwpOyAvKiBsb25nIGxvbmcgdmFsdWUgKi9cbiIsCisg ICAgaWQsCisgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAgIHIu Z2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKyAgICBtX3ZhbHVlKTsKK30KKwor CisKIC8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJs ZT4sIHJlbmRlcmluZyBpdCBhcwogICAgICAoVEFSR0VUX1RZUEUpTElURVJBTAogICAgZS5n LgpAQCAtNTI4Niw3ICs1MzkyLDcgQEAgc3RyaW5nICoKIG1lbWVudG9fb2ZfbmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IDxkb3VibGU+OjptYWtlX2RlYnVnX3N0cmluZyAoKQogewogICByZXR1 cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0LAotCQkJICAgICAgIiglcyklZiIsCisJ CQkgICAgICAiKCVzKSVnIiwKIAkJCSAgICAgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAo KSwKIAkJCSAgICAgIG1fdmFsdWUpOwogfQpAQCAtNTMwMCw2ICs1NDA2LDE4IEBAIG1lbWVu dG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+OjpnZXRfd2lkZV9pbnQgKHdp ZGVfaW50ICopIGNvbnN0CiAgIHJldHVybiBmYWxzZTsKIH0KIAorLyogRm9yIHR5cGVwdW5u aW5nIE5hTnMuICovCit1bmlvbiBkdWxsIHsKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGxv bmcgbG9uZyB1bGw7Cit9OworCit1bmlvbiBsZGFyciB7CisgIGxvbmcgZG91YmxlIGxkOwor ICB1bnNpZ25lZCBjaGFyIGFycltzaXplb2YobG9uZyBkb3VibGUpXTsKK307CisKKwogLyog VGhlIHdyaXRlX3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGU+LiAgKi8K IAogdGVtcGxhdGUgPD4KQEAgLTUzMDcsMTQgKzU0MjUsMTU0IEBAIHZvaWQKIHJlY29yZGlu Zzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT46OndyaXRlX3Jl cHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiB7CiAgIGNvbnN0IGNoYXIgKmlkID0gci5tYWtl X2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKLSAgci53cml0ZSAoIiAgZ2NjX2ppdF9y dmFsdWUgKiVzID1cbiIKLSAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21fZG91YmxlICglcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCi0gICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19q aXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCi0gICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJWYpOyAvKiBkb3VibGUgdmFsdWUgKi9cbiIsCi0g ICAgaWQsCi0gICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAotICAgIHIu Z2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKLSAgICBtX3ZhbHVlKTsKKworICBp ZiAoc3RkOjppc2Zpbml0ZSAobV92YWx1ZSkpCisgICAgci53cml0ZSAoIiAgZ2NjX2ppdF9y dmFsdWUgKiVzID1cbiIKKyAgICAgICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9kb3VibGUgKCVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKyAgICAg ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBn Y2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICAgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJS45ZyAqL1xuIgorICAgICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWEpO1xuIiwKKyAg ICAgIGlkLAorICAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAg ICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorICAgICAgbV92YWx1ZSwg bV92YWx1ZSk7CisgICBlbHNlIGlmIChzdGQ6OmlzaW5mIChtX3ZhbHVlKSkKKyAgICAgewor ICAgICAgIGNvbnN0IGNoYXIgKnNpZ24gPSAiIjsKKyAgICAgICBpZiAobV92YWx1ZSA8IDAp CisJIHNpZ24gPSAiLSI7CisKKyAgICAgICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAq JXMgPVxuIgorCSAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91Ymxl ICglcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisJICIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51 bWVyaWNfdHlwZSAqL1xuIgorCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBpbmYgKi9cbiIKKwkgIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJXNJTkZJTklUWSk7XG4iLAorCSBpZCwKKwkgci5nZXRfaWRl bnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorCSByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUg KG1fdHlwZSksCisJIHNpZ24pOworICAgICAgfQorICAgIGVsc2UgaWYgKHN0ZDo6aXNuYW4g KG1fdmFsdWUpKSB7CisgICAgICB1bmlvbiBkdWxsIHU7CisgICAgICB1LmQgPSBtX3ZhbHVl OworICAgICAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKwkiICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICglcywgLyogZ2NjX2ppdF9j b250ZXh0ICpjdHh0ICovXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCisJ IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmFOICov XG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxs X3RvX2QoJSNsbHgpKTtcbiIsCisJaWQsCisJci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRl eHQgKCkpLAorCXIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKwl1LnVsbCk7 CisKKyAgICB9Cit9CisKKy8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlv biBmb3IgPGxvbmcgZG91YmxlPiwgcmVuZGVyaW5nIGl0IGFzCisgICAgIChUQVJHRVRfVFlQ RSlMSVRFUkFMCisgICBlLmcuCisgICAgICIoZmxvYXQpNDIuMCIuICAqLworCit0ZW1wbGF0 ZSA8Pgorc3RyaW5nICoKK21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25n IGRvdWJsZT46Om1ha2VfZGVidWdfc3RyaW5nICgpCit7CisgIHJldHVybiBzdHJpbmc6OmZy b21fcHJpbnRmIChtX2N0eHQsCisJCQkgICAgICAiKCVzKSVMZyIsCisJCQkgICAgICBtX3R5 cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCQkgICAgICBtX3ZhbHVlKTsKK30KKworLyog VGhlIGdldF93aWRlX2ludCBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJsZT4uICAqLworCit0 ZW1wbGF0ZSA8PgorYm9vbAorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxv bmcgZG91YmxlPjo6Z2V0X3dpZGVfaW50ICh3aWRlX2ludCAqKSBjb25zdAoreworICByZXR1 cm4gZmFsc2U7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3Igd3JpdGVfcmVwcm9kdWNl cigpCisKKyAgIFdyaXRlIGFuIGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIHRvIHRoZSByZXBy b2R1Y2VyLCBsaWtlOgorICAgezB4MTIsIDB4MzQsIC4uLiB9ICovCitzdGF0aWMgdm9pZAor cmVwcm9kdWNlcl93cml0ZV9hcnIgKHJlcHJvZHVjZXIgJnIsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmFyciwgc2l6ZV90IGxlbikKK3sKKyAgaWYgKGxlbiA9PSAwKQorICAgIHJldHVybjsK KworICByLndyaXRlICgieyIpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbiAtIDE7 IGkrKykKKyAgICByLndyaXRlICgiJSN4ICwgIiwgYXJyW2ldKTsKKyAgci53cml0ZSAoIiUj eCB9IiwgYXJyW2xlbiAtIDFdKTsKK30KKworLyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3Bl Y2lhbGl6YXRpb24gZm9yIDxkb3VibGU+LiAgKi8KKwordGVtcGxhdGUgPD4KK3ZvaWQKK3Jl Y29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91Ymxl Pjo6Cit3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICBjb25zdCBjaGFy ICppZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7CisKKyAgaWYgKGlz ZmluaXRlIChtX3ZhbHVlKSkKKyAgICByLndyaXRlICgKKyAgICAgICIgIGdjY19qaXRfcnZh bHVlIColcyA9XG4iCisgICAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21fbG9uZ19kb3VibGUgKFxuIgorICAgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X2NvbnRl eHQgKmN0eHQgKi9cbiIKKyAgICAgICIgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1l cmljX3R5cGUgKi9cbiIKKyAgICAgICIgICAgICAvKiAlLjlMZyAqL1xuIgorICAgICAgIiAg ICAgICVMYUwpOyAvKiBsb25nIGRvdWJsZSB2YWx1ZSAqL1xuIiwKKyAgICAgIGlkLAorICAg ICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAgICAgci5nZXRfaWRl bnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorICAgICAgbV92YWx1ZSwgbV92YWx1ZSk7Cisg IGVsc2UgaWYgKGlzaW5mIChtX3ZhbHVlKSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpz aWduID0gIiI7CisgICAgICBpZiAobV92YWx1ZSA8IDApCisJc2lnbiA9ICItIjsKKyAgICAg IHIud3JpdGUgKAorICAgICAgIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKyAgICAgICIg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoXG4iCisg ICAgICAiICAgICAgJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorICAgICAg IiAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICAg IiAgICAgIC8qIGluZiAqL1xuIgorICAgICAgIiAgICAgICVzSU5GSU5JVFkpO1xuIiwKKyAg ICAgIGlkLAorICAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAg ICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorICAgICAgc2lnbik7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5pb24gbGRhcnIgdTsgLyogRm9yIHR5cGUg cHVubmluZyB0byBhcnJheSAqLworICAgICAgdS5sZCA9IG1fdmFsdWU7CisKKyAgICAgIHIu d3JpdGUgKCIgIGdjY19qaXRfcnZhbHVlIColcztcbiIsIGlkKTsKKyAgICAgIC8qIFNjb3Bl IGZvciBsb2NhbCAqLworICAgICAgci53cml0ZSAoIiAgeyAvKiBsb25nIGRvdWJsZSBOYU4g c3RvcmVkIGluIGNoYXIgYXJyICovXG4iKTsKKyAgICAgIC8qIFdyaXRlIGFuIGNoYXIgYXJy IG9mIHRoZSBieXRlcyBvZiB0aGUgTmFOICovCisgICAgICByLndyaXRlICgiICAgIHVuc2ln bmVkIGNoYXIgYXJyW10gPSAiKTsKKyAgICAgIHJlcHJvZHVjZXJfd3JpdGVfYXJyIChyLCB1 LmFyciwgc2l6ZW9mIHUuYXJyKTsKKyAgICAgIHIud3JpdGUgKCI7XG4iKTsKKworICAgICAg ci53cml0ZSAoCisgICAgICAiICAgICVzID1cbiIKKyAgICAgICIgICAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlIChcbiIKKyAgICAgICIgICAgICAg ICVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKyAgICAgICIgICAgICAgICVz LCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICAgIiAgICAgICAg LyogJUxnICovXG4iCisgICAgICAiICAgICAgICBhcnJfdG9fbGQgKGFyciwgc2l6ZW9mIGFy cikpO1xuIiwKKyAgICAgIGlkLAorICAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRl eHQgKCkpLAorICAgICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorICAg ICAgbV92YWx1ZSk7CisKKyAgICAgIHIud3JpdGUgKCIgIH1cbiIpOyAvKiBDbG9zZSBzY29w ZSAqLworICAgIH0KIH0KIAogLyogVGhlIG1ha2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0 aW9uIGZvciBjb21wbGV4IGRvdWJsZSwgcmVuZGVyaW5nIGl0IGFzCkBAIC01NDA0LDYgKzU2 NjIsMTE1IEBAIHdyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAgIHIud3JpdGUg KCIpO1xuXG4iKTsgLyogQ2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwgKi8KIH0KIAordGVtcGxh dGUgPD4KK3N0cmluZyAqCittZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8aG9z dF9wYWlyPGxvbmcgZG91YmxlPj46OgorbWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAgbG9u ZyBkb3VibGUgcmVhbCA9IG1fdmFsdWUubV9hOworICBsb25nIGRvdWJsZSBpbWFnID0gbV92 YWx1ZS5tX2I7CisgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsCisJCQkg ICAgICAiKCVzKSglTGclK0xnaikiLAorCQkJICAgICAgbV90eXBlLT5nZXRfZGVidWdfc3Ry aW5nICgpLAorCQkJICAgICAgcmVhbCwgaW1hZyk7Cit9CisKKy8qIFRoZSBnZXRfd2lkZV9p bnQgc3BlY2lhbGl6YXRpb24gZm9yIGNvbXBsZXggbG9uZyBkb3VibGUuICAqLworCit0ZW1w bGF0ZSA8PgorYm9vbAorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGhvc3Rf cGFpcjxsb25nIGRvdWJsZT4+OjoKK2dldF93aWRlX2ludCAod2lkZV9pbnQgKikgY29uc3QK K3sKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBUaGUgd3JpdGVfcmVwcm9kdWNlciBzcGVj aWFsaXphdGlvbiBmb3IgY29tcGxleCBsb25nIGRvdWJsZS4gICovCisKK3RlbXBsYXRlIDw+ Cit2b2lkCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxo b3N0X3BhaXI8bG9uZyBkb3VibGU+Pjo6Cit3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2Vy ICZyKQoreworICB1bmlvbiBsZGFyciB1cmVhbCwgdWltYWc7CisgIGNvbnN0IGNoYXIgKmlk ID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKKyAgbG9uZyBkb3VibGUg cmVhbCA9IG1fdmFsdWUubV9hOworICBsb25nIGRvdWJsZSBpbWFnID0gbV92YWx1ZS5tX2I7 CisKKyAgaW50IGhhc19uYW4gPSBpc25hbiAocmVhbCkgfHwgaXNuYW4gKGltYWcpOworCisg IGlmIChoYXNfbmFuKQorICAgIHsKKyAgICAgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVl IColcztcbiIsIGlkKTsKKyAgICAgIC8qIFNjb3BlIGZvciBtdWx0aXBsZSAiTmFOLWFycmF5 cyIgaW4gdGhlIHNvdXJjZSBmaWxlIHRvIG5vdCBjbGFzaCAqLworICAgICAgci53cml0ZSAo IiAge1xuIik7CisgICAgfQorICBpZiAoaXNuYW4gKHJlYWwpKQorICAgIHsKKyAgICAgIC8q IFdyaXRlIHRoZSByYXcgYnl0ZXMgb2YgdGhlIGxvbmcgZG91YmxlIGFzIGFuIGNoYXIgYXJy YXkKKwkgdG8gc3RvcmUgaXQgaW4gdGhlIHNvdXJjZSBjb2RlLgorCSBJLmUuIHVuc2lnbmVk IGNoYXIgYXJyW10gPSB7MHgxLCAweDIsIDB4MyAuLi4gfTsgKi8KKyAgICAgIHVyZWFsLmxk ID0gcmVhbDsKKyAgICAgIHIud3JpdGUgKCIgICAgdW5zaWduZWQgY2hhciBhcnJfcmVhbFtd ID0gIik7CisgICAgICByZXByb2R1Y2VyX3dyaXRlX2FyciAociwgdXJlYWwuYXJyLCBzaXpl b2YgdXJlYWwuYXJyKTsKKyAgICAgIHIud3JpdGUgKCI7XG4iKTsKKyAgICB9CisgIGlmIChp c25hbiAoaW1hZykpCisgICAgeworICAgICAgdWltYWcubGQgPSBpbWFnOworICAgICAgci53 cml0ZSAoIiAgICB1bnNpZ25lZCBjaGFyIGFycl9pbWFnW10gPSAiKTsKKyAgICAgIHJlcHJv ZHVjZXJfd3JpdGVfYXJyIChyLCB1aW1hZy5hcnIsIHNpemVvZiB1aW1hZy5hcnIpOworICAg ICAgci53cml0ZSAoIjtcbiIpOworICAgIH0KKworICBpZiAoaGFzX25hbikKKyAgICByLndy aXRlICgiICAiKTsgLyogRGVmaW5pdGlvbiBpcyBvdXRzaWRlIHRoZSBzY29wZSBmb3IgTmFO cyAqLworICBlbHNlCisgICAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiIpOworCisg IHIud3JpdGUgKCIlcyA9XG4iCisgICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2NvbXBsZXhfbG9uZ19kb3VibGUgKFxuIgorICAgICIgICAgICAlcywgLyogZ2Nj X2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X3R5 cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICIgICAgICAvKiAlLjlMZyArIGkqJS45TGcg Ki9cbiIKKyAgICAiICAgICAgIiwgLyogcmVhbCwgaW1hZyk7ICovCisgICAgaWQsCisgICAg ci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAgIHIuZ2V0X2lkZW50aWZp ZXJfYXNfdHlwZSAobV90eXBlKSwKKyAgICByZWFsLCBpbWFnKTsKKworICBpZiAoaXNmaW5p dGUgKHJlYWwpKQorICAgIHIud3JpdGUgKCIlTGFMLCAiLCByZWFsKTsKKyAgZWxzZSBpZiAo aXNpbmYgKHJlYWwpKQorICAgIHsKKyAgICAgIGlmIChyZWFsIDwgMCkKKwlyLndyaXRlICgi LUlORklOSVRZLCAiKTsKKyAgICAgIGVsc2UKKwlyLndyaXRlICgiSU5GSU5JVFksICIpOwor ICAgIH0KKyAgZWxzZSBpZiAoaXNuYW4gKHJlYWwpKQorICAgIHsKKyAgICAgIC8qIENvbnZl cnQgdGhlIGNoYXIgYXJyYXkgd3JpdHRlbiBhYm92ZSwgdG8gYSBsb25nIGRvdWJsZSAqLwor ICAgICAgci53cml0ZSAoImFycl90b19sZCAoYXJyX3JlYWwsIHNpemVvZiBhcnJfcmVhbCks ICIpOworICAgIH0KKworICBpZiAoaXNmaW5pdGUgKGltYWcpKQorICAgIHIud3JpdGUgKCIl TGFMIiwgaW1hZyk7CisgIGVsc2UgaWYgKGlzaW5mIChpbWFnKSkKKyAgICB7CisgICAgICBp ZiAoaW1hZyA8IDApCisJci53cml0ZSAoIi1JTkZJTklUWSIpOworICAgICAgZWxzZQorCXIu d3JpdGUgKCJJTkZJTklUWSIpOworICAgIH0KKyAgZWxzZSBpZiAoaXNuYW4gKGltYWcpKQor ICAgIHsKKyAgICAgIHIud3JpdGUgKCJhcnJfdG9fbGQgKGFycl9pbWFnLCBzaXplb2YgYXJy X2ltYWcpIik7CisgICAgfQorICByLndyaXRlKCIpO1xuXG4iKTsgLyogQ2xvc2UgZnVuY3Rp b24gY2FsbCAqLworCisgIGlmIChoYXNfbmFuKQorICAgIHIud3JpdGUgKCIgIH1cbiIpOyAv KiBDbG9zZSBOYU4tYXJyYXkgc2NvcGUgKi8KIH0KIAogLyogVGhlIG1ha2VfZGVidWdfc3Ry aW5nIHNwZWNpYWxpemF0aW9uIGZvciA8dm9pZCAqPiwgcmVuZGVyaW5nIGl0IGFzCmRpZmYg LS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmggYi9nY2Mvaml0L2xpYmdjY2ppdCsrLmgK aW5kZXggYjk2NWQ5OWQzZjguLjVhNzZiOWQ3NjQ4IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xp YmdjY2ppdCsrLmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCkBAIC0xODgsNiArMTg4 LDEwIEBAIG5hbWVzcGFjZSBnY2NqaXQKIAkJICAgICAgIGludCB2YWx1ZSkgY29uc3Q7CiAg ICAgcnZhbHVlIG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogCQkgICAgICAgbG9u ZyB2YWx1ZSkgY29uc3Q7CisjaWZkZWYgTElCR0NDSklUX0lOQ0xVREVfTE9OR0xPTkdTCisg ICAgcnZhbHVlIG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAorCQkgICAgICAgbG9u ZyBsb25nIHZhbHVlKSBjb25zdDsKKyNlbmRpZgogICAgIHJ2YWx1ZSB6ZXJvICh0eXBlIG51 bWVyaWNfdHlwZSkgY29uc3Q7CiAgICAgcnZhbHVlIG9uZSAodHlwZSBudW1lcmljX3R5cGUp IGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKQEAg LTk1Niw2ICs5NjAsMTkgQEAgY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5 cGUsCiAJCQkJCSAgdmFsdWUpKTsKIH0KIAorI2lmZGVmIExJQkdDQ0pJVF9JTkNMVURFX0xP TkdMT05HUworaW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1l cmljX3R5cGUsCisJCSAgICAgbG9uZyBsb25nIHZhbHVlKSBjb25zdAoreworICByZXR1cm4g cnZhbHVlICgKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9u ZyAoCisgICAgICBtX2lubmVyX2N0eHQsCisgICAgICBudW1lcmljX3R5cGUuZ2V0X2lubmVy X3R5cGUgKCksCisgICAgICB2YWx1ZSkpOworfQorI2VuZGlmCisKIGlubGluZSBydmFsdWUK IGNvbnRleHQ6Onplcm8gKHR5cGUgbnVtZXJpY190eXBlKSBjb25zdAogewpAQCAtMTAwMiw2 ICsxMDE5LDE3IEBAIGNvbnRleHQ6Om5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAog ICAgICAgcmVhbCwgaW1hZykpOwogfQogCitpbmxpbmUgcnZhbHVlCitjb250ZXh0OjpuZXdf cnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKKwkJICAgICBsb25nIGRvdWJsZSByZWFsLCBs b25nIGRvdWJsZSBpbWFnKSBjb25zdAoreworICByZXR1cm4gcnZhbHVlICgKKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfbG9uZ19kb3VibGUgKAorICAg ICAgbV9pbm5lcl9jdHh0LAorICAgICAgbnVtZXJpY190eXBlLmdldF9pbm5lcl90eXBlICgp LAorICAgICAgcmVhbCwgaW1hZykpOworfQorCiBpbmxpbmUgcnZhbHVlCiBjb250ZXh0Ojpu ZXdfcnZhbHVlICh0eXBlIHBvaW50ZXJfdHlwZSwKIAkJICAgICB2b2lkICp2YWx1ZSkgY29u c3QKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmNjIGIvZ2NjL2ppdC9saWJnY2Nq aXQuY2MKaW5kZXggNzlhMjEzNjI0ZGEuLjIxZDBlMGFjM2Q0IDEwMDY0NAotLS0gYS9nY2Mv aml0L2xpYmdjY2ppdC5jYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwpAQCAtMTk4Miw2 ICsxOTgyLDE5IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZyAoZ2Nj X2ppdF9jb250ZXh0ICpjdHh0LAogCSAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+ IChudW1lcmljX3R5cGUsIHZhbHVlKSk7CiB9CiAKK2djY19qaXRfcnZhbHVlICoKK2djY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsCisJCQkJCSAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAorCQkJCQkgICBs b25nIGxvbmcgdmFsdWUpCit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEws IE5VTEwsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9n Z2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9OT05OVUxMX05VTUVSSUNfVFlQRSAo Y3R4dCwgbnVtZXJpY190eXBlKTsKKworICByZXR1cm4gKChnY2Nfaml0X3J2YWx1ZSAqKWN0 eHQKKwkgIC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+IChudW1lcmljX3R5 cGUsIHZhbHVlKSk7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0 aW9uIGluIGxpYmdjY2ppdC5oLgogCiAgICBUaGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxl bnQgdG86CkBAIC0yMDM1LDYgKzIwNDgsMTkgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkgIC0+bmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IDxkb3VibGU+IChudW1lcmljX3R5cGUsIHZhbHVlKSk7CiB9CiAKK2dj Y19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19k b3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkJICAgICBnY2Nfaml0X3R5cGUg Km51bWVyaWNfdHlwZSwKKwkJCQkJICAgICBsb25nIGRvdWJsZSB2YWx1ZSkKK3sKKyAgUkVU VVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgTlVMTCwgIk5VTEwgY29udGV4dCIpOwor ICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVMTF9J Rl9GQUlMX05PTk5VTExfTlVNRVJJQ19UWVBFIChjdHh0LCBudW1lcmljX3R5cGUpOworCisg IHJldHVybiAoKGdjY19qaXRfcnZhbHVlICopY3R4dAorCSAgLT5uZXdfcnZhbHVlX2Zyb21f Y29uc3QgPGxvbmcgZG91YmxlPiAobnVtZXJpY190eXBlLCB2YWx1ZSkpOworfQorCiBnY2Nf aml0X3J2YWx1ZSAqCiBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhf ZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCQkJCQlnY2Nfaml0X3R5cGUgKm51 bWVyaWNfdHlwZSwKQEAgLTIwNTYsNiArMjA4MiwyOCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJ ICAgICAgbnVtZXJpY190eXBlLCBnY2M6OmppdDo6aG9zdF9wYWlyPGRvdWJsZT4gKHJlYWws IGltYWcpKSk7CiB9CiAKK2djY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZSAoCisgIGdjY19qaXRfY29udGV4dCAq Y3R4dCwKKyAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisgIGxvbmcgZG91YmxlIHJl YWwsCisgIGxvbmcgZG91YmxlIGltYWcpCit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGN0 eHQsIE5VTEwsIE5VTEwsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0 LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9OT05OVUxMX05VTUVS SUNfVFlQRSAoY3R4dCwgbnVtZXJpY190eXBlKTsKKworICBSRVRVUk5fTlVMTF9JRl9GQUlM X1BSSU5URjEgKAorICAgIG51bWVyaWNfdHlwZS0+aXNfZmxvYXQgKCksCisgICAgY3R4dCwg TlVMTCwKKyAgICAibm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSAodHlwZTogJXMpIiwKKyAg ICBudW1lcmljX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIHJldHVybiAoKGdj Y19qaXRfcnZhbHVlICopY3R4dC0+CisJICBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGdjYzo6 aml0Ojpob3N0X3BhaXI8bG9uZyBkb3VibGU+PiAoCisJICAgIG51bWVyaWNfdHlwZSwgZ2Nj OjpqaXQ6Omhvc3RfcGFpcjxsb25nIGRvdWJsZT4gKHJlYWwsIGltYWcpKSk7Cit9CisKIAog LyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0Lmgu CiAKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmggYi9nY2Mvaml0L2xpYmdjY2pp dC5oCmluZGV4IDZjYTNjZDkwYjU3Li44Mzg4ZTlkNGEwZiAxMDA2NDQKLS0tIGEvZ2NjL2pp dC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBAIC0xMDg0LDYgKzEw ODQsMjAgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsCiAJCQkJICAgICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUs CiAJCQkJICAgICAgbG9uZyB2YWx1ZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfTE9P TkdfQ09OU1RBTlRTCisvKiBHZXQgYSBjb25zdGFudCBmcm9tIGEgbG9uZyBsb25nLgorCisg ICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzI2LiBZb3UgY2Fu IHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2Ugd2l0aDoKKyAgICAgI2lmZGVmIExJQkdDQ0pJ VF9IQVZFX0xPT05HX0NPTlNUQU5UUyAqLworCisjaWZkZWYgTElCR0NDSklUX0lOQ0xVREVf TE9OR0xPTkdTCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkJ ICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisJCQkJCSAgIGxvbmcgbG9uZyB2YWx1 ZSk7CisjZW5kaWYKKwogZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKIGdjY19qaXRfY29udGV4 dF96ZXJvIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCSAgICAgIGdjY19qaXRfdHlwZSAq bnVtZXJpY190eXBlKTsKQEAgLTEwOTgsNyArMTExMiwxNyBAQCBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJCQln Y2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKIAkJCQkJZG91YmxlIHZhbHVlKTsKIAotLyog Q29tcGxleCBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCisvKiBHZXQgYSBjb25zdGFudCBm cm9tIGEgbG9uZyBkb3VibGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIExJ QkdDQ0pJVF9BQklfMjYuIFlvdSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB3aXRo OgorICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfTE9PTkdfQ09OU1RBTlRTICovCitleHRl cm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9s b25nX2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQkgICAgIGdjY19qaXRf dHlwZSAqbnVtZXJpY190eXBlLAorCQkJCQkgICAgIGxvbmcgZG91YmxlIHZhbHVlKTsKKwor LyogR2V0IGEgY29uc3RhbnQgZnJvbSBhIGNvbXBsZXggZG91YmxlLgogCiAgICBUaGlzIEFQ SSBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzI2OyB5b3UgY2FuIHRl c3QgZm9yIGl0cwogICAgcHJlc2VuY2UgdXNpbmcKQEAgLTExMTAsNiArMTEzNCwxOCBAQCBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsCiAJCQkJCQlkb3VibGUgcmVhbCwKIAkJCQkJCWRvdWJsZSBpbWFn KTsKIAorLyogR2V0IGEgY29uc3RhbnQgZnJvbSBhIGNvbXBsZXggbG9uZyBkb3VibGUuCisK KyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMjY7 IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZworICAgICAjaWZkZWYg TElCR0NDSklUX0hBVkVfTE9PTkdfQ09OU1RBTlRTICovCisKK2V4dGVybiBnY2Nfaml0X3J2 YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfbG9uZ19k b3VibGUgKAorICBnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisgIGdjY19qaXRfdHlwZSAqbnVt ZXJpY190eXBlLAorICBsb25nIGRvdWJsZSByZWFsLCBsb25nIGRvdWJsZSBpbWFnKTsKKwog LyogUG9pbnRlcnMuICAqLwogZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fcHRyIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCmRpZmYg LS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAK aW5kZXggZWZhODBkOWNmMmYuLmFiYTJkNjkwNzlmIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xp YmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCkBAIC0yODAsNSArMjgw LDkgQEAgTElCR0NDSklUX0FCSV8yNSB7CiBMSUJHQ0NKSVRfQUJJXzI2IHsKICAgZ2xvYmFs OgogICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGU7 CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91 YmxlOworICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGU7 CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmc7CiAgICAg Z2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzOwogfSBMSUJH Q0NKSVRfQUJJXzI1OworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwt bm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFp bGluZy10ZXN0cy5oCmluZGV4IGI4NjkzYmQ1YjljLi4zODgwYjQyOGMyNiAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKQEAgLTI3Nyw2 ICsyNzcsMTMgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAK Ky8qIHRlc3QtbG9uZy1saXRlcmFscy5jICovCisjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0 ZV9jb2RlX2xvbmdfbGl0ZXJhbHMKKyNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVf bG9uZ19saXRlcmFscworI2luY2x1ZGUgInRlc3QtbG9uZy1saXRlcmFscy5jIgorI3VuZGVm IGNyZWF0ZV9jb2RlCisjdW5kZWYgdmVyaWZ5X2NvZGUKKwogLyogdGVzdC1sb25nLXN0cmlu Zy1saXRlcmFsLmMgKi8KICNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfbG9uZ19z dHJpbmdfbGl0ZXJhbAogI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9sb25nX3N0 cmluZ19saXRlcmFsCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxv bmctbGl0ZXJhbHMuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9uZy1saXRlcmFs cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMmM2Yzg1YTI4 YwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9uZy1s aXRlcmFscy5jCkBAIC0wLDAgKzEsMjc0IEBACisvKiBUZXN0IGxvbmcgbGl0ZXJhbHMuCisK KyAgIEkuZS4gbG9uZyBsb25nLCBsb25nIGRvdWJsZSBhbmQgbG9uZyBjb21wbGV4IGRvdWJs ZXMuCisKKyAgIEFsc28gdGVzdCBOYU46cyBhbmQgaW5mOnMgd2l0aCBkb3VibGUuICovCisK KworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRl IDxtYXRoLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQu aCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK2ludCBjb21wYXJlX25hbnMoZG91YmxlIGQx LCBkb3VibGUgZDIpCit7CisgIHVuaW9uIHtkb3VibGUgZDsgdW5zaWduZWQgbG9uZyBsb25n IHVsbDt9IHUxLCB1MjsKKworICB1MS5kID0gZDE7CisgIHUyLmQgPSBkMjsKKworICByZXR1 cm4gdTEudWxsID09IHUyLnVsbDsKK30KKworc3RhdGljIHZvaWQKK21ha2VfY29kZV9saXRf Y2xkKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmZuX25hbWUsCisgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgICAg ICAgICAgIF9Db21wbGV4IGxvbmcgZG91YmxlIGxvY2FsX3ZhbCwKKyAgICAgICAgICAgICAg ICAgIGludCBsaXRfdHlwZSkKK3sKKyAgZ2NjX2ppdF90eXBlICp0dCA9IGdjY19qaXRfY29u dGV4dF9nZXRfdHlwZSAoY3R4dCwgdHlwZSk7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9v ID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBHQ0NfSklU X0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHR0LCBmbl9uYW1lLCAwLCAwLCAwKTsKKworICBn Y2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28s ICJzdGFydCIpOworCisgIC8qIGxvY2FsX3R5cGUgZjEgPSBsb2NhbF92YWw7ICovCisgIGdj Y19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmb28sIDAs IHR0LCAiZjEiKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqcjE7CisKKyAgaWYgKGxpdF90eXBl ID09ICdMJykKKyAgICByMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9u Z19kb3VibGUgKAorICAgICAgY3R4dCwgdHQsIGNyZWFsbChsb2NhbF92YWwpKTsKKyAgZWxz ZSBpZiAobGl0X3R5cGUgPT0gJ0MnKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91YmxlICgKKyAgICAgICAgICAgY3R4dCwgdHQs IGNyZWFsbCAobG9jYWxfdmFsKSwgY2ltYWdsKGxvY2FsX3ZhbCkpOworCisgIGdjY19qaXRf YmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBmMSwgcjEpOworCisgIGdjY19qaXRf YmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZh bHVlKGYxKSk7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX2NvZGVfbGl0X2QgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm5fbmFtZSwK KyAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgIF9Db21wbGV4 IGRvdWJsZSBsb2NhbF92YWwsCisgICAgICAgICAgICAgICAgIGludCBsaXRfdHlwZSkKK3sK KyAgZ2NjX2ppdF90eXBlICp0dCA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwg dHlwZSk7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25l d19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAor ICAgIHR0LCBmbl9uYW1lLCAwLCAwLCAwKTsKKworICBnY2Nfaml0X2Jsb2NrICpibG9jayA9 IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworCisgIC8qIGxv Y2FsX3R5cGUgZjEgPSBsb2NhbF92YWw7ICovCisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdj Y19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmb28sIDAsIHR0LCAiZjEiKTsKKworICBnY2Nf aml0X3J2YWx1ZSAqcjE7CisKKyAgaWYgKGxpdF90eXBlID09ICdkJykKKyAgICByMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICgKKyAgICAgIGN0eHQsIHR0 LCBsb2NhbF92YWwpOworICBlbHNlIGlmIChsaXRfdHlwZSA9PSAnYycpCisgICAgcjEgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlICgKKwkgICBj dHh0LCB0dCwgY3JlYWwgKGxvY2FsX3ZhbCksIGNpbWFnIChsb2NhbF92YWwpKTsKKworICBn Y2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgZjEsIHIxKTsKKworICBn Y2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIGdjY19qaXRfbHZhbHVl X2FzX3J2YWx1ZShmMSkpOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9jb2RlX2xpdF9sbCAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq Zm5fbmFtZSwKKyAgICAgICAgICAgICAgICAgIGludCB0eXBlLAorICAgICAgICAgICAgICAg ICAgbG9uZyBsb25nIGxvY2FsX3ZhbCkKK3sKKyAgZ2NjX2ppdF90eXBlICp0dCA9IGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgdHlwZSk7CisKKyAgZ2NjX2ppdF9mdW5jdGlv biAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBH Q0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHR0LCBmbl9uYW1lLCAwLCAwLCAwKTsK KworICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmb28sICJzdGFydCIpOworCisgIC8qIGxvY2FsX3R5cGUgZjEgPSBsb2NhbF92YWw7ICov CisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChm b28sIDAsIHR0LCAiZjEiKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqcjE7CisKKyAgcjEgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoCisgICAgY3R4dCwg dHQsIGNyZWFsbChsb2NhbF92YWwpKTsKKworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25t ZW50IChibG9jaywgMCwgZjEsIHIxKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3Jl dHVybiAoYmxvY2ssIDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQorCisK K3VuaW9uIHV1IHsgZG91YmxlIGQ7IGxvbmcgbG9uZyBsOyB9IHU7CisKK3ZvaWQKK2NyZWF0 ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAg KHZvaWQpIHVzZXJfZGF0YTsKKworICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5hYmxl X2NvbXBsZXhfdHlwZXMgKGN0eHQsIDEpOworCisgIG1ha2VfY29kZV9saXRfY2xkIChjdHh0 LCAibG9uZ19kb3VibGVfbGRsaXRfMWMxIiwKKyAgICBHQ0NfSklUX1RZUEVfTE9OR19ET1VC TEUsCisgICAgLTEuMUwsICdMJyk7CisgIG1ha2VfY29kZV9saXRfY2xkIChjdHh0LCAibG9u Z19kb3VibGVfbGRsaXRfMUxkaXYzTCIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxF LAorICAgIDEvMy5MLCAnTCcpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImxvbmdf ZG91YmxlX2xkbGl0X2luZiIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFLAorICAg IElORklOSVRZLCAnTCcpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImxvbmdfZG91 YmxlX2xkbGl0X21pbmYiLAorICAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKyAgICAt SU5GSU5JVFksICdMJyk7CisgIG1ha2VfY29kZV9saXRfY2xkIChjdHh0LCAibG9uZ19kb3Vi bGVfbGRsaXRfbmFuMSIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFLAorICAgIG5h bmwoIjEiKSwgJ0wnKTsKKworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImNvbXBsZXhf bG9uZ19kb3VibGVfY2xkbGl0XzFkaXYzXzJkaXYzaiIsCisgICAgR0NDX0pJVF9UWVBFX0NP TVBMRVhfTE9OR19ET1VCTEUsCisgICAgMS8zLkwgKyAyLkxqLzMsICdDJyk7CisKKyAgbWFr ZV9jb2RlX2xpdF9jbGQgKGN0eHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxpdF9pbmZf aW5maiIsCisgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisgICAgQ01Q TFhMIChJTkZJTklUWSwgSU5GSU5JVFkpLCAnQycpOworICBtYWtlX2NvZGVfbGl0X2NsZCAo Y3R4dCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X21pbmZfbWluZmoiLAorICAgIEdD Q19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAorICAgIENNUExYTCAoLUlORklOSVRZ LCAtSU5GSU5JVFkpLCAnQycpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImNvbXBs ZXhfbG9uZ19kb3VibGVfY2xkbGl0X25hbjFfbmFuMmoiLAorICAgIEdDQ19KSVRfVFlQRV9D T01QTEVYX0xPTkdfRE9VQkxFLAorICAgIENNUExYTCAobmFubCAoIjEiKSwgbmFubCAoIjIi KSksICdDJyk7CisKKyAgbWFrZV9jb2RlX2xpdF9sbCAoY3R4dCwgImxvbmdfbG9uZ19sbGxp dF8yIiwKKyAgICBHQ0NfSklUX1RZUEVfTE9OR19MT05HLAorICAgIDIpOworCisgIG1ha2Vf Y29kZV9saXRfbGwgKGN0eHQsICJsb25nX2xvbmdfbGxsaXRfbWluIiwKKyAgICBHQ0NfSklU X1RZUEVfTE9OR19MT05HLAorICAgIExMT05HX01JTik7CisKKyAgbWFrZV9jb2RlX2xpdF9s bCAoY3R4dCwgImxvbmdfbG9uZ19sbGxpdF9tYXgiLAorICAgIEdDQ19KSVRfVFlQRV9MT05H X0xPTkcsCisgICAgTExPTkdfTUFYKTsKKworICBtYWtlX2NvZGVfbGl0X2xsIChjdHh0LCAi dWxvbmdfbG9uZ19sbGxpdF9tYXgiLAorICAgIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05H X0xPTkcsCisgICAgVUxMT05HX01BWCk7CisKKyAgbWFrZV9jb2RlX2xpdF9kIChjdHh0LCAi ZG91YmxlX25hbjEiLAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisgICAgbmFuKCIxIiks ICdkJyk7CisgIG1ha2VfY29kZV9saXRfZCAoY3R4dCwgImRvdWJsZV9pbmYiLAorICAgIEdD Q19KSVRfVFlQRV9ET1VCTEUsCisgICAgSU5GSU5JVFksICdkJyk7CisgIG1ha2VfY29kZV9s aXRfZCAoY3R4dCwgImRvdWJsZV9taW5mIiwKKyAgICBHQ0NfSklUX1RZUEVfRE9VQkxFLAor ICAgIC1JTkZJTklUWSwgJ2QnKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfTk9O X05VTEwgKHJlc3VsdCk7CisgIHsKKyAgICBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiZG91YmxlX25hbjEiKTsKKworICAgIC8q IENvbXBhcmUgcGF5bG9hZCBvZiBuYW5zLiAqLworICAgIENIRUNLKGNvbXBhcmVfbmFucyAo ZigpLCBuYW4oIjEiKSkpOworICB9CisgIHsKKyAgICBkb3VibGUgKCpmKSgpID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiZG91YmxlX2luZiIpOworCisg ICAgQ0hFQ0tfVkFMVUUgKGYoKSwgSU5GSU5JVFkpOworICB9CisgIHsKKyAgICBkb3VibGUg KCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiZG91 YmxlX21pbmYiKTsKKworICAgIENIRUNLX1ZBTFVFIChmKCksIC1JTkZJTklUWSk7CisgIH0K KyAgeworICAgIGxvbmcgZG91YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl ICgKKyAgICAgIHJlc3VsdCwgImxvbmdfZG91YmxlX2xkbGl0XzFjMSIpOworCisgICAgQ0hF Q0tfVkFMVUUoZiAoKSwgLTEuMUwpOworICB9CisgIHsKKyAgICBsb25nIGRvdWJsZSAoKmYp KCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQsICJsb25nX2Rv dWJsZV9sZGxpdF8xTGRpdjNMIik7CisKKyAgICBDSEVDS19WQUxVRShmICgpLCAxLkwvMy5M KTsKKyAgfQorICB7CisgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgKCpmKSgpID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJs ZV9jbGRsaXRfMWRpdjNfMmRpdjNqIik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCAxLzMu TCArIDIuTGovMyk7CisgIH0KKyAgeworICAgIF9Db21wbGV4IGxvbmcgZG91YmxlICgqZiko KSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImNvbXBsZXhf bG9uZ19kb3VibGVfY2xkbGl0X2luZl9pbmZqIik7CisKKyAgICBDSEVDS19WQUxVRSAoZigp LENNUExYTCAoSU5GSU5JVFksIElORklOSVRZKSk7CisgIH0KKyAgeworICAgIF9Db21wbGV4 IGxvbmcgZG91YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAg IHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X21pbmZfbWluZmoiKTsKKwor ICAgIENIRUNLX1ZBTFVFIChmKCksQ01QTFhMICgtSU5GSU5JVFksIC1JTkZJTklUWSkpOwor ICB9CisgIHsKKyAgICBfQ29tcGxleCBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2Ns ZGxpdF9uYW4xX25hbjJqIik7CisKKyAgICBfQ29tcGxleCBsb25nIGRvdWJsZSBhbnMgPSBm ICgpOworCisgICAgLyogVGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggcGFkZGluZyBieXRl cyB0cnlpbmcgdG8KKyAgICAgICBkbyBhIGJ5dGV3aXNlIGNvbXBhcmUgc28ganVzdCBjaGVj ayB0aGV5IGFyZSBuYW5zIGZvcgorICAgICAgIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBkaWZm ZXJlbnQgcGxhdGZvcm1zLiBJLmUuIGRvbid0CisgICAgICAgdmVyaWZ5IHRoZSBuYW4gcGF5 bG9hZCBpcyB0aGUgc2FtZS4gKi8KKyAgICBDSEVDSyAoaXNuYW4gKGNyZWFsbCAoYW5zKSkp OworICAgIENIRUNLIChpc25hbiAoY2ltYWdsIChhbnMpKSk7CisgIH0KKyAgeworICAgIGxv bmcgbG9uZyAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1 bHQsICJsb25nX2xvbmdfbGxsaXRfMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGYoKSwgMik7 CisgIH0KKyAgeworICAgIGxvbmcgbG9uZyAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAoCisgICAgICByZXN1bHQsICJsb25nX2xvbmdfbGxsaXRfbWluIik7CisKKyAgICBD SEVDS19WQUxVRSAoZigpLCBMTE9OR19NSU4pOworICB9CisgIHsKKyAgICBsb25nIGxvbmcg KCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAibG9u Z19sb25nX2xsbGl0X21heCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGYoKSwgTExPTkdfTUFY KTsKKyAgfQorICB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgInVsb25nX2xvbmdfbGxsaXRfbWF4 Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCBVTExPTkdfTUFYKTsKKyAgfQorfQotLSAK Mi40Mi4wCgo= --------------T24Uu0F7g2eKDJ4XpRFvi0nW--