From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 122872 invoked by alias); 22 Jun 2017 07:19:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 122857 invoked by uid 89); 22 Jun 2017 07:19:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS,URIBL_RED autolearn=ham version=3.3.2 spammy=ji, forgotten, Cesar, cesar X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 22 Jun 2017 07:19:16 +0000 Received: from svr-orw-mbx-06.mgc.mentorg.com ([147.34.90.206]) by relay1.mentorg.com with esmtp id 1dNwOW-0000WD-VH from ChungLin_Tang@mentor.com ; Thu, 22 Jun 2017 00:19:12 -0700 Received: from svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) by SVR-ORW-MBX-06.mgc.mentorg.com (147.34.90.206) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Thu, 22 Jun 2017 00:19:10 -0700 Received: from [0.0.0.0] (147.34.91.1) by svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) with Microsoft SMTP Server (TLS) id 15.0.1263.5 via Frontend Transport; Thu, 22 Jun 2017 00:19:08 -0700 Subject: Re: [libgomp, OpenACC] Add more map handling for enter/exit data directives To: Jakub Jelinek CC: gcc-patches , Thomas Schwinge , Cesar Philippidis References: <8f8391b0-5d9a-19db-671f-81f16063da59@mentor.com> <20170613160025.GK2099@tucnak> From: Chung-Lin Tang Message-ID: <02d54864-7326-d44e-088b-bda2f0b3a136@mentor.com> Date: Thu, 22 Jun 2017 07:19:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 In-Reply-To: <20170613160025.GK2099@tucnak> Content-Type: multipart/mixed; boundary="------------F1546CFBD01ECE7BF76AAB3B" X-SW-Source: 2017-06/txt/msg01622.txt.bz2 --------------F1546CFBD01ECE7BF76AAB3B Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-length: 2513 On 2017/6/14 12:00 AM, Jakub Jelinek wrote: > I don't see sufficient information on what you want to change and why > and whether the changes are backwards compatible (say will a valid > OpenACC 2.0 program compiled by GCC 7 work against both libgomp from GCC 7 > as well as one with this patch)? > Can you write a few paragraphs on it (doesn't have to be comments in the > source, mailing list is fine)? The current code doesn't handle GOMP_MAP_TO (present_or_copyin) and also the GOMP_MAP_PSET/MAP_POINTER handling wasn't entirely correct. This patch fixes them. In the new attached patch, I added a fix a memory management fix that was forgotten earlier. The collective patch was originally by Cesar, from here: https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01367.html (in that post, his main emphasis was the memory management fix) >> + case GOMP_MAP_ALLOC: >> + acc_present_or_create (hostaddrs[i], sizes[i]); >> break; >> case GOMP_MAP_FORCE_ALLOC: >> acc_create (hostaddrs[i], sizes[i]); >> break; >> - case GOMP_MAP_FORCE_PRESENT: >> + case GOMP_MAP_TO: >> acc_present_or_copyin (hostaddrs[i], sizes[i]); >> break; >> case GOMP_MAP_FORCE_TO: >> - acc_present_or_copyin (hostaddrs[i], sizes[i]); >> + acc_copyin (hostaddrs[i], sizes[i]); >> break; > > E.g. in this hunk you remove GOMP_MAP_POINTER and GOMP_MAP_FORCE_PRESENT > handling and significantly change GOMP_MAP_FORCE_TO. The first two will > now gomp_fatal, right? Can it ever appear in GOACC_enter_exit_data > calls? GOMP_MAP_FORCE_PRESENT does not appear in enter/exit data directives, while GOMP_MAP_POINTER is handled in find_pointer(). Thanks, Chung-Lin 2017-06-22 Cesar Philippidis Thomas Schwinge Chung-Lin Tang libgomp/ * oacc-mem.c (gomp_acc_remove_pointer): Fix a memory leak preventing target_mem_desc.to_free from being deallocated with acc exit data. * oacc-parallel.c (find_pset): Adjust and rename from... (find_pointer): ...this function. (GOACC_enter_exit_data): Handle GOMP_MAP_TO and GOMP_MAP_ALLOC, adjust find_pointer calls into find_pset, adjust pointer map handling, add acc_is_present guards to calls to gomp_acc_insert_pointer and gomp_acc_remove_pointer. * testsuite/libgomp.oacc-c-c++-common/data-2.c: Update test. * testsuite/libgomp.oacc-c-c++-common/enter-data.c: New test. * testsuite/libgomp.oacc-fortran/data-2.f90: Update test. --------------F1546CFBD01ECE7BF76AAB3B Content-Type: text/plain; charset="UTF-8"; name="272.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="272.diff" Content-length: 21712 SW5kZXg6IG9hY2MtbWVtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g b2FjYy1tZW0uYwkocmV2aXNpb24gMjQ5MDkxKQorKysgb2FjYy1tZW0uYwko d29ya2luZyBjb3B5KQpAQCAtNjk4LDEwICs2OTgsOCBAQCBnb21wX2FjY19y ZW1vdmVfcG9pbnRlciAodm9pZCAqaCwgYm9vbCBmb3JjZV9jb3B5ZgogICBp ZiAodC0+cmVmY291bnQgPT0gbWlucmVmcykKICAgICB7CiAgICAgICAvKiBU aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgc28gcHVsbCB0aGUgZGVzY3Jp cHRvciBvZmYgdGhlCi0JIGNoYWluLiBUaGlzIGF2b2lkcyBnb21wX3VubWFw X3ZhcnMgdmlhIGdvbXBfdW5tYXBfdGd0IGZyb20KKwkgY2hhaW4uIFRoaXMg cHJldmVudHMgZ29tcF91bm1hcF92YXJzIHZpYSBnb21wX3VubWFwX3RndCBm cm9tCiAJIGZyZWVpbmcgdGhlIGRldmljZSBtZW1vcnkuICovCi0gICAgICB0 LT50Z3RfZW5kID0gMDsKLSAgICAgIHQtPnRvX2ZyZWUgPSAwOwogCiAgICAg ICBmb3IgKHRwID0gTlVMTCwgdCA9IGFjY19kZXYtPm9wZW5hY2MuZGF0YV9l bnZpcm9uOyB0ICE9IE5VTEw7CiAJICAgdHAgPSB0LCB0ID0gdC0+cHJldikK QEAgLTcxNyw4ICs3MTUsNyBAQCBnb21wX2FjY19yZW1vdmVfcG9pbnRlciAo dm9pZCAqaCwgYm9vbCBmb3JjZV9jb3B5ZgogCX0KICAgICB9CiAKLSAgaWYg KGZvcmNlX2NvcHlmcm9tKQotICAgIHQtPmxpc3RbMF0uY29weV9mcm9tID0g MTsKKyAgdC0+bGlzdFswXS0+Y29weV9mcm9tID0gZm9yY2VfY29weWZyb20g PyAxIDogMDsKIAogICBnb21wX211dGV4X3VubG9jayAoJmFjY19kZXYtPmxv Y2spOwogCkluZGV4OiBvYWNjLXBhcmFsbGVsLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gb2FjYy1wYXJhbGxlbC5jCShyZXZpc2lvbiAyNDkwOTEp CisrKyBvYWNjLXBhcmFsbGVsLmMJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE1 ICszOCwyMyBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPGFz c2VydC5oPgogCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWFwcGluZ3Mg YXNzb2NpYXRlZCB3aXRoIHRoZSBwb2ludGVyIG9yIHBzZXQuIFBTRVQKKyAg IGhhdmUgdGhyZWUgbWFwcGluZ3MsIHdoZXJlYXMgcG9pbnRlciBoYXZlIHR3 by4gICovCisKIHN0YXRpYyBpbnQKLWZpbmRfcHNldCAoaW50IHBvcywgc2l6 ZV90IG1hcG51bSwgdW5zaWduZWQgc2hvcnQgKmtpbmRzKQorZmluZF9wb2lu dGVyIChpbnQgcG9zLCBzaXplX3QgbWFwbnVtLCB1bnNpZ25lZCBzaG9ydCAq a2luZHMpCiB7CiAgIGlmIChwb3MgKyAxID49IG1hcG51bSkKICAgICByZXR1 cm4gMDsKIAogICB1bnNpZ25lZCBjaGFyIGtpbmQgPSBraW5kc1twb3MrMV0g JiAweGZmOwogCi0gIHJldHVybiBraW5kID09IEdPTVBfTUFQX1RPX1BTRVQ7 CisgIGlmIChraW5kID09IEdPTVBfTUFQX1RPX1BTRVQpCisgICAgcmV0dXJu IDM7CisgIGVsc2UgaWYgKGtpbmQgPT0gR09NUF9NQVBfUE9JTlRFUikKKyAg ICByZXR1cm4gMjsKKworICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQg Z29hY2Nfd2FpdCAoaW50IGFzeW5jLCBpbnQgbnVtX3dhaXRzLCB2YV9saXN0 ICphcCk7CkBAIC0yOTgsNyArMzA2LDkgQEAgR09BQ0NfZW50ZXJfZXhpdF9k YXRhIChpbnQgZGV2aWNlLCBzaXplX3QgbWFwbnVtLAogCiAgICAgICBpZiAo a2luZCA9PSBHT01QX01BUF9GT1JDRV9BTExPQwogCSAgfHwga2luZCA9PSBH T01QX01BUF9GT1JDRV9QUkVTRU5UCi0JICB8fCBraW5kID09IEdPTVBfTUFQ X0ZPUkNFX1RPKQorCSAgfHwga2luZCA9PSBHT01QX01BUF9GT1JDRV9UTwor CSAgfHwga2luZCA9PSBHT01QX01BUF9UTworCSAgfHwga2luZCA9PSBHT01Q X01BUF9BTExPQykKIAl7CiAJICBkYXRhX2VudGVyID0gdHJ1ZTsKIAkgIGJy ZWFrOwpAQCAtMzEyLDMxICszMjIsMzkgQEAgR09BQ0NfZW50ZXJfZXhpdF9k YXRhIChpbnQgZGV2aWNlLCBzaXplX3QgbWFwbnVtLAogCQkgICAgICBraW5k KTsKICAgICB9CiAKKyAgLyogSW4gYywgbm9uLXBvaW50ZXJzIGFuZCBhcnJh eXMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGRhdGEgY2xhdXNlLgor ICAgICBEeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBzdWJhcnJh eXMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgZGF0YQorICAgICBjbGF1c2UgZm9s bG93ZWQgYnkgYW4gaW50ZXJuYWwgR09NUF9NQVBfUE9JTlRFUi4KKworICAg ICBJbiBmb3J0cmFuLCBzY2FsYXJzIGFuZCBub3QgYWxsb2NhdGVkIGFycmF5 cyBhcmUgcmVwcmVzZW50ZWQgYnkgYQorICAgICBzaW5nbGUgZGF0YSBjbGF1 c2UuIEFsbG9jYXRlZCBhcnJheXMgYW5kIHN1YmFycmF5cyBoYXZlIHRocmVl IG1hcHBpbmdzOgorICAgICAxKSB0aGUgb3JpZ2luYWwgZGF0YSBjbGF1c2Us IDIpIGEgUFNFVCAzKSBhIHBvaW50ZXIgdG8gdGhlIGFycmF5IGRhdGEuCisg ICovCisKICAgaWYgKGRhdGFfZW50ZXIpCiAgICAgewogICAgICAgZm9yIChp ID0gMDsgaSA8IG1hcG51bTsgaSsrKQogCXsKIAkgIHVuc2lnbmVkIGNoYXIg a2luZCA9IGtpbmRzW2ldICYgMHhmZjsKIAotCSAgLyogU2NhbiBmb3IgUFNF VHMuICAqLwotCSAgaW50IHBzZXRzID0gZmluZF9wc2V0IChpLCBtYXBudW0s IGtpbmRzKTsKKwkgIC8qIFNjYW4gZm9yIHBvaW50ZXJzIGFuZCBQU0VUcy4g ICovCisJICBpbnQgcG9pbnRlciA9IGZpbmRfcG9pbnRlciAoaSwgbWFwbnVt LCBraW5kcyk7CiAKLQkgIGlmICghcHNldHMpCisJICBpZiAoIXBvaW50ZXIp CiAJICAgIHsKIAkgICAgICBzd2l0Y2ggKGtpbmQpCiAJCXsKLQkJY2FzZSBH T01QX01BUF9QT0lOVEVSOgotCQkgIGdvbXBfYWNjX2luc2VydF9wb2ludGVy ICgxLCAmaG9zdGFkZHJzW2ldLCAmc2l6ZXNbaV0sCi0JCQkJCSZraW5kc1tp XSk7CisJCWNhc2UgR09NUF9NQVBfQUxMT0M6CisJCSAgYWNjX3ByZXNlbnRf b3JfY3JlYXRlIChob3N0YWRkcnNbaV0sIHNpemVzW2ldKTsKIAkJICBicmVh azsKIAkJY2FzZSBHT01QX01BUF9GT1JDRV9BTExPQzoKIAkJICBhY2NfY3Jl YXRlIChob3N0YWRkcnNbaV0sIHNpemVzW2ldKTsKIAkJICBicmVhazsKLQkJ Y2FzZSBHT01QX01BUF9GT1JDRV9QUkVTRU5UOgorCQljYXNlIEdPTVBfTUFQ X1RPOgogCQkgIGFjY19wcmVzZW50X29yX2NvcHlpbiAoaG9zdGFkZHJzW2ld LCBzaXplc1tpXSk7CiAJCSAgYnJlYWs7CiAJCWNhc2UgR09NUF9NQVBfRk9S Q0VfVE86Ci0JCSAgYWNjX3ByZXNlbnRfb3JfY29weWluIChob3N0YWRkcnNb aV0sIHNpemVzW2ldKTsKKwkJICBhY2NfY29weWluIChob3N0YWRkcnNbaV0s IHNpemVzW2ldKTsKIAkJICBicmVhazsKIAkJZGVmYXVsdDoKIAkJICBnb21w X2ZhdGFsICgiPj4+PiBHT0FDQ19lbnRlcl9leGl0X2RhdGEgVU5IQU5ETEVE IGtpbmQgMHglLjJ4IiwKQEAgLTM0NiwxMiArMzY0LDE2IEBAIEdPQUNDX2Vu dGVyX2V4aXRfZGF0YSAoaW50IGRldmljZSwgc2l6ZV90IG1hcG51bSwKIAkg ICAgfQogCSAgZWxzZQogCSAgICB7Ci0JICAgICAgZ29tcF9hY2NfaW5zZXJ0 X3BvaW50ZXIgKDMsICZob3N0YWRkcnNbaV0sICZzaXplc1tpXSwgJmtpbmRz W2ldKTsKKwkgICAgICBpZiAoIWFjY19pc19wcmVzZW50IChob3N0YWRkcnNb aV0sIHNpemVzW2ldKSkKKwkJeworCQkgIGdvbXBfYWNjX2luc2VydF9wb2lu dGVyIChwb2ludGVyLCAmaG9zdGFkZHJzW2ldLAorCQkJCQkgICAmc2l6ZXNb aV0sICZraW5kc1tpXSk7CisJCX0KIAkgICAgICAvKiBJbmNyZW1lbnQgJ2kn IGJ5IHR3byBiZWNhdXNlIE9wZW5BQ0MgcmVxdWlyZXMgZm9ydHJhbgogCQkg YXJyYXlzIHRvIGJlIGNvbnRpZ3VvdXMsIHNvIGVhY2ggUFNFVCBpcyBhc3Nv Y2lhdGVkIHdpdGgKIAkJIG9uZSBvZiBNQVBfRk9SQ0VfQUxMT0MvTUFQX0ZP UkNFX1BSRVNFVC9NQVBfRk9SQ0VfVE8sIGFuZAogCQkgb25lIE1BUF9QT0lO VEVSLiAgKi8KLQkgICAgICBpICs9IDI7CisJICAgICAgaSArPSBwb2ludGVy IC0gMTsKIAkgICAgfQogCX0KICAgICB9CkBAIC0zNjAsMTkgKzM4MiwxNSBA QCBHT0FDQ19lbnRlcl9leGl0X2RhdGEgKGludCBkZXZpY2UsIHNpemVfdCBt YXBudW0sCiAgICAgICB7CiAJdW5zaWduZWQgY2hhciBraW5kID0ga2luZHNb aV0gJiAweGZmOwogCi0JaW50IHBzZXRzID0gZmluZF9wc2V0IChpLCBtYXBu dW0sIGtpbmRzKTsKKwlpbnQgcG9pbnRlciA9IGZpbmRfcG9pbnRlciAoaSwg bWFwbnVtLCBraW5kcyk7CiAKLQlpZiAoIXBzZXRzKQorCWlmICghcG9pbnRl cikKIAkgIHsKIAkgICAgc3dpdGNoIChraW5kKQogCSAgICAgIHsKLQkgICAg ICBjYXNlIEdPTVBfTUFQX1BPSU5URVI6Ci0JCWdvbXBfYWNjX3JlbW92ZV9w b2ludGVyIChob3N0YWRkcnNbaV0sIChraW5kc1tpXSAmIDB4ZmYpCi0JCQkJ CSA9PSBHT01QX01BUF9GT1JDRV9GUk9NLAotCQkJCQkgYXN5bmMsIDEpOwot CQlicmVhazsKIAkgICAgICBjYXNlIEdPTVBfTUFQX0RFTEVURToKLQkJYWNj X2RlbGV0ZSAoaG9zdGFkZHJzW2ldLCBzaXplc1tpXSk7CisJCWlmIChhY2Nf aXNfcHJlc2VudCAoaG9zdGFkZHJzW2ldLCBzaXplc1tpXSkpCisJCSAgYWNj X2RlbGV0ZSAoaG9zdGFkZHJzW2ldLCBzaXplc1tpXSk7CiAJCWJyZWFrOwog CSAgICAgIGNhc2UgR09NUF9NQVBfRk9SQ0VfRlJPTToKIAkJYWNjX2NvcHlv dXQgKGhvc3RhZGRyc1tpXSwgc2l6ZXNbaV0pOwpAQCAtMzg1LDEwICs0MDMs MTQgQEAgR09BQ0NfZW50ZXJfZXhpdF9kYXRhIChpbnQgZGV2aWNlLCBzaXpl X3QgbWFwbnVtLAogCSAgfQogCWVsc2UKIAkgIHsKLQkgICAgZ29tcF9hY2Nf cmVtb3ZlX3BvaW50ZXIgKGhvc3RhZGRyc1tpXSwgKGtpbmRzW2ldICYgMHhm ZikKLQkJCQkgICAgID09IEdPTVBfTUFQX0ZPUkNFX0ZST00sIGFzeW5jLCAz KTsKLQkgICAgLyogU2VlIHRoZSBhYm92ZSBjb21tZW50LiAgKi8KLQkgICAg aSArPSAyOworCSAgICBpZiAoYWNjX2lzX3ByZXNlbnQgKGhvc3RhZGRyc1tp XSwgc2l6ZXNbaV0pKQorCSAgICAgIHsKKwkJZ29tcF9hY2NfcmVtb3ZlX3Bv aW50ZXIgKGhvc3RhZGRyc1tpXSwgKGtpbmRzW2ldICYgMHhmZikKKwkJCQkJ ID09IEdPTVBfTUFQX0ZPUkNFX0ZST00sIGFzeW5jLAorCQkJCQkgcG9pbnRl cik7CisJCS8qIFNlZSB0aGUgYWJvdmUgY29tbWVudC4gICovCisJICAgICAg fQorCSAgICBpICs9IHBvaW50ZXIgLSAxOwogCSAgfQogICAgICAgfQogCklu ZGV4OiB0ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWMtYysrLWNvbW1vbi9kYXRh LTIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvbGli Z29tcC5vYWNjLWMtYysrLWNvbW1vbi9kYXRhLTIuYwkocmV2aXNpb24gMjQ5 MDkxKQorKysgdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1jLWMrKy1jb21tb24v ZGF0YS0yLmMJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAvKiB7 IGRnLWRvIHJ1biB9ICovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxvcGVuYWNjLmg+CiAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQpAQCAtMzIsNyArMzMsNyBAQCBtYWluIChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICAgYltp XSA9IGFbaV07CiAKLSNwcmFnbWEgYWNjIGV4aXQgZGF0YSBjb3B5b3V0IChh WzA6Tl0pIGNvcHlvdXQgKGJbMDpOXSkgd2FpdCBhc3luYworI3ByYWdtYSBh Y2MgZXhpdCBkYXRhIGNvcHlvdXQgKGFbMDpOXSwgYlswOk5dKSBkZWxldGUg KE4pIHdhaXQgYXN5bmMKICNwcmFnbWEgYWNjIHdhaXQKIAogICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQpAQCAtNDYsNiArNDcsMzIgQEAgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCiAgICAgeworICAgICAgYVtpXSA9IDMuMDsKKyAgICAgIGJbaV0gPSAw LjA7CisgICAgfQorCisjcHJhZ21hIGFjYyBlbnRlciBkYXRhIGNvcHlpbiAo YVswOk5dKSBhc3luYyAKKyNwcmFnbWEgYWNjIGVudGVyIGRhdGEgY29weWlu IChiWzA6Tl0pIGFzeW5jIHdhaXQKKyNwcmFnbWEgYWNjIGVudGVyIGRhdGEg Y29weWluIChOKSBhc3luYyB3YWl0CisjcHJhZ21hIGFjYyBwYXJhbGxlbCBh c3luYyB3YWl0IHByZXNlbnQgKGFbMDpOXSkgcHJlc2VudCAoYlswOk5dKSBw cmVzZW50IChOKQorI3ByYWdtYSBhY2MgbG9vcAorICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQorICAgIGJbaV0gPSBhW2ldOworCisjcHJhZ21hIGFjYyBl eGl0IGRhdGEgY29weW91dCAoYVswOk5dKSBjb3B5b3V0IChiWzA6Tl0pIGRl bGV0ZSAoTikgd2FpdCBhc3luYworI3ByYWdtYSBhY2Mgd2FpdAorCisgIGZv ciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgaWYgKGFbaV0g IT0gMy4wKQorCWFib3J0ICgpOworCisgICAgICBpZiAoYltpXSAhPSAzLjAp CisJYWJvcnQgKCk7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCisgICAgewogICAgICAgYVtpXSA9IDIuMDsKICAgICAgIGJbaV0gPSAw LjA7CiAgICAgfQpAQCAtNTYsNyArODMsNyBAQCBtYWluIChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICAg YltpXSA9IGFbaV07CiAKLSNwcmFnbWEgYWNjIGV4aXQgZGF0YSBjb3B5b3V0 IChhWzA6Tl0pIGNvcHlvdXQgKGJbMDpOXSkgd2FpdCAoMSkgYXN5bmMgKDEp CisjcHJhZ21hIGFjYyBleGl0IGRhdGEgY29weW91dCAoYVswOk5dKSBjb3B5 b3V0IChiWzA6Tl0pIGRlbGV0ZSAoTikgd2FpdCAoMSkgYXN5bmMgKDEpCiAj cHJhZ21hIGFjYyB3YWl0ICgxKQogCiAgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCkBAIC05Myw3ICsxMjAsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICAgZFtpXSA9 ICgoYVtpXSAqIGFbaV0gKyBhW2ldKSAvIGFbaV0pIC0gYVtpXTsKIAotI3By YWdtYSBhY2MgZXhpdCBkYXRhIGNvcHlvdXQgKGFbMDpOXSkgY29weW91dCAo YlswOk5dKSBjb3B5b3V0IChjWzA6Tl0pIGNvcHlvdXQgKGRbMDpOXSkgd2Fp dCAoMSwgMiwgMykgYXN5bmMgKDEpCisjcHJhZ21hIGFjYyBleGl0IGRhdGEg Y29weW91dCAoYVswOk5dKSBjb3B5b3V0IChiWzA6Tl0pIGNvcHlvdXQgKGNb MDpOXSkgY29weW91dCAoZFswOk5dKSBkZWxldGUgKE4pIHdhaXQgKDEsIDIs IDMpIGFzeW5jICgxKQogI3ByYWdtYSBhY2Mgd2FpdCAoMSkKIAogICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQpAQCAtMTYxLDUgKzE4OCwxNTYgQEAgbWFp biAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWFib3J0ICgpOwogICAgIH0K IAorI2lmICFBQ0NfTUVNX1NIQVJFRAorICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQorICAgIHsKKyAgICAgIGFbaV0gPSAzLjA7CisgICAgICBiW2ldID0g MC4wOworICAgIH0KKworI3ByYWdtYSBhY2MgZW50ZXIgZGF0YSBwcmVzZW50 X29yX2NvcHlpbiAoYVswOk5dKQorCisgIGlmICghYWNjX2lzX3ByZXNlbnQg KGEsIG5ieXRlcykpCisgICAgYWJvcnQgKCk7CisKKyNwcmFnbWEgYWNjIGV4 aXQgZGF0YSBjb3B5b3V0IChhWzA6Tl0pCisKKyAgaWYgKGFjY19pc19wcmVz ZW50IChhLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOworCisjcHJhZ21hIGFj YyBleGl0IGRhdGEgZGVsZXRlIChhWzA6Tl0pCisKKyAgaWYgKGFjY19pc19w cmVzZW50IChhLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOworCisjcHJhZ21h IGFjYyBlbnRlciBkYXRhIHByZXNlbnRfb3JfY29weWluIChhWzA6Tl0sIGJb MDpOXSkKKworICBpZiAoIWFjY19pc19wcmVzZW50IChhLCBuYnl0ZXMpKQor ICAgIGFib3J0ICgpOworCisgIGlmICghYWNjX2lzX3ByZXNlbnQgKGIsIG5i eXRlcykpCisgICAgYWJvcnQgKCk7CisKKyNwcmFnbWEgYWNjIGV4aXQgZGF0 YSBjb3B5b3V0IChhWzA6Tl0sIGJbMDpOXSkKKworICBpZiAoYWNjX2lzX3By ZXNlbnQgKGEsIG5ieXRlcykpCisgICAgYWJvcnQgKCk7CisKKyAgaWYgKGFj Y19pc19wcmVzZW50IChiLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOworCisj cHJhZ21hIGFjYyBleGl0IGRhdGEgZGVsZXRlIChhWzA6Tl0sIGJbMDpOXSkK KworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGEsIG5ieXRlcykpCisgICAgYWJv cnQgKCk7CisKKyAgaWYgKGFjY19pc19wcmVzZW50IChiLCBuYnl0ZXMpKQor ICAgIGFib3J0ICgpOworCisjcHJhZ21hIGFjYyBlbnRlciBkYXRhIHByZXNl bnRfb3JfY3JlYXRlIChhWzA6Tl0sIGJbMDpOXSkKKworICBpZiAoIWFjY19p c19wcmVzZW50IChhLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOworCisgIGlm ICghYWNjX2lzX3ByZXNlbnQgKGIsIG5ieXRlcykpCisgICAgYWJvcnQgKCk7 CisKKyNwcmFnbWEgYWNjIGV4aXQgZGF0YSBjb3B5b3V0IChhWzA6Tl0sIGJb MDpOXSkKKworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGEsIG5ieXRlcykpCisg ICAgYWJvcnQgKCk7CisKKyAgaWYgKGFjY19pc19wcmVzZW50IChiLCBuYnl0 ZXMpKQorICAgIGFib3J0ICgpOworCisjcHJhZ21hIGFjYyBlbnRlciBkYXRh IHByZXNlbnRfb3JfY3JlYXRlIChhWzA6Tl0sIGJbMDpOXSkKKworICBpZiAo IWFjY19pc19wcmVzZW50IChhLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOwor CisgIGlmICghYWNjX2lzX3ByZXNlbnQgKGIsIG5ieXRlcykpCisgICAgYWJv cnQgKCk7CisKKyNwcmFnbWEgYWNjIGVudGVyIGRhdGEgcHJlc2VudF9vcl9j cmVhdGUgKGFbMDpOXSwgYlswOk5dKQorCisgIGlmICghYWNjX2lzX3ByZXNl bnQgKGEsIG5ieXRlcykpCisgICAgYWJvcnQgKCk7CisKKyAgaWYgKCFhY2Nf aXNfcHJlc2VudCAoYiwgbmJ5dGVzKSkKKyAgICBhYm9ydCAoKTsKKworI3By YWdtYSBhY2MgZXhpdCBkYXRhIGRlbGV0ZSAoYVswOk5dLCBiWzA6Tl0pCisK KyAgaWYgKGFjY19pc19wcmVzZW50IChhLCBuYnl0ZXMpKQorICAgIGFib3J0 ICgpOworCisgIGlmIChhY2NfaXNfcHJlc2VudCAoYiwgbmJ5dGVzKSkKKyAg ICBhYm9ydCAoKTsKKworI3ByYWdtYSBhY2MgZXhpdCBkYXRhIGRlbGV0ZSAo YVswOk5dLCBiWzA6Tl0pCisKKyAgaWYgKGFjY19pc19wcmVzZW50IChhLCBu Ynl0ZXMpKQorICAgIGFib3J0ICgpOworCisgIGlmIChhY2NfaXNfcHJlc2Vu dCAoYiwgbmJ5dGVzKSkKKyAgICBhYm9ydCAoKTsKKworI3ByYWdtYSBhY2Mg ZW50ZXIgZGF0YSBjcmVhdGUgKGFbMDpOXSwgYlswOk5dKQorCisgIGlmICgh YWNjX2lzX3ByZXNlbnQgKGEsIG5ieXRlcykpCisgICAgYWJvcnQgKCk7CisK KyAgaWYgKCFhY2NfaXNfcHJlc2VudCAoYiwgbmJ5dGVzKSkKKyAgICBhYm9y dCAoKTsKKworI3ByYWdtYSBhY2MgZW50ZXIgZGF0YSBwcmVzZW50X29yX2Nv cHlpbiAoYVswOk5dLCBiWzA6Tl0pCisKKyAgaWYgKCFhY2NfaXNfcHJlc2Vu dCAoYSwgbmJ5dGVzKSkKKyAgICBhYm9ydCAoKTsKKworICBpZiAoIWFjY19p c19wcmVzZW50IChiLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOworCisjcHJh Z21hIGFjYyBleGl0IGRhdGEgZGVsZXRlIChhWzA6Tl0sIGJbMDpOXSkKKwor ICBpZiAoYWNjX2lzX3ByZXNlbnQgKGEsIG5ieXRlcykpCisgICAgYWJvcnQg KCk7CisKKyAgaWYgKGFjY19pc19wcmVzZW50IChiLCBuYnl0ZXMpKQorICAg IGFib3J0ICgpOworCisjcHJhZ21hIGFjYyBleGl0IGRhdGEgZGVsZXRlIChh WzA6Tl0sIGJbMDpOXSkKKworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGEsIG5i eXRlcykpCisgICAgYWJvcnQgKCk7CisKKyAgaWYgKGFjY19pc19wcmVzZW50 IChiLCBuYnl0ZXMpKQorICAgIGFib3J0ICgpOworCisjcHJhZ21hIGFjYyBl bnRlciBkYXRhIHByZXNlbnRfb3JfY29weWluIChhWzA6Tl0pCisKKyAgaWYg KCFhY2NfaXNfcHJlc2VudCAoYSwgbmJ5dGVzKSkKKyAgICBhYm9ydCAoKTsK KworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGIsIG5ieXRlcykpCisgICAgYWJv cnQgKCk7CisKKyNwcmFnbWEgYWNjIGV4aXQgZGF0YSBkZWxldGUgKGFbMDpO XSwgYlswOk5dKQorCisgIGlmIChhY2NfaXNfcHJlc2VudCAoYSwgbmJ5dGVz KSkKKyAgICBhYm9ydCAoKTsKKworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGIs IG5ieXRlcykpCisgICAgYWJvcnQgKCk7CisKKyNwcmFnbWEgYWNjIGV4aXQg ZGF0YSBkZWxldGUgKGFbMDpOXSwgYlswOk5dKQorCisgIGlmIChhY2NfaXNf cHJlc2VudCAoYSwgbmJ5dGVzKSkKKyAgICBhYm9ydCAoKTsKKworICBpZiAo YWNjX2lzX3ByZXNlbnQgKGIsIG5ieXRlcykpCisgICAgYWJvcnQgKCk7Cisj ZW5kaWYKKwogICByZXR1cm4gMDsKIH0KSW5kZXg6IHRlc3RzdWl0ZS9saWJn b21wLm9hY2MtYy1jKystY29tbW9uL2VudGVyLWRhdGEuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWMtYysr LWNvbW1vbi9lbnRlci1kYXRhLmMJKHJldmlzaW9uIDApCisrKyB0ZXN0c3Vp dGUvbGliZ29tcC5vYWNjLWMtYysrLWNvbW1vbi9lbnRlci1kYXRhLmMJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFRoaXMgdGVzdCB2ZXJp ZmllcyB0aGF0IHRoZSBwcmVzZW50IGRhdGEgY2xhdXNlcyB0byBhY2MgZW50 ZXIgZGF0YQorICAgZG9uJ3QgY2F1c2UgZHVwbGljYXRlIG1hcHBpbmcgZmFp bHVyZXMgYXQgcnVudGltZS4gICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8K KworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQKK21haW4gKHZvaWQpCit7 CisgIGludCBhOworCisjcHJhZ21hIGFjYyBlbnRlciBkYXRhIGNvcHlpbiAo YSkKKyNwcmFnbWEgYWNjIGVudGVyIGRhdGEgcGNvcHlpbiAoYSkKKyNwcmFn bWEgYWNjIGVudGVyIGRhdGEgcGNyZWF0ZSAoYSkKKyNwcmFnbWEgYWNjIGV4 aXQgZGF0YSBkZWxldGUgKGEpCisKKyNwcmFnbWEgYWNjIGVudGVyIGRhdGEg Y3JlYXRlIChhKQorI3ByYWdtYSBhY2MgZW50ZXIgZGF0YSBwY3JlYXRlIChh KQorI3ByYWdtYSBhY2MgZXhpdCBkYXRhIGRlbGV0ZSAoYSkKKworICByZXR1 cm4gMDsKK30KSW5kZXg6IHRlc3RzdWl0ZS9saWJnb21wLm9hY2MtZm9ydHJh bi9kYXRhLTIuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3Rz dWl0ZS9saWJnb21wLm9hY2MtZm9ydHJhbi9kYXRhLTIuZjkwCShyZXZpc2lv biAyNDkwOTEpCisrKyB0ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWZvcnRyYW4v ZGF0YS0yLmY5MAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDE2IEBACiAh IHsgZGctZG8gcnVuIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1j cHAiIH0KIAogcHJvZ3JhbSB0ZXN0CisgIHVzZSBvcGVuYWNjCiAgIGludGVn ZXIsIHBhcmFtZXRlciA6OiBOID0gOAogICByZWFsLCBhbGxvY2F0YWJsZSA6 OiBhKDosOiksIGIoOiw6KQorICByZWFsLCBhbGxvY2F0YWJsZSA6OiBjKDop LCBkKDopCisgIGludGVnZXIgaSwgagogCisgIGkgPSAwCisgIGogPSAwCisK ICAgYWxsb2NhdGUgKGEoTixOKSkKICAgYWxsb2NhdGUgKGIoTixOKSkKIApA QCAtMTIsNyArMTksNyBAQCBwcm9ncmFtIHRlc3QKIAogICAhJGFjYyBlbnRl ciBkYXRhIGNvcHlpbiAoYSgxOk4sMTpOKSwgYigxOk4sMTpOKSkKIAotICAh JGFjYyBwYXJhbGxlbAorICAhJGFjYyBwYXJhbGxlbCBwcmVzZW50IChhKDE6 TiwxOk4pLCBiKDE6TiwxOk4pKQogICBkbyBpID0gMSwgbgogICAgIGRvIGog PSAxLCBuCiAgICAgICBiKGosaSkgPSBhIChqLGkpCkBAIC0yOCw0ICszNSwx NzEgQEAgcHJvZ3JhbSB0ZXN0CiAgICAgICBpZiAoYihqLGkpIC5uZS4gMy4w KSBjYWxsIGFib3J0CiAgICAgZW5kIGRvCiAgIGVuZCBkbworCisgIGFsbG9j YXRlIChjKE4pKQorICBhbGxvY2F0ZSAoZChOKSkKKworICBjKDopID0gMy4w CisgIGQoOikgPSAwLjAKKworICAhJGFjYyBlbnRlciBkYXRhIGNvcHlpbiAo YygxOk4pKSBjcmVhdGUgKGQoMTpOKSkgYXN5bmMKKyAgISRhY2Mgd2FpdAor ICAKKyAgISRhY2MgcGFyYWxsZWwgcHJlc2VudCAoYygxOk4pLCBkKDE6Tikp CisgICAgZG8gaSA9IDEsIE4KKyAgICAgIGQoaSkgPSBjKGkpICsgMQorICAg IGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBleGl0 IGRhdGEgY29weW91dCAoYygxOk4pLCBkKDE6TikpIGFzeW5jCisgICEkYWNj IHdhaXQKKworICBkbyBpID0gMSwgTgorICAgIGlmIChkKGkpIC5uZS4gNC4w KSBjYWxsIGFib3J0CisgIGVuZCBkbworCisgIGMoOikgPSAzLjAKKyAgZCg6 KSA9IDAuMAorCisgICEkYWNjIGVudGVyIGRhdGEgY29weWluIChjKDE6Tikp IGFzeW5jCisgICEkYWNjIGVudGVyIGRhdGEgY3JlYXRlIChkKDE6TikpIHdh aXQKKyAgISRhY2Mgd2FpdAorCisgICEkYWNjIHBhcmFsbGVsIHByZXNlbnQg KGMoMTpOKSwgZCgxOk4pKQorICAgIGRvIGkgPSAxLCBOCisgICAgICBkKGkp ID0gYyhpKSArIDEKKyAgICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVs CisgIAorICAhJGFjYyBleGl0IGRhdGEgZGVsZXRlIChjKDE6TikpIGNvcHlv dXQgKGQoMTpOKSkgYXN5bmMKKyAgISRhY2MgZXhpdCBkYXRhIGFzeW5jCisg ICEkYWNjIHdhaXQKKworICBkbyBpID0gMSwgTgorICAgIGlmIChkKGkpIC5u ZS4gNC4wKSBjYWxsIGFib3J0CisgIGVuZCBkbworCisjaWYgIUFDQ19NRU1f U0hBUkVECisKKyAgYyg6KSA9IDMuMAorICBkKDopID0gMC4wCisKKyAgISRh Y2MgZW50ZXIgZGF0YSBwcmVzZW50X29yX2NvcHlpbiAoYygwOk4pKQorCisg IGlmIChhY2NfaXNfcHJlc2VudCAoYykgLmVxdi4gLkZBTFNFLikgY2FsbCBh Ym9ydAorCisgICEkYWNjIGV4aXQgZGF0YSBjb3B5b3V0IChjKDA6TikpCisK KyAgaWYgKGFjY19pc19wcmVzZW50IChjKSAuZXF2LiAuVFJVRS4pIGNhbGwg YWJvcnQKKworICAhJGFjYyBleGl0IGRhdGEgZGVsZXRlIChjKDA6TikpCisK KyAgaWYgKGFjY19pc19wcmVzZW50IChjKSAuZXF2LiAuVFJVRS4pIGNhbGwg YWJvcnQKKworICBkbyBpID0gMSwgTgorICAgIGlmIChjKGkpIC5uZS4gMy4w KSBjYWxsIGFib3J0CisgIGVuZCBkbworCisgIGMoOikgPSA1LjAKKyAgZCg6 KSA9IDkuMAorCisgICEkYWNjIGVudGVyIGRhdGEgcHJlc2VudF9vcl9jb3B5 aW4gKGMoMDpOKSwgZCgwOk4pKQorCisgIGlmIChhY2NfaXNfcHJlc2VudCAo YykgLmVxdi4gLkZBTFNFLikgY2FsbCBhYm9ydAorICBpZiAoYWNjX2lzX3By ZXNlbnQgKGQpIC5lcXYuIC5GQUxTRS4pIGNhbGwgYWJvcnQKKworICAhJGFj YyBleGl0IGRhdGEgY29weW91dCAoYygwOk4pLCBkKDA6TikpCisKKyAgaWYg KGFjY19pc19wcmVzZW50IChjKSAuZXF2LiAuVFJVRS4pIGNhbGwgYWJvcnQK KyAgaWYgKGFjY19pc19wcmVzZW50IChkKSAuZXF2LiAuVFJVRS4pIGNhbGwg YWJvcnQKKworICAhJGFjYyBleGl0IGRhdGEgZGVsZXRlIChjKDA6TiksIGQo MDpOKSkKKworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGMpIC5lcXYuIC5UUlVF LikgY2FsbCBhYm9ydAorICBpZiAoYWNjX2lzX3ByZXNlbnQgKGQpIC5lcXYu IC5UUlVFLikgY2FsbCBhYm9ydAorCisgIGRvIGkgPSAxLCBOCisgICAgaWYg KGMoaSkgLm5lLiA1LjApIGNhbGwgYWJvcnQKKyAgICBpZiAoZChpKSAubmUu IDkuMCkgY2FsbCBhYm9ydAorICBlbmQgZG8KKworICAhJGFjYyBlbnRlciBk YXRhIHByZXNlbnRfb3JfY3JlYXRlIChjKDA6TiksIGQoMDpOKSkKKworICBp ZiAoYWNjX2lzX3ByZXNlbnQgKGMpIC5lcXYuIC5GQUxTRS4pIGNhbGwgYWJv cnQKKyAgaWYgKGFjY19pc19wcmVzZW50IChkKSAuZXF2LiAuRkFMU0UuKSBj YWxsIGFib3J0CisKKyAgISRhY2MgcGFyYWxsZWwgcHJlc2VudCAoYygwOk4p LCBkKDA6TikpCisgICAgZG8gaSA9IDEsIE4KKyAgICAgIGMoaSkgPSAxLjA7 CisgICAgICBkKGkpID0gMi4wOworICAgIGVuZCBkbworICAhJGFjYyBlbmQg cGFyYWxsZWwKKworICAhJGFjYyBleGl0IGRhdGEgY29weW91dCAoYygwOk4p LCBkKDA6TikpCisKKyAgaWYgKGFjY19pc19wcmVzZW50IChjKSAuZXF2LiAu VFJVRS4pIGNhbGwgYWJvcnQKKyAgaWYgKGFjY19pc19wcmVzZW50IChkKSAu ZXF2LiAuVFJVRS4pIGNhbGwgYWJvcnQKKworICBkbyBpID0gMSwgTgorICAg IGlmIChjKGkpIC5uZS4gMS4wKSBjYWxsIGFib3J0CisgICAgaWYgKGQoaSkg Lm5lLiAyLjApIGNhbGwgYWJvcnQKKyAgZW5kIGRvCisKKyAgISRhY2MgZW50 ZXIgZGF0YSBwcmVzZW50X29yX2NyZWF0ZSAoYygwOk4pLCBkKDA6TikpCisK KyAgaWYgKGFjY19pc19wcmVzZW50IChjKSAuZXF2LiAuRkFMU0UuKSBjYWxs IGFib3J0CisgIGlmIChhY2NfaXNfcHJlc2VudCAoZCkgLmVxdi4gLkZBTFNF LikgY2FsbCBhYm9ydAorCisgICEkYWNjIGVudGVyIGRhdGEgcHJlc2VudF9v cl9jcmVhdGUgKGMoMDpOKSwgZCgwOk4pKQorCisgIGlmIChhY2NfaXNfcHJl c2VudCAoYykgLmVxdi4gLkZBTFNFLikgY2FsbCBhYm9ydAorICBpZiAoYWNj X2lzX3ByZXNlbnQgKGQpIC5lcXYuIC5GQUxTRS4pIGNhbGwgYWJvcnQKKwor ICAhJGFjYyBleGl0IGRhdGEgZGVsZXRlIChjKDA6TiksIGQoMDpOKSkKKwor ICBpZiAoYWNjX2lzX3ByZXNlbnQgKGMpIC5lcXYuIC5UUlVFLikgY2FsbCBh Ym9ydAorICBpZiAoYWNjX2lzX3ByZXNlbnQgKGQpIC5lcXYuIC5UUlVFLikg Y2FsbCBhYm9ydAorCisgICEkYWNjIGV4aXQgZGF0YSBkZWxldGUgKGMoMDpO KSwgZCgwOk4pKQorCisgIGlmIChhY2NfaXNfcHJlc2VudCAoYykgLmVxdi4g LlRSVUUuKSBjYWxsIGFib3J0CisgIGlmIChhY2NfaXNfcHJlc2VudCAoZCkg LmVxdi4gLlRSVUUuKSBjYWxsIGFib3J0CisKKyAgISRhY2MgZW50ZXIgZGF0 YSBjcmVhdGUgKGMoMDpOKSwgZCgwOk4pKQorCisgIGlmIChhY2NfaXNfcHJl c2VudCAoYykgLmVxdi4gLkZBTFNFLikgY2FsbCBhYm9ydAorICBpZiAoYWNj X2lzX3ByZXNlbnQgKGQpIC5lcXYuIC5GQUxTRS4pIGNhbGwgYWJvcnQKKwor ICAhJGFjYyBlbnRlciBkYXRhIHByZXNlbnRfb3JfY29weWluIChjKDA6Tiks IGQoMDpOKSkKKworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGMpIC5lcXYuIC5G QUxTRS4pIGNhbGwgYWJvcnQKKyAgaWYgKGFjY19pc19wcmVzZW50IChkKSAu ZXF2LiAuRkFMU0UuKSBjYWxsIGFib3J0CisKKyAgISRhY2MgZXhpdCBkYXRh IGRlbGV0ZSAoYygwOk4pLCBkKDA6TikpCisKKyAgaWYgKGFjY19pc19wcmVz ZW50IChjKSAuZXF2LiAuVFJVRS4pIGNhbGwgYWJvcnQKKyAgaWYgKGFjY19p c19wcmVzZW50IChkKSAuZXF2LiAuVFJVRS4pIGNhbGwgYWJvcnQKKworICAh JGFjYyBleGl0IGRhdGEgZGVsZXRlIChjKDA6TiksIGQoMDpOKSkKKworICBp ZiAoYWNjX2lzX3ByZXNlbnQgKGMpIC5lcXYuIC5UUlVFLikgY2FsbCBhYm9y dAorICBpZiAoYWNjX2lzX3ByZXNlbnQgKGQpIC5lcXYuIC5UUlVFLikgY2Fs bCBhYm9ydAorCisgICEkYWNjIGVudGVyIGRhdGEgcHJlc2VudF9vcl9jb3B5 aW4gKGMoMDpOKSkKKworICBpZiAoYWNjX2lzX3ByZXNlbnQgKGMpIC5lcXYu IC5GQUxTRS4pIGNhbGwgYWJvcnQKKyAgaWYgKGFjY19pc19wcmVzZW50IChk KSAuZXF2LiAuVFJVRS4pIGNhbGwgYWJvcnQKKworICAhJGFjYyBleGl0IGRh dGEgZGVsZXRlIChjKDA6TiksIGQoMDpOKSkKKworICBpZiAoYWNjX2lzX3By ZXNlbnQgKGMpIC5lcXYuIC5UUlVFLikgY2FsbCBhYm9ydAorICBpZiAoYWNj X2lzX3ByZXNlbnQgKGQpIC5lcXYuIC5UUlVFLikgY2FsbCBhYm9ydAorCisg ICEkYWNjIGV4aXQgZGF0YSBkZWxldGUgKGMoMDpOKSwgZCgwOk4pKQorCisg IGlmIChhY2NfaXNfcHJlc2VudCAoYykgLmVxdi4gLlRSVUUuKSBjYWxsIGFi b3J0CisgIGlmIChhY2NfaXNfcHJlc2VudCAoZCkgLmVxdi4gLlRSVUUuKSBj YWxsIGFib3J0CisKKyNlbmRpZgorCiBlbmQgcHJvZ3JhbSB0ZXN0Cg== --------------F1546CFBD01ECE7BF76AAB3B--