From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 81107 invoked by alias); 1 Feb 2019 11:33:08 -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 81096 invoked by uid 89); 1 Feb 2019 11:33:07 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.1 required=5.0 tests=BAYES_00,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,SPF_PASS autolearn=ham version=3.3.2 spammy=D*inria.fr, warned, spite X-HELO: mail3-relais-sop.national.inria.fr Received: from mail3-relais-sop.national.inria.fr (HELO mail3-relais-sop.national.inria.fr) (192.134.164.104) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 01 Feb 2019 11:33:01 +0000 Received: from grove.saclay.inria.fr ([193.55.177.244]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 01 Feb 2019 12:32:58 +0100 Date: Fri, 01 Feb 2019 11:33:00 -0000 From: Marc Glisse To: gcc-patches@gcc.gnu.org Subject: Move -Wmaybe-uninitialized to -Wextra Message-ID: User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-225021371-1549020778=:7849" X-SW-Source: 2019-02/txt/msg00020.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-225021371-1549020778=:7849 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 6849 Hello, first, I expect this to be controversial, so feel free to complain. The description of -Wall says "This enables all the warnings about constructions that some users consider questionable, and that are easy to avoid (or modify to prevent the warning), even in conjunction with macros." And the description of -Wmaybe-uninitialized "For an automatic variable, if there exists a path from the function entry to a use of the variable that is initialized, but there exist some other paths for which the variable is not initialized, the compiler emits a warning if it cannot prove the uninitialized paths are not executed at run time. These warnings are made optional because GCC is not smart enough to see all the reasons why the code might be correct in spite of appearing to have an error." -Wmaybe-uninitialized generates false positives, we can tweak the compiler to reduce them, but there will always be some, that's in the nature of this warning. These false positives are not easy to avoid, as required to be part of -Wall. Avoiding them, when it is possible at all, requires not just a syntactic tweak, like adding parentheses, but a semantic change that can make the code worse. Initializing something that does not need it is extra code (increases code size and running time). It also prevents better tools from detecting true uninitialized uses, either static analyzers or runtime checkers (sanitizer, valgrind). This message concentrates on the negatives, but that doesn't mean I consider -Wmaybe-uninitialized as useless. It can find true uninitialized uses. And even some false positives can point at places where we can help the compiler generate better code (say with a default __builtin_unreachable case in a switch). I did in the past contribute patches to make it warn more often, and I might do so again in the future. My opinion is that -Wmaybe-uninitialized would serve its purpose better as part of -Wextra. People tend to use -Wall with -Werror (either explicitly or implicitly by modifying the code until all warnings are gone). What I see currently in projects where I participate is that -Wmaybe-uninitialized is making things worse. People don't investigate deeply the cause of the warning, they just go for whatever "quick-fix" makes the compiler shut up. Quite often, this involves extra code that is less readable and performs worse, while it didn't even "fix" what caused the warning, it just randomly ended up with code where the compiler doesn't warn (possibly because the function got bigger, which changed inlining decisions...). If the warning is not enabled by default so much but only when people are ready to investigate any warning thoroughly, the quickfix mentality is less likely to be present. People using -Wmaybe-uninitialized need to be willing to ignore false positives, or disable them with pragmas. Note that similar arguments may apply to some other warnings that somehow made their way into -Wall when they shouldn't have, but for now I am only proposing to move -Wmaybe-uninitialized. Some people tend to consider that if a warning is not part of -Wall, it might as well not exist. Obviously I disagree with that. ------- Now the actual patch. Surprisingly, the middle-end puts both Wuninitialized and Wmaybe-uninitialized in Wextra, it is the C-family of front-ends that puts them in Wall. It also makes Wuninitialized enable Wmaybe-uninitialized, which is backwards (it made sense historically), Wuninitialized has much fewer false positives, and if we are willing to be warned about possibly uninitialized uses, we certainly also want warnings about uninitialized uses that are certain. So I am switching the enabling relation between those 2, and enabling only Wuninitialized at Wall. If the patch gets in, this will of course require a mention in the release notes. I changed a set of tests based on a mix of grep and seeing what failed make check. The exact list may not be optimal. gcc/ChangeLog: 2019-02-01 Marc Glisse * common.opt (Wuninitialized): Enable with Wmaybe-uninitialized. (Wmaybe-uninitialized): Enable with Wextra. * doc/invoke.texi: Update implications between Wuninitialized, Wmaybe-uninitialized, Wall and Wextra. gcc/c-family/ChangeLog: 2019-02-01 Marc Glisse * c.opt (Wmaybe-uninitialized): Enable with Wextra. gcc/testsuite/ChangeLog: 2019-02-01 Marc Glisse * c-c++-common/pr69543-1.c: Use -Wmaybe-uninitialized. * c-c++-common/pr69543-2.c: Likewise. * c-c++-common/pr69543-3.c: Likewise. * c-c++-common/pr69543-4.c: Likewise. * c-c++-common/uninit-17.c: Likewise. * g++.dg/pr48484.C: Likewise. * g++.dg/uninit-pred-1_b.C: Likewise. * g++.dg/uninit-pred-2_b.C: Likewise. * g++.dg/uninit-pred-3_b.C: Likewise. * g++.dg/warn/Wuninitialized-5.C: Likewise. * g++.dg/warn/Wuninitialized-6.C: Likewise. * g++.dg/warn/Wuninitialized-9.C: Likewise. * gcc.dg/gomp/pr72781.c: Likewise. * gcc.dg/pr18501.c: Likewise. * gcc.dg/pr39666-2.c: Likewise. * gcc.dg/pr45083.c: Likewise. * gcc.dg/pr57149.c: Likewise. * gcc.dg/pr59924.c: Likewise. * gcc.dg/pr69543.c: Likewise. * gcc.dg/uninit-11-O0.c: Likewise. * gcc.dg/uninit-11.c: Likewise. * gcc.dg/uninit-16.c: Likewise. * gcc.dg/uninit-17.c: Likewise. * gcc.dg/uninit-18.c: Likewise. * gcc.dg/uninit-19.c: Likewise. * gcc.dg/uninit-6-O0.c: Likewise. * gcc.dg/uninit-pr19430-2.c: Likewise. * gcc.dg/uninit-pr19430-O0.c: Likewise. * gcc.dg/uninit-pr19430.c: Likewise. * gcc.dg/uninit-pr20644-O0.c: Likewise. * gcc.dg/uninit-pred-2_a.c: Likewise. * gcc.dg/uninit-pred-2_b.c: Likewise. * gcc.dg/uninit-pred-2_c.c: Likewise. * gcc.dg/uninit-pred-3_a.c: Likewise. * gcc.dg/uninit-pred-3_b.c: Likewise. * gcc.dg/uninit-pred-3_c.c: Likewise. * gcc.dg/uninit-pred-3_d.c: Likewise. * gcc.dg/uninit-pred-3_e.c: Likewise. * gcc.dg/uninit-pred-4_a.c: Likewise. * gcc.dg/uninit-pred-4_b.c: Likewise. * gcc.dg/uninit-pred-5_a.c: Likewise. * gcc.dg/uninit-pred-5_b.c: Likewise. * gcc.dg/uninit-pred-6_a.c: Likewise. * gcc.dg/uninit-pred-6_b.c: Likewise. * gcc.dg/uninit-pred-6_c.c: Likewise. * gcc.dg/uninit-pred-6_d.c: Likewise. * gcc.dg/uninit-pred-6_e.c: Likewise. * gcc.dg/uninit-pred-7_a.c: Likewise. * gcc.dg/uninit-pred-7_b.c: Likewise. * gcc.dg/uninit-pred-7_c.c: Likewise. * gcc.dg/uninit-pred-7_d.c: Likewise. * gcc.dg/uninit-pred-8_a.c: Likewise. * gcc.dg/uninit-pred-8_b.c: Likewise. * gcc.dg/uninit-pred-8_c.c: Likewise. * gcc.dg/uninit-pred-8_d.c: Likewise. * gcc.dg/uninit-pred-9_a.c: Likewise. * gcc.dg/uninit-pred-9_b.c: Likewise. * gcc.dg/uninit-suppress_2.c: Likewise. * gfortran.dg/pr25923.f90: Likewise. * gfortran.dg/pr39666-2.f90: Likewise. -- Marc Glisse --8323329-225021371-1549020778=:7849 Content-Type: TEXT/x-diff; name=uninit.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: inline; filename=uninit.diff Content-length: 55185 SW5kZXg6IGdjYy9jLWZhbWlseS9jLm9wdA0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy9jLWZhbWlseS9jLm9wdAkocmV2aXNpb24gMjY4NDI1 KQ0KKysrIGdjYy9jLWZhbWlseS9jLm9wdAkod29ya2luZyBjb3B5KQ0KQEAg LTExMzYsMjEgKzExMzYsMjEgQEAgV2FybiBhYm91dCBAc2VsZWN0b3IoKXMg d2l0aG91dCBwcmV2aW91cw0KIA0KIFd1bmRlZg0KIEMgT2JqQyBDKysgT2Jq QysrIENQUCh3YXJuX3VuZGVmKSBDcHBSZWFzb24oQ1BQX1dfVU5ERUYpIFZh cihjcHBfd2Fybl91bmRlZikgSW5pdCgwKSBXYXJuaW5nDQogV2FybiBpZiBh biB1bmRlZmluZWQgbWFjcm8gaXMgdXNlZCBpbiBhbiAjaWYgZGlyZWN0aXZl Lg0KIA0KIFd1bmluaXRpYWxpemVkDQogQyBPYmpDIEMrKyBPYmpDKysgTFRP IExhbmdFbmFibGVkQnkoQyBPYmpDIEMrKyBPYmpDKysgTFRPLFdhbGwpDQog Ow0KIA0KIFdtYXliZS11bmluaXRpYWxpemVkDQotQyBPYmpDIEMrKyBPYmpD KysgTFRPIExhbmdFbmFibGVkQnkoQyBPYmpDIEMrKyBPYmpDKysgTFRPLFdh bGwpDQorQyBPYmpDIEMrKyBPYmpDKysgTFRPIExhbmdFbmFibGVkQnkoQyBP YmpDIEMrKyBPYmpDKysgTFRPLFdleHRyYSkNCiA7DQogDQogV3Vua25vd24t cHJhZ21hcw0KIEMgT2JqQyBDKysgT2JqQysrIFdhcm5pbmcgVmFyKHdhcm5f dW5rbm93bl9wcmFnbWFzKSBMYW5nRW5hYmxlZEJ5KEMgT2JqQyBDKysgT2Jq QysrLFdhbGwsIDEsIDApDQogV2FybiBhYm91dCB1bnJlY29nbml6ZWQgcHJh Z21hcy4NCiANCiBXdW5zdWZmaXhlZC1mbG9hdC1jb25zdGFudHMNCiBDIE9i akMgVmFyKHdhcm5fdW5zdWZmaXhlZF9mbG9hdF9jb25zdGFudHMpIFdhcm5p bmcNCiBXYXJuIGFib3V0IHVuc3VmZml4ZWQgZmxvYXQgY29uc3RhbnRzLg0K IA0KSW5kZXg6IGdjYy9jb21tb24ub3B0DQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gZ2NjL2NvbW1vbi5vcHQJKHJldmlzaW9uIDI2ODQyNSkNCisr KyBnY2MvY29tbW9uLm9wdAkod29ya2luZyBjb3B5KQ0KQEAgLTc2OSwyNSAr NzY5LDI1IEBAIERvIG5vdCBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHN5c3Rl bSBoZWENCiANCiBXdHJhbXBvbGluZXMNCiBDb21tb24gVmFyKHdhcm5fdHJh bXBvbGluZXMpIFdhcm5pbmcNCiBXYXJuIHdoZW5ldmVyIGEgdHJhbXBvbGlu ZSBpcyBnZW5lcmF0ZWQuDQogDQogV3R5cGUtbGltaXRzDQogQ29tbW9uIFZh cih3YXJuX3R5cGVfbGltaXRzKSBXYXJuaW5nIEVuYWJsZWRCeShXZXh0cmEp DQogV2FybiBpZiBhIGNvbXBhcmlzb24gaXMgYWx3YXlzIHRydWUgb3IgYWx3 YXlzIGZhbHNlIGR1ZSB0byB0aGUgbGltaXRlZCByYW5nZSBvZiB0aGUgZGF0 YSB0eXBlLg0KIA0KIFd1bmluaXRpYWxpemVkDQotQ29tbW9uIFZhcih3YXJu X3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcgRW5hYmxlZEJ5KFdleHRyYSkNCitD b21tb24gVmFyKHdhcm5fdW5pbml0aWFsaXplZCkgV2FybmluZyBFbmFibGVk QnkoV21heWJlLXVuaW5pdGlhbGl6ZWQpDQogV2FybiBhYm91dCB1bmluaXRp YWxpemVkIGF1dG9tYXRpYyB2YXJpYWJsZXMuDQogDQogV21heWJlLXVuaW5p dGlhbGl6ZWQNCi1Db21tb24gVmFyKHdhcm5fbWF5YmVfdW5pbml0aWFsaXpl ZCkgV2FybmluZyBFbmFibGVkQnkoV3VuaW5pdGlhbGl6ZWQpDQorQ29tbW9u IFZhcih3YXJuX21heWJlX3VuaW5pdGlhbGl6ZWQpIFdhcm5pbmcgRW5hYmxl ZEJ5KFdleHRyYSkNCiBXYXJuIGFib3V0IG1heWJlIHVuaW5pdGlhbGl6ZWQg YXV0b21hdGljIHZhcmlhYmxlcy4NCiANCiBXdW5yZWFjaGFibGUtY29kZQ0K IENvbW1vbiBJZ25vcmUgV2FybmluZw0KIERvZXMgbm90aGluZy4gUHJlc2Vy dmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lg0KIA0KIFd1bnVzZWQN CiBDb21tb24gVmFyKHdhcm5fdW51c2VkKSBJbml0KDApIFdhcm5pbmcNCiBF bmFibGUgYWxsIC1XdW51c2VkLSB3YXJuaW5ncy4NCiANCkluZGV4OiBnY2Mv ZG9jL2ludm9rZS50ZXhpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL2RvYy9pbnZva2UudGV4aQkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdj Yy9kb2MvaW52b2tlLnRleGkJKHdvcmtpbmcgY29weSkNCkBAIC00Mzc2LDIx ICs0Mzc2LDIwIEBAIE9wdGlvbnN9IGFuZCBAcmVme09iamVjdGl2ZS1DIGFu ZCBPYmplY3QNCiAtV2R1cGxpY2F0ZS1kZWNsLXNwZWNpZmllciBAcnsoQyBh bmQgT2JqZWN0aXZlLUMgb25seSl9IEBnb2wNCiAtV2VudW0tY29tcGFyZSBA cnsoaW4gQy9PYmpDOyB0aGlzIGlzIG9uIGJ5IGRlZmF1bHQgaW4gQysrKX0g QGdvbA0KIC1XZm9ybWF0ICAgQGdvbA0KIC1XaW50LWluLWJvb2wtY29udGV4 dCAgQGdvbA0KIC1XaW1wbGljaXQgQHJ7KEMgYW5kIE9iamVjdGl2ZS1DIG9u bHkpfSBAZ29sDQogLVdpbXBsaWNpdC1pbnQgQHJ7KEMgYW5kIE9iamVjdGl2 ZS1DIG9ubHkpfSBAZ29sDQogLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJh dGlvbiBAcnsoQyBhbmQgT2JqZWN0aXZlLUMgb25seSl9IEBnb2wNCiAtV2lu aXQtc2VsZiBAcnsob25seSBmb3IgQysrKX0gQGdvbA0KIC1XbG9naWNhbC1u b3QtcGFyZW50aGVzZXMgQGdvbA0KIC1XbWFpbiBAcnsob25seSBmb3IgQy9P YmpDIGFuZCB1bmxlc3N9IEBvcHRpb257LWZmcmVlc3RhbmRpbmd9QHJ7KX0g IEBnb2wNCi0tV21heWJlLXVuaW5pdGlhbGl6ZWQgQGdvbA0KIC1XbWVtc2V0 LWVsdC1zaXplIEBnb2wNCiAtV21lbXNldC10cmFuc3Bvc2VkLWFyZ3MgQGdv bA0KIC1XbWlzbGVhZGluZy1pbmRlbnRhdGlvbiBAcnsob25seSBmb3IgQy9D KyspfSBAZ29sDQogLVdtaXNzaW5nLWF0dHJpYnV0ZXMgQGdvbA0KIC1XbWlz c2luZy1icmFjZXMgQHJ7KG9ubHkgZm9yIEMvT2JqQyl9IEBnb2wNCiAtV211 bHRpc3RhdGVtZW50LW1hY3JvcyAgQGdvbA0KIC1XbmFycm93aW5nIEByeyhv bmx5IGZvciBDKyspfSAgQGdvbA0KIC1Xbm9ubnVsbCAgQGdvbA0KIC1Xbm9u bnVsbC1jb21wYXJlICBAZ29sDQogLVdvcGVubXAtc2ltZCBAZ29sDQpAQCAt NDQzMiwyOCArNDQzMSwyOCBAQCB0aGVtIG11c3QgYmUgZW5hYmxlZCBpbmRp dmlkdWFsbHkuDQogVGhpcyBlbmFibGVzIHNvbWUgZXh0cmEgd2FybmluZyBm bGFncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBieQ0KIEBvcHRpb257LVdhbGx9 LiAoVGhpcyBvcHRpb24gdXNlZCB0byBiZSBjYWxsZWQgQG9wdGlvbnstV30u ICBUaGUgb2xkZXINCiBuYW1lIGlzIHN0aWxsIHN1cHBvcnRlZCwgYnV0IHRo ZSBuZXdlciBuYW1lIGlzIG1vcmUgZGVzY3JpcHRpdmUuKQ0KIA0KIEBnY2Nv cHRsaXN0ey1XY2xvYmJlcmVkICBAZ29sDQogLVdjYXN0LWZ1bmN0aW9uLXR5 cGUgIEBnb2wNCiAtV2RlcHJlY2F0ZWQtY29weSBAcnsoQysrIG9ubHkpfSBA Z29sDQogLVdlbXB0eS1ib2R5ICBAZ29sDQogLVdpZ25vcmVkLXF1YWxpZmll cnMgQGdvbA0KIC1XaW1wbGljaXQtZmFsbHRocm91Z2g9MyBAZ29sDQorLVdt YXliZS11bmluaXRpYWxpemVkIEBnb2wNCiAtV21pc3NpbmctZmllbGQtaW5p dGlhbGl6ZXJzICBAZ29sDQogLVdtaXNzaW5nLXBhcmFtZXRlci10eXBlIEBy eyhDIG9ubHkpfSAgQGdvbA0KIC1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIEBy eyhDIG9ubHkpfSAgQGdvbA0KIC1Xb3ZlcnJpZGUtaW5pdCAgQGdvbA0KIC1X c2lnbi1jb21wYXJlIEByeyhDIG9ubHkpfSBAZ29sDQogLVdyZWR1bmRhbnQt bW92ZSBAcnsob25seSBmb3IgQysrKX0gIEBnb2wNCiAtV3R5cGUtbGltaXRz ICBAZ29sDQotLVd1bmluaXRpYWxpemVkICBAZ29sDQogLVdzaGlmdC1uZWdh dGl2ZS12YWx1ZSBAcnsoaW4gQysrMDMgYW5kIGluIEM5OSBhbmQgbmV3ZXIp fSAgQGdvbA0KIC1XdW51c2VkLXBhcmFtZXRlciBAcnsob25seSB3aXRofSBA b3B0aW9uey1XdW51c2VkfSBAcntvcn0gQG9wdGlvbnstV2FsbH1AcnspfSBA Z29sDQogLVd1bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXIgQHJ7KG9ubHkgd2l0 aH0gQG9wdGlvbnstV3VudXNlZH0gQHJ7b3J9IEBvcHRpb257LVdhbGx9QHJ7 KX19DQogDQogDQogVGhlIG9wdGlvbiBAb3B0aW9uey1XZXh0cmF9IGFsc28g cHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgZm9yIHRoZQ0KIGZvbGxvd2luZyBj YXNlczoNCiANCiBAaXRlbWl6ZSBAYnVsbGV0DQogDQpAQCAtNTUyNywyMCAr NTUyNiwyMiBAQCB2YXJpYWJsZXMgdGhhdCBhcmUgdW5pbml0aWFsaXplZCBv ciBjbG9iDQogbm90IG9jY3VyIGZvciB2YXJpYWJsZXMgb3IgZWxlbWVudHMg ZGVjbGFyZWQgQGNvZGV7dm9sYXRpbGV9LiAgQmVjYXVzZQ0KIHRoZXNlIHdh cm5pbmdzIGRlcGVuZCBvbiBvcHRpbWl6YXRpb24sIHRoZSBleGFjdCB2YXJp YWJsZXMgb3IgZWxlbWVudHMNCiBmb3Igd2hpY2ggdGhlcmUgYXJlIHdhcm5p bmdzIGRlcGVuZHMgb24gdGhlIHByZWNpc2Ugb3B0aW1pemF0aW9uDQogb3B0 aW9ucyBhbmQgdmVyc2lvbiBvZiBHQ0MgdXNlZC4NCiANCiBOb3RlIHRoYXQg dGhlcmUgbWF5IGJlIG5vIHdhcm5pbmcgYWJvdXQgYSB2YXJpYWJsZSB0aGF0 IGlzIHVzZWQgb25seQ0KIHRvIGNvbXB1dGUgYSB2YWx1ZSB0aGF0IGl0c2Vs ZiBpcyBuZXZlciB1c2VkLCBiZWNhdXNlIHN1Y2gNCiBjb21wdXRhdGlvbnMg bWF5IGJlIGRlbGV0ZWQgYnkgZGF0YSBmbG93IGFuYWx5c2lzIGJlZm9yZSB0 aGUgd2FybmluZ3MNCiBhcmUgcHJpbnRlZC4NCiANCitUaGlzIHdhcm5pbmcg aXMgZW5hYmxlZCBieSBAb3B0aW9uey1XbWF5YmUtdW5pbml0aWFsaXplZH0u DQorDQogQGl0ZW0gLVdpbnZhbGlkLW1lbW9yeS1tb2RlbA0KIEBvcGluZGV4 IFdpbnZhbGlkLW1lbW9yeS1tb2RlbA0KIEBvcGluZGV4IFduby1pbnZhbGlk LW1lbW9yeS1tb2RlbA0KIFdhcm4gZm9yIGludm9jYXRpb25zIG9mIEByZWZ7 X19hdG9taWMgQnVpbHRpbnN9LCBAcmVme19fc3luYyBCdWlsdGluc30sDQog YW5kIHRoZSBDMTEgYXRvbWljIGdlbmVyaWMgZnVuY3Rpb25zIHdpdGggYSBt ZW1vcnkgY29uc2lzdGVuY3kgYXJndW1lbnQNCiB0aGF0IGlzIGVpdGhlciBp bnZhbGlkIGZvciB0aGUgb3BlcmF0aW9uIG9yIG91dHNpZGUgdGhlIHJhbmdl IG9mIHZhbHVlcw0KIG9mIHRoZSBAY29kZXttZW1vcnlfb3JkZXJ9IGVudW1l cmF0aW9uLiAgRm9yIGV4YW1wbGUsIHNpbmNlIHRoZQ0KIEBjb2Rle19fYXRv bWljX3N0b3JlfSBhbmQgQGNvZGV7X19hdG9taWNfc3RvcmVfbn0gYnVpbHQt aW5zIGFyZSBvbmx5DQogZGVmaW5lZCBmb3IgdGhlIHJlbGF4ZWQsIHJlbGVh c2UsIGFuZCBzZXF1ZW50aWFsbHkgY29uc2lzdGVudCBtZW1vcnkNCiBvcmRl cnMgdGhlIGZvbGxvd2luZyBjb2RlIGlzIGRpYWdub3NlZDoNCkBAIC01NTk5 LDIxICs1NjAwLDIxIEBAIGNoYW5nZWQgYnkgYSBjYWxsIHRvIEBjb2Rle2xv bmdqbXB9Lg0KIFRoZSBjb21waWxlciBzZWVzIG9ubHkgdGhlIGNhbGxzIHRv IEBjb2Rle3NldGptcH0uICBJdCBjYW5ub3Qga25vdw0KIHdoZXJlIEBjb2Rl e2xvbmdqbXB9IHdpbGwgYmUgY2FsbGVkOyBpbiBmYWN0LCBhIHNpZ25hbCBo YW5kbGVyIGNvdWxkDQogY2FsbCBpdCBhdCBhbnkgcG9pbnQgaW4gdGhlIGNv ZGUuICBBcyBhIHJlc3VsdCwgeW91IG1heSBnZXQgYSB3YXJuaW5nDQogZXZl biB3aGVuIHRoZXJlIGlzIGluIGZhY3Qgbm8gcHJvYmxlbSBiZWNhdXNlIEBj b2Rle2xvbmdqbXB9IGNhbm5vdA0KIGluIGZhY3QgYmUgY2FsbGVkIGF0IHRo ZSBwbGFjZSB0aGF0IHdvdWxkIGNhdXNlIGEgcHJvYmxlbS4NCiANCiBTb21l IHNwdXJpb3VzIHdhcm5pbmdzIGNhbiBiZSBhdm9pZGVkIGlmIHlvdSBkZWNs YXJlIGFsbCB0aGUgZnVuY3Rpb25zDQogeW91IHVzZSB0aGF0IG5ldmVyIHJl dHVybiBhcyBAY29kZXtub3JldHVybn0uICBAeHJlZntGdW5jdGlvbg0KIEF0 dHJpYnV0ZXN9Lg0KIA0KLVRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IEBv cHRpb257LVdhbGx9IG9yIEBvcHRpb257LVdleHRyYX0uDQorVGhpcyB3YXJu aW5nIGlzIGVuYWJsZWQgYnkgQG9wdGlvbnstV2V4dHJhfS4NCiANCiBAaXRl bSAtV3Vua25vd24tcHJhZ21hcw0KIEBvcGluZGV4IFd1bmtub3duLXByYWdt YXMNCiBAb3BpbmRleCBXbm8tdW5rbm93bi1wcmFnbWFzDQogQGNpbmRleCB3 YXJuaW5nIGZvciB1bmtub3duIHByYWdtYXMNCiBAY2luZGV4IHVua25vd24g cHJhZ21hcywgd2FybmluZw0KIEBjaW5kZXggcHJhZ21hcywgd2FybmluZyBv ZiB1bmtub3duDQogV2FybiB3aGVuIGEgQGNvZGV7I3ByYWdtYX0gZGlyZWN0 aXZlIGlzIGVuY291bnRlcmVkIHRoYXQgaXMgbm90IHVuZGVyc3Rvb2QgYnkg DQogR0NDQC4gIElmIHRoaXMgY29tbWFuZC1saW5lIG9wdGlvbiBpcyB1c2Vk LCB3YXJuaW5ncyBhcmUgZXZlbiBpc3N1ZWQNCiBmb3IgdW5rbm93biBwcmFn bWFzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuICBUaGlzIGlzIG5vdCB0aGUg Y2FzZSBpZg0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By Njk1NDMtMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vcHI2OTU0My0xLmMJKHJldmlzaW9uIDI2 ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjY5NTQz LTEuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTEgKzEsMTEgQEANCi0vKiB7 IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCIgfSAqLw0KKy8qIHsgZGct b3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1XdW5pbml0aWFsaXpl ZCIgfSAqLw0KIA0KIC8qIFZlcmlmeSBkaXNhYmxpbmcgYSB3YXJuaW5nLCB3 aGVyZSB0aGUgX1ByYWdtYSBpcyB3aXRoaW4NCiAgICBhIG1hY3JvLCBidXQg dGhlIGFmZmVjdGVkIGNvZGUgaXMgKm5vdCogaW4gYSBtYWNyby4gICovDQog DQogIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVH SU4JXA0KICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwN CiAgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3Vu aW5pdGlhbGl6ZWRcIiIpXA0KICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0 aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikNCiAjIGRl ZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQgXA0KICAg ICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikNCkluZGV4OiBnY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjY5NTQzLTIuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNjk1NDMtMi5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vcHI2OTU0My0yLmMJKHdvcmtpbmcgY29weSkN CkBAIC0xLDExICsxLDExIEBADQotLyogeyBkZy1vcHRpb25zICItV3VuaW5p dGlhbGl6ZWQiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5p bml0aWFsaXplZCAtV3VuaW5pdGlhbGl6ZWQiIH0gKi8NCiANCiAvKiBWZXJp ZnkgZGlzYWJsaW5nIGEgd2FybmluZywgd2hlcmUgYm90aCB0aGUgX1ByYWdt YSBhbmQgdGhlDQogICAgYWZmZWN0ZWQgY29kZSBhcmUgKm5vdCogaW4gYSBt YWNyby4gICovDQogDQogdm9pZCB0ZXN0IChjaGFyIHl5bHZhbCkNCiB7DQog ICBjaGFyICp5eXZzcDsNCiAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBw dXNoIikNCiAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwi LVd1bmluaXRpYWxpemVkXCIiKQ0KICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9z dGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlhbGl6ZWRcIiIpDQpJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI2OTU0My0zLmMNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wcjY5NTQzLTMuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNjk1NDMtMy5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMSwxMSArMSwxMSBAQA0KLS8qIHsgZGctb3B0aW9ucyAi LVd1bmluaXRpYWxpemVkIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItV21h eWJlLXVuaW5pdGlhbGl6ZWQgLVd1bmluaXRpYWxpemVkIiB9ICovDQogDQog LyogVmVyaWZ5IGRpc2FibGluZyBhIHdhcm5pbmcsIHdoZXJlIHRoZSBfUHJh Z21hIGlzIGluIHJlZ3VsYXIgY29kZSwNCiAgICBidXQgdGhlIGFmZmVjdGVk IGNvZGUgaXMgd2l0aGluIGEgbWFjcm8uICAqLw0KIA0KIC8qIFRPRE86IFhG QUlMOiBib3RoIEMgYW5kIEMrKyBlcnJvbmVvdXNseSBmYWlsIHRvIHN1cHBy ZXNzIHRoZSB3YXJuaW5nDQogICAgVGhlIHdhcm5pbmcgaXMgcmVwb3J0ZWQg YXQgdGhlIG1hY3JvIGRlZmluaXRpb24gbG9jYXRpb24sIHJhdGhlciB0aGFu DQogICAgdGhlIG1hY3JvIGV4cGFuc2lvbiBsb2NhdGlvbi4gICovDQogDQog I2RlZmluZSBXQVJOQUJMRV9DT0RFICorK3l5dnNwID0geXlsdmFsOyAvKiB7 IGRnLWJvZ3VzICJ1c2VkIHVuaW5pdGlhbGl6ZWQiICIiIHsgeGZhaWwgKi0q LSogfSB9ICovDQogDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vcHI2OTU0My00LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBn Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjY5NTQzLTQuYwkocmV2aXNp b24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3By Njk1NDMtNC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMSArMSwxMSBAQA0K LS8qIHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIiB9ICovDQorLyog eyBkZy1vcHRpb25zICItV21heWJlLXVuaW5pdGlhbGl6ZWQgLVd1bmluaXRp YWxpemVkIiB9ICovDQogDQogLyogVmVyaWZ5IGRpc2FibGluZyBhIHdhcm5p bmcsIHdoZXJlIGJvdGggdGhlIF9QcmFnbWEgYW5kIHRoZQ0KICAgIGFmZmVj dGVkIGNvZGUgYXJlIHdpdGhpbiAoZGlmZmVyZW50KSBtYWNyb3MuICAqLw0K IA0KIC8qIFRPRE86IFhGQUlMOiBib3RoIEMgYW5kIEMrKyBlcnJvbmVvdXNs eSBmYWlsIHRvIHN1cHByZXNzIHRoZSB3YXJuaW5nDQogICAgVGhlIHdhcm5p bmcgaXMgcmVwb3J0ZWQgYXQgdGhlIG1hY3JvIGRlZmluaXRpb24gbG9jYXRp b24sIHJhdGhlciB0aGFuDQogICAgdGhlIG1hY3JvIGV4cGFuc2lvbiBsb2Nh dGlvbi4gICovDQogDQogIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5J VElBTElaRURfQkVHSU4JXA0KICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0 aWMgcHVzaCIpIFwNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi91bmluaXQtMTcuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3VuaW5pdC0xNy5jCShyZXZpc2lv biAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdW5p bml0LTE3LmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEyICsxLDEyIEBADQog LyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1P MiAtV3VuaW5pdGlhbGl6ZWQgLWZuby1pdm9wdHMiIH0gKi8NCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgLWZuby1pdm9w dHMiIH0gKi8NCiANCiBpbmxpbmUgaW50IGZvbyhpbnQgeCkNCiB7DQogICBy ZXR1cm4geDsNCiB9DQogc3RhdGljIHZvaWQgYmFyKGludCBhLCBpbnQgKnB0 cikNCiB7DQogICBkbw0KICAgew0KICAgICBpbnQgYjsgICAvKiB7IGRnLW1l c3NhZ2UgImRlY2xhcmVkIiB9ICovDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvcHI0ODQ4NC5DDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHI0ODQ4NC5DCShyZXZpc2lvbiAyNjg0 MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHI0ODQ4NC5DCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMSwxMiArMSwxMiBAQA0KIC8qIHsgZGctZG8gY29t cGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItTyAtZmlubGluZS1mdW5j dGlvbnMgLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIC1XdW5pbml0aWFsaXpl ZCIgfSAgKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1maW5saW5lLWZ1bmN0 aW9ucyAtZmlubGluZS1zbWFsbC1mdW5jdGlvbnMgLVdtYXliZS11bmluaXRp YWxpemVkIiB9ICAqLw0KIC8qIHsgZGctYWRkLW9wdGlvbnMgYmluZF9waWNf bG9jYWxseSB9ICovDQogDQogc3RydWN0IFNRT2JqZWN0UHRyDQogew0KICAg aW50IF90eXBlOw0KICAgU1FPYmplY3RQdHIgb3BlcmF0b3IgPSAobG9uZyk7 DQogfTsNCiBzdHJ1Y3QgU1FPYmplY3RQdHJWZWMNCiB7DQogICBTUU9iamVj dFB0ciBmZmYgKHVuc2lnbmVkKTsNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2cr Ky5kZy91bmluaXQtcHJlZC0xX2IuQw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL3VuaW5pdC1wcmVkLTFfYi5D CShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv dW5pbml0LXByZWQtMV9iLkMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEyICsx LDEyIEBADQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9w dGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisvKiB7IGRnLW9w dGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCiANCiB0 eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NDsNCiB2b2lkIGluY3IgKCk7DQogYm9v bCBpc192YWxpZCAoaW50KTsNCiBpbnQgIGdldF90aW1lICgpOw0KIA0KIGNs YXNzIEEgDQogew0KIHB1YmxpYzoNCiAgIEEgKCk7DQpJbmRleDogZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvdW5pbml0LXByZWQtMl9iLkMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy91bmluaXQt cHJlZC0yX2IuQwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3Vp dGUvZysrLmRnL3VuaW5pdC1wcmVkLTJfYi5DCSh3b3JraW5nIGNvcHkpDQpA QCAtMSwxMiArMSwxMiBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQot LyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQor LyogeyBkZy1vcHRpb25zICItV21heWJlLXVuaW5pdGlhbGl6ZWQgLU8yIiB9 ICovDQogDQogdHlwZWRlZiBsb25nIGxvbmcgaW50NjQ7DQogdm9pZCBpbmNy ICgpOw0KIGJvb2wgaXNfdmFsaWQgKGludCk7DQogaW50ICBnZXRfdGltZSAo KTsNCiANCiBjbGFzcyBBIA0KIHsNCiBwdWJsaWM6DQogICBBICgpOw0KSW5k ZXg6IGdjYy90ZXN0c3VpdGUvZysrLmRnL3VuaW5pdC1wcmVkLTNfYi5DDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvdW5pbml0LXByZWQtM19iLkMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBn Y2MvdGVzdHN1aXRlL2crKy5kZy91bmluaXQtcHJlZC0zX2IuQwkod29ya2lu ZyBjb3B5KQ0KQEAgLTEsMTIgKzEsMTIgQEANCiAvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1P MiIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxp emVkIC1PMiIgfSAqLw0KIA0KIC8qIE11bHRpcGxlIGluaXRpYWxpemF0aW9u IHBhdGhzLiAgKi8NCiANCiB0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NDsNCiB2 b2lkIGluY3IgKCk7DQogYm9vbCBpc192YWxpZCAoaW50KTsNCiBpbnQgIGdl dF90aW1lICgpOw0KIA0KIGNsYXNzIEENCiB7DQpJbmRleDogZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvd2Fybi9XdW5pbml0aWFsaXplZC01LkMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy93YXJu L1d1bmluaXRpYWxpemVkLTUuQwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdj Yy90ZXN0c3VpdGUvZysrLmRnL3dhcm4vV3VuaW5pdGlhbGl6ZWQtNS5DCSh3 b3JraW5nIGNvcHkpDQpAQCAtMSwxMyArMSwxMyBAQA0KIC8vIFBSIG1pZGRs ZS1lbmQvMzk2NjYNCiAvLyB7IGRnLWRvIGNvbXBpbGUgfQ0KLS8vIHsgZGct b3B0aW9ucyAiLU8yIC1XdW5pbml0aWFsaXplZCIgfQ0KKy8vIHsgZGctb3B0 aW9ucyAiLU8yIC1XbWF5YmUtdW5pbml0aWFsaXplZCIgfQ0KIA0KIGludA0K IGZvbyAoaW50IGkpDQogew0KICAgaW50IGo7DQogICBzd2l0Y2ggKGkpDQog ICAgIHsNCiAgICAgY2FzZSAtX19JTlRfTUFYX18gLSAxIC4uLiAtMToNCiAg ICAgICBqID0gNjsNCiAgICAgICBicmVhazsNCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2crKy5kZy93YXJuL1d1bmluaXRpYWxpemVkLTYuQw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL3dhcm4v V3VuaW5pdGlhbGl6ZWQtNi5DCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvd2Fybi9XdW5pbml0aWFsaXplZC02LkMJKHdv cmtpbmcgY29weSkNCkBAIC0xLDEyICsxLDEyIEBADQogLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXpl ZCAtTzIiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5pbml0 aWFsaXplZCAtV3VuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQogDQogbmFtZXNw YWNlIHN0ZCB7DQogICAgICB0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90 Ow0KICAgIH0NCiAgICAgZXh0ZXJuICJDKysiIHsNCiAgICBpbmxpbmUgdm9p ZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93 KCkgew0KICAgcmV0dXJuIF9fcDsNCiAgIH0NCiAgICB9DQogICAgIG5hbWVz cGFjZSBib29zdHsNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy93YXJu L1d1bmluaXRpYWxpemVkLTkuQw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL3dhcm4vV3VuaW5pdGlhbGl6ZWQt OS5DCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvd2Fybi9XdW5pbml0aWFsaXplZC05LkMJKHdvcmtpbmcgY29weSkNCkBA IC0xLDEzICsxLDEzIEBADQogLy8gUFIgYysrLzgwMTE5DQogLy8geyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IGMrKzExIH0gfQ0KLS8vIHsgZGctb3B0aW9u cyAiLVd1bmluaXRpYWxpemVkIiB9DQorLy8geyBkZy1vcHRpb25zICItV21h eWJlLXVuaW5pdGlhbGl6ZWQiIH0NCiANCiAjaW5jbHVkZSA8dHlwZV90cmFp dHM+DQogDQogdGVtcGxhdGUgPGJvb2wgYj4NCiB2b2lkIGZhaWxpbmdfZnVu Y3Rpb24oc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBiPikNCiB7DQog ICAgaW50IGk7DQogICAgaWYgKGIgJiYgKGkgPSA0KSkgew0KICAgICAgICsr aTsgLy8geyBkZy1ib2d1cyAibWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCIg fQ0KICAgIH0NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3By NzI3ODEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL2dvbXAvcHI3Mjc4MS5jCShyZXZpc2lvbiAyNjg0MjUp DQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC9wcjcyNzgxLmMJKHdv cmtpbmcgY29weSkNCkBAIC0xLDEzICsxLDEzIEBADQogLyogUFIgbWlkZGxl LWVuZC83Mjc4MSAqLw0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyog eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PMiAtV3VuaW5pdGlhbGl6ZWQi IH0gKi8NCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8yIC1XbWF5 YmUtdW5pbml0aWFsaXplZCIgfSAqLw0KIA0KIGludCB1Ow0KIA0KIHZvaWQN CiBmb28gKGludCAqcCkNCiB7DQogICBpbnQgaTsNCiAgICNwcmFnbWEgb21w IGZvciBzaW1kIGxhc3Rwcml2YXRlKHUpIHNjaGVkdWxlIChzdGF0aWMsIDMy KQkvKiB7IGRnLWJvZ3VzICJtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGlu IHRoaXMgZnVuY3Rpb24iIH0gKi8NCiAgIGZvciAoaSA9IDA7IGkgPCAxMDI0 OyBpKyspDQogICAgIHUgPSBwW2ldOw0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ByMTg1MDEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTg1MDEuYwkocmV2aXNpb24gMjY4 NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTg1MDEuYwkod29y a2luZyBjb3B5KQ0KQEAgLTEsMTQgKzEsMTQgQEANCiAvKiBFeHBlY3RlZCB1 bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcuICAqLw0KIA0KIC8qIHsg ZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItTyAtV3Vu aW5pdGlhbGl6ZWQiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XbWF5 YmUtdW5pbml0aWFsaXplZCIgfSAqLw0KIA0KIHVuc2lnbmVkIGJtcF9pdGVy X3NldCAoKTsNCiBpbnQgc29tZXRoaW5nICh2b2lkKTsNCiANCiB2b2lkDQog Yml0bWFwX3ByaW50X3ZhbHVlX3NldCAodm9pZCkNCiB7DQogICB1bnNpZ25l ZCBmaXJzdDsJLyogeyBkZy13YXJuaW5nICJtYXkgYmUgdXNlZCIgImNvbmRp dGlvbmFsIGluIGxvb3AiIHsgeGZhaWwgKi0qLSogfSB9ICovDQogICANCiAg IGZvciAoOyBibXBfaXRlcl9zZXQgKCk7ICkNCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy9wcjM5NjY2LTIuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMzk2NjYtMi5jCShyZXZp c2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIzOTY2 Ni0yLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEzICsxLDEzIEBADQogLyog UFIgbWlkZGxlLWVuZC8zOTY2NiAqLw0KIC8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQotLyogeyBkZy1vcHRpb25zICItTzIgLVd1bmluaXRpYWxpemVkIiB9 ICovDQorLyogeyBkZy1vcHRpb25zICItTzIgLVdtYXliZS11bmluaXRpYWxp emVkIiB9ICovDQogDQogaW50DQogZm9vIChpbnQgaSkNCiB7DQogICBpbnQg ajsNCiAgIHN3aXRjaCAoaSkNCiAgICAgew0KICAgICBjYXNlIC1fX0lOVF9N QVhfXyAtIDEgLi4uIC0xOg0KICAgICAgIGogPSA2Ow0KICAgICAgIGJyZWFr Ow0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNDUwODMuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3ByNDUwODMuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3Vp dGUvZ2NjLmRnL3ByNDUwODMuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTMg KzEsMTMgQEANCiAvKiBQUiB0cmVlLW9wdGltaXphdGlvbi80NTA4MyAqLw0K IC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICIt TzIgLVd1bmluaXRpYWxpemVkIiB9ICovDQorLyogeyBkZy1vcHRpb25zICIt TzIgLVd1bmluaXRpYWxpemVkIC1XbWF5YmUtdW5pbml0aWFsaXplZCIgfSAq Lw0KIA0KIHN0cnVjdCBTIHsgY2hhciAqYTsgdW5zaWduZWQgYjsgdW5zaWdu ZWQgYzsgfTsNCiBleHRlcm4gaW50IGZvbyAoY29uc3QgY2hhciAqKTsNCiBl eHRlcm4gdm9pZCBiYXIgKGludCwgaW50KTsNCiANCiBzdGF0aWMgdm9pZA0K IGJheiAodm9pZCkNCiB7DQogICBzdHJ1Y3QgUyBjc1sxXTsJLyogeyBkZy1t ZXNzYWdlICJ3YXMgZGVjbGFyZWQgaGVyZSIgfSAqLw0KICAgc3dpdGNoIChj cy0+YikJLyogeyBkZy13YXJuaW5nICJjc1xbXlxuXHJcXSpcXC5iXFteXG5c clxdKmlzIHVzZWQgdW5pbml0aWFsaXplZCIgfSAqLw0KSW5kZXg6IGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ByNTcxNDkuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTcxNDkuYwkocmV2 aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNTcx NDkuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTMgKzEsMTMgQEANCiAvKiBQ UiB0cmVlLW9wdGltaXphdGlvbi81NzE0OSAqLw0KIC8qIHsgZGctZG8gY29t cGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItT3MgLVd1bmluaXRpYWxp emVkIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItT3MgLVdtYXliZS11bmlu aXRpYWxpemVkIiB9ICovDQogDQogc3RydWN0IEEgeyBzdHJ1Y3QgQSAqYSwg KmI7IH07DQogc3RydWN0IEQgeyBzdHJ1Y3QgQSBlOyB9Ow0KIHN0cnVjdCBF IHsgdW5zaWduZWQgY2hhciBmOyBzdHJ1Y3QgeyBzdHJ1Y3QgQSBlOyB9IGc7 IH07DQogc3RydWN0IEYgeyBzdHJ1Y3QgRSBpWzMyXTsgfTsNCiANCiBleHRl cm4gaW50IGZuMCAodm9pZCk7DQogZXh0ZXJuIGludCBmbjEgKHN0cnVjdCBF ICosIHN0cnVjdCBEICopOw0KIA0KIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1 dGVfXyAoKGFsd2F5c19pbmxpbmUpKSBpbnQNCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy9wcjU5OTI0LmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjU5OTI0LmMJKHJldmlzaW9u IDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjU5OTI0LmMJ KHdvcmtpbmcgY29weSkNCkBAIC0xLDEzICsxLDEzIEBADQogLyogUFIgdHJl ZS1vcHRpbWl6YXRpb24vNTk5MjQgKi8NCiAvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLU8xIC1XYWxsIiB9ICovDQorLyog eyBkZy1vcHRpb25zICItTzEgLVdtYXliZS11bmluaXRpYWxpemVkIiB9ICov DQogDQogc3RydWN0IFMgeyBzdHJ1Y3QgVCAqYTsgZG91YmxlIGI7IHN0cnVj dCBTICpjOyB9Ow0KIHN0cnVjdCBUIHsgc3RydWN0IFMgKmQ7IH07DQogZXh0 ZXJuIHZvaWQgYmFyIChkb3VibGUpOw0KIA0KIHZvaWQNCiBmb28gKHN0cnVj dCBTICogeCwgaW50IHksIGludCB6LCBpbnQgdykNCiB7DQogICBpbnQgZTsN CiAgIHN0cnVjdCBTICpmOw0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3ByNjk1NDMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ByNjk1NDMuYwkocmV2aXNpb24gMjY4NDI1KQ0K KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjk1NDMuYwkod29ya2luZyBj b3B5KQ0KQEAgLTEsMTMgKzEsMTMgQEANCiAvKiBQUiBwcmVwcm9jZXNzb3Iv Njk1NDMgKi8NCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGct b3B0aW9ucyAiLU8yIC1XdW5pbml0aWFsaXplZCIgfSAqLw0KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1XdW5pbml0aWFsaXplZCAtV21heWJlLXVuaW5pdGlh bGl6ZWQiIH0gKi8NCiANCiAjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5J TklUSUFMSVpFRF9CRUdJTiBcDQogICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25v c3RpYyBwdXNoIikgXA0KICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMg aWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIilcDQogICAgIF9QcmFnbWEg KCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxp emVkXCIiKQ0KICMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJ WkVEX0VORCBcDQogICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3Ai KQ0KIA0KIHZvaWQgdGVzdCAoY2hhciB5eWx2YWwpDQogew0KSW5kZXg6IGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC0xMS1PMC5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0 LTExLU8wLmMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRl L2djYy5kZy91bmluaXQtMTEtTzAuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEs MTMgKzEsMTMgQEANCiAvKiBQb3NpdGl2ZSB0ZXN0IGZvciB1bmluaXRpYWxp emVkIHZhcmlhYmxlcy4gICovDQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8N Ci0vKiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCIgfSAqLw0KKy8q IHsgZGctb3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1XdW5pbml0 aWFsaXplZCIgfSAqLw0KIA0KIGludCBzaW5rOw0KIA0KIHZvaWQgZjEoaW50 IHBhcm0pCS8qIHsgZGctYm9ndXMgInVuaW5pdGlhbGl6ZWQiICJwYXJhbWV0 ZXIiIH0gKi8NCiB7DQogICBzaW5rID0gcGFybTsJCS8qIHsgZGctYm9ndXMg InVuaW5pdGlhbGl6ZWQiICJwYXJhbWV0ZXIiIH0gKi8NCiB9DQogDQogdm9p ZCBmMih2b2lkKQ0KIHsNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy91 bmluaXQtMTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC0xMS5jCShyZXZpc2lvbiAyNjg0MjUp DQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LTExLmMJKHdvcmtp bmcgY29weSkNCkBAIC0xLDEzICsxLDEzIEBADQogLyogUG9zaXRpdmUgdGVz dCBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuICAqLw0KIC8qIHsgZGct ZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItTyAtV3VuaW5p dGlhbGl6ZWQiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XbWF5YmUt dW5pbml0aWFsaXplZCAtV3VuaW5pdGlhbGl6ZWQiIH0gKi8NCiANCiBpbnQg c2luazsNCiANCiB2b2lkIGYxKGludCBwYXJtKQkvKiB7IGRnLWJvZ3VzICJ1 bmluaXRpYWxpemVkIiAicGFyYW1ldGVyIiB9ICovDQogew0KICAgc2luayA9 IHBhcm07CQkvKiB7IGRnLWJvZ3VzICJ1bmluaXRpYWxpemVkIiAicGFyYW1l dGVyIiB9ICovDQogfQ0KIA0KIHZvaWQgZjIodm9pZCkNCiB7DQpJbmRleDog Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LTE2LmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQt MTYuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3VuaW5pdC0xNi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiArMSwx MiBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRp b25zICItTzIgLVd1bmluaXRpYWxpemVkIiB9ICovDQorLyogeyBkZy1vcHRp b25zICItTzIgLVdtYXliZS11bmluaXRpYWxpemVkIiB9ICovDQogDQogaW50 IGZvbywgYmFyOw0KIA0KIHN0YXRpYw0KIHZvaWQgZGVjb2RlX3JlbG9jKGlu dCByZWxvYywgaW50ICppc19hbHQpDQogew0KICAgaWYgKHJlbG9jID49IDIw KQ0KICAgICAgICppc19hbHQgPSAxOw0KICAgZWxzZSBpZiAocmVsb2MgPj0g MTApDQogICAgICAgKmlzX2FsdCA9IDA7DQpJbmRleDogZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdW5pbml0LTE3LmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtMTcuYwkocmV2aXNp b24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC0x Ny5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiArMSwxMiBAQA0KIC8qIHsg ZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItTyAtV3Vu aW5pdGlhbGl6ZWQiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XbWF5 YmUtdW5pbml0aWFsaXplZCIgfSAqLw0KIA0KIHR5cGVkZWYgX0NvbXBsZXgg ZmxvYXQgQzsNCiBDIGZvbyhpbnQgY29uZCkNCiB7DQogICBDIGY7DQogICBf X2ltYWdfXyBmID0gMDsNCiAgIGlmIChjb25kKQ0KICAgICB7DQogICAgICAg X19yZWFsX18gZiA9IDE7DQogICAgICAgcmV0dXJuIGY7DQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LTE4LmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtMTgu YwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3VuaW5pdC0xOC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiArMSwxMiBA QA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICAqLw0KLS8qIHsgZGctb3B0aW9u cyAiLU8gLVd1bmluaXRpYWxpemVkIiB9ICovDQorLyogeyBkZy1vcHRpb25z ICItTyAtV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0gKi8NCiANCiBjaGFyICpm b28oaW50IGJhciwgY2hhciAqYmF6KQ0KIHsNCiAgIGNoYXIgKnRtcDsNCiAN CiAgIGlmIChiYXIgJiAzKQ0KICAgICB0bXAgPSBiYXo7DQogDQogICBzd2l0 Y2ggKGJhcikgew0KICAgY2FzZSAxOg0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3VuaW5pdC0xOS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LTE5LmMJKHJldmlzaW9u IDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtMTku Ywkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTIgKzEsMTIgQEANCiAvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLU8gLVd1bmlu aXRpYWxpemVkIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItTyAtV21heWJl LXVuaW5pdGlhbGl6ZWQiIH0gKi8NCiAvKiB7IGRnLWFkZGl0aW9uYWwtb3B0 aW9ucyAiLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIiB7IHRhcmdldCBhdnIt Ki0qIH0gfSAqLw0KIA0KIGludCBhLCBsLCBtOw0KIGZsb2F0ICpiOw0KIGZs b2F0IGMsIGQsIGUsIGcsIGg7DQogdW5zaWduZWQgY2hhciBpLCBrOw0KIHZv aWQNCiBmbjEgKGludCBwMSwgZmxvYXQgKmYxLCBmbG9hdCAqZjIsIGZsb2F0 ICpmMywgdW5zaWduZWQgY2hhciAqYzEsIGZsb2F0ICpmNCwNCiAgICAgIHVu c2lnbmVkIGNoYXIgKmMyLCBmbG9hdCAqcDEwKQ0KIHsNCkluZGV4OiBnY2Mv dGVzdHN1aXRlL2djYy5kZy91bmluaXQtNi1PMC5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LTYt TzAuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3VuaW5pdC02LU8wLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDE1ICsx LDE1IEBADQogLyogU3B1cmlvdXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3 YXJuaW5ncy4NCiAgICBUaGlzIG9uZSBpbnNwaXJlZCBieSBqYXZhL2NsYXNz LmM6YnVpbGRfdXRmOF9yZWYuICAqLw0KIA0KIC8qIHsgZGctZG8gY29tcGls ZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLWZ0 cmFjay1tYWNyby1leHBhbnNpb249MiIgfSAqLw0KKy8qIHsgZGctb3B0aW9u cyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1mdHJhY2stbWFjcm8tZXhwYW5z aW9uPTIiIH0gKi8NCiANCiAjaW5jbHVkZSA8c3RkZGVmLmg+DQogDQogc3Ry dWN0IHRyZWUNCiB7DQogICAgIHN0cnVjdCB0cmVlICpjYXI7DQogICAgIHN0 cnVjdCB0cmVlICpjZHI7DQogICAgIGludCB0eXBlLCBkYXRhOw0KIH07DQog DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByMTk0MzAt Mi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdW5pbml0LXByMTk0MzAtMi5jCShyZXZpc2lvbiAyNjg0MjUp DQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByMTk0MzAtMi5j CSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiArMSwxMiBAQA0KIC8qIHsgZGct ZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItTyAtV3VuaW5p dGlhbGl6ZWQiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XbWF5YmUt dW5pbml0aWFsaXplZCIgfSAqLw0KIA0KIGludCAgKnAsICpxOw0KIA0KIGlu dCBmb28gKGludCBiKQ0KIHsNCiAgIGludCBpLCBqID0gMDsNCiAgIGludCAq eDsNCiAgIHAgPSAmaTsNCiAgIHEgPSAmajsNCiAgIGlmIChiKQ0KSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcjE5NDMwLU8wLmMNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5k Zy91bmluaXQtcHIxOTQzMC1PMC5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysg Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByMTk0MzAtTzAuYwkod29y a2luZyBjb3B5KQ0KQEAgLTEsMTIgKzEsMTIgQEANCiAvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLU8wIC1XdW5pbml0aWFs aXplZCIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLU8wIC1XdW5pbml0aWFs aXplZCAtV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0gKi8NCiBleHRlcm4gaW50 IGJhciAoaW50KTsNCiBleHRlcm4gdm9pZCBiYXogKGludCAqKTsNCiANCiBp bnQNCiBmb28gKGludCBpKQ0KIHsNCiAgIGludCBqOyAvKiB7IGRnLXdhcm5p bmcgIidqJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVu Y3Rpb24iICJ1bmluaXRpYWxpemVkIiB7IHhmYWlsICotKi0qIH0gfSAqLw0K IA0KICAgaWYgKGJhciAoaSkpIHsNCiAgICAgYmF6ICgmaik7DQpJbmRleDog Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByMTk0MzAuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Vu aW5pdC1wcjE5NDMwLmMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVz dHN1aXRlL2djYy5kZy91bmluaXQtcHIxOTQzMC5jCSh3b3JraW5nIGNvcHkp DQpAQCAtMSwxMiArMSwxMiBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICov DQotLyogeyBkZy1vcHRpb25zICItTyAtV3VuaW5pdGlhbGl6ZWQiIH0gKi8N CisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XbWF5YmUtdW5pbml0aWFsaXplZCAt V3VuaW5pdGlhbGl6ZWQiIH0gKi8NCiBleHRlcm4gaW50IGJhciAoaW50KTsN CiBleHRlcm4gdm9pZCBiYXogKGludCAqKTsNCiBpbnQNCiBmb28gKGludCBp KQ0KIHsNCiAgIGludCBqOyAvKiB7IGRnLXdhcm5pbmcgIidqJyBtYXkgYmUg dXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24iICJ1bmluaXRp YWxpemVkIiB7IHhmYWlsICotKi0qIH0gfSAqLw0KIA0KICAgaWYgKGJhciAo aSkpIHsgDQogICAgIGJheiAoJmopOw0KICAgfSBlbHNlIHsNCkluZGV4OiBn Y2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHIyMDY0NC1PMC5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dW5pbml0LXByMjA2NDQtTzAuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcjIwNjQ0LU8wLmMJKHdvcmtp bmcgY29weSkNCkBAIC0xLDEzICsxLDEzIEBADQogLyogUFIgMjA2NDQgKi8N CiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGctb3B0aW9ucyAi LU8wIC1XdW5pbml0aWFsaXplZCIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAi LU8wIC1XbWF5YmUtdW5pbml0aWFsaXplZCIgfSAqLw0KIGludCBmb28gKCkN CiB7DQogICBpbnQgaSA9IDA7DQogICBpbnQgajsNCiANCiAgIGlmICgxID09 IGkpDQogICAgIHJldHVybiBqOyAvKiB7IGRnLWJvZ3VzICJ1bmluaXRpYWxp emVkIiAidW5pbml0aWFsaXplZCIgeyB4ZmFpbCAqLSotKiB9IH0gKi8NCiAN CiAgIHJldHVybiAwOw0KIH0NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5k Zy91bmluaXQtcHJlZC0yX2EuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTJfYS5jCShy ZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5p bml0LXByZWQtMl9hLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEyICsxLDEy IEBADQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlv bnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisvKiB7IGRnLW9wdGlv bnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCiANCiBpbnQg ZzsNCiB2b2lkIGJhciAodm9pZCk7DQogdm9pZCBibGFoIChpbnQpOw0KIA0K IGludCBmb28gKGludCBuLCBpbnQgbSwgaW50IHIpDQogew0KICAgaW50IGZs YWcgPSAwOw0KICAgaW50IHY7DQogDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdW5pbml0LXByZWQtMl9iLmMNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC0yX2Iu YwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3VuaW5pdC1wcmVkLTJfYi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiAr MSwxMiBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1v cHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQorLyogeyBkZy1v cHRpb25zICItV21heWJlLXVuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQogDQog aW50IGc7DQogdm9pZCBiYXIgKHZvaWQpOw0KIHZvaWQgYmxhaCAoaW50KTsN CiANCiBpbnQgZm9vIChpbnQgbiwgaW50IG0sIGludCByKQ0KIHsNCiAgIGlu dCBmbGFnID0gMDsNCiAgIGludCB2OyANCiANCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy91bmluaXQtcHJlZC0yX2MuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVk LTJfYy5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdW5pbml0LXByZWQtMl9jLmMJKHdvcmtpbmcgY29weSkNCkBAIC0x LDEyICsxLDEyIEBADQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7 IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIgLWZuby10cmVlLXRh aWwtbWVyZ2UiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5p bml0aWFsaXplZCAtTzIgLWZuby10cmVlLXRhaWwtbWVyZ2UiIH0gKi8NCiAN CiBpbnQgZzsNCiB2b2lkIGJhciAodm9pZCk7DQogdm9pZCBibGFoIChpbnQp Ow0KIA0KIGludCBmb28gKGludCBuLCBpbnQgbSwgaW50IHIpDQogew0KICAg aW50IGZsYWcgPSAwOw0KICAgaW50IHY7IA0KIA0KSW5kZXg6IGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTNfYS5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXBy ZWQtM19hLmMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRl L2djYy5kZy91bmluaXQtcHJlZC0zX2EuYwkod29ya2luZyBjb3B5KQ0KQEAg LTEsMTIgKzEsMTIgQEANCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8q IHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KKy8q IHsgZGctb3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1PMiIgfSAq Lw0KIA0KIGludCBnOw0KIHZvaWQgYmFyKCk7DQogdm9pZCBibGFoKGludCk7 DQogDQogaW50IGZvbyAoaW50IG4sIGludCBtLCBpbnQgcikNCiB7DQogICBp bnQgZmxhZyA9IDA7DQogICBpbnQgdjsNCiANCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy91bmluaXQtcHJlZC0zX2IuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVk LTNfYi5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdW5pbml0LXByZWQtM19iLmMJKHdvcmtpbmcgY29weSkNCkBAIC0x LDEyICsxLDEyIEBADQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7 IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisvKiB7 IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0gKi8N CiANCiBpbnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxhaChpbnQpOw0K IA0KIGludCBmb28gKGludCBuLCBpbnQgbSwgaW50IHIpDQogew0KICAgaW50 IGZsYWcgPSAwOw0KICAgaW50IHY7DQogDQpJbmRleDogZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdW5pbml0LXByZWQtM19jLmMNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC0z X2MuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3VuaW5pdC1wcmVkLTNfYy5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwx MiArMSwxMiBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBk Zy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQorLyogeyBk Zy1vcHRpb25zICItV21heWJlLXVuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQog DQogaW50IGc7DQogdm9pZCBiYXIoKTsNCiB2b2lkIGJsYWgoaW50KTsNCiAN CiBpbnQgZm9vIChpbnQgbiwgaW50IG0sIGludCByKQ0KIHsNCiAgIGludCBm bGFnID0gMDsNCiAgIGludCB2Ow0KIA0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3VuaW5pdC1wcmVkLTNfZC5jDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtM19k LmMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5k Zy91bmluaXQtcHJlZC0zX2QuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTIg KzEsMTIgQEANCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGct b3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KKy8qIHsgZGct b3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KIA0K IGludCBnOw0KIHZvaWQgYmFyKCk7DQogdm9pZCBibGFoKGludCk7DQogDQog aW50IGZvbyAoaW50IG4sIGludCBtLCBpbnQgcikNCiB7DQogICBpbnQgZmxh ZyA9IDA7DQogICBpbnQgdjsNCiANCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dj Yy5kZy91bmluaXQtcHJlZC0zX2UuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTNfZS5j CShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dW5pbml0LXByZWQtM19lLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEyICsx LDEyIEBADQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9w dGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisvKiB7IGRnLW9w dGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCiANCiBp bnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxhaChpbnQpOw0KIA0KIGlu dCBmb28gKGludCBuLCBpbnQgbSwgaW50IHIpDQogew0KICAgaW50IGZsYWcg PSAwOw0KICAgaW50IHY7DQogDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdW5pbml0LXByZWQtNF9hLmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC00X2EuYwko cmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Vu aW5pdC1wcmVkLTRfYS5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiArMSwx MiBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRp b25zICItV3VuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQorLyogeyBkZy1vcHRp b25zICItV21heWJlLXVuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQogDQogaW50 IGc7DQogdm9pZCBiYXIoKTsNCiB2b2lkIGJsYWgoaW50KTsNCiBpbnQgZm9v IChpbnQgbiwgaW50IG0sIGludCByLCBpbnQgdCkNCiB7DQogICBpbnQgZmxh ZyA9IDA7DQogICBpbnQgdjsNCiANCiAgIGlmICh0KQ0KSW5kZXg6IGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTRfYi5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0 LXByZWQtNF9iLmMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1 aXRlL2djYy5kZy91bmluaXQtcHJlZC00X2IuYwkod29ya2luZyBjb3B5KQ0K QEAgLTEsMTIgKzEsMTIgQEANCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0K LS8qIHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1PMiIgfSAqLw0K Ky8qIHsgZGctb3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1PMiIg fSAqLw0KIA0KIGludCBnOw0KIHZvaWQgYmFyKCk7DQogdm9pZCBibGFoKGlu dCk7DQogaW50IGZvbyAoaW50IG4sIGludCBtLCBpbnQgciwgaW50IHQpDQog ew0KICAgaW50IGZsYWcgPSAwOw0KICAgaW50IHY7DQogDQogICBpZiAodCkN CkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC01X2Eu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3VuaW5pdC1wcmVkLTVfYS5jCShyZXZpc2lvbiAyNjg0MjUpDQor KysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtNV9hLmMJKHdv cmtpbmcgY29weSkNCkBAIC0xLDEyICsxLDEyIEBADQogLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXpl ZCAtV25vLWF0dHJpYnV0ZXMgLU8yIiB9ICovDQorLyogeyBkZy1vcHRpb25z ICItV21heWJlLXVuaW5pdGlhbGl6ZWQgLVduby1hdHRyaWJ1dGVzIC1PMiIg fSAqLw0KIA0KIGludCBnOw0KIGludCBiYXIoKTsNCiBpbnQgYmxhaChpbnQp Ow0KIHZvaWQgdChpbnQpOw0KIA0KIHN0YXRpYyBpbnQNCiBfX2F0dHJpYnV0 ZV9fKChhbHdheXNfaW5saW5lKSkgDQogZm9vIChpbnQgbiwgaW50KiB2LCBp bnQgcikNCiB7DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0 LXByZWQtNV9iLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mv dGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC01X2IuYwkocmV2aXNpb24g MjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVk LTVfYi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMiArMSwxMiBAQA0KIC8q IHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItV3Vu aW5pdGlhbGl6ZWQgLVduby1hdHRyaWJ1dGVzIC1PMiIgfSAqLw0KKy8qIHsg ZGctb3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1Xbm8tYXR0cmli dXRlcyAtTzIiIH0gKi8NCiANCiBpbnQgZzsNCiBpbnQgYmFyKCk7DQogaW50 IGJsYWgoaW50KTsNCiB2b2lkIHQoaW50KTsNCiANCiBzdGF0aWMgaW50DQog X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIA0KIGZvbyAoaW50IG4s IGludCogdiwgaW50IHIpDQogew0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3VuaW5pdC1wcmVkLTZfYS5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtNl9hLmMJ KHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy91 bmluaXQtcHJlZC02X2EuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTMgKzEs MTMgQEANCiANCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGct b3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KKy8qIHsgZGct b3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KIA0K IGludCBnOw0KIHZvaWQgYmFyKCk7DQogdm9pZCBibGFoKGludCk7DQogDQog aW50IGZvbyAoaW50IG4sIGludCBsLCBpbnQgbSwgaW50IHIpDQogew0KICAg aW50IHY7DQogDQogICBpZiAobiAmJiBsKQ0KSW5kZXg6IGdjYy90ZXN0c3Vp dGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTZfYi5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQt Nl9iLmMJKHJldmlzaW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2dj Yy5kZy91bmluaXQtcHJlZC02X2IuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEs MTMgKzEsMTMgQEANCiANCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8q IHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KKy8q IHsgZGctb3B0aW9ucyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1PMiIgfSAq Lw0KIA0KIGludCBnOw0KIHZvaWQgYmFyKCk7DQogdm9pZCBibGFoKGludCk7 DQogDQogaW50IGZvbyAoaW50IG4sIGludCBsLCBpbnQgbSwgaW50IHIpDQog ew0KICAgaW50IHY7DQogDQogICBpZiAobikNCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy91bmluaXQtcHJlZC02X2MuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVk LTZfYy5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdW5pbml0LXByZWQtNl9jLmMJKHdvcmtpbmcgY29weSkNCkBAIC0x LDEzICsxLDEzIEBADQogDQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0v KiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisv KiB7IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0g Ki8NCiANCiBpbnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxhaChpbnQp Ow0KIA0KIGludCBmb28gKGludCBuLCBpbnQgbCwgaW50IG0sIGludCByKQ0K IHsNCiAgIGludCB2Ow0KIA0KICAgaWYgKG4gPiAxMCkNCkluZGV4OiBnY2Mv dGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC02X2QuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5p dC1wcmVkLTZfZC5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtNl9kLmMJKHdvcmtpbmcgY29weSkN CkBAIC0xLDEzICsxLDEzIEBADQogDQogLyogeyBkZy1kbyBjb21waWxlIH0g Ki8NCi0vKiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0g Ki8NCisvKiB7IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAt TzIiIH0gKi8NCiANCiBpbnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxh aChpbnQpOw0KIA0KIGludCBmb28gKGludCBuLCBpbnQgbCwgaW50IG0sIGlu dCByKQ0KIHsNCiAgIGludCB2Ow0KIA0KICAgaWYgKG4pDQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtNl9lLmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmlu aXQtcHJlZC02X2UuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTZfZS5jCSh3b3JraW5nIGNvcHkp DQpAQCAtMSwxMyArMSwxMyBAQA0KIA0KIC8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQotLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLU8yIiB9 ICovDQorLyogeyBkZy1vcHRpb25zICItV21heWJlLXVuaW5pdGlhbGl6ZWQg LU8yIiB9ICovDQogDQogaW50IGc7DQogdm9pZCBiYXIoKTsNCiB2b2lkIGJs YWgoaW50KTsNCiANCiBpbnQgZm9vIChpbnQgbiwgaW50IGwsIGludCBtLCBp bnQgcikNCiB7DQogICBpbnQgdjsNCiANCiAgIGlmIChuID4gMTApDQpJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtN19hLmMNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5k Zy91bmluaXQtcHJlZC03X2EuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTdfYS5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMSwxMyArMSwxMyBAQA0KIA0KIC8qIHsgZGctZG8gY29t cGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQg LU8yIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItV21heWJlLXVuaW5pdGlh bGl6ZWQgLU8yIiB9ICovDQogDQogaW50IGc7DQogdm9pZCBiYXIoKTsNCiB2 b2lkIGJsYWgoaW50KTsNCiANCiBpbnQgZm9vIChpbnQgbiwgaW50IGwsIGlu dCBtLCBpbnQgcikNCiB7DQogICBpbnQgdjsNCiANCiAgIGlmIChuIHx8IGwp DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtN19i LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRl L2djYy5kZy91bmluaXQtcHJlZC03X2IuYwkocmV2aXNpb24gMjY4NDI1KQ0K KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTdfYi5jCSh3 b3JraW5nIGNvcHkpDQpAQCAtMSwxMyArMSwxMyBAQA0KIA0KIC8qIHsgZGct ZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlh bGl6ZWQgLU8yIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItV21heWJlLXVu aW5pdGlhbGl6ZWQgLU8yIiB9ICovDQogDQogaW50IGc7DQogdm9pZCBiYXIo KTsNCiB2b2lkIGJsYWgoaW50KTsNCiANCiBpbnQgZm9vIChpbnQgbiwgaW50 IGwsIGludCBtLCBpbnQgcikNCiB7DQogICBpbnQgdjsNCiANCiAgIGlmIChu ID4gMTApDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXBy ZWQtN19jLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVz dHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC03X2MuYwkocmV2aXNpb24gMjY4 NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTdf Yy5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwxMyArMSwxMyBAQA0KIA0KIC8q IHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItV3Vu aW5pdGlhbGl6ZWQgLU8yIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItV21h eWJlLXVuaW5pdGlhbGl6ZWQgLU8yIiB9ICovDQogDQogaW50IGc7DQogdm9p ZCBiYXIoKTsNCiB2b2lkIGJsYWgoaW50KTsNCiANCiBpbnQgZm9vIChpbnQg biwgaW50IGwsIGludCBtLCBpbnQgcikNCiB7DQogICBpbnQgdjsNCiANCiAg IGlmIChuKQ0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1w cmVkLTdfZC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtN19kLmMJKHJldmlzaW9uIDI2 ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC03 X2QuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTMgKzEsMTMgQEANCiANCiAv KiB7IGRnLWRvIGNvbXBpbGUgIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0q LSogfSB9ICovDQotLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQg LU8yIC1tYnJhbmNoLWNvc3Q9MCIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAi LVdtYXliZS11bmluaXRpYWxpemVkIC1PMiAtbWJyYW5jaC1jb3N0PTAiIH0g Ki8NCiANCiBpbnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxhaChpbnQp Ow0KIA0KIGludCBmb28gKGludCBuLCBpbnQgbCwgaW50IG0sIGludCByKQ0K IHsNCiAgIGludCB2Ow0KIA0KICAgaWYgKG4gfHwgbCkNCkluZGV4OiBnY2Mv dGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC04X2EuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5p dC1wcmVkLThfYS5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtOF9hLmMJKHdvcmtpbmcgY29weSkN CkBAIC0xLDEzICsxLDEzIEBADQogDQogLyogeyBkZy1kbyBjb21waWxlIH0g Ki8NCi0vKiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0g Ki8NCisvKiB7IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAt TzIiIH0gKi8NCiAvKiBQaWNrIGEgcGFydGljdWxhciB0dW5pbmcgdG8gcGlu IGRvd24gQlJBTkNIX0NPU1QuICAqLw0KIC8qIHsgZGctYWRkaXRpb25hbC1v cHRpb25zICItbXR1bmU9Y29ydGV4LWExNSIgeyB0YXJnZXQgYXJtKi0qLSog fSB9ICovDQogDQogaW50IGc7DQogdm9pZCBiYXIoKTsNCiB2b2lkIGJsYWgo aW50KTsNCiANCiBpbnQgZm9vIChpbnQgbiwgaW50IGwsIGludCBtLCBpbnQg cikNCiB7DQogICBpbnQgdjsNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5k Zy91bmluaXQtcHJlZC04X2IuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLThfYi5jCShy ZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5p bml0LXByZWQtOF9iLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEzICsxLDEz IEBADQogDQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9w dGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisvKiB7IGRnLW9w dGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCiANCiBp bnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxhaChpbnQpOw0KIA0KIGlu dCBmb28gKGludCBuLCBpbnQgbCwgaW50IG0sIGludCByKQ0KIHsNCiAgIGlu dCB2Ow0KIA0KICAgaWYgKG4gPCAxMCB8fCBtID4gMTAwIHx8IHIgPCAyMCB8 fCBsKQ0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVk LThfYy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtOF9jLmMJKHJldmlzaW9uIDI2ODQy NSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtcHJlZC04X2Mu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTMgKzEsMTMgQEANCiANCiAvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLVd1bmlu aXRpYWxpemVkIC1PMiIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLVdtYXli ZS11bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KIA0KIGludCBnOw0KIHZvaWQg YmFyKCk7DQogdm9pZCBibGFoKGludCk7DQogDQogaW50IGZvbyAoaW50IG4s IGludCBsLCBpbnQgbSwgaW50IHIpDQogew0KICAgaW50IHY7DQogDQogICBp ZiAobiA8IDEwICYmIG0gPiAxMDAgICYmIHIgPCAyMCApDQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtOF9kLmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmlu aXQtcHJlZC04X2QuYwkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLThfZC5jCSh3b3JraW5nIGNvcHkp DQpAQCAtMSwxMyArMSwxMyBAQA0KIA0KIC8qIHsgZGctZG8gY29tcGlsZSAg eyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8NCi0vKiB7IGRn LW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIgLW1icmFuY2gtY29zdD0w IiB9ICovDQorLyogeyBkZy1vcHRpb25zICItV21heWJlLXVuaW5pdGlhbGl6 ZWQgLU8yIC1tYnJhbmNoLWNvc3Q9MCIgfSAqLw0KIA0KIGludCBnOw0KIHZv aWQgYmFyKCk7DQogdm9pZCBibGFoKGludCk7DQogDQogaW50IGZvbyAoaW50 IG4sIGludCBsLCBpbnQgbSwgaW50IHIpDQogew0KICAgaW50IHY7DQogDQog ICBpZiAobiB8fCBtIHx8IHIgfHwgbCkNCkluZGV4OiBnY2MvdGVzdHN1aXRl L2djYy5kZy91bmluaXQtcHJlZC05X2EuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1wcmVkLTlf YS5jCShyZXZpc2lvbiAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdW5pbml0LXByZWQtOV9hLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEz ICsxLDEzIEBADQogDQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7 IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIiIH0gKi8NCisvKiB7 IGRnLW9wdGlvbnMgIi1XbWF5YmUtdW5pbml0aWFsaXplZCAtTzIiIH0gKi8N CiANCiBpbnQgZzsNCiB2b2lkIGJhcigpOw0KIHZvaWQgYmxhaChpbnQpOw0K IA0KIGludCBmb28gKGludCBuLCBpbnQgbCwgaW50IG0sIGludCByKQ0KIHsN CiAgIGludCB2Ow0KIA0KICAgaWYgKCAobiA8IDEwKSAmJiAobSA9PSBsKSAg JiYgKHIgPCAyMCkgKQ0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Vu aW5pdC1wcmVkLTlfYi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pbml0LXByZWQtOV9iLmMJKHJldmlz aW9uIDI2ODQyNSkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQt cHJlZC05X2IuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTMgKzEsMTMgQEAN CiANCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KLS8qIHsgZGctb3B0aW9u cyAiLVd1bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KKy8qIHsgZGctb3B0aW9u cyAiLVdtYXliZS11bmluaXRpYWxpemVkIC1PMiIgfSAqLw0KIA0KIGludCBn Ow0KIHZvaWQgYmFyKCk7DQogdm9pZCBibGFoKGludCk7DQogDQogaW50IGZv byAoaW50IG4sIGludCBsLCBpbnQgbSwgaW50IHIpDQogew0KICAgaW50IHY7 DQogDQogICBpZiAoIChuIDwgMTApICYmIChtICE9IDEwMCkgICYmIChyIDwg MjApICkNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy91bmluaXQtc3Vw cHJlc3NfMi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdW5pbml0LXN1cHByZXNzXzIuYwkocmV2aXNpb24g MjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3VuaW5pdC1zdXBw cmVzc18yLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDEyICsxLDEyIEBADQog LyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1m bm8tdHJlZS1kb21pbmF0b3Itb3B0cyAtZm5vLXRyZWUtY2NwIC1mbm8tdHJl ZS12cnAgLWZuby10cmVlLWZyZSAtZm5vLXRyZWUtcHJlIC1mbm8tY29kZS1o b2lzdGluZyAtTzIgLVd1bmluaXRpYWxpemVkIC1XZXJyb3I9dW5pbml0aWFs aXplZCAtV25vLWVycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQiIH0gKi8NCisv KiB7IGRnLW9wdGlvbnMgIi1mbm8tdHJlZS1kb21pbmF0b3Itb3B0cyAtZm5v LXRyZWUtY2NwIC1mbm8tdHJlZS12cnAgLWZuby10cmVlLWZyZSAtZm5vLXRy ZWUtcHJlIC1mbm8tY29kZS1ob2lzdGluZyAtTzIgLVd1bmluaXRpYWxpemVk IC1XbWF5YmUtdW5pbml0aWFsaXplZCAtV2Vycm9yPXVuaW5pdGlhbGl6ZWQg LVduby1lcnJvcj1tYXliZS11bmluaXRpYWxpemVkIiB9ICovDQogdm9pZCBi bGFoKCk7DQogdm9pZCBiYXIgKGludCk7DQogaW50IGdmbGFnOw0KIA0KIHZv aWQgZm9vKCkNCiB7DQogICAgaW50IHY7DQogICAgaWYgKGdmbGFnKQ0KICAg ICAgdiA9IDEwOw0KIA0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvcHIyNTkyMy5mOTANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBn Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMjU5MjMuZjkwCShyZXZpc2lv biAyNjg0MjUpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjI1 OTIzLmY5MAkod29ya2luZyBjb3B5KQ0KQEAgLTEsMTIgKzEsMTIgQEANCiAh IHsgZGctZG8gY29tcGlsZSB9DQotISB7IGRnLW9wdGlvbnMgIi1PIC1XdW5p bml0aWFsaXplZCIgfQ0KKyEgeyBkZy1vcHRpb25zICItTyAtV21heWJlLXVu aW5pdGlhbGl6ZWQiIH0NCiANCiBtb2R1bGUgZm9vDQogaW1wbGljaXQgbm9u ZQ0KIA0KICAgdHlwZSBiYXINCiAgICAgaW50ZWdlciA6OiB5cg0KICAgZW5k IHR5cGUNCiANCiBjb250YWlucw0KIA0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvcHIzOTY2Ni0yLmY5MA0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHIzOTY2Ni0y LmY5MAkocmV2aXNpb24gMjY4NDI1KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvcHIzOTY2Ni0yLmY5MAkod29ya2luZyBjb3B5KQ0KQEAgLTEs MTMgKzEsMTMgQEANCiAhIFBSIG1pZGRsZS1lbmQvMzk2NjYNCiAhIHsgZGct ZG8gY29tcGlsZSB9DQotISB7IGRnLW9wdGlvbnMgIi1PMiAtV3VuaW5pdGlh bGl6ZWQiIH0NCishIHsgZGctb3B0aW9ucyAiLU8yIC1XbWF5YmUtdW5pbml0 aWFsaXplZCIgfQ0KIA0KIEZVTkNUSU9OIGYobikNCiAgIElOVEVHRVIsIElO VEVOVChpbikgOjogbg0KICAgUkVBTCAgICAgICAgICAgICAgICA6OiBmDQog DQogICBTRUxFQ1QgQ0FTRSAobikNCiAgICAgQ0FTRSAoOi0xKTsgZiA9IC0x LjANCiAgICAgQ0FTRSAoMCk7ICAgZiA9ICAwLjANCiAgICAgQ0FTRSAoMjop OyAgZiA9ICAxLjANCiAgIEVORCBTRUxFQ1QNCg== --8323329-225021371-1549020778=:7849--