Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRYMn-0007AV-D5 for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Aug 2022 12:23:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oRYLo-0000co-7G for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Aug 2022 12:22:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRYLn-0000cf-Hf for pgsql-hackers@lists.postgresql.org; Fri, 26 Aug 2022 12:22:15 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oRYLi-0002V5-Gk for pgsql-hackers@lists.postgresql.org; Fri, 26 Aug 2022 12:22:15 +0000 Received: from [192.168.8.251] (unknown [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 02E9321C3D78; Fri, 26 Aug 2022 15:22:08 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1661516529; bh=kHBWhjiNOyaSnxtrlZ3AIDsKgH+O1IARXMZbPpvUYwg=; h=Date:Subject:From:To:Cc:References:In-Reply-To; b=DuDglG+nJTTCnXr4xzUFVwpMqbPsWI0+5Nqr6MTPyqulOxiEyHoWwIJxqTSXYuuK5 xD9gN2X4M6QqF0RmpagK219tD6d/PHCCCVYcAeEl8dVVBOYlJf9nvHgL0lnxw7SVV3 W8DCTMSI2YnVvGwBKIJt8lyVinW1TOdU301i5DFs= Content-Type: multipart/mixed; boundary="------------O2NvYk00F938SKWfkBHyghCB" Message-ID: Date: Fri, 26 Aug 2022 15:22:08 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: Removing unneeded self joins Content-Language: en-US From: Andrey Lepikhov To: Ronan Dunklau , Greg Stark Cc: Andres Freund , Laurenz Albe , Hywel Carver , PostgreSQL Hackers References: <64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru> <2537176.Lt9SDvczpP@aivenronan> <13021914.uLZWGnKmhe@aivenronan> Organization: Postgres Professional In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------O2NvYk00F938SKWfkBHyghCB Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 30/6/2022 17:11, Andrey Lepikhov wrote: > On 19/5/2022 16:47, Ronan Dunklau wrote: >> I'll take a look at that one. > New version of the patch, rebased on current master: > 1. pgindent over the patch have passed. > 2. number of changed files is reduced. > 3. Some documentation and comments is added. New version rebased on new master, minor changes and tests added. -- regards, Andrey Lepikhov Postgres Professional --------------O2NvYk00F938SKWfkBHyghCB Content-Type: text/plain; charset=UTF-8; name="v36-0001-Remove-self-joins.patch" Content-Disposition: attachment; filename="v36-0001-Remove-self-joins.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZDg2NDUxNWRhNjg3MjhkZGVlMTBkNDU1ZjhiZGI2NGQzNDI3N2FhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCAyNiBBdWcgMjAyMiAxNToxNzo1MyArMDMw MApTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSBzZWxmLWpvaW5zLgoKQSBTZWxmIEpvaW4gUmVt b3ZhbCAoU0pSKSBmZWF0dXJlIHJlbW92ZXMgaW5uZXIgam9pbiBvZiBwbGFuZSB0YWJsZSB0 byBpdHNlbGYKaW4gYSBxdWVyeSBwbGFuIGlmIGNhbiBiZSBwcm92ZWQgdGhhdCB0aGUgam9p biBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIHNjYW4uClRoZSBwcm9vZiBiYXNlZCBvbiBpbm5l cnJlbF9pc191bmlxdWUgbWFjaGluZXJ5LgoKV2UgY2FuIHJlbW92ZSBhIHNlbGYtam9pbiB3 aGVuIGZvciBlYWNoIG91dGVyIHJvdzoKMS4gQXQgbW9zdCBvbmUgaW5uZXIgcm93IG1hdGNo ZXMgdGhlIGpvaW4gY2xhdXNlcy4KMi4gSWYgdGhlIGpvaW4gdGFyZ2V0IGxpc3QgY29udGFp bnMgYW55IGlubmVyIHZhcnMsIGFuIGlubmVyIHJvdwptdXN0IGJlIChwaHlzaWNhbGx5KSB0 aGUgc2FtZSByb3cgYXMgdGhlIG91dGVyIG9uZS4KCkluIHRoaXMgcGF0Y2ggd2UgdXNlIFJv d2xleSdzIFsxXSBhcHByb2FjaCB0byBpZGVudGlmeSBhIHNlbGYtam9pbjoKMS4gQ29sbGVj dCBhbGwgbWVyZ2Vqb2luYWJsZSBqb2luIHF1YWxzIHdoaWNoIGxvb2sgbGlrZSBhLnggPSBi LngKMi4gQ2hlY2sgaW5uZXJyZWxfaXNfdW5pcXVlKCkgZm9yIHRoZSBxdWFsIGxpc3QgZnJv bSAoMSkuIElmIGl0CnJldHVybnMgdHJ1ZSwgdGhlbiBvdXRlciByb3cgbWF0Y2hlcyBvbmx5 IHRoZSBzYW1lIHJvdyBmcm9tIHRoZSBpbm5lcgpyZWxhdGlvbi4KMy4gSWYgdW5pcXVlbmVz cyBvZiBvdXRlciByZWxhdGlvbiBkZWR1Y2VzIGZyb20gYmFzZXJlc3RyaWN0aW5mbyBjbGF1 c2UgbGlrZQoneD1jb25zdCcgb24gdW5pcXVlIGZpZWxkKHMpLCBjaGVjayB0aGF0IGlubmVy IGhhcyB0aGUgc2FtZSBjbGF1c2Ugd2l0aCB0aGUKc2FtZSBjb25zdGFudChzKS4KNC4gQ29t cGFyZSBSb3dNYXJrcyBvZiBpbm5lciBhbmQgb3V0ZXIgcmVsYXRpb25zLiBUaGV5IG11c3Qg aGF2ZSB0aGUgc2FtZQpzdHJlbmd0aC4KClNvbWUgcmVncmVzc2lvbiB0ZXN0cyBjaGFuZ2Vk IGR1ZSB0byBzZWxmLWpvaW4gcmVtb3ZhbCBsb2dpYy4KClsxXSBodHRwczovL3d3dy5wb3N0 Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL3Jhdy9DQUFwSER2cGdnbkZNQzR5UC1qVU83UEtOJTNE ZlhlRXJXNWJPeGlzdkowSHZrSFFFWSUzRFd3JTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mv c3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICB8ICAgMTYgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgfCAgIDM5ICsKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIHwgMTA0NSArKysrKysrKysrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgICAgIHwg ICAgNSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jICAgICAgICAgICAgICB8ICAg MTAgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgICAgfCAgICAz ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oICAgICAgICAgIHwgICAgNiAr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mub3V0ICB8ICAgMzIgKwog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAgICAgfCAgNzM1ICsrKysr KysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAg fCAgICAzICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbCAgICAgICB8 ICAgMTYgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgICAgICAgICAgICAgfCAg MzI5ICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg IHwgICAgMiArCiAxMyBmaWxlcyBjaGFuZ2VkLCAyMjE1IGluc2VydGlvbnMoKyksIDI2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBhNWNkNGU0NGM3Li4yY2ZiNjJmOTdmIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCkBAIC01Mjk3LDYgKzUyOTcsMjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxl IGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGVfc2VsZl9qb2luX3JlbW92YWwiIHhy ZWZsYWJlbD0iZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsIj4KKyAgICAgIDx0ZXJtPjx2YXJu YW1lPmVuYWJsZV9zZWxmX2pvaW5fcmVtb3ZhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5l bmFibGVfc2VsZl9qb2luX3JlbW92YWw8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJs ZXMgdGhlIHF1ZXJ5IHBsYW5uZXIncyBvcHRpbWl6YXRpb24gd2hpY2ggYW5hbHlzZXMKKyAg ICAgICAgcXVlcnkgdHJlZSBhbmQgcmVwbGFjZXMgc2VsZiBqb2lucyB3aXRoIHNlbWFudGlj YWxseSBlcXVpdmFsZW50IHNpbmdsZQorICAgICAgICBzY2Fucy4gVGFrZSBpbnRvIGNvbnNp ZGVyYXRpb24gb25seSBwbGFpbiB0YWJsZXMuCisgICAgICAgIFRoZSBkZWZhdWx0IGlzIDxs aXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt ZW5hYmxlLXNlcXNjYW4iIHhyZWZsYWJlbD0iZW5hYmxlX3NlcXNjYW4iPgogICAgICAgPHRl cm0+PHZhcm5hbWU+ZW5hYmxlX3NlcXNjYW48L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90 eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYwppbmRleCAwNDVmZjJlNDg3Li5hOWY4Zjg5MzEyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTM0OTUsOCArMzQ5NSwyNCBAQCBib29sCiBy ZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0LAogCQkJCQkJCSAgTGlz dCAqZXhwcmxpc3QsIExpc3QgKm9wcmxpc3QpCit7CisJcmV0dXJuIHJlbGF0aW9uX2hhc191 bmlxdWVfaW5kZXhfZXh0KHJvb3QsIHJlbCwgcmVzdHJpY3RsaXN0LAorCQkJCQkJCQkJCSBl eHBybGlzdCwgb3BybGlzdCwgTlVMTCk7Cit9CisKKy8qCisgKiByZWxhdGlvbl9oYXNfdW5p cXVlX2luZGV4X2V4dAorICogaWYgZXh0cmFfY2xhdXNlcyBpc24ndCBOVUxMLCByZXR1cm4g YmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzIHdoaWNoIHdlcmUKKyAqIHVzZWQgdG8gZGVyaXZl IHVuaXF1ZW5lc3MuCisgKi8KK2Jvb2wKK3JlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJICBMaXN0ICpy ZXN0cmljdGxpc3QsCisJCQkJCQkJICBMaXN0ICpleHBybGlzdCwgTGlzdCAqb3BybGlzdCwK KwkJCQkJCQkgIExpc3QgKipleHRyYV9jbGF1c2VzKQogewogCUxpc3RDZWxsICAgKmljOwor CUxpc3QJICAgKmV4cHJzOwogCiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKGV4cHJsaXN0KSA9PSBs aXN0X2xlbmd0aChvcHJsaXN0KSk7CiAKQEAgLTM1NTEsNiArMzU2Nyw4IEBAIHJlbGF0aW9u X2hhc191bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCUluZGV4T3B0SW5mbyAqaW5kID0gKEluZGV4T3B0SW5mbyAqKSBsZmlyc3QoaWMp OwogCQlpbnQJCQljOwogCisJCWV4cHJzID0gTklMOworCiAJCS8qCiAJCSAqIElmIHRoZSBp bmRleCBpcyBub3QgdW5pcXVlLCBvciBub3QgaW1tZWRpYXRlbHkgZW5mb3JjZWQsIG9yIGlm IGl0J3MKIAkJICogYSBwYXJ0aWFsIGluZGV4IHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgcXVl cnksIGl0J3MgdXNlbGVzcyBoZXJlLgpAQCAtMzU5OCw2ICszNjE2LDIzIEBAIHJlbGF0aW9u X2hhc191bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJaWYgKG1hdGNoX2luZGV4X3RvX29wZXJhbmQocmV4cHIsIGMsIGluZCkpCiAJ CQkJewogCQkJCQltYXRjaGVkID0gdHJ1ZTsgLyogY29sdW1uIGlzIHVuaXF1ZSAqLworCisJ CQkJCWlmIChibXNfbWVtYmVyc2hpcChyaW5mby0+Y2xhdXNlX3JlbGlkcykgPT0gQk1TX1NJ TkdMRVRPTikKKwkJCQkJeworCQkJCQkJTWVtb3J5Q29udGV4dCBvbGRNZW1DdHggPQorCQkJ CQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJvb3QtPnBsYW5uZXJfY3h0KTsKKworCQkJCQkJ LyoKKwkJCQkJCSAqIEFkZCBmaWx0ZXIgY2xhdXNlIGludG8gYSBsaXN0IGFsbG93aW5nIGNh bGxlciB0bworCQkJCQkJICoga25vdyBpZiB1bmlxdWluZXNzIGhhdmUgbWFkZSBub3Qgb25s eSBieSBqb2luCisJCQkJCQkgKiBjbGF1c2VzLgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQo Ym1zX2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlkcykgfHwKKwkJCQkJCQkgICBibXNfaXNf ZW1wdHkocmluZm8tPnJpZ2h0X3JlbGlkcykpOworCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4 cHJzLCByaW5mbyk7CisJCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkTWVtQ3R4KTsK KwkJCQkJfQorCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTM2NDAsNyArMzY3NSwx MSBAQCByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcihQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIE1hdGNoZWQgYWxsIGtleSBjb2x1bW5zIG9mIHRo aXMgaW5kZXg/ICovCiAJCWlmIChjID09IGluZC0+bmtleWNvbHVtbnMpCisJCXsKKwkJCWlm IChleHRyYV9jbGF1c2VzKQorCQkJCSpleHRyYV9jbGF1c2VzID0gZXhwcnM7CiAJCQlyZXR1 cm4gdHJ1ZTsKKwkJfQogCX0KIAogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKaW5kZXggYmJlY2E5YTlhYi4uYzdkMzBiYThj YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5z LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKQEAg LTIyLDYgKzIyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAj aW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvam9p bmluZm8uaCIKQEAgLTMyLDIxICszMyw0MCBAQAogI2luY2x1ZGUgIm9wdGltaXplci90bGlz dC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCisvKgorICogVW5pcXVlUmVs SW5mbyBjYWNoZXMgYSBmYWN0IHRoYXQgYSByZWxhdGlvbiBpcyB1bmlxdWUgd2hlbiBiZWlu ZyBqb2luZWQKKyAqIHRvIG90aGVyIHJlbGF0aW9uKHMpIHNwZWNpZmllZCBieSBvdXRlcnJl bGlkcy4KKyAqIGV4dHJhX2NsYXVzZXMgY29udGFpbnMgYWRkaXRpb25hbCBjbGF1c2VzIGZy b20gYSBiYXNlcmVzdHJpY3RpbmZvIGxpc3QgdGhhdAorICogd2VyZSB1c2VkIHRvIHByb3Zl IHVuaXF1ZW5lc3MuIFdlIGNhY2hlIGl0IGZvciBTSiBjaGVja2luZyBwcm9jZWR1cmU6IFNK IGNhbgorICogYmUgcmVtb3ZlZCBpZiBvdXRlciByZWxhdGlvbiBjb250YWlucyBzdHJpY3Rs eSB0aGUgc2FtZSBzZXQgb2YgY2xhdXNlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVW5pcXVl UmVsSW5mbworeworCVJlbGlkcwkJb3V0ZXJyZWxpZHM7CisJTGlzdAkgICAqZXh0cmFfY2xh dXNlczsKK30gVW5pcXVlUmVsSW5mbzsKKworYm9vbAkJZW5hYmxlX3NlbGZfam9pbl9yZW1v dmFsOworCiAvKiBsb2NhbCBmdW5jdGlvbnMgKi8KIHN0YXRpYyBib29sIGpvaW5faXNfcmVt b3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CiBz dGF0aWMgdm9pZCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGlu dCByZWxpZCwKLQkJCQkJCQkJICBSZWxpZHMgam9pbnJlbGlkcyk7CisJCQkJCQkJCSAgUmVs aWRzIGpvaW5yZWxpZHMsIGludCBzdWJzdF9yZWxpZCk7CiBzdGF0aWMgTGlzdCAqcmVtb3Zl X3JlbF9mcm9tX2pvaW5saXN0KExpc3QgKmpvaW5saXN0LCBpbnQgcmVsaWQsIGludCAqbnJl bW92ZWQpOwogc3RhdGljIGJvb2wgcmVsX3N1cHBvcnRzX2Rpc3RpbmN0bmVzcyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBib29sIHJlbF9pc19kaXN0 aW5jdF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKLQkJCQkJCQkJ TGlzdCAqY2xhdXNlX2xpc3QpOworCQkJCQkJCQlMaXN0ICpjbGF1c2VfbGlzdCwgTGlzdCAq KmV4dHJhX2NsYXVzZXMpOwogc3RhdGljIE9pZAlkaXN0aW5jdF9jb2xfc2VhcmNoKGludCBj b2xubywgTGlzdCAqY29sbm9zLCBMaXN0ICpvcGlkcyk7CiBzdGF0aWMgYm9vbCBpc19pbm5l cnJlbF91bmlxdWVfZm9yKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgICBSZWxpZHMg am9pbnJlbGlkcywKIAkJCQkJCQkJICAgUmVsaWRzIG91dGVycmVsaWRzLAogCQkJCQkJCQkg ICBSZWxPcHRJbmZvICppbm5lcnJlbCwKIAkJCQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUs Ci0JCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CisJCQkJCQkJCSAgIExpc3QgKnJl c3RyaWN0bGlzdCwKKwkJCQkJCQkJICAgTGlzdCAqKmV4dHJhX2NsYXVzZXMpOworc3RhdGlj IHZvaWQgY2hhbmdlX3JpbmZvKFJlc3RyaWN0SW5mbyAqcmluZm8sIEluZGV4IGZyb20sIElu ZGV4IHRvKTsKK3N0YXRpYyBCaXRtYXBzZXQgKmNoYW5nZV9yZWxpZChSZWxpZHMgcmVsaWRz LCBJbmRleCBvbGRJZCwgSW5kZXggbmV3SWQpOworc3RhdGljIHZvaWQgY2hhbmdlX3Zhcm5v KEV4cHIgKmV4cHIsIEluZGV4IG9sZFJlbGlkLCBJbmRleCBuZXdSZWxpZCk7CiAKIAogLyoK QEAgLTg2LDcgKzEwNiw3IEBAIHJlc3RhcnQ6CiAKIAkJcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5 KHJvb3QsIGlubmVycmVsaWQsCiAJCQkJCQkJICBibXNfdW5pb24oc2ppbmZvLT5taW5fbGVm dGhhbmQsCi0JCQkJCQkJCQkJc2ppbmZvLT5taW5fcmlnaHRoYW5kKSk7CisJCQkJCQkJCQkJ c2ppbmZvLT5taW5fcmlnaHRoYW5kKSwgMCk7CiAKIAkJLyogV2UgdmVyaWZ5IHRoYXQgZXhh Y3RseSBvbmUgcmVmZXJlbmNlIGdldHMgcmVtb3ZlZCBmcm9tIGpvaW5saXN0ICovCiAJCW5y ZW1vdmVkID0gMDsKQEAgLTI4Nyw3ICszMDcsNyBAQCBqb2luX2lzX3JlbW92YWJsZShQbGFu bmVySW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJICogTm93IHRoYXQg d2UgaGF2ZSB0aGUgcmVsZXZhbnQgZXF1YWxpdHkgam9pbiBjbGF1c2VzLCB0cnkgdG8gcHJv dmUgdGhlCiAJICogaW5uZXJyZWwgZGlzdGluY3QuCiAJICovCi0JaWYgKHJlbF9pc19kaXN0 aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0KSkKKwlpZiAocmVsX2lzX2Rp c3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3QsIE5VTEwpKQogCQlyZXR1 cm4gdHJ1ZTsKIAogCS8qCkBAIC0zMDAsNyArMzIwLDEwIEBAIGpvaW5faXNfcmVtb3ZhYmxl KFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAogLyoKICAq IFJlbW92ZSB0aGUgdGFyZ2V0IHJlbGlkIGZyb20gdGhlIHBsYW5uZXIncyBkYXRhIHN0cnVj dHVyZXMsIGhhdmluZwotICogZGV0ZXJtaW5lZCB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8g aW5jbHVkZSBpdCBpbiB0aGUgcXVlcnkuCisgKiBkZXRlcm1pbmVkIHRoYXQgdGhlcmUgaXMg bm8gbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBxdWVyeS4gT3IgcmVwbGFjZQorICogd2l0 aCBhbm90aGVyIHJlbGlkLgorICogVG8gcmV1c2FiaWxpdHksIHRoaXMgcm91dGluZSBjYW4g d29yayBpbiB0d28gbW9kZXM6IGRlbGV0ZSByZWxpZCBmcm9tIGEgcGxhbgorICogb3IgcmVw bGFjZSBpdC4gSXQgaXMgdXNlZCBpbiByZXBsYWNlIG1vZGUgaW4gYSBzZWxmLWpvaW4gcmVt b3ZpbmcgcHJvY2Vzcy4KICAqCiAgKiBXZSBhcmUgbm90IHRlcnJpYmx5IHRob3JvdWdoIGhl cmUuICBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZWwgaXMKICAqIG5vIGxvbmdlciB0 cmVhdGVkIGFzIGEgYmFzZXJlbCwgYW5kIHRoYXQgYXR0cmlidXRlcyBvZiBvdGhlciBiYXNl cmVscwpAQCAtMzA5LDEzICszMzIsMTYgQEAgam9pbl9pc19yZW1vdmFibGUoUGxhbm5lcklu Zm8gKnJvb3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogICogbGlzdHMsIGJ1dCBvbmx5 IGlmIHRoZXkgYmVsb25nIHRvIHRoZSBvdXRlciBqb2luIGlkZW50aWZpZWQgYnkgam9pbnJl bGlkcy4KICAqLwogc3RhdGljIHZvaWQKLXJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVy SW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxpZHMgam9pbnJlbGlkcykKK3JlbW92ZV9yZWxf ZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxpZHMgam9pbnJl bGlkcywKKwkJCQkJICBpbnQgc3Vic3RfcmVsaWQpCiB7CiAJUmVsT3B0SW5mbyAqcmVsID0g ZmluZF9iYXNlX3JlbChyb290LCByZWxpZCk7CiAJTGlzdAkgICAqam9pbmluZm9zOwogCUlu ZGV4CQlydGk7CiAJTGlzdENlbGwgICAqbDsKIAorCUFzc2VydChzdWJzdF9yZWxpZCA9PSAw IHx8IHJlbGlkICE9IHN1YnN0X3JlbGlkKTsKKwogCS8qCiAJICogTWFyayB0aGUgcmVsIGFz ICJkZWFkIiB0byBzaG93IGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSBqb2luIHRyZWUu CiAJICogKFJlbW92aW5nIGl0IGZyb20gdGhlIGJhc2VyZWwgYXJyYXkgYWx0b2dldGhlciBz ZWVtcyB0b28gcmlza3kuKQpAQCAtMzQ1LDggKzM3MSwxMSBAQCByZW1vdmVfcmVsX2Zyb21f cXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsaWRzIGpvaW5yZWxpZHMp CiAJCQkgYXR0cm9mZi0tKQogCQl7CiAJCQlvdGhlcnJlbC0+YXR0cl9uZWVkZWRbYXR0cm9m Zl0gPQotCQkJCWJtc19kZWxfbWVtYmVyKG90aGVycmVsLT5hdHRyX25lZWRlZFthdHRyb2Zm XSwgcmVsaWQpOworCQkJCWNoYW5nZV9yZWxpZChvdGhlcnJlbC0+YXR0cl9uZWVkZWRbYXR0 cm9mZl0sIHJlbGlkLCBzdWJzdF9yZWxpZCk7CiAJCX0KKworCQkvKiBVcGRhdGUgbGF0ZXJh bCByZWZlcmVuY2VzLiAqLworCQljaGFuZ2VfdmFybm8oKEV4cHIgKikgb3RoZXJyZWwtPmxh dGVyYWxfdmFycywgcmVsaWQsIHN1YnN0X3JlbGlkKTsKIAl9CiAKIAkvKgpAQCAtMzYxLDEw ICszOTAsMTIgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBp bnQgcmVsaWQsIFJlbGlkcyBqb2lucmVsaWRzKQogCXsKIAkJU3BlY2lhbEpvaW5JbmZvICpz amluZm8gPSAoU3BlY2lhbEpvaW5JbmZvICopIGxmaXJzdChsKTsKIAotCQlzamluZm8tPm1p bl9sZWZ0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mby0+bWluX2xlZnRoYW5kLCByZWxp ZCk7Ci0JCXNqaW5mby0+bWluX3JpZ2h0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mby0+ bWluX3JpZ2h0aGFuZCwgcmVsaWQpOwotCQlzamluZm8tPnN5bl9sZWZ0aGFuZCA9IGJtc19k ZWxfbWVtYmVyKHNqaW5mby0+c3luX2xlZnRoYW5kLCByZWxpZCk7Ci0JCXNqaW5mby0+c3lu X3JpZ2h0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mby0+c3luX3JpZ2h0aGFuZCwgcmVs aWQpOworCQlzamluZm8tPm1pbl9sZWZ0aGFuZCA9IGNoYW5nZV9yZWxpZChzamluZm8tPm1p bl9sZWZ0aGFuZCwgcmVsaWQsIHN1YnN0X3JlbGlkKTsKKwkJc2ppbmZvLT5taW5fcmlnaHRo YW5kID0gY2hhbmdlX3JlbGlkKHNqaW5mby0+bWluX3JpZ2h0aGFuZCwgcmVsaWQsIHN1YnN0 X3JlbGlkKTsKKwkJc2ppbmZvLT5zeW5fbGVmdGhhbmQgPSBjaGFuZ2VfcmVsaWQoc2ppbmZv LT5zeW5fbGVmdGhhbmQsIHJlbGlkLCBzdWJzdF9yZWxpZCk7CisJCXNqaW5mby0+c3luX3Jp Z2h0aGFuZCA9IGNoYW5nZV9yZWxpZChzamluZm8tPnN5bl9yaWdodGhhbmQsIHJlbGlkLCBz dWJzdF9yZWxpZCk7CisKKwkJY2hhbmdlX3Zhcm5vKChFeHByICopIHNqaW5mby0+c2VtaV9y aHNfZXhwcnMsIHJlbGlkLCBzdWJzdF9yZWxpZCk7CiAJfQogCiAJLyoKQEAgLTM4NSw4ICs0 MTYsNyBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCwgUmVsaWRzIGpvaW5yZWxpZHMpCiAJewogCQlQbGFjZUhvbGRlckluZm8gKnBoaW5m byA9IChQbGFjZUhvbGRlckluZm8gKikgbGZpcnN0KGwpOwogCi0JCUFzc2VydCghYm1zX2lz X21lbWJlcihyZWxpZCwgcGhpbmZvLT5waF9sYXRlcmFsKSk7Ci0JCWlmIChibXNfaXNfc3Vi c2V0KHBoaW5mby0+cGhfbmVlZGVkLCBqb2lucmVsaWRzKSAmJgorCQlpZiAoc3Vic3RfcmVs aWQgPT0gMCAmJiBibXNfaXNfc3Vic2V0KHBoaW5mby0+cGhfbmVlZGVkLCBqb2lucmVsaWRz KSAmJgogCQkJYm1zX2lzX21lbWJlcihyZWxpZCwgcGhpbmZvLT5waF9ldmFsX2F0KSkKIAkJ ewogCQkJcm9vdC0+cGxhY2Vob2xkZXJfbGlzdCA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQo cm9vdC0+cGxhY2Vob2xkZXJfbGlzdCwKQEAgLTM5NSw5ICs0MjUsMjMgQEAgcmVtb3ZlX3Jl bF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbGlkcyBqb2lu cmVsaWRzKQogCQl9CiAJCWVsc2UKIAkJewotCQkJcGhpbmZvLT5waF9ldmFsX2F0ID0gYm1z X2RlbF9tZW1iZXIocGhpbmZvLT5waF9ldmFsX2F0LCByZWxpZCk7CisJCQlwaGluZm8tPnBo X2V2YWxfYXQgPSBjaGFuZ2VfcmVsaWQocGhpbmZvLT5waF9ldmFsX2F0LCByZWxpZCwgc3Vi c3RfcmVsaWQpOwogCQkJQXNzZXJ0KCFibXNfaXNfZW1wdHkocGhpbmZvLT5waF9ldmFsX2F0 KSk7Ci0JCQlwaGluZm8tPnBoX25lZWRlZCA9IGJtc19kZWxfbWVtYmVyKHBoaW5mby0+cGhf bmVlZGVkLCByZWxpZCk7CisJCQlwaGluZm8tPnBoX25lZWRlZCA9IGNoYW5nZV9yZWxpZChw aGluZm8tPnBoX25lZWRlZCwgcmVsaWQsIHN1YnN0X3JlbGlkKTsKKwkJCUFzc2VydChzdWJz dF9yZWxpZCAhPSAwIHx8ICFibXNfaXNfbWVtYmVyKHJlbGlkLCBwaGluZm8tPnBoX2xhdGVy YWwpKTsKKwkJCXBoaW5mby0+cGhfbGF0ZXJhbCA9IGNoYW5nZV9yZWxpZChwaGluZm8tPnBo X2xhdGVyYWwsIHJlbGlkLCBzdWJzdF9yZWxpZCk7CisJCQlwaGluZm8tPnBoX3Zhci0+cGhy ZWxzID0gY2hhbmdlX3JlbGlkKHBoaW5mby0+cGhfdmFyLT5waHJlbHMsIHJlbGlkLCBzdWJz dF9yZWxpZCk7CisJCX0KKwl9CisKKwlpZiAoc3Vic3RfcmVsaWQgIT0gMCkKKwl7CisJCWZv cmVhY2gobCwgcmVsLT5iYXNlcmVzdHJpY3RpbmZvKQorCQl7CisJCQlSZXN0cmljdEluZm8g KnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBsZmlyc3QobCk7CisKKwkJCWNoYW5nZV9yaW5m byhyaW5mbywgcmVsaWQsIHN1YnN0X3JlbGlkKTsKKwkJCWRpc3RyaWJ1dGVfcmVzdHJpY3Rp bmZvX3RvX3JlbHMocm9vdCwgcmluZm8pOwogCQl9CiAJfQogCkBAIC00MjIsNiArNDY2LDEy IEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlk LCBSZWxpZHMgam9pbnJlbGlkcykKIAogCQlyZW1vdmVfam9pbl9jbGF1c2VfZnJvbV9yZWxz KHJvb3QsIHJpbmZvLCByaW5mby0+cmVxdWlyZWRfcmVsaWRzKTsKIAorCQkvKgorCQkgKiBy ZXBsYWNlIHJlbGlkIHdpdGggcmVsaWQgb2Yga2VlcGluZyByZWxhdGlvbi4gQWZ0ZXIgdGhh dCwgdGhpcworCQkgKiByZXN0cmljdGlvbiBjYW4gYmUgYXR0YWNoZWQgdG8ga2VlcGluZyBy ZWxhdGlvbi4KKwkJICovCisJCWNoYW5nZV9yaW5mbyhyaW5mbywgcmVsaWQsIHN1YnN0X3Jl bGlkKTsKKwogCQlpZiAoUklORk9fSVNfUFVTSEVEX0RPV04ocmluZm8sIGpvaW5yZWxpZHMp KQogCQl7CiAJCQkvKiBSZWNoZWNrIHRoYXQgcXVhbCBkb2Vzbid0IGFjdHVhbGx5IHJlZmVy ZW5jZSB0aGUgdGFyZ2V0IHJlbCAqLwpAQCAtNDM2LDYgKzQ4Niw4IEBAIHJlbW92ZV9yZWxf ZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxpZHMgam9pbnJl bGlkcykKIAkJCQkJCQkJCQkJCQlyZWxpZCk7CiAJCQlkaXN0cmlidXRlX3Jlc3RyaWN0aW5m b190b19yZWxzKHJvb3QsIHJpbmZvKTsKIAkJfQorCQllbHNlIGlmIChzdWJzdF9yZWxpZCAh PSAwKQorCQkJZGlzdHJpYnV0ZV9yZXN0cmljdGluZm9fdG9fcmVscyhyb290LCByaW5mbyk7 CiAJfQogCiAJLyoKQEAgLTYzOSw5ICs2OTEsMTQgQEAgcmVsX3N1cHBvcnRzX2Rpc3RpbmN0 bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogICogTm90ZSB0aGF0 IHRoZSBwYXNzZWQtaW4gY2xhdXNlX2xpc3QgbWF5IGJlIGRlc3RydWN0aXZlbHkgbW9kaWZp ZWQhICBUaGlzCiAgKiBpcyBPSyBmb3IgY3VycmVudCB1c2VzLCBiZWNhdXNlIHRoZSBjbGF1 c2VfbGlzdCBpcyBidWlsdCBieSB0aGUgY2FsbGVyIGZvcgogICogdGhlIHNvbGUgcHVycG9z ZSBvZiBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICogb3V0ZXJfZXhwcnMgY29u dGFpbnMgcmlnaHQgc2lkZXMgb2YgYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzIGxvb2tzIGxp a2UKKyAqIHggPSBjb25zdCBpZiBkaXN0aW5jdG5lc3MgaXMgZGVyaXZlZCBmcm9tIHN1Y2gg Y2xhdXNlcywgbm90IGpvaW5pbmZvIGNsYXVzZS4KKyAqIFBhc3MgTlVMTCBmb3IgdGhlIHBh cmFtIHZhbHVlLCBpZiBpdCBpcyBub3QgaW50ZXJlc3RlZC4KICAqLwogc3RhdGljIGJvb2wK LXJlbF9pc19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwgTGlzdCAqY2xhdXNlX2xpc3QpCityZWxfaXNfZGlzdGluY3RfZm9yKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZV9saXN0LAorCQkJCQlMaXN0 ICoqZXh0cmFfY2xhdXNlcykKIHsKIAkvKgogCSAqIFdlIGNvdWxkIHNraXAgYSBjb3VwbGUg b2YgdGVzdHMgaGVyZSBpZiB3ZSBhc3N1bWUgYWxsIGNhbGxlcnMgY2hlY2tlZApAQCAtNjU0 LDEwICs3MTEsMTEgQEAgcmVsX2lzX2Rpc3RpbmN0X2ZvcihQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VfbGlzdCkKIAl7CiAJCS8qCiAJCSAqIEV4 YW1pbmUgdGhlIGluZGV4ZXMgdG8gc2VlIGlmIHdlIGhhdmUgYSBtYXRjaGluZyB1bmlxdWUg aW5kZXguCi0JCSAqIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9yIGF1dG9tYXRpY2Fs bHkgYWRkcyBhbnkgdXNhYmxlCisJCSAqIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0 IGF1dG9tYXRpY2FsbHkgYWRkcyBhbnkgdXNhYmxlCiAJCSAqIHJlc3RyaWN0aW9uIGNsYXVz ZXMgZm9yIHRoZSByZWwsIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdCBoZXJlLgogCQkgKi8KLQkJ aWYgKHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9yKHJvb3QsIHJlbCwgY2xhdXNlX2xp c3QsIE5JTCwgTklMKSkKKwkJaWYgKHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0KHJv b3QsIHJlbCwgY2xhdXNlX2xpc3QsIE5JTCwgTklMLAorCQkJCQkJCQkJCSAgZXh0cmFfY2xh dXNlcykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJZWxzZSBpZiAocmVsLT5ydGVraW5kID09 IFJURV9TVUJRVUVSWSkKQEAgLTk3MSw5ICsxMDI5LDIxIEBAIGlubmVycmVsX2lzX3VuaXF1 ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKIAkJCQkg ICBMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJICAgYm9vbCBmb3JjZV9jYWNoZSkKK3sKKwly ZXR1cm4gaW5uZXJyZWxfaXNfdW5pcXVlX2V4dChyb290LCBqb2lucmVsaWRzLCBvdXRlcnJl bGlkcywgaW5uZXJyZWwsCisJCQkJCQkJCSAgam9pbnR5cGUsIHJlc3RyaWN0bGlzdCwgZm9y Y2VfY2FjaGUsIE5VTEwpOworfQorCitib29sCitpbm5lcnJlbF9pc191bmlxdWVfZXh0KFBs YW5uZXJJbmZvICpyb290LCBSZWxpZHMgam9pbnJlbGlkcywgUmVsaWRzIG91dGVycmVsaWRz LAorCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwgSm9pblR5cGUgam9pbnR5cGUsCisJ CQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwgYm9vbCBmb3JjZV9jYWNoZSwKKwkJCQkJICAg TGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRfY29udGV4dDsK IAlMaXN0Q2VsbCAgICpsYzsKKwlVbmlxdWVSZWxJbmZvICp1bmlxdWVSZWxJbmZvOworCUxp c3QJICAgKm91dGVyX2V4cHJzID0gTklMOwogCiAJLyogQ2VydGFpbmx5IGNhbid0IHByb3Zl IHVuaXF1ZW5lc3Mgd2hlbiB0aGVyZSBhcmUgbm8gam9pbmNsYXVzZXMgKi8KIAlpZiAocmVz dHJpY3RsaXN0ID09IE5JTCkKQEAgLTk5NSwxMCArMTA2NSwxNCBAQCBpbm5lcnJlbF9pc191 bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJZm9yZWFjaChsYywgaW5uZXJyZWwt PnVuaXF1ZV9mb3JfcmVscykKIAl7Ci0JCVJlbGlkcwkJdW5pcXVlX2Zvcl9yZWxzID0gKFJl bGlkcykgbGZpcnN0KGxjKTsKKwkJdW5pcXVlUmVsSW5mbyA9IChVbmlxdWVSZWxJbmZvICop IGxmaXJzdChsYyk7CiAKLQkJaWYgKGJtc19pc19zdWJzZXQodW5pcXVlX2Zvcl9yZWxzLCBv dXRlcnJlbGlkcykpCisJCWlmIChibXNfaXNfc3Vic2V0KHVuaXF1ZVJlbEluZm8tPm91dGVy cmVsaWRzLCBvdXRlcnJlbGlkcykpCisJCXsKKwkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJ CSpleHRyYV9jbGF1c2VzID0gdW5pcXVlUmVsSW5mby0+ZXh0cmFfY2xhdXNlczsKIAkJCXJl dHVybiB0cnVlOwkJLyogU3VjY2VzcyEgKi8KKwkJfQogCX0KIAogCS8qCkBAIC0xMDE1LDcg KzEwODksNyBAQCBpbm5lcnJlbF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkv KiBObyBjYWNoZWQgaW5mb3JtYXRpb24sIHNvIHRyeSB0byBtYWtlIHRoZSBwcm9vZi4gKi8K IAlpZiAoaXNfaW5uZXJyZWxfdW5pcXVlX2Zvcihyb290LCBqb2lucmVsaWRzLCBvdXRlcnJl bGlkcywgaW5uZXJyZWwsCi0JCQkJCQkJICAgam9pbnR5cGUsIHJlc3RyaWN0bGlzdCkpCisJ CQkJCQkJICAgam9pbnR5cGUsIHJlc3RyaWN0bGlzdCwgJm91dGVyX2V4cHJzKSkKIAl7CiAJ CS8qCiAJCSAqIENhY2hlIHRoZSBwb3NpdGl2ZSByZXN1bHQgZm9yIGZ1dHVyZSBwcm9iZXMs IGJlaW5nIHN1cmUgdG8ga2VlcCBpdApAQCAtMTAyOCwxMCArMTEwMiwxNSBAQCBpbm5lcnJl bF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJCSAqIHN1cGVyc2V0cyBvZiB0aGVt IGFueXdheS4KIAkJICovCiAJCW9sZF9jb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KHJvb3QtPnBsYW5uZXJfY3h0KTsKKwkJdW5pcXVlUmVsSW5mbyA9IHBhbGxvYyhzaXplb2Yo VW5pcXVlUmVsSW5mbykpOworCQl1bmlxdWVSZWxJbmZvLT5leHRyYV9jbGF1c2VzID0gb3V0 ZXJfZXhwcnM7CisJCXVuaXF1ZVJlbEluZm8tPm91dGVycmVsaWRzID0gYm1zX2NvcHkob3V0 ZXJyZWxpZHMpOwogCQlpbm5lcnJlbC0+dW5pcXVlX2Zvcl9yZWxzID0gbGFwcGVuZChpbm5l cnJlbC0+dW5pcXVlX2Zvcl9yZWxzLAotCQkJCQkJCQkJCQlibXNfY29weShvdXRlcnJlbGlk cykpOworCQkJCQkJCQkJCQl1bmlxdWVSZWxJbmZvKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZF9jb250ZXh0KTsKIAorCQlpZiAoZXh0cmFfY2xhdXNlcykKKwkJCSpleHRyYV9j bGF1c2VzID0gb3V0ZXJfZXhwcnM7CiAJCXJldHVybiB0cnVlOwkJCS8qIFN1Y2Nlc3MhICov CiAJfQogCWVsc2UKQEAgLTEwNzcsNyArMTE1Niw4IEBAIGlzX2lubmVycmVsX3VuaXF1ZV9m b3IoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCSAgIFJlbGlkcyBvdXRlcnJlbGlkcywKIAkJ CQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCiAJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBl LAotCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QpCisJCQkJCSAgIExpc3QgKnJlc3RyaWN0 bGlzdCwKKwkJCQkJICAgTGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJTGlzdAkgICAqY2xh dXNlX2xpc3QgPSBOSUw7CiAJTGlzdENlbGwgICAqbGM7CkBAIC0xMTE5LDUgKzExOTksOTIw IEBAIGlzX2lubmVycmVsX3VuaXF1ZV9mb3IoUGxhbm5lckluZm8gKnJvb3QsCiAJfQogCiAJ LyogTGV0IHJlbF9pc19kaXN0aW5jdF9mb3IoKSBkbyB0aGUgaGFyZCB3b3JrICovCi0JcmV0 dXJuIHJlbF9pc19kaXN0aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0KTsK KwlyZXR1cm4gcmVsX2lzX2Rpc3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xp c3QsIGV4dHJhX2NsYXVzZXMpOworfQorCit0eXBlZGVmIHN0cnVjdCBDaGFuZ2VWYXJub0Nv bnRleHQKK3sKKwlJbmRleAkJb2xkUmVsaWQ7CisJSW5kZXgJCW5ld1JlbGlkOworfSBDaGFu Z2VWYXJub0NvbnRleHQ7CisKKworc3RhdGljIGJvb2wKK2NoYW5nZV92YXJub193YWxrZXIo Tm9kZSAqbm9kZSwgQ2hhbmdlVmFybm9Db250ZXh0ICpjb250ZXh0KQoreworCWlmIChub2Rl ID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChJc0Eobm9kZSwgVmFyKSkKKwl7 CisJCVZhcgkJICAgKnZhciA9IChWYXIgKikgbm9kZTsKKworCQlpZiAodmFyLT52YXJubyA9 PSBjb250ZXh0LT5vbGRSZWxpZCkKKwkJeworCQkJdmFyLT52YXJubyA9IGNvbnRleHQtPm5l d1JlbGlkOworCQkJdmFyLT52YXJub3N5biA9IGNvbnRleHQtPm5ld1JlbGlkOworCQkJdmFy LT5sb2NhdGlvbiA9IC0xOworCQl9CisJCWVsc2UgaWYgKHZhci0+dmFybm8gPT0gY29udGV4 dC0+bmV3UmVsaWQpCisJCQl2YXItPmxvY2F0aW9uID0gLTE7CisKKwkJcmV0dXJuIGZhbHNl OworCX0KKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0SW5mbykpCisJeworCQljaGFuZ2Vfcmlu Zm8oKFJlc3RyaWN0SW5mbyAqKSBub2RlLCBjb250ZXh0LT5vbGRSZWxpZCwgY29udGV4dC0+ bmV3UmVsaWQpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiBleHByZXNzaW9uX3Ry ZWVfd2Fsa2VyKG5vZGUsIGNoYW5nZV92YXJub193YWxrZXIsIGNvbnRleHQpOworfQorCisv KgorICogRm9yIGFsbCBWYXJzIGluIHRoZSBleHByZXNzaW9uIHRoYXQgaGF2ZSB2YXJubyA9 IG9sZFJlbGlkLCBzZXQKKyAqIHZhcm5vID0gbmV3UmVsaWQuCisgKi8KK3N0YXRpYyB2b2lk CitjaGFuZ2VfdmFybm8oRXhwciAqZXhwciwgSW5kZXggb2xkUmVsaWQsIEluZGV4IG5ld1Jl bGlkKQoreworCUNoYW5nZVZhcm5vQ29udGV4dCBjb250ZXh0OworCisJaWYgKG5ld1JlbGlk ID09IDApCisJCXJldHVybjsKKworCWNvbnRleHQub2xkUmVsaWQgPSBvbGRSZWxpZDsKKwlj b250ZXh0Lm5ld1JlbGlkID0gbmV3UmVsaWQ7CisJY2hhbmdlX3Zhcm5vX3dhbGtlcigoTm9k ZSAqKSBleHByLCAmY29udGV4dCk7Cit9CisKKy8qCisgKiBTdWJzdGl0dXRlIG5ld0lkIGZv ciBvbGRJZCBpbiByZWxpZHMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorY2hhbmdlX3Jl bGlkKFJlbGlkcyByZWxpZHMsIEluZGV4IG9sZElkLCBJbmRleCBuZXdJZCkKK3sKKwlpZiAo bmV3SWQgPT0gMCkKKwkJLyogRGVsZXRlIHJlbGlkIHdpdGhvdXQgc3Vic3RpdHV0aW9uLiAq LworCQlyZXR1cm4gYm1zX2RlbF9tZW1iZXIocmVsaWRzLCBvbGRJZCk7CisKKwlpZiAoYm1z X2lzX21lbWJlcihvbGRJZCwgcmVsaWRzKSkKKwkJcmV0dXJuIGJtc19hZGRfbWVtYmVyKGJt c19kZWxfbWVtYmVyKGJtc19jb3B5KHJlbGlkcyksIG9sZElkKSwgbmV3SWQpOworCisJcmV0 dXJuIHJlbGlkczsKK30KKworc3RhdGljIHZvaWQKK2NoYW5nZV9yaW5mbyhSZXN0cmljdElu Zm8gKnJpbmZvLCBJbmRleCBmcm9tLCBJbmRleCB0bykKK3sKKwlib29sCQlpc19yZXFfZXF1 YWw7CisKKwlpZiAodG8gPT0gMCkKKwkJcmV0dXJuOworCisJaXNfcmVxX2VxdWFsID0gKHJp bmZvLT5yZXF1aXJlZF9yZWxpZHMgPT0gcmluZm8tPmNsYXVzZV9yZWxpZHMpOworCisJY2hh bmdlX3Zhcm5vKHJpbmZvLT5jbGF1c2UsIGZyb20sIHRvKTsKKwljaGFuZ2VfdmFybm8ocmlu Zm8tPm9yY2xhdXNlLCBmcm9tLCB0byk7CisJcmluZm8tPmNsYXVzZV9yZWxpZHMgPSBjaGFu Z2VfcmVsaWQocmluZm8tPmNsYXVzZV9yZWxpZHMsIGZyb20sIHRvKTsKKwlpZiAoaXNfcmVx X2VxdWFsKQorCQlyaW5mby0+cmVxdWlyZWRfcmVsaWRzID0gcmluZm8tPmNsYXVzZV9yZWxp ZHM7CisJZWxzZQorCQlyaW5mby0+cmVxdWlyZWRfcmVsaWRzID0gY2hhbmdlX3JlbGlkKHJp bmZvLT5yZXF1aXJlZF9yZWxpZHMsIGZyb20sIHRvKTsKKwlyaW5mby0+bGVmdF9yZWxpZHMg PSBjaGFuZ2VfcmVsaWQocmluZm8tPmxlZnRfcmVsaWRzLCBmcm9tLCB0byk7CisJcmluZm8t PnJpZ2h0X3JlbGlkcyA9IGNoYW5nZV9yZWxpZChyaW5mby0+cmlnaHRfcmVsaWRzLCBmcm9t LCB0byk7CisJcmluZm8tPm91dGVyX3JlbGlkcyA9IGNoYW5nZV9yZWxpZChyaW5mby0+b3V0 ZXJfcmVsaWRzLCBmcm9tLCB0byk7CisJcmluZm8tPm51bGxhYmxlX3JlbGlkcyA9IGNoYW5n ZV9yZWxpZChyaW5mby0+bnVsbGFibGVfcmVsaWRzLCBmcm9tLCB0byk7Cit9CisKKy8qCisg KiBVcGRhdGUgRUMgbWVtYmVycyB0byBwb2ludCB0byB0aGUgcmVtYWluaW5nIHJlbGF0aW9u IGluc3RlYWQgb2YgdGhlIHJlbW92ZWQKKyAqIG9uZSwgcmVtb3ZpbmcgZHVwbGljYXRlcy4K KyAqLworc3RhdGljIHZvaWQKK3VwZGF0ZV9lY19tZW1iZXJzKEVxdWl2YWxlbmNlQ2xhc3Mg KmVjLCBJbmRleCB0b1JlbW92ZSwgSW5kZXggdG9LZWVwKQoreworCWludAkJCWNvdW50ZXI7 CisKKwlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbGlzdF9sZW5ndGgoZWMtPmVjX21l bWJlcnMpOykKKwl7CisJCUxpc3RDZWxsICAgKmNlbGwgPSBsaXN0X250aF9jZWxsKGVjLT5l Y19tZW1iZXJzLCBjb3VudGVyKTsKKwkJRXF1aXZhbGVuY2VNZW1iZXIgKmVtID0gbGZpcnN0 KGNlbGwpOworCQlpbnQJCQljb3VudGVyMTsKKworCQlpZiAoIWJtc19pc19tZW1iZXIodG9S ZW1vdmUsIGVtLT5lbV9yZWxpZHMpKQorCQl7CisJCQljb3VudGVyKys7CisJCQljb250aW51 ZTsKKwkJfQorCisJCWVtLT5lbV9yZWxpZHMgPSBjaGFuZ2VfcmVsaWQoZW0tPmVtX3JlbGlk cywgdG9SZW1vdmUsIHRvS2VlcCk7CisJCS8qIFdlIG9ubHkgcHJvY2VzcyBpbm5lciBqb2lu cyAqLworCQljaGFuZ2VfdmFybm8oZW0tPmVtX2V4cHIsIHRvUmVtb3ZlLCB0b0tlZXApOwor CisJCS8qCisJCSAqIEFmdGVyIHdlIHN3aXRjaGVkIHRoZSBlcXVpdmFsZW5jZSBtZW1iZXIg dG8gdGhlIHJlbWFpbmluZyByZWxhdGlvbiwKKwkJICogY2hlY2sgdGhhdCBpdCBpcyBub3Qg dGhlIHNhbWUgYXMgdGhlIGV4aXN0aW5nIG1lbWJlciwgYW5kIGlmIGl0IGlzLAorCQkgKiBk ZWxldGUgaXQuCisJCSAqLworCQlmb3IgKGNvdW50ZXIxID0gMDsgY291bnRlcjEgPCBsaXN0 X2xlbmd0aChlYy0+ZWNfbWVtYmVycyk7IGNvdW50ZXIxKyspCisJCXsKKwkJCUVxdWl2YWxl bmNlTWVtYmVyICpvdGhlcjsKKworCQkJaWYgKGNvdW50ZXIxID09IGNvdW50ZXIpCisJCQkJ Y29udGludWU7CisKKwkJCW90aGVyID0gY2FzdE5vZGUoRXF1aXZhbGVuY2VNZW1iZXIsIGxp c3RfbnRoKGVjLT5lY19tZW1iZXJzLCBjb3VudGVyMSkpOworCisJCQlpZiAoZXF1YWwob3Ro ZXItPmVtX2V4cHIsIGVtLT5lbV9leHByKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChj b3VudGVyMSA8IGxpc3RfbGVuZ3RoKGVjLT5lY19tZW1iZXJzKSkKKwkJCWVjLT5lY19tZW1i ZXJzID0gbGlzdF9kZWxldGVfY2VsbChlYy0+ZWNfbWVtYmVycywgY2VsbCk7CisJCWVsc2UK KwkJCWNvdW50ZXIrKzsKKwl9Cit9CisKKy8qCisgKiBVcGRhdGUgRUMgc291cmNlcyB0byBw b2ludCB0byB0aGUgcmVtYWluaW5nIHJlbGF0aW9uIGluc3RlYWQgb2YgdGhlCisgKiByZW1v dmVkIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3VwZGF0ZV9lY19zb3VyY2VzKExpc3QgKipz b3VyY2VzLCBJbmRleCB0b1JlbW92ZSwgSW5kZXggdG9LZWVwKQoreworCWludAkJCWNvdW50 ZXI7CisKKwlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbGlzdF9sZW5ndGgoKnNvdXJj ZXMpOykKKwl7CisJCUxpc3RDZWxsICAgKmNlbGwgPSBsaXN0X250aF9jZWxsKCpzb3VyY2Vz LCBjb3VudGVyKTsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGNhc3ROb2RlKFJlc3RyaWN0 SW5mbywgbGZpcnN0KGNlbGwpKTsKKwkJaW50CQkJY291bnRlcjE7CisKKwkJaWYgKCFibXNf aXNfbWVtYmVyKHRvUmVtb3ZlLCByaW5mby0+cmVxdWlyZWRfcmVsaWRzKSkKKwkJeworCQkJ Y291bnRlcisrOworCQkJY29udGludWU7CisJCX0KKworCQljaGFuZ2VfdmFybm8ocmluZm8t PmNsYXVzZSwgdG9SZW1vdmUsIHRvS2VlcCk7CisKKwkJLyoKKwkJICogQWZ0ZXIgc3dpdGNo aW5nIHRoZSBjbGF1c2UgdG8gdGhlIHJlbWFpbmluZyByZWxhdGlvbiwgY2hlY2sgaXQgZm9y CisJCSAqIHJlZHVuZGFuY3kgd2l0aCBleGlzdGluZyBvbmVzLiBXZSBkb24ndCBoYXZlIHRv IGNoZWNrIGZvcgorCQkgKiByZWR1bmRhbmN5IHdpdGggZGVyaXZlZCBjbGF1c2VzLCBiZWNh dXNlIHdlJ3ZlIGp1c3QgZGVsZXRlZCB0aGVtLgorCQkgKi8KKwkJZm9yIChjb3VudGVyMSA9 IDA7IGNvdW50ZXIxIDwgbGlzdF9sZW5ndGgoKnNvdXJjZXMpOyBjb3VudGVyMSsrKQorCQl7 CisJCQlSZXN0cmljdEluZm8gKm90aGVyOworCisJCQlpZiAoY291bnRlcjEgPT0gY291bnRl cikKKwkJCQljb250aW51ZTsKKworCQkJb3RoZXIgPSBjYXN0Tm9kZShSZXN0cmljdEluZm8s IGxpc3RfbnRoKCpzb3VyY2VzLCBjb3VudGVyMSkpOworCQkJaWYgKGVxdWFsKHJpbmZvLT5j bGF1c2UsIG90aGVyLT5jbGF1c2UpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvdW50 ZXIxIDwgbGlzdF9sZW5ndGgoKnNvdXJjZXMpKQorCQkJKnNvdXJjZXMgPSBsaXN0X2RlbGV0 ZV9jZWxsKCpzb3VyY2VzLCBjZWxsKTsKKwkJZWxzZQorCQl7CisJCQljb3VudGVyKys7CisK KwkJCS8qIFdlIHdpbGwga2VlcCB0aGlzIFJlc3RyaWN0SW5mbywgY29ycmVjdCBpdHMgcmVs aWRzLiAqLworCQkJY2hhbmdlX3JpbmZvKHJpbmZvLCB0b1JlbW92ZSwgdG9LZWVwKTsKKwkJ fQorCX0KK30KKworLyoKKyAqIFJlbW92ZSBhIHJlbGF0aW9uIGFmdGVyIHdlIGhhdmUgcHJv dmVuIHRoYXQgaXQgcGFydGljaXBhdGVzIG9ubHkgaW4gYW4KKyAqIHVubmVlZGVkIHVuaXF1 ZSBzZWxmIGpvaW4uCisgKgorICogVGhlIGpvaW5jbGF1c2VzIGxpc3QgaXMgZGVzdHJ1Y3Rp dmVseSBjaGFuZ2VkLgorICovCitzdGF0aWMgdm9pZAorcmVtb3ZlX3NlbGZfam9pbl9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFBsYW5Sb3dNYXJrICprbWFyaywgUGxhblJvd01hcmsgKnJt YXJrLAorCQkJCQkgUmVsT3B0SW5mbyAqdG9LZWVwLCBSZWxPcHRJbmZvICp0b1JlbW92ZSkK K3sKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisJTGlzdAkgICAqdGFyZ2V0ID0g TklMOworCisJLyoKKwkgKiBJbmNsdWRlIGFsbCBlY2xhc3MgbWVudGlvbnMgb2YgcmVtb3Zl ZCByZWxhdGlvbiBpbnRvIHRoZSBlY2xhc3MKKwkgKiBtZW50aW9ucyBvZiBrZXB0IHJlbGF0 aW9uLgorCSAqLworCXRvS2VlcC0+ZWNsYXNzX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcnMo dG9SZW1vdmUtPmVjbGFzc19pbmRleGVzLAorCQkJCQkJCQkJCQkgdG9LZWVwLT5lY2xhc3Nf aW5kZXhlcyk7CisKKwkvKgorCSAqIE5vdywgYmFzZXJlc3RyaWN0aW5mbyByZXBsZW5pc2hl ZCB3aXRoIHJlc3RyaWN0aW9ucyBmcm9tIHJlbW92aW5nCisJICogcmVsYXRpb24uIEl0IGlz IG5lZWRlZCB0byByZW1vdmUgZHVwbGljYXRlcyBhbmQgcmVwbGFjZSBkZWdlbmVyYXRlZAor CSAqIGNsYXVzZXMgd2l0aCBhIE51bGxUZXN0LgorCSAqLworCWZvcmVhY2goY2VsbCwgdG9L ZWVwLT5iYXNlcmVzdHJpY3RpbmZvKQorCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGxm aXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgY2VsbCk7CisJCUxpc3RDZWxsICAgKm90aGVyQ2Vs bCA9IE5VTEw7CisKKwkJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKHRvUmVtb3ZlLT5yZWxpZCwg cmluZm8tPmNsYXVzZV9yZWxpZHMpKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGNsYXVzZSBp cyBhIG1lcmdlam9pbmFibGUgZXF1YWxpdHkgY2xhdXNlIHRoYXQgY29tcGFyZXMgYQorCQkg KiB2YXJpYWJsZSB0byBpdHNlbGYsIGkuZS4sIGhhcyB0aGUgZm9ybSBvZiAiWD1YIiwgcmVw bGFjZSBpdCB3aXRoCisJCSAqIG51bGwgdGVzdC4KKwkJICovCisJCWlmIChyaW5mby0+bWVy Z2VvcGZhbWlsaWVzICYmIElzQShyaW5mby0+Y2xhdXNlLCBPcEV4cHIpKQorCQl7CisJCQlF eHByCSAgICpsZWZ0T3A7CisJCQlFeHByCSAgICpyaWdodE9wOworCisJCQlsZWZ0T3AgPSAo RXhwciAqKSBnZXRfbGVmdG9wKHJpbmZvLT5jbGF1c2UpOworCQkJcmlnaHRPcCA9IChFeHBy ICopIGdldF9yaWdodG9wKHJpbmZvLT5jbGF1c2UpOworCisJCQlpZiAobGVmdE9wICE9IE5V TEwgJiYgZXF1YWwobGVmdE9wLCByaWdodE9wKSkKKwkJCXsKKwkJCQlOdWxsVGVzdCAgICpu dWxsVGVzdCA9IG1ha2VOb2RlKE51bGxUZXN0KTsKKworCQkJCW51bGxUZXN0LT5hcmcgPSBs ZWZ0T3A7CisJCQkJbnVsbFRlc3QtPm51bGx0ZXN0dHlwZSA9IElTX05PVF9OVUxMOworCQkJ CW51bGxUZXN0LT5hcmdpc3JvdyA9IGZhbHNlOworCQkJCW51bGxUZXN0LT5sb2NhdGlvbiA9 IC0xOworCQkJCXJpbmZvLT5jbGF1c2UgPSAoRXhwciAqKSBudWxsVGVzdDsKKwkJCX0KKwkJ fQorCisJCS8qIFNlYXJjaCBmb3IgZHVwbGljYXRlcy4gKi8KKwkJZm9yZWFjaChvdGhlckNl bGwsIHRhcmdldCkKKwkJeworCQkJUmVzdHJpY3RJbmZvICpvdGhlciA9IGxmaXJzdF9ub2Rl KFJlc3RyaWN0SW5mbywgb3RoZXJDZWxsKTsKKworCQkJaWYgKG90aGVyID09IHJpbmZvIHx8 CisJCQkJKHJpbmZvLT5wYXJlbnRfZWMgIT0gTlVMTAorCQkJCSAmJiBvdGhlci0+cGFyZW50 X2VjID09IHJpbmZvLT5wYXJlbnRfZWMpCisJCQkJfHwgZXF1YWwocmluZm8tPmNsYXVzZSwg b3RoZXItPmNsYXVzZSkpCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAo b3RoZXJDZWxsICE9IE5VTEwpCisJCQkvKiBEdXBsaWNhdGUgZm91bmQgKi8KKwkJCWNvbnRp bnVlOworCisJCXRhcmdldCA9IGxhcHBlbmQodGFyZ2V0LCByaW5mbyk7CisJfQorCisJbGlz dF9mcmVlKHRvS2VlcC0+YmFzZXJlc3RyaWN0aW5mbyk7CisJdG9LZWVwLT5iYXNlcmVzdHJp Y3RpbmZvID0gdGFyZ2V0OworCisJLyoKKwkgKiBVcGRhdGUgdGhlIGVxdWl2YWxlbmNlIGNs YXNzZXMgdGhhdCByZWZlcmVuY2UgdGhlIHJlbW92ZWQgcmVsYXRpb25zLgorCSAqLworCWZv cmVhY2goY2VsbCwgcm9vdC0+ZXFfY2xhc3NlcykKKwl7CisJCUVxdWl2YWxlbmNlQ2xhc3Mg KmVjID0gbGZpcnN0KGNlbGwpOworCisJCWlmICghYm1zX2lzX21lbWJlcih0b1JlbW92ZS0+ cmVsaWQsIGVjLT5lY19yZWxpZHMpKQorCQl7CisJCQkvKgorCQkJICogVGhpcyBFQyBkb2Vz bid0IHJlZmVyZW5jZSB0aGUgcmVtb3ZlZCByZWxhdGlvbiwgbm90aGluZyB0byBiZQorCQkJ ICogZG9uZSBmb3IgaXQuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJ ICogVXBkYXRlIHRoZSBFQyBtZW1iZXJzIHRvIHJlZmVyZW5jZSB0aGUgcmVtYWluaW5nIHJl bGF0aW9uIGluc3RlYWQKKwkJICogb2YgdGhlIHJlbW92ZWQgb25lLgorCQkgKi8KKwkJdXBk YXRlX2VjX21lbWJlcnMoZWMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisJ CWVjLT5lY19yZWxpZHMgPSBjaGFuZ2VfcmVsaWQoZWMtPmVjX3JlbGlkcywgdG9SZW1vdmUt PnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKworCQkvKgorCQkgKiBXZSB3aWxsIG5vdyB1cGRh dGUgc291cmNlIGFuZCBkZXJpdmVkIGNsYXVzZXMgb2YgdGhlIEVDLgorCQkgKgorCQkgKiBS ZXN0cmljdGlvbiBjbGF1c2VzIGZvciBiYXNlIHJlbGF0aW9ucyBhcmUgYWxyZWFkeSBkaXN0 cmlidXRlZCB0bworCQkgKiB0aGUgcmVzcGVjdGl2ZSBiYXNlcmVzdHJpY3RpbmZvIGxpc3Rz IChzZWUKKwkJICogZ2VuZXJhdGVfaW1wbGllZF9lcXVhbGl0aWVzKS4gVGhlIGFib3ZlIGNv ZGUgaGFzIGFscmVhZHkgcHJvY2Vzc2VkCisJCSAqIHRoaXMgbGlzdCwgYW5kIHVwZGF0ZWQg dGhlc2UgY2xhdXNlcyB0byByZWZlcmVuY2UgdGhlIHJlbWFpbmluZworCQkgKiByZWxhdGlv biwgc28gd2UgY2FuIHNraXAgdGhlbSBoZXJlIGJhc2VkIG9uIHRoZWlyIHJlbGlkcy4KKwkJ ICoKKwkJICogTGlrZXdpc2UsIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIGpvaW4g Y2xhdXNlcyB0aGF0IGpvaW4gdGhlCisJCSAqIHJlbW92ZWQgcmVsYXRpb24gdG8gdGhlIHJl bWFpbmluZyBvbmUuCisJCSAqCisJCSAqIEZpbmFsbHksIHRoZXJlIGFyZSBqb2luIGNsYXVz ZXMgdGhhdCBqb2luIHRoZSByZW1vdmVkIHJlbGF0aW9uIHRvCisJCSAqIHNvbWUgdGhpcmQg cmVsYXRpb24uIFdlIGNhbid0IGp1c3QgZGVsZXRlIHRoZSBzb3VyY2UgY2xhdXNlcyBhbmQK KwkJICogcmVnZW5lcmF0ZSB0aGVtIGZyb20gdGhlIEVDLCBiZWNhdXNlIHRoZSBjb3JyZXNw b25kaW5nIGVxdWFsaXR5CisJCSAqIG9wZXJhdG9ycyBtaWdodCBiZSBtaXNzaW5nIChzZWUg dGhlIGhhbmRsaW5nIG9mIGVjX2Jyb2tlbikuCisJCSAqIFRoZXJlZm9yZSwgd2Ugd2lsbCB1 cGRhdGUgdGhlIHJlZmVyZW5jZXMgaW4gdGhlIHNvdXJjZSBjbGF1c2VzLgorCQkgKgorCQkg KiBEZXJpdmVkIGNsYXVzZXMgY2FuIGJlIGdlbmVyYXRlZCBhZ2Fpbiwgc28gaXQgaXMgc2lt cGxlciB0byBqdXN0CisJCSAqIGRlbGV0ZSB0aGVtLgorCQkgKi8KKwkJbGlzdF9mcmVlKGVj LT5lY19kZXJpdmVzKTsKKwkJZWMtPmVjX2Rlcml2ZXMgPSBOVUxMOworCQl1cGRhdGVfZWNf c291cmNlcygmZWMtPmVjX3NvdXJjZXMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxp ZCk7CisJfQorCisJLyoKKwkgKiBUcmFuc2ZlciB0aGUgdGFyZ2V0bGlzdCBhbmQgYXR0cl9u ZWVkZWQgZmxhZ3MuCisJICovCisJQXNzZXJ0KHRvUmVtb3ZlLT5yZWx0YXJnZXQtPnNvcnRn cm91cHJlZnMgPT0gMCk7CisKKwlmb3JlYWNoKGNlbGwsIHRvUmVtb3ZlLT5yZWx0YXJnZXQt PmV4cHJzKQorCXsKKwkJRXhwcgkgICAqbm9kZSA9IGxmaXJzdChjZWxsKTsKKworCQljaGFu Z2VfdmFybm8obm9kZSwgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJaWYg KCFsaXN0X21lbWJlcih0b0tlZXAtPnJlbHRhcmdldC0+ZXhwcnMsIG5vZGUpKQorCQkJdG9L ZWVwLT5yZWx0YXJnZXQtPmV4cHJzID0gbGFwcGVuZCh0b0tlZXAtPnJlbHRhcmdldC0+ZXhw cnMsIG5vZGUpOworCX0KKworCWZvciAoaSA9IHRvS2VlcC0+bWluX2F0dHI7IGkgPD0gdG9L ZWVwLT5tYXhfYXR0cjsgaSsrKQorCXsKKwkJaW50CQkJYXR0bm8gPSBpIC0gdG9LZWVwLT5t aW5fYXR0cjsKKworCQl0b0tlZXAtPmF0dHJfbmVlZGVkW2F0dG5vXSA9IGJtc19hZGRfbWVt YmVycyh0b0tlZXAtPmF0dHJfbmVlZGVkW2F0dG5vXSwKKwkJCQkJCQkJCQkJCQkgdG9SZW1v dmUtPmF0dHJfbmVlZGVkW2F0dG5vXSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcmVtb3Zl ZCByZWxhdGlvbiBoYXMgYSByb3cgbWFyaywgdHJhbnNmZXIgaXQgdG8gdGhlIHJlbWFpbmlu ZworCSAqIG9uZS4KKwkgKgorCSAqIElmIGJvdGggcmVscyBoYXZlIHJvdyBtYXJrcywganVz dCBrZWVwIHRoZSBvbmUgY29ycmVzcG9uZGluZyB0byB0aGUKKwkgKiByZW1haW5pbmcgcmVs YXRpb24sIGJlY2F1c2Ugd2UgdmVyaWZpZWQgZWFybGllciB0aGF0IHRoZXkgaGF2ZSB0aGUg c2FtZQorCSAqIHN0cmVuZ3RoLgorCSAqCisJICogQWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUg c2NyYXRjaC0+cm93X21hcmtzIGNhY2hlIGlzIHVwIHRvIGRhdGUsIGJlY2F1c2UKKwkgKiB3 ZSBhcmUgZ29pbmcgdG8gdXNlIGl0IGZvciBmdXJ0aGVyIGpvaW4gcmVtb3ZhbHMuCisJICov CisJaWYgKHJtYXJrKQorCXsKKwkJaWYgKGttYXJrKQorCQl7CisJCQlBc3NlcnQoa21hcmst Pm1hcmtUeXBlID09IHJtYXJrLT5tYXJrVHlwZSk7CisKKwkJCS8qCisJCQkgKiBYWFg6IFdo eSBoZXJlIHdlIGhhdmVuJ3QgYW55IGRpZmZlcmVuY2VzIGluIHJlbW92aW5nIHJtYXJrIG9y CisJCQkgKiBrbWFyaz8KKwkJCSAqLworCQkJcm9vdC0+cm93TWFya3MgPSBsaXN0X2RlbGV0 ZV9wdHIocm9vdC0+cm93TWFya3MsIHJtYXJrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8q IFNob3VsZG4ndCBoYXZlIGluaGVyaXRhbmNlIGNoaWxkcmVuIGhlcmUuICovCisJCQlBc3Nl cnQocm1hcmstPnJ0aSA9PSBybWFyay0+cHJ0aSk7CisKKwkJCXJtYXJrLT5ydGkgPSBybWFy ay0+cHJ0aSA9IHRvS2VlcC0+cmVsaWQ7CisJCX0KKwl9CisKKwkvKgorCSAqIENoYW5nZSB2 YXJubyBpbiBzb21lIHNwZWNpYWwgY2FzZXMgd2l0aCBub24tdHJpdmlhbCBSYW5nZVRibEVu dHJ5CisJICovCisJZm9yZWFjaChjZWxsLCByb290LT5wYXJzZS0+cnRhYmxlKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZpcnN0KGNlbGwpOworCisJCXN3aXRjaCAocnRlLT5y dGVraW5kKQorCQl7CisJCQljYXNlIFJURV9GVU5DVElPTjoKKwkJCQljaGFuZ2VfdmFybm8o KEV4cHIgKikgcnRlLT5mdW5jdGlvbnMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxp ZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJURV9UQUJMRUZVTkM6CisJCQkJY2hhbmdlX3Zh cm5vKChFeHByICopIHJ0ZS0+dGFibGVmdW5jLCB0b1JlbW92ZS0+cmVsaWQsIHRvS2VlcC0+ cmVsaWQpOworCQkJCWJyZWFrOworCQkJY2FzZSBSVEVfVkFMVUVTOgorCQkJCWNoYW5nZV92 YXJubygoRXhwciAqKSBydGUtPnZhbHVlc19saXN0cywgdG9SZW1vdmUtPnJlbGlkLCB0b0tl ZXAtPnJlbGlkKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogbm8gb3AgKi8K KwkJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogUmVwbGFjZSB2YXJubyBpbiByb290 IHRhcmdldGxpc3QgYW5kIEhBVklORyBjbGF1c2UuCisJICovCisJY2hhbmdlX3Zhcm5vKChF eHByICopIHJvb3QtPnByb2Nlc3NlZF90bGlzdCwgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAt PnJlbGlkKTsKKwljaGFuZ2VfdmFybm8oKEV4cHIgKikgcm9vdC0+cGFyc2UtPmhhdmluZ1F1 YWwsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisKKwkvKgorCSAqIFRyYW5z ZmVyIGpvaW4gYW5kIHJlc3RyaWN0aW9uIGNsYXVzZXMgZnJvbSB0aGUgcmVtb3ZlZCByZWxh dGlvbiB0byB0aGUKKwkgKiByZW1haW5pbmcgb25lLiBXZSBjaGFuZ2UgdGhlIFZhcnMgb2Yg dGhlIGNsYXVzZSB0byBwb2ludCB0byB0aGUKKwkgKiByZW1haW5pbmcgcmVsYXRpb24gaW5z dGVhZCBvZiB0aGUgcmVtb3ZlZCBvbmUuIFRoZSBjbGF1c2VzIHRoYXQgcmVxdWlyZQorCSAq IGEgc3Vic2V0IG9mIGpvaW5yZWxpZHMgYmVjb21lIHJlc3RyaWN0aW9uIGNsYXVzZXMgb2Yg dGhlIHJlbWFpbmluZworCSAqIHJlbGF0aW9uLCBhbmQgb3RoZXJzIHJlbWFpbiBqb2luIGNs YXVzZXMuIFdlIGFwcGVuZCB0aGVtIHRvCisJICogYmFzZXJlc3RyaWN0aW5mbyBhbmQgam9p bmluZm8gcmVzcGVjdGl2ZWx5LCB0cnlpbmcgbm90IHRvIGludHJvZHVjZQorCSAqIGR1cGxp Y2F0ZXMuCisJICoKKwkgKiBXZSBhbHNvIGhhdmUgdG8gcHJvY2VzcyB0aGUgJ2pvaW5jbGF1 c2VzJyBsaXN0IGhlcmUsIGJlY2F1c2UgaXQKKwkgKiBjb250YWlucyBFQy1kZXJpdmVkIGpv aW4gY2xhdXNlcyB3aGljaCBtdXN0IGJlY29tZSBmaWx0ZXIgY2xhdXNlcy4gSXQKKwkgKiBp cyBub3QgZW5vdWdoIHRvIGp1c3QgY29ycmVjdCB0aGUgRUNzLCBiZWNhdXNlIHRoZSBFQy1k ZXJpdmVkCisJICogcmVzdHJpY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIGpvaW4gcmVt b3ZhbCAoc2VlCisJICogZ2VuZXJhdGVfYmFzZV9pbXBsaWVkX2VxdWFsaXRpZXMpLgorCSAq LworfQorCisvKgorICogc3BsaXRfc2VsZmpvaW5fcXVhbHMKKyAqCQlQcm9jZXNzZXMgJ2pv aW5xdWFscycgYnVpbGRpbmcgdHdvIGxpc3RzLCBvbmUgd2l0aCBhIGxpc3Qgb2YgcXVhbHMK KyAqCQl3aGVyZSB0aGUgY29sdW1ucy9leHBycyBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgam9p biBtYXRjaCBhbmQgYW5vdGhlcgorICoJCWxpc3QgY29udGFpbmluZyB0aGUgcmVtYWluaW5n IHF1YWxzLgorICoKKyAqICdqb2lucXVhbHMnIG11c3Qgb25seSBjb250YWluIHF1YWxzIGZv ciBhIFJURV9SRUxBVElPTiBiZWluZyBqb2luZWQgdG8KKyAqIGl0c2VsZi4KKyAqLworc3Rh dGljIHZvaWQKK3NwbGl0X3NlbGZqb2luX3F1YWxzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpqb2lucXVhbHMsIExpc3QgKipzZWxmam9pbnF1YWxzLAorCQkJCQkgTGlzdCAqKm90aGVy am9pbnF1YWxzKQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnNqb2lucXVhbHMg PSBOSUw7CisJTGlzdAkgICAqb2pvaW5xdWFscyA9IE5JTDsKKworCWZvcmVhY2gobGMsIGpv aW5xdWFscykKKwl7CisJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0 cmljdEluZm8sIGxjKTsKKwkJT3BFeHByCSAgICpleHByOworCQlFeHByCSAgICpsZWZ0ZXhw cjsKKwkJRXhwcgkgICAqcmlnaHRleHByOworCisJCS8qIEluIGdlbmVyYWwsIGNsYXVzZSBs b29rcyBsaWtlIEYoYXJnMSkgPSBHKGFyZzIpID8gKi8KKwkJaWYgKCFyaW5mby0+bWVyZ2Vv cGZhbWlsaWVzIHx8CisJCQlibXNfbnVtX21lbWJlcnMocmluZm8tPmNsYXVzZV9yZWxpZHMp ICE9IDIgfHwKKwkJCWJtc19udW1fbWVtYmVycyhyaW5mby0+bGVmdF9yZWxpZHMpICE9IDEg fHwKKwkJCWJtc19udW1fbWVtYmVycyhyaW5mby0+cmlnaHRfcmVsaWRzKSAhPSAxKQorCQl7 CisJCQlvam9pbnF1YWxzID0gbGFwcGVuZChvam9pbnF1YWxzLCByaW5mbyk7CisJCQljb250 aW51ZTsKKwkJfQorCisJCWV4cHIgPSAoT3BFeHByICopIHJpbmZvLT5jbGF1c2U7CisKKwkJ aWYgKCFJc0EoZXhwciwgT3BFeHByKSB8fCBsaXN0X2xlbmd0aChleHByLT5hcmdzKSAhPSAy KQorCQl7CisJCQlvam9pbnF1YWxzID0gbGFwcGVuZChvam9pbnF1YWxzLCByaW5mbyk7CisJ CQljb250aW51ZTsKKwkJfQorCisJCWxlZnRleHByID0gKEV4cHIgKikgY29weU9iamVjdChn ZXRfbGVmdG9wKHJpbmZvLT5jbGF1c2UpKTsKKwkJcmlnaHRleHByID0gKEV4cHIgKikgY29w eU9iamVjdChnZXRfcmlnaHRvcChyaW5mby0+Y2xhdXNlKSk7CisKKwkJLyogQ2FuJ3QgbWF0 Y2ggb2YgdGhlIGV4cHJzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSAqLworCQlpZiAobGVm dGV4cHItPnR5cGUgIT0gcmlnaHRleHByLT50eXBlKQorCQl7CisJCQlvam9pbnF1YWxzID0g bGFwcGVuZChvam9pbnF1YWxzLCByaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNo YW5nZV92YXJubyhyaWdodGV4cHIsCisJCQkJCSBibXNfbmV4dF9tZW1iZXIocmluZm8tPnJp Z2h0X3JlbGlkcywgLTEpLAorCQkJCQkgYm1zX25leHRfbWVtYmVyKHJpbmZvLT5sZWZ0X3Jl bGlkcywgLTEpKTsKKworCQlpZiAoZXF1YWwobGVmdGV4cHIsIHJpZ2h0ZXhwcikpCisJCQlz am9pbnF1YWxzID0gbGFwcGVuZChzam9pbnF1YWxzLCByaW5mbyk7CisJCWVsc2UKKwkJCW9q b2lucXVhbHMgPSBsYXBwZW5kKG9qb2lucXVhbHMsIHJpbmZvKTsKKwl9CisKKwkqc2VsZmpv aW5xdWFscyA9IHNqb2lucXVhbHM7CisJKm90aGVyam9pbnF1YWxzID0gb2pvaW5xdWFsczsK K30KKworLyoKKyAqIENoZWNrIGZvciBhIGNhc2Ugd2hlbiB1bmlxdWVuZXNzIFtwYXJ0bHld IGRlcml2ZWQgZnJvbSBhIGJhc2VyZXN0cmljdGluZm8KKyAqIGNsYXVzZS4gSW4gdGhpcyBj YXNlIHdlIGhhdmUgYSBjaGFuY2UgdG8gcmV0dXJuIG9ubHkgb25lIHJvdyAoaWYgc3VjaAor ICogY2xhdXNlcyBvbiBib3RoIHNpZGVzIG9mIFNKIGlzIGVxdWFsKSBvciBub3RoaW5nIC0g aWYgdGhleSBhcmUgZGlmZmVyZW50LgorICovCitzdGF0aWMgYm9vbAorbWF0Y2hfdW5pcXVl X2NsYXVzZXMoUmVsT3B0SW5mbyAqb3V0ZXIsIExpc3QgKnVjbGF1c2VzLCBJbmRleCByZWxp ZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHVjbGF1c2VzKQorCXsK KwkJUmVzdHJpY3RJbmZvICAgKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBs Yyk7CisJCUV4cHIJCSAgICpjbGF1c2U7CisJCU5vZGUJCSAgICppY2xhdXNlOworCQlOb2Rl CQkgICAqYzE7CisJCWJvb2wJCQltYXRjaGVkID0gZmFsc2U7CisJCUxpc3RDZWxsCSAgICpv bGM7CisKKwkJQXNzZXJ0KG91dGVyLT5yZWxpZCA+IDAgJiYgcmVsaWQgPiAwKTsKKworCQkv KiBPbmx5IGZpbHRlcnMgbGlrZSBmKFIueDEsLi4uLFIueE4pID09IGV4cHIgd2Ugc2hvdWxk IGNvbnNpZGVyLiAqLworCQlBc3NlcnQoYm1zX2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlk cykgfHwKKwkJCSAgIGJtc19pc19lbXB0eShyaW5mby0+cmlnaHRfcmVsaWRzKSk7CisKKwkJ Y2xhdXNlID0gKEV4cHIgKikgY29weU9iamVjdChyaW5mby0+Y2xhdXNlKTsKKwkJY2hhbmdl X3Zhcm5vKGNsYXVzZSwgcmVsaWQsIG91dGVyLT5yZWxpZCk7CisKKwkJYzEgPSAocmluZm8t Pm91dGVyX2lzX2xlZnQgPyBnZXRfbGVmdG9wKGNsYXVzZSkgOiBnZXRfcmlnaHRvcChjbGF1 c2UpKTsKKwkJaWNsYXVzZSA9IChyaW5mby0+b3V0ZXJfaXNfbGVmdCA/CisJCQkJCQkJCQln ZXRfcmlnaHRvcChjbGF1c2UpIDogZ2V0X2xlZnRvcChjbGF1c2UpKTsKKworCQkvKgorCQkg KiBDb21wYXJlIHRoZXNlIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIHdpdGggY29ycmVzcG9uZGlu ZyBzaWRlcyBvZiB0aGUKKwkJICogb3V0ZXIncyBmaWx0ZXJzLiBJZiBubyBvbmUgZGV0ZWN0 ZWQgLSByZXR1cm4gaW1tZWRpYXRlbHkuCisJCSAqLworCQlmb3JlYWNoKG9sYywgb3V0ZXIt PmJhc2VyZXN0cmljdGluZm8pCisJCXsKKwkJCVJlc3RyaWN0SW5mbyAqb3JpbmZvID0gbGZp cnN0X25vZGUoUmVzdHJpY3RJbmZvLCBvbGMpOworCQkJTm9kZQkJICpvY2xhdXNlOworCQkJ Tm9kZQkJICpjMjsKKworCQkJaWYgKG9yaW5mby0+bWVyZ2VvcGZhbWlsaWVzID09IE5JTCkK KwkJCQkvKiBEb24ndCBjb25zaWRlciBjbGF1c2VzIHdoaWNoIGFyZW4ndCBzaW1pbGFyIHRv ICdGKFgpPUcoWSknICovCisJCQkJY29udGludWU7CisKKwkJCW9jbGF1c2UgPSAoYm1zX2lz X2VtcHR5KG9yaW5mby0+bGVmdF9yZWxpZHMpID8KKwkJCQkJZ2V0X3JpZ2h0b3Aob3JpbmZv LT5jbGF1c2UpIDogZ2V0X2xlZnRvcChvcmluZm8tPmNsYXVzZSkpOworCQkJYzIgPSAoYm1z X2lzX2VtcHR5KG9yaW5mby0+bGVmdF9yZWxpZHMpID8KKwkJCQkgICBnZXRfbGVmdG9wKG9y aW5mby0+Y2xhdXNlKSA6IGdldF9yaWdodG9wKG9yaW5mby0+Y2xhdXNlKSk7CisKKwkJCWlm IChlcXVhbChpY2xhdXNlLCBvY2xhdXNlKSAmJiBlcXVhbChjMSwgYzIpKQorCQkJeworCQkJ CW1hdGNoZWQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFtYXRj aGVkKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgor ICogRmluZCBhbmQgcmVtb3ZlIHVuaXF1ZSBzZWxmIGpvaW5zIGluIGEgZ3JvdXAgb2YgYmFz ZSByZWxhdGlvbnMgdGhhdCBoYXZlCisgKiB0aGUgc2FtZSBPaWQuCisgKgorICogUmV0dXJu cyBhIHNldCBvZiByZWxpZHMgdGhhdCB3ZXJlIHJlbW92ZWQuCisgKi8KK3N0YXRpYyBSZWxp ZHMKK3JlbW92ZV9zZWxmX2pvaW5zX29uZV9ncm91cChQbGFubmVySW5mbyAqcm9vdCwgUmVs aWRzIHJlbGlkcykKK3sKKwlSZWxpZHMJCWpvaW5yZWxpZHMgPSBOVUxMOworCVJlbGlkcwkJ cmVzdWx0ID0gTlVMTDsKKwlpbnQJCQlrOwkJCQkvKiBJbmRleCBvZiBrZXB0IHJlbGF0aW9u ICovCisJaW50CQkJciA9IC0xOwkJCS8qIEluZGV4IG9mIHJlbW92ZWQgcmVsYXRpb24gKi8K KworCWlmIChibXNfbnVtX21lbWJlcnMocmVsaWRzKSA8IDIpCisJCXJldHVybiBOVUxMOwor CisJd2hpbGUgKChyID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcikpID4gMCkKKwl7CisJ CVJlbE9wdEluZm8gKm91dGVyID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyXTsKKworCQlr ID0gcjsKKworCQl3aGlsZSAoKGsgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBrKSkgPiAw KQorCQl7CisJCQlSZWxPcHRJbmZvICppbm5lciA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlb a107CisJCQlMaXN0CSAgICpyZXN0cmljdGxpc3Q7CisJCQlMaXN0CSAgICpzZWxmam9pbnF1 YWxzOworCQkJTGlzdAkgICAqb3RoZXJqb2lucXVhbHM7CisJCQlMaXN0Q2VsbCAgICpsYzsK KwkJCWJvb2wJCWppbmZvX2NoZWNrID0gdHJ1ZTsKKwkJCVBsYW5Sb3dNYXJrICpvbWFyayA9 IE5VTEw7CisJCQlQbGFuUm93TWFyayAqaW1hcmsgPSBOVUxMOworCQkJTGlzdAkgICAqdWNs YXVzZXMgPSBOSUw7CisKKwkJCS8qIEEgc2FuaXR5IGNoZWNrOiB0aGUgcmVsYXRpb25zIGhh dmUgdGhlIHNhbWUgT2lkLiAqLworCQkJQXNzZXJ0KHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlb a10tPnJlbGlkID09CisJCQkJICAgcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtyXS0+cmVsaWQp OworCisJCQkvKgorCQkJICogSXQgaXMgaW1wb3NzaWJsZSB0byBvcHRpbWl6ZSB0d28gcmVs YXRpb25zIGlmIHRoZXkgYmVsb25nIHRvCisJCQkgKiBkaWZmZXJlbnQgcnVsZXMgb2Ygb3Jk ZXIgcmVzdHJpY3Rpb24uIE90aGVyd2lzZSBwbGFubmVyIGNhbid0CisJCQkgKiBiZSBhYmxl IHRvIGZpbmQgYW55IHZhcmlhbnRzIG9mIGNvcnJlY3QgcXVlcnkgcGxhbi4KKwkJCSAqLwor CQkJZm9yZWFjaChsYywgcm9vdC0+am9pbl9pbmZvX2xpc3QpCisJCQl7CisJCQkJU3BlY2lh bEpvaW5JbmZvICppbmZvID0gKFNwZWNpYWxKb2luSW5mbyAqKSBsZmlyc3QobGMpOworCisJ CQkJaWYgKChibXNfaXNfbWVtYmVyKGssIGluZm8tPnN5bl9sZWZ0aGFuZCkgXgorCQkJCQkg Ym1zX2lzX21lbWJlcihyLCBpbmZvLT5zeW5fbGVmdGhhbmQpKSB8fAorCQkJCQkoYm1zX2lz X21lbWJlcihrLCBpbmZvLT5zeW5fcmlnaHRoYW5kKSBeCisJCQkJCSBibXNfaXNfbWVtYmVy KHIsIGluZm8tPnN5bl9yaWdodGhhbmQpKSkKKwkJCQl7CisJCQkJCWppbmZvX2NoZWNrID0g ZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKCFqaW5mb19jaGVj aykKKwkJCQljb250aW51ZTsKKworCQkJLyogUmV1c2Ugam9pbnJlbGlkcyBiaXRzZXQgdG8g YXZvaWQgcmVhbGxvY2F0aW9uLiAqLworCQkJam9pbnJlbGlkcyA9IGJtc19kZWxfbWVtYmVy cyhqb2lucmVsaWRzLCBqb2lucmVsaWRzKTsKKworCQkJLyoKKwkJCSAqIFdlIG9ubHkgZGVh bCB3aXRoIGJhc2UgcmVscyBoZXJlLCBzbyB0aGVpciByZWxpZHMgYml0c2V0CisJCQkgKiBj b250YWlucyBvbmx5IG9uZSBtZW1iZXIgLS0gdGhlaXIgcmVsaWQuCisJCQkgKi8KKwkJCWpv aW5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihqb2lucmVsaWRzLCByKTsKKwkJCWpvaW5yZWxp ZHMgPSBibXNfYWRkX21lbWJlcihqb2lucmVsaWRzLCBrKTsKKworCQkJLyoKKwkJCSAqIEF0 IHRoaXMgc3RhZ2Ugam9pbmluZm8gbGlzdHMgb2YgaW5uZXIgYW5kIG91dGVyIGNhbiBjb250 YWluCisJCQkgKiBvbmx5IGNsYXVzZXMsIHJlcXVpcmVkIGZvciBhIHN1cGVyaW9yIG91dGVy IGpvaW4gdGhhdCBjYW4ndAorCQkJICogaW5mbHVlbmNlIG9uIHRoaXMgb3B0aW1pemF0aW9u LiBTbywgd2UgY2FuIGF2b2lkIHRvIGNhbGwgdGhlCisJCQkgKiBidWlsZF9qb2lucmVsX3Jl c3RyaWN0bGlzdCgpIHJvdXRpbmUuCisJCQkgKi8KKwkJCXJlc3RyaWN0bGlzdCA9IGdlbmVy YXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzKHJvb3QsIGpvaW5yZWxpZHMsCisJCQkJCQkJ CQkJCQkJCQlvdXRlci0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCQkJaW5uZXIpOworCisJCQkv KgorCQkJICogUHJvY2VzcyByZXN0cmljdGxpc3QgdG8gc2VwZXJhdGUgb3V0IHRoZSBzZWxm IGpvaW4gcXVhbHMgZnJvbQorCQkJICogdGhlIG90aGVyIHF1YWxzLiBlLmcgeCA9IHggZ29l cyB0byBzZWxmam9pbnF1YWxzIGFuZCBhID0gYiB0bworCQkJICogb3RoZXJqb2lucXVhbHMu CisJCQkgKi8KKwkJCXNwbGl0X3NlbGZqb2luX3F1YWxzKHJvb3QsIHJlc3RyaWN0bGlzdCwg JnNlbGZqb2lucXVhbHMsCisJCQkJCQkJCSAmb3RoZXJqb2lucXVhbHMpOworCisJCQkvKiBJ cyBpdCBhbiB1bmlxdWUgc2VsZiBqb2luPyAqLworCisJCQlpZiAobGlzdF9sZW5ndGgoc2Vs ZmpvaW5xdWFscykgPT0gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFhYWDogd2Ugd291bGQg ZGV0ZWN0IHNlbGYtam9pbiB3aXRob3V0IHF1YWxzIGxpa2UgJ3g9PXgnIGlmCisJCQkJICog d2UgaGFkIGFuIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgb24gc29tZSBvZiBvdGhlciBxdWFs cyBhbmQKKwkJCQkgKiB0aGlzIGpvaW4gaGF2ZW4ndCBhbnkgY29sdW1ucyBmcm9tIHRoZSBv dXRlciBpbiB0aGUgdGFyZ2V0CisJCQkJICogbGlzdC4gQnV0IGl0IGlzIHN0aWxsIGNvbXBs ZXggdGFzay4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAq IERldGVybWluZSBpZiB0aGUgaW5uZXIgdGFibGUgY2FuIGR1cGxpY2F0ZSBvdXRlciByb3dz LiAgV2UgbXVzdAorCQkJICogYnlwYXNzIHRoZSB1bmlxdWUgcmVsIGNhY2hlIGhlcmUgc2lu Y2Ugd2UncmUgcG9zc2libHkgdXNpbmcgYQorCQkJICogc3Vic2V0IG9mIGpvaW4gcXVhbHMu IFdlIGNhbiB1c2UgJ2ZvcmNlX2NhY2hlJyA9IHRydWUgd2hlbiBhbGwKKwkJCSAqIGpvaW4g cXVhbHMgYXJlIHNlbGZqb2luIHF1YWxzLiAgT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cAor CQkJICogcHV0dGluZyBmYWxzZSBuZWdhdGl2ZXMgaW4gdGhlIGNhY2hlLgorCQkJICovCisJ CQlpZiAoIWlubmVycmVsX2lzX3VuaXF1ZV9leHQocm9vdCwgam9pbnJlbGlkcywgb3V0ZXIt PnJlbGlkcywKKwkJCQkJCQkJCQlpbm5lciwgSk9JTl9JTk5FUiwgc2VsZmpvaW5xdWFscywK KwkJCQkJCQkJCQlsaXN0X2xlbmd0aChvdGhlcmpvaW5xdWFscykgPT0gMCwKKwkJCQkJCQkJ CQkmdWNsYXVzZXMpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogV2UgaGF2ZSBw cm92ZW4gdGhhdCBmb3IgYm90aCByZWxhdGlvbnMsIHRoZSBzYW1lIHVuaXF1ZSBpbmRleAor CQkJICogZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGlzIGF0IG1vc3Qgb25lIHJvdyB3aGVyZSBj b2x1bW5zIGVxdWFsCisJCQkgKiBnaXZlbiB2YWx1ZXMuIFRoZXNlIHZhbHVlcyBtdXN0IGJl IHRoZSBzYW1lIGZvciBib3RoIHJlbGF0aW9ucywKKwkJCSAqIG9yIGVsc2Ugd2Ugd29uJ3Qg bWF0Y2ggdGhlIHNhbWUgcm93IG9uIGVhY2ggc2lkZSBvZiBqb2luLgorCQkJICovCisJCQlp ZiAoIW1hdGNoX3VuaXF1ZV9jbGF1c2VzKG91dGVyLCB1Y2xhdXNlcywgaW5uZXItPnJlbGlk KSkKKwkJCQljb250aW51ZTsKKworCQkJLyogU2VlIGZvciByb3cgbWFya3MuICovCisJCQlm b3JlYWNoKGxjLCByb290LT5yb3dNYXJrcykKKwkJCXsKKwkJCQlQbGFuUm93TWFyayAqcm93 TWFyayA9IChQbGFuUm93TWFyayAqKSBsZmlyc3QobGMpOworCisJCQkJaWYgKHJvd01hcmst PnJ0aSA9PSBrKQorCQkJCXsKKwkJCQkJQXNzZXJ0KGltYXJrID09IE5VTEwpOworCQkJCQlp bWFyayA9IHJvd01hcms7CisJCQkJfQorCQkJCWVsc2UgaWYgKHJvd01hcmstPnJ0aSA9PSBy KQorCQkJCXsKKwkJCQkJQXNzZXJ0KG9tYXJrID09IE5VTEwpOworCQkJCQlvbWFyayA9IHJv d01hcms7CisJCQkJfQorCisJCQkJaWYgKG9tYXJrICYmIGltYXJrKQorCQkJCQlicmVhazsK KwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGNhbid0IHJlbW92ZSB0aGUgam9pbiBpZiB0aGUg cmVsYXRpb25zIGhhdmUgcm93IG1hcmtzIG9mCisJCQkgKiBkaWZmZXJlbnQgc3RyZW5ndGgg KGUuZy4gb25lIGlzIGxvY2tlZCBGT1IgVVBEQVRFIGFuZCBhbm90aGVyCisJCQkgKiBqdXN0 IGhhcyBST1dfTUFSS19SRUZFUkVOQ0UgZm9yIEV2YWxQbGFuUXVhbCByZWNoZWNraW5nKS4K KwkJCSAqLworCQkJaWYgKG9tYXJrICYmIGltYXJrICYmIG9tYXJrLT5tYXJrVHlwZSAhPSBp bWFyay0+bWFya1R5cGUpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBCZSBzYWZl IHRvIGRvIG5vdCByZW1vdmUgdGFibGUgcGFydGljaXBhdGVkIGluIGNvbXBsaWNhdGVkIFBI CisJCQkgKi8KKwkJCWZvcmVhY2gobGMsIHJvb3QtPnBsYWNlaG9sZGVyX2xpc3QpCisJCQl7 CisJCQkJUGxhY2VIb2xkZXJJbmZvICpwaGluZm8gPSAoUGxhY2VIb2xkZXJJbmZvICopIGxm aXJzdChsYyk7CisKKwkJCQkvKiB0aGVyZSBpc24ndCBhbnkgb3RoZXIgcGxhY2UgdG8gZXZh bCBQSFYgKi8KKwkJCQlpZiAoYm1zX2lzX3N1YnNldChwaGluZm8tPnBoX2V2YWxfYXQsIGpv aW5yZWxpZHMpIHx8CisJCQkJCWJtc19pc19zdWJzZXQocGhpbmZvLT5waF9uZWVkZWQsIGpv aW5yZWxpZHMpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGxjKQorCQkJCWNvbnRp bnVlOworCisJCQkvKgorCQkJICogV2UgY2FuIHJlbW92ZSBlaXRoZXIgcmVsYXRpb24sIHNv IHJlbW92ZSB0aGUgb3V0ZXIgb25lLCB0bworCQkJICogc2ltcGxpZnkgdGhpcyBsb29wLgor CQkJICovCisKKwkJCS8qCisJCQkgKiBBdHRhY2ggdGhlIHJlc3RyaWN0aW9ucyB0byByZW1v dmluZyByZWxhdGlvbiB0byBzaW1wbGlmeSByZWxpZHMKKwkJCSAqIHJlcGxhY2luZyBwcm9j ZWR1cmUuIGpvaW5pbmZvIGNsYXVzZXMgb2YgcmVtb3ZpbmcgcmVsYXRpb24gd2lsbAorCQkJ ICogYmUgbW92ZWQgdG8gdGhlIGtlZXBpbmcgYnkgdGhlIHJlbW92ZV9yZWxfZnJvbV9xdWVy eSgpLgorCQkJICovCisJCQlvdXRlci0+YmFzZXJlc3RyaWN0aW5mbyA9IGxpc3RfY29uY2F0 KG91dGVyLT5iYXNlcmVzdHJpY3RpbmZvLAorCQkJCQkJCQkJCQkJICByZXN0cmljdGxpc3Qp OworCisJCQkvKiBGaXJzdGx5LCByZXBsYWNlIGluZGV4IG9mIGV4Y2x1ZGluZyByZWxhdGlv biB3aXRoIGtlZXBpbmcuICovCisJCQlyZW1vdmVfcmVsX2Zyb21fcXVlcnkocm9vdCwgb3V0 ZXItPnJlbGlkLCBqb2lucmVsaWRzLCBpbm5lci0+cmVsaWQpOworCisJCQkvKiBTZWNvbmRs eSwgZml4IHJlc3RyaWN0aW9ucyBvZiBrZWVwaW5nIHJlbGF0aW9uICovCisJCQlyZW1vdmVf c2VsZl9qb2luX3JlbChyb290LCBpbWFyaywgb21hcmssIGlubmVyLCBvdXRlcik7CisJCQly ZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHIpOworCisJCQkvKiBXZSByZW1vdmVk IHRoZSBvdXRlciByZWxhdGlvbiwgdHJ5IHRoZSBuZXh0IG9uZS4gKi8KKwkJCWJyZWFrOwor CQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEl0ZXJhdGl2ZWx5IGZv cm0gYSBncm91cCBvZiByZWxhdGlvbiBpbmRleGVzIHdpdGggdGhlIHNhbWUgb2lkIGFuZCBs YXVuY2gKKyAqIHRoZSByb3V0aW5lIHRoYXQgZGV0ZWN0cyBzZWxmLWpvaW5zIGluIHRoaXMg Z3JvdXAgYW5kIHJlbW92ZXMgZXhjZXNzaXZlCisgKiByYW5nZSB0YWJsZSBlbnRyaWVzLgor ICoKKyAqIEF0IHRoZSBlbmQgb2YgaXRlcmF0aW9uLCBleGNsdWRlIHRoZSBncm91cCBmcm9t IHRoZSBvdmVyYWxsIHJlbGlkcyBsaXN0LgorICogU28gZWFjaCBuZXh0IGl0ZXJhdGlvbiBv ZiB0aGUgY3ljbGUgd2lsbCBpbnZvbHZlIGxlc3MgYW5kIGxlc3MgdmFsdWUgb2YKKyAqIHJl bGlkcy4KKyAqLworc3RhdGljIFJlbGlkcworcmVtb3ZlX3NlbGZfam9pbnNfb25lX2xldmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzLCBSZWxpZHMgVG9SZW1vdmUpCit7 CisJd2hpbGUgKCFibXNfaXNfZW1wdHkocmVsaWRzKSkKKwl7CisJCVJlbGlkcwkJZ3JvdXAg PSBOVUxMOworCQlPaWQJCQlncm91cE9pZDsKKwkJaW50CQkJaTsKKworCQlpID0gYm1zX2Zp cnN0X21lbWJlcihyZWxpZHMpOworCQlncm91cE9pZCA9IHJvb3QtPnNpbXBsZV9ydGVfYXJy YXlbaV0tPnJlbGlkOworCQlBc3NlcnQoT2lkSXNWYWxpZChncm91cE9pZCkpOworCQlncm91 cCA9IGJtc19hZGRfbWVtYmVyKGdyb3VwLCBpKTsKKworCQkvKiBDcmVhdGUgZ3JvdXAgb2Yg cmVsYXRpb24gaW5kZXhlcyB3aXRoIHRoZSBzYW1lIG9pZC4gKi8KKwkJd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKHJlbGlkcywgaSkpID4gMCkKKwkJeworCQkJUmFuZ2VUYmxFbnRy eSAqcnRlID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtpXTsKKworCQkJQXNzZXJ0KE9pZElz VmFsaWQocnRlLT5yZWxpZCkpOworCisJCQlpZiAocnRlLT5yZWxpZCA9PSBncm91cE9pZCkK KwkJCQlncm91cCA9IGJtc19hZGRfbWVtYmVyKGdyb3VwLCBpKTsKKwkJfQorCisJCXJlbGlk cyA9IGJtc19kZWxfbWVtYmVycyhyZWxpZHMsIGdyb3VwKTsKKwkJVG9SZW1vdmUgPSBibXNf YWRkX21lbWJlcnMoVG9SZW1vdmUsCisJCQkJCQkJCSAgIHJlbW92ZV9zZWxmX2pvaW5zX29u ZV9ncm91cChyb290LCBncm91cCkpOworCQlibXNfZnJlZShncm91cCk7CisJfQorCXJldHVy biBUb1JlbW92ZTsKK30KKworLyoKKyAqIEZvciBlYWNoIGxldmVsIG9mIGpvaW5saXN0IGZv cm0gYSBzZXQgb2YgYmFzZSByZWxhdGlvbnMgYW5kIGxhdW5jaCB0aGUKKyAqIHJvdXRpbmUg b2YgdGhlIHNlbGYtam9pbiByZW1vdmFsIG9wdGltaXphdGlvbi4gUmVjdXJzZSBpbnRvIHN1 Yi1qb2lubGlzdHMgdG8KKyAqIGhhbmRsZSBkZWVwZXIgbGV2ZWxzLgorICovCitzdGF0aWMg UmVsaWRzCityZW1vdmVfc2VsZl9qb2luc19yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpqb2lubGlzdCwgUmVsaWRzIFRvUmVtb3ZlKQoreworCUxpc3RDZWxsICAgKmxjOwor CVJlbGlkcwkJcmVsaWRzID0gTlVMTDsKKworCS8qIENvbGxlY3QgdGhlIGlkcyBvZiBiYXNl IHJlbGF0aW9ucyBhdCBvbmUgbGV2ZWwgb2YgdGhlIGpvaW4gdHJlZS4gKi8KKwlmb3JlYWNo KGxjLCBqb2lubGlzdCkKKwl7CisJCXN3aXRjaCAoKChOb2RlICopIGxmaXJzdChsYykpLT50 eXBlKQorCQl7CisJCQljYXNlIFRfTGlzdDoKKwkJCQkvKiBSZWN1cnNpdmVseSBnbyBpbnNp ZGUgdGhlIHN1Yi1qb2lubGlzdCAqLworCQkJCVRvUmVtb3ZlID0gcmVtb3ZlX3NlbGZfam9p bnNfcmVjdXJzZShyb290LAorCQkJCQkJCQkJCQkJCSAoTGlzdCAqKSBsZmlyc3QobGMpLAor CQkJCQkJCQkJCQkJCSBUb1JlbW92ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfUmFuZ2VU YmxSZWY6CisJCQkJeworCQkJCQlSYW5nZVRibFJlZiAqcmVmID0gKFJhbmdlVGJsUmVmICop IGxmaXJzdChsYyk7CisJCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJvb3QtPnNpbXBsZV9y dGVfYXJyYXlbcmVmLT5ydGluZGV4XTsKKworCQkJCQkvKgorCQkJCQkgKiBXZSBvbmx5IGNh cmUgYWJvdXQgYmFzZSByZWxhdGlvbnMgZnJvbSB3aGljaCB3ZSBzZWxlY3QKKwkJCQkJICog c29tZXRoaW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVM QVRJT04gfHwKKwkJCQkJCXJ0ZS0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OIHx8CisJ CQkJCQlyb290LT5zaW1wbGVfcmVsX2FycmF5W3JlZi0+cnRpbmRleF0gPT0gTlVMTCkKKwkJ CQkJCWJyZWFrOworCisJCQkJCUFzc2VydCghYm1zX2lzX21lbWJlcihyZWYtPnJ0aW5kZXgs IHJlbGlkcykpOworCQkJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJlZi0+ cnRpbmRleCk7CisKKwkJCQkJLyoKKwkJCQkJICogTGltaXQgdGhlIG51bWJlciBvZiBqb2lu cyB3ZSBwcm9jZXNzIHRvIGNvbnRyb2wgdGhlCisJCQkJCSAqIHF1YWRyYXRpYyBiZWhhdmlv ci4KKwkJCQkJICovCisJCQkJCWlmIChibXNfbnVtX21lbWJlcnMocmVsaWRzKSA+IGpvaW5f Y29sbGFwc2VfbGltaXQpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlk ZWZhdWx0OgorCQkJCUFzc2VydChmYWxzZSk7CisJCX0KKwl9CisKKwlpZiAoYm1zX251bV9t ZW1iZXJzKHJlbGlkcykgPj0gMikKKwkJVG9SZW1vdmUgPSByZW1vdmVfc2VsZl9qb2luc19v bmVfbGV2ZWwocm9vdCwgcmVsaWRzLCBUb1JlbW92ZSk7CisKKwlibXNfZnJlZShyZWxpZHMp OworCXJldHVybiBUb1JlbW92ZTsKK30KKworLyoKKyAqIEZpbmQgYW5kIHJlbW92ZSB1c2Vs ZXNzIHNlbGYgam9pbnMuCisgKgorICogV2Ugc2VhcmNoIGZvciBqb2lucyB3aGVyZSB0aGUg c2FtZSByZWxhdGlvbiBpcyBqb2luZWQgdG8gaXRzZWxmIG9uIGFsbAorICogY29sdW1ucyBv ZiBzb21lIHVuaXF1ZSBpbmRleC4gSWYgdGhpcyBjb25kaXRpb24gaG9sZHMsIHRoZW4sIGZv cgorICogZWFjaCBvdXRlciByb3csIG9ubHkgb25lIGlubmVyIHJvdyBtYXRjaGVzLCBhbmQg aXQgaXMgdGhlIHNhbWUgcm93CisgKiBvZiB0aGUgc2FtZSByZWxhdGlvbi4gVGhpcyBhbGxv d3MgdXMgdG8gcmVtb3ZlIHRoZSBqb2luIGFuZCByZXBsYWNlCisgKiBpdCB3aXRoIGEgc2Nh biB0aGF0IGNvbWJpbmVzIFdIRVJFIGNsYXVzZXMgZnJvbSBib3RoIHNpZGVzLiBUaGUgam9p bgorICogY2xhdXNlcyB0aGVtc2VsdmVzIGFzc3VtZSB0aGUgZm9ybSBvZiBYID0gWCBhbmQg Y2FuIGJlIHJlcGxhY2VkIHdpdGgKKyAqIE5PVCBOVUxMIGNsYXVzZXMuCisgKgorICogRm9y IHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksIHdlIGRvbid0IGFwcGx5IHRoaXMgb3B0aW1pemF0 aW9uIHRvIHNwZWNpYWwKKyAqIGpvaW5zLiBIZXJlIGlzIGEgbGlzdCBvZiB3aGF0IHdlIGNv dWxkIGRvIGluIHNvbWUgcGFydGljdWxhciBjYXNlczoKKyAqICdhIGExIHNlbWkgam9pbiBh IGEyJzogaXMgcmVkdWNlZCB0byBpbm5lciBieSByZWR1Y2VfdW5pcXVlX3NlbWlqb2lucywK KyAqIGFuZCB0aGVuIHJlbW92ZWQgbm9ybWFsbHkuCisgKiAnYSBhMSBhbnRpIGpvaW4gYSBh Mic6IGNvdWxkIHNpbXBsaWZ5IHRvIGEgc2NhbiB3aXRoICdvdXRlciBxdWFscyBBTkQKKyAq IChJUyBOVUxMIG9uIGpvaW4gY29sdW1ucyBPUiBOT1QgaW5uZXIgcXVhbHMpJy4KKyAqICdh IGExIGxlZnQgam9pbiBhIGEyJzogY291bGQgc2ltcGxpZnkgdG8gYSBzY2FuIGxpa2UgaW5u ZXIsIGJ1dCB3aXRob3V0CisgKiBOT1QgTlVMTCBjb25kaXRpb25zIG9uIGpvaW4gY29sdW1u cy4KKyAqICdhIGExIGxlZnQgam9pbiAoYSBhMiBqb2luIGIpJzogY2FuJ3Qgc2ltcGxpZnkg dGhpcywgYmVjYXVzZSBqb2luIHRvIGIKKyAqIGNhbiBib3RoIHJlbW92ZSByb3dzIGFuZCBp bnRyb2R1Y2UgZHVwbGljYXRlcy4KKyAqCisgKiBUbyBzZWFyY2ggZm9yIHJlbW92YWJsZSBq b2lucywgd2Ugb3JkZXIgYWxsIHRoZSByZWxhdGlvbnMgb24gdGhlaXIgT2lkLAorICogZ28g b3ZlciBlYWNoIHNldCB3aXRoIHRoZSBzYW1lIE9pZCwgYW5kIGNvbnNpZGVyIGVhY2ggcGFp ciBvZiByZWxhdGlvbnMKKyAqIGluIHRoaXMgc2V0LiBXZSBjaGVjayB0aGF0IGJvdGggcmVs YXRpb24gYXJlIG1hZGUgdW5pcXVlIGJ5IHRoZSBzYW1lCisgKiB1bmlxdWUgaW5kZXggd2l0 aCB0aGUgc2FtZSBjbGF1c2VzLgorICoKKyAqIFRvIHJlbW92ZSB0aGUgam9pbiwgd2UgbWFy ayBvbmUgb2YgdGhlIHBhcnRpY2lwYXRpbmcgcmVsYXRpb25zIGFzCisgKiBkZWFkLCBhbmQg cmV3cml0ZSBhbGwgcmVmZXJlbmNlcyB0byBpdCB0byBwb2ludCB0byB0aGUgcmVtYWluaW5n CisgKiByZWxhdGlvbi4gVGhpcyBpbmNsdWRlcyBtb2RpZnlpbmcgUmVzdHJpY3RJbmZvcywg RXF1aXZhbGVuY2VDbGFzc2VzIGFuZAorICogRXF1aXZhbGVuY2VNZW1iZXJzLiBXZSBhbHNv IGhhdmUgdG8gbW9kaWZ5IHRoZSByb3cgbWFya3MuIFRoZSBqb2luIGNsYXVzZXMKKyAqIG9m IHRoZSByZW1vdmVkIHJlbGF0aW9uIGJlY29tZSBlaXRoZXIgcmVzdHJpY3Rpb24gb3Igam9p biBjbGF1c2VzLCBiYXNlZCBvbgorICogd2hldGhlciB0aGV5IHJlZmVyZW5jZSBhbnkgcmVs YXRpb25zIG5vdCBwYXJ0aWNpcGF0aW5nIGluIHRoZSByZW1vdmVkIGpvaW4uCisgKgorICog J3RhcmdldGxpc3QnIGlzIHRoZSB0b3AtbGV2ZWwgdGFyZ2V0bGlzdCBvZiBxdWVyeS4gSWYg aXQgaGFzIGFueSByZWZlcmVuY2VzCisgKiB0byB0aGUgcmVtb3ZlZCByZWxhdGlvbnMsIHdl IHVwZGF0ZSB0aGVtIHRvIHBvaW50IHRvIHRoZSByZW1haW5pbmcgb25lcy4KKyAqLworTGlz dCAqCityZW1vdmVfdXNlbGVzc19zZWxmX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpqb2lubGlzdCkKK3sKKwlSZWxpZHMJCVRvUmVtb3ZlID0gTlVMTDsKKwlpbnQJCQlyZWxp ZCA9IC0xOworCisJaWYgKCFlbmFibGVfc2VsZl9qb2luX3JlbW92YWwpCisJCXJldHVybiBq b2lubGlzdDsKKworCS8qCisJICogTWVyZ2UgcGFpcnMgb2YgcmVsYXRpb25zIHBhcnRpY2lw YXRlZCBpbiBzZWxmLWpvaW4uIFJlbW92ZSB1bm5lY2Vzc2FyeQorCSAqIHJhbmdlIHRhYmxl IGVudHJpZXMuCisJICovCisJVG9SZW1vdmUgPSByZW1vdmVfc2VsZl9qb2luc19yZWN1cnNl KHJvb3QsIGpvaW5saXN0LCBUb1JlbW92ZSk7CisJd2hpbGUgKChyZWxpZCA9IGJtc19uZXh0 X21lbWJlcihUb1JlbW92ZSwgcmVsaWQpKSA+PSAwKQorCXsKKwkJaW50CQkJbnJlbW92ZWQg PSAwOworCisJCWpvaW5saXN0ID0gcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0KGpvaW5saXN0 LCByZWxpZCwgJm5yZW1vdmVkKTsKKwl9CisKKwlyZXR1cm4gam9pbmxpc3Q7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwppbmRleCAyNDhjZGU0ZDliLi5mMzVk MWI2ZTU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFp bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKQEAgLTIy OCw2ICsyMjgsMTEgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8K IAlyZWR1Y2VfdW5pcXVlX3NlbWlqb2lucyhyb290KTsKIAorCS8qCisJICogUmVtb3ZlIHNl bGYgam9pbnMgb24gYSB1bmlxdWUgY29sdW1uLgorCSAqLworCWpvaW5saXN0ID0gcmVtb3Zl X3VzZWxlc3Nfc2VsZl9qb2lucyhyb290LCBqb2lubGlzdCk7CisKIAkvKgogCSAqIE5vdyBk aXN0cmlidXRlICJwbGFjZWhvbGRlcnMiIHRvIGJhc2UgcmVscyBhcyBuZWVkZWQuICBUaGlz IGhhcyB0byBiZQogCSAqIGRvbmUgYWZ0ZXIgam9pbiByZW1vdmFsIGJlY2F1c2UgcmVtb3Zh bCBjb3VsZCBjaGFuZ2Ugd2hldGhlciBhCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA5ZmJi ZmIxYmU1Li4wYzAwN2MyM2U0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTEyMjYsNiAr MTIyNiwxNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9v bFtdID0KIAkJdHJ1ZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCisJeworCQl7ImVuYWJs ZV9zZWxmX2pvaW5fcmVtb3ZhbCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9E LAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGUgcmVtb3ZhbCBvZiB1bmlxdWUgc2VsZi1qb2lu cy4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTiB8IEdVQ19OT1RfSU5fU0FNUExFCisJ CX0sCisJCSZlbmFibGVfc2VsZl9qb2luX3JlbW92YWwsCisJCXRydWUsCisJCU5VTEwsIE5V TEwsIE5VTEwKKwl9LAogCXsKIAkJeyJnZXFvIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklO R19HRVFPLAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGdlbmV0aWMgcXVlcnkgb3B0aW1p emF0aW9uLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCBkMTFjZGFjN2Y4Li5lNWY1 NDM5ODk0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtNzYsNiArNzYsOSBAQCBleHRl cm4gdm9pZCBjcmVhdGVfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCk7CiBleHRlcm4gYm9vbCByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcihQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCSAgTGlzdCAq cmVzdHJpY3RsaXN0LAogCQkJCQkJCQkJCSAgTGlzdCAqZXhwcmxpc3QsIExpc3QgKm9wcmxp c3QpOworZXh0ZXJuIGJvb2wgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9leHQoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkJCQkgIExpc3QgKnJlc3Ry aWN0bGlzdCwgTGlzdCAqZXhwcmxpc3QsCisJCQkJCQkJCQkJICBMaXN0ICpvcHJsaXN0LCBM aXN0ICoqZXh0cmFfY2xhdXNlcyk7CiBleHRlcm4gYm9vbCBpbmRleGNvbF9pc19ib29sX2Nv bnN0YW50X2Zvcl9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCUluZGV4 T3B0SW5mbyAqaW5kZXgsCiAJCQkJCQkJCQkJCQlpbnQgaW5kZXhjb2wpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggYi9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGxhbm1haW4uaAppbmRleCAxNTY2ZjQzNWIzLi4yOTZjMTFiOGExIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAorKysgYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtMjAsNiArMjAsNyBAQAogLyogR1VDIHBhcmFt ZXRlcnMgKi8KICNkZWZpbmUgREVGQVVMVF9DVVJTT1JfVFVQTEVfRlJBQ1RJT04gMC4xCiBl eHRlcm4gUEdETExJTVBPUlQgZG91YmxlIGN1cnNvcl90dXBsZV9mcmFjdGlvbjsKK2V4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZWxmX2pvaW5fcmVtb3ZhbDsKIAogLyogcXVl cnlfcGxhbm5lciBjYWxsYmFjayB0byBjb21wdXRlIHF1ZXJ5X3BhdGhrZXlzICovCiB0eXBl ZGVmIHZvaWQgKCpxdWVyeV9wYXRoa2V5c19jYWxsYmFjaykgKFBsYW5uZXJJbmZvICpyb290 LCB2b2lkICpleHRyYSk7CkBAIC0xMDcsNiArMTA4LDExIEBAIGV4dGVybiBib29sIHF1ZXJ5 X2lzX2Rpc3RpbmN0X2ZvcihRdWVyeSAqcXVlcnksIExpc3QgKmNvbG5vcywgTGlzdCAqb3Bp ZHMpOwogZXh0ZXJuIGJvb2wgaW5uZXJyZWxfaXNfdW5pcXVlKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCSAgIFJlbGlkcyBqb2lucmVsaWRzLCBSZWxpZHMgb3V0ZXJyZWxpZHMsIFJl bE9wdEluZm8gKmlubmVycmVsLAogCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBMaXN0 ICpyZXN0cmljdGxpc3QsIGJvb2wgZm9yY2VfY2FjaGUpOworZXh0ZXJuIGJvb2wgaW5uZXJy ZWxfaXNfdW5pcXVlX2V4dChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIGpvaW5yZWxpZHMs CisJCQkJCQkJCSAgIFJlbGlkcyBvdXRlcnJlbGlkcywgUmVsT3B0SW5mbyAqaW5uZXJyZWws CisJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBMaXN0ICpyZXN0cmljdGxpc3QsCisJ CQkJCQkJCSAgIGJvb2wgZm9yY2VfY2FjaGUsIExpc3QgKip1Y2xhdXNlcyk7CitleHRlcm4g TGlzdCAqcmVtb3ZlX3VzZWxlc3Nfc2VsZl9qb2lucyhQbGFubmVySW5mbyAqcm9vdCwgTGlz dCAqam9pbnRyZWUpOwogCiAvKgogICogcHJvdG90eXBlcyBmb3IgcGxhbi9zZXRyZWZzLmMK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mub3V0CmluZGV4IDEyNmY3 MDQ3ZmUuLmRlNzE0NDEwNTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZXF1aXZjbGFzcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVp dmNsYXNzLm91dApAQCAtNDMwLDYgKzQzMCwzOCBAQCBleHBsYWluIChjb3N0cyBvZmYpCiAg ICBGaWx0ZXI6ICgodW5pcXVlMSBJUyBOT1QgTlVMTCkgQU5EICh1bmlxdWUyIElTIE5PVCBO VUxMKSkKICgyIHJvd3MpCiAKKy0tIFRlc3QgdGhhdCBicm9rZW4gRUNzIGFyZSBwcm9jZXNz ZWQgY29ycmVjdGx5IGR1cmluZyBzZWxmIGpvaW4gcmVtb3ZhbC4KKy0tIERpc2FibGUgbWVy Z2Ugam9pbnMgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW4gZXJyb3IgYWJvdXQgbWlzc2luZyBj b21tdXRhdG9yLgorLS0gVGVzdCBib3RoIG9yaWVudGF0aW9ucyBvZiB0aGUgam9pbiBjbGF1 c2UsIGJlY2F1c2Ugb25seSBvbmUgb2YgdGhlbSBicmVha3MKKy0tIHRoZSBFQy4KK3NldCBl bmFibGVfbWVyZ2Vqb2luIHRvIG9mZjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0 ICogZnJvbSBlYzAgbSBqb2luIGVjMCBuIG9uIG0uZmYgPSBuLmZmCisgIGpvaW4gZWMxIHAg b24gbS5mZiArIG4uZmYgPSBwLmYxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChuLmZmICsgbi5mZikgPSBwLmYxKQor ICAgLT4gIFNlcSBTY2FuIG9uIGVjMSBwCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBlYzAgbgorICAgICAgICAgICAgICAgRmlsdGVyOiAoZmYgSVMg Tk9UIE5VTEwpCisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCAq IGZyb20gZWMwIG0gam9pbiBlYzAgbiBvbiBtLmZmID0gbi5mZgorICBqb2luIGVjMSBwIG9u IHAuZjE6OmludDggPSAobS5mZiArIG4uZmYpOjppbnQ4YWxpYXMxOworICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgocC5mMSk6OmJpZ2lu dCA9ICgobi5mZiArIG4uZmYpKTo6aW50OGFsaWFzMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBl YzEgcAorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZWMw IG4KKyAgICAgICAgICAgICAgIEZpbHRlcjogKGZmIElTIE5PVCBOVUxMKQorKDYgcm93cykK KworcmVzZXQgZW5hYmxlX21lcmdlam9pbjsKIC0tIHRoaXMgY291bGQgYmUgY29udmVydGVk LCBidXQgaXNuJ3QgYXQgcHJlc2VudAogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3Qg KiBmcm9tIHRlbmsxIHdoZXJlIHVuaXF1ZTEgPSB1bmlxdWUxIG9yIHVuaXF1ZTIgPSB1bmlx dWUyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggMmVkMmU1NDJhNC4u OWM4M2ZjNzZlNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2lu Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBAIC00OTgy LDYgKzQ5ODIsNzQxIEBAIHNlbGVjdCAqIGZyb20KIC0tLS0rLS0tLSstLS0tKy0tLS0KICgw IHJvd3MpCiAKKy0tCistLSB0ZXN0IHRoYXQgc2VtaS0gb3IgaW5uZXIgc2VsZi1qb2lucyBv biBhIHVuaXF1ZSBjb2x1bW4gYXJlIHJlbW92ZWQKKy0tCistLSBlbmFibGUgb25seSBuZXN0 bG9vcCB0byBnZXQgbW9yZSBwcmVkaWN0YWJsZSBwbGFucworc2V0IGVuYWJsZV9oYXNoam9p biB0byBvZmY7CitzZXQgZW5hYmxlX21lcmdlam9pbiB0byBvZmY7CitjcmVhdGUgdGFibGUg c2ogKGEgaW50IHVuaXF1ZSwgYiBpbnQsIGMgaW50IHVuaXF1ZSk7CitpbnNlcnQgaW50byBz aiB2YWx1ZXMgKDEsIG51bGwsIDIpLCAobnVsbCwgMiwgbnVsbCksICgyLCAxLCAxKTsKK2Fu YWx5emUgc2o7CistLSBUcml2aWFsIHNlbGYtam9pbiBjYXNlLgorZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBx LmIgPSBxLmEgLSAxOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gc2ogcQorICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFO RCAoYiA9IChhIC0gMSkpKQorKDIgcm93cykKKworc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNq IHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworIGEgfCBiIHwgYyAKKy0t LSstLS0rLS0tCisgMiB8IDEgfCAxCisoMSByb3cpCisKKy0tIFNlbGYtam9pbiByZW1vdmFs IHBlcmZvcm1zIGFmdGVyIGEgc3VicXVlcnkgcHVsbC11cCBwcm9jZXNzIGFuZCBjb3VsZCBy ZW1vdmUKKy0tIHN1Y2gga2luZCBvZiBzZWxmLWpvaW4gdG9vLiBDaGVjayB0aGlzIG9wdGlv bi4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogcAord2hlcmUgZXhp c3RzIChzZWxlY3QgKiBmcm9tIHNqIHEKKwkJCQl3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA8 IDEwKTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g c2ogcQorICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoYiA8IDEwKSkKKygyIHJv d3MpCisKK3NlbGVjdCAqIGZyb20gc2ogcCB3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20g c2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA8IDEwKTsKKyBhIHwgYiB8IGMgCistLS0r LS0tKy0tLQorIDIgfCAxIHwgMQorKDEgcm93KQorCistLSBEb24ndCByZW1vdmUgc2VsZi1q b2luIGZvciB0aGUgY2FzZSBvZiBlcXVhbGl0eSBvZiB0d28gZGlmZmVyZW50IHVuaXF1ZSBj b2x1bW5zLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2og dDIgd2hlcmUgdDEuYSA9IHQyLmMgYW5kIHQxLmIgaXMgbm90IG51bGw7CisgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQxLmEg PSB0Mi5jKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQyCisgICAtPiAgTWF0ZXJpYWxpemUK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MQorICAgICAgICAgICAgICAgRmlsdGVy OiAoYiBJUyBOT1QgTlVMTCkKKyg2IHJvd3MpCisKKy0tIERlZ2VuZXJhdGVkIGNhc2UuCitl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tCisJKHNlbGVjdCBhIGFzIHggZnJv bSBzaiB3aGVyZSBmYWxzZSkgYXMgcTEsCisJKHNlbGVjdCBhIGFzIHkgZnJvbSBzaiB3aGVy ZSBmYWxzZSkgYXMgcTIKK3doZXJlIHExLnggPSBxMi55OworICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBS ZXN1bHQKKyAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKyAgIC0+ICBTZXEgU2NhbiBvbiBz agorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyg0IHJvd3MpCisKKy0tIFdl IGNhbid0IHVzZSBhIGNyb3NzLUVDIGdlbmVyYXRlZCBzZWxmIGpvaW4gcXVhbCBiZWNhdXNl IG9mIGN1cnJlbnQgbG9naWMgb2YKKy0tIHRoZSBnZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1 YWxpdGllcyByb3V0aW5lLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBz aiB0MSwgc2ogdDIgd2hlcmUgdDEuYSA9IHQxLmIgYW5kIHQxLmIgPSB0Mi5iIGFuZCB0Mi5i ID0gdDIuYTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEu YSA9IHQyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogdDEKKyAgICAgICAgIEZpbHRlcjog KGEgPSBiKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQyCisgICAgICAgICBGaWx0ZXI6IChi ID0gYSkKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2ogdDEsIHNqIHQyLCBzaiB0Mword2hlcmUgdDEuYSA9IHQxLmIgYW5kIHQxLmIgPSB0Mi5i IGFuZCB0Mi5iID0gdDIuYQorCWFuZCB0MS5iID0gdDMuYiBhbmQgdDMuYiA9IHQzLmE7Cisg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQx LmEgPSB0My5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KHQxLmEgPSB0Mi5iKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAg ICAgICAgICBGaWx0ZXI6IChhID0gYikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0 MgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYiA9IGEpCisgICAtPiAgU2VxIFNjYW4gb24g c2ogdDMKKyAgICAgICAgIEZpbHRlcjogKGIgPSBhKQorKDEwIHJvd3MpCisKKy0tIERvdWJs ZSBzZWxmLWpvaW4gcmVtb3ZhbC4KKy0tIFVzZSBhIGNvbmRpdGlvbiBvbiAiYiArIDEiLCBu b3Qgb24gImIiLCBmb3IgdGhlIHNlY29uZCBqb2luLCBzbyB0aGF0CistLSB0aGUgZXF1aXZh bGVuY2UgY2xhc3MgaXMgZGlmZmVyZW50IGZyb20gdGhlIGZpcnN0IG9uZSwgYW5kIHdlIGNh bgorLS0gdGVzdCB0aGUgbm9uLWVjIGNvZGUgcGF0aC4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogdDEgam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYSBhbmQgdDEu YiA9IHQyLmIKKwlqb2luIHNqIHQzIG9uIHQyLmEgPSB0My5hIGFuZCB0Mi5iICsgMSA9IHQz LmIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzaiB0MworICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAo YiBJUyBOT1QgTlVMTCkgQU5EICgoYiArIDEpIElTIE5PVCBOVUxMKSkKKygyIHJvd3MpCisK Ky0tIHN1YnNlbGVjdCB0aGF0IHJlZmVyZW5jZXMgdGhlIHJlbW92ZWQgcmVsYXRpb24KK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB0MS5hLCAoc2VsZWN0IGEgZnJvbSBzaiB3aGVy ZSBhID0gdDIuYSBhbmQgYSA9IHQxLmEpCitmcm9tIHNqIHQxLCBzaiB0Mgord2hlcmUgdDEu YSA9IHQyLmE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNqIHQyCisgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgU3ViUGxhbiAxCisg ICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiAodDIuYSA9IHQy LmEpCisgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzagorICAgICAgICAgICAgICAgICBG aWx0ZXI6IChhID0gdDIuYSkKKyg3IHJvd3MpCisKKy0tIHNlbGYtam9pbiB1bmRlciBvdXRl ciBqb2luCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHggam9pbiBz aiB5IG9uIHguYSA9IHkuYQorbGVmdCBqb2luIGludDhfdGJsIHogb24geC5hID0gei5xMTsK KyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBKb2lu IEZpbHRlcjogKHkuYSA9IHoucTEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogeQorICAgICAg ICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIHoKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCits ZWZ0IGpvaW4gaW50OF90YmwgeiBvbiB5LmEgPSB6LnExOworICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoeS5hID0gei5x MSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB5CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5P VCBOVUxMKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g aW50OF90YmwgegorKDYgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUICog RlJPTSAoCisgIFNFTEVDVCB0MS4qLCB0Mi5hIEFTIGF4IEZST00gc2ogdDEgSk9JTiBzaiB0 MgorICBPTiAodDEuYSA9IHQyLmEgQU5EIHQxLmMqdDEuYyA9IHQyLmMrMiBBTkQgdDIuYiBJ UyBOVUxMKQorKSBBUyBxMQorTEVGVCBKT0lOCisgIChTRUxFQ1QgdDMuKiBGUk9NIHNqIHQz LCBzaiB0NCBXSEVSRSB0My5jID0gdDQuYykgQVMgcTIKK09OIHExLmF4ID0gcTIuYTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKHQyLmEgPSB0NC5hKQorICAgLT4gIFNl cSBTY2FuIG9uIHNqIHQyCisgICAgICAgICBGaWx0ZXI6ICgoYiBJUyBOVUxMKSBBTkQgKGEg SVMgTk9UIE5VTEwpIEFORCAoKGMgKiBjKSA9IChjICsgMikpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHNqIHQ0CisgICAgICAgICBGaWx0ZXI6IChjIElTIE5PVCBOVUxMKQorKDYgcm93cykK KworLS0gVGVzdCB0aGF0IHBsYWNlaG9sZGVycyBhcmUgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0 ZXIgam9pbiByZW1vdmFsCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tICh2 YWx1ZXMgKDEpKSB4CitsZWZ0IGpvaW4gKHNlbGVjdCBjb2FsZXNjZSh5LnExLCAxKSBmcm9t IGludDhfdGJsIHkKKwlyaWdodCBqb2luIHNqIGoxIGlubmVyIGpvaW4gc2ogajIgb24gajEu YSA9IGoyLmEKKwlvbiB0cnVlKSB6CitvbiB0cnVlOworICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBSZXN1bHQKKyAg IC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBz aiBqMgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyAgICAgICAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhf dGJsIHkKKyg3IHJvd3MpCisKKy0tCistLSBTSlIgY29ybmVyIGNhc2U6IHVuaXF1ZW5lc3Mg b2YgYW4gaW5uZXIgaXMgW3BhcnRpYWxseV0gZGVyaXZlZCBmcm9tCistLSBiYXNlcmVzdHJp Y3RpbmZvIGNsYXVzZXMuCistLSBYWFg6IFdlIHJlYWxseSBzaG91bGQgYWxsb3cgU0pSIGZv ciB0aGVzZSBjb3JuZXIgY2FzZXM/CistLQorSU5TRVJUIElOVE8gc2ogVkFMVUVTICgzLCAx LCAzKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNU ICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFO RCBqMi5hID0gMzsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo ajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZpbHRl cjogKGEgPSAyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisgICAgICAgICBGaWx0ZXI6 IChhID0gMykKKyg2IHJvd3MpCisKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVS RSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoyLmEgPSAzOyAtLSBSZXR1cm4gb25l IHJvdworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0t CisgMiB8IDEgfCAxIHwgMyB8IDEgfCAzCisoMSByb3cpCisKK2V4cGxhaW4gKGNvc3RzIG9m ZikgLS0gUmVtb3ZlIFNKLCBkZWZpbmUgdW5pcXVlbmVzcyBieSBhIGNvbnN0YW50CisJU0VM RUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAy IEFORCBqMi5hID0gMjsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMikp CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9 IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsgLS0gUmV0dXJuIG9uZSByb3cKKyBh IHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSstLS0rLS0tKy0tLQorIDIgfCAx IHwgMSB8IDIgfCAxIHwgMQorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIGoxLmEg PSAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50 CisgIEFORCAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAz KTo6aW50ID0gajIuYQorOyAtLSBSZW1vdmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEg Y29uc3RhbnQgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5E IChhID0gKCgoRVhUUkFDVChkb3cgRlJPTSBDVVJSRU5UX1RJTUVTVEFNUCgwKSkgLyAnMTUn OjpudW1lcmljKSArICczJzo6bnVtZXJpYykpOjppbnRlZ2VyKSkKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgajEu YSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjpp bnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSAr IDMpOjppbnQgPSBqMi5hCis7IC0tIFJldHVybiBvbmUgcm93CisgYSB8IGIgfCBjIHwgYSB8 IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKyAzIHwgMSB8IDMgfCAzIHwgMSB8 IDMKKygxIHJvdykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBSZW1vdmUgU0oKKwlTRUxF Q1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDEg QU5EIGoyLmEgPSAxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAxKSkK KygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0g ajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEgPSAxOyAtLSBSZXR1cm4gbm8gcm93cworIGEg fCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisoMCByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpIC0tIFNodWZmbGUgYSBjbGF1c2UuIFJlbW92ZSBT SgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAx ID0gajEuYSBBTkQgajIuYSA9IDE7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzaiBqMgorICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAo YSA9IDEpKQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJF IGoxLmIgPSBqMi5iIEFORCAxID0gajEuYSBBTkQgajIuYSA9IDE7IC0tIFJldHVybiBubyBy b3dzCisgYSB8IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0K KygwIHJvd3MpCisKKy0tIEZ1bmN0aW9uYWwgaW5kZXgKK0NSRUFURSBVTklRVUUgSU5ERVgg c2pfZm5faWR4IE9OIHNqKChhICogYSkpOworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBSZW1v dmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5i IEFORCBqMS5hKmoxLmEgPSAxIEFORCBqMi5hKmoyLmEgPSAxOworICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAgIEZp bHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKChhICogYSkgPSAxKSkKKygyIHJvd3MpCisK K2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIKKwlXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSpqMS5hID0gMSBB TkQgajIuYSpqMi5hID0gMjsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgICAg ICAgRmlsdGVyOiAoKGEgKiBhKSA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAg ICAgICAgIEZpbHRlcjogKChhICogYSkgPSAyKQorKDYgcm93cykKKworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5i CisgIEFORCAoajEuYSpqMS5hKSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0 YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRf dGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSAoajIuYSpqMi5hKQorOyAtLSBSZXN0cmlj dGlvbiBjb250YWlucyBleHByZXNzaW9ucyBpbiBib3RoIHNpZGVzLCBSZW1vdmUgU0ouCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKChhICogYSkg PSAoKChFWFRSQUNUKGRvdyBGUk9NIENVUlJFTlRfVElNRVNUQU1QKDApKSAvICcxNSc6Om51 bWVyaWMpICsgJzMnOjpudW1lcmljKSk6OmludGVnZXIpKQorKDIgcm93cykKKworU0VMRUNU ICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpq MS5hKSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMp OjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8x NSArIDMpOjppbnQgPSAoajIuYSpqMi5hKQorOyAtLSBFbXB0eSBzZXQgb2Ygcm93cyBzaG91 bGQgYmUgcmV0dXJuZWQKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSst LS0rLS0tKy0tLQorKDAgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5h KSA9IChyYW5kb20oKS8zICsgMyk6OmludAorICBBTkQgKHJhbmRvbSgpLzMgKyAzKTo6aW50 ID0gKGoyLmEqajIuYSkKKzsgLS0gUmVzdHJpY3Rpb24gY29udGFpbnMgdm9sYXRpbGUgZnVu Y3Rpb24gLSBkaXNhYmxlIFNKUiBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEu YiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZpbHRlcjog KChhICogYSkgPSAoKChyYW5kb20oKSAvICczJzo6ZG91YmxlIHByZWNpc2lvbikgKyAnMyc6 OmRvdWJsZSBwcmVjaXNpb24pKTo6aW50ZWdlcikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBq MgorICAgICAgICAgRmlsdGVyOiAoKCgocmFuZG9tKCkgLyAnMyc6OmRvdWJsZSBwcmVjaXNp b24pICsgJzMnOjpkb3VibGUgcHJlY2lzaW9uKSk6OmludGVnZXIgPSAoYSAqIGEpKQorKDYg cm93cykKKworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5i CisgIEFORCAoajEuYSpqMS5jLzMpID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAo cmFuZG9tKCkvMyArIDMpOjppbnQgPSAoajIuYSpqMi5jLzMpCis7IC0tIFJldHVybiBvbmUg cm93CisgYSB8IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0K KyAzIHwgMSB8IDMgfCAzIHwgMSB8IDMKKygxIHJvdykKKworLS0gTXVsdGlwbGUgZmlsdGVy cworQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeDEgT04gc2ooYSxiLGMpOworZXhw bGFpbiAoY29zdHMgb2ZmKSAtLSBSZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBz aiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajEuYyA9IDMgQU5E IGoyLmEgPSAyIEFORCAzID0gajIuYzsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0 ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMikgQU5EIChjID0gMykpCisoMiByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpIC0tIERvbid0IHJlbW92ZSBTSgorCVNFTEVDVCAq IEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIDIgPSBqMS5hIEFO RCBqMS5jID0gMyBBTkQgajIuYSA9IDEgQU5EIDMgPSBqMi5jOworICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5iID0gajIu YikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgICAgICAgRmlsdGVyOiAoKDIgPSBh KSBBTkQgKGMgPSAzKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgorICAgICAgICAgRmls dGVyOiAoKGMgPSAzKSBBTkQgKGEgPSAxKSkKKyg2IHJvd3MpCisKK0NSRUFURSBVTklRVUUg SU5ERVggc2pfdGVtcF9pZHggT04gc2ooYSxiKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0g RG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEu YiA9IGoyLmIgQU5EIGoxLmEgPSAyOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAg ICAgICAgRmlsdGVyOiAoYSA9IDIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyg1IHJv d3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNU ICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIDIgPSBqMi5hOwor ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5iID0gajIuYikK KyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgorICAgICAgICAgRmlsdGVyOiAoMiA9IGEpCisg ICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9m ZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hF UkUgajEuYiA9IGoyLmIgQU5EIChqMS5hID0gMSBPUiBqMi5hID0gMSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChqMS5iID0gajIu YikgQU5EICgoajEuYSA9IDEpIE9SIChqMi5hID0gMSkpKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqIGoxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBz aiBqMgorKDUgcm93cykKKworRFJPUCBJTkRFWCBzal9mbl9pZHgsIHNqX3RlbXBfaWR4MSwg c2pfdGVtcF9pZHg7CistLSBUZXN0IHRoYXQgT1IgcHJlZGljYXRlZCBhcmUgdXBkYXRlZCBj b3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitDUkVBVEUgVEFCTEUgdGFiX3dpdGhfZmxh ZyAoIGlkIElOVCBQUklNQVJZIEtFWSwgaXNfZmxhZyBTTUFMTElOVCk7CitDUkVBVEUgSU5E RVggaWR4X3Rlc3RfaXNfZmxhZyBPTiB0YWJfd2l0aF9mbGFnIChpc19mbGFnKTsKK2V4cGxh aW4gKGNvc3RzIG9mZikKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHRhYl93aXRoX2ZsYWcKK1dI RVJFCisJKGlzX2ZsYWcgSVMgTlVMTCBPUiBpc19mbGFnID0gMCkKKwlBTkQgaWQgSU4gKFNF TEVDVCBpZCBGUk9NIHRhYl93aXRoX2ZsYWcgV0hFUkUgaWQgSU4gKDIsIDMpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRhYl93aXRoX2ZsYWcK KyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChpZCA9IEFOWSAoJ3syLDN9Jzo6aW50ZWdlcltd KSkgQU5EIChpZCBJUyBOT1QgTlVMTCkpCisgICAgICAgICBGaWx0ZXI6ICgoaXNfZmxhZyBJ UyBOVUxMKSBPUiAoaXNfZmxhZyA9IDApKQorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBT Y2FuIG9uIHRhYl93aXRoX2ZsYWdfcGtleQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KChpZCA9IEFOWSAoJ3syLDN9Jzo6aW50ZWdlcltdKSkgQU5EIChpZCBJUyBOT1QgTlVMTCkp CisoNiByb3dzKQorCitEUk9QIFRBQkxFIHRhYl93aXRoX2ZsYWc7CistLSBIQVZJTkcgY2xh dXNlCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC5iIGZyb20gc2ogcCBqb2luIHNq IHEgb24gcC5hID0gcS5hIGdyb3VwIGJ5IHAuYiBoYXZpbmcgc3VtKHAuYSkgPSAxOworICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6IHEuYgorICAgRmls dGVyOiAoc3VtKHEuYSkgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHEKKyAgICAgICAg IEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisoNSByb3dzKQorCistLSB1cGRhdGUgbGF0ZXJh bCByZWZlcmVuY2VzIGFuZCByYW5nZSB0YWJsZSBlbnRyeSByZWZlcmVuY2UKK2V4cGxhaW4g KHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCAxIGZyb20gKHNlbGVjdCB4LiogZnJvbSBz aiB4LCBzaiB5IHdoZXJlIHguYSA9IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJp ZXMoMSwgcS5hKSBncyhpKTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogMQorICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB5CisgICAgICAgICBPdXRwdXQ6IHkuYSwgeS5i LCB5LmMKKyAgICAgICAgIEZpbHRlcjogKHkuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBGdW5j dGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGdzCisgICAgICAgICBP dXRwdXQ6IGdzLmkKKyAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3Nlcmllcygx LCB5LmEpCisoOCByb3dzKQorCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxl Y3QgMSBmcm9tIChzZWxlY3QgeS4qIGZyb20gc2ogeCwgc2ogeSB3aGVyZSB4LmEgPSB5LmEp IHEsCisgIGxhdGVyYWwgZ2VuZXJhdGVfc2VyaWVzKDEsIHEuYSkgZ3MoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBPdXRwdXQ6IDEKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuc2og eQorICAgICAgICAgT3V0cHV0OiB5LmEsIHkuYiwgeS5jCisgICAgICAgICBGaWx0ZXI6ICh5 LmEgSVMgTk9UIE5VTEwpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLmdl bmVyYXRlX3NlcmllcyBncworICAgICAgICAgT3V0cHV0OiBncy5pCisgICAgICAgICBGdW5j dGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgeS5hKQorKDggcm93cykKKworLS0gVGVz dCB0aGF0IGEgbm9uLUVDLWRlcml2ZWQgam9pbiBjbGF1c2UgaXMgcHJvY2Vzc2VkIGNvcnJl Y3RseS4gVXNlIGFuCistLSBvdXRlciBqb2luIHNvIHRoYXQgd2UgY2FuJ3QgZm9ybSBhbiBF Qy4KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBzaiBwIGpvaW4gc2ogcSBv biBwLmEgPSBxLmEKKyAgbGVmdCBqb2luIHNqIHIgb24gcC5hICsgcS5hID0gci5hOworICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmls dGVyOiAoKHEuYSArIHEuYSkgPSByLmEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogcQorICAg ICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHIKKyg2IHJvd3MpCisKKy0tIEZJWE1FIHRoaXMg Y29uc3RhbnQgZmFsc2UgZmlsdGVyIGRvZXNuJ3QgbG9vayBnb29kLiBTaG91bGQgd2UgbWVy Z2UKKy0tIGVxdWl2YWxlbmNlIGNsYXNzZXM/CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcC5hID0gcS5hIGFuZCBwLmIgPSAxIGFuZCBx LmIgPSAyOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogcQorICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5V TEwpIEFORCAoYiA9IDIpIEFORCAoYiA9IDEpKQorKDIgcm93cykKKworLS0gQ2hlY2sgdGhh dCBhdHRyX25lZWRlZCBpcyB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBzZWxmLWpvaW4gcmVt b3ZhbC4gSW4gdGhpcworLS0gdGVzdCwgdGhlIGpvaW4gb2YgajEgd2l0aCBqMiBpcyByZW1v dmVkLiBrMS5iIGlzIHJlcXVpcmVkIGF0IGVpdGhlciBqMSBvciBqMi4KKy0tIElmIHRoaXMg aW5mbyBpcyBsb3N0LCBqb2luIHRhcmdldGxpc3QgZm9yIChrMSwgazIpIHdpbGwgbm90IGNv bnRhaW4gazEuYi4KKy0tIFVzZSBpbmRleCBzY2FuIGZvciBrMSBzbyB0aGF0IHdlIGRvbid0 IGdldCAnYicgZnJvbSBwaHlzaWNhbCB0bGlzdCB1c2VkIGZvcgorLS0gc2Vxc2Nhbi4gQWxz byBkaXNhYmxlIHJlb3JkZXJpbmcgb2Ygam9pbnMgYmVjYXVzZSB0aGlzIHRlc3QgZGVwZW5k cyBvbiBhCistLSBwYXJ0aWN1bGFyIGpvaW4gdHJlZS4KK2NyZWF0ZSB0YWJsZSBzayAoYSBp bnQsIGIgaW50KTsKK2NyZWF0ZSBpbmRleCBvbiBzayhhKTsKK3NldCBqb2luX2NvbGxhcHNl X2xpbWl0IHRvIDE7CitzZXQgZW5hYmxlX3NlcXNjYW4gdG8gb2ZmOworZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgMSBmcm9tCisJKHNrIGsxIGpvaW4gc2sgazIgb24gazEuYSA9IGsy LmEpCisJam9pbiAoc2ogajEgam9pbiBzaiBqMiBvbiBqMS5hID0gajIuYSkgb24gajEuYiA9 IGsxLmI7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChrMS5iID0gajIuYikK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2tf YV9pZHggb24gc2sgazEKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2tf YV9pZHggb24gc2sgazIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhID0gazEuYSkK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pf YV9rZXkgb24gc2ogajIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhIElTIE5PVCBO VUxMKQorKDkgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgMSBmcm9tCisJ KHNrIGsxIGpvaW4gc2sgazIgb24gazEuYSA9IGsyLmEpCisJam9pbiAoc2ogajEgam9pbiBz aiBqMiBvbiBqMS5hID0gajIuYSkgb24gajIuYiA9IGsxLmI7CisgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgSm9pbiBGaWx0ZXI6IChrMS5iID0gajIuYikKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2tfYV9pZHggb24gc2sgazEKKyAgICAgICAg IC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2tfYV9pZHggb24gc2sgazIKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChhID0gazEuYSkKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfYV9rZXkgb24gc2ogajIKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChhIElTIE5PVCBOVUxMKQorKDkgcm93cykKKworcmVzZXQg am9pbl9jb2xsYXBzZV9saW1pdDsKK3Jlc2V0IGVuYWJsZV9zZXFzY2FuOworLS0gQ2hlY2sg dGhhdCBjbGF1c2VzIGZyb20gdGhlIGpvaW4gZmlsdGVyIGxpc3QgaXMgbm90IGxvc3Qgb24g dGhlIHNlbGYtam9pbiByZW1vdmFsCitDUkVBVEUgVEFCTEUgZW1wMSAoIGlkIFNFUklBTCBQ UklNQVJZIEtFWSBOT1QgTlVMTCwgY29kZSBpbnQpOworZXhwbGFpbiAodmVyYm9zZSwgY29z dHMgb2ZmKQorU0VMRUNUICogRlJPTSBlbXAxIGUxLCBlbXAxIGUyIFdIRVJFIGUxLmlkID0g ZTIuaWQgQU5EIGUyLmNvZGUgPD4gZTEuY29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBwdWJsaWMuZW1wMSBlMgorICAgT3V0cHV0OiBlMi5pZCwgZTIuY29kZSwgZTIuaWQsIGUy LmNvZGUKKyAgIEZpbHRlcjogKChlMi5pZCBJUyBOT1QgTlVMTCkgQU5EIChlMi5jb2RlIDw+ IGUyLmNvZGUpKQorKDMgcm93cykKKworLS0gV2UgY2FuIHJlbW92ZSB0aGUgam9pbiBldmVu IGlmIHdlIGZpbmQgdGhlIGpvaW4gY2FuJ3QgZHVwbGljYXRlIHJvd3MgYW5kCistLSB0aGUg YmFzZSBxdWFscyBvZiBlYWNoIHNpZGUgYXJlIGRpZmZlcmVudC4gIEluIHRoZSBmb2xsb3dp bmcgY2FzZSB3ZSBlbmQgdXAKKy0tIG1vdmluZyBxdWFscyBvdmVyIHRvIHMxIHRvIG1ha2Ug aXQgc28gaXQgY2FuJ3QgbWF0Y2ggYW55IHJvd3MuCitjcmVhdGUgdGFibGUgc2woYSBpbnQs IGIgaW50LCBjIGludCk7CitjcmVhdGUgdW5pcXVlIGluZGV4IG9uIHNsKGEsIGIpOwordmFj dXVtIGFuYWx5emUgc2w7CistLSBCb3RoIHNpZGVzIGFyZSB1bmlxdWUsIGJ1dCBiYXNlIHF1 YWxzIGFyZSBkaWZmZXJlbnQKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2wgdDEsIHNsIHQyIHdoZXJlIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gMSBhbmQgdDIuYiA9 IDI7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQxLmEgPSB0 Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNsIHQxCisgICAgICAgICBGaWx0ZXI6IChiID0g MSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MgorICAgICAgICAgRmlsdGVyOiAoYiA9IDIp CisoNiByb3dzKQorCistLSBDaGVjayBOdWxsVGVzdCBpbiBiYXNlcmVzdHJpY3RpbmZvIGxp c3QKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3 aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEuYiA9IDEgYW5kIHQyLmIgPSAyCisgIGFuZCB0MS5j IElTIE5PVCBOVUxMIGFuZCB0Mi5jIElTIE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBO VUxMIGFuZCB0MS5iIElTIE5PVCBOVUxMCisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0 Mi5hIElTIE5PVCBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6ICh0MS5hID0gdDIuYSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MQorICAg ICAgICAgRmlsdGVyOiAoKGMgSVMgTk9UIE5VTEwpIEFORCAoYiBJUyBOT1QgTlVMTCkgQU5E IChhIElTIE5PVCBOVUxMKSBBTkQgKGIgPSAxKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0 MgorICAgICAgICAgRmlsdGVyOiAoKGMgSVMgTk9UIE5VTEwpIEFORCAoYiBJUyBOT1QgTlVM TCkgQU5EIChhIElTIE5PVCBOVUxMKSBBTkQgKGIgPSAyKSkKKyg2IHJvd3MpCisKK2V4cGxh aW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3 aGVyZSB0MS5iID0gdDIuYiBhbmQgdDIuYSA9IDMgYW5kIHQxLmEgPSAzCisgIGFuZCB0MS5j IElTIE5PVCBOVUxMIGFuZCB0Mi5jIElTIE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBO VUxMIGFuZCB0MS5iIElTIE5PVCBOVUxMCisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0 Mi5hIElTIE5PVCBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBwdWJsaWMuc2wgdDIKKyAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYywgdDIuYSwg dDIuYiwgdDIuYworICAgRmlsdGVyOiAoKHQyLmMgSVMgTk9UIE5VTEwpIEFORCAodDIuYiBJ UyBOT1QgTlVMTCkgQU5EICh0Mi5hIElTIE5PVCBOVUxMKSBBTkQgKHQyLmEgPSAzKSkKKygz IHJvd3MpCisKKy0tIEpvaW4gcXVhbCBpc24ndCBtZXJnZWpvaW5hYmxlLCBidXQgaW5uZXIg aXMgdW5pcXVlLgorZXhwbGFpbiAoQ09TVFMgT0ZGKQorU0VMRUNUIG4yLmEgRlJPTSBzaiBu MSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBuMi5hIEFORCBuMi5hID0gMTsKKyAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChuMS5hIDw+IG4yLmEpCisgICAtPiAg U2VxIFNjYW4gb24gc2ogbjIKKyAgICAgICAgIEZpbHRlcjogKGEgPSAxKQorICAgLT4gIFNl cSBTY2FuIG9uIHNqIG4xCisoNSByb3dzKQorCitleHBsYWluIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NCisJKFNFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNqIG4yIFdIRVJFIG4xLmEg PD4gbjIuYSkgcTAsIHNsCitXSEVSRSBxMC5hID0gMTsKKyAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgSm9pbiBGaWx0ZXI6IChuMS5hIDw+IG4yLmEpCisgICAtPiAgTmVzdGVkIExv b3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHNqIG4yCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0gMSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBzaiBuMQorKDcgcm93cykKKworLS0KKy0tLS0gT25seSBvbmUgc2lkZSBpcyB1 bnFpdWUKKy0tc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIgd2hlcmUgdDEuYSA9IHQyLmEg YW5kIHQxLmIgPSAxOworLS1zZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0MiB3aGVyZSB0MS5h ID0gdDIuYSBhbmQgdDIuYiA9IDE7CistLQorLS0tLSBTZXZlcmFsIHVuaXF1ZXMgaW5kZXhl cyBtYXRjaCwgYW5kIHdlIHNlbGVjdCBhIGRpZmZlcmVudCBvbmUKKy0tLS0gZm9yIGVhY2gg c2lkZSwgc28gdGhlIGpvaW4gaXMgbm90IHJlbW92ZWQKKy0tY3JlYXRlIHRhYmxlIHNtKGEg aW50IHVuaXF1ZSwgYiBpbnQgdW5pcXVlLCBjIGludCB1bmlxdWUpOworLS1leHBsYWluIChj b3N0cyBvZmYpCistLXNlbGVjdCAqIGZyb20gc20gbSwgc20gbiB3aGVyZSBtLmEgPSBuLmIg YW5kIG0uYyA9IG4uYzsKKy0tZXhwbGFpbiAoY29zdHMgb2ZmKQorLS1zZWxlY3QgKiBmcm9t IHNtIG0sIHNtIG4gd2hlcmUgbS5hID0gbi5jIGFuZCBtLmIgPSBuLmI7CistLWV4cGxhaW4g KGNvc3RzIG9mZikKKy0tc2VsZWN0ICogZnJvbSBzbSBtLCBzbSBuIHdoZXJlIG0uYyA9IG4u YiBhbmQgbS5hID0gbi5hOworLS0gQ2hlY2sgb3B0aW1pemF0aW9uIGRpc2FibGluZyBpZiBp dCB3aWxsIHZpb2xhdGUgc3BlY2lhbCBqb2luIGNvbmRpdGlvbnMuCistLSBUd28gaWRlbnRp Y2FsIGpvaW5lZCByZWxhdGlvbnMgc2F0aXNmaWVzIHNlbGYgam9pbiByZW1vdmFsIGNvbmRp dGlvbnMgYnV0CistLSBzdGF5IGluIGRpZmZlcmVudCBzcGVjaWFsIGpvaW4gaW5mb3MuCitD UkVBVEUgVEFCTEUgc2pfdDEgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNq X3QyIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90MyAoaWQgc2VyaWFs LCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDQgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JF QVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MyBVU0lORyBidHJlZSAoYSxpZCk7CitDUkVBVEUg VU5JUVVFIElOREVYIE9OIHNqX3QyIFVTSU5HIGJ0cmVlIChpZCk7CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqX3QxCitKT0lOICgKKwlTRUxFQ1Qgc2pfdDIuaWQg QVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBUUlVFIEZS T00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0gc2pfdDIu aWQKKwkJKQorCSkgdDJ0M3Q0CitPTiBzal90MS5pZCA9IHQydDN0NC5pZAorSk9JTiAoCisJ U0VMRUNUIHNqX3QyLmlkIEFTIGlkIEZST00gc2pfdDIKKwlXSEVSRSBFWElTVFMKKwkJKAor CQlTRUxFQ1QgVFJVRSBGUk9NIHNqX3QzLHNqX3Q0IFdIRVJFIHNqX3QzLmEgPSAxIEFORCBz al90My5pZCA9IHNqX3QyLmlkCisJCSkKKwkpIF90MnQzdDQKK09OIHNqX3QxLmlkID0gX3Qy dDN0NC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChz al90My5pZCA9IHNqX3QxLmlkKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2lu IEZpbHRlcjogKHNqX3QzLmlkID0gc2pfdDIuaWQpCisgICAgICAgICAtPiAgTmVzdGVkIExv b3AgU2VtaSBKb2luCisgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHNqX3QzLmlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBzal90NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgQml0bWFwIEhlYXAgU2NhbiBvbiBzal90MworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoYSA9IDEpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNj YW4gb24gc2pfdDNfYV9pZF9pZHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhID0gMSkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2pfdDJfaWRfaWR4IG9uIHNqX3Qy IHNqX3QyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9 IHNqX3QzLmlkKQorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAg ICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNqX3QzX2FfaWRfaWR4IG9u IHNqX3QzIHNqX3QzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 ICgoYSA9IDEpIEFORCAoaWQgPSBzal90My5pZCkpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gc2pfdDQgc2pfdDRfMQorICAgICAgICAgLT4gIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzal90Ml9pZF9pZHggb24gc2pfdDIKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHNqX3QyXzEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gc2pfdDEKKygy NCByb3dzKQorCistLQorLS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0tCistLSBU T0RPOiBXaHkgdGhpcyBzZWxlY3QgcmV0dXJucyB0d28gY29pZXMgb2YgY3RpZCBmaWVsZD8g U2hvdWxkIHdlIGZpeCBpdD8KK0VYUExBSU4gKENPU1RTIE9GRikgLS0gQm90aCBzaWRlcyBo YXZlIGV4cGxpY2l0IExvY2tSb3dzIG1hcmtzCitTRUxFQ1QgYTEuYSBGUk9NIHNqIGExLHNq IGEyIFdIRVJFIChhMS5hPWEyLmEpIEZPUiBVUERBVEU7CisgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExv Y2tSb3dzCisgICAtPiAgU2VxIFNjYW4gb24gc2ogYTIKKyAgICAgICAgIEZpbHRlcjogKGEg SVMgTk9UIE5VTEwpCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpIC0tIEEgUm93 TWFyayBleGlzdHMgZm9yIHRoZSB0YWJsZSBiZWluZyBrZXB0CitVUERBVEUgc2ogc3EgU0VU IGIgPSAxIEZST00gc2ogYXMgc3ogV0hFUkUgc3EuYSA9IHN6LmE7CisgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFVwZGF0ZSBvbiBzaiBzcQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHN6CisgICAgICAg ICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworQ1JFQVRFIFJVTEUgc2pf ZGVsX3J1bGUgQVMgT04gREVMRVRFIFRPIHNqCisgIERPIElOU1RFQUQKKyAgICBVUERBVEUg c2ogU0VUIGEgPSAxIFdIRVJFIGEgPSBvbGQuYTsKK0VYUExBSU4gKENPU1RTIE9GRikgREVM RVRFIEZST00gc2o7IC0tIEEgUm93TWFyayBleGlzdHMgZm9yIHRoZSB0YWJsZSBiZWluZyBk cm9wcGVkCisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBzagorICAgLT4gIFNlcSBTY2Fu IG9uIHNqCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDMgcm93cykKKwor RFJPUCBSVUxFIHNqX2RlbF9ydWxlIE9OIHNqIENBU0NBREU7CityZXNldCBlbmFibGVfaGFz aGpvaW47CityZXNldCBlbmFibGVfbWVyZ2Vqb2luOwogLS0KIC0tIFRlc3QgaGludHMgZ2l2 ZW4gb24gaW5jb3JyZWN0IGNvbHVtbiByZWZlcmVuY2VzIGFyZSB1c2VmdWwKIC0tCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDRlNzc1YWYxNzUuLmM3 MzRkNWVjYTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBA IC0xMjksMTAgKzEyOSwxMSBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRp bmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3BhcnRpdGlvbl9wcnVu aW5nICAgICAgIHwgb24KICBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgfCBvZmYK ICBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luICAgICAgfCBvZmYKKyBlbmFibGVfc2VsZl9q b2luX3JlbW92YWwgICAgICAgfCBvbgogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAg ICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf dGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgotKDIxIHJvd3MpCisoMjIgcm93cykKIAog LS0gVGVzdCB0aGF0IHRoZSBwZ190aW1lem9uZV9uYW1lcyBhbmQgcGdfdGltZXpvbmVfYWJi cmV2cyB2aWV3cyBhcmUKIC0tIG1vcmUtb3ItbGVzcyB3b3JraW5nLiAgV2UgY2FuJ3QgdGVz dCB0aGVpciBjb250ZW50cyBpbiBhbnkgZ3JlYXQgZGV0YWlsCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2VxdWl2Y2xhc3Muc3FsCmluZGV4IDI0N2IwYTMxMDUuLjc3ZGQ5NjRlYmYgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCkBAIC0yNTksNiArMjU5LDIyIEBAIGRyb3Ag dXNlciByZWdyZXNzX3VzZXJfZWN0ZXN0OwogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxl Y3QgKiBmcm9tIHRlbmsxIHdoZXJlIHVuaXF1ZTEgPSB1bmlxdWUxIGFuZCB1bmlxdWUyID0g dW5pcXVlMjsKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3MgYXJlIHByb2Nlc3NlZCBjb3Jy ZWN0bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0gRGlzYWJsZSBtZXJnZSBqb2lu cyBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91dCBtaXNzaW5nIGNvbW11dGF0 b3IuCistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRoZSBqb2luIGNsYXVzZSwgYmVj YXVzZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhlIEVDLgorc2V0IGVuYWJsZV9t ZXJnZWpvaW4gdG8gb2ZmOworCitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCAqIGZy b20gZWMwIG0gam9pbiBlYzAgbiBvbiBtLmZmID0gbi5mZgorICBqb2luIGVjMSBwIG9uIG0u ZmYgKyBuLmZmID0gcC5mMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBm cm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBw LmYxOjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFsaWFzMTsKKworcmVzZXQgZW5hYmxl X21lcmdlam9pbjsKKwogLS0gdGhpcyBjb3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBh dCBwcmVzZW50CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEg d2hlcmUgdW5pcXVlMSA9IHVuaXF1ZTEgb3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pvaW4uc3FsCmluZGV4IDI3ZTdlNzQxYTEuLjVkODBhZjk3ZGMgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pvaW4uc3FsCkBAIC0xNzkzLDYgKzE3OTMsMzM1IEBAIHNlbGVjdCAqIGZyb20KIHNl bGVjdCAqIGZyb20KICAgaW50OF90YmwgeCBqb2luIChpbnQ0X3RibCB4IGNyb3NzIGpvaW4g aW50NF90YmwgeShmZikpIGogb24gcTEgPSBmMTsgLS0gb2sKIAorLS0KKy0tIHRlc3QgdGhh dCBzZW1pLSBvciBpbm5lciBzZWxmLWpvaW5zIG9uIGEgdW5pcXVlIGNvbHVtbiBhcmUgcmVt b3ZlZAorLS0KKworLS0gZW5hYmxlIG9ubHkgbmVzdGxvb3AgdG8gZ2V0IG1vcmUgcHJlZGlj dGFibGUgcGxhbnMKK3NldCBlbmFibGVfaGFzaGpvaW4gdG8gb2ZmOworc2V0IGVuYWJsZV9t ZXJnZWpvaW4gdG8gb2ZmOworCitjcmVhdGUgdGFibGUgc2ogKGEgaW50IHVuaXF1ZSwgYiBp bnQsIGMgaW50IHVuaXF1ZSk7CitpbnNlcnQgaW50byBzaiB2YWx1ZXMgKDEsIG51bGwsIDIp LCAobnVsbCwgMiwgbnVsbCksICgyLCAxLCAxKTsKK2FuYWx5emUgc2o7CisKKy0tIFRyaXZp YWwgc2VsZi1qb2luIGNhc2UuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC4qIGZy b20gc2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CitzZWxl Y3QgcC4qIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAt IDE7CisKKy0tIFNlbGYtam9pbiByZW1vdmFsIHBlcmZvcm1zIGFmdGVyIGEgc3VicXVlcnkg cHVsbC11cCBwcm9jZXNzIGFuZCBjb3VsZCByZW1vdmUKKy0tIHN1Y2gga2luZCBvZiBzZWxm LWpvaW4gdG9vLiBDaGVjayB0aGlzIG9wdGlvbi4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3Nl bGVjdCAqIGZyb20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIHNqIHEKKwkJ CQl3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA8IDEwKTsKK3NlbGVjdCAqIGZyb20gc2ogcCB3 aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEu YiA8IDEwKTsKKworLS0gRG9uJ3QgcmVtb3ZlIHNlbGYtam9pbiBmb3IgdGhlIGNhc2Ugb2Yg ZXF1YWxpdHkgb2YgdHdvIGRpZmZlcmVudCB1bmlxdWUgY29sdW1ucy4KK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyIHdoZXJlIHQxLmEgPSB0Mi5j IGFuZCB0MS5iIGlzIG5vdCBudWxsOworCistLSBEZWdlbmVyYXRlZCBjYXNlLgorZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbQorCShzZWxlY3QgYSBhcyB4IGZyb20gc2og d2hlcmUgZmFsc2UpIGFzIHExLAorCShzZWxlY3QgYSBhcyB5IGZyb20gc2ogd2hlcmUgZmFs c2UpIGFzIHEyCit3aGVyZSBxMS54ID0gcTIueTsKKworLS0gV2UgY2FuJ3QgdXNlIGEgY3Jv c3MtRUMgZ2VuZXJhdGVkIHNlbGYgam9pbiBxdWFsIGJlY2F1c2Ugb2YgY3VycmVudCBsb2dp YyBvZgorLS0gdGhlIGdlbmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzIHJvdXRpbmUu CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxLCBzaiB0MiB3aGVy ZSB0MS5hID0gdDEuYiBhbmQgdDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hOworZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIsIHNqIHQzCit3aGVy ZSB0MS5hID0gdDEuYiBhbmQgdDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hCisJYW5kIHQx LmIgPSB0My5iIGFuZCB0My5iID0gdDMuYTsKKworLS0gRG91YmxlIHNlbGYtam9pbiByZW1v dmFsLgorLS0gVXNlIGEgY29uZGl0aW9uIG9uICJiICsgMSIsIG5vdCBvbiAiYiIsIGZvciB0 aGUgc2Vjb25kIGpvaW4sIHNvIHRoYXQKKy0tIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBpcyBk aWZmZXJlbnQgZnJvbSB0aGUgZmlyc3Qgb25lLCBhbmQgd2UgY2FuCistLSB0ZXN0IHRoZSBu b24tZWMgY29kZSBwYXRoLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBz aiB0MSBqb2luIHNqIHQyIG9uIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gdDIuYgorCWpvaW4g c2ogdDMgb24gdDIuYSA9IHQzLmEgYW5kIHQyLmIgKyAxID0gdDMuYiArIDE7CisKKy0tIHN1 YnNlbGVjdCB0aGF0IHJlZmVyZW5jZXMgdGhlIHJlbW92ZWQgcmVsYXRpb24KK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCB0MS5hLCAoc2VsZWN0IGEgZnJvbSBzaiB3aGVyZSBhID0g dDIuYSBhbmQgYSA9IHQxLmEpCitmcm9tIHNqIHQxLCBzaiB0Mgord2hlcmUgdDEuYSA9IHQy LmE7CisKKy0tIHNlbGYtam9pbiB1bmRlciBvdXRlciBqb2luCitleHBsYWluIChjb3N0cyBv ZmYpCitzZWxlY3QgKiBmcm9tIHNqIHggam9pbiBzaiB5IG9uIHguYSA9IHkuYQorbGVmdCBq b2luIGludDhfdGJsIHogb24geC5hID0gei5xMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQor c2VsZWN0ICogZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4LmEgPSB5LmEKK2xlZnQgam9pbiBp bnQ4X3RibCB6IG9uIHkuYSA9IHoucTE7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVD VCAqIEZST00gKAorICBTRUxFQ1QgdDEuKiwgdDIuYSBBUyBheCBGUk9NIHNqIHQxIEpPSU4g c2ogdDIKKyAgT04gKHQxLmEgPSB0Mi5hIEFORCB0MS5jKnQxLmMgPSB0Mi5jKzIgQU5EIHQy LmIgSVMgTlVMTCkKKykgQVMgcTEKK0xFRlQgSk9JTgorICAoU0VMRUNUIHQzLiogRlJPTSBz aiB0Mywgc2ogdDQgV0hFUkUgdDMuYyA9IHQ0LmMpIEFTIHEyCitPTiBxMS5heCA9IHEyLmE7 CisKKy0tIFRlc3QgdGhhdCBwbGFjZWhvbGRlcnMgYXJlIHVwZGF0ZWQgY29ycmVjdGx5IGFm dGVyIGpvaW4gcmVtb3ZhbAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSAo dmFsdWVzICgxKSkgeAorbGVmdCBqb2luIChzZWxlY3QgY29hbGVzY2UoeS5xMSwgMSkgZnJv bSBpbnQ4X3RibCB5CisJcmlnaHQgam9pbiBzaiBqMSBpbm5lciBqb2luIHNqIGoyIG9uIGox LmEgPSBqMi5hCisJb24gdHJ1ZSkgegorb24gdHJ1ZTsKKworLS0KKy0tIFNKUiBjb3JuZXIg Y2FzZTogdW5pcXVlbmVzcyBvZiBhbiBpbm5lciBpcyBbcGFydGlhbGx5XSBkZXJpdmVkIGZy b20KKy0tIGJhc2VyZXN0cmljdGluZm8gY2xhdXNlcy4KKy0tIFhYWDogV2UgcmVhbGx5IHNo b3VsZCBhbGxvdyBTSlIgZm9yIHRoZXNlIGNvcm5lciBjYXNlcz8KKy0tCisKK0lOU0VSVCBJ TlRPIHNqIFZBTFVFUyAoMywgMSwgMyk7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9u J3QgcmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9 IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMzsKK1NFTEVDVCAqIEZST00gc2ogajEs IHNqIGoyCitXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoyLmEgPSAzOyAt LSBSZXR1cm4gb25lIHJvdworCitleHBsYWluIChjb3N0cyBvZmYpIC0tIFJlbW92ZSBTSiwg ZGVmaW5lIHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorCVNFTEVDVCAqIEZST00gc2ogajEs IHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDI7CitT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEg PSAyIEFORCBqMi5hID0gMjsgLS0gUmV0dXJuIG9uZSByb3cKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisg IEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1 ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAo MCkpLzE1ICsgMyk6OmludCA9IGoyLmEKKzsgLS0gUmVtb3ZlIFNKLCBkZWZpbmUgdW5pcXVl bmVzcyBieSBhIGNvbnN0YW50IGV4cHJlc3Npb24KK1NFTEVDVCAqIEZST00gc2ogajEsIHNq IGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgajEuYSA9IChFWFRSQUNUKERPVyBGUk9N IGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERP VyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSBqMi5hCis7IC0t IFJldHVybiBvbmUgcm93CisKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gUmVtb3ZlIFNKCisJ U0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEg PSAxIEFORCBqMi5hID0gMTsKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBq MS5iID0gajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEgPSAxOyAtLSBSZXR1cm4gbm8gcm93 cworCitleHBsYWluIChjb3N0cyBvZmYpIC0tIFNodWZmbGUgYSBjbGF1c2UuIFJlbW92ZSBT SgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAx ID0gajEuYSBBTkQgajIuYSA9IDE7CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hF UkUgajEuYiA9IGoyLmIgQU5EIDEgPSBqMS5hIEFORCBqMi5hID0gMTsgLS0gUmV0dXJuIG5v IHJvd3MKKworLS0gRnVuY3Rpb25hbCBpbmRleAorQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal9m bl9pZHggT04gc2ooKGEgKiBhKSk7CitleHBsYWluIChjb3N0cyBvZmYpIC0tIFJlbW92ZSBT SgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5E IGoxLmEqajEuYSA9IDEgQU5EIGoyLmEqajIuYSA9IDE7CitleHBsYWluIChjb3N0cyBvZmYp IC0tIERvbid0IHJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hF UkUgajEuYiA9IGoyLmIgQU5EIGoxLmEqajEuYSA9IDEgQU5EIGoyLmEqajIuYSA9IDI7CitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUg ajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3Vy cmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZS T00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpCis7 IC0tIFJlc3RyaWN0aW9uIGNvbnRhaW5zIGV4cHJlc3Npb25zIGluIGJvdGggc2lkZXMsIFJl bW92ZSBTSi4KK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIu YgorICBBTkQgKGoxLmEqajEuYSkgPSAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVz dGFtcCgwKSkvMTUgKyAzKTo6aW50CisgIEFORCAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50 X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50ID0gKGoyLmEqajIuYSkKKzsgLS0gRW1wdHkg c2V0IG9mIHJvd3Mgc2hvdWxkIGJlIHJldHVybmVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChq MS5hKmoxLmEpID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkvMyAr IDMpOjppbnQgPSAoajIuYSpqMi5hKQorOyAtLSBSZXN0cmljdGlvbiBjb250YWlucyB2b2xh dGlsZSBmdW5jdGlvbiAtIGRpc2FibGUgU0pSIGZlYXR1cmUuCitTRUxFQ1QgKiBGUk9NIHNq IGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmMvMykgPSAo cmFuZG9tKCkvMyArIDMpOjppbnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6OmludCA9IChq Mi5hKmoyLmMvMykKKzsgLS0gUmV0dXJuIG9uZSByb3cKKworLS0gTXVsdGlwbGUgZmlsdGVy cworQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeDEgT04gc2ooYSxiLGMpOworZXhw bGFpbiAoY29zdHMgb2ZmKSAtLSBSZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBz aiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajEuYyA9IDMgQU5E IGoyLmEgPSAyIEFORCAzID0gajIuYzsKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3Qg cmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBqMS5iID0g ajIuYiBBTkQgMiA9IGoxLmEgQU5EIGoxLmMgPSAzIEFORCBqMi5hID0gMSBBTkQgMyA9IGoy LmM7CisKK0NSRUFURSBVTklRVUUgSU5ERVggc2pfdGVtcF9pZHggT04gc2ooYSxiKTsKK2V4 cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBz aiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyOworZXhwbGFpbiAo Y29zdHMgb2ZmKSAtLSBEb24ndCByZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBz aiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgMiA9IGoyLmE7CitleHBsYWluIChjb3N0cyBv ZmYpIC0tIERvbid0IHJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdI RVJFIGoxLmIgPSBqMi5iIEFORCAoajEuYSA9IDEgT1IgajIuYSA9IDEpOworRFJPUCBJTkRF WCBzal9mbl9pZHgsIHNqX3RlbXBfaWR4MSwgc2pfdGVtcF9pZHg7CisKKy0tIFRlc3QgdGhh dCBPUiBwcmVkaWNhdGVkIGFyZSB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92 YWwKK0NSRUFURSBUQUJMRSB0YWJfd2l0aF9mbGFnICggaWQgSU5UIFBSSU1BUlkgS0VZLCBp c19mbGFnIFNNQUxMSU5UKTsKK0NSRUFURSBJTkRFWCBpZHhfdGVzdF9pc19mbGFnIE9OIHRh Yl93aXRoX2ZsYWcgKGlzX2ZsYWcpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIENP VU5UKCopIEZST00gdGFiX3dpdGhfZmxhZworV0hFUkUKKwkoaXNfZmxhZyBJUyBOVUxMIE9S IGlzX2ZsYWcgPSAwKQorCUFORCBpZCBJTiAoU0VMRUNUIGlkIEZST00gdGFiX3dpdGhfZmxh ZyBXSEVSRSBpZCBJTiAoMiwgMykpOworRFJPUCBUQUJMRSB0YWJfd2l0aF9mbGFnOworCist LSBIQVZJTkcgY2xhdXNlCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC5iIGZyb20g c2ogcCBqb2luIHNqIHEgb24gcC5hID0gcS5hIGdyb3VwIGJ5IHAuYiBoYXZpbmcgc3VtKHAu YSkgPSAxOworCistLSB1cGRhdGUgbGF0ZXJhbCByZWZlcmVuY2VzIGFuZCByYW5nZSB0YWJs ZSBlbnRyeSByZWZlcmVuY2UKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVj dCAxIGZyb20gKHNlbGVjdCB4LiogZnJvbSBzaiB4LCBzaiB5IHdoZXJlIHguYSA9IHkuYSkg cSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSwgcS5hKSBncyhpKTsKKworZXhwbGFp biAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSAoc2VsZWN0IHkuKiBmcm9t IHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAorICBsYXRlcmFsIGdlbmVyYXRlX3Nl cmllcygxLCBxLmEpIGdzKGkpOworCistLSBUZXN0IHRoYXQgYSBub24tRUMtZGVyaXZlZCBq b2luIGNsYXVzZSBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LiBVc2UgYW4KKy0tIG91dGVyIGpv aW4gc28gdGhhdCB3ZSBjYW4ndCBmb3JtIGFuIEVDLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgKiBmcm9tIHNqIHAgam9pbiBzaiBxIG9uIHAuYSA9IHEuYQorICBsZWZ0IGpvaW4g c2ogciBvbiBwLmEgKyBxLmEgPSByLmE7CisKKy0tIEZJWE1FIHRoaXMgY29uc3RhbnQgZmFs c2UgZmlsdGVyIGRvZXNuJ3QgbG9vayBnb29kLiBTaG91bGQgd2UgbWVyZ2UKKy0tIGVxdWl2 YWxlbmNlIGNsYXNzZXM/CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNq IHAsIHNqIHEgd2hlcmUgcC5hID0gcS5hIGFuZCBwLmIgPSAxIGFuZCBxLmIgPSAyOworCist LSBDaGVjayB0aGF0IGF0dHJfbmVlZGVkIGlzIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIHNl bGYtam9pbiByZW1vdmFsLiBJbiB0aGlzCistLSB0ZXN0LCB0aGUgam9pbiBvZiBqMSB3aXRo IGoyIGlzIHJlbW92ZWQuIGsxLmIgaXMgcmVxdWlyZWQgYXQgZWl0aGVyIGoxIG9yIGoyLgor LS0gSWYgdGhpcyBpbmZvIGlzIGxvc3QsIGpvaW4gdGFyZ2V0bGlzdCBmb3IgKGsxLCBrMikg d2lsbCBub3QgY29udGFpbiBrMS5iLgorLS0gVXNlIGluZGV4IHNjYW4gZm9yIGsxIHNvIHRo YXQgd2UgZG9uJ3QgZ2V0ICdiJyBmcm9tIHBoeXNpY2FsIHRsaXN0IHVzZWQgZm9yCistLSBz ZXFzY2FuLiBBbHNvIGRpc2FibGUgcmVvcmRlcmluZyBvZiBqb2lucyBiZWNhdXNlIHRoaXMg dGVzdCBkZXBlbmRzIG9uIGEKKy0tIHBhcnRpY3VsYXIgam9pbiB0cmVlLgorY3JlYXRlIHRh YmxlIHNrIChhIGludCwgYiBpbnQpOworY3JlYXRlIGluZGV4IG9uIHNrKGEpOworc2V0IGpv aW5fY29sbGFwc2VfbGltaXQgdG8gMTsKK3NldCBlbmFibGVfc2Vxc2NhbiB0byBvZmY7Citl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBv biBrMS5hID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5h KSBvbiBqMS5iID0gazEuYjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IDEgZnJvbQor CShzayBrMSBqb2luIHNrIGsyIG9uIGsxLmEgPSBrMi5hKQorCWpvaW4gKHNqIGoxIGpvaW4g c2ogajIgb24gajEuYSA9IGoyLmEpIG9uIGoyLmIgPSBrMS5iOworcmVzZXQgam9pbl9jb2xs YXBzZV9saW1pdDsKK3Jlc2V0IGVuYWJsZV9zZXFzY2FuOworCistLSBDaGVjayB0aGF0IGNs YXVzZXMgZnJvbSB0aGUgam9pbiBmaWx0ZXIgbGlzdCBpcyBub3QgbG9zdCBvbiB0aGUgc2Vs Zi1qb2luIHJlbW92YWwKK0NSRUFURSBUQUJMRSBlbXAxICggaWQgU0VSSUFMIFBSSU1BUlkg S0VZIE5PVCBOVUxMLCBjb2RlIGludCk7CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYp CitTRUxFQ1QgKiBGUk9NIGVtcDEgZTEsIGVtcDEgZTIgV0hFUkUgZTEuaWQgPSBlMi5pZCBB TkQgZTIuY29kZSA8PiBlMS5jb2RlOworCistLSBXZSBjYW4gcmVtb3ZlIHRoZSBqb2luIGV2 ZW4gaWYgd2UgZmluZCB0aGUgam9pbiBjYW4ndCBkdXBsaWNhdGUgcm93cyBhbmQKKy0tIHRo ZSBiYXNlIHF1YWxzIG9mIGVhY2ggc2lkZSBhcmUgZGlmZmVyZW50LiAgSW4gdGhlIGZvbGxv d2luZyBjYXNlIHdlIGVuZCB1cAorLS0gbW92aW5nIHF1YWxzIG92ZXIgdG8gczEgdG8gbWFr ZSBpdCBzbyBpdCBjYW4ndCBtYXRjaCBhbnkgcm93cy4KK2NyZWF0ZSB0YWJsZSBzbChhIGlu dCwgYiBpbnQsIGMgaW50KTsKK2NyZWF0ZSB1bmlxdWUgaW5kZXggb24gc2woYSwgYik7Cit2 YWN1dW0gYW5hbHl6ZSBzbDsKKworLS0gQm90aCBzaWRlcyBhcmUgdW5pcXVlLCBidXQgYmFz ZSBxdWFscyBhcmUgZGlmZmVyZW50CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tIHNsIHQxLCBzbCB0MiB3aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEuYiA9IDEgYW5kIHQy LmIgPSAyOworCistLSBDaGVjayBOdWxsVGVzdCBpbiBiYXNlcmVzdHJpY3RpbmZvIGxpc3QK K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVy ZSB0MS5hID0gdDIuYSBhbmQgdDEuYiA9IDEgYW5kIHQyLmIgPSAyCisgIGFuZCB0MS5jIElT IE5PVCBOVUxMIGFuZCB0Mi5jIElTIE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxM IGFuZCB0MS5iIElTIE5PVCBOVUxMCisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5h IElTIE5PVCBOVUxMOworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSBzbCB0MSwgc2wgdDIKK3doZXJlIHQxLmIgPSB0Mi5iIGFuZCB0Mi5hID0gMyBhbmQg dDEuYSA9IDMKKyAgYW5kIHQxLmMgSVMgTk9UIE5VTEwgYW5kIHQyLmMgSVMgTk9UIE5VTEwK KyAgYW5kIHQyLmIgSVMgTk9UIE5VTEwgYW5kIHQxLmIgSVMgTk9UIE5VTEwKKyAgYW5kIHQx LmEgSVMgTk9UIE5VTEwgYW5kIHQyLmEgSVMgTk9UIE5VTEw7CisKKy0tIEpvaW4gcXVhbCBp c24ndCBtZXJnZWpvaW5hYmxlLCBidXQgaW5uZXIgaXMgdW5pcXVlLgorZXhwbGFpbiAoQ09T VFMgT0ZGKQorU0VMRUNUIG4yLmEgRlJPTSBzaiBuMSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBu Mi5hIEFORCBuMi5hID0gMTsKK2V4cGxhaW4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KwkoU0VMRUNUIG4yLmEgRlJPTSBzaiBuMSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBuMi5hKSBx MCwgc2wKK1dIRVJFIHEwLmEgPSAxOworCistLQorLS0tLSBPbmx5IG9uZSBzaWRlIGlzIHVu cWl1ZQorLS1zZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0MiB3aGVyZSB0MS5hID0gdDIuYSBh bmQgdDEuYiA9IDE7CistLXNlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyIHdoZXJlIHQxLmEg PSB0Mi5hIGFuZCB0Mi5iID0gMTsKKy0tCistLS0tIFNldmVyYWwgdW5pcXVlcyBpbmRleGVz IG1hdGNoLCBhbmQgd2Ugc2VsZWN0IGEgZGlmZmVyZW50IG9uZQorLS0tLSBmb3IgZWFjaCBz aWRlLCBzbyB0aGUgam9pbiBpcyBub3QgcmVtb3ZlZAorLS1jcmVhdGUgdGFibGUgc20oYSBp bnQgdW5pcXVlLCBiIGludCB1bmlxdWUsIGMgaW50IHVuaXF1ZSk7CistLWV4cGxhaW4gKGNv c3RzIG9mZikKKy0tc2VsZWN0ICogZnJvbSBzbSBtLCBzbSBuIHdoZXJlIG0uYSA9IG4uYiBh bmQgbS5jID0gbi5jOworLS1leHBsYWluIChjb3N0cyBvZmYpCistLXNlbGVjdCAqIGZyb20g c20gbSwgc20gbiB3aGVyZSBtLmEgPSBuLmMgYW5kIG0uYiA9IG4uYjsKKy0tZXhwbGFpbiAo Y29zdHMgb2ZmKQorLS1zZWxlY3QgKiBmcm9tIHNtIG0sIHNtIG4gd2hlcmUgbS5jID0gbi5i IGFuZCBtLmEgPSBuLmE7CisKKy0tIENoZWNrIG9wdGltaXphdGlvbiBkaXNhYmxpbmcgaWYg aXQgd2lsbCB2aW9sYXRlIHNwZWNpYWwgam9pbiBjb25kaXRpb25zLgorLS0gVHdvIGlkZW50 aWNhbCBqb2luZWQgcmVsYXRpb25zIHNhdGlzZmllcyBzZWxmIGpvaW4gcmVtb3ZhbCBjb25k aXRpb25zIGJ1dAorLS0gc3RheSBpbiBkaWZmZXJlbnQgc3BlY2lhbCBqb2luIGluZm9zLgor Q1JFQVRFIFRBQkxFIHNqX3QxIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBz al90MiAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDMgKGlkIHNlcmlh bCwgYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNqX3Q0IChpZCBzZXJpYWwsIGEgaW50KTsKKwor Q1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MyBVU0lORyBidHJlZSAoYSxpZCk7CitDUkVB VEUgVU5JUVVFIElOREVYIE9OIHNqX3QyIFVTSU5HIGJ0cmVlIChpZCk7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2pfdDEKK0pPSU4gKAorCVNFTEVDVCBzal90 Mi5pZCBBUyBpZCBGUk9NIHNqX3QyCisJV0hFUkUgRVhJU1RTCisJCSgKKwkJU0VMRUNUIFRS VUUgRlJPTSBzal90Myxzal90NCBXSEVSRSBzal90My5hID0gMSBBTkQgc2pfdDMuaWQgPSBz al90Mi5pZAorCQkpCisJKSB0MnQzdDQKK09OIHNqX3QxLmlkID0gdDJ0M3Q0LmlkCitKT0lO ICgKKwlTRUxFQ1Qgc2pfdDIuaWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUwor CQkoCisJCVNFTEVDVCBUUlVFIEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEg QU5EIHNqX3QzLmlkID0gc2pfdDIuaWQKKwkJKQorCSkgX3QydDN0NAorT04gc2pfdDEuaWQg PSBfdDJ0M3Q0LmlkOworCistLQorLS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0t CisKKy0tIFRPRE86IFdoeSB0aGlzIHNlbGVjdCByZXR1cm5zIHR3byBjb2llcyBvZiBjdGlk IGZpZWxkPyBTaG91bGQgd2UgZml4IGl0PworRVhQTEFJTiAoQ09TVFMgT0ZGKSAtLSBCb3Ro IHNpZGVzIGhhdmUgZXhwbGljaXQgTG9ja1Jvd3MgbWFya3MKK1NFTEVDVCBhMS5hIEZST00g c2ogYTEsc2ogYTIgV0hFUkUgKGExLmE9YTIuYSkgRk9SIFVQREFURTsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKSAtLSBBIFJvd01hcmsgZXhpc3RzIGZvciB0aGUgdGFibGUgYmVpbmcga2Vw dAorVVBEQVRFIHNqIHNxIFNFVCBiID0gMSBGUk9NIHNqIGFzIHN6IFdIRVJFIHNxLmEgPSBz ei5hOworCitDUkVBVEUgUlVMRSBzal9kZWxfcnVsZSBBUyBPTiBERUxFVEUgVE8gc2oKKyAg RE8gSU5TVEVBRAorICAgIFVQREFURSBzaiBTRVQgYSA9IDEgV0hFUkUgYSA9IG9sZC5hOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBERUxFVEUgRlJPTSBzajsgLS0gQSBSb3dNYXJrIGV4aXN0 cyBmb3IgdGhlIHRhYmxlIGJlaW5nIGRyb3BwZWQKK0RST1AgUlVMRSBzal9kZWxfcnVsZSBP TiBzaiBDQVNDQURFOworCityZXNldCBlbmFibGVfaGFzaGpvaW47CityZXNldCBlbmFibGVf bWVyZ2Vqb2luOworCiAtLQogLS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNvcnJlY3QgY29s dW1uIHJlZmVyZW5jZXMgYXJlIHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggYTRhNGUzNTZlNS4uYzYwYmIxMjQ1MSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTM2Miw2ICszNjIsNyBAQCBDYXRhbG9nSWQKIENhdGFsb2dJZE1hcEVu dHJ5CiBDYXRhbG9nSW5kZXhTdGF0ZQogQ2hhbmdlVmFyTm9kZXNfY29udGV4dAorQ2hhbmdl VmFybm9Db250ZXh0CiBDaGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0 YXRzRGF0YQpAQCAtMzc2OCw2ICszNzY5LDcgQEAgdW5pY29kZVN0eWxlQ29sdW1uRm9ybWF0 CiB1bmljb2RlU3R5bGVGb3JtYXQKIHVuaWNvZGVTdHlsZVJvd0Zvcm1hdAogdW5pY29kZV9s aW5lc3R5bGUKK1VuaXF1ZVJlbEluZm8KIHVuaXRfY29udmVyc2lvbgogdW5sb2dnZWRfcmVs YXRpb25fZW50cnkKIHV0Zl9sb2NhbF9jb252ZXJzaW9uX2Z1bmMKLS0gCjIuMzcuMgoK --------------O2NvYk00F938SKWfkBHyghCB--