From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7038 invoked by alias); 20 Apr 2014 19:05:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 6918 invoked by uid 89); 20 Apr 2014 19:05:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.2 required=5.0 tests=AWL,BAYES_00,SPF_PASS,URIBL_BLACK autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 4 recipients X-HELO: shepard.synsport.net Received: from mail.synsport.com (HELO shepard.synsport.net) (208.69.230.148) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Sun, 20 Apr 2014 19:05:09 +0000 Received: from [192.168.0.20] (unknown [130.255.19.191]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by shepard.synsport.net (Postfix) with ESMTP id 22B1D438EB; Sun, 20 Apr 2014 14:04:38 -0500 (CDT) Message-ID: <53541A34.7050908@marino.st> Date: Mon, 21 Apr 2014 04:41:00 -0000 From: John Marino User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: Jonathan Wakely CC: gcc-patches , Gerald Pfeifer , "manu at gcc dot gnu.org" , "Eric Botcazou (gnu.org)" , libstdc++ , binutils@sourceware.org, gdb-patches@sourceware.org Subject: Re: Contributing new gcc targets: i386-*-dragonfly and x86-64-*-dragonfly References: <5352D100.9040108@marino.st> In-Reply-To: Content-Type: multipart/mixed; boundary="------------020000080005020804090601" X-SW-Source: 2014-04/txt/msg01139.txt.bz2 This is a multi-part message in MIME format. --------------020000080005020804090601 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-length: 2329 On 4/20/2014 14:51, Jonathan Wakely wrote: > On 19 April 2014 20:39, John Marino wrote: >> Hello GCC developers, >> >> For the last few years, I have been maintaining a large set of patches >> that add support for the DragonFly BSD target and also complete Ada >> frontend support on all four major BSDs among other things. Before I >> can submit patches for Ada or testsuite cases, DragonFly must be a >> recognized, working target. The patches attached here will provide >> out-of-the-box support for the C, C++, Objective-C and Fortran frontends. > > Thanks for the patch - I only have a few general, minor comments. As > noted at http://gcc.gnu.org/lists.html C++ library patches should go > to the libstdc++ list as well as gcc-patches, so I've CC'd that list > (original mail and patch are at > http://gcc.gnu.org/ml/gcc-patches/2014-04/msg01128.html) > > Patches should not include generated files such as configure, as the > diffs don't always apply cleanly and the changes are implied by the > patches to files such as acinclude.m4 and configure.ac. The > regenerated versions should of course be committed, and the ChangeLog > should mention they are regenerated, as you've done. Thanks for your advice, Jonathan. I've updated the patch to remove the two "configure" file patches. I also removed an errant "-rpath" from the dragonfly.h specs that crept in from FreeBSD ports. I've attached the updated patch to this email. > > The changelog text should be correctly capitalised and sentences ended > with a period (e.g. "New target." and "New." not "New target" and > "new"). The individual ChangeLog entries at > http://leaf.dragonflybsd.org/~marino/gcc-df-target/changelog_entries/ > would generally be used as the commit message, grouped and prefixed by > the name of the sub-directory: > I have updated the six entry files at http://leaf.dragonflybsd.org/~marino/gcc-df-target/changelog_entries/ to conform to this style. I updated the proposed commit message accordingly: http://leaf.dragonflybsd.org/~marino/gcc-df-target/proposed_commit-msg.txt > > The libstdc++ changes are OK for trunk if the rest gets approved. Thanks! I see from the critique of another submitted patch that also touches liberty that I'm supposed to cross-post to gdb and binutils, so I've cc'd them as well. Regards, John --------------020000080005020804090601 Content-Type: text/plain; charset=windows-1252; name="patch-dragonfly-target.revA.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch-dragonfly-target.revA.txt" Content-length: 73900 LS0tIGdjYy9jb25maWcuZ2NjLm9yaWcKKysrIGdjYy9jb25maWcuZ2NjCkBA IC02NDMsNiArNjQzLDI2IEBACiAgICAgIiIgfCB5ZXMgfCBwb3NpeCkgdGhy ZWFkX2ZpbGU9J3Bvc2l4JyA7OwogICBlc2FjCiAgIDs7CisqLSotZHJhZ29u Zmx5KikKKyAgZ2FzPXllcworICBnbnVfbGQ9eWVzCisgIHRtYWtlX2ZpbGU9 InQtc2xpYmdjYyIKKyAgY2FzZSAke2VuYWJsZV90aHJlYWRzfSBpbgorICAg ICIiIHwgeWVzIHwgcG9zaXgpCisgICAgICB0aHJlYWRfZmlsZT0ncG9zaXgn CisgICAgICA7OworICAgIG5vIHwgZ25hdCB8IHNpbmdsZSkKKyAgICAgICMg TGV0IHRoZXNlIG5vbi1wb3NpeCB0aHJlYWQgc2VsZWN0aW9ucyBmYWxsIHRo cm91Z2ggaWYgcmVxdWVzdGVkCisgICAgICA7OworICAgICopCisgICAgICBl Y2hvICdVbmtub3duIHRocmVhZCBjb25maWd1cmF0aW9uIGZvciBEcmFnb25G bHkgQlNEJworICAgICAgZXhpdCAxCisgICAgICA7OworICBlc2FjCisgIGV4 dHJhX29wdGlvbnM9IiRleHRyYV9vcHRpb25zIHJwYXRoLm9wdCBkcmFnb25m bHkub3B0IgorICBkZWZhdWx0X3VzZV9jeGFfYXRleGl0PXllcworICB1c2Vf Z2NjX3N0ZGludD13cmFwCisgIDs7CiAqLSotZnJlZWJzZCopCiAgICMgVGhp cyBpcyB0aGUgZ2VuZXJpYyBFTEYgY29uZmlndXJhdGlvbiBvZiBGcmVlQlNE LiAgTGF0ZXIKICAgIyBtYWNoaW5lLXNwZWNpZmljIHNlY3Rpb25zIG1heSBy ZWZpbmUgYW5kIGFkZCB0byB0aGlzCkBAIC0xMzUyLDYgKzEzNzIsMTQgQEAK ICAgICB0bV9maWxlPSIke3RtX2ZpbGV9IGkzODYvdW5peC5oIGkzODYvYXR0 LmggZGJ4ZWxmLmggZWxmb3MuaCBuZXdsaWItc3RkaW50LmggaTM4Ni9pMzg2 ZWxmLmggaTM4Ni94ODYtNjQuaCBpMzg2L3Jkb3MuaCBpMzg2L3Jkb3M2NC5o IgogICAgIHRtYWtlX2ZpbGU9ImkzODYvdC1pMzg2ZWxmIHQtc3ZyNCIKICAg ICA7OworaVszNDU2N104Ni0qLWRyYWdvbmZseSopCisJdG1fZmlsZT0iJHt0 bV9maWxlfSBpMzg2L3VuaXguaCBpMzg2L2F0dC5oIGRieGVsZi5oIGVsZm9z LmggZHJhZ29uZmx5LmggZHJhZ29uZmx5LXN0ZGludC5oIGkzODYvZHJhZ29u Zmx5LmgiCisJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBpMzg2L3QtY3J0 c3R1ZmYiCisJOzsKK3g4Nl82NC0qLWRyYWdvbmZseSopCisJdG1fZmlsZT0i JHt0bV9maWxlfSBpMzg2L3VuaXguaCBpMzg2L2F0dC5oIGRieGVsZi5oIGVs Zm9zLmggZHJhZ29uZmx5LmggZHJhZ29uZmx5LXN0ZGludC5oIGkzODYveDg2 LTY0LmggaTM4Ni9kcmFnb25mbHkuaCIKKwl0bWFrZV9maWxlPSIke3RtYWtl X2ZpbGV9IGkzODYvdC1jcnRzdHVmZiIKKwk7OwogaVszNDU2N104Ni0qLWZy ZWVic2QqKQogCXRtX2ZpbGU9IiR7dG1fZmlsZX0gaTM4Ni91bml4LmggaTM4 Ni9hdHQuaCBkYnhlbGYuaCBlbGZvcy5oICR7ZmJzZF90bV9maWxlfSBpMzg2 L2ZyZWVic2QuaCIKIAk7OwpAQCAtNDEwOSw2ICs0MTM3LDggQEAKIAkJOzsK IAlpWzM0NTY3XTg2LSotbWluZ3cqIHwgeDg2XzY0LSotbWluZ3cqKQogCQk7 OworCWlbMzQ1NjddODYtKi1kcmFnb25mbHkqIHwgeDg2XzY0LSotZHJhZ29u Zmx5KikKKwkJOzsKIAlpWzM0NTY3XTg2LSotZnJlZWJzZCogfCB4ODZfNjQt Ki1mcmVlYnNkKikKIAkJOzsKIAlpYTY0Ki0qLWxpbnV4KikKLS0tIGdjYy9j b25maWd1cmUuYWMub3JpZworKysgZ2NjL2NvbmZpZ3VyZS5hYwpAQCAtNTEw MCw2ICs1MTAwLDEzIEBACiAgICAgICBnY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJh dGVfcGhkcj1ubwogICAgIGZpCiAgICAgOzsKKyAgKi0qLWRyYWdvbmZseSog fCAqLSotZnJlZWJzZCopCisgICAgaWYgZ3JlcCBkbF9pdGVyYXRlX3BoZHIg JHRhcmdldF9oZWFkZXJfZGlyL3N5cy9saW5rX2VsZi5oID4gL2Rldi9udWxs IDI+JjE7IHRoZW4KKyAgICAgIGdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZV9w aGRyPXllcworICAgIGVsc2UKKyAgICAgIGdjY19jdl90YXJnZXRfZGxfaXRl cmF0ZV9waGRyPW5vCisgICAgZmkKKyAgICA7OwogZXNhYwogR0NDX1RBUkdF VF9URU1QTEFURShbVEFSR0VUX0RMX0lURVJBVEVfUEhEUl0pCiBpZiB0ZXN0 IHgkZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlX3BoZHIgPSB4eWVzOyB0aGVu Ci0tLSAvZGV2L251bGwKKysrIGdjYy9jb25maWcvZHJhZ29uZmx5LXN0ZGlu dC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIERlZmluaXRpb25zIGZvciA8c3Rk aW50Lmg+IHR5cGVzIGZvciBEcmFnb25GbHkgc3lzdGVtcy4KKyAgIENvcHly aWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyAgIENvbnRyaWJ1dGVkIGJ5IEpvaG4gTWFyaW5vIDxnbnVnY2NAbWFyaW5v LnN0PgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVy IFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQg YWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0Mg UnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwor WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5U SU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjZGVmaW5lIFNJR19BVE9NSUNf VFlQRSAgICJpbnQiCisKKyNkZWZpbmUgSU5UOF9UWVBFICAgICAgICAgInNp Z25lZCBjaGFyIgorI2RlZmluZSBJTlQxNl9UWVBFICAgICAgICAic2hvcnQg aW50IgorI2RlZmluZSBJTlQzMl9UWVBFICAgICAgICAiaW50IgorI2RlZmlu ZSBJTlQ2NF9UWVBFICAgICAgICAoTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAi bG9uZyBpbnQiIDogImxvbmcgbG9uZyBpbnQiKQorI2RlZmluZSBVSU5UOF9U WVBFICAgICAgICAidW5zaWduZWQgY2hhciIKKyNkZWZpbmUgVUlOVDE2X1RZ UEUgICAgICAgInNob3J0IHVuc2lnbmVkIGludCIKKyNkZWZpbmUgVUlOVDMy X1RZUEUgICAgICAgInVuc2lnbmVkIGludCIKKyNkZWZpbmUgVUlOVDY0X1RZ UEUgICAgICAgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgdW5zaWdu ZWQgaW50IiA6ICJsb25nIGxvbmcgdW5zaWduZWQgaW50IikKKworI2RlZmlu ZSBJTlRfTEVBU1Q4X1RZUEUgICBJTlQ4X1RZUEUKKyNkZWZpbmUgSU5UX0xF QVNUMTZfVFlQRSAgSU5UMTZfVFlQRQorI2RlZmluZSBJTlRfTEVBU1QzMl9U WVBFICBJTlQzMl9UWVBFCisjZGVmaW5lIElOVF9MRUFTVDY0X1RZUEUgIElO VDY0X1RZUEUKKyNkZWZpbmUgVUlOVF9MRUFTVDhfVFlQRSAgVUlOVDhfVFlQ RQorI2RlZmluZSBVSU5UX0xFQVNUMTZfVFlQRSBVSU5UMTZfVFlQRQorI2Rl ZmluZSBVSU5UX0xFQVNUMzJfVFlQRSBVSU5UMzJfVFlQRQorI2RlZmluZSBV SU5UX0xFQVNUNjRfVFlQRSBVSU5UNjRfVFlQRQorCisjZGVmaW5lIElOVF9G QVNUOF9UWVBFICAgIElOVDMyX1RZUEUKKyNkZWZpbmUgSU5UX0ZBU1QxNl9U WVBFICAgSU5UMzJfVFlQRQorI2RlZmluZSBJTlRfRkFTVDMyX1RZUEUgICBJ TlQzMl9UWVBFCisjZGVmaW5lIElOVF9GQVNUNjRfVFlQRSAgIElOVDY0X1RZ UEUKKyNkZWZpbmUgVUlOVF9GQVNUOF9UWVBFICAgVUlOVDMyX1RZUEUKKyNk ZWZpbmUgVUlOVF9GQVNUMTZfVFlQRSAgVUlOVDMyX1RZUEUKKyNkZWZpbmUg VUlOVF9GQVNUMzJfVFlQRSAgVUlOVDMyX1RZUEUKKyNkZWZpbmUgVUlOVF9G QVNUNjRfVFlQRSAgVUlOVDY0X1RZUEUKKworI2RlZmluZSBJTlRQVFJfVFlQ RSAgICAgICAoTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAgSU5UNjRfVFlQRSA6 ICBJTlQzMl9UWVBFKQorI2RlZmluZSBVSU5UUFRSX1RZUEUgICAgICAoTE9O R19UWVBFX1NJWkUgPT0gNjQgPyBVSU5UNjRfVFlQRSA6IFVJTlQzMl9UWVBF KQotLS0gL2Rldi9udWxsCisrKyBnY2MvY29uZmlnL2RyYWdvbmZseS5oCkBA IC0wLDAgKzEsMTI5IEBACisvKiBCYXNlIGNvbmZpZ3VyYXRpb24gZmlsZSBm b3IgYWxsIERyYWdvbkZseSB0YXJnZXRzLgorICAgQ29weXJpZ2h0IChDKSAy MDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJp YnV0ZWQgYnkgSm9obiBNYXJpbm8gPGdudWdjY0BtYXJpbm8uc3Q+CisKK1Ro aXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p CithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3 IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFs CitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExp YnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGli cmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUg dGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVj dGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyN1bmRlZiAgVEFSR0VUX09TX0NQUF9CVUlMVElO UworI2RlZmluZSBUQVJHRVRfT1NfQ1BQX0JVSUxUSU5TKCkgICAgICAgICAg ICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgIGJ1aWx0aW5fZGVmaW5lX3N0ZCAoInVuaXgiKTsg ICAgICAgICBcCisgICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0RyYWdvbkZs eV9fIik7ICAgIFwKKyAgICAgICBidWlsdGluX2Fzc2VydCAoInN5c3RlbT11 bml4Iik7ICAgICAgXAorICAgICAgIGJ1aWx0aW5fYXNzZXJ0ICgic3lzdGVt PWJzZCIpOyAgICAgICBcCisgICAgICAgYnVpbHRpbl9hc3NlcnQgKCJzeXN0 ZW09RHJhZ29uRmx5Iik7IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoMCkKKworI3VuZGVmICBD UFBfU1BFQworI2RlZmluZSBDUFBfU1BFQyBcCisgIiUoY3BwX2NwdSkgJShj cHBfYXJjaCkgJXtwb3NpeDotRF9QT1NJWF9TT1VSQ0V9IgorCisjdW5kZWYg IFNUQVJURklMRV9TUEVDCisjZGVmaW5lIFNUQVJURklMRV9TUEVDCVwKKyAg IiV7IXNoYXJlZDogXAorICAgICAle3BnOmdjcnQxLm8lc30gXAorICAgICAl eyFwZzogXAorICAgICAgICV7cDpnY3J0MS5vJXN9IFwKKyAgICAgICAleyFw OiBcCisgICAgICAgICAle3Byb2ZpbGU6IGdjcnQxLm8lc30gXAorICAgICAg ICAgJXshcHJvZmlsZTogXAorICAgICAgICAgICAle3BpZTogU2NydDEubyVz OzpjcnQxLm8lc319fX19IFwKKyAgIGNydGkubyVzIFwKKyAgICV7c2hhcmVk fHBpZTpjcnRiZWdpblMubyVzOzpjcnRiZWdpbi5vJXN9IgorCisjdW5kZWYg IEVOREZJTEVfU1BFQworI2RlZmluZSBFTkRGSUxFX1NQRUMgXAorICAiJXtz aGFyZWR8cGllOmNydGVuZFMubyVzOzpjcnRlbmQubyVzfSBjcnRuLm8lcyIK KworI3VuZGVmICBMSUJfU1BFQworI2RlZmluZSBMSUJfU1BFQyBcCisgICIl e3B0aHJlYWQ6LWxwdGhyZWFkfSAtbGMiCisKKyNpZiBkZWZpbmVkKEhBVkVf TERfRUhfRlJBTUVfSERSKQorI2RlZmluZSBMSU5LX0VIX1NQRUMgIi0tZWgt ZnJhbWUtaGRyIgorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSBMSU5LX1NQRUMg YXBwcm9wcmlhdGUgZm9yIERyYWdvbkZseS4gIEhlcmUgd2UgcHJvdmlkZSBz dXBwb3J0CisgICBmb3IgdGhlIHNwZWNpYWwgR0NDIG9wdGlvbnMgLXN0YXRp YyBhbmQgLXNoYXJlZCwgd2hpY2ggYWxsb3cgdXMgdG8KKyAgIGxpbmsgdGhp bmdzIGluIG9uZSBvZiB0aGVzZSB0aHJlZSBtb2RlcyBieSBhcHBseWluZyB0 aGUgYXBwcm9wcmlhdGUKKyAgIGNvbWJpbmF0aW9ucyBvZiBvcHRpb25zIGF0 IGxpbmstdGltZS4KKworICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlv biBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgIGRvbmUu ICAqLworCisjZGVmaW5lIERGQlNEX0xJTktfU1BFQyBcCisgIiV7cDolbmNv bnNpZGVyIHVzaW5nICctcGcnIGluc3RlYWQgb2YgJy1wJyB3aXRoIGdwcm9m KDEpfSBcCisgICV7djotVn0gXAorICAle2Fzc2VydCp9ICV7Uip9ICV7cnBh dGgqfSAle2RlZnN5bSp9IFwKKyAgJXtzaGFyZWQ6LUJzaGFyZWFibGUgJXto Kn0gJXtzb25hbWUqfX0gXAorICAleyFzaGFyZWQ6IFwKKyAgICV7IXN0YXRp YzogXAorICAgICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWljfSBcCisgICAg LWR5bmFtaWMtbGlua2VyICUoZGZic2RfZHluYW1pY19saW5rZXIpIFwKKyAg IH0gXAorICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKKyAgfSBcCisgICV7IXN0 YXRpYzotLWhhc2gtc3R5bGU9Z251fSBcCisgICV7c3ltYm9saWM6LUJzeW1i b2xpY30iCisKKyN1bmRlZiAgTElOS19TUEVDCisjZGVmaW5lIExJTktfU1BF QyBERkJTRF9MSU5LX1NQRUMKKworI2RlZmluZSBERkJTRF9EWU5BTUlDX0xJ TktFUiAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4yIgorCisKKy8qIFVzZSAt LWFzLW5lZWRlZCAtbGdjY19zIGZvciBlaCBzdXBwb3J0LiAgKi8KKyNpZmRl ZiBIQVZFX0xEX0FTX05FRURFRAorI2RlZmluZSBVU0VfTERfQVNfTkVFREVE IDEKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqWyAgVGFy Z2V0IHN0dWZmICBdKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qIEFsbCBEcmFnb25GbHkgQXJjaGl0ZWN0dXJlcyBzdXBwb3J0 IHRoZSBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0LiAgKi8KKyN1bmRlZiAgT0JK RUNUX0ZPUk1BVF9FTEYKKyNkZWZpbmUgT0JKRUNUX0ZPUk1BVF9FTEYKKwor LyogRG9uJ3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IHRoZSBoZWFkZXIgZmls ZXMuICAqLworI3VuZGVmICBOT19JTVBMSUNJVF9FWFRFUk5fQworI2RlZmlu ZSBOT19JTVBMSUNJVF9FWFRFUk5fQwkxCisKKy8qIEZvbGxvdyBEcmFnb25G bHkncyBzdGFuZGFyZCBoZWFkZXJzICg8bWFjaGluZS9zdGRpbnQuaD4sIGV0 Yy4uLikuICAqLworCisjdW5kZWYgIFdDSEFSX1RZUEUKKyNkZWZpbmUgV0NI QVJfVFlQRSAiaW50IgorCisjdW5kZWYgIFdJTlRfVFlQRQorI2RlZmluZSBX SU5UX1RZUEUgImludCIKKworLyogQ29kZSBnZW5lcmF0aW9uIHBhcmFtZXRl cnMuICAqLworCisvKiBVc2UgcGVyaW9kcyByYXRoZXIgdGhhbiBkb2xsYXIg c2lnbnMgaW4gc3BlY2lhbCBnKysgYXNzZW1ibGVyIG5hbWVzLgorICAgVGhp cyBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9uIGtub3dzIG91ciBzeXN0ZW0g Y29ycmVjdGx5IHNvIHdlIGNhbiBsaW5rCisgICB3aXRoIGxpYnJhcmllcyBj b21waWxlZCB3aXRoIHRoZSBuYXRpdmUgY2MuICAqLworI3VuZGVmIE5PX0RP TExBUl9JTl9MQUJFTAorCisvKiBVc2VkIGJ5IGxpYmdjYzIuYy4gIFdlIHN1 cHBvcnQgZmlsZSBsb2NraW5nIHdpdGggZmNudGwgLyBGX1NFVExLVy4KKyAg IFRoaXMgZW5hYmxlcyB0aGUgdGVzdCBjb3ZlcmFnZSBjb2RlIHRvIHVzZSBm aWxlIGxvY2tpbmcgd2hlbiBleGl0aW5nIGEKKyAgIHByb2dyYW0sIHdoaWNo IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIHByb2dyYW0gaGFzIGZv cmtlZC4gICovCisjZGVmaW5lIFRBUkdFVF9QT1NJWF9JTwotLS0gL2Rldi9u dWxsCisrKyBnY2MvY29uZmlnL2RyYWdvbmZseS5vcHQKQEAgLTAsMCArMSw2 NCBAQAorOyBEcmFnb25GbHkgQlNEIG9wdGlvbnMuCisKKzsgQ29weXJpZ2h0 IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOwor OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCis7Cis7IEdDQyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0IHVuZGVyCis7IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCis7IFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyCis7IHZlcnNpb24uCis7Cis7IEdDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVCBBTlkKKzsgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KzsgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7IGZvciBtb3JlIGRldGFp bHMuCis7Cis7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7IGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis7IDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworOyBTZWUgdGhlIEdD QyBpbnRlcm5hbHMgbWFudWFsIChvcHRpb25zLnRleGkpIGZvciBhIGRlc2Ny aXB0aW9uIG9mIHRoaXMgZmlsZSdzIGZvcm1hdC4KKworOyBQbGVhc2UgdHJ5 IHRvIGtlZXAgdGhpcyBmaWxlIGluIEFTQ0lJIGNvbGxhdGluZyBvcmRlci4K KworYXNzZXJ0CitEcml2ZXIgU2VwYXJhdGUKKworYXNzZXJ0PQorRHJpdmVy IEpvaW5lZE9yTWlzc2luZworCitkZWZzeW0KK0RyaXZlciBTZXBhcmF0ZQor CitkZWZzeW09CitEcml2ZXIgSm9pbmVkT3JNaXNzaW5nCisKK3Bvc2l4CitE cml2ZXIKKworcHJvZmlsZQorRHJpdmVyCisKK3B0aHJlYWQKK0RyaXZlcgor CityZHluYW1pYworRHJpdmVyCisKK3JwYXRoLWxpbmsKK0RyaXZlciBTZXBh cmF0ZQorCitycGF0aC1saW5rPQorRHJpdmVyIEpvaW5lZE9yTWlzc2luZwor CitycGF0aD0KK0RyaXZlciBKb2luZWRPck1pc3NpbmcKKworc29uYW1lCitE cml2ZXIgU2VwYXJhdGUKKworc29uYW1lPQorRHJpdmVyIEpvaW5lZE9yTWlz c2luZworCis7IFRoaXMgY29tbWVudCBpcyB0byBlbnN1cmUgd2UgcmV0YWlu IHRoZSBibGFuayBsaW5lIGFib3ZlLgotLS0gL2Rldi9udWxsCisrKyBnY2Mv Y29uZmlnL2kzODYvZHJhZ29uZmx5LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8q IERlZmluaXRpb25zIGZvciBJbnRlbCAzODYgcnVubmluZyBEcmFnb25GbHkg d2l0aCBFTEYgZm9ybWF0CisgICBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBK b2huIE1hcmlubyA8Z251Z2NjQG1hcmluby5zdD4KKworVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRl ciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZl cnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Np b25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNl cHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2Vw dGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMg Q09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJ ZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworCisvKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tZW50LXN0YXJ0 ZXIgb2YgIi8iLiAgKi8KKyN1bmRlZiAgQVNNX0NPTU1FTlRfU1RBUlQKKyNk ZWZpbmUgQVNNX0NPTU1FTlRfU1RBUlQgIiMiCisKKyN1bmRlZiAgQVNNX0FQ UF9PTgorI2RlZmluZSBBU01fQVBQX09OICIjQVBQXG4iCisKKyN1bmRlZiAg QVNNX0FQUF9PRkYKKyNkZWZpbmUgQVNNX0FQUF9PRkYgIiNOT19BUFBcbiIK KworI3VuZGVmICBEQlhfUkVHSVNURVJfTlVNQkVSCisjZGVmaW5lIERCWF9S RUdJU1RFUl9OVU1CRVIobikgXAorICAoVEFSR0VUXzY0QklUID8gZGJ4NjRf cmVnaXN0ZXJfbWFwW25dIDogc3ZyNF9kYnhfcmVnaXN0ZXJfbWFwW25dKQor CisjdW5kZWYgIE5PX1BST0ZJTEVfQ09VTlRFUlMKKyNkZWZpbmUgTk9fUFJP RklMRV9DT1VOVEVSUwkxCisKKy8qIFRlbGwgZmluYWwuYyB0aGF0IHdlIGRv bid0IG5lZWQgYSBsYWJlbCBwYXNzZWQgdG8gbWNvdW50LiAgKi8KKworI3Vu ZGVmICBNQ09VTlRfTkFNRQorI2RlZmluZSBNQ09VTlRfTkFNRSAiLm1jb3Vu dCIKKworLyogTWFrZSBnY2MgYWdyZWUgd2l0aCA8bWFjaGluZS9hbnNpLmg+ LiAgKi8KKworI3VuZGVmICBTSVpFX1RZUEUKKyNkZWZpbmUgU0laRV9UWVBF CShUQVJHRVRfNjRCSVQgPyAibG9uZyB1bnNpZ25lZCBpbnQiIDogInVuc2ln bmVkIGludCIpCisKKyN1bmRlZiAgUFRSRElGRl9UWVBFCisjZGVmaW5lIFBU UkRJRkZfVFlQRQkoVEFSR0VUXzY0QklUID8gImxvbmcgaW50IiA6ICJpbnQi KQorCisjdW5kZWYgIFdDSEFSX1RZUEVfU0laRQorI2RlZmluZSBXQ0hBUl9U WVBFX1NJWkUJKFRBUkdFVF82NEJJVCA/IDMyIDogQklUU19QRVJfV09SRCkK KworI3VuZGVmICBTVUJUQVJHRVRfRVhUUkFfU1BFQ1MJLyogaTM4Ni5oIGJv Z3VzbHkgZGVmaW5lcyBpdC4gICovCisjZGVmaW5lIFNVQlRBUkdFVF9FWFRS QV9TUEVDUyBcCisgIHsgImRmYnNkX2R5bmFtaWNfbGlua2VyIiwgREZCU0Rf RFlOQU1JQ19MSU5LRVIgfQorCisvKiBBIEMgc3RhdGVtZW50IHRvIG91dHB1 dCB0byB0aGUgc3RkaW8gc3RyZWFtIEZJTEUgYW4gYXNzZW1ibGVyCisgICBj b21tYW5kIHRvIGFkdmFuY2UgdGhlIGxvY2F0aW9uIGNvdW50ZXIgdG8gYSBt dWx0aXBsZSBvZiAxPDxMT0cKKyAgIGJ5dGVzIGlmIGl0IGlzIHdpdGhpbiBN QVhfU0tJUCBieXRlcy4KKworICAgVGhpcyBpcyB1c2VkIHRvIGFsaWduIGNv ZGUgbGFiZWxzIGFjY29yZGluZyB0byBJbnRlbCByZWNvbW1lbmRhdGlvbnMu ICAqLworCisjaWZkZWYgSEFWRV9HQVNfTUFYX1NLSVBfUDJBTElHTgorI3Vu ZGVmICBBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOCisjZGVmaW5lIEFTTV9P VVRQVVRfTUFYX1NLSVBfQUxJR04oRklMRSwgTE9HLCBNQVhfU0tJUCkJCQkJ CVwKKyAgaWYgKChMT0cpICE9IDApIHsJCQkJCQkJCQkJCQkJCVwKKyAgICBp ZiAoKE1BWF9TS0lQKSA9PSAwKSBmcHJpbnRmICgoRklMRSksICJcdC5wMmFs aWduICVkXG4iLCAoTE9HKSk7CVwKKyAgICBlbHNlIGZwcmludGYgKChGSUxF KSwgIlx0LnAyYWxpZ24gJWQsLCVkXG4iLCAoTE9HKSwgKE1BWF9TS0lQKSk7 CVwKKyAgfQorI2VuZGlmCisKKy8qIERvbid0IGRlZmF1bHQgdG8gcGNjLXN0 cnVjdC1yZXR1cm4sIHdlIHdhbnQgdG8gcmV0YWluIGNvbXBhdGliaWxpdHkg d2l0aAorICAgb2xkZXIgZ2NjIHZlcnNpb25zIEFORCBwY2Mtc3RydWN0LXJl dHVybiBpcyBub25yZWVudHJhbnQuCisgICAoZXZlbiB0aG91Z2ggdGhlIFNW UjQgQUJJIGZvciB0aGUgaTM4NiBzYXlzIHRoYXQgcmVjb3JkcyBhbmQgdW5p b25zIGFyZQorICAgcmV0dXJuZWQgaW4gbWVtb3J5KS4gICovCisKKyN1bmRl ZiAgREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTgorI2RlZmluZSBERUZBVUxU X1BDQ19TVFJVQ1RfUkVUVVJOIDAKKworLyogRHJhZ29uRmx5IHNldHMgdGhl IHJvdW5kaW5nIHByZWNpc2lvbiBvZiB0aGUgRlBVIHRvIDUzIGJpdHMuICBM ZXQgdGhlCisgICBjb21waWxlciBnZXQgdGhlIGNvbnRlbnRzIG9mIDxmbG9h dC5oPiBhbmQgc3RkOjpudW1lcmljX2xpbWl0cyBjb3JyZWN0LiAgKi8KKyN1 bmRlZiBUQVJHRVRfOTZfUk9VTkRfNTNfTE9OR19ET1VCTEUKKyNkZWZpbmUg VEFSR0VUXzk2X1JPVU5EXzUzX0xPTkdfRE9VQkxFICghVEFSR0VUXzY0QklU KQorCisvKiBQdXQgYWxsICp0ZiByb3V0aW5lcyBpbiBsaWJnY2MuICAqLwor I3VuZGVmIExJQkdDQzJfSEFTX1RGX01PREUKKyNkZWZpbmUgTElCR0NDMl9I QVNfVEZfTU9ERSAxCisjZGVmaW5lIExJQkdDQzJfVEZfQ0VYVCBxCisjZGVm aW5lIFRGX1NJWkUgMTEzCisKKy8qIFN0YXRpYyBzdGFjayBjaGVja2luZyBp cyBzdXBwb3J0ZWQgYnkgbWVhbnMgb2YgcHJvYmVzLiAgKi8KKyNkZWZpbmUg U1RBQ0tfQ0hFQ0tfU1RBVElDX0JVSUxUSU4gMQorCisvKiBTdXBwb3J0IGZv ciBpMzg2IHdhcyByZW1vdmVkIGZyb20gRHJhZ29uRmx5IGluIDIwMDcgICov CisjZGVmaW5lIFNVQlRBUkdFVDMyX0RFRkFVTFRfQ1BVICJpNDg2IgorCisj ZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVf ZXhlY19zdGFjawotLS0gZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oLm9yaWcKKysr IGdjYy9naW5jbHVkZS9zdGRkZWYuaApAQCAtNTYsNiArNTYsMTEgQEAKICNp bmNsdWRlIDxzeXMvX3R5cGVzLmg+CiAjZW5kaWYKIAorLyogTGlrZSBGcmVl QlNELCBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBtYWNoaW5lL2Fuc2kuaCAq LworI2lmIGRlZmluZWQoX19EcmFnb25GbHlfXykKKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KKyNlbmRpZgorCiAvKiBJbiA0LjNic2QtbmV0MiwgbWFjaGlu ZS9hbnNpLmggZGVmaW5lcyB0aGVzZSBzeW1ib2xzLCB3aGljaCBhcmUKICAg IGRlZmluZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBpcyAqbm90KiBk ZWZpbmVkLgogICAgRnJlZUJTRC0yLjEgZGVmaW5lcyBfTUFDSElORV9BTlNJ X0hfIGluc3RlYWQgb2YgX0FOU0lfSF8uCkBAIC0xMzMsNiArMTM4LDcgQEAK ICNpZm5kZWYgX0JTRF9QVFJESUZGX1RfCiAjaWZuZGVmIF9fX2ludF9wdHJk aWZmX3RfaAogI2lmbmRlZiBfR0NDX1BUUkRJRkZfVAorI2lmbmRlZiBfUFRS RElGRl9UX0RFQ0xBUkVEIC8qIERyYWdvbkZseSAqLwogI2RlZmluZSBfUFRS RElGRl9UCiAjZGVmaW5lIF9UX1BUUkRJRkZfCiAjZGVmaW5lIF9UX1BUUkRJ RkYKQEAgLTE0MSwxMCArMTQ3LDEyIEBACiAjZGVmaW5lIF9CU0RfUFRSRElG Rl9UXwogI2RlZmluZSBfX19pbnRfcHRyZGlmZl90X2gKICNkZWZpbmUgX0dD Q19QVFJESUZGX1QKKyNkZWZpbmUgX1BUUkRJRkZfVF9ERUNMQVJFRAogI2lm bmRlZiBfX1BUUkRJRkZfVFlQRV9fCiAjZGVmaW5lIF9fUFRSRElGRl9UWVBF X18gbG9uZyBpbnQKICNlbmRpZgogdHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9f IHB0cmRpZmZfdDsKKyNlbmRpZiAvKiBfUFRSRElGRl9UX0RFQ0xBUkVEICov CiAjZW5kaWYgLyogX0dDQ19QVFJESUZGX1QgKi8KICNlbmRpZiAvKiBfX19p bnRfcHRyZGlmZl90X2ggKi8KICNlbmRpZiAvKiBfQlNEX1BUUkRJRkZfVF8g Ki8KQEAgLTE5OCw2ICsyMDYsNyBAQAogI2RlZmluZSBfR0NDX1NJWkVfVAog I2RlZmluZSBfU0laRVRfCiAjaWYgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAm JiAoX19GcmVlQlNEX18gPj0gNSkpIFwKKyAgfHwgZGVmaW5lZChfX0RyYWdv bkZseV9fKSBcCiAgIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQog LyogX19zaXplX3QgaXMgYSB0eXBlZGVmIG9uIEZyZWVCU0QgNSwgbXVzdCBu b3QgdHJhc2ggaXQuICovCiAjZWxpZiBkZWZpbmVkIChfX1ZNU19fKQpAQCAt MzA2LDcgKzMxNSw3IEBACiAvKiBGcmVlQlNEIDUgY2FuJ3QgYmUgaGFuZGxl ZCB3ZWxsIHVzaW5nICJ0cmFkaXRpb25hbCIgbG9naWMgYWJvdmUKICAgIHNp bmNlIGl0IG5vIGxvbmdlciBkZWZpbmVzIF9CU0RfUlVORV9UXyB5ZXQgc3Rp bGwgZGVzaXJlcyB0byBleHBvcnQKICAgIHJ1bmVfdCBpbiBzb21lIGNhc2Vz Li4uICovCi0jaWYgZGVmaW5lZCAoX19GcmVlQlNEX18pICYmIChfX0ZyZWVC U0RfXyA+PSA1KQorI2lmIGRlZmluZWQgKF9fRHJhZ29uRmx5X18pIHx8IChk ZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpKQog I2lmICFkZWZpbmVkIChfQU5TSV9TT1VSQ0UpICYmICFkZWZpbmVkIChfUE9T SVhfU09VUkNFKQogI2lmIF9fQlNEX1ZJU0lCTEUKICNpZm5kZWYgX1JVTkVf VF9ERUNMQVJFRAotLS0gaW5jbHVkZS9saWJpYmVydHkuaC5vcmlnCisrKyBp bmNsdWRlL2xpYmliZXJ0eS5oCkBAIC0xMDYsNyArMTA2LDEwIEBACiAgICB0 byBmaW5kIHRoZSBkZWNsYXJhdGlvbiBzbyBwcm92aWRlIGEgZnVsbHkgcHJv dG90eXBlZCBvbmUuICBJZiBpdAogICAgaXMgMSwgd2UgZm91bmQgaXQgc28g ZG9uJ3QgcHJvdmlkZSBhbnkgZGVjbGFyYXRpb24gYXQgYWxsLiAgKi8KICNp ZiAhSEFWRV9ERUNMX0JBU0VOQU1FCi0jaWYgZGVmaW5lZCAoX19HTlVfTElC UkFSWV9fICkgfHwgZGVmaW5lZCAoX19saW51eF9fKSB8fCBkZWZpbmVkIChf X0ZyZWVCU0RfXykgfHwgZGVmaW5lZCAoX19PcGVuQlNEX18pIHx8IGRlZmlu ZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykgfHwgZGVm aW5lZCAoX19DWUdXSU4zMl9fKSB8fCBkZWZpbmVkIChfX01JTkdXMzJfXykg fHwgZGVmaW5lZCAoSEFWRV9ERUNMX0JBU0VOQU1FKQorI2lmIGRlZmluZWQg KF9fR05VX0xJQlJBUllfXyApIHx8IGRlZmluZWQgKF9fbGludXhfXykgXAor IHx8IGRlZmluZWQgKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkIChfX09wZW5C U0RfXykgfHwgZGVmaW5lZCAoX19OZXRCU0RfXykgXAorIHx8IGRlZmluZWQg KF9fQ1lHV0lOX18pIHx8IGRlZmluZWQgKF9fQ1lHV0lOMzJfXykgfHwgZGVm aW5lZCAoX19NSU5HVzMyX18pIFwKKyB8fCBkZWZpbmVkIChfX0RyYWdvbkZs eV9fKSB8fCBkZWZpbmVkIChIQVZFX0RFQ0xfQkFTRU5BTUUpIAogZXh0ZXJu IGNoYXIgKmJhc2VuYW1lIChjb25zdCBjaGFyICopIEFUVFJJQlVURV9SRVRV Uk5TX05PTk5VTEwgQVRUUklCVVRFX05PTk5VTEwoMSk7CiAjZWxzZQogLyog RG8gbm90IGFsbG93IGJhc2VuYW1lIHRvIGJlIHVzZWQgaWYgdGhlcmUgaXMg bm8gcHJvdG90eXBlIHNlZW4uICBXZQotLS0gbGliY2lsa3J0cy9ydW50aW1l L29zLXVuaXguYy5vcmlnCisrKyBsaWJjaWxrcnRzL3J1bnRpbWUvb3MtdW5p eC5jCkBAIC01NCw2ICs1NCw4IEBACiAjZWxpZiBkZWZpbmVkIF9fQVBQTEVf XwogIyAgIGluY2x1ZGUgPHN5cy9zeXNjdGwuaD4KICAgICAvLyBVc2VzIHN5 c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pIGluIHZlcmJvc2Ugb3V0cHV0 CisjZWxpZiBkZWZpbmVkICBfX0RyYWdvbkZseV9fCisvLyBObyBhZGRpdGlv bmFsIGluY2x1ZGUgZmlsZXMKICNlbGlmIGRlZmluZWQgIF9fRnJlZUJTRF9f CiAvLyBObyBhZGRpdGlvbmFsIGluY2x1ZGUgZmlsZXMKICNlbGlmIGRlZmlu ZWQgX19DWUdXSU5fXwpAQCAtMzc0LDcgKzM3Niw3IEBACiAgICAgYXNzZXJ0 KCh1bnNpZ25lZCljb3VudCA9PSBjb3VudCk7CiAKICAgICByZXR1cm4gY291 bnQ7Ci0jZWxpZiBkZWZpbmVkICBfX0ZyZWVCU0RfXyB8fCBkZWZpbmVkIF9f Q1lHV0lOX18KKyNlbGlmIGRlZmluZWQgIF9fRnJlZUJTRF9fIHx8IGRlZmlu ZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fRHJhZ29uRmx5X18KICAgICBp bnQgbmNvcmVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CiAK ICAgICByZXR1cm4gbmNvcmVzOwpAQCAtNDAyLDYgKzQwNCw5IEBACiAgICAg Ly8gT24gTWFjT1MsIGNhbGwgc2NoZWRfeWllbGQgdG8geWllbGQgcXVhbnR1 bS4gIEknbSBub3Qgc3VyZSB3aHkgd2UKICAgICAvLyBkb24ndCBkbyB0aGlz IG9uIExpbnV4IGFsc28uCiAgICAgc2NoZWRfeWllbGQoKTsKKyNlbGlmIGRl ZmluZWQoX19EcmFnb25GbHlfXykKKyAgICAvLyBPbiBEcmFnb25GbHkgQlNE LCBjYWxsIHNjaGVkX3lpZWxkIHRvIHlpZWxkIHF1YW50dW0uCisgICAgc2No ZWRfeWllbGQoKTsKICNlbGlmIGRlZmluZWQoX19NSUNfXykKICAgICAvLyBP biBNSUMsIHB0aHJlYWRfeWllbGQoKSByZWFsbHkgdHJhc2hlcyB0aGluZ3Mu ICBBcmNoJ3MgbWVhc3VyZW1lbnRzCiAgICAgLy8gc2hvd2VkIHRoYXQgY2Fs bGluZyBfbW1fZGVsYXlfMzIoKSAob3IgZG9pbmcgbm90aGluZykgd2FzIGEg YmV0dGVyCi0tLSBsaWJnY2MvY29uZmlnLmhvc3Qub3JpZworKysgbGliZ2Nj L2NvbmZpZy5ob3N0CkBAIC0yMDcsNiArMjA3LDExIEBACiAgIHRtYWtlX2Zp bGU9IiR0bWFrZV9maWxlIHQtZGFyd2luICR7Y3B1X3R5cGV9L3QtZGFyd2lu IHQtbGliZ2NjLXBpYyB0LXNsaWJnY2MtZGFyd2luIgogICBleHRyYV9wYXJ0 cz0iY3J0My5vIGNydHRtcy5vIGNydHRtZS5vIgogICA7OworKi0qLWRyYWdv bmZseSopCisgIHRtYWtlX2ZpbGU9IiR0bWFrZV9maWxlIHQtY3J0c3R1ZmYt cGljIHQtbGliZ2NjLXBpYyB0LWVoLWR3Mi1kaXAiCisgIHRtYWtlX2ZpbGU9 IiR0bWFrZV9maWxlIHQtc2xpYmdjYyB0LXNsaWJnY2MtZ2xkIHQtc2xpYmdj Yy1lbGYtdmVyIgorICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQu byBjcnRiZWdpblMubyBjcnRlbmRTLm8iCisgIDs7CiAqLSotZnJlZWJzZCop CiAgICMgVGhpcyBpcyB0aGUgZ2VuZXJpYyBFTEYgY29uZmlndXJhdGlvbiBv ZiBGcmVlQlNELiAgTGF0ZXIKICAgIyBtYWNoaW5lLXNwZWNpZmljIHNlY3Rp b25zIG1heSByZWZpbmUgYW5kIGFkZCB0byB0aGlzCkBAIC0zMDIsNyArMzA3 LDEwIEBACiBlc2FjCiAKIGNhc2UgJHtob3N0fSBpbgotKi0qLWRhcndpbiog fCAqLSotZnJlZWJzZCogfCAqLSotbmV0YnNkKiB8ICotKi1vcGVuYnNkKiB8 ICotKi1zb2xhcmlzMiopCisqLSotZHJhZ29uZmx5KiB8ICotKi1mcmVlYnNk KiB8ICotKi1uZXRic2QqIHwgKi0qLW9wZW5ic2QqKQorICBlbmFibGVfZXhl Y3V0ZV9zdGFjaz1lbmFibGUtZXhlY3V0ZS1zdGFjay1ic2QuYworICA7Owor Ki0qLWRhcndpbiogfCAqLSotc29sYXJpczIqKQogICBlbmFibGVfZXhlY3V0 ZV9zdGFjaz1lbmFibGUtZXhlY3V0ZS1zdGFjay1tcHJvdGVjdC5jCiAgIDs7 CiBpWzM0NTY3XTg2LSotbWluZ3cqIHwgeDg2XzY0LSotbWluZ3cqKQpAQCAt NTQ1LDYgKzU1MywxNCBAQAogeDg2XzY0LSotZWxmKikKIAl0bWFrZV9maWxl PSIkdG1ha2VfZmlsZSBpMzg2L3QtY3J0c3R1ZmYgdC1jcnRzdHVmZi1waWMg dC1saWJnY2MtcGljIgogCTs7CitpWzM0NTY3XTg2LSotZHJhZ29uZmx5KikK Kwl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1kcmFnb25mbHkg aTM4Ni90LWNydHN0dWZmIgorCW1kX3Vud2luZF9oZWFkZXI9aTM4Ni9kcmFn b25mbHktdW53aW5kLmgKKwk7OworeDg2XzY0LSotZHJhZ29uZmx5KikKKwl0 bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGkzODYvdC1kcmFnb25mbHkgaTM4 Ni90LWNydHN0dWZmIgorCW1kX3Vud2luZF9oZWFkZXI9aTM4Ni9kcmFnb25m bHktdW53aW5kLmgKKwk7OwogaVszNDU2N104Ni0qLWZyZWVic2QqKQogCXRt YWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gaTM4Ni90LWZyZWVic2QgaTM4Ni90 LWNydHN0dWZmIgogCTs7CkBAIC0xMjYyLDYgKzEyNzgsNyBAQAogICBpWzM0 NTY3XTg2LSotc29sYXJpczIqIHwgeDg2XzY0LSotc29sYXJpczIuMVswLTld KiB8IFwKICAgaVszNDU2N104Ni0qLWN5Z3dpbiogfCB4ODZfNjQtKi1jeWd3 aW4qIHwgXAogICBpWzM0NTY3XTg2LSotbWluZ3cqIHwgeDg2XzY0LSotbWlu Z3cqIHwgXAorICBpWzM0NTY3XTg2LSotZHJhZ29uZmx5KiB8IHg4Nl82NC0q LWRyYWdvbmZseSogfCBcCiAgIGlbMzQ1NjddODYtKi1mcmVlYnNkKiB8IHg4 Nl82NC0qLWZyZWVic2QqIHwgXAogICBpWzM0NTY3XTg2LSotb3BlbmJzZCog fCB4ODZfNjQtKi1vcGVuYnNkKikKICAgCXRtYWtlX2ZpbGU9IiR7dG1ha2Vf ZmlsZX0gdC1zb2Z0ZnAtdGYiCi0tLSBsaWJnY2MvY3J0c3R1ZmYuYy5vcmln CisrKyBsaWJnY2MvY3J0c3R1ZmYuYwpAQCAtNzksMTEgKzc5LDE2IEBACiB9 CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoVEFSR0VUX0RMX0lURVJBVEVfUEhE UikgJiYgXAorICAgKGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgZGVmaW5l ZChfX0ZyZWVCU0RfXykpCisjZGVmaW5lIEJTRF9ETF9JVEVSQVRFX1BIRFJf QVZBSUxBQkxFCisjZW5kaWYKKyAKICNpZiBkZWZpbmVkKE9CSkVDVF9GT1JN QVRfRUxGKSBcCiAgICAgJiYgIWRlZmluZWQoT0JKRUNUX0ZPUk1BVF9GTEFU KSBcCiAgICAgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAog ICAgICYmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgIWRlZmluZWQoQ1JU U1RVRkZUX08pIFwKLSAgICAmJiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf X0ZyZWVCU0RfXyA+PSA3CisgICAgJiYgZGVmaW5lZChCU0RfRExfSVRFUkFU RV9QSERSX0FWQUlMQUJMRSkKICNpbmNsdWRlIDxsaW5rLmg+CiAjIGRlZmlu ZSBVU0VfUFRfR05VX0VIX0ZSQU1FCiAjZW5kaWYKLS0tIC9kZXYvbnVsbAor KysgbGliZ2NjL2VuYWJsZS1leGVjdXRlLXN0YWNrLWJzZC5jCkBAIC0wLDAg KzEsNTkgQEAKKy8qIEltcGxlbWVudCBfX2VuYWJsZV9leGVjdXRlX3N0YWNr IHVzaW5nIG1wcm90ZWN0KDIpLgorICAgQ29weXJpZ2h0IChDKSAyMDE0IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQg YnkgSm9obiBNYXJpbm8gPGdudWdjY0BtYXJpbm8uc3Q+CisKK1RoaXMgZmls ZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkg bGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQ TCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJt aXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkg RXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF eGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZp bGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5 LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIFNUQUNL X1BST1RfUldYIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVD KQorCitleHRlcm4gdm9pZCBfX2VuYWJsZV9leGVjdXRlX3N0YWNrICh2b2lk ICopOworCit2b2lkCitfX2VuYWJsZV9leGVjdXRlX3N0YWNrICh2b2lkICph ZGRyKQoreworICBzdGF0aWMgaW50IHNpemU7CisgIHN0YXRpYyBsb25nIG1h c2s7CisgIGNoYXIgKnBhZ2UsICplbmRzOworICBsb25nIHBhZ2VfYWRkciwg ZW5kc19hZGRyOworCisgIGlmIChzaXplID09IDApCisgIHsKKyAgICBzaXpl ID0gZ2V0cGFnZXNpemUgKCk7CisgICAgbWFzayA9IH4oKGxvbmcpIHNpemUg LSAxKTsKKyAgfQorICBwYWdlX2FkZHIgPSAobG9uZykgYWRkcjsKKyAgZW5k c19hZGRyID0gKGxvbmcpIChhZGRyICsgX19MSUJHQ0NfVFJBTVBPTElORV9T SVpFX18pOworCisgIHBhZ2UgPSAoY2hhciAqKSAocGFnZV9hZGRyICYgbWFz ayk7CisgIGVuZHMgPSAoY2hhciAqKSAoKGVuZHNfYWRkciAmIG1hc2spICsg c2l6ZSk7CisKKyAgLyoKKyAgICogTm90ZSB0aGF0IG5vIGVycm9ycyBzaG91 bGQgYmUgZW1pdHRlZCBieSBtcHJvdGVjdDsgaXQgaXMgY29uc2lkZXJlZAor ICAgKiBkYW5nZXJvdXMgZm9yIGxpYnJhcnkgY2FsbHMgdG8gc2VuZCBtZXNz YWdlcyB0byBzdGRvdXQvc3RkZXJyLgorICAgKi8KKyAgaWYgKG1wcm90ZWN0 IChwYWdlLCBlbmRzIC0gcGFnZSwgU1RBQ0tfUFJPVF9SV1gpIDwgMCkKKyAg ICBhYm9ydCAoKTsKK30KLS0tIGxpYmdjYy91bndpbmQtZHcyLWZkZS1kaXAu Yy5vcmlnCisrKyBsaWJnY2MvdW53aW5kLWR3Mi1mZGUtZGlwLmMKQEAgLTU4 LDcgKzU4LDggQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoaW5oaWJpdF9s aWJjKSAmJiBkZWZpbmVkKEhBVkVfTERfRUhfRlJBTUVfSERSKSBcCi0gICAg JiYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX18gPj0gNwor ICAgICYmIGRlZmluZWQoVEFSR0VUX0RMX0lURVJBVEVfUEhEUikgXAorICAg ICYmIChkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19GcmVl QlNEX18pKQogIyBkZWZpbmUgRWxmVyBfX0VsZk4KICMgZGVmaW5lIFVTRV9Q VF9HTlVfRUhfRlJBTUUKICNlbmRpZgotLS0gL2Rldi9udWxsCisrKyBsaWJn Y2MvY29uZmlnL2kzODYvZHJhZ29uZmx5LXVud2luZC5oCkBAIC0wLDAgKzEs MTgwIEBACisvKiBEV0FSRjIgRUggdW53aW5kaW5nIHN1cHBvcnQgZm9yIERy YWdvbkZseSBCU0Q6IEFNRCB4ODYtNjQgYW5kIHg4Ni4KKyAgIENvcHlyaWdo dCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAg IENvbnRyaWJ1dGVkIGJ5IEpvaG4gTWFyaW5vIDxnbnVnY2NAbWFyaW5vLnN0 PgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIg b3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNl Y3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRk aXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50 aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt Oworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1F IHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBEbyBjb2RlIHJlYWRpbmcgdG8g aWRlbnRpZnkgYSBzaWduYWwgZnJhbWUsIGFuZCBzZXQgdGhlIGZyYW1lCisg ICBzdGF0ZSBkYXRhIGFwcHJvcHJpYXRlbHkuICBTZWUgdW53aW5kLWR3Mi5j IGZvciB0aGUgc3RydWN0cy4gKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzaWduYWwu aD4KKyNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKyNpbmNsdWRlIDxtYWNo aW5lL3NpZ2ZyYW1lLmg+CisKKworI2RlZmluZSBSRUdfTkFNRShyZWcpCXNm X3VjLnVjX21jb250ZXh0Lm1jXyMjIHJlZworCisjaWZkZWYgX194ODZfNjRf XworI2RlZmluZSBNRF9GQUxMQkFDS19GUkFNRV9TVEFURV9GT1IgeDg2XzY0 X2RyYWdvbmZseV9mYWxsYmFja19mcmFtZV9zdGF0ZQorCisKK3N0YXRpYyB2 b2lkCit4ODZfNjRfc2lndHJhbXBfcmFuZ2UgKHVuc2lnbmVkIGNoYXIgKipz dGFydCwgdW5zaWduZWQgY2hhciAqKmVuZCkKK3sKKyAgdW5zaWduZWQgbG9u ZyBwc19zdHJpbmdzOworICBpbnQgbWliWzJdOworICBzaXplX3QgbGVuOwor CisgIG1pYlswXSA9IENUTF9LRVJOOworICBtaWJbMV0gPSBLRVJOX1BTX1NU UklOR1M7CisgIGxlbiA9IHNpemVvZiAocHNfc3RyaW5ncyk7CisgIHN5c2N0 bCAobWliLCAyLCAmcHNfc3RyaW5ncywgJmxlbiwgTlVMTCwgMCk7CisKKyAg KnN0YXJ0ID0gKHVuc2lnbmVkIGNoYXIgKilwc19zdHJpbmdzIC0gMzI7Cisg ICplbmQgICA9ICh1bnNpZ25lZCBjaGFyICopcHNfc3RyaW5nczsKK30KKwor CitzdGF0aWMgX1Vud2luZF9SZWFzb25fQ29kZQoreDg2XzY0X2RyYWdvbmZs eV9mYWxsYmFja19mcmFtZV9zdGF0ZQorKHN0cnVjdCBfVW53aW5kX0NvbnRl eHQgKmNvbnRleHQsIF9VbndpbmRfRnJhbWVTdGF0ZSAqZnMpCit7CisgIHVu c2lnbmVkIGNoYXIgKnBjID0gY29udGV4dC0+cmE7CisgIHVuc2lnbmVkIGNo YXIgKnNpZ3RyYW1wX3N0YXJ0LCAqc2lndHJhbXBfZW5kOworICBzdHJ1Y3Qg c2lnZnJhbWUgKnNmOworICBsb25nIG5ld19jZmE7CisKKyAgeDg2XzY0X3Np Z3RyYW1wX3JhbmdlKCZzaWd0cmFtcF9zdGFydCwgJnNpZ3RyYW1wX2VuZCk7 CisgIGlmIChwYyA+PSBzaWd0cmFtcF9lbmQgfHwgcGMgPCBzaWd0cmFtcF9z dGFydCkKKyAgICByZXR1cm4gX1VSQ19FTkRfT0ZfU1RBQ0s7CisKKyAgc2Yg PSAoc3RydWN0IHNpZ2ZyYW1lICopIGNvbnRleHQtPmNmYTsKKyAgbmV3X2Nm YSA9IHNmLT5SRUdfTkFNRShyc3ApOworICBmcy0+cmVncy5jZmFfaG93ID0g Q0ZBX1JFR19PRkZTRVQ7CisgIC8qIFJlZ2lzdGVyIDcgaXMgcnNwICAqLwor ICBmcy0+cmVncy5jZmFfcmVnID0gNzsKKyAgZnMtPnJlZ3MuY2ZhX29mZnNl dCA9IG5ld19jZmEgLSAobG9uZykgY29udGV4dC0+Y2ZhOworCisgIC8qIFRo ZSBTVlI0IHJlZ2lzdGVyIG51bWJlcmluZyBtYWNyb3MgYXJlbid0IHVzYWJs ZSBpbiBsaWJnY2MuICAqLworICBmcy0+cmVncy5yZWdbMF0uaG93ID0gUkVH X1NBVkVEX09GRlNFVDsKKyAgZnMtPnJlZ3MucmVnWzBdLmxvYy5vZmZzZXQg PSAobG9uZykmc2YtPlJFR19OQU1FKHJheCkgLSBuZXdfY2ZhOworICBmcy0+ cmVncy5yZWdbMV0uaG93ID0gUkVHX1NBVkVEX09GRlNFVDsKKyAgZnMtPnJl Z3MucmVnWzFdLmxvYy5vZmZzZXQgPSAobG9uZykmc2YtPlJFR19OQU1FKHJk eCkgLSBuZXdfY2ZhOworICBmcy0+cmVncy5yZWdbMl0uaG93ID0gUkVHX1NB VkVEX09GRlNFVDsKKyAgZnMtPnJlZ3MucmVnWzJdLmxvYy5vZmZzZXQgPSAo bG9uZykmc2YtPlJFR19OQU1FKHJjeCkgLSBuZXdfY2ZhOworICBmcy0+cmVn cy5yZWdbM10uaG93ID0gUkVHX1NBVkVEX09GRlNFVDsKKyAgZnMtPnJlZ3Mu cmVnWzNdLmxvYy5vZmZzZXQgPSAobG9uZykmc2YtPlJFR19OQU1FKHJieCkg LSBuZXdfY2ZhOworICBmcy0+cmVncy5yZWdbNF0uaG93ID0gUkVHX1NBVkVE X09GRlNFVDsKKyAgZnMtPnJlZ3MucmVnWzRdLmxvYy5vZmZzZXQgPSAobG9u Zykmc2YtPlJFR19OQU1FKHJzaSkgLSBuZXdfY2ZhOworICBmcy0+cmVncy5y ZWdbNV0uaG93ID0gUkVHX1NBVkVEX09GRlNFVDsKKyAgZnMtPnJlZ3MucmVn WzVdLmxvYy5vZmZzZXQgPSAobG9uZykmc2YtPlJFR19OQU1FKHJkaSkgLSBu ZXdfY2ZhOworICBmcy0+cmVncy5yZWdbNl0uaG93ID0gUkVHX1NBVkVEX09G RlNFVDsKKyAgZnMtPnJlZ3MucmVnWzZdLmxvYy5vZmZzZXQgPSAobG9uZykm c2YtPlJFR19OQU1FKHJicCkgLSBuZXdfY2ZhOworICBmcy0+cmVncy5yZWdb OF0uaG93ID0gUkVHX1NBVkVEX09GRlNFVDsKKyAgZnMtPnJlZ3MucmVnWzhd LmxvYy5vZmZzZXQgPSAobG9uZykmc2YtPlJFR19OQU1FKHI4KSAtIG5ld19j ZmE7CisgIGZzLT5yZWdzLnJlZ1s5XS5ob3cgPSBSRUdfU0FWRURfT0ZGU0VU OworICBmcy0+cmVncy5yZWdbOV0ubG9jLm9mZnNldCA9IChsb25nKSZzZi0+ UkVHX05BTUUocjkpIC0gbmV3X2NmYTsKKyAgZnMtPnJlZ3MucmVnWzEwXS5o b3cgPSBSRUdfU0FWRURfT0ZGU0VUOworICBmcy0+cmVncy5yZWdbMTBdLmxv Yy5vZmZzZXQgPSAobG9uZykmc2YtPlJFR19OQU1FKHIxMCkgLSBuZXdfY2Zh OworICBmcy0+cmVncy5yZWdbMTFdLmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7 CisgIGZzLT5yZWdzLnJlZ1sxMV0ubG9jLm9mZnNldCA9IChsb25nKSZzZi0+ UkVHX05BTUUocjExKSAtIG5ld19jZmE7CisgIGZzLT5yZWdzLnJlZ1sxMl0u aG93ID0gUkVHX1NBVkVEX09GRlNFVDsKKyAgZnMtPnJlZ3MucmVnWzEyXS5s b2Mub2Zmc2V0ID0gKGxvbmcpJnNmLT5SRUdfTkFNRShyMTIpIC0gbmV3X2Nm YTsKKyAgZnMtPnJlZ3MucmVnWzEzXS5ob3cgPSBSRUdfU0FWRURfT0ZGU0VU OworICBmcy0+cmVncy5yZWdbMTNdLmxvYy5vZmZzZXQgPSAobG9uZykmc2Yt PlJFR19OQU1FKHIxMykgLSBuZXdfY2ZhOworICBmcy0+cmVncy5yZWdbMTRd LmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7CisgIGZzLT5yZWdzLnJlZ1sxNF0u bG9jLm9mZnNldCA9IChsb25nKSZzZi0+UkVHX05BTUUocjE0KSAtIG5ld19j ZmE7CisgIGZzLT5yZWdzLnJlZ1sxNV0uaG93ID0gUkVHX1NBVkVEX09GRlNF VDsKKyAgZnMtPnJlZ3MucmVnWzE1XS5sb2Mub2Zmc2V0ID0gKGxvbmcpJnNm LT5SRUdfTkFNRShyMTUpIC0gbmV3X2NmYTsKKyAgZnMtPnJlZ3MucmVnWzE2 XS5ob3cgPSBSRUdfU0FWRURfT0ZGU0VUOworICBmcy0+cmVncy5yZWdbMTZd LmxvYy5vZmZzZXQgPSAobG9uZykmc2YtPlJFR19OQU1FKHJpcCkgLSBuZXdf Y2ZhOworICBmcy0+cmV0YWRkcl9jb2x1bW4gPSAxNjsKKyAgZnMtPnNpZ25h bF9mcmFtZSA9IDE7CisgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKK30KKwor I2Vsc2UgLyogTmV4dCBzZWN0aW9uIGlzIGZvciBpMzg2ICAqLworCisjZGVm aW5lIE1EX0ZBTExCQUNLX0ZSQU1FX1NUQVRFX0ZPUiB4ODZfZHJhZ29uZmx5 X2ZhbGxiYWNrX2ZyYW1lX3N0YXRlCisKKworc3RhdGljIHZvaWQKK3g4Nl9z aWd0cmFtcF9yYW5nZSAodW5zaWduZWQgY2hhciAqKnN0YXJ0LCB1bnNpZ25l ZCBjaGFyICoqZW5kKQoreworICB1bnNpZ25lZCBsb25nIHBzX3N0cmluZ3M7 CisgIGludCBtaWJbMl07CisgIHNpemVfdCBsZW47CisKKyAgbWliWzBdID0g Q1RMX0tFUk47CisgIG1pYlsxXSA9IEtFUk5fUFNfU1RSSU5HUzsKKyAgbGVu ID0gc2l6ZW9mIChwc19zdHJpbmdzKTsKKyAgc3lzY3RsIChtaWIsIDIsICZw c19zdHJpbmdzLCAmbGVuLCBOVUxMLCAwKTsKKworICAqc3RhcnQgPSAodW5z aWduZWQgY2hhciAqKXBzX3N0cmluZ3MgLSAxMjg7CisgICplbmQgICA9ICh1 bnNpZ25lZCBjaGFyICopcHNfc3RyaW5nczsKK30KKworCitzdGF0aWMgX1Vu d2luZF9SZWFzb25fQ29kZQoreDg2X2RyYWdvbmZseV9mYWxsYmFja19mcmFt ZV9zdGF0ZQorKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIF9V bndpbmRfRnJhbWVTdGF0ZSAqZnMpCit7CisgIHVuc2lnbmVkIGNoYXIgKnBj ID0gY29udGV4dC0+cmE7CisgIHVuc2lnbmVkIGNoYXIgKnNpZ3RyYW1wX3N0 YXJ0LCAqc2lndHJhbXBfZW5kOworICBzdHJ1Y3Qgc2lnZnJhbWUgKnNmOwor ICBsb25nIG5ld19jZmE7CisKKyAgeDg2X3NpZ3RyYW1wX3JhbmdlKCZzaWd0 cmFtcF9zdGFydCwgJnNpZ3RyYW1wX2VuZCk7CisKKyAgaWYgKHBjID49IHNp Z3RyYW1wX2VuZCB8fCBwYyA8IHNpZ3RyYW1wX3N0YXJ0KQorICAgIHJldHVy biBfVVJDX0VORF9PRl9TVEFDSzsKKworICBzZiA9IChzdHJ1Y3Qgc2lnZnJh bWUgKikgY29udGV4dC0+Y2ZhOworICBuZXdfY2ZhID0gc2YtPlJFR19OQU1F KGVzcCk7CisgIGZzLT5yZWdzLmNmYV9ob3cgPSBDRkFfUkVHX09GRlNFVDsK KyAgZnMtPnJlZ3MuY2ZhX3JlZyA9IDQ7CisgIGZzLT5yZWdzLmNmYV9vZmZz ZXQgPSBuZXdfY2ZhIC0gKGxvbmcpIGNvbnRleHQtPmNmYTsKKworICAvKiBU aGUgU1ZSNCByZWdpc3RlciBudW1iZXJpbmcgbWFjcm9zIGFyZW4ndCB1c2Fi bGUgaW4gbGliZ2NjLiAgKi8KKyAgZnMtPnJlZ3MucmVnWzBdLmhvdyA9IFJF R19TQVZFRF9PRkZTRVQ7CisgIGZzLT5yZWdzLnJlZ1swXS5sb2Mub2Zmc2V0 ID0gKGxvbmcpJnNmLT5SRUdfTkFNRShlYXgpIC0gbmV3X2NmYTsKKyAgZnMt PnJlZ3MucmVnWzNdLmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7CisgIGZzLT5y ZWdzLnJlZ1szXS5sb2Mub2Zmc2V0ID0gKGxvbmcpJnNmLT5SRUdfTkFNRShl YngpIC0gbmV3X2NmYTsKKyAgZnMtPnJlZ3MucmVnWzFdLmhvdyA9IFJFR19T QVZFRF9PRkZTRVQ7CisgIGZzLT5yZWdzLnJlZ1sxXS5sb2Mub2Zmc2V0ID0g KGxvbmcpJnNmLT5SRUdfTkFNRShlY3gpIC0gbmV3X2NmYTsKKyAgZnMtPnJl Z3MucmVnWzJdLmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7CisgIGZzLT5yZWdz LnJlZ1syXS5sb2Mub2Zmc2V0ID0gKGxvbmcpJnNmLT5SRUdfTkFNRShlZHgp IC0gbmV3X2NmYTsKKyAgZnMtPnJlZ3MucmVnWzZdLmhvdyA9IFJFR19TQVZF RF9PRkZTRVQ7CisgIGZzLT5yZWdzLnJlZ1s2XS5sb2Mub2Zmc2V0ID0gKGxv bmcpJnNmLT5SRUdfTkFNRShlc2kpIC0gbmV3X2NmYTsKKyAgZnMtPnJlZ3Mu cmVnWzddLmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7CisgIGZzLT5yZWdzLnJl Z1s3XS5sb2Mub2Zmc2V0ID0gKGxvbmcpJnNmLT5SRUdfTkFNRShlZGkpIC0g bmV3X2NmYTsKKyAgZnMtPnJlZ3MucmVnWzVdLmhvdyA9IFJFR19TQVZFRF9P RkZTRVQ7CisgIGZzLT5yZWdzLnJlZ1s1XS5sb2Mub2Zmc2V0ID0gKGxvbmcp JnNmLT5SRUdfTkFNRShlYnApIC0gbmV3X2NmYTsKKyAgZnMtPnJlZ3MucmVn WzhdLmhvdyA9IFJFR19TQVZFRF9PRkZTRVQ7CisgIGZzLT5yZWdzLnJlZ1s4 XS5sb2Mub2Zmc2V0ID0gKGxvbmcpJnNmLT5SRUdfTkFNRShlaXApIC0gbmV3 X2NmYTsKKyAgZnMtPnJldGFkZHJfY29sdW1uID0gODsKKyAgZnMtPnNpZ25h bF9mcmFtZSA9IDE7CisgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKK30KKyNl bmRpZiAvKiBpZmRlZiBfX3g4Nl82NF9fICAqLwotLS0gbGliaXRtL2NvbmZp Z3VyZS50Z3Qub3JpZworKysgbGliaXRtL2NvbmZpZ3VyZS50Z3QKQEAgLTE0 MCw3ICsxNDAsNyBAQAogICAqLSotZ251KiB8ICotKi1rKmJzZCotZ251IFwK ICAgfCAqLSotbmV0YnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1vcGVuYnNk KiBcCiAgIHwgKi0qLXNvbGFyaXMyKiB8ICotKi1zeXN2NCogfCAqLSotaHB1 eDExKiBcCi0gIHwgKi0qLWRhcndpbiogfCAqLSotYWl4KikKKyAgfCAqLSot ZGFyd2luKiB8ICotKi1haXgqIHwgKi0qLWRyYWdvbmZseSopCiAJIyBQT1NJ WCBzeXN0ZW0uICBUaGUgT1MgaXMgc3VwcG9ydGVkLgogCTs7CiAKLS0tIGxp YnN0ZGMrKy12My9hY2luY2x1ZGUubTQub3JpZworKysgbGlic3RkYysrLXYz L2FjaW5jbHVkZS5tNApAQCAtMTk4OSw2ICsxOTg5LDkgQEAKICAgICAgIGRh cndpbiogfCBmcmVlYnNkKikKIAllbmFibGVfY2xvY2FsZV9mbGFnPWRhcndp bgogCTs7CisgICAgICBkcmFnb25mbHkqKQorCWVuYWJsZV9jbG9jYWxlX2Zs YWc9ZHJhZ29uZmx5CisJOzsKICAgICAgIG9wZW5ic2QqKQogCWVuYWJsZV9j bG9jYWxlX2ZsYWc9bmV3bGliCiAJOzsKQEAgLTIwNzUsNiArMjA3OCwyMyBA QAogICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21l c3NhZ2VzX21lbWJlcnMuaAogICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9s b2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjCiAgICAgICBDTU9O RVlfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMu Y2MKKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9u dW1lcmljX21lbWJlcnMuY2MKKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2Fs ZS9nZW5lcmljL3RpbWVfbWVtYmVycy5oCisgICAgICBDVElNRV9DQz1jb25m aWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICBDTE9D QUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2Fs ZV9pbnRlcm5hbC5oCisgICAgICA7OworCisgICAgZHJhZ29uZmx5KQorICAg ICAgQUNfTVNHX1JFU1VMVChkcmFnb25mbHkpCisKKyAgICAgIENMT0NBTEVf SD1jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorICAgICAgQ0xP Q0FMRV9DQz1jb25maWcvbG9jYWxlL2RyYWdvbmZseS9jX2xvY2FsZS5jYwor ICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2NvZGVj dnRfbWVtYmVycy5jYworICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2Fs ZS9nZW5lcmljL2NvbGxhdGVfbWVtYmVycy5jYworICAgICAgQ0NUWVBFX0ND PWNvbmZpZy9sb2NhbGUvZHJhZ29uZmx5L2N0eXBlX21lbWJlcnMuY2MKKyAg ICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdl c19tZW1iZXJzLmgKKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxl L2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVycy5jYworICAgICAgQ01PTkVZX0ND PWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tb25ldGFyeV9tZW1iZXJzLmNjCiAg ICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvbnVtZXJp Y19tZW1iZXJzLmNjCiAgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvZ2Vu ZXJpYy90aW1lX21lbWJlcnMuaAogICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xv Y2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYwotLS0gbGlic3RkYysrLXYz L2NvbmZpZ3VyZS5ob3N0Lm9yaWcKKysrIGxpYnN0ZGMrKy12My9jb25maWd1 cmUuaG9zdApAQCAtMjYwLDYgKzI2MCw5IEBACiAgICAgb3NfaW5jbHVkZV9k aXI9Im9zL2RqZ3BwIgogICAgIGVycm9yX2NvbnN0YW50c19kaXI9Im9zL2Rq Z3BwIgogICAgIDs7CisgIGRyYWdvbmZseSopCisgICAgb3NfaW5jbHVkZV9k aXI9Im9zL2JzZC9kcmFnb25mbHkiCisgICAgOzsKICAgZnJlZWJzZCopCiAg ICAgb3NfaW5jbHVkZV9kaXI9Im9zL2JzZC9mcmVlYnNkIgogICAgIDs7Ci0t LSAvZGV2L251bGwKKysrIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2Ry YWdvbmZseS9jX2xvY2FsZS5jYwpAQCAtMCwwICsxLDI5OSBAQAorLy8gV3Jh cHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAt Ki0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkg aXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lv bi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRp dGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor CisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBD T1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8v IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElT TyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVz LgorLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pA cmVkaGF0LmNvbT4KKworI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJu bworI2luY2x1ZGUgPGNtYXRoPiAgLy8gRm9yIGlzaW5mLCBmaW5pdGUsIGZp bml0ZWYsIGZhYnMKKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIHN0cm9m LCBzdHJ0b2xkCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjc3Rk aW8+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGxpbWl0cz4KKwor I2lmZGVmIF9HTElCQ1hYX0hBVkVfSUVFRUZQX0gKKyNpbmNsdWRlIDxpZWVl ZnAuaD4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lC SUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX2NvbnZl cnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwKKwkJICAgY29uc3QgX19jX2xvY2FsZSYpIHRo cm93KCkKKyAgICB7CisgICAgICAvLyBBc3N1bWVzIF9fcyBmb3JtYXR0ZWQg Zm9yICJDIiBsb2NhbGUuCisgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2Fs ZShMQ19BTEwsIDApOworICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3Ry bGVuKF9fb2xkKSArIDE7CisgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFy W19fbGVuXTsKKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGVuKTsK KyAgICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7CisgICAgICBjaGFyKiBf X3Nhbml0eTsKKyAgICAgIGJvb2wgX19vdmVyZmxvdyA9IGZhbHNlOworCisj aWYgIV9fRkxUX0hBU19JTkZJTklUWV9fCisgICAgICBlcnJubyA9IDA7Cisj ZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfU1RSVE9GCisgICAgICBf X3YgPSBzdHJ0b2YoX19zLCAmX19zYW5pdHkpOworI2Vsc2UKKyAgICAgIGRv dWJsZSBfX2QgPSBzdHJ0b2QoX19zLCAmX19zYW5pdHkpOworICAgICAgX192 ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KF9fZCk7CisjaWZkZWYgX0dMSUJDWFhf SEFWRV9GSU5JVEVGCisgICAgICBpZiAoIWZpbml0ZWYgKF9fdikpCisJX19v dmVyZmxvdyA9IHRydWU7CisjZWxpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZF X0ZJTklURSkKKyAgICAgIGlmICghZmluaXRlIChzdGF0aWNfY2FzdDxkb3Vi bGU+IChfX3YpKSkKKwlfX292ZXJmbG93ID0gdHJ1ZTsKKyNlbGlmIGRlZmlu ZWQgKF9HTElCQ1hYX0hBVkVfSVNJTkYpCisgICAgICBpZiAoaXNpbmYgKHN0 YXRpY19jYXN0PGRvdWJsZT4gKF9fdikpKQorCV9fb3ZlcmZsb3cgPSB0cnVl OworI2Vsc2UKKyAgICAgIGlmIChmYWJzKF9fZCkgPiBudW1lcmljX2xpbWl0 czxmbG9hdD46Om1heCgpKQorCV9fb3ZlcmZsb3cgPSB0cnVlOworI2VuZGlm CisjZW5kaWYgLy8gX0dMSUJDWFhfSEFWRV9TVFJUT0YKKworICAgICAgLy8g X0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjMuIE51 bV9nZXQgb3ZlcmZsb3cgcmVzdWx0LgorICAgICAgaWYgKF9fc2FuaXR5ID09 IF9fcyB8fCAqX19zYW5pdHkgIT0gJ1wwJykKKwl7CisJICBfX3YgPSAwLjBm OworCSAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwl9CisgICAgICBl bHNlIGlmIChfX292ZXJmbG93CisjaWYgX19GTFRfSEFTX0lORklOSVRZX18K KwkgICAgICAgfHwgX192ID09IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5m aW5pdHkoKQorCSAgICAgICB8fCBfX3YgPT0gLW51bWVyaWNfbGltaXRzPGZs b2F0Pjo6aW5maW5pdHkoKQorI2Vsc2UKKwkgICAgICAgfHwgKChfX3YgPiAx LjBmIHx8IF9fdiA8IC0xLjBmKSAmJiBlcnJubyA9PSBFUkFOR0UpCisjZW5k aWYKKwkgICAgICApCisJeworCSAgaWYgKF9fdiA+IDAuMGYpCisJICAgIF9f diA9IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CisJICBlbHNlCisJ ICAgIF9fdiA9IC1udW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworCSAg X19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwl9CisKKyAgICAgIHNldGxv Y2FsZShMQ19BTEwsIF9fc2F2KTsKKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsK KyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX2NvbnZl cnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmKSB0 aHJvdygpCisgICAgeworICAgICAgLy8gQXNzdW1lcyBfX3MgZm9ybWF0dGVk IGZvciAiQyIgbG9jYWxlLgorICAgICAgY2hhciogX19vbGQgPSBzZXRsb2Nh bGUoTENfQUxMLCAwKTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0 cmxlbihfX29sZCkgKyAxOworICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hh cltfX2xlbl07CisgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xlbik7 CisgICAgICBzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworICAgICAgY2hhciog X19zYW5pdHk7CisKKyNpZiAhX19EQkxfSEFTX0lORklOSVRZX18KKyAgICAg IGVycm5vID0gMDsKKyNlbmRpZgorCisgICAgICBfX3YgPSBzdHJ0b2QoX19z LCAmX19zYW5pdHkpOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJ Ql9ERUZFQ1RTCisgICAgICAvLyAyMy4gTnVtX2dldCBvdmVyZmxvdyByZXN1 bHQuCisgICAgICBpZiAoX19zYW5pdHkgPT0gX19zIHx8ICpfX3Nhbml0eSAh PSAnXDAnKQorCXsKKwkgIF9fdiA9IDAuMDsKKwkgIF9fZXJyID0gaW9zX2Jh c2U6OmZhaWxiaXQ7CisJfQorICAgICAgZWxzZSBpZiAoCisjaWYgX19EQkxf SEFTX0lORklOSVRZX18KKwkgICAgICAgX192ID09IG51bWVyaWNfbGltaXRz PGRvdWJsZT46OmluZmluaXR5KCkKKwkgICAgICAgfHwgX192ID09IC1udW1l cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQorI2Vsc2UKKwkgICAg ICAgKF9fdiA+IDEuMCB8fCBfX3YgPCAtMS4wKSAmJiBlcnJubyA9PSBFUkFO R0UpCisjZW5kaWYKKwl7CisJICBpZiAoX192ID4gMC4wKQorCSAgICBfX3Yg PSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsKKwkgIGVsc2UKKwkg ICAgX192ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOworCSAg X19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwl9CisKKyAgICAgIHNldGxv Y2FsZShMQ19BTEwsIF9fc2F2KTsKKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsK KyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX2NvbnZl cnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsCisJ CSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgY29uc3QgX19jX2xvY2Fs ZSYpIHRocm93KCkKKyAgICB7CisgICAgICAvLyBBc3N1bWVzIF9fcyBmb3Jt YXR0ZWQgZm9yICJDIiBsb2NhbGUuCisgICAgICBjaGFyKiBfX29sZCA9IHNl dGxvY2FsZShMQ19BTEwsIDApOworICAgICAgY29uc3Qgc2l6ZV90IF9fbGVu ID0gc3RybGVuKF9fb2xkKSArIDE7CisgICAgICBjaGFyKiBfX3NhdiA9IG5l dyBjaGFyW19fbGVuXTsKKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9f bGVuKTsKKyAgICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7CisKKyNpZiAh X19MREJMX0hBU19JTkZJTklUWV9fCisgICAgICBlcnJubyA9IDA7CisjZW5k aWYKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSEFWRV9TVFJUT0xEKSAmJiAh ZGVmaW5lZChfR0xJQkNYWF9IQVZFX0JST0tFTl9TVFJUT0xEKQorICAgICAg Y2hhciogX19zYW5pdHk7CisgICAgICBfX3YgPSBzdHJ0b2xkKF9fcywgJl9f c2FuaXR5KTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVG RUNUUworICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0Lgor ICAgICAgaWYgKF9fc2FuaXR5ID09IF9fcyB8fCAqX19zYW5pdHkgIT0gJ1ww JykKKyNlbHNlCisgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+Ojpp bnRfdHlwZSBpbnRfdHlwZTsKKyAgICAgIGludCBfX3AgPSBzc2NhbmYoX19z LCAiJUxmIiwgJl9fdik7CisKKyAgICAgIGlmICghX19wIHx8IHN0YXRpY19j YXN0PGludF90eXBlPihfX3ApID09IGNoYXJfdHJhaXRzPGNoYXI+Ojplb2Yo KSkKKyNlbmRpZgorCXsKKwkgIF9fdiA9IDAuMGw7CisJICBfX2VyciA9IGlv c19iYXNlOjpmYWlsYml0OworCX0KKyAgICAgICBlbHNlIGlmICgKKyNpZiBf X0xEQkxfSEFTX0lORklOSVRZX18KKwkJX192ID09IG51bWVyaWNfbGltaXRz PGxvbmcgZG91YmxlPjo6aW5maW5pdHkoKQorCQl8fCBfX3YgPT0gLW51bWVy aWNfbGltaXRzPGxvbmcgZG91YmxlPjo6aW5maW5pdHkoKSkKKyNlbHNlCisJ CShfX3YgPiAxLjBsIHx8IF9fdiA8IC0xLjBsKSAmJiBlcnJubyA9PSBFUkFO R0UpCisjZW5kaWYKKwl7CisJICBpZiAoX192ID4gMC4wbCkKKwkgICAgX192 ID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXgoKTsKKwkgIGVs c2UKKwkgICAgX192ID0gLW51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6 bWF4KCk7CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCX0KKwor ICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworICAgICAgZGVsZXRl IFtdIF9fc2F2OworICAgIH0KKworCisgIC8qICBEcmFnb25GbHkncyBpbXBs ZW1lbnRhdGlvbiBvZiBzZXRsb2NhbGUgd29uJ3QgYWNjZXB0IHNvbWV0aGlu ZyBsaWtlCisgICAgICAiZGVfREUiLiAgQWNjb3JkaW5nIHRvIG5scyBtYW5w YWdlLCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGlzOgorICAgICAgbGFuZ3VhZ2Vb X3RlcnJpdG9yeV1bLmNvZGVzZXRdW0Btb2RpZmllcl0sIGJ1dCBpdCBzZWVt cyB0aGF0IGJvdGgKKyAgICAgIHRoZSBfdGVycml0b3J5IGFuZCAuY29kZXNl dCBjb21wb25lbnRzIGFyZSByZXF1aXJlZC4KKyAgICAgIAorICAgICAgQXMg YW4gYXR0ZW1wdCB0byBjb3JyZWN0IGZvciB0aGlzLCB3ZSdsbCB0YWNrIG9u ICIuVVRGLTgiIGlmIAorICAgICAgYSBwZXJpb2QgaXMgbm90IGRldGVjdGVk IGluIHRoZSBsb2NhbGUgc3RyaW5nLiAgCisKKyAgICAgIFRoZXJlIGFyZSBu byBsb2NhbGVzIHdpdGggbW9kaWZpZXJzIG9uIERyYWdvbkZseSBzbyBpZiBm b3VuZCwgdGhleQorICAgICAgd2lsbCBqdXN0IGJlIHN0cmlwcGVkIG9mZiBz aWxlbnRseS4gIGUuZyAiZGVfREVAZXVybyIgd2lsbCBiZSByZWR1Y2VkCisg ICAgICB0byAiZGVfREUiLiAgVGhlIFVURi04IGRlZmF1bHQgd291bGQgYmUg YWRkZWQgYWZ0ZXIgdGhhdC4KKyAgKi8KKworICB2b2lkCisgIGxvY2FsZTo6 ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2Ms IGNvbnN0IGNoYXIqIF9fcywKKwkJCQkgICAgX19jX2xvY2FsZSkKKyAgewor ICAgIGNvbnN0IHNpemVfdCBzaXplX19zID0gKF9fcyA9PSBOVUxMKSA/IDEg OiBzdHJsZW4gKF9fcyk7CisgICAgY29uc3QgY2hhciBVVEY4W10gPSAiLlVU Ri04IjsKKyAgICBjaGFyIGxvY2Fsc3BlY1tzaXplX19zICsgNiArIDFdOwor ICAgIAorICAgIGlmIChfX3MgPT0gTlVMTCkgeworICAgICAgIGxvY2Fsc3Bl Y1swXSA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICBzdHJjcHkgKGxv Y2Fsc3BlYywgX19zKTsKKyAgICAgICBjaGFyICogcGNoID0gc3RyY2hyIChs b2NhbHNwZWMsICdAJyk7CisgICAgICAgaWYgKHBjaCAhPSBOVUxMKQorICAg ICAgICAgICpwY2ggPSAwOworCisgICAgICAgaWYgKCAgKHN0cmNociAoX19z LCAnLicpID09IE5VTEwpCisgICAgICAgICAgJiYgKHN0cmNtcCAoX19zLCAi QyIpICE9IDApCisgICAgICAgICAgJiYgKHN0cmNtcCAoX19zLCAiUE9TSVgi KSAhPSAwKSkKKyAgICAgICAgICBzdHJuY2F0IChsb2NhbHNwZWMsIFVURjgs IDYpOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKiByZXN1bHQgPSBzdGQ6 OnNldGxvY2FsZShMQ19BTEwsIGxvY2Fsc3BlYyk7CisgICAgCisgICAgaWYg KChzdHJjbXAocmVzdWx0LCAiQyIpICE9IDApICYmIChzdHJjbXAgKHJlc3Vs dCwgbG9jYWxzcGVjKSAhPSAwKSkKKyAgICAgIF9fdGhyb3dfcnVudGltZV9l cnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAi CisJCQkgICAgIm5hbWUgbm90IHZhbGlkIikpOworICAgIF9fY2xvYyA9IDA7 CisgIH0KKworICB2b2lkCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lf Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICB7IF9fY2xvYyA9IDA7 IH0KKworICBfX2NfbG9jYWxlCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25l X2NfbG9jYWxlKF9fY19sb2NhbGUmKSB0aHJvdygpCisgIHsgcmV0dXJuIF9f Y19sb2NhbGUoKTsgfQorCisgIF9fY19sb2NhbGUKKyAgbG9jYWxlOjpmYWNl dDo6X1NfbGNfY3R5cGVfY19sb2NhbGUoX19jX2xvY2FsZSwgY29uc3QgY2hh ciopCisgIHsgcmV0dXJuIF9fY19sb2NhbGUoKTsgfQorCitfR0xJQkNYWF9F TkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVz cGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQor eworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICBjb25z dCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVN X0NBVEVHT1JJRVNdID0KKyAgICB7CisgICAgICAiTENfQ1RZUEUiLAorICAg ICAgIkxDX05VTUVSSUMiLAorICAgICAgIkxDX1RJTUUiLAorICAgICAgIkxD X0NPTExBVEUiLAorICAgICAgIkxDX01PTkVUQVJZIiwKKyAgICAgICJMQ19N RVNTQUdFUyIKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZF UlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGQgX0dMSUJD WFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KKworICBjb25zdCBjaGFyKiBjb25zdCogY29uc3Qg bG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9u YW1lczsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8v IG5hbWVzcGFjZQorCisvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAor I2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorI2RlZmluZSBf R0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgZXh0ZXJuICJD IiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2Ri bCkpKQorX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3Rv X3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2Nv bnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOwor I2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAotLS0gL2Rl di9udWxsCisrKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9kcmFnb25m bHkvY3R5cGVfbWVtYmVycy5jYwpAQCAtMCwwICsxLDE3MyBAQAorLy8gc3Rk OjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAt Ki0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkg aXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lv bi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRp dGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor CisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBD T1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8v IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElT TyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rp b25zLgorLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJr b3pAcmVkaGF0LmNvbT4KKworI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRl IDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorI2luY2x1ZGUgPGNzdGRs aWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjc3RkaW8+CisK K25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQor eworICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0 aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgLy8gdmFyaW91cyAv Y29uZmlnL29zLyogZmlsZXMuCisKKyAgY3R5cGVfYnluYW1lPGNoYXI+Ojpj dHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQor ICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpIAorICB7IAkJCisg ICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3Ry Y21wKF9fcywgIlBPU0lYIikgIT0gMCkKKyAgICAgIHsKKwl0aGlzLT5fU19k ZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKwl0 aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5 cGUsIF9fcyk7IAorICAgICAgfQorICB9CisKKyAgY3R5cGVfYnluYW1lPGNo YXI+Ojp+Y3R5cGVfYnluYW1lKCkKKyAgeyB9CisKKyNpZmRlZiBfR0xJQkNY WF9VU0VfV0NIQVJfVCAgCisgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5 cGUKKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soCisg ICAgY29uc3QgbWFzayBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgX19t KSBjb25zdCB0aHJvdygpCisgIHsKKyAgICAvLyBEcmFnb25GbHkgdXNlcyB0 aGUgc2FtZSBjb2RlcyBmb3IgJ2NoYXInIGFzICd3Y2hhcl90Jywgc28gdGhp cyByb3V0aW5lCisgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWQuCisgICAgcmV0 dXJuIF9fd21hc2tfdHlwZSgpOworICB9OworICAKKyAgd2NoYXJfdAorICBj dHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QK KyAgeyByZXR1cm4gdG93dXBwZXIoX19jKTsgfQorCisgIGNvbnN0IHdjaGFy X3QqCisgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9f bG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisgIHsKKyAgICB3aGls ZSAoX19sbyA8IF9faGkpCisgICAgICB7CisgICAgICAgICpfX2xvID0gdG93 dXBwZXIoKl9fbG8pOworICAgICAgICArK19fbG87CisgICAgICB9CisgICAg cmV0dXJuIF9faGk7CisgIH0KKyAgCisgIHdjaGFyX3QKKyAgY3R5cGU8d2No YXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisgIHsgcmV0 dXJuIHRvd2xvd2VyKF9fYyk7IH0KKyAgCisgIGNvbnN0IHdjaGFyX3QqCisg IGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNv bnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisgIHsKKyAgICB3aGlsZSAoX19s byA8IF9faGkpCisgICAgICB7CisgICAgICAgICpfX2xvID0gdG93bG93ZXIo Kl9fbG8pOworICAgICAgICArK19fbG87CisgICAgICB9CisgICAgcmV0dXJu IF9faGk7CisgIH0KKworICB3Y2hhcl90CisgIGN0eXBlPHdjaGFyX3Q+OjoK KyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisgIHsgcmV0dXJuIF9NX3dp ZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisKKyAg Y29uc3QgY2hhciogCisgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgZG9fd2lkZW4o Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCog X19kZXN0KSBjb25zdAorICB7CisgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQor ICAgICAgeworCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNp Z25lZCBjaGFyPigqX19sbyldOworCSsrX19sbzsKKwkrK19fZGVzdDsKKyAg ICAgIH0KKyAgICByZXR1cm4gX19oaTsKKyAgfQorCisgIGNoYXIKKyAgY3R5 cGU8d2NoYXJfdD46OgorICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFy IF9fZGZhdWx0KSBjb25zdAorICB7IAorICAgIGlmIChfX3djID49IDAgJiYg X193YyA8IDEyOCAmJiBfTV9uYXJyb3dfb2spCisgICAgICByZXR1cm4gX01f bmFycm93W19fd2NdOworICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3dj KTsKKyAgICByZXR1cm4gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRp Y19jYXN0PGNoYXI+KF9fYykpOyAKKyAgfQorCisgIGNvbnN0IHdjaGFyX3Qq CisgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgZG9fbmFycm93KGNvbnN0IHdjaGFy X3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQs IAorCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisgIHsKKyAgICBpZiAoX01f bmFycm93X29rKQorICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorCXsKKwkg IGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorCSAgICAqX19kZXN0 ID0gX01fbmFycm93WypfX2xvXTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAg IGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisJICAgICAgKl9fZGVz dCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFy PihfX2MpKTsKKwkgICAgfQorCSAgKytfX2xvOworCSAgKytfX2Rlc3Q7CisJ fQorICAgIGVsc2UKKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKwl7CisJ ICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworCSAgKl9fZGVzdCA9 IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihf X2MpKTsKKwkgICsrX19sbzsKKwkgICsrX19kZXN0OworCX0KKyAgICByZXR1 cm4gX19oaTsKKyAgfQorCisgIHZvaWQKKyAgY3R5cGU8d2NoYXJfdD46Ol9N X2luaXRpYWxpemVfY3R5cGUoKSB0aHJvdygpCisgIHsKKyAgICB3aW50X3Qg X19pOworICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKyAg ICAgIHsKKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKwlpZiAoX19j ID09IEVPRikKKwkgIGJyZWFrOworCWVsc2UKKwkgIF9NX25hcnJvd1tfX2ld ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKyAgICAgIH0KKyAgICBpZiAo X19pID09IDEyOCkKKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisgICAg ZWxzZQorICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisgICAgZm9yIChz aXplX3QgX19pID0gMDsKKwkgX19pIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNp emVvZih3aW50X3QpOyArK19faSkKKyAgICAgIF9NX3dpZGVuW19faV0gPSBi dG93YyhfX2kpOworICB9CisjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hB Ul9UCit9Ci0tLSAvZGV2L251bGwKKysrIGxpYnN0ZGMrKy12My9jb25maWcv b3MvYnNkL2RyYWdvbmZseS9jdHlwZV9iYXNlLmgKQEAgLTAsMCArMSw1OCBA QAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJp Z2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor Ly8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBM aWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy IHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9u KQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAz LCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMg ZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlv biwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkg RXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRo ZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3Rp dmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2Nh bGVzCisvLworCisvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vz ci9pbmNsdWRlL2N0eXBlLmggb24gRHJhZ29uRmx5LgorCituYW1lc3BhY2Ug c3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8vIEBicmllZiAgQmFz ZSBjbGFzcyBmb3IgY3R5cGUuCisgIHN0cnVjdCBjdHlwZV9iYXNlCisgIHsK KyAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisgICAgdHlwZWRlZiBj b25zdCBpbnQqCQlfX3RvX3R5cGU7CisKKyAgICAvLyBOQjogT2Zmc2V0cyBp bnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIg c2l6ZQorICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhp cywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCisgICAgdHlwZWRlZiB1bnNpZ25l ZCBsb25nCW1hc2s7CisgICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIJPSBf Q1RZUEVfVTsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciAJPSBfQ1RZ UEVfTDsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSAJPSBfQ1RZUEVf QTsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCAJPSBfQ1RZUEVfRDsK KyAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgCT0gX0NUWVBFX1g7Cisg ICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgCT0gX0NUWVBFX1M7CisgICAg c3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgCT0gX0NUWVBFX1I7CisgICAgc3Rh dGljIGNvbnN0IG1hc2sgZ3JhcGggCT0gX0NUWVBFX0EgfCBfQ1RZUEVfRCB8 IF9DVFlQRV9QOworICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsIAk9IF9D VFlQRV9DOworICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0IAk9IF9DVFlQ RV9QOworICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtIAk9IF9DVFlQRV9B IHwgX0NUWVBFX0Q7CisgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0Vf VkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKLS0tIC9kZXYvbnVsbAorKysgbGli c3RkYysrLXYzL2NvbmZpZy9vcy9ic2QvZHJhZ29uZmx5L2N0eXBlX2NvbmZp Z3VyZV9jaGFyLmNjCkBAIC0wLDAgKzEsOTkgQEAKKy8vIExvY2FsZSBzdXBw b3J0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxNCBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGli cmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2 ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRl ciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVk IGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUg R0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMu MSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5 IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMg YW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNl ZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiog QGZpbGUgY3R5cGVfY29uZmlndXJlX2NoYXIuY2MgKi8KKworLy8KKy8vIElT TyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisKKyNpbmNsdWRlIDxs b2NhbGU+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5n PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVs dCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKy8v IEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5 cGUuaAorICAKKyAgY29uc3QgY3R5cGVfYmFzZTo6bWFzayoKKyAgY3R5cGU8 Y2hhcj46OmNsYXNzaWNfdGFibGUoKSB0aHJvdygpCisgIHsgcmV0dXJuIDA7 IH0KKworICBjdHlwZTxjaGFyPjo6Y3R5cGUoX19jX2xvY2FsZSwgY29uc3Qg bWFzayogX190YWJsZSwgYm9vbCBfX2RlbCwgCisJCSAgICAgc2l6ZV90IF9f cmVmcykgCisgIDogZmFjZXQoX19yZWZzKSwgX01fZGVsKF9fdGFibGUgIT0g MCAmJiBfX2RlbCksIAorICBfTV90b3VwcGVyKE5VTEwpLCBfTV90b2xvd2Vy KE5VTEwpLCAKKyAgX01fdGFibGUoX190YWJsZSA/IF9fdGFibGUgOiBjbGFz c2ljX3RhYmxlKCkpIAorICB7IAorICAgIG1lbXNldChfTV93aWRlbiwgMCwg c2l6ZW9mKF9NX3dpZGVuKSk7CisgICAgX01fd2lkZW5fb2sgPSAwOworICAg IG1lbXNldChfTV9uYXJyb3csIDAsIHNpemVvZihfTV9uYXJyb3cpKTsKKyAg ICBfTV9uYXJyb3dfb2sgPSAwOworICB9CisKKyAgY3R5cGU8Y2hhcj46OmN0 eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUsIGJvb2wgX19kZWwsIHNpemVfdCBf X3JlZnMpIAorICA6IGZhY2V0KF9fcmVmcyksIF9NX2RlbChfX3RhYmxlICE9 IDAgJiYgX19kZWwpLCAKKyAgX01fdG91cHBlcihOVUxMKSwgX01fdG9sb3dl cihOVUxMKSwgCisgIF9NX3RhYmxlKF9fdGFibGUgPyBfX3RhYmxlIDogY2xh c3NpY190YWJsZSgpKSAKKyAgeyAKKyAgICBtZW1zZXQoX01fd2lkZW4sIDAs IHNpemVvZihfTV93aWRlbikpOworICAgIF9NX3dpZGVuX29rID0gMDsKKyAg ICBtZW1zZXQoX01fbmFycm93LCAwLCBzaXplb2YoX01fbmFycm93KSk7Cisg ICAgX01fbmFycm93X29rID0gMDsKKyAgfQorCisgIGNoYXIKKyAgY3R5cGU8 Y2hhcj46OmRvX3RvdXBwZXIoY2hhciBfX2MpIGNvbnN0CisgIHsgcmV0dXJu IDo6dG91cHBlcigoaW50KSBfX2MpOyB9CisKKyAgY29uc3QgY2hhcioKKyAg Y3R5cGU8Y2hhcj46OmRvX3RvdXBwZXIoY2hhciogX19sb3csIGNvbnN0IGNo YXIqIF9faGlnaCkgY29uc3QKKyAgeworICAgIHdoaWxlIChfX2xvdyA8IF9f aGlnaCkKKyAgICAgIHsKKwkqX19sb3cgPSA6OnRvdXBwZXIoKGludCkgKl9f bG93KTsKKwkrK19fbG93OworICAgICAgfQorICAgIHJldHVybiBfX2hpZ2g7 CisgIH0KKworICBjaGFyCisgIGN0eXBlPGNoYXI+Ojpkb190b2xvd2VyKGNo YXIgX19jKSBjb25zdAorICB7IHJldHVybiA6OnRvbG93ZXIoKGludCkgX19j KTsgfQorCisgIGNvbnN0IGNoYXIqIAorICBjdHlwZTxjaGFyPjo6ZG9fdG9s b3dlcihjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAor ICB7CisgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQorICAgICAgeworCSpf X2xvdyA9IDo6dG9sb3dlcigoaW50KSAqX19sb3cpOworCSsrX19sb3c7Cisg ICAgICB9CisgICAgcmV0dXJuIF9faGlnaDsKKyAgfQorCitfR0xJQkNYWF9F TkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCi0tLSAvZGV2 L251bGwKKysrIGxpYnN0ZGMrKy12My9jb25maWcvb3MvYnNkL2RyYWdvbmZs eS9jdHlwZV9pbmxpbmUuaApAQCAtMCwwICsxLDEzMyBAQAorLy8gTG9jYWxl IHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDE0 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhp cyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxh dGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8v IFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdy YW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGlu IHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgor Ly8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBh IGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZ SU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5v dCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK Ky8qKiBAZmlsZSBiaXRzL2N0eXBlX2lubGluZS5oCisgKiAgVGhpcyBpcyBh biBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGli cmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBk aXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJ U08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworCisvLyBjdHlwZSBi aXRzIHRvIGJlIGlubGluZWQgZ28gaGVyZS4gTm9uLWlubGluYWJsZSAoaWUg dmlydHVhbCBkb18qKQorLy8gZnVuY3Rpb25zIGdvIGluIGN0eXBlLmNjCisK K25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQor eworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICBib29s CisgIGN0eXBlPGNoYXI+OjoKKyAgaXMobWFzayBfX20sIGNoYXIgX19jKSBj b25zdAorICB7CisgICAgaWYgKF9NX3RhYmxlKQorICAgICAgcmV0dXJuIF9N X3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19t OworICAgIGVsc2UKKyAgICAgIHJldHVybiBfX2lzdHlwZShfX2MsIF9fbSk7 CisgIH0KKworICBjb25zdCBjaGFyKgorICBjdHlwZTxjaGFyPjo6CisgIGlz KGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sq IF9fdmVjKSBjb25zdAorICB7CisgICAgaWYgKF9NX3RhYmxlKQorICAgICAg d2hpbGUgKF9fbG93IDwgX19oaWdoKQorCSpfX3ZlYysrID0gX01fdGFibGVb c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKKyAgICBl bHNlCisgICAgICBmb3IgKDtfX2xvdyA8IF9faGlnaDsgKytfX3ZlYywgKytf X2xvdykKKwl7CisJICAqX192ZWMgPSBfX21hc2tydW5lICgqX19sb3csIHVw cGVyIHwgbG93ZXIgfCBhbHBoYSB8IGRpZ2l0IHwgeGRpZ2l0CisJCQkgICAg ICAgfCBzcGFjZSB8IHByaW50IHwgZ3JhcGggfCBjbnRybCB8IHB1bmN0IHwg YWxudW0pOworCX0KKyAgICByZXR1cm4gX19oaWdoOworICB9CisKKyAgY29u c3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OgorICBzY2FuX2lzKG1hc2sgX19t LCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25z dAorICB7CisgICAgaWYgKF9NX3RhYmxlKQorICAgICAgd2hpbGUgKF9fbG93 IDwgX19oaWdoCisJICAgICAmJiAhKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSkKKwkrK19fbG93OworICAg IGVsc2UKKyAgICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiAhdGhpcy0+ aXMoX19tLCAqX19sb3cpKQorCSsrX19sb3c7CisgICAgcmV0dXJuIF9fbG93 OworICB9CisKKyAgY29uc3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OgorICBz Y2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNo YXIqIF9faGlnaCkgY29uc3QKKyAgeworICAgIGlmIChfTV90YWJsZSkKKyAg ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAorCSAgICAgJiYgKF9NX3RhYmxl W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSAh PSAwKQorCSsrX19sb3c7CisgICAgZWxzZQorICAgICAgd2hpbGUgKF9fbG93 IDwgX19oaWdoICYmIHRoaXMtPmlzKF9fbSwgKl9fbG93KSAhPSAwKQorCSsr X19sb3c7CisgICAgcmV0dXJuIF9fbG93OworICB9CisKKyNpZmRlZiBfR0xJ QkNYWF9VU0VfV0NIQVJfVAorICBpbmxpbmUgYm9vbAorICBjdHlwZTx3Y2hh cl90Pjo6CisgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QK KyAgeworICAgIHJldHVybiBfX2lzdHlwZSAoX19jLCBfX20pOworICB9CisK KyAgaW5saW5lIGNvbnN0IHdjaGFyX3QqCisgIGN0eXBlPHdjaGFyX3Q+OjoK KyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCog X19oaSwgbWFzayogX192ZWMpIGNvbnN0CisgIHsKKyAgICBmb3IgKDsgX19s byA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKyAgICAgICpfX3ZlYyA9IF9f bWFza3J1bmUgKCpfX2xvLCB1cHBlciB8IGxvd2VyIHwgYWxwaGEgfCBkaWdp dCB8IHhkaWdpdAorCQkJICAgfCBzcGFjZSB8IHByaW50IHwgZ3JhcGggfCBj bnRybCB8IHB1bmN0IHwgYWxudW0pOworICAgIHJldHVybiBfX2hpOworICB9 CisKKyAgaW5saW5lIGNvbnN0IHdjaGFyX3QqCisgIGN0eXBlPHdjaGFyX3Q+ OjoKKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19s bywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKyAgeworICAgIHdoaWxl IChfX2xvIDwgX19oaSAmJiAhIF9faXN0eXBlICgqX19sbywgX19tKSkKKyAg ICAgICsrX19sbzsKKyAgICByZXR1cm4gX19sbzsKKyAgfQorCisgIGlubGlu ZSBjb25zdCB3Y2hhcl90KgorICBjdHlwZTx3Y2hhcl90Pjo6CisgIGRvX3Nj YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKyAgeworICAgIHdoaWxlIChfX2xv IDwgX19oaSAmJiBfX2lzdHlwZSAoKl9fbG8sIF9fbSkpCisgICAgICArK19f bG87CisgICAgcmV0dXJuIF9fbG87CisgIH0KKyNlbmRpZgorCitfR0xJQkNY WF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCi0tLSAv ZGV2L251bGwKKysrIGxpYnN0ZGMrKy12My9jb25maWcvb3MvYnNkL2RyYWdv bmZseS9vc19kZWZpbmVzLmgKQEAgLTAsMCArMSwzMiBAQAorLy8gU3BlY2lm aWMgZGVmaW5pdGlvbnMgZm9yIEJTRCAgLSotIEMrKyAtKi0KKworLy8gQ29w eXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMr KyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0 aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lv biAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lv bnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2Vw dGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJh cnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2Vl IHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3Bl Y3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisKKworI2lmbmRlZiBfR0xJQkNYWF9PU19ERUZJTkVT CisjZGVmaW5lIF9HTElCQ1hYX09TX0RFRklORVMgMQorCisvLyBTeXN0ZW0t c3BlY2lmaWMgI2RlZmluZSwgdHlwZWRlZnMsIGNvcnJlY3Rpb25zLCBldGMs IGdvIGhlcmUuICBUaGlzCisvLyBmaWxlIHdpbGwgY29tZSBiZWZvcmUgYWxs IG90aGVycy4KKworI2VuZGlmCg== --------------020000080005020804090601--